diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/acinclude.m4 ./bfd/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/acinclude.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/acinclude.m4	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 dnl
-dnl   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+dnl   Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aclocal.m4 ./bfd/aclocal.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aclocal.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aclocal.m4	2021-12-16 01:57:38.000000000 +0000
@@ -1170,6 +1170,7 @@ AC_SUBST([am__untar])
 m4_include([../config/acx.m4])
 m4_include([../config/depstand.m4])
 m4_include([../config/gettext-sister.m4])
+m4_include([../config/jobserver.m4])
 m4_include([../config/largefile.m4])
 m4_include([../config/lead-dot.m4])
 m4_include([../config/nls.m4])
@@ -1177,7 +1178,6 @@ m4_include([../config/override.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([../libtool.m4])
 m4_include([../ltoptions.m4])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aix386-core.c ./bfd/aix386-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aix386-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aix386-core.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,7 +1,7 @@
 /* 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.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
    Written by Minh Tran-Le <TRANLE@INTELLICORP.COM>.
    Converted to back end form by Ian Lance Taylor <ian@cygnus.com>.
 
@@ -65,13 +65,13 @@ struct trad_core_struct
   asection *sections[MAX_CORE_SEGS];
 };
 
-static const bfd_target *
+static bfd_cleanup
 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;
+  size_t amt;
   struct corehdr *core;
   struct mergem
   {
@@ -189,7 +189,7 @@ aix386_core_file_p (bfd *abfd)
       n++;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 static char *
@@ -239,6 +239,7 @@ const bfd_target core_aix386_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,
   NO_GET, NO_GETS, NO_PUT,
   NO_GET, NO_GETS, NO_PUT,	/* data */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aix5ppc-core.c ./bfd/aix5ppc-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aix5ppc-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aix5ppc-core.c	2021-12-16 01:57:38.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-2021 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.  */
@@ -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,7 +135,7 @@ 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;
@@ -150,7 +149,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 +163,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 +175,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;
+	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 +202,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;
+	  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,25 +227,25 @@ 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)
@@ -289,14 +288,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 +328,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout32.c ./bfd/aout32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aout32.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout64.c ./bfd/aout64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aout64.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-cris.c ./bfd/aout-cris.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-cris.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aout-cris.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for CRIS a.out binaries.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-ns32k.c ./bfd/aout-ns32k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-ns32k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aout-ns32k.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Contributed by Ian Dall (idall@eleceng.adelaide.edu.au).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,7 +31,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 +79,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, 0, 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, 1, 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, 2, 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, 0, 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, 1, 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, 2, 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, 0, 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, 1, 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, 2, 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, 0, 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, 1, 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, 2, 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, 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),
 };
 
 #define CTOR_TABLE_RELOC_HOWTO(BFD) (MY (howto_table) + 14)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-target.h ./bfd/aout-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-target.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aout-target.h	2021-12-16 01:57:38.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-2021 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,20 +121,20 @@ 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)
     {
@@ -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);
@@ -597,11 +598,11 @@ MY_bfd_final_link (bfd *abfd, struct bfd
 
 /* Handle closing of a BFD including the resource-releasing parts.  */
 
-static bfd_boolean
+static bool
 MY_close_and_cleanup (bfd *abfd)
 {
   if (!MY_bfd_free_cached_info (abfd))
-    return FALSE;
+    return false;
 
   return _bfd_generic_close_and_cleanup (abfd);
 }
@@ -659,6 +660,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-tic30.c ./bfd/aout-tic30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aout-tic30.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aoutx.h ./bfd/aoutx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/aoutx.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/aoutx.h	2021-12-16 01:57:38.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-2021 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,  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),
 #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, 2, 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,  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),
 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,  2,	 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,  2,	 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,  2,	 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;
 }
 
 /*
@@ -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,7 +1265,7 @@ 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;
 	}
     }
 
@@ -1273,15 +1273,15 @@ NAME (aout, set_section_contents) (bfd *
     {
       if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
 	  || bfd_bwrite (location, count, abfd) != count)
-	return FALSE;
+	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;
@@ -1330,7 +1325,7 @@ 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;
+	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,7 +1349,7 @@ aout_get_external_symbols (bfd *abfd)
 	{
 	  strings = (char *) bfd_malloc (stringsize + 1);
 	  if (strings == NULL)
-	    return FALSE;
+	    return false;
 
 	  if (stringsize >= BYTES_IN_WORD)
 	    {
@@ -1364,12 +1359,12 @@ aout_get_external_symbols (bfd *abfd)
 	      if (bfd_bread (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';
+      memset (strings, 0, BYTES_IN_WORD);
 
       /* Ensure that the string buffer is NUL terminated.  */
       strings[stringsize] = 0;
@@ -1378,7 +1373,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 +1381,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 +1416,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 +1547,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 +1579,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 +1613,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 +1662,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 +1670,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 +1680,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 +1716,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 +1726,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 +1748,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 +1771,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 +1796,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 +1815,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 +1826,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 +1843,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;
+    return false;
 
   return _bfd_stringtab_emit (abfd, tab);
 }
 
-bfd_boolean
+bool
 NAME (aout, write_syms) (bfd *abfd)
 {
   unsigned int count ;
@@ -1871,16 +1866,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);
@@ -1915,11 +1910,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
@@ -1961,7 +1956,24 @@ 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.  */
+
+  switch (bfd_get_reloc_size (g->howto))
+    {
+    default:
+      _bfd_error_handler (_("%pB: unsupported AOUT relocation size: %d"),
+			  abfd, bfd_get_reloc_size (g->howto));
+      bfd_set_error (bfd_error_bad_value);
+      return;
+    case 1:
+    case 2:
+    case 4:
+      r_length = g->howto->size;	/* Size as a power of two.  */
+      break;
+    case 8:
+      r_length = 3;
+      break;
+    }
+
   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;
@@ -2286,7 +2298,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 +2311,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 +2325,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 +2370,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 +2386,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 +2409,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,9 +2427,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_std_reloc_out (abfd, *generic,
 				 (struct reloc_std_external *) natptr);
@@ -2439,11 +2439,11 @@ NAME (aout, squirt_out_relocs) (bfd *abf
   if (bfd_bwrite ((void *) 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.  */
@@ -2613,7 +2613,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 +2646,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 +2664,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 +2674,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 +2697,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 +2827,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 +2836,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 +2868,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 +2887,7 @@ NAME (aout, find_nearest_line) (bfd *abf
       *functionname_ptr = buf;
     }
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -2901,16 +2900,16 @@ NAME (aout, sizeof_headers) (bfd *abfd,
 /* Free all information we have cached for this BFD.  We can always
    read it again later if we need it.  */
 
-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;
+    return true;
 
-#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
+#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
   BFCI_FREE (obj_aout_symbols (abfd));
 #ifdef USE_MMAP
   obj_aout_external_syms (abfd) = 0;
@@ -2925,7 +2924,7 @@ NAME (aout, bfd_free_cached_info) (bfd *
     BFCI_FREE (o->relocation);
 #undef BFCI_FREE
 
-  return TRUE;
+  return true;
 }
 
 /* a.out link code.  */
@@ -2954,7 +2953,7 @@ NAME (aout, link_hash_newfunc) (struct b
   if (ret)
     {
       /* Set local fields.  */
-      ret->written = FALSE;
+      ret->written = false;
       ret->indx = -1;
     }
 
@@ -2963,7 +2962,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 +2979,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 +2997,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 +3016,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 +3037,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 +3065,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 +3124,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 +3159,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 +3195,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 +3223,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 +3249,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 +3276,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 +3316,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 +3377,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 +3405,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 +3416,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 +3454,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 +3495,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 +3527,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 +3622,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 +3632,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 +3654,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 +3672,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 +3714,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 ();
@@ -3741,12 +3739,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 +3757,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 +3780,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 +3791,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 +3808,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 +3829,16 @@ 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;
+	if (bfd_get_reloc_size (howto) != 8)
+	  r_length = howto->size;	/* Size as a power of two.  */
+	else
+	  r_length = 3;
 
 	PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
 	if (bfd_header_big_endian (flaginfo->output_bfd))
@@ -3880,12 +3881,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 +3909,7 @@ aout_link_reloc_link_order (struct aout_
 					 (file_ptr) p->offset, size);
 	  free (buf);
 	  if (! ok)
-	    return FALSE;
+	    return false;
 	}
     }
   else
@@ -3947,7 +3948,7 @@ 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;
+    return false;
 
   *reloff_ptr += obj_reloc_entry_size (flaginfo->output_bfd);
 
@@ -3958,7 +3959,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.  */
@@ -3980,7 +3981,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 +3989,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;
@@ -4085,7 +4085,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)
@@ -4145,10 +4145,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 +4220,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 +4243,7 @@ aout_link_input_section_std (struct aout
 		relocation = 0;
 	      else
 		{
-		  hundef = TRUE;
+		  hundef = true;
 		  relocation = 0;
 		}
 	    }
@@ -4261,12 +4261,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 +4283,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 +4324,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 +4337,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;
@@ -4406,7 +4405,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)
@@ -4482,10 +4481,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 +4561,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 +4585,7 @@ aout_link_input_section_ext (struct aout
 		relocation = 0;
 	      else
 		{
-		  hundef = TRUE;
+		  hundef = true;
 		  relocation = 0;
 		}
 	    }
@@ -4659,12 +4658,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 +4684,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 +4739,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 +4759,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
@@ -4773,7 +4772,7 @@ aout_link_input_section (struct aout_fin
 	{
 	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
 	      || bfd_bread (relocs, rel_size, input_bfd) != rel_size)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -4783,14 +4782,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 +4798,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;
+	return false;
       if (bfd_bwrite (relocs, rel_size, flaginfo->output_bfd) != rel_size)
-	return FALSE;
+	return false;
       *reloff_ptr += rel_size;
 
       /* Assert that the relocs have not run into the symbols, and
@@ -4820,13 +4819,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 +4839,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 +4853,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 +4874,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 +4886,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 +4913,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 +4962,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 +5018,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 +5034,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 +5126,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 +5142,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 +5206,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 +5222,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 +5267,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 +5276,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 +5295,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)
 	  != 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 +5323,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 +5340,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 +5348,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 +5357,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 +5370,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 +5384,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 +5401,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 +5522,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 +5549,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 +5559,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 +5580,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 +5624,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.  */
@@ -5683,18 +5672,14 @@ NAME (aout, final_link) (bfd *abfd,
 	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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/arc-got.h ./bfd/arc-got.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/arc-got.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/arc-got.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARC-specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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,16 +250,16 @@ 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;
 }
 
 
@@ -284,7 +284,7 @@ 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))))
@@ -296,7 +296,7 @@ relocate_fix_got_relocs_for_got_info (st
 
       if (h != NULL)
 	{
-	  // TODO: This should not be here.
+	  /* TODO: This should not be here.  */
 	  reloc_data->sym_value = h->root.u.def.value;
 	  reloc_data->sym_section = h->root.u.def.section;
 
@@ -425,7 +425,7 @@ relocate_fix_got_relocs_for_got_info (st
 	      BFD_ASSERT (0);
 	      break;
 	    }
-	  entry->processed = TRUE;
+	  entry->processed = true;
 	}
     }
 
@@ -460,7 +460,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 +515,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/archive64.c ./bfd/archive64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/archive64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/archive64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for 64-bit archives.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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);
   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;
+    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);
 
+  filesize = bfd_get_file_size (abfd);
+  if (filesize != 0 && parsed_size > filesize)
+    {
+      bfd_set_error (bfd_error_malformed_archive);
+      return false;
+    }
+
   if (bfd_bread (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
+  raw_armap = (bfd_byte *) _bfd_alloc_and_read (abfd, ptrsize, ptrsize);
+  if (raw_armap == NULL
       || 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;
+      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,7 +185,7 @@ _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;
+    return false;
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
 		    time (NULL));
   /* This, at least, is what Intel coff sets the values to.: */
@@ -195,11 +198,11 @@ _bfd_archive_64_bit_write_armap (bfd *ar
 
   if (bfd_bwrite (&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;
+    return false;
 
   /* Two passes, first write the file offsets for each symbol -
      remembering that each offset is on a two byte boundary.  */
@@ -220,7 +223,7 @@ _bfd_archive_64_bit_write_armap (bfd *ar
 	{
 	  bfd_putb64 ((bfd_vma) archive_member_file_ptr, buf);
 	  if (bfd_bwrite (buf, 8, arch) != 8)
-	    return FALSE;
+	    return false;
 	}
 
       /* Add size of this archive entry */
@@ -237,7 +240,7 @@ _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;
+	return false;
     }
 
   /* The spec says that this should be padded to an 8 byte boundary.
@@ -245,9 +248,9 @@ _bfd_archive_64_bit_write_armap (bfd *ar
   while (padding != 0)
     {
       if (bfd_bwrite ("", 1, arch) != 1)
-	return FALSE;
+	return false;
       --padding;
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/archive.c ./bfd/archive.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/archive.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/archive.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for archive files (libraries).
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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.
@@ -172,7 +172,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,10 +186,10 @@ _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);
@@ -197,7 +197,7 @@ _bfd_ar_sizepad (char *p, size_t n, bfd_
   if (len > n)
     {
       bfd_set_error (bfd_error_file_too_big);
-      return FALSE;
+      return false;
     }
   if (len < n)
     {
@@ -206,17 +206,17 @@ _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;
+    return false;
 
   /* Already cleared by bfd_zalloc above.
      bfd_ardata (abfd)->cache = NULL;
@@ -226,7 +226,7 @@ _bfd_generic_mkarchive (bfd *abfd)
      bfd_ardata (abfd)->extended_names_size = 0;
      bfd_ardata (abfd)->tdata = NULL;  */
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -284,18 +284,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 +349,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 +361,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 +375,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 +403,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 +413,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);
@@ -488,6 +488,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd,
   bfd_size_type 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;
@@ -538,11 +539,19 @@ _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
@@ -586,13 +595,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 +628,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;
@@ -728,8 +737,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;
     }
 
@@ -842,12 +850,12 @@ _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)
     {
@@ -916,7 +924,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 +932,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 +955,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 +1028,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 +1051,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;
-    }
+    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_bread (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 +1132,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);
 
   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;
+    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
@@ -1176,20 +1199,20 @@ bfd_slurp_armap (bfd *abfd)
       char extname[21];
 
       if (bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
-	return FALSE;
+	return false;
       /* Read the extended name.  We know its length.  */
       if (bfd_bread (extname, 20, abfd) != 20)
-	return FALSE;
+	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,48 +1227,54 @@ 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)
     {
+      struct areltdata *namedata;
+      bfd_size_type amt;
+      ufile_ptr filesize;
+
       if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0)
-	return FALSE;
+	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)
@@ -1256,6 +1285,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 +1314,7 @@ _bfd_slurp_extended_name_table (bfd *abf
 
       free (namedata);
     }
-  return TRUE;
+  return true;
 }
 
 #ifdef VMS
@@ -1438,8 +1468,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 +1497,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 +1536,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 +1562,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 +1581,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 +1596,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 +1634,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 +1653,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 +1661,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 +1670,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 +1679,7 @@ _bfd_construct_extended_name_table (bfd
 	{
 	  normal = normalize (abfd, filename);
 	  if (normal == NULL)
-	    return FALSE;
+	    return false;
 	}
 
       thislen = strlen (normal);
@@ -1664,16 +1693,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 +1713,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 +1739,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 +1760,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;
+    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 +1785,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,13 +1793,13 @@ _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;
+	return false;
 
       if (bfd_bwrite (fullname, len, archive) != len)
-	return FALSE;
+	return false;
 
       if (len & 3)
 	{
@@ -1787,18 +1807,18 @@ _bfd_bsd44_write_ar_hdr (bfd *archive, b
 
 	  len = 4 - (len & 3);
 	  if (bfd_bwrite (pad, len, archive) != len)
-	    return FALSE;
+	    return false;
 	}
     }
   else
     {
       if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
-	return FALSE;
+	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 +1842,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,7 +1853,7 @@ 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)
     {
@@ -1855,7 +1867,7 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, c
     }
   else if (stat (filename, &status) != 0)
     {
-      bfd_set_error (bfd_error_system_call);
+      bfd_set_input_error (member, bfd_error_system_call);
       return NULL;
     }
 
@@ -2083,16 +2095,16 @@ _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;
@@ -2117,39 +2129,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;
+    return false;
   armag = ARMAG;
   if (bfd_is_thin_archive (arch))
     armag = ARMAGT;
   wrote = bfd_bwrite (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,16 +2175,16 @@ _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)
 	   != sizeof (struct ar_hdr))
 	  || bfd_bwrite (etable, elength, arch) != elength)
-	return FALSE;
+	return false;
       if ((elength % 2) == 1)
 	{
 	  if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2183,7 +2197,7 @@ _bfd_write_archive_contents (bfd *arch)
 
       /* Write ar header.  */
       if (!_bfd_write_ar_hdr (arch, current))
-	return FALSE;
+	return false;
       if (bfd_is_thin_archive (arch))
 	continue;
       if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
@@ -2191,26 +2205,22 @@ _bfd_write_archive_contents (bfd *arch)
 
       while (remaining)
 	{
-	  unsigned int amt = DEFAULT_BUFFERSIZE;
+	  size_t amt = DEFAULT_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;
-	    }
+	    goto input_err;
 	  if (bfd_bwrite (buffer, amt, arch) != amt)
-	    return FALSE;
+	    return false;
 	  remaining -= amt;
 	}
 
       if ((arelt_size (current) % 2) == 1)
 	{
 	  if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2233,16 +2243,16 @@ _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;
+  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 +2264,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 +2286,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 +2303,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 +2317,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)
@@ -2354,7 +2363,7 @@ _bfd_compute_and_write_armap (bfd *arch,
 				     "__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 +2398,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,7 +2482,7 @@ _bfd_bsd_write_armap (bfd *arch,
     {
       struct stat statbuf;
 
-      if (stat (arch->filename, &statbuf) == 0)
+      if (stat (bfd_get_filename (arch), &statbuf) == 0)
 	bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime
 					      + ARMAP_TIME_OFFSET);
       uid = getuid();
@@ -2493,14 +2498,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)
       != 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;
+    return false;
 
   firstreal = first;
   current = arch->archive_head;
@@ -2531,7 +2536,7 @@ _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;
@@ -2539,19 +2544,19 @@ _bfd_bsd_write_armap (bfd *arch,
       H_PUT_32 (arch, firstreal, buf + BSD_SYMDEF_OFFSET_SIZE);
       if (bfd_bwrite (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;
+    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;
+	return false;
     }
 
   /* The spec sez this should be a newline.  But in order to be
@@ -2559,10 +2564,10 @@ _bfd_bsd_write_armap (bfd *arch,
   if (padit)
     {
       if (bfd_bwrite ("", 1, arch) != 1)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* At the end of archive file handling, update the timestamp in the
@@ -2571,7 +2576,7 @@ _bfd_bsd_write_armap (bfd *arch,
    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 +2584,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,11 +2594,11 @@ _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;
 
   /* Update the timestamp.  */
   bfd_ardata (arch)->armap_timestamp = archstat.st_mtime + ARMAP_TIME_OFFSET;
@@ -2613,11 +2618,11 @@ _bfd_archive_bsd_update_armap_timestamp
       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 +2638,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 +2701,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));
@@ -2709,10 +2714,10 @@ _bfd_coff_write_armap (bfd *arch,
   /* Write the ar header for this item and the number of symbols.  */
   if (bfd_bwrite (&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 +2741,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);
@@ -2759,7 +2764,7 @@ _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;
+	return false;
     }
 
   /* The spec sez this should be a newline.  But in order to be
@@ -2767,13 +2772,13 @@ _bfd_coff_write_armap (bfd *arch,
   if (padit)
     {
       if (bfd_bwrite ("", 1, arch) != 1)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_noarchive_write_armap
     (bfd *arch ATTRIBUTE_UNUSED,
      unsigned int elength ATTRIBUTE_UNUSED,
@@ -2781,7 +2786,7 @@ _bfd_noarchive_write_armap
      unsigned int orl_count ATTRIBUTE_UNUSED,
      int stridx ATTRIBUTE_UNUSED)
 {
-  return TRUE;
+  return true;
 }
 
 static int
@@ -2817,7 +2822,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)
@@ -2847,5 +2852,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/archures.c ./bfd/archures.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/archures.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/archures.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for architectures.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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.
@@ -211,10 +211,6 @@ DESCRIPTION
 .  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 +228,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
@@ -355,7 +350,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 +411,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
@@ -506,10 +501,25 @@ DESCRIPTION
 .  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.  *}
@@ -520,6 +530,7 @@ 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
 .  bfd_arch_nios2,     {* Nios II.  *}
 .#define bfd_mach_nios2		0
@@ -543,6 +554,7 @@ DESCRIPTION
 .#define bfd_mach_ck803		5
 .#define bfd_mach_ck807		6
 .#define bfd_mach_ck810		7
+.#define bfd_mach_ck860		8
 .  bfd_arch_last
 .  };
 */
@@ -569,17 +581,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;
 .
@@ -651,7 +662,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 +678,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;
@@ -756,7 +765,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,
@@ -843,7 +851,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;
@@ -883,7 +891,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 +904,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;
 
@@ -937,7 +945,7 @@ DESCRIPTION
 
 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 +974,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 +984,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 +1106,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 +1114,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 +1127,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 +1145,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 +1164,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 +1294,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 +1440,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 +1451,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 +1460,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/arc-plt.def ./bfd/arc-plt.def
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/arc-plt.def	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/arc-plt.def	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Arc V2 Related PLT entries.
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/arc-plt.h ./bfd/arc-plt.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/arc-plt.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/arc-plt.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARC-specific header file for PLT support.
-   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd.c ./bfd/bfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/bfd.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic BFD library interface and support routines.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -85,12 +85,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;
 .
@@ -194,6 +188,12 @@ CODE_FRAGMENT
 .   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
 .   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
 .
+.  {* 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;
+.
 .  {* Is the file descriptor being cached?  That is, can it be closed as
 .     needed, and re-opened when accessed later?  *}
 .  unsigned int cacheable : 1;
@@ -245,13 +245,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
@@ -283,7 +286,7 @@ CODE_FRAGMENT
 .
 .  {* 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 +297,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.  *}
@@ -364,7 +372,7 @@ CODE_FRAGMENT
 .  return abfd->filename;
 .}
 .
-.static inline bfd_boolean
+.static inline bool
 .bfd_get_cacheable (const bfd *abfd)
 .{
 .  return abfd->cacheable;
@@ -412,13 +420,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 +439,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;
 .}
@@ -574,7 +582,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;
@@ -783,8 +791,8 @@ bfd_errmsg (bfd_error_type error_tag)
       char *buf;
       const char *msg = bfd_errmsg (input_error);
 
-      if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
-	  != -1)
+      if (asprintf (&buf, _(bfd_errmsgs [error_tag]),
+		    bfd_get_filename (input_bfd), msg) != -1)
 	return buf;
 
       /* Ick, what to do on out of memory?  */
@@ -1034,12 +1042,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 +1057,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':
@@ -1110,10 +1106,10 @@ _bfd_doprnt (FILE *stream, const char *f
 		  else if (abfd->my_archive
 			   && !bfd_is_thin_archive (abfd->my_archive))
 		    result = fprintf (stream, "%s(%s)",
-				      abfd->my_archive->filename,
-				      abfd->filename);
+				      bfd_get_filename (abfd->my_archive),
+				      bfd_get_filename (abfd));
 		  else
-		    result = fprintf (stream, "%s", abfd->filename);
+		    result = fprintf (stream, "%s", bfd_get_filename (abfd));
 		}
 	      else
 		PRINT_TYPE (void *, p);
@@ -1263,11 +1259,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 +1274,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':
@@ -1607,7 +1593,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 +1608,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
@@ -1738,7 +1724,7 @@ 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
@@ -1749,7 +1735,7 @@ bfd_get_sign_extend_vma (bfd *abfd)
       || 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,7 +1747,7 @@ 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}.
@@ -1770,11 +1756,11 @@ 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;
 }
 
 /*
@@ -1898,10 +1884,8 @@ bfd_scan_vma (const char *string, const
   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)
     {
@@ -1962,7 +1946,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 +1969,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 +1990,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}.
@@ -2058,7 +2042,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))
@@ -2123,7 +2108,7 @@ DESCRIPTION
 .
 .extern bfd_byte *bfd_get_relocated_section_contents
 .  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-.   bfd_boolean, asymbol **);
+.   bool, asymbol **);
 .
 
 */
@@ -2133,12 +2118,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)
     {
@@ -2156,33 +2141,34 @@ bfd_get_relocated_section_contents (bfd
 
 /* 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 +2181,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)
@@ -2249,7 +2235,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 +2246,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 +2262,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;
 }
 
 /*
@@ -2325,55 +2311,12 @@ 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 *, bool);
 
 DESCRIPTION
 	Returns the common page size, in bytes, as determined by
@@ -2384,7 +2327,7 @@ RETURNS
 */
 
 bfd_vma
-bfd_emul_get_commonpagesize (const char *emul, bfd_boolean relro)
+bfd_emul_get_commonpagesize (const char *emul, bool relro)
 {
   const bfd_target *target;
 
@@ -2405,31 +2348,6 @@ bfd_emul_get_commonpagesize (const char
 
 /*
 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 +2367,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 +2399,7 @@ bfd_demangle (bfd *abfd, const char *nam
 
   res = cplus_demangle (name, options);
 
-  if (alloc != NULL)
-    free (alloc);
+  free (alloc);
 
   if (res == NULL)
     {
@@ -2540,59 +2457,60 @@ void
 bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
 			       asection *sec)
 {
-  if ((abfd->flags & BFD_COMPRESS) != 0)
+  if ((abfd->flags & BFD_COMPRESS) == 0)
+    abort ();
+
+  switch (bfd_get_flavour (abfd))
     {
-      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+    case bfd_target_elf_flavour:
+      if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
 	{
-	  if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
-	    {
-	      const struct elf_backend_data *bed
-		= get_elf_backend_data (abfd);
+	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+	  struct bfd_elf_section_data * esd = elf_section_data (sec);
 
-	      /* Set the SHF_COMPRESSED bit.  */
-	      elf_section_flags (sec) |= SHF_COMPRESSED;
+	  /* 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);
-		}
+	  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);
+	      esd->this_hdr.sh_addralign = 4;
 	    }
 	  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);
+	      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);
+	      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;
     }
-  else
-    abort ();
 }
 
 /*
@@ -2600,7 +2518,7 @@ bfd_update_compression_header (bfd *abfd
    bfd_check_compression_header
 
    SYNOPSIS
-	bfd_boolean bfd_check_compression_header
+	bool bfd_check_compression_header
 	  (bfd *abfd, bfd_byte *contents, asection *sec,
 	  bfd_size_type *uncompressed_size,
 	  unsigned int *uncompressed_alignment_power);
@@ -2615,7 +2533,7 @@ RETURNS
 	Return TRUE if the compression header is valid.
 */
 
-bfd_boolean
+bool
 bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
 			      asection *sec,
 			      bfd_size_type *uncompressed_size,
@@ -2645,11 +2563,11 @@ bfd_check_compression_header (bfd *abfd,
 	{
 	  *uncompressed_size = chdr.ch_size;
 	  *uncompressed_alignment_power = bfd_log2 (chdr.ch_addralign);
-	  return TRUE;
+	  return true;
 	}
     }
 
-  return FALSE;
+  return false;
 }
 
 /*
@@ -2718,7 +2636,7 @@ bfd_convert_section_size (bfd *ibfd, sec
     return size;
 
   /* Convert GNU property size.  */
-  if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
+  if (startswith (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
     return _bfd_elf_convert_gnu_property_size (ibfd, obfd);
 
   /* Do nothing if input file will be decompressed.  */
@@ -2744,7 +2662,7 @@ FUNCTION
 	bfd_convert_section_contents
 
 SYNOPSIS
-	bfd_boolean bfd_convert_section_contents
+	bool bfd_convert_section_contents
 	  (bfd *ibfd, asection *isec, bfd *obfd,
 	   bfd_byte **ptr, bfd_size_type *ptr_size);
 
@@ -2756,38 +2674,44 @@ DESCRIPTION
 	function, and the new size written to @var{ptr_size}.
 */
 
-bfd_boolean
+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;
-  bfd_boolean use_memmove;
+  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;
+    return true;
 
-  /* Do nothing if ELF classes of input and output are the same. */
+  /* 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;
+    return true;
 
   /* Convert GNU properties.  */
-  if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
+  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;
+    return true;
 
-  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
+  /* 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;
+    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;
 
@@ -2803,7 +2727,13 @@ bfd_convert_section_contents (bfd *ibfd,
 
       ohdr_size = sizeof (Elf64_External_Chdr);
 
-      use_memmove = FALSE;
+      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
     {
@@ -2813,7 +2743,7 @@ bfd_convert_section_contents (bfd *ibfd,
       chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
 
       ohdr_size = sizeof (Elf32_External_Chdr);
-      use_memmove = TRUE;
+      use_memmove = true;
     }
 
   size = bfd_section_size (isec) - ihdr_size + ohdr_size;
@@ -2821,7 +2751,7 @@ bfd_convert_section_contents (bfd *ibfd,
     {
       contents = (bfd_byte *) bfd_malloc (size);
       if (contents == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Write out the output compression header.  */
@@ -2852,5 +2782,16 @@ bfd_convert_section_contents (bfd *ibfd,
     }
 
   *ptr_size = size;
-  return TRUE;
+  return true;
+}
+
+/* Get the linker information.  */
+
+struct bfd_link_info *
+_bfd_get_link_info (bfd *abfd)
+{
+  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+    return NULL;
+
+  return elf_link_info (abfd);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd-in2.h ./bfd/bfd-in2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd-in2.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/bfd-in2.h	2021-12-16 01:57:38.000000000 +0000
@@ -7,7 +7,7 @@
 
 /* Main header file for the bfd library -- portable access to object files.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -41,9 +41,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 +65,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@
 
@@ -100,23 +85,7 @@ 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
@@ -137,20 +106,19 @@ 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 POISON_BFD_BOOLEAN
+# pragma GCC poison bfd_boolean
+#else
+# define bfd_boolean bool
+# undef FALSE
+# undef TRUE
+# define FALSE 0
+# define TRUE 1
+#endif
 
 #ifdef BFD64
 
@@ -362,7 +330,7 @@ struct bfd_hash_table
 };
 
 /* Initialize a hash table.  */
-extern bfd_boolean bfd_hash_table_init
+extern bool bfd_hash_table_init
   (struct bfd_hash_table *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -370,7 +338,7 @@ extern bfd_boolean bfd_hash_table_init
    unsigned int);
 
 /* Initialize a hash table specifying a size.  */
-extern bfd_boolean bfd_hash_table_init_n
+extern bool bfd_hash_table_init_n
   (struct bfd_hash_table *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -386,8 +354,7 @@ extern void bfd_hash_table_free
    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);
+  (struct bfd_hash_table *, const char *, bool create, bool copy);
 
 /* Insert an entry in a hash table.  */
 extern struct bfd_hash_entry *bfd_hash_insert
@@ -415,7 +382,7 @@ extern void *bfd_hash_allocate
    INFO argument is passed to the function.  */
 extern void bfd_hash_traverse
   (struct bfd_hash_table *,
-   bfd_boolean (*) (struct bfd_hash_entry *, void *),
+   bool (*) (struct bfd_hash_entry *, void *),
    void *info);
 
 /* Allows the default size of a hash table to be configured. New hash
@@ -478,15 +445,15 @@ extern int bfd_stat (bfd *, struct stat
 #endif
 extern void _bfd_warn_deprecated (const char *, const char *, int, const char *);
 
-extern bfd_boolean bfd_cache_close
+extern bool 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 bool 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 **);
+extern bool bfd_record_phdr
+  (bfd *, unsigned long, bool, flagword, bool, bfd_vma,
+   bool, bool, unsigned int, struct bfd_section **);
 
 /* Byte swapping routines.  */
 
@@ -513,8 +480,8 @@ 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);
+bfd_uint64_t bfd_get_bits (const void *, int, bool);
+void bfd_put_bits (bfd_uint64_t, void *, int, bool);
 
 
 /* mmap hacks */
@@ -541,8 +508,8 @@ 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);
+extern bool bfd_get_file_window
+  (bfd *, file_ptr, bfd_size_type, bfd_window *, bool);
 
 /* Externally visible ELF routines.  */
 
@@ -571,6 +538,14 @@ struct ecoff_debug_swap;
 struct ecoff_extr;
 struct bfd_link_info;
 struct bfd_link_hash_entry;
+
+/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise.  */
+
+static inline bool
+startswith (const char *str, const char *prefix)
+{
+  return strncmp (str, prefix, strlen (prefix)) == 0;
+}
 /* Extracted from init.c.  */
 unsigned int bfd_init (void);
 
@@ -588,6 +563,8 @@ bfd *bfd_openr (const char *filename, co
 
 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);
 
@@ -608,15 +585,15 @@ bfd *bfd_openr_iovec (const char *filena
 
 bfd *bfd_openw (const char *filename, const char *target);
 
-bfd_boolean bfd_close (bfd *abfd);
+bool bfd_close (bfd *abfd);
 
-bfd_boolean bfd_close_all_done (bfd *);
+bool bfd_close_all_done (bfd *);
 
 bfd *bfd_create (const char *filename, bfd *templ);
 
-bfd_boolean bfd_make_writable (bfd *abfd);
+bool bfd_make_writable (bfd *abfd);
 
-bfd_boolean bfd_make_readable (bfd *abfd);
+bool bfd_make_readable (bfd *abfd);
 
 void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
 
@@ -638,12 +615,12 @@ char *bfd_follow_gnu_debugaltlink (bfd *
 struct bfd_section *bfd_create_gnu_debuglink_section
    (bfd *abfd, const char *filename);
 
-bfd_boolean bfd_fill_in_gnu_debuglink_section
+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);
 
-void bfd_set_filename (bfd *abfd, char *filename);
+const char *bfd_set_filename (bfd *abfd, const char *filename);
 
 /* Extracted from libbfd.c.  */
 
@@ -700,7 +677,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)             \
@@ -795,6 +772,10 @@ typedef struct bfd_section
   /* 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;
 
@@ -928,6 +909,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.  */
@@ -1177,11 +1162,17 @@ 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;
+ /* 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;
+
 } asection;
 
 /* Relax table contains information about instructions which can
@@ -1236,7 +1227,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 +1237,33 @@ 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)
 {
   sec->alignment_power = val;
-  return TRUE;
+  return true;
 }
 
 /* These sections are global, and are managed by BFD.  The application
@@ -1294,32 +1285,34 @@ 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)
@@ -1329,41 +1322,42 @@ discarded_section (const asection *sec)
 }
 
 #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, id,  section_id, index, next, prev, flags, user_set_vma, */ \
+  {  NAME, IDX, 0,          0,     NULL, NULL, 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, */  \
+  /* vma, lma, size, rawsize, compressed_size, relax, relax_count,  */ \
      0,   0,   0,    0,       0,               0,     0,               \
                                                                        \
-  /* output_offset, output_section, alignment_power,               */  \
+  /* output_offset, output_section, alignment_power,                */ \
      0,             &SEC,           0,                                 \
                                                                        \
-  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
+  /* relocation, orelocation, reloc_count, filepos, rel_filepos,    */ \
      NULL,       NULL,        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,                                        \
+     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                           */ \
+     { NULL }, { NULL }, NULL                                          \
+                                                                       \
     }
 
 /* We use a macro to initialize the static asymbol structures because
@@ -1389,7 +1383,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 +1401,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 +1413,33 @@ 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);
+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 archures.c.  */
 enum bfd_architecture
@@ -1594,10 +1588,6 @@ enum bfd_architecture
   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 +1605,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
@@ -1738,7 +1727,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 +1788,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
@@ -1889,10 +1878,25 @@ enum bfd_architecture
   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.  */
@@ -1903,6 +1907,7 @@ 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
   bfd_arch_nios2,     /* Nios II.  */
 #define bfd_mach_nios2         0
@@ -1926,6 +1931,7 @@ 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_last
   };
 
@@ -1942,17 +1948,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 *);
 
-  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 +1980,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);
@@ -2164,8 +2169,8 @@ struct reloc_howto_struct
   { (unsigned) type, size < 0 ? -size : size, bits, right, left, ovf,  \
     size < 0, pcrel, inplace, pcrel_off, 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, 0, 0, false, 0, complain_overflow_dont, NULL, \
+         NULL, false, 0, 0, false)
 
 unsigned int bfd_get_reloc_size (reloc_howto_type *);
 
@@ -2183,7 +2188,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,
@@ -2868,6 +2873,8 @@ instruction.  */
   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 +2921,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,
@@ -2970,6 +2978,10 @@ instruction.  */
   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 +3009,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,10 +3033,10 @@ 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  */
@@ -4982,6 +5000,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,
@@ -5085,6 +5104,8 @@ 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.  */
   BFD_RELOC_NIOS2_S16,
@@ -5194,7 +5215,9 @@ to one of its own internal functions or
 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.
+/* 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
@@ -5268,9 +5291,46 @@ BFD_RELOC_XTENSA_ASM_EXPAND.  */
   BFD_RELOC_XTENSA_TLS_ARG,
   BFD_RELOC_XTENSA_TLS_CALL,
 
+/* 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,
 
+/* 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,
 
@@ -6341,6 +6401,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
@@ -6361,14 +6424,14 @@ 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);
+bool bfd_is_local_label (bfd *abfd, asymbol *sym);
 
-bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
+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))
 
-bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
+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))
@@ -6376,7 +6439,7 @@ bfd_boolean bfd_is_target_special_symbol
 #define bfd_canonicalize_symtab(abfd, location) \
        BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
 
-bfd_boolean bfd_set_symtab
+bool bfd_set_symtab
    (bfd *abfd, asymbol **location, unsigned int count);
 
 void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
@@ -6391,11 +6454,11 @@ asymbol *_bfd_generic_make_empty_symbol
 
 int bfd_decode_symclass (asymbol *symbol);
 
-bfd_boolean bfd_is_undefined_symclass (int symclass);
+bool bfd_is_undefined_symclass (int symclass);
 
 void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
 
-bfd_boolean bfd_copy_private_symbol_data
+bool bfd_copy_private_symbol_data
    (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
 
 #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
@@ -6453,12 +6516,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;
 
@@ -6562,6 +6619,12 @@ struct bfd
    | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
    | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
 
+  /* 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;
+
   /* Is the file descriptor being cached?  That is, can it be closed as
      needed, and re-opened when accessed later?  */
   unsigned int cacheable : 1;
@@ -6613,13 +6676,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
@@ -6651,7 +6717,7 @@ struct bfd
 
   /* 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;
@@ -6662,6 +6728,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.  */
@@ -6732,7 +6803,7 @@ 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;
@@ -6780,13 +6851,13 @@ bfd_count_sections (const bfd *abfd)
   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;
@@ -6799,15 +6870,15 @@ bfd_usrdata (const bfd *abfd)
 }
 
 /* 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;
 }
@@ -6942,7 +7013,7 @@ bfd_section_list_insert_before (bfd *abf
     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;
@@ -7014,13 +7085,13 @@ void bfd_set_reloc
 
 #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);
+bool 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);
+bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
 
 unsigned int bfd_get_gp_size (bfd *abfd);
 
@@ -7028,17 +7099,17 @@ void bfd_set_gp_size (bfd *abfd, unsigne
 
 bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
 
-bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+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))
-bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *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))
-bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
+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))
@@ -7072,7 +7143,8 @@ bfd_boolean bfd_set_private_flags (bfd *
        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))
@@ -7137,24 +7209,20 @@ bfd_boolean bfd_set_private_flags (bfd *
 
 extern bfd_byte *bfd_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-   bfd_boolean, asymbol **);
+   bool, asymbol **);
 
-bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
+bool 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);
+bfd_vma bfd_emul_get_commonpagesize (const char *, bool);
 
 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
+bool bfd_check_compression_header
    (bfd *abfd, bfd_byte *contents, asection *sec,
     bfd_size_type *uncompressed_size,
     unsigned int *uncompressed_alignment_power);
@@ -7164,7 +7232,7 @@ int bfd_get_compression_header_size (bfd
 bfd_size_type bfd_convert_section_size
    (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
 
-bfd_boolean bfd_convert_section_contents
+bool bfd_convert_section_contents
    (bfd *ibfd, asection *isec, bfd *obfd,
     bfd_byte **ptr, bfd_size_type *ptr_size);
 
@@ -7172,7 +7240,7 @@ bfd_boolean bfd_convert_section_contents
 symindex bfd_get_next_mapent
    (bfd *abfd, symindex previous, carsym **sym);
 
-bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
+bool bfd_set_archive_head (bfd *output, bfd *new_head);
 
 bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
 
@@ -7183,10 +7251,10 @@ int bfd_core_file_failing_signal (bfd *a
 
 int bfd_core_file_pid (bfd *abfd);
 
-bfd_boolean core_file_matches_executable_p
+bool core_file_matches_executable_p
    (bfd *core_bfd, bfd *exec_bfd);
 
-bfd_boolean generic_core_file_matches_executable_p
+bool generic_core_file_matches_executable_p
    (bfd *core_bfd, bfd *exec_bfd);
 
 /* Extracted from targets.c.  */
@@ -7211,6 +7279,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.  */
@@ -7245,6 +7318,8 @@ typedef struct bfd_link_info _bfd_link_i
 /* Forward declaration.  */
 typedef struct flag_info flag_info;
 
+typedef void (*bfd_cleanup) (bfd *);
+
 typedef struct bfd_target
 {
   /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
@@ -7282,6 +7357,9 @@ 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.  */
@@ -7309,15 +7387,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.  */
@@ -7329,17 +7407,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 +7431,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 *);
+  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 +7465,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 +7484,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) \
@@ -7444,46 +7518,47 @@ typedef struct bfd_target
   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_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 *, void *, unsigned long size);
 #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 +7568,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,
+  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) \
@@ -7536,72 +7611,73 @@ 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 *,
@@ -7609,8 +7685,8 @@ typedef struct bfd_target
 
   /* 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 +7697,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 +7737,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;
@@ -7711,13 +7787,19 @@ 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);
@@ -7729,12 +7811,12 @@ 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);
+bool bfd_check_format (bfd *abfd, bfd_format format);
 
-bfd_boolean bfd_check_format_matches
+bool bfd_check_format_matches
    (bfd *abfd, bfd_format format, char ***matching);
 
-bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
+bool bfd_set_format (bfd *abfd, bfd_format format);
 
 const char *bfd_format_string (bfd_format format);
 
@@ -7750,19 +7832,19 @@ const char *bfd_format_string (bfd_forma
    && bfd_is_abs_section ((H)->u.def.section) \
    && !(H)->rel_from_abs)
 
-bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
+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))
 
-bfd_boolean bfd_section_already_linked (bfd *abfd,
+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))
 
-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);
 
@@ -7785,18 +7867,18 @@ struct bfd_link_hash_entry *bfd_generic_
 
 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);
 
-bfd_boolean bfd_hide_sym_by_version
+bool bfd_hide_sym_by_version
    (struct bfd_elf_version_tree *verdefs, const char *sym_name);
 
-bfd_boolean bfd_link_check_relocs
+bool bfd_link_check_relocs
    (bfd *abfd, struct bfd_link_info *info);
 
-bfd_boolean _bfd_generic_link_check_relocs
+bool _bfd_generic_link_check_relocs
    (bfd *abfd, struct bfd_link_info *info);
 
-bfd_boolean bfd_merge_private_bfd_data
+bool bfd_merge_private_bfd_data
    (bfd *ibfd, struct bfd_link_info *info);
 
 #define bfd_merge_private_bfd_data(ibfd, info) \
@@ -7807,28 +7889,28 @@ bfd_byte *bfd_simple_get_relocated_secti
    (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
 
 /* Extracted from compress.c.  */
-bfd_boolean bfd_get_full_section_contents
+bool 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
+bool 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
+bool bfd_is_section_compressed
    (bfd *abfd, asection *section);
 
-bfd_boolean bfd_init_section_decompress_status
+bool bfd_init_section_decompress_status
    (bfd *abfd, asection *section);
 
-bfd_boolean bfd_init_section_compress_status
+bool bfd_init_section_compress_status
    (bfd *abfd, asection *section);
 
-bfd_boolean bfd_compress_section
+bool bfd_compress_section
    (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
 
 #ifdef __cplusplus
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd-in.h ./bfd/bfd-in.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd-in.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/bfd-in.h	2021-12-16 01:57:38.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-2021 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@
 
@@ -93,23 +78,7 @@ 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
@@ -130,20 +99,19 @@ 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 POISON_BFD_BOOLEAN
+# pragma GCC poison bfd_boolean
+#else
+# define bfd_boolean bool
+# undef FALSE
+# undef TRUE
+# define FALSE 0
+# define TRUE 1
+#endif
 
 #ifdef BFD64
 
@@ -355,7 +323,7 @@ struct bfd_hash_table
 };
 
 /* Initialize a hash table.  */
-extern bfd_boolean bfd_hash_table_init
+extern bool bfd_hash_table_init
   (struct bfd_hash_table *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -363,7 +331,7 @@ extern bfd_boolean bfd_hash_table_init
    unsigned int);
 
 /* Initialize a hash table specifying a size.  */
-extern bfd_boolean bfd_hash_table_init_n
+extern bool bfd_hash_table_init_n
   (struct bfd_hash_table *,
    struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
 			       struct bfd_hash_table *,
@@ -379,8 +347,7 @@ extern void bfd_hash_table_free
    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);
+  (struct bfd_hash_table *, const char *, bool create, bool copy);
 
 /* Insert an entry in a hash table.  */
 extern struct bfd_hash_entry *bfd_hash_insert
@@ -408,7 +375,7 @@ extern void *bfd_hash_allocate
    INFO argument is passed to the function.  */
 extern void bfd_hash_traverse
   (struct bfd_hash_table *,
-   bfd_boolean (*) (struct bfd_hash_entry *, void *),
+   bool (*) (struct bfd_hash_entry *, void *),
    void *info);
 
 /* Allows the default size of a hash table to be configured. New hash
@@ -471,15 +438,15 @@ extern int bfd_stat (bfd *, struct stat
 #endif
 extern void _bfd_warn_deprecated (const char *, const char *, int, const char *);
 
-extern bfd_boolean bfd_cache_close
+extern bool 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 bool 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 **);
+extern bool bfd_record_phdr
+  (bfd *, unsigned long, bool, flagword, bool, bfd_vma,
+   bool, bool, unsigned int, struct bfd_section **);
 
 /* Byte swapping routines.  */
 
@@ -506,8 +473,8 @@ 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);
+bfd_uint64_t bfd_get_bits (const void *, int, bool);
+void bfd_put_bits (bfd_uint64_t, void *, int, bool);
 
 
 /* mmap hacks */
@@ -534,8 +501,8 @@ 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);
+extern bool bfd_get_file_window
+  (bfd *, file_ptr, bfd_size_type, bfd_window *, bool);
 
 /* Externally visible ELF routines.  */
 
@@ -564,3 +531,11 @@ struct ecoff_debug_swap;
 struct ecoff_extr;
 struct bfd_link_info;
 struct bfd_link_hash_entry;
+
+/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise.  */
+
+static inline bool
+startswith (const char *str, const char *prefix)
+{
+  return strncmp (str, prefix, strlen (prefix)) == 0;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfdio.c ./bfd/bfdio.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfdio.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/bfdio.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low-level I/O routines for BFDs.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -25,6 +25,10 @@
 #include <limits.h>
 #include "bfd.h"
 #include "libbfd.h"
+#include "aout/ar.h"
+#if defined (_WIN32)
+#include <windows.h>
+#endif
 
 #ifndef S_IXUSR
 #define S_IXUSR 0100    /* Execute by owner.  */
@@ -92,12 +96,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 +114,57 @@ _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)
+  size_t filelen;
+
+  /* PR 25713: Handle extra long path names.
+     For relative paths, convert them to absolute, in case that version is too long.  */
+  if (! IS_ABSOLUTE_PATH (filename) && (strstr (filename, ".o") != NULL))
+    {
+      char cwd[1024];
+
+      getcwd (cwd, sizeof (cwd));
+      filelen = strlen (cwd) + 1;
+      strncat (cwd, "\\", sizeof (cwd) - filelen);
+      ++ filelen;
+      strncat (cwd, filename, sizeof (cwd) - filelen);
+
+      filename = cwd;
+    }
+
+  filelen = strlen (filename) + 1;
+
+  if (filelen > MAX_PATH - 1)
+    {
+      FILE * file;
+      char * fullpath;
+      int    i;
+
+      fullpath = (char *) malloc (filelen + 8);
+
+      /* Add a Microsoft recommended prefix that
+	 will allow the extra-long path to work.  */
+      strcpy (fullpath, "\\\\?\\");
+      strcat (fullpath, filename);
+
+      /* Convert any UNIX style path separators into the DOS form.  */
+      for (i = 0; fullpath[i]; i++)
+        {
+          if (IS_UNIX_DIR_SEPARATOR (fullpath[i]))
+	    fullpath[i] = '\\';
+        }
+
+      file = close_on_exec (fopen (fullpath, modes));
+      free (fullpath);
+      return file;
+    }
+
+#elif defined (HAVE_FOPEN64)
   return close_on_exec (fopen64 (filename, modes));
-#else
-  return close_on_exec (fopen (filename, modes));
 #endif
-#endif /* !VMS */
+
+  return close_on_exec (fopen (filename, modes));
 }
 
 /*
@@ -186,6 +229,7 @@ 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
      this element.  */
@@ -255,6 +299,7 @@ bfd_tell (bfd *abfd)
       offset += abfd->origin;
       abfd = abfd->my_archive;
     }
+  offset += abfd->origin;
 
   if (abfd->iovec == NULL)
     return 0;
@@ -315,6 +360,7 @@ bfd_seek (bfd *abfd, file_ptr position,
       offset += abfd->origin;
       abfd = abfd->my_archive;
     }
+  offset += abfd->origin;
 
   if (abfd->iovec == NULL)
     {
@@ -415,17 +461,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 +506,29 @@ DESCRIPTION
 ufile_ptr
 bfd_get_file_size (bfd *abfd)
 {
+  ufile_ptr file_size, archive_size = (ufile_ptr) -1;
+
   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 we can't compare against
+	     file size.  */
+	  if (adata->arch_header != NULL
+	      && memcmp (((struct ar_hdr *) adata->arch_header)->ar_fmag,
+			 "Z\012", 2) == 0)
+	    return archive_size;
+	  abfd = abfd->my_archive;
+	}
+    }
 
-  return bfd_get_size (abfd);
+  file_size = bfd_get_size (abfd);
+  if (archive_size < file_size)
+    return archive_size;
+  return file_size;
 }
 
 /*
@@ -479,6 +558,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 +686,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;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd.m4 ./bfd/bfd.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfd.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/bfd.m4	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfdwin.c ./bfd/bfdwin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/bfdwin.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/bfdwin.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -104,12 +104,12 @@ bfd_free_window (bfd_window *windowp)
 
 static int ok_to_map = 1;
 
-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 size_t pagesize;
   bfd_window_internal *i = windowp->i;
@@ -131,7 +131,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 +150,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 +199,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,7 +231,7 @@ bfd_get_file_window (bfd *abfd,
       if (size_to_alloc == 0)
 	{
 	  windowp->i = i;
-	  return TRUE;
+	  return true;
 	}
       goto free_and_fail;
     }
@@ -253,12 +254,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/binary.c ./bfd/binary.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/binary.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/binary.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for binary objects.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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
+  if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
       || bfd_bread (location, count, abfd) != count)
-    return FALSE;
-  return TRUE;
+    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)
@@ -218,7 +218,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 +226,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 +247,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 +278,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 +335,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cache.c ./bfd/cache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cache.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cache.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD library -- caching of file descriptors.
 
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    Hacked by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
@@ -160,16 +160,16 @@ 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);
     }
 
@@ -184,7 +184,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 +208,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);
@@ -485,25 +485,25 @@ 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;
+	return false;
     }
   abfd->iovec = &cache_iovec;
   insert (abfd);
   ++open_files;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -511,7 +511,7 @@ INTERNAL_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,
@@ -522,15 +522,15 @@ RETURNS
 	returned if all is well.
 */
 
-bfd_boolean
+bool
 bfd_cache_close (bfd *abfd)
 {
   if (abfd->iovec != &cache_iovec)
-    return TRUE;
+    return true;
 
   if (abfd->iostream == NULL)
     /* Previously closed.  */
-    return TRUE;
+    return true;
 
   return bfd_cache_delete (abfd);
 }
@@ -540,7 +540,7 @@ 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,
@@ -551,10 +551,10 @@ RETURNS
 	returned if all is well.
 */
 
-bfd_boolean
+bool
 bfd_cache_close_all (void)
 {
-  bfd_boolean ret = TRUE;
+  bool ret = true;
 
   while (bfd_last_cache != NULL)
     ret &= bfd_cache_close (bfd_last_cache);
@@ -580,7 +580,7 @@ DESCRIPTION
 FILE *
 bfd_open_file (bfd *abfd)
 {
-  abfd->cacheable = TRUE;	/* Allow it to be closed later.  */
+  abfd->cacheable = true;	/* Allow it to be closed later.  */
 
   if (open_files >= bfd_cache_max_open ())
     {
@@ -592,15 +592,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 +629,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;
     }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cf-i386lynx.c ./bfd/cf-i386lynx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cf-i386lynx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cf-i386lynx.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog ./bfd/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ChangeLog	2021-12-16 01:57:38.000000000 +0000
@@ -1,3003 +1,2032 @@
-2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+2021-09-07  Luis Machado  <luis.machado@linaro.org>
 
-	* development.sh (development): Set to false.
-
-2019-12-11  Alan Modra  <amodra@gmail.com>
+	Revert: [AArch64] MTE corefile support
 
-	* 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.
+	2021-05-21  Luis Machado  <luis.machado@linaro.org>
 
-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.
+	* elf.c (elfcore_make_memtag_note_section): New function.
+	(elfcore_grok_note): Handle NT_MEMTAG note types.
 
-2019-11-27  Alan Modra  <amodra@gmail.com>
+2021-07-03  Joel Brobecker  <brobecker@adacore.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>
+	* development.sh (development): Set to false.
 
-	* 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.
+2021-07-03  Nick Clifton  <nickc@redhat.com>
 
-2019-11-25  Christian Eggers  <ceggers@gmx.de>
+	* version.m4: Update version number.
+	* configure: Regenerate.
+	* po/opcodes.pot: Regenerate.
 
-	* 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.
+2021-07-03  Nick Clifton  <nickc@redhat.com>
 
-2019-11-12  Jim Wilson  <jimw@sifive.com>
+	* 2.37 release branch created.
 
-	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.
+2021-07-02  Nick Clifton  <nickc@redhat.com>
 
-2019-10-29  Andrew Eikum  <aeikum@codeweavers.com>
+	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.
 
-	* 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.
+2021-05-21  Luis Machado  <luis.machado@linaro.org>
 
-2019-10-20  John David Anglin  <danglin@gcc.gnu.org>
+	* elf.c (elfcore_make_memtag_note_section): New function.
+	(elfcore_grok_note): Handle NT_MEMTAG note types.
 
-	* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte
-	minimum alignment for .plt section.
+2021-05-20  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-10-19  John David Anglin  <danglin@gcc.gnu.org>
+	* 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.
 
-	* 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.
+2021-05-19  Nick Clifton  <nickc@redhat.com>
 
-2019-10-17  Nelson Chu  <nelson.chu@sifive.com>
+	* 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.
 
-	* 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.
+2021-05-14  Nelson Chu  <nelson.chu@sifive.com>
 
-	* 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.
+	* 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-10-16  Alan Modra  <amodra@gmail.com>
+2021-05-13  Nelson Chu  <nelson.chu@sifive.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.
+	* 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-10-15  Alan Modra  <amodra@gmail.com>
+2021-05-13  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.
+	PR 27858
+	* elf32-sh.c (sh_elf_info_to_howto): Correct check for last valid
+	reloc howto.
 
-2019-10-15  Alan Modra  <amodra@gmail.com>
+2021-05-12  Luis Machado  <luis.machado@linaro.org>
 
-	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.
+	* 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-10-15  Alan Modra  <amodra@gmail.com>
+2021-05-11  Alan Modra  <amodra@gmail.com>
 
-	PR 25100
-	* elf64-ppc.c (sfpr_define): Delete dead code that triggered a warning.
+	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-10-15  Alan Modra  <amodra@gmail.com>
+2021-05-10  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* bfd.c (bfd_check_compression_header): Check for powers of two
-	with x == (x & -x).
+	PR binutils/27839
+	* simple.c (bfd_simple_get_relocated_section_contents): Remove
+	strayed fprintf.
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+2021-05-10  Nick Clifton  <nickc@redhat.com>
 
-	* syms.c (struct indexentry): Add idx field.
-	(cmpindexentry): Final sort on idx.
-	(_bfd_stab_section_find_nearest_line): Set idx.
+	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-10-14  Alan Modra  <amodra@gmail.com>
+2021-05-10  Dimitar Dimitrov  <dimitar@dinux.eu>
 
-	* 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.
+	* elf32-pru.c (elf_backend_can_gc_sections): Define as 1.
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+2021-05-08  Mike Frysinger  <vapier@gentoo.org>
 
-	* elflink.c (elf_sort_symbol): Sort on type and name as well.
-	(elf_link_add_object_symbols): Style fix.
+	* doc/Makefile.am (html-local, bfd/index.html): New targets.
+	* doc/Makefile.in: Regenerate.
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+2021-05-08  Mike Frysinger  <vapier@gentoo.org>
 
-	* 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.
+	* doc/Makefile.am (AM_MAKEINFOFLAGS): Define.
+	* doc/Makefile.in: Regenerate.
 
-2019-10-14  Alan Modra  <amodra@gmail.com>
+2021-05-07  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	* 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
+	* 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-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.
+2021-05-07  Jan Beulich  <jbeulich@suse.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* elf64-x86-64.c (x86_64_elf_howto_table): Set src_mask fields
+	to zero.
 
-	* 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.
+2021-05-07  Alan Modra  <amodra@gmail.com>
 
-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.
+	* libbfd.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.
+2021-05-06  Stafford Horne  <shorne@gmail.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	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.
 
-	* 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.
+2021-05-03  Jan Beulich  <jbeulich@suse.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* bfd-in.h: Delete coff forward refs and move coff declaration..
-	* coff-bfd.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* 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.
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* bfd-in.h: Move tic6x function declaration..
-	* elf32-tic6x.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 27755
+	* elf32-ppc.c (ppc_elf_inline_plt): Do increment rel in loop.
 
-	* 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.
+2021-05-03  Alan Modra  <amodra@gmail.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* 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.
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 27801
+	* mach-o.c (bfd_mach_o_core_fetch_environment): Use bfd_get_32 to
+	read 32-bit value.
 
-	* 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.
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 27799
+	* elf32-xtensa.c (elf_xtensa_grok_prstatus): Check for core notes
+	that are too small.
 
-	* bfd-in.h: Move ia64 function declarations..
-	* elfxx-ia64.h: ..to here.
-	* bfd-in2.h: Regenerate.
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 27797
+	* libbfd.c (bfd_realloc_or_free): Do not free a pointer than has
+	been realloc'ed to size 0.
 
-	* 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.
+2021-04-30  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	PR 27795
+	* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Check for invalid name
+	lengths.
 
-	* bfd-in.h: Move mips function declaration to..
-	* elfxx-mips.h: ..here.
-	* bfd-in2.h: Regenerate.
+2021-04-29  Nick Clifton  <nickc@redhat.com>
 
-2019-09-23  Alan Modra  <amodra@gmail.com>
+	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.
 
-	* 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.
+2021-04-29  Nick Clifton  <nickc@redhat.com>
 
-2019-09-20  Nelson Chu <nelson.chu@sifive.com>
+	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.
 
-	* 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.
+2021-04-28  Nick Clifton  <nickc@redhat.com>
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* 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.
+2021-04-26  Mike Frysinger  <vapier@gentoo.org>
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+	* elf-bfd.h: Include stdlib.h.
 
-	* 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.
+2021-04-26  Jan Beulich  <jbeulich@suse.com>
 
-2019-09-20  Alan Modra  <amodra@gmail.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.
 
-	* 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>
+2021-04-23  Eric Botcazou  <ebotcazou@adacore.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.
+	* elf.c (special_sections_p): Add .persistent.bss.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2021-04-23  Jan Beulich  <jbeulich@suse.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.
+	* 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.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2021-04-22  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	* 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.
+	* 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.
 
-2019-09-18  Alan Modra  <amodra@gmail.com>
+2021-04-22  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	* 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.
+	* 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.
 
-2019-09-16  Phil Blundell  <pb@pbcl.net>
+2021-04-21  Eli Zaretskii  <eliz@gnu.org>
 
-	* version.m4: Set version to 2.33.50.
-	* Makefile.in, configure, doc/Makefile.in: Regenerated.
+	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.
 
-2019-09-11  Tom Tromey  <tom@tromey.com>
+2021-04-21  Nick Clifton  <nickc@redhat.com>
 
-	* opncls.c (bfd_set_filename): New function.
-	* bfd-in2.h: Regenerate.
+	PR 27759
+	* srec.c (srec_read_section): Replace assertions with error
+	returns.
 
-2019-09-11  Alan Modra  <amodra@gmail.com>
+2021-04-20  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	* 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.
+	PR binutils/21700
+	* reloc.c (BFD_RELOC_PPC_NEG): New relocation.
 	* bfd-in2.h: Regenerate.
 	* libbfd.h: Regenerate.
-	* libcoff.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-09-10  Nick Clifton  <nickc@redhat.com>
+2021-04-16  Alan Modra  <amodra@gmail.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.
+	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-09-05  Alan Modra  <amodra@gmail.com>
+2021-04-15  Nelson Chu  <nelson.chu@sifive.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.
+	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-09-05  Alan Modra  <amodra@gmail.com>
+2021-04-15  Lifang Xia<lifang_xia@c-sky.com>
 
-	* elf64-ppc.c (xlate_pcrel_opt): Handle prefix loads and stores
-	in second instruction.
-	(ppc64_elf_relocate_section): Likewise.
+	* 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-09-05  Alan Modra  <amodra@gmail.com>
+2021-04-14  H.J. Lu  <hongjiu.lu@intel.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 binutils/27708
+	* elf.c (assign_file_positions_for_non_load_sections): Set
+	p_memsz to p_filesz for the loadable PT_NOTE segment.
 
-	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.
+2021-04-14  Frederic Cambus  <fred@statdns.com>
 
-2019-08-31  Jim Wilson  <jimw@sifive.com>
+	* elf.c (elfcore_grok_netbsd_note): Remove unneeded #ifdef
+	checks for NT_NETBSDCORE_AUXV and NT_NETBSDCORE_LWPSTATUS.
 
-	PR 23825
-	* elfnn-riscv.c (riscv_elf_create_dynamic_sections): Add SEC_LOAD,
-	SEC_DATA, and SEC_HAS_CONTENTS to .tdata.dyn section.
+2021-04-14  Alan Modra  <amodra@gmail.com>
 
-2019-08-30  Jim Wilson  <jimw@sifive.com>
+	PR 27631
+	* elf32-metag.c (elf_metag_relocate_section): Don't use &hh->elf
+	when hh might be NULL, test for NULL first.
 
-	* elfnn-riscv.c (riscv_elf_relocate_section): For unresolvable reloc
-	error, call bfd_set_error, set ret to FALSE, and goto out label.
+2021-04-14  Alan Modra  <amodra@gmail.com>
 
-2019-08-30  H.J. Lu  <hongjiu.lu@intel.com>
+	PR 27630
+	* elf32-arm.c (elf32_arm_size_stubs): Don't use &hash->root when
+	hash might be NULL, cast instead.
 
-	PR ld/24951
-	* archive.c (_bfd_get_elt_at_filepos): Copy BFD_COMPRESS,
-	BFD_DECOMPRESS and BFD_COMPRESS_GABI flags for thin archive.
+2021-04-13  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-2019-08-29  Alan Modra  <amodra@gmail.com>
+	* xcofflink.c (xcoff_link_check_ar_symbols): Update esym earlier.
 
-	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.
+2021-04-13  Nelson Chu  <nelson.chu@sifive.com>
 
-2019-08-29  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* 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.
+2021-04-12  Alan Modra  <amodra@gmail.com>
 
-2019-08-28  Jim Wilson  <jimw@sifive.com>
+	* 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.
 
-	* elfnn-riscv.c (_bfd_riscv_relax_lui): Add check to exclude abs
-	section when setting max_alignment.  Update comment.
-	(_bfd_riscv_relax_pc): Likewise.
+2021-04-12  Alan Modra  <amodra@gmail.com>
 
-2019-08-29  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	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.
+2021-04-12  Alan Modra  <amodra@gmail.com>
 
-2019-08-24  Alan Modra  <amodra@gmail.com>
+	* 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.
 
-	* elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak
-	symbols from GOT optimisation.
+2021-04-08  Mike Frysinger  <vapier@gentoo.org>
 
-2019-08-23  Stafford Horne  <shorne@gmail.com>
+	* configure.ac (ACX_BUGURL): Use https://.
+	* configure.com (COPY_TEXT): Likewise.
+	* configure: Regenerate.
 
-	* elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for
-	PLT GOT entries.
+2021-04-05  Alan Modra  <amodra@gmail.com>
 
-2019-08-23  Nick Clifton  <nickc@redhat.com>
+	* 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.
 
-	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.
+2021-04-01  Tamar Christina  <tamar.christina@arm.com>
 
-2019-08-23  Alan Modra  <amodra@gmail.com>
+	PR ld/26659
+	* cofflink.c (_bfd_coff_generic_relocate_section): Ignore overflow.
 
-	PR 24933
-	* elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Don't exit
-	on error without freeing plts[] contents.
+2021-04-01  Martin Liska  <mliska@suse.cz>
 
-2019-08-22  Dennis Zhang  <dennis.zhang@arm.com>
+	* 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.
 
-	* cpu-arm.c: New entries for Cortex-M35P, Cortex-A77, Cortex-A76AE.
+2021-03-31  Alan Modra  <amodra@gmail.com>
 
-2019-08-22  Nick Clifton  <nickc@redhat.com>
+	* bfd-in.h: Include stdbool.h.
+	(bfd_boolean): Define as bool
+	* bfd-in2.h: Regenerate.
 
-	PR 24922
-	* pei-x86_64.c (pex64_xdata_print_uwd_codes): Add checks before
-	reading data from extra records.
+2021-03-31  Alan Modra  <amodra@gmail.com>
 
-2019-08-22  Tamar Christina  <tamar.christina@arm.com>
+	* .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.
 
-	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-03-31  Alan Modra  <amodra@gmail.com>
 
-2019-08-22  Alan Modra  <amodra@gmail.com>
+	* bfd-in.h: Include string.h.
+	(LITMEMCPY, LITSTRCPY): Delete.
+	* bfd-in2.h: Regenerate.
 
-	* elf32-arm.c (cmse_scan): Don't use ARM_GET_SYM_CMSE_SPCL,
-	instead recognize CMSE_PREFIX in symbol name.
+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_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.
+	(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.
 
-2019-08-16  Alan Modra  <amodra@gmail.com>
+2021-03-22  Jan Beulich  <jbeulich@suse.com>
 
-	* elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs.
+	* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Add missing
+	language translation wrapping to _bfd_error_handler()
+	invocations.
 
-2019-08-15  Jim Wilson  <jimw@sifive.com>
+2021-03-21  Alan Modra  <amodra@gmail.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.
+	* bfd-in.h (startswith): New inline.
+	(CONST_STRNEQ): Use startswith.
+	* bfd-in2.h: Regenerate.
 
-2019-08-15  Tom Tromey  <tromey@adacore.com>
+2021-03-20  Alan Modra  <amodra@gmail.com>
 
-	* dwarf2.c (scan_unit_for_symbols): Check for end of CU, not end
-	of section.
+	PR 27590
+	* elf.c (_bfd_elf_make_section_from_shdr): Remove SHF_EXCLUDE
+	test for .gnu.debuglto*.
 
-2019-08-14  Alan Modra  <amodra@gmail.com>
+2021-03-18  H.J. Lu  <hongjiu.lu@intel.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.
+	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.
 
-2019-08-14  Alan Modra  <amodra@gmail.com>
+2021-03-18  H.J. Lu  <hongjiu.lu@intel.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.
+	PR ld/27587
+	* dwarf2.c (read_attribute_value): Check version >= 3 for
+	DW_FORM_ref_addr.
 
-2019-08-14  Alan Modra  <amodra@gmail.com>
+2021-03-16  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.
-	* libbfd.h: Regenerate.
+	* 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.
 
-2019-08-09  Mihailo Stojanovic  <mihailo.stojanovic@rt-rk.com>
+2021-03-16  Kuan-Lin Chen  <kuanlinchentw@gmail.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.
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Add zba, zbb and zbc.
 
-2019-07-30  Alan Modra  <amodra@gmail.com>
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	PR 24768
-	* bfd.c (struct bfd): Add lto_slim_object flag.
+	* 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-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>
+2021-03-12  ClÃ©ment Chigot  <clement.chigot@atos.net>
 
-	* 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.
+	* reloc.c (BFD_RELOC_PPC_TOC16_HI, BFD_RELOC_PPC_TOC16_LO):
+	New relocations.
 	* bfd-in2.h: Regenerate.
 	* 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-07-18  Alan Modra  <amodra@gmail.com>
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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-07-18  Alan Modra  <amodra@gmail.com>
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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-07-18  Alan Modra  <amodra@gmail.com>
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* elf32-ppc.c (TLS_GDIE): Rename from TLS_TPRELGD throughout file.
-	Correct comment.
-	* elf64-ppc.c (TLS_GDIE): Likewise.
+	* 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-07-18  Alan Modra  <amodra@gmail.com>
+2021-03-05  Nick Clifton  <nickc@redhat.com>
 
-	* elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed
-	range of tp-relative offsets.
+	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-07-15  Alan Modra  <amodra@gmail.com>
+2021-03-05  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.
+	* 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-07-13  Alan Modra  <amodra@gmail.com>
+2021-03-04  Jan Beulich  <jbeulich@suse.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.
+	* coffcode.h (sec_to_styp_flags): Don't set IMAGE_SCN_LNK_* in
+	final PE images.
 
-2019-07-08  Alan Modra  <amodra@gmail.com>
+2021-03-04  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.
+	* rs6000-core.c (rs6000coff_core_p): Correct prototype.
 
-2019-07-02  Nick Clifton  <nickc@redhat.com>
+2021-03-03  Alan Modra  <amodra@gmail.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.
+	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-07-02  Nick Clifton  <nickc@redhat.com>
+2021-03-03  Alan Modra  <amodra@gmail.com>
 
-	PR 24753
-	* compress.c (bfd_get_full_section_contents): Do not complain
-	about linker created sections that are larger than the file size.
+	* reloc.c: Include x86_64.h rather than internal.h.
 
-2019-07-02  Christophe Lyon  <christophe.lyon@linaro.org>
+2021-03-02  Nick Clifton  <nickc@redhat.com>
 
-	* 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.
+	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-07-02  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+2021-03-02  Nick Alcock  <nick.alcock@oracle.com>
 
-	* elf32-arm.c (elf32_arm_gc_mark_extra_sections): Mark debug
-	sections when .text section contain secure entry functions
-	is marked.
+	* elf-strtab.c (_bfd_elf_strtab_str): Skip strings with zero refcount.
 
-2019-07-01  Nick Clifton  <nickc@redhat.com>
+2021-03-02  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.
+	PR 27451
+	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Ignore synthesized
+	linker defined start/stop symbols when start_stop_gc.
 
-2019-06-28  Nick Clifton  <nickc@redhat.com>
+2021-03-02  Alan Modra  <amodra@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.
+	* elf64-ppc.c (ppc64_elf_relocate_section): Don't optimise got
+	indirect to pc-relative or toc-relative for undefined symbols.
 
-2019-06-28  Alan Modra  <amodra@gmail.com>
+2021-03-01  Alan Modra  <amodra@gmail.com>
+	    Fangrui Song <maskray@google.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.
+	* 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-06-26  Nick Clifton  <nickc@redhat.com>
+2021-02-25  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.
+	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-06-25  Jan Beulich  <jbeulich@suse.com>
+2021-02-24  Alan Modra  <amodra@gmail.com>
 
-	* elf-properties.c (elf_find_and_remove_property): Rename last
-	parameter. Mention it in comment.
+	PR 27459
+	* coff-stgo32.c (go32exe_check_format): Sanity check size of
+	header to avoid a buffer overflow.
 
-2019-06-24  Ilia Diachkov  <ilia.diachkov@optimitech.com>
+2021-02-22  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.
+	* coff-rs6000.c (_bfd_xcoff_reloc_type_lookup): Remove BFD_RELOC_16.
+	* coff64-rs6000.c (xcoff64_reloc_type_lookup): Likewise.
 
-2019-06-24  H.J. Lu  <hongjiu.lu@intel.com>
+2021-02-19  Nelson Chu  <nelson.chu@sifive.com>
 
-	PR ld/24721
-	* elf-properties.c (elf_merge_gnu_property_list): Remove the
-	property after reporting property removal.
+	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-06-23  Alan Modra  <amodra@gmail.com>
+2021-02-18  Nelson Chu  <nelson.chu@sifive.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.
+	* 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-06-23  Alan Modra  <amodra@gmail.com>
+2021-02-17  Alan Modra  <amodra@gmail.com>
 
-	PR 24689
-	* elfcode.h (elf_object_p): Warning fix.
+	* 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-06-21  Alan Modra  <amodra@gmail.com>
+2021-02-17  Nelson Chu  <nelson.chu@sifive.com>
 
-	PR 24689
-	* elfcode.h (elf_object_p): Check type of e_shstrndx section.
+	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-06-19  Alan Modra  <amodra@gmail.com>
+2021-02-16  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.
+	* libbfd.c (_bfd_read_unsigned_leb128): Avoid excessive shift.
+	(_bfd_safe_read_leb128, _bfd_read_signed_leb128): Likewise.
 
-2019-06-19  Alan Modra  <amodra@gmail.com>
+2021-02-15  Jan Beulich  <jbeulich@suse.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.
+	* doc/Makefile.am: Replace "cp -p" by "$(LN_S)".
+	* doc/Makefile.in: Re-generate.
 
-2019-06-17  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+2021-02-15  Alan Modra  <amodra@gmail.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.
+	* 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-06-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+2021-02-15  Alan Modra  <amodra@gmail.com>
 
-	* elfnn-aarch64.c: Enable MOVW_PREL relocs for ELF32.
+	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Use
+	bfd_get_full_section_contents.
 
-2019-06-14  Alan Modra  <amodra@gmail.com>
+2021-02-14  Alan Modra  <amodra@gmail.com>
 
-	* Makefile.in: Regenerate.
-	* configure: Regenerate.
+	* 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-06-14  Alan Modra  <amodra@gmail.com>
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-	* elf64-ppc.c: Fix comments involving paddi.
+	* config.bfd: Remove ia64 from obsolete list.
 
-2019-06-12  Adam Lackorzymski  <adam@os.inf.tu-dresden.de>
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-	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.
+	PR ld/22269
+	* elfnn-ia64.c: Revert 2017-10-14 git commit db41f6eb5234.
 
-2019-06-10  Christos Zoulas  <christos@zoulas.com>
+2021-02-11  Alan Modra  <amodra@gmail.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.
+	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.
 
-2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-	* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set
-	alignment of the new gnu property section.
+	PR 27291
+	* section.c (bfd_get_section_contents): Avoid possible overflow
+	when range checking offset and count.
+	(bfd_set_section_contents): Likewise.
 
-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>
+2021-02-03  Nick Alcock  <nick.alcock@oracle.com>
 
+	* configure.ac (SHARED_LIBADD): Remove explicit -lintl population in
+	favour of LIBINTL.
 	* 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>
+2021-02-09  Alan Modra  <amodra@gmail.com>
 
-	* elf32-arm.c (arm_allocate_glue_section_space): Clear section
-	contents.
+	* 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.
 
-2019-05-22  Alan Modra  <amodra@gmail.com>
+2021-02-04  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* vms-alpha.c (_bfd_vms_write_etir): Don't attempt further
-	processing on "size error in section".
+	PR ld/19609
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Provide more
+	info when failed to convert GOTPCREL relocation.
 
-2019-05-22  Alan Modra  <amodra@gmail.com>
+2021-02-04  Nelson Chu  <nelson.chu@sifive.com>
 
-	* som.c (som_bfd_free_cached_info): Call
-	_bfd_generic_close_and_cleanup.
+	* elfxx-riscv.c (riscv_parse_prefixed_ext): Removed zb*.
 
-2019-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+2021-02-04  Alan Modra  <amodra@gmail.com>
 
-	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error
-	for TLS_TPREL_HI16(/LO16) relocations in shared library.
+	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-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
+2021-02-03  Alan Modra  <amodra@gmail.com>
 
-	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Add NULL pointer
-	checks.  Search the RELA table for n64 relocations.
+	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-05-21  Matthew Fortune  <matthew.fortune@mips.com>
-	    Faraz Shahbazker  <fshahbazker@wavecomp.com>
+2021-02-03  Alan Modra  <amodra@gmail.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.
+	PR 27311
+	* elflink.c (_bfd_elf_add_default_symbol): Clear override when
+	undecorated symbol will have a different version.
 
-2019-05-21  Tamar Christina  <tamar.christina@arm.com>
+2021-02-02  Alan Modra  <amodra@gmail.com>
 
-	PR ld/24373
-	* elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub):
-	Fix print formatter.
+	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-05-21  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+2021-02-01  Emery Hemingway  <ehmry@posteo.net>
 
-	PR 24460
-	* elf32-arm.c (get_value_helper): Remove.
-	(elf32_arm_final_link_relocate): Fix branch future relocations.
+	* config.bfd: Add *-*-genode* as a target for AArch64 and x86.
 
-2019-05-21  Tamar Christina  <tamar.christina@arm.com>
+2021-02-01  Egor Vishnyakov  <lenvampir@yandex.ru>
 
-	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.
+	PR 27254
+	* elf32-rl78.c (rl78_elf_relocate_section): Fix calculation of
+	offset for the R_RL78_RH_SADDR relocation.
 
-2019-05-20  Nick Clifton  <nickc@redhat.com>
+2021-01-29  Alan Modra  <amodra@gmail.com>
 
-	* po/fr.po: Updated French translation.
+	PR 27271
+	* elflink.c (bfd_elf_link_record_dynamic_symbol): Don't segfault
+	on symbols defined in absolute or other special sections.
 
-2019-05-16  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+2021-01-28  Alan Modra  <amodra@gmail.com>
 
-	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add case for Tag_MVE_arch.
+	PR 27259
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): Use linker_mark to
+	prevent endless looping of linked-to sections.
 
-2019-05-16  Alan Modra  <amodra@gmail.com>
+2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>
 
-	* elf32-arm.c (elf32_arm_write_section): Revert last change.
+	* bfd-elf.h (elfcore_write_file_note): New function.
+	* elf.c (elfcore_write_file_note): New function.
 
-2019-05-15  Alan Modra  <amodra@gmail.com>
+2021-01-26  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.
+	* elf32-ft32.c (ft32_reloc_type_lookup): Don't miss ft32_reloc_map[0].
 
-2019-05-14  Jamey Hicks  <jamey.hicks@gmail.com>
+2021-01-24  H.J. Lu  <hongjiu.lu@intel.com>
 
-	PR 19921
-	* verilog.c: (VerilogDataWidth): New variable.
-	(verilog_write_record): Emit bytes in VerilogDataWidth bundles.
+	PR binutils/27231
+	* dwarf2.c (read_rnglists): Ignore empty range when parsing line
+	number tables.
 
-2019-05-08  Nick Clifton  <nickc@redhat.com>
+2021-01-23  H.J. Lu  <hongjiu.lu@intel.com>
 
-	PR 24523
-	* elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Return TRUE
-	rather than FALSE if encountering a non-ELF file.
+	PR binutils/27231
+	* dwarf2.c (read_rnglists): Advance rngs_ptr after
+	_bfd_safe_read_leb128 when parsing DW_RLE_offset_pair.
 
-2019-05-06  Alan Modra  <amodra@gmail.com>
+2021-01-20  Alan Modra  <amodra@gmail.com>
 
-	* elf32-pj.c (pj_elf_reloc): Don't report undefined weak as an error.
+	* elf32-ppc.c: Delete outdated comment.
+	(TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define.
+	* elf64-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define.
 
-2019-05-06  Alan Modra  <amodra@gmail.com>
+2021-01-20  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.
+	* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't assume
+	section symbols are present.
 
-2019-05-04  Alan Modra  <amodra@gmail.com>
+2021-01-19  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.
+	* 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-05-02  Nick Clifton  <nickc@redhat.com>
+2021-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
-	PR 24493
-	* coffcode.h (styp_to_sec_flags): Treat .gnu.debuglink and
-	.gnu.debugaltlink sections as debugging sections.
+	PR ld/27193
+	* elflink.c (elf_create_symbuf): Also ignore section symbols.
 
-2019-04-30  Alan Modra  <amodra@gmail.com>
+2021-01-16  H.J. Lu  <hongjiu.lu@intel.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.
+	PR ld/23169
+	* elfxx-x86.c (_bfd_x86_elf_link_fixup_ifunc_symbol): Don't
+	check pointer_equality_needed.
 
-2019-04-26  H.J. Lu  <hongjiu.lu@intel.com>
+2021-01-15  H.J. Lu  <hongjiu.lu@intel.com>
 
-	PR ld/24486
-	* elflink.c (elf_link_output_extsym): Don't complain undefined
-	weak dynamic reference.
+	* 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.
 
-2019-04-25  Sudakshina Das  <sudi.das@arm.com>
+2021-01-16  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.
+	* compress.c (decompress_contents): Tidy inflateEnd result test.
 
-2019-04-22  Jim Wilson  <jimw@sifive.com>
+2021-01-16  Alan Modra  <amodra@gmail.com>
 
-	* elfnn-riscv.c (PRSTATUS_SIZE) [ARCH_SIZE==32]: Change from 0 to 204.
+	PR 26002
+	* elflink.c (elf_link_output_extsym): Use version 1 in
+	.gnu.version for undefined unversioned symbols.
 
-2019-04-19  Alan Modra  <amodra@gmail.com>
+2021-01-15  Nelson Chu  <nelson.chu@sifive.com>
 
-	* elf32-s12z.c (elf_backend_can_gc_sections): Don't define
+	* elfnn-riscv.c (riscv_relax_delete_bytes): Fixed the indent that
+	caused the by previous commit accidentally.
 
-2019-04-17  H.J. Lu  <hongjiu.lu@intel.com>
+2021-01-15  Nelson Chu  <nelson.chu@sifive.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.
+	* elfnn-riscv.c: Indent, labels and GNU coding standards tidy,
+	also aligned the code.
 
-2019-04-17  H.J. Lu  <hongjiu.lu@intel.com>
+2021-01-15  Nelson Chu  <nelson.chu@sifive.com>
 
-	PR ld/24458
-	* elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): Also check x86
-	linker_def.
+	* elfnn-riscv.c (riscv_merge_attributes): Fix typos of messages.
 
-2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+2021-01-15  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.
+	* elfnn-riscv.c: Comments tidy and improvement.
+	* elfxx-riscv.c: Likewise.
+	* elfxx-riscv.h: Likewise.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* reloc.c (BFD_RELOC_ARM_THUMB_LOOP12): New.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Regenerated.
+	PR ld/26688
+	* elf32-bfin.c (bfinfdpic_relocate_section): Skip non SEC_ALLOC
+	section for R_BFIN_FUNCDESC.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-01-14  Nick Clifton  <nickc@redhat.com>
 
-	* reloc.c (BFD_RELOC_THUMB_PCREL_BFCSEL): New relocation.
-	* bfd-in2.h: Regenerated.
-	* libbfd.h: Likewise.
+	* elf.c (elfcore_grok_win32pstatus): Check for a note type of 0.
 
-2019-04-15  Sudakshina Das  <sudi.das@arm.com>
+2021-01-13  Alan Modra  <amodra@gmail.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.
+	* Makefile.in: Regenerate.
+	* doc/Makefile.in: Regenerate.
 
-2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+2021-01-13  Alan Modra  <amodra@gmail.com>
 
-	* archures.c (bfd_mach_arm_8_1M_MAIN): Define.
+	PR 27160
+	* section.c (struct bfd_section): Remove pattern field.
+	(BFD_FAKE_SECTION): Adjust to suit.
 	* 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>
+	* elflink.c (compare_link_order, elf_fixup_link_order): Delete.
+	(bfd_elf_final_link): Don't call elf_fixup_link_order.
 
-	* config.bfd: Remove i[3-7]86-*-kaos* and i[3-7]86-*-chaos targets.
+2021-01-12  H.J. Lu  <hongjiu.lu@intel.com>
 
-2019-04-08  Alan Modra  <amodra@gmail.com>
+	PR binutils/26792
+	* configure.ac: Use GNU_MAKE_JOBSERVER.
+	* aclocal.m4: Regenerated.
+	* configure: Likewise.
 
-	* configure.ac (elfxx_x86): Define and use.
-	* configure: Regenerate.
+2021-01-12  H.J. Lu  <hongjiu.lu@intel.com>
 
-2019-04-06  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.
 
-	* 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>
+2021-01-11  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elf32-xtensa.c (shrink_dynamic_reloc_sections): Add
-	info->export_dynamic to the conditional.
+	PR ld/27173
+	* configure: Regenerated.
 
-2019-03-28  Alan Modra  <amodra@gmail.com>
+2021-01-11  Nick Clifton  <nickc@redhat.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.
+	* 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-03-15  H.J. Lu  <hongjiu.lu@intel.com>
+2021-01-09  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.
+	* configure: Regenerated.
 
-2019-03-15  Alan Modra  <amodra@gmail.com>
+2021-01-09  H.J. Lu  <hongjiu.lu@intel.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 ld/27166
+	* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Handle
+	-z lam-u48 and -z lam-u57.
 
-2019-02-20  Michael Roitzsch  <reactorcontrol@icloud.com>
+2021-01-09  Nick Clifton  <nickc@redhat.com>
 
-	* configure.ac (SHARED_LIBADD): Add -liberty -lintl for all
-	Darwin hosts, not just or1k.
+	* version.m4: Change to 2.36.50.
 	* configure: Regenerate.
+	* po/bfd.pot: 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>
+2021-01-09  Nick Clifton  <nickc@redhat.com>
 
-	PR 24225
-	* elf32-nios2.c (nios2_elf32_relocate_section): Use asprintf and
-	PRIx64 to generate warning messages.  Print local sym names too.
+	* 2.36 release branch crated.
 
-2019-02-09  Vineet Gupta  <vgupta@synopsys.com>
+2021-01-08  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elf32-arc (INIT_SYM_STRING): Delete.
-	(FINI_SYM_STRING): Likewise.
-	(init_str): Likewise.
-	(fini_str): Likewise.
+	* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Also set
+	LAM_U57 when setting LAM_U48.
 
-2019-02-08  Alan Modra  <amodra@gmail.com>
+2021-01-08  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* elf32-ppc.c (ppc_elf_relocate_section): Add %X to "unsupported
-	for bss-plt" warning to make it an error.
+	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.
 
-2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+2021-01-09  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.
+	* configure: Regenerate.
 
-2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+2021-01-07  Samuel Thibault  <samuel.thibault@gnu.org>
 
-	* elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak.
-	<R_VISIUM_PC16>: Use explicit range test to detect an overflow.
+	* configure: Regenerate.
 
-2019-02-07  Nick Clifton  <nickc@redhat.com>
+2021-01-07  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* config.bfd: Move the powerpc-lynxos and powerpc-windiss targets
-	into the definitely obsolete list.
+	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.
 
-2019-02-05  H.J. Lu  <hongjiu.lu@intel.com>
+2021-01-07  Nick Clifton  <nickc@redhat.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.
+	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.
 
-2019-01-21  Sergio Durigan Junior  <sergiodj@redhat.com>
+2021-01-07  Philipp Tomsich  <prt@gnu.org>
 
-	* elf32-arm.c (elf32_arm_final_link_relocate): Use 'llabs' instead
-	of 'labs' (and fix GCC warning).
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Added zihintpause.
 
-2019-01-25  Nick Clifton  <nickc@redhat.com>
+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>
 
-	* po/ru.po: Updated Russian translation.
+	* elfxx-riscv.c (riscv_std_z_ext_strtab): Added zba, zbb and zbc.
 
-2019-01-23  Nick Clifton  <nickc@redhat.com>
+2021-01-06  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* po/fr.po: Updated French translation.
+	* elf32-bfin.c (bfin_check_relocs): Check bfd_link_hash_indirect.
+	(bfinfdpic_check_relocs): Likewise.
 
-2019-01-21  Nick Clifton  <nickc@redhat.com>
+2021-01-06  Alan Modra  <amodra@gmail.com>
 
-	* po/pt.po: Updated Portuguese translation.
-	* po/uk.po: Updated Ukranian translation.
+	* 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.
 
-2019-01-21  Yuri Chornoivan  <yurchor@ukr.net>
+2021-01-06  Alan Modra  <amodra@gmail.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.
+	* config.bfd (sparc-*-solaris2*): Add sparc_elf32_vec.
+	(sparc64-*-solaris2*): Add sparc_elf64_vec and
+	sparc_elf32_vec.
 
-2019-01-19  Nick Clifton  <nickc@redhat.com>
+2021-01-06  Marcus Comstedt  <marcus@mc.pp.se>
 
-	* version.m4: Reset to 2.32.51
+	* 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.
-	* 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.
+	* 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.
 
-2019-01-09  Andrew Paprocki  <andrew@ishiboo.com>
+2021-01-04  Alexander Fedotov  <alfedotov@gmail.com>
 
-	* warning.m4: Adjust egrep pattern for non-GNU compilers.
-	* configure: Regenerate.
+	* 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.
 
-2019-01-08  Alan Modra  <amodra@gmail.com>
+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 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2009 ./bfd/ChangeLog-2009
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2009	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ChangeLog-2009	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2014 ./bfd/ChangeLog-2014
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2014	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ChangeLog-2014	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2015 ./bfd/ChangeLog-2015
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2015	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ChangeLog-2015	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2019 ./bfd/ChangeLog-2019
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2019	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/ChangeLog-2019	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2020 ./bfd/ChangeLog-2020
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ChangeLog-2020	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/ChangeLog-2020	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cisco-core.c ./bfd/cisco-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cisco-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cisco-core.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for CISCO crash dumps.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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,7 +92,7 @@ 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)
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff64-rs6000.c ./bfd/coff64-rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff64-rs6000.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff64-rs6000.c	2021-12-16 01:57:38.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-2021 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,15 +362,28 @@ _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;
@@ -359,17 +391,25 @@ _bfd_xcoff64_swap_aux_in (bfd *abfd, voi
 	    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_fname, ext->x_file.x_n.x_fname, FILNMLEN);
+      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)
 	{
+	  /* 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;
+
 	  bfd_signed_vma h = 0;
 	  bfd_vma l = 0;
 
@@ -385,55 +425,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.l
+	    = 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,6 +493,14 @@ _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)
 	{
@@ -449,13 +509,15 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, vo
 		    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_fname, FILNMLEN);
+      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:
@@ -474,71 +536,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.l,
+		    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,8 +617,8 @@ _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;
@@ -575,7 +631,7 @@ _bfd_xcoff64_put_ldsymbol_name (bfd *abf
   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 +768,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,
@@ -1075,7 +785,7 @@ xcoff64_reloc_type_br (bfd *input_bfd,
   bfd_vma section_offset;
 
   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;
@@ -1148,215 +858,25 @@ 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[] =
 {
@@ -1365,171 +885,171 @@ reloc_howto_type xcoff64_howto_table[] =
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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) */
 	 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 */
+	 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_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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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),
 
@@ -1538,235 +1058,365 @@ reloc_howto_type xcoff64_howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 4,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+
+  /* 0x26: 32 bit relocation, but store negative value.  */
+  HOWTO (R_NEG,			/* 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 */
+	 "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 */
+	 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_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 */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 +1437,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 +1467,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 +1480,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 +1515,209 @@ 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.bitsize > 16 ? (howto.bitsize > 32 ? 4 : 2) : 1;
+	      howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize);
+	      break;
+
+	    default:
+	      _bfd_error_handler
+		(_("%pB: relocatation (%d) at (0x%" BFD_VMA_FMT "x) 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)))
+	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;
+}
+
+
 /* 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 +1760,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;
@@ -1906,54 +1777,61 @@ xcoff64_slurp_armap (bfd *abfd)
 
   if (xcoff_ardata (abfd) == NULL)
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   off = bfd_scan_vma (xcoff_ardata_big (abfd)->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;
+    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,28 +1848,28 @@ 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)
     {
@@ -2051,7 +1929,7 @@ xcoff64_archive_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 
@@ -2123,14 +2001,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 +2028,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 +2056,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 +2100,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 +2189,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 +2225,7 @@ xcoff64_generate_rtinit (bfd *abfd, cons
 
   string_table = (bfd_byte *) bfd_zmalloc (string_table_size);
   if (string_table == NULL)
-    return FALSE;
+    return false;
 
   val = string_table_size;
   bfd_put_32 (abfd, val, &string_table[0]);
@@ -2511,7 +2389,7 @@ xcoff64_generate_rtinit (bfd *abfd, cons
   free (data_buffer);
   data_buffer = NULL;
 
-  return TRUE;
+  return true;
 }
 
 /* The typical dynamic reloc.  */
@@ -2521,17 +2399,17 @@ HOWTO (0,			/* type */
        0,			/* rightshift */
        4,			/* size (0 = byte, 1 = short, 2 = long) */
        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] =
+static const unsigned long xcoff64_glink_code[10] =
 {
   0xe9820000,	/* ld r12,0(r2) */
   0xf8410028,	/* std r2,40(r1) */
@@ -2566,10 +2444,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,
@@ -2658,6 +2536,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,7 +2576,7 @@ 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
     },
@@ -2798,9 +2677,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 +2709,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,
@@ -2921,6 +2800,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,7 +2840,7 @@ 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
     },
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-alpha.c ./bfd/coff-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-alpha.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-alpha.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
    Ian Lance Taylor <ian@cygnus.com>.
 
@@ -118,45 +118,45 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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
@@ -165,15 +165,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -182,15 +182,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -205,15 +205,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -230,15 +230,15 @@ static reloc_howto_type alpha_howto_tabl
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -247,90 +247,90 @@ static reloc_howto_type alpha_howto_tabl
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,			/* 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.  */
@@ -338,15 +338,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -354,15 +354,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -370,38 +370,38 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,			/* 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,30 +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;
 
-  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 (!bfd_get_full_section_contents (input_bfd, input_section, &data))
+    return NULL;
+
+  if (data == NULL)
+    return NULL;
+
+  if (reloc_size == 0)
+    return data;
+
+  reloc_vector = (arelent **) bfd_malloc (reloc_size);
+  if (reloc_vector == NULL)
+    return NULL;
 
   reloc_count = bfd_canonicalize_reloc (input_bfd, input_section,
 					reloc_vector, symbols);
@@ -760,7 +766,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 +794,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
@@ -1080,7 +1086,7 @@ 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:
@@ -1103,7 +1109,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)
@@ -1127,13 +1133,11 @@ alpha_ecoff_get_relocated_section_conten
     abort ();
 
  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);
   return NULL;
 }
 
@@ -1327,7 +1331,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,7 +1342,7 @@ 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;
@@ -1354,7 +1358,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 +1447,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,9 +1477,9 @@ 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;
 
       r_vaddr = H_GET_64 (input_bfd, ext_rel->r_vaddr);
@@ -1490,9 +1494,9 @@ 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;
 
       switch (r_type)
@@ -1526,13 +1530,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 +1545,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 +1553,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:
@@ -1582,9 +1586,9 @@ alpha_relocate_section (bfd *output_bfd,
 			|| ((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:
@@ -1648,7 +1652,7 @@ alpha_relocate_section (bfd *output_bfd,
 	    bfd_put_32 (input_bfd, (bfd_vma) insn2,
 			contents + r_vaddr - input_section->vma + r_symndx);
 
-	    gp_usedp = TRUE;
+	    gp_usedp = true;
 	  }
 	  break;
 
@@ -1691,7 +1695,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;
 		    }
 		}
@@ -1746,7 +1750,7 @@ alpha_relocate_section (bfd *output_bfd,
 		}
 	    }
 
-	  adjust_addrp = FALSE;
+	  adjust_addrp = false;
 	  break;
 
 	case ALPHA_R_OP_STORE:
@@ -1783,7 +1787,7 @@ alpha_relocate_section (bfd *output_bfd,
 	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;
 	}
 
@@ -1888,7 +1892,7 @@ alpha_relocate_section (bfd *output_bfd,
 		    {
 		      (*info->callbacks->undefined_symbol)
 			(info, h->root.root.string, input_bfd, input_section,
-			 r_vaddr - input_section->vma, TRUE);
+			 r_vaddr - input_section->vma, true);
 		      relocation = 0;
 		    }
 		}
@@ -1958,20 +1962,20 @@ alpha_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 (tos != 0)
     abort ();
 
-  return TRUE;
+  return true;
 }
 
 /* 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 +1984,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
@@ -2026,7 +2030,10 @@ alpha_ecoff_read_ar_hdr (bfd *abfd)
       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;
+	{
+	  free (ret);
+	  return NULL;
+	}
 
       ret->parsed_size = H_GET_64 (abfd, ab);
     }
@@ -2047,6 +2054,7 @@ 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);
@@ -2080,6 +2088,14 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
     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;
@@ -2118,7 +2134,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
 		n = dict[h];
 	      else
 		{
-		  if (! bfd_bread (&n, (bfd_size_type) 1, nbfd))
+		  if (bfd_bread (&n, 1, nbfd) != 1)
 		    goto error_return;
 		  dict[h] = n;
 		}
@@ -2147,7 +2163,7 @@ 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;
@@ -2159,8 +2175,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *arc
   return nbfd;
 
  error_return:
-  if (buf != NULL)
-    free (buf);
+  free (buf);
   if (nbfd != NULL)
     bfd_close (nbfd);
   return NULL;
@@ -2288,8 +2303,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 +2323,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 +2427,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-arm.c ./bfd/coff-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-arm.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-arm.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM COFF files.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -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
@@ -223,12 +223,12 @@ static reloc_howto_type aoutarm_std_relo
 	   2,
 	   2,
 	   24,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_dont,
 	   aoutarm_fix_pcrel_26_done,
 	   "ARM_26D",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0x00ffffff,
 	   0x0,
 	   PCRELOFFSET),
@@ -236,12 +236,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   2,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_32",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
@@ -249,12 +249,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   2,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_RVA32",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
@@ -262,12 +262,12 @@ static reloc_howto_type aoutarm_std_relo
 	   2,
 	   2,
 	   24,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   aoutarm_fix_pcrel_26 ,
 	   "ARM_26",
-	   FALSE,
+	   false,
 	   0x00ffffff,
 	   0x00ffffff,
 	   PCRELOFFSET),
@@ -275,12 +275,12 @@ static reloc_howto_type aoutarm_std_relo
 	   1,
 	   1,
 	   11,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_12 ,
 	   "ARM_THUMB12",
-	   FALSE,
+	   false,
 	   0x000007ff,
 	   0x000007ff,
 	   PCRELOFFSET),
@@ -297,12 +297,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   1,
 	   16,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_SECTION",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0x0000ffff,
 	   0x0000ffff,
 	   PCRELOFFSET),
@@ -310,12 +310,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   2,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_SECREL",
-	   TRUE,	/* partial_inplace.  */
+	   true,	/* partial_inplace.  */
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
@@ -324,12 +324,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   0,
 	   8,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_8",
-	   TRUE,
+	   true,
 	   0x000000ff,
 	   0x000000ff,
 	   PCRELOFFSET),
@@ -337,12 +337,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   1,
 	   16,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_16",
-	   TRUE,
+	   true,
 	   0x0000ffff,
 	   0x0000ffff,
 	   PCRELOFFSET),
@@ -350,12 +350,12 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   2,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
@@ -363,12 +363,12 @@ static reloc_howto_type aoutarm_std_relo
 	   2,
 	   2,
 	   24,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   aoutarm_fix_pcrel_26 ,
 	   "ARM_26",
-	   FALSE,
+	   false,
 	   0x00ffffff,
 	   0x00ffffff,
 	   PCRELOFFSET),
@@ -376,92 +376,92 @@ static reloc_howto_type aoutarm_std_relo
 	   0,
 	   0,
 	   8,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_arm_reloc,
 	   "ARM_DISP8",
-	   TRUE,
+	   true,
 	   0x000000ff,
 	   0x000000ff,
-	   TRUE),
+	   true),
     HOWTO (ARM_DISP16,
 	   0,
 	   1,
 	   16,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_arm_reloc,
 	   "ARM_DISP16",
-	   TRUE,
+	   true,
 	   0x0000ffff,
 	   0x0000ffff,
-	   TRUE),
+	   true),
     HOWTO (ARM_DISP32,
 	   0,
 	   2,
 	   32,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_arm_reloc,
 	   "ARM_DISP32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
-	   TRUE),
+	   true),
     HOWTO (ARM_26D,
 	   2,
 	   2,
 	   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,
 	   16,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_NEG16",
-	   TRUE,
+	   true,
 	   0x0000ffff,
 	   0x0000ffff,
-	   FALSE),
+	   false),
     HOWTO (ARM_NEG32,
 	   0,
 	   -2,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_NEG32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
-	   FALSE),
+	   false),
     HOWTO (ARM_RVA32,
 	   0,
 	   2,
 	   32,
-	   FALSE,
+	   false,
 	   0,
 	   complain_overflow_bitfield,
 	   coff_arm_reloc,
 	   "ARM_RVA32",
-	   TRUE,
+	   true,
 	   0xffffffff,
 	   0xffffffff,
 	   PCRELOFFSET),
@@ -469,12 +469,12 @@ static reloc_howto_type aoutarm_std_relo
 	   1,
 	   1,
 	   8,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_9 ,
 	   "ARM_THUMB9",
-	   FALSE,
+	   false,
 	   0x000000ff,
 	   0x000000ff,
 	   PCRELOFFSET),
@@ -482,12 +482,12 @@ static reloc_howto_type aoutarm_std_relo
 	   1,
 	   1,
 	   11,
-	   TRUE,
+	   true,
 	   0,
 	   complain_overflow_signed,
 	   coff_thumb_pcrel_12 ,
 	   "ARM_THUMB12",
-	   FALSE,
+	   false,
 	   0x000007ff,
 	   0x000007ff,
 	   PCRELOFFSET),
@@ -495,12 +495,12 @@ static reloc_howto_type aoutarm_std_relo
 	   1,
 	   2,
 	   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,
@@ -956,10 +956,10 @@ arm_emit_base_file_entry (struct bfd_lin
   if (coff_data (output_bfd)->pe)
      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
@@ -1243,15 +1243,15 @@ coff_arm_relocate_section (bfd *output_b
 	       2,
 	       2,
 	       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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-arm.h ./bfd/coff-arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-arm.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-arm.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM COFF files.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-bfd.c ./bfd/coff-bfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-bfd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-bfd.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD COFF interfaces used outside of BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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,7 +39,7 @@ 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;
@@ -50,12 +50,12 @@ bfd_coff_get_syment (bfd *abfd,
 
   /* 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 +72,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;
@@ -95,5 +95,5 @@ bfd_coff_get_auxent (bfd *abfd,
       ((combined_entry_type *) pauxent->x_csect.x_scnlen.p
        - obj_raw_syments (abfd));
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-bfd.h ./bfd/coff-bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-bfd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-bfd.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD COFF interfaces used outside of BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -44,13 +44,13 @@ 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;
+  bool 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;
+  bool 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 +81,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coffcode.h ./bfd/coffcode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coffcode.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coffcode.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -325,7 +325,7 @@ CODE_FRAGMENT
 .  } u;
 .
 . {* Selector for the union above.  *}
-. bfd_boolean is_sym;
+. bool is_sym;
 .} combined_entry_type;
 .
 .
@@ -343,7 +343,7 @@ CODE_FRAGMENT
 .  struct lineno_cache_entry *lineno;
 .
 .  {* Have the line numbers been relocated yet ? *}
-.  bfd_boolean done_lineno;
+.  bool done_lineno;
 .} coff_symbol_type;
 
 */
@@ -364,6 +364,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,50 +390,50 @@ 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
+static bool 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
+static bool 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
+static bool styp_to_sec_flags
   (bfd *, void *, const char *, asection *, flagword *);
-static bfd_boolean coff_bad_format_hook
+static bool 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
+static bool coff_new_section_hook
   (bfd *, asection *);
-static bfd_boolean coff_set_arch_mach_hook
+static bool coff_set_arch_mach_hook
   (bfd *, void *);
-static bfd_boolean coff_write_relocs
+static bool coff_write_relocs
   (bfd *, int);
-static bfd_boolean coff_set_flags
+static bool coff_set_flags
   (bfd *, unsigned int *, unsigned short *);
-static bfd_boolean coff_set_arch_mach
+static bool coff_set_arch_mach
   (bfd *, enum bfd_architecture, unsigned long) ATTRIBUTE_UNUSED;
-static bfd_boolean coff_compute_section_file_positions
+static bool coff_compute_section_file_positions
   (bfd *);
-static bfd_boolean coff_write_object_contents
+static bool coff_write_object_contents
   (bfd *) ATTRIBUTE_UNUSED;
-static bfd_boolean coff_set_section_contents
+static bool coff_set_section_contents
   (bfd *, asection *, const void *, file_ptr, bfd_size_type);
-static bfd_boolean coff_slurp_line_table
+static bool coff_slurp_line_table
   (bfd *, asection *);
-static bfd_boolean coff_slurp_symbol_table
+static bool coff_slurp_symbol_table
   (bfd *);
 static enum coff_symbol_classification coff_classify_symbol
   (bfd *, struct internal_syment *);
-static bfd_boolean coff_slurp_reloc_table
+static bool coff_slurp_reloc_table
   (bfd *, asection *, asymbol **);
 static long coff_canonicalize_reloc
   (bfd *, asection *, arelent **, asymbol **);
@@ -441,37 +445,29 @@ static void * coff_mkobject_hook
 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
+static bool ticoff0_bad_format_hook
   (bfd *, void * );
-static bfd_boolean ticoff1_bad_format_hook
+static bool 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;
+  return true;
 }
 #else /* !defined (COFF_LONG_SECTION_NAMES) */
-static bfd_boolean
+static bool
 bfd_coff_set_long_section_names_disallowed (bfd *abfd, int enable)
 {
   (void) abfd;
   (void) enable;
-  return FALSE;
+  return false;
 }
 #endif /* defined (COFF_LONG_SECTION_NAMES) */
 
@@ -531,8 +527,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 +536,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;
@@ -636,16 +640,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 +680,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 +729,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 +795,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 +843,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 +879,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,15 +891,15 @@ 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 */
@@ -1109,7 +1143,7 @@ handle_COMDAT (bfd * abfd,
 		 drop through from the above).  */
 	      {
 		char *newname;
-		bfd_size_type amt;
+		size_t amt;
 
 		/* This must the second symbol with the
 		   section #.  It is the actual symbol name.
@@ -1156,7 +1190,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 +1200,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;
 
@@ -1308,10 +1342,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 +1358,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
 
@@ -1400,14 +1439,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,32 +1462,32 @@ 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);
 .
@@ -1463,13 +1502,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,22 +1516,22 @@ 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;
@@ -1640,45 +1679,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 +1787,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;
@@ -1781,7 +1820,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 +1830,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 +1838,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 +1848,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 +1882,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;
 
@@ -1954,6 +1993,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, (file_ptr) hdr->s_relptr, 0) != 0)
+	return;
+      if (bfd_bread (& dst, relsz, abfd) != relsz)
+	return;
+
+      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 +2034,22 @@ 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;
@@ -1986,7 +2059,7 @@ coff_mkobject (bfd * abfd)
 
 /*  make_abs_section(abfd);*/
 
-  return TRUE;
+  return true;
 }
 #endif
 
@@ -2040,7 +2113,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 +2139,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 +2150,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 +2161,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:
@@ -2161,15 +2220,19 @@ coff_set_arch_mach_hook (bfd *abfd, void
       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 +2248,7 @@ coff_set_arch_mach_hook (bfd *abfd, void
 	  machine = bfd_mach_z8002;
 	  break;
 	default:
-	  return FALSE;
+	  return false;
 	}
       break;
 #endif
@@ -2218,15 +2281,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 +2389,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 +2401,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 +2423,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,
@@ -2393,12 +2446,12 @@ coff_pointerize_aux_hook (bfd *abfd ATTR
 
       /* 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 +2460,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,
@@ -2448,12 +2501,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 +2542,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 +2566,7 @@ coff_write_relocs (bfd * abfd, int first
 	if (p == NULL)
 	  {
 	    if (s->reloc_count > 0)
-	      return FALSE;
+	      return false;
 	  }
 	else
 	  {
@@ -2524,10 +2577,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;
@@ -2538,7 +2591,7 @@ coff_write_relocs (bfd * abfd, int first
 	  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;
+	    return false;
 	}
 #endif
 
@@ -2610,7 +2663,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;
 		      }
 		  }
 	      }
@@ -2629,22 +2682,21 @@ coff_write_relocs (bfd * abfd, int first
 
 	  if (bfd_bwrite (& dst, (bfd_size_type) bfd_coff_relsz (abfd),
 			 abfd) != bfd_coff_relsz (abfd))
-	    return FALSE;
+	    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 +2708,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 +2733,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 +2764,11 @@ coff_set_flags (bfd * abfd,
 	      *magicp = TICOFF2MAGIC;
 	      break;
 	    default:
-	      return FALSE;
+	      return false;
 	    }
 	}
       TICOFF_TARGET_MACHINE_SET (flagsp, bfd_get_mach (abfd));
-      return TRUE;
-#endif
-
-#ifdef TIC80_ARCH_MAGIC
-    case bfd_arch_tic80:
-      *magicp = TIC80_ARCH_MAGIC;
-      return TRUE;
+      return true;
 #endif
 
 #ifdef ARMMAGIC
@@ -2757,13 +2807,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 +2822,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 +2841,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 +2857,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 +2890,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 +2923,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;
@@ -2919,7 +2959,7 @@ coff_compute_section_file_positions (bfd
 	  _bfd_error_handler
 	    /* xgettext:c-format */
 	    (_("%pB: page size is too large (0x%x)"), abfd, page_size);
-	  return FALSE;
+	  return false;
 	}
     }
   else
@@ -3022,7 +3062,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 +3119,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 +3132,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;
@@ -3150,10 +3190,15 @@ 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 ((!strcmp (current->name, _TEXT)
+	       || !strcmp (current->name, _DATA))
+	      && (previous == NULL || strcmp(previous->name, _TDATA)))
 	    {
 	      bfd_vma align = 4096;
 	      bfd_vma sofar_off = sofar % align;
@@ -3213,7 +3258,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
@@ -3241,7 +3286,7 @@ 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;
+	return false;
     }
 
   /* Make sure the relocations are aligned.  We don't need to make
@@ -3250,18 +3295,15 @@ coff_compute_section_file_positions (bfd
   sofar = BFD_ALIGN (sofar, 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;
@@ -3270,7 +3312,7 @@ coff_read_word (bfd *abfd, unsigned int
   if (status < 1)
     {
       *value = 0;
-      return FALSE;
+      return false;
     }
 
   if (status == 1)
@@ -3278,21 +3320,21 @@ 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;
 }
 
 static unsigned int
-coff_compute_checksum (bfd *abfd)
+coff_compute_checksum (bfd *abfd, unsigned int *pelength)
 {
-  bfd_boolean more_data;
+  bool more_data;
   file_ptr filepos;
   unsigned int value;
   unsigned int total;
 
   total = 0;
-  pelength = 0;
+  *pelength = 0;
   filepos = (file_ptr) 0;
 
   do
@@ -3300,7 +3342,7 @@ coff_compute_checksum (bfd *abfd)
       if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
 	return 0;
 
-      more_data = coff_read_word (abfd, &value);
+      more_data = coff_read_word (abfd, &value, pelength);
       total += value;
       total = 0xffff & (total + (total >> 0x10));
       filepos += 2;
@@ -3310,49 +3352,51 @@ coff_compute_checksum (bfd *abfd)
   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_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 true;
 }
 
 #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 +3404,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 +3427,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 +3437,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 +3467,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 +3496,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
@@ -3499,7 +3547,7 @@ coff_write_object_contents (bfd * abfd)
 		    /* 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
@@ -3509,7 +3557,7 @@ coff_write_object_contents (bfd * abfd)
 	      /* 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 +3605,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 +3634,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 +3677,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
+	  if (bfd_coff_swap_scnhdr_out (abfd, &section, &buff) == 0
 	      || bfd_bwrite (& buff, amt, abfd) != amt)
-	    return FALSE;
+	    return false;
 	}
 
 #ifdef COFF_WITH_PE
@@ -3748,14 +3803,30 @@ 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
+	  if (bfd_coff_swap_scnhdr_out (abfd, &scnhdr, &buff) == 0
 	      || bfd_bwrite (& buff, amt, abfd) != amt)
-	    return FALSE;
+	    return false;
 	}
     }
 #endif
 #endif
 
+#if defined (COFF_GO32_EXE) || defined (COFF_GO32)
+  /* Pad section headers.  */
+  if ((abfd->flags & EXEC_P) && abfd->sections != NULL)
+    {
+      file_ptr cur_ptr = scn_base
+			 + abfd->section_count * bfd_coff_scnhsz (abfd);
+      long fill_size = (abfd->sections->filepos - cur_ptr);
+      bfd_byte *b = bfd_zmalloc (fill_size);
+      if (b)
+	{
+	  bfd_bwrite ((PTR)b, fill_size, abfd);
+	  free (b);
+	}
+    }
+#endif
+
   /* OK, now set up the filehdr...  */
 
   /* Don't include the internal abs section in the section count */
@@ -3811,9 +3882,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,21 +3909,12 @@ 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)
-#define __A_MAGIC_SET__
-    internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
-#endif
-
 #if defined MCORE_PE
 #define __A_MAGIC_SET__
     internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
@@ -3919,14 +3978,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 +3993,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;
+	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;
-    }
-#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.  */
@@ -4038,6 +4079,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 +4119,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;
@@ -4080,7 +4146,7 @@ coff_write_object_contents (bfd * abfd)
 
   /* Now write header.  */
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   {
     char * buff;
@@ -4088,7 +4154,7 @@ 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);
@@ -4096,7 +4162,7 @@ coff_write_object_contents (bfd * abfd)
     free (buff);
 
     if (amount != bfd_coff_filhsz (abfd))
-      return FALSE;
+      return false;
   }
 
   if (abfd->flags & EXEC_P)
@@ -4108,7 +4174,7 @@ 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);
@@ -4116,34 +4182,36 @@ coff_write_object_contents (bfd * 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;
+	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 +4221,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)
@@ -4196,13 +4264,13 @@ 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;
 }
@@ -4211,15 +4279,16 @@ 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_alloc_and_read (abfd, amt, amt);
 }
 
 /*
@@ -4263,7 +4332,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,14 +4340,15 @@ 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);
 
@@ -4287,14 +4357,17 @@ coff_slurp_line_table (bfd *abfd, asecti
       _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;
+      return false;
     }
 
-  lineno_cache = (alent *) bfd_alloc2 (abfd,
-				       (bfd_size_type) asect->lineno_count + 1,
-				       sizeof (alent));
+  if (_bfd_mul_overflow (asect->lineno_count + 1, sizeof (alent), &amt))
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return false;
+    }
+  lineno_cache = (alent *) bfd_alloc (abfd, amt);
   if (lineno_cache == NULL)
-    return FALSE;
+    return false;
 
   native_lineno = (LINENO *) buy_and_read (abfd, asect->line_filepos,
 					   asect->lineno_count,
@@ -4304,14 +4377,14 @@ 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;
     }
 
   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 +4403,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 +4412,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 +4426,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 +4440,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 +4455,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)
@@ -4406,8 +4479,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 +4499,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 +4528,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 +4542,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;
@@ -4511,7 +4600,7 @@ coff_slurp_symbol_table (bfd * abfd)
 	  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)
 	    {
@@ -4775,7 +4864,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 +4874,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 +4907,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 +4933,12 @@ coff_classify_symbol (bfd *abfd,
     case C_THUMBEXT:
     case C_THUMBEXTFUNC:
 #endif
+#ifdef RS6000COFF_C
+    case C_HIDEXT:
+#if ! defined _AIX52 && ! defined AIX_WEAK_SUPPORT
+    case C_AIX_WEAKEXT:
+#endif
+#endif
 #ifdef C_SYSTEM
     case C_SYSTEM:
 #endif
@@ -4857,6 +4952,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:
@@ -4967,31 +5066,35 @@ SUBSUBSECTION
   }
 #endif
 
-static bfd_boolean
+static bool
 coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols)
 {
   RELOC *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));
-
+  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 || native_relocs == NULL)
-    return FALSE;
+    return false;
 
   for (idx = 0; idx < asect->reloc_count; idx++)
     {
@@ -5061,12 +5164,12 @@ 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;
+	  return false;
 	}
     }
 
   asect->relocation = reloc_cache;
-  return TRUE;
+  return true;
 }
 
 #ifndef coff_rtype_to_howto
@@ -5226,7 +5329,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 +5339,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
 
@@ -5296,16 +5399,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,
@@ -5337,16 +5440,16 @@ static bfd_coff_backend_data ticoff0_swa
   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,
@@ -5379,16 +5482,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,
@@ -5640,10 +5743,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,
@@ -5661,7 +5764,7 @@ static bfd_coff_backend_data bigobj_swap
 #endif /* COFF_WITH_PE_BIGOBJ */
 
 #ifndef coff_close_and_cleanup
-#define coff_close_and_cleanup		    _bfd_generic_close_and_cleanup
+#define coff_close_and_cleanup		    _bfd_coff_close_and_cleanup
 #endif
 
 #ifndef coff_bfd_free_cached_info
@@ -5791,6 +5894,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 +5956,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 +6018,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coffgen.c ./bfd/coffgen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coffgen.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coffgen.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -46,14 +46,14 @@
 /* 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;
   char *name;
-  bfd_boolean result = TRUE;
+  bool result = true;
   flagword flags;
 
   name = NULL;
@@ -76,7 +76,7 @@ make_a_section_from_file (bfd *abfd,
 	 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);
+      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);
@@ -84,14 +84,14 @@ make_a_section_from_file (bfd *abfd,
 	{
 	  strings = _bfd_coff_read_string_table (abfd);
 	  if (strings == NULL)
-	    return FALSE;
+	    return false;
 	  if ((bfd_size_type)(strindex + 2) >= obj_coff_strings_len (abfd))
-	    return FALSE;
+	    return false;
 	  strings += strindex;
 	  name = (char *) bfd_alloc (abfd,
 				     (bfd_size_type) strlen (strings) + 1 + 1);
 	  if (name == NULL)
-	    return FALSE;
+	    return false;
 	  strcpy (name, strings);
 	}
     }
@@ -102,14 +102,14 @@ 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 false;
 
   return_section->vma = hdr->s_vaddr;
   return_section->lma = hdr->s_paddr;
@@ -129,7 +129,7 @@ make_a_section_from_file (bfd *abfd,
 
   if (! bfd_coff_styp_to_sec_flags_hook (abfd, hdr, name, return_section,
 					 & flags))
-    result = FALSE;
+    result = false;
 
   return_section->flags = flags;
 
@@ -178,7 +178,7 @@ make_a_section_from_file (bfd *abfd,
 		/* xgettext: c-format */
 		(_("%pB: unable to initialize compress status for section %s"),
 		 abfd, name);
-	      return FALSE;
+	      return false;
 	    }
 	  if (return_section->compress_status == COMPRESS_SECTION_DONE)
 	    {
@@ -188,7 +188,7 @@ make_a_section_from_file (bfd *abfd,
 
 		  new_name = bfd_alloc (abfd, len + 2);
 		  if (new_name == NULL)
-		    return FALSE;
+		    return false;
 		  new_name[0] = '.';
 		  new_name[1] = 'z';
 		  memcpy (new_name + 2, name + 1, len);
@@ -202,7 +202,7 @@ make_a_section_from_file (bfd *abfd,
 		/* xgettext: c-format */
 		(_("%pB: unable to initialize decompress status for section %s"),
 		 abfd, name);
-	      return FALSE;
+	      return false;
 	    }
 	  if (name[1] == 'z')
 	    {
@@ -210,7 +210,7 @@ make_a_section_from_file (bfd *abfd,
 
 	      new_name = bfd_alloc (abfd, len);
 	      if (new_name == NULL)
-		return FALSE;
+		return false;
 	      new_name[0] = '.';
 	      memcpy (new_name + 1, name + 2, len - 1);
 	    }
@@ -225,12 +225,12 @@ make_a_section_from_file (bfd *abfd,
 
 /* Read in a COFF object and make it into a BFD.  This is used by
    ECOFF as well.  */
-const bfd_target *
+bfd_cleanup
 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 +275,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 +299,23 @@ coff_real_object_p (bfd *abfd,
 	}
     }
 
-  return abfd->xvec;
+  _bfd_coff_free_symbols (abfd);
+  return _bfd_no_cleanup;
 
  fail:
+  _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 +329,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);
@@ -363,18 +359,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);
@@ -495,9 +486,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;
@@ -553,11 +544,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 +563,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;
 }
 
@@ -699,7 +685,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 +712,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 +774,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
@@ -982,7 +968,7 @@ 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,
@@ -1025,10 +1011,10 @@ coff_write_symbol (bfd *abfd,
   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;
+    return false;
   bfd_release (abfd, buf);
 
   if (native->u.syment.n_numaux > 0)
@@ -1039,7 +1025,7 @@ 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);
@@ -1049,7 +1035,7 @@ coff_write_symbol (bfd *abfd,
 				 native->u.syment.n_numaux,
 				 buf);
 	  if (bfd_bwrite (buf, auxesz, abfd) != auxesz)
-	    return FALSE;
+	    return false;
 	}
       bfd_release (abfd, buf);
     }
@@ -1058,14 +1044,14 @@ 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,
@@ -1081,7 +1067,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 +1076,11 @@ coff_write_alien_symbol (bfd *abfd,
       symbol->name = "";
       if (isym != NULL)
 	memset (isym, 0, sizeof (*isym));
-      return TRUE;
+      return true;
     }
   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 +1108,7 @@ coff_write_alien_symbol (bfd *abfd,
       symbol->name = "";
       if (isym != NULL)
 	memset (isym, 0, sizeof (*isym));
-      return TRUE;
+      return true;
     }
   else
     {
@@ -1162,7 +1148,7 @@ coff_write_alien_symbol (bfd *abfd,
 
 /* 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,
@@ -1179,7 +1165,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 +1194,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 +=
@@ -1228,7 +1214,7 @@ 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;
@@ -1263,7 +1249,7 @@ coff_write_symbols (bfd *abfd)
 
   /* 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;
@@ -1278,7 +1264,7 @@ coff_write_symbols (bfd *abfd)
 	  if (!coff_write_alien_symbol (abfd, symbol, NULL, NULL, &written,
 					&string_size, &debug_string_section,
 					&debug_string_size))
-	    return FALSE;
+	    return false;
 	}
       else
 	{
@@ -1323,7 +1309,7 @@ coff_write_symbols (bfd *abfd)
 	  if (!coff_write_native_symbol (abfd, c_symbol, &written,
 					 &string_size, &debug_string_section,
 					 &debug_string_size))
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -1342,7 +1328,7 @@ coff_write_symbols (bfd *abfd)
 #endif
       if (bfd_bwrite ((void *) buffer, (bfd_size_type) sizeof (buffer), abfd)
 	  != sizeof (buffer))
-	return FALSE;
+	return false;
 
       /* Handle long section names.  This code must handle section
 	 names just as they are handled in coff_write_object_contents.  */
@@ -1359,7 +1345,7 @@ coff_write_symbols (bfd *abfd)
 		{
 		  if (bfd_bwrite (o->name, (bfd_size_type) (len + 1), abfd)
 		      != len + 1)
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -1401,7 +1387,7 @@ coff_write_symbols (bfd *abfd)
 	      if (bfd_coff_force_symnames_in_strings (abfd))
 		{
 		  if (bfd_bwrite (".file", (bfd_size_type) 6, abfd) != 6)
-		    return FALSE;
+		    return false;
 		}
 	      maxlen = bfd_coff_filnmlen (abfd);
 	    }
@@ -1412,7 +1398,7 @@ coff_write_symbols (bfd *abfd)
 	    {
 	      if (bfd_bwrite ((void *) (q->name), (bfd_size_type) name_length + 1,
 			     abfd) != name_length + 1)
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -1431,7 +1417,7 @@ coff_write_symbols (bfd *abfd)
 #endif
       if (bfd_bwrite ((void *) buffer, (bfd_size_type) STRING_SIZE_SIZE, abfd)
 	  != STRING_SIZE_SIZE)
-	return FALSE;
+	return false;
     }
 
   /* Make sure the .debug section was created to be the correct size.
@@ -1445,10 +1431,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 +1444,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)
 	    {
@@ -1486,7 +1472,7 @@ coff_write_linenumbers (bfd *abfd)
 		      bfd_coff_swap_lineno_out (abfd, &out, buff);
 		      if (bfd_bwrite (buff, (bfd_size_type) linesz, abfd)
 			  != linesz)
-			return FALSE;
+			return false;
 		      l++;
 		      while (l->line_number)
 			{
@@ -1495,7 +1481,7 @@ coff_write_linenumbers (bfd *abfd)
 			  bfd_coff_swap_lineno_out (abfd, &out, buff);
 			  if (bfd_bwrite (buff, (bfd_size_type) linesz, abfd)
 			      != linesz)
-			    return FALSE;
+			    return false;
 			  l++;
 			}
 		    }
@@ -1505,7 +1491,7 @@ coff_write_linenumbers (bfd *abfd)
 	}
     }
   bfd_release (abfd, buff);
-  return TRUE;
+  return true;
 }
 
 alent *
@@ -1541,6 +1527,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.  */
@@ -1591,19 +1579,20 @@ 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, sec_size);
+  if (debug_section == NULL)
+    return NULL;
+
+  if (bfd_seek (abfd, position, SEEK_SET) != 0)
     return NULL;
 
   * sect_return = sect;
@@ -1634,53 +1623,31 @@ 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;
 
   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 (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-      || bfd_bread (syms, size, abfd) != size)
-    {
-      if (syms != NULL)
-	free (syms);
-      return FALSE;
-    }
+  if (size == 0)
+    return true;
 
+  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
@@ -1696,6 +1663,7 @@ _bfd_coff_read_string_table (bfd *abfd)
   bfd_size_type strsize;
   char *strings;
   file_ptr pos;
+  ufile_ptr filesize;
 
   if (obj_coff_strings (abfd) != NULL)
     return obj_coff_strings (abfd);
@@ -1729,7 +1697,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 */
@@ -1764,11 +1734,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 +1755,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
@@ -1843,7 +1813,14 @@ 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;
+
+      /* PR 17512: Prevent buffer overrun.  */
+      if (symbol_ptr->u.syment.n_numaux > ((raw_end - 1) - raw_src) / symesz)
+	{
+	  bfd_release (abfd, internal);
+	  return NULL;
+	}
 
       for (i = 0;
 	   i < symbol_ptr->u.syment.n_numaux;
@@ -1852,29 +1829,25 @@ coff_get_normalized_symtab (bfd *abfd)
 	  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,
 				&(internal_ptr->u.auxent));
 
-	  internal_ptr->is_sym = FALSE;
+	  internal_ptr->is_sym = false;
 	  coff_pointerize_aux (abfd, internal, symbol_ptr, i,
 			       internal_ptr, internal_end);
 	}
     }
 
-  /* 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;
+  /* 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;
+    }
 
   for (internal_ptr = internal; internal_ptr < internal_end;
        internal_ptr++)
@@ -2020,7 +1993,7 @@ coff_get_reloc_upper_bound (bfd *abfd, s
 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 +2001,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;
@@ -2041,7 +2014,7 @@ coff_bfd_make_debug_symbol (bfd *abfd,
 			    void * ptr ATTRIBUTE_UNUSED,
 			    unsigned long sz ATTRIBUTE_UNUSED)
 {
-  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 +2025,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;
@@ -2152,6 +2125,12 @@ coff_print_symbol (bfd *abfd,
 		  fprintf (file, "File ");
 		  break;
 
+		case C_DWARF:
+		  fprintf (file, "AUX scnlen 0x%lx nreloc %ld",
+			   (unsigned long) auxp->u.auxent.x_sect.x_scnlen,
+			   auxp->u.auxent.x_sect.x_nreloc);
+		  break;
+
 		case C_STAT:
 		  if (combined->u.syment.n_type == T_NULL)
 		    /* Probably a section symbol ?  */
@@ -2236,7 +2215,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 +2226,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 +2236,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 +2245,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 +2253,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);
 
@@ -2313,7 +2292,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 +2303,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 +2312,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 +2397,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 +2443,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 +2501,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 +2521,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 +2551,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 +2562,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 +2572,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 +2611,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 +2626,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 +2643,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 +2670,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 +2682,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 +2700,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 +2715,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 +2726,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 +2759,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,
@@ -2870,14 +2855,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 +2876,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 +2901,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 +2919,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 +2928,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 +2956,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 +2978,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 +3004,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 +3035,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 +3049,7 @@ coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSE
 		free (internal_relocs);
 
 	      if (!r)
-		return FALSE;
+		return false;
 	    }
 #endif
 	}
@@ -3075,7 +3060,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 +3076,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 +3088,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 +3101,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 +3118,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 +3146,26 @@ bfd_coff_group_name (bfd *abfd, const as
     return ci->name;
   return NULL;
 }
+
+bool
+_bfd_coff_close_and_cleanup (bfd *abfd)
+{
+  struct coff_tdata *tdata = coff_data (abfd);
+
+  if (tdata != NULL)
+    {
+      /* 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_get_format (abfd) == bfd_object
+	  && bfd_family_coff (abfd)
+	  && !_bfd_coff_free_symbols (abfd))
+	return false;
+
+      if (bfd_get_format (abfd) == bfd_object
+	  || bfd_get_format (abfd) == bfd_core)
+	_bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
+    }
+  return _bfd_generic_close_and_cleanup (abfd);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-go32.c ./bfd/coff-go32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-go32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-go32.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by DJ Delorie.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -22,6 +22,7 @@
 #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
@@ -42,4 +43,137 @@
 { 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;
+
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-i386.c ./bfd/coff-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-i386.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-i386.c	2021-12-16 01:57:38.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-2021 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
@@ -191,8 +187,8 @@ 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;
@@ -200,7 +196,7 @@ static bfd_boolean in_reloc_p (bfd * abf
 #endif /* COFF_WITH_PE */
 
 #ifndef PCRELOFFSET
-#define PCRELOFFSET FALSE
+#define PCRELOFFSET false
 #endif
 
 static reloc_howto_type howto_table[] =
@@ -215,29 +211,29 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
@@ -247,15 +243,15 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 (013),
 #endif
@@ -267,12 +263,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -281,12 +277,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -295,12 +291,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -309,12 +305,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -323,12 +319,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -337,12 +333,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -415,7 +411,7 @@ static reloc_howto_type howto_table[] =
    and the regular routine is that we don't want to 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,
@@ -426,7 +422,7 @@ coff_pe_i386_relocate_section (bfd *outp
 			       asection **sections)
 {
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
 					     input_section, contents,
@@ -606,11 +602,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 +651,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 +660,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 +755,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 +772,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-ia64.c ./bfd/coff-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-ia64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-ia64.c	2021-12-16 01:57:38.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-2021 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
@@ -170,6 +170,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cofflink.c ./bfd/cofflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cofflink.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cofflink.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* COFF specific linker code.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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)			\
@@ -91,7 +91,7 @@ _bfd_coff_link_hash_newfunc (struct bfd_
 
 /* 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 *,
@@ -109,7 +109,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 +159,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 +171,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 +197,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 +251,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 +279,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 +291,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 +305,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 +318,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 +347,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 +355,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 +366,7 @@ coff_link_add_symbols (bfd *abfd,
 		      (_("warning: symbol `%s' is both section and non-section"),
 		       name);
 
-		  addit = FALSE;
+		  addit = false;
 		}
 	    }
 
@@ -387,27 +397,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 +546,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 +576,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 +625,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 +636,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 +653,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 +670,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 +702,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 +714,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 +804,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 +865,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
@@ -886,7 +899,7 @@ _bfd_coff_final_link (bfd *abfd,
 	      union internal_auxent iaux;
 	      bfd_size_type string_size = 0, indx;
 	      bfd_vma written = 0;
-	      bfd_boolean rewrite = FALSE, hash;
+	      bool rewrite = false, hash;
 
 	      if (! (sym->flags & BSF_LOCAL)
 		  || (sym->flags & (BSF_SECTION_SYM | BSF_DEBUGGING_RELOC
@@ -899,7 +912,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)
@@ -922,7 +935,7 @@ _bfd_coff_final_link (bfd *abfd,
 		  && ! isym._n._n_n._n_zeroes && isym.n_numaux)
 		{
 		  indx = _bfd_stringtab_add (flaginfo.strtab, ".file", hash,
-					     FALSE);
+					     false);
 		  if (indx == (bfd_size_type) -1)
 		    goto error_return;
 		  isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
@@ -938,14 +951,14 @@ _bfd_coff_final_link (bfd *abfd,
 		{
 		  indx = _bfd_stringtab_add (flaginfo.strtab,
 					     bfd_asymbol_name (sym), hash,
-					     FALSE);
+					     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;
+		      rewrite = true;
 		    }
 		  else
 		    {
@@ -969,7 +982,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;
@@ -991,43 +1004,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
@@ -1044,7 +1036,7 @@ _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;
+	return false;
     }
 
   /* If doing task linking (ld --task-link) then make a pass through the
@@ -1052,7 +1044,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 +1052,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 +1097,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
@@ -1141,10 +1130,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 +1141,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 +1151,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,
@@ -1176,12 +1163,12 @@ _bfd_coff_final_link (bfd *abfd,
 
       if (bfd_bwrite (strbuf, (bfd_size_type) STRING_SIZE_SIZE, abfd)
 	  != STRING_SIZE_SIZE)
-	return FALSE;
+	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 +1177,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 +1190,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.  */
@@ -1286,8 +1262,7 @@ process_embedded_commands (bfd *output_b
 
   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 +1274,7 @@ process_embedded_commands (bfd *output_b
 	  s++;
 	  continue;
 	}
-      if (CONST_STRNEQ (s, "-attr"))
+      if (startswith (s, "-attr"))
 	{
 	  char *name;
 	  char *attribs;
@@ -1339,14 +1314,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 +1364,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 +1391,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 +1426,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;
@@ -1471,7 +1446,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 
   if (coff_data (output_bfd)->pe
       && ! 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 +1465,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 +1503,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 +1528,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 +1559,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 +1580,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 +1593,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,11 +1622,11 @@ _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.  */
@@ -1661,9 +1636,9 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	    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 +1646,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
@@ -1699,17 +1674,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;
@@ -1792,7 +1767,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 +1790,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;
 	    }
 
@@ -1915,7 +1890,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		      pos += flaginfo->last_file_index * osymesz;
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 			  || bfd_bwrite (outsym, osymesz, output_bfd) != osymesz)
-			return FALSE;
+			return false;
 		    }
 		}
 
@@ -1947,7 +1922,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;
 	    }
@@ -2043,7 +2018,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			{
 			  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))
 			filename = _("<corrupt>");
@@ -2052,7 +2027,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 		      indx = _bfd_stringtab_add (flaginfo->strtab, filename,
 						 hash, copy);
 		      if (indx == (bfd_size_type) -1)
-			return FALSE;
+			return false;
 		      auxp->x_file.x_n.x_offset = STRING_SIZE_SIZE + indx;
 		    }
 		}
@@ -2158,7 +2133,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 			      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 				  || (bfd_bwrite (outsym, osymesz, output_bfd)
 				      != osymesz))
-				return FALSE;
+				return false;
 			    }
 			}
 
@@ -2204,7 +2179,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;
 
@@ -2224,13 +2199,13 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  if (bfd_seek (input_bfd, o->line_filepos, SEEK_SET) != 0
 	      || bfd_bread (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 +2231,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 +2270,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 						 is.n_numaux, auxptr);
 			}
 
-		      skipping = FALSE;
+		      skipping = false;
 		    }
 
 		  iline.l_addr.l_symndx = indx;
@@ -2313,7 +2288,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
 	  amt = oeline - flaginfo->linenos;
 	  if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 	      || bfd_bwrite (flaginfo->linenos, amt, output_bfd) != amt)
-	    return FALSE;
+	    return false;
 
 	  o->output_section->lineno_count += amt / linesz;
 	}
@@ -2343,7 +2318,7 @@ _bfd_coff_link_input_bfd (struct coff_fi
       amt = outsym - flaginfo->outsyms;
       if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 	  || bfd_bwrite (flaginfo->outsyms, amt, output_bfd) != amt)
-	return FALSE;
+	return false;
 
       BFD_ASSERT ((obj_raw_syment_count (output_bfd)
 		   + (outsym - flaginfo->outsyms) / osymesz)
@@ -2377,7 +2352,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 +2365,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 +2377,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 +2385,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 +2425,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 +2441,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 +2456,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 +2501,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 +2520,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 +2557,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 +2577,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 +2602,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 "
+                  "%" BFD_VMA_FMT "x)"),
+	         output_bfd, h->root.root.string, isym.n_value);
+	    return true;
+	  }
+#endif
       }
       break;
 
@@ -2634,25 +2623,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 +2660,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;
     }
@@ -2695,8 +2684,8 @@ _bfd_coff_write_global_sym (struct bfd_h
   if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
       || bfd_bwrite (flaginfo->outsyms, symesz, output_bfd) != symesz)
     {
-      flaginfo->failed = TRUE;
-      return FALSE;
+      flaginfo->failed = true;
+      return false;
     }
 
   h->indx = obj_raw_syment_count (output_bfd);
@@ -2760,25 +2749,25 @@ _bfd_coff_write_global_sym (struct bfd_h
 			     flaginfo->outsyms);
       if (bfd_bwrite (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 +2779,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 +2792,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 +2806,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 +2814,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 +2848,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 +2880,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 +2912,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 +2957,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 +2977,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
@@ -3075,9 +3064,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
@@ -3110,7 +3105,7 @@ _bfd_coff_generic_relocate_section (bfd
 		  != sizeof (bfd_vma))
 		{
 		  bfd_set_error (bfd_error_system_call);
-		  return FALSE;
+		  return false;
 		}
 	    }
 	}
@@ -3131,9 +3126,24 @@ _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 +3155,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 +3165,5 @@ _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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-mcore.c ./bfd/coff-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-mcore.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-mcore.c	2021-12-16 01:57:38.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-2021 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 **);
@@ -63,29 +63,29 @@ static reloc_howto_type mcore_coff_howto
 	 0,			 /* rightshift */
 	 0,			 /* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -93,15 +93,15 @@ static reloc_howto_type mcore_coff_howto
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.
@@ -110,45 +110,45 @@ static reloc_howto_type mcore_coff_howto
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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
@@ -161,29 +161,29 @@ static reloc_howto_type mcore_coff_howto
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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,
@@ -224,10 +224,10 @@ mcore_emit_base_file_entry (struct bfd_l
      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;
 
@@ -436,8 +437,6 @@ coff_mcore_relocate_section (bfd * outpu
 		my_name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
 	      else
 		{
-		  static char buf [SYMNMLEN + 1];
-
 		  strncpy (buf, sym->_n._n_name, SYMNMLEN);
 		  buf[SYMNMLEN] = '\0';
 		  my_name = buf;
@@ -458,7 +457,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 +472,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 +508,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 +526,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-mips.c ./bfd/coff-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-mips.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-mips.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian@cygnus.com.
 
@@ -86,52 +86,52 @@ static reloc_howto_type mips_howto_table
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -139,10 +139,10 @@ 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.  */
@@ -150,30 +150,30 @@ static reloc_howto_type mips_howto_table
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -181,15 +181,15 @@ static reloc_howto_type mips_howto_table
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -197,15 +197,15 @@ static reloc_howto_type mips_howto_table
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -219,15 +219,15 @@ static reloc_howto_type mips_howto_table
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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;
     }
 }
 
@@ -562,7 +562,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,10 +581,10 @@ 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;
     }
 
@@ -792,7 +792,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 +803,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 +823,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 +858,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 +882,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 +912,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 +956,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 +1158,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 +1236,7 @@ mips_relocate_section (bfd *output_bfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -1313,8 +1313,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 +1333,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 +1440,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 +1499,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 +1558,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-ppc.c ./bfd/coff-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-ppc.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-rs6000.c ./bfd/coff-rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-rs6000.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-rs6000.c	2021-12-16 01:57:38.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-2021 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;
@@ -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,14 +470,22 @@ _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)
 	{
@@ -468,21 +494,13 @@ _bfd_xcoff_swap_aux_in (bfd *abfd, void
 	    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_fname, ext->x_file.x_n.x_fname, FILNMLEN);
+      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:
@@ -498,74 +516,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.l
+	    = 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,6 +564,14 @@ _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)
 	{
@@ -581,10 +580,8 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, void
 		    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_fname, FILNMLEN);
+      break;
 
       /* RS/6000 "csect" auxents */
     case C_EXT:
@@ -602,65 +599,49 @@ _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.l,
+		    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[] =
 {
@@ -669,171 +650,171 @@ reloc_howto_type xcoff_howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
+	 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_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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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),
 
@@ -842,219 +823,340 @@ reloc_howto_type xcoff_howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+
+  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 */
+	 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_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 */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 +1198,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 +1209,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;
     }
@@ -1216,7 +1333,7 @@ _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;
@@ -1229,8 +1346,8 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
 
   if (xcoff_ardata (abfd) == NULL)
     {
-      abfd->has_armap = FALSE;
-      return TRUE;
+      abfd->has_armap = false;
+      return true;
     }
 
   if (! xcoff_big_format_p (abfd))
@@ -1241,46 +1358,53 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       GET_VALUE_IN_FIELD (off, xcoff_ardata (abfd)->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;
+	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;
@@ -1296,46 +1420,53 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       GET_VALUE_IN_FIELD (off, xcoff_ardata_big (abfd)->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;
+	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,25 +1484,25 @@ _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)
     {
@@ -1467,7 +1598,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Read the archive header in an XCOFF archive.  */
@@ -1477,32 +1608,25 @@ _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;
 
   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_bread (&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)
 	{
@@ -1520,21 +1644,18 @@ _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_bread (&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)
 	{
@@ -1656,7 +1777,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)
 {
@@ -1685,11 +1806,11 @@ xcoff_write_armap_old (bfd *abfd, unsign
       != SIZEOF_AR_HDR
       || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
 	  != SXCOFFARFMAG))
-    return FALSE;
+    return false;
 
   H_PUT_32 (abfd, orl_count, buf);
   if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
-    return FALSE;
+    return false;
 
   i = 0;
   archive_iterator_begin (&iterator, abfd);
@@ -1698,7 +1819,7 @@ xcoff_write_armap_old (bfd *abfd, unsign
       {
 	H_PUT_32 (abfd, iterator.current.offset, buf);
 	if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
-	  return FALSE;
+	  return false;
 	++i;
       }
 
@@ -1710,7 +1831,7 @@ 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;
+	return false;
     }
 
   if ((stridx & 1) != 0)
@@ -1719,10 +1840,10 @@ xcoff_write_armap_old (bfd *abfd, unsign
 
       b = '\0';
       if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 static char buff20[XCOFFARMAGBIG_ELEMENT_SIZE + 1];
@@ -1757,30 +1878,30 @@ 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;
+      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];
 
   if (bfd_seek (in_bfd, (file_ptr) 0, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   remaining = arelt_size (in_bfd);
 
@@ -1788,7 +1909,7 @@ do_copy (bfd *out_bfd, bfd *in_bfd)
     {
       if (bfd_bread (buffer, DEFAULT_BUFFERSIZE, in_bfd) != DEFAULT_BUFFERSIZE
 	  || bfd_bwrite (buffer, DEFAULT_BUFFERSIZE, out_bfd) != DEFAULT_BUFFERSIZE)
-	return FALSE;
+	return false;
 
       remaining -= DEFAULT_BUFFERSIZE;
     }
@@ -1797,13 +1918,13 @@ do_copy (bfd *out_bfd, bfd *in_bfd)
     {
       if (bfd_bread (buffer, remaining, in_bfd) != remaining
 	  || bfd_bwrite (buffer, remaining, out_bfd) != remaining)
-	return FALSE;
+	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)
 {
@@ -1891,7 +2012,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;
 
@@ -1976,7 +2097,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;
 
@@ -2040,10 +2161,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,7 +2177,7 @@ _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;
@@ -2064,8 +2185,8 @@ xcoff_write_archive_contents_old (bfd *a
   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;
@@ -2089,22 +2210,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_input_error (sub, bfd_error_system_call);
+	      return false;
+	    }
+
+	  if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
 	    {
-	      bfd_set_error (bfd_error_system_call);
-	      return FALSE;
+	      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 +2258,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;
+    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 +2276,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,7 +2290,7 @@ 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;
@@ -2160,7 +2300,7 @@ xcoff_write_archive_contents_old (bfd *a
 	  || 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;
@@ -2208,18 +2348,18 @@ xcoff_write_archive_contents_old (bfd *a
        != SIZEOF_AR_HDR)
       || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
 	  != SXCOFFARFMAG))
-    return FALSE;
+    return false;
 
   sprintf (decbuf, "%-12ld", (long) count);
   if (bfd_bwrite (decbuf, (bfd_size_type) 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;
+	return false;
     }
   for (sub = abfd->archive_head; sub != NULL; sub = sub->archive_next)
     {
@@ -2229,11 +2369,11 @@ 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;
+	return false;
     }
 
   if (! do_pad (abfd, size & 1))
-    return FALSE;
+    return false;
 
   /* Write out the armap, if appropriate.  */
   if (! makemap || ! hasobjects)
@@ -2244,7 +2384,7 @@ xcoff_write_archive_contents_old (bfd *a
       sprintf (fhdr.symoff, "%ld", (long) nextoff);
       bfd_ardata (abfd)->tdata = &fhdr;
       if (! _bfd_compute_and_write_armap (abfd, 0))
-	return FALSE;
+	return false;
     }
 
   /* Write out the archive file header.  */
@@ -2257,20 +2397,20 @@ xcoff_write_archive_contents_old (bfd *a
   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;
+    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;
   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;
@@ -2284,11 +2424,11 @@ xcoff_write_archive_contents_big (bfd *a
   memcpy (fhdr.magic, XCOFFARMAGBIG, SXCOFFARMAG);
 
   if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR_BIG, SEEK_SET) != 0)
-    return FALSE;
+    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 +2438,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 +2453,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_input_error (current_bfd, bfd_error_system_call);
+	      return false;
+	    }
+
+	  if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
 	    {
-	      bfd_set_error (bfd_error_system_call);
-	      return FALSE;
+	      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 +2498,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,7 +2517,7 @@ 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));
@@ -2374,7 +2530,7 @@ xcoff_write_archive_contents_big (bfd *a
 	  || !do_pad (abfd, iterator.current.trailing_padding))
 	{
 	  free (offsets);
-	  return FALSE;
+	  return false;
 	}
 
       offsets[i] = iterator.current.offset;
@@ -2422,7 +2578,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;
@@ -2472,7 +2628,7 @@ xcoff_write_archive_contents_big (bfd *a
     }
 
   if (bfd_bwrite (member_table, member_table_size, abfd) != member_table_size)
-    return FALSE;
+    return false;
 
   free (member_table);
 
@@ -2494,7 +2650,7 @@ xcoff_write_archive_contents_big (bfd *a
 
       bfd_ardata (abfd)->tdata = &fhdr;
       if (! _bfd_compute_and_write_armap (abfd, 0))
-	return FALSE;
+	return false;
     }
 
   /* Write out the archive file header.  */
@@ -2502,12 +2658,12 @@ xcoff_write_archive_contents_big (bfd *a
   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;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_xcoff_write_archive_contents (bfd *abfd)
 {
   if (! xcoff_big_format_p (abfd))
@@ -2566,11 +2722,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 +2884,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,
@@ -2738,10 +2896,10 @@ xcoff_reloc_type_noop (bfd *input_bfd AT
 		       bfd_vma *relocation ATTRIBUTE_UNUSED,
 		       bfd_byte *contents 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,
@@ -2758,10 +2916,10 @@ xcoff_reloc_type_fail (bfd *input_bfd,
     (_("%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,
@@ -2774,10 +2932,10 @@ xcoff_reloc_type_pos (bfd *input_bfd ATT
 		      bfd_byte *contents 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,
@@ -2789,11 +2947,11 @@ xcoff_reloc_type_neg (bfd *input_bfd ATT
 		      bfd_vma *relocation,
 		      bfd_byte *contents 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,
@@ -2805,7 +2963,7 @@ xcoff_reloc_type_rel (bfd *input_bfd ATT
 		      bfd_vma *relocation,
 		      bfd_byte *contents ATTRIBUTE_UNUSED)
 {
-  howto->pc_relative = TRUE;
+  howto->pc_relative = true;
 
   /* A PC relative reloc includes the section address.  */
   addend += input_section->vma;
@@ -2813,15 +2971,15 @@ 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,
@@ -2831,7 +2989,7 @@ xcoff_reloc_type_toc (bfd *input_bfd,
   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 +3002,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 +3010,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,
@@ -2874,10 +3040,10 @@ xcoff_reloc_type_ba (bfd *input_bfd ATTR
 
   *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,
@@ -2893,7 +3059,7 @@ xcoff_reloc_type_br (bfd *input_bfd,
   bfd_vma section_offset;
 
   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;
@@ -2968,22 +3134,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,
@@ -2995,7 +3161,7 @@ xcoff_reloc_type_crel (bfd *input_bfd AT
 		       bfd_vma *relocation,
 		       bfd_byte *contents ATTRIBUTE_UNUSED)
 {
-  howto->pc_relative = TRUE;
+  howto->pc_relative = true;
   howto->src_mask &= ~3;
   howto->dst_mask = howto->src_mask;
 
@@ -3005,20 +3171,102 @@ 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 xcoff_link_hash_entry *h;
+
+  if (0 > rel->r_symndx)
+    return false;
+
+  h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
+
+  /* FIXME: R_TLSML is targeting a internal TOC symbol, which will
+     make the following checks failing. It should be moved with
+     R_TLSM bellow once it works.  */
+  if (howto->type == R_TLSML)
+    {
+      *relocation = 0;
+      return true;
+    }
+
+  /* FIXME: h is sometimes null, if the TLS symbol is not exported.  */
+  if (!h)
+    {
+      _bfd_error_handler
+	(_("%pB: TLS relocation at (0x%" BFD_VMA_FMT "x) over "
+	   "internal symbols (C_HIDEXT) not yet possible\n"),
+	 input_bfd, rel->r_vaddr);
+      return false;
+    }
+
+
+  /* TLS relocations must target a TLS symbol.  */
+  if (h->smclas != XMC_TL && h->smclas != XMC_UL)
+    {
+      _bfd_error_handler
+	(_("%pB: TLS relocation at (0x%" BFD_VMA_FMT "x) over "
+	   "non-TLS symbol %s (0x%x)\n"),
+	 input_bfd, 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%" BFD_VMA_FMT "x) over "
+	   "imported symbol %s\n"),
+	 input_bfd, rel->r_vaddr, h->root.root.string);
+      return false;
+    }
+
+  /* R_TLSM and R_TLSML are relocations used by the loader.
+     The value must be 0.
+     FIXME: move R_TLSML here.  */
+  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 +3312,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 +3325,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 +3334,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 +3366,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 +3396,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 +3434,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 +3485,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 +3559,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_TLS:
+   Tread-local storage relocation used by the loader.
+
+   R_TLSM:
+   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 +3621,34 @@ 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.bitsize > 16 ? 2 : 1;
+	      howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize);
+	      break;
+
+	    default:
+	      _bfd_error_handler
+		(_("%pB: relocatation (%d) at (0x%" BFD_VMA_FMT "x) 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);
-      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 +3687,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)
@@ -3421,7 +3720,7 @@ xcoff_ppc_relocate_section (bfd *output_
 	  || !((*xcoff_calculate_relocation[rel->r_type])
 	       (input_bfd, input_section, output_bfd, rel, sym, &howto, val,
 		addend, &relocation, contents)))
-	return FALSE;
+	return false;
 
       /* address */
       address = rel->r_vaddr - input_section->vma;
@@ -3484,7 +3783,7 @@ xcoff_ppc_relocate_section (bfd *output_
 	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 +3803,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,8 +3830,8 @@ _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;
@@ -3546,10 +3845,10 @@ _bfd_xcoff_put_ldsymbol_name (bfd *abfd
       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 +3860,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 +3910,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 +3941,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 +3966,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 +4021,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 +4057,7 @@ 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;
+	return false;
 
       val = string_table_size;
       bfd_h_put_32 (abfd, val, &string_table[0]);
@@ -3919,7 +4218,7 @@ xcoff_generate_rtinit  (bfd *abfd, const
   free (data_buffer);
   data_buffer = NULL;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3928,22 +4227,22 @@ HOWTO (0,			/* type */
        0,			/* rightshift */
        2,			/* size (0 = byte, 1 = short, 2 = long) */
        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 */
 
 /*  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) */
@@ -3959,14 +4258,17 @@ static unsigned long xcoff_glink_code[9]
 /* Table to convert DWARF flags to section names.  */
 
 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",   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_DWLOC,   ".dwloc",    true },
+  { SSUBTYP_DWFRAME, ".dwframe",  true },
+  { SSUBTYP_DWMAC,   ".dwmac",    true }
 };
 
 /* For generic entry points.  */
@@ -4075,10 +4377,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,
@@ -4167,6 +4469,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 +4559,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,
@@ -4348,6 +4651,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-sh.c ./bfd/coff-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-sh.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-sh.c	2021-12-16 01:57:38.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-2021 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.  */
@@ -105,15 +105,15 @@ static reloc_howto_type sh_coff_howtos[]
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -129,15 +129,15 @@ static reloc_howto_type sh_coff_howtos[]
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
 
@@ -145,15 +145,15 @@ static reloc_howto_type sh_coff_howtos[]
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
 
@@ -161,15 +161,15 @@ static reloc_howto_type sh_coff_howtos[]
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -177,15 +177,15 @@ static reloc_howto_type sh_coff_howtos[]
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -199,169 +199,169 @@ static reloc_howto_type sh_coff_howtos[]
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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])
@@ -656,7 +656,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 +702,40 @@ 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_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 +747,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 +904,12 @@ 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)->keep_relocs = true;
 
       coff_section_data (abfd, sec)->contents = contents;
-      coff_section_data (abfd, sec)->keep_contents = TRUE;
+      coff_section_data (abfd, sec)->keep_contents = true;
 
-      obj_coff_keep_syms (abfd) = TRUE;
+      obj_coff_keep_syms (abfd) = true;
 
       /* Replace the jsr with a bsr.  */
 
@@ -965,7 +965,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 +1006,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 +1026,12 @@ 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)->keep_relocs = true;
 
 	  coff_section_data (abfd, sec)->contents = contents;
-	  coff_section_data (abfd, sec)->keep_contents = TRUE;
+	  coff_section_data (abfd, sec)->keep_contents = true;
 
-	  obj_coff_keep_syms (abfd) = TRUE;
+	  obj_coff_keep_syms (abfd) = true;
 	}
     }
 
@@ -1053,20 +1053,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 +1127,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 +1289,7 @@ sh_relax_delete_bytes (bfd *abfd,
       if (adjust != 0)
 	{
 	  oinsn = insn;
-	  overflow = FALSE;
+	  overflow = false;
 	  switch (irel->r_type)
 	    {
 	    default:
@@ -1301,14 +1300,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 +1321,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 +1356,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;
 	    }
 	}
 
@@ -1382,10 +1381,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 +1420,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,
@@ -1436,7 +1435,7 @@ sh_relax_delete_bytes (bfd *abfd,
 		bfd_put_32 (abfd, val - count,
 			    ocontents + irelscan->r_vaddr - o->vma);
 
-	      coff_section_data (abfd, o)->keep_contents = TRUE;
+	      coff_section_data (abfd, o)->keep_contents = true;
 	    }
 	}
     }
@@ -1451,7 +1450,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 +1503,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 +2057,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 +2068,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 +2096,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 +2144,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 +2177,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 +2200,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 +2215,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 +2276,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 +2284,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 +2310,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 +2330,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 +2404,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 +2426,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 +2436,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 +2465,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 +2479,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 +2502,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 +2589,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 +2604,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 +2613,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 +2630,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 +2644,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 +2657,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 +2719,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 +2781,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 +2803,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 +2850,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,
@@ -2893,7 +2891,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 +2902,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;
@@ -2939,8 +2937,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 +2993,9 @@ 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);
   return NULL;
 }
 
@@ -3044,7 +3039,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,18 +3052,18 @@ 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
@@ -3083,16 +3078,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 +3134,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 +3192,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-stgo32.c ./bfd/coff-stgo32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-stgo32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-stgo32.c	2021-12-16 01:57:38.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-2021 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,207 @@ 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;
+  return true;
 }
 
-/* coff_object_p only checks 2 bytes F_MAGIC at GO32_STUBSIZE inside the file
-   which is too fragile.  */
+/* Cleanup function, returned from check_format hook.  */
 
-static const bfd_target *
-go32_check_format (bfd *abfd)
+static void
+go32exe_cleanup (bfd *abfd)
 {
-  char mz[2];
+  abfd->origin = 0;
 
-  if (bfd_bread (mz, 2, abfd) != 2 || mz[0] != 'M' || mz[1] != 'Z')
+  free (go32exe_temp_stub);
+  go32exe_temp_stub = NULL;
+  go32exe_temp_stub_size = 0;
+}
+
+/* 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 bfd_cleanup
+go32exe_check_format (bfd *abfd)
+{
+  struct external_DOS_hdr filehdr_dos;
+  uint16_t num_pages;
+  uint16_t last_page_size;
+  uint32_t header_end;
+  bfd_size_type stubsize;
+
+  /* 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_bread (&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;
+
+  /* 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.  */
+  bfd_seek (abfd, 0, SEEK_SET);
+  go32exe_temp_stub = bfd_malloc (stubsize);
+  if (go32exe_temp_stub == NULL)
+    goto fail;
+  if (bfd_bread (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)
+    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 == _bfd_no_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 NULL;
+    return false;
+  if (bfd_bwrite (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coffswap.h ./bfd/coffswap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coffswap.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coffswap.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic COFF swapping routines, for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -264,9 +264,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 +286,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);
@@ -405,7 +399,7 @@ coff_swap_aux_in (bfd *abfd,
 #if FILNMLEN != E_FILNMLEN
 #error we need to cope with truncating or extending FILNMLEN
 #else
-	  if (numaux > 1)
+	  if (numaux > 1 && coff_data (abfd)->pe)
 	    {
 	      if (indx == 0)
 		memcpy (in->x_file.x_fname, ext->x_file.x_fname,
@@ -701,9 +695,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 +732,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 +759,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic30.c ./bfd/coff-tic30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic30.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-tic30.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C30 coff binaries.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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, 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),
     EMPTY_HOWTO (-1)
   };
 
@@ -192,6 +192,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic4x.c ./bfd/coff-tic4x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic4x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-tic4x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C4X coff binaries.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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,  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),
 };
 #define HOWTO_SIZE (sizeof(tic4x_howto_table) / sizeof(tic4x_howto_table[0]))
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic54x.c ./bfd/coff-tic54x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic54x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-tic54x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C54X coff binaries.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
    Contributed by Timothy Wall (twall@cygnus.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -112,7 +112,7 @@ bfd_ticoff_get_section_load_page (asecti
 /* Set the architecture appropriately.  Allow unkown architectures
    (e.g. binary).  */
 
-static bfd_boolean
+static bool
 tic54x_set_arch_mach (bfd *abfd,
 		      enum bfd_architecture arch,
 		      unsigned long machine)
@@ -121,7 +121,7 @@ tic54x_set_arch_mach (bfd *abfd,
     arch = bfd_arch_tic54x;
 
   else if (arch != bfd_arch_tic54x)
-    return FALSE;
+    return false;
 
   return bfd_default_set_arch_mach (abfd, arch, machine);
 }
@@ -154,59 +154,59 @@ reloc_howto_type tic54x_howto_table[] =
 
     /* 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,1,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,1,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,1,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,2,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,1,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,1,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,1,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,1,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,1,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,2,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,1,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,1,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,2,32,false,0,complain_overflow_dont,
+	   tic54x_relocation,"STAB",false,0xFFFFFFFF,0xFFFFFFFF,false),
   };
 
 #define coff_bfd_reloc_type_lookup tic54x_coff_reloc_type_lookup
@@ -312,13 +312,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,7 +335,7 @@ ticoff_bfd_is_local_label_name (bfd *abf
 
 #include "coffcode.h"
 
-static bfd_boolean
+static bool
 tic54x_set_section_contents (bfd *abfd,
 			     sec_ptr section,
 			     const void * location,
@@ -415,6 +415,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 */
@@ -472,6 +473,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 */
@@ -530,6 +536,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 */
@@ -588,6 +599,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 */
@@ -646,6 +662,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 */
@@ -704,6 +725,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 */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic80.c ./bfd/coff-tic80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-tic80.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-x86_64.c ./bfd/coff-x86_64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-x86_64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-x86_64.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -75,14 +75,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 +106,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 +119,50 @@ 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.  */
+	  link_info = _bfd_get_link_info (obfd);
+	  if (link_info == NULL)
+	    return bfd_reloc_dangerous;
+	  h = bfd_link_hash_lookup (link_info->hash, "__ImageBase",
+				    false, false, false);
+	  if (h == NULL)
+	    return bfd_reloc_dangerous;
+	  while (h->type == bfd_link_hash_indirect)
+	    h = h->u.i.link;
+	  /* 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) \
@@ -199,7 +226,7 @@ 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
@@ -208,7 +235,7 @@ in_reloc_p (bfd *abfd ATTRIBUTE_UNUSED,
 #endif /* COFF_WITH_PE */
 
 #ifndef PCRELOFFSET
-#define PCRELOFFSET TRUE
+#define PCRELOFFSET true
 #endif
 
 static reloc_howto_type howto_table[] =
@@ -218,53 +245,53 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long, 4 = long long) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
@@ -273,12 +300,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -286,12 +313,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -299,12 +326,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -312,12 +339,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -325,12 +352,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -341,15 +368,15 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 (11),
 #endif
@@ -360,12 +387,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -377,12 +404,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -391,12 +418,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -405,12 +432,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -419,12 +446,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -433,12 +460,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -447,12 +474,12 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
@@ -527,7 +554,7 @@ static reloc_howto_type howto_table[] =
    and the regular routine is that we don't want to 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,
@@ -538,7 +565,7 @@ coff_pe_amd64_relocate_section (bfd *out
 				asection **sections)
 {
   if (bfd_link_relocatable (info))
-    return TRUE;
+    return true;
 
   return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,input_section, contents,relocs, syms, sections);
 }
@@ -723,11 +750,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 +809,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 +852,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-z80.c ./bfd/coff-z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-z80.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-z80.c	2021-12-16 01:57:38.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-2021 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 */
+     2,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     1,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     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_imm16",		/* name */
+     false,		/* partial_inplace */
+     0x0000ffff,	/* src_mask */
+     0x0000ffff,	/* dst_mask */
+     false),		/* pcrel_offset */
+
+  BFD_HOWTO (BFD_RELOC_8,
+     R_IMM8,		/* type */
+     0,			/* rightshift */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     0,			/* size (0 = byte, 1 = short, 2 = long) */
+     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 */
+     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_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;
 }
@@ -180,14 +333,15 @@ extra_case (bfd *in_abfd,
 	    unsigned int *dst_ptr)
 {
   asection * input_section = link_order->u.indirect.section;
-  int val;
+  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.  */
+      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) /* Test for overflow.  */
 	  (*link_info->callbacks->reloc_overflow)
 	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
 	     reloc->howto->name, reloc->addend, input_section->owner,
@@ -198,26 +352,55 @@ extra_case (bfd *in_abfd,
 	(*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;
+
+    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;
       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;
       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);
+      if (reloc->howto->partial_inplace)
+        val += (bfd_get_16 ( in_abfd, data+*src_ptr)
+            + (bfd_get_8 ( in_abfd, data+*src_ptr+2) << 16))
+            & reloc->howto->src_mask;
       bfd_put_16 (in_abfd, val, data + *dst_ptr);
       bfd_put_8 (in_abfd, val >> 16, data + *dst_ptr+2);
       (*dst_ptr) += 3;
@@ -225,8 +408,8 @@ extra_case (bfd *in_abfd,
       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;
@@ -234,15 +417,13 @@ extra_case (bfd *in_abfd,
 
     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.  */
-
+	int gap = val - dot;
 	if (gap >= 128 || gap < -128)
 	  (*link_info->callbacks->reloc_overflow)
 	    (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
@@ -255,11 +436,32 @@ extra_case (bfd *in_abfd,
 	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 ();
     }
 }
 
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-z8k.c ./bfd/coff-z8k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/coff-z8k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/coff-z8k.c	2021-12-16 01:57:38.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-2021 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, 2, 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, 0, 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, 1, 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, 0, 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, 1, 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, 0, 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, 0, 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, 1, 12, true, 0, complain_overflow_signed, 0,
+       "r_callr", true, 0xfff, 0xfff, true);
 
 #define BADMAG(x) Z8KBADMAG(x)
 #define Z8K 1			/* Customize coffcode.h.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/compress.c ./bfd/compress.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/compress.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/compress.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Compressed section support (intended for debug sections).
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -26,7 +26,7 @@
 
 #define MAX_COMPRESSION_HEADER_SIZE 24
 
-static bfd_boolean
+static bool
 decompress_contents (bfd_byte *compressed_buffer,
 		     bfd_size_type compressed_size,
 		     bfd_byte *uncompressed_buffer,
@@ -60,8 +60,7 @@ 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}
@@ -80,13 +79,13 @@ bfd_compress_section_contents (bfd *abfd
   uLong compressed_size;
   bfd_byte *buffer;
   bfd_size_type buffer_size;
-  bfd_boolean decompress;
+  bool 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
+  bool compressed
     = bfd_is_section_compressed_with_header (abfd, sec,
 					     &orig_compression_header_size,
 					     &orig_uncompressed_size,
@@ -129,12 +128,12 @@ bfd_compress_section_contents (bfd *abfd
   /* Uncompress if it leads to smaller size.  */
   if (compressed && compressed_size > orig_uncompressed_size)
     {
-      decompress = TRUE;
+      decompress = true;
       buffer_size = orig_uncompressed_size;
     }
   else
     {
-      decompress = FALSE;
+      decompress = false;
       buffer_size = compressed_size;
     }
   buffer = (bfd_byte *) bfd_alloc (abfd, buffer_size);
@@ -210,7 +209,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,12 +222,12 @@ 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_byte *p = *ptr;
-  bfd_boolean ret;
+  bool ret;
   bfd_size_type save_size;
   bfd_size_type save_rawsize;
   bfd_byte *compressed_buffer;
@@ -241,7 +240,7 @@ bfd_get_full_section_contents (bfd *abfd
   if (sz == 0)
     {
       *ptr = NULL;
-      return TRUE;
+      return true;
     }
 
   switch (sec->compress_status)
@@ -255,6 +254,9 @@ bfd_get_full_section_contents (bfd *abfd
 	      /* 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.  */
@@ -267,7 +269,7 @@ bfd_get_full_section_contents (bfd *abfd
 		/* 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;
+	      return false;
 	    }
 	  p = (bfd_byte *) bfd_malloc (sz);
 	  if (p == NULL)
@@ -278,7 +280,7 @@ bfd_get_full_section_contents (bfd *abfd
 		  /* xgettext:c-format */
 		  (_("error: %pB(%pA) is too large (%#" PRIx64 " bytes)"),
 		  abfd, sec, (uint64_t) sz);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -286,16 +288,16 @@ bfd_get_full_section_contents (bfd *abfd
 	{
 	  if (*ptr != p)
 	    free (p);
-	  return FALSE;
+	  return false;
 	}
       *ptr = p;
-      return TRUE;
+      return true;
 
     case DECOMPRESS_SECTION_SIZED:
       /* 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
@@ -331,27 +333,27 @@ bfd_get_full_section_contents (bfd *abfd
 	    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);
 	  if (p == NULL)
-	    return FALSE;
+	    return false;
 	  *ptr = p;
 	}
       /* PR 17512; file: 5bc29788.  */
       if (p != sec->contents)
 	memcpy (p, sec->contents, sz);
-      return TRUE;
+      return true;
 
     default:
       abort ();
@@ -385,7 +387,7 @@ FUNCTION
 	bfd_is_section_compressed_with_header
 
 SYNOPSIS
-	bfd_boolean bfd_is_section_compressed_with_header
+	bool bfd_is_section_compressed_with_header
 	  (bfd *abfd, asection *section,
 	  int *compression_header_size_p,
 	  bfd_size_type *uncompressed_size_p,
@@ -401,7 +403,7 @@ DESCRIPTION
 	and uncompressed size is returned with 0.
 */
 
-bfd_boolean
+bool
 bfd_is_section_compressed_with_header (bfd *abfd, sec_ptr sec,
 				       int *compression_header_size_p,
 				       bfd_size_type *uncompressed_size_p,
@@ -411,7 +413,7 @@ bfd_is_section_compressed_with_header (b
   int compression_header_size;
   int header_size;
   unsigned int saved = sec->compress_status;
-  bfd_boolean compressed;
+  bool compressed;
 
   *uncompressed_align_pow_p = 0;
 
@@ -429,12 +431,12 @@ 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)
@@ -452,7 +454,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,14 +470,14 @@ 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;
@@ -494,7 +496,7 @@ 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
@@ -506,7 +508,7 @@ DESCRIPTION
 	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];
@@ -527,17 +529,17 @@ 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);
     }
@@ -546,7 +548,7 @@ bfd_init_section_decompress_status (bfd
 					  &uncompressed_alignment_power))
     {
       bfd_set_error (bfd_error_wrong_format);
-      return FALSE;
+      return false;
     }
 
   sec->compressed_size = sec->size;
@@ -554,7 +556,7 @@ bfd_init_section_decompress_status (bfd
   bfd_set_section_alignment (sec, uncompressed_alignment_power);
   sec->compress_status = DECOMPRESS_SECTION_SIZED;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -562,7 +564,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 +575,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;
@@ -587,7 +589,7 @@ bfd_init_section_compress_status (bfd *a
       || sec->compress_status != COMPRESS_SECTION_NONE)
     {
       bfd_set_error (bfd_error_invalid_operation);
-      return FALSE;
+      return false;
     }
 
   /* Read in the full section contents and compress it.  */
@@ -595,11 +597,11 @@ 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;
+    return false;
 
   uncompressed_size = bfd_compress_section_contents (abfd, sec,
 						     uncompressed_buffer,
@@ -612,7 +614,7 @@ FUNCTION
 	bfd_compress_section
 
 SYNOPSIS
-	bfd_boolean bfd_compress_section
+	bool bfd_compress_section
 	  (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
 
 DESCRIPTION
@@ -623,7 +625,7 @@ DESCRIPTION
 	@code{TRUE}.
 */
 
-bfd_boolean
+bool
 bfd_compress_section (bfd *abfd, sec_ptr sec, bfd_byte *uncompressed_buffer)
 {
   bfd_size_type uncompressed_size = sec->size;
@@ -637,7 +639,7 @@ 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.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/config.bfd ./bfd/config.bfd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/config.bfd	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/config.bfd	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 # config.bfd
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2021 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
@@ -53,8 +53,7 @@ case $targ in
     echo "*** Use or1k-*-elf or or1k-*-linux as the target instead" >&2
     exit 1
     ;;
- c30-*-*aout* | tic30-*-*aout* | \
- null)
+ *-*-netbsdpe* | null)
     if test "x$enable_obsolete" != xyes; then
       echo "*** Configuration $targ is obsolete." >&2
       echo "*** Specify --enable-obsolete to build it anyway." >&2
@@ -84,7 +83,9 @@ case $targ in
  arm-*-openbsd* | \
  arm-*-oabi | \
  arm-*-riscix* | \
+ arm*-*-symbianelf* | \
  arm-epoc-pe* | \
+ c30-*-*aout* | tic30-*-*aout* | \
  cr16c-*-* | \
  h8300*-*-coff | \
  h8500*-*-coff | \
@@ -141,6 +142,7 @@ case $targ in
  mips*-sgi-* | \
  mips*el-*-rtems* | \
  powerpc-*-lynxos* | powerpc-*-windiss* | \
+ powerpcle-*-pe | powerpcle-*-winnt* | powerpcle-*-cygwin* | \
  sh*-*-symbianelf* | sh5*-*-* | sh64*-*-* | \
  sparc*-*-*aout* | \
  sparc*-*-chorus* | \
@@ -151,6 +153,7 @@ 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
@@ -207,7 +210,7 @@ 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,7 +230,7 @@ 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"
     want64=true
@@ -252,12 +255,12 @@ case "${targ}" in
     targ_selvecs=aarch64_elf64_be_cloudabi_vec
     want64=true
     ;;
-  aarch64-*-linux*)
+  aarch64-*-linux* | aarch64-*-netbsd*)
     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_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
@@ -338,15 +341,11 @@ case "${targ}" in
     ;;
   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*)
     targ_defvec=arm_elf32_be_vec
@@ -394,10 +393,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 +408,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
     ;;
@@ -560,20 +552,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 l1om_elf64_vec k1om_elf64_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 l1om_elf64_vec k1om_elf64_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
     want64=true
     ;;
 #endif
@@ -612,7 +604,7 @@ case "${targ}" in
   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 l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_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*)
@@ -635,13 +627,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 l1om_elf64_vec k1om_elf64_vec"
     ;;
   i[3-7]86-*-redox*)
     targ_defvec=i386_elf32_vec
@@ -664,12 +650,12 @@ case "${targ}" in
     targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_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"
     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
     ;;
@@ -680,28 +666,22 @@ case "${targ}" in
     ;;
   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 l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_vec"
     want64=true
     ;;
   x86_64-*-netbsd* | x86_64-*-openbsd*)
     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 iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
     want64=true
     ;;
   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_pei_vec l1om_elf64_vec k1om_elf64_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"
+    targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_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 l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
     want64=true
     targ_underscore=no
     ;;
@@ -751,7 +731,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"
     targ_underscore=yes
     ;;
   i[3-7]86-*-vxworks*)
@@ -1100,6 +1080,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
@@ -1162,24 +1147,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"
+    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"
+    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"
     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"
     want64=true
     ;;
 #endif
@@ -1288,10 +1279,12 @@ 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
@@ -1333,11 +1326,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
@@ -1392,6 +1380,10 @@ case "${targ}" in
     targ_selvecs="wasm_vec"
     ;;
 
+  xc16x-*-elf)
+    targ_defvec=xc16x_elf32_vec
+    ;;
+
   xgate-*-*)
     targ_defvec=xgate_elf32_vec
     targ_selvecs="xgate_elf32_vec"
@@ -1405,15 +1397,17 @@ 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/config.in ./bfd/config.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/config.in	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/config.in	2021-12-16 01:57:38.000000000 +0000
@@ -14,13 +14,13 @@
    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 declaration of `asprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_ASPRINTF
@@ -32,9 +32,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,46 +52,14 @@
    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
 
-/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
-   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 <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
@@ -143,12 +111,6 @@
 /* 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 +138,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 +183,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 +195,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,24 +216,12 @@
 /* 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
 
@@ -323,9 +253,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,21 +265,12 @@
 /* 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
-
 /* Name of host specific header file to include in trad-core.c. */
 #undef TRAD_HEADER
 
@@ -416,3 +334,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure ./bfd/configure
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/configure	2021-12-16 01:57:38.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.37.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.37.50'
+PACKAGE_STRING='bfd 2.37.50'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -699,6 +699,7 @@ PKGVERSION
 DEBUGDIR
 PLUGINS_FALSE
 PLUGINS_TRUE
+LARGEFILE_CPPFLAGS
 OTOOL64
 OTOOL
 LIPO
@@ -716,12 +717,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 +727,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 +763,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 +816,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 +826,7 @@ with_gnu_ld
 enable_libtool_lock
 enable_plugins
 enable_largefile
+enable_checking
 enable_64_bit_bfd
 enable_targets
 enable_64_bit_archive
@@ -1391,7 +1393,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.37.50 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1462,7 +1464,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.37.50:";;
    esac
   cat <<\_ACEOF
 
@@ -1470,19 +1472,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
@@ -1589,7 +1592,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.37.50
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1641,52 +1644,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 +1841,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 +1954,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 +2186,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.37.50, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2732,914 +2681,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 +2854,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 +3107,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 +3168,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='bfd'
- VERSION='2.33.50'
+ VERSION='2.37.50'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4237,134 +3218,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
@@ -4954,6 +3807,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 +4326,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'
@@ -6823,6 +6118,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 +6224,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 +6441,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
 
 
 
@@ -10913,16 +10239,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
@@ -11039,7 +10355,7 @@ linux*oldld* | linux*aout* | linux*coff*
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -11728,7 +11044,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 11047 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11834,7 +11150,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 11153 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12186,15 +11502,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 +11757,30 @@ fi
 
 
 
+case "${target}" in
+    hppa*64*-*-* | vax-*-netbsdelf*) ;;
+    *-*-*aout* | i[3-7]86-*-bsd* | i[3-7]86-*-msdos* | ns32k-*-* | \
+    pdp11-*-* | vax-*-*bsd*)
+	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,6 +11790,22 @@ 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
@@ -12544,7 +11941,7 @@ if test "${with_bugurl+set}" = set; then
 	   ;;
      esac
 else
-  BUGURL="http://www.sourceware.org/bugzilla/"
+  BUGURL="https://www.sourceware.org/bugzilla/"
 
 fi
 
@@ -13213,55 +12610,6 @@ BFD_HOST_64_BIT=
 BFD_HOST_U_64_BIT=
 BFD_HOSTPTR_T="unsigned long"
 
-
-  { $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_n "(cached) " >&6
-else
-  if test "$GCC" = yes; then
-       ac_cv_type_long_double=yes
-     else
-       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;
-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];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_type_long_double=yes
-else
-  ac_cv_type_long_double=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     fi
-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 "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
-
-  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]];'.
@@ -13295,8 +12643,6 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-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]];'.
@@ -13465,7 +12811,8 @@ fi
 fi
 
 
-for ac_header in alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h wchar.h wctype.h
+for ac_header in fcntl.h sys/file.h sys/resource.h sys/stat.h sys/types.h \
+		 unistd.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"
@@ -13478,659 +12825,9 @@ 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
-else
-  continue
-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)"
-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 :
-
-else
-  acx_cv_header_stdint_kind="(mostly complete)"
-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 :
-
-else
-  acx_cv_header_stdint_kind="(mostly complete)"
-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 :
-
-else
-  acx_cv_header_stdint_kind="(lacks uint64_t)"
-fi
-
-  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
-else
-  continue
-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 :
-
-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 :
-
-fi
-
-    break
-  done
-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
-else
-  continue
-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
-
-    break
-  done
-fi
-if test "$acx_cv_header_stdint" = stddef.h; then
-  acx_cv_header_stdint_kind="(using manual detection)"
-fi
-
-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 --------
-
-# 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
-# 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
-
- ;;
-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
-# 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
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
-
-
-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
-# 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 :
-
-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
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_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"
-
-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"
-  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"
-
-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_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
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-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
-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
-
-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,60 +12850,6 @@ 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_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
-
-
-
-case "${host}" in
-*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-
-$as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
- ;;
-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
@@ -14217,51 +12860,6 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FFS $ac_have_decl
 _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
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREE $ac_have_decl
-_ACEOF
-
-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
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETENV $ac_have_decl
-_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
-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
@@ -14272,18 +12870,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
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRSTR $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
@@ -14294,7 +12880,6 @@ 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
@@ -14306,39 +12891,14 @@ 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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNLEN $ac_have_decl
-_ACEOF
+case "${host}" in
+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
 
+$as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
+ ;;
+esac
 
 # Link in zlib if we can.  This allows us to read compressed debug sections.
 # This is used only by compress.c.
@@ -14556,17 +13116,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 $LIBINTL"
 
+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
 
@@ -14673,7 +13232,7 @@ 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
@@ -14705,8 +13264,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 +13315,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,10 +13332,10 @@ 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 ;;
+    k1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    k1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    l1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    l1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; 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" ;;
     m32c_elf32_vec)		 tb="$tb elf32-m32c.lo elf32.lo $elf" ;;
@@ -14859,14 +13416,13 @@ 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 ;;
     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 +13433,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 +13459,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 +13478,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,15 +13494,13 @@ 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" ;;
@@ -14956,6 +13508,7 @@ do
     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" ;;
     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
@@ -15115,7 +13668,7 @@ 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 ;;
@@ -15176,7 +13729,7 @@ if test "${target}" = "${host}"; then
 	;;
   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 ;;
@@ -15293,7 +13846,10 @@ rm -f core conftest.err conftest.$ac_obj
 
   # 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 +13862,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 +13872,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 +13898,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 +13908,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 +13934,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 +13944,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 +13970,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 +13980,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 +14006,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 +14016,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 +14042,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 +14052,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 +14078,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 +14088,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 +14114,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 +14124,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 +14150,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 +14160,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 +14186,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 +14196,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 +14222,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 +14232,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 +14258,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 +14268,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 +14294,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 +14304,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 +14330,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 +14340,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 +14366,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 +14376,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 +14402,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 +14412,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 +14438,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 +14448,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 +14474,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 +14484,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 +14510,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 +14520,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 +14546,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 +14556,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 +14582,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 +14592,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 +14662,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
@@ -16524,14 +15110,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,6 +15118,14 @@ 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
@@ -16953,7 +15539,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.37.50, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17019,7 +15605,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.37.50
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -17407,24 +15993,6 @@ fi
     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"
-
-
 
 _ACEOF
 
@@ -17438,7 +16006,6 @@ 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" ;;
     "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" ;;
@@ -18872,378 +17439,6 @@ _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":C)
 case "$srcdir" in
   .) srcdirpre= ;;
@@ -19300,3 +17495,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure.ac ./bfd/configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure.ac	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/configure.ac	2021-12-16 01:57:38.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-2021 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,7 +22,6 @@ AC_INIT([bfd], BFD_VERSION)
 AC_CONFIG_SRCDIR([libbfd.c])
 
 AC_CANONICAL_TARGET
-AC_ISC_POSIX
 
 AM_INIT_AUTOMAKE
 
@@ -44,8 +43,45 @@ LT_INIT([dlopen])
 # AC_PLUGINS setting $plugins is called by ACX_LARGEFILE.
 ACX_LARGEFILE
 
+changequote(,)dnl
+case "${target}" in
+    hppa*64*-*-* | vax-*-netbsdelf*) ;;
+    *-*-*aout* | i[3-7]86-*-bsd* | i[3-7]86-*-msdos* | ns32k-*-* | \
+    pdp11-*-* | vax-*-*bsd*)
+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_checking=
+. ${srcdir}/development.sh
+test "$development" = true && ac_checking=yes
+AC_ARG_ENABLE(checking,
+[  --enable-checking       enable run-time checks],
+[case "${enableval}" in
+  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
+
 AC_ARG_ENABLE(64-bit-bfd,
 [  --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)],
 [case "${enableval}" in
@@ -134,7 +170,7 @@ AC_ARG_WITH(separate-debug-dir,
 AC_SUBST(DEBUGDIR)
 
 ACX_PKGVERSION([GNU Binutils])
-ACX_BUGURL([http://www.sourceware.org/bugzilla/])
+ACX_BUGURL([https://www.sourceware.org/bugzilla/])
 
 AM_BINUTILS_WARNINGS
 
@@ -181,8 +217,7 @@ 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)
@@ -219,36 +254,15 @@ AC_SUBST(BFD_HOSTPTR_T)
 
 BFD_CC_FOR_BUILD
 
-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_HEADERS(fcntl.h sys/file.h sys/resource.h sys/stat.h sys/types.h \
+		 unistd.h)
 
-BFD_BINARY_FOPEN
+AC_CHECK_FUNCS(fcntl fdopen fileno fls getgid getpagesize getrlimit getuid \
+	       sysconf)
+
+AC_CHECK_DECLS([basename, ffs, stpcpy, asprintf, vasprintf])
 
-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)
+BFD_BINARY_FOPEN
 
 # Link in zlib if we can.  This allows us to read compressed debug sections.
 # This is used only by compress.c.
@@ -292,17 +306,16 @@ changequote([,])dnl
   if test -n "$x"; then
     SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty"
   fi
+fi
+
+SHARED_LIBADD="$SHARED_LIBADD $LIBINTL"
 
+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
 
@@ -409,7 +422,7 @@ 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
@@ -441,8 +454,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 +505,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,10 +522,10 @@ 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 ;;
+    k1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    k1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    l1om_elf64_vec)		 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    l1om_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; 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" ;;
     m32c_elf32_vec)		 tb="$tb elf32-m32c.lo elf32.lo $elf" ;;
@@ -595,14 +606,13 @@ 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 ;;
     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 +623,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 +649,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 +668,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,15 +684,13 @@ 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" ;;
@@ -692,6 +698,7 @@ do
     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" ;;
     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
@@ -836,7 +843,7 @@ 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 ;;
@@ -921,7 +928,7 @@ 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 ;;
@@ -1022,7 +1029,7 @@ changequote([,])dnl
 
   # 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 +1079,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
@@ -1087,7 +1095,6 @@ 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
@@ -1126,3 +1133,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure.com ./bfd/configure.com
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure.com	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/configure.com	2021-12-16 01:57:38.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-2021 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
@@ -232,20 +232,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure.host ./bfd/configure.host
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/configure.host	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/configure.host	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/corefile.c ./bfd/corefile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/corefile.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/corefile.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Core file generic interface routines for BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-aarch64.c ./bfd/cpu-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-aarch64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-aarch64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for AArch64.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -76,14 +76,14 @@ processors[] =
   { bfd_mach_aarch64,	  "cortex-a77"	    }
 };
 
-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;
 
   /* Next check for a processor name instead of an Architecture name.  */
   for (i = sizeof (processors) / sizeof (processors[0]); i--;)
@@ -93,13 +93,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, "aarch64") == 0)
     return info->the_default;
 
-  return FALSE;
+  return false;
 }
 
 #define N(NUMBER, PRINT, WORDSIZE, DEFAULT, NEXT)		\
@@ -107,23 +107,27 @@ scan (const struct bfd_arch_info *info,
     "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, 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, false,
+     &bfd_aarch64_arch_v8_r);
 
 const bfd_arch_info_type bfd_aarch64_arch =
-  N (0, "aarch64", 64, TRUE, &bfd_aarch64_arch_ilp32);
+  N (0, "aarch64", 64, true, &bfd_aarch64_arch_ilp32);
 
-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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-aarch64.h ./bfd/cpu-aarch64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-aarch64.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-aarch64.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF AArch64 mapping symbol support
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-alpha.c ./bfd/cpu-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-alpha.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-alpha.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Alpha architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-arc.c ./bfd/cpu-arc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-arc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-arc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ARC processor
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-arm.c ./bfd/cpu-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-arm.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-arm.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ARM processor
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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"	    },
@@ -165,6 +168,7 @@ processors[] =
   { bfd_mach_arm_8R,	  "cortex-r52"	    },
   { bfd_mach_arm_7,	  "cortex-r7"	    },
   { bfd_mach_arm_7,	  "cortex-r8"	    },
+  { bfd_mach_arm_8,	  "cortex-x1"	    },
   { bfd_mach_arm_4T,	  "ep9312"	    },
   { bfd_mach_arm_8,	  "exynos-m1"	    },
   { bfd_mach_arm_4,	  "fa526"	    },
@@ -194,14 +198,14 @@ processors[] =
   { 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;
 
   /* Next check for a processor name instead of an Architecture name.  */
   for (i = sizeof (processors) / sizeof (processors[0]); i--;)
@@ -211,13 +215,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 +230,38 @@ 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_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 +270,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 +304,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 +316,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 +338,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 +351,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 +362,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 +386,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;
@@ -402,11 +406,11 @@ bfd_arm_update_notes (bfd *abfd, const c
   arm_arch_section = bfd_get_section_by_name (abfd, note_section);
 
   if (arm_arch_section == NULL)
-    return TRUE;
+    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 +459,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;
 }
 
 
@@ -528,19 +531,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 +550,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-arm.h ./bfd/cpu-arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-arm.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-arm.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ARM processor
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-avr.c ./bfd/cpu-avr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-avr.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-avr.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-bfin.c ./bfd/cpu-bfin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-bfin.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-bfin.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD Support for the ADI Blackfin processor.
 
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-bpf.c ./bfd/cpu-bpf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-bpf.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-bpf.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the BPF processor.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-cr16.c ./bfd/cpu-cr16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-cr16.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-cr16.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the CR16 processor.
-   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-cris.c ./bfd/cpu-cris.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-cris.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-cris.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Axis CRIS architecture.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-crx.c ./bfd/cpu-crx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-crx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-crx.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the CRX processor.
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-csky.c ./bfd/cpu-csky.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-csky.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-csky.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for C-SKY processors.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-d10v.c ./bfd/cpu-d10v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-d10v.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-d10v.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the D10V processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-d30v.c ./bfd/cpu-d30v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-d30v.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-d30v.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Mitsubishi D30V processor
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-dlx.c ./bfd/cpu-dlx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-dlx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-dlx.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the DLX Microprocessor architecture.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-epiphany.c ./bfd/cpu-epiphany.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-epiphany.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-epiphany.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Adapteva EPIPHANY processor.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-fr30.c ./bfd/cpu-fr30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-fr30.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-fr30.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the FR30 processor.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-frv.c ./bfd/cpu-frv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-frv.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-frv.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the FRV processor.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ft32.c ./bfd/cpu-ft32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ft32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-ft32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ft32 processor.
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 Free Software Foundation, Inc.
    Written by FTDI (support@ftdichip.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,10 +43,10 @@
 
 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_ft32, "ft32", false, &arch_info_struct[1]),
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-h8300.c ./bfd/cpu-h8300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-h8300.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-h8300.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-h8300.h ./bfd/cpu-h8300.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-h8300.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-h8300.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* H8/300 functions.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-hppa.c ./bfd/cpu-hppa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-hppa.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-hppa.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-i386.c ./bfd/cpu-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-i386.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-i386.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Intel 386 architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ia64.c ./bfd/cpu-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ia64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-ia64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ia64 architecture.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ia64-opc.c ./bfd/cpu-ia64-opc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ia64-opc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-ia64-opc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2021 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-iamcu.c ./bfd/cpu-iamcu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-iamcu.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-iamcu.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Intel MCU architecture.
-   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ip2k.c ./bfd/cpu-ip2k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ip2k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-ip2k.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Scenix IP2xxx processor.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-iq2000.c ./bfd/cpu-iq2000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-iq2000.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-iq2000.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Vitesse IQ2000 processor.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-k1om.c ./bfd/cpu-k1om.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-k1om.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-k1om.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Intel K1OM architecture.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,12 +22,11 @@
 #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)			     \
-  { 64, 64, 8, bfd_arch_k1om, number, name, print, 3, TRUE, \
-    bfd_default_compatible, bfd_default_scan,		     \
+#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 =
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-l1om.c ./bfd/cpu-l1om.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-l1om.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-l1om.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Intel L1OM architecture.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,12 +22,11 @@
 #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)			     \
-  { 64, 64, 8, bfd_arch_l1om, number, name, print, 3, TRUE, \
-    bfd_default_compatible, bfd_default_scan,		     \
+#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 =
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-lm32.c ./bfd/cpu-lm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-lm32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-lm32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Lattice Mico32 architecture.
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m10200.c ./bfd/cpu-m10200.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m10200.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m10200.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Matsushita 10200 processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m10300.c ./bfd/cpu-m10300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m10300.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m10300.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Matsushita 10300 processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m32c.c ./bfd/cpu-m32c.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m32c.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m32c.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the M16C/M32C processors.
-   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m32r.c ./bfd/cpu-m32r.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m32r.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m32r.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the M32R processor.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68hc11.c ./bfd/cpu-m68hc11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68hc11.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m68hc11.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Motorola 68HC11 processor
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68hc12.c ./bfd/cpu-m68hc12.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68hc12.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m68hc12.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Motorola 68HC12 processor
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68k.c ./bfd/cpu-m68k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m68k.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for architectures.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68k.h ./bfd/cpu-m68k.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m68k.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m68k.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m9s12x.c ./bfd/cpu-m9s12x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m9s12x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m9s12x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale 9S12X processor
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m9s12xg.c ./bfd/cpu-m9s12xg.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-m9s12xg.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-m9s12xg.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mcore.c ./bfd/cpu-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mcore.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-mcore.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mep.c ./bfd/cpu-mep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mep.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-mep.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-metag.c ./bfd/cpu-metag.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-metag.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-metag.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-microblaze.c ./bfd/cpu-microblaze.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-microblaze.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-microblaze.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD Xilinx MicroBlaze architecture definition
 
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mips.c ./bfd/cpu-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mips.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-mips.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd back-end for mips support
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -115,55 +115,55 @@ 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 (64, 64, bfd_mach_mips_micromips, "mips:micromips", false, NULL)
 };
 
 /* The default architecture is mips:3000, but with a machine number of
@@ -171,4 +171,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mmix.c ./bfd/cpu-mmix.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mmix.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-mmix.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for MMIX.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-moxie.c ./bfd/cpu-moxie.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-moxie.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-moxie.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the moxie processor.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-msp430.c ./bfd/cpu-msp430.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-msp430.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-msp430.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mt.c ./bfd/cpu-mt.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-mt.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-mt.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-nds32.c ./bfd/cpu-nds32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-nds32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-nds32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the NDS32 processor
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 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, "n1h", true, NEXT);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-nfp.c ./bfd/cpu-nfp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-nfp.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-nfp.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD library support routines for the NFP.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-nios2.c ./bfd/cpu-nios2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-nios2.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-nios2.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ns32k.c ./bfd/cpu-ns32k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-ns32k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-ns32k.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the ns32k architecture.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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)
@@ -572,11 +572,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 +599,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 +674,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 +686,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 +699,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-or1k.c ./bfd/cpu-or1k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-or1k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-or1k.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the OpenRISC 1000 architecture.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-pdp11.c ./bfd/cpu-pdp11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-pdp11.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-pdp11.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for PDP-11 support.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-pj.c ./bfd/cpu-pj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-pj.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-pj.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-plugin.c ./bfd/cpu-plugin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-plugin.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-powerpc.c ./bfd/cpu-powerpc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-powerpc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-powerpc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD PowerPC CPU definition
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-pru.c ./bfd/cpu-pru.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-pru.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-pru.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TI PRU microprocessor.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-riscv.c ./bfd/cpu-riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-riscv.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-riscv.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD backend for RISC-V
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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,48 @@ 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},
+};
+
+/* 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;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-riscv.h ./bfd/cpu-riscv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-riscv.h	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/cpu-riscv.h	2021-12-16 01:57:38.000000000 +0000
@@ -0,0 +1,81 @@
+/* RISC-V spec version controlling support.
+   Copyright (C) 2019-2020 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_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 *);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-rl78.c ./bfd/cpu-rl78.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-rl78.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-rl78.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the RL78 processor.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-rs6000.c ./bfd/cpu-rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-rs6000.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-rs6000.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for rs6000 support
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-rx.c ./bfd/cpu-rx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-rx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-rx.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the RX processor.
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,11 +29,11 @@
 
 static const bfd_arch_info_type arch_info_struct[3] =
 {
-  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,    "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)
 };
 
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-s12z.c ./bfd/cpu-s12z.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-s12z.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-s12z.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale 9S12Z processor
-   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-s390.c ./bfd/cpu-s390.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-s390.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-s390.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the s390 processor.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-score.c ./bfd/cpu-score.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-score.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-score.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the score processor
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-sh.c ./bfd/cpu-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-sh.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-sh.c	2021-12-16 01:57:38.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-2021 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.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-sparc.c ./bfd/cpu-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-sparc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-sparc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the SPARC architecture.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-spu.c ./bfd/cpu-spu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-spu.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-spu.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic30.c ./bfd/cpu-tic30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic30.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-tic30.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic4x.c ./bfd/cpu-tic4x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic4x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-tic4x.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic54x.c ./bfd/cpu-tic54x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic54x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-tic54x.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic6x.c ./bfd/cpu-tic6x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic6x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-tic6x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TI C6X processor.
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic80.c ./bfd/cpu-tic80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tic80.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tilegx.c ./bfd/cpu-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tilegx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-tilegx.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TILE-Gx processor.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tilepro.c ./bfd/cpu-tilepro.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-tilepro.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-tilepro.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the TILEPro processor.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-v850.c ./bfd/cpu-v850.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-v850.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-v850.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the NEC V850 processor
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-v850_rh850.c ./bfd/cpu-v850_rh850.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-v850_rh850.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-v850_rh850.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-vax.c ./bfd/cpu-vax.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-vax.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-vax.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd back-end for vax support
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-visium.c ./bfd/cpu-visium.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-visium.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-visium.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD support for the Visium processor.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-wasm32.c ./bfd/cpu-wasm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-wasm32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-wasm32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the WebAssembly target
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xc16x.c ./bfd/cpu-xc16x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xc16x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-xc16x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Infineon XC16X Microcontroller.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 Free Software Foundation, Inc.
    Contributed by KPIT Cummins Infosystems
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,11 +43,11 @@
   }
 
 const bfd_arch_info_type xc16xs_info_struct =
-  N (16, bfd_mach_xc16xs, "xc16xs", FALSE, NULL);
+  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);
+  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);
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xgate.c ./bfd/cpu-xgate.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xgate.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-xgate.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Freescale XGATE processor
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xstormy16.c ./bfd/cpu-xstormy16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xstormy16.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-xstormy16.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the XSTORMY16 processor.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xtensa.c ./bfd/cpu-xtensa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-xtensa.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-xtensa.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for the Xtensa processor.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-z80.c ./bfd/cpu-z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-z80.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-z80.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-z8k.c ./bfd/cpu-z8k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/cpu-z8k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/cpu-z8k.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/development.sh ./bfd/development.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/development.sh	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/development.sh	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2019 Free Software Foundation, Inc.
+# Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/aoutx.texi ./bfd/doc/aoutx.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/aoutx.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/aoutx.texi	2021-12-16 01:59:24.000000000 +0000
@@ -160,7 +160,7 @@ handle any last-minute setup.
 @subsubsection @code{aout_@var{size}_mkobject}
 @strong{Synopsis}
 @example
-bfd_boolean aout_@var{size}_mkobject, (bfd *abfd);
+bool aout_@var{size}_mkobject, (bfd *abfd);
 @end example
 @strong{Description}@*
 Initialize BFD @var{abfd} for use with a.out files.
@@ -172,7 +172,7 @@ Initialize BFD @var{abfd} for use with a
 enum machine_type  aout_@var{size}_machine_type
    (enum bfd_architecture arch,
     unsigned long machine,
-    bfd_boolean *unknown);
+    bool *unknown);
 @end example
 @strong{Description}@*
 Keep track of machine architecture and machine type for
@@ -187,7 +187,7 @@ is always understood.
 @subsubsection @code{aout_@var{size}_set_arch_mach}
 @strong{Synopsis}
 @example
-bfd_boolean aout_@var{size}_set_arch_mach,
+bool aout_@var{size}_set_arch_mach,
    (bfd *,
     enum bfd_architecture arch,
     unsigned long machine);
@@ -201,7 +201,7 @@ can support the architecture required.
 @subsubsection @code{aout_@var{size}_new_section_hook}
 @strong{Synopsis}
 @example
-bfd_boolean aout_@var{size}_new_section_hook,
+bool aout_@var{size}_new_section_hook,
    (bfd *abfd,
     asection *newsect);
 @end example
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/archive.texi ./bfd/doc/archive.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/archive.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/archive.texi	2021-12-16 01:59:24.000000000 +0000
@@ -83,7 +83,7 @@ user-visible element is its name, a null
 @subsubsection @code{bfd_set_archive_head}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
+bool bfd_set_archive_head (bfd *output, bfd *new_head);
 @end example
 @strong{Description}@*
 Set the head of the chain of
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/archures.texi ./bfd/doc/archures.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/archures.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/archures.texi	2021-12-16 01:59:24.000000000 +0000
@@ -178,10 +178,6 @@ enum bfd_architecture
   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 +195,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
@@ -322,7 +317,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 +378,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
@@ -473,10 +468,25 @@ enum bfd_architecture
   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.  */
@@ -487,6 +497,7 @@ 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
   bfd_arch_nios2,     /* Nios II.  */
 #define bfd_mach_nios2         0
@@ -510,6 +521,7 @@ 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_last
   @};
 @end example
@@ -535,17 +547,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;
 
@@ -599,7 +610,7 @@ of all the valid BFD architectures.  Do
 @strong{Synopsis}
 @example
 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);
 @end example
 @strong{Description}@*
 Determine whether two BFDs' architectures and machine types
@@ -633,7 +644,7 @@ Set the architecture info of @var{abfd}
 @subsubsection @code{bfd_default_set_arch_mach}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_default_set_arch_mach
+bool bfd_default_set_arch_mach
    (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
 @end example
 @strong{Description}@*
@@ -696,7 +707,7 @@ The default function for testing for com
 @subsubsection @code{bfd_default_scan}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_default_scan
+bool bfd_default_scan
    (const struct bfd_arch_info *info, const char *string);
 @end example
 @strong{Description}@*
@@ -768,8 +779,8 @@ available
 @strong{Synopsis}
 @example
 void *bfd_arch_default_fill (bfd_size_type count,
-    bfd_boolean is_bigendian,
-    bfd_boolean code);
+    bool is_bigendian,
+    bool code);
 @end example
 @strong{Description}@*
 Allocate via bfd_malloc and return a fill buffer of size COUNT.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfd.info ./bfd/doc/bfd.info
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfd.info	2020-03-07 02:09:56.000000000 +0000
+++ ./bfd/doc/bfd.info	2021-12-16 01:59:28.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-2021 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
@@ -378,12 +378,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;
 
@@ -487,6 +481,12 @@ major data about the file and pointers t
         | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
         | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
 
+       /* 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;
+
        /* Is the file descriptor being cached?  That is, can it be closed as
           needed, and re-opened when accessed later?  */
        unsigned int cacheable : 1;
@@ -538,13 +538,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
@@ -576,7 +579,7 @@ major data about the file and pointers t
 
        /* 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 +590,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.  */
@@ -657,7 +665,7 @@ major data about the file and pointers t
        return abfd->filename;
      }
 
-     static inline bfd_boolean
+     static inline bool
      bfd_get_cacheable (const bfd *abfd)
      {
        return abfd->cacheable;
@@ -705,13 +713,13 @@ major data about the file and pointers t
        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;
@@ -724,15 +732,15 @@ major data about the file and pointers t
      }
 
      /* 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;
      }
@@ -867,7 +875,7 @@ major data about the file and pointers t
          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;
@@ -1096,7 +1104,7 @@ REL and COUNT.  The argument ABFD is ign
 ............................
 
 *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 ABFD to the value FLAGS.
 
@@ -1146,7 +1154,7 @@ addresses, and '-1' otherwise.
 ...............................
 
 *Synopsis*
-     bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
+     bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
    *Description*
 Make VMA the entry point of output BFD ABFD.
 
@@ -1193,7 +1201,7 @@ found, otherwise in decimal.
 .......................................
 
 *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 IBFD to the the BFD
 OBFD.  This copies information that may require sections to exist, but
@@ -1210,7 +1218,7 @@ error.  Possible error returns are:
 ....................................
 
 *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 IBFD to the the BFD OBFD.
 Return 'TRUE' on success, 'FALSE' on error.  Possible error returns are:
@@ -1225,7 +1233,7 @@ Return 'TRUE' on success, 'FALSE' on err
 ................................
 
 *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 ABFD.  Return 'TRUE' on
 success, 'FALSE' on error.  Possible error returns are:
@@ -1270,7 +1278,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))
@@ -1335,14 +1344,14 @@ The following functions exist but have n
 
      extern bfd_byte *bfd_get_relocated_section_contents
        (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-        bfd_boolean, asymbol **);
+        bool, asymbol **);
 
 
 2.3.1.15 '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*
 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
@@ -1360,36 +1369,18 @@ Returns the maximum page size, in bytes,
    *Returns*
 Returns the maximum page size in bytes for ELF, 0 otherwise.
 
-2.3.1.17 '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.
-
-2.3.1.18 'bfd_emul_get_commonpagesize'
+2.3.1.17 'bfd_emul_get_commonpagesize'
 ......................................
 
 *Synopsis*
-     bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
+     bfd_vma bfd_emul_get_commonpagesize (const char *, bool);
    *Description*
 Returns the common page size, in bytes, as determined by emulation.
 
    *Returns*
 Returns the common page size in bytes for ELF, 0 otherwise.
 
-2.3.1.19 '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.
-
-2.3.1.20 'bfd_demangle'
+2.3.1.18 'bfd_demangle'
 .......................
 
 *Synopsis*
@@ -1400,7 +1391,7 @@ such chars that would otherwise confuse
 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'
+2.3.1.19 'bfd_update_compression_header'
 ........................................
 
 *Synopsis*
@@ -1410,11 +1401,11 @@ demangled name.  Returns NULL otherwise
 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'
+2.3.1.20 'bfd_check_compression_header'
 .......................................
 
 *Synopsis*
-     bfd_boolean bfd_check_compression_header
+     bool bfd_check_compression_header
         (bfd *abfd, bfd_byte *contents, asection *sec,
          bfd_size_type *uncompressed_size,
          unsigned int *uncompressed_alignment_power);
@@ -1427,7 +1418,7 @@ valid.
    *Returns*
 Return TRUE if the compression header is valid.
 
-2.3.1.23 'bfd_get_compression_header_size'
+2.3.1.21 'bfd_get_compression_header_size'
 ..........................................
 
 *Synopsis*
@@ -1438,7 +1429,7 @@ Return the size of the compression heade
    *Returns*
 Return the size of the compression header in bytes.
 
-2.3.1.24 'bfd_convert_section_size'
+2.3.1.22 'bfd_convert_section_size'
 ...................................
 
 *Synopsis*
@@ -1448,11 +1439,11 @@ Return the size of the compression heade
 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'
+2.3.1.23 'bfd_convert_section_contents'
 .......................................
 
 *Synopsis*
-     bfd_boolean bfd_convert_section_contents
+     bool bfd_convert_section_contents
         (bfd *ibfd, asection *isec, bfd *obfd,
          bfd_byte **ptr, bfd_size_type *ptr_size);
    *Description*
@@ -1461,7 +1452,7 @@ IBFD to output BFD OBFD if needed.  The
 *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.3.1.24 'struct bfd_iovec'
 ...........................
 
 *Description*
@@ -1500,7 +1491,7 @@ is assumed that the instance implements
      };
      extern const struct bfd_iovec _bfd_memory_iovec;
 
-2.3.1.27 'bfd_get_mtime'
+2.3.1.25 'bfd_get_mtime'
 ........................
 
 *Synopsis*
@@ -1509,7 +1500,7 @@ is assumed that the instance implements
 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.3.1.26 'bfd_get_size'
 .......................
 
 *Synopsis*
@@ -1537,7 +1528,9 @@ memory exhausted" error when it tries to
 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.3.1.27 'bfd_get_file_size'
 ............................
 
 *Synopsis*
@@ -1546,7 +1539,7 @@ at least allows us to answer the questio
 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.3.1.28 'bfd_mmap'
 ...................
 
 *Synopsis*
@@ -1734,6 +1727,10 @@ Here is the section structure:
        /* 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;
 
@@ -1867,6 +1864,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.  */
@@ -2116,11 +2117,17 @@ 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;
+      /* 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;
+
      } asection;
 
      /* Relax table contains information about instructions which can
@@ -2175,7 +2182,7 @@ Here is the section structure:
      {
        return sec->userdata;
      }
-     static inline bfd_boolean
+     static inline bool
      bfd_is_com_section (const asection *sec)
      {
        return (sec->flags & SEC_IS_COMMON) != 0;
@@ -2185,33 +2192,33 @@ Here is the section structure:
         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)
      {
        sec->alignment_power = val;
-       return TRUE;
+       return true;
      }
 
      /* These sections are global, and are managed by BFD.  The application
@@ -2233,32 +2240,34 @@ Here is the section structure:
      /* 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)
@@ -2268,41 +2277,42 @@ Here is the section structure:
      }
 
      #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, id,  section_id, index, next, prev, flags, user_set_vma, */ \
+       {  NAME, IDX, 0,          0,     NULL, NULL, 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, */  \
+       /* vma, lma, size, rawsize, compressed_size, relax, relax_count,  */ \
           0,   0,   0,    0,       0,               0,     0,               \
                                                                             \
-       /* output_offset, output_section, alignment_power,               */  \
+       /* output_offset, output_section, alignment_power,                */ \
           0,             &SEC,           0,                                 \
                                                                             \
-       /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
+       /* relocation, orelocation, reloc_count, filepos, rel_filepos,    */ \
           NULL,       NULL,        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,                                        \
+          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                           */ \
+          { NULL }, { NULL }, NULL                                          \
+                                                                            \
          }
 
      /* We use a macro to initialize the static asymbol structures because
@@ -2372,7 +2382,7 @@ NULL if no such section exists.
      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*
 Call the provided function FUNC for each section attached to the BFD
@@ -2477,7 +2487,7 @@ a section named NAME.  If there is an er
 ................................
 
 *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 SEC to the value FLAGS.  Return 'TRUE'
 on success, 'FALSE' on error.  Possible error returns are:
@@ -2522,7 +2532,7 @@ alternative would be to use a loop:
 *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*
 Call the provided function OPERATION for each section attached to the
@@ -2537,7 +2547,7 @@ by
 ...............................
 
 *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 SEC to the size VAL.  If the operation is ok, then 'TRUE' is
 returned, else 'FALSE'.
@@ -2551,7 +2561,7 @@ returned, else 'FALSE'.
 ...................................
 
 *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);
    *Description*
@@ -2575,7 +2585,7 @@ error.  Possible error returns are:
 ...................................
 
 *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);
    *Description*
@@ -2592,7 +2602,7 @@ flag set, then the LOCATION is filled wi
 .....................................
 
 *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 SECTION in BFD ABFD into a buffer, *BUF, malloc'd by
@@ -2602,7 +2612,7 @@ this function.
 ........................................
 
 *Synopsis*
-     bfd_boolean bfd_copy_private_section_data
+     bool 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
@@ -2619,7 +2629,7 @@ error.  Possible error returns are:
 .......................................
 
 *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 SEC is a member of a group.
 
@@ -2635,7 +2645,7 @@ Returns group name if SEC is a member of
 ....................................
 
 *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 GROUP from the output.
 
@@ -2916,6 +2926,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
@@ -2956,7 +2969,7 @@ error occurs, return -1.
 ............................
 
 *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 SYM in the BFD ABFD is a compiler
 generated local label, else return FALSE.
@@ -2965,7 +2978,7 @@ generated local label, else return FALSE
 .................................
 
 *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 NAME in the BFD ABFD is a compiler
 generated local label, else return FALSE. This just checks whether the
@@ -2978,7 +2991,7 @@ name has the form of a local label.
 ......................................
 
 *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 SYM in the BFD ABFD is something special to the
 particular target represented by the BFD. Such symbols should normally
@@ -3002,7 +3015,7 @@ number of symbol pointers, not including
 ........................
 
 *Synopsis*
-     bfd_boolean bfd_set_symtab
+     bool bfd_set_symtab
         (bfd *abfd, asymbol **location, unsigned int count);
    *Description*
 Arrange that when the output BFD ABFD is closed, the table LOCATION of
@@ -3069,7 +3082,7 @@ Returns non-zero if the class symbol ret
 represents an undefined symbol.  Returns zero otherwise.
 
    *Synopsis*
-     bfd_boolean bfd_is_undefined_symclass (int symclass);
+     bool bfd_is_undefined_symclass (int symclass);
 
 2.7.5.13 'bfd_symbol_info'
 ..........................
@@ -3085,7 +3098,7 @@ be added by the back-ends after calling
 .......................................
 
 *Synopsis*
-     bfd_boolean bfd_copy_private_symbol_data
+     bool 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
@@ -3178,7 +3191,7 @@ element is its name, a null-terminated s
 ..............................
 
 *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 OUTPUT to
 NEW_HEAD.
@@ -3221,7 +3234,7 @@ supported by BFD are:
 ..........................
 
 *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 ABFD is compatible with the
 format FORMAT (i.e., one of 'bfd_object', 'bfd_archive' or 'bfd_core').
@@ -3252,7 +3265,7 @@ the following error codes:
 ..................................
 
 *Synopsis*
-     bfd_boolean bfd_check_format_matches
+     bool bfd_check_format_matches
         (bfd *abfd, bfd_format format, char ***matching);
    *Description*
 Like 'bfd_check_format', except when it returns FALSE with 'bfd_errno'
@@ -3268,7 +3281,7 @@ free it.
 ........................
 
 *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 ABFD to the format FORMAT.
 If the target set in the BFD does not support the format requested, the
@@ -3610,8 +3623,8 @@ reloc_howto_struct).
    *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, 0, 0, false, 0, complain_overflow_dont, NULL, \
+              NULL, false, 0, 0, false)
 
 
 2.10.1.4 'bfd_get_reloc_size'
@@ -3656,7 +3669,7 @@ addresses containing ADDRSIZE significan
 ....................................
 
 *Synopsis*
-     bfd_boolean bfd_reloc_offset_in_range
+     bool bfd_reloc_offset_in_range
         (reloc_howto_type *howto,
          bfd *abfd,
          asection *section,
@@ -4313,6 +4326,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 +4374,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
@@ -4414,6 +4430,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 +4461,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,10 +4485,10 @@ 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
@@ -6079,6 +6105,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
@@ -6169,6 +6196,8 @@ attributes.
  -- : BFD_RELOC_MSP430_ABS_HI16
  -- : BFD_RELOC_MSP430_PREL31
  -- : BFD_RELOC_MSP430_SYM_DIFF
+ -- : BFD_RELOC_MSP430_SET_ULEB128
+ -- : BFD_RELOC_MSP430_SUB_ULEB128
      msp430 specific relocation codes
  -- : BFD_RELOC_NIOS2_S16
  -- : BFD_RELOC_NIOS2_U16
@@ -6270,6 +6299,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 +6364,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
@@ -7151,11 +7211,11 @@ mainly for printing error messages.
 ....................................
 
 *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.
@@ -7164,7 +7224,7 @@ relaxing.
 ..................................
 
 *Synopsis*
-     bfd_boolean bfd_generic_gc_sections
+     bool bfd_generic_gc_sections
         (bfd *, struct bfd_link_info *);
    *Description*
 Provides default handling for relaxing for back ends which don't do
@@ -7174,7 +7234,7 @@ section gc - i.e., does nothing.
 ...........................................
 
 *Synopsis*
-     bfd_boolean bfd_generic_lookup_section_flags
+     bool 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.
@@ -7184,7 +7244,7 @@ Returns FALSE if the section should be o
 .....................................
 
 *Synopsis*
-     bfd_boolean bfd_generic_merge_sections
+     bool bfd_generic_merge_sections
         (bfd *, struct bfd_link_info *);
    *Description*
 Provides default handling for SEC_MERGE section merging for back ends
@@ -7199,7 +7259,7 @@ which don't have SEC_MERGE support - i.e
          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
@@ -7221,7 +7281,7 @@ Installs a new set of internal relocatio
 ...................................
 
 *Synopsis*
-     bfd_boolean _bfd_unrecognized_reloc
+     bool _bfd_unrecognized_reloc
         (bfd * abfd,
          sec_ptr section,
          unsigned int r_type);
@@ -7273,7 +7333,7 @@ was generated from.
 .........................................
 
 *Synopsis*
-     bfd_boolean core_file_matches_executable_p
+     bool 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
@@ -7283,7 +7343,7 @@ run of the executable file attached to E
 .................................................
 
 *Synopsis*
-     bfd_boolean generic_core_file_matches_executable_p
+     bool 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
@@ -7388,6 +7448,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.
@@ -7429,6 +7494,8 @@ both!
      /* Forward declaration.  */
      typedef struct flag_info flag_info;
 
+     typedef void (*bfd_cleanup) (bfd *);
+
      typedef struct bfd_target
      {
        /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
@@ -7466,6 +7533,9 @@ 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.  */
@@ -7493,15 +7563,15 @@ 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.
@@ -7515,17 +7585,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 +7609,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 +7643,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 +7662,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) \
@@ -7630,46 +7696,47 @@ BFD_JUMP_TABLE macros.
        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_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 *, void *, unsigned long size);
      #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 +7746,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 +7789,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 +7863,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 +7875,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 +7920,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,12 +7970,18 @@ 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_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. This takes
 the name of the target, which may be a BFD target name or a
@@ -7935,7 +8009,7 @@ that matches the file being read.
 *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*
@@ -8166,10 +8240,6 @@ architecture, containing, for example, 6
        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 +8257,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
@@ -8310,7 +8379,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 +8440,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
@@ -8461,10 +8530,25 @@ architecture, containing, for example, 6
        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.  */
@@ -8475,6 +8559,7 @@ 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
        bfd_arch_nios2,     /* Nios II.  */
      #define bfd_mach_nios2         0
@@ -8498,6 +8583,7 @@ 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_last
        };
 
@@ -8520,17 +8606,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;
 
@@ -8580,7 +8665,7 @@ valid BFD architectures.  Do not modify
 
 *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 are
 compatible.  Calculates the lowest common denominator between the two
@@ -8609,7 +8694,7 @@ Set the architecture info of ABFD to ARG
 ....................................
 
 *Synopsis*
-     bfd_boolean bfd_default_set_arch_mach
+     bool 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.
@@ -8662,7 +8747,7 @@ The default function for testing for com
 ............................
 
 *Synopsis*
-     bfd_boolean bfd_default_scan
+     bool 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
@@ -8727,8 +8812,8 @@ available
 
 *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. If
 IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
@@ -8817,7 +8902,16 @@ 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.
 
-2.14.1.4 'bfd_openstreamr'
+2.14.1.4 '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.
+
+2.14.1.5 'bfd_openstreamr'
 ..........................
 
 *Synopsis*
@@ -8830,7 +8924,7 @@ passed to 'bfd_close', the stream will b
    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_openr_iovec'
 ..........................
 
 *Synopsis*
@@ -8881,7 +8975,7 @@ 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.
 
-2.14.1.6 'bfd_openw'
+2.14.1.7 'bfd_openw'
 ....................
 
 *Synopsis*
@@ -8896,11 +8990,11 @@ TARGET, and return a pointer to it.
    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.7 'bfd_close'
+2.14.1.8 '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 operations
 are completed and the file written out and closed.  If the created file
@@ -8914,11 +9008,11 @@ passed in to BFD by 'bfd_fdopenr').
    *Returns*
 'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-2.14.1.8 'bfd_close_all_done'
+2.14.1.9 '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 complete any
 pending operations.  This routine would be used if the application had
@@ -8933,8 +9027,8 @@ as such.
    *Returns*
 'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-2.14.1.9 'bfd_create'
-.....................
+2.14.1.10 'bfd_create'
+......................
 
 *Synopsis*
      bfd *bfd_create (const char *filename, bfd *templ);
@@ -8946,11 +9040,11 @@ format is always set to 'bfd_object'.
    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.10 'bfd_make_writable'
+2.14.1.11 '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 into one like as
 returned by 'bfd_openw'.  It does this by converting the BFD to
@@ -8960,11 +9054,11 @@ this bfd later.
    *Returns*
 'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-2.14.1.11 'bfd_make_readable'
+2.14.1.12 '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 'bfd_make_writable' and
 converts it into one like as returned by 'bfd_openr'.  It does this by
@@ -8974,7 +9068,7 @@ direction.
    *Returns*
 'TRUE' is returned if all is ok, otherwise 'FALSE'.
 
-2.14.1.12 'bfd_alloc'
+2.14.1.13 'bfd_alloc'
 .....................
 
 *Synopsis*
@@ -8983,15 +9077,6 @@ direction.
 Allocate a block of WANTED bytes of memory attached to 'abfd' and return
 a pointer to it.
 
-2.14.1.13 'bfd_alloc2'
-......................
-
-*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.
-
 2.14.1.14 'bfd_zalloc'
 ......................
 
@@ -9001,16 +9086,7 @@ to 'abfd' and return a pointer to it.
 Allocate a block of WANTED bytes of zeroed memory attached to 'abfd' and
 return a pointer to it.
 
-2.14.1.15 'bfd_zalloc2'
-.......................
-
-*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.
-
-2.14.1.16 'bfd_calc_gnu_debuglink_crc32'
+2.14.1.15 'bfd_calc_gnu_debuglink_crc32'
 ........................................
 
 *Synopsis*
@@ -9024,7 +9100,7 @@ for LEN bytes of BUF.
    *Returns*
 Return the updated CRC32 value.
 
-2.14.1.17 'bfd_get_debug_link_info_1'
+2.14.1.16 'bfd_get_debug_link_info_1'
 .....................................
 
 *Synopsis*
@@ -9046,7 +9122,7 @@ file.
    The returned filename is allocated with 'malloc'; freeing it is the
 responsibility of the caller.
 
-2.14.1.18 'bfd_get_debug_link_info'
+2.14.1.17 'bfd_get_debug_link_info'
 ...................................
 
 *Synopsis*
@@ -9064,7 +9140,7 @@ file.
    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'
+2.14.1.18 'bfd_get_alt_debug_link_info'
 .......................................
 
 *Synopsis*
@@ -9078,11 +9154,11 @@ return filename and update BUILDID_LEN a
 filename and build_id are allocated with 'malloc'; freeing them is the
 responsibility of the caller.
 
-2.14.1.20 'separate_debug_file_exists'
+2.14.1.19 'separate_debug_file_exists'
 ......................................
 
 *Synopsis*
-     bfd_boolean separate_debug_file_exists
+     bool 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
@@ -9091,21 +9167,21 @@ is a pointer to an 'unsigned long' conta
    The CRC32_P parameter is an untyped pointer because this routine is
 used as a 'check_func_type' function.
 
-2.14.1.21 'separate_alt_debug_file_exists'
+2.14.1.20 'separate_alt_debug_file_exists'
 ..........................................
 
 *Synopsis*
-     bfd_boolean separate_alt_debug_file_exists
+     bool 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.21 'find_separate_debug_file'
 ....................................
 
 *Synopsis*
      char *find_separate_debug_file
-        (bfd *abfd, const char *dir, bfd_boolean include_dirs,
+        (bfd *abfd, const char *dir, bool include_dirs,
          get_func_type get, check_func_type check, void *data);
    *Description*
 Searches for a debug information file corresponding to ABFD.
@@ -9125,7 +9201,7 @@ Returns the filename of the first file t
 result from the CHECK function.  Returns NULL if no valid file could be
 found.
 
-2.14.1.23 'bfd_follow_gnu_debuglink'
+2.14.1.22 'bfd_follow_gnu_debuglink'
 ....................................
 
 *Synopsis*
@@ -9146,7 +9222,7 @@ directory.
 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.23 'bfd_follow_gnu_debugaltlink'
 .......................................
 
 *Synopsis*
@@ -9166,7 +9242,7 @@ directory.
 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.24 'bfd_create_gnu_debuglink_section'
 ............................................
 
 *Synopsis*
@@ -9180,11 +9256,11 @@ sized to be big enough to contain a link
 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'
+2.14.1.25 '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 BFD and containing a .gnu_debuglink section SECT and fills in
@@ -9195,7 +9271,7 @@ The filename should be relative to the c
 'TRUE' is returned if all is ok.  Otherwise 'FALSE' is returned and
 bfd_error is set.
 
-2.14.1.27 'get_build_id'
+2.14.1.26 'get_build_id'
 ........................
 
 *Synopsis*
@@ -9209,7 +9285,7 @@ memory allocated to ABFD, and this is th
 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.27 'get_build_id_name'
 .............................
 
 *Synopsis*
@@ -9226,11 +9302,11 @@ filename is returned then the BUILD_ID_O
 a 'struct bfd_build_id' pointer) is set to a pointer to the build_id
 structure.
 
-2.14.1.29 'check_build_id_file'
+2.14.1.28 'check_build_id_file'
 ...............................
 
 *Synopsis*
-     bfd_boolean check_build_id_file (char *name, void *buildid_p);
+     bool 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.
@@ -9240,7 +9316,7 @@ Returns TRUE if the file exists, is read
 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.29 'bfd_follow_build_id_debuglink'
 .........................................
 
 *Synopsis*
@@ -9264,14 +9340,15 @@ directory.
 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.30 '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 ABFD.  The old filename, if any, is freed.  FILENAME
-must be allocated using 'xmalloc'.  After this call, it is owned ABFD.
+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
@@ -9286,19 +9363,85 @@ File: bfd.info,  Node: Internal,  Next:
 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'
+.....................
+
+*Synopsis*
+     extern void * bfd_malloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+   *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.
+
+2.15.1.2 'bfd_realloc'
+......................
+
+*Synopsis*
+     extern void * bfd_realloc (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+   *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.
+
+2.15.1.3 'bfd_realloc_or_free'
+..............................
+
+*Synopsis*
+     extern void * bfd_realloc_or_free (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+   *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.
+
+2.15.1.4 'bfd_zmalloc'
+......................
+
+*Synopsis*
+     extern void * bfd_zmalloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+   *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.
+
+2.15.1.5 '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 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.6 'bfd_put_size'
 .......................
 
-2.15.1.3 'bfd_get_size'
+2.15.1.7 'bfd_get_size'
 .......................
 
 *Description*
@@ -9371,7 +9514,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,7 +9528,7 @@ less than a 'bfd_vma', use 'gcc -Wconver
         : (abort (), (void) 0))
 
 
-2.15.1.4 'bfd_h_put_size'
+2.15.1.8 'bfd_h_put_size'
 .........................
 
 *Description*
@@ -9454,7 +9597,7 @@ order.
 
 
 
-2.15.1.5 'bfd_log2'
+2.15.1.9 'bfd_log2'
 ...................
 
 *Synopsis*
@@ -9485,7 +9628,7 @@ opens the one wanted, returning its file
 .........................
 
 *Synopsis*
-     bfd_boolean bfd_cache_init (bfd *abfd);
+     bool bfd_cache_init (bfd *abfd);
    *Description*
 Add a newly opened BFD to the cache.
 
@@ -9493,7 +9636,7 @@ Add a newly opened BFD to the cache.
 ..........................
 
 *Synopsis*
-     bfd_boolean bfd_cache_close (bfd *abfd);
+     bool bfd_cache_close (bfd *abfd);
    *Description*
 Remove the BFD ABFD from the cache.  If the attached file is open, then
 close it too.
@@ -9506,7 +9649,7 @@ is well.
 ..............................
 
 *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.
@@ -9873,7 +10016,7 @@ the output file at the end of 'NAME(aout
 .................................
 
 *Synopsis*
-     bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
+     bool bfd_link_split_section (bfd *abfd, asection *sec);
    *Description*
 Return nonzero if SEC should be split during a reloceatable or final
 link.
@@ -9885,7 +10028,7 @@ link.
 .....................................
 
 *Synopsis*
-     bfd_boolean bfd_section_already_linked (bfd *abfd,
+     bool bfd_section_already_linked (bfd *abfd,
          asection *sec,
          struct bfd_link_info *info);
    *Description*
@@ -9899,7 +10042,7 @@ link.  Return TRUE if it has.
 ...........................................
 
 *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);
    *Description*
@@ -9943,7 +10086,7 @@ symbol or NULL if no such undefined symb
 *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 info and export
 / don't-export status for a given symbol.  Return non-NULL on success
@@ -9953,7 +10096,7 @@ and NULL on failure; also sets the outpu
 ...................................
 
 *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*
 Search an elf version script tree for symbol versioning info for a given
@@ -9963,7 +10106,7 @@ symbol.  Return TRUE if the symbol is hi
 .................................
 
 *Synopsis*
-     bfd_boolean bfd_link_check_relocs
+     bool bfd_link_check_relocs
         (bfd *abfd, struct bfd_link_info *info);
    *Description*
 Checks the relocs in ABFD for validity.  Does not execute the relocs.
@@ -9974,7 +10117,7 @@ entry point to this code.
 ..........................................
 
 *Synopsis*
-     bfd_boolean _bfd_generic_link_check_relocs
+     bool _bfd_generic_link_check_relocs
         (bfd *abfd, struct bfd_link_info *info);
    *Description*
 Stub function for targets that do not implement reloc checking.  Return
@@ -9985,7 +10128,7 @@ outside the BFD library.
 ......................................
 
 *Synopsis*
-     bfd_boolean bfd_merge_private_bfd_data
+     bool 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
@@ -10002,7 +10145,7 @@ error returns are:
 ............................................
 
 *Synopsis*
-     bfd_boolean _bfd_generic_verify_endian_match
+     bool _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
@@ -10422,7 +10565,7 @@ before returning, to handle any last-min
 ............................
 
 *Synopsis*
-     bfd_boolean aout_SIZE_mkobject, (bfd *abfd);
+     bool aout_SIZE_mkobject, (bfd *abfd);
    *Description*
 Initialize BFD ABFD for use with a.out files.
 
@@ -10433,7 +10576,7 @@ Initialize BFD ABFD for use with a.out f
      enum machine_type  aout_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 a.out's.  Return
 the 'machine_type' for a particular architecture and machine, or
@@ -10447,7 +10590,7 @@ understood.
 .................................
 
 *Synopsis*
-     bfd_boolean aout_SIZE_set_arch_mach,
+     bool aout_SIZE_set_arch_mach,
         (bfd *,
          enum bfd_architecture arch,
          unsigned long machine);
@@ -10460,7 +10603,7 @@ required.
 ....................................
 
 *Synopsis*
-     bfd_boolean aout_SIZE_new_section_hook,
+     bool aout_SIZE_new_section_hook,
         (bfd *abfd,
          asection *newsect);
    *Description*
@@ -10743,7 +10886,7 @@ The hidden information for an 'asymbol'
        } u;
 
       /* Selector for the union above.  */
-      bfd_boolean is_sym;
+      bool is_sym;
      } combined_entry_type;
 
 
@@ -10761,7 +10904,7 @@ 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'
@@ -10828,14 +10971,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,32 +10994,32 @@ 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);
 
@@ -10891,13 +11034,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,22 +11048,22 @@ 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;
@@ -11068,7 +11211,7 @@ The hidden information for an 'asymbol'
      /* 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-"))
 
 3.3.2.8 Writing relocations
 ...........................
@@ -11986,7 +12129,7 @@ BFD Index
                                                              (line   83)
 * _bfd_generic_make_empty_symbol:        symbol handling functions.
                                                              (line   96)
-* _bfd_generic_set_reloc:                howto manager.      (line 3496)
+* _bfd_generic_set_reloc:                howto manager.      (line 3543)
 * _bfd_generic_verify_endian_match:      Writing the symbol table.
                                                              (line  172)
 * _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table.
@@ -11997,7 +12140,7 @@ BFD Index
                                                              (line    6)
 * _bfd_relocate_contents:                Relocating the section contents.
                                                              (line   22)
-* _bfd_unrecognized_reloc:               howto manager.      (line 3508)
+* _bfd_unrecognized_reloc:               howto manager.      (line 3555)
 * aout_SIZE_machine_type:                aout.               (line  145)
 * aout_SIZE_mkobject:                    aout.               (line  137)
 * aout_SIZE_new_section_hook:            aout.               (line  175)
@@ -12009,55 +12152,53 @@ BFD Index
 * 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_alt_mach_code:                     Miscellaneous.      (line  292)
+* bfd_arch_bits_per_address:             Architectures.      (line  666)
+* bfd_arch_bits_per_byte:                Architectures.      (line  658)
+* bfd_arch_default_fill:                 Architectures.      (line  748)
+* bfd_arch_get_compatible:               Architectures.      (line  601)
+* bfd_arch_list:                         Architectures.      (line  592)
+* bfd_arch_mach_octets_per_byte:         Architectures.      (line  736)
+* BFD_ARELOC_BFIN_ADD:                   howto manager.      (line 1157)
+* BFD_ARELOC_BFIN_ADDR:                  howto manager.      (line 1191)
+* BFD_ARELOC_BFIN_AND:                   howto manager.      (line 1171)
+* BFD_ARELOC_BFIN_COMP:                  howto manager.      (line 1185)
+* BFD_ARELOC_BFIN_CONST:                 howto manager.      (line 1155)
+* BFD_ARELOC_BFIN_DIV:                   howto manager.      (line 1163)
+* BFD_ARELOC_BFIN_HWPAGE:                howto manager.      (line 1189)
+* BFD_ARELOC_BFIN_LAND:                  howto manager.      (line 1177)
+* BFD_ARELOC_BFIN_LEN:                   howto manager.      (line 1181)
+* BFD_ARELOC_BFIN_LOR:                   howto manager.      (line 1179)
+* BFD_ARELOC_BFIN_LSHIFT:                howto manager.      (line 1167)
+* BFD_ARELOC_BFIN_MOD:                   howto manager.      (line 1165)
+* BFD_ARELOC_BFIN_MULT:                  howto manager.      (line 1161)
+* BFD_ARELOC_BFIN_NEG:                   howto manager.      (line 1183)
+* BFD_ARELOC_BFIN_OR:                    howto manager.      (line 1173)
+* BFD_ARELOC_BFIN_PAGE:                  howto manager.      (line 1187)
+* BFD_ARELOC_BFIN_PUSH:                  howto manager.      (line 1153)
+* BFD_ARELOC_BFIN_RSHIFT:                howto manager.      (line 1169)
+* BFD_ARELOC_BFIN_SUB:                   howto manager.      (line 1159)
+* BFD_ARELOC_BFIN_XOR:                   howto manager.      (line 1175)
 * bfd_cache_close:                       File Caching.       (line   25)
 * bfd_cache_close_all:                   File Caching.       (line   38)
 * bfd_cache_init:                        File Caching.       (line   17)
 * bfd_calc_gnu_debuglink_crc32:          Opening and Closing.
-                                                             (line  275)
+                                                             (line  266)
 * bfd_canonicalize_reloc:                Miscellaneous.      (line   18)
 * bfd_canonicalize_symtab:               symbol handling functions.
                                                              (line   52)
-* bfd_check_compression_header:          Miscellaneous.      (line  363)
+* bfd_check_compression_header:          Miscellaneous.      (line  346)
 * bfd_check_format:                      Formats.            (line   20)
 * bfd_check_format_matches:              Formats.            (line   51)
 * bfd_check_overflow:                    typedef arelent.    (line  328)
 * bfd_close:                             Opening and Closing.
-                                                             (line  161)
+                                                             (line  170)
 * bfd_close_all_done:                    Opening and Closing.
-                                                             (line  179)
+                                                             (line  188)
 * bfd_coff_backend_data:                 coff.               (line  296)
-* bfd_convert_section_contents:          Miscellaneous.      (line  401)
-* bfd_convert_section_size:              Miscellaneous.      (line  391)
+* bfd_convert_section_contents:          Miscellaneous.      (line  384)
+* bfd_convert_section_size:              Miscellaneous.      (line  374)
 * 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)
@@ -12067,36 +12208,36 @@ BFD Index
 * bfd_core_file_failing_signal:          Core Files.         (line   20)
 * bfd_core_file_pid:                     Core Files.         (line   29)
 * bfd_create:                            Opening and Closing.
-                                                             (line  198)
+                                                             (line  207)
 * bfd_create_gnu_debuglink_section:      Opening and Closing.
-                                                             (line  431)
+                                                             (line  422)
 * 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_default_arch_struct:               Architectures.      (line  613)
+* bfd_default_compatible:                Architectures.      (line  675)
+* bfd_default_reloc_type_lookup:         howto manager.      (line 3467)
+* bfd_default_scan:                      Architectures.      (line  684)
+* bfd_default_set_arch_mach:             Architectures.      (line  631)
+* bfd_demangle:                          Miscellaneous.      (line  325)
+* bfd_emul_get_commonpagesize:           Miscellaneous.      (line  314)
+* bfd_emul_get_maxpagesize:              Miscellaneous.      (line  303)
 * bfd_errmsg:                            Error reporting.    (line   79)
 * bfd_fdopenr:                           Opening and Closing.
                                                              (line   56)
+* bfd_fdopenw:                           Opening and Closing.
+                                                             (line   82)
 * bfd_fill_in_gnu_debuglink_section:     Opening and Closing.
-                                                             (line  445)
-* bfd_find_target:                       bfd_target.         (line  567)
+                                                             (line  436)
+* bfd_find_target:                       bfd_target.         (line  581)
 * bfd_find_version_for_sym:              Writing the symbol table.
                                                              (line  111)
-* bfd_flavour_name:                      bfd_target.         (line  630)
+* bfd_flavour_name:                      bfd_target.         (line  644)
 * bfd_follow_build_id_debuglink:         Opening and Closing.
-                                                             (line  505)
+                                                             (line  496)
 * bfd_follow_gnu_debugaltlink:           Opening and Closing.
-                                                             (line  411)
+                                                             (line  402)
 * bfd_follow_gnu_debuglink:              Opening and Closing.
-                                                             (line  390)
+                                                             (line  381)
 * bfd_fopen:                             Opening and Closing.
                                                              (line   11)
 * bfd_format_string:                     Formats.            (line   78)
@@ -12105,43 +12246,43 @@ BFD Index
 * 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_gc_sections:               howto manager.      (line 3498)
+* bfd_generic_get_relocated_section_contents: howto manager. (line 3528)
 * 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)
+* bfd_generic_lookup_section_flags:      howto manager.      (line 3508)
+* bfd_generic_merge_sections:            howto manager.      (line 3518)
+* bfd_generic_relax_section:             howto manager.      (line 3485)
 * bfd_get_alt_debug_link_info:           Opening and Closing.
-                                                             (line  329)
-* bfd_get_arch:                          Architectures.      (line  631)
-* bfd_get_arch_info:                     Architectures.      (line  683)
+                                                             (line  320)
+* bfd_get_arch:                          Architectures.      (line  642)
+* bfd_get_arch_info:                     Architectures.      (line  694)
 * bfd_get_arch_size:                     Miscellaneous.      (line   63)
-* bfd_get_compression_header_size:       Miscellaneous.      (line  380)
+* bfd_get_compression_header_size:       Miscellaneous.      (line  363)
 * bfd_get_debug_link_info:               Opening and Closing.
-                                                             (line  311)
+                                                             (line  302)
 * bfd_get_debug_link_info_1:             Opening and Closing.
-                                                             (line  289)
+                                                             (line  280)
 * bfd_get_error:                         Error reporting.    (line   49)
-* bfd_get_file_size:                     Miscellaneous.      (line  490)
+* bfd_get_file_size:                     Miscellaneous.      (line  475)
 * 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_mach:                          Architectures.      (line  650)
+* bfd_get_mtime:                         Miscellaneous.      (line  436)
 * 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_code_name:               howto manager.      (line 3476)
 * bfd_get_reloc_size:                    typedef arelent.    (line  306)
 * 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_size:                          Miscellaneous.      (line  445)
+* bfd_get_size <1>:                      Internal.           (line   90)
 * bfd_get_symtab_upper_bound:            symbol handling functions.
                                                              (line    5)
-* bfd_get_target_info:                   bfd_target.         (line  583)
+* bfd_get_target_info:                   bfd_target.         (line  597)
 * bfd_get_unique_section_name:           section prototypes. (line   65)
 * bfd_hash_allocate:                     Creating and Freeing a Hash Table.
                                                              (line   17)
@@ -12161,7 +12302,7 @@ BFD Index
                                                              (line    6)
 * bfd_hide_sym_by_version:               Writing the symbol table.
                                                              (line  123)
-* bfd_h_put_size:                        Internal.           (line  111)
+* bfd_h_put_size:                        Internal.           (line  177)
 * bfd_init:                              Initialization.     (line   10)
 * bfd_install_relocation:                typedef arelent.    (line  382)
 * bfd_is_local_label:                    symbol handling functions.
@@ -12172,49 +12313,52 @@ BFD Index
                                                              (line   39)
 * bfd_is_undefined_symclass:             symbol handling functions.
                                                              (line  125)
-* bfd_iterate_over_targets:              bfd_target.         (line  618)
+* bfd_iterate_over_targets:              bfd_target.         (line  632)
 * bfd_link_check_relocs:                 Writing the symbol table.
                                                              (line  133)
 * bfd_link_split_section:                Writing the symbol table.
                                                              (line   43)
-* bfd_log2:                              Internal.           (line  180)
-* bfd_lookup_arch:                       Architectures.      (line  691)
+* bfd_log2:                              Internal.           (line  246)
+* bfd_lookup_arch:                       Architectures.      (line  702)
 * bfd_make_debug_symbol:                 symbol handling functions.
                                                              (line  106)
 * bfd_make_empty_symbol:                 symbol handling functions.
                                                              (line   81)
 * bfd_make_readable:                     Opening and Closing.
-                                                             (line  225)
+                                                             (line  234)
 * 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)
 * bfd_make_writable:                     Opening and Closing.
-                                                             (line  211)
+                                                             (line  220)
+* bfd_malloc:                            Internal.           (line   12)
 * bfd_malloc_and_get_section:            section prototypes. (line  269)
 * bfd_map_over_sections:                 section prototypes. (line  176)
 * bfd_merge_private_bfd_data:            Writing the symbol table.
                                                              (line  155)
-* bfd_mmap:                              Miscellaneous.      (line  499)
-* bfd_octets_per_byte:                   Architectures.      (line  714)
+* bfd_mmap:                              Miscellaneous.      (line  484)
+* bfd_octets_per_byte:                   Architectures.      (line  725)
 * bfd_openr:                             Opening and Closing.
                                                              (line   37)
 * bfd_openr_iovec:                       Opening and Closing.
-                                                             (line   95)
+                                                             (line  104)
 * bfd_openr_next_archived_file:          Archives.           (line   83)
 * bfd_openstreamr:                       Opening and Closing.
-                                                             (line   82)
+                                                             (line   91)
 * 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_printable_arch_mach:               Architectures.      (line  713)
+* bfd_printable_name:                    Architectures.      (line  573)
 * bfd_print_symbol_vandf:                symbol handling functions.
                                                              (line   73)
-* bfd_put_size:                          Internal.           (line   21)
+* bfd_put_size:                          Internal.           (line   87)
+* bfd_realloc:                           Internal.           (line   23)
+* bfd_realloc_or_free:                   Internal.           (line   43)
 * BFD_RELOC_12_PCREL:                    howto manager.      (line   37)
 * BFD_RELOC_14:                          howto manager.      (line   30)
 * BFD_RELOC_16:                          howto manager.      (line   29)
@@ -12264,61 +12408,61 @@ 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_390_12:                      howto manager.      (line 1963)
+* BFD_RELOC_390_20:                      howto manager.      (line 2044)
+* BFD_RELOC_390_COPY:                    howto manager.      (line 1969)
+* BFD_RELOC_390_GLOB_DAT:                howto manager.      (line 1971)
+* BFD_RELOC_390_GOT12:                   howto manager.      (line 1965)
+* BFD_RELOC_390_GOT16:                   howto manager.      (line 1979)
+* BFD_RELOC_390_GOT20:                   howto manager.      (line 2045)
+* BFD_RELOC_390_GOT64:                   howto manager.      (line 1999)
+* BFD_RELOC_390_GOTENT:                  howto manager.      (line 2003)
+* BFD_RELOC_390_GOTOFF64:                howto manager.      (line 2005)
+* BFD_RELOC_390_GOTPC:                   howto manager.      (line 1977)
+* BFD_RELOC_390_GOTPCDBL:                howto manager.      (line 1997)
+* BFD_RELOC_390_GOTPLT12:                howto manager.      (line 2007)
+* BFD_RELOC_390_GOTPLT16:                howto manager.      (line 2009)
+* BFD_RELOC_390_GOTPLT20:                howto manager.      (line 2046)
+* BFD_RELOC_390_GOTPLT32:                howto manager.      (line 2011)
+* BFD_RELOC_390_GOTPLT64:                howto manager.      (line 2013)
+* BFD_RELOC_390_GOTPLTENT:               howto manager.      (line 2015)
+* BFD_RELOC_390_IRELATIVE:               howto manager.      (line 2049)
+* BFD_RELOC_390_JMP_SLOT:                howto manager.      (line 1973)
+* BFD_RELOC_390_PC12DBL:                 howto manager.      (line 1981)
+* BFD_RELOC_390_PC16DBL:                 howto manager.      (line 1985)
+* BFD_RELOC_390_PC24DBL:                 howto manager.      (line 1989)
+* BFD_RELOC_390_PC32DBL:                 howto manager.      (line 1993)
+* BFD_RELOC_390_PLT12DBL:                howto manager.      (line 1983)
+* BFD_RELOC_390_PLT16DBL:                howto manager.      (line 1987)
+* BFD_RELOC_390_PLT24DBL:                howto manager.      (line 1991)
+* BFD_RELOC_390_PLT32:                   howto manager.      (line 1967)
+* BFD_RELOC_390_PLT32DBL:                howto manager.      (line 1995)
+* BFD_RELOC_390_PLT64:                   howto manager.      (line 2001)
+* BFD_RELOC_390_PLTOFF16:                howto manager.      (line 2017)
+* BFD_RELOC_390_PLTOFF32:                howto manager.      (line 2019)
+* BFD_RELOC_390_PLTOFF64:                howto manager.      (line 2021)
+* BFD_RELOC_390_RELATIVE:                howto manager.      (line 1975)
+* BFD_RELOC_390_TLS_DTPMOD:              howto manager.      (line 2040)
+* BFD_RELOC_390_TLS_DTPOFF:              howto manager.      (line 2041)
+* BFD_RELOC_390_TLS_GD32:                howto manager.      (line 2026)
+* BFD_RELOC_390_TLS_GD64:                howto manager.      (line 2027)
+* BFD_RELOC_390_TLS_GDCALL:              howto manager.      (line 2024)
+* BFD_RELOC_390_TLS_GOTIE12:             howto manager.      (line 2028)
+* BFD_RELOC_390_TLS_GOTIE20:             howto manager.      (line 2047)
+* BFD_RELOC_390_TLS_GOTIE32:             howto manager.      (line 2029)
+* BFD_RELOC_390_TLS_GOTIE64:             howto manager.      (line 2030)
+* BFD_RELOC_390_TLS_IE32:                howto manager.      (line 2033)
+* BFD_RELOC_390_TLS_IE64:                howto manager.      (line 2034)
+* BFD_RELOC_390_TLS_IEENT:               howto manager.      (line 2035)
+* BFD_RELOC_390_TLS_LDCALL:              howto manager.      (line 2025)
+* BFD_RELOC_390_TLS_LDM32:               howto manager.      (line 2031)
+* BFD_RELOC_390_TLS_LDM64:               howto manager.      (line 2032)
+* BFD_RELOC_390_TLS_LDO32:               howto manager.      (line 2038)
+* BFD_RELOC_390_TLS_LDO64:               howto manager.      (line 2039)
+* BFD_RELOC_390_TLS_LE32:                howto manager.      (line 2036)
+* BFD_RELOC_390_TLS_LE64:                howto manager.      (line 2037)
+* BFD_RELOC_390_TLS_LOAD:                howto manager.      (line 2023)
+* BFD_RELOC_390_TLS_TPOFF:               howto manager.      (line 2042)
 * BFD_RELOC_64:                          howto manager.      (line   25)
 * BFD_RELOC_64_PCREL:                    howto manager.      (line   33)
 * BFD_RELOC_64_PLTOFF:                   howto manager.      (line   59)
@@ -12349,151 +12493,151 @@ BFD Index
 * BFD_RELOC_8_PCREL:                     howto manager.      (line   38)
 * 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 2808)
+* BFD_RELOC_AARCH64_16_PCREL:            howto manager.      (line 2814)
+* BFD_RELOC_AARCH64_32:                  howto manager.      (line 2807)
+* BFD_RELOC_AARCH64_32_PCREL:            howto manager.      (line 2813)
+* BFD_RELOC_AARCH64_64:                  howto manager.      (line 2806)
+* BFD_RELOC_AARCH64_64_PCREL:            howto manager.      (line 2812)
+* BFD_RELOC_AARCH64_ADD_LO12:            howto manager.      (line 2887)
+* BFD_RELOC_AARCH64_ADR_GOT_PAGE:        howto manager.      (line 2933)
+* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL:   howto manager.      (line 2883)
+* BFD_RELOC_AARCH64_ADR_HI21_PCREL:      howto manager.      (line 2880)
+* BFD_RELOC_AARCH64_ADR_LO21_PCREL:      howto manager.      (line 2877)
+* BFD_RELOC_AARCH64_BRANCH19:            howto manager.      (line 2899)
+* BFD_RELOC_AARCH64_CALL26:              howto manager.      (line 2907)
+* BFD_RELOC_AARCH64_COPY:                howto manager.      (line 3100)
+* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP:  howto manager.      (line 3124)
+* BFD_RELOC_AARCH64_GLOB_DAT:            howto manager.      (line 3102)
+* BFD_RELOC_AARCH64_GOT_LD_PREL19:       howto manager.      (line 2927)
+* BFD_RELOC_AARCH64_IRELATIVE:           howto manager.      (line 3116)
+* BFD_RELOC_AARCH64_JUMP26:              howto manager.      (line 2903)
+* BFD_RELOC_AARCH64_JUMP_SLOT:           howto manager.      (line 3104)
+* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14:   howto manager.      (line 2954)
+* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC:    howto manager.      (line 2941)
+* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15:    howto manager.      (line 2951)
+* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15:   howto manager.      (line 2957)
+* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC:    howto manager.      (line 2937)
+* BFD_RELOC_AARCH64_LDST128_LO12:        howto manager.      (line 2923)
+* BFD_RELOC_AARCH64_LDST16_LO12:         howto manager.      (line 2911)
+* BFD_RELOC_AARCH64_LDST32_LO12:         howto manager.      (line 2915)
+* BFD_RELOC_AARCH64_LDST64_LO12:         howto manager.      (line 2919)
+* BFD_RELOC_AARCH64_LDST8_LO12:          howto manager.      (line 2891)
+* BFD_RELOC_AARCH64_LDST_LO12:           howto manager.      (line 3127)
+* BFD_RELOC_AARCH64_LD_GOT_LO12_NC:      howto manager.      (line 3145)
+* BFD_RELOC_AARCH64_LD_LO19_PCREL:       howto manager.      (line 2873)
+* BFD_RELOC_AARCH64_MOVW_G0:             howto manager.      (line 2817)
+* BFD_RELOC_AARCH64_MOVW_G0_NC:          howto manager.      (line 2820)
+* BFD_RELOC_AARCH64_MOVW_G0_S:           howto manager.      (line 2838)
+* BFD_RELOC_AARCH64_MOVW_G1:             howto manager.      (line 2823)
+* BFD_RELOC_AARCH64_MOVW_G1_NC:          howto manager.      (line 2826)
+* BFD_RELOC_AARCH64_MOVW_G1_S:           howto manager.      (line 2842)
+* BFD_RELOC_AARCH64_MOVW_G2:             howto manager.      (line 2829)
+* BFD_RELOC_AARCH64_MOVW_G2_NC:          howto manager.      (line 2832)
+* BFD_RELOC_AARCH64_MOVW_G2_S:           howto manager.      (line 2846)
+* BFD_RELOC_AARCH64_MOVW_G3:             howto manager.      (line 2835)
+* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC:   howto manager.      (line 2945)
+* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1:      howto manager.      (line 2948)
+* BFD_RELOC_AARCH64_MOVW_PREL_G0:        howto manager.      (line 2850)
+* BFD_RELOC_AARCH64_MOVW_PREL_G0_NC:     howto manager.      (line 2854)
+* BFD_RELOC_AARCH64_MOVW_PREL_G1:        howto manager.      (line 2858)
+* BFD_RELOC_AARCH64_MOVW_PREL_G1_NC:     howto manager.      (line 2861)
+* BFD_RELOC_AARCH64_MOVW_PREL_G2:        howto manager.      (line 2864)
+* BFD_RELOC_AARCH64_MOVW_PREL_G2_NC:     howto manager.      (line 2867)
+* BFD_RELOC_AARCH64_MOVW_PREL_G3:        howto manager.      (line 2870)
+* BFD_RELOC_AARCH64_NONE:                howto manager.      (line 2804)
+* BFD_RELOC_AARCH64_NULL:                howto manager.      (line 2802)
+* BFD_RELOC_AARCH64_RELATIVE:            howto manager.      (line 3106)
+* BFD_RELOC_AARCH64_RELOC_END:           howto manager.      (line 3118)
+* BFD_RELOC_AARCH64_RELOC_START:         howto manager.      (line 2797)
+* BFD_RELOC_AARCH64_TLSDESC:             howto manager.      (line 3114)
+* BFD_RELOC_AARCH64_TLSDESC_ADD:         howto manager.      (line 3096)
+* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12:    howto manager.      (line 3088)
+* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21:  howto manager.      (line 3082)
+* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21:  howto manager.      (line 3080)
+* BFD_RELOC_AARCH64_TLSDESC_CALL:        howto manager.      (line 3098)
+* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager.     (line 3086)
+* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12:   howto manager.      (line 3084)
+* BFD_RELOC_AARCH64_TLSDESC_LDR:         howto manager.      (line 3094)
+* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC:  howto manager.      (line 3151)
+* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19:   howto manager.      (line 3078)
+* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC:   howto manager.      (line 3092)
+* BFD_RELOC_AARCH64_TLSDESC_OFF_G1:      howto manager.      (line 3090)
+* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:   howto manager.      (line 2967)
+* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21:    howto manager.      (line 2960)
+* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21:    howto manager.      (line 2965)
+* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC:    howto manager.      (line 2971)
+* BFD_RELOC_AARCH64_TLSGD_MOVW_G1:       howto manager.      (line 2973)
 * BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: howto manager.
-                                                             (line 2928)
+                                                             (line 2975)
 * BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: howto manager.
-                                                             (line 2932)
+                                                             (line 2979)
 * BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: howto manager.
-                                                             (line 2930)
+                                                             (line 2977)
 * BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC: howto manager.
-                                                             (line 3101)
-* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2934)
+                                                             (line 3148)
+* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2981)
 * 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 2983)
+* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager.   (line 2985)
+* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager.    (line 2987)
+* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager.    (line 2989)
+* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 2991)
+* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC:   howto manager.      (line 2994)
+* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21:    howto manager.      (line 2998)
+* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:    howto manager.      (line 3001)
+* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 3004)
 * BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC: howto manager.
-                                                             (line 2960)
-* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 2963)
+                                                             (line 3007)
+* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 3010)
 * BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC: howto manager.
-                                                             (line 2966)
-* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 2969)
+                                                             (line 3013)
+* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 3016)
 * BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC: howto manager.
-                                                             (line 2972)
-* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager.  (line 2975)
+                                                             (line 3019)
+* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager.  (line 3022)
 * BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC: howto manager.
-                                                             (line 2978)
-* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager.   (line 3084)
+                                                             (line 3025)
+* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager.   (line 3131)
 * 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 3135)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager.     (line 3028)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager.  (line 3030)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager.     (line 3032)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager.  (line 3034)
+* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager.     (line 3036)
+* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager.     (line 3048)
+* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager.     (line 3050)
+* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager.  (line 3052)
+* BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12: howto manager.  (line 3054)
 * BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC: howto manager.
-                                                             (line 3010)
-* BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12: howto manager.  (line 3013)
+                                                             (line 3057)
+* BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12: howto manager.  (line 3060)
 * BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC: howto manager.
-                                                             (line 3016)
-* BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12: howto manager.  (line 3019)
+                                                             (line 3063)
+* BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12: howto manager.  (line 3066)
 * BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC: howto manager.
-                                                             (line 3022)
-* BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12: howto manager.   (line 3025)
+                                                             (line 3069)
+* BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12: howto manager.   (line 3072)
 * 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 3075)
+* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12: howto manager.    (line 3138)
+* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC: howto manager. (line 3142)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager.      (line 3044)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager.   (line 3046)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager.      (line 3040)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager.   (line 3042)
+* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager.      (line 3038)
+* BFD_RELOC_AARCH64_TLS_DTPMOD:          howto manager.      (line 3108)
+* BFD_RELOC_AARCH64_TLS_DTPREL:          howto manager.      (line 3110)
+* BFD_RELOC_AARCH64_TLS_TPREL:           howto manager.      (line 3112)
+* BFD_RELOC_AARCH64_TSTBR14:             howto manager.      (line 2895)
+* BFD_RELOC_AC_SECTOFF_S9:               howto manager.      (line 1075)
+* BFD_RELOC_AC_SECTOFF_S9_1:             howto manager.      (line 1076)
+* BFD_RELOC_AC_SECTOFF_S9_2:             howto manager.      (line 1077)
+* BFD_RELOC_AC_SECTOFF_U8:               howto manager.      (line 1072)
+* BFD_RELOC_AC_SECTOFF_U8_1:             howto manager.      (line 1073)
+* BFD_RELOC_AC_SECTOFF_U8_2:             howto manager.      (line 1074)
 * 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 +12667,462 @@ 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_ARC_16:                      howto manager.      (line 1044)
+* BFD_RELOC_ARC_24:                      howto manager.      (line 1045)
+* BFD_RELOC_ARC_32:                      howto manager.      (line 1046)
+* BFD_RELOC_ARC_32_ME:                   howto manager.      (line 1066)
+* BFD_RELOC_ARC_32_ME_S:                 howto manager.      (line 1067)
+* BFD_RELOC_ARC_32_PCREL:                howto manager.      (line 1084)
+* BFD_RELOC_ARC_8:                       howto manager.      (line 1043)
+* BFD_RELOC_ARC_COPY:                    howto manager.      (line 1089)
+* BFD_RELOC_ARC_GLOB_DAT:                howto manager.      (line 1090)
+* BFD_RELOC_ARC_GOT32:                   howto manager.      (line 1086)
+* BFD_RELOC_ARC_GOTOFF:                  howto manager.      (line 1093)
+* BFD_RELOC_ARC_GOTPC:                   howto manager.      (line 1094)
+* BFD_RELOC_ARC_GOTPC32:                 howto manager.      (line 1087)
+* BFD_RELOC_ARC_JLI_SECTOFF:             howto manager.      (line 1110)
+* BFD_RELOC_ARC_JMP_SLOT:                howto manager.      (line 1091)
+* BFD_RELOC_ARC_N16:                     howto manager.      (line 1048)
+* BFD_RELOC_ARC_N24:                     howto manager.      (line 1049)
+* BFD_RELOC_ARC_N32:                     howto manager.      (line 1050)
+* BFD_RELOC_ARC_N32_ME:                  howto manager.      (line 1068)
+* BFD_RELOC_ARC_N8:                      howto manager.      (line 1047)
+* BFD_RELOC_ARC_NONE:                    howto manager.      (line 1042)
+* BFD_RELOC_ARC_NPS_CMEM16:              howto manager.      (line 1109)
+* BFD_RELOC_ARC_PC32:                    howto manager.      (line 1085)
+* BFD_RELOC_ARC_PLT32:                   howto manager.      (line 1088)
+* BFD_RELOC_ARC_RELATIVE:                howto manager.      (line 1092)
+* BFD_RELOC_ARC_S13_PCREL:               howto manager.      (line 1064)
+* BFD_RELOC_ARC_S21H_PCREL:              howto manager.      (line 1053)
+* BFD_RELOC_ARC_S21H_PCREL_PLT:          howto manager.      (line 1108)
+* BFD_RELOC_ARC_S21W_PCREL:              howto manager.      (line 1054)
+* BFD_RELOC_ARC_S21W_PCREL_PLT:          howto manager.      (line 1095)
+* BFD_RELOC_ARC_S25H_PCREL:              howto manager.      (line 1055)
+* BFD_RELOC_ARC_S25H_PCREL_PLT:          howto manager.      (line 1096)
+* BFD_RELOC_ARC_S25W_PCREL:              howto manager.      (line 1056)
+* BFD_RELOC_ARC_S25W_PCREL_PLT:          howto manager.      (line 1107)
+* BFD_RELOC_ARC_SDA:                     howto manager.      (line 1051)
+* BFD_RELOC_ARC_SDA16_LD:                howto manager.      (line 1061)
+* BFD_RELOC_ARC_SDA16_LD1:               howto manager.      (line 1062)
+* BFD_RELOC_ARC_SDA16_LD2:               howto manager.      (line 1063)
+* BFD_RELOC_ARC_SDA16_ST2:               howto manager.      (line 1083)
+* BFD_RELOC_ARC_SDA32:                   howto manager.      (line 1057)
+* BFD_RELOC_ARC_SDA32_ME:                howto manager.      (line 1070)
+* BFD_RELOC_ARC_SDA_12:                  howto manager.      (line 1082)
+* BFD_RELOC_ARC_SDA_LDST:                howto manager.      (line 1058)
+* BFD_RELOC_ARC_SDA_LDST1:               howto manager.      (line 1059)
+* BFD_RELOC_ARC_SDA_LDST2:               howto manager.      (line 1060)
+* BFD_RELOC_ARC_SECTOFF:                 howto manager.      (line 1052)
+* BFD_RELOC_ARC_SECTOFF_1:               howto manager.      (line 1080)
+* BFD_RELOC_ARC_SECTOFF_2:               howto manager.      (line 1081)
+* BFD_RELOC_ARC_SECTOFF_ME:              howto manager.      (line 1069)
+* BFD_RELOC_ARC_SECTOFF_ME_1:            howto manager.      (line 1078)
+* BFD_RELOC_ARC_SECTOFF_ME_2:            howto manager.      (line 1079)
+* BFD_RELOC_ARC_TLS_DTPMOD:              howto manager.      (line 1097)
+* BFD_RELOC_ARC_TLS_DTPOFF:              howto manager.      (line 1103)
+* BFD_RELOC_ARC_TLS_DTPOFF_S9:           howto manager.      (line 1104)
+* BFD_RELOC_ARC_TLS_GD_CALL:             howto manager.      (line 1101)
+* BFD_RELOC_ARC_TLS_GD_GOT:              howto manager.      (line 1099)
+* BFD_RELOC_ARC_TLS_GD_LD:               howto manager.      (line 1100)
+* BFD_RELOC_ARC_TLS_IE_GOT:              howto manager.      (line 1102)
+* BFD_RELOC_ARC_TLS_LE_32:               howto manager.      (line 1106)
+* BFD_RELOC_ARC_TLS_LE_S9:               howto manager.      (line 1105)
+* BFD_RELOC_ARC_TLS_TPOFF:               howto manager.      (line 1098)
+* BFD_RELOC_ARC_W:                       howto manager.      (line 1065)
+* BFD_RELOC_ARC_W_ME:                    howto manager.      (line 1071)
+* BFD_RELOC_ARM_ADRL_IMMEDIATE:          howto manager.      (line  915)
+* BFD_RELOC_ARM_ADR_IMM:                 howto manager.      (line  930)
+* BFD_RELOC_ARM_ALU_PC_G0:               howto manager.      (line  877)
+* BFD_RELOC_ARM_ALU_PC_G0_NC:            howto manager.      (line  876)
+* BFD_RELOC_ARM_ALU_PC_G1:               howto manager.      (line  879)
+* BFD_RELOC_ARM_ALU_PC_G1_NC:            howto manager.      (line  878)
+* BFD_RELOC_ARM_ALU_PC_G2:               howto manager.      (line  880)
+* BFD_RELOC_ARM_ALU_SB_G0:               howto manager.      (line  891)
+* BFD_RELOC_ARM_ALU_SB_G0_NC:            howto manager.      (line  890)
+* BFD_RELOC_ARM_ALU_SB_G1:               howto manager.      (line  893)
+* BFD_RELOC_ARM_ALU_SB_G1_NC:            howto manager.      (line  892)
+* BFD_RELOC_ARM_ALU_SB_G2:               howto manager.      (line  894)
+* BFD_RELOC_ARM_CP_OFF_IMM:              howto manager.      (line  925)
+* BFD_RELOC_ARM_CP_OFF_IMM_S2:           howto manager.      (line  926)
+* BFD_RELOC_ARM_FUNCDESC:                howto manager.      (line  846)
+* BFD_RELOC_ARM_FUNCDESC_VALUE:          howto manager.      (line  847)
+* BFD_RELOC_ARM_GLOB_DAT:                howto manager.      (line  853)
+* BFD_RELOC_ARM_GOT32:                   howto manager.      (line  854)
+* BFD_RELOC_ARM_GOTFUNCDESC:             howto manager.      (line  844)
+* BFD_RELOC_ARM_GOTOFF:                  howto manager.      (line  857)
+* BFD_RELOC_ARM_GOTOFFFUNCDESC:          howto manager.      (line  845)
+* BFD_RELOC_ARM_GOTPC:                   howto manager.      (line  858)
+* BFD_RELOC_ARM_GOT_PREL:                howto manager.      (line  859)
+* BFD_RELOC_ARM_HVC:                     howto manager.      (line  922)
+* BFD_RELOC_ARM_HWLITERAL:               howto manager.      (line  937)
+* BFD_RELOC_ARM_IMMEDIATE:               howto manager.      (line  914)
+* BFD_RELOC_ARM_IN_POOL:                 howto manager.      (line  933)
+* BFD_RELOC_ARM_IRELATIVE:               howto manager.      (line  907)
+* BFD_RELOC_ARM_JUMP_SLOT:               howto manager.      (line  852)
+* BFD_RELOC_ARM_LDC_PC_G0:               howto manager.      (line  887)
+* BFD_RELOC_ARM_LDC_PC_G1:               howto manager.      (line  888)
+* BFD_RELOC_ARM_LDC_PC_G2:               howto manager.      (line  889)
+* BFD_RELOC_ARM_LDC_SB_G0:               howto manager.      (line  901)
+* BFD_RELOC_ARM_LDC_SB_G1:               howto manager.      (line  902)
+* BFD_RELOC_ARM_LDC_SB_G2:               howto manager.      (line  903)
+* BFD_RELOC_ARM_LDRS_PC_G0:              howto manager.      (line  884)
+* BFD_RELOC_ARM_LDRS_PC_G1:              howto manager.      (line  885)
+* BFD_RELOC_ARM_LDRS_PC_G2:              howto manager.      (line  886)
+* BFD_RELOC_ARM_LDRS_SB_G0:              howto manager.      (line  898)
+* BFD_RELOC_ARM_LDRS_SB_G1:              howto manager.      (line  899)
+* BFD_RELOC_ARM_LDRS_SB_G2:              howto manager.      (line  900)
+* BFD_RELOC_ARM_LDR_IMM:                 howto manager.      (line  931)
+* BFD_RELOC_ARM_LDR_PC_G0:               howto manager.      (line  881)
+* BFD_RELOC_ARM_LDR_PC_G1:               howto manager.      (line  882)
+* BFD_RELOC_ARM_LDR_PC_G2:               howto manager.      (line  883)
+* BFD_RELOC_ARM_LDR_SB_G0:               howto manager.      (line  895)
+* BFD_RELOC_ARM_LDR_SB_G1:               howto manager.      (line  896)
+* BFD_RELOC_ARM_LDR_SB_G2:               howto manager.      (line  897)
+* BFD_RELOC_ARM_LITERAL:                 howto manager.      (line  932)
+* BFD_RELOC_ARM_MOVT:                    howto manager.      (line  836)
+* BFD_RELOC_ARM_MOVT_PCREL:              howto manager.      (line  838)
+* BFD_RELOC_ARM_MOVW:                    howto manager.      (line  835)
+* BFD_RELOC_ARM_MOVW_PCREL:              howto manager.      (line  837)
+* BFD_RELOC_ARM_MULTI:                   howto manager.      (line  924)
+* BFD_RELOC_ARM_OFFSET_IMM:              howto manager.      (line  816)
+* BFD_RELOC_ARM_OFFSET_IMM8:             howto manager.      (line  934)
+* BFD_RELOC_ARM_PCREL_BLX:               howto manager.      (line  780)
+* BFD_RELOC_ARM_PCREL_BRANCH:            howto manager.      (line  777)
+* BFD_RELOC_ARM_PCREL_CALL:              howto manager.      (line  788)
+* BFD_RELOC_ARM_PCREL_JUMP:              howto manager.      (line  791)
+* BFD_RELOC_ARM_PLT32:                   howto manager.      (line  855)
+* BFD_RELOC_ARM_PREL31:                  howto manager.      (line  833)
+* BFD_RELOC_ARM_RELATIVE:                howto manager.      (line  856)
+* BFD_RELOC_ARM_ROSEGREL32:              howto manager.      (line  825)
+* BFD_RELOC_ARM_SBREL32:                 howto manager.      (line  827)
+* BFD_RELOC_ARM_SHIFT_IMM:               howto manager.      (line  920)
+* BFD_RELOC_ARM_SMC:                     howto manager.      (line  921)
+* BFD_RELOC_ARM_SWI:                     howto manager.      (line  923)
+* BFD_RELOC_ARM_T32_ADD_IMM:             howto manager.      (line  917)
+* BFD_RELOC_ARM_T32_ADD_PC12:            howto manager.      (line  919)
+* BFD_RELOC_ARM_T32_CP_OFF_IMM:          howto manager.      (line  927)
+* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2:       howto manager.      (line  928)
+* BFD_RELOC_ARM_T32_IMM12:               howto manager.      (line  918)
+* BFD_RELOC_ARM_T32_IMMEDIATE:           howto manager.      (line  916)
+* BFD_RELOC_ARM_T32_OFFSET_IMM:          howto manager.      (line  936)
+* BFD_RELOC_ARM_T32_OFFSET_U8:           howto manager.      (line  935)
+* BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM:   howto manager.      (line  929)
+* BFD_RELOC_ARM_TARGET1:                 howto manager.      (line  822)
+* BFD_RELOC_ARM_TARGET2:                 howto manager.      (line  829)
+* BFD_RELOC_ARM_THM_TLS_CALL:            howto manager.      (line  871)
+* BFD_RELOC_ARM_THM_TLS_DESCSEQ:         howto manager.      (line  873)
+* BFD_RELOC_ARM_THUMB_ADD:               howto manager.      (line  938)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC:     howto manager.      (line  909)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC:     howto manager.      (line  910)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC:     howto manager.      (line  911)
+* BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC:     howto manager.      (line  912)
+* BFD_RELOC_ARM_THUMB_BF13:              howto manager.      (line  799)
+* BFD_RELOC_ARM_THUMB_BF17:              howto manager.      (line  797)
+* BFD_RELOC_ARM_THUMB_BF19:              howto manager.      (line  801)
+* BFD_RELOC_ARM_THUMB_IMM:               howto manager.      (line  939)
+* BFD_RELOC_ARM_THUMB_LOOP12:            howto manager.      (line  803)
+* BFD_RELOC_ARM_THUMB_MOVT:              howto manager.      (line  840)
+* BFD_RELOC_ARM_THUMB_MOVT_PCREL:        howto manager.      (line  842)
+* BFD_RELOC_ARM_THUMB_MOVW:              howto manager.      (line  839)
+* BFD_RELOC_ARM_THUMB_MOVW_PCREL:        howto manager.      (line  841)
+* BFD_RELOC_ARM_THUMB_OFFSET:            howto manager.      (line  819)
+* BFD_RELOC_ARM_THUMB_SHIFT:             howto manager.      (line  940)
+* BFD_RELOC_ARM_TLS_CALL:                howto manager.      (line  870)
+* BFD_RELOC_ARM_TLS_DESC:                howto manager.      (line  874)
+* BFD_RELOC_ARM_TLS_DESCSEQ:             howto manager.      (line  872)
+* BFD_RELOC_ARM_TLS_DTPMOD32:            howto manager.      (line  865)
+* BFD_RELOC_ARM_TLS_DTPOFF32:            howto manager.      (line  864)
+* BFD_RELOC_ARM_TLS_GD32:                howto manager.      (line  861)
+* BFD_RELOC_ARM_TLS_GD32_FDPIC:          howto manager.      (line  848)
+* BFD_RELOC_ARM_TLS_GOTDESC:             howto manager.      (line  869)
+* BFD_RELOC_ARM_TLS_IE32:                howto manager.      (line  867)
+* BFD_RELOC_ARM_TLS_IE32_FDPIC:          howto manager.      (line  850)
+* BFD_RELOC_ARM_TLS_LDM32:               howto manager.      (line  863)
+* BFD_RELOC_ARM_TLS_LDM32_FDPIC:         howto manager.      (line  849)
+* BFD_RELOC_ARM_TLS_LDO32:               howto manager.      (line  862)
+* BFD_RELOC_ARM_TLS_LE32:                howto manager.      (line  868)
+* BFD_RELOC_ARM_TLS_TPOFF32:             howto manager.      (line  866)
+* BFD_RELOC_ARM_V4BX:                    howto manager.      (line  905)
+* BFD_RELOC_AVR_13_PCREL:                howto manager.      (line 1747)
+* BFD_RELOC_AVR_16_PM:                   howto manager.      (line 1750)
+* BFD_RELOC_AVR_6:                       howto manager.      (line 1818)
+* BFD_RELOC_AVR_6_ADIW:                  howto manager.      (line 1821)
+* BFD_RELOC_AVR_7_PCREL:                 howto manager.      (line 1744)
+* BFD_RELOC_AVR_8_HI:                    howto manager.      (line 1827)
+* BFD_RELOC_AVR_8_HLO:                   howto manager.      (line 1830)
+* BFD_RELOC_AVR_8_LO:                    howto manager.      (line 1824)
+* BFD_RELOC_AVR_CALL:                    howto manager.      (line 1812)
+* BFD_RELOC_AVR_DIFF16:                  howto manager.      (line 1834)
+* BFD_RELOC_AVR_DIFF32:                  howto manager.      (line 1835)
+* BFD_RELOC_AVR_DIFF8:                   howto manager.      (line 1833)
+* BFD_RELOC_AVR_HH8_LDI:                 howto manager.      (line 1759)
+* BFD_RELOC_AVR_HH8_LDI_NEG:             howto manager.      (line 1774)
+* BFD_RELOC_AVR_HH8_LDI_PM:              howto manager.      (line 1797)
+* BFD_RELOC_AVR_HH8_LDI_PM_NEG:          howto manager.      (line 1808)
+* BFD_RELOC_AVR_HI8_LDI:                 howto manager.      (line 1756)
+* BFD_RELOC_AVR_HI8_LDI_GS:              howto manager.      (line 1792)
+* BFD_RELOC_AVR_HI8_LDI_NEG:             howto manager.      (line 1770)
+* BFD_RELOC_AVR_HI8_LDI_PM:              howto manager.      (line 1789)
+* BFD_RELOC_AVR_HI8_LDI_PM_NEG:          howto manager.      (line 1804)
+* BFD_RELOC_AVR_LDI:                     howto manager.      (line 1815)
+* BFD_RELOC_AVR_LDS_STS_16:              howto manager.      (line 1842)
+* BFD_RELOC_AVR_LO8_LDI:                 howto manager.      (line 1753)
+* BFD_RELOC_AVR_LO8_LDI_GS:              howto manager.      (line 1784)
+* BFD_RELOC_AVR_LO8_LDI_NEG:             howto manager.      (line 1766)
+* BFD_RELOC_AVR_LO8_LDI_PM:              howto manager.      (line 1781)
+* BFD_RELOC_AVR_LO8_LDI_PM_NEG:          howto manager.      (line 1801)
+* BFD_RELOC_AVR_MS8_LDI:                 howto manager.      (line 1763)
+* BFD_RELOC_AVR_MS8_LDI_NEG:             howto manager.      (line 1778)
+* BFD_RELOC_AVR_PORT5:                   howto manager.      (line 1848)
+* BFD_RELOC_AVR_PORT6:                   howto manager.      (line 1845)
+* BFD_RELOC_BFIN_10_PCREL:               howto manager.      (line 1122)
+* BFD_RELOC_BFIN_11_PCREL:               howto manager.      (line 1124)
+* BFD_RELOC_BFIN_12_PCREL_JUMP:          howto manager.      (line 1126)
+* BFD_RELOC_BFIN_12_PCREL_JUMP_S:        howto manager.      (line 1128)
+* BFD_RELOC_BFIN_16_HIGH:                howto manager.      (line 1114)
+* BFD_RELOC_BFIN_16_IMM:                 howto manager.      (line 1112)
+* BFD_RELOC_BFIN_16_LOW:                 howto manager.      (line 1120)
+* BFD_RELOC_BFIN_24_PCREL_CALL_X:        howto manager.      (line 1130)
+* BFD_RELOC_BFIN_24_PCREL_JUMP_L:        howto manager.      (line 1132)
+* BFD_RELOC_BFIN_4_PCREL:                howto manager.      (line 1116)
+* BFD_RELOC_BFIN_5_PCREL:                howto manager.      (line 1118)
+* BFD_RELOC_BFIN_FUNCDESC:               howto manager.      (line 1137)
+* BFD_RELOC_BFIN_FUNCDESC_GOT17M4:       howto manager.      (line 1138)
+* BFD_RELOC_BFIN_FUNCDESC_GOTHI:         howto manager.      (line 1139)
+* BFD_RELOC_BFIN_FUNCDESC_GOTLO:         howto manager.      (line 1140)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4:    howto manager.      (line 1142)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI:      howto manager.      (line 1143)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO:      howto manager.      (line 1144)
+* BFD_RELOC_BFIN_FUNCDESC_VALUE:         howto manager.      (line 1141)
+* BFD_RELOC_BFIN_GOT:                    howto manager.      (line 1149)
+* BFD_RELOC_BFIN_GOT17M4:                howto manager.      (line 1134)
+* BFD_RELOC_BFIN_GOTHI:                  howto manager.      (line 1135)
+* BFD_RELOC_BFIN_GOTLO:                  howto manager.      (line 1136)
+* BFD_RELOC_BFIN_GOTOFF17M4:             howto manager.      (line 1145)
+* BFD_RELOC_BFIN_GOTOFFHI:               howto manager.      (line 1146)
+* BFD_RELOC_BFIN_GOTOFFLO:               howto manager.      (line 1147)
+* BFD_RELOC_BFIN_PLTPC:                  howto manager.      (line 1151)
+* BFD_RELOC_BPF_16:                      howto manager.      (line 3346)
+* BFD_RELOC_BPF_32:                      howto manager.      (line 3345)
+* BFD_RELOC_BPF_64:                      howto manager.      (line 3344)
+* BFD_RELOC_BPF_DISP16:                  howto manager.      (line 3347)
+* BFD_RELOC_BPF_DISP32:                  howto manager.      (line 3348)
+* BFD_RELOC_C6000_ABS_H16:               howto manager.      (line 1589)
+* BFD_RELOC_C6000_ABS_L16:               howto manager.      (line 1588)
+* BFD_RELOC_C6000_ABS_S16:               howto manager.      (line 1587)
+* BFD_RELOC_C6000_ALIGN:                 howto manager.      (line 1610)
+* BFD_RELOC_C6000_COPY:                  howto manager.      (line 1605)
+* BFD_RELOC_C6000_DSBT_INDEX:            howto manager.      (line 1603)
+* BFD_RELOC_C6000_EHTYPE:                howto manager.      (line 1607)
+* BFD_RELOC_C6000_FPHEAD:                howto manager.      (line 1611)
+* BFD_RELOC_C6000_JUMP_SLOT:             howto manager.      (line 1606)
+* BFD_RELOC_C6000_NOCMP:                 howto manager.      (line 1612)
+* BFD_RELOC_C6000_PCR_H16:               howto manager.      (line 1608)
+* BFD_RELOC_C6000_PCR_L16:               howto manager.      (line 1609)
+* BFD_RELOC_C6000_PCR_S10:               howto manager.      (line 1585)
+* BFD_RELOC_C6000_PCR_S12:               howto manager.      (line 1584)
+* BFD_RELOC_C6000_PCR_S21:               howto manager.      (line 1583)
+* BFD_RELOC_C6000_PCR_S7:                howto manager.      (line 1586)
+* BFD_RELOC_C6000_PREL31:                howto manager.      (line 1604)
+* BFD_RELOC_C6000_SBR_GOT_H16_W:         howto manager.      (line 1602)
+* BFD_RELOC_C6000_SBR_GOT_L16_W:         howto manager.      (line 1601)
+* BFD_RELOC_C6000_SBR_GOT_U15_W:         howto manager.      (line 1600)
+* BFD_RELOC_C6000_SBR_H16_B:             howto manager.      (line 1597)
+* BFD_RELOC_C6000_SBR_H16_H:             howto manager.      (line 1598)
+* BFD_RELOC_C6000_SBR_H16_W:             howto manager.      (line 1599)
+* BFD_RELOC_C6000_SBR_L16_B:             howto manager.      (line 1594)
+* BFD_RELOC_C6000_SBR_L16_H:             howto manager.      (line 1595)
+* BFD_RELOC_C6000_SBR_L16_W:             howto manager.      (line 1596)
+* BFD_RELOC_C6000_SBR_S16:               howto manager.      (line 1593)
+* BFD_RELOC_C6000_SBR_U15_B:             howto manager.      (line 1590)
+* BFD_RELOC_C6000_SBR_U15_H:             howto manager.      (line 1591)
+* BFD_RELOC_C6000_SBR_U15_W:             howto manager.      (line 1592)
+* BFD_RELOC_CKCORE_ADDR32:               howto manager.      (line 3385)
+* BFD_RELOC_CKCORE_ADDRGOT:              howto manager.      (line 3401)
+* BFD_RELOC_CKCORE_ADDRGOT_HI16:         howto manager.      (line 3420)
+* BFD_RELOC_CKCORE_ADDRGOT_LO16:         howto manager.      (line 3421)
+* BFD_RELOC_CKCORE_ADDRPLT:              howto manager.      (line 3402)
+* BFD_RELOC_CKCORE_ADDRPLT_HI16:         howto manager.      (line 3422)
+* BFD_RELOC_CKCORE_ADDRPLT_LO16:         howto manager.      (line 3423)
+* BFD_RELOC_CKCORE_ADDR_HI16:            howto manager.      (line 3408)
+* BFD_RELOC_CKCORE_ADDR_LO16:            howto manager.      (line 3409)
+* BFD_RELOC_CKCORE_CALLGRAPH:            howto manager.      (line 3445)
+* BFD_RELOC_CKCORE_COPY:                 howto manager.      (line 3394)
+* BFD_RELOC_CKCORE_DOFFSET_IMM18:        howto manager.      (line 3428)
+* BFD_RELOC_CKCORE_DOFFSET_IMM18BY2:     howto manager.      (line 3429)
+* BFD_RELOC_CKCORE_DOFFSET_IMM18BY4:     howto manager.      (line 3430)
+* BFD_RELOC_CKCORE_DOFFSET_LO16:         howto manager.      (line 3426)
+* BFD_RELOC_CKCORE_GLOB_DAT:             howto manager.      (line 3395)
+* BFD_RELOC_CKCORE_GNU_VTENTRY:          howto manager.      (line 3392)
+* BFD_RELOC_CKCORE_GNU_VTINHERIT:        howto manager.      (line 3391)
+* BFD_RELOC_CKCORE_GOT12:                howto manager.      (line 3414)
+* BFD_RELOC_CKCORE_GOT32:                howto manager.      (line 3399)
+* BFD_RELOC_CKCORE_GOTOFF:               howto manager.      (line 3397)
+* BFD_RELOC_CKCORE_GOTOFF_HI16:          howto manager.      (line 3412)
+* BFD_RELOC_CKCORE_GOTOFF_IMM18:         howto manager.      (line 3431)
+* BFD_RELOC_CKCORE_GOTOFF_LO16:          howto manager.      (line 3413)
+* BFD_RELOC_CKCORE_GOTPC:                howto manager.      (line 3398)
+* BFD_RELOC_CKCORE_GOTPC_HI16:           howto manager.      (line 3410)
+* BFD_RELOC_CKCORE_GOTPC_LO16:           howto manager.      (line 3411)
+* BFD_RELOC_CKCORE_GOT_HI16:             howto manager.      (line 3415)
+* BFD_RELOC_CKCORE_GOT_IMM18BY4:         howto manager.      (line 3432)
+* BFD_RELOC_CKCORE_GOT_LO16:             howto manager.      (line 3416)
+* BFD_RELOC_CKCORE_IRELATIVE:            howto manager.      (line 3446)
+* BFD_RELOC_CKCORE_JUMP_SLOT:            howto manager.      (line 3396)
+* BFD_RELOC_CKCORE_NOJSRI:               howto manager.      (line 3444)
+* BFD_RELOC_CKCORE_NONE:                 howto manager.      (line 3384)
+* BFD_RELOC_CKCORE_PCREL32:              howto manager.      (line 3389)
+* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4: howto manager.      (line 3448)
+* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4:  howto manager.      (line 3447)
+* BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4:   howto manager.      (line 3443)
+* BFD_RELOC_CKCORE_PCREL_IMM10BY2:       howto manager.      (line 3406)
+* BFD_RELOC_CKCORE_PCREL_IMM10BY4:       howto manager.      (line 3407)
+* BFD_RELOC_CKCORE_PCREL_IMM11BY2:       howto manager.      (line 3387)
+* BFD_RELOC_CKCORE_PCREL_IMM16BY2:       howto manager.      (line 3404)
+* BFD_RELOC_CKCORE_PCREL_IMM16BY4:       howto manager.      (line 3405)
+* BFD_RELOC_CKCORE_PCREL_IMM18BY2:       howto manager.      (line 3427)
+* BFD_RELOC_CKCORE_PCREL_IMM26BY2:       howto manager.      (line 3403)
+* BFD_RELOC_CKCORE_PCREL_IMM4BY2:        howto manager.      (line 3388)
+* BFD_RELOC_CKCORE_PCREL_IMM7BY4:        howto manager.      (line 3434)
+* BFD_RELOC_CKCORE_PCREL_IMM8BY4:        howto manager.      (line 3386)
+* BFD_RELOC_CKCORE_PCREL_JSR_IMM11BY2:   howto manager.      (line 3390)
+* BFD_RELOC_CKCORE_PCREL_JSR_IMM26BY2:   howto manager.      (line 3424)
+* BFD_RELOC_CKCORE_PLT12:                howto manager.      (line 3417)
+* BFD_RELOC_CKCORE_PLT32:                howto manager.      (line 3400)
+* BFD_RELOC_CKCORE_PLT_HI16:             howto manager.      (line 3418)
+* BFD_RELOC_CKCORE_PLT_IMM18BY4:         howto manager.      (line 3433)
+* BFD_RELOC_CKCORE_PLT_LO16:             howto manager.      (line 3419)
+* BFD_RELOC_CKCORE_RELATIVE:             howto manager.      (line 3393)
+* BFD_RELOC_CKCORE_TLS_DTPMOD32:         howto manager.      (line 3440)
+* BFD_RELOC_CKCORE_TLS_DTPOFF32:         howto manager.      (line 3441)
+* BFD_RELOC_CKCORE_TLS_GD32:             howto manager.      (line 3437)
+* BFD_RELOC_CKCORE_TLS_IE32:             howto manager.      (line 3436)
+* BFD_RELOC_CKCORE_TLS_LDM32:            howto manager.      (line 3438)
+* BFD_RELOC_CKCORE_TLS_LDO32:            howto manager.      (line 3439)
+* BFD_RELOC_CKCORE_TLS_LE32:             howto manager.      (line 3435)
+* BFD_RELOC_CKCORE_TLS_TPOFF32:          howto manager.      (line 3442)
+* BFD_RELOC_CKCORE_TOFFSET_LO16:         howto manager.      (line 3425)
 * 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_CR16_ABS20:                  howto manager.      (line 2289)
+* BFD_RELOC_CR16_ABS24:                  howto manager.      (line 2290)
+* BFD_RELOC_CR16_DISP16:                 howto manager.      (line 2300)
+* BFD_RELOC_CR16_DISP20:                 howto manager.      (line 2301)
+* BFD_RELOC_CR16_DISP24:                 howto manager.      (line 2302)
+* BFD_RELOC_CR16_DISP24a:                howto manager.      (line 2303)
+* BFD_RELOC_CR16_DISP4:                  howto manager.      (line 2298)
+* BFD_RELOC_CR16_DISP8:                  howto manager.      (line 2299)
+* BFD_RELOC_CR16_GLOB_DAT:               howto manager.      (line 2309)
+* BFD_RELOC_CR16_GOTC_REGREL20:          howto manager.      (line 2308)
+* BFD_RELOC_CR16_GOT_REGREL20:           howto manager.      (line 2307)
+* BFD_RELOC_CR16_IMM16:                  howto manager.      (line 2293)
+* BFD_RELOC_CR16_IMM20:                  howto manager.      (line 2294)
+* BFD_RELOC_CR16_IMM24:                  howto manager.      (line 2295)
+* BFD_RELOC_CR16_IMM32:                  howto manager.      (line 2296)
+* BFD_RELOC_CR16_IMM32a:                 howto manager.      (line 2297)
+* BFD_RELOC_CR16_IMM4:                   howto manager.      (line 2291)
+* BFD_RELOC_CR16_IMM8:                   howto manager.      (line 2292)
+* BFD_RELOC_CR16_NUM16:                  howto manager.      (line 2278)
+* BFD_RELOC_CR16_NUM32:                  howto manager.      (line 2279)
+* BFD_RELOC_CR16_NUM32a:                 howto manager.      (line 2280)
+* BFD_RELOC_CR16_NUM8:                   howto manager.      (line 2277)
+* BFD_RELOC_CR16_REGREL0:                howto manager.      (line 2281)
+* BFD_RELOC_CR16_REGREL14:               howto manager.      (line 2284)
+* BFD_RELOC_CR16_REGREL14a:              howto manager.      (line 2285)
+* BFD_RELOC_CR16_REGREL16:               howto manager.      (line 2286)
+* BFD_RELOC_CR16_REGREL20:               howto manager.      (line 2287)
+* BFD_RELOC_CR16_REGREL20a:              howto manager.      (line 2288)
+* BFD_RELOC_CR16_REGREL4:                howto manager.      (line 2282)
+* BFD_RELOC_CR16_REGREL4a:               howto manager.      (line 2283)
+* BFD_RELOC_CR16_SWITCH16:               howto manager.      (line 2305)
+* BFD_RELOC_CR16_SWITCH32:               howto manager.      (line 2306)
+* BFD_RELOC_CR16_SWITCH8:                howto manager.      (line 2304)
+* BFD_RELOC_CRIS_16_DTPREL:              howto manager.      (line 2369)
+* BFD_RELOC_CRIS_16_GOT:                 howto manager.      (line 2351)
+* BFD_RELOC_CRIS_16_GOTPLT:              howto manager.      (line 2355)
+* BFD_RELOC_CRIS_16_GOT_GD:              howto manager.      (line 2365)
+* BFD_RELOC_CRIS_16_GOT_TPREL:           howto manager.      (line 2371)
+* BFD_RELOC_CRIS_16_TPREL:               howto manager.      (line 2373)
+* BFD_RELOC_CRIS_32_DTPREL:              howto manager.      (line 2368)
+* BFD_RELOC_CRIS_32_GD:                  howto manager.      (line 2366)
+* BFD_RELOC_CRIS_32_GOT:                 howto manager.      (line 2349)
+* BFD_RELOC_CRIS_32_GOTPLT:              howto manager.      (line 2353)
+* BFD_RELOC_CRIS_32_GOTREL:              howto manager.      (line 2357)
+* BFD_RELOC_CRIS_32_GOT_GD:              howto manager.      (line 2364)
+* BFD_RELOC_CRIS_32_GOT_TPREL:           howto manager.      (line 2370)
+* BFD_RELOC_CRIS_32_IE:                  howto manager.      (line 2375)
+* BFD_RELOC_CRIS_32_PLT_GOTREL:          howto manager.      (line 2359)
+* BFD_RELOC_CRIS_32_PLT_PCREL:           howto manager.      (line 2361)
+* BFD_RELOC_CRIS_32_TPREL:               howto manager.      (line 2372)
+* BFD_RELOC_CRIS_BDISP8:                 howto manager.      (line 2332)
+* BFD_RELOC_CRIS_COPY:                   howto manager.      (line 2344)
+* BFD_RELOC_CRIS_DTP:                    howto manager.      (line 2367)
+* BFD_RELOC_CRIS_DTPMOD:                 howto manager.      (line 2374)
+* BFD_RELOC_CRIS_GLOB_DAT:               howto manager.      (line 2345)
+* BFD_RELOC_CRIS_JUMP_SLOT:              howto manager.      (line 2346)
+* BFD_RELOC_CRIS_LAPCQ_OFFSET:           howto manager.      (line 2340)
+* BFD_RELOC_CRIS_RELATIVE:               howto manager.      (line 2347)
+* BFD_RELOC_CRIS_SIGNED_16:              howto manager.      (line 2338)
+* BFD_RELOC_CRIS_SIGNED_6:               howto manager.      (line 2334)
+* BFD_RELOC_CRIS_SIGNED_8:               howto manager.      (line 2336)
+* BFD_RELOC_CRIS_UNSIGNED_16:            howto manager.      (line 2339)
+* BFD_RELOC_CRIS_UNSIGNED_4:             howto manager.      (line 2341)
+* BFD_RELOC_CRIS_UNSIGNED_5:             howto manager.      (line 2333)
+* BFD_RELOC_CRIS_UNSIGNED_6:             howto manager.      (line 2335)
+* BFD_RELOC_CRIS_UNSIGNED_8:             howto manager.      (line 2337)
+* BFD_RELOC_CRX_ABS16:                   howto manager.      (line 2321)
+* BFD_RELOC_CRX_ABS32:                   howto manager.      (line 2322)
+* BFD_RELOC_CRX_IMM16:                   howto manager.      (line 2326)
+* BFD_RELOC_CRX_IMM32:                   howto manager.      (line 2327)
+* BFD_RELOC_CRX_NUM16:                   howto manager.      (line 2324)
+* BFD_RELOC_CRX_NUM32:                   howto manager.      (line 2325)
+* BFD_RELOC_CRX_NUM8:                    howto manager.      (line 2323)
+* BFD_RELOC_CRX_REGREL12:                howto manager.      (line 2317)
+* BFD_RELOC_CRX_REGREL22:                howto manager.      (line 2318)
+* BFD_RELOC_CRX_REGREL28:                howto manager.      (line 2319)
+* BFD_RELOC_CRX_REGREL32:                howto manager.      (line 2320)
+* BFD_RELOC_CRX_REL16:                   howto manager.      (line 2314)
+* BFD_RELOC_CRX_REL24:                   howto manager.      (line 2315)
+* BFD_RELOC_CRX_REL32:                   howto manager.      (line 2316)
+* BFD_RELOC_CRX_REL4:                    howto manager.      (line 2311)
+* BFD_RELOC_CRX_REL8:                    howto manager.      (line 2312)
+* BFD_RELOC_CRX_REL8_CMP:                howto manager.      (line 2313)
+* BFD_RELOC_CRX_SWITCH16:                howto manager.      (line 2329)
+* BFD_RELOC_CRX_SWITCH32:                howto manager.      (line 2330)
+* BFD_RELOC_CRX_SWITCH8:                 howto manager.      (line 2328)
+* BFD_RELOC_CTOR:                        howto manager.      (line  772)
+* BFD_RELOC_D10V_10_PCREL_L:             howto manager.      (line 1196)
+* BFD_RELOC_D10V_10_PCREL_R:             howto manager.      (line 1193)
+* BFD_RELOC_D10V_18:                     howto manager.      (line 1200)
+* BFD_RELOC_D10V_18_PCREL:               howto manager.      (line 1202)
+* BFD_RELOC_D30V_15:                     howto manager.      (line 1213)
+* BFD_RELOC_D30V_15_PCREL:               howto manager.      (line 1216)
+* BFD_RELOC_D30V_15_PCREL_R:             howto manager.      (line 1219)
+* BFD_RELOC_D30V_21:                     howto manager.      (line 1223)
+* BFD_RELOC_D30V_21_PCREL:               howto manager.      (line 1226)
+* BFD_RELOC_D30V_21_PCREL_R:             howto manager.      (line 1229)
+* BFD_RELOC_D30V_32:                     howto manager.      (line 1233)
+* BFD_RELOC_D30V_32_PCREL:               howto manager.      (line 1235)
+* BFD_RELOC_D30V_6:                      howto manager.      (line 1204)
+* BFD_RELOC_D30V_9_PCREL:                howto manager.      (line 1206)
+* BFD_RELOC_D30V_9_PCREL_R:              howto manager.      (line 1209)
+* BFD_RELOC_DLX_HI16_S:                  howto manager.      (line 1237)
+* BFD_RELOC_DLX_JMP26:                   howto manager.      (line 1241)
+* BFD_RELOC_DLX_LO16:                    howto manager.      (line 1239)
+* BFD_RELOC_EPIPHANY_HIGH:               howto manager.      (line 3354)
+* BFD_RELOC_EPIPHANY_IMM11:              howto manager.      (line 3360)
+* BFD_RELOC_EPIPHANY_IMM8:               howto manager.      (line 3363)
+* BFD_RELOC_EPIPHANY_LOW:                howto manager.      (line 3356)
+* BFD_RELOC_EPIPHANY_SIMM11:             howto manager.      (line 3358)
+* BFD_RELOC_EPIPHANY_SIMM24:             howto manager.      (line 3352)
+* BFD_RELOC_EPIPHANY_SIMM8:              howto manager.      (line 3350)
+* BFD_RELOC_FR30_10_IN_8:                howto manager.      (line 1628)
+* BFD_RELOC_FR30_12_PCREL:               howto manager.      (line 1634)
+* BFD_RELOC_FR30_20:                     howto manager.      (line 1616)
+* BFD_RELOC_FR30_48:                     howto manager.      (line 1614)
+* BFD_RELOC_FR30_6_IN_4:                 howto manager.      (line 1619)
+* BFD_RELOC_FR30_8_IN_8:                 howto manager.      (line 1622)
+* BFD_RELOC_FR30_9_IN_8:                 howto manager.      (line 1625)
+* BFD_RELOC_FR30_9_PCREL:                howto manager.      (line 1631)
 * 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 +13173,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 2418)
+* BFD_RELOC_H8_DIR16R8:                  howto manager.      (line 2419)
+* BFD_RELOC_H8_DIR24A8:                  howto manager.      (line 2420)
+* BFD_RELOC_H8_DIR24R8:                  howto manager.      (line 2421)
+* BFD_RELOC_H8_DIR32A16:                 howto manager.      (line 2422)
+* BFD_RELOC_H8_DISP32A16:                howto manager.      (line 2423)
 * 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 +13190,263 @@ 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_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_I370_D12:                    howto manager.      (line  770)
+* BFD_RELOC_IA64_COPY:                   howto manager.      (line 2175)
+* BFD_RELOC_IA64_DIR32LSB:               howto manager.      (line 2120)
+* BFD_RELOC_IA64_DIR32MSB:               howto manager.      (line 2119)
+* BFD_RELOC_IA64_DIR64LSB:               howto manager.      (line 2122)
+* BFD_RELOC_IA64_DIR64MSB:               howto manager.      (line 2121)
+* BFD_RELOC_IA64_DTPMOD64LSB:            howto manager.      (line 2185)
+* BFD_RELOC_IA64_DTPMOD64MSB:            howto manager.      (line 2184)
+* BFD_RELOC_IA64_DTPREL14:               howto manager.      (line 2187)
+* BFD_RELOC_IA64_DTPREL22:               howto manager.      (line 2188)
+* BFD_RELOC_IA64_DTPREL32LSB:            howto manager.      (line 2191)
+* BFD_RELOC_IA64_DTPREL32MSB:            howto manager.      (line 2190)
+* BFD_RELOC_IA64_DTPREL64I:              howto manager.      (line 2189)
+* BFD_RELOC_IA64_DTPREL64LSB:            howto manager.      (line 2193)
+* BFD_RELOC_IA64_DTPREL64MSB:            howto manager.      (line 2192)
+* BFD_RELOC_IA64_FPTR32LSB:              howto manager.      (line 2137)
+* BFD_RELOC_IA64_FPTR32MSB:              howto manager.      (line 2136)
+* BFD_RELOC_IA64_FPTR64I:                howto manager.      (line 2135)
+* BFD_RELOC_IA64_FPTR64LSB:              howto manager.      (line 2139)
+* BFD_RELOC_IA64_FPTR64MSB:              howto manager.      (line 2138)
+* BFD_RELOC_IA64_GPREL22:                howto manager.      (line 2123)
+* BFD_RELOC_IA64_GPREL32LSB:             howto manager.      (line 2126)
+* BFD_RELOC_IA64_GPREL32MSB:             howto manager.      (line 2125)
+* BFD_RELOC_IA64_GPREL64I:               howto manager.      (line 2124)
+* BFD_RELOC_IA64_GPREL64LSB:             howto manager.      (line 2128)
+* BFD_RELOC_IA64_GPREL64MSB:             howto manager.      (line 2127)
+* BFD_RELOC_IA64_IMM14:                  howto manager.      (line 2116)
+* BFD_RELOC_IA64_IMM22:                  howto manager.      (line 2117)
+* BFD_RELOC_IA64_IMM64:                  howto manager.      (line 2118)
+* BFD_RELOC_IA64_IPLTLSB:                howto manager.      (line 2174)
+* BFD_RELOC_IA64_IPLTMSB:                howto manager.      (line 2173)
+* BFD_RELOC_IA64_LDXMOV:                 howto manager.      (line 2177)
+* BFD_RELOC_IA64_LTOFF22:                howto manager.      (line 2129)
+* BFD_RELOC_IA64_LTOFF22X:               howto manager.      (line 2176)
+* BFD_RELOC_IA64_LTOFF64I:               howto manager.      (line 2130)
+* BFD_RELOC_IA64_LTOFF_DTPMOD22:         howto manager.      (line 2186)
+* BFD_RELOC_IA64_LTOFF_DTPREL22:         howto manager.      (line 2194)
+* BFD_RELOC_IA64_LTOFF_FPTR22:           howto manager.      (line 2151)
+* BFD_RELOC_IA64_LTOFF_FPTR32LSB:        howto manager.      (line 2154)
+* BFD_RELOC_IA64_LTOFF_FPTR32MSB:        howto manager.      (line 2153)
+* BFD_RELOC_IA64_LTOFF_FPTR64I:          howto manager.      (line 2152)
+* BFD_RELOC_IA64_LTOFF_FPTR64LSB:        howto manager.      (line 2156)
+* BFD_RELOC_IA64_LTOFF_FPTR64MSB:        howto manager.      (line 2155)
+* BFD_RELOC_IA64_LTOFF_TPREL22:          howto manager.      (line 2183)
+* BFD_RELOC_IA64_LTV32LSB:               howto manager.      (line 2170)
+* BFD_RELOC_IA64_LTV32MSB:               howto manager.      (line 2169)
+* BFD_RELOC_IA64_LTV64LSB:               howto manager.      (line 2172)
+* BFD_RELOC_IA64_LTV64MSB:               howto manager.      (line 2171)
+* BFD_RELOC_IA64_PCREL21B:               howto manager.      (line 2140)
+* BFD_RELOC_IA64_PCREL21BI:              howto manager.      (line 2141)
+* BFD_RELOC_IA64_PCREL21F:               howto manager.      (line 2143)
+* BFD_RELOC_IA64_PCREL21M:               howto manager.      (line 2142)
+* BFD_RELOC_IA64_PCREL22:                howto manager.      (line 2144)
+* BFD_RELOC_IA64_PCREL32LSB:             howto manager.      (line 2148)
+* BFD_RELOC_IA64_PCREL32MSB:             howto manager.      (line 2147)
+* BFD_RELOC_IA64_PCREL60B:               howto manager.      (line 2145)
+* BFD_RELOC_IA64_PCREL64I:               howto manager.      (line 2146)
+* BFD_RELOC_IA64_PCREL64LSB:             howto manager.      (line 2150)
+* BFD_RELOC_IA64_PCREL64MSB:             howto manager.      (line 2149)
+* BFD_RELOC_IA64_PLTOFF22:               howto manager.      (line 2131)
+* BFD_RELOC_IA64_PLTOFF64I:              howto manager.      (line 2132)
+* BFD_RELOC_IA64_PLTOFF64LSB:            howto manager.      (line 2134)
+* BFD_RELOC_IA64_PLTOFF64MSB:            howto manager.      (line 2133)
+* BFD_RELOC_IA64_REL32LSB:               howto manager.      (line 2166)
+* BFD_RELOC_IA64_REL32MSB:               howto manager.      (line 2165)
+* BFD_RELOC_IA64_REL64LSB:               howto manager.      (line 2168)
+* BFD_RELOC_IA64_REL64MSB:               howto manager.      (line 2167)
+* BFD_RELOC_IA64_SECREL32LSB:            howto manager.      (line 2162)
+* BFD_RELOC_IA64_SECREL32MSB:            howto manager.      (line 2161)
+* BFD_RELOC_IA64_SECREL64LSB:            howto manager.      (line 2164)
+* BFD_RELOC_IA64_SECREL64MSB:            howto manager.      (line 2163)
+* BFD_RELOC_IA64_SEGREL32LSB:            howto manager.      (line 2158)
+* BFD_RELOC_IA64_SEGREL32MSB:            howto manager.      (line 2157)
+* BFD_RELOC_IA64_SEGREL64LSB:            howto manager.      (line 2160)
+* BFD_RELOC_IA64_SEGREL64MSB:            howto manager.      (line 2159)
+* BFD_RELOC_IA64_TPREL14:                howto manager.      (line 2178)
+* BFD_RELOC_IA64_TPREL22:                howto manager.      (line 2179)
+* BFD_RELOC_IA64_TPREL64I:               howto manager.      (line 2180)
+* BFD_RELOC_IA64_TPREL64LSB:             howto manager.      (line 2182)
+* BFD_RELOC_IA64_TPREL64MSB:             howto manager.      (line 2181)
+* BFD_RELOC_IP2K_ADDR16CJP:              howto manager.      (line 2077)
+* BFD_RELOC_IP2K_BANK:                   howto manager.      (line 2075)
+* BFD_RELOC_IP2K_EX8DATA:                howto manager.      (line 2083)
+* BFD_RELOC_IP2K_FR9:                    howto manager.      (line 2073)
+* BFD_RELOC_IP2K_FR_OFFSET:              howto manager.      (line 2092)
+* BFD_RELOC_IP2K_HI8DATA:                howto manager.      (line 2082)
+* BFD_RELOC_IP2K_HI8INSN:                howto manager.      (line 2086)
+* BFD_RELOC_IP2K_LO8DATA:                howto manager.      (line 2081)
+* BFD_RELOC_IP2K_LO8INSN:                howto manager.      (line 2085)
+* BFD_RELOC_IP2K_PAGE3:                  howto manager.      (line 2079)
+* BFD_RELOC_IP2K_PC_SKIP:                howto manager.      (line 2088)
+* BFD_RELOC_IP2K_TEXT:                   howto manager.      (line 2090)
+* BFD_RELOC_IQ2000_OFFSET_16:            howto manager.      (line 2559)
+* BFD_RELOC_IQ2000_OFFSET_21:            howto manager.      (line 2560)
+* BFD_RELOC_IQ2000_UHI16:                howto manager.      (line 2561)
+* BFD_RELOC_LM32_16_GOT:                 howto manager.      (line 2682)
+* BFD_RELOC_LM32_BRANCH:                 howto manager.      (line 2681)
+* BFD_RELOC_LM32_CALL:                   howto manager.      (line 2680)
+* BFD_RELOC_LM32_COPY:                   howto manager.      (line 2685)
+* BFD_RELOC_LM32_GLOB_DAT:               howto manager.      (line 2686)
+* BFD_RELOC_LM32_GOTOFF_HI16:            howto manager.      (line 2683)
+* BFD_RELOC_LM32_GOTOFF_LO16:            howto manager.      (line 2684)
+* BFD_RELOC_LM32_JMP_SLOT:               howto manager.      (line 2687)
+* BFD_RELOC_LM32_RELATIVE:               howto manager.      (line 2688)
 * 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 1243)
+* BFD_RELOC_M32C_RL_1ADDR:               howto manager.      (line 1245)
+* BFD_RELOC_M32C_RL_2ADDR:               howto manager.      (line 1246)
+* BFD_RELOC_M32C_RL_JUMP:                howto manager.      (line 1244)
+* BFD_RELOC_M32R_10_PCREL:               howto manager.      (line 1251)
+* BFD_RELOC_M32R_18_PCREL:               howto manager.      (line 1254)
+* BFD_RELOC_M32R_24:                     howto manager.      (line 1248)
+* BFD_RELOC_M32R_26_PCREL:               howto manager.      (line 1256)
+* BFD_RELOC_M32R_26_PLTREL:              howto manager.      (line 1270)
+* BFD_RELOC_M32R_COPY:                   howto manager.      (line 1271)
+* BFD_RELOC_M32R_GLOB_DAT:               howto manager.      (line 1272)
+* BFD_RELOC_M32R_GOT16_HI_SLO:           howto manager.      (line 1281)
+* BFD_RELOC_M32R_GOT16_HI_ULO:           howto manager.      (line 1280)
+* BFD_RELOC_M32R_GOT16_LO:               howto manager.      (line 1282)
+* BFD_RELOC_M32R_GOT24:                  howto manager.      (line 1269)
+* BFD_RELOC_M32R_GOTOFF:                 howto manager.      (line 1275)
+* BFD_RELOC_M32R_GOTOFF_HI_SLO:          howto manager.      (line 1277)
+* BFD_RELOC_M32R_GOTOFF_HI_ULO:          howto manager.      (line 1276)
+* BFD_RELOC_M32R_GOTOFF_LO:              howto manager.      (line 1278)
+* BFD_RELOC_M32R_GOTPC24:                howto manager.      (line 1279)
+* BFD_RELOC_M32R_GOTPC_HI_SLO:           howto manager.      (line 1284)
+* BFD_RELOC_M32R_GOTPC_HI_ULO:           howto manager.      (line 1283)
+* BFD_RELOC_M32R_GOTPC_LO:               howto manager.      (line 1285)
+* BFD_RELOC_M32R_HI16_SLO:               howto manager.      (line 1261)
+* BFD_RELOC_M32R_HI16_ULO:               howto manager.      (line 1258)
+* BFD_RELOC_M32R_JMP_SLOT:               howto manager.      (line 1273)
+* BFD_RELOC_M32R_LO16:                   howto manager.      (line 1264)
+* BFD_RELOC_M32R_RELATIVE:               howto manager.      (line 1274)
+* BFD_RELOC_M32R_SDA16:                  howto manager.      (line 1266)
+* BFD_RELOC_M68HC11_24:                  howto manager.      (line 2222)
+* BFD_RELOC_M68HC11_3B:                  howto manager.      (line 2202)
+* BFD_RELOC_M68HC11_HI8:                 howto manager.      (line 2196)
+* BFD_RELOC_M68HC11_LO16:                howto manager.      (line 2213)
+* BFD_RELOC_M68HC11_LO8:                 howto manager.      (line 2199)
+* BFD_RELOC_M68HC11_PAGE:                howto manager.      (line 2218)
+* BFD_RELOC_M68HC11_RL_GROUP:            howto manager.      (line 2209)
+* BFD_RELOC_M68HC11_RL_JUMP:             howto manager.      (line 2204)
+* BFD_RELOC_M68HC12_10_PCREL:            howto manager.      (line 2265)
+* BFD_RELOC_M68HC12_16B:                 howto manager.      (line 2261)
+* BFD_RELOC_M68HC12_5B:                  howto manager.      (line 2227)
+* BFD_RELOC_M68HC12_9B:                  howto manager.      (line 2259)
+* BFD_RELOC_M68HC12_9_PCREL:             howto manager.      (line 2263)
+* BFD_RELOC_M68HC12_HI8XG:               howto manager.      (line 2270)
+* BFD_RELOC_M68HC12_LO8XG:               howto manager.      (line 2267)
+* BFD_RELOC_MACH_O_ARM64_ADDEND:         howto manager.      (line 2718)
+* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager.     (line 2720)
+* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager.  (line 2722)
+* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager.      (line 2724)
+* BFD_RELOC_MACH_O_LOCAL_SECTDIFF:       howto manager.      (line 2693)
+* BFD_RELOC_MACH_O_PAIR:                 howto manager.      (line 2695)
+* BFD_RELOC_MACH_O_SECTDIFF:             howto manager.      (line 2690)
+* BFD_RELOC_MACH_O_SUBTRACTOR32:         howto manager.      (line 2697)
+* BFD_RELOC_MACH_O_SUBTRACTOR64:         howto manager.      (line 2699)
+* BFD_RELOC_MACH_O_X86_64_BRANCH32:      howto manager.      (line 2701)
+* BFD_RELOC_MACH_O_X86_64_BRANCH8:       howto manager.      (line 2702)
+* BFD_RELOC_MACH_O_X86_64_GOT:           howto manager.      (line 2705)
+* BFD_RELOC_MACH_O_X86_64_GOT_LOAD:      howto manager.      (line 2707)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_1:     howto manager.      (line 2710)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_2:     howto manager.      (line 2712)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_4:     howto manager.      (line 2714)
+* BFD_RELOC_MACH_O_X86_64_TLV:           howto manager.      (line 2716)
+* BFD_RELOC_MCORE_PCREL_32:              howto manager.      (line 1640)
+* BFD_RELOC_MCORE_PCREL_IMM11BY2:        howto manager.      (line 1638)
+* BFD_RELOC_MCORE_PCREL_IMM4BY2:         howto manager.      (line 1639)
+* BFD_RELOC_MCORE_PCREL_IMM8BY4:         howto manager.      (line 1637)
+* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2:    howto manager.      (line 1641)
+* BFD_RELOC_MCORE_RVA:                   howto manager.      (line 1642)
+* BFD_RELOC_MEP_16:                      howto manager.      (line 1645)
+* BFD_RELOC_MEP_32:                      howto manager.      (line 1646)
+* BFD_RELOC_MEP_8:                       howto manager.      (line 1644)
+* BFD_RELOC_MEP_ADDR24A4:                howto manager.      (line 1661)
+* BFD_RELOC_MEP_GNU_VTENTRY:             howto manager.      (line 1663)
+* BFD_RELOC_MEP_GNU_VTINHERIT:           howto manager.      (line 1662)
+* BFD_RELOC_MEP_GPREL:                   howto manager.      (line 1655)
+* BFD_RELOC_MEP_HI16S:                   howto manager.      (line 1654)
+* BFD_RELOC_MEP_HI16U:                   howto manager.      (line 1653)
+* BFD_RELOC_MEP_LOW16:                   howto manager.      (line 1652)
+* BFD_RELOC_MEP_PCABS24A2:               howto manager.      (line 1651)
+* BFD_RELOC_MEP_PCREL12A2:               howto manager.      (line 1648)
+* BFD_RELOC_MEP_PCREL17A2:               howto manager.      (line 1649)
+* BFD_RELOC_MEP_PCREL24A2:               howto manager.      (line 1650)
+* BFD_RELOC_MEP_PCREL8A2:                howto manager.      (line 1647)
+* BFD_RELOC_MEP_TPREL:                   howto manager.      (line 1656)
+* BFD_RELOC_MEP_TPREL7:                  howto manager.      (line 1657)
+* BFD_RELOC_MEP_TPREL7A2:                howto manager.      (line 1658)
+* BFD_RELOC_MEP_TPREL7A4:                howto manager.      (line 1659)
+* BFD_RELOC_MEP_UIMM24:                  howto manager.      (line 1660)
+* BFD_RELOC_METAG_COPY:                  howto manager.      (line 1684)
+* BFD_RELOC_METAG_GETSETOFF:             howto manager.      (line 1668)
+* BFD_RELOC_METAG_GETSET_GOT:            howto manager.      (line 1676)
+* BFD_RELOC_METAG_GETSET_GOTOFF:         howto manager.      (line 1675)
+* BFD_RELOC_METAG_GLOB_DAT:              howto manager.      (line 1687)
+* BFD_RELOC_METAG_GOTOFF:                howto manager.      (line 1682)
+* BFD_RELOC_METAG_HI16_GOTOFF:           howto manager.      (line 1673)
+* BFD_RELOC_METAG_HI16_GOTPC:            howto manager.      (line 1677)
+* BFD_RELOC_METAG_HI16_PLT:              howto manager.      (line 1679)
+* BFD_RELOC_METAG_HIADDR16:              howto manager.      (line 1665)
+* BFD_RELOC_METAG_HIOG:                  howto manager.      (line 1669)
+* BFD_RELOC_METAG_JMP_SLOT:              howto manager.      (line 1685)
+* BFD_RELOC_METAG_LO16_GOTOFF:           howto manager.      (line 1674)
+* BFD_RELOC_METAG_LO16_GOTPC:            howto manager.      (line 1678)
+* BFD_RELOC_METAG_LO16_PLT:              howto manager.      (line 1680)
+* BFD_RELOC_METAG_LOADDR16:              howto manager.      (line 1666)
+* BFD_RELOC_METAG_LOOG:                  howto manager.      (line 1670)
+* BFD_RELOC_METAG_PLT:                   howto manager.      (line 1683)
+* BFD_RELOC_METAG_REL16:                 howto manager.      (line 1672)
+* BFD_RELOC_METAG_REL8:                  howto manager.      (line 1671)
+* BFD_RELOC_METAG_RELATIVE:              howto manager.      (line 1686)
+* BFD_RELOC_METAG_RELBRANCH:             howto manager.      (line 1667)
+* BFD_RELOC_METAG_RELBRANCH_PLT:         howto manager.      (line 1681)
+* BFD_RELOC_METAG_TLS_DTPMOD:            howto manager.      (line 1698)
+* BFD_RELOC_METAG_TLS_DTPOFF:            howto manager.      (line 1699)
+* BFD_RELOC_METAG_TLS_GD:                howto manager.      (line 1688)
+* BFD_RELOC_METAG_TLS_IE:                howto manager.      (line 1693)
+* BFD_RELOC_METAG_TLS_IENONPIC:          howto manager.      (line 1694)
+* BFD_RELOC_METAG_TLS_IENONPIC_HI16:     howto manager.      (line 1695)
+* BFD_RELOC_METAG_TLS_IENONPIC_LO16:     howto manager.      (line 1696)
+* BFD_RELOC_METAG_TLS_LDM:               howto manager.      (line 1689)
+* BFD_RELOC_METAG_TLS_LDO:               howto manager.      (line 1692)
+* BFD_RELOC_METAG_TLS_LDO_HI16:          howto manager.      (line 1690)
+* BFD_RELOC_METAG_TLS_LDO_LO16:          howto manager.      (line 1691)
+* BFD_RELOC_METAG_TLS_LE:                howto manager.      (line 1700)
+* BFD_RELOC_METAG_TLS_LE_HI16:           howto manager.      (line 1701)
+* BFD_RELOC_METAG_TLS_LE_LO16:           howto manager.      (line 1702)
+* BFD_RELOC_METAG_TLS_TPOFF:             howto manager.      (line 1697)
+* BFD_RELOC_MICROBLAZE_32_GOTOFF:        howto manager.      (line 2760)
+* BFD_RELOC_MICROBLAZE_32_LO:            howto manager.      (line 2726)
+* BFD_RELOC_MICROBLAZE_32_LO_PCREL:      howto manager.      (line 2729)
+* BFD_RELOC_MICROBLAZE_32_ROSDA:         howto manager.      (line 2732)
+* BFD_RELOC_MICROBLAZE_32_RWSDA:         howto manager.      (line 2735)
+* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM:    howto manager.      (line 2738)
+* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD:     howto manager.      (line 2776)
+* BFD_RELOC_MICROBLAZE_32_TLSDTPREL:     howto manager.      (line 2778)
+* BFD_RELOC_MICROBLAZE_64_GOT:           howto manager.      (line 2749)
+* BFD_RELOC_MICROBLAZE_64_GOTOFF:        howto manager.      (line 2756)
+* BFD_RELOC_MICROBLAZE_64_GOTPC:         howto manager.      (line 2745)
+* BFD_RELOC_MICROBLAZE_64_NONE:          howto manager.      (line 2741)
+* BFD_RELOC_MICROBLAZE_64_PLT:           howto manager.      (line 2752)
+* BFD_RELOC_MICROBLAZE_64_TEXTPCREL:     howto manager.      (line 2789)
+* BFD_RELOC_MICROBLAZE_64_TEXTREL:       howto manager.      (line 2793)
+* BFD_RELOC_MICROBLAZE_64_TLS:           howto manager.      (line 2766)
+* BFD_RELOC_MICROBLAZE_64_TLSDTPREL:     howto manager.      (line 2780)
+* BFD_RELOC_MICROBLAZE_64_TLSGD:         howto manager.      (line 2768)
+* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL:   howto manager.      (line 2783)
+* BFD_RELOC_MICROBLAZE_64_TLSLD:         howto manager.      (line 2772)
+* BFD_RELOC_MICROBLAZE_64_TLSTPREL:      howto manager.      (line 2786)
+* BFD_RELOC_MICROBLAZE_COPY:             howto manager.      (line 2763)
 * 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)
@@ -13391,30 +13535,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 1726)
+* BFD_RELOC_MMIX_ADDR27:                 howto manager.      (line 1729)
+* BFD_RELOC_MMIX_BASE_PLUS_OFFSET:       howto manager.      (line 1738)
+* BFD_RELOC_MMIX_CBRANCH:                howto manager.      (line 1709)
+* BFD_RELOC_MMIX_CBRANCH_1:              howto manager.      (line 1711)
+* BFD_RELOC_MMIX_CBRANCH_2:              howto manager.      (line 1712)
+* BFD_RELOC_MMIX_CBRANCH_3:              howto manager.      (line 1713)
+* BFD_RELOC_MMIX_CBRANCH_J:              howto manager.      (line 1710)
+* BFD_RELOC_MMIX_GETA:                   howto manager.      (line 1704)
+* BFD_RELOC_MMIX_GETA_1:                 howto manager.      (line 1705)
+* BFD_RELOC_MMIX_GETA_2:                 howto manager.      (line 1706)
+* BFD_RELOC_MMIX_GETA_3:                 howto manager.      (line 1707)
+* BFD_RELOC_MMIX_JMP:                    howto manager.      (line 1721)
+* BFD_RELOC_MMIX_JMP_1:                  howto manager.      (line 1722)
+* BFD_RELOC_MMIX_JMP_2:                  howto manager.      (line 1723)
+* BFD_RELOC_MMIX_JMP_3:                  howto manager.      (line 1724)
+* BFD_RELOC_MMIX_LOCAL:                  howto manager.      (line 1741)
+* BFD_RELOC_MMIX_PUSHJ:                  howto manager.      (line 1715)
+* BFD_RELOC_MMIX_PUSHJ_1:                howto manager.      (line 1716)
+* BFD_RELOC_MMIX_PUSHJ_2:                howto manager.      (line 1717)
+* BFD_RELOC_MMIX_PUSHJ_3:                howto manager.      (line 1718)
+* BFD_RELOC_MMIX_PUSHJ_STUBBABLE:        howto manager.      (line 1719)
+* BFD_RELOC_MMIX_REG:                    howto manager.      (line 1735)
+* BFD_RELOC_MMIX_REG_OR_BYTE:            howto manager.      (line 1732)
 * 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,217 +13581,219 @@ 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_NIOS2_ALIGN:                 howto manager.      (line 2476)
-* BFD_RELOC_NIOS2_CACHE_OPX:             howto manager.      (line 2466)
-* BFD_RELOC_NIOS2_CALL16:                howto manager.      (line 2478)
-* BFD_RELOC_NIOS2_CALL26:                howto manager.      (line 2464)
-* BFD_RELOC_NIOS2_CALL26_NOAT:           howto manager.      (line 2496)
-* BFD_RELOC_NIOS2_CALLR:                 howto manager.      (line 2475)
-* BFD_RELOC_NIOS2_CALL_HA:               howto manager.      (line 2500)
-* BFD_RELOC_NIOS2_CALL_LO:               howto manager.      (line 2499)
-* BFD_RELOC_NIOS2_CJMP:                  howto manager.      (line 2474)
-* BFD_RELOC_NIOS2_COPY:                  howto manager.      (line 2491)
-* BFD_RELOC_NIOS2_GLOB_DAT:              howto manager.      (line 2492)
-* BFD_RELOC_NIOS2_GOT16:                 howto manager.      (line 2477)
-* BFD_RELOC_NIOS2_GOTOFF:                howto manager.      (line 2495)
-* BFD_RELOC_NIOS2_GOTOFF_HA:             howto manager.      (line 2480)
-* BFD_RELOC_NIOS2_GOTOFF_LO:             howto manager.      (line 2479)
-* BFD_RELOC_NIOS2_GOT_HA:                howto manager.      (line 2498)
-* BFD_RELOC_NIOS2_GOT_LO:                howto manager.      (line 2497)
-* BFD_RELOC_NIOS2_GPREL:                 howto manager.      (line 2472)
-* BFD_RELOC_NIOS2_HI16:                  howto manager.      (line 2469)
-* BFD_RELOC_NIOS2_HIADJ16:               howto manager.      (line 2471)
-* BFD_RELOC_NIOS2_IMM5:                  howto manager.      (line 2465)
-* BFD_RELOC_NIOS2_IMM6:                  howto manager.      (line 2467)
-* BFD_RELOC_NIOS2_IMM8:                  howto manager.      (line 2468)
-* BFD_RELOC_NIOS2_JUMP_SLOT:             howto manager.      (line 2493)
-* BFD_RELOC_NIOS2_LO16:                  howto manager.      (line 2470)
-* BFD_RELOC_NIOS2_PCREL_HA:              howto manager.      (line 2482)
-* BFD_RELOC_NIOS2_PCREL_LO:              howto manager.      (line 2481)
-* BFD_RELOC_NIOS2_R2_F1I5_2:             howto manager.      (line 2510)
-* BFD_RELOC_NIOS2_R2_I10_1_PCREL:        howto manager.      (line 2502)
-* BFD_RELOC_NIOS2_R2_L5I4X1:             howto manager.      (line 2511)
-* BFD_RELOC_NIOS2_R2_S12:                howto manager.      (line 2501)
-* BFD_RELOC_NIOS2_R2_T1I7_1_PCREL:       howto manager.      (line 2503)
-* BFD_RELOC_NIOS2_R2_T1I7_2:             howto manager.      (line 2504)
-* BFD_RELOC_NIOS2_R2_T1X1I6:             howto manager.      (line 2512)
-* BFD_RELOC_NIOS2_R2_T1X1I6_2:           howto manager.      (line 2513)
-* BFD_RELOC_NIOS2_R2_T2I4:               howto manager.      (line 2505)
-* BFD_RELOC_NIOS2_R2_T2I4_1:             howto manager.      (line 2506)
-* BFD_RELOC_NIOS2_R2_T2I4_2:             howto manager.      (line 2507)
-* BFD_RELOC_NIOS2_R2_X1I7_2:             howto manager.      (line 2508)
-* BFD_RELOC_NIOS2_R2_X2L5:               howto manager.      (line 2509)
-* BFD_RELOC_NIOS2_RELATIVE:              howto manager.      (line 2494)
-* BFD_RELOC_NIOS2_S16:                   howto manager.      (line 2462)
-* BFD_RELOC_NIOS2_TLS_DTPMOD:            howto manager.      (line 2488)
-* BFD_RELOC_NIOS2_TLS_DTPREL:            howto manager.      (line 2489)
-* BFD_RELOC_NIOS2_TLS_GD16:              howto manager.      (line 2483)
-* BFD_RELOC_NIOS2_TLS_IE16:              howto manager.      (line 2486)
-* BFD_RELOC_NIOS2_TLS_LDM16:             howto manager.      (line 2484)
-* BFD_RELOC_NIOS2_TLS_LDO16:             howto manager.      (line 2485)
-* BFD_RELOC_NIOS2_TLS_LE16:              howto manager.      (line 2487)
-* BFD_RELOC_NIOS2_TLS_TPREL:             howto manager.      (line 2490)
-* BFD_RELOC_NIOS2_U16:                   howto manager.      (line 2463)
-* BFD_RELOC_NIOS2_UJMP:                  howto manager.      (line 2473)
+* BFD_RELOC_MSP430X_ABS16:               howto manager.      (line 2471)
+* BFD_RELOC_MSP430X_ABS20_ADR_DST:       howto manager.      (line 2468)
+* BFD_RELOC_MSP430X_ABS20_ADR_SRC:       howto manager.      (line 2467)
+* BFD_RELOC_MSP430X_ABS20_EXT_DST:       howto manager.      (line 2465)
+* BFD_RELOC_MSP430X_ABS20_EXT_ODST:      howto manager.      (line 2466)
+* BFD_RELOC_MSP430X_ABS20_EXT_SRC:       howto manager.      (line 2464)
+* BFD_RELOC_MSP430X_PCR16:               howto manager.      (line 2469)
+* BFD_RELOC_MSP430X_PCR20_CALL:          howto manager.      (line 2470)
+* BFD_RELOC_MSP430X_PCR20_EXT_DST:       howto manager.      (line 2462)
+* BFD_RELOC_MSP430X_PCR20_EXT_ODST:      howto manager.      (line 2463)
+* BFD_RELOC_MSP430X_PCR20_EXT_SRC:       howto manager.      (line 2461)
+* BFD_RELOC_MSP430_10_PCREL:             howto manager.      (line 2453)
+* BFD_RELOC_MSP430_16:                   howto manager.      (line 2455)
+* BFD_RELOC_MSP430_16_BYTE:              howto manager.      (line 2457)
+* BFD_RELOC_MSP430_16_PCREL:             howto manager.      (line 2454)
+* BFD_RELOC_MSP430_16_PCREL_BYTE:        howto manager.      (line 2456)
+* BFD_RELOC_MSP430_2X_PCREL:             howto manager.      (line 2458)
+* BFD_RELOC_MSP430_ABS8:                 howto manager.      (line 2460)
+* BFD_RELOC_MSP430_ABS_HI16:             howto manager.      (line 2472)
+* BFD_RELOC_MSP430_PREL31:               howto manager.      (line 2473)
+* BFD_RELOC_MSP430_RL_PCREL:             howto manager.      (line 2459)
+* BFD_RELOC_MSP430_SET_ULEB128:          howto manager.      (line 2475)
+* BFD_RELOC_MSP430_SUB_ULEB128:          howto manager.      (line 2476)
+* BFD_RELOC_MSP430_SYM_DIFF:             howto manager.      (line 2474)
+* BFD_RELOC_MT_GNU_VTENTRY:              howto manager.      (line 2449)
+* BFD_RELOC_MT_GNU_VTINHERIT:            howto manager.      (line 2447)
+* BFD_RELOC_MT_HI16:                     howto manager.      (line 2443)
+* BFD_RELOC_MT_LO16:                     howto manager.      (line 2445)
+* BFD_RELOC_MT_PC16:                     howto manager.      (line 2441)
+* BFD_RELOC_MT_PCINSN8:                  howto manager.      (line 2451)
+* BFD_RELOC_NDS32_10IFCU_PCREL:          howto manager.      (line 1437)
+* BFD_RELOC_NDS32_10_UPCREL:             howto manager.      (line 1408)
+* BFD_RELOC_NDS32_15_FIXED:              howto manager.      (line 1369)
+* BFD_RELOC_NDS32_15_PCREL:              howto manager.      (line 1295)
+* BFD_RELOC_NDS32_17IFC_PCREL:           howto manager.      (line 1436)
+* BFD_RELOC_NDS32_17_FIXED:              howto manager.      (line 1370)
+* BFD_RELOC_NDS32_17_PCREL:              howto manager.      (line 1297)
+* BFD_RELOC_NDS32_20:                    howto manager.      (line 1287)
+* BFD_RELOC_NDS32_25_ABS:                howto manager.      (line 1432)
+* BFD_RELOC_NDS32_25_FIXED:              howto manager.      (line 1371)
+* BFD_RELOC_NDS32_25_PCREL:              howto manager.      (line 1299)
+* BFD_RELOC_NDS32_25_PLTREL:             howto manager.      (line 1345)
+* BFD_RELOC_NDS32_5:                     howto manager.      (line 1406)
+* BFD_RELOC_NDS32_9_FIXED:               howto manager.      (line 1368)
+* BFD_RELOC_NDS32_9_PCREL:               howto manager.      (line 1289)
+* BFD_RELOC_NDS32_9_PLTREL:              howto manager.      (line 1344)
+* BFD_RELOC_NDS32_COPY:                  howto manager.      (line 1346)
+* BFD_RELOC_NDS32_DATA:                  howto manager.      (line 1434)
+* BFD_RELOC_NDS32_DIFF16:                howto manager.      (line 1427)
+* BFD_RELOC_NDS32_DIFF32:                howto manager.      (line 1428)
+* BFD_RELOC_NDS32_DIFF8:                 howto manager.      (line 1426)
+* BFD_RELOC_NDS32_DIFF_ULEB128:          howto manager.      (line 1429)
+* BFD_RELOC_NDS32_DWARF2_LEB:            howto manager.      (line 1392)
+* BFD_RELOC_NDS32_DWARF2_OP1:            howto manager.      (line 1390)
+* BFD_RELOC_NDS32_DWARF2_OP2:            howto manager.      (line 1391)
+* BFD_RELOC_NDS32_EMPTY:                 howto manager.      (line 1430)
+* BFD_RELOC_NDS32_GLOB_DAT:              howto manager.      (line 1347)
+* BFD_RELOC_NDS32_GOT15S2:               howto manager.      (line 1403)
+* BFD_RELOC_NDS32_GOT17S2:               howto manager.      (line 1404)
+* BFD_RELOC_NDS32_GOT20:                 howto manager.      (line 1343)
+* BFD_RELOC_NDS32_GOTOFF:                howto manager.      (line 1350)
+* BFD_RELOC_NDS32_GOTOFF_HI20:           howto manager.      (line 1351)
+* BFD_RELOC_NDS32_GOTOFF_LO12:           howto manager.      (line 1352)
+* BFD_RELOC_NDS32_GOTOFF_LO15:           howto manager.      (line 1401)
+* BFD_RELOC_NDS32_GOTOFF_LO19:           howto manager.      (line 1402)
+* BFD_RELOC_NDS32_GOTOFF_SUFF:           howto manager.      (line 1415)
+* BFD_RELOC_NDS32_GOTPC20:               howto manager.      (line 1353)
+* BFD_RELOC_NDS32_GOTPC_HI20:            howto manager.      (line 1356)
+* BFD_RELOC_NDS32_GOTPC_LO12:            howto manager.      (line 1357)
+* BFD_RELOC_NDS32_GOTTPOFF:              howto manager.      (line 1440)
+* BFD_RELOC_NDS32_GOT_HI20:              howto manager.      (line 1354)
+* BFD_RELOC_NDS32_GOT_LO12:              howto manager.      (line 1355)
+* BFD_RELOC_NDS32_GOT_LO15:              howto manager.      (line 1399)
+* BFD_RELOC_NDS32_GOT_LO19:              howto manager.      (line 1400)
+* BFD_RELOC_NDS32_GOT_SUFF:              howto manager.      (line 1414)
+* BFD_RELOC_NDS32_GROUP:                 howto manager.      (line 1466)
+* BFD_RELOC_NDS32_HI20:                  howto manager.      (line 1301)
+* BFD_RELOC_NDS32_INSN16:                howto manager.      (line 1359)
+* BFD_RELOC_NDS32_JMP_SLOT:              howto manager.      (line 1348)
+* BFD_RELOC_NDS32_LABEL:                 howto manager.      (line 1360)
+* BFD_RELOC_NDS32_LO12S0:                howto manager.      (line 1313)
+* BFD_RELOC_NDS32_LO12S0_ORI:            howto manager.      (line 1316)
+* BFD_RELOC_NDS32_LO12S1:                howto manager.      (line 1310)
+* BFD_RELOC_NDS32_LO12S2:                howto manager.      (line 1307)
+* BFD_RELOC_NDS32_LO12S2_DP:             howto manager.      (line 1387)
+* BFD_RELOC_NDS32_LO12S2_SP:             howto manager.      (line 1388)
+* BFD_RELOC_NDS32_LO12S3:                howto manager.      (line 1304)
+* BFD_RELOC_NDS32_LOADSTORE:             howto manager.      (line 1367)
+* BFD_RELOC_NDS32_LONGCALL1:             howto manager.      (line 1361)
+* BFD_RELOC_NDS32_LONGCALL2:             howto manager.      (line 1362)
+* BFD_RELOC_NDS32_LONGCALL3:             howto manager.      (line 1363)
+* BFD_RELOC_NDS32_LONGCALL4:             howto manager.      (line 1372)
+* BFD_RELOC_NDS32_LONGCALL5:             howto manager.      (line 1373)
+* BFD_RELOC_NDS32_LONGCALL6:             howto manager.      (line 1374)
+* BFD_RELOC_NDS32_LONGJUMP1:             howto manager.      (line 1364)
+* BFD_RELOC_NDS32_LONGJUMP2:             howto manager.      (line 1365)
+* BFD_RELOC_NDS32_LONGJUMP3:             howto manager.      (line 1366)
+* BFD_RELOC_NDS32_LONGJUMP4:             howto manager.      (line 1375)
+* BFD_RELOC_NDS32_LONGJUMP5:             howto manager.      (line 1376)
+* BFD_RELOC_NDS32_LONGJUMP6:             howto manager.      (line 1377)
+* BFD_RELOC_NDS32_LONGJUMP7:             howto manager.      (line 1378)
+* BFD_RELOC_NDS32_LSI:                   howto manager.      (line 1468)
+* BFD_RELOC_NDS32_MINUEND:               howto manager.      (line 1424)
+* BFD_RELOC_NDS32_MULCALL_SUFF:          howto manager.      (line 1417)
+* BFD_RELOC_NDS32_PLTBLOCK:              howto manager.      (line 1421)
+* BFD_RELOC_NDS32_PLTREL_HI20:           howto manager.      (line 1380)
+* BFD_RELOC_NDS32_PLTREL_LO12:           howto manager.      (line 1381)
+* BFD_RELOC_NDS32_PLT_GOTREL_HI20:       howto manager.      (line 1382)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO12:       howto manager.      (line 1383)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO15:       howto manager.      (line 1397)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO19:       howto manager.      (line 1398)
+* BFD_RELOC_NDS32_PLT_GOTREL_LO20:       howto manager.      (line 1396)
+* BFD_RELOC_NDS32_PLT_GOT_SUFF:          howto manager.      (line 1416)
+* BFD_RELOC_NDS32_PTR:                   howto manager.      (line 1418)
+* BFD_RELOC_NDS32_PTR_COUNT:             howto manager.      (line 1419)
+* BFD_RELOC_NDS32_PTR_RESOLVED:          howto manager.      (line 1420)
+* BFD_RELOC_NDS32_RELATIVE:              howto manager.      (line 1349)
+* BFD_RELOC_NDS32_RELAX_ENTRY:           howto manager.      (line 1413)
+* BFD_RELOC_NDS32_RELAX_REGION_BEGIN:    howto manager.      (line 1422)
+* BFD_RELOC_NDS32_RELAX_REGION_END:      howto manager.      (line 1423)
+* BFD_RELOC_NDS32_REMOVE:                howto manager.      (line 1465)
+* BFD_RELOC_NDS32_SDA12S2_DP:            howto manager.      (line 1385)
+* BFD_RELOC_NDS32_SDA12S2_SP:            howto manager.      (line 1386)
+* BFD_RELOC_NDS32_SDA15S0:               howto manager.      (line 1328)
+* BFD_RELOC_NDS32_SDA15S1:               howto manager.      (line 1325)
+* BFD_RELOC_NDS32_SDA15S2:               howto manager.      (line 1322)
+* BFD_RELOC_NDS32_SDA15S3:               howto manager.      (line 1319)
+* BFD_RELOC_NDS32_SDA16S3:               howto manager.      (line 1331)
+* BFD_RELOC_NDS32_SDA17S2:               howto manager.      (line 1334)
+* BFD_RELOC_NDS32_SDA18S1:               howto manager.      (line 1337)
+* BFD_RELOC_NDS32_SDA19S0:               howto manager.      (line 1340)
+* BFD_RELOC_NDS32_SDA_FP7U2_RELA:        howto manager.      (line 1411)
+* BFD_RELOC_NDS32_SUBTRAHEND:            howto manager.      (line 1425)
+* BFD_RELOC_NDS32_TLS_DESC:              howto manager.      (line 1456)
+* BFD_RELOC_NDS32_TLS_DESC_20:           howto manager.      (line 1459)
+* BFD_RELOC_NDS32_TLS_DESC_ADD:          howto manager.      (line 1461)
+* BFD_RELOC_NDS32_TLS_DESC_CALL:         howto manager.      (line 1463)
+* BFD_RELOC_NDS32_TLS_DESC_FUNC:         howto manager.      (line 1462)
+* BFD_RELOC_NDS32_TLS_DESC_HI20:         howto manager.      (line 1457)
+* BFD_RELOC_NDS32_TLS_DESC_LO12:         howto manager.      (line 1458)
+* BFD_RELOC_NDS32_TLS_DESC_MEM:          howto manager.      (line 1464)
+* BFD_RELOC_NDS32_TLS_DESC_SDA17S2:      howto manager.      (line 1460)
+* BFD_RELOC_NDS32_TLS_IEGP_HI20:         howto manager.      (line 1452)
+* BFD_RELOC_NDS32_TLS_IEGP_LO12:         howto manager.      (line 1453)
+* BFD_RELOC_NDS32_TLS_IEGP_LO12S2:       howto manager.      (line 1454)
+* BFD_RELOC_NDS32_TLS_IEGP_LW:           howto manager.      (line 1455)
+* BFD_RELOC_NDS32_TLS_IE_HI20:           howto manager.      (line 1449)
+* BFD_RELOC_NDS32_TLS_IE_LO12:           howto manager.      (line 1450)
+* BFD_RELOC_NDS32_TLS_IE_LO12S2:         howto manager.      (line 1451)
+* BFD_RELOC_NDS32_TLS_LE_15S0:           howto manager.      (line 1444)
+* BFD_RELOC_NDS32_TLS_LE_15S1:           howto manager.      (line 1445)
+* BFD_RELOC_NDS32_TLS_LE_15S2:           howto manager.      (line 1446)
+* BFD_RELOC_NDS32_TLS_LE_20:             howto manager.      (line 1443)
+* BFD_RELOC_NDS32_TLS_LE_ADD:            howto manager.      (line 1447)
+* BFD_RELOC_NDS32_TLS_LE_HI20:           howto manager.      (line 1441)
+* BFD_RELOC_NDS32_TLS_LE_LO12:           howto manager.      (line 1442)
+* BFD_RELOC_NDS32_TLS_LE_LS:             howto manager.      (line 1448)
+* BFD_RELOC_NDS32_TPOFF:                 howto manager.      (line 1439)
+* BFD_RELOC_NDS32_TRAN:                  howto manager.      (line 1435)
+* BFD_RELOC_NDS32_UPDATE_TA:             howto manager.      (line 1394)
+* BFD_RELOC_NDS32_WORD_9_PCREL:          howto manager.      (line 1292)
+* BFD_RELOC_NIOS2_ALIGN:                 howto manager.      (line 2492)
+* BFD_RELOC_NIOS2_CACHE_OPX:             howto manager.      (line 2482)
+* BFD_RELOC_NIOS2_CALL16:                howto manager.      (line 2494)
+* BFD_RELOC_NIOS2_CALL26:                howto manager.      (line 2480)
+* BFD_RELOC_NIOS2_CALL26_NOAT:           howto manager.      (line 2512)
+* BFD_RELOC_NIOS2_CALLR:                 howto manager.      (line 2491)
+* BFD_RELOC_NIOS2_CALL_HA:               howto manager.      (line 2516)
+* BFD_RELOC_NIOS2_CALL_LO:               howto manager.      (line 2515)
+* BFD_RELOC_NIOS2_CJMP:                  howto manager.      (line 2490)
+* BFD_RELOC_NIOS2_COPY:                  howto manager.      (line 2507)
+* BFD_RELOC_NIOS2_GLOB_DAT:              howto manager.      (line 2508)
+* BFD_RELOC_NIOS2_GOT16:                 howto manager.      (line 2493)
+* BFD_RELOC_NIOS2_GOTOFF:                howto manager.      (line 2511)
+* BFD_RELOC_NIOS2_GOTOFF_HA:             howto manager.      (line 2496)
+* BFD_RELOC_NIOS2_GOTOFF_LO:             howto manager.      (line 2495)
+* BFD_RELOC_NIOS2_GOT_HA:                howto manager.      (line 2514)
+* BFD_RELOC_NIOS2_GOT_LO:                howto manager.      (line 2513)
+* BFD_RELOC_NIOS2_GPREL:                 howto manager.      (line 2488)
+* BFD_RELOC_NIOS2_HI16:                  howto manager.      (line 2485)
+* BFD_RELOC_NIOS2_HIADJ16:               howto manager.      (line 2487)
+* BFD_RELOC_NIOS2_IMM5:                  howto manager.      (line 2481)
+* BFD_RELOC_NIOS2_IMM6:                  howto manager.      (line 2483)
+* BFD_RELOC_NIOS2_IMM8:                  howto manager.      (line 2484)
+* BFD_RELOC_NIOS2_JUMP_SLOT:             howto manager.      (line 2509)
+* BFD_RELOC_NIOS2_LO16:                  howto manager.      (line 2486)
+* BFD_RELOC_NIOS2_PCREL_HA:              howto manager.      (line 2498)
+* BFD_RELOC_NIOS2_PCREL_LO:              howto manager.      (line 2497)
+* BFD_RELOC_NIOS2_R2_F1I5_2:             howto manager.      (line 2526)
+* BFD_RELOC_NIOS2_R2_I10_1_PCREL:        howto manager.      (line 2518)
+* BFD_RELOC_NIOS2_R2_L5I4X1:             howto manager.      (line 2527)
+* BFD_RELOC_NIOS2_R2_S12:                howto manager.      (line 2517)
+* BFD_RELOC_NIOS2_R2_T1I7_1_PCREL:       howto manager.      (line 2519)
+* BFD_RELOC_NIOS2_R2_T1I7_2:             howto manager.      (line 2520)
+* BFD_RELOC_NIOS2_R2_T1X1I6:             howto manager.      (line 2528)
+* BFD_RELOC_NIOS2_R2_T1X1I6_2:           howto manager.      (line 2529)
+* BFD_RELOC_NIOS2_R2_T2I4:               howto manager.      (line 2521)
+* BFD_RELOC_NIOS2_R2_T2I4_1:             howto manager.      (line 2522)
+* BFD_RELOC_NIOS2_R2_T2I4_2:             howto manager.      (line 2523)
+* BFD_RELOC_NIOS2_R2_X1I7_2:             howto manager.      (line 2524)
+* BFD_RELOC_NIOS2_R2_X2L5:               howto manager.      (line 2525)
+* BFD_RELOC_NIOS2_RELATIVE:              howto manager.      (line 2510)
+* BFD_RELOC_NIOS2_S16:                   howto manager.      (line 2478)
+* BFD_RELOC_NIOS2_TLS_DTPMOD:            howto manager.      (line 2504)
+* BFD_RELOC_NIOS2_TLS_DTPREL:            howto manager.      (line 2505)
+* BFD_RELOC_NIOS2_TLS_GD16:              howto manager.      (line 2499)
+* BFD_RELOC_NIOS2_TLS_IE16:              howto manager.      (line 2502)
+* BFD_RELOC_NIOS2_TLS_LDM16:             howto manager.      (line 2500)
+* BFD_RELOC_NIOS2_TLS_LDO16:             howto manager.      (line 2501)
+* BFD_RELOC_NIOS2_TLS_LE16:              howto manager.      (line 2503)
+* BFD_RELOC_NIOS2_TLS_TPREL:             howto manager.      (line 2506)
+* BFD_RELOC_NIOS2_U16:                   howto manager.      (line 2479)
+* BFD_RELOC_NIOS2_UJMP:                  howto manager.      (line 2489)
 * 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)
@@ -13662,45 +13808,46 @@ BFD Index
 * 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_OR1K_COPY:                   howto manager.      (line 2391)
+* BFD_RELOC_OR1K_GLOB_DAT:               howto manager.      (line 2392)
+* BFD_RELOC_OR1K_GOT16:                  howto manager.      (line 2385)
+* BFD_RELOC_OR1K_GOTOFF_SLO16:           howto manager.      (line 2390)
+* BFD_RELOC_OR1K_GOTPC_HI16:             howto manager.      (line 2382)
+* BFD_RELOC_OR1K_GOTPC_LO16:             howto manager.      (line 2383)
+* BFD_RELOC_OR1K_GOT_AHI16:              howto manager.      (line 2384)
+* BFD_RELOC_OR1K_GOT_LO13:               howto manager.      (line 2387)
+* BFD_RELOC_OR1K_GOT_PG21:               howto manager.      (line 2386)
+* BFD_RELOC_OR1K_JMP_SLOT:               howto manager.      (line 2393)
+* BFD_RELOC_OR1K_LO13:                   howto manager.      (line 2380)
+* BFD_RELOC_OR1K_PCREL_PG21:             howto manager.      (line 2379)
+* BFD_RELOC_OR1K_PLT26:                  howto manager.      (line 2388)
+* BFD_RELOC_OR1K_PLTA26:                 howto manager.      (line 2389)
+* BFD_RELOC_OR1K_RELATIVE:               howto manager.      (line 2394)
+* BFD_RELOC_OR1K_REL_26:                 howto manager.      (line 2377)
+* BFD_RELOC_OR1K_SLO13:                  howto manager.      (line 2381)
+* BFD_RELOC_OR1K_SLO16:                  howto manager.      (line 2378)
+* BFD_RELOC_OR1K_TLS_DTPMOD:             howto manager.      (line 2416)
+* BFD_RELOC_OR1K_TLS_DTPOFF:             howto manager.      (line 2415)
+* BFD_RELOC_OR1K_TLS_GD_HI16:            howto manager.      (line 2395)
+* BFD_RELOC_OR1K_TLS_GD_LO13:            howto manager.      (line 2398)
+* BFD_RELOC_OR1K_TLS_GD_LO16:            howto manager.      (line 2396)
+* BFD_RELOC_OR1K_TLS_GD_PG21:            howto manager.      (line 2397)
+* BFD_RELOC_OR1K_TLS_IE_AHI16:           howto manager.      (line 2406)
+* BFD_RELOC_OR1K_TLS_IE_HI16:            howto manager.      (line 2405)
+* BFD_RELOC_OR1K_TLS_IE_LO13:            howto manager.      (line 2409)
+* BFD_RELOC_OR1K_TLS_IE_LO16:            howto manager.      (line 2407)
+* BFD_RELOC_OR1K_TLS_IE_PG21:            howto manager.      (line 2408)
+* BFD_RELOC_OR1K_TLS_LDM_HI16:           howto manager.      (line 2399)
+* BFD_RELOC_OR1K_TLS_LDM_LO13:           howto manager.      (line 2402)
+* BFD_RELOC_OR1K_TLS_LDM_LO16:           howto manager.      (line 2400)
+* BFD_RELOC_OR1K_TLS_LDM_PG21:           howto manager.      (line 2401)
+* BFD_RELOC_OR1K_TLS_LDO_HI16:           howto manager.      (line 2403)
+* BFD_RELOC_OR1K_TLS_LDO_LO16:           howto manager.      (line 2404)
+* BFD_RELOC_OR1K_TLS_LE_AHI16:           howto manager.      (line 2411)
+* BFD_RELOC_OR1K_TLS_LE_HI16:            howto manager.      (line 2410)
+* BFD_RELOC_OR1K_TLS_LE_LO16:            howto manager.      (line 2412)
+* BFD_RELOC_OR1K_TLS_LE_SLO16:           howto manager.      (line 2413)
+* BFD_RELOC_OR1K_TLS_TPOFF:              howto manager.      (line 2414)
 * 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)
@@ -13709,394 +13856,407 @@ BFD Index
 * 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_PPC64_ADDR16_DS:             howto manager.      (line  666)
+* BFD_RELOC_PPC64_ADDR16_HIGH:           howto manager.      (line  677)
+* BFD_RELOC_PPC64_ADDR16_HIGHA:          howto manager.      (line  678)
+* BFD_RELOC_PPC64_ADDR16_HIGHER34:       howto manager.      (line  695)
+* BFD_RELOC_PPC64_ADDR16_HIGHERA34:      howto manager.      (line  696)
+* BFD_RELOC_PPC64_ADDR16_HIGHEST34:      howto manager.      (line  697)
+* BFD_RELOC_PPC64_ADDR16_HIGHESTA34:     howto manager.      (line  698)
+* BFD_RELOC_PPC64_ADDR16_LO_DS:          howto manager.      (line  667)
+* BFD_RELOC_PPC64_ADDR64_LOCAL:          howto manager.      (line  685)
+* BFD_RELOC_PPC64_D28:                   howto manager.      (line  703)
+* BFD_RELOC_PPC64_D34:                   howto manager.      (line  688)
+* BFD_RELOC_PPC64_D34_HA30:              howto manager.      (line  691)
+* BFD_RELOC_PPC64_D34_HI30:              howto manager.      (line  690)
+* BFD_RELOC_PPC64_D34_LO:                howto manager.      (line  689)
+* BFD_RELOC_PPC64_DTPREL16_DS:           howto manager.      (line  754)
+* BFD_RELOC_PPC64_DTPREL16_HIGH:         howto manager.      (line  756)
+* BFD_RELOC_PPC64_DTPREL16_HIGHA:        howto manager.      (line  757)
+* BFD_RELOC_PPC64_DTPREL16_HIGHER:       howto manager.      (line  758)
+* BFD_RELOC_PPC64_DTPREL16_HIGHERA:      howto manager.      (line  759)
+* BFD_RELOC_PPC64_DTPREL16_HIGHEST:      howto manager.      (line  760)
+* BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     howto manager.      (line  761)
+* BFD_RELOC_PPC64_DTPREL16_LO_DS:        howto manager.      (line  755)
+* BFD_RELOC_PPC64_DTPREL34:              howto manager.      (line  763)
+* BFD_RELOC_PPC64_ENTRY:                 howto manager.      (line  686)
+* BFD_RELOC_PPC64_GOT16_DS:              howto manager.      (line  668)
+* BFD_RELOC_PPC64_GOT16_LO_DS:           howto manager.      (line  669)
+* BFD_RELOC_PPC64_GOT_DTPREL_PCREL34:    howto manager.      (line  767)
+* BFD_RELOC_PPC64_GOT_PCREL34:           howto manager.      (line  693)
+* BFD_RELOC_PPC64_GOT_TLSGD_PCREL34:     howto manager.      (line  764)
+* BFD_RELOC_PPC64_GOT_TLSLD_PCREL34:     howto manager.      (line  765)
+* BFD_RELOC_PPC64_GOT_TPREL_PCREL34:     howto manager.      (line  766)
+* BFD_RELOC_PPC64_HIGHER:                howto manager.      (line  654)
+* BFD_RELOC_PPC64_HIGHER_S:              howto manager.      (line  655)
+* BFD_RELOC_PPC64_HIGHEST:               howto manager.      (line  656)
+* BFD_RELOC_PPC64_HIGHEST_S:             howto manager.      (line  657)
+* BFD_RELOC_PPC64_PCREL28:               howto manager.      (line  704)
+* BFD_RELOC_PPC64_PCREL34:               howto manager.      (line  692)
+* BFD_RELOC_PPC64_PLT16_LO_DS:           howto manager.      (line  670)
+* BFD_RELOC_PPC64_PLTGOT16:              howto manager.      (line  662)
+* BFD_RELOC_PPC64_PLTGOT16_DS:           howto manager.      (line  675)
+* BFD_RELOC_PPC64_PLTGOT16_HA:           howto manager.      (line  665)
+* BFD_RELOC_PPC64_PLTGOT16_HI:           howto manager.      (line  664)
+* BFD_RELOC_PPC64_PLTGOT16_LO:           howto manager.      (line  663)
+* BFD_RELOC_PPC64_PLTGOT16_LO_DS:        howto manager.      (line  676)
+* BFD_RELOC_PPC64_PLT_PCREL34:           howto manager.      (line  694)
+* BFD_RELOC_PPC64_REL16_HIGH:            howto manager.      (line  679)
+* BFD_RELOC_PPC64_REL16_HIGHA:           howto manager.      (line  680)
+* BFD_RELOC_PPC64_REL16_HIGHER:          howto manager.      (line  681)
+* BFD_RELOC_PPC64_REL16_HIGHER34:        howto manager.      (line  699)
+* BFD_RELOC_PPC64_REL16_HIGHERA:         howto manager.      (line  682)
+* BFD_RELOC_PPC64_REL16_HIGHERA34:       howto manager.      (line  700)
+* BFD_RELOC_PPC64_REL16_HIGHEST:         howto manager.      (line  683)
+* BFD_RELOC_PPC64_REL16_HIGHEST34:       howto manager.      (line  701)
+* BFD_RELOC_PPC64_REL16_HIGHESTA:        howto manager.      (line  684)
+* BFD_RELOC_PPC64_REL16_HIGHESTA34:      howto manager.      (line  702)
+* BFD_RELOC_PPC64_REL24_NOTOC:           howto manager.      (line  687)
+* BFD_RELOC_PPC64_SECTOFF_DS:            howto manager.      (line  671)
+* BFD_RELOC_PPC64_SECTOFF_LO_DS:         howto manager.      (line  672)
+* BFD_RELOC_PPC64_TLSGD:                 howto manager.      (line  740)
+* BFD_RELOC_PPC64_TLSIE:                 howto manager.      (line  743)
+* BFD_RELOC_PPC64_TLSLD:                 howto manager.      (line  741)
+* BFD_RELOC_PPC64_TLSLE:                 howto manager.      (line  742)
+* BFD_RELOC_PPC64_TLSM:                  howto manager.      (line  744)
+* BFD_RELOC_PPC64_TLSML:                 howto manager.      (line  745)
+* BFD_RELOC_PPC64_TLS_PCREL:             howto manager.      (line  768)
+* BFD_RELOC_PPC64_TOC:                   howto manager.      (line  661)
+* BFD_RELOC_PPC64_TOC16_DS:              howto manager.      (line  673)
+* BFD_RELOC_PPC64_TOC16_HA:              howto manager.      (line  660)
+* BFD_RELOC_PPC64_TOC16_HI:              howto manager.      (line  659)
+* BFD_RELOC_PPC64_TOC16_LO:              howto manager.      (line  658)
+* BFD_RELOC_PPC64_TOC16_LO_DS:           howto manager.      (line  674)
+* BFD_RELOC_PPC64_TPREL16_DS:            howto manager.      (line  746)
+* BFD_RELOC_PPC64_TPREL16_HIGH:          howto manager.      (line  748)
+* BFD_RELOC_PPC64_TPREL16_HIGHA:         howto manager.      (line  749)
+* BFD_RELOC_PPC64_TPREL16_HIGHER:        howto manager.      (line  750)
+* BFD_RELOC_PPC64_TPREL16_HIGHERA:       howto manager.      (line  751)
+* BFD_RELOC_PPC64_TPREL16_HIGHEST:       howto manager.      (line  752)
+* BFD_RELOC_PPC64_TPREL16_HIGHESTA:      howto manager.      (line  753)
+* BFD_RELOC_PPC64_TPREL16_LO_DS:         howto manager.      (line  747)
+* BFD_RELOC_PPC64_TPREL34:               howto manager.      (line  762)
+* BFD_RELOC_PPC_16DX_HA:                 howto manager.      (line  651)
+* BFD_RELOC_PPC_B16:                     howto manager.      (line  607)
+* BFD_RELOC_PPC_B16_BRNTAKEN:            howto manager.      (line  609)
+* BFD_RELOC_PPC_B16_BRTAKEN:             howto manager.      (line  608)
 * 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_BA16:                    howto manager.      (line  610)
+* BFD_RELOC_PPC_BA16_BRNTAKEN:           howto manager.      (line  612)
+* BFD_RELOC_PPC_BA16_BRTAKEN:            howto manager.      (line  611)
 * 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_COPY:                    howto manager.      (line  613)
+* BFD_RELOC_PPC_DTPMOD:                  howto manager.      (line  713)
+* BFD_RELOC_PPC_DTPREL:                  howto manager.      (line  723)
+* BFD_RELOC_PPC_DTPREL16:                howto manager.      (line  719)
+* BFD_RELOC_PPC_DTPREL16_HA:             howto manager.      (line  722)
+* BFD_RELOC_PPC_DTPREL16_HI:             howto manager.      (line  721)
+* BFD_RELOC_PPC_DTPREL16_LO:             howto manager.      (line  720)
+* BFD_RELOC_PPC_EMB_BIT_FLD:             howto manager.      (line  632)
+* BFD_RELOC_PPC_EMB_MRKREF:              howto manager.      (line  627)
+* BFD_RELOC_PPC_EMB_NADDR16:             howto manager.      (line  619)
+* BFD_RELOC_PPC_EMB_NADDR16_HA:          howto manager.      (line  622)
+* BFD_RELOC_PPC_EMB_NADDR16_HI:          howto manager.      (line  621)
+* BFD_RELOC_PPC_EMB_NADDR16_LO:          howto manager.      (line  620)
+* BFD_RELOC_PPC_EMB_NADDR32:             howto manager.      (line  618)
+* BFD_RELOC_PPC_EMB_RELSDA:              howto manager.      (line  633)
+* BFD_RELOC_PPC_EMB_RELSEC16:            howto manager.      (line  628)
+* BFD_RELOC_PPC_EMB_RELST_HA:            howto manager.      (line  631)
+* BFD_RELOC_PPC_EMB_RELST_HI:            howto manager.      (line  630)
+* BFD_RELOC_PPC_EMB_RELST_LO:            howto manager.      (line  629)
+* BFD_RELOC_PPC_EMB_SDA21:               howto manager.      (line  626)
+* BFD_RELOC_PPC_EMB_SDA2I16:             howto manager.      (line  624)
+* BFD_RELOC_PPC_EMB_SDA2REL:             howto manager.      (line  625)
+* BFD_RELOC_PPC_EMB_SDAI16:              howto manager.      (line  623)
+* BFD_RELOC_PPC_GLOB_DAT:                howto manager.      (line  614)
+* BFD_RELOC_PPC_GOT_DTPREL16:            howto manager.      (line  736)
+* BFD_RELOC_PPC_GOT_DTPREL16_HA:         howto manager.      (line  739)
+* BFD_RELOC_PPC_GOT_DTPREL16_HI:         howto manager.      (line  738)
+* BFD_RELOC_PPC_GOT_DTPREL16_LO:         howto manager.      (line  737)
+* BFD_RELOC_PPC_GOT_TLSGD16:             howto manager.      (line  724)
+* BFD_RELOC_PPC_GOT_TLSGD16_HA:          howto manager.      (line  727)
+* BFD_RELOC_PPC_GOT_TLSGD16_HI:          howto manager.      (line  726)
+* BFD_RELOC_PPC_GOT_TLSGD16_LO:          howto manager.      (line  725)
+* BFD_RELOC_PPC_GOT_TLSLD16:             howto manager.      (line  728)
+* BFD_RELOC_PPC_GOT_TLSLD16_HA:          howto manager.      (line  731)
+* BFD_RELOC_PPC_GOT_TLSLD16_HI:          howto manager.      (line  730)
+* BFD_RELOC_PPC_GOT_TLSLD16_LO:          howto manager.      (line  729)
+* BFD_RELOC_PPC_GOT_TPREL16:             howto manager.      (line  732)
+* BFD_RELOC_PPC_GOT_TPREL16_HA:          howto manager.      (line  735)
+* BFD_RELOC_PPC_GOT_TPREL16_HI:          howto manager.      (line  734)
+* BFD_RELOC_PPC_GOT_TPREL16_LO:          howto manager.      (line  733)
+* BFD_RELOC_PPC_JMP_SLOT:                howto manager.      (line  615)
+* BFD_RELOC_PPC_LOCAL24PC:               howto manager.      (line  617)
+* BFD_RELOC_PPC_NEG:                     howto manager.      (line  653)
+* BFD_RELOC_PPC_REL16DX_HA:              howto manager.      (line  652)
+* BFD_RELOC_PPC_RELATIVE:                howto manager.      (line  616)
+* BFD_RELOC_PPC_TLS:                     howto manager.      (line  706)
+* BFD_RELOC_PPC_TLSGD:                   howto manager.      (line  707)
+* BFD_RELOC_PPC_TLSIE:                   howto manager.      (line  710)
+* BFD_RELOC_PPC_TLSLD:                   howto manager.      (line  708)
+* BFD_RELOC_PPC_TLSLE:                   howto manager.      (line  709)
+* BFD_RELOC_PPC_TLSM:                    howto manager.      (line  711)
+* BFD_RELOC_PPC_TLSML:                   howto manager.      (line  712)
 * 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_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)
-* BFD_RELOC_PRU_GNU_DIFF16_PMEM:         howto manager.      (line 2534)
-* BFD_RELOC_PRU_GNU_DIFF32:              howto manager.      (line 2533)
-* BFD_RELOC_PRU_GNU_DIFF32_PMEM:         howto manager.      (line 2535)
-* BFD_RELOC_PRU_GNU_DIFF8:               howto manager.      (line 2531)
-* BFD_RELOC_PRU_LDI32:                   howto manager.      (line 2519)
-* BFD_RELOC_PRU_S10_PCREL:               howto manager.      (line 2523)
-* 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_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_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_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_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_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_PPC_TOC16_HI:                howto manager.      (line  606)
+* BFD_RELOC_PPC_TOC16_LO:                howto manager.      (line  605)
+* BFD_RELOC_PPC_TPREL:                   howto manager.      (line  718)
+* BFD_RELOC_PPC_TPREL16:                 howto manager.      (line  714)
+* BFD_RELOC_PPC_TPREL16_HA:              howto manager.      (line  717)
+* BFD_RELOC_PPC_TPREL16_HI:              howto manager.      (line  716)
+* BFD_RELOC_PPC_TPREL16_LO:              howto manager.      (line  715)
+* BFD_RELOC_PPC_VLE_HA16A:               howto manager.      (line  641)
+* BFD_RELOC_PPC_VLE_HA16D:               howto manager.      (line  642)
+* BFD_RELOC_PPC_VLE_HI16A:               howto manager.      (line  639)
+* BFD_RELOC_PPC_VLE_HI16D:               howto manager.      (line  640)
+* BFD_RELOC_PPC_VLE_LO16A:               howto manager.      (line  637)
+* BFD_RELOC_PPC_VLE_LO16D:               howto manager.      (line  638)
+* BFD_RELOC_PPC_VLE_REL15:               howto manager.      (line  635)
+* BFD_RELOC_PPC_VLE_REL24:               howto manager.      (line  636)
+* BFD_RELOC_PPC_VLE_REL8:                howto manager.      (line  634)
+* BFD_RELOC_PPC_VLE_SDA21:               howto manager.      (line  643)
+* BFD_RELOC_PPC_VLE_SDA21_LO:            howto manager.      (line  644)
+* BFD_RELOC_PPC_VLE_SDAREL_HA16A:        howto manager.      (line  649)
+* BFD_RELOC_PPC_VLE_SDAREL_HA16D:        howto manager.      (line  650)
+* BFD_RELOC_PPC_VLE_SDAREL_HI16A:        howto manager.      (line  647)
+* BFD_RELOC_PPC_VLE_SDAREL_HI16D:        howto manager.      (line  648)
+* BFD_RELOC_PPC_VLE_SDAREL_LO16A:        howto manager.      (line  645)
+* BFD_RELOC_PPC_VLE_SDAREL_LO16D:        howto manager.      (line  646)
+* BFD_RELOC_PRU_16_PMEM:                 howto manager.      (line 2544)
+* BFD_RELOC_PRU_32_PMEM:                 howto manager.      (line 2543)
+* BFD_RELOC_PRU_GNU_DIFF16:              howto manager.      (line 2548)
+* BFD_RELOC_PRU_GNU_DIFF16_PMEM:         howto manager.      (line 2550)
+* BFD_RELOC_PRU_GNU_DIFF32:              howto manager.      (line 2549)
+* BFD_RELOC_PRU_GNU_DIFF32_PMEM:         howto manager.      (line 2551)
+* BFD_RELOC_PRU_GNU_DIFF8:               howto manager.      (line 2547)
+* BFD_RELOC_PRU_LDI32:                   howto manager.      (line 2535)
+* BFD_RELOC_PRU_S10_PCREL:               howto manager.      (line 2539)
+* BFD_RELOC_PRU_U16:                     howto manager.      (line 2531)
+* BFD_RELOC_PRU_U16_PMEMIMM:             howto manager.      (line 2533)
+* BFD_RELOC_PRU_U8_PCREL:                howto manager.      (line 2541)
+* BFD_RELOC_RELC:                        howto manager.      (line 2430)
+* BFD_RELOC_RISCV_32_PCREL:              howto manager.      (line 1898)
+* BFD_RELOC_RISCV_ADD16:                 howto manager.      (line 1866)
+* BFD_RELOC_RISCV_ADD32:                 howto manager.      (line 1867)
+* BFD_RELOC_RISCV_ADD64:                 howto manager.      (line 1868)
+* BFD_RELOC_RISCV_ADD8:                  howto manager.      (line 1865)
+* BFD_RELOC_RISCV_ALIGN:                 howto manager.      (line 1883)
+* BFD_RELOC_RISCV_CALL:                  howto manager.      (line 1863)
+* BFD_RELOC_RISCV_CALL_PLT:              howto manager.      (line 1864)
+* BFD_RELOC_RISCV_CFA:                   howto manager.      (line 1892)
+* BFD_RELOC_RISCV_GOT_HI20:              howto manager.      (line 1873)
+* BFD_RELOC_RISCV_GPREL12_I:             howto manager.      (line 1857)
+* BFD_RELOC_RISCV_GPREL12_S:             howto manager.      (line 1858)
+* BFD_RELOC_RISCV_GPREL_I:               howto manager.      (line 1887)
+* BFD_RELOC_RISCV_GPREL_S:               howto manager.      (line 1888)
+* BFD_RELOC_RISCV_HI20:                  howto manager.      (line 1851)
+* BFD_RELOC_RISCV_JMP:                   howto manager.      (line 1876)
+* BFD_RELOC_RISCV_LO12_I:                howto manager.      (line 1855)
+* BFD_RELOC_RISCV_LO12_S:                howto manager.      (line 1856)
+* BFD_RELOC_RISCV_PCREL_HI20:            howto manager.      (line 1852)
+* BFD_RELOC_RISCV_PCREL_LO12_I:          howto manager.      (line 1853)
+* BFD_RELOC_RISCV_PCREL_LO12_S:          howto manager.      (line 1854)
+* BFD_RELOC_RISCV_RELAX:                 howto manager.      (line 1891)
+* BFD_RELOC_RISCV_RVC_BRANCH:            howto manager.      (line 1884)
+* BFD_RELOC_RISCV_RVC_JUMP:              howto manager.      (line 1885)
+* BFD_RELOC_RISCV_RVC_LUI:               howto manager.      (line 1886)
+* BFD_RELOC_RISCV_SET16:                 howto manager.      (line 1896)
+* BFD_RELOC_RISCV_SET32:                 howto manager.      (line 1897)
+* BFD_RELOC_RISCV_SET6:                  howto manager.      (line 1894)
+* BFD_RELOC_RISCV_SET8:                  howto manager.      (line 1895)
+* BFD_RELOC_RISCV_SUB16:                 howto manager.      (line 1870)
+* BFD_RELOC_RISCV_SUB32:                 howto manager.      (line 1871)
+* BFD_RELOC_RISCV_SUB6:                  howto manager.      (line 1893)
+* BFD_RELOC_RISCV_SUB64:                 howto manager.      (line 1872)
+* BFD_RELOC_RISCV_SUB8:                  howto manager.      (line 1869)
+* BFD_RELOC_RISCV_TLS_DTPMOD32:          howto manager.      (line 1877)
+* BFD_RELOC_RISCV_TLS_DTPMOD64:          howto manager.      (line 1879)
+* BFD_RELOC_RISCV_TLS_DTPREL32:          howto manager.      (line 1878)
+* BFD_RELOC_RISCV_TLS_DTPREL64:          howto manager.      (line 1880)
+* BFD_RELOC_RISCV_TLS_GD_HI20:           howto manager.      (line 1875)
+* BFD_RELOC_RISCV_TLS_GOT_HI20:          howto manager.      (line 1874)
+* BFD_RELOC_RISCV_TLS_TPREL32:           howto manager.      (line 1881)
+* BFD_RELOC_RISCV_TLS_TPREL64:           howto manager.      (line 1882)
+* BFD_RELOC_RISCV_TPREL_ADD:             howto manager.      (line 1862)
+* BFD_RELOC_RISCV_TPREL_HI20:            howto manager.      (line 1859)
+* BFD_RELOC_RISCV_TPREL_I:               howto manager.      (line 1889)
+* BFD_RELOC_RISCV_TPREL_LO12_I:          howto manager.      (line 1860)
+* BFD_RELOC_RISCV_TPREL_LO12_S:          howto manager.      (line 1861)
+* BFD_RELOC_RISCV_TPREL_S:               howto manager.      (line 1890)
+* BFD_RELOC_RL78_16U:                    howto manager.      (line 1908)
+* BFD_RELOC_RL78_16_OP:                  howto manager.      (line 1904)
+* BFD_RELOC_RL78_24U:                    howto manager.      (line 1909)
+* BFD_RELOC_RL78_24_OP:                  howto manager.      (line 1905)
+* BFD_RELOC_RL78_32_OP:                  howto manager.      (line 1906)
+* BFD_RELOC_RL78_8U:                     howto manager.      (line 1907)
+* BFD_RELOC_RL78_ABS16:                  howto manager.      (line 1921)
+* BFD_RELOC_RL78_ABS16U:                 howto manager.      (line 1925)
+* BFD_RELOC_RL78_ABS16UL:                howto manager.      (line 1927)
+* BFD_RELOC_RL78_ABS16UW:                howto manager.      (line 1926)
+* BFD_RELOC_RL78_ABS16_REV:              howto manager.      (line 1922)
+* BFD_RELOC_RL78_ABS32:                  howto manager.      (line 1923)
+* BFD_RELOC_RL78_ABS32_REV:              howto manager.      (line 1924)
+* BFD_RELOC_RL78_ABS8:                   howto manager.      (line 1920)
+* BFD_RELOC_RL78_CODE:                   howto manager.      (line 1932)
+* BFD_RELOC_RL78_DIFF:                   howto manager.      (line 1911)
+* BFD_RELOC_RL78_DIR3U_PCREL:            howto manager.      (line 1910)
+* BFD_RELOC_RL78_GPRELB:                 howto manager.      (line 1912)
+* BFD_RELOC_RL78_GPRELL:                 howto manager.      (line 1914)
+* BFD_RELOC_RL78_GPRELW:                 howto manager.      (line 1913)
+* BFD_RELOC_RL78_HI16:                   howto manager.      (line 1929)
+* BFD_RELOC_RL78_HI8:                    howto manager.      (line 1930)
+* BFD_RELOC_RL78_LO16:                   howto manager.      (line 1931)
+* BFD_RELOC_RL78_NEG16:                  howto manager.      (line 1901)
+* BFD_RELOC_RL78_NEG24:                  howto manager.      (line 1902)
+* BFD_RELOC_RL78_NEG32:                  howto manager.      (line 1903)
+* BFD_RELOC_RL78_NEG8:                   howto manager.      (line 1900)
+* BFD_RELOC_RL78_OP_AND:                 howto manager.      (line 1918)
+* BFD_RELOC_RL78_OP_NEG:                 howto manager.      (line 1917)
+* BFD_RELOC_RL78_OP_SHRA:                howto manager.      (line 1919)
+* BFD_RELOC_RL78_OP_SUBTRACT:            howto manager.      (line 1916)
+* BFD_RELOC_RL78_RELAX:                  howto manager.      (line 1928)
+* BFD_RELOC_RL78_SADDR:                  howto manager.      (line 1933)
+* BFD_RELOC_RL78_SYM:                    howto manager.      (line 1915)
 * 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 1943)
+* BFD_RELOC_RX_16_OP:                    howto manager.      (line 1939)
+* BFD_RELOC_RX_24U:                      howto manager.      (line 1944)
+* BFD_RELOC_RX_24_OP:                    howto manager.      (line 1940)
+* BFD_RELOC_RX_32_OP:                    howto manager.      (line 1941)
+* BFD_RELOC_RX_8U:                       howto manager.      (line 1942)
+* BFD_RELOC_RX_ABS16:                    howto manager.      (line 1954)
+* BFD_RELOC_RX_ABS16U:                   howto manager.      (line 1958)
+* BFD_RELOC_RX_ABS16UL:                  howto manager.      (line 1960)
+* BFD_RELOC_RX_ABS16UW:                  howto manager.      (line 1959)
+* BFD_RELOC_RX_ABS16_REV:                howto manager.      (line 1955)
+* BFD_RELOC_RX_ABS32:                    howto manager.      (line 1956)
+* BFD_RELOC_RX_ABS32_REV:                howto manager.      (line 1957)
+* BFD_RELOC_RX_ABS8:                     howto manager.      (line 1953)
+* BFD_RELOC_RX_DIFF:                     howto manager.      (line 1946)
+* BFD_RELOC_RX_DIR3U_PCREL:              howto manager.      (line 1945)
+* BFD_RELOC_RX_GPRELB:                   howto manager.      (line 1947)
+* BFD_RELOC_RX_GPRELL:                   howto manager.      (line 1949)
+* BFD_RELOC_RX_GPRELW:                   howto manager.      (line 1948)
+* BFD_RELOC_RX_NEG16:                    howto manager.      (line 1936)
+* BFD_RELOC_RX_NEG24:                    howto manager.      (line 1937)
+* BFD_RELOC_RX_NEG32:                    howto manager.      (line 1938)
+* BFD_RELOC_RX_NEG8:                     howto manager.      (line 1935)
+* BFD_RELOC_RX_OP_NEG:                   howto manager.      (line 1952)
+* BFD_RELOC_RX_OP_SUBTRACT:              howto manager.      (line 1951)
+* BFD_RELOC_RX_RELAX:                    howto manager.      (line 1961)
+* BFD_RELOC_RX_SYM:                      howto manager.      (line 1950)
+* BFD_RELOC_S12Z_15_PCREL:               howto manager.      (line 2273)
+* BFD_RELOC_S12Z_OPR:                    howto manager.      (line 3450)
+* BFD_RELOC_SCORE16_BRANCH:              howto manager.      (line 2064)
+* BFD_RELOC_SCORE16_JMP:                 howto manager.      (line 2062)
+* BFD_RELOC_SCORE_BCMP:                  howto manager.      (line 2066)
+* BFD_RELOC_SCORE_BRANCH:                howto manager.      (line 2056)
+* BFD_RELOC_SCORE_CALL15:                howto manager.      (line 2070)
+* BFD_RELOC_SCORE_DUMMY2:                howto manager.      (line 2053)
+* BFD_RELOC_SCORE_DUMMY_HI16:            howto manager.      (line 2071)
+* BFD_RELOC_SCORE_GOT15:                 howto manager.      (line 2068)
+* BFD_RELOC_SCORE_GOT_LO16:              howto manager.      (line 2069)
+* BFD_RELOC_SCORE_GPREL15:               howto manager.      (line 2051)
+* BFD_RELOC_SCORE_IMM30:                 howto manager.      (line 2058)
+* BFD_RELOC_SCORE_IMM32:                 howto manager.      (line 2060)
+* BFD_RELOC_SCORE_JMP:                   howto manager.      (line 2054)
+* BFD_RELOC_SH_ALIGN:                    howto manager.      (line  965)
+* BFD_RELOC_SH_CODE:                     howto manager.      (line  966)
+* BFD_RELOC_SH_COPY:                     howto manager.      (line  971)
+* BFD_RELOC_SH_COPY64:                   howto manager.      (line  996)
+* BFD_RELOC_SH_COUNT:                    howto manager.      (line  964)
+* BFD_RELOC_SH_DATA:                     howto manager.      (line  967)
+* BFD_RELOC_SH_DISP12:                   howto manager.      (line  947)
+* BFD_RELOC_SH_DISP12BY2:                howto manager.      (line  948)
+* BFD_RELOC_SH_DISP12BY4:                howto manager.      (line  949)
+* BFD_RELOC_SH_DISP12BY8:                howto manager.      (line  950)
+* BFD_RELOC_SH_DISP20:                   howto manager.      (line  951)
+* BFD_RELOC_SH_DISP20BY8:                howto manager.      (line  952)
+* BFD_RELOC_SH_FUNCDESC:                 howto manager.      (line 1039)
+* BFD_RELOC_SH_GLOB_DAT:                 howto manager.      (line  972)
+* BFD_RELOC_SH_GLOB_DAT64:               howto manager.      (line  997)
+* BFD_RELOC_SH_GOT10BY4:                 howto manager.      (line 1000)
+* BFD_RELOC_SH_GOT10BY8:                 howto manager.      (line 1001)
+* BFD_RELOC_SH_GOT20:                    howto manager.      (line 1033)
+* BFD_RELOC_SH_GOTFUNCDESC:              howto manager.      (line 1035)
+* BFD_RELOC_SH_GOTFUNCDESC20:            howto manager.      (line 1036)
+* BFD_RELOC_SH_GOTOFF20:                 howto manager.      (line 1034)
+* BFD_RELOC_SH_GOTOFFFUNCDESC:           howto manager.      (line 1037)
+* BFD_RELOC_SH_GOTOFFFUNCDESC20:         howto manager.      (line 1038)
+* BFD_RELOC_SH_GOTOFF_HI16:              howto manager.      (line  991)
+* BFD_RELOC_SH_GOTOFF_LOW16:             howto manager.      (line  988)
+* BFD_RELOC_SH_GOTOFF_MEDHI16:           howto manager.      (line  990)
+* BFD_RELOC_SH_GOTOFF_MEDLOW16:          howto manager.      (line  989)
+* BFD_RELOC_SH_GOTPC:                    howto manager.      (line  975)
+* BFD_RELOC_SH_GOTPC_HI16:               howto manager.      (line  995)
+* BFD_RELOC_SH_GOTPC_LOW16:              howto manager.      (line  992)
+* BFD_RELOC_SH_GOTPC_MEDHI16:            howto manager.      (line  994)
+* BFD_RELOC_SH_GOTPC_MEDLOW16:           howto manager.      (line  993)
+* BFD_RELOC_SH_GOTPLT10BY4:              howto manager.      (line 1002)
+* BFD_RELOC_SH_GOTPLT10BY8:              howto manager.      (line 1003)
+* BFD_RELOC_SH_GOTPLT32:                 howto manager.      (line 1004)
+* BFD_RELOC_SH_GOTPLT_HI16:              howto manager.      (line  983)
+* BFD_RELOC_SH_GOTPLT_LOW16:             howto manager.      (line  980)
+* BFD_RELOC_SH_GOTPLT_MEDHI16:           howto manager.      (line  982)
+* BFD_RELOC_SH_GOTPLT_MEDLOW16:          howto manager.      (line  981)
+* BFD_RELOC_SH_GOT_HI16:                 howto manager.      (line  979)
+* BFD_RELOC_SH_GOT_LOW16:                howto manager.      (line  976)
+* BFD_RELOC_SH_GOT_MEDHI16:              howto manager.      (line  978)
+* BFD_RELOC_SH_GOT_MEDLOW16:             howto manager.      (line  977)
+* BFD_RELOC_SH_IMM3:                     howto manager.      (line  945)
+* BFD_RELOC_SH_IMM3U:                    howto manager.      (line  946)
+* BFD_RELOC_SH_IMM4:                     howto manager.      (line  953)
+* BFD_RELOC_SH_IMM4BY2:                  howto manager.      (line  954)
+* BFD_RELOC_SH_IMM4BY4:                  howto manager.      (line  955)
+* BFD_RELOC_SH_IMM8:                     howto manager.      (line  956)
+* BFD_RELOC_SH_IMM8BY2:                  howto manager.      (line  957)
+* BFD_RELOC_SH_IMM8BY4:                  howto manager.      (line  958)
+* BFD_RELOC_SH_IMMS10:                   howto manager.      (line 1010)
+* BFD_RELOC_SH_IMMS10BY2:                howto manager.      (line 1011)
+* BFD_RELOC_SH_IMMS10BY4:                howto manager.      (line 1012)
+* BFD_RELOC_SH_IMMS10BY8:                howto manager.      (line 1013)
+* BFD_RELOC_SH_IMMS16:                   howto manager.      (line 1014)
+* BFD_RELOC_SH_IMMS6:                    howto manager.      (line 1007)
+* BFD_RELOC_SH_IMMS6BY32:                howto manager.      (line 1008)
+* BFD_RELOC_SH_IMMU16:                   howto manager.      (line 1015)
+* BFD_RELOC_SH_IMMU5:                    howto manager.      (line 1006)
+* BFD_RELOC_SH_IMMU6:                    howto manager.      (line 1009)
+* BFD_RELOC_SH_IMM_HI16:                 howto manager.      (line 1022)
+* BFD_RELOC_SH_IMM_HI16_PCREL:           howto manager.      (line 1023)
+* BFD_RELOC_SH_IMM_LOW16:                howto manager.      (line 1016)
+* BFD_RELOC_SH_IMM_LOW16_PCREL:          howto manager.      (line 1017)
+* BFD_RELOC_SH_IMM_MEDHI16:              howto manager.      (line 1020)
+* BFD_RELOC_SH_IMM_MEDHI16_PCREL:        howto manager.      (line 1021)
+* BFD_RELOC_SH_IMM_MEDLOW16:             howto manager.      (line 1018)
+* BFD_RELOC_SH_IMM_MEDLOW16_PCREL:       howto manager.      (line 1019)
+* BFD_RELOC_SH_JMP_SLOT:                 howto manager.      (line  973)
+* BFD_RELOC_SH_JMP_SLOT64:               howto manager.      (line  998)
+* BFD_RELOC_SH_LABEL:                    howto manager.      (line  968)
+* BFD_RELOC_SH_LOOP_END:                 howto manager.      (line  970)
+* BFD_RELOC_SH_LOOP_START:               howto manager.      (line  969)
+* BFD_RELOC_SH_PCDISP12BY2:              howto manager.      (line  944)
+* BFD_RELOC_SH_PCDISP8BY2:               howto manager.      (line  943)
+* BFD_RELOC_SH_PCRELIMM8BY2:             howto manager.      (line  959)
+* BFD_RELOC_SH_PCRELIMM8BY4:             howto manager.      (line  960)
+* BFD_RELOC_SH_PLT_HI16:                 howto manager.      (line  987)
+* BFD_RELOC_SH_PLT_LOW16:                howto manager.      (line  984)
+* BFD_RELOC_SH_PLT_MEDHI16:              howto manager.      (line  986)
+* BFD_RELOC_SH_PLT_MEDLOW16:             howto manager.      (line  985)
+* BFD_RELOC_SH_PT_16:                    howto manager.      (line 1024)
+* BFD_RELOC_SH_RELATIVE:                 howto manager.      (line  974)
+* BFD_RELOC_SH_RELATIVE64:               howto manager.      (line  999)
+* BFD_RELOC_SH_SHMEDIA_CODE:             howto manager.      (line 1005)
+* BFD_RELOC_SH_SWITCH16:                 howto manager.      (line  961)
+* BFD_RELOC_SH_SWITCH32:                 howto manager.      (line  962)
+* BFD_RELOC_SH_TLS_DTPMOD32:             howto manager.      (line 1030)
+* BFD_RELOC_SH_TLS_DTPOFF32:             howto manager.      (line 1031)
+* BFD_RELOC_SH_TLS_GD_32:                howto manager.      (line 1025)
+* BFD_RELOC_SH_TLS_IE_32:                howto manager.      (line 1028)
+* BFD_RELOC_SH_TLS_LDO_32:               howto manager.      (line 1027)
+* BFD_RELOC_SH_TLS_LD_32:                howto manager.      (line 1026)
+* BFD_RELOC_SH_TLS_LE_32:                howto manager.      (line 1029)
+* BFD_RELOC_SH_TLS_TPOFF32:              howto manager.      (line 1032)
+* BFD_RELOC_SH_USES:                     howto manager.      (line  963)
 * BFD_RELOC_SIZE32:                      howto manager.      (line   67)
 * BFD_RELOC_SIZE64:                      howto manager.      (line   68)
 * BFD_RELOC_SPARC13:                     howto manager.      (line  121)
@@ -14192,282 +14352,282 @@ 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  795)
+* BFD_RELOC_THUMB_PCREL_BLX:             howto manager.      (line  784)
+* BFD_RELOC_THUMB_PCREL_BRANCH12:        howto manager.      (line  807)
+* BFD_RELOC_THUMB_PCREL_BRANCH20:        howto manager.      (line  808)
+* BFD_RELOC_THUMB_PCREL_BRANCH23:        howto manager.      (line  809)
+* BFD_RELOC_THUMB_PCREL_BRANCH25:        howto manager.      (line  810)
+* BFD_RELOC_THUMB_PCREL_BRANCH5:         howto manager.      (line  793)
+* BFD_RELOC_THUMB_PCREL_BRANCH7:         howto manager.      (line  805)
+* BFD_RELOC_THUMB_PCREL_BRANCH9:         howto manager.      (line  806)
+* BFD_RELOC_TIC30_LDP:                   howto manager.      (line 1562)
+* BFD_RELOC_TIC54X_16_OF_23:             howto manager.      (line 1576)
+* BFD_RELOC_TIC54X_23:                   howto manager.      (line 1574)
+* BFD_RELOC_TIC54X_MS7_OF_23:            howto manager.      (line 1580)
+* BFD_RELOC_TIC54X_PARTLS7:              howto manager.      (line 1566)
+* BFD_RELOC_TIC54X_PARTMS9:              howto manager.      (line 1570)
+* BFD_RELOC_TILEGX_BROFF_X1:             howto manager.      (line 3245)
+* BFD_RELOC_TILEGX_COPY:                 howto manager.      (line 3241)
+* BFD_RELOC_TILEGX_DEST_IMM8_X1:         howto manager.      (line 3252)
+* BFD_RELOC_TILEGX_GLOB_DAT:             howto manager.      (line 3242)
+* BFD_RELOC_TILEGX_HW0:                  howto manager.      (line 3234)
+* BFD_RELOC_TILEGX_HW0_LAST:             howto manager.      (line 3238)
+* BFD_RELOC_TILEGX_HW1:                  howto manager.      (line 3235)
+* BFD_RELOC_TILEGX_HW1_LAST:             howto manager.      (line 3239)
+* BFD_RELOC_TILEGX_HW2:                  howto manager.      (line 3236)
+* BFD_RELOC_TILEGX_HW2_LAST:             howto manager.      (line 3240)
+* BFD_RELOC_TILEGX_HW3:                  howto manager.      (line 3237)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0:         howto manager.      (line 3261)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT:     howto manager.      (line 3289)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST:    howto manager.      (line 3269)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager.     (line 3297)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager.   (line 3283)
 * 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 3317)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager.  (line 3311)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager.  (line 3323)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager.  (line 3307)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL:   howto manager.      (line 3275)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager.    (line 3291)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:  howto manager.      (line 3303)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:  howto manager.      (line 3315)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:  howto manager.      (line 3305)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1:         howto manager.      (line 3263)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST:    howto manager.      (line 3271)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager.     (line 3299)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager.   (line 3285)
 * 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 3319)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager.  (line 3313)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager.  (line 3325)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager.  (line 3309)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL:   howto manager.      (line 3277)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager.    (line 3293)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2:         howto manager.      (line 3265)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST:    howto manager.      (line 3273)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager.   (line 3287)
 * 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 3321)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL:   howto manager.      (line 3279)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager.    (line 3295)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3:         howto manager.      (line 3267)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL:   howto manager.      (line 3281)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager.    (line 3301)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0:         howto manager.      (line 3262)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT:     howto manager.      (line 3290)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST:    howto manager.      (line 3270)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager.     (line 3298)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager.   (line 3284)
 * 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 3318)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager.  (line 3312)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager.  (line 3324)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager.  (line 3308)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL:   howto manager.      (line 3276)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager.    (line 3292)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:  howto manager.      (line 3304)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:  howto manager.      (line 3316)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:  howto manager.      (line 3306)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1:         howto manager.      (line 3264)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST:    howto manager.      (line 3272)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager.     (line 3300)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager.   (line 3286)
 * 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 3320)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager.  (line 3314)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager.  (line 3326)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager.  (line 3310)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL:   howto manager.      (line 3278)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager.    (line 3294)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2:         howto manager.      (line 3266)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST:    howto manager.      (line 3274)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager.   (line 3288)
 * 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 3322)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL:   howto manager.      (line 3280)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager.    (line 3296)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3:         howto manager.      (line 3268)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL:   howto manager.      (line 3282)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager.    (line 3302)
+* BFD_RELOC_TILEGX_IMM8_X0:              howto manager.      (line 3248)
+* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:      howto manager.      (line 3339)
+* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:   howto manager.      (line 3334)
+* BFD_RELOC_TILEGX_IMM8_X1:              howto manager.      (line 3250)
+* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:      howto manager.      (line 3340)
+* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:   howto manager.      (line 3335)
+* BFD_RELOC_TILEGX_IMM8_Y0:              howto manager.      (line 3249)
+* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:      howto manager.      (line 3341)
+* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:   howto manager.      (line 3336)
+* BFD_RELOC_TILEGX_IMM8_Y1:              howto manager.      (line 3251)
+* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:      howto manager.      (line 3342)
+* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:   howto manager.      (line 3337)
+* BFD_RELOC_TILEGX_JMP_SLOT:             howto manager.      (line 3243)
+* BFD_RELOC_TILEGX_JUMPOFF_X1:           howto manager.      (line 3246)
+* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT:       howto manager.      (line 3247)
+* BFD_RELOC_TILEGX_MF_IMM14_X1:          howto manager.      (line 3254)
+* BFD_RELOC_TILEGX_MMEND_X0:             howto manager.      (line 3256)
+* BFD_RELOC_TILEGX_MMSTART_X0:           howto manager.      (line 3255)
+* BFD_RELOC_TILEGX_MT_IMM14_X1:          howto manager.      (line 3253)
+* BFD_RELOC_TILEGX_RELATIVE:             howto manager.      (line 3244)
+* BFD_RELOC_TILEGX_SHAMT_X0:             howto manager.      (line 3257)
+* BFD_RELOC_TILEGX_SHAMT_X1:             howto manager.      (line 3258)
+* BFD_RELOC_TILEGX_SHAMT_Y0:             howto manager.      (line 3259)
+* BFD_RELOC_TILEGX_SHAMT_Y1:             howto manager.      (line 3260)
+* BFD_RELOC_TILEGX_TLS_DTPMOD32:         howto manager.      (line 3330)
+* BFD_RELOC_TILEGX_TLS_DTPMOD64:         howto manager.      (line 3327)
+* BFD_RELOC_TILEGX_TLS_DTPOFF32:         howto manager.      (line 3331)
+* BFD_RELOC_TILEGX_TLS_DTPOFF64:         howto manager.      (line 3328)
+* BFD_RELOC_TILEGX_TLS_GD_CALL:          howto manager.      (line 3333)
+* BFD_RELOC_TILEGX_TLS_IE_LOAD:          howto manager.      (line 3338)
+* BFD_RELOC_TILEGX_TLS_TPOFF32:          howto manager.      (line 3332)
+* BFD_RELOC_TILEGX_TLS_TPOFF64:          howto manager.      (line 3329)
+* BFD_RELOC_TILEPRO_BROFF_X1:            howto manager.      (line 3158)
+* BFD_RELOC_TILEPRO_COPY:                howto manager.      (line 3154)
+* BFD_RELOC_TILEPRO_DEST_IMM8_X1:        howto manager.      (line 3165)
+* BFD_RELOC_TILEPRO_GLOB_DAT:            howto manager.      (line 3155)
+* BFD_RELOC_TILEPRO_IMM16_X0:            howto manager.      (line 3168)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT:        howto manager.      (line 3184)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA:     howto manager.      (line 3190)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI:     howto manager.      (line 3188)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO:     howto manager.      (line 3186)
+* BFD_RELOC_TILEPRO_IMM16_X0_HA:         howto manager.      (line 3174)
+* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL:   howto manager.      (line 3182)
+* BFD_RELOC_TILEPRO_IMM16_X0_HI:         howto manager.      (line 3172)
+* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL:   howto manager.      (line 3180)
+* BFD_RELOC_TILEPRO_IMM16_X0_LO:         howto manager.      (line 3170)
+* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL:   howto manager.      (line 3178)
+* BFD_RELOC_TILEPRO_IMM16_X0_PCREL:      howto manager.      (line 3176)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:     howto manager.      (line 3206)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:  howto manager.      (line 3212)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:  howto manager.      (line 3210)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:  howto manager.      (line 3208)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:     howto manager.      (line 3214)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:  howto manager.      (line 3220)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:  howto manager.      (line 3218)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:  howto manager.      (line 3216)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:     howto manager.      (line 3225)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:  howto manager.      (line 3231)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:  howto manager.      (line 3229)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:  howto manager.      (line 3227)
+* BFD_RELOC_TILEPRO_IMM16_X1:            howto manager.      (line 3169)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT:        howto manager.      (line 3185)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA:     howto manager.      (line 3191)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI:     howto manager.      (line 3189)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO:     howto manager.      (line 3187)
+* BFD_RELOC_TILEPRO_IMM16_X1_HA:         howto manager.      (line 3175)
+* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL:   howto manager.      (line 3183)
+* BFD_RELOC_TILEPRO_IMM16_X1_HI:         howto manager.      (line 3173)
+* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL:   howto manager.      (line 3181)
+* BFD_RELOC_TILEPRO_IMM16_X1_LO:         howto manager.      (line 3171)
+* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL:   howto manager.      (line 3179)
+* BFD_RELOC_TILEPRO_IMM16_X1_PCREL:      howto manager.      (line 3177)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:     howto manager.      (line 3207)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:  howto manager.      (line 3213)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:  howto manager.      (line 3211)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:  howto manager.      (line 3209)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:     howto manager.      (line 3215)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:  howto manager.      (line 3221)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:  howto manager.      (line 3219)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:  howto manager.      (line 3217)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:     howto manager.      (line 3226)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:  howto manager.      (line 3232)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:  howto manager.      (line 3230)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:  howto manager.      (line 3228)
+* BFD_RELOC_TILEPRO_IMM8_X0:             howto manager.      (line 3161)
+* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:  howto manager.      (line 3201)
+* BFD_RELOC_TILEPRO_IMM8_X1:             howto manager.      (line 3163)
+* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:  howto manager.      (line 3202)
+* BFD_RELOC_TILEPRO_IMM8_Y0:             howto manager.      (line 3162)
+* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:  howto manager.      (line 3203)
+* BFD_RELOC_TILEPRO_IMM8_Y1:             howto manager.      (line 3164)
+* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:  howto manager.      (line 3204)
+* BFD_RELOC_TILEPRO_JMP_SLOT:            howto manager.      (line 3156)
+* BFD_RELOC_TILEPRO_JOFFLONG_X1:         howto manager.      (line 3159)
+* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT:     howto manager.      (line 3160)
+* BFD_RELOC_TILEPRO_MF_IMM15_X1:         howto manager.      (line 3167)
+* BFD_RELOC_TILEPRO_MMEND_X0:            howto manager.      (line 3193)
+* BFD_RELOC_TILEPRO_MMEND_X1:            howto manager.      (line 3195)
+* BFD_RELOC_TILEPRO_MMSTART_X0:          howto manager.      (line 3192)
+* BFD_RELOC_TILEPRO_MMSTART_X1:          howto manager.      (line 3194)
+* BFD_RELOC_TILEPRO_MT_IMM15_X1:         howto manager.      (line 3166)
+* BFD_RELOC_TILEPRO_RELATIVE:            howto manager.      (line 3157)
+* BFD_RELOC_TILEPRO_SHAMT_X0:            howto manager.      (line 3196)
+* BFD_RELOC_TILEPRO_SHAMT_X1:            howto manager.      (line 3197)
+* BFD_RELOC_TILEPRO_SHAMT_Y0:            howto manager.      (line 3198)
+* BFD_RELOC_TILEPRO_SHAMT_Y1:            howto manager.      (line 3199)
+* BFD_RELOC_TILEPRO_TLS_DTPMOD32:        howto manager.      (line 3222)
+* BFD_RELOC_TILEPRO_TLS_DTPOFF32:        howto manager.      (line 3223)
+* BFD_RELOC_TILEPRO_TLS_GD_CALL:         howto manager.      (line 3200)
+* BFD_RELOC_TILEPRO_TLS_IE_LOAD:         howto manager.      (line 3205)
+* BFD_RELOC_TILEPRO_TLS_TPOFF32:         howto manager.      (line 3224)
+* bfd_reloc_type_lookup:                 howto manager.      (line 3454)
+* BFD_RELOC_V850_16_GOT:                 howto manager.      (line 1538)
+* BFD_RELOC_V850_16_GOTOFF:              howto manager.      (line 1554)
+* BFD_RELOC_V850_16_PCREL:               howto manager.      (line 1518)
+* BFD_RELOC_V850_16_S1:                  howto manager.      (line 1530)
+* BFD_RELOC_V850_16_SPLIT_OFFSET:        howto manager.      (line 1528)
+* BFD_RELOC_V850_17_PCREL:               howto manager.      (line 1520)
+* BFD_RELOC_V850_22_PCREL:               howto manager.      (line 1472)
+* BFD_RELOC_V850_22_PLT_PCREL:           howto manager.      (line 1542)
+* BFD_RELOC_V850_23:                     howto manager.      (line 1522)
+* BFD_RELOC_V850_32_ABS:                 howto manager.      (line 1526)
+* BFD_RELOC_V850_32_GOT:                 howto manager.      (line 1540)
+* BFD_RELOC_V850_32_GOTOFF:              howto manager.      (line 1556)
+* BFD_RELOC_V850_32_GOTPCREL:            howto manager.      (line 1536)
+* BFD_RELOC_V850_32_PCREL:               howto manager.      (line 1524)
+* BFD_RELOC_V850_32_PLT_PCREL:           howto manager.      (line 1544)
+* BFD_RELOC_V850_9_PCREL:                howto manager.      (line 1470)
+* BFD_RELOC_V850_ALIGN:                  howto manager.      (line 1513)
+* BFD_RELOC_V850_CALLT_15_16_OFFSET:     howto manager.      (line 1534)
+* BFD_RELOC_V850_CALLT_16_16_OFFSET:     howto manager.      (line 1507)
+* BFD_RELOC_V850_CALLT_6_7_OFFSET:       howto manager.      (line 1505)
+* BFD_RELOC_V850_CODE:                   howto manager.      (line 1558)
+* BFD_RELOC_V850_COPY:                   howto manager.      (line 1546)
+* BFD_RELOC_V850_DATA:                   howto manager.      (line 1560)
+* BFD_RELOC_V850_GLOB_DAT:               howto manager.      (line 1548)
+* BFD_RELOC_V850_JMP_SLOT:               howto manager.      (line 1550)
+* BFD_RELOC_V850_LO16_S1:                howto manager.      (line 1532)
+* BFD_RELOC_V850_LO16_SPLIT_OFFSET:      howto manager.      (line 1515)
+* BFD_RELOC_V850_LONGCALL:               howto manager.      (line 1509)
+* BFD_RELOC_V850_LONGJUMP:               howto manager.      (line 1511)
+* BFD_RELOC_V850_RELATIVE:               howto manager.      (line 1552)
+* BFD_RELOC_V850_SDA_15_16_OFFSET:       howto manager.      (line 1476)
+* BFD_RELOC_V850_SDA_16_16_OFFSET:       howto manager.      (line 1474)
+* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager.      (line 1499)
+* BFD_RELOC_V850_TDA_16_16_OFFSET:       howto manager.      (line 1492)
+* BFD_RELOC_V850_TDA_4_4_OFFSET:         howto manager.      (line 1497)
+* BFD_RELOC_V850_TDA_4_5_OFFSET:         howto manager.      (line 1494)
+* BFD_RELOC_V850_TDA_6_8_OFFSET:         howto manager.      (line 1484)
+* BFD_RELOC_V850_TDA_7_7_OFFSET:         howto manager.      (line 1490)
+* BFD_RELOC_V850_TDA_7_8_OFFSET:         howto manager.      (line 1487)
+* BFD_RELOC_V850_ZDA_15_16_OFFSET:       howto manager.      (line 1481)
+* BFD_RELOC_V850_ZDA_16_16_OFFSET:       howto manager.      (line 1479)
+* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager.      (line 1502)
+* BFD_RELOC_VAX_GLOB_DAT:                howto manager.      (line 2437)
+* BFD_RELOC_VAX_JMP_SLOT:                howto manager.      (line 2438)
+* BFD_RELOC_VAX_RELATIVE:                howto manager.      (line 2439)
+* BFD_RELOC_VISIUM_HI16:                 howto manager.      (line 3365)
+* BFD_RELOC_VISIUM_HI16_PCREL:           howto manager.      (line 3369)
+* BFD_RELOC_VISIUM_IM16:                 howto manager.      (line 3367)
+* BFD_RELOC_VISIUM_IM16_PCREL:           howto manager.      (line 3371)
+* BFD_RELOC_VISIUM_LO16:                 howto manager.      (line 3366)
+* BFD_RELOC_VISIUM_LO16_PCREL:           howto manager.      (line 3370)
+* BFD_RELOC_VISIUM_REL16:                howto manager.      (line 3368)
+* BFD_RELOC_VPE4KMATH_DATA:              howto manager.      (line 2094)
+* BFD_RELOC_VPE4KMATH_INSN:              howto manager.      (line 2095)
+* BFD_RELOC_VTABLE_ENTRY:                howto manager.      (line 2098)
+* BFD_RELOC_VTABLE_INHERIT:              howto manager.      (line 2097)
+* BFD_RELOC_WASM32_ABS32_CODE:           howto manager.      (line 3378)
+* BFD_RELOC_WASM32_CODE_POINTER:         howto manager.      (line 3380)
+* BFD_RELOC_WASM32_COPY:                 howto manager.      (line 3379)
+* BFD_RELOC_WASM32_INDEX:                howto manager.      (line 3381)
+* BFD_RELOC_WASM32_LEB128:               howto manager.      (line 3373)
+* BFD_RELOC_WASM32_LEB128_GOT:           howto manager.      (line 3374)
+* BFD_RELOC_WASM32_LEB128_GOT_CODE:      howto manager.      (line 3375)
+* BFD_RELOC_WASM32_LEB128_PLT:           howto manager.      (line 3376)
+* BFD_RELOC_WASM32_PLT_INDEX:            howto manager.      (line 3377)
+* BFD_RELOC_WASM32_PLT_SIG:              howto manager.      (line 3382)
 * BFD_RELOC_X86_64_32S:                  howto manager.      (line  554)
 * BFD_RELOC_X86_64_COPY:                 howto manager.      (line  549)
 * BFD_RELOC_X86_64_DTPMOD64:             howto manager.      (line  555)
@@ -14499,96 +14659,109 @@ 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_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_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_RELOC_XC16X_PAG:                   howto manager.      (line 2432)
+* BFD_RELOC_XC16X_POF:                   howto manager.      (line 2433)
+* BFD_RELOC_XC16X_SEG:                   howto manager.      (line 2434)
+* BFD_RELOC_XC16X_SOF:                   howto manager.      (line 2435)
+* BFD_RELOC_XGATE_24:                    howto manager.      (line 2241)
+* BFD_RELOC_XGATE_GPAGE:                 howto manager.      (line 2239)
+* BFD_RELOC_XGATE_IMM3:                  howto manager.      (line 2253)
+* BFD_RELOC_XGATE_IMM4:                  howto manager.      (line 2255)
+* BFD_RELOC_XGATE_IMM5:                  howto manager.      (line 2257)
+* BFD_RELOC_XGATE_IMM8_HI:               howto manager.      (line 2250)
+* BFD_RELOC_XGATE_IMM8_LO:               howto manager.      (line 2247)
+* BFD_RELOC_XGATE_LO16:                  howto manager.      (line 2236)
+* BFD_RELOC_XGATE_PCREL_10:              howto manager.      (line 2245)
+* BFD_RELOC_XGATE_PCREL_9:               howto manager.      (line 2243)
+* BFD_RELOC_XGATE_RL_GROUP:              howto manager.      (line 2232)
+* BFD_RELOC_XGATE_RL_JUMP:               howto manager.      (line 2229)
+* BFD_RELOC_XSTORMY16_12:                howto manager.      (line 2426)
+* BFD_RELOC_XSTORMY16_24:                howto manager.      (line 2427)
+* BFD_RELOC_XSTORMY16_FPTR16:            howto manager.      (line 2428)
+* BFD_RELOC_XSTORMY16_REL_12:            howto manager.      (line 2425)
+* BFD_RELOC_XTENSA_ASM_EXPAND:           howto manager.      (line 2627)
+* BFD_RELOC_XTENSA_ASM_SIMPLIFY:         howto manager.      (line 2631)
+* BFD_RELOC_XTENSA_DIFF16:               howto manager.      (line 2576)
+* BFD_RELOC_XTENSA_DIFF32:               howto manager.      (line 2577)
+* BFD_RELOC_XTENSA_DIFF8:                howto manager.      (line 2575)
+* BFD_RELOC_XTENSA_GLOB_DAT:             howto manager.      (line 2567)
+* BFD_RELOC_XTENSA_JMP_SLOT:             howto manager.      (line 2568)
+* BFD_RELOC_XTENSA_NDIFF16:              howto manager.      (line 2647)
+* BFD_RELOC_XTENSA_NDIFF32:              howto manager.      (line 2648)
+* BFD_RELOC_XTENSA_NDIFF8:               howto manager.      (line 2646)
+* BFD_RELOC_XTENSA_OP0:                  howto manager.      (line 2622)
+* BFD_RELOC_XTENSA_OP1:                  howto manager.      (line 2623)
+* BFD_RELOC_XTENSA_OP2:                  howto manager.      (line 2624)
+* BFD_RELOC_XTENSA_PDIFF16:              howto manager.      (line 2644)
+* BFD_RELOC_XTENSA_PDIFF32:              howto manager.      (line 2645)
+* BFD_RELOC_XTENSA_PDIFF8:               howto manager.      (line 2643)
+* BFD_RELOC_XTENSA_PLT:                  howto manager.      (line 2571)
+* BFD_RELOC_XTENSA_RELATIVE:             howto manager.      (line 2569)
+* BFD_RELOC_XTENSA_RTLD:                 howto manager.      (line 2563)
+* BFD_RELOC_XTENSA_SLOT0_ALT:            howto manager.      (line 2605)
+* BFD_RELOC_XTENSA_SLOT0_OP:             howto manager.      (line 2586)
+* BFD_RELOC_XTENSA_SLOT10_ALT:           howto manager.      (line 2615)
+* BFD_RELOC_XTENSA_SLOT10_OP:            howto manager.      (line 2596)
+* BFD_RELOC_XTENSA_SLOT11_ALT:           howto manager.      (line 2616)
+* BFD_RELOC_XTENSA_SLOT11_OP:            howto manager.      (line 2597)
+* BFD_RELOC_XTENSA_SLOT12_ALT:           howto manager.      (line 2617)
+* BFD_RELOC_XTENSA_SLOT12_OP:            howto manager.      (line 2598)
+* BFD_RELOC_XTENSA_SLOT13_ALT:           howto manager.      (line 2618)
+* BFD_RELOC_XTENSA_SLOT13_OP:            howto manager.      (line 2599)
+* BFD_RELOC_XTENSA_SLOT14_ALT:           howto manager.      (line 2619)
+* BFD_RELOC_XTENSA_SLOT14_OP:            howto manager.      (line 2600)
+* BFD_RELOC_XTENSA_SLOT1_ALT:            howto manager.      (line 2606)
+* BFD_RELOC_XTENSA_SLOT1_OP:             howto manager.      (line 2587)
+* BFD_RELOC_XTENSA_SLOT2_ALT:            howto manager.      (line 2607)
+* BFD_RELOC_XTENSA_SLOT2_OP:             howto manager.      (line 2588)
+* BFD_RELOC_XTENSA_SLOT3_ALT:            howto manager.      (line 2608)
+* BFD_RELOC_XTENSA_SLOT3_OP:             howto manager.      (line 2589)
+* BFD_RELOC_XTENSA_SLOT4_ALT:            howto manager.      (line 2609)
+* BFD_RELOC_XTENSA_SLOT4_OP:             howto manager.      (line 2590)
+* BFD_RELOC_XTENSA_SLOT5_ALT:            howto manager.      (line 2610)
+* BFD_RELOC_XTENSA_SLOT5_OP:             howto manager.      (line 2591)
+* BFD_RELOC_XTENSA_SLOT6_ALT:            howto manager.      (line 2611)
+* BFD_RELOC_XTENSA_SLOT6_OP:             howto manager.      (line 2592)
+* BFD_RELOC_XTENSA_SLOT7_ALT:            howto manager.      (line 2612)
+* BFD_RELOC_XTENSA_SLOT7_OP:             howto manager.      (line 2593)
+* BFD_RELOC_XTENSA_SLOT8_ALT:            howto manager.      (line 2613)
+* BFD_RELOC_XTENSA_SLOT8_OP:             howto manager.      (line 2594)
+* BFD_RELOC_XTENSA_SLOT9_ALT:            howto manager.      (line 2614)
+* BFD_RELOC_XTENSA_SLOT9_OP:             howto manager.      (line 2595)
+* BFD_RELOC_XTENSA_TLSDESC_ARG:          howto manager.      (line 2636)
+* BFD_RELOC_XTENSA_TLSDESC_FN:           howto manager.      (line 2635)
+* BFD_RELOC_XTENSA_TLS_ARG:              howto manager.      (line 2640)
+* BFD_RELOC_XTENSA_TLS_CALL:             howto manager.      (line 2641)
+* BFD_RELOC_XTENSA_TLS_DTPOFF:           howto manager.      (line 2637)
+* BFD_RELOC_XTENSA_TLS_FUNC:             howto manager.      (line 2639)
+* BFD_RELOC_XTENSA_TLS_TPOFF:            howto manager.      (line 2638)
+* BFD_RELOC_Z80_16_BE:                   howto manager.      (line 2672)
+* BFD_RELOC_Z80_BYTE0:                   howto manager.      (line 2660)
+* BFD_RELOC_Z80_BYTE1:                   howto manager.      (line 2662)
+* BFD_RELOC_Z80_BYTE2:                   howto manager.      (line 2664)
+* BFD_RELOC_Z80_BYTE3:                   howto manager.      (line 2666)
+* BFD_RELOC_Z80_DISP8:                   howto manager.      (line 2658)
+* BFD_RELOC_Z80_WORD0:                   howto manager.      (line 2668)
+* BFD_RELOC_Z80_WORD1:                   howto manager.      (line 2670)
+* BFD_RELOC_Z8K_CALLR:                   howto manager.      (line 2676)
+* BFD_RELOC_Z8K_DISP7:                   howto manager.      (line 2674)
+* BFD_RELOC_Z8K_IMM4L:                   howto manager.      (line 2678)
 * bfd_rename_section:                    section prototypes. (line  167)
-* bfd_scan_arch:                         Architectures.      (line  571)
+* bfd_scan_arch:                         Architectures.      (line  582)
 * bfd_scan_vma:                          Miscellaneous.      (line  126)
 * bfd_sections_find_if:                  section prototypes. (line  197)
 * bfd_section_already_linked:            Writing the symbol table.
                                                              (line   55)
 * bfd_section_list_clear:                section prototypes. (line    7)
 * bfd_set_archive_head:                  Archives.           (line   74)
-* bfd_set_arch_info:                     Architectures.      (line  612)
+* bfd_set_arch_info:                     Architectures.      (line  623)
 * bfd_set_assert_handler:                Error reporting.    (line  162)
-* bfd_set_default_target:                bfd_target.         (line  557)
+* bfd_set_default_target:                bfd_target.         (line  571)
 * 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_set_filename:                      Opening and Closing.
-                                                             (line  529)
+                                                             (line  520)
 * bfd_set_file_flags:                    Miscellaneous.      (line   45)
 * bfd_set_format:                        Formats.            (line   67)
 * bfd_set_gp_size:                       Miscellaneous.      (line  116)
@@ -14603,33 +14776,32 @@ BFD Index
                                                              (line   63)
 * 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_target_list:                       bfd_target.         (line  623)
+* bfd_update_compression_header:         Miscellaneous.      (line  336)
+* bfd_write_bigendian_4byte_int:         Internal.           (line   78)
 * bfd_zalloc:                            Opening and Closing.
                                                              (line  257)
-* bfd_zalloc2:                           Opening and Closing.
-                                                             (line  266)
+* bfd_zmalloc:                           Internal.           (line   64)
 * check_build_id_file:                   Opening and Closing.
-                                                             (line  491)
+                                                             (line  482)
 * coff_symbol_type:                      coff.               (line  233)
 * core_file_matches_executable_p:        Core Files.         (line   38)
 * find_separate_debug_file:              Opening and Closing.
-                                                             (line  365)
+                                                             (line  356)
 * generic_core_file_matches_executable_p: Core Files.        (line   48)
 * get_build_id:                          Opening and Closing.
-                                                             (line  460)
+                                                             (line  451)
 * get_build_id_name:                     Opening and Closing.
-                                                             (line  474)
+                                                             (line  465)
 * Hash tables:                           Hash Tables.        (line    6)
 * 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)
+                                                             (line  347)
 * separate_debug_file_exists:            Opening and Closing.
-                                                             (line  343)
-* struct bfd_iovec:                      Miscellaneous.      (line  414)
+                                                             (line  334)
+* struct bfd_iovec:                      Miscellaneous.      (line  397)
 * target vector (_bfd_final_link):       Performing the Final Link.
                                                              (line    6)
 * target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table.
@@ -14651,61 +14823,61 @@ 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 Caching356025
-Node: Linker Functions357943
-Node: Creating a Linker Hash Table359617
-Node: Adding Symbols to the Hash Table361356
-Node: Differing file formats362256
-Node: Adding symbols from an object file363981
-Node: Adding symbols from an archive366131
-Node: Performing the Final Link368477
-Node: Information provided by the linker369718
-Node: Relocating the section contents370872
-Node: Writing the symbol table372624
-Node: Hash Tables379778
-Node: Creating and Freeing a Hash Table380976
-Node: Looking Up or Entering a String382226
-Node: Traversing a Hash Table383479
-Node: Deriving a New Hash Table Type384268
-Node: Define the Derived Structures385334
-Node: Write the Derived Creation Routine386415
-Node: Write Other Derived Routines389040
-Node: BFD back ends390355
-Node: What to Put Where390625
-Node: aout390805
-Node: coff397087
-Node: elf425238
-Node: mmo425639
-Node: File layout426509
-Node: Symbol-table432422
-Node: mmo section mapping436185
-Node: GNU Free Documentation License439839
-Node: BFD Index464903
+Node: Error reporting31305
+Node: Miscellaneous36556
+Node: Memory Usage55218
+Node: Initialization56449
+Node: Sections57125
+Node: Section Input57608
+Node: Section Output58802
+Node: typedef asection61289
+Node: section prototypes86137
+Node: Symbols96811
+Node: Reading Symbols98414
+Node: Writing Symbols99522
+Node: Mini Symbols101266
+Node: typedef asymbol102240
+Node: symbol handling functions108447
+Node: Archives113780
+Node: Formats117910
+Node: Relocations120840
+Node: typedef arelent121567
+Node: howto manager136478
+Node: Core Files270454
+Node: Targets272478
+Node: bfd_target274453
+Node: Architectures301214
+Node: Opening and Closing332901
+Node: Internal351069
+Node: File Caching360462
+Node: Linker Functions362359
+Node: Creating a Linker Hash Table364033
+Node: Adding Symbols to the Hash Table365772
+Node: Differing file formats366672
+Node: Adding symbols from an object file368397
+Node: Adding symbols from an archive370547
+Node: Performing the Final Link372893
+Node: Information provided by the linker374134
+Node: Relocating the section contents375288
+Node: Writing the symbol table377040
+Node: Hash Tables384131
+Node: Creating and Freeing a Hash Table385329
+Node: Looking Up or Entering a String386579
+Node: Traversing a Hash Table387832
+Node: Deriving a New Hash Table Type388621
+Node: Define the Derived Structures389687
+Node: Write the Derived Creation Routine390768
+Node: Write Other Derived Routines393393
+Node: BFD back ends394708
+Node: What to Put Where394978
+Node: aout395158
+Node: coff401412
+Node: elf429393
+Node: mmo429794
+Node: File layout430664
+Node: Symbol-table436577
+Node: mmo section mapping440340
+Node: GNU Free Documentation License443994
+Node: BFD Index469058
 
 End Tag Table
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdint.texi ./bfd/doc/bfdint.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdint.texi	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/bfdint.texi	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 \input texinfo
-@c Copyright (C) 1988-2019 Free Software Foundation, Inc.
+@c Copyright (C) 1988-2021 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-2021 Free Software Foundation, Inc.
 Contributed by Cygnus Support.
 
 Permission is granted to copy, distribute and/or modify this document
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdio.texi ./bfd/doc/bfdio.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdio.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/bfdio.texi	2021-12-16 01:59:24.000000000 +0000
@@ -80,6 +80,8 @@ 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.
+
 @findex bfd_get_file_size
 @subsubsection @code{bfd_get_file_size}
 @strong{Synopsis}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdsumm.texi ./bfd/doc/bfdsumm.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdsumm.texi	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/bfdsumm.texi	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfd.texi ./bfd/doc/bfd.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfd.texi	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/bfd.texi	2021-12-16 01:57:38.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-2021 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-2021 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-2021 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdt.texi ./bfd/doc/bfdt.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdt.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/bfdt.texi	2021-12-16 01:59:24.000000000 +0000
@@ -60,12 +60,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;
 
@@ -169,6 +163,12 @@ struct bfd
    | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
    | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
 
+  /* 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;
+
   /* Is the file descriptor being cached?  That is, can it be closed as
      needed, and re-opened when accessed later?  */
   unsigned int cacheable : 1;
@@ -220,13 +220,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
@@ -258,7 +261,7 @@ struct bfd
 
   /* 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 +272,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.  */
@@ -339,7 +347,7 @@ 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;
@@ -387,13 +395,13 @@ bfd_count_sections (const bfd *abfd)
   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;
@@ -406,15 +414,15 @@ bfd_usrdata (const bfd *abfd)
 @}
 
 /* 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;
 @}
@@ -549,7 +557,7 @@ bfd_section_list_insert_before (bfd *abf
     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;
@@ -797,7 +805,7 @@ The argument @var{abfd} is ignored.
 @subsubsection @code{bfd_set_file_flags}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
+bool bfd_set_file_flags (bfd *abfd, flagword flags);
 @end example
 @strong{Description}@*
 Set the flag word in the BFD @var{abfd} to the value @var{flags}.
@@ -855,7 +863,7 @@ not sign extend addresses, and @code{-1}
 @subsubsection @code{bfd_set_start_address}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
+bool bfd_set_start_address (bfd *abfd, bfd_vma vma);
 @end example
 @strong{Description}@*
 Make @var{vma} the entry point of output BFD @var{abfd}.
@@ -908,7 +916,7 @@ returned.
 @subsubsection @code{bfd_copy_private_header_data}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+bool bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
 @end example
 @strong{Description}@*
 Copy private BFD header information from the BFD @var{ibfd} to the
@@ -933,7 +941,7 @@ Not enough memory exists to create priva
 @subsubsection @code{bfd_copy_private_bfd_data}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
+bool bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
 @end example
 @strong{Description}@*
 Copy private BFD information from the BFD @var{ibfd} to the
@@ -956,7 +964,7 @@ Not enough memory exists to create priva
 @subsubsection @code{bfd_set_private_flags}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
+bool bfd_set_private_flags (bfd *abfd, flagword flags);
 @end example
 @strong{Description}@*
 Set private BFD flag information in the BFD @var{abfd}.
@@ -1009,7 +1017,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))
@@ -1074,7 +1083,7 @@ The following functions exist but have n
 
 extern bfd_byte *bfd_get_relocated_section_contents
   (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-   bfd_boolean, asymbol **);
+   bool, asymbol **);
 
 @end example
 
@@ -1082,7 +1091,7 @@ extern bfd_byte *bfd_get_relocated_secti
 @subsubsection @code{bfd_alt_mach_code}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
+bool bfd_alt_mach_code (bfd *abfd, int alternative);
 @end example
 @strong{Description}@*
 When more than one machine code number is available for the
@@ -1104,21 +1113,11 @@ 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.
-
 @findex bfd_emul_get_commonpagesize
 @subsubsection @code{bfd_emul_get_commonpagesize}
 @strong{Synopsis}
 @example
-bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
+bfd_vma bfd_emul_get_commonpagesize (const char *, bool);
 @end example
 @strong{Description}@*
 Returns the common page size, in bytes, as determined by
@@ -1127,16 +1126,6 @@ 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.
-
 @findex bfd_demangle
 @subsubsection @code{bfd_demangle}
 @strong{Synopsis}
@@ -1165,7 +1154,7 @@ elf_section_flags for compression.
 @subsubsection @code{bfd_check_compression_header}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_check_compression_header
+bool bfd_check_compression_header
    (bfd *abfd, bfd_byte *contents, asection *sec,
     bfd_size_type *uncompressed_size,
     unsigned int *uncompressed_alignment_power);
@@ -1206,7 +1195,7 @@ BFD @var{ibfd} to the section size in ou
 @subsubsection @code{bfd_convert_section_contents}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_convert_section_contents
+bool bfd_convert_section_contents
    (bfd *ibfd, asection *isec, bfd *obfd,
     bfd_byte **ptr, bfd_size_type *ptr_size);
 @end example
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdver.texi ./bfd/doc/bfdver.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/bfdver.texi	2020-03-07 02:09:49.000000000 +0000
+++ ./bfd/doc/bfdver.texi	2021-12-16 01:59:24.000000000 +0000
@@ -1,4 +1,4 @@
-@set VERSION 2.33.50
+@set VERSION 2.37.50
 @set VERSION_PACKAGE (GNU Binutils) 
-@set UPDATED March 2020
-@set BUGURL @uref{http://www.sourceware.org/bugzilla/}
+@set UPDATED December 2021
+@set BUGURL @uref{https://www.sourceware.org/bugzilla/}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/cache.texi ./bfd/doc/cache.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/cache.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/cache.texi	2021-12-16 01:59:24.000000000 +0000
@@ -17,7 +17,7 @@ handle.
 @subsubsection @code{bfd_cache_init}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_cache_init (bfd *abfd);
+bool bfd_cache_init (bfd *abfd);
 @end example
 @strong{Description}@*
 Add a newly opened BFD to the cache.
@@ -26,7 +26,7 @@ Add a newly opened BFD to the cache.
 @subsubsection @code{bfd_cache_close}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_cache_close (bfd *abfd);
+bool bfd_cache_close (bfd *abfd);
 @end example
 @strong{Description}@*
 Remove the BFD @var{abfd} from the cache. If the attached file is open,
@@ -40,7 +40,7 @@ returned if all is well.
 @subsubsection @code{bfd_cache_close_all}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_cache_close_all (void);
+bool bfd_cache_close_all (void);
 @end example
 @strong{Description}@*
 Remove all BFDs from the cache. If the attached file is open,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/chew.c ./bfd/doc/chew.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/chew.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/chew.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* chew
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Contributed by steve chamberlain @cygnus
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -170,8 +170,7 @@ static void
 delete_string (buffer)
      string_type *buffer;
 {
-  if (buffer->ptr)
-    free (buffer->ptr);
+  free (buffer->ptr);
   buffer->ptr = NULL;
 }
 
@@ -1258,8 +1257,7 @@ free_words (void)
     {
       dict_type *next;
 
-      if (ptr->word)
-	free (ptr->word);
+      free (ptr->word);
       if (ptr->code)
 	{
 	  int i;
@@ -1443,8 +1441,7 @@ compile (string)
 	  fprintf (stderr, "syntax error at %s\n", string - 1);
 	}
     }
-  if (word)
-    free (word);
+  free (word);
 }
 
 static void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/coffcode.texi ./bfd/doc/coffcode.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/coffcode.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/coffcode.texi	2021-12-16 01:59:24.000000000 +0000
@@ -290,7 +290,7 @@ typedef struct coff_ptr_struct
   @} u;
 
  /* Selector for the union above.  */
- bfd_boolean is_sym;
+ bool is_sym;
 @} combined_entry_type;
 
 
@@ -308,7 +308,7 @@ 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
@@ -378,14 +378,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,32 +401,32 @@ 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);
 
@@ -441,13 +441,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,22 +455,22 @@ 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;
@@ -618,7 +618,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-"))
 @end example
 @subsubsection Writing relocations
 To write relocations, the back end steps though the
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/core.texi ./bfd/doc/core.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/core.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/core.texi	2021-12-16 01:59:24.000000000 +0000
@@ -41,7 +41,7 @@ Returns the PID of the process the core
 @subsubsection @code{core_file_matches_executable_p}
 @strong{Synopsis}
 @example
-bfd_boolean core_file_matches_executable_p
+bool core_file_matches_executable_p
    (bfd *core_bfd, bfd *exec_bfd);
 @end example
 @strong{Description}@*
@@ -53,7 +53,7 @@ was generated by a run of the executable
 @subsubsection @code{generic_core_file_matches_executable_p}
 @strong{Synopsis}
 @example
-bfd_boolean generic_core_file_matches_executable_p
+bool generic_core_file_matches_executable_p
    (bfd *core_bfd, bfd *exec_bfd);
 @end example
 @strong{Description}@*
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/format.texi ./bfd/doc/format.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/format.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/format.texi	2021-12-16 01:59:24.000000000 +0000
@@ -30,7 +30,7 @@ The BFD contains the result of an execut
 @subsubsection @code{bfd_check_format}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
+bool bfd_check_format (bfd *abfd, bfd_format format);
 @end example
 @strong{Description}@*
 Verify if the file attached to the BFD @var{abfd} is compatible
@@ -73,7 +73,7 @@ more than one backend recognised the fil
 @subsubsection @code{bfd_check_format_matches}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_check_format_matches
+bool bfd_check_format_matches
    (bfd *abfd, bfd_format format, char ***matching);
 @end example
 @strong{Description}@*
@@ -91,7 +91,7 @@ should free it.
 @subsubsection @code{bfd_set_format}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
+bool bfd_set_format (bfd *abfd, bfd_format format);
 @end example
 @strong{Description}@*
 This function sets the file format of the BFD @var{abfd} to the
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/libbfd.texi ./bfd/doc/libbfd.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/libbfd.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/libbfd.texi	2021-12-16 01:59:24.000000000 +0000
@@ -9,11 +9,82 @@ 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}
+@strong{Synopsis}
+@example
+extern void * bfd_malloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+@end example
+@strong{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.
+
+@findex bfd_realloc
+@subsubsection @code{bfd_realloc}
+@strong{Synopsis}
+@example
+extern void * bfd_realloc (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+@end example
+@strong{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.
+
+@findex bfd_realloc_or_free
+@subsubsection @code{bfd_realloc_or_free}
+@strong{Synopsis}
+@example
+extern void * bfd_realloc_or_free (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+@end example
+@strong{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.
+
+@findex bfd_zmalloc
+@subsubsection @code{bfd_zmalloc}
+@strong{Synopsis}
+@example
+extern void * bfd_zmalloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+@end example
+@strong{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.
+
 @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);
+bool bfd_write_bigendian_4byte_int (bfd *, unsigned int);
 @end example
 @strong{Description}@*
 Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big
@@ -96,7 +167,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)             \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/linker.texi ./bfd/doc/linker.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/linker.texi	2020-03-07 02:09:49.000000000 +0000
+++ ./bfd/doc/linker.texi	2021-12-16 01:59:24.000000000 +0000
@@ -348,7 +348,7 @@ file at the end of @code{NAME(aout,final
 @subsubsection @code{bfd_link_split_section}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
+bool bfd_link_split_section (bfd *abfd, asection *sec);
 @end example
 @strong{Description}@*
 Return nonzero if @var{sec} should be split during a
@@ -363,7 +363,7 @@ reloceatable or final link.
 @subsubsection @code{bfd_section_already_linked}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_section_already_linked (bfd *abfd,
+bool bfd_section_already_linked (bfd *abfd,
     asection *sec,
     struct bfd_link_info *info);
 @end example
@@ -380,7 +380,7 @@ or final link.  Return TRUE if it has.
 @subsubsection @code{bfd_generic_define_common_symbol}
 @strong{Synopsis}
 @example
-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);
 @end example
@@ -434,7 +434,7 @@ Return the symbol or NULL if no such und
 @example
 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);
 @end example
 @strong{Description}@*
 Search an elf version script tree for symbol versioning
@@ -446,7 +446,7 @@ the output @samp{hide} boolean parameter
 @subsubsection @code{bfd_hide_sym_by_version}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_hide_sym_by_version
+bool bfd_hide_sym_by_version
    (struct bfd_elf_version_tree *verdefs, const char *sym_name);
 @end example
 @strong{Description}@*
@@ -457,7 +457,7 @@ info for a given symbol.  Return TRUE if
 @subsubsection @code{bfd_link_check_relocs}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_link_check_relocs
+bool bfd_link_check_relocs
    (bfd *abfd, struct bfd_link_info *info);
 @end example
 @strong{Description}@*
@@ -470,7 +470,7 @@ This is the external entry point to this
 @subsubsection @code{_bfd_generic_link_check_relocs}
 @strong{Synopsis}
 @example
-bfd_boolean _bfd_generic_link_check_relocs
+bool _bfd_generic_link_check_relocs
    (bfd *abfd, struct bfd_link_info *info);
 @end example
 @strong{Description}@*
@@ -483,7 +483,7 @@ outside the BFD library.
 @subsubsection @code{bfd_merge_private_bfd_data}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_merge_private_bfd_data
+bool bfd_merge_private_bfd_data
    (bfd *ibfd, struct bfd_link_info *info);
 @end example
 @strong{Description}@*
@@ -507,7 +507,7 @@ Not enough memory exists to create priva
 @subsubsection @code{_bfd_generic_verify_endian_match}
 @strong{Synopsis}
 @example
-bfd_boolean _bfd_generic_verify_endian_match
+bool _bfd_generic_verify_endian_match
    (bfd *ibfd, struct bfd_link_info *info);
 @end example
 @strong{Description}@*
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/Makefile.am ./bfd/doc/Makefile.am
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/Makefile.am	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/Makefile.am	2021-12-16 01:57:38.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-2021 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
@@ -71,6 +71,8 @@ TEXIDIR = $(srcdir)/../../texinfo/fsf
 info_TEXINFOS = bfd.texi
 bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
 
+AM_MAKEINFOFLAGS = --no-split
+
 MKDOC = chew$(EXEEXT_FOR_BUILD)
 
 AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
@@ -97,21 +99,21 @@ protos: libbfd.h libcoff.h bfd.h
 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 .
+	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || $(LN_S) $(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 .
+	test -e archive.texi || test ! -f $(srcdir)/archive.texi || $(LN_S) $(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 .
+	test -e archures.texi || test ! -f $(srcdir)/archures.texi || $(LN_S) $(srcdir)/archures.texi .
 	$(SHELL) $(srcdir)/../../move-if-change archures.tmp archures.texi
 	touch $@
 
@@ -120,133 +122,133 @@ archures.stamp: $(srcdir)/../archures.c
 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 .
+	test -e bfdt.texi || test ! -f $(srcdir)/bfdt.texi || $(LN_S) $(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 .
+	test -e cache.texi || test ! -f $(srcdir)/cache.texi || $(LN_S) $(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 .
+	test -e coffcode.texi || test ! -f $(srcdir)/coffcode.texi || $(LN_S) $(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 .
+	test -e core.texi || test ! -f $(srcdir)/core.texi || $(LN_S) $(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 .
+	test -e elf.texi || test ! -f $(srcdir)/elf.texi || $(LN_S) $(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 .
+	test -e elfcode.texi || test ! -f $(srcdir)/elfcode.texi || $(LN_S) $(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 .
+	test -e mmo.texi || test ! -f $(srcdir)/mmo.texi || $(LN_S) $(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 .
+	test -e format.texi || test ! -f $(srcdir)/format.texi || $(LN_S) $(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 .
+	test -e libbfd.texi || test ! -f $(srcdir)/libbfd.texi || $(LN_S) $(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 .
+	test -e bfdio.texi || test ! -f $(srcdir)/bfdio.texi || $(LN_S) $(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 .
+	test -e bfdwin.texi || test ! -f $(srcdir)/bfdwin.texi || $(LN_S) $(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 .
+	test -e opncls.texi || test ! -f $(srcdir)/opncls.texi || $(LN_S) $(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 .
+	test -e reloc.texi || test ! -f $(srcdir)/reloc.texi || $(LN_S) $(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 .
+	test -e section.texi || test ! -f $(srcdir)/section.texi || $(LN_S) $(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 .
+	test -e syms.texi || test ! -f $(srcdir)/syms.texi || $(LN_S) $(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 .
+	test -e targets.texi || test ! -f $(srcdir)/targets.texi || $(LN_S) $(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 .
+	test -e init.texi || test ! -f $(srcdir)/init.texi || $(LN_S) $(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 .
+	test -e hash.texi || test ! -f $(srcdir)/hash.texi || $(LN_S) $(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 .
+	test -e linker.texi || test ! -f $(srcdir)/linker.texi || $(LN_S) $(srcdir)/linker.texi .
 	$(SHELL) $(srcdir)/../../move-if-change linker.tmp linker.texi
 	touch $@
 
@@ -367,4 +369,9 @@ MAINTAINERCLEANFILES = $(DOCFILES)
 # cygnus option.
 install: install-info
 
+html-local: bfd/index.html
+bfd/index.html: bfd.texi $(bfd_TEXINFOS)
+	$(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
+	  --split=node -I$(srcdir) $(srcdir)/bfd.texi
+
 MAINTAINERCLEANFILES += bfd.info
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/Makefile.in ./bfd/doc/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/Makefile.in	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/Makefile.in	2021-12-16 01:57:38.000000000 +0000
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2021 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
@@ -111,6 +111,7 @@ 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/jobserver.m4 \
 	$(top_srcdir)/../config/largefile.m4 \
 	$(top_srcdir)/../config/lead-dot.m4 \
 	$(top_srcdir)/../config/nls.m4 \
@@ -118,7 +119,6 @@ am__aclocal_m4_deps = $(top_srcdir)/../c
 	$(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 \
@@ -272,6 +272,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 INSTOBJEXT = @INSTOBJEXT@
+LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBINTL = @LIBINTL@
@@ -444,6 +445,7 @@ SRCIPROT = $(srcdir)/../cache.c $(srcdir
 TEXIDIR = $(srcdir)/../../texinfo/fsf
 info_TEXINFOS = bfd.texi
 bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi
+AM_MAKEINFOFLAGS = --no-split
 MKDOC = chew$(EXEEXT_FOR_BUILD)
 AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \
 	-I$(srcdir)/../../intl -I../../intl
@@ -763,7 +765,7 @@ dvi-am: $(DVIS)
 
 html: html-am
 
-html-am: $(HTMLS)
+html-am: $(HTMLS) html-local
 
 info: info-am
 
@@ -914,12 +916,12 @@ uninstall-am: uninstall-dvi-am uninstall
 .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 \
+	html-am html-local 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 \
@@ -950,21 +952,21 @@ protos: libbfd.h libcoff.h bfd.h
 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 .
+	test -e aoutx.texi || test ! -f $(srcdir)/aoutx.texi || $(LN_S) $(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 .
+	test -e archive.texi || test ! -f $(srcdir)/archive.texi || $(LN_S) $(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 .
+	test -e archures.texi || test ! -f $(srcdir)/archures.texi || $(LN_S) $(srcdir)/archures.texi .
 	$(SHELL) $(srcdir)/../../move-if-change archures.tmp archures.texi
 	touch $@
 
@@ -973,133 +975,133 @@ archures.stamp: $(srcdir)/../archures.c
 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 .
+	test -e bfdt.texi || test ! -f $(srcdir)/bfdt.texi || $(LN_S) $(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 .
+	test -e cache.texi || test ! -f $(srcdir)/cache.texi || $(LN_S) $(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 .
+	test -e coffcode.texi || test ! -f $(srcdir)/coffcode.texi || $(LN_S) $(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 .
+	test -e core.texi || test ! -f $(srcdir)/core.texi || $(LN_S) $(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 .
+	test -e elf.texi || test ! -f $(srcdir)/elf.texi || $(LN_S) $(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 .
+	test -e elfcode.texi || test ! -f $(srcdir)/elfcode.texi || $(LN_S) $(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 .
+	test -e mmo.texi || test ! -f $(srcdir)/mmo.texi || $(LN_S) $(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 .
+	test -e format.texi || test ! -f $(srcdir)/format.texi || $(LN_S) $(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 .
+	test -e libbfd.texi || test ! -f $(srcdir)/libbfd.texi || $(LN_S) $(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 .
+	test -e bfdio.texi || test ! -f $(srcdir)/bfdio.texi || $(LN_S) $(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 .
+	test -e bfdwin.texi || test ! -f $(srcdir)/bfdwin.texi || $(LN_S) $(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 .
+	test -e opncls.texi || test ! -f $(srcdir)/opncls.texi || $(LN_S) $(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 .
+	test -e reloc.texi || test ! -f $(srcdir)/reloc.texi || $(LN_S) $(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 .
+	test -e section.texi || test ! -f $(srcdir)/section.texi || $(LN_S) $(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 .
+	test -e syms.texi || test ! -f $(srcdir)/syms.texi || $(LN_S) $(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 .
+	test -e targets.texi || test ! -f $(srcdir)/targets.texi || $(LN_S) $(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 .
+	test -e init.texi || test ! -f $(srcdir)/init.texi || $(LN_S) $(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 .
+	test -e hash.texi || test ! -f $(srcdir)/hash.texi || $(LN_S) $(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 .
+	test -e linker.texi || test ! -f $(srcdir)/linker.texi || $(LN_S) $(srcdir)/linker.texi .
 	$(SHELL) $(srcdir)/../../move-if-change linker.tmp linker.texi
 	touch $@
 
@@ -1166,6 +1168,11 @@ bfdver.texi: $(srcdir)/Makefile.in
 # cygnus option.
 install: install-info
 
+html-local: bfd/index.html
+bfd/index.html: bfd.texi $(bfd_TEXINFOS)
+	$(AM_V_at)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \
+	  --split=node -I$(srcdir) $(srcdir)/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.
 .NOEXPORT:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/makefile.vms ./bfd/doc/makefile.vms
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/makefile.vms	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/doc/makefile.vms	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/opncls.texi ./bfd/doc/opncls.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/opncls.texi	2020-03-07 02:09:48.000000000 +0000
+++ ./bfd/doc/opncls.texi	2021-12-16 01:59:24.000000000 +0000
@@ -86,6 +86,16 @@ 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.
 
+@findex bfd_fdopenw
+@subsubsection @code{bfd_fdopenw}
+@strong{Synopsis}
+@example
+bfd *bfd_fdopenw (const char *filename, const char *target, int fd);
+@end example
+@strong{Description}@*
+@code{bfd_fdopenw} is exactly like @code{bfd_fdopenr} with the exception that
+the resulting BFD is suitable for output.
+
 @findex bfd_openstreamr
 @subsubsection @code{bfd_openstreamr}
 @strong{Synopsis}
@@ -174,7 +184,7 @@ BFD.  It can be accessed via the bfd_get
 @subsubsection @code{bfd_close}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_close (bfd *abfd);
+bool bfd_close (bfd *abfd);
 @end example
 @strong{Description}@*
 Close a BFD. If the BFD was open for writing, then pending
@@ -194,7 +204,7 @@ if it was passed in to BFD by @code{bfd_
 @subsubsection @code{bfd_close_all_done}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_close_all_done (bfd *);
+bool bfd_close_all_done (bfd *);
 @end example
 @strong{Description}@*
 Close a BFD.  Differs from @code{bfd_close} since it does not
@@ -228,7 +238,7 @@ BFD.  It can be accessed via the bfd_get
 @subsubsection @code{bfd_make_writable}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_make_writable (bfd *abfd);
+bool bfd_make_writable (bfd *abfd);
 @end example
 @strong{Description}@*
 Takes a BFD as created by @code{bfd_create} and converts it
@@ -243,7 +253,7 @@ you will call @code{bfd_make_readable} o
 @subsubsection @code{bfd_make_readable}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_make_readable (bfd *abfd);
+bool bfd_make_readable (bfd *abfd);
 @end example
 @strong{Description}@*
 Takes a BFD as created by @code{bfd_create} and
@@ -265,16 +275,6 @@ void *bfd_alloc (bfd *abfd, bfd_size_typ
 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}
@@ -285,16 +285,6 @@ void *bfd_zalloc (bfd *abfd, bfd_size_ty
 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.
-
 @findex bfd_calc_gnu_debuglink_crc32
 @subsubsection @code{bfd_calc_gnu_debuglink_crc32}
 @strong{Synopsis}
@@ -372,7 +362,7 @@ of the caller.
 @subsubsection @code{separate_debug_file_exists}
 @strong{Synopsis}
 @example
-bfd_boolean separate_debug_file_exists
+bool separate_debug_file_exists
    (char *name, void *crc32_p);
 @end example
 @strong{Description}@*
@@ -387,7 +377,7 @@ this routine is used as a @code{check_fu
 @subsubsection @code{separate_alt_debug_file_exists}
 @strong{Synopsis}
 @example
-bfd_boolean separate_alt_debug_file_exists
+bool separate_alt_debug_file_exists
    (char *name, void *unused);
 @end example
 @strong{Description}@*
@@ -398,7 +388,7 @@ Checks to see if @var{name} is a file.
 @strong{Synopsis}
 @example
 char *find_separate_debug_file
-   (bfd *abfd, const char *dir, bfd_boolean include_dirs,
+   (bfd *abfd, const char *dir, bool include_dirs,
     get_func_type get, check_func_type check, void *data);
 @end example
 @strong{Description}@*
@@ -484,7 +474,7 @@ A pointer to the new section is returned
 @subsubsection @code{bfd_fill_in_gnu_debuglink_section}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_fill_in_gnu_debuglink_section
+bool bfd_fill_in_gnu_debuglink_section
    (bfd *abfd, struct bfd_section *sect, const char *filename);
 @end example
 @strong{Description}@*
@@ -537,7 +527,7 @@ pointer) is set to a pointer to the buil
 @subsubsection @code{check_build_id_file}
 @strong{Synopsis}
 @example
-bfd_boolean check_build_id_file (char *name, void *buildid_p);
+bool 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
@@ -578,10 +568,10 @@ filename.  The caller is responsible for
 @subsubsection @code{bfd_set_filename}
 @strong{Synopsis}
 @example
-void bfd_set_filename (bfd *abfd, char *filename);
+const char *bfd_set_filename (bfd *abfd, const 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}.
+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.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/reloc.texi ./bfd/doc/reloc.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/reloc.texi	2020-03-07 02:09:49.000000000 +0000
+++ ./bfd/doc/reloc.texi	2021-12-16 01:59:24.000000000 +0000
@@ -358,8 +358,8 @@ const struct reloc_howto_struct).
 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, 0, 0, false, 0, complain_overflow_dont, NULL, \
+         NULL, false, 0, 0, false)
 
 @end example
 
@@ -409,7 +409,7 @@ Perform overflow checking on @var{reloca
 @subsubsection @code{bfd_reloc_offset_in_range}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_reloc_offset_in_range
+bool bfd_reloc_offset_in_range
    (reloc_howto_type *howto,
     bfd *abfd,
     asection *section,
@@ -1141,6 +1141,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 +1189,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
@@ -1243,6 +1246,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 +1277,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,10 +1301,10 @@ 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
@@ -3254,6 +3267,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
@@ -3356,6 +3370,8 @@ Morpho MT - 8 bit immediate relocation.
 @deffnx {} BFD_RELOC_MSP430_ABS_HI16
 @deffnx {} BFD_RELOC_MSP430_PREL31
 @deffnx {} BFD_RELOC_MSP430_SYM_DIFF
+@deffnx {} BFD_RELOC_MSP430_SET_ULEB128
+@deffnx {} BFD_RELOC_MSP430_SUB_ULEB128
 msp430 specific relocation codes
 @end deffn
 @deffn {} BFD_RELOC_NIOS2_S16
@@ -3469,6 +3485,8 @@ PLT entries.  Otherwise, this is just a
 @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
@@ -3540,9 +3558,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
@@ -4519,11 +4574,11 @@ Useful mainly for printing error message
 @subsubsection @code{bfd_generic_relax_section}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_generic_relax_section
+bool bfd_generic_relax_section
    (bfd *abfd,
     asection *section,
     struct bfd_link_info *,
-    bfd_boolean *);
+    bool *);
 @end example
 @strong{Description}@*
 Provides default handling for relaxing for back ends which
@@ -4533,7 +4588,7 @@ don't do relaxing.
 @subsubsection @code{bfd_generic_gc_sections}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_generic_gc_sections
+bool bfd_generic_gc_sections
    (bfd *, struct bfd_link_info *);
 @end example
 @strong{Description}@*
@@ -4544,7 +4599,7 @@ don't do section gc -- i.e., does nothin
 @subsubsection @code{bfd_generic_lookup_section_flags}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_generic_lookup_section_flags
+bool bfd_generic_lookup_section_flags
    (struct bfd_link_info *, struct flag_info *, asection *);
 @end example
 @strong{Description}@*
@@ -4556,7 +4611,7 @@ Returns FALSE if the section should be o
 @subsubsection @code{bfd_generic_merge_sections}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_generic_merge_sections
+bool bfd_generic_merge_sections
    (bfd *, struct bfd_link_info *);
 @end example
 @strong{Description}@*
@@ -4572,7 +4627,7 @@ bfd_byte *bfd_generic_get_relocated_sect
     struct bfd_link_info *link_info,
     struct bfd_link_order *link_order,
     bfd_byte *data,
-    bfd_boolean relocatable,
+    bool relocatable,
     asymbol **symbols);
 @end example
 @strong{Description}@*
@@ -4596,7 +4651,7 @@ Installs a new set of internal relocatio
 @subsubsection @code{_bfd_unrecognized_reloc}
 @strong{Synopsis}
 @example
-bfd_boolean _bfd_unrecognized_reloc
+bool _bfd_unrecognized_reloc
    (bfd * abfd,
     sec_ptr section,
     unsigned int r_type);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/section.texi ./bfd/doc/section.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/section.texi	2020-03-07 02:09:49.000000000 +0000
+++ ./bfd/doc/section.texi	2021-12-16 01:59:24.000000000 +0000
@@ -113,6 +113,10 @@ typedef struct bfd_section
   /* 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;
 
@@ -246,6 +250,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.  */
@@ -495,11 +503,17 @@ 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;
+ /* 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;
+
 @} asection;
 
 /* Relax table contains information about instructions which can
@@ -554,7 +568,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;
@@ -564,33 +578,33 @@ 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)
 @{
   sec->alignment_power = val;
-  return TRUE;
+  return true;
 @}
 
 /* These sections are global, and are managed by BFD.  The application
@@ -612,32 +626,34 @@ 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)
@@ -647,41 +663,42 @@ discarded_section (const asection *sec)
 @}
 
 #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, id,  section_id, index, next, prev, flags, user_set_vma, */ \
+  @{  NAME, IDX, 0,          0,     NULL, NULL, 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, */  \
+  /* vma, lma, size, rawsize, compressed_size, relax, relax_count,  */ \
      0,   0,   0,    0,       0,               0,     0,               \
                                                                        \
-  /* output_offset, output_section, alignment_power,               */  \
+  /* output_offset, output_section, alignment_power,                */ \
      0,             &SEC,           0,                                 \
                                                                        \
-  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
+  /* relocation, orelocation, reloc_count, filepos, rel_filepos,    */ \
      NULL,       NULL,        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,                                        \
+     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                           */ \
+     @{ NULL @}, @{ NULL @}, NULL                                          \
+                                                                       \
     @}
 
 /* We use a macro to initialize the static asymbol structures because
@@ -752,7 +769,7 @@ named @var{name}.  Return NULL if no suc
 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);
 @end example
 @strong{Description}@*
@@ -881,7 +898,7 @@ section named @var{name}.  If there is a
 @subsubsection @code{bfd_set_section_flags}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
+bool bfd_set_section_flags (asection *sec, flagword flags);
 @end example
 @strong{Description}@*
 Set the attributes of the section @var{sec} to the value @var{flags}.
@@ -940,7 +957,7 @@ alternative would be to use a loop:
 @example
 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);
 @end example
 @strong{Description}@*
@@ -958,7 +975,7 @@ It returns the first section for which @
 @subsubsection @code{bfd_set_section_size}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
+bool bfd_set_section_size (asection *sec, bfd_size_type val);
 @end example
 @strong{Description}@*
 Set @var{sec} to the size @var{val}. If the operation is
@@ -976,7 +993,7 @@ Writing has started to the BFD, so setti
 @subsubsection @code{bfd_set_section_contents}
 @strong{Synopsis}
 @example
-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);
 @end example
@@ -1010,7 +1027,7 @@ This routine is front end to the back en
 @subsubsection @code{bfd_get_section_contents}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_get_section_contents
+bool bfd_get_section_contents
    (bfd *abfd, asection *section, void *location, file_ptr offset,
     bfd_size_type count);
 @end example
@@ -1030,7 +1047,7 @@ with zeroes. If no errors occur, @code{T
 @subsubsection @code{bfd_malloc_and_get_section}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_malloc_and_get_section
+bool bfd_malloc_and_get_section
    (bfd *abfd, asection *section, bfd_byte **buf);
 @end example
 @strong{Description}@*
@@ -1041,7 +1058,7 @@ into a buffer, *@var{buf}, malloc'd by t
 @subsubsection @code{bfd_copy_private_section_data}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_copy_private_section_data
+bool bfd_copy_private_section_data
    (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
 @end example
 @strong{Description}@*
@@ -1066,7 +1083,7 @@ Not enough memory exists to create priva
 @subsubsection @code{bfd_generic_is_group_section}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
+bool bfd_generic_is_group_section (bfd *, const asection *sec);
 @end example
 @strong{Description}@*
 Returns TRUE if @var{sec} is a member of a group.
@@ -1084,7 +1101,7 @@ Returns group name if @var{sec} is a mem
 @subsubsection @code{bfd_generic_discard_group}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
+bool bfd_generic_discard_group (bfd *abfd, asection *group);
 @end example
 @strong{Description}@*
 Remove all members of @var{group} from the output.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/syms.texi ./bfd/doc/syms.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/syms.texi	2020-03-07 02:09:49.000000000 +0000
+++ ./bfd/doc/syms.texi	2021-12-16 01:59:24.000000000 +0000
@@ -266,6 +266,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
@@ -306,7 +309,7 @@ the BFD, then return 0.  If an error occ
 @subsubsection @code{bfd_is_local_label}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
+bool bfd_is_local_label (bfd *abfd, asymbol *sym);
 @end example
 @strong{Description}@*
 Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is
@@ -316,7 +319,7 @@ a compiler generated local label, else r
 @subsubsection @code{bfd_is_local_label_name}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
+bool bfd_is_local_label_name (bfd *abfd, const char *name);
 @end example
 @strong{Description}@*
 Return TRUE if a symbol with the name @var{name} in the BFD
@@ -333,7 +336,7 @@ local label.
 @subsubsection @code{bfd_is_target_special_symbol}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
+bool bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
 @end example
 @strong{Description}@*
 Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something
@@ -363,7 +366,7 @@ including the NULL.
 @subsubsection @code{bfd_set_symtab}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_symtab
+bool bfd_set_symtab
    (bfd *abfd, asymbol **location, unsigned int count);
 @end example
 @strong{Description}@*
@@ -440,7 +443,7 @@ Returns zero otherwise.
 
 @strong{Synopsis}
 @example
-bfd_boolean bfd_is_undefined_symclass (int symclass);
+bool bfd_is_undefined_symclass (int symclass);
 @end example
 @findex bfd_symbol_info
 @subsubsection @code{bfd_symbol_info}
@@ -457,7 +460,7 @@ void bfd_symbol_info (asymbol *symbol, s
 @subsubsection @code{bfd_copy_private_symbol_data}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_copy_private_symbol_data
+bool bfd_copy_private_symbol_data
    (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
 @end example
 @strong{Description}@*
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/targets.texi ./bfd/doc/targets.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/doc/targets.texi	2020-03-07 02:09:49.000000000 +0000
+++ ./bfd/doc/targets.texi	2021-12-16 01:59:24.000000000 +0000
@@ -102,6 +102,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
@@ -146,6 +151,8 @@ typedef struct bfd_link_info _bfd_link_i
 /* Forward declaration.  */
 typedef struct flag_info flag_info;
 
+typedef void (*bfd_cleanup) (bfd *);
+
 typedef struct bfd_target
 @{
   /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
@@ -183,6 +190,9 @@ 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.  */
@@ -210,15 +220,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 @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
@@ -234,17 +244,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 +268,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 +302,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 +321,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) \
@@ -349,46 +355,47 @@ BFD_JUMP_TABLE macros.
   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_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 *, void *, unsigned long size);
 #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 +405,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 +448,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 +522,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 +534,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 +581,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,13 +631,19 @@ 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_set_default_target
 @subsubsection @code{bfd_set_default_target}
 @strong{Synopsis}
 @example
-bfd_boolean bfd_set_default_target (const char *name);
+bool bfd_set_default_target (const char *name);
 @end example
 @strong{Description}@*
 Set the default target vector to use when recognizing a BFD.
@@ -660,7 +674,7 @@ one that matches the file being read.
 @example
 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);
 @end example
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/dwarf1.c ./bfd/dwarf1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/dwarf1.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/dwarf1.c	2021-12-16 01:57:38.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-2021 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;
+    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;
 
@@ -260,7 +260,7 @@ parse_die (bfd *	     abfd,
 	      block_len = bfd_get_16 (abfd, xptr);
 	      if (xptr + block_len > aDiePtrEnd
 		  || xptr + block_len < xptr)
-		return FALSE;
+		return false;
 	      xptr += block_len;
 	    }
 	  xptr += 2;
@@ -271,7 +271,7 @@ parse_die (bfd *	     abfd,
 	      block_len = bfd_get_32 (abfd, xptr);
 	      if (xptr + block_len > aDiePtrEnd
 		  || xptr + block_len < xptr)
-		return FALSE;
+		return false;
 	      xptr += block_len;
 	    }
 	  xptr += 4;
@@ -284,14 +284,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;
@@ -304,7 +304,7 @@ parse_line_table (struct dwarf1_debug* s
 
       msec = bfd_get_section_by_name (stash->abfd, ".line");
       if (! msec)
-	return FALSE;
+	return false;
 
       size = msec->rawsize ? msec->rawsize : msec->size;
       stash->line_section
@@ -312,7 +312,7 @@ parse_line_table (struct dwarf1_debug* s
 	(stash->abfd, msec, NULL, stash->syms);
 
       if (! stash->line_section)
-	return FALSE;
+	return false;
 
       stash->line_section_end = stash->line_section + size;
     }
@@ -342,7 +342,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 +366,7 @@ parse_line_table (struct dwarf1_debug* s
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Parse each function die in a compilation unit 'aUnit'.
@@ -374,7 +374,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 +388,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 +397,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 +411,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 +425,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 +438,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 +454,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 +467,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 +480,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 +509,14 @@ _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)
 	/* 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 +524,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 +536,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 +553,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 +592,5 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd
 	stash->currentDie += aDieInfo.length;
     }
 
-  return FALSE;
+  return false;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/dwarf2.c ./bfd/dwarf2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/dwarf2.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/dwarf2.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* DWARF 2 support.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
    (gavin@cygnus.com).
@@ -130,6 +130,12 @@ 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;
 
@@ -196,7 +202,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
@@ -289,18 +295,18 @@ 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;
 };
 
 /* 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,6 +333,7 @@ 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", },
@@ -360,6 +367,7 @@ enum dwarf_debug_section_enum
   debug_pubnames,
   debug_pubtypes,
   debug_ranges,
+  debug_rnglists,
   debug_static_func,
   debug_static_vars,
   debug_str,
@@ -470,30 +478,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 +513,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,7 +523,7 @@ 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
+static bool
 read_section (bfd *	      abfd,
 	      const struct dwarf_debug_section *sec,
 	      asymbol **      syms,
@@ -523,48 +531,60 @@ read_section (bfd *	      abfd,
 	      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;
+      ufile_ptr filesize;
+
       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;
 	}
 
-      *section_size = msec->rawsize ? msec->rawsize : msec->size;
+      amt = bfd_get_section_limit_octets (abfd, msec);
+      filesize = bfd_get_file_size (abfd);
+      if (amt >= filesize)
+	{
+	  /* PR 26946 */
+	  _bfd_error_handler (_("DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"),
+			      section_name, (long) amt, (long) filesize);
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+      *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 +600,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;
 
-  if (block_end > end || block_end < buf)
+  block = (struct dwarf_block *) bfd_alloc (abfd, sizeof (*block));
+  if (block == NULL)
+    return NULL;
+
+  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;
   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 +766,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;
   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 +803,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;
   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)
     {
@@ -873,16 +901,22 @@ read_alt_indirect_ref (struct comp_unit
 }
 
 static bfd_uint64_t
-read_address (struct comp_unit *unit, bfd_byte *buf, bfd_byte * buf_end)
+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)
+      || (buf > buf_end))
+    {
+      *ptr = buf_end;
+      return 0;
+    }
 
+  *ptr = buf + unit->addr_size;
   if (signed_vma)
     {
       switch (unit->addr_size)
@@ -993,9 +1027,9 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
   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 +1055,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 +1069,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 +1079,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 +1124,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 +1159,26 @@ read_abbrevs (bfd *abfd, bfd_uint64_t of
 
 /* Returns true if the form is one which has a string value.  */
 
-static inline bfd_boolean
+static inline bool
 is_str_attr (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_string
+	  || form == DW_FORM_strp
+	  || form == DW_FORM_strx
+	  || form == DW_FORM_strx1
+	  || form == DW_FORM_strx2
+	  || form == DW_FORM_strx3
+	  || form == DW_FORM_strx4
+	  || form == DW_FORM_line_strp
+	  || form == DW_FORM_GNU_strp_alt);
+}
+
+static const char *
+read_indexed_string (bfd_uint64_t idx ATTRIBUTE_UNUSED,
+		     struct comp_unit * unit ATTRIBUTE_UNUSED)
+{
+  /* FIXME: Add support for indexed strings.  */
+  return "<indexed strings not yet supported>";
 }
 
 /* Read and fill in the value of attribute ATTR as described by FORM.
@@ -1156,9 +1194,7 @@ 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)
     {
@@ -1171,157 +1207,129 @@ read_attribute_value (struct attribute *
 
   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:
+    case DW_FORM_addrx1:
+      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
       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_addrx3:
+      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
       break;
+    case DW_FORM_ref4:
     case DW_FORM_data4:
-      attr->u.val = read_4_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 4;
+    case DW_FORM_addrx4:
+      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
       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);
+      attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      break;
+    case DW_FORM_strx2:
+      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
+      attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      break;
+    case DW_FORM_strx3:
+      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
+      attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      break;
+    case DW_FORM_strx4:
+      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
+      attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
+      break;
+    case DW_FORM_strx:
+      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					   false, info_ptr_end);
+      attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
       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;
-      break;
-    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;
-      break;
-    case DW_FORM_ref_sig8:
-      attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end);
-      info_ptr += 8;
+      attr->u.sval = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					    true, info_ptr_end);
       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_udata:
+    case DW_FORM_addrx:
+      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
+					   false, info_ptr_end);
       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 +1337,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);
@@ -1356,13 +1372,13 @@ read_attribute (struct attribute *    at
 /* Return whether DW_AT_name will return the same as DW_AT_linkage_name
    for a function.  */
 
-static bfd_boolean
+static bool
 non_mangled (int lang)
 {
   switch (lang)
     {
     default:
-      return FALSE;
+      return false;
 
     case DW_LANG_C89:
     case DW_LANG_C:
@@ -1376,7 +1392,7 @@ non_mangled (int lang)
     case DW_LANG_PLI:
     case DW_LANG_UPC:
     case DW_LANG_C11:
-      return TRUE;
+      return true;
     }
 }
 
@@ -1447,11 +1463,13 @@ struct funcinfo
   /* Source location line number.  */
   int			line;
   int			tag;
-  bfd_boolean		is_linkage;
+  bool			is_linkage;
   const char *		name;
   struct arange		arange;
   /* Where the symbol is defined.  */
   asection *		sec;
+  /* The offset of the funcinfo from the start of the unit.  */
+  bfd_uint64_t          unit_offset;
 };
 
 struct lookup_funcinfo
@@ -1472,24 +1490,29 @@ struct lookup_funcinfo
 
 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.  */
+  bfd_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;
+  /* The name of the variable, if it has one.  */
   char *name;
+  /* The address of the variable.  */
   bfd_vma addr;
-  /* Where the symbol is defined */
+  /* 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 +1526,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 +1536,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 +1556,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 +1595,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 +1644,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.
@@ -1694,7 +1717,7 @@ concat_filename (struct line_info_table
   return strdup (filename);
 }
 
-static bfd_boolean
+static bool
 arange_add (const struct comp_unit *unit, struct arange *first_arange,
 	    bfd_vma low_pc, bfd_vma high_pc)
 {
@@ -1702,14 +1725,14 @@ arange_add (const struct comp_unit *unit
 
   /* Ignore empty ranges.  */
   if (low_pc == high_pc)
-    return TRUE;
+    return true;
 
   /* 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 +1742,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 +1757,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 +1801,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 +1824,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 +1839,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 +1909,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 +1946,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 +1954,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 +1970,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 +1978,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 +2017,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 +2034,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,16 +2056,13 @@ 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:
@@ -2064,15 +2077,21 @@ 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;
+      /* Skip the first "zero entry", which is the compilation dir/file.  */
+      if (datai != 0)
+	if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
+	  return false;
     }
 
   *bufp = buf;
-  return TRUE;
+  return true;
 }
 
 /* Decode the line number information for UNIT.  */
@@ -2087,11 +2106,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 +2132,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 +2159,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 +2167,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 +2182,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 +2196,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 +2215,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 +2233,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);
@@ -2270,35 +2268,24 @@ decode_line_info (struct comp_unit *unit
   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;
     }
 
   /* Read the statement sequences until there's nothing left.  */
@@ -2325,8 +2312,7 @@ decode_line_info (struct comp_unit *unit
       /* 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 +2345,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)
 		{
@@ -2381,31 +2365,25 @@ decode_line_info (struct comp_unit *unit
 		    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;
+		    _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 +2393,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 +2410,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 +2431,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 +2462,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,10 +2489,8 @@ 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;
 }
 
@@ -2599,14 +2562,14 @@ lookup_address_in_line_info_table (struc
       return seq->last_line->address - seq->low_pc;
     }
 
-fail:
+ fail:
   *filename_ptr = NULL;
   return 0;
 }
 
 /* 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 +2580,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 +2617,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 +2629,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 +2681,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 +2689,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)
@@ -2727,13 +2703,13 @@ lookup_address_in_function_table (struct
   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.  */
@@ -2785,16 +2761,16 @@ 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,
@@ -2835,10 +2811,10 @@ lookup_symbol_in_function_table (struct
       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,7 +2822,7 @@ 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,
@@ -2858,7 +2834,7 @@ lookup_symbol_in_variable_table (struct
   struct varinfo* each;
 
   for (each = unit->variable_table; each; each = each->prev_var)
-    if (each->stack == 0
+    if (! each->stack
 	&& each->file != NULL
 	&& each->name != NULL
 	&& each->addr == addr
@@ -2871,29 +2847,29 @@ lookup_symbol_in_variable_table (struct
       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;
   struct attribute attr;
@@ -2904,7 +2880,7 @@ find_abstract_instance (struct comp_unit
       _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 +2908,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 +2931,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);
@@ -3011,7 +2987,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 +3008,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 +3023,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
 	{
@@ -3068,14 +3042,14 @@ find_abstract_instance (struct comp_unit
 		    {
 		      name = attr.u.str;
 		      if (non_mangled (unit->lang))
-			*is_linkage = TRUE;
+			*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;
+		    return false;
 		  break;
 		case DW_AT_linkage_name:
 		case DW_AT_MIPS_linkage_name:
@@ -3084,12 +3058,12 @@ find_abstract_instance (struct comp_unit
 		  if (is_str_attr (attr.form))
 		    {
 		      name = attr.u.str;
-		      *is_linkage = TRUE;
+		      *is_linkage = true;
 		    }
 		  break;
 		case DW_AT_decl_file:
 		  if (!comp_unit_maybe_decode_line_info (unit))
-		    return FALSE;
+		    return false;
 		  *filename_ptr = concat_filename (unit->line_table,
 						   attr.u.val);
 		  break;
@@ -3103,12 +3077,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,
+	     bfd_uint64_t offset)
 {
   bfd_byte *ranges_ptr;
   bfd_byte *ranges_end;
@@ -3117,13 +3091,15 @@ read_rangelist (struct comp_unit *unit,
   if (! unit->file->dwarf_ranges_buffer)
     {
       if (! read_debug_ranges (unit))
-	return FALSE;
+	return false;
     }
 
   ranges_ptr = unit->file->dwarf_ranges_buffer + offset;
   if (ranges_ptr < unit->file->dwarf_ranges_buffer)
-    return FALSE;
+    return false;
   ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size;
+  if (ranges_ptr >= ranges_end)
+    return false;
 
   for (;;)
     {
@@ -3131,13 +3107,11 @@ 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;
@@ -3147,25 +3121,140 @@ read_rangelist (struct comp_unit *unit,
 	{
 	  if (!arange_add (unit, arange,
 			   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,
+	       bfd_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, low_pc, high_pc))
+	return false;
+    }
+}
+
+static bool
+read_rangelist (struct comp_unit *unit, struct arange *arange,
+		bfd_uint64_t offset)
+{
+  if (unit->version <= 4)
+    return read_ranges (unit, arange, offset);
+  else
+    return read_rnglists (unit, arange, offset);
+}
+
+static struct funcinfo *
+lookup_func_by_offset (bfd_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 (bfd_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.  */
 
 /* 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;
@@ -3176,29 +3265,29 @@ scan_unit_for_symbols (struct comp_unit
   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;
+      bfd_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 +3310,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 +3339,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 +3364,87 @@ 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;
+	}
+    }
+
+  /* This is the second pass over the abbrevs.  */      
+  info_ptr = unit->first_child_die_ptr;
+  nesting_level = 0;
+  
+  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;
+      bfd_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)
+	{
+	  func = lookup_func_by_offset (current_offset, unit->function_table);
+	  if (func == NULL)
+	    goto fail;
+	}
+      else if (abbrev->tag == DW_TAG_variable
+	       || abbrev->tag == DW_TAG_member)
+	{
+	  var = lookup_var_by_offset (current_offset, unit->variable_table);
+	  if (var == NULL)
+	    goto fail;
+	}
+
+      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)
@@ -3303,7 +3480,7 @@ scan_unit_for_symbols (struct comp_unit
 		    {
 		      func->name = attr.u.str;
 		      if (non_mangled (unit->lang))
-			func->is_linkage = TRUE;
+			func->is_linkage = true;
 		    }
 		  break;
 
@@ -3314,7 +3491,7 @@ scan_unit_for_symbols (struct comp_unit
 		  if (is_str_attr (attr.form))
 		    {
 		      func->name = attr.u.str;
-		      func->is_linkage = TRUE;
+		      func->is_linkage = true;
 		    }
 		  break;
 
@@ -3349,6 +3526,33 @@ scan_unit_for_symbols (struct comp_unit
 	    {
 	      switch (attr.name)
 		{
+		case DW_AT_specification:
+		  if (attr.u.val)
+		    {
+		      struct varinfo * spec_var;
+
+		      spec_var = lookup_var_by_offset (attr.u.val,
+						       unit->variable_table);
+		      if (spec_var == NULL)
+			{
+			  _bfd_error_handler (_("DWARF error: could not find "
+						"variable specification "
+						"at offset 0x%lx"),
+					      (unsigned long) attr.u.val);
+			  break;
+			}
+
+		      if (var->name == NULL)
+			var->name = spec_var->name;
+		      if (var->file == NULL && spec_var->file != NULL)
+			var->file = strdup (spec_var->file);
+		      if (var->line == 0)
+			var->line = spec_var->line;
+		      if (var->sec == NULL)
+			var->sec = spec_var->sec;
+		    }
+		  break;
+
 		case DW_AT_name:
 		  if (is_str_attr (attr.form))
 		    var->name = attr.u.str;
@@ -3365,7 +3569,7 @@ scan_unit_for_symbols (struct comp_unit
 
 		case DW_AT_external:
 		  if (attr.u.val != 0)
-		    var->stack = 0;
+		    var->stack = false;
 		  break;
 
 		case DW_AT_location:
@@ -3379,7 +3583,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,6 +3609,9 @@ scan_unit_for_symbols (struct comp_unit
 	    }
 	}
 
+      if (abbrev->has_children)
+	nesting_level++;
+
       if (high_pc_relative)
 	high_pc += low_pc;
 
@@ -3413,33 +3620,14 @@ scan_unit_for_symbols (struct comp_unit
 	  if (!arange_add (unit, &func->arange, 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;
-	}
     }
 
   free (nested_funcs);
-  return TRUE;
+  return true;
 
  fail:
   free (nested_funcs);
-  return FALSE;
+  return false;
 }
 
 /* Parse a DWARF2 compilation unit starting at INFO_PTR.  UNIT_LENGTH
@@ -3465,19 +3653,18 @@ parse_comp_unit (struct dwarf2_debug *st
   /* 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;
 
-  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,25 +3685,18 @@ 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)
     {
@@ -3553,9 +3733,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
@@ -3678,24 +3857,24 @@ 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
+static bool
 comp_unit_contains_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;
+	return true;
       arange = arange->next;
     }
   while (arange);
 
-  return FALSE;
+  return false;
 }
 
 /* If UNIT contains ADDR, set the output parameters to the values for
@@ -3714,10 +3893,10 @@ comp_unit_find_nearest_line (struct comp
 			     unsigned int *linenumber_ptr,
 			     unsigned int *discriminator_ptr)
 {
-  bfd_boolean func_p;
+  bool 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);
@@ -3734,18 +3913,18 @@ comp_unit_find_nearest_line (struct comp
    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 +3932,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 +3954,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 +3962,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,
@@ -3829,7 +4008,7 @@ reverse_varinfo_list (struct varinfo *he
    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 +4016,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 +4041,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 +4054,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;
 }
 
@@ -3917,15 +4096,12 @@ find_debug_info (bfd *abfd, const struct
 	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)
+        return msec;
 
       for (msec = abfd->sections; msec != NULL; msec = msec->next)
-	if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
+	if (startswith (msec->name, GNU_LINKONCE_INFO))
 	  return msec;
 
       return NULL;
@@ -3941,7 +4117,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;
     }
 
@@ -4031,7 +4207,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 +4221,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;
@@ -4066,7 +4242,7 @@ place_sections (bfd *orig_bfd, struct dw
 	    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 +4260,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;
@@ -4110,7 +4286,7 @@ place_sections (bfd *orig_bfd, struct dw
 		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)
@@ -4148,7 +4324,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 +4333,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,
@@ -4198,10 +4374,10 @@ info_hash_lookup_funcinfo (struct info_h
       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,7 +4386,7 @@ 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,
@@ -4233,25 +4409,25 @@ info_hash_lookup_varinfo (struct info_ha
 	  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 +4440,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 +4458,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 +4473,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 +4491,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 +4539,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 +4557,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 +4578,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 +4588,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 +4598,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 +4611,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 +4621,14 @@ 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);
+  size_t amt = sizeof (struct dwarf2_debug);
   bfd_size_type total_size;
   asection *msec;
   struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
@@ -4467,11 +4643,11 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	  if (stash->f.bfd_ptr != NULL)
 	    {
 	      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);
@@ -4480,23 +4656,23 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
     {
       stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
       if (! stash)
-	return FALSE;
+	return false;
     }
   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;
 
@@ -4517,13 +4693,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,18 +4709,18 @@ _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
@@ -4564,7 +4740,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;
+	return false;
     }
   else
     {
@@ -4578,14 +4754,14 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd,
 	      || total_size + msec->size < msec->size)
 	    {
 	      bfd_set_error (bfd_error_no_memory);
-	      return FALSE;
+	      return false;
 	    }
 	  total_size += msec->size;
 	}
 
       stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size);
       if (stash->f.dwarf_info_buffer == NULL)
-	return FALSE;
+	return false;
 
       total_size = 0;
       for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
@@ -4601,7 +4777,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;
+	    return false;
 
 	  total_size += size;
 	}
@@ -4609,7 +4785,7 @@ _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;
 }
 
 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR.  */
@@ -4625,15 +4801,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 +4815,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,14 +4827,10 @@ 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,
@@ -4807,8 +4975,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,7 +4988,7 @@ _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;
 
@@ -4860,7 +5028,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 +5045,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;
 
@@ -4965,7 +5133,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 
       if (* linenumber_ptr)
 	{
-	  found = TRUE;
+	  found = true;
 	  goto done;
 	}
     }
@@ -5028,7 +5196,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
 	    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;
 	}
     }
 
@@ -5038,7 +5206,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd
   return found;
 }
 
-bfd_boolean
+bool
 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
 			       const char **filename_ptr,
 			       const char **functionname_ptr,
@@ -5058,11 +5226,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 +5262,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;
 	    }
 	}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecoff-bfd.h ./bfd/ecoff-bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecoff-bfd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ecoff-bfd.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Externally visible ECOFF routines.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecoff.c ./bfd/ecoff.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecoff.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ecoff.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic ECOFF (Extended-COFF) routines.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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
@@ -139,7 +111,7 @@ _bfd_ecoff_mkobject_hook (bfd *abfd, voi
 
 /* Initialize a new section.  */
 
-bfd_boolean
+bool
 _bfd_ecoff_new_section_hook (bfd *abfd, asection *section)
 {
   unsigned int i;
@@ -154,14 +126,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 +167,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 +211,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 +334,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 +382,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 +417,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 +434,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);
 
@@ -482,20 +456,18 @@ ecoff_slurp_symbolic_header (bfd *abfd)
   /* 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 +484,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;
+    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;
 
@@ -566,20 +539,15 @@ _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;
 
@@ -613,21 +581,26 @@ _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))
+    {
+      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 +612,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 +624,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 +639,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 +664,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 +758,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 +810,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 +833,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;
@@ -901,7 +870,7 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
       /* PR 17512: file: 3372-1000-0.004.  */
       if (internal_esym.asym.iss >= ecoff_data (abfd)->debug_info.symbolic_header.issExtMax
 	  || internal_esym.asym.iss < 0)
-	return FALSE;
+	return false;
 
       internal_ptr->symbol.name = (ecoff_data (abfd)->debug_info.ssext
 				   + internal_esym.asym.iss);
@@ -909,7 +878,7 @@ _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)
@@ -923,7 +892,7 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
 	}
       else
 	internal_ptr->fdr = NULL;
-      internal_ptr->local = FALSE;
+      internal_ptr->local = false;
       internal_ptr->native = (void *) eraw_src;
     }
 
@@ -951,9 +920,9 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd
 				       + 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 +944,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 +1055,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 +1070,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 +1237,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 +1246,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 +1329,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 +1342,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 +1357,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)
 {
@@ -1544,13 +1511,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 +1546,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 +1561,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 +1570,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++)
     {
@@ -1687,11 +1663,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 +1714,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 +1732,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 +1765,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 +1773,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 +1795,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;
 	}
     }
@@ -1890,14 +1866,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 +1906,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 +1947,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 +1955,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 +1968,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 +1992,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 +2033,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 +2051,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 +2090,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 +2111,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 +2151,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 +2164,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 +2184,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;
+    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 +2227,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 +2241,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 +2260,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 +2272,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 +2304,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 +2318,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 +2340,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 +2369,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.  */
@@ -2494,7 +2470,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 +2486,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
@@ -2781,15 +2757,13 @@ _bfd_ecoff_write_object_contents (bfd *a
 
   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 +2835,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;
@@ -2879,33 +2853,33 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
   /* Get the name of the first element.  */
   i = bfd_bread ((void *) nextname, (bfd_size_type) 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;
+    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 +2889,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 +2923,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 +2971,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 +2984,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 +2994,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 +3064,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));
 
@@ -3104,15 +3089,15 @@ _bfd_ecoff_write_armap (bfd *abfd,
 
   if (bfd_bwrite ((void *) &hdr, (bfd_size_type) sizeof (struct ar_hdr), abfd)
       != sizeof (struct ar_hdr))
-    return FALSE;
+    return false;
 
   H_PUT_32 (abfd, hashsize, temp);
   if (bfd_bwrite ((void *) temp, (bfd_size_type) 4, abfd) != 4)
-    return FALSE;
+    return false;
 
   hashtable = (bfd_byte *) bfd_zalloc (abfd, symdefsize);
   if (!hashtable)
-    return FALSE;
+    return false;
 
   current = abfd->archive_head;
   last_elt = current;
@@ -3157,21 +3142,21 @@ _bfd_ecoff_write_armap (bfd *abfd,
     }
 
   if (bfd_bwrite ((void *) hashtable, symdefsize, abfd) != symdefsize)
-    return FALSE;
+    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;
+    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;
+	return false;
     }
 
   /* The spec sez this should be a newline.  But in order to be
@@ -3179,10 +3164,10 @@ _bfd_ecoff_write_armap (bfd *abfd,
   if (padit)
     {
       if (bfd_bwrite ("", (bfd_size_type) 1, abfd) != 1)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* ECOFF linker code.  */
@@ -3228,7 +3213,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 +3245,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 +3267,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 +3275,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 +3286,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 +3296,7 @@ ecoff_link_add_externals (bfd *abfd,
 	case stStaticProc:
 	  break;
 	default:
-	  skip = TRUE;
+	  skip = true;
 	  break;
 	}
 
@@ -3377,19 +3362,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 +3389,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 +3430,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 +3444,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 +3515,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 +3531,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 +3611,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 +3626,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;
 		}
 	    }
@@ -3678,30 +3642,30 @@ ecoff_link_add_archive_symbols (bfd *abf
 
       element = (*backend->get_elt_at_filepos) (abfd, (file_ptr) file_offset);
       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 +3676,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 +3695,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,27 +3705,33 @@ 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, type)				\
+  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 = (type) _bfd_malloc_and_read (input_bfd, amt, amt);	\
+      if (debug->ptr == NULL)						\
+	{								\
+	  ret = false;							\
+	  goto return_something;					\
+	}								\
+    } while (0)
 
   /* If raw_syments is not NULL, then the data was already by read by
      _bfd_ecoff_slurp_symbolic_info.  */
@@ -3791,24 +3761,15 @@ ecoff_final_link_debug_accumulate (bfd *
  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);
+      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->external_fdr);
+      free (debug->external_rfd);
 
       /* Make sure we don't accidentally follow one of these pointers
 	 into freed memory.  */
@@ -3828,7 +3789,7 @@ ecoff_final_link_debug_accumulate (bfd *
 
 /* 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 +3807,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 +3822,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.  */
@@ -3899,18 +3858,14 @@ ecoff_indirect_link_order (bfd *output_b
       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 +3873,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 +3886,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 +3901,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 +3917,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 +3951,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 +3974,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 +3990,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,7 +4052,7 @@ 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);
 
@@ -4118,36 +4073,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 +4205,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 +4224,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 +4269,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 +4293,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 +4335,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 +4353,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 +4396,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecofflink.c ./bfd/ecofflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecofflink.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ecofflink.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Routines to link ECOFF debugging information.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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;
 
@@ -1464,13 +1464,11 @@ ecoff_write_symhdr (bfd *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,14 +1486,16 @@ 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_bwrite (debug->ptr,				\
+		     (bfd_size_type) 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);
@@ -1511,13 +1511,13 @@ 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,
@@ -1533,7 +1533,7 @@ ecoff_write_shuffle (bfd *abfd,
 	{
 	  if (bfd_bwrite (l->u.memory, (bfd_size_type) l->size, abfd)
 	      != l->size)
-	    return FALSE;
+	    return false;
 	}
       else
 	{
@@ -1541,7 +1541,7 @@ ecoff_write_shuffle (bfd *abfd,
 	      || 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;
+	    return false;
 	}
       total += l->size;
     }
@@ -1554,23 +1554,23 @@ ecoff_write_shuffle (bfd *abfd,
       i = swap->debug_align - (total & (swap->debug_align - 1));
       s = (bfd_byte *) bfd_zmalloc ((bfd_size_type) i);
       if (s == NULL && i != 0)
-	return FALSE;
+	return false;
 
       if (bfd_bwrite (s, (bfd_size_type) 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,
@@ -1652,7 +1652,7 @@ 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_bwrite (debug->ssext, amt, abfd) != amt)
     goto error_return;
   if ((debug->symbolic_header.issExtMax & (swap->debug_align - 1)) != 0)
     {
@@ -1682,17 +1682,15 @@ 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_bwrite (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
@@ -1721,7 +1719,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,7 +1729,7 @@ mk_fdrtab (bfd *abfd,
   FDR *fdr_ptr;
   FDR *fdr_start;
   FDR *fdr_end;
-  bfd_boolean stabs;
+  bool stabs;
   long len;
   bfd_size_type amt;
 
@@ -1750,7 +1748,7 @@ mk_fdrtab (bfd *abfd,
   amt = (bfd_size_type) len * sizeof (struct ecoff_fdrtab_entry);
   line_info->fdrtab = (struct ecoff_fdrtab_entry*) bfd_zalloc (abfd, amt);
   if (line_info->fdrtab == NULL)
-    return FALSE;
+    return false;
   line_info->fdrtab_len = len;
 
   tab = line_info->fdrtab;
@@ -1762,7 +1760,7 @@ 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;
@@ -1773,7 +1771,7 @@ mk_fdrtab (bfd *abfd,
 	  (*debug_swap->swap_sym_in) (abfd, sym_ptr, &sym);
 	  if (strcmp (debug_info->ss + fdr_ptr->issBase + sym.iss,
 		      STABS_SYMBOL) == 0)
-	    stabs = TRUE;
+	    stabs = true;
 	}
 
       if (!stabs)
@@ -1807,7 +1805,7 @@ mk_fdrtab (bfd *abfd,
   qsort (line_info->fdrtab, (size_t) len,
 	 sizeof (struct ecoff_fdrtab_entry), cmp_fdrtab_entry);
 
-  return TRUE;
+  return true;
 }
 
 /* Return index of first FDR that covers to OFFSET.  */
@@ -1860,7 +1858,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 +1866,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 +1877,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,7 +1960,7 @@ 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;
@@ -1973,7 +1971,7 @@ lookup_line (bfd *abfd,
       (*debug_swap->swap_sym_in) (abfd, sym_ptr, &sym);
       if (strcmp (debug_info->ss + fdr_ptr->issBase + sym.iss,
 		  STABS_SYMBOL) == 0)
-	stabs = TRUE;
+	stabs = true;
     }
 
   if (!stabs)
@@ -2108,7 +2106,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;
@@ -2201,8 +2199,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;
@@ -2228,8 +2226,8 @@ 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;
 
@@ -2279,7 +2277,7 @@ lookup_line (bfd *abfd,
 
 		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;
@@ -2292,7 +2290,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 +2318,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 +2349,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 +2378,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 +2386,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,7 +2399,7 @@ _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;
@@ -2417,18 +2414,18 @@ ecoff_collect_shuffle (struct shuffle *l
 	  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;
+	    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 +2436,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,7 +2446,7 @@ _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;
@@ -2474,5 +2471,5 @@ _bfd_ecoff_get_accumulated_ss (void * ha
       buff += len + 1;
     }
 
-  return TRUE;
+  return true;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecoffswap.h ./bfd/ecoffswap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ecoffswap.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ecoffswap.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic ECOFF swapping routines, for BFD.
-   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-am33lin.c ./bfd/elf32-am33lin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-am33lin.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-am33lin.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-arc.c ./bfd/elf32-arc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-arc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-arc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARC-specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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[] =
 {
@@ -254,15 +251,15 @@ static struct reloc_howto_struct elf_arc
     0, // Rightshift.
     2, // Size (0 = byte, 1 = short, 2 = long).
     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
@@ -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)
     {
@@ -1255,11 +1251,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);					\
@@ -1427,7 +1423,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 +1447,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 +1467,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 +1477,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 +1513,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 +1523,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 +1543,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 +1627,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 +1661,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 +1695,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 +1703,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 +1715,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 +1724,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 +1745,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 +1782,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 +1791,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 +1805,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 +1814,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 +1825,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 +1844,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 +1871,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 +1884,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 +1901,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 +1932,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 +1958,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 +1980,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 +2026,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 +2048,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 +2094,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 +2107,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 +2146,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 +2226,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 +2292,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 +2315,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 +2335,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 +2360,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 +2372,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 +2383,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 +2408,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 +2439,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 +2474,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 +2506,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 +2524,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 +2547,7 @@ arc_create_forced_local_got_entries_for_
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -2561,7 +2559,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 +2577,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 +2619,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 +2632,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 +2665,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 +2690,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 +2759,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 +2786,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;
-    }
-
-  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 false;
     }
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs_exist);
 }
 
 
@@ -2908,7 +2857,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 +2866,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 +2901,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 +2910,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 +2925,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 +2938,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 +2955,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,7 +2966,7 @@ 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
@@ -3026,7 +2975,7 @@ arc_elf_relax_section (bfd *abfd, asecti
       || (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;
 
@@ -3104,7 +3053,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 +3077,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-arm.c ./bfd/elf32-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-arm.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-arm.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for ARM
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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
@@ -82,247 +82,247 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,			/* 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) */
 	 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) */
 	 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.  */
 
@@ -330,43 +330,43 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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 */
 
@@ -374,463 +374,463 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -839,57 +839,57 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
 
@@ -897,379 +897,379 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
 
@@ -1277,211 +1277,211 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
@@ -1490,171 +1490,171 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1681,109 +1681,109 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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: */
@@ -1793,106 +1793,106 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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:  */
@@ -1902,57 +1902,57 @@ static reloc_howto_type elf32_arm_howto_
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,			/* 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,			/* 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,			/* 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
@@ -2839,29 +2831,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 +3088,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 +3135,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 +3146,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 +3165,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 +3172,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 +3192,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 +3215,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 +3251,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 +3361,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 +3381,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 +3391,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 +3487,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 +3521,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 +3558,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 +3582,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_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)));
 
-      elf32_arm_local_got_tls_type (abfd) = data;
+      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 +3657,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 +3672,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 +3681,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 +3718,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 +3749,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 +3802,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 +3822,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 +3850,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 +3861,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 +3870,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 +3899,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,7 +3934,7 @@ 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 =
@@ -3949,25 +3952,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 +4009,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 +4020,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 +4035,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 +4082,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 +4106,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,7 +4123,7 @@ 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,
@@ -4167,7 +4139,7 @@ arch_has_arm_nop (struct elf32_arm_link_
 	  || arch == TAG_CPU_ARCH_V8R);
 }
 
-static bfd_boolean
+static bool
 arm_stub_is_thumb (enum elf32_arm_stub_type stub_type)
 {
   switch (stub_type)
@@ -4181,13 +4153,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 +4181,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 +4490,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 +4570,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 +4585,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 +4612,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 +4625,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 +4634,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 +4728,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 +4759,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 +4814,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 +4908,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 +4952,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 +4961,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 +5010,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 +5036,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 +5130,7 @@ arm_build_one_stub (struct bfd_hash_entr
 
 	default:
 	  BFD_FAIL ();
-	  return FALSE;
+	  return false;
 	}
     }
 
@@ -5174,7 +5154,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 +5183,7 @@ arm_build_one_stub (struct bfd_hash_entr
 	   &error_message);
     }
 
-  return TRUE;
+  return true;
 #undef MAXRELOCS
 }
 
@@ -5254,7 +5234,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 +5245,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 +5261,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 +5284,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 +5388,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 +5504,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 +5513,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 +5522,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 +5545,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 +5556,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 +5576,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 +5607,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 +5631,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 +5702,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 +5712,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 +5766,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
 				{
 				  free (stub_name);
 				  stub_name = NULL;
-				  *stub_changed_p = TRUE;
+				  *stub_changed_p = true;
 				}
 			    }
 
@@ -5829,7 +5807,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 +5833,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 +5862,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 +5918,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 +5943,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 +5958,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 +5973,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 +5986,24 @@ 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]);
 	  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 +6011,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 +6020,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 +6063,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 +6076,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 +6094,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 +6106,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 +6123,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 +6135,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 +6145,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 +6157,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 +6168,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 +6192,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 +6203,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 +6217,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 +6275,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 +6319,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 +6343,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 +6353,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 +6362,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 +6390,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 +6404,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 +6414,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 +6426,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 +6493,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 +6531,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 +6574,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 +6587,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 +6609,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 +6761,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 +6786,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 		      else if (!new_stub)
 			break;
 		      else
-			stub_changed = TRUE;
+			stub_changed = true;
 		    }
 		  while (0);
 
@@ -6888,10 +6865,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 +6934,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 +6944,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 +6962,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 +7008,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 +7018,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 +7037,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 +7068,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,7 +7095,7 @@ 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'"),
@@ -7148,13 +7125,12 @@ 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);
+    (&(hash_table)->root, tmp_name, false, false, true);
 
   if (myh == NULL
       && asprintf (error_message, _("unable to find %s glue '%s' for '%s'"),
@@ -7265,7 +7241,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 +7269,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 +7299,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 +7321,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 +7376,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 +7389,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 +7467,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 +7481,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 +7506,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 +7514,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 +7532,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 +7586,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 +7600,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 +7625,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 +7633,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 +7650,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 +7677,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 +7685,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 +7706,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 +7773,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 +7781,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 +7790,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 +7818,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 +7833,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,20 +7846,20 @@ 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)
     {
@@ -7901,7 +7873,7 @@ bfd_elf32_arm_process_before_allocation
 
       /* 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 +7955,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 +8124,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 +8147,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 +8157,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 +8165,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 +8184,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 +8372,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 +8383,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 +8414,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)
     {
@@ -8604,20 +8572,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 +8610,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 +8631,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 +8651,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 +8698,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 +8718,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 +8737,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 +8759,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 +8767,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 +8775,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 +8807,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 +8822,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 +8839,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 +8902,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 +8990,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 +9007,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 +9116,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 +9142,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 +9191,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 +9324,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 +9343,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 +9363,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 +9387,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 +9514,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 +9530,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 +9572,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 +9608,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 +9621,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 +9635,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 +9643,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;
-
-	  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));
+	  /* 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);
 
-	  /* 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 +9969,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 +9980,7 @@ elf32_arm_populate_plt_entry (bfd *outpu
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Some relocations map to different relocations depending on the
@@ -10289,7 +10228,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 +10285,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 +10307,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 +10342,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 (howto->size)
 	{
-	  signed_addend = -1;
-	  signed_addend &= ~ howto->src_mask;
-	  signed_addend |= addend;
-	}
-      else
-	signed_addend = addend;
+	case 0: addend = bfd_get_8 (input_bfd, hit_data); break;
+	case 1: addend = bfd_get_16 (input_bfd, hit_data); break;
+	case 2: 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 +10379,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 +10389,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 +10440,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 +10479,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 +10492,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 +10510,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 +10528,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 +10539,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 +10568,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 +10675,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 +10687,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 +10717,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 +10821,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 +10833,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 +10984,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 +11111,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 +11149,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 +11178,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 +11211,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 +11248,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 +11278,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 +11311,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 +11402,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 +11440,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 +11457,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 +11468,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 +11491,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 +11618,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 +11654,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 +11662,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 +11672,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 +11689,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 +11698,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 +11712,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 +11844,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 +11873,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 +12003,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 +12593,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 +12647,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 +12680,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 +12704,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 +12716,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 +12733,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 +12748,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 +12785,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 +12820,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 +12829,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 +12855,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:
@@ -13164,7 +13086,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 +13105,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 +13124,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 +13165,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 +13209,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 +13267,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 +13380,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 +13399,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 +13427,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 +13475,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 +13487,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 +13520,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 +13595,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 +13679,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 +13688,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 +13701,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 +13740,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 +13751,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.  */
@@ -13940,7 +13864,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 +13880,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 +13906,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 +13932,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 +13956,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 +14025,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 +14034,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;
     }
 }
 
@@ -14464,7 +14388,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 +14399,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 +14429,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 +14439,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 +14476,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] =
@@ -14582,7 +14506,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;
 	}
     }
 
@@ -14639,7 +14563,7 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 
 	    /* Return with error if failed to merge.  */
 	    if (arch_attr == -1)
-	      return FALSE;
+	      return false;
 
 	    out_attr[i].i = arch_attr;
 
@@ -14711,7 +14635,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 +14665,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 +14692,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 +14837,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 +14850,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 +14884,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 +14906,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 +14923,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 +14960,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 +14998,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 +15009,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 +15024,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 +15044,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 +15165,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 +15216,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 +15227,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 +15249,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 +15284,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 +15294,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 +15310,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 +15323,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 +15341,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 +15357,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 +15413,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 +15465,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 +15476,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 +15503,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 +15534,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 +15597,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 +15633,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 +15665,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 +15851,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 +15864,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 debug_sec_need_to_be_marked = false;
   asection *isec;
 
   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
@@ -15951,10 +15876,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 +15899,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;
 		}
 	    }
 
@@ -15997,16 +15922,16 @@ elf32_arm_gc_mark_extra_sections (struct
 
 		  /* 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,
+		  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;
 		    }
 		}
 
@@ -16021,19 +15946,19 @@ elf32_arm_gc_mark_extra_sections (struct
 		      if (!isec->gc_mark && (isec->flags & SEC_DEBUGGING))
 			isec->gc_mark = 1 ;
 		    }
-		  debug_sec_need_to_be_marked = FALSE;
+		  debug_sec_need_to_be_marked = false;
 		}
 	    }
 	}
-      first_bfd_browse = FALSE;
+      first_bfd_browse = false;
     }
 
-  return TRUE;
+  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 +15974,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 +16008,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 +16044,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 +16084,7 @@ elf32_arm_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     {
@@ -16191,13 +16108,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 +16126,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 +16165,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 +16174,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 +16192,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 +16239,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 +16270,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 (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 (((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 (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 +16387,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 +16398,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 +16412,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 +16436,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 +16447,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 +16499,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 +16514,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 +16523,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 +16537,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 +16548,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 +16563,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 +16576,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 +16587,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 +16610,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 +16619,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 +16633,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 +16660,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 +16702,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 +16723,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 +16733,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 +16744,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 +16761,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 +16776,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 +16791,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 +16810,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 +16867,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 +16945,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 +16957,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 +16972,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 +16987,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 +17036,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;
-    }
-
-  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;
+	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 +17056,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 +17065,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 +17075,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 +17109,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 +17120,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 +17179,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 +17239,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 +17249,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 +17257,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 +17267,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 +17282,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 +17308,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 +17325,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 +17356,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 +17379,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 +17402,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 +17448,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 +17458,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 +17483,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 +17513,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 +17546,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 +17563,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 +17610,7 @@ elf32_arm_init_file_header (bfd *abfd, s
 	  m->p_flags_valid = 1;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -17856,7 +17639,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 +17648,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 +17675,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 +17701,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 +17739,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 +17762,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 +17772,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 +17792,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 +17852,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 +17898,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 +17915,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 +17939,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 +17954,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 +17989,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 +18016,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,
@@ -18268,7 +18044,7 @@ elf32_arm_output_arch_local_syms (bfd *o
 
   htab = elf32_arm_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   check_use_blx (htab);
 
@@ -18387,51 +18163,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 +18225,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 +18292,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 +18320,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 +18363,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 +18446,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 +18464,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 +18493,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 +18520,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 +18542,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.  */
@@ -19379,13 +19168,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 +19286,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 +19305,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 +19489,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 +19571,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 +19587,7 @@ elf32_arm_write_section (bfd *output_bfd
     }
 
   if (mapcount == 0)
-    return FALSE;
+    return false;
 
   if (globals->byteswap_code)
     {
@@ -19850,19 +19641,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 +19680,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 +19723,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 +19744,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 +19754,7 @@ elf32_arm_modify_segment_map (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* We may add a PT_ARM_EXIDX program header.  */
@@ -19984,20 +19775,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.  */
@@ -20091,7 +19882,7 @@ elf32_arm_plt_size (const bfd *abfd, con
   /* Respect Thumb stub if necessary.  */
   if (read_code16 (abfd, addr) == 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.  */
@@ -20155,15 +19946,15 @@ 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)
+      if (!bfd_get_full_section_contents (abfd, (asection *) plt, &data) || data == NULL)
 	return -1;
-      bfd_cache_section_contents((asection *) plt, data);
+      bfd_cache_section_contents ((asection *) plt, data);
     }
 
   count = relplt->size / hdr->sh_entsize;
@@ -20230,12 +20021,12 @@ elf32_arm_get_synthetic_symtab (bfd *abf
   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 +20052,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 +20119,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 +20135,7 @@ elf32_arm_copy_special_section_fields (c
       break;
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Returns TRUE if NAME is an ARM mapping symbol.
@@ -20354,7 +20145,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.  */
@@ -20475,7 +20266,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 +20295,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 +20305,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 +20349,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"
 
@@ -20611,7 +20402,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 +20415,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 +20433,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 +20466,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 +20497,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 +20506,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,7 +20543,7 @@ 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))
@@ -20762,26 +20556,26 @@ elf32_arm_merge_private_bfd_data (bfd *i
 	 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)
 	  && 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 +20589,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 +20601,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 +20620,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 +20635,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 +20649,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 +20663,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 +20677,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 +20700,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 +20725,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-arm.h ./bfd/elf32-arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-arm.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-arm.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for ARM
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-avr.c ./bfd/elf32-avr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-avr.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-avr.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* AVR-specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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))
@@ -123,74 +123,74 @@ static reloc_howto_type elf_avr_howto_ta
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -198,45 +198,45 @@ static reloc_howto_type elf_avr_howto_ta
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -244,418 +244,418 @@ static reloc_howto_type elf_avr_howto_ta
 	 16,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -1054,7 +1052,7 @@ avr_final_link_relocate (reloc_howto_typ
       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;
 
@@ -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,
@@ -1503,7 +1501,7 @@ 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:
@@ -1529,14 +1527,14 @@ elf32_avr_relocate_section (bfd *output_
 	}
     }
 
-  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 +1623,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 +1715,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 +1845,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 +1862,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 +1902,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 +1921,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 +1961,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 +1992,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 +2052,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 +2068,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 +2183,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static Elf_Internal_Sym *
@@ -2454,11 +2449,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 +2461,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 +2475,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 +2487,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,17 +2503,17 @@ 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
@@ -2528,12 +2523,12 @@ elf32_avr_relax_section (bfd *abfd,
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 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 +2745,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 +2796,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 +2827,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 +2990,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;
 
@@ -3076,13 +3071,13 @@ elf32_avr_relax_section (bfd *abfd,
 			    /* 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 +3139,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 +3161,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 +3190,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;
@@ -3230,7 +3221,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 +3264,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,13 +3274,10 @@ 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);
   return NULL;
 }
@@ -3330,7 +3316,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 +3337,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 +3355,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 +3381,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 +3405,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 +3437,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 +3480,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 +3544,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 +3593,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 +3613,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 +3794,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 +3813,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 +3822,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 +3838,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 +3856,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 +3866,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 +3881,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 +3903,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 +3932,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 +3940,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 +3998,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 +4008,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 +4028,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 +4103,7 @@ avr_elf32_load_records_from_section (bfd
 	    }
 	}
 
-      address = *((uint32_t *) ptr);
+      address = bfd_get_32 (abfd, ptr);
       ptr += 4;
       size -= 4;
 
@@ -4146,7 +4132,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 +4145,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 +4153,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 +4164,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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-avr.h ./bfd/elf32-avr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-avr.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-avr.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* AVR-specific support for 32-bit ELF.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-bfin.c ./bfd/elf32-bfin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-bfin.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-bfin.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -58,7 +58,7 @@ 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))
     return bfd_reloc_outofrange;
@@ -155,7 +155,7 @@ 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))
@@ -226,7 +226,7 @@ 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))
@@ -293,7 +293,7 @@ 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))
@@ -426,57 +426,57 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift.  */
 	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
 	 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)..  */
 	 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,			/* 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).  */
 	 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.  */
@@ -486,225 +486,225 @@ static reloc_howto_type bfin_howto_table
 				   Right shift the rightmost bit..  */
 	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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,			/* 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,			/* 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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
@@ -713,15 +713,15 @@ static reloc_howto_type bfin_howto_table
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -729,15 +729,15 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -745,30 +745,30 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -776,15 +776,15 @@ static reloc_howto_type bfin_howto_table
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -792,15 +792,15 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -808,30 +808,30 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -839,15 +839,15 @@ static reloc_howto_type bfin_howto_table
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -855,15 +855,15 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -871,15 +871,15 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -887,15 +887,15 @@ static reloc_howto_type bfin_howto_table
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -903,15 +903,15 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -919,15 +919,15 @@ static reloc_howto_type bfin_howto_table
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 [] =
@@ -936,59 +936,59 @@ static reloc_howto_type bfin_gnuext_howt
 	 0,			/* rightshift.  */
 	 1,			/* size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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 +1041,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 +1062,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 +1129,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 +1146,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 +1159,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 +1175,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 +1197,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 +1208,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 +1229,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 +1244,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 +1266,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 +1289,7 @@ bfin_check_relocs (bfd * abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -1354,7 +1357,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 +1394,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 +1402,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 +1413,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 +1430,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 +1472,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 +1480,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 +1517,7 @@ bfin_relocate_section (bfd * output_bfd,
 		      }
 		  }
 		else
-		  unresolved_reloc = FALSE;
+		  unresolved_reloc = false;
 	      }
 	    else
 	      {
@@ -1585,7 +1588,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 +1603,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 +1619,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 +1671,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 +1732,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 +2050,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 +2061,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 +2073,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 +2189,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
 	      idx = dynindx;
 	      ad = addend;
 	      if (ad)
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
@@ -2329,7 +2333,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
       else if (entry->lazyplt)
 	{
 	  if (ad)
-	    return FALSE;
+	    return false;
 
 	  fd_lazy_rel_offset = ofst;
 
@@ -2450,7 +2454,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relocate an Blackfin ELF section.
@@ -2483,7 +2487,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 +2550,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 +2570,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 +2619,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 +2634,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 +2645,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 +2661,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 +2727,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 +2879,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 +2920,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 +2957,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 +3024,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 +3044,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 +3124,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 +3150,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 +3167,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 +3180,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 +3192,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 +3208,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 +3219,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 +3239,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 +3254,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 +3268,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 +3280,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 +3296,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 +3323,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 +3342,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 +3362,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 +3434,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 +3487,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 +3860,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 +3926,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 +3945,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 +3957,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 +3971,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 +4016,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 +4070,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,27 +4080,27 @@ 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;
@@ -4119,7 +4108,7 @@ _bfinfdpic_check_discarded_relocs (bfd *
 
   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);
@@ -4167,28 +4156,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 +4186,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 +4204,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 +4246,7 @@ elf32_bfinfdpic_finish_dynamic_sections
 	    {
 	      _bfd_error_handler
 		("LINKER BUG: .rofixup section size mismatch");
-	      return FALSE;
+	      return false;
 	    }
 	}
     }
@@ -4313,13 +4302,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 +4334,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 +4499,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 +4511,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 +4527,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 +4560,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 +4589,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 +4662,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 +4671,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 +4686,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 +4703,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 +4736,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 +4768,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 +4801,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 +4829,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 +4844,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 +4879,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,
@@ -4964,7 +4949,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 +4958,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 +4991,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 +5002,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 +5035,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 +5049,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 +5059,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 +5094,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 +5114,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 +5171,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 +5184,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 +5199,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 +5230,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 +5246,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 +5256,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 +5277,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 +5296,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 +5376,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 +5415,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-bfin.h ./bfd/elf32-bfin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-bfin.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-bfin.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ADI Blackfin BFD support for 32-bit ELF.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32.c ./bfd/elf32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF 32-bit executable support for BFD.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-cr16.c ./bfd/elf32-cr16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-cr16.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-cr16.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by M R Swami Reddy.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -118,366 +118,366 @@ static reloc_howto_type cr16_elf_howto_t
 	 0,			   /* rightshift */
 	 3,			   /* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -486,15 +486,15 @@ static reloc_howto_type cr16_elf_howto_t
 	 0,			   /* rightshift */
 	 0,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -503,15 +503,15 @@ static reloc_howto_type cr16_elf_howto_t
 	 0,			   /* rightshift */
 	 1,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -520,63 +520,63 @@ static reloc_howto_type cr16_elf_howto_t
 	 0,			   /* rightshift */
 	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
 	 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 */
 	 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) */
 	 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,17 +684,17 @@ 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)
 {
@@ -710,10 +710,10 @@ 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);
@@ -824,10 +824,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 +854,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_NONE:
+      return bfd_reloc_ok;
+      break;
 
-     case R_CR16_DISP4:
-       if (is_local)
+    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 +922,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;
@@ -962,276 +957,248 @@ cr16_elf_final_link_relocate (reloc_howt
 
   switch (howto->size)
     {
-      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 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;
 
-	     /* 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 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);
 
-	      /* 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 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)));
 
-		   Rvalue = sgot->output_offset + off;
-		}
+	  Rvalue1 = (Rvalue1 ^ 0x80000) - 0x80000;
+	  Rvalue += Rvalue1;
+
+	  /* Check for range.  */
+	  if (Rvalue > 0xfffff)
+	    return bfd_reloc_overflow;
+
+	  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;
+
+	  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;
 
-	     Rvalue += addend;
+	      /* 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));
 
-	     /* 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;
+	      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));
 
-		  /* 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;
+	      Rvalue1 = (Rvalue1 ^ 0x80000) - 0x80000;
+	      Rvalue += Rvalue1;
+
+	      /* 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));
+
+	    }
+	  else if (r_type == R_CR16_NUM32)
+	    {
+	      Rvalue1 = (bfd_get_32 (input_bfd, hit_data));
 
-      default:
-	return bfd_reloc_notsupported;
+	      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 +1206,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 +1240,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 +1264,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 +1290,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 +1323,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 +1377,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 +1417,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 +1463,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;
@@ -1529,7 +1496,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 +1535,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,13 +1549,10 @@ 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);
   return NULL;
 }
@@ -1641,7 +1603,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 +1626,8 @@ elf_cr16_mach (flagword flags)
 {
   switch (flags)
     {
-      case EM_CR16:
-      default:
+    case EM_CR16:
+    default:
       return bfd_mach_cr16;
     }
 }
@@ -1674,51 +1636,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 +1695,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,7 +1706,7 @@ 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
@@ -1753,7 +1715,7 @@ elf32_cr16_relax_section (bfd *abfd, ase
       || (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;
 
@@ -1870,11 +1832,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 +1853,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 +1882,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 +1901,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 +1918,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 +1927,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 +1955,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 +1977,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 +1988,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 +2011,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 +2030,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 +2048,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 +2059,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 +2073,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 +2123,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 +2135,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 +2145,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 +2178,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 +2199,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 +2215,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 +2231,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 +2252,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 +2265,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 +2298,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 +2321,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 +2333,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 +2344,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 +2383,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 +2422,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 +2437,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 +2473,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 +2483,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 +2566,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 +2574,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 +2649,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 +2659,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 +2678,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 +2701,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 +2756,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-cr16.h ./bfd/elf32-cr16.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-cr16.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-cr16.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-cris.c ./bfd/elf32-cris.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-cris.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-cris.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* CRIS-specific support for 32-bit ELF.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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.  */
@@ -42,52 +42,52 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -186,45 +186,45 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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
@@ -233,44 +233,44 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -278,29 +278,29 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -308,15 +308,15 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -324,15 +324,15 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -341,15 +341,15 @@ static reloc_howto_type cris_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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, 2, 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, 1, 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
@@ -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));
@@ -4163,7 +4119,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-crx.c ./bfd/elf32-crx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-crx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-crx.c	2021-12-16 01:57:38.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-2021 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.  */
 
@@ -84,253 +84,253 @@ static reloc_howto_type crx_elf_howto_ta
 	 0,			/* rightshift */
 	 3,			/* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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
@@ -339,15 +339,15 @@ static reloc_howto_type crx_elf_howto_ta
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -356,15 +356,15 @@ static reloc_howto_type crx_elf_howto_ta
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -373,15 +373,15 @@ static reloc_howto_type crx_elf_howto_ta
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,7 +525,7 @@ 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;
@@ -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;
@@ -762,7 +755,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 +798,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 +808,17 @@ 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);
   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 +860,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 +906,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 +933,7 @@ elf32_crx_relocate_section (bfd *output_
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function handles relaxing for the CRX.
@@ -959,9 +947,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,7 +958,7 @@ 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
@@ -979,7 +967,7 @@ elf32_crx_relax_section (bfd *abfd, asec
       || (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;
 
@@ -1122,7 +1110,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 +1155,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 +1207,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 +1248,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 +1277,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-csky.c ./bfd/elf32-csky.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-csky.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-csky.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for C-SKY.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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 */
 	 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 */
 	 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 */
 	 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),
@@ -148,75 +149,75 @@ static reloc_howto_type csky_elf_howto_t
 	 0,                           /* rightshift */
 	 2,                           /* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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.  */
@@ -224,15 +225,15 @@ static reloc_howto_type csky_elf_howto_t
 	 0,                           /* rightshift */
 	 2,                           /* 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),
@@ -245,60 +246,60 @@ static reloc_howto_type csky_elf_howto_t
 	 0,                           /* rightshift */
 	 2,                           /* 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 */
 	 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 */
 	 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 */
 	 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),
@@ -311,255 +312,255 @@ static reloc_howto_type csky_elf_howto_t
 	 1,                           /* rightshift */
 	 2,                           /* 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 */
+         2,                           /* 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 */
+         2,                           /* 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 */
 	 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 */
+         2,                           /* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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),
@@ -578,240 +579,240 @@ static reloc_howto_type csky_elf_howto_t
 	 1,                           /* rightshift */
 	 2,                           /* 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 */
 	 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 */
 	 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 */
+         2,                           /* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
+         2,                           /* 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 */
 	 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),
@@ -880,10 +881,10 @@ static reloc_howto_type csky_elf_howto_t
 	 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 */
@@ -894,10 +895,10 @@ static reloc_howto_type csky_elf_howto_t
 	 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 (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (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,13 +1652,13 @@ 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
+static bool
 csky_allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
 {
   struct bfd_link_info *info;
@@ -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)
     {
@@ -2065,15 +2017,15 @@ csky_elf_size_dynamic_sections (bfd *out
       && 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 +2043,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 +2086,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 +2107,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 +2268,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 +2284,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 +2300,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 +2310,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 +2362,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 +2377,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 +2432,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 +2483,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 +2506,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 +2578,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 +2602,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 +2613,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 +2627,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 +2731,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 +2775,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 +2783,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 +2807,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 +2835,203 @@ 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;
+  obj_attribute tattr;
+  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);
+
+      /* If Tag_CSKY_CPU_NAME is already set, save it.  */
+      memcpy (&tattr, &out_attr[Tag_CSKY_ARCH_NAME], sizeof (tattr));
+
+      _bfd_elf_copy_obj_attributes (ibfd, obfd);
+
+      out_attr = elf_known_obj_attributes_proc (obfd);
+
+      /* Restore Tag_CSKY_CPU_NAME.  */
+      memcpy (&out_attr[Tag_CSKY_ARCH_NAME], &tattr, sizeof (tattr));
+
+      /* 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 +3039,108 @@ 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 & (~CSKY_ARCH_MASK))
+   | (new_flags & (~CSKY_ARCH_MASK));
+
+  sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
+  if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
     {
-      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 +3157,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 +3198,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 +3292,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 +3336,7 @@ find_stub_size_and_template (enum elf32_
 
       default:
 	BFD_FAIL ();
-	return FALSE;
+	return false;
       }
     }
 
@@ -3237,7 +3351,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 +3373,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 +3394,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 +3414,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 +3423,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 +3461,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 +3527,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 +3644,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 +3678,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 +3705,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 +3735,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 +3793,7 @@ csky_build_one_stub (struct bfd_hash_ent
 	break;
       default:
 	BFD_FAIL ();
-	return FALSE;
+	return false;
       }
   stub_sec->size += size;
 
@@ -3710,7 +3832,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 +3842,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 +3852,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 +3868,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 +3876,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 +3892,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 +3948,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 +3957,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 +3989,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 +4000,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 +4021,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 +4113,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 +4140,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 +4200,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 +4284,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 +4299,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 +4314,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 +4342,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 +4352,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 +4364,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 +4442,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 +4485,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 +4507,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 +4552,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 +4596,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 +4626,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 +4661,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 +4681,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 +4773,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 +4809,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 +4838,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 +4859,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 +4971,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 +4987,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 +5013,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 +5026,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;
@@ -5055,7 +5173,7 @@ csky_elf_relocate_section (bfd *
 
       if (r != bfd_reloc_ok)
 	{
-	  ret = FALSE;
+	  ret = false;
 	  switch (r)
 	    {
 	    default:
@@ -5085,7 +5203,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 +5212,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 +5233,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 +5260,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 +5325,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 +5359,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-csky.h ./bfd/elf32-csky.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-csky.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-csky.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for C-SKY.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-d10v.c ./bfd/elf32-d10v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-d10v.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-d10v.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* D10V-specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -35,135 +35,135 @@ static reloc_howto_type elf_d10v_howto_t
 	 0,			/* Rightshift.  */
 	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-d30v.c ./bfd/elf32-d30v.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-d30v.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-d30v.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* D30V-specific support for 32-bit ELF
-   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt@cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -256,195 +256,195 @@ static reloc_howto_type elf_d30v_howto_t
 	 0,			/* Rightshift.  */
 	 3,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-dlx.c ./bfd/elf32-dlx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-dlx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-dlx.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* DLX specific support for 32-bit ELF
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -240,90 +240,90 @@ static reloc_howto_type dlx_elf_howto_ta
 	 0,			/* Rightshift.  */
 	 3,			/* size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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.  */
@@ -332,15 +332,15 @@ static reloc_howto_type elf_dlx_gnu_rel1
 	 0,			/* Rightshift.  */
 	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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 =
@@ -348,15 +348,15 @@ static reloc_howto_type elf_dlx_gnu_rel2
 	 0,			/* Rightshift.  */
 	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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 =
@@ -364,15 +364,15 @@ static reloc_howto_type elf_dlx_reloc_16
 	 16,			/* Rightshift.  */
 	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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 =
@@ -380,15 +380,15 @@ static reloc_howto_type elf_dlx_reloc_16
 	 0,			/* Rightshift.  */
 	 1,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-dlx.h ./bfd/elf32-dlx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-dlx.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-dlx.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* DLX specific support for 32-bit ELF
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-epiphany.c ./bfd/elf32-epiphany.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-epiphany.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-epiphany.c	2021-12-16 01:57:38.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-2021 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 [] =
@@ -57,45 +57,45 @@ static reloc_howto_type epiphany_elf_how
 	  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, 3,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, 0, 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, 1,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, 2,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, 0,  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, 1, 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, 2, 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, 0, 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, 2,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, 2,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, 2,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, 2,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, 2,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, 1, 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,24 +189,24 @@ 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,
@@ -216,7 +216,7 @@ epiphany_elf_relax_section (bfd *abfd, a
       || (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;
 
@@ -278,8 +278,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 +292,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 +313,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 +341,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 +372,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 +468,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 +518,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 +555,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 +584,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-fr30.c ./bfd/elf32-fr30.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-fr30.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-fr30.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* FR30-specific support for 32-bit ELF.
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -39,194 +39,194 @@ static reloc_howto_type fr30_elf_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-frv.c ./bfd/elf32-frv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-frv.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-frv.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* FRV-specific support for 32-bit ELF.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,158 +37,158 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -196,15 +196,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -212,15 +212,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -228,30 +228,30 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -259,15 +259,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -275,15 +275,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -291,30 +291,30 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -322,15 +322,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -338,15 +338,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -354,15 +354,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -370,15 +370,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -386,15 +386,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -402,15 +402,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -419,15 +419,15 @@ static reloc_howto_type elf32_frv_howto_
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -435,15 +435,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -451,15 +451,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -467,15 +467,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -483,15 +483,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -499,15 +499,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -515,15 +515,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -531,15 +531,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -547,15 +547,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -563,15 +563,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -579,15 +579,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -595,15 +595,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -612,15 +612,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -629,15 +629,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -646,15 +646,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -662,15 +662,15 @@ static reloc_howto_type elf32_frv_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -679,15 +679,15 @@ static reloc_howto_type elf32_frv_vtinhe
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -695,62 +695,62 @@ static reloc_howto_type elf32_frv_vtentr
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -768,15 +768,15 @@ static reloc_howto_type elf32_frv_rel_tl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -785,15 +785,15 @@ static reloc_howto_type elf32_frv_rel_tl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ft32.c ./bfd/elf32-ft32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ft32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-ft32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,8 +1,8 @@
 /* ft32-specific support for 32-bit ELF.
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 Free Software Foundation, Inc.
 
    Copied from elf32-moxie.c which is..
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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 *,
@@ -42,15 +42,15 @@ static reloc_howto_type ft32_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* 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.  */
 
@@ -58,166 +58,166 @@ static reloc_howto_type ft32_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 };
 
 
@@ -267,8 +267,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 +291,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 +305,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 +342,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 +392,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 +486,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 +512,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 +571,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 +586,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 +603,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 +630,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 +645,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 +665,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 +680,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 +713,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 +735,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 +825,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 +839,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 +886,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 +952,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 +981,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 +997,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 +1023,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 +1066,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,7 +1087,7 @@ 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
@@ -1098,7 +1096,7 @@ ft32_elf_relax_section
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-gen.c ./bfd/elf32-gen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-gen.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-gen.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -31,32 +31,32 @@ static reloc_howto_type dummy =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-h8300.c ./bfd/elf32-h8300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-h8300.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-h8300.c	2021-12-16 01:57:38.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-2021 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 **);
@@ -64,169 +64,169 @@ static reloc_howto_type h8_elf_howto_tab
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,7 +700,7 @@ 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
@@ -709,7 +709,7 @@ elf32_h8_relax_section (bfd *abfd, asect
       || (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;
 
@@ -934,7 +934,7 @@ elf32_h8_relax_section (bfd *abfd, asect
 							  4))
 			  goto error_return;
 
-			*again = TRUE;
+			*again = true;
 			break;
 		      }
 		  }
@@ -959,7 +959,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 +1030,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 +1118,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 +1205,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 +1344,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 +1433,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 +1465,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 +1548,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 +1574,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 +1588,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 +1602,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;
@@ -1639,7 +1635,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 +1678,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,13 +1688,10 @@ 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);
   return NULL;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-hppa.c ./bfd/elf32-hppa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-hppa.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-hppa.c	2021-12-16 01:57:38.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-2021 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))
 	{
@@ -4386,7 +4271,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 +4309,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 +4320,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 +4328,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 +4411,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-hppa.h ./bfd/elf32-hppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-hppa.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-hppa.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-i386.c ./bfd/elf32-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-i386.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-i386.c	2021-12-16 01:57:38.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-2021 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"
@@ -31,39 +30,39 @@
 
 static reloc_howto_type elf_howto_table[]=
 {
-  HOWTO(R_386_NONE, 0, 3, 0, FALSE, 0, complain_overflow_dont,
+  HOWTO(R_386_NONE, 0, 3, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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 +72,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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 0, 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, 0, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 3, 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, 2, 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, 2, 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, 2, 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)
@@ -153,30 +152,30 @@ static reloc_howto_type elf_howto_table[
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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)
 
@@ -388,7 +387,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 +400,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 +412,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 +434,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 +451,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 +473,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 +481,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 +493,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 +516,7 @@ elf_i386_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 /* Functions for the i386 ELF linker.
@@ -843,18 +842,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 +859,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 +867,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 +890,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 +920,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 +928,7 @@ elf_i386_check_tls_transition (asection
 		  && !(indirect_call
 		       && (call[1] & 0xf8) == 0x90
 		       && (call[1] & 0x7) == reg))
-		return FALSE;
+		return false;
 	    }
 	}
       else
@@ -952,13 +943,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,17 +957,17 @@ 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);
       else
@@ -991,15 +982,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 +1006,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 +1024,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 +1043,7 @@ elf_i386_check_tls_transition (asection
 	  return call[0] == 0xff && call[1] == 0x10;
 	}
 
-      return FALSE;
+      return false;
 
     default:
       abort ();
@@ -1062,7 +1053,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 +1063,17 @@ 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;
 
   /* Skip TLS transition for functions.  */
   if (h != NULL
       && (h->type == STT_FUNC
 	  || h->type == STT_GNU_IFUNC))
-    return TRUE;
+    return true;
 
   switch (from_type)
     {
@@ -1135,12 +1126,12 @@ elf_i386_tls_transition (struct bfd_link
       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 +1158,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 +1171,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,38 +1198,39 @@ 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);
   is_pic = bfd_link_pic (link_info);
@@ -1249,6 +1241,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 +1263,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 +1272,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 +1297,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 +1307,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 +1327,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 +1369,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 +1381,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 +1393,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 +1420,7 @@ convert_load:
 	    {
 	      /* Only R_386_32 is supported.  */
 	      if (!to_reloc_32)
-		return TRUE;
+		return true;
 
 	      if (opcode == 0x85)
 		{
@@ -1442,11 +1445,11 @@ 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
@@ -1457,7 +1460,7 @@ convert_load:
    calculate needed space in the global offset table, procedure linkage
    table, and dynamic reloc sections.  */
 
-static bfd_boolean
+static bool
 elf_i386_check_relocs (bfd *abfd,
 		       struct bfd_link_info *info,
 		       asection *sec,
@@ -1470,25 +1473,16 @@ elf_i386_check_relocs (bfd *abfd,
   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,13 +1493,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;
+  converted = false;
 
   sreloc = NULL;
 
@@ -1518,7 +1512,8 @@ 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);
@@ -1534,7 +1529,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 +1537,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 +1582,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 +1621,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:
@@ -1739,7 +1738,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 +1749,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 +1768,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 +1776,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)
 		{
@@ -1803,7 +1802,7 @@ do_relocation:
 		  /* R_386_32 can be resolved at run-time.  */
 		  if (r_type == R_386_32
 		      && (sec->flags & SEC_READONLY) == 0)
-		    func_pointer_ref = TRUE;
+		    func_pointer_ref = true;
 		}
 
 	      if (!func_pointer_ref)
@@ -1825,10 +1824,11 @@ do_relocation:
 		}
 	    }
 
-	  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 (info, false, h, sec, r_type,
+					    R_386_32))
 	    {
 	      struct elf_dyn_relocs *p;
 	      struct elf_dyn_relocs **head;
@@ -1839,7 +1839,7 @@ do_size:
 	      if (sreloc == NULL)
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ FALSE);
+		    (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ false);
 
 		  if (sreloc == NULL)
 		    goto error_return;
@@ -1849,7 +1849,7 @@ do_size:
 		 relocations we need for this symbol.  */
 	      if (h != NULL)
 		{
-		  head = &eh->dyn_relocs;
+		  head = &h->dyn_relocs;
 		}
 	      else
 		{
@@ -1859,7 +1859,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 +1875,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)
@@ -1929,19 +1929,19 @@ 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;
 }
 
 /* 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 +1969,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 +1993,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 +2011,21 @@ 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 plt_entry_size;
 
   /* Skip if check_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 +2034,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 +2056,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 +2082,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;
@@ -2166,7 +2166,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 +2177,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,
@@ -2362,7 +2362,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 +2374,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 +2386,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 +2409,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
@@ -2449,7 +2455,7 @@ do_ifunc_pointer:
 	    }
 	}
 
-skip_ifunc:
+    skip_ifunc:
       resolved_to_zero = (eh != NULL
 			  && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
 
@@ -2462,7 +2468,7 @@ skip_ifunc:
 	  if (htab->elf.sgot == NULL)
 	    abort ();
 
-	  relative_reloc = FALSE;
+	  relative_reloc = false;
 	  if (h != NULL)
 	    {
 	      off = h->got.offset;
@@ -2489,12 +2495,12 @@ skip_ifunc:
 			  /* 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
 	    {
@@ -2515,7 +2521,7 @@ skip_ifunc:
 		  local_got_offsets[r_symndx] |= 1;
 
 		  if (bfd_link_pic (info))
-		    relative_reloc = TRUE;
+		    relative_reloc = true;
 		}
 	    }
 
@@ -2532,6 +2538,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 +2563,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 +2577,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 +2626,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 +2641,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 +2658,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 +2702,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,28 +2716,28 @@ disallow_got32:
 	      || is_vxworks_tls)
 	    break;
 
-	  if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type,
-					     FALSE, resolved_to_zero,
+	  if (GENERATE_DYNAMIC_RELOCATION_P (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;
 	      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);
 
@@ -2736,8 +2748,13 @@ disallow_got32:
 	      else
 		{
 		  /* This symbol is local, or marked to become local.  */
-		  relocate = TRUE;
+		  relocate = true;
 		  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;
@@ -2769,6 +2786,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,8 +2817,8 @@ 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)
 	    {
@@ -3124,7 +3147,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 +3160,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 +3291,7 @@ disallow_got32:
 	      continue;
 	    }
 	  else
-	    BFD_ASSERT (FALSE);
+	    BFD_ASSERT (false);
 	  break;
 
 	case R_386_TLS_LDM:
@@ -3276,8 +3299,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)
 	    {
@@ -3338,7 +3361,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 +3429,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 +3450,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 +3466,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 +3494,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 +3509,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 +3611,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 +3687,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 +3790,7 @@ elf_i386_finish_dynamic_symbol (bfd *out
     {
       Elf_Internal_Rela rel;
       asection *relgot = htab->elf.srelgot;
+      const char *relative_reloc_name = NULL;
 
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
@@ -3802,6 +3831,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,7 +3866,7 @@ 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)
@@ -3844,16 +3874,22 @@ elf_i386_finish_dynamic_symbol (bfd *out
 	{
 	  BFD_ASSERT((h->got.offset & 1) != 0);
 	  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);
 	}
 
+      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);
     }
 
@@ -3876,13 +3912,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 +3934,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 +3943,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 +3998,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,10 +4006,10 @@ 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)
     {
@@ -4006,7 +4042,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 +4102,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 +4110,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 +4123,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 +4180,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 +4191,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 +4339,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 +4356,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;
@@ -4381,7 +4408,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 +4427,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 +4440,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 +4461,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 +4491,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 +4499,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 +4570,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 +4588,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 +4612,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 +4626,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ip2k.c ./bfd/elf32-ip2k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ip2k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-ip2k.c	2021-12-16 01:57:38.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-2021 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,3,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,1,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,2,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,1,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,1,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,1,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,1,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,1,8, false, 0, "R_IP2K_LO8DATA", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_HI8DATA, 8,1,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,1,8, false, 0, "R_IP2K_LO8INSN", 0, 0x00ff),
+  IP2K_HOWTO (R_IP2K_HI8INSN, 9,1,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,1,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,1,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,1,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,1,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.  */
@@ -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,23 +1073,23 @@ 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,
@@ -1100,7 +1099,7 @@ ip2k_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;
 
@@ -1150,8 +1149,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 +1163,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 +1181,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 +1209,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 +1240,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 +1384,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 +1434,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 +1470,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 +1499,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-iq2000.c ./bfd/elf32-iq2000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-iq2000.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-iq2000.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* IQ2000-specific support for 32-bit ELF.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,52 +37,52 @@ static reloc_howto_type iq2000_elf_howto
 	 0,			     /* rightshift */
 	 3,			     /* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
 };
 
@@ -208,15 +208,15 @@ static reloc_howto_type iq2000_elf_vtinh
 	 0,			   /* rightshift */
 	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -224,15 +224,15 @@ static reloc_howto_type iq2000_elf_vtent
 	 0,			   /* rightshift */
 	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-lm32.c ./bfd/elf32-lm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-lm32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-lm32.c	2021-12-16 01:57:38.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-2021 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 [] =
@@ -208,258 +166,258 @@ static reloc_howto_type lm32_elf_howto_t
 	 0,			    /* rightshift */
 	 3,			    /* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,7 +1113,7 @@ 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,
@@ -1169,16 +1127,7 @@ lm32_elf_check_relocs (bfd *abfd,
   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);
@@ -1188,7 +1137,7 @@ lm32_elf_check_relocs (bfd *abfd,
 
   htab = lm32_elf_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   dynobj = htab->root.dynobj;
 
@@ -1222,7 +1171,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 +1187,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 +1204,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 +1229,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 +1240,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 +1269,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 +1386,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 +1409,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 +1431,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 +1574,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 +1591,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 +1636,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 +1650,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 +1661,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 +1695,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 +1720,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 +1744,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 +1795,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 +1803,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 +1817,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 +1834,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 +1847,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 +1859,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 +1882,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 +1891,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 +2006,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 +2020,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 +2058,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))
@@ -2225,7 +2082,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 +2141,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 +2164,7 @@ lm32_elf_size_dynamic_sections (bfd *out
 			}
 		    }
 		  else
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -2329,16 +2186,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 +2206,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 +2234,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 +2245,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 +2255,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 +2265,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 +2283,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 +2304,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 +2360,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 +2398,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m32c.c ./bfd/elf32-m32c.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m32c.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m32c.c	2021-12-16 01:57:38.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-2021 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 **);
 
@@ -52,15 +52,15 @@ static reloc_howto_type m32c_elf_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -69,169 +69,169 @@ static reloc_howto_type m32c_elf_howto_t
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,			/* 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,			/* 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,			/* 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);
 
@@ -1462,7 +1462,7 @@ m32c_elf_relax_section
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_symtab_hdr (abfd);
   if (elf_symtab_shndx_list (abfd))
@@ -1491,17 +1491,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 +1880,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 +1901,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 +1928,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 +2071,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 +2096,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m32r.c ./bfd/elf32-m32r.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m32r.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m32r.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* M32R-specific support for 32-bit ELF.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -476,60 +476,60 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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.
@@ -543,30 +543,30 @@ static reloc_howto_type m32r_elf_howto_t
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.
@@ -577,105 +577,105 @@ static reloc_howto_type m32r_elf_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -703,194 +703,194 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -901,15 +901,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -917,15 +917,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -936,15 +936,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -952,30 +952,30 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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
@@ -984,29 +984,29 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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. */
@@ -1014,15 +1014,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1030,15 +1030,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1046,15 +1046,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1062,15 +1062,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -1079,15 +1079,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -1096,15 +1096,15 @@ static reloc_howto_type m32r_elf_howto_t
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -1113,57 +1113,57 @@ static reloc_howto_type m32r_elf_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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;
+    return false;
 
-  eh = (struct elf_m32r_link_hash_entry *) h;
-
-  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;
+	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;
-	    }
-	}
-    }
-#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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc11.c ./bfd/elf32-m68hc11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc11.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m68hc11.c	2021-12-16 01:57:38.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-2021 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
@@ -67,90 +67,90 @@ static reloc_howto_type elf_m68hc11_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -158,120 +158,120 @@ static reloc_howto_type elf_m68hc11_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -285,30 +285,30 @@ static reloc_howto_type elf_m68hc11_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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,7 +703,7 @@ 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
@@ -704,7 +712,7 @@ m68hc11_elf_relax_section (bfd *abfd, as
       || (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;
 
@@ -945,7 +953,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 +962,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 +995,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 +1032,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 +1074,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 +1082,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 +1109,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc12.c ./bfd/elf32-m68hc12.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc12.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m68hc12.c	2021-12-16 01:57:38.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-2021 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.  */
@@ -109,90 +109,90 @@ static reloc_howto_type elf_m68hc11_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -200,120 +200,120 @@ static reloc_howto_type elf_m68hc11_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
 
@@ -322,105 +322,105 @@ static reloc_howto_type elf_m68hc11_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc1x.c ./bfd/elf32-m68hc1x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc1x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m68hc1x.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc1x.h ./bfd/elf32-m68hc1x.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68hc1x.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m68hc1x.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68k.c ./bfd/elf32-m68k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m68k.c	2021-12-16 01:57:38.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-2021 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, 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),
   /* GNU extension to record C++ vtable hierarchy.  */
   HOWTO (R_68K_GNU_VTINHERIT,	/* type */
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68k.h ./bfd/elf32-m68k.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-m68k.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-m68k.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Motorola 68k series support for 32-bit ELF
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mcore.c ./bfd/elf32-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mcore.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-mcore.c	2021-12-16 01:57:38.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-2021 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.  */
@@ -113,30 +113,30 @@ static reloc_howto_type mcore_elf_howto_
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -144,15 +144,15 @@ static reloc_howto_type mcore_elf_howto_
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.
@@ -161,45 +161,45 @@ static reloc_howto_type mcore_elf_howto_
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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
@@ -212,59 +212,59 @@ static reloc_howto_type mcore_elf_howto_
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mep.c ./bfd/elf32-mep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mep.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-mep.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MeP-specific support for 32-bit ELF.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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
@@ -43,26 +43,26 @@ static reloc_howto_type mep_elf_howto_ta
   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_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_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_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_GNU_VTENTRY,1,  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-metag.c ./bfd/elf32-metag.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-metag.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-metag.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Meta support for 32-bit ELF
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 Free Software Foundation, Inc.
    Contributed by Imagination Technologies Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -97,90 +97,90 @@ static reloc_howto_type elf_metag_howto_
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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,			/* 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) */
 	 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) */
 	 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),
@@ -211,192 +211,192 @@ static reloc_howto_type elf_metag_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -407,30 +407,30 @@ static reloc_howto_type elf_metag_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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
@@ -439,242 +439,242 @@ static reloc_howto_type elf_metag_howto_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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')
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-metag.h ./bfd/elf32-metag.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-metag.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-metag.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Meta support for 32-bit ELF
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-microblaze.c ./bfd/elf32-microblaze.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-microblaze.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-microblaze.c	2021-12-16 01:57:38.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-2021 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"
@@ -46,403 +44,403 @@ static reloc_howto_type microblaze_elf_h
 	  0,			/* Rightshift.  */
 	  3,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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_64_NONE,	/* Type.  */
 	  0,			/* Rightshift.  */
 	  3,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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).  */
 	  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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -450,15 +448,15 @@ static reloc_howto_type microblaze_elf_h
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -467,15 +465,15 @@ static reloc_howto_type microblaze_elf_h
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -484,15 +482,15 @@ static reloc_howto_type microblaze_elf_h
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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).  */
@@ -500,15 +498,15 @@ static reloc_howto_type microblaze_elf_h
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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).  */
@@ -516,15 +514,15 @@ static reloc_howto_type microblaze_elf_h
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
 
 };
 
@@ -674,7 +672,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 +690,23 @@ 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;
 }
 
 /* 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 +719,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 +742,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 +754,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 +783,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 +795,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 +819,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 +902,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 +918,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 +928,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 +949,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 +961,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 +1011,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 +1034,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 +1072,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 +1097,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 +1120,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 +1145,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 +1189,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 +1226,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 +1268,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,
@@ -1293,7 +1285,7 @@ microblaze_elf_relocate_section (bfd *ou
 		    || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 			&& !resolved_to_zero)
 		    || h->root.type != bfd_link_hash_undefweak))
-		  need_relocs = TRUE;
+		  need_relocs = true;
 
 		/* 2. Compute/Emit Static value of r-expression */
 		static_value = relocation + addend;
@@ -1399,7 +1391,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;
 	      }
 
@@ -1498,7 +1490,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 +1498,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 +1536,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 +1616,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:
@@ -1706,11 +1698,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;
@@ -1731,14 +1723,14 @@ microblaze_elf_relax_section (bfd *abfd,
 
   /* 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;
+    return true;
 
   BFD_ASSERT ((sec->size > 0) || (sec->rawsize > 0));
 
@@ -1877,7 +1869,7 @@ microblaze_elf_relax_section (bfd *abfd,
 	      break;
 	    default:
 	      /* Cannot happen.  */
-	      BFD_ASSERT (FALSE);
+	      BFD_ASSERT (false);
 	    }
 	}
     } /* Loop through all relocations.  */
@@ -1965,7 +1957,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;
 
@@ -2234,11 +2226,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)
     {
@@ -2252,26 +2241,21 @@ microblaze_elf_relax_section (bfd *abfd,
 
   if (sec->relax_count == 0)
     {
-      *again = FALSE;
+      *again = false;
       free (sec->relax);
       sec->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 (sec->relax);
+  sec->relax = NULL;
+  sec->relax_count = 0;
+  return false;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2305,7 +2289,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 +2305,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 +2314,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,
@@ -2349,11 +2333,11 @@ microblaze_elf_check_relocs (bfd * abfd,
   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);
@@ -2389,14 +2373,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 +2408,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 +2418,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 +2429,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 +2502,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 +2519,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 +2535,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 +2556,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 +2571,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 +2586,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 +2608,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 +2627,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 +2638,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 +2700,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 +2709,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 +2724,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 +2740,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 +2799,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 +2839,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 +2856,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 +2867,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 +2888,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 +2897,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 +2925,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 +3041,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 +3050,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 +3063,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 +3096,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 +3118,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)
     {
@@ -3375,13 +3272,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 +3288,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 +3305,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 +3313,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 +3375,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 +3398,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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mips.c ./bfd/elf32-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mips.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-mips.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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 *);
@@ -107,67 +109,67 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -175,85 +177,85 @@ 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.
@@ -262,45 +264,45 @@ static reloc_howto_type elf_mips_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -313,15 +315,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -330,120 +332,120 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -455,75 +457,75 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -536,44 +538,44 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -583,90 +585,90 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
 
@@ -675,45 +677,45 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -728,85 +730,85 @@ static reloc_howto_type elf_mips_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -816,15 +818,15 @@ static reloc_howto_type elf_mips_ctor64_
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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[] =
 {
@@ -833,7 +835,7 @@ static reloc_howto_type elf_mips16_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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[] =
@@ -1053,7 +1055,7 @@ static reloc_howto_type elf_micromips_ho
 	 1,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1207,165 +1209,165 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -1373,15 +1375,15 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1389,15 +1391,15 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -1409,75 +1411,75 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1487,30 +1489,30 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
 
@@ -1519,29 +1521,29 @@ static reloc_howto_type elf_micromips_ho
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -1550,15 +1552,15 @@ static reloc_howto_type elf_mips_gnu_rel
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -1569,15 +1571,15 @@ static reloc_howto_type elf_mips_gnu_pcr
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -1585,15 +1587,15 @@ static reloc_howto_type elf_mips_gnu_vti
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -1601,15 +1603,15 @@ static reloc_howto_type elf_mips_gnu_vte
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,15 +1619,15 @@ 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 =
@@ -1633,15 +1635,15 @@ static reloc_howto_type elf_mips_jump_sl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -1649,20 +1651,20 @@ static reloc_howto_type elf_mips_eh_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,7 +1717,7 @@ 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)
@@ -1759,7 +1761,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,10 +1779,10 @@ _bfd_mips_elf32_gprel16_reloc (bfd *abfd
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -1790,7 +1792,7 @@ _bfd_mips_elf32_gprel16_reloc (bfd *abfd
     return ret;
 
   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 +1811,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,10 +1826,10 @@ mips_elf_gprel32_reloc (bfd *abfd, arele
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -1842,7 +1844,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;
@@ -1927,7 +1929,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,10 +1945,10 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -1956,7 +1958,7 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     return ret;
 
   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,
@@ -2196,7 +2198,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 +2237,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 +2256,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 +2276,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 +2286,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 +2330,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 +2339,7 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 256:		/* Linux/MIPS */
 	/* pr_cursig */
@@ -2350,13 +2360,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 +2389,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 +2433,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 +2500,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 +2555,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
@@ -2643,7 +2655,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 +2682,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-moxie.c ./bfd/elf32-moxie.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-moxie.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-moxie.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,8 +1,8 @@
 /* moxie-specific support for 32-bit ELF.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    Copied from elf32-fr30.c which is..
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -36,45 +36,45 @@ static reloc_howto_type moxie_elf_howto_
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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).  */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-msp430.c ./bfd/elf32-msp430.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-msp430.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-msp430.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /*  MSP430-specific support for 32-bit ELF
-    Copyright (C) 2002-2019 Free Software Foundation, Inc.
+    Copyright (C) 2002-2021 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,155 +56,169 @@ 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,			/* 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -210,15 +226,48 @@ static reloc_howto_type elf_msp430_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 0,				/* 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 */
+	 0,				/* 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[] =
@@ -227,253 +276,253 @@ static reloc_howto_type elf_msp430x_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
 
@@ -482,30 +531,30 @@ static reloc_howto_type elf_msp430x_howt
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -513,15 +562,48 @@ static reloc_howto_type elf_msp430x_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 0,				/* 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 */
+	 0,				/* 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,7 +2008,7 @@ 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
@@ -1851,7 +2016,11 @@ msp430_elf_relax_section (bfd * abfd, as
   if (bfd_link_relocatable (link_info)
     || (sec->flags & SEC_RELOC) == 0
     || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    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 +2033,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 +2091,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 +2121,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 +2147,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 +2159,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 +2184,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 +2207,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 +2315,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 +2345,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 +2435,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 +2450,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 +2485,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 +2507,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 +2526,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 +2626,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 +2659,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 +2725,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 +2756,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 +2772,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 +2785,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 +2796,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 +2809,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 +2821,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 +2833,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 +2846,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 +2859,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 +2869,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 +2884,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mt.c ./bfd/elf32-mt.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-mt.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-mt.c	2021-12-16 01:57:38.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-2021 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 **);
 
@@ -50,105 +50,105 @@ static reloc_howto_type mt_elf_howto_tab
 	  0,			  /* rightshift */
 	  3,			  /* size (0 = byte, 1 = short, 2 = long) */
 	  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) */
 	  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) */
 	  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) */
 	  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) */
 	  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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nds32.c ./bfd/elf32-nds32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nds32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-nds32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* NDS32-specific support for 32-bit ELF.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 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),
@@ -278,60 +275,60 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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.
@@ -345,45 +342,45 @@ static reloc_howto_type nds32_elf_howto_
 	 1,			/* rightshift  */
 	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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.
@@ -394,447 +391,447 @@ static reloc_howto_type nds32_elf_howto_
 	 1,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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.  */
@@ -842,15 +839,15 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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.  */
@@ -858,15 +855,15 @@ static reloc_howto_type nds32_elf_howto_
 	 1,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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
@@ -877,15 +874,15 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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.  */
@@ -893,30 +890,30 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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
@@ -925,29 +922,29 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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.  */
@@ -955,15 +952,15 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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.  */
@@ -971,28 +968,28 @@ static reloc_howto_type nds32_elf_howto_
 	 12,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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
@@ -1001,55 +998,55 @@ static reloc_howto_type nds32_elf_howto_
 	 12,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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
@@ -1058,918 +1055,918 @@ static reloc_howto_type nds32_elf_howto_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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  */
 
   HOWTO2 (R_NDS32_TLS_IE_LO12,	/* type  */
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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.  */
@@ -1977,118 +1974,118 @@ static reloc_howto_type nds32_elf_howto_
 	 12,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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.  */
@@ -2100,399 +2097,399 @@ static reloc_howto_type nds32_elf_relax_
 	 0,			/* rightshift  */
 	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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)  */
 	 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[] =
@@ -3227,7 +3224,7 @@ 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)
 {
@@ -3240,15 +3237,15 @@ nds32_info_to_howto_rel (bfd *abfd, arel
       _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
+static bool
 nds32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
 		     Elf_Internal_Rela *dst)
 {
@@ -3259,19 +3256,19 @@ nds32_info_to_howto (bfd *abfd ATTRIBUTE
 	  && (r_type < R_NDS32_max)))
     {
       cache_ptr->howto = bfd_elf32_bfd_reloc_type_table_lookup (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;
 }
 
 /* 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 +3305,7 @@ nds32_elf_grok_prstatus (bfd *abfd, Elf_
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* Make a ".reg" section.  */
@@ -3316,7 +3313,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 +3329,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 +3343,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 +3351,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 +3368,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 +3385,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 +3444,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 +3456,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 +3579,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 +3589,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 +3607,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 +3666,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 +3680,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 +3696,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 +3704,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 +3726,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 +3769,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 +3780,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 +3798,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 +3819,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 +3831,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 +3850,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 +3872,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 +3884,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 +3928,7 @@ nds32_elf_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) - 1;
@@ -4000,7 +3942,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 +3953,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 +3986,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 +3997,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 +4014,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 +4024,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 +4047,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 +4062,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 +4114,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 +4122,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 +4164,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 +4179,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 +4207,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 +4216,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 +4250,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 +4402,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 +4419,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 +4429,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 +4439,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 +4476,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;
+	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;
-	    }
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 static bfd_reloc_status_type
@@ -4638,9 +4492,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 +4677,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 +4691,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 +4709,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 +4723,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 +4785,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 +4820,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 +4872,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 +4882,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 +4893,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 +4935,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 +4948,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 +4987,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 +5029,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 +5106,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 +5292,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 +5409,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 +5424,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 +5434,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 +5467,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 +5495,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 +5523,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 +5563,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 +5648,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 +5679,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 +5713,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 +5758,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 +5795,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 +6007,7 @@ handle_sda:
 	  break;
 	}
 
-check_reloc:
+    check_reloc:
 
       if (r != bfd_reloc_ok)
 	{
@@ -6185,7 +6037,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 +6056,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 +6074,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 +6283,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 +6301,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 +6309,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)
@@ -6488,7 +6340,7 @@ nds32_elf_finish_dynamic_sections (bfd *
 	      goto get_vma;
 	    case DT_JMPREL:
 	      s = ehtab->srelplt->output_section;
-get_vma:
+	    get_vma:
 	      BFD_ASSERT (s != NULL);
 	      dyn.d_un.d_ptr = s->vma;
 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
@@ -6522,14 +6374,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 +6444,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 +6464,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 +6485,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 +6522,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 +6570,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 +6609,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 +6624,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 +6641,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 +6669,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 +6687,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 +6767,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 +6779,7 @@ nds32_elf_merge_private_bfd_data (bfd *i
 					bfd_get_mach (ibfd));
 	    }
 
-	  return TRUE;
+	  return true;
 	}
 
       /* Check flag compatibility.  */
@@ -6932,7 +6788,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 +6800,7 @@ nds32_elf_merge_private_bfd_data (bfd *i
 		 ibfd);
 
 	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -6978,12 +6834,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 +6863,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 +6934,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 +6948,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,14 +6966,14 @@ 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)
 {
@@ -7135,18 +6990,9 @@ 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 =
@@ -7212,7 +7058,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 +7095,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 +7236,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 +7255,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 +7265,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 +7289,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 +7352,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 +8128,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 +8450,7 @@ nds32_convert_16_to_32 (bfd *abfd, uint1
       goto done;
     }
 
-done:
+ done:
   if (insn & 0x80000000)
     return 0;
 
@@ -8613,7 +8460,7 @@ done:
 }
 
 
-static bfd_boolean
+static bool
 is_sda_access_insn (unsigned long insn)
 {
   switch (N32_OP6 (insn))
@@ -8630,11 +8477,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 +8683,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 +8716,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 +8729,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 +8751,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 +8762,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 +8770,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 +8791,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 +9029,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 +9037,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 +9046,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 +9065,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 +9076,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 +9102,7 @@ insert_nds32_elf_blank_recalc_total (nds
       blank_t = blank_t->next;
     }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -9278,7 +9125,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 +9170,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 +9180,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 +9191,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 +9200,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 +9296,7 @@ nds32_elf_relax_delete_blanks (bfd *abfd
 	      if (p < endp)
 		*p |= 0x80;
 	    }
-done_adjust_diff:
+	done_adjust_diff:
 
 	  if (sec == sect)
 	    {
@@ -9595,27 +9443,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 +9485,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 +9514,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 +9550,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 +9578,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 +9627,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 +9637,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 +9672,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 +9707,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 +9718,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 +9752,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 +9812,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 +9821,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 +9889,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 +9945,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 +9954,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 +9997,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 +10089,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 +10153,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 +10161,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 +10219,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 +10242,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 +10346,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 +10355,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 +10456,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 +10491,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 +10526,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 +10536,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 +10556,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 +10591,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 +10626,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 +10635,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 +10667,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 +10703,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 +10712,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 +10741,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 +10790,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 +10801,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 +10839,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 +10848,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 +10861,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 +10885,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 +10934,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 +10943,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 +10979,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 +11009,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 +11062,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 +11071,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 +11129,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 +11189,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 +11231,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 +11240,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 +11289,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 +11297,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 +11320,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 +11332,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 +11368,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 +11390,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 +11398,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 +11417,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 +11469,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 +11504,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 +11528,7 @@ nds32_elf_relax_loadstore (struct bfd_li
       break;
 
     default:
-      return FALSE;
+      return false;
     }
 
   /* Delete sethi instruction.  */
@@ -11689,10 +11541,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 +11567,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 +11600,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 +11664,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 +11681,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 +11701,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 +11720,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 +11768,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 +11787,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 +11932,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 +11973,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 +12016,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 +12042,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 +12050,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 +12070,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 +12082,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 +12096,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 +12114,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 +12124,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 +12140,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 +12157,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 +12168,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 +12236,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 +12352,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 +12420,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 +12444,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 +12475,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 +12704,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 +12715,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 +12746,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 +12780,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 +12792,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 +12815,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 +12843,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 +12926,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 +12944,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 +12953,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 +12967,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 +13016,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 +13024,8 @@ finish:
     }
   return result;
 
-error_return:
-  result = FALSE;
+ error_return:
+  result = false;
   goto finish;
 }
 
@@ -13177,7 +13041,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 +13055,7 @@ nds32_elf_get_relocated_section_contents
     return NULL;
 
   /* Read in the section.  */
-  if (!nds32_get_section_contents (input_bfd, input_section, &data, FALSE))
+  if (!nds32_get_section_contents (input_bfd, input_section, &data, false))
     return NULL;
 
   if (reloc_size == 0)
@@ -13220,8 +13084,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 +13118,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 +13155,19 @@ nds32_elf_get_relocated_section_contents
   free (reloc_vector);
   return data;
 
-error_return:
+ error_return:
   free (reloc_vector);
   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 +13220,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 +13230,7 @@ list_insert (relax_group_list_t *pHead,
   pNew->next = tmp;
   pNew->next_sibling = NULL;
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -13383,7 +13247,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 +13257,7 @@ list_insert_sibling (relax_group_list_t
   pNew->next = NULL;
   pNew->next_sibling = tmp;
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -13435,7 +13299,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 +13319,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 +13338,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,7 +13409,7 @@ 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;
@@ -13565,7 +13429,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 */
@@ -13594,9 +13458,9 @@ elf32_nds32_unify_relax_group (bfd *abfd
 	  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 +13470,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;
@@ -13635,7 +13499,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 +13571,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 +13882,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 +13909,8 @@ finish:
 
   return result;
 
-error_return:
-  result = FALSE;
+ error_return:
+  result = false;
   goto finish;
 }
 
@@ -14093,6 +13955,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nds32.h ./bfd/elf32-nds32.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nds32.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-nds32.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* NDS32-specific support for 32-bit ELF.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
    Contributed by Andes Technology Corporation.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -104,10 +104,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 +122,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nios2.c ./bfd/elf32-nios2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nios2.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-nios2.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for Nios II.
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
    Contributed by Nigel Gray (ngray@altera.com).
    Contributed by Mentor Graphics, Inc.
 
@@ -84,649 +84,649 @@ static reloc_howto_type elf_nios2_r1_how
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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 */
 	 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 */
 	 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 */
 	 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,
 	 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 */
 	 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 */
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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) */
 	 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,
 	 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,
 	 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,
 	 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,
 	 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.  */
 };
@@ -737,830 +737,830 @@ static reloc_howto_type elf_nios2_r2_how
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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 */
 	 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 */
 	 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 */
 	 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,
 	 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 */
 	 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 */
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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) */
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
@@ -3722,7 +3726,7 @@ nios2_elf32_relocate_section (bfd *outpu
       const char *format;
       char *msgbuf = NULL;
       char *msg = NULL;
-      bfd_boolean unresolved_reloc;
+      bool unresolved_reloc;
       bfd_vma off;
       int use_plt;
 
@@ -3742,7 +3746,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 +3764,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));
@@ -3918,7 +3922,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 +3998,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 +4036,7 @@ nios2_elf32_relocate_section (bfd *outpu
 			}
 		    }
 		  else
-		    unresolved_reloc = FALSE;
+		    unresolved_reloc = false;
 		}
 	      else
 		{
@@ -4221,7 +4225,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 +4233,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 +4256,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 +4271,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 +4383,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 +4403,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 +4437,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 +4503,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 +4531,29 @@ 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;
+	      free (msgbuf);
+	      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 +4565,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 +4579,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 +4594,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 +4634,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 +4648,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,12 +4666,12 @@ 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)
 {
@@ -4712,7 +4684,7 @@ 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);
@@ -4810,7 +4782,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 +4813,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 +4825,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 +4880,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 +4899,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 +4915,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 +4934,7 @@ nios2_elf32_check_relocs (bfd *abfd, str
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4989,7 +4961,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 +5145,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 +5278,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 +5287,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 +5326,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 +5342,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 +5357,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 +5403,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 +5412,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
+static bool
 adjust_dynrelocs (struct elf_link_hash_entry *h, PTR 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,13 +5439,13 @@ 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
+static bool
 allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
 {
   struct bfd_link_info *info;
@@ -5483,7 +5455,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 +5474,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 +5531,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 +5540,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 +5593,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 +5609,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 +5622,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 +5654,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 +5662,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 +5749,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 +5813,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 +5825,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 +5866,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 +5874,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 +5893,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 +5941,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 +5951,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 +5972,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 +5980,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 +6001,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nios2.h ./bfd/elf32-nios2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-nios2.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-nios2.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Nios II support for 32-bit ELF
-   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-or1k.c ./bfd/elf32-or1k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-or1k.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-or1k.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Or1k-specific support for 32-bit ELF.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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
@@ -47,593 +51,593 @@ static reloc_howto_type or1k_elf_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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).  */
 	 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).  */
 	 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) */
 	 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).  */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -644,170 +648,184 @@ static reloc_howto_type or1k_elf_howto_t
 	 13,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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).  */
 	 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 */
+	 2,			/* 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_OR1K_GOT_AHI16",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
 };
 
 /* Map BFD reloc types to Or1k ELF reloc types.  */
@@ -871,23 +889,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 +937,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 +991,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 +1003,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 +1056,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 +1070,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 +1143,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 +1275,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 +1290,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,7 +1317,7 @@ 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;
@@ -1286,7 +1349,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 +1370,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 +1403,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 +1419,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 +1480,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 +1499,20 @@ 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 (r_type == R_OR1K_GOT_AHI16)
+	      saw_gotha = true;
+
+	    /* If we have a R_OR1K_GOT16 followed by a R_OR1K_GOT_AHI16
+	       relocation we assume the code is doing the right thing to avoid
+	       overflows.  Here we mask the lower 16-bit of the relocation to
+	       avoid overflow validation failures.  */
+	    if (r_type == R_OR1K_GOT16 && saw_gotha)
+	      relocation &= 0xffff;
+
 	  /* Addend should be zero.  */
 	  if (rel->r_addend != 0)
 	    {
@@ -1445,7 +1520,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,7 +1536,7 @@ 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;
@@ -1478,7 +1553,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 +1567,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 +1598,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 +1606,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 +1652,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 +1666,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 +1751,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 +1788,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 +1818,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 +1831,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 +1854,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 +1906,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 +1922,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 +1988,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 +2002,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 +2014,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 +2036,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 +2065,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 +2081,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 +2141,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 +2155,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 +2174,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 +2185,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 +2196,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 +2293,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 +2345,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 +2357,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 +2399,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 +2416,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 +2433,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 +2451,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 +2469,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 +2547,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 +2580,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 +2615,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 +2632,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 +2662,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 +2676,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 +2690,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 +2701,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 +2735,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 +2760,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 +2837,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 +2864,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 +2892,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 +2902,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 +2934,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 +2959,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 +2982,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 +2991,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 +3055,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 +3096,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 +3119,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 +3134,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 +3173,10 @@ or1k_elf_size_dynamic_sections (bfd *out
       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 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;
-	   }
-       }
-    }
-
-#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 +3192,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 +3206,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 +3219,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 +3234,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 +3260,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 +3280,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 +3298,7 @@ or1k_grok_prstatus (bfd *abfd, Elf_Inter
   switch (note->descsz)
     {
     default:
-      return FALSE;
+      return false;
 
     case 212:	      /* Linux/OpenRISC */
       /* pr_cursig */
@@ -3259,13 +3320,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 +3335,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-pj.c ./bfd/elf32-pj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-pj.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-pj.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* picoJava specific support for 32-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
    Contributed by Steve Chamberlan of Transmeta (sac@pobox.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -116,15 +116,15 @@ static reloc_howto_type pj_elf_howto_tab
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -132,60 +132,60 @@ static reloc_howto_type pj_elf_howto_tab
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -198,59 +198,59 @@ static reloc_howto_type pj_elf_howto_tab
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ppc.c ./bfd/elf32-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ppc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-ppc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC-specific support for 32-bit ELF
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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,8 @@
    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.  */
+/* Don't generate unused section symbols.  */
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS false
 
 #include "sysdep.h"
 #include <stdarg.h>
@@ -201,101 +198,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, 3, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 26, 0x3fffffc, 0, true, signed,
        ppc_elf_unhandled_reloc),
 
   /* This is used only by the dynamic linker.  The symbol should exist
@@ -303,269 +300,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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 1, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC_TLSGD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_TLSGD, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC_TLSLD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_TLSLD, 2, 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, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC_PLTCALL, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC_PLTCALL, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 
   /* Relocation not handled: R_PPC_EMB_MRKREF */
@@ -578,121 +575,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, 1, 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, 1, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 20, 0x1f7fff, 0, false, dont,
        ppc_elf_unhandled_reloc),
 
-  HOW (R_PPC_IRELATIVE, 2, 32, 0xffffffff, 0, FALSE, dont,
+  HOW (R_PPC_IRELATIVE, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 2, 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, 1, 16, 0xffff, 0, false, signed,
        ppc_elf_unhandled_reloc),
 };
 
@@ -883,7 +880,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 +898,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 +912,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.  */
@@ -985,10 +982,12 @@ ppc_elf_unhandled_reloc (bfd *abfd,
 
   if (error_message != NULL)
     {
-      static char buf[60];
-      sprintf (buf, _("generic linker can't handle %s"),
-	       reloc_entry->howto->name);
-      *error_message = buf;
+      static char *message;
+      free (message);
+      if (asprintf (&message, _("generic linker can't handle %s"),
+		    reloc_entry->howto->name) < 0)
+	message = NULL;
+      *error_message = message;
     }
   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;
@@ -1134,17 +1133,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 +1161,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 +1183,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 +1204,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 +1233,7 @@ ppc_elf_grok_psinfo (bfd *abfd, Elf_Inte
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -1319,7 +1318,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 +1328,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 +1358,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 +1384,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 +1399,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 +1455,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 +1467,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 +1490,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 +1523,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 +1629,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)
@@ -1686,8 +1690,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 +1699,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 +1763,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 +1784,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 +1798,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];
@@ -1924,7 +1927,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 +2115,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 +2194,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 +2211,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 +2229,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 +2255,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 +2320,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 +2359,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 +2367,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 +2389,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 +2399,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 +2407,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 +2415,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 +2424,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 +2434,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 +2463,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 +2486,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 +2528,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 +2552,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 +2608,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 +2629,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 +2638,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 +2665,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 +2688,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 +2709,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 +2718,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 +2730,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 +2738,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 +2749,7 @@ elf_allocate_pointer_linker_section (bfd
 	   (long) lsect->section->size);
 #endif
 
-  return TRUE;
+  return true;
 }
 
 static struct plt_entry **
@@ -2789,7 +2783,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 +2796,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 +2807,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 +2823,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 +2841,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
@@ -2871,7 +2865,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 +2880,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 +2899,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");
@@ -2955,19 +2940,19 @@ 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 && htab->elf.target_os != is_vxworks)
 	{
-	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  Elf_Internal_Sym *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)
 	    {
@@ -2975,7 +2960,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	      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 +2981,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 +3013,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 +3062,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 +3072,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 +3088,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 +3101,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 +3126,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 +3147,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 +3163,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 +3174,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 +3202,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 +3219,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
@@ -3298,7 +3283,7 @@ ppc_elf_check_relocs (bfd *abfd,
 	    {
 	      h->needs_plt = 1;
 	      if (!update_plt_info (abfd, &h->plt.plist, NULL, 0))
-		return FALSE;
+		return false;
 	    }
 	  break;
 
@@ -3306,22 +3291,24 @@ ppc_elf_check_relocs (bfd *abfd,
 	     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;
@@ -3347,10 +3334,10 @@ ppc_elf_check_relocs (bfd *abfd,
 	      asection *s;
 	      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 == got2)
@@ -3375,7 +3362,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,7 +3401,7 @@ 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;
 	    }
 
@@ -3465,10 +3452,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 +3465,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 +3489,15 @@ 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,
+		  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)
@@ -3526,7 +3513,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 +3528,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 +3568,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 +3581,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 +3589,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 +3597,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 +3605,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 +3614,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 +3627,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 +3635,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 +3643,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 +3651,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 +3665,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 +3684,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 +3719,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 +3728,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 +3757,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 +3766,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 +3782,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 +3821,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 +3833,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 +3860,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,11 +3871,11 @@ 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
@@ -3878,7 +3885,7 @@ ppc_elf_vle_split16 (bfd *input_bfd,
 		     bfd_byte *loc,
 		     bfd_vma value,
 		     split16_format_type split16_format,
-		     bfd_boolean fixup)
+		     bool fixup)
 {
   unsigned int insn, opcode;
 
@@ -3977,7 +3984,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
@@ -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;
@@ -5098,7 +5130,7 @@ allocate_dynrelocs (struct elf_link_hash
 
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (!ensure_undef_dynamic (info, &eh->elf))
-	return FALSE;
+	return false;
 
       need = 0;
       if ((eh->tls_mask & (TLS_TLS | TLS_LD)) == (TLS_TLS | TLS_LD))
@@ -5145,19 +5177,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 +5209,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 +5220,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 +5233,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 +5245,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,17 +5259,17 @@ 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)
+  for (p = h->dyn_relocs; p != NULL; p = p->next)
     {
       asection *sreloc = elf_section_data (p->sec)->sreloc;
       if (eh->elf.type == STT_GNU_IFUNC)
@@ -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
@@ -5529,7 +5543,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
 		     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)
 		{
@@ -5594,7 +5608,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 +5616,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,7 +5660,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
 			s = htab->relpltlocal;
 			s->size += sizeof (Elf32_External_Rela);
 		      }
-		    doneone = TRUE;
+		    doneone = true;
 		  }
 	      }
 	    else
@@ -5719,9 +5733,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 +5749,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 +5785,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 +5800,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 +5821,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 +5860,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 +5873,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;
-	}
-
-      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;
+	    return false;
 	}
-      if (htab->is_vxworks
-	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
-	return FALSE;
    }
 #undef add_dynamic_entry
 
@@ -5972,7 +5952,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 +5997,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 +6044,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 +6068,30 @@ 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_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 +6110,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;
@@ -6548,7 +6528,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 +6552,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 +6622,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 +6635,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 +6802,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 +6820,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 +6838,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 +6859,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,20 +6896,20 @@ _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));
 }
 
@@ -6965,7 +6942,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 +6961,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 +6978,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 +6993,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 +7013,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 +7024,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 +7038,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,
@@ -7245,7 +7222,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		{
 		  /* IE */
 		  insn1 &= (0x1f << 21) | (0x1f << 16);
-		  insn1 |= 32 << 26;	/* lwz */
+		  insn1 |= 32u << 26;	/* lwz */
 		  if (offset != (bfd_vma) -1)
 		    {
 		      rel[1].r_info = ELF32_R_INFO (STN_UNDEF, R_PPC_NONE);
@@ -7414,7 +7391,7 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	    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)
 	      {
 		if (!bfd_link_pic (info))
@@ -7450,7 +7427,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	    {
 	      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;
@@ -7513,28 +7490,28 @@ ppc_elf_relocate_section (bfd *output_bf
 	    {
 	      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 +7525,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 +7585,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,39 +7606,6 @@ 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)
 	{
@@ -7671,7 +7615,7 @@ ppc_elf_relocate_section (bfd *output_bf
 			      input_bfd, howto->name);
 
 	  bfd_set_error (bfd_error_bad_value);
-	  ret = FALSE;
+	  ret = false;
 	  goto copy_reloc;
 
 	case R_PPC_NONE:
@@ -7749,7 +7693,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		else
 		  {
 		    indx = h->dynindx;
-		    unresolved_reloc = FALSE;
+		    unresolved_reloc = false;
 		  }
 		offp = &h->got.offset;
 	      }
@@ -7970,7 +7914,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))
@@ -8091,11 +8035,11 @@ 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;
@@ -8136,7 +8080,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 +8111,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,7 +8172,7 @@ 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);
@@ -8341,7 +8285,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 +8299,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 +8315,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 +8342,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 +8377,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 +8388,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 +8427,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 +8458,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);
@@ -8592,7 +8534,7 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	    if (sec == NULL || sec->output_section == NULL)
 	      {
-		unresolved_reloc = TRUE;
+		unresolved_reloc = true;
 		break;
 	      }
 
@@ -8626,7 +8568,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		   name);
 
 		bfd_set_error (bfd_error_bad_value);
-		ret = FALSE;
+		ret = false;
 		goto copy_reloc;
 	      }
 
@@ -8634,7 +8576,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	      {
 		if (!is_static_defined (sda))
 		  {
-		    unresolved_reloc = TRUE;
+		    unresolved_reloc = true;
 		    break;
 		  }
 		addend -= SYM_VAL (sda);
@@ -8699,7 +8641,7 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	    if (sec == NULL || sec->output_section == NULL)
 	      {
-		unresolved_reloc = TRUE;
+		unresolved_reloc = true;
 		break;
 	      }
 
@@ -8722,13 +8664,13 @@ ppc_elf_relocate_section (bfd *output_bf
 		   name);
 
 		bfd_set_error (bfd_error_bad_value);
-		ret = FALSE;
+		ret = false;
 		goto copy_reloc;
 	      }
 
 	    if (sda == NULL || !is_static_defined (sda))
 	      {
-		unresolved_reloc = TRUE;
+		unresolved_reloc = true;
 		break;
 	      }
 	    value = relocation + addend - SYM_VAL (sda);
@@ -8780,7 +8722,7 @@ ppc_elf_relocate_section (bfd *output_bf
 
 	case R_PPC_VLE_ADDR20:
 	  ppc_elf_vle_split20 (output_bfd, contents + rel->r_offset, relocation);
-	  continue;
+	  goto copy_reloc;
 
 	  /* Relocate against the beginning of the section.  */
 	case R_PPC_SECTOFF:
@@ -8789,7 +8731,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 +8764,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,6 +8773,31 @@ ppc_elf_relocate_section (bfd *output_bf
 	default:
 	  break;
 
+	case R_PPC_TPREL16_HA:
+	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
+	    {
+	      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)
+	    {
+	      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)
 	    {
@@ -8856,7 +8823,7 @@ ppc_elf_relocate_section (bfd *output_bf
 	    {
 	      bfd_byte *p = contents + (rel->r_offset & ~3);
 	      bfd_put_32 (input_bfd, NOP, p);
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      r_type = R_PPC_NONE;
 	      howto = ppc_elf_howto_table[r_type];
 	    }
@@ -8947,7 +8914,7 @@ ppc_elf_relocate_section (bfd *output_bf
 		   input_bfd, input_section, rel->r_offset,
 		   howto->name, sym_name, mask + 1);
 		bfd_set_error (bfd_error_bad_value);
-		ret = FALSE;
+		ret = false;
 	      }
 	  }
 	  break;
@@ -8976,7 +8943,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
@@ -8993,11 +8960,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)
@@ -9056,7 +9023,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 +9108,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 +9133,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 +9188,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 +9275,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 +9354,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 +9376,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 +9389,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;
@@ -9547,8 +9512,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 +9541,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 +9560,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);
@@ -9619,18 +9580,15 @@ write_global_sym_plt (struct elf_link_ha
 		  }
 		bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
 	      }
-	    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 +9606,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 +9659,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;
@@ -9756,13 +9713,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,
@@ -9853,7 +9810,7 @@ ppc_elf_finish_dynamic_symbol (bfd *outp
   fprintf (stderr, "\n");
 #endif
 
-  return TRUE;
+  return true;
 }
 
 static enum elf_reloc_type_class
@@ -9881,7 +9838,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 +9846,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 +9878,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 +9910,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 +9955,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)
@@ -10310,7 +10267,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;
@@ -10414,6 +10371,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 +10399,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 +10408,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 +10419,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ppc.h ./bfd/elf32-ppc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-ppc.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-ppc.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC-specific support for 64-bit ELF.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-pru.c ./bfd/elf32-pru.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-pru.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-pru.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI PRU.
-   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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
@@ -67,227 +67,227 @@ static reloc_howto_type elf_pru_howto_ta
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 3,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 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 */
 	 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,
 	 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 */
 	 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) */
 	 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 */
 	 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 */
 	 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,
 	 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,
 	 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) */
 	 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 */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,7 +1348,7 @@ 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
@@ -1356,7 +1356,7 @@ pru_elf32_relax_section (bfd * abfd, ase
   if (bfd_link_relocatable (link_info)
     || (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;
 
@@ -1495,7 +1495,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 +1523,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 +1551,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 +1601,7 @@ 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 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-rl78.c ./bfd/elf32-rl78.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-rl78.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-rl78.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -29,7 +29,7 @@
 
 #define RL78REL(n,sz,bit,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, ~0, false)
 
 static bfd_reloc_status_type rl78_special_reloc (bfd *, arelent *, asymbol *, void *,
 						 asection *, bfd *, char **);
@@ -37,7 +37,7 @@ static bfd_reloc_status_type rl78_specia
 /* FIXME: We could omit the SHIFT parameter, it is always zero.  */
 #define RL78_OP_REL(n,sz,bit,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, ~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
@@ -45,25 +45,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,	 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),
 
   EMPTY_HOWTO (0x13),
   EMPTY_HOWTO (0x14),
@@ -92,10 +92,10 @@ 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),
+  RL78REL (RH_RELAX, 0,	 0, 0, dont,	 false),
 
   EMPTY_HOWTO (0x2e),
-  RL78REL (RH_SADDR, 0,	 0, 0, dont,	 FALSE),
+  RL78REL (RH_SADDR, 0,	 0, 0, dont,	 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,	     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),
 
 #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,	  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),
   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,  2, 32, 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,	  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)
 };
 
 /* 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;
 }
@@ -673,7 +673,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,
@@ -698,16 +698,16 @@ rl78_elf_relocate_section
 
   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);
@@ -730,8 +730,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,
@@ -923,7 +923,7 @@ rl78_elf_relocate_section
 
 	case R_RL78_RH_SADDR:
 	  RANGE (0xffe20, 0xfff1f);
-	  OP (0) = relocation & 0xff;
+	  OP (0) = (relocation - 0x20) & 0xff;
 	  break;
 
 	  /* Complex reloc handling:  */
@@ -1090,7 +1090,7 @@ rl78_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:
@@ -1124,25 +1124,25 @@ rl78_elf_relocate_section
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* 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 +1162,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 +1176,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 +1198,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 +1215,7 @@ rl78_elf_merge_private_bfd_data (bfd *ib
 	    }
 	  else
 	    {
-	      error = TRUE;
+	      error = true;
 
 	      _bfd_error_handler
 		/* xgettext:c-format */
@@ -1238,14 +1238,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 +1266,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 +1277,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 +1290,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 +1306,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 +1350,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 +1365,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 +1383,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 +1396,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 +1405,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 +1421,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 +1432,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 +1458,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 +1482,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 +1503,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 +1558,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 +1587,7 @@ rl78_elf_relax_plt_section (bfd *dynobj,
 	    {
 	      local_plt_offsets[idx] = -1;
 	      splt->size -= 4;
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -1631,12 +1631,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 +1668,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 +1755,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 +1766,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 +1807,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 +1822,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,
@@ -1982,7 +1982,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 +2049,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 +2067,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,7 +2080,7 @@ 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
@@ -2090,7 +2089,7 @@ rl78_elf_relax_section
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_symtab_hdr (abfd);
   if (elf_symtab_shndx_list (abfd))
@@ -2121,17 +2120,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 +2231,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 +2332,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 +2345,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 +2353,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 +2362,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 +2374,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 +2385,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 +2394,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 +2421,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 +2548,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 +2560,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-rx.c ./bfd/elf32-rx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-rx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-rx.c	2021-12-16 01:57:38.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-2021 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,	       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),
 
   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, 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),
 
   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,	       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),
 
 #define STACK_REL_P(x) ((x) <= R_RX_ABS16_REV && (x) >= R_RX_ABS32)
 
@@ -181,44 +181,44 @@ 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,	    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)
 };
 
 /* Map BFD reloc types to RX ELF reloc types.  */
@@ -299,7 +299,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)
@@ -313,7 +313,7 @@ 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;
     }
   cache_ptr->howto = rx_elf_howto_table + r_type;
   if (cache_ptr->howto->name == NULL)
@@ -322,9 +322,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 +337,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 +359,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 +379,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 +396,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 +413,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 +481,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 +492,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 +533,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 +547,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 +557,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 +576,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 +620,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 +1298,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 +1320,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 +1467,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 +1501,7 @@ rx_elf_relocate_section
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Relaxation Support.  */
@@ -1554,7 +1559,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 +1676,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 +1687,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 +1728,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 +1743,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 +1991,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,7 +2021,7 @@ 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
@@ -2025,7 +2030,7 @@ elf32_rx_relax_section (bfd *		       ab
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0
       || (sec->flags & SEC_CODE) == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_symtab_hdr (abfd);
   if (elf_symtab_shndx_list (abfd))
@@ -2058,17 +2063,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 +2086,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 +2179,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 +2249,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 +2257,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 +2354,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 +2362,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 +2423,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 +2462,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 +2476,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 +2501,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 +2514,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 +2536,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 +2570,7 @@ elf32_rx_relax_section (bfd *		       ab
 	      move_reloc (irel, srel, -1);
 
 	      SNIP (2, 1, newrel);
-	      *again = TRUE;
+	      *again = true;
 	    }
 	}
 
@@ -2601,7 +2609,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 +2623,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 +2648,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 +2661,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 +2681,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 +2724,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x38;
 		  SNIP (3, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2726,7 +2734,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x2e;
 		  SNIP (2, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2743,7 +2751,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 +2761,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x39;
 		  SNIP (1, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2764,7 +2772,7 @@ elf32_rx_relax_section (bfd *		       ab
 		{
 		  insn[0] = 0x20 | (insn[0] & 1);
 		  SNIP (1, 1, newrel);
-		  *again = TRUE;
+		  *again = true;
 		}
 	      break;
 
@@ -2777,7 +2785,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 +2803,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 +2820,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 +2838,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;
 	    }
 	}
 
@@ -3007,7 +3015,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 +3029,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 +3045,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 +3086,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 +3119,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 +3133,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 +3168,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 +3190,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 +3205,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 +3229,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 +3238,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 +3246,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 +3319,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 +3339,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 +3398,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 +3418,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 +3427,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 +3442,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 +3452,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 +3475,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 +3490,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 +3503,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 +3534,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 +3606,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 +3648,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 +3676,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 +3735,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 +3753,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 +3772,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 +3793,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 +3809,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 +3818,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 +3835,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 +3853,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 +3871,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 +3891,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 +3925,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))
 	{
@@ -4002,7 +4012,7 @@ rx_table_map (struct bfd_hash_entry *ven
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-rx.h ./bfd/elf32-rx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-rx.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-rx.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-s12z.c ./bfd/elf32-s12z.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-s12z.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-s12z.c	2021-12-16 01:57:38.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-2021 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
@@ -102,90 +102,90 @@ static reloc_howto_type elf_s12z_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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,			/* 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) */
 	 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) */
 	 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) */
 	 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.*
@@ -200,30 +200,30 @@ static reloc_howto_type elf_s12z_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-s390.c ./bfd/elf32-s390.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-s390.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-s390.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Contributed by Carl B. Pedersen and Martin Schwidefsky.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -42,140 +42,140 @@ static reloc_howto_type elf_howto_table[
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = 2 byte, 2 = 4 byte) */
 	 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, 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),
   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, 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),
   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, 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),
   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, 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),
   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, 2, 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, 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),
   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, 2, 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, 2, 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, 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),
   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, 2, 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, 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),
 };
 
 /* 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,2,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,2,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
 			{
@@ -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:
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-score7.c ./bfd/elf32-score7.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-score7.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-score7.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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)
 {
@@ -340,7 +343,7 @@ 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)
 {
@@ -372,7 +375,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 +425,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,10 +436,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;
     }
 
@@ -456,7 +459,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 +474,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;
     }
 
@@ -548,299 +551,299 @@ static reloc_howto_type elf32_score_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -915,14 +918,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 +945,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 +967,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 +985,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 +1023,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 +1062,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 +1078,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 +1092,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 +1129,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 +1146,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 +1159,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 +1177,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 +1185,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 +1201,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 +1258,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 +1293,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 +1301,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 +1312,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 +1329,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 +1397,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 +1425,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 +1435,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 +1500,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 +1515,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 +1531,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 +1569,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 +1821,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 +1838,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 +1886,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 +1957,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 +1978,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 +2160,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 +2217,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 +2226,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 +2257,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 +2276,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 +2412,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 +2452,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 +2545,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 +2572,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 +2595,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 +2609,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 +2641,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 +2664,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 +2683,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 +2696,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 +2712,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 +2721,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 +2750,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 +2760,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 +2773,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 +2796,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 +2804,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 +2824,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 +2845,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 +2867,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 +2875,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 +2886,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 +2921,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 +2944,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 +2952,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 +2964,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 +2990,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 +3019,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 +3048,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 +3078,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 +3090,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 +3120,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 +3128,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 +3141,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 +3152,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 +3165,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 +3173,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 +3229,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 +3247,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 +3258,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 +3267,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 +3303,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 +3326,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 +3362,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 +3381,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 +3405,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 +3470,7 @@ s7_bfd_score_elf_finish_dynamic_sections
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 	    }
 
@@ -3497,7 +3494,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 +3503,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 +3524,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 +3535,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 +3559,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 +3589,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 +3612,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 +3662,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 +3675,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 +3706,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 +3715,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 +3738,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 +3769,7 @@ s7_bfd_score_elf_grok_psinfo (bfd *abfd,
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3790,7 +3787,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 +3809,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 +3820,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 +3847,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 +3856,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-score.c ./bfd/elf32-score.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-score.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-score.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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)
@@ -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)
 {
@@ -440,7 +443,7 @@ 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)
 {
@@ -472,7 +475,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 +525,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 +536,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;
     }
 
@@ -556,7 +559,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 +574,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;
     }
 
@@ -647,330 +650,330 @@ static reloc_howto_type elf32_score_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 +1035,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 +1062,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 +1083,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 +1100,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 +1138,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 +1163,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 +1206,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 +1222,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 +1236,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 +1272,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 +1288,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 +1301,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 +1319,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 +1327,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 +1343,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 +1400,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 +1435,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 +1443,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 +1453,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 +1470,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 +1535,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 +1563,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 +1573,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 +1637,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 +1652,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 +1668,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 +1705,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 +1977,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 +1992,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 +2031,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 +2078,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 +2322,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 +2378,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 +2387,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 +2417,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 +2436,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 +2638,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 +2678,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 +2736,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 +2768,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 +2790,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 +2804,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 +2836,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 +2859,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 +2878,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 +2891,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 +2907,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 +2916,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 +2945,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 +2955,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 +2968,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 +2991,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 +2999,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 +3019,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 +3040,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 +3062,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 +3070,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 +3115,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 +3138,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 +3146,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 +3158,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 +3183,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 +3212,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 +3241,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 +3270,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 +3282,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 +3312,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 +3320,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 +3333,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 +3344,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 +3357,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 +3365,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 +3421,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 +3439,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 +3450,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 +3459,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 +3494,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 +3517,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 +3553,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 +3571,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 +3595,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 +3660,7 @@ s3_bfd_score_elf_finish_dynamic_sections
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 	    }
 
@@ -3687,7 +3684,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 +3693,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 +3713,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 +3723,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 +3747,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 +3777,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 +3799,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 +3847,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 +3859,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 +3889,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 +3898,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 +3921,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 +3948,7 @@ s3_bfd_score_elf_grok_psinfo (bfd *abfd,
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3985,7 +3982,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 +4004,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 +4015,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 +4042,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 +4051,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 +4071,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 +4082,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 +4102,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 +4114,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 +4164,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 +4175,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 +4185,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 +4195,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 +4204,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 +4213,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 +4225,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 +4235,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 +4246,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 +4255,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 +4280,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 +4288,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 +4298,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 +4320,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 +4329,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 +4360,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 +4377,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 +4386,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 +4395,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 +4408,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 +4433,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 +4490,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-score.h ./bfd/elf32-score.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-score.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-score.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-sh.c ./bfd/elf32-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-sh.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-sh.c	2021-12-16 01:57:38.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-2021 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,23 @@ 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_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = &elf_symtab_hdr (abfd);
 
@@ -483,7 +480,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 +491,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 +716,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 +758,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 +808,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 +895,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 +1070,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 +1081,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 +1102,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 +1137,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;
 	    }
 	}
 
@@ -1169,9 +1162,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 +1188,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 +1245,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 +1307,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 +1375,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 +1449,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 +1464,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 +1473,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 +1490,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 +1504,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 +1541,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 +1676,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 +1687,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 +1700,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 +1711,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 +1804,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 +1815,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 +1828,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 +1839,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 +1900,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 +1911,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 +1960,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 +1972,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 +1985,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 +1996,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 +2006,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 +2027,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 +2093,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 +2144,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 +2158,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 +2165,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 +2175,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 +2184,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 +2219,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 +2234,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 +2249,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 +2266,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 +2277,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 +2308,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 +2319,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 +2330,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 +2358,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 +2385,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 +2396,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 +2407,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 +2417,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 +2433,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 +2454,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 +2485,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 +2515,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 +2531,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 +2542,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 +2574,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 +2585,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 +2597,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 +2606,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 +2636,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 +2682,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 +2714,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 +2723,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 +2815,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 +2830,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 +2841,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 +2856,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 +2869,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 +2892,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 +2901,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 +2917,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 +2933,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 +3000,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 +3059,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 +3134,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 +3145,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 +3191,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 +3261,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 +3272,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 +3340,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 +3374,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 +3391,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 +3429,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 +3446,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 +3479,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 +3489,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 +3508,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 +3566,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 +3592,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 +3657,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 +3675,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 +3684,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 +3754,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 +3764,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 +3784,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 +3801,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 +3817,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 +3833,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 +3852,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 +3861,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 +3963,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 +4024,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 +4319,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 +4335,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 +4358,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 +4382,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 +4459,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 +4475,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 +4491,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 +4576,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 +4665,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 +4814,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 +4882,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 +4971,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)
@@ -5140,7 +5010,7 @@ sh_elf_relocate_section (bfd *output_bfd
 		    /* xgettext:c-format */
 		    (_("%X%C: relocation to \"%s\" references a different segment\n"),
 		     input_bfd, input_section, rel->r_offset, symname);
-		  return FALSE;
+		  return false;
 		}
 	      else
 		info->callbacks->einfo
@@ -5170,7 +5040,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 +5053,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 +5064,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;
@@ -5227,7 +5097,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 +5140,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,13 +5150,10 @@ 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);
   return NULL;
 }
@@ -5351,36 +5216,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 +5271,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 +5287,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 +5296,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 +5378,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 +5392,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 +5452,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 +5487,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 +5513,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 +5529,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 +5656,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 +5673,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 +5689,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 +5720,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 +5734,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 +5781,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 +5815,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 +5839,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 +5850,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 +5890,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 +5902,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 +5913,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 +5926,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 +5935,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 +6003,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 +6012,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 +6051,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 +6067,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 +6100,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.  */
@@ -6393,15 +6223,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 +6240,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 +6264,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;
@@ -6474,14 +6304,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 +6394,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 +6418,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 +6427,7 @@ elf32_shlin_grok_prstatus (bfd *abfd, El
   switch (note->descsz)
     {
       default:
-	return FALSE;
+	return false;
 
       case 168:		/* Linux/SH */
 	/* pr_cursig */
@@ -6618,13 +6448,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 +6475,7 @@ elf32_shlin_grok_psinfo (bfd *abfd, Elf_
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 #endif /* not SH_TARGET_ALREADY_DEFINED */
 
@@ -6666,7 +6496,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 +6505,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 +6616,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 +6712,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-sh-relocs.h ./bfd/elf32-sh-relocs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-sh-relocs.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-sh-relocs.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,15 +22,15 @@
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -38,7 +38,7 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 sh_elf_ignore_reloc,	/* special_function */
@@ -61,22 +61,22 @@
 	 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) */
 	 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
@@ -85,45 +85,45 @@
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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
@@ -132,15 +132,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -149,15 +149,15 @@
 	 1,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -166,45 +166,45 @@
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -227,30 +227,30 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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
@@ -259,15 +259,15 @@
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -276,15 +276,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -293,15 +293,15 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.
@@ -311,15 +311,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -329,15 +329,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -346,15 +346,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -363,15 +363,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -379,15 +379,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -396,184 +396,184 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -589,15 +589,15 @@
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -694,7 +694,7 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -815,7 +815,7 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -976,45 +976,45 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -1022,75 +1022,75 @@
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-sparc.c ./bfd/elf32-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-sparc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-sparc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-spu.c ./bfd/elf32-spu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-spu.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-spu.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* SPU specific support for 32-bit ELF
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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, 3,  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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2,  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, 2,  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, 2,  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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 4, 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)
@@ -296,7 +296,7 @@ spu_elf_object_p (bfd *abfd)
 	      }
 	  }
     }
-  return TRUE;
+  return true;
 }
 
 /* Specially mark defined symbols named _EAR_* with BSF_KEEP so that
@@ -307,7 +307,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 +371,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 +495,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 +543,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 +558,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 +590,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 +600,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 +627,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 +725,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 +785,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 +794,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 +831,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 +869,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 +885,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 +895,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 +903,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 +952,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 +970,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 +981,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 +1072,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 +1102,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 +1110,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 +1150,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 +1160,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 +1203,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 +1237,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 +1256,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 +1273,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 +1447,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 +1459,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 +1478,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 +1496,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 +1506,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 +1521,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 +1532,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 +1599,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 +1659,7 @@ process_stubs (struct bfd_link_info *inf
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Allocate space for overlay call and return stubs.
@@ -1676,7 +1675,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 +1861,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 +1890,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 +1927,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 +1953,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 +1967,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 +1981,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 +1990,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 +2010,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 +2102,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 +2137,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 +2209,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 +2392,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 +2433,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 +2515,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 +2543,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 +2575,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 +2591,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 +2629,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 +2643,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 +2690,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 +2699,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 +2722,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 +2731,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 +2764,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 +2816,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 +2836,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 +2868,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 +2892,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 +2915,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 +2934,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 +2958,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 +2978,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 +3006,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 +3060,7 @@ discover_functions (struct bfd_link_info
 	      break;
 
 	  if (!alloc_stack_info (s, psy2 - psy))
-	    return FALSE;
+	    return false;
 	  psy = psy2;
 	}
 
@@ -3078,8 +3074,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 +3098,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 +3119,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 +3137,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 +3179,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 +3198,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 +3235,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 +3266,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 +3279,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 +3301,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 +3311,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 +3331,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 +3345,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 +3374,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 +3438,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 +3449,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 +3480,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 +3549,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 +3576,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 +3605,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 +3615,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 +3637,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 +3653,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 +3663,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 +3690,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 +3762,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 +3868,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 +3901,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 +3930,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 +3943,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 +3967,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 +4003,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 +4011,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 +4042,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 +4069,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 +4099,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 +4119,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 +4133,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 +4151,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 +4168,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 +4235,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 +4257,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 +4275,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 +4283,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 +4317,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 +4327,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 +4417,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 +4694,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 +4716,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 +4837,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 +4865,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 +4885,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 +4909,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 +4923,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 +5035,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 +5054,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 +5077,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 +5097,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 +5132,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 +5156,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 +5186,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 +5198,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 +5229,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 +5238,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 +5256,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 +5271,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 +5329,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 +5442,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 +5478,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 +5501,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-spu.h ./bfd/elf32-spu.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-spu.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-spu.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* SPU specific support for 32-bit ELF.
 
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tic6x.c ./bfd/elf32-tic6x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tic6x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-tic6x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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,8 +128,11 @@ 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[] =
 {
@@ -150,405 +140,405 @@ static reloc_howto_type elf32_tic6x_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -775,41 +765,41 @@ static reloc_howto_type elf32_tic6x_howt
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,			/* 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,			/* 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[] =
@@ -818,224 +808,224 @@ static reloc_howto_type elf32_tic6x_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1043,94 +1033,94 @@ static reloc_howto_type elf32_tic6x_howt
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1359,41 +1349,41 @@ static reloc_howto_type elf32_tic6x_howt
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,			/* 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,			/* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tic6x.h ./bfd/elf32-tic6x.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tic6x.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-tic6x.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilegx.c ./bfd/elf32-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilegx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-tilegx.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilegx.h ./bfd/elf32-tilegx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilegx.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-tilegx.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilepro.c ./bfd/elf32-tilepro.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilepro.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-tilepro.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILEPro-specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -36,135 +36,135 @@ static reloc_howto_type tilepro_elf_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -172,123 +172,123 @@ static reloc_howto_type tilepro_elf_howt
 	 16,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,			/* 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,			/* 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,			/* 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) */
 	 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) */
 	 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) */
 	 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),
@@ -300,9 +300,9 @@ static reloc_howto_type tilepro_elf_howt
   TILEPRO_IMM_HOWTO(R_TILEPRO_IMM16_X1, 1, 16),
 
 #define TILEPRO_IMM16_HOWTO(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 1, 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),
@@ -317,34 +317,34 @@ static reloc_howto_type tilepro_elf_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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, 1, 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),
@@ -385,15 +385,15 @@ static reloc_howto_type tilepro_elf_howt
 	 TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -407,29 +407,29 @@ static reloc_howto_type tilepro_elf_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
@@ -444,29 +444,29 @@ static reloc_howto_type tilepro_elf_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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, 2, 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) */
 	 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) */
 	 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),
@@ -529,30 +529,30 @@ static reloc_howto_type tilepro_elf_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilepro.h ./bfd/elf32-tilepro.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-tilepro.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-tilepro.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILEPro-specific support for 32-bit ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-v850.c ./bfd/elf32-v850.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-v850.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-v850.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* V850-specific support for 32-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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
@@ -893,345 +897,345 @@ static reloc_howto_type v850_elf_howto_t
 	 0,				/* Rightshift.  */
 	 3,				/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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 */
@@ -1239,30 +1243,30 @@ static reloc_howto_type v850_elf_howto_t
 	 0,			/* Rightshift.  */
 	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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.  */
@@ -1270,15 +1274,15 @@ static reloc_howto_type v850_elf_howto_t
 	 0,			/* Rightshift.  */
 	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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.  */
@@ -1286,194 +1290,194 @@ static reloc_howto_type v850_elf_howto_t
 	 0,			/* Rightshift.  */
 	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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.  */
@@ -1481,15 +1485,15 @@ static reloc_howto_type v850_elf_howto_t
 	 0,				/* rightshift.  */
 	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
 	 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.  */
@@ -1497,29 +1501,29 @@ static reloc_howto_type v850_elf_howto_t
 	 0,				/* rightshift.  */
 	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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.  */
@@ -1527,29 +1531,29 @@ static reloc_howto_type v850_elf_howto_t
 	 1,				/* rightshift.  */
 	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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
@@ -1560,15 +1564,15 @@ static reloc_howto_type v850_elf_howto_t
 	 0,				/* rightshift.  */
 	 2,				/* size (0 = byte, 1 = short, 2 = long).  */
 	 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.  */
@@ -1576,30 +1580,30 @@ static reloc_howto_type v850_elf_howto_t
 	 0,				/* rightshift.  */
 	 2,				/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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
@@ -1608,71 +1612,71 @@ static reloc_howto_type v850_elf_howto_t
 	 0,				/* rightshift.  */
 	 2,				/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,      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_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,    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_EMPTY (R_V810_reserved2),
-  V800_RELOC (R_V850_GPHWLO,    1, 16, 0, dont,     FALSE, v850),
+  V800_RELOC (R_V850_GPHWLO,    1, 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,     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_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,   2, 16, 1, signed,   false, v850),
+  V800_RELOC (R_V850_GPHWLO_1,  1, 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,     2, 16, 1, signed,   false, v850),
+  V800_RELOC (R_V850_EPHWLO,    1, 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,   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)
 };
 
 /* 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
+bool
 v850_elf_set_note (bfd * abfd, enum v850_notes 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,14 @@ 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_RELOC) == 0
       || sec->reloc_count == 0)
-    return TRUE;
+    return true;
 
   symtab_hdr = & elf_tdata (abfd)->symtab_hdr;
 
@@ -3837,7 +3821,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 +4072,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 +4230,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 +4249,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-v850.h ./bfd/elf32-v850.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-v850.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-v850.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* V850 Note manipulation routines.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-vax.c ./bfd/elf32-vax.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-vax.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-vax.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* VAX series support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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,			/* 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -175,15 +174,15 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -195,90 +194,90 @@ static reloc_howto_type howto_table[] =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-visium.c ./bfd/elf32-visium.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-visium.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-visium.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* Visium-specific support for 32-bit ELF.
 
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -36,60 +36,60 @@ static reloc_howto_type visium_elf_howto
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -97,45 +97,45 @@ static reloc_howto_type visium_elf_howto
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -143,105 +143,105 @@ static reloc_howto_type visium_elf_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
 };
 
@@ -251,15 +251,15 @@ static reloc_howto_type visium_elf_vtinh
 	 0,			   /* rightshift */
 	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -267,15 +267,15 @@ static reloc_howto_type visium_elf_vtent
 	 0,			   /* rightshift */
 	 2,			   /* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-wasm32.c ./bfd/elf32-wasm32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-wasm32.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-wasm32.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF for the WebAssembly target
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -31,30 +31,30 @@ static reloc_howto_type elf32_wasm32_how
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xc16x.c ./bfd/elf32-xc16x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xc16x.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-xc16x.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Infineon XC16X-specific support for 16-bit ELF.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 Free Software Foundation, Inc.
    Contributed by KPIT Cummins Infosystems
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -34,59 +34,59 @@ static reloc_howto_type xc16x_elf_howto_
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_XC16X_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_XC16X_ABS_8,		/* type */
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 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 */
+	 true,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 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 */
+	 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 */
+	 true,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_XC16X_ABS_32,	/* type */
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 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 */
+	 true,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 
   /* A PC relative 8 bit relocation.  */
@@ -94,30 +94,30 @@ static reloc_howto_type xc16x_elf_howto_
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 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 */
+	 false,			/* partial_inplace */
 	 0x0000,		/* src_mask */
 	 0x00ff,		/* dst_mask */
-	 TRUE),		/* pcrel_offset */
+	 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 */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 bfd_elf_generic_reloc, /* special_function */
 	 "R_XC16X_PAG",	/* name */
-	 TRUE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0x00000000,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
 
   /* Relocation regarding page number.  */
@@ -125,15 +125,15 @@ static reloc_howto_type xc16x_elf_howto_
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos  */
 	 complain_overflow_signed, /* complain_on_overflow  */
 	 bfd_elf_generic_reloc, /* special_function  */
 	 "R_XC16X_POF",	/* name  */
-	 TRUE,			/* partial_inplace  */
+	 true,			/* partial_inplace  */
 	 0x00000000,		/* src_mask  */
 	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 false),		/* pcrel_offset  */
 
 
   /* Relocation regarding segment number.   */
@@ -141,30 +141,30 @@ static reloc_howto_type xc16x_elf_howto_
 	 0,			/* rightshift  */
 	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
 	 16,			/* bitsize  */
-	 FALSE,			/* pc_relative  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed, /* complain_on_overflow  */
 	 bfd_elf_generic_reloc, /* special_function  */
 	 "R_XC16X_SEG",	/* name  */
-	 TRUE,			/* partial_inplace  */
+	 true,			/* partial_inplace  */
 	 0x00000000,		/* src_mask  */
 	 0x0000ffff,		/* dst_mask  */
-	 FALSE),		/* pcrel_offset  */
+	 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  */
+	 false,			/* pc_relative  */
 	 0,			/* bitpos  */
 	 complain_overflow_signed, /* complain_on_overflow  */
 	 bfd_elf_generic_reloc, /* special_function  */
 	 "R_XC16X_SOF",	/* name */
-	 TRUE,			/* partial_inplace  */
+	 true,			/* partial_inplace  */
 	 0x00000000,		/* src_mask  */
 	 0x0000ffff,		/* dst_mask  */
-	 FALSE)			/* pcrel_offset  */
+	 false)			/* pcrel_offset  */
 };
 
 
@@ -232,7 +232,7 @@ elf32_xc16x_rtype_to_howto (bfd *abfd AT
 /* For a particular operand this function is
    called to finalise the type of relocation.  */
 
-static bfd_boolean
+static bool
 elf32_xc16x_info_to_howto (bfd *abfd, arelent *bfd_reloc,
 			   Elf_Internal_Rela *elf_reloc)
 {
@@ -244,12 +244,12 @@ elf32_xc16x_info_to_howto (bfd *abfd, ar
     if (xc16x_elf_howto_table[i].type == r)
       {
 	bfd_reloc->howto = &xc16x_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_reloc_status_type
@@ -341,7 +341,7 @@ elf32_xc16x_final_link_relocate (unsigne
     }
 }
 
-static bfd_boolean
+static int
 elf32_xc16x_relocate_section (bfd *output_bfd,
 			      struct bfd_link_info *info,
 			      bfd *input_bfd,
@@ -383,7 +383,7 @@ elf32_xc16x_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,
@@ -412,11 +412,11 @@ elf32_xc16x_relocate_section (bfd *outpu
 				       info, sec, h == NULL);
     }
 
-  return TRUE;
+  return true;
 }
 
 
-static bfd_boolean
+static bool
 elf32_xc16x_final_write_processing (bfd *abfd)
 {
   unsigned long val;
@@ -459,12 +459,12 @@ elf32_xc16x_mach (flagword flags)
 }
 
 
-static bfd_boolean
+static bool
 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;
+  return true;
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xgate.c ./bfd/elf32-xgate.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xgate.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-xgate.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Contributed by Sean Keys(skeys@ipdatasys.com)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -44,60 +44,60 @@ static reloc_howto_type elf_xgate_howto_
 	 0, /* rightshift */
 	 3, /* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -105,240 +105,240 @@ static reloc_howto_type elf_xgate_howto_
 	 0, /* rightshift */
 	 2, /* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xstormy16.c ./bfd/elf32-xstormy16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xstormy16.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-xstormy16.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Xstormy16-specific support for 32-bit ELF.
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -75,195 +75,195 @@ static reloc_howto_type xstormy16_elf_ho
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 [] =
@@ -273,30 +273,30 @@ static reloc_howto_type xstormy16_elf_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xtensa.c ./bfd/elf32-xtensa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-xtensa.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf32-xtensa.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Xtensa-specific support for 32-bit ELF.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,22 +37,38 @@
 
 #define XTENSA_NO_NOP_REMOVAL 0
 
+#ifndef XSHAL_ABI
+#define XSHAL_ABI 0
+#endif
+
+#ifndef XTHAL_ABI_UNDEFINED
+#define XTHAL_ABI_UNDEFINED -1
+#endif
+
+#ifndef XTHAL_ABI_WINDOWED
+#define XTHAL_ABI_WINDOWED 0
+#endif
+
+#ifndef XTHAL_ABI_CALL0
+#define XTHAL_ABI_CALL0 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 +76,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 +101,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 +122,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 +137,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 +168,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 +178,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 +191,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, 3, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 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),
 
   /* 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, 2, 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, 2, 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, 2, 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, 2, 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, 0, 8, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF8", false, 0, 0xff, false),
+  HOWTO (R_XTENSA_PDIFF16, 0, 1, 16, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF16", false, 0, 0xffff, false),
+  HOWTO (R_XTENSA_PDIFF32, 0, 2, 32, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF32", false, 0, 0xffffffff, false),
+
+  HOWTO (R_XTENSA_NDIFF8, 0, 0, 8, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF8", false, 0, 0xff, false),
+  HOWTO (R_XTENSA_NDIFF16, 0, 1, 16, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF16", false, 0, 0xffff, false),
+  HOWTO (R_XTENSA_NDIFF32, 0, 2, 32, false, 0, complain_overflow_bitfield,
+	 bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF32", false, 0, 0xffffffff, false),
 };
 
 #if DEBUG_GEN_RELOC
@@ -364,6 +398,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 +543,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 +556,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 +674,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 +705,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 +745,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 +763,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 +801,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 +872,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;
@@ -849,7 +909,7 @@ 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);
   blocks = (property_table_entry *)
     bfd_malloc (num_records * sizeof (property_table_entry));
   block_count = 0;
@@ -859,7 +919,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 +1034,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 +1061,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 +1081,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 +1093,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)
@@ -1051,8 +1111,8 @@ elf_xtensa_check_relocs (bfd *abfd,
 	  if (bfd_link_pic (info))
 	    {
 	      tls_type = GOT_TLS_GD;
-	      is_got = TRUE;
-	      is_tlsfunc = TRUE;
+	      is_got = true;
+	      is_tlsfunc = true;
 	    }
 	  else
 	    tls_type = GOT_TLS_IE;
@@ -1062,13 +1122,13 @@ elf_xtensa_check_relocs (bfd *abfd,
 	  if (bfd_link_pic (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;
+		is_got = true;
 	    }
 	  break;
 
@@ -1084,31 +1144,31 @@ elf_xtensa_check_relocs (bfd *abfd,
 	  if (bfd_link_pic (info))
 	    info->flags |= DF_STATIC_TLS;
 	  if (bfd_link_pic (info) || h)
-	    is_got = TRUE;
+	    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 +1196,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 +1222,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 +1266,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 +1279,7 @@ elf_xtensa_check_relocs (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -1251,7 +1311,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 +1358,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 +1366,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 +1384,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 +1430,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 +1450,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 +1463,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 +1482,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 +1502,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 +1510,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 +1559,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 +1574,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 +1678,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 +1691,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 +1735,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 +1769,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 (!_bfd_elf_add_dynamic_tags (output_bfd, info,
+				      relplt || relgot))
+	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 (!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 +1791,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 +1804,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 +1860,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 +1892,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:
@@ -2063,7 +2110,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 +2158,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 +2250,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 +2269,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 +2290,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 +2308,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 +2342,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 +2352,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 +2365,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 +2375,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 +2405,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 +2413,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 +2427,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 +2444,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 +2467,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 +2477,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 +2493,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 +2521,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 +2536,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 +2557,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 +2570,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 +2579,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 +2602,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 +2612,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 +2639,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 +2685,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 +2703,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 +2736,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 +2843,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)
 		    {
@@ -2897,7 +2952,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
@@ -2923,7 +2978,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 +3028,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 +3059,17 @@ elf_xtensa_relocate_section (bfd *output
 	}
     }
 
-  if (lit_table)
-    free (lit_table);
-
-  input_section->reloc_done = TRUE;
+  free (lit_table);
+  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 +3093,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 +3117,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 +3142,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 +3162,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 +3214,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 +3225,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 +3333,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 +3356,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 +3399,7 @@ elf_xtensa_finish_dynamic_sections (bfd
       bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3353,7 +3408,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 +3417,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 +3436,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 +3449,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 +3458,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 +3499,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 +3511,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 +3523,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 +3561,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 +3574,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 +3582,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 +3691,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 +3712,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 +3734,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 +3764,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 +3791,7 @@ elf_xtensa_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -3763,7 +3823,7 @@ init_call_opcodes (void)
 }
 
 
-static bfd_boolean
+static bool
 is_indirect_call_opcode (xtensa_opcode opcode)
 {
   init_call_opcodes ();
@@ -3774,7 +3834,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 +3845,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 +3858,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 +3874,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 +3899,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 +3927,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 +3940,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 +4053,7 @@ get_relocation_opcode (bfd *abfd,
 }
 
 
-bfd_boolean
+bool
 is_l32r_relocation (bfd *abfd,
 		    asection *sec,
 		    bfd_byte *contents,
@@ -4001,7 +4061,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 +4090,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 +4098,7 @@ is_alt_relocation (int r_type)
 }
 
 
-bfd_boolean
+bool
 is_operand_relocation (int r_type)
 {
   switch (r_type)
@@ -4046,17 +4106,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 +4213,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 +4221,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 +4239,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 +4269,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 +4346,7 @@ struct string_pair
   const char *narrow;
 };
 
-struct string_pair narrowable[] =
+const struct string_pair narrowable[] =
 {
   { "add", "add.n" },
   { "addi", "addi.n" },
@@ -4299,7 +4359,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 +4401,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 +4484,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 +4507,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 +4515,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 +4565,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 +4653,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 +4676,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 +4684,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 +4817,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 +4846,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 +4856,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 +4945,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 +4981,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;
 }
 
 
@@ -5022,8 +5082,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 +5093,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 +5172,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 +5187,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 +5196,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,31 +5204,31 @@ 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).  */
@@ -5181,19 +5241,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 +5276,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 +5327,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 +5352,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 +5657,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 +5694,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 +5709,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 +5726,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 +5736,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 +5756,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 +5764,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 +5806,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 +5998,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 +6019,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 +6064,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 +6096,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 +6133,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 +6176,7 @@ struct reloc_bfd_fix_struct
 
   asection *target_sec;
   bfd_vma target_offset;
-  bfd_boolean translated;
+  bool translated;
 
   reloc_bfd_fix *next;
 };
@@ -6125,7 +6188,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 +6314,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 +6332,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 +6350,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 +6366,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 +6410,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 +6445,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 +6457,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 +6490,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 +6527,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 +6572,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 +6588,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 +6607,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 +6618,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 +6651,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 +6664,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 +6709,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 +6724,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 +6751,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 +6776,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 +6794,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 +6814,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 +6845,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 +6923,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 +6945,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 +6954,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 +6983,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 +7002,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 +7031,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 +7039,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 +7056,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 +7077,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 +7097,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 +7118,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 +7135,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 +7151,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 +7171,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 +7194,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 +7205,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 +7237,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 +7277,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 +7310,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 +7329,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 +7364,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 +7372,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 +7467,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 +7518,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 +7537,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 +7578,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 +7636,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 +7742,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 +7751,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 +7777,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 +7896,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 +7909,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 +7917,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 +7925,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 +7966,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 +7977,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 +8006,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 +8040,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 +8049,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 +8065,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 +8076,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 +8097,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 +8116,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 +8149,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 +8201,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 +8209,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 +8217,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 +8241,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 +8254,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 +8265,7 @@ compute_ebb_actions (ebb_constraint *ebb
 					       offset,
 					       offset - removed_bytes))
 			{
-			  bad_alignment = TRUE;
+			  bad_alignment = true;
 			  break;
 			}
 		    }
@@ -8219,9 +8274,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 +8284,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 +8296,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 +8331,7 @@ compute_ebb_actions (ebb_constraint *ebb
 
       action->removed_bytes = extra_space - br;
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -8445,10 +8500,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 +8512,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 +8525,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 +8542,7 @@ check_section_ebb_pcrels_fit (bfd *abfd,
     {
       if (!relevant_relocs->ok)
 	{
-	  ok = FALSE;
+	  ok = false;
 	  n = 0;
 	}
       else
@@ -8612,34 +8668,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 +8707,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 +8782,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 +8792,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 +8816,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 +8828,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 +8863,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 +8874,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 +8888,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 +8899,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 +8949,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 +8962,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 +9000,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 +9052,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 +9120,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 +9143,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 +9156,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 +9180,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 +9190,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 +9208,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 +9228,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 +9254,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 +9296,7 @@ coalesce_shared_literal (asection *sec,
 			 ta_fill, sec, entry_sec_offset, removed_diff);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -9250,7 +9304,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 +9321,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 +9338,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 +9367,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 +9376,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 +9448,7 @@ move_shared_literal (asection *sec,
 			 ta_fill, sec, entry_sec_offset, removed_diff);
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -9414,16 +9468,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 +9497,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 +9658,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 +9680,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 +9727,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 +9790,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 +9832,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 +9874,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 +10010,7 @@ relax_section (bfd *abfd, asection *sec,
 }
 
 
-static bfd_boolean
+static bool
 translate_section_fixes (asection *sec)
 {
   xtensa_relax_info *relax_info;
@@ -9917,20 +10018,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 +10041,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 +10049,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 +10059,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 +10068,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 +10098,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 +10113,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 +10139,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 +10182,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 +10194,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 +10228,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 +10249,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 +10320,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 +10361,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 +10396,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 +10442,7 @@ move_literal (bfd *abfd,
 	    relax_info->relocs_count = sec->reloc_count;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 
@@ -10351,7 +10451,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 +10459,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 +10472,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 +10525,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 +10552,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 +10572,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 +10624,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 +10693,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 +10710,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 +10743,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 +10801,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 +10815,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 +10834,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 +10861,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 +10892,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 +10912,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 +10922,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 +11106,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 +11114,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 +11129,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 +11216,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 +11252,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 +11265,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 +11286,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 +11302,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 +11322,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 +11383,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 +11393,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 +11401,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 +11442,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-z80.c ./bfd/elf32-z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf32-z80.c	1970-01-01 00:00:00.000000000 +0000
+++ ./bfd/elf32-z80.c	2021-12-16 01:57:38.000000000 +0000
@@ -0,0 +1,632 @@
+/* Zilog (e)Z80-specific support for 32-bit ELF
+   Copyright (C) 1999-2021 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 */
+	 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_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 */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 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_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 */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 5,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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 */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-alpha.c ./bfd/elf64-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-alpha.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-alpha.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Alpha specific support for 64-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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.  */
@@ -489,45 +490,45 @@ static reloc_howto_type elf64_alpha_howt
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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
@@ -536,30 +537,30 @@ static reloc_howto_type elf64_alpha_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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:
@@ -572,15 +573,15 @@ static reloc_howto_type elf64_alpha_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -602,90 +603,90 @@ static reloc_howto_type elf64_alpha_howt
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -699,45 +700,45 @@ static reloc_howto_type elf64_alpha_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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,120 +756,120 @@ 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -876,75 +877,75 @@ static reloc_howto_type elf64_alpha_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -952,75 +953,75 @@ static reloc_howto_type elf64_alpha_howt
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,33 @@ 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);
+  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);
+  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 +1463,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 +1493,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 +1508,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;
@@ -1540,7 +1533,7 @@ elf64_alpha_find_nearest_line (bfd *abfd
 				  line_ptr))
 	{
 	  msec->flags = origflags;
-	  return TRUE;
+	  return true;
 	}
 
       msec->flags = origflags;
@@ -1561,35 +1554,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 +1663,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 +1718,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 +1748,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 +1763,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 +1772,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 +1781,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 +1807,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 +1831,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 +1882,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 +1913,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 +1923,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 +1952,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 +1974,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 +1996,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 `%pT' in "
+		       "read-only section `%pA'\n"),
+		     sec->owner, h->root.root.root.string, sec);
+		}
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Return the section that should be marked against GC for a given
@@ -2047,7 +2037,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 +2055,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 +2079,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 +2087,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 +2186,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 +2194,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 +2235,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 +2344,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 +2362,7 @@ elf64_alpha_calc_got_offsets_for_symbol
 	*plge += alpha_got_entry_size (gotent->reloc_type);
       }
 
-  return TRUE;
+  return true;
 }
 
 static void
@@ -2426,16 +2416,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 +2453,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 +2465,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 +2499,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 +2523,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 +2578,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 +2586,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 +2604,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 +2646,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 +2678,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 +2687,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 +2729,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 +2745,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 +2805,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 +2847,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 +2860,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 +2891,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 +2899,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 +2913,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 +2954,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 +2974,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 +2992,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 +3022,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 +3050,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 +3072,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 +3087,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 +3145,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 +3160,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 +3187,12 @@ 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;
+    return true;
 
   changed_contents = info->changed_contents;
   changed_relocs = info->changed_relocs;
@@ -3255,14 +3227,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 +3256,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 +3268,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 +3280,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 +3303,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 +3314,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 +3333,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 +3352,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 +3362,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 +3377,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 +3408,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 +3440,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 +3451,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 +3481,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 +3522,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 +3576,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 +3622,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 +3649,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 +3684,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 +3701,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 +3719,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->reloc_count == 0)
-    return TRUE;
+    return true;
 
   BFD_ASSERT (is_alpha_elf (abfd));
   relax_pass = link_info->relax_pass;
@@ -3787,7 +3760,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 +3992,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 +4038,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 +4051,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 +4072,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 +4120,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 +4134,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 +4146,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 +4207,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 +4220,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 +4286,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 +4305,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 +4385,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 +4398,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 +4425,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 +4454,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 +4485,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 +4544,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 +4569,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 +4578,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 +4644,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 +4661,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 +4669,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 +4748,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 +4770,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 +4913,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 +5035,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 +5057,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 +5102,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 +5141,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 +5182,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 +5212,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 +5249,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 +5269,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 +5291,7 @@ elf64_alpha_final_link (bfd *abfd, struc
 					sgot->contents,
 					(file_ptr) sgot->output_offset,
 					sgot->size))
-	  return FALSE;
+	  return false;
       }
   }
 
@@ -5331,12 +5301,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 +5493,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 +5518,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 +5534,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-bpf.c ./bfd/elf64-bpf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-bpf.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-bpf.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Linux bpf specific support for 64-bit ELF
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 Free Software Foundation, Inc.
    Contributed by Oracle Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -31,6 +31,9 @@
 
 #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 **);
+
 /* Relocation tables.  */
 static reloc_howto_type bpf_elf_howto_table [] =
 {
@@ -39,204 +42,204 @@ static reloc_howto_type bpf_elf_howto_ta
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 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 */
+	 false,			/* pc_relative */
+	 32,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_INSN_64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 true,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
-  /* 32-immediate in LDDW instruction.  */
+  /* 32-immediate in many instructions.  */
   HOWTO (R_BPF_INSN_32,		/* type */
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
+	 false,			/* pc_relative */
+	 32,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_INSN_32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 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 */
+	 false,			/* pc_relative */
+	 16,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_INSN_16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 true,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 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 */
+	 true,			/* pc_relative */
+	 16,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_INSN_DISP16",   /* name */
-	 FALSE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_BPF_DATA_8_PCREL,
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_8_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 true,			/* partial_inplace */
+	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_BPF_DATA_16_PCREL,
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_16_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_BPF_DATA_32_PCREL,
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_32_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_BPF_DATA_8,
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_DATA_8",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 true,			/* partial_inplace */
+	 0xff,			/* src_mask */
 	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   HOWTO (R_BPF_DATA_16,
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_unsigned, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_DATA_16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 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 */
+	 true,			/* pc_relative */
+	 32,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_INSN_DISP32",   /* name */
-	 FALSE,			/* partial_inplace */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 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 */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_DATA_32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 false,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
 	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 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 */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_DATA_64",	/* name */
-	 FALSE,			/* partial_inplace */
+	 false,			/* partial_inplace */
 	 0,			/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 
   HOWTO (R_BPF_DATA_64_PCREL,
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
+	 true,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
+	 bpf_elf_generic_reloc, /* special_function */
 	 "R_BPF_64_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
+	 false,			/* partial_inplace */
+	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+	 true),			/* pcrel_offset */
 };
 #undef AHOW
 
@@ -309,7 +312,7 @@ 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)
 {
@@ -322,11 +325,11 @@ bpf_info_to_howto (bfd *abfd, arelent *b
       _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;
+  return true;
 }
 
 /* Relocate an eBPF ELF section.
@@ -361,7 +364,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,
@@ -391,6 +394,8 @@ 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);
@@ -398,6 +403,7 @@ bpf_elf_relocate_section (bfd *output_bf
       h      = NULL;
       sym    = NULL;
       sec    = NULL;
+      where  = contents + rel->r_offset;
 
       if (r_symndx < symtab_hdr->sh_info)
 	{
@@ -411,9 +417,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,
@@ -435,13 +441,12 @@ bpf_elf_relocate_section (bfd *output_bf
         case R_BPF_INSN_DISP16:
         case R_BPF_INSN_DISP32:
           {
-            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 +465,72 @@ bpf_elf_relocate_section (bfd *output_bf
             r = bfd_reloc_ok;
             break;
           }
+	case R_BPF_DATA_8:
+	case R_BPF_DATA_16:
+	case R_BPF_DATA_32:
+	case R_BPF_DATA_64:
+	  {
+	    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_INSN_16:
+	  {
+
+	    addend = bfd_get_16 (input_bfd, where + 2);
+	    relocation += addend;
+	    bfd_put_16 (input_bfd, relocation, where + 2);
+
+	    r = bfd_reloc_ok;
+	    break;
+	  }
+        case R_BPF_INSN_32:
+          {
+            /*  Write relocated value */
+
+	    addend = bfd_get_32 (input_bfd, where + 4);
+	    relocation += addend;
+            bfd_put_32 (input_bfd, relocation, where + 4);
+
+            r = bfd_reloc_ok;
+            break;
+          }
+        case R_BPF_INSN_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 +545,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 +572,93 @@ 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;
+}
+
+/* A generic howto special function for installing BPF relocations.
+   This function will be called by the assembler (via bfd_install_relocation).
+   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;
 
-  return TRUE;
+  /* Sanity check that the address is in range.  */
+  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+    return bfd_reloc_outofrange;
+
+  /*  Get the symbol value.  */
+  if (bfd_is_com_section (symbol->section))
+    relocation = 0;
+  else
+    relocation = symbol->value;
+
+  if (symbol->flags & BSF_SECTION_SYM)
+    /* Relocation against a section symbol: add in the section base address.  */
+    relocation += BASEADDR (symbol->section);
+
+  relocation += reloc_entry->addend;
+
+  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_INSN_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 (output_bfd, (relocation & 0xFFFFFFFF), where + 4);
+      bfd_put_32 (output_bfd, (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, output_bfd, relocation,
+	       where + reloc_entry->howto->bitpos / 8);
+    }
+
+  reloc_entry->addend = relocation;
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64.c ./bfd/elf64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF 64-bit executable support for BFD.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-gen.c ./bfd/elf64-gen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-gen.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-gen.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic support for 64-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -31,32 +31,32 @@ static reloc_howto_type dummy =
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-hppa.c ./bfd/elf64-hppa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-hppa.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-hppa.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for HPPA 64-bit ELF
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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;
+	return false;
       if (bfd_bread (&sig, 4, abfd) != 4)
-	return FALSE;
+	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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-hppa.h ./bfd/elf64-hppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-hppa.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-hppa.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* ELF64/HPPA support
 
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-ia64-vms.c ./bfd/elf64-ia64-vms.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-ia64-vms.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-ia64-vms.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for OpenVMS
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -170,8 +170,9 @@ 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
 {
@@ -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,7 +366,7 @@ 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.  */
@@ -373,11 +374,11 @@ elf64_ia64_relax_section (bfd *abfd, ase
       || sec->reloc_count == 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 +387,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 +407,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 +419,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 +428,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 +443,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 +484,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 +499,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 +686,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 +698,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 +721,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 +731,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 +790,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 +820,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 +853,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 +882,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 +907,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 +944,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 +989,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 +999,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 +1085,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 +1107,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 +1125,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 +1147,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 +1166,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 +1202,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 +1228,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 +1252,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 +1266,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 +1280,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 +1301,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 +1311,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 +1322,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 +1334,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 +1575,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 +1667,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 +1835,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 +1847,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 +1873,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 +1888,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 +1898,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 +1924,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 +2077,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 +2217,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 +2229,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 +2243,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 +2266,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 +2275,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 +2304,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 +2322,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 +2339,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 +2368,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 +2397,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 +2421,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 +2429,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 +2440,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);
@@ -2570,10 +2563,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 +2582,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 +2592,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 +2609,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 +2676,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 +2692,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 +2744,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 +2765,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 +2795,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)
 				       + 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 +2836,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 +2867,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 +2913,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 +2970,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 +2989,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 +3030,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 +3088,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 +3150,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 +3162,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 +3211,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 +3277,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 +3291,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 +3308,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 +3319,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 +3346,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 +3365,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 +3385,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 +3421,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 +3431,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 +3462,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 +3501,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 +3511,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 +3566,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 +3596,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 +3629,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 +3639,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 +3650,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 +3661,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 +3685,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 +3711,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 +3744,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 +3798,7 @@ elf64_ia64_relocate_section (bfd *output
 						      symtab_hdr,
 						      sym,
 						      sym_sec));
-	      ret_val = FALSE;
+	      ret_val = false;
 	      continue;
 	    }
 	  goto finish_pcrel;
@@ -3911,7 +3904,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 +3918,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 +3989,7 @@ elf64_ia64_relocate_section (bfd *output
 		break;
 	      }
 
-	    ret_val = FALSE;
+	    ret_val = false;
 	  }
 	  break;
 	}
@@ -4005,7 +3998,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 +4009,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 +4024,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 +4055,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 +4067,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 +4178,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 +4200,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 +4251,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 +4269,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 +4278,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 +4287,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 +4296,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 +4306,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 +4331,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 +4363,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 +4371,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 +4387,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 +4402,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 +4412,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 +4453,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 +4482,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 +4498,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 +4516,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 +4590,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 +4605,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 +4652,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,29 +4692,29 @@ 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;
+    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)
@@ -4741,7 +4738,7 @@ elf64_vms_close_and_cleanup (bfd *abfd)
 
 /* 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 +4746,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 +4758,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 +4786,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 +4794,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,7 +4845,7 @@ 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;
 	}
@@ -4923,10 +4920,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 +5014,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 +5067,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 +5103,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 +5236,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 +5257,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 +5266,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 +5290,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 +5310,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 +5357,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 +5372,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 +5388,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 +5409,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-mips.c ./bfd/elf64-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-mips.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-mips.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for 64-bit ELF
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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;
@@ -137,67 +137,67 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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. */
@@ -218,75 +218,75 @@ static reloc_howto_type mips_elf64_howto
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.
@@ -295,45 +295,45 @@ static reloc_howto_type mips_elf64_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -344,135 +344,135 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -480,15 +480,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -497,15 +497,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -513,15 +513,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -537,59 +537,59 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -601,15 +601,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -617,15 +617,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -635,104 +635,104 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -741,60 +741,60 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -809,85 +809,85 @@ static reloc_howto_type mips_elf64_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
 };
 
@@ -900,67 +900,67 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -968,85 +968,85 @@ 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.
@@ -1055,45 +1055,45 @@ static reloc_howto_type mips_elf64_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -1104,135 +1104,135 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -1240,15 +1240,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1257,15 +1257,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1273,104 +1273,104 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1382,15 +1382,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1398,15 +1398,15 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -1416,104 +1416,104 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1522,60 +1522,60 @@ static reloc_howto_type mips_elf64_howto
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1590,85 +1590,85 @@ static reloc_howto_type mips_elf64_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
 };
 
@@ -1679,7 +1679,7 @@ static reloc_howto_type mips16_elf64_how
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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[] =
@@ -1895,7 +1895,7 @@ static reloc_howto_type mips16_elf64_how
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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[] =
@@ -2115,7 +2115,7 @@ static reloc_howto_type micromips_elf64_
 	 1,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -2269,90 +2269,90 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/
@@ -2366,45 +2366,45 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -2412,15 +2412,15 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -2428,15 +2428,15 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -2448,75 +2448,75 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -2526,30 +2526,30 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
 
@@ -2558,29 +2558,29 @@ static reloc_howto_type micromips_elf64_
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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[] =
@@ -2594,7 +2594,7 @@ static reloc_howto_type micromips_elf64_
 	 1,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -2748,165 +2748,165 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -2914,15 +2914,15 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -2930,15 +2930,15 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -2950,75 +2950,75 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -3028,30 +3028,30 @@ static reloc_howto_type micromips_elf64_
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
 
@@ -3060,29 +3060,29 @@ static reloc_howto_type micromips_elf64_
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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 */
@@ -3091,15 +3091,15 @@ static reloc_howto_type elf_mips_gnu_vti
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3107,15 +3107,15 @@ static reloc_howto_type elf_mips_gnu_vte
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3123,15 +3123,15 @@ static reloc_howto_type elf_mips_gnu_rel
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3139,15 +3139,15 @@ static reloc_howto_type elf_mips_gnu_rel
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3155,15 +3155,15 @@ static reloc_howto_type elf_mips_gnu_pcr
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,15 +3172,15 @@ 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 =
@@ -3188,15 +3188,15 @@ static reloc_howto_type elf_mips_jump_sl
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3204,15 +3204,15 @@ static reloc_howto_type elf_mips_eh_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,7 +3424,7 @@ 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)
@@ -3464,7 +3464,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,10 +3479,10 @@ mips_elf64_gprel16_reloc (bfd *abfd, are
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -3503,7 +3503,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,10 +3519,10 @@ 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;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -3544,7 +3544,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,10 +3561,10 @@ mips_elf64_gprel32_reloc (bfd *abfd, are
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -3634,7 +3634,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,10 +3650,10 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -3663,7 +3663,7 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     return ret;
 
   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,
@@ -3905,7 +3905,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 +3964,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 +3974,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 +3995,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 +4008,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 +4023,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 +4037,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 +4051,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;
@@ -4114,7 +4111,7 @@ 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)
 		{
@@ -4138,7 +4135,7 @@ 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;
@@ -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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-mmix.c ./bfd/elf64-mmix.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-mmix.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-mmix.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MMIX-specific support for 64-bit ELF.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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 *);
 
@@ -194,195 +194,195 @@ static reloc_howto_type elf_mmix_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,			/* 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,			/* 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
@@ -392,57 +392,57 @@ static reloc_howto_type elf_mmix_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -452,71 +452,71 @@ static reloc_howto_type elf_mmix_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -528,57 +528,57 @@ static reloc_howto_type elf_mmix_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -588,57 +588,57 @@ static reloc_howto_type elf_mmix_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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
@@ -647,30 +647,30 @@ static reloc_howto_type elf_mmix_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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.  */
@@ -678,30 +678,30 @@ static reloc_howto_type elf_mmix_howto_t
 	 0,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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
@@ -710,15 +710,15 @@ static reloc_howto_type elf_mmix_howto_t
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -729,29 +729,29 @@ static reloc_howto_type elf_mmix_howto_t
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-nfp.c ./bfd/elf64-nfp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-nfp.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-nfp.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* NFP-specific support for 64-bit ELF
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
    Contributed by Francois H. Theron <francois.theron@netronome.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -46,122 +46,122 @@ static reloc_howto_type elf_nfp_howto_ta
 	 0,			/* Rightshift.  */
 	 3,			/* Size.  */
 	 0,			/* Bitsize.  */
-	 FALSE,			/* PC_relative.  */
+	 false,			/* PC_relative.  */
 	 0,			/* Bitpos.  */
 	 complain_overflow_dont,/* Complain_on_overflow.  */
 	 elf64_nfp_reloc,	/* Special_function.  */
 	 "R_NFP_NOTYPE",	/* Name.  */
-	 FALSE,			/* Partial_inplace.  */
+	 false,			/* Partial_inplace.  */
 	 0,			/* Src_mask.  */
 	 0,			/* Dst_mask.  */
-	 FALSE),		/* PCrel_offset.  */
-  HOWTO (R_NFP_W32LE, 0, 3, 0, FALSE, 0,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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,
+	 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)
+	 false, 0, 0, false)
 };
 
-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 +188,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 +209,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 +225,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 +238,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-ppc.c ./bfd/elf64-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-ppc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-ppc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC64-specific support for 64-bit ELF.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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,9 @@
    http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
    http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
 
+/* Don't generate unused section symbols.  */
+#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS false
+
 #include "sysdep.h"
 #include <stdarg.h>
 #include "bfd.h"
@@ -59,7 +62,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"
@@ -114,7 +117,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 +128,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 +214,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 +233,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
@@ -300,101 +308,101 @@ 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, 3, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 16, 0xffff, 16, false, signed,
        ppc64_elf_unhandled_reloc),
 
   /* This is used only by the dynamic linker.  The symbol should exist
@@ -402,148 +410,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, 4, 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, 4, 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, 2, 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, 1, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 4, 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, 1, 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, 1, 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, 1, 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, 1, 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, 4, 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, 4, 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, 4, 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, 4, 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, 1, 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, 1, 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, 1, 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, 1, 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, 4, 64, 0xffffffffffffffffULL, 0, false, dont,
        ppc64_elf_toc64_reloc),
 
   /* Like R_PPC64_GOT16, but also informs the link editor that the
@@ -555,428 +563,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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_TLSGD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_TLSGD, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_TLSLD, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_TLSLD, 2, 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, 2, 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, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_PLTCALL, 2, 32, 0, 0, FALSE, dont,
+  HOW (R_PPC64_PLTCALL, 2, 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, 4, 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, 4, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 4, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 4, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 2, 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, 4, 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, 2, 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, 2, 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, 2, 32, 0, 0, false, dont,
        bfd_elf_generic_reloc),
 
-  HOW (R_PPC64_D34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_D34, 4, 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, 4, 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, 4, 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, 4, 34, 0x3ffff0000ffffULL, 34, false, dont,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_PCREL34, 4, 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, 4, 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, 4, 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, 4, 34, 0x3ffff0000ffffULL, 0, true, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, false, signed,
        ppc64_elf_unhandled_reloc),
 
-  HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_DTPREL34, 4, 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, 4, 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, 4, 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, 4, 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, 4, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 16, 0xffff, 50, true, dont,
        ppc64_elf_ha_reloc),
 
-  HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, FALSE, signed,
+  HOW (R_PPC64_D28, 4, 28, 0xfff0000ffffULL, 0, false, signed,
        ppc64_elf_prefix_reloc),
 
-  HOW (R_PPC64_PCREL28, 4, 28, 0xfff0000ffffULL, 0, TRUE, signed,
+  HOW (R_PPC64_PCREL28, 4, 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 +1006,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;
 
@@ -1279,13 +1286,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 +1324,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 +1373,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 +1382,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.  */
@@ -1432,7 +1456,7 @@ ppc64_elf_branch_reloc (bfd *abfd, arele
     {
       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
@@ -1474,7 +1498,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
@@ -1694,10 +1718,12 @@ ppc64_elf_unhandled_reloc (bfd *abfd, ar
 
   if (error_message != NULL)
     {
-      static char buf[60];
-      sprintf (buf, "generic linker can't handle %s",
-	       reloc_entry->howto->name);
-      *error_message = buf;
+      static char *message;
+      free (message);
+      if (asprintf (&message, _("generic linker can't handle %s"),
+		    reloc_entry->howto->name) < 0)
+	message = NULL;
+      *error_message = message;
     }
   return bfd_reloc_dangerous;
 }
@@ -1800,7 +1826,7 @@ struct ppc64_elf_obj_tdata
 
 /* 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 +1836,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 +1858,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 +1881,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 +1894,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 *
@@ -1994,23 +2020,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 +2060,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 +2158,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 +2196,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 +2220,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 +2302,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 +2336,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 +2349,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 +2435,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;
@@ -2408,8 +2448,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abf
 	free_contents_and_exit_err:
 	  count = -1;
 	free_contents_and_exit:
-	  if (contents)
-	    free (contents);
+	  free (contents);
 	  goto done;
 	}
 
@@ -2502,7 +2541,7 @@ 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);
@@ -2787,20 +2826,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 +2855,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
 
@@ -2843,8 +2882,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
@@ -2900,7 +2939,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,7 +2962,7 @@ 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
@@ -3062,9 +3101,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 +3147,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,6 +3221,9 @@ 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;
@@ -3204,25 +3255,17 @@ struct ppc_link_hash_table
   /* 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 every time we size stubs.  */
   unsigned int stub_iteration;
-
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
 };
 
 /* Rename some of the generic section flags to better document how they
@@ -3249,8 +3292,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 *) \
@@ -3425,7 +3469,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 +3529,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 +3546,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 +3565,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 +3576,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 +3591,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 +3600,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 +3608,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 +3619,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 +3696,37 @@ 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 calls using @notoc relocations that
+   need a stub will utilize power10 instructions in the stub, and
+   calls without @notoc relocations will not use power10 instructions.
+   The two classes of stubs are stored in separate stub_hash_table
+   entries having the same key string.  The two 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, bool notoc)
+{
+  bool have_notoc;
+
+  have_notoc = (entry->stub_type == ppc_stub_plt_call_notoc
+		|| entry->stub_type == ppc_stub_plt_branch_notoc
+		|| entry->stub_type == ppc_stub_long_branch_notoc);
+
+  if (have_notoc != notoc)
+    {
+      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 +3764,20 @@ 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)
+    {
+      bool notoc = ELF64_R_TYPE (rel->r_info) == R_PPC64_REL24_NOTOC;
+
+      stub_entry = select_alt_stub (stub_entry, notoc);
+    }
+
   return stub_entry;
 }
 
@@ -3738,7 +3820,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 */
@@ -3755,7 +3837,7 @@ ppc_add_stub (const char *stub_name,
 /* 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 +3845,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 +3859,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 +3892,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 +3939,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,20 +3966,20 @@ 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;
 
 	  /* 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;
@@ -3908,11 +3990,11 @@ ppc64_elf_copy_indirect_symbol (struct b
 	      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 got entries that we may have already seen to the
@@ -3974,8 +4056,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 +4089,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 +4105,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 +4128,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 +4153,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 +4196,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 +4219,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 +4241,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 +4251,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 +4272,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 +4304,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;
@@ -4246,7 +4334,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;
 	}
     }
 
@@ -4266,7 +4354,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 +4378,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 +4398,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 +4429,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 +4449,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 +4505,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 +4527,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,20 +4537,20 @@ 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
@@ -4479,7 +4568,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
@@ -4496,7 +4585,7 @@ is_plt_seq_reloc (enum elf_ppc64_reloc_t
    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 +4596,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;
@@ -4569,14 +4649,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,10 +4700,10 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	}
       else
 	{
-	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+	  Elf_Internal_Sym *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)
 	    {
@@ -4631,7 +4711,7 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 					     rel->r_addend,
 					     NON_GOT | PLT_IFUNC);
 	      if (ifunc == NULL)
-		return FALSE;
+		return false;
 	    }
 	}
 
@@ -4643,12 +4723,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 +4736,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 +4744,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 +4752,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 +4762,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 +4791,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 +4806,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 +4825,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 +4843,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 +4852,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 +4908,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 +4942,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:
@@ -4899,10 +4971,10 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 	      {
 		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;
 
 		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
 	      }
@@ -4926,7 +4998,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 +5020,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,15 +5056,11 @@ 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)
@@ -5003,11 +5071,11 @@ 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;
+		return false;
 	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
 	      ppc64_sec->sec_type = sec_toc;
 	    }
@@ -5023,19 +5091,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 +5116,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 +5147,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.  */
@@ -5137,10 +5207,10 @@ 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
@@ -5150,13 +5220,13 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 		  struct elf_dyn_relocs *p;
 		  struct elf_dyn_relocs **head;
 
-		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
+		  head = &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;
@@ -5174,15 +5244,15 @@ ppc64_elf_check_relocs (bfd *abfd, struc
 		     easily.  Oh well.  */
 		  struct ppc_dyn_relocs *p;
 		  struct ppc_dyn_relocs **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,
+		  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)
@@ -5198,7 +5268,7 @@ 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;
@@ -5215,26 +5285,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 +5315,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 +5324,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 +5353,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,7 +5365,7 @@ 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;
@@ -5353,7 +5423,7 @@ opd_entry_value (asection *opd_sec,
 
   relocs = ppc64_elf_tdata (opd_bfd)->opd.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 +5534,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 +5573,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 +5596,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 +5661,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 +5717,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 +5734,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 +5746,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 +5761,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 +5795,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 +5837,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 +5863,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 +5910,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 +5918,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 +5933,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 +5944,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 +5974,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 +5996,7 @@ sfpr_define (struct bfd_link_info *info,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static bfd_byte *
@@ -6054,34 +6161,112 @@ 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.  */
 
-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 +6283,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 +6299,7 @@ func_desc_adjust (struct elf_link_hash_e
 	if (ent->plt.refcount > 0)
 	  break;
       if (ent == NULL)
-	return TRUE;
+	return true;
     }
 
   /* Create a descriptor as undefined if necessary.  */
@@ -6125,7 +6310,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 +6318,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 +6336,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 +6352,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 +6372,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 +6397,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
@@ -6242,80 +6430,59 @@ ppc64_elf_func_desc_adjust (bfd *obfd AT
       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;
 
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+  for (p = 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 +6491,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 +6500,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 +6522,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 +6534,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 +6552,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 +6563,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 +6593,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 +6602,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 +6626,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 +6683,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 +6692,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 +6700,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 +6723,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 +6737,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 +6751,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 +6786,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 +6801,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 +6833,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 +6943,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 +6951,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,14 +6986,14 @@ 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
+static bool
 dec_dynrel_count (bfd_vma r_info,
 		  asection *sec,
 		  struct bfd_link_info *info,
@@ -6838,7 +7010,7 @@ dec_dynrel_count (bfd_vma r_info,
   switch (r_type)
     {
     default:
-      return TRUE;
+      return true;
 
     case R_PPC64_TOC16:
     case R_PPC64_TOC16_DS:
@@ -6847,7 +7019,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:
@@ -6910,7 +7082,7 @@ dec_dynrel_count (bfd_vma r_info,
 
       r_symndx = ELF64_R_SYM (r_info);
       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
-	return FALSE;
+	return false;
     }
 
   if ((h != NULL
@@ -6927,20 +7099,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;
+      pp = &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)
 	{
@@ -6951,7 +7123,7 @@ dec_dynrel_count (bfd_vma r_info,
 	      p->count -= 1;
 	      if (p->count == 0)
 		*pp = p->next;
-	      return TRUE;
+	      return true;
 	    }
 	  pp = &p->next;
 	}
@@ -6961,7 +7133,7 @@ dec_dynrel_count (bfd_vma r_info,
       struct ppc_dyn_relocs *p;
       struct ppc_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);
@@ -6972,7 +7144,7 @@ dec_dynrel_count (bfd_vma r_info,
       pp = (struct ppc_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)
@@ -6982,7 +7154,7 @@ dec_dynrel_count (bfd_vma r_info,
 	      p->count -= 1;
 	      if (p->count == 0)
 		*pp = p->next;
-	      return TRUE;
+	      return true;
 	    }
 	  pp = &p->next;
 	}
@@ -6992,7 +7164,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 +7173,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,7 +7192,7 @@ 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))
@@ -7047,12 +7219,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 +7251,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 +7262,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 +7284,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 +7297,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 +7347,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 +7358,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 +7377,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 +7392,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 +7420,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);
@@ -7353,7 +7523,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 +7553,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 +7566,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 +7575,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 +7591,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 +7626,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 +7663,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 +7686,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 +7726,22 @@ 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;
 
   if (abiversion (info->output_bfd) == 1)
     htab->opd_abi = 1;
@@ -7595,32 +7767,56 @@ 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));
+  tga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
+			      false, false, true);
+  htab->tls_get_addr = ppc_elf_hash_entry (tga);
+
   /* 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));
+  if (tga != NULL)
+    func_desc_adjust (tga, info);
+  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);
+  if (desc != NULL)
+    func_desc_adjust (desc, info);
+  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);
+				  false, false, true);
       if (opt != NULL)
 	func_desc_adjust (opt, info);
       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 +7825,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 +7876,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 +7929,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 +7960,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 +7976,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 +7986,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 +8012,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 +8020,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 +8034,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 +8046,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 +8071,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 +8104,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 +8120,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 +8141,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 +8158,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 +8298,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 +8346,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 +8382,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 +8404,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)
@@ -8163,13 +8471,13 @@ ppc64_elf_tls_optimize (struct bfd_link_
 			 we'll lose one or two dyn relocs.  */
 		      if (!dec_dynrel_count (rel->r_info, 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,
 						 NULL, h, sym))
-			    return FALSE;
+			    return false;
 			}
 		    }
 
@@ -8191,10 +8499,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 +8513,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 +8527,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 +8554,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 +8612,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 +8623,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 +8667,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 +8676,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 +8685,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 +8708,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 +8730,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 +8744,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;
@@ -8466,7 +8781,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;
 
@@ -8623,19 +8938,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 +9107,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 +9183,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 +9273,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);
 	    }
@@ -9001,8 +9312,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 +9363,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 +9425,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,6 +9468,9 @@ ppc64_elf_edit_toc (struct bfd_link_info
 		  || discarded_section (sym_sec))
 		continue;
 
+	      if ((h ? h->type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC)
+		continue;
+
 	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
 		continue;
 
@@ -9188,7 +9499,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 +9512,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 +9529,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 +9565,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 +9586,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
@@ -9319,14 +9630,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 +9651,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 +9679,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 +9740,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,19 +9752,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)
     {
       struct elf_dyn_relocs *p, **pp;
 
@@ -9461,7 +9784,7 @@ 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 = &h->dyn_relocs; (p = *pp) != NULL; )
 		{
 		  p->count -= p->pc_count;
 		  p->pc_count = 0;
@@ -9472,12 +9795,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,25 +9808,29 @@ 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)
+      for (p = h->dyn_relocs; p != NULL; p = p->next)
 	{
 	  asection *sreloc = elf_section_data (p->sec)->sreloc;
 	  if (eh->elf.type == STT_GNU_IFUNC)
@@ -9524,16 +9851,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)
 		  {
@@ -9582,7 +9911,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 +9927,7 @@ allocate_dynrelocs (struct elf_link_hash
       h->needs_plt = 0;
     }
 
-  return TRUE;
+  return true;
 }
 
 #define PPC_LO(v) ((v) & 0xffff)
@@ -9612,7 +9941,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 +9950,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 +10008,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)
@@ -9892,7 +10194,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,7 +10218,7 @@ 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)
@@ -9943,12 +10245,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 +10294,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 +10311,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 +10323,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 +10332,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 +10345,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 +10355,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,34 +10381,35 @@ 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);
 }
@@ -10210,7 +10515,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 +10694,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 +10776,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 +10787,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 +10798,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 +10904,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 (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);
-	}
+      if (htab->params->power10_stubs != 0)
+	size = 8 + size_power10_offset (off, odd);
       else
 	size = 8 + size_offset (off - 8);
       if (stub_entry->stub_type > ppc_stub_plt_call_notoc)
 	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
     {
-      size += 4;
-      if (htab->params->plt_static_chain)
+      size = 12;
+      if (ALWAYS_EMIT_R2SAVE
+	  || stub_entry->stub_type == ppc_stub_plt_call_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->stub_type == ppc_stub_plt_call_r2save
+	      || stub_entry->stub_type == ppc_stub_plt_call_both)
+	    size += 4;
+	}
+      else
+	{
+	  size += 7 * 4;
+	  if (stub_entry->stub_type == ppc_stub_plt_call_r2save
+	      || stub_entry->stub_type == ppc_stub_plt_call_both)
+	    size += 6 * 4;
+	}
     }
   return size;
 }
@@ -10661,7 +10972,8 @@ plt_stub_size (struct ppc_link_hash_tabl
 static inline unsigned int
 plt_stub_pad (struct ppc_link_hash_table *htab,
 	      struct ppc_stub_hash_entry *stub_entry,
-	      bfd_vma plt_off)
+	      bfd_vma plt_off,
+	      unsigned int odd)
 {
   int stub_align;
   unsigned stub_size;
@@ -10676,7 +10988,7 @@ plt_stub_pad (struct ppc_link_hash_table
     }
 
   stub_align = 1 << -htab->params->plt_stub_align;
-  stub_size = plt_stub_size (htab, stub_entry, plt_off);
+  stub_size = plt_stub_size (htab, stub_entry, plt_off, odd);
   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));
@@ -10691,20 +11003,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;
@@ -10863,70 +11175,149 @@ 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->stub_type == ppc_stub_plt_call_r2save
+	   || stub_entry->stub_type == ppc_stub_plt_call_both)
+    {
+      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->stub_type == ppc_stub_plt_call_r2save
+	  || stub_entry->stub_type == ppc_stub_plt_call_both)
+	{
+	  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->stub_type == ppc_stub_plt_call_r2save
+	   || stub_entry->stub_type == ppc_stub_plt_call_both)
+    {
+      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->stub_type == ppc_stub_plt_call_r2save
+	       || stub_entry->stub_type == ppc_stub_plt_call_both)
+	{
+	  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;
 }
@@ -10965,7 +11356,7 @@ get_relocs (asection *sec, int count)
    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 +11380,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 +11391,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 +11406,7 @@ use_global_in_relocs (struct ppc_link_ha
 	r->r_addend -= symval;
       --r;
     }
-  return TRUE;
+  return true;
 }
 
 static bfd_vma
@@ -11055,13 +11444,14 @@ get_r2off (struct bfd_link_info *info,
   return r2off;
 }
 
-static bfd_boolean
+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,14 +11459,34 @@ 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;
   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 != 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 group %pA target %pA to an "
+			      "output section. Retry without "
+			      "--enable-non-contiguous-regions.\n"),
+			    stub_entry->group->stub_sec,
+			    stub_entry->target_section);
+
   htab = ppc_hash_table (info);
   if (htab == NULL)
-    return FALSE;
+    return false;
 
   BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
@@ -11099,32 +11509,31 @@ ppc_build_one_stub (struct bfd_hash_entr
       off = targ - off;
 
       p = loc;
+      obfd = htab->params->stub_bfd;
       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
 	{
 	  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,21 +11541,21 @@ 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;
 
@@ -11154,13 +11563,13 @@ ppc_build_one_stub (struct bfd_hash_entr
     case ppc_stub_plt_branch_r2off:
       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
@@ -11197,7 +11606,7 @@ ppc_build_one_stub (struct bfd_hash_entr
 	    {
 	      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,15 +11633,15 @@ 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;
@@ -11250,19 +11659,17 @@ ppc_build_one_stub (struct bfd_hash_entr
 	}
 
       p = loc;
+      obfd = htab->params->stub_bfd;
       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
 	{
 	  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,40 +11677,36 @@ 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;
 
@@ -11317,12 +11720,23 @@ ppc_build_one_stub (struct bfd_hash_entr
       off = (stub_entry->stub_offset
 	     + stub_entry->group->stub_sec->output_offset
 	     + stub_entry->group->stub_sec->output_section->vma);
+      obfd = htab->params->stub_bfd;
+      is_tga = ((stub_entry->stub_type == ppc_stub_plt_call_notoc
+		 || stub_entry->stub_type == ppc_stub_plt_call_both)
+		&& 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->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)
 	{
 	  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)
@@ -11332,9 +11746,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;
@@ -11352,20 +11764,42 @@ ppc_build_one_stub (struct bfd_hash_entr
 
       relp = p;
       num_rel = 0;
-      if (htab->powerxx_stubs)
+      if (htab->params->power10_stubs != 0)
 	{
-	  bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
-	  p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load);
+	  bool load = stub_entry->stub_type >= ppc_stub_plt_call_notoc;
+	  p = build_power10_offset (obfd, p, off, odd, load);
 	}
       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,
+	  p = build_offset (obfd, p, off,
 			    stub_entry->stub_type >= ppc_stub_plt_call_notoc);
 	}
 
@@ -11377,22 +11811,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 (htab->params->power10_stubs != 0)
+	    num_rel += num_relocs_for_power10_offset (off, odd);
 	  else
 	    {
 	      num_rel += num_relocs_for_offset (off);
@@ -11400,9 +11836,9 @@ 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 (htab->params->power10_stubs != 0)
+	    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
@@ -11415,36 +11851,9 @@ 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:
@@ -11469,9 +11878,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 +11900,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 +11914,34 @@ 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);
+      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);
       break;
 
     case ppc_stub_save_res:
-      return TRUE;
+      return true;
 
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
@@ -11554,13 +11968,13 @@ ppc_build_one_stub (struct bfd_hash_entr
       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 + 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 +11989,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;
@@ -11598,7 +12012,26 @@ 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 group %pA target %pA to an "
+			      "output section. Retry without "
+			      "--enable-non-contiguous-regions.\n"),
+			    stub_entry->group->stub_sec,
+			    stub_entry->target_section);
 
   /* Make a note of the offset within the stubs for this entry.  */
   stub_entry->stub_offset = stub_entry->group->stub_sec->size;
@@ -11612,7 +12045,7 @@ ppc_size_one_stub (struct bfd_hash_entry
 	 functions.  Instead, emit copies of the functions.  */
       stub_entry->group->needs_save_res = 1;
       stub_entry->stub_type = ppc_stub_save_res;
-      return TRUE;
+      return true;
     }
 
   switch (stub_entry->stub_type)
@@ -11640,8 +12073,8 @@ ppc_size_one_stub (struct bfd_hash_entry
 	  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)
@@ -11663,13 +12096,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)
@@ -11749,16 +12182,16 @@ ppc_size_one_stub (struct bfd_hash_entry
       if (info->emitrelocations)
 	{
 	  unsigned int num_rel;
-	  if (htab->powerxx_stubs)
-	    num_rel = num_relocs_for_powerxx_offset (off, odd);
+	  if (htab->params->power10_stubs != 0)
+	    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);
+      if (htab->params->power10_stubs != 0)
+	extra = size_power10_offset (off, odd);
       else
 	extra = size_offset (off - 8);
       /* Include branch insn plus those in the offset sequence.  */
@@ -11768,7 +12201,7 @@ ppc_size_one_stub (struct bfd_hash_entry
 	 calculated.  */
       off -= extra;
 
-      if (!htab->powerxx_stubs)
+      if (htab->params->power10_stubs == 0)
 	{
 	  /* After the bcl, lr has been modified so we need to emit
 	     .eh_frame info saying the return address is in r12.  */
@@ -11796,19 +12229,25 @@ ppc_size_one_stub (struct bfd_hash_entry
 
     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);
+      lr_used = 0;
+      if (stub_entry->h != NULL
+	  && is_tls_get_addr (&stub_entry->h->elf, htab)
+	  && htab->params->tls_get_addr_opt)
+	{
+	  lr_used += 7 * 4;
+	  if (!htab->params->no_tls_get_addr_regsave)
+	    lr_used += 11 * 4;
+	  else if (stub_entry->stub_type == ppc_stub_plt_call_both)
+	    lr_used += 2 * 4;
+	}
       if (stub_entry->stub_type == ppc_stub_plt_call_both)
-	off += 4;
+	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 +12255,41 @@ ppc_size_one_stub (struct bfd_hash_entry
 	    plt = htab->pltlocal;
 	}
       targ += plt->output_offset + plt->output_section->vma;
+      off = (stub_entry->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)
 	{
-	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
+	  unsigned pad = plt_stub_pad (htab, stub_entry, off, odd);
 
 	  stub_entry->group->stub_sec->size += pad;
 	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
 	  off -= pad;
+	  odd ^= pad & 4;
 	}
 
       if (info->emitrelocations)
 	{
 	  unsigned int num_rel;
-	  if (htab->powerxx_stubs)
-	    num_rel = num_relocs_for_powerxx_offset (off, odd);
+	  if (htab->params->power10_stubs != 0)
+	    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);
+      size = plt_stub_size (htab, stub_entry, off, odd);
 
-      if (!htab->powerxx_stubs)
+      if (htab->params->power10_stubs == 0)
 	{
 	  /* 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_entry->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,6 +12297,30 @@ 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 ((stub_entry->stub_type == ppc_stub_plt_call_notoc
+	   || stub_entry->stub_type == ppc_stub_plt_call_both)
+	  && 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_entry->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_entry->stub_offset + size - 4;
+	    }
+	  else if (stub_entry->stub_type == ppc_stub_plt_call_both)
+	    {
+	      lr_used = stub_entry->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_entry->stub_offset + size - 4;
+	    }
+	}
       break;
 
     case ppc_stub_plt_call:
@@ -11863,9 +12329,7 @@ ppc_size_one_stub (struct bfd_hash_entry
       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;
@@ -11880,7 +12344,7 @@ ppc_size_one_stub (struct bfd_hash_entry
 
       if (htab->params->plt_stub_align != 0)
 	{
-	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
+	  unsigned pad = plt_stub_pad (htab, stub_entry, off, 0);
 
 	  stub_entry->group->stub_sec->size += pad;
 	  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
@@ -11897,38 +12361,41 @@ ppc_size_one_stub (struct bfd_hash_entry
 	  stub_entry->group->stub_sec->flags |= SEC_RELOC;
 	}
 
-      size = plt_stub_size (htab, stub_entry, off);
+      size = plt_stub_size (htab, stub_entry, off, 0);
 
       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)
 	{
-	  /* 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_entry->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_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 = stub_entry->stub_offset + size - 4;
 	}
       break;
 
     default:
       BFD_FAIL ();
-      return FALSE;
+      return false;
     }
 
   stub_entry->group->stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 /* Set up various things so that we can make a list of input sections
@@ -11939,7 +12406,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 +12441,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 +12487,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 +12511,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 +12586,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;
 		}
 	    }
@@ -12257,7 +12724,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;
 }
 
@@ -12349,7 +12816,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 +12865,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 +12927,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 +12964,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 +12994,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 +13004,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 +13027,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,10 +13043,10 @@ 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")
@@ -12594,20 +13060,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 +13081,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 +13097,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 +13135,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 +13176,7 @@ group_sections (struct bfd_link_info *in
 	  tail = prev;
 	}
     }
-  return TRUE;
+  return true;
 }
 
 static const unsigned char glink_eh_frame_cie[] =
@@ -12754,15 +13220,18 @@ maybe_strip_output (struct bfd_link_info
    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 +13271,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,7 +13284,41 @@ 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
@@ -12890,7 +13393,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		  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;
@@ -12922,9 +13425,9 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		  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;
+		  hash = ppc_elf_hash_entry (h);
 
-		  ok_dest = FALSE;
+		  ok_dest = false;
 		  fdh = NULL;
 		  sym_value = 0;
 		  if (hash == NULL)
@@ -12932,14 +13435,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 +13460,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 +13501,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;
@@ -13041,10 +13544,10 @@ 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))
@@ -13058,8 +13561,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
 		  if (stub_type != ppc_stub_plt_call
 		      && stub_type != ppc_stub_plt_call_notoc
 		      && 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,7 +13571,8 @@ 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;
 		    }
 
@@ -13101,10 +13604,11 @@ 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
@@ -13112,6 +13616,39 @@ ppc64_elf_size_stubs (struct bfd_link_in
 			 upgrading from plt_call to plt_call_r2save or
 			 from long_branch to long_branch_r2off.  */
 		      free (stub_name);
+		      if (htab->params->power10_stubs == -1)
+			{
+			  /* For --power10-stubs=auto, don't merge _notoc
+			     and other varieties of stubs.  (The _both
+			     variety won't be created.)  */
+			  bool notoc = r_type == R_PPC64_REL24_NOTOC;
+			  struct ppc_stub_hash_entry *alt_stub
+			    = select_alt_stub (stub_entry, notoc);
+
+			  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)
+				{
+				  /* xgettext:c-format */
+				  _bfd_error_handler
+				    (_("%pB: cannot create stub entry %s"),
+				     section->owner, stub_entry->root.string);
+				  goto error_ret_free_internal;
+				}
+			      *alt_stub = *stub_entry;
+			      stub_entry->root.next = &alt_stub->root;
+			      if (notoc)
+				/* Sort notoc stubs first, for no good
+				   reason.  */
+				alt_stub = stub_entry;
+			      alt_stub->stub_type = stub_type;
+			    }
+			  stub_entry = alt_stub;
+			}
 		      old_type = stub_entry->stub_type;
 		      switch (old_type)
 			{
@@ -13181,11 +13718,10 @@ 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;
@@ -13246,6 +13782,14 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	      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)
@@ -13309,7 +13853,9 @@ ppc64_elf_size_stubs (struct bfd_link_in
 	      || (htab->stub_iteration > STUB_SHRINK_ITER
 		  && htab->brlt->rawsize > htab->brlt->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;
 
       /* Ask the linker to do its stuff.  */
@@ -13330,7 +13876,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 +13931,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 +13951,12 @@ 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);
 
-  return TRUE;
+  return true;
 }
 
 /* Called after we have determined section placement.  If sections
@@ -13425,24 +13973,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 +14063,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 +14072,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 +14081,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 +14097,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 +14107,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
@@ -13581,10 +14127,7 @@ build_global_entry_stubs_and_plt (struct
 		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)
 	      {
@@ -13618,20 +14161,20 @@ 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;
+	      htab->elf.ifunc_resolvers = true;
 	    bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc);
 	  }
       }
 
   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 +14186,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 +14202,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 +14212,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 +14244,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);
@@ -13747,21 +14289,18 @@ write_plt_relocs_for_local_syms (struct
 	      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;
 		}
@@ -13817,14 +14356,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 +14442,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 +14455,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 +14470,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 +14493,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 +14528,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,25 +14623,43 @@ 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.  */
@@ -14030,7 +14692,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 +14719,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,7 +14738,7 @@ 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;
@@ -14095,53 +14757,57 @@ ppc64_elf_build_stubs (struct bfd_link_i
 
   if (group != NULL)
     {
-      htab->stub_error = TRUE;
+      htab->stub_error = true;
       _bfd_error_handler (_("stubs don't match calculated size"));
     }
 
   if (htab->stub_error)
-    return FALSE;
+    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\n",
+			      "linker stubs in %u groups\n",
+			      stub_sec_count),
+		    stub_sec_count) < 0)
+	*stats = NULL;
+      else
+	{
+	  if (asprintf (stats, _("%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"),
+			groupmsg,
+			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]) < 0)
+	    *stats = NULL;
+	  free (groupmsg);
+	}
     }
-  return TRUE;
+  return true;
 }
 
 /* What to do when ld finds relocations against symbols defined in
@@ -14164,7 +14830,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 +14881,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 +14917,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 +14937,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 +14950,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 +14986,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 +15019,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 +15055,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 +15091,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 +15120,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 +15150,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;
@@ -14537,7 +15203,7 @@ ppc64_elf_relocate_section (bfd *output_
 
 	case R_PPC64_LO_DS_OPT:
 	  insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset);
-	  if ((insn & (0x3f << 26)) != 58u << 26)
+	  if ((insn & (0x3fu << 26)) != 58u << 26)
 	    abort ();
 	  insn += (14u << 26) - (58u << 26);
 	  bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset);
@@ -14557,7 +15223,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)
 	      {
@@ -14629,7 +15295,7 @@ 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)
 	    {
@@ -14679,7 +15345,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;
@@ -14746,8 +15412,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 +15427,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);
@@ -14820,7 +15488,7 @@ ppc64_elf_relocate_section (bfd *output_
 	    }
 	  break;
 
-	case R_PPC64_GOT_TLSGD34:
+	case R_PPC64_GOT_TLSGD_PCREL34:
 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
 	    {
 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
@@ -14830,7 +15498,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,7 +15514,7 @@ ppc64_elf_relocate_section (bfd *output_
 	    }
 	  break;
 
-	case R_PPC64_GOT_TLSLD34:
+	case R_PPC64_GOT_TLSLD_PCREL34:
 	  if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
 	    {
 	      pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset);
@@ -15165,20 +15833,21 @@ ppc64_elf_relocate_section (bfd *output_
 		  || stub_entry->stub_type == ppc_stub_long_branch_r2off
 		  || stub_entry->stub_type == ppc_stub_long_branch_both))
 	    {
-	      bfd_boolean can_plt_call = FALSE;
+	      bool can_plt_call = false;
 
 	      if (stub_entry->stub_type == ppc_stub_plt_call
 		  && !htab->opd_abi
 		  && htab->params->plt_localentry0 != 0
+		  && h != NULL
 		  && is_elfv2_localentry0 (&h->elf))
 		{
 		  /* The function doesn't use or change r2.  */
-		  can_plt_call = TRUE;
+		  can_plt_call = true;
 		}
 	      else if (r_type == R_PPC64_REL24_NOTOC)
 		{
 		  /* NOTOC calls don't need to restore r2.  */
-		  can_plt_call = TRUE;
+		  can_plt_call = true;
 		}
 
 	      /* All of these stubs may modify r2, so there must be a
@@ -15197,14 +15866,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 +15881,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 +15893,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,10 +15921,10 @@ 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)
@@ -15276,13 +15944,13 @@ 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;
+		unresolved_reloc = false;
 	    }
 
 	  if ((stub_entry == NULL
@@ -15294,7 +15962,7 @@ ppc64_elf_relocate_section (bfd *output_
 	      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;
@@ -15364,23 +16032,25 @@ 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 ((((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)
+		   && rel + 1 < relend
+		   && rel[1].r_offset == rel->r_offset + 4
+		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
+		  || ((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))
+		{
+		  /* Skip over the r2 store at the start of the stub.  */
+		  if (!(stub_entry->stub_type >= ppc_stub_plt_call
+			&& htab->params->tls_get_addr_opt
+			&& h != NULL
+			&& is_tls_get_addr (&h->elf, htab)))
+		    relocation += 4;
+		}
 
 	      if (r_type == R_PPC64_REL24_NOTOC
 		  && (stub_entry->stub_type == ppc_stub_plt_call_notoc
@@ -15429,12 +16099,18 @@ 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
+	      || !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)))
 	    {
 	      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 +16122,27 @@ 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
+	      || !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)))
 	    {
 	      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 +16151,41 @@ 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
+	      || !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))))
+	    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 = rel->r_offset;
 	      pinsn = bfd_get_32 (input_bfd, contents + offset);
@@ -15502,43 +16195,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 (off2 + 4 <= input_section->size)
 		    {
-		      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 (off2 + 8 > input_section->size)
+			    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 +16243,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 +16265,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 +16273,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 +16281,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 +16289,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 +16311,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 +16329,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 +16368,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 +16378,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 +16387,9 @@ 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)))))
 		  relgot = ppc64_elf_tdata (ent->owner)->relgot;
 		if (relgot != NULL)
 		  {
@@ -15801,10 +16488,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 +16510,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 +16533,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 +16555,7 @@ ppc64_elf_relocate_section (bfd *output_
 			  relocation -= got;
 			}
 		      addend = 0;
-		      unresolved_reloc = FALSE;
+		      unresolved_reloc = false;
 		      break;
 		    }
 	      }
@@ -15887,7 +16572,7 @@ 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;
 	  goto dodyn;
 
 	  /* TOC16 relocs.  We want the offset relative to the TOC base,
@@ -16058,14 +16743,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 +16759,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 +16786,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 +16815,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 +16831,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 +16847,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
 			{
@@ -16223,10 +16909,8 @@ ppc64_elf_relocate_section (bfd *output_
 		  : 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 (indx == 0 || is_static_defined (&h->elf))
+		    htab->elf.ifunc_resolvers = true;
 		}
 	      if (sreloc == NULL)
 		abort ();
@@ -16248,7 +16932,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 +16941,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 +16987,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;
 	}
 
@@ -16353,7 +17037,7 @@ ppc64_elf_relocate_section (bfd *output_
 	case R_PPC64_PLTSEQ:
 	  if (unresolved_reloc)
 	    {
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	      goto nop_it;
 	    }
 	  break;
@@ -16368,7 +17052,7 @@ ppc64_elf_relocate_section (bfd *output_
 	      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 +17060,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.  */
@@ -16401,7 +17085,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.  */
@@ -16418,10 +17102,10 @@ ppc64_elf_relocate_section (bfd *output_
 	    {
 	      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
@@ -16437,19 +17121,8 @@ ppc64_elf_relocate_section (bfd *output_
 	  if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000)
 	    {
 	      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;
 
@@ -16547,8 +17220,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 +17235,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 +17257,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
@@ -16597,15 +17270,15 @@ ppc64_elf_relocate_section (bfd *output_
 	  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,10 +17299,10 @@ 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:
@@ -16715,11 +17388,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 +17400,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)
@@ -16771,7 +17442,7 @@ ppc64_elf_relocate_section (bfd *output_
       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
       ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
       if (rel == NULL)
-	return FALSE;
+	return false;
       memcpy (rel, relocs, amt);
     }
   return ret;
@@ -16812,7 +17483,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 +17494,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)
@@ -16863,9 +17534,7 @@ ppc64_elf_finish_dynamic_symbol (bfd *ou
       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)
@@ -16877,7 +17546,7 @@ ppc64_elf_finish_dynamic_symbol (bfd *ou
       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Used to decide how to sort relocs in an optimal manner for the
@@ -16910,7 +17579,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 +17589,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 +17662,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 +17704,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 +17713,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 +17722,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 +17741,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 +17749,10 @@ 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;
 }
 
 #include "elf64-target.h"
@@ -17095,7 +17760,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-ppc.h ./bfd/elf64-ppc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-ppc.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-ppc.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC64-specific support for 64-bit ELF.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-s390.c ./bfd/elf64-s390.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-s390.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-s390.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Contributed Martin Schwidefsky (schwidefsky@de.ibm.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -46,147 +46,147 @@ static reloc_howto_type elf_howto_table[
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = 2 byte, 2 = 4 byte) */
 	 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, 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),
   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, 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),
   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, 4, 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, 4, 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, 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),
   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, 2, 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, 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),
 };
 
 /* 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,4,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,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,
@@ -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)
     {
@@ -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.  */
@@ -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;
@@ -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)
@@ -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,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 && 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.  */
@@ -1998,56 +1914,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 (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;
-	    }
-	}
-    }
-#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 +1970,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 +1990,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 +2013,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 +2025,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 +2034,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 +2044,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 +2096,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 +2155,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 +2173,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 +2256,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 +2282,7 @@ elf_s390_relocate_section (bfd *output_b
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -2495,7 +2365,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 +2398,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 +2427,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 +2447,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 +2558,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 +2603,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 +2615,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
 			{
@@ -2913,7 +2783,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
 	    {
@@ -2951,7 +2821,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_LDM64:
@@ -2989,7 +2859,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:
@@ -3066,7 +2936,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 +2953,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,7 +2970,7 @@ 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))
 		{
@@ -3130,7 +3000,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,. */
@@ -3201,7 +3071,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 +3087,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 +3184,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 +3195,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 +3327,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 +3343,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 +3397,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 +3440,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 +3452,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 +3547,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 +3571,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 +3586,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 +3600,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 +3620,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 +3649,7 @@ elf_s390_grok_psinfo (bfd *abfd, Elf_Int
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -3855,11 +3726,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 +3755,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 +3778,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 +3806,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-sparc.c ./bfd/elf64-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-sparc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-sparc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 64-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -66,10 +66,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 +79,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 +161,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 +181,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 +202,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 +213,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 +222,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 +242,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 +286,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;
@@ -323,7 +318,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 +370,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 +408,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 +418,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 +454,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 +477,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 +487,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 +500,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 +510,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 +523,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 +549,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 +570,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 +599,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 +612,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 +649,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 +675,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 +697,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 +716,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 +728,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 +736,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 +751,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 +1004,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-tilegx.c ./bfd/elf64-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-tilegx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-tilegx.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-tilegx.h ./bfd/elf64-tilegx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-tilegx.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-tilegx.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-x86-64.c ./bfd/elf64-x86-64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf64-x86-64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf64-x86-64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* X86-64 specific support for ELF
-   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
    Contributed by Jan Hubicka <jh@suse.cz>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -20,7 +20,6 @@
    MA 02110-1301, USA.  */
 
 #include "elfxx-x86.h"
-#include "elf-nacl.h"
 #include "dwarf2.h"
 #include "libiberty.h"
 
@@ -45,134 +44,132 @@
    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, 3, 0, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_NONE",	false, 0, 0x00000000,
+	false),
+  HOWTO(R_X86_64_64, 0, 4, 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, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_GOT32, 0, 2, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOT32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_PLT32, 0, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PLT32", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_COPY, 0, 2, 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, 4, 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, 4, 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, 4, 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, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_32, 0, 2, 32, false, 0, complain_overflow_unsigned,
+	bfd_elf_generic_reloc, "R_X86_64_32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_32S, 0, 2, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_32S", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_16, 0, 1, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_16", false, 0, 0xffff, false),
+  HOWTO(R_X86_64_PC16, 0, 1, 16, true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0, 0xffff, true),
+  HOWTO(R_X86_64_8, 0, 0, 8, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_8", false, 0, 0xff, false),
+  HOWTO(R_X86_64_PC8, 0, 0, 8, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC8", false, 0, 0xff, true),
+  HOWTO(R_X86_64_DTPMOD64, 0, 4, 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, 4, 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, 4, 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, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_TLSGD", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_TLSLD, 0, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_TLSLD", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_DTPOFF32, 0, 2, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_DTPOFF32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_GOTTPOFF, 0, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTTPOFF", false, 0, 	0xffffffff,
+	true),
+  HOWTO(R_X86_64_TPOFF32, 0, 2, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_TPOFF32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_PC64, 0, 4, 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, 4, 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, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPC32", false, 0, 0xffffffff,
+	true),
+  HOWTO(R_X86_64_GOT64, 0, 4, 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, 4, 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, 4, 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, 4, 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, 4, 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, 2, 32, false, 0, complain_overflow_unsigned,
+	bfd_elf_generic_reloc, "R_X86_64_SIZE32", false, 0, 0xffffffff,
+	false),
+  HOWTO(R_X86_64_SIZE64, 0, 4, 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, 2, 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, 3, 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,
-	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),
+	false, 0, 0, false),
+  HOWTO(R_X86_64_TLSDESC, 0, 4, 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, 4, 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, 4, 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, 2, 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, 2, 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, 2, 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, 2, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_REX_GOTPCRELX", 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
@@ -182,23 +179,20 @@ static reloc_howto_type x86_64_elf_howto
 #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, 4, 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, 4, 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, 2, 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)		\
@@ -337,7 +331,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 +340,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 +355,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,13 +391,13 @@ 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 */
 	elf_tdata (abfd)->core->pid
@@ -435,7 +429,7 @@ elf_x86_64_grok_psinfo (bfd *abfd, Elf_I
       command[n - 1] = '\0';
   }
 
-  return TRUE;
+  return true;
 }
 
 #ifdef CORE_HEADER
@@ -988,33 +982,27 @@ 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 +1015,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 +1029,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 +1066,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 +1090,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 +1132,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 +1150,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)
@@ -1202,58 +1190,73 @@ 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;
 	}
 
       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_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;
 
       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 +1266,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,17 +1276,17 @@ 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)
     {
@@ -1331,12 +1334,12 @@ 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;
+    return true;
 
   /* Check if the transition can be performed.  */
   if (check
@@ -1351,7 +1354,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 +1369,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 +1381,18 @@ 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 +1461,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 +1483,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,14 +1506,15 @@ 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;
+    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);
@@ -1530,7 +1536,7 @@ elf_x86_64_convert_load_reloc (bfd *abfd
 	 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 +1550,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 +1585,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 +1602,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 +1645,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)".  */
@@ -1713,6 +1729,9 @@ convert:
 
       if (opcode == 0x8b)
 	{
+	  if (abs_symbol && local_ref && relocx)
+	    to_reloc_pc32 = false;
+
 	  if (to_reloc_pc32)
 	    {
 	      /* Convert "mov foo@GOTPCREL(%rip), %reg" to
@@ -1750,7 +1769,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)
@@ -1772,7 +1791,22 @@ convert:
 	     overflow when sign-extending imm32 to imm64.  */
 	  r_type = (rex & REX_W) != 0 ? R_X86_64_32S : R_X86_64_32;
 
-rewrite_modrm_rex:
+	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;
+		}
+	    }
+
 	  bfd_put_8 (abfd, modrm, contents + roff - 1);
 
 	  if (rex)
@@ -1793,16 +1827,16 @@ 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.  */
 
-static bfd_boolean
+static bool
 elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
 			 asection *sec,
 			 const Elf_Internal_Rela *relocs)
@@ -1814,25 +1848,16 @@ elf_x86_64_check_relocs (bfd *abfd, stru
   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,13 +1868,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;
+  converted = false;
 
   sreloc = NULL;
 
@@ -1862,8 +1887,9 @@ 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);
@@ -1879,7 +1905,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 +1914,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;
 
@@ -1952,7 +1978,7 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	  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)
@@ -1965,18 +1991,22 @@ 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)
@@ -2014,12 +2044,26 @@ 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:
+		tls_type = GOT_TLS_IE;
+		break;
 	      case R_X86_64_GOTPC32_TLSDESC:
 	      case R_X86_64_TLSDESC_CALL:
-		tls_type = GOT_TLS_GDESC; break;
+		tls_type = GOT_TLS_GDESC;
+		break;
 	      }
 
 	    if (h != NULL)
@@ -2132,7 +2176,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:
@@ -2164,7 +2208,7 @@ elf_x86_64_check_relocs (bfd *abfd, stru
 	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 +2218,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)
 		{
@@ -2206,7 +2250,7 @@ pointer:
 			  || (!ABI_64_P (abfd)
 			      && (r_type == R_X86_64_32
 				  || r_type == R_X86_64_32S))))
-		    func_pointer_ref = TRUE;
+		    func_pointer_ref = true;
 		}
 
 	      if (!func_pointer_ref)
@@ -2228,10 +2272,11 @@ pointer:
 		}
 	    }
 
-	  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 (info, true, h, sec, r_type,
+					    htab->pointer_r_type))
 	    {
 	      struct elf_dyn_relocs *p;
 	      struct elf_dyn_relocs **head;
@@ -2243,7 +2288,7 @@ do_size:
 		{
 		  sreloc = _bfd_elf_make_dynamic_reloc_section
 		    (sec, htab->elf.dynobj, ABI_64_P (abfd) ? 3 : 2,
-		     abfd, /*rela?*/ TRUE);
+		     abfd, /*rela?*/ true);
 
 		  if (sreloc == NULL)
 		    goto error_return;
@@ -2252,7 +2297,7 @@ do_size:
 	      /* 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 +2306,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 +2324,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));
@@ -2334,13 +2379,13 @@ 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;
 }
 
 /* Return the relocation value for @tpoff relocation
@@ -2364,7 +2409,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 +2428,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.  */
   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 +2452,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 +2466,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 +2501,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 +2516,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 +2527,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,
@@ -2663,7 +2710,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 +2722,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 +2734,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 +2748,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 +2784,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
 		    {
@@ -2773,7 +2825,7 @@ do_ifunc_pointer:
 	    }
 	}
 
-skip_ifunc:
+    skip_ifunc:
       resolved_to_zero = (eh != NULL
 			  && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
 
@@ -2797,7 +2849,7 @@ skip_ifunc:
 	  if (htab->elf.sgot == NULL)
 	    abort ();
 
-	  relative_reloc = FALSE;
+	  relative_reloc = false;
 	  if (h != NULL)
 	    {
 	      off = h->got.offset;
@@ -2840,12 +2892,12 @@ skip_ifunc:
 			  /* 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 +2917,15 @@ 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.  */
+		  if (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)))
+		    relative_reloc = true;
 		}
 	    }
 
@@ -2886,6 +2945,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);
 	    }
 
@@ -2939,7 +3004,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 +3020,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 +3038,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 +3070,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
@@ -3032,7 +3097,7 @@ skip_ifunc:
 	      break;
 	    }
 
-use_plt:
+	use_plt:
 	  if (h->plt.offset != (bfd_vma) -1)
 	    {
 	      if (htab->plt_second != NULL)
@@ -3056,7 +3121,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:
@@ -3097,7 +3162,7 @@ use_plt:
 			   && !(h->root.u.def.section->flags & SEC_CODE))))
 		  || 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
@@ -3110,7 +3175,7 @@ use_plt:
 		     from non-code sections.  */
 		  if (h->type == STT_FUNC
 		      && (sec->flags & SEC_CODE) != 0)
-		    fail = TRUE;
+		    fail = true;
 		}
 	      else if (no_copyreloc_p || bfd_link_dll (info))
 		{
@@ -3147,7 +3212,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;
 
@@ -3160,27 +3225,28 @@ direct:
 				    && (X86_PCREL_TYPE_P (r_type)
 					|| X86_SIZE_TYPE_P (r_type)));
 
-	  if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type,
+	  if (GENERATE_DYNAMIC_RELOCATION_P (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;
 	      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);
@@ -3202,17 +3268,19 @@ direct:
 		      || (r_type == R_X86_64_32
 			  && htab->params->no_reloc_overflow_check))
 		    {
-		      relocate = TRUE;
+		      relocate = true;
 		      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 +3301,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 +3313,7 @@ direct:
 		      else if (sec == NULL || sec->owner == NULL)
 			{
 			  bfd_set_error (bfd_error_bad_value);
-			  return FALSE;
+			  return false;
 			}
 		      else
 			{
@@ -3279,6 +3347,12 @@ direct:
 		  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
@@ -3306,8 +3380,8 @@ 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)
 	    {
@@ -3358,11 +3432,11 @@ direct:
 			  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"
@@ -3401,10 +3475,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 +3489,8 @@ 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),
@@ -3426,11 +3504,30 @@ 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)
+		    {
+		      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 if (r_type == R_X86_64_GOTTPOFF)
@@ -3537,7 +3634,7 @@ corrupt_input:
 		  continue;
 		}
 	      else
-		BFD_ASSERT (FALSE);
+		BFD_ASSERT (false);
 	    }
 
 	  if (htab->elf.sgot == NULL)
@@ -3649,7 +3746,7 @@ corrupt_input:
 	      else
 		relocation = htab->elf.sgot->output_section->vma
 		  + htab->elf.sgot->output_offset + off;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -3741,13 +3838,18 @@ corrupt_input:
 		{
 		  /* 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 +3870,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 +3908,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 +4029,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:
@@ -3965,16 +4086,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 +4108,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 +4118,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 +4137,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 +4165,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,6 +4317,11 @@ 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--;
 	    }
@@ -4234,7 +4365,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 +4439,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
     {
       Elf_Internal_Rela rela;
       asection *relgot = htab->elf.srelgot;
+      const char *relative_reloc_name = NULL;
 
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
@@ -4346,6 +4478,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,30 +4513,36 @@ 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);
+	  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;
 	}
 
+      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);
     }
 
@@ -4427,13 +4566,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 +4588,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 +4597,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 +4654,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,10 +4662,10 @@ 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)
     {
@@ -4565,12 +4704,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 +4722,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 +4733,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 +4750,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 +4758,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 +4771,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.   */
 
@@ -4689,31 +4825,19 @@ 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_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_ibt_plt = &elf_x86_64_lazy_ibt_plt;
+      non_lazy_ibt_plt = &elf_x86_64_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;
     }
 
   count = 0;
@@ -4724,15 +4848,8 @@ elf_x86_64_get_synthetic_symtab (bfd *ab
 	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;
@@ -4844,24 +4961,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 +5001,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 +5047,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 +5072,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 +5102,7 @@ elf_x86_64_merge_symbol (struct elf_link
 	*psec = bfd_com_section_ptr;
     }
 
-  return TRUE;
+  return true;
 }
 
 static int
@@ -5012,7 +5129,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 +5145,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 +5159,30 @@ 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)
+  bed = get_elf_backend_data (info->output_bfd);
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (!htab)
+    abort ();
+  if (htab->params->bndplt)
     {
-      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;
-	}
+      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;
+    }
 
-      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;
-	}
+  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_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;
+      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))
@@ -5221,13 +5328,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 +5353,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 +5361,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 +5369,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,201 +5377,14 @@ 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
+static bool
 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;
+  return true;
 }
 
 #undef  TARGET_LITTLE_SYM
@@ -5527,8 +5418,7 @@ elf64_l1om_elf_object_p (bfd *abfd)
 #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
+#undef ELF_TARGET_OS
 
 #include "elf64-target.h"
 
@@ -5549,12 +5439,12 @@ elf64_l1om_elf_object_p (bfd *abfd)
 
 /* Intel K1OM support.  */
 
-static bfd_boolean
+static bool
 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;
+  return true;
 }
 
 #undef  TARGET_LITTLE_SYM
@@ -5575,11 +5465,6 @@ elf64_k1om_elf_object_p (bfd *abfd)
 #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.  */
@@ -5604,6 +5489,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
@@ -5613,6 +5499,13 @@ elf64_k1om_elf_object_p (bfd *abfd)
 
 #undef	ELF_OSABI
 
+#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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-attrs.c ./bfd/elf-attrs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-attrs.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-attrs.c	2021-12-16 01:57:38.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-2021 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.  */
@@ -303,40 +303,69 @@ bfd_elf_add_obj_attr_int (bfd *abfd, int
 }
 
 /* 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 void
+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);
+  attr->s = elf_attr_strdup (abfd, s, end);
 }
 
-/* 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)
+bfd_elf_add_obj_attr_string (bfd *abfd, int vendor, unsigned int tag,
+			     const char *s)
+{
+  elf_add_obj_attr_string (abfd, vendor, tag, s, NULL);
+}
+
+/* Add a int+string object attribute.  */
+static void
+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);
+  attr->s = elf_attr_strdup (abfd, s, end);
+}
+
+void
+bfd_elf_add_obj_attr_int_string (bfd *abfd, int vendor, unsigned int tag,
+				 unsigned int i, const char *s)
+{
+  elf_add_obj_attr_int_string (abfd, vendor, tag, i, s, NULL);
 }
 
 /* Copy the object attributes from IBFD to OBFD.  */
@@ -434,13 +463,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 +480,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 +489,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 +508,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,36 +526,37 @@ _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:
@@ -537,26 +564,29 @@ _bfd_elf_parse_attributes (bfd *abfd, El
 		    {
 		      int type;
 
-		      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);
+			  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;
+			  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;
+			  val = _bfd_safe_read_leb128 (abfd, &p, false, end);
 			  bfd_elf_add_obj_attr_int (abfd, vendor, tag, val);
 			  break;
 			default:
@@ -569,9 +599,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 +619,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 +644,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 +656,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 +704,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-bfd.h ./bfd/elf-bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-bfd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-bfd.h	2021-12-16 01:57:38.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-2021 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.  */
@@ -451,7 +463,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 +478,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;
@@ -536,6 +548,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 +578,23 @@ 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;
 
   /* The BFD used to hold special sections created by the linker.
      This will be the first BFD found which requires these sections to
@@ -635,10 +674,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;
+
+  /* Target OS for linker output.  */
+  enum elf_target_os target_os;
 
-  /* A linked list of BFD's loaded in the link.  */
-  struct elf_link_loaded_list *loaded;
+  /* 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;
@@ -657,40 +713,53 @@ struct elf_link_hash_table
   asection *dynsym;
 };
 
+/* 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 +781,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 +820,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 +845,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.  */
@@ -857,6 +926,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;
 
@@ -886,12 +958,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 +971,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 +983,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 +994,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 +1004,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 +1036,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 +1060,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,17 +1080,17 @@ 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
@@ -1030,7 +1102,7 @@ struct elf_backend_data
      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);
 
@@ -1038,14 +1110,14 @@ struct elf_backend_data
      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 +1132,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 +1152,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 +1209,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 +1217,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 +1227,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 +1238,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 +1258,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 +1267,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 +1285,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 +1315,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 +1333,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 +1359,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 +1392,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,9 +1414,9 @@ 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 *);
 
   /* This function returns an encoding after computing the encoded
@@ -1354,16 +1431,24 @@ 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, 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 +1461,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 +1477,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 +1493,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 +1512,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 +1563,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 +1572,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 +1588,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 +1785,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;
 };
@@ -1798,7 +1904,7 @@ struct output_elf_obj_tdata
   /* 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;
@@ -1809,6 +1915,9 @@ struct output_elf_obj_tdata
   /* Used when laying out sections.  */
   file_ptr next_file_pos;
 
+  /* Linker information.  */
+  struct bfd_link_info *link_info;
+
   int num_section_syms;
   unsigned int shstrtab_section, strtab_section;
 
@@ -1816,17 +1925,18 @@ struct output_elf_obj_tdata
   unsigned int stack_flags;
 
   /* 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
@@ -1864,6 +1974,7 @@ struct elf_obj_tdata
   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
@@ -1937,7 +2048,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,7 +2067,7 @@ 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.  */
@@ -1969,6 +2080,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,6 +2098,7 @@ 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)
@@ -2056,12 +2171,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 +2185,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 +2205,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 +2225,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 +2256,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 +2291,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 +2302,18 @@ 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_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 +2321,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 +2353,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 +2374,68 @@ 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
+extern bool _bfd_elf_discard_section_eh_frame_hdr
   (bfd *, 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_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 +2456,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 +2475,56 @@ 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 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 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 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 +2545,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 +2593,49 @@ 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 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_close_and_cleanup
   (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 +2652,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 +2676,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
+extern bool _bfd_elf_map_sections_to_segments
   (bfd *, struct bfd_link_info *);
 
-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 +2716,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 +2729,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
@@ -2712,10 +2831,20 @@ 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_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);
 
 /* Internal structure which holds information to be included in the
    PRPSINFO section of Linux core files.
@@ -2775,14 +2904,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 +2919,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 +2942,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 +2957,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 +2985,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 +3007,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 +3020,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 +3034,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 +3044,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 +3123,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf.c ./bfd/elf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* ELF executable support for BFD.
 
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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
@@ -231,7 +232,7 @@ bfd_elf_gnu_hash (const char *namearg)
 
 /* 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 +240,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 +263,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 +297,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 +397,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)
@@ -448,11 +443,16 @@ 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
@@ -467,12 +467,16 @@ 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
@@ -486,8 +490,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 +514,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 +594,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 +634,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 +656,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 +678,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 +697,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 +770,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 +805,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 +829,17 @@ setup_group (bfd *abfd, Elf_Internal_Shd
       /* xgettext:c-format */
       _bfd_error_handler (_("%pB: no group info for section '%pA'"),
 			  abfd, newsect);
-      return FALSE;
+      return false;
     }
-  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 +849,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 +877,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 +890,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;
 	}
     }
 
@@ -928,7 +911,7 @@ _bfd_elf_setup_sections (bfd *abfd)
 	    /* xgettext:c-format */
 	    (_("%pB: section group entry number %u is corrupt"),
 	     abfd, i);
-	  result = FALSE;
+	  result = false;
 	  continue;
 	}
 
@@ -957,7 +940,7 @@ _bfd_elf_setup_sections (bfd *abfd)
 						   ->e_shstrndx),
 						  idx->shdr->sh_name),
 		 shdr->bfd_section);
-	      result = FALSE;
+	      result = false;
 	    }
 	}
     }
@@ -965,7 +948,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;
@@ -1019,7 +1002,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 +1011,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 +1030,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 +1056,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 +1067,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,37 +1084,46 @@ _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)))
+    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.
@@ -1142,14 +1133,14 @@ _bfd_elf_make_section_from_shdr (bfd *ab
       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 +1156,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 +1166,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 +1178,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
@@ -1203,7 +1194,7 @@ _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)
+  if ((newsect->flags & SEC_DEBUGGING)
       && ((name[1] == 'd' && name[6] == '_')
 	  || (name[1] == 'z' && name[7] == '_')))
     {
@@ -1211,7 +1202,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
       int compression_header_size;
       bfd_size_type uncompressed_size;
       unsigned int uncompressed_align_power;
-      bfd_boolean compressed
+      bool compressed
 	= bfd_is_section_compressed_with_header (abfd, newsect,
 						 &compression_header_size,
 						 &uncompressed_size,
@@ -1236,7 +1227,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 		      != ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
 	    action = compress;
 	  else
-	    return TRUE;
+	    return true;
 	}
 
       if (action == compress)
@@ -1247,7 +1238,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 		/* xgettext:c-format */
 		(_("%pB: unable to initialize compress status for section %s"),
 		 abfd, name);
-	      return FALSE;
+	      return false;
 	    }
 	}
       else
@@ -1258,7 +1249,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 		/* xgettext:c-format */
 		(_("%pB: unable to initialize decompress status for section %s"),
 		 abfd, name);
-	      return FALSE;
+	      return false;
 	    }
 	}
 
@@ -1274,7 +1265,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 		 section.  */
 	      char *new_name = convert_zdebug_to_debug (abfd, name);
 	      if (new_name == NULL)
-		return FALSE;
+		return false;
 	      bfd_rename_section (newsect, new_name);
 	    }
 	}
@@ -1286,8 +1277,7 @@ _bfd_elf_make_section_from_shdr (bfd *ab
 
   /* 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 +1285,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 +1302,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 +1322,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 +1343,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 +1351,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 +1397,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,
@@ -1403,7 +1406,7 @@ copy_special_section_fields (const bfd *
 {
   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;
+  bool changed = false;
   unsigned int sh_link;
 
   if (oheader->sh_type == SHT_NOBITS)
@@ -1428,14 +1431,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 +1452,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 +1488,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,7 +1502,7 @@ 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);
@@ -1510,12 +1512,12 @@ _bfd_elf_copy_private_bfd_data (bfd *ibf
 
   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 +1535,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);
 
@@ -1618,12 +1620,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 *
@@ -1650,7 +1652,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;
@@ -1730,7 +1732,7 @@ _bfd_elf_print_private_bfd_data (bfd *ab
 	  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 +1740,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:
@@ -1752,7 +1754,7 @@ _bfd_elf_print_private_bfd_data (bfd *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,8 +1767,8 @@ _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;
@@ -1780,7 +1782,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 +1794,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 +1808,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 +1840,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,19 +1887,20 @@ _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;
 }
 
-/* Get version string.  */
+/* 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
@@ -1914,10 +1917,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;
@@ -1970,7 +1981,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 +2009,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 +2050,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);
@@ -2468,13 +2459,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;
@@ -2598,15 +2595,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 +2684,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 +2719,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 +2727,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 }
@@ -2889,7 +2885,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 +2898,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 +2906,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);
@@ -2959,7 +2940,7 @@ _bfd_elf_new_section_hook (bfd *abfd, as
 
  */
 
-bfd_boolean
+bool
 _bfd_elf_make_section_from_phdr (bfd *abfd,
 				 Elf_Internal_Phdr *hdr,
 				 int hdr_index,
@@ -2970,6 +2951,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 +2963,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 +2999,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 +3014,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 +3022,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 +3047,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 +3060,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");
@@ -3130,25 +3104,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,12 +3130,12 @@ _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);
@@ -3174,7 +3148,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd,
     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 +3159,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 +3176,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 +3190,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)
     {
@@ -3238,11 +3213,10 @@ elf_fake_sections (bfd *abfd, asection *
 	  /* 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;
+	  delay_st_name_p = true;
 	}
     }
   else if ((asect->flags & SEC_ELF_RENAME))
@@ -3258,7 +3232,7 @@ elf_fake_sections (bfd *abfd, asection *
 	      char *new_name = convert_zdebug_to_debug (abfd, name);
 	      if (new_name == NULL)
 		{
-		  arg->failed = TRUE;
+		  arg->failed = true;
 		  return;
 		}
 	      name = new_name;
@@ -3273,7 +3247,7 @@ elf_fake_sections (bfd *abfd, asection *
 	  char *new_name = convert_debug_to_zdebug (abfd, name);
 	  if (new_name == NULL)
 	    {
-	      arg->failed = TRUE;
+	      arg->failed = true;
 	      return;
 	    }
 	  BFD_ASSERT (name[1] != 'z');
@@ -3287,10 +3261,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 +3273,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 +3287,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.  */
 
@@ -3472,16 +3449,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 +3469,7 @@ elf_fake_sections (bfd *abfd, asection *
 					  asect->use_rela_p,
 					  delay_st_name_p))
 	{
-	  arg->failed = TRUE;
+	  arg->failed = true;
 	  return;
 	}
     }
@@ -3502,7 +3479,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 +3499,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 +3523,13 @@ 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 (elf_section_syms (abfd) == NULL)
+	    {
+	      *failedptr = true;
+	      return;
+	    }
 	  symindx = elf_section_syms (abfd)[sec->index]->udata.i;
 	}
       elf_section_data (sec)->this_hdr.sh_info = symindx;
@@ -3586,17 +3568,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;
 	}
     }
@@ -3697,7 +3679,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 +3692,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 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 +3703,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;
 
@@ -3803,9 +3787,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 +3804,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 +3812,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,67 +3876,45 @@ 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)
@@ -3982,7 +3944,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 +3953,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 +3963,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;
@@ -4049,10 +4009,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 +4047,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 +4066,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 +4098,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 +4112,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 +4126,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 +4168,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 +4181,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 +4193,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 +4203,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 +4222,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,7 +4240,7 @@ 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);
@@ -4286,35 +4256,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 +4296,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;
+	return false;
     }
 
   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
@@ -4351,7 +4321,7 @@ _bfd_elf_compute_section_file_positions
   shstrtab_hdr->sh_addralign = 1;
 
   if (!assign_file_positions_except_relocs (abfd, link_info))
-    return FALSE;
+    return false;
 
   if (need_symtab)
     {
@@ -4361,18 +4331,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 +4350,13 @@ _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;
+	return false;
       _bfd_elf_strtab_free (strtab);
     }
 
-  abfd->output_has_begun = TRUE;
+  abfd->output_has_begun = true;
 
-  return TRUE;
+  return true;
 }
 
 /* Make an initial estimate of the size of the program header.  If we
@@ -4483,7 +4453,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 +4523,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 +4573,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,10 +4616,10 @@ 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) \
@@ -4650,14 +4627,14 @@ elf_modify_segment_map (bfd *abfd,
 
 /* Set up a mapping from BFD sections to program segments.  */
 
-bfd_boolean
+bool
 _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
 {
   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;
 
@@ -4675,21 +4652,22 @@ _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;
+      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 +4689,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 +4702,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 +4717,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 +4738,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 +4761,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 +4777,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 +4789,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 +4799,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 +4841,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 +4863,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 +4877,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 +4886,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 +4926,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 +4946,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 +5005,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 +5057,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 +5065,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)
 			{
@@ -5204,9 +5187,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 | SEC_HAS_CONTENTS))
+			  == (SEC_LOAD | SEC_HAS_CONTENTS))
+			break;
+		    }
 
 		  if (i != (unsigned) -1)
 		    break;
@@ -5232,18 +5218,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 +5256,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 +5306,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,17 +5393,17 @@ print_segment_map (const struct elf_segm
   fflush (stderr);
 }
 
-static bfd_boolean
+static bool
 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
 {
   void *buf;
-  bfd_boolean ret;
+  bool ret;
 
   if (bfd_seek (abfd, pos, SEEK_SET) != 0)
-    return FALSE;
+    return false;
   buf = bfd_zmalloc (len);
   if (buf == NULL)
-    return FALSE;
+    return false;
   ret = bfd_bwrite (buf, len, abfd) == len;
   free (buf);
   return ret;
@@ -5419,7 +5413,7 @@ write_zeros (bfd *abfd, file_ptr pos, bf
    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 +5422,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;
+    return false;
 
   alloc = 0;
   for (m = elf_seg_map (abfd); m != NULL; m = m->next)
@@ -5472,7 +5467,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 +5484,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 +5510,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 +5540,8 @@ 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;
 
       /* An ELF segment (described by Elf_Internal_Phdr) may contain a
 	 number of sections with contents contributing to both p_filesz
@@ -5554,16 +5554,16 @@ assign_file_positions_for_load_sections
       p->p_flags = m->p_flags;
 
       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)
@@ -5593,12 +5593,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)
@@ -5627,15 +5627,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 +5644,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 +5673,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 +5699,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 +5736,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 +5753,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 +5801,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
@@ -5798,16 +5813,18 @@ 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);
+		     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.
@@ -5815,12 +5832,27 @@ assign_file_positions_for_load_sections
 			     zero it.  */
 			  adjust = p->p_memsz - p->p_filesz;
 			  if (!write_zeros (abfd, off, adjust))
-			    return FALSE;
+			    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 +5952,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 +5973,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;
 	      }
 
@@ -5973,7 +6009,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 +6018,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 +6049,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 +6075,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().  */
 
-static bfd_boolean
+static bool
 assign_file_positions_for_non_load_sections (bfd *abfd,
 					     struct bfd_link_info *link_info)
 {
@@ -6059,7 +6095,13 @@ 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);
@@ -6092,12 +6134,12 @@ assign_file_positions_for_non_load_secti
 	  /* 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);
+					  maxpagesize);
 	  else
 	    off += vma_page_aligned_bias (hdr->sh_addr, off,
 					  hdr->sh_addralign);
 	  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)
@@ -6114,7 +6156,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 +6167,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 +6183,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 +6191,7 @@ assign_file_positions_for_non_load_secti
 	      end = 0;
 	    }
 
-	  ok = FALSE;
+	  ok = false;
 	  if (start < end)
 	    {
 	      struct elf_segment_map *lm;
@@ -6166,7 +6208,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 +6228,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,7 +6253,7 @@ 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;
 		    }
 		}
 	    }
@@ -6248,7 +6290,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;
@@ -6261,6 +6303,11 @@ assign_file_positions_for_non_load_secti
 		    {
 		      p->p_filesz = (sect->filepos - m->sections[0]->filepos
 				     + 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 +6315,7 @@ assign_file_positions_for_non_load_secti
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static elf_section_list *
@@ -6295,7 +6342,7 @@ find_section_in_list (unsigned int i, el
 
    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)
 {
@@ -6341,7 +6388,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,15 +6399,15 @@ 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;
@@ -6368,13 +6415,13 @@ assign_file_positions_except_relocs (bfd
     {
       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 +6433,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 +6487,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 +6507,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 +6529,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;
@@ -6507,9 +6554,9 @@ _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);
+	  bool is_rel = (shdrp->sh_type == SHT_REL
+			 || shdrp->sh_type == SHT_RELA);
+	  bool is_ctf = sec && bfd_section_is_ctf (sec);
 	  if (is_rel
 	      || is_ctf
 	      || (sec != NULL && (sec->flags & SEC_ELF_COMPRESS)))
@@ -6522,7 +6569,7 @@ _bfd_elf_assign_file_positions_for_non_l
 		  /* Compress DWARF debug sections.  */
 		  if (!bfd_compress_section (abfd, sec,
 					     shdrp->contents))
-		    return FALSE;
+		    return false;
 
 		  if (sec->compress_status == COMPRESS_SECTION_DONE
 		      && (abfd->flags & BFD_COMPRESS_GABI) == 0)
@@ -6532,7 +6579,7 @@ _bfd_elf_assign_file_positions_for_non_l
 		      char *new_name
 			= convert_debug_to_zdebug (abfd, name);
 		      if (new_name == NULL)
-			return FALSE;
+			return false;
 		      name = new_name;
 		    }
 		  /* Add section name to section name section.  */
@@ -6540,20 +6587,20 @@ _bfd_elf_assign_file_positions_for_non_l
 		    abort ();
 		  shdrp->sh_name
 		    = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
-							  name, FALSE);
+							  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;
+						      name, false))
+		    return false;
 		  if (d->rela.hdr
 		      && !_bfd_elf_set_reloc_sh_name (abfd,
 						      d->rela.hdr,
-						      name, TRUE))
-		    return FALSE;
+						      name, true))
+		    return false;
 
 		  /* Update section size and contents.  */
 		  shdrp->sh_size = sec->size;
@@ -6569,7 +6616,7 @@ _bfd_elf_assign_file_positions_for_non_l
 
 	      off = _bfd_elf_assign_file_position_for_section (shdrp,
 							       off,
-							       TRUE);
+							       true);
 	    }
 	}
     }
@@ -6579,7 +6626,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,21 +6636,21 @@ _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.
@@ -6614,18 +6661,18 @@ _bfd_elf_write_object_contents (bfd *abf
   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);
@@ -6636,14 +6683,14 @@ _bfd_elf_write_object_contents (bfd *abf
 				  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;
+	    return false;
 	}
     }
 
@@ -6652,22 +6699,22 @@ _bfd_elf_write_object_contents (bfd *abf
   if (elf_shstrtab (abfd) != NULL
       && (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);
 
-  return TRUE;
+  return true;
 }
 
-bfd_boolean
+bool
 _bfd_elf_write_corefile_contents (bfd *abfd)
 {
   /* Hopefully this can be done just like an object file.  */
@@ -6769,8 +6816,8 @@ _bfd_elf_symbol_from_bfd_symbol (bfd *ab
 
 /* 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 +6827,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,7 +6841,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)					\
@@ -6808,17 +6854,17 @@ rewrite_elf_program_header (bfd *ibfd, b
 
   /* 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)			\
+#define IS_CONTAINED_BY_VMA(section, segment, opb)			\
+  (section->vma * (opb) >= segment->p_vaddr				\
+   && (section->vma * (opb) + 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)			\
+#define IS_CONTAINED_BY_LMA(section, segment, base, opb)		\
+  (section->lma * (opb) >= base						\
+   && (section->lma + SECTION_SIZE (section, segment) / (opb) >= section->lma) \
+   && (section->lma * (opb) + SECTION_SIZE (section, segment)		\
        <= SEGMENT_END (segment, base)))
 
   /* Handle PT_NOTE segment.  */
@@ -6864,10 +6910,10 @@ 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)		\
+#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed, opb)		\
   ((((segment->p_paddr							\
-      ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr)	\
-      : IS_CONTAINED_BY_VMA (section, segment))				\
+      ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr, opb)	\
+      : IS_CONTAINED_BY_VMA (section, segment, opb))			\
      && (section->flags & SEC_ALLOC) != 0)				\
     || IS_NOTE (segment, section))					\
    && segment->p_type != PT_GNU_STACK					\
@@ -6879,15 +6925,15 @@ rewrite_elf_program_header (bfd *ibfd, b
    && (segment->p_type != PT_DYNAMIC					\
        || 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.  */
@@ -6908,19 +6954,19 @@ rewrite_elf_program_header (bfd *ibfd, b
 
   /* Initialise the segment mark field.  */
   for (section = ibfd->sections; section != NULL; section = section->next)
-    section->segment_mark = FALSE;
+    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 +6987,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;
 	    }
 
@@ -7013,7 +7059,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 +7073,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 +7085,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 +7097,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 +7132,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)
@@ -7095,7 +7152,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 +7188,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 +7207,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 +7228,17 @@ 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)
+	      if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr,
+				       opb)
 		  || IS_COREFILE_NOTE (segment, section)
 		  || (bed->want_p_paddr_set_to_zero
-		      && IS_CONTAINED_BY_VMA (output_section, segment)))
+		      && IS_CONTAINED_BY_VMA (output_section, segment, opb)))
 		{
 		  if (matching_lma == NULL
 		      || output_section->lma < matching_lma->lma)
@@ -7223,7 +7282,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 +7297,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 +7325,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,7 +7354,8 @@ rewrite_elf_program_header (bfd *ibfd, b
 
 	      BFD_ASSERT (output_section != NULL);
 
-	      if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
+	      if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr,
+				       opb)
 		  || IS_COREFILE_NOTE (segment, section))
 		{
 		  if (map->count == 0)
@@ -7308,8 +7369,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 +7399,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 +7407,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 +7421,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 +7436,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);
 
@@ -7428,12 +7490,12 @@ rewrite_elf_program_header (bfd *ibfd, b
 #undef INCLUDE_SECTION_IN_SEGMENT
 #undef SEGMENT_AFTER_SEGMENT
 #undef SEGMENT_OVERLAPS
-  return TRUE;
+  return true;
 }
 
 /* Copy ELF program header information.  */
 
-static bfd_boolean
+static bool
 copy_elf_program_header (bfd *ibfd, bfd *obfd)
 {
   Elf_Internal_Ehdr *iehdr;
@@ -7443,8 +7505,9 @@ 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;
+  unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
 
   iehdr = elf_elfheader (ibfd);
 
@@ -7453,14 +7516,14 @@ 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;
       }
 
@@ -7470,7 +7533,7 @@ copy_elf_program_header (bfd *ibfd, bfd
     {
       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 +7555,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.  */
@@ -7537,7 +7600,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 +7633,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 +7643,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 +7653,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 +7663,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 +7700,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;
@@ -7658,7 +7723,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 +7751,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 +7766,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 +7782,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 +7800,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 +7830,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 +7873,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 +7889,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 +7913,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 +7936,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)
@@ -7910,17 +7998,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 +8018,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 +8036,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 +8046,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 +8072,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;
@@ -8006,18 +8095,18 @@ swap_out_syms (bfd *abfd,
   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,22 +8121,23 @@ 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;
@@ -8060,9 +8150,10 @@ error_return:
       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;
 
@@ -8119,12 +8210,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 +8275,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
@@ -8325,6 +8433,12 @@ 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
@@ -8345,7 +8459,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 +8476,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;
 }
@@ -8388,22 +8512,46 @@ _bfd_elf_get_dynamic_symtab_upper_bound
     }
 
   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;
 }
 
 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.  */
+      struct bfd_elf_section_data *d = elf_section_data (asect);
+      Elf_Internal_Shdr *rel_hdr = &d->this_hdr;
+      bfd_size_type ext_rel_size = rel_hdr->sh_size;
+      ufile_ptr filesize = bfd_get_file_size (abfd);
+
+      if (filesize != 0 && ext_rel_size > filesize)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return -1;
+	}
+    }
+
 #if SIZEOF_LONG == SIZEOF_INT
   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
     {
@@ -8426,7 +8574,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 +8590,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 +8602,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 +8617,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,11 +8627,18 @@ _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))
       {
+	ext_rel_size += s->size;
+	if (ext_rel_size < s->size)
+	  {
+	    bfd_set_error (bfd_error_file_truncated);
+	    return -1;
+	  }
 	count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
 	if (count > LONG_MAX / sizeof (arelent *))
 	  {
@@ -8491,6 +8646,16 @@ _bfd_elf_get_dynamic_reloc_upper_bound (
 	    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 +8672,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;
 
@@ -8528,7 +8693,7 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd
 	  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;
 	  p = s->relocation;
@@ -8545,11 +8710,12 @@ _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)
     {
@@ -8564,39 +8730,28 @@ _bfd_elf_slurp_version_tables (bfd *abfd
       if (hdr->sh_info == 0
 	  || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
 	{
-error_return_bad_verref:
+	error_return_bad_verref:
 	  _bfd_error_handler
 	    (_("%pB: .gnu.version_r invalid entry"), abfd);
 	  bfd_set_error (bfd_error_bad_value);
-error_return_verref:
+	error_return_verref:
 	  elf_tdata (abfd)->verref = NULL;
 	  elf_tdata (abfd)->cverrefs = 0;
 	  goto error_return;
 	}
 
-      ufile_ptr filesize = bfd_get_file_size (abfd);
-      if (filesize > 0 && filesize < hdr->sh_size)
-	{
-	  /* 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);
-	  goto error_return_verref;
-	}
-      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
-      if (contents == NULL)
+      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 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)
+      contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
+      if (contents == NULL)
 	goto error_return_verref;
 
-      elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
-	bfd_alloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
-
+      if (_bfd_mul_overflow (hdr->sh_info, sizeof (Elf_Internal_Verneed), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  goto error_return_verref;
+	}
+      elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_alloc (abfd, amt);
       if (elf_tdata (abfd)->verref == NULL)
 	goto error_return_verref;
 
@@ -8625,9 +8780,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;
 	    }
@@ -8713,11 +8873,10 @@ error_return_verref:
 	  goto error_return;
 	}
 
-      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
-      if (contents == NULL)
+      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
 	goto error_return_verdef;
-      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
+      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)
@@ -8759,9 +8918,12 @@ error_return_verref:
 	  else
 	    freeidx = ++maxidx;
 	}
-
-      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
-	bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
+      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_zalloc (abfd, amt);
       if (elf_tdata (abfd)->verdef == NULL)
 	goto error_return_verdef;
 
@@ -8789,9 +8951,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;
 	    }
@@ -8854,8 +9021,12 @@ 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;
+	}
+      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
       if (elf_tdata (abfd)->verdef == NULL)
 	goto error_return;
 
@@ -8890,12 +9061,11 @@ error_return_verref:
       iverdaux->vda_nodename = iverdef->vd_nodename;
     }
 
-  return TRUE;
+  return true;
 
  error_return:
-  if (contents != NULL)
-    free (contents);
-  return FALSE;
+  free (contents);
+  return false;
 }
 
 asymbol *
@@ -8922,18 +9092,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 +9112,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 +9126,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 +9136,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 +9166,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 +9176,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 +9184,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 +9194,14 @@ _bfd_elf_find_nearest_line (bfd *abfd,
 			    unsigned int *line_ptr,
 			    unsigned int *discriminator_ptr)
 {
-  bfd_boolean found;
+  bool found;
 
   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;
+    return true;
 
   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
 				     filename_ptr, functionname_ptr, line_ptr))
@@ -9040,31 +9210,31 @@ _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)
 {
@@ -9080,13 +9250,13 @@ _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;
+  bool found;
   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
 					 functionname_ptr, line_ptr,
 					 & elf_tdata (abfd)->dwarf2_find_line_info);
@@ -9122,7 +9292,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,
@@ -9134,48 +9304,75 @@ _bfd_elf_set_section_contents (bfd *abfd
 
   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 ((section->flags & SEC_ELF_COMPRESS) == 0)
+	{
+	  _bfd_error_handler
+	    (_("%pB:%pA: error: attempting to write into an unallocated compressed section"),
+	     abfd, section);
+	  bfd_set_error (bfd_error_invalid_operation);
+	  return false;
+	}
+      
+      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 false;
 
-  return TRUE;
+  return true;
 }
 
-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,21 +9456,23 @@ _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
+bool
 _bfd_elf_close_and_cleanup (bfd *abfd)
 {
   struct elf_obj_tdata *tdata = elf_tdata (abfd);
-  if (bfd_get_format (abfd) == bfd_object && tdata != NULL)
+  if (tdata != NULL
+      && (bfd_get_format (abfd) == bfd_object
+	  || bfd_get_format (abfd) == bfd_core))
     {
       if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
 	_bfd_elf_strtab_free (elf_shstrtab (abfd));
@@ -9304,8 +9503,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
 
@@ -9329,22 +9526,22 @@ elfcore_make_pid (bfd *abfd)
    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 +9551,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 +9568,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 +9582,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 +9590,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 +9607,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 +9674,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 +9684,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 +9697,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 +9707,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 +9717,247 @@ 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_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);
+}
+
 #if defined (HAVE_PRPSINFO_T)
 typedef prpsinfo_t   elfcore_psinfo_t;
 #if defined (HAVE_PRPSINFO32_T)		/* Sparc64 cross Sparc32 */
@@ -9771,7 +9999,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 +10044,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 +10059,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 +10094,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 +10113,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 +10129,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 +10150,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 +10158,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 +10182,82 @@ 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 +10267,47 @@ 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 +10315,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 +10329,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 +10362,290 @@ 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_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_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 +10662,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 +10697,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 +10710,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 +10722,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 +10735,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 +10777,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 +10807,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 +10850,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 +10867,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:
@@ -10574,7 +10880,7 @@ elfcore_grok_freebsd_note (bfd *abfd, El
       if (note->namesz == 8)
 	return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
       else
-	return TRUE;
+	return true;
 
     case NT_FREEBSD_PROCSTAT_PROC:
       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
@@ -10595,7 +10901,7 @@ elfcore_grok_freebsd_note (bfd *abfd, El
       if (note->namesz == 8)
 	return elfcore_grok_xstatereg (abfd, note);
       else
-	return TRUE;
+	return true;
 
     case NT_FREEBSD_PTLWPINFO:
       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
@@ -10605,11 +10911,11 @@ elfcore_grok_freebsd_note (bfd *abfd, El
       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 +10924,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 +10951,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 +10967,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 +10992,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 +11004,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 +11021,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 +11037,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 +11061,10 @@ elfcore_grok_openbsd_procinfo (bfd *abfd
   elf_tdata (abfd)->core->command
     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
 {
   if (note->type == NT_OPENBSD_PROCINFO)
@@ -10779,18 +11088,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 +11110,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 +11139,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 +11153,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 +11168,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,7 +11183,7 @@ 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
@@ -10882,7 +11191,7 @@ elfcore_grok_nto_regs (bfd *abfd,
 #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
@@ -10901,11 +11210,11 @@ elfcore_grok_nto_note (bfd *abfd, Elf_In
     case BFD_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 +11225,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
@@ -11694,6 +12003,66 @@ 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_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);
+}
+
+/* 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,
@@ -11775,10 +12144,26 @@ 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-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);
   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 +12176,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 +12185,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 +12200,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,7 +12214,7 @@ 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[] =
 	    {
@@ -11851,7 +12236,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 +12247,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 +12261,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.  */
@@ -12092,7 +12476,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,7 +12512,7 @@ _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;
@@ -12206,7 +12590,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 +12601,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 +12611,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 +12634,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 +12650,509 @@ _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);
+
+#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.  */
+  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;
+	  unsigned int i;
+	  unsigned int entsize;
+	  unsigned int symcount;
+	  unsigned int 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;
+
+	  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_bread (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 %d has invalid symbol index %ld"),
+		     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;
+	  unsigned int reloc_count;
+	  unsigned int idx;
+	  unsigned int 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;
+	  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 %u 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 %u 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 %u 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 %u 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfcode.h ./bfd/elfcode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfcode.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfcode.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF executable support for BFD.
-   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 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
@@ -317,11 +317,19 @@ 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 = 1;
+	  _bfd_error_handler (_("warning: %pB has a section "
+				"extending past end of file"), abfd);
+	}
+    }
   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 +483,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 +500,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 */
@@ -563,7 +571,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 +581,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 +618,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;
 
@@ -682,21 +690,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++)
@@ -760,6 +770,7 @@ 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;
+	  abfd->read_only = 1;
 	  _bfd_error_handler
 	    (_("warning: %pB has a corrupt string table index - ignoring"),
 	     abfd);
@@ -775,19 +786,19 @@ 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)
@@ -800,10 +811,18 @@ elf_object_p (bfd *abfd)
 	  if (bfd_bread (&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))
+	    {
+	      abfd->read_only = 1;
+	      _bfd_error_handler (_("warning: %pB has a program header "
+				    "with invalid alignment"), abfd);
+	    }
 	}
     }
 
-  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 +868,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 +884,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 +894,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 +921,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;
     }
 
@@ -955,7 +976,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,13 +986,13 @@ 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;
 	}
 
@@ -980,6 +1001,13 @@ elf_write_relocs (bfd *abfd, asection *s
       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.  */
@@ -1004,7 +1032,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 +1040,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);
@@ -1026,7 +1054,7 @@ elf_write_shdrs_and_ehdr (bfd *abfd)
   amt = sizeof (x_ehdr);
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
       || bfd_bwrite (&x_ehdr, amt, abfd) != amt)
-    return FALSE;
+    return false;
 
   /* Some fields in the first section header handle overflow of ehdr
      fields.  */
@@ -1038,10 +1066,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++)
     {
@@ -1053,14 +1085,14 @@ elf_write_shdrs_and_ehdr (bfd *abfd)
   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;
+    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 +1160,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 +1181,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
@@ -1178,7 +1210,7 @@ elf_slurp_symbol_table (bfd *abfd, asymb
 	  || (elf_dynverref (abfd) != 0
 	      && elf_tdata (abfd)->verref == NULL))
 	{
-	  if (!_bfd_elf_slurp_version_tables (abfd, FALSE))
+	  if (!_bfd_elf_slurp_version_tables (abfd, false))
 	    return -1;
 	}
     }
@@ -1194,8 +1226,12 @@ elf_slurp_symbol_table (bfd *abfd, asymb
       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 +1256,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.  */
@@ -1281,7 +1314,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 +1347,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;
@@ -1381,16 +1423,14 @@ 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)
     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)
     free (isymbuf);
   return -1;
 }
@@ -1398,14 +1438,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 +1455,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 +1476,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 +1528,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 +1569,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 +1581,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 +1589,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 +1679,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 +1696,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 +1755,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 +1796,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 +1862,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 +1877,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 +1910,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 +1927,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfcore.h ./bfd/elfcore.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfcore.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfcore.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF core file support for BFD.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 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.  */
@@ -314,11 +314,11 @@ elf_core_file_p (bfd *abfd)
 
   /* 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 +326,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,6 +335,7 @@ 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)
@@ -384,8 +385,12 @@ 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;
 
@@ -405,8 +410,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, (file_ptr) (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 +426,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-eh-frame.c ./bfd/elf-eh-frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-eh-frame.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-eh-frame.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* .eh_frame section optimization.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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.  */
@@ -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
@@ -937,7 +937,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 +1048,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 +1111,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 +1121,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 +1136,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 +1154,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 +1173,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 +1182,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 +1226,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 +1275,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 +1411,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 +1420,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
@@ -1470,10 +1467,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 +1480,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 +1497,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 +1528,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 +1555,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,7 +1609,7 @@ _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
+bool
 _bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
 {
   struct elf_link_hash_table *htab;
@@ -1633,7 +1627,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)
     {
@@ -1649,34 +1643,34 @@ _bfd_elf_discard_section_eh_frame_hdr (b
     }
 
   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 +1684,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 +1695,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 +1706,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 +1717,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 +1828,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 +1849,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 +1864,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 +1880,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 +1888,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 +1908,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 +1935,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 +2143,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 +2184,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 +2283,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 +2298,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 +2311,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 +2333,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 +2345,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 +2398,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 +2420,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 +2454,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 +2472,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 +2494,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 +2502,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 +2513,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 +2525,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 +2544,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-hppa.h ./bfd/elf-hppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-hppa.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-hppa.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common code for PA ELF implementations.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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,		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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,		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),
   /* 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,	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),
   /* 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,		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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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),
   /* 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,	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)
 #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;
@@ -990,16 +990,16 @@ elf_hppa_sort_unwind (bfd *abfd)
       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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-ifunc.c ./bfd/elf-ifunc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-ifunc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-ifunc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF STT_GNU_IFUNC support.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elflink.c ./bfd/elflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elflink.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elflink.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF linking support for BFD.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -32,13 +32,18 @@
 #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;
+  bool failed;
 };
 
 /* This structure is used to pass information to
@@ -51,16 +56,16 @@ struct elf_find_verdep_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 +115,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 +130,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 +142,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 +157,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 +168,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 +182,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 +199,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 +241,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 +253,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 +262,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 +282,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 +291,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 +331,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 +339,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 +349,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.  */
@@ -359,16 +364,16 @@ _bfd_elf_link_create_dynamic_sections (b
      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 +400,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 +411,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 +420,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 +437,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 +448,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 +471,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 +482,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 +499,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 +510,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 +532,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 +556,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 +577,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 +617,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 +694,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 +723,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 +742,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 +753,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 +769,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 +827,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 +868,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 +930,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 +958,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 +1011,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 +1033,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 +1051,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 +1060,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 +1074,25 @@ _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;
 
-  *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 +1131,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
@@ -1225,7 +1247,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 +1260,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)
@@ -1256,8 +1278,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
       && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN)
       && newdyn != olddyn)
     {
-      h->root.non_ir_ref_dynamic = TRUE;
-      hi->root.non_ir_ref_dynamic = TRUE;
+      h->root.non_ir_ref_dynamic = true;
+      hi->root.non_ir_ref_dynamic = true;
     }
 
   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
@@ -1293,8 +1315,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 +1327,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 +1342,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 +1356,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 +1404,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 +1413,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 +1424,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 +1450,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 +1490,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 +1500,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 +1520,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 +1536,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 +1575,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 +1587,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 +1611,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 +1634,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 +1657,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 +1671,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 +1683,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 +1699,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 +1742,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 +1760,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 +1799,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 +1831,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* This function is called to create an indirect symbol from the
@@ -1817,7 +1839,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 +1848,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 +1878,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 +1896,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 +1906,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 +1914,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 +1935,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 +1970,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 +2009,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 +2033,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 +2052,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 +2065,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 +2113,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,12 +2183,12 @@ _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;
 }
 
 /* Look through the symbols which are defined in other shared
@@ -2148,14 +2196,14 @@ _bfd_elf_export_symbol (struct elf_link_
    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 +2213,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 +2225,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 +2238,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 +2251,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 +2271,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 +2298,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 +2319,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 +2329,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 +2361,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 +2375,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 +2388,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 +2396,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 +2421,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 +2437,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 +2458,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 +2496,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 +2511,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 +2526,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 +2543,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;
+    return false;
 
   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
@@ -2514,7 +2562,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 +2589,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 +2602,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
@@ -2578,7 +2626,7 @@ _bfd_elf_link_read_relocs (bfd *abfd,
 			   asection *o,
 			   void *external_relocs,
 			   Elf_Internal_Rela *internal_relocs,
-			   bfd_boolean keep_memory)
+			   bool keep_memory)
 {
   void *alloc1 = NULL;
   Elf_Internal_Rela *alloc2 = NULL;
@@ -2643,8 +2691,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 +2699,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)
@@ -2667,7 +2713,7 @@ _bfd_elf_link_read_relocs (bfd *abfd,
 /* 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 +2728,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 +2737,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 +2788,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 +2807,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 +2821,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 +2830,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 +2870,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 +2898,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 +2914,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 +2931,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 +2946,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 +2988,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 +3003,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 +3019,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 +3028,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 +3049,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 +3102,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 +3119,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 +3155,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 +3177,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 +3202,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 +3227,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 +3240,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 +3253,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 +3262,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 +3282,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 +3310,26 @@ _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;
 
   bed = get_elf_backend_data (hash_table->dynobj);
 
@@ -3293,7 +3339,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 +3369,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 +3378,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 +3387,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 +3413,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 +3431,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);
   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
@@ -3430,16 +3476,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 +3509,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 +3522,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 +3535,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 +3544,123 @@ _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)
+    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);
+    }
+
+  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;
 
@@ -3547,17 +3689,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 +3702,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 +3718,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 +3782,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,6 +3810,11 @@ 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);
@@ -3781,14 +3922,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 +3940,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 +3963,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)
@@ -3832,7 +3973,7 @@ _bfd_elf_notice_as_needed (bfd *ibfd,
 
 /* Check relocations an ELF object file.  */
 
-bfd_boolean
+bool
 _bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -3856,7 +3997,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)
+      && is_elf_hash_table (&htab->root)
       && bed->check_relocs != NULL
       && elf_object_id (abfd) == elf_hash_table_id (htab)
       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
@@ -3866,10 +4007,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)
@@ -3880,7 +4029,7 @@ _bfd_elf_link_check_relocs (bfd *abfd, s
 	  internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
 						       info->keep_memory);
 	  if (internal_relocs == NULL)
-	    return FALSE;
+	    return false;
 
 	  ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
 
@@ -3888,16 +4037,16 @@ _bfd_elf_link_check_relocs (bfd *abfd, s
 	    free (internal_relocs);
 
 	  if (! ok)
-	    return FALSE;
+	    return false;
 	}
     }
 
-  return TRUE;
+  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 +4055,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 +4066,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 +4079,22 @@ 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 ((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 +4127,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 +4147,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 +4168,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 +4187,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 +4202,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 +4210,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 +4218,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.  */
@@ -4098,7 +4246,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;
 	    }
@@ -4127,8 +4275,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 +4298,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 +4324,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 +4349,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 +4377,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 +4413,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 +4472,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 +4491,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 +4522,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 +4556,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 +4571,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);
+		}
 	    }
 	}
     }
@@ -4448,20 +4622,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 +4645,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 +4716,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 +4784,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,7 +4941,7 @@ 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
@@ -4781,7 +4955,8 @@ error_free_dyn:
 	}
 
       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 +4968,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 +5019,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 +5052,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 +5065,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;
@@ -5029,17 +5213,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)
 	    {
@@ -5056,8 +5241,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 +5271,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 +5315,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;
 	    }
 	}
     }
@@ -5199,17 +5383,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 +5402,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 +5448,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 +5471,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 +5488,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 +5532,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 +5675,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 +5693,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 +5712,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 +5721,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 +5770,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 +5802,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 +5828,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 +5845,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 +5861,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,11 +5898,11 @@ 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;
 	    }
 
@@ -5766,14 +5930,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 +5952,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 +5973,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 +5996,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 +6007,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 +6026,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 +6049,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 +6065,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 +6080,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 +6100,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 +6109,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 +6118,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 +6133,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 +6157,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
@@ -6174,7 +6332,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 +6343,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 +6362,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 +6397,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 +6414,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 +6431,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 +6445,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 +6462,7 @@ bfd_elf_size_dynamic_sections (bfd *outp
   *sinterpptr = NULL;
 
   if (!is_elf_hash_table (info->hash))
-    return TRUE;
+    return true;
 
   dynobj = elf_hash_table (info)->dynobj;
 
@@ -6325,21 +6483,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 +6521,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 +6530,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 +6540,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 +6556,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 +6575,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 +6644,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 +6678,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 +6697,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 +6707,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 +6744,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 +6754,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;
@@ -6692,13 +6850,13 @@ 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;
 
       if (elf_tdata (output_bfd)->verref == NULL)
 	s->flags |= SEC_EXCLUDE;
@@ -6727,7 +6885,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 +6905,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 +6926,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;
@@ -6795,13 +6954,13 @@ bfd_elf_size_dynamic_sections (bfd *outp
 
   if (bfd_link_relocatable (info)
       && !_bfd_elf_size_group_sections (info))
-    return FALSE;
+    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.  */
@@ -6858,7 +7017,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 +7027,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 +7041,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 +7056,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 +7068,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 +7079,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 +7094,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 +7104,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 +7151,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 +7192,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 +7218,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 +7239,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 +7248,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 +7261,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 +7318,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 +7326,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 +7363,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 +7381,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 +7407,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 +7417,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  if (hashinf.error)
 	    {
 	      free (hashcodes);
-	      return FALSE;
+	      return false;
 	    }
 
 	  nsyms = hashinf.hashcodes - hashcodes;
@@ -7264,7 +7426,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 +7436,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 +7459,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 +7472,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 	  if (cinfo.error)
 	    {
 	      free (cinfo.hashcodes);
-	      return FALSE;
+	      return false;
 	    }
 
 	  bucketcount
@@ -7319,7 +7481,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 +7495,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 +7544,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 +7576,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *ou
 		{
 		  free (cinfo.bitmask);
 		  free (cinfo.hashcodes);
-		  return FALSE;
+		  return false;
 		}
 
 	      s->contents = contents;
@@ -7463,10 +7625,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 +7643,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 +7667,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 +7675,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 +7729,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 +7807,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 +7841,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 +7851,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 +7861,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 +7875,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 +7886,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 +7990,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 +8006,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;
+    return true;
 
   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
     goto error_return;
@@ -7846,7 +8040,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 +8060,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 +8128,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;
 
@@ -7993,7 +8187,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 +8199,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 +8210,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 +8228,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 +8250,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 +8264,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 +8282,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 +8297,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 +8324,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 +8343,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 +8381,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 +8395,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 +8433,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 +8454,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 +8499,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 +8559,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 +8623,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 +8663,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 +8683,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 +8706,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 +8719,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 +8739,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 +8759,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 +8767,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 +8775,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 +8793,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 +8812,7 @@ eval_symbol (bfd_vma *result,
 				  isymbuf, locsymcount))
 	    {
 	      undefined_reference ("section", symbuf);
-	      return FALSE;
+	      return false;
 	    }
 	}
       else
@@ -8557,16 +8823,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 +8840,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 +8857,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 +8897,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 +8924,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;
     }
 }
 
@@ -8907,11 +9202,11 @@ ext64b_r_offset (const void *p)
    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 +9266,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);
 
@@ -9073,7 +9368,7 @@ elf_link_adjust_relocs (bfd *abfd,
 		{
 		  buf = bfd_malloc (buf_size);
 		  if (buf == NULL)
-		    return FALSE;
+		    return false;
 		}
 	      if (runlen < sortlen)
 		{
@@ -9095,7 +9390,7 @@ elf_link_adjust_relocs (bfd *abfd,
       reldata->hashes = NULL;
       free (buf);
     }
-  return TRUE;
+  return true;
 }
 
 struct elf_link_sort_rela
@@ -9181,7 +9476,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 +9484,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 +9516,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 +9534,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 +9573,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 +9591,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 +9608,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 +9767,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 *);
@@ -9509,9 +9805,71 @@ elf_link_output_symstrtab (struct elf_fi
     {
       /* 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;
     }
@@ -9544,20 +9902,20 @@ 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;
+    return true;
 
   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
 
@@ -9566,7 +9924,7 @@ elf_link_swap_symbols_out (struct elf_fi
   amt = bed->s->sizeof_sym * hash_table->strtabcount;
   symbuf = (bfd_byte *) bfd_malloc (amt);
   if (symbuf == NULL)
-    return FALSE;
+    return false;
 
   if (flinfo->symshndxbuf)
     {
@@ -9576,10 +9934,11 @@ elf_link_swap_symbols_out (struct elf_fi
       if (flinfo->symshndxbuf == NULL)
 	{
 	  free (symbuf);
-	  return FALSE;
+	  return false;
 	}
     }
 
+  /* Now swap out the symbols.  */
   for (i = 0; i < hash_table->strtabcount; i++)
     {
       struct elf_sym_strtab *elfsym = &hash_table->strtab[i];
@@ -9589,6 +9948,13 @@ 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
@@ -9597,14 +9963,6 @@ elf_link_swap_symbols_out (struct elf_fi
 				+ elfsym->destshndx_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;
@@ -9612,10 +9970,10 @@ elf_link_swap_symbols_out (struct elf_fi
       && bfd_bwrite (symbuf, amt, flinfo->output_bfd) == amt)
     {
       hdr->sh_size += amt;
-      ret = TRUE;
+      ret = true;
     }
   else
-    ret = FALSE;
+    ret = false;
 
   free (symbuf);
 
@@ -9627,7 +9985,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 +9998,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 +10009,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 +10018,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 +10036,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 +10050,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 +10070,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 +10093,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 +10143,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 +10151,7 @@ elf_link_check_versioned_symbol (struct
       free (isymbuf);
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Convert ELF common symbol TYPE.  */
@@ -9831,13 +10183,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 +10201,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 +10225,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 +10238,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 +10284,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 +10300,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 +10314,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 +10331,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 +10342,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 +10366,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 +10408,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 +10466,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 +10526,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 +10557,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 +10567,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 +10611,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 +10644,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 +10671,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 +10681,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 +10705,7 @@ 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;
+      return true;
     default:
       break;
     }
@@ -10353,9 +10713,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
@@ -10418,10 +10778,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 +10803,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 +10824,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 +10834,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 +10848,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,7 +10867,7 @@ 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
@@ -10569,6 +10950,18 @@ elf_link_input_bfd (struct elf_final_lin
 	 discarding, we don't need to keep it.  */
       if (isym->st_shndx != SHN_UNDEF
 	  && isym->st_shndx < SHN_LORESERVE
+	  && isec->output_section == NULL
+	  && flinfo->info->non_contiguous_regions
+	  && flinfo->info->non_contiguous_regions_warnings)
+	{
+	  _bfd_error_handler (_("warning: --enable-non-contiguous-regions "
+				"discards section `%s' from '%s'\n"),
+			      isec->name, bfd_get_filename (isec->owner));
+	  continue;
+	}
+
+      if (isym->st_shndx != SHN_UNDEF
+	  && isym->st_shndx < SHN_LORESERVE
 	  && bfd_section_removed_from_list (output_bfd,
 					    isec->output_section))
 	continue;
@@ -10577,11 +10970,11 @@ elf_link_input_bfd (struct elf_final_lin
       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 +10989,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 +11000,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 +11021,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 +11048,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 +11120,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 +11133,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
@@ -10779,7 +11174,7 @@ elf_link_input_bfd (struct elf_final_lin
 	{
 	  contents = flinfo->contents;
 	  if (! bfd_get_full_section_contents (input_bfd, o, &contents))
-	    return FALSE;
+	    return false;
 	}
 
       if ((o->flags & SEC_RELOC) != 0)
@@ -10792,18 +11187,18 @@ 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);
+					 flinfo->internal_relocs, false);
 	  if (internal_relocs == NULL
 	      && o->reloc_count > 0)
-	    return FALSE;
+	    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
+	      && ((startswith (o->name, ".ctors")
 		   && strcmp (o->output_section->name,
 			      ".init_array") == 0)
-		  || (strncmp (o->name, ".dtors", 6) == 0
+		  || (startswith (o->name, ".dtors")
 		      && strcmp (o->output_section->name,
 				 ".fini_array") == 0))
 	      && (o->name[6] == 0 || o->name[6] == '.'))
@@ -10817,7 +11212,7 @@ elf_link_input_bfd (struct elf_final_lin
 		       "multiple of address size"),
 		     input_bfd, o);
 		  bfd_set_error (bfd_error_bad_value);
-		  return FALSE;
+		  return false;
 		}
 	      o->flags |= SEC_ELF_REVERSE_COPY;
 	    }
@@ -10862,7 +11257,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 +11311,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 +11321,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 +11391,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,12 +11404,12 @@ 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.  */
 
@@ -11125,7 +11520,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 +11572,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 +11582,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 +11616,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 +11638,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 +11651,7 @@ elf_link_input_bfd (struct elf_final_lin
 						     input_rela_hdr,
 						     internal_relocs,
 						     rela_hash_list))
-		    return FALSE;
+		    return false;
 		}
 	    }
 	}
@@ -11275,18 +11670,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,7 +11689,7 @@ 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;
 	default:
@@ -11317,7 +11712,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 +11723,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 +11738,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 +11761,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 +11793,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 +11831,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 +11866,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 +11903,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 +11923,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 +11944,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 +11981,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 +12009,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 +12023,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,7 +12064,7 @@ 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;
+  bool merged;
   size_t relativecount = 0;
   asection *reldyn = 0;
   bfd_size_type amt;
@@ -11820,9 +12072,11 @@ bfd_elf_final_link (bfd *abfd, struct bf
   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 +12087,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 +12107,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 +12144,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 +12170,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 +12195,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;
@@ -12139,7 +12393,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 +12411,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 +12511,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 +12519,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 +12527,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 +12539,8 @@ 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;
 
   /* Since ELF permits relocations to be against local symbols, we
      must have the local symbols available when we do the relocations.
@@ -12299,7 +12563,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 +12577,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 +12631,43 @@ 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))
     {
-      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 +12676,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 +12714,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 +12744,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 +12776,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 +12804,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 +12830,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;
+		{
+		  ret = false;
+		  goto return_local_hash_table;
+		}
 	    }
 	}
 
@@ -12560,26 +12854,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,10 +12885,16 @@ 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.  */
@@ -12650,7 +12954,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 +13075,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 +13096,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,8 +13117,7 @@ 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)
+      if (bfd_link_textrel_check (info)
 	  && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
 	{
 	  bfd_byte *dyncon, *dynconend;
@@ -12827,12 +13132,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 +13189,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);
@@ -12905,22 +13216,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 +13277,12 @@ 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 (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 +13293,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)
@@ -12997,12 +13315,12 @@ init_reloc_cookie_rels (struct elf_reloc
       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
 						info->keep_memory);
       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 +13330,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 +13345,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,
@@ -13115,10 +13433,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 +13445,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 +13457,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 +13498,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 +13516,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 +13543,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 +13555,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 +13573,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 +13586,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 +13601,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 +13610,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 +13634,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 +13656,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 +13664,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 +13709,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 +13765,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 +13818,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 +13854,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,17 +13871,17 @@ elf_gc_propagate_vtable_entries_used (st
 	  while (n--)
 	    {
 	      if (*pu)
-		*cu = TRUE;
+		*cu = true;
 	      pu++;
 	      cu++;
 	    }
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
 {
   asection *sec;
@@ -13534,7 +13895,7 @@ elf_gc_smash_unused_vtentry_relocs (stru
   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 +13904,9 @@ 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_read_relocs (sec->owner, sec, NULL, NULL, true);
   if (!relstart)
-    return *(bfd_boolean *) okp = FALSE;
+    return *(bool *) okp = false;
   bed = get_elf_backend_data (sec->owner);
   log_file_align = bed->s->log_file_align;
 
@@ -13566,14 +13927,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 +13942,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 +13960,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 +13976,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 +14004,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,15 +14016,15 @@ 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);
@@ -13671,7 +14034,7 @@ bfd_elf_gc_sections (bfd *abfd, struct b
       || !is_elf_hash_table (info->hash))
     {
       _bfd_error_handler(_("warning: gc-sections option ignored"));
-      return TRUE;
+      return true;
     }
 
   bed->gc_keep (info);
@@ -13704,12 +14067,12 @@ 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;
+    return false;
 
   /* Mark dynamically referenced symbols.  */
   if (htab->dynamic_sections_created || info->gc_keep_exported)
@@ -13746,10 +14109,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 +14128,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,
@@ -13799,7 +14165,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 +14173,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 +14187,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 +14206,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 +14214,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 +14241,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 +14279,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 +14296,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 +14327,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 +14339,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 +14347,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 +14372,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 +14387,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 +14405,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 +14453,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 +14483,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 +14507,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 +14523,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 +14583,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 +14610,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)
@@ -14314,7 +14681,7 @@ bfd_elf_discard_info (bfd *output_bfd, s
   return changed;
 }
 
-bfd_boolean
+bool
 _bfd_elf_section_already_linked (bfd *abfd,
 				 asection *sec,
 				 struct bfd_link_info *info)
@@ -14325,19 +14692,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 +14715,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 +14738,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 +14763,7 @@ _bfd_elf_section_already_linked (bfd *ab
 		}
 	    }
 
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -14446,10 +14814,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 +14830,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 +14866,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 +14887,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 +14924,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 +14980,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 +15014,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 +15038,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 +15052,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-linker-x86.h ./bfd/elf-linker-x86.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-linker-x86.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-linker-x86.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,14 +18,14 @@
    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.  */
@@ -43,14 +43,38 @@ 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;
+
+  /* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-linux-core.h ./bfd/elf-linux-core.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-linux-core.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-linux-core.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-m10200.c ./bfd/elf-m10200.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-m10200.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-m10200.c	2021-12-16 01:57:38.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-2021 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
@@ -48,114 +48,114 @@ static reloc_howto_type elf_mn10200_howt
 	 0,
 	 3,
 	 0,
-	 FALSE,
+	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,7 +571,7 @@ 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
@@ -580,7 +580,7 @@ mn10200_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;
 
@@ -730,7 +730,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 +777,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;
 	    }
 	}
 
@@ -930,7 +930,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 +993,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 +1044,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 +1145,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 +1176,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 +1207,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 +1246,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 +1260,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 +1274,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;
@@ -1312,7 +1308,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 +1351,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,13 +1361,10 @@ 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);
   return NULL;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-m10300.c ./bfd/elf-m10300.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-m10300.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-m10300.c	2021-12-16 01:57:38.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-2021 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[] =
@@ -144,493 +145,493 @@ static reloc_howto_type elf_mn10300_howt
 	 0,
 	 3,
 	 0,
-	 FALSE,
+	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,
 	 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,			/* 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,			/* 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,
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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)
@@ -2743,7 +2746,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 +2784,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 +2847,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 +2893,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 +2915,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;
 
@@ -3069,7 +3071,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 +3103,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 +3144,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 +3219,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 +3269,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 +3413,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 +3509,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 +3584,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 +3627,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 +3684,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;
 	    }
 	}
 
@@ -3823,7 +3824,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 +3887,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 +3934,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 +3995,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 +4005,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 +4081,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 +4135,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 +4182,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 +4255,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 +4325,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 +4361,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 +4392,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 +4416,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;
@@ -4451,7 +4448,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 +4491,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,12 +4501,10 @@ 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);
   return NULL;
 }
@@ -4591,7 +4585,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 +4596,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 +4620,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 +4661,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 +4687,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 +4780,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 +4801,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 +4816,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 +4832,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 +4853,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 +4866,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 +4900,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 +4946,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 +4958,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 +4969,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 +5008,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 +5053,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 +5068,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 +5114,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 +5324,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 +5434,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 +5456,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfn32-mips.c ./bfd/elfn32-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfn32-mips.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfn32-mips.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for 32-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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;
@@ -112,67 +114,67 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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. */
@@ -193,75 +195,75 @@ static reloc_howto_type elf_mips_howto_t
 	 16,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.
@@ -270,45 +272,45 @@ static reloc_howto_type elf_mips_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -321,135 +323,135 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -457,15 +459,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -474,15 +476,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -490,15 +492,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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
@@ -514,59 +516,59 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -578,15 +580,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -594,44 +596,44 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -641,90 +643,90 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
 
@@ -733,45 +735,45 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -786,85 +788,85 @@ static reloc_howto_type elf_mips_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
 };
 
@@ -877,67 +879,67 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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 */
+	 false),		/* pcrel_offset */
 
   /* 32 bit relocation.  */
   HOWTO (R_MIPS_32,		/* type */
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
+	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_dont, /* complain_on_overflow */
 				/* This needs complex overflow
@@ -945,85 +947,85 @@ 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.
@@ -1032,45 +1034,45 @@ static reloc_howto_type elf_mips_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -1081,135 +1083,135 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -1217,15 +1219,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1234,15 +1236,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1250,105 +1252,105 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -1360,15 +1362,15 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -1376,44 +1378,44 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -1423,90 +1425,90 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
 
@@ -1515,45 +1517,45 @@ static reloc_howto_type elf_mips_howto_t
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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),
@@ -1568,85 +1570,85 @@ static reloc_howto_type elf_mips_howto_t
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
 
 };
 
@@ -1657,7 +1659,7 @@ static reloc_howto_type elf_mips16_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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[] =
@@ -1873,7 +1875,7 @@ static reloc_howto_type elf_mips16_howto
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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[] =
@@ -2093,7 +2095,7 @@ static reloc_howto_type elf_micromips_ho
 	 1,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -2247,90 +2249,90 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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/
@@ -2344,45 +2346,45 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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.  */
@@ -2390,15 +2392,15 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -2406,15 +2408,15 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -2426,75 +2428,75 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -2504,30 +2506,30 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
 
@@ -2536,29 +2538,29 @@ static reloc_howto_type elf_micromips_ho
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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[] =
@@ -2572,7 +2574,7 @@ static reloc_howto_type elf_micromips_ho
 	 1,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -2726,165 +2728,165 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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.  */
@@ -2892,15 +2894,15 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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.  */
@@ -2908,15 +2910,15 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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),
@@ -2928,75 +2930,75 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
@@ -3006,30 +3008,30 @@ static reloc_howto_type elf_micromips_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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),
 
@@ -3038,29 +3040,29 @@ static reloc_howto_type elf_micromips_ho
 	 2,			/* rightshift */
 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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 */
@@ -3069,15 +3071,15 @@ static reloc_howto_type elf_mips_gnu_vti
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3085,15 +3087,15 @@ static reloc_howto_type elf_mips_gnu_vte
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3101,15 +3103,15 @@ static reloc_howto_type elf_mips_gnu_rel
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3117,15 +3119,15 @@ static reloc_howto_type elf_mips_gnu_rel
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3133,15 +3135,15 @@ static reloc_howto_type elf_mips_gnu_pcr
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,15 +3152,15 @@ 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 =
@@ -3166,15 +3168,15 @@ static reloc_howto_type elf_mips_jump_sl
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 =
@@ -3182,21 +3184,21 @@ static reloc_howto_type elf_mips_eh_howt
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,7 +3251,7 @@ 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)
@@ -3290,15 +3292,15 @@ 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;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -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,10 +3337,10 @@ 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;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -3360,7 +3362,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,12 +3378,12 @@ 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;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
 
       ret = mips_elf_final_gp (output_bfd, symbol, relocatable,
@@ -3396,7 +3398,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;
@@ -3462,7 +3464,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,10 +3480,10 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     }
 
   if (output_bfd != NULL)
-    relocatable = TRUE;
+    relocatable = true;
   else
     {
-      relocatable = FALSE;
+      relocatable = false;
       output_bfd = symbol->section->output_section->owner;
     }
 
@@ -3491,7 +3493,7 @@ mips16_gprel_reloc (bfd *abfd, arelent *
     return ret;
 
   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,
@@ -3735,7 +3737,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 +3794,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 +3813,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 +3836,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 +3846,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 +3886,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 +3907,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 +3936,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 +3952,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 +3982,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 +4043,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 +4101,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 +4162,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,6 +4170,8 @@ 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 \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-nacl.c ./bfd/elf-nacl.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-nacl.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-nacl.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native Client support for ELF
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 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,7 +344,7 @@ 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-nacl.h ./bfd/elf-nacl.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-nacl.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-nacl.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native Client support for ELF
-   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfnn-aarch64.c ./bfd/elfnn-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfnn-aarch64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfnn-aarch64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch64-specific support for NN-bit ELF.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -444,118 +444,118 @@ static reloc_howto_type elfNN_aarch64_ho
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 ALL_ONES,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 ALL_ONES,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffffffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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.  */
@@ -565,105 +565,105 @@ static reloc_howto_type elfNN_aarch64_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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
@@ -674,45 +674,45 @@ static reloc_howto_type elfNN_aarch64_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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.  */
@@ -722,105 +722,105 @@ static reloc_howto_type elfNN_aarch64_ho
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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).  */
@@ -830,90 +830,90 @@ static reloc_howto_type elfNN_aarch64_ho
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7ffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* src_mask */
 	 0xfff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Relocations for control-flow instructions.  */
 
@@ -922,120 +922,120 @@ static reloc_howto_type elfNN_aarch64_ho
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3fff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7ffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffe,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xff8,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xff0,			/* src_mask */
 	 0xff0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+	 false),		/* pcrel_offset */
 
   /* Set a load-literal immediate field to bits
      0x1FFFFC of G(S)-P */
@@ -1043,15 +1043,15 @@ static reloc_howto_type elfNN_aarch64_ho
 	 2,				/* rightshift */
 	 2,				/* size (0 = byte,1 = short,2 = long) */
 	 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 */
+	 false,				/* partial_inplace */
 	 0xffffe0,			/* 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.  */
@@ -1059,90 +1059,90 @@ static reloc_howto_type elfNN_aarch64_ho
 	 12,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xff8,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7ff8,			/* 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.  */
@@ -1150,15 +1150,15 @@ static reloc_howto_type elfNN_aarch64_ho
 	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x5ffc,		/* 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.  */
@@ -1166,15 +1166,15 @@ static reloc_howto_type elfNN_aarch64_ho
 	 3,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7ff8,		/* 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.  */
@@ -1182,218 +1182,218 @@ static reloc_howto_type elfNN_aarch64_ho
 	 12,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xff8,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1ffffc,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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.  */
@@ -1401,484 +1401,484 @@ static reloc_howto_type elfNN_aarch64_ho
 	 12,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7fc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7fc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x7fc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x3ffc00,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x0ffffe0,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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.  */
@@ -1886,192 +1886,192 @@ static reloc_howto_type elfNN_aarch64_ho
 	 12,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0x1fffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xff8,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffc,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xfff,			/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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 */
+	 false,			/* partial_inplace */
 	 0xffff,		/* 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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 */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* 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) */
 	 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 */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* 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) */
 	 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 */
+	 true,			/* partial_inplace */
 	 0xffffffff,		/* 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) */
 	 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 */
+	 true,			/* partial_inplace */
 	 ALL_ONES,		/* 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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),
 };
@@ -2157,15 +2157,15 @@ static reloc_howto_type elfNN_aarch64_ho
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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 *
@@ -2547,7 +2547,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 +2570,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.  */
@@ -2646,9 +2643,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;
 
@@ -2685,20 +2679,9 @@ struct elf_aarch64_link_hash_table
   /* 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,7 +2711,6 @@ elfNN_aarch64_link_hash_newfunc (struct
 				     table, string));
   if (ret != NULL)
     {
-      ret->dyn_relocs = NULL;
       ret->got_type = GOT_UNKNOWN;
       ret->plt_got_offset = (bfd_vma) - 1;
       ret->stub_cache = NULL;
@@ -2807,7 +2789,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 +2837,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 +2854,11 @@ 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 ATTRIBUTE_UNUSED,
+				      bool dynamic ATTRIBUTE_UNUSED)
 {
-  unsigned int isym_sto = isym->st_other & ~ELF_ST_VISIBILITY (-1);
+  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 +2898,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 +2918,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 +2944,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,7 +2957,7 @@ 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;
@@ -3099,13 +3050,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 +3101,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 +3180,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 +3212,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 +3227,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;
@@ -3291,10 +3242,22 @@ aarch64_build_one_stub (struct bfd_hash_
   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_aarch64_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.  */
@@ -3397,13 +3360,13 @@ 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.  */
 
-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;
@@ -3428,7 +3391,7 @@ aarch64_size_one_stub (struct bfd_hash_e
     case aarch64_stub_erratum_843419_veneer:
       {
 	if (htab->fix_erratum_843419 == ERRAT_ADR)
-	  return TRUE;
+	  return true;
 	size = sizeof (aarch64_erratum_843419_stub);
       }
       break;
@@ -3438,7 +3401,7 @@ aarch64_size_one_stub (struct bfd_hash_e
 
   size = (size + 7) & ~7;
   stub_entry->stub_sec->size += size;
-  return TRUE;
+  return true;
 }
 
 /* External entry points for sizing and building linker stubs.  */
@@ -3456,11 +3419,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 +3497,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 +3518,97 @@ 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_BITS(x, pos, n) (((x) >> (pos)) & ((1 << (n)) - 1))
 
@@ -3663,9 +3655,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 +3668,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 +3706,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 +3742,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 +3776,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 +3796,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 +3814,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 +3822,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 +3831,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 +3843,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 +3891,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 +3901,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 +3921,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 +3951,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 +3974,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 +3989,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 +4014,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 +4022,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;
 }
 
 
@@ -4128,7 +4121,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 +4134,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 +4158,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 +4168,7 @@ _bfd_aarch64_erratum_843419_fixup (uint3
   stub_entry->veneered_insn = insn;
   stub_entry->output_name = stub_name;
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4188,21 +4181,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 +4206,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 +4240,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,7 +4250,7 @@ _bfd_aarch64_erratum_843419_scan (bfd *i
     }
   while (0);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -4266,7 +4260,7 @@ _bfd_aarch64_erratum_843419_scan (bfd *i
    PC-relative calls to a target that is unreachable with a "bl"
    instruction.  */
 
-bfd_boolean
+bool
 elfNN_aarch64_size_stubs (bfd *output_bfd,
 			  bfd *stub_bfd,
 			  struct bfd_link_info *info,
@@ -4276,8 +4270,8 @@ 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;
+  bool stub_changed = false;
   struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
   unsigned int num_erratum_835769_fixes = 0;
 
@@ -4313,9 +4307,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,11 +4331,15 @@ 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);
@@ -4353,6 +4357,10 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 	  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)
@@ -4556,7 +4564,7 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 
 		  stub_entry =
 		    aarch64_stub_hash_lookup (&htab->stub_hash_table,
-					      stub_name, FALSE, FALSE);
+					      stub_name, false, false);
 		  if (stub_entry != NULL)
 		    {
 		      /* The proper stub has already been created.  */
@@ -4594,7 +4602,7 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 		  snprintf (stub_entry->output_name, len, STUB_ENTRY_NAME,
 			    sym_name);
 
-		  stub_changed = TRUE;
+		  stub_changed = true;
 		}
 
 	      /* We're done with the internal relocs, free them.  */
@@ -4610,13 +4618,13 @@ elfNN_aarch64_size_stubs (bfd *output_bf
 
       /* Ask the linker to do its stuff.  */
       (*htab->layout_sections_again) ();
-      stub_changed = FALSE;
+      stub_changed = false;
     }
 
-  return TRUE;
+  return true;
 
-error_ret_free_local:
-  return FALSE;
+ error_ret_free_local:
+  return false;
 }
 
 /* Build all the stubs associated with the current output file.  The
@@ -4625,7 +4633,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 +4655,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 +4669,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 +4839,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 +4874,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;
     }
@@ -4881,7 +4889,7 @@ static bfd_reloc_code_real_type
 aarch64_tls_transition_without_check (bfd_reloc_code_real_type r_type,
 				      struct elf_link_hash_entry *h)
 {
-  bfd_boolean is_local = h == NULL;
+  bool is_local = h == NULL;
 
   switch (r_type)
     {
@@ -5019,7 +5027,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 +5038,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
@@ -5202,7 +5210,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 +5228,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 +5252,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 +5280,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));
@@ -5350,11 +5358,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 +5373,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 +5398,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 +5427,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 +5441,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 +5515,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
@@ -5685,7 +5693,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 +5724,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 +5769,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 +5807,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 +5855,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:
@@ -5881,6 +5889,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 +5913,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 +5928,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 +5945,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 +5961,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 +6010,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 +6063,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 +6077,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 +6151,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 +6171,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 +6190,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 +6250,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 +6262,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 +6272,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
@@ -6286,7 +6309,7 @@ elfNN_aarch64_tls_relax (struct elf_aarc
 			 bfd_byte *contents, Elf_Internal_Rela *rel,
 			 struct elf_link_hash_entry *h)
 {
-  bfd_boolean is_local = h == NULL;
+  bool is_local = h == NULL;
   unsigned int r_type = ELFNN_R_TYPE (rel->r_info);
   unsigned long insn;
 
@@ -6674,7 +6697,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 +6713,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 +6737,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);
@@ -6747,7 +6770,7 @@ elfNN_aarch64_relocate_section (bfd *out
 	    (*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 +6779,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 +6790,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,
@@ -6839,9 +6862,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 +6885,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 +6979,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 +7035,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 +7105,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 +7127,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 +7142,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 +7161,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 +7192,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 +7205,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 +7219,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 +7263,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 +7273,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 +7292,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 +7315,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 +7331,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 +7372,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 +7399,7 @@ elfNN_aarch64_adjust_dynamic_symbol (str
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     /* Otherwise, reset to -1.  */
@@ -7411,7 +7417,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 +7425,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 +7448,7 @@ elfNN_aarch64_adjust_dynamic_symbol (str
       if (!need_copy_relocation_p (eh))
 	{
 	  h->non_got_ref = 0;
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -7481,7 +7487,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 +7497,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 +7516,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 +7527,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 +7547,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 +7555,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 +7580,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 +7606,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 +7659,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 +7690,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 +7724,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 +7743,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 +7818,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 +7839,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 +7857,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 +7924,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 +7967,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 +7990,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 +8012,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 +8064,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 +8130,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 +8146,13 @@ 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;
 }
 
 /* A structure used to record a list of sections, independently
@@ -8251,7 +8263,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 +8281,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 +8296,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 +8314,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 +8325,32 @@ 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_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 +8359,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,
@@ -8390,7 +8402,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 +8411,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 +8419,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,7 +8453,7 @@ unrecord_section_via_map_over_sections (
   unrecord_section_with_aarch64_elf_section_data (sec);
 }
 
-static bfd_boolean
+static bool
 elfNN_aarch64_close_and_cleanup (bfd *abfd)
 {
   if (abfd->sections)
@@ -8451,7 +8463,7 @@ elfNN_aarch64_close_and_cleanup (bfd *ab
   return _bfd_elf_close_and_cleanup (abfd);
 }
 
-static bfd_boolean
+static bool
 elfNN_aarch64_bfd_free_cached_info (bfd *abfd)
 {
   if (abfd->sections)
@@ -8465,13 +8477,13 @@ elfNN_aarch64_bfd_free_cached_info (bfd
    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 +8492,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 +8510,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 +8522,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 +8531,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 +8606,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 +8619,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 +8679,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 +8695,8 @@ 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;
 
   /* In the shared -Bsymbolic case, discard space allocated for
      dynamic pc-relative relocs against symbols which turn out to be
@@ -8704,7 +8716,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 +8729,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 +8741,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 +8764,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 +8772,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 +8789,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 +8812,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 +8820,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 +8852,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 +8964,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 +9007,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 +9038,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 +9055,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 +9096,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 +9109,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 +9269,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 +9285,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 +9295,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 +9352,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 +9415,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 +9431,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 +9477,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 +9520,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 +9554,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 +9605,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 +9626,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 +9641,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 +9660,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 +9709,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 +9749,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.  */
@@ -9889,7 +9838,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 +9885,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,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfnn-ia64.c ./bfd/elfnn-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfnn-ia64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfnn-ia64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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,7 +366,7 @@ 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.  */
@@ -370,11 +374,11 @@ elfNN_ia64_relax_section (bfd *abfd, ase
       || sec->reloc_count == 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 +387,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 +407,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 +420,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 +429,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 +444,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 +485,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 +501,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 +608,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 +625,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 +739,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 +751,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 +770,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 +785,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 +856,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 +870,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 +921,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 +939,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 +997,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 +1034,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 +1042,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 +1065,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 +1100,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 +1121,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 +1169,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 +1185,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 +1231,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 +1240,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 +1309,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 +1345,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 +1390,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 +1475,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 +1484,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 +1503,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 +1521,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 +1542,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 +1550,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 +1575,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 +1815,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 +1868,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 +1905,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 +1931,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 +2082,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 +2115,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 +2130,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 +2141,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 +2170,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 +2201,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 +2346,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 +2375,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 +2515,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 +2528,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 +2547,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 +2557,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 +2581,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 +2590,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 +2637,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 +2652,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 +2670,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 +2687,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 +2711,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 +2727,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 +2739,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 +2752,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 +2789,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 +2813,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 +2821,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 +2832,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 +2882,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 +2949,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 +2972,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 +2982,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 +2993,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 +3082,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 +3090,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 +3106,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 +3146,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 +3161,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 +3182,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 +3192,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 +3248,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 +3261,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 +3281,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 +3301,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 +3360,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 +3439,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 +3465,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 +3537,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 +3549,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 +3598,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 +3664,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 +3678,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 +3695,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 +3706,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 +3733,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 +3752,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 +3773,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 +3794,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 +3810,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 +3820,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 +3835,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 +3852,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 +3891,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 +3901,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 +3932,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 +3955,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 +4023,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 +4033,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 +4044,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 +4055,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 +4083,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 +4124,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 +4178,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 +4232,7 @@ elfNN_ia64_relocate_section (bfd *output
 						      symtab_hdr,
 						      sym,
 						      sym_sec));
-	      ret_val = FALSE;
+	      ret_val = false;
 	      continue;
 	    }
 	  goto finish_pcrel;
@@ -4426,7 +4387,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 +4411,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 +4425,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 +4433,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 +4497,7 @@ missing_tls_sec:
 		break;
 	      }
 
-	    ret_val = FALSE;
+	    ret_val = false;
 	  }
 	  break;
 	}
@@ -4545,7 +4506,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 +4517,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 +4544,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 +4594,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 +4606,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 +4674,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 +4724,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 +4742,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 +4751,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 +4760,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 +4769,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 +4779,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 +4804,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 +4836,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 +4844,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 +4860,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 +4875,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 +4885,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 +4926,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 +4977,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 +5079,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfnn-riscv.c ./bfd/elfnn-riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfnn-riscv.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfnn-riscv.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on TILE-Gx and MIPS targets.
@@ -31,6 +31,13 @@
 #include "elfxx-riscv.h"
 #include "elf/riscv.h"
 #include "opcode/riscv.h"
+#include "objalloc.h"
+#include "cpu-riscv.h"
+
+#include <limits.h>
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
 
 /* Internal relocations used exclusively by the relaxation pass.  */
 #define R_RISCV_DELETE (R_RISCV_max + 1)
@@ -61,19 +68,16 @@ 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 +102,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"
 
@@ -108,20 +120,43 @@ struct riscv_elf_link_hash_table
   /* 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;
+
+  /* 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;
+
+  /* Re-run the relaxations from relax pass 0 if TRUE.  */
+  bool restart_relax;
+
+  /* The data segment phase, don't relax the section
+     when it is exp_seg_relro_adjust.  */
+  int *data_segment_phase;
 };
 
+/* 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)
 
-static bfd_boolean
+static bool
 riscv_info_to_howto_rela (bfd *abfd,
 			  arelent *cache_ptr,
 			  Elf_Internal_Rela *dst)
@@ -141,26 +176,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 +210,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 +222,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 +232,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 +257,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 +297,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 +404,27 @@ riscv_elf_link_hash_table_create (bfd *a
     }
 
   ret->max_alignment = (bfd_vma) -1;
+  ret->restart_relax = false;
+
+  /* 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 +435,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 +446,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 +463,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 +480,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 +500,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 +531,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 +546,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 +555,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 +567,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 +582,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 +596,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 +637,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;
@@ -551,11 +659,36 @@ 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;
+
+	  /* 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];
@@ -564,12 +697,38 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 	}
 
+      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)
 	{
 	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:
@@ -577,36 +736,52 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	    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;
+	  /* Fall through.  */
 
-	case R_RISCV_CALL:
 	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;
@@ -631,15 +806,23 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	  /* 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
@@ -662,21 +845,28 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	     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.  */
+	     symbol.
+
+	     Generate dynamic pointer relocation against STT_GNU_IFUNC
+	     symbol in the non-code section (R_RISCV_32/R_RISCV_64).  */
 	  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)
+	       && ((r != NULL && !r->pc_relative)
 		   || (h != NULL
-		       && (! info->symbolic
+		       && (!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)))
+		      || !h->def_regular))
+	      || (!bfd_link_pic (info)
+		  && h != NULL
+		  && h->type == STT_GNU_IFUNC
+		  && (sec->flags & SEC_CODE) == 0))
 	    {
 	      struct elf_dyn_relocs *p;
 	      struct elf_dyn_relocs **head;
@@ -688,16 +878,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 +898,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 +914,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;
@@ -744,12 +934,12 @@ riscv_elf_check_relocs (bfd *abfd, struc
 
 	case R_RISCV_GNU_VTINHERIT:
 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
+	    return false;
 	  break;
 
 	case R_RISCV_GNU_VTENTRY:
 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
+	    return false;
 	  break;
 
 	default:
@@ -757,7 +947,7 @@ riscv_elf_check_relocs (bfd *abfd, struc
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 static asection *
@@ -778,30 +968,13 @@ riscv_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 = 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;
-}
-
 /* 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
 riscv_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h)
 {
@@ -830,9 +1003,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 +1016,7 @@ riscv_elf_adjust_dynamic_symbol (struct
 	  h->needs_plt = 0;
 	}
 
-      return TRUE;
+      return true;
     }
   else
     h->plt.offset = (bfd_vma) -1;
@@ -856,7 +1030,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 +1041,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 +1105,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 +1143,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))
@@ -1003,7 +1191,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 +1200,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;
@@ -1045,9 +1233,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 +1248,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 +1261,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 +1274,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 +1297,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 +1306,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 +1460,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 +1508,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 +1517,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 +1555,10 @@ 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;
-    }
-
-  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_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;
-	}
+	return false;
     }
-#undef add_dynamic_entry
 
-  return TRUE;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, true);
 }
 
 #define TP_OFFSET 0
@@ -1412,7 +1593,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;
 
@@ -1471,27 +1652,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,16 +1681,16 @@ 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;
 
     case R_RISCV_32:
@@ -1539,9 +1720,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 +1739,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 +1784,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 +1815,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 +1901,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.  */
+	  if (asprintf (&string,
+			_("%%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)) == -1)
+	    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 +1969,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 +1982,15 @@ 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;
+  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,15 +2001,15 @@ 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)
@@ -1799,16 +2020,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 +2067,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
@@ -1875,7 +2332,7 @@ riscv_elf_relocate_section (bfd *output_
 	case R_RISCV_GOT_HI20:
 	  if (h != NULL)
 	    {
-	      bfd_boolean dyn, pic;
+	      bool dyn, pic;
 
 	      off = h->got.offset;
 	      BFD_ASSERT (off != (bfd_vma) -1);
@@ -1907,7 +2364,7 @@ riscv_elf_relocate_section (bfd *output_
 		    }
 		}
 	      else
-		unresolved_reloc = FALSE;
+		unresolved_reloc = false;
 	    }
 	  else
 	    {
@@ -1946,21 +2403,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:
@@ -1987,30 +2452,30 @@ 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:
+	  /* This line has to match the check in _bfd_riscv_relax_section.  */
 	  if (bfd_link_pic (info) && h != NULL && h->plt.offset != MINUS_ONE)
 	    {
 	      /* Refer to the PLT entry.  */
 	      relocation = sec_addr (htab->elf.splt) + h->plt.offset;
-	      unresolved_reloc = FALSE;
+	      unresolved_reloc = false;
 	    }
 	  break;
 
@@ -2029,10 +2494,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 +2507,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 +2526,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 +2555,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;
@@ -2116,7 +2577,7 @@ riscv_elf_relocate_section (bfd *output_
 		   || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		       && !resolved_to_zero)
 		   || h->root.type != bfd_link_hash_undefweak)
-	       && (! howto->pc_relative
+	       && (!howto->pc_relative
 		   || !SYMBOL_CALLS_LOCAL (info, h)))
 	      || (!bfd_link_pic (info)
 		  && h != NULL
@@ -2128,7 +2589,8 @@ riscv_elf_relocate_section (bfd *output_
 		      || h->root.type == bfd_link_hash_undefined)))
 	    {
 	      Elf_Internal_Rela outrel;
-	      bfd_boolean skip_static_relocation, skip_dynamic_relocation;
+	      asection *sreloc;
+	      bool skip_static_relocation, skip_dynamic_relocation;
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
@@ -2157,6 +2619,7 @@ riscv_elf_relocate_section (bfd *output_
 		  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)
 		continue;
@@ -2164,7 +2627,7 @@ riscv_elf_relocate_section (bfd *output_
 	  break;
 
 	case R_RISCV_TLS_GOT_HI20:
-	  is_ie = TRUE;
+	  is_ie = true;
 	  /* Fall through.  */
 
 	case R_RISCV_TLS_GD_HI20:
@@ -2193,14 +2656,14 @@ 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;
+		  bool dyn, pic;
 		  dyn = htab->elf.dynamic_sections_created;
 		  pic = bfd_link_pic (info);
 
@@ -2215,7 +2678,7 @@ riscv_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;
 
 	      if (tls_type & GOT_TLS_GD)
 		{
@@ -2232,14 +2695,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 +2719,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 +2731,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 +2749,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:
@@ -2306,7 +2770,6 @@ riscv_elf_relocate_section (bfd *output_
 	{
 	  switch (r_type)
 	    {
-	    case R_RISCV_CALL:
 	    case R_RISCV_JAL:
 	    case R_RISCV_RVC_JUMP:
 	      if (asprintf (&msg_buf,
@@ -2332,6 +2795,7 @@ riscv_elf_relocate_section (bfd *output_
 	  r = bfd_reloc_notsupported;
 	}
 
+ do_relocation:
       if (r == bfd_reloc_ok)
 	r = perform_relocation (howto, rel, relocation, input_section,
 				input_bfd, contents);
@@ -2354,7 +2818,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 +2848,17 @@ 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);
+      /* Free the unused `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 +2866,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 +2879,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 +2996,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 +3006,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 +3089,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 +3097,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 +3140,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 +3194,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 +3214,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 +3236,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 +3251,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 +3281,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 +3342,70 @@ 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.  */
+/* Check if the versions are compatible.  */
 
-static bfd_boolean
-riscv_non_std_sv_ext_p (const char *name)
-{
-  return (strlen (name) >= 3) && (name[0] == 's') && (name[1] == 'x');
-}
-
-/* Error handler when version mis-match.  */
-
-static void
+static bool
 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);
+  if (in == NULL || out == NULL)
+    return true;
+
+  /* Since there are no version conflicts for now, we just report
+     warning when the versions are mis-matched.  */
+  if (in->major_version != out->major_version
+      || in->minor_version != out->minor_version)
+    {
+      if ((in->major_version == RISCV_UNKNOWN_VERSION
+	   && in->minor_version == RISCV_UNKNOWN_VERSION)
+	  || (out->major_version == RISCV_UNKNOWN_VERSION
+	      && out->minor_version == RISCV_UNKNOWN_VERSION))
+	{
+	  /* Do not report the warning when the version of input
+	     or output is RISCV_UNKNOWN_VERSION, since the extension
+	     is added implicitly.  */
+	}
+      else
+	_bfd_error_handler
+	  (_("warning: %pB: mis-matched ISA version %d.%d for '%s' "
+	     "extension, the output version is %d.%d"),
+	   ibfd,
+	   in->major_version,
+	   in->minor_version,
+	   in->name,
+	   out->major_version,
+	   out->minor_version);
+
+      /* Update the output ISA versions to the newest ones.  */
+      if ((in->major_version > out->major_version)
+	  || (in->major_version == out->major_version
+	      && in->minor_version > out->minor_version))
+	{
+	  out->major_version = in->major_version;
+	  out->minor_version = in->minor_version;
+	}
+    }
+
+  return true;
 }
 
 /* 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 +3414,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,13 +3429,12 @@ 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,
@@ -2820,29 +3448,24 @@ riscv_merge_std_ext (bfd *ibfd,
 
   /* 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 if (!riscv_version_mismatch (ibfd, in, out))
+    return false;
   else
     riscv_add_subset (&merged_subsets,
-		      in->name, in->major_version, in->minor_version);
+		      out->name, out->major_version, out->minor_version);
 
   in = in->next;
   out = out->next;
@@ -2850,28 +3473,24 @@ 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)
-	continue;
+      find_in = riscv_lookup_subset (&in_subsets, find_ext, &ext_in);
+      find_out = riscv_lookup_subset (&out_subsets, find_ext, &ext_out);
 
-      /* 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)
+	continue;
 
-      struct riscv_subset_t *merged = find_in ? find_in : find_out;
-      riscv_add_subset (&merged_subsets, merged->name,
-			merged->major_version, merged->minor_version);
+      if (find_in
+	  && find_out
+	  && !riscv_version_mismatch (ibfd, ext_in, ext_out))
+	return false;
+
+      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 +3500,69 @@ 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 (bfd *ibfd,
+			      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.  */
+	  if (!riscv_version_mismatch (ibfd, in, out))
+	    return false;
+
+	  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.  */
@@ -2949,13 +3580,19 @@ riscv_merge_arch_attr_info (bfd *ibfd, c
   riscv_parse_subset_t rpe_in;
   riscv_parse_subset_t rpe_out;
 
+  /* Only assembler needs to check the default version of ISA, so just set
+     the rpe_in.get_default_version and rpe_out.get_default_version to NULL.  */
   rpe_in.subset_list = &in_subsets;
   rpe_in.error_handler = _bfd_error_handler;
   rpe_in.xlen = &xlen_in;
+  rpe_in.get_default_version = NULL;
+  rpe_in.check_unknown_prefixed_ext = false;
 
   rpe_out.subset_list = &out_subsets;
   rpe_out.error_handler = _bfd_error_handler;
   rpe_out.xlen = &xlen_out;
+  rpe_out.get_default_version = NULL;
+  rpe_out.check_unknown_prefixed_ext = false;
 
   if (in_arch == NULL && out_arch == NULL)
     return NULL;
@@ -2966,7 +3603,7 @@ riscv_merge_arch_attr_info (bfd *ibfd, c
   if (in_arch != NULL && out_arch == NULL)
     return in_arch;
 
-  /* Parse subset from arch string.  */
+  /* Parse subset from ISA string.  */
   if (!riscv_parse_subset (&rpe_in, in_arch))
     return NULL;
 
@@ -2978,7 +3615,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 +3626,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 (ibfd, &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 +3660,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 +3692,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 +3708,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 +3802,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 +3819,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 +3830,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 +3845,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 +3863,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,16 +3915,16 @@ _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;
+  return true;
 
-fail:
+ fail:
   bfd_set_error (bfd_error_bad_value);
-  return FALSE;
+  return false;
 }
 
 /* Delete some bytes from a section while relaxing.  */
 
-static bfd_boolean
+static bool
 riscv_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, size_t count,
 			  struct bfd_link_info *link_info)
 {
@@ -3294,8 +3987,9 @@ riscv_relax_delete_bytes (bfd *abfd, ase
 	 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
+	 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
@@ -3334,7 +4028,7 @@ riscv_relax_delete_bytes (bfd *abfd, ase
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* A second format for recording PC-relative hi relocations.  This stores the
@@ -3348,7 +4042,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 +4061,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 +4079,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 +4098,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 +4115,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 +4135,55 @@ 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);
+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,
+		       bool *again,
 		       riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
-		       bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+		       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 +4191,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 +4221,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,10 +4237,10 @@ _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;
+  *again = true;
   return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + len, 8 - len,
 				   link_info);
 }
@@ -3568,9 +4262,9 @@ _bfd_riscv_get_max_alignment (asection *
   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,9 +4273,9 @@ _bfd_riscv_relax_lui (bfd *abfd,
 		      bfd_vma symval,
 		      bfd_vma max_alignment,
 		      bfd_vma reserve_size,
-		      bfd_boolean *again,
+		      bool *again,
 		      riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
-		      bfd_boolean undefined_weak)
+		      bool undefined_weak)
 {
   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
   bfd_vma gp = riscv_global_pointer_value (link_info);
@@ -3594,8 +4288,8 @@ _bfd_riscv_relax_lui (bfd *abfd,
       /* 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;
@@ -3617,30 +4311,30 @@ _bfd_riscv_relax_lui (bfd *abfd,
 	  if (undefined_weak)
 	    {
 	      /* Change the RS1 to zero.  */
-	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
+	      bfd_vma insn = bfd_getl32 (contents + rel->r_offset);
 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
+	      bfd_putl32 (insn, contents + rel->r_offset);
 	    }
 	  else
 	    rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
-	  return TRUE;
+	  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);
+	      bfd_vma insn = bfd_getl32 (contents + rel->r_offset);
 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
+	      bfd_putl32 (insn, contents + rel->r_offset);
 	    }
 	  else
 	    rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
-	  return TRUE;
+	  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;
+	  *again = true;
 	  return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4,
 					   link_info);
 
@@ -3656,34 +4350,34 @@ _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;
+      *again = true;
       return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + 2, 2,
 				       link_info);
     }
 
-  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,30 +4386,30 @@ _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,
+			 bool *again,
 			 riscv_pcgp_relocs *prcel_relocs ATTRIBUTE_UNUSED,
-			 bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+			 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;
+      *again = true;
       return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info);
 
     default:
@@ -3723,9 +4417,10 @@ _bfd_riscv_relax_tls_le (bfd *abfd,
     }
 }
 
-/* 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 +4428,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,
+			bool *again ATTRIBUTE_UNUSED,
 			riscv_pcgp_relocs *pcrel_relocs ATTRIBUTE_UNUSED,
-			bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+			bool undefined_weak ATTRIBUTE_UNUSED)
 {
   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
   bfd_vma alignment = 1, pos;
@@ -3746,9 +4441,6 @@ _bfd_riscv_relax_align (bfd *abfd, asect
   bfd_vma aligned_addr = ((symval - 1) & ~(alignment - 1)) + alignment;
   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;
-
   /* Make sure there are enough NOPs to actually achieve the alignment.  */
   if (rel->r_addend < nop_bytes)
     {
@@ -3758,7 +4450,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,15 +4458,15 @@ _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.  */
   return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + nop_bytes,
@@ -3783,18 +4475,18 @@ _bfd_riscv_relax_align (bfd *abfd, asect
 
 /* 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)
+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 ATTRIBUTE_UNUSED,
+		     riscv_pcgp_relocs *pcgp_relocs,
+		     bool undefined_weak)
 {
   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
   bfd_vma gp = riscv_global_pointer_value (link_info);
@@ -3802,7 +4494,7 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
   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 +4512,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 +4531,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;
 
@@ -3857,8 +4549,8 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
       /* 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;
@@ -3881,9 +4573,9 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
 	    {
 	      /* 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);
+	      bfd_vma insn = bfd_getl32 (contents + rel->r_offset);
 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
+	      bfd_putl32 (insn, contents + rel->r_offset);
 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_LO12_I);
 	      rel->r_addend = hi_reloc.hi_addend;
 	    }
@@ -3892,16 +4584,16 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
 	      rel->r_addend += hi_reloc.hi_addend;
 	    }
-	  return TRUE;
+	  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);
+	      bfd_vma insn = bfd_getl32 (contents + rel->r_offset);
 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
-	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
+	      bfd_putl32 (insn, contents + rel->r_offset);
 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_LO12_S);
 	      rel->r_addend = hi_reloc.hi_addend;
 	    }
@@ -3910,7 +4602,7 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
 	      rel->r_addend += hi_reloc.hi_addend;
 	    }
-	  return TRUE;
+	  return true;
 
 	case R_RISCV_PCREL_HI20:
 	  riscv_record_pcgp_hi_reloc (pcgp_relocs,
@@ -3923,19 +4615,19 @@ _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUT
 	  /* We can delete the unnecessary AUIPC and reloc.  */
 	  rel->r_info = ELFNN_R_INFO (0, R_RISCV_DELETE);
 	  rel->r_addend = 4;
-	  return TRUE;
+	  return true;
 
 	default:
 	  abort ();
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
-/* Relax PC-relative references to GP-relative references.  */
+/* Delete the bytes for R_RISCV_DELETE.  */
 
-static bfd_boolean
+static bool
 _bfd_riscv_relax_delete (bfd *abfd,
 			 asection *sec,
 			 asection *sym_sec ATTRIBUTE_UNUSED,
@@ -3944,44 +4636,86 @@ _bfd_riscv_relax_delete (bfd *abfd,
 			 bfd_vma symval ATTRIBUTE_UNUSED,
 			 bfd_vma max_alignment ATTRIBUTE_UNUSED,
 			 bfd_vma reserve_size ATTRIBUTE_UNUSED,
-			 bfd_boolean *again ATTRIBUTE_UNUSED,
+			 bool *again,
 			 riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
-			 bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
+			 bool 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;
+  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);
+  *again = true;
+  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.  */
+/* Called by after_allocation to set the information of data segment
+   before relaxing.  */
 
-static bfd_boolean
+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;
+}
+
+/* Called by after_allocation to check if we need to run the whole
+   relaxations again.  */
+
+bool
+bfd_elfNN_riscv_restart_relax_sections (struct bfd_link_info *info)
+{
+  struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
+  bool restart = htab->restart_relax;
+  /* Reset the flag.  */
+  htab->restart_relax = false;
+  return restart;
+}
+
+/* Relax a section.
+
+   Pass 0: Shortens code sequences for LUI/CALL/TPREL relocs.
+   Pass 1: Shortens code sequences for PCREL relocs.
+   Pass 2: Deletes the bytes that pass 1 made obsolete.
+   Pass 3: Which cannot be disabled, handles code alignment directives.
+
+   The `again` is used to determine whether the relax pass itself needs to
+   run again.  And the `restart_relax` is used to determine if we need to
+   run the whole relax passes again from 0 to 2.  Once we have deleted the
+   code between relax pass 0 to 2, the restart_relax will be set to TRUE,
+   and we should run the whole relaxations again to give them more chances
+   to shorten the code.
+
+   Since we can't relax anything else once we start to handle the alignments,
+   we will only enter into the relax pass 3 when the restart_relax is FALSE.  */
+
+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;
 
-  *again = FALSE;
+  *again = false;
 
   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))
-    return TRUE;
+	  && info->relax_pass < 2)
+      || (htab->restart_relax
+	  && info->relax_pass == 3)
+      /* The exp_seg_relro_adjust is enum phase_enum (0x4),
+	 and defined in ld/ldexp.h.  */
+      || *(htab->data_segment_phase) == 4)
+    return true;
 
   riscv_init_pcgp_relocs (&pcgp_relocs);
 
@@ -4013,22 +4747,18 @@ _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;
       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
@@ -4036,7 +4766,22 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 	    relax_func = _bfd_riscv_relax_tls_le;
 	  else
 	    continue;
+	}
+      else if (info->relax_pass == 1
+	       && !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 (info->relax_pass == 2 && type == R_RISCV_DELETE)
+	relax_func = _bfd_riscv_relax_delete;
+      else if (info->relax_pass == 3 && type == R_RISCV_ALIGN)
+	relax_func = _bfd_riscv_relax_align;
+      else
+	continue;
 
+      if (info->relax_pass < 2)
+	{
 	  /* Only relax this reloc if it is paired with R_RISCV_RELAX.  */
 	  if (i == sec->reloc_count - 1
 	      || ELFNN_R_TYPE ((rel + 1)->r_info) != R_RISCV_RELAX
@@ -4046,12 +4791,6 @@ _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
-	continue;
 
       data->relocs = relocs;
 
@@ -4078,6 +4817,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,6 +4853,10 @@ _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;
+
 	  if (h->root.type == bfd_link_hash_undefweak
 	      && (relax_func == _bfd_riscv_relax_lui
 		  || relax_func == _bfd_riscv_relax_pc))
@@ -4125,10 +4874,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 +4889,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 +4946,15 @@ _bfd_riscv_relax_section (bfd *abfd, ase
 	goto fail;
     }
 
-  ret = TRUE;
+  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);
+
+  if (*again)
+    htab->restart_relax = true;
 
   return ret;
 }
@@ -4214,6 +4969,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 +4981,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 +5084,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 +5099,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 +5121,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 +5148,69 @@ 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"
+/* PR27584, Omit local and empty symbols since they usually generated
+   for pcrel relocations.  */
+
+static bool
+riscv_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
+{
+  return (!strcmp (sym->name, "")
+	  || _bfd_elf_is_local_label_name (abfd, sym->name));
+}
+
+#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_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_backend_write_core_note		riscv_write_core_note
+#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_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"
 
 #include "elfNN-target.h"
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-properties.c ./bfd/elf-properties.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-properties.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-properties.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ELF program property support.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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,33 @@ 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;
+		  goto next;
+		}
 	      break;
 	    }
 	}
@@ -186,23 +205,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 +238,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 +250,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 +331,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 +360,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 +370,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 +447,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 +470,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)
@@ -511,7 +601,7 @@ _bfd_elf_link_setup_gnu_properties (stru
   bfd *abfd, *first_pbfd = 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;
@@ -523,7 +613,7 @@ _bfd_elf_link_setup_gnu_properties (stru
 	&& (abfd->flags & DYNAMIC) == 0
 	&& elf_properties (abfd) != NULL)
       {
-	has_properties = TRUE;
+	has_properties = true;
 
 	/* Ignore GNU properties from ELF objects with different machine
 	   code or class.  Also skip objects without a GNU_PROPERTY note
@@ -656,7 +746,7 @@ _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;
     }
 
   return first_pbfd;
@@ -680,7 +770,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 +793,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;
     }
@@ -714,5 +806,5 @@ _bfd_elf_convert_gnu_properties (bfd *ib
   /* Generate the output .note.gnu.property section.  */
   elf_write_gnu_properties (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-s390-common.c ./bfd/elf-s390-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-s390-common.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-s390-common.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-s390.h ./bfd/elf-s390.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-s390.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-s390.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* S/390-specific support for ELF.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-strtab.c ./bfd/elf-strtab.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-strtab.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-strtab.c	2021-12-16 01:57:38.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-2021 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)
@@ -141,7 +141,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 +152,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 +245,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 +299,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;
+    return false;
 
   for (i = 1; i < tab->size; ++i)
     {
@@ -325,13 +330,13 @@ _bfd_elf_strtab_emit (register bfd *abfd
 
       str = tab->array[i]->root.string;
       if (bfd_bwrite (str, len, abfd) != len)
-	return FALSE;
+	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 +444,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-vxworks.c ./bfd/elf-vxworks.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-vxworks.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-vxworks.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* VxWorks support for ELF
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-vxworks.h ./bfd/elf-vxworks.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elf-vxworks.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elf-vxworks.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* VxWorks support for ELF
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-aarch64.c ./bfd/elfxx-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-aarch64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-aarch64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch64-specific support for ELF.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-aarch64.h ./bfd/elfxx-aarch64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-aarch64.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-aarch64.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch64-specific backend routines.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-ia64.c ./bfd/elfxx-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-ia64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-ia64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -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",	   3, 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",	   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),
   };
 
 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
@@ -685,7 +685,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 +714,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 +744,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-ia64.h ./bfd/elfxx-ia64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-ia64.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-ia64.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-mips.c ./bfd/elfxx-mips.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-mips.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-mips.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS-specific support for ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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,7 @@ 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;
 };
 
 /* MIPS ELF private object data.  */
@@ -569,7 +564,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;
@@ -633,7 +628,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 +698,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 +755,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 *);
@@ -904,7 +899,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 +915,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 +1030,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 +1282,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 +1343,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 +1358,24 @@ 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
+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 +1385,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)
 {
@@ -1413,18 +1410,23 @@ _bfd_mips_elf_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 = 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 = (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 *);
@@ -1442,34 +1444,22 @@ _bfd_mips_elf_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);
+  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);
+  return false;
 }
 
 /* Swap RPDR (runtime procedure table entry) for output.  */
@@ -1492,7 +1482,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 +1603,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 +1642,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 +1654,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 +1671,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 +1684,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 +1695,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 +1753,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 +1825,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 +1834,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 +1851,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 +1889,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 +1900,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 +1913,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 +1929,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 +1945,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 +1955,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 +1966,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 +1991,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 +2028,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 +2042,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 +2056,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 +2152,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,16 +2171,16 @@ 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;
@@ -2211,7 +2190,7 @@ micromips_reloc_p (unsigned int r_type)
    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.  */
 
-static inline bfd_boolean
+static inline bool
 micromips_reloc_shuffle_p (unsigned int r_type)
 {
   return (micromips_reloc_p (r_type)
@@ -2219,7 +2198,7 @@ micromips_reloc_shuffle_p (unsigned int
 	  && r_type != R_MICROMIPS_PC10_S1);
 }
 
-static inline bfd_boolean
+static inline bool
 got16_reloc_p (int r_type)
 {
   return (r_type == R_MIPS_GOT16
@@ -2227,7 +2206,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 +2214,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 +2253,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 +2262,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 +2276,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 +2289,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 +2306,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 +2322,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 +2330,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 +2338,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
@@ -2369,7 +2348,7 @@ tls_gottprel_reloc_p (unsigned int r_typ
 
 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;
 
@@ -2392,7 +2371,7 @@ _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;
 
@@ -2423,7 +2402,7 @@ _bfd_mips_elf_reloc_shuffle (bfd *abfd,
 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;
@@ -2558,10 +2537,10 @@ _bfd_mips_elf_lo16_reloc (bfd *abfd, are
   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     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,
+  _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, false,
 			       location);
 
   while (mips_hi16_list != NULL)
@@ -2577,11 +2556,11 @@ _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.  */
@@ -2614,7 +2593,7 @@ _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);
 
@@ -2659,11 +2638,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 +2894,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 +3052,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.  */
@@ -3128,7 +3107,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 +3187,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 +3226,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 +3298,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 +3311,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 +3392,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 +3419,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 +3428,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 +3504,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 +3587,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 +3610,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 +3676,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 +3740,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 +3818,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 +3871,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 +3882,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 +3921,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 +3936,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 +3965,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 +3986,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 +3994,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 +4035,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 +4045,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 +4066,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 +4091,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 +4120,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 +4160,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 +4198,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 +4273,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 +4287,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 +4296,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 +4316,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 +4325,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 +4354,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 +4362,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 +4399,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 +4447,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 +4458,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 +4467,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 +4479,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 +4500,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 +4530,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 +4549,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 +4675,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 +4683,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 +4704,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 +4727,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 +4746,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 +4856,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 +4871,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 +4886,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 +4921,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 +5000,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 +5029,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 +5049,7 @@ mips_elf_multi_got (bfd *abfd, struct bf
     mips_elf_allocate_dynamic_relocations (dynobj, info,
 					   needed_relocs);
 
-  return TRUE;
+  return true;
 }
 
 
@@ -5099,7 +5078,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 +5092,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 +5115,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 +5167,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 +5182,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 +5206,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 +5216,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 +5225,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 +5237,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 +5250,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 +5274,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 +5284,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 +5297,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 +5347,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 +5367,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 +5375,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 +5408,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 +5434,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 +5469,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 +5489,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 +5564,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 +5623,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 +5688,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 +5758,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
@@ -5840,7 +5820,7 @@ mips_elf_calculate_relocation (bfd *abfd
       if (resolved_to_zero
 	  && !bfd_link_relocatable (info)
 	  && mips_elf_nullify_got_load (input_bfd, contents,
-					relocation, howto, TRUE))
+					relocation, howto, true))
 	return bfd_reloc_continue;
 
       /* Fall through.  */
@@ -5854,7 +5834,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 +5901,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 +5921,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 +5946,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
@@ -6223,7 +6203,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 +6506,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 +6521,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 +6544,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 +6578,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 +6623,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 +6634,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 +6680,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 +6688,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 +6701,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 +6709,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 +6727,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 +6735,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 +6752,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 +6761,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 +6792,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 +6802,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 +6848,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 +6907,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.  */
@@ -7077,15 +7058,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,19 +7091,6 @@ _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;
 
@@ -7129,19 +7103,6 @@ _bfd_mips_elf_symbol_processing (bfd *ab
 	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;
@@ -7240,7 +7201,7 @@ _bfd_mips_elf_eh_frame_address_size (bfd
     return 8;
   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_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 +7237,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 +7248,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 +7266,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;
+	return false;
     }
 
   if (hdr->sh_type == SHT_MIPS_OPTIONS
@@ -7359,10 +7320,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;
+		return false;
 	    }
 	  else if (intopt.kind == ODK_REGINFO)
 	    {
@@ -7374,10 +7335,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;
+		return false;
 	    }
 	  l += intopt.size;
 	}
@@ -7415,17 +7376,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 +7400,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 +7489,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 +7510,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;
     }
@@ -7562,12 +7525,12 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
 
       contents = bfd_malloc (hdr->sh_size);
       if (contents == NULL)
-	return FALSE;
+	return false;
       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
 				      0, hdr->sh_size))
 	{
 	  free (contents);
-	  return FALSE;
+	  return false;
 	}
       l = contents;
       lend = contents + hdr->sh_size;
@@ -7613,14 +7576,14 @@ _bfd_mips_elf_section_from_shdr (bfd *ab
       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 +7596,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 +7653,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 +7665,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 +7689,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 +7715,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 +7724,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 +7756,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,7 +7770,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
       && (strcmp (*namep, "_gp_disp") == 0))
     {
       *namep = NULL;
-      return TRUE;
+      return true;
     }
 
   switch (sym->st_shndx)
@@ -7820,7 +7785,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd
       /* 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 +7795,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 +7836,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 +7885,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 +7895,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 +7907,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 +7937,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 +7955,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 +7978,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 +7989,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 +8008,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 +8018,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 +8059,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 +8068,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 +8082,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 +8092,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 +8100,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 +8126,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);
@@ -8184,9 +8149,9 @@ mips_elf_read_rel_addend (bfd *abfd, con
   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,7 +8169,7 @@ 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,
 			      const Elf_Internal_Rela *rel,
 			      const Elf_Internal_Rela *relend,
@@ -8244,10 +8209,10 @@ 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);
+  lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, false);
   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
 
   l <<= lo16_howto->rightshift;
@@ -8255,24 +8220,24 @@ mips_elf_add_lo16_rel_addend (bfd *abfd,
 
   *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 +8266,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 +8284,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 +8294,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 +8325,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 +8357,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 +8383,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 +8406,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 +8424,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 +8457,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 +8483,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 +8509,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 +8532,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 +8550,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 +8582,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 +8598,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 +8614,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 +8629,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 +8648,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 +8673,18 @@ _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))
+					      false))
 		if (!mips_elf_define_absolute_zero (abfd, info, htab, r_type))
-		  return FALSE;
+		  return false;
 	    }
 
 	  /* Fall through.  */
@@ -8741,17 +8704,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 +8723,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 +8735,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 +8752,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 +8776,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 +8794,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 +8806,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 +8820,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 +8833,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 +8853,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 +8866,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,8 +8896,8 @@ _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);
+		    return false;
+		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, false);
 		  addend = mips_elf_read_rel_addend (abfd, rel,
 						     howto, contents);
 		  if (got16_reloc_p (r_type))
@@ -8944,7 +8910,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 +8931,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 +8960,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 +8982,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 +9017,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 +9043,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 +9073,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 +9092,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 +9164,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 +9185,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 +9202,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 +9230,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 +9246,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 +9255,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 +9271,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 +9297,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 +9311,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 +9333,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 +9348,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 +9408,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 +9419,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 +9436,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 +9458,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 +9485,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 +9506,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 +9531,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 +9549,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 +9578,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 +9606,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 +9614,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 +9626,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 +9646,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 +9671,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 +9693,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 +9706,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 +9759,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 +9774,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 +9783,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 +9792,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 +9814,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 +9831,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 +9844,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 +9880,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 +9888,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 +9934,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 +9945,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 +9976,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 +9992,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 +10011,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 +10030,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 +10048,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 +10063,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 +10092,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 +10109,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 +10140,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 +10165,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 +10294,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 +10323,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 +10333,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 +10341,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 +10400,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,7 +10417,7 @@ _bfd_mips_elf_relocate_section (bfd *out
 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
 					 relocs, rel))
 	    {
-	      rela_relocation_p = FALSE;
+	      rela_relocation_p = false;
 	      addend = mips_elf_read_rel_addend (input_bfd, rel,
 						 howto, contents);
 	      if (hi16_reloc_p (r_type)
@@ -10533,8 +10516,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 +10531,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 +10558,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)
@@ -10596,7 +10579,7 @@ _bfd_mips_elf_relocate_section (bfd *out
 		  msg = _("small-data section exceeds 64KB;"
 			  " 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 +10677,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 +10711,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 +10790,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 +10846,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 +10865,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 +10912,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 +11028,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 +11062,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 +11086,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 +11274,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 +11330,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 +11355,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 +11497,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 +11534,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 +11586,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 +11615,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 +11648,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 +11747,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 +11775,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 +11786,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 +11801,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 +11839,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 +11897,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 +11917,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 +11940,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 +11963,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 +11973,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 +11983,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 +12009,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 +12074,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 +12087,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 +12102,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 +12111,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 +12124,7 @@ _bfd_mips_elf_finish_dynamic_sections (b
 	      break;
 
 	    default:
-	      swap_out_p = FALSE;
+	      swap_out_p = false;
 	      break;
 	    }
 
@@ -12173,7 +12156,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 +12173,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 +12195,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 +12206,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;
 }
 
 
@@ -12398,7 +12382,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 +12426,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 +12436,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 +12456,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 +12478,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 +12527,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 +12548,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 +12579,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 +12629,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 +12654,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 +12736,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 +12788,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 +12823,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 +12843,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 +12869,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 +12886,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 +12904,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 +12915,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 +12930,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 +12980,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 +12991,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 +13008,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,13 +13027,13 @@ _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);
@@ -13064,7 +13048,7 @@ struct mips_elf_find_line
   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 +13064,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 +13074,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 +13105,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.  */
@@ -13136,7 +13120,7 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 	  if (fi->d.fdr == NULL)
 	    {
 	      msec->flags = origflags;
-	      return FALSE;
+	      return false;
 	    }
 	  external_fdr_size = swap->external_fdr_size;
 	  fdr_ptr = fi->d.fdr;
@@ -13161,7 +13145,7 @@ _bfd_mips_elf_find_nearest_line (bfd *ab
 				  line_ptr))
 	{
 	  msec->flags = origflags;
-	  return TRUE;
+	  return true;
 	}
 
       msec->flags = origflags;
@@ -13174,13 +13158,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 +13176,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 +13187,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 +13217,32 @@ _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.  */
+  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)
+    return NULL;
 
   reloc_count = bfd_canonicalize_reloc (input_bfd,
 					input_section,
@@ -13280,7 +13267,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 +13299,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 +13370,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 +13382,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 +13398,49 @@ _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);
+
+  free (reloc_vector);
   return data;
 
-error_return:
-  if (reloc_vector != NULL)
-    free (reloc_vector);
+ error_return:
+  free (reloc_vector);
   return NULL;
 }
 
-static bfd_boolean
+static bool
 mips_elf_relax_delete_bytes (bfd *abfd,
 			     asection *sec, bfd_vma addr, int count)
 {
@@ -13453,7 +13507,7 @@ mips_elf_relax_delete_bytes (bfd *abfd,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -13732,7 +13786,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 +13801,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 +13829,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 +13848,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 +13864,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,7 +13877,7 @@ _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
@@ -13833,7 +13887,7 @@ _bfd_mips_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;
 
@@ -13850,7 +13904,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 +14024,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 +14234,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 +14243,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 +14254,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 +14285,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 +14313,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 +14335,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 +14368,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 +14379,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 +14388,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 +14401,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;
 }
@@ -14444,31 +14493,31 @@ static const struct mips_mach_extension
 
 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
 
-static bfd_boolean
+static bool
 mips_mach_extends_p (unsigned long base, unsigned long extension)
 {
   size_t i;
 
   if (extension == base)
-    return TRUE;
+    return true;
 
   if (base == bfd_mach_mipsisa32
       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
-    return TRUE;
+    return true;
 
   if (base == bfd_mach_mipsisa32r2
       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
-    return TRUE;
+    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;
+	  return true;
       }
 
-  return FALSE;
+  return false;
 }
 
 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
@@ -14577,7 +14626,7 @@ 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
@@ -14641,7 +14690,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 +14727,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 +14848,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);
 
@@ -14868,7 +14917,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 +14942,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 +14982,12 @@ _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;
+		return false;
 
 	      /* Loop through the external symbols.  For each one with
 		 interesting information, try to find the symbol in
@@ -14964,7 +15013,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;
 
@@ -15010,13 +15059,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 +15073,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 +15089,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 +15144,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 +15168,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 +15204,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 +15212,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 +15220,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 +15241,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 +15284,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 +15302,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 +15317,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 +15330,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 +15339,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 +15349,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 +15357,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 +15368,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 +15411,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 +15421,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 +15438,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 +15472,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 +15496,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 +15521,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 +15540,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 +15555,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 +15568,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 +15576,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 +15604,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 +15733,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 +15759,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 +15781,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 +15795,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 +15816,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 +15873,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 +15897,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 +15915,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 +16240,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;
@@ -16306,7 +16356,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 +16376,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 +16443,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;
@@ -16435,7 +16485,7 @@ _bfd_mips_elf_get_synthetic_symtab (bfd
     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;
 
@@ -16636,14 +16686,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 +16702,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 +16719,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-mips.h ./bfd/elfxx-mips.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-mips.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-mips.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* MIPS ELF specific backend routines.
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,60 +22,60 @@
 #include "elf/internal.h"
 #include "elf/mips.h"
 
-extern bfd_boolean _bfd_mips_elf_mkobject
+extern bool _bfd_mips_elf_mkobject
   (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 +84,51 @@ 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
+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 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 +144,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 +179,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 +188,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 +205,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-riscv.c ./bfd/elfxx-riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-riscv.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-riscv.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* RISC-V-specific support for ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on TILE-Gx and MIPS targets.
@@ -29,6 +29,7 @@
 #include "libiberty.h"
 #include "elfxx-riscv.h"
 #include "safe-ctype.h"
+#include "cpu-riscv.h"
 
 #define MINUS_ONE ((bfd_vma)0 - 1)
 
@@ -48,173 +49,173 @@ static reloc_howto_type howto_table[] =
 	 0,				/* rightshift */
 	 3,				/* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
+	 2,				/* 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 */
 	 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 */
+	 2,				/* 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 */
 	 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 */
 	 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 */
 	 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),
@@ -227,638 +228,652 @@ static reloc_howto_type howto_table[] =
 	 0,				/* rightshift */
 	 2,				/* 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 */
 	 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 */
+	 4,				/* 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 */
+	 4,				/* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
+	 3,				/* 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
 	 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 */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 NULL,				/* special_function */
 	 "R_RISCV_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_RISCV_GNU_VTENTRY,		/* type */
 	 0,				/* rightshift */
 	 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_RISCV_GNU_VTENTRY",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 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 */
+	 3,				/* 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 */
+	 1,				/* size */
+	 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 */
+	 1,				/* size */
+	 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 */
 	 0,				/* rightshift */
-	 2,				/* size */
-	 32,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 1,				/* size */
+	 16,				/* 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 */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 ENCODE_RVC_IMM (-1U),		/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 ENCODE_CITYPE_IMM (-1U),	/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* GP-relative load.  */
   HOWTO (R_RISCV_GPREL_I,		/* type */
 	 0,				/* rightshift */
 	 2,				/* 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_I",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* GP-relative store.  */
   HOWTO (R_RISCV_GPREL_S,		/* type */
 	 0,				/* rightshift */
 	 2,				/* 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 */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* TP-relative TLS LE load.  */
   HOWTO (R_RISCV_TPREL_I,		/* type */
 	 0,				/* rightshift */
 	 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_RISCV_TPREL_I",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_ITYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* TP-relative TLS LE store.  */
   HOWTO (R_RISCV_TPREL_S,		/* type */
 	 0,				/* rightshift */
 	 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_RISCV_TPREL_S",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 ENCODE_STYPE_IMM (-1U),	/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* The paired relocation may be relaxed.  */
   HOWTO (R_RISCV_RELAX,			/* type */
 	 0,				/* rightshift */
 	 3,				/* 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 */
+	 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 */
 	 0,				/* rightshift */
 	 0,				/* 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_SUB6",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0x3f,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 6-bit in-place setting, for local label subtraction.  */
   HOWTO (R_RISCV_SET6,			/* type */
 	 0,				/* rightshift */
 	 0,				/* size */
 	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_SET6",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
 	 0x3f,				/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 false),			/* pcrel_offset */
 
   /* 8-bit in-place setting, for local label subtraction.  */
   HOWTO (R_RISCV_SET8,			/* type */
 	 0,				/* rightshift */
 	 0,				/* size */
 	 8,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_SET8",		/* 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 setting, for local label subtraction.  */
   HOWTO (R_RISCV_SET16,			/* type */
 	 0,				/* rightshift */
 	 1,				/* size */
 	 16,				/* bitsize */
-	 FALSE,				/* pc_relative */
+	 false,				/* pc_relative */
 	 0,				/* bitpos */
 	 complain_overflow_dont,	/* complain_on_overflow */
 	 bfd_elf_generic_reloc,		/* special_function */
 	 "R_RISCV_SET16",		/* 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 setting, for local label subtraction.  */
   HOWTO (R_RISCV_SET32,			/* type */
 	 0,				/* rightshift */
 	 2,				/* 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_SET32",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
 
   /* 32-bit PC relative.  */
   HOWTO (R_RISCV_32_PCREL,		/* type */
 	 0,				/* rightshift */
 	 2,				/* 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_32_PCREL",		/* name */
-	 FALSE,				/* partial_inplace */
+	 false,				/* partial_inplace */
 	 0,				/* src_mask */
-	 MINUS_ONE,			/* dst_mask */
-	 FALSE),			/* pcrel_offset */
+	 0xffffffff,			/* dst_mask */
+	 false),			/* pcrel_offset */
+
+  /* Relocation against a local ifunc symbol in a shared object.  */
+  HOWTO (R_RISCV_IRELATIVE,		/* 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_RISCV_IRELATIVE",		/* name */
+	 false,				/* partial_inplace */
+	 0,				/* src_mask */
+	 0xffffffff,			/* 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;
@@ -1011,41 +1026,421 @@ riscv_elf_add_sub_reloc (bfd *abfd,
   return bfd_reloc_ok;
 }
 
-/* Parsing subset version.
+/* Always add the IMPLICIT for the SUBSET.  */
+
+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", "zicsr",	check_implicit_always},
+  {"g", "zifencei",	check_implicit_always},
+  {"q", "d",		check_implicit_always},
+  {"d", "f",		check_implicit_always},
+  {"f", "zicsr",	check_implicit_always},
+  {NULL, NULL, NULL}
+};
+
+/* Lists of prefixed class extensions that binutils should know about.
+   Whether or not a particular entry is in these lists will dictate if
+   gas/ld will accept its presence in the architecture string.
+
+   Please add the extensions to the lists in lower case.  However, keep
+   these subsets in alphabetical order in these tables is recommended,
+   although there is no impact on the current implementation.  */
+
+static const char * const riscv_std_z_ext_strtab[] =
+{
+  "zba", "zbb", "zbc", "zicsr", "zifencei", "zihintpause", NULL
+};
+
+static const char * const riscv_std_s_ext_strtab[] =
+{
+  NULL
+};
+
+static const char * const riscv_std_h_ext_strtab[] =
+{
+  NULL
+};
+
+static const char * const riscv_std_zxm_ext_strtab[] =
+{
+  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_H,
+  RV_ISA_CLASS_ZXM,
+  RV_ISA_CLASS_X,
+  RV_ISA_CLASS_UNKNOWN
+};
+
+/* 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_H, "h"},
+  {RV_ISA_CLASS_X, "x"},
+  {RV_ISA_CLASS_UNKNOWN, 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_UNKNOWN)
+    {
+      if (strncmp (arch, parse_config[i].prefix,
+		   strlen (parse_config[i].prefix)) == 0)
+	return parse_config[i].class;
+      i++;
+    }
+  return RV_ISA_CLASS_UNKNOWN;
+}
+
+/* Check KNOWN_EXTS to see if the EXT is supported.  */
+
+static bool
+riscv_known_prefixed_ext (const char *ext,
+			  const char *const *known_exts)
+{
+  size_t i;
+  for (i = 0; known_exts[i]; ++i)
+    if (strcmp (ext, known_exts[i]) == 0)
+      return true;
+  return false;
+}
+
+/* Check whether the prefixed extension is valid or not.  Return
+   true if valid, otehrwise return false.  */
+
+static bool
+riscv_valid_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_std_z_ext_strtab);
+  case RV_ISA_CLASS_ZXM:
+    return riscv_known_prefixed_ext (ext, riscv_std_zxm_ext_strtab);
+  case RV_ISA_CLASS_S:
+    return riscv_known_prefixed_ext (ext, riscv_std_s_ext_strtab);
+  case RV_ISA_CLASS_H:
+    return riscv_known_prefixed_ext (ext, riscv_std_h_ext_strtab);
+  case RV_ISA_CLASS_X:
+    /* Only the single x is invalid.  */
+    if (strcmp (ext, "x") != 0)
+      return true;
+  default:
+    break;
+  }
+  return false;
+}
+
+/* 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;
+  const char *std_base_exts = "eig";
+  const char *std_remain_exts = riscv_supported_std_ext ();
+  const char *ext;
+  int order;
+
+  if (inited)
+    return;
+
+  /* The orders of all standard extensions are positive.  */
+  order = 1;
+
+  /* Init the standard base extensions first.  */
+  for (ext = std_base_exts; *ext; ext++)
+    riscv_ext_order[(*ext - 'a')] = order++;
+
+  /* Init the standard remaining extensions.  */
+  for (ext = std_remain_exts; *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_UNKNOWN)
+    order1 = - (int) class1;
+  if (class2 != RV_ISA_CLASS_UNKNOWN)
+    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;
+	}
+      return strcasecmp (++subset1, ++subset2);
+    }
+
+  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;
+
+  for (s = subset_list->head;
+       s != NULL;
+       pre_s = s, s = s->next)
+    {
+      int cmp = riscv_compare_subsets (s->name, subset);
+      if (cmp == 0)
+	{
+	  *current = s;
+	  return true;
+	}
+      else if (cmp > 0)
+	break;
+    }
+  *current = pre_s;
+  return false;
+}
+
+/* Add extension from ISA string to the last of the subset list.  */
+
+void
+riscv_add_subset (riscv_subset_list_t *subset_list,
+		  const char *subset,
+		  int major,
+		  int minor)
+{
+  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;
+
+  if (subset_list->tail != NULL)
+    subset_list->tail->next = s;
+  subset_list->tail = s;
+}
+
+/* Add the implicit extension to the subset list.  Search the
+   list first, and then find the right place to add.  */
+
+static void
+riscv_add_implicit_subset (riscv_subset_list_t *subset_list,
+			   const char *subset,
+			   int major,
+			   int minor)
+{
+  riscv_subset_t *current, *new;
+
+  if (riscv_lookup_subset (subset_list, subset, &current))
+    return;
+
+  new = xmalloc (sizeof *new);
+  new->name = xstrdup (subset);
+  new->major_version = major;
+  new->minor_version = minor;
+  new->next = NULL;
+
+  if (current != NULL)
+    {
+      new->next = current->next;
+      current->next = new;
+    }
+  else
+    {
+      new->next = subset_list->head;
+      subset_list->head = new;
+    }
+}
+
+/* We have to add all extensions from ISA string first, and then start to
+   add their implicit extensions.  The extensions from ISA string must be
+   set in order, so we can add them to the last of the subset list
+   directly, without searching.
+
+   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.  */
+
+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)
+      && rps->get_default_version != NULL)
+    rps->get_default_version (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);
+      else
+	rps->error_handler
+	  (_("cannot find default versions of the ISA extension `%s'"),
+	   subset);
+      return;
+    }
+
+  if (!implicit)
+    riscv_add_subset (rps->subset_list, subset,
+		      major_version, minor_version);
+  else
+    riscv_add_implicit_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;
+    }
+
+  subset_list->tail = NULL;
+}
+
+/* Parsing extension version.
 
    Return Value:
      Points to the end of version
 
    Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `march`: Full arch string.
+     `rps`: Hooks and status for parsing extensions.
+     `march`: Full ISA 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.  */
+     `major_version`: Parsed major version.
+     `minor_version`: Parsed minor version.
+     `std_ext_p`: True if parsing standard extension.  */
 
 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;
+			      int *major_version,
+			      int *minor_version,
+			      bool std_ext_p)
+{
+  bool major_p = true;
+  int version = 0;
   char np;
 
-  for (;*p; ++p)
+  *major_version = 0;
+  *minor_version = 0;
+  for (; *p; ++p)
     {
       if (*p == 'p')
 	{
@@ -1062,14 +1457,15 @@ riscv_parsing_subset_version (riscv_pars
 		}
 	      else
 		{
-		  rps->error_handler ("-march=%s: Expect number after `%dp'.",
-				      march, version);
+		  rps->error_handler
+		    (_("-march=%s: expect number after `%dp'"),
+		     march, version);
 		  return NULL;
 		}
 	    }
 
-	  major = version;
-	  major_p = FALSE;
+	  *major_version = version;
+	  major_p = false;
 	  version = 0;
 	}
       else if (ISDIGIT (*p))
@@ -1079,21 +1475,17 @@ riscv_parsing_subset_version (riscv_pars
     }
 
   if (major_p)
-    major = version;
+    *major_version = version;
   else
-    minor = version;
+    *minor_version = version;
 
-  if (major == 0 && minor == 0)
+  /* We can not find any version in string.  */
+  if (*major_version == 0 && *minor_version == 0)
     {
-      /* We don't found any version string, use default version.  */
-      *major_version = default_major_version;
-      *minor_version = default_minor_version;
-    }
-  else
-    {
-      *major_version = major;
-      *minor_version = minor;
+      *major_version = RISCV_UNKNOWN_VERSION;
+      *minor_version = RISCV_UNKNOWN_VERSION;
     }
+
   return p;
 }
 
@@ -1112,88 +1504,82 @@ riscv_supported_std_ext (void)
      Points to the end of extensions.
 
    Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `march`: Full arch string.
+     `rps`: Hooks and status for parsing extensions.
+     `march`: Full ISA string.
      `p`: Curent parsing position.  */
 
 static const char *
 riscv_parse_std_ext (riscv_parse_subset_t *rps,
-		     const char *march, const char *p)
+		     const char *march,
+		     const char *p)
 {
   const char *all_std_exts = riscv_supported_std_ext ();
   const char *std_exts = all_std_exts;
-
-  unsigned major_version = 0;
-  unsigned minor_version = 0;
-  char std_ext = '\0';
+  int major_version;
+  int minor_version;
+  char subset[2] = {0, 0};
 
   /* First letter must start with i, e or g.  */
   switch (*p)
     {
       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);
+	p = riscv_parsing_subset_version (rps, march, ++p,
+					  &major_version,
+					  &minor_version, true);
+	riscv_parse_add_subset (rps, "i",
+				major_version,
+				minor_version, false);
 	break;
 
       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);
-
+	p = riscv_parsing_subset_version (rps, march, ++p,
+					  &major_version,
+					  &minor_version, true);
+	riscv_parse_add_subset (rps, "e",
+				major_version,
+				minor_version, false);
 	if (*rps->xlen > 32)
 	  {
-	    rps->error_handler ("-march=%s: rv%de is not a valid base ISA",
-				march, *rps->xlen);
+	    rps->error_handler
+	      (_("-march=%s: rv%de is not a valid base ISA"),
+	       march, *rps->xlen);
 	    return NULL;
 	  }
-
 	break;
 
       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);
-
+	p = riscv_parsing_subset_version (rps, march, ++p,
+					  &major_version,
+					  &minor_version, true);
+	/* Expand g to imafd.  */
+	riscv_parse_add_subset (rps, "i",
+				RISCV_UNKNOWN_VERSION,
+				RISCV_UNKNOWN_VERSION, false);
 	for ( ; *std_exts != 'q'; std_exts++)
 	  {
-	    const char subset[] = {*std_exts, '\0'};
-	    riscv_add_subset (
-	      rps->subset_list, subset, major_version, minor_version);
+	    subset[0] = *std_exts;
+	    riscv_parse_add_subset (rps, subset,
+				    RISCV_UNKNOWN_VERSION,
+				    RISCV_UNKNOWN_VERSION, false);
 	  }
+	/* Add g as an implicit extension.  */
+	riscv_parse_add_subset (rps, "g",
+				RISCV_UNKNOWN_VERSION,
+				RISCV_UNKNOWN_VERSION, true);
 	break;
 
       default:
-	rps->error_handler (
-	  "-march=%s: first ISA subset must be `e', `i' or `g'", march);
+	rps->error_handler
+	  (_("-march=%s: first ISA extension must be `e', `i' or `g'"),
+	   march);
 	return NULL;
     }
 
-  while (*p)
+  while (p != NULL && *p != '\0')
     {
-      char subset[2] = {0, 0};
-
-      if (*p == 'x' || *p == 's')
+      /* Stop when we parsed the known prefix class.  */
+      enum riscv_prefix_ext_class class = riscv_get_prefix_class (p);
+      if (class != RV_ISA_CLASS_UNKNOWN)
 	break;
 
       if (*p == '_')
@@ -1202,63 +1588,56 @@ riscv_parse_std_ext (riscv_parse_subset_
 	  continue;
 	}
 
-      std_ext = *p;
-
       /* Checking canonical order.  */
-      while (*std_exts && std_ext != *std_exts) std_exts++;
+      char std_ext = *p;
+      while (*std_exts && std_ext != *std_exts)
+	std_exts++;
 
       if (std_ext != *std_exts)
 	{
-	  if (strchr (all_std_exts, std_ext) == NULL)
-	    rps->error_handler (
-	      "-march=%s: unsupported ISA subset `%c'", march, *p);
+	  if (riscv_ext_order[(std_ext - 'a')] == 0)
+	    rps->error_handler
+	      (_("-march=%s: unknown standard and prefixed ISA "
+		 "extension `%s'"), march, p);
 	  else
-	    rps->error_handler (
-	      "-march=%s: ISA string is not in canonical order. `%c'",
-	      march, *p);
+	    rps->error_handler
+	      (_("-march=%s: standard ISA extension `%c' is not "
+		 "in canonical order"), march, std_ext);
 	  return NULL;
 	}
 
       std_exts++;
-
-      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);
-
       subset[0] = std_ext;
-
-      riscv_add_subset (rps->subset_list, subset, major_version, minor_version);
+      p = riscv_parsing_subset_version (rps, march, ++p,
+					&major_version,
+					&minor_version, true);
+      riscv_parse_add_subset (rps, subset,
+			      major_version,
+			      minor_version, false);
     }
+
   return p;
 }
 
-/* Parsing function for non-standard and supervisor extensions.
+/* Parsing function for prefixed extensions.
 
    Return Value:
-     Points to the end of extensions.
+     Points to the end of extension.
 
    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.
+     `march`: 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_prefixed_ext (riscv_parse_subset_t *rps,
+			  const char *march,
+			  const char *p)
+{
+  int major_version;
+  int minor_version;
+  const char *last_name;
+  enum riscv_prefix_ext_class class;
 
   while (*p)
     {
@@ -1268,13 +1647,14 @@ 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;
+      class = riscv_get_prefix_class (p);
+      if (class == RV_ISA_CLASS_UNKNOWN)
+	{
+	  rps->error_handler
+	    (_("-march=%s: unknown prefix class for the ISA extension `%s'"),
+	     march, p);
+	  return NULL;
+	}
 
       char *subset = xstrdup (p);
       char *q = subset;
@@ -1284,24 +1664,66 @@ riscv_parse_sv_or_non_std_ext (riscv_par
 	;
 
       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 (rps, march, q,
+				      &major_version,
+				      &minor_version, false);
       *q = '\0';
 
-      riscv_add_subset (rps->subset_list, subset, major_version, minor_version);
-      free (subset);
+      if (end_of_version == NULL)
+	{
+	  free (subset);
+	  return NULL;
+	}
+
+      /* Check if the prefix extension is known.
+	 For 'x', anything goes but it cannot simply be 'x'.
+	 For other prefixed extensions, it must be known from a list
+	 and cannot simply be the prefixed name.  */
+
+      /* Check that the extension name is well-formed.  */
+      if (rps->check_unknown_prefixed_ext
+	  && !riscv_valid_prefixed_ext (subset))
+	{
+	  rps->error_handler
+	    (_("-march=%s: unknown prefixed ISA extension `%s'"),
+	     march, subset);
+	  free (subset);
+	  return NULL;
+	}
+
+      /* Check that the extension isn't duplicate.  */
+      last_name = rps->subset_list->tail->name;
+      if (!strcasecmp (last_name, subset))
+	{
+	  rps->error_handler
+	    (_("-march=%s: duplicate prefixed ISA extension `%s'"),
+	     march, subset);
+	  free (subset);
+	  return NULL;
+	}
+
+      /* Check that the extension is in expected order.  */
+      if (riscv_compare_subsets (last_name, subset) > 0)
+	{
+	  rps->error_handler
+	    (_("-march=%s: prefixed ISA extension `%s' is not in expected "
+	       "order.  It must come before `%s'"),
+	     march, subset, last_name);
+	  free (subset);
+	  return NULL;
+	}
+
+      riscv_parse_add_subset (rps, subset,
+			      major_version,
+			      minor_version, false);
       p += end_of_version - subset;
+      free (subset);
 
       if (*p != '\0' && *p != '_')
 	{
-	  rps->error_handler ("-march=%s: %s must seperate with _",
-			      march, ext_type_str);
+	  rps->error_handler
+	    (_("-march=%s: prefixed ISA extension must separate with _"),
+	     march);
 	  return NULL;
 	}
     }
@@ -1309,185 +1731,122 @@ riscv_parse_sv_or_non_std_ext (riscv_par
   return p;
 }
 
-/* Function for parsing arch string.
+/* Add the implicit extensions.  */
+
+static void
+riscv_parse_add_implicit_subsets (riscv_parse_subset_t *rps)
+{
+  struct riscv_implicit_subset *t = riscv_implicit_subsets;
+  for (; t->subset_name; t++)
+    {
+      riscv_subset_t *subset = NULL;
+      if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset)
+	  && t->check_func (t->implicit_name, subset))
+	riscv_parse_add_subset (rps, t->implicit_name,
+				RISCV_UNKNOWN_VERSION,
+				RISCV_UNKNOWN_VERSION, true);
+    }
+}
+
+/* Function for parsing ISA string.
 
    Return Value:
      Return TRUE on success.
 
    Arguments:
-     `rps`: Hooks and status for parsing subset.
-     `arch`: Arch string.  */
+     `rps`: Hooks and status for parsing extensions.
+     `arch`: Full ISA string.  */
 
-bfd_boolean
+bool
 riscv_parse_subset (riscv_parse_subset_t *rps,
 		    const char *arch)
 {
-  const char *p = arch;
+  riscv_subset_t *subset = NULL;
+  const char *p;
+  bool no_conflict = true;
 
-  if (strncmp (p, "rv32", 4) == 0)
+  for (p = arch; *p != '\0'; p++)
+    {
+      if (ISUPPER (*p))
+	{
+	  rps->error_handler
+	    (_("-march=%s: ISA string cannot contain uppercase letters"),
+	     arch);
+	  return false;
+	}
+    }
+
+  p = arch;
+  if (startswith (p, "rv32"))
     {
       *rps->xlen = 32;
       p += 4;
     }
-  else if (strncmp (p, "rv64", 4) == 0)
+  else if (startswith (p, "rv64"))
     {
       *rps->xlen = 64;
       p += 4;
     }
   else
     {
-      rps->error_handler ("-march=%s: ISA string must begin with rv32 or rv64",
-			  arch);
-      return FALSE;
+      /* ISA string shouldn't be NULL or empty here.  However,
+	 it might be empty only when we failed to merge the ISA
+	 string in the riscv_merge_attributes.  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 (
+	  _("-march=%s: ISA string must begin with rv32 or rv64"),
+	  arch);
+      return false;
     }
 
+  /* Init the riscv_ext_order array to compare the order of extensions
+     quickly.  */
+  riscv_init_ext_order ();
+
   /* Parsing standard extension.  */
   p = riscv_parse_std_ext (rps, arch, p);
 
   if (p == NULL)
-    return FALSE;
+    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')
+  /* Parse the different classes of extensions in the specified order.  */
+  while (*p != '\0')
     {
-      rps->error_handler ("-march=%s: unexpected ISA string at end: %s",
-			  arch, p);
-      return FALSE;
-    }
+      p = riscv_parse_prefixed_ext (rps, arch, p);
 
-  if (riscv_lookup_subset (rps->subset_list, "e")
-      && riscv_lookup_subset (rps->subset_list, "f"))
-    {
-      rps->error_handler ("-march=%s: rv32e does not support the `f' extension",
-			  arch);
-      return FALSE;
+      if (p == NULL)
+        return false;
     }
 
-  if (riscv_lookup_subset (rps->subset_list, "d")
-      && !riscv_lookup_subset (rps->subset_list, "f"))
+  /* Finally add implicit extensions according to the current
+     extensions.  */
+  riscv_parse_add_implicit_subsets (rps);
+
+  /* Check the conflicts.  */
+  if (riscv_lookup_subset (rps->subset_list, "e", &subset)
+      && riscv_lookup_subset (rps->subset_list, "f", &subset))
     {
-      rps->error_handler ("-march=%s: `d' extension requires `f' extension",
-			  arch);
-      return FALSE;
+      rps->error_handler
+	(_("-march=%s: rv32e does not support the `f' extension"),
+	 arch);
+      no_conflict = false;
     }
-
-  if (riscv_lookup_subset (rps->subset_list, "q")
-      && !riscv_lookup_subset (rps->subset_list, "d"))
+  if (riscv_lookup_subset (rps->subset_list, "q", &subset)
+      && *rps->xlen < 64)
     {
-      rps->error_handler ("-march=%s: `q' extension requires `d' extension",
-			  arch);
-      return FALSE;
+      rps->error_handler
+	(_("-march=%s: rv32 does not support the `q' extension"),
+	 arch);
+      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;
-}
-
-/* Add new subset to list.  */
-
-void
-riscv_add_subset (riscv_subset_list_t *subset_list,
-		  const char *subset,
-		  int major, int minor)
-{
-  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;
-
-  if (subset_list->tail != NULL)
-    subset_list->tail->next = s;
-
-  subset_list->tail = s;
-}
-
-/* Find subset in list without version checking, return NULL if not found.  */
-
-riscv_subset_t *
-riscv_lookup_subset (const riscv_subset_list_t *subset_list,
-		     const char *subset)
-{
-  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;
-
-	return s;
-      }
-
-  return NULL;
-}
-
-/* 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;
-    }
-
-  subset_list->tail = NULL;
+  return no_conflict;
 }
 
 /* Return the number of digits for the input.  */
 
-static size_t
+size_t
 riscv_estimate_digit (unsigned num)
 {
   size_t digit = 0;
@@ -1511,7 +1870,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 +1890,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)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-riscv.h ./bfd/elfxx-riscv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-riscv.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-riscv.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* RISC-V ELF specific backend routines.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    Contributed by Andrew Waterman (andrew@sifive.com).
    Based on MIPS target.
@@ -22,6 +22,9 @@
 
 #include "elf/common.h"
 #include "elf/internal.h"
+#include "opcode/riscv.h"
+
+#define RISCV_UNKNOWN_VERSION -1
 
 extern reloc_howto_type *
 riscv_reloc_name_lookup (bfd *, const char *);
@@ -32,8 +35,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,7 +46,8 @@ struct riscv_subset_t
 
 typedef struct riscv_subset_t riscv_subset_t;
 
-typedef struct {
+typedef struct
+{
   riscv_subset_t *head;
   riscv_subset_t *tail;
 } riscv_subset_list_t;
@@ -58,23 +60,24 @@ 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 *);
+		     const char *,
+		     riscv_subset_t **);
 
-extern riscv_subset_t *
-riscv_lookup_subset_version (const riscv_subset_list_t *,
-			     const char *,
-			     int, int);
-
-typedef struct {
+typedef struct
+{
   riscv_subset_list_t *subset_list;
   void (*error_handler) (const char *,
 			 ...) ATTRIBUTE_PRINTF_1;
   unsigned *xlen;
+  void (*get_default_version) (const char *,
+			       int *,
+			       int *);
+  bool check_unknown_prefixed_ext;
 } riscv_parse_subset_t;
 
-extern bfd_boolean
+extern bool
 riscv_parse_subset (riscv_parse_subset_t *,
 		    const char *);
 
@@ -86,3 +89,19 @@ riscv_release_subset_list (riscv_subset_
 
 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 bool
+bfd_elf32_riscv_restart_relax_sections (struct bfd_link_info *);
+extern bool
+bfd_elf64_riscv_restart_relax_sections (struct bfd_link_info *);
+
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-sparc.c ./bfd/elfxx-sparc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-sparc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-sparc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC-specific support for ELF
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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,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),
 };
 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,2,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,2,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,2,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;
@@ -3112,7 +3023,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
 		 _bfd_sparc_elf_howto_table[r_type].name,
 		 name, __FUNCTION__);
 	      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,7 +4413,7 @@ _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))
@@ -4552,16 +4463,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 +4482,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 +4493,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 +4508,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 +4518,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 +4531,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 +4557,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 +4658,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 +4674,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 +4683,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 +4728,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 +4751,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 +4779,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 +4878,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 +4913,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 +4929,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 +4950,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-sparc.h ./bfd/elfxx-sparc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-sparc.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-sparc.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* SPARC ELF specific backend routines.
-   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-target.h ./bfd/elfxx-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-target.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-target.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target definitions for NN-bit ELF
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -130,13 +130,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 +362,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
@@ -404,10 +408,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
@@ -485,6 +489,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
@@ -653,6 +660,9 @@
 #ifndef elf_backend_write_section
 #define elf_backend_write_section		NULL
 #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 +768,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 +776,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,10 +802,11 @@
 
 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 */
@@ -815,6 +842,7 @@ static struct elf_backend_data elfNN_bed
   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,
@@ -859,6 +887,7 @@ static struct elf_backend_data elfNN_bed
   elf_backend_can_make_lsda_relative_eh_frame,
   elf_backend_encode_eh_address,
   elf_backend_write_section,
+  elf_backend_elfsym_local_is_section,
   elf_backend_mips_irix_compat,
   elf_backend_mips_rtype_to_howto,
   elf_backend_ecoff_debug_swap,
@@ -895,6 +924,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,
@@ -974,6 +1007,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,
@@ -1075,6 +1111,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-tilegx.c ./bfd/elfxx-tilegx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-tilegx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-tilegx.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for ELF.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -74,348 +74,348 @@ static reloc_howto_type tilegx_elf_howto
 	 0,			/* rightshift */
 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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) */
 	 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,			/* 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,			/* 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,			/* 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,			/* 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) */
 	 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) */
 	 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) */
 	 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),
@@ -435,9 +435,9 @@ static reloc_howto_type tilegx_elf_howto
   TILEGX_UIMM_HOWTO(R_TILEGX_SHAMT_Y1, 0, 6),
 
 #define TILEGX_IMM16_HOWTO(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
+  HOWTO (name, rshift, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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, 1, 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,39 +550,39 @@ 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, 4, 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, 4, 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) */
 	 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),
@@ -602,30 +602,30 @@ static reloc_howto_type tilegx_elf_howto
 	 0,			/* rightshift */
 	 4,			/* size (0 = byte, 1 = short, 2 = long) */
 	 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) */
 	 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-tilegx.h ./bfd/elfxx-tilegx.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-tilegx.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-tilegx.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* TILE-Gx ELF specific backend routines.
-   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-x86.c ./bfd/elfxx-x86.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-x86.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-x86.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* x86 specific support for ELF
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -31,7 +31,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 +82,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 +90,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 +102,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 +131,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 +152,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 +163,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 +173,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 +182,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 +207,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 +263,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 +312,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 +323,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 +350,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 +363,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 +399,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 +410,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 +424,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 +440,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 +453,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 +475,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 +508,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,13 +516,13 @@ 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;
 
@@ -526,69 +532,13 @@ elf_x86_allocate_dynrelocs (struct elf_l
       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 +559,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 +687,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 +706,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,11 +725,8 @@ _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";
     }
   if (ABI_64_P (abfd))
@@ -802,12 +749,9 @@ _bfd_x86_elf_link_hash_table_create (bfd
       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->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER;
 	  ret->dynamic_interpreter_size
@@ -815,8 +759,6 @@ _bfd_x86_elf_link_hash_table_create (bfd
 	  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 +800,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 +827,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 +836,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 +854,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 +894,117 @@ _bfd_x86_elf_link_check_relocs (bfd *abf
   return _bfd_elf_link_check_relocs (abfd, info);
 }
 
+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 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);
+
+      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 +1041,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 +1056,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 +1100,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 +1113,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 +1160,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 +1199,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. */
@@ -1205,10 +1241,10 @@ _bfd_x86_elf_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;
@@ -1223,7 +1259,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
@@ -1243,7 +1279,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.  */
@@ -1289,7 +1325,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 +1360,8 @@ _bfd_x86_elf_size_dynamic_sections (bfd
 		   + PLT_FDE_LEN_OFFSET));
     }
 
-  if (htab->elf.dynamic_sections_created)
-    {
-      /* 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 (!add_dynamic_entry (DT_TEXTREL, 0))
-		return FALSE;
-	    }
-	}
-      if (htab->target_os == is_vxworks
-	  && !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);
 }
 
 /* Finish up the x86 dynamic sections.  */
@@ -1482,7 +1447,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;
@@ -1504,13 +1469,13 @@ _bfd_x86_elf_finish_dynamic_sections (bf
 	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;
 	}
 
@@ -1617,7 +1582,7 @@ _bfd_x86_elf_finish_dynamic_sections (bf
 }
 
 
-bfd_boolean
+bool
 _bfd_x86_elf_always_size_sections (bfd *output_bfd,
 				   struct bfd_link_info *info)
 {
@@ -1629,7 +1594,7 @@ _bfd_x86_elf_always_size_sections (bfd *
 
       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 +1605,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 +1619,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 +1652,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 +1686,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 +1697,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 +1715,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 +1745,62 @@ _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;
+  char r_offset[30], r_info[30];
+
+  /* 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);
+
+  bfd_sprintf_vma (abfd, r_offset, rel->r_offset);
+  bfd_sprintf_vma (abfd, r_info, rel->r_info);
+
+  if (asect->use_rela_p)
+    {
+      char r_addend[30];
+
+      bfd_sprintf_vma (abfd, r_addend, rel->r_addend);
+
+      info->callbacks->einfo
+	(_("%pB: %s (offset: 0x%s, info: 0x%s, addend: 0x%s) against "
+	   "'%s' " "for section '%pA' in %pB\n"),
+	 info->output_bfd, reloc_name, r_offset, r_info, r_addend,
+	 name, asect, abfd);
+    }
+  else
+    info->callbacks->einfo
+      (_("%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section "
+	 "'%pA' in %pB\n"),
+       info->output_bfd, reloc_name, r_offset, 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 +1811,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 +1822,8 @@ _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;
+
   /* STT_GNU_IFUNC symbol must go through PLT. */
   if (h->type == STT_GNU_IFUNC)
     {
@@ -1855,7 +1836,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 +1862,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 +1873,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 +1896,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 +1906,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 +1923,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 +1934,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 +1961,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;
 	}
     }
 
@@ -2025,7 +2008,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 +2030,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 +2039,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
@@ -2079,11 +2062,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 +2115,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 +2123,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 +2151,7 @@ _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);
 
   dynrelbuf = NULL;
   if (count == 0)
@@ -2347,15 +2330,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 +2381,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 +2389,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 +2406,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 +2421,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 +2461,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 +2474,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 +2488,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 +2525,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 +2546,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 +2574,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 +2611,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 +2670,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 +2696,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 +2705,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 +2759,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 +2866,7 @@ 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;
+  normal_target = htab->elf.target_os == is_normal;
 
   if (normal_target)
     {
@@ -2782,7 +2894,7 @@ error_alignment:
   if (htab->non_lazy_plt != NULL
       && (!htab->plt.has_plt0 || pltsec == NULL))
     {
-      lazy_plt = FALSE;
+      lazy_plt = false;
       if (bfd_link_pic (info))
 	htab->plt.plt_entry = htab->non_lazy_plt->pic_plt_entry;
       else
@@ -2797,7 +2909,7 @@ error_alignment:
     }
   else
     {
-      lazy_plt = TRUE;
+      lazy_plt = true;
       if (bfd_link_pic (info))
 	{
 	  htab->plt.plt0_entry = htab->lazy_plt->pic_plt0_entry;
@@ -2817,7 +2929,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 +2978,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 +3011,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);
@@ -2916,8 +3024,8 @@ 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.  */
+		     PLT is supported only in 64-bit mode and is needed
+		     only for lazy binding.  */
 		  sec = bfd_make_section_anyway_with_flags (dynobj,
 							    ".plt.sec",
 							    pltflags);
@@ -2998,6 +3106,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 +3130,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 +3158,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-x86.h ./bfd/elfxx-x86.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/elfxx-x86.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/elfxx-x86.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* x86 specific support for ELF
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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"
@@ -119,19 +122,23 @@
    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, \
+   when PIC is false.  Don't generate dynamic relocations against
+   non-preemptible absolute symbol.  */
+#define GENERATE_DYNAMIC_RELOCATION_P(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 \
+	     || 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 (R_TYPE) && !X86_SIZE_TYPE_P (R_TYPE)) \
+	|| ! SYMBOL_CALLS_LOCAL ((INFO), \
+				 (struct elf_link_hash_entry *) (EH)))) \
    || (ELIMINATE_COPY_RELOCS \
        && !bfd_link_pic (INFO) \
        && (EH) != NULL \
@@ -170,17 +177,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 +253,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.
@@ -414,6 +426,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,14 +439,6 @@ struct elf_x86_plt_layout
 #define elf_x86_hash_entry(ent) \
   ((struct elf_x86_link_hash_entry *)(ent))
 
-enum elf_x86_target_os
-{
-  is_normal,
-  is_solaris,
-  is_vxworks,
-  is_nacl
-};
-
 /* x86 ELF linker hash table.  */
 
 struct elf_x86_link_hash_table
@@ -466,9 +471,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 +478,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,12 +491,6 @@ 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;
-
    /* Value used to fill the unused bytes of the first PLT entry.  This
       is only used for i386.  */
   bfd_byte plt0_pad_byte;
@@ -520,13 +508,8 @@ 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;
   int dynamic_interpreter_size;
@@ -537,18 +520,6 @@ struct elf_x86_link_hash_table
   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.  */
@@ -601,6 +572,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)
 
@@ -616,9 +590,9 @@ struct elf_x86_plt
 #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
+extern bool _bfd_x86_elf_mkobject
   (bfd *);
 
 extern void _bfd_x86_elf_set_tls_module_base
@@ -627,12 +601,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 +623,43 @@ 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_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 +673,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 +686,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 \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/format.c ./bfd/format.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/format.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/format.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generic BFD support for file formats.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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);
@@ -106,6 +106,7 @@ struct bfd_preserve
   unsigned int section_id;
   struct bfd_hash_table section_htab;
   const struct bfd_build_id *build_id;
+  bfd_cleanup cleanup;
 };
 
 /* When testing an object for compatibility with a particular target
@@ -117,8 +118,9 @@ 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;
@@ -130,8 +132,9 @@ bfd_preserve_save (bfd *abfd, struct bfd
   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));
@@ -140,18 +143,20 @@ bfd_preserve_save (bfd *abfd, struct bfd
 /* 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, 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;
   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);
@@ -170,6 +175,7 @@ bfd_preserve_restore (bfd *abfd, struct
      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 +184,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
@@ -191,7 +206,7 @@ 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 +221,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 +234,8 @@ 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;
 
   if (matching != NULL)
     *matching = NULL;
@@ -228,7 +244,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,18 +252,21 @@ 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;
+
+  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)
@@ -255,9 +274,9 @@ bfd_check_format_matches (bfd *abfd, bfd
       if (bfd_seek (abfd, (file_ptr) 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 +307,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,7 +324,15 @@ 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, 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;
@@ -313,16 +340,10 @@ bfd_check_format_matches (bfd *abfd, bfd
       if (bfd_seek (abfd, (file_ptr) 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 +353,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 +360,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 +375,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 +391,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 +468,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);
+	  bfd_reinit (abfd, initial_section_id, cleanup);
+	  bfd_release (abfd, preserve.marker);
 	  if (bfd_seek (abfd, (file_ptr) 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 +498,15 @@ 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);
 
       /* File position has moved, BTW.  */
-      return TRUE;
+      return true;
     }
 
   if (match_count == 0)
@@ -487,13 +514,15 @@ 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);
+      if (preserve_match.marker != NULL)
+	bfd_preserve_finish (abfd, &preserve_match);
+      bfd_preserve_restore (abfd, &preserve);
+      return false;
     }
 
   /* Restore original target type and format.  */
@@ -513,7 +542,14 @@ bfd_check_format_matches (bfd *abfd, bfd
 	  *(const char **) &matching_vector[match_count] = name;
 	}
     }
-  return FALSE;
+  else
+    free (matching_vector);
+  if (cleanup)
+    cleanup (abfd);
+  if (preserve_match.marker != NULL)
+    bfd_preserve_finish (abfd, &preserve_match);
+  bfd_preserve_restore (abfd, &preserve);
+  return false;
 }
 
 /*
@@ -521,7 +557,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 +566,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 +585,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/gen-aout.c ./bfd/gen-aout.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/gen-aout.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/gen-aout.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Generate parameters for an a.out system.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/genlink.h ./bfd/genlink.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/genlink.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/genlink.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/.gitignore ./bfd/.gitignore
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/.gitignore	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/.gitignore	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,5 @@
 /bfd-in3.h
 /bfd.h
-/bfd_stdint.h
 /bfdver.h
 /elf32-ia64.c
 /elf32-target.h
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hash.c ./bfd/hash.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hash.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hash.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* hash.c -- hash table routines for BFD
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -364,7 +364,7 @@ static unsigned long bfd_default_hash_ta
 
 /* Create a new hash table, given a number of entries.  */
 
-bfd_boolean
+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 +379,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 +394,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 +402,12 @@ 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.  */
 
-bfd_boolean
+bool
 bfd_hash_table_init (struct bfd_hash_table *table,
 		     struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
 							struct bfd_hash_table *,
@@ -457,8 +457,8 @@ bfd_hash_hash (const char *string, unsig
 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;
@@ -643,7 +643,7 @@ bfd_hash_newfunc (struct bfd_hash_entry
 
 void
 bfd_hash_traverse (struct bfd_hash_table *table,
-		   bfd_boolean (*func) (struct bfd_hash_entry *, void *),
+		   bool (*func) (struct bfd_hash_entry *, void *),
 		   void * info)
 {
   unsigned int i;
@@ -664,19 +664,18 @@ bfd_hash_traverse (struct bfd_hash_table
 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;
-
-  bfd_default_hash_table_size = hash_size_primes[_index];
+  /* 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 long 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 +713,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 *
@@ -762,7 +762,7 @@ 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,7 +778,7 @@ _bfd_stringtab_init (void)
   table->size = 0;
   table->first = NULL;
   table->last = NULL;
-  table->xcoff = FALSE;
+  table->length_field_size = 0;
 
   return table;
 }
@@ -788,13 +788,13 @@ _bfd_stringtab_init (void)
    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;
 }
 
@@ -815,14 +815,14 @@ _bfd_stringtab_free (struct bfd_strtab_h
 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 +853,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
@@ -879,14 +876,11 @@ _bfd_stringtab_size (struct bfd_strtab_h
 /* Write out a strtab.  ABFD must already be at the right location in
    the file.  */
 
-bfd_boolean
+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 +889,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, (bfd_vma) len, buf);
+	  if (bfd_bwrite ((void *) buf, (bfd_size_type) 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;
+	    return false;
 	}
 
       if (bfd_bwrite ((void *) str, (bfd_size_type) len, abfd) != len)
-	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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/host-aout.c ./bfd/host-aout.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/host-aout.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/host-aout.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/alphalinux.h ./bfd/hosts/alphalinux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/alphalinux.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/alphalinux.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/alphavms.h ./bfd/hosts/alphavms.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/alphavms.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/alphavms.h	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/decstation.h ./bfd/hosts/decstation.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/decstation.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/decstation.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/dpx2.h ./bfd/hosts/dpx2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/dpx2.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/dpx2.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386bsd.h ./bfd/hosts/i386bsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386bsd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/i386bsd.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386linux.h ./bfd/hosts/i386linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386linux.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/i386linux.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386mach3.h ./bfd/hosts/i386mach3.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386mach3.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/i386mach3.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386sco.h ./bfd/hosts/i386sco.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/i386sco.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/i386sco.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/m68klinux.h ./bfd/hosts/m68klinux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/m68klinux.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/m68klinux.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/mipsbsd.h ./bfd/hosts/mipsbsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/mipsbsd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/mipsbsd.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/mipsmach3.h ./bfd/hosts/mipsmach3.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/mipsmach3.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/mipsmach3.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/news-mips.h ./bfd/hosts/news-mips.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/news-mips.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/news-mips.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/pc532mach.h ./bfd/hosts/pc532mach.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/pc532mach.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/pc532mach.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/riscos.h ./bfd/hosts/riscos.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/riscos.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/riscos.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/symmetry.h ./bfd/hosts/symmetry.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/symmetry.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/symmetry.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxbsd.h ./bfd/hosts/vaxbsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxbsd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/vaxbsd.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxlinux.h ./bfd/hosts/vaxlinux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxlinux.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/vaxlinux.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxult2.h ./bfd/hosts/vaxult2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxult2.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/vaxult2.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxult.h ./bfd/hosts/vaxult.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/vaxult.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/vaxult.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/x86-64linux.h ./bfd/hosts/x86-64linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hosts/x86-64linux.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hosts/x86-64linux.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hppabsd-core.c ./bfd/hppabsd-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hppabsd-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hppabsd-core.c	2021-12-16 01:57:38.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-2021 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;
@@ -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);
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hpux-core.c ./bfd/hpux-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/hpux-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/hpux-core.c	2021-12-16 01:57:38.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-2021 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;
@@ -342,7 +330,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));
@@ -392,6 +380,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386aout.c ./bfd/i386aout.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386aout.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/i386aout.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386bsd.c ./bfd/i386bsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386bsd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/i386bsd.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386lynx.c ./bfd/i386lynx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386lynx.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/i386lynx.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -51,29 +51,29 @@
 	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;							      \
+	  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;						      \
+		return false;						      \
 									      \
-	      if (! NAME(aout,write_syms) (abfd)) return FALSE;		      \
+	      if (! NAME(aout,write_syms) (abfd)) return false;		      \
 									      \
 	      if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET)   \
 		  != 0)							      \
-		return FALSE;						      \
+		return false;						      \
 									      \
 	      if (!NAME(lynx,squirt_out_relocs) (abfd, obj_textsec (abfd)))   \
-		return FALSE;						      \
+		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;						      \
+		return false;						      \
 	    }								      \
       }
 #endif
@@ -86,7 +86,7 @@
 
 char *lynx_core_file_failing_command ();
 int lynx_core_file_failing_signal ();
-bfd_boolean lynx_core_file_matches_executable_p ();
+bool lynx_core_file_matches_executable_p ();
 const bfd_target *lynx_core_file_p ();
 
 #define	MY_core_file_failing_command lynx_core_file_failing_command
@@ -367,7 +367,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 +379,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 +397,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 +409,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 +447,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 +464,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;
 
@@ -500,11 +493,11 @@ NAME(lynx,squirt_out_relocs) (bfd *abfd,
   if (bfd_bwrite (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386msdos.c ./bfd/i386msdos.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/i386msdos.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/i386msdos.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MS-DOS executables.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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)
+      || (size = bfd_bread (&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_bread (buffer, (bfd_size_type) 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.  */
@@ -179,12 +181,12 @@ msdos_write_object_contents (bfd *abfd)
 
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
       || bfd_bwrite (hdr, (bfd_size_type) sizeof(hdr), abfd) != sizeof(hdr))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 msdos_set_section_contents (bfd *abfd,
 			    sec_ptr section,
 			    const void *location,
@@ -193,7 +195,7 @@ msdos_set_section_contents (bfd *abfd,
 {
 
   if (count == 0)
-    return TRUE;
+    return true;
 
   section->filepos = EXE_PAGE_SIZE + bfd_section_vma (section);
 
@@ -201,10 +203,10 @@ msdos_set_section_contents (bfd *abfd,
     {
       if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
 	  || bfd_bwrite (location, count, abfd) != count)
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 
@@ -277,6 +279,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ihex.c ./bfd/ihex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ihex.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ihex.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel Hex objects.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 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,44 +160,44 @@ 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)
+ihex_get_byte (bfd *abfd, bool *errorptr)
 {
   bfd_byte c;
 
   if (bfd_bread (&c, (bfd_size_type) 1, abfd) != 1)
     {
       if (bfd_get_error () != bfd_error_file_truncated)
-	*errorptr = TRUE;
+	*errorptr = true;
       return EOF;
     }
 
@@ -207,7 +207,7 @@ ihex_get_byte (bfd *abfd, bfd_boolean *e
 /* 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,14 +236,14 @@ 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;
@@ -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)
@@ -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;
@@ -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];
@@ -603,9 +599,8 @@ 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.  */
@@ -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,
@@ -754,14 +746,14 @@ ihex_write_record (bfd *abfd,
 
   total = 9 + count * 2 + 4;
   if (bfd_bwrite (buf, (bfd_size_type) total, abfd) != total)
-    return FALSE;
+    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.  */
@@ -990,6 +981,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/init.c ./bfd/init.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/init.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/init.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* bfd initialization stuff
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Steve Chamberlain of 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/irix-core.c ./bfd/irix-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/irix-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/irix-core.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for Irix core files.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
    Written by Stu Grossman, Cygnus Support.
    Converted to back-end form by Ian Lance Taylor, Cygnus Support
 
@@ -166,13 +166,13 @@ 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);
   if (val != sizeof coreout)
@@ -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));
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libaout.h ./bfd/libaout.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libaout.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libaout.h	2021-12-16 01:57:38.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-2021 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))
@@ -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
@@ -638,28 +636,28 @@ extern bfd_boolean NAME (aout, bfd_free_
 	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;							      \
+	  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;						      \
+	      return false;						      \
 									      \
 	    if (! NAME (aout, write_syms) (abfd))			      \
-	      return FALSE;						      \
+	      return false;						      \
 	  }								      \
 									      \
 	if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) != 0)   \
-	  return FALSE;							      \
+	  return false;							      \
 	if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd)))	      \
-	  return FALSE;							      \
+	  return false;							      \
 									      \
 	if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) != 0)   \
-	  return FALSE;							      \
+	  return false;							      \
 	if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))	      \
-	  return FALSE;							      \
+	  return false;							      \
       }
 #endif
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libbfd.c ./bfd/libbfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libbfd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libbfd.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Assorted BFD support routines, only used internally.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -40,30 +40,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 +73,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 +206,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 +245,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 +258,20 @@ _bfd_dummy_target (bfd *ignore_abfd ATTR
 #define SSIZE_MAX ((size_t) -1 >> 1)
 #endif
 
+/*
+INTERNAL_FUNCTION
+	bfd_malloc
+
+SYNOPSIS
+	extern void * bfd_malloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+
+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 +286,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
+	extern void * bfd_realloc (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
 
-/* 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,72 +333,85 @@ 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.  */
-
-void *
-bfd_realloc2 (void *ptr, 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_realloc (ptr, size * nmemb);
-}
+/*
+INTERNAL_FUNCTION
+	bfd_realloc_or_free
 
-/* Reallocate memory using realloc.
-   If this fails the pointer is freed before returning.  */
+SYNOPSIS
+	extern void * bfd_realloc_or_free (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
 
+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_realloc_or_free (void *ptr, bfd_size_type size)
 {
-  void *ret = bfd_realloc (ptr, size);
+  void *ret;
 
-  if (ret == NULL && ptr != NULL)
+  /* The behaviour of realloc(0) is implementation defined, but
+     for this function we treat it is always freeing the memory.  */
+  if (size == 0)
+    {
+      free (ptr);
+      return NULL;
+    }
+      
+  ret = bfd_realloc (ptr, size);
+  if (ret == NULL)
     free (ptr);
 
   return ret;
 }
 
-/* Allocate memory using malloc and clear it.  */
-
-void *
-bfd_zmalloc (bfd_size_type size)
-{
-  void *ptr = bfd_malloc (size);
-
-  if (ptr != NULL && size > 0)
-    memset (ptr, 0, (size_t) size);
+/*
+INTERNAL_FUNCTION
+	bfd_zmalloc
 
-  return ptr;
-}
+SYNOPSIS
+	extern void * bfd_zmalloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
 
-/* Allocate memory using malloc (nmemb * size) with overflow checking
-   and clear it.  */
+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_zmalloc2 (bfd_size_type nmemb, bfd_size_type size)
+bfd_zmalloc (bfd_size_type size)
 {
-  void *ptr = bfd_malloc2 (nmemb, size);
+  void *ptr = bfd_malloc (size);
 
   if (ptr != NULL)
-    {
-      size_t sz = nmemb * size;
-
-      if (sz > 0)
-	memset (ptr, 0, sz);
-    }
+    memset (ptr, 0, size ? (size_t) size : 1);
 
   return ptr;
 }
@@ -389,7 +421,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,7 +429,7 @@ DESCRIPTION
 	archives.
 
 */
-bfd_boolean
+bool
 bfd_write_bigendian_4byte_int (bfd *abfd, unsigned int i)
 {
   bfd_byte buffer[4];
@@ -495,7 +527,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)		\
@@ -875,7 +907,7 @@ bfd_putl64 (bfd_uint64_t data ATTRIBUTE_
 }
 
 void
-bfd_put_bits (bfd_uint64_t data, void *p, int bits, bfd_boolean big_p)
+bfd_put_bits (bfd_uint64_t data, void *p, int bits, bool big_p)
 {
   bfd_byte *addr = (bfd_byte *) p;
   int i;
@@ -895,7 +927,7 @@ bfd_put_bits (bfd_uint64_t data, void *p
 }
 
 bfd_uint64_t
-bfd_get_bits (const void *p, int bits, bfd_boolean big_p)
+bfd_get_bits (const void *p, int bits, bool big_p)
 {
   const bfd_byte *addr = (const bfd_byte *) p;
   bfd_uint64_t data;
@@ -919,7 +951,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 +960,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,7 +969,7 @@ _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
@@ -957,17 +989,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;
+    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 +1011,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 +1023,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 +1048,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 +1060,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 +1068,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;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1071,7 +1103,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' : '.';
@@ -1127,46 +1159,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 *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);
@@ -1194,8 +1227,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 +1240,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libbfd.h ./bfd/libbfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libbfd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libbfd.h	2021-12-16 01:57:38.000000000 +0000
@@ -6,7 +6,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-2021 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -115,18 +115,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)
@@ -139,10 +127,6 @@ bfd_strdup (const char *str)
 }
 /* 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;
 
@@ -150,21 +134,21 @@ extern bfd * _bfd_create_empty_archive_e
   (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,13 +168,13 @@ 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;
@@ -198,30 +182,30 @@ extern bfd *_bfd_generic_get_elt_at_inde
   (bfd *, symindex) ATTRIBUTE_HIDDEN;
 extern bfd * _bfd_new_bfd
   (void) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_free_cached_info
+extern bool _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;
@@ -242,8 +226,9 @@ extern void _bfd_void_bfd_asection
 
 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 +237,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 +274,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
+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 +299,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 +310,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 +320,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 +343,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 +354,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 +363,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 +382,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 +400,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 +425,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 +446,27 @@ 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_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;
 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 +485,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 +504,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 +526,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,22 +555,22 @@ 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;
 
@@ -611,14 +596,14 @@ extern bfd_signed_vma _bfd_dwarf2_find_s
   (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
@@ -635,7 +620,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 +636,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 +665,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;
 
@@ -718,24 +703,24 @@ extern bfd_reloc_status_type _bfd_clear_
 
 /* Link stabs in sections in the first pass.  */
 
-extern bfd_boolean _bfd_link_section_stabs
+extern bool _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 *)
+extern bool _bfd_discard_section_stabs
+  (bfd *, asection *, void *, bool (*) (bfd_vma, void *), void *)
   ATTRIBUTE_HIDDEN;
 
 /* Write out the .stab section when linking stabs in sections.  */
 
-extern bfd_boolean _bfd_write_section_stabs
+extern bool _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
+extern bool _bfd_write_stab_strings
   (bfd *, struct stab_info *) ATTRIBUTE_HIDDEN;
 
 /* Find an offset within a .stab section when linking stabs in
@@ -746,18 +731,18 @@ extern bfd_vma _bfd_stab_section_offset
 
 /* 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.  */
@@ -775,7 +760,7 @@ extern struct bfd_strtab_hash *_bfd_stri
 
 /* Create an XCOFF .debug section style string table.  */
 extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
-  (void) ATTRIBUTE_HIDDEN;
+  (bool isxcoff64) ATTRIBUTE_HIDDEN;
 
 /* Free a string table.  */
 extern void _bfd_stringtab_free
@@ -787,11 +772,11 @@ extern bfd_size_type _bfd_stringtab_size
 
 /* 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)
+  (struct bfd_strtab_hash *, const char *, bool hash, bool copy)
   ATTRIBUTE_HIDDEN;
 
 /* Write out a string table.  */
-extern bfd_boolean _bfd_stringtab_emit
+extern bool _bfd_stringtab_emit
   (bfd *, struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
 
 /* Macros to tell if bfds are read or write enabled.
@@ -839,11 +824,11 @@ 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.  */
@@ -852,15 +837,15 @@ extern const bfd_target * const *bfd_ass
 struct ecoff_find_line;
 #endif
 
-extern bfd_boolean _bfd_ecoff_locate_line
+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 +857,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 +881,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,10 +893,81 @@ 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)
-  ATTRIBUTE_HIDDEN;
+  (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 *);
+
+#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 bfd_byte *
+_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  bfd_byte *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_bread (mem, rsize, abfd) == rsize)
+	return mem;
+      bfd_release (abfd, mem);
+    }
+  return NULL;
+}
+
+static inline bfd_byte *
+_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  bfd_byte *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_bread (mem, rsize, abfd) == rsize)
+	return mem;
+      free (mem);
+    }
+  return NULL;
+}
 /* Extracted from libbfd.c.  */
-bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
+extern void * bfd_malloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+
+extern void * bfd_realloc (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+
+extern void * bfd_realloc_or_free (void * MEM, bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+
+extern void * bfd_zmalloc (bfd_size_type SIZE) ATTRIBUTE_HIDDEN;
+
+bool bfd_write_bigendian_4byte_int (bfd *, unsigned int);
 
 unsigned int bfd_log2 (bfd_vma x);
 
@@ -956,9 +1012,9 @@ struct _bfd_window_internal {
   unsigned mapped : 1;         /* 1 = mmap, 0 = malloc */
 };
 /* Extracted from cache.c.  */
-bfd_boolean bfd_cache_init (bfd *abfd);
+bool bfd_cache_init (bfd *abfd);
 
-bfd_boolean bfd_cache_close (bfd *abfd);
+bool bfd_cache_close (bfd *abfd);
 
 FILE* bfd_open_file (bfd *abfd);
 
@@ -1407,6 +1463,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 +1511,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",
@@ -1507,6 +1566,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 +1597,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 +1621,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",
@@ -2672,6 +2741,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",
@@ -2751,6 +2821,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 +2940,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",
@@ -3335,19 +3420,19 @@ static const char *const bfd_reloc_code_
 reloc_howto_type *bfd_default_reloc_type_lookup
    (bfd *abfd, bfd_reloc_code_real_type  code);
 
-bfd_boolean bfd_generic_relax_section
+bool bfd_generic_relax_section
    (bfd *abfd,
     asection *section,
     struct bfd_link_info *,
-    bfd_boolean *);
+    bool *);
 
-bfd_boolean bfd_generic_gc_sections
+bool bfd_generic_gc_sections
    (bfd *, struct bfd_link_info *);
 
-bfd_boolean bfd_generic_lookup_section_flags
+bool bfd_generic_lookup_section_flags
    (struct bfd_link_info *, struct flag_info *, asection *);
 
-bfd_boolean bfd_generic_merge_sections
+bool bfd_generic_merge_sections
    (bfd *, struct bfd_link_info *);
 
 bfd_byte *bfd_generic_get_relocated_section_contents
@@ -3355,7 +3440,7 @@ bfd_byte *bfd_generic_get_relocated_sect
     struct bfd_link_info *link_info,
     struct bfd_link_order *link_order,
     bfd_byte *data,
-    bfd_boolean relocatable,
+    bool relocatable,
     asymbol **symbols);
 
 void _bfd_generic_set_reloc
@@ -3364,7 +3449,7 @@ void _bfd_generic_set_reloc
     arelent **relptr,
     unsigned int count);
 
-bfd_boolean _bfd_unrecognized_reloc
+bool _bfd_unrecognized_reloc
    (bfd * abfd,
     sec_ptr section,
     unsigned int r_type);
@@ -3374,15 +3459,15 @@ extern const bfd_arch_info_type bfd_defa
 const bfd_arch_info_type *bfd_default_compatible
    (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
 
-bfd_boolean bfd_default_scan
+bool bfd_default_scan
    (const struct bfd_arch_info *info, const char *string);
 
 void *bfd_arch_default_fill (bfd_size_type count,
-    bfd_boolean is_bigendian,
-    bfd_boolean code);
+    bool is_bigendian,
+    bool code);
 
 /* Extracted from linker.c.  */
-bfd_boolean _bfd_generic_verify_endian_match
+bool _bfd_generic_verify_endian_match
    (bfd *ibfd, struct bfd_link_info *info);
 
 #ifdef __cplusplus
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libbfd-in.h ./bfd/libbfd-in.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libbfd-in.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libbfd-in.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -110,18 +110,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)
@@ -134,10 +122,6 @@ bfd_strdup (const char *str)
 }
 /* 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;
 
@@ -145,21 +129,21 @@ extern bfd * _bfd_create_empty_archive_e
   (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,13 +163,13 @@ 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;
@@ -193,30 +177,30 @@ extern bfd *_bfd_generic_get_elt_at_inde
   (bfd *, symindex) ATTRIBUTE_HIDDEN;
 extern bfd * _bfd_new_bfd
   (void) ATTRIBUTE_HIDDEN;
-extern bfd_boolean _bfd_free_cached_info
+extern bool _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;
@@ -237,8 +221,9 @@ extern void _bfd_void_bfd_asection
 
 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 +232,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 +269,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
+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 +294,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 +305,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 +315,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 +338,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 +349,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 +358,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 +377,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 +395,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 +420,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 +441,27 @@ 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_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;
 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 +480,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 +499,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 +521,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,22 +550,22 @@ 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;
 
@@ -606,14 +591,14 @@ extern bfd_signed_vma _bfd_dwarf2_find_s
   (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
@@ -630,7 +615,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 +631,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 +660,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;
 
@@ -713,24 +698,24 @@ extern bfd_reloc_status_type _bfd_clear_
 
 /* Link stabs in sections in the first pass.  */
 
-extern bfd_boolean _bfd_link_section_stabs
+extern bool _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 *)
+extern bool _bfd_discard_section_stabs
+  (bfd *, asection *, void *, bool (*) (bfd_vma, void *), void *)
   ATTRIBUTE_HIDDEN;
 
 /* Write out the .stab section when linking stabs in sections.  */
 
-extern bfd_boolean _bfd_write_section_stabs
+extern bool _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
+extern bool _bfd_write_stab_strings
   (bfd *, struct stab_info *) ATTRIBUTE_HIDDEN;
 
 /* Find an offset within a .stab section when linking stabs in
@@ -741,18 +726,18 @@ extern bfd_vma _bfd_stab_section_offset
 
 /* 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.  */
@@ -770,7 +755,7 @@ extern struct bfd_strtab_hash *_bfd_stri
 
 /* Create an XCOFF .debug section style string table.  */
 extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
-  (void) ATTRIBUTE_HIDDEN;
+  (bool isxcoff64) ATTRIBUTE_HIDDEN;
 
 /* Free a string table.  */
 extern void _bfd_stringtab_free
@@ -782,11 +767,11 @@ extern bfd_size_type _bfd_stringtab_size
 
 /* 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)
+  (struct bfd_strtab_hash *, const char *, bool hash, bool copy)
   ATTRIBUTE_HIDDEN;
 
 /* Write out a string table.  */
-extern bfd_boolean _bfd_stringtab_emit
+extern bool _bfd_stringtab_emit
   (bfd *, struct bfd_strtab_hash *) ATTRIBUTE_HIDDEN;
 
 /* Macros to tell if bfds are read or write enabled.
@@ -834,11 +819,11 @@ 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.  */
@@ -847,15 +832,15 @@ extern const bfd_target * const *bfd_ass
 struct ecoff_find_line;
 #endif
 
-extern bfd_boolean _bfd_ecoff_locate_line
+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 +852,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 +876,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 +888,68 @@ 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)
-  ATTRIBUTE_HIDDEN;
+  (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 *);
+
+#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 bfd_byte *
+_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  bfd_byte *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_bread (mem, rsize, abfd) == rsize)
+	return mem;
+      bfd_release (abfd, mem);
+    }
+  return NULL;
+}
+
+static inline bfd_byte *
+_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize)
+{
+  bfd_byte *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_bread (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libcoff.h ./bfd/libcoff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libcoff.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libcoff.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -37,8 +37,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)
@@ -83,7 +84,7 @@ typedef struct coff_tdata
      _bfd_coff_get_external_symbols.  */
   void * external_syms;
   /* If this is TRUE, the external_syms may not be freed.  */
-  bfd_boolean keep_syms;
+  bool keep_syms;
 
   /* The string table.  May be NULL.  Read by
      _bfd_coff_read_string_table.  */
@@ -91,9 +92,9 @@ typedef struct coff_tdata
   /* The length of the strings table.  For error checking.  */
   bfd_size_type strings_len;
   /* 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 PE format coff file?  */
   int pe;
@@ -118,9 +119,14 @@ typedef struct coff_tdata
      used by ARM code.  */
   flagword flags;
 
-  /* coff-stgo32 EXE stub header after BFD tdata has been allocated.  Its data
-     is kept in internal_filehdr.go32stub beforehand.  */
-  char *go32stub;
+  /* Is this a GO32 coff file?  */
+  bool go32;
+
+  /* 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;
 } coff_data_type;
 
 /* Tdata for pe image files.  */
@@ -132,14 +138,16 @@ typedef struct pe_tdata
   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 *);
+  /* 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;
@@ -155,10 +163,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 +247,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.  */
@@ -295,7 +304,7 @@ 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.  */
@@ -303,7 +312,7 @@ struct coff_reloc_cookie
 #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
 
 /* Functions in coffgen.c.  */
-extern const bfd_target *coff_object_p
+extern bfd_cleanup coff_object_p
   (bfd *);
 extern struct bfd_section *coff_section_from_bfd_index
   (bfd *, int);
@@ -313,26 +322,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
+extern bool 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_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 +355,33 @@ 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
+extern bool coff_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
 #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_close_and_cleanup
+  (bfd *);
 
 /* Functions and types in cofflink.c.  */
 
@@ -469,11 +480,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
@@ -547,7 +558,7 @@ struct coff_section_alignment_entry
 
 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 +568,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,23 +611,15 @@ 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
@@ -654,7 +657,7 @@ typedef struct coff_ptr_struct
   } u;
 
  /* Selector for the union above.  */
- bfd_boolean is_sym;
+ bool is_sym;
 } combined_entry_type;
 
 
@@ -672,7 +675,7 @@ 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.  */
 
@@ -734,14 +737,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,32 +760,32 @@ 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);
 
@@ -797,13 +800,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,22 +814,22 @@ 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;
@@ -974,7 +977,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libcoff-in.h ./bfd/libcoff-in.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libcoff-in.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libcoff-in.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD COFF object file private structure.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,8 +33,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)
@@ -79,7 +80,7 @@ typedef struct coff_tdata
      _bfd_coff_get_external_symbols.  */
   void * external_syms;
   /* If this is TRUE, the external_syms may not be freed.  */
-  bfd_boolean keep_syms;
+  bool keep_syms;
 
   /* The string table.  May be NULL.  Read by
      _bfd_coff_read_string_table.  */
@@ -87,9 +88,9 @@ typedef struct coff_tdata
   /* The length of the strings table.  For error checking.  */
   bfd_size_type strings_len;
   /* 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 PE format coff file?  */
   int pe;
@@ -114,9 +115,14 @@ typedef struct coff_tdata
      used by ARM code.  */
   flagword flags;
 
-  /* coff-stgo32 EXE stub header after BFD tdata has been allocated.  Its data
-     is kept in internal_filehdr.go32stub beforehand.  */
-  char *go32stub;
+  /* Is this a GO32 coff file?  */
+  bool go32;
+
+  /* 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;
 } coff_data_type;
 
 /* Tdata for pe image files.  */
@@ -128,14 +134,16 @@ typedef struct pe_tdata
   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 *);
+  /* 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;
@@ -151,10 +159,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 +243,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.  */
@@ -291,7 +300,7 @@ 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.  */
@@ -299,7 +308,7 @@ struct coff_reloc_cookie
 #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash))
 
 /* Functions in coffgen.c.  */
-extern const bfd_target *coff_object_p
+extern bfd_cleanup coff_object_p
   (bfd *);
 extern struct bfd_section *coff_section_from_bfd_index
   (bfd *, int);
@@ -309,26 +318,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
+extern bool 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_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 +351,33 @@ 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
+extern bool coff_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *, unsigned int *);
 #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_close_and_cleanup
+  (bfd *);
 
 /* Functions and types in cofflink.c.  */
 
@@ -465,11 +476,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
@@ -543,7 +554,7 @@ struct coff_section_alignment_entry
 
 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 +564,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 +607,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libecoff.h ./bfd/libecoff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libecoff.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libecoff.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD ECOFF object file private structure.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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,10 +65,10 @@ 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.  */
@@ -78,7 +78,7 @@ struct ecoff_backend_data
 /* 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
 
 /* This is the target specific information kept for ECOFF files.  */
 
@@ -132,11 +132,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,7 +146,7 @@ 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;
 
 } ecoff_data_type;
 
@@ -161,7 +161,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 +224,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
+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 +262,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,10 +287,10 @@ 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_line _bfd_nosymbols_find_line
@@ -304,9 +304,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 +314,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 +327,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libhppa.h ./bfd/libhppa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libhppa.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libhppa.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah (pa-gdb-bugs@cs.utah.edu).
@@ -155,39 +155,20 @@ enum hppa_reloc_expr_type_alt
 
 /* 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 = (1 << (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libpei.h ./bfd/libpei.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libpei.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libpei.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -338,34 +338,36 @@
 #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 *);
+CODEVIEW_INFO *_bfd_XXi_slurp_codeview_record
+  (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo);
 
 /* 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_pep_print_ce_compressed_pdata (bfd *, void *);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libxcoff.h ./bfd/libxcoff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/libxcoff.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/libxcoff.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD XCOFF object file private structure.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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,15 @@ 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);
 };
 
 /* Look up an entry in an XCOFF link hash table.  */
@@ -111,7 +111,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
@@ -202,7 +202,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 +210,31 @@ 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 *);
 
-#define XCOFF_NO_LONG_SECTION_NAMES  (FALSE), bfd_coff_set_long_section_names_disallowed
+typedef bool xcoff_complain_function (bfd *, bfd_vma, bfd_vma,
+					     struct reloc_howto_struct *);
+
+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.
@@ -246,12 +247,12 @@ struct xcoff_dwsect_name {
   const char *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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/linker.c ./bfd/linker.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/linker.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/linker.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* linker.c -- BFD linker routines
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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)
     {
@@ -553,7 +553,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 +570,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 +579,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 +598,7 @@ 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);
 	  free (n);
 	  return h;
 	}
@@ -623,11 +623,11 @@ unwrap_hash_lookup (struct bfd_link_info
       || *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 +636,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 +654,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 +751,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 +764,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 +789,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 +799,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 +809,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 +848,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 +864,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 +872,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 +880,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 +901,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 +916,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 +936,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 +959,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;
 
@@ -1012,34 +1011,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 +1058,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 +1074,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 +1105,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 +1134,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 +1191,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 +1239,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 +1300,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 +1372,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 +1380,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 +1398,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;
@@ -1435,24 +1434,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 +1466,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 +1535,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 +1572,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,6 +1671,17 @@ _bfd_generic_link_add_one_symbol (struct
 	case MIND:
 	  /* Multiple indirect symbols.  This is OK if they both point
 	     to the same symbol.  */
+	  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 (strcmp (h->u.i.link->root.string, string) == 0)
 	    break;
 	  /* Fall through.  */
@@ -1696,7 +1706,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 +1722,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 +1756,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 +1764,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:
@@ -1780,7 +1790,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 +1803,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 +1819,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 +1841,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 +1860,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 +1887,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 +1898,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 +1912,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 +1931,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 +1966,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 +1974,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 +1989,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 +2004,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 +2027,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 +2058,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 +2125,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 +2135,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 +2186,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 +2205,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 +2283,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 +2292,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 +2308,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 +2324,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 +2344,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 +2364,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 +2385,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 +2416,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 +2424,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 +2432,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 +2454,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 +2469,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 +2477,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 +2487,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 +2502,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,12 +2538,12 @@ 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;
@@ -2547,7 +2557,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 +2577,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 +2590,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 +2622,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);
 	    }
@@ -2661,14 +2671,12 @@ default_indirect_link_order (bfd *output
 				  new_contents, loc, input_section->size))
     goto error_return;
 
-  if (contents != NULL)
-    free (contents);
-  return TRUE;
+  free (contents);
+  return true;
 
  error_return:
-  if (contents != NULL)
-    free (contents);
-  return FALSE;
+  free (contents);
+  return false;
 }
 
 /* A little routine to count the number of relocs in a link_order
@@ -2696,7 +2704,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 +2716,11 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 _bfd_generic_link_split_section (bfd *abfd ATTRIBUTE_UNUSED,
 				 asection *sec ATTRIBUTE_UNUSED)
 {
-  return FALSE;
+  return false;
 }
 
 /*
@@ -2720,9 +2728,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 +2760,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 +2773,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 +2788,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 +2812,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 +2830,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 +2851,7 @@ _bfd_handle_already_linked (asection *se
 	  && (l->sec->owner->flags & BFD_PLUGIN) != 0)
 	{
 	  l->sec = sec;
-	  return FALSE;
+	  return false;
 	}
       break;
 
@@ -2894,10 +2901,8 @@ _bfd_handle_already_linked (asection *se
 	      (_("%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);
+	  free (sec_contents);
+	  free (l_sec_contents);
 	}
       break;
     }
@@ -2909,12 +2914,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 +2929,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 +2963,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 +3038,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 +3061,7 @@ fix_syms (struct bfd_link_hash_entry *h,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -3070,7 +3075,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 +3088,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 +3104,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 +3131,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 +3184,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 +3205,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 +3218,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 +3298,7 @@ bfd_find_version_for_sym (struct bfd_elf
 
   if (local_ver != NULL)
     {
-      *hide = TRUE;
+      *hide = true;
       return local_ver;
     }
 
@@ -3299,7 +3310,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 +3319,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 +3333,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 +3343,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 +3354,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 +3364,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 +3376,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
@@ -3386,7 +3397,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 +3406,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 +3422,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 +3435,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 +3450,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 +3465,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 +3479,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 +3505,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 +3519,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,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/lynx-core.c ./bfd/lynx-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/lynx-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/lynx-core.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back end for Lynx core files
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-aarch64.c ./bfd/mach-o-aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-aarch64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o-aarch64.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* AArch-64 Mach-O support for BFD.
-   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Copyright (C) 2015-2021 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, 4, 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, 2, 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, 1, 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, 0, 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, 4, 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, 2, 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, 1, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 4, 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, 2, 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, 2, 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, 2, 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-arm.c ./bfd/mach-o-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-arm.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o-arm.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* ARM Mach-O support for BFD.
-   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Copyright (C) 2015-2021 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, 2, 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, 1, 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, 0, 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, 2, 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, 1, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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, 2, 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,	2, 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, 2, 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, 2, 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, 2, 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, 2, 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,
@@ -158,7 +158,7 @@ bfd_mach_o_arm_canonicalize_one_reloc (b
   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)
@@ -171,69 +171,69 @@ fprintf (stderr, "ARm 1\n");
 	    {
 	      _bfd_error_handler (_("\
 malformed mach-o ARM reloc pair: reloc is first reloc"));
-	    return FALSE;
+	    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;
+	  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;
+	  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"),
 			      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"),
 			      reloc.r_length);
-	  return FALSE;
+	  return false;
 
 	default:
 	  break;
@@ -248,24 +248,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)"),
 				  reloc.r_length, reloc.r_pcrel);
-	      return FALSE;
+	      return false;
 	    }
 	  break;
 
@@ -273,7 +273,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 +281,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,10 +291,10 @@ 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;
 
@@ -307,7 +307,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 +317,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;
 
@@ -328,7 +328,7 @@ malformed mach-o ARM vanilla reloc: inva
 
   _bfd_error_handler (_("\
 malformed mach-o ARM reloc: unknown reloc type: %d"), reloc.r_length);
-  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o.c ./bfd/mach-o.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -38,7 +38,7 @@
 #define FILE_ALIGN(off, algn) \
   (((off) + ((file_ptr) 1 << (algn)) - 1) & ((file_ptr) -1U << (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);
@@ -551,7 +551,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 +566,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 +581,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 +590,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 +618,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 +631,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 +647,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 +667,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 +682,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 +722,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 +761,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 +849,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.  */
@@ -1240,7 +1239,7 @@ 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;
@@ -1262,12 +1261,12 @@ bfd_mach_o_write_header (bfd *abfd, bfd_
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0
       || bfd_bwrite (&raw, size, abfd) != size)
-    return FALSE;
+    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;
@@ -1290,15 +1289,15 @@ bfd_mach_o_write_thread (bfd *abfd, bfd_
 
       if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0
 	  || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	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;
@@ -1309,19 +1308,19 @@ bfd_mach_o_write_dylinker (bfd *abfd, bf
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    return false;
 
   namelen = strlen (cmd->name_str) + 1;
   if (bfd_bwrite (cmd->name_str, namelen, abfd) != namelen)
-    return FALSE;
+    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;
@@ -1335,19 +1334,19 @@ bfd_mach_o_write_dylib (bfd *abfd, bfd_m
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    return false;
 
   namelen = strlen (cmd->name_str) + 1;
   if (bfd_bwrite (cmd->name_str, namelen, abfd) != namelen)
-    return FALSE;
+    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;
@@ -1358,12 +1357,12 @@ bfd_mach_o_write_main (bfd *abfd, bfd_ma
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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;
@@ -1382,39 +1381,39 @@ bfd_mach_o_write_dyld_info (bfd *abfd, b
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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) !=
 	    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) !=
 	    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) !=
 	    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) !=
 	    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) !=
 	    cmd->export_size))
-      return FALSE;
+      return false;
 
-  return TRUE;
+  return true;
 }
 
 long
@@ -1462,7 +1461,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 +1503,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 +1524,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 +1535,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,
@@ -1596,14 +1595,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 +1613,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 +1660,11 @@ bfd_mach_o_canonicalize_reloc (bfd *abfd
 
   if (asect->relocation == NULL)
     {
-      if (asect->reloc_count * sizeof (arelent) < asect->reloc_count)
+      size_t amt;
+
+      if (_bfd_mul_overflow (asect->reloc_count, sizeof (arelent), &amt))
 	return -1;
-      res = bfd_malloc (asect->reloc_count * sizeof (arelent));
+      res = bfd_malloc (amt);
       if (res == NULL)
 	return -1;
 
@@ -1720,12 +1717,30 @@ 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;
+      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 (_bfd_mul_overflow (dysymtab->nextrel + dysymtab->nlocrel,
+			     sizeof (arelent), &amt))
+	{
+	  bfd_set_error (bfd_error_file_too_big);
+	  return -1;
+	}
 
-      res = bfd_malloc ((dysymtab->nextrel + dysymtab->nlocrel)
-			* sizeof (arelent));
+      res = bfd_malloc (amt);
       if (res == NULL)
 	return -1;
 
@@ -1789,7 +1804,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 +1814,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 +1832,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)
@@ -1842,12 +1857,12 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_
 
       if (bfd_bwrite (&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;
@@ -1866,12 +1881,12 @@ bfd_mach_o_write_section_32 (bfd *abfd,
 
   if (bfd_bwrite (&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;
@@ -1891,12 +1906,12 @@ bfd_mach_o_write_section_64 (bfd *abfd,
 
   if (bfd_bwrite (&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 +1922,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);
@@ -1921,16 +1936,16 @@ bfd_mach_o_write_segment_32 (bfd *abfd,
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 +1956,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);
@@ -1955,16 +1970,16 @@ bfd_mach_o_write_segment_64 (bfd *abfd,
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 +1991,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 +2013,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;
@@ -2046,19 +2061,19 @@ bfd_mach_o_write_symtab_content (bfd *ab
   /* 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;
@@ -2074,9 +2089,9 @@ bfd_mach_o_write_symtab (bfd *abfd, bfd_
 
   if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
       || bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Count the number of indirect symbols in the image.
@@ -2108,7 +2123,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 +2137,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 +2182,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 +2232,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 +2250,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++)
 	{
@@ -2269,7 +2285,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 			    &w.objc_module_info_size);
 
 	      if (bfd_bwrite ((void *) &w, sizeof (w), abfd) != sizeof (w))
-		return FALSE;
+		return false;
 	    }
 	  else
 	    {
@@ -2292,7 +2308,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 			    &n.objc_module_info_size);
 
 	      if (bfd_bwrite ((void *) &n, sizeof (n), abfd) != sizeof (n))
-		return FALSE;
+		return false;
 	    }
 	}
     }
@@ -2302,7 +2318,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++)
 	{
@@ -2313,7 +2329,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 	  bfd_h_put_32 (abfd, toc->module_index, &raw.module_index);
 
 	  if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2322,7 +2338,7 @@ 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)
 	{
@@ -2330,7 +2346,7 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
 
 	  bfd_h_put_32 (abfd, cmd->indirect_syms[i], &raw);
 	  if (bfd_bwrite (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2339,7 +2355,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++)
 	{
@@ -2363,13 +2379,13 @@ 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;
+	    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;
@@ -2394,10 +2410,10 @@ bfd_mach_o_write_dysymtab (bfd *abfd, bf
       bfd_h_put_32 (abfd, cmd->nlocrel, &raw.nlocrel);
 
       if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	return false;
     }
 
-  return TRUE;
+  return true;
 }
 
 static unsigned
@@ -2472,14 +2488,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 +2558,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 +2578,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 +2616,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 +2630,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)
@@ -2701,12 +2718,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)
@@ -2735,56 +2752,56 @@ bfd_mach_o_write_contents (bfd *abfd)
 
       if (bfd_seek (abfd, cmd->offset, SEEK_SET) != 0
 	  || bfd_bwrite (&raw, BFD_MACH_O_LC_SIZE, abfd) != 8)
-	return FALSE;
+	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 +2838,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 +2943,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 +2982,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 +3038,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 +3053,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 +3067,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 +3123,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 +3149,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 +3170,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 +3185,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 +3203,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 +3274,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 +3325,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 +3335,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 +3344,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 +3352,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 +3361,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 +3373,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 +3393,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 +3410,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;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -3429,7 +3446,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;
@@ -3439,7 +3456,7 @@ 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;
+    return false;
 
   if (bfd_getb32 (raw.magic) == BFD_MACH_O_MH_MAGIC)
     {
@@ -3472,7 +3489,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.  */
@@ -3481,7 +3498,7 @@ bfd_mach_o_read_header (bfd *abfd, file_
 
   if (bfd_seek (abfd, hdr_off, SEEK_SET) != 0
       || bfd_bread (&raw, size, abfd) != size)
-    return FALSE;
+    return false;
 
   header->cputype = (*get32) (raw.cputype);
   header->cpusubtype = (*get32) (raw.cpusubtype);
@@ -3495,10 +3512,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 +3529,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;
 
@@ -3707,7 +3724,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,
@@ -3735,7 +3752,7 @@ bfd_mach_o_read_symtab_symbol (bfd *abfd
 	/* 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 +3772,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 +3879,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 +3890,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 +3905,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 +3913,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 +3971,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,7 +4017,15 @@ 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)
+{
+  if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
+    return NULL;
+  return _bfd_alloc_and_read (abfd, size, size);
+}
+
+static bool
 bfd_mach_o_read_dylinker (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_dylinker_command *cmd = &command->command.dylinker;
@@ -3998,24 +4033,23 @@ bfd_mach_o_read_dylinker (bfd *abfd, bfd
   unsigned int nameoff;
   unsigned int namelen;
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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);
+  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);
@@ -4023,7 +4057,10 @@ bfd_mach_o_read_dylib (bfd *abfd, bfd_ma
   struct mach_o_dylib_command_external raw;
   unsigned int nameoff;
   unsigned int namelen;
+  file_ptr pos;
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   switch (command->type)
     {
     case BFD_MACH_O_LC_LOAD_DYLIB:
@@ -4035,29 +4072,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;
+    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);
+  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 +4103,20 @@ bfd_mach_o_read_prebound_dylib (bfd *abf
   unsigned int str_len;
   unsigned char *str;
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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,39 +4124,43 @@ 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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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;
@@ -4129,25 +4168,25 @@ bfd_mach_o_read_fvmlib (bfd *abfd, bfd_m
   unsigned int nameoff;
   unsigned int namelen;
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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);
+  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 +4194,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 +4203,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;
+	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;
+	return false;
 
       cmd->flavours[nflavours].flavour = bfd_h_get_32 (abfd, raw.flavour);
       cmd->flavours[nflavours].offset = command->offset + offset + sizeof (raw);
@@ -4236,7 +4276,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 +4297,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 +4312,10 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
   {
     struct mach_o_dysymtab_command_external raw;
 
+    if (command->len < sizeof (raw) + 8)
+      return false;
     if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-      return FALSE;
+      return false;
 
     cmd->ilocalsym = bfd_h_get_32 (abfd, raw.ilocalsym);
     cmd->nlocalsym = bfd_h_get_32 (abfd, raw.nlocalsym);
@@ -4299,14 +4342,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++)
 	{
@@ -4315,7 +4370,7 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
 	  unsigned char buf[56];
 
 	  if (bfd_bread ((void *) buf, module_len, abfd) != module_len)
-	    return FALSE;
+	    return false;
 
 	  module->module_name_idx = bfd_h_get_32 (abfd, buf + 0);
 	  module->iextdefsym = bfd_h_get_32 (abfd, buf + 4);
@@ -4348,22 +4403,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;
+	    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,14 +4440,25 @@ 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++)
 	{
@@ -4388,7 +4466,7 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
 	  unsigned int *is = &cmd->indirect_syms[i];
 
 	  if (bfd_bread (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	    return false;
 
 	  *is = bfd_h_get_32 (abfd, raw);
 	}
@@ -4398,14 +4476,26 @@ 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++)
 	{
@@ -4413,7 +4503,7 @@ bfd_mach_o_read_dysymtab (bfd *abfd, bfd
 	  bfd_mach_o_dylib_reference *ref = &cmd->ext_refs[i];
 
 	  if (bfd_bread (raw, sizeof (raw), abfd) != sizeof (raw))
-	    return FALSE;
+	    return false;
 
 	  /* Fields isym and flags are written as bit-fields, thus we need
 	     a specific processing for endianness.  */
@@ -4432,14 +4522,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 +4538,10 @@ bfd_mach_o_read_symtab (bfd *abfd, bfd_m
 
   BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB);
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    return false;
 
   symtab->symoff = bfd_h_get_32 (abfd, raw.symoff);
   symtab->nsyms = bfd_h_get_32 (abfd, raw.nsyms);
@@ -4457,97 +4550,97 @@ 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 (command->len < 16 + 8)
+    return false;
   if (bfd_bread (cmd->uuid, 16, abfd) != 16)
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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;
-}
-
-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;
+  cmd->str = (char *) bfd_mach_o_alloc_and_read (abfd, cmd->stroff,
+						 cmd->str_len);
+  return cmd->str != NULL;
 }
 
-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);
       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);
       if (cmd->bind_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read weak bind content.  */
@@ -4556,7 +4649,7 @@ bfd_mach_o_read_dyld_content (bfd *abfd,
       cmd->weak_bind_content = bfd_mach_o_alloc_and_read
 	(abfd, cmd->weak_bind_off, cmd->weak_bind_size);
       if (cmd->weak_bind_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read lazy bind content.  */
@@ -4565,7 +4658,7 @@ bfd_mach_o_read_dyld_content (bfd *abfd,
       cmd->lazy_bind_content = bfd_mach_o_alloc_and_read
 	(abfd, cmd->lazy_bind_off, cmd->lazy_bind_size);
       if (cmd->lazy_bind_content == NULL)
-	return FALSE;
+	return false;
     }
 
   /* Read export content.  */
@@ -4574,20 +4667,22 @@ bfd_mach_o_read_dyld_content (bfd *abfd,
       cmd->export_content = bfd_mach_o_alloc_and_read
 	(abfd, cmd->export_off, cmd->export_size);
       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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    return false;
 
   cmd->rebase_off = bfd_get_32 (abfd, raw.rebase_off);
   cmd->rebase_size = bfd_get_32 (abfd, raw.rebase_size);
@@ -4604,76 +4699,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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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;
 
+  if (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 +4793,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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 (command->len < sizeof (raw) + 8)
+    return false;
   if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-    return FALSE;
+    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 +4845,10 @@ bfd_mach_o_read_segment (bfd *abfd,
 
       BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT_64);
 
+      if (command->len < sizeof (raw) + 8)
+	return false;
       if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	return false;
 
       memcpy (seg->segname, raw.segname, 16);
       seg->segname[16] = '\0';
@@ -4757,8 +4868,10 @@ bfd_mach_o_read_segment (bfd *abfd,
 
       BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT);
 
+      if (command->len < sizeof (raw) + 8)
+	return false;
       if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
-	return FALSE;
+	return false;
 
       memcpy (seg->segname, raw.segname, 16);
       seg->segname[16] = '\0';
@@ -4781,29 +4894,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;
@@ -4812,39 +4926,41 @@ 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;
+    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 +4969,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 +4992,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 +5016,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 +5091,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 +5117,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 +5144,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++)
@@ -5036,7 +5162,7 @@ bfd_mach_o_scan_start_address (bfd *abfd
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + 40, SEEK_SET) != 0
 	      || bfd_bread (buf, 4, abfd) != 4)
-	    return FALSE;
+	    return false;
 
 	  abfd->start_address = bfd_h_get_32 (abfd, buf);
 	}
@@ -5047,7 +5173,7 @@ bfd_mach_o_scan_start_address (bfd *abfd
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + 0, SEEK_SET) != 0
 	      || bfd_bread (buf, 4, abfd) != 4)
-	    return FALSE;
+	    return false;
 
 	  abfd->start_address = bfd_h_get_32 (abfd, buf);
 	}
@@ -5058,7 +5184,7 @@ bfd_mach_o_scan_start_address (bfd *abfd
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + 0, SEEK_SET) != 0
 	      || bfd_bread (buf, 8, abfd) != 8)
-	    return FALSE;
+	    return false;
 
 	  abfd->start_address = bfd_h_get_64 (abfd, buf);
 	}
@@ -5069,16 +5195,16 @@ bfd_mach_o_scan_start_address (bfd *abfd
 
 	  if (bfd_seek (abfd, thr->flavours[i].offset + (16 * 8), SEEK_SET) != 0
 	      || bfd_bread (buf, 8, abfd) != 8)
-	    return FALSE;
+	    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 +5216,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 +5254,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 +5307,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 +5345,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 +5363,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 +5397,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 +5412,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 +5437,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 +5446,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,12 +5502,13 @@ typedef struct mach_o_fat_data_struct
   mach_o_fat_archentry *archentries;
 } mach_o_fat_data_struct;
 
-const bfd_target *
+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;
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0
       || bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
@@ -5384,8 +5528,13 @@ 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;
 
@@ -5403,7 +5552,7 @@ bfd_mach_o_fat_archive_p (bfd *abfd)
 
   abfd->tdata.mach_o_fat_data = adata;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  error:
   if (adata != NULL)
@@ -5416,7 +5565,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 +5574,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 +5744,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 +5898,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;
@@ -5783,7 +5931,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 +5946,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 +5995,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 +6010,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 +6074,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 +6089,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 +6106,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 +6118,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 +6139,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,7 +6153,7 @@ 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);
@@ -6020,8 +6174,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,7 +6190,7 @@ bfd_mach_o_close_and_cleanup (bfd *abfd)
   return _bfd_generic_close_and_cleanup (abfd);
 }
 
-bfd_boolean
+bool
 bfd_mach_o_free_cached_info (bfd *abfd)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -6049,7 +6203,7 @@ bfd_mach_o_free_cached_info (bfd *abfd)
       asect->relocation = NULL;
     }
 
-  return TRUE;
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o.h ./bfd/mach-o.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -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,29 @@ 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_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_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 +781,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-i386.c ./bfd/mach-o-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-i386.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o-i386.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Intel i386 Mach-O support for BFD.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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, 2, 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, 1, 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, 0, 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, 2, 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, 1, 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, 2, 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, 2, 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, 2, 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, 1, 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, 1, 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, 1, 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;
@@ -257,9 +257,9 @@ bfd_mach_o_i386_swap_reloc_out (arelent
       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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-target.c ./bfd/mach-o-target.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-target.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o-target.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -136,6 +136,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-x86-64.c ./bfd/mach-o-x86-64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mach-o-x86-64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mach-o-x86-64.c	2021-12-16 01:57:38.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-2021 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, 4, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 2, 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, 4, 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, 2, 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, 0, 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, 2, 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/MAINTAINERS ./bfd/MAINTAINERS
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/MAINTAINERS	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/MAINTAINERS	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 See ../binutils/MAINTAINERS
 
-Copyright (C) 2012-2019 Free Software Foundation, Inc.
+Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/Makefile.am ./bfd/Makefile.am
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/Makefile.am	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/Makefile.am	2021-12-16 01:57:38.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-2021 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,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 =
@@ -53,7 +53,7 @@ ZLIBINC = @zlibinc@
 WARN_CFLAGS = @WARN_CFLAGS@
 NO_WERROR = @NO_WERROR@
 AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC)
-AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"'
+AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' @LARGEFILE_CPPFLAGS@
 if PLUGINS
 bfdinclude_HEADERS += $(INCDIR)/plugin-api.h
 LIBDL = @lt_cv_dlopen_libs@
@@ -144,7 +144,6 @@ ALL_MACHINES = \
 	cpu-or1k.lo \
 	cpu-pdp11.lo \
 	cpu-pj.lo \
-	cpu-plugin.lo \
 	cpu-powerpc.lo \
 	cpu-pru.lo \
 	cpu-rs6000.lo \
@@ -160,7 +159,6 @@ ALL_MACHINES = \
 	cpu-tic4x.lo \
 	cpu-tic54x.lo \
 	cpu-tic6x.lo \
-	cpu-tic80.lo \
 	cpu-tilegx.lo \
 	cpu-tilepro.lo \
 	cpu-v850.lo \
@@ -230,7 +228,6 @@ ALL_MACHINES_CFILES = \
 	cpu-or1k.c \
 	cpu-pdp11.c \
 	cpu-pj.c \
-	cpu-plugin.c \
 	cpu-powerpc.c \
 	cpu-pru.c \
 	cpu-rs6000.c \
@@ -246,7 +243,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 \
@@ -266,7 +262,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 +273,6 @@ BFD32_BACKENDS = \
 	coff-tic30.lo \
 	coff-tic4x.lo \
 	coff-tic54x.lo \
-	coff-tic80.lo \
 	coff-z80.lo \
 	coff-z8k.lo \
 	coffgen.lo \
@@ -357,6 +351,7 @@ BFD32_BACKENDS = \
 	elf32-xgate.lo \
 	elf32-xstormy16.lo \
 	elf32-xtensa.lo \
+	elf32-z80.lo \
 	elf32.lo \
 	elflink.lo \
 	elfxx-sparc.lo \
@@ -375,14 +370,12 @@ BFD32_BACKENDS = \
 	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 \
@@ -402,7 +395,6 @@ BFD32_BACKENDS = \
 BFD32_BACKENDS_CFILES = \
 	aout-cris.c \
 	aout-ns32k.c \
-	aout-tic30.c \
 	aout32.c \
 	cf-i386lynx.c \
 	coff-go32.c \
@@ -414,7 +406,6 @@ BFD32_BACKENDS_CFILES = \
 	coff-tic30.c \
 	coff-tic4x.c \
 	coff-tic54x.c \
-	coff-tic80.c \
 	coff-z80.c \
 	coff-z8k.c \
 	coffgen.c \
@@ -493,6 +484,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-xgate.c \
 	elf32-xstormy16.c \
 	elf32-xtensa.c \
+	elf32-z80.c \
 	elf32.c \
 	elflink.c \
 	elfxx-sparc.c \
@@ -511,14 +503,12 @@ BFD32_BACKENDS_CFILES = \
 	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 \
@@ -685,7 +675,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 \
@@ -710,7 +700,7 @@ 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)
@@ -831,66 +821,49 @@ endif
 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
+	$(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
+	$(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
+	echo "#line 1 \"elfnn-aarch64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-aarch64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-ia64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-ia64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-riscv.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-riscv.c\"" > $@
+	$(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
+	echo "#line 1 \"peXXigen.c\"" > $@
+	$(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
+	echo "#line 1 \"peXXigen.c\"" > $@
+	$(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
+	echo "#line 1 \"peXXigen.c\"" > $@
+	$(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
+LOCAL_H_DEPS= libbfd.h sysdep.h config.h
 $(BFD32_LIBS) \
  $(BFD64_LIBS) \
  $(ALL_MACHINES) \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/Makefile.in ./bfd/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/Makefile.in	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/Makefile.in	2021-12-16 01:57:38.000000000 +0000
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 #
-#   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+#   Copyright (C) 2012-2021 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
@@ -116,6 +116,7 @@ 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/jobserver.m4 \
 	$(top_srcdir)/../config/largefile.m4 \
 	$(top_srcdir)/../config/lead-dot.m4 \
 	$(top_srcdir)/../config/nls.m4 \
@@ -123,7 +124,6 @@ am__aclocal_m4_deps = $(top_srcdir)/../c
 	$(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 \
@@ -248,7 +248,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	\
@@ -330,6 +330,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 INSTOBJEXT = @INSTOBJEXT@
+LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBINTL = @LIBINTL@
@@ -468,7 +469,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
@@ -479,9 +480,9 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel
 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_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
@@ -568,7 +569,6 @@ ALL_MACHINES = \
 	cpu-or1k.lo \
 	cpu-pdp11.lo \
 	cpu-pj.lo \
-	cpu-plugin.lo \
 	cpu-powerpc.lo \
 	cpu-pru.lo \
 	cpu-rs6000.lo \
@@ -584,7 +584,6 @@ ALL_MACHINES = \
 	cpu-tic4x.lo \
 	cpu-tic54x.lo \
 	cpu-tic6x.lo \
-	cpu-tic80.lo \
 	cpu-tilegx.lo \
 	cpu-tilepro.lo \
 	cpu-v850.lo \
@@ -654,7 +653,6 @@ ALL_MACHINES_CFILES = \
 	cpu-or1k.c \
 	cpu-pdp11.c \
 	cpu-pj.c \
-	cpu-plugin.c \
 	cpu-powerpc.c \
 	cpu-pru.c \
 	cpu-rs6000.c \
@@ -670,7 +668,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 \
@@ -691,7 +688,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 +699,6 @@ BFD32_BACKENDS = \
 	coff-tic30.lo \
 	coff-tic4x.lo \
 	coff-tic54x.lo \
-	coff-tic80.lo \
 	coff-z80.lo \
 	coff-z8k.lo \
 	coffgen.lo \
@@ -782,6 +777,7 @@ BFD32_BACKENDS = \
 	elf32-xgate.lo \
 	elf32-xstormy16.lo \
 	elf32-xtensa.lo \
+	elf32-z80.lo \
 	elf32.lo \
 	elflink.lo \
 	elfxx-sparc.lo \
@@ -800,14 +796,12 @@ BFD32_BACKENDS = \
 	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 \
@@ -827,7 +821,6 @@ BFD32_BACKENDS = \
 BFD32_BACKENDS_CFILES = \
 	aout-cris.c \
 	aout-ns32k.c \
-	aout-tic30.c \
 	aout32.c \
 	cf-i386lynx.c \
 	coff-go32.c \
@@ -839,7 +832,6 @@ BFD32_BACKENDS_CFILES = \
 	coff-tic30.c \
 	coff-tic4x.c \
 	coff-tic54x.c \
-	coff-tic80.c \
 	coff-z80.c \
 	coff-z8k.c \
 	coffgen.c \
@@ -918,6 +910,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-xgate.c \
 	elf32-xstormy16.c \
 	elf32-xtensa.c \
+	elf32-z80.c \
 	elf32.c \
 	elflink.c \
 	elfxx-sparc.c \
@@ -936,14 +929,12 @@ BFD32_BACKENDS_CFILES = \
 	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 \
@@ -1107,7 +1098,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 \
@@ -1131,7 +1122,7 @@ 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:
@@ -1163,7 +1154,7 @@ libbfd_la_LIBADD = `cat ofiles` @SHARED_
 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
+LOCAL_H_DEPS = libbfd.h sysdep.h config.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 \
@@ -1299,7 +1290,6 @@ distclean-compile:
 @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 +1313,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@
@@ -1385,7 +1374,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 +1390,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@
@@ -1496,6 +1483,7 @@ distclean-compile:
 @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@
@@ -1553,7 +1541,6 @@ distclean-compile:
 @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-mcore.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-ppc.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@
@@ -1562,7 +1549,6 @@ distclean-compile:
 @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-mcore.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ppc.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@
@@ -1965,63 +1951,46 @@ dwarf2.lo: dwarf2.c Makefile
 @am__fastdepCC_FALSE@	$(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
+	$(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
+	$(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
+	echo "#line 1 \"elfnn-aarch64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-aarch64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-ia64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-ia64.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-riscv.c\"" > $@
+	$(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
+	echo "#line 1 \"elfnn-riscv.c\"" > $@
+	$(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
+	echo "#line 1 \"peXXigen.c\"" > $@
+	$(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
+	echo "#line 1 \"peXXigen.c\"" > $@
+	$(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
+	echo "#line 1 \"peXXigen.c\"" > $@
+	$(SED) -e s/XX/pex64/g < $< >> $@
 $(BFD32_LIBS) \
  $(BFD64_LIBS) \
  $(ALL_MACHINES) \
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/makefile.vms ./bfd/makefile.vms
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/makefile.vms	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/makefile.vms	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mep-relocs.pl ./bfd/mep-relocs.pl
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mep-relocs.pl	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mep-relocs.pl	2021-12-16 01:57:38.000000000 +0000
@@ -2,7 +2,7 @@
 # -*- perl -*-
 #
 # Toshiba MeP Media Engine Relocation Generator
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/merge.c ./bfd/merge.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/merge.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/merge.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* SEC_MERGE support.
-   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
    Written by Jakub Jelinek <jakub@redhat.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -70,7 +70,7 @@ struct sec_merge_hash
   /* Entity size.  */
   unsigned int entsize;
   /* Are entries fixed size or zero terminated strings?  */
-  bfd_boolean strings;
+  bool strings;
 };
 
 struct sec_merge_info
@@ -135,7 +135,7 @@ sec_merge_hash_newfunc (struct bfd_hash_
 
 static struct sec_merge_hash_entry *
 sec_merge_hash_lookup (struct sec_merge_hash *table, const char *string,
-		       unsigned int alignment, bfd_boolean create)
+		       unsigned int alignment, bool create)
 {
   const unsigned char *s;
   unsigned long hash;
@@ -233,7 +233,7 @@ sec_merge_hash_lookup (struct sec_merge_
 /* 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;
 
@@ -266,7 +266,7 @@ sec_merge_add (struct sec_merge_hash *ta
 {
   struct sec_merge_hash_entry *entry;
 
-  entry = sec_merge_hash_lookup (tab, str, alignment, TRUE);
+  entry = sec_merge_hash_lookup (tab, str, alignment, true);
   if (entry == NULL)
     return NULL;
 
@@ -284,7 +284,7 @@ sec_merge_add (struct sec_merge_hash *ta
   return entry;
 }
 
-static bfd_boolean
+static bool
 sec_merge_emit (bfd *abfd, struct sec_merge_hash_entry *entry,
 		unsigned char *contents, file_ptr offset)
 {
@@ -292,8 +292,9 @@ sec_merge_emit (bfd *abfd, struct sec_me
   asection *sec = secinfo->sec;
   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,7 +302,7 @@ 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)
     {
@@ -348,25 +349,27 @@ sec_merge_emit (bfd *abfd, struct sec_me
     }
 
   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;
+  unsigned int alignment_power;  /* Octets.  */
+  unsigned int align;            /* Octets.  */
   bfd_size_type amt;
   bfd_byte *contents;
+  unsigned int opb = bfd_octets_per_byte (abfd, sec);
 
   if ((abfd->flags & DYNAMIC) != 0
       || (sec->flags & SEC_MERGE) == 0)
@@ -375,24 +378,25 @@ _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;
     }
 
 #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,7 +409,7 @@ _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;
     }
 
   for (sinfo = (struct sec_merge_info *) *psinfo; sinfo; sinfo = sinfo->next)
@@ -464,28 +468,28 @@ _bfd_add_merge_section (bfd *abfd, void
   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
+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;
+  bool nul;
   unsigned char *p, *end;
   bfd_vma mask, eltalign;
   unsigned int align, i;
 
   align = sec->alignment_power;
   end = secinfo->contents + sec->size;
-  nul = FALSE;
+  nul = false;
   mask = ((bfd_vma) 1 << align) - 1;
   if (sec->flags & SEC_STRINGS)
     {
@@ -506,7 +510,7 @@ record_section (struct sec_merge_info *s
 		{
 		  if (!nul && !((p - secinfo->contents) & mask))
 		    {
-		      nul = TRUE;
+		      nul = true;
 		      entry = sec_merge_add (sinfo->htab, "",
 					     (unsigned) mask + 1, secinfo);
 		      if (! entry)
@@ -526,7 +530,7 @@ record_section (struct sec_merge_info *s
 		    break;
 		  if (!nul && !((p - secinfo->contents) & mask))
 		    {
-		      nul = TRUE;
+		      nul = true;
 		      entry = sec_merge_add (sinfo->htab, (char *) p,
 					     (unsigned) mask + 1, secinfo);
 		      if (! entry)
@@ -547,12 +551,12 @@ record_section (struct sec_merge_info *s
 	}
     }
 
-  return TRUE;
+  return true;
 
-error_return:
+ error_return:
   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
@@ -728,7 +732,7 @@ merge_strings (struct sec_merge_info *si
 /* 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,7 +743,7 @@ _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;
@@ -761,11 +765,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,12 +783,12 @@ _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;
+	  bfd_size_type size = 0;  /* Octets.  */
 
 	  /* Things are much simpler for non-strings.
 	     Just assign them slots in the section.  */
@@ -816,12 +822,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 +838,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;
@@ -853,14 +859,14 @@ _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;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Adjust an address in the SEC_MERGE section.  Given OFFSET within
@@ -922,7 +928,7 @@ _bfd_merged_section_offset (bfd *output_
     {
       p = secinfo->contents + (offset / sec->entsize) * sec->entsize;
     }
-  entry = sec_merge_hash_lookup (secinfo->htab, (char *) p, 0, FALSE);
+  entry = sec_merge_hash_lookup (secinfo->htab, (char *) p, 0, false);
   if (!entry)
     {
       if (! secinfo->htab->strings)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mmo.c ./bfd/mmo.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/mmo.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/mmo.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Hans-Peter Nilsson (hp@bitrange.com).
    Infrastructure and other bits originally copied from srec.c and
    binary.c.
@@ -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,8 +377,8 @@ 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);
@@ -386,50 +386,49 @@ static INLINE bfd_byte *mmo_get_loc (ase
 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_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[] =
@@ -491,16 +490,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;
@@ -556,7 +555,7 @@ mmo_object_p (bfd *abfd)
   if (! bfd_default_set_arch_mach (abfd, bfd_arch_mmix, 0))
     goto bad_format_free;
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  bad_format_free:
   free (abfd->tdata.mmo_data->lop_stab_symbol);
@@ -568,7 +567,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 +578,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 +588,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 +605,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 +613,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
@@ -786,7 +785,7 @@ mmo_write_tetra_raw (bfd *abfd, unsigned
   bfd_put_32 (abfd, value, buf);
 
   if (bfd_bwrite (buf, 4, abfd) != 4)
-    abfd->tdata.mmo_data->have_error = TRUE;
+    abfd->tdata.mmo_data->have_error = true;
 }
 
 /* Write a 32-bit word to output file; lop_quote if necessary.  */
@@ -821,10 +820,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.  */
@@ -866,14 +865,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 +889,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 +903,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 +952,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 +970,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 +979,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);
 }
@@ -1177,7 +1176,7 @@ mmo_get_byte (bfd *abfd)
       if (! abfd->tdata.mmo_data->have_error
 	  && bfd_bread (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
 	{
-	  abfd->tdata.mmo_data->have_error = TRUE;
+	  abfd->tdata.mmo_data->have_error = true;
 
 	  /* A value somewhat safe against tripping on some inconsistency
 	     when mopping up after this error.  */
@@ -1201,13 +1200,13 @@ mmo_write_byte (bfd *abfd, bfd_byte valu
     {
       if (! abfd->tdata.mmo_data->have_error
 	  && bfd_bwrite (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
-	abfd->tdata.mmo_data->have_error = TRUE;
+	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 +1214,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 +1248,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 +1362,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,8 +1395,8 @@ 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;
@@ -1451,7 +1450,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)
@@ -1581,14 +1580,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;
+  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;
@@ -1646,6 +1645,8 @@ mmo_scan (bfd *abfd)
 		goto error_return;
 
 	      vma &= ~3;
+	      if (sec == NULL)
+		sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME);
 	      mmo_xore_32 (sec, vma, bfd_get_32 (abfd, buf));
 	      vma += 4;
 	      lineno++;
@@ -2038,6 +2039,8 @@ mmo_scan (bfd *abfd)
       else
 	{
 	  /* This wasn't a lopcode, so store it in the current section.  */
+	  if (sec == NULL)
+	    sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME);
 	  mmo_xore_32 (sec, vma & ~3, bfd_get_32 (abfd, buf));
 	  vma += 4;
 	  vma &= ~3;
@@ -2057,7 +2060,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 +2071,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 +2099,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 +2110,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 +2133,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 +2141,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 +2321,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;
+    return false;
 
   /* Copy creation time of original file.  */
   if (bfd_bwrite (abfd->tdata.mmo_data->created, 4, abfd) != 4)
-    return FALSE;
+    return false;
 
-  return TRUE;
+  return true;
 }
 
 /* Write the LOP_POST record, with global register initializations.
@@ -2339,7 +2341,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;
@@ -2351,7 +2353,7 @@ 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;
+	return false;
     }
 
   /* For Z == $255, we always emit the start location; supposedly Main,
@@ -2422,25 +2424,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 +2472,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 +2491,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 +2502,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 +2518,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 +2531,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 +2644,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 +2669,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 +2677,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 +2734,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 +2906,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 +2935,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
@@ -2976,7 +2979,7 @@ mmo_write_symbols_and_terminator (bfd *a
 		 " than the start address %s\n"),
 	       abfd, vmas_main, vmas_start);
 	    bfd_set_error (bfd_error_bad_value);
-	    return FALSE;
+	    return false;
 	  }
 	break;
       }
@@ -3046,7 +3049,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 +3092,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;
@@ -3105,7 +3108,7 @@ 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;
+    return false;
 
   /* Dump out symbols.  */
   mmo_internal_3_dump (abfd, &root);
@@ -3122,7 +3125,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
@@ -3135,7 +3138,7 @@ mmo_write_symbols_and_terminator (bfd *a
 
       if (abfd->tdata.mmo_data->have_error
 	  || bfd_bwrite (abfd->tdata.mmo_data->buf, 4, abfd) != 4)
-	return FALSE;
+	return false;
     }
 
   bfd_put_32 (abfd, (LOP << 24) | (LOP_END << 16) | trie_len, buf);
@@ -3174,7 +3177,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 +3190,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 +3240,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);
 }
@@ -3340,6 +3343,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/netbsd-core.c ./bfd/netbsd-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/netbsd-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/netbsd-core.c	2021-12-16 01:57:38.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-2021 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,7 +60,7 @@ 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);
   if (val != sizeof core)
@@ -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);
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/netbsd.h ./bfd/netbsd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/netbsd.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/netbsd.h	2021-12-16 01:57:38.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-2021 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;
@@ -110,5 +110,5 @@ MY (write_object_contents) (bfd *abfd)
 
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ns32k.h ./bfd/ns32k.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ns32k.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ns32k.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for ns32k routines.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ns32knetbsd.c ./bfd/ns32knetbsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ns32knetbsd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ns32knetbsd.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/opncls.c ./bfd/opncls.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/opncls.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/opncls.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* opncls.c -- open and close a BFD.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    Written by Cygnus Support.
 
@@ -84,6 +84,7 @@ _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;
     }
@@ -125,20 +126,43 @@ _bfd_delete_bfd (bfd *abfd)
       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.  */
 
-bfd_boolean
+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,7 +174,7 @@ _bfd_free_cached_info (bfd *abfd)
       abfd->memory = NULL;
     }
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -233,8 +257,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 +280,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 +395,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 +463,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 +663,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 +734,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;
@@ -709,7 +762,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 +771,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 +783,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
@@ -747,13 +800,13 @@ 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;
+	return false;
     }
 
   return bfd_close_all_done (abfd);
@@ -764,7 +817,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
@@ -781,13 +834,13 @@ RETURNS
 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
 */
 
-bfd_boolean
+bool
 bfd_close_all_done (bfd *abfd)
 {
-  bfd_boolean ret;
+  bool ret;
 
   if (! BFD_SEND (abfd, _close_and_cleanup, (abfd)))
-    return FALSE;
+    return false;
 
   ret = abfd->iovec->bclose (abfd) == 0;
 
@@ -825,8 +878,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 +896,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
@@ -856,7 +908,7 @@ RETURNS
 	<<TRUE>> is returned if all is ok, otherwise <<FALSE>>.
 */
 
-bfd_boolean
+bool
 bfd_make_writable (bfd *abfd)
 {
   struct bfd_in_memory *bim;
@@ -864,12 +916,12 @@ 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.  */
   bim->size = 0;
@@ -881,7 +933,7 @@ bfd_make_writable (bfd *abfd)
   abfd->direction = write_direction;
   abfd->where = 0;
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -889,7 +941,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
@@ -901,20 +953,20 @@ DESCRIPTION
 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,15 +974,15 @@ 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->cacheable = false;
   abfd->flags |= BFD_IN_MEMORY;
-  abfd->mtime_set = FALSE;
+  abfd->mtime_set = false;
 
-  abfd->target_defaulted = TRUE;
+  abfd->target_defaulted = true;
   abfd->direction = read_direction;
   abfd->sections = 0;
   abfd->symcount = 0;
@@ -940,7 +992,7 @@ bfd_make_readable (bfd *abfd)
   bfd_section_list_clear (abfd);
   bfd_check_format (abfd, bfd_object);
 
-  return TRUE;
+  return true;
 }
 
 /*
@@ -982,32 +1034,6 @@ bfd_alloc (bfd *abfd, bfd_size_type size
 }
 
 /*
-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
 
@@ -1030,39 +1056,6 @@ bfd_zalloc (bfd *abfd, bfd_size_type siz
   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!  */
 
@@ -1209,6 +1202,7 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
   unsigned int crc_offset;
   char *name;
   bfd_size_type size;
+  ufile_ptr file_size;
 
   BFD_ASSERT (abfd);
   BFD_ASSERT (crc32_out);
@@ -1219,15 +1213,15 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
     return NULL;
 
   size = bfd_section_size (sect);
+  file_size = bfd_get_size (abfd);
 
   /* PR 22794: Make sure that the section has a reasonable size.  */
-  if (size < 8 || size >= bfd_get_size (abfd))
+  if (size < 8 || (file_size != 0 && size >= file_size))
     return NULL;
 
   if (!bfd_malloc_and_get_section (abfd, sect, &contents))
     {
-      if (contents != NULL)
-	free (contents);
+      free (contents);
       return NULL;
     }
 
@@ -1298,6 +1292,7 @@ bfd_get_alt_debug_link_info (bfd * abfd,
   unsigned int buildid_offset;
   char *name;
   bfd_size_type size;
+  ufile_ptr file_size;
 
   BFD_ASSERT (abfd);
   BFD_ASSERT (buildid_len);
@@ -1309,13 +1304,13 @@ bfd_get_alt_debug_link_info (bfd * abfd,
     return NULL;
 
   size = bfd_section_size (sect);
-  if (size < 8 || size >= bfd_get_size (abfd))
+  file_size = bfd_get_size (abfd);
+  if (size < 8 || (file_size != 0 && size >= file_size))
     return NULL;
 
   if (!bfd_malloc_and_get_section (abfd, sect, & contents))
     {
-      if (contents != NULL)
-	free (contents);
+      free (contents);
       return NULL;
     }
 
@@ -1337,7 +1332,7 @@ INTERNAL_FUNCTION
 	separate_debug_file_exists
 
 SYNOPSIS
-	bfd_boolean separate_debug_file_exists
+	bool separate_debug_file_exists
 	  (char *name, void *crc32_p);
 
 DESCRIPTION
@@ -1349,10 +1344,10 @@ DESCRIPTION
 	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 char buffer[8 * 1024];
   unsigned long file_crc = 0;
   FILE *f;
   bfd_size_type count;
@@ -1365,7 +1360,7 @@ separate_debug_file_exists (const char *
 
   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);
@@ -1380,14 +1375,14 @@ INTERNAL_FUNCTION
 	separate_alt_debug_file_exists
 
 SYNOPSIS
-	bfd_boolean separate_alt_debug_file_exists
+	bool separate_alt_debug_file_exists
 	  (char *name, void *unused);
 
 DESCRIPTION
 	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,11 +1391,11 @@ 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;
 }
 
 /*
@@ -1409,7 +1404,7 @@ INTERNAL_FUNCTION
 
 SYNOPSIS
 	char *find_separate_debug_file
-	  (bfd *abfd, const char *dir, bfd_boolean include_dirs,
+	  (bfd *abfd, const char *dir, bool include_dirs,
 	   get_func_type get, check_func_type check, void *data);
 
 DESCRIPTION
@@ -1432,16 +1427,16 @@ RETURNS
 	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 +1450,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 +1470,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 +1481,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 +1493,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;
@@ -1620,7 +1616,7 @@ bfd_follow_gnu_debuglink (bfd *abfd, con
 {
   unsigned long 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);
 }
@@ -1667,7 +1663,7 @@ RETURNS
 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);
@@ -1745,7 +1741,7 @@ 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
@@ -1759,7 +1755,7 @@ RETURNS
 	and bfd_error is set.
 */
 
-bfd_boolean
+bool
 bfd_fill_in_gnu_debuglink_section (bfd *abfd,
 				   struct bfd_section *sect,
 				   const char *filename)
@@ -1769,14 +1765,14 @@ bfd_fill_in_gnu_debuglink_section (bfd *
   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.
@@ -1789,7 +1785,7 @@ bfd_fill_in_gnu_debuglink_section (bfd *
   if (handle == NULL)
     {
       bfd_set_error (bfd_error_system_call);
-      return FALSE;
+      return false;
     }
 
   crc32 = 0;
@@ -1811,7 +1807,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,10 +1820,10 @@ 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;
 }
 
 /*
@@ -1882,8 +1878,7 @@ get_build_id (bfd *abfd)
 
   if (!bfd_malloc_and_get_section (abfd, sect, & contents))
     {
-      if (contents != NULL)
-	free (contents);
+      free (contents);
       return NULL;
     }
 
@@ -1909,7 +1904,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))
     {
@@ -1964,7 +1959,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;
@@ -2001,7 +1996,7 @@ INTERNAL_FUNCTION
 	check_build_id_file
 
 SYNOPSIS
-	bfd_boolean check_build_id_file (char *name, void *buildid_p);
+	bool 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
@@ -2013,33 +2008,33 @@ RETURNS
 	@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;
@@ -2085,7 +2080,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 +2090,23 @@ 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)
+    {
+      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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/osf-core.c ./bfd/osf-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/osf-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/osf-core.c	2021-12-16 01:57:38.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-2021 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);
   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 *)
@@ -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));
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pc532-mach.c ./bfd/pc532-mach.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pc532-mach.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pc532-mach.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pdp11.c ./bfd/pdp11.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pdp11.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pdp11.c	2021-12-16 01:57:38.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-2021 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,  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( 2,	       0,  2,  32,  false, 0, complain_overflow_signed,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)
 {
@@ -315,21 +368,21 @@ 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;
+    return false;
 
   if (bfd_bwrite ((void *) &exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd)
       != EXEC_BYTES_SIZE)
-    return FALSE;
+    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;
+	return false;
 
       if (! NAME (aout, write_syms) (abfd))
-	return FALSE;
+	return false;
     }
 
   if (obj_textsec (abfd)->reloc_count > 0
@@ -339,17 +392,17 @@ pdp11_aout_write_headers (bfd *abfd, str
 	  || !NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd))
 	  || bfd_seek (abfd, (file_ptr) (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 +487,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 +505,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 +551,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 +635,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 +647,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 +665,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 +691,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 +713,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 +722,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 +736,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 +798,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 +810,7 @@ NAME (aout, machine_type) (enum bfd_arch
     }
 
   if (arch_flags != M_UNKNOWN)
-    *unknown = FALSE;
+    *unknown = false;
 
   return arch_flags;
 }
@@ -761,21 +819,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 +847,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 +906,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 +918,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 +937,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 +955,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 +998,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 +1107,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 +1117,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 +1158,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 +1211,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 +1221,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 +1238,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;
+	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 +1268,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 +1300,60 @@ 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_bread ((void *) 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)
+	    {
+	      /* Keep the string count in the buffer for convenience
+		 when indexing with e_strx.  */
+	      amt = stringsize - BYTES_IN_LONG;
+	      if (bfd_bread (strings + BYTES_IN_LONG, amt, abfd) != amt)
+		{
+		  free (strings);
+		  return false;
+		}
+	    }
+	}
       /* Ensure that a zero index yields an empty string.  */
-      strings[0] = '\0';
+      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 +1361,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 +1375,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 +1401,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 +1452,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 +1465,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 +1482,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 +1512,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 +1525,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 +1533,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 +1543,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 +1560,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 +1575,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 +1623,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 +1643,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 +1668,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 +1683,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 +1698,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,7 +1715,7 @@ 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];
@@ -1587,12 +1724,12 @@ emit_stringtab (bfd *abfd, struct bfd_st
   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;
+    return false;
 
   return _bfd_stringtab_emit (abfd, tab);
 }
 
-bfd_boolean
+bool
 NAME (aout, write_syms) (bfd *abfd)
 {
   unsigned int count ;
@@ -1601,7 +1738,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,23 +1746,27 @@ 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)
 	goto error_return;
@@ -1640,11 +1781,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;
 }
 
 
@@ -1784,10 +1925,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 +1940,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 +1953,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 +1967,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 +1997,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 +2028,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 +2044,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 +2053,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--;
@@ -1928,11 +2072,11 @@ NAME (aout, squirt_out_relocs) (bfd *abf
   if (bfd_bwrite ((void *) 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.  */
@@ -2103,7 +2247,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 +2280,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 +2298,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 +2308,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 +2330,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 +2359,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 +2394,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 +2455,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 +2463,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 +2472,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 +2491,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 +2515,7 @@ NAME (aout, find_nearest_line) (bfd *abf
       *functionname_ptr = buf;
     }
 
-  return TRUE;
+  return true;
 }
 
 int
@@ -2368,15 +2528,15 @@ NAME (aout, sizeof_headers) (bfd *abfd,
 /* Free all information we have cached for this BFD.  We can always
    read it again later if we need it.  */
 
-bfd_boolean
+bool
 NAME (aout, bfd_free_cached_info) (bfd *abfd)
 {
   asection *o;
 
   if (bfd_get_format (abfd) != bfd_object)
-    return TRUE;
+    return true;
 
-#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
+#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
   BFCI_FREE (obj_aout_symbols (abfd));
 
 #ifdef USE_MMAP
@@ -2392,7 +2552,7 @@ NAME (aout, bfd_free_cached_info) (bfd *
     BFCI_FREE (o->relocation);
 #undef BFCI_FREE
 
-  return TRUE;
+  return true;
 }
 
 /* Routine to create an entry in an a.out link hash table.  */
@@ -2417,7 +2577,7 @@ NAME (aout, link_hash_newfunc) (struct b
   if (ret)
     {
       /* Set local fields.  */
-      ret->written = FALSE;
+      ret->written = false;
       ret->indx = -1;
     }
 
@@ -2426,7 +2586,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 +2603,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 +2620,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 +2642,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 +2660,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 +2688,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 +2707,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 +2750,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 +2777,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 +2787,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 +2815,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 +2823,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 +2849,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 +2886,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 +2904,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 +2926,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 +2984,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 +3009,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 +3046,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 +3059,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 +3081,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,16 +3141,18 @@ 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);
 
@@ -2994,12 +3166,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 +3206,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 +3217,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 +3234,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))
@@ -3132,12 +3304,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 +3335,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;
+    return false;
 
   *reloff_ptr += rel_size;
 
@@ -3180,7 +3352,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 +3371,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 +3379,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 +3434,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 +3496,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 +3561,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 +3583,7 @@ pdp11_aout_link_input_section (struct ao
 		relocation = 0;
 	      else
 		{
-		  hundef = TRUE;
+		  hundef = true;
 		  relocation = 0;
 		}
 	    }
@@ -3423,12 +3601,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 +3624,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 +3665,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 +3685,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
@@ -3520,7 +3698,7 @@ aout_link_input_section (struct aout_fin
 	{
 	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
 	      || bfd_bread (relocs, rel_size, input_bfd) != rel_size)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -3528,7 +3706,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 +3714,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;
+	return false;
       if (bfd_bwrite (relocs, rel_size, flaginfo->output_bfd) != rel_size)
-	return FALSE;
+	return false;
       *reloff_ptr += rel_size;
 
       /* Assert that the relocs have not run into the symbols, and
@@ -3557,12 +3735,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 +3754,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 +3771,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 +3779,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 +3788,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 +3801,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 +3815,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 +3833,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 +3953,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 +3980,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 +3990,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 +4011,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 +4053,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 +4093,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_bwrite (&b, (bfd_size_type) 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 +4146,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 +4160,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 +4181,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 +4193,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 +4220,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 +4269,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 +4351,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 +4362,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 +4454,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 +4468,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 +4536,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 +4549,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 +4592,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 +4603,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 +4622,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;
+	return false;
       flaginfo->symoff += size;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Write out a symbol that was not associated with an a.out input
@@ -4488,6 +4689,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-arm.c ./bfd/pe-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-arm.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pe-arm.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for ARM PECOFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-arm-wince.c ./bfd/pe-arm-wince.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-arm-wince.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pe-arm-wince.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pef.c ./bfd/pef.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pef.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pef.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PEF support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -219,7 +219,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 +254,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)
@@ -446,12 +446,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 +480,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 +505,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;
 }
 
@@ -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);
@@ -753,6 +754,8 @@ bfd_pef_parse_function_stubs (bfd *abfd,
     (header.imported_library_count * sizeof (bfd_pef_imported_library));
   imports = bfd_malloc
     (header.total_imported_symbol_count * sizeof (bfd_pef_imported_symbol));
+  if (libraries == NULL || imports == NULL)
+    goto error;
 
   if (loaderlen < (56 + (header.imported_library_count * 24)))
     goto error;
@@ -799,7 +802,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 +866,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 +895,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 +906,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 +935,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 +1015,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.  */
@@ -1121,7 +1117,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 +1142,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 +1160,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pef.h ./bfd/pef.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pef.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pef.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PEF support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pef-traceback.h ./bfd/pef-traceback.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pef-traceback.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pef-traceback.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* PowerPC traceback table support for BFD.
-   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-i386.c ./bfd/pe-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-i386.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pe-i386.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-arm.c ./bfd/pei-arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-arm.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-arm.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-arm-wince.c ./bfd/pei-arm-wince.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-arm-wince.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-arm-wince.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/peicode.h ./bfd/peicode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/peicode.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/peicode.h	2021-12-16 01:57:38.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-2021 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
@@ -253,16 +253,16 @@ 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);
+  size_t 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;
+    return false;
 
   pe = pe_data (abfd);
 
@@ -290,7 +290,7 @@ pe_mkobject (bfd * abfd)
   pe->dos_message[15] = 0x0;
 
   memset (& pe->pe_opthdr, 0, sizeof pe->pe_opthdr);
-  return TRUE;
+  return true;
 }
 
 /* Create the COFF backend specific information.  */
@@ -349,16 +349,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 +368,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 +380,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 \
@@ -520,7 +520,7 @@ 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;
+  coff_section_data (vars->abfd, sec)->keep_relocs = true;
 
   sec->relocation  = vars->reltab;
   sec->reloc_count = vars->relcount;
@@ -589,7 +589,7 @@ pe_ILF_make_a_symbol (pe_ILF_vars *  var
   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->is_sym = true;
 
   sym->symbol.the_bfd = vars->abfd;
   sym->symbol.name    = vars->string_ptr;
@@ -622,6 +622,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 +653,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 +699,7 @@ typedef struct
 }
 jump_table;
 
-static jump_table jtab[] =
+static const jump_table jtab[] =
 {
 #ifdef I386MAGIC
   { I386MAGIC,
@@ -763,7 +762,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 +778,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 +795,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 +816,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 +829,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 +874,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;
@@ -1120,29 +1114,28 @@ 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_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;
 }
 
 /* We have detected a Image 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];
@@ -1273,16 +1266,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 +1293,7 @@ pe_ILF_object_p (bfd * abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 static void
@@ -1356,8 +1343,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;
     }
 
@@ -1396,9 +1382,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,9 +1394,9 @@ 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.  */
@@ -1492,12 +1480,11 @@ pe_bfd_object_p (bfd * abfd)
       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);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-i386.c ./bfd/pei-i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-i386.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-i386.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-ia64.c ./bfd/pei-ia64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-ia64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-ia64.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-mcore.c ./bfd/pei-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-mcore.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-mcore.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MCore PECOFF files.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-ppc.c ./bfd/pei-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-ppc.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-sh.c ./bfd/pei-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-sh.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-sh.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-x86_64.c ./bfd/pei-x86_64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pei-x86_64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pei-x86_64.c	2021-12-16 01:57:38.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-2021 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
@@ -98,7 +98,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)
 {
@@ -110,7 +110,7 @@ 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;
+    return false;
 
   ui->Version = PEX64_UWI_VERSION (ex_ui->Version_Flags);
   ui->Flags = PEX64_UWI_FLAGS (ex_ui->Version_Flags);
@@ -125,28 +125,28 @@ pex64_get_unwind_info (bfd *abfd, struct
 
   ex_dta += ui->SizeOfBlock;
   if (ex_dta >= ex_dta_end)
-    return FALSE;
+    return false;
 
   switch (ui->Flags)
     {
     case UNW_FLAG_CHAININFO:
       if (ex_dta + 12 >= ex_dta_end)
-	return FALSE;
+	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;
+	return false;
       ui->rva_ExceptionHandler = bfd_get_32 (abfd, ex_dta);
       ui->SizeOfBlock += 4;
-      return TRUE;
+      return true;
     default:
-      return TRUE;
+      return true;
     }
 }
 
@@ -168,7 +168,7 @@ 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;
 
@@ -225,7 +225,7 @@ pex64_xdata_print_uwd_codes (FILE *file,
     {
       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]);
 
@@ -269,7 +269,7 @@ 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:
@@ -312,7 +312,7 @@ 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;
 
@@ -549,7 +549,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 +567,13 @@ 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
       || 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 +588,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)
       {
@@ -817,37 +817,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-mcore.c ./bfd/pe-mcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-mcore.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pe-mcore.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for MCore PECOFF files.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-ppc.c ./bfd/pe-ppc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-ppc.c	2020-03-07 02:07:41.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-sh.c ./bfd/pe-sh.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-sh.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pe-sh.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for SH PECOFF files.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-x86_64.c ./bfd/pe-x86_64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/pe-x86_64.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/pe-x86_64.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,13 +22,17 @@
 
 #include "sysdep.h"
 #include "bfd.h"
+#include "coff/internal.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 +64,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/peXXigen.c ./bfd/peXXigen.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/peXXigen.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/peXXigen.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -70,12 +70,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
@@ -105,12 +101,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 +167,25 @@ _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);
+	  sec = bfd_make_section_anyway_with_flags (abfd, sec_name, flags);
 	  if (sec == NULL)
 	    {
 	      _bfd_error_handler (_("%pB: unable to create fake empty section"),
@@ -222,15 +212,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;
@@ -392,7 +376,7 @@ _bfd_XXi_swap_aux_out (bfd *  abfd,
 	  H_PUT_32 (abfd, in->x_file.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_fname, sizeof (ext->x_file.x_fname));
 
       return AUXESZ;
 
@@ -592,15 +576,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.  */
@@ -876,10 +851,10 @@ _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))
+  if ((pe_data (abfd)->timestamp) == -1)
     H_PUT_32 (abfd, time (0), 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);
@@ -954,11 +929,13 @@ _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);
+  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);
 
   /* 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 +987,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 ?  */
 
@@ -1147,15 +1124,21 @@ CODEVIEW_INFO *
 _bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo)
 {
   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_bread (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 +1159,7 @@ _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;  */
 
       return cvinfo;
     }
@@ -1187,7 +1170,7 @@ _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;  */
 
       return cvinfo;
     }
@@ -1250,26 +1233,13 @@ 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 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;
@@ -1287,12 +1257,12 @@ 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;
+	return true;
 
       addr = section->vma;
       datasize = section->size;
       if (datasize == 0)
-	return TRUE;
+	return true;
     }
   else
     {
@@ -1308,14 +1278,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 +1295,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 +1306,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;
@@ -1590,10 +1506,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 +1546,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,14 +1566,14 @@ 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;
+	  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;
@@ -1668,7 +1584,7 @@ pe_print_edata (bfd * abfd, void * vfile
 	  fprintf (file,
 		   _("\nThere is an export table in %s, but it does not fit into that section\n"),
 		   section->name);
-	  return TRUE;
+	  return true;
 	}
     }
 
@@ -1679,7 +1595,7 @@ 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;
     }
 
   /* xgettext:c-format */
@@ -1688,11 +1604,11 @@ 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;
+    return false;
 
   /* Go get Export Directory Table.  */
   edt.export_flags   = bfd_get_32 (abfd, data +	 0);
@@ -1866,7 +1782,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,7 +1797,7 @@ 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)
@@ -1900,7 +1816,7 @@ pe_print_pdata (bfd * abfd, void * vfile
   if (section == NULL
       || 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)
@@ -1922,7 +1838,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 +1846,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;
@@ -1984,39 +1899,12 @@ pe_print_pdata (bfd * abfd, void * vfile
       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 +1969,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)
@@ -2097,7 +1985,7 @@ _bfd_XX_print_ce_compressed_pdata (bfd *
   if (section == NULL
       || 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,13 +2003,12 @@ _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;
@@ -2196,7 +2083,7 @@ _bfd_XX_print_ce_compressed_pdata (bfd *
 
   cleanup_syms (& cache);
 
-  return TRUE;
+  return true;
 #undef PDATA_ROW_SIZE
 }
 
@@ -2219,7 +2106,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;
@@ -2228,16 +2115,15 @@ pe_print_reloc (bfd * abfd, void * vfile
   bfd_byte *p, *end;
 
   if (section == NULL || section->size == 0 || !(section->flags & SEC_HAS_CONTENTS))
-    return TRUE;
+    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 +2186,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 +2211,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 +2373,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 +2385,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 +2400,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 +2413,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 +2485,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 +2504,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 +2520,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 +2539,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 +2564,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 +2573,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++)
@@ -2722,8 +2611,8 @@ pe_print_debugdata (bfd * abfd, void * v
 					       idd.SizeOfData, cvinfo))
 	    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"),
@@ -2732,16 +2621,82 @@ pe_print_debugdata (bfd * abfd, void * v
 	}
     }
 
+  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 +2720,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
@@ -2857,7 +2825,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 +2838,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 +2851,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 +2911,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,7 +2930,7 @@ 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;
@@ -2942,7 +2938,7 @@ _bfd_XX_bfd_copy_private_bfd_data_common
   /* 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);
@@ -2976,29 +2972,33 @@ _bfd_XX_bfd_copy_private_bfd_data_common
     {
       bfd_vma addr = ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].VirtualAddress
 	+ ope->pe_opthdr.ImageBase;
-      asection *section = find_section_by_vma (obfd, addr);
+      /* 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 + ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size - 1;
+      asection *section = find_section_by_vma (obfd, last);
       bfd_byte *data;
 
+      /* PR 17512: file: 0f15796a.  */
+      if (section && addr < section->vma)
+	{
+	  /* xgettext:c-format */
+	  _bfd_error_handler
+	    (_("%pB: Data Directory (%lx bytes at %" PRIx64 ") "
+	       "extends across section boundary at %" PRIx64),
+	     obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size,
+	     (uint64_t) addr, (uint64_t) section->vma);
+	  return false;
+	}
+
       if (section && bfd_malloc_and_get_section (obfd, section, &data))
 	{
 	  unsigned int i;
 	  struct external_IMAGE_DEBUG_DIRECTORY *dd =
 	    (struct external_IMAGE_DEBUG_DIRECTORY *)(data + (addr - section->vma));
 
-	  /* PR 17512: file: 0f15796a.  */
-	  if ((unsigned long) ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
-	      > section->size - (addr - section->vma))
-	    {
-	      /* xgettext:c-format */
-	      _bfd_error_handler
-		(_("%pB: Data Directory size (%lx) "
-		   "exceeds space left in section (%" PRIx64 ")"),
-		 obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size,
-		 (uint64_t) (section->size - (addr - section->vma)));
-	      free (data);
-	      return FALSE;
-	    }
-
 	  for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size
 		 / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++)
 	    {
@@ -3025,23 +3025,23 @@ _bfd_XX_bfd_copy_private_bfd_data_common
 	    {
 	      _bfd_error_handler (_("failed to update file offsets in debug directory"));
 	      free (data);
-	      return FALSE;
+	      return false;
 	    }
 	  free (data);
 	}
       else if (section)
 	{
 	  _bfd_error_handler (_("%pB: failed to read debug data section"), obfd);
-	  return FALSE;
+	  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 +3049,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 +3076,7 @@ _bfd_XX_bfd_copy_private_section_data (b
 	pei_section_data (ibfd, isec)->pe_flags;
     }
 
-  return TRUE;
+  return true;
 }
 
 void
@@ -3110,12 +3110,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 +3232,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 +3255,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,7 +3299,7 @@ rsrc_parse_entry (bfd *		   abfd,
 
   if (HighBitSet (val))
     {
-      entry->is_dir = TRUE;
+      entry->is_dir = true;
       entry->value.directory = bfd_malloc (sizeof * entry->value.directory);
       if (entry->value.directory == NULL)
 	return dataend;
@@ -3310,7 +3310,7 @@ rsrc_parse_entry (bfd *		   abfd,
 				   dataend, rva_bias, entry);
     }
 
-  entry->is_dir = FALSE;
+  entry->is_dir = false;
   entry->value.leaf = bfd_malloc (sizeof * entry->value.leaf);
   if (entry->value.leaf == NULL)
     return dataend;
@@ -3333,15 +3333,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;
@@ -3409,11 +3409,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 +3575,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 +3612,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 +3649,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 +3667,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 +3694,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 +3719,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 +3783,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 +3832,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 +3844,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 +3881,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 +3891,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 +3921,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 +3961,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 +4027,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 +4116,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
@@ -4297,7 +4284,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 +4293,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 +4335,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 +4351,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 +4370,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 +4390,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 +4411,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 +4431,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 +4452,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 +4473,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 +4481,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,7 +4498,7 @@ _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
@@ -4551,7 +4538,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
 	    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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/plugin.c ./bfd/plugin.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/plugin.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/plugin.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Plugin support for BFD.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -124,13 +124,37 @@ 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_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;
 }
 
@@ -143,6 +167,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,12 +180,12 @@ 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
@@ -170,7 +197,7 @@ bfd_plugin_open_input (bfd *ibfd, struct
   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;
@@ -182,7 +209,35 @@ bfd_plugin_open_input (bfd *ibfd, struct
      the same underlying file descriptor.  */
   file->fd = open (file->name, O_RDONLY | O_BINARY);
   if (file->fd < 0)
-    return 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)
+	    file->fd = open (file->name, O_RDONLY | O_BINARY);
+	}
+
+      if (file->fd < 0)
+#endif
+	{
+	  _bfd_error_handler (_("plugin framework: out of file descriptors. Try using fewer objects/archives\n"));
+	  return 0;
+	} 
+#endif
+   }
 
   if (iobfd == ibfd)
     {
@@ -212,68 +267,79 @@ 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);
+      close (file.fd);
+    }
+
   return claimed;
 }
 
-struct plugin_list_entry
-{
-  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)
+static bool
+try_load_plugin (const char *pname,
+		 struct plugin_list_entry *plugin_list_iter,
+		 bfd *abfd,
+		 bool build_list_p)
 {
-  void *plugin_handle = NULL;
-  struct ld_plugin_tv tv[4];
+  void *plugin_handle;
+  struct ld_plugin_tv tv[5];
   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;
@@ -288,36 +354,39 @@ try_load_plugin (const char *pname, bfd
   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 *);
 
 static const char *plugin_name;
 
@@ -325,32 +394,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 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 +427,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 *))
 {
   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 +442,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,30 +480,42 @@ 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)
@@ -451,51 +524,51 @@ bfd_plugin_object_p (bfd *abfd)
   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
+static bool
 bfd_plugin_bfd_print_private_bfd_data (bfd *abfd ATTRIBUTE_UNUSED, PTR ptr ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (0);
-  return TRUE;
+  return true;
 }
 
 static char *
@@ -557,9 +630,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 +665,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);
@@ -650,6 +747,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 +793,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/plugin.h ./bfd/plugin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/plugin.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/plugin.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Plugin support for BFD.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,10 +24,10 @@
 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 *));
 
 typedef struct plugin_data_struct
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/bfd.pot ./bfd/po/bfd.pot
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/bfd.pot	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/bfd.pot	2021-12-16 01:57:38.000000000 +0000
@@ -8,7 +8,7 @@ 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"
+"POT-Creation-Date: 2021-07-03 15:01+0100\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"
@@ -18,223 +18,236 @@ msgstr ""
 "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:1613 pdp11.c:1238 pdp11.c:1512
 #, c-format
 msgid "%pB: can not represent section `%pA' in a.out object file format"
 msgstr ""
 
-#: 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 ""
 
-#: aoutx.h:1585 vms-alpha.c:7860
+#: aoutx.h:1580 vms-alpha.c:8038
 msgid "*unknown*"
 msgstr ""
 
-#: aoutx.h:1721
+#: aoutx.h:1716 pdp11.c:1580
 #, 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:2412 aoutx.h:2430 pdp11.c:2060
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr ""
 
-#: aoutx.h:4086
+#: aoutx.h:4085 pdp11.c:3441
 #, 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
+#: 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/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
+#: 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 ""
 
-#: 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 ""
 
-#: archive.c:2214
+#: arc-got.h:69
+#, c-format
+msgid "%pB: cannot allocate memory for local GOT entries"
+msgstr ""
+
+#: archive.c:2241
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr ""
 
-#: 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 ""
 
-#: archive.c:2559
+#: archive.c:2594
 msgid "Reading archive file mod timestamp"
 msgstr ""
 
-#: archive.c:2583
+#: archive.c:2618
 msgid "Writing updated armap timestamp"
 msgstr ""
 
-#: bfd.c:449
+#: bfd.c:681
 msgid "no error"
 msgstr ""
 
-#: bfd.c:450
+#: bfd.c:682
 msgid "system call error"
 msgstr ""
 
-#: bfd.c:451
+#: bfd.c:683
 msgid "invalid bfd target"
 msgstr ""
 
-#: bfd.c:452
+#: bfd.c:684
 msgid "file in wrong format"
 msgstr ""
 
-#: bfd.c:453
+#: bfd.c:685
 msgid "archive object file in wrong format"
 msgstr ""
 
-#: bfd.c:454
+#: bfd.c:686
 msgid "invalid operation"
 msgstr ""
 
-#: bfd.c:455
+#: bfd.c:687
 msgid "memory exhausted"
 msgstr ""
 
-#: bfd.c:456
+#: bfd.c:688
 msgid "no symbols"
 msgstr ""
 
-#: bfd.c:457
+#: bfd.c:689
 msgid "archive has no index; run ranlib to add one"
 msgstr ""
 
-#: bfd.c:458
+#: bfd.c:690
 msgid "no more archived files"
 msgstr ""
 
-#: bfd.c:459
+#: bfd.c:691
 msgid "malformed archive"
 msgstr ""
 
-#: bfd.c:460
+#: bfd.c:692
 msgid "DSO missing from command line"
 msgstr ""
 
-#: bfd.c:461
+#: bfd.c:693
 msgid "file format not recognized"
 msgstr ""
 
-#: bfd.c:462
+#: bfd.c:694
 msgid "file format is ambiguous"
 msgstr ""
 
-#: bfd.c:463
+#: bfd.c:695
 msgid "section has no contents"
 msgstr ""
 
-#: bfd.c:464
+#: bfd.c:696
 msgid "nonrepresentable section on output"
 msgstr ""
 
-#: bfd.c:465
+#: bfd.c:697
 msgid "symbol needs debug section which does not exist"
 msgstr ""
 
-#: bfd.c:466
+#: bfd.c:698
 msgid "bad value"
 msgstr ""
 
-#: bfd.c:467
+#: bfd.c:699
 msgid "file truncated"
 msgstr ""
 
-#: bfd.c:468
+#: bfd.c:700
 msgid "file too big"
 msgstr ""
 
-#: bfd.c:469
+#: bfd.c:701
+msgid "sorry, cannot handle this file"
+msgstr ""
+
+#: bfd.c:702
 #, c-format
 msgid "error reading %s: %s"
 msgstr ""
 
-#: bfd.c:470
+#: bfd.c:703
 msgid "#<invalid error code>"
 msgstr ""
 
-#: bfd.c:1429
+#: bfd.c:1640
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr ""
 
-#: bfd.c:1442
+#: bfd.c:1653
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d in %s\n"
 msgstr ""
 
-#: bfd.c:1447
+#: bfd.c:1658
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr ""
 
-#: bfd.c:1449
+#: bfd.c:1660
 msgid "Please report this bug.\n"
 msgstr ""
 
-#: bfdwin.c:206
+#: bfdwin.c:207
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr ""
 
-#: bfdwin.c:209
+#: bfdwin.c:210
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr ""
@@ -256,118 +269,145 @@ 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:856 coff-alpha.c:893 coff-alpha.c:1960 coff-mips.c:953
 msgid "GP relative relocation used when GP not defined"
 msgstr ""
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1447
 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: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 ""
 
-#: 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 ""
+
+#: 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 ""
 
-#: 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:570 coff64-rs6000.c:499
+#, c-format
+msgid "%pB: unsupported swap_aux_out for storage class %#x"
+msgstr ""
+
+#: coff-rs6000.c:3002
 #, 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:3209 coff-rs6000.c:3220
+msgid "%pB: TLS relocation at (0x%"
+msgstr ""
+
+#: coff-rs6000.c:3234
+msgid "%pB: TLS local relocation at (0x%"
+msgstr ""
+
+#: coff-rs6000.c:3642 coff64-rs6000.c:1573
+msgid "%pB: relocatation (%d) at (0x%"
+msgstr ""
+
+#: coff-rs6000.c:3905 coff64-rs6000.c:2023
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized smclas %d"
 msgstr ""
 
-#: 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 ""
 
-#: coff-sh.c:791
+#: coff-sh.c:789
 #, 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:807 elf32-sh.c:551
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: coff-sh.c:1454
+#: coff-sh.c:1451
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: coff-tic80.c:441
+#: coff64-rs6000.c:449 coff64-rs6000.c:555
 #, 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:479
 #, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgid "%pB: wrong auxtype %#x for storage class %#x"
 msgstr ""
 
-#: coffcode.h:954
+#: coffcode.h:986
 #, 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:1021
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr ""
 
-#: coffcode.h:1001
+#: coffcode.h:1033
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr ""
 
-#: coffcode.h:1011
+#: coffcode.h:1043
 #, c-format
 msgid "%pB: warning: no symbol for section '%s' found"
 msgstr ""
@@ -375,397 +415,411 @@ 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:1274
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr ""
 
-#: coffcode.h:1306
+#: coffcode.h:1343
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr ""
 
-#: coffcode.h:1917
+#: coffcode.h:1959 coffcode.h:2024
 #, c-format
 msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr ""
 
-#: coffcode.h:2315
+#: coffcode.h:2385
 #, c-format
 msgid "unrecognized TI COFF target id '0x%x'"
 msgstr ""
 
-#: coffcode.h:2599
+#: coffcode.h:2663
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr ""
 
-#: coffcode.h:2910
+#: coffcode.h:2961
 #, c-format
 msgid "%pB: page size is too large (0x%x)"
 msgstr ""
 
-#: coffcode.h:3070
+#: coffcode.h:3121
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr ""
 
-#: coffcode.h:3489
+#: coffcode.h:3548
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr ""
 
-#: coffcode.h:3589
+#: coffcode.h:3655
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr ""
 
-#: coffcode.h:4276
+#: coffcode.h:4358
 #, c-format
 msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
 msgstr ""
 
-#: coffcode.h:4291
+#: coffcode.h:4378
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr ""
 
-#: 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 ""
 
-#: coffcode.h:4353
+#: coffcode.h:4440
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr ""
 
-#: coffcode.h:4366
+#: coffcode.h:4453
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr ""
 
-#: coffcode.h:4774
+#: coffcode.h:4874
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr ""
 
-#: coffcode.h:4904
+#: coffcode.h:5014
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr ""
 
-#: coffcode.h:5050
+#: coffcode.h:5164
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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:1706
 #, 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:1878 coffgen.c:1938 coffgen.c:1956 cofflink.c:2024 elf.c:1936
+#: xcofflink.c:4540
 msgid "<corrupt>"
 msgstr ""
 
-#: coffgen.c:2114
+#: coffgen.c:2087
 #, c-format
 msgid "<corrupt info> %s"
 msgstr ""
 
-#: 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 ""
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3026 elflink.c:13816
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr ""
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3103 elflink.c:14036
 msgid "warning: gc-sections option ignored"
 msgstr ""
 
-#: cofflink.c:352
+#: cofflink.c:366
 #, 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: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 ""
 
-#: cofflink.c:2373
+#: cofflink.c:2352
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr ""
 
-#: 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 ""
 
-#: cofflink.c:2734
+#: cofflink.c:2610
+msgid "%pB: stripping non-representable symbol '%s' (value %"
+msgstr ""
+
+#: cofflink.c:2728
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr ""
 
-#: cofflink.c:2742
+#: cofflink.c:2736
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr ""
 
-#: coffswap.h:789
+#: cofflink.c:3127
 #, 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:806
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr ""
 
-#: compress.c:260
+#: compress.c:270
+#, c-format
+msgid ""
+"error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size "
+"(%#<PRIx64> bytes)"
+msgstr ""
+
+#: compress.c:281
 #, c-format
 msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
 msgstr ""
 
-#: 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 ""
 
-#: cpu-arm.c:446
+#: cpu-arm.c:455
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr ""
 
-#: dwarf2.c:544
+#: dwarf2.c:552
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr ""
 
-#: 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 ""
+
+#: dwarf2.c:598
 #, c-format
 msgid ""
 "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
 msgstr ""
 
-#: dwarf2.c:1107
+#: dwarf2.c:1201
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr ""
 
-#: dwarf2.c:1275
+#: dwarf2.c:1349
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr ""
 
-#: dwarf2.c:1581
+#: dwarf2.c:1664
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr ""
 
-#: dwarf2.c:1926
+#: dwarf2.c:2007
 msgid "DWARF error: zero format count"
 msgstr ""
 
-#: dwarf2.c:1936
+#: dwarf2.c:2017
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr ""
 
-#: dwarf2.c:1977
+#: dwarf2.c:2056
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr ""
 
-#: dwarf2.c:2057
+#: dwarf2.c:2126
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr ""
 
-#: 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 ""
 
-#: dwarf2.c:2100
+#: dwarf2.c:2166
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr ""
 
-#: dwarf2.c:2110
+#: dwarf2.c:2175
 msgid "DWARF error: ran out of room reading prologue"
 msgstr ""
 
-#: dwarf2.c:2128
+#: dwarf2.c:2191
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr ""
 
-#: dwarf2.c:2155
+#: dwarf2.c:2213
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr ""
 
-#: dwarf2.c:2174
+#: dwarf2.c:2225
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr ""
 
-#: dwarf2.c:2347
+#: dwarf2.c:2393
 msgid "DWARF error: mangled line number section"
 msgstr ""
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:2881
+msgid "DWARF error: abstract instance recursion detected"
+msgstr ""
+
+#: dwarf2.c:2915 dwarf2.c:3009
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr ""
 
-#: dwarf2.c:2889
+#: dwarf2.c:2931
 #, c-format
 msgid "DWARF error: unable to read alt ref %<PRIu64>"
 msgstr ""
 
-#: 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 ""
+
+#: dwarf2.c:3024 dwarf2.c:3305 dwarf2.c:3750
 #, c-format
 msgid "DWARF error: could not find abbrev number %u"
 msgstr ""
 
-#: dwarf2.c:2947
-msgid "DWARF error: abstract instance recursion detected"
+#: dwarf2.c:3538
+#, c-format
+msgid "DWARF error: could not find variable specification at offset 0x%lx"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: dwarf2.c:3523
+#: dwarf2.c:3817
 msgid ""
 "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
 msgstr ""
 
-#: ecoff.c:971
+#: ecoff.c:940
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr ""
 
-#: ecoff.c:1268
+#: ecoff.c:1236
 #, c-format
 msgid "unknown basic type %d"
 msgstr ""
 
-#: ecoff.c:1525
+#: ecoff.c:1492
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1499 ecoff.c:1502
 #, c-format
 msgid ""
 "\n"
 "      First symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1548
+#: ecoff.c:1517
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %-7ld   Type:  %s"
 msgstr ""
 
-#: ecoff.c:1555
+#: ecoff.c:1525
 #, c-format
 msgid ""
 "\n"
 "      Local symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1563
+#: ecoff.c:1533
 #, c-format
 msgid ""
 "\n"
 "      struct; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1568
+#: ecoff.c:1538
 #, c-format
 msgid ""
 "\n"
 "      union; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1573
+#: ecoff.c:1543
 #, c-format
 msgid ""
 "\n"
 "      enum; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1579
+#: ecoff.c:1551
 #, c-format
 msgid ""
 "\n"
 "      Type: %s"
 msgstr ""
 
-#: elf-attrs.c:446
+#: elf-attrs.c:477
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr ""
 
-#: elf-attrs.c:487
+#: elf-attrs.c:514
 #, 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:644
 #, 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:654
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr ""
@@ -791,44 +845,44 @@ msgid ""
 "dropped"
 msgstr ""
 
-#: elf-eh-frame.c:1868
+#: elf-eh-frame.c:1866
 #, c-format
 msgid "%pB: %pA not in order"
 msgstr ""
 
-#: elf-eh-frame.c:1882
+#: elf-eh-frame.c:1880
 #, c-format
 msgid "%pB: %pA invalid input section size"
 msgstr ""
 
-#: elf-eh-frame.c:1890
+#: elf-eh-frame.c:1888
 #, c-format
 msgid "%pB: %pA points past end of text section"
 msgstr ""
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2141
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr ""
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2312
 #, c-format
 msgid "invalid output section for .eh_frame_entry: %pA"
 msgstr ""
 
-#: elf-eh-frame.c:2332
+#: elf-eh-frame.c:2335
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr ""
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2491
 msgid ".eh_frame_hdr entry overflow"
 msgstr ""
 
-#: elf-eh-frame.c:2490
+#: elf-eh-frame.c:2493
 msgid ".eh_frame_hdr refers to overlapping FDEs"
 msgstr ""
 
-#: 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 "
@@ -836,92 +890,89 @@ 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-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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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: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 ""
 
-#: 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: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 ""
 
@@ -950,442 +1001,565 @@ 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:205
 #, c-format
 msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"
 msgstr ""
 
-#: elf-properties.c:301
+#: elf-properties.c:391
 msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n"
 msgstr ""
 
-#: elf-properties.c:307
+#: elf-properties.c:397
 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:406 elf-properties.c:484
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr ""
 
-#: elf-properties.c:320
+#: elf-properties.c:410
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr ""
 
-#: 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 ""
 
-#: elf-properties.c:348
+#: elf-properties.c:436
 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n"
 msgstr ""
 
-#: elf-properties.c:390
+#: elf-properties.c:478
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr ""
 
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:640 elf-properties.c:642
 msgid "\n"
 msgstr ""
 
-#: elf-properties.c:553
+#: elf-properties.c:641
 msgid "Merging program properties\n"
 msgstr ""
 
 #. 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 ""
 
-#: elf.c:360
+#: elf.c:362
 #, 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:514 elfnn-aarch64.c:8104
 #, 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:676
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr ""
 
-#: elf.c:728
+#: elf.c:721
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr ""
 
-#: elf.c:747
+#: elf.c:740
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr ""
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:769
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr ""
 
-#: elf.c:837
+#: elf.c:830
 #, 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:878
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr ""
 
-#: elf.c:901
+#: elf.c:891
 #, c-format
 msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
 msgstr ""
 
-#: elf.c:922
+#: elf.c:912
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr ""
 
-#: elf.c:945
+#: elf.c:935
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr ""
 
-#: elf.c:1408
+#: elf.c:1453
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr ""
 
-#: elf.c:1424
+#: elf.c:1469
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr ""
 
-#: elf.c:1451
+#: elf.c:1496
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr ""
 
-#: elf.c:1623
+#: elf.c:1668
 #, c-format
 msgid ""
 "\n"
 "Program Header:\n"
 msgstr ""
 
-#: elf.c:1665
+#: elf.c:1710
 #, c-format
 msgid ""
 "\n"
 "Dynamic Section:\n"
 msgstr ""
 
-#: elf.c:1806
+#: elf.c:1851
 #, c-format
 msgid ""
 "\n"
 "Version definitions:\n"
 msgstr ""
 
-#: elf.c:1831
+#: elf.c:1876
 #, c-format
 msgid ""
 "\n"
 "Version References:\n"
 msgstr ""
 
-#: elf.c:1836
+#: elf.c:1881
 #, c-format
 msgid "  required from %s:\n"
 msgstr ""
 
-#: elf.c:2037
+#: elf.c:2071
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr ""
 
-#: elf.c:2145
+#: elf.c:2178
 #, c-format
 msgid ""
 "%pB: warning: multiple symbol tables detected - ignoring the table in "
 "section %u"
 msgstr ""
 
-#: elf.c:2229
+#: elf.c:2262
 #, c-format
 msgid ""
 "%pB: warning: multiple dynamic symbol tables detected - ignoring the table "
 "in section %u"
 msgstr ""
 
-#: elf.c:2342
+#: elf.c:2375
 #, 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:2466
+#, c-format
+msgid ""
+"%pB: warning: secondary relocation section '%s' for section %pA found - "
+"ignoring"
+msgstr ""
+
+#: elf.c:2552 elf.c:2567 elf.c:2578 elf.c:2591
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr ""
 
-#: elf.c:3248
+#: elf.c:3288
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr ""
 
-#: elf.c:3278
+#: elf.c:3321
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr ""
 
-#: elf.c:3754
+#: elf.c:3805
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr ""
 
-#: elf.c:3839
+#: elf.c:3891
 #, c-format
 msgid ""
 "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'"
 msgstr ""
 
-#: elf.c:3864
+#: elf.c:3909
 #, c-format
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr ""
 
-#: elf.c:4430
+#: elf.c:4471
 #, 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:5065
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr ""
 
-#: elf.c:5020
+#: elf.c:5072
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr ""
 
-#: elf.c:5024
+#: elf.c:5076
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr ""
 
-#: elf.c:5538
+#: elf.c:5672
 #, c-format
 msgid ""
 "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr ""
 
-#: elf.c:5566
+#: elf.c:5698
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr ""
 
-#: elf.c:5654
+#: elf.c:5815
 #, 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:5952
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr ""
+
+#: elf.c:5992
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr ""
 
-#: elf.c:5839
+#: elf.c:6129
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr ""
 
-#: elf.c:6072
+#: elf.c:6290
 #, 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
-#, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr ""
-
-#: elf.c:6606
+#: elf.c:6799
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr ""
 
-#: elf.c:6949
+#: elf.c:7151
 #, c-format
 msgid ""
 "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this "
 "intentional?"
 msgstr ""
 
-#: elf.c:7574
+#: elf.c:7779
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr ""
 
-#: elf.c:8073
+#: elf.c:8292
+#, c-format
+msgid ""
+"%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr ""
+
+#: elf.c:8322
 #, c-format
 msgid ""
 "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr ""
 
-#: elf.c:8421
+#: elf.c:8735
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr ""
 
-#: elf.c:8548
+#: elf.c:8868
 #, 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:9325
+#, c-format
+msgid ""
+"%pB:%pA: error: attempting to write into an unallocated compressed section"
+msgstr ""
+
+#: elf.c:9334
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr ""
+
+#: elf.c:9345
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr ""
+
+#: elf.c:10246
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr ""
+
+#: 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 ""
+
+#: elf.c:12633
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:12636
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:12639
+msgid ""
+"symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:12642
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr ""
+
+#: elf.c:12850 elf64-sparc.c:123 elfcode.h:1504
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr ""
+
+#: elf.c:12925
+#, c-format
+msgid ""
+"%pB(%pA): link section cannot be set because the output file does not have a "
+"symbol table"
+msgstr ""
+
+#: elf.c:12937
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr ""
+
+#: elf.c:12951
+#, c-format
+msgid ""
+"%pB(%pA): info section index cannot be set because the section is not in the "
+"output"
+msgstr ""
+
+#: elf.c:13026
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr ""
+
+#: elf.c:13038
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr ""
+
+#: elf.c:13049
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr ""
+
+#: elf.c:13061
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr ""
+
+#: elf.c:13084
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr ""
+
+#: elf.c:13103
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr ""
+
+#: elf.c:13128
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr ""
+
+#: elf.c:13145
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr ""
+
+#: elf.c:13158
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr ""
+
+#. 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 ""
 
-#: 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:3866 elf64-sparc.c:722 elfxx-mips.c:15568
 #, 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>)"
 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:1885
 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: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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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: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 ""
 
-#: elf32-arc.c:2949
+#: elf32-arc.c:2910
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr ""
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2918
 #, 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: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 "
@@ -1393,141 +1567,156 @@ msgid ""
 "movw instruction"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:4697
+#: elf32-arm.c:4578
+#, c-format
+msgid ""
+"ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination "
+"(%#<PRIx64>)"
+msgstr ""
+
+#: elf32-arm.c:4747
 #, 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: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 ""
 
-#: 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 ""
+
+#: elf32-arm.c:6011
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-arm.c:6011
+#: elf32-arm.c:6065
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr ""
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6077
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr ""
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6089
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr ""
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6096
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr ""
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6225
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:6239
+#: elf32-arm.c:6296
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr ""
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6320
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr ""
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6335
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr ""
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6344
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:6326
+#: elf32-arm.c:6383
 msgid ""
 "new entry function(s) introduced but no output import library specified:"
 msgstr ""
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6391
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7847
 #, 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:8074
 #, c-format
 msgid ""
 "%pB: warning: selected VFP11 erratum workaround is not necessary for target "
 "architecture"
 msgstr ""
 
-#: elf32-arm.c:8051
+#: elf32-arm.c:8101
 #, 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:8637 elf32-arm.c:8657 elf32-arm.c:8724 elf32-arm.c:8743
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr ""
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8950
 #, c-format
 msgid ""
 "%pB(%pA+%#x): error: multiple load detected in non-last IT block "
@@ -1535,646 +1724,654 @@ msgid ""
 "it to generate only one instruction per IT block"
 msgstr ""
 
-#: elf32-arm.c:9000
+#: elf32-arm.c:9048
 #, 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:9818
 #, 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:10127 elf32-arm.c:10169
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr ""
 
-#: elf32-arm.c:10492
+#: elf32-arm.c:10519
 msgid "shared object"
 msgstr ""
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10522
 msgid "PIE executable"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
+
+#: elf32-arm.c:11953 elf32-arm.c:11979
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by "
 "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: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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-arm.c:13078 elf32-sh.c:3689
+#: elf32-arm.c:12608 elf32-arm.c:12767
+msgid "local symbol index too big"
+msgstr ""
+
+#: elf32-arm.c:12618 elf32-arm.c:12652
+msgid "no dynamic index information available"
+msgstr ""
+
+#: elf32-arm.c:12660
+msgid "invalid dynamic index"
+msgstr ""
+
+#: elf32-arm.c:12777
+msgid "dynamic index information not available"
+msgstr ""
+
+#: elf32-arm.c:13208 elf32-sh.c:3565
 #, 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: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 ""
 
-#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705
-#: /work/sources/binutils/current/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 ""
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13406 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
 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:13410 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7172
 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:13418 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7180
 msgid "unknown error"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:13768
+#: elf32-arm.c:13902
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14034
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14042
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14342
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14477
 #, c-format
 msgid ""
 "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr ""
 
-#: elf32-arm.c:14339
+#: elf32-arm.c:14506
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr ""
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14665
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr ""
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14691
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr ""
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14830
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr ""
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14839
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr ""
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14851
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-arm.c:14739
+#: elf32-arm.c:14907
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr ""
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:14924
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr ""
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:14960
 #, 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:15056
 #, c-format
 msgid " [interworking enabled]"
 msgstr ""
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15064
 #, c-format
 msgid " [VFP float format]"
 msgstr ""
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15066
 #, c-format
 msgid " [Maverick float format]"
 msgstr ""
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15068
 #, c-format
 msgid " [FPA float format]"
 msgstr ""
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15071
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr ""
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15074 elf32-arm.c:15160
 #, c-format
 msgid " [position independent]"
 msgstr ""
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15077
 #, c-format
 msgid " [new ABI]"
 msgstr ""
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15080
 #, c-format
 msgid " [old ABI]"
 msgstr ""
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15083
 #, c-format
 msgid " [software FP]"
 msgstr ""
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15092
 #, c-format
 msgid " [Version1 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15095 elf32-arm.c:15106
 #, c-format
 msgid " [sorted symbol table]"
 msgstr ""
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15097 elf32-arm.c:15108
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr ""
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15103
 #, c-format
 msgid " [Version2 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15111
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr ""
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15114
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr ""
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15121
 #, c-format
 msgid " [Version3 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15125
 #, c-format
 msgid " [Version4 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15129
 #, c-format
 msgid " [Version5 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15132
 #, c-format
 msgid " [soft-float ABI]"
 msgstr ""
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15135
 #, c-format
 msgid " [hard-float ABI]"
 msgstr ""
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15141
 #, c-format
 msgid " [BE8]"
 msgstr ""
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15144
 #, c-format
 msgid " [LE8]"
 msgstr ""
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15150
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr ""
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15157
 #, c-format
 msgid " [relocatable executable]"
 msgstr ""
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15163
 #, c-format
 msgid " [FDPIC ABI supplement]"
 msgstr ""
 
-#: elf32-arm.c:15000 /work/sources/binutils/current/bfd/elfnn-aarch64.c:7040
+#: elf32-arm.c:15168 elfnn-aarch64.c:7337
 #, 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: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 ""
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15675
 #, 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:16936
 #, 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:17309 elflink.c:12991 elflink.c:13038
 #, 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:18230
 #, 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:18494
 #, 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:18521
 #, 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:19348 elf32-arm.c:19370
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-arm.c:19478
+#: elf32-arm.c:19460
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr ""
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20544
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20677
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr ""
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20696
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr ""
 
-#: elf32-arm.c:20723
+#: elf32-arm.c:20700
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr ""
 
-#: elf32-arm.c:20737
+#: elf32-arm.c:20714
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr ""
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20720
 #, 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
+#: 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 ""
 
-#: elf32-avr.c:3327 /work/sources/binutils/current/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3324 elfnn-aarch64.c:3218
 #, c-format
 msgid "cannot create stub entry %s"
 msgstr ""
 
-#: elf32-bfin.c:106 elf32-bfin.c:362
+#: elf32-bfin.c:107 elf32-bfin.c:363
 msgid "relocation should be even number"
 msgstr ""
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1587
 #, 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: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 ""
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2645
 #, c-format
 msgid ""
 "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero "
 "addend"
 msgstr ""
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2662
 msgid "relocation references symbol not defined in the module"
 msgstr ""
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2760
 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2880
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr ""
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3043
 msgid "relocations between different segments are not supported"
 msgstr ""
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3044
 msgid "warning: relocation references a different segment"
 msgstr ""
 
-#: 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 ""
+
+#: elf32-bfin.c:4780 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:4784 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:4921
 #, c-format
 msgid "*** check this relocation %s"
 msgstr ""
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5037
 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:5331 elf32-cr16.c:2713 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 +2379,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:2019
 msgid "GOT table size out of range"
 msgstr ""
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2831
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr ""
 
-#: elf32-csky.c:2977
+#: 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:2990
+#: elf32-csky.c:2941
 #, 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: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:4225 elf32-i386.c:351
+#: elf32-csky.c:4342 elf32-i386.c:350
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr ""
@@ -2274,80 +2497,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:569 elf32-ip2k.c:1484
 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 +2584,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 +2606,317 @@ msgstr ""
 msgid "%pB: relocations in generic ELF (EM: %d)"
 msgstr ""
 
-#: 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 ""
+
+#: 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:4413
 msgid ".got section not immediately after .plt section"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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: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 ""
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1793
 #, c-format
 msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-i386.c:2604 elf64-x86-64.c:2919
+#: elf32-i386.c:2610 elf64-x86-64.c:2988
 msgid "hidden symbol"
 msgstr ""
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2613 elf64-x86-64.c:2991
 msgid "internal symbol"
 msgstr ""
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2616 elf64-x86-64.c:2994
 msgid "protected symbol"
 msgstr ""
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2619 elf64-x86-64.c:2997
 msgid "symbol"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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:1297
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr ""
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1316
 #, 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:1093 elf32-microblaze.c:1141
 #, 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:6851
 #, 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"
 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:3582 elf32-ppc.c:3590
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr ""
+
+#: elf32-m68k.c:1280 elf32-m68k.c:1281 vms-alpha.c:7662 vms-alpha.c:7678
 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,415 +2932,418 @@ 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:1536 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:1777 elf64-mips.c:3516 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: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 ""
 
-#: 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:2671
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr ""
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2772
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-msp430.c:2480
+#: elf32-msp430.c:2797
 #, c-format
 msgid "error: %pB uses the large code model but %pB uses MSP430 instructions"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2858
 #, 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:3625
 #, 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:5524
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr ""
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5650
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr ""
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5691
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr ""
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5713
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6687
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6789
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr ""
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6799
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr ""
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6826
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr ""
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6857
 #, c-format
 msgid ": n1 instructions"
 msgstr ""
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6860
 #, c-format
 msgid ": n1h instructions"
 msgstr ""
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9313
 #, c-format
 msgid "%pB: error: search_nds32_elf_blank reports wrong node"
 msgstr ""
 
-#: elf32-nds32.c:9722
+#: elf32-nds32.c:9577
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr ""
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12842
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr ""
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12861
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-nios2.c:2930
+#: elf32-nios2.c:2934
 #, c-format
 msgid "error: %pB: big-endian R2 is not supported"
 msgstr ""
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:3826
 #, 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: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"
+"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:4511 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:4521 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr ""
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5364
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr ""
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1241
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr ""
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1349
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr ""
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1403
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr ""
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1520
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr ""
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1537
 #, 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:1554 elf64-alpha.c:4426 elf64-alpha.c:4570
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1568
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr ""
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1652
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr ""
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1831
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr ""
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2165
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr ""
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3279
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr ""
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:987 elf64-ppc.c:1723
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr ""
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1627
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr ""
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1646
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr ""
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1688
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr ""
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1737
 msgid "failed to allocate space for new APUinfo section"
 msgstr ""
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1756
 msgid "failed to compute new APUinfo section"
 msgstr ""
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1759
 msgid "failed to install new APUinfo section"
 msgstr ""
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2858
 #, 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:3598 elf32-ppc.c:3606
 #, 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:3628 elf32-ppc.c:3636
 #, 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:3644 elf32-ppc.c:3652
 #, 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:3719 elf32-ppc.c:3728
 #, 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:3757 elf32-ppc.c:3766
 #, c-format
 msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
 msgstr ""
 
-#: elf32-ppc.c:3829
+#: elf32-ppc.c:3830
 #, c-format
 msgid ""
 "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr ""
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3838
 #, c-format
 msgid ""
 "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr ""
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3907
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn"
 msgstr ""
 
-#: elf32-ppc.c:3925
+#: elf32-ppc.c:3926
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr ""
 
-#: elf32-ppc.c:4028
+#: elf32-ppc.c:4029
 #, c-format
 msgid "bss-plt forced due to %pB"
 msgstr ""
 
-#: elf32-ppc.c:4030
+#: elf32-ppc.c:4031
 msgid "bss-plt forced by profiling"
 msgstr ""
 
+#: elf32-ppc.c:4608 elf64-ppc.c:8317
+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:8382
 #, 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: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:7457
+#: elf32-ppc.c:7407
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr ""
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7444
 msgid "%H: fixup branch overflow\n"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-ppc.c:7634
+#: elf32-ppc.c:7584
 #, 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"
-msgstr ""
-
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7899
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr ""
@@ -3118,59 +3356,59 @@ 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:7931
 #, c-format
 msgid "%X%H: @local call to ifunc %s\n"
 msgstr ""
 
-#: elf32-ppc.c:8187
+#: elf32-ppc.c:8109
 #, 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: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 ""
 
-#: elf32-ppc.c:8855 elf32-ppc.c:8873
-msgid "%P: %H: %s relocation unsupported for bss-plt\n"
+#: elf32-ppc.c:8814 elf32-ppc.c:8832
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
 msgstr ""
 
-#: elf32-ppc.c:8954
+#: elf32-ppc.c:8913
 #, c-format
 msgid "%H: error: %s against `%s' not a multiple of %u\n"
 msgstr ""
 
-#: elf32-ppc.c:8983
+#: elf32-ppc.c:8942
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr ""
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9023
 #, c-format
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-ppc.c:10008
+#: elf32-ppc.c:9953
 #, 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:1475
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr ""
@@ -3187,7 +3425,7 @@ msgstr ""
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr ""
 
-#: 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 ""
@@ -3216,17 +3454,17 @@ msgstr ""
 msgid " [64-bit doubles]"
 msgstr ""
 
-#: elf32-rx.c:605
+#: elf32-rx.c:607
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr ""
 
-#: elf32-rx.c:612
+#: elf32-rx.c:614
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr ""
 
-#: elf32-rx.c:684
+#: elf32-rx.c:689
 #, c-format
 msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s"
 msgstr ""
@@ -3235,69 +3473,69 @@ 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:709
 #, c-format
 msgid "%pB(%pA): unsafe PID relocation %s at %#<PRIx64> (against %s in %s)"
 msgstr ""
 
-#: elf32-rx.c:1288
+#: elf32-rx.c:1293
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr ""
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:3173
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr ""
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3176
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr ""
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3178
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr ""
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3785
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr ""
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3793
 #, 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:1963
 #, 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:1524 elf32-score7.c:1385 elfxx-mips.c:3798
 msgid "not enough GOT space for local GOT entries"
 msgstr ""
 
-#: elf32-score.c:2746
+#: elf32-score.c:2756
 msgid "address not word aligned"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-score.c:4003 elf32-score7.c:3808
+#: elf32-score.c:3999 elf32-score7.c:3804
 #, c-format
 msgid " [pic]"
 msgstr ""
 
-#: elf32-score.c:4007 elf32-score7.c:3812
+#: elf32-score.c:4003 elf32-score7.c:3808
 #, c-format
 msgid " [fix dep]"
 msgstr ""
@@ -3307,49 +3545,45 @@ msgstr ""
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr ""
 
-#: elf32-sh.c:533
+#: elf32-sh.c:532
 #, c-format
 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:3752
 #, 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:3782 elf32-sh.c:3798
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-sh.c:4586
+#: elf32-sh.c:4458
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
 msgstr ""
 
-#: elf32-sh.c:4705
+#: elf32-sh.c:4577
 #, c-format
 msgid ""
 "%pB(%pA): offset in relocation for GD->LE translation is too small: "
@@ -3357,125 +3591,125 @@ msgid ""
 msgstr ""
 
 #. 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 ""
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4603
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr ""
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4610
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr ""
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4617
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr ""
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4624
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr ""
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4631
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-sh.c:4812
+#: elf32-sh.c:4684
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
 msgstr ""
 
-#: elf32-sh.c:4821
+#: elf32-sh.c:4693
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
 msgstr ""
 
-#: elf32-sh.c:4828
+#: elf32-sh.c:4700
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-sh.c:5139
+#: elf32-sh.c:5011
 #, c-format
 msgid "%X%C: relocation to \"%s\" references a different segment\n"
 msgstr ""
 
-#: elf32-sh.c:5146
+#: elf32-sh.c:5018
 #, c-format
 msgid "%C: warning: relocation to \"%s\" references a different segment\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5514
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5836
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr ""
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5848
 #, c-format
 msgid ""
 "internal error: merge of architecture '%s' with architecture '%s' produced "
 "unknown architecture"
 msgstr ""
 
-#: elf32-sh.c:6059
+#: elf32-sh.c:5889
 #, c-format
 msgid ""
 "%pB: uses instructions which are incompatible with instructions used in "
 "previous modules"
 msgstr ""
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5902
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr ""
@@ -3490,82 +3724,88 @@ 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:736
 msgid "%X%P: overlay section %pA does not start on a cache line\n"
 msgstr ""
 
-#: elf32-spu.c:740
+#: elf32-spu.c:744
 msgid "%X%P: overlay section %pA is larger than a cache line\n"
 msgstr ""
 
-#: elf32-spu.c:760
+#: elf32-spu.c:764
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1031
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr ""
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1381
 #, c-format
 msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
 msgstr ""
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1911
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr ""
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1919
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr ""
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1953
 #, c-format
 msgid "%s in overlay section"
 msgstr ""
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1982
 msgid "overlay stub relocation overflow"
 msgstr ""
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1991 elf64-ppc.c:14761
 msgid "stubs don't match calculated size"
 msgstr ""
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2574
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr ""
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2590
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr ""
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2622
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-spu.c:3330
+#: elf32-spu.c:3329
 #, c-format
 msgid "stack analysis will ignore the call from %s to %s\n"
 msgstr ""
 
-#: elf32-spu.c:4027
+#: elf32-spu.c:4026
 msgid "  calls:\n"
 msgstr ""
 
@@ -3625,326 +3865,325 @@ msgstr ""
 msgid "fatal error while creating .fixup"
 msgstr ""
 
-#: elf32-spu.c:5049
+#: elf32-spu.c:5050
 #, 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:1397
+#: elfnn-aarch64.c:9711 elfnn-riscv.c:3253
 #, 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:3591 elf32-v850.c:3830
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3687
 #, 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 +4199,275 @@ 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:2076 elfnn-ia64.c:2345
 msgid "non-zero addend in @fptr reloc"
 msgstr ""
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:1002
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr ""
 
-#: elf32-xtensa.c:2675
+#: elf32-xtensa.c:2734
 #, 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:2817 elf32-xtensa.c:2940
 msgid "dynamic relocation in read-only section"
 msgstr ""
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2917
 msgid "TLS relocation invalid without dynamic sections"
 msgstr ""
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3130
 msgid "internal inconsistency in size of .got.loc section"
 msgstr ""
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3436
 #, 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:4735 elf32-xtensa.c:4743
 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:6571 elf32-xtensa.c:6650 elf32-xtensa.c:8076
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration "
 "mismatch"
 msgstr ""
 
-#: 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 ""
 
-#: elf32-xtensa.c:9493
+#: elf32-xtensa.c:9675
 msgid "invalid relocation address"
 msgstr ""
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9766
 msgid "overflow after relaxation"
 msgstr ""
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10912
 #, 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:2002 elf64-alpha.c:2697 elflink.c:15091
+#, 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: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 ""
 
-#: 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 ""
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4455
 #, 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:4480 mach-o.c:616 elfnn-riscv.c:619
 msgid "<unknown>"
 msgstr ""
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4486
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr ""
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4544
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr ""
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4579
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr ""
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4645
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr ""
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4670
 #, 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: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: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: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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf64-mips.c:4098
+#: elf64-mips.c:4095
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr ""
@@ -4257,166 +4519,192 @@ 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:1349
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr ""
+
+#: elf64-ppc.c:4153
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr ""
 
-#: elf64-ppc.c:4002
+#: elf64-ppc.c:4334
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr ""
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:4906
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr ""
 
-#: elf64-ppc.c:4919
+#: elf64-ppc.c:5316
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr ""
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5324
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr ""
 
-#: elf64-ppc.c:4954
+#: elf64-ppc.c:5351
 #, c-format
 msgid " [abiv%ld]"
 msgstr ""
 
-#: 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 ""
 
-#: elf64-ppc.c:6417
+#: elf64-ppc.c:6916
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr ""
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7164
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr ""
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7253
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr ""
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7263
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr ""
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7285
 #, 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:7779
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr ""
+
+#: elf64-ppc.c:7787
 msgid ""
 "warning: --plt-localentry is especially dangerous without ld.so support to "
 "detect ABI violations"
 msgstr ""
 
-#: elf64-ppc.c:7499
+#: elf64-ppc.c:8111
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr ""
 
-#: 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 ""
 
-#: elf64-ppc.c:8241
+#: elf64-ppc.c:9216
 #, 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:9437
 #, 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:10282
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr ""
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11433
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr ""
 
-#: 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 ""
+
+#: elf64-ppc.c:11542
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr ""
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11569
 #, 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:11633 elf64-ppc.c:11898 elf64-ppc.c:14202
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12102
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr ""
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13114
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr ""
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14381
+msgid "__tls_get_addr call offset overflow"
+msgstr ""
+
+#: elf64-ppc.c:14720 elf64-ppc.c:14739
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr ""
 
-#: 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] ""
 msgstr[1] ""
 
-#: 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"
@@ -4431,886 +4719,1108 @@ msgid ""
 "  global entry   %lu"
 msgstr ""
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15178
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15180
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf64-ppc.c:14985
+#: elf64-ppc.c:16845
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr ""
 
-#: 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 ""
+
+#: elf64-ppc.c:16985
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:15326
+#: elf64-ppc.c:17233
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr ""
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17256
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:17400
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr ""
 
-#: 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 ""
 
-#: elf64-sparc.c:109 elfcode.h:1471
-#, c-format
-msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
-msgstr ""
-
-#: elf64-sparc.c:467
+#: elf64-sparc.c:478
 #, c-format
 msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr ""
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:499
 #, c-format
 msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB"
 msgstr ""
 
-#: elf64-sparc.c:512
+#: elf64-sparc.c:523
 #, c-format
 msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
 msgstr ""
 
-#: elf64-sparc.c:559
+#: elf64-sparc.c:570
 #, c-format
 msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
 msgstr ""
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:702
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr ""
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1415
 msgid "hidden symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1418
 msgid "internal symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1421 elf64-x86-64.c:1425
 msgid "protected symbol "
 msgstr ""
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1427
 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:1433
 msgid "undefined "
 msgstr ""
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1443
 msgid "a shared object"
 msgstr ""
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1445
+msgid "; recompile with -fPIC"
+msgstr ""
+
+#: elf64-x86-64.c:1450
 msgid "a PIE object"
 msgstr ""
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1452
 msgid "a PDE object"
 msgstr ""
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1454
+msgid "; recompile with -fPIE"
+msgstr ""
+
+#: elf64-x86-64.c:1458
 #, 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:1966
 #, 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:2122
 #, 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: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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elf64-x86-64.c:3885
-msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
+#: elf64-x86-64.c:3437 elflink.c:13453
+msgid "%F%P: corrupt input: %pB\n"
+msgstr ""
+
+#: elf64-x86-64.c:4123
+#, 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:4284
 #, 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:4352
 #, c-format
 msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
 msgstr ""
 
-#: 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 ""
 
-#: elfcode.h:323
-msgid "warning: %pB has a corrupt section with a size (%"
+#: elfcode.h:329
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
 msgstr ""
 
-#: elfcode.h:768
+#: elfcode.h:775
 #, c-format
 msgid "warning: %pB has a corrupt string table index - ignoring"
 msgstr ""
 
-#: elfcode.h:1212
+#: elfcode.h:819
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr ""
+
+#: elfcode.h:1244
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr ""
 
-#: elfcore.h:300
+#: elfcore.h:308
 #, c-format
 msgid ""
 "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: "
 "%<PRIu64>"
 msgstr ""
 
-#: 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 ""
 
-#: elflink.c:1373
+#: elflink.c:1390
 #, c-format
 msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
 msgstr ""
 
-#: elflink.c:1379
+#: elflink.c:1396
 #, c-format
 msgid ""
 "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB"
 msgstr ""
 
-#: elflink.c:1385
+#: elflink.c:1402
 #, c-format
 msgid ""
 "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA"
 msgstr ""
 
-#: elflink.c:2075
+#: elflink.c:2114
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr ""
 
-#: elflink.c:2452
+#: elflink.c:2496
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr ""
 
-#: elflink.c:2541
+#: elflink.c:2587
 #, c-format
 msgid ""
 "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in "
 "section `%pA'"
 msgstr ""
 
-#: 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 ""
 
-#: elflink.c:2744
+#: elflink.c:2788
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr ""
 
-#: elflink.c:3066
+#: elflink.c:3117
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr ""
 
-#: elflink.c:3128
+#: elflink.c:3177
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr ""
 
-#: elflink.c:3932
+#: elflink.c:4117
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr ""
 
-#: elflink.c:4598
+#: elflink.c:4600
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr ""
+
+#: elflink.c:4668
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr ""
+
+#: elflink.c:4816
+#, c-format
+msgid "%pB: not enough version information"
+msgstr ""
+
+#: elflink.c:4854
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr ""
 
-#: elflink.c:4635
+#: elflink.c:4891
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr ""
 
-#: elflink.c:5054
+#: elflink.c:5309
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr ""
 
-#: elflink.c:6130
+#: elflink.c:6375
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr ""
 
-#: elflink.c:6134
+#: elflink.c:6379
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr ""
 
-#: elflink.c:6331
+#: elflink.c:6576
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr ""
 
-#: elflink.c:6902
+#: elflink.c:7148
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr ""
 
-#: elflink.c:8359
+#: elflink.c:8740
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr ""
 
-#: elflink.c:8514
+#: elflink.c:8903 elflink.c:8911
+msgid "division by zero"
+msgstr ""
+
+#: elflink.c:8925
 #, 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:9263
 #, c-format
 msgid ""
 "%pB:%pA: error: relocation references symbol %s which was removed by garbage "
 "collection"
 msgstr ""
 
-#: elflink.c:8855
+#: elflink.c:9266
 #, 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: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 ""
 
 #. 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 ""
 
-#: elflink.c:9234
+#: elflink.c:9654
 msgid "not enough memory to sort relocations"
 msgstr ""
 
-#: elflink.c:9502
+#: elflink.c:9998
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr ""
 
-#: elflink.c:9782
+#: elflink.c:10274
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr ""
 
-#: elflink.c:9785
+#: elflink.c:10277
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr ""
 
-#: elflink.c:9788
+#: elflink.c:10280
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr ""
 
-#: elflink.c:9874
+#: elflink.c:10366
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr ""
 
-#: elflink.c:10028
+#: elflink.c:10520
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr ""
 
-#: elflink.c:10031
+#: elflink.c:10523
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr ""
 
-#: elflink.c:10034
+#: elflink.c:10526
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr ""
 
-#: elflink.c:10066
+#: elflink.c:10558
 #, 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:10957
 #, c-format
 msgid ""
-"error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a "
-"non-existent global symbol"
+"warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
 msgstr ""
 
-#: elflink.c:11484
+#: elflink.c:11211
 #, 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:11256
 #, c-format
-msgid "%pA has both ordered and unordered sections"
+msgid ""
+"error: %pB contains a reloc (%#<PRIx64>) for section %pA that references a "
+"non-existent global symbol"
 msgstr ""
 
-#: elflink.c:11592
+#: elflink.c:11977
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr ""
 
-#: elflink.c:12225
+#: elflink.c:12620
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr ""
 
-#: elflink.c:12442
+#: elflink.c:12870
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr ""
 
-#: elflink.c:12561
+#: elflink.c:12996
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr ""
 
-#: elflink.c:12609
+#: elflink.c:13044
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr ""
 
-#: elflink.c:12701
+#: elflink.c:13137
 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:13140
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr ""
+
+#: elflink.c:13143
+msgid "%P: warning: creating DT_TEXTREL in a PDE\n"
+msgstr ""
+
+#: elflink.c:13146
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
 msgstr ""
 
-#: elflink.c:12829
+#: elflink.c:13279
 msgid "%P%X: can not read symbols: %E\n"
 msgstr ""
 
-#: elflink.c:13002
-msgid "%F%P: corrupt input: %pB\n"
+#: elflink.c:13699
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
 msgstr ""
 
-#: elflink.c:13668
+#: elflink.c:14165
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr ""
 
-#: elflink.c:13844
+#: elflink.c:14206
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr ""
+
+#: elflink.c:14349
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr ""
 
-#: elfxx-mips.c:1450
+#: elflink.c:15097
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr ""
+
+#: elflink.c:15186
+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: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 ""
+
+#: elfxx-aarch64.c:758 elfxx-x86.c:2695
+msgid "%F%P: failed to create GNU property section\n"
+msgstr ""
+
+#: elfxx-aarch64.c:762 elfxx-x86.c:2700
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr ""
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr ""
+
+#: elfxx-mips.c:1505
 msgid "static procedure (no name)"
 msgstr ""
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5780
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr ""
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6545
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr ""
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6578
 msgid ""
 "%X%H: unsupported jump between ISA modes; consider recompiling with "
 "interlinking enabled\n"
 msgstr ""
 
-#: 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 ""
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6635
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr ""
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7264
 #, c-format
 msgid ""
 "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8614
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr ""
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8713
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr ""
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8853
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr ""
 
-#: 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 ""
 
-#: elfxx-mips.c:9422
+#: elfxx-mips.c:9282
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr ""
+
+#: elfxx-mips.c:9285
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr ""
+
+#: elfxx-mips.c:9505
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr ""
 
-#: 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 ""
 
-#: elfxx-mips.c:10490
+#: elfxx-mips.c:10579
 msgid ""
 "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
 msgstr ""
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10598
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10601
 msgid "jump to a non-word-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10602
 msgid "jump to a non-instruction-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10605
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10607
 msgid "branch to a non-instruction-aligned address"
 msgstr ""
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10609
 msgid "PC-relative load from unaligned address"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
+
+#: elfxx-mips.c:13417 reloc.c:8518
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr ""
+
+#: elfxx-mips.c:13426 reloc.c:8527
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
+msgstr ""
+
+#: elfxx-mips.c:14611
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr ""
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15145
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr ""
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15422
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr ""
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15439
 #, 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:15471 elfxx-mips.c:15537 elfxx-mips.c:15552
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr ""
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15495
 #, c-format
 msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
 msgstr ""
 
-#: elfxx-mips.c:15306
+#: elfxx-mips.c:15520
 #, c-format
 msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elfxx-mips.c:15466
+#: elfxx-mips.c:15680
 #, c-format
 msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: elfxx-mips.c:15568
+#: elfxx-mips.c:15782
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr ""
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15796
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr ""
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15849
 #, c-format
 msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15639
+#: elfxx-mips.c:15854
 #, c-format
 msgid ""
 "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15643
+#: elfxx-mips.c:15858
 #, c-format
 msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
 msgstr ""
 
-#: elfxx-mips.c:15650
+#: elfxx-mips.c:15865
 #, c-format
 msgid ""
 "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
 msgstr ""
 
-#: 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 ""
 
-#: elfxx-mips.c:15843
+#: elfxx-mips.c:16060
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr ""
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16122 elfxx-mips.c:16133
 msgid "None"
 msgstr ""
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16124 elfxx-mips.c:16193
 msgid "Unknown"
 msgstr ""
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16204
 #, c-format
 msgid "Hard or soft float\n"
 msgstr ""
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16207
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr ""
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16210
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr ""
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16213
 #, c-format
 msgid "Soft float\n"
 msgstr ""
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16216
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr ""
 
-#: elfxx-mips.c:16002
+#: elfxx-mips.c:16219
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr ""
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16222
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr ""
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16225
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr ""
 
-#: elfxx-mips.c:16040
+#: elfxx-mips.c:16257
 #, c-format
 msgid " [abi=O32]"
 msgstr ""
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16259
 #, c-format
 msgid " [abi=O64]"
 msgstr ""
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16261
 #, c-format
 msgid " [abi=EABI32]"
 msgstr ""
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16263
 #, c-format
 msgid " [abi=EABI64]"
 msgstr ""
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16265
 #, c-format
 msgid " [abi unknown]"
 msgstr ""
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16267
 #, c-format
 msgid " [abi=N32]"
 msgstr ""
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16269
 #, c-format
 msgid " [abi=64]"
 msgstr ""
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16271
 #, c-format
 msgid " [no abi set]"
 msgstr ""
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16296
 #, c-format
 msgid " [unknown ISA]"
 msgstr ""
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16316
 #, c-format
 msgid " [not 32bitmode]"
 msgstr ""
 
-#: elfxx-sparc.c:3113 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5286
+#: elfxx-riscv.c:1383
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr ""
+
+#: elfxx-riscv.c:1387
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1461
+#, c-format
+msgid "-march=%s: expect number after `%dp'"
+msgstr ""
+
+#: elfxx-riscv.c:1544
+#, c-format
+msgid "-march=%s: rv%de is not a valid base ISA"
+msgstr ""
+
+#: elfxx-riscv.c:1573
+#, c-format
+msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
+msgstr ""
+
+#: elfxx-riscv.c:1600
+#, c-format
+msgid "-march=%s: unknown standard and prefixed ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1604
+#, c-format
+msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
+msgstr ""
+
+#: elfxx-riscv.c:1654
+#, c-format
+msgid "-march=%s: unknown prefix class for the ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1688
+#, c-format
+msgid "-march=%s: unknown prefixed ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1699
+#, c-format
+msgid "-march=%s: duplicate prefixed ISA extension `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1709
+#, c-format
+msgid ""
+"-march=%s: prefixed ISA extension `%s' is not in expected order.  It must "
+"come before `%s'"
+msgstr ""
+
+#: elfxx-riscv.c:1725
+#, c-format
+msgid "-march=%s: prefixed ISA extension must separate with _"
+msgstr ""
+
+#: elfxx-riscv.c:1773
+#, c-format
+msgid "-march=%s: ISA string cannot contain uppercase letters"
+msgstr ""
+
+#: elfxx-riscv.c:1799
+#, c-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr ""
+
+#: elfxx-riscv.c:1832
+#, c-format
+msgid "-march=%s: rv32e does not support the `f' extension"
+msgstr ""
+
+#: elfxx-riscv.c:1840
+#, c-format
+msgid "-march=%s: rv32 does not support the `q' extension"
+msgstr ""
+
+#: 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 ""
 
-#: 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:980
 #, c-format
-msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgid ""
+"%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is "
+"disallowed\n"
 msgstr ""
 
-#: elfxx-x86.c:1027
+#: elfxx-x86.c:1062
 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
 msgstr ""
 
-#: elfxx-x86.c:1383
+#: 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 ""
+
+#: elfxx-x86.c:1789
+#, c-format
 msgid ""
-"%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"
+"%pB: %s (offset: 0x%s, info: 0x%s) against '%s' for section '%pA' in %pB\n"
 msgstr ""
 
-#: elfxx-x86.c:2384
+#: elfxx-x86.c:2367
 #, 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:2714
+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:2715
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr ""
+
+#: elfxx-x86.c:2778
+msgid "IBT and SHSTK properties"
+msgstr ""
+
+#: elfxx-x86.c:2780
+msgid "IBT property"
 msgstr ""
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:2782
+msgid "SHSTK property"
+msgstr ""
+
+#: elfxx-x86.c:2787
+msgid "LAM_U48 property"
+msgstr ""
+
+#: elfxx-x86.c:2792
+msgid "LAM_U57 property"
+msgstr ""
+
+#: elfxx-x86.c:2936
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr ""
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:2945
 msgid "%F%P: failed to create GOT sections\n"
 msgstr ""
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:2963
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr ""
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:3000
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr ""
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:3019
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr ""
 
-#: elfxx-x86.c:2864
+#: elfxx-x86.c:3033
 msgid "%F%P: failed to create BND PLT section\n"
 msgstr ""
 
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:3053
 msgid "%F%P: failed to create PLT .eh_frame section\n"
 msgstr ""
 
-#: elfxx-x86.c:2898
+#: elfxx-x86.c:3066
 msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
 msgstr ""
 
-#: elfxx-x86.c:2912
+#: elfxx-x86.c:3080
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr ""
 
+#: elfxx-x86.c:3122
+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,112 +5831,146 @@ 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:969
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr ""
 
-#: libbfd.c:1101
+#: libbfd.c:1133
 #, c-format
 msgid "Deprecated %s called at %s line %d in %s\n"
 msgstr ""
 
-#: libbfd.c:1104
+#: libbfd.c:1136
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr ""
 
-#: linker.c:1697
+#: linker.c:1706
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr ""
 
-#: linker.c:2567
+#: linker.c:2577
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr ""
 
-#: linker.c:2853
+#: linker.c:2861
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr ""
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2871 linker.c:2881
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr ""
 
-#: 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 ""
 
-#: linker.c:2893
+#: linker.c:2901
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr ""
 
-#: linker.c:3407
+#: linker.c:3419
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr ""
 
-#: linker.c:3410
+#: linker.c:3422
 #, c-format
 msgid "%pB: compiled for a little endian system and target is big endian"
 msgstr ""
 
-#: mach-o.c:632
+#: mach-o-arm.c:172
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr ""
+
+#: mach-o-arm.c:188
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:203
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:218
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:233
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr ""
+
+#: mach-o-arm.c:265
+#, c-format
+msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)"
+msgstr ""
+
+#: mach-o-arm.c:329
+#, 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:687
+#: mach-o.c:686
 msgid " (<unknown>)"
 msgstr ""
 
@@ -5485,239 +6029,240 @@ msgstr ""
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr ""
 
-#: mach-o.c:2108
+#: mach-o.c:1504
+msgid ""
+"malformed mach-o reloc: section index is greater than the number of sections"
+msgstr ""
+
+#: mach-o.c:2138
 msgid ""
 "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab "
 "commands."
 msgstr ""
 
-#: 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.c:2661
+#: mach-o.c:2693
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr ""
 
-#: mach-o.c:2766
+#: mach-o.c:2798
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr ""
 
-#: mach-o.c:2950
+#: mach-o.c:2982
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr ""
 
-#: mach-o.c:3092
+#: mach-o.c:3124
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: mach-o.c:3741
+#: mach-o.c:3772
 #, c-format
 msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: mach-o.c:3920
-msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
-msgstr ""
-
-#: mach-o.c:4931
+#: mach-o.c:5063
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr ""
 
-#: mach-o.c:5122
+#: mach-o.c:5262
 #, c-format
 msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
 msgstr ""
 
-#: mach-o.c:5227
+#: mach-o.c:5384
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr ""
 
-#: merge.c:878
+#: merge.c:895
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr ""
 
-#: mmo.c:476
+#: mmo.c:475
 #, c-format
 msgid "%pB: no core to allocate section name %s"
 msgstr ""
 
-#: mmo.c:541
+#: mmo.c:540
 #, c-format
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr ""
 
-#: mmo.c:955
+#: mmo.c:951
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr ""
 
-#: mmo.c:1252
+#: mmo.c:1247
 #, c-format
 msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n"
 msgstr ""
 
-#: 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 ""
 
-#: mmo.c:1633
+#: mmo.c:1627
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr ""
 
-#: mmo.c:1644
+#: mmo.c:1638
 #, c-format
 msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: mmo.c:1774
+#: mmo.c:1770
 #, c-format
 msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: mmo.c:1835
+#: mmo.c:1831
 #, c-format
 msgid "%pB: cannot allocate file name for file number %d, %d bytes\n"
 msgstr ""
 
-#: mmo.c:1857
+#: mmo.c:1853
 #, c-format
 msgid ""
 "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: mmo.c:2015
+#: mmo.c:2011
 #, c-format
 msgid "%pB: invalid mmo file: lop_end not last item in file\n"
 msgstr ""
 
-#: 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 ""
 
-#: mmo.c:2740
+#: mmo.c:2734
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: mmo.c:3128
+#: mmo.c:3123
 #, c-format
 msgid "%pB: internal error, symbol table changed size from %d to %d words\n"
 msgstr ""
 
-#: mmo.c:3181
+#: mmo.c:3176
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr ""
 
-#: mmo.c:3232
+#: mmo.c:3227
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr ""
 
-#: mmo.c:3239
+#: mmo.c:3234
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr ""
 
-#: mmo.c:3244
+#: mmo.c:3239
 #, c-format
 msgid ""
 "%pB: invalid start address for initialized registers of length %<PRId64>: "
@@ -5729,60 +6274,67 @@ msgstr ""
 msgid "unhandled OSF/1 core file section type %d"
 msgstr ""
 
-#: pef.c:527
+#: pdp11.c:1590
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr ""
+
+#: pef.c:530
 #, 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: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 ""
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:367
 #, 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:418 pei-x86_64.c:428 pei-x86_64.c:437
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr ""
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:492
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr ""
 
-#: 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 ""
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:589
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr ""
 
-#: 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 ""
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:613
 #, c-format
 msgid ""
 "\n"
 "The Function Table (interpreted %s section contents)\n"
 msgstr ""
 
-#: pei-x86_64.c:563
+#: pei-x86_64.c:616
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr ""
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:745
 #, c-format
 msgid ""
 "\n"
@@ -5790,48 +6342,53 @@ msgid ""
 msgstr ""
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:796
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr ""
 
-#: peicode.h:781
+#: peicode.h:802
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr ""
 
-#: peicode.h:796
+#: peicode.h:817
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr ""
 
-#: peicode.h:1211
+#: peicode.h:1225
 #, c-format
 msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr ""
 
-#: peicode.h:1224
+#: peicode.h:1238
 #, c-format
 msgid ""
 "%pB: recognised but unhandled machine type (0x%x) in Import Library Format "
 "archive"
 msgstr ""
 
-#: peicode.h:1242
+#: peicode.h:1256
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr ""
 
-#: peicode.h:1274
+#: peicode.h:1282
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr ""
 
-#: peicode.h:1330
+#: peicode.h:1338
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr ""
 
+#: plugin.c:236
+msgid ""
+"plugin framework: out of file descriptors. Try using fewer objects/archives\n"
+msgstr ""
+
 #: ppcboot.c:392
 #, c-format
 msgid ""
@@ -5881,49 +6438,40 @@ msgstr ""
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr ""
 
-#: reloc.c:8232
+#: reloc.c:8329
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr ""
 
-#: reloc.c:8333
-#, c-format
-msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
-msgstr ""
-
-#: reloc.c:8420
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
-msgstr ""
-
-#: reloc.c:8429
-#, c-format
-msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
-msgstr ""
-
-#: reloc.c:8491
+#: reloc.c:8589
 #, c-format
 msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr ""
 
 #. 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 ""
 
-#: rs6000-core.c:471
+#: rs6000-core.c:470
 #, c-format
 msgid "%pB: warning core file truncated"
 msgstr ""
 
-#: 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 ""
+
+#: som.c:5522
 #, c-format
 msgid ""
 "\n"
 "Exec Auxiliary Header\n"
 msgstr ""
 
-#: som.c:5787
+#: som.c:5831
 msgid "som_sizeof_headers unimplemented"
 msgstr ""
 
@@ -5937,7 +6485,7 @@ 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 ""
@@ -5947,73 +6495,83 @@ msgstr ""
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr ""
 
-#: syms.c:1091
+#: syms.c:1092
 msgid "unsupported .stab relocation"
 msgstr ""
 
-#: vms-alpha.c:479
+#: vms-alpha.c:478
 msgid "corrupt EIHD record - size is too small"
 msgstr ""
 
-#: vms-alpha.c:660
+#: vms-alpha.c:664
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr ""
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1156
+msgid "record is too small for symbol name length"
+msgstr ""
+
+#: vms-alpha.c:1189
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr ""
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1213
 #, 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:1223
 #, 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:1365
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr ""
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1440
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr ""
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1473
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr ""
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1487
 msgid "stack underflow in _bfd_vms_pop"
 msgstr ""
 
+#: vms-alpha.c:1561
+#, 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:1762
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr ""
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1793
 msgid "corrupt vms value"
 msgstr ""
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1924
 msgid "corrupt ETIR record encountered"
 msgstr ""
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1986
 #, c-format
 msgid "bad section index in %s"
 msgstr ""
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2000
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr ""
@@ -6023,2363 +6581,2440 @@ 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:2208 vms-alpha.c:2239 vms-alpha.c:2334 vms-alpha.c:2554
 #, c-format
 msgid "%s: not supported"
 msgstr ""
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2214
 #, c-format
 msgid "%s: not implemented"
 msgstr ""
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2379 vms-alpha.c:2394
+#, 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:2454
+#, c-format
+msgid "%s divide by zero"
+msgstr ""
+
+#: vms-alpha.c:2520
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr ""
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2578
 #, c-format
 msgid "reserved cmd %d"
 msgstr ""
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2662
 msgid "corrupt EEOM record - size is too small"
 msgstr ""
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2671
 msgid "object module not error-free !"
 msgstr ""
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:3999
 #, c-format
 msgid "SEC_RELOC with no relocs in section %pA"
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4211
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr ""
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4252
 #, c-format
 msgid "unhandled relocation %s"
 msgstr ""
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4549
 #, 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: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 ""
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4722
 #, 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: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 ""
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5328
 #, c-format
 msgid "unknown reloc %s"
 msgstr ""
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5342
 msgid "invalid section index in ETIR"
 msgstr ""
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5351
 msgid "relocation for non-REL psect"
 msgstr ""
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5400
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr ""
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5814
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr ""
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:5930
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: vms-alpha.c:5777
+#: vms-alpha.c:5955
 #, c-format
 msgid "Module header\n"
 msgstr ""
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:5956
 #, c-format
 msgid "   structure level: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:5957
 #, c-format
 msgid "   max record size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:5963
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr ""
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:5969
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr ""
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:5972
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:5976
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr ""
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:5982
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr ""
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:5985
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:5988
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr ""
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:5990
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr ""
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:5995
 #, c-format
 msgid "Language Processor Name\n"
 msgstr ""
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:5996
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6000
 #, c-format
 msgid "Source Files Header\n"
 msgstr ""
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6001
 #, c-format
 msgid "   file: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6005
 #, c-format
 msgid "Title Text Header\n"
 msgstr ""
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6006
 #, c-format
 msgid "   title: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6010
 #, c-format
 msgid "Copyright Header\n"
 msgstr ""
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6011
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6015
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr ""
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6025
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:5856
+#: vms-alpha.c:6034
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6036
 #, c-format
 msgid "   completion code: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6040
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr ""
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6041
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr ""
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6043
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6052
 msgid " WEAK"
 msgstr ""
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6054
 msgid " DEF"
 msgstr ""
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6056
 msgid " UNI"
 msgstr ""
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6058 vms-alpha.c:6079
 msgid " REL"
 msgstr ""
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6060
 msgid " COMM"
 msgstr ""
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6062
 msgid " VECEP"
 msgstr ""
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6064
 msgid " NORM"
 msgstr ""
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6066
 msgid " QVAL"
 msgstr ""
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6073
 msgid " PIC"
 msgstr ""
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6075
 msgid " LIB"
 msgstr ""
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6077
 msgid " OVR"
 msgstr ""
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6081
 msgid " GBL"
 msgstr ""
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6083
 msgid " SHR"
 msgstr ""
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6085
 msgid " EXE"
 msgstr ""
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6087
 msgid " RD"
 msgstr ""
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6089
 msgid " WRT"
 msgstr ""
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6091
 msgid " VEC"
 msgstr ""
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6093
 msgid " NOMOD"
 msgstr ""
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6095
 msgid " COM"
 msgstr ""
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6097
 msgid " 64B"
 msgstr ""
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6106
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr ""
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6119
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6137
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr ""
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6138 vms-alpha.c:6155
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr ""
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6139 vms-alpha.c:6156
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6143
 #, 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:6144 vms-alpha.c:6201 vms-alpha.c:6250
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6154
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr ""
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6160
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr ""
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6161
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6163
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6165
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6178
 #, 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:6179 vms-alpha.c:6239 vms-alpha.c:6260 vms-alpha.c:6279
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6182
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6186
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6188
 #, 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:6191 vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect index : %u\n"
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6200
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr ""
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6212
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr ""
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6213
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr ""
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6217
 #, c-format
 msgid "   id match      : %x\n"
 msgstr ""
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6219
 #, c-format
 msgid "   error severity: %x\n"
 msgstr ""
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6222
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6224
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6227
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6230
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6238
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr ""
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6242
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6244
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6246
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6248
 #, c-format
 msgid "   psect index: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6259
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr ""
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6263
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6265 vms-alpha.c:6284
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6278
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr ""
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6282
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6293
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr ""
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6328
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6332
 #, c-format
 msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6159
+#: vms-alpha.c:6337
 #, c-format
 msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6165
+#: vms-alpha.c:6343
 #, c-format
 msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6170
+#: vms-alpha.c:6348
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6359
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr ""
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6381
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr ""
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6385
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6389
 #, c-format
 msgid "STA_LW (stack longword) 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6393
 #, c-format
 msgid "STA_QW (stack quadword) 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6398
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6400
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6406
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr ""
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6409
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr ""
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6412
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr ""
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6416
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr ""
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6419
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr ""
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6422
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr ""
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6425
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr ""
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6431
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr ""
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6438
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6442
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6446
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr ""
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6449
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr ""
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6452
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr ""
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6458
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr ""
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6465
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6469
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr ""
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6472
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr ""
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6475
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr ""
 
-#: vms-alpha.c:6301
+#: vms-alpha.c:6479
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr ""
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6482
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr ""
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6485
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr ""
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6488
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr ""
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6491
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr ""
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6494
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr ""
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6497
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr ""
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6500
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr ""
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6503
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr ""
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6506
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr ""
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6509
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr ""
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6512
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr ""
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6515
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr ""
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6518
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr ""
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6521
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr ""
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6524
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr ""
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6527
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr ""
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6531
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr ""
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6535
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr ""
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6537
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6540
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6543
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr ""
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6545
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6549
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr ""
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6551
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6555
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6558
 #, c-format
 msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:6387
+#: vms-alpha.c:6565
 #, c-format
 msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6569
 #, c-format
 msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6395
+#: vms-alpha.c:6573
 #, c-format
 msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6399
+#: vms-alpha.c:6577
 #, c-format
 msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6403
+#: vms-alpha.c:6581
 #, c-format
 msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6407
+#: vms-alpha.c:6585
 #, c-format
 msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6411
+#: vms-alpha.c:6589
 #, c-format
 msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6415
+#: vms-alpha.c:6593
 #, c-format
 msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6420
+#: vms-alpha.c:6598
 #, c-format
 msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
 msgstr ""
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6602
 #, c-format
 msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
 msgstr ""
 
-#: vms-alpha.c:6428
+#: vms-alpha.c:6606
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr ""
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6612
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr ""
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6616
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr ""
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6619
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr ""
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6622
 #, 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:6625 vms-alpha.c:7049 vms-alpha.c:7175
 #, c-format
 msgid "*unhandled*\n"
 msgstr ""
 
-#: 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 ""
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6676
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr ""
 
-#: vms-alpha.c:6524
+#: vms-alpha.c:6702
 #, c-format
 msgid "cannot read GST record header\n"
 msgstr ""
 
-#: vms-alpha.c:6537
+#: vms-alpha.c:6715
 #, c-format
 msgid " corrupted GST\n"
 msgstr ""
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6723
 #, c-format
 msgid "cannot read GST record\n"
 msgstr ""
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6752
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr ""
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:6776
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:6790
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr ""
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:6797
 #, c-format
 msgid " %08x"
 msgstr ""
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:6823
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr ""
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:6829
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:6851
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr ""
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:6858
 #, c-format
 msgid " 0x%08x"
 msgstr ""
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:6980
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr ""
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:6985
 #, c-format
 msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6818
+#: vms-alpha.c:6996
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr ""
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7001
 #, c-format
 msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6828
+#: vms-alpha.c:7006
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7010
 #, c-format
 msgid "Strides:\n"
 msgstr ""
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7020
 #, c-format
 msgid "Bounds:\n"
 msgstr ""
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7026
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7038
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr ""
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7043
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr ""
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7064
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr ""
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7070
 #, c-format
 msgid "(no value)\n"
 msgstr ""
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7073
 #, c-format
 msgid "(not active)\n"
 msgstr ""
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7076
 #, c-format
 msgid "(not allocated)\n"
 msgstr ""
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7079
 #, c-format
 msgid "(descriptor)\n"
 msgstr ""
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7083
 #, c-format
 msgid "(trailing value)\n"
 msgstr ""
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7086
 #, c-format
 msgid "(value spec follows)\n"
 msgstr ""
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7089
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr ""
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7093
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr ""
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7100
 msgid "literal"
 msgstr ""
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7103
 msgid "address"
 msgstr ""
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7106
 msgid "desc"
 msgstr ""
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7109
 msgid "reg"
 msgstr ""
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7126
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr ""
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7132
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr ""
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7136
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7140
 #, c-format
 msgid "typed pointer\n"
 msgstr ""
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7144
 #, c-format
 msgid "pointer\n"
 msgstr ""
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7152
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr ""
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7159
 #, c-format
 msgid "array descriptor:\n"
 msgstr ""
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7166
 #, c-format
 msgid "type spec for element:\n"
 msgstr ""
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7168
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr ""
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7186
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr ""
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7197
 #, c-format
 msgid "cannot read DST header\n"
 msgstr ""
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7203
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr ""
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7217
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr ""
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7260
 #, c-format
 msgid "standard data: %s\n"
 msgstr ""
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7263 vms-alpha.c:7351
 #, c-format
 msgid "    name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7270
 #, c-format
 msgid "modbeg\n"
 msgstr ""
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7272
 #, c-format
 msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7100 vms-alpha.c:7374
+#: vms-alpha.c:7278 vms-alpha.c:7552
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7281
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7286
 #, c-format
 msgid "modend\n"
 msgstr ""
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7293
 msgid "rtnbeg\n"
 msgstr ""
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7295
 #, c-format
 msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7122
+#: vms-alpha.c:7300
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7308
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7316
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7325
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7335
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7344
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7350
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7357
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7366
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7368
 #, c-format
 msgid "    len: %u bits\n"
 msgstr ""
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7373
 #, c-format
 msgid "recend\n"
 msgstr ""
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7377
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7381
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7385
 #, c-format
 msgid "enumend\n"
 msgstr ""
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7390
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7392
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7402
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7405
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7415
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7432
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr ""
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7439
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr ""
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7445
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr ""
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7451
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr ""
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7457
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr ""
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7462
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr ""
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7467
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr ""
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7472
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7476
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7481
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr ""
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7483
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7488
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7490
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7496
 #, c-format
 msgid "delta pc +%-4d"
 msgstr ""
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7500
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7505
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr ""
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7520
 #, c-format
 msgid "source (len: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7535
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:7371
+#: vms-alpha.c:7549
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7558
 #, c-format
 msgid "   setfile %u\n"
 msgstr ""
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7563 vms-alpha.c:7568
 #, c-format
 msgid "   setrec %u\n"
 msgstr ""
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7573 vms-alpha.c:7578
 #, c-format
 msgid "   setlnum %u\n"
 msgstr ""
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7583 vms-alpha.c:7588
 #, c-format
 msgid "   deflines %u\n"
 msgstr ""
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7592
 #, c-format
 msgid "   formfeed\n"
 msgstr ""
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7596
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr ""
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:7608
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr ""
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:7640
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr ""
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:7644
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:7648
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:7656
 msgid "executable"
 msgstr ""
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7659
 msgid "linkable image"
 msgstr ""
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:7666
 #, c-format
 msgid " image type: %u (%s)"
 msgstr ""
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:7672
 msgid "native"
 msgstr ""
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:7675
 msgid "CLI"
 msgstr ""
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:7682
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ""
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:7689
 #, c-format
 msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7515
+#: vms-alpha.c:7693
 #, c-format
 msgid " fixup info rva: "
 msgstr ""
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:7695
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ""
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:7698
 #, c-format
 msgid ""
 "\n"
 " version array off: %u\n"
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:7531
+#: vms-alpha.c:7709
 #, c-format
 msgid " linker flags: %08x:"
 msgstr ""
 
-#: 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 ""
 
-#: vms-alpha.c:7568
+#: vms-alpha.c:7746
 #, c-format
 msgid " BPAGE: %u"
 msgstr ""
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:7753
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ""
 
-#: vms-alpha.c:7578
+#: vms-alpha.c:7756
 #, c-format
 msgid ", alias: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:7764
 #, c-format
 msgid "system version array information:\n"
 msgstr ""
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:7768
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr ""
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:7778
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr ""
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:7781
 #, c-format
 msgid "   %02u "
 msgstr ""
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:7785
 msgid "BASE_IMAGE       "
 msgstr ""
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:7788
 msgid "MEMORY_MANAGEMENT"
 msgstr ""
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:7791
 msgid "IO               "
 msgstr ""
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:7794
 msgid "FILES_VOLUMES    "
 msgstr ""
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:7797
 msgid "PROCESS_SCHED    "
 msgstr ""
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:7800
 msgid "SYSGEN           "
 msgstr ""
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:7803
 msgid "CLUSTERS_LOCKMGR "
 msgstr ""
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:7806
 msgid "LOGICAL_NAMES    "
 msgstr ""
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:7809
 msgid "SECURITY         "
 msgstr ""
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:7812
 msgid "IMAGE_ACTIVATOR  "
 msgstr ""
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:7815
 msgid "NETWORKS         "
 msgstr ""
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:7818
 msgid "COUNTERS         "
 msgstr ""
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:7821
 msgid "STABLE           "
 msgstr ""
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:7824
 msgid "MISC             "
 msgstr ""
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:7827
 msgid "CPU              "
 msgstr ""
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:7830
 msgid "VOLATILE         "
 msgstr ""
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:7833
 msgid "SHELL            "
 msgstr ""
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:7836
 msgid "POSIX            "
 msgstr ""
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:7839
 msgid "MULTI_PROCESSING "
 msgstr ""
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:7842
 msgid "GALAXY           "
 msgstr ""
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:7845
 msgid "*unknown*        "
 msgstr ""
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:7861 vms-alpha.c:8135
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr ""
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:7864
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr ""
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:7867
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:7871
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:7875
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:7879
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:7883
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:7894
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr ""
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:7898
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:7901
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:7903
 #, c-format
 msgid " link time        : %s\n"
 msgstr ""
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:7905
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:7907
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:7909
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:7919
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr ""
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:7923
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:7929
 #, c-format
 msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
 msgstr ""
 
-#: vms-alpha.c:7756
+#: vms-alpha.c:7934
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:7939
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:7952
 #, c-format
 msgid "cannot read EISD\n"
 msgstr ""
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:7963
 #, c-format
 msgid ""
 "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7793
+#: vms-alpha.c:7971
 #, c-format
 msgid " section: base: 0x%08x%08x size: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7798
+#: vms-alpha.c:7976
 #, c-format
 msgid " flags: 0x%04x"
 msgstr ""
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8014
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr ""
 
-#: vms-alpha.c:7842
+#: vms-alpha.c:8020
 msgid "NORMAL"
 msgstr ""
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8023
 msgid "SHRFXD"
 msgstr ""
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8026
 msgid "PRVFXD"
 msgstr ""
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8029
 msgid "SHRPIC"
 msgstr ""
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8032
 msgid "PRVPIC"
 msgstr ""
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8035
 msgid "USRSTACK"
 msgstr ""
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8041
 msgid ")\n"
 msgstr ""
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8044
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8054
 #, c-format
 msgid "cannot read DMT\n"
 msgstr ""
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8058
 #, c-format
 msgid "Debug module table:\n"
 msgstr ""
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8067
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr ""
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8073
 #, c-format
 msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
 msgstr ""
 
-#: vms-alpha.c:7905
+#: vms-alpha.c:8083
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr ""
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8087
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr ""
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8100
 #, c-format
 msgid "cannot read DST\n"
 msgstr ""
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8110
 #, c-format
 msgid "cannot read GST\n"
 msgstr ""
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8114
 #, c-format
 msgid "Global symbol table:\n"
 msgstr ""
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8141
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr ""
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8145
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8149
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr ""
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8152
 #, c-format
 msgid "  size : %u\n"
 msgstr ""
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8154
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8159
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8164
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8169
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8172
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8176
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8179
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8182
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr ""
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8184
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr ""
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8192
 #, c-format
 msgid " Shareable images:\n"
 msgstr ""
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8197
 #, c-format
 msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
 msgstr ""
 
-#: vms-alpha.c:8028
+#: vms-alpha.c:8204
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8209
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8214
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8219
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8224
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8229
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr ""
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8238
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr ""
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8244
 #, 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:9121
 msgid "%P: relocatable link is not supported\n"
 msgstr ""
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9192
 #, c-format
 msgid "%P: multiple entry points: in modules %pB and %pB\n"
 msgstr ""
 
-#: vms-lib.c:1445
+#: vms-lib.c:1527
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr ""
 
-#: vms-misc.c:361
+#: vms-misc.c:370
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr ""
 
-#: vms-misc.c:366
+#: vms-misc.c:375
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr ""
 
-#: xcofflink.c:832
+#: xcofflink.c:835
 #, c-format
 msgid "%pB: XCOFF shared object when not producing XCOFF output"
 msgstr ""
 
-#: xcofflink.c:853
+#: xcofflink.c:856
 #, c-format
 msgid "%pB: dynamic object with no .loader section"
 msgstr ""
 
-#: xcofflink.c:1413
+#: xcofflink.c:1420
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr ""
 
-#: xcofflink.c:1466
+#: xcofflink.c:1473
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr ""
 
-#: xcofflink.c:1489
+#: xcofflink.c:1496
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr ""
 
-#: xcofflink.c:1502
+#: xcofflink.c:1509
 #, c-format
 msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %<PRId64>"
 msgstr ""
 
-#: xcofflink.c:1533
+#: xcofflink.c:1540
 #, c-format
 msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
 msgstr ""
 
-#: xcofflink.c:1680
+#: xcofflink.c:1687
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr ""
 
-#: xcofflink.c:1788
+#: xcofflink.c:1795
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr ""
 
-#: xcofflink.c:2109
+#: xcofflink.c:2122
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr ""
 
-#: xcofflink.c:3196
+#: xcofflink.c:3223
 #, c-format
 msgid "%s: no such symbol"
 msgstr ""
 
-#: xcofflink.c:3301
+#: xcofflink.c:3334
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr ""
 
-#: xcofflink.c:3680
+#: xcofflink.c:3713
 msgid "error: undefined symbol __rtinit"
 msgstr ""
 
-#: xcofflink.c:4060
+#: xcofflink.c:4095
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr ""
 
-#: xcofflink.c:4072
+#: xcofflink.c:4107
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr ""
 
-#: xcofflink.c:4089
+#: xcofflink.c:4124
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr ""
 
-#: xcofflink.c:5113
+#: xcofflink.c:5152
 #, c-format
 msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
 msgstr ""
 
-#: /work/sources/binutils/current/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 ""
+
+#: elfnn-aarch64.c:5245
 #, 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:5337
 #, 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:5350
+msgid "%pB: error: erratum 843419 immediate 0x%"
+msgstr ""
+
+#: 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 ""
 
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5732
+#: elfnn-aarch64.c:5904
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr ""
+
+#: elfnn-aarch64.c:5992
 #, 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:6105 elfnn-aarch64.c:6142
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr ""
+
+#: elfnn-aarch64.c:7127
 msgid "too many GOT entries for -fpic, please recompile with -fPIC"
 msgstr ""
 
-#: /work/sources/binutils/current/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 ""
 
-#: /work/sources/binutils/current/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 ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:182
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:217
+#: elfnn-riscv.c:223 elfnn-riscv.c:258
 #, c-format
 msgid "%pB: warning: RVE PLT generation not supported"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2311
+#: elfnn-riscv.c:1911
+#, c-format
+msgid "%pcrel_lo missing matching %pcrel_hi"
+msgstr ""
+
+#: elfnn-riscv.c:1914
+#, c-format
+msgid "%pcrel_lo with addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
+
+#: 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 ""
+
+#: elfnn-riscv.c:1927
+#, c-format
+msgid "%pcrel_lo overflow with an addend"
+msgstr ""
+
+#: elfnn-riscv.c:2409
+msgid "The addend isn't allowed for R_RISCV_GOT_HI20"
+msgstr ""
+
+#: elfnn-riscv.c:2553
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr ""
+
+#: 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 ""
+
+#: elfnn-riscv.c:2786
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr ""
+
+#: elfnn-riscv.c:2826
 msgid "%X%P: internal error: out of range error\n"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2315
+#: elfnn-riscv.c:2831
 msgid "%X%P: internal error: unsupported relocation error\n"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2325
+#: elfnn-riscv.c:2837
+msgid "dangerous relocation error"
+msgstr ""
+
+#: elfnn-riscv.c:2843
 msgid "%X%P: internal error: unknown error\n"
 msgstr ""
 
-#: /work/sources/binutils/current/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"
+msgid ""
+"warning: %pB: mis-matched ISA version %d.%d for '%s' extension, the output "
+"version is %d.%d"
 msgstr ""
 
-#: /work/sources/binutils/current/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'."
+"error: %pB: corrupted ISA string '%s'.  First letter should be 'i' or 'e' "
+"but got '%s'"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2773
+#: elfnn-riscv.c:3460
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2921
+#: elfnn-riscv.c:3617
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)."
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2946
+#: elfnn-riscv.c:3637
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2954
+#: elfnn-riscv.c:3645
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3039
+#: elfnn-riscv.c:3759
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
+msgid ""
+"warning: %pB use privileged spec version %u.%u.%u but the output use version "
+"%u.%u.%u"
+msgstr ""
+
+#: elfnn-riscv.c:3776
+msgid ""
+"warning: privileged spec version 1.9.1 can not be linked with other spec "
+"versions"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3055
+#: elfnn-riscv.c:3804
 #, c-format
 msgid ""
-"error: %pB use %u-byte stack aligned but the output use %u-byte stack "
-"aligned."
+"error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3096
+#: elfnn-riscv.c:3845
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
 "  target emulation `%s' does not match `%s'"
 msgstr ""
 
-#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3119
+#: elfnn-riscv.c:3901
 #, 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:3911
 #, c-format
 msgid "%pB: can't link RVE with other target"
 msgstr ""
 
-#: /work/sources/binutils/current/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 ""
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:154
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr ""
 
-#: 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 ""
 
-#: peigen.c:194 pepigen.c:194 pex64igen.c:194
+#: peXXigen.c:191
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr ""
 
-#: 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"
+"%pB: aout header specifies an invalid number of data-directory entries: %u"
 msgstr ""
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:934
+#, c-format
+msgid "%pB:%.8s: section below image base"
+msgstr ""
+
+#: peXXigen.c:937
+#, c-format
+msgid "%pB:%.8s: RVA truncated"
+msgstr ""
+
+#: peXXigen.c:1065
 #, c-format
 msgid "%pB: line number overflow: 0x%lx > 0xffff"
 msgstr ""
 
-#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235
+#: peXXigen.c:1218
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr ""
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1219
 msgid "Import Directory [parts of .idata]"
 msgstr ""
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1220
 msgid "Resource Directory [.rsrc]"
 msgstr ""
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1221
 msgid "Exception Directory [.pdata]"
 msgstr ""
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1222
 msgid "Security Directory"
 msgstr ""
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1223
 msgid "Base Relocation Directory [.reloc]"
 msgstr ""
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1224
 msgid "Debug Directory"
 msgstr ""
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1225
 msgid "Description Directory"
 msgstr ""
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1226
 msgid "Special Directory"
 msgstr ""
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1227
 msgid "Thread Storage Directory [.tls]"
 msgstr ""
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1228
 msgid "Load Configuration Directory"
 msgstr ""
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1229
 msgid "Bound Import Directory"
 msgstr ""
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1230
 msgid "Import Address Table Directory"
 msgstr ""
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1231
 msgid "Delay Import Directory"
 msgstr ""
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1232
 msgid "CLR Runtime Header"
 msgstr ""
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1233
 msgid "Reserved"
 msgstr ""
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1280
 #, 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:1286
 #, 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:1293
 #, 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:1299
 #, c-format
 msgid ""
 "\n"
 "The Import Tables (interpreted %s section contents)\n"
 msgstr ""
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1302
 #, 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:1351
 #, c-format
 msgid ""
 "\n"
 "\tDLL Name: %.*s\n"
 msgstr ""
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1367
 #, c-format
 msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
 msgstr ""
 
-#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476
+#: peXXigen.c:1392
 #, 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:1436 peXXigen.c:1475
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr ""
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1568
 #, 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:1574
 #, 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
+#: peXXigen.c:1585
 #, c-format
 msgid ""
 "\n"
 "There is an export table in %s, but it does not fit into that section\n"
 msgstr ""
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1596
 #, c-format
 msgid ""
 "\n"
 "There is an export table in %s, but it is too small (%d)\n"
 msgstr ""
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1602
 #, 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:1630
 #, c-format
 msgid ""
 "\n"
@@ -8387,162 +9022,145 @@ msgid ""
 "\n"
 msgstr ""
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1634
 #, c-format
 msgid "Export Flags \t\t\t%lx\n"
 msgstr ""
 
-#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721
+#: peXXigen.c:1637
 #, c-format
 msgid "Time/Date stamp \t\t%lx\n"
 msgstr ""
 
-#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725
+#: peXXigen.c:1641
 #, c-format
 msgid "Major/Minor \t\t\t%d/%d\n"
 msgstr ""
 
-#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728
+#: peXXigen.c:1644
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr ""
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1655
 #, c-format
 msgid "Ordinal Base \t\t\t%ld\n"
 msgstr ""
 
-#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742
+#: peXXigen.c:1658
 #, c-format
 msgid "Number in:\n"
 msgstr ""
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1661
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr ""
 
-#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749
+#: peXXigen.c:1665
 #, c-format
 msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
 msgstr ""
 
-#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752
+#: peXXigen.c:1668
 #, c-format
 msgid "Table Addresses\n"
 msgstr ""
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1671
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr ""
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1676
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr ""
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1681
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr ""
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1695
 #, c-format
 msgid ""
 "\n"
 "Export Address Table -- Ordinal Base %ld\n"
 msgstr ""
 
-#: 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 ""
 
-#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807
+#: peXXigen.c:1723
 msgid "Forwarder RVA"
 msgstr ""
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1735
 msgid "Export RVA"
 msgstr ""
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1742
 #, c-format
 msgid ""
 "\n"
 "[Ordinal/Name Pointer] Table\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855
+#: peXXigen.c:1771
 #, 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:1825 peXXigen.c:1994
 #, 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:1829 peXXigen.c:1998
 #, c-format
 msgid ""
 "\n"
 "The Function Table (interpreted .pdata section contents)\n"
 msgstr ""
 
-#: 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 ""
 
-#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918
+#: peXXigen.c:1834
 #, 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:1847
 #, 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:2000
 #, 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:2121
 #, c-format
 msgid ""
 "\n"
@@ -8550,86 +9168,86 @@ msgid ""
 "PE File Base Relocations (interpreted .reloc section contents)\n"
 msgstr ""
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2150
 #, 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:2168
 #, c-format
 msgid "\treloc %4d offset %4x [%4lx] %s"
 msgstr ""
 
-#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343
+#: peXXigen.c:2229
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr ""
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2253
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr ""
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2273
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr ""
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2283
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr ""
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2288
 #, c-format
 msgid "ID: %#08lx"
 msgstr ""
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2291
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ""
 
-#: 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 ""
 
-#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469
+#: peXXigen.c:2355
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr ""
 
-#: 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 ""
 
-#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566
+#: peXXigen.c:2451
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr ""
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2475
 #, 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:2481
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr ""
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2484
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr ""
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2541
 #, c-format
 msgid ""
 "\n"
@@ -8637,14 +9255,14 @@ msgid ""
 "found\n"
 msgstr ""
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2547
 #, 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:2554
 #, c-format
 msgid ""
 "\n"
@@ -8652,7 +9270,7 @@ msgid ""
 "small\n"
 msgstr ""
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2559
 #, c-format
 msgid ""
 "\n"
@@ -8660,23 +9278,23 @@ msgid ""
 "\n"
 msgstr ""
 
-#: 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 ""
 
-#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681
+#: peXXigen.c:2571
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr ""
 
-#: 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 ""
 
-#: 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 "
@@ -8686,99 +9304,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:2712
 #, c-format
 msgid ""
 "\n"
 "Characteristics 0x%x\n"
 msgstr ""
 
-#: 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>)"
+"%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:3026
 msgid "failed to update file offsets in debug directory"
 msgstr ""
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3034
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr ""
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3833
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr ""
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:3968
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr ""
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:3986
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr ""
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4028
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr ""
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4033
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr ""
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4100
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr ""
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4107
 msgid ".rsrc merge failure: differing directory versions"
 msgstr ""
 
 #. 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 ""
 
-#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244
+#: peXXigen.c:4232
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
 
-#: 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 ""
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/BLD-POTFILES.in ./bfd/po/BLD-POTFILES.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/BLD-POTFILES.in	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/BLD-POTFILES.in	2021-12-16 01:57:38.000000000 +0000
@@ -1,4 +1,3 @@
-bfd_stdint.h
 bfdver.h
 elf32-aarch64.c
 elf32-ia64.c
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/es.gmo ./bfd/po/es.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/es.gmo	2020-03-07 02:11:47.000000000 +0000
+++ ./bfd/po/es.gmo	2021-12-16 02:00:37.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/es.po ./bfd/po/es.po
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/es.po	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/es.po	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/fr.gmo ./bfd/po/fr.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/fr.gmo	2020-03-07 02:11:48.000000000 +0000
+++ ./bfd/po/fr.gmo	2021-12-16 02:00:37.000000000 +0000
@@ -1,149 +1,143 @@
-Þ•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
+Þ•0(4Y	 h„�‚œ�¤�¨
¨+¨?¨X¨Aw¨?¹¨:ù¨4©K©^©$}©
¢©°©%Ð©ö©ø©A
+ª&LªsªŒª¥ª¾ªÎª íª«.«G«^«k«P~«Ï«*ç«;¬N¬F`¬6§¬6Þ¬:­5P­,†­D³­Nø­JG®)’®G¼®:¯B?¯L‚¯)Ï¯Bù¯L<°‰°Ÿ°D¶°Gû°C±b±t±ˆ± ±µ±3Ô±²²01²b²r²‚²+œ²+È²+ô²# ³D³\³e³ƒ³(š³?Ã³>´%B´&h´(�´)¸´Gâ´7*µbµyµ™µ¶µÏµêµ
+¶#¶>¶T¶l¶€¶—¶,±¶Þ¶î¶··6·E·[·p·Š·¡·1¶·è·ù·¸¸8¸#P¸+t¸& ¸5Ç¸ý¸¹*¹D¹Z¹t¹�¹¤¹º¹$Ï¹ô¹
º-ºEº$Zºº“º¨º<Áºþº
»
»*»>»S» k»Œ»§»·»×»ó»¼,¼E¼X¼*k¼–¼¨¼&º¼á¼0õ¼&½":½	]½g½#z½ž½·½È½á½"ú½¾"1¾#T¾#x¾œ¾#±¾#Õ¾ù¾¿$¿B¿H¿U¿]¿b¿¿
+�¿¨¿­¿!³¿ Õ¿ö¿û¿ÀÀ8ÀXÀ]À!bÀ„À•ÀœÀ¢À§À¬À²À¶À"»ÀÞÀãÀÁÁ&7ÁB^Á¡ÁÁÁÆÁËÁÒÁØÁÝÁïÁöÁÂ"Â)ÂBÂVÂgÂxÂ‰ÂšÂ«ÂÃÂ	ÒÂ
ÜÂ
êÂ
+øÂ
+Ã
+Ã
+Ã
+$Ã$/Ã
+TÃ#_Ã
+ƒÃŽÃ Ã!¸ÃÚÃïÃ
+þÃ
	Ä	Ä!Ä
+2Ä=ÄDÄ\ÄvÄˆÄ—Ä®ÄÉÄØÄñÄÅÅ'Å(7Å/`Å�Å¢Å+±ÅÝÅAùÅ;ÆUÆoÆ‰Æ8žÆ×ÆïÆÇ&ÇEÇdÇ2Ç?²Ç&òÇÈ(8ÈaÈ"tÈ—È*·È6âÈ{Ér•ÉxÊ�Êe—Ê7ýÊ:5ËpË?‚Ë<ÂË@ÿËU@Ì`–Ìb÷ÌqZÍÌÍìÍ&
+Î1ÎœKÎDèÎ'-Ï,UÏ1‚Ï'´Ï$ÜÏ/Ð-1Ð0_Ð&�Ð8·ÐðÐ=Ñ9NÑ:ˆÑ6ÃÑ6úÑ1Ò/QÒ5�Ò+·Ò$ãÒ6Ó"?Ó&bÓ6‰Ó=ÀÓ:þÓ:9ÔDtÔ8¹Ô9òÔC,Õ:pÕ7«Õ8ãÕ@ÖG]Ö9¥Ö,ßÖ0×#=×a×=|×-º×6è×Ø7;Ø;sØ:¯Ø"êØ3
Ù%AÙ.gÙ–Ù0¶Ù1çÙ'ÚAÚE_Ú8¥Ú(ÞÚcÛ4kÛ& Û2ÇÛ&úÛk!Ü*�Ü4¸Ü]íÜ8KÝ„ÝO£ÝbóÝ,VÞ+ƒÞ)¯ÞYÙÞ03ß=dß3¢ß2ÖßB	àLLà™à4·à)ìà$á3;á9oá6©á/àáDâ&UâW|âUÔâI*ã+tã8 ã%Ùã(ÿã&(ä,Oä#|ä> äBßäB"åeå'…åE­å9óå4-æ3bæJ–æ(áæ;
+çFç0eçD–ç.Ûç9
+è?Dè?„èGÄè?é2Lé8éS¸é'ê.4ê,cê'�ê6¸ê ïêYë/jë4šëNÏëªìIÉì9í3Mí¾�í<@î<}îFºîPïoRï>ÂïFð`Hð~©ðF(ñ‚oñ[òñ3Nò@‚òMÃòmó7ó#·óÛó(ñó&ô+Aô5mô£ô¸ô8Ìô"õ$(õ'Mõ9uõC¯õ!óõ!ö*7ö/bö1’ö/Äö/ôö0$÷*U÷0€÷<±÷iî÷=XøB–ø=Ùø-ù.Eù8tù:­ùFèù?/úVoú(Æú>ïú;.û=jû4¨û#ÝûLüINü8˜ü+Ñü8ýü26ý9iý:£ý3Þý,þu?þ µþ.Öþ.ÿJ4ÿ0ÿB°ÿ/óÿ,#'P%x,žNËC4Jx@ÃJ*O%z< 1Ý l0<�<Ú+C,_HŒ6ÕAANJ�>ÛJJe<°<í.*(Yl‚vïAf6¨ß4ý02	+c	A�	3Ñ	@
+!F
+#h
+.Œ
+B»
+Fþ
+4E%z: 2Û*99Cs(·Cà:$
T_
J´
5ÿ
456j/¡/Ñ&&(5O'…0­5Þ(3=%q&—¾'Þ=#D+h3”(È@ñC25v'¬,Ôg4imžA@NH�GØK IlL¶HCLY�5ê0 4QM†NÔ1#)U)/©)Ù+7/3g6›9ÒX[eCÁ6><={*¹.ä2[F&¢-É,÷$?/Z(Š$³0Ø'	81"jA�)Ï=ù#7@[2œ+Ï"û5 <T '‘ %¹ (ß R!?[!F›!3â!1"DH"H�"DÖ"K#ag#sÉ#B=$‚€$T%=X%b–%bù%g\&gÄ&0,'(]'4†'5»')ñ'3(-O(/}(H­(Fö(7=)Gu)+½)$é)2*.A*/p*+ *)Ì*-ö*^$+Kƒ+FÏ+,"2,U,5p,(¦,EÏ,D-DZ-FŸ-_æ-^F."¥.*È.+ó.8/:X/'“/;»/8÷/'00'X03€0>´0-ó0,!1N1Im1·1Ô1.ò1/!2Q2$q23–2Ê2Fè2&/3!V36x35¯3)å34)4H4+b4 Ž4$¯4.Ô4.5%25)X5\‚5Dß5H$6Dm6L²6Xÿ6HX7)¡7*Ë7 ö7589M8@‡8+È86ô8\+9Aˆ9.Ê9Mù93G:={:H¹:<;8?;3x;4¬;4á;0<@G<1ˆ<Bº<Lý<AJ=LŒ=8Ù=B>+U>2�><´>3ñ>X%?P~?.Ï?`þ?&_@P†@\×@X4Ap�AAþA+@BKlB.¸B<çB,$CXQC%ªCÐC3ðC2$DWD4wDJ¬D?÷D@7EWxE=ÐE*F59F%oFB•F%ØF4þF>3G<rGC¯GBóG;6H3rH)¦H'ÐHøHJ+J=JLJ!aJƒJ$™J¾J1ÑJVKIZKI¤K<îK+L>LRLdL~L
’L' LÈL
ÔLâL%óL\M;vM²MÄMÚMÝMúMN	 N*N<NMN,ZN‡N›N±NXÍN0&O6WO2ŽO*ÁO$ìO6P(HP2qP3¤P@ØP+Q(EQ.nQ"�QÀQ(ÝQ/R/6R1fR8˜R#ÑR'õR2S3PS„S;”SÐS×SßSôSTTT'T<TQTcTvT�T¤T¶TÔT	óTýTU	0U":U]UoU)‹U/µU"åUVV(V4V8VKV]VoV'�V©V ÆV#çVW%W 7WXWHvW1¿W#ñW,X@BXXƒXaÜX:>Y.yY7¨Y1àY;Z(NZ:wZ,²Z-ßZE
[-S[�[2 [Ó[ã[ø[
\$\):\d\!z\$œ\,Á\(î\-]IE]�]5¬]â]
+÷]C^IF^�^¢^ª^²^
Ð^Þ^>ð^?/_Ao_±_/Í_+ý_8)`b`$x`!�`1¿`ñ`a+/a[aoaˆa
+•a aB¿ab%b:bLb.jb-™bGÇb3cCc"bc…c–c§c¹c$Òc÷c!d6d5Hd~d	�dšd¬dÂdâdüde'e9e	@eJeOe[eje�e�e³eÅeåeþef2fDf\f-zf¨fºfÌfàfúf'g7gFgXgjgqg!xgšg:¶g%ñg%h=hAVh;˜hCÔh=iCVi=ši"Øi7ûi<3j<pj)­j5×j
kkv1k*¨kÓk'åk
ll&l-l
+<l(Glpl'‚lªlÇlßlÿl#m$;m,`m.�m,¼m.émn"5n,Xn.…n!´n1Ön0o29o,lo.™o#Èoìop( p/Ip!yp›p(¸p#áp+q1q,Jq wq˜q±qÑqåqr#$r-Hr"vr™r«r¾rÊrßr&ñr	sF"s/is™sJªsMõsCtctzt�t-ªtØtátétAõt>7uvuAˆu7ÊuBv!Evgv˜‡v w<wNw`w#uw2™w.Ìw#ûwx,x9xIxQx:jx+¥x#Ñxõxy!y9y,Qy:~y¹y	ÑydÛy@z6SzMŠzMØz<&{gc{bË{<.|1k|(�|$Æ|ë|/}+1}]}y}“}°}>Ì}<~H~4d~'™~$Á~6æ~.F]n†ž°ÂÔæ€€-€>€V€u€2”€Ç€'á€L	�4V�7‹�0Ã�'ô�‚<‚N‚-h‚+–‚+Â‚*î‚	ƒ	#ƒ
+-ƒ
+8ƒCƒXƒsƒ‚ƒ—ƒ¦ƒ1«ƒÝƒ/ýƒ-„L„ ]„'~„"¦„&É„0ð„!…?…T…]…9{…µ…,Ê…a÷…9Y†)“†C½†I‡EK‡Y‘‡Yë‡;Eˆ;�ˆM½ˆ/‰5;‰:q‰5¬‰4â‰9Š7QŠ9‰ŠDÃŠG‹DP‹E•‹CÛ‹-Œ4MŒ>‚Œ;ÁŒ8ýŒ*6�6a�/˜�;È�3Ž%8Ž1^Ž!�ŽV²Ž9	�\C�A �1â�?�:T�7��>Ç�$‘E+‘Iq‘»‘ZØ‘/3’Oc’P³’3“ 8“?Y“:™“&Ô“
+û“0”%7”"]”%€”0¦”!×”ù”•-•B•O•O^•®•,Í•7ú•
2–@–1O–�–•–¨–»–)Ø–*—,-—6Z—‘—$±—_Ö—"6˜(Y˜A‚˜Ä˜,â˜2™HB™‹™›™
+¬™$·™Ü™ï™¼š¹Ìš†›/˜›È›ã›œ*!œLLœ2™œ-Ìœ)úœ"$�G�Z�o�„�4“�È�0Ð�%ž9'žaž<sž=°ž3îž5"Ÿ2XŸ7‹ŸBÃŸL S d ~ † Ž ª H± ú 4ý 2¡;¡
+R¡]¡2y¡-¬¡OÚ¡*¢I¢"N¢*q¢%œ¢ Â¢ã¢£	£C(£¤l£¤¤ 8¤Y¤b¤v¤‹¤¡¤·¤Î¤ë¤ü¤¥"¥**¥NU¥[¤¥¦A¦F¦e¦}¦š¦6²¦é¦ 	§8*§+c§�§¢§²§º§Ï§ç§û§¨#¨6¨
I¨W¨Lq¨ ¾¨ß¨Dþ¨PC©”©¦©2Á©$ô©ª9ª5Lª‚ª!�ª¿ªÆª2ÎªF«JH«/“«FÃ«
+¬"¬?¬O¬M^¬9¬¬;æ¬7"­Z­r­�­ž­,±­$Þ­J®)N®(x®%¡®(Ç®ð®
+¯,¯D¯)^¯ˆ¯¦¯À¯Ø¯à¯ø¯)°:°
P°#^°‚°'š°Â°Ó°é°± ±:±#F±%j±�±­±Ä±Ö±7í±%²A²Z²o²�²”²¨²¼²Ò²Jè²J3³J~³IÉ³:´N´-m´;›´+×´@µ<Dµ8�µ8ºµ5óµ8)¶Tb¶.·¶>æ¶I%·ho·yØ·>R¸N‘¸Ià¸d*¹0�¹;À¹8ü¹F5º5|º&²º.Ùº[»-d».’»0Á»<ò»!/¼Q¼!j¼)Œ¼I¶¼`½Ga½.©½,Ø½h¾En¾0´¾6å¾k¿Eˆ¿Î¿&ì¿SÀEgÀ#­À<ÑÀ<ÁeKÁP±Á2Â/5Â/eÂ4•Â=ÊÂ9Ã0BÃ7sÃ%«Ã'ÑÃ=ùÃ67Ä@nÄ¯Ä2ÏÄÅ,ÅÐ3Å
ÇÇ!'Ç(IÇwrÇlêÇ_WÈ·È×ÈïÈ+É
;É)IÉ!sÉ•É—ÉU¨É+þÉ*ÊHÊdÊ~Ê"ŽÊ!±Ê$ÓÊøÊË/Ë?ËiTË¾Ë>ÞË>Ì\ÌbuÌDØÌEÍIcÍC­Í5ñÍS'Î\{ÎWØÎ10ÏQbÏH´ÏOýÏUMÐ1£ÐOÕÐV%Ñ|Ñ—ÑS´Ñ[Ò!dÒ†Ò›Ò¯ÒÉÒ ÞÒ5ÿÒ5ÓJÓ=\ÓšÓ©Ó¹Ó,ÔÓ,Ô,.Ô"[Ô~Ô–ÔŸÔ¿Ô0ØÔP	ÕOZÕ)ªÕ*ÔÕ.ÿÕ0.Öd_ÖKÄÖ×'×G×d×}×,˜×Å×Þ×þ×Ø2ØFØ]Ø3wØ«Ø»ØÕØñØÙ Ù6ÙKÙeÙ|Ù5‘ÙÇÙÚÙçÙÚÚ$7Ú+\Ú'ˆÚ5°ÚæÚ#ûÚÛ>ÛVÛuÛŽÛ¥Û»Û)ÐÛúÛÜ3ÜKÜ(`Ü‰Ü�Ü²Ü<ËÜÝÝ
&Ý4ÝHÝ]Ý"yÝœÝ·Ý&ÇÝîÝ	Þ)ÞBÞ`ÞsÞ-‡ÞµÞÈÞ)ÛÞß2ßMß+aß
+�ß˜ß#«ßÏßîßàà#5àYà%mà#“à#·àÛà#ìà#á4á&Cá&já‘á—á£á«á°áÍá
+íáøáýá)â3-âaâfâkâ#„â#¨âÌâÑâ4Öâãã$ã*ã/ã4ã:ã>ã/Cãsã#xãœã#³ã4×ã@ä#Mäqävä{ä‚äŠä�ä¥ä¬äÅäÜäãäÿäå'å8åIåZåkå‚å	‘å
›å
©å
+·å
+Âå
+Íå
+Øå
+ãå4îå
+#æ[.æ
+Šæ•æ§æ,Ææóæç
ç%ç	6ç@ç
Vçdçkç…ç¢ç´çÒç+ïçè *è
KèYè#`è„è1“è:Åèéé:'ébéG}é Åéæéêê;1êmê†êœê:·ê,òêë7>ëHvë9¿ë+ùë*%ìPì#fì-Šì*¸ì7ãìíw›í{î�î‰©îH3ï?|ï¼ïVÐïG'ðMoðs½ðk1ñs�ñ…ò—ò%·ò;ÝòóÐ7óeô8nôE§ôBíô80õ3iõF�õ>äõB#ö5fö>œö1ÛöV
÷Rd÷V·÷DøDSø#˜ø<¼øJùøIDù/ŽùY¾ù0ú4Iú=~úA¼ú=þú><ûH{û;Äû=üG>ü=†ü;Äü;ýg<ý~¤ýX#þL|þEÉþ+ÿ.;ÿFjÿG±ÿMùÿ$G@lN­Nü8KD„'ÉBñ(4>]4œ<Ñ$]3N‘7à†IŸ3é<%Z„€3>9|xPõFdf‡Ë6S0Š+»^ç>F	O…	BÕ	@
+PY
+[ª
+J&-q&Ÿ<ÆLJPF›Qâ*4
k_
uË
jA<¬Dé1.-`/Ž4¾+óGKgE³ù7WMJ¥Hð?9~yYøQR$¤>É]BfE©XïWH` VCXQœoî:^0™%Ê)ð4'OpwEè<.hkÝÔ_²HD[ C¬CðQ4d†ŠëJvTÁ…ªœ[G ©£ pM!-¾!Gì!U4"”Š"<#-\#Š#6¤#4Û#:$9K$…$›$Z±$$%%1%5W%Q�%Uß%$5&$Z&1&7±&6é&: '=['5™'7Ï'5(D=(Œ‚(X)Ph)X¹)=*DP*B•*EØ*T+Ns+sÂ+56,Il,A¶,Fø,<?--|-Rª-eý-Dc.4¨.XÝ.O6/Z†/Ná/M00U~0¤Ô0'y1?¡1?á1[!2A}2S¿2938M38†36¿38ö3h/4˜4K·4R5SV5bª5S
6@a6P¢6Có6.77—f7Fþ7FE8.Œ8!»8>Ý8J9Dg9s¬9s :b”:@÷:T8;b�;Xð;LI<;–<=Ò<Œ= �=L>>=‹>(É>?ò>B2?)u?YŸ?Jù?]D@.¢@.Ñ@CAVDA]›A9ùA%3BUYB>¯BFîB\5CZ’C)íCZDPrDoÃDZ3E=ŽE@ÌE@
FFNFC•F@ÙFFG@aG.¢G5ÑG<H8DH@}H0¾H1ïH(!I6JID�I1ÆI?øIE8J*~JL©JKöJABK1„K4¶K•ëKD�LqÆLH8MG�MOÉMNNRhNK»N\OfdOTËOl PQ�P<ßP;Q`XQ`¹Q>R0YR5ŠRDÀR;SAASPƒSGÔSkTMˆTkÖTrBUSµUl	VJvVNÁVCWFTW?›WxÛW,TX<�X;¾X!úX YB=Y3€Y6´Y8ëY>$ZQcZ.µZQäZ66[Sm[(Á[cê[BN\5‘\-Ç\<õ\E2]'x]( ]3É]ný]Gl^N´^D_9H_S‚_WÖ_S.`_‚`…â`”haQýa²ObncTqcƒÆc‹JdˆÖd�_e@ðe51f;gfF£f3êfIg4hg?�ggÝgfEhW¬hki<pi-­iGÛi9#j6]j;”j*Ðj7ûjv3kSªkHþkGl!bl„l<žl2ÛlGmFVmF�mHäma-n`�nCðn74o7loG¤oJìo37pKkpE·p2ýp60q:gqT¢q;÷q/3r(crcŒrðr(s67s7ns$¦s2ËsBþs"At\dt.Át'ðt;uBTu5—u$Íu+òu&v6Ev'|v+¤v4Ðv5w,;w*hws“wbxcjxPÎxTysty^èy5Gz3}z*±zOÜzB,{Lo{1¼{Pî{r?|[²|?}pN}E¿}S~]Y~F·~Kþ~WJA¢IäA.€Wp€5È€@þ€M?�A��LÏ�=‚_Z‚Kº‚LƒVSƒCªƒzîƒei„AÏ„y…0‹…{¼…d8†`�†ƒþ†N‚‡5Ñ‡Oˆ0WˆNˆˆ<×ˆr‰<‡‰%Ä‰Jê‰@5Š-vŠ?¤ŠNäŠE3‹Cy‹i½‹Q'Œ0yŒMªŒ;øŒI4�6~�>µ�^ô�cSŽm·Žc%�Y‰�Cã�4'�.\�n‹�*ú‘%’
9’G’2]’#�’6´’ë’8ÿ’i8“Y¢“]ü“QZ”¬”Ã”Ø”ê”• •'/•W•
h•v•$†•i«•>–T–&k–’– •–¶–Ì–	æ–ð–——7!—Y—o—#‰—u­—2#˜BV˜9™˜1Ó˜,™R2™/…™5µ™6ë™O"š1rš/¤š5Ôš"
+›'-›<U›6’›FÉ›CœOTœ0¤œ1Õœ>�BF�‰�A��ß�è�ñ�
+žž'ž0žDžYžmžž’žªžÂž(Öž'ÿž
+'Ÿ"2ŸUŸ	rŸ*|Ÿ§Ÿ!¹Ÿ(ÛŸ0 ,5 &b 	‰ “ § « Ä Ö è 0ú +¡)J¡+t¡ ¡¼¡,Ó¡&¢K'¢<s¢-°¢5Þ¢M£ub£vØ£DO¤4”¤:É¤<¥_A¥1¡¥JÓ¥C¦Lb¦\¯¦8§%E§7k§£§¹§Ô§%ò§¨6.¨e¨"€¨&£¨4Ê¨/ÿ¨5/©Me©#³©B×©ª7ªJGªV’ªéªûª««
)«7«MI«N—«cæ«#J¬?n¬4®¬Dã¬(­>E­;„­:À­'û­'#®MK®™®¹®Ó®
+ã®2î®T!¯v¯"ˆ¯«¯$½¯@â¯1#°QU°<§°/ä°4±I±]±q±ƒ±$¡±*Æ±*ñ±²H.²w²‰²›²­²Å²ä²%³(³9³K³R³[³a³p³�³!—³¹³Ð³ä³´´>´X´m´!ˆ´9ª´ä´ø´
µ%µEµ8dµ�µ­µ¿µÑµØµ*ßµ!
+¶=,¶-j¶,˜¶#Å¶Oé¶[9·R•·Rè·X;¸A”¸:Ö¸@¹HR¹H›¹2ä¹Aº	Yº!cº™…º7»W»0i»š»¬»³»º»Ì»8ß»¼3*¼^¼{¼“¼²¼"É¼#ì¼3½/D½3t½/¨½Ø½#÷½3¾/O¾%¾5¥¾=Û¾9¿3S¿/‡¿$·¿ Ü¿ý¿+À1?À!qÀ“À)²À$ÜÀ3Á5Á7OÁ!‡Á©Á!ÃÁåÁ#ùÁ$Â(BÂ3kÂ&ŸÂÆÂØÂõÂÃ'Ã6<ÃsÃ\yÃ2ÖÃ	ÄkÄs‡Ä(ûÄ$Å=Å#YÅ0}Å®Å·Å¿ÅOËÅIÆeÆ[wÆHÓÆZÇ0wÇ1¨Ç»ÚÇ'–È¾ÈÐÈâÈ5úÈ20É=cÉQ¡ÉóÉÊ
ÊÊ'ÊAGÊ>‰Ê.ÈÊ÷ÊË+ËCË6]ËK”Ë!àËÌuÌˆÌB›ÌYÞÌY8Í;’ÍtÎÍoCÎA³Î2õÎ)(Ï'RÏzÏ=“Ï=ÑÏÐ/Ð7NÐ5†ÐY¼ÐRÑ&iÑS�ÑGäÑ@,ÒLmÒºÒÌÒéÒÓ"Ó9ÓVÓiÓ|Ó�Ó¢ÓÁÓàÓóÓ"Ô6(Ô7_Ô6—ÔÎÔ3ìÔb ÕGƒÕDËÕ=Ö:NÖ'‰Ö±ÖÆÖ>åÖ<$×<a×<ž×	Û×	å×
+ï×
+ú×Ø Ø=ØLØaØpØ4uØ'ªØ>ÒØÙ.Ù!AÙ8cÙ3œÙCÐÙ7Ú*LÚ$wÚœÚ#¯Ú@ÓÚ#ÛG8Ûƒ€ÛGÜ*LÜHwÜKÀÜfÝ|sÝ|ðÝSmÞPÁÞpß@ƒßHÄßQ
à<_àSœàpðàNaáp°áU!âfwâ]ÞâZ<ã\—ãBôãI7äO�äKÑäGå1eåT—å3ìå< æ6]æ&”æ2»æ,îæ…çP¡çuòç\hè8Åè^þèI]éH§éLðé&=êedêPÊê,ëpHë2¹ëbìëYOì1©ì$ÛìDí?Eí9…í¿í>Ëí3
+î4>î4sîY¨î,ï/ïHïfï…ï—ït¨ï&ð0DðDuðºðÉð;Ùðñ)ñ<ñOñ=lñHªñ5óñC)ò!mò&�òy¶ò0ó*LóRwóÊó5êó: ôN[ôªôºôËô0×ôõ$õé@õÝ*ö÷4÷"Q÷$t÷/™÷9É÷_øCcø6§ø6Þø-ùCùZùpù‡ùb”ù	÷ù9úE;ú9�ú»ú@ÏúLûG]û[¥ûHüFJüS‘ü]åüCý(VýýŽýšý¶ýo¼ý,þM0þ~þ‹þ
©þ·þEÒþ>ÿmWÿ(Åÿîÿ(ôÿ;2Y@ŒFÍ% pFÁ·y…:¥	àê.F_~�£ºBÃYs`ÔXØ1"Or’I«&õ-CJMŽÜõ0EXl€“¦$µ�Ú#\*€S«aÿa	"t	2—	/Ê	+ú	&
+_>
+ž
+=¾
+ü
+G
\U]²?XP©+ÁíýS
B`
5£
HÙ
"@`pD„<ÉW=^8œ5Õ;"Gj8w°4Í%$(Miq‹5¥Ûó;?6]”¬É#å	$"08S#Œ°ÏëA"H#k�¤¶ÉÝñ`]~YÜ\6M“á2I4<~O»HATE–GÜA$lfCÓN\fŒÃžPOïb?]¢~9A¹AûT=F’/Ù;	qE/·6ç2 @Q /’ Â (Ý 2!Y9!{“!R"8b"6›"uÒ"VH#FŸ#Jæ#z1$^¬$/%-;%‰i%jó%0^&I�&IÙ&#'i£'A
(1O(=�(N¿(N)G])F¥)Kì)98*2r*^¥*V+j[+#Æ+Bê+-,-1,zm%Ï“/<ÉÀ�H[F¯lqM_B)Dä}�]W]î�Ëréï„Û¬9c©È9#@È”4ÚÐþÕe]i%N{e­^JŸV¶¾lÙSî·_®²!æAI"[‹,½›ˆà#&:¹3Ã–ó™íÏR%=‘?à0d,šÊŸ
+ký2bqÕ‚¾R=²ÌçyS5èó|’×A�µÓ¡÷¡FN:8I±†æýXª-²Ÿ
ñj+b_ÙõÊO%ôD*öã[ÍtÄÚ˜{Íjx)ñ!¢;+-}ÝÌVQ´À¸ ÄÚÜ“7,(ÔÉÜW�ëu*0Q±º³ÊÜý9'f¢V�dïõZµi ["ÁLu#·tVPò�^ª¬"ÄÒÒJˆ'Ÿ�¸•CJŸêrê\ŒEKPäÇ:òâ°QéDù’¾·Iªð¬¥w¥ÝØ–dƒ‚„¸PnŽM‰…åI(Ì‰ N`¦{ñØ¡§+GaI¿™YæÖ2¨·3ÂZ´ã­1�¹ª•ÑáäBùz¹Ñt¯ç¿€JA©…7®P|ßi¿WY(EqhËslÔþ!º!”ß¶(;A.Vú�/Rq1G¯0ÔQpÔ†œ¯ìà³“šeÇCY-�À¼¨“wc«ýÖzUKë0÷ô6[«¤õ“2ƒ±Äÿ¢=UBÅ>‰:xT5‘l÷"Bû«Kü,ä»·Jâ2+†p=d~à'ßïvØ9äŽ�‰
+Z³žK³Ã§C$	Íå£ìåbÅngÔ8ÛkGKNúV>ë›³	´wövé�Ýo™	i…+ã‚Bô_D:.ŠX?.ðwfDnµ5žálb<ƒéY\›Ltƒù–wœšj@gd\áæuU
ÑºsXH˜y`v°¬–)ÖZíÈ4anuðº=ìKº€ÙÇ£Êäõ¸Û¬$lèŠpoÏyÇLHTY]Ç»i¼6Ñ¬ª±ÿÂjÿ„èo—ôLµB°H
^¢”�
+9oj-ÏCZ~‹~z¹ÃÈ¨Ú~c5k^kxO^Ô1Š<0¶3çCÖ�Smè4s_Á•*$ùí«[Ž}«û—�Ð;ÎT¶µÃ¹@­õ*hÛ½ïX¥¦gpm7hÎ©{a/¼f¯åyæobóøøæÂ¢¾€sUóE3ju”§»Í­,†&¡�r:t†ú-7ÁfûœSâõŒ'žê©Ý¥9”þ‚ÞÌRxÑÕnù~]-˜Lå(ÄÀñt“ö˜Mþ½x+×�;+S`W�ãýhù
•\O—û*;); …Ó…£í'ÜaMb
y¦�œXˆ!º°Æ?ÿ®¸£ÝŽPöH}ˆªž$dws8é`¿<©?0ü’ ñ§îÅsiXƒTý»˜a„­ÃFNØIÀâ\êÁÖáQŠìv'1Áµþî)R^Š(=®Ÿ§]wçí:ô�v|‹@6oþXÛ¡²8}ÆÝÓWpÜ¦Þ·iÎ´‡Þz˜|‡ ¤„ÈêEÒ’—¥Îx&êfL&›åÙqâ‡<´ÒÙUW��Á‚Þó×½4ëÉ‘ÿ×u
sp5Cò\.´ÂòDãW&ßŒh(	¤IKœï2-¥mkà¯Ù3¼›€ÉcAŽü8‡%.H‘EŒRÿQSP¿eÀñ��ÆD6‹@&?È<~TÅGJM�>%Åk5›‘ )ì¸{íÕÌg‹m]FÜ3r”q2_Âèàéš¨@¶÷ÂH8
+#AFÒ§«…4¿Ó%ôU4Off1@e}`h$ MP"ò
+ ²Õ±`šîÞˆ•Ò63ë6¢ÖLVû�1ãž¡

+#g’É¤®½!	mÊ/¼	AüŠUÄÌ¼×€°ÚZÃ‚¨ú8N49Æ6,E ‰òÕÍR,ß‡€×’¶{ÐÍüÅ>&jvìÐŒhÉa)á‡Ëc7
+~Ê�çOFJÇgošY•<{ÏÞS»Qr}/á¤ ™cC÷nÚŒ*ÐËNó�úðgŽrÎZ¦ï—'5muy#=zcøÆËt.vÏ0öË³|Û!ÓØ>[‹ø™û¹ÎßT/‰ž|E–ƒ¾¨e™©±÷¦	ðlkø½¤7FöeÑ"z1£?ð;­xç*$aØdúMÆ¾²rGqG†âî�_T p.øB£|2ˆ`b—‘^>$/?\n GüO#Oè>®°7Óy„"œ»YÐ–ë_,f,m,¬‘È‘Ü‘ð‘’’,’@’T’h’|’�’¤’¸’Ô’è’““,“@“T“h“|“�“¤“¸“Ì“è“ü“”,”P”l”€”””¨”¼”Ø”ì”••0•D•X•l•€•”•¨•¼•Ð•ä•––0–D–h–|–�–¤–¸–Ì–à–ü–—4—H—\—p—„—˜—¬—À—Ô—è—ü—˜$˜8˜L˜`˜t˜ˆ˜œ˜°˜Ì˜è˜ü˜™,™@™T™h™|™�™¤™¸™Ì™à™ü™š,šHšdšxšŒš š¼šØšôš››8›L›`›t›ˆ›œ›°›Ä›Ø›ô›œœ0œLœ`œtœˆœœœÈœäœ��(�<�P�d�x�Œ� �´�È�Ü�ð�ž ž<žPždžxžŒž ž´žÈžÜžðžŸ Ÿ4ŸHŸdŸˆŸ¤Ÿ¸ŸÌŸàŸôŸ $ 8 L h | � ¤ ¸ Ì à ô ¡¡8¡T¡h¡|¡ ¡´¡È¡Ü¡ð¡¢¢4¢P¢l¢€¢”¢¨¢¼¢Ð¢ä¢ø¢£ £4£H£\£p£„£˜£¬£À£Ô£è£¤ ¤4¤H¤d¤x¤Œ¤ ¤´¤È¤Ü¤ð¤¥¥4¥P¥d¥€¥œ¥°¥Ä¥Ø¥ô¥¦,¦@¦T¦p¦„¦˜¦¬¦À¦Ô¦è¦ü¦§,§@§T§h§„§˜§¬§À§Ô§¨t,ÿÿÿÿ–,"ÿÿÿÿÌ, ÿÿÿÿó,5ÿÿÿÿ/-%ÿÿÿÿ[-)ÿÿÿÿ‹-(ÿÿÿÿº-/ÿÿÿÿð-ÿÿÿÿ.'ÿÿÿÿ:.-ÿÿÿÿh.ÿÿÿÿ….ÿÿÿÿ°. $ÿÿÿÿü. ÿÿÿÿ$/%ÿÿÿÿa/ÿÿÿÿ•/*ÿÿÿÿÀ/.ÿÿÿÿð/)1ÿÿÿÿJ0%ÿÿÿÿp09ÿÿÿÿª01ÿÿÿÿÜ0
+2ÿÿÿÿ1"ÿÿÿÿL13ÿÿÿÿ€1ÿÿÿÿ§19ÿÿÿÿ÷1%ÿÿÿÿ*2
+Hÿÿÿÿ~2
+/ÿÿÿÿÕ2)ÿÿÿÿ3
+6ÿÿÿÿV3
+>ÿÿÿÿž3
+0ÿÿÿÿØ3
+Fÿÿÿÿ(4
+ÿÿÿÿj4
++ÿÿÿÿŸ4
+ÿÿÿÿÇ4
+"ÿÿÿÿó4@)ÿÿÿÿb5
+/ÿÿÿÿ›5
+ ÿÿÿÿÅ5-ÿÿÿÿ66ÿÿÿÿX66ÿÿÿÿ£6
+7ÿÿÿÿä6
+?ÿÿÿÿ-7
+ÿÿÿÿR74ÿÿÿÿŸ7+ÿÿÿÿ×7-ÿÿÿÿ83ÿÿÿÿE80ÿÿÿÿŒ8 0ÿÿÿÿ9
+-ÿÿÿÿC9(ÿÿÿÿ9
+-ÿÿÿÿ¶9ÿÿÿÿè96ÿÿÿÿ%:>ÿÿÿÿj:#ÿÿÿÿ•:ÿÿÿÿÑ:ÿÿÿÿ
;
+2ÿÿÿÿI;
+.ÿÿÿÿ�;FÿÿÿÿÈ;
+2ÿÿÿÿ<
+2ÿÿÿÿ@<
+2ÿÿÿÿ|<
+2ÿÿÿÿ¸<
+2ÿÿÿÿô<
+2ÿÿÿÿ0=Fÿÿÿÿw=
+9ÿÿÿÿº=
+7ÿÿÿÿû=
+9ÿÿÿÿ>>Fÿÿÿÿ…>FÿÿÿÿÌ>	2ÿÿÿÿ?+ÿÿÿÿ9?.ÿÿÿÿn?+ÿÿÿÿ ?-ÿÿÿÿÕ?0ÿÿÿÿ#@"ÿÿÿÿb@!ÿÿÿÿ•@
+*ÿÿÿÿË@
+AÿÿÿÿA
+dÿÿÿÿ„A
+$ÿÿÿÿ²A1ÿÿÿÿîA1ÿÿÿÿ B
+ÿÿÿÿ=B5ÿÿÿÿ‹B&ÿÿÿÿ¿B=ÿÿÿÿC&ÿÿÿÿcC+ÿÿÿÿ¢CÿÿÿÿÖC]ÿÿÿÿCD!5ÿÿÿÿšDKÿÿÿÿæD<"ÿÿÿÿDE$ÿÿÿÿ}E7
+ÿÿÿÿ¿EÿÿÿÿF;ÿÿÿÿoF?ÿÿÿÿÍFÿÿÿÿöF2ÿÿÿÿ0GÿÿÿÿaGÿÿÿÿ“G=ÿÿÿÿâGIÿÿÿÿEH(ÿÿÿÿƒHIÿÿÿÿæH!ÿÿÿÿI!ÿÿÿÿLIÿÿÿÿ}I+ÿÿÿÿªI=ÿÿÿÿèI5ÿÿÿÿJ@ÿÿÿÿcJ7ÿÿÿÿ›J-ÿÿÿÿÉJÿÿÿÿæJ-ÿÿÿÿ#K
+"	ÿÿÿÿvK#&ÿÿÿÿÀK$ÿÿÿÿêK30ÿÿÿÿML.ÿÿÿÿ‚L6ÿÿÿÿ¿L7ÿÿÿÿýL6ÿÿÿÿ:M1ÿÿÿÿrMCÿÿÿÿ¼MÿÿÿÿâMAÿÿÿÿ*N5ÿÿÿÿ`N/ÿÿÿÿ�N(ÿÿÿÿÕN,5	ÿÿÿÿ?O#	ÿÿÿÿkO+ÿÿÿÿ²O&%ÿÿÿÿýO)	ÿÿÿÿ/PFÿÿÿÿwPK.ÿÿÿÿðP-ÿÿÿÿQKÿÿÿÿjQ;ÿÿÿÿ¦Q
+<ÿÿÿÿìQ*ÿÿÿÿ2RFÿÿÿÿyRÿÿÿÿ¥R=ÿÿÿÿûR.ÿÿÿÿ9S
+`ÿÿÿÿ¥S
+&<ÿÿÿÿT6ÿÿÿÿbT
+@ÿÿÿÿ¬T
+BÿÿÿÿøT
+5ÿÿÿÿ7U
+Eÿÿÿÿ†U
+#ÿÿÿÿÑU
+.ÿÿÿÿ	V
+&ÿÿÿÿ9V
+*ÿÿÿÿmV`;ÿÿÿÿW
+9ÿÿÿÿQW
+*ÿÿÿÿ…WFÿÿÿÿêW@ÿÿÿÿ@X@ÿÿÿÿ›X
+=ÿÿÿÿâX
+Mÿÿÿÿ9Y
+"ÿÿÿÿeYCÿÿÿÿÅY;ÿÿÿÿZ<ÿÿÿÿYZ@ÿÿÿÿšZ7ÿÿÿÿðZ "9ÿÿÿÿ|[
+0ÿÿÿÿ¶[+ÿÿÿÿó[
+4ÿÿÿÿ1\'+ÿÿÿÿƒ\8ÿÿÿÿÂ\Vÿÿÿÿ]'ÿÿÿÿN]!ÿÿÿÿ•]!%ÿÿÿÿâ]
+YÿÿÿÿE^
+6ÿÿÿÿ…^VÿÿÿÿÜ^
+2ÿÿÿÿ_
+2ÿÿÿÿT_
+2ÿÿÿÿ�_
+2ÿÿÿÿÌ_
+2ÿÿÿÿ`
+2ÿÿÿÿD`Xÿÿÿÿ�`
+9ÿÿÿÿà`
+7ÿÿÿÿ!a
+8ÿÿÿÿcaXÿÿÿÿ¼aXÿÿÿÿb	<ÿÿÿÿZb,ÿÿÿÿ�b0ÿÿÿÿÄb8ÿÿÿÿc=ÿÿÿÿHc@ÿÿÿÿ§c'!ÿÿÿÿïc'ÿÿÿÿ)d
+3ÿÿÿÿhd
+WÿÿÿÿÉd
+€ÿÿÿÿSe
+1ÿÿÿÿŽe8ÿÿÿÿÑeFÿÿÿÿf
+ÿÿÿÿ:fPÿÿÿÿ©f2ÿÿÿÿéfHÿÿÿÿOg7.ÿÿÿÿÄg6
+ÿÿÿÿh$ÿÿÿÿNhmÿÿÿÿÍh!<ÿÿÿÿ+iYÿÿÿÿ…iO-ÿÿÿÿj4ÿÿÿÿPjEÿÿÿÿ¡j1ÿÿÿÿk!Oÿÿÿÿ‰k(Kÿÿÿÿük&ÿÿÿÿ-l5ÿÿÿÿul#ÿÿÿÿ³l!!ÿÿÿÿõlRÿÿÿÿbm$_ÿÿÿÿåm5ÿÿÿÿ6n$_ÿÿÿÿ¹n0ÿÿÿÿo0ÿÿÿÿAo$ÿÿÿÿ}o:ÿÿÿÿ¹o6 ÿÿÿÿp:ÿÿÿÿJpNÿÿÿÿ�pCÿÿÿÿáp8ÿÿÿÿqÿÿÿÿIq)=ÿÿÿÿ¯q3ÿÿÿÿr04ÿÿÿÿ	    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 +168,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:
@@ -326,19 +316,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
@@ -354,13 +332,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
@@ -395,8 +373,16 @@ 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: %pA has ordered sections with incompatible alignments
+%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
@@ -445,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'
@@ -470,7 +455,9 @@ 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 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
@@ -480,10 +467,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
@@ -496,17 +487,17 @@ ppcboot header:
 %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 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 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: 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: 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: 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: 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: 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)
@@ -523,11 +514,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: 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: 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 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:%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 section symbol with an addend%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)
@@ -543,8 +546,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: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'-march=%s: %s ISA extension must separate with _-march=%s: ISA string cannot contain uppercase letters-march=%s: ISA string must begin with rv32 or rv64-march=%s: duplicate %s ISA extension `%s'-march=%s: expect number after `%dp'-march=%s: first ISA extension must be `e', `i' or `g'-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: unexpected ISA string at end: %s-march=%s: unknown %s ISA extension `%s'-march=%s: unknown standard ISA extension `%c'-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
@@ -557,15 +560,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 %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)
@@ -573,13 +576,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
@@ -617,7 +620,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)
@@ -677,14 +680,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
@@ -702,36 +705,35 @@ 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 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 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 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
+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
+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
 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
@@ -740,30 +742,30 @@ 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 privilege 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: privilege 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.35.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
+POT-Creation-Date: 2021-01-09 10:55+0000
+PO-Revision-Date: 2021-01-11 11:28+0100
 Last-Translator: FrÃ©dÃ©ric Marchal <fmarchal@perso.be>
 Language-Team: French <traduc@traduc.org>
 Language: fr
@@ -778,7 +780,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 +810,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:
@@ -960,19 +957,7 @@ En-tÃªtes ppcboot:
   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,13 +973,13 @@ 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
@@ -1029,8 +1014,16 @@ 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
+#<code d'erreur invalide>%%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
+%%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: %C: attention: rÃ©adressage vers Â«Â %sÂ Â» fait rÃ©fÃ©rence Ã  un segment diffÃ©rent
+%F%P: %pA a des sections ordonnÃ©es avec des alignements incompatibles
+%F%P: %pB(%pA): erreur: une section linked-to est requise pour --gc-sections
+%F%P: %pB: le rÃ©adressage de %s par rapport au symbole absolu Â«Â %sÂ Â» dans la section Â«Â %pAÂ Â» est interdit
+%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: Impossible d'assigner le groupe %pA de la cible %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
@@ -1079,23 +1072,22 @@ 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 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: %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.
 %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: 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,7 +1096,9 @@ 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 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: appel @local Ã  ifunc %s
@@ -1114,10 +1108,14 @@ En-tÃªtes ppcboot:
 %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: %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Ã©
@@ -1130,17 +1128,17 @@ En-tÃªtes ppcboot:
 %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 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 %u de la table de rÃ©adressage est vide%pB(%pA): erreur: le rÃ©adressage secondaire %u est d'un type inconnu%pB(%pA): erreur: le rÃ©adressage secondaire %u fait rÃ©fÃ©rence Ã  un symbole supprimÃ©%pB(%pA): erreur: le rÃ©adressage secondaire %u 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): 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
+  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: 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: 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_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: 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: 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: l'en-tÃªte aout spÃ©cifie un nombre invalide d'entrÃ©es de rÃ©pertoire de donnÃ©es: %u%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Â Â»
+%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: 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 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: 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: erratum 843419 immÃ©diat 0x%%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: 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)
@@ -1157,11 +1155,23 @@ 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: 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: 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: 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: 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: 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: 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: 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: 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 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: 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: 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: 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: 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: 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:%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 dans une session compressÃ©e non allouÃ©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 %pAsymbole de section %pcrel_lo avec un opÃ©rande%s  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%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)
 (descripteur)
@@ -1177,8 +1187,8 @@ En-tÃªtes ppcboot:
 *inconnu**inconnu*        , Valeur: %#08lx
 , 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>
+, vecteur de symbol rva: - %pB est 64 bits, %pB ne l'est pas-march=%s: l'extension %s ISA Â«Â %sÂ Â» n'est pas dans l'ordre alphabÃ©tique. Elle doit apparaÃ®tre avant Â«Â %sÂ Â»-march=%s: l'extension %s ISA doit sÃ©parer avec _-march=%s: la chaÃ®ne ISA ne peut pas contenir de lettre majuscule-march=%s: la chaÃ®ne ISA doit commencer par rv32 ou rv64-march=%s: extension %s ISA Â«Â %sÂ Â» dupliquÃ©e-march=%s: nombre attendu aprÃ¨s Â«Â %dpÂ Â»-march=%s: la premiÃ¨re extension ISA doit Ãªtre Â«Â eÂ Â», Â«Â iÂ Â» ou Â«Â gÂ Â»-march=%s: rv%de n'est pas une base ISA valable-march=%s: rv32 ne supporte pas l'extension Â«Â qÂ Â»-march=%s: rv32e ne supporte pas l'extension Â«Â fÂ Â»-march=%s: l'extension standard ISA Â«Â %cÂ Â» n'est pas dans l'ordre canonique-march=%s: chaÃ®ne ISA inattendue Ã  la finÂ : %s-march=%s: extension %s ISA Â«Â %sÂ Â» inconnue-march=%s: extension standard ISA Â«Â %cÂ Â» inconnue-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; 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
@@ -1191,15 +1201,15 @@ En-tÃªtes ppcboot:
 CTL_STLOC (fixer position)
 En-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 %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 est plus grande que sa taille du fichierÂ ! (0x%lx contre 0x%lx)Erreur 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)
 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,13 +1217,13 @@ 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]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
@@ -1251,7 +1261,7 @@ En-tÃªtes ppcboot:
 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)
@@ -1311,14 +1321,14 @@ En-tÃªtes ppcboot:
 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]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Ã©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:
 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: %#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_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
+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
@@ -1336,36 +1346,35 @@ En-tÃªtes ppcboot:
 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Ã©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 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 grandrÃ©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 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 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 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Ã© 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: tentative de lier %pB avec un binaire %pB d'une architecture diffÃ©renteerreur: le symbole ne peut Ãªtre trouvÃ©: %serreur: 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Ã©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 sans que _gp ne soit dÃ©finisymbole 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
+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: 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 %s invalidetype 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
 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
+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
+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
 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
 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
+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*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
 fin rtn: taille 0x%08x
@@ -1374,26 +1383,30 @@ En-tÃªtes ppcboot:
 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 dÃ©passe 64KB; 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 inconnueattribut 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 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
 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 index de table de chaÃ®nes corrompu - ignorÃ©attention: %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 supporte l'inter-rÃ©seautage, contrairement Ã  %pBavertissement: %pB utilise la version de spec privilÃ¨ge %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 sectionavertissement: %pB: version ISA %d.%d non concordante pour l'extension Â«Â %sÂ Â», la version de sortie est %d.%dattention: %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: --enable-non-contiguous-regions abandonne la section Â«Â %sÂ Â» de Â«Â %sÂ Â»
+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: 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 %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Ã¨ge 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 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: error: attribute section length too small: %%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%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%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: %#: 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: type de rÃ©adressage %d illÃ©gal Ã  l'adresse %#%pB: mauvaise taille de la table des chaÃ®nes %%pB: mauvaise adresse de rÃ©adressage %# dans la section Â«Â %pAÂ Â»erreur: %pB(%pA) la taille de la section (%# octets) est plus grande que la taille du fichier (%# octets)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: 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 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: 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: 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/fr.po ./bfd/po/fr.po
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/fr.po	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/fr.po	2021-12-16 01:57:38.000000000 +0000
@@ -1,14 +1,14 @@
 # Messages franÃ§ais pour GNU concernant bfd.
-# Copyright (C) 2019 Free Software Foundation, Inc.
+# Copyright (C) 2021 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>, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd-2.31.90\n"
+"Project-Id-Version: bfd-2.35.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"
+"POT-Creation-Date: 2021-01-09 10:55+0000\n"
+"PO-Revision-Date: 2021-01-11 11:28+0100\n"
 "Last-Translator: FrÃ©dÃ©ric Marchal <fmarchal@perso.be>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -18,222 +18,236 @@ 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:1613 pdp11.c:1236 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:1577 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:1580 vms-alpha.c:8040
 msgid "*unknown*"
 msgstr "*inconnu*"
 
-#: aoutx.h:1721
+#: aoutx.h:1716 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:2412 aoutx.h:2430 pdp11.c:2058
 #, 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:4087 pdp11.c:3441
 #, 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
+#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2791
 #: 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: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:6241 elf32-ft32.c:306 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:1038
+#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 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:438
+#: 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:290 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:4071 elf64-alpha.c:4219 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:1018
+#: elf64-ppc.c:1370 elf64-ppc.c:1379 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:281 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:969
+#: 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:3828
 #, 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:5435 pdp11.c:3864
 #, 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:2241
 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:2308 archive.c:2368 elflink.c:4609 linker.c:1428
 #, 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:2594
 msgid "Reading archive file mod timestamp"
 msgstr "Lecture du cachet date-heure modifiÃ© du fichier d'archive"
 
-#: archive.c:2583
+#: archive.c:2618
 msgid "Writing updated armap timestamp"
 msgstr "Ã‰criture du cachet date-heure armap mise Ã  jour"
 
-#: bfd.c:449
+#: bfd.c:681
 msgid "no error"
 msgstr "pas d'erreur"
 
-#: bfd.c:450
+#: bfd.c:682
 msgid "system call error"
 msgstr "erreur d'appel systÃ¨me"
 
-#: bfd.c:451
+#: bfd.c:683
 msgid "invalid bfd target"
 msgstr "cible bfd invalide"
 
-#: bfd.c:452
+#: bfd.c:684
 msgid "file in wrong format"
 msgstr "fichier dans un mauvais format"
 
-#: bfd.c:453
+#: bfd.c:685
 msgid "archive object file in wrong format"
 msgstr "fichier objet d'archive dans un mauvais format"
 
-#: bfd.c:454
+#: bfd.c:686
 msgid "invalid operation"
 msgstr "opÃ©ration invalide"
 
-#: bfd.c:455
+#: bfd.c:687
 msgid "memory exhausted"
 msgstr "mÃ©moire Ã©puisÃ©e"
 
-#: bfd.c:456
+#: bfd.c:688
 msgid "no symbols"
 msgstr "aucun symbole"
 
-#: bfd.c:457
+#: bfd.c:689
 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:690
 msgid "no more archived files"
 msgstr "aucun autre fichier d'archive"
 
-#: bfd.c:459
+#: bfd.c:691
 msgid "malformed archive"
 msgstr "archive mal formÃ©e"
 
-#: bfd.c:460
+#: bfd.c:692
 msgid "DSO missing from command line"
 msgstr "DSO manquant dans la ligne de commande"
 
-#: bfd.c:461
+#: bfd.c:693
 msgid "file format not recognized"
 msgstr "format de fichier non reconnu"
 
-#: bfd.c:462
+#: bfd.c:694
 msgid "file format is ambiguous"
 msgstr "format de fichier ambigu"
 
-#: bfd.c:463
+#: bfd.c:695
 msgid "section has no contents"
 msgstr "section sans contenu"
 
-#: bfd.c:464
+#: bfd.c:696
 msgid "nonrepresentable section on output"
 msgstr "section non-reprÃ©sentable sur la sortie"
 
-#: bfd.c:465
+#: bfd.c:697
 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:698
 msgid "bad value"
 msgstr "mauvaise valeur"
 
-#: bfd.c:467
+#: bfd.c:699
 msgid "file truncated"
 msgstr "fichier tronquÃ©"
 
-#: bfd.c:468
+#: bfd.c:700
 msgid "file too big"
 msgstr "fichier trop gros"
 
-#: bfd.c:469
+#: bfd.c:701
+msgid "sorry, cannot handle this file"
+msgstr "dÃ©solÃ©, ce fichier ne peut Ãªtre traitÃ©"
+
+#: bfd.c:702
 #, c-format
 msgid "error reading %s: %s"
 msgstr "erreur lors de la lecture de %s: %s"
 
-#: bfd.c:470
+#: bfd.c:703
 msgid "#<invalid error code>"
 msgstr "#<code d'erreur invalide>"
 
-#: bfd.c:1429
+#: bfd.c:1662
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "BFD assertion %s a Ã©chouÃ© %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:1675
 #, 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:1680
 #, 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:1682
 msgid "Please report this bug.\n"
 msgstr "Merci de rapporter cette anomalie.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:207
 #, 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:210
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "pas de table de projection: variable d'environnement pas initialisÃ©e\n"
@@ -253,118 +267,113 @@ msgstr "rÃ©ouverture de %pB: %s\n"
 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:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953
 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:1441
 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:1499 coff-alpha.c:1505 elf.c:9442 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7597 elf32-ppc.c:8748 elf64-ppc.c:16199
 #, c-format
 msgid "%pB: %s unsupported"
 msgstr "%pB: %s pas supportÃ©"
 
-#: 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:785
+#, 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: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 "rÃ©adressage relatif GP sans que _gp ne soit dÃ©fini"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:2877
 #, 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:3640 coff64-rs6000.c:2152
 #, 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:778 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:789
 #, 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:807 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:832 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:849 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:975 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:985 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:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505
 #, 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:1451
 #, 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:2781 cofflink.c:2948
 #, 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-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5050
 #, 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
-#, c-format
-msgid "unsupported relocation type %#x"
-msgstr "type de rÃ©adressage %#x non supportÃ©"
-
-#: coff-tic80.c:672 cofflink.c:3127
-#, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: mauvaise adresse de rÃ©adressage %#<PRIx64> dans la section Â«Â %pAÂ Â»"
-
-#: coffcode.h:954
+#: coffcode.h:953
 #, 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:988
 #, 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:1000
 #, 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
+#: coffcode.h:1010
 #, c-format
 msgid "%pB: warning: no symbol for section '%s' found"
 msgstr "%pB: attention: pas de symbole trouvÃ© pour la section Â«Â %sÂ Â»"
@@ -372,311 +381,321 @@ msgstr "%pB: attention: pas de symbole t
 #. 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:1241
 #, 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:1310
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): fanion de section %s (%#lx) ignorÃ©"
 
-#: coffcode.h:1917
+#: coffcode.h:1926 coffcode.h:1991
 #, 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:2352
 #, 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:2630
 #, 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
+#: coffcode.h:2930
 #, 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:3090
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: trop de sections (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3508
 #, 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:3608
 #, 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
+#: coffcode.h:4284
 #, 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:4304
 #, 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:4338 coffcode.h:4352
 #, 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:4366
 #, 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:4379
 #, 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:4800
 #, 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:4940
 #, 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:5090
 #, 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
+#: coffgen.c:179 elf.c:1238
 #, 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
+#: coffgen.c:203 elf.c:1249
 #, 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
-#, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: dÃ©compte de symbole corrompu: %#<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: Pas assez de mÃ©moire pour allouer l'espace pour %#<PRIx64> symboles de taille %#<PRIx64>"
-
-#: coffgen.c:1735
+#: coffgen.c:1704
 #, 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:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1923
+#: xcofflink.c:4512
 msgid "<corrupt>"
 msgstr "<corrompu>"
 
-#: coffgen.c:2114
+#: coffgen.c:2085
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<info corrompue> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2676 elflink.c:14969 linker.c:2967
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3017 elflink.c:13959
 #, 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:3094 elflink.c:14176
 msgid "warning: gc-sections option ignored"
 msgstr "attention: l'option des sections gc est ignorÃ©e"
 
-#: cofflink.c:352
+#: cofflink.c:366
 #, 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:471 elf64-ia64-vms.c:5202 elflink.c:5200
 #, 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:2352
 #, 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:2415 elflink.c:11299
 #, 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:2717
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: dÃ©bordement de rÃ©adressage: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2725
 #, 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:3116
 #, 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:799
 #, 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:271
+#, c-format
+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)"
+
+#: compress.c:282
 #, 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:307 cpu-arm.c:319
 #, 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:455
 #, 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:553
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "Erreur DWARF: ne peut repÃ©rer la section %s."
 
-#: dwarf2.c:579
+#. PR 26946
+#: dwarf2.c:564
+#, c-format
+msgid "DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"
+msgstr "erreur DWARF: la section %s est plus grande que sa taille du fichierÂ ! (0x%lx contre 0x%lx)"
+
+#: dwarf2.c:599
 #, 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:1186
 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:1365
 #, 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:1678
 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:2026
 msgid "DWARF error: zero format count"
 msgstr "Erreur DWARF: dÃ©compte de format nul"
 
-#: dwarf2.c:1936
+#: dwarf2.c:2036
 #, 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:2077
 #, 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:2150
 #, 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:2180
 #, 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:2193
 #, 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:2203
 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:2221
 #, 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:2248
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "Erreur DWARF: opÃ©rations maximum par instruction invalide"
 
-#: dwarf2.c:2174
+#: dwarf2.c:2267
 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:2458
 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:2956
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "Erreur DWARF: rÃ©cursion d'une instance abstraite dÃ©tectÃ©e"
+
+#: dwarf2.c:2990 dwarf2.c:3084
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "Erreur DWARF: rÃ©f DIE d'instance abstraite invalide"
 
-#: dwarf2.c:2889
+#: dwarf2.c:3006
 #, 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:3062
+#, 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:3101 dwarf2.c:3384 dwarf2.c:3771
 #, 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:3534
+#, c-format
+msgid "DWARF error: could not find variable specification at offset %lx"
+msgstr "Erreur DWARF: ne peut repÃ©rer la spÃ©cification de variable au dÃ©calage %lx"
 
-#: dwarf2.c:3376
+#: dwarf2.c:3690
 #, 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:3734
 #, 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
+#: dwarf2.c:3838
 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:941
 #, 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:1237
 #, c-format
 msgid "unknown basic type %d"
 msgstr "type de base %d inconnu"
 
-#: ecoff.c:1525
+#: ecoff.c:1493
 #, c-format
 msgid ""
 "\n"
@@ -685,7 +704,7 @@ msgstr ""
 "\n"
 "      Dernier+1 symbole: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1500 ecoff.c:1503
 #, c-format
 msgid ""
 "\n"
@@ -694,7 +713,7 @@ msgstr ""
 "\n"
 "      Premier symbole: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1518
 #, c-format
 msgid ""
 "\n"
@@ -703,7 +722,7 @@ msgstr ""
 "\n"
 "      Dernier+1 symbole: %-7ld   Type:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1526
 #, c-format
 msgid ""
 "\n"
@@ -712,7 +731,7 @@ msgstr ""
 "\n"
 "      Symbole local: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1534
 #, c-format
 msgid ""
 "\n"
@@ -721,7 +740,7 @@ msgstr ""
 "\n"
 "      struct; Symbole Fin+1: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1539
 #, c-format
 msgid ""
 "\n"
@@ -730,7 +749,7 @@ msgstr ""
 "\n"
 "      union; Dernier+1 symbole: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1544
 #, c-format
 msgid ""
 "\n"
@@ -739,7 +758,7 @@ msgstr ""
 "\n"
 "      enum; Dernier+1 symbol: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1552
 #, c-format
 msgid ""
 "\n"
@@ -748,22 +767,22 @@ msgstr ""
 "\n"
 "      Type: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:449
 #, 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:490
 #, c-format
 msgid "%pB: error: attribute section length too small: %<PRId64>"
 msgstr "%pB: erreur: longueur de section d'attributs trop petite: %<PRId64>"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:618
 #, 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:628
 #, 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Â Â»"
@@ -787,131 +806,127 @@ msgstr "encodage FDE dans %pB(%pA) empÃª
 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"
 
-#: elf-eh-frame.c:1868
+#: elf-eh-frame.c:1866
 #, c-format
 msgid "%pB: %pA not in order"
 msgstr "%pB: %pA pas dans l'ordre"
 
-#: elf-eh-frame.c:1882
+#: elf-eh-frame.c:1880
 #, c-format
 msgid "%pB: %pA invalid input section size"
 msgstr "%pB: %pA taille de section d'entrÃ©e invalide"
 
-#: elf-eh-frame.c:1890
+#: elf-eh-frame.c:1888
 #, c-format
 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:2141
 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:2312
 #, 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:2335
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "contenu invalide dans la section %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2491
 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:2493
 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
+#: 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 "%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-avr.c:1508 elf32-bfin.c:3130
+#: 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:494
+#: 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:1272 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:1815 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 "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-avr.c:1512 elf32-bfin.c:3134
+#: 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:498 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
+#: elf32-m68hc1x.c:1276 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:1819 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:10554
+#: 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:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1280
+#: 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 "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-avr.c:1520 elf32-bfin.c:3142
+#: 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:506
+#: 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:1284 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:1827
+#: 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 "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:13396 elf32-i386.c:3403 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4062
+#: 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>): 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:2489 elf32-frv.c:5622 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8271 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"
 
@@ -953,7 +968,7 @@ msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fus
 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:316 elf-properties.c:394
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fusionner %pB et %pB\n"
 
@@ -961,115 +976,105 @@ msgstr "PropriÃ©tÃ© supprimÃ©e %W Ã  fus
 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:337
 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:346
 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:388
 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"
 
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:550 elf-properties.c:552
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:551
 msgid "Merging program properties\n"
 msgstr "Fusion des propriÃ©tÃ©s du programme\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: tentative de charger des chaÃ®nes depuis une section non-chaÃ®nes (numÃ©ro %d)"
 
-#: elf.c:360
+#: elf.c:362
 #, 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:514 elfnn-aarch64.c:8096
 #, 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:676
 #, 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:721
 #, 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:740
 #, 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:769
 #, 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:830
 #, 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:878
 #, 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:891
 #, 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:912
 #, 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:935
 #, 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: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:1655
 #, c-format
 msgid ""
 "\n"
@@ -1078,7 +1083,7 @@ msgstr ""
 "\n"
 "En-tÃªte de programme:\n"
 
-#: elf.c:1665
+#: elf.c:1697
 #, c-format
 msgid ""
 "\n"
@@ -1087,7 +1092,7 @@ msgstr ""
 "\n"
 "Section dynamique:\n"
 
-#: elf.c:1806
+#: elf.c:1838
 #, c-format
 msgid ""
 "\n"
@@ -1096,7 +1101,7 @@ msgstr ""
 "\n"
 "DÃ©finitions des versions:\n"
 
-#: elf.c:1831
+#: elf.c:1863
 #, c-format
 msgid ""
 "\n"
@@ -1105,262 +1110,379 @@ msgstr ""
 "\n"
 "RÃ©fÃ©rences de version:\n"
 
-#: elf.c:1836
+#: elf.c:1868
 #, c-format
 msgid "  required from %s:\n"
 msgstr " requis par %s:\n"
 
-#: elf.c:2037
+#: elf.c:2058
 #, 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:2165
 #, 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:2249
 #, 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:2362
 #, 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:2453
+#, 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:2537 elf.c:2552 elf.c:2563 elf.c:2576
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: type [%#x] inconnu dans la section Â«Â %sÂ Â»"
 
-#: elf.c:3248
+#: elf.c:3272
 #, 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:3305
 #, 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:3789
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: trop de sections: %u"
 
-#: elf.c:3839
+#: elf.c:3875
 #, 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:3893
 #, 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:4455
 #, 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:5013
+#: elf.c:5049
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: Les sections TLS ne sont pas adjacentes:"
 
-#: elf.c:5020
+#: elf.c:5056
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5060
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\tnon-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:5656
 #, 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:5682
 #, 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:5799
 #, 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:5936
+#, 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:5976
 #, 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:6113
 #, 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:6274
 #, 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
-#, 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:6606
+#: elf.c:6778
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: symbole Â«Â %sÂ Â» requis mais absent"
 
-#: elf.c:6949
+#: elf.c:7130
 #, 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:7758
 #, 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:8271
+#, 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:8301
 #, 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:8714
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: entrÃ©e .gnu.version_r invalide"
 
-#: elf.c:8548
+#: elf.c:8847
 #, 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:9304
+#, c-format
+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"
+
+#: elf.c:9313
+#, 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:9324
+#, 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:10182
+#, 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:10260
+#, 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:12488
+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:12491
+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:12494
+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:12497
+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:12691 elf64-sparc.c:123 elfcode.h:1504
+#, 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"
+
+#: elf.c:12766
+#, 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:12778
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): l'index de la section d'information est invalide"
+
+#: elf.c:12792
+#, 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:12867
+#, 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:12879
+#, 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:12890
+#, 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:12902
+#, 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:12925
+#, 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:12944
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr "%pB:%pA: erreur: l'entrÃ©e %u de la table de rÃ©adressage est vide"
+
+#: elf.c:12969
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr "%pB(%pA): erreur: le rÃ©adressage secondaire %u fait rÃ©fÃ©rence Ã  un symbole manquant"
+
+#: elf.c:12986
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr "%pB(%pA): erreur: le rÃ©adressage secondaire %u fait rÃ©fÃ©rence Ã  un symbole supprimÃ©"
+
+#: elf.c:12999
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr "%pB(%pA): erreur: le rÃ©adressage secondaire %u est d'un type inconnu"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15065 elf32-frv.c:6613 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3206
+#: elf32-visium.c:844 elf64-ppc.c:5336 elfnn-aarch64.c:7334
 #, 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:1391
+#: elf32-ppc.c:3869 elf64-sparc.c:722 elfxx-mips.c:15492
 #, 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:1885
 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: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): 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:1914 elf32-rl78.c:1103 elf32-rx.c:1480
 #, 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:1919 elf32-rl78.c:1108 elf32-rx.c:1485
 #, 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:1924 elf32-rl78.c:1113 elf32-rx.c:1490
 #, 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:1929 elf32-rl78.c:1118 elf32-rx.c:1495
 #, 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:2023 elf32-arc.c:2091 elf32-arm.c:15509 elf32-metag.c:2251
+#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:614
 #, 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:2910
 #, 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:2918
 #, c-format
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr "attention: %pB: attribut d'objet ARC %d inconnu"
@@ -1368,738 +1490,729 @@ 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:4318 elf32-arm.c:4352 elf32-arm.c:4371 elf32-arm.c:4423
 #, 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:4383 elf32-arm.c:4437 elf32-arm.c:9127 elf32-arm.c:9217
 #, 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:4563
+#, 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:4732
 #, 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:4807 elf32-arm.c:6954 elf32-csky.c:3368 elf32-hppa.c:582
+#: elf32-m68hc1x.c:165 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3817
+#: elf64-ppc.c:13603 elfnn-aarch64.c:3187
 #, 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:5028 elf32-csky.c:3710 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11430
+#: 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: Impossible d'assigner Â«Â %pAÂ Â» Ã  une section de sortie. RÃ©essayez sans --enable-non-contiguous-regions.\n"
+
+#: elf32-arm.c:5998
 #, 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:6007
 #, 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:6046
 #, 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:6052
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: symbole standard Â«Â %sÂ Â» absent"
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6064
 #, 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:6076
 #, 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:6083
 #, 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:6212
 #, 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:6261
 #, 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:6283
 #, 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:6307
 #, 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:6322
 #, 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:6331
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: taille incorrecte pour le symbole Â«Â %sÂ Â»"
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6350
 #, 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:6370
 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:6378
 #, 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:7087 elf32-arm.c:7122
 #, 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:7833
 #, 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:8060
 #, 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:8087
 #, 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:8623 elf32-arm.c:8643 elf32-arm.c:8710 elf32-arm.c:8729
 #, 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:8936
 #, 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:9034
 #, 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:9836
 #, 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:10146 elf32-arm.c:10188
 #, 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:10538
 msgid "shared object"
 msgstr "objet partagÃ©"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10541
 msgid "PIE executable"
 msgstr "exÃ©cutable PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10544
 #, 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:10683 elf32-arm.c:11100
 #, 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:11975 elf32-arm.c:12001
+#: elf32-arm.c:11999 elf32-arm.c:12025
 #, 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:12071 elf32-csky.c:4940 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>): rÃ©adressage %s pas permis dans un objet partagÃ©"
 
-#: elf32-arm.c:12261
+#: elf32-arm.c:12285
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
 msgstr "%pB(%pA+%#<PRIx64>): seuls ADD ou SUB sont permis dans les rÃ©adressages du groupe ALU"
 
-#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572
+#: elf32-arm.c:12326 elf32-arm.c:12418 elf32-arm.c:12506 elf32-arm.c:12596
 #, c-format
 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:13228 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:13341 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 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:13343 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 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:13426 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
 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:13430 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7172
 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:13438 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7180
 msgid "unknown error"
 msgstr "erreur inconnue"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13916
 #, 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:13920
 #, 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:13965
 #, 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:14052
 #, 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:14060
 #, 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:14360
 #, 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:14398 elf32-nios2.c:2950
 #, c-format
 msgid "error: %pB: conflicting CPU architectures %d/%d"
 msgstr "erreur: %pB: architectures CPU conflictuelles %d/%d"
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14495
 #, 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:14524
 #, 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:14683
 #, 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:14709
 #, 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:14848
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "attention: %pB: configuration de plateforme conflictuelle"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14857
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "erreur: %pB: utilisation conflictuelle de R9"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14869
 #, 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:14882
 #, 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:14913
 #, 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:14925
 #, 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:14942
 #, 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:14978
 #, 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:15074
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [inter-rÃ©seautage autorisÃ©]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15082
 #, c-format
 msgid " [VFP float format]"
 msgstr " [format flottant VFP]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15084
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [format flottant Maverick]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15086
 #, c-format
 msgid " [FPA float format]"
 msgstr " [format flottant FPA]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15089
 #, 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:15092 elf32-arm.c:15178
 #, c-format
 msgid " [position independent]"
 msgstr " [position indÃ©pendante]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15095
 #, c-format
 msgid " [new ABI]"
 msgstr " [nouvel ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15098
 #, c-format
 msgid " [old ABI]"
 msgstr " [ancien ABI]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15101
 #, c-format
 msgid " [software FP]"
 msgstr " [virgule flottante logiciel]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15110
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Version1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15113 elf32-arm.c:15124
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [table des symboles triÃ©s]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15115 elf32-arm.c:15126
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [table des symboles non triÃ©s]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15121
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Version2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15129
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [symboles dynamiques utilisent un index de segment]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15132
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [mapping de symboles prÃ©cÃ¨des les autres]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15139
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Version3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15143
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Version4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15147
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Version5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15150
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [soft-float ABI]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15153
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [hard-float ABI]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15159
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15162
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15168
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Version EABI non reconnue>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15175
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [exÃ©cutables relocalisÃ©s]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15181
 #, 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:15186 elfnn-aarch64.c:7337
 #, 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:15303 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:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfnn-aarch64.c:7608 elfnn-riscv.c:656
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: symbole index erronÃ©: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15692
 #, 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:16936
 #, 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:17323 elflink.c:13152 elflink.c:13199
 #, c-format
 msgid "could not find section %s"
 msgstr "ne peut repÃ©rer la section %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18547
 #, 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:18574
 #, 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:19401 elf32-arm.c:19423
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: erreur: vernis VFP11 hors limite"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19474
 #, 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:19513
 #, 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:20597
 #, 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:20673
 #, 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:20688
 #, 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:20698
 #, 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:20702
 #, 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:20712 elf32-arm.c:20716 elf32-arm.c:20726
 #, 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:20730
 #, 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:20749
 #, 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:20753
 #, 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:20767
 #, 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:20773
 #, 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
+#: elf32-avr.c:1516 elf32-bfin.c:3138 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 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:1823
+#: 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 "erreur interne: rÃ©adressage dangereux"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3327 elfnn-aarch64.c:3218
 #, 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:363
 msgid "relocation should be even number"
 msgstr "le rÃ©adressage devrait Ãªtre un nombre paire"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1587
 #, 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:1619 elf32-i386.c:3443 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4112
 #, 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:2645
 #, 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:2662
 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:2759
 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:2799 elf32-bfin.c:2920
 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:2829 elf32-bfin.c:2957 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:2879
 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:3042
 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:3043
 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
+#. 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:1416 elf32-m68k.c:1265
+#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:537 elf32-xgate.c:494
+#: elfxx-mips.c:16178
+#, c-format
+msgid "private flags = %lx:"
+msgstr "fanions privÃ©s = %lx"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6586
 #, 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:6590
 #, 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:5036
 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:5330 elf32-cr16.c:2713 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 +2221,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:2019
 msgid "GOT table size out of range"
 msgstr "taille de la table GOT hors limites"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2799
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "avertissement: eflag arch Â«Â %#lxÂ Â» non reconnu"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2822
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "avertissement: nom d'architecture Â«Â %#xÂ Â» non reconnu"
+
+#: elf32-csky.c:2896 elf32-csky.c:3054
 #, 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:2909
+#, 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:2938
+#, 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:2955
+#, 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:2973
+#, 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:3068
 #, 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:4312 elf32-i386.c:350
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: type de rÃ©adressage non supportÃ©: %#x"
@@ -2193,80 +2331,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:569 elf32-ip2k.c:1484
 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 +2418,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:6497
 #, 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:6551 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:6564
 #, 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 +2438,286 @@ 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:761 elf32-hppa.c:842 elf64-ppc.c:11983
+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-hppa.c:863 elf32-hppa.c:3405
 #, 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:2582
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: Ã©bauche d'exportation en double %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3238
 #, 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:4034
 #, 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:4052
 #, 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:4111
 #, 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:1169 elf64-x86-64.c:1382
 #, 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: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: 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:1721 elf32-s390.c:1151 elf32-sh.c:5490 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-riscv.c:565
 #, 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:1793
 #, 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:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2252
 #, 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:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778
+#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 elfnn-riscv.c:2119
+#: elfnn-riscv.c:2919 elfnn-riscv.c:2993
 #, 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:2563
 #, 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:2598 elf64-x86-64.c:2977
 msgid "hidden symbol"
 msgstr "symbole cachÃ©"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2601 elf64-x86-64.c:2980
 msgid "internal symbol"
 msgstr "symbole interne"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2604 elf64-x86-64.c:2983
 msgid "protected symbol"
 msgstr "symbole protÃ©gÃ©"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2607 elf64-x86-64.c:2986
 msgid "symbol"
 msgstr "symbole"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2613
 #, 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:2626
 #, 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-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:1297
 #, 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:1316
 #, 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:1093 elf32-microblaze.c:1141
 #, 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:6851
 #, 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:1136
 #, 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:1167
 #, 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:1183
 #, 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:1198
 #, 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:1234
 #, 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:1358
 #, 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:1365
 #, 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:1374
 #, 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:1419 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:1421 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:1424 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:1426 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "double de 32 bits, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1429
 #, c-format
 msgid "cpu=HC11]"
 msgstr "cpu=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1431
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "cpu=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1433
 #, c-format
 msgid "cpu=HC12]"
 msgstr "cpu=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1436
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [memory=bank-model]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1438
 #, c-format
 msgid " [memory=flat]"
 msgstr " [memory=flat]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1441
 #, 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:3585 elf32-ppc.c:3593
+#, 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:7664 vms-alpha.c:7680
 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,401 +2733,401 @@ 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:1536 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:1777 elf64-mips.c:3516 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: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 "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:2671
 #, 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:2772
 #, 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:2784
 #, 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:2797
 #, 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:2808
 #, 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:2821
 #, 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:2833
 #, 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:2858
 #, 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:3625
 #, 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:5524
 #, 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:5650
 #, 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:5691
 #, 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:5713
 #, 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:6639
 #, 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:6687
 #, 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:6701
 #, 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:6789
 #, 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:6799
 #, 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:6826
 #, 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:6857
 #, c-format
 msgid ": n1 instructions"
 msgstr ": instructions n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6860
 #, c-format
 msgid ": n1h instructions"
 msgstr ": instructions n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9313
 #, 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:9577
 #, 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:12840
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP imbriquÃ©s dans %pA"
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12859
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP non appariÃ© dans %pA"
 
-#: elf32-nds32.c:13275 reloc.c:8410
+#: elf32-nds32.c:13141 reloc.c:8497
 #, 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:3826
 #, 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 "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: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 "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 "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:4495 elf32-pru.c:928
+#: elf32-nios2.c:4511 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:4521 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "rÃ©adressage dangereux"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5364
 #, 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:1208
 #, 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:1315
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: type de rÃ©adressage %d inconnu"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1369
 #, 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:1474
 #, 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:1491
 #, 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:1508 elf64-alpha.c:4425 elf64-alpha.c:4569
 #, 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:1522
 #, 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:1606
 #, 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:1785
 #, 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:2118
 #, 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:3179
 #, 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:1720
 #, 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:1630
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "section %s corrompue dans %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1649
 #, 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:1691
 #, 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:1740
 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:1759
 msgid "failed to compute new APUinfo section"
 msgstr "Ã©chec d'Ã©valuation de la nouvelle section APUinfo"
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1762
 msgid "failed to install new APUinfo section"
 msgstr "Ã©chec d'installation de la nouvelle section APUinfo"
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2861
 #, 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:3601 elf32-ppc.c:3609
 #, 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:3631 elf32-ppc.c:3639
 #, 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:3647 elf32-ppc.c:3655
 #, 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:3722 elf32-ppc.c:3731
 #, 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:3760 elf32-ppc.c:3769
 #, 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:3833
 #, 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:3841
 #, 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:3910
 #, 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:3929
 #, 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"
 
-#: elf32-ppc.c:4028
+#: elf32-ppc.c:4032
 #, c-format
 msgid "bss-plt forced due to %pB"
 msgstr "bss-plt forcÃ© Ã  cause de %pB"
 
-#: elf32-ppc.c:4030
+#: elf32-ppc.c:4034
 msgid "bss-plt forced by profiling"
 msgstr "bss-plt forcÃ© par le profilage"
 
+#: elf32-ppc.c:4611 elf64-ppc.c:8292
+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:4641 elf64-ppc.c:8357
 #, 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:5547 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:7390
 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:7427
 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:7467 elf32-ppc.c:7503
 #, 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:7567
 #, 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:7985
+#: elf32-ppc.c:7882
 #, 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,54 +3140,54 @@ 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:7914
 #, 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:8092
 #, 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:8426 elf32-ppc.c:8457 elf32-ppc.c:8548 elf32-ppc.c:8644
 #, 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:8799 elf32-ppc.c:8817
+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:8898
 #, 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:8927
 #, 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:9008
 #, 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:9898
 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:9902 elf64-ppc.c:17626
 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:9947
 #, 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:1475
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "erreur: %pB: ancien fichier objet incompatible dÃ©tectÃ©"
@@ -3057,7 +3204,7 @@ msgstr "erreur interne: dÃ©bordement par
 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
+#: elf32-rl78.c:1084 elf32-rx.c:1461
 #, c-format
 msgid "%pB(%pA): error: call to undefined function '%s'"
 msgstr "%pB(%pA): erreur: appel Ã  la fonction non dÃ©finie Â«Â %sÂ Â»"
@@ -3087,17 +3234,17 @@ msgstr "- %pB est 64 bits, %pB ne l'est
 msgid " [64-bit doubles]"
 msgstr " [doubles de 64 bits]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:607
 #, 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:614
 #, 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:689
 #, 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,69 +3253,69 @@ 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:709
 #, 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:1293
 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:3173
 #, 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:3176
 #, 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:3178
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  les fanions du fichier de sortie: %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3785
 #, 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:3793
 #, 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:1963
 #, 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:1524 elf32-score7.c:1385 elfxx-mips.c:3798
 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:2756
 msgid "address not word aligned"
 msgstr "adresse pas alignÃ©e sur un mot"
 
-#: 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: rÃ©adressage mal composÃ© dÃ©tectÃ© dans la section %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: 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: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,153 +3330,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"
 
-#: 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"
 
-#: elf32-sh.c:5651 elf32-sh.c:5733
+#: elf32-sh.c:5479 elf32-sh.c:5561
 #, 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:5485 elf32-sh.c:5566
 #, 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:5516
 #, 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:5723 elf64-alpha.c:4661
 #, 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:5838
 #, 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:5850
 #, 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:5891
 #, 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:5904
 #, 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,82 +3487,87 @@ 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:736
 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:744
 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:764
 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:805
 #, 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:1031
 #, 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:1381
 #, 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:1911
 #, 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:1919
 #, 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:1953
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s dans une section de recouvrement"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1982
 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:1991 elf64-ppc.c:14727
 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:2574
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "attention: %s recouvre %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2590
 #, 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:2622
 #, 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:2763
 #, 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"
 
-#: elf32-spu.c:3330
+#: elf32-spu.c:3329
 #, c-format
 msgid "stack analysis will ignore the call from %s to %s\n"
 msgstr "l'analyse de la pile ignorera l'appel de %s Ã  %s\n"
 
-#: elf32-spu.c:4027
+#: elf32-spu.c:4026
 msgid "  calls:\n"
 msgstr "  appels:\n"
 
@@ -3479,280 +3627,279 @@ msgstr "%F%P: ne peut construire les Ã©b
 msgid "fatal error while creating .fixup"
 msgstr "erreur fatale lors de la crÃ©ation de .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>): 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:1393
+#: elfnn-aarch64.c:9703 elfnn-riscv.c:3216
 #, 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:3591 elf32-v850.c:3830
 #, 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:3601 elf32-v850.c:3840
 #, 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:3647 elf32-v850.c:3875
 #, 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:3687
 #, 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>"
@@ -3777,24 +3924,24 @@ msgstr " [g-float]"
 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:1389
 #, 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:1515
 #, 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:1522
 #, 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 +3956,261 @@ 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:2076 elfnn-ia64.c:2347
 msgid "non-zero addend in @fptr reloc"
 msgstr "ajout non nul dans le rÃ©adressage @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:1002
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr "%pB(%pA): table de propriÃ©tÃ© invalide"
 
-#: 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>): dÃ©calage de rÃ©adressage hors limite (taille=%#<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 "rÃ©adressage dynamique dans une section en lecture seule"
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2917
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "rÃ©adressage TLS incorrecte sans section dynamique"
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3130
 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:3436
 #, 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:4730 elf32-xtensa.c:4738
 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:6566 elf32-xtensa.c:6645 elf32-xtensa.c:8071
 #, 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:7812
 #, 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:9670
 msgid "invalid relocation address"
 msgstr "adresse de rÃ©adressage incorrecte"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9761
 msgid "overflow after relaxation"
 msgstr "dÃ©bordement aprÃ¨s la relÃ¢che"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10907
 #, 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:2001 elf64-alpha.c:2696 elflink.c:15230
+#, 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:2453
 #, 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:2991 elf64-alpha.c:3186
 #, 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:4385 elf64-alpha.c:4398
 #, 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:4454
 #, 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:4479 mach-o.c:616 elfnn-riscv.c:616
 msgid "<unknown>"
 msgstr "<inconnu>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4485
 #, 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:4543
 #, 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:4578
 #, 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:4644
 #, 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:4669
 #, 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:557
+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:2033
 #, 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:3237
 #, 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: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: 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:2031 elfnn-ia64.c:2295
 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:3283 elfnn-ia64.c:3678
 #, 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:3293 elfnn-ia64.c:3688
 #, 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:3563 elfnn-ia64.c:3962
 #, 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:3627 elfnn-ia64.c:4030
 #, 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:3686 elfnn-ia64.c:4093
 #, 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:3788 elfnn-ia64.c:4231
 #, 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:3791 elfnn-ia64.c:4234
 #, 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:3794 elfnn-ia64.c:4237
 #, 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:3918 elfnn-ia64.c:4434
 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:3955 elfnn-ia64.c:4472
 #, 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:3972 elfnn-ia64.c:4489
 #, 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:4268 elfnn-ia64.c:4750
 #, 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:4277 elfnn-ia64.c:4759
 #, 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:4286 elfnn-ia64.c:4768
 #, 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:4295 elfnn-ia64.c:4777
 #, 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:4305 elfnn-ia64.c:4787
 #, 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:5152 elflink.c:5141
 #, 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:5159 elflink.c:5148
 #, 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:5175 elflink.c:5165
 #, 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:4095
 #, 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,157 +4257,181 @@ 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:1346
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "attention: %s devrait Ãªtre utilisÃ© au lieu de %s"
+
+#: elf64-ppc.c:4143
 #, 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:4323
 #, 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:4895
 #, 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:5305
 #, 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:5313
 #, 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:5340
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6624
 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:6891
 #, 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:7139
 #, 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:7228
 #, 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:7238
 #, 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:7260
 #, 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:7754
+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:7762
 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:8086
 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:8521 elf64-ppc.c:9234
 #, 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:9191
 #, 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:9412
+#, 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:10239
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "attention: abandon de la section dynamique %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11390
 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:11438 elf64-ppc.c:11991
+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"
+
+#: elf64-ppc.c:11499
 #, 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:11526
 #, 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:11590 elf64-ppc.c:11859 elf64-ppc.c:14168
 #, 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:12063
 #, 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:13079
 #, 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:14347
+msgid "__tls_get_addr call offset overflow"
+msgstr "dÃ©bordement du dÃ©calage dans l'appel __tls_get_addr"
+
+#: elf64-ppc.c:14686 elf64-ppc.c:14705
 #, 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:14737
 #, 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"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:14744
 #, c-format
 msgid ""
-"  branch         %lu\n"
+"%s  branch         %lu\n"
 "  branch toc adj %lu\n"
 "  branch notoc   %lu\n"
 "  branch both    %lu\n"
@@ -4251,7 +4445,7 @@ msgid ""
 "  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  branchements          %lu\n"
+"%s  branchements          %lu\n"
 "  aj. branchements toc  %lu\n"
 "  branchements notoc    %lu\n"
 "  branchements les deux %lu\n"
@@ -4265,844 +4459,1035 @@ msgstr ""
 "  appels plt les deux   %lu\n"
 "  entrÃ©es globales      %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15144
 #, 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:15146
 #, 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:15902
 #, 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:15908
 #, 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:16804
 #, 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:16889
+#, 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:16944
 #, 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:17192
 #, 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:17215
 #, 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:17359
 #, 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: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: 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
-#, 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:478
 #, 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:499
 #, 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:523
 #, 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:570
 #, 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:702
 #, 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:1417
 msgid "hidden symbol "
 msgstr "symbole cachÃ© "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1420
 msgid "internal symbol "
 msgstr "symbole interne "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1423 elf64-x86-64.c:1427
 msgid "protected symbol "
 msgstr "symbole protÃ©gÃ© "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1429
 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:1435
 msgid "undefined "
 msgstr "non dÃ©fini "
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1445
 msgid "a shared object"
 msgstr "un objet partagÃ©"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1447
+msgid "; recompile with -fPIC"
+msgstr "; recompilez avec -fPIC"
+
+#: elf64-x86-64.c:1452
 msgid "a PIE object"
 msgstr "un objet PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1454
 msgid "a PDE object"
 msgstr "un objet PDE"
 
+#: elf64-x86-64.c:1456
+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:1460
 #, 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:1968
 #, 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:2124
 #, 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:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2086
 #, 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:2992
 #, 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:3006
 #, 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:3283
 #, 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
+#: elf64-x86-64.c:3417 elflink.c:13609
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: entrÃ©e corrompue: %pB\n"
+
+#: elf64-x86-64.c:4101
 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:4043
+#: elf64-x86-64.c:4259
 #, 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:4322
 #, 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:4375
 #, 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:329
+#, 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:768
+#: elfcode.h:775
 #, 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Ã©"
 
-#: elfcode.h:1212
+#: elfcode.h:819
+#, 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:1244
 #, 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:308
 #, 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>"
 
-#: 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: dÃ©finition TLS dans %pB section %pA ne correspond pas Ã  la dÃ©finition non TLS dans %pB section %pA"
 
-#: elflink.c:1373
+#: elflink.c:1390
 #, 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:1396
 #, 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:1402
 #, 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:2114
 #, 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:2496
 #, 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:2587
 #, 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: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: 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:2788
 #, 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:3117
 #, 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:3177
 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:4117
 #, 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
 #, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: dÃ©calage de version %lx invalide (max %lx)"
+
+#: elflink.c:4666
+#, 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:4814
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: pas assez d'informations de version"
+
+#: elflink.c:4852
+#, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: version invalide %u (max %d)"
 
-#: elflink.c:4635
+#: elflink.c:4889
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: version requise invalide %d"
 
-#: elflink.c:5054
+#: elflink.c:5300
 #, 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:6366
 #, 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:6370
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s pas supportÃ©"
 
-#: elflink.c:6331
+#: elflink.c:6567
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: version non dÃ©finie: %s"
 
-#: elflink.c:6902
+#: elflink.c:7139
 #, 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:8697
 #, 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:8860 elflink.c:8868
+msgid "division by zero"
+msgstr "division par zÃ©ro"
+
+#: elflink.c:8882
 #, 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:9220
 #, 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:9223
 #, 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:9468 elflink.c:9486 elflink.c:9525 elflink.c:9543
 #, 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:9502 elflink.c:9559
 #, 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:9611
 msgid "not enough memory to sort relocations"
 msgstr "pas assez de mÃ©moire pour trier les rÃ©adressages"
 
-#: elflink.c:9502
+#: elflink.c:9955
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: trop de sections: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10231
 #, 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:10234
 #, 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:10237
 #, 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:10323
 #, 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:10477
 #, 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:10480
 #, 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:10483
 #, 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:10515
 #, 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
+#: elflink.c:10914
+#, c-format
+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"
+
+#: elflink.c:11168
 #, 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:11213
 #, 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:11971
 #, 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
+#: elflink.c:11977
 #, c-format
 msgid "%pA has both ordered and unordered sections"
 msgstr "%pA a, Ã  la fois, des sections ordonnÃ©es et dÃ©sordonnÃ©es"
 
-#: elflink.c:11592
+#: elflink.c:12047
+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"
+
+#: elflink.c:12121
 #, 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:12771
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: classe de fichier %s incompatible avec %s"
 
-#: elflink.c:12442
+#: elflink.c:13031
 #, 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:13157
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "attention: section %s a une taille nulle"
 
-#: elflink.c:12609
+#: elflink.c:13205
 #, 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:13298
 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:13301
+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:13304
+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:13437
 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:13842
+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:14305
 #, 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:14346
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: section Â«Â %pAÂ Â»: entrÃ©e VTENTRY corrompue"
+
+#: elflink.c:14489
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "INPUT_SECTION_FLAG %s non reconnu\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15236
+#, 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:15325
+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:9901 elfnn-aarch64.c:9908
+#, 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:758 elfxx-x86.c:2629
+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-aarch64.c:762 elfxx-x86.c:2634
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ã©chec lors de l'alignement de la section\n"
+
+#: 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-mips.c:1505
 msgid "static procedure (no name)"
 msgstr "procÃ©dure statique (sans name)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5780
 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:6545
 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:6578
 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:6623
 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:6635
 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:7264
 #, 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:7308 elfxx-mips.c:7545
 #, 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:8352 elfxx-mips.c:8478
 #, 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:8610
 #, 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:8709
 #, 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:8849
 #, 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:9152
 #, 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:9278
+#, 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:9281
+#, 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:9501
 #, 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:10435
 #, 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
+#: elfxx-mips.c:10575
 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:10509
+#: elfxx-mips.c:10594
 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:10597
 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:10598
 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:10601
 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:10603
 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:10605
 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:10905
 #, 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:11020 elfxx-mips.c:11607
 #, 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:11579
 #, 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:14535
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: Architecture %s inconnue"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15069
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: nom illÃ©gal de section Â«Â %pAÂ Â»"
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15346
 #, 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:15363
 #, 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:15395 elfxx-mips.c:15461 elfxx-mips.c:15476
 #, 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:15419
 #, 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:15444
 #, 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:15578
 #, 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:15584
 #, 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:15590
 #, 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:15604
 #, 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:15623
 #, 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:15635
 #, 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:15644
 #, 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:15706
 #, 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:15720
 #, 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:15773
 #, 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:15778
 #, 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:15782
 #, 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:15789
 #, 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:15793
 #, 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:15984
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 callee-saved)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16046 elfxx-mips.c:16057
 msgid "None"
 msgstr "aucun"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16048 elfxx-mips.c:16117
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16128
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Flottant matÃ©riel ou logiciel\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16131
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Flottant matÃ©riel (double prÃ©cision)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16134
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Flottant matÃ©riel (simple prÃ©cision)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16137
 #, c-format
 msgid "Soft float\n"
 msgstr "Flottant logiciel\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16140
 #, 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:16143
 #, 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:16146
 #, 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:16149
 #, 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:16181
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16183
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16185
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16187
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16189
 #, c-format
 msgid " [abi unknown]"
 msgstr " [abi inconnu]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16191
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16193
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16195
 #, c-format
 msgid " [no abi set]"
 msgstr " [aucun jeu abi]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16220
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [ISA inconnu]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16240
 #, 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:1201
+#, 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:1205
+#, 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:1279
+#, c-format
+msgid "-march=%s: expect number after `%dp'"
+msgstr "-march=%s: nombre attendu aprÃ¨s Â«Â %dpÂ Â»"
+
+#: elfxx-riscv.c:1367
+#, c-format
+msgid "-march=%s: rv%de is not a valid base ISA"
+msgstr "-march=%s: rv%de n'est pas une base ISA valable"
+
+#: elfxx-riscv.c:1397
+#, c-format
+msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
+msgstr "-march=%s: la premiÃ¨re extension ISA doit Ãªtre Â«Â eÂ Â», Â«Â iÂ Â» ou Â«Â gÂ Â»"
+
+#: elfxx-riscv.c:1422
+#, c-format
+msgid "-march=%s: unknown standard ISA extension `%c'"
+msgstr "-march=%s: extension standard ISA Â«Â %cÂ Â» inconnue"
+
+#: elfxx-riscv.c:1426
+#, c-format
+msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
+msgstr "-march=%s: l'extension standard ISA Â«Â %cÂ Â» n'est pas dans l'ordre canonique"
+
+#: elfxx-riscv.c:1544
+#, c-format
+msgid "-march=%s: unknown %s ISA extension `%s'"
+msgstr "-march=%s: extension %s ISA Â«Â %sÂ Â» inconnue"
+
+#: elfxx-riscv.c:1555
+#, c-format
+msgid "-march=%s: duplicate %s ISA extension `%s'"
+msgstr "-march=%s: extension %s ISA Â«Â %sÂ Â» dupliquÃ©e"
+
+#: elfxx-riscv.c:1565
+#, c-format
+msgid "-march=%s: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'"
+msgstr "-march=%s: l'extension %s ISA Â«Â %sÂ Â» n'est pas dans l'ordre alphabÃ©tique. Elle doit apparaÃ®tre avant Â«Â %sÂ Â»"
+
+#: elfxx-riscv.c:1581
+#, c-format
+msgid "-march=%s: %s ISA extension must separate with _"
+msgstr "-march=%s: l'extension %s ISA doit sÃ©parer avec _"
+
+#: elfxx-riscv.c:1799
+#, c-format
+msgid "-march=%s: ISA string cannot contain uppercase letters"
+msgstr "-march=%s: la chaÃ®ne ISA ne peut pas contenir de lettre majuscule"
+
+#: elfxx-riscv.c:1825
+#, c-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr "-march=%s: la chaÃ®ne ISA doit commencer par rv32 ou rv64"
+
+#: elfxx-riscv.c:1851
+#, c-format
+msgid "-march=%s: unexpected ISA string at end: %s"
+msgstr "-march=%s: chaÃ®ne ISA inattendue Ã  la finÂ : %s"
+
+#: elfxx-riscv.c:1865
+#, c-format
+msgid "-march=%s: rv32e does not support the `f' extension"
+msgstr "-march=%s: rv32e ne supporte pas l'extension Â«Â fÂ Â»"
+
+#: elfxx-riscv.c:1873
+#, c-format
+msgid "-march=%s: rv32 does not support the `q' extension"
+msgstr "-march=%s: rv32 ne supporte pas l'extension Â«Â 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: 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:976
 #, 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: 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:1027
+#: elfxx-x86.c:1058
 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:2384
+#: elfxx-x86.c:2313
 #, 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:2648
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: avertissement: %s manquant\n"
+
+#: elfxx-x86.c:2649
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: erreur: %s manquant\n"
+
+#: elfxx-x86.c:2712
+msgid "IBT and SHSTK properties"
+msgstr "propriÃ©tÃ©s IBT et SHSTK"
+
+#: elfxx-x86.c:2714
+msgid "IBT property"
+msgstr "propriÃ©tÃ© IBT"
+
+#: elfxx-x86.c:2716
+msgid "SHSTK property"
+msgstr "propriÃ©tÃ© SHSTK"
+
+#: elfxx-x86.c:2721
+msgid "LAM_U48 property"
+msgstr "propriÃ©tÃ© LAM_U48"
+
+#: elfxx-x86.c:2726
+msgid "LAM_U57 property"
+msgstr "propriÃ©tÃ© LAM_U57"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:2870
 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:2879
 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:2897
 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:2934
 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:2953
 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
+#: elfxx-x86.c:2967
 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:2987
 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:3000
 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:3014
 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:3056
+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,112 +5498,146 @@ 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:884
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: impossible d'obtenir la section dÃ©compressÃ©e %pA"
 
-#: libbfd.c:1101
+#: libbfd.c:1048
 #, 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
+#: libbfd.c:1051
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr "%s appel dÃ©prÃ©ciÃ©\n"
 
-#: linker.c:1697
+#: linker.c:1707
 #, 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:2578
 #, 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:2863
 #, 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:2873 linker.c:2883
 #, 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:2892 linker.c:2898
 #, 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:2903
 #, 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:3420
 #, 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:3423
 #, 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:172
+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:188
+#, 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:203
+#, 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:218
+#, 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:233
+#, 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:265
+#, 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:329
+#, 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:631
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<fanions de masque inconnus>"
 
-#: mach-o.c:687
+#: mach-o.c:686
 msgid " (<unknown>)"
 msgstr "(<inconnu>)"
 
@@ -5277,85 +5696,85 @@ msgstr "cputypes incompatibles dans les
 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:1504
+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:2138
 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:2586
 #, 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:2693
 #, 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:2798
 #, 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:2982
 #, 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:3124
 #, 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:3659
 #, 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"
 
-#: 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: valeur d'alignement dÃ©mesurÃ©e: %#lx, utilise 32 Ã  la place"
 
-#: 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: impossible de lire %d octets Ã  %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: nom hors limites (%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: le symbole Â«Â %sÂ Â» spÃ©cifie la section %d invalide (max %lu): laissÃ© non dÃ©fini"
 
-#: 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: 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:5063
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: commande de chargement inconnue %#x"
 
-#: 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: architecture 0x%lx/0x%lx inconnue"
 
-#: mach-o.c:5227
+#: mach-o.c:5384
 #, 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:895
 #, 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>)"
@@ -5370,122 +5789,122 @@ msgstr "%pB: pas de noyau pour allouer u
 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:952
 #, 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:1248
 #, 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:1395
 #, 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:1628
 #, 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:1639
 #, 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:1679
 #, 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:1730
 #, 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:1771
 #, 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:1782
 #, 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:1807
 #, 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:1832
 #, 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:1854
 #, 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:1868
 #, 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:1975
 #, 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:2012
 #, 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:2026
 #, 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:2735
 #, 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:2979
 #, 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"
 
-#: mmo.c:3082
+#: mmo.c:3078
 #, 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:3124
 #, 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:3177
 #, 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:3228
 #, 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:3235
 #, 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:3240
 #, 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 +5914,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:530
 #, 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: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 "attention: donnÃ©es de dÃ©roulement corrompues\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:367
 #, 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:418 pei-x86_64.c:428 pei-x86_64.c:437
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "attention: section xdata corrompue\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:492
 #, 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:582
 #, 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:589
 #, 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:604
 #, 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:613
 #, c-format
 msgid ""
 "\n"
@@ -5545,12 +5971,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:616
 #, 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:745
 #, c-format
 msgid ""
 "\n"
@@ -5560,42 +5986,42 @@ msgstr ""
 "Vidange 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: type d'importation non traitÃ©e; %x"
 
-#: peicode.h:781
+#: peicode.h:802
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: type d'importation non reconnu; %x"
 
-#: peicode.h:796
+#: peicode.h:817
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: type de nom d'importation non reconnu: %x"
 
-#: peicode.h:1211
+#: peicode.h:1225
 #, 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:1238
 #, 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:1256
 #, 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:1282
 #, 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:1338
 #, 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"
@@ -5653,32 +6079,32 @@ 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:8318
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "INPUT_SECTION_FLAGS pas supportÃ©s"
 
-#: reloc.c:8333
+#: reloc.c:8419
 #, 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
+#: reloc.c:8507
 #, 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
+#: reloc.c:8516
 #, 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:8578
 #, 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:8582
 #, 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 +6114,13 @@ msgstr "la version de l'Ã©diteur de lien
 msgid "%pB: warning core file truncated"
 msgstr "%pB: fichier core d'avertissement tronquÃ©"
 
-#: som.c:5478
+#. User has specified a subspace without its containing space.
+#: som.c:5465
+#, 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:5511
 #, c-format
 msgid ""
 "\n"
@@ -5697,7 +6129,7 @@ msgstr ""
 "\n"
 "En-tÃªte auxiliaire de l'exec\n"
 
-#: som.c:5787
+#: som.c:5820
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers non implÃ©mentÃ©"
 
@@ -5711,7 +6143,7 @@ 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"
@@ -5721,73 +6153,82 @@ msgstr "%pB:%d: mauvaise somme de contrÃ
 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:1088
 msgid "unsupported .stab relocation"
 msgstr "rÃ©adressage du .stab non supportÃ©"
 
-#: vms-alpha.c:479
+#: vms-alpha.c:480
 msgid "corrupt EIHD record - size is too small"
 msgstr "enregistrement EIHD corrompu â€“ la taille est trop petite"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:666
 #, 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:1158
+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:1191
 #, 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:1215
 #, 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:1225
 #, 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:1367
 #, 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:1442
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "sous type EGSD %d inconnu"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1475
 #, 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:1489
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "sous dÃ©pilage de la pile dans _bfd_vms_pop"
 
+#: vms-alpha.c:1563
+#, 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:1764
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "commande ETIR %d inconnue"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1795
 msgid "corrupt vms value"
 msgstr "valeur vms corrompue"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1926
 msgid "corrupt ETIR record encountered"
 msgstr "enregistrement ETIR corrompu rencontrÃ©"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1988
 #, c-format
 msgid "bad section index in %s"
 msgstr "index de section erronÃ©e dans %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2002
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "commande STA %s non supportÃ©e"
@@ -5797,1468 +6238,1480 @@ 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:2210 vms-alpha.c:2241 vms-alpha.c:2336 vms-alpha.c:2556
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: pas supportÃ©"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2216
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: non implÃ©mentÃ©"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2381 vms-alpha.c:2396
+#, 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:2456
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s divise par zÃ©ro"
+
+#: vms-alpha.c:2522
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "utilisation incorrecte de %s avec des contextes"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2580
 #, c-format
 msgid "reserved cmd %d"
 msgstr "commande %d rÃ©servÃ©e"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2664
 msgid "corrupt EEOM record - size is too small"
 msgstr "enregistrement EEOM corrompu â€“ taille trop petite"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2673
 msgid "object module not error-free !"
 msgstr "module objet N'EST PAS sans erreurÂ !"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4001
 #, 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:4053 vms-alpha.c:4268
 #, c-format
 msgid "size error in section %pA"
 msgstr "erreur de taille dans la section %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4213
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "rÃ©adressages ALPHA_R_BSR parasite"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4254
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "rÃ©adressage %s non traitÃ©"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4551
 #, 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:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630
+#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675
+#: vms-alpha.c:4681
 #, c-format
 msgid "%s not implemented"
 msgstr "%s non implÃ©mentÃ©"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4724
 #, 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:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237
+#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "rÃ©adressage %s + %s inconnu"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5330
 #, c-format
 msgid "unknown reloc %s"
 msgstr "rÃ©adressage %s inconnu"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5344
 msgid "invalid section index in ETIR"
 msgstr "index de section incorrect dans ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5353
 msgid "relocation for non-REL psect"
 msgstr "rÃ©adressage pour psect non-REL"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5402
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "symbole inconnu dans la commande %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5816
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "le rÃ©adressage (%d) est *INCONNU*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:5932
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (long=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:5937
 #, 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:5954
 #, 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:5957
 #, c-format
 msgid "Module header\n"
 msgstr "En-tÃªte module\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:5958
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   niveau de structure: %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:5959
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   taille max d'enregistrement: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:5965
 #, 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:5971
 #, 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:5974
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   nom du module       : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:5978
 #, 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:5984
 #, 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:5987
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   version du module   : %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:5990
 #, 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:5992
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   date de compilation : %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:5997
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Nom du Processeur de Langage\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:5998
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   nom du language: %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6002
 #, c-format
 msgid "Source Files Header\n"
 msgstr "En-tÃªte des fichiers sources\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6003
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   fichier: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6007
 #, c-format
 msgid "Title Text Header\n"
 msgstr "En-tÃªte du texte du titre\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6008
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   titre: %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6012
 #, c-format
 msgid "Copyright Header\n"
 msgstr "En-tÃªte du copyright\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6013
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   copyright: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6017
 #, 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:6027
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (long=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6032
 #, 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:6036
 #, 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:6038
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   code de complÃ©tion: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6042
 #, 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:6043
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   psect transert adr: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6045
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   adresse de transert: 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6054
 msgid " WEAK"
 msgstr " FAIBLE"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6056
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6058
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6060 vms-alpha.c:6081
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6062
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6064
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6066
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6068
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6075
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6077
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6079
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6083
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6085
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6087
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6089
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6091
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6093
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6095
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6097
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6099
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6108
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (long=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6121
 #, 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:6127 vms-alpha.c:6378
 #, 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"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6139
 #, 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:6140 vms-alpha.c:6157
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   alignement : 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6141 vms-alpha.c:6158
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   fanions    : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6145
 #, 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:6146 vms-alpha.c:6203 vms-alpha.c:6252
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   nom        : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6156
 #, 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:6162
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   alloc (long)  : %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6163
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   offset d'image: 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6165
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   offset symvec : 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6167
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   nom           : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6180
 #, 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:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   fanions: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6184
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   offset psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6188
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   adresse code: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6190
 #, 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:6193 vms-alpha.c:6269 vms-alpha.c:6288
 #, 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:6195 vms-alpha.c:6271 vms-alpha.c:6290
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   nom         : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6202
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM - RÃ©fÃ©rence du symbol globaux\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6214
 #, 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:6215
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   fanions       : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6219
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   correspondance id : %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6221
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   sÃ©vÃ©ritÃ© d'erreur: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6224
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   nom d'entitÃ©  : %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6226
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   nom d'objet   : %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6229
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   ident binaire : 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6232
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   ident ascii   : %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6240
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG - DÃ©finition de symbole universel\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6244
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   offset vecteur symbole: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6246
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   point d'entrÃ©e: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6248
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   descr proc : 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6250
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   index psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6261
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV - DÃ©finition symbole vectorisÃ©\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6265
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   vecteur     : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   offset psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6280
 #, 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:6284
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   masque de version: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6295
 #, 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:6330
 #, 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:6334
 #, 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:6339
 #, 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:6345
 #, 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:6350
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "   nom global: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6361
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr "  %s (long=%u+%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6383
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr "   (type: %3u, taille: 4+%3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6387
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (pile globals) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6391
 #, c-format
 msgid "STA_LW (stack longword) 0x%08x\n"
 msgstr "STA_LW (pile mot long) 0x%08x\n"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6395
 #, c-format
 msgid "STA_QW (stack quadword) 0x%08x %08x\n"
 msgstr "STA_QW (pile quad mot) 0x%08x %08x\n"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6400
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (base pile psect + offset)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6402
 #, 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:6408
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (pile literale)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6411
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (pile module)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6414
 #, 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:6418
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (stocke octet)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6421
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (stocke mot)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6424
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (stocke mot long)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6427
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (stocke quad mot)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6433
 #, 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:6440
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (stocke globale) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6444
 #, 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:6448
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (stocke branche relative)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6451
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (stocke branche absolue)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6454
 #, 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:6460
 #, 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:6467
 #, 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:6471
 #, 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:6474
 #, 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:6477
 #, 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:6481
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (pas d'operation)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6484
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (ajout)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6487
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (soustraction)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6490
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (multiplication)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6493
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (division)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6496
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (et logique)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6499
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (ou inclusif logique)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6502
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (ou exclusif logique)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6505
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (nÃ©gation)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6508
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (complÃ©ment)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6511
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (insertion champ)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6514
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (dÃ©calage arithmetique)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6517
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (dÃ©calage non signÃ©)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6520
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (rotation)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6523
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (selection)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6526
 #, 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:6529
 #, 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:6533
 #, 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:6537
 #, 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:6539
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   index liaison: %u, procÃ©dure: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6542
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   signature: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6545
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (stocke cond globale)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6547
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   index liaison: %u, globale: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6551
 #, 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:6553
 #, 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:6557
 #, 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:6560
 #, 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:6567
 #, 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:6571
 #, 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:6575
 #, 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:6579
 #, 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:6583
 #, 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:6587
 #, 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:6591
 #, 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:6595
 #, 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:6600
 #, 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:6604
 #, 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:6608
 #, 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:6614
 #, 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:6618
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (dÃ©finir position)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6621
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (fixer position)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6624
 #, 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:6627 vms-alpha.c:7051 vms-alpha.c:7177
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*non pris en charge*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6657 vms-alpha.c:6696
 #, c-format
 msgid "cannot read GST record length\n"
 msgstr "impossible de lire la longueur de l'enregistrement GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6678
 #, 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:6704
 #, c-format
 msgid "cannot read GST record header\n"
 msgstr "impossible de lire l'en-tÃªte de l'enregistrement GST\n"
 
-#: vms-alpha.c:6537
+#: vms-alpha.c:6717
 #, c-format
 msgid " corrupted GST\n"
 msgstr " GST corrompu\n"
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6725
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "ne peut lire l'enregistrement GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6754
 #, 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:6778
 #, 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:6792
 #, 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:6799
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:6825
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  image %u (%u entrÃ©es)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:6831
 #, 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:6853
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  image %u (%u entrÃ©es), offsets:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:6860
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:6982
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 bits *non supportÃ©*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:6987
 #, 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:6998
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "table de %s non contiguÃ«\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7003
 #, 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:7008
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7012
 #, c-format
 msgid "Strides:\n"
 msgstr "Pas:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7022
 #, c-format
 msgid "Bounds:\n"
 msgstr "Limites:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7028
 #, 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:7040
 #, 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:7045
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "base: %u, pos: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7066
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, valeur: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7072
 #, c-format
 msgid "(no value)\n"
 msgstr "(pas de valeur)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7075
 #, c-format
 msgid "(not active)\n"
 msgstr "(pas active)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7078
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(pas allouÃ©e)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7081
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(descripteur)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7085
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(valeur postÃ©rieure)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7088
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(spÃ©cificitÃ©s de la valeur suivent)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7091
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ã  l'offset de bit %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7095
 #, 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:7102
 msgid "literal"
 msgstr "litÃ©rale"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7105
 msgid "address"
 msgstr "adresse"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7108
 msgid "desc"
 msgstr "desc"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7111
 msgid "reg"
 msgstr "reg"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7128
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "long: %2u, type: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7134
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "atomique, type=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7138
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "indirect, dÃ©fini Ã  0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7142
 #, c-format
 msgid "typed pointer\n"
 msgstr "pointeur typÃ©\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7146
 #, c-format
 msgid "pointer\n"
 msgstr "pointeur\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7154
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "tableau, dim: %u, bitmpa: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7161
 #, c-format
 msgid "array descriptor:\n"
 msgstr "descripteur de tableau:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7168
 #, c-format
 msgid "type spec for element:\n"
 msgstr "spec de type pour Ã©lÃ©ment:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7170
 #, 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:7188
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Table des symboles de debug:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7199
 #, 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:7205
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " type: %3u, long: %3u (Ã  0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7219
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "ne peut lire le symbole DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7262
 #, c-format
 msgid "standard data: %s\n"
 msgstr "donnÃ©es standards: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7265 vms-alpha.c:7353
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    nom: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7272
 #, c-format
 msgid "modbeg\n"
 msgstr "dÃ©but module\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7274
 #, 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:7280 vms-alpha.c:7554
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   nom du module: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7283
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   compilateur  : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7288
 #, c-format
 msgid "modend\n"
 msgstr "fin module\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7295
 msgid "rtnbeg\n"
 msgstr "dÃ©but rtn\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7297
 #, 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:7302
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    nom routine : %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7310
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "fin rtn: taille 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7318
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "prologue: adresse bkpt 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7327
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "Ã©pilogue: fanions: %u, nombre: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7337
 #, 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:7346
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "fin blk: taille: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7352
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (long: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7359
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, nom: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7368
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "dÃ©but rec: nom: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7370
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "   long: %u bits\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7375
 #, c-format
 msgid "recend\n"
 msgstr "fin rec\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7379
 #, 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:7383
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "Ã©numÃ©ration Ã©lÃ©ments, nom: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7387
 #, c-format
 msgid "enumend\n"
 msgstr "fin Ã©numÃ©ration\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7392
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "Ã©tiquette, nom: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7394
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "    adresse: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7404
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "plage discontinue (nbr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7407
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    adresse: 0x%08x, taille: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7417
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "num ligne  (long: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7434
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7441
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7447
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7453
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7459
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7464
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7469
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7474
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7478
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7483
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7485
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7490
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7492
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7498
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7502
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x ligne: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7507
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    cmd %u *non gÃ©rÃ©e*\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7522
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "source (long: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7537
 #, 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:7542
 #, 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:7551
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   nom fichier: %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7560
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7565 vms-alpha.c:7570
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7575 vms-alpha.c:7580
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7585 vms-alpha.c:7590
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7594
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7598
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   cmd %u *non gÃ©rÃ©e*\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:7610
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "type dst %u *non gÃ©rÃ©*\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:7642
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "ne peut lire EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:7646
 #, 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:7650
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " id majeur: %u, id mineur: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:7658
 msgid "executable"
 msgstr "exÃ©cutable"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7661
 msgid "linkable image"
 msgstr "image liable"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:7668
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " type image: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:7674
 msgid "native"
 msgstr "natif"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:7677
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:7684
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", sous-type: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:7691
 #, 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:7695
 #, c-format
 msgid " fixup info rva: "
 msgstr " correctif info rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:7697
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", vecteur de symbol rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:7700
 #, c-format
 msgid ""
 "\n"
@@ -7267,474 +7720,474 @@ msgstr ""
 "\n"
 " offset tableau version: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:7705
 #, 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:7711
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " fanions lieur: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:7742
 #, 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:7748
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:7755
 #, 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:7758
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", alias: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:7766
 #, c-format
 msgid "system version array information:\n"
 msgstr "information sur table de version systÃ¨me:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:7770
 #, 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:7780
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "ne peut lire la version EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:7783
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:7787
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:7790
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:7793
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:7796
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:7799
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:7802
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:7805
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:7808
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:7811
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:7814
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:7817
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:7820
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:7823
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:7826
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:7829
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:7832
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:7835
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:7838
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:7841
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:7844
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:7847
 msgid "*unknown*        "
 msgstr "*inconnu*        "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:7863 vms-alpha.c:8137
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "ne peut lire EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:7866
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Activation de l'image:  (taille=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:7869
 #, 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:7873
 #, 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:7877
 #, 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:7881
 #, 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:7885
 #, 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:7896
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "ne peut lire EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:7900
 #, 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:7903
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " nom de l'image    : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:7905
 #, c-format
 msgid " link time        : %s\n"
 msgstr " heure de liaison  : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:7907
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " ident image       : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:7909
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " ident lieur       : %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:7911
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " ident construction image: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:7921
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "ne peut lire EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:7925
 #, 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:7931
 #, 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:7936
 #, 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:7941
 #, 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:7954
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "ne peut lire EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:7965
 #, 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:7973
 #, 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:7978
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " fanions: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8016
 #, 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:8022
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8025
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8028
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8031
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8034
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8037
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8043
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8046
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " ident: 0x%08x, nom: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8056
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "ne peut lire DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8060
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Table de debug du module:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8069
 #, 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:8075
 #, 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:8085
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "ne peut lire le psect DMT\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8089
 #, 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:8102
 #, c-format
 msgid "cannot read DST\n"
 msgstr "ne peut lire DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8112
 #, c-format
 msgid "cannot read GST\n"
 msgstr "ne peut lire GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8116
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Table des symboles globaux:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8143
 #, 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:8147
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  lien iaf : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8151
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  lien correctif: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8154
 #, c-format
 msgid "  size : %u\n"
 msgstr "  taille : %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8156
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  fanions: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8161
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8166
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8171
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8174
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8178
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8181
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8184
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8186
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8194
 #, c-format
 msgid " Shareable images:\n"
 msgstr " Images partageables:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8199
 #, 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:8206
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " correctifs du rÃ©adressage des quad-mots:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8211
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " correctifs du rÃ©adressage des mots longs:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8216
 #, 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:8221
 #, 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:8226
 #, 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:8231
 #, 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:8240
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Changement de protection (%u entrÃ©es):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8246
 #, 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:9123
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: lien relocalisable pas supportÃ©\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9194
 #, 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:1527
 #, 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:370
 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:375
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "_bfd_vms_output_counted appelÃ© avec trop d'octets"
 
@@ -7748,172 +8201,214 @@ msgstr "%pB: objet XCOFF partagÃ© alors
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: objet dynamique sans section .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1417
 #, 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:1470
 #, 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:1493
 #, 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:1506
 #, 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:1537
 #, 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>"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1684
 #, 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:1792
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: XTY_LD Â«Â %sÂ Â» mal placÃ©"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2113
 #, 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:3199
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: pas de tel symbole"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3310
 #, 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:3689
 msgid "error: undefined symbol __rtinit"
 msgstr "erreur: symbole __rtinit non dÃ©fini"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4067
 #, 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:4079
 #, 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:4096
 #, 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:5124
 #, 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
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2869
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "attribut inconnu pour le symbole Â«Â %sÂ Â»Â : 0x%02x"
+
+#: elfnn-aarch64.c:5245
 #, 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:5337
 #, 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:5350
+msgid "%pB: error: erratum 843419 immediate 0x%"
+msgstr "%pB: erreur: erratum 843419 immÃ©diat 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: 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:5904
+#, 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:5992
 #, 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:6105 elfnn-aarch64.c:6142
+#, 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:7127
 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: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 "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:7722
 #, 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-riscv.c:221 elfnn-riscv.c:256
 #, 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"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311
+#: elfnn-riscv.c:2517
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "symbole de section %pcrel_lo avec un opÃ©rande"
+
+#: elfnn-riscv.c:2739
+#, 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: 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"
+
+#: elfnn-riscv.c:2749
+#, 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:2789
 msgid "%X%P: internal error: out of range error\n"
 msgstr "%X%P: erreur interne: erreur car hors limite\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315
+#: elfnn-riscv.c:2794
 msgid "%X%P: internal error: unsupported relocation error\n"
 msgstr "%X%P: erreur interne: erreur car rÃ©adressage non supportÃ©\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325
+#: elfnn-riscv.c:2800
+msgid "dangerous relocation error"
+msgstr "erreur de rÃ©adressage dangereux"
+
+#: elfnn-riscv.c:2806
 msgid "%X%P: internal error: unknown error\n"
 msgstr "%X%P: erreur interne: erreur inconnue\n"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711
+#: elfnn-riscv.c:3337
 #, 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 "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"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-riscv.c:3370
 #, 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 "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Â Â»."
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773
+#: elfnn-riscv.c:3414
 #, 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 "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "erreur: %pB: chaÃ®nes ISA Ã  fusionner Â«Â %sÂ Â» et Â«Â %sÂ Â» non concordantes"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921
+#: elfnn-riscv.c:3569
 #, 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 "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)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946
+#: elfnn-riscv.c:3589
 #, 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 "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)"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954
+#: elfnn-riscv.c:3597
 #, 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 "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"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039
+#: elfnn-riscv.c:3711
 #, 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 "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "avertissement: %pB utilise la version de spec privilÃ¨ge %u.%u.%u mais la sortie utilise la version %u.%u.%u"
+
+#: elfnn-riscv.c:3729
+msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions"
+msgstr "avertissement: la version de spec privilÃ¨ge 1.9.1 ne peut pas Ãªtre liÃ©e avec d'autres versions de spec"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055
+#: elfnn-riscv.c:3757
 #, 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 "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"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096
+#: elfnn-riscv.c:3798
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7922,111 +8417,111 @@ 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-riscv.c:3852
 #, 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:3862
 #, 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:4400
 #, 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"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:158
 #, 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:185
 #, 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:195
 #, 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:527
 #, 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: 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"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:1067
 #, 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:1220
 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:1221
 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:1222
 msgid "Resource Directory [.rsrc]"
 msgstr "RÃ©pertoire des resources [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1223
 msgid "Exception Directory [.pdata]"
 msgstr "RÃ©pertoire des exceptions [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1224
 msgid "Security Directory"
 msgstr "RÃ©pertoire de la sÃ©curitÃ©"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1225
 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:1226
 msgid "Debug Directory"
 msgstr "RÃ©pertoire de dÃ©bug"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1227
 msgid "Description Directory"
 msgstr "RÃ©pertoire de description"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1228
 msgid "Special Directory"
 msgstr "RÃ©pertoire spÃ©cial"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1229
 msgid "Thread Storage Directory [.tls]"
 msgstr "RÃ©pertoire des files de stockage [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1230
 msgid "Load Configuration Directory"
 msgstr "RÃ©pertoire de chargement de configuration"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1231
 msgid "Bound Import Directory"
 msgstr "RÃ©pertoire des importations limitÃ©es"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1232
 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:1233
 msgid "Delay Import Directory"
 msgstr "RÃ©pertoire des dÃ©lais d'importation"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1234
 msgid "CLR Runtime Header"
 msgstr "En-tÃªte exÃ©cutable CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1235
 msgid "Reserved"
 msgstr "RÃ©servÃ©"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1282
 #, c-format
 msgid ""
 "\n"
@@ -8035,7 +8530,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:1288
 #, c-format
 msgid ""
 "\n"
@@ -8044,7 +8539,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:1295
 #, c-format
 msgid ""
 "\n"
@@ -8053,30 +8548,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:1301
 #, c-format
 msgid ""
 "\n"
@@ -8085,7 +8557,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:1304
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8094,7 +8566,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:1353
 #, c-format
 msgid ""
 "\n"
@@ -8103,12 +8575,12 @@ msgstr ""
 "\n"
 "\tNom DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1369
 #, 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:1394
 #, c-format
 msgid ""
 "\n"
@@ -8117,13 +8589,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:1438 peXXigen.c:1477
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<corrompu: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1570
 #, c-format
 msgid ""
 "\n"
@@ -8132,7 +8603,7 @@ 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:1576
 #, c-format
 msgid ""
 "\n"
@@ -8141,7 +8612,7 @@ 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
+#: peXXigen.c:1587
 #, c-format
 msgid ""
 "\n"
@@ -8150,7 +8621,7 @@ msgstr ""
 "\n"
 "Il y a une table d'exportation dans %s, mais elle ne rentre pas dans la section\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1598
 #, c-format
 msgid ""
 "\n"
@@ -8159,7 +8630,7 @@ msgstr ""
 "\n"
 "Il y a une table d'exportation dans %s, mais elle est trop petite (%d)\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1604
 #, c-format
 msgid ""
 "\n"
@@ -8168,7 +8639,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:1632
 #, c-format
 msgid ""
 "\n"
@@ -8179,67 +8650,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:1636
 #, 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:1639
 #, 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:1643
 #, 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:1646
 #, 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:1657
 #, 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:1660
 #, c-format
 msgid "Number in:\n"
 msgstr "NumÃ©ro dans:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1663
 #, 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:1667
 #, 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:1670
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Table d'adresses\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1673
 #, 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:1678
 #, 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:1683
 #, 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:1697
 #, c-format
 msgid ""
 "\n"
@@ -8248,20 +8719,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:1706
 #, 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:1725
 msgid "Forwarder RVA"
 msgstr "Adresseur RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1737
 msgid "Export RVA"
 msgstr "Exportation RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1744
 #, c-format
 msgid ""
 "\n"
@@ -8270,29 +8741,27 @@ msgstr ""
 "\n"
 "Table [Ordinal/Nom de pointeur]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1752
 #, 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:1759
 #, 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:1773
 #, 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:1827 peXXigen.c:1996
 #, 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:1831 peXXigen.c:2000
 #, c-format
 msgid ""
 "\n"
@@ -8301,12 +8770,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:1834
 #, 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:1836
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8315,27 +8784,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:1849
 #, 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:2002
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8344,7 +8798,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:2123
 #, c-format
 msgid ""
 "\n"
@@ -8355,7 +8809,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:2152
 #, c-format
 msgid ""
 "\n"
@@ -8364,62 +8818,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:2170
 #, 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:2231
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "%03x %*.s EntrÃ©e: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2255
 #, 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:2275
 #, 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:2285
 #, 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:2290
 #, c-format
 msgid "ID: %#08lx"
 msgstr "ID: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2293
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Valeur: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2315
 #, 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:2357
 #, 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:2365
 #, 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:2453
 #, 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:2477
 #, c-format
 msgid ""
 "\n"
@@ -8428,17 +8882,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:2483
 #, 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:2486
 #, 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:2543
 #, c-format
 msgid ""
 "\n"
@@ -8447,7 +8901,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:2549
 #, c-format
 msgid ""
 "\n"
@@ -8456,7 +8910,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:2556
 #, c-format
 msgid ""
 "\n"
@@ -8465,7 +8919,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:2561
 #, c-format
 msgid ""
 "\n"
@@ -8475,24 +8929,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:2568
 #, 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:2573
 #, 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:2620
 #, c-format
 msgid "(format %c%c%c%c signature %s age %ld)\n"
 msgstr "(format %c%c%c%c signature %s age %ld)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2630
 #, 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 +8954,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:2714
 #, c-format
 msgid ""
 "\n"
@@ -8509,97 +8963,162 @@ msgstr ""
 "\n"
 "CaractÃ©ristiques 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:2960
 #, 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:2997
 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:3005
 #, 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:3820
 #, 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:3955
 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:3973
 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:4015
 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:4020
 #, 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:4087
 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:4094
 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:4211
 #, 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:4219
 #, 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:4358
 #, 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:4378
 #, 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:4399
 #, 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:4419
 #, 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:4461
 #, 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:4486
 #, 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"
 
+#~ 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 +9209,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 +9265,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,9 +9307,6 @@ 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"
 
@@ -9133,9 +9643,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/Make-in ./bfd/po/Make-in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/Make-in	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/Make-in	2021-12-16 01:57:38.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-2021 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/pt.gmo ./bfd/po/pt.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/pt.gmo	2020-03-07 02:11:47.000000000 +0000
+++ ./bfd/po/pt.gmo	2021-12-16 02:00:37.000000000 +0000
@@ -1,144 +1,147 @@
-Þ•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(4Y	 h„�‚œ�¤�¨
¨+¨?¨X¨Aw¨?¹¨:ù¨4©K©^©$}©
¢©°©%Ð©ö©ø©A
+ª&LªsªŒª¥ª¾ªÎª íª«.«G«^«k«P~«Ï«*ç«;¬N¬F`¬6§¬6Þ¬:­5P­,†­D³­Nø­JG®)’®G¼®:¯B?¯L‚¯)Ï¯Bù¯L<°‰°Ÿ°D¶°Gû°C±b±t±ˆ± ±µ±3Ô±²²01²b²r²‚²+œ²+È²+ô²# ³D³\³e³ƒ³(š³?Ã³>´%B´&h´(�´)¸´Gâ´7*µbµyµ™µ¶µÏµêµ
+¶#¶>¶T¶l¶€¶—¶,±¶Þ¶î¶··6·E·[·p·Š·¡·1¶·è·ù·¸¸8¸#P¸+t¸& ¸5Ç¸ý¸¹*¹D¹Z¹t¹�¹¤¹º¹$Ï¹ô¹
º-ºEº$Zºº“º¨º<Áºþº
»
»*»>»S» k»Œ»§»·»×»ó»¼,¼E¼X¼*k¼–¼¨¼&º¼á¼0õ¼&½":½	]½g½#z½ž½·½È½á½"ú½¾"1¾#T¾#x¾œ¾#±¾#Õ¾ù¾¿$¿B¿H¿U¿]¿b¿¿
+�¿¨¿­¿!³¿ Õ¿ö¿û¿ÀÀ8ÀXÀ]À!bÀ„À•ÀœÀ¢À§À¬À²À¶À"»ÀÞÀãÀÁÁ&7ÁB^Á¡ÁÁÁÆÁËÁÒÁØÁÝÁïÁöÁÂ"Â)ÂBÂVÂgÂxÂ‰ÂšÂ«ÂÃÂ	ÒÂ
ÜÂ
êÂ
+øÂ
+Ã
+Ã
+Ã
+$Ã$/Ã
+TÃ#_Ã
+ƒÃŽÃ Ã!¸ÃÚÃïÃ
+þÃ
	Ä	Ä!Ä
+2Ä=ÄDÄ\ÄvÄˆÄ—Ä®ÄÉÄØÄñÄÅÅ'Å(7Å/`Å�Å¢Å+±ÅÝÅAùÅ;ÆUÆoÆ‰Æ8žÆ×ÆïÆÇ&ÇEÇdÇ2Ç?²Ç&òÇÈ(8ÈaÈ"tÈ—È*·È6âÈ{Ér•ÉxÊ�Êe—Ê7ýÊ:5ËpË?‚Ë<ÂË@ÿËU@Ì`–Ìb÷ÌqZÍÌÍìÍ&
+Î1ÎœKÎDèÎ'-Ï,UÏ1‚Ï'´Ï$ÜÏ/Ð-1Ð0_Ð&�Ð8·ÐðÐ=Ñ9NÑ:ˆÑ6ÃÑ6úÑ1Ò/QÒ5�Ò+·Ò$ãÒ6Ó"?Ó&bÓ6‰Ó=ÀÓ:þÓ:9ÔDtÔ8¹Ô9òÔC,Õ:pÕ7«Õ8ãÕ@ÖG]Ö9¥Ö,ßÖ0×#=×a×=|×-º×6è×Ø7;Ø;sØ:¯Ø"êØ3
Ù%AÙ.gÙ–Ù0¶Ù1çÙ'ÚAÚE_Ú8¥Ú(ÞÚcÛ4kÛ& Û2ÇÛ&úÛk!Ü*�Ü4¸Ü]íÜ8KÝ„ÝO£ÝbóÝ,VÞ+ƒÞ)¯ÞYÙÞ03ß=dß3¢ß2ÖßB	àLLà™à4·à)ìà$á3;á9oá6©á/àáDâ&UâW|âUÔâI*ã+tã8 ã%Ùã(ÿã&(ä,Oä#|ä> äBßäB"åeå'…åE­å9óå4-æ3bæJ–æ(áæ;
+çFç0eçD–ç.Ûç9
+è?Dè?„èGÄè?é2Lé8éS¸é'ê.4ê,cê'�ê6¸ê ïêYë/jë4šëNÏëªìIÉì9í3Mí¾�í<@î<}îFºîPïoRï>ÂïFð`Hð~©ðF(ñ‚oñ[òñ3Nò@‚òMÃòmó7ó#·óÛó(ñó&ô+Aô5mô£ô¸ô8Ìô"õ$(õ'Mõ9uõC¯õ!óõ!ö*7ö/bö1’ö/Äö/ôö0$÷*U÷0€÷<±÷iî÷=XøB–ø=Ùø-ù.Eù8tù:­ùFèù?/úVoú(Æú>ïú;.û=jû4¨û#ÝûLüINü8˜ü+Ñü8ýü26ý9iý:£ý3Þý,þu?þ µþ.Öþ.ÿJ4ÿ0ÿB°ÿ/óÿ,#'P%x,žNËC4Jx@ÃJ*O%z< 1Ý l0<�<Ú+C,_HŒ6ÕAANJ�>ÛJJe<°<í.*(Yl‚vïAf6¨ß4ý02	+c	A�	3Ñ	@
+!F
+#h
+.Œ
+B»
+Fþ
+4E%z: 2Û*99Cs(·Cà:$
T_
J´
5ÿ
456j/¡/Ñ&&(5O'…0­5Þ(3=%q&—¾'Þ=#D+h3”(È@ñC25v'¬,Ôg4imžA@NH�GØK IlL¶HCLY�5ê0 4QM†NÔ1#)U)/©)Ù+7/3g6›9ÒX[eCÁ6><={*¹.ä2[F&¢-É,÷$?/Z(Š$³0Ø'	81"jA�)Ï=ù#7@[2œ+Ï"û5 <T '‘ %¹ (ß R!?[!F›!3â!1"DH"H�"DÖ"K#ag#sÉ#B=$‚€$T%=X%b–%bù%g\&gÄ&0,'(]'4†'5»')ñ'3(-O(/}(H­(Fö(7=)Gu)+½)$é)2*.A*/p*+ *)Ì*-ö*^$+Kƒ+FÏ+,"2,U,5p,(¦,EÏ,D-DZ-FŸ-_æ-^F."¥.*È.+ó.8/:X/'“/;»/8÷/'00'X03€0>´0-ó0,!1N1Im1·1Ô1.ò1/!2Q2$q23–2Ê2Fè2&/3!V36x35¯3)å34)4H4+b4 Ž4$¯4.Ô4.5%25)X5\‚5Dß5H$6Dm6L²6Xÿ6HX7)¡7*Ë7 ö7589M8@‡8+È86ô8\+9Aˆ9.Ê9Mù93G:={:H¹:<;8?;3x;4¬;4á;0<@G<1ˆ<Bº<Lý<AJ=LŒ=8Ù=B>+U>2�><´>3ñ>X%?P~?.Ï?`þ?&_@P†@\×@X4Ap�AAþA+@BKlB.¸B<çB,$CXQC%ªCÐC3ðC2$DWD4wDJ¬D?÷D@7EWxE=ÐE*F59F%oFB•F%ØF4þF>3G<rGC¯GBóG;6H3rH)¦H'ÐHøHJ+J=JLJ!aJƒJ$™J¾J1ÑJVKIZKI¤K<îK+L>LRLdL~L
’L' LÈL
ÔLâL%óL\M;vM²MÄMÚMÝMúMN	 N*N<NMN,ZN‡N›N±NXÍN0&O6WO2ŽO*ÁO$ìO6P(HP2qP3¤P@ØP+Q(EQ.nQ"�QÀQ(ÝQ/R/6R1fR8˜R#ÑR'õR2S3PS„S;”SÐS×SßSôSTTT'T<TQTcTvT�T¤T¶TÔT	óTýTU	0U":U]UoU)‹U/µU"åUVV(V4V8VKV]VoV'�V©V ÆV#çVW%W 7WXWHvW1¿W#ñW,X@BXXƒXaÜX:>Y.yY7¨Y1àY;Z(NZ:wZ,²Z-ßZE
[-S[�[2 [Ó[ã[ø[
\$\):\d\!z\$œ\,Á\(î\-]IE]�]5¬]â]
+÷]C^IF^�^¢^ª^²^
Ð^Þ^>ð^?/_Ao_±_/Í_+ý_8)`b`$x`!�`1¿`ñ`a+/a[aoaˆa
+•a aB¿ab%b:bLb.jb-™bGÇb3cCc"bc…c–c§c¹c$Òc÷c!d6d5Hd~d	�dšd¬dÂdâdüde'e9e	@eJeOe[eje�e�e³eÅeåeþef2fDf\f-zf¨fºfÌfàfúf'g7gFgXgjgqg!xgšg:¶g%ñg%h=hAVh;˜hCÔh=iCVi=ši"Øi7ûi<3j<pj)­j5×j
kkv1k*¨kÓk'åk
ll&l-l
+<l(Glpl'‚lªlÇlßlÿl#m$;m,`m.�m,¼m.émn"5n,Xn.…n!´n1Ön0o29o,lo.™o#Èoìop( p/Ip!yp›p(¸p#áp+q1q,Jq wq˜q±qÑqåqr#$r-Hr"vr™r«r¾rÊrßr&ñr	sF"s/is™sJªsMõsCtctzt�t-ªtØtátétAõt>7uvuAˆu7ÊuBv!Evgv˜‡v w<wNw`w#uw2™w.Ìw#ûwx,x9xIxQx:jx+¥x#Ñxõxy!y9y,Qy:~y¹y	ÑydÛy@z6SzMŠzMØz<&{gc{bË{<.|1k|(�|$Æ|ë|/}+1}]}y}“}°}>Ì}<~H~4d~'™~$Á~6æ~.F]n†ž°ÂÔæ€€-€>€V€u€2”€Ç€'á€L	�4V�7‹�0Ã�'ô�‚<‚N‚-h‚+–‚+Â‚*î‚	ƒ	#ƒ
+-ƒ
+8ƒCƒXƒsƒ‚ƒ—ƒ¦ƒ1«ƒÝƒ/ýƒ-„L„ ]„'~„"¦„&É„0ð„!…?…T…]…9{…µ…,Ê…a÷…9Y†)“†C½†I‡EK‡Y‘‡Yë‡;Eˆ;�ˆM½ˆ/‰5;‰:q‰5¬‰4â‰9Š7QŠ9‰ŠDÃŠG‹DP‹E•‹CÛ‹-Œ4MŒ>‚Œ;ÁŒ8ýŒ*6�6a�/˜�;È�3Ž%8Ž1^Ž!�ŽV²Ž9	�\C�A �1â�?�:T�7��>Ç�$‘E+‘Iq‘»‘ZØ‘/3’Oc’P³’3“ 8“?Y“:™“&Ô“
+û“0”%7”"]”%€”0¦”!×”ù”•-•B•O•O^•®•,Í•7ú•
2–@–1O–�–•–¨–»–)Ø–*—,-—6Z—‘—$±—_Ö—"6˜(Y˜A‚˜Ä˜,â˜2™HB™‹™›™
+¬™$·™Ü™ï™¼š¹Ìš†›/˜›È›ã›œ*!œLLœ2™œ-Ìœ)úœ"$�G�Z�o�„�4“�È�0Ð�%ž9'žaž<sž=°ž3îž5"Ÿ2XŸ7‹ŸBÃŸL S d ~ † Ž ª H± ú 4ý 2¡;¡
+R¡]¡2y¡-¬¡OÚ¡*¢I¢"N¢*q¢%œ¢ Â¢ã¢£	£C(£¤l£¤¤ 8¤Y¤b¤v¤‹¤¡¤·¤Î¤ë¤ü¤¥"¥**¥NU¥[¤¥¦A¦F¦e¦}¦š¦6²¦é¦ 	§8*§+c§�§¢§²§º§Ï§ç§û§¨#¨6¨
I¨W¨Lq¨ ¾¨ß¨Dþ¨PC©”©¦©2Á©$ô©ª9ª5Lª‚ª!�ª¿ªÆª2ÎªF«JH«/“«FÃ«
+¬"¬?¬O¬M^¬9¬¬;æ¬7"­Z­r­�­ž­,±­$Þ­J®)N®(x®%¡®(Ç®ð®
+¯,¯D¯)^¯ˆ¯¦¯À¯Ø¯à¯ø¯)°:°
P°#^°‚°'š°Â°Ó°é°± ±:±#F±%j±�±­±Ä±Ö±7í±%²A²Z²o²�²”²¨²¼²Ò²Jè²J3³J~³IÉ³:´N´-m´;›´+×´@µ<Dµ8�µ8ºµ5óµ8)¶Tb¶.·¶>æ¶I%·ho·yØ·>R¸N‘¸Ià¸d*¹0�¹;À¹8ü¹F5º5|º&²º.Ùº[»-d».’»0Á»<ò»!/¼Q¼!j¼)Œ¼I¶¼`½Ga½.©½,Ø½h¾En¾0´¾6å¾k¿Eˆ¿Î¿&ì¿SÀEgÀ#­À<ÑÀ<ÁeKÁP±Á2Â/5Â/eÂ4•Â=ÊÂ9Ã0BÃ7sÃ%«Ã'ÑÃ=ùÃ67Ä@nÄ¯Ä2ÏÄÅ,Å3Å
DÇRÇgÇ"„ÇW§ÇSÿÇGSÈ›È´ÈÈÈ&èÈÉÉ%>ÉdÉfÉTxÉ(ÍÉöÉÊ/ÊJÊ ZÊ"{Ê!žÊÀÊÝÊõÊËVËrË.ŠË@¹ËúËPÌEeÌ>«ÌBêÌD-Í.rÍJ¡ÍVìÍOCÎ/“ÎEÃÎE	ÏLOÏXœÏ/õÏL%ÐXrÐËÐæÐQÑESÑ ™ÑºÑÐÑäÑþÑ#Ò79ÒqÒˆÒ=šÒØÒèÒøÒ,Ó,?Ó,lÓ#™Ó½Ó×ÓàÓþÓ'Ô=?Ô<}Ô"ºÔ%ÝÔ%Õ()ÕKRÕ9žÕØÕñÕÖ.ÖGÖcÖƒÖ�ÖºÖÐÖîÖ××,3×`×p×‰×¦×Á×Ô×ë×þ×Ø/Ø6EØ|Ø‘ØžØ·ØÒØ*ëØ8Ù.OÙ<~Ù»ÙÐÙêÙÚÚ9ÚRÚiÚÚ1–ÚÈÚáÚ'Û)Û)@ÛjÛ€Û•Û<®ÛëÛúÛ
	ÜÜ,ÜAÜ(]Ü†Ü¡Ü³ÜÓÜ ñÜÝ+ÝKÝ_Ý*rÝ�Ý¯Ý,ÁÝîÝ0Þ3Þ'GÞoÞ|Þ#�Þ³ÞÌÞáÞúÞ$ß:ß%Nß#tß#˜ß¼ß#Ðß#ôßà'àEàdàjàyà�à †à/§à
+×àâàçà$íà0áCáHáMáfá…á¤á©á-®áÜáðá÷áýáââ
ââ$â;â@â_â"xâ+›âDÇâã+ã0ã5ã<ãBãGãYã`ãxã‘ã˜ã¶ãÏãàãñãää$ä8ä	Lä
Vä
dä
+rä
+}ä
+ˆä	“ä
+�ä0¨ä
+Ùä-ää
+åå/å*Fåqåˆå™å¥å	¹åÃå
Õåãåêåæ"æ4æCæbæ�æ!•æ·æÄæ"Ëæîæ8ÿæA8çzçŒç2ŸçÒçAîç0èKèeèè6˜èÏèéèþè1é)Jété9�é?Éé1	ê);ê,eê’ê"¨ê%Ëê*ñê6ë…SëzÙëyTìÎìoëì;[í>—íÖíFêíB1îHtî`½îgïg†ïwîïfð&†ð=­ðëð©ñJ²ñ&ýñ1$ò0Vò&‡ò#®ò.Òò,ó3.ó%bó4ˆó!½óEßóA%ôBgô<ªôBçô*õ3GõF{õ)Âõ"ìõ?ö#Oö(sö9œö@Öö<÷=T÷G’÷:Ú÷<øFRø<™ø:Öø:ùQLùXžùN÷ù9Fú2€ú%³úÙú?÷ú-7û7eû�ûA¸ûAúûB<üü7žü#Öü5úü'0ý?Xý/˜ý(ÈýñýMþA\þ4žþkÓþ6?ÿ,vÿ9£ÿ,Ýÿr
+'}6¥rÜAO ‘^²l0~*¯,Ú[9cD�;â7JVT¡ö=+R&~8¥GÞF&EmN³(j+[–Wò9J5„/º1ê)	.F	$u	Fš	Ká	>-
+'l
+5”
+OÊ
+72R1…Z·0IC"�5°XæD?
I„
QÎ
P \qTÎ=#Mak¯70S.„)³;Ý)rC5¶CìY0°ŠQ;B�=ÐÆBÕBM[T©�þG€NÈn–†RŠpfû4bE—YÝz74²1ç46+k/—9ÇC/)s'�,ÅDòM7%…%«.Ñ3543j4ž8Ó.8;7to¬; HX ;¡ 6Ý @!BU!I˜!Mâ!F0"\w"/Ô"G#AL#GŽ#;Ö##$K6$J‚$7Í$/%C5%=y%D·%Cü%;@&1|&Ž®&$='4b'4—'SÌ'2 (GS(6›(4Ò(7)1?)1q)Y£) ý)K*Xj*QÃ*]+2s+)¦+OÐ+9 ,+Z,†,F-FM-(”- ½-2Þ-I.8[.C”.CØ.M/=j/N¨/M÷/BE0Rˆ01Û01
1s?1}³1G12>y2+¸26ä243+P3M|3@Ê3>4*J4*u4/ 4OÐ4Z 58{5(´5DÝ58"6-[6B‰6XÌ6&%7XL7D¥7fê7PQ84¢86×8@9BO9?’9.Ò92:94:/n:8ž:=×:/;8E;-~;(¬;"Õ;-ø;D&<)k<2•<@È<&	=C0=Ot=9Ä=&þ=1%>wW>?Ï>r?L‚?JÏ?R@Qm@U¿@NAadAUÆAOBjlBH×B9 C;ZCZ–CWñC;ID/…D/µD0åD.E2EE?xE:¸E=óEA1FdsFgØFL@G=�GGËGAH0UH3†H7ºHfòH1YI1‹I1½IïI
J5+J0aJ2’J7ÅJ1ýJI/K$yKLžK0ëKAL)^LDˆL3ÍL*M+,M=XMD–M,ÛM'N00NYaNG»NSO9WO:‘OIÌOPPIgPV±PjQwsQJëQ�6R_ÇRG'SmoSnÝSrLTt¿T;4U/pU5 UAÖU.V8GV=€V4¾VMóVKAWA�WWÏW6'X5^X7”X0ÌX5ýX13Y.eY6”YhËYR4ZI‡ZÑZ%ðZ[=4[+r[Lž[Kë[K7\Mƒ\fÑ\e8]*ž]3É]1ý]?/^Bo^1²^9ä^>_+]_.‰_;¸_Dô_19`4k`) `[Ê`!&a&Ha:oaAªa,ìa+b9Eb bN b6ïb.&c=UcF“c3Úcd!+dMd1jd+œd/Èd:ød:3e0ne*ŸelÊeM7f[…fFáfT(gS}g[Ñg4-h+bh%Žh=´h=òhC0i0ti>¥i`äiJEj,�jY½j8kEPkO–k4æk@l3\l<�l=Íl4mN@m0�m=ÀmGþm<FnHƒn3ÌnNo3Oo8ƒoB¼o8ÿoc8pYœp7öpf.q*•qWÀqire‚rwèrD`s/¥sIÕs4tATt<–tdÓt)8u&bu7‰u6Áu-øu;&vIbv@¬v@ív\.w=‹w1Éw<ûw,8x>ex-¤x9ÒxCyKPyRœyOïyH?z;ˆz1Äz-öz${#7|[|
n|||)�| º|%Û|}:}cR}V¶}V
~Id~®~Ã~Ù~ì~++Wds%ƒb©;€H€Y€p€%s€™€¨€Ã€Ò€ä€
õ€,�0�E�]�\z�0×�2‚6;‚+r‚'ž‚<Æ‚-ƒ,1ƒ-^ƒ=Œƒ-Êƒ.øƒ2'„"Z„$}„&¢„4É„8þ„37…=k…&©…*Ð…6û…>2†q†B€†Ã†Ê†Ò†ê†ù†‡‡‡1‡F‡X‡k‡�‡—‡"²‡"Õ‡
+ø‡!ˆ%%ˆKˆ#Zˆ~ˆ �ˆ(±ˆ.Úˆ&	‰0‰P‰\‰h‰l‰‰‰›‰­‰0¿‰"ð‰,Š-@Š"nŠ‘Š%ªŠ!ÐŠIòŠ<<‹0y‹4ª‹Lß‹b,Œf�ŒAöŒ38�=l�5ª�Và�47ŽJlŽ&·Ž)ÞŽM�7V�"Ž�:±�ì�"�$$�I�i�)~�¨�$½�$â�*‘&2‘+Y‘D…‘Ê‘7è‘! ’B’IS’U�’ó’“
““3“F“=X“>–“QÕ“''”1O”1�”=³”ñ”+
•-9•8g•$ •&Å•1ì•–:–S–
+c–&n–P•–æ–)ø–"—!4—9V—6�—UÇ—G˜-e˜(“˜¼˜Ð˜ä˜!ö˜$™'=™!e™‡™:™™Ô™	æ™ð™š š=š Wšxš�š¡š	¨š²š¹šÆšÛšðš›(›;›[›u›•›¬›½›×›9÷›1œBœYœ!mœ�œ,¤œÑœáœóœ��&�:�>X�*—�)Â�ì�JžHVžCŸžBãžH&Ÿ@oŸ-°Ÿ:ÞŸE E_ ,¥ >Ò 	¡¡{5¡0±¡â¡$ô¡¢+¢2¢9¢
+K¢4V¢‹¢/�¢Í¢ê¢£"£#;£$_£<„£9Á£<û£98¤'r¤5š¤<Ð¤9
¥0G¥Ax¥@º¥=û¥<9¦9v¦.°¦!ß¦§(§/B§-r§  §,Á§&î§3¨I¨4f¨&›¨Â¨!ß¨©%©%?©e©2ƒ©(¶©ß©ñ©ªª5ª2DªwªJ€ª6Ëª«a«bz«'Ý«¬¬!;¬-]¬‹¬”¬¡¬M²¬D­E­HW­< ­IÝ­&'®&N®¢u®!¯:¯L¯^¯.x¯4§¯.Ü¯*°6°E°T°	j° t°D•°5Ú°-±>±T±n±†±2 ±FÓ±²	8²gB²ª²>½²Nü²NK³Aš³tÜ³pQ´=Â´6µ-7µ&eµŒµH¥µ4îµ#¶@¶,^¶,‹¶P¸¶Q	·&[·I‚·4Ì·2¸A4¸v¸‹¸«¸Æ¸Û¸û¸¹/¹E¹[¹!q¹“¹²¹È¹Ý¹*ú¹'%º5Mºƒº1ŸºRÑº=$»7b»2š»-Í» û»¼#/¼5S¼3‰¼3½¼0ñ¼	"½	,½
+6½
+A½L½ e½†½•½ª½¹½4¾½$ó½9¾ R¾s¾#…¾4©¾)Þ¾0¿>9¿x¿–¿«¿#´¿AØ¿À-.Ày\À4ÖÀ(ÁG4ÁO|ÁVÌÁ]#Â]�Â?ßÂ>ÃX^Ã,·Ã/äÃ7Ä1LÄ1~Ä:°Ä4ëÄ: ÅL[ÅF¨ÅHïÅH8ÆJ�Æ3ÌÆ<ÇE=ÇBƒÇ?ÆÇ+ÈJ2È.}È<¬È3éÈ$É/BÉ rÉ[“É3ïÉ\#ÊN€Ê:ÏÊL
+Ë9WË:‘Ë@ÌË(
ÌM6ÌJ„Ì)ÏÌ_ùÌ+YÍ]…ÍOãÍ03Î"dÎC‡Î>ËÎ-
+Ï8Ï3DÏ(xÏ%¡Ï(ÇÏ?ðÏ0ÐKÐ$hÐ�Ð¨Ð¾ÐSÐÐ#$Ñ7HÑA€ÑÂÑÒÑ;ãÑÒ3ÒFÒYÒ/xÒ3¨Ò+ÜÒ;ÓDÓ&`Óh‡Ó$ðÓ,ÔMBÔ�Ô1°Ô7âÔOÕjÕ{Õ�Õ/šÕÊÕ#àÕÑÖÎÖÖ¥×6º×&ñ×%Ø!>Ø7`Ø[˜Ø4ôØI)Ù5sÙ.©ÙØÙîÙÚÚD)ÚnÚ7vÚ4®Ú9ãÚÛS1ÛO…ÛDÕÛWÜPrÜIÃÜQ
ÝX_Ý¸ÝÊÝéÝñÝùÝÞ\ÞyÞ<~Þ»ÞÄÞ
âÞðÞC
ß;Qßo�ßýßà&$à1Kà5}à#³à$×à
üà$
+áO/á¦á&â8â9Pâ	Šâ”â­âÇâââýâ ã:ãMãaãuã8}ãW¶ãkäzäE~ä"Ääçä#ÿä!#åBEå"ˆå&«å@Òå5æIæ\æqæyæ‘æ¨æ¼æÐæäæ÷æ
+çç\=ç$šç)¿çYéçZCèžè$¯è1Ôè)é'0éXé<lé!©é1Ëéýé	ê9êJJêL•ê;âêGëfë.�ë°ëÀëNÏë?ì7^ìB–ìÙì ÷ìí+í2>í,qíXží4÷í*,î%Wî6}î#´î
+Øî2ãîï95ï$oï”ï±ïÐïÝïûï2ðKðhð/zð ªð/Ëðûðñ,ñ#Jñnñ�ñ'žñ*Æñ$ññò4òIòEhò®òÍòêòÿòó$ó8óLóbóSxóXÌóR%ôUxôEÎôõ-3õ@aõ+¢õCÎõ6öDIö@ŽöCÏö2÷TF÷0›÷EÌ÷Tøugø†ÝøEdùZªùTúxZú4Óú?û:HûFƒû>Êû*	ü14üWfü4¾ü4óü5(ý>^ý'�ýÅý#âý&þH-þdvþHÛþ/$ÿ-Tÿf‚ÿDéÿ5.:diŸD	 N(oo˜O#XB|B¿dOg9·4ñ6&?]F�:ä8=X'–)¾Vè9?HyÂ8â.zm%Ï“/<ÉÀ�H[F¯lqM_B)Dä}�]W]î�Ëréï„Û¬9c©È9#@È”4ÚÐþÕe]i%N{e­^JŸV¶¾lÙSî·_®²!æAI"[‹,½›ˆà#&:¹3Ã–ó™íÏR%=‘?à0d,šÊŸ
+ký2bqÕ‚¾R=²ÌçyS5èó|’×A�µÓ¡÷¡FN:8I±†æýXª-²Ÿ
ñj+b_ÙõÊO%ôD*öã[ÍtÄÚ˜{Íjx)ñ!¢;+-}ÝÌVQ´À¸ ÄÚÜ“7,(ÔÉÜW�ëu*0Q±º³ÊÜý9'f¢V�dïõZµi ["ÁLu#·tVPò�^ª¬"ÄÒÒJˆ'Ÿ�¸•CJŸêrê\ŒEKPäÇ:òâ°QéDù’¾·Iªð¬¥w¥ÝØ–dƒ‚„¸PnŽM‰…åI(Ì‰ N`¦{ñØ¡§+GaI¿™YæÖ2¨·3ÂZ´ã­1�¹ª•ÑáäBùz¹Ñt¯ç¿€JA©…7®P|ßi¿WY(EqhËslÔþ!º!”ß¶(;A.Vú�/Rq1G¯0ÔQpÔ†œ¯ìà³“šeÇCY-�À¼¨“wc«ýÖzUKë0÷ô6[«¤õ“2ƒ±Äÿ¢=UBÅ>‰:xT5‘l÷"Bû«Kü,ä»·Jâ2+†p=d~à'ßïvØ9äŽ�‰
+Z³žK³Ã§C$	Íå£ìåbÅngÔ8ÛkGKNúV>ë›³	´wövé�Ýo™	i…+ã‚Bô_D:.ŠX?.ðwfDnµ5žálb<ƒéY\›Ltƒù–wœšj@gd\áæuU
ÑºsXH˜y`v°¬–)ÖZíÈ4anuðº=ìKº€ÙÇ£Êäõ¸Û¬$lèŠpoÏyÇLHTY]Ç»i¼6Ñ¬ª±ÿÂjÿ„èo—ôLµB°H
^¢”�
+9oj-ÏCZ~‹~z¹ÃÈ¨Ú~c5k^kxO^Ô1Š<0¶3çCÖ�Smè4s_Á•*$ùí«[Ž}«û—�Ð;ÎT¶µÃ¹@­õ*hÛ½ïX¥¦gpm7hÎ©{a/¼f¯åyæobóøøæÂ¢¾€sUóE3ju”§»Í­,†&¡�r:t†ú-7ÁfûœSâõŒ'žê©Ý¥9”þ‚ÞÌRxÑÕnù~]-˜Lå(ÄÀñt“ö˜Mþ½x+×�;+S`W�ãýhù
•\O—û*;); …Ó…£í'ÜaMb
y¦�œXˆ!º°Æ?ÿ®¸£ÝŽPöH}ˆªž$dws8é`¿<©?0ü’ ñ§îÅsiXƒTý»˜a„­ÃFNØIÀâ\êÁÖáQŠìv'1Áµþî)R^Š(=®Ÿ§]wçí:ô�v|‹@6oþXÛ¡²8}ÆÝÓWpÜ¦Þ·iÎ´‡Þz˜|‡ ¤„ÈêEÒ’—¥Îx&êfL&›åÙqâ‡<´ÒÙUW��Á‚Þó×½4ëÉ‘ÿ×u
sp5Cò\.´ÂòDãW&ßŒh(	¤IKœï2-¥mkà¯Ù3¼›€ÉcAŽü8‡%.H‘EŒRÿQSP¿eÀñ��ÆD6‹@&?È<~TÅGJM�>%Åk5›‘ )ì¸{íÕÌg‹m]FÜ3r”q2_Âèàéš¨@¶÷ÂH8
+#AFÒ§«…4¿Ó%ôU4Off1@e}`h$ MP"ò
+ ²Õ±`šîÞˆ•Ò63ë6¢ÖLVû�1ãž¡

+#g’É¤®½!	mÊ/¼	AüŠUÄÌ¼×€°ÚZÃ‚¨ú8N49Æ6,E ‰òÕÍR,ß‡€×’¶{ÐÍüÅ>&jvìÐŒhÉa)á‡Ëc7
+~Ê�çOFJÇgošY•<{ÏÞS»Qr}/á¤ ™cC÷nÚŒ*ÐËNó�úðgŽrÎZ¦ï—'5muy#=zcøÆËt.vÏ0öË³|Û!ÓØ>[‹ø™û¹ÎßT/‰ž|E–ƒ¾¨e™©±÷¦	ðlkø½¤7FöeÑ"z1£?ð;­xç*$aØdúMÆ¾²rGqG†âî�_T p.øB£|2ˆ`b—‘^>$/?\n GüO#Oè>®°7Óy„"œ»YÐ–ëNU\¬‘È‘Ü‘ð‘’’,’@’T’h’|’�’¤’¸’Ô’è’““,“@“T“h“|“�“¤“¸“Ì“è“ü“”,”P”l”€”””¨”¼”Ø”ì”••0•D•X•l•€•”•¨•¼•Ð•ä•––0–D–h–|–�–¤–¸–Ì–à–ü–—4—H—\—p—„—˜—¬—À—Ô—è—ü—˜$˜8˜L˜`˜t˜ˆ˜œ˜°˜Ì˜è˜ü˜™,™@™T™h™|™�™¤™¸™Ì™à™ü™š,šHšdšxšŒš š¼šØšôš››8›L›`›t›ˆ›œ›°›Ä›Ø›ô›œœ0œLœ`œtœˆœœœÈœäœ��(�<�P�d�x�Œ� �´�È�Ü�ð�ž ž<žPždžxžŒž ž´žÈžÜžðžŸ Ÿ4ŸHŸdŸˆŸ¤Ÿ¸ŸÌŸàŸôŸ $ 8 L h | � ¤ ¸ Ì à ô ¡¡8¡T¡h¡|¡ ¡´¡È¡Ü¡ð¡¢¢4¢P¢l¢€¢”¢¨¢¼¢Ð¢ä¢ø¢£ £4£H£\£p£„£˜£¬£À£Ô£è£¤ ¤4¤H¤d¤x¤Œ¤ ¤´¤È¤Ü¤ð¤¥¥4¥P¥d¥€¥œ¥°¥Ä¥Ø¥ô¥¦,¦@¦T¦p¦„¦˜¦¬¦À¦Ô¦è¦ü¦§,§@§T§h§„§˜§¬§À§Ô§¨cÿÿÿÿ…"ÿÿÿÿ» ÿÿÿÿâ5ÿÿÿÿ%ÿÿÿÿJ)ÿÿÿÿz(ÿÿÿÿ©/ÿÿÿÿßÿÿÿÿû'ÿÿÿÿ)	-ÿÿÿÿW	ÿÿÿÿt	ÿÿÿÿŸ	 $ÿÿÿÿë	 ÿÿÿÿ
+%ÿÿÿÿP
+ÿÿÿÿ„
+*ÿÿÿÿ¯
+.ÿÿÿÿß
+)1ÿÿÿÿ9%ÿÿÿÿ_9ÿÿÿÿ™1ÿÿÿÿË
+2ÿÿÿÿ"ÿÿÿÿ;3ÿÿÿÿoÿÿÿÿ–9ÿÿÿÿæ%ÿÿÿÿ

+Hÿÿÿÿm

+/ÿÿÿÿÄ
)ÿÿÿÿ
+6ÿÿÿÿE
+>ÿÿÿÿ�
+0ÿÿÿÿÇ
+Fÿÿÿÿ
+ÿÿÿÿY
++ÿÿÿÿŽ
+ÿÿÿÿ¶
+"ÿÿÿÿâ@)ÿÿÿÿQ
+/ÿÿÿÿŠ
+ ÿÿÿÿ´-ÿÿÿÿû6ÿÿÿÿG6ÿÿÿÿ’
+7ÿÿÿÿÓ
+?ÿÿÿÿ
+ÿÿÿÿA4ÿÿÿÿŽ+ÿÿÿÿÆ-ÿÿÿÿ3ÿÿÿÿ40ÿÿÿÿ{ 0ÿÿÿÿû
+-ÿÿÿÿ2(ÿÿÿÿn
+-ÿÿÿÿ¥ÿÿÿÿ×6ÿÿÿÿ>ÿÿÿÿY#ÿÿÿÿ„ÿÿÿÿÀÿÿÿÿü
+2ÿÿÿÿ8
+.ÿÿÿÿpFÿÿÿÿ·
+2ÿÿÿÿó
+2ÿÿÿÿ/
+2ÿÿÿÿk
+2ÿÿÿÿ§
+2ÿÿÿÿã
+2ÿÿÿÿFÿÿÿÿf
+9ÿÿÿÿ©
+7ÿÿÿÿê
+9ÿÿÿÿ-FÿÿÿÿtFÿÿÿÿ»	2ÿÿÿÿö+ÿÿÿÿ(.ÿÿÿÿ]+ÿÿÿÿ�-ÿÿÿÿÄ0ÿÿÿÿ"ÿÿÿÿQ!ÿÿÿÿ„
+*ÿÿÿÿº
+Aÿÿÿÿ
+dÿÿÿÿs
+$ÿÿÿÿ¡1ÿÿÿÿÝ1ÿÿÿÿ
+ÿÿÿÿ,5ÿÿÿÿz&ÿÿÿÿ®=ÿÿÿÿþ&ÿÿÿÿR+ÿÿÿÿ‘ÿÿÿÿÅ]ÿÿÿÿ2!5ÿÿÿÿ‰KÿÿÿÿÕ<"ÿÿÿÿ3 $ÿÿÿÿl 7
+ÿÿÿÿ® ÿÿÿÿö ;ÿÿÿÿ^!?ÿÿÿÿ¼!ÿÿÿÿå!2ÿÿÿÿ"ÿÿÿÿP"ÿÿÿÿ‚"=ÿÿÿÿÑ"Iÿÿÿÿ4#(ÿÿÿÿr#IÿÿÿÿÕ#!ÿÿÿÿ$!ÿÿÿÿ;$ÿÿÿÿl$+ÿÿÿÿ™$=ÿÿÿÿ×$5ÿÿÿÿ
%@ÿÿÿÿR%7ÿÿÿÿŠ%-ÿÿÿÿ¸%ÿÿÿÿÕ%-ÿÿÿÿ&
+"	ÿÿÿÿe&#&ÿÿÿÿ¯&!ÿÿÿÿÖ&$ÿÿÿÿ'ÿÿÿÿ3'9ÿÿÿÿs''ÿÿÿÿ¡'.ÿÿÿÿÖ')ÿÿÿÿ(+ÿÿÿÿ8(ÿÿÿÿU(%ÿÿÿÿ�(6ÿÿÿÿ¸('ÿÿÿÿà(ÿÿÿÿ)&+ÿÿÿÿg)"ÿÿÿÿ‘) ÿÿÿÿÉ)!ÿÿÿÿ**ÿÿÿÿ@*>ÿÿÿÿ€*7,ÿÿÿÿã*6ÿÿÿÿ+Kÿÿÿÿg+;ÿÿÿÿ£+
+8ÿÿÿÿå+'ÿÿÿÿ ,Fÿÿÿÿg,ÿÿÿÿ‘,<ÿÿÿÿß,)ÿÿÿÿ-
+Uÿÿÿÿz-
+#5ÿÿÿÿÞ-2ÿÿÿÿ".
+5ÿÿÿÿa.
+Aÿÿÿÿ¬.
+;ÿÿÿÿñ.
+RÿÿÿÿM/
+"ÿÿÿÿ”/
+0ÿÿÿÿÎ/
+ ÿÿÿÿø/
+%ÿÿÿÿ'0G6ÿÿÿÿª0
+3ÿÿÿÿç0
+ÿÿÿÿ12ÿÿÿÿ`1<ÿÿÿÿ³1<ÿÿÿÿ2
+=ÿÿÿÿL2
+IÿÿÿÿŸ2
+ ÿÿÿÿÉ24ÿÿÿÿ32ÿÿÿÿV34ÿÿÿÿ—37ÿÿÿÿÏ3;ÿÿÿÿ"46ÿÿÿÿ¤4
++ÿÿÿÿÙ4/ÿÿÿÿ5
+5ÿÿÿÿZ5ÿÿÿÿŽ5:ÿÿÿÿÏ5Dÿÿÿÿ6*ÿÿÿÿL6$ÿÿÿÿ’6$ÿÿÿÿØ6
+>ÿÿÿÿ 7
+3ÿÿÿÿ]7Rÿÿÿÿ°7
+2ÿÿÿÿì7
+2ÿÿÿÿ(8
+2ÿÿÿÿd8
+2ÿÿÿÿ 8
+2ÿÿÿÿÜ8
+2ÿÿÿÿ9Rÿÿÿÿk9
+9ÿÿÿÿ®9
+7ÿÿÿÿï9
+9ÿÿÿÿ2:Rÿÿÿÿ…:RÿÿÿÿØ:	6ÿÿÿÿ;/ÿÿÿÿM;2ÿÿÿÿ†;/ÿÿÿÿ¼;2ÿÿÿÿö;+	ÿÿÿÿF<!ÿÿÿÿƒ<&ÿÿÿÿº<
+:ÿÿÿÿ=
+KÿÿÿÿU=
+tÿÿÿÿÓ=
+*ÿÿÿÿ>3ÿÿÿÿE>Aÿÿÿÿ‡>
+ÿÿÿÿ«>!=ÿÿÿÿ	?/ÿÿÿÿF?Dÿÿÿÿž?0!ÿÿÿÿÿ?*ÿÿÿÿ?@(ÿÿÿÿƒ@fÿÿÿÿú@!;ÿÿÿÿWASÿÿÿÿ«AB+ÿÿÿÿB-ÿÿÿÿ\BGÿÿÿÿ¯B)ÿÿÿÿC&Gÿÿÿÿ€CDÿÿÿÿãCÿÿÿÿ
+D9
+ÿÿÿÿNDÿÿÿÿ�DÿÿÿÿµDNÿÿÿÿEKÿÿÿÿ}E(ÿÿÿÿ¼EIÿÿÿÿ!F,ÿÿÿÿdF+ÿÿÿÿ F#ÿÿÿÿÞF-ÿÿÿÿ
GFÿÿÿÿTG=ÿÿÿÿ’GIÿÿÿÿàG:ÿÿÿÿH0ÿÿÿÿLHÿÿÿÿjH,ÿÿÿÿ¨H
+/ÿÿÿÿI('ÿÿÿÿ	    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 +172,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 +320,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 +336,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
@@ -390,8 +377,16 @@ 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: %pA has ordered sections with incompatible alignments
+%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
@@ -440,23 +435,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 +459,9 @@ 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 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 +471,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
@@ -491,17 +491,17 @@ ppcboot header:
 %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 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 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: 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: 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: 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: 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: 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: 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: 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 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:%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 section symbol with an addend%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: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'-march=%s: %s ISA extension must separate with _-march=%s: ISA string cannot contain uppercase letters-march=%s: ISA string must begin with rv32 or rv64-march=%s: duplicate %s ISA extension `%s'-march=%s: expect number after `%dp'-march=%s: first ISA extension must be `e', `i' or `g'-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: unexpected ISA string at end: %s-march=%s: unknown %s ISA extension `%s'-march=%s: unknown standard ISA extension `%c'-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 %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)
@@ -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,35 @@ 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 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 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 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
+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
+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
 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 +746,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 privilege 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: privilege 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.35.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-01-09 10:55+0000
+PO-Revision-Date: 2021-01-10 06:10+0000
+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: Geany / PoHelper 1.37
 	    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 +815,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 +963,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 +979,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
@@ -1026,8 +1020,16 @@ 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: %pA tem secÃ§Ãµes ordenadas com alinhamentos incompatÃ­veis
+%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
@@ -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,9 @@ 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 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 +1114,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
@@ -1127,22 +1134,22 @@ cabeÃ§alho ppcboot:
 %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 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: 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: 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: 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 %s contra sÃ­mbolo "%s" indefinido%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: 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: 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 +1166,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 %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: 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: 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:%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 %pAsÃ­mbolo de secÃ§Ã£o %pcrel_lo com uma adenda%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 +1198,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: extensÃ£o ISA %s "%s"nÃ£o estÃ¡ em ordem alfabÃ©tica: Tem de estar antes de "%s".-march=%s: extensÃ£o ISA %s tem de separar com _-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 ISA %s duplicada: "%s"-march=%s: esperado nÃºmero apÃ³s "%dp"-march=%s: primeira extensÃ£o ISA tem de ser "e", "i" ou "g"-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: cadeia ISA inesperada no final: %s-march=%s: extensÃ£o ISA %s desconhecida: "%s"-march=%s: extensÃ£o padrÃ£o ISA "%c" 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 +1212,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 %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 +1228,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 +1272,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)
@@ -1313,14 +1332,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
+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,41 +1357,40 @@ 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 granderelocalizaÃ§Ã£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 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 %pARelocalizaÃ§Ã£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
+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
+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 %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
 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
@@ -1381,26 +1399,30 @@ ou compile usando a opÃ§Ã£o gcc "-mno-ba
 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 a versÃ£o privilege spec %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: privilege spec versÃ£o 1.9.1 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: error: attribute section length too small: %%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%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: 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 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 compilar%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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/pt.po ./bfd/po/pt.po
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/pt.po	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/pt.po	2021-12-16 01:57:38.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.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd-2.31.90\n"
+"Project-Id-Version: bfd-2.35.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-01-09 10:55+0000\n"
+"PO-Revision-Date: 2021-01-10 06:10+0000\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: Geany / PoHelper 1.37\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:1236 pdp11.c:1510
 #, 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:1482
 #, 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:8040
 msgid "*unknown*"
 msgstr "*desconhecido*"
 
-#: aoutx.h:1721
+#: aoutx.h:1716 pdp11.c:1578
 #, 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:2058
 #, 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:4087 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:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2791
 #: 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: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:6241 elf32-ft32.c:306 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:1038
+#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 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:438
+#: 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:290 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:4071 elf64-alpha.c:4219 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:1018
+#: elf64-ppc.c:1370 elf64-ppc.c:1379 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:281 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:969
+#: 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:3828
 #, 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:5435 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:4609 linker.c:1428
 #, 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"
 
-#: bfd.c:459
+#: bfd.c:691
 msgid "malformed archive"
 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"
 
-#: bfd.c:462
+#: bfd.c:694
 msgid "file format is ambiguous"
 msgstr "Formato de ficheiro ambÃ­guo"
 
-#: bfd.c:463
+#: bfd.c:695
 msgid "section has no contents"
 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"
 
-#: 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"
 
-#: bfd.c:466
+#: bfd.c:698
 msgid "bad value"
 msgstr "Mau valor"
 
-#: bfd.c:467
+#: bfd.c:699
 msgid "file truncated"
 msgstr "Ficheiro truncado"
 
-#: bfd.c:468
+#: bfd.c:700
 msgid "file too big"
 msgstr "Ficheiro muito grande"
 
-#: bfd.c:469
+#: bfd.c:701
+msgid "sorry, cannot handle this file"
+msgstr "desculpe, impossÃ­vel gerir este ficheiro"
+
+#: bfd.c:702
 #, c-format
 msgid "error reading %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:1662
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "BFD falha de asserÃ§Ã£o %s %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:1675
 #, 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:1680
 #, 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:1682
 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"
@@ -256,118 +270,113 @@ msgstr ""
 "%pB: impossÃ­vel gerir binÃ¡rios Alpha comprimidos.\n"
 "   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:850 coff-alpha.c:887 coff-alpha.c:1954 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:1441
 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:1499 coff-alpha.c:1505 elf.c:9442 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7597 elf32-ppc.c:8748 elf64-ppc.c:16199
 #, 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:785
+#, 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:2877
 #, 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:3640 coff64-rs6000.c:2152
 #, 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:521
 #, 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:552
 #, 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:568
 #, 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:597
 #, 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:727
 #, 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:738
 #, 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:1138 elf32-sh.c:1505
 #, 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:2948
 #, 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:5050
 #, 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
-#, c-format
-msgid "unsupported relocation type %#x"
-msgstr "tipo de relocalizaÃ§Ã£o %#x nÃ£o suportado"
-
-#: coff-tic80.c:672 cofflink.c:3127
-#, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: mau endereÃ§o reloc %#<PRIx64> na secÃ§Ã£o \"%pA\""
-
-#: coffcode.h:954
+#: coffcode.h:953
 #, 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:988
 #, 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:1000
 #, 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:1010
 #, 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 +384,321 @@ 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:1241
 #, 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:1310
 #, 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:1926 coffcode.h:1991
 #, 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:2352
 #, 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:2630
 #, 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:2930
 #, 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:3090
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: demasiadas secÃ§Ãµes (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3508
 #, 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:3608
 #, 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:4284
 #, 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:4304
 #, 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:4338 coffcode.h:4352
 #, 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:4366
 #, 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:4379
 #, 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:4800
 #, 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:4940
 #, 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:5090
 #, 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:1238
 #, 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:1249
 #, 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:1704
 #, 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:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1923
+#: xcofflink.c:4512
 msgid "<corrupt>"
 msgstr "<corrupto>"
 
-#: coffgen.c:2114
+#: coffgen.c:2085
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<informaÃ§Ã£o corrupta> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2676 elflink.c:14969 linker.c:2967
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3017 elflink.c:13959
 #, 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:3094 elflink.c:14176
 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:5200
 #, 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:11299
 #, 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:2717
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: transporte de reloc: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2725
 #, 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:3116
 #, 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:799
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: transporte de reloc: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:271
+#, 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:282
 #, 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:553
 #, 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:564
+#, 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:599
 #, 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:1186
 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:1365
 #, 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:1678
 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:2026
 msgid "DWARF error: zero format count"
 msgstr "Erro Dwarf: total de formato zero."
 
-#: dwarf2.c:1936
+#: dwarf2.c:2036
 #, 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:2077
 #, 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:2150
 #, 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:2180
 #, 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:2193
 #, 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:2203
 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:2221
 #, 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:2248
 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:2267
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "Erro Dwarf: sem espaÃ§o ao ler opcodes"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2458
 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:2956
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "Erro Dwarf: detectada recursividade em instÃ¢ncia abstracta."
+
+#: dwarf2.c:2990 dwarf2.c:3084
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "Erro Dwarf: instÃ¢ncia DIE ref abstracta invÃ¡lida."
 
-#: dwarf2.c:2889
+#: dwarf2.c:3006
 #, 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:3062
+#, 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:3101 dwarf2.c:3384 dwarf2.c:3771
 #, 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:3534
+#, c-format
+msgid "DWARF error: could not find variable specification at offset %lx"
+msgstr "Erro Dwarf: impossÃ­vel encontrar especificaÃ§Ã£o de variÃ¡vel no desvio %lx"
 
-#: dwarf2.c:3376
+#: dwarf2.c:3690
 #, 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:3734
 #, 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:3838
 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:941
 #, 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:1237
 #, c-format
 msgid "unknown basic type %d"
 msgstr "Tipo bÃ¡sico %d desconhecido"
 
-#: ecoff.c:1525
+#: ecoff.c:1493
 #, c-format
 msgid ""
 "\n"
@@ -688,7 +707,7 @@ msgstr ""
 "\n"
 "      SÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1500 ecoff.c:1503
 #, c-format
 msgid ""
 "\n"
@@ -697,7 +716,7 @@ msgstr ""
 "\n"
 "      Primeiro sÃ­mbolo: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1518
 #, c-format
 msgid ""
 "\n"
@@ -706,7 +725,7 @@ msgstr ""
 "\n"
 "      SÃ­mbolo End+1: %-7ld   Tipo:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1526
 #, c-format
 msgid ""
 "\n"
@@ -715,7 +734,7 @@ msgstr ""
 "\n"
 "      SÃ­mbolo local: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1534
 #, c-format
 msgid ""
 "\n"
@@ -724,7 +743,7 @@ msgstr ""
 "\n"
 "      struct; sÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1539
 #, c-format
 msgid ""
 "\n"
@@ -733,7 +752,7 @@ msgstr ""
 "\n"
 "      union; sÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1544
 #, c-format
 msgid ""
 "\n"
@@ -742,7 +761,7 @@ msgstr ""
 "\n"
 "      enum; sÃ­mbolo End+1: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1552
 #, c-format
 msgid ""
 "\n"
@@ -751,22 +770,22 @@ msgstr ""
 "\n"
 "      Tipo: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:449
 #, 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:490
 #, c-format
 msgid "%pB: error: attribute section length too small: %<PRId64>"
 msgstr "%pB: erro: tamanho da secÃ§Ã£o de atributo muito pequeno: %<PRId64>"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:618
 #, 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:628
 #, 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 +809,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:3130
+#: 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:494
+#: 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:1272 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:1815 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:3134
+#: 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:498 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
+#: elf32-m68hc1x.c:1276 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:1819 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:10554
+#: 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:1280
+#: 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:3142
+#: 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:506
+#: 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:1284 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:1827
+#: 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:13396 elf32-i386.c:3403 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4062
+#: 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:2489 elf32-frv.c:5622 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8271 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"
 
@@ -956,7 +971,7 @@ msgstr "Removida propriedade %W para uni
 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:316 elf-properties.c:394
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "Removida propriedade %W para unir %pB e %pB\n"
 
@@ -964,115 +979,105 @@ msgstr "Removida propriedade %W para uni
 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:337
 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:346
 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:388
 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:550 elf-properties.c:552
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:551
 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:8096
 #, 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:1440
 #, 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:1456
 #, 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:1483
 #, 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:1655
 #, c-format
 msgid ""
 "\n"
@@ -1081,7 +1086,7 @@ msgstr ""
 "\n"
 "CabeÃ§alho do programa:\n"
 
-#: elf.c:1665
+#: elf.c:1697
 #, c-format
 msgid ""
 "\n"
@@ -1090,7 +1095,7 @@ msgstr ""
 "\n"
 "SecÃ§Ã£o dinÃ¢mica:\n"
 
-#: elf.c:1806
+#: elf.c:1838
 #, c-format
 msgid ""
 "\n"
@@ -1099,7 +1104,7 @@ msgstr ""
 "\n"
 "DefiniÃ§Ãµes da versÃ£o:\n"
 
-#: elf.c:1831
+#: elf.c:1863
 #, c-format
 msgid ""
 "\n"
@@ -1108,1002 +1113,1110 @@ msgstr ""
 "\n"
 "ReferÃªncias da versÃ£o:\n"
 
-#: elf.c:1836
+#: elf.c:1868
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  requerido de %s:\n"
 
-#: elf.c:2037
+#: elf.c:2058
 #, 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:2165
 #, 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:2249
 #, 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:2362
 #, 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:2453
+#, 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:2537 elf.c:2552 elf.c:2563 elf.c:2576
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: tipo desconhecido [%#x], secÃ§Ã£o \"%s\""
 
-#: elf.c:3248
+#: elf.c:3272
 #, 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:3305
 #, 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:3789
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: demasiadas secÃ§Ãµes: %u"
 
-#: elf.c:3839
+#: elf.c:3875
 #, 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:3893
 #, 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:4455
 #, 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:5049
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: secÃ§Ãµes TLS nÃ£o adjacentes:"
 
-#: elf.c:5020
+#: elf.c:5056
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5060
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\tnÃ£o-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:5656
 #, 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:5682
 #, 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:5799
 #, 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:5936
+#, 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:5976
 #, 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:6113
 #, 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:6274
 #, 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:6778
 #, 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:7130
 #, 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:7758
 #, 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:8271
+#, 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:8301
 #, 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:8714
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: entrada .gnu.version_r invÃ¡lida"
 
-#: elf.c:8548
+#: elf.c:8847
 #, 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:9304
+#, 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:9313
+#, 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:9324
+#, 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:10182
+#, 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:10260
+#, 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:12488
+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:12491
+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:12494
+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:12497
+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:12691 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:12766
+#, 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:12778
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ã­ndice da secÃ§Ã£o de informaÃ§Ã£o invÃ¡lido"
+
+#: elf.c:12792
+#, 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:12867
+#, 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:12879
+#, 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:12890
+#, 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:12902
+#, 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:12925
+#, 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:12944
+#, 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:12969
+#, 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:12986
+#, 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:12999
+#, 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:15065 elf32-frv.c:6613 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3206
+#: elf32-visium.c:844 elf64-ppc.c:5336 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:1391
+#: elf32-ppc.c:3869 elf64-sparc.c:722 elfxx-mips.c:15492
 #, 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:15509 elf32-metag.c:2251
+#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:614
 #, 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:4318 elf32-arm.c:4352 elf32-arm.c:4371 elf32-arm.c:4423
 #, 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:4383 elf32-arm.c:4437 elf32-arm.c:9127 elf32-arm.c:9217
 #, 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:4563
+#, 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:4732
 #, 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:4807 elf32-arm.c:6954 elf32-csky.c:3368 elf32-hppa.c:582
+#: elf32-m68hc1x.c:165 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3817
+#: elf64-ppc.c:13603 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:5028 elf32-csky.c:3710 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11430
+#: 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:5998
 #, 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:6007
 #, 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:6046
 #, 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:6052
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: sÃ­mbolo standard \"%s\" ausente."
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6064
 #, 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:6076
 #, 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:6083
 #, 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:6212
 #, 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:6261
 #, 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:6283
 #, 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:6307
 #, 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:6322
 #, 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:6331
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: tamanho incorrecto do sÃ­mbolo \"%s\"."
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6350
 #, 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:6370
 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:6378
 #, 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:7087 elf32-arm.c:7122
 #, 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:7833
 #, 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:8060
 #, 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:8087
 #, 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:8623 elf32-arm.c:8643 elf32-arm.c:8710 elf32-arm.c:8729
 #, 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:8936
 #, 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:9034
 #, 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:9836
 #, 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:10146 elf32-arm.c:10188
 #, 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:10538
 msgid "shared object"
 msgstr "objecto partilhado"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10541
 msgid "PIE executable"
 msgstr "ExecutÃ¡vel PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10544
 #, 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:10683 elf32-arm.c:11100
 #, 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:11999 elf32-arm.c:12025
 #, 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:12071 elf32-csky.c:4940 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:12285
 #, 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:12326 elf32-arm.c:12418 elf32-arm.c:12506 elf32-arm.c:12596
 #, 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:13228 elf32-sh.c:3567
 #, 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:13341 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:13343 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:13426 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:13430 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:13438 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:13916
 #, 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:13920
 #, 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:13965
 #, 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:14052
 #, 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:14060
 #, 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:14360
 #, 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:14398 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:14495
 #, 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:14524
 #, 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:14683
 #, 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:14709
 #, 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:14848
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "Aviso: %pB: configuraÃ§Ã£o de plataforma em conflito"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14857
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "erro: %pB: uso de R9 em conflito"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14869
 #, 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:14882
 #, 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:14913
 #, 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:14925
 #, 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:14942
 #, 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:14978
 #, 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:15074
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [interworking activo]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15082
 #, c-format
 msgid " [VFP float format]"
 msgstr " [formato flutuante VFP]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15084
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [formato flutuante Maverick]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15086
 #, c-format
 msgid " [FPA float format]"
 msgstr " [formato flutuante FPA]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15089
 #, 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:15092 elf32-arm.c:15178
 #, c-format
 msgid " [position independent]"
 msgstr " [posiÃ§Ã£o independente]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15095
 #, c-format
 msgid " [new ABI]"
 msgstr " [novo ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15098
 #, c-format
 msgid " [old ABI]"
 msgstr " [ABI antigo]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15101
 #, c-format
 msgid " [software FP]"
 msgstr " [software FP]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15110
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Version1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15113 elf32-arm.c:15124
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [tabela de sÃ­mbolo ordenada]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15115 elf32-arm.c:15126
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [tabela de sÃ­mbolo desordenada]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15121
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Version2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15129
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [sÃ­mbolos dinÃ¢micos usam Ã­ndice de segmento]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15132
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [sÃ­mbolos de mapeamento precedem outros]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15139
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Version3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15143
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Version4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15147
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Version5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15150
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [soft-float ABI]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15153
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [hard-float ABI]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15159
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15162
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15168
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <versÃ£o EABI nÃ£o reconhecida>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15175
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [executÃ¡vel relocalizÃ¡vel]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15181
 #, 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:15186 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:15303 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:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfnn-aarch64.c:7608 elfnn-riscv.c:656
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: mau Ã­ndice de sÃ­mbolo: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15692
 #, 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:17323 elflink.c:13152 elflink.c:13199
 #, c-format
 msgid "could not find section %s"
 msgstr "impossÃ­vel encontrar a secÃ§Ã£o %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18547
 #, 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:18574
 #, 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:19401 elf32-arm.c:19423
 #, 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:19474
 #, 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:19513
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: erro: impossÃ­vel criar folha STM32L4XX."
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20597
 #, 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:20673
 #, 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:20688
 #, 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:20698
 #, 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:20702
 #, 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:20712 elf32-arm.c:20716 elf32-arm.c:20726
 #, 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:20730
 #, 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:20749
 #, 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:20753
 #, 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:20767
 #, 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:20773
 #, 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:3138 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 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:1823
+#: 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:3327 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:3443 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4112
 #, 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:2759
 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:2799 elf32-bfin.c:2920
 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:2829 elf32-bfin.c:2957 elf32-lm32.c:1007 elf32-sh.c:4385
 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:2879
 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:3042
 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:3043
 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:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1416 elf32-m68k.c:1265
+#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:537 elf32-xgate.c:494
+#: elfxx-mips.c:16178
+#, c-format
+msgid "private flags = %lx:"
+msgstr "bandeiras provadas = %lx:"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6586
 #, 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:4783 elf32-frv.c:6590
 #, 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:4920
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** verificar esta relocalizaÃ§Ã£o %s"
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5036
 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:5330 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 +2225,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:2799
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "aviso: eflag \"%#lx\" arch nÃ£o reconhecida"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2822
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "aviso: nome arch \"%#x\" nÃ£o reconhecido"
+
+#: elf32-csky.c:2896 elf32-csky.c:3054
 #, 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:2909
+#, 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:2938
+#, 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:2955
+#, 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:2973
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "Erro: %pB e %pB tÃªm FPU ABI diferente"
+
+#: elf32-csky.c:3068
 #, 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:4312 elf32-i386.c:350
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o nÃ£o suportado: %#x"
@@ -2201,80 +2340,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 +2427,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:6497
 #, 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:6551 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:6564
 #, 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 +2447,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:11983
+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:3405
 #, 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:2582
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: fictÃ­cio de exportaÃ§Ã£o duplicado %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3238
 #, 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:4034
 #, 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:4052
 #, 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:4111
 #, 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:4415
 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:1382
 #, 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:5490 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-riscv.c:565
 #, 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:2252
 #, 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:3654 elf32-i386.c:3795 elf64-x86-64.c:2778
+#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 elfnn-riscv.c:2119
+#: elfnn-riscv.c:2919 elfnn-riscv.c:2993
 #, 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:2563
 #, 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:2598 elf64-x86-64.c:2977
 msgid "hidden symbol"
 msgstr "sÃ­mbolo oculto"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2601 elf64-x86-64.c:2980
 msgid "internal symbol"
 msgstr "sÃ­mbolo interno"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2604 elf64-x86-64.c:2983
 msgid "protected symbol"
 msgstr "sÃ­mbolo protegido"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2607 elf64-x86-64.c:2986
 msgid "symbol"
 msgstr "sÃ­mbolo"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2613
 #, 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:2626
 #, 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:1136
 #, 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:1167
 #, 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:1183
 #, 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:1198
 #, 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:1234
 #, 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:1358
 #, 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:1365
 #, 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:1374
 #, 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:1419 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:1421 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:1424 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:1426 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-bit duplo, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1429
 #, c-format
 msgid "cpu=HC11]"
 msgstr "cpu=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1431
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "cpu=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1433
 #, c-format
 msgid "cpu=HC12]"
 msgstr "cpu=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1436
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [memÃ³ria=bank-model]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1438
 #, c-format
 msgid " [memory=flat]"
 msgstr " [memÃ³ria=flat]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1441
 #, 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:3585 elf32-ppc.c:3593
+#, 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:7664 vms-alpha.c:7680
 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 +2740,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:12840
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP aninhado em %pA."
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12859
 #, 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:13141 reloc.c:8497
 #, 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:1208
 #, 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:1315
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: tipo de relocalizaÃ§Ã£o %d desconhecido"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1369
 #, 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:1474
 #, 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:1491
 #, 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:1508 elf64-alpha.c:4425 elf64-alpha.c:4569
 #, 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:1522
 #, 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:1606
 #, 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:1785
 #, 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:2118
 #, 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:3179
 #, 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:990 elf64-ppc.c:1720
 #, 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:1630
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "secÃ§Ã£o %s corrupta em %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1649
 #, 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:1691
 #, 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:1740
 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:1759
 msgid "failed to compute new APUinfo section"
 msgstr "falha ao computar nova secÃ§Ã£o APUinfo."
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1762
 msgid "failed to install new APUinfo section"
 msgstr "falha ao instalar nova secÃ§Ã£o APUinfo."
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2861
 #, 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:3601 elf32-ppc.c:3609
 #, 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:3631 elf32-ppc.c:3639
 #, 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:3647 elf32-ppc.c:3655
 #, 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:3722 elf32-ppc.c:3731
 #, 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:3760 elf32-ppc.c:3769
 #, 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:3833
 #, 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:3841
 #, 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:3910
 #, 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:3929
 #, 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:4032
 #, c-format
 msgid "bss-plt forced due to %pB"
 msgstr "bss-plt forÃ§ado devido a %pB"
 
-#: elf32-ppc.c:4030
+#: elf32-ppc.c:4034
 msgid "bss-plt forced by profiling"
 msgstr "bss-plt forÃ§ado pelo perfil"
 
+#: elf32-ppc.c:4611 elf64-ppc.c:8292
+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:4641 elf64-ppc.c:8357
 #, 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:5547 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: relocalizaÃ§Ã£o dinÃ¢mica em secÃ§Ã£o \"%pA\" sÃ³ de leitura\n"
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:7390
 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:7427
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: transporte em ramo fixup\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7467 elf32-ppc.c:7503
 #, 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:7567
 #, 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:7882
 #, 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 +3147,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:7914
 #, 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:8092
 #, 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:8426 elf32-ppc.c:8457 elf32-ppc.c:8548 elf32-ppc.c:8644
 #, 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:8799 elf32-ppc.c:8817
+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:8898
 #, 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:8927
 #, 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:9008
 #, 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:9898
 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:9902 elf64-ppc.c:17626
 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:9947
 #, 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 +3211,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 +3240,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 +3259,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]"
@@ -3188,152 +3336,148 @@ msgstr "%pB: aviso: a ligar ficheiros PI
 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:3754
 #, 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:3784 elf32-sh.c:3800
 #, 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:3816
 #, 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:3832
 #, 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:3962 elf32-sh.c:4357
 #, 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:4460
 #, 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:4579
 #, 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:4597
 #, 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:4605
 #, 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:4612
 #, 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:4619
 #, 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:4626
 #, 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:4633
 #, 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:4668
 #, 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:4686
 #, 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:4695
 #, 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:4702
 #, 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:4817
 #, 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:4885
 #, 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:5013
 #, 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:5020
 #, 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:5479 elf32-sh.c:5561
 #, 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:5485 elf32-sh.c:5566
 #, 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:5516
 #, 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:5723 elf64-alpha.c:4661
 #, 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:5838
 #, 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:5850
 #, 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:5891
 #, 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:5904
 #, 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 +3492,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:14727
 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,280 +3632,279 @@ 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:1393
+#: elfnn-aarch64.c:9703 elfnn-riscv.c:3216
 #, 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>"
@@ -3781,22 +3929,22 @@ msgstr " [g-float]"
 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:1389
 #, 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:1515
 #, 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:1522
 #, 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 +3959,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:2347
 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:4730 elf32-xtensa.c:4738
 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:6566 elf32-xtensa.c:6645 elf32-xtensa.c:8071
 #, 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:7812
 #, 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:9670
 msgid "invalid relocation address"
 msgstr "EndereÃ§o de relocalizaÃ§Ã£o invÃ¡lido"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9761
 msgid "overflow after relaxation"
 msgstr "transporte apÃ³s relaxe"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10907
 #, 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:2001 elf64-alpha.c:2696 elflink.c:15230
+#, 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:2453
 #, 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:2991 elf64-alpha.c:3186
 #, 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:4385 elf64-alpha.c:4398
 #, 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:4454
 #, 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:4479 mach-o.c:616 elfnn-riscv.c:616
 msgid "<unknown>"
 msgstr "<desconhecido>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4485
 #, 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:4543
 #, 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:4578
 #, 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:4644
 #, 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:4669
 #, 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:2033
 #, 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:3237
 #, 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:2295
 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:3678
 #, 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:3688
 #, 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:3962
 #, 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:4030
 #, 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:4093
 #, 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:4231
 #, 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:4234
 #, 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:4237
 #, 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:4434
 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:4472
 #, 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:4489
 #, 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:4750
 #, 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:4759
 #, 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:4768
 #, 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:4777
 #, 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:4787
 #, 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:5141
 #, 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:5148
 #, 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:5165
 #, 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 +4266,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:1346
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "aviso: deve ser usado %s, em vez de %s"
+
+#: elf64-ppc.c:4143
 #, 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:4323
 #, 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:4895
 #, 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:5305
 #, 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:5313
 #, 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:5340
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6624
 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:6891
 #, 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:7139
 #, 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:7228
 #, 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:7238
 #, 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:7260
 #, 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:7754
+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:7762
 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:8086
 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:8521 elf64-ppc.c:9234
 #, 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:9191
 #, 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:9412
+#, 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:10239
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "aviso: a descartar secÃ§Ã£o dinÃ¢mica %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11390
 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:11438 elf64-ppc.c:11991
+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:11499
 #, 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:11526
 #, 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:11590 elf64-ppc.c:11859 elf64-ppc.c:14168
 #, 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:12063
 #, 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:13079
 #, 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:14347
+msgid "__tls_get_addr call offset overflow"
+msgstr "transporte de desvio de chamada __tls_get_addr"
+
+#: elf64-ppc.c:14686 elf64-ppc.c:14705
 #, 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:14737
 #, 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:14744
 #, 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 +4456,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 +4470,1027 @@ msgstr ""
 "  plt call both  %lu\n"
 "  global entry   %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15144
 #, 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:15146
 #, 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:15902
 #, 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:15908
 #, 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:16804
 #, 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:16889
+#, 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:16944
 #, 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:17192
 #, 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:17215
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: %s insolÃºvel contra \"%T\"\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:17359
 #, 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:1417
 msgid "hidden symbol "
 msgstr "sÃ­mbolo oculto "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1420
 msgid "internal symbol "
 msgstr "sÃ­mbolo interno "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1423 elf64-x86-64.c:1427
 msgid "protected symbol "
 msgstr "sÃ­mbolo protegido "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1429
 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:1435
 msgid "undefined "
 msgstr "indefinido"
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1445
 msgid "a shared object"
 msgstr "um objecto partilhado"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1447
+msgid "; recompile with -fPIC"
+msgstr "; recompile com -fPIC"
+
+#: elf64-x86-64.c:1452
 msgid "a PIE object"
 msgstr "um objecto PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1454
 msgid "a PDE object"
 msgstr "um objecto PDE"
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1456
+msgid "; recompile with -fPIE"
+msgstr "; recompile com -fPIE"
+
+#: elf64-x86-64.c:1460
 #, 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:1968
 #, 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:2124
 #, 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:2086
 #, 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:2992
 #, 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:3006
 #, 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:3283
 #, 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
+#: elf64-x86-64.c:3417 elflink.c:13609
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: entrada corrupta: %pB\n"
+
+#: elf64-x86-64.c:4101
 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:4043
+#: elf64-x86-64.c:4259
 #, 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:4322
 #, 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:4375
 #, 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
 #, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: desvio de versÃ£o invÃ¡lido %lx (mÃ¡x %lx)"
+
+#: elflink.c:4666
+#, 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:4814
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: versÃ£o de informaÃ§Ã£o insuficiente"
+
+#: elflink.c:4852
+#, 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:4889
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: versÃ£o necessÃ¡ria %d invÃ¡lida"
 
-#: elflink.c:5054
+#: elflink.c:5300
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: referÃªncia indefinida a sÃ­mbolo \"%s\""
 
-#: elflink.c:6130
+#: elflink.c:6366
 #, 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:6370
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s nÃ£o absoluto"
 
-#: elflink.c:6331
+#: elflink.c:6567
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: versÃ£o indefinida: %s"
 
-#: elflink.c:6902
+#: elflink.c:7139
 #, 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:8697
 #, 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:8860 elflink.c:8868
+msgid "division by zero"
+msgstr "divisÃ£o por zero"
+
+#: elflink.c:8882
 #, 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:9220
 #, 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:9223
 #, 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:9468 elflink.c:9486 elflink.c:9525 elflink.c:9543
 #, 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:9502 elflink.c:9559
 #, 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:9611
 msgid "not enough memory to sort relocations"
 msgstr "Sem memÃ³ria suficiente para ordenar relocalizaÃ§Ãµes"
 
-#: elflink.c:9502
+#: elflink.c:9955
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: demasiadas secÃ§Ãµes: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10231
 #, 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:10234
 #, 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:10237
 #, 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:10323
 #, 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:10477
 #, 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:10480
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: sÃ­mbolo \"%s\" nÃ£o estÃ¡ definido"
 
-#: elflink.c:10034
+#: elflink.c:10483
 #, 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:10515
 #, 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:10914
+#, 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:11168
 #, 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:11213
 #, 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
+#: elflink.c:11971
 #, 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
+#: elflink.c:11977
 #, 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:12047
+msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+msgstr "%F%P: %pA tem secÃ§Ãµes ordenadas com alinhamentos incompatÃ­veis\n"
+
+#: elflink.c:12121
 #, 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:12771
 #, 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:13031
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: falha ao gerar biblioteca de importaÃ§Ã£o"
 
-#: elflink.c:12561
+#: elflink.c:13157
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "aviso: secÃ§Ã£o %s tem tamanho zero"
 
-#: elflink.c:12609
+#: elflink.c:13205
 #, 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:13298
 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:13301
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr "%P: aviso: a criar DT_TEXTREL num objecto partilhado.\n"
+
+#: elflink.c:13304
+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:13437
 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:13842
+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:14305
 #, 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:14346
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: secÃ§Ã£o \"%pA\":entrada VTENTRY corrompida"
+
+#: elflink.c:14489
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "INPUT_SECTION_FLAG %s nÃ£o reconhecida\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15236
+#, 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:15325
+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:9901 elfnn-aarch64.c:9908
+#, 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:2629
+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:2634
+#, 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:7545
 #, 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:8352 elfxx-mips.c:8478
 #, 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:8610
 #, 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:8709
 #, 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:8849
 #, 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:9152
 #, 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:9278
+#, 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:9281
+#, 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:9501
 #, 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:10435
 #, 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:10575
 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:10594
 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:10597
 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:10598
 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:10601
 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:10603
 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:10605
 msgid "PC-relative load from unaligned address"
 msgstr "Carga PC-relative de endereÃ§o nÃ£o alinhado"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:10905
 #, 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:11020 elfxx-mips.c:11607
 #, 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:11579
 #, 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:14535
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: arquitectura desconhecida %s"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15069
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: nome de secÃ§Ã£o ilegal \"%pA\""
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15346
 #, 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:15363
 #, 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:15395 elfxx-mips.c:15461 elfxx-mips.c:15476
 #, 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:15419
 #, 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:15444
 #, 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:15578
 #, 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:15584
 #, 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:15590
 #, 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:15604
 #, 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:15623
 #, 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:15635
 #, 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:15644
 #, 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:15706
 #, 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:15720
 #, 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:15773
 #, 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:15778
 #, 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:15782
 #, 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:15789
 #, 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:15793
 #, 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:15984
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 callee-saved)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16046 elfxx-mips.c:16057
 msgid "None"
 msgstr "Nenhum"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16048 elfxx-mips.c:16117
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16128
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Flutuante rÃ­gido ou suave\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16131
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Flutuante rÃ­gido (precisÃ£o dupla)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16134
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Flutuante rÃ­gido (precisÃ£o simples)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16137
 #, c-format
 msgid "Soft float\n"
 msgstr "Flutuante suave\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16140
 #, 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:16143
 #, 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:16146
 #, 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:16149
 #, 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:16181
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16183
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16185
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16187
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16189
 #, c-format
 msgid " [abi unknown]"
 msgstr " [abi desconhecida]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16191
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16193
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16195
 #, c-format
 msgid " [no abi set]"
 msgstr " [sem abi definida]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16220
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [ISA desconhecida]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16240
 #, 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:1201
+#, 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:1205
+#, 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:1279
+#, c-format
+msgid "-march=%s: expect number after `%dp'"
+msgstr "-march=%s: esperado nÃºmero apÃ³s \"%dp\""
+
+#: elfxx-riscv.c:1367
+#, 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:1397
+#, 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:1422
+#, c-format
+msgid "-march=%s: unknown standard ISA extension `%c'"
+msgstr "-march=%s: extensÃ£o padrÃ£o ISA \"%c\" desconhecida"
+
+#: elfxx-riscv.c:1426
+#, 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:1544
+#, c-format
+msgid "-march=%s: unknown %s ISA extension `%s'"
+msgstr "-march=%s: extensÃ£o ISA %s desconhecida: \"%s\""
+
+#: elfxx-riscv.c:1555
+#, c-format
+msgid "-march=%s: duplicate %s ISA extension `%s'"
+msgstr "-march=%s: extensÃ£o ISA %s duplicada: \"%s\""
+
+#: elfxx-riscv.c:1565
+#, c-format
+msgid "-march=%s: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'"
+msgstr "-march=%s: extensÃ£o ISA %s \"%s\"nÃ£o estÃ¡ em ordem alfabÃ©tica: Tem de estar antes de \"%s\"."
+
+#: elfxx-riscv.c:1581
+#, c-format
+msgid "-march=%s: %s ISA extension must separate with _"
+msgstr "-march=%s: extensÃ£o ISA %s tem de separar com _"
+
+#: elfxx-riscv.c:1799
+#, 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:1825
+#, 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:1851
+#, c-format
+msgid "-march=%s: unexpected ISA string at end: %s"
+msgstr "-march=%s: cadeia ISA inesperada no final: %s"
+
+#: elfxx-riscv.c:1865
+#, 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:1873
+#, 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:976
 #, 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:1058
 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:2384
+#: elfxx-x86.c:2313
 #, 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:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: falha ao alinhar secÃ§Ã£o\n"
+#: elfxx-x86.c:2648
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: aviso: %s em falta\n"
+
+#: elfxx-x86.c:2649
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: erro: %s em falta\n"
+
+#: elfxx-x86.c:2712
+msgid "IBT and SHSTK properties"
+msgstr "propriedades IBT e SHSTK"
+
+#: elfxx-x86.c:2714
+msgid "IBT property"
+msgstr "propriedade IBT"
+
+#: elfxx-x86.c:2716
+msgid "SHSTK property"
+msgstr "propriedade SHSTK"
+
+#: elfxx-x86.c:2721
+msgid "LAM_U48 property"
+msgstr "propriedade LAM_U48"
+
+#: elfxx-x86.c:2726
+msgid "LAM_U57 property"
+msgstr "propriedade LAM_U57"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:2870
 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:2879
 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:2897
 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:2934
 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:2953
 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:2967
 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:2987
 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:3000
 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:3014
 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:3056
+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 +5501,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:884
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: impossÃ­vel obter secÃ§Ã£o %pA descomprimida"
 
-#: libbfd.c:1101
+#: libbfd.c:1048
 #, 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:1051
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr "%s obsoleto chamado\n"
 
-#: linker.c:1697
+#: linker.c:1707
 #, 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:2578
 #, 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:2863
 #, 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:2873 linker.c:2883
 #, 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:2892 linker.c:2898
 #, 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:2903
 #, 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:3420
 #, 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:3423
 #, 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,85 +5699,85 @@ 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>)"
@@ -5372,122 +5792,122 @@ msgstr "%pB: sem nÃºcleo para alocar nom
 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:952
 #, 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:1248
 #, 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:1395
 #, 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:1628
 #, 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:1639
 #, 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:1679
 #, 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:1730
 #, 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:1771
 #, 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:1782
 #, 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:1807
 #, 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:1832
 #, 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:1854
 #, 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:1868
 #, 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:1975
 #, 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:2012
 #, 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:2026
 #, 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:2735
 #, 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:2979
 #, 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:3078
 #, 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:3124
 #, 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:3177
 #, 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:3228
 #, 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:3235
 #, 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:3240
 #, 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 +5917,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:1588
+#, 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 +5974,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,42 +5989,42 @@ 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."
@@ -5655,32 +6082,32 @@ 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:8318
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "INPUT_SECTION_FLAGS nÃ£o sÃ£o suportadas."
 
-#: reloc.c:8333
+#: reloc.c:8419
 #, 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
+#: reloc.c:8507
 #, 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
+#: reloc.c:8516
 #, 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:8578
 #, 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:8582
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "EstarÃ¡ esta versÃ£o do linker - %s - fora do prazo?"
@@ -5690,7 +6117,13 @@ msgstr "EstarÃ¡ esta versÃ£o do linker -
 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:5465
+#, 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:5511
 #, c-format
 msgid ""
 "\n"
@@ -5699,7 +6132,7 @@ msgstr ""
 "\n"
 "Exec Auxiliary Header\n"
 
-#: som.c:5787
+#: som.c:5820
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers nÃ£o implementado"
 
@@ -5713,7 +6146,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 +6156,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:1088
 msgid "unsupported .stab relocation"
 msgstr "RelocalizaÃ§Ã£o .stab nÃ£o suportada"
 
-#: vms-alpha.c:479
+#: vms-alpha.c:480
 msgid "corrupt EIHD record - size is too small"
 msgstr "Registo EIHD corrupto - tamanho muito pequeno"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:666
 #, 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:1158
+msgid "record is too small for symbol name length"
+msgstr "registo muito pequeno para o tamanho do nome do sÃ­mbolo"
+
+#: vms-alpha.c:1191
 #, 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:1215
 #, 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:1225
 #, 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:1367
 #, 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:1442
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "Sub-tipo EGSD %d desconhecido"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1475
 #, 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:1489
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "Sub-transporte de stack em _bfd_vms_pop"
 
+#: vms-alpha.c:1563
+#, 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:1764
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "comando ETIR %d desconhecido"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1795
 msgid "corrupt vms value"
 msgstr "Valor vms corrupto"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1926
 msgid "corrupt ETIR record encountered"
 msgstr "Encontrado registo ETIR corrupto"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1988
 #, c-format
 msgid "bad section index in %s"
 msgstr "mau Ã­ndice de secÃ§Ã£o em %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2002
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "comando STA %s nÃ£o suportado"
@@ -5799,1468 +6241,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:2210 vms-alpha.c:2241 vms-alpha.c:2336 vms-alpha.c:2556
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: nÃ£o suportado"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2216
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: nÃ£o implementado"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2381 vms-alpha.c:2396
+#, 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:2456
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s divide por zero"
+
+#: vms-alpha.c:2522
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "uso invÃ¡lido de %s com contextos"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2580
 #, c-format
 msgid "reserved cmd %d"
 msgstr "comando reservado %d"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2664
 msgid "corrupt EEOM record - size is too small"
 msgstr "Registo EEOM corrupto - tamanho demasiado pequeno"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2673
 msgid "object module not error-free !"
 msgstr "MÃ³dulo objecto NÃƒO livre de erros!"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4001
 #, 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:4053 vms-alpha.c:4268
 #, c-format
 msgid "size error in section %pA"
 msgstr "Erro de tamanho na secÃ§Ã£o %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4213
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "RelocalizaÃ§Ã£o ALPHA_R_BSR espÃºria"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4254
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "RelocalizaÃ§Ã£o %s nÃ£o gerida"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4551
 #, 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:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630
+#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675
+#: vms-alpha.c:4681
 #, c-format
 msgid "%s not implemented"
 msgstr "%s: nÃ£o implementado"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4724
 #, 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:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237
+#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "Reloc %s + %s desconhecida"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5330
 #, c-format
 msgid "unknown reloc %s"
 msgstr "Reloc %s desconhecida"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5344
 msgid "invalid section index in ETIR"
 msgstr "Ã�ndice de secÃ§Ã£o invÃ¡lido em ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5353
 msgid "relocation for non-REL psect"
 msgstr "RelocalizaÃ§Ã£o para psect nÃ£o-REL"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5402
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "SÃ­mbolo desconhecido em comando %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5816
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "reloc (%d) Ã© *UNKNOWN*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:5932
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (tam=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:5937
 #, 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:5954
 #, 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:5957
 #, c-format
 msgid "Module header\n"
 msgstr "CabeÃ§alho de mÃ³dulo\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:5958
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   nÃ­vel de estrutura: %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:5959
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   tam. mÃ¡x registo: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:5965
 #, 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:5971
 #, 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:5974
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   nome de mÃ³dulo : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:5978
 #, 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:5984
 #, 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:5987
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   versÃ£o de mÃ³dulo: %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:5990
 #, 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:5992
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   data compilaÃ§Ã£o: %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:5997
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Nome do processador de linguagem\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:5998
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   nome linguagem: %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6002
 #, c-format
 msgid "Source Files Header\n"
 msgstr "CabeÃ§alho de ficheiros fonte\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6003
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   ficheiro: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6007
 #, c-format
 msgid "Title Text Header\n"
 msgstr "CabeÃ§alho do texto de tÃ­tulo\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6008
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   tÃ­tulo: %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6012
 #, c-format
 msgid "Copyright Header\n"
 msgstr "CabeÃ§alho de copyright\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6013
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   copyright: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6017
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "sub-tipo emh %u nÃ£o gerido\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6027
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (tam=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6032
 #, 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:6036
 #, 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:6038
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   cÃ³digo de conclusÃ£o: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6042
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   transferir band end: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6043
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   transferir psect end.: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6045
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   transferir endereÃ§o: 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6054
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6056
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6058
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6060 vms-alpha.c:6081
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6062
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6064
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6066
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6068
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6075
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6077
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6079
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6083
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6085
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6087
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6089
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6091
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6093
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6095
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6097
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6099
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6108
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (tam=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6121
 #, 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:6127 vms-alpha.c:6378
 #, 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:6139
 #, 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:6140 vms-alpha.c:6157
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   alinhamento  : 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6141 vms-alpha.c:6158
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   bandeiras  : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6145
 #, 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:6146 vms-alpha.c:6203 vms-alpha.c:6252
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   nome       : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6156
 #, 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:6162
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   aloc. (tam)   : %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6163
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   desvio imagem : 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6165
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   desvio symvec : 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6167
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   nome          : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6180
 #, 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:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   bandeiras: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6184
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   desvio psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6188
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   end. de cÃ³d.: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6190
 #, 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:6193 vms-alpha.c:6269 vms-alpha.c:6288
 #, 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:6195 vms-alpha.c:6271 vms-alpha.c:6290
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   nome        : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6202
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM - referÃªncia de sÃ­mbolo Global\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6214
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC - verificaÃ§Ã£o Ident Consistency\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6215
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   bandeiras     : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6219
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   comparaÃ§Ã£o id : %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6221
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   severidade do erro: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6224
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   nome entidade : %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6226
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   nome objecto  : %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6229
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   ident. binÃ¡ria: 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6232
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   ident. ascii  : %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6240
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG - definiÃ§Ã£o Universal\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6244
 #, 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:6246
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   ponto de entrada: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6248
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   descriÃ§Ã£o de procedimento: 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6250
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ã­ndice psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6261
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV - definiÃ§Ã£o de sÃ­mbolo Vectored\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6265
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   vector      : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   desvio psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6280
 #, 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:6284
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   mÃ¡scara de versÃ£o: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6295
 #, 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:6330
 #, 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:6334
 #, 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:6339
 #, 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:6345
 #, 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:6350
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    nome global: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6361
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr "  %s (tam=%u+%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6383
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr "   (tipo: %3u, tam.: 4+%3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6387
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (stack global) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6391
 #, 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:6395
 #, 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:6400
 #, 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:6402
 #, 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:6408
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (stack literal)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6411
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (stack mÃ³dulo)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6414
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (comparar argumento de procedimento)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6418
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (armazenar byte)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6421
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (armazenar word)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6424
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (armazenar longword)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6427
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (armazenar quadword)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6433
 #, 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:6440
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (armazenar global) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6444
 #, 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:6448
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (armazenar ramo relativo)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6451
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (armazenar ramo absoluto)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6454
 #, 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:6460
 #, 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:6467
 #, 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:6471
 #, 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:6474
 #, 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:6477
 #, 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:6481
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (sem-operaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6484
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (adicionar)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6487
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (subtrair)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6490
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (multiplicar)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6493
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (dividir)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6496
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (e lÃ³gico)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6499
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (ou inclusivo lÃ³gico)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6502
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (ou exclusivo lÃ³gico)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6505
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (negar)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6508
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (complementar)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6511
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (inserir campo)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6514
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (mudanÃ§a aritmÃ©tica)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6517
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (mudanÃ§a nÃ£o assinada)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6520
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (rodar)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6523
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (seleccionar)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6526
 #, 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:6529
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (definir um literal)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6533
 #, 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:6537
 #, 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:6539
 #, 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:6542
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   assinatura: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6545
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (armazenar global condicional)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6547
 #, 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:6551
 #, 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:6553
 #, 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:6557
 #, 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:6560
 #, 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:6567
 #, 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:6571
 #, 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:6575
 #, 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:6579
 #, 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:6583
 #, 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:6587
 #, 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:6591
 #, 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:6595
 #, 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:6600
 #, 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:6604
 #, 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:6608
 #, 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:6614
 #, 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:6618
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (definir localizaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6621
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (definir localizaÃ§Ã£o)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6624
 #, 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:6627 vms-alpha.c:7051 vms-alpha.c:7177
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*nÃ£o gerido*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6657 vms-alpha.c:6696
 #, 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:6678
 #, 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:6704
 #, 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:6717
 #, c-format
 msgid " corrupted GST\n"
 msgstr " GST corrompido\n"
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6725
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "impossÃ­vel ler registo GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6754
 #, 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:6778
 #, 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:6792
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   bitmap: 0x%08x (total: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:6799
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:6825
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  imagem %u (%u entradas)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:6831
 #, 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:6853
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  imagem %u (%u entradas), desvios:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:6860
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:6982
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 bits *nÃ£o geridos*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:6987
 #, 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:6998
 #, 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:7003
 #, 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:7008
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7012
 #, c-format
 msgid "Strides:\n"
 msgstr "Passos:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7022
 #, c-format
 msgid "Bounds:\n"
 msgstr "VÃ­nculos:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7028
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: inferior: %u, superior: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7040
 #, 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:7045
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "base: %u, pos: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7066
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, valor: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7072
 #, c-format
 msgid "(no value)\n"
 msgstr "(sem valor)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7075
 #, c-format
 msgid "(not active)\n"
 msgstr "(nÃ£o activo)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7078
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(nÃ£o alocada)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7081
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(descritor)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7085
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(valor inicial)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7088
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(spec de valor segue)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7091
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(no desvio de bit %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7095
 #, 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:7102
 msgid "literal"
 msgstr "literal"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7105
 msgid "address"
 msgstr "endereÃ§o"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7108
 msgid "desc"
 msgstr "desc"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7111
 msgid "reg"
 msgstr "reg"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7128
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "tam: %2u, tipo: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7134
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "atÃ³mico, tipo=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7138
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "indirecto, definido em 0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7142
 #, c-format
 msgid "typed pointer\n"
 msgstr "ponteiro com tipo\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7146
 #, c-format
 msgid "pointer\n"
 msgstr "ponteiro\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7154
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "matriz, dim: %u, bitmap: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7161
 #, c-format
 msgid "array descriptor:\n"
 msgstr "descritor de matriz:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7168
 #, c-format
 msgid "type spec for element:\n"
 msgstr "tipo de  spec para elemento:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7170
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "tipo de spec para subscrito %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7188
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Tabela de sÃ­mbolos de depuraÃ§Ã£o:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7199
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7205
 #, 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:7219
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "impossÃ­vel ler sÃ­mbolo DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7262
 #, c-format
 msgid "standard data: %s\n"
 msgstr "dados standard: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7265 vms-alpha.c:7353
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    nome: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7272
 #, c-format
 msgid "modbeg\n"
 msgstr "modbeg\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7274
 #, 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:7280 vms-alpha.c:7554
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   nome mÃ³dulo: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7283
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   compilador : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7288
 #, c-format
 msgid "modend\n"
 msgstr "modend\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7295
 msgid "rtnbeg\n"
 msgstr "rtnbeg\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7297
 #, 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:7302
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    nome da rotina: %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7310
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "rtnend: tamanho 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7318
 #, 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:7327
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "epÃ­logo: bandeiras: %u, total: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7337
 #, 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:7346
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "blkend: tamanho: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7352
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (tam: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7359
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, nome: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7368
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "recbeg: nome: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7370
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "    tam: %u bits\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7375
 #, c-format
 msgid "recend\n"
 msgstr "recend\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7379
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "enumbeg, tam: %u, nome: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7383
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "enumelt, nome: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7387
 #, c-format
 msgid "enumend\n"
 msgstr "enumend\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7392
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "etiqueta, nome: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7394
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "    endereÃ§o: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7404
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "intervalo descontÃ­nuo (nr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7407
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    endereÃ§o: 0x%08x, tamanho: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7417
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "nÂº linha  (tam: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7434
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7441
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7447
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7453
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7459
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7464
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7469
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7474
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7478
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7483
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7485
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7490
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7492
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7498
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7502
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x line: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7507
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    cmd *nÃ£o gerido* %u\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7522
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "fonte (tam: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7537
 #, 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:7542
 #, 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:7551
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   nomeficheiro: %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7560
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7565 vms-alpha.c:7570
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7575 vms-alpha.c:7580
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7585 vms-alpha.c:7590
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7594
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7598
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   cmd *nÃ£o gerido* %u\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:7610
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "tipo DST *nÃ£o gerido* %u\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:7642
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "impossÃ­vel ler EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:7646
 #, 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:7650
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " majorid: %u, minorid: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:7658
 msgid "executable"
 msgstr "executÃ¡vel"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7661
 msgid "linkable image"
 msgstr "imagem ligÃ¡vel"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:7668
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " tipo de imagem: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:7674
 msgid "native"
 msgstr "nativo"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:7677
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:7684
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", sub-tipo: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:7691
 #, 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:7695
 #, c-format
 msgid " fixup info rva: "
 msgstr " fixup info rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:7697
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", vector sÃ­mbolo rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:7700
 #, c-format
 msgid ""
 "\n"
@@ -7269,474 +7723,474 @@ msgstr ""
 "\n"
 " matriz de versÃ£o off: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:7705
 #, 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:7711
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " bands linker: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:7742
 #, 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:7748
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:7755
 #, 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:7758
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", aliÃ¡s: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:7766
 #, 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:7770
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:7780
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "impossÃ­vel ler versÃ£o EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:7783
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:7787
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:7790
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:7793
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:7796
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:7799
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:7802
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:7805
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:7808
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:7811
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:7814
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:7817
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:7820
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:7823
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:7826
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:7829
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:7832
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:7835
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:7838
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:7841
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:7844
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:7847
 msgid "*unknown*        "
 msgstr "*desconhecido*   "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:7863 vms-alpha.c:8137
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "impossÃ­vel ler EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:7866
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "ActivaÃ§Ã£o da imagem:  (tam=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:7869
 #, 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:7873
 #, 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:7877
 #, 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:7881
 #, 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:7885
 #, 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:7896
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "impossÃ­vel ler EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:7900
 #, 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:7903
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " nome da imagem   : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:7905
 #, c-format
 msgid " link time        : %s\n"
 msgstr " hora de ligaÃ§Ã£o  : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:7907
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " ident imagem     : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:7909
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " ident linker     : %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:7911
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " ident build imagem: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:7921
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "impossÃ­vel ler EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:7925
 #, 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:7931
 #, 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:7936
 #, 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:7941
 #, 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:7954
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "impossÃ­vel ler EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:7965
 #, 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:7973
 #, 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:7978
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " bandeiras: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8016
 #, 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:8022
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8025
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8028
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8031
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8034
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8037
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8043
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8046
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " ident: 0x%08x, nome: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8056
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "impossÃ­vel ler DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8060
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Tabela de mÃ³dulo de depuraÃ§Ã£o:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8069
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "impossÃ­vel ler cabeÃ§alho DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8075
 #, 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:8085
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "impossÃ­vel ler psect DMT\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8089
 #, 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:8102
 #, c-format
 msgid "cannot read DST\n"
 msgstr "impossÃ­vel ler DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8112
 #, c-format
 msgid "cannot read GST\n"
 msgstr "impossÃ­vel ler GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8116
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Tabela de sÃ­mbolo global:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8143
 #, 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:8147
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  iaflink : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8151
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  fixuplnk: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8154
 #, c-format
 msgid "  size : %u\n"
 msgstr "  tamanho: %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8156
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  bandeiras: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8161
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8166
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8171
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8174
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8178
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8181
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8184
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8186
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8194
 #, c-format
 msgid " Shareable images:\n"
 msgstr " Imagens partilhÃ¡veis:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8199
 #, 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:8206
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " fixups de relocalizaÃ§Ã£o de quad-word:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8211
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " fixups de relocalizaÃ§Ã£o de long-word:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8216
 #, 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:8221
 #, 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:8226
 #, 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:8231
 #, 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:8240
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Alterar protecÃ§Ã£o (%u entradas):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8246
 #, 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:9123
 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:9194
 #, 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"
 
@@ -7750,172 +8204,214 @@ msgstr "%pB: objecto partilhado XCOFF se
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: objecto dinÃ¢mico sem secÃ§Ã£o .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1417
 #, 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:1470
 #, 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:1493
 #, 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:1506
 #, 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:1537
 #, 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:1684
 #, 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:1792
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: XTY_LD \"%s\" mal colocado"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2113
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: reloc %s:%<PRId64> fora de csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3199
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: sem tal sÃ­mbolo"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3310
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "aviso: tentativa de exportar sÃ­mbolo \"%s\" indefinido"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3689
 msgid "error: undefined symbol __rtinit"
 msgstr "erro: sÃ­mbolo __rtinit indefinido"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4067
 #, 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:4079
 #, 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:4096
 #, 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:5124
 #, 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:221 elfnn-riscv.c:256
 #, 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:2517
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "sÃ­mbolo de secÃ§Ã£o %pcrel_lo com uma adenda"
+
+#: elfnn-riscv.c:2739
+#, 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:2749
+#, 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:2789
 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:2794
 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:2800
+msgid "dangerous relocation error"
+msgstr "erro de relocalizaÃ§Ã£o perigosa"
+
+#: elfnn-riscv.c:2806
 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:3337
 #, 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:3370
 #, 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:3414
 #, 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:3569
 #, 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:3589
 #, 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:3597
 #, 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:3711
 #, 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 privilege spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "aviso: %pB usa a versÃ£o privilege spec %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:3729
+msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions"
+msgstr "aviso: privilege spec versÃ£o 1.9.1 nÃ£o pode ser ligada a outras versÃµes spec"
+
+#: elfnn-riscv.c:3757
 #, 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:3798
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7924,111 +8420,111 @@ 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:3852
 #, 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:3862
 #, 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:4400
 #, 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:158
 #, 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:185
 #, 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:195
 #, 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:527
 #, 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:1067
 #, 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:1220
 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:1221
 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:1222
 msgid "Resource Directory [.rsrc]"
 msgstr "Pasta de recursos [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1223
 msgid "Exception Directory [.pdata]"
 msgstr "Pasta de excepÃ§Ãµes [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1224
 msgid "Security Directory"
 msgstr "Pasta de seguranÃ§a"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1225
 msgid "Base Relocation Directory [.reloc]"
 msgstr "Pasta de relocalizaÃ§Ã£o base [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1226
 msgid "Debug Directory"
 msgstr "Pasta de depuraÃ§Ã£o"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1227
 msgid "Description Directory"
 msgstr "Pasta de descriÃ§Ã£o"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1228
 msgid "Special Directory"
 msgstr "Pasta especial"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1229
 msgid "Thread Storage Directory [.tls]"
 msgstr "Pasta de armazenamento de Thread [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1230
 msgid "Load Configuration Directory"
 msgstr "Pasta de configuraÃ§Ã£o de carregamento"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1231
 msgid "Bound Import Directory"
 msgstr "Pasta de importaÃ§Ã£o vinculada"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1232
 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:1233
 msgid "Delay Import Directory"
 msgstr "Pasta de atraso de importaÃ§Ã£o"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1234
 msgid "CLR Runtime Header"
 msgstr "CabeÃ§alho de execuÃ§Ã£o CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1235
 msgid "Reserved"
 msgstr "Reservado"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1282
 #, c-format
 msgid ""
 "\n"
@@ -8037,7 +8533,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:1288
 #, c-format
 msgid ""
 "\n"
@@ -8046,7 +8542,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:1295
 #, c-format
 msgid ""
 "\n"
@@ -8055,30 +8551,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:1301
 #, c-format
 msgid ""
 "\n"
@@ -8087,7 +8560,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:1304
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8096,7 +8569,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:1353
 #, c-format
 msgid ""
 "\n"
@@ -8105,12 +8578,12 @@ msgstr ""
 "\n"
 "\tNome DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1369
 #, 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:1394
 #, c-format
 msgid ""
 "\n"
@@ -8119,13 +8592,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:1438 peXXigen.c:1477
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<corrupto: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1570
 #, c-format
 msgid ""
 "\n"
@@ -8134,7 +8606,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:1576
 #, c-format
 msgid ""
 "\n"
@@ -8143,7 +8615,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:1587
 #, c-format
 msgid ""
 "\n"
@@ -8152,7 +8624,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:1598
 #, c-format
 msgid ""
 "\n"
@@ -8161,7 +8633,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:1604
 #, c-format
 msgid ""
 "\n"
@@ -8170,7 +8642,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:1632
 #, c-format
 msgid ""
 "\n"
@@ -8181,67 +8653,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:1636
 #, 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:1639
 #, 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:1643
 #, 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:1646
 #, 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:1657
 #, 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:1660
 #, c-format
 msgid "Number in:\n"
 msgstr "NÃºmero em:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1663
 #, 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:1667
 #, 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:1670
 #, c-format
 msgid "Table Addresses\n"
 msgstr "EndereÃ§os da tabela\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1673
 #, 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:1678
 #, 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:1683
 #, 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:1697
 #, c-format
 msgid ""
 "\n"
@@ -8250,20 +8722,20 @@ msgstr ""
 "\n"
 "Tabela end. exportaÃ§Ã£o -- Base ordinal %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1706
 #, 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:1725
 msgid "Forwarder RVA"
 msgstr "Reencaminhador RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1737
 msgid "Export RVA"
 msgstr "ExportaÃ§Ã£o RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1744
 #, c-format
 msgid ""
 "\n"
@@ -8272,29 +8744,27 @@ msgstr ""
 "\n"
 "Tabela [Ordinal/Nome Ponteiro]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1752
 #, 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:1759
 #, 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:1773
 #, 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:1827 peXXigen.c:1996
 #, 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:1831 peXXigen.c:2000
 #, c-format
 msgid ""
 "\n"
@@ -8303,12 +8773,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:1834
 #, 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:1836
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8317,27 +8787,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:1849
 #, 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:2002
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8346,7 +8801,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:2123
 #, c-format
 msgid ""
 "\n"
@@ -8357,7 +8812,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:2152
 #, c-format
 msgid ""
 "\n"
@@ -8366,62 +8821,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:2170
 #, 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:2231
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "%03x %*.s Entrada: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2255
 #, 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:2275
 #, 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:2285
 #, 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:2290
 #, c-format
 msgid "ID: %#08lx"
 msgstr "ID: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2293
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Valor: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2315
 #, 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:2357
 #, 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:2365
 #, 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:2453
 #, 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:2477
 #, c-format
 msgid ""
 "\n"
@@ -8430,17 +8885,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:2483
 #, 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:2486
 #, 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:2543
 #, c-format
 msgid ""
 "\n"
@@ -8449,7 +8904,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:2549
 #, c-format
 msgid ""
 "\n"
@@ -8458,7 +8913,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:2556
 #, c-format
 msgid ""
 "\n"
@@ -8467,7 +8922,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:2561
 #, c-format
 msgid ""
 "\n"
@@ -8478,22 +8933,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:2568
 #, 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:2573
 #, 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:2620
 #, 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:2630
 #, 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 +8956,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:2714
 #, c-format
 msgid ""
 "\n"
@@ -8510,97 +8965,162 @@ msgstr ""
 "\n"
 "CaracterÃ­sticas 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:2960
 #, 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:2997
 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:3005
 #, 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:3820
 #, 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:3955
 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:3973
 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:4015
 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:4020
 #, 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:4087
 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:4094
 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:4211
 #, 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:4219
 #, 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:4358
 #, 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:4378
 #, 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:4399
 #, 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:4419
 #, 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:4461
 #, 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:4486
 #, 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 "%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 +9211,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 +9267,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,9 +9309,6 @@ 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."
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/ru.gmo ./bfd/po/ru.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/ru.gmo	2020-03-07 02:11:47.000000000 +0000
+++ ./bfd/po/ru.gmo	2021-12-16 02:00:37.000000000 +0000
@@ -1,143 +1,149 @@
-Þ•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
+Þ•q0¸3I	@gdŒ‚|Œ„Žì¦
í¦û¦§(§AG§?‰§:É§¨¨.¨$M¨3r¨
¦¨´¨%Ô¨ú¨ü¨A©&P©w©�©©©Â©Ò© ñ©ª2ªKªbªoªP‚ªÓª*ëª9«6P«;‡«Ã«FÕ«6¬6S¬:Š¬5Å¬,û¬D(­Nm­J¼­)®G1®:y®B´®L÷®)D¯Bn¯L±¯þ¯°D+°Gp°¸°×°é°ý°±*±3I±}±”±0¦±×±ç±÷±+²+=²+i²#•²¹²Ñ²Ú²ø²(³?8³>x³%·³&Ý³(´)-´GW´7Ÿ´×´î´µ+µDµ_µµ˜µ³µÉµáµõµ¶,&¶S¶c¶|¶”¶«¶º¶Ð¶å¶ÿ¶·1+·]·n·{·’·­·#Å·+é·&¸5<¸r¸‡¸Ÿ¸¹¸Ï¸é¸¹¹/¹$D¹i¹‚¹¢¹º¹$Ï¹ô¹ºº<6ºsº‚º
‘ºŸº³ºÈº àº»»,»L»h»ˆ»¡»º»Í»*à»¼¼&/¼V¼0j¼›¼"¯¼	Ò¼Ü¼#ï¼½,½=½V½"o½’½"¦½#É½#í½¾#&¾#J¾n¾{¾™¾·¾½¾Ê¾Ò¾×¾
+ô¾ÿ¾¿!
+¿ ,¿M¿R¿W¿o¿�¿¯¿´¿È¿!Í¿ï¿ÀÀ
ÀÀÀÀ!À&ÀBÀ"[À~ÀƒÀ£À·À&×ÀBþÀAÁaÁfÁkÁrÁxÁ}Á�Á–Á®ÁÂÁÉÁâÁöÁÂÂ)Â:ÂKÂcÂ	rÂ
|Â
ŠÂ
+˜Â
+£Â
+®Â
+¹Â
+ÄÂ$ÏÂ
+ôÂ#ÿÂ
+#Ã.Ã@Ã!XÃzÃ�Ã
+žÃ
©Ã	·ÃÁÃ
+ÒÃÝÃäÃüÃÄ(Ä7ÄNÄiÄxÄ‘Ä Ä§ÄÇÄ(×Ä/Å0ÅBÅ+QÅ}ÅA™ÅÛÅõÅÆ)Æ8>ÆwÆ�Æ¤Æ&¾ÆåÆÇ2Ç?RÇ&’Ç¹Ç(ØÇÈ"È7È*WÈ6‚È{¹Èr5Éx¨É!Êe7Ê7�Ê:ÕÊË?"Ë@bËU£Ë`ùËbZÌq½Ì/ÍOÍ&mÍ”Íœ®ÍDKÎ'�Î,¸Î1åÎ'Ï$?Ï/dÏ-”Ï0ÂÏ&óÏ8ÐSÐ=sÐ9±Ð:ëÐ6&Ñ6]Ñ”Ñ/´Ñ5äÑ+Ò$FÒ6kÒ"¢Ò&ÅÒ6ìÒ=#Ó:aÓ:œÓD×Ó8Ô9UÔC�Ô:ÓÔ7Õ8FÕ@ÕGÀÕ9Ö,BÖ0oÖ# ÖÄÖ=ßÖ-×6K×‚×7ž×;Ö×:Ø"MØ3pØ%¤Ø.ÊØùØ0Ù1JÙ'|Ù¤ÙEÂÙ8Ú(AÚcjÚ4ÎÚ&Û2*Û&]Ûk„Û*ðÛ4Ü]PÜ8®ÜçÜOÝbVÝ,¹Ý+æÝ)ÞY<Þ0–Þ=ÇÞ3ß29ßBlßL¯ßüß4à)Oà$yà3žà9Òà6á/CáDsá&¸áWßáU7âI�â+×â8ã%<ã(bã&‹ã,²ã#ßã>äBBäB…äÈä'èäEå9Vå4�å3ÅåJùå(Dæ;mæ©æ0ÈæDùæ.>ç9mç?§ç?çç2'è8ZèS“è'çè.é,>é'ké6“é ÊéYëé/Eê4uêNªêªùêI¤ë9îë3(ì¾\ì<í<XíF•íPÜío-î>�îFÜî`#ï~„ïFð‚Jð[Íð3)ñ@]ñMžñmìñ7Zò#’ò¶ò(Ìò&õò+ó5Hó~ó“ó8§ó"àó$ô'(ô9PôCŠô!Îô!ðô*õ/=õ1mõ/Ÿõ/Ïõ0ÿõ*0ö0[ö<ŒöiÉö=3÷Bq÷=´÷-ò÷. ø8Oø:ˆøFÃø?
+ùVJù(¡ù>Êù;	ú=Eú4ƒú#¸úLÜúI)û8sû+¬û8Øû2ü9Dü:~ü3¹ü,íüuý �ý.±ý.àýJþ0ZþB‹þ/Îþ,þþ'+ÿ%Sÿ,yÿN¦ÿõÿCJS@žJß**%U<{1¸ êl<x<µ+ò,:Hg6°AçA)Jk>¶JõJ@<‹.È(÷l v�A6F}4›0Ð+A-3o@£!ä#	.*	BY	Fœ	4ã	%
+:>
+2y
+*¬
+9×
+C(UC~:ÂTýJR5�4Ó6
/?
/o
&Ÿ
&Æ
5í
'#0K5|(²3Û%&5\'|=¤#â+32(f@�CÐ5'J,rgŸ4m<Aª@ìH-GvK¾I
+LTH¡CêY.5ˆ0¾4ïM$Nr1Á)ó)/G)w+¡7Í3699pXª[C_6£>Ú=*W.‚2±[ä&@-g,•ÂÝ/ø(($Q0v'§8Ï"A+)m=—#Õ@ù2:+m"™5¼<ò'/%W(}R¦?ùF9 3€ 1´ Dæ H+!Dt!K¹!a"sg"BÛ"‚#T¡#=ö#b4$b—$gú$gb%0Ê%(û%4$&5Y&)�&3¹&-í&/'HK'F”'7Û'G(+[($‡(2¬(.ß(/)+>))j)-”)^Â)K!*Fm*´*"Ð*ó*5+(D+Em+D³+Dø+F=,_„,^ä,"C-*f-+‘-8½-:ö-'1.;Y.8•.'Î.'ö.3/>R/-‘/,¿/ì/I0U0r0.�0/¿0ï0$1341h1F†1&Í1!ô1625M2)ƒ2­2Ç2æ2+3 ,3$M3.r3.¡3%Ð3)ö3\ 4D}4HÂ4D5LP5X�5Hö5)?6*i6 ”65µ69ë6@%7+f76’7\É7A&8.h8M—83å8=9HW9< 98Ý93:4J:4:0´:@å:1&;BX;L›;Aè;L*<8w<B°<+ó<2=<R=3�=XÃ=P>.m>`œ>&ý>P$?\u?XÒ?/+@p[@AÌ@+AK:A.†A,µA%âAB3(B2\B�B4¯BJäB?/C@oCW°C=D*FD5qD%§DBÍD%E46E>kE<ªECçEB+F;nF3ªF'ÞFGH9HKHZH!oH‘H$§HÌH1ßHVIIhII²I<üI9JLJ`JrJŒJ
 J'®JÖJ
âJðJ%K\'K;„KÀKÒKèKëKLL	.L8LJL[L,hL•L©L¿LRÛL".M+QM%}M5£M2ÙM4N/AN/qN3¡N(ÕN2þN31O+eO&‘O"¸OÛO(øO/!P/QP1�P8³P#ìP'Q28Q3kQŸQ;¯QëQòQúQRR&R.RBRWRlR~R‘R¨R¿RÜRîRS	+S5SSS	hS"rS•S§S)ÃS/íS"T@TWT`TlTpTƒT•T§T'¹TáT þT#UCU]U oU�UH®U1÷U#)V,MV@zVX»VaW:vW.±W7àW1X;JX(†X:¯X,êX-Y-EYsY2’YÅYÕYêYÿYZ),ZVZ!lZ$ŽZI³ZýZ5[P[
+e[Cp[I´[þ[\\ \
>\L\ ^\A\Á\/Ý\+
]89]r]$ˆ]!­]1Ï]^ ^+?^k^^˜^
+¥^°^BÏ^_%$_J_\_.z_-©_G×_3`S`"r`•`§`$À`å`!a$a56ala	~aˆaša°aÐaêabb'b	.b8b=bIbXbob‹b¡b³bÓbìbc c2cJc-hc–c¨cºcÎcèc'ýc%d4dFdXd_d!fdˆd:¤d%ßd%e+eADe;†eCÂe=fCDf=ˆf"Æf7éf<!g<^g)›g5Ågûghvh*–hÁh'Óhûh
iii
+*i(5i^i'pi˜iµiÍiíi#j$)j,Nj.{j,ªj.×jk"#k,Fk.sk!¢k1Äk0ök2'l,Zl.‡l#¶lÚlúl(m/7m!gm‰m(¦m#Ïm+ómn,8n en†nŸn¿nÓnón#o-6o"do‡o™o¬o¸oÍo&ßo	pFp/Wp‡pJ˜pMãp1qQqhq{q-˜qÆqÏq×qAãq>%rdrAvr7¸rBðr!3sUs˜ust*t<tNt#ct2‡t.ºt#ét
uu'u7u?u:Xu+“u#¿uãuöuv'v,?v:lv§v	¿vdÉv.w6AwMxwMÆw<xgQxb¹x<y1Yy(‹y$´yÙy/ïy+zKzgz�zžz>ºz<ùz6{4R{'‡{$¯{Ô{å{ý{|%|=|U|g|y|‹|�|·|Ò|ä|õ|
},}2K}~}'˜}LÀ}4
~7B~0z~'«~Ó~ó~-+M+y*¥	Ð	Ú
+ä
+ïú€*€9€N€]€1b€”€/´€ä€ �'$�"L�&o�0–�Ç�å�ú�‚9!‚[‚,p‚a�‚9ÿ‚)9ƒCcƒI§ƒEñƒY7„Y‘„;ë„;'…Nc…/²…5â…:†5S†4‰†9¾†7ø†90‡Dj‡G¯‡D÷‡E<ˆC‚ˆ-Æˆ4ôˆ?)‰:i‰F¤‰;ë‰F'Š9nŠ*¨Š6ÓŠ/
+‹;:‹3v‹%ª‹1Ð‹!ŒV$Œ\{ŒAØŒ1�?L�:Œ�7Ç�>ÿ�$>ŽIcŽ­Ž/ÊŽOúŽPJ�3›� Ï�?ð�:0�&k�
+’�0��%Î�"ô�%‘0=‘!n‘�‘©‘Ä‘Ù‘æ‘Oõ‘E’,d’7‘’
É’×’1æ’“,“?“R“)o“*™“,Ä“6ñ“(”$H”_m”"Í”(ð”A•[•,y•2¦•HÙ•"–2–
+C–$N–s–†–¼¦–¹c—˜//˜_˜z˜˜˜*¸˜Lã˜20™-c™)‘™"»™Þ™ñ™šš4*š_š0gš%˜š9¾šøš<
+›=G›3…›5¹›2ï›7"œBZœL�œêœûœ��%�A�HH�‘�4”�É�Ò�
+é�ô�2ž-CžOqžÁžàž"åž*Ÿ%3Ÿ YŸzŸ˜Ÿ ŸC¿Ÿ¤ ¨ µ  Ï ð ù 
¡"¡8¡N¡e¡‚¡“¡¥¡¹¡*Á¡Nì¡[;¢—¢A›¢Ý¢ü¢£1£6I£€£  £8Á£+ú£&¤9¤I¤Q¤f¤~¤’¤¦¤º¤Í¤
à¤î¤L¥ U¥v¥D•¥PÚ¥+¦=¦2X¦$‹¦°¦Ð¦5ã¦§!4§V§]§2e§F˜§,ß§/¨(<¨e¨"w¨š¨ª¨M¹¨9©;A©7}©µ©Í©ê©ù©,ª$9ªJ^ª)©ª(Óª%üª("«K«
+g«,r«Ÿ«)¹«ã«¬¬3¬;¬S¬)k¬•¬
«¬#¹¬Ý¬'õ¬­.­D­^­{­•­#¡­%Å­ë­®®1®7H®€®œ®µ®Ê®Ü®ï®¯¯-¯JC¯JŽ¯JÙ¯I$°:n°©°-È°;ö°+2±@^±<Ÿ±1Ü±8²8G²U€².Ö²>³ID³hŽ³y÷³>q´N°´Iÿ´dIµ0®µ;ßµ8¶FT¶5›¶&Ñ¶.ø¶-'·.U·0„·<µ·!ò·¸!-¸)O¸Iy¸`Ã¸.$¹,S¹h€¹Eé¹0/º6`ºk—ºE»I»&g»IŽ»#Ø»<ü»<9¼ev¼QÜ¼2.½/a½/‘½4Á½=ö½94¾0n¾7Ÿ¾'×¾=ÿ¾6=¿@t¿µ¿Õ¿,Ù¿)À
0Â >Â>_ÂDžÂ’ãÂ€vÃu÷Ã0mÄ7žÄ5ÖÄZÅKgÅ³Å:ÃÅ<þÅ;Æ=Æ`QÆ.²ÆáÆ%Ç+&ÇRÇ$dÇ&‰Ç%°Ç3ÖÇ#
+È
.È(<È˜eÈ8þÈv7ÉH®É_÷ÉGWÊ(ŸÊÈÊGHË]�ËHîËD7ÌS|ÌzÐÌŒKÍ~ØÍTWÎ|¬Îp)ÏvšÏŠÐLœÐtéÐˆ^ÑçÑ$Òz)Ò˜¤ÒT=Ó’Ó°Ó5ÄÓúÓ)Ô>;Ô&zÔ¡ÔM¼Ô
+ÕÕ!,ÕDNÕD“ÕDØÕ-Ö$KÖpÖ'yÖ4¡Ö@ÖÖF×E^×<¤×Cá×B%ØIhØZ²Øi
Ù%wÙ�Ù½Ù*ÚÙ7Ú(=ÚfÚ,†Ú!³Ú%ÕÚ'ûÚ #Û DÛ8eÛžÛ-®Û!ÜÛ+þÛ*Ü=Ü\Ü{ÜšÜ¶ÜHÒÜÝ1Ý$>Ý*cÝ*ŽÝE¹ÝJÿÝCJÞSŽÞâÞ+ß&-ßTß)rßœß·ßÐßèß@àEà6eàœà´à7Ïàá"á"Aá<dá¡á°á
¿áÍáêá+	âB5â#xâœâ/¸â)èâ*ã=ã#\ã€ã ã9³ãíãÿã6äHä<\ä™ä?­äíäþä#å5åNådå(}å;¦åâå-öå#$æ#Hælæ#‹æ#¯æÓæ,çæ.çCçIçaçiç1nç
+ ç«ç°ç:¶çHñç:è?è,Dè(qè.šèÉèCÎèéPéhé…éŒé’é—éœé¢é¦é?«é7ëéB#êfê(kê”ê&¯êMÖêl$ë(‘ëºë¿ëÄëËëÑëÖëïë)öë1 ìRì6Yì1�ìÂìØìîìíí&0íWí	sí
}í
‹í
+™í
+¤í
+¯í
+ºí
+ÅíaÐí
+2î~=î
+¼îÇî5ÙîNï.^ï�ï¬ï¾ïÕï"áïðð.ð2Nð�ð“ðA°ð3òð&ñADñ
†ñ”ñA›ñÝñOüñXLò¥ò·òSËò#óACó/…ó(µó"Þóô8ô&Xô+ô.«ôUÚôR0õƒõJžõHéõY2öVŒö9ãö÷-4÷:b÷,�÷sÊ÷Ü>øÁù¼Ýù'šúµÂúXxûcÑû5ü…Pü]Öü4ý�´ý”EþªÚþ…ÿE¥ÿNëÿ-:Xh�Á>CI‚HÌ><TV‘DèY->‡QÆ;�T}ÖjT[¿W'se›r`t=Õl	@€	EÁ	M
+TU
+Oª
+Qú
+_LN¬Pû^LP«NüNK
Žš
¯)—Ù„q4ö*+EVdœWgY>Áwmxoæ>VT•JêG5A}•¿MU=£Aáš#y¾N8»‡_CG£KëL7ê„Go]·ái÷!a®ƒ³2RæZ9>”´ÓUˆxÞSW Q« uý ws!3ë!s"[“"Mï"p=#[®#I
+$FT$r›$?%»N%‹
+&‚–&`'Yz'>Ô'D(2X(7‹('Ã(yë(~e)zä)3_*Z“*{î*kj+hÖ+w?,Ü·,š”-ƒ/.N³.U/œX/Wõ/\M0rª0z1X˜1nñ1Ÿ`2S3RT3^§3P4sW4@Ë4œ5Q©5gû5”c6Gø6’@8{Ó8aO9o±9m!;m�;fý;›d<à=[á=i=>«§>çS?};@Ý¹@§—AP?Bb�B‚óBÅvCN<DY‹D$åDG
+EGRESšESîE2BF)uFeŸFHG?NGHŽGl×GrDH;·H;óHE/IVuICÌITJfeJVÌJQ#KVuKIÌK�Lu§L]Mu{MPñMfBNn©NdO‡}OxP¡~PF QjgQ^ÒQŒ1R^¾R;SmYS”ÇSM\TNªT\ùTOVUl¦UmVc�ViåVOWFRX\™X\öX…SYzÙYqTZEÆZY[cf[UÊ[L \‚m\Cð\x4]Œ­]u:^Š°^l;_Q¨_€ú_h{`Kä`á0a�b�£bW4c'ŒcO´c‘db–dœùdœ–e®3f}âfŸ`g¯hq°hw"i?šiÂÚiÌ�j‚jkník:\l€—lZmHsm{¼mp8n]©n4oP<ou�op¦ƒpZ*qA…qtÇq_<rOœr�ìr£nsEt£Xt‘üt§Žu¨6vWßvV7whŽwf÷wV^xcµxZyaty@ÖyVzmnzKÜzQ({?z{Nº{;	|_E|c¥|@	}]J}u¨};~Z~‚Ú~W]EµMûçI€o1�˜¡�q:‚o¬‚{ƒz˜ƒ~„o’„‘…u”……
+†¶�†iG‡\±‡Uˆ«dˆ«‰n¼‰N+ŠKzŠWÆŠR‹Zq‹dÌ‹O1Œ��ŒU�Íh�Ì6Ž˜�©œ�qF�R¸�{‘f‡‘Uî‘ÅD’C
+“[N“Zª“D”&J”Eq”G·”Nÿ”lN•S»•z–IŠ–lÔ–=A—£—B#˜mf˜fÔ˜C;™G™mÇ™€5šQ¶š9›EB›zˆ›pœ„tœjùœZd�z¿�y:ži´ž�Ÿ¸¬Ÿåe qK¡ù½¡ª·¢b£¯â£¹’¤¶L¥¾¦ZÂ¦F§gd§cÌ§J0¨X{¨TÔ¨D)©tn©pã©ZTª�¯ª]1«:�«aÊ«r,¬QŸ¬Jñ¬M<­\Š­³ç­q›®W
¯4e¯;š¯3Ö¯m
+°Ux°nÎ°m=±m«±o²ˆ‰²‡³=š³HØ³K!´lm´pÚ´IKµt•µ~
+¶G‰¶LÑ¶Z·|y·Sö·[J¸;¦¸˜â¸5{¹?±¹Yñ¹ZKº<¦º>ãºT"»,w»f¤»J¼;V¼V’¼_é¼RI½@œ½?Ý½6¾FT¾C›¾Gß¾c'¿a‹¿Ií¿B7À¸zÀ›3Á˜ÏÁœhÂ´Ã¶ºÃ˜qÄG
+ÅBRÅ=•ÅhÓÅo<Æq¬ÆbÇi�Ç¬ëÇ~˜È_É¡wÉ^Ê}xÊžöÊ‹•Ë}!Ì}ŸÌkÍŽ‰Í}Î”–ÎW+ÏnƒÏyòÏnlÐƒÛÐR_ÑŽ²ÑrAÒz´Òm/Ó}�Ó¾Ô¥ÚÔ^€ÕÊßÕiªÖª×œ¿×˜\ØXõØÔNÙ|#Úb ÚoÛ_sÛ`ÓÛQ4Ü8†ÜJ¿ÜI
+Ý9TÝSŽÝhâÝQKÞ\�Þ™úÞu”ßT
+àp_àRÐà}#á[¡áRýáŠPâvÛâ“Rã›æã~‚äKå?Måé�åBwèºèÚè õèWé%néP”éåéaê�fêröêriëUÜë&2ìYì%yì1Ÿì,Ñìþì=íTíoí†í%Ÿí¼Åí’‚î$ï7:ïrï7uï­ï>Êï	ð ð?ð[ð,uð¢ð)»ð5åðƒñ1Ÿñ;Ññ<
òOJòQšòcìòUPóU¦ó\üó6YôH�ôIÙôD#õGhõA°õ7òõH*öXsö[Ìö^(÷k‡÷Mó÷QAø\“ønðø_ùxùøùú(úGú`úsú†ú¢ú¿úÜúöú@û@Rû?“û3Óû4ü;<üxü5�ü.ÅüôüIýUýNgýD¶ýJûý?Fþ8†þ¿þ"Ðþóþ:÷þ2ÿDÿVÿDhÿ6­ÿ?äÿE$.j3™@Í8iGj±8[Ut±À&£çx‹j€onð•_Lõ{Bd¾W#R{HÎQ	i	4‡	0¼	4í	/"
+YR
+¬
+/Ì
+5ü
+ˆ2,»Lè#5 Ylz›çƒ
•
�
'¥
 Í
î
8�9BÇp
+X{YÔ6.ce^É|(Y¥]ÿz]UØ.L
+aKl~¸75I4‘gÆR.ƒ�h;n1ªÜ7î)&8P6‰ÀWÒ* <]'oE—"Ý= >_qx„›«"Ç2ê=@W#˜;¼ø"24U[Š,æ),G:t\¯'9KREY%ŸEÅ01<Cnx²y+š¥z@ €» X<!W•!Zí!iH"i²"L#bi#Ì#'ë#Ù$Eí$3%=E%ƒ%•%œ%£%!º%bÜ%?&CQ&-•&#Ã&1ç&"'4<':q'[¬'O([X(O´(?)BD)[‡)Oã)I3*b}*oà*cP+[´+O,B`,B£,"æ,M	-PW-3¨-5Ü-R.Fe.V¬.4/I8/7‚/>º/Hù/$B0Cg09«0Jå0V01B‡1Ê1'Ü1921>2%p2T–2
+ë2aö2bX3»3ŽÚ3�i43ù4)-51W5D‰5AÎ566.6rG6eº6 7x27X«7~8Qƒ8CÕ89+2:^:y: ”:Eµ:eû:Ta;N¶;<<'<
+?<?J<nŠ<Sù<WM=#¥=(É=ò=#
+>f.>k•>2?)4?¤^?!@V%@†|@†AKŠAÉÖAž Bg?CJ§CAòC)4D^DT|DkÑDb=EI ENêE>9F›xF•GFªG’ñG„HDI+II>uI1´I+æI>J8QJ,ŠJ,·J,äJ,K@>K:K,ºK+çK8LKLLC˜LFÜL/#MMSMŽ¡Ma0N_’NUòNMHO?–O)ÖO/Pe0Pc–PcúPK^Q
+ªQ
+µQÀQÌQ%æQ4RARPReRtR8}R=¶RWôR.LS4{Sb°S[TCoTX³T&U3UJU1SUU…U ÛU^üUë[VwGW?¿W€ÿW‚€X¡Yï¥YÌ•Z„b[€ç[×h\u@]d¶]}^‚™^c_Œ€_f
`Œt`Œa Ža”/b�Äbœbccÿc\cdiÀdl*eh—e�f”‚flgp„gfõg_\he¼h_"iE‚iOÈiMj fjÙkgákiIl`³lkmh€mnémYXn~²n>1oBpo†³o€:pX»p@q`Uq[¶qJr]rZtrFÏrOsHfso¯sDt0dt/•t3Åt&ùt u¶6uWíugEv{­v)wEwKbw®wÂwÕw@èwq)x„›xb y|ƒy>zH?z·ˆzT@{[•{€ñ{Fr|i¹|^#}‚‚}!~"'~J~E^~¤~CÂ~HKO€!›�R½�:‚4K‚P€‚]Ñ‚�/ƒOÀƒN„e_„[Å„!…;…)P…!z…½œ…Z†ii†eÓ†d9‡ž‡m¾‡{,ˆh¨ˆŽ‰p ‰hŠszŠ‚îŠ#q‹5•‹Ë‹Ó‹1Û‹
Œ“Œ®ŒWµŒ
�2!�T�#l�u��iŽ¨pŽG�a�>y�f¸�X�Dx�F½�‘1‘jK‘$¶‘Û’8õ’U.“„“'˜“(À“)é“)”*=”%h”!Ž”"°”Ó”é”Pñ”“B•ÁÖ•˜–mŸ–M
—2[—,Ž—;»—h÷—T`˜Wµ˜m
™Z{™'Ö™)þ™(š0š3Mš�š—š«š¿šÒšåš1ýšv/›,¦›;Ó›Œœnœœ"�7.�^f�9Å�Fÿ�(Fž`ož=ÐžXŸgŸ
tŸ`‚ŸaãŸVE qœ K¡.Z¡?‰¡É¡Ù¡€è¡ai¢}Ë¢�I£;Ë£7¤0?¤p¤\Š¤Eç¤„-¥j²¥S¦?q¦`±¦2§E§Q`§2²§Tå§=:¨1x¨6ª¨á¨+ö¨-"©CP©3”©#È©Yì©5FªM|ª0Êª5ûª91«8k«2¤«×«3ð«Q$¬=v¬+´¬7à¬7­�P­>á­? ®`®®›®¸®Ö®ô®¯¦4¯—Û¯“s°“±€›±)²KF²\’²Wï²mG³™µ³XO´�¨´‚*µÒ­µm€¶Œî¶¦{·ñ"¸¹Œ1º«¾º¦j»ß¼eñ¼nW½fÆ½�-¾©¾¾Yh¿hÂ¿^+À_ŠÀaêÀhLÁPµÁBÂTIÂPžÂuïÂ�eÃhÄflÄ°ÓÄu„ÅzúÅouÆÉåÆ�¯ÇQ@Èa’ÈšôÈS�ÉuãÉuYÊÐÏÊÛ Ëh|ÌdåÌXJÍ~£Í}"Î^ ÎdÿÎqdÏdÖÏ¨;Ð‡äÐ¼lÑD)ÒnÒJsÒðÄþ˜×až)¸¬Ñµa-š‹ð±Â¥¹ß™þ=Šˆ[aá][îW˜)Õ��»ÒôyWÚ.êàÒ4°¥š´B[ÒEN�zŸ—ûß0Ô¿
Øï3æ…~çÖ®àZCÑØö®’6þNtó„þ°ý±ïºæ¯[iKƒìuÝÉìá›Å®!�V¯z1Aúañmó.RÜâRüG¢?�c8ƒííñu
+ÂaL€Z“`#qËï c0NË®`³Î&Fx„—\ÿ‹j¼èÕf‹=Ú;p„)KÉVmòƒûý¿KùQ>FAµ(ÍÂ/ƒ5–·<
+ü_-…‰&@èíØ¾Ç·‡hÎkk¶Ï]w£ K§Iîßéäk�Kä� sDzç1‡Y×dëZ“ÚCyÌÐZž…qVÚ+{ÄŽÙ$T¬ð1q@›Â©e¬ðîeñõ”Wg²–Å”–0³	¯¬‘“ƒgÿ¤ÃýJûi±@€0*!�qÿí'Üá	•Š÷FxC<ÂnAÐKcd•%gLpÉ˜r3NÛê$â°Ú
+Ô¡Hùµ@jÅ2nœX8‡{ÝÏcÈ™Y¹Ä¥âYüQWÛ–�eB'=ÀÐÖ”vï£é­…ŽPh¯DÌQ»ÀL3u‡/Ýbý×Ï¼n«²nk}¾‰ H¥ø;/êB9q;ÉIRa(Í”
+ðÇêôVý°½¦I¦¿Óe7T½ÛeófÉþÓD¼Mc,ÁÓ¼Œ]§º#6ort"$1àãO
+/%ŸOXÖ'_§ooú\¹ÓTo3Dö]ò�<÷yd.9{p9¨×?Pˆ^m¶=ÊŒ.q7|î+¸¥Ì¸#@HbCÙ�ÕF)\çšáv-�Ù•Ô*†Äá»“È“¾c#¤Mì&«‰!X>f€ƒõs’OEyç†‰ÊlçmŸ�æ¦â]ôánB»¨2�ŒIà;Êçäå	’>Þåû"¤¦|?7ílì‹}ZœU:E�Tq?�|ä»0ljk•F,Ó':œ‹Uy-Oìñ^|VÎã¢*”{E½éõÂ�SyÔÇÆ0Ž°MwI§ÆrI^Q44ªÖöX]Æf”&'<�’c;x¢¶<¾ÙÃ4‰/~R3±N7Ð‘OÕÁÃÆÔò52òØù³OoV%îòÆ5ü)s+€Q¥ûfRõsŒö, (ˆ§8è‚˜,U 2`Ãž�YËL:ÞJó¸€ÇH3$}d¨�ÉD´ãå6VÄ-™%£±ÜŸ·X£ÑÒ¬Ã÷ÀÛÌˆã*"÷i>¹/ØI¨ŠÌ~£(ÏwP[$?(~×¸èÏ¦U«:Szv%bm³_ó•~Y¼CšSôSë•Ê{ŒS«Mg¹‹H†Ä½pv›åºü&*âò`4iXµ.x¤1×tô¶ñ07—Åx�l»ˆ÷W&
+ÞnÑª¡¾$eB-55¡ÍRAj9¡UCÎå1´~ö¸,uB€\oŸ™^__, AÎZ£}†HrÑ²U—„› ;F�ìÐ%ŠÛ*4N#˜lG·ª_Ÿ,‘:
ÀüÌÍd}LãD{hEªhÛëÞÿœÀW&nù9­¶­ÚAêXv68*LhJrRèg]œ1.øÆ‘ïý¢ºG�þ`œ"� :mTÞ„éðÁ;p�Å)Ùt…–Ü|bºû�Î¢˜ÿ$hlzŽxÜ­Ò6ø´ÀÇ6sîJ=ñ‚µózèZrP95SØújõ¯`CÍw\Š_›—ˆd(‘U¢‚½mpÍâWÿ³¨t‚³8²­>å[�g<ÐÊ^MSäj.äö­’µbšFÁGÖùø°NP=w+í¶92!¿«(Gæ‚±^k?ž Êé#¡ïÞ™/	©‚bß7!õŠQvº¾i‘†?h©+·«†Å
<AË"4™“uP"kGã
OÔ´!|8éfÙMÝ:ú¿YÝªÈßžMfŽ'›@@Ë ž[JD!²\à>`wª²Ó uæ¨¦…o	®�´ŒÈ¿KŽ\e^#J"ëløH}¤7Çëad
§’–š¤ù3¹æBTÁ+Õ�—E¼-‡stÕYP÷Ü©Ã¡Q)5‰b½‡ê©ß6·Á	%È'©
8„ôJÒ=+>
 Lg¯Ý®úëúÏÈpÑË�Ti2
+2Ö	Gøijà¬E¾ÒÅÒÌÒŒ�¨�¼�Ð�ä�ø�‘ ‘4‘H‘\‘p‘„‘˜‘´‘È‘ä‘ø‘’ ’4’H’\’p’„’˜’¬’È’Ü’ð’“0“L“`“t“ˆ“œ“¸“Ì“à“ô“”$”8”L”`”t”ˆ”œ”°”Ä”à”ü”•$•H•\•p•„•˜•¬•À•Ü•ø•–(–<–P–d–x–Œ– –´–È–Ü–ð–——,—@—T—h—|—�—¬—È—Ü—ð—˜ ˜4˜H˜\˜p˜„˜˜˜¬˜À˜Ü˜ø˜™(™D™X™l™€™œ™¸™Ô™è™ü™š,š@šTšhš|š�š¤š¸šÔšèšüš›,›@›T›h›|›¨›¼›Ø›ì›œœ(œ<œPœdœxœŒœ œ´œÈœäœøœ�(�<�P�d�x�Œ� �´�È�Ü�ø�ž ž<ž`ž|ž�ž¤ž¸žÌžèžüžŸ$Ÿ@ŸTŸhŸ|Ÿ�Ÿ¤Ÿ¸ŸÌŸàŸôŸ , @ T x Œ   ´ È Ü ð ¡(¡D¡X¡l¡€¡”¡¨¡¼¡Ð¡ä¡ø¡¢ ¢4¢H¢\¢p¢„¢˜¢¬¢À¢Ü¢ø¢£ £<£P£d£x£Œ£ £´£È£Ü£ð£¤(¤<¤X¤t¤ˆ¤œ¤°¤Ì¤è¤¥¥,¥H¥\¥p¥„¥˜¥¬¥À¥Ô¥è¥¦¦,¦@¦\¦p¦„¦˜¦¬¦Ø¦ÓÒÿÿÿÿõÒ"ÿÿÿÿ+Ó ÿÿÿÿRÓ5ÿÿÿÿŽÓ%ÿÿÿÿºÓ)ÿÿÿÿêÓ(ÿÿÿÿÔ/ÿÿÿÿOÔÿÿÿÿkÔ'ÿÿÿÿ™Ô-ÿÿÿÿÇÔÿÿÿÿäÔÿÿÿÿÕ $ÿÿÿÿ[Õ ÿÿÿÿƒÕ%ÿÿÿÿÀÕÿÿÿÿôÕ*ÿÿÿÿÖ.ÿÿÿÿOÖ)1ÿÿÿÿ©Ö%ÿÿÿÿÏÖ9ÿÿÿÿ	×1ÿÿÿÿ;×
+2ÿÿÿÿw×"ÿÿÿÿ«×3ÿÿÿÿß×ÿÿÿÿØ9ÿÿÿÿVØ%ÿÿÿÿ‰Ø
+HÿÿÿÿÝØ
+/ÿÿÿÿ4Ù)ÿÿÿÿuÙ
+6ÿÿÿÿµÙ
+>ÿÿÿÿýÙ
+0ÿÿÿÿ7Ú
+Fÿÿÿÿ‡Ú
+ÿÿÿÿÉÚ
++ÿÿÿÿþÚ
+ÿÿÿÿ&Û
+"ÿÿÿÿRÛ@)ÿÿÿÿÁÛ
+/ÿÿÿÿúÛ
+ ÿÿÿÿ$Ü-ÿÿÿÿkÜ6ÿÿÿÿ·Ü6ÿÿÿÿÝ
+7ÿÿÿÿCÝ
+?ÿÿÿÿŒÝ
+ÿÿÿÿ±Ý4ÿÿÿÿþÝ+ÿÿÿÿ6Þ-ÿÿÿÿpÞ3ÿÿÿÿ¤Þ0ÿÿÿÿëÞ 0ÿÿÿÿkß
+-ÿÿÿÿ¢ß(ÿÿÿÿÞß
+-ÿÿÿÿàÿÿÿÿGà6ÿÿÿÿ„à>ÿÿÿÿÉà#ÿÿÿÿôàÿÿÿÿ0áÿÿÿÿlá
+2ÿÿÿÿ¨á
+.ÿÿÿÿàáFÿÿÿÿ'â
+2ÿÿÿÿcâ
+2ÿÿÿÿŸâ
+2ÿÿÿÿÛâ
+2ÿÿÿÿã
+2ÿÿÿÿSã
+2ÿÿÿÿ�ãFÿÿÿÿÖã
+9ÿÿÿÿä
+7ÿÿÿÿZä
+9ÿÿÿÿ�äFÿÿÿÿääFÿÿÿÿ+å	2ÿÿÿÿfå+ÿÿÿÿ˜å.ÿÿÿÿÍå+ÿÿÿÿÿå-ÿÿÿÿ4æ0ÿÿÿÿ‚æ"ÿÿÿÿÁæ!ÿÿÿÿôæ
+*ÿÿÿÿ*ç
+Aÿÿÿÿuç
+dÿÿÿÿãç
+$ÿÿÿÿè1ÿÿÿÿMè1ÿÿÿÿè
+ÿÿÿÿœè5ÿÿÿÿêè&ÿÿÿÿé=ÿÿÿÿné&ÿÿÿÿÂé+ÿÿÿÿêÿÿÿÿ5ê]ÿÿÿÿ¢ê!5ÿÿÿÿùêKÿÿÿÿEë<"ÿÿÿÿ£ë$ÿÿÿÿÜë7
+ÿÿÿÿìÿÿÿÿfì;ÿÿÿÿÎì?ÿÿÿÿ,íÿÿÿÿUí2ÿÿÿÿ�íÿÿÿÿÀíÿÿÿÿòí=ÿÿÿÿAîIÿÿÿÿ¤î(ÿÿÿÿâîIÿÿÿÿEï!ÿÿÿÿ{ï!ÿÿÿÿ«ïÿÿÿÿÜï+ÿÿÿÿ	ð=ÿÿÿÿGð5ÿÿÿÿ}ð@ÿÿÿÿÂð7ÿÿÿÿúð-ÿÿÿÿ(ñÿÿÿÿEñ-ÿÿÿÿ‚ñ
+"	ÿÿÿÿÕñ?ÿÿÿÿò=ÿÿÿÿYò46ÿÿÿÿÃòTÿÿÿÿóxÿÿÿÿ�ókÿÿÿÿôjÿÿÿÿ€ôVÿÿÿÿÝôpÿÿÿÿTõHÿÿÿÿ£õ^ÿÿÿÿöSÿÿÿÿ\öGÿÿÿÿ¤öBÿÿÿÿ÷@3ÿÿÿÿ÷6ÿÿÿÿÀ÷+6ÿÿÿÿ#ø6+ÿÿÿÿ„ø]ÿÿÿÿâøcÿÿÿÿGùZQÿÿÿÿòùjÿÿÿÿ]úsÿÿÿÿÑúZÿÿÿÿ,û
+eÿÿÿÿ›ûCÿÿÿÿüûiÿÿÿÿfü!ÿÿÿÿ¡üv*ÿÿÿÿAýmÿÿÿÿ¯ý
+ƒÿÿÿÿ>þ
+BDÿÿÿÿÐþUÿÿÿÿFÿ
+Uÿÿÿÿ¥ÿ
+oÿÿÿÿ
+Rÿÿÿÿz
+rÿÿÿÿö
+C/ÿÿÿÿr
+9ÿÿÿÿµ
+:ÿÿÿÿù
+?ÿÿÿÿB‚aÿÿÿÿ+
+Nÿÿÿÿƒ
+5ÿÿÿÿÂ6\ÿÿÿÿT_(ÿÿÿÿÛ_ÿÿÿÿT
+cÿÿÿÿÁ
+…ÿÿÿÿP
+:ÿÿÿÿ”H?ÿÿÿÿnÿÿÿÿžrÿÿÿÿ%†ÿÿÿÿ¬p&ÿÿÿÿB	<4$Rÿÿÿÿ(
+
+Iÿÿÿÿ{
+Uÿÿÿÿã
+
+VÿÿÿÿC73ÿÿÿÿ­yÿÿÿÿ- ÿÿÿÿÔJÿÿÿÿ'
5#ÿÿÿÿ†
5#ÿÿÿÿå

+�ÿÿÿÿ|
+KÿÿÿÿÑsÿÿÿÿE
+Qÿÿÿÿ 
+Qÿÿÿÿû
+QÿÿÿÿV
+Qÿÿÿÿ±
+Qÿÿÿÿ
+QÿÿÿÿgsÿÿÿÿÛ
+Xÿÿÿÿ=
+Vÿÿÿÿ�
+Xÿÿÿÿÿsÿÿÿÿssÿÿÿÿç	SÿÿÿÿCmÿÿÿÿ·qÿÿÿÿ/oÿÿÿÿ¥ƒÿÿÿÿ0B\ÿÿÿÿÏB<ÿÿÿÿMAÿÿÿÿ§	Tÿÿÿÿ
+Šÿÿÿÿš
+¼ÿÿÿÿ`
+Pÿÿÿÿºkÿÿÿÿ0kÿÿÿÿœ
+3ÿÿÿÿÙBdÿÿÿÿRÿÿÿÿßpÿÿÿÿkS1ÿÿÿÿÿXÿÿÿÿm"EÿÿÿÿÔÕÿÿÿÿÁ0rÿÿÿÿdŠÿÿÿÿïnÿÿÿÿv #Gÿÿÿÿà bÿÿÿÿV!X$ÿÿÿÿí!7~ÿÿÿÿ¾"=ƒÿÿÿÿ~#0ÿÿÿÿ¹#Zÿÿÿÿ&$4@ÿÿÿÿš$73ÿÿÿÿ%~ÿÿÿÿ�%4¬ÿÿÿÿ}&&0ÿÿÿÿÓ&G¬ÿÿÿÿÆ'"0ÿÿÿÿ(0ÿÿÿÿZ(0ÿÿÿÿ©(Nÿÿÿÿù(iÿÿÿÿd)~ÿÿÿÿã)‡ÿÿÿÿo*QÿÿÿÿÁ*Lÿÿÿÿ+ ÿÿÿÿ=+Oÿÿÿÿ«+
+0<ÿÿÿÿ9,}ÿÿÿÿ	    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)
@@ -326,19 +332,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
@@ -395,8 +389,15 @@ 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
@@ -445,23 +446,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'
@@ -470,7 +470,9 @@ 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 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
@@ -480,10 +482,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
@@ -496,17 +502,17 @@ ppcboot header:
 %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 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 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 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: 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: 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: 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: 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: 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: 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)
@@ -523,11 +529,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: 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: 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: 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 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: 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:%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%pcrel_lo section symbol with an addend%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)
@@ -543,8 +561,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: %s ISA extension not in alphabetical order: '%s' must come before '%s'.-march=%s: %s must separate with _-march=%s: Duplicate %s ISA extension: '%s'-march=%s: Expect number after `%dp'.-march=%s: ISA string is not in canonical order. `%c'-march=%s: ISA string must begin with rv32 or rv64-march=%s: Invalid or unknown %s ISA extension: '%s'-march=%s: `d' extension requires `f' extension-march=%s: `q' extension requires `d' extension-march=%s: first ISA subset must be `e', `i' or `g'-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: unexpected ISA string at end: %s-march=%s: unsupported ISA subset `%c'-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<Unrecognised flag bits set><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,7 +575,7 @@ 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 %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: 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
@@ -565,7 +583,7 @@ ppcboot header:
 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
 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 unsupportedGOT 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,8 +591,8 @@ 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)
@@ -617,7 +635,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)
@@ -677,11 +695,11 @@ 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
@@ -702,36 +720,35 @@ 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
+dst_define_location %u too largedynamic 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 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 AArch64 used 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: Mis-matched ISA string to merge '%s' and '%s'.error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%derror: %pB: SB relative addressing conflicts with use of R9error: %pB: Unsupported XLEN (%u), you might be using 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 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 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 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
+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
+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
 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
@@ -740,30 +757,30 @@ 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 unsupportedsymbol needs debug section which does not existsymbol type STT_GNU_IFUNC is unsupportedsystem 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 section with a size (%warning: %pB has a corrupt string table index - ignoringwarning: %pB supports interworking, whereas %pB does notwarning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u.warning: %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
+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: 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: privilege spec version 1.9.1 can not be linked with other spec versions.warning: 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.34.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
+POT-Creation-Date: 2020-07-04 10:26+0100
+PO-Revision-Date: 2020-07-30 19:54+0300
 Last-Translator: Yuri Kozlov <yuray@komyakino.ru>
 Language-Team: Russian <gnu@d07.ru>
 Language: ru
@@ -962,19 +979,7 @@ Plural-Forms:  nplurals=3; plural=(n%10=
   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
@@ -1031,8 +1036,15 @@ 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 Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾
+%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ %pA Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.
+%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Â«%pAÂ» Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.
+%F%P: Ð�ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Ð³Ñ€ÑƒÐ¿Ð¿Ñƒ %pA Ñ†ÐµÐ»Ð¸ %pA Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñƒ. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ðµ Ð±ÐµÐ· --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E
 %F%P: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E
@@ -1081,23 +1093,22 @@ 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: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»Ðµ
 %H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Â«%s+%vÂ» Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð·Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹
-%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� toc Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s
 %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,6 +1117,8 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð´Ð»Ñ� Â«%pTÂ»
 %P: Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ñ‚Ð¾Ñ‡ÐµÐº Ð²Ñ…Ð¾Ð´Ð°: Ð² Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… %pB Ð¸ %pB
 %P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�
+%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ñ� DT_TEXTREL Ð¼Ð¾Ð³ÑƒÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� %s
+%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² PIE
 %P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ
 %P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð½ÐµÑ�Ð²Ð½Ñ‹Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ GNU Ð¼Ð¾Ð³ÑƒÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�
 %X%C: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
@@ -1116,10 +1129,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: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�
@@ -1132,16 +1149,16 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 %XÂ«%sÂ» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð· %pB: Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½ Ð² Ð¾Ñ‚Ð±Ñ€Ð¾ÑˆÐµÐ½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ» Ð¸Ð· %pB
 %pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ [Â«%pAÂ» Ð² %pB] Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹%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 (%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: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %u Ð¿ÑƒÑ�Ñ‚%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %u Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ð°%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %u Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %u Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»%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): Ð¿Ñ€Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¸ Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %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 Ñ� Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %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: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%pB: GNU_MBIND Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%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 %s Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»%pB: Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ TLS Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð½Ðµ Ñ€Ñ�Ð´Ð¾Ð¼:%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: Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ aout ÑƒÐºÐ°Ð·Ð°Ð½ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…: %u%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: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOT%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: 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: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ† Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð·Ð° Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸ÐµÐ¼ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 835769 Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° (Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„Ð°Ð¹Ð»)%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð² 0x%%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: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%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)
@@ -1158,11 +1175,23 @@ 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: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ %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: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¸Ð¼ÐµÐ½Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s%pB: Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»%pB: Ð½ÐµÑ‚ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° 0
+%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: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ (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Â» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ %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:Â» Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ 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: Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%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: Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ� Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 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: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ� Ð¼Ð°ÑˆÐ¸Ð½Ð° %#x%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: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: 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: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ�Ñ‚Ñ€Ð¾Ðº (%#lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#lx)%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: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½ 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:%pA: %s Ð¸ %s Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð±Ñ‹Ñ‚ÑŒ Ð² Ð¾Ð´Ð½Ð¾Ð¼ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð² Ð½ÐµÐ²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»%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 Ñ„Ð°Ð¹Ð»ÐµÑ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼%s  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                          %lu
+  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc            %lu
+  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc                     %lu
+  Ð¾Ð±Ð° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                        %lu
+  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                    %lu
+  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc   %lu
+  Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc             %lu
+  Ð¾Ð±Ð° Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                %lu
+  plt-Ð²Ñ‹Ð·Ð¾Ð²                            %lu
+  Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ‘Ð½Ð½Ñ‹Ð¹ plt-Ð²Ñ‹Ð·Ð¾Ð²                %lu
+  plt-Ð²Ñ‹Ð·Ð¾Ð² Ð½Ðµ toc                     %lu
+  Ð¾Ð±Ð° plt-Ð²Ñ‹Ð·Ð¾Ð²Ð°                       %lu
+  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚                   %lu%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)
 (Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)
@@ -1178,8 +1207,8 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 *Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾**Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾*        , Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %#08lx
 , Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼: %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>
+, Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð²ÐµÐºÑ‚Ð¾Ñ€ rva: - %pB Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼, Ð° %pB Ð½ÐµÑ‚-march=%s: %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ð½Ðµ Ð² Ð°Ð»Ñ„Ð°Ð²Ð¸Ñ‚Ð½Ð¾Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐµ: Â«%sÂ» Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ð´Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÐ´ Â«%sÂ».-march=%s: %s Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ñ‚Ð´ÐµÐ»Ñ�Ñ‚ÑŒÑ�Ñ� _-march=%s: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� %s ISA: Â«%sÂ»-march=%s: Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ñ‡Ð¸Ñ�Ð»Ð¾ Ð¿Ð¾Ñ�Ð»Ðµ Â«%dpÂ».-march=%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð½Ðµ Ð² ÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐµ. Â«%cÂ»-march=%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð´Ð¾Ð»Ð¶Ð½Ð° Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑ�Ñ� Ñ� rv32 Ð¸Ð»Ð¸ rv64-march=%s: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¸Ð»Ð¸ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA %s: Â«%sÂ»-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÑŽ Â«dÂ» Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«fÂ»-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÑŽ Â«qÂ» Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«dÂ»-march=%s: Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ð¿Ð¾Ð´Ð½Ð°Ð±Ð¾Ñ€ ISA Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«eÂ», Â«iÂ» Ð¸Ð»Ð¸ Â«gÂ»-march=%s: rv%de Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð±Ð°Ð·Ð° ISA-march=%s: rv32 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«qÂ»-march=%s: rv32e Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«fÂ»-march=%s: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð² ÐºÐ¾Ð½Ñ†Ðµ: %s-march=%s: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿Ð¾Ð´Ð½Ð°Ð±Ð¾Ñ€ ISA Â«%cÂ»-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; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE<Ð�ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð½Ð°Ð±Ð¾Ñ€ Ð±Ð¸Ñ‚Ð¾Ð² Ñ„Ð»Ð°Ð³Ð°><Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð¸> %s<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ð´Ð»Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x>
 <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#lx>
 <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾><Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°: %d>
 <Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³Ð¸ Ð¼Ð°Ñ�ÐºÐ¸><Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾>Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @pltoff Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°BASE_IMAGE       ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ� BFD %s Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶Ð¸Ð» Ð¾ÑˆÐ¸Ð±ÐºÑƒ %s:%dÐ’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð² Ð½Ð° %s:%d
@@ -1192,7 +1221,7 @@ 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: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %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: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d Ð² .debug_lineÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽDW_EH_PE_datarel Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ñ‚Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹:
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸:
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s
 Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s Ñ€Ñ�Ð´Ð¾Ð¼ Ñ� %s Ð² Ñ�Ñ‚Ñ€Ð¾ÐºÐµ %d Ð² %s
@@ -1200,7 +1229,7 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ  = 0x%.8lx (%ld)
 Ð¾ÑˆÐ¸Ð±ÐºÐ°: %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 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GOT Ð¸ PLT Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ¾Ð¼Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GOT Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¾ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ GP Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°ÐžÑ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°Ð�Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldah Ð¸ lda Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GPDISPÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²:
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ FPU)
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, Ð»ÑŽÐ±Ð¾Ð¹ FPU)
 Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (MIPS32r2 64-bit FPU 12 Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)
@@ -1208,8 +1237,8 @@ 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)
@@ -1252,7 +1281,7 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %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 (Ñ�Ñ‚ÐµÐº Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð°)
@@ -1312,11 +1341,11 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %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, [Ñ‡ÑŒÑ‘ Ð¸Ð¼Ñ� Ð¿Ð¾Ñ‚ÐµÑ€Ñ�Ð½Ð¾]__tls_get_addr Ð²Ñ‹Ð·Ð²Ð°Ð»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ�Ð¾ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ� Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚Â«%sÂ» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½Ðµ Ð¿ÑƒÑ�Ñ‚ÑƒÑŽ Ð²Ñ…Ð¾Ð´Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽÐ¾Ð±ÑŠÐµÐºÑ‚ 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: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ�: %#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_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
@@ -1337,37 +1366,36 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð¸ 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 Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» %sÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ctbpÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __epÐ½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __gpÐ½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð· Â«%sÂ» Ð¸Ð· Â«%sÂ»Ð¦ÐŸ=HC11]Ð¦ÐŸ=HC12]Ð¦ÐŸ=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€=XGATE]Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¾ÑˆÐ¸Ð±ÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�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 Ñ�Ð¾Ð·Ð´Ð°Ð½Ð° Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� %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: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° x86 (0x%x): 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 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�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: Ð¾Ð±ÑŠÐµÐºÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ, Ð·Ð°Ð´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÐµÐ¼, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ñ�Ð±Ð¾Ñ€ÐºÐ¸ Â«%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Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹ Ð¦ÐŸ Ð² Ñ„Ð°Ð¹Ð»Ð°Ñ… 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
+Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78 Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¾ Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð½Ð¸Ð¶Ð½ÑŽÑŽ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ�Ñ‚ÐµÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� %sÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ/Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ñ�Ñ‚Ñ€Ð°Ð½Ð½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�ÑƒÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Â«%sÂ» Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¹ Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð´Ð¾Ð·Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .got.locÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐµ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ðµ: Ð¾Ñ�Ñ‚Ð°Ñ‘Ñ‚Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ� %lu; Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¼ Ð´ÐµÑ„ÐµÐºÑ‚ÐµÐ²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ %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
+Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ 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 Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ
+Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %sÐ½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²Ð½Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%v Ð¿Ð»ÑŽÑ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ� 0x%v Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ
 Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @fptrÐ½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ�Ñ€Ð°Ð·Ð´ÐµÐ», Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ñ‹Ð¹ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð°Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² GOTÐ½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²ÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ð½Ñ‹Ðµ=%lx Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d
 Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� env Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð°
  [Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾]Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ Ð�Ð• error-free !Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�ÐºÐ»ÐµÐ¹ÐºÐ¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ÑƒÐ¾Ð´Ð½Ð¾Ð¹ Ð¸Ð· Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ñ‚Ð¾, Ñ‡Ñ‚Ð¾ Ð² ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ ÐºÐ¾Ð´Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ñ� Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼, Ñ‡ÐµÐ¼ Ð±Ñ‹Ð»Ð¾ Ð¾Ð±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¾ Ð² ÐµÐ³Ð¾ Ð¼ÐµÑ�Ñ‚Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ�Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ�Ð»Ðµ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ð¾Ð¹ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ
 Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lxÑ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx:Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx: Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lxÑ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lx:Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ� bkpt 0x%08x
 Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» recbeg: Ð¸Ð¼Ñ�: %.*s
 recend
-Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] Ð² Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %04lxÑ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð´Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÑŽÑ€ÐµÐ³Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° %%g%d: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pBÐ² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ
+Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð° Ð´Ð»Ñ� Ð´Ð»Ð¸Ð½Ñ‹ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð±Ð°Ð½ÐºÐ¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� [%lx:%04lx] Ð² Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %04lxÑ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ð´Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼Ð¾Ð¶ÐµÑ‚ Ð¿Ñ€Ð¸Ð²ÐµÑ�Ñ‚Ð¸ Ðº Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÑŽÑ€ÐµÐ³Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° %%g%d: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %pBÐ² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ
 Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) *Ð�Ð•Ð˜Ð—Ð’Ð•Ð¡Ð¢Ð�Ðž*Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½Ðµ-REL psectÐ¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼ÐµÐ¶Ð´Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ�ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ Â«%pBÂ»Ð¿ÐµÑ€ÐµÐ¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %pB: %s
 Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ cmd %drtnbeg
 rtnend: Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%08x
@@ -1376,26 +1404,30 @@ Plural-Forms:  nplurals=3; plural=(n%10=
 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 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ», Ð½Ð¾ ÐµÐ³Ð¾ Ð½Ðµ Ñ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ STT_GNU_IFUNC Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð°Ð¼Ð°Ñ�Ñ�Ð¸Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹:
 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Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%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Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð½Ñ‹Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ñ…/Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ gpÐ°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 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 Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ (%Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %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: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ Ð½ÐµÑ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²Ð¸Ñ� Ð´Ð»Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�
+Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÑƒÐ¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ %s, Ð° Ð½Ðµ %sÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --enable-non-contiguous-regions Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%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 Ð½Ðµ ÑƒÑ�Ñ‚Ð°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�, Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ð½ ÑƒÐ¶Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚ÑƒÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ 1.9.1 Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ñ�Ð¼Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¹.Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%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: 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: error: attribute section length too small: %%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%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: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº %#%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %# Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pB(%pA) Ñ€Ð°Ð²ÐµÐ½ %#, Ñ�Ñ‚Ð¾ Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ„Ð°Ð¹Ð»Ð° (%# Ð±Ð°Ð¹Ñ‚)Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB(%pA) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%# Ð±Ð°Ð¹Ñ‚)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%#) Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¸Ð»Ð¸ Ñ€Ð°Ð²Ð½Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ %s (%#)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð´Ð°Ð½Ð½Ñ‹Ñ… (%#) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ÐµÑ€Ð°Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ‚Ð¸Ð¿Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾ %#Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð» (%)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ð±Ð¾Ð»ÑŒÑˆÐµ (%) Ñ‡ÐµÐ¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾, Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%#lx)Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ %Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIE %%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð°: %%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: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/ru.po ./bfd/po/ru.po
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/ru.po	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/ru.po	2021-12-16 01:57:38.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.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd 2.31.90\n"
+"Project-Id-Version: bfd 2.34.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"
+"POT-Creation-Date: 2020-07-04 10:26+0100\n"
+"PO-Revision-Date: 2020-07-30 19:54+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru\n"
@@ -19,222 +19,235 @@ msgstr ""
 "X-Generator: Lokalize 2.0\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:1613 pdp11.c:1236 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:1577 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:1580 vms-alpha.c:8040
 msgid "*unknown*"
 msgstr "*Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾*"
 
-#: aoutx.h:1721
+#: aoutx.h:1716 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:2412 aoutx.h:2430 pdp11.c:2058
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: aoutx.h:4086
+#: aoutx.h:4087 pdp11.c:3441
 #, 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
+#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758
 #: 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:812 elf32-arc.c:532
+#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677
+#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429
+#: elf32-csky.c:990 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:2558
+#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400
+#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305
+#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390
+#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440
+#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692
+#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137
+#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237
+#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040
+#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 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-sh.c:438 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:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270
+#: elf32-vax.c:290 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:1113 elf64-alpha.c:4067
+#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254
+#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264
+#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375
+#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786
+#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639
+#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215
+#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x"
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5435 pdp11.c:3864
 #, 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:2249
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ð² Ð°Ñ€Ñ…Ð¸Ð²: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð¼ÐµÑ‚ÐºÐ° Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸"
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr "%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° lto Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¼Ð¾Ð´ÑƒÐ»ÑŒ"
 
-#: archive.c:2559
+#: archive.c:2602
 msgid "Reading archive file mod timestamp"
 msgstr "Ð§Ñ‚ÐµÐ½Ð¸Ðµ Ð¼ÐµÑ‚ÐºÐ¸ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ� Ð°Ñ€Ñ…Ð¸Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°"
 
-#: archive.c:2583
+#: archive.c:2626
 msgid "Writing updated armap timestamp"
 msgstr "Ð—Ð°Ð¿Ð¸Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñ‘Ð½Ð½Ð¾Ð¹ Ð¼ÐµÑ‚ÐºÐ¸ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ armap"
 
-#: bfd.c:449
+#: bfd.c:677
 msgid "no error"
 msgstr "Ð½ÐµÑ‚ Ð¾ÑˆÐ¸Ð±ÐºÐ¸"
 
-#: bfd.c:450
+#: bfd.c:678
 msgid "system call error"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð°"
 
-#: bfd.c:451
+#: bfd.c:679
 msgid "invalid bfd target"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ñ†ÐµÐ»ÑŒ bfd"
 
-#: bfd.c:452
+#: bfd.c:680
 msgid "file in wrong format"
 msgstr "Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ"
 
-#: bfd.c:453
+#: bfd.c:681
 msgid "archive object file in wrong format"
 msgstr "Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ð² Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ"
 
-#: bfd.c:454
+#: bfd.c:682
 msgid "invalid operation"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ�"
 
-#: bfd.c:455
+#: bfd.c:683
 msgid "memory exhausted"
 msgstr "Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð°Ñ�ÑŒ Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ"
 
-#: bfd.c:456
+#: bfd.c:684
 msgid "no symbols"
 msgstr "Ð½ÐµÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
 
-#: bfd.c:457
+#: bfd.c:685
 msgid "archive has no index; run ranlib to add one"
 msgstr "Ð°Ñ€Ñ…Ð¸Ð² Ð±ÐµÐ· Ð¸Ð½Ð´ÐµÐºÑ�Ð°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚Ðµ ranlib Ð´Ð»Ñ� Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ñ�"
 
-#: bfd.c:458
+#: bfd.c:686
 msgid "no more archived files"
 msgstr "Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ðµ Ñ„Ð°Ð¹Ð»Ñ‹ Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¸Ñ�ÑŒ"
 
-#: bfd.c:459
+#: bfd.c:687
 msgid "malformed archive"
 msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ð²"
 
-#: bfd.c:460
+#: bfd.c:688
 msgid "DSO missing from command line"
 msgstr "Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñ�Ñ‚Ñ€Ð¾ÐºÐµ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ DSO"
 
-#: bfd.c:461
+#: bfd.c:689
 msgid "file format not recognized"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½"
 
-#: bfd.c:462
+#: bfd.c:690
 msgid "file format is ambiguous"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½"
 
-#: bfd.c:463
+#: bfd.c:691
 msgid "section has no contents"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
 
-#: bfd.c:464
+#: bfd.c:692
 msgid "nonrepresentable section on output"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ», Ð½ÐµÐ¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ñ‹Ð¹ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð°"
 
-#: bfd.c:465
+#: bfd.c:693
 msgid "symbol needs debug section which does not exist"
 msgstr "Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ», Ð½Ð¾ ÐµÐ³Ð¾ Ð½Ðµ Ñ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚"
 
-#: bfd.c:466
+#: bfd.c:694
 msgid "bad value"
 msgstr "Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ"
 
-#: bfd.c:467
+#: bfd.c:695
 msgid "file truncated"
 msgstr "Ñ„Ð°Ð¹Ð» ÑƒÑ�ÐµÑ‡Ñ‘Ð½"
 
-#: bfd.c:468
+#: bfd.c:696
 msgid "file too big"
 msgstr "Ñ„Ð°Ð¹Ð» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹"
 
-#: bfd.c:469
+#: bfd.c:697
+msgid "sorry, cannot handle this file"
+msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ�Ñ‚Ð¾Ñ‚ Ñ„Ð°Ð¹Ð»"
+
+#: bfd.c:698
 #, c-format
 msgid "error reading %s: %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� %s: %s"
 
-#: bfd.c:470
+#: bfd.c:699
 msgid "#<invalid error code>"
 msgstr "#<Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ Ð¾ÑˆÐ¸Ð±ÐºÐ¸>"
 
-#: bfd.c:1429
+#: bfd.c:1658
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ� BFD %s Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶Ð¸Ð» Ð¾ÑˆÐ¸Ð±ÐºÑƒ %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:1671
 #, 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:1676
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr "Ð’Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð² Ð½Ð° %s:%d\n"
 
-#: bfd.c:1449
+#: bfd.c:1678
 msgid "Please report this bug.\n"
 msgstr "ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð°, Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐµ.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:207
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr "Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ð½Ñ‹Ðµ=%lx Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:210
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "Ð½Ðµ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� env Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð°\n"
@@ -254,118 +267,113 @@ msgstr "Ð¿ÐµÑ€ÐµÐ¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� %
 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:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953
 msgid "GP relative relocation used when GP not defined"
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¾ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ GP Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1441
 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:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962
 #, 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
+#: coff-go32.c:156 coffswap.h:785
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: 0x%lx > 0xffff"
+
+#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
 #: elf64-mips.c:3451 elfn32-mips.c:3276
 msgid "GP relative relocation when _gp not defined"
 msgstr "ÐžÑ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GP, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:2844
 #, 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:3607 coff64-rs6000.c:2153
 #, 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:778 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:789
 #, 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:807 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:832 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:849 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:975 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:985 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:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¿Ñ€Ð¸ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ð¸"
 
-#: coff-sh.c:1454
+#: coff-sh.c:1451
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr "%pB: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð¿ÐµÑ€ÐµÐ´ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ñ‹ Ð¾Ð±Ñ‰Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹"
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2781 cofflink.c:2948
 #, 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-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %ld Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�Ñ…"
 
-#: coff-tic80.c:441
-#, c-format
-msgid "unsupported relocation type %#x"
-msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#x"
-
-#: coff-tic80.c:672 cofflink.c:3127
-#, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %#<PRIx64> Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
-
-#: coffcode.h:954
+#: coffcode.h:961
 #, 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:996
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ COMDAT"
 
-#: coffcode.h:1001
+#: coffcode.h:1008
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² COMDAT Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: coffcode.h:1011
+#: coffcode.h:1018
 #, c-format
 msgid "%pB: warning: no symbol for section '%s' found"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
@@ -373,311 +381,315 @@ 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:1249
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s"
 
-#: coffcode.h:1306
+#: coffcode.h:1318
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%#lx)"
 
-#: coffcode.h:1917
+#: coffcode.h:1934 coffcode.h:1999
 #, c-format
 msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´Ð°ÐµÑ‚Ñ�Ñ�, Ñ‡Ñ‚Ð¾ ÐµÑ�Ñ‚ÑŒ 0xffff Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹, Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ�"
 
-#: coffcode.h:2315
+#: coffcode.h:2365
 #, c-format
 msgid "unrecognized TI COFF target id '0x%x'"
 msgstr "Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ Ñ†ÐµÐ»Ð¸ TI COFF Â«0x%xÂ»"
 
-#: coffcode.h:2599
+#: coffcode.h:2643
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½ÐµÑ�ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÑŽÑ‰ÐµÐ¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ: %ld"
 
-#: coffcode.h:2910
+#: coffcode.h:2951
 #, c-format
 msgid "%pB: page size is too large (0x%x)"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ñ‹ (0x%x)"
 
-#: coffcode.h:3070
+#: coffcode.h:3111
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3530
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ñ‚Ñ€Ð¾Ðº Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %ld"
 
-#: coffcode.h:3589
+#: coffcode.h:3630
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr "%pB:%s Ñ€Ð°Ð·Ð´ÐµÐ» %s: Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 2**%u Ð½Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼Ð¾"
 
-#: coffcode.h:4276
+#: coffcode.h:4329
 #, c-format
 msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ�Ñ‚Ñ€Ð¾Ðº (%#lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#lx)"
 
-#: coffcode.h:4291
+#: coffcode.h:4349
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñƒ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº"
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4383 coffcode.h:4397
 #, 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:4411
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� %d Ð² Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸"
 
-#: coffcode.h:4366
+#: coffcode.h:4424
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð´Ð»Ñ� Â«%sÂ»"
 
-#: coffcode.h:4774
+#: coffcode.h:4845
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� %d Ð´Ð»Ñ� %s, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: coffcode.h:4904
+#: coffcode.h:4975
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: coffcode.h:5050
+#: coffcode.h:5125
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: coffgen.c:178 elf.c:1216
+#: coffgen.c:179 elf.c:1236
 #, c-format
 msgid "%pB: unable to initialize compress status for section %s"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ�Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
 
-#: coffgen.c:202 elf.c:1227
+#: coffgen.c:203 elf.c:1247
 #, c-format
 msgid "%pB: unable to initialize decompress status for section %s"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñ�Ð¾Ñ�Ñ‚Ð¾Ñ�Ð½Ð¸Ðµ Ñ€Ð°Ð·Ð¶Ð°Ñ‚Ð¸Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s"
 
-#: coffgen.c:1657
-#, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: %#<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: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� %#<PRIx64> Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %#<PRIx64>"
-
-#: coffgen.c:1735
+#: coffgen.c:1704
 #, 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:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921
+#: xcofflink.c:4500
 msgid "<corrupt>"
 msgstr "<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾>"
 
-#: coffgen.c:2114
+#: coffgen.c:2085
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ� Ð¾ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð¸> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2675 elflink.c:14624 linker.c:2956
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3016 elflink.c:13617
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr "ÑƒÐ´Ð°Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð² Ñ„Ð°Ð¹Ð»Ðµ Â«%pBÂ»"
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3093 elflink.c:13835
 msgid "warning: gc-sections option ignored"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
 
-#: cofflink.c:352
+#: cofflink.c:366
 #, 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:471 elf64-ia64-vms.c:5200 elflink.c:5131
 #, 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:2352
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ», Ð½Ð¾ Ð¾Ð½ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2415 elflink.c:11082
 #, 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:2717
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2725
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x > 0xffff"
 
-#: coffswap.h:789
+#: cofflink.c:3110
 #, 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:799
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:271
+#, c-format
+msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pB(%pA) Ñ€Ð°Ð²ÐµÐ½ %#<PRIx64>, Ñ�Ñ‚Ð¾ Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ„Ð°Ð¹Ð»Ð° (%#<PRIx64> Ð±Ð°Ð¹Ñ‚)"
+
+#: compress.c:282
 #, 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:303 cpu-arm.c:315
 #, 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:451
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ð² %pB"
 
-#: dwarf2.c:544
+#: dwarf2.c:543
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
 
-#: dwarf2.c:579
+#: dwarf2.c:578
 #, 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:1165
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð²"
 
-#: dwarf2.c:1275
+#: dwarf2.c:1333
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ FORM: %#x"
 
-#: dwarf2.c:1581
+#: dwarf2.c:1646
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº (Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)"
 
-#: dwarf2.c:1926
+#: dwarf2.c:1994
 msgid "DWARF error: zero format count"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ"
 
-#: dwarf2.c:1936
+#: dwarf2.c:2004
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð´Ð°Ð½Ð½Ñ‹Ñ… (%#<PRIx64>) Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ÐµÑ€Ð°"
 
-#: dwarf2.c:1977
+#: dwarf2.c:2045
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ‚Ð¸Ð¿Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾ %#<PRIu64>"
 
-#: dwarf2.c:2057
+#: dwarf2.c:2112
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ… Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð» (%<PRId64>)"
 
-#: dwarf2.c:2087
+#: dwarf2.c:2142
 #, 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:2155
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d Ð² .debug_line"
 
-#: dwarf2.c:2110
+#: dwarf2.c:2165
 msgid "DWARF error: ran out of room reading prologue"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ð°"
 
-#: dwarf2.c:2128
+#: dwarf2.c:2183
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ %u Ñ�ÐµÐ»ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ñ�Ñ‚Ñ€Ð¾ÐºÐ°Ñ…"
 
-#: dwarf2.c:2155
+#: dwarf2.c:2210
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ðµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ"
 
-#: dwarf2.c:2174
+#: dwarf2.c:2229
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð¾Ñ�ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾ Ð¿Ñ€Ð¸ Ñ‡Ñ‚ÐµÐ½Ð¸Ð¸ ÐºÐ¾Ð´Ð¾Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2420
 msgid "DWARF error: mangled line number section"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ñ€Ð°Ð·Ð´ÐµÐ» Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½"
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:2905
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ñ€ÐµÐºÑƒÑ€Ñ�Ð¸Ñ� Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð°"
+
+#: dwarf2.c:2939 dwarf2.c:3033
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIE"
 
-#: dwarf2.c:2889
+#: dwarf2.c:2955
 #, 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:3011
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ñ‹Ð¹ Ñ�ÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ DIE %<PRIu64>"
+
+#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618
 #, 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:3381
+#, c-format
+msgid "DWARF error: could not find variable specification at offset %lx"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² DWARF: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %lx"
 
-#: dwarf2.c:3376
+#: dwarf2.c:3537
 #, 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:3581
 #, 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
+#: dwarf2.c:3685
 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:982
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: isymMax (%ld) Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ ifdMax (%ld)"
 
-#: ecoff.c:1268
+#: ecoff.c:1279
 #, c-format
 msgid "unknown basic type %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ %d"
 
-#: ecoff.c:1525
+#: ecoff.c:1536
 #, c-format
 msgid ""
 "\n"
@@ -686,7 +698,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1543 ecoff.c:1546
 #, c-format
 msgid ""
 "\n"
@@ -695,7 +707,7 @@ msgstr ""
 "\n"
 "      ÐŸÐµÑ€Ð²Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1559
 #, c-format
 msgid ""
 "\n"
@@ -704,7 +716,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» End+1: %-7ld   Ð¢Ð¸Ð¿:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1566
 #, c-format
 msgid ""
 "\n"
@@ -713,7 +725,7 @@ msgstr ""
 "\n"
 "      Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1574
 #, c-format
 msgid ""
 "\n"
@@ -722,7 +734,7 @@ msgstr ""
 "\n"
 "      struct; Ñ�Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1579
 #, c-format
 msgid ""
 "\n"
@@ -731,7 +743,7 @@ msgstr ""
 "\n"
 "      union; Ñ�Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1584
 #, c-format
 msgid ""
 "\n"
@@ -740,7 +752,7 @@ msgstr ""
 "\n"
 "      enum; Ñ�Ð¸Ð¼Ð²Ð¾Ð» End+1: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1590
 #, c-format
 msgid ""
 "\n"
@@ -749,22 +761,22 @@ msgstr ""
 "\n"
 "      Ð¢Ð¸Ð¿: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:449
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Â«%pAÂ»: %#llx"
 
-#: elf-attrs.c:487
+#: elf-attrs.c:490
 #, c-format
 msgid "%pB: error: attribute section length too small: %<PRId64>"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð°: %<PRId64>"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:618
 #, 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:628
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ‚ÐµÐ³ Â«%d, %sÂ» Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ñ‚ÐµÐ³Ð¾Ð¼ Â«%d, %sÂ»"
@@ -788,91 +800,90 @@ msgstr "ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ FDE Ð² %p
 msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
 msgstr "Ð² Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ¼, Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ� Ð¾ Ð½Ðµ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ .eh_frame_hdr Ð¸Ð·-Ð·Ð° ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� FDE Ð±ÑƒÐ´ÑƒÑ‚ Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°Ñ‚ÑŒÑ�Ñ�"
 
-#: elf-eh-frame.c:1868
+#: elf-eh-frame.c:1866
 #, c-format
 msgid "%pB: %pA not in order"
 msgstr "%pB: %pA Ð½Ðµ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð¾"
 
-#: elf-eh-frame.c:1882
+#: elf-eh-frame.c:1880
 #, c-format
 msgid "%pB: %pA invalid input section size"
 msgstr "%pB: %pA Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: elf-eh-frame.c:1890
+#: elf-eh-frame.c:1888
 #, c-format
 msgid "%pB: %pA points past end of text section"
 msgstr "%pB: %pA ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚ÐµÐºÑ�Ñ‚Ð°"
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2141
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr "DW_EH_PE_datarel Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ñ‚Ð¾Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹"
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2312
 #, 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:2335
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2491
 msgid ".eh_frame_hdr entry overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° .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 Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� FDE"
 
-#: 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: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ 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:2145 elf32-avr.c:1508 elf32-bfin.c:3126
+#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510
+#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494
+#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069
+#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526
+#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402
+#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543
+#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680
+#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744
 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:2149 elf32-avr.c:1512 elf32-bfin.c:3130
+#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514
+#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864
+#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990
+#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371
+#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547
+#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684
+#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576
+#: elfxx-tilegx.c:3748
 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:1472 elf32-crx.c:928 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280
+#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742
+#: elf32-score7.c:2551 elf32-spu.c:5091
 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:2166 elf32-avr.c:1520 elf32-bfin.c:3138
+#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522
+#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506
+#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081
+#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538
+#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300
+#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829
+#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095
+#: elf32-tilepro.c:3392 elf32-v850.c:2314 elf32-visium.c:692
+#: elf32-xstormy16.c:941 elf64-bpf.c:525 elf64-mmix.c:1553 elfxx-tilegx.c:3756
 msgid "internal error: unknown error"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
@@ -881,38 +892,35 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ
 msgid "%pB: unsupported transition from %s to %s"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ Ð¸Ð· %s Ð² %s"
 
-#: elf-m10300.c:1198
+#: elf-m10300.c:1196
 #, 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:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354
+#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283
+#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062
+#: elfxx-sparc.c:3795 elfxx-tilegx.c:3667 elfnn-aarch64.c:5505
+#: elfnn-aarch64.c:7102
 #, 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:2154
 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ð¾Ð±Ñ‰ÐµÐ¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ (Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ -fpic?)"
 
-#: elf-m10300.c:2160
+#: elf-m10300.c:2158
 #, 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:2161
 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:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364
+#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr "%P%F: --relax Ð¸ -r Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ð¼ÐµÑ�Ñ‚Ðµ\n"
 
@@ -954,7 +962,7 @@ msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾
 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:316 elf-properties.c:394
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB Ð¸ %pB\n"
 
@@ -962,115 +970,110 @@ msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:339
+#: elf-properties.c:337
 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:346
 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:388
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr "Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ %W Ð¿Ñ€Ð¸ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¸ %pB (Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾) Ð¸ %pB (0x%v)\n"
 
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:550 elf-properties.c:552
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:551
 msgid "Merging program properties\n"
 msgstr "ÐžÐ±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ñ… Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð²\n"
 
 #. PR 17512: file: f057ec89.
-#: elf.c:345
+#: elf.c:336
 #, c-format
 msgid "%pB: attempt to load strings from a non-string section (number %d)"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ Ð¸Ð· Ð½Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (Ð½Ð¾Ð¼ÐµÑ€ %d)"
 
-#: elf.c:360
+#: elf.c:361
 #, 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:513 elfnn-aarch64.c:8096
 #, 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:675
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð³Ñ€ÑƒÐ¿Ð¿: %#<PRIx64>"
 
-#: elf.c:728
+#: elf.c:720
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ SHT_GROUP [%u]"
 
-#: elf.c:747
+#: elf.c:739
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr "%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² Ð³Ñ€ÑƒÐ¿Ð¿"
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:768
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Ð³Ñ€ÑƒÐ¿Ð¿ Â«%pAÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾"
 
-#: elf.c:837
+#: elf.c:829
 #, c-format
 msgid "%pB: no group info for section '%pA'"
 msgstr "%pB: Ð½ÐµÑ‚ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
 
-#: elf.c:868 elf.c:3886 elflink.c:11403
+#: elf.c:859 elf.c:3955
 #, c-format
 msgid "%pB: warning: sh_link not set for section `%pA'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ Ð·Ð°Ð´Ð°Ð½ sh_link Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
 
-#: elf.c:888
+#: elf.c:879
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ sh_link [%d] Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%pAÂ»"
 
-#: elf.c:901
+#: elf.c:892
 #, 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:913
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr "%pB: Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² %u Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½"
 
-#: elf.c:945
+#: elf.c:936
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ» Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ [%pA]"
 
-#: elf.c:1408
+#: elf.c:1438
 #, c-format
 msgid "%pB: invalid sh_link field (%d) in section number %d"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¿Ð¾Ð»Ðµ sh_link (%d) Ð² Ð½Ð¾Ð¼ÐµÑ€Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d"
 
-#: elf.c:1424
+#: elf.c:1454
 #, c-format
 msgid "%pB: failed to find link section for section %d"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ñ�Ñ‹Ð»Ð¾Ðº Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d"
 
-#: elf.c:1451
+#: elf.c:1481
 #, c-format
 msgid "%pB: failed to find info section for section %d"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d"
 
-#: elf.c:1623
+#: elf.c:1653
 #, c-format
 msgid ""
 "\n"
@@ -1079,7 +1082,7 @@ msgstr ""
 "\n"
 "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹:\n"
 
-#: elf.c:1665
+#: elf.c:1695
 #, c-format
 msgid ""
 "\n"
@@ -1088,7 +1091,7 @@ msgstr ""
 "\n"
 "Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»:\n"
 
-#: elf.c:1806
+#: elf.c:1836
 #, c-format
 msgid ""
 "\n"
@@ -1097,7 +1100,7 @@ msgstr ""
 "\n"
 "ÐžÐ±ÑŠÑ�Ð²Ð»ÐµÐ½Ð¸Ñ� Ð²ÐµÑ€Ñ�Ð¸Ð¹:\n"
 
-#: elf.c:1831
+#: elf.c:1861
 #, c-format
 msgid ""
 "\n"
@@ -1106,577 +1109,678 @@ msgstr ""
 "\n"
 "Ð’ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ñ�Ñ‹Ð»Ð¾Ðº:\n"
 
-#: elf.c:1836
+#: elf.c:1866
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð¸Ð· %s:\n"
 
-#: elf.c:2037
+#: elf.c:2082
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð² Ð·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ð¾Ñ�Ñ‚Ñ�Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²"
 
-#: elf.c:2145
+#: elf.c:2190
 #, c-format
 msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u"
 
-#: elf.c:2229
+#: elf.c:2274
 #, c-format
 msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð¿ÑƒÑ�Ñ‚Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %u"
 
-#: elf.c:2342
+#: elf.c:2387
 #, 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:2478
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
+
+#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ [%#x] Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf.c:3248
+#: elf.c:3308
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÑ€Ð°Ñ‚Ð½Ð¾Ñ�Ñ‚ÑŒ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ� %d Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ°"
 
-#: elf.c:3278
+#: elf.c:3341
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ» Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½ Ð½Ð° PROGBITS"
 
-#: elf.c:3754
+#: elf.c:3824
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %u"
 
-#: elf.c:3839
+#: elf.c:3909
 #, 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:3934
 #, 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:4495
 #, 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:5086
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ TLS Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð½Ðµ Ñ€Ñ�Ð´Ð¾Ð¼:"
 
-#: elf.c:5020
+#: elf.c:5093
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5097
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\t Ð½Ðµ-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:5687
 #, 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:5713
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹, Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð°Ð¹Ñ‚ÐµÑ�ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -N"
 
-#: elf.c:5654
+#: elf.c:5830
 #, 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:5967
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
+
+#: elf.c:6007
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ %d"
 
-#: elf.c:5839
+#: elf.c:6139
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½ Ð½Ðµ Ð² Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ðµ"
 
-#: elf.c:6072
+#: elf.c:6300
 #, 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
-#, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
-
-#: elf.c:6606
+#: elf.c:6804
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð½Ð¾ Ð¾Ð½ Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚"
 
-#: elf.c:6949
+#: elf.c:7147
 #, c-format
 msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ñ‹Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð¿Ð¾ vaddr=%#<PRIx64>, Ñ�Ñ‚Ð¾ Ñ‚Ð°Ðº Ð·Ð°Ð´ÑƒÐ¼Ñ‹Ð²Ð°Ð»Ð¾Ñ�ÑŒ?"
 
-#: elf.c:7574
+#: elf.c:7773
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %#<PRIx64>"
 
-#: elf.c:8073
+#: elf.c:8286
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %x Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ ELF. Ð’Ð¼ÐµÑ�Ñ‚Ð¾ Ð½ÐµÐ³Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼ ABS."
+
+#: elf.c:8316
 #, c-format
 msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñ�Ñ‰ÐµÐµ Ð¼ÐµÑ�Ñ‚Ð¾ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf.c:8421
+#: elf.c:8703
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ .gnu.version_r"
 
-#: elf.c:8548
+#: elf.c:8836
 #, 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:9293
+#, c-format
+msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð² Ð½ÐµÐ²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»"
+
+#: elf.c:9302
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
+
+#: elf.c:9313
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ð±ÑƒÑ„ÐµÑ€"
+
+#: elf.c:12430
+msgid "GNU_MBIND section is unsupported"
+msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» GNU_MBIND Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
+#: elf.c:12432
+msgid "symbol type STT_GNU_IFUNC is unsupported"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ STT_GNU_IFUNC Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
+#: elf.c:12434
+msgid "symbol binding STB_GNU_UNIQUE is unsupported"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ� Ð¿Ñ€Ð¸Ð²Ñ�Ð·ÐºÐ° STB_GNU_UNIQUE Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
+#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %d Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld"
+
+#: elf.c:12692
+#, 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:12704
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸"
+
+#: elf.c:12718
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ� Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸, Ñ‚Ð°Ðº ÐºÐ°Ðº Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ðµ"
+
+#: elf.c:12784
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ð´Ð²Ð°Ð¶Ð´Ñ‹"
+
+#: elf.c:12796
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð¿ÑƒÑ�Ñ‚!"
+
+#: elf.c:12819
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‚ Ð´Ð»Ñ� Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
+
+#: elf.c:12838
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr "%pB:%pA: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ %u Ð¿ÑƒÑ�Ñ‚"
+
+#: elf.c:12863
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %u Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
+
+#: elf.c:12880
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %u Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
+
+#: elf.c:12893
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr "%pB(%pA): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %u Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ð°"
+
+#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914
+#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844
+#: elf64-ppc.c:5291
 #, 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:1391
+#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513
 #, 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-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): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð² Ð¼Ð°Ð»Ð¾Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¸Ð· Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
-#: 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:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253
+#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483
 #, 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:2909
 #, c-format
 msgid "%pB: unknown mandatory ARC object attribute %d"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° ARC %d"
 
-#: elf32-arc.c:2957
+#: elf32-arc.c:2917
 #, 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:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412
 #, 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:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206
 #, 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:4552
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "ÐžÐ¨Ð˜Ð‘ÐšÐ�: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° CMSE (Ñ€Ð°Ð·Ð´ÐµÐ» %s) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð°Ð»ÐµÐºÐ¾ (%#<PRIx64>) Ð¾Ñ‚ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� (%#<PRIx64>)"
+
+#: elf32-arm.c:4721
 #, 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:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584
+#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775
+#: elfnn-aarch64.c:3190
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s"
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315
+#: elfnn-aarch64.c:3259
+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:5987
 #, 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:5996
 #, 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:6035
 #, 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:6041
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6053
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr "%pB: Â«%sÂ» Ð¸ ÐµÐ³Ð¾ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð°Ñ…Ð¾Ð´Ñ�Ñ‚Ñ�Ñ� Ð² Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñ€Ð°Ð·Ð´ÐµÐ»Ð°Ñ…"
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6065
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr "%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð² Ð²Ñ‹Ð²Ð¾Ð´Ðµ"
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6072
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr "%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¿ÑƒÑ�Ñ‚Ð°"
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6201
 #, 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:6250
 #, 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:6272
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr "Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� Â«%sÂ» Ð¸Ñ�Ñ‡ÐµÐ·Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð°"
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6296
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr "Â«%sÂ» Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð½Ðµ Ð¿ÑƒÑ�Ñ‚ÑƒÑŽ Ð²Ñ…Ð¾Ð´Ð½ÑƒÑŽ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ"
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6311
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr "%pB: Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð°Ñ�ÑŒ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6320
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6339
 #, 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:6359
 msgid "new entry function(s) introduced but no output import library specified:"
 msgstr "Ð¿Ð¾Ñ�Ð²Ð¸Ð»Ð°Ñ�ÑŒ Ð½Ð¾Ð²Ð°Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ�(Ð¸), Ð½Ð¾ Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½ Ð²Ñ‹Ð²Ð¾Ð´ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸:"
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6367
 #, 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:7076 elf32-arm.c:7111
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»"
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7822
 #, 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:8049
 #, 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:8076
 #, 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:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ»"
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8925
 #, 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:9023
 #, 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:9825
 #, 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:10135 elf32-arm.c:10177
 #, 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:10521
 msgid "shared object"
 msgstr "Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10524
 msgid "PIE executable"
 msgstr "Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10527
 #, 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:10664 elf32-arm.c:11091
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� BLX %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ %s Â«%sÂ»"
 
-#: elf32-arm.c:11975 elf32-arm.c:12001
+#: elf32-arm.c:12003 elf32-arm.c:12029
 #, 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:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915
+#: elf32-nios2.c:4385
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ"
 
-#: elf32-arm.c:12261
+#: elf32-arm.c:12289
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
 msgstr "%pB(%pA+%#<PRIx64>): Ð² Ð³Ñ€ÑƒÐ¿Ð¿Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ ALU Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ñ‹ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ADD Ð¸Ð»Ð¸ SUB"
 
-#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572
+#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600
 #, c-format
 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:13232 elf32-sh.c:3571
 #, 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:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761
+#: elfnn-aarch64.c:6829
 #, 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:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763
+#: elfnn-aarch64.c:6831
 #, 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:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166
 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:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7170
 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:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7178
 msgid "unknown error"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13920
 #, 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:13924
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‡Ð¸Ñ‰Ð°ÐµÑ‚Ñ�Ñ� Ñ„Ð»Ð°Ð³ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð¾Ð¹ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð´Ð»Ñ� %pB Ð¸Ð·-Ð·Ð° Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð°"
 
-#: elf32-arm.c:13813
+#: elf32-arm.c:13969
 #, 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:14056
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14064
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14364
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°"
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14402 elf32-nios2.c:2953
 #, c-format
 msgid "error: %pB: conflicting CPU architectures %d/%d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %d/%d"
 
-#: elf32-arm.c:14310
+#: elf32-arm.c:14499
 #, 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:14528
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ VFP, Ð° %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14687
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñ� %pB"
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14713
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰Ð¸Ðµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ðµ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ %c/%c"
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14852
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ð²Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14861
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ R9"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14873
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð°Ñ‰ÐµÐµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ð¸Ð¸ SB Ð¸ R9"
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14886
 #, 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:14917
 #, 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:14929
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ iWMMXt, Ð° %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:14946
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ fp16 Ñ€Ð°Ñ�Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð² %pB Ð¸ %pB"
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:14982
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr "%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾ Ð¸ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ Ð¸ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐ¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Tag_MPextension_use"
@@ -1686,345 +1790,330 @@ 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.
-#: 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
+#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416
+#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537
+#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332
 #, c-format
 msgid "private flags = %lx:"
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx:"
 
-#: elf32-arm.c:14888
+#: elf32-arm.c:15078
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½Ð°Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15086
 #, c-format
 msgid " [VFP float format]"
 msgstr " [VFP Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15088
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [Maverick Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15090
 #, c-format
 msgid " [FPA float format]"
 msgstr " [FPA Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¸]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15093
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr " [Ñ‡Ð¸Ñ�Ð»Ð° Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¿ÐµÑ€ÐµÐ´Ð°ÑŽÑ‚Ñ�Ñ� Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°Ñ… Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹]"
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15096 elf32-arm.c:15182
 #, c-format
 msgid " [position independent]"
 msgstr " [Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð¾-Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð¸Ð¼Ñ‹Ð¹]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15099
 #, c-format
 msgid " [new ABI]"
 msgstr " [Ð½Ð¾Ð²Ñ‹Ð¹ ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15102
 #, c-format
 msgid " [old ABI]"
 msgstr " [Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ ABI]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15105
 #, c-format
 msgid " [software FP]"
 msgstr " [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� FP]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15114
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15117 elf32-arm.c:15128
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15119 elf32-arm.c:15130
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [Ð½ÐµÑ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15125
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15133
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15136
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [Ð¿Ñ€Ð¾ÐµÑ†Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ€Ð°Ð½ÑŒÑˆÐµ]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15143
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15147
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15151
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ð¸Ñ�5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15154
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [soft-float ABI]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15157
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [hard-float ABI]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15163
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15166
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15172
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� EABI>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15179
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15185
 #, 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:15190 elfnn-aarch64.c:7335
 #, c-format
 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:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724
+#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847
+#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664
+#: elfnn-aarch64.c:7606 elfnn-riscv.c:525
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ�: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15696
 #, 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:16939
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr "Ð¿Ñ€Ð¸ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ Ñ„Ð°Ð¹Ð»Ð° %pB Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ Ð¾ÑˆÐ¸Ð±ÐºÐ¸"
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865
 #, c-format
 msgid "could not find section %s"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ» %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18550
 #, 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:18577
 #, 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:19404 elf32-arm.c:19426
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñ�ÐºÐ»ÐµÐ¹ÐºÐ° VFP11 Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19477
 #, 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:19516
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ STM32L4XX"
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20600
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB ÑƒÐ¶Ðµ Ð² ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ðµ BE8"
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20676
 #, 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:20691
 #, 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:20701
 #, 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:20705
 #, 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:20715 elf32-arm.c:20719 elf32-arm.c:20729
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20733
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð½Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚"
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20752
 #, 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:20756
 #, 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:20770
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð½ÑƒÑŽ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð½ÐµÑ‚"
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20776
 #, 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
+#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488
+#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994
+#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825
+#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688
+#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752
 msgid "internal error: dangerous relocation"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3327 elfnn-aarch64.c:3221
 #, 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:363
 msgid "relocation should be even number"
 msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1584
 #, 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:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140
+#: elf64-s390.c:3089 elf64-x86-64.c:4112
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%sÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d"
 
-#: elf32-bfin.c:2638
+#: elf32-bfin.c:2641
 #, 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:2658
 msgid "relocation references symbol not defined in the module"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»Ðµ"
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2755
 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:2795 elf32-bfin.c:2916
 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:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389
 msgid "cannot emit dynamic relocations in read-only section"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: elf32-bfin.c:2874
+#: elf32-bfin.c:2875
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC_VALUE ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3038
 msgid "relocations between different segments are not supported"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¼ÐµÐ¶Ð´Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚Ñ�Ñ�"
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3039
 msgid "warning: relocation references a different segment"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚"
 
-#: elf32-bfin.c:4787 elf32-frv.c:6603
+#: elf32-bfin.c:4770 elf32-frv.c:6584
 #, 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:4774 elf32-frv.c:6588
 #, c-format
 msgid "%pB: cannot link fdpic object file into non-fdpic executable"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð», Ñ�Ð²Ð»Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� fdpic, Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ Ð½Ðµ fdpic"
 
-#: elf32-bfin.c:4941
+#: elf32-bfin.c:4924
 #, c-format
 msgid "*** check this relocation %s"
 msgstr "*** Ð¿Ñ€Ð¾Ð²ÐµÑ€ÑŒÑ‚Ðµ Ñ�Ñ‚Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s"
 
-#: elf32-bfin.c:5057
+#: elf32-bfin.c:5040
 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:5334 elf32-cr16.c:2731 elf32-m68k.c:4422
 msgid "unsupported relocation type"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
@@ -2044,16 +2133,16 @@ msgid "%pB, section %pA: no PLT for relo
 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:1827 elf32-tic6x.c:2560
 msgid "[whose name is lost]"
 msgstr "[Ñ‡ÑŒÑ‘ Ð¸Ð¼Ñ� Ð¿Ð¾Ñ‚ÐµÑ€Ñ�Ð½Ð¾]"
 
-#: elf32-cris.c:1311 elf32-tic6x.c:2603
+#: elf32-cris.c:1311 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:1320 elf32-cris.c:1668 elf32-cris.c:1821 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Â»"
@@ -2109,71 +2198,71 @@ msgstr "%pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA: Ð¿ÐµÑ€ÐµÐ
 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:3700
 #, 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:3812
 msgid "unexpected machine number"
 msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ðµ Ñ‡Ð¸Ñ�Ð»Ð¾"
 
-#: elf32-cris.c:3911
+#: elf32-cris.c:3864
 #, c-format
 msgid " [symbols have a _ prefix]"
 msgstr " [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð°Ñ‚ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ� _]"
 
-#: elf32-cris.c:3914
+#: elf32-cris.c:3867
 #, c-format
 msgid " [v10 and v32]"
 msgstr " [v10 Ð¸ v32]"
 
-#: elf32-cris.c:3917
+#: elf32-cris.c:3870
 #, c-format
 msgid " [v32]"
 msgstr " [v32]"
 
-#: elf32-cris.c:3961
+#: elf32-cris.c:3914
 #, c-format
 msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð²"
 
-#: elf32-cris.c:3962
+#: elf32-cris.c:3915
 #, c-format
 msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð±ÐµÐ· Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð° _, Ð½Ð¾ Ð² Ñ„Ð°Ð¹Ð» Ð·Ð°Ð¿Ð¸Ñ�Ñ‹Ð²Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñ� Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ�Ð¾Ð¼ _"
 
-#: elf32-cris.c:3981
+#: elf32-cris.c:3934
 #, c-format
 msgid "%pB contains CRIS v32 code, incompatible with previous objects"
 msgstr "%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-cris.c:3983
+#: elf32-cris.c:3936
 #, c-format
 msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
 msgstr "%pB Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÐºÐ¾Ð´ Ð½Ðµ CRIS v32, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-csky.c:2066
+#: elf32-csky.c:2022
 msgid "GOT table size out of range"
 msgstr "Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GOT Ð²Ñ‹Ñ…Ð¾Ð´Ð¸Ñ‚ Ð·Ð° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñ‹"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2802
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ð¹ eflag Â«%#lxÂ»"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2862
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr "%pB: Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ÑƒÐµÑ‚ Ñ� Ñ†ÐµÐ»ÑŒÑŽ"
 
-#: elf32-csky.c:2990
+#: elf32-csky.c:2875
 #, 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"
 
 #. The r_type is error, not support it.
-#: elf32-csky.c:4225 elf32-i386.c:351
+#: elf32-csky.c:4118 elf32-i386.c:350
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� : %#x"
@@ -2189,7 +2278,7 @@ 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:569 elf32-ip2k.c:1484
 msgid "unsupported relocation between data/insn address spaces"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð½Ñ‹Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð¾Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ñ…/Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹"
 
@@ -2197,96 +2286,96 @@ msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ
 msgid "relocation requires zero addend"
 msgstr "Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ"
 
-#: elf32-frv.c:2829
+#: elf32-frv.c:2832
 #, 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:2849
 msgid "%H: relocation references symbol not defined in the module\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² Ð¼Ð¾Ð´ÑƒÐ»Ðµ\n"
 
-#: elf32-frv.c:2922
+#: elf32-frv.c:2925
 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:2966
 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:3037
 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:3074
 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:3121
 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:3205
 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:3259
 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:3289
 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:3318
 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:3348
 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:3393
 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:3420
 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:3541 elf32-frv.c:3661
 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:3582 elf32-frv.c:3703
 msgid "%H: cannot emit fixups in read-only section\n"
 msgstr "%H: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�\n"
 
-#: elf32-frv.c:3611 elf32-frv.c:3746
+#: elf32-frv.c:3612 elf32-frv.c:3745
 msgid "%H: cannot emit dynamic relocations in read-only section\n"
 msgstr "%H: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�\n"
 
-#: elf32-frv.c:3918
+#: elf32-frv.c:3917
 #, c-format
 msgid "%H: reloc against `%s' references a different segment\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Â«%sÂ» Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-frv.c:4069
+#: elf32-frv.c:4068
 #, c-format
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ»: %s\n"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6495
 #, 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:6549 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:6562
 #, c-format
 msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ðµ Ð¿Ð¾Ð»Ñ� e_flags (%#x), Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸ÐµÑ�Ñ� Ð¾Ñ‚ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)"
@@ -2296,137 +2385,140 @@ 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:763 elf32-hppa.c:844 elf64-ppc.c:11859
+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-hppa.c:865 elf32-hppa.c:3407
 #, 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:1243
 #, 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:2584
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ñ‹Ð¹ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3240
 #, 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:4036
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr "%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS"
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4054
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr "%pB:%s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� TLS"
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4113
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ %s Ð´Ð»Ñ� %s"
 
-#: elf32-hppa.c:4521
+#: elf32-hppa.c:4417
 msgid ".got section not immediately after .plt section"
 msgstr "Ñ€Ð°Ð·Ð´ÐµÐ» .got Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñ�Ñ‚Ð¾Ñ�Ñ‚ÑŒ Ñ�Ñ€Ð°Ð·Ñƒ Ð¿Ð¾Ñ�Ð»Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .plt"
 
-#: elf32-i386.c:1178 elf64-x86-64.c:1377
+#: elf32-i386.c:1169 elf64-x86-64.c:1382
 #, 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: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: Ð¿Ñ€Ñ�Ð¼Ð¾Ðµ 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:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556
+#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555
+#: elfxx-tilegx.c:1769 elfnn-riscv.c:437
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð´Ð»Ñ� Ð½Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1793
 #, 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:2373 elf64-x86-64.c:2721
 #, 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:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778
+#: elf64-x86-64.c:4285 elf64-x86-64.c:4441
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ� IFUNC Â«%sÂ» Ð² %pB\n"
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2563
 #, 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:2598 elf64-x86-64.c:2977
 msgid "hidden symbol"
 msgstr "Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2601 elf64-x86-64.c:2980
 msgid "internal symbol"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2604 elf64-x86-64.c:2983
 msgid "protected symbol"
 msgstr "Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2607 elf64-x86-64.c:2986
 msgid "symbol"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2613
 #, 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:2626
 #, 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-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:1297
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸Ðº ip2k: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> (Ð½Ð°Ð·Ð½Ð°Ñ‡ = %#<PRIx64>)"
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1316
 #, 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:608 elf32-nios2.c:3148
 msgid "global pointer relative relocation when _gp not defined"
 msgstr "Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�, Ð½Ð¾ _gp Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
 
-#: elf32-lm32.c:706 elf32-nios2.c:3578
+#: elf32-lm32.c:663 elf32-nios2.c:3585
 msgid "global pointer relative address out of range"
 msgstr "Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð° Ð²Ð½Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-#: elf32-lm32.c:1002
+#: elf32-lm32.c:959
 #, c-format
 msgid "internal error: addend should be zero for %s"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� %s"
@@ -2435,136 +2527,141 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ
 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:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145
 #, 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:3302
 #, c-format
 msgid "%pB: instruction set mismatch with previous modules"
 msgstr "%pB: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñƒ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹"
 
-#: elf32-m32r.c:3508 elf32-nds32.c:6992
+#: elf32-m32r.c:3323 elf32-nds32.c:6855
 #, c-format
 msgid "private flags = %lx"
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx"
 
-#: elf32-m32r.c:3513
+#: elf32-m32r.c:3328
 #, c-format
 msgid ": m32r instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r"
 
-#: elf32-m32r.c:3514
+#: elf32-m32r.c:3329
 #, c-format
 msgid ": m32rx instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32rx"
 
-#: elf32-m32r.c:3515
+#: elf32-m32r.c:3330
 #, c-format
 msgid ": m32r2 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ m32r2"
 
-#: elf32-m68hc1x.c:1116
+#: elf32-m68hc1x.c:1136
 #, 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:1167
 #, 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:1183
 #, 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:1198
 #, 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:1234
 #, 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:1358
 #, 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:1365
 #, 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:1374
 #, 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:1419 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:1421 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:1424 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, "
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1426 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-Ð±Ð¸Ñ‚Ð½Ð¾Ðµ double, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1429
 #, c-format
 msgid "cpu=HC11]"
 msgstr "Ð¦ÐŸ=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1431
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "Ð¦ÐŸ=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1433
 #, c-format
 msgid "cpu=HC12]"
 msgstr "Ð¦ÐŸ=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1436
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ñ� Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1438
 #, c-format
 msgid " [memory=flat]"
 msgstr " [Ð¿Ð°Ð¼Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ°Ñ�]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1441
 #, 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:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591
+#, c-format
+msgid "%pB uses hard float, %pB uses soft float"
+msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ, %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½ÑƒÑŽ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÑƒÑŽ Ñ‚Ð¾Ñ‡ÐºÑƒ"
+
+#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680
 msgid "unknown"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾"
 
-#: elf32-m68k.c:1660
+#: elf32-m68k.c:1733
 #, 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:1740
 #, c-format
 msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ GOT: ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ñ� 8-Ð¼Ð¸ Ð¸Ð»Ð¸ 16-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ > %d"
@@ -2595,18 +2692,18 @@ msgstr "%pB Ð¸ %pB Ð´Ð»Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð
 msgid "private flags = 0x%lx"
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = 0x%lx"
 
-#: elf32-metag.c:1863
+#: elf32-metag.c:1859
 #, c-format
 msgid "%pB(%pA): multiple TLS models are not supported"
 msgstr "%pB(%pA): Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ TLS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-metag.c:1866
+#: elf32-metag.c:1862
 #, 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:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427
+#: elfxx-tilegx.c:3417
 #, c-format
 msgid "%pB: probably compiled without -fPIC?"
 msgstr "%pB: Ð²ÐµÑ€Ð¾Ñ�Ñ‚Ð½Ð¾, ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ñ� Ð±ÐµÐ· -fPIC?"
@@ -2620,320 +2717,315 @@ msgstr "Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr "Ð´Ð»Ñ� Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ 32â€”Ð±Ð¸Ñ‚Ð½Ð¾Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-msp430.c:837 elf32-msp430.c:1151
+#: elf32-msp430.c:846 elf32-msp430.c:1160
 msgid "try enabling relaxation to avoid relocation truncations"
 msgstr "Ð¿Ð¾Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ðµ, Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ð¸Ð·Ð±ÐµÐ¶Ð°Ñ‚ÑŒ Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
 
-#: elf32-msp430.c:1358
+#: elf32-msp430.c:1367
 msgid "internal error: branch/jump to an odd address detected"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ/Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ñ�Ñ‚Ñ€Ð°Ð½Ð½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elf32-msp430.c:2357
+#: elf32-msp430.c:2532
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ MSPABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2633
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ð² Ñ‚Ð¾ Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ°Ðº %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ %s"
 
-#: elf32-msp430.c:2468
+#: elf32-msp430.c:2645
 #, 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:2658
 #, 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:2669
 #, 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:2682
 #, 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:2694
 #, 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:2719
 #, 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:3625
 #, 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:5528
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ"
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5654
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ GOT"
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5695
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ SDA_BASE"
 
-#: elf32-nds32.c:5858
+#: elf32-nds32.c:5717
 #, c-format
 msgid "%pB(%pA): warning: unaligned small data access of type %d"
 msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ñ‹Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ðº Ð¼Ð°Ð»Ñ‹Ð¼ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d"
 
-#: elf32-nds32.c:6784
+#: elf32-nds32.c:6643
 #, 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:6691
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-nds32.c:6842
+#: elf32-nds32.c:6705
 #, 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:6793
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6803
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½Ð°Ð±Ð¾Ñ€ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¹ Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6830
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ elf %s Ð¸ %s"
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6861
 #, c-format
 msgid ": n1 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6864
 #, c-format
 msgid ": n1h instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9316
 #, 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:9576
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12839
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ OMIT_FP Ð² %pA"
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12858
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ OMIT_FP Ð² %pA"
 
-#: elf32-nds32.c:13275 reloc.c:8410
+#: elf32-nds32.c:13140 reloc.c:8470
 #, 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:2937
 #, c-format
 msgid "error: %pB: big-endian R2 is not supported"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð¾Ñ‚ Ñ�Ñ‚Ð°Ñ€ÑˆÐµÐ³Ð¾ Ðº Ð¼Ð»Ð°Ð´ÑˆÐµÐ¼Ñƒ R2 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: elf32-nios2.c:3822
+#: elf32-nios2.c:3829
 #, 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:3859
 #, 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:4514 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:4524 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5367
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ� Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€"
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1210
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1317
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %d"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1371
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr "%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ plt"
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1476
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr "%pB: Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð½ÑƒÐ»Ñ‘Ð¼ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ got"
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1493
 #, 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:1510 elf64-alpha.c:4421 elf64-alpha.c:4565
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr "%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1524
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr "%pB: Ð½Ðµ-pic Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1608
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr "%pB: Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð°"
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1787
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� Ð½Ðµ Ð±ÑƒÐ´ÐµÑ‚ Ñ€ÐµÑˆÐµÐ½Ð¾"
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2120
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%sÂ»"
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3181
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr "%pB: Ñ„Ð»Ð°Ð³ %s Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:989
 #, 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:2861
 #, 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:3599 elf32-ppc.c:3607
 #, 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:3629 elf32-ppc.c:3637
 #, 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:3645 elf32-ppc.c:3653
 #, 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:3720 elf32-ppc.c:3729
 #, 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:3758 elf32-ppc.c:3767
 #, 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:3831
 #, c-format
 msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ�Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3839
 #, c-format
 msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr "%pB: Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð° Ð¸ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð° Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable"
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3908
 #, 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:3927
 #, 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
+#: elf32-ppc.c:4030
 #, c-format
 msgid "bss-plt forced due to %pB"
 msgstr "Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° %pB"
 
-#: elf32-ppc.c:4030
+#: elf32-ppc.c:4032
 msgid "bss-plt forced by profiling"
 msgstr "Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� bss-plt Ð¸Ð·-Ð·Ð° Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ�"
 
@@ -2941,40 +3033,40 @@ msgstr "Ð¿Ñ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ Ð¸Ñ�Ð
 #. 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:4606 elf64-ppc.c:8252
 #, 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:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453
+#: elfxx-tilegx.c:2496
 #, c-format
 msgid "%pB: dynamic relocation in read-only section `%pA'\n"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
 
-#: elf32-ppc.c:7457
+#: elf32-ppc.c:7356
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr "%P: %H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ñ� Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÐµÐ¹ %x\n"
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7393
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð¸ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7433 elf32-ppc.c:7469
 #, 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:7533
 #, 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
+#: elf32-ppc.c:7572 elf64-ppc.c:16848
 msgid "%H: warning: %s unexpected insn %#x.\n"
 msgstr "%H: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %s Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾Ñ�ÑŒ insn %#x.\n"
 
-#: elf32-ppc.c:7985
+#: elf32-ppc.c:7881
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr "%H: Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ %s Ð´Ð»Ñ� Â«%sÂ»\n"
@@ -2987,54 +3079,54 @@ 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:7913
 #, 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:8091
 #, 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:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643
 #, 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:8773 elf32-ppc.c:8791
+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:8872
 #, 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:8901
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr "%H: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»\n"
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:8982
 #, 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:9872
 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:9876 elf64-ppc.c:17398
 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:9921
 #, 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:1475
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ñ�Ñ‚Ð°Ñ€Ñ‹Ð¹ Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð»"
@@ -3051,7 +3143,7 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RL78_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: 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): Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð²Ñ‹Ð·Ð¾Ð² Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%sÂ»"
@@ -3080,17 +3172,17 @@ msgstr "- %pB Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� 64-Ð±Ð¸Ñ‚
 msgid " [64-bit doubles]"
 msgstr "[64-Ð±Ð¸Ñ‚Ð½Ñ‹Ðµ double]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:607
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr "%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚Ñ�Ñ� Ð²Ð½Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹"
 
-#: elf32-rx.c:612
+#: elf32-rx.c:614
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr "%pB:%pA: Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ %s Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½ Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: 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: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ²ÑˆÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Red Hat %s Ð´Ð»Ñ�: %s"
@@ -3099,59 +3191,59 @@ 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:709
 #, 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:1293
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ RX_SYM Ñ� Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:3173
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr "Ð²Ð¾Ð·Ð½Ð¸Ðº ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ� Ñ„Ð»Ð°Ð³Ð¾Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF Ð¸Ð· %pB"
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3176
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr "  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s"
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3178
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  Ñ„Ð»Ð°Ð³Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°: %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3784
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr "%pB:%pA: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %s, Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÑŽÑ‰Ð°Ñ� %s"
 
-#: elf32-rx.c:3800
+#: elf32-rx.c:3792
 #, 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:2011 elf64-s390.c:1965
 #, 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:1521 elf32-score7.c:1382 elfxx-mips.c:3800
 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:2633
 #, 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:2687
 #, c-format
 msgid "%pB: CALL15 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL15 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
@@ -3166,7 +3258,7 @@ msgstr " [pic]"
 msgid " [fix dep]"
 msgstr " [fix dep]"
 
-#: elf32-score.c:4050 elf32-score7.c:3855
+#: elf32-score.c:4054 elf32-score7.c:3859
 #, c-format
 msgid "%pB: warning: linking PIC files with non-PIC files"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° PIC-Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ� Ð½Ðµ-PIC Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
@@ -3176,152 +3268,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:3758
 #, 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:3788 elf32-sh.c:3804
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: unaligned %s relocation %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: Ð¾Ñ�Ñ‚Ð°Ð½Ð¾Ð²: Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s (%#<PRIx64>)"
 
-#: elf32-sh.c:3942
+#: elf32-sh.c:3820
 #, 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:3836
 #, 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:3966 elf32-sh.c:4361
 #, 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:4464
 #, 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:4583
 #, 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:4601
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd4??)"
 
-#: elf32-sh.c:4731
+#: elf32-sh.c:4609
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xc7??)"
 
-#: elf32-sh.c:4738
+#: elf32-sh.c:4616
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0xd1??)"
 
-#: elf32-sh.c:4745
+#: elf32-sh.c:4623
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x310c)"
 
-#: elf32-sh.c:4752
+#: elf32-sh.c:4630
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x410b)"
 
-#: elf32-sh.c:4759
+#: elf32-sh.c:4637
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ� %#04X (Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð°Ñ�ÑŒ 0x34cc)"
 
-#: elf32-sh.c:4794
+#: elf32-sh.c:4672
 #, 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:4690
 #, 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:4699
 #, 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:4706
 #, 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:4821
 #, 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:4889
 #, 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:5017
 #, 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:5024
 #, 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:5483 elf32-sh.c:5565
 #, 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:5489 elf32-sh.c:5570
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr "%pB: Â«%sÂ» Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ÐµÐ½ ÐºÐ°Ðº FDPIC Ð¸ ÐºÐ°Ðº Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½Ð¸Ñ‚Ð¸"
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5520
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ñ� Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5727 elf64-alpha.c:4657
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹ ÐºÐ¾Ð´ TLS Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½ Ñ� Ð¾Ð±Ñ‰Ð¸Ð¼Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸"
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5842
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s, Ñ…Ð¾Ñ‚Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð»Ð¸Ñ�ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s"
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5854
 #, 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:5895
 #, c-format
 msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
 msgstr "%pB: Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÑŽÑ‚Ñ�Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸, Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ�Ð¼Ð¸, Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð²ÑˆÐ¸Ð¼Ð¸Ñ�Ñ� Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5908
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð¼ÐµÑˆÐ°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ FDPIC Ð¸ Ð½Ðµ FDPIC"
@@ -3336,118 +3424,123 @@ 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:735
 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:743
 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:763
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr "%X%P: Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ð²ÐµÑ€Ð»ÐµÑ� %pA Ð½Ðµ Ð² Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ ÐºÑ�ÑˆÐ°\n"
 
-#: elf32-spu.c:801
+#: elf32-spu.c:804
 #, 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:1030
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð²Ñ‹Ð·Ð¾Ð² Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ %s, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ Ð² %pB"
 
-#: elf32-spu.c:1377
+#: elf32-spu.c:1380
 #, 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:1910
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr "%pB Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s"
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1918
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "Ð²Ð°Ð¼ Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ�Ñ‚ÑŒ %s Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸"
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1952
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐµÐ²"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1981
 msgid "overlay stub relocation overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹Ð½Ð¾Ð¹ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1990 elf64-ppc.c:14496
 msgid "stubs don't match calculated size"
 msgstr "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð½Ðµ Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ"
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2573
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ñ� %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2589
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°\n"
 
-#: elf32-spu.c:2620
+#: elf32-spu.c:2621
 #, c-format
 msgid "%pA:0x%v not found in function table\n"
 msgstr "%pA:0x%v Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹\n"
 
-#: elf32-spu.c:2761
+#: elf32-spu.c:2762
 #, 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:3330
+#: elf32-spu.c:3328
 #, c-format
 msgid "stack analysis will ignore the call from %s to %s\n"
 msgstr "Ð² Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ Ñ�Ñ‚ÐµÐºÐ° Ð±ÑƒÐ´ÐµÑ‚ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð²Ñ‹Ð·Ð¾Ð² Ð¸Ð· %s Ð² %s\n"
 
-#: elf32-spu.c:4027
+#: elf32-spu.c:4025
 msgid "  calls:\n"
 msgstr "  Ð²Ñ‹Ð·Ð¾Ð²Ñ‹:\n"
 
-#: elf32-spu.c:4341
+#: elf32-spu.c:4340
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr "%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ� Ð² %s\n"
 
-#: elf32-spu.c:4345
+#: elf32-spu.c:4344
 #, c-format
 msgid "%s duplicated\n"
 msgstr "%s Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÐµÑ‚Ñ�Ñ�\n"
 
-#: elf32-spu.c:4352
+#: elf32-spu.c:4351
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr "Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ñ…Ñ�Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð² Ñ�Ñ†ÐµÐ½Ð°Ñ€Ð¸Ð¸ auto-overlay Ð¿Ð¾ÐºÐ° Ð½Ðµ Ñ�Ð´ÐµÐ»Ð°Ð½Ð°\n"
 
-#: elf32-spu.c:4394
+#: elf32-spu.c:4393
 #, 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:4549
 #, c-format
 msgid "%pB:%pA%s exceeds overlay size\n"
 msgstr "%pB:%pA%s Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�\n"
 
-#: elf32-spu.c:4691
+#: elf32-spu.c:4690
 msgid "%F%P: auto overlay error: %E\n"
 msgstr "%F%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E\n"
 
-#: elf32-spu.c:4712
+#: elf32-spu.c:4711
 msgid "Stack size for call graph root nodes.\n"
 msgstr "Ð Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� Ð²Ñ‹Ð·Ð¾Ð²Ð° Ð³Ñ€Ð°Ñ„Ð° ÐºÐ¾Ñ€Ð½ÐµÐ²Ñ‹Ñ… ÑƒÐ·Ð»Ð¾Ð².\n"
 
-#: elf32-spu.c:4713
+#: elf32-spu.c:4712
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
@@ -3455,19 +3548,19 @@ msgstr ""
 "\n"
 "Ð Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° Ð´Ð»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹. ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ�: '*' Ð¼Ð°ÐºÑ� Ñ�Ñ‚ÐµÐº, 't' Ñ…Ð²Ð¾Ñ�Ñ‚Ð¾Ð²Ð¾Ð¹ Ð²Ñ‹Ð·Ð¾Ð²\n"
 
-#: elf32-spu.c:4723
+#: elf32-spu.c:4722
 msgid "Maximum stack required is 0x%v\n"
 msgstr "Ð”Ð»Ñ� Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ‚ÐµÐºÐ° Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� 0x%v\n"
 
-#: elf32-spu.c:4742
+#: elf32-spu.c:4741
 msgid "%X%P: stack/lrlive analysis error: %E\n"
 msgstr "%X%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ Ñ�Ñ‚ÐµÐºÐ°/lrlive: %E\n"
 
-#: elf32-spu.c:4745
+#: elf32-spu.c:4744
 msgid "%F%P: can not build overlay stubs: %E\n"
 msgstr "%F%P: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð¾Ð²ÐµÑ€Ð»ÐµÑ�: %E\n"
 
-#: elf32-spu.c:4814
+#: elf32-spu.c:4813
 msgid "fatal error while creating .fixup"
 msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ .fixup"
 
@@ -3476,275 +3569,274 @@ msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ� Ð¾ÑˆÐ¸Ð
 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:3511
 #, c-format
 msgid "%pB: error: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ EABI-Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %d"
 
-#: elf32-tic6x.c:3638
+#: elf32-tic6x.c:3520
 #, 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:3638 elf32-tic6x.c:3647
 #, 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:3657 elf32-tic6x.c:3666
 #, 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:3675 elf32-tic6x.c:3684
 #, 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:3693 elf32-tic6x.c:3701
 #, c-format
 msgid "error: %pB requires more array alignment than %pB preserves"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ñ� %pB Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ� Ð±Ð¾Ð»ÑŒÑˆÐµÐµ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°, Ñ‡ÐµÐ¼ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¾ Ð² %pB"
 
-#: elf32-tic6x.c:3838
+#: elf32-tic6x.c:3724
 #, c-format
 msgid "warning: %pB and %pB differ in wchar_t size"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð² %pB Ð¸ %pB Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð°ÐµÑ‚Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ wchar_t"
 
-#: elf32-tic6x.c:3857
+#: elf32-tic6x.c:3743
 #, 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:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393
+#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522
 #, 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:462
 msgid "failed to find previous HI16 reloc"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ HI16"
 
-#: elf32-v850.c:2303
+#: elf32-v850.c:2302
 msgid "could not locate special linker symbol __gp"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __gp"
 
-#: elf32-v850.c:2307
+#: elf32-v850.c:2306
 msgid "could not locate special linker symbol __ep"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ep"
 
-#: elf32-v850.c:2311
+#: elf32-v850.c:2310
 msgid "could not locate special linker symbol __ctbp"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ‹Ñ�ÐºÐ°Ñ‚ÑŒ Ñ�Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ __ctbp"
 
-#: elf32-v850.c:2532
+#: elf32-v850.c:2531
 #, 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:2547
 #, 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:2562
 #, 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:2594
 #, c-format
 msgid " alignment of 8-byte entities: "
 msgstr " Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ 8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ñ… Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²: "
 
-#: elf32-v850.c:2598
+#: elf32-v850.c:2597
 #, c-format
 msgid "4-byte"
 msgstr "4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ"
 
-#: elf32-v850.c:2599
+#: elf32-v850.c:2598
 #, c-format
 msgid "8-byte"
 msgstr "8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ðµ"
 
-#: elf32-v850.c:2600 elf32-v850.c:2612
+#: elf32-v850.c:2599 elf32-v850.c:2611
 #, 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:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635
+#: elf32-v850.c:2646 elf32-v850.c:2657
 #, c-format
 msgid "unknown: %x"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾: %x"
 
-#: elf32-v850.c:2607
+#: elf32-v850.c:2606
 #, c-format
 msgid " size of doubles: "
 msgstr " Ñ€Ð°Ð·Ð¼ÐµÑ€ double: "
 
-#: elf32-v850.c:2610
+#: elf32-v850.c:2609
 #, c-format
 msgid "4-bytes"
 msgstr "4-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ"
 
-#: elf32-v850.c:2611
+#: elf32-v850.c:2610
 #, c-format
 msgid "8-bytes"
 msgstr "8-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñ‹Ðµ"
 
-#: elf32-v850.c:2619
+#: elf32-v850.c:2618
 #, c-format
 msgid " FPU support required: "
 msgstr " Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° FPU: "
 
-#: elf32-v850.c:2622
+#: elf32-v850.c:2621
 #, c-format
 msgid "FPU-2.0"
 msgstr "FPU-2.0"
 
-#: elf32-v850.c:2623
+#: elf32-v850.c:2622
 #, c-format
 msgid "FPU-3.0"
 msgstr "FPU-3.0"
 
-#: elf32-v850.c:2624
+#: elf32-v850.c:2623
 #, c-format
 msgid "none"
 msgstr "Ð½Ðµ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚Ñ�Ñ�"
 
-#: elf32-v850.c:2631
+#: elf32-v850.c:2630
 #, c-format
 msgid "SIMD use: "
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ SIMD: "
 
-#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
+#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655
 #, c-format
 msgid "yes"
 msgstr "Ð´Ð°"
 
-#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657
+#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656
 #, c-format
 msgid "no"
 msgstr "Ð½ÐµÑ‚"
 
-#: elf32-v850.c:2642
+#: elf32-v850.c:2641
 #, c-format
 msgid "CACHE use: "
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ CACHE: "
 
-#: elf32-v850.c:2653
+#: elf32-v850.c:2652
 #, c-format
 msgid "MMU use: "
 msgstr "Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ MMU: "
 
-#: elf32-v850.c:2820 elf32-v850.c:2876
+#: elf32-v850.c:2819 elf32-v850.c:2875
 #, c-format
 msgid "%pB: architecture mismatch with previous modules"
 msgstr "%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
 #. xgettext:c-format.
-#: elf32-v850.c:2894
+#: elf32-v850.c:2893
 #, c-format
 msgid "private flags = %lx: "
 msgstr "Ñ�Ð¾Ð±Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ðµ Ñ„Ð»Ð°Ð³Ð¸ = %lx: "
 
-#: elf32-v850.c:2899
+#: elf32-v850.c:2898
 #, c-format
 msgid "unknown v850 architecture"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850"
 
-#: elf32-v850.c:2901
+#: elf32-v850.c:2900
 #, c-format
 msgid "v850 E3 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850 E3"
 
-#: elf32-v850.c:2903 elf32-v850.c:2910
+#: elf32-v850.c:2902 elf32-v850.c:2909
 #, c-format
 msgid "v850 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850"
 
-#: elf32-v850.c:2911
+#: elf32-v850.c:2910
 #, c-format
 msgid "v850e architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e"
 
-#: elf32-v850.c:2912
+#: elf32-v850.c:2911
 #, c-format
 msgid "v850e1 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e1"
 
-#: elf32-v850.c:2913
+#: elf32-v850.c:2912
 #, c-format
 msgid "v850e2 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2"
 
-#: elf32-v850.c:2914
+#: elf32-v850.c:2913
 #, c-format
 msgid "v850e2v3 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e2v3"
 
-#: elf32-v850.c:2915
+#: elf32-v850.c:2914
 #, c-format
 msgid "v850e3v5 architecture"
 msgstr "Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850e3v5"
 
-#: elf32-v850.c:3609 elf32-v850.c:3848
+#: elf32-v850.c:3612 elf32-v850.c:3851
 #, 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:3622 elf32-v850.c:3861
 #, 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:3668 elf32-v850.c:3896
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3708
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %s ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
@@ -3769,22 +3861,22 @@ msgstr " [g-float]"
 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:1389
 #, 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:1515
 #, 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:1522
 #, 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 +3891,261 @@ 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:2074 elfnn-ia64.c:2343
 msgid "non-zero addend in @fptr reloc"
 msgstr "Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ð¾Ðµ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:1001
 #, 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:3126
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�Ð¾Ð²Ð°Ð½Ð½Ð¾Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .got.loc"
 
-#: elf32-xtensa.c:3377
+#: elf32-xtensa.c:3432
 #, 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:4726 elf32-xtensa.c:4734
 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:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸ÑŽ; Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸"
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7805
 #, 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:9663
 msgid "invalid relocation address"
 msgstr "Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9754
 msgid "overflow after relaxation"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ�Ð»Ðµ Ð¾Ñ�Ð»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ�"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10900
 #, 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:473
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr "Ð�Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ ldah Ð¸ lda Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� GPDISP"
 
-#: elf64-alpha.c:2463
+#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ� Â«%pTÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
+
+#: elf64-alpha.c:2451
 #, 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:2989 elf64-alpha.c:3183
 #, 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:4381 elf64-alpha.c:4394
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr "%pB: gp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4450
 #, 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:4475 mach-o.c:616 elfnn-riscv.c:485
 msgid "<unknown>"
 msgstr "<Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4481
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ !samegp Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð±ÐµÐ· .prologue: %s"
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4539
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� %s"
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4574
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr "%pB: pc-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4640
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr "%pB: dtp-Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4665
 #, 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:517
+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:598 elfnn-ia64.c:639
 #, 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:2029 elfnn-ia64.c:2291
 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:3281 elfnn-ia64.c:3674
 #, 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:3291 elfnn-ia64.c:3684
 #, 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:3561 elfnn-ia64.c:3958
 #, 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:3625 elfnn-ia64.c:4026
 #, 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:3684 elfnn-ia64.c:4089
 #, 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:3786 elfnn-ia64.c:4227
 #, 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:3789 elfnn-ia64.c:4230
 #, 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:3792 elfnn-ia64.c:4233
 #, 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:3916 elfnn-ia64.c:4430
 msgid "unsupported reloc"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ"
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468
 #, 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:3970 elfnn-ia64.c:4485
 #, 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:4266 elfnn-ia64.c:4746
 #, 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:4275 elfnn-ia64.c:4755
 #, 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:4284 elfnn-ia64.c:4764
 #, 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:4293 elfnn-ia64.c:4773
 #, 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:4303 elfnn-ia64.c:4783
 #, 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:5150 elflink.c:5072
 #, 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 elflink.c:5079
 #, 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:5096
 #, 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:4095
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %<PRIu64> Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %ld"
@@ -4077,147 +4192,160 @@ 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:2167
 #, 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:2222
 msgid "register section has contents\n"
 msgstr "Ð² Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ\n"
 
-#: elf64-mmix.c:2418
+#: elf64-mmix.c:2412
 #, c-format
 msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐµ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ñ€ÐµÑ‡Ð¸Ðµ: Ð¾Ñ�Ñ‚Ð°Ñ‘Ñ‚Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ� %lu; Ñ�Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚Ðµ Ð¾Ð± Ñ�Ñ‚Ð¾Ð¼ Ð´ÐµÑ„ÐµÐºÑ‚Ðµ"
 
-#: elf64-ppc.c:3827
+#: elf64-ppc.c:1342
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÑƒÐ¶Ð½Ð¾ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ %s, Ð° Ð½Ðµ %s"
+
+#: elf64-ppc.c:4101
 #, 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:4281
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr "%pB .opd Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¾ Ð² ABI Ð²ÐµÑ€Ñ�Ð¸Ð¸ %d"
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:4852
 #, 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:5260
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr "%pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ e_flags 0x%lx"
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5268
 #, 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:5295
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6574
 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:6841
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ R_PPC64_TOCSAVE"
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7089
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ð²Ñ‹Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¸Ð¸ dynreloc %pB, Ñ€Ð°Ð·Ð´ÐµÐ» %pA"
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7178
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr "%pB: .opd Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² opd"
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7188
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr "%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� %u Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd"
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7210
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .opd"
 
-#: elf64-ppc.c:7249
+#: elf64-ppc.c:7697
 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:8017
 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:8417 elf64-ppc.c:9130
 #, 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:9087
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr "%H: %s Ñ�Ñ�Ñ‹Ð»Ð°ÐµÑ‚Ñ�Ñ� Ð½Ð° ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¹ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ TOC\n"
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:9308
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ� got/toc Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð»Ñ� Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ %s\n"
+
+#: elf64-ppc.c:10135
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11277
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr "%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ opd Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° toc Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11323 elf64-ppc.c:11867
+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"
+
+#: elf64-ppc.c:11385
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11412
 #, 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:11476 elf64-ppc.c:11743 elf64-ppc.c:13972
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr "%P: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:11939
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð±Ñ€Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÑƒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:12920
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr "%pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸"
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14153
+msgid "__tls_get_addr call offset overflow"
+msgstr "__tls_get_addr Ð²Ñ‹Ð·Ð²Ð°Ð»Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
+
+#: elf64-ppc.c:14455 elf64-ppc.c:14474
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr "Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐµ Ð´Ð»Ñ� ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ� sdata4 Ð² .eh_frame"
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:14506
 #, c-format
 msgid "linker stubs in %u group\n"
 msgid_plural "linker stubs in %u groups\n"
@@ -4225,10 +4353,10 @@ msgstr[0] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½
 msgstr[1] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…\n"
 msgstr[2] "Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° Ð² %u Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ñ…\n"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:14513
 #, c-format
 msgid ""
-"  branch         %lu\n"
+"%s  branch         %lu\n"
 "  branch toc adj %lu\n"
 "  branch notoc   %lu\n"
 "  branch both    %lu\n"
@@ -4242,7 +4370,7 @@ msgid ""
 "  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                            %lu\n"
+"%s  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ                          %lu\n"
 "  Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ� toc            %lu\n"
 "  Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð½Ðµ toc                     %lu\n"
 "  Ð¾Ð±Ð° Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ�                        %lu\n"
@@ -4256,178 +4384,185 @@ msgstr ""
 "  Ð¾Ð±Ð° plt-Ð²Ñ‹Ð·Ð¾Ð²Ð°                       %lu\n"
 "  Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚                   %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:14913
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr "%H: %s Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ñ� TLS-Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:14915
 #, 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:15670
 #, 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:15676
 #, 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:16564
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr "%H: %s Ð´Ð»Ñ� Ð½ÐµÑ�Ð²Ð½Ð¾Ð³Ð¾ Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Â«%pTÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:16649
+#, 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:16704
 #, 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:16963
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr "%H: Ð¾ÑˆÐ¸Ð±ÐºÐ°: %s Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾ %u\n"
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:16986
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%pTÂ»\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:17131
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr "%H: %s Ð´Ð»Ñ� Â«%pTÂ»: Ð¾ÑˆÐ¸Ð±ÐºÐ° %d\n"
 
-#: elf64-s390.c:2576
+#: elf64-s390.c:2446
 #, 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
-#, c-format
-msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
-msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %d Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %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: Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ñ‹ %%g[2367] Ð¼Ð¾Ð³ÑƒÑ‚ Ð¾Ð±ÑŠÑ�Ð²Ð»Ñ�Ñ‚ÑŒÑ�Ñ� Ñ� Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ 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 "Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° %%g%d: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %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Â» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: REGISTER Ð² %pB, Ñ€Ð°Ð½ÐµÐµ %s Ð² %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Â» Ð¸Ð¼ÐµÐµÑ‚ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹: %s Ð² %pB, Ñ€Ð°Ð½ÐµÐµ REGISTER Ð² %pB"
 
-#: elf64-sparc.c:691
+#: elf64-sparc.c:702
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr "%pB: UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ� HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ñ‹Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1417
 msgid "hidden symbol "
 msgstr "Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1420
 msgid "internal symbol "
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1423 elf64-x86-64.c:1427
 msgid "protected symbol "
 msgstr "Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1429
 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:1435
 msgid "undefined "
 msgstr "Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ "
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1445
 msgid "a shared object"
 msgstr "Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1447
+msgid "; recompile with -fPIC"
+msgstr "; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC"
+
+#: elf64-x86-64.c:1452
 msgid "a PIE object"
 msgstr "Ð¾Ð±ÑŠÐµÐºÑ‚ PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1454
 msgid "a PDE object"
 msgstr "Ð¾Ð±ÑŠÐµÐºÑ‚ PDE"
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1456
+msgid "; recompile with -fPIE"
+msgstr "; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE"
+
+#: elf64-x86-64.c:1460
 #, 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:1968
 #, 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:2124
 #, 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:2747 elfnn-aarch64.c:5546
 #, 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:2992
 #, 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:3006
 #, 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:3283
 #, 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
+#: elf64-x86-64.c:3417 elflink.c:13267
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ð²Ð²Ð¾Ð´: %pB\n"
+
+#: elf64-x86-64.c:4101
 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOTPCREL; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ñ� --no-relax\n"
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4259
 #, 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:4322
 #, 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:4375
 #, 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
+#: elfcode.h:326
 msgid "warning: %pB has a corrupt section with a size (%"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ (%"
 
@@ -4436,656 +4571,813 @@ msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ
 msgid "warning: %pB has a corrupt string table index - ignoring"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñƒ %pB Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð² Ñ�Ñ‚Ñ€Ð¾Ðº â€” Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ�"
 
-#: elfcode.h:1212
+#: elfcode.h:1228
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr "%pB: Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð²ÐµÑ€Ñ�Ð¸Ð¸ (%<PRId64>) Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ�Ð¾ Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° (%ld)"
 
-#: elfcore.h:300
+#: elfcore.h:308
 #, c-format
 msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB ÑƒÑ�ÐµÑ‡Ñ‘Ð½: Ð¾Ð¶Ð¸Ð´Ð°Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð° core >= %<PRIu64>, Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %<PRIu64>"
 
-#: elflink.c:1367
+#: elflink.c:1362
 #, 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:1368
 #, 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:1374
 #, 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:1380
 #, 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:2071
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elflink.c:2452
+#: elflink.c:2448
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr "%pB: Ð²ÐµÑ€Ñ�Ð¸Ñ� ÑƒÐ·Ð»Ð° Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° %s"
 
-#: elflink.c:2541
+#: elflink.c:2539
 #, 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:2551
 #, 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:2740
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ð² %pB Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elflink.c:3066
+#: elflink.c:3069
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð¸Ð¿ Ð¸ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:3128
+#: elflink.c:3129
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr "%P: ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ñ� Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Â«%pTÂ» Ð¾Ð¿Ð°Ñ�Ð½Ð¾\n"
 
-#: elflink.c:3932
+#: elflink.c:4064
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr "Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ ELF (%d) Ð² %pB, Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� %d"
 
-#: elflink.c:4598
+#: elflink.c:4534
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ %lx (Ð¼Ð°ÐºÑ� %lx)"
+
+#: elflink.c:4602
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñ� Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu (>= sh_info Ñ� %lu)"
+
+#: elflink.c:4750
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð¾ Ð²ÐµÑ€Ñ�Ð¸Ð¸"
+
+#: elflink.c:4788
 #, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u (Ð¼Ð°ÐºÑ� %d)"
 
-#: elflink.c:4635
+#: elflink.c:4825
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð°Ñ� Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %d"
 
-#: elflink.c:5054
+#: elflink.c:5231
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: elflink.c:6130
+#: elflink.c:6315
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr "%pB: ÑƒÐºÐ°Ð·Ð°Ð½ Ð¸ Ð·Ð°Ð´Ð°Ð½ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ñ‚ÐµÐºÐ° %s"
 
-#: elflink.c:6134
+#: elflink.c:6319
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s Ð½Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ñ‹Ð¼"
 
-#: elflink.c:6331
+#: elflink.c:6516
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ�: %s"
 
-#: elflink.c:6902
+#: elflink.c:7088
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» .preinit_array Ð½Ðµ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÐµÑ‚Ñ�Ñ� Ð² DSO"
 
-#: elflink.c:8359
+#: elflink.c:8602
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° %s Ð² Ñ�Ð»Ð¾Ð¶Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ: %s"
 
-#: elflink.c:8514
+#: elflink.c:8757
 #, 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:9095
 #, 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:9098
 #, 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:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418
 #, 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:9377 elflink.c:9434
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� â€” Ð¾Ð½Ð¸ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°"
 
-#: elflink.c:9234
+#: elflink.c:9486
 msgid "not enough memory to sort relocations"
 msgstr "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð¿Ð°Ð¼Ñ�Ñ‚Ð¸ Ð´Ð»Ñ� Ñ�Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²ÐºÐ¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹"
 
-#: elflink.c:9502
+#: elflink.c:9767
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10043
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO"
 
-#: elflink.c:9785
+#: elflink.c:10046
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO"
 
-#: elflink.c:9788
+#: elflink.c:10049
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð· %pB Ñ�Ñ�Ñ‹Ð»Ð°ÑŽÑ‚Ñ�Ñ� Ð¸Ð· DSO"
 
-#: elflink.c:9874
+#: elflink.c:10135
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA Ð´Ð»Ñ� Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA"
 
-#: elflink.c:10028
+#: elflink.c:10289
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr "%pB: Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:10031
+#: elflink.c:10292
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:10034
+#: elflink.c:10295
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr "%pB: Ñ�ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½"
 
-#: elflink.c:10066
+#: elflink.c:10327
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr "%pB: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð²ÐµÑ€Ñ�Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð´Ð»Ñ� Ð²ÐµÑ€Ñ�Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
 
-#: elflink.c:10679
+#: elflink.c:10699
+#, c-format
+msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: --enable-non-contiguous-regions Ð¾Ñ‚Ð±Ñ€Ð°Ñ�Ñ‹Ð²Ð°ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð¸Ð· Â«%sÂ»\n"
+
+#: elflink.c:10951
 #, c-format
 msgid "error: %pB: size of section %pA is not multiple of address size"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elflink.c:10724
+#: elflink.c:10996
 #, 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:11739
 #, 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:11745
 #, c-format
 msgid "%pA has both ordered and unordered sections"
 msgstr "%pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ð¸ Ð½ÐµÑƒÐ¿Ð¾Ñ€Ñ�Ð´Ð¾Ñ‡ÐµÐ½Ð½Ñ‹Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹"
 
-#: elflink.c:11592
+#: elflink.c:11851
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr "%pB: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸"
 
-#: elflink.c:12225
+#: elflink.c:12488
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¹ ÐºÐ»Ð°Ñ�Ñ� %s Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� %s"
 
-#: elflink.c:12442
+#: elflink.c:12704
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼ÑƒÑŽ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ"
 
-#: elflink.c:12561
+#: elflink.c:12823
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ð¸Ð¼ÐµÐµÑ‚ Ð½ÑƒÐ»ÐµÐ²Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€"
 
-#: elflink.c:12609
+#: elflink.c:12871
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%sÂ» Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·ÑƒÐµÑ‚Ñ�Ñ� Ð² Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ðµ"
 
-#: elflink.c:12701
+#: elflink.c:12964
 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:12967
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
 msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² Ð¾Ð±Ñ‰ÐµÐ¼ Ð¾Ð±ÑŠÐµÐºÑ‚Ðµ\n"
 
-#: elflink.c:12829
+#: elflink.c:12970
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚Ñ�Ñ� DT_TEXTREL Ð² PIE\n"
+
+#: elflink.c:13095
 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:13500
+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:13961
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr "%pB: %pA+%#<PRIx64>: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð´Ð»Ñ� INHERIT"
 
-#: elflink.c:13844
+#: elflink.c:14002
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pA:Â» Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ VTENTRY"
+
+#: elflink.c:14145
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ INPUT_SECTION_FLAG %s\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:14891
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Â«%sÂ» Ð¸Ð· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ� Â«%pAÂ»\n"
+
+#: elflink.c:14980
+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:9902 elfnn-aarch64.c:9909
+#, 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:758 elfxx-x86.c:2554
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ�Ð²Ð¾Ð¹Ñ�Ñ‚Ð² GNU\n"
+
+#: elfxx-aarch64.c:762 elfxx-x86.c:2559
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ€Ð¾Ð²Ð½Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: <Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° AArch64: 0x%x>"
+
+#: elfxx-mips.c:1507
 msgid "static procedure (no name)"
 msgstr "Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð¸Ð¼ÐµÐ½Ð¸)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5782
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¸ MIPS16 Ð¸ microMIPS Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð´Ñ€ÑƒÐ³ Ð´Ñ€ÑƒÐ³Ð°"
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6547
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ JALX Ð´Ð»Ñ� Ñ‚Ð¾Ð³Ð¾ Ð¶Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ISA\n"
 
-#: elfxx-mips.c:6518
+#: elfxx-mips.c:6580
 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:6625
 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:6637
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA\n"
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7286
 #, 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:7330 elfxx-mips.c:7567
 #, 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:8374 elfxx-mips.c:8500
 #, c-format
 msgid "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÑŽ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� Ð´Ð»Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ Â«%sÂ»"
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8632
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr "%pB: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %s"
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8731
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ GOT Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð½Ðµ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ð² Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…"
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8871
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ CALL16 Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64> Ð½Ðµ Ð´Ð»Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9174
 #, 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:9300
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "Ð¡Ð¸Ð¼Ð²Ð¾Ð» IFUNC %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² â€” IFUNCS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
+
+#: elfxx-mips.c:9303
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ð² Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²"
+
+#: elfxx-mips.c:9523
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s"
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10457
 #, 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:10597
 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:10616
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10619
 msgid "jump to a non-word-aligned address"
 msgstr "Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10620
 msgid "jump to a non-instruction-aligned address"
 msgstr "Ð¿Ñ€Ñ‹Ð¶Ð¾Ðº Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10623
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ðº JALX Ð´Ð»Ñ� Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10625
 msgid "branch to a non-instruction-aligned address"
 msgstr "Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾ Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ð¸ Ð°Ð´Ñ€ÐµÑ�Ñƒ"
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10627
 msgid "PC-relative load from unaligned address"
 msgstr "Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ PC Ð¸Ð· Ð½Ðµ Ð²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:10927
 #, 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:11042 elfxx-mips.c:11629
 #, 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:11601
 #, 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:14556
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15090
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ðµ Ð¸Ð¼Ñ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»"
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15367
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ„Ð°Ð¹Ð»Ð¾Ð² abicalls Ñ� Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð½Ðµ-abicalls"
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15384
 #, 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:15416 elfxx-mips.c:15482 elfxx-mips.c:15497
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ð¼Ð¾Ð´ÑƒÐ»Ñ� %s Ñ� Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15440
 #, 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:15465
 #, 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:15599
 #, 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:15605
 #, 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:15611
 #, 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:15625
 #, 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:15644
 #, 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:15656
 #, 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:15665
 #, 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:15727
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr "%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚ Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹"
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15741
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr "%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸ÐµÐ¹"
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15794
 #, 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:15799
 #, 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:15803
 #, 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:15810
 #, 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:15814
 #, 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:16005
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16067 elfxx-mips.c:16078
 msgid "None"
 msgstr "ÐžÑ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16069 elfxx-mips.c:16138
 msgid "Unknown"
 msgstr "Ð�ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16149
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ�\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16152
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ� Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16155
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ� Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16158
 #, c-format
 msgid "Soft float\n"
 msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ�\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16161
 #, 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:16164
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, Ð»ÑŽÐ±Ð¾Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16167
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr "Ð�Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ� Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ� Ð·Ð°Ð¿Ñ�Ñ‚Ð°Ñ� (32-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ Ð¦ÐŸ, 64-Ð±Ð¸Ñ‚Ð½Ñ‹Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16170
 #, 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:16202
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16204
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16206
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16208
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16210
 #, c-format
 msgid " [abi unknown]"
 msgstr " [abi Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚ÐµÐ½]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16212
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16214
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16216
 #, c-format
 msgid " [no abi set]"
 msgstr " [abi Ð½Ðµ Ð·Ð°Ð´Ð°Ð½]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16241
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ ISA]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16261
 #, 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:1063
+#, c-format
+msgid "-march=%s: Expect number after `%dp'."
+msgstr "-march=%s: Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚Ñ�Ñ� Ñ‡Ð¸Ñ�Ð»Ð¾ Ð¿Ð¾Ñ�Ð»Ðµ Â«%dpÂ»."
+
+#: elfxx-riscv.c:1174
+#, c-format
+msgid "-march=%s: rv%de is not a valid base ISA"
+msgstr "-march=%s: rv%de Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ� Ð±Ð°Ð·Ð° ISA"
+
+#: elfxx-riscv.c:1214
+#, c-format
+msgid "-march=%s: first ISA subset must be `e', `i' or `g'"
+msgstr "-march=%s: Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ð¿Ð¾Ð´Ð½Ð°Ð±Ð¾Ñ€ ISA Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«eÂ», Â«iÂ» Ð¸Ð»Ð¸ Â«gÂ»"
+
+#: elfxx-riscv.c:1242
+#, c-format
+msgid "-march=%s: unsupported ISA subset `%c'"
+msgstr "-march=%s: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ Ð¿Ð¾Ð´Ð½Ð°Ð±Ð¾Ñ€ ISA Â«%cÂ»"
+
+#: elfxx-riscv.c:1245
+#, c-format
+msgid "-march=%s: ISA string is not in canonical order. `%c'"
+msgstr "-march=%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð½Ðµ Ð² ÐºÐ°Ð½Ð¾Ð½Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐµ. Â«%cÂ»"
+
+#: elfxx-riscv.c:1364
+#, c-format
+msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'"
+msgstr "-march=%s: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ðµ Ð¸Ð»Ð¸ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA %s: Â«%sÂ»"
+
+#: elfxx-riscv.c:1375
+#, c-format
+msgid "-march=%s: Duplicate %s ISA extension: '%s'"
+msgstr "-march=%s: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� %s ISA: Â«%sÂ»"
+
+#: elfxx-riscv.c:1386
+#, c-format
+msgid "-march=%s: %s ISA extension not in alphabetical order: '%s' must come before '%s'."
+msgstr "-march=%s: %s Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ ISA Ð½Ðµ Ð² Ð°Ð»Ñ„Ð°Ð²Ð¸Ñ‚Ð½Ð¾Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐµ: Â«%sÂ» Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¸Ð´Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÐ´ Â«%sÂ»."
+
+#: elfxx-riscv.c:1407
+#, c-format
+msgid "-march=%s: %s must separate with _"
+msgstr "-march=%s: %s Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð¾Ñ‚Ð´ÐµÐ»Ñ�Ñ‚ÑŒÑ�Ñ� _"
+
+#: elfxx-riscv.c:1523
+#, c-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr "-march=%s: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð´Ð¾Ð»Ð¶Ð½Ð° Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑ�Ñ� Ñ� rv32 Ð¸Ð»Ð¸ rv64"
+
+#: elfxx-riscv.c:1544
+#, c-format
+msgid "-march=%s: unexpected ISA string at end: %s"
+msgstr "-march=%s: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Ð² ÐºÐ¾Ð½Ñ†Ðµ: %s"
+
+#: elfxx-riscv.c:1553
+#, c-format
+msgid "-march=%s: rv32e does not support the `f' extension"
+msgstr "-march=%s: rv32e Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«fÂ»"
+
+#: elfxx-riscv.c:1562
+#, c-format
+msgid "-march=%s: `d' extension requires `f' extension"
+msgstr "-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÑŽ Â«dÂ» Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«fÂ»"
+
+#: elfxx-riscv.c:1571
+#, c-format
+msgid "-march=%s: `q' extension requires `d' extension"
+msgstr "-march=%s: Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸ÑŽ Â«qÂ» Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«dÂ»"
+
+#: elfxx-riscv.c:1579
+#, c-format
+msgid "-march=%s: rv32 does not support the `q' extension"
+msgstr "-march=%s: rv32 Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ðµ Â«qÂ»"
+
+#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530
 #, 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:4128
 #, c-format
 msgid "%pB: cannot link together %s and %s objects"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ñ‚ÑŒ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ %s Ð¸ %s Ð²Ð¼ÐµÑ�Ñ‚Ðµ"
 
-#: elfxx-x86.c:578
+#: elfxx-x86.c:976
 #, 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: 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:1058
 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:2384
+#: elfxx-x86.c:2314
 #, 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:2580
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ %s\n"
+
+#: elfxx-x86.c:2582
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ %s\n"
+
+#: elfxx-x86.c:2605
+msgid "IBT and SHSTK properties"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð° IBT Ð¸ SHSTK"
+
+#: elfxx-x86.c:2607
+msgid "IBT property"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ IBT"
 
-#: elfxx-x86.c:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ñ€Ð¾Ð²Ð½Ñ�Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
+#: elfxx-x86.c:2609
+msgid "SHSTK property"
+msgstr "Ð¡Ð²Ð¾Ð¹Ñ�Ñ‚Ð²Ð¾ SHSTK"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:2753
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ VxWorks\n"
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:2762
 msgid "%F%P: failed to create GOT sections\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ GOT\n"
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:2780
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹ ifunc\n"
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:2817
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» GOT PLT\n"
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:2836
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» PLT Ñ� Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ IBT\n"
 
-#: elfxx-x86.c:2864
+#: elfxx-x86.c:2850
 msgid "%F%P: failed to create BND PLT section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» BND PLT\n"
 
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:2870
 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:2883
 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:2897
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» PLT .eh_frame\n"
 
+#: elfxx-x86.c:2939
+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,67 +5388,67 @@ 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:884
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñ€Ð°Ñ�Ð¶Ð°Ñ‚Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» %pA"
 
-#: libbfd.c:1101
+#: libbfd.c:1048
 #, c-format
 msgid "Deprecated %s called at %s line %d in %s\n"
 msgstr "Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s Ñ€Ñ�Ð´Ð¾Ð¼ Ñ� %s Ð² Ñ�Ñ‚Ñ€Ð¾ÐºÐµ %d Ð² %s\n"
 
-#: libbfd.c:1104
+#: libbfd.c:1051
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr "Ð’Ñ‹Ð·Ð²Ð°Ð½ Ð½ÐµÑ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¹ %s\n"
 
-#: linker.c:1697
+#: linker.c:1696
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr "%pB: ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ðº Â«%sÂ» Ñ�Ð¾Ð·Ð´Ð°Ñ‘Ñ‚ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ðµ"
@@ -5166,179 +5458,213 @@ msgstr "%pB: ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr "Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼ÑƒÑŽ Ñ�Ñ�Ñ‹Ð»ÐºÑƒ Ñ� Ð²Ñ…Ð¾Ð´Ð¾Ð¼ %s Ð¸ Ð²Ñ‹Ñ…Ð¾Ð´Ð¾Ð¼ %s"
 
-#: linker.c:2853
+#: linker.c:2852
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr "%pB: Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚Ñ�Ñ� Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ»\n"
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2862 linker.c:2872
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr "%pB: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñ€Ð°Ð·Ð¼ÐµÑ€\n"
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2881 linker.c:2887
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Â«%pAÂ»\n"
 
-#: linker.c:2893
+#: linker.c:2892
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ€Ð°Ð·Ð´ÐµÐ» Â«%pAÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ðµ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ\n"
 
-#: linker.c:3407
+#: linker.c:3404
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr "%pB: Ñ�ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹ Ñ� Ð¿Ñ€Ñ�Ð¼Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚, Ð° Ñ†ÐµÐ»ÑŒ Ñ� Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: linker.c:3410
+#: linker.c:3407
 #, 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:172
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ� Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� mach-o ARM: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� Ð¿ÐµÑ€Ð²Ñ‹Ð¼ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼"
+
+#: mach-o-arm.c:188
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ� Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:203
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:218
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:233
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ half sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ð´Ð»Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:265
+#, 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:329
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ mach-o ARM: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %d"
+
+#: mach-o.c:633
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ„Ð»Ð°Ð³Ð¸ Ð¼Ð°Ñ�ÐºÐ¸>"
 
-#: mach-o.c:687
+#: mach-o.c:688
 msgid " (<unknown>)"
 msgstr " (Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾)"
 
-#: mach-o.c:698
+#: mach-o.c:699
 #, c-format
 msgid " MACH-O header:\n"
 msgstr " Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Mach-O:\n"
 
-#: mach-o.c:699
+#: mach-o.c:700
 #, c-format
 msgid "   magic:      %#lx\n"
 msgstr "   Ð¾Ñ‚Ð».Ð¿Ñ€Ð¸Ð·Ð½:    %#lx\n"
 
-#: mach-o.c:700
+#: mach-o.c:701
 #, c-format
 msgid "   cputype:    %#lx (%s)\n"
 msgstr "   Ñ‚Ð¸Ð¿ Ð¦ÐŸ:       %#lx (%s)\n"
 
-#: mach-o.c:702
+#: mach-o.c:703
 #, c-format
 msgid "   cpusubtype: %#lx%s\n"
 msgstr "   Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ Ð¦ÐŸ:    %#lx%s\n"
 
-#: mach-o.c:704
+#: mach-o.c:705
 #, c-format
 msgid "   filetype:   %#lx\n"
 msgstr "   Ñ‚Ð¸Ð¿ Ñ„Ð°Ð¹Ð»Ð°:    %#lx\n"
 
-#: mach-o.c:705
+#: mach-o.c:706
 #, c-format
 msgid "   ncmds:      %#lx\n"
 msgstr "   Ñ‡_ÐºÐ¼Ð½Ð´:       %#lx\n"
 
-#: mach-o.c:706
+#: mach-o.c:707
 #, c-format
 msgid "   sizeocmds:  %#lx\n"
 msgstr "   Ñ€Ð°Ð·Ð¼_ÐºÐ¼Ð½Ð´:    %#lx\n"
 
-#: mach-o.c:707
+#: mach-o.c:708
 #, c-format
 msgid "   flags:      %#lx\n"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸:        %#lx\n"
 
-#: mach-o.c:708
+#: mach-o.c:709
 #, c-format
 msgid "   version:    %x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ð¸Ð¸: %x\n"
 
 #. Urg - what has happened ?
-#: mach-o.c:743
+#: mach-o.c:744
 #, c-format
 msgid "incompatible cputypes in mach-o files: %ld vs %ld"
 msgstr "Ð½ÐµÑ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼Ñ‹Ðµ Ñ‚Ð¸Ð¿Ñ‹ Ð¦ÐŸ Ð² Ñ„Ð°Ð¹Ð»Ð°Ñ… mach-o: %ld Ð¸ %ld"
 
-#: mach-o.c:912
+#: mach-o.c:913
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr "bfd_mach_o_canonicalize_symtab: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ‹"
 
-#: mach-o.c:2108
+#: mach-o.c:1505
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "Ð¸Ñ�ÐºÐ°Ð¶Ñ‘Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ mach-o: Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²"
+
+#: mach-o.c:2139
 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:2587
 #, 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:2694
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:2766
+#: mach-o.c:2799
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:2950
+#: mach-o.c:2983
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr "Ð°Ð´Ñ€ÐµÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#<PRIx64>) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð½Ð°Ñ‡Ð°Ð»Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%#<PRIx64>)"
 
-#: mach-o.c:3092
+#: mach-o.c:3125
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½ÑƒÑŽ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:3628
+#: mach-o.c:3660
 #, 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"
 
-#: mach-o.c:3671
+#: mach-o.c:3703
 #, 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"
 
-#: mach-o.c:3722
+#: mach-o.c:3754
 #, 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:3773
 #, 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:3856
 #, 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:3875
 #, 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:5064
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð°Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ %#x"
 
-#: mach-o.c:5122
+#: mach-o.c:5263
 #, 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:5385
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ° Ð±Ð°Ð¹Ñ‚ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ %#x"
 
-#: merge.c:878
+#: merge.c:895
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÐ¾Ð½ÐµÑ† Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%<PRId64>)"
@@ -5353,122 +5679,122 @@ msgstr "%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´Ðµ
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr "%pB: Ð½ÐµÑ‚ core Ð´Ð»Ñ� Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ� %d Ð±Ð°Ð¹Ñ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: mmo.c:955
+#: mmo.c:952
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr "%pB: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð²Ñ‹Ð¿ÑƒÑ�Ñ‚Ð¸Ñ‚ÑŒ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ ÐºÑ€Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ 4 (%#<PRIx64>)"
 
-#: mmo.c:1252
+#: mmo.c:1248
 #, 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:1395
 #, 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:1628
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ mmo-Ñ„Ð°Ð¹Ð»: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ lopcode Â«%dÂ»\n"
 
-#: mmo.c:1644
+#: mmo.c:1639
 #, 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:1679
 #, 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:1730
 #, 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:1771
 #, 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:1782
 #, 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:1807
 #, 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:1832
 #, 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:1854
 #, 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:1868
 #, 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:1975
 #, 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:2012
 #, 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:2026
 #, 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:2735
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%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: Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°: Â«MainÂ» Ñ€Ð°Ð²ÐµÐ½ %s, Ð° Ð½Ðµ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %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: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ� Ð´Ð»Ñ� mmo, Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ 65535 32-Ð±Ð¸Ñ‚Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²: %d. Ð‘ÑƒÐ´ÐµÑ‚ Ð²Ñ‹Ð´Ð°Ð½Ð° Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Â«MainÂ».\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: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ñ�Ñ� Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ� %d Ñ�Ð»Ð¾Ð² Ð´Ð¾ %d\n"
 
-#: mmo.c:3181
+#: mmo.c:3176
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ñ�Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² %pA Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð´Ð°Ð½Ð½Ñ‹Ðµ\n"
 
-#: mmo.c:3232
+#: mmo.c:3227
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr "%pB: Ð½ÐµÑ‚ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° 0\n"
 
-#: mmo.c:3239
+#: mmo.c:3234
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr "%pB: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð²; Ð´Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ€Ð°Ð²Ð½Ð° %<PRId64>"
 
-#: mmo.c:3244
+#: mmo.c:3239
 #, c-format
 msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð´Ð»Ñ� Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¾Ð² Ð´Ð»Ð¸Ð½Ñ‹ %<PRId64>: %#<PRIx64>"
@@ -5478,48 +5804,55 @@ msgstr "%pB: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð½
 msgid "unhandled OSF/1 core file section type %d"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» Ñ�Ð´Ñ€Ð° OSF/1 Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ñ� Ñ‚Ð¸Ð¿Ð¾Ð¼ %d"
 
-#: pef.c:527
+#: pdp11.c:1588
+#, c-format
+msgid "%pB: symbol indicates overlay (not supported)"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ Ð½Ð° Ð¾Ð²ÐµÑ€Ð»ÐµÐ¹ (Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�)"
+
+#: pef.c:530
 #, 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: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 "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» Ñ€Ð°Ð·Ð²Ñ‘Ñ€Ñ‚ÐºÐ¸\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:367
 #, 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:418 pei-x86_64.c:428 pei-x86_64.c:437
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» xdata\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:492
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr "Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ñ�ÐºÑ€Ñ‹Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð° (%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 "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%ld) Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ %d\n"
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:589
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ\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 "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s (%ld) Ð¼ÐµÐ½ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° (%ld)\n"
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:613
 #, c-format
 msgid ""
 "\n"
@@ -5528,12 +5861,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s)\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\tÐ�Ð°Ñ‡ Ð°Ð´Ñ€ÐµÑ�   \t  ÐšÐ¾Ð½ Ð°Ð´Ñ€ÐµÑ�\t   Ð Ð°Ñ�ÐºÑ€ Ð´Ð°Ð½Ð½Ñ‹Ðµ\n"
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:745
 #, c-format
 msgid ""
 "\n"
@@ -5543,42 +5876,42 @@ msgstr ""
 "Ð”Ð°Ð¼Ð¿ %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:796
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x"
 
-#: peicode.h:781
+#: peicode.h:802
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x"
 
-#: peicode.h:796
+#: peicode.h:817
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ð¸Ð¼ÐµÐ½Ð½Ð¾Ð¹ Ñ‚Ð¸Ð¿ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°; %x"
 
-#: peicode.h:1211
+#: peicode.h:1225
 #, 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:1238
 #, 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:1256
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð¾Ð»Ñ� Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ Import Library Format"
 
-#: peicode.h:1274
+#: peicode.h:1282
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr "%pB: Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð½Ðµ Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ� Ð½ÑƒÐ»Ñ‘Ð¼ Ð² Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð¼ Ñ„Ð°Ð¹Ð»Ðµ ILF"
 
-#: peicode.h:1330
+#: peicode.h:1338
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐºÐ¾Ð½ÐµÑ† Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ… Ð·Ð° Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸ÐµÐ¼ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°"
@@ -5636,32 +5969,32 @@ msgstr "Ð¡ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr "Ð”Ð»Ð¸Ð½Ð° Ñ€Ð°Ð·Ð´ÐµÐ»Ð°[%d]   = 0x%.8lx (%ld)\n"
 
-#: reloc.c:8232
+#: reloc.c:8291
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "INPUT_SECTION_FLAGS Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�"
 
-#: reloc.c:8333
+#: reloc.c:8392
 #, 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
+#: reloc.c:8480
 #, c-format
 msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
 msgstr "%X%P: %pB(%pA): Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Â«%pRÂ» Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
 
-#: reloc.c:8429
+#: reloc.c:8489
 #, 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:8551
 #, 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:8555
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "Ð´Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° â€” %s â€” ÑƒÑ�Ñ‚Ð°Ñ€ÐµÐ»Ð°?"
@@ -5671,7 +6004,7 @@ msgstr "Ð´Ð°Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� ÐºÐ¾Ð¼
 msgid "%pB: warning core file truncated"
 msgstr "%pB: Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„Ð°Ð¹Ð» core ÑƒÑ�ÐµÑ‡Ñ‘Ð½"
 
-#: som.c:5478
+#: som.c:5497
 #, c-format
 msgid ""
 "\n"
@@ -5680,7 +6013,7 @@ msgstr ""
 "\n"
 "Ð’Ñ�Ð¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Exec\n"
 
-#: som.c:5787
+#: som.c:5806
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½"
 
@@ -5694,7 +6027,7 @@ 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"
@@ -5704,73 +6037,82 @@ msgstr "%pB:%d: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ� ÐºÐ¾Ð½Ñ
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr "%pB(%pA+%#lx): Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ stabs Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸"
 
-#: syms.c:1091
+#: syms.c:1085
 msgid "unsupported .stab relocation"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ .stab"
 
-#: vms-alpha.c:479
+#: vms-alpha.c:480
 msgid "corrupt EIHD record - size is too small"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° â€” Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:666
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr "Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EIHS Ð¿Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %#x"
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1158
+msgid "record is too small for symbol name length"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»Ð° Ð´Ð»Ñ� Ð´Ð»Ð¸Ð½Ñ‹ Ð¸Ð¼ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
+
+#: vms-alpha.c:1191
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ñ€Ð°Ð·Ð¼ÐµÑ€ (%#x) Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»"
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1215
 #, 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:1225
 #, 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:1367
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr "Ð·Ð°Ð¿Ð¸Ñ�ÑŒ EGSD Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°: ÐµÑ‘ Ð¿Ð¾Ð»Ðµ psindx Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)"
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1443
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ EGSD %d"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1476
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ�Ñ‚ÐµÐºÐ° (%d) Ð² _bfd_vms_push"
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1490
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "Ð²Ñ‹Ñ…Ð¾Ð´ Ð·Ð° Ð½Ð¸Ð¶Ð½ÑŽÑŽ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ Ñ�Ñ‚ÐµÐºÐ° Ð² _bfd_vms_pop"
 
+#: vms-alpha.c:1564
+#, 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 +6122,1480 @@ 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:4001
 #, 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:4053 vms-alpha.c:4268
 #, c-format
 msgid "size error in section %pA"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4213
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "Ð½ÐµÑ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ ALPHA_R_BSR"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4254
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4551
 #, 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:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630
+#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675
+#: vms-alpha.c:4681
 #, c-format
 msgid "%s not implemented"
 msgstr "%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4724
 #, 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:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237
+#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s + %s"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5330
 #, c-format
 msgid "unknown reloc %s"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5344
 msgid "invalid section index in ETIR"
 msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¹ Ð¸Ð½Ð´ÐµÐºÑ� Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð² ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5353
 msgid "relocation for non-REL psect"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ� Ð½Ðµ-REL psect"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5402
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5816
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ (%d) *Ð�Ð•Ð˜Ð—Ð’Ð•Ð¡Ð¢Ð�Ðž*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:5932
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (len=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:5937
 #, 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:5954
 #, 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:5957
 #, c-format
 msgid "Module header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:5958
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   ÑƒÑ€Ð¾Ð²ÐµÐ½ÑŒ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ñ‹  : %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:5959
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   Ð¼Ð°ÐºÑ�. Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð·Ð°Ð¿Ð¸Ñ�Ð¸: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:5965
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:5971
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:5974
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�         : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:5978
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:5984
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ð°Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:5987
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   Ð²ÐµÑ€Ñ�Ð¸Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�      : %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:5990
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð° Ð´Ð°Ñ‚Ð° ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ð¸\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:5992
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   Ð´Ð°Ñ‚Ð° ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ†Ð¸Ð¸    : %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:5997
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Ð�Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñ�Ð¾Ñ€Ð½Ð¾Ð³Ð¾ Ñ�Ð·Ñ‹ÐºÐ°\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:5998
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ñ�Ð·Ñ‹ÐºÐ°     : %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6002
 #, c-format
 msgid "Source Files Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¸Ñ�Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6003
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   Ñ„Ð°Ð¹Ð»: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6007
 #, c-format
 msgid "Title Text Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ð°\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6008
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ : %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6012
 #, c-format
 msgid "Copyright Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÐºÐ¾Ð³Ð¾ Ð¿Ñ€Ð°Ð²Ð°\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6013
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÐºÐ¾Ðµ Ð¿Ñ€Ð°Ð²Ð¾: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6017
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿ emh %u\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6027
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (len=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6032
 #, 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:6036
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   ÐºÐ¾Ð»-Ð²Ð¾ ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… Ð¿Ð°Ñ€: %u\n"
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6038
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   Ð·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6042
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ flags: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6043
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ psect: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6045
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ� Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸   : 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6054
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6056
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6058
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6060 vms-alpha.c:6081
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6062
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6064
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6066
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6068
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6075
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6077
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6079
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6083
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6085
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6087
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6089
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6091
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6093
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6095
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6097
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6099
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6108
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (len=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6121
 #, 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:6127 vms-alpha.c:6378
 #, c-format
 msgid "   Error: length larger than remaining space in record\n"
 msgstr "   ÐžÑˆÐ¸Ð±ÐºÐ°: Ð´Ð»Ð¸Ð½Ð° Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐ³Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ñ€Ð°Ð½Ñ�Ñ‚Ð²Ð° Ð² Ð·Ð°Ð¿Ð¸Ñ�Ð¸\n"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6139
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°\n"
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6140 vms-alpha.c:6157
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ðµ  : 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6141 vms-alpha.c:6158
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸      : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6145
 #, 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:6146 vms-alpha.c:6203 vms-alpha.c:6252
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ�       : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6156
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC â€” Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ð°\n"
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6162
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   alloc (len)   : %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6163
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¾Ð±Ñ€Ð°Ð·Ð° : 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6165
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ symvec: 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6167
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ�          : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6180
 #, 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:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6184
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6188
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6190
 #, 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:6193 vms-alpha.c:6269 vms-alpha.c:6288
 #, 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:6195 vms-alpha.c:6271 vms-alpha.c:6290
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ�        : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6202
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM - Ñ�Ñ�Ñ‹Ð»ÐºÐ¸ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6214
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC - Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° Ñ†ÐµÐ»Ð¾Ñ�Ñ‚Ð½Ð¾Ñ�Ñ‚Ð¸\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6215
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   Ñ„Ð»Ð°Ð³Ð¸         : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6219
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   id Ñ�Ð¾Ð¾Ñ‚Ð²ÐµÑ‚Ñ�Ñ‚Ð²Ð¸Ñ� : %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6221
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   Ñ�ÐµÑ€ÑŒÑ‘Ð·Ð½Ð¾Ñ�Ñ‚ÑŒ Ð¾ÑˆÐ¸Ð±ÐºÐ¸: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6224
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¸: %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6226
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ð¾Ð±ÑŠÐµÐºÑ‚Ð°: %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6229
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¹ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€: 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6232
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   ascii-Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€: %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6240
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ ÑƒÐ½Ð¸Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6244
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6246
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   Ñ‚Ð¾Ñ‡ÐºÐ° Ð²Ñ…Ð¾Ð´Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6248
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   proc descr : 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6250
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6261
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6265
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   Ð²ÐµÐºÑ‚Ð¾Ñ€      : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6280
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM - Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ñ� Ð²ÐµÑ€Ñ�Ð¸ÐµÐ¹\n"
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6284
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ð¸Ð¸: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6295
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ egsd-Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ñ‚Ð¸Ð¿Ð° %u\n"
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6330
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÐµÐ»ÑŒ insn: 0x%08x\n"
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6334
 #, 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:6339
 #, 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:6345
 #, 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:6350
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6361
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr "  %s (len=%u+%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6383
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr "   (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð°Ð·Ð¼ÐµÑ€: 4+%3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6387
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñ�Ñ‚ÐµÐº) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6391
 #, c-format
 msgid "STA_LW (stack longword) 0x%08x\n"
 msgstr "STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x\n"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6395
 #, c-format
 msgid "STA_QW (stack quadword) 0x%08x %08x\n"
 msgstr "STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ñ‹Ñ… Ñ�Ð»Ð¾Ð²) 0x%08x %08x\n"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6400
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (Ñ�Ñ‚ÐµÐº psect Ð±Ð°Ð·Ð° + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6402
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    psect: %u, Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6408
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (Ñ�Ñ‚ÐµÐº Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6411
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6414
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ Ñ�Ñ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6418
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð±Ð°Ð¹Ñ‚)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6421
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6424
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6427
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ‡ÐµÑ‚Ð²ÐµÑ€Ñ‘Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6433
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€) %u Ð±Ð°Ð¹Ñ‚\n"
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6440
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ�) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6444
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ð°) %.*s\n"
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6448
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð¾Ñ‚Ð½Ð¾Ñ�Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6451
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6454
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð½Ð° psect)\n"
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6460
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ñ�Ñ‚Ð²ÐµÐ½Ð½Ð¾) %u Ð±Ð°Ð¹Ñ‚\n"
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6467
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾) %.*s\n"
 
-#: vms-alpha.c:6291
+#: vms-alpha.c:6471
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ LP Ñ� Ñ�Ð¸Ð³Ð½Ð°Ñ‚ÑƒÑ€Ð¾Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹)\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6474
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ðµ) *todo*\n"
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6477
 #, 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:6481
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (Ð½ÐµÑ‚ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6484
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6487
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (Ð²Ñ‹Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6490
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (ÑƒÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6493
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (Ð´ÐµÐ»ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6496
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð¸)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6499
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‰ÐµÐµ Ð¸Ð»Ð¸)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6502
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑ�ÐºÐ¾Ðµ Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‰ÐµÐµ Ð¸Ð»Ð¸)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6505
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (Ð¸Ð½Ð²ÐµÑ€Ñ�Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6508
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6511
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (Ð¿Ð¾Ð»Ðµ Ð²Ñ�Ñ‚Ð°Ð²ÐºÐ¸)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6514
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð´Ð²Ð¸Ð³)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6517
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (Ð±ÐµÐ·Ð·Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¹ Ñ�Ð´Ð²Ð¸Ð³)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6520
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (Ñ†Ð¸ÐºÐ»Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�Ð´Ð²Ð¸Ð³)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6523
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (Ð²Ñ‹Ð±Ð¾Ñ€)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6526
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Ð² Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸)\n"
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6529
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6533
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð°Ñ€Ð°)\n"
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6537
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ð°Ñ� Ð¿Ð°Ñ€Ð° + Ñ�Ð¸Ð³Ð½Ð°Ñ‚ÑƒÑ€Ð°)\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6539
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6542
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   Ñ�Ð¸Ð³Ð½Ð°Ñ‚ÑƒÑ€Ð°: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6545
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ� Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6547
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¹: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6551
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� ÑƒÑ�Ð»Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ð°)\n"
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6553
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð¸Ð¼Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s\n"
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6557
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð¾Ðµ ÑƒÑ�Ð»Ð¾Ð²Ð¸Ðµ psect + Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6560
 #, 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:6567
 #, 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:6571
 #, 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:6575
 #, 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:6579
 #, 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:6583
 #, 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:6587
 #, 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:6591
 #, 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:6595
 #, 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:6600
 #, 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:6604
 #, 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:6608
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (ÑƒÑ�Ñ‚Ð°Ð½Ð¾Ð²ÐºÐ° Ð±Ð°Ð·Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6614
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ð±Ð°Ð·Ñ‹ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�) %u\n"
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6618
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6621
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6624
 #, 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:6627 vms-alpha.c:7051 vms-alpha.c:7177
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6657 vms-alpha.c:6696
 #, c-format
 msgid "cannot read GST record length\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð´Ð»Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6678
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ð² Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
 
-#: vms-alpha.c:6524
+#: vms-alpha.c:6704
 #, c-format
 msgid "cannot read GST record header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GST\n"
 
-#: vms-alpha.c:6537
+#: vms-alpha.c:6717
 #, c-format
 msgid " corrupted GST\n"
 msgstr " Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ GST\n"
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6725
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�ÑŒ GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6754
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ EOBJ %u\n"
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:6778
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº Ð±Ð¸Ñ‚: %u, Ð±Ð°Ð·Ð¾Ð²Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x\n"
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:6792
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   bitmap: 0x%08x (Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:6799
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:6825
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:6831
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ: 0x%08x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: 0x%08x\n"
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:6853
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²), Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:6860
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:6982
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 Ð±Ð¸Ñ‚Ð° *Ð½Ðµ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:6987
 #, 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:6998
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "Ð½ÐµÑ�Ð²Ñ�Ð·Ð½Ñ‹Ð¹ Ð¼Ð°Ñ�Ñ�Ð¸Ð² %s\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7003
 #, 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:7008
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7012
 #, c-format
 msgid "Strides:\n"
 msgstr "Ð¨Ð°Ð³Ð¸:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7022
 #, c-format
 msgid "Bounds:\n"
 msgstr "Ð“Ñ€Ð°Ð½Ð¸Ñ†Ñ‹:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7028
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: Ð½Ð¸Ð¶Ð½Ñ�Ñ�: %u, Ð²ÐµÑ€Ñ…Ð½Ñ�Ñ�: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7040
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ð±Ð¸Ñ‚ %s\n"
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7045
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "Ð±Ð°Ð·Ð°: %u, Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ�: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7066
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7072
 #, c-format
 msgid "(no value)\n"
 msgstr "(Ð½ÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7075
 #, c-format
 msgid "(not active)\n"
 msgstr "(Ð½Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7078
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(Ð½Ðµ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¾)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7081
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7085
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7088
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(Ð´Ð°Ð»ÐµÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7091
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ð¿Ð¾ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¼Ñƒ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸ÑŽ %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7095
 #, 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:7102
 msgid "literal"
 msgstr "Ð»Ð¸Ñ‚ÐµÑ€Ð°Ð»"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7105
 msgid "address"
 msgstr "Ð°Ð´Ñ€ÐµÑ�"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7108
 msgid "desc"
 msgstr "Ð¾Ð¿Ð¸Ñ�"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7111
 msgid "reg"
 msgstr "Ñ€ÐµÐ³"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7128
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "len: %2u, kind: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7134
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "Ð°Ñ‚Ð¾Ð¼Ð°Ñ€Ð½Ð¾, Ñ‚Ð¸Ð¿=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7138
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "ÐºÐ¾Ñ�Ð²ÐµÐ½Ð½Ð¾, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¾ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7142
 #, c-format
 msgid "typed pointer\n"
 msgstr "Ñ‚Ð¸Ð¿Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7146
 #, c-format
 msgid "pointer\n"
 msgstr "ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7154
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "Ð¼Ð°Ñ�Ñ�Ð¸Ð², Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, bitmap: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7161
 #, c-format
 msgid "array descriptor:\n"
 msgstr "Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð°:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7168
 #, c-format
 msgid "type spec for element:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ� Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð°:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7170
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ� subscript %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7188
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7199
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7205
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " Ñ‚Ð¸Ð¿: %3u, Ð´Ð»Ð¸Ð½Ð°: %3u (Ð¿Ð¾ 0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7219
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð» DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7262
 #, c-format
 msgid "standard data: %s\n"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7265 vms-alpha.c:7353
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7272
 #, c-format
 msgid "modbeg\n"
 msgstr "modbeg\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7274
 #, 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:7280 vms-alpha.c:7554
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7283
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñ�Ñ‚Ð¾Ñ€   : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7288
 #, c-format
 msgid "modend\n"
 msgstr "modend\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7295
 msgid "rtnbeg\n"
 msgstr "rtnbeg\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7297
 #, 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:7302
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    Ð¸Ð¼Ñ� Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7310
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "rtnend: Ñ€Ð°Ð·Ð¼ÐµÑ€ 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7318
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ� bkpt 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7327
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "Ñ�Ð¿Ð¸Ð»Ð¾Ð³: Ñ„Ð»Ð°Ð³Ð¸: %u, Ñ�Ñ‡Ñ‘Ñ‚Ñ‡Ð¸Ðº: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7337
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "blkbeg: Ð°Ð´Ñ€ÐµÑ�: 0x%08x, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7346
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "blkend: Ñ€Ð°Ð·Ð¼ÐµÑ€: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7352
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (Ð´Ð»Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7359
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7368
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "recbeg: Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7370
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "    Ð´Ð»Ð¸Ð½Ð°: %u Ð±Ð¸Ñ‚\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7375
 #, c-format
 msgid "recend\n"
 msgstr "recend\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7379
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "enumbeg, Ð´Ð»Ð¸Ð½Ð°: %u, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7383
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "enumelt, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7387
 #, c-format
 msgid "enumend\n"
 msgstr "enumend\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7392
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "Ð¼ÐµÑ‚ÐºÐ°, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7394
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7404
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "Ð½ÐµÑ�Ð¼ÐµÐ¶Ð½Ñ‹Ð¹ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ (nbr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7407
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�: 0x%08x, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7417
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸ (Ð´Ð»Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7434
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7441
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7447
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7453
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7459
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7464
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7469
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7474
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7478
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7483
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7485
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7490
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7492
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7498
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7502
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x Ñ�Ñ‚Ñ€Ð¾ÐºÐ°: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7507
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ�* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7522
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "Ð¸Ñ�Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº (Ð´Ð»Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7537
 #, 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:7542
 #, 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:7551
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   Ð¸Ð¼Ñ� Ñ„Ð°Ð¹Ð»Ð°   : %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7560
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7565 vms-alpha.c:7570
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7575 vms-alpha.c:7580
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7585 vms-alpha.c:7590
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7594
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7598
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ�* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:7610
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ñ‹Ð¹* Ñ‚Ð¸Ð¿ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ� %u\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:7642
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:7646
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (Ñ€Ð°Ð·Ð¼ÐµÑ€: %u, nbr Ð±Ð»Ð¾ÐºÐ¾Ð²: %u)\n"
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:7650
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " majorid: %u, minorid: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:7658
 msgid "executable"
 msgstr "Ð¸Ñ�Ð¿Ð¾Ð»Ð½Ñ�ÐµÐ¼Ñ‹Ð¹"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7661
 msgid "linkable image"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ð¹ Ð¾Ð±Ñ€Ð°Ð·"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:7668
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " Ñ‚Ð¸Ð¿ Ð¾Ð±Ñ€Ð°Ð·Ð°: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:7674
 msgid "native"
 msgstr "Ñ€Ð¾Ð´Ð½Ð¾Ð¹"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:7677
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:7684
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", Ð¿Ð¾Ð´Ñ‚Ð¸Ð¿: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:7691
 #, 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:7695
 #, c-format
 msgid " fixup info rva: "
 msgstr " fixup info rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:7697
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ Ð²ÐµÐºÑ‚Ð¾Ñ€ rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:7700
 #, c-format
 msgid ""
 "\n"
@@ -7250,474 +7604,474 @@ msgstr ""
 "\n"
 " Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð¼Ð°Ñ�Ñ�Ð¸Ð²Ð° Ð²ÐµÑ€Ñ�Ð¸Ð¹: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:7705
 #, 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:7711
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " Ñ„Ð»Ð°Ð³Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:7742
 #, 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:7748
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:7755
 #, 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:7758
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:7766
 #, c-format
 msgid "system version array information:\n"
 msgstr "Ð¼Ð°Ñ�Ñ�Ð¸Ð² Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ Ð²ÐµÑ€Ñ�Ð¸Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ‹:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:7770
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:7780
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð²ÐµÑ€Ñ�Ð¸ÑŽ EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:7783
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:7787
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:7790
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:7793
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:7796
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:7799
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:7802
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:7805
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:7808
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:7811
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:7814
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:7817
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:7820
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:7823
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:7826
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:7829
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:7832
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:7835
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:7838
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:7841
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:7844
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:7847
 msgid "*unknown*        "
 msgstr "*Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ð¾*        "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:7863 vms-alpha.c:8137
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:7866
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°:  (Ñ€Ð°Ð·Ð¼ÐµÑ€=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:7869
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " ÐŸÐµÑ€Ð²Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:7873
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " Ð’Ñ‚Ð¾Ñ€Ð¾Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:7877
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " Ð¢Ñ€ÐµÑ‚Ð¸Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:7881
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " Ð§ÐµÑ‚Ð²Ñ‘Ñ€Ñ‚Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:7885
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " ÐžÐ±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:7896
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:7900
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:7903
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " Ð¸Ð¼Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°       : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:7905
 #, c-format
 msgid " link time        : %s\n"
 msgstr " Ð²Ñ€ÐµÐ¼Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:7907
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½Ñ‚-Ñ€ Ð¾Ð±Ñ€Ð°Ð·Ð°      : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:7909
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½Ñ‚-Ñ€ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:7911
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½Ñ‚-Ñ€ Ñ�Ð±Ð¾Ñ€ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ð°: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:7921
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:7925
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð² & Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:7931
 #, 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:7936
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²: vbn: %u, Ð·Ð°Ð¿Ð¸Ñ�ÐµÐ¹: %u\n"
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:7941
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹: vbn: %u, Ñ€Ð°Ð·Ð¼ÐµÑ€: %u\n"
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:7954
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:7965
 #, 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:7973
 #, 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:7978
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " Ñ„Ð»Ð°Ð³Ð¸: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8016
 #, 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:8022
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8025
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8028
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8031
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8034
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8037
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8043
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8046
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " Ð¸Ð´ÐµÐ½-Ñ€: 0x%08x, Ð¸Ð¼Ñ�: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8056
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8060
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8069
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8075
 #, 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:8085
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DMT psect\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8089
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  Ð½Ð°Ñ‡Ð°Ð»Ð¾ psect: 0x%08x, Ð´Ð»Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8102
 #, c-format
 msgid "cannot read DST\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8112
 #, c-format
 msgid "cannot read GST\n"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8116
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð²:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8143
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ‚Ð¾Ñ€ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð»Ð°Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8147
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  iaflink : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8151
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  fixuplnk: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8154
 #, c-format
 msgid "  size : %u\n"
 msgstr "  Ñ€Ð°Ð·Ð¼ÐµÑ€: %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8156
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  Ñ„Ð»Ð°Ð³Ð¸: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8161
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8166
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8171
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8174
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8178
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8181
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8184
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8186
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8194
 #, c-format
 msgid " Shareable images:\n"
 msgstr " ÐžÐ±Ñ‰Ð¸Ðµ Ð¾Ð±Ñ€Ð°Ð·Ñ‹:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8199
 #, 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:8206
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8211
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8216
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ñ�Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ .address:\n"
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8221
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ñ�Ð»Ð¾Ð²Ð¾ Ñ�Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ñ… Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ .address:\n"
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8226
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ð°:\n"
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8231
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " Ð¡Ñ�Ñ‹Ð»Ð¾Ñ‡Ð½Ñ‹Ðµ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… Ð¿Ð°Ñ€:\n"
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8240
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ (%u Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð²):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8246
 #, 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:9123
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ� Ñ�Ñ�Ñ‹Ð»ÐºÐ° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚Ñ�Ñ�\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9194
 #, 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:1525
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð· Â«%sÂ» Ð¸Ð· Â«%sÂ»"
 
-#: vms-misc.c:361
+#: vms-misc.c:367
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ� Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
-#: vms-misc.c:366
+#: vms-misc.c:372
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "Ð’Ñ‹Ð·Ð¾Ð² _bfd_vms_output_counted Ñ�Ð¾ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑ�Ñ‚Ð²Ð¾Ð¼ Ð±Ð°Ð¹Ñ‚"
 
@@ -7731,172 +8085,209 @@ msgstr "%pB: Ð¾Ð±Ñ‰Ð¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ XCO
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ð¾Ð±ÑŠÐµÐºÑ‚ Ð±ÐµÐ· Ñ€Ð°Ð·Ð´ÐµÐ»Ð° .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1417
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr "%pB: Â«%sÂ» Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ�Ñ‚Ñ€Ð¾Ðº, Ð½Ð¾ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ"
 
-#: xcofflink.c:1466
+#: xcofflink.c:1470
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr "%pB: ÐºÐ»Ð°Ñ�Ñ� %d Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ» Ð½Ðµ Ð¸Ð¼ÐµÐµÑ‚ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² aux"
 
-#: xcofflink.c:1489
+#: xcofflink.c:1493
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð¸Ð¼ÐµÐµÑ‚ Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ csect: %d"
 
-#: xcofflink.c:1502
+#: xcofflink.c:1506
 #, 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:1537
 #, c-format
 msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ�Ð²Ð»Ñ�ÐµÑ‚Ñ�Ñ� ÐºÐ»Ð°Ñ�Ñ�Ð¾Ð¼ %d scnlen %<PRId64>"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1684
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr "%pB: csect Â«%sÂ» Ð½Ðµ Ð² Ð¾Ð±Ñ€Ð°Ð¼Ð»Ñ�ÑŽÑ‰ÐµÐ¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ"
 
-#: xcofflink.c:1788
+#: xcofflink.c:1792
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ Ñ€Ð°Ñ�Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ XTY_LD Â«%sÂ»"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2113
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s:%<PRId64> Ð½Ðµ Ð² csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3193
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: Ð½ÐµÑ‚ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3298
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3677
 msgid "error: undefined symbol __rtinit"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinit"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4055
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ð½ÐµÑ€Ð°Ñ�Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ð¼ Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ Â«%sÂ»"
 
-#: xcofflink.c:4072
+#: xcofflink.c:4067
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr "%pB: Â«%sÂ» Ð² Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¸ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°, Ð½Ð¾ Ð½Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ°"
 
-#: xcofflink.c:4089
+#: xcofflink.c:4084
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ·Ñ‡Ð¸ÐºÐ° Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ %pA, Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð¼ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ� Ñ‡Ñ‚ÐµÐ½Ð¸Ñ�"
 
-#: xcofflink.c:5113
+#: xcofflink.c:5112
 #, 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
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2872
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»: 0x%02x"
+
+#: elfnn-aarch64.c:5246
 #, 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:5338
 #, 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:5351
+msgid "%pB: error: erratum 843419 immediate 0x%"
+msgstr "%pB: Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ° Ð´Ð»Ñ� Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 Ð² 0x%"
+
+#: elfnn-aarch64.c:5899
 #, 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:5990
 #, 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:6103 elfnn-aarch64.c:6140
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ TLS %s Ð´Ð»Ñ� Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»"
+
+#: elfnn-aarch64.c:7125
 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:7153
 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:7720
 #, 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-riscv.c:187 elfnn-riscv.c:222
 #, 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:1977
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pcrel_lo Ñ� Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼"
+
+#: elfnn-riscv.c:2198
+#, 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: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Â«%sÂ» Ð½ÐµÐ»ÑŒÐ·Ñ� Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒ Ð¿Ñ€Ð¸ Ñ�Ð¾Ð·Ð´Ð°Ð½Ð¸Ð¸ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°; Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐ¹Ñ‚Ðµ Ñ� -fPIC\n"
+
+#: elfnn-riscv.c:2208
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: Ð½ÐµÑ€Ð°Ð·Ñ€ÐµÑˆÐ¸Ð¼Ð¾Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ %s Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð° Â«%sÂ»\n"
+
+#: elfnn-riscv.c:2247
 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:2252
 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:2258
+msgid "dangerous relocation error"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ�"
+
+#: elfnn-riscv.c:2264
 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:2630
 #, 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: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d"
+msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ Ð²ÐµÑ€Ñ�Ð¸Ð¸ ISA Ñ€Ð°Ñ�ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ� Â«%sÂ». %d.%d Ð¸ %d.%d"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-riscv.c:2648
 #, 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 "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ° ISA Â«%sÂ». ÐŸÐµÑ€Ð²Ñ‹Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Â«iÂ» Ð¸Ð»Ð¸ Â«eÂ», Ð½Ð¾ Ð¸Ð¼ÐµÐµÐ¼ Â«%sÂ»."
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773
+#: elfnn-riscv.c:2692
 #, c-format
 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:2921
+#: elfnn-riscv.c:2893
 #, c-format
 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:2946
+#: elfnn-riscv.c:2913
 #, c-format
 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:2954
+#: elfnn-riscv.c:2921
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ñ‹Ð¹ XLEN (%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:3039
+#: elfnn-riscv.c:3035
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
-msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ°: %pB: Ð½ÐµÑ�Ð¾Ð³Ð»Ð°Ñ�ÑƒÑŽÑ‰Ð°Ñ�Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� priv spec (Ñ�Ñ‚Ð°Ñ€ÑˆÐ°Ñ�/Ð¼Ð»Ð°Ð´ÑˆÐ°Ñ�/Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ)."
+msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u."
+msgstr "Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: %pB Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½ÑƒÑŽ Ð²ÐµÑ€Ñ�Ð¸ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ %u.%u.%u, Ð½Ð¾ Ð´Ð»Ñ� Ð²Ñ‹Ð²Ð¾Ð´Ð° Ð¸Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚Ñ�Ñ� Ð²ÐµÑ€Ñ�Ð¸Ñ� %u.%u.%u."
+
+#: elfnn-riscv.c:3053
+msgid "warning: privilege 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:3055
+#: elfnn-riscv.c:3081
 #, c-format
 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:3096
+#: elfnn-riscv.c:3122
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7905,111 +8296,111 @@ msgstr ""
 "%pB: ABI Ð½Ðµ Ñ�Ð¾Ð²Ð¼ÐµÑ�Ñ‚Ð¸Ð¼ Ñ� Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ Ð² Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸:\n"
 "  Ñ†ÐµÐ»ÑŒ Ñ�Ð¼ÑƒÐ»Ñ�Ñ†Ð¸Ð¸ Â«%sÂ» Ð½Ðµ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Â«%sÂ»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119
+#: elfnn-riscv.c:3176
 #, 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:3186
 #, 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:3724
 #, 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>"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:164
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð¼Ñ� Ð¿ÑƒÑ�Ñ‚Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°"
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:191
 #, 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:201
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ�Ð¾Ð·Ð´Ð°Ñ‚ÑŒ Ñ„Ð¸ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¹ Ð¿ÑƒÑ�Ñ‚Ð¾Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»"
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:539
 #, c-format
-msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld"
-msgstr "%pB: Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ aout ÑƒÐºÐ°Ð·Ð°Ð½ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…: %ld"
+msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+msgstr "%pB: Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐµ aout ÑƒÐºÐ°Ð·Ð°Ð½ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð¾Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…: %u"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:1088
 #, 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:1241
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° [.edata (Ð¸Ð»Ð¸ Ð³Ð´Ðµ Ð¾Ð½ Ð½Ð°ÑˆÑ‘Ð»Ñ�Ñ�)]"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1242
 msgid "Import Directory [parts of .idata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° [Ñ‡Ð°Ñ�Ñ‚ÑŒ .idata]"
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1243
 msgid "Resource Directory [.rsrc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð¾Ð² [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1244
 msgid "Exception Directory [.pdata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¸Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1245
 msgid "Security Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1246
 msgid "Base Relocation Directory [.reloc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ� [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1247
 msgid "Debug Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1248
 msgid "Description Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ð°Ð½Ð¸Ð¹"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1249
 msgid "Special Directory"
 msgstr "Ð¡Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1250
 msgid "Thread Storage Directory [.tls]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð° Ð½Ð¸Ñ‚ÐµÐ¹ [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1251
 msgid "Load Configuration Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1252
 msgid "Bound Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð±Ñ�Ð·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1253
 msgid "Import Address Table Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²"
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1254
 msgid "Delay Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ñ‚Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1255
 msgid "CLR Runtime Header"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ� CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1256
 msgid "Reserved"
 msgstr "Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1316
 #, c-format
 msgid ""
 "\n"
@@ -8018,7 +8409,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1322
 #, c-format
 msgid ""
 "\n"
@@ -8027,7 +8418,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1329
 #, c-format
 msgid ""
 "\n"
@@ -8036,7 +8427,7 @@ msgstr ""
 "\n"
 "Ð’ %s Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx\n"
 
-#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365
+#: peXXigen.c:1369
 #, c-format
 msgid ""
 "\n"
@@ -8045,12 +8436,12 @@ msgstr ""
 "\n"
 "Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ� Ð¾Ð¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»Ñ� Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %04lx\n"
 
-#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369
+#: peXXigen.c:1373
 #, 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
+#: peXXigen.c:1380
 #, c-format
 msgid ""
 "\n"
@@ -8059,7 +8450,7 @@ msgstr ""
 "\n"
 "Ð�ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° reldata! ÐžÐ¿Ð¸Ñ�Ð°Ñ‚ÐµÐ»ÑŒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ð½Ðµ Ñ€Ð°Ñ�ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½.\n"
 
-#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382
+#: peXXigen.c:1385
 #, c-format
 msgid ""
 "\n"
@@ -8068,7 +8459,7 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» %s)\n"
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1388
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8077,7 +8468,7 @@ msgstr ""
 " vma:            Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð°    ÐžÑ‚Ð¼ÐµÑ‚ÐºÐ°   Ð¦ÐµÐ¿Ð¾Ñ‡ÐºÐ°    Ð˜Ð¼Ñ�       ÐŸÐµÑ€Ð²Ñ‹Ð¹\n"
 "                  Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ð¹  Ð’Ñ€ÐµÐ¼ÐµÐ½Ð¸   ÐŸÐµÑ€ÐµÑ�Ñ‹Ð»ÐºÐ¸  DLL       Ð¨Ð»ÑŽÐ·\n"
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1437
 #, c-format
 msgid ""
 "\n"
@@ -8086,12 +8477,12 @@ msgstr ""
 "\n"
 "\tÐ˜Ð¼Ñ� DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1453
 #, 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:1478
 #, c-format
 msgid ""
 "\n"
@@ -8100,13 +8491,12 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¿ÐµÑ€Ð²Ñ‹Ð¹ ÑˆÐ»ÑŽÐ·, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1522 peXXigen.c:1561
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1654
 #, c-format
 msgid ""
 "\n"
@@ -8115,7 +8505,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð°, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½Ð° Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
+#: peXXigen.c:1660
 #, c-format
 msgid ""
 "\n"
@@ -8124,7 +8514,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
 
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
+#: peXXigen.c:1671
 #, c-format
 msgid ""
 "\n"
@@ -8133,7 +8523,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚Ñ�Ñ� Ð² Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ»\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1682
 #, c-format
 msgid ""
 "\n"
@@ -8142,7 +8532,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s, Ð½Ð¾ Ð¾Ð½Ð° Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ� (%d)\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1688
 #, c-format
 msgid ""
 "\n"
@@ -8151,7 +8541,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° Ð² %s Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx\n"
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1716
 #, c-format
 msgid ""
 "\n"
@@ -8162,67 +8552,67 @@ msgstr ""
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð° (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» %s)\n"
 "\n"
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1720
 #, 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:1723
 #, 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:1727
 #, 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:1730
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Ð˜Ð¼Ñ� \t\t\t\t"
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1741
 #, 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:1744
 #, c-format
 msgid "Number in:\n"
 msgstr "Ð�Ð¾Ð¼ÐµÑ€ Ð²:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1747
 #, 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:1751
 #, 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:1754
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾Ð²\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1757
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² \t\t"
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1762
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½ \t\t"
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1767
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð² \t\t\t"
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1781
 #, c-format
 msgid ""
 "\n"
@@ -8231,20 +8621,20 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ñ… Ð°Ð´Ñ€ÐµÑ�Ð¾Ð² -- Ð�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1790
 #, 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:1809
 msgid "Forwarder RVA"
 msgstr "ÐŸÐµÑ€ÐµÐ°Ð´Ñ€ÐµÑ�ÑƒÐµÐ¼Ñ‹Ð¹ RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1821
 msgid "Export RVA"
 msgstr "Ð­ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¹ RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1828
 #, c-format
 msgid ""
 "\n"
@@ -8253,29 +8643,27 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° [Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ñ‹Ñ… Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð²/ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ð¸Ð¼Ñ‘Ð½]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1836
 #, 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:1843
 #, 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:1857
 #, 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:1911 peXXigen.c:2107
 #, 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:1915 peXXigen.c:2111
 #, c-format
 msgid ""
 "\n"
@@ -8284,12 +8672,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» .pdata)\n"
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1918
 #, 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:1920
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8298,27 +8686,27 @@ msgstr ""
 " vma:\t\tÐ�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹  ÐšÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹   EH          EH       Ð�Ð´Ñ€ÐµÑ�         ÐœÐ°Ñ�ÐºÐ°\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�      Ð�Ð´Ñ€ÐµÑ�      ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸Ðº  Ð”Ð°Ð½Ð½Ñ‹Ðµ   ÐšÐ¾Ð½Ñ†Ð°ÐŸÑ€Ð¾Ð»Ð¾Ð³Ð°  Ð˜Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ�\n"
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1933
 #, 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
+#: peXXigen.c:2002
 #, c-format
 msgid " Register save millicode"
 msgstr " ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°"
 
-#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004
+#: peXXigen.c:2005
 #, c-format
 msgid " Register restore millicode"
 msgstr " ÐœÐ¸Ð»Ð»Ð¸ÐºÐ¾Ð´ Ð²Ð¾Ñ�Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°"
 
-#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007
+#: peXXigen.c:2008
 #, c-format
 msgid " Glue code sequence"
 msgstr " ÐŸÐ¾Ñ�Ð»ÐµÐ´Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñ�Ñ‚ÑŒ Ñ�Ð²Ñ�Ð·ÑƒÑŽÑ‰ÐµÐ³Ð¾ ÐºÐ¾Ð´Ð°"
 
-#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112
+#: peXXigen.c:2113
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8327,7 +8715,7 @@ msgstr ""
 " vma:\t\tÐ�Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð”Ð»Ð¸Ð½Ð°    Ð”Ð»Ð¸Ð½Ð°   Ð¤Ð»Ð°Ð³Ð¸       ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸Ðº EH\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�     ÐŸÑ€Ð¾Ð»Ð¾Ð³Ð°  Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¸ 32b exc     Ð˜Ñ�ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹ Ð”Ð°Ð½Ð½Ñ‹Ðµ\n"
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2234
 #, c-format
 msgid ""
 "\n"
@@ -8338,7 +8726,7 @@ msgstr ""
 "\n"
 "Ð�Ð°Ñ‡Ð°Ð»Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ Ð² PE-Ñ„Ð°Ð¹Ð»Ðµ (Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½ Ñ€Ð°Ð·Ð´ÐµÐ» .reloc)\n"
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2263
 #, c-format
 msgid ""
 "\n"
@@ -8347,62 +8735,62 @@ msgstr ""
 "\n"
 "Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ�: %08lx Ð Ð°Ð·Ð¼ÐµÑ€ Ð±Ð»Ð¾ÐºÐ° %ld (0x%lx) Ð§Ð¸Ñ�Ð»Ð¾ Ð¼ÐµÑ�Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ %ld\n"
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2281
 #, 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:2342
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "%03x %*.s Ð­Ð»ÐµÐ¼ÐµÐ½Ñ‚: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2366
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "Ð¸Ð¼Ñ�: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %08lx Ð´Ð»Ð¸Ð½Ð° %d]: "
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2386
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr "<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ð´Ð»Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#x>\n"
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2396
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr "<Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ Ñ�Ñ‚Ñ€Ð¾ÐºÐ¸: %#lx>\n"
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2401
 #, c-format
 msgid "ID: %#08lx"
 msgstr "ID: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2404
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2426
 #, 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:2468
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr "<Ð½ÐµÐ¸Ð·Ð²ÐµÑ�Ñ‚Ð½Ñ‹Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°: %d>\n"
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2476
 #, 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:2564
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "ÐžÐ±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ» .rsrc!\n"
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2588
 #, c-format
 msgid ""
 "\n"
@@ -8411,17 +8799,17 @@ msgstr ""
 "\n"
 "ÐŸÐ Ð•Ð”Ð£ÐŸÐ Ð•Ð–Ð”Ð•Ð�Ð˜Ð•: Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ .rsrc â€” Ð±ÑƒÐ´ÑƒÑ‚ Ð¿Ñ€Ð¾Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ñ‹ Windows:\n"
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2594
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ�Ñ‚Ñ€Ð¾Ðº Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x\n"
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2597
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr " Ð ÐµÑ�ÑƒÑ€Ñ�Ñ‹ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÑŽÑ‚Ñ�Ñ� Ñ�Ð¾ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ�: %#03x\n"
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2654
 #, c-format
 msgid ""
 "\n"
@@ -8430,7 +8818,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³, Ð½Ð¾ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ€Ð°Ð·Ð´ÐµÐ», Ð² ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¼ Ð¾Ð½ Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚Ñ�Ñ�\n"
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2660
 #, c-format
 msgid ""
 "\n"
@@ -8439,7 +8827,7 @@ msgstr ""
 "\n"
 "Ð¡ÑƒÑ‰ÐµÑ�Ñ‚Ð²ÑƒÐµÑ‚ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð² %s, Ð½Ð¾ Ñ�Ñ‚Ð¾Ñ‚ Ñ€Ð°Ð·Ð´ÐµÐ» Ð±ÐµÐ· Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ð³Ð¾\n"
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2667
 #, c-format
 msgid ""
 "\n"
@@ -8448,7 +8836,7 @@ msgstr ""
 "\n"
 "ÐžÑˆÐ¸Ð±ÐºÐ°: Ñ€Ð°Ð·Ð´ÐµÐ» %s Ñ�Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ðµ Ð´Ð°Ð½Ð½Ñ‹Ðµ, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ� Ñ� Ð°Ð´Ñ€ÐµÑ�Ð°, ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ Ñ�Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð°Ð»\n"
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2672
 #, c-format
 msgid ""
 "\n"
@@ -8459,22 +8847,22 @@ msgstr ""
 "Ð’ %s Ð¸Ð¼ÐµÐµÑ‚Ñ�Ñ� Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ð¾ Ð°Ð´Ñ€ÐµÑ�Ñƒ 0x%lx\n"
 "\n"
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2679
 #, 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:2684
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr "Ð¢Ð¸Ð¿                Ð Ð°Ð·Ð¼ÐµÑ€     Rva      Ð¡Ð¼ÐµÑ‰ÐµÐ½Ð¸Ðµ\n"
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2731
 #, c-format
 msgid "(format %c%c%c%c signature %s age %ld)\n"
 msgstr "(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ð¾Ð´Ð¿Ð¸Ñ�ÑŒ %s Ð²Ð¾Ð·Ñ€Ð°Ñ�Ñ‚ %ld)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2741
 #, c-format
 msgid "The debug directory size is not a multiple of the debug directory entry size\n"
 msgstr "Ð Ð°Ð·Ð¼ÐµÑ€ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð½Ðµ ÐºÑ€Ð°Ñ‚ÐµÐ½ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñƒ Ñ�Ð»ÐµÐ¼ÐµÐ½Ñ‚Ð° Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°\n"
@@ -8482,7 +8870,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:2825
 #, c-format
 msgid ""
 "\n"
@@ -8491,97 +8879,124 @@ msgstr ""
 "\n"
 "Ð¥Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ¸ 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:3072
 #, c-format
 msgid "%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
 msgstr "%pB: Ñ€Ð°Ð·Ð¼ÐµÑ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… (%lx) Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐ°ÐµÑ‚ Ð¾Ñ�Ñ‚Ð°Ð²ÑˆÐµÐµÑ�Ñ� Ð¼ÐµÑ�Ñ‚Ð¾ Ð² Ñ€Ð°Ð·Ð´ÐµÐ»Ðµ (%<PRIx64>)"
 
-#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025
+#: peXXigen.c:3104
 msgid "failed to update file offsets in debug directory"
 msgstr "Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ðµ Ñ�Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ� Ð² Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð¼ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ðµ"
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3112
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr "%pB: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾Ñ�ÑŒ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ Ñ€Ð°Ð·Ð´ÐµÐ» Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ…"
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3928
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ� Ñ�Ñ‚Ñ€Ð¾ÐºÐ° Ñ€ÐµÑ�ÑƒÑ€Ñ�Ð°: %d"
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:4063
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð½ÐµÑ�ÐºÐ¾Ð»ÑŒÐºÐ¾ Ð¼Ð°Ð½Ð¸Ñ„ÐµÑ�Ñ‚Ð¾Ð² Ð½Ðµ Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ"
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:4081
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ�Ð¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ‚ Ñ� Ð»Ð¸Ñ�Ñ‚Ð¾Ð¼"
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4123
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ð»Ð¸Ñ�Ñ‚"
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4125
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ñ�ÑŽÑ‰Ð¸Ð¹Ñ�Ñ� Ð»Ð¸Ñ�Ñ‚: %s"
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4191
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr "Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð»Ð¸Ñ�Ð½Ð¸Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¸ Ñ� Ñ€Ð°Ð·Ð½Ñ‹Ð¼ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ°Ð¼Ð¸"
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4198
 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:4315
 #, 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:4323
 #, 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:4462
 #, 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:4482
 #, 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:4503
 #, 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:4523
 #, 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:4565
 #, 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:4590
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr "%pB: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ DataDictionary[9], Ñ‚Ð°Ðº ÐºÐ°Ðº Ð¾Ñ‚Ñ�ÑƒÑ‚Ñ�Ñ‚Ð²ÑƒÐµÑ‚ __tls_used"
 
+#~ 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 +9087,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 +9143,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,9 +9185,6 @@ 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."
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/SRC-POTFILES.in ./bfd/po/SRC-POTFILES.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/SRC-POTFILES.in	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/SRC-POTFILES.in	2021-12-16 01:57:38.000000000 +0000
@@ -3,7 +3,6 @@ aix5ppc-core.c
 aout-cris.c
 aout-ns32k.c
 aout-target.h
-aout-tic30.c
 aout32.c
 aout64.c
 aoutx.h
@@ -32,7 +31,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
@@ -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
@@ -238,6 +235,7 @@ elf32-xc16x.c
 elf32-xgate.c
 elf32-xstormy16.c
 elf32-xtensa.c
+elf32-z80.c
 elf32.c
 elf64-alpha.c
 elf64-bpf.c
@@ -317,7 +315,6 @@ 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
@@ -328,7 +325,6 @@ pei-arm.c
 pei-i386.c
 pei-ia64.c
 pei-mcore.c
-pei-ppc.c
 pei-sh.c
 pei-x86_64.c
 peicode.h
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/sr.gmo ./bfd/po/sr.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/sr.gmo	2020-03-07 02:11:48.000000000 +0000
+++ ./bfd/po/sr.gmo	2021-12-16 02:00:37.000000000 +0000
@@ -1,65 +1,141 @@
-Þ•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
+Þ•0(4Y	 h„�‚œ�¤�¨
¨+¨?¨X¨Aw¨?¹¨:ù¨4©K©^©$}©
¢©°©%Ð©ö©ø©A
+ª&LªsªŒª¥ª¾ªÎª íª«.«G«^«k«P~«Ï«*ç«;¬N¬F`¬6§¬6Þ¬:­5P­,†­D³­Nø­JG®)’®G¼®:¯B?¯L‚¯)Ï¯Bù¯L<°‰°Ÿ°D¶°Gû°C±b±t±ˆ± ±µ±3Ô±²²01²b²r²‚²+œ²+È²+ô²# ³D³\³e³ƒ³(š³?Ã³>´%B´&h´(�´)¸´Gâ´7*µbµyµ™µ¶µÏµêµ
+¶#¶>¶T¶l¶€¶—¶,±¶Þ¶î¶··6·E·[·p·Š·¡·1¶·è·ù·¸¸8¸#P¸+t¸& ¸5Ç¸ý¸¹*¹D¹Z¹t¹�¹¤¹º¹$Ï¹ô¹
º-ºEº$Zºº“º¨º<Áºþº
»
»*»>»S» k»Œ»§»·»×»ó»¼,¼E¼X¼*k¼–¼¨¼&º¼á¼0õ¼&½":½	]½g½#z½ž½·½È½á½"ú½¾"1¾#T¾#x¾œ¾#±¾#Õ¾ù¾¿$¿B¿H¿U¿]¿b¿¿
+�¿¨¿­¿!³¿ Õ¿ö¿û¿ÀÀ8ÀXÀ]À!bÀ„À•ÀœÀ¢À§À¬À²À¶À"»ÀÞÀãÀÁÁ&7ÁB^Á¡ÁÁÁÆÁËÁÒÁØÁÝÁïÁöÁÂ"Â)ÂBÂVÂgÂxÂ‰ÂšÂ«ÂÃÂ	ÒÂ
ÜÂ
êÂ
+øÂ
+Ã
+Ã
+Ã
+$Ã$/Ã
+TÃ#_Ã
+ƒÃŽÃ Ã!¸ÃÚÃïÃ
+þÃ
	Ä	Ä!Ä
+2Ä=ÄDÄ\ÄvÄˆÄ—Ä®ÄÉÄØÄñÄÅÅ'Å(7Å/`Å�Å¢Å+±ÅÝÅAùÅ;ÆUÆoÆ‰Æ8žÆ×ÆïÆÇ&ÇEÇdÇ2Ç?²Ç&òÇÈ(8ÈaÈ"tÈ—È*·È6âÈ{Ér•ÉxÊ�Êe—Ê7ýÊ:5ËpË?‚Ë<ÂË@ÿËU@Ì`–Ìb÷ÌqZÍÌÍìÍ&
+Î1ÎœKÎDèÎ'-Ï,UÏ1‚Ï'´Ï$ÜÏ/Ð-1Ð0_Ð&�Ð8·ÐðÐ=Ñ9NÑ:ˆÑ6ÃÑ6úÑ1Ò/QÒ5�Ò+·Ò$ãÒ6Ó"?Ó&bÓ6‰Ó=ÀÓ:þÓ:9ÔDtÔ8¹Ô9òÔC,Õ:pÕ7«Õ8ãÕ@ÖG]Ö9¥Ö,ßÖ0×#=×a×=|×-º×6è×Ø7;Ø;sØ:¯Ø"êØ3
Ù%AÙ.gÙ–Ù0¶Ù1çÙ'ÚAÚE_Ú8¥Ú(ÞÚcÛ4kÛ& Û2ÇÛ&úÛk!Ü*�Ü4¸Ü]íÜ8KÝ„ÝO£ÝbóÝ,VÞ+ƒÞ)¯ÞYÙÞ03ß=dß3¢ß2ÖßB	àLLà™à4·à)ìà$á3;á9oá6©á/àáDâ&UâW|âUÔâI*ã+tã8 ã%Ùã(ÿã&(ä,Oä#|ä> äBßäB"åeå'…åE­å9óå4-æ3bæJ–æ(áæ;
+çFç0eçD–ç.Ûç9
+è?Dè?„èGÄè?é2Lé8éS¸é'ê.4ê,cê'�ê6¸ê ïêYë/jë4šëNÏëªìIÉì9í3Mí¾�í<@î<}îFºîPïoRï>ÂïFð`Hð~©ðF(ñ‚oñ[òñ3Nò@‚òMÃòmó7ó#·óÛó(ñó&ô+Aô5mô£ô¸ô8Ìô"õ$(õ'Mõ9uõC¯õ!óõ!ö*7ö/bö1’ö/Äö/ôö0$÷*U÷0€÷<±÷iî÷=XøB–ø=Ùø-ù.Eù8tù:­ùFèù?/úVoú(Æú>ïú;.û=jû4¨û#ÝûLüINü8˜ü+Ñü8ýü26ý9iý:£ý3Þý,þu?þ µþ.Öþ.ÿJ4ÿ0ÿB°ÿ/óÿ,#'P%x,žNËC4Jx@ÃJ*O%z< 1Ý l0<�<Ú+C,_HŒ6ÕAANJ�>ÛJJe<°<í.*(Yl‚vïAf6¨ß4ý02	+c	A�	3Ñ	@
+!F
+#h
+.Œ
+B»
+Fþ
+4E%z: 2Û*99Cs(·Cà:$
T_
J´
5ÿ
456j/¡/Ñ&&(5O'…0­5Þ(3=%q&—¾'Þ=#D+h3”(È@ñC25v'¬,Ôg4imžA@NH�GØK IlL¶HCLY�5ê0 4QM†NÔ1#)U)/©)Ù+7/3g6›9ÒX[eCÁ6><={*¹.ä2[F&¢-É,÷$?/Z(Š$³0Ø'	81"jA�)Ï=ù#7@[2œ+Ï"û5 <T '‘ %¹ (ß R!?[!F›!3â!1"DH"H�"DÖ"K#ag#sÉ#B=$‚€$T%=X%b–%bù%g\&gÄ&0,'(]'4†'5»')ñ'3(-O(/}(H­(Fö(7=)Gu)+½)$é)2*.A*/p*+ *)Ì*-ö*^$+Kƒ+FÏ+,"2,U,5p,(¦,EÏ,D-DZ-FŸ-_æ-^F."¥.*È.+ó.8/:X/'“/;»/8÷/'00'X03€0>´0-ó0,!1N1Im1·1Ô1.ò1/!2Q2$q23–2Ê2Fè2&/3!V36x35¯3)å34)4H4+b4 Ž4$¯4.Ô4.5%25)X5\‚5Dß5H$6Dm6L²6Xÿ6HX7)¡7*Ë7 ö7589M8@‡8+È86ô8\+9Aˆ9.Ê9Mù93G:={:H¹:<;8?;3x;4¬;4á;0<@G<1ˆ<Bº<Lý<AJ=LŒ=8Ù=B>+U>2�><´>3ñ>X%?P~?.Ï?`þ?&_@P†@\×@X4Ap�AAþA+@BKlB.¸B<çB,$CXQC%ªCÐC3ðC2$DWD4wDJ¬D?÷D@7EWxE=ÐE*F59F%oFB•F%ØF4þF>3G<rGC¯GBóG;6H3rH)¦H'ÐHøHJ+J=JLJ!aJƒJ$™J¾J1ÑJVKIZKI¤K<îK+L>LRLdL~L
’L' LÈL
ÔLâL%óL\M;vM²MÄMÚMÝMúMN	 N*N<NMN,ZN‡N›N±NXÍN0&O6WO2ŽO*ÁO$ìO6P(HP2qP3¤P@ØP+Q(EQ.nQ"�QÀQ(ÝQ/R/6R1fR8˜R#ÑR'õR2S3PS„S;”SÐS×SßSôSTTT'T<TQTcTvT�T¤T¶TÔT	óTýTU	0U":U]UoU)‹U/µU"åUVV(V4V8VKV]VoV'�V©V ÆV#çVW%W 7WXWHvW1¿W#ñW,X@BXXƒXaÜX:>Y.yY7¨Y1àY;Z(NZ:wZ,²Z-ßZE
[-S[�[2 [Ó[ã[ø[
\$\):\d\!z\$œ\,Á\(î\-]IE]�]5¬]â]
+÷]C^IF^�^¢^ª^²^
Ð^Þ^>ð^?/_Ao_±_/Í_+ý_8)`b`$x`!�`1¿`ñ`a+/a[aoaˆa
+•a aB¿ab%b:bLb.jb-™bGÇb3cCc"bc…c–c§c¹c$Òc÷c!d6d5Hd~d	�dšd¬dÂdâdüde'e9e	@eJeOe[eje�e�e³eÅeåeþef2fDf\f-zf¨fºfÌfàfúf'g7gFgXgjgqg!xgšg:¶g%ñg%h=hAVh;˜hCÔh=iCVi=ši"Øi7ûi<3j<pj)­j5×j
kkv1k*¨kÓk'åk
ll&l-l
+<l(Glpl'‚lªlÇlßlÿl#m$;m,`m.�m,¼m.émn"5n,Xn.…n!´n1Ön0o29o,lo.™o#Èoìop( p/Ip!yp›p(¸p#áp+q1q,Jq wq˜q±qÑqåqr#$r-Hr"vr™r«r¾rÊrßr&ñr	sF"s/is™sJªsMõsCtctzt�t-ªtØtátétAõt>7uvuAˆu7ÊuBv!Evgv˜‡v w<wNw`w#uw2™w.Ìw#ûwx,x9xIxQx:jx+¥x#Ñxõxy!y9y,Qy:~y¹y	ÑydÛy@z6SzMŠzMØz<&{gc{bË{<.|1k|(�|$Æ|ë|/}+1}]}y}“}°}>Ì}<~H~4d~'™~$Á~6æ~.F]n†ž°ÂÔæ€€-€>€V€u€2”€Ç€'á€L	�4V�7‹�0Ã�'ô�‚<‚N‚-h‚+–‚+Â‚*î‚	ƒ	#ƒ
+-ƒ
+8ƒCƒXƒsƒ‚ƒ—ƒ¦ƒ1«ƒÝƒ/ýƒ-„L„ ]„'~„"¦„&É„0ð„!…?…T…]…9{…µ…,Ê…a÷…9Y†)“†C½†I‡EK‡Y‘‡Yë‡;Eˆ;�ˆM½ˆ/‰5;‰:q‰5¬‰4â‰9Š7QŠ9‰ŠDÃŠG‹DP‹E•‹CÛ‹-Œ4MŒ>‚Œ;ÁŒ8ýŒ*6�6a�/˜�;È�3Ž%8Ž1^Ž!�ŽV²Ž9	�\C�A �1â�?�:T�7��>Ç�$‘E+‘Iq‘»‘ZØ‘/3’Oc’P³’3“ 8“?Y“:™“&Ô“
+û“0”%7”"]”%€”0¦”!×”ù”•-•B•O•O^•®•,Í•7ú•
2–@–1O–�–•–¨–»–)Ø–*—,-—6Z—‘—$±—_Ö—"6˜(Y˜A‚˜Ä˜,â˜2™HB™‹™›™
+¬™$·™Ü™ï™¼š¹Ìš†›/˜›È›ã›œ*!œLLœ2™œ-Ìœ)úœ"$�G�Z�o�„�4“�È�0Ð�%ž9'žaž<sž=°ž3îž5"Ÿ2XŸ7‹ŸBÃŸL S d ~ † Ž ª H± ú 4ý 2¡;¡
+R¡]¡2y¡-¬¡OÚ¡*¢I¢"N¢*q¢%œ¢ Â¢ã¢£	£C(£¤l£¤¤ 8¤Y¤b¤v¤‹¤¡¤·¤Î¤ë¤ü¤¥"¥**¥NU¥[¤¥¦A¦F¦e¦}¦š¦6²¦é¦ 	§8*§+c§�§¢§²§º§Ï§ç§û§¨#¨6¨
I¨W¨Lq¨ ¾¨ß¨Dþ¨PC©”©¦©2Á©$ô©ª9ª5Lª‚ª!�ª¿ªÆª2ÎªF«JH«/“«FÃ«
+¬"¬?¬O¬M^¬9¬¬;æ¬7"­Z­r­�­ž­,±­$Þ­J®)N®(x®%¡®(Ç®ð®
+¯,¯D¯)^¯ˆ¯¦¯À¯Ø¯à¯ø¯)°:°
P°#^°‚°'š°Â°Ó°é°± ±:±#F±%j±�±­±Ä±Ö±7í±%²A²Z²o²�²”²¨²¼²Ò²Jè²J3³J~³IÉ³:´N´-m´;›´+×´@µ<Dµ8�µ8ºµ5óµ8)¶Tb¶.·¶>æ¶I%·ho·yØ·>R¸N‘¸Ià¸d*¹0�¹;À¹8ü¹F5º5|º&²º.Ùº[»-d».’»0Á»<ò»!/¼Q¼!j¼)Œ¼I¶¼`½Ga½.©½,Ø½h¾En¾0´¾6å¾k¿Eˆ¿Î¿&ì¿SÀEgÀ#­À<ÑÀ<ÁeKÁP±Á2Â/5Â/eÂ4•Â=ÊÂ9Ã0BÃ7sÃ%«Ã'ÑÃ=ùÃ67Ä@nÄ¯Ä2ÏÄÅ,Å-3ÅaÇrÇ*�Ç0ºÇrëÇz^ÈeÙÈ2?É-rÉ- ÉNÎÉÊ6/ÊGfÊ®Ê°Ê|ÎÊ?KË+‹Ë!·Ë'ÙËÌ1Ì3IÌ2}Ì-°ÌÞÌúÌ"Í“8Í0ÌÍ\ýÍMZÎ$¨ÎšÍÎZhÏ]ÃÏa!ÐWƒÐZÛÐ„6Ñ�»Ñ|LÒAÉÒsÓWÓc×Óx;Ô?´ÔaôÔvVÕÍÕ$èÕr
Ö€€Ö;×!=×_×3s×§×/Á×Lñ× >Ø_Ø_~ØÞØôØÙF ÙFgÙF®Ù5õÙ#+ÚOÚ/XÚ2ˆÚC»ÚVÿÚUVÛ<¬Û;éÛ>%Ü?dÜj¤ÜgÝwÝ.–Ý,ÅÝ(òÝ.Þ1JÞ!|Þ0žÞ ÏÞ%ðÞ%ß#<ß#`ßI„ßÎß'Þß!à'(àPà%kà'‘à¹àÙà!ùàFábá‚á%�á%µá!Ûá;ýáL9âA†â[Èâ$ã3@ã,tã,¡ã-Îãüãä:ä!Wä=yä%·ä4Ýä*å%=å?cå$£å&Èå*ïå<æWæfæ
uæƒæšæ,ºæ8çæ+ çLç:cç4žç1Óçè%#èIè_èI{èÅèàèGûèCéN`é¯é=Ãéêê#%ê)Iêsê “ê ´ê1Õêë;ë#Wë#{ë$Ÿë#Äë#èëì6%ì8\ì•ì›ì³ì»ì-Àì<îì+íCíHí0Ní4í´í¹í1¾í'ðí-îFîKî@Pî ‘î²î¹î¿îÄîÉîÏîÓî>Øîï)ïFï+aïC�ïjÑï)<ðfðkðpðwð}ð‚ð˜ð!Ÿð7Áðùð<ñ7=ñuñ‘ñ­ñÉñåñò!ò?òLò]ò
nò
|ò
Šò
+˜ò £òQÄòó~)ó ¨óCÉó/
ôB=ô)€ô ªôËô#áôõ$õ9õ	Qõ-[õ&‰õC°õ-ôõ/"ö9RöŒö3©ö
Ýöëö5òö(÷VE÷`œ÷#ý÷!øH>ø,‡ø�´ø4Dù*yù!¤ùÆùPæù#7ú/[ú4‹ú?Àú:û&;ûWbûpºûE+ü@qüA²ü"ôü5ý6MýA„ý\ÆýÆ#þÆêþ·±ÿ+iÖ•^ldË0oKb»n“�’!’´°G/ø4(W]%µ9Û�M£WñSI	M�	Ië	g5
+S�
+^ñ
+KP^œ@ûs<o°d 
|…
7‚\ºqx‰K{NOÊT_odÏ`4a•u÷^m`Ìt-`¢^^b�Á”Oyäp^VÏ>&2ez˜^gr5Úpr�nô<cZ YûUU5«]á_?;Ÿ9Û�u£kä…fj LÑ O!<n!«!E¬"Yò"àL#]-$?‹$’Ë$Ô^%E3&Dy&J¾&¯	'U¹'j(Jz(IÅ(p)‡€)5*]>*?œ*GÜ*V$+]{+[Ù+T5,nŠ,9ù,Ê3-�þ-wœ.E/TZ/F¯/Sö/FJ0H‘0@Ú0|1�˜1e2@€2bÁ2r$3s—3x4k„4Ôð4”Å5ƒZ6?Þ6Z7Žy7W8e`8pÆ8x79Š°9|;:a¸:r;Ž�;N<Lk<B¸<Jû<YF=@ =˜á=Cz>c¾>Ž"?(±?‹Ú@ufAZÜA€7Ba¸CaDp|D“íDÙ�E[F“ÛFÅoGû5Hƒ1IûµI¼±JdnKxÓK‡LLÚÔLc¯MLN)`NMŠNCØN_OP|O)ÍO'÷OuP>•P<ÔPDQuVQoÌQ7<R7tRY¬RNSPUS[¦S[Tb^TQÁTbUZvU²ÑU€„VYW€_WhàWjIXc´XbY{{Yp÷Y«hZ?[wT[YÌ[z&\n¡\1]bB]…¥]i+^R•^qè^iZ_uÄ_g:`c¢`ua|aB�bYÄbYc‚xcZûcdVdZ»d^eCueA¹eOûe˜Kf+äf„g�•g&h�¦h[7iM“itái`VjG·jüÿjuükurlYèl*BmOmm’½mTPnr¥nro�‹o~)p‹¨p�4qnÒqqArO³rOs×Ssá+t‰
un—uBv^Iv`¨vH	wvRw\Éwa&x9ˆx;Âx[þxZy”Úy`ozHÐzb{U|{UÒ{œ(|†Å|9L}††}q
~§~™'cÁ\%€k‚€]î€UL�R¢�aõ�ZW‚Q²‚bƒmgƒQÕƒV'„G~„LÆ„;…UO…Y¥…Eÿ…ME†c“†L÷†wD‡€¼‡X=ˆI–ˆGàˆÎ(‰s÷‰»kŠv'‹tž‹�Œ€•Œ„�x›�“Ž†¨Žx/�§¨�P�dÐ�S5‘’‰‘’’f¯’I“C`“_¤“L”`Q”{²”p.•~Ÿ•‘–´°–»e—Š!˜~¬˜l+™…˜™eš^„šTãšÃ8›Iü›VFœU�œ8óœ2,�\_�W¼�EžSZž]®žjŸCwŸ|»ŸN8 ‚‡ =
+¡H¡qÈ¡F:¢E�¢mÇ¢€5£^¶£C¤IY¤‹£¤u/¥�¥¥d'¦XŒ¦˜å¦†~§w¨ }¨Ò©ùñ©wëªc«ºv¬ˆ1­¹º­¿t®¾4¯Äó¯d¸°?±f]±eÄ±B*²Tm²GÂ²K
+³tV³tË³m@´Œ®´U;µ[‘µbíµVP¶Y§¶W·QY·U«·¹¸n»¸^*¹'‰¹.±¹&à¹mºMuºzÃºy>»y¸»{2¼”®¼“C½E×½L¾Tj¾_¿¾e¿I…¿tÏ¿hDÀE­ÀJóÀV>Á‡•Á_ÂY}Â3×Â—Ã7£ÃCÛÃYÄ]yÄ@×Ä>ÅRWÅ<ªÅsçÅ:[Æ1–ÆUÈÆ`ÇNÇ:ÎÇ>	È6HÈMÈ>ÍÈHÉTUÉRªÉ>ýÉD<Ê��Ê‰ËœœËr9Ì…¬Ì«2ÍœÞÍK{ÎEÇÎF
ÏZTÏm¯ÏyÐZ—Ð[òÐ NÑ€ïÑQpÒœÂÒZ_ÓjºÓ€%Ôh¦ÔeÕhuÕqÞÕnPÖi¿Öt)×Ož×jî×uYØdÏØw4ÙR¬ÙqÿÙ\qÚoÎÚ�>ÛdÀÛ¥%Ü�ËÜe\ÝºÂÝR}ÞšÐÞ–kß’àÀ•à|VáQÓá{%â`¡âkãWnã”ÆãK[ä8§ävàäSWåM«å]ùåoWæ\Çæq$ç‰–ç~ èSŸèkóè@_é| éJêZhê“Ãê�Wë¡èë°ŠìŸ;íÛíL[î?¨îñèîcÚð>ñ'Uñ3}ñE±ñ-÷ñ[%ò$�òZ¦ò¤óƒ¦óƒ*ôb®ô(õ:õZõ-xõ¦õÄõ9Öõö-öHöUeö¶»öwr÷"ê÷?
øMø;PøŒø2¤ø×øìø	ù%ùf9ù ù&½ù4äù|úZ–úPñúQBûF”û9Ûû\ü=rüF°üG÷üm?ýD­ý@òýR3þ9†þ5ÀþQöþNHÿa—ÿlùÿzfNáR0gƒtë `q�
+óþ( 4
+U`#m$‘$¶!Û"ý2 2S"†0©1Ú?2_’Q§ùA\Zf·C.b‘ ¢Ã,Ç.ô#;BP(“?¼Aü(>	/g	A—	=Ù	s
+j‹
+Nö
+TEuš¯�Àd^
iÃ
u-i£|
LŠo×aG]©�P‰:ÚS1i4›6Ð20:Sk#¿:ã,YKP¥ZösQ4Ådú&_†o��
%›ÁÉ&Ñ"ø]9^—…ö@|Š½zHdÃ*(kSo¿h/U˜Yî€HMÉ)A\?i€©*3H|8�MÉB oZ _Ê =*!9h!¢!¹!Ø!+ø!&$"@K"BŒ"%Ï"jõ"`#x#—#°#;Ì#4$/=$m$Œ$ $§$
+·$Â$Ø$ð$,
%:%Z%3n%¢%1Â%ô%
+&&&2C&Uv&Ì&ä&ø&'',:'Mg'µ'Î'#ç'((;()U(G(4Ç(4ü((1)ŒZ)‹ç)„s*yø*r+kò+@^,dŸ,u-uz-Vð-nG.¶.3Í.¾/VÀ/0J50€0™0 0§0Ä0Tä091?U11•11Ç13ù1(-2JV2=¡2Qß2W13Q‰3WÛ3334:g4Q¢4Wô4?L5RŒ5Yß5_96Q™6Wë6DC74ˆ7½7EÜ7V"81y8'«8:Ó8:9NI9&˜9C¿99:+=:4i:ž:9»:/õ:F%;Nl;F»;*</-<1]</�<-¿<`í<N=�]=`ß=@>œ[>¯ø>9¨?/â?-@5@@Ev@¼@Å@Ø@zï@kjAÖA}ôAcrB~ÖBKUC9¡CÛC#ãD'E'/E+WEIƒETÍEN"F?qF±FÊFãFÿF6GjCGZ®GT	H^H.xH&§H%ÎHVôHzKI,ÆI!óI�J%³JRÙJ�,K�®KN0L±L¤1MXÖMF/N=vN>´N*óNHOMgO>µO8ôOF-P@tPsµPq)QB›QtÞQ]SRM±R^ÿR(^S9‡S8ÁS(úS9#T5]T)“T)½T)çT)U;;U7wU)¯U(ÙU3VL6VBƒVPÆV1WOIW�™Wb'XkŠX_öXOVY:¦Y+áY3
Z[AZY�ZY÷ZPQ[¢[¹[Ð[è[!\!"\D\S\h\w\R€\5Ó\S	],]]Š]4¢]R×]Q*^l|^Yé^BC_2†_¹_3Ò_v`&}`d¤`Ò	abÜaN?bzŽbg	c~qcÙðcÙÊdr¤e|f«”fo@g]°gqhm€hgîh�Vijäi�Oj€Ýj�^k�îk‹lˆm]”mXòmYKn{¥n`!oS‚owÖoWNpf¦pY
q7gqOŸqCïqœ3rgÐr¬8svåsj\trÇt|:uc·uovO‹vzÛv†Vw<Ýw½xQØx«*yœÖyRszEÆzh{cu{QÙ{+|a:|Qœ|Xî|SG}‚›}I~/h~7˜~8Ð~(	$2ŒWGäZ,€z‡€� �{?�»�Ï�â�3õ�j)‚j”‚_ÿ‚q_ƒ@ÑƒB„®U„8…O=…Ž�…@†O]†[­†v	‡€‡  ‡Á‡Kß‡%+ˆ=Qˆ_�ˆYï‰'I‹Nq‹6À‹?÷‹H7Œh€Œ—éŒ_��Já�K,Ž=xŽ¶Ž#ÖŽ&úŽ!�¡=�ß�Zô�UO�K¥�ñ�w‘~‘Zþ‘lY’fÆ’o-“n�“r”(”7¨”à”ý”7•L•�[•ë•ið•Z–9p–ª–.Â–iñ–a[—¬½—Bj˜
+­˜R¸˜W™Oc™:³™Yî™Hš:bšr�š›œ2/œObœ²œ)Æœ*ðœ+�+G�,s�+ �Ì� ì�.
ž<žNSžv¢ž¸ŸÒŸˆÙŸ4b 3— 8Ë -¡j2¡=�¡<Û¡c¢Z|¢*×¢.£1£/N£&~£.¥£Ô£è£ü£¤"¤7>¤¯v¤4&¥P[¥˜¬¥„E¦Ê¦7é¦c!§H…§BÎ§&¨b8¨7›¨PÓ¨$©
1©[?©�›©qªs�ªp«.t«7£«Û«ë«sú«Vn¬fÅ¬‚,­/¯­>ß­"®-A®ao®HÑ®†¯b¡¯U°EZ°` °9±;±SQ±,¥±cÒ±56²3l²2 ²Ó²1æ²/³BH³5‹³Á³Xá³5:´Mp´0¾´5ï´7%µ:]µ4˜µÍµ/äµ7¶5L¶6‚¶)¹¶)ã¶g
·4u·Vª·$¸!&¸"H¸#k¸#�¸%³¸%Ù¸›ÿ¸‘›¹�-º“»ºyO»8É»\¼g_¼VÇ¼‡½r¦½s¾w�¾o¿ru¿©è¿z’À›
ÁÂ©ÁølÂeÃ›iÄ¶ÅÂ¼Å
+ÆUŠÇlàÇ^MÈ�¬Èp.ÉSŸÉSóÉ•GÊZÝÊ`8Ëb™Ë\üËRYÌ7¬ÌJäÌU/Ío…Í¢õÍn˜ÎbÏ`jÏ²ËÏ}~ÐbüÐw_Ñ¼×Ñ€”ÒCÓOYÓé©Ó±“ÔREÕm˜ÕmÖ³tÖš(×^Ã×S"Ø]vØWÔØ},ÙuªÙk ÚaŒÚPîÚi?Û’©Ûd<Ü–¡ÜD8Ý^}ÝÜÝUáÝzm%Ï“/<ÉÀ�H[F¯lqM_B)Dä}�]W]î�Ëréï„Û¬9c©È9#@È”4ÚÐþÕe]i%N{e­^JŸV¶¾lÙSî·_®²!æAI"[‹,½›ˆà#&:¹3Ã–ó™íÏR%=‘?à0d,šÊŸ
+ký2bqÕ‚¾R=²ÌçyS5èó|’×A�µÓ¡÷¡FN:8I±†æýXª-²Ÿ
ñj+b_ÙõÊO%ôD*öã[ÍtÄÚ˜{Íjx)ñ!¢;+-}ÝÌVQ´À¸ ÄÚÜ“7,(ÔÉÜW�ëu*0Q±º³ÊÜý9'f¢V�dïõZµi ["ÁLu#·tVPò�^ª¬"ÄÒÒJˆ'Ÿ�¸•CJŸêrê\ŒEKPäÇ:òâ°QéDù’¾·Iªð¬¥w¥ÝØ–dƒ‚„¸PnŽM‰…åI(Ì‰ N`¦{ñØ¡§+GaI¿™YæÖ2¨·3ÂZ´ã­1�¹ª•ÑáäBùz¹Ñt¯ç¿€JA©…7®P|ßi¿WY(EqhËslÔþ!º!”ß¶(;A.Vú�/Rq1G¯0ÔQpÔ†œ¯ìà³“šeÇCY-�À¼¨“wc«ýÖzUKë0÷ô6[«¤õ“2ƒ±Äÿ¢=UBÅ>‰:xT5‘l÷"Bû«Kü,ä»·Jâ2+†p=d~à'ßïvØ9äŽ�‰
+Z³žK³Ã§C$	Íå£ìåbÅngÔ8ÛkGKNúV>ë›³	´wövé�Ýo™	i…+ã‚Bô_D:.ŠX?.ðwfDnµ5žálb<ƒéY\›Ltƒù–wœšj@gd\áæuU
ÑºsXH˜y`v°¬–)ÖZíÈ4anuðº=ìKº€ÙÇ£Êäõ¸Û¬$lèŠpoÏyÇLHTY]Ç»i¼6Ñ¬ª±ÿÂjÿ„èo—ôLµB°H
^¢”�
+9oj-ÏCZ~‹~z¹ÃÈ¨Ú~c5k^kxO^Ô1Š<0¶3çCÖ�Smè4s_Á•*$ùí«[Ž}«û—�Ð;ÎT¶µÃ¹@­õ*hÛ½ïX¥¦gpm7hÎ©{a/¼f¯åyæobóøøæÂ¢¾€sUóE3ju”§»Í­,†&¡�r:t†ú-7ÁfûœSâõŒ'žê©Ý¥9”þ‚ÞÌRxÑÕnù~]-˜Lå(ÄÀñt“ö˜Mþ½x+×�;+S`W�ãýhù
•\O—û*;); …Ó…£í'ÜaMb
y¦�œXˆ!º°Æ?ÿ®¸£ÝŽPöH}ˆªž$dws8é`¿<©?0ü’ ñ§îÅsiXƒTý»˜a„­ÃFNØIÀâ\êÁÖáQŠìv'1Áµþî)R^Š(=®Ÿ§]wçí:ô�v|‹@6oþXÛ¡²8}ÆÝÓWpÜ¦Þ·iÎ´‡Þz˜|‡ ¤„ÈêEÒ’—¥Îx&êfL&›åÙqâ‡<´ÒÙUW��Á‚Þó×½4ëÉ‘ÿ×u
sp5Cò\.´ÂòDãW&ßŒh(	¤IKœï2-¥mkà¯Ù3¼›€ÉcAŽü8‡%.H‘EŒRÿQSP¿eÀñ��ÆD6‹@&?È<~TÅGJM�>%Åk5›‘ )ì¸{íÕÌg‹m]FÜ3r”q2_Âèàéš¨@¶÷ÂH8
+#AFÒ§«…4¿Ó%ôU4Off1@e}`h$ MP"ò
+ ²Õ±`šîÞˆ•Ò63ë6¢ÖLVû�1ãž¡

+#g’É¤®½!	mÊ/¼	AüŠUÄÌ¼×€°ÚZÃ‚¨ú8N49Æ6,E ‰òÕÍR,ß‡€×’¶{ÐÍüÅ>&jvìÐŒhÉa)á‡Ëc7
+~Ê�çOFJÇgošY•<{ÏÞS»Qr}/á¤ ™cC÷nÚŒ*ÐËNó�úðgŽrÎZ¦ï—'5muy#=zcøÆËt.vÏ0öË³|Û!ÓØ>[‹ø™û¹ÎßT/‰ž|E–ƒ¾¨e™©±÷¦	ðlkø½¤7FöeÑ"z1£?ð;­xç*$aØdúMÆ¾²rGqG†âî�_T p.øB£|2ˆ`b—‘^>$/?\n GüO#Oè>®°7Óy„"œ»YÐ–ë7Þ>ÞEÞ¬‘È‘Ü‘ð‘’’,’@’T’h’|’�’¤’¸’Ô’è’““,“@“T“h“|“�“¤“¸“Ì“è“ü“”,”P”l”€”””¨”¼”Ø”ì”••0•D•X•l•€•”•¨•¼•Ð•ä•––0–D–h–|–�–¤–¸–Ì–à–ü–—4—H—\—p—„—˜—¬—À—Ô—è—ü—˜$˜8˜L˜`˜t˜ˆ˜œ˜°˜Ì˜è˜ü˜™,™@™T™h™|™�™¤™¸™Ì™à™ü™š,šHšdšxšŒš š¼šØšôš››8›L›`›t›ˆ›œ›°›Ä›Ø›ô›œœ0œLœ`œtœˆœœœÈœäœ��(�<�P�d�x�Œ� �´�È�Ü�ð�ž ž<žPždžxžŒž ž´žÈžÜžðžŸ Ÿ4ŸHŸdŸˆŸ¤Ÿ¸ŸÌŸàŸôŸ $ 8 L h | � ¤ ¸ Ì à ô ¡¡8¡T¡h¡|¡ ¡´¡È¡Ü¡ð¡¢¢4¢P¢l¢€¢”¢¨¢¼¢Ð¢ä¢ø¢£ £4£H£\£p£„£˜£¬£À£Ô£è£¤ ¤4¤H¤d¤x¤Œ¤ ¤´¤È¤Ü¤ð¤¥¥4¥P¥d¥€¥œ¥°¥Ä¥Ø¥ô¥¦,¦@¦T¦p¦„¦˜¦¬¦À¦Ô¦è¦ü¦§,§@§T§h§„§˜§¬§À§Ô§¨LÞÿÿÿÿnÞ"ÿÿÿÿ¤Þ ÿÿÿÿËÞ5ÿÿÿÿß%ÿÿÿÿ3ß)ÿÿÿÿcß(ÿÿÿÿ’ß/ÿÿÿÿÈßÿÿÿÿäß'ÿÿÿÿà-ÿÿÿÿ@àÿÿÿÿ]àÿÿÿÿˆà $ÿÿÿÿÔà ÿÿÿÿüà%ÿÿÿÿ9áÿÿÿÿmá*ÿÿÿÿ˜á.ÿÿÿÿÈá)1ÿÿÿÿ"â%ÿÿÿÿHâ9ÿÿÿÿ‚â1ÿÿÿÿ´â
+2ÿÿÿÿðâ"ÿÿÿÿ$ã3ÿÿÿÿXãÿÿÿÿã9ÿÿÿÿÏã%ÿÿÿÿä
+HÿÿÿÿVä
+/ÿÿÿÿ­ä)ÿÿÿÿîä
+6ÿÿÿÿ.å
+>ÿÿÿÿvå
+0ÿÿÿÿ°å
+Fÿÿÿÿæ
+ÿÿÿÿBæ
++ÿÿÿÿwæ
+ÿÿÿÿŸæ
+"ÿÿÿÿËæ@)ÿÿÿÿ:ç
+/ÿÿÿÿsç
+ ÿÿÿÿ�ç-ÿÿÿÿäç6ÿÿÿÿ0è6ÿÿÿÿ{è
+7ÿÿÿÿ¼è
+?ÿÿÿÿé
+ÿÿÿÿ*é4ÿÿÿÿwé+ÿÿÿÿ¯é-ÿÿÿÿéé3ÿÿÿÿê0ÿÿÿÿdê 0ÿÿÿÿäê
+-ÿÿÿÿë(ÿÿÿÿWë
+-ÿÿÿÿŽëÿÿÿÿÀë6ÿÿÿÿýë>ÿÿÿÿBì#ÿÿÿÿmìÿÿÿÿ©ìÿÿÿÿåì
+2ÿÿÿÿ!í
+.ÿÿÿÿYíFÿÿÿÿ í
+2ÿÿÿÿÜí
+2ÿÿÿÿî
+2ÿÿÿÿTî
+2ÿÿÿÿ�î
+2ÿÿÿÿÌî
+2ÿÿÿÿïFÿÿÿÿOï
+9ÿÿÿÿ’ï
+7ÿÿÿÿÓï
+9ÿÿÿÿðFÿÿÿÿ]ðFÿÿÿÿ¤ð	2ÿÿÿÿßð+ÿÿÿÿñ.ÿÿÿÿFñ+ÿÿÿÿxñ-ÿÿÿÿ­ñ0ÿÿÿÿûñ"ÿÿÿÿ:ò!ÿÿÿÿmò
+*ÿÿÿÿ£ò
+Aÿÿÿÿîò
+dÿÿÿÿ\ó
+$ÿÿÿÿŠó1ÿÿÿÿÆó1ÿÿÿÿøó
+ÿÿÿÿô5ÿÿÿÿcô&ÿÿÿÿ—ô=ÿÿÿÿçô&ÿÿÿÿ;õ+ÿÿÿÿzõÿÿÿÿ®õ]ÿÿÿÿö!5ÿÿÿÿröKÿÿÿÿ¾ö<"ÿÿÿÿ÷$ÿÿÿÿU÷7
+ÿÿÿÿ—÷ÿÿÿÿß÷;ÿÿÿÿGø?ÿÿÿÿ¥øÿÿÿÿÎø2ÿÿÿÿùÿÿÿÿ9ùÿÿÿÿkù=ÿÿÿÿºùIÿÿÿÿú(ÿÿÿÿ[úIÿÿÿÿ¾ú!ÿÿÿÿôú!ÿÿÿÿ$ûÿÿÿÿUû+ÿÿÿÿ‚û=ÿÿÿÿÀû5ÿÿÿÿöû@ÿÿÿÿ;ü7ÿÿÿÿsü-ÿÿÿÿ¡üÿÿÿÿ¾ü-ÿÿÿÿûü
+"	ÿÿÿÿNý#&ÿÿÿÿ˜ý8ÿÿÿÿÙýBOÿÿÿÿjþ<ÿÿÿÿ­þ\ÿÿÿÿÿOÿÿÿÿfÿ\ÿÿÿÿÉÿQÿÿÿÿ!hÿÿÿÿ�&ÿÿÿÿ½iÿÿÿÿ-Qÿÿÿÿ6ÿÿÿÿ¶:ÿÿÿÿ8I
ÿÿÿÿ™2
ÿÿÿÿØ+:ÿÿÿÿ?6?ÿÿÿÿ´ZÿÿÿÿWÿÿÿÿkRDÿÿÿÿTÿÿÿÿVzÿÿÿÿÑVÿÿÿÿ(
+Yÿÿÿÿ‹>ÿÿÿÿècÿÿÿÿLÿÿÿÿ‹/ÿÿÿÿ9Eÿÿÿÿš
+•ÿÿÿÿ;	
+0hÿÿÿÿß	dÿÿÿÿb
+
+gÿÿÿÿÓ
+
+tÿÿÿÿQ
+bÿÿÿÿ½
+…ÿÿÿÿL
+9/ÿÿÿÿ¾
+Mÿÿÿÿ

+Qÿÿÿÿp

+VÿÿÿÿÐ
|Uÿÿÿÿ§
+Pÿÿÿÿ
+AÿÿÿÿL(\ÿÿÿÿÐj0ÿÿÿÿjj(ÿÿÿÿü
+rÿÿÿÿx
+kÿÿÿÿí
+=ÿÿÿÿ4mÿÿÿÿ¼_
ÿÿÿÿ*[
ÿÿÿÿ”gÿÿÿÿü^3ÿÿÿÿ�71(Hÿÿÿÿe
+[ÿÿÿÿÊL'ÿÿÿÿ=
+\ÿÿÿÿ£.5ÿÿÿÿhÿÿÿÿu|ÿÿÿÿøRÿÿÿÿRE%ÿÿÿÿÃE%ÿÿÿÿ4
+kÿÿÿÿ©
+Wÿÿÿÿ
+gÿÿÿÿr
+WÿÿÿÿÓ
+Wÿÿÿÿ4
+Wÿÿÿÿ•
+Yÿÿÿÿø
+Yÿÿÿÿ[
+Yÿÿÿÿ¾gÿÿÿÿ&
+^ÿÿÿÿŽ
+\ÿÿÿÿô
+^ÿÿÿÿ\gÿÿÿÿÄgÿÿÿÿ,	YÿÿÿÿŽ\ÿÿÿÿñfÿÿÿÿ^ ]ÿÿÿÿÂ bÿÿÿÿ/!6]ÿÿÿÿÉ!6IÿÿÿÿH"<ÿÿÿÿ¡"
+Tÿÿÿÿ#
+ÿÿÿÿŠ#
+³ÿÿÿÿG$
+NÿÿÿÿŸ$gÿÿÿÿ%kÿÿÿÿ}%
+)ÿÿÿÿ°%7`ÿÿÿÿG&Pÿÿÿÿ¥&qÿÿÿÿ2'H5ÿÿÿÿ¿'\ÿÿÿÿD(#@ÿÿÿÿ§(³ÿÿÿÿs);Yÿÿÿÿ*†ÿÿÿÿ’*i4ÿÿÿÿ/+8ÿÿÿÿ„+yÿÿÿÿ
,@ ÿÿÿÿˆ,4iÿÿÿÿ=-=kÿÿÿÿå-Gÿÿÿÿ7.Tÿÿÿÿ¡.+1ÿÿÿÿý..5ÿÿÿÿ`/‡ÿÿÿÿ0)hÿÿÿÿ“02ÿÿÿÿä0/hÿÿÿÿ{1!^ÿÿÿÿú1^ÿÿÿÿl23ÿÿÿÿÀ2Hÿÿÿÿ
+3uÿÿÿÿƒ3XÿÿÿÿÜ3mÿÿÿÿN4bÿÿÿÿ±4Pÿÿÿÿ5! ÿÿÿÿC58ZÿÿÿÿÕ5
+@/ÿÿÿÿi6ECÿÿÿÿ	    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 +152,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 +171,35 @@ 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 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
 
+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 +215,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 +229,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: 4+%3u):    *unhandled* cmd %u
+   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
+   Error: length larger than remaining space in record
    alignment  : 2**%u
    alloc (len)   : %u (0x%08x)
    alloc (len): %u (0x%08x)
@@ -149,6 +250,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 +259,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 +270,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 +278,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 +293,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 +303,8 @@ ppcboot header:
    transfer address   : 0x%08x
    vector      : 0x%08x
    version mask: 0x%08x
+   version:    %x
   %s (len=%u+%u):
-  %s: 0x%v
   %u: size: %u, flags: 0x%02x, name: %.*s
   EEOM (len=%u):
   EGSD (len=%u):
@@ -218,17 +326,20 @@ 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
+ 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)
  fixup info rva:  flags: 0x%04x global symbol table: vbn: %u, records: %u
@@ -248,7 +359,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 +367,46 @@ 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' 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: %pA has ordered sections with incompatible alignments
+%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: 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: 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 VxWorks dynamic sections
+%F%P: failed to create ifunc sections
+%F%P: failed to create the second PLT .eh_frame section
+%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': error %d
+%H: %s for indirect function `%pT' unsupported
+%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 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 +418,117 @@ 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 references symbol not defined in the module
 %H: relocation to `%s+%v' may have caused the error above
+%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%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: 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.
+%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 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%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
+%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: 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: %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 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 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 %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 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: 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: 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: 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 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 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: 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: 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 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: 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: 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 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:%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 section symbol with an addend%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 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 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)
+(format %c%c%c%c signature %s age %ld)
 (no value)
 (not active)
 (not allocated)
@@ -410,48 +537,53 @@ 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-march=%s: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'-march=%s: %s ISA extension must separate with _-march=%s: ISA string cannot contain uppercase letters-march=%s: ISA string must begin with rv32 or rv64-march=%s: duplicate %s ISA extension `%s'-march=%s: expect number after `%dp'-march=%s: first ISA extension must be `e', `i' or `g'-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: unexpected ISA string at end: %s-march=%s: unknown %s ISA extension `%s'-march=%s: unknown standard ISA extension `%c'-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
 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 %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 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)
+Description 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]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         NORMALName 				NoneNumber in:
 OPR_ADD (add)
 OPR_AND (logical and)
 OPR_ASH (arithmetic shift)
@@ -467,21 +599,22 @@ 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
+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
+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)
@@ -524,28 +657,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 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
 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
+USRSTACKUnknownUnknown: %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]__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_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 %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 find default versions of the ISA extension `%s'cannot read DMT
 cannot read DMT header
 cannot read DMT psect
 cannot read DST
@@ -563,78 +699,85 @@ 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 %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 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: `%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 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 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 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
-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
+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 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 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 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 overflowpointer
+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 %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
+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
-septyp, name: %.*s
+section 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 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)
-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
+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 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 privilege 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: %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: privilege 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.35.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
+POT-Creation-Date: 2021-01-09 10:55+0000
+PO-Revision-Date: 2021-01-11 11:45+0200
 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 +794,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 +813,35 @@ Plural-Forms: nplurals=3; plural=(n%10==
 Ð¢Ð°Ð±ÐµÐ»Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)
 
 
+Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)
+
 Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ)
 
 Ð¢Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)
 
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx
+
+
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°
+
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸
+
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð¿Ñ€Ð²Ð¸ Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸
 
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx
 
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ�Ñ‚Ð°Ð½Ðµ Ñƒ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº
 
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð° (%d)
+
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸
 
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx
 
+ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+
 ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸
 
 Ð£Ð¿ÑƒÑ‚Ð° Ð¸Ð·Ð´Ð°ÑšÐ°:
@@ -699,9 +857,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 +871,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, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 4+%3u):    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð”Ð°Ñ‚ÑƒÐ¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ° Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEMHâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð¾
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ�Ð½Ð¸Ð¼ÐºÐ° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ â€žEMH_MHDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°
+   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñƒ Ñ�Ð½Ð¸Ð¼ÐºÑƒ
    Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ : 2**%u
    Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°)  : %u (0x%08x)
    Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°): %u (0x%08x)
@@ -724,6 +892,8 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð»Ð°Ñ†  : %.*s
    Ð´Ð¾Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐµ ÐºÐ¾Ð´Ð°: %u
    Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ° Ð¿Ñ€Ð°Ð²Ð°: %.*s
+   Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜: %#lx%s
+   Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜:    %#lx (%s)
    declfile: Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð¸Ð´ Ð¿Ð¾Ñ™Ð°: %u
    deflines %u
    Ð½Ð°Ð·Ð¸Ð² ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°  : %.*s
@@ -731,7 +901,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 +912,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð½Ð°Ð·Ð¸Ð² Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ°: %.*s
    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº: %.*s
    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x %08x
+   Ð¼Ð°Ð³Ð¸Ñ˜Ð°:      %#lx
    Ð½Ð°Ñ˜Ð². Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐµÑšÐ°: %u
    Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s
    Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s
@@ -747,6 +920,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð½Ð°Ð·Ð¸Ð²           : %.*s
    Ð½Ð°Ð·Ð¸Ð²         : %.*s
    Ð½Ð°Ð·Ð¸Ð²        : %.*s
+   Ð±Ñ€Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:      %#lx
    Ð±Ñ€Ð¾Ñ˜ â€žcondâ€œ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u
    Ð½Ð°Ð·Ð¸Ð² Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°  : %.*s
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x
@@ -761,6 +935,7 @@ Plural-Forms: nplurals=3; plural=(n%10==
    setlnum %u
    setrec %u
    Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�: %.*s
+   Ð²ÐµÐ»Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:  %#lx
    Ð½Ð¸Ð²Ð¾ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ         : %u
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: 0x%08x
    Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¸Ð¼Ð²ÐµÐº-Ð° : 0x%08x
@@ -770,8 +945,8 @@ Plural-Forms: nplurals=3; plural=(n%10==
    Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð°          : 0x%08x
    Ð²ÐµÐºÑ‚Ð¾Ñ€     : 0x%08x
    Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ: 0x%08x
+   Ð¸Ð·Ð´Ð°ÑšÐµ:  %x
   %s (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u+%u):
-  %s: 0x%v
   %u: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð½Ð°Ð·Ð¸Ð²: %.*s
   EEOM (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):
   EGSD (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):
@@ -793,17 +968,20 @@ 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â€œ
+ 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-Ð±Ð¸Ñ‚Ð½Ð¸Ñ… ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°:  Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGSTâ€œ
  Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u
  Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° : Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u (0x%x)
  Ð¿Ð¾Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¸Ð½Ñ„Ð¾ Ñ€Ð²Ð°:  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ : 0x%04x Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: Ð²Ð±Ð½: %u, Ð·Ð°Ð¿Ð¸Ñ�Ð¸: %u
@@ -823,7 +1001,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 +1009,46 @@ 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â€œ ÑƒÐ½Ð¾Ñ�: %C: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°
+%F%P: â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¾ Ð¾Ð´ÐµÑ™ÐºÐµ Ñ�Ð° Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµÐ¼
+%F%P: %pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½-Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž--gc-sectionsâ€œ
+%F%P: %pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ñ˜Ðµ Ð¸Ñ�ÐºÑ™ÑƒÑ‡ÐµÐ½
+%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.
+%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.
+%F%P: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%pAâ€œ Ð¼ÐµÑ‚Ñƒ â€ž%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: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ð° Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ÑˆÑ›Ñƒ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%pBâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ; Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-fPIEâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-pieâ€œ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žGOTPCRELâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ñ�Ð° â€ž--no-relaxâ€œ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žBND PLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%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: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žVxWorksâ€œ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐµ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žifuncâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ
+%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð´Ñ€ÑƒÐ³Ð¸ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº
+%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â€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d
+%H: â€ž%sâ€œ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾
+%H: â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼
+%H: â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð¾Ð¼ Ð¾Ð´Ñ�Ñ‚Ñ€Ð°ÑšÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°
+%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d
+%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 +1060,117 @@ 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: â€žÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñƒ
 %H: â€žÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%s+%vâ€œ Ñ˜Ðµ Ð¼Ð¾Ð¶Ð´Ð° Ð¿Ñ€Ð¾ÑƒÐ·Ñ€Ð¾ÐºÐ¾Ð²Ð°Ð»Ð¾ Ð³Ð¾Ñ€ÑšÑƒ Ð³Ñ€ÐµÑˆÐºÑƒ
+%H: â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ
+%H: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ
+%H: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%#xâ€œ.
 %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: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%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â€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ.
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° â€žDT_TEXTRELâ€œ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž%sâ€œ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ â€žPIEâ€œ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ
+%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°
 %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â€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾
+%X%H: Ð¿Ð¾Ð·Ð¸Ð² â€ž@localâ€œ Ð·Ð° i-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ
+%X%H: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ðµ Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñƒ â€žJALXâ€œ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°
+%X%H: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ
+%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: â€ž%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â€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ] Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ] Ð¾Ð´ÐµÑ™Ð°Ðºâ€ž%pAâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº%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): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° %u Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ %u Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %u ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð±Ñ€Ð¸Ñ�Ð°Ð½ Ñ�Ð¸Ð¼Ð±Ð¾Ð»%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %u ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»%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): Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ â€ž%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â€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%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: â€žBE8â€œ Ñ�Ð»Ð¸ÐºÐµ Ñ�Ñƒ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ð´ %d%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼%pB: â€žGNU_MBINDâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%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â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:%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: â€žaoutâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð½Ð°Ð²Ð¾Ð´Ð¸ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ°Ð½ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°: %u%pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ Ð½Ð¸Ñ�ÐºÐµ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµ (Ð±Ñ€Ð¾Ñ˜ %d)%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žFDPICâ€œ Ð¸ Ð½Ðµ-â€žFDPICâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: ÑƒÐ²ÐµÐ·ÐµÐ½ Ñ˜Ðµ Ð»Ð¾Ñˆ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d%pB: Ð»Ð¾Ñˆ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ%pB: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ%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: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ â€žGOTâ€œ ÑƒÐ½Ð¾Ñ�Ð¸%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: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð½Ð°%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ð·Ð»Ð°Ð·%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žABIâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½ Ð½ÐµÐ±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ˜ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ð¸%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žPHDRâ€œ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²ÐµÐ½ â€žLOADâ€œ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ¾Ð¼%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð½Ð°Ð³Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº: %#llx%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð°Ñ˜Ñƒ Ð¸Ð·Ð²Ð°Ð½ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 835769 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° 843419 Ð¸Ð·Ñ€Ð°Ð²Ð½Ð¾ 0x%%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 843419 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐºÑƒÐ¿ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð·Ð° â€ž%sâ€œ; Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½ Ñƒ Ñ€Ð°Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ðµ-ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° %d ÑƒÐºÑ™ÑƒÑ‡ÑƒÑ˜Ðµ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¸/Ð¸Ð»Ð¸ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žsearch_nds32_elf_blankâ€œ Ð¸Ð·Ð²ÐµÑˆÑ‚Ð°Ð²Ð° Ð¾ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ñ‡Ð²Ð¾Ñ€Ñƒ%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€žCOMDATâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%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: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� Ñƒ â€ž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: Ð½ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð½Ð°Ð·Ð¸Ð²Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° 0
+%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: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° (0x%x)%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡Ð°Ðº Ð·Ð° Ñ€ÑƒÐºÐ¾Ð²Ð°ÑšÐµ â€žltoâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¾Ð¼%pB: Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð±ÐµÐ· â€ž-fPICâ€œ?%pB: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½%pB: Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°%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â€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž%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â€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€ž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: ÑƒÐ·Ð¸Ð¼Ð°ÑšÐµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ðµ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ%pB: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%s)%pB: Ð¼ÐµÑ‚Ð° (%s) Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ (%pA)%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u%pB: â€žtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð»Ð°Ð¶Ð½Ð¸ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº%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: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ�Ð°Ð¶Ð¸Ð¼Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%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: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€ž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: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¸ Ð½Ðµ-â€ž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: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°%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: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð»Ð°Ð±Ð¾ â€ž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: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð¾Ð²Ð° (%#lx) Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° (%#lx)%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: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÑƒÐ½Ð¾Ñ�Ñƒ â€žGOTâ€œ%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñƒ â€žflags2â€œ Ð¿Ð¾Ñ™Ñƒ â€ž.MIPS.abiflagsâ€œ-Ð° (0x%lx)%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žwin32pstatus %sâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾%pB: Ð½ÐµÑ›Ñƒ Ñ€ÐµÑˆÐ¸Ñ‚Ð¸ Ð²Ñ€ÐµÐ¼Ðµ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°%pB: â€žwin32pstatus NOTE_INFO_MODULEâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾ Ð´Ð° Ð±Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ð»Ð¾ Ð½Ð°Ð·Ð¸Ð² Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %u%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: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ¿Ð¸ÑˆÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ñ€Ð°Ð·Ð½Ñƒ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ%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â€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼%s  Ð³Ñ€Ð°Ð½Ð°                           %lu
+  Ð³Ñ€Ð°Ð½Ð° Ñ�Ð°Ð´Ñ€. Ð¿Ð¾Ñ€Ð°Ð².   %lu
+  Ð³Ñ€Ð°Ð½Ð° Ð½Ðµ-Ñ�Ð°Ð´Ñ€.       %lu
+  Ð³Ñ€Ð°Ð½Ð° Ð¾Ð±Ð°            %lu
+  Ð´ÑƒÐ³Ð¾ Ð³Ñ€Ð°Ð½Ð°           %lu
+  Ð´ÑƒÐ³Ð¾ Ñ�Ð°Ð´Ñ€. Ð¿Ð¾Ñ€Ð°Ð².    %lu
+  Ð´ÑƒÐ³Ð¾ Ð½Ðµ-Ñ�Ð°Ð´Ñ€.        %lu
+  Ð´ÑƒÐ³Ð¾ Ð¾Ð±Ð°             %lu
+  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð²            %lu
+  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð² Ñ�Ð°Ñ‡ÑƒÐ²Ð°Ñ˜    %lu
+  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ�Ð°Ð´Ñ€.   %lu
+  Ð¿Ð»Ñ‚ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ð±Ð°        %lu
+  Ð¾Ð¿ÑˆÑ‚Ð¸ ÑƒÐ½Ð¾Ñ�           %luâ€ž%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â€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%pAâ€œâ€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾â€ž%sâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº Ð·Ð° â€ž.eh_frame sdata4â€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ%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)
 (Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº)
+(Ð·Ð°Ð¿Ð¸Ñ� %c%c%c%c Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ� %s Ñ�Ñ‚Ð°Ñ€Ð¾Ñ�Ñ‚ %ld)
 (Ð±ÐµÐ· Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸)
 (Ð½Ð¸Ñ˜Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)
 (Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¾)
@@ -985,48 +1179,53 @@ 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â€œ Ð½Ð¸Ñ˜Ðµ-march=%s: â€ž%s ISAâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð·Ð±ÑƒÑ‡Ð½Ð¸Ð¼ Ñ€ÐµÐ´Ð¾Ð¼.  ÐœÐ¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ñ€Ðµ â€ž%sâ€œ-march=%s: â€ž%s ISAâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ñ�Ðµ Ð¼Ð¾Ñ€Ð° Ñ€Ð°Ð·Ð´Ð²Ð¾Ñ˜Ð¸Ñ‚Ð¸ Ñ�Ð° â€ž_â€œ-march=%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ�Ð»Ð¾Ð²Ð°-march=%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð¼Ð¾Ñ€Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð¸ Ñ�Ð° â€žrv32â€œ Ð¸Ð»Ð¸ â€žrv64â€œ-march=%s: Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ¾ â€ž%s ISAâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ-march=%s: Ð¾Ñ‡ÐµÐºÑƒÑ˜ÐµÐ¼ Ð±Ñ€Ð¾Ñ˜ Ð½Ð°ÐºÐ¾Ð½ â€ž%dpâ€œ-march=%s: Ð¿Ñ€Ð²Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ â€žeâ€œ, â€žiâ€œ Ð¸Ð»Ð¸ â€žgâ€œ-march=%s: â€žrv%deâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð±Ð°Ð·Ð° ISA-march=%s: â€žrv32â€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žqâ€œ-march=%s: â€žrv32eâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žfâ€œ-march=%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%câ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ¾Ð¼ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ-march=%s: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ð° ÐºÑ€Ð°Ñ˜Ñƒ: %s-march=%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ %s ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ-march=%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%câ€œ-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 (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¼ÐµÑ�Ñ‚Ð¾)
 Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²Ð°
 ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.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â€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´Ñ€ÐµÐ´Ð±Ñƒ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ðµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %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â€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ�Ð²Ð¾Ñ˜Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ! (0x%lx vs 0x%lx)â€ž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,19 +1243,20 @@ 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â€œ
+â€ž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 â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð´ÐµÑ™ÐµÐ½Ðµ Ñ�Ð»Ð¸ÐºÐµ
+â€žRL78 ABIâ€œ Ñ�ÑƒÐºÐ¾Ð±: â€ž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â€œ
+Ð§Ð¸Ñ‚Ð°Ð¼ Ð²Ñ€ÐµÐ¼Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ñ€Ñ…Ð¸Ð²ÐµÐ£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%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 (Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)
@@ -1099,28 +1299,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â€œÐ¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ð¾Ð´ÐµÑ™Ð°ÐºÐ°Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð°
+ÐŸÐ¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÐ’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°
 Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð½Ð¸Ñ‚Ð¸ [.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Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾: %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-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, [Ñ‡Ð¸Ñ˜Ð¸ Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð¸Ð·Ð³ÑƒÐ±Ñ™ÐµÐ½]Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° â€ž__tls_get_addrâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð°â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð½ÑƒÐ»Ð° Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ ÑƒÐ»Ð°Ð·Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒâ€ž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: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lx, ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ 32 ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ñ‚Ð¾Ð³Ð°bfd_mach_o_read_section_64: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lx, ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ 32 ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ñ‚Ð¾Ð³Ð°bfd_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â€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ñƒ Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜ÑƒÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ñ�ÐºÐ¾Ðº Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜ÑƒÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾ÑˆÐ°Ñ™ÐµÐ¼ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žEMHâ€œ Ñƒ Ð¿Ñ€Ð²Ð¾Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ
+Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDSTâ€œ
@@ -1138,58 +1341,68 @@ Plural-Forms: nplurals=3; plural=(n%10==
 Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€ž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â€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œÐ½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__ctbpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__epâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚ â€ž__gpâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ñ�Ð»Ð¸ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œÐ¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ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â€œ Ñ‚Ð°Ð±ÐµÐ»Ð°Ð³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° â€ž%sâ€œ: %sÐ³Ñ€ÐµÑˆÐºÐ° Ñ‡Ð¸Ñ‚Ð°ÑšÐ° Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ð¸Ð· Ð»Ð¸Ñ‡Ð½Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° ÐµÐ»Ñ„-Ð°Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%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-Ð±Ð¸Ñ‚Ð½Ðµ Ð´ÑƒÐ±Ð»ÐµÑ€Ðµ Ð°Ð»Ð¸ â€ž%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: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ 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), Ð¼Ð¾Ð¶Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜ÑƒÐ³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ²ÐµÐ¶ÐµÐ¼ â€ž%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â€œÐ¸Ð·Ð²Ñ€ÑˆÐ½Ð°Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ Ð·Ð° Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žHI16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð½Ñ�Ñ‚Ð°Ð»Ð¸Ñ€Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œÐ½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€ž.fixupâ€œ-Ð°Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°Ð±ÑƒÐ´ÑƒÑ›Ð° ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐ° Ð¾ â€žFDEâ€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÑƒ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ð¾Ð´Ð±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ˜ÐµÐ¾Ð¿ÑˆÑ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° â€ž%sâ€œÑ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ñƒ â€ž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
+ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´ÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€ž%sâ€œÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð³Ñ€Ð°Ð½Ð°ÑšÐµ/Ñ�ÐºÐ¾Ðº Ð½Ð° Ð½ÐµÐ¿Ð°Ñ€Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�ÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%sâ€œ Ñ�Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¼ â€ž%sâ€œ Ñ˜Ðµ Ð´Ð°Ð»Ð¾ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÑƒÐ¼ÑšÐ¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.got.locâ€œÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚: Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ñ˜Ðµ %lu != max %lu; Ð¿Ñ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ â€ž%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â€œmach-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
+Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð°: Ð½Ð°Ð·Ð¸Ð²: %.*s
 ÐºÑ€Ð°Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°
-ÑƒÐ¿ÑƒÑ‚Ð° Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð½Ð° %04lxÑ€ÐµÐ³Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»ÑƒÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°ÐºÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ñ€ÐµÐ±Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð°Ñ€Ð°Ð½ Ð±Ñ€Ð¾Ñ˜Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ñ… Ñ�ÐµÐ³Ð¼ÐµÐ½Ð°Ñ‚Ð° Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%Bâ€œ: %s
+Ñ�Ð½Ð¸Ð¼Ð°Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ Ð·Ð° Ð´ÑƒÐ¶Ð¸Ð½Ñƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°ÑƒÐ¿ÑƒÑ‚Ð° Ð½Ð° Ð³Ñ€ÑƒÐ¿Ð¸Ñ�Ð°Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð¾Ð±Ð¸Ñ‡Ð½Ð¾Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð½Ð° %04lxÑƒÐ¿ÑƒÑ›Ð¸Ð²Ð°ÑšÐµ Ð½Ð° Ð´Ð°Ð»ÐµÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¾Ð¼ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð¾Ð³ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°Ñ€ÐµÐ³Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€ â€ž%%g%dâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾: â€ž%sâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%pBâ€œÐ¾Ð´ÐµÑ™Ð°Ðº Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜
+Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ñ˜Ðµ *Ð�Ð•ÐŸÐžÐ—Ð�Ð�Ð¢Ðž*Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-â€žRELâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°ÐºÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»ÑƒÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°ÐºÐ¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ñ€ÐµÐ±Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð°Ñ€Ð°Ð½ Ð±Ñ€Ð¾Ñ˜Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ñ… Ñ�ÐµÐ³Ð¼ÐµÐ½Ð°Ñ‚Ð° Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ž%pBâ€œÐ¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%pBâ€œ: %s
 Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œÐ¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ñ€ÑƒÑ‚Ð¸Ð½Ðµ
 ÐºÑ€Ð°Ñ˜ Ñ€ÑƒÑ‚Ð¸Ð½Ðµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%08x
-Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²ÐºÐµ, Ð½Ð°Ð·Ð¸Ð²: %.*s
+Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ÐµÐ²Ñ€Ñ�Ñ‚Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²ÐºÐµ, Ð½Ð°Ð·Ð¸Ð²: %.*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â€œÐ¾Ð´ÐµÑ™Ð°Ðº Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64KB; Ð´Ð¾ÑšÐ° Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (Ð²Ð¸Ð´Ð¸Ñ‚Ðµ Ð¾Ð¿Ñ†Ð¸Ñ˜Ñƒ â€ž-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Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%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â€œÐ½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€ž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â€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%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: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ ISA Ð¸Ð·Ð´Ð°ÑšÐµ %d.%d Ð·Ð° â€ž%sâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ, Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ Ñ˜Ðµ %d.%dÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€žARCâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žMSPABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žGNU_PROPERTY_TYPEâ€œ (%ld) Ð²Ñ€Ñ�Ñ‚Ð°: 0x%xÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ°
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð° â€ž%sâ€œ
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½ÐµÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ñ�Ðµ Ñ‚Ñ€ÐµÐ±Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--enable-non-contiguous-regionsâ€œ Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œ
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· â€žld.soâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° Ð¾Ñ‚ÐºÑ€Ð¸Ð²Ð°ÑšÐµ â€žABIâ€œ Ð¿Ñ€ÐµÑ�Ñ‚ÑƒÐ¿Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žpower10 pc-relativeâ€œ ÐºÐ¾Ð´Ð¾Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRX_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° (%u) ÑšÐµÐ³Ð¾Ð²Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%uâ€œ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ Ñ˜Ðµ Ð¼Ð°ÑšÐµ Ð¾Ð´ â€ž%uâ€œ Ñƒ â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¸Ð·Ð²Ð¾Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%pBâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ‡Ð¸Ñ�Ñ‚Ð¸Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¸ ÐºÐ¾Ð´ Ñƒ â€ž%pBâ€œ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñ�Ð° ÑšÐ¸Ð¼ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%pBâ€œ ÑƒÑ�Ð»ÐµÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ñ�Ð¿Ð¾Ñ™Ð°ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸
+ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€œ%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â€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸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: 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: error: attribute section length too small: %%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%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory (%lx bytes at %) extends across section boundary at %%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž% >= %â€œ%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ñ�Ð° â€ž%#â€œ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð±ÐµÐ· ÑƒÐ½Ð¾Ñ�Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ â€žR_SH_USESâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ â€žinsnâ€œ %#x%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ%pB: %#: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜%pB: %#: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ %#%pB: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %%pB: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %# Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œÐ³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° (%# Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ (%# Ð±Ð°Ñ˜Ñ‚Ð°)Ð³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%# Ð±Ð°Ñ˜Ñ‚Ð°)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¸Ð»Ð¸ Ñ˜ÐµÐ´Ð½Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° â€ž%â€œâ€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ (%)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ (%#) Ð¾Ð´ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ (%#lx)â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ %%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°: %%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: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%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-Ð±Ð¸Ñ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° %# Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %# Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒÐ°Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#) Ñ˜Ðµ Ð¸Ñ�Ð¿Ð¾Ð´ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#)%pB: Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ Ð¸Ð·Ð° ÐºÑ€Ð°Ñ˜Ð° Ñ�Ñ‚Ð¾Ð¿Ñ™ÐµÐ½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° (%)%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ… Ð´Ð° ÐµÐ¼Ð¸Ñ‚ÑƒÑ˜ÐµÐ¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ ÐºÐ¾Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ 4 â€ž%#â€œ%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð¸Ñ… Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€Ð°; Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° %%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ðµ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÑƒÐ¶Ð¸Ð½Ðµ %: %#%pB: Ð»Ð¾Ñˆ â€žXTY_ERâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð±Ñ€Ð¾Ñ˜ %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %%pB: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s:%â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ†-Ð¾Ð´ÐµÑ™ÐºÑƒÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: %# > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°%pB(%pA+%#): % Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½Ð° %-Ð±Ð°Ñ˜Ñ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ñƒ, Ð°Ð»Ð¸ Ñ�Ð°Ð¼Ð¾ % Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð½Ð¾%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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/sr.po ./bfd/po/sr.po
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/sr.po	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/sr.po	2021-12-16 01:57:38.000000000 +0000
@@ -1,594 +1,700 @@
-# 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â€“2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd-2.24.90\n"
+"Project-Id-Version: bfd-2.35.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"
+"POT-Creation-Date: 2021-01-09 10:55+0000\n"
+"PO-Revision-Date: 2021-01-11 11:45+0200\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:1613 pdp11.c:1236 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:1577 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:1580 vms-alpha.c:8040
 msgid "*unknown*"
 msgstr "*Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾*"
 
-#: aoutx.h:4018 aoutx.h:4344
-msgid "%P: %B: unexpected relocation type\n"
-msgstr "%P: %B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+#: aoutx.h:1716 pdp11.c:1578
+#, c-format
+msgid "%pB: invalid string offset %<PRIu64> >= %<PRIu64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%<PRIu64> >= %<PRIu64>â€œ"
 
-#: aoutx.h:5375
+#: aoutx.h:1963
 #, c-format
-msgid "%s: relocatable link from %s to %s not supported"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð²ÐµÐ·Ð° Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+msgid "%pB: unsupported AOUT relocation size: %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žAOUTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
 
-#: archive.c:2249
-msgid "Warning: writing archive was slow: rewriting timestamp\n"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ¿Ð¸Ñ� Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ñƒ Ñ˜Ðµ Ñ�Ð¿Ð¾Ñ€: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÑƒÐ¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð²Ñ€ÐµÐ¼Ðµ\n"
+#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058
+#, c-format
+msgid "%pB: attempt to write out unknown reloc type"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð²Ñ€Ñ�Ñ‚Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: archive.c:2549
+#: aoutx.h:4087 pdp11.c:3441
+#, c-format
+msgid "%pB: unsupported relocation type"
+msgstr "%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+
+#. Unknown relocation.
+#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2791
+#: 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:1062 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:6241 elf32-ft32.c:306 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:1038
+#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 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:438
+#: 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:290 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:4071 elf64-alpha.c:4219 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:1018
+#: elf64-ppc.c:1370 elf64-ppc.c:1379 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:281 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:969
+#: 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:3828
+#, c-format
+msgid "%pB: unsupported relocation type %#x"
+msgstr "%pB: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€ž%#xâ€œ"
+
+#: aoutx.h:5435 pdp11.c:3864
+#, 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:2241
+msgid "warning: writing archive was slow: rewriting timestamp"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ¿Ð¸Ñ� Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ñƒ Ñ˜Ðµ Ñ�Ð¿Ð¾Ñ€: Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÑƒÐ¿Ð¸Ñ�ÑƒÑ˜ÐµÐ¼ Ð²Ñ€ÐµÐ¼Ðµ"
+
+#: archive.c:2308 archive.c:2368 elflink.c:4609 linker.c:1428
+#, c-format
+msgid "%pB: plugin needed to handle lto object"
+msgstr "%pB: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡Ð°Ðº Ð·Ð° Ñ€ÑƒÐºÐ¾Ð²Ð°ÑšÐµ â€žltoâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¾Ð¼"
+
+#: archive.c:2594
 msgid "Reading archive file mod timestamp"
 msgstr "Ð§Ð¸Ñ‚Ð°Ð¼ Ð²Ñ€ÐµÐ¼Ðµ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ñ€Ñ…Ð¸Ð²Ðµ"
 
-#: archive.c:2573
+#: archive.c:2618
 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:681
+msgid "no error"
+msgstr "Ð½ÐµÐ¼Ð° Ð³Ñ€ÐµÑˆÐºÐµ"
+
+#: bfd.c:682
+msgid "system call error"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ñ�ÐºÐ¾Ð³ Ð¿Ð¾Ð·Ð¸Ð²Ð°"
+
+#: bfd.c:683
+msgid "invalid bfd target"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ†Ð¸Ñ™ Ð±Ñ„Ð´-Ð°"
+
+#: bfd.c:684
+msgid "file in wrong format"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ"
+
+#: bfd.c:685
+msgid "archive object file in wrong format"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð°Ñ€Ñ…Ð¸Ð²Ðµ Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ"
+
+#: bfd.c:686
+msgid "invalid operation"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð°"
+
+#: bfd.c:687
+msgid "memory exhausted"
+msgstr "Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð° Ñ˜Ðµ Ð¸Ñ�Ñ†Ñ€Ð¿Ñ™ÐµÐ½Ð°"
+
+#: bfd.c:688
+msgid "no symbols"
+msgstr "Ð½ÐµÐ¼Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: bfd.c:689
+msgid "archive has no index; run ranlib to add one"
+msgstr "Ð°Ñ€Ñ…Ð¸Ð²Ð° Ð½ÐµÐ¼Ð° Ð¸Ð½Ð´ÐµÐºÑ�; Ð¿Ð¾ÐºÑ€ÐµÐ½Ð¸Ñ‚Ðµ â€žranlibâ€œ Ð´Ð° Ð³Ð° Ð´Ð¾Ð´Ð°Ñ‚Ðµ"
+
+#: bfd.c:690
+msgid "no more archived files"
+msgstr "Ð½ÐµÐ¼Ð° Ð²Ð¸ÑˆÐµ Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð°Ð½Ð¸Ñ… Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°"
+
+#: bfd.c:691
+msgid "malformed archive"
+msgstr "Ð»Ð¾ÑˆÐ° Ð°Ñ€Ñ…Ð¸Ð²Ð°"
 
-#: bfd.c:422
+#: bfd.c:692
 msgid "DSO missing from command line"
-msgstr "Ð”Ð¡Ðž Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð½Ð° Ð»Ð¸Ð½Ð¸Ñ˜Ð¸ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸"
+msgstr "â€žDSOâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð½Ð° Ð»Ð¸Ð½Ð¸Ñ˜Ð¸ Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸"
+
+#: bfd.c:693
+msgid "file format not recognized"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚"
 
-#: bfd.c:423
-msgid "File format not recognized"
-msgstr "Ð—Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: bfd.c:694
+msgid "file format is ambiguous"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½"
 
-#: bfd.c:424
-msgid "File format is ambiguous"
-msgstr "Ð—Ð°Ð¿Ð¸Ñ� Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜Ðµ Ð½ÐµÑ˜Ð°Ñ�Ð°Ð½"
+#: bfd.c:695
+msgid "section has no contents"
+msgstr "Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ðµ"
 
-#: bfd.c:425
-msgid "Section has no contents"
-msgstr "ÐžÐ´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ðµ"
+#: bfd.c:696
+msgid "nonrepresentable section on output"
+msgstr "Ð½Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸ÐºÐ°Ð·Ð°Ñ‚Ð¸"
 
-#: bfd.c:426
-msgid "Nonrepresentable section on output"
-msgstr "Ð�Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸ÐºÐ°Ð·Ð°Ñ‚Ð¸"
+#: bfd.c:697
+msgid "symbol needs debug section which does not exist"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° ÑƒÐºÐ»Ð°ÑšÐ°ÑšÐµ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜Ð¸"
 
-#: bfd.c:427
-msgid "Symbol needs debug section which does not exist"
-msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° ÑƒÐºÐ»Ð°ÑšÐ°ÑšÐµ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ð¿Ð¾Ñ�Ñ‚Ð¾Ñ˜Ð¸"
+#: bfd.c:698
+msgid "bad value"
+msgstr "Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚"
 
-#: bfd.c:428
-msgid "Bad value"
-msgstr "ÐŸÐ¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚"
+#: bfd.c:699
+msgid "file truncated"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°"
 
-#: bfd.c:429
-msgid "File truncated"
-msgstr "Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¾ÐºÑ€ÑšÐµÐ½Ð°"
+#: bfd.c:700
+msgid "file too big"
+msgstr "Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°"
 
-#: bfd.c:430
-msgid "File too big"
-msgstr "Ð”Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°"
+#: bfd.c:701
+msgid "sorry, cannot handle this file"
+msgstr "Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð¾Ð²Ð¾Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ¾Ð¼"
 
-#: bfd.c:431
+#: bfd.c:702
 #, 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:703
+msgid "#<invalid error code>"
+msgstr "#<Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÐºÐ¾Ð´ Ð³Ñ€ÐµÑˆÐºÐµ>"
 
-#: bfd.c:1046
+#: bfd.c:1662
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "â€žBFDâ€œ â€ž%sâ€œ Ñ‚Ð²Ñ€Ð´ÑšÐ° Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð° â€ž%sâ€œ:%d"
 
-#: bfd.c:1058
+#: bfd.c:1675
 #, 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:1680
 #, 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:1682
 msgid "Please report this bug.\n"
 msgstr "ÐŸÑ€Ð¸Ñ˜Ð°Ð²Ð¸Ñ‚Ðµ Ð¾Ð²Ñƒ Ð³Ñ€ÐµÑˆÐºÑƒ.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:207
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
-msgstr "Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº=%lx  Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð½=%d\n"
+msgstr "Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº=%lx Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð½=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:210
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "Ð½Ðµ Ð¼Ð°Ð¿Ð¸Ñ€Ð°Ð¼: Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° Ð¾ÐºÑ€ÑƒÐ¶ÐµÑšÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð°\n"
 
-#: binary.c:271
+#: binary.c:276
 #, 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:253
-msgid "reopening %B: %s\n"
-msgstr "Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%Bâ€œ: %s\n"
-
-#: 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â€œ, Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ðµ Ð½ÐµÑ�Ð°Ð¶ÐµÑ‚Ðµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ."
+#: cache.c:271
+#, c-format
+msgid "reopening %pB: %s\n"
+msgstr "Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¾Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€ž%pBâ€œ: %s\n"
 
-#: coff-alpha.c:603
-msgid "%B: unknown/unsupported relocation type %d"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð°/Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+#: 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:852 coff-alpha.c:889 coff-alpha.c:1973 coff-mips.c:946
+#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953
 msgid "GP relative relocation used when GP not defined"
-msgstr "Ð£Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ˜Ðµ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+msgstr "ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ˜Ðµ Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: coff-alpha.c:1450
+#: coff-alpha.c:1441
 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:1499 coff-alpha.c:1505 elf.c:9442 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7597 elf32-ppc.c:8748 elf64-ppc.c:16199
+#, c-format
+msgid "%pB: %s unsupported"
+msgstr "%pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: coff-alpha.c:1516
-msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW"
-msgstr "%B: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: â€žALPHA_R_GRELLOWâ€œ"
+#: coff-go32.c:156 coffswap.h:785
+#, 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: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 "Ð ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: coff-arm.c:1034
+#: coff-rs6000.c:2877
 #, c-format
-msgid "%B: unable to find THUMB glue '%s' for `%s'"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ñ�Ð° â€ž%#<PRIx64>â€œ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð±ÐµÐ· ÑƒÐ½Ð¾Ñ�Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
 
-#: coff-arm.c:1063
+#: coff-rs6000.c:3640 coff64-rs6000.c:2152
 #, c-format
-msgid "%B: unable to find ARM glue '%s' for `%s'"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "%pB: symbol `%s' has unrecognized smclas %d"
+msgstr "%pB: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ ÐºÐ»Ð°Ñ�Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%dâ€œ"
 
-#: coff-arm.c:1365 elf32-arm.c:7141
+#: coff-sh.c:778 elf32-sh.c:521
 #, 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: %#<PRIx64>: warning: bad R_SH_USES offset"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ â€žR_SH_USESâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜"
 
-#: coff-arm.c:1455
+#: coff-sh.c:789
 #, 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 "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn %#x"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ â€žinsnâ€œ %#x"
 
-#: 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-sh.c:807 elf32-sh.c:552
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: bad R_SH_USES load offset"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ"
 
-#: coff-arm.c:2075
-msgid "%B: illegal symbol index in reloc: %d"
-msgstr "%B: Ð½ÐµÐ´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ: %d"
+#: coff-sh.c:832 elf32-sh.c:568
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: could not find expected reloc"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: coff-arm.c:2206
+#: coff-sh.c:849 elf32-sh.c:597
 #, c-format
-msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d, Ð´Ð¾Ðº Ñ˜Ðµ â€ž%Bâ€œ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° Ð�ÐŸÐ¦Ð¡-%d"
+msgid "%pB: %#<PRIx64>: warning: symbol in unexpected section"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: coff-arm.c:2222 elf32-arm.c:16123
+#: coff-sh.c:975 elf32-sh.c:727
 #, c-format
-msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%Bâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ"
 
-#: coff-arm.c:2225 elf32-arm.c:16127
+#: coff-sh.c:985 elf32-sh.c:738
 #, 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 count"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜"
 
-#: coff-arm.c:2239
+#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505
 #, c-format
-msgid "error: %B is compiled as position independent code, whereas target %B is absolute position"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜"
+msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
 
-#: coff-arm.c:2242
+#: coff-sh.c:1451
 #, c-format
-msgid "error: %B is compiled as absolute position code, whereas target %B is position independent"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%Bâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ ÐºÐ¾Ð´ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾Ð³ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°, Ð´Ð¾Ðº Ñ˜Ðµ Ñ†Ð¸Ñ™ â€ž%Bâ€œ Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°"
+msgid "%pB: fatal: generic symbols retrieved before relaxing"
+msgstr "%pB: ÐºÐ¾Ð±Ð½Ð¾: Ð¾Ð¿ÑˆÑ‚Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ½Ð¸ Ð¿Ñ€Ðµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
 
-#: coff-arm.c:2270 elf32-arm.c:16192
+#: coff-sh.c:2781 cofflink.c:2948
 #, c-format
-msgid "Warning: %B supports interworking, whereas %B does not"
-msgstr "Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: â€ž%Bâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%Bâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+msgid "%pB: illegal symbol index %ld in relocs"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
 
-#: coff-arm.c:2273 elf32-arm.c:16198
+#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5050
 #, c-format
-msgid "Warning: %B does not support interworking, whereas %B does"
-msgstr "Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: â€ž%Bâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%Bâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+msgid "%pB: warning: illegal symbol index %ld in relocs"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
 
-#: coff-arm.c:2297
+#: coffcode.h:953
 #, c-format
-msgid "private flags = %x:"
-msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ =%x:"
+msgid "%pB: unable to load COMDAT section name"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ â€žCOMDATâ€œ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ°"
 
-#: coff-arm.c:2305 elf32-arm.c:12119
+#. Malformed input files can trigger this test.
+#. cf PR 21781.
+#: coffcode.h:988
 #, c-format
-msgid " [floats passed in float registers]"
-msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€žCOMDATâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: coff-arm.c:2307
+#: coffcode.h:1000
 #, c-format
-msgid " [floats passed in integer registers]"
-msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žCOMDATâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
 
-#: coff-arm.c:2310 elf32-arm.c:12122
+#: coffcode.h:1010
 #, c-format
-msgid " [position independent]"
-msgstr " [Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°]"
+msgid "%pB: warning: no symbol for section '%s' found"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: coff-arm.c:2312
+#. 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:1241
 #, c-format
-msgid " [absolute position]"
-msgstr " [Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜]"
+msgid "%pB: warning: ignoring section flag %s in section %s"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
 
-#: coff-arm.c:2316
+#: coffcode.h:1310
 #, c-format
-msgid " [interworking flag not initialised]"
-msgstr " [Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€ÐµÐ½ÑƒÑ‚Ð°]"
+msgid "%pB (%s): section flag %s (%#lx) ignored"
+msgstr "%pB (%s): Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%#lx) Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
 
-#: coff-arm.c:2318
+#: coffcode.h:1926 coffcode.h:1991
 #, c-format
-msgid " [interworking supported]"
-msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾]"
+msgid "%pB: warning: claims to have 0xffff relocs, without overflow"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ñ‚Ð²Ñ€Ñ’ÑƒÑ˜ÐµÐ¼ 0xffff Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°, Ð±ÐµÐ· Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐ°"
 
-#: coff-arm.c:2320
+#: coffcode.h:2352
 #, c-format
-msgid " [interworking not supported]"
-msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾]"
+msgid "unrecognized TI COFF target id '0x%x'"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¸Ð´ â€žTI COFFâ€œ Ñ†Ð¸Ñ™Ð° â€ž0x%xâ€œ"
 
-#: coff-arm.c:2366 elf32-arm.c:11104
+#: coffcode.h:2630
 #, c-format
-msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð�Ð¸Ñ�Ð°Ð¼ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ Ð¿Ð¾ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð²ÐµÑ› Ð½Ð°Ð²ÐµÐ´ÐµÐ½ ÐºÐ°Ð¾ Ð½ÐµÐ¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²ÐµÐ½Ð¾"
+msgid "%pB: reloc against a non-existent symbol index: %ld"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›ÐµÐ³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %ld"
 
-#: coff-arm.c:2370 elf32-arm.c:11108
+#: coffcode.h:2930
 #, c-format
-msgid "Warning: Clearing the interworking flag of %B due to outside request"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð£ÐºÐ»Ð°ÑšÐ°Ð¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð° Ð·Ð° â€ž%Bâ€œ ÑƒÑ�Ð»ÐµÐ´ Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ñ�Ð¿Ð¾Ñ™Ð°"
+msgid "%pB: page size is too large (0x%x)"
+msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° (0x%x)"
 
-#: coff-h8300.c:1096
+#: coffcode.h:3090
 #, c-format
-msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€žR_MEM_INDIRECTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµÐ¼ ÐºÐ°Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·"
+msgid "%pB: too many sections (%d)"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)"
 
-#: coff-i860.c:147
+#: coffcode.h:3508
 #, c-format
-msgid "relocation `%s' not yet implemented"
-msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ˜Ð¾Ñˆ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+msgid "%pB: section %pA: string table overflow at offset %ld"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐ¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %ld"
 
-#: 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:3608
+#, c-format
+msgid "%pB:%s section %s: alignment 2**%u not representable"
+msgstr "%pB:%s Ð¾Ð´ÐµÑ™Ð°Ðº %s: Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ 2**%u Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ñ‚Ð¸"
 
-#: coff-i960.c:124 coff-i960.c:480
-msgid "uncertain calling convention for non-COFF symbol"
-msgstr "Ð½ÐµÑ�Ð¸Ð³ÑƒÑ€Ð°Ð½ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ€ Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð·Ð° Ð½Ðµ-â€žCOFFâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+#: coffcode.h:4284
+#, c-format
+msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð¾Ð²Ð° (%#lx) Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° (%#lx)"
 
-#: coff-m68k.c:484 elf32-bfin.c:5556 elf32-cr16.c:2853 elf32-m68k.c:4632
-msgid "unsupported reloc type"
-msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+#: coffcode.h:4304
+#, c-format
+msgid "%pB: warning: line number table read failed"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ"
 
-#: 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:4338 coffcode.h:4352
+#, c-format
+msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° 0x%lx Ñƒ ÑƒÐ½Ð¾Ñ�Ñƒ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° %d"
 
-#: coff-or32.c:216
-msgid "Unrecognized reloc"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: coffcode.h:4366
+#, c-format
+msgid "%pB: warning: illegal symbol in line number entry %d"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñƒ ÑƒÐ½Ð¾Ñ�Ñƒ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° %d"
 
-#: coff-rs6000.c:2802
+#: coffcode.h:4379
 #, c-format
-msgid "%s: unsupported relocation type 0x%02x"
-msgstr "%s: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%02x"
+msgid "%pB: warning: duplicate line number information for `%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¾ Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ€ÐµÐ´Ð° Ð·Ð° â€ž%sâ€œ"
 
-#: coff-rs6000.c:2887
+#: coffcode.h:4800
 #, c-format
-msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry"
-msgstr "%s: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð° 0x%x Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ¾Ñ˜Ð¸ Ð½Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² ÑƒÐ½Ð¾Ñ�"
+msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° â€ž%dâ€œ Ð·Ð° â€ž%sâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
 
-#: coff-rs6000.c:3638 coff64-rs6000.c:2117
-msgid "%B: symbol `%s' has unrecognized smclas %d"
-msgstr "%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ ÐºÐ»Ð°Ñ�Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%dâ€œ"
+#: coffcode.h:4940
+#, c-format
+msgid "warning: %pB: local symbol `%s' has no section"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: coff-sh.c:506
+#: coffcode.h:5090
 #, c-format
-msgid "SH Error: unknown reloc type %d"
-msgstr "Ð“Ñ€ÐµÑˆÐºÐ° ÑˆÐºÐ¾Ñ™ÐºÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ %#<PRIx64>"
 
-#: coff-tic4x.c:184 coff-tic54x.c:279 coff-tic80.c:440
+#: coffgen.c:179 elf.c:1238
 #, c-format
-msgid "Unrecognized reloc type 0x%x"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° 0x%x"
+msgid "%pB: unable to initialize compress status for section %s"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ�Ð°Ð¶Ð¸Ð¼Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: coff-tic4x.c:227
+#: coffgen.c:203 elf.c:1249
 #, c-format
-msgid "%s: warning: illegal symbol index %ld in relocs"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ¸Ð¼Ð°"
+msgid "%pB: unable to initialize decompress status for section %s"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¸Ð²Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: coff-w65.c:355
+#: coffgen.c:1704
 #, c-format
-msgid "ignoring reloc %s\n"
-msgstr "Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ\n"
+msgid "%pB: bad string table size %<PRIu64>"
+msgstr "%pB: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %<PRIu64>"
 
-#: coffcode.h:1005
-msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žCOMDATâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð° Ñ�Ð° Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1923
+#: xcofflink.c:4512
+msgid "<corrupt>"
+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:1230
-msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s"
-msgstr "%B: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð—Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€žIMAGE_SCN_MEM_NOT_PAGEDâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+#: coffgen.c:2085
+#, c-format
+msgid "<corrupt info> %s"
+msgstr "<Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸> %s"
 
-#: coffcode.h:1297
-msgid "%B (%s): Section flag %s (0x%x) ignored"
-msgstr "%B (%s): Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (0x%x) Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
+#: coffgen.c:2676 elflink.c:14969 linker.c:2967
+msgid "%F%P: already_linked_table: %E\n"
+msgstr "%F%P: Ð²ÐµÑ›_Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð°_Ñ‚Ð°Ð±ÐµÐ»Ð°: %E\n"
 
-#: coffcode.h:2439
+#: coffgen.c:3017 elflink.c:13959
 #, c-format
-msgid "Unrecognized TI COFF target id '0x%x'"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð¸Ð´ â€žTI COFFâ€œ Ñ†Ð¸Ñ™Ð° â€ž0x%xâ€œ"
+msgid "removing unused section '%pA' in file '%pB'"
+msgstr "ÑƒÐºÐ»Ð°ÑšÐ°Ð¼ Ð½ÐµÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€ž%pBâ€œ"
 
-#: coffcode.h:2753
-msgid "%B: reloc against a non-existant symbol index: %ld"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›ÐµÐ³ Ð¸Ð½Ð´ÐµÐºÑ�Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: %ld"
+#: coffgen.c:3094 elflink.c:14176
+msgid "warning: gc-sections option ignored"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€žgcâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
 
-#: coffcode.h:3311
-msgid "%B: too many sections (%d)"
-msgstr "%B: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d)"
-
-#: coffcode.h:3729
-msgid "%B: section %s: string table overflow at offset %ld"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ñ�ÐºÐ¸ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %ld"
+#: cofflink.c:366
+#, c-format
+msgid "warning: symbol `%s' is both section and non-section"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: coffcode.h:4534
-msgid "%B: warning: line number table read failed"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ"
+#: cofflink.c:471 elf64-ia64-vms.c:5202 elflink.c:5200
+#, c-format
+msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ð¸Ð· â€ž%dâ€œ Ñƒ â€ž%dâ€œ Ð·Ð° â€ž%pBâ€œ"
 
-#: coffcode.h:4564
-msgid "%B: warning: illegal symbol index %ld in line numbers"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld Ñƒ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð¸Ð¼Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°"
+#: cofflink.c:2352
+#, c-format
+msgid "%pB: relocs in section `%pA', but it has no contents"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
 
-#: coffcode.h:4578
-msgid "%B: warning: duplicate line number information for `%s'"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ‚Ð°Ðº Ð¾ Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ€ÐµÐ´Ð° Ð·Ð° â€ž%sâ€œ"
+#: cofflink.c:2415 elflink.c:11299
+#, 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"
 
-#: coffcode.h:4978
-msgid "%B: Unrecognized storage class %d for %s symbol `%s'"
-msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° ÐºÐ»Ð°Ñ�Ð° Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° â€ž%dâ€œ Ð·Ð° â€ž%sâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: cofflink.c:2717
+#, c-format
+msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
+msgstr "%pB: %pA: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %#x > 0xffff"
 
-#: coffcode.h:5104
-msgid "warning: %B: local symbol `%s' has no section"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: cofflink.c:2725
+#, c-format
+msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pA: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: %#x > 0xffff"
 
-#: coffcode.h:5248
-msgid "%B: illegal relocation type %d at address 0x%lx"
-msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %d Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ 0x%lx"
+#: cofflink.c:3116
+#, c-format
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
 
-#: coffgen.c:179 elf.c:1030
-msgid "%B: unable to initialize compress status for section %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ�Ð°Ð¶Ð¸Ð¼Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+#: coffswap.h:799
+#, c-format
+msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
+msgstr "%pB: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%lx > 0xffff"
 
-#: coffgen.c:199 elf.c:1050
-msgid "%B: unable to initialize decompress status for section %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¾Ñ‡Ð½ÐµÐ¼ Ñ�Ñ‚Ð°ÑšÐµ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¸Ð²Ð°ÑšÐ° Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+#: compress.c:271
+#, c-format
+msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð°)"
 
-#: coffgen.c:1685
-msgid "%B: bad string table size %lu"
-msgstr "%B: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð½Ð¸Ð·Ð° %lu"
+#: compress.c:282
+#, c-format
+msgid "error: %pB(%pA) is too large (%#<PRIx64> bytes)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB(%pA) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%#<PRIx64> Ð±Ð°Ñ˜Ñ‚Ð°)"
 
-#: coffgen.c:2608 elflink.c:12906 linker.c:3136
-msgid "%F%P: already_linked_table: %E\n"
-msgstr "%F%P: Ð²ÐµÑ›_Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð°_Ñ‚Ð°Ð±ÐµÐ»Ð°: %E\n"
+#: 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 "Ð³Ñ€ÐµÑˆÐºÐ°: %pB Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° EP9312, Ð´Ð¾Ðº Ñ˜Ðµ %pB Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ð·Ð° â€žXScaleâ€œ"
 
-#: 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â€œ"
+#: cpu-arm.c:455
+#, c-format
+msgid "warning: unable to update contents of %s section in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž%sâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ %pB"
 
-#: cofflink.c:2416
-msgid "%B: relocs in section `%A', but it has no contents"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%Aâ€œ, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
+#: dwarf2.c:553
+#, c-format
+msgid "DWARF error: can't find %s section."
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ."
 
-#: 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"
+#. PR 26946
+#: dwarf2.c:564
+#, c-format
+msgid "DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ�Ð²Ð¾Ñ˜Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ! (0x%lx vs 0x%lx)"
 
-#: cofflink.c:2777 coffswap.h:826
+#: dwarf2.c:599
 #, c-format
-msgid "%s: %s: reloc overflow: 0x%lx > 0xffff"
-msgstr "%s: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%lx > 0xffff"
+msgid "DWARF error: offset (%<PRIu64>) greater than or equal to %s size (%<PRIu64>)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%<PRIu64>) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¸Ð»Ð¸ Ñ˜ÐµÐ´Ð½Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%<PRIu64>)"
+
+#: dwarf2.c:1186
+msgid "DWARF error: info pointer extends beyond end of attributes"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð½Ñ„Ð¾ ÑƒÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ ÐºÑ€Ð°Ñ˜ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°"
 
-#: cofflink.c:2786 coffswap.h:812
+#: dwarf2.c:1365
 #, c-format
-msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
+msgid "DWARF error: invalid or unhandled FORM value: %#x"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žFORMâ€œ: %#x"
+
+#: dwarf2.c:1678
+msgid "DWARF error: mangled line number section (bad file number)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½ (Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ)"
 
-#: 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"
+#: dwarf2.c:2026
+msgid "DWARF error: zero format count"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÑƒÐ»Ñ‚Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°"
 
-#: cpu-arm.c:334
+#: dwarf2.c:2036
 #, c-format
-msgid "warning: unable to update contents of %s section in %s"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž%sâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œ"
+msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%<PRIx64>) Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ"
 
-#: dwarf2.c:514
+#: dwarf2.c:2077
 #, c-format
-msgid "Dwarf Error: Can't find %s section."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ."
+msgid "DWARF error: unknown format content type %<PRIu64>"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° â€ž%<PRIu64>â€œ"
+
+#: dwarf2.c:2150
+#, c-format
+msgid "DWARF error: line info section is too small (%<PRId64>)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ (%<PRId64>)"
 
-#: dwarf2.c:543
+#: dwarf2.c:2180
 #, c-format
-msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜ (%lu) Ñ˜Ðµ >= Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ %s (%lu)."
+msgid "DWARF error: line info data is bigger (%#<PRIx64>) than the space remaining in the section (%#lx)"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ (%#<PRIx64>) Ð¾Ð´ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ (%#lx)"
 
-#: dwarf2.c:1071
+#: dwarf2.c:2193
 #, c-format
-msgid "Dwarf Error: Invalid or unhandled FORM value: %#x."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žFORMâ€œ: %#x."
+msgid "DWARF error: unhandled .debug_line version %d"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ â€ž.debug_lineâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
 
-#: dwarf2.c:1332
-msgid "Dwarf Error: mangled line number section (bad file number)."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð‘Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½ (Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ)."
+#: dwarf2.c:2203
+msgid "DWARF error: ran out of room reading prologue"
+msgstr "â€žDWARFÐ´ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñ‡Ð¸Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¿Ñ€Ð¾Ð»Ð¾Ð³"
 
-#: dwarf2.c:1590
+#: dwarf2.c:2221
 #, c-format
-msgid "Dwarf Error: Unhandled .debug_line version %d."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ â€ž.debug_lineâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d."
+msgid "DWARF error: line info unsupported segment selector size %u"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¸Ð·Ð±Ð¸Ñ€Ð°Ñ‡Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ€ÐµÐ´Ð° %u"
+
+#: dwarf2.c:2248
+msgid "DWARF error: invalid maximum operations per instruction"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð° Ð¿Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸"
+
+#: dwarf2.c:2267
+msgid "DWARF error: ran out of room reading opcodes"
+msgstr "â€žDWARFÐ´ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñ‡Ð¸Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ð¾Ð¿ÐºÐ¾Ð´Ð¾Ð²Ðµ"
+
+#: dwarf2.c:2458
+msgid "DWARF error: mangled line number section"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½"
+
+#: dwarf2.c:2956
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ±Ð°Ñ‡ÐµÑšÐµ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¾Ð³ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ÐºÐ° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾"
 
-#: dwarf2.c:1612
-msgid "Dwarf Error: Invalid maximum operations per instruction."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð±Ñ€Ð¾Ñ˜ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ð° Ð¿Ð¾ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¸."
+#: dwarf2.c:2990 dwarf2.c:3084
+msgid "DWARF error: invalid abstract instance DIE ref"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð°Ð½ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ"
 
-#: dwarf2.c:1807
-msgid "Dwarf Error: mangled line number section."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð‘Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ð´Ñ�ÐµÑ‡ÐµÐ½."
+#: dwarf2.c:3006
+#, c-format
+msgid "DWARF error: unable to read alt ref %<PRIu64>"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %<PRIu64>"
+
+#: dwarf2.c:3062
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ Ð°Ð¿Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ðº â€žDIEâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ %<PRIu64>"
 
-#: dwarf2.c:2160
+#: dwarf2.c:3101 dwarf2.c:3384 dwarf2.c:3771
 #, c-format
-msgid "Dwarf Error: Unable to read alt ref %u."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žaltâ€œ ÑƒÐ¿ÑƒÑ‚Ñƒ %u."
+msgid "DWARF error: could not find abbrev number %u"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜ %u"
 
-#: dwarf2.c:2179 dwarf2.c:2299 dwarf2.c:2595
+#: dwarf2.c:3534
 #, c-format
-msgid "Dwarf Error: Could not find abbrev number %u."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜ %u."
+msgid "DWARF error: could not find variable specification at offset %lx"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´Ñ€ÐµÐ´Ð±Ñƒ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ðµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ %lx"
 
-#: dwarf2.c:2551
+#: dwarf2.c:3690
 #, 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: 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:2560
+#: dwarf2.c:3734
 #, 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: found address size '%u', this reader can not handle sizes greater than '%u'"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ð°Ñ’Ð¾Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%uâ€œ, Ð¾Ð²Ð°Ñ˜ Ñ‡Ð¸Ñ‚Ð°Ñ‡ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ€Ð°Ð´Ð¸ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°Ð¼Ð° Ð²ÐµÑ›Ð¸Ð¼ Ð¾Ð´ â€ž%uâ€œ"
+
+#: dwarf2.c:3838
+msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"
+msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ð° â€žDW_AT_comp_dirâ€œ Ñ˜Ðµ Ð½Ð°Ñ’ÐµÐ½Ð° Ñ�Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð¾Ð¼ Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµ"
 
-#: dwarf2.c:2586
+#: ecoff.c:941
 #, c-format
-msgid "Dwarf Error: Bad abbrev number: %u."
-msgstr "â€žDWARFâ€œ Ð³Ñ€ÐµÑˆÐºÐ°: Ð›Ð¾Ñˆ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¸ Ð±Ñ€Ð¾Ñ˜: %u."
+msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žisymMaxâ€œ (%ld) Ñ˜Ðµ Ð²ÐµÑ›Ðµ Ð¾Ð´ â€žifdMaxâ€œ (%ld)"
 
-#: ecoff.c:1233
+#: ecoff.c:1237
 #, c-format
-msgid "Unknown basic type %d"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ"
+msgid "unknown basic type %d"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ"
 
-#: ecoff.c:1490
+#: ecoff.c:1493
 #, c-format
 msgid ""
 "\n"
@@ -597,7 +703,7 @@ msgstr ""
 "\n"
 "      ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1497 ecoff.c:1500
+#: ecoff.c:1500 ecoff.c:1503
 #, c-format
 msgid ""
 "\n"
@@ -606,7 +712,7 @@ msgstr ""
 "\n"
 "      ÐŸÑ€Ð²Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1512
+#: ecoff.c:1518
 #, c-format
 msgid ""
 "\n"
@@ -615,7 +721,7 @@ msgstr ""
 "\n"
 "      ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %-7ld   Ð’Ñ€Ñ�Ñ‚Ð°:  %s"
 
-#: ecoff.c:1519
+#: ecoff.c:1526
 #, c-format
 msgid ""
 "\n"
@@ -624,7 +730,7 @@ msgstr ""
 "\n"
 "      Ð›Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1527
+#: ecoff.c:1534
 #, c-format
 msgid ""
 "\n"
@@ -633,7 +739,7 @@ msgstr ""
 "\n"
 "      struct; ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1532
+#: ecoff.c:1539
 #, c-format
 msgid ""
 "\n"
@@ -642,7 +748,7 @@ msgstr ""
 "\n"
 "      union; ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1537
+#: ecoff.c:1544
 #, c-format
 msgid ""
 "\n"
@@ -651,7 +757,7 @@ msgstr ""
 "\n"
 "      enum; ÐŸÐ¾Ñ�Ð»ÐµÐ´ÑšÐ¸+1 Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %ld"
 
-#: ecoff.c:1543
+#: ecoff.c:1552
 #, c-format
 msgid ""
 "\n"
@@ -660,138 +766,314 @@ 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:449
+#, c-format
+msgid "%pB: error: attribute section '%pA' too big: %#llx"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº: %#llx"
+
+#: elf-attrs.c:490
+#, c-format
+msgid "%pB: error: attribute section length too small: %<PRId64>"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¾Ñ�Ð¾Ð±Ð¸Ð½Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°: %<PRId64>"
+
+#: elf-attrs.c:618
+#, c-format
+msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð¸Ð¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¿Ñ€Ð¾Ð´Ð°Ð²Ñ†Ñƒ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ ÐºÐ¾Ñ˜Ð¸ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð°Ð»Ð°Ñ‚Ð½Ð¸Ð¼ Ð»Ð°Ð½Ñ†ÐµÐ¼ â€ž%sâ€œ"
+
+#: elf-attrs.c:628
+#, 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
+#, c-format
+msgid "discarding zero address range FDE in %pB(%pA).\n"
+msgstr "Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð½ÑƒÐ»Ñ‚Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ Ð°Ð´Ñ€ÐµÑ�Ðµ â€žFDEâ€œ Ñƒ â€ž%pB(%pA)â€œ.\n"
+
+#: elf-eh-frame.c:1049
+#, 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
+#, 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
+msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
+msgstr "Ð±ÑƒÐ´ÑƒÑ›Ð° ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐ° Ð¾ â€žFDEâ€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÑƒ Ñ�Ð¿Ñ€ÐµÑ‡Ð°Ð²Ð° Ð¾Ð´Ð±Ð°Ñ†Ð¸Ð²Ð°ÑšÐµ â€ž.eh_frame_hdrâ€œ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ˜Ðµ"
+
+#: elf-eh-frame.c:1866
+#, c-format
+msgid "%pB: %pA not in order"
+msgstr "%pB: â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ"
+
+#: elf-eh-frame.c:1880
+#, c-format
+msgid "%pB: %pA invalid input section size"
+msgstr "%pB: â€ž%pAâ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº ÑƒÐ»Ð°Ð·Ð°"
+
+#: elf-eh-frame.c:1888
+#, c-format
+msgid "%pB: %pA points past end of text section"
+msgstr "%pB: â€ž%pAâ€œ Ñ‚Ð°Ñ‡Ð°ÐºÐ° Ð¿Ñ€ÐµÐ»Ð°Ð·Ð¸ ÐºÑ€Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ‚ÐµÐºÑ�Ñ‚Ð°"
+
+#: elf-eh-frame.c:2141
+msgid "DW_EH_PE_datarel unspecified for this architecture"
+msgstr "â€žDW_EH_PE_datarelâ€œ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð·Ð° Ð¾Ð²Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
+
+#: elf-eh-frame.c:2312
+#, c-format
+msgid "invalid output section for .eh_frame_entry: %pA"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° â€ž.eh_frame_entryâ€œ: %pA"
+
+#: elf-eh-frame.c:2335
+#, c-format
+msgid "invalid contents in %pA section"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
+
+#: elf-eh-frame.c:2491
+msgid ".eh_frame_hdr entry overflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€ž.eh_frame_hdrâ€œ ÑƒÐ½Ð¾Ñ�Ð°"
+
+#: elf-eh-frame.c:2493
+msgid ".eh_frame_hdr refers to overlapping FDEs"
+msgstr "â€ž.eh_frame_hdrâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°Ñ˜ÑƒÑ›Ðµ â€žFDEâ€œ-Ð¾Ð²Ðµ"
+
+#: 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: Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ�Ð° Ñ˜ÐµÐ´Ð½Ð°ÐºÐ¾ÑˆÑ›Ñƒ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ñƒ â€ž%pBâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ; Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-fPIEâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ñ�Ð° â€ž-pieâ€œ\n"
+
+#: elf-m10200.c:434 elf-m10300.c:2146 elf32-avr.c:1508 elf32-bfin.c:3130
+#: 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:494
+#: 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:1272 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:1815 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 "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: 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-avr.c:1512 elf32-bfin.c:3134
+#: 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:498 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
+#: elf32-m68hc1x.c:1276 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:1819 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:10554
+#: 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:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1280
+#: 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 "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° Ð¾Ð¿Ð°Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: 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-avr.c:1520 elf32-bfin.c:3142
+#: 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:506
+#: 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:1284 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:1827
+#: 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 "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
 
-#: elf-m10300.c:1021
+#: elf-m10300.c:1030
 #, c-format
-msgid "%s: Unsupported transition from %s to %s"
-msgstr "%s: ÐŸÑ€ÐµÐ»Ð°Ð·Ð°Ðº Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½"
+msgid "%pB: unsupported transition from %s to %s"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ð¿Ñ€ÐµÐ»Ð°Ð·Ð°Ðº Ñ�Ð° â€ž%sâ€œ Ð½Ð° â€ž%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:1197
+#, c-format
+msgid "%pB: %s' accessed both as normal and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
 
-#: elf-m10300.c:2173
+#: elf-m10300.c:2093 elf32-arm.c:13396 elf32-i386.c:3403 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4062
+#: 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>): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: 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:2489 elf32-frv.c:5622 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8271 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.c:1174
+#: elf-properties.c:186
+#, 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
+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
+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:394
+msgid "Removed property %W to merge %pB and %pB\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ\n"
+
+#: elf-properties.c:320
+msgid "Removed property %W to merge %pB and %pB (not found)\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾)\n"
+
+#: elf-properties.c:337
+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:346
+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:388
+msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
+msgstr "Ð£ÐºÐ»Ð¾ÑšÐµÐ½Ð¾ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ â€ž%Wâ€œ Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%pBâ€œ (Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾) Ð¸ â€ž%pBâ€œ (0x%v)\n"
+
+#. Merge .note.gnu.property sections.
+#: elf-properties.c:550 elf-properties.c:552
+msgid "\n"
+msgstr "\n"
+
+#: elf-properties.c:551
+msgid "Merging program properties\n"
+msgstr "Ð¡Ñ‚Ð°Ð¿Ð°Ð¼ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°\n"
+
+#. PR 17512: file: f057ec89.
+#: elf.c:337
+#, c-format
+msgid "%pB: attempt to load strings from a non-string section (number %d)"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð¼ Ð½Ð¸Ñ�ÐºÐµ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ðµ-Ð½Ð¸Ñ�ÐºÐµ (Ð±Ñ€Ð¾Ñ˜ %d)"
+
+#: elf.c:362
+#, c-format
+msgid "%pB: invalid string offset %u >= %<PRIu64> for section `%s'"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ñ�ÐºÐµ â€ž%u >= %<PRIu64>â€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#: elf.c:514 elfnn-aarch64.c:8096
+#, c-format
+msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr "â€ž%pBâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð±Ñ€Ð¾Ñ˜ %lu ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ñ�Ñ‚Ð¾Ñ˜ÐµÑ›Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žSHT_SYMTAB_SHNDXâ€œ"
+
+#: elf.c:676
+#, c-format
+msgid "%pB: invalid size field in group section header: %#<PRIx64>"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ: %#<PRIx64>"
+
+#: elf.c:721
+#, c-format
+msgid "%pB: invalid entry in SHT_GROUP section [%u]"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ� Ñƒ â€žSHT_GROUPâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ [%u]"
+
+#: elf.c:740
+#, c-format
+msgid "%pB: no valid group sections found"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ð¾Ð´ÐµÑ™ÐºÐµ Ð³Ñ€ÑƒÐ¿Ðµ"
+
+#. See PR 21957 for a reproducer.
+#: elf.c:769
+#, c-format
+msgid "%pB: group section '%pA' has no contents"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº Ð³Ñ€ÑƒÐ¿Ðµ â€ž%pAâ€œ Ð½ÐµÐ¼Ð° Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾Ð³ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°"
+
+#: elf.c:830
+#, c-format
+msgid "%pB: no group info for section '%pA'"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð³Ñ€ÑƒÐ¿Ðµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: elf.c:878
+#, c-format
+msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
+msgstr "%pB: â€žsh_link [%d]â€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾"
+
+#: elf.c:891
+#, c-format
+msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"
+msgstr "%pB: â€žSHT_GROUPâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº [Ð¸Ð½Ð´ÐµÐºÑ� %d] Ð½ÐµÐ¼Ð° â€žSHF_GROUPâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ"
+
+#: elf.c:912
+#, c-format
+msgid "%pB: section group entry number %u is corrupt"
+msgstr "%pB: Ð±Ñ€Ð¾Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° ÑƒÐ½Ð¾Ñ�Ð° Ð³Ñ€ÑƒÐ¿Ðµ %u Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½"
+
+#: elf.c:935
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° [%#x] Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ Ð³Ñ€ÑƒÐ¿Ð¸ [%pA]"
+
+#: 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:1655
 #, c-format
 msgid ""
 "\n"
@@ -800,7 +1082,7 @@ msgstr ""
 "\n"
 "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°:\n"
 
-#: elf.c:1216
+#: elf.c:1697
 #, c-format
 msgid ""
 "\n"
@@ -809,7 +1091,7 @@ msgstr ""
 "\n"
 "Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº:\n"
 
-#: elf.c:1352
+#: elf.c:1838
 #, c-format
 msgid ""
 "\n"
@@ -818,7 +1100,7 @@ msgstr ""
 "\n"
 "Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¸Ð·Ð´Ð°ÑšÐ°:\n"
 
-#: elf.c:1377
+#: elf.c:1863
 #, c-format
 msgid ""
 "\n"
@@ -827,1797 +1109,2493 @@ msgstr ""
 "\n"
 "Ð£Ð¿ÑƒÑ‚Ð° Ð¸Ð·Ð´Ð°ÑšÐ°:\n"
 
-#: elf.c:1382
+#: elf.c:1868
 #, 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:2058
+#, c-format
+msgid "%pB: warning: loop in section dependencies detected"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿ÐµÑ‚Ñ™Ð° Ñƒ Ð·Ð°Ð²Ð¸Ñ�Ð½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð°"
+
+#: elf.c:2165
+#, c-format
+msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð²Ð¸ÑˆÐµ Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ %u"
 
-#: 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:2249
+#, c-format
+msgid "%pB: warning: multiple dynamic 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:2362
+#, c-format
+msgid "%pB: invalid link %u for reloc section %s (index %u)"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ·Ð° â€ž%uâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ (Ð¸Ð½Ð´ÐµÐºÑ� â€ž%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:2453
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ð°Ñ’Ð¾Ñ… Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ â€“ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼"
 
-#: elf.c:2010
-msgid "%B: don't know how to handle section `%s' [0x%8x]"
-msgstr "%B: Ð½Ðµ Ð·Ð½Ð°Ð¼ ÐºÐ°ÐºÐ¾ Ð´Ð° Ð¾Ð±Ñ€Ð°Ð´Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ [0x%8x]"
+#: elf.c:2537 elf.c:2552 elf.c:2563 elf.c:2576
+#, c-format
+msgid "%pB: unknown type [%#x] section `%s'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° [%#x] Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
 
-#: elf.c:2648
+#: elf.c:3272
 #, c-format
-msgid "warning: section `%A' type changed to PROGBITS"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° â€ž%Aâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ñƒ â€žPROGBITSâ€œ"
+msgid "%pB: error: alignment power %d of section `%pA' is too big"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð½Ð°Ð³Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ° %d Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°"
 
-#: elf.c:3015
-msgid "%B: too many sections: %u"
-msgstr "%B: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u"
+#: elf.c:3305
+#, c-format
+msgid "warning: section `%pA' type changed to PROGBITS"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²Ñ€Ñ�Ñ‚Ð° â€ž%pAâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð° Ñƒ â€žPROGBITSâ€œ"
 
-#: 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:3789
+#, c-format
+msgid "%pB: too many sections: %u"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %u"
 
-#: 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:3875
+#, 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:4126
-msgid "%B: TLS sections are not adjacent:"
-msgstr "%B: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:"
+#: elf.c:3893
+#, 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:4133
+#: elf.c:4455
 #, c-format
-msgid "\t    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:4137
+#: elf.c:5049
 #, c-format
-msgid "\tnon-TLS: %A"
-msgstr "\tÐ½Ðµ-Ð¢Ð›Ð¡: %A"
+msgid "%pB: TLS sections are not adjacent:"
+msgstr "%pB: Ð¢Ð›Ð¡ Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð½Ð¸Ñ�Ñƒ Ñ�ÑƒÑ�ÐµÐ´Ð½Ð¸:"
 
-#: 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:5056
+#, c-format
+msgid "\t    TLS: %pA"
+msgstr "\t    Ð¢Ð›Ð¡: %pA"
 
-#: elf.c:4621
-msgid "%B: Not enough room for program headers, try linking with -N"
-msgstr "%B: Ð�ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð·Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÑ‚Ðµ Ñ�Ð° â€ž-Nâ€œ"
+#: elf.c:5060
+#, c-format
+msgid "\tnon-TLS: %pA"
+msgstr "\tÐ½Ðµ-Ð¢Ð›Ð¡: %pA"
 
-#: elf.c:4707
-msgid "%B: section %A lma %#lx adjusted to %#lx"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%A lma %#lxâ€œ Ñ˜Ðµ Ð´Ð¾Ñ‚ÐµÑ€Ð°Ð½ Ð½Ð° %#lx"
+#: elf.c:5656
+#, c-format
+msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
+msgstr "%pB: ÐŸÑ€Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ â€žPT_DYNAMICâ€œ Ð½Ð¸Ñ˜Ðµ â€ž.dynamicâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: elf.c:4843
-msgid "%B: section `%A' can't be allocated in segment %d"
-msgstr "%B: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð´ÐµÐ»Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ %d"
+#: elf.c:5682
+#, c-format
+msgid "%pB: not enough room for program headers, try linking with -N"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð° Ð·Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÑ‚Ðµ Ñ�Ð° â€ž-Nâ€œ"
 
-#: elf.c:4892
-msgid "%B: warning: allocated section `%s' not in segment"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ"
+#: elf.c:5799
+#, c-format
+msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pA lma %#<PRIx64>â€œ Ñ˜Ðµ Ð´Ð¾Ñ‚ÐµÑ€Ð°Ð½ Ð½Ð° %#<PRIx64>"
 
-#: elf.c:5473
-msgid "%B: symbol `%s' required but not present"
-msgstr "%B: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð°Ð½"
+#. 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:5936
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žPHDRâ€œ Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²ÐµÐ½ â€žLOADâ€œ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ¾Ð¼"
 
-#: elf.c:5811
-msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n"
-msgstr "%B: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸, Ð´Ð° Ð»Ð¸ Ñ˜Ðµ Ñ‚Ð¾ Ð½Ð°Ð¼ÐµÑ€Ð°Ð²Ð°Ð½Ð¾ ?\n"
+#: elf.c:5976
+#, c-format
+msgid "%pB: section `%pA' can't be allocated in segment %d"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð¾Ð´ÐµÐ»Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ %d"
 
-#: elf.c:6867
+#: elf.c:6113
 #, c-format
-msgid "Unable to find equivalent output section for symbol '%s' from section '%s'"
-msgstr "Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÐµÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ‚Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+msgid "%pB: warning: allocated section `%s' not in segment"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¿Ð¾Ð´ÐµÐ¾ÐºÑƒ"
 
-#: elf.c:7915
-msgid "%B: unsupported relocation type %s"
-msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° %s Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+#: elf.c:6274
+#, c-format
+msgid "%pB: error: non-load segment %d includes file header and/or program header"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´ÐµÐ¾Ðº Ð½Ðµ-ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° %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:6778
+#, c-format
+msgid "%pB: symbol `%s' required but not present"
+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:7130
+#, c-format
+msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¿Ð¾Ð´ÐµÐ¾Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ ÑƒÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð½Ð° â€žvaddr=%#<PRIx64>â€œ, Ð´Ð° Ð»Ð¸ Ñ˜Ðµ Ñ‚Ð¾ Ð½Ð°Ð¼ÐµÑ€Ð°Ð²Ð°Ð½Ð¾?"
+
+#: elf.c:7758
+#, c-format
+msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° Ð·Ð° â€ž%#<PRIx64>â€œ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾"
+
+#: elf.c:8271
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€ÑƒÐºÑƒÑ˜ÐµÐ¼ Ñ�Ð° Ð¸Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÐ° %x Ñƒ Ð•Ð›Ð¤ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ.  ÐšÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ›Ñƒ â€žABSâ€œ."
+
+#: elf.c:8301
+#, c-format
+msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ ÐµÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ‚Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¸Ð·Ð»Ð°Ð·Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð· Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+
+#: elf.c:8714
+#, c-format
+msgid "%pB: .gnu.version_r invalid entry"
+msgstr "%pB: â€ž.gnu.version_râ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ�"
+
+#: elf.c:8847
+#, c-format
+msgid "%pB: .gnu.version_d invalid entry"
+msgstr "%pB: â€ž.gnu.version_dâ€œ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ ÑƒÐ½Ð¾Ñ�"
+
+#: elf.c:9304
+#, c-format
+msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¸ÑˆÐµÐ¼ Ñƒ Ð½ÐµÐ´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ñ�Ð°Ð¶ÐµÑ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+
+#: elf.c:9313
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ°"
+
+#: elf.c:9324
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° ÑƒÐ¿Ð¸ÑˆÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ Ð¿Ñ€Ð°Ð·Ð½Ñƒ Ð¼ÐµÑ’ÑƒÐ¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ"
+
+#: elf.c:10182
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žwin32pstatus %sâ€œ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ %lu Ð±Ð°Ñ˜Ñ‚Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¼Ð°Ð»Ð¾"
+
+#: elf.c:10260
+#, 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:12488
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "â€žGNU_MBINDâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:12491
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€žSTT_GNU_IFUNCâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:12494
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "Ñ�Ð²ÐµÐ·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€žSTB_GNU_UNIQUEâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:12497
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "â€žGNU_RETAINâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð°Ð¼Ð¾ Ð“Ð½Ñƒ Ð¸ Ð¤Ñ€Ð¸Ð‘Ð¡Ð” Ð¼ÐµÑ‚Ð°Ð¼Ð°"
+
+#: elf.c:12691 elf64-sparc.c:123 elfcode.h:1504
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%dâ€œ Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° %ld"
+
+#: elf.c:12766
+#, 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:12778
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½"
+
+#: elf.c:12792
+#, c-format
+msgid "%pB(%pA): info section index cannot be set because the section is not in the output"
+msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð´ÐµÑ�Ð¸Ñ‚Ð¸ Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½Ð¸Ñ˜Ðµ Ñƒ Ð¸Ð·Ð»Ð°Ð·Ñƒ"
+
+#: elf.c:12867
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ñ˜Ðµ Ð¾Ð±Ñ€Ð°Ñ’ÐµÐ½ Ð´Ð²Ð° Ð¿ÑƒÑ‚Ð°"
+
+#: elf.c:12879
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð¸Ð¼Ð° ÑƒÐ½Ð¾Ñ�Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elf.c:12890
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð¸Ð¼Ð° ÑƒÐ½Ð¾Ñ�Ðµ Ð½ÐµÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elf.c:12902
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½!"
+
+#: elf.c:12925
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð¸ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ñƒ Ð·Ð° Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð°"
+
+#: elf.c:12944
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜Ð° %u Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð°Ð½"
+
+#: elf.c:12969
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %u ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜ÑƒÑ›Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+
+#: elf.c:12986
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÑˆÑ‚Ð°Ñ˜ %u ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð±Ñ€Ð¸Ñ�Ð°Ð½ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
+
+#: elf.c:12999
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�ÐµÐºÑƒÐ½Ð´Ð°Ñ€Ð½Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°Ñ˜ %u Ñ˜Ðµ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15065 elf32-frv.c:6613 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3206
+#: elf32-visium.c:844 elf64-ppc.c:5336 elfnn-aarch64.c:7334
+#, 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-arm.c:3988 elf32-arm.c:5433
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:2324
+#: elf32-arc.c:722
 #, c-format
-msgid "%s: cannot create stub entry %s"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð¿Ñ€Ð¸Ð²Ð¸Ð´Ð½Ð¸ ÑƒÐ½Ð¾Ñ� â€ž%sâ€œ"
+msgid "error: %pB: conflicting ISA extension attributes %s with %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œ"
 
-#: elf32-arm.c:5549
+#: elf32-arc.c:762
 #, c-format
-msgid "unable to find THUMB glue '%s' for '%s'"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žTHUMBâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "error: %pB: cannot mix rf16 with full register set %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žrf16â€œ Ñ�Ð° Ð¿ÑƒÐ½Ð¸Ð¼ Ñ�ÐºÑƒÐ¿Ð¾Ð¼ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° â€ž%pBâ€œ"
 
-#: elf32-arm.c:5585
+#: elf32-arc.c:790
 #, c-format
-msgid "unable to find ARM glue '%s' for '%s'"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ð½Ð°Ñ’ÐµÐ¼ â€žARMâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+msgid "error: %pB: conflicting attributes %s: %s with %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�ÑƒÐºÐ¾Ð± Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° â€ž%sâ€œ: â€ž%sâ€œ Ñ�Ð° â€ž%sâ€œ"
 
-#: elf32-arm.c:6123
-msgid "%B: BE8 images only valid in big-endian mode."
-msgstr "%B: â€žBE8â€œ Ñ�Ð»Ð¸ÐºÐµ Ñ�Ñƒ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ðµ Ñ�Ð°Ð¼Ð¾ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸."
+#: 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:1391
+#: elf32-ppc.c:3869 elf64-sparc.c:722 elfxx-mips.c:15492
+#, 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:1885
+msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker"
+msgstr "â€žGOTâ€œ Ð¸ â€žPLTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð¿Ð¾Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ Ñ�Ð° Ð½Ðµ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ð¼ ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ÐµÐ¼"
+
+#: 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): ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð¸ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿ ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ð¸ Ð¼Ð°Ð»Ð¸Ñ… Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+
+#: 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): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: 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): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490
+#, c-format
+msgid "%pB(%pA): internal error: dangerous relocation"
+msgstr "%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495
+#, c-format
+msgid "%pB(%pA): internal error: unknown error"
+msgstr "%pB(%pA): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
+
+#: elf32-arc.c:2023 elf32-arc.c:2091 elf32-arm.c:15509 elf32-metag.c:2251
+#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:614
+#, 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:2910
+#, c-format
+msgid "%pB: unknown mandatory ARC object attribute %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ð°Ð²ÐµÐ·Ð½Ð¾Ð³ â€žARCâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elf32-arc.c:2918
+#, c-format
+msgid "warning: %pB: unknown ARC object attribute %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€ž%dâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° â€žARCâ€œ"
+
+#: elf32-arm.c:4318 elf32-arm.c:4352 elf32-arm.c:4371 elf32-arm.c:4423
+#, 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:4383 elf32-arm.c:4437 elf32-arm.c:9127 elf32-arm.c:9217
+#, 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:4563
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "Ð“Ð Ð•Ð¨ÐšÐ�: â€žCMSEâ€œ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº (Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ) Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾ (%#<PRIx64>) Ð¾Ð´ Ð¿Ð´Ñ€ÐµÐ´Ð¸ÑˆÑ‚Ð° (%#<PRIx64>)"
+
+#: elf32-arm.c:4732
+#, c-format
+msgid "no address assigned to the veneers output section %s"
+msgstr "Ð½Ð¸Ñ˜ÐµÐ´Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
+
+#: elf32-arm.c:4807 elf32-arm.c:6954 elf32-csky.c:3368 elf32-hppa.c:582
+#: elf32-m68hc1x.c:165 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3817
+#: elf64-ppc.c:13603 elfnn-aarch64.c:3187
+#, c-format
+msgid "%pB: cannot create stub entry %s"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
+
+#: elf32-arm.c:5028 elf32-csky.c:3710 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11430
+#: 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: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ â€ž%pAâ€œ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ. ÐŸÐ¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð±ÐµÐ· â€ž--enable-non-contiguous-regionsâ€œ.\n"
+
+#: elf32-arm.c:5998
+#, c-format
+msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
+msgstr "%pB: Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñ�Ð°Ð¼Ð¾ Ð·Ð° â€žARMv8-Mâ€œ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ Ð¸Ð»Ð¸ Ð½Ð¾Ð²Ð¸Ñ˜Ñƒ"
+
+#: elf32-arm.c:6007
+#, c-format
+msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ; Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð°Ð±Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ"
+
+#: elf32-arm.c:6046
+#, c-format
+msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ; Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¾Ð¿ÑˆÑ‚Ð¸ Ð¸Ð»Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð°Ð±Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ"
+
+#: elf32-arm.c:6052
+#, c-format
+msgid "%pB: absent standard symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elf32-arm.c:6064
+#, c-format
+msgid "%pB: `%s' and its special symbol are in different sections"
+msgstr "%pB: â€ž%sâ€œ Ð¸ ÑšÐµÐ½ Ñ�Ð¿ÐµÑ†Ð¸Ñ˜Ð°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ñƒ Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ñ†Ð¸Ð¼Ð°"
+
+#: elf32-arm.c:6076
+#, c-format
+msgid "%pB: entry function `%s' not output"
+msgstr "%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ð·Ð»Ð°Ð·"
+
+#: elf32-arm.c:6083
+#, c-format
+msgid "%pB: entry function `%s' is empty"
+msgstr "%pB: Ñ„ÑƒÐ½ÐºÑ†Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¿Ñ€Ð°Ð·Ð½Ð°"
+
+#: elf32-arm.c:6212
+#, c-format
+msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
+msgstr "%pB: â€ž--in-implibâ€œ Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ñ�Ð°Ð¼Ð¾ Ð·Ð° â€žSecure Gatewayâ€œ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ½Ð¾Ñ�Ð°"
+
+#: elf32-arm.c:6261
+#, 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:6283
+#, c-format
+msgid "entry function `%s' disappeared from secure code"
+msgstr "Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ñ‚Ð°Ð»Ð° Ð¸Ð· Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ð³ ÐºÐ¾Ð´Ð°"
+
+#: elf32-arm.c:6307
+#, c-format
+msgid "`%s' refers to a non entry function"
+msgstr "â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð½Ðµ ÑƒÐ»Ð°Ð·Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ"
+
+#: elf32-arm.c:6322
+#, c-format
+msgid "%pB: visibility of symbol `%s' has changed"
+msgstr "%pB: Ð²Ð¸Ð´Ñ™Ð¸Ð²Ð¾Ñ�Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ Ñ˜Ðµ Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð°"
+
+#: elf32-arm.c:6331
+#, c-format
+msgid "%pB: incorrect size for symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elf32-arm.c:6350
+#, c-format
+msgid "offset of veneer for entry function `%s' not a multiple of its size"
+msgstr "Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐµ Ð·Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ ÑƒÐ½Ð¾Ñ�Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÐ¼Ð½Ð¾Ð¶Ð°Ðº Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+
+#: elf32-arm.c:6370
+msgid "new entry function(s) introduced but no output import library specified:"
+msgstr "Ð½Ð¾Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚Ð¸Ð³Ð»Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾ ÑƒÐ»Ð°Ð·Ð½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°:"
+
+#: elf32-arm.c:6378
+#, c-format
+msgid "start address of `%s' is different from previous link"
+msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð° â€ž%sâ€œ Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ðµ Ð²ÐµÐ·Ðµ"
+
+#: elf32-arm.c:7087 elf32-arm.c:7122
+#, c-format
+msgid "unable to find %s glue '%s' for '%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€ž%sâ€œ Ð»ÐµÐ¿Ð°Ðº â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+
+#: elf32-arm.c:7833
+#, 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:6897 elf32-arm.c:6917
-msgid "%B: unable to find VFP11 veneer `%s'"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ â€ž%sâ€œ"
-
-#: elf32-arm.c:6966
-#, c-format
-msgid "Invalid TARGET2 relocation type '%s'."
-msgstr "Ð�ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žTARGET2â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%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:8060
+#, c-format
+msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žVFP11â€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
+
+#: elf32-arm.c:8087
+#, c-format
+msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ð¾ Ñ€ÐµÑˆÐµÑšÐµ â€žSTM32L4XXâ€œ Ð³Ñ€ÐµÑˆÐ°ÐºÐ° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð·Ð° Ñ†Ð¸Ñ™Ð½Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
+
+#: elf32-arm.c:8623 elf32-arm.c:8643 elf32-arm.c:8710 elf32-arm.c:8729
+#, c-format
+msgid "%pB: unable to find %s veneer `%s'"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€ž%sâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ â€ž%sâ€œ"
 
-#: elf32-arm.c:10666 elf32-tic6x.c:2736
-#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4481
+#: elf32-arm.c:8936
+#, 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:9034
+#, 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:9836
+#, c-format
+msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žPLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ñƒ â€žthumb-1â€œ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elf32-arm.c:10146 elf32-arm.c:10188
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#lxâ€œ Ñƒ â€žTLSâ€œ Ñ‚Ñ€Ð°Ð¼Ð±ÑƒÐ»Ð¸Ð½Ð¸"
+
+#: elf32-arm.c:10538
+msgid "shared object"
+msgstr "Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf32-arm.c:10541
+msgid "PIE executable"
+msgstr "â€žPIEâ€œ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°"
+
+#: elf32-arm.c:10544
+#, 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:10683 elf32-arm.c:11100
+#, c-format
+msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%s BLXâ€œ Ñ†Ð¸Ñ™Ð° Ð½Ð° â€ž%sâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
+
+#: elf32-arm.c:11999 elf32-arm.c:12025
+#, 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:12071 elf32-csky.c:4940 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>): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
+
+#: elf32-arm.c:12285
+#, 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:12326 elf32-arm.c:12418 elf32-arm.c:12506 elf32-arm.c:12596
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð´ÐµÑ™ÐµÑšÐ° %#<PRIx64> Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð³Ñ€ÑƒÐ¿Ðµ â€ž%sâ€œ"
+
+#: elf32-arm.c:13228 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:13341 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â€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ"
+
+#: elf32-arm.c:13343 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â€œ Ñ˜Ðµ ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ñ™ÐµÐ½Ð¾ Ñ�Ð° â€žÐ½Ðµ-TLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%sâ€œ"
+
+#: elf32-arm.c:13426 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
 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:13430 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7172
 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:13438 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7180
 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:13916
+#, 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:13920
 #, 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:13965
+#, 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:14052
+#, c-format
+msgid "%pB: unknown mandatory EABI object attribute %d"
+msgstr "%pB: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+
+#: elf32-arm.c:14060
+#, c-format
+msgid "warning: %pB: unknown EABI object attribute %d"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+
+#: elf32-arm.c:14360
+#, c-format
+msgid "error: %pB: unknown CPU architecture"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°"
+
+#: elf32-arm.c:14398 elf32-nios2.c:2950
+#, c-format
+msgid "error: %pB: conflicting CPU architectures %d/%d"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° %d/%d Ñ�Ñƒ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ"
+
+#: elf32-arm.c:14495
+#, c-format
+msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
+
+#: elf32-arm.c:14524
+#, c-format
+msgid "error: %pB uses VFP register arguments, %pB does not"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žVFPâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%pBâ€œ Ð½Ðµ"
+
+#: elf32-arm.c:14683
+#, c-format
+msgid "error: %pB: unable to merge virtualization attributes with %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ð¿Ð¾Ñ˜Ð¸Ð¼ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ðµ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ðµ Ñ�Ð° â€ž%pBâ€œ"
+
+#: elf32-arm.c:14709
+#, c-format
+msgid "error: %pB: conflicting architecture profiles %c/%c"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð£ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%c/%câ€œ"
+
+#: elf32-arm.c:14848
+#, c-format
+msgid "warning: %pB: conflicting platform configuration"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %pB: Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ"
+
+#: elf32-arm.c:14857
+#, c-format
+msgid "error: %pB: conflicting use of R9"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµ â€žR9â€œ"
+
+#: elf32-arm.c:14869
+#, c-format
+msgid "error: %pB: SB relative addressing conflicts with use of R9"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ â€žSBâ€œ Ð°Ð´Ñ€ÐµÑ�Ð¸Ñ€Ð°ÑšÐµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žR9â€œ"
+
+#: elf32-arm.c:14882
+#, 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:14913
+#, 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:12104
+#: elf32-arm.c:14925
+#, c-format
+msgid "error: %pB uses iWMMXt register arguments, %pB does not"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ðµ â€žiWMMXtâ€œ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð°, Ð° â€ž%pBâ€œ Ð½Ðµ"
+
+#: elf32-arm.c:14942
+#, c-format
+msgid "error: fp16 format mismatch between %pB and %pB"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€žfp16â€œ Ð·Ð°Ð¿Ð¸Ñ� Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ñ‚Ð¸ Ð·Ð° â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ"
+
+#: elf32-arm.c:14978
+#, c-format
+msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
+msgstr "â€ž%pBâ€œ Ð¿Ð¾Ñ�ÐµÐ´ÑƒÑ˜Ðµ Ð¸ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸ Ð¸ Ñ�Ñ‚Ð°Ñ€Ð¸ â€žTag_MPextension_useâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚"
+
+#: elf32-arm.c:15074
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾ Ñ˜Ðµ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¾]"
 
-#: elf32-arm.c:12112
+#: elf32-arm.c:15082
 #, c-format
 msgid " [VFP float format]"
 msgstr " [â€žVFPâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]"
 
-#: elf32-arm.c:12114
+#: elf32-arm.c:15084
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [â€žMaverickâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]"
 
-#: elf32-arm.c:12116
+#: elf32-arm.c:15086
 #, c-format
 msgid " [FPA float format]"
 msgstr " [â€žFPAâ€œ Ð·Ð°Ð¿Ð¸Ñ� Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ Ð±Ñ€Ð¾Ñ˜Ð°]"
 
-#: elf32-arm.c:12125
+#: elf32-arm.c:15089
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr " [Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñ�Ñƒ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÐµÐ½Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸]"
+
+#: elf32-arm.c:15092 elf32-arm.c:15178
+#, c-format
+msgid " [position independent]"
+msgstr " [Ð½ÐµÐ·Ð°Ð²Ð¸Ñ�Ñ‚Ð°Ð½ Ð¾Ð´ Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜Ð°]"
+
+#: elf32-arm.c:15095
 #, c-format
 msgid " [new ABI]"
 msgstr " [Ð½Ð¾Ð²Ð¸ â€žABIâ€œ]"
 
-#: elf32-arm.c:12128
+#: elf32-arm.c:15098
 #, c-format
 msgid " [old ABI]"
 msgstr " [Ñ�Ñ‚Ð°Ñ€Ð¸ â€žABIâ€œ]"
 
-#: elf32-arm.c:12131
+#: elf32-arm.c:15101
 #, c-format
 msgid " [software FP]"
 msgstr " [Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·]"
 
-#: elf32-arm.c:12140
+#: elf32-arm.c:15110
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ1 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12143 elf32-arm.c:12154
+#: elf32-arm.c:15113 elf32-arm.c:15124
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [Ñ‚Ð°Ð±ÐµÐ»Ð° Ñ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°]"
 
-#: elf32-arm.c:12145 elf32-arm.c:12156
+#: elf32-arm.c:15115 elf32-arm.c:15126
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [Ñ‚Ð°Ð±ÐµÐ»Ð° Ð½ÐµÑ�Ñ€ÐµÑ’ÐµÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°]"
 
-#: elf32-arm.c:12151
+#: elf32-arm.c:15121
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ2 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12159
+#: elf32-arm.c:15129
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°]"
 
-#: elf32-arm.c:12162
+#: elf32-arm.c:15132
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [Ð¼Ð°Ð¿Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð°]"
 
-#: elf32-arm.c:12169
+#: elf32-arm.c:15139
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ3 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12173
+#: elf32-arm.c:15143
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ4 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12177
+#: elf32-arm.c:15147
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Ð˜Ð·Ð´Ð°ÑšÐµ5 â€žEABIâ€œ]"
 
-#: elf32-arm.c:12180
+#: elf32-arm.c:15150
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [â€žABIâ€œ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°]"
 
-#: elf32-arm.c:12183
+#: elf32-arm.c:15153
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [â€žABIâ€œ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾Ð³ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°]"
 
-#: elf32-arm.c:12189
+#: elf32-arm.c:15159
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:12192
+#: elf32-arm.c:15162
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:12198
+#: elf32-arm.c:15168
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žEABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ>"
 
-#: elf32-arm.c:12205
+#: elf32-arm.c:15175
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ð° Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°]"
 
-#: elf32-arm.c:12208
+#: elf32-arm.c:15181
 #, 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:15186 elfnn-aarch64.c:7337
 #, 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:15303 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:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfnn-aarch64.c:7608 elfnn-riscv.c:656
+#, 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:15692
+#, 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:16936
 #, 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:17323 elflink.c:13152 elflink.c:13199
 #, 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:18547
+#, 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
+#: elf32-arm.c:18574
+#, c-format
+msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ ÐšÐ¾Ñ€Ñ‚ÐµÐºÑ�Ð° Ð�8 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
+
+#: elf32-arm.c:19401 elf32-arm.c:19423
+#, c-format
+msgid "%pB: error: VFP11 veneer out of range"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: â€žVFP11â€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: elf32-arm.c:19474
+#, 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:19513
+#, c-format
+msgid "%pB: error: cannot create STM32L4XX veneer"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žSTM32L4XXâ€œ Ð¿Ñ€ÐµÐ²Ð»Ð°ÐºÑƒ"
+
+#: elf32-arm.c:20597
+#, c-format
+msgid "error: %pB is already in final BE8 format"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ñ˜Ðµ Ð²ÐµÑ› Ñƒ Ð·Ð°Ð²Ñ€ÑˆÐ½Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ â€žBE8â€œ"
+
+#: elf32-arm.c:20673
+#, 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:20688
+#, 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:20698
+#, c-format
+msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#: elf32-arm.c:20702
+#, c-format
+msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ñ†ÐµÐ»Ð¸Ñ…, Ð´Ð¾Ðº Ð¸Ñ… â€ž%pBâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’ÑƒÑ˜Ðµ Ñƒ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ðµ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ… Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#: elf32-arm.c:20712 elf32-arm.c:20716 elf32-arm.c:20726
+#, c-format
+msgid "error: %pB uses %s instructions, whereas %pB does not"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð½Ðµ"
+
+#: elf32-arm.c:20730
+#, c-format
+msgid "error: %pB does not use %s instructions, whereas %pB does"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð½Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ, Ð°Ð»Ð¸ â€ž%pBâ€œ Ð´Ð°"
+
+#: elf32-arm.c:20749
+#, c-format
+msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸"
+
+#: elf32-arm.c:20753
+#, c-format
+msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, Ð´Ð¾Ðº â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸"
+
+#: elf32-arm.c:20767
+#, c-format
+msgid "warning: %pB supports interworking, whereas %pB does not"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%pBâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+
+#: elf32-arm.c:20773
+#, c-format
+msgid "warning: %pB does not support interworking, whereas %pB does"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¼ÐµÑ’ÑƒÐ´ÐµÑ˜Ñ�Ñ‚Ð²Ð¾, Ð´Ð¾Ðº Ð³Ð° â€ž%pBâ€œ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð°"
+
+#: elf32-avr.c:1516 elf32-bfin.c:3138 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 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:1823
+#: 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 "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: 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:3327 elfnn-aarch64.c:3218
+#, c-format
+msgid "cannot create stub entry %s"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
 
 #: elf32-bfin.c:107 elf32-bfin.c:363
 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:1587
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unresolvable relocation against symbol `%s'"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-bfin.c:1619 elf32-i386.c:3443 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4112
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d"
+
+#: elf32-bfin.c:2645
+#, 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:2662
 msgid "relocation references symbol not defined in the module"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÐºÐ¾Ñ˜Ð¸ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñƒ"
 
-#: elf32-bfin.c:2845
+#: elf32-bfin.c:2759
 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:2799 elf32-bfin.c:2920
 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:2829 elf32-bfin.c:2957 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:2879
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "â€žR_BFIN_FUNCDESC_VALUEâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:3132
+#: elf32-bfin.c:3042
 msgid "relocations between different segments are not supported"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ñ… Ñ�ÐµÐ³Ð¼ÐµÐ½Ð°Ñ‚Ð° Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
 
-#: elf32-bfin.c:3133
+#: elf32-bfin.c:3043
 msgid "warning: relocation references a different segment"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚"
 
-#: elf32-bfin.c:4907
-msgid "%B: unsupported relocation type %i"
-msgstr "%B: Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%iâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
+#. 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:1416 elf32-m68k.c:1265
+#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:537 elf32-xgate.c:494
+#: elfxx-mips.c:16178
+#, c-format
+msgid "private flags = %lx:"
+msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = %lx:"
 
-#: elf32-bfin.c:4995 elf32-frv.c:6600
+#: elf32-bfin.c:4779 elf32-frv.c:6586
 #, 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:6590
 #, 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:5036
+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:5330 elf32-cr16.c:2713 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: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:1990
+#: 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:2019
+msgid "GOT table size out of range"
+msgstr "Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€žGOTâ€œ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+
+#: elf32-csky.c:2799
+#, c-format
+msgid "warning: unrecognized arch eflag '%#lx'"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ñ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žeâ€œ-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%#lxâ€œ"
+
+#: elf32-csky.c:2822
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%#xâ€œ"
+
+#: elf32-csky.c:2896 elf32-csky.c:3054
+#, c-format
+msgid "%pB: machine flag conflict with target"
+msgstr "%pB: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ Ñ˜Ðµ Ñƒ Ñ�ÑƒÐºÐ¾Ð±Ñƒ Ñ�Ð° Ñ†Ð¸Ñ™ÐµÐ¼"
 
-#: elf32-dlx.c:142
+#: elf32-csky.c:2909
 #, c-format
-msgid "BFD Link Error: branch (PC rel16) to section (%s) not supported"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð‘Ð¤Ð” Ð²ÐµÐ·Ðµ: Ð³Ñ€Ð°Ð½Ð°ÑšÐµ (PC rel16) Ñƒ Ð¾Ð´ÐµÑ™Ð°Ðº (%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:2938
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° â€žVDSPâ€œ Ð¸Ð·Ð´Ð°ÑšÐ°"
+
+#: elf32-csky.c:2955
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð° â€žDSPâ€œ Ð¸Ð·Ð´Ð°ÑšÐ°"
+
+#: elf32-csky.c:2973
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "Ð“Ñ€ÐµÑˆÐºÐ°: â€ž%pBâ€œ Ð¸ â€ž%pBâ€œ Ð¸Ð¼Ð°Ñ˜Ñƒ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ðµ â€žFPU ABIâ€œ"
+
+#: elf32-csky.c:3068
+#, 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:4312 elf32-i386.c:350
+#, c-format
+msgid "%pB: unsupported relocation type: %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %#x"
+
+#: elf32-dlx.c:141
+#, c-format
+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:569 elf32-ip2k.c:1484
 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:6497
+#, c-format
+msgid "%pB: compiled with %s and linked with modules that use non-pic relocations"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð½Ðµ-â€žpicâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-frv.c:6551 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:6514
+#: elf32-frv.c:6564
 #, c-format
-msgid "%s: compiled with %s and linked with modules that use non-pic relocations"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ Ð½Ðµ-â€žPICâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (%#x) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (%#x)"
 
-#: elf32-frv.c:6567 elf32-iq2000.c:828 elf32-m32c.c:812
+#: elf32-gen.c:71
 #, c-format
-msgid "%s: compiled with %s and linked with modules compiled with %s"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž%sâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž%sâ€œ"
+msgid "%pB: relocations in generic ELF (EM: %d)"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)"
+
+#: elf32-hppa.c:761 elf32-hppa.c:842 elf64-ppc.c:11983
+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-frv.c:6579
+#: elf32-hppa.c:863 elf32-hppa.c:3405
 #, 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(%pA+%#<PRIx64>): cannot reach %s, recompile with -ffunction-sections"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-ffunction-sectionsâ€œ"
 
-#: 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:1241
 #, c-format
-msgid "private flags = 0x%lx:"
-msgstr "Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ = 0x%lx:"
+msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
 
-#: 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:2582
+#, c-format
+msgid "%pB: duplicate export stub %s"
+msgstr "%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð¸Ð·Ð²Ð¾Ð·Ð° â€ž%sâ€œ"
+
+#: elf32-hppa.c:3238
+#, 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:4034
+#, c-format
+msgid "%s has both normal and TLS relocs"
+msgstr "â€ž%sâ€œ Ð¸Ð¼Ð° Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾ Ð¸ â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-hppa.c:4052
+#, c-format
+msgid "%pB:%s has both normal and TLS relocs"
+msgstr "%pB: â€ž%sâ€œ Ð¸Ð¼Ð° Ð¸ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾ Ð¸ â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf32-hppa.c:4598
+#: elf32-hppa.c:4111
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° â€ž%sâ€œ Ð·Ð° â€ž%sâ€œ"
+
+#: 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:1169 elf64-x86-64.c:1382
+#, 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: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: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žR_386_GOT32Xâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð±ÐµÐ· Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð° Ð¾Ñ�Ð½Ð¾Ð²Ðµ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ ÐºÐ°Ð´Ð° Ñ�Ðµ Ñ�Ñ‚Ð²Ð°Ñ€Ð° Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf32-i386.c:1721 elf32-s390.c:1151 elf32-sh.c:5490 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-riscv.c:565
+#, c-format
+msgid "%pB: `%s' accessed both as normal and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
+
+#: elf32-i386.c:1793
+#, c-format
+msgid "%pB: unsupported non-PIC call to IFUNC `%s'"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¸ Ð½Ðµ-â€žPICâ€œ Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° â€žIFUNCâ€œ â€ž%sâ€œ"
+
+#: elf32-i386.c:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2252
+#, 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:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778
+#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 elfnn-riscv.c:2119
+#: elfnn-riscv.c:2919 elfnn-riscv.c:2993
+#, c-format
+msgid "Local IFUNC function `%s' in %pB\n"
+msgstr "Ð›Ð¾ÐºÐ°Ð»Ð½Ð° â€žIFUNCâ€œ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ\n"
 
-#: elf32-i386.c:3610 elf64-x86-64.c:3777
+#: elf32-i386.c:2563
+#, 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:2598 elf64-x86-64.c:2977
 msgid "hidden symbol"
 msgstr "Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3613 elf64-x86-64.c:3780
+#: elf32-i386.c:2601 elf64-x86-64.c:2980
 msgid "internal symbol"
 msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3616 elf64-x86-64.c:3783
+#: elf32-i386.c:2604 elf64-x86-64.c:2983
 msgid "protected symbol"
 msgstr "Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð»"
 
-#: elf32-i386.c:3619 elf64-x86-64.c:3786
+#: elf32-i386.c:2607 elf64-x86-64.c:2986
 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:2613
+#, 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:2626
 #, 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-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
+#: elf32-ip2k.c:1297
 #, c-format
-msgid "ip2k linker: missing 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-ip2k.c:1308
+#: elf32-ip2k.c:1316
 #, c-format
-msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)."
-msgstr "ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ñ�ÑƒÐ²Ð¸ÑˆÐ½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° 0x%08lx (Ñ†Ð¸Ñ™ = 0x%08lx)."
+msgid "ip2k linker: redundant page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
+msgstr "ÑƒÐ²ÐµÐ·Ð¸Ð²Ð°Ñ‡ â€žip2kâ€œ: Ñ�ÑƒÐ²Ð¸ÑˆÐ½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð½Ð° %#<PRIx64> (Ñ†Ð¸Ñ™ = %#<PRIx64>)"
 
-#: elf32-iq2000.c:841 elf32-m32c.c:824
-#, c-format
-msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
-msgstr "%s: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð° Ð¿Ð¾Ñ™Ð° â€že_flagsâ€œ (0x%lx) Ð½ÐµÐ³Ð¾ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ (0x%lx)"
-
-#: 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:1093 elf32-microblaze.c:1141
+#, 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:6851
 #, 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:1136
 #, 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:1167
 #, 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:1183
 #, 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:1198
 #, 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:1234
 #, 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:1358
+#, 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:1365
+#, 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:1374
+#, 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:1419 elf32-xgate.c:497
 #, c-format
 msgid "[abi=32-bit int, "
 msgstr "[Ð°Ð±Ð¸=32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, "
 
-#: elf32-m68hc1x.c:1432 elf32-xgate.c:679
+#: elf32-m68hc1x.c:1421 elf32-xgate.c:499
 #, c-format
 msgid "[abi=16-bit int, "
 msgstr "[Ð°Ð±Ð¸=16-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ†ÐµÐ¾ Ð±Ñ€Ð¾Ñ˜, "
 
-#: elf32-m68hc1x.c:1435 elf32-xgate.c:682
+#: elf32-m68hc1x.c:1424 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, "
 
-#: elf32-m68hc1x.c:1437 elf32-xgate.c:684
+#: elf32-m68hc1x.c:1426 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¼ÐµÑˆÐ¾Ð²Ð¸Ñ‚Ð¸, "
 
-#: elf32-m68hc1x.c:1440
+#: elf32-m68hc1x.c:1429
 #, c-format
 msgid "cpu=HC11]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]"
 
-#: elf32-m68hc1x.c:1442
+#: elf32-m68hc1x.c:1431
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]"
 
-#: elf32-m68hc1x.c:1444
+#: elf32-m68hc1x.c:1433
 #, c-format
 msgid "cpu=HC12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]"
 
-#: elf32-m68hc1x.c:1447
+#: elf32-m68hc1x.c:1436
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¼Ð¾Ð´ÐµÐ»-Ð³Ñ€ÑƒÐ¿Ðµ]"
 
-#: elf32-m68hc1x.c:1449
+#: elf32-m68hc1x.c:1438
 #, c-format
 msgid " [memory=flat]"
 msgstr " [Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ð°=Ð¾Ð±Ð¸Ñ‡Ð½Ð¾]"
 
-#: elf32-m68hc1x.c:1452
+#: elf32-m68hc1x.c:1441
 #, 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:3585 elf32-ppc.c:3593
+#, 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:7664 vms-alpha.c:7680
 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:1536 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:1777 elf64-mips.c:3516 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: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 "Ð´Ð¾ÑˆÐ»Ð¾ Ñ˜Ðµ Ð´Ð¾ 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:1317
+#: 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:2221
-msgid "Warning: %B: Unknown MSPABI object attribute %d"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: %B: â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žMSPABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: elf32-msp430.c:2671
+#, 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:2772
+#, 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:2784
+#, 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:2797
+#, 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:2808
+#, 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:2821
+#, 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:2833
+#, 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:2858
+#, 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:3625
+#, c-format
+msgid "error: can't find symbol: %s"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»: %s"
 
-#: elf32-nds32.c:4584
+#: elf32-nds32.c:5524
 #, 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:5650
+#, 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:5691
+#, 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:5713
+#, 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:6639
+#, 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:6687
+#, 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:6701
+#, 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:6789
+#, 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:6799
+#, 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:6826
+#, c-format
+msgid "%pB: warning: incompatible elf-versions %s and %s"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: ÐµÐ»Ñ„ Ð¸Ð·Ð´Ð°ÑšÐ° %s Ð¸ %s Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð°"
 
-#: elf32-nds32.c:5642
+#: elf32-nds32.c:6857
 #, c-format
 msgid ": n1 instructions"
 msgstr ": Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ â€žn1â€œ"
 
-#: elf32-nds32.c:5645
+#: elf32-nds32.c:6860
 #, 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:9313
+#, 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:9577
+#, 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:12840
+#, c-format
+msgid "%pB: nested OMIT_FP in %pA"
+msgstr "%pB: ÑƒÐ³Ð½ÐµÐ¶Ñ’ÐµÐ½Ð¾ â€žOMIT_FPâ€œ Ñƒ â€ž%pAâ€œ"
 
-#: elf32-nds32.c:14015
+#: elf32-nds32.c:12859
 #, 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-nds32.c:13141 reloc.c:8497
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ð¸Ð´Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
 
-#: elf32-nios2.c:2861
+#: elf32-nios2.c:2934
 #, c-format
-msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n"
-msgstr "Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ 0x%08x ÐºÐ°Ð´Ð° â€ž_gpâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾\n"
+msgid "error: %pB: big-endian R2 is not supported"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ â€žR2â€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð°"
 
-#: elf32-nios2.c:2878
+#: elf32-nios2.c:3826
 #, 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: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 "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ñ�Ñ‚Ð¸Ð³Ð½ÐµÐ¼ â€ž%sâ€œ (Ð½Ð° %#<PRIx64>) Ð¸Ð· Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° (Ð½Ð° %#<PRIx64>) Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ (%<PRId64>) Ð¸Ð·Ð²Ð°Ð½ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½Ð¾Ð³ Ð¾Ð¿Ñ�ÐµÐ³Ð°, Ð¾Ð´ -32678 Ð´Ð¾ 32767\n"
 
-#: elf32-nios2.c:3520
+#: elf32-nios2.c:4511 elf32-pru.c:931
 msgid "relocation out of range"
 msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
 
-#: elf32-nios2.c:3530 elf32-tic6x.c:2744
+#: elf32-nios2.c:4521 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: elf32-nios2.c:4529
+#: elf32-nios2.c:5364
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ™Ð¸Ð²Ð° â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
 
-#: elf32-ppc.c:2100
+#: elf32-or1k.c:1208
+#, c-format
+msgid "%pB: Cannot handle relocation value size of %d"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ€Ð°Ð´Ð¸Ð¼ Ñ�Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¾Ð¼ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ð´ %d"
+
+#: elf32-or1k.c:1315
+#, c-format
+msgid "%pB: unknown relocation type %d"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+
+#: elf32-or1k.c:1369
+#, c-format
+msgid "%pB: addend should be zero for plt relocations"
+msgstr "%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žpltâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-or1k.c:1474
+#, c-format
+msgid "%pB: addend should be zero for got relocations"
+msgstr "%pB: Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ñ‚Ñ€ÐµÐ±Ð° Ð´Ð° Ð±ÑƒÐ´Ðµ Ð½ÑƒÐ»Ð° Ð·Ð° â€žgotâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-or1k.c:1491
+#, c-format
+msgid "%pB: gotoff relocation against dynamic symbol %s"
+msgstr "%pB: â€žgotoffâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-or1k.c:1508 elf64-alpha.c:4425 elf64-alpha.c:4569
+#, c-format
+msgid "%pB: pc-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-or1k.c:1522
+#, c-format
+msgid "%pB: non-pic relocation against symbol %s"
+msgstr "%pB: â€žnon-picâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elf32-or1k.c:1606
+#, c-format
+msgid "%pB: support for local dynamic not implemented"
+msgstr "%pB: Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ° Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð°"
+
+#: elf32-or1k.c:1785
+#, c-format
+msgid "%pB: will not resolve runtime TLS relocation"
+msgstr "%pB: Ð½ÐµÑ›Ñƒ Ñ€ÐµÑˆÐ¸Ñ‚Ð¸ Ð²Ñ€ÐµÐ¼Ðµ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+
+#: elf32-or1k.c:2118
+#, c-format
+msgid "%pB: bad relocation section name `%s'"
+msgstr "%pB: Ð»Ð¾Ñˆ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ"
+
+#: elf32-or1k.c:3179
+#, c-format
+msgid "%pB: %s flag mismatch with previous modules"
+msgstr "%pB: â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ð°"
+
+#: elf32-ppc.c:990 elf64-ppc.c:1720
 #, 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:1630
+#, c-format
+msgid "corrupt %s section in %pB"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€ž%sâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº Ñƒ â€ž%pBâ€œ"
+
+#: elf32-ppc.c:1649
+#, c-format
+msgid "unable to read in %s section from %pB"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%pBâ€œ"
+
+#: elf32-ppc.c:1691
+#, c-format
+msgid "warning: unable to set size of %s section in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf32-ppc.c:1740
+msgid "failed to allocate space for new APUinfo section"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€ Ð·Ð° Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ"
+
+#: elf32-ppc.c:1759
+msgid "failed to compute new APUinfo section"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ"
+
+#: elf32-ppc.c:1762
+msgid "failed to install new APUinfo section"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¸Ð½Ñ�Ñ‚Ð°Ð»Ð¸Ñ€Ð°Ð¼ Ð½Ð¾Ð²Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€žAPUinfoâ€œ"
+
+#: elf32-ppc.c:2861
+#, c-format
+msgid "%pB: relocation %s cannot be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elf32-ppc.c:3601 elf32-ppc.c:3609
+#, c-format
+msgid "%pB uses double-precision hard float, %pB uses single-precision hard float"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#: elf32-ppc.c:3631 elf32-ppc.c:3639
+#, c-format
+msgid "%pB uses 64-bit long double, %pB uses 128-bit long double"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð», â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ 128-Ð±Ð¸Ñ‚Ð½Ð¸ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð»"
+
+#: elf32-ppc.c:3647 elf32-ppc.c:3655
+#, c-format
+msgid "%pB uses IBM long double, %pB uses IEEE long double"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žIBMâ€œ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð», â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žIEEEâ€œ Ð´ÑƒÐ³Ð¸ Ð´ÑƒÐ±Ð»"
+
+#: elf32-ppc.c:3722 elf32-ppc.c:3731
+#, c-format
+msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žAltiVecâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€ â€žABIâ€œ, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žSPEâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€ â€žABIâ€œ"
+
+#: elf32-ppc.c:3760 elf32-ppc.c:3769
+#, c-format
+msgid "%pB uses r3/r4 for small structure returns, %pB uses memory"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€žr3/r4â€œ Ð·Ð° Ð¼Ð°Ð»Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ðµ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ, â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ñƒ"
+
+#: elf32-ppc.c:3833
+#, c-format
+msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ñ�Ð° â€ž-mrelocatableâ€œ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼"
+
+#: elf32-ppc.c:3841
+#, c-format
+msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ ÑƒÐ¾Ð±Ð¸Ñ‡Ð°Ñ˜ÐµÐ½Ð¸Ð¼ Ð¿ÑƒÑ‚ÐµÐ¼ Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾ Ñ�Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð° ÐºÐ¾Ñ˜Ð¸ Ñ�Ñƒ Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¸ Ñ�Ð° â€ž-mrelocatableâ€œ"
+
+#: elf32-ppc.c:3910
+#, 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:3929
+#, 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:4032
+#, c-format
+msgid "bss-plt forced due to %pB"
+msgstr "â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð·Ð±Ð¾Ð³ â€ž%pBâ€œ"
+
+#: elf32-ppc.c:4034
+msgid "bss-plt forced by profiling"
+msgstr "â€žbss-pltâ€œ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ð¸Ñ™ÐµÐ½Ð¾ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ�Ð°ÑšÐµÐ¼"
+
+#: elf32-ppc.c:4611 elf64-ppc.c:8292
+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:4641 elf64-ppc.c:8357
+#, 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:7927
-msgid "%P: %B: unknown relocation type %d for symbol %s\n"
-msgstr "%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ\n"
+#: elf32-ppc.c:5547 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:8191
-msgid "%P: %H: non-zero addend on %s reloc against `%s'\n"
-msgstr "%P: %H: Ð½Ðµ Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ\n"
+#: elf32-ppc.c:7390
+msgid "%P: %H: error: %s with unexpected instruction %x\n"
+msgstr "%P: %H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ñ�Ð° Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼ â€ž%xâ€œ\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:7427
+msgid "%H: fixup branch overflow\n"
+msgstr "%H: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žfixupâ€œ Ð³Ñ€Ð°Ð½Ðµ\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:7467 elf32-ppc.c:7503
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): error: %s with unexpected instruction %#x"
+msgstr "%pB(%pA+%#<PRIx64>): Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ñ�Ð° Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼ â€ž%#xâ€œ"
 
-#: 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:7567
+#, c-format
+msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žbss-pltâ€œ â€ž-fPICâ€œ â€žifuncâ€œ â€ž%sâ€œ\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:7882
+#, c-format
+msgid "%H: non-zero addend on %s reloc against `%s'\n"
+msgstr "%H: Ð½Ðµ Ð½ÑƒÐ»Ñ‚Ð¸ Ñ�Ð°Ð±Ð¸Ñ€Ð°Ðº Ð½Ð° â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ\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"
+#. @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:7914
+#, c-format
+msgid "%X%H: @local call to ifunc %s\n"
+msgstr "%X%H: Ð¿Ð¾Ð·Ð¸Ð² â€ž@localâ€œ Ð·Ð° i-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%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:8092
+#, c-format
+msgid "%H: relocation %s for indirect function %s unsupported\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\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:8426 elf32-ppc.c:8457 elf32-ppc.c:8548 elf32-ppc.c:8644
+#, 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:8799 elf32-ppc.c:8817
+msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
+msgstr "%X%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° â€žbss-pltâ€œ\n"
+
+#: elf32-ppc.c:8898
+#, c-format
+msgid "%H: error: %s against `%s' not a multiple of %u\n"
+msgstr "%H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ\n"
+
+#: elf32-ppc.c:8927
+#, c-format
+msgid "%H: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%H: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ\n"
+
+#: elf32-ppc.c:9008
+#, c-format
+msgid "%H: %s reloc against `%s': error %d\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d\n"
+
+#: elf32-ppc.c:9898
+msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
+msgstr "%X%P: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ›Ðµ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°\n"
+
+#: elf32-ppc.c:9902 elf64-ppc.c:17626
+msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð¸ Ð“Ð�Ð£-Ð¾Ð²Ðµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ðµ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ð¼Ð¾Ð³Ñƒ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð¸Ñ€Ð°Ñ‚Ð¸ Ð½ÐµÑƒÑ�Ð¿ÐµÑ…Ð¾Ð¼ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ˜Ðµ Ñƒ Ð²Ñ€ÐµÐ¼Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°\n"
+
+#: elf32-ppc.c:9947
+#, c-format
+msgid "%s not defined in linker created %pA"
+msgstr "â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%pAâ€œ"
+
+#: elf32-pru.c:582 elf32-pru.c:1475
+#, c-format
+msgid "error: %pB: old incompatible object file detected"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ñ�Ñ‚Ð°Ñ€Ð° Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð°"
 
-#: elf32-ppc.c:9750
-msgid "%P: %s not defined in linker created %s\n"
-msgstr "%P: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ñƒ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ñƒ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¼ â€ž%sâ€œ\n"
+#: elf32-rl78.c:372
+msgid "internal error: RL78 reloc stack overflow"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°"
 
-#: elf32-rl78.c:784
-msgid "Warning: RL78_SYM reloc with an unknown symbol"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
+#: elf32-rl78.c:383
+msgid "internal error: RL78 reloc stack underflow"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´ÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žRL78â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°"
 
-#: elf32-rl78.c:952 elf32-rx.c:1324
-msgid "%B(%A): error: call to undefined function '%s'"
-msgstr "%B(%A): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
+#: elf32-rl78.c:1053
+msgid "warning: RL78_SYM reloc with an unknown symbol"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRL78_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
 
-#: 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:1084 elf32-rx.c:1461
+#, c-format
+msgid "%pB(%pA): error: call to undefined function '%s'"
+msgstr "%pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð·Ð¸Ð² Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ"
 
-#: elf32-rl78.c:970 elf32-rx.c:1342
-msgid "%B(%A): internal error: out of range error"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°"
+#: elf32-rl78.c:1205
+#, 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:974 elf32-rx.c:1346
-msgid "%B(%A): internal error: unsupported relocation error"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+#: elf32-rl78.c:1222
+#, 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:978 elf32-rx.c:1350
-msgid "%B(%A): internal error: dangerous relocation"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+#: elf32-rl78.c:1231
+msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
+msgstr "â€žRL78â€œ Ñ�ÑƒÐºÐ¾Ð± Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐ°: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ðµ Ð¸ 64-Ð±Ð¸Ñ‚Ð½Ðµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ"
 
-#: elf32-rl78.c:982 elf32-rx.c:1354
-msgid "%B(%A): internal error: unknown error"
-msgstr "%B(%A): ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°"
+#: elf32-rl78.c:1235 elf32-rl78.c:1239
+#, c-format
+msgid "- %pB is 64-bit, %pB is not"
+msgstr "â€” â€ž%pBâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¾, â€ž%pBâ€œ Ð½Ð¸Ñ˜Ðµ"
 
-#: 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:1266
+#, c-format
+msgid " [64-bit doubles]"
+msgstr " [doubles de 64 bits]"
 
-#: elf32-rl78.c:1046 elf32-rl78.c:1049
+#: elf32-rx.c:607
 #, c-format
-msgid "- %s is G10, %s is not"
-msgstr "â€” â€ž%sâ€œ Ñ˜Ðµ Ð“10, â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ"
+msgid "%pB:%pA: table entry %s outside table"
+msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ â€ž%sâ€œ Ñ˜Ðµ Ð²Ð°Ð½ Ñ‚Ð°Ð±ÐµÐ»Ðµ"
 
-#: elf32-rl78.c:1072
+#: elf32-rx.c:614
 #, c-format
-msgid " [G10]"
-msgstr " [Ð“10]"
+msgid "%pB:%pA: table entry %s not word-aligned within table"
+msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐ¼ Ñ€ÐµÑ‡Ð¸ ÑƒÐ½ÑƒÑ‚Ð°Ñ€ Ñ‚Ð°Ð±ÐµÐ»Ðµ"
 
-#: elf32-rx.c:563
-msgid "%B:%A: Warning: deprecated Red Hat reloc "
-msgstr "%B:%A: Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð ÐµÐ´ Ð¥ÐµÑ‚Ð° "
+#: elf32-rx.c:689
+#, 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:709
+#, 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:1293
+msgid "warning: RX_SYM reloc with an unknown symbol"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRX_SYMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ�Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼"
+
+#: elf32-rx.c:3173
+#, c-format
+msgid "there is a conflict merging the ELF header flags from %pB"
+msgstr "Ñ�ÑƒÐºÐ¾Ð± Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐ° Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ð° â€žELFâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð° Ð¸Ð· â€ž%pBâ€œ"
+
+#: elf32-rx.c:3176
+#, c-format
+msgid "  the input  file's flags: %s"
+msgstr "  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ ÑƒÐ»Ð°Ð·Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %s"
+
+#: elf32-rx.c:3178
+#, c-format
+msgid "  the output file's flags: %s"
+msgstr "  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¸Ð·Ð»Ð°Ð·Ð½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %s"
 
-#: elf32-score.c:1520 elf32-score7.c:1379 elfxx-mips.c:3642
+#: elf32-rx.c:3785
+#, c-format
+msgid "%pB:%pA: table %s missing corresponding %s"
+msgstr "%pB:%pA: Ñ‚Ð°Ð±ÐµÐ»Ð¸ â€ž%sâ€œ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ðµ â€ž%sâ€œ"
+
+#: elf32-rx.c:3793
+#, 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:1963
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): invalid instruction for TLS relocation %s"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð·Ð° â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+
+#: elf32-score.c:1524 elf32-score7.c:1385 elfxx-mips.c:3798
 msgid "not enough GOT space for local GOT entries"
 msgstr "Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ â€žGOTâ€œ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ð·Ð° Ð¼ÐµÑ�Ð½Ðµ ÑƒÐ½Ð¾Ñ�Ðµ â€žGOTâ€œ"
 
-#: elf32-score.c:2742
-msgid "address not word align"
+#: elf32-score.c:2756
+msgid "address not word aligned"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð¿Ð¾ Ñ€ÐµÑ‡Ð¸"
 
-#: elf32-score.c:2827 elf32-score7.c:2631
+#: elf32-score.c:2837 elf32-score7.c:2642
 #, 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:2891 elf32-score7.c:2696
+#, 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:3999 elf32-score7.c:3804
 #, c-format
 msgid " [pic]"
 msgstr " [Ð¿Ð¸Ðº]"
 
-#: elf32-score.c:4011 elf32-score7.c:3815
+#: elf32-score.c:4003 elf32-score7.c:3808
 #, 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-sh.c:569
-msgid "%B: 0x%lx: warning: bad R_SH_USES offset"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ â€žR_SH_USESâ€œ"
-
-#: 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:598
-msgid "%B: 0x%lx: warning: bad R_SH_USES load offset"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€žR_SH_USESâ€œ"
-
-#: elf32-sh.c:613
-msgid "%B: 0x%lx: warning: could not find expected reloc"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
-
-#: elf32-sh.c:641
-msgid "%B: 0x%lx: warning: symbol in unexpected section"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ˜Ðµ Ñƒ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
-
-#: elf32-sh.c:767
-msgid "%B: 0x%lx: warning: could not find expected COUNT reloc"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€žCOUNTâ€œ"
-
-#: elf32-sh.c:776
-msgid "%B: 0x%lx: warning: bad count"
-msgstr "%B: 0x%lx: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾Ñˆ Ð±Ñ€Ð¾Ñ˜"
-
-#: elf32-sh.c:1180 elf32-sh.c:1550
-msgid "%B: 0x%lx: fatal: reloc overflow while relaxing"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
-
-#: elf32-sh.c:3939 elf64-sh64.c:1514
-msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled"
-msgstr "Ð�ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ â€žSTO_SH5_ISA32â€œ Ð½Ð° Ð¼ÐµÑ�Ð½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð½Ð¸Ñ˜Ðµ Ð¾Ð´Ñ€Ð°Ñ’ÐµÐ½Ð¾"
-
-#: elf32-sh.c:4190
-msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation"
-msgstr "%B: 0x%lx: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ†Ð¸Ñ™ Ð³Ñ€Ð°Ð½Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
-
-#: 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: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: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: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:4993
-msgid "%B(%A+0x%lx): %s relocation against external symbol \"%s\""
-msgstr "%B(%A+0x%lx): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf32-score.c:4050 elf32-score7.c:3855
+#, c-format
+msgid "%pB: warning: linking PIC files with non-PIC files"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ�Ð° Ð½Ðµ-â€žPICâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°"
 
-#: elf32-sh.c:5466
+#: elf32-sh.c:533
 #, c-format
-msgid "%X%C: relocation to \"%s\" references a different segment\n"
-msgstr "%X%C: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
+msgid "%pB: %#<PRIx64>: warning: R_SH_USES points to unrecognized insn 0x%x"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žR_SH_USESâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð»Ð°Ðº 0x%x"
 
-#: elf32-sh.c:5472
+#: elf32-sh.c:3754
 #, c-format
-msgid "%C: warning: relocation to \"%s\" references a different segment\n"
-msgstr "%C: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
+msgid "%pB: %#<PRIx64>: fatal: unaligned branch target for relax-support relocation"
+msgstr "%pB: %#<PRIx64>: ÐºÐ¾Ð±Ð½Ð° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚ Ñ†Ð¸Ñ™ Ð³Ñ€Ð°Ð½Ðµ Ð·Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð¾Ð¿ÑƒÑˆÑ‚Ð°ÑšÐ°"
+
+#: 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: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: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: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:4460
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): %s relocation against external symbol \"%s\""
+msgstr "%pB(%pA+%#<PRIx64>): â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: 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:4597
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd4??)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd4??)"
+
+#: elf32-sh.c:4605
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xc7??)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xc7??)"
+
+#: elf32-sh.c:4612
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd1??)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd1??)"
 
-#: 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:4619
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x310c)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x310c??)"
 
-#: 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:4626
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x410b)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x410b??)"
 
-#: elf32-sh.c:6289
-msgid "%B: Function descriptor relocation with non-zero addend"
-msgstr "%B: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
+#: elf32-sh.c:4633
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x34cc)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x34cc??)"
 
-#: 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:4668
+#, c-format
+msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žIE->LEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#<PRIx64>"
 
-#: elf32-sh64.c:224 elf64-sh64.c:2318
+#: elf32-sh.c:4686
 #, c-format
-msgid "%s: compiled as 32-bit object and %s is 64-bit"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¸"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0xd0??: mov.l)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0xd0??: mov.l)"
 
-#: elf32-sh64.c:227 elf64-sh64.c:2321
+#: elf32-sh.c:4695
 #, c-format
-msgid "%s: compiled as 64-bit object and %s is 32-bit"
-msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?12: stc)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x0?12: stc)"
 
-#: elf32-sh64.c:229 elf64-sh64.c:2323
+#: elf32-sh.c:4702
 #, c-format
-msgid "%s: object size does not match that of target %s"
-msgstr "%s: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ñ†Ð¸Ñ™Ð° â€ž%sâ€œ"
+msgid "%pB(%pA+%#<PRIx64>): unexpected instruction %#04X (expected 0x0?ce: mov.l)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° â€ž%#04Xâ€œ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… 0x0?ce: mov.l)"
 
-#: elf32-sh64.c:452 elf64-sh64.c:2839
+#: elf32-sh.c:4817
 #, c-format
-msgid "%s: encountered datalabel symbol in input"
-msgstr "%s: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð°Ñ‚Ð¿Ð¸Ñ�Ð° Ð´Ð°Ñ‚ÑƒÐ¼Ð° Ñƒ ÑƒÐ»Ð°Ð·Ñƒ"
+msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#<PRIx64>"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ Ð·Ð° â€žGD->IEâ€œ Ð¿Ñ€ÐµÐ²Ð¾Ð´ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸: %#<PRIx64>"
 
-#: elf32-sh64.c:529
-msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
-msgstr "ÐŸÐ¢Ð‘ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHmediaâ€œ (Ð±Ð¸Ñ‚ 0 == 1)"
+#: 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-sh64.c:532
-msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
-msgstr "ÐŸÐ¢Ð� Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHcompactâ€œ (Ð±Ð¸Ñ‚ 0 == 0)"
+#: elf32-sh.c:5013
+#, c-format
+msgid "%X%C: relocation to \"%s\" references a different segment\n"
+msgstr "%X%C: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: elf32-sh64.c:550
+#: elf32-sh.c:5020
 #, c-format
-msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
-msgstr "%s: Ð“Ð�Ð¡ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ ÐŸÐ¢Ð‘ â€žinsnâ€œ Ñ�Ð° â€žR_SH_PT_16â€œ"
+msgid "%C: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%C: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ â€ž%sâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð° ÑƒÐ¿ÑƒÑ‚Ñƒ Ð´Ñ€ÑƒÐ³Ð¾Ð³ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°\n"
 
-#: 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:5479 elf32-sh.c:5561
+#, c-format
+msgid "%pB: `%s' accessed both as normal and FDPIC symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¾Ð¼ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€žFDPICâ€œ"
 
-#: elf32-sh64.c:675
+#: elf32-sh.c:5485 elf32-sh.c:5566
 #, c-format
-msgid "%s: could not write out added .cranges entries"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð´Ð¾Ð´Ð°Ñ‚Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
+msgstr "%pB: â€ž%sâ€œ Ñ�Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ð¸Ð»Ð¾ Ð¸ ÐºÐ°Ð¾ â€žFDPICâ€œ-Ñƒ Ð¸ ÐºÐ°Ð¾ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ Ð»Ð¾ÐºÐ°Ð»Ð½Ðµ Ð½Ð¸Ñ‚Ð¸"
 
-#: elf32-sh64.c:735
+#: elf32-sh.c:5516
 #, c-format
-msgid "%s: could not write out sorted .cranges entries"
-msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð½Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+msgid "%pB: Function descriptor relocation with non-zero addend"
+msgstr "%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ Ñ�Ð° Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸Ð¼ Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
 
-#: elf32-sparc.c:90
-msgid "%B: compiled for a 64 bit system and target is 32 bit"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+#: elf32-sh.c:5723 elf64-alpha.c:4661
+#, c-format
+msgid "%pB: TLS local exec code cannot be linked into shared objects"
+msgstr "%pB: â€žTLSâ€œ Ð¼ÐµÑ�Ð½Ð¸ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸ ÐºÐ¾Ð´ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð°"
 
-#: elf32-sparc.c:103
-msgid "%B: linking little endian files with big endian files"
-msgstr "%B: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
+#: elf32-sh.c:5838
+#, c-format
+msgid "%pB: uses %s instructions while previous modules use %s instructions"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ Ð´Ð¾Ðº Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ð¸ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ðµ â€ž%sâ€œ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ"
 
-#: elf32-spu.c:716
-msgid "%X%P: overlay section %A does not start on a cache line.\n"
-msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ñƒ Ñ€ÐµÐ´Ñƒ Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.\n"
+#: elf32-sh.c:5850
+#, c-format
+msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ðµ â€ž%sâ€œ Ñ�Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¼ â€ž%sâ€œ Ñ˜Ðµ Ð´Ð°Ð»Ð¾ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñƒ"
 
-#: elf32-spu.c:724
-msgid "%X%P: overlay section %A is larger than a cache line.\n"
-msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Aâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ€ÐµÐ´Ð° Ð¾Ñ�Ñ‚Ð°Ð²Ðµ.\n"
+#: elf32-sh.c:5891
+#, c-format
+msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
+msgstr "%pB: ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ðµ ÐºÐ¾Ñ˜Ðµ Ð½Ð¸Ñ�Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ñ�Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð°Ð¼Ð° ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¸Ð¼ Ñƒ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elf32-sh.c:5904
+#, c-format
+msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¿Ð¾Ð¼ÐµÑˆÐ°Ð¼ â€žFDPICâ€œ Ð¸ Ð½Ðµ-â€žFDPICâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ"
+
+#: elf32-sparc.c:89
+#, c-format
+msgid "%pB: compiled for a 64 bit system and target is 32 bit"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+
+#: elf32-sparc.c:102
+#, c-format
+msgid "%pB: linking little endian files with big endian files"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸ Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚Ð¸"
+
+#: elf32-sparc.c:157
+#, c-format
+msgid "%pB: unhandled sparc machine value '%lu' detected during write processing"
+msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ â€žsparcâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ðµ â€ž%luâ€œ Ñ˜Ðµ Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð° Ð·Ð° Ð²Ñ€ÐµÐ¼Ðµ Ð¾Ð±Ñ€Ð°Ñ’Ð¸Ð²Ð°ÑšÐ° Ð¿Ð¸Ñ�Ð°ÑšÐ°"
+
+#: elf32-spu.c:736
+msgid "%X%P: overlay section %pA does not start on 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"
+msgid "%X%P: overlay section %pA is larger than a cache line\n"
+msgstr "%X%P: Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ñ€ÐµÐ´Ð° Ð¾Ñ�Ñ‚Ð°Ð²Ðµ\n"
+
+#: elf32-spu.c:764
+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:1008
-msgid "warning: call to non-function symbol %s defined in %B"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%Bâ€œ"
-
-#: 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:1877
-msgid "%B is not allowed to define %s"
-msgstr "â€ž%Bâ€œ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ â€ž%sâ€œ"
+#: 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: Ð¾Ð´ÐµÑ™Ñ†Ð¸ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%pAâ€œ Ð¸ â€ž%pAâ€œ Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¸Ñ�Ñ‚Ð¾Ñ˜ Ð°Ð´Ñ€ÐµÑ�Ð¸\n"
+
+#: elf32-spu.c:1031
+#, c-format
+msgid "warning: call to non-function symbol %s defined in %pB"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð·Ð¸Ð² Ð½Ðµ-Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñ�ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ â€ž%pBâ€œ"
 
-#: elf32-spu.c:1885
+#: 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) Ñ�Ðµ Ñ€Ð°Ð·Ð»Ð¸ÐºÑƒÑ˜Ðµ Ð¾Ð´ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ (%u)\n"
+
+#: elf32-spu.c:1911
+#, c-format
+msgid "%pB is not allowed to define %s"
+msgstr "â€ž%pBâ€œ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ â€ž%sâ€œ"
+
+#: elf32-spu.c:1919
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "Ð²Ð¸ Ð½ÐµÐ¼Ð°Ñ‚Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ Ð´Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµÑ‚Ðµ â€ž%sâ€œ Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸"
 
-#: elf32-spu.c:1919
+#: elf32-spu.c:1953
 #, c-format
 msgid "%s in overlay section"
 msgstr "â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°"
 
-#: elf32-spu.c:1948
+#: elf32-spu.c:1982
 msgid "overlay stub relocation overflow"
 msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð¿Ñ€ÐµÐºÑ€Ð¸Ð²Ð°ÑšÐ°"
 
-#: elf32-spu.c:1957
+#: elf32-spu.c:1991 elf64-ppc.c:14727
 msgid "stubs don't match calculated size"
 msgstr "Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸"
 
-#: elf32-spu.c:2539
+#: elf32-spu.c:2574
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð° â€ž%sâ€œ\n"
 
-#: elf32-spu.c:2555
+#: elf32-spu.c:2590
 #, 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:2622
 #, 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:2763
+#, 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:3329
+#, 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:4026
 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:4341
 #, c-format
 msgid "%s duplicated in %s\n"
 msgstr "â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾ Ñƒ â€ž%sâ€œ\n"
 
-#: elf32-spu.c:4308
+#: elf32-spu.c:4345
 #, c-format
 msgid "%s duplicated\n"
 msgstr "â€ž%sâ€œ Ñ˜Ðµ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¾\n"
 
-#: elf32-spu.c:4315
+#: elf32-spu.c:4352
 msgid "sorry, no support for duplicate object files in auto-overlay script\n"
 msgstr "Ð¸Ð·Ð²Ð¸Ð½Ð¸Ñ‚Ðµ, Ð½ÐµÐ¼Ð° Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¸ Ñ�Ð°Ð¼Ð¾-Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°\n"
 
-#: elf32-spu.c:4356
+#: elf32-spu.c:4394
+#, 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:4550
+#, c-format
+msgid "%pB:%pA%s exceeds overlay size\n"
+msgstr "â€ž%pB:%pA%sâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°\n"
+
+#: elf32-spu.c:4691
+msgid "%F%P: auto overlay error: %E\n"
+msgstr "%F%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ�Ð°Ð¼Ð¾Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ°: %E\n"
 
-#: elf32-spu.c:4673
+#: elf32-spu.c:4712
 msgid "Stack size for call graph root nodes.\n"
 msgstr "Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð·Ð° Ð¿Ð¾Ð·Ð¸Ð² Ñ‡Ð²Ð¾Ñ€Ð¾Ð²Ð° ÐºÐ¾Ñ€ÐµÐ½Ð° Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°.\n"
 
-#: elf32-spu.c:4674
+#: elf32-spu.c:4713
 msgid ""
 "\n"
 "Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
@@ -2625,1477 +3603,2413 @@ msgstr ""
 "\n"
 "Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ð·Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ.  Ð�Ð°Ð¿Ð¾Ð¼ÐµÐ½Ðµ: â€ž*â€œ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº, â€žtâ€œ Ð¿Ð¾Ð·Ð¸Ð² Ð¾Ñ�Ñ‚Ð°Ñ‚ÐºÐ°\n"
 
-#: elf32-spu.c:4684
+#: elf32-spu.c:4723
 msgid "Maximum stack required is 0x%v\n"
 msgstr "Ð�Ð°Ñ˜Ð²ÐµÑ›Ð¸ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸Ðº Ñ˜Ðµ 0x%v\n"
 
-#: elf32-spu.c:4775
+#: elf32-spu.c:4742
+msgid "%X%P: stack/lrlive analysis error: %E\n"
+msgstr "%X%P: Ð³Ñ€ÐµÑˆÐºÐ° â€žstack/lrliveâ€œ Ð°Ð½Ð°Ð»Ð¸Ð·Ðµ: %E\n"
+
+#: elf32-spu.c:4745
+msgid "%F%P: can not build overlay stubs: %E\n"
+msgstr "%F%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐµ Ð¿Ñ€ÐµÐºÐ»Ð°Ð¿Ð°ÑšÐ° â€ž%Eâ€œ\n"
+
+#: elf32-spu.c:4814
 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:5050
+#, 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:3648
-msgid "%B: error: unknown mandatory EABI object attribute %d"
-msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾Ð±Ð°Ð²ÐµÐ·Ð°Ð½ â€ž%dâ€œ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ â€žEABIâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚"
+#: elf32-tic6x.c:3498
+#, c-format
+msgid "%pB: error: unknown mandatory 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:3507
+#, c-format
+msgid "%pB: warning: unknown EABI object attribute %d"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%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:1393
+#: elfnn-aarch64.c:9703 elfnn-riscv.c:3216
+#, 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:3591 elf32-v850.c:3830
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insns"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº"
+
+#: elf32-v850.c:3601 elf32-v850.c:3840
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized insn %#x"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%#xâ€œ"
+
+#: elf32-v850.c:3647 elf32-v850.c:3875
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elf32-v850.c:3687
+#, c-format
+msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
+msgstr "%pB: %#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ˜Ðµ Ð½Ð° Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%#<PRIx64>â€œ"
+
+#: elf32-vax.c:540
 #, c-format
 msgid " [nonpic]"
 msgstr " [Ð½Ðµ-Ð¿Ð¸Ñ†]"
 
-#: elf32-vax.c:535
+#: elf32-vax.c:543
 #, c-format
 msgid " [d-float]"
 msgstr " [d-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·]"
 
-#: elf32-vax.c:538
+#: elf32-vax.c:546
 #, c-format
 msgid " [g-float]"
 msgstr " [g-Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·]"
 
-#: elf32-vax.c:656
+#: elf32-vax.c:632
 #, 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:1389
 #, 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:1515
 #, 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:1522
 #, 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:2076 elfnn-ia64.c:2347
 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:1002
+#, c-format
+msgid "%pB(%pA): invalid property table"
+msgstr "%pB(%pA): Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ñ‚Ð°Ð±ÐµÐ»Ð° Ð²Ð»Ð°Ñ�Ð½Ð¸ÑˆÑ‚Ð²Ð°"
 
-#: elf32-xtensa.c:2853 elf32-xtensa.c:2974
+#: elf32-xtensa.c:2734
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
+msgstr "%pB(%pA+%#<PRIx64>): Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%#<PRIx64>)"
+
+#: elf32-xtensa.c:2817 elf32-xtensa.c:2940
 msgid "dynamic relocation in read-only section"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ"
 
-#: elf32-xtensa.c:2950
+#: elf32-xtensa.c:2917
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "Ð¢Ð›Ð¡ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸Ñ… Ð¾Ð´ÐµÑ™Ð°ÐºÐ°"
 
-#: elf32-xtensa.c:3169
+#: elf32-xtensa.c:3130
 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:3436
+#, c-format
+msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
+msgstr "%pB: Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ; Ð¸Ð·Ð»Ð°Ð· Ñ˜Ðµ 0x%x, Ð° ÑƒÐ»Ð°Ð· 0x%x"
+
+#: elf32-xtensa.c:4730 elf32-xtensa.c:4738
+msgid "attempt to convert L32R/CALLX to CALL failed"
+msgstr "Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¿Ñ€ÐµÑ‚Ð²Ð°Ñ€Ð°ÑšÐ° â€žL32R/CALLXâ€œ Ñƒ â€žCALLâ€œ Ð½Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ¾"
 
-#: elf32-xtensa.c:9022
+#: elf32-xtensa.c:6566 elf32-xtensa.c:6645 elf32-xtensa.c:8071
+#, c-format
+msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
+msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð°Ð¼ Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ; Ð²ÐµÑ€Ð¾Ð²Ð°Ñ‚Ð½Ð¾ Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾"
+
+#: elf32-xtensa.c:7812
+#, 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:9670
 msgid "invalid relocation address"
 msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elf32-xtensa.c:9071
+#: elf32-xtensa.c:9761
 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:10907
+#, 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:2001 elf64-alpha.c:2696 elflink.c:15230
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
+
+#: elf64-alpha.c:2453
+#, c-format
+msgid "%pB: .got subsegment exceeds 64K (size %d)"
+msgstr "%pB: Ð¿Ð¾Ð´-Ð¿Ð¾Ð´ÐµÐ¾Ðº â€ž.gotâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ 64K (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ %d)"
+
+#: elf64-alpha.c:2991 elf64-alpha.c:3186
+#, c-format
+msgid "%pB: %pA+%#<PRIx64>: warning: %s relocation against unexpected insn"
+msgstr "%pB: %pA+%#<PRIx64>: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾Ð³ ÑƒÐ»Ð°Ð·Ð½Ð¾Ð³ Ð·Ð½Ð°ÐºÐ°"
+
+#: elf64-alpha.c:4385 elf64-alpha.c:4398
+#, c-format
+msgid "%pB: gp-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€žgpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-alpha.c:4487
+#: elf64-alpha.c:4454
+#, c-format
+msgid "%pB: change in gp: BRSGP %s"
+msgstr "%pB: Ð¸Ð·Ð¼ÐµÐ½Ð° Ñƒ â€žgpâ€œ-Ñƒ: BRSGP %s"
+
+#: elf64-alpha.c:4479 mach-o.c:616 elfnn-riscv.c:616
 msgid "<unknown>"
 msgstr "<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>"
 
-#: elf64-alpha.c:4492
-msgid "%B: !samegp reloc against symbol without .prologue: %s"
-msgstr "%B: â€ž!samegpâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±ÐµÐ· â€ž.prologueâ€œ-Ð°: %s"
+#: elf64-alpha.c:4485
+#, c-format
+msgid "%pB: !samegp reloc against symbol without .prologue: %s"
+msgstr "%pB: â€ž!samegpâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±ÐµÐ· â€ž.prologueâ€œ-Ð°: %s"
+
+#: elf64-alpha.c:4543
+#, c-format
+msgid "%pB: unhandled dynamic relocation against %s"
+msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ"
 
-#: elf64-alpha.c:4549
-msgid "%B: unhandled dynamic relocation against %s"
-msgstr "%B: Ð½ÐµÐ¾Ð±Ñ€Ð°Ñ’ÐµÐ½Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ"
+#: elf64-alpha.c:4578
+#, c-format
+msgid "%pB: pc-relative relocation against undefined weak symbol %s"
+msgstr "%pB: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-alpha.c:4581
-msgid "%B: pc-relative relocation against undefined weak symbol %s"
-msgstr "%B: â€žpcâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð»Ð°Ð±Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-alpha.c:4644
+#, c-format
+msgid "%pB: dtp-relative relocation against dynamic symbol %s"
+msgstr "%pB: â€ždtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: elf64-alpha.c:4645
-msgid "%B: dtp-relative relocation against dynamic symbol %s"
-msgstr "%B: â€ždtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-alpha.c:4669
+#, 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:557
+msgid "internal error: relocation not supported"
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: elf64-alpha.c:4668
-msgid "%B: tp-relative relocation against dynamic symbol %s"
-msgstr "%B: â€žtpâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-gen.c:71
+#, c-format
+msgid "%pB: Relocations in generic ELF (EM: %d)"
+msgstr "%pB: ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñƒ Ð¾Ð¿ÑˆÑ‚ÐµÐ¼ â€žELFâ€œ-Ñƒ (EM: %d)"
 
-#: elf64-hppa.c:2084
+#: elf64-hppa.c:2033
 #, 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:3237
+#, 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: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: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼ â€žbrâ€œ Ð½Ð° %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ; ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ â€žbrlâ€œ Ð¸Ð»Ð¸ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ"
 
-#: elf64-ia64-vms.c:2027 elf32-ia64.c:2278 elf64-ia64.c:2278
+#: elf64-ia64-vms.c:2031 elfnn-ia64.c:2295
 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:3283 elfnn-ia64.c:3678
 #, 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:3293 elfnn-ia64.c:3688
 #, 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:3563 elfnn-ia64.c:3962
+#, 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:3627 elfnn-ia64.c:4030
+#, 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:3686 elfnn-ia64.c:4093
+#, 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:3788 elfnn-ia64.c:4231
+#, 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:3791 elfnn-ia64.c:4234
+#, 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:3794 elfnn-ia64.c:4237
+#, 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:3918 elfnn-ia64.c:4434
 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:3955 elfnn-ia64.c:4472
+#, 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:3972 elfnn-ia64.c:4489
+#, 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:4268 elfnn-ia64.c:4750
+#, 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:4277 elfnn-ia64.c:4759
+#, 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:4286 elfnn-ia64.c:4768
+#, 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:4295 elfnn-ia64.c:4777
+#, 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:4305 elfnn-ia64.c:4787
+#, 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:5152 elflink.c:5141
+#, 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:5159 elflink.c:5148
+#, 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:5175 elflink.c:5165
+#, 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:4095
+#, 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: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:1196
+#: 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:1346
+#, 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:4143
+#, 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:4323
+#, c-format
+msgid "%pB .opd not allowed in ABI version %d"
+msgstr "%pB: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð¿ÑƒÑˆÑ‚ÐµÐ½ Ñƒ â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
 
-#: elf64-ppc.c:5809
-msgid "%B uses unknown e_flags 0x%lx"
-msgstr "â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€že_flagsâ€œ 0x%lx"
+#: elf64-ppc.c:4895
+#, c-format
+msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
+msgstr "%H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¸Ð¼ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð¸ â€žPIEâ€œ-Ð¸Ð¼Ð°\n"
 
-#: elf64-ppc.c:5816
-msgid "%B: ABI version %ld is not compatible with ABI version %ld output"
-msgstr "%B: Ð�Ð‘Ð˜ Ð¸Ð·Ð´Ð°ÑšÐµ %ld Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° Ð�Ð‘Ð˜-Ñ˜ÐµÐ¼ Ð¸Ð·Ð´Ð°ÑšÐ° %ld"
+#: elf64-ppc.c:5305
+#, c-format
+msgid "%pB uses unknown e_flags 0x%lx"
+msgstr "â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€že_flagsâ€œ 0x%lx"
 
-#: elf64-ppc.c:5843
+#: elf64-ppc.c:5313
+#, c-format
+msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
+msgstr "%pB: â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ %ld Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žABIâ€œ Ð¸Ð·Ð´Ð°ÑšÐ° %ld"
+
+#: elf64-ppc.c:5340
 #, 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:6624
+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:6891
+#, c-format
+msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
+msgstr "%pB: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð° â€žR_PPC64_TOCSAVEâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ"
+
+#: elf64-ppc.c:7139
+#, c-format
+msgid "dynreloc miscount for %pB, section %pA"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ° Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð·Ð° â€ž%pBâ€œ, Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: elf64-ppc.c:7228
+#, c-format
+msgid "%pB: .opd is not a regular array of opd entries"
+msgstr "%pB: â€ž.opdâ€œ Ð½Ð¸Ñ˜Ðµ Ñ€ÐµÐ³ÑƒÐ»Ð°Ñ€Ð°Ð½ Ð½Ð¸Ð· ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð°"
+
+#: elf64-ppc.c:7238
+#, c-format
+msgid "%pB: unexpected reloc type %u in .opd section"
+msgstr "%pB: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%uâ€œ Ñƒ â€ž.opdâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+
+#: elf64-ppc.c:7260
+#, c-format
+msgid "%pB: undefined sym `%s' in .opd section"
+msgstr "%pB: Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž.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:7754
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ Ñ�Ð° â€žpower10 pc-relativeâ€œ ÐºÐ¾Ð´Ð¾Ð¼"
+
+#: elf64-ppc.c:7762
+msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--plt-localentryâ€œ Ñ˜Ðµ Ð½Ð°Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð¾ Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð±ÐµÐ· â€žld.soâ€œ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐµ Ð·Ð° Ð¾Ñ‚ÐºÑ€Ð¸Ð²Ð°ÑšÐµ â€žABIâ€œ Ð¿Ñ€ÐµÑ�Ñ‚ÑƒÐ¿Ð°"
 
-#: elf64-ppc.c:8177
+#: elf64-ppc.c:8086
 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:8521 elf64-ppc.c:9234
 #, 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:9191
+#, c-format
+msgid "%H: %s references optimized away TOC entry\n"
+msgstr "%H: â€ž%sâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ Ð½Ð° Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð¾Ð¼ Ð¾Ð´Ñ�Ñ‚Ñ€Ð°ÑšÐµÐ½Ð¸ ÑƒÐ½Ð¾Ñ� Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°\n"
+
+#: elf64-ppc.c:9412
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ˜Ð° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð·Ð° Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ñƒ â€ž%sâ€œ\n"
+
+#: elf64-ppc.c:10239
+#, c-format
+msgid "warning: discarding dynamic section %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜ÐµÐ¼ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#: elf64-ppc.c:11390
+msgid "%P: cannot find opd entry toc for `%pT'\n"
+msgstr "%P: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð° ÑƒÐ½Ð¾Ñ�Ð° Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° Ð·Ð° â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:11438 elf64-ppc.c:11991
+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"
 
-#: elf64-x86-64.c:3787
+#: elf64-ppc.c:11499
+#, c-format
+msgid "long branch stub `%s' offset overflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ð´ÑƒÐ³Ð¾Ð³ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ"
+
+#: elf64-ppc.c:11526
+#, c-format
+msgid "can't find branch stub `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ"
+
+#: elf64-ppc.c:11590 elf64-ppc.c:11859 elf64-ppc.c:14168
+#, c-format
+msgid "%P: linkage table error against `%pT'\n"
+msgstr "%P: Ð³Ñ€ÐµÑˆÐºÐ° Ñ‚Ð°Ð±ÐµÐ»Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:12063
+#, c-format
+msgid "can't build branch stub `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€Ð°Ð½Ðµ â€ž%sâ€œ"
+
+#: elf64-ppc.c:13079
+#, c-format
+msgid "%pB section %pA exceeds stub group size"
+msgstr "â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¿Ñ€ÐµÐ²Ð°Ð·Ð¸Ð»Ð°Ð·Ð¸ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð³Ñ€ÑƒÐ¿Ðµ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ°"
+
+#: elf64-ppc.c:14347
+msgid "__tls_get_addr call offset overflow"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° â€ž__tls_get_addrâ€œ Ð¿Ð¾Ð·Ð¸Ð²Ð°"
+
+#: elf64-ppc.c:14686 elf64-ppc.c:14705
+#, c-format
+msgid "%s offset too large for .eh_frame sdata4 encoding"
+msgstr "â€ž%sâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸Ðº Ð·Ð° â€ž.eh_frame sdata4â€œ ÐºÐ¾Ð´Ð¸Ñ€Ð°ÑšÐµ"
+
+#: elf64-ppc.c:14737
+#, 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"
+
+#: elf64-ppc.c:14744
+#, c-format
+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"
+
+#: elf64-ppc.c:15144
+#, c-format
+msgid "%H: %s used with TLS symbol `%pT'\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:15146
+#, c-format
+msgid "%H: %s used with non-TLS symbol `%pT'\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð¾ Ñ�Ð° Ð½Ðµ-â€žTLSâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð¾Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:15902
+#, 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:15908
+#, 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:16804
+#, c-format
+msgid "%H: %s for indirect function `%pT' unsupported\n"
+msgstr "%H: â€ž%sâ€œ Ð·Ð° Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ â€ž%pTâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: elf64-ppc.c:16889
+#, 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:16944
+#, c-format
+msgid "%P: %pB: %s is not supported for `%pT'\n"
+msgstr "%P: %pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ Ð·Ð° â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:17192
+#, c-format
+msgid "%H: error: %s not a multiple of %u\n"
+msgstr "%H: Ð³Ñ€ÐµÑˆÐºÐ°: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ â€ž%uâ€œ\n"
+
+#: elf64-ppc.c:17215
+#, c-format
+msgid "%H: unresolvable %s against `%pT'\n"
+msgstr "%H: â€ž%sâ€œ Ñ˜Ðµ Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ\n"
+
+#: elf64-ppc.c:17359
+#, c-format
+msgid "%H: %s against `%pT': error %d\n"
+msgstr "%H: â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%pTâ€œ: Ð³Ñ€ÐµÑˆÐºÐ° %d\n"
+
+#: 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â€œ Ð½Ðµ-â€žPLTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ñ˜ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ†Ð¸ Ð¸ ÐºÐ¾Ð¼Ðµ Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�Ñ‚ÑƒÐ¿Ñ™ÐµÐ½Ð¾ Ð¸Ð· Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¾Ð³ (Ð´Ð° Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¸Ð·Ð³Ñ€Ð°Ð´Ð¸Ð¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ Ñ�Ð° â€ž-fPICâ€œ ?)"
+
+#: elf64-sparc.c:478
+#, c-format
+msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER"
+msgstr "%pB: Ñ�Ð°Ð¼Ð¾ Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ñ€Ð¸ â€ž%%g[2367]â€œ Ð¼Ð¾Ð³Ñƒ Ð±Ð¸Ñ‚Ð¸ Ð´ÐµÐºÐ»Ð°Ñ€Ð¸Ñ�Ð°Ð½Ð¸ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÑšÐµÐ¼ â€žSTT_REGISTERâ€œ"
+
+#: elf64-sparc.c:499
+#, 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:523
+#, c-format
+msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€žREGISTERâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€ž%sâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf64-sparc.c:570
+#, c-format
+msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ: â€ž%sâ€œ Ñƒ â€ž%pBâ€œ, Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ â€žREGISTERâ€œ Ñƒ â€ž%pBâ€œ"
+
+#: elf64-sparc.c:702
+#, c-format
+msgid "%pB: linking UltraSPARC specific with HAL specific code"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ ÐºÐ¾Ð´ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð°Ð½ â€žUltraSPARCâ€œ-Ñƒ Ñ�Ð° ÐºÐ¾Ð´Ð¾Ð¼ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð¸Ð¼ â€žHALâ€œ-Ñƒ"
+
+#: elf64-x86-64.c:1417
+msgid "hidden symbol "
+msgstr "Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1420
+msgid "internal symbol "
+msgstr "ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1423 elf64-x86-64.c:1427
+msgid "protected symbol "
+msgstr "Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1429
+msgid "symbol "
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» "
+
+#: elf64-x86-64.c:1435
+msgid "undefined "
+msgstr "Ð½ÐµÐ¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ "
+
+#: elf64-x86-64.c:1445
+msgid "a shared object"
+msgstr "Ð´ÐµÑ™ÐµÐ½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚"
+
+#: elf64-x86-64.c:1447
 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:1452
+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:1454
+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:1456
+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:1460
+#, 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:1968
 #, 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:2124
 #, 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:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2086
 #, 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:2992
+#, 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:3006
+#, 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:3283
+#, 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:3417 elflink.c:13609
+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:4101
+msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žGOTPCRELâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾Ð²ÐµÐ¶Ð¸Ñ‚Ðµ Ñ�Ð° â€ž--no-relaxâ€œ\n"
 
-#: elflink.c:1763
-msgid "%B: unexpected redefinition of indirect versioned symbol `%s'"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°ÑšÐµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+#: elf64-x86-64.c:4259
+#, 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:4322
+#, c-format
+msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n"
+msgstr "%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ€Ð°Ð·Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð³Ñ€Ð°Ð½Ðµ Ñƒ â€žPLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ\n"
+
+#: elf64-x86-64.c:4375
+#, c-format
+msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"
+msgstr "%F%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¾Ð³ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ð° Ñƒ â€žGOT PLTâ€œ ÑƒÐ½Ð¾Ñ�Ñƒ Ð·Ð° â€ž%sâ€œ\n"
 
-#: elflink.c:2066
-msgid "%B: version node not found for symbol %s"
-msgstr "%B: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‡Ð²Ð¾Ñ€ Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: elfcode.h:329
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ�Ðµ ÑˆÐ¸Ñ€Ð¸ Ð¿Ñ€ÐµÐºÐ¾ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ"
 
-#: 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â€œ"
+#: elfcode.h:775
+#, c-format
+msgid "warning: %pB has a corrupt string table index - ignoring"
+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â€œ ÐºÐ°Ð´Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+#: elfcode.h:819
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ð¸Ð¼Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ñ�Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµÐ¼"
 
-#: elflink.c:2358
-msgid "%B: relocation size mismatch in %B section %A"
-msgstr "%B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ñƒ â€ž%Bâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: elfcode.h:1244
+#, c-format
+msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
+msgstr "%pB: Ð±Ñ€Ð¾Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° (%<PRId64>) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð±Ñ€Ð¾Ñ˜Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%ld)"
+
+#: elfcore.h:308
+#, c-format
+msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ð¾: Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð° >= %<PRIx64>, Ð½Ð°Ñ’Ð¾Ñ…: %<PRIx64>"
+
+#: elflink.c:1384
+#, 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:1390
+#, c-format
+msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB"
+msgstr "%s: â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ â€ž%pBâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð½Ðµ-â€žTLSâ€œ ÑƒÐ¿ÑƒÑ‚Ð¸ Ñƒ â€ž%pBâ€œ"
+
+#: elflink.c:1396
+#, 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:1402
+#, 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:2114
+#, c-format
+msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°ÑšÐµ Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾ Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elflink.c:2496
+#, c-format
+msgid "%pB: version node not found for symbol %s"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ñ‡Ð²Ð¾Ñ€ Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+
+#: elflink.c:2587
+#, c-format
+msgid "%pB: bad reloc symbol index (%#<PRIx64> >= %#lx) for offset %#<PRIx64> in section `%pA'"
+msgstr "%pB: Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° (%#<PRIx64> >= %#lx) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ"
+
+#: 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: Ð½Ðµ-Ð½ÑƒÐ»Ñ‚Ð¸ Ð¸Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° (%#<PRIx64>) Ð·Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %#<PRIx64> Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ°Ð´Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½ÐµÐ¼Ð° Ñ‚Ð°Ð±ÐµÐ»Ñƒ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elflink.c:2788
+#, c-format
+msgid "%pB: relocation size mismatch in %pB section %pA"
+msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ñƒ â€ž%pBâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
 
-#: elflink.c:2640
+#: elflink.c:3117
 #, 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:3177
+msgid "%P: copy reloc against protected `%pT' is dangerous\n"
+msgstr "%P: ÑƒÐ¼Ð½Ð¾Ð¶Ð¸ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¾Ð³ â€ž%pTâ€œ Ñ˜Ðµ Ð¾Ð¿Ð°Ñ�Ð½Ð¾\n"
 
-#: elflink.c:5824
+#: elflink.c:4117
+#, c-format
+msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
+msgstr "Ð½Ð°Ñ’Ð¾Ñ… Ð¸Ð·Ð¼ÐµÑšÐµÐ½Ð¸ â€žELFâ€œ Ð¼Ð°ÑˆÐ¸Ð½Ñ�ÐºÐ¸ ÐºÐ¾Ð´ (%d) Ñƒ â€ž%pBâ€œ, Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… â€ž%dâ€œ"
+
+#: elflink.c:4598
+#, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¸Ð·Ð´Ð°ÑšÐ° %lx (Ð½Ð°Ñ˜Ð². %lx)"
+
+#: elflink.c:4666
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: â€ž%sâ€œ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñƒ Ð¸Ð½Ð´ÐµÐºÑ�Ñƒ %lu (>= sh_info %lu)"
+
+#: elflink.c:4814
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¾ Ð¸Ð·Ð´Ð°ÑšÑƒ"
+
+#: elflink.c:4852
+#, c-format
+msgid "%pB: %s: invalid version %u (max %d)"
+msgstr "%pB: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %u (Ð½Ð°Ñ˜Ð². %d)"
+
+#: elflink.c:4889
+#, c-format
+msgid "%pB: %s: invalid needed version %d"
+msgstr "%pB: %s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð½Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ %d"
+
+#: elflink.c:5300
+#, c-format
+msgid "%pB: undefined reference to symbol '%s'"
+msgstr "%pB: Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° ÑƒÐ¿ÑƒÑ‚Ð° ÐºÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ â€ž%sâ€œ"
+
+#: elflink.c:6366
+#, c-format
+msgid "%pB: stack size specified and %s set"
+msgstr "%pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ð¸ â€ž%sâ€œ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð°"
+
+#: elflink.c:6370
+#, c-format
+msgid "%pB: %s not absolute"
+msgstr "%pB: â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ð¾"
+
+#: elflink.c:6567
 #, 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:7139
+#, c-format
+msgid "%pB: .preinit_array section is not allowed in DSO"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž.preinit_arrayâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½ Ñƒ â€žDSOâ€œ-Ñƒ"
 
-#: elflink.c:7657
+#: elflink.c:8697
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° â€ž%sâ€œ ÑƒÐ¿ÑƒÑ‚Ð° Ñƒ Ñ�Ð»Ð¾Ð¶ÐµÐ½Ð¾Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ñƒ: %s"
 
-#: elflink.c:7811
+#: elflink.c:8860 elflink.c:8868
+msgid "division by zero"
+msgstr "Ð´ÐµÑ™ÐµÑšÐµ Ð½ÑƒÐ»Ð¾Ð¼"
+
+#: elflink.c:8882
 #, 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: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð¸Ð¼Ð°Ñ˜Ñƒ Ð²Ð¸ÑˆÐµ Ð¾Ð´ Ñ˜ÐµÐ´Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+#. PR 21524: Let the user know if a symbol was removed by garbage collection.
+#: elflink.c:9220
+#, c-format
+msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ¿ÑƒÑ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ ÑƒÐºÐ»Ð¾ÑšÐµÐ½ Ñ�ÐºÑƒÐ¿Ñ™Ð°ÑšÐµÐ¼ Ð¾Ñ‚Ð¿Ð°Ð´Ð°"
 
-#: elflink.c:8196 elflink.c:8250
-msgid "%B: Unable to sort relocs - they are of an unknown size"
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ñ�Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
+#: elflink.c:9223
+#, c-format
+msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled"
+msgstr "%pB:%pA: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ â€ž--gc-keep-exportedâ€œ"
 
-#: elflink.c:8301
-msgid "Not enough memory to sort relocations"
-msgstr "Ð�ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ñ€ÐµÑ’Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
+#: elflink.c:9468 elflink.c:9486 elflink.c:9525 elflink.c:9543
+#, c-format
+msgid "%pB: unable to sort relocs - they are in more than one size"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð¸Ð¼Ð°Ñ˜Ñƒ Ð²Ð¸ÑˆÐµ Ð¾Ð´ Ñ˜ÐµÐ´Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
 
-#: elflink.c:8494
-msgid "%B: Too many sections: %d (>= %d)"
-msgstr "%B: ÐŸÑ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)"
+#. The section size is not divisible by either -
+#. something is wrong.
+#: elflink.c:9502 elflink.c:9559
+#, c-format
+msgid "%pB: unable to sort relocs - they are of an unknown size"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€” Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ñ�Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
 
-#: elflink.c:8775
-msgid "%B: internal symbol `%s' in %B is referenced by DSO"
-msgstr "%B: Ð½Ð° ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
+#: elflink.c:9611
+msgid "not enough memory to sort relocations"
+msgstr "Ð½ÐµÐ¼Ð° Ð´Ð¾Ð²Ð¾Ñ™Ð½Ð¾ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð·Ð° Ñ€ÐµÑ’Ð°ÑšÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°"
 
-#: elflink.c:8777
-msgid "%B: hidden symbol `%s' in %B is referenced by DSO"
-msgstr "%B: Ð½Ð° Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
+#: elflink.c:9955
+#, c-format
+msgid "%pB: too many sections: %d (>= %d)"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ°: %d (>= %d)"
 
-#: elflink.c:8779
-msgid "%B: local symbol `%s' in %B is referenced by DSO"
-msgstr "%B: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%Bâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
+#: elflink.c:10231
+#, c-format
+msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: Ð½Ð° ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
 
-#: elflink.c:8890
-msgid "%B: could not find output section %A for input section %A"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð·Ð° ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: elflink.c:10234
+#, c-format
+msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: Ð½Ð° Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
 
-#: elflink.c:9013
-msgid "%B: protected symbol `%s' isn't defined"
-msgstr "%B: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+#: elflink.c:10237
+#, c-format
+msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
+msgstr "%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ â€ž%pBâ€œ ÑƒÐ¿ÑƒÑ›ÑƒÑ˜Ðµ â€žDSOâ€œ"
 
-#: elflink.c:9015
-msgid "%B: internal symbol `%s' isn't defined"
-msgstr "%B: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+#: elflink.c:10323
+#, c-format
+msgid "%pB: could not find output section %pA for input section %pA"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð·Ð° ÑƒÐ»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
 
-#: elflink.c:9017
-msgid "%B: hidden symbol `%s' isn't defined"
-msgstr "%B: Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+#: elflink.c:10477
+#, c-format
+msgid "%pB: protected symbol `%s' isn't defined"
+msgstr "%pB: Ð·Ð°ÑˆÑ‚Ð¸Ñ›ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: elflink.c:9043
-msgid "%B: No symbol version section for versioned symbol `%s'"
-msgstr "%B: Ð�ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¸Ð·Ð´Ð°ÑšÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
+#: elflink.c:10480
+#, c-format
+msgid "%pB: internal symbol `%s' isn't defined"
+msgstr "%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: elflink.c:9598
-msgid "error: %B: size of section %A is not multiple of address size"
-msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %B: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ"
+#: elflink.c:10483
+#, c-format
+msgid "%pB: hidden symbol `%s' isn't defined"
+msgstr "%pB: Ñ�ÐºÑ€Ð¸Ð²ÐµÐ½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: 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:10515
+#, c-format
+msgid "%pB: no symbol version section for versioned symbol `%s'"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¸Ð·Ð´Ð°ÑšÐ° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ð¾Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ"
 
-#: 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:10914
+#, c-format
+msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž--enable-non-contiguous-regionsâ€œ Ð¾Ð´Ð±Ð°Ñ†ÑƒÑ˜Ðµ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œ\n"
 
-#: elflink.c:10374
+#: elflink.c:11168
 #, c-format
-msgid "%A has both ordered and unordered sections"
-msgstr "â€ž%Aâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº"
+msgid "error: %pB: size of section %pA is not multiple of address size"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ"
 
-#: elflink.c:10982
-msgid "%B: file class %s incompatible with %s"
-msgstr "%B: ÐºÐ»Ð°Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° â€ž%sâ€œ"
+#: elflink.c:11213
+#, 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:11303 elflink.c:11347
-msgid "%B: could not find output section %s"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¸Ð·Ð»Ð°Ð·Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+#: elflink.c:11971
+#, c-format
+msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections"
+msgstr "â€ž%pAâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ] Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ [â€ž%pAâ€œ Ñƒ â€ž%pBâ€œ] Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: elflink.c:11977
+#, c-format
+msgid "%pA has both ordered and unordered sections"
+msgstr "â€ž%pAâ€œ Ð¸Ð¼Ð° Ð¸ ÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¸ Ð½ÐµÑƒÑ€ÐµÑ’ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: elflink.c:12047
+msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+msgstr "%F%P: â€ž%pAâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð¾ Ð¾Ð´ÐµÑ™ÐºÐµ Ñ�Ð° Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµÐ¼\n"
+
+#: elflink.c:12121
+#, c-format
+msgid "%pB: no symbol found for import library"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° ÑƒÐ²Ð¾Ð·Ð½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ"
+
+#: elflink.c:12771
+#, c-format
+msgid "%pB: file class %s incompatible with %s"
+msgstr "%pB: ÐºÐ»Ð°Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° â€ž%sâ€œ"
 
-#: elflink.c:11308
+#: elflink.c:13031
+#, c-format
+msgid "%pB: failed to generate import library"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ ÑƒÐ²Ð¾Ð·Ð½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ"
+
+#: elflink.c:13157
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ"
 
-#: elflink.c:11353
+#: elflink.c:13205
 #, 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:13298
+msgid "%P%X: read-only segment has dynamic relocations\n"
+msgstr "%P%X: Ð¾Ð´ÐµÑ™Ð°Ðº Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ Ð¸Ð¼Ð° Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°\n"
+
+#: elflink.c:13301
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ Ð´ÐµÑ™ÐµÐ½Ð¾Ð¼ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ñƒ\n"
+
+#: elflink.c:13304
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ñ‚Ð²Ð°Ñ€Ð°Ð¼ â€žDT_TEXTRELâ€œ Ñƒ â€žPIEâ€œ\n"
 
-#: elflink.c:11545
+#: elflink.c:13437
 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:13842
+msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n"
+msgstr "%F%P: %pB(%pA): Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð°Ð½ Ñ˜Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½-Ð½Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð·Ð° â€ž--gc-sectionsâ€œ\n"
+
+#: elflink.c:14305
+#, c-format
+msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
+msgstr "%pB: %pA+%#<PRIx64>: Ð½Ð¸Ñ�Ð°Ð¼ Ð½Ð°ÑˆÐ°Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ°Ð² Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð·Ð° â€žINHERITâ€œ"
+
+#: elflink.c:14346
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žVTENTRYâ€œ ÑƒÐ½Ð¾Ñ�"
+
+#: elflink.c:14489
+#, c-format
+msgid "unrecognized INPUT_SECTION_FLAG %s\n"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ â€žINPUT_SECTION_FLAG %sâ€œ\n"
+
+#: elflink.c:15236
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
 
-#: elflink.c:12200
-msgid "Warning: gc-sections option ignored"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð¿Ñ†Ð¸Ñ˜Ð° â€žgcâ€œ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° Ñ˜Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÐµÐ½Ð°"
+#: elflink.c:15325
+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"
 
-#: elflink.c:12489
+#: elfxx-aarch64.c:477
 #, c-format
-msgid "Unrecognized INPUT_SECTION_FLAG %s\n"
-msgstr "â€žINPUT_SECTION_FLAG %sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾\n"
+msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ñ�Ð»Ð°Ð±Ð¾ â€žTLSâ€œ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð° Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ð° Ð¸ Ð¼Ð¾Ð¶Ð´Ð° Ð½ÐµÑ›Ðµ Ñ€Ð°Ð´Ð¸Ñ‚Ð¸ ÐºÐ°Ð¾ ÑˆÑ‚Ð¾ Ñ�Ðµ Ð¾Ñ‡ÐµÐºÑƒÑ˜Ðµ"
 
-#: elfxx-mips.c:1419
+#: elfxx-aarch64.c:738 elfnn-aarch64.c:9901 elfnn-aarch64.c:9908
+#, 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:758 elfxx-x86.c:2629
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð“Ð�Ð£ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð°\n"
+
+#: elfxx-aarch64.c:762 elfxx-x86.c:2634
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° â€žAArch64â€œ ÐºÐ¾Ñ€Ð¸ÑˆÑ›ÐµÐ½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%x>"
+
+#: elfxx-mips.c:1505
 msgid "static procedure (no name)"
 msgstr "Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº (Ð±ÐµÐ· Ð½Ð°Ð·Ð¸Ð²Ð°)"
 
-#: elfxx-mips.c:5476
+#: elfxx-mips.c:5780
 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:6545
+msgid "%X%H: unsupported JALX to the same ISA mode\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žJALXâ€œ Ñƒ Ð¸Ñ�Ñ‚Ð¾Ð¼ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ\n"
+
+#: elfxx-mips.c:6578
+msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�ÐºÐ¾Ðº Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð°; Ñ€Ð°Ð·Ð¼Ð¾Ñ‚Ñ€Ð¸Ñ‚Ðµ Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐµ Ñ�Ð° ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½Ð¸Ð¼ Ð¼ÐµÑ’ÑƒÐ¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐµÐ¼\n"
+
+#: elfxx-mips.c:6623
+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:6635
+msgid "%X%H: unsupported branch between ISA modes\n"
+msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° Ð³Ñ€Ð°Ð½Ð° Ð¸Ð·Ð¼ÐµÑ’Ñƒ ISA Ñ€ÐµÐ¶Ð¸Ð¼Ð°\n"
+
+#: elfxx-mips.c:7264
+#, c-format
+msgid "%pB: incorrect `.reginfo' section size; expected %<PRIu64>, got %<PRIu64>"
+msgstr "%pB: Ð½ÐµÑ‚Ð°Ñ‡Ð½Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° â€ž.reginfoâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°; Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %<PRIu64>, Ð°Ð»Ð¸ Ð´Ð¾Ð±Ð¸Ñ… %<PRIu64>"
+
+#: elfxx-mips.c:7308 elfxx-mips.c:7545
+#, c-format
+msgid "%pB: warning: bad `%s' option size %u smaller than its header"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð»Ð¾ÑˆÐ° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð¿Ñ†Ð¸Ñ˜Ðµ â€ž%sâ€œ %u Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°"
+
+#: elfxx-mips.c:8352 elfxx-mips.c:8478
+#, c-format
+msgid "%pB: warning: cannot determine the target function for stub section `%s'"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ð´Ñ€ÐµÐ´Ð¸Ð¼ Ñ†Ð¸Ñ™Ð½Ñƒ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ñƒ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ"
+
+#: elfxx-mips.c:8610
+#, c-format
+msgid "%pB: malformed reloc detected for section %s"
+msgstr "%pB: Ð¾Ñ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#: elfxx-mips.c:8709
+#, c-format
+msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
+msgstr "%pB: â€žGOTâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#<PRIx64> Ð½Ð¸Ñ˜Ðµ Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ Ñƒ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð¸Ð¼"
+
+#: elfxx-mips.c:8849
+#, c-format
+msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
+msgstr "%pB: â€žCALL16â€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð° %#<PRIx64> Ð½Ð¸Ñ˜Ðµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elfxx-mips.c:9152
+#, 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:9278
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "â€žIFUNCâ€ž Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€“ â€žIFUNCSâ€œ Ð½Ð¸Ñ�Ñƒ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ðµ"
+
+#: elfxx-mips.c:9281
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "Ð½Ðµ-Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñƒ Ñ‚Ð°Ð±ÐµÐ»Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐ¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: elfxx-mips.c:8977
+#: elfxx-mips.c:9501
 #, 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:10435
+#, 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:10016
+#: elfxx-mips.c:10575
 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:10594
+msgid "cannot convert a jump to JALX for a non-word-aligned address"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ñ�ÐºÐ¾Ðº Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
+
+#: elfxx-mips.c:10597
+msgid "jump to a non-word-aligned address"
+msgstr "Ñ�ÐºÐ¾Ðº Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
+
+#: elfxx-mips.c:10598
+msgid "jump to a non-instruction-aligned address"
+msgstr "Ñ�ÐºÐ¾Ðº Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼"
+
+#: elfxx-mips.c:10601
+msgid "cannot convert a branch to JALX for a non-word-aligned address"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð³Ñ€Ð°Ð½Ñƒ Ñƒ â€žJALXâ€œ Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ñ€ÐµÑ‡Ñ˜Ñƒ"
+
+#: elfxx-mips.c:10603
+msgid "branch to a non-instruction-aligned address"
+msgstr "Ð³Ñ€Ð°Ð½Ð° Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ñƒ Ð½Ðµ-Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð¾Ð¼"
+
+#: elfxx-mips.c:10605
+msgid "PC-relative load from unaligned address"
+msgstr "â€žPCâ€œ-Ð¾Ð´Ð½Ð¾Ñ�Ð½Ð¸ ÑƒÑ‚Ð¾Ð²Ð°Ñ€ Ð¸Ð· Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ"
+
+#: elfxx-mips.c:10905
+#, 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:11020 elfxx-mips.c:11607
+#, c-format
+msgid "%pB: `%pA' offset of %<PRId64> from `%pA' beyond the range of ADDIUPC"
+msgstr "%pB: â€ž%pAâ€œ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ %<PRId64> Ð¸Ð· â€ž%pAâ€œ Ð¸Ð·Ð° Ð¾Ð¿Ñ�ÐµÐ³Ð° â€žADDIUPCâ€œ"
+
+#: elfxx-mips.c:11579
+#, 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:14535
+#, c-format
+msgid "%pB: unknown architecture %s"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° â€ž%sâ€œ"
+
+#: elfxx-mips.c:15069
+#, c-format
+msgid "%pB: illegal section name `%pA'"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð½Ð°Ð·Ð¸Ð² Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ"
+
+#: elfxx-mips.c:15346
+#, c-format
+msgid "%pB: warning: linking abicalls files with non-abicalls files"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð° Ñ�Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð° Ð½Ðµ-Ð°Ð±Ð¸Ð¿Ð¾Ð·Ð¸Ð²Ð°"
+
+#: elfxx-mips.c:15363
+#, c-format
+msgid "%pB: linking 32-bit code with 64-bit code"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ 32-Ð±Ð¸Ñ‚Ð½Ð¸ ÐºÐ¾Ð´ Ñ�Ð° 64-Ð±Ð¸Ñ‚Ð½Ð¸Ð¼ ÐºÐ¾Ð´Ð¾Ð¼"
+
+#: elfxx-mips.c:15395 elfxx-mips.c:15461 elfxx-mips.c:15476
+#, c-format
+msgid "%pB: linking %s module with previous %s modules"
+msgstr "%pB: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfxx-mips.c:15419
+#, c-format
+msgid "%pB: ABI mismatch: linking %s module with previous %s modules"
+msgstr "%pB: â€žABIâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfxx-mips.c:15444
+#, c-format
+msgid "%pB: ASE mismatch: linking %s module with previous %s modules"
+msgstr "%pB: â€žASEâ€œ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð¿Ð¾Ð²ÐµÐ·ÑƒÑ˜ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð° Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¸Ð¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
+
+#: elfxx-mips.c:15578
+#, 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:15584
+#, 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:15590
+#, 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:15604
+#, c-format
+msgid "warning: %pB uses %s (set by %pB), %pB uses %s"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ (Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾ Ñ�Ð° â€ž%pBâ€œ), â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
+
+#: elfxx-mips.c:15623
+#, 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:15635
+#, 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:15644
+#, 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:15706
+#, c-format
+msgid "%pB: endianness incompatible with that of the selected emulation"
+msgstr "%pB: ÐºÑ€Ð°Ñ˜ÑšÐ¾Ñ�Ñ‚ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ"
+
+#: elfxx-mips.c:15720
+#, c-format
+msgid "%pB: ABI is incompatible with that of the selected emulation"
+msgstr "%pB: â€žABIâ€œ Ð½Ð¸Ñ˜Ðµ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð° Ñ�Ð° Ð¾Ð½Ð¾Ð¼ Ð¸Ð·Ð°Ð±Ñ€Ð°Ð½Ðµ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ"
+
+#: elfxx-mips.c:15773
+#, c-format
+msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ ISA Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
+
+#: elfxx-mips.c:15778
+#, 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:15782
+#, c-format
+msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾ â€žASEâ€œ Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
+
+#: elfxx-mips.c:15789
+#, c-format
+msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐ° Ð¸Ð·Ð¼ÐµÑ’Ñƒ â€že_flagsâ€œ Ð¸ â€ž.MIPS.abiflagsâ€œ"
+
+#: elfxx-mips.c:15793
+#, 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:15984
+msgid "-mips32r2 -mfp64 (12 callee-saved)"
+msgstr "-mips32r2 -mfp64 (12 Ð¿Ð¾Ð·Ð¸Ð²Ð°Ð¾Ñ†Ð°-Ñ�Ð°Ñ‡ÑƒÐ²Ð°Ð½Ð¾)"
+
+#: elfxx-mips.c:16046 elfxx-mips.c:16057
+msgid "None"
+msgstr "Ð�Ð¸ÑˆÑ‚Ð°"
+
+#: elfxx-mips.c:16048 elfxx-mips.c:16117
+msgid "Unknown"
+msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾"
+
+#: elfxx-mips.c:16128
+#, c-format
+msgid "Hard or soft float\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¸Ð»Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·\n"
+
+#: elfxx-mips.c:16131
+#, c-format
+msgid "Hard float (double precision)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚)\n"
+
+#: elfxx-mips.c:16134
+#, c-format
+msgid "Hard float (single precision)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (Ñ˜ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ° Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚)\n"
+
+#: elfxx-mips.c:16137
+#, c-format
+msgid "Soft float\n"
+msgstr "Ð¡Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·\n"
+
+#: elfxx-mips.c:16140
+#, c-format
+msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (â€žMIPS32r2â€œ 64-Ð±Ð¸Ñ‚Ð° â€žFPU 12 callee-savedâ€œ)\n"
+
+#: elfxx-mips.c:16143
+#, c-format
+msgid "Hard float (32-bit CPU, Any FPU)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, Ð±Ð¸Ð»Ð¾ ÐºÐ¾Ñ˜Ð¸ â€žFPUâ€œ)\n"
 
-#: elfxx-mips.c:14958
+#: elfxx-mips.c:16146
+#, c-format
+msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ð¸Ñ‚Ð½Ð¸ â€žFPUâ€œ)\n"
+
+#: elfxx-mips.c:16149
+#, c-format
+msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
+msgstr "Ð¥Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¾ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¼ Ð·Ð°Ñ€ÐµÐ·Ñƒ Ñ�Ð°Ð³Ð»Ð°Ñ�Ð½Ð¾ (32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ð¸Ñ‚Ð½Ð¸ â€žFPUâ€œ)\n"
+
+#: elfxx-mips.c:16181
 #, c-format
 msgid " [abi=O32]"
 msgstr " [Ð°Ð±Ð¸=O32]"
 
-#: elfxx-mips.c:14960
+#: elfxx-mips.c:16183
 #, c-format
 msgid " [abi=O64]"
 msgstr " [Ð°Ð±Ð¸=O64]"
 
-#: elfxx-mips.c:14962
+#: elfxx-mips.c:16185
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [Ð°Ð±Ð¸=EABI32]"
 
-#: elfxx-mips.c:14964
+#: elfxx-mips.c:16187
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [Ð°Ð±Ð¸=EABI64]"
 
-#: elfxx-mips.c:14966
+#: elfxx-mips.c:16189
 #, c-format
 msgid " [abi unknown]"
 msgstr " [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾]"
 
-#: elfxx-mips.c:14968
+#: elfxx-mips.c:16191
 #, c-format
 msgid " [abi=N32]"
 msgstr " [Ð°Ð±Ð¸=N32]"
 
-#: elfxx-mips.c:14970
+#: elfxx-mips.c:16193
 #, c-format
 msgid " [abi=64]"
 msgstr " [Ð°Ð±Ð¸=64]"
 
-#: elfxx-mips.c:14972
+#: elfxx-mips.c:16195
 #, c-format
 msgid " [no abi set]"
 msgstr " [Ð°Ð±Ð¸ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´ÐµÑˆÐµÐ½Ð¾]"
 
-#: elfxx-mips.c:14993
+#: elfxx-mips.c:16220
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð˜Ð¡Ð�]"
 
-#: elfxx-mips.c:15013
+#: elfxx-mips.c:16240
 #, c-format
 msgid " [not 32bitmode]"
 msgstr " [Ð½Ð¸Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ñ€ÐµÐ¶Ð¸Ð¼]"
 
-#: elfxx-sparc.c:640
+#: elfxx-riscv.c:1201
 #, c-format
-msgid "invalid relocation type %d"
-msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "x ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ñ�Ð° Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð°"
 
-#: elfxx-tilegx.c:4433
-msgid "%B: Cannot link together %s and %s objects."
-msgstr "%B: Ð�Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ."
+#: elfxx-riscv.c:1205
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð¸Ð·Ð´Ð°ÑšÐ° Ð·Ð° ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
 
-#: i386linux.c:418 m68klinux.c:421 sparclinux.c:414
+#: elfxx-riscv.c:1279
 #, c-format
-msgid "Output file requires shared library `%s'\n"
-msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%sâ€œ\n"
+msgid "-march=%s: expect number after `%dp'"
+msgstr "-march=%s: Ð¾Ñ‡ÐµÐºÑƒÑ˜ÐµÐ¼ Ð±Ñ€Ð¾Ñ˜ Ð½Ð°ÐºÐ¾Ð½ â€ž%dpâ€œ"
 
-#: i386linux.c:426 m68klinux.c:429 sparclinux.c:422
+#: elfxx-riscv.c:1367
 #, c-format
-msgid "Output file requires shared library `%s.so.%s'\n"
-msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%s.so.%sâ€œ\n"
+msgid "-march=%s: rv%de is not a valid base ISA"
+msgstr "-march=%s: â€žrv%deâ€œ Ð½Ð¸Ñ˜Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð±Ð°Ð·Ð° ISA"
 
-#: i386linux.c:613 i386linux.c:663 m68klinux.c:618 m68klinux.c:666
-#: sparclinux.c:609 sparclinux.c:659
+#: elfxx-riscv.c:1397
 #, c-format
-msgid "Symbol %s not defined for fixups\n"
-msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ\n"
+msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
+msgstr "-march=%s: Ð¿Ñ€Ð²Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ð¼Ð¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ â€žeâ€œ, â€žiâ€œ Ð¸Ð»Ð¸ â€žgâ€œ"
 
-#: i386linux.c:687 m68klinux.c:690 sparclinux.c:683
-msgid "Warning: fixup count mismatch\n"
-msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°\n"
+#: elfxx-riscv.c:1422
+#, c-format
+msgid "-march=%s: unknown standard ISA extension `%c'"
+msgstr "-march=%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%câ€œ"
 
-#: ieee.c:158
+#: elfxx-riscv.c:1426
 #, c-format
-msgid "%s: string too long (%d chars, max 65535)"
-msgstr "%s: Ð½Ð¸Ñ�ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð° (%d Ð·Ð½Ð°ÐºÐ°, Ð½Ð°Ñ˜Ð². 65535)"
+msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
+msgstr "-march=%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¾ ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%câ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ ÐºÐ°Ð½Ð¾Ð½Ñ�ÐºÐ¾Ð¼ Ð¿Ð¾Ñ€ÐµÑ‚ÐºÑƒ"
 
-#: ieee.c:285
+#: elfxx-riscv.c:1544
 #, c-format
-msgid "%s: unrecognized symbol `%s' flags 0x%x"
-msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ 0x%x"
+msgid "-march=%s: unknown %s ISA extension `%s'"
+msgstr "-march=%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ %s ISA Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
 
-#: ieee.c:791
-msgid "%B: unimplemented ATI record %u for symbol %u"
-msgstr "%B: Ð½ÐµÐ¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð�Ð¢Ð˜ Ð·Ð°Ð¿Ð¸Ñ� â€ž%uâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%uâ€œ"
+#: elfxx-riscv.c:1555
+#, c-format
+msgid "-march=%s: duplicate %s ISA extension `%s'"
+msgstr "-march=%s: Ð´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÐºÐ¾ â€ž%s ISAâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ"
 
-#: ieee.c:815
-msgid "%B: unexpected ATN type %d in external part"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð�Ð¢Ð� Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ Ñƒ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð¼ Ð´ÐµÐ»Ñƒ"
+#: elfxx-riscv.c:1565
+#, c-format
+msgid "-march=%s: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'"
+msgstr "-march=%s: â€ž%s ISAâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð°Ð·Ð±ÑƒÑ‡Ð½Ð¸Ð¼ Ñ€ÐµÐ´Ð¾Ð¼.  ÐœÐ¾Ñ€Ð° Ð±Ð¸Ñ‚Ð¸ Ð¿Ñ€Ðµ â€ž%sâ€œ"
 
-#: ieee.c:837
-msgid "%B: unexpected type after ATN"
-msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð½Ð°ÐºÐ¾Ð½ Ð�Ð¢Ð�-Ð°"
+#: elfxx-riscv.c:1581
+#, c-format
+msgid "-march=%s: %s ISA extension must separate with _"
+msgstr "-march=%s: â€ž%s ISAâ€œ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ Ñ�Ðµ Ð¼Ð¾Ñ€Ð° Ñ€Ð°Ð·Ð´Ð²Ð¾Ñ˜Ð¸Ñ‚Ð¸ Ñ�Ð° â€ž_â€œ"
 
-#: ihex.c:230
-msgid "%B:%d: unexpected character `%s' in Intel Hex file"
-msgstr "%B:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: elfxx-riscv.c:1799
+#, c-format
+msgid "-march=%s: ISA string cannot contain uppercase letters"
+msgstr "-march=%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ‚Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ�Ð»Ð¾Ð²Ð°"
+
+#: elfxx-riscv.c:1825
+#, c-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr "-march=%s: ISA Ð½Ð¸Ñ�ÐºÐ° Ð¼Ð¾Ñ€Ð° Ð¿Ð¾Ñ‡ÐµÑ‚Ð¸ Ñ�Ð° â€žrv32â€œ Ð¸Ð»Ð¸ â€žrv64â€œ"
+
+#: elfxx-riscv.c:1851
+#, c-format
+msgid "-march=%s: unexpected ISA string at end: %s"
+msgstr "-march=%s: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° ISA Ð½Ð¸Ñ�ÐºÐ° Ð½Ð° ÐºÑ€Ð°Ñ˜Ñƒ: %s"
+
+#: elfxx-riscv.c:1865
+#, c-format
+msgid "-march=%s: rv32e does not support the `f' extension"
+msgstr "-march=%s: â€žrv32eâ€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€žfâ€œ"
+
+#: elfxx-riscv.c:1873
+#, c-format
+msgid "-march=%s: rv32 does not support the `q' extension"
+msgstr "-march=%s: â€žrv32â€œ Ð½Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð²Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÑšÐµ â€ž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: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€žSTT_GNU_IFUNCâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ â€ž%sâ€œ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸"
 
-#: ihex.c:337
-msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ (Ð¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ñ… %u, Ð½Ð°Ñ’Ð¾Ñ… %u)"
+#: elfxx-tilegx.c:4126
+#, c-format
+msgid "%pB: cannot link together %s and %s objects"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ Ð·Ð°Ñ˜ÐµÐ´Ð½Ð¾ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ðµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ"
+
+#: elfxx-x86.c:976
+#, 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:1058
+msgid "%P: %pB: warning: relocation in read-only section `%pA'\n"
+msgstr "%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%pAâ€œ ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ\n"
+
+#: elfxx-x86.c:2313
+#, c-format
+msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ x86 Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾ (0x%x) Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ: 0x%x>"
+
+#: elfxx-x86.c:2648
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%sâ€œ\n"
+
+#: elfxx-x86.c:2649
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž%sâ€œ\n"
+
+#: elfxx-x86.c:2712
+msgid "IBT and SHSTK properties"
+msgstr "â€žIBTâ€œ Ð¸ â€žSHSTKâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð°"
+
+#: elfxx-x86.c:2714
+msgid "IBT property"
+msgstr "â€žIBTâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾"
+
+#: elfxx-x86.c:2716
+msgid "SHSTK property"
+msgstr "â€žSHSTKâ€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾"
+
+#: elfxx-x86.c:2721
+msgid "LAM_U48 property"
+msgstr "â€žLAM_U48â€œ property"
+
+#: elfxx-x86.c:2726
+msgid "LAM_U57 property"
+msgstr "â€žLAM_U57â€œ Ñ�Ð²Ð¾Ñ˜Ñ�Ñ‚Ð²Ð¾"
+
+#: elfxx-x86.c:2870
+msgid "%F%P: failed to create VxWorks dynamic sections\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ â€žVxWorksâ€œ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐºÐµ Ð¾Ð´ÐµÑ™ÐºÐµ\n"
+
+#: elfxx-x86.c:2879
+msgid "%F%P: failed to create GOT sections\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOTâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ\n"
 
-#: ihex.c:392
-msgid "%B:%u: bad extended address record length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: elfxx-x86.c:2897
+msgid "%F%P: failed to create ifunc sections\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žifuncâ€œ Ð¾Ð´ÐµÑ™ÐºÐµ\n"
 
-#: ihex.c:409
-msgid "%B:%u: bad extended start address length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: elfxx-x86.c:2934
+msgid "%F%P: failed to create GOT PLT section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOT PLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: ihex.c:426
-msgid "%B:%u: bad extended linear address record length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: elfxx-x86.c:2953
+msgid "%F%P: failed to create IBT-enabled PLT section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žIBTâ€œ-Ð¾Ð¼ ÑƒÐºÑ™ÑƒÑ‡ÐµÐ½ â€žPLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: ihex.c:443
-msgid "%B:%u: bad extended linear start address length in Intel Hex file"
-msgstr "%B:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: elfxx-x86.c:2967
+msgid "%F%P: failed to create BND PLT section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žBND PLTâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: ihex.c:460
-msgid "%B:%u: unrecognized ihex type %u in Intel Hex file"
-msgstr "%B:%u: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žihexâ€œ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+#: elfxx-x86.c:2987
+msgid "%F%P: failed to create PLT .eh_frame section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: ihex.c:579
-msgid "%B: internal error in ihex_read_section"
-msgstr "%B: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
+#: elfxx-x86.c:3000
+msgid "%F%P: failed to create GOT PLT .eh_frame section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žGOT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: ihex.c:613
-msgid "%B: bad section length in ihex_read_section"
-msgstr "%B: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
+#: elfxx-x86.c:3014
+msgid "%F%P: failed to create the second PLT .eh_frame section\n"
+msgstr "%F%P: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð´Ñ€ÑƒÐ³Ð¸ â€žPLT .eh_frameâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: ihex.c:826
+#: elfxx-x86.c:3056
+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"
+msgstr "%pB:%d: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¸ Ð·Ð½Ð°Ðº â€ž%sâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+
+#: 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:393
+#, c-format
+msgid "%pB:%u: bad extended address record length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
+
+#: ihex.c:411
 #, c-format
-msgid "%s: address 0x%s out of range for Intel Hex file"
-msgstr "%s: Ð°Ð´Ñ€ÐµÑ�Ð° 0x%s Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ"
+msgid "%pB:%u: bad extended start address length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: libbfd.c:863
-msgid "%B: unable to get decompressed section %A"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ"
+#: ihex.c:429
+#, c-format
+msgid "%pB:%u: bad extended linear address record length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: libbfd.c:1012
-msgid "%B: compiled for a big endian system and target is little endian"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð¼Ð°Ð»Ð° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
+#: ihex.c:447
+#, c-format
+msgid "%pB:%u: bad extended linear start address length in Intel Hex file"
+msgstr "%pB:%u: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð¿Ñ€Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ðµ Ð»Ð¸Ð½ÐµÐ°Ñ€Ð½Ðµ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: libbfd.c:1014
-msgid "%B: compiled for a little endian system and target is big endian"
-msgstr "%B: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
+#: ihex.c:465
+#, c-format
+msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
+msgstr "%pB:%u: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žihexâ€œ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ Ñƒ Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ð¾Ñ˜ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ñ˜ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸"
 
-#: libbfd.c:1043
+#: ihex.c:581
+#, c-format
+msgid "%pB: internal error in ihex_read_section"
+msgstr "%pB: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ° Ñƒ â€žihex_Ð¾Ð´ÐµÑ™Ð°Ðº_Ñ‡Ð¸Ñ‚Ð°ÑšÐ°â€œ"
+
+#: ihex.c:614
+#, c-format
+msgid "%pB: bad section length in ihex_read_section"
+msgstr "%pB: Ð»Ð¾ÑˆÐ° Ð´ÑƒÐ¶Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž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:843
+#, c-format
+msgid "%pB: address %#<PRIx64> out of range for Intel Hex file"
+msgstr "%pB: Ð°Ð´Ñ€ÐµÑ�Ð° %#<PRIx64> Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° Ð·Ð° Ð˜Ð½Ñ‚ÐµÐ»Ð¾Ð²Ñƒ Ñ…ÐµÐºÑ�Ð°Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÑƒ"
+
+#: libbfd.c:884
+#, c-format
+msgid "%pB: unable to get decompressed section %pA"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ Ñ€Ð°Ñ�Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ"
+
+#: libbfd.c:1048
 #, c-format
 msgid "Deprecated %s called at %s line %d in %s\n"
 msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñƒ â€ž%sâ€œ %d. Ñ€ÐµÐ´ Ñƒ â€ž%sâ€œ\n"
 
-#: libbfd.c:1046
+#: libbfd.c:1051
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr "Ð—Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ â€ž%sâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾\n"
 
-#: linker.c:1873
-msgid "%B: indirect symbol `%s' to `%s' is a loop"
-msgstr "%B: Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð¿ÐµÑ‚Ñ™Ð°"
+#: linker.c:1707
+#, c-format
+msgid "%pB: indirect symbol `%s' to `%s' is a loop"
+msgstr "%pB: Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ ÐºÐ° â€ž%sâ€œ Ñ˜Ðµ Ð¿ÐµÑ‚Ñ™Ð°"
 
-#: linker.c:2750
+#: linker.c:2578
 #, c-format
-msgid "Attempt to do relocatable link with %s input and %s output"
-msgstr "ÐŸÐ¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ñƒ Ð²ÐµÐ·Ñƒ Ñ�Ð° â€ž%sâ€œ ÑƒÐ»Ð°Ð·Ð¾Ð¼ Ð¸ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð¾Ð¼"
+msgid "attempt to do relocatable link with %s input and %s output"
+msgstr "Ð¿Ð¾ÐºÑƒÑˆÐ°Ð²Ð°Ð¼ Ð´Ð° Ð¾Ð´Ñ€Ð°Ð´Ð¸Ð¼ Ð¿Ñ€ÐµÐ¼ÐµÑ�Ñ‚Ð¸Ð²Ñƒ Ð²ÐµÐ·Ñƒ Ñ�Ð° â€ž%sâ€œ ÑƒÐ»Ð°Ð·Ð¾Ð¼ Ð¸ â€ž%sâ€œ Ð¸Ð·Ð»Ð°Ð·Ð¾Ð¼"
 
-#: linker.c:3035
-msgid "%B: ignoring duplicate section `%A'\n"
-msgstr "%B: Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€ÑƒÑ˜ÐµÐ¼ ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ\n"
+#: linker.c:2863
+#, c-format
+msgid "%pB: ignoring duplicate section `%pA'\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:2873 linker.c:2883
+#, c-format
+msgid "%pB: duplicate section `%pA' has different size\n"
+msgstr "%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ñƒ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ñƒ\n"
 
-#: linker.c:3061 linker.c:3066
-msgid "%B: could not read contents of section `%A'\n"
-msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%Aâ€œ\n"
+#: linker.c:2892 linker.c:2898
+#, c-format
+msgid "%pB: could not read contents of section `%pA'\n"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%pAâ€œ\n"
 
-#: linker.c:3070
-msgid "%B: duplicate section `%A' has different contents\n"
-msgstr "%B: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%Aâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
+#: linker.c:2903
+#, c-format
+msgid "%pB: duplicate section `%pA' has different contents\n"
+msgstr "%pB: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%pAâ€œ Ð¸Ð¼Ð° Ð´Ñ€ÑƒÐ³Ð°Ñ‡Ð¸Ñ˜Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
 
-#: mach-o.c:648
-msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
-msgstr "bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ"
+#: linker.c:3420
+#, c-format
+msgid "%pB: compiled for a big endian system and target is little endian"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð²ÐµÐ»Ð¸ÐºÐµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð¼Ð°Ð»Ð° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
 
-#: mach-o.c:1918
+#: linker.c:3423
 #, c-format
-msgid "mach-o: there are too many sections (%d) maximum is 255,\n"
-msgstr "mach-o: Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%d) Ð½Ð°Ñ˜Ð²Ð¸ÑˆÐµ Ñ˜Ðµ 255,\n"
+msgid "%pB: compiled for a little endian system and target is big endian"
+msgstr "%pB: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½Ð¾ Ð·Ð° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼ Ð¼Ð°Ð»Ðµ ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚Ð¸ Ð° Ñ†Ð¸Ñ™ Ñ˜Ðµ Ð²ÐµÐ»Ð¸ÐºÐ° ÐºÑ€Ð°Ñ˜Ð½Ð¾Ñ�Ñ‚"
 
-#: mach-o.c:2017
+#: mach-o-arm.c:172
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð°Ñ€ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ñ˜Ðµ Ð¿Ñ€Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: mach-o-arm.c:188
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð°Ñ€ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:203
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ñ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:218
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸ Ñ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:233
 #, c-format
-msgid "unable to write unknown load command 0x%lx"
-msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° 0x%lx"
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "Ð»Ð¾Ñˆ â€žmach-o ARMâ€œ Ð¿Ð¾Ð»ÑƒÑ�ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð°Ð·Ð»Ð¸ÐºÐ° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð´ÑƒÐ¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:265
+#, 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:329
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "Ð»Ð¾ÑˆÐµ â€žmach-o ARMâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: %d"
+
+#: mach-o.c:631
+#, c-format
+msgid "<unknown mask flags>"
+msgstr "<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ðµ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¼Ð°Ñ�ÐºÐµ>"
+
+#: mach-o.c:686
+msgid " (<unknown>)"
+msgstr " (<Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾>)"
 
-#: mach-o.c:2272
+#: mach-o.c:698
+#, c-format
+msgid " MACH-O header:\n"
+msgstr " â€žMACH-Oâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ:\n"
+
+#: mach-o.c:699
+#, c-format
+msgid "   magic:      %#lx\n"
+msgstr "   Ð¼Ð°Ð³Ð¸Ñ˜Ð°:      %#lx\n"
+
+#: mach-o.c:700
+#, c-format
+msgid "   cputype:    %#lx (%s)\n"
+msgstr "   Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜:    %#lx (%s)\n"
+
+#: mach-o.c:702
+#, c-format
+msgid "   cpusubtype: %#lx%s\n"
+msgstr "   Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° Ñ†Ð¿Ñ˜: %#lx%s\n"
+
+#: mach-o.c:704
+#, c-format
+msgid "   filetype:   %#lx\n"
+msgstr "   Ð²Ñ€Ñ�Ñ‚Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ:   %#lx\n"
+
+#: mach-o.c:705
+#, c-format
+msgid "   ncmds:      %#lx\n"
+msgstr "   Ð±Ñ€Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:      %#lx\n"
+
+#: mach-o.c:706
+#, c-format
+msgid "   sizeocmds:  %#lx\n"
+msgstr "   Ð²ÐµÐ»Ð½Ð°Ñ€ÐµÐ´Ð±Ð¸:  %#lx\n"
+
+#: mach-o.c:707
+#, c-format
+msgid "   flags:      %#lx\n"
+msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ:      %#lx\n"
+
+#: mach-o.c:708
+#, c-format
+msgid "   version:    %x\n"
+msgstr "   Ð¸Ð·Ð´Ð°ÑšÐµ:  %x\n"
+
+#. Urg - what has happened ?
+#: mach-o.c:743
+#, c-format
+msgid "incompatible cputypes in mach-o files: %ld vs %ld"
+msgstr "Ð½ÐµÑ�Ð°Ð³Ð»Ð°Ñ�Ð½Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð° Ñƒ â€žmach-oâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°Ð¼Ð°: â€ž%ldâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%ldâ€œ"
+
+#: mach-o.c:912
+msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
+msgstr "bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ðµ"
+
+#: mach-o.c:1504
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "Ð»Ð¾ÑˆÐµ â€žmach-oâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ: Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñ˜Ðµ Ð²ÐµÑ›Ð¸ Ð¾Ð´ Ð±Ñ€Ð¾Ñ˜Ð° Ð¾Ð´ÐµÑ™Ð°ÐºÐ°"
+
+#: mach-o.c:2138
 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:2586
+#, c-format
+msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
+msgstr "mach-o: Ð¸Ð¼Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð¾Ð´ÐµÑ™Ð°ÐºÐ° (%u) Ð½Ð°Ñ˜Ð²Ð¸ÑˆÐµ Ñ˜Ðµ 255,\n"
+
+#: mach-o.c:2693
+#, c-format
+msgid "unable to allocate data for load command %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð´Ð¾Ð´ÐµÐ»Ð¸Ð¼ Ð¿Ð¾Ð´Ð°Ñ‚ÐºÐµ Ð·Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
+
+#: mach-o.c:2798
 #, 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 "unable to write unknown load command %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
 
-#: mach-o.c:2916
+#: mach-o.c:2982
 #, 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 "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
+msgstr "Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#<PRIx64>) Ñ˜Ðµ Ð¸Ñ�Ð¿Ð¾Ð´ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° Ð¿Ð¾Ð´ÐµÐ¾ÐºÐ° (%#<PRIx64>)"
 
-#: mach-o.c:2997
+#: mach-o.c:3124
+#, c-format
+msgid "unable to layout unknown load command %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¸ÐºÐ°Ð¶ÐµÐ¼ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ñƒ Ð½Ð°Ñ€ÐµÐ´Ð±Ñƒ ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
+
+#: 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: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lx, ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ 32 ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ñ‚Ð¾Ð³Ð°"
+
+#: 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: Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾Ñ€Ð°Ð²Ð°ÑšÐ°: %#lx, ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ð¼ 32 ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ñ‚Ð¾Ð³Ð°"
+
+#: 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: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ %d Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %u"
+
+#: 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: Ð½Ð°Ð·Ð¸Ð² Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (%lu >= %u)"
+
+#: 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â€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%dâ€œ (Ð½Ð°Ñ˜Ð². %lu): Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð°Ð¼ Ð½Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: mach-o.c:3013
+#: 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â€œ Ñ˜Ðµ Ð½Ð°Ð²ÐµÐ¾ Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð¾ Ð¿Ð¾Ñ™Ðµ Ð²Ñ€Ñ�Ñ‚Ðµ 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:5063
+#, c-format
+msgid "%pB: unknown load command %#x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ° â€ž%#xâ€œ"
 
-#: mach-o.c:4107
+#: mach-o.c:5262
 #, 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:5384
 #, 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:895
 #, 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:476
 #, c-format
-msgid "%s: No core to allocate section name %s\n"
-msgstr "%s: Ð�ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð½Ð°Ð·Ð¸Ð²Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ\n"
+msgid "%pB: no core to allocate section name %s"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ð½Ð°Ð·Ð¸Ð²Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ"
 
-#: mmo.c:530
+#: mmo.c:541
 #, c-format
-msgid "%s: No core to allocate a symbol %d bytes long\n"
-msgstr "%s: Ð�ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð´ÑƒÐ³Ð¾Ð³ %d Ð±Ð°Ñ˜Ñ‚Ð°\n"
+msgid "%pB: no core to allocate a symbol %d bytes long"
+msgstr "%pB: Ð½ÐµÐ¼Ð° Ñ˜ÐµÐ·Ð³Ñ€Ð° Ð·Ð° Ð´Ð¾Ð´ÐµÑ™Ð¸Ð²Ð°ÑšÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð´ÑƒÐ³Ð¾Ð³ %d Ð±Ð°Ñ˜Ñ‚Ð°"
 
-#: mmo.c:1189
+#: mmo.c:952
 #, c-format
-msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° Ð·Ð° $255 Ð½Ð¸Ñ˜Ðµ â€žMainâ€œ\n"
+msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
+msgstr "%pB: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ… Ð´Ð° ÐµÐ¼Ð¸Ñ‚ÑƒÑ˜ÐµÐ¼ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð¸ ÐºÐ¾Ñ˜Ð° Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ 4 â€ž%#<PRIx64>â€œ"
 
-#: mmo.c:1334
+#: mmo.c:1248
 #, 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: invalid mmo file: initialization value for $255 is not `Main'\n"
+msgstr "%pB: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°ÑšÐ° Ð·Ð° $255 Ð½Ð¸Ñ˜Ðµ â€žMainâ€œ\n"
 
-#: mmo.c:1568
+#: mmo.c:1395
 #, c-format
-msgid "%s: invalid mmo file: unsupported lopcode `%d'\n"
-msgstr "%s: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° â€žmmoâ€œ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: Ð»Ð¾Ð¿ÐºÐ¾Ð´ â€ž%dâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½\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:1578
+#: mmo.c:1628
 #, 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:1639
 #, 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:1679
 #, 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:1730
 #, 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:1771
 #, 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:1782
 #, 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:1807
 #, 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:1832
 #, 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:1854
 #, 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:1868
 #, 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:1975
 #, 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:2012
 #, 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:2026
 #, 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:2735
 #, 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:2979
 #, 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 %s rather than the start address %s\n"
+msgstr "%pB: Ð»Ð¾ÑˆÐ° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: â€žMainâ€œ Ñ˜Ðµ Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™ÐµÐ½Ð¾ Ð½Ð° â€ž%sâ€œ ÑƒÐ¼ÐµÑ�Ñ‚Ð¾ Ð¿Ð¾Ñ‡ÐµÑ‚Ð½Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ â€ž%sâ€œ\n"
 
-#: mmo.c:3029
+#: mmo.c:3078
 #, 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:3124
 #, 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:3177
 #, 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:3228
 #, 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:3235
 #, 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:3240
 #, 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:530
+#, 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: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 "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸\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:367
+#, c-format
+msgid "Unknown: %x"
+msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾: %x"
 
-#: pef.c:522
+#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437
 #, 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:492
+#, c-format
+msgid "Too many unwind codes (%ld)\n"
+msgstr "ÐŸÑ€ÐµÐ²Ð¸ÑˆÐµ Ð¸Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ… ÐºÐ¾Ð´Ð¾Ð²Ð° (%ld)\n"
+
+#: pei-x86_64.c:582
+#, c-format
+msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d\n"
+
+#: pei-x86_64.c:589
+#, c-format
+msgid "Warning: %s section size is zero\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñ˜Ðµ Ð½ÑƒÐ»Ñ‚Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ\n"
 
-#: pei-x86_64.c:469
+#: pei-x86_64.c:604
 #, c-format
-msgid "warning: .pdata section size (%ld) is not a multiple of %d\n"
-msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ (%ld) Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ Ð¾Ð´ %d\n"
+msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ (%ld) Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð²Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ (%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:613
 #, 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:616
 #, c-format
 msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
 msgstr "vma:\t\t\tÐ�Ð´Ñ€ÐµÑ�Ð° Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ°\t Ð�Ð´Ñ€ÐµÑ�Ð° ÐºÑ€Ð°Ñ˜Ð°\t  Ð˜Ð·Ð»Ð¾Ð¶ÐµÐ½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸\n"
 
+#: pei-x86_64.c:745
+#, 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:796
+#, c-format
+msgid "%pB: unhandled import type; %x"
+msgstr "%pB: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x"
+
+#: peicode.h:802
+#, c-format
+msgid "%pB: unrecognized import type; %x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° ÑƒÐ²Ð¾Ð·Ð°; %x"
+
+#: peicode.h:817
+#, c-format
+msgid "%pB: unrecognized import name type; %x"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð½Ð°Ð·Ð¸Ð² Ð²Ñ€Ñ�Ñ‚Ðµ ÑƒÐ²Ð¾Ð·Ð°; %x"
+
+#: peicode.h:1225
+#, c-format
+msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive"
+msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
+
+#: peicode.h:1238
+#, c-format
+msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive"
+msgstr "%pB: Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð°Ð»Ð¸ Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¼Ð°ÑˆÐ¸Ð½Ðµ (0x%x) Ñƒ Ð°Ñ€Ñ…Ð¸Ð²Ð¸ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
+
+#: peicode.h:1256
+#, c-format
+msgid "%pB: size field is zero in Import Library Format header"
+msgstr "%pB: Ð¿Ð¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ñ˜Ðµ Ð½ÑƒÐ»Ð° Ñƒ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ ÑƒÐ²Ð¾Ð·Ð°"
+
+#: peicode.h:1282
+#, c-format
+msgid "%pB: string not null terminated in ILF object file"
+msgstr "%pB: Ð½Ð¸Ñ�ÐºÐ° Ñ�Ðµ Ð½Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð° Ð½ÑƒÐ»Ð¾Ð¼ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ â€žILFâ€œ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
 
-#: ppcboot.c:391
+#: peicode.h:1338
+#, c-format
+msgid "%pB: error: debug data ends beyond end of debug directory"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ð¾Ð´Ð°Ñ†Ð¸ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñ�Ðµ Ð·Ð°Ð²Ñ€ÑˆÐ°Ð²Ð°Ñ˜Ñƒ Ð¸Ð·Ð²Ð°Ð½ ÐºÑ€Ð°Ñ˜Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
+
+#: ppcboot.c:392
 #, c-format
 msgid ""
 "\n"
@@ -4104,64 +6018,92 @@ 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"
 
-#: ppcboot.c:435
+#: ppcboot.c:439
 #, c-format
 msgid "Partition[%d] sector = 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"
 
-#: reloc.c:7371
-msgid "INPUT_SECTION_FLAGS are not supported.\n"
-msgstr "â€žINPUT_SECTION_FLAGSâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾.\n"
+#: reloc.c:8318
+msgid "INPUT_SECTION_FLAGS are not supported"
+msgstr "â€žINPUT_SECTION_FLAGSâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: reloc.c:8419
+#, 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:8507
+#, c-format
+msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
+msgstr "%X%P: %pB(%pA): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%pRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: reloc.c:8516
+#, 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:8578
+#, 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:8582
+#, c-format
+msgid "is this version of the linker - %s - out of date ?"
+msgstr "Ð´Ð° Ð½Ð¸Ñ˜Ðµ Ð¾Ð²Ð¾ Ð¸Ð·Ð´Ð°ÑšÐµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð° â€“ %s â€“ Ð¼Ð°Ð»Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€ÐµÐ»Ð¾ ?"
 
-#: reloc.c:7526
-msgid "%X%P: %B(%A): relocation \"%R\" goes out of range\n"
-msgstr "%X%P: %B(%A): Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%Râ€œ Ð¸Ð´Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
+#: rs6000-core.c:471
+#, c-format
+msgid "%pB: warning core file truncated"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°"
 
-#: rs6000-core.c:448
+#. User has specified a subspace without its containing space.
+#: som.c:5465
 #, c-format
-msgid "%s: warning core file truncated"
-msgstr "%s: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñ˜ÐµÐ·Ð³Ñ€Ð°"
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: Ð½ÐµÐ¼Ð° Ð¸Ð·Ð»Ð°Ð·Ð½Ð¾Ð³ Ð¾Ð´ÐµÑ™ÐºÐ° Ð·Ð° Ñ€Ð°Ð·Ð¼Ð°Ðº â€ž%pAâ€œ"
 
-#: som.c:5471
+#: som.c:5511
 #, c-format
 msgid ""
 "\n"
@@ -4170,52 +6112,106 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ð¼Ð¾Ñ›Ð½Ð¾ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¸Ð·Ð²Ñ€ÑˆÐ½Ðµ\n"
 
-#: som.c:5776
+#: som.c:5820
 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:567 srec.c:600
-msgid "%B:%d: Bad checksum in S-record file\n"
-msgstr "%B:%d: Ð›Ð¾ÑˆÐ° Ñ�ÑƒÐ¼Ð° Ð¿Ñ€Ð¾Ð²ÐµÑ€Ðµ Ñƒ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÑ†Ð¸ Ð¡-Ð·Ð°Ð¿Ð¸Ñ�Ð°\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:279
-msgid "%B(%A+0x%lx): Stabs entry has invalid string index."
-msgstr "%B(%A+0x%lx): Ð£Ð½Ð¾Ñ� Ð¾ÐºÑ€ÑšÐ°ÐºÐ° Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð½Ð¸Ñ�ÐºÐµ."
+#, c-format
+msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
+msgstr "%pB(%pA+%#lx): ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€ÑšÐ°ÐºÐ° Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð½Ð¸Ñ�ÐºÐµ"
 
-#: syms.c:1079
-msgid "Unsupported .stab relocation"
-msgstr "ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž.stabâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+#: syms.c:1088
+msgid "unsupported .stab relocation"
+msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€ž.stabâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: vms-alpha.c:1294
+#: vms-alpha.c:480
+msgid "corrupt EIHD record - size is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEIHDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº â€“ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
+
+#: vms-alpha.c:666
 #, c-format
-msgid "Unknown EGSD subtype %d"
-msgstr "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° EGSD Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° %d"
+msgid "unable to read EIHS record at offset %#x"
+msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHSâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ â€ž%#xâ€œ"
+
+#: vms-alpha.c:1158
+msgid "record is too small for symbol name length"
+msgstr "Ñ�Ð½Ð¸Ð¼Ð°Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð¸ Ð·Ð° Ð´ÑƒÐ¶Ð¸Ð½Ñƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: vms-alpha.c:1325
+#: vms-alpha.c:1191
 #, c-format
-msgid "Stack overflow (%d) in _bfd_vms_push"
-msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (%d) Ñƒ â€ž_bfd_vms_pushâ€œ-Ñƒ"
+msgid "corrupt EGSD record: its size (%#x) is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº: ÑšÐµÐ³Ð¾Ð²Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
 
-#: vms-alpha.c:1338
-msgid "Stack underflow in _bfd_vms_pop"
-msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñƒ â€ž_bfd_vms_popâ€œ-Ñƒ"
+#: vms-alpha.c:1215
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ° %d: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° (%#x)"
+
+#: vms-alpha.c:1225
+#, c-format
+msgid "corrupt EGSD record type %d: size (%#x) is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° Ð²Ñ€Ñ�Ñ‚Ð° â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ° %d: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° (%#x) Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
+
+#: vms-alpha.c:1367
+#, c-format
+msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€žEGSDâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº: ÑšÐµÐ³Ð¾Ð²Ð¾ â€žpsindxâ€œ Ð¿Ð¾Ñ™Ðµ Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ (%#lx)"
+
+#: vms-alpha.c:1442
+#, c-format
+msgid "unknown EGSD subtype %d"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žEGSDâ€œ Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° %d"
+
+#: vms-alpha.c:1475
+#, c-format
+msgid "stack overflow (%d) in _bfd_vms_push"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° (%d) Ñƒ â€ž_bfd_vms_pushâ€œ-Ñƒ"
+
+#: vms-alpha.c:1489
+msgid "stack underflow in _bfd_vms_pop"
+msgstr "Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° Ñƒ â€ž_bfd_vms_popâ€œ-Ñƒ"
+
+#: vms-alpha.c:1563
+#, 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:1764
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° â€žETIRâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° %d"
 
-#: vms-alpha.c:1762
+#: vms-alpha.c:1795
+msgid "corrupt vms value"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð° â€žvmsâ€œ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚"
+
+#: vms-alpha.c:1926
+msgid "corrupt ETIR record encountered"
+msgstr "Ð½Ð°Ð¸Ñ’Ð¾Ñ… Ð½Ð° Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€žETIRâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº"
+
+#: vms-alpha.c:1988
 #, c-format
 msgid "bad section index in %s"
 msgstr "Ð»Ð¾Ñˆ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€ž%sâ€œ"
 
-#: vms-alpha.c:1775
+#: vms-alpha.c:2002
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð° â€žSTAâ€œ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%sâ€œ"
@@ -4225,1388 +6221,1480 @@ 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:2210 vms-alpha.c:2241 vms-alpha.c:2336 vms-alpha.c:2556
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
 
-#: vms-alpha.c:1957
+#: vms-alpha.c:2216
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#: vms-alpha.c:2213
+#: vms-alpha.c:2381 vms-alpha.c:2396
+#, 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:2456
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s Ð´ÐµÐ»Ð¸ Ð½ÑƒÐ»Ð¾Ð¼"
+
+#: vms-alpha.c:2522
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð° â€ž%sâ€œ Ñ�Ð° ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð¼"
 
-#: vms-alpha.c:2247
+#: vms-alpha.c:2580
 #, c-format
 msgid "reserved cmd %d"
 msgstr "Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%dâ€œ"
 
-#: vms-alpha.c:2332
-msgid "Object module NOT error-free !\n"
-msgstr "ÐœÐ¾Ð´ÑƒÐ» Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð�Ð˜ÐˆÐ• Ð±ÐµÐ· Ð³Ñ€ÐµÑˆÐ°ÐºÐ° !\n"
+#: vms-alpha.c:2664
+msgid "corrupt EEOM record - size is too small"
+msgstr "Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼Ð°Ðº â€“ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð°"
 
-#: vms-alpha.c:3657
+#: vms-alpha.c:2673
+msgid "object module not error-free !"
+msgstr "Ð¼Ð¾Ð´ÑƒÐ» Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ð¸Ñ˜Ðµ Ð±ÐµÐ· Ð³Ñ€ÐµÑˆÐ°ÐºÐ° !"
+
+#: vms-alpha.c:4001
 #, 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:4053 vms-alpha.c:4268
 #, 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:4213
+msgid "spurious ALPHA_R_BSR reloc"
+msgstr "Ð¿Ñ€Ð¸Ð²Ð¸Ð´Ð½Ð¾ â€žALPHA_R_BSRâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: vms-alpha.c:3909
+#: vms-alpha.c:4254
 #, c-format
-msgid "Unhandled relocation %s"
-msgstr "Ð�ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
+msgid "unhandled relocation %s"
+msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ"
 
-#: vms-alpha.c:4199
+#: vms-alpha.c:4551
 #, 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:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630
+#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675
+#: vms-alpha.c:4681
+#, c-format
+msgid "%s not implemented"
+msgstr "â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
 
-#: vms-alpha.c:4372
+#: vms-alpha.c:4724
 #, 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:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237
+#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275
 #, 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:5330
 #, 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:5344
+msgid "invalid section index in ETIR"
+msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð°Ð½ Ð¸Ð½Ð´ÐµÐºÑ� Ð¾Ð´ÐµÑ™ÐºÐ° Ñƒ â€žETIRâ€œ-Ñƒ"
 
-#: vms-alpha.c:5002
-msgid "Relocation for non-REL psect"
-msgstr "ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-Ð Ð•Ð› Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº"
+#: vms-alpha.c:5353
+msgid "relocation for non-REL psect"
+msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð½Ðµ-â€žRELâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: vms-alpha.c:5049
+#: vms-alpha.c:5402
 #, 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:5816
+#, c-format
+msgid "reloc (%d) is *UNKNOWN*"
+msgstr "Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ (%d) Ñ˜Ðµ *Ð�Ð•ÐŸÐžÐ—Ð�Ð�Ð¢Ðž*"
+
+#: vms-alpha.c:5932
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u): "
 
-#: vms-alpha.c:5573
+#: vms-alpha.c:5937
+#, c-format
+msgid "   Error: The length is less than the length of an EMH record\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEMHâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°\n"
+
+#: vms-alpha.c:5954
+#, 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:5957
 #, c-format
 msgid "Module header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¼Ð¾Ð´ÑƒÐ»Ð°\n"
 
-#: vms-alpha.c:5574
+#: vms-alpha.c:5958
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   Ð½Ð¸Ð²Ð¾ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ         : %u\n"
 
-#: vms-alpha.c:5575
+#: vms-alpha.c:5959
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   Ð½Ð°Ñ˜Ð². Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐµÑšÐ°: %u\n"
 
-#: vms-alpha.c:5578
+#: vms-alpha.c:5965
+#, c-format
+msgid "   Error: The module name is missing\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ\n"
+
+#: vms-alpha.c:5971
+#, c-format
+msgid "   Error: The module name is too long\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð�Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³\n"
+
+#: vms-alpha.c:5974
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s\n"
 
-#: vms-alpha.c:5580
+#: vms-alpha.c:5978
+#, c-format
+msgid "   Error: The module version is missing\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ\n"
+
+#: vms-alpha.c:5984
+#, c-format
+msgid "   Error: The module version is too long\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð˜Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð¾\n"
+
+#: vms-alpha.c:5987
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   Ð¸Ð·Ð´Ð°ÑšÐµ Ð¼Ð¾Ð´ÑƒÐ»Ð°          : %.*s\n"
 
-#: vms-alpha.c:5582
+#: vms-alpha.c:5990
+#, c-format
+msgid "   Error: The compile date is truncated\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð”Ð°Ñ‚ÑƒÐ¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ° Ñ˜Ðµ Ñ�ÐºÑ€Ð°Ñ›ÐµÐ½\n"
+
+#: vms-alpha.c:5992
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   Ð´Ð°Ñ‚ÑƒÐ¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°        : %.17s\n"
 
-#: vms-alpha.c:5587
+#: vms-alpha.c:5997
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Ð�Ð°Ð·Ð¸Ð² Ñ˜ÐµÐ·Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°\n"
 
-#: vms-alpha.c:5588
+#: vms-alpha.c:5998
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ñ˜ÐµÐ·Ð¸ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:5595
+#: vms-alpha.c:6002
 #, c-format
 msgid "Source Files Header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð¸Ð·Ð²Ð¾Ñ€Ð°\n"
 
-#: vms-alpha.c:5596
+#: vms-alpha.c:6003
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:5603
+#: vms-alpha.c:6007
 #, c-format
 msgid "Title Text Header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ñ‚ÐµÐºÑ�Ñ‚Ð° Ð½Ð°Ñ�Ð»Ð¾Ð²Ð°\n"
 
-#: vms-alpha.c:5604
+#: vms-alpha.c:6008
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   Ð½Ð°Ñ�Ð»Ð¾Ð²: %.*s\n"
 
-#: vms-alpha.c:5611
+#: vms-alpha.c:6012
 #, c-format
 msgid "Copyright Header\n"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²Ð°\n"
 
-#: vms-alpha.c:5612
+#: vms-alpha.c:6013
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   Ð°ÑƒÑ‚Ð¾Ñ€Ñ�ÐºÐ° Ð¿Ñ€Ð°Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:5618
+#: vms-alpha.c:6017
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð° emh Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:5628
+#: vms-alpha.c:6027
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):\n"
 
-#: vms-alpha.c:5629
+#: vms-alpha.c:6032
+#, c-format
+msgid "   Error: The length is less than the length of an EEOM record\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð¼Ð°ÑšÐ° Ð¾Ð´ Ð´ÑƒÐ¶Ð¸Ð½Ðµ â€žEEOMâ€œ Ñ�Ð½Ð¸Ð¼ÐºÐ°\n"
+
+#: vms-alpha.c:6036
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   Ð±Ñ€Ð¾Ñ˜ â€žcondâ€œ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u\n"
 
-#: vms-alpha.c:5631
+#: vms-alpha.c:6038
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   Ð´Ð¾Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐµ ÐºÐ¾Ð´Ð°: %u\n"
 
-#: vms-alpha.c:5635
+#: vms-alpha.c:6042
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð°: 0x%02x\n"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:6043
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð° : %u\n"
 
-#: vms-alpha.c:5638
+#: vms-alpha.c:6045
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð°          : 0x%08x\n"
 
-#: vms-alpha.c:5647
+#: vms-alpha.c:6054
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5649
+#: vms-alpha.c:6056
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5651
+#: vms-alpha.c:6058
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5653 vms-alpha.c:5674
+#: vms-alpha.c:6060 vms-alpha.c:6081
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5655
+#: vms-alpha.c:6062
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5657
+#: vms-alpha.c:6064
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5659
+#: vms-alpha.c:6066
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5661
+#: vms-alpha.c:6068
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5668
+#: vms-alpha.c:6075
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5670
+#: vms-alpha.c:6077
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5672
+#: vms-alpha.c:6079
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5676
+#: vms-alpha.c:6083
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5678
+#: vms-alpha.c:6085
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5680
+#: vms-alpha.c:6087
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5682
+#: vms-alpha.c:6089
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5684
+#: vms-alpha.c:6091
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5686
+#: vms-alpha.c:6093
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5688
+#: vms-alpha.c:6095
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5690
+#: vms-alpha.c:6097
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5692
+#: vms-alpha.c:6099
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5701
+#: vms-alpha.c:6108
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u):\n"
 
-#: vms-alpha.c:5713
+#: vms-alpha.c:6121
 #, c-format
 msgid "  EGSD entry %2u (type: %u, len: %u): "
 msgstr "  â€žEGSDâ€œ ÑƒÐ½Ð¾Ñ� â€ž%2uâ€œ (Ð²Ñ€Ñ�Ñ‚Ð°ype: %u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u): "
 
-#: vms-alpha.c:5725
+#: vms-alpha.c:6127 vms-alpha.c:6378
+#, c-format
+msgid "   Error: length larger than remaining space in record\n"
+msgstr "   Ð“Ñ€ÐµÑˆÐºÐ°: Ð´ÑƒÐ¶Ð¸Ð½Ð° Ñ˜Ðµ Ð²ÐµÑ›Ð° Ð¾Ð´ Ð¿Ñ€ÐµÐ¾Ñ�Ñ‚Ð°Ð»Ð¾Ð³ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ð° Ñƒ Ñ�Ð½Ð¸Ð¼ÐºÑƒ\n"
+
+#: vms-alpha.c:6139
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°\n"
 
-#: vms-alpha.c:5726 vms-alpha.c:5743
+#: vms-alpha.c:6140 vms-alpha.c:6157
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ : 2**%u\n"
 
-#: vms-alpha.c:5727 vms-alpha.c:5744
+#: vms-alpha.c:6141 vms-alpha.c:6158
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x"
 
-#: vms-alpha.c:5731
+#: vms-alpha.c:6145
 #, 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:6146 vms-alpha.c:6203 vms-alpha.c:6252
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð²        : %.*s\n"
 
-#: vms-alpha.c:5742
+#: vms-alpha.c:6156
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð¾Ð´ÐµÑ™ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð´ÐµÑ™ÐµÐ½Ðµ Ñ�Ð»Ð¸ÐºÐµ\n"
 
-#: vms-alpha.c:5748
+#: vms-alpha.c:6162
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   Ð´Ð¾Ð´ÐµÐ»Ð° (Ð´ÑƒÐ¶Ð¸Ð½Ð°)  : %u (0x%08x)\n"
 
-#: vms-alpha.c:5749
+#: vms-alpha.c:6163
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð»Ð¸ÐºÐµ: 0x%08x\n"
 
-#: vms-alpha.c:5751
+#: vms-alpha.c:6165
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¸Ð¼Ð²ÐµÐº-Ð° : 0x%08x\n"
 
-#: vms-alpha.c:5753
+#: vms-alpha.c:6167
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð²           : %.*s\n"
 
-#: vms-alpha.c:5766
+#: vms-alpha.c:6180
 #, 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:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%04x"
 
-#: vms-alpha.c:5770
+#: vms-alpha.c:6184
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: 0x%08x\n"
 
-#: vms-alpha.c:5774
+#: vms-alpha.c:6188
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ð°: 0x%08x\n"
 
-#: vms-alpha.c:5776
+#: vms-alpha.c:6190
 #, 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:6193 vms-alpha.c:6269 vms-alpha.c:6288
 #, 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:6195 vms-alpha.c:6271 vms-alpha.c:6290
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð²         : %.*s\n"
 
-#: vms-alpha.c:5788
+#: vms-alpha.c:6202
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM â€” Ð£Ð¿ÑƒÑ‚Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5800
+#: vms-alpha.c:6214
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC â€” ÐŸÑ€Ð¾Ð²ÐµÑ€Ð° Ð´Ð¾Ñ�Ð»ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸ ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐ°\n"
 
-#: vms-alpha.c:5801
+#: vms-alpha.c:6215
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%08x"
 
-#: vms-alpha.c:5805
+#: vms-alpha.c:6219
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°ÑšÐµ Ð¸Ð´-Ð° : %x\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:6221
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   Ð¾Ð·Ð±Ð¸Ñ™Ð½Ð¾Ñ�Ñ‚ Ð³Ñ€ÐµÑˆÐºÐµ: %x\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:6224
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² ÐµÐ½Ñ‚Ð¸Ñ‚ÐµÑ‚Ð°  : %.*s\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:6226
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°  : %.*s\n"
 
-#: vms-alpha.c:5815
+#: vms-alpha.c:6229
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ð±Ð¸Ð½Ð°Ñ€Ð½Ð¾Ð³ : 0x%08x\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:6232
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   Ð°Ñ�ÐºÑ€Ð¸ ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ   : %.*s\n"
 
-#: vms-alpha.c:5826
+#: vms-alpha.c:6240
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° ÑƒÐ½Ð¸Ð²ÐµÑ€Ð·Ð°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5830
+#: vms-alpha.c:6244
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: 0x%08x\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6246
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   Ñ‚Ð°Ñ‡ÐºÐ° ÑƒÐ½Ð¾Ñ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:5834
+#: vms-alpha.c:6248
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð° : 0x%08x\n"
 
-#: vms-alpha.c:5836
+#: vms-alpha.c:6250
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: %u\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6261
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV â€” Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
 
-#: vms-alpha.c:5851
+#: vms-alpha.c:6265
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   Ð²ÐµÐºÑ‚Ð¾Ñ€     : 0x%08x\n"
 
-#: vms-alpha.c:5853 vms-alpha.c:5872
+#: vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: %u\n"
 
-#: vms-alpha.c:5866
+#: vms-alpha.c:6280
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM â€” ÐžÐ¿ÑˆÑ‚Ð° Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ˜Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ�Ð° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ð¾Ð¼\n"
 
-#: vms-alpha.c:5870
+#: vms-alpha.c:6284
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ: 0x%08x\n"
 
-#: vms-alpha.c:5881
+#: vms-alpha.c:6295
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žegsdâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u\n"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6330
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¸Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ð¸Ñ˜Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°: 0x%08x\n"
 
-#: vms-alpha.c:5918
+#: vms-alpha.c:6334
 #, 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:6339
 #, 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:6345
 #, 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:6350
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    Ð¾Ð¿ÑˆÑ‚Ð¸ Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:5942
+#: vms-alpha.c:6361
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr "  %s (Ð´ÑƒÐ¶Ð¸Ð½Ð°=%u+%u):\n"
 
-#: vms-alpha.c:5957
+#: vms-alpha.c:6383
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr "   (Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 4+%3u): "
 
-#: vms-alpha.c:5961
+#: vms-alpha.c:6387
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) %.*s\n"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6391
 #, c-format
 msgid "STA_LW (stack longword) 0x%08x\n"
 msgstr "STA_LW (Ð´ÑƒÐ³Ð° Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x\n"
 
-#: vms-alpha.c:5969
+#: vms-alpha.c:6395
 #, c-format
 msgid "STA_QW (stack quadword) 0x%08x %08x\n"
 msgstr "STA_QW (Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ€ÐµÑ‡ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°) 0x%08x %08x\n"
 
-#: vms-alpha.c:5974
+#: vms-alpha.c:6400
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ° + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜)\n"
 
-#: vms-alpha.c:5975
+#: vms-alpha.c:6402
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x %08x\n"
 
-#: vms-alpha.c:5981
+#: vms-alpha.c:6408
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚ Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)\n"
 
-#: vms-alpha.c:5984
+#: vms-alpha.c:6411
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (Ð¼Ð¾Ð´ÑƒÐ» Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ°)\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6414
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ° Ð¿Ð¾Ñ€ÐµÑ’ÐµÑšÐ°)\n"
 
-#: vms-alpha.c:5991
+#: vms-alpha.c:6418
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð±Ð°Ñ˜Ñ‚)\n"
 
-#: vms-alpha.c:5994
+#: vms-alpha.c:6421
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ñ€ÐµÑ‡)\n"
 
-#: vms-alpha.c:5997
+#: vms-alpha.c:6424
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð´ÑƒÐ³Ñƒ Ñ€ÐµÑ‡)\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6427
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾Ñ€ÐµÑ‡)\n"
 
-#: vms-alpha.c:6006
+#: vms-alpha.c:6433
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð°Ð»Ð½Ð¾ Ð¿Ð¾Ð½Ð°Ð²Ñ™Ð°ÑšÐµ) %u Ð±Ð°Ñ˜Ñ‚Ð°\n"
 
-#: vms-alpha.c:6013
+#: vms-alpha.c:6440
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ðµ) %.*s\n"
 
-#: vms-alpha.c:6017
+#: vms-alpha.c:6444
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ ÐºÐ¾Ð´Ð°) %.*s\n"
 
-#: vms-alpha.c:6021
+#: vms-alpha.c:6448
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ñ€ÐµÐ»Ð°Ñ‚Ð¸Ð²Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ)\n"
 
-#: vms-alpha.c:6024
+#: vms-alpha.c:6451
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð°Ð¿Ñ�Ð¾Ð»ÑƒÑ‚Ð½Ñƒ Ð³Ñ€Ð°Ð½Ñƒ)\n"
 
-#: vms-alpha.c:6027
+#: vms-alpha.c:6454
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñƒ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº)\n"
 
-#: vms-alpha.c:6033
+#: vms-alpha.c:6460
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð°Ð»Ð½Ð¾) %u Ð±Ð°Ñ˜Ñ‚Ð°\n"
 
-#: vms-alpha.c:6040
+#: vms-alpha.c:6467
 #, c-format
 msgid "STO_GBL_LW (store global longword) %.*s\n"
 msgstr "STO_GBL_LW (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ñƒ Ð´ÑƒÐ³Ñƒ Ñ€ÐµÑ‡) %.*s\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6471
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð›ÐŸ Ñ�Ð° Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�Ð¾Ð¼ Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ°)\n"
 
-#: vms-alpha.c:6047
+#: vms-alpha.c:6474
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ Ð³Ñ€Ð°Ð½Ðµ) *ÑƒÑ€Ð°Ð´Ð¸Ñ‚Ð¸*\n"
 
-#: vms-alpha.c:6050
+#: vms-alpha.c:6477
 #, c-format
 msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
 msgstr "STO_BR_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð³Ñ€Ð°Ð½Ðµ) *ÑƒÑ€Ð°Ð´Ð¸Ñ‚Ð¸*\n"
 
-#: vms-alpha.c:6054
+#: vms-alpha.c:6481
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (Ð±ÐµÐ· Ñ€Ð°Ð´ÑšÐµ)\n"
 
-#: vms-alpha.c:6057
+#: vms-alpha.c:6484
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (Ð·Ð±Ñ€Ð°Ñ˜Ð°)\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6487
 #, c-format
-msgid "OPR_SUB (substract)\n"
+msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (Ð¾Ð´ÑƒÐ·Ð¸Ð¼Ð°)\n"
 
-#: vms-alpha.c:6063
+#: vms-alpha.c:6490
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (Ð¼Ð½Ð¾Ð¶Ð¸)\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6493
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (Ð´ÐµÐ»Ð¸)\n"
 
-#: vms-alpha.c:6069
+#: vms-alpha.c:6496
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ Ð˜)\n"
 
-#: vms-alpha.c:6072
+#: vms-alpha.c:6499
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ ÑƒÐºÑ™ÑƒÑ‡Ð¸Ð²Ð¾ Ð˜Ð›Ð˜)\n"
 
-#: vms-alpha.c:6075
+#: vms-alpha.c:6502
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (Ð»Ð¾Ð³Ð¸Ñ‡ÐºÐ¾ Ð¸Ñ�ÐºÑ™ÑƒÑ‡Ð¸Ð²Ð¾ Ð˜Ð›Ð˜)\n"
 
-#: vms-alpha.c:6078
+#: vms-alpha.c:6505
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (Ð½ÐµÐ³Ð°Ñ†Ð¸Ñ˜Ð°)\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6508
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (ÐºÐ¾Ð¼Ð¿Ð»ÐµÐ¼ÐµÐ½Ñ‚)\n"
 
-#: vms-alpha.c:6084
+#: vms-alpha.c:6511
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (ÑƒÐ¼ÐµÑ›Ðµ Ð¿Ð¾Ñ™Ðµ)\n"
 
-#: vms-alpha.c:6087
+#: vms-alpha.c:6514
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (Ð°Ñ€Ð¸Ñ‚Ð¼ÐµÑ‚Ð¸Ñ‡ÐºÐ¸ Ð¿Ð¾Ð¼Ð°Ðº)\n"
 
-#: vms-alpha.c:6090
+#: vms-alpha.c:6517
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (Ð¿Ð¾Ð¼Ð°Ðº Ð±ÐµÐ· Ð·Ð½Ð°ÐºÐ°)\n"
 
-#: vms-alpha.c:6093
+#: vms-alpha.c:6520
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (Ð¾ÐºÑ€ÐµÑ›Ðµ)\n"
 
-#: vms-alpha.c:6096
+#: vms-alpha.c:6523
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (Ð±Ð¸Ñ€Ð°)\n"
 
-#: vms-alpha.c:6099
+#: vms-alpha.c:6526
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ñ‚ÐµÐºÑƒÑ›Ðµ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñ˜Ðµ)\n"
 
-#: vms-alpha.c:6102
+#: vms-alpha.c:6529
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚)\n"
 
-#: vms-alpha.c:6106
+#: vms-alpha.c:6533
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿Ð°Ñ€ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6110
+#: vms-alpha.c:6537
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿Ð°Ñ€ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ° ÑƒÑ�Ð»Ð¾Ð²Ð° + Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6111
+#: vms-alpha.c:6539
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°Ðº: %.*s\n"
 
-#: vms-alpha.c:6114
+#: vms-alpha.c:6542
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ�: %.*s\n"
 
-#: vms-alpha.c:6117
+#: vms-alpha.c:6545
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¾Ð¿ÑˆÑ‚Ð¾Ñ�Ñ‚ ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6118
+#: vms-alpha.c:6547
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð¾Ð¿ÑˆÑ‚Ðµ: %.*s\n"
 
-#: vms-alpha.c:6122
+#: vms-alpha.c:6551
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ ÐºÐ¾Ð´Ð° ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6123
+#: vms-alpha.c:6553
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ð¸Ð½Ð´ÐµÐºÑ� Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, Ð½Ð°Ð·Ð¸Ð² Ð¿Ð¾Ñ�Ñ‚ÑƒÐ¿ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:6127
+#: vms-alpha.c:6557
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (Ñ�Ð¼ÐµÑˆÑ‚Ð° Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº + Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ ÑƒÑ�Ð»Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6129
+#: vms-alpha.c:6560
 #, 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:6567
 #, 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:6571
 #, 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:6575
 #, 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:6579
 #, 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:6583
 #, 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:6587
 #, 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:6591
 #, 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:6595
 #, 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:6600
 #, 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:6604
 #, 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:6608
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°)\n"
 
-#: vms-alpha.c:6183
+#: vms-alpha.c:6614
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (Ð¿Ð¾Ð²ÐµÑ›Ð°Ð²Ð° Ð¾Ñ�Ð½Ð¾Ð²Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ°) %u\n"
 
-#: vms-alpha.c:6187
+#: vms-alpha.c:6618
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (Ð´ÐµÑ„Ð¸Ð½Ð¸ÑˆÐµ Ð¼ÐµÑ�Ñ‚Ð¾)\n"
 
-#: vms-alpha.c:6190
+#: vms-alpha.c:6621
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (Ð¿Ð¾Ñ�Ñ‚Ð°Ð²Ñ™Ð° Ð¼ÐµÑ�Ñ‚Ð¾)\n"
 
-#: vms-alpha.c:6193
+#: vms-alpha.c:6624
 #, c-format
 msgid "CTL_STKDL (stack defined location)\n"
 msgstr "CTL_STKDL (Ñ�Ð¿Ñ€ÐµÐ¼Ð½Ð¸ÐºÐ¾Ð¼ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾ Ð¼ÐµÑ�Ñ‚Ð¾)\n"
 
-#: vms-alpha.c:6196 vms-alpha.c:6610
+#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð¾*\n"
 
-#: vms-alpha.c:6226 vms-alpha.c:6265
+#: vms-alpha.c:6657 vms-alpha.c:6696
 #, c-format
 msgid "cannot read GST record length\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð´ÑƒÐ¶Ð¸Ð½Ñƒ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6247
+#: vms-alpha.c:6678
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ â€žEMHâ€œ Ñƒ Ð¿Ñ€Ð²Ð¾Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ\n"
 
-#: vms-alpha.c:6273
+#: vms-alpha.c:6704
 #, c-format
 msgid "cannot read GST record header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
 
-#: vms-alpha.c:6286
+#: vms-alpha.c:6717
 #, c-format
 msgid " corrupted GST\n"
 msgstr " Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¾ â€žGSTâ€œ\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6725
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ Ð·Ð°Ð¿Ð¸Ñ�\n"
 
-#: vms-alpha.c:6323
+#: vms-alpha.c:6754
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð² â€žEOBJâ€œ ÑƒÐ½Ð¾Ñ� Ð²Ñ€Ñ�Ñ‚Ðµ %u\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6778
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  Ð±Ñ€Ð¾Ñ˜ Ð±Ð¸Ñ‚Ð°: %u, Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6792
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   Ð¼Ð°Ð¿Ð° Ð±Ð¸Ñ‚Ð°: 0x%08x (ÑƒÐºÑƒÐ¿Ð½Ð¾: %u):\n"
 
-#: vms-alpha.c:6366
+#: vms-alpha.c:6799
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6391
+#: vms-alpha.c:6825
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  Ñ�Ð»Ð¸ÐºÐ° %u (%u ÑƒÐ½Ð¾Ñ�Ð°)\n"
 
-#: vms-alpha.c:6396
+#: vms-alpha.c:6831
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: 0x%08x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x\n"
 
-#: vms-alpha.c:6417
+#: vms-alpha.c:6853
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  Ñ�Ð»Ð¸ÐºÐ° %u (%u ÑƒÐ½Ð¾Ñ�Ð°), Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜:\n"
 
-#: vms-alpha.c:6424
+#: vms-alpha.c:6860
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6546
+#: vms-alpha.c:6982
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 Ð±Ð¸Ñ‚Ð° *Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6550
+#: vms-alpha.c:6987
 #, 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:6998
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "Ð½Ð¸Ð· â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð°Ð½\n"
 
-#: vms-alpha.c:6565
+#: vms-alpha.c:7003
 #, 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:7008
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "Ð°Ñ€-Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6573
+#: vms-alpha.c:7012
 #, 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:7022
 #, c-format
 msgid "Bounds:\n"
 msgstr "Ð“Ñ€Ð°Ð½Ð¸Ñ†Ðµ:\n"
 
-#: vms-alpha.c:6588
+#: vms-alpha.c:7028
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: Ð”Ð¾ÑšÐ°: %u, Ð³Ð¾Ñ€ÑšÐ°: %u\n"
 
-#: vms-alpha.c:6600
+#: vms-alpha.c:7040
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "Ð½Ð¸Ñ�ÐºÐ° Ð±Ð¸Ñ‚Ð° â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð°\n"
 
-#: vms-alpha.c:6604
+#: vms-alpha.c:7045
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð»Ð¾Ð¶Ð°Ñ˜: %u\n"
 
-#: vms-alpha.c:6624
+#: vms-alpha.c:7066
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "Ð²-Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: 0x%02x, Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: 0x%08x "
 
-#: vms-alpha.c:6630
+#: vms-alpha.c:7072
 #, c-format
 msgid "(no value)\n"
 msgstr "(Ð±ÐµÐ· Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸)\n"
 
-#: vms-alpha.c:6633
+#: vms-alpha.c:7075
 #, c-format
 msgid "(not active)\n"
 msgstr "(Ð½Ð¸Ñ˜Ðµ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾)\n"
 
-#: vms-alpha.c:6636
+#: vms-alpha.c:7078
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð´ÐµÑ™ÐµÐ½Ð¾)\n"
 
-#: vms-alpha.c:6639
+#: vms-alpha.c:7081
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº)\n"
 
-#: vms-alpha.c:6643
+#: vms-alpha.c:7085
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(Ð¿Ñ€Ð°Ñ‚ÐµÑ›Ð° Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚)\n"
 
-#: vms-alpha.c:6646
+#: vms-alpha.c:7088
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ˜Ð° Ñ�Ð»ÐµÐ´ÐµÑ›Ðµ Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸)\n"
 
-#: vms-alpha.c:6649
+#: vms-alpha.c:7091
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð±Ð¸Ñ‚Ð° %u)\n"
 
-#: vms-alpha.c:6652
+#: vms-alpha.c:7095
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(Ñ€ÐµÐ³Ð¸Ñ�Ñ‚Ð°Ñ€: %u, Ñ€Ð°Ð·Ð¼ÐµÑˆÑ‚Ð°Ñ˜: %u, Ð¸Ð½Ð´Ð¸Ñ€ÐµÐºÑ‚Ð½Ð¾: %u, Ð²Ñ€Ñ�Ñ‚Ð°: "
 
-#: vms-alpha.c:6659
+#: vms-alpha.c:7102
 msgid "literal"
 msgstr "Ð´Ð¾Ñ�Ð»Ð¾Ð²Ð½Ð¾Ñ�Ñ‚"
 
-#: vms-alpha.c:6662
+#: vms-alpha.c:7105
 msgid "address"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: vms-alpha.c:6665
+#: vms-alpha.c:7108
 msgid "desc"
 msgstr "Ð¾Ð¿Ð¸Ñ�"
 
-#: vms-alpha.c:6668
+#: vms-alpha.c:7111
 msgid "reg"
 msgstr "Ñ€ÐµÐ³"
 
-#: vms-alpha.c:6743
+#: vms-alpha.c:7128
+#, c-format
+msgid "len: %2u, kind: %2u "
+msgstr "Ð´ÑƒÐ¶Ð¸Ð½Ð°: %2u, Ð²Ñ€Ñ�Ñ‚Ð°: %2u "
+
+#: vms-alpha.c:7134
+#, c-format
+msgid "atomic, type=0x%02x %s\n"
+msgstr "Ð°Ñ‚Ð¾Ð¼Ñ�ÐºÐ¸, Ð²Ñ€Ñ�Ñ‚Ð°=0x%02x %s\n"
+
+#: vms-alpha.c:7138
+#, c-format
+msgid "indirect, defined at 0x%08x\n"
+msgstr "Ð½ÐµÐ¿Ð¾Ñ�Ñ€ÐµÐ´Ð½Ð¾, Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¾ Ð½Ð° 0x%08x\n"
+
+#: vms-alpha.c:7142
+#, c-format
+msgid "typed pointer\n"
+msgstr "ÑƒÐºÑƒÑ†Ð°Ð½Ð¸ Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡\n"
+
+#: vms-alpha.c:7146
+#, c-format
+msgid "pointer\n"
+msgstr "Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡\n"
+
+#: vms-alpha.c:7154
+#, c-format
+msgid "array, dim: %u, bitmap: "
+msgstr "Ð½Ð¸Ð·, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ð¸Ñ‚Ð¼Ð°Ð¿Ð°: "
+
+#: vms-alpha.c:7161
+#, c-format
+msgid "array descriptor:\n"
+msgstr "Ð¾Ð¿Ð¸Ñ�Ð½Ð¸Ðº Ð½Ð¸Ð·Ð°:\n"
+
+#: vms-alpha.c:7168
+#, c-format
+msgid "type spec for element:\n"
+msgstr "Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ Ð·Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚:\n"
+
+#: vms-alpha.c:7170
+#, c-format
+msgid "type spec for subscript %u:\n"
+msgstr "Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ Ð·Ð° Ð¿Ð¾Ð´Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñƒ â€ž%uâ€œ:\n"
+
+#: vms-alpha.c:7188
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:\n"
 
-#: vms-alpha.c:6754
+#: vms-alpha.c:7199
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ\n"
 
-#: vms-alpha.c:6759
+#: vms-alpha.c:7205
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " Ð²Ñ€Ñ�Ñ‚Ð°: %3u, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %3u (Ð¿Ñ€Ð¸ 0x%08x): "
 
-#: vms-alpha.c:6773
+#: vms-alpha.c:7219
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDSTâ€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð»\n"
 
-#: vms-alpha.c:6816
+#: vms-alpha.c:7262
 #, c-format
 msgid "standard data: %s\n"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ð´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ†Ð¸: %s\n"
 
-#: vms-alpha.c:6819 vms-alpha.c:6903
+#: vms-alpha.c:7265 vms-alpha.c:7353
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6826
+#: vms-alpha.c:7272
 #, c-format
 msgid "modbeg\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð¼Ð¾Ð´ÑƒÐ»Ð°\n"
 
-#: vms-alpha.c:6827
+#: vms-alpha.c:7274
 #, 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:7280 vms-alpha.c:7554
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð¼Ð¾Ð´ÑƒÐ»Ð°           : %.*s\n"
 
-#: vms-alpha.c:6836
+#: vms-alpha.c:7283
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   Ð¿Ñ€ÐµÐ²Ð¾Ð´Ð¸Ð»Ð°Ñ†  : %.*s\n"
 
-#: vms-alpha.c:6841
+#: vms-alpha.c:7288
 #, c-format
 msgid "modend\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ð¼Ð¾Ð´ÑƒÐ»Ð°\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7295
 msgid "rtnbeg\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ñ€ÑƒÑ‚Ð¸Ð½Ðµ\n"
 
-#: vms-alpha.c:6849
+#: vms-alpha.c:7297
 #, 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:7302
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð¸Ð² Ñ€ÑƒÑ‚Ð¸Ð½Ðµ : %.*s\n"
 
-#: vms-alpha.c:6862
+#: vms-alpha.c:7310
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ñ€ÑƒÑ‚Ð¸Ð½Ðµ: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° 0x%08x\n"
 
-#: vms-alpha.c:6870
+#: vms-alpha.c:7318
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð±ÐºÐ¿Ñ‚ Ð°Ð´Ñ€ÐµÑ�Ð° 0x%08x\n"
 
-#: vms-alpha.c:6878
+#: vms-alpha.c:7327
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "ÐµÐ¿Ð¸Ð»Ð¾Ð³: Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð±Ñ€Ð¾Ñ˜: %u\n"
 
-#: vms-alpha.c:6887
+#: vms-alpha.c:7337
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "Ð±Ð»Ðº Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6896
+#: vms-alpha.c:7346
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "Ð±Ð»Ðº ÐºÑ€Ð°Ñ˜: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6902
+#: vms-alpha.c:7352
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "Ð¾Ð´Ñ€ÐµÐ´Ð±Ð° Ð²Ñ€Ñ�Ñ‚Ðµ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:6909
+#: vms-alpha.c:7359
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ð¾Ñ�Ñ‚Ð°Ð²ÐºÐµ, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6918
+#: vms-alpha.c:7368
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð·Ð°Ð¿Ð¸Ñ�Ð°: Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7370
+#, c-format
+msgid "    len: %u bits\n"
+msgstr "    Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u Ð±Ð¸Ñ‚Ð°\n"
+
+#: vms-alpha.c:7375
 #, c-format
 msgid "recend\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ð·Ð°Ð¿Ð¸Ñ�Ð°\n"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7379
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6932
+#: vms-alpha.c:7383
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð¸ Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:6936
+#: vms-alpha.c:7387
 #, c-format
 msgid "enumend\n"
 msgstr "ÐºÑ€Ð°Ñ˜ Ð±Ñ€Ð¾Ñ˜Ð°ÑšÐ°\n"
 
-#: vms-alpha.c:6953
+#: vms-alpha.c:7392
+#, c-format
+msgid "label, name: %.*s\n"
+msgstr "Ð½Ð°Ñ‚Ð¿Ð¸Ñ�, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
+
+#: vms-alpha.c:7394
+#, c-format
+msgid "    address: 0x%08x\n"
+msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
+
+#: vms-alpha.c:7404
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "Ð½ÐµÐ¿Ñ€ÐµÐºÐ¸Ð´Ð½Ð¸ Ð¾Ð¿Ñ�ÐµÐ³ (Ð±Ñ€.: %u)\n"
 
-#: vms-alpha.c:6955
+#: vms-alpha.c:7407
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:6965
+#: vms-alpha.c:7417
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "Ð±Ñ€Ð¾Ñ˜ Ñ€ÐµÐ´Ð°  (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:6982
+#: vms-alpha.c:7434
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:6989
+#: vms-alpha.c:7441
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:6995
+#: vms-alpha.c:7447
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7001
+#: vms-alpha.c:7453
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7007
+#: vms-alpha.c:7459
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7012
+#: vms-alpha.c:7464
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7017
+#: vms-alpha.c:7469
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7022
+#: vms-alpha.c:7474
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7026
+#: vms-alpha.c:7478
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7031
+#: vms-alpha.c:7483
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7033
+#: vms-alpha.c:7485
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7038
+#: vms-alpha.c:7490
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7040
+#: vms-alpha.c:7492
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7046
+#: vms-alpha.c:7498
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "delta pc +%-4d"
 
-#: vms-alpha.c:7049
+#: vms-alpha.c:7502
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x Ñ€ÐµÐ´: %5u\n"
 
-#: vms-alpha.c:7054
+#: vms-alpha.c:7507
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:7069
+#: vms-alpha.c:7522
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "Ð¸Ð·Ð²Ð¾Ñ€ (Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7083
+#: vms-alpha.c:7537
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u, Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ: %u, Ð¸Ð´ Ð¿Ð¾Ñ™Ð°: %u\n"
 
-#: vms-alpha.c:7087
+#: vms-alpha.c:7542
 #, 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:7551
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ: %.*s\n"
 
-#: vms-alpha.c:7105
+#: vms-alpha.c:7560
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7110 vms-alpha.c:7115
+#: vms-alpha.c:7565 vms-alpha.c:7570
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7120 vms-alpha.c:7125
+#: vms-alpha.c:7575 vms-alpha.c:7580
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7130 vms-alpha.c:7135
+#: vms-alpha.c:7585 vms-alpha.c:7590
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7139
+#: vms-alpha.c:7594
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7143
+#: vms-alpha.c:7598
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   *Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:7155
+#: vms-alpha.c:7610
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "*Ð½ÐµÐ¾Ð±Ñ€Ð°Ð´Ð¸Ð²Ð°* Ð´Ñ�Ñ‚ Ð²Ñ€Ñ�Ñ‚Ð° â€ž%uâ€œ\n"
 
-#: vms-alpha.c:7187
+#: vms-alpha.c:7642
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHDâ€œ\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7646
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u, Ð±Ñ€Ð¾Ñ˜ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°: %u)\n"
 
-#: vms-alpha.c:7193
+#: vms-alpha.c:7650
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " Ð²ÐµÑ›Ð¸ Ð¸Ð´: %u, Ð¼Ð°ÑšÐ¸ Ð¸Ð´: %u\n"
 
-#: vms-alpha.c:7201
+#: vms-alpha.c:7658
 msgid "executable"
 msgstr "Ð¸Ð·Ð²Ñ€ÑˆÐ½Ð°"
 
-#: vms-alpha.c:7204
+#: vms-alpha.c:7661
 msgid "linkable image"
 msgstr "Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð° Ñ�Ð»Ð¸ÐºÐ°"
 
-#: vms-alpha.c:7210
+#: vms-alpha.c:7668
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " Ð²Ñ€Ñ�Ñ‚Ð° Ñ�Ð»Ð¸ÐºÐµ: %u (%s)"
 
-#: vms-alpha.c:7216
+#: vms-alpha.c:7674
 msgid "native"
 msgstr "Ð¸Ð·Ð²Ð¾Ñ€Ð½Ð°"
 
-#: vms-alpha.c:7219
+#: vms-alpha.c:7677
 msgid "CLI"
-msgstr "ÐšÐ›Ð˜"
+msgstr "CLI"
 
-#: vms-alpha.c:7225
+#: vms-alpha.c:7684
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", Ð¿Ð¾Ð´Ð²Ñ€Ñ�Ñ‚Ð°: %u (%s)\n"
 
-#: vms-alpha.c:7231
+#: vms-alpha.c:7691
 #, 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:7695
 #, c-format
 msgid " fixup info rva: "
 msgstr " Ð¿Ð¾Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¸Ð½Ñ„Ð¾ Ñ€Ð²Ð°: "
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7697
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ñ€Ð²Ð°: "
 
-#: vms-alpha.c:7240
+#: vms-alpha.c:7700
 #, c-format
 msgid ""
 "\n"
@@ -5615,624 +7703,808 @@ msgstr ""
 "\n"
 " Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð½Ð¸Ð·Ð° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ: %u\n"
 
-#: vms-alpha.c:7244
+#: vms-alpha.c:7705
 #, 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:7711
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°: %08x:"
 
-#: vms-alpha.c:7280
+#: vms-alpha.c:7742
 #, 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:7748
 #, c-format
 msgid " BPAGE: %u"
 msgstr " Ð‘Ð¡Ð¢Ð Ð�Ð�Ð˜Ð¦Ð�: %u"
 
-#: vms-alpha.c:7292
+#: vms-alpha.c:7755
 #, c-format
 msgid ", ext fixup offset: %u, no_opt psect off: %u"
 msgstr ", Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ñ�Ð¿Ð¾Ñ™Ð½Ðµ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ: %u, Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ° â€žno_optâ€œ-Ð°: %u"
 
-#: vms-alpha.c:7295
+#: vms-alpha.c:7758
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", Ð°Ð»Ð¸Ñ˜Ð°Ñ�: %u\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7766
 #, c-format
 msgid "system version array information:\n"
 msgstr "Ð½Ð¸Ð· Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð²ÐµÑ€Ð·Ð¸Ñ˜Ðµ Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð°:\n"
 
-#: vms-alpha.c:7307
+#: vms-alpha.c:7770
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHVNâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ\n"
 
-#: vms-alpha.c:7317
+#: vms-alpha.c:7780
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHVNâ€œ Ð¸Ð·Ð´Ð°ÑšÐµ\n"
 
-#: vms-alpha.c:7320
+#: vms-alpha.c:7783
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7324
+#: vms-alpha.c:7787
 msgid "BASE_IMAGE       "
 msgstr "Ð¡Ð›Ð˜ÐšÐ�_ÐžÐ¡Ð�ÐžÐ’Ð•       "
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7790
 msgid "MEMORY_MANAGEMENT"
 msgstr "Ð£ÐŸÐ Ð�Ð’Ð‰Ð�ÐŠÐ•_ÐœÐ•ÐœÐžÐ Ð˜ÐˆÐžÐœ"
 
-#: vms-alpha.c:7330
+#: vms-alpha.c:7793
 msgid "IO               "
 msgstr "Ð£Ð˜               "
 
-#: vms-alpha.c:7333
+#: vms-alpha.c:7796
 msgid "FILES_VOLUMES    "
 msgstr "Ð’ÐžÐ›Ð£ÐœÐ•Ð�Ð˜_Ð”Ð�Ð¢ÐžÐ¢Ð•ÐšÐ�    "
 
-#: vms-alpha.c:7336
+#: vms-alpha.c:7799
 msgid "PROCESS_SCHED    "
 msgstr "Ð—Ð�ÐšÐ�Ð—Ð�Ð�Ð˜_ÐŸÐ ÐžÐ¦Ð•Ð¡Ð˜    "
 
-#: vms-alpha.c:7339
+#: vms-alpha.c:7802
 msgid "SYSGEN           "
 msgstr "Ð¡Ð¢Ð’Ð�Ð Ð�ÐŠÐ•_Ð¡Ð˜Ð¡Ð¢Ð•ÐœÐ�           "
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7805
 msgid "CLUSTERS_LOCKMGR "
 msgstr "ÐœÐ“Ð Ð—Ð�ÐšÐ‰Ð£Ð§Ð�Ð’Ð�ÐŠÐ•_ÐšÐ›Ð�Ð¡Ð¢Ð•Ð Ð� "
 
-#: vms-alpha.c:7345
+#: vms-alpha.c:7808
 msgid "LOGICAL_NAMES    "
 msgstr "Ð›ÐžÐ“Ð˜Ð§ÐšÐ˜_Ð�Ð�Ð—Ð˜Ð’Ð˜    "
 
-#: vms-alpha.c:7348
+#: vms-alpha.c:7811
 msgid "SECURITY         "
 msgstr "Ð‘Ð•Ð—Ð‘Ð•Ð”Ð�ÐžÐ¡Ð¢         "
 
-#: vms-alpha.c:7351
+#: vms-alpha.c:7814
 msgid "IMAGE_ACTIVATOR  "
 msgstr "ÐŸÐžÐšÐ Ð•Ð¢Ð�Ð§_Ð¡Ð›Ð˜ÐšÐ•  "
 
-#: vms-alpha.c:7354
+#: vms-alpha.c:7817
 msgid "NETWORKS         "
 msgstr "ÐœÐ Ð•Ð–Ð•         "
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7820
 msgid "COUNTERS         "
 msgstr "Ð‘Ð ÐžÐˆÐ�Ð§Ð˜         "
 
-#: vms-alpha.c:7360
+#: vms-alpha.c:7823
 msgid "STABLE           "
 msgstr "Ð¡Ð¢Ð�Ð‘Ð˜Ð›Ð�Ðž           "
 
-#: vms-alpha.c:7363
+#: vms-alpha.c:7826
 msgid "MISC             "
 msgstr "Ð Ð�Ð—Ð�Ðž             "
 
-#: vms-alpha.c:7366
+#: vms-alpha.c:7829
 msgid "CPU              "
-msgstr "Ð¦ÐŸÐ£              "
+msgstr "Ð¦ÐŸÐˆ              "
 
-#: vms-alpha.c:7369
+#: vms-alpha.c:7832
 msgid "VOLATILE         "
 msgstr "ÐŸÐ ÐžÐœÐ•Ð�Ð‰Ð˜Ð’Ðž         "
 
-#: vms-alpha.c:7372
+#: vms-alpha.c:7835
 msgid "SHELL            "
 msgstr "Ð¨ÐšÐžÐ‰ÐšÐ�            "
 
-#: vms-alpha.c:7375
+#: vms-alpha.c:7838
 msgid "POSIX            "
 msgstr "ÐŸÐžÐ¡Ð˜ÐšÐ¡            "
 
-#: vms-alpha.c:7378
+#: vms-alpha.c:7841
 msgid "MULTI_PROCESSING "
 msgstr "Ð’Ð˜Ð¨Ð•_ÐžÐ‘Ð Ð�Ð”Ð�Ðž "
 
-#: vms-alpha.c:7381
+#: vms-alpha.c:7844
 msgid "GALAXY           "
 msgstr "Ð“Ð�Ð›Ð�ÐšÐ¡Ð˜ÐˆÐ�           "
 
-#: vms-alpha.c:7384
+#: vms-alpha.c:7847
 msgid "*unknown*        "
 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:7863 vms-alpha.c:8137
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHAâ€œ\n"
 
-#: vms-alpha.c:7403
+#: vms-alpha.c:7866
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ:  (Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°=%u)\n"
 
-#: vms-alpha.c:7405
+#: vms-alpha.c:7869
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " ÐŸÑ€Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7408
+#: vms-alpha.c:7873
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7411
+#: vms-alpha.c:7877
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " Ð¢Ñ€ÐµÑ›Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7881
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " Ð§ÐµÑ‚Ð²Ñ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð° : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7417
+#: vms-alpha.c:7885
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " Ð”ÐµÑ™ÐµÐ½Ð° Ñ�Ð»Ð¸ÐºÐ°   : 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7428
+#: vms-alpha.c:7896
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHIâ€œ\n"
 
-#: vms-alpha.c:7431
+#: vms-alpha.c:7900
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "ÐŸÑ€ÐµÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ðµ: %u, Ð¼Ð°ÑšÐµ: %u)\n"
 
-#: vms-alpha.c:7434
+#: vms-alpha.c:7903
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " Ð½Ð°Ð·Ð¸Ð² Ñ�Ð»Ð¸ÐºÐµ    : %.*s\n"
 
-#: vms-alpha.c:7436
+#: vms-alpha.c:7905
 #, c-format
 msgid " link time        : %s\n"
 msgstr " Ð²Ñ€ÐµÐ¼Ðµ Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°  : %s\n"
 
-#: vms-alpha.c:7438
+#: vms-alpha.c:7907
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ñ�Ð»Ð¸ÐºÐµ       : %.*s\n"
 
-#: vms-alpha.c:7440
+#: vms-alpha.c:7909
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°Ñ‡Ð°       : %.*s\n"
 
-#: vms-alpha.c:7442
+#: vms-alpha.c:7911
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ Ð¸Ð·Ð³Ñ€Ð°Ð´ÑšÐµ Ñ�Ð»Ð¸ÐºÐµ: %.*s\n"
 
-#: vms-alpha.c:7452
+#: vms-alpha.c:7921
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEIHSâ€œ\n"
 
-#: vms-alpha.c:7455
+#: vms-alpha.c:7925
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» Ñ�Ð»Ð¸ÐºÐµ Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: (Ð²ÐµÑ›Ðµ: %u, Ð¼Ð°ÑšÐµ: %u)\n"
 
-#: vms-alpha.c:7460
+#: vms-alpha.c:7931
 #, 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:7936
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚ÐµÐ³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°: Ð²Ð±Ð½: %u, Ð·Ð°Ð¿Ð¸Ñ�Ð¸: %u\n"
 
-#: vms-alpha.c:7468
+#: vms-alpha.c:7941
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°: Ð²Ð±Ð½: %u, Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7954
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žEISDâ€œ\n"
 
-#: vms-alpha.c:7491
+#: vms-alpha.c:7965
 #, 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:7973
 #, 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:7978
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ : 0x%04x"
 
-#: vms-alpha.c:7540
+#: vms-alpha.c:8016
 #, c-format
 msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
 msgstr " Ð²Ð±Ð½: %u, Ð¿Ñ„Ñ†: %u, Ð¿Ð¾Ñ€ÐµÐ´Ð¸_Ñ†Ñ‚Ð»: %u Ð²Ñ€Ñ�Ñ‚Ð°: %u ("
 
-#: vms-alpha.c:7546
+#: vms-alpha.c:8022
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7549
+#: vms-alpha.c:8025
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7552
+#: vms-alpha.c:8028
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7555
+#: vms-alpha.c:8031
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7558
+#: vms-alpha.c:8034
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7561
+#: vms-alpha.c:8037
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7567
+#: vms-alpha.c:8043
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7569
+#: vms-alpha.c:8046
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " ÑƒÐ²Ð»Ð°Ñ‡ÐµÑšÐµ: 0x%08x, Ð½Ð°Ð·Ð¸Ð²: %.*s\n"
 
-#: vms-alpha.c:7579
+#: vms-alpha.c:8056
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ\n"
 
-#: vms-alpha.c:7583
+#: vms-alpha.c:8060
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ð¼Ð¾Ð´ÑƒÐ»Ð° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°:\n"
 
-#: vms-alpha.c:7592
+#: vms-alpha.c:8069
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ\n"
 
-#: vms-alpha.c:7597
+#: vms-alpha.c:8075
 #, 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:8085
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDMTâ€œ Ð¿-Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:8089
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  Ð¿Ð¾Ñ‡ÐµÑ‚Ð°Ðº Ð¿-Ð¾Ð´ÐµÑ™ÐºÐ°: 0x%08x, Ð´ÑƒÐ¶Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7623
+#: vms-alpha.c:8102
 #, c-format
 msgid "cannot read DST\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žDSTâ€œ\n"
 
-#: vms-alpha.c:7633
+#: vms-alpha.c:8112
 #, c-format
 msgid "cannot read GST\n"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ â€žGSTâ€œ\n"
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:8116
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿ÑˆÑ‚Ð¸Ñ… Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°:\n"
 
-#: vms-alpha.c:7665
+#: vms-alpha.c:8143
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ° Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð°Ñ‡Ð° Ñ�Ð»Ð¸ÐºÐµ: (Ð²ÐµÑ›Ð¸: %u, Ð¼Ð°ÑšÐ¸: %u)\n"
 
-#: vms-alpha.c:7668
+#: vms-alpha.c:8147
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  Ð¸Ð°Ñ„ Ð²ÐµÐ·Ð° : 0x%08x %08x\n"
 
-#: vms-alpha.c:7671
+#: vms-alpha.c:8151
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  Ð²ÐµÐ·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ: 0x%08x %08x\n"
 
-#: vms-alpha.c:7674
+#: vms-alpha.c:8154
 #, c-format
 msgid "  size : %u\n"
 msgstr "  Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° : %u\n"
 
-#: vms-alpha.c:7676
+#: vms-alpha.c:8156
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ  : 0x%08x\n"
 
-#: vms-alpha.c:7680
+#: vms-alpha.c:8161
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7684
+#: vms-alpha.c:8166
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7688
+#: vms-alpha.c:8171
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7691
+#: vms-alpha.c:8174
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:7694
+#: vms-alpha.c:8178
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:7696
+#: vms-alpha.c:8181
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:7699
+#: vms-alpha.c:8184
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:8186
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:7709
+#: vms-alpha.c:8194
 #, c-format
 msgid " Shareable images:\n"
 msgstr " Ð”ÐµÑ™Ð¸Ð²Ðµ Ñ�Ð»Ð¸ÐºÐµ:\n"
 
-#: vms-alpha.c:7713
+#: vms-alpha.c:8199
 #, 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:8206
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:8211
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð´ÑƒÐ³Ðµ-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7730
+#: vms-alpha.c:8216
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ â€ž.addressâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ Ñ‡ÐµÑ‚Ð²Ð¾Ñ€Ð¾-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7735
+#: vms-alpha.c:8221
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ â€ž.addressâ€œ ÑƒÐ¿ÑƒÑ‚Ðµ Ð´ÑƒÐ³Ðµ-Ñ€ÐµÑ‡Ð¸:\n"
 
-#: vms-alpha.c:7740
+#: vms-alpha.c:8226
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð°Ð´Ñ€ÐµÑ�Ðµ ÐºÐ¾Ð´Ð°:\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:8231
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " Ð˜Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ ÑƒÐ¿ÑƒÑ‚Ðµ Ð¿Ð°Ñ€Ð¾Ð²Ð° Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°:\n"
 
-#: vms-alpha.c:7754
+#: vms-alpha.c:8240
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " ÐŸÑ€Ð¾Ð¼ÐµÐ½Ð° Ð·Ð°ÑˆÑ‚Ð¸Ñ‚Ðµ (%u ÑƒÐ½Ð¾Ñ�Ð°):\n"
 
-#: vms-alpha.c:7759
+#: vms-alpha.c:8246
 #, 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:9123
 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:9194
+#, 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:1527
 #, c-format
 msgid "could not open shared image '%s' from '%s'"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¾Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ Ð´ÐµÑ™ÐµÐ½Ñƒ Ñ�Ð»Ð¸ÐºÑƒ â€ž%sâ€œ Ð¸Ð· â€ž%sâ€œ"
 
-#: vms-misc.c:360
+#: vms-misc.c:370
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr "â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð½ÑƒÐ»Ð° Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°"
 
-#: vms-misc.c:365
+#: vms-misc.c:375
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr "â€ž_bfd_vms_output_countedâ€œ Ñ˜Ðµ Ð¿Ð¾Ð·Ð²Ð°Ð½Ð¾ Ñ�Ð° Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð±Ð°Ñ˜Ñ‚Ð¾Ð²Ð°"
 
-#: xcofflink.c:824
+#: xcofflink.c:832
 #, 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:853
 #, 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:1417
+#, 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:1470
+#, 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:1493
+#, 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:1506
+#, 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:1519
-msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d"
-msgstr "%B: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %d"
+#: xcofflink.c:1537
+#, c-format
+msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
+msgstr "%pB: â€žXMC_TC0â€œ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ñ˜Ðµ ÐºÐ»Ð°Ñ�Ð° %d Ñ�Ñ†Ð½Ð´ÑƒÐ¶Ð¸Ð½Ðµ %<PRId64>"
 
-#: xcofflink.c:1665
-msgid "%B: csect `%s' not in enclosing section"
-msgstr "%B: Ñ†-Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ð·Ð°Ñ‚Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›ÐµÐ¼ Ð¾Ð´ÐµÑ™ÐºÑƒ"
+#: xcofflink.c:1684
+#, 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:1792
+#, 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:2113
+#, c-format
+msgid "%pB: reloc %s:%<PRId64> not in csect"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%s:%<PRId64>â€œ Ð½Ð¸Ñ˜Ðµ Ñƒ Ñ†-Ð¾Ð´ÐµÑ™ÐºÑƒ"
 
-#: xcofflink.c:3182
+#: xcofflink.c:3199
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: Ð½ÐµÐ¼Ð° Ñ‚Ð°ÐºÐ²Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
 
-#: xcofflink.c:3287
+#: xcofflink.c:3310
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜ Ð¸Ð·Ð²Ð¾Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
 
-#: xcofflink.c:3666
+#: xcofflink.c:3689
 msgid "error: undefined symbol __rtinit"
 msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž__rtinitâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
 
-#: xcofflink.c:4045
-msgid "%B: loader reloc in unrecognized section `%s'"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+#: xcofflink.c:4067
+#, c-format
+msgid "%pB: loader reloc in unrecognized section `%s'"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾Ð¼ Ð¾Ð´ÐµÑ™ÐºÑƒ â€ž%sâ€œ"
+
+#: xcofflink.c:4079
+#, c-format
+msgid "%pB: `%s' in loader reloc but not loader sym"
+msgstr "%pB: â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð°"
+
+#: xcofflink.c:4096
+#, c-format
+msgid "%pB: loader reloc in read-only section %pA"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ â€ž%pAâ€œ"
+
+#: xcofflink.c:5124
+#, c-format
+msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
+msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: %#<PRIx64> > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°"
+
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2869
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ: 0x%02x"
+
+#: elfnn-aarch64.c:5245
+#, c-format
+msgid "%pB: error: erratum 835769 stub out of range (input file too large)"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 835769 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
+
+#: elfnn-aarch64.c:5337
+#, c-format
+msgid "%pB: error: erratum 843419 stub out of range (input file too large)"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð¾ÐºÑ€Ð°Ñ˜Ð°Ðº Ð³Ñ€ÐµÑˆÐºÐµ 843419 Ñ˜Ðµ Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð° (ÑƒÐ»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ°)"
+
+#: elfnn-aarch64.c:5350
+msgid "%pB: error: erratum 843419 immediate 0x%"
+msgstr "%pB: Ð³Ñ€ÐµÑˆÐºÐ°: Ð³Ñ€ÐµÑˆÐºÐ° 843419 Ð¸Ð·Ñ€Ð°Ð²Ð½Ð¾ 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: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ ÐºÐ¾Ñ˜Ð° Ñ�Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð¿Ð¾Ñ™Ð° Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ñ�Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: elfnn-aarch64.c:5904
+#, c-format
+msgid "%pB: conditional branch to undefined symbol `%s' not allowed"
+msgstr "%pB: ÑƒÑ�Ð»Ð¾Ð²Ð½Ð° Ð³Ñ€Ð°Ð½Ð° Ð·Ð° Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¸ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´Ð¾Ð·Ð²Ð¾Ñ™ÐµÐ½Ð°"
+
+#: elfnn-aarch64.c:5992
+#, c-format
+msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol"
+msgstr "%pB: Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¾Ð¿Ð¸Ñ�Ð½Ð¸ÐºÐ° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° Ð±Ð¸Ñ›Ðµ â€žNULLâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€Ð¸Ð¼ÐµÐ½Ðµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°"
+
+#: elfnn-aarch64.c:6105 elfnn-aarch64.c:6142
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: â€žTLSâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð½ÐµÐ´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ"
+
+#: elfnn-aarch64.c:7127
+msgid "too many GOT entries for -fpic, please recompile with -fPIC"
+msgstr "Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ â€žGOTâ€œ ÑƒÐ½Ð¾Ñ�Ð° Ð·Ð° â€ž-fpicâ€œ, Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ"
+
+#: 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 "Ñ˜ÐµÐ´Ð°Ð½ Ð¾Ð´ Ð¼Ð¾Ð³ÑƒÑ›Ð¸Ñ… Ñ€Ð°Ð·Ð»Ð¾Ð³Ð° Ð¾Ð²Ðµ Ð³Ñ€ÐµÑˆÐºÐµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ‚Ð¸ Ð´Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÐ¿ÑƒÑ‚Ð°Ð½ Ñƒ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼ ÐºÐ¾Ð´Ñƒ Ð¸Ð¼Ð° Ð²ÐµÑ›Ðµ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð½ÐµÐ³Ð¾ ÑˆÑ‚Ð¾ Ñ˜Ðµ Ð¾Ð±Ñ˜Ð°Ð²Ñ™ÐµÐ½Ð¾ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½"
+
+#: elfnn-aarch64.c:7722
+#, c-format
+msgid "%pB: relocation %s against `%s' can not be used when making a shared object"
+msgstr "%pB: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°"
+
+#: elfnn-riscv.c:221 elfnn-riscv.c:256
+#, c-format
+msgid "%pB: warning: RVE PLT generation not supported"
+msgstr "%pB: ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€žRVE PLTâ€œ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾"
+
+#: elfnn-riscv.c:2517
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%pcrel_loâ€œ Ð¾Ð´ÐµÑ™ÐºÐ° Ñ�Ð° Ñ�Ð°Ð±Ð¸Ñ€ÐºÐ¾Ð¼"
+
+#: elfnn-riscv.c:2739
+#, 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: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ â€ž%sâ€œ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ â€ž%sâ€œ Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÐ° Ð´ÐµÑ™ÐµÐ½Ð¾Ð³ Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð°; Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ€ÐµÐ²ÐµÐ´Ð¸Ñ‚Ðµ Ñ�Ð° â€ž-fPICâ€œ\n"
+
+#: elfnn-riscv.c:2749
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: Ð½ÐµÑ€ÐµÑˆÐ¸Ð²Ð¾ â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð° â€ž%sâ€œ\n"
+
+#: elfnn-riscv.c:2789
+msgid "%X%P: internal error: out of range error\n"
+msgstr "%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¸Ð·Ð²Ð°Ð½ Ð¾Ð¿Ñ�ÐµÐ³Ð°\n"
+
+#: elfnn-riscv.c:2794
+msgid "%X%P: internal error: unsupported relocation error\n"
+msgstr "%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾\n"
+
+#: elfnn-riscv.c:2800
+msgid "dangerous relocation error"
+msgstr "Ð¾Ð¿Ð°Ñ�Ð½Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
+
+#: elfnn-riscv.c:2806
+msgid "%X%P: internal error: unknown error\n"
+msgstr "%X%P: ÑƒÐ½ÑƒÑ‚Ñ€Ð°ÑˆÑšÐ° Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð³Ñ€ÐµÑˆÐºÐ°\n"
+
+#: elfnn-riscv.c:3337
+#, c-format
+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"
+
+#: elfnn-riscv.c:3370
+#, 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:3414
+#, c-format
+msgid "error: %pB: mis-matched ISA string to merge '%s' and '%s'"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜ÑƒÑ›Ð° ISA Ð½Ð¸Ñ�ÐºÐ° Ð·Ð° Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ â€ž%sâ€œ Ð¸ â€ž%sâ€œ"
+
+#: elfnn-riscv.c:3569
+#, c-format
+msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: ISA Ð½Ð¸Ñ�ÐºÐ° ÑƒÐ»Ð°Ð·Ð° (%s) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ (%s)"
+
+#: elfnn-riscv.c:3589
+#, c-format
+msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: â€žXLENâ€œ Ð½Ð¸Ñ�ÐºÐ° ÑƒÐ»Ð°Ð·Ð° (%u) Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð¸Ð·Ð»Ð°Ð·Ñƒ (%u)"
+
+#: elfnn-riscv.c:3597
+#, c-format
+msgid "error: %pB: unsupported XLEN (%u), you might be using wrong emulation"
+msgstr "Ð³Ñ€ÐµÑˆÐºÐ°: %pB: Ð½ÐµÐ¿Ð¾Ð´Ñ€Ð¶Ð°Ð½Ð¾ â€žXLENâ€œ (%u), Ð¼Ð¾Ð¶Ð´Ð° ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸Ñ‚Ðµ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ñƒ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ñƒ"
+
+#: elfnn-riscv.c:3711
+#, c-format
+msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%pBâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%u.%u.%uâ€œ Ð°Ð»Ð¸ Ð¸Ð·Ð»Ð°Ð· ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð¸Ð·Ð´Ð°ÑšÐµ â€ž%u.%u.%uâ€œ"
+
+#: elfnn-riscv.c:3729
+msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions"
+msgstr "ÑƒÐ¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¾Ð²Ð°Ð½Ð¾ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐµ 1.9.1 Ñ�Ðµ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ð²ÐµÐ·Ð°Ñ‚Ð¸ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¸Ð¼ Ñ�Ð¿ÐµÑ† Ð¸Ð·Ð´Ð°ÑšÐ¸Ð¼Ð°"
+
+#: elfnn-riscv.c:3757
+#, 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:3798
+#, 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â€œ"
 
-#: xcofflink.c:4056
-msgid "%B: `%s' in loader reloc but not loader sym"
-msgstr "%B: â€ž%sâ€œ Ñ˜Ðµ Ñƒ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÑƒ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ð°Ð»Ð¸ Ð½Ð¸Ñ˜Ðµ Ñ�Ð¸Ð¼Ð±Ð¾Ð» ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð°"
+#: elfnn-riscv.c:3852
+#, c-format
+msgid "%pB: can't link %s modules with %s modules"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ðµ Ñ�Ð° â€ž%sâ€œ Ð¼Ð¾Ð´ÑƒÐ»Ð¸Ð¼Ð°"
 
-#: xcofflink.c:4072
-msgid "%B: loader reloc in read-only section %A"
-msgstr "%B: Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ ÑƒÑ‚Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ‡Ð° Ñƒ Ð¾Ð´ÐµÑ™ÐºÑƒ Ñ�Ð°Ð¼Ð¾ Ð·Ð° Ñ‡Ð¸Ñ‚Ð°ÑšÐµ â€ž%Aâ€œ"
+#: elfnn-riscv.c:3862
+#, c-format
+msgid "%pB: can't link RVE with other target"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð²ÐµÐ¶ÐµÐ¼ â€žRVEâ€œ Ñ�Ð° Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ð¼ÐµÑ‚Ð¾Ð¼"
+
+#: elfnn-riscv.c:4400
+#, 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> Ñ˜Ðµ Ð¿Ñ€Ð¸Ñ�ÑƒÑ‚Ð½Ð¾"
+
+#: peXXigen.c:158
+#, c-format
+msgid "%pB: unable to find name for empty section"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð½Ð°Ð·Ð¸Ð² Ð·Ð° Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:185
+#, c-format
+msgid "%pB: out of memory creating name for empty section"
+msgstr "%pB: Ð¿Ð¾Ð½ÐµÑ�Ñ‚Ð°Ð»Ð¾ Ñ˜Ðµ Ð¼ÐµÐ¼Ð¾Ñ€Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸ Ñ�Ñ‚Ð²Ð°Ñ€Ð°ÑšÑƒ Ð½Ð°Ð·Ð¸Ð²Ð° Ð·Ð° Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: xcofflink.c:5094
+#: peXXigen.c:195
 #, c-format
-msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"
-msgstr "ÐŸÑ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°: 0x%lx > 0x10000; Ð¿Ñ€Ð¾Ð±Ð°Ñ˜Ñ‚Ðµ Ñ�Ð° â€ž-mminimal-tocâ€œ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ Ð¿Ñ€ÐµÐ²Ð¾Ñ’ÐµÑšÐ°"
+msgid "%pB: unable to create fake empty section"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ Ð»Ð°Ð¶Ð½Ð¸ Ð¿Ñ€Ð°Ð·Ð°Ð½ Ð¾Ð´ÐµÑ™Ð°Ðº"
 
-#: peigen.c:1009 pepigen.c:1009 pex64igen.c:1009
+#: peXXigen.c:527
 #, c-format
-msgid "%s: line number overflow: 0x%lx > 0xffff"
-msgstr "%s: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
+msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+msgstr "%pB: â€žaoutâ€œ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð½Ð°Ð²Ð¾Ð´Ð¸ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ°Ð½ Ð±Ñ€Ð¾Ñ˜ ÑƒÐ½Ð¾Ñ�Ð° Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°: %u"
 
-#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036
+#: peXXigen.c:1067
+#, c-format
+msgid "%pB: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: Ð¿Ñ€ÐµÐºÐ¾Ñ€Ð°Ñ‡ÐµÑšÐµ Ð±Ñ€Ð¾Ñ˜Ð° Ñ€ÐµÐ´Ð¾Ð²Ð°: 0x%lx > 0xffff"
+
+#: peXXigen.c:1220
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ð·Ð° [â€ž.edataâ€œ (Ð¸Ð»Ð¸ Ñ‚Ð°Ð¼Ð¾ Ð³Ð´Ðµ Ñ�Ð¼Ð¾ Ð³Ð° Ð½Ð°ÑˆÐ»Ð¸)]"
 
-#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037
+#: peXXigen.c:1221
 msgid "Import Directory [parts of .idata]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° [Ð´ÐµÐ¾ â€ž.idataâ€œ]"
 
-#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038
+#: peXXigen.c:1222
 msgid "Resource Directory [.rsrc]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° [.rsrc]"
 
-#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039
+#: peXXigen.c:1223
 msgid "Exception Directory [.pdata]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¸Ð·ÑƒÐ·ÐµÑ‚Ð°ÐºÐ° [.pdata]"
 
-#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040
+#: peXXigen.c:1224
 msgid "Security Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð±ÐµÐ·Ð±ÐµÐ´Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041
+#: peXXigen.c:1225
 msgid "Base Relocation Directory [.reloc]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° Ð¾Ñ�Ð½Ð¾Ð²Ðµ [.reloc]"
 
-#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042
+#: peXXigen.c:1226
 msgid "Debug Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:1043 pepigen.c:1043 pex64igen.c:1043
+#: peXXigen.c:1227
 msgid "Description Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð¿Ð¸Ñ�Ð°"
 
-#: peigen.c:1044 pepigen.c:1044 pex64igen.c:1044
+#: peXXigen.c:1228
 msgid "Special Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ñ�ÐµÐ±Ð½Ð¾Ñ�Ñ‚Ð¸"
 
-#: peigen.c:1045 pepigen.c:1045 pex64igen.c:1045
+#: peXXigen.c:1229
 msgid "Thread Storage Directory [.tls]"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ�Ð¼ÐµÑˆÑ‚Ð°Ñ˜Ð° Ð½Ð¸Ñ‚Ð¸ [.tls]"
 
-#: peigen.c:1046 pepigen.c:1046 pex64igen.c:1046
+#: peXXigen.c:1230
 msgid "Load Configuration Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´ÐµÑˆÐ°Ð²Ð°ÑšÐ° ÑƒÑ‡Ð¸Ñ‚Ð°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:1047 pepigen.c:1047 pex64igen.c:1047
+#: peXXigen.c:1231
 msgid "Bound Import Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ ÑƒÐ²Ð¾Ð·Ð° Ñ�Ð²ÐµÐ·Ð°"
 
-#: peigen.c:1048 pepigen.c:1048 pex64igen.c:1048
+#: peXXigen.c:1232
 msgid "Import Address Table Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ñ‚Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ"
 
-#: peigen.c:1049 pepigen.c:1049 pex64igen.c:1049
+#: peXXigen.c:1233
 msgid "Delay Import Directory"
 msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð·Ð°Ñ�Ñ‚Ð¾Ñ˜Ð° ÑƒÐ²Ð¾Ð·Ð°"
 
-#: peigen.c:1050 pepigen.c:1050 pex64igen.c:1050
+#: peXXigen.c:1234
 msgid "CLR Runtime Header"
 msgstr "Ð—Ð°Ð³Ð»Ð°Ð²Ñ™Ðµ Ð¦Ð›Ð  Ð¸Ð·Ð²Ñ€ÑˆÐ°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:1051 pepigen.c:1051 pex64igen.c:1051
+#: peXXigen.c:1235
 msgid "Reserved"
 msgstr "Ð ÐµÐ·ÐµÑ€Ð²Ð¸Ñ�Ð°Ð½Ð¾"
 
-#: peigen.c:1111 pepigen.c:1111 pex64igen.c:1111
+#: peXXigen.c:1282
 #, c-format
 msgid ""
 "\n"
@@ -6241,39 +8513,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:1288
 #, 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"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° ÑƒÐ²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\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"
-
-#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169
+#: peXXigen.c:1295
 #, 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:1301
 #, c-format
 msgid ""
 "\n"
@@ -6282,7 +8540,7 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±ÐµÐ»Ðµ ÑƒÐ²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)\n"
 
-#: peigen.c:1177 pepigen.c:1177 pex64igen.c:1177
+#: peXXigen.c:1304
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -6291,21 +8549,21 @@ msgstr ""
 " vma:            Ð�Ð°Ñ˜Ð°Ð²Ð°    Ð’Ñ€ÐµÐ¼Ðµ     Ð�Ð°Ð¿Ñ€ÐµÐ´    Ð”Ð›Ð›       ÐŸÑ€Ð²Ð¸\n"
 "                 Ð¢Ð°Ð±ÐµÐ»Ð°   ÐžÑ‚Ð¸Ñ�Ð°Ðº  Ð›Ð°Ð½Ð°Ñ†   Ð�Ð°Ð·Ð¸Ð²       ÐŸÐ¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼\n"
 
-#: peigen.c:1225 pepigen.c:1225 pex64igen.c:1225
+#: peXXigen.c:1353
 #, 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:1369
 #, 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:1394
 #, c-format
 msgid ""
 "\n"
@@ -6314,7 +8572,12 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð¿Ñ€Ð²Ð¸ Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
 
-#: peigen.c:1423 pepigen.c:1423 pex64igen.c:1423
+#: peXXigen.c:1438 peXXigen.c:1477
+#, c-format
+msgid "\t<corrupt: 0x%04lx>"
+msgstr "\t<Ð¾ÑˆÑ‚ÐµÑ›ÐµÑšÐµ: 0x%04lx>"
+
+#: peXXigen.c:1570
 #, c-format
 msgid ""
 "\n"
@@ -6323,7 +8586,16 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ñ˜Ðµ Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
 
-#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432
+#: peXXigen.c:1576
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜\n"
+
+#: peXXigen.c:1587
 #, c-format
 msgid ""
 "\n"
@@ -6332,7 +8604,16 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ�Ñ‚Ð°Ð½Ðµ Ñƒ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº\n"
 
-#: peigen.c:1438 pepigen.c:1438 pex64igen.c:1438
+#: peXXigen.c:1598
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but it is too small (%d)\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ˜Ðµ Ð¿Ñ€ÐµÐ¼Ð°Ð»Ð° (%d)\n"
+
+#: peXXigen.c:1604
 #, c-format
 msgid ""
 "\n"
@@ -6341,7 +8622,7 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ñ‚Ð°Ð±ÐµÐ»Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° Ñƒ â€ž%sâ€œ Ð½Ð° 0x%lx\n"
 
-#: peigen.c:1466 pepigen.c:1466 pex64igen.c:1466
+#: peXXigen.c:1632
 #, c-format
 msgid ""
 "\n"
@@ -6352,67 +8633,67 @@ msgstr ""
 "Ð¢Ð°Ð±ÐµÐ»Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž%sâ€œ)\n"
 "\n"
 
-#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470
+#: peXXigen.c:1636
 #, 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:1639
 #, 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:1643
 #, 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:1646
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Ð�Ð°Ð·Ð¸Ð² \t\t\t\t"
 
-#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485
+#: peXXigen.c:1657
 #, 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:1660
 #, c-format
 msgid "Number in:\n"
 msgstr "Ð‘Ñ€Ð¾Ñ˜ ÑƒÐ»Ð°Ð·Ð°:\n"
 
-#: peigen.c:1491 pepigen.c:1491 pex64igen.c:1491
+#: peXXigen.c:1663
 #, c-format
 msgid "\tExport Address Table \t\t%08lx\n"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° \t\t%08lx\n"
 
-#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495
+#: peXXigen.c:1667
 #, 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:1670
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð°\n"
 
-#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501
+#: peXXigen.c:1673
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¸Ð·Ð²Ð¾Ð·Ð° \t\t"
 
-#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506
+#: peXXigen.c:1678
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ð½Ð°Ð·Ð¸Ð²Ð° Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð° \t\t"
 
-#: peigen.c:1511 pepigen.c:1511 pex64igen.c:1511
+#: peXXigen.c:1683
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tÐ¢Ð°Ð±ÐµÐ»Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° \t\t\t"
 
-#: peigen.c:1525 pepigen.c:1525 pex64igen.c:1525
+#: peXXigen.c:1697
 #, c-format
 msgid ""
 "\n"
@@ -6421,15 +8702,20 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±ÐµÐ»Ð° Ð°Ð´Ñ€ÐµÑ�Ðµ Ð¸Ð·Ð²Ð¾Ð·Ð° â€”â€” ÐžÑ�Ð½Ð¾Ð²Ð° Ñ€ÐµÐ´Ð½Ð¸Ñ… Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° %ld\n"
 
-#: peigen.c:1544 pepigen.c:1544 pex64igen.c:1544
+#: peXXigen.c:1706
+#, 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:1725
 msgid "Forwarder RVA"
-msgstr "RVA Ð¿Ñ€ÐµÐ¾Ñ�Ð»ÐµÑ’Ð¸Ð²Ð°Ñ‡Ð°"
+msgstr "â€žRVAâ€œ Ð¿Ñ€Ð¾Ñ�Ð»ÐµÑ’Ð¸Ð²Ð°Ñ‡Ð°"
 
-#: peigen.c:1555 pepigen.c:1555 pex64igen.c:1555
+#: peXXigen.c:1737
 msgid "Export RVA"
-msgstr "RVA Ð¸Ð·Ð²Ð¾Ð·Ð°"
+msgstr "â€žRVAâ€œ Ð¸Ð·Ð²Ð¾Ð·Ð°"
 
-#: peigen.c:1562 pepigen.c:1562 pex64igen.c:1562
+#: peXXigen.c:1744
 #, c-format
 msgid ""
 "\n"
@@ -6438,18 +8724,41 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±ÐµÐ»Ð° [Ð ÐµÐ´Ð½Ð¸/Ð�Ð°Ð·Ð¸Ð² Ð¿Ð¾ÐºÐ°Ð·Ð¸Ð²Ð°Ñ‡Ð°]\n"
 
-#: peigen.c:1622 peigen.c:1805 pepigen.c:1622 pepigen.c:1805 pex64igen.c:1622
-#: pex64igen.c:1805
+#: peXXigen.c:1752
+#, 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:1759
+#, 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:1773
+#, c-format
+msgid "\t[%4ld] <corrupt offset: %lx>\n"
+msgstr "\t[%4ld] <Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜: %lx>\n"
+
+#: peXXigen.c:1827 peXXigen.c:1996
 #, 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:1831 peXXigen.c:2000
+#, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted .pdata section contents)\n"
+msgstr ""
+"\n"
+"Ð¢Ð°Ð±ÐµÐ»Ð° Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ Ð¾Ð´ÐµÑ™ÐºÐ° â€ž.pdataâ€œ)\n"
+
+#: peXXigen.c:1834
 #, 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:1836
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -6458,22 +8767,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:1849
 #, 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:2002
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -6482,7 +8781,7 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡ÐµÑ‚Ð°Ðº    ÐŸÑ€Ð¾Ð»Ð¾Ð³   Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ð° Ð—Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ    Ð˜Ð·ÑƒÐ·ÐµÑ‚Ð°Ðº Ð•Ð¥\n"
 "     \t\tÐ�Ð´Ñ€ÐµÑ�Ð°  Ð”ÑƒÐ¶Ð¸Ð½Ð°   Ð”ÑƒÐ¶Ð¸Ð½Ð°   32b Ð¸Ð·Ð²Ñ€  Ð ÑƒÐºÐ¾Ð²Ð»Ð°Ñ†   ÐŸÐ¾Ð´Ð°Ñ†Ð¸\n"
 
-#: peigen.c:1937 pepigen.c:1937 pex64igen.c:1937
+#: peXXigen.c:2123
 #, c-format
 msgid ""
 "\n"
@@ -6493,7 +8792,7 @@ msgstr ""
 "\n"
 "ÐŸÑ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð¾Ñ�Ð½Ð¾Ð²Ðµ ÐŸÐ• Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ (Ð¿Ñ€Ð¾Ñ‚ÑƒÐ¼Ð°Ñ‡ÐµÐ½Ð¸ Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜ â€ž.relocâ€œ Ð¾Ð´ÐµÑ™ÐºÐ°)\n"
 
-#: peigen.c:1966 pepigen.c:1966 pex64igen.c:1966
+#: peXXigen.c:2152
 #, c-format
 msgid ""
 "\n"
@@ -6502,57 +8801,62 @@ msgstr ""
 "\n"
 "Ð’Ð¸Ñ€Ñ‚ÑƒÐµÐ»Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: %08lx Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð´Ð»Ð¾Ð¼ÐºÐ° %ld (0x%lx) Ð‘Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ %ld\n"
 
-#: peigen.c:1979 pepigen.c:1979 pex64igen.c:1979
+#: peXXigen.c:2170
 #, 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:2231
 #, 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:2255
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "Ð½Ð°Ð·Ð¸Ð²: [Ð²Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %08lx Ð´ÑƒÐ¶Ð¸Ð½Ð° %d]: "
 
-#: peigen.c:2054 pepigen.c:2054 pex64igen.c:2054
+#: peXXigen.c:2275
 #, 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:2285
 #, 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:2290
 #, c-format
 msgid "ID: %#08lx"
 msgstr "Ð˜Ð”: %#08lx"
 
-#: peigen.c:2063 pepigen.c:2063 pex64igen.c:2063
+#: peXXigen.c:2293
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Ð’Ñ€ÐµÐ´Ð½Ð¾Ñ�Ñ‚: %#08lx\n"
 
-#: peigen.c:2074 pepigen.c:2074 pex64igen.c:2074
+#: peXXigen.c:2315
+#, c-format
+msgid "%03x %*.s  Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n"
+msgstr "%03x%*.s  Ð›Ð¸Ñ�Ñ‚: Ð�Ð´Ñ€ÐµÑ�Ð°: %#08lx, Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°: %#08lx, ÐšÐ¾Ð´Ð½Ð° Ñ�Ñ‚Ñ€Ð°Ð½Ð¸Ñ†Ð°: %d\n"
+
+#: peXXigen.c:2357
 #, 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:2365
 #, 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:2453
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½ Ñ˜Ðµ Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº!\n"
 
-#: peigen.c:2220 pepigen.c:2220 pex64igen.c:2220
+#: peXXigen.c:2477
 #, c-format
 msgid ""
 "\n"
@@ -6561,10 +8865,78 @@ msgstr ""
 "\n"
 "Ð£ÐŸÐžÐ—ÐžÐ Ð•ÐŠÐ•: Ð’Ð¸ÑˆÐ°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñƒ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™ÐºÑƒ â€“ Ð’Ð¸Ð½Ð´Ð¾ÑƒÐ· Ñ›Ðµ Ð¸Ñ… Ð·Ð°Ð½ÐµÐ¼Ð°Ñ€Ð¸Ñ‚Ð¸:\n"
 
+#: peXXigen.c:2483
+#, c-format
+msgid " String table starts at offset: %#03x\n"
+msgstr " Ð¢Ð°Ð±ÐµÐ»Ð° Ð½Ð¸Ñ�ÐºÐµ Ð¿Ð¾Ñ‡Ð¸ÑšÐµ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ: %#03x\n"
+
+#: peXXigen.c:2486
+#, c-format
+msgid " Resources start at offset: %#03x\n"
+msgstr " Ð˜Ð·Ð²Ð¾Ñ€Ð¸ÑˆÑ‚Ð° Ð¿Ð¾Ñ‡Ð¸ÑšÑƒ Ð½Ð° Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ñƒ: %#03x\n"
+
+#: peXXigen.c:2543
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory, but the section containing it could not be found\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°, Ð°Ð»Ð¸ Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð½Ð°Ñ’ÐµÐ¼ Ð¾Ð´ÐµÑ™Ð°Ðº ÐºÐ¾Ñ˜Ð¸ Ð³Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð¸\n"
+
+#: peXXigen.c:2549
+#, c-format
+msgid ""
+"\n"
+"There is a debug directory in %s, but that section has no contents\n"
+msgstr ""
+"\n"
+"ÐŸÐ¾Ñ�Ñ‚Ð¾Ñ˜Ð¸ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ â€ž%sâ€œ, Ð°Ð»Ð¸ Ñ‚Ð°Ñ˜ Ð¾Ð´ÐµÑ™Ð°Ðº Ð½ÐµÐ¼Ð° Ñ�Ð°Ð´Ñ€Ð¶Ð°Ñ˜Ð°\n"
+
+#: peXXigen.c:2556
+#, 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:2561
+#, 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:2568
+#, c-format
+msgid "The debug data size field in the data directory is too big for the section"
+msgstr "ÐŸÐ¾Ñ™Ðµ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ðµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ° Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:2573
+#, c-format
+msgid "Type                Size     Rva      Offset\n"
+msgstr "Ð’Ñ€Ñ�Ñ‚Ð°              Ð’ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°     Rva      ÐŸÐ¾Ð¼ÐµÑ€Ð°Ñ˜\n"
+
+#: peXXigen.c:2620
+#, c-format
+msgid "(format %c%c%c%c signature %s age %ld)\n"
+msgstr "(Ð·Ð°Ð¿Ð¸Ñ� %c%c%c%c Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ� %s Ñ�Ñ‚Ð°Ñ€Ð¾Ñ�Ñ‚ %ld)\n"
+
+#: peXXigen.c:2630
+#, 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:2714
 #, c-format
 msgid ""
 "\n"
@@ -6573,65 +8945,540 @@ msgstr ""
 "\n"
 "ÐžÑ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸ 0x%x\n"
 
-#: peigen.c:3194 pepigen.c:3194 pex64igen.c:3194
+#: peXXigen.c:2960
+#, c-format
+msgid "%pB: Data Directory (%lx bytes at %<PRIx64>) extends across section boundary at %<PRIx64>"
+msgstr "%pB: Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° (%lx Ð±Ð°Ñ˜Ñ‚Ð° Ð½Ð° %<PRIx64>) Ñ�Ðµ Ð¿Ñ€ÐµÐ½Ð¾Ñ�Ð¸ Ð¿Ñ€ÐµÐºÐ¾ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¾Ð´ÐµÑ™ÐºÐ° Ð½Ð° %<PRIx64>"
+
+#: peXXigen.c:2997
+msgid "failed to update file offsets in debug directory"
+msgstr "Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð¾Ñ�Ð²ÐµÐ¶Ð¸Ð¼ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜Ðµ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ Ñƒ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ñƒ Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
+
+#: peXXigen.c:3005
+#, c-format
+msgid "%pB: failed to read debug data section"
+msgstr "%pB: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ñ‡Ð¸Ñ‚Ð°Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ° Ð¿Ñ€Ð¾Ñ‡Ð¸ÑˆÑ›Ð°Ð²Ð°ÑšÐ°"
+
+#: peXXigen.c:3820
 #, 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:3955
 msgid ".rsrc merge failure: multiple non-default manifests"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð½Ðµ-Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°Ð½Ð¸Ñ… Ð¸Ñ�Ð¿Ð¾Ñ™Ð°Ð²Ð°ÑšÐ°"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ Ð½Ðµ-Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°Ð½Ð¸Ñ… Ð¸Ñ�Ð¿Ð¾Ñ™Ð°Ð²Ð°ÑšÐ°"
 
-#: peigen.c:3347 pepigen.c:3347 pex64igen.c:3347
+#: peXXigen.c:3973
 msgid ".rsrc merge failure: a directory matches a leaf"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð»Ð¸Ñ�Ñ‚Ñƒ"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð»Ð¸Ñ�Ñ‚Ñƒ"
 
-#: peigen.c:3389 pepigen.c:3389 pex64igen.c:3389
+#: peXXigen.c:4015
 msgid ".rsrc merge failure: duplicate leaf"
-msgstr "Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: ÑƒÐ´Ð²Ð¾Ñ�Ñ‚Ñ€ÑƒÑ‡ÐµÐ½Ð¸ Ð»Ð¸Ñ�Ñ‚"
 
-#: peigen.c:3391 pepigen.c:3391 pex64igen.c:3391
+#: peXXigen.c:4020
 #, 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:4087
+msgid ".rsrc merge failure: dirs with differing characteristics"
+msgstr "Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð¸ Ñ�Ð° Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚Ð¸Ð¼ Ð¾Ñ�Ð¾Ð±ÐµÐ½Ð¾Ñ�Ñ‚Ð¸Ð¼Ð°"
+
+#: peXXigen.c:4094
+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:4211
+#, c-format
+msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
+msgstr "%pB: Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:4219
+#, c-format
+msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
+msgstr "%pB: Ð½ÐµÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+
+#: peXXigen.c:4358
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$2â€œ"
+
+#: peXXigen.c:4378
 #, c-format
-msgid "%s: .rsrc merge failure: corrupt .rsrc section"
-msgstr "%s: Ð�Ð¸Ñ˜Ðµ ÑƒÑ�Ð¿ÐµÐ»Ð¾ â€ž.rsrcâ€œ Ñ�Ñ‚Ð°Ð¿Ð°ÑšÐµ: Ð¾ÑˆÑ‚ÐµÑ›ÐµÐ½Ð¸ â€ž.rsrcâ€œ Ð¾Ð´ÐµÑ™Ð°Ðº"
+msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[1] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$4â€œ"
+
+#: peXXigen.c:4399
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[12] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž.idata$5â€œ"
+
+#: peXXigen.c:4419
+#, 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:4461
+#, 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:4486
+#, c-format
+msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ½Ð¸Ð¼ Ñ€ÐµÑ‡Ð½Ð¸Ðº Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°[9] Ð·Ð°Ñ‚Ð¾ ÑˆÑ‚Ð¾ Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ˜Ðµ â€ž__tls_usedâ€œ"
+
+#~ 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 "Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¾ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ"
 
-#: 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â€œ"
+#~ 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: ARM call to Thumb"
+#~ msgstr ""
+#~ "%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 "%B: invalid relocation type %d"
+#~ msgstr "%B: Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+
+#~ 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 "%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 "%P%F: failed creating ex9.it %s hash table: %E\n"
+#~ msgstr "%P%F: Ð½Ð¸Ñ�Ð°Ð¼ ÑƒÑ�Ð¿ÐµÐ¾ Ð´Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ð¼ â€žex9.it %sâ€œ Ñ…ÐµÑˆ Ñ‚Ð°Ð±ÐµÐ»Ñƒ: %E\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 "%P: %H: %s reloc against local symbol\n"
+#~ msgstr "%P: %H: â€ž%sâ€œ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð½Ð°Ñ�Ð¿Ñ€Ð°Ð¼ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾Ð³ Ñ�Ð¸Ð¼Ð±Ð¾Ð»Ð°\n"
+
+#~ msgid "Warning: %B uses soft float, %B uses single-precision hard float"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ�Ð¾Ñ„Ñ‚Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ·, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ñ…Ð°Ñ€Ð´Ð²ÐµÑ€Ñ�ÐºÐ¸ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¸ Ð·Ð°Ñ€ÐµÐ· Ñ˜ÐµÐ´Ð½Ðµ Ñ‚Ð°Ñ‡Ð½Ð¾Ñ�Ñ‚Ð¸"
+
+#~ msgid "Warning: %B uses unknown floating point ABI %d"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð¿Ð¾ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³ Ð·Ð°Ñ€ÐµÐ·Ð°"
+
+#~ msgid "Warning: %B uses unknown vector ABI %d"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%dâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°"
+
+#~ msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\""
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð�Ð‘Ð˜ â€ž%sâ€œ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð°, â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ â€ž%sâ€œ"
+
+#~ msgid "Warning: %B uses unknown small structure return convention %d"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: â€ž%Bâ€œ ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¸ Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ€ Ð¼Ð°Ð»Ð¾Ð³ Ñ€ÐµÐ·ÑƒÐ»Ñ‚Ð°Ñ‚Ð° Ñ�Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ðµ â€ž%dâ€œ"
+
+#~ 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 " [G10]"
+#~ msgstr " [Ð“10]"
+
+#~ msgid "%s: Malformed reloc detected for section %s"
+#~ msgstr "%s: ÐžÑ‚ÐºÑ€Ð¸Ð²ÐµÐ½Ð¾ Ñ˜Ðµ Ð»Ð¾ÑˆÐµ Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ Ð·Ð° Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ"
+
+#~ msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS"
+#~ msgstr "%B: Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž Ð·Ð° â€ž%sâ€œ Ð·Ð°Ñ�ÐµÑšÑƒÑ˜Ðµ Ð¿Ñ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð¾ Ð£Ð’Ð•Ð—Ð˜ ÐšÐ�Ðž"
+
+#~ msgid "%B: Unrecognised .directive command: %s"
+#~ msgstr "%B: Ð�ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð½Ð°Ñ€ÐµÐ´Ð±Ð° â€ž.directiveâ€œ: %s"
+
+#~ msgid "%s: compiled as 32-bit object and %s is 64-bit"
+#~ msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 32-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 64-Ð±Ð¸Ñ‚Ð½Ð¸"
+
+#~ msgid "%s: compiled as 64-bit object and %s is 32-bit"
+#~ msgstr "%s: Ð¿Ñ€ÐµÐ²ÐµÐ´ÐµÐ½ Ñ˜Ðµ ÐºÐ°Ð¾ 64-Ð±Ð¸Ñ‚Ð½Ð¸ Ð¾Ð±Ñ˜ÐµÐºÐ°Ñ‚ Ð° â€ž%sâ€œ Ñ˜Ðµ 32-Ð±Ð¸Ñ‚Ð½Ð¸"
+
+#~ msgid "%s: object size does not match that of target %s"
+#~ msgstr "%s: Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð° Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸ Ñ†Ð¸Ñ™Ð° â€ž%sâ€œ"
+
+#~ msgid "%s: encountered datalabel symbol in input"
+#~ msgstr "%s: Ð½Ð°Ð¸ÑˆÐ°Ð¾ Ñ�Ð°Ð¼ Ð½Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» Ð½Ð°Ñ‚Ð¿Ð¸Ñ�Ð° Ð´Ð°Ñ‚ÑƒÐ¼Ð° Ñƒ ÑƒÐ»Ð°Ð·Ñƒ"
+
+#~ msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
+#~ msgstr "ÐŸÐ¢Ð‘ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHmediaâ€œ (Ð±Ð¸Ñ‚ 0 == 1)"
+
+#~ msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
+#~ msgstr "ÐŸÐ¢Ð� Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°: Ð°Ð´Ñ€ÐµÑ�Ð° â€žSHcompactâ€œ (Ð±Ð¸Ñ‚ 0 == 0)"
+
+#~ msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
+#~ msgstr "%s: Ð“Ð�Ð¡ Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð¾ ÐŸÐ¢Ð‘ â€žinsnâ€œ Ñ�Ð° â€žR_SH_PT_16â€œ"
+
+#~ msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n"
+#~ msgstr "%B: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%pâ€œ\n"
+
+#~ msgid "%s: could not write out added .cranges entries"
+#~ msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð´Ð¾Ð´Ð°Ñ‚Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+
+#~ msgid "%s: could not write out sorted .cranges entries"
+#~ msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð·Ð°Ð¿Ð¸ÑˆÐµÐ¼ Ð¿Ð¾Ñ€ÐµÑ’Ð°Ð½Ðµ â€ž.crangesâ€œ ÑƒÐ½Ð¾Ñ�Ðµ"
+
+#~ msgid "  %s: 0x%v\n"
+#~ msgstr "  %s: 0x%v\n"
+
+#~ msgid "%s: 0x%v 0x%v\n"
+#~ msgstr "%s: 0x%v 0x%v\n"
+
+#~ msgid "   %s%s %s\n"
+#~ msgstr "   %s%s %s\n"
+
+#~ msgid ", 8-byte data alignment"
+#~ msgstr ", 8-Ð±Ð¸Ñ‚Ð½Ð¾ Ð¿Ð¾Ñ€Ð°Ð²Ð½Ð°ÑšÐµ Ð¿Ð¾Ð´Ð°Ñ‚Ð°ÐºÐ°"
+
+#~ msgid "%B(%A+0x%"
+#~ msgstr "%B(%A+0x%"
+
+#~ msgid "%P: %B: cannot create stub entry %s\n"
+#~ msgstr "%P: %B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ð¼ ÑƒÐ½Ð¾Ñ� Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° â€ž%sâ€œ\n"
+
+#~ msgid "%P: stubs don't match calculated size\n"
+#~ msgstr "%P: Ð¾ÐºÑ€Ð°Ñ˜Ñ†Ð¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°Ñ˜Ñƒ Ð¸Ð·Ñ€Ð°Ñ‡ÑƒÐ½Ð°Ñ‚Ð¾Ñ˜ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð¸\n"
+
+#~ 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"
+
+#~ msgid "%P: %B: unknown relocation type %d for `%T'\n"
+#~ msgstr "%P: %B: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð·Ð° â€ž%Tâ€œ\n"
+
+#~ msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
+#~ msgstr "%s: Ð³Ñ€ÐµÑˆÐºÐ°: Ð½ÐµÐ¿Ð¾Ñ€Ð°Ð²Ð½Ð°Ñ‚Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ Ð½Ð° %08x Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐµ %08x\n"
+
+#~ 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 "invalid relocation type %d"
+#~ msgstr "Ð½ÐµÐ¸Ñ�Ð¿Ñ€Ð°Ð²Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð¿Ñ€ÐµÐ¼ÐµÑˆÑ‚Ð°ÑšÐ° â€ž%dâ€œ"
+
+#~ msgid "Output file requires shared library `%s'\n"
+#~ msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%sâ€œ\n"
+
+#~ msgid "Output file requires shared library `%s.so.%s'\n"
+#~ msgstr "Ð˜Ð·Ð»Ð°Ð·Ð½Ð° Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° Ð·Ð°Ñ…Ñ‚ÐµÐ²Ð° Ð´ÐµÑ™ÐµÐ½Ñƒ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ â€ž%s.so.%sâ€œ\n"
+
+#~ msgid "Symbol %s not defined for fixups\n"
+#~ msgstr "Ð¡Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð½Ð¸Ñ˜Ðµ Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ�Ð°Ð½ Ð·Ð° Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐµ\n"
+
+#~ msgid "Warning: fixup count mismatch\n"
+#~ msgstr "Ð£Ð¿Ð¾Ð·Ð¾Ñ€ÐµÑšÐµ: Ð±Ñ€Ð¾Ñ˜ Ð¸Ñ�Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ð½Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð°\n"
+
+#~ msgid "%s: string too long (%d chars, max 65535)"
+#~ msgstr "%s: Ð½Ð¸Ñ�ÐºÐ° Ñ˜Ðµ Ð¿Ñ€ÐµÐ´ÑƒÐ³Ð° (%d Ð·Ð½Ð°ÐºÐ°, Ð½Ð°Ñ˜Ð². 65535)"
+
+#~ msgid "%s: unrecognized symbol `%s' flags 0x%x"
+#~ msgstr "%s: Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ‚ Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%sâ€œ Ð·Ð°Ñ�Ñ‚Ð°Ð²Ð¸Ñ†Ðµ 0x%x"
+
+#~ msgid "%B: unimplemented ATI record %u for symbol %u"
+#~ msgstr "%B: Ð½ÐµÐ¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¸ Ð�Ð¢Ð˜ Ð·Ð°Ð¿Ð¸Ñ� â€ž%uâ€œ Ð·Ð° Ñ�Ð¸Ð¼Ð±Ð¾Ð» â€ž%uâ€œ"
+
+#~ msgid "%B: unexpected ATN type %d in external part"
+#~ msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð�Ð¢Ð� Ð²Ñ€Ñ�Ñ‚Ð° â€ž%dâ€œ Ñƒ Ñ�Ð¿Ð¾Ñ™Ð½Ð¾Ð¼ Ð´ÐµÐ»Ñƒ"
+
+#~ msgid "%B: unexpected type after ATN"
+#~ msgstr "%B: Ð½ÐµÐ¾Ñ‡ÐµÐºÐ¸Ð²Ð°Ð½Ð° Ð²Ñ€Ñ�Ñ‚Ð° Ð½Ð°ÐºÐ¾Ð½ Ð�Ð¢Ð�-Ð°"
+
+#~ msgid "%s: can not represent section `%s' in oasys"
+#~ msgstr "%s: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð¸Ð¼ Ð¾Ð´ÐµÑ™Ð°Ðº â€ž%sâ€œ Ñƒ â€žoasysâ€œ"
+
+#~ msgid "%B: `ld -r' not supported with PE MIPS objects\n"
+#~ msgstr "%B: â€žld -râ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ð¾Ð´Ñ€Ð¶Ð°Ð½ Ñ�Ð° Ð¾Ð±Ñ˜ÐµÐºÑ‚Ð¸Ð¼Ð° â€žPE MIPSâ€œ\n"
+
+#~ msgid "%B: unimplemented %s\n"
+#~ msgstr "%B: Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾ â€ž%sâ€œ\n"
+
+#~ msgid "%B: jump too far away\n"
+#~ msgstr "%B: Ñ�ÐºÐ¾Ðº Ñ˜Ðµ Ð¿Ñ€ÐµÐ²Ð¸ÑˆÐµ Ð´Ð°Ð»ÐµÐºÐ¾\n"
+
+#~ msgid "%B: bad pair/reflo after refhi\n"
+#~ msgstr "%B: Ð»Ð¾ÑˆÐµ â€žpair/refloâ€œ Ð½Ð°ÐºÐ¾Ð½ â€žrefhiâ€œ\n"
+
+#~ msgid "DST__K_SET_LINUM_INCR not implemented"
+#~ msgstr "â€žDST__K_SET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_SET_LINUM_INCR_W not implemented"
+#~ msgstr "â€žDST__K_SET_LINUM_INCR_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_RESET_LINUM_INCR not implemented"
+#~ msgstr "â€žDST__K_RESET_LINUM_INCRâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_BEG_STMT_MODE not implemented"
+#~ msgstr "â€žDST__K_BEG_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_END_STMT_MODE not implemented"
+#~ msgstr "â€žDST__K_END_STMT_MODEâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_SET_PC not implemented"
+#~ msgstr "â€žDST__K_SET_PCâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_SET_PC_W not implemented"
+#~ msgstr "â€žDST__K_SET_PC_Wâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_SET_PC_L not implemented"
+#~ msgstr "â€žDST__K_SET_PC_Lâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "DST__K_SET_STMTNUM not implemented"
+#~ msgstr "â€žDST__K_SET_STMTNUMâ€œ Ð½Ð¸Ñ˜Ðµ Ð¿Ñ€Ð¸Ð¼ÐµÑšÐµÐ½Ð¾"
+
+#~ msgid "[%u]: %u\n"
+#~ msgstr "[%u]: %u\n"
+
+#~ msgid ": %u.%u\n"
+#~ msgstr ": %u.%u\n"
 
 #~ msgid ""
 #~ "%B(%s): warning: interworking not enabled.\n"
@@ -6643,15 +9490,9 @@ msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ
 #~ msgid "DIV usage mismatch between %B and %B"
 #~ msgstr "incohÃ©rence d'utilisation de DIV entre %B et %B"
 
-#~ msgid "%B: bad relocation section name `%s'"
-#~ msgstr "%B: nom de section de rÃ©adressage erronÃ© Â«Â %sÂ Â»"
-
 #~ msgid "%P: dynamic variable `%s' is zero size\n"
 #~ msgstr "%P: la variable dynamique Â«Â %sÂ Â» a une taille nulle\n"
 
-#~ msgid " [64-bit doubles]"
-#~ msgstr " [doubles de 64 bits]"
-
 #~ msgid " [dsp]"
 #~ msgstr " [dsp]"
 
@@ -6679,24 +9520,6 @@ msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ
 #~ 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 "Mach-O header:\n"
-#~ msgstr "En-tÃªte Mach-O:\n"
-
-#~ msgid " magic     : %08lx\n"
-#~ msgstr " magique    : %08lx\n"
-
-#~ msgid " cputype   : %08lx (%s)\n"
-#~ msgstr " typecpu    : %08lx (%s)\n"
-
-#~ msgid " filetype  : %08lx (%s)\n"
-#~ msgstr " typefichier: %08lx (%s)\n"
-
-#~ msgid " ncmds     : %08lx (%lu)\n"
-#~ msgstr " ncmds     : %08lx (%lu)\n"
-
-#~ msgid " sizeofcmds: %08lx\n"
-#~ msgstr " taillecmds: %08lx\n"
-
 #~ msgid " flags     : %08lx ("
 #~ msgstr " fanions   : %08lx ("
 
@@ -6712,21 +9535,12 @@ msgstr "%B: Ð½Ðµ Ð¼Ð¾Ð³Ñƒ Ð´Ð° Ð¿Ð¾Ð¿ÑƒÐ
 #~ msgid "Symbol %s replaced by %s\n"
 #~ msgstr "Symbole %s remplacÃ© par %s\n"
 
-#~ msgid "%B(%A+0x%lx): cannot reach %s"
-#~ msgstr "%B(%A+0x%lx): ne peut atteindre %s"
-
-#~ msgid "%B: warning: ignoring duplicate section `%A'\n"
-#~ msgstr "%B: attention: ignore la section dupliquÃ©e Â«%AÂ»\n"
-
 #~ msgid "%B: warning: duplicate section `%A' has different size\n"
 #~ msgstr "%B: attention: section dupliquÃ©e Â«%AÂ» avec des tailles diffÃ©rentes\n"
 
 #~ msgid "relocation references a different segment"
 #~ msgstr "la relocalisation fait rÃ©fÃ©rence Ã  un segment diffÃ©rent"
 
-#~ msgid "%B: relocation type %d not implemented"
-#~ msgstr "%B: relocalisation de type %d pas implÃ©mentÃ©e"
-
 #~ 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"
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/uk.gmo ./bfd/po/uk.gmo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/uk.gmo	2020-03-07 02:11:48.000000000 +0000
+++ ./bfd/po/uk.gmo	2021-12-16 02:00:37.000000000 +0000
@@ -1,140 +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¦@ž¦ß¦ÿ¦,§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
+Þ•0(4Y	 h„�‚œ�¤�¨
¨+¨?¨X¨Aw¨?¹¨:ù¨4©K©^©$}©
¢©°©%Ð©ö©ø©A
+ª&LªsªŒª¥ª¾ªÎª íª«.«G«^«k«P~«Ï«*ç«;¬N¬F`¬6§¬6Þ¬:­5P­,†­D³­Nø­JG®)’®G¼®:¯B?¯L‚¯)Ï¯Bù¯L<°‰°Ÿ°D¶°Gû°C±b±t±ˆ± ±µ±3Ô±²²01²b²r²‚²+œ²+È²+ô²# ³D³\³e³ƒ³(š³?Ã³>´%B´&h´(�´)¸´Gâ´7*µbµyµ™µ¶µÏµêµ
+¶#¶>¶T¶l¶€¶—¶,±¶Þ¶î¶··6·E·[·p·Š·¡·1¶·è·ù·¸¸8¸#P¸+t¸& ¸5Ç¸ý¸¹*¹D¹Z¹t¹�¹¤¹º¹$Ï¹ô¹
º-ºEº$Zºº“º¨º<Áºþº
»
»*»>»S» k»Œ»§»·»×»ó»¼,¼E¼X¼*k¼–¼¨¼&º¼á¼0õ¼&½":½	]½g½#z½ž½·½È½á½"ú½¾"1¾#T¾#x¾œ¾#±¾#Õ¾ù¾¿$¿B¿H¿U¿]¿b¿¿
+�¿¨¿­¿!³¿ Õ¿ö¿û¿ÀÀ8ÀXÀ]À!bÀ„À•ÀœÀ¢À§À¬À²À¶À"»ÀÞÀãÀÁÁ&7ÁB^Á¡ÁÁÁÆÁËÁÒÁØÁÝÁïÁöÁÂ"Â)ÂBÂVÂgÂxÂ‰ÂšÂ«ÂÃÂ	ÒÂ
ÜÂ
êÂ
+øÂ
+Ã
+Ã
+Ã
+$Ã$/Ã
+TÃ#_Ã
+ƒÃŽÃ Ã!¸ÃÚÃïÃ
+þÃ
	Ä	Ä!Ä
+2Ä=ÄDÄ\ÄvÄˆÄ—Ä®ÄÉÄØÄñÄÅÅ'Å(7Å/`Å�Å¢Å+±ÅÝÅAùÅ;ÆUÆoÆ‰Æ8žÆ×ÆïÆÇ&ÇEÇdÇ2Ç?²Ç&òÇÈ(8ÈaÈ"tÈ—È*·È6âÈ{Ér•ÉxÊ�Êe—Ê7ýÊ:5ËpË?‚Ë<ÂË@ÿËU@Ì`–Ìb÷ÌqZÍÌÍìÍ&
+Î1ÎœKÎDèÎ'-Ï,UÏ1‚Ï'´Ï$ÜÏ/Ð-1Ð0_Ð&�Ð8·ÐðÐ=Ñ9NÑ:ˆÑ6ÃÑ6úÑ1Ò/QÒ5�Ò+·Ò$ãÒ6Ó"?Ó&bÓ6‰Ó=ÀÓ:þÓ:9ÔDtÔ8¹Ô9òÔC,Õ:pÕ7«Õ8ãÕ@ÖG]Ö9¥Ö,ßÖ0×#=×a×=|×-º×6è×Ø7;Ø;sØ:¯Ø"êØ3
Ù%AÙ.gÙ–Ù0¶Ù1çÙ'ÚAÚE_Ú8¥Ú(ÞÚcÛ4kÛ& Û2ÇÛ&úÛk!Ü*�Ü4¸Ü]íÜ8KÝ„ÝO£ÝbóÝ,VÞ+ƒÞ)¯ÞYÙÞ03ß=dß3¢ß2ÖßB	àLLà™à4·à)ìà$á3;á9oá6©á/àáDâ&UâW|âUÔâI*ã+tã8 ã%Ùã(ÿã&(ä,Oä#|ä> äBßäB"åeå'…åE­å9óå4-æ3bæJ–æ(áæ;
+çFç0eçD–ç.Ûç9
+è?Dè?„èGÄè?é2Lé8éS¸é'ê.4ê,cê'�ê6¸ê ïêYë/jë4šëNÏëªìIÉì9í3Mí¾�í<@î<}îFºîPïoRï>ÂïFð`Hð~©ðF(ñ‚oñ[òñ3Nò@‚òMÃòmó7ó#·óÛó(ñó&ô+Aô5mô£ô¸ô8Ìô"õ$(õ'Mõ9uõC¯õ!óõ!ö*7ö/bö1’ö/Äö/ôö0$÷*U÷0€÷<±÷iî÷=XøB–ø=Ùø-ù.Eù8tù:­ùFèù?/úVoú(Æú>ïú;.û=jû4¨û#ÝûLüINü8˜ü+Ñü8ýü26ý9iý:£ý3Þý,þu?þ µþ.Öþ.ÿJ4ÿ0ÿB°ÿ/óÿ,#'P%x,žNËC4Jx@ÃJ*O%z< 1Ý l0<�<Ú+C,_HŒ6ÕAANJ�>ÛJJe<°<í.*(Yl‚vïAf6¨ß4ý02	+c	A�	3Ñ	@
+!F
+#h
+.Œ
+B»
+Fþ
+4E%z: 2Û*99Cs(·Cà:$
T_
J´
5ÿ
456j/¡/Ñ&&(5O'…0­5Þ(3=%q&—¾'Þ=#D+h3”(È@ñC25v'¬,Ôg4imžA@NH�GØK IlL¶HCLY�5ê0 4QM†NÔ1#)U)/©)Ù+7/3g6›9ÒX[eCÁ6><={*¹.ä2[F&¢-É,÷$?/Z(Š$³0Ø'	81"jA�)Ï=ù#7@[2œ+Ï"û5 <T '‘ %¹ (ß R!?[!F›!3â!1"DH"H�"DÖ"K#ag#sÉ#B=$‚€$T%=X%b–%bù%g\&gÄ&0,'(]'4†'5»')ñ'3(-O(/}(H­(Fö(7=)Gu)+½)$é)2*.A*/p*+ *)Ì*-ö*^$+Kƒ+FÏ+,"2,U,5p,(¦,EÏ,D-DZ-FŸ-_æ-^F."¥.*È.+ó.8/:X/'“/;»/8÷/'00'X03€0>´0-ó0,!1N1Im1·1Ô1.ò1/!2Q2$q23–2Ê2Fè2&/3!V36x35¯3)å34)4H4+b4 Ž4$¯4.Ô4.5%25)X5\‚5Dß5H$6Dm6L²6Xÿ6HX7)¡7*Ë7 ö7589M8@‡8+È86ô8\+9Aˆ9.Ê9Mù93G:={:H¹:<;8?;3x;4¬;4á;0<@G<1ˆ<Bº<Lý<AJ=LŒ=8Ù=B>+U>2�><´>3ñ>X%?P~?.Ï?`þ?&_@P†@\×@X4Ap�AAþA+@BKlB.¸B<çB,$CXQC%ªCÐC3ðC2$DWD4wDJ¬D?÷D@7EWxE=ÐE*F59F%oFB•F%ØF4þF>3G<rGC¯GBóG;6H3rH)¦H'ÐHøHJ+J=JLJ!aJƒJ$™J¾J1ÑJVKIZKI¤K<îK+L>LRLdL~L
’L' LÈL
ÔLâL%óL\M;vM²MÄMÚMÝMúMN	 N*N<NMN,ZN‡N›N±NXÍN0&O6WO2ŽO*ÁO$ìO6P(HP2qP3¤P@ØP+Q(EQ.nQ"�QÀQ(ÝQ/R/6R1fR8˜R#ÑR'õR2S3PS„S;”SÐS×SßSôSTTT'T<TQTcTvT�T¤T¶TÔT	óTýTU	0U":U]UoU)‹U/µU"åUVV(V4V8VKV]VoV'�V©V ÆV#çVW%W 7WXWHvW1¿W#ñW,X@BXXƒXaÜX:>Y.yY7¨Y1àY;Z(NZ:wZ,²Z-ßZE
[-S[�[2 [Ó[ã[ø[
\$\):\d\!z\$œ\,Á\(î\-]IE]�]5¬]â]
+÷]C^IF^�^¢^ª^²^
Ð^Þ^>ð^?/_Ao_±_/Í_+ý_8)`b`$x`!�`1¿`ñ`a+/a[aoaˆa
+•a aB¿ab%b:bLb.jb-™bGÇb3cCc"bc…c–c§c¹c$Òc÷c!d6d5Hd~d	�dšd¬dÂdâdüde'e9e	@eJeOe[eje�e�e³eÅeåeþef2fDf\f-zf¨fºfÌfàfúf'g7gFgXgjgqg!xgšg:¶g%ñg%h=hAVh;˜hCÔh=iCVi=ši"Øi7ûi<3j<pj)­j5×j
kkv1k*¨kÓk'åk
ll&l-l
+<l(Glpl'‚lªlÇlßlÿl#m$;m,`m.�m,¼m.émn"5n,Xn.…n!´n1Ön0o29o,lo.™o#Èoìop( p/Ip!yp›p(¸p#áp+q1q,Jq wq˜q±qÑqåqr#$r-Hr"vr™r«r¾rÊrßr&ñr	sF"s/is™sJªsMõsCtctzt�t-ªtØtátétAõt>7uvuAˆu7ÊuBv!Evgv˜‡v w<wNw`w#uw2™w.Ìw#ûwx,x9xIxQx:jx+¥x#Ñxõxy!y9y,Qy:~y¹y	ÑydÛy@z6SzMŠzMØz<&{gc{bË{<.|1k|(�|$Æ|ë|/}+1}]}y}“}°}>Ì}<~H~4d~'™~$Á~6æ~.F]n†ž°ÂÔæ€€-€>€V€u€2”€Ç€'á€L	�4V�7‹�0Ã�'ô�‚<‚N‚-h‚+–‚+Â‚*î‚	ƒ	#ƒ
+-ƒ
+8ƒCƒXƒsƒ‚ƒ—ƒ¦ƒ1«ƒÝƒ/ýƒ-„L„ ]„'~„"¦„&É„0ð„!…?…T…]…9{…µ…,Ê…a÷…9Y†)“†C½†I‡EK‡Y‘‡Yë‡;Eˆ;�ˆM½ˆ/‰5;‰:q‰5¬‰4â‰9Š7QŠ9‰ŠDÃŠG‹DP‹E•‹CÛ‹-Œ4MŒ>‚Œ;ÁŒ8ýŒ*6�6a�/˜�;È�3Ž%8Ž1^Ž!�ŽV²Ž9	�\C�A �1â�?�:T�7��>Ç�$‘E+‘Iq‘»‘ZØ‘/3’Oc’P³’3“ 8“?Y“:™“&Ô“
+û“0”%7”"]”%€”0¦”!×”ù”•-•B•O•O^•®•,Í•7ú•
2–@–1O–�–•–¨–»–)Ø–*—,-—6Z—‘—$±—_Ö—"6˜(Y˜A‚˜Ä˜,â˜2™HB™‹™›™
+¬™$·™Ü™ï™¼š¹Ìš†›/˜›È›ã›œ*!œLLœ2™œ-Ìœ)úœ"$�G�Z�o�„�4“�È�0Ð�%ž9'žaž<sž=°ž3îž5"Ÿ2XŸ7‹ŸBÃŸL S d ~ † Ž ª H± ú 4ý 2¡;¡
+R¡]¡2y¡-¬¡OÚ¡*¢I¢"N¢*q¢%œ¢ Â¢ã¢£	£C(£¤l£¤¤ 8¤Y¤b¤v¤‹¤¡¤·¤Î¤ë¤ü¤¥"¥**¥NU¥[¤¥¦A¦F¦e¦}¦š¦6²¦é¦ 	§8*§+c§�§¢§²§º§Ï§ç§û§¨#¨6¨
I¨W¨Lq¨ ¾¨ß¨Dþ¨PC©”©¦©2Á©$ô©ª9ª5Lª‚ª!�ª¿ªÆª2ÎªF«JH«/“«FÃ«
+¬"¬?¬O¬M^¬9¬¬;æ¬7"­Z­r­�­ž­,±­$Þ­J®)N®(x®%¡®(Ç®ð®
+¯,¯D¯)^¯ˆ¯¦¯À¯Ø¯à¯ø¯)°:°
P°#^°‚°'š°Â°Ó°é°± ±:±#F±%j±�±­±Ä±Ö±7í±%²A²Z²o²�²”²¨²¼²Ò²Jè²J3³J~³IÉ³:´N´-m´;›´+×´@µ<Dµ8�µ8ºµ5óµ8)¶Tb¶.·¶>æ¶I%·ho·yØ·>R¸N‘¸Ià¸d*¹0�¹;À¹8ü¹F5º5|º&²º.Ùº[»-d».’»0Á»<ò»!/¼Q¼!j¼)Œ¼I¶¼`½Ga½.©½,Ø½h¾En¾0´¾6å¾k¿Eˆ¿Î¿&ì¿SÀEgÀ#­À<ÑÀ<ÁeKÁP±Á2Â/5Â/eÂ4•Â=ÊÂ9Ã0BÃ7sÃ%«Ã'ÑÃ=ùÃ67Ä@nÄ¯Ä2ÏÄÅ,ÅO3Å
ƒÇ ‘Ç8²Ç>ëÇˆ*È‰³È‚=É9ÀÉ"úÉ/Ê\MÊªÊ8¹ÊNòÊAËCËu[Ë:ÑË*Ì%7Ì+]Ì‰Ì0›Ì2ÌÌ1ÿÌ/1Í#aÍ
…Í$“Í©¸Í<bÎpŸÎIÏ&ZÏ§�Ï_)ÐS‰ÐWÝÐ]5ÑY“ÑkíÑ}YÒ‚×ÒSZÓ•®ÓyDÔo¾Ôˆ.ÕQ·Õm	Ö{wÖ'óÖ$×…@×}Æ×]DØ¢ØÀØ-ÔØÙ+ÙHHÙ&‘Ù"¸Ù]ÛÙ9ÚOÚ_Ú7Ú7·Ú7ïÚ%'Û(MÛvÛ'Û,§Û>ÔÛXÜWlÜ?ÄÜFÝAKÝH�ÝfÖÝi=Þ#§Þ'ËÞ'óÞß$9ß?^ß!žß&Àßçß#à'+à#SàwàL–àãà%óà!á-;áiá|áœá!·áÙáùáPâdâ€â(�â'¶â ÞâGÿâVGãGžãOæã6ä(Kä$tä!™ä%»äáäÿäå6åKRå%žå4Äå&ùå æ?;æ{æ–æ ³æ<Ôæç ç
/ç=çTç#pç4”çÉçèç@è1Fè0xè©è#ÈèìèéCéaéxé2�éÂé;ÛéêG+êsê†ê#™ê½êÖêòê$ë70ëhë3|ë#°ë#Ôëøë#ì#4ìXì;lì8¨ìáìçìýìí-
+íF8í
+íŠí�í.•í*Äíïíôí*ùí($î.Mî|î�îN†îÕîñîøîþîïïïïIïaï(fï;�ï,ËïVøïkOð(»ðäðéðîðõðûðññ!!ñCñ]ñdñƒñ�ñ³ñÉñßñõñ6òBò	\ò
fò
tò
+‚ò
+�ò
+˜ò
+£ò
+®ò_¹òó{0ó
+¬ó5·ó1íóHô1hô,šôÇô"Ùôüôõ%õ9õ-@õQnõ7Àõøõ;ö1Möö?™öÙöéö=ðö.÷QK÷^�÷,ü÷)øQCø6•øAÌø@ù#Où$sù˜ù�¶ù&Dú7kú,£úIÐúDû_ûGzûBÂûKüFQü=˜üÖü1íüIý,iýP–ý¹çý¸¡þ­Zÿ/è8Y!f{âwüzttïŠd•ï™…ºÚ6úM16\¶ˆ@œUÝJ3	@~	>¿	Zþ	FY
+U 
+@ö
+S7;‹eÇa-d�aôoV
+Æ
sò
nfrÕAHšŠH%Qn\ÀRNpO¿]LmNº\	NfLµL‘OŽá¨p�D·6üb3q–Wa`/Â~òvq›è0„UµSV_@¶†÷S~JÒ9˜W‰ðKzÏÆu–O Q\ {® þ*!C)"{m"îé"_Ø##8$Â\$æ%V&X]&:¶&Èñ&bº'i(z‡(^)ma)†Ï)1V*nˆ*U÷*IM+l—+e,]j,eÈ,|.-:«-Ëæ-‡².�:/kÈ/w40@¬0Pí0N>1L�1<Ú1m2Š…2o3'€3T¨3wý3›u4t5ƒ†5
+6‡7³š7LN8U›8”ñ8_†9xæ9ˆ_:„è:–m;Œ<c‘<lõ<¢b=H>XN>X§>L?oM?F½?¼@^Á@j Aº‹A:FBŒ�CpDlDoìDm\FmÊF|8G�µGäCHe(ItŽI¶J÷ºJˆ²Kä;L¬ MPÍMgNu†NÉüNPÆOUP*mP]˜PUöP[LQR¨Q$ûQ6 R²WRM
+SHXSV¡S³øS…¬T52U5hU]žUFüUVCV]šV_øVTXWU­WTXIXX�¢X3Y`³YZK”ZcàZjD[e¯[�\v—\Ì]<Û]b^T{^¡Ð^mr_3à__`›t`^aLoa®¼a|kb½èbp¦czdz’d
e?,fTlfTÁf€gc—grûgSnhSÂhViVmiJÄi’j9¢jtÜj„Qk~Ök“UlUélJ?m|Šm`nJhn³n‚¹o‚<pL¿pqU,qq‚qzôq¼or¾,s�ëscyt—Ýt�uu�vŠ…vNwC_wü£w
+ x³«yb_zFÂzJ	{LT{E¡{“ç{‚{|{þ|=z}H¸}b~šd~Þÿ~^ÞI=€s‡€qû€Tm��Â�ÛR‚S.ƒÛ‚ƒ§^„�…¢¤…gG†Z¯†k
+‡Sv‡]Ê‡W(ˆ^€ˆ�ßˆ;a‰T�‰aò‰ITŠ^žŠEýŠ@C‹<„‹WÁ‹rŒ>ŒŒUËŒ—!�;¹�yõ�{oŽ^ëŽEJ�G��ÖØ�q¯�ž!‘sÀ‘o4’}¤’|"“€Ÿ“k ”’Œ”~•�ž•® –hÏ–h8—V¡—¡ø—²š˜fM™g´™IšWfšZ¾šb›l|›‚é›¢lœh�²x�+ž_8Ÿ ˜Ÿ‰9 oÃ †3¡lº¡\'¢Ä„¢[I£q¥£p¤>ˆ¤%Ç¤fí¤ST¥L¨¥tõ¥`j¦kË¦I7§j�§Vì§—C¨BÛ¨o©žŽ©S-ªC�ªaÅªv'«Lž«2ë«C¬™b¬‡ü¬—„­\®�y®ˆû®l„¯zñ¯»l°ä(±ï
²€ý²2~³Ô±´ª†µÚ1¶ä·ßñ·éÑ¸c»¹<ºr\ºgÏºD7»^|»WÛ»E3¼gy¼eá¼\G½¯¤½qT¾JÆ¾w¿^‰¿]è¿UFÀEœÀeâÀÔHÁŽÂ|¬Â6)Ã2`Ã4“ÃaÈÃZ*Äo…ÄnõÄndÅpÓÅ‰DÆˆÎÆ@WÇT˜ÇSíÇjAÈt¬ÈP!É~rÉrñÉGdÊI¬ÊTöÊ‡KËWÓËc+ÌS�Ì™ãÌ/}ÍB­ÍYðÍZJÎ8¥Î=ÞÎPÏ4mÏj¢ÏE
ÐCSÐ[—ÐcóÐPWÑ<¨Ñ@åÑ;&ÒHbÒA«ÒEíÒ_3Ó]“ÓEñÓ@7Ô¬xÔŸ%ÕµÅÕy{ÖŠõÖ¶€×»7ØKóØ<?Ù=|ÙbºÙ`Úu~ÚsôÚchÛ—ÌÛtdÜhÙÜÌBÝ�Þz‘Þ˜ßp¥ßqà†ˆàkám{áqéá‚[âNÞâ\-ãgŠã\òãoOäL¿ä®åj»å}&æo¤ænç°ƒç›4è`Ðèô1éM&êœtêºë¶Ìëâƒì�fíZît_îYÔîj.ïg™ï‚ðW„ðCÜði ñSŠñ;Þñjòz…òSóhTó¬½ó‘jôDüôxAõ?ºõ‚úõh}önæöžU÷�ô÷ž‚ø¦!ù•Èù^^úT½ú;û.Nû>}ü¼üÜü"õüdý%}ýV£ýúýYþ�sþxÿxzÿcóÿ*W‚2¢+Õ+-3Ey–¬*Ç«ò€ž$3Dx6{²;Í	6RKl¸%Ñ+÷…#f©hIyBÃ:\A<ž\Û]8m–K	?P	P�	Sá	35
+Ri
+Q¼
+ajprÛRNV¡føg_
Ç
€à
at,…²ËÞï3M?h?¨"è:;F‚1™8ËKcRuWÈ] ?~<¾
+û '++Wi{H�8ÖIFY4 1Õ<9Dk~eêGPY˜tòÆgÁ.lðp]oÎu>Š´U?‚•vg�{÷[sHÏO%h<Ž<Ë@)IDs¸>Ô0 =D ª‚ >-!l!*ì!o"1‡"¹"iØ"²B#õ#$$*$ B$c$lu$mâ$�P%aá%gC&N«&Vú&4Q'g†'gî'£V(Oú(OJ)€š)E*#a*…*
 *Q®*‡+ˆ+Bš+Ý+4ï+u$,Tš,‰ï,xy-Aò-?4.t.“.².'Ä.+ì.>/4W/Œ/Yž/ø/
+0)0/;0Mk0/¹0<é0 &1G1Y1`1
+o1z1Š1 ¨1,É1ö12502)f23�2Ä2!à2"32%3]X3&¶3Ý3ó3*41>4Up4#Æ4ê4ü455=5'Z5G‚52Ê52ý5>06fo6fÖ6†=7vÄ7|;8V¸8P9_`9pÀ9p1:Q¢:iô:^;'y;æ¡;Aˆ<Ê<;Ü<=*=1=8=U=du=Ú=Eì=+2>%^>/„>"´>0×>:?]C?K¡?]í?KK@9—@DÑ@]AGtAO¼AbBkoBYÛB]5CK“C>ßCHD&gDmŽDnüD7kE5£E?ÙE:FRTF%§FMÍF7G%SGFyG&ÀGAçG@)HHjHT³HLIUIgI+…I)±I!ÛI\ýIZJlgJaÔJ6K¦UK•üK9’L(ÌL5õL9+M6eMœM¥M¸MuÏMfEN¬Nw¾N^6O~•OMPObP4²P'çQR/R$ORYtRoÎRb>SC¡SåSõST"T?/TpoTfàTVGU#žUAÂUV%VXBVr›V4W#CWÌgW%4XYZXž´XžSYoòY¹bZ´[[Ñ[E-\<s\/°\à\\þ\`[]H¼]@^UF^Mœ^™ê^�„_E`£Z`˜þ`H—aZàa+;b>gb1¦b+Øb>c8Cc,|c,©c,Öc,d@0d:qd,¬d+Ùd6eK<eGˆeHÐe-fMGf}•f_gosg\ãgM@h7Žh)Æh0ðhj!ihŒihõil^jËjâjùjk+)k:Uk�k¨k½kÌk8ÕkFlWUl.­lÜl3ùlt-mK¢mqîmP`n.±nànûn;oX@o2™o€ÌoáMpd/q`”qeõqU[r¤±r«Vs¦t}©t{'uØ£ul|v]év˜GwvàwsWxpËxv<yp³yŠ$z˜¯zŽH{�×{‹h|cô|`X}�¹}ŒI~’Ö~wi�áUo€[Å€R!�;t�E°�Dö�—;‚sÓ‚ÏGƒh„j€„lë„vX…iÏ…r9†O¬†¥ü†ˆ¢‡A+ˆÀmˆp.‰¦Ÿ‰¯FŠQöŠ>H‹\‡‹Wä‹J<Œ‡ŒHžŒFçŒO.�H~�eÇ�T-Ž5‚Ž1¸Ž1êŽ%�B�•\�Oò��B�qÓ�%E‘"k‘SŽ‘â‘ö‘	’B’`_’\À’\“…z“F”NG”Ì–”Nc•h²•�–B¹–eü–]b—˜À—'Y˜"�˜¤˜G¾˜/™76™§n™¨›¿œ_Ûœ8;�8t�J­�wø�¨pž`ŸczŸVÞŸL5 ‚   ,½ #ê o¡~¢o�¢Xý¢ˆV£?ß£–¤”¶¤}K¥qÉ¥ƒ;¦¿¦“?§�Ó§ q¨9’¨Ì¨Ô¨9Ü¨©«-©Ù©`Þ©?ª;Uª‘ª!­ªoÏª`?«Ï «Cp¬
+´¬I¿¬X	­ab­DÄ­_	®i®H…®uÎ®>D¯ƒ°I¡°]ë°I±%]±&ƒ±'ª±'Ò±(ú±'#²#K² o²�²ª²S²²Œ³Ñ“³e´|l´Aé´3+µ9_µ7™µqÑµNC¶O’¶pâ¶bS·,¶·,ã·¸¸%5¸[¸u¸‰¸�¸°¸Ã¸6à¸¦¹.¾¹Dí¹¸2º‹ëº$w»3œ»gÐ»98¼3r¼"¦¼cÉ¼7-½Re½¸½
Ç½cÕ½l9¾€¦¾_'¿‡‡¿2À<BÀÀ�ÀŽžÀ}-Áo«Á�Â4©ÂKÞÂ**ÃUÃdnÃGÓÃ˜Äh´ÄLÅ=jÅb¨Å6ÆBÆY\Æ0¶ÆZçÆHBÇ@‹ÇBÌÇÈ( È(IÈArÈ-´ÈâÈXÉ1[ÉS�É*áÉ/Ê5<Ê4rÊ,§ÊÔÊ2éÊ^Ë9{Ë3µË3éË3ÌiQÌ<»ÌCøÌ<Í[ÍwÍ”Í²ÍÐÍðÍžÎ�¯Î‡=Ï“ÅÏhYÐ)ÂÐHìÐb5Ñ]˜ÑzöÑ|qÒzîÒ‡iÓxñÓzjÔÝåÔzÃÕ–>ÖÙÕÖ(¯×-ØØ—Ú±žÚÓPÛ$ÜWCÝa›Ý_ýÝw]ÞtÕÞQJß`œßžýßWœàXôàZMáb¨áLâ5XâLŽâPÛâi,ã¼–ãœSä`ðä^Qå´°åqeær×æ{JçäÆç�«èO;éS‹éâßé¿ÂêQ‚ë¬Ôë¬�ìð.íÀîvàîXWïT°ï_ðueðZÛð6ñ`¶ñTòjlòÐ×ò“¨ó³<ôBðô^3õ’õ7™õzm%Ï“/<ÉÀ�H[F¯lqM_B)Dä}�]W]î�Ëréï„Û¬9c©È9#@È”4ÚÐþÕe]i%N{e­^JŸV¶¾lÙSî·_®²!æAI"[‹,½›ˆà#&:¹3Ã–ó™íÏR%=‘?à0d,šÊŸ
+ký2bqÕ‚¾R=²ÌçyS5èó|’×A�µÓ¡÷¡FN:8I±†æýXª-²Ÿ
ñj+b_ÙõÊO%ôD*öã[ÍtÄÚ˜{Íjx)ñ!¢;+-}ÝÌVQ´À¸ ÄÚÜ“7,(ÔÉÜW�ëu*0Q±º³ÊÜý9'f¢V�dïõZµi ["ÁLu#·tVPò�^ª¬"ÄÒÒJˆ'Ÿ�¸•CJŸêrê\ŒEKPäÇ:òâ°QéDù’¾·Iªð¬¥w¥ÝØ–dƒ‚„¸PnŽM‰…åI(Ì‰ N`¦{ñØ¡§+GaI¿™YæÖ2¨·3ÂZ´ã­1�¹ª•ÑáäBùz¹Ñt¯ç¿€JA©…7®P|ßi¿WY(EqhËslÔþ!º!”ß¶(;A.Vú�/Rq1G¯0ÔQpÔ†œ¯ìà³“šeÇCY-�À¼¨“wc«ýÖzUKë0÷ô6[«¤õ“2ƒ±Äÿ¢=UBÅ>‰:xT5‘l÷"Bû«Kü,ä»·Jâ2+†p=d~à'ßïvØ9äŽ�‰
+Z³žK³Ã§C$	Íå£ìåbÅngÔ8ÛkGKNúV>ë›³	´wövé�Ýo™	i…+ã‚Bô_D:.ŠX?.ðwfDnµ5žálb<ƒéY\›Ltƒù–wœšj@gd\áæuU
ÑºsXH˜y`v°¬–)ÖZíÈ4anuðº=ìKº€ÙÇ£Êäõ¸Û¬$lèŠpoÏyÇLHTY]Ç»i¼6Ñ¬ª±ÿÂjÿ„èo—ôLµB°H
^¢”�
+9oj-ÏCZ~‹~z¹ÃÈ¨Ú~c5k^kxO^Ô1Š<0¶3çCÖ�Smè4s_Á•*$ùí«[Ž}«û—�Ð;ÎT¶µÃ¹@­õ*hÛ½ïX¥¦gpm7hÎ©{a/¼f¯åyæobóøøæÂ¢¾€sUóE3ju”§»Í­,†&¡�r:t†ú-7ÁfûœSâõŒ'žê©Ý¥9”þ‚ÞÌRxÑÕnù~]-˜Lå(ÄÀñt“ö˜Mþ½x+×�;+S`W�ãýhù
•\O—û*;); …Ó…£í'ÜaMb
y¦�œXˆ!º°Æ?ÿ®¸£ÝŽPöH}ˆªž$dws8é`¿<©?0ü’ ñ§îÅsiXƒTý»˜a„­ÃFNØIÀâ\êÁÖáQŠìv'1Áµþî)R^Š(=®Ÿ§]wçí:ô�v|‹@6oþXÛ¡²8}ÆÝÓWpÜ¦Þ·iÎ´‡Þz˜|‡ ¤„ÈêEÒ’—¥Îx&êfL&›åÙqâ‡<´ÒÙUW��Á‚Þó×½4ëÉ‘ÿ×u
sp5Cò\.´ÂòDãW&ßŒh(	¤IKœï2-¥mkà¯Ù3¼›€ÉcAŽü8‡%.H‘EŒRÿQSP¿eÀñ��ÆD6‹@&?È<~TÅGJM�>%Åk5›‘ )ì¸{íÕÌg‹m]FÜ3r”q2_Âèàéš¨@¶÷ÂH8
+#AFÒ§«…4¿Ó%ôU4Off1@e}`h$ MP"ò
+ ²Õ±`šîÞˆ•Ò63ë6¢ÖLVû�1ãž¡

+#g’É¤®½!	mÊ/¼	AüŠUÄÌ¼×€°ÚZÃ‚¨ú8N49Æ6,E ‰òÕÍR,ß‡€×’¶{ÐÍüÅ>&jvìÐŒhÉa)á‡Ëc7
+~Ê�çOFJÇgošY•<{ÏÞS»Qr}/á¤ ™cC÷nÚŒ*ÐËNó�úðgŽrÎZ¦ï—'5muy#=zcøÆËt.vÏ0öË³|Û!ÓØ>[‹ø™û¹ÎßT/‰ž|E–ƒ¾¨e™©±÷¦	ðlkø½¤7FöeÑ"z1£?ð;­xç*$aØdúMÆ¾²rGqG†âî�_T p.øB£|2ˆ`b—‘^>$/?\n GüO#Oè>®°7Óy„"œ»YÐ–ëÑõØõßõ¬‘È‘Ü‘ð‘’’,’@’T’h’|’�’¤’¸’Ô’è’““,“@“T“h“|“�“¤“¸“Ì“è“ü“”,”P”l”€”””¨”¼”Ø”ì”••0•D•X•l•€•”•¨•¼•Ð•ä•––0–D–h–|–�–¤–¸–Ì–à–ü–—4—H—\—p—„—˜—¬—À—Ô—è—ü—˜$˜8˜L˜`˜t˜ˆ˜œ˜°˜Ì˜è˜ü˜™,™@™T™h™|™�™¤™¸™Ì™à™ü™š,šHšdšxšŒš š¼šØšôš››8›L›`›t›ˆ›œ›°›Ä›Ø›ô›œœ0œLœ`œtœˆœœœÈœäœ��(�<�P�d�x�Œ� �´�È�Ü�ð�ž ž<žPždžxžŒž ž´žÈžÜžðžŸ Ÿ4ŸHŸdŸˆŸ¤Ÿ¸ŸÌŸàŸôŸ $ 8 L h | � ¤ ¸ Ì à ô ¡¡8¡T¡h¡|¡ ¡´¡È¡Ü¡ð¡¢¢4¢P¢l¢€¢”¢¨¢¼¢Ð¢ä¢ø¢£ £4£H£\£p£„£˜£¬£À£Ô£è£¤ ¤4¤H¤d¤x¤Œ¤ ¤´¤È¤Ü¤ð¤¥¥4¥P¥d¥€¥œ¥°¥Ä¥Ø¥ô¥¦,¦@¦T¦p¦„¦˜¦¬¦À¦Ô¦è¦ü¦§,§@§T§h§„§˜§¬§À§Ô§¨æõÿÿÿÿö"ÿÿÿÿ>ö ÿÿÿÿeö5ÿÿÿÿ¡ö%ÿÿÿÿÍö)ÿÿÿÿýö(ÿÿÿÿ,÷/ÿÿÿÿb÷ÿÿÿÿ~÷'ÿÿÿÿ¬÷-ÿÿÿÿÚ÷ÿÿÿÿ÷÷ÿÿÿÿ"ø $ÿÿÿÿnø ÿÿÿÿ–ø%ÿÿÿÿÓøÿÿÿÿù*ÿÿÿÿ2ù.ÿÿÿÿbù)1ÿÿÿÿ¼ù%ÿÿÿÿâù9ÿÿÿÿú1ÿÿÿÿNú
+2ÿÿÿÿŠú"ÿÿÿÿ¾ú3ÿÿÿÿòúÿÿÿÿû9ÿÿÿÿiû%ÿÿÿÿœû
+Hÿÿÿÿðû
+/ÿÿÿÿGü)ÿÿÿÿˆü
+6ÿÿÿÿÈü
+>ÿÿÿÿý
+0ÿÿÿÿJý
+Fÿÿÿÿšý
+ÿÿÿÿÜý
++ÿÿÿÿþ
+ÿÿÿÿ9þ
+"ÿÿÿÿeþ@)ÿÿÿÿÔþ
+/ÿÿÿÿ
ÿ
+ ÿÿÿÿ7ÿ-ÿÿÿÿ~ÿ6ÿÿÿÿÊÿ6ÿÿÿÿ
+7ÿÿÿÿV
+?ÿÿÿÿŸ
+ÿÿÿÿÄ4ÿÿÿÿ+ÿÿÿÿI-ÿÿÿÿƒ3ÿÿÿÿ·0ÿÿÿÿþ 0ÿÿÿÿ~
+-ÿÿÿÿµ(ÿÿÿÿñ
+-ÿÿÿÿ(ÿÿÿÿZ6ÿÿÿÿ—>ÿÿÿÿÜ#ÿÿÿÿÿÿÿÿCÿÿÿÿ
+2ÿÿÿÿ»
+.ÿÿÿÿóFÿÿÿÿ:
+2ÿÿÿÿv
+2ÿÿÿÿ²
+2ÿÿÿÿî
+2ÿÿÿÿ*
+2ÿÿÿÿf
+2ÿÿÿÿ¢Fÿÿÿÿé
+9ÿÿÿÿ,
+7ÿÿÿÿm
+9ÿÿÿÿ°Fÿÿÿÿ÷Fÿÿÿÿ>	2ÿÿÿÿy+ÿÿÿÿ«.ÿÿÿÿà+ÿÿÿÿ	-ÿÿÿÿG	0ÿÿÿÿ•	"ÿÿÿÿÔ	!ÿÿÿÿ
+
+*ÿÿÿÿ=
+
+Aÿÿÿÿˆ
+
+dÿÿÿÿö
+
+$ÿÿÿÿ$1ÿÿÿÿ`1ÿÿÿÿ’
+ÿÿÿÿ¯5ÿÿÿÿý&ÿÿÿÿ1=ÿÿÿÿ�&ÿÿÿÿÕ+ÿÿÿÿ
ÿÿÿÿH
]ÿÿÿÿµ
!5ÿÿÿÿKÿÿÿÿX<"ÿÿÿÿ¶$ÿÿÿÿï7
+ÿÿÿÿ1ÿÿÿÿy;ÿÿÿÿá?ÿÿÿÿ?ÿÿÿÿh2ÿÿÿÿ¢ÿÿÿÿÓÿÿÿÿ=ÿÿÿÿTIÿÿÿÿ·(ÿÿÿÿõIÿÿÿÿX!ÿÿÿÿŽ!ÿÿÿÿ¾ÿÿÿÿï+ÿÿÿÿ=ÿÿÿÿZ5ÿÿÿÿ�@ÿÿÿÿÕ7ÿÿÿÿ
-ÿÿÿÿ;ÿÿÿÿX-ÿÿÿÿ•
+"	ÿÿÿÿè#&ÿÿÿÿ22ÿÿÿÿj6EÿÿÿÿåJÿÿÿÿ6jÿÿÿÿ§cÿÿÿÿgÿÿÿÿVÿÿÿÿÜmÿÿÿÿPDÿÿÿÿ›‡ÿÿÿÿ)Sÿÿÿÿ}DÿÿÿÿÂ>ÿÿÿÿ8=ÿÿÿÿŸ9ÿÿÿÿç'?ÿÿÿÿPI/ÿÿÿÿÈMÿÿÿÿ_ÿÿÿÿwLDÿÿÿÿlÿÿÿÿt�ÿÿÿÿaÿÿÿÿt
+TÿÿÿÿÒ>ÿÿÿÿ/lÿÿÿÿœÿÿÿÿÚ~ÿÿÿÿp KÿÿÿÿÙ 
+uÿÿÿÿZ!
++MÿÿÿÿÞ!X#ÿÿÿÿ["
+Rÿÿÿÿ·"
+fÿÿÿÿ'#
+qÿÿÿÿ¢#
+}ÿÿÿÿ)$
+F<ÿÿÿÿµ$
+?ÿÿÿÿþ$
+BÿÿÿÿJ%
+KÿÿÿÿŸ%£dÿÿÿÿ¬&
+Qÿÿÿÿ'
+=ÿÿÿÿN''\ÿÿÿÿÑ'\/ÿÿÿÿ\(\!ÿÿÿÿÙ(
+aÿÿÿÿD)
+Àÿÿÿÿ*
+5ÿÿÿÿM*C9ÿÿÿÿÉ*mÿÿÿÿV+bÿÿÿÿØ+cÿÿÿÿ=,h)ÿÿÿÿÎ,<H(kÿÿÿÿå-
+Oÿÿÿÿ>.Dÿÿÿÿ—.
+Rÿÿÿÿó.(;ÿÿÿÿV/kÿÿÿÿÈ/Äÿÿÿÿ“0Wÿÿÿÿò0E$ÿÿÿÿb1E$ÿÿÿÿÒ1
+¨ÿÿÿÿ„2
+MÿÿÿÿÛ2rÿÿÿÿN3
+Pÿÿÿÿ¨3
+Pÿÿÿÿ4
+Pÿÿÿÿ\4
+Pÿÿÿÿ¶4
+Pÿÿÿÿ5
+Pÿÿÿÿj5rÿÿÿÿÝ5
+Wÿÿÿÿ>6
+Uÿÿÿÿ�6
+Wÿÿÿÿþ6rÿÿÿÿq7rÿÿÿÿä7	TÿÿÿÿA8_ÿÿÿÿ§8cÿÿÿÿ9Yÿÿÿÿq9`ÿÿÿÿÙ93Tÿÿÿÿa:3>ÿÿÿÿÒ:@ÿÿÿÿ);
+WÿÿÿÿŒ;
+‰ÿÿÿÿ<
+»ÿÿÿÿä<
+Rÿÿÿÿ@=mÿÿÿÿ¸=jÿÿÿÿ#>
+)ÿÿÿÿV>K„ÿÿÿÿ%?Jÿÿÿÿ}?uÿÿÿÿ@\1ÿÿÿÿ«@PÿÿÿÿA"Hÿÿÿÿ{Aã ÿÿÿÿB0hÿÿÿÿCƒÿÿÿÿ�ClpÿÿÿÿyD'KÿÿÿÿëDtÿÿÿÿvEP$ÿÿÿÿF9rÿÿÿÿÌF=|ÿÿÿÿ…G6ÿÿÿÿÆGUÿÿÿÿ*H%Dÿÿÿÿ“H(;ÿÿÿÿöHvÿÿÿÿ‡I�ÿÿÿÿBJPÿÿÿÿ±J"�ÿÿÿÿpK$XÿÿÿÿìKXÿÿÿÿXL4ÿÿÿÿ¬LMÿÿÿÿûLZÿÿÿÿVMwÿÿÿÿÎMƒÿÿÿÿVN€ÿÿÿÿ×NTÿÿÿÿ,O ÿÿÿÿ[O ]ÿÿÿÿØO
+49ÿÿÿÿePF4ÿÿÿÿ	    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 +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:
@@ -317,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
@@ -345,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
@@ -386,8 +374,16 @@ 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: %pA has ordered sections with incompatible alignments
+%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
@@ -436,23 +432,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'
@@ -461,7 +456,9 @@ 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 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
@@ -471,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
@@ -487,17 +488,17 @@ ppcboot header:
 %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 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 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: 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: 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: 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: 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: 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)
@@ -514,11 +515,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: 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: 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 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:%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 section symbol with an addend%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)
@@ -534,8 +547,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: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'-march=%s: %s ISA extension must separate with _-march=%s: ISA string cannot contain uppercase letters-march=%s: ISA string must begin with rv32 or rv64-march=%s: duplicate %s ISA extension `%s'-march=%s: expect number after `%dp'-march=%s: first ISA extension must be `e', `i' or `g'-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: unexpected ISA string at end: %s-march=%s: unknown %s ISA extension `%s'-march=%s: unknown standard ISA extension `%c'-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
@@ -548,15 +561,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 %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)
@@ -564,13 +577,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
@@ -608,7 +621,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)
@@ -668,14 +681,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
@@ -693,36 +706,35 @@ 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 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 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 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
+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
+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
 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
@@ -731,46 +743,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 privilege 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: privilege 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.35.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
+POT-Creation-Date: 2021-01-09 10:55+0000
+PO-Revision-Date: 2021-01-09 15:41+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 20.11.70
 	    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 +812,6 @@ X-Generator: Lokalize 2.0
 
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� â€” Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²: %ld
 
-Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²Ð°Ð½Ð¾ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %04lx
-
-Ð�ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ reldata! Ð”ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾.
-
 ÐŸÐ¾Ñ‡Ð°Ñ‚Ð¾Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }
 
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸:
@@ -952,19 +959,7 @@ X-Generator: Lokalize 2.0
   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,13 +975,13 @@ 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
@@ -1021,8 +1016,16 @@ X-Generator: Lokalize 2.0
      		Ð°Ð´Ñ€ÐµÑ�Ð°   Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ñƒ  Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—  32Ð± Ð²Ð¸Ðº. Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ EH
  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: %pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ Ñ–Ð· Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼Ð¸ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¸
+%F%P: %pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð»Ñ� --gc-sections Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð¸Ð¹ (linked-to) Ñ€Ð¾Ð·Ð´Ñ–Ð»
+%F%P: %pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ %pA Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.
+%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Â«%pAÂ» Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.
+F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Ð³Ñ€ÑƒÐ¿Ñƒ %pA Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %pA Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.
 %F%P: already_linked_table: %E
 %F%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð°Ð²Ñ‚Ð¾Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ�: %E
 %F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñ– ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸: %E
@@ -1071,23 +1074,22 @@ 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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–
 %H: Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ, Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ Ð²Ð¸Ñ‰Ðµ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ñ�Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ÐµÐ½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð´Ð¾ Â«%s+%vÂ»
-%H: Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— toc
 %H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»
 %H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»
 %H: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s, Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� %#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Â»
@@ -1096,6 +1098,8 @@ X-Generator: Lokalize 2.0
 %P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»
 %P: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð¾Ñ‡Ð¾Ðº Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… %pB Ñ– %pB
 %P: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–Ñ�Ñ‚ÑŽ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾
+%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ñ–Ð· DT_TEXTREL Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· %s
+%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ PIE
 %P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�
 %P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚ÐµÐºÑ�Ñ‚Ñƒ Ñ– Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ… Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ GNU Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ñ†Ñ–Ñ— Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿ÑƒÑ�ÐºÑƒ
 %X%C: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚
@@ -1106,10 +1110,14 @@ X-Generator: Lokalize 2.0
 %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: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñ‰Ð¾Ð´Ð¾ %pT Ñ�Ðº Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ glibc
+%X%P: %pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s
+%X%P: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¾Ð±'Ñ”ÐºÑ‚Ð° Â«%pBÂ»
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°
 %X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�
@@ -1122,18 +1130,18 @@ X-Generator: Lokalize 2.0
 Ð�Ð° %XÂ«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» %pB: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð²Ñ–Ð´ÐºÐ¸Ð½ÑƒÑ‚Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» %pB
 %pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ [Â«%pAÂ» Ñƒ %pB] Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸%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): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ %u Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”%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): Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %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
+  Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %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 Ñ–Ð· Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %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: Ð¾Ð±Ñ€Ð°Ð·Ð¸ BE8 Ñ” Ñ‡Ð¸Ð½Ð½Ð¸Ð¼Ð¸ Ð»Ð¸ÑˆÐµ Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– big-endian%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ %d%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%pB: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– GNU_MBIND Â«%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 %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ TLS Ð½Ðµ Ñ” Ñ�ÑƒÑ�Ñ–Ð´Ð½Ñ–Ð¼Ð¸:%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: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº aout Ð²ÐºÐ°Ð·ÑƒÑ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ…: %u%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Â»
+%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ– Ð·Ð°Ð¿Ð¸Ñ�Ð¸ GOT%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: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—%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: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ñ– Ð´Ð°Ð½Ñ– Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 835769 Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð¿Ð¾Ð·Ð° Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¸Ð¼ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ„Ð°Ð¹Ð» Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼)%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 0x%%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: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Â«%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)
@@ -1150,11 +1158,23 @@ 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: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð½Ð°Ð·Ð²Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s%pB: Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð³Ñ€ÑƒÐ¿Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0
+%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: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ (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Â» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� %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Â»: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� 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: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%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: Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ 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: Ð½Ð°Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� mach %#x%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: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: BTI Ð²Ð¼Ð¸ÐºÐ°Ñ”Ñ‚ÑŒÑ�Ñ� -z force-bti, Ñ�ÐºÑ‰Ð¾ ÑƒÑ�Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ– Ð½Ðµ Ð¼Ð°ÑŽÑ‚ÑŒ BTI Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– NOTE.%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» COMDAT Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð½Ð°Ð·Ð²Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT RVE Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾%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: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² (%#lx) Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð¼Ñ–Ñ�Ñ†Ðµ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%#lx)%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: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GOT%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñƒ Ð¿Ð¾Ð»Ñ– flags2 .MIPS.abiflags (0x%lx)%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI, %d%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: win32pstatus %s Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ %lu Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼%pB: Ð½Ðµ Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–%pB: win32pstatus NOTE_INFO_MODULE Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %lu Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼, Ñ‰Ð¾Ð± Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %u%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: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ð±ÑƒÑ„ÐµÑ€Ð°%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 Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼%s  Ð³Ñ–Ð»ÐºÐ°          %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%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)
 (Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)
@@ -1170,8 +1190,8 @@ X-Generator: Lokalize 2.0
 *Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾**Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾*       , Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %#08lx
 , Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ñ–Ð¼: %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>
+, Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² rva: - %pB Ñ” 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼, Ð° %pB â€” Ð½Ñ–-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s Â«%sÂ» Ð½Ðµ Ñƒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð·Ð° Ð°Ð±ÐµÑ‚ÐºÐ¾ÑŽ: Ð’Ð¾Ð½Ð¾ Ð¼Ð°Ñ” Ð¿ÐµÑ€ÐµÐ´ÑƒÐ²Ð°Ñ‚Ð¸ Â«%sÂ»-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s Ñ�Ð»Ñ–Ð´ Ð²Ñ–Ð´Ð¾ÐºÑ€ÐµÐ¼Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ _-march=%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð»Ñ–Ñ‚ÐµÑ€ Ñƒ Ð²ÐµÑ€Ñ…Ð½ÑŒÐ¾Ð¼Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–-march=%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð¼Ð°Ñ” Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚Ð¸Ñ�Ñ� Ð· rv32 Ð°Ð±Ð¾ rv64-march=%s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s Â«%sÂ»-march=%s: Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ Ñ‡Ð¸Ñ�Ð»Ð¾ Ð¿Ñ–Ñ�Ð»Ñ� Â«%dpÂ»-march=%s: Ð¿ÐµÑ€ÑˆÐ¸Ð¼ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ ISA Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«eÂ», Â«iÂ» Ð°Ð±Ð¾ Â«gÂ»-march=%s: rv%de Ð½Ðµ Ñ” ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ ISA Ð¾Ñ�Ð½Ð¾Ð²Ð¸-march=%s: Ñƒ rv32 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«qÂ»-march=%s: Ñƒ rv32e Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«fÂ»-march=%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚ÐµÐ½ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%cÂ» Ð½Ðµ Ñƒ ÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ-march=%s: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ð°Ð¿Ñ€Ð¸ÐºÑ–Ð½Ñ†Ñ–: %s-march=%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s: Â«%sÂ»-march=%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%cÂ»-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; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIE<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ–> %s<Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#x>
 <Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#lx>
 <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾><Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: %d>
 <Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð¼Ð°Ñ�ÐºÑƒÐ²Ð°Ð½Ð½Ñ�><Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð°>Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� @pltoff Ñ‰Ð¾Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒBASE_IMAGE       ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ BFD %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ %s:%dÐ’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ñ”Ð¼Ð¾ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %s:%d
@@ -1184,15 +1204,15 @@ X-Generator: Lokalize 2.0
 CTL_STLOC (Ð²ÐºÐ°Ð·Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�)
 Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²
 Ð’Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .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: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–ÑŽ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ %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 Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¹Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°! (0x%lx Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ 0x%lx)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð° Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð²ÐµÑ€Ñ�Ñ–Ñ� .debug_line, %dÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒDW_EH_PE_datarel Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ñ”Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:
 Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ�:
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s
 Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s Ñƒ %s, Ñ€Ñ�Ð´Ð¾Ðº %d Ñƒ %s
 ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ñ–Ð²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,13 +1220,13 @@ 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
@@ -1244,7 +1264,7 @@ X-Generator: Lokalize 2.0
 Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %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 (Ñ�Ñ‚ÐµÐº Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ñ–Ð²)
@@ -1304,14 +1324,14 @@ X-Generator: Lokalize 2.0
 ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %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-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ Ñ†Ñ–Ð»Ðµ, [Ñ‡Ð¸ÑŽ Ð½Ð°Ð·Ð²Ñƒ Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾]Ð²Ð¸ÐºÐ»Ð¸Ðº __tls_get_addr Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²_bfd_vms_output_counted Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð±ÐµÐ· Ð²Ñ…Ð¾Ð´ÑƒÐ¾Ð±'Ñ”ÐºÑ‚ 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: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#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_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
+Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ psect DMT
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DST
@@ -1329,38 +1349,37 @@ X-Generator: Lokalize 2.0
 Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ñƒ 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Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %sÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __ctbpÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __epÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° __gpÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ñ€Ð°Ð· Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Â«%sÂ» Ð· Â«%sÂ»Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=XGATE]Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¿Ñ€Ð¸Ñ€Ñ–Ñ�Ñ‚ 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 Ð½Ðµ Ð±ÑƒÐ´Ðµ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� %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-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– Ð´Ñ–Ð¹Ñ�Ð½Ñ– Ñ‡Ð¸Ñ�Ð»Ð° Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð¾Ñ— Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ�Ñ‚Ñ–, Ð° Ñƒ %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) 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). Ð™Ð¼Ð¾Ð²Ñ–Ñ€Ð½Ð¾, Ð²Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚Ðµ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ñƒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–ÑŽÐ¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� %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Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� HI16Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfoÐ½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ñ�ÑƒÐ²Ð¸ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� .fixupÑ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ñ” Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¸Ð¼Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ñ„Ð°Ð¹Ð» Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE, Ñ�ÐºÐµ Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .eh_frame_hdr, Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ‚Ð¸ %sÐ²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÐ° Ð±ÐµÐ· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� _gpÐ¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ñ–Ð² Ñƒ Ñ„Ð°Ð¹Ð»Ð°Ñ… 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
+Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ RL78Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð»Ñ� %sÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð°Ð±Ð¾ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½ÐµÐ¿Ð°Ñ€Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%sÂ» Ð· Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾ÑŽ Â«%sÂ» Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ»Ð¾ Ð´Ð¾ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ–Ð´Ð¾Ð·Ñ€Ñ–Ð»Ð¸Ð²Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð°Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .got.locÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ: Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� %lu != Ð¼Ð°ÐºÑ�. %lu; Ð±ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ %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
+Ð°Ñ€Ñ…Ñ–Ð² Ð· Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� 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 Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Ð¼Ñ–Ñ�Ñ‚ÐºÑ–Ñ�Ñ‚ÑŒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ…Ð¾Ð²Ð¸Ñ‰Ð° Ð´Ð°Ð½Ð¸Ñ…
+Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», %sÐ½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²Ñ�ÑƒÐ¼Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ 0x%v Ð±ÐµÐ· Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ Ñ‚Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¾Ð²ÐµÑ€Ð»ÐµÑŽ 0x%v Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑŽÑ‚ÑŒ Ð¼Ñ–Ñ�Ñ‚ÐºÑ–Ñ�Ñ‚ÑŒ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ñ…Ð¾Ð²Ð¸Ñ‰Ð° Ð´Ð°Ð½Ð¸Ñ…
 Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– @fptrÐ½ÐµÐ¼Ð°Ñ”Ñ€Ð¾Ð·Ð´Ñ–Ð», Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² GOTÐ½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒÐ½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ñ–=%lx Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d
 Ð½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð¼Ñ–Ð½Ð½Ñƒ Ñ�ÐµÑ€ÐµÐ´Ð¾Ð²Ð¸Ñ‰Ð° var
 Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸!Ð·Ñ�ÑƒÐ² Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ¸ Ð´Ð»Ñ� Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ» Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ—Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÐ¾Ð´Ð½Ñ–Ñ”ÑŽ Ñ–Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ†Ñ–Ñ”Ñ— Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ” Ñ‚Ðµ, Ñ‰Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð´Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ðº, Ð½Ð°Ñ‡Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±Ñ–Ð»ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð½Ñ–Ð¶ Ð±ÑƒÐ»Ð¾ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð¾ Ñ‚Ð°Ð¼, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ñ�Ð»Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ÑƒÐ¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº
 Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lxÐ·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx:Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx: Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lxÐ·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = 0x%lx:Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ�Ð° bkpt 0x%08x
 Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» recbeg: Ð½Ð°Ð·Ð²Ð°: %.*s
 recend
-Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ñƒ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñ– Ð°Ð´Ñ€ÐµÑ�, %04lxÐ¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ–.Ñ€ÐµÐ³Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ %%g%d: %s Ñƒ %pB, Ñ€Ð°Ð½Ñ–ÑˆÐµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %s Ñƒ %pBÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ–
+Ð·Ð°Ð¿Ð¸Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ Ð´Ð»Ñ� Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»ÑƒÐ¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð½ÐµÑ�ÐµÐ½Ñƒ Ð´Ð¾ Ð±Ð°Ð½ÐºÑƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ [%lx:%04lx] Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñ– Ð°Ð´Ñ€ÐµÑ�, %04lxÐ¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ñ‰Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð·Ð²ÐµÑ�Ñ‚Ð¸ Ð´Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ–.Ñ€ÐµÐ³Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñƒ %%g%d: %s Ñƒ %pB, Ñ€Ð°Ð½Ñ–ÑˆÐµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %s Ñƒ %pBÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð´Ð°Ð½Ñ–
 Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñ” *Ð�Ð•Ð’Ð†Ð”ÐžÐœÐ˜Ðœ*Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� psect, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” RELÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ÑƒÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾ÐºÐ¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð½Ð¸Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾Ð²Ð¸Ð»ÑƒÑ‡Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Â«%pBÂ»Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ� %pB: %s
 Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %drtnbeg
 rtnend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ 0x%08x
@@ -1369,26 +1388,30 @@ X-Generator: Lokalize 2.0
 set_line_num(w) %u
 set_line_num_b %u
 set_line_num_l %u
-Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pAÑ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64 ÐºÐ‘; Ð½Ð¸Ð¶Ñ‡Ð¸Ð¹ Ð·Ð° Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ– Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð².
+Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pAÑ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64 ÐºÐ‘; Ð½Ð¸Ð¶Ñ‡Ð¸Ð¹ Ð·Ð° Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -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Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%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Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ gpÐ°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 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 Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ñ‚ÑŒÑ�Ñ�Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %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: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ� ISA %d.%d Ð´Ð»Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«%sÂ», Ð²ÐµÑ€Ñ�Ñ–Ñ� Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ â€” %d.%dÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %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Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --enable-non-contiguous-regions Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð· Â«%sÂ»
+Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ð¾Ñ�Ð¾Ð±Ð»Ð¸Ð²Ð¾ Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ð¹, Ñ�ÐºÑ‰Ð¾ Ñƒ ld.so Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABIÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¸Ð¼ Ñ‰Ð¾Ð´Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐºÐ¾Ð´Ð¾Ð¼ power10Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RL78_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RX_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� (%u) Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pAÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %u Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ %pB Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° %u Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÑ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %s, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð· Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ñƒ %pBÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´ÑŒ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚ Ð·Ð·Ð¾Ð²Ð½Ñ–Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ�
+Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %sÐ¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ„Ð°Ð¹Ð»Ð° %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 Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ–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: 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: error: attribute section length too small: %%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%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present%pB: Data Directory (%lx bytes at %) extends across section boundary at %%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: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %# Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pB(%pA) (%# Ð±Ð°Ð¹Ñ‚Ñ–Ð²) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ„Ð°Ð¹Ð»Ð° (%# Ð±Ð°Ð¹Ñ‚Ñ–Ð²)Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB(%pA) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%# Ð±Ð°Ð¹Ñ‚Ñ–Ð²)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ (%) Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð°Ð±Ð¾ Ñ€Ñ–Ð²Ð½Ð¸Ð¼ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ %s (%).ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð°Ð½Ð¸Ñ… (%) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð±ÑƒÑ„ÐµÑ€Ð°ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ %ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ (%)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼Ð¸ (%#) Ð·Ð° Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– (%#lx)ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� %ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIE %%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ: %%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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/uk.po ./bfd/po/uk.po
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/po/uk.po	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/po/uk.po	2021-12-16 01:57:38.000000000 +0000
@@ -2,239 +2,253 @@
 # 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.
 msgid ""
 msgstr ""
-"Project-Id-Version: bfd 2.31.90\n"
+"Project-Id-Version: bfd 2.35.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"
+"POT-Creation-Date: 2021-01-09 10:55+0000\n"
+"PO-Revision-Date: 2021-01-09 15:41+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 20.11.70\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:1613 pdp11.c:1236 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:1577 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:1580 vms-alpha.c:8040
 msgid "*unknown*"
 msgstr "*Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾*"
 
-#: aoutx.h:1721
+#: aoutx.h:1716 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:2412 aoutx.h:2430 pdp11.c:2058
 #, c-format
 msgid "%pB: attempt to write out unknown reloc type"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð²Ð¸Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: aoutx.h:4086
+#: aoutx.h:4087 pdp11.c:3441
 #, 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
+#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2791
 #: 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: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:6241 elf32-ft32.c:306 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:1038
+#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 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:438
+#: 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:290 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:4071 elf64-alpha.c:4219 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:1018
+#: elf64-ppc.c:1370 elf64-ppc.c:1379 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:281 elfn32-mips.c:3788 elfxx-ia64.c:324 elfxx-riscv.c:969
+#: 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:3828
 #, c-format
 msgid "%pB: unsupported relocation type %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
 
-#: aoutx.h:5434 pdp11.c:3694
+#: aoutx.h:5435 pdp11.c:3864
 #, 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:2241
 msgid "warning: writing archive was slow: rewriting timestamp"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð°Ñ€Ñ…Ñ–Ð²Ñƒ Ð±ÑƒÐ»Ð¾ Ð¿Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ð¼: Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ�ÑƒÑ”Ð¼Ð¾ Ñ‡Ð°Ñ�Ð¾Ð²Ñƒ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÑƒ"
 
-#: archive.c:2330 linker.c:1429
+#: archive.c:2308 archive.c:2368 elflink.c:4609 linker.c:1428
 #, c-format
 msgid "%pB: plugin needed to handle lto object"
 msgstr "%pB: Ð´Ð»Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¾Ð±'Ñ”ÐºÑ‚Ð° lto Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº"
 
-#: archive.c:2559
+#: archive.c:2594
 msgid "Reading archive file mod timestamp"
 msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ‡Ð°Ñ�Ð¾Ð²Ð¾Ñ— Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ mod Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°"
 
-#: archive.c:2583
+#: archive.c:2618
 msgid "Writing updated armap timestamp"
 msgstr "Ð—Ð°Ð¿Ð¸Ñ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñ— Ñ‡Ð°Ñ�Ð¾Ð²Ð¾Ñ— Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ¸ armap"
 
-#: bfd.c:449
+#: bfd.c:681
 msgid "no error"
 msgstr "Ð±ÐµÐ· Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº"
 
-#: bfd.c:450
+#: bfd.c:682
 msgid "system call error"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ"
 
-#: bfd.c:451
+#: bfd.c:683
 msgid "invalid bfd target"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� bfd"
 
-#: bfd.c:452
+#: bfd.c:684
 msgid "file in wrong format"
 msgstr "Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–"
 
-#: bfd.c:453
+#: bfd.c:685
 msgid "archive object file in wrong format"
 msgstr "Ð°Ñ€Ñ…Ñ–Ð²Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» Ñƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ–"
 
-#: bfd.c:454
+#: bfd.c:686
 msgid "invalid operation"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ñ–Ñ�"
 
-#: bfd.c:455
+#: bfd.c:687
 msgid "memory exhausted"
 msgstr "Ð¿Ð°Ð¼'Ñ�Ñ‚ÑŒ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð°Ð½Ð¾"
 
-#: bfd.c:456
+#: bfd.c:688
 msgid "no symbols"
 msgstr "Ð½ÐµÐ¼Ð°Ñ” Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
 
-#: bfd.c:457
+#: bfd.c:689
 msgid "archive has no index; run ranlib to add one"
 msgstr "Ñƒ Ð°Ñ€Ñ…Ñ–Ð²Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸ÐºÐ°; Ð·Ð°Ð¿ÑƒÑ�Ñ‚Ñ–Ñ‚ÑŒ ranlib, Ñ‰Ð¾Ð± Ð¹Ð¾Ð³Ð¾ Ð´Ð¾Ð´Ð°Ñ‚Ð¸"
 
-#: bfd.c:458
+#: bfd.c:690
 msgid "no more archived files"
 msgstr "Ð±Ñ–Ð»ÑŒÑˆÐµ Ð°Ñ€Ñ…Ñ–Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð½ÐµÐ¼Ð°Ñ”"
 
-#: bfd.c:459
+#: bfd.c:691
 msgid "malformed archive"
 msgstr "Ð°Ñ€Ñ…Ñ–Ð² Ð· Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼"
 
-#: bfd.c:460
+#: bfd.c:692
 msgid "DSO missing from command line"
 msgstr "Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ñ�Ð´ÐºÑƒ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ DSO"
 
-#: bfd.c:461
+#: bfd.c:693
 msgid "file format not recognized"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ð½Ðµ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾"
 
-#: bfd.c:462
+#: bfd.c:694
 msgid "file format is ambiguous"
 msgstr "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ñ„Ð°Ð¹Ð»Ð° Ñ” Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¸Ð¼"
 
-#: bfd.c:463
+#: bfd.c:695
 msgid "section has no contents"
 msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ðµ Ð¼Ð°Ñ” Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ"
 
-#: bfd.c:464
+#: bfd.c:696
 msgid "nonrepresentable section on output"
 msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð», Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…"
 
-#: bfd.c:465
+#: bfd.c:697
 msgid "symbol needs debug section which does not exist"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ñ�ÐºÐ¾Ð³Ð¾ Ð½Ðµ Ñ–Ñ�Ð½ÑƒÑ”"
 
-#: bfd.c:466
+#: bfd.c:698
 msgid "bad value"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: bfd.c:467
+#: bfd.c:699
 msgid "file truncated"
 msgstr "Ñ„Ð°Ð¹Ð» Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾"
 
-#: bfd.c:468
+#: bfd.c:700
 msgid "file too big"
 msgstr "Ñ„Ð°Ð¹Ð» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
 
-#: bfd.c:469
+#: bfd.c:701
+msgid "sorry, cannot handle this file"
+msgstr "Ð²Ð¸Ð±Ð°Ñ‡Ñ‚Ðµ, Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ†ÐµÐ¹ Ñ„Ð°Ð¹Ð»"
+
+#: bfd.c:702
 #, c-format
 msgid "error reading %s: %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� %s: %s"
 
-#: bfd.c:470
+#: bfd.c:703
 msgid "#<invalid error code>"
 msgstr "#<Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸>"
 
-#: bfd.c:1429
+#: bfd.c:1662
 #, c-format
 msgid "BFD %s assertion fail %s:%d"
 msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ BFD %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ %s:%d"
 
-#: bfd.c:1442
+#: bfd.c:1675
 #, 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:1680
 #, c-format
 msgid "BFD %s internal error, aborting at %s:%d\n"
 msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ñ”Ð¼Ð¾ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %s:%d\n"
 
-#: bfd.c:1449
+#: bfd.c:1682
 msgid "Please report this bug.\n"
 msgstr "Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ñ‚Ðµ Ð¿Ñ€Ð¾ Ñ†ÑŽ Ð²Ð°Ð´Ñƒ.\n"
 
-#: bfdwin.c:206
+#: bfdwin.c:207
 #, c-format
 msgid "not mapping: data=%lx mapped=%d\n"
 msgstr "Ð½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð´Ð°Ð½Ñ–=%lx Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾=%d\n"
 
-#: bfdwin.c:209
+#: bfdwin.c:210
 #, c-format
 msgid "not mapping: env var not set\n"
 msgstr "Ð½Ðµ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¾: Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ð·Ð¼Ñ–Ð½Ð½Ñƒ Ñ�ÐµÑ€ÐµÐ´Ð¾Ð²Ð¸Ñ‰Ð° var\n"
@@ -254,118 +268,113 @@ msgstr "Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ
 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:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953
 msgid "GP relative relocation used when GP not defined"
 msgstr "Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð²Ñ‚Ñ–Ð¼, GP Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: coff-alpha.c:1443
+#: coff-alpha.c:1441
 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:1499 coff-alpha.c:1505 elf.c:9442 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:7597 elf32-ppc.c:8748 elf64-ppc.c:16199
 #, 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:156 coffswap.h:785
+#, c-format
+msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: 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 "Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GP, Ð°Ð»Ðµ _gp Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: coff-rs6000.c:2858
+#: coff-rs6000.c:2877
 #, 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:3640 coff64-rs6000.c:2152
 #, 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:778 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:789
 #, 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:807 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:832 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:849 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:975 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:985 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:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505
 #, c-format
 msgid "%pB: %#<PRIx64>: fatal: reloc overflow while relaxing"
 msgstr "%pB: %#<PRIx64>: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: coff-sh.c:1454
+#: coff-sh.c:1451
 #, c-format
 msgid "%pB: fatal: generic symbols retrieved before relaxing"
 msgstr "%pB: ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð´Ð¾ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: coff-sh.c:2785 cofflink.c:2965
+#: coff-sh.c:2781 cofflink.c:2948
 #, 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-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5050
 #, c-format
 msgid "%pB: warning: illegal symbol index %ld in relocs"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %ld Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�Ñ…"
 
-#: coff-tic80.c:441
-#, c-format
-msgid "unsupported relocation type %#x"
-msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
-
-#: coff-tic80.c:672 cofflink.c:3127
-#, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»"
-
-#: coffcode.h:954
+#: coffcode.h:953
 #, 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:988
 #, c-format
 msgid "%pB: error: unexpected symbol '%s' in COMDAT section"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– COMDAT"
 
-#: coffcode.h:1001
+#: coffcode.h:1000
 #, c-format
 msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¸Ð¼Ð²Ð¾Ð» COMDAT Â«%sÂ» Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð½Ð°Ð·Ð²Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
 
-#: coffcode.h:1011
+#: coffcode.h:1010
 #, c-format
 msgid "%pB: warning: no symbol for section '%s' found"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
@@ -373,311 +382,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:1241
 #, c-format
 msgid "%pB: warning: ignoring section flag %s in section %s"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s"
 
-#: coffcode.h:1306
+#: coffcode.h:1310
 #, c-format
 msgid "%pB (%s): section flag %s (%#lx) ignored"
 msgstr "%pB (%s): Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%#lx) Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: coffcode.h:1917
+#: coffcode.h:1926 coffcode.h:1991
 #, 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:2630
 #, c-format
 msgid "%pB: reloc against a non-existent symbol index: %ld"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð½ÐµÑ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ð¼ Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %ld"
 
-#: coffcode.h:2910
+#: coffcode.h:2930
 #, c-format
 msgid "%pB: page size is too large (0x%x)"
 msgstr "%pB: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ (0x%x)"
 
-#: coffcode.h:3070
+#: coffcode.h:3090
 #, c-format
 msgid "%pB: too many sections (%d)"
 msgstr "%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (%d)"
 
-#: coffcode.h:3489
+#: coffcode.h:3508
 #, c-format
 msgid "%pB: section %pA: string table overflow at offset %ld"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ %ld"
 
-#: coffcode.h:3589
+#: coffcode.h:3608
 #, c-format
 msgid "%pB:%s section %s: alignment 2**%u not representable"
 msgstr "%pB:%s Ñ€Ð¾Ð·Ð´Ñ–Ð» %s: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� 2**%u Ð½Ðµ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð»Ñ� Ð¿Ñ€ÐµÐ´Ñ�Ñ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ�"
 
-#: coffcode.h:4276
+#: coffcode.h:4284
 #, c-format
 msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² (%#lx) Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð¼Ñ–Ñ�Ñ†Ðµ Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%#lx)"
 
-#: coffcode.h:4291
+#: coffcode.h:4304
 #, c-format
 msgid "%pB: warning: line number table read failed"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð· Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²"
 
-#: coffcode.h:4325 coffcode.h:4339
+#: coffcode.h:4338 coffcode.h:4352
 #, 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:4366
 #, c-format
 msgid "%pB: warning: illegal symbol in line number entry %d"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ° %d"
 
-#: coffcode.h:4366
+#: coffcode.h:4379
 #, c-format
 msgid "%pB: warning: duplicate line number information for `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² Ð´Ð»Ñ� Â«%sÂ»"
 
-#: coffcode.h:4774
+#: coffcode.h:4800
 #, c-format
 msgid "%pB: unrecognized storage class %d for %s symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ÐºÐ»Ð°Ñ� Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %d Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s Â«%sÂ»"
 
-#: coffcode.h:4904
+#: coffcode.h:4940
 #, c-format
 msgid "warning: %pB: local symbol `%s' has no section"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: coffcode.h:5050
+#: coffcode.h:5090
 #, c-format
 msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64>"
 
-#: coffgen.c:178 elf.c:1216
+#: coffgen.c:179 elf.c:1238
 #, c-format
 msgid "%pB: unable to initialize compress status for section %s"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ�Ñ‚Ð¸Ñ�ÐºÐ°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
 
-#: coffgen.c:202 elf.c:1227
+#: coffgen.c:203 elf.c:1249
 #, c-format
 msgid "%pB: unable to initialize decompress status for section %s"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñ�Ñ‚Ð°Ð½ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s"
 
-#: coffgen.c:1657
-#, c-format
-msgid "%pB: corrupt symbol count: %#<PRIx64>"
-msgstr "%pB: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: %#<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: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼'Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� %#<PRIx64> Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ %#<PRIx64>"
-
-#: coffgen.c:1735
+#: coffgen.c:1704
 #, 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:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1923
+#: xcofflink.c:4512
 msgid "<corrupt>"
 msgstr "<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾>"
 
-#: coffgen.c:2114
+#: coffgen.c:2085
 #, c-format
 msgid "<corrupt info> %s"
 msgstr "<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð´Ð°Ð½Ñ–> %s"
 
-#: coffgen.c:2693 elflink.c:14322 linker.c:2959
+#: coffgen.c:2676 elflink.c:14969 linker.c:2967
 msgid "%F%P: already_linked_table: %E\n"
 msgstr "%F%P: already_linked_table: %E\n"
 
-#: coffgen.c:3034 elflink.c:13324
+#: coffgen.c:3017 elflink.c:13959
 #, c-format
 msgid "removing unused section '%pA' in file '%pB'"
 msgstr "Ð²Ð¸Ð»ÑƒÑ‡Ð°Ñ”Ð¼Ð¾ Ð½ÐµÐ²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Â«%pBÂ»"
 
-#: coffgen.c:3111 elflink.c:13542
+#: coffgen.c:3094 elflink.c:14176
 msgid "warning: gc-sections option ignored"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ gc-sections Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾"
 
-#: cofflink.c:352
+#: cofflink.c:366
 #, 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:471 elf64-ia64-vms.c:5202 elflink.c:5200
 #, 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:2352
 #, c-format
 msgid "%pB: relocs in section `%pA', but it has no contents"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð·Ð¼Ñ–Ñ�Ñ‚Ñƒ"
 
-#: cofflink.c:2436 elflink.c:10810
+#: cofflink.c:2415 elflink.c:11299
 #, 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:2717
 #, c-format
 msgid "%pB: %pA: reloc overflow: %#x > 0xffff"
 msgstr "%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %#x > 0xffff"
 
-#: cofflink.c:2742
+#: cofflink.c:2725
 #, c-format
 msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñ�Ð´ÐºÐ°: %#x > 0xffff"
 
-#: coffswap.h:789
+#: cofflink.c:3116
 #, 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:799
 #, c-format
 msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff"
 msgstr "%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: 0x%lx > 0xffff"
 
-#: compress.c:260
+#: compress.c:271
+#, c-format
+msgid "error: %pB(%pA) section size (%#<PRIx64> bytes) is larger than file size (%#<PRIx64> bytes)"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pB(%pA) (%#<PRIx64> Ð±Ð°Ð¹Ñ‚Ñ–Ð²) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ„Ð°Ð¹Ð»Ð° (%#<PRIx64> Ð±Ð°Ð¹Ñ‚Ñ–Ð²)"
+
+#: compress.c:282
 #, 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:307 cpu-arm.c:319
 #, 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:455
 #, c-format
 msgid "warning: unable to update contents of %s section in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñƒ %pB"
 
-#: dwarf2.c:544
+#: dwarf2.c:553
 #, c-format
 msgid "DWARF error: can't find %s section."
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s."
 
-#: dwarf2.c:579
+#. PR 26946
+#: dwarf2.c:564
+#, c-format
+msgid "DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñ” Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¼ Ð·Ð° Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¹Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°! (0x%lx Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ 0x%lx)"
+
+#: dwarf2.c:599
 #, 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:1186
 msgid "DWARF error: info pointer extends beyond end of attributes"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº Ð½Ð° Ð´Ð°Ð½Ñ– Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° ÐºÑ–Ð½ÐµÑ†ÑŒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð²"
 
-#: dwarf2.c:1275
+#: dwarf2.c:1365
 #, c-format
 msgid "DWARF error: invalid or unhandled FORM value: %#x"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� FORM: %#x"
 
-#: dwarf2.c:1581
+#: dwarf2.c:1678
 msgid "DWARF error: mangled line number section (bad file number)"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð² (Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ„Ð°Ð¹Ð»Ð°)"
 
-#: dwarf2.c:1926
+#: dwarf2.c:2026
 msgid "DWARF error: zero format count"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ"
 
-#: dwarf2.c:1936
+#: dwarf2.c:2036
 #, c-format
 msgid "DWARF error: data count (%<PRIx64>) larger than buffer size"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð°Ð½Ð¸Ñ… (%<PRIx64>) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð±ÑƒÑ„ÐµÑ€Ð°"
 
-#: dwarf2.c:1977
+#: dwarf2.c:2077
 #, c-format
 msgid "DWARF error: unknown format content type %<PRIu64>"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð²Ð¼Ñ–Ñ�Ñ‚Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ %<PRIu64>"
 
-#: dwarf2.c:2057
+#: dwarf2.c:2150
 #, c-format
 msgid "DWARF error: line info section is too small (%<PRId64>)"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ (%<PRId64>)"
 
-#: dwarf2.c:2087
+#: dwarf2.c:2180
 #, 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:2193
 #, c-format
 msgid "DWARF error: unhandled .debug_line version %d"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð° Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð²ÐµÑ€Ñ�Ñ–Ñ� .debug_line, %d"
 
-#: dwarf2.c:2110
+#: dwarf2.c:2203
 msgid "DWARF error: ran out of room reading prologue"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ�Ñ‚ÑƒÐ¿Ñƒ"
 
-#: dwarf2.c:2128
+#: dwarf2.c:2221
 #, c-format
 msgid "DWARF error: line info unsupported segment selector size %u"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð°Ñ€Ñ–Ð°Ð½Ñ‚Ð° Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ–Ð² %u Ñƒ Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ñ€Ñ�Ð´ÐºÐ°"
 
-#: dwarf2.c:2155
+#: dwarf2.c:2248
 msgid "DWARF error: invalid maximum operations per instruction"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð° ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð´Ñ–Ð¹ Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ"
 
-#: dwarf2.c:2174
+#: dwarf2.c:2267
 msgid "DWARF error: ran out of room reading opcodes"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� ÐºÐ¾Ð´Ñ–Ð² Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹"
 
-#: dwarf2.c:2347
+#: dwarf2.c:2458
 msgid "DWARF error: mangled line number section"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñ�Ð´ÐºÑ–Ð²"
 
-#: dwarf2.c:2852 dwarf2.c:2913
+#: dwarf2.c:2956
+msgid "DWARF error: abstract instance recursion detected"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ€ÐµÐºÑƒÑ€Ñ�Ñ–ÑŽ Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¼ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€Ð¾Ð¼"
+
+#: dwarf2.c:2990 dwarf2.c:3084
 msgid "DWARF error: invalid abstract instance DIE ref"
 msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIE"
 
-#: dwarf2.c:2889
+#: dwarf2.c:3006
 #, 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:3062
+#, c-format
+msgid "DWARF error: unable to locate abstract instance DIE ref %<PRIu64>"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð°Ð±Ñ�Ñ‚Ñ€Ð°ÐºÑ‚Ð½Ð¸Ð¹ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñ�Ñ€ DIE %<PRIu64>"
+
+#: dwarf2.c:3101 dwarf2.c:3384 dwarf2.c:3771
 #, 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:3534
+#, c-format
+msgid "DWARF error: could not find variable specification at offset %lx"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° DWARF: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–ÑŽ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ %lx"
 
-#: dwarf2.c:3376
+#: dwarf2.c:3690
 #, 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:3734
 #, 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
+#: dwarf2.c:3838
 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:941
 #, c-format
 msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: isymMax (%ld) Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ifdMax (%ld)"
 
-#: ecoff.c:1268
+#: ecoff.c:1237
 #, c-format
 msgid "unknown basic type %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ %d"
 
-#: ecoff.c:1525
+#: ecoff.c:1493
 #, c-format
 msgid ""
 "\n"
@@ -686,7 +705,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1532 ecoff.c:1535
+#: ecoff.c:1500 ecoff.c:1503
 #, c-format
 msgid ""
 "\n"
@@ -695,7 +714,7 @@ msgstr ""
 "\n"
 "      ÐŸÐµÑ€ÑˆÐ¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1548
+#: ecoff.c:1518
 #, c-format
 msgid ""
 "\n"
@@ -704,7 +723,7 @@ msgstr ""
 "\n"
 "      Ð¡Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %-7ld   Ð¢Ð¸Ð¿:  %s"
 
-#: ecoff.c:1555
+#: ecoff.c:1526
 #, c-format
 msgid ""
 "\n"
@@ -713,7 +732,7 @@ msgstr ""
 "\n"
 "      Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð»: %ld"
 
-#: ecoff.c:1563
+#: ecoff.c:1534
 #, c-format
 msgid ""
 "\n"
@@ -722,7 +741,7 @@ msgstr ""
 "\n"
 "      struct; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1568
+#: ecoff.c:1539
 #, c-format
 msgid ""
 "\n"
@@ -731,7 +750,7 @@ msgstr ""
 "\n"
 "      union; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1573
+#: ecoff.c:1544
 #, c-format
 msgid ""
 "\n"
@@ -740,7 +759,7 @@ msgstr ""
 "\n"
 "      enum; Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼: %ld"
 
-#: ecoff.c:1579
+#: ecoff.c:1552
 #, c-format
 msgid ""
 "\n"
@@ -749,22 +768,22 @@ msgstr ""
 "\n"
 "      Ð¢Ð¸Ð¿: %s"
 
-#: elf-attrs.c:446
+#: elf-attrs.c:449
 #, c-format
 msgid "%pB: error: attribute section '%pA' too big: %#llx"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ: %#llx"
 
-#: elf-attrs.c:487
+#: elf-attrs.c:490
 #, c-format
 msgid "%pB: error: attribute section length too small: %<PRId64>"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ: %<PRId64>"
 
-#: elf-attrs.c:615
+#: elf-attrs.c:618
 #, 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:628
 #, c-format
 msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¼Ñ–Ñ‚ÐºÐ° Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Â«%d, %sÂ» Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð° Ð· Ð¼Ñ–Ñ‚ÐºÐ¾ÑŽ Â«%d, %sÂ»"
@@ -788,131 +807,127 @@ msgstr "ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE Ñƒ %pB(%p
 msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped"
 msgstr "Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� FDE, Ñ�ÐºÐµ Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½ÑŽ .eh_frame_hdr, Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾"
 
-#: elf-eh-frame.c:1868
+#: elf-eh-frame.c:1866
 #, c-format
 msgid "%pB: %pA not in order"
 msgstr "%pB: %pA Ñ” Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¼"
 
-#: elf-eh-frame.c:1882
+#: elf-eh-frame.c:1880
 #, c-format
 msgid "%pB: %pA invalid input section size"
 msgstr "%pB: %pA Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf-eh-frame.c:1890
+#: elf-eh-frame.c:1888
 #, c-format
 msgid "%pB: %pA points past end of text section"
 msgstr "%pB: %pA Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ‚ÐµÐºÑ�Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: elf-eh-frame.c:2139
+#: elf-eh-frame.c:2141
 msgid "DW_EH_PE_datarel unspecified for this architecture"
 msgstr "DW_EH_PE_datarel Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð´Ð»Ñ� Ñ†Ñ–Ñ”Ñ— Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸"
 
-#: elf-eh-frame.c:2309
+#: elf-eh-frame.c:2312
 #, 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:2335
 #, c-format
 msgid "invalid contents in %pA section"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pA"
 
-#: elf-eh-frame.c:2488
+#: elf-eh-frame.c:2491
 msgid ".eh_frame_hdr entry overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ñƒ .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 Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° FDE, Ñ�ÐºÑ– Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°ÑŽÑ‚ÑŒÑ�Ñ�"
 
-#: 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: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» 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-avr.c:1508 elf32-bfin.c:3130
+#: 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:494
+#: 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:1272 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:1815 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 "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: 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:3134
+#: 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:498 elf32-h8300.c:527
+#: elf32-iq2000.c:695 elf32-lm32.c:1074 elf32-m32c.c:628 elf32-m32r.c:2841
+#: elf32-m68hc1x.c:1276 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:1819 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:10554
+#: 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:1440 elf32-crx.c:921 elf32-d10v.c:518
+#: elf32-h8300.c:531 elf32-lm32.c:1078 elf32-m32r.c:2845 elf32-m68hc1x.c:1280
+#: 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 "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: 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:3142
+#: 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:506
+#: 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:1284 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:1827
+#: 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 "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: 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:13396 elf32-i386.c:3403 elf32-m32r.c:2331
+#: elf32-m68k.c:3929 elf32-s390.c:3080 elf32-sh.c:3673 elf32-tilepro.c:3275
+#: elf32-xtensa.c:3024 elf64-s390.c:3029 elf64-x86-64.c:4062
+#: 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>): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %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:2489 elf32-frv.c:5622 elf64-ia64-vms.c:365
+#: elfxx-sparc.c:2684 reloc.c:8271 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"
 
@@ -954,7 +969,7 @@ msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ
 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:316 elf-properties.c:394
 msgid "Removed property %W to merge %pB and %pB\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB Ð· %pB\n"
 
@@ -962,115 +977,105 @@ msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ
 msgid "Removed property %W to merge %pB and %pB (not found)\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB Ð· %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)\n"
 
-#: elf-properties.c:339
+#: elf-properties.c:337
 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:346
 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:388
 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n"
 msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ %W Ð´Ð»Ñ� Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� %pB (Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾) Ð· %pB (0x%v)\n"
 
 #. Merge .note.gnu.property sections.
-#: elf-properties.c:552 elf-properties.c:554
+#: elf-properties.c:550 elf-properties.c:552
 msgid "\n"
 msgstr "\n"
 
-#: elf-properties.c:553
+#: elf-properties.c:551
 msgid "Merging program properties\n"
 msgstr "Ð’Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ�\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: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ñ–Ð· Ð½ÐµÑ€Ñ�Ð´ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (Ð½Ð¾Ð¼ÐµÑ€ %d)"
 
-#: elf.c:360
+#: elf.c:362
 #, 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:514 elfnn-aarch64.c:8096
 #, 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:676
 #, c-format
 msgid "%pB: invalid size field in group section header: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñ– Ð´Ð°Ð½Ñ– Ð¿Ð¾Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð³Ñ€ÑƒÐ¿: %#<PRIx64>"
 
-#: elf.c:728
+#: elf.c:721
 #, c-format
 msgid "%pB: invalid entry in SHT_GROUP section [%u]"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– SHT_GROUP [%u]"
 
-#: elf.c:747
+#: elf.c:740
 #, c-format
 msgid "%pB: no valid group sections found"
 msgstr "%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð³Ñ€ÑƒÐ¿Ð¸"
 
 #. See PR 21957 for a reproducer.
-#: elf.c:776
+#: elf.c:769
 #, c-format
 msgid "%pB: group section '%pA' has no contents"
 msgstr "%pB: Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf.c:837
+#: elf.c:830
 #, 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:878
 #, c-format
 msgid "%pB: sh_link [%d] in section `%pA' is incorrect"
 msgstr "%pB: sh_link [%d] Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ» Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼"
 
-#: elf.c:901
+#: elf.c:891
 #, 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:912
 #, c-format
 msgid "%pB: section group entry number %u is corrupt"
 msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ� Ð³Ñ€ÑƒÐ¿Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ñ–Ð· Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %u Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾"
 
-#: elf.c:945
+#: elf.c:935
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s' in group [%pA]"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿, [%#x], Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ» Ñƒ Ð³Ñ€ÑƒÐ¿Ñ– [%pA]"
 
-#: elf.c:1408
+#: 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:1655
 #, c-format
 msgid ""
 "\n"
@@ -1079,7 +1084,7 @@ msgstr ""
 "\n"
 "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸:\n"
 
-#: elf.c:1665
+#: elf.c:1697
 #, c-format
 msgid ""
 "\n"
@@ -1088,7 +1093,7 @@ msgstr ""
 "\n"
 "Ð”Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»:\n"
 
-#: elf.c:1806
+#: elf.c:1838
 #, c-format
 msgid ""
 "\n"
@@ -1097,7 +1102,7 @@ msgstr ""
 "\n"
 "Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²ÐµÑ€Ñ�Ñ–Ð¹:\n"
 
-#: elf.c:1831
+#: elf.c:1863
 #, c-format
 msgid ""
 "\n"
@@ -1106,998 +1111,1106 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ—:\n"
 
-#: elf.c:1836
+#: elf.c:1868
 #, c-format
 msgid "  required from %s:\n"
 msgstr "  Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ñ– %s:\n"
 
-#: elf.c:2037
+#: elf.c:2058
 #, c-format
 msgid "%pB: warning: loop in section dependencies detected"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ†Ð¸ÐºÐ»ÐµÐ½Ñ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñ�Ñ‚ÐµÐ¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: elf.c:2145
+#: elf.c:2165
 #, c-format
 msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u"
 
-#: elf.c:2229
+#: elf.c:2249
 #, c-format
 msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŽ Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %u"
 
-#: elf.c:2342
+#: elf.c:2362
 #, 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:2453
+#, c-format
+msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Â«%sÂ» Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾"
+
+#: elf.c:2537 elf.c:2552 elf.c:2563 elf.c:2576
 #, c-format
 msgid "%pB: unknown type [%#x] section `%s'"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ [%#x], Â«%sÂ»"
 
-#: elf.c:3248
+#: elf.c:3272
 #, c-format
 msgid "%pB: error: alignment power %d of section `%pA' is too big"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ñ‚ÐµÐ¿Ñ–Ð½ÑŒ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� %d Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾ÑŽ"
 
-#: elf.c:3278
+#: elf.c:3305
 #, c-format
 msgid "warning: section `%pA' type changed to PROGBITS"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð½Ð° PROGBITS"
 
-#: elf.c:3754
+#: elf.c:3789
 #, c-format
 msgid "%pB: too many sections: %u"
 msgstr "%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² %u"
 
-#: elf.c:3839
+#: elf.c:3875
 #, 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:3893
 #, 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:4455
 #, 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:5049
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ TLS Ð½Ðµ Ñ” Ñ�ÑƒÑ�Ñ–Ð´Ð½Ñ–Ð¼Ð¸:"
 
-#: elf.c:5020
+#: elf.c:5056
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr "\t    TLS: %pA"
 
-#: elf.c:5024
+#: elf.c:5060
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr "\tÐ½Ðµ-TLS: %pA"
 
-#: elf.c:5538
+#: elf.c:5656
 #, 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:5682
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¼Ñ–Ñ�Ñ†Ñ� Ð´Ð»Ñ� Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸, Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· -N"
 
-#: elf.c:5654
+#: elf.c:5799
 #, 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:5936
+#, c-format
+msgid "%pB: error: PHDR segment not covered by LOAD segment"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
+
+#: elf.c:5976
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¾ Ñƒ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ñ– %d"
 
-#: elf.c:5839
+#: elf.c:6113
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°"
 
-#: elf.c:6072
+#: elf.c:6274
 #, 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
-#, c-format
-msgid "%pB: error: PHDR segment not covered by LOAD segment"
-msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ PHDR Ð½Ðµ Ð¿Ð¾ÐºÑ€Ð¸Ð²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¾Ð¼ LOAD"
-
-#: elf.c:6606
+#: elf.c:6778
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr "%pB: Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ», Ð°Ð»Ðµ Ð¹Ð¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”"
 
-#: elf.c:6949
+#: elf.c:7130
 #, c-format
 msgid "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this intentional?"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚ Ð·Ð° vaddr=%#<PRIx64>, Ñ‚Ð°Ðº Ñ– Ñ‚Ñ€ÐµÐ±Ð°?"
 
-#: elf.c:7574
+#: elf.c:7758
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° %#<PRIx64> Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼"
 
-#: elf.c:8073
+#: elf.c:8271
+#, c-format
+msgid "%pB: Unable to handle section index %x in ELF symbol.  Using ABS instead."
+msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %x Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ– ELF. Ð’Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ ABS."
+
+#: elf.c:8301
 #, c-format
 msgid "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ñ–Ð²Ð½Ð¾Ñ†Ñ–Ð½Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%sÂ»"
 
-#: elf.c:8421
+#: elf.c:8714
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� .gnu.version_r"
 
-#: elf.c:8548
+#: elf.c:8847
 #, 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:9304
+#, c-format
+msgid "%pB:%pA: error: attempting to write into an unallocated compressed section"
+msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ñ‚Ð¸Ñ�Ð½ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
+
+#: elf.c:9313
+#, c-format
+msgid "%pB:%pA: error: attempting to write over the end of the section"
+msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
+
+#: elf.c:9324
+#, c-format
+msgid "%pB:%pA: error: attempting to write section into an empty buffer"
+msgstr "%pB:%pA: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð·Ð°Ð¿Ð¸Ñ�Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ð±ÑƒÑ„ÐµÑ€Ð°"
+
+#: elf.c:10182
+#, c-format
+msgid "%pB: warning: win32pstatus %s of size %lu bytes is too small"
+msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: win32pstatus %s Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñƒ %lu Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
+
+#: elf.c:10260
+#, 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:12488
+msgid "GNU_MBIND section is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_MBIND Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
+
+#: elf.c:12491
+msgid "symbol type STT_GNU_IFUNC is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ‚Ð¸Ð¿Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² STT_GNU_IFUNC Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU Ñ‚Ð° FreeBSD"
+
+#: elf.c:12494
+msgid "symbol binding STB_GNU_UNIQUE is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð¿Ñ€Ð¸Ð²'Ñ�Ð·ÐºÐ¸ STB_GNU_UNIQUE Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ GNU Ñ‚Ð° FreeBSD"
+
+#: elf.c:12497
+msgid "GNU_RETAIN section is supported only by GNU and FreeBSD targets"
+msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ GNU_RETAIN Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ†Ñ–Ð»ÐµÐ¹ GNU Ñ– FreeBSD"
+
+#: elf.c:12691 elf64-sparc.c:123 elfcode.h:1504
+#, c-format
+msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
+msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld"
+
+#: elf.c:12766
+#, 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:12778
+#, c-format
+msgid "%pB(%pA): info section index is invalid"
+msgstr "%pB(%pA): Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼"
+
+#: elf.c:12792
+#, 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:12867
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section processed twice"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾ Ð´Ð²Ñ–Ñ‡Ñ–"
+
+#: elf.c:12879
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has zero sized entries"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
+
+#: elf.c:12890
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section has non-standard sized entries"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ð¸ Ð½ÐµÑ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
+
+#: elf.c:12902
+#, c-format
+msgid "%pB(%pA): error: secondary reloc section is empty!"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼!"
+
+#: elf.c:12925
+#, c-format
+msgid "%pB(%pA): error: internal relocs missing for secondary reloc section"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ"
+
+#: elf.c:12944
+#, c-format
+msgid "%pB(%pA): error: reloc table entry %u is empty"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ %u Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼"
+
+#: elf.c:12969
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a missing symbol"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¾Ð³Ð¾ Ð½ÐµÐ¼Ð°Ñ”"
+
+#: elf.c:12986
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾"
+
+#: elf.c:12999
+#, c-format
+msgid "%pB(%pA): error: secondary reloc %u is of an unknown type"
+msgstr "%pB(%pA): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ñ‚Ð¾Ñ€Ð¸Ð½Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %u Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ"
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#: elf32-arc.c:455 elf32-arm.c:15065 elf32-frv.c:6613 elf32-iq2000.c:868
+#: elf32-m32c.c:914 elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3206
+#: elf32-visium.c:844 elf64-ppc.c:5336 elfnn-aarch64.c:7334
 #, 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:1391
+#: elf32-ppc.c:3869 elf64-sparc.c:722 elfxx-mips.c:15492
 #, 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-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): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ñƒ Ð¼Ð°Ð»Ñ–Ð¹ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– Ð´Ð°Ð½Ð¸Ñ…"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸Ñ…Ñ–Ð´ Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: 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): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: 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:15509 elf32-metag.c:2251
+#: elf32-nds32.c:5494 elfnn-aarch64.c:7741 elfnn-riscv.c:614
 #, 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:4318 elf32-arm.c:4352 elf32-arm.c:4371 elf32-arm.c:4423
 #, 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:4383 elf32-arm.c:4437 elf32-arm.c:9127 elf32-arm.c:9217
 #, 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:4563
+#, c-format
+msgid "ERROR: CMSE stub (%s section) too far (%#<PRIx64>) from destination (%#<PRIx64>)"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº CMSE (Ñ€Ð¾Ð·Ð´Ñ–Ð» %s) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð°Ð»ÐµÐºÐ¸Ð¼ (%#<PRIx64>) Ð²Ñ–Ð´ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� (%#<PRIx64>)"
+
+#: elf32-arm.c:4732
 #, 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:4807 elf32-arm.c:6954 elf32-csky.c:3368 elf32-hppa.c:582
+#: elf32-m68hc1x.c:165 elf32-metag.c:1180 elf32-nios2.c:2201 elf64-ppc.c:3817
+#: elf64-ppc.c:13603 elfnn-aarch64.c:3187
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� %s"
 
-#: elf32-arm.c:5957
+#: elf32-arm.c:5028 elf32-csky.c:3710 elf32-hppa.c:732 elf32-m68hc11.c:422
+#: elf32-m68hc12.c:542 elf32-metag.c:3345 elf32-nios2.c:2494 elf64-ppc.c:11430
+#: 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: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð²'Ñ�Ð·Ð°Ñ‚Ð¸ Â«%pAÂ» Ñ–Ð· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¾Ð¼ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ�. ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ñ–Ñ‚ÑŒ Ð±ÐµÐ· --enable-non-contiguous-regions.\n"
+
+#: elf32-arm.c:5998
 #, 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:6007
 #, 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:6046
 #, 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:6052
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»."
 
-#: elf32-arm.c:6023
+#: elf32-arm.c:6064
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr "%pB: Â«%sÂ» Ñ– Ñ—Ñ— Ñ�Ð¿ÐµÑ†Ñ–Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°ÑŽÑ‚ÑŒ Ñƒ Ñ€Ñ–Ð·Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð°Ñ…."
 
-#: elf32-arm.c:6035
+#: elf32-arm.c:6076
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr "%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð°Ð½Ð¸Ñ…"
 
-#: elf32-arm.c:6042
+#: elf32-arm.c:6083
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr "%pB: Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ñ” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾ÑŽ"
 
-#: elf32-arm.c:6171
+#: elf32-arm.c:6212
 #, 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:6261
 #, 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:6283
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr "Ð²Ñ…Ñ–Ð´Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� Â«%sÂ» Ð·Ð½Ð¸ÐºÐ»Ð° Ð· Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ"
 
-#: elf32-arm.c:6263
+#: elf32-arm.c:6307
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr "Â«%sÂ» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð±ÐµÐ· Ð²Ñ…Ð¾Ð´Ñƒ"
 
-#: elf32-arm.c:6278
+#: elf32-arm.c:6322
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr "%pB: Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾ Ð²Ð¸Ð´Ð¸Ð¼Ñ–Ñ�Ñ‚ÑŒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-arm.c:6287
+#: elf32-arm.c:6331
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: elf32-arm.c:6306
+#: elf32-arm.c:6350
 #, 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:6370
 msgid "new entry function(s) introduced but no output import library specified:"
 msgstr "Ð²Ð¿Ñ€Ð¾Ð²Ð°Ð´Ð¶ÐµÐ½Ð¾ Ð½Ð¾Ð²Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—, Ð°Ð»Ðµ Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ…:"
 
-#: elf32-arm.c:6334
+#: elf32-arm.c:6378
 #, 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:7087 elf32-arm.c:7122
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ�ÐºÐ»ÐµÐ¹ÐºÑƒ %s Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ»"
 
-#: elf32-arm.c:7793
+#: elf32-arm.c:7833
 #, 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:8060
 #, 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:8087
 #, 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:8623 elf32-arm.c:8643 elf32-arm.c:8710 elf32-arm.c:8729
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ %s Â«%sÂ»"
 
-#: elf32-arm.c:8900
+#: elf32-arm.c:8936
 #, 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:9034
 #, 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:9836
 #, 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:10146 elf32-arm.c:10188
 #, 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:10538
 msgid "shared object"
 msgstr "Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚"
 
-#: elf32-arm.c:10495
+#: elf32-arm.c:10541
 msgid "PIE executable"
 msgstr "Ð’Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» PIE"
 
-#: elf32-arm.c:10498
+#: elf32-arm.c:10544
 #, 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:10683 elf32-arm.c:11100
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %s BLX Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ %s Â«%sÂ»."
 
-#: elf32-arm.c:11975 elf32-arm.c:12001
+#: elf32-arm.c:11999 elf32-arm.c:12025
 #, 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:12071 elf32-csky.c:4940 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>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾"
 
-#: elf32-arm.c:12261
+#: elf32-arm.c:12285
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group relocations"
 msgstr "%pB(%pA+%#<PRIx64>): Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ð³Ñ€ÑƒÐ¿ ALU Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ADD Ð°Ð±Ð¾ SUB"
 
-#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572
+#: elf32-arm.c:12326 elf32-arm.c:12418 elf32-arm.c:12506 elf32-arm.c:12596
 #, c-format
 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:13228 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:13341 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 Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ 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:13343 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 Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ Ð¿Ð¾Ð·Ð° TLS %s"
 
-#: elf32-arm.c:13276 elf32-tic6x.c:2708
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871
+#: elf32-arm.c:13426 elf32-tic6x.c:2649 elfnn-aarch64.c:7168
 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:13430 elf32-nios2.c:4516 elf32-pru.c:936 elf32-tic6x.c:2653
+#: elfnn-aarch64.c:7172
 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:13438 elf32-nios2.c:4526 elf32-pru.c:946 elf32-tic6x.c:2661
+#: elfnn-aarch64.c:7180
 msgid "unknown error"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
 
-#: elf32-arm.c:13764
+#: elf32-arm.c:13916
 #, 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:13920
 #, c-format
 msgid "warning: clearing the interworking flag of %pB due to outside request"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´ÑŒ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚ Ð·Ð·Ð¾Ð²Ð½Ñ–"
 
-#: elf32-arm.c:13813
+#: 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 "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð½Ñ�Ñ‚Ð¾ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Ñƒ %pB, Ð¾Ñ�ÐºÑ–Ð»ÑŒÐºÐ¸ Ð· Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� ÐºÐ¾Ð´, Ñ�ÐºÐ¸Ð¹ Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ñ— Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, Ñƒ %pB"
 
-#: elf32-arm.c:13900
+#: elf32-arm.c:14052
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¾Ð±Ð¾Ð²â€™Ñ�Ð·ÐºÐ¾Ð²Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %d"
 
-#: elf32-arm.c:13908
+#: elf32-arm.c:14060
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° EABI %d"
 
-#: elf32-arm.c:14175
+#: elf32-arm.c:14360
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°"
 
-#: elf32-arm.c:14213 elf32-nios2.c:2946
+#: elf32-arm.c:14398 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:14495
 #, 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:14524
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ VFP, Ð° Ñƒ %pB â€” Ð½Ñ–"
 
-#: elf32-arm.c:14497
+#: elf32-arm.c:14683
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð· %pB Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
 
-#: elf32-arm.c:14523
+#: elf32-arm.c:14709
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»Ñ–Ð² Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€, %c/%c"
 
-#: elf32-arm.c:14662
+#: elf32-arm.c:14848
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼"
 
-#: elf32-arm.c:14671
+#: elf32-arm.c:14857
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ñƒ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ– R9"
 
-#: elf32-arm.c:14683
+#: elf32-arm.c:14869
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð°Ñ†Ñ–Ñ— SB ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ÑƒÑ” Ð· Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�Ð¼ R9"
 
-#: elf32-arm.c:14696
+#: elf32-arm.c:14882
 #, 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:14913
 #, 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:14925
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸-Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ iWMMXt, Ð° Ñƒ %pB â€” Ð½Ñ–"
 
-#: elf32-arm.c:14756
+#: elf32-arm.c:14942
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ð¾Ñ�Ñ‚Ñ– Ñƒ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ– Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� fp16 Ð¼Ñ–Ð¶ %pB Ñ‚Ð° %pB"
 
-#: elf32-arm.c:14792
+#: elf32-arm.c:14978
 #, 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:15074
 #, c-format
 msgid " [interworking enabled]"
 msgstr " [ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ]"
 
-#: elf32-arm.c:14896
+#: elf32-arm.c:15082
 #, c-format
 msgid " [VFP float format]"
 msgstr " [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float VFP]"
 
-#: elf32-arm.c:14898
+#: elf32-arm.c:15084
 #, c-format
 msgid " [Maverick float format]"
 msgstr " [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float Maverick]"
 
-#: elf32-arm.c:14900
+#: elf32-arm.c:15086
 #, c-format
 msgid " [FPA float format]"
 msgstr " [Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ float FPA]"
 
-#: elf32-arm.c:14903
+#: elf32-arm.c:15089
 #, c-format
 msgid " [floats passed in float registers]"
 msgstr " [Ñ‡Ð¸Ñ�Ð»Ð° Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ Ð¿ÐµÑ€ÐµÐ´Ð°Ð½Ð¾ Ð´Ð¾ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ñ‡Ð¸Ñ�ÐµÐ» Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÐ¾Ð¼Ð¾ÑŽ]"
 
-#: elf32-arm.c:14906 elf32-arm.c:14992
+#: elf32-arm.c:15092 elf32-arm.c:15178
 #, c-format
 msgid " [position independent]"
 msgstr " [Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¹ Ð²Ñ–Ð´ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ—]"
 
-#: elf32-arm.c:14909
+#: elf32-arm.c:15095
 #, c-format
 msgid " [new ABI]"
 msgstr " [Ð½Ð¾Ð²Ð¸Ð¹ ABI]"
 
-#: elf32-arm.c:14912
+#: elf32-arm.c:15098
 #, c-format
 msgid " [old ABI]"
 msgstr " [Ñ�Ñ‚Ð°Ñ€Ð¸Ð¹ ABI]"
 
-#: elf32-arm.c:14915
+#: elf32-arm.c:15101
 #, c-format
 msgid " [software FP]"
 msgstr " [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° FP]"
 
-#: elf32-arm.c:14924
+#: elf32-arm.c:15110
 #, c-format
 msgid " [Version1 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�1 EABI]"
 
-#: elf32-arm.c:14927 elf32-arm.c:14938
+#: elf32-arm.c:15113 elf32-arm.c:15124
 #, c-format
 msgid " [sorted symbol table]"
 msgstr " [Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²]"
 
-#: elf32-arm.c:14929 elf32-arm.c:14940
+#: elf32-arm.c:15115 elf32-arm.c:15126
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr " [Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²]"
 
-#: elf32-arm.c:14935
+#: elf32-arm.c:15121
 #, c-format
 msgid " [Version2 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�2 EABI]"
 
-#: elf32-arm.c:14943
+#: elf32-arm.c:15129
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr " [Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°]"
 
-#: elf32-arm.c:14946
+#: elf32-arm.c:15132
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr " [Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÐ´ÑƒÑŽÑ‚ÑŒ Ñ–Ð½ÑˆÐ¸Ð¼]"
 
-#: elf32-arm.c:14953
+#: elf32-arm.c:15139
 #, c-format
 msgid " [Version3 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�3 EABI]"
 
-#: elf32-arm.c:14957
+#: elf32-arm.c:15143
 #, c-format
 msgid " [Version4 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�4 EABI]"
 
-#: elf32-arm.c:14961
+#: elf32-arm.c:15147
 #, c-format
 msgid " [Version5 EABI]"
 msgstr " [Ð’ÐµÑ€Ñ�Ñ–Ñ�5 EABI]"
 
-#: elf32-arm.c:14964
+#: elf32-arm.c:15150
 #, c-format
 msgid " [soft-float ABI]"
 msgstr " [ABI Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸]"
 
-#: elf32-arm.c:14967
+#: elf32-arm.c:15153
 #, c-format
 msgid " [hard-float ABI]"
 msgstr " [ABI Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ñ— Ñ€ÑƒÑ…Ð¾Ð¼Ð¾Ñ— ÐºÑ€Ð°Ð¿ÐºÐ¸]"
 
-#: elf32-arm.c:14973
+#: elf32-arm.c:15159
 #, c-format
 msgid " [BE8]"
 msgstr " [BE8]"
 
-#: elf32-arm.c:14976
+#: elf32-arm.c:15162
 #, c-format
 msgid " [LE8]"
 msgstr " [LE8]"
 
-#: elf32-arm.c:14982
+#: elf32-arm.c:15168
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr " <Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ� EABI>"
 
-#: elf32-arm.c:14989
+#: elf32-arm.c:15175
 #, c-format
 msgid " [relocatable executable]"
 msgstr " [Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»]"
 
-#: elf32-arm.c:14995
+#: elf32-arm.c:15181
 #, 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:15186 elfnn-aarch64.c:7337
 #, 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:15303 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:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1662
+#: elfnn-aarch64.c:7608 elfnn-riscv.c:656
 #, c-format
 msgid "%pB: bad symbol index: %d"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: %d"
 
-#: elf32-arm.c:15508
+#: elf32-arm.c:15692
 #, 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:16936
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr "Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ„Ð°Ð¹Ð»Ð° Ñ�Ñ‚Ð°Ð»Ð¸Ñ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %pB"
 
-#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603
+#: elf32-arm.c:17323 elflink.c:13152 elflink.c:13199
 #, c-format
 msgid "could not find section %s"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s"
 
-#: elf32-arm.c:18512
+#: elf32-arm.c:18547
 #, 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:18574
 #, 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:19401 elf32-arm.c:19423
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÐ° VFP11 Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼"
 
-#: elf32-arm.c:19439
+#: elf32-arm.c:19474
 #, 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:19513
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¾Ð±Ð³Ð¾Ñ€Ñ‚ÐºÑƒ STM32L4XX"
 
-#: elf32-arm.c:20567
+#: elf32-arm.c:20597
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¶Ðµ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñƒ Ð¾Ñ�Ñ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñ– BE8"
 
-#: elf32-arm.c:20643
+#: elf32-arm.c:20673
 #, 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:20688
 #, 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:20698
 #, 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:20702
 #, 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:20712 elf32-arm.c:20716 elf32-arm.c:20726
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ð½Ñ–"
 
-#: elf32-arm.c:20700
+#: elf32-arm.c:20730
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, Ð° Ñƒ %pB â€” Ñ‚Ð°Ðº"
 
-#: elf32-arm.c:20719
+#: elf32-arm.c:20749
 #, 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:20753
 #, 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:20767
 #, c-format
 msgid "warning: %pB supports interworking, whereas %pB does not"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ %pB Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ñ�ÑƒÐ¼Ñ–Ñ�Ð½Ñƒ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ, Ð° Ñƒ %pB Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-arm.c:20743
+#: elf32-arm.c:20773
 #, 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
+#: elf32-avr.c:1516 elf32-bfin.c:3138 elf32-cris.c:2042 elf32-epiphany.c:573
+#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 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:1823
+#: 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 "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-avr.c:3327
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126
+#: elf32-avr.c:3327 elfnn-aarch64.c:3218
 #, 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:363
 msgid "relocation should be even number"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð¿Ð°Ñ€Ð½Ð¸Ð¼ Ñ‡Ð¸Ñ�Ð»Ð¾Ð¼"
 
-#: elf32-bfin.c:1585
+#: elf32-bfin.c:1587
 #, 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:1619 elf32-i386.c:3443 elf32-m68k.c:4006 elf32-s390.c:3138
+#: elf64-s390.c:3087 elf64-x86-64.c:4112
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): reloc against `%s': error %d"
 msgstr "%pB(%pA+%#<PRIx64>): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Â«%pA+%#<PRIx64>Â» Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:2655
+#: elf32-bfin.c:2662
 msgid "relocation references symbol not defined in the module"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð», Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ–"
 
-#: elf32-bfin.c:2752
+#: elf32-bfin.c:2759
 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:2799 elf32-bfin.c:2920
 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:2829 elf32-bfin.c:2957 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:2879
 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
 msgstr "R_BFIN_FUNCDESC_VALUE Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-bfin.c:3039
+#: elf32-bfin.c:3042
 msgid "relocations between different segments are not supported"
 msgstr "Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-bfin.c:3040
+#: elf32-bfin.c:3043
 msgid "warning: relocation references a different segment"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ–Ð½ÑˆÐ¸Ð¹ Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚"
 
-#: 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:4728 elf32-cris.c:3862 elf32-m68hc1x.c:1416 elf32-m68k.c:1265
+#: elf32-score.c:3996 elf32-score7.c:3801 elf32-vax.c:537 elf32-xgate.c:494
+#: elfxx-mips.c:16178
+#, c-format
+msgid "private flags = %lx:"
+msgstr "Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– = %lx:"
+
+#: elf32-bfin.c:4779 elf32-frv.c:6586
 #, 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:6590
 #, 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:5036
 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:5330 elf32-cr16.c:2713 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 +2219,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:2019
 msgid "GOT table size out of range"
 msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ€ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– GOT Ð¿Ð¾Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ"
 
-#: elf32-csky.c:2917
+#: elf32-csky.c:2799
 #, c-format
 msgid "warning: unrecognized arch eflag '%#lx'"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ e-Ð¿Ñ€Ð°Ð¿Ð¾Ñ€ÐµÑ†ÑŒ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸, Â«%#lxÂ»"
 
-#: elf32-csky.c:2977
+#: elf32-csky.c:2822
+#, c-format
+msgid "warning: unrecognised arch name '%#x'"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð½Ð°Ð·Ð²Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Â«%#xÂ»"
+
+#: elf32-csky.c:2896 elf32-csky.c:3054
 #, c-format
 msgid "%pB: machine flag conflict with target"
 msgstr "%pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ Ñ–Ð· Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼"
 
-#: elf32-csky.c:2990
+#: elf32-csky.c:2909
 #, 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:2938
+#, c-format
+msgid "Error: %pB and %pB has different VDSP version"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ— VDSP %pB Ñ– %pB Ñ” Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸"
+
+#: elf32-csky.c:2955
+#, c-format
+msgid "Error: %pB and %pB has different DSP version"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ— DSP %pB Ñ– %pB Ñ” Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸"
+
+#: elf32-csky.c:2973
+#, c-format
+msgid "Error: %pB and %pB has different FPU ABI"
+msgstr "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ñ– %pB Ð¼Ð°ÑŽÑ‚ÑŒ Ñ€Ñ–Ð·Ð½Ñ– Ð´Ð²Ñ–Ð¹ÐºÐ¾Ð²Ñ– Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ�Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€Ð°-Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ñ‡Ð¸Ñ�ÐµÐ» Ñ–Ð· Ñ€ÑƒÑ…Ð¾Ð¼Ð¾ÑŽ ÐºÑ€Ð°Ð¿ÐºÐ¾ÑŽ"
+
+#: elf32-csky.c:3068
+#, 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:4312 elf32-i386.c:350
 #, c-format
 msgid "%pB: unsupported relocation type: %#x"
 msgstr "%pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %#x"
@@ -2193,80 +2331,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:569 elf32-ip2k.c:1484
 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 +2418,17 @@ msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð
 msgid "%H: reloc against `%s': %s\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»: %s\n"
 
-#: elf32-frv.c:6514
+#: elf32-frv.c:6497
 #, 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:6551 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:6564
 #, c-format
 msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½ÑˆÑ– Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ð¾Ð»Ñ� e_flags (%#x) Ð½Ñ–Ð¶ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… (%#x)"
@@ -2300,275 +2438,284 @@ 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:761 elf32-hppa.c:842 elf64-ppc.c:11983
+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-hppa.c:863 elf32-hppa.c:3405
 #, 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:2582
 #, c-format
 msgid "%pB: duplicate export stub %s"
 msgstr "%pB: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: elf32-hppa.c:3344
+#: elf32-hppa.c:3238
 #, 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:4034
 #, c-format
 msgid "%s has both normal and TLS relocs"
 msgstr "%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS"
 
-#: elf32-hppa.c:4158
+#: elf32-hppa.c:4052
 #, c-format
 msgid "%pB:%s has both normal and TLS relocs"
 msgstr "%pB:%s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS"
 
-#: elf32-hppa.c:4217
+#: elf32-hppa.c:4111
 #, 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:1169 elf64-x86-64.c:1382
 #, 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: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: Ð±ÐµÐ·Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´Ð½Ñ” Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� 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:1721 elf32-s390.c:1151 elf32-sh.c:5490 elf32-tilepro.c:1548
+#: elf32-xtensa.c:1266 elf64-s390.c:1083 elfxx-sparc.c:1556
+#: elfxx-tilegx.c:1767 elfnn-riscv.c:565
 #, c-format
 msgid "%pB: `%s' accessed both as normal and thread local symbol"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:1798
+#: elf32-i386.c:1793
 #, 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:2373 elf64-x86-64.c:2721 elfnn-riscv.c:2252
 #, 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:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778
+#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 elfnn-riscv.c:2119
+#: elfnn-riscv.c:2919 elfnn-riscv.c:2993
 #, c-format
 msgid "Local IFUNC function `%s' in %pB\n"
 msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ� IFUNC Â«%sÂ» Ñƒ %pB\n"
 
-#: elf32-i386.c:2569
+#: elf32-i386.c:2563
 #, 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:2598 elf64-x86-64.c:2977
 msgid "hidden symbol"
 msgstr "Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2607 elf64-x86-64.c:2922
+#: elf32-i386.c:2601 elf64-x86-64.c:2980
 msgid "internal symbol"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2610 elf64-x86-64.c:2925
+#: elf32-i386.c:2604 elf64-x86-64.c:2983
 msgid "protected symbol"
 msgstr "Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2613 elf64-x86-64.c:2928
+#: elf32-i386.c:2607 elf64-x86-64.c:2986
 msgid "symbol"
 msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-i386.c:2619
+#: elf32-i386.c:2613
 #, 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:2626
 #, 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-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:1297
 #, c-format
 msgid "ip2k linker: missing page instruction at %#<PRIx64> (dest = %#<PRIx64>)"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº ip2k: Ð½Ðµ Ð²Ð¸Ñ�Ñ‚Ð°Ñ‡Ð°Ñ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— Ñ‰Ð¾Ð´Ð¾ Ñ�Ñ‚Ð¾Ñ€Ñ–Ð½ÐºÐ¸ Ñƒ %#<PRIx64> (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� = %#<PRIx64>)."
 
-#: elf32-ip2k.c:1321
+#: elf32-ip2k.c:1316
 #, 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:1093 elf32-microblaze.c:1141
 #, 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:6851
 #, 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:1136
 #, 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:1167
 #, 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:1183
 #, 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:1198
 #, 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:1234
 #, 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:1358
 #, 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:1365
 #, 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:1374
 #, 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:1419 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:1421 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:1424 elf32-xgate.c:502
 #, c-format
 msgid "64-bit double, "
 msgstr "64-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, "
 
-#: elf32-m68hc1x.c:1420 elf32-xgate.c:504
+#: elf32-m68hc1x.c:1426 elf32-xgate.c:504
 #, c-format
 msgid "32-bit double, "
 msgstr "32-Ð±Ñ–Ñ‚Ð¾Ð²Ðµ double, "
 
-#: elf32-m68hc1x.c:1423
+#: elf32-m68hc1x.c:1429
 #, c-format
 msgid "cpu=HC11]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC11]"
 
-#: elf32-m68hc1x.c:1425
+#: elf32-m68hc1x.c:1431
 #, c-format
 msgid "cpu=HCS12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HCS12]"
 
-#: elf32-m68hc1x.c:1427
+#: elf32-m68hc1x.c:1433
 #, c-format
 msgid "cpu=HC12]"
 msgstr "Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€=HC12]"
 
-#: elf32-m68hc1x.c:1430
+#: elf32-m68hc1x.c:1436
 #, c-format
 msgid " [memory=bank-model]"
 msgstr " [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð· Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸]"
 
-#: elf32-m68hc1x.c:1432
+#: elf32-m68hc1x.c:1438
 #, c-format
 msgid " [memory=flat]"
 msgstr " [Ð¿Ð°Ð¼â€™Ñ�Ñ‚ÑŒ=Ð¿Ð»Ð¾Ñ�ÐºÐ° Ð¼Ð¾Ð´ÐµÐ»ÑŒ]"
 
-#: elf32-m68hc1x.c:1435
+#: elf32-m68hc1x.c:1441
 #, 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:3585 elf32-ppc.c:3593
+#, 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:7664 vms-alpha.c:7680
 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,401 +2731,401 @@ 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:1536 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:1777 elf64-mips.c:3516 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: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 "Ð²Ñ–Ð´Ð±ÑƒÐ²Ð°Ñ”Ñ‚ÑŒÑ�Ñ� 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:2671
 #, c-format
 msgid "warning: %pB: unknown MSPABI object attribute %d"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° MSPABI %d"
 
-#: elf32-msp430.c:2456
+#: elf32-msp430.c:2772
 #, c-format
 msgid "error: %pB uses %s instructions but %pB uses %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ð°Ð»Ðµ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” %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 "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ ÐºÐ¾Ð´Ñƒ %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 "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 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 "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ñ‚Ð¾Ð´Ñ– Ñ�Ðº %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %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 "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¼Ð°Ð»Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ, Ð° %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %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 "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð´Ð°Ð½Ð¸Ñ… %s, Ð° Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð»Ð¸ÑˆÐµ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— MSP430"
 
-#: elf32-nds32.c:3624
+#: elf32-msp430.c:2858
 #, 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:3625
 #, 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:5524
 #, c-format
 msgid "%pB: warning: %s unsupported in shared mode"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elf32-nds32.c:5795
+#: elf32-nds32.c:5650
 #, c-format
 msgid "%pB: warning: unaligned access to GOT entry"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GOT"
 
-#: elf32-nds32.c:5836
+#: elf32-nds32.c:5691
 #, c-format
 msgid "%pB: warning: relocate SDA_BASE failed"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� 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): Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ñ‚Ð¸Ð¿Ñƒ %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: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² Ð²ÐµÐºÑ‚Ð¾Ñ€Ñ–Ð² ISR Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸, Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ñ– Ñ” %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¸Ð¼Ð¸"
 
-#: elf32-nds32.c:6828
+#: elf32-nds32.c:6687
 #, c-format
 msgid "%pB: warning: endian mismatch with previous modules"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ–Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: 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: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ñ�Ñ‚Ð°Ñ€Ñ–ÑˆÑƒ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð°. Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¸Ð¼ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð²."
 
-#: elf32-nds32.c:6930
+#: elf32-nds32.c:6789
 #, c-format
 msgid "%pB: error: ABI mismatch with previous modules"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ABI Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸"
 
-#: elf32-nds32.c:6940
+#: elf32-nds32.c:6799
 #, c-format
 msgid "%pB: error: instruction set mismatch with previous modules"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð½Ð°Ð±Ð¾Ñ€Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ñ†ÑŒÐ¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²"
 
-#: elf32-nds32.c:6967
+#: elf32-nds32.c:6826
 #, c-format
 msgid "%pB: warning: incompatible elf-versions %s and %s"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— elf, %s Ñ‚Ð° %s"
 
-#: elf32-nds32.c:6998
+#: elf32-nds32.c:6857
 #, c-format
 msgid ": n1 instructions"
 msgstr ": Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1"
 
-#: elf32-nds32.c:7001
+#: elf32-nds32.c:6860
 #, c-format
 msgid ": n1h instructions"
 msgstr ": Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— n1h"
 
-#: elf32-nds32.c:9462
+#: elf32-nds32.c:9313
 #, 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:9577
 #, c-format
 msgid "%pB: warning: %s points to unrecognized reloc at %#<PRIx64>"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#<PRIx64>."
 
-#: elf32-nds32.c:12975
+#: elf32-nds32.c:12840
 #, c-format
 msgid "%pB: nested OMIT_FP in %pA"
 msgstr "%pB: Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ðµ OMIT_FP Ñƒ %pA."
 
-#: elf32-nds32.c:12994
+#: elf32-nds32.c:12859
 #, c-format
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr "%pB: OMIT_FP Ð±ÐµÐ· Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¸ÐºÐ° Ñƒ %pA."
 
-#: elf32-nds32.c:13275 reloc.c:8410
+#: elf32-nds32.c:13141 reloc.c:8497
 #, 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:3826
 #, 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: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 "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð´Ð¾Ñ�Ñ�Ð³Ñ‚Ð¸ %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:4511 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:4521 elf32-pru.c:941 elf32-tic6x.c:2657
 msgid "dangerous relocation"
 msgstr "Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-nios2.c:5378
+#: elf32-nios2.c:5364
 #, c-format
 msgid "dynamic variable `%s' is zero size"
 msgstr "Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð° Ð·Ð¼Ñ–Ð½Ð½Ð° Â«%sÂ» Ð¼Ð°Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€"
 
-#: elf32-or1k.c:1177
+#: elf32-or1k.c:1208
 #, c-format
 msgid "%pB: Cannot handle relocation value size of %d"
 msgstr "%pB: Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ %d"
 
-#: elf32-or1k.c:1286
+#: elf32-or1k.c:1315
 #, c-format
 msgid "%pB: unknown relocation type %d"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d"
 
-#: elf32-or1k.c:1340
+#: elf32-or1k.c:1369
 #, c-format
 msgid "%pB: addend should be zero for plt relocations"
 msgstr "%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ plt Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: elf32-or1k.c:1445
+#: elf32-or1k.c:1474
 #, c-format
 msgid "%pB: addend should be zero for got relocations"
 msgstr "%pB: Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ got Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: elf32-or1k.c:1462
+#: elf32-or1k.c:1491
 #, 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:1508 elf64-alpha.c:4425 elf64-alpha.c:4569
 #, c-format
 msgid "%pB: pc-relative relocation against dynamic symbol %s"
 msgstr "%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf32-or1k.c:1493
+#: elf32-or1k.c:1522
 #, c-format
 msgid "%pB: non-pic relocation against symbol %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-pic Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf32-or1k.c:1577
+#: elf32-or1k.c:1606
 #, c-format
 msgid "%pB: support for local dynamic not implemented"
 msgstr "%pB: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÑƒ Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— Ð´Ð¸Ð½Ð°Ð¼Ñ–ÐºÐ¸ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: elf32-or1k.c:1729
+#: elf32-or1k.c:1785
 #, c-format
 msgid "%pB: will not resolve runtime TLS relocation"
 msgstr "%pB: Ð½Ðµ Ð±ÑƒÐ´Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñƒ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–"
 
-#: elf32-or1k.c:2074
+#: elf32-or1k.c:2118
 #, c-format
 msgid "%pB: bad relocation section name `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%sÂ»"
 
-#: elf32-or1k.c:3218
+#: elf32-or1k.c:3179
 #, c-format
 msgid "%pB: %s flag mismatch with previous modules"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ� %s Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼"
 
-#: elf32-ppc.c:986
+#: elf32-ppc.c:990 elf64-ppc.c:1720
 #, c-format
 msgid "generic linker can't handle %s"
 msgstr "Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ‚Ð¸ %s"
 
-#: elf32-ppc.c:1617
+#: elf32-ppc.c:1630
 #, c-format
 msgid "corrupt %s section in %pB"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s Ñƒ %pB"
 
-#: elf32-ppc.c:1637
+#: elf32-ppc.c:1649
 #, c-format
 msgid "unable to read in %s section from %pB"
 msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ Ð· %pB"
 
-#: elf32-ppc.c:1679
+#: elf32-ppc.c:1691
 #, c-format
 msgid "warning: unable to set size of %s section in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� %pB"
 
-#: elf32-ppc.c:1729
+#: elf32-ppc.c:1740
 msgid "failed to allocate space for new APUinfo section"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfo"
 
-#: elf32-ppc.c:1748
+#: elf32-ppc.c:1759
 msgid "failed to compute new APUinfo section"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±Ñ‡Ð¸Ñ�Ð»Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfo"
 
-#: elf32-ppc.c:1751
+#: elf32-ppc.c:1762
 msgid "failed to install new APUinfo section"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð½Ð¾Ð²Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» APUinfo"
 
-#: elf32-ppc.c:2853
+#: elf32-ppc.c:2861
 #, 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:3601 elf32-ppc.c:3609
 #, 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:3631 elf32-ppc.c:3639
 #, 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:3647 elf32-ppc.c:3655
 #, 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:3722 elf32-ppc.c:3731
 #, 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:3760 elf32-ppc.c:3769
 #, 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:3833
 #, c-format
 msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð· -mrelocatable Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–"
 
-#: elf32-ppc.c:3837
+#: elf32-ppc.c:3841
 #, c-format
 msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ñƒ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð¼Ñƒ Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ñ– Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¾ Ð· Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸, Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¸Ð¼Ð¸ Ð· -mrelocatable"
 
-#: elf32-ppc.c:3906
+#: elf32-ppc.c:3910
 #, 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:3929
 #, c-format
 msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn"
 msgstr "%pB(%pA+0x%lx): Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ�Ñ‚Ð¸Ð»ÑŽ 16D Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— 0x%08x"
 
-#: elf32-ppc.c:4028
+#: elf32-ppc.c:4032
 #, c-format
 msgid "bss-plt forced due to %pB"
 msgstr "Ð¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ bss-plt Ñ‡ÐµÑ€ÐµÐ· %pB"
 
-#: elf32-ppc.c:4030
+#: elf32-ppc.c:4034
 msgid "bss-plt forced by profiling"
 msgstr "Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ð¿Ñ€Ð¸Ð¼ÑƒÑ�Ð¾Ð²Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ bss-plt"
 
+#: elf32-ppc.c:4611 elf64-ppc.c:8292
+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:4641 elf64-ppc.c:8357
 #, 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:5547 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:7390
 msgid "%P: %H: error: %s with unexpected instruction %x\n"
 msgstr "%P: %H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ñ–Ð· Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¾ÑŽ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ %x\n"
 
-#: elf32-ppc.c:7494
+#: elf32-ppc.c:7427
 msgid "%H: fixup branch overflow\n"
 msgstr "%H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ñ–Ð· Ð°Ð´Ñ€ÐµÑ�Ð½Ð¾ÑŽ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¾ÑŽ\n"
 
-#: elf32-ppc.c:7534 elf32-ppc.c:7570
+#: elf32-ppc.c:7467 elf32-ppc.c:7503
 #, 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:7567
 #, 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:7985
+#: elf32-ppc.c:7882
 #, c-format
 msgid "%H: non-zero addend on %s reloc against `%s'\n"
 msgstr "%H: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ñ‚Ð¾Ðº Ð´Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ»\n"
@@ -2991,54 +3138,54 @@ 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:7914
 #, 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:8092
 #, 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:8426 elf32-ppc.c:8457 elf32-ppc.c:8548 elf32-ppc.c:8644
 #, 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:8799 elf32-ppc.c:8817
+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:8898
 #, 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:8927
 #, c-format
 msgid "%H: unresolvable %s relocation against symbol `%s'\n"
 msgstr "%H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
 
-#: elf32-ppc.c:9064
+#: elf32-ppc.c:9008
 #, 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:9898
 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:9902 elf64-ppc.c:17626
 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:9947
 #, 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:1475
 #, c-format
 msgid "error: %pB: old incompatible object file detected"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð»"
@@ -3055,7 +3202,7 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ
 msgid "warning: RL78_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RL78_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: 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): Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%sÂ»"
@@ -3084,17 +3231,17 @@ msgstr "- %pB Ñ” 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¼, Ð° %
 msgid " [64-bit doubles]"
 msgstr " [64-Ð±Ñ–Ñ‚Ð¾Ð²Ñ– double]"
 
-#: elf32-rx.c:605
+#: elf32-rx.c:607
 #, c-format
 msgid "%pB:%pA: table entry %s outside table"
 msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð¿Ð¾Ð·Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÑŽ"
 
-#: elf32-rx.c:612
+#: elf32-rx.c:614
 #, c-format
 msgid "%pB:%pA: table entry %s not word-aligned within table"
 msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð° Ð²Ñ�ÐµÑ€ÐµÐ´Ð¸Ð½Ñ– Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ–"
 
-#: 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: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¸Ð¹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Red Hat %s, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð´Ð»Ñ� %s"
@@ -3103,69 +3250,69 @@ 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:709
 #, 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:1293
 msgid "warning: RX_SYM reloc with an unknown symbol"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� RX_SYM Ð· Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: elf32-rx.c:3167
+#: elf32-rx.c:3173
 #, c-format
 msgid "there is a conflict merging the ELF header flags from %pB"
 msgstr "Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ� Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ELF Ð· %pB Ð²Ð¸Ð½Ð¸Ðº ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚"
 
-#: elf32-rx.c:3170
+#: elf32-rx.c:3176
 #, c-format
 msgid "  the input  file's flags: %s"
 msgstr "  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…: %s"
 
-#: elf32-rx.c:3172
+#: elf32-rx.c:3178
 #, c-format
 msgid "  the output file's flags: %s"
 msgstr "  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñ„Ð°Ð¹Ð»Ð° Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ–Ð²: %s"
 
-#: elf32-rx.c:3792
+#: elf32-rx.c:3785
 #, c-format
 msgid "%pB:%pA: table %s missing corresponding %s"
 msgstr "%pB:%pA: Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s Ð½ÐµÐ¼Ð°Ñ” Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ %s"
 
-#: 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 Ñ– %s Ð¼Ð°ÑŽÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…"
 
-#: 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>): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ� Ð´Ð»Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� 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 "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ GOT Ð´Ð»Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² GOT"
 
-#: elf32-score.c:2746
+#: elf32-score.c:2756
 msgid "address not word aligned"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ñƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð·Ð° Ð¼ÐµÐ¶ÐµÑŽ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: 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: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL15 Ñƒ %#<PRIx64> Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: 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 " [Ñ„Ñ–ÐºÑ�. Ñ€Ð¾Ð·Ñ‚.]"
@@ -3180,152 +3327,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:5479 elf32-sh.c:5561
 #, 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:5485 elf32-sh.c:5566
 #, c-format
 msgid "%pB: `%s' accessed both as FDPIC and thread local symbol"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð´Ð¾ Â«%sÂ» Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ�Ðº Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ FDPIC, Ñ‚Ð°Ðº Ñ– Ð´Ð¾ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð´Ð»Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elf32-sh.c:5688
+#: elf32-sh.c:5516
 #, c-format
 msgid "%pB: Function descriptor relocation with non-zero addend"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Ð· Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
 
-#: elf32-sh.c:5895 elf64-alpha.c:4691
+#: elf32-sh.c:5723 elf64-alpha.c:4661
 #, c-format
 msgid "%pB: TLS local exec code cannot be linked into shared objects"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ ÐºÐ¾Ð´ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ TLS Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-sh.c:6010
+#: elf32-sh.c:5838
 #, c-format
 msgid "%pB: uses %s instructions while previous modules use %s instructions"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s, Ñ…Ð¾Ñ‡Ð° Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s"
 
-#: elf32-sh.c:6022
+#: elf32-sh.c:5850
 #, 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:5891
 #, c-format
 msgid "%pB: uses instructions which are incompatible with instructions used in previous modules"
 msgstr "%pB: Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑ�Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ—, Ñ�ÐºÑ– Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ–Ð· Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ�Ð¼Ð¸, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¸Ð¼Ð¸ Ñƒ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ñ…"
 
-#: elf32-sh.c:6072
+#: elf32-sh.c:5904
 #, c-format
 msgid "%pB: attempt to mix FDPIC and non-FDPIC objects"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ�ÑƒÐ¼Ñ–Ñˆ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–Ð² FDPIC Ñ– Ð½Ðµ-FDPIC"
@@ -3340,82 +3483,87 @@ 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:736
 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:744
 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:764
 msgid "%X%P: overlay section %pA is not in cache area\n"
 msgstr "%X%P: Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸ %pA Ð½Ðµ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” Ñƒ Ð¾Ð±Ð»Ð°Ñ�Ñ‚Ñ– ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ�\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: Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸, Ñ‰Ð¾ Ð½Ð°ÐºÐ»Ð°Ð´Ð°ÑŽÑ‚ÑŒÑ�Ñ�, %pA Ñ– %pA, Ð½Ðµ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° Ð¾Ð´Ð½Ð¾ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ\n"
 
-#: elf32-spu.c:1027
+#: elf32-spu.c:1031
 #, c-format
 msgid "warning: call to non-function symbol %s defined in %pB"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ð¸ÐºÐ»Ð¸Ðº Ð½ÐµÑ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %s, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ %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 .brinfo lrlive (%u) Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½Ñ�Ñ”Ñ‚ÑŒÑ�Ñ� Ð²Ñ–Ð´ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ ÑˆÐ»Ñ�Ñ…Ð¾Ð¼ Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ (%u)\n"
 
-#: elf32-spu.c:1909
+#: elf32-spu.c:1911
 #, c-format
 msgid "%pB is not allowed to define %s"
 msgstr "%pB Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %s"
 
-#: elf32-spu.c:1917
+#: elf32-spu.c:1919
 #, c-format
 msgid "you are not allowed to define %s in a script"
 msgstr "Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ‚Ð¸ %s Ñƒ Ñ�ÐºÑ€Ð¸Ð¿Ñ‚Ñ–"
 
-#: elf32-spu.c:1951
+#: elf32-spu.c:1953
 #, c-format
 msgid "%s in overlay section"
 msgstr "%s Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸"
 
-#: elf32-spu.c:1980
+#: elf32-spu.c:1982
 msgid "overlay stub relocation overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð½Ð°ÐºÐ»Ð°Ð´ÐºÐ¸"
 
-#: elf32-spu.c:1989 elf64-ppc.c:13230
+#: elf32-spu.c:1991 elf64-ppc.c:14727
 msgid "stubs don't match calculated size"
 msgstr "ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸ Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°ÑŽÑ‚ÑŒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: elf32-spu.c:2572
+#: elf32-spu.c:2574
 #, c-format
 msgid "warning: %s overlaps %s\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ñ” %s\n"
 
-#: elf32-spu.c:2588
+#: elf32-spu.c:2590
 #, c-format
 msgid "warning: %s exceeds section size\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ\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"
 
-#: 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): Ð²Ð¸ÐºÐ»Ð¸Ðº Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´, %pB(%pA), Ð°Ð½Ð°Ð»Ñ–Ð· Ñ” Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ð¼\n"
 
-#: elf32-spu.c:3330
+#: elf32-spu.c:3329
 #, c-format
 msgid "stack analysis will ignore the call from %s to %s\n"
 msgstr "Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ Ñ�Ñ‚ÐµÐºÐ° Ð±ÑƒÐ´Ðµ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð²Ð¸ÐºÐ»Ð¸Ðº Ð· %s Ð´Ð¾ %s\n"
 
-#: elf32-spu.c:4027
+#: elf32-spu.c:4026
 msgid "  calls:\n"
 msgstr "  Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸:\n"
 
@@ -3475,280 +3623,279 @@ msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ñ–Ð±
 msgid "fatal error while creating .fixup"
 msgstr "ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ð¿Ñ€Ð¾Ð±Ð¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� .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>): Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %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:1393
+#: elfnn-aarch64.c:9703 elfnn-riscv.c:3216
 #, 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:3591 elf32-v850.c:3830
 #, 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:3601 elf32-v850.c:3840
 #, 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:3647 elf32-v850.c:3875
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-v850.c:3705
+#: elf32-v850.c:3687
 #, c-format
 msgid "%pB: %#<PRIx64>: warning: %s points to unrecognized reloc %#<PRIx64>"
 msgstr "%pB: %#<PRIx64>: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %s Ð²ÐºÐ°Ð·ÑƒÑ” Ð½Ð° Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð¾ %#<PRIx64>"
@@ -3773,22 +3920,22 @@ msgstr " [g-float]"
 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:1389
 #, 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:1515
 #, 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:1522
 #, 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 +3950,261 @@ 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:2076 elfnn-ia64.c:2347
 msgid "non-zero addend in @fptr reloc"
 msgstr "Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ð´Ð¾Ð´Ð°Ð½Ð¾Ðº Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– @fptr"
 
-#: elf32-xtensa.c:937
+#: elf32-xtensa.c:1002
 #, c-format
 msgid "%pB(%pA): invalid property table"
 msgstr "%pB(%pA): Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹"
 
-#: 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>): Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð·Ð° Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð¼ (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%#<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 "Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�"
 
-#: elf32-xtensa.c:2858
+#: elf32-xtensa.c:2917
 msgid "TLS relocation invalid without dynamic sections"
 msgstr "ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð±ÐµÐ· Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²"
 
-#: elf32-xtensa.c:3070
+#: elf32-xtensa.c:3130
 msgid "internal inconsistency in size of .got.loc section"
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð½ÐµÐ¿Ð¾Ñ�Ð»Ñ–Ð´Ð¾Ð²Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð°Ñ… Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .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: Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€. Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� â€” 0x%x. Ð’Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ– â€” 0x%x"
 
-#: elf32-xtensa.c:4608 elf32-xtensa.c:4616
+#: elf32-xtensa.c:4730 elf32-xtensa.c:4738
 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:6566 elf32-xtensa.c:6645 elf32-xtensa.c:8071
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): could not decode instruction; possible configuration mismatch"
 msgstr "%pB(%pA+%#<PRIx64>): Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–ÑŽ, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð° Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹"
 
-#: elf32-xtensa.c:7638
+#: elf32-xtensa.c:7812
 #, 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:9670
 msgid "invalid relocation address"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf32-xtensa.c:9543
+#: elf32-xtensa.c:9761
 msgid "overflow after relaxation"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð¿Ñ–Ñ�Ð»Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ"
 
-#: elf32-xtensa.c:10689
+#: elf32-xtensa.c:10907
 #, 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:2001 elf64-alpha.c:2696 elflink.c:15230
+#, c-format
+msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
+msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ» Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�\n"
+
+#: elf64-alpha.c:2453
 #, 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:2991 elf64-alpha.c:3186
 #, 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:4385 elf64-alpha.c:4398
 #, c-format
 msgid "%pB: gp-relative relocation against dynamic symbol %s"
 msgstr "%pB: gp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-alpha.c:4484
+#: elf64-alpha.c:4454
 #, 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:4479 mach-o.c:616 elfnn-riscv.c:616
 msgid "<unknown>"
 msgstr "<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð°>"
 
-#: elf64-alpha.c:4515
+#: elf64-alpha.c:4485
 #, c-format
 msgid "%pB: !samegp reloc against symbol without .prologue: %s"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� !samegp Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð±ÐµÐ· .prologue: %s"
 
-#: elf64-alpha.c:4573
+#: elf64-alpha.c:4543
 #, c-format
 msgid "%pB: unhandled dynamic relocation against %s"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ %s"
 
-#: elf64-alpha.c:4608
+#: elf64-alpha.c:4578
 #, c-format
 msgid "%pB: pc-relative relocation against undefined weak symbol %s"
 msgstr "%pB: pc-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-alpha.c:4674
+#: elf64-alpha.c:4644
 #, c-format
 msgid "%pB: dtp-relative relocation against dynamic symbol %s"
 msgstr "%pB: dtp-Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %s"
 
-#: elf64-alpha.c:4699
+#: elf64-alpha.c:4669
 #, 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:557
+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:2033
 #, 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:3237
 #, 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: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: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ». Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ°, Ñ�ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð¹Ñ‚ÐµÑ�Ñ� brl Ð°Ð±Ð¾ Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�Ð¼."
 
-#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301
+#: elf64-ia64-vms.c:2031 elfnn-ia64.c:2295
 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:3283 elfnn-ia64.c:3678
 #, 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:3293 elfnn-ia64.c:3688
 #, 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:3563 elfnn-ia64.c:3962
 #, 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:3627 elfnn-ia64.c:4030
 #, 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:3686 elfnn-ia64.c:4093
 #, 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:3788 elfnn-ia64.c:4231
 #, 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:3791 elfnn-ia64.c:4234
 #, 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:3794 elfnn-ia64.c:4237
 #, 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:3918 elfnn-ia64.c:4434
 msgid "unsupported reloc"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506
+#: elf64-ia64-vms.c:3955 elfnn-ia64.c:4472
 #, 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:3972 elfnn-ia64.c:4489
 #, 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:4268 elfnn-ia64.c:4750
 #, 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:4277 elfnn-ia64.c:4759
 #, 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:4286 elfnn-ia64.c:4768
 #, 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:4295 elfnn-ia64.c:4777
 #, 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:4305 elfnn-ia64.c:4787
 #, 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:5152 elflink.c:5141
 #, 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:5159 elflink.c:5148
 #, 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:5175 elflink.c:5165
 #, 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:4095
 #, c-format
 msgid "%pB(%pA): relocation %<PRIu64> has invalid symbol index %ld"
 msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %<PRIu64> Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %ld"
@@ -4081,147 +4251,171 @@ 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:1346
+#, c-format
+msgid "warning: %s should be used rather than %s"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð»Ñ–Ð´ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ %s, Ð° Ð½Ðµ %s"
+
+#: elf64-ppc.c:4143
 #, 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:4323
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr ".opd %pB Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— ABI %d"
 
-#: elf64-ppc.c:4523
+#: elf64-ppc.c:4895
 #, 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:5305
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr "%pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� e_flags 0x%lx"
 
-#: elf64-ppc.c:4927
+#: elf64-ppc.c:5313
 #, 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:5340
 #, c-format
 msgid " [abiv%ld]"
 msgstr " [abiv%ld]"
 
-#: elf64-ppc.c:6145
+#: elf64-ppc.c:6624
 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:6891
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr "%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– R_PPC64_TOCSAVE"
 
-#: elf64-ppc.c:6644
+#: elf64-ppc.c:7139
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñƒ Ð¾Ð±Ñ‡Ð¸Ñ�Ð»ÐµÐ½Ð½Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA"
 
-#: elf64-ppc.c:6733
+#: elf64-ppc.c:7228
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr "%pB: .opd Ð½Ðµ Ñ” Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¸Ð¼ Ð¼Ð°Ñ�Ð¸Ð²Ð¾Ð¼ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² opd"
 
-#: elf64-ppc.c:6743
+#: elf64-ppc.c:7238
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr "%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�, %u, Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .opd"
 
-#: elf64-ppc.c:6765
+#: elf64-ppc.c:7260
 #, 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:7754
+msgid "warning: --plt-localentry is incompatible with power10 pc-relative code"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --plt-localentry Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¸Ð¼ Ñ‰Ð¾Ð´Ð¾ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ ÐºÐ¾Ð´Ð¾Ð¼ power10"
+
+#: elf64-ppc.c:7762
 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:8086
 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:8521 elf64-ppc.c:9234
 #, 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:9191
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr "%H: %s Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð½Ð° ÑƒÑ�ÑƒÐ½ÑƒÑ‚Ð¸Ð¹ Ñƒ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñ– Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð·Ð°Ð¿Ð¸Ñ� TOC\n"
 
-#: elf64-ppc.c:9301
+#: elf64-ppc.c:9412
+#, c-format
+msgid "%H: got/toc optimization is not supported for %s instruction\n"
+msgstr "%H: Ð´Ð»Ñ� Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ— %s Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— got/toc\n"
+
+#: elf64-ppc.c:10239
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ”Ð¼Ð¾ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %s"
 
-#: elf64-ppc.c:10215
+#: elf64-ppc.c:11390
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr "`%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� opd Ñƒ toc Ð´Ð»Ñ� Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10303
+#: elf64-ppc.c:11438 elf64-ppc.c:11991
+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"
+
+#: elf64-ppc.c:11499
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð´Ð¾Ð²Ð³Ð¾Ñ— Ð³Ñ–Ð»ÐºÐ¸, Â«%sÂ»"
 
-#: elf64-ppc.c:10330
+#: elf64-ppc.c:11526
 #, 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:11590 elf64-ppc.c:11859 elf64-ppc.c:14168
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr "%P: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:10820
+#: elf64-ppc.c:12063
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Â«%sÂ»"
 
-#: elf64-ppc.c:11779
+#: elf64-ppc.c:13079
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr "Ð Ð¾Ð·Ð´Ñ–Ð» %pB, %pA, Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð³Ñ€ÑƒÐ¿Ð¸ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²"
 
-#: elf64-ppc.c:13189 elf64-ppc.c:13208
+#: elf64-ppc.c:14347
+msgid "__tls_get_addr call offset overflow"
+msgstr "Ð²Ð¸ÐºÐ»Ð¸Ðº __tls_get_addr Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ð·Ñ�ÑƒÐ²Ñƒ"
+
+#: elf64-ppc.c:14686 elf64-ppc.c:14705
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr "Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ %s Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ Ð´Ð»Ñ� ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ� sdata4 .eh_frame"
 
-#: elf64-ppc.c:13244
+#: elf64-ppc.c:14737
 #, c-format
 msgid "linker stubs in %u group\n"
 msgid_plural "linker stubs in %u groups\n"
@@ -4230,10 +4424,10 @@ msgstr[1] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº
 msgstr[2] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ð°Ñ…\n"
 msgstr[3] "ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸Ðº Ð½Ðµ Ð·Ð¼Ñ–Ð³ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ€Ð¾Ð±Ð¾Ñ‚Ñƒ Ñƒ %u Ð³Ñ€ÑƒÐ¿Ñ–\n"
 
-#: elf64-ppc.c:13248
+#: elf64-ppc.c:14744
 #, c-format
 msgid ""
-"  branch         %lu\n"
+"%s  branch         %lu\n"
 "  branch toc adj %lu\n"
 "  branch notoc   %lu\n"
 "  branch both    %lu\n"
@@ -4247,7 +4441,7 @@ msgid ""
 "  plt call both  %lu\n"
 "  global entry   %lu"
 msgstr ""
-"  Ð³Ñ–Ð»ÐºÐ°          %lu\n"
+"%s  Ð³Ñ–Ð»ÐºÐ°          %lu\n"
 "  toc adj Ð³Ñ–Ð»ÐºÐ¸  %lu\n"
 "  notoc Ð³Ñ–Ð»ÐºÐ¸    %lu\n"
 "  both Ð³Ñ–Ð»ÐºÐ¸     %lu\n"
@@ -4261,836 +4455,1027 @@ msgstr ""
 "  plt call both  %lu\n"
 "  Ð·Ð°Ð³. Ð·Ð°Ð¿Ð¸Ñ�     %lu"
 
-#: elf64-ppc.c:13583
+#: elf64-ppc.c:15144
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr "%H: %s Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼ TLS Â«%pTÂ»\n"
 
-#: elf64-ppc.c:13585
+#: elf64-ppc.c:15146
 #, 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:15902
 #, 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:15908
 #, 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:16804
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr "%H: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ %s Ð´Ð»Ñ� Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¾Ñ— Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— Â«%pTÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: elf64-ppc.c:15097
+#: elf64-ppc.c:16889
+#, 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:16944
 #, 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:17192
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr "%H: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %u\n"
 
-#: elf64-ppc.c:15349
+#: elf64-ppc.c:17215
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr "%H: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»\n"
 
-#: elf64-ppc.c:15446
+#: elf64-ppc.c:17359
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr "%H: %s Ñ‰Ð¾Ð´Ð¾ Â«%pTÂ»: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ-PLT Â«%sÂ» Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñƒ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÑ†Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�, Ñ– Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð· Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° (Ñ�Ð»Ñ–Ð´ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ñ„Ð°Ð¹Ð» Ñ–Ð· -fPIC ?)"
 
-#: elf64-sparc.c:109 elfcode.h:1471
-#, c-format
-msgid "%pB(%pA): relocation %d has invalid symbol index %ld"
-msgstr "%pB(%pA): Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %d Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ, %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: Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ STT_REGISTER Ð¼Ð¾Ð¶Ð½Ð° Ð¾Ð³Ð¾Ð»Ð¾ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð»Ð¸ÑˆÐµ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ð¸ %%g[2367]"
 
-#: elf64-sparc.c:488
+#: elf64-sparc.c:499
 #, 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:523
 #, 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:570
 #, 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:702
 #, c-format
 msgid "%pB: linking UltraSPARC specific with HAL specific code"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� UltraSPARC-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ‚Ð° HAL-Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ"
 
-#: elf64-x86-64.c:1412
+#: elf64-x86-64.c:1417
 msgid "hidden symbol "
 msgstr "Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1415
+#: elf64-x86-64.c:1420
 msgid "internal symbol "
 msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1418 elf64-x86-64.c:1422
+#: elf64-x86-64.c:1423 elf64-x86-64.c:1427
 msgid "protected symbol "
 msgstr "Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» "
 
-#: elf64-x86-64.c:1424
+#: elf64-x86-64.c:1429
 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:1435
 msgid "undefined "
 msgstr "Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ "
 
-#: elf64-x86-64.c:1439
+#: elf64-x86-64.c:1445
 msgid "a shared object"
 msgstr "Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±'Ñ”ÐºÑ‚"
 
-#: elf64-x86-64.c:1441
+#: elf64-x86-64.c:1447
+msgid "; recompile with -fPIC"
+msgstr "; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIC"
+
+#: elf64-x86-64.c:1452
 msgid "a PIE object"
 msgstr "Ð¾Ð±'Ñ”ÐºÑ‚ PIE"
 
-#: elf64-x86-64.c:1443
+#: elf64-x86-64.c:1454
 msgid "a PDE object"
 msgstr "Ð¾Ð±'Ñ”ÐºÑ‚ PDE"
 
-#: elf64-x86-64.c:1446
+#: elf64-x86-64.c:1456
+msgid "; recompile with -fPIE"
+msgstr "; Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð· -fPIE"
+
+#: elf64-x86-64.c:1460
 #, 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:1968
 #, 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:2124
 #, 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:2747 elfnn-aarch64.c:5542 elfnn-riscv.c:2086
 #, 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:2992
 #, 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:3006
 #, 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:3283
 #, 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
+#: elf64-x86-64.c:3417 elflink.c:13609
+msgid "%F%P: corrupt input: %pB\n"
+msgstr "%F%P: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ñ– Ð²Ñ…Ñ–Ð´Ð½Ñ– Ð´Ð°Ð½Ñ–: %pB\n"
+
+#: elf64-x86-64.c:4101
 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOTPCREL; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ñ�ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ¹Ñ‚Ðµ Ð· --no-relax\n"
 
-#: elf64-x86-64.c:4043
+#: elf64-x86-64.c:4259
 #, 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:4322
 #, 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:4375
 #, 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:329
+#, c-format
+msgid "warning: %pB has a section extending past end of file"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð», Ñ�ÐºÐ¸Ð¹ Ð²Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¼ÐµÐ¶Ñ– ÐºÑ–Ð½Ñ†Ñ� Ñ„Ð°Ð¹Ð»Ð°"
 
-#: elfcode.h:768
+#: elfcode.h:775
 #, c-format
 msgid "warning: %pB has a corrupt string table index - ignoring"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÐºÐ°Ð¶Ñ‡Ð¸Ðº Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñ�Ð´ÐºÑ–Ð² %pB Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ â€” Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ñ‚ÑŒÑ�Ñ�"
 
-#: elfcode.h:1212
+#: elfcode.h:819
+#, c-format
+msgid "warning: %pB has a program header with invalid alignment"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ñ–Ð· Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼"
+
+#: elfcode.h:1244
 #, c-format
 msgid "%pB: version count (%<PRId64>) does not match symbol count (%ld)"
 msgstr "%pB: Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº Ð²ÐµÑ€Ñ�Ñ–Ñ— (%<PRId64>) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ¾Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%ld)"
 
-#: elfcore.h:300
+#: elfcore.h:308
 #, c-format
 msgid "warning: %pB is truncated: expected core file size >= %<PRIu64>, found: %<PRIu64>"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð¾Ð³Ð¾ Ñ„Ð°Ð¹Ð»Ð° >= %<PRIu64>, Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾: %<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: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� TLS Ñƒ %pB, Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA, Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð½Ðµ-TLS Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA"
 
-#: elflink.c:1373
+#: elflink.c:1390
 #, 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:1396
 #, 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:1402
 #, 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:2114
 #, c-format
 msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð½ÐµÐ¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð²ÐµÑ€Ñ�Ñ–Ñ—, Â«%sÂ»"
 
-#: elflink.c:2452
+#: elflink.c:2496
 #, c-format
 msgid "%pB: version node not found for symbol %s"
 msgstr "%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð²ÑƒÐ·Ð»Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ— Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ %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: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%#<PRIx64> >= %#lx) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%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: Ð½ÐµÐ½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ (%#<PRIx64>) Ð´Ð»Ñ� Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ñƒ %#<PRIx64> Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ», Ð°Ð»Ðµ Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
 
-#: elflink.c:2744
+#: elflink.c:2788
 #, c-format
 msgid "%pB: relocation size mismatch in %pB section %pA"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ñ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pB %pA"
 
-#: elflink.c:3066
+#: elflink.c:3117
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ‚Ð¸Ð¿ Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:3128
+#: elflink.c:3177
 msgid "%P: copy reloc against protected `%pT' is dangerous\n"
 msgstr "%P: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Â«%pTÂ» Ñ” Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ð¼\n"
 
-#: elflink.c:3932
+#: elflink.c:4117
 #, c-format
 msgid "alternate ELF machine code found (%d) in %pB, expecting %d"
 msgstr "Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¸Ð¹ ÐºÐ¾Ð´ ELF (%d) Ñƒ %pB, Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð»Ð¾Ñ�Ñ� %d"
 
 #: elflink.c:4598
 #, c-format
+msgid "%pB: invalid version offset %lx (max %lx)"
+msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ð²ÐµÑ€Ñ�Ñ–Ñ— %lx (Ð¼Ð°ÐºÑ�Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¹ â€” %lx)"
+
+#: elflink.c:4666
+#, c-format
+msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
+msgstr "%pB: Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñ–Ð· Ñ–Ð½Ð´ÐµÐºÑ�Ð¾Ð¼ %lu (>= sh_info %lu)"
+
+#: elflink.c:4814
+#, c-format
+msgid "%pB: not enough version information"
+msgstr "%pB: Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½Ñ– Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñ�Ñ‚Ñ– Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ—"
+
+#: elflink.c:4852
+#, c-format
 msgid "%pB: %s: invalid version %u (max %d)"
 msgstr "%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�, %u (Ð¼Ð°ÐºÑ�Ð¸Ð¼ÑƒÐ¼ â€” %d)"
 
-#: elflink.c:4635
+#: elflink.c:4889
 #, c-format
 msgid "%pB: %s: invalid needed version %d"
 msgstr "%pB: %s: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— Ð²ÐµÑ€Ñ�Ñ–Ñ— %d"
 
-#: elflink.c:5054
+#: elflink.c:5300
 #, c-format
 msgid "%pB: undefined reference to symbol '%s'"
 msgstr "%pB: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ»"
 
-#: elflink.c:6130
+#: elflink.c:6366
 #, c-format
 msgid "%pB: stack size specified and %s set"
 msgstr "%pB: Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ñ�Ñ‚ÐµÐºÐ° Ñ– Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ %s"
 
-#: elflink.c:6134
+#: elflink.c:6370
 #, c-format
 msgid "%pB: %s not absolute"
 msgstr "%pB: %s Ð½Ðµ Ñ” Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ð¸Ð¼"
 
-#: elflink.c:6331
+#: elflink.c:6567
 #, c-format
 msgid "%s: undefined version: %s"
 msgstr "%s: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð²ÐµÑ€Ñ�Ñ–Ñ�: %s"
 
-#: elflink.c:6902
+#: elflink.c:7139
 #, c-format
 msgid "%pB: .preinit_array section is not allowed in DSO"
 msgstr "%pB: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» .preinit_array Ñƒ DSO"
 
-#: elflink.c:8359
+#: elflink.c:8697
 #, c-format
 msgid "undefined %s reference in complex symbol: %s"
 msgstr "Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ�, %s, Ñƒ Ñ�ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð¼Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–: %s"
 
-#: elflink.c:8514
+#: elflink.c:8860 elflink.c:8868
+msgid "division by zero"
+msgstr "Ð´Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ"
+
+#: elflink.c:8882
 #, 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:9220
 #, 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:9223
 #, 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:9468 elflink.c:9486 elflink.c:9525 elflink.c:9543
 #, 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:9502 elflink.c:9559
 #, c-format
 msgid "%pB: unable to sort relocs - they are of an unknown size"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒÐ²Ð°Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: Ñ—Ñ…Ð½Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ–"
 
-#: elflink.c:9234
+#: elflink.c:9611
 msgid "not enough memory to sort relocations"
 msgstr "Ð½ÐµÐ´Ð¾Ñ�Ñ‚Ð°Ñ‚Ð½ÑŒÐ¾ Ð¿Ð°Ð¼â€™Ñ�Ñ‚Ñ– Ð´Ð»Ñ� Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ"
 
-#: elflink.c:9502
+#: elflink.c:9955
 #, c-format
 msgid "%pB: too many sections: %d (>= %d)"
 msgstr "%pB: Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²: %d (>= %d)"
 
-#: elflink.c:9782
+#: elflink.c:10231
 #, c-format
 msgid "%pB: internal symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO"
 
-#: elflink.c:9785
+#: elflink.c:10234
 #, c-format
 msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO"
 
-#: elflink.c:9788
+#: elflink.c:10237
 #, c-format
 msgid "%pB: local symbol `%s' in %pB is referenced by DSO"
 msgstr "%pB: Ð½Ð° Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ñƒ %pB Ñ–Ñ�Ð½ÑƒÑ” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð· DSO"
 
-#: elflink.c:9874
+#: elflink.c:10323
 #, c-format
 msgid "%pB: could not find output section %pA for input section %pA"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ� Ð´Ð°Ð½Ð¸Ñ… %pA"
 
-#: elflink.c:10028
+#: elflink.c:10477
 #, c-format
 msgid "%pB: protected symbol `%s' isn't defined"
 msgstr "%pB: Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:10031
+#: elflink.c:10480
 #, c-format
 msgid "%pB: internal symbol `%s' isn't defined"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:10034
+#: elflink.c:10483
 #, c-format
 msgid "%pB: hidden symbol `%s' isn't defined"
 msgstr "%pB: Ð¿Ñ€Ð¸Ñ…Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: elflink.c:10066
+#: elflink.c:10515
 #, c-format
 msgid "%pB: no symbol version section for versioned symbol `%s'"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ Â«%sÂ»"
 
-#: elflink.c:10679
+#: elflink.c:10914
+#, c-format
+msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: --enable-non-contiguous-regions Ð²Ñ–Ð´ÐºÐ¸Ð´Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð· Â«%sÂ»\n"
+
+#: elflink.c:11168
 #, c-format
 msgid "error: %pB: size of section %pA is not multiple of address size"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elflink.c:10724
+#: elflink.c:11213
 #, 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:11971
 #, 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:11977
 #, c-format
 msgid "%pA has both ordered and unordered sections"
 msgstr "%pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð¾Ð´Ñ€Ð°Ð·Ñƒ Ð²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ– Ð½ÐµÐ²Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸"
 
-#: elflink.c:11592
+#: elflink.c:12047
+msgid "%F%P: %pA has ordered sections with incompatible alignments\n"
+msgstr "%F%P: %pA Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ ÑƒÐ¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ Ñ–Ð· Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼Ð¸ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼Ð¸\n"
+
+#: elflink.c:12121
 #, c-format
 msgid "%pB: no symbol found for import library"
 msgstr "%pB: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ� Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elflink.c:12225
+#: elflink.c:12771
 #, c-format
 msgid "%pB: file class %s incompatible with %s"
 msgstr "%pB: ÐºÐ»Ð°Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² %s Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· %s"
 
-#: elflink.c:12442
+#: elflink.c:13031
 #, c-format
 msgid "%pB: failed to generate import library"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÑƒ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: elflink.c:12561
+#: elflink.c:13157
 #, c-format
 msgid "warning: %s section has zero size"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: elflink.c:12609
+#: elflink.c:13205
 #, c-format
 msgid "warning: section '%s' is being made into a note"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%sÂ» Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¾ Ð½Ð° Ð½Ð¾Ñ‚Ð°Ñ‚ÐºÑƒ"
 
-#: elflink.c:12701
+#: elflink.c:13298
 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:13301
+msgid "%P: warning: creating DT_TEXTREL in a shared object\n"
 msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ– Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�\n"
 
-#: elflink.c:12829
+#: elflink.c:13304
+msgid "%P: warning: creating DT_TEXTREL in a PIE\n"
+msgstr "%P: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ñ‚Ð²Ð¾Ñ€ÑŽÑ”Ð¼Ð¾ DT_TEXTREL Ñƒ PIE\n"
+
+#: elflink.c:13437
 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:13842
+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:14305
 #, c-format
 msgid "%pB: %pA+%#<PRIx64>: no symbol found for INHERIT"
 msgstr "%pB: %pA+%#<PRIx64>: Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð»Ñ� INHERIT"
 
-#: elflink.c:13844
+#: elflink.c:14346
+#, c-format
+msgid "%pB: section '%pA': corrupt VTENTRY entry"
+msgstr "%pB: Ñ€Ð¾Ð·Ð´Ñ–Ð» Â«%pAÂ»: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� VTENTRY"
+
+#: elflink.c:14489
 #, c-format
 msgid "unrecognized INPUT_SECTION_FLAG %s\n"
 msgstr "Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ INPUT_SECTION_FLAG, %s\n"
 
-#: elfxx-mips.c:1450
+#: elflink.c:15236
+#, c-format
+msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n"
+msgstr "%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ñƒ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%pAÂ»\n"
+
+#: elflink.c:15325
+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:9901 elfnn-aarch64.c:9908
+#, 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:758 elfxx-x86.c:2629
+msgid "%F%P: failed to create GNU property section\n"
+msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚ÐµÐ¹ GNU\n"
+
+#: elfxx-aarch64.c:762 elfxx-x86.c:2634
+#, c-format
+msgid "%F%pA: failed to align section\n"
+msgstr "%F%pA: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€\n"
+
+#: elfxx-aarch64.c:812
+#, c-format
+msgid "error: %pB: <corrupt AArch64 used size: 0x%x>"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾Ð³Ð¾ AArch64: 0x%x>"
+
+#: elfxx-mips.c:1505
 msgid "static procedure (no name)"
 msgstr "Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡Ð½Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (Ð±ÐµÐ· Ð½Ð°Ð·Ð²Ð¸)"
 
-#: elfxx-mips.c:5718
+#: elfxx-mips.c:5780
 msgid "MIPS16 and microMIPS functions cannot call each other"
 msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ— MIPS16 Ñ– microMIPS Ð½Ðµ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ‚Ð¸ Ð¾Ð´Ð½Ð° Ð¾Ð´Ð½Ñƒ"
 
-#: elfxx-mips.c:6485
+#: elfxx-mips.c:6545
 msgid "%X%H: unsupported JALX to the same ISA mode\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ JALX Ð´Ð¾ Ñ‚Ð¾Ð³Ð¾ Ñ�Ð°Ð¼Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ 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: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¸Ð¹ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA; Ñ�Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ Ð²Ð·Ð°Ñ”Ð¼Ð½Ð¸Ð¼ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�Ð¼\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: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÑŽÐ²Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA Ð½Ð° JALX: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð° Ð¼ÐµÐ¶Ñ– Ð¿Ñ€Ð¸Ð¿ÑƒÑ�Ñ‚Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ\n"
 
-#: elfxx-mips.c:6575
+#: elfxx-mips.c:6635
 msgid "%X%H: unsupported branch between ISA modes\n"
 msgstr "%X%H: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð¼Ñ–Ð¶ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð¼Ð¸ ISA\n"
 
-#: elfxx-mips.c:7223
+#: elfxx-mips.c:7264
 #, 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:7308 elfxx-mips.c:7545
 #, 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:8352 elfxx-mips.c:8478
 #, c-format
 msgid "%pB: warning: cannot determine the target function for stub section `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ„ÑƒÐ½ÐºÑ†Ñ–ÑŽ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°, Â«%sÂ»"
 
-#: elfxx-mips.c:8558
+#: elfxx-mips.c:8610
 #, c-format
 msgid "%pB: malformed reloc detected for section %s"
 msgstr "%pB: Ð´Ð»Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑƒ Ñƒ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ– Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ�"
 
-#: elfxx-mips.c:8658
+#: elfxx-mips.c:8709
 #, c-format
 msgid "%pB: GOT reloc at %#<PRIx64> not expected in executables"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� GOT Ñƒ %#<PRIx64> Ñ” Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñƒ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… Ñ„Ð°Ð¹Ð»Ð°Ñ…"
 
-#: elfxx-mips.c:8796
+#: elfxx-mips.c:8849
 #, c-format
 msgid "%pB: CALL16 reloc at %#<PRIx64> not against global symbol"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� CALL16 Ñƒ %#<PRIx64> Ð½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: elfxx-mips.c:9086
+#: elfxx-mips.c:9152
 #, 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:9278
+#, c-format
+msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
+msgstr "Ð¡Ð¸Ð¼Ð²Ð¾Ð» IFUNC %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² â€” Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ IFUNCS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
+
+#: elfxx-mips.c:9281
+#, c-format
+msgid "non-dynamic symbol %s in dynamic symbol table"
+msgstr "Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» %s Ñƒ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²"
+
+#: elfxx-mips.c:9501
 #, c-format
 msgid "non-dynamic relocations refer to dynamic symbol %s"
 msgstr "Ð½ÐµÐ´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ�Ð¸Ð»Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð½Ð° Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð», %s"
 
-#: elfxx-mips.c:10350
+#: elfxx-mips.c:10435
 #, 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:10575
 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
 msgstr "Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” 64 ÐºÐ‘; Ð½Ð¸Ð¶Ñ‡Ð¸Ð¹ Ð·Ð° Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð¼Ð°Ð»Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (Ð´Ð¸Ð². Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ -G)"
 
-#: elfxx-mips.c:10509
+#: elfxx-mips.c:10594
 msgid "cannot convert a jump to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elfxx-mips.c:10512
+#: elfxx-mips.c:10597
 msgid "jump to a non-word-aligned address"
 msgstr "Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ�Ð»Ð¾Ð²Ð¾Ð¼ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10513
+#: elfxx-mips.c:10598
 msgid "jump to a non-instruction-aligned address"
 msgstr "Ð¿ÐµÑ€ÐµÑ…Ñ–Ð´ Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10516
+#: elfxx-mips.c:10601
 msgid "cannot convert a branch to JALX for a non-word-aligned address"
 msgstr "Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð½Ð° JALX Ð´Ð»Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸, Ñ�ÐºÑƒ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾ Ð½Ð° Ð¼ÐµÐ¶Ñƒ Ñ�Ð»Ð¾Ð²Ð°"
 
-#: elfxx-mips.c:10518
+#: elfxx-mips.c:10603
 msgid "branch to a non-instruction-aligned address"
 msgstr "Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ� Ð´Ð¾ Ð½Ðµ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð·Ð° Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ”ÑŽ Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10520
+#: elfxx-mips.c:10605
 msgid "PC-relative load from unaligned address"
 msgstr "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ð¾ PC Ð· Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¾Ñ— Ð°Ð´Ñ€ÐµÑ�Ð¸"
 
-#: elfxx-mips.c:10798
+#: elfxx-mips.c:10905
 #, 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:11020 elfxx-mips.c:11607
 #, 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:11579
 #, 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:14535
 #, c-format
 msgid "%pB: unknown architecture %s"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s"
 
-#: elfxx-mips.c:14931
+#: elfxx-mips.c:15069
 #, c-format
 msgid "%pB: illegal section name `%pA'"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Â«%pAÂ»"
 
-#: elfxx-mips.c:15208
+#: elfxx-mips.c:15346
 #, c-format
 msgid "%pB: warning: linking abicalls files with non-abicalls files"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ„Ð°Ð¹Ð»Ñ–Ð² abicalls Ð· Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ð±ÐµÐ· abicalls"
 
-#: elfxx-mips.c:15225
+#: elfxx-mips.c:15363
 #, 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:15395 elfxx-mips.c:15461 elfxx-mips.c:15476
 #, c-format
 msgid "%pB: linking %s module with previous %s modules"
 msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÑ”Ð¼Ð¾ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ %s Ð· Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ð¼Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�Ð¼Ð¸ %s"
 
-#: elfxx-mips.c:15281
+#: elfxx-mips.c:15419
 #, 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:15444
 #, 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:15578
 #, 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:15584
 #, 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:15590
 #, 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:15604
 #, 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:15623
 #, 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:15635
 #, 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:15644
 #, 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:15706
 #, c-format
 msgid "%pB: endianness incompatible with that of the selected emulation"
 msgstr "%pB: Ð¿Ð¾Ñ€Ñ�Ð´Ð¾Ðº Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—"
 
-#: elfxx-mips.c:15582
+#: elfxx-mips.c:15720
 #, c-format
 msgid "%pB: ABI is incompatible with that of the selected emulation"
 msgstr "%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ð· ABI Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ñ— ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—"
 
-#: elfxx-mips.c:15634
+#: elfxx-mips.c:15773
 #, 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:15778
 #, 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:15782
 #, 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:15789
 #, 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:15793
 #, 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:15984
 msgid "-mips32r2 -mfp64 (12 callee-saved)"
 msgstr "-mips32r2 -mfp64 (12 Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¸Ñ… Ð´Ð»Ñ� Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²)"
 
-#: elfxx-mips.c:15905 elfxx-mips.c:15916
+#: elfxx-mips.c:16046 elfxx-mips.c:16057
 msgid "None"
 msgstr "Ð�ÐµÐ¼Ð°Ñ”"
 
-#: elfxx-mips.c:15907 elfxx-mips.c:15976
+#: elfxx-mips.c:16048 elfxx-mips.c:16117
 msgid "Unknown"
 msgstr "Ð�ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹"
 
-#: elfxx-mips.c:15987
+#: elfxx-mips.c:16128
 #, c-format
 msgid "Hard or soft float\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ð°Ð±Ð¾ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ°\n"
 
-#: elfxx-mips.c:15990
+#: elfxx-mips.c:16131
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (Ð¿Ð¾Ð´Ð²Ñ–Ð¹Ð½Ð° Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15993
+#: elfxx-mips.c:16134
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð° Ñ‚Ð¾Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ)\n"
 
-#: elfxx-mips.c:15996
+#: elfxx-mips.c:16137
 #, c-format
 msgid "Soft float\n"
 msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ°\n"
 
-#: elfxx-mips.c:15999
+#: elfxx-mips.c:16140
 #, 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:16143
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, Ð±ÑƒÐ´ÑŒ-Ñ�ÐºÐ¸Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16005
+#: elfxx-mips.c:16146
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr "Ð�Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° Ñ€ÑƒÑ…Ð¾Ð¼Ð° ÐºÑ€Ð°Ð¿ÐºÐ° (32-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ð¾Ñ€, 64-Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ FPU)\n"
 
-#: elfxx-mips.c:16008
+#: elfxx-mips.c:16149
 #, 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:16181
 #, c-format
 msgid " [abi=O32]"
 msgstr " [abi=O32]"
 
-#: elfxx-mips.c:16042
+#: elfxx-mips.c:16183
 #, c-format
 msgid " [abi=O64]"
 msgstr " [abi=O64]"
 
-#: elfxx-mips.c:16044
+#: elfxx-mips.c:16185
 #, c-format
 msgid " [abi=EABI32]"
 msgstr " [abi=EABI32]"
 
-#: elfxx-mips.c:16046
+#: elfxx-mips.c:16187
 #, c-format
 msgid " [abi=EABI64]"
 msgstr " [abi=EABI64]"
 
-#: elfxx-mips.c:16048
+#: elfxx-mips.c:16189
 #, c-format
 msgid " [abi unknown]"
 msgstr " [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ abi]"
 
-#: elfxx-mips.c:16050
+#: elfxx-mips.c:16191
 #, c-format
 msgid " [abi=N32]"
 msgstr " [abi=N32]"
 
-#: elfxx-mips.c:16052
+#: elfxx-mips.c:16193
 #, c-format
 msgid " [abi=64]"
 msgstr " [abi=64]"
 
-#: elfxx-mips.c:16054
+#: elfxx-mips.c:16195
 #, c-format
 msgid " [no abi set]"
 msgstr " [Ð½Ðµ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ abi]"
 
-#: elfxx-mips.c:16079
+#: elfxx-mips.c:16220
 #, c-format
 msgid " [unknown ISA]"
 msgstr " [Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ ISA]"
 
-#: elfxx-mips.c:16099
+#: elfxx-mips.c:16240
 #, 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:1201
+#, c-format
+msgid "x ISA extension `%s' must be set with the versions"
+msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� x ISA Â«%sÂ» Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñ–Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ�Ð¼Ð¸"
+
+#: elfxx-riscv.c:1205
+#, c-format
+msgid "cannot find default versions of the ISA extension `%s'"
+msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%sÂ»"
+
+#: elfxx-riscv.c:1279
+#, c-format
+msgid "-march=%s: expect number after `%dp'"
+msgstr "-march=%s: Ð¼Ð°Ð»Ð¾ Ð±ÑƒÑ‚Ð¸ Ñ‡Ð¸Ñ�Ð»Ð¾ Ð¿Ñ–Ñ�Ð»Ñ� Â«%dpÂ»"
+
+#: elfxx-riscv.c:1367
+#, c-format
+msgid "-march=%s: rv%de is not a valid base ISA"
+msgstr "-march=%s: rv%de Ð½Ðµ Ñ” ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¼ ISA Ð¾Ñ�Ð½Ð¾Ð²Ð¸"
+
+#: elfxx-riscv.c:1397
+#, c-format
+msgid "-march=%s: first ISA extension must be `e', `i' or `g'"
+msgstr "-march=%s: Ð¿ÐµÑ€ÑˆÐ¸Ð¼ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ�Ð¼ ISA Ð¼Ð°Ñ” Ð±ÑƒÑ‚Ð¸ Â«eÂ», Â«iÂ» Ð°Ð±Ð¾ Â«gÂ»"
+
+#: elfxx-riscv.c:1422
+#, c-format
+msgid "-march=%s: unknown standard ISA extension `%c'"
+msgstr "-march=%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%cÂ»"
+
+#: elfxx-riscv.c:1426
+#, c-format
+msgid "-march=%s: standard ISA extension `%c' is not in canonical order"
+msgstr "-march=%s: Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚ÐµÐ½ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA Â«%cÂ» Ð½Ðµ Ñƒ ÐºÐ°Ð½Ð¾Ð½Ñ–Ñ‡Ð½Ð¾Ð¼Ñƒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ"
+
+#: elfxx-riscv.c:1544
+#, c-format
+msgid "-march=%s: unknown %s ISA extension `%s'"
+msgstr "-march=%s: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s: Â«%sÂ»"
+
+#: elfxx-riscv.c:1555
+#, c-format
+msgid "-march=%s: duplicate %s ISA extension `%s'"
+msgstr "-march=%s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s Â«%sÂ»"
+
+#: elfxx-riscv.c:1565
+#, c-format
+msgid "-march=%s: %s ISA extension `%s' is not in alphabetical order.  It must come before `%s'"
+msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s Â«%sÂ» Ð½Ðµ Ñƒ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð·Ð° Ð°Ð±ÐµÑ‚ÐºÐ¾ÑŽ: Ð’Ð¾Ð½Ð¾ Ð¼Ð°Ñ” Ð¿ÐµÑ€ÐµÐ´ÑƒÐ²Ð°Ñ‚Ð¸ Â«%sÂ»"
+
+#: elfxx-riscv.c:1581
+#, c-format
+msgid "-march=%s: %s ISA extension must separate with _"
+msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� ISA %s Ñ�Ð»Ñ–Ð´ Ð²Ñ–Ð´Ð¾ÐºÑ€ÐµÐ¼Ð»ÑŽÐ²Ð°Ñ‚Ð¸ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾ÑŽ _"
+
+#: elfxx-riscv.c:1799
+#, c-format
+msgid "-march=%s: ISA string cannot contain uppercase letters"
+msgstr "-march=%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð»Ñ–Ñ‚ÐµÑ€ Ñƒ Ð²ÐµÑ€Ñ…Ð½ÑŒÐ¾Ð¼Ñƒ Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–"
+
+#: elfxx-riscv.c:1825
+#, c-format
+msgid "-march=%s: ISA string must begin with rv32 or rv64"
+msgstr "-march=%s: Ñ€Ñ�Ð´Ð¾Ðº ISA Ð¼Ð°Ñ” Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚Ð¸Ñ�Ñ� Ð· rv32 Ð°Ð±Ð¾ rv64"
+
+#: elfxx-riscv.c:1851
+#, c-format
+msgid "-march=%s: unexpected ISA string at end: %s"
+msgstr "-march=%s: Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº ISA Ð½Ð°Ð¿Ñ€Ð¸ÐºÑ–Ð½Ñ†Ñ–: %s"
+
+#: elfxx-riscv.c:1865
+#, c-format
+msgid "-march=%s: rv32e does not support the `f' extension"
+msgstr "-march=%s: Ñƒ rv32e Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«fÂ»"
+
+#: elfxx-riscv.c:1873
+#, c-format
+msgid "-march=%s: rv32 does not support the `q' extension"
+msgstr "-march=%s: Ñƒ rv32 Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %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:976
 #, 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: 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:1058
 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:2384
+#: elfxx-x86.c:2313
 #, 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:2614
-#, c-format
-msgid "%F%pA: failed to align section\n"
-msgstr "%F%pA: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€\n"
+#: elfxx-x86.c:2648
+msgid "%P: %pB: warning: missing %s\n"
+msgstr "%P: %pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s\n"
+
+#: elfxx-x86.c:2649
+msgid "%X%P: %pB: error: missing %s\n"
+msgstr "%X%P: %pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ %s\n"
+
+#: elfxx-x86.c:2712
+msgid "IBT and SHSTK properties"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ð¾Ñ�Ñ‚Ñ– IBT Ñ– SHSTK"
+
+#: elfxx-x86.c:2714
+msgid "IBT property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ IBT"
+
+#: elfxx-x86.c:2716
+msgid "SHSTK property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ SHSTK"
+
+#: elfxx-x86.c:2721
+msgid "LAM_U48 property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ LAM_U48"
+
+#: elfxx-x86.c:2726
+msgid "LAM_U57 property"
+msgstr "Ð²Ð»Ð°Ñ�Ñ‚Ð¸Ð²Ñ–Ñ�Ñ‚ÑŒ LAM_U57"
 
-#: elfxx-x86.c:2760
+#: elfxx-x86.c:2870
 msgid "%F%P: failed to create VxWorks dynamic sections\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ñ– Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ VxWorks\n"
 
-#: elfxx-x86.c:2769
+#: elfxx-x86.c:2879
 msgid "%F%P: failed to create GOT sections\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ GOT\n"
 
-#: elfxx-x86.c:2787
+#: elfxx-x86.c:2897
 msgid "%F%P: failed to create ifunc sections\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸ ifunc\n"
 
-#: elfxx-x86.c:2828
+#: elfxx-x86.c:2934
 msgid "%F%P: failed to create GOT PLT section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT GOT\n"
 
-#: elfxx-x86.c:2849
+#: elfxx-x86.c:2953
 msgid "%F%P: failed to create IBT-enabled PLT section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT Ñ–Ð· ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼ IBT\n"
 
-#: elfxx-x86.c:2864
+#: elfxx-x86.c:2967
 msgid "%F%P: failed to create BND PLT section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» PLT BND\n"
 
-#: elfxx-x86.c:2885
+#: elfxx-x86.c:2987
 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:3000
 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:3014
 msgid "%F%P: failed to create the second PLT .eh_frame section\n"
 msgstr "%F%P: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð´Ñ€ÑƒÐ³Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .eh_frame PLT\n"
 
+#: elfxx-x86.c:3056
+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,112 +5486,146 @@ 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:884
 #, c-format
 msgid "%pB: unable to get decompressed section %pA"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %pA"
 
-#: libbfd.c:1101
+#: libbfd.c:1048
 #, c-format
 msgid "Deprecated %s called at %s line %d in %s\n"
 msgstr "Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s Ñƒ %s, Ñ€Ñ�Ð´Ð¾Ðº %d Ñƒ %s\n"
 
-#: libbfd.c:1104
+#: libbfd.c:1051
 #, c-format
 msgid "Deprecated %s called\n"
 msgstr "Ð’Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ñƒ %s\n"
 
-#: linker.c:1697
+#: linker.c:1707
 #, c-format
 msgid "%pB: indirect symbol `%s' to `%s' is a loop"
 msgstr "%pB: Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð´Ð»Ñ� Â«%sÂ» Ñ” Ñ†Ð¸ÐºÐ»Ð¾Ð¼"
 
-#: linker.c:2567
+#: linker.c:2578
 #, c-format
 msgid "attempt to do relocatable link with %s input and %s output"
 msgstr "Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð·Ð²â€™Ñ�Ð·ÐºÑƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð²Ñ…Ñ–Ð´Ð½Ð¸Ð¼ %s Ñ– Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ð¼ %s"
 
-#: linker.c:2853
+#: linker.c:2863
 #, c-format
 msgid "%pB: ignoring duplicate section `%pA'\n"
 msgstr "%pB: Ñ–Ð³Ð½Ð¾Ñ€ÑƒÑ”Ð¼Ð¾ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»\n"
 
-#: linker.c:2863 linker.c:2873
+#: linker.c:2873 linker.c:2883
 #, c-format
 msgid "%pB: duplicate section `%pA' has different size\n"
 msgstr "%pB: Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð¼Ð°Ñ” Ñ–Ð½ÑˆÐ¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€\n"
 
-#: linker.c:2882 linker.c:2888
+#: linker.c:2892 linker.c:2898
 #, c-format
 msgid "%pB: could not read contents of section `%pA'\n"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ»\n"
 
-#: linker.c:2893
+#: linker.c:2903
 #, c-format
 msgid "%pB: duplicate section `%pA' has different contents\n"
 msgstr "%pB: Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Â«%pAÂ» Ð¼Ð°Ñ” Ñ–Ð½ÑˆÐ¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚\n"
 
-#: linker.c:3407
+#: linker.c:3420
 #, c-format
 msgid "%pB: compiled for a big endian system and target is little endian"
 msgstr "%pB: Ð·Ñ–Ð±Ñ€Ð°Ð½Ð¾ Ð´Ð»Ñ� Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸ Ð· Ð¿Ñ€Ñ�Ð¼Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð², Ð° Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ñ” Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð° Ð·Ñ– Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ð¸Ð¼ Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð¼ Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: linker.c:3410
+#: linker.c:3423
 #, 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:172
+msgid "malformed mach-o ARM reloc pair: reloc is first reloc"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð°Ñ€Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ mach-o ARM: reloc Ñ” Ð¿ÐµÑ€ÑˆÐ¸Ð¼ reloc"
+
+#: mach-o-arm.c:188
+#, c-format
+msgid "malformed mach-o ARM reloc pair: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð°Ñ€Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:203
+#, c-format
+msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:218
+#, c-format
+msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:233
+#, c-format
+msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %d"
+
+#: mach-o-arm.c:265
+#, 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:329
+#, c-format
+msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o ARM: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�: %d"
+
+#: mach-o.c:631
 #, c-format
 msgid "<unknown mask flags>"
 msgstr "<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð¼Ð°Ñ�ÐºÑƒÐ²Ð°Ð½Ð½Ñ�>"
 
-#: mach-o.c:687
+#: mach-o.c:686
 msgid " (<unknown>)"
 msgstr " (<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾>)"
 
@@ -5265,85 +5684,85 @@ msgstr "Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ñ– Ñ‚Ð¸Ð¿Ð¸ Ð¿Ñ€
 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
 msgstr "bfd_mach_o_canonicalize_symtab: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸"
 
-#: mach-o.c:2108
+#: mach-o.c:1504
+msgid "malformed mach-o reloc: section index is greater than the number of sections"
+msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� mach-o: Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²"
+
+#: mach-o.c:2138
 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:2586
 #, 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:2693
 #, c-format
 msgid "unable to allocate data for load command %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð´Ð»Ñ� ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� %#x"
 
-#: mach-o.c:2766
+#: mach-o.c:2798
 #, c-format
 msgid "unable to write unknown load command %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð°Ð¿Ð¸Ñ�Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x"
 
-#: mach-o.c:2950
+#: mach-o.c:2982
 #, c-format
 msgid "section address (%#<PRIx64>) below start of segment (%#<PRIx64>)"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%<PRIx64>) Ð½Ð¸Ð¶Ñ‡Ðµ Ð·Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº Ñ�ÐµÐ³Ð¼ÐµÐ½Ñ‚Ð° (%<PRIx64>)"
 
-#: mach-o.c:3092
+#: mach-o.c:3124
 #, c-format
 msgid "unable to layout unknown load command %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ñ‚Ð¸ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x"
 
-#: 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: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ 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_32: Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: %#lx, Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ð¼Ð¾ Ð·Ð°Ð¼Ñ–Ñ�Ñ‚ÑŒ Ð½ÑŒÐ¾Ð³Ð¾ 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: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ %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: Ð½Ð°Ð·Ð²Ð° Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð½Ð¾Ð³Ð¾ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ (%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Â» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» %d (max %lu): Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÑŽÑ”Ð¼Ð¾ Ñƒ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�"
 
-#: 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Â» Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ð¿Ð¾Ð»Ñ� 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:5063
 #, c-format
 msgid "%pB: unknown load command %#x"
 msgstr "%pB: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�, %#x"
 
-#: 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: Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°, 0x%lx/0x%lx"
 
-#: mach-o.c:5227
+#: mach-o.c:5384
 #, c-format
 msgid "unknown header byte-order value %#x"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ð¾Ñ€Ñ�Ð´ÐºÑƒ Ð±Ð°Ð¹Ñ‚Ñ–Ð² Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ, %#x"
 
-#: merge.c:878
+#: merge.c:895
 #, c-format
 msgid "%pB: access beyond end of merged section (%<PRId64>)"
 msgstr "%pB: Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿ Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ (%<PRId64>)"
@@ -5358,122 +5777,122 @@ msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð
 msgid "%pB: no core to allocate a symbol %d bytes long"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð´Ð»Ñ� Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¾ÑŽ %d Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
-#: mmo.c:955
+#: mmo.c:952
 #, c-format
 msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#<PRIx64>"
 msgstr "%pB: Ñ�Ð¿Ñ€Ð¾Ð±Ð° Ð½Ð°Ð´Ñ–Ñ�Ð»Ð°Ñ‚Ð¸ Ð´Ð°Ð½Ñ– Ð½Ð° Ð½ÐµÐºÑ€Ð°Ñ‚Ð½Ñƒ Ð´Ð¾ 4 Ð°Ð´Ñ€ÐµÑ�Ñƒ %#<PRIx64>"
 
-#: mmo.c:1252
+#: mmo.c:1248
 #, 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:1395
 #, 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:1628
 #, c-format
 msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ„Ð°Ð¹Ð» mmo: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� lopcode, Â«%dÂ»\n"
 
-#: mmo.c:1644
+#: mmo.c:1639
 #, 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:1679
 #, 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:1730
 #, 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:1771
 #, 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:1782
 #, 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:1807
 #, 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:1832
 #, 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:1854
 #, 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:1868
 #, 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:1975
 #, 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:2012
 #, 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:2026
 #, 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:2735
 #, c-format
 msgid "%pB: invalid symbol table: duplicate symbol `%s'\n"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
 
-#: mmo.c:2983
+#: mmo.c:2979
 #, c-format
 msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ: Â«MainÂ» Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñƒ %s, Ð° Ð½Ðµ Ñƒ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ñƒ Ð°Ð´Ñ€ÐµÑ�Ñƒ %s\n"
 
-#: mmo.c:3082
+#: mmo.c:3078
 #, 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:3124
 #, 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:3177
 #, c-format
 msgid "%pB: internal error, internal register section %pA had contents\n"
 msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², %pA, Ð¼Ñ–Ñ�Ñ‚Ð¸Ð² Ð´Ð°Ð½Ñ–\n"
 
-#: mmo.c:3232
+#: mmo.c:3228
 #, c-format
 msgid "%pB: no initialized registers; section length 0\n"
 msgstr "%pB: Ð½ÐµÐ¼Ð°Ñ” Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð², Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð¾Ñ€Ñ–Ð²Ð½ÑŽÑ” 0\n"
 
-#: mmo.c:3239
+#: mmo.c:3235
 #, c-format
 msgid "%pB: too many initialized registers; section length %<PRId64>"
 msgstr "%pB: Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð±Ð°Ð³Ð°Ñ‚Ð¾ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð²; Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ â€” %<PRId64>"
 
-#: mmo.c:3244
+#: mmo.c:3240
 #, c-format
 msgid "%pB: invalid start address for initialized registers of length %<PRId64>: %#<PRIx64>"
 msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð° Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… Ñ€ÐµÐ³Ñ–Ñ�Ñ‚Ñ€Ñ–Ð² Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ %<PRId64>: %#<PRIx64>"
@@ -5483,48 +5902,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:530
 #, 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: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 "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ð´Ð°Ð½Ñ– Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ�\n"
 
 #. PR 17512: file: 2245-7442-0.004.
-#: pei-x86_64.c:315
+#: pei-x86_64.c:367
 #, 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:418 pei-x86_64.c:428 pei-x86_64.c:437
 #, c-format
 msgid "warning: xdata section corrupt\n"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð» xdata\n"
 
-#: pei-x86_64.c:439
+#: pei-x86_64.c:492
 #, c-format
 msgid "Too many unwind codes (%ld)\n"
 msgstr "Ð—Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ ÐºÐ¾Ð´Ñ–Ð² Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ� (%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 "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%ld) Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ %d\n"
 
-#: pei-x86_64.c:536
+#: pei-x86_64.c:589
 #, c-format
 msgid "Warning: %s section size is zero\n"
 msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼\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 "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s (%ld) Ñ” Ð¼ÐµÐ½ÑˆÐ¸Ð¼ Ð·Ð° Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%ld)\n"
 
-#: pei-x86_64.c:560
+#: pei-x86_64.c:613
 #, c-format
 msgid ""
 "\n"
@@ -5533,12 +5959,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s)\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\tÐŸÐ¾Ñ‡Ð°Ñ‚ÐºÐ�Ð´Ñ€ÐµÑ�Ð°\t ÐšÑ–Ð½Ñ†Ð�Ð´Ñ€ÐµÑ�Ð°s\t  Ð”Ð°Ð½Ñ–Unwind\n"
 
-#: pei-x86_64.c:692
+#: pei-x86_64.c:745
 #, c-format
 msgid ""
 "\n"
@@ -5548,42 +5974,42 @@ msgstr ""
 "Ð”Ð°Ð¼Ð¿ %s\n"
 
 #. XXX code yet to be written.
-#: peicode.h:775
+#: peicode.h:796
 #, c-format
 msgid "%pB: unhandled import type; %x"
 msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x"
 
-#: peicode.h:781
+#: peicode.h:802
 #, c-format
 msgid "%pB: unrecognized import type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¸Ð¹ Ñ‚Ð¸Ð¿ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x"
 
-#: peicode.h:796
+#: peicode.h:817
 #, c-format
 msgid "%pB: unrecognized import name type; %x"
 msgstr "%pB: Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð° Ð½Ð°Ð·Ð²Ð° Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�; %x"
 
-#: peicode.h:1211
+#: peicode.h:1225
 #, 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:1238
 #, 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:1256
 #, c-format
 msgid "%pB: size field is zero in Import Library Format header"
 msgstr "%pB: Ñƒ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ Import Library Format Ð¿Ð¾Ð»Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ñ” Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼"
 
-#: peicode.h:1274
+#: peicode.h:1282
 #, c-format
 msgid "%pB: string not null terminated in ILF object file"
 msgstr "%pB: Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ñ„Ð°Ð¹Ð»Ñ– ILF Ñ€Ñ�Ð´Ð¾Ðº Ð½Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¾Ð¼"
 
-#: peicode.h:1330
+#: peicode.h:1338
 #, c-format
 msgid "%pB: error: debug data ends beyond end of debug directory"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ñ– Ð´Ð°Ð½Ñ– Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑŽÑ‚ÑŒÑ�Ñ� Ð·Ð° ÐºÑ–Ð½Ñ†ÐµÐ¼ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ"
@@ -5641,32 +6067,32 @@ msgstr "Ð¡ÐµÐºÑ‚Ð¾Ñ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d]
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr "Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ[%d] = 0x%.8lx (%ld)\n"
 
-#: reloc.c:8232
+#: reloc.c:8318
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr "ÐŸÑ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ INPUT_SECTION_FLAGS Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: reloc.c:8333
+#: reloc.c:8419
 #, 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
+#: reloc.c:8507
 #, c-format
 msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
 msgstr "%X%P: %pB(%pA): Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Â«%pRÂ» Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: reloc.c:8429
+#: reloc.c:8516
 #, 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:8578
 #, 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:8582
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr "Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ†Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° - %s - Ñ” Ð·Ð°Ñ�Ñ‚Ð°Ñ€Ñ–Ð»Ð¾ÑŽ?"
@@ -5676,7 +6102,13 @@ msgstr "Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ†Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ
 msgid "%pB: warning core file truncated"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ„Ð°Ð¹Ð» core Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾"
 
-#: som.c:5478
+#. User has specified a subspace without its containing space.
+#: som.c:5465
+#, c-format
+msgid "%pB[%pA]: no output section for space %pA"
+msgstr "%pB[%pA]: Ð½ÐµÐ¼Ð°Ñ” Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ Ð´Ð»Ñ� Ð¿Ñ€Ð¾Ñ�Ñ‚Ð¾Ñ€Ñƒ %pA"
+
+#: som.c:5511
 #, c-format
 msgid ""
 "\n"
@@ -5685,7 +6117,7 @@ msgstr ""
 "\n"
 "Ð”Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ�\n"
 
-#: som.c:5787
+#: som.c:5820
 msgid "som_sizeof_headers unimplemented"
 msgstr "som_sizeof_headers Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
@@ -5699,7 +6131,7 @@ 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"
@@ -5709,73 +6141,82 @@ msgstr "%pB:%d: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð° ÐºÐ¾Ð
 msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
 msgstr "%pB(%pA+%#lx): Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– stabs Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ñ–Ð½Ð´ÐµÐºÑ� Ñ€Ñ�Ð´ÐºÐ°"
 
-#: syms.c:1091
+#: syms.c:1088
 msgid "unsupported .stab relocation"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� .stab"
 
-#: vms-alpha.c:479
+#: vms-alpha.c:480
 msgid "corrupt EIHD record - size is too small"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EIHD: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:660
+#: vms-alpha.c:666
 #, c-format
 msgid "unable to read EIHS record at offset %#x"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� EIHS Ð·Ñ– Ð·Ñ�ÑƒÐ²Ð¾Ð¼ %#x"
 
-#: vms-alpha.c:1173
+#: vms-alpha.c:1158
+msgid "record is too small for symbol name length"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼ Ð´Ð»Ñ� Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ Ð½Ð°Ð·Ð²Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
+
+#: vms-alpha.c:1191
 #, c-format
 msgid "corrupt EGSD record: its size (%#x) is too small"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð¹Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ (%#x) Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:1197
+#: vms-alpha.c:1215
 #, 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:1225
 #, 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:1367
 #, c-format
 msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EGSD: Ð²Ð¼Ñ–Ñ�Ñ‚ Ð¹Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ� psindx Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼ (%#lx)"
 
-#: vms-alpha.c:1419
+#: vms-alpha.c:1442
 #, c-format
 msgid "unknown EGSD subtype %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ EGSD, %d"
 
-#: vms-alpha.c:1452
+#: vms-alpha.c:1475
 #, c-format
 msgid "stack overflow (%d) in _bfd_vms_push"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° (%d) Ñƒ _bfd_vms_push"
 
-#: vms-alpha.c:1465
+#: vms-alpha.c:1489
 msgid "stack underflow in _bfd_vms_pop"
 msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ� Ñ�Ñ‚ÐµÐºÐ° Ñƒ _bfd_vms_pop"
 
+#: vms-alpha.c:1563
+#, 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:1764
 #, c-format
 msgid "unknown ETIR command %d"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ETIR, %d"
 
-#: vms-alpha.c:1738
+#: vms-alpha.c:1795
 msgid "corrupt vms value"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� vms"
 
-#: vms-alpha.c:1866
+#: vms-alpha.c:1926
 msgid "corrupt ETIR record encountered"
 msgstr "Ð²Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� ETIR"
 
-#: vms-alpha.c:1923
+#: vms-alpha.c:1988
 #, c-format
 msgid "bad section index in %s"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ %s"
 
-#: vms-alpha.c:1936
+#: vms-alpha.c:2002
 #, c-format
 msgid "unsupported STA cmd %s"
 msgstr "Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° STA, %s"
@@ -5785,1468 +6226,1480 @@ 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:2210 vms-alpha.c:2241 vms-alpha.c:2336 vms-alpha.c:2556
 #, c-format
 msgid "%s: not supported"
 msgstr "%s: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: vms-alpha.c:2122
+#: vms-alpha.c:2216
 #, c-format
 msgid "%s: not implemented"
 msgstr "%s: Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:2380
+#: vms-alpha.c:2381 vms-alpha.c:2396
+#, 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:2456
+#, c-format
+msgid "%s divide by zero"
+msgstr "%s Ð´Ñ–Ð»ÐµÐ½Ð½Ñ� Ð½Ð° Ð½ÑƒÐ»ÑŒ"
+
+#: vms-alpha.c:2522
 #, c-format
 msgid "invalid use of %s with contexts"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ� %s Ð· ÐºÐ¾Ð½Ñ‚ÐµÐºÑ�Ñ‚Ð°Ð¼Ð¸"
 
-#: vms-alpha.c:2414
+#: vms-alpha.c:2580
 #, c-format
 msgid "reserved cmd %d"
 msgstr "Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d"
 
-#: vms-alpha.c:2498
+#: vms-alpha.c:2664
 msgid "corrupt EEOM record - size is too small"
 msgstr "Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ� EEOM: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¸Ð¼"
 
-#: vms-alpha.c:2507
+#: vms-alpha.c:2673
 msgid "object module not error-free !"
 msgstr "Ñƒ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¾Ð¼Ñƒ Ð¼Ð¾Ð´ÑƒÐ»Ñ– Ð¼Ñ–Ñ�Ñ‚Ñ�Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸!"
 
-#: vms-alpha.c:3831
+#: vms-alpha.c:4001
 #, 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:4053 vms-alpha.c:4268
 #, c-format
 msgid "size error in section %pA"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %pA"
 
-#: vms-alpha.c:4043
+#: vms-alpha.c:4213
 msgid "spurious ALPHA_R_BSR reloc"
 msgstr "Ñ„Ð°Ð»ÑŒÑˆÐ¸Ð²Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� ALPHA_R_BSR"
 
-#: vms-alpha.c:4084
+#: vms-alpha.c:4254
 #, c-format
 msgid "unhandled relocation %s"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ðµ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: vms-alpha.c:4377
+#: vms-alpha.c:4551
 #, 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:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630
+#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675
+#: vms-alpha.c:4681
 #, c-format
 msgid "%s not implemented"
 msgstr "%s Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-#: vms-alpha.c:4550
+#: vms-alpha.c:4724
 #, 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:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237
+#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275
 #, c-format
 msgid "unknown reloc %s + %s"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s + %s"
 
-#: vms-alpha.c:5152
+#: vms-alpha.c:5330
 #, c-format
 msgid "unknown reloc %s"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s"
 
-#: vms-alpha.c:5166
+#: vms-alpha.c:5344
 msgid "invalid section index in ETIR"
 msgstr "Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñƒ ETIR"
 
-#: vms-alpha.c:5175
+#: vms-alpha.c:5353
 msgid "relocation for non-REL psect"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð´Ð»Ñ� psect, Ñ�ÐºÐ¸Ð¹ Ð½Ðµ Ñ” REL"
 
-#: vms-alpha.c:5222
+#: vms-alpha.c:5402
 #, c-format
 msgid "unknown symbol in command %s"
 msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ– %s"
 
-#: vms-alpha.c:5636
+#: vms-alpha.c:5816
 #, c-format
 msgid "reloc (%d) is *UNKNOWN*"
 msgstr "Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� (%d) Ñ” *Ð�Ð•Ð’Ð†Ð”ÐžÐœÐ˜Ðœ*"
 
-#: vms-alpha.c:5752
+#: vms-alpha.c:5932
 #, c-format
 msgid "  EMH %u (len=%u): "
 msgstr "  EMH %u (Ð´Ð¾Ð²Ð¶=%u): "
 
-#: vms-alpha.c:5757
+#: vms-alpha.c:5937
 #, 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:5954
 #, 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:5957
 #, c-format
 msgid "Module header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5778
+#: vms-alpha.c:5958
 #, c-format
 msgid "   structure level: %u\n"
 msgstr "   Ñ€Ñ–Ð²ÐµÐ½ÑŒ Ñ�Ñ‚Ñ€ÑƒÐºÑ‚. : %u\n"
 
-#: vms-alpha.c:5779
+#: vms-alpha.c:5959
 #, c-format
 msgid "   max record size: %u\n"
 msgstr "   Ð¼Ð°ÐºÑ�. Ñ€Ð¾Ð·Ð¼. Ð·Ð°Ð¿Ð¸Ñ�Ñƒ: %u\n"
 
-#: vms-alpha.c:5785
+#: vms-alpha.c:5965
 #, c-format
 msgid "   Error: The module name is missing\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð½Ð°Ð·Ð²Ð¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5791
+#: vms-alpha.c:5971
 #, c-format
 msgid "   Error: The module name is too long\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð¾Ð²Ð³Ð¾ÑŽ\n"
 
-#: vms-alpha.c:5794
+#: vms-alpha.c:5974
 #, c-format
 msgid "   module name    : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð´ÑƒÐ»Ñ�   : %.*s\n"
 
-#: vms-alpha.c:5798
+#: vms-alpha.c:5978
 #, c-format
 msgid "   Error: The module version is missing\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ð¼Ð¾Ð´ÑƒÐ»Ñ�\n"
 
-#: vms-alpha.c:5804
+#: vms-alpha.c:5984
 #, c-format
 msgid "   Error: The module version is too long\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð²ÐµÑ€Ñ�Ñ–Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ� Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð´Ð¾Ð²Ð³Ð¾ÑŽ\n"
 
-#: vms-alpha.c:5807
+#: vms-alpha.c:5987
 #, c-format
 msgid "   module version : %.*s\n"
 msgstr "   Ð²ÐµÑ€Ñ�Ñ–Ñ� Ð¼Ð¾Ð´ÑƒÐ»Ñ�  : %.*s\n"
 
-#: vms-alpha.c:5810
+#: vms-alpha.c:5990
 #, c-format
 msgid "   Error: The compile date is truncated\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð°Ñ‚Ñƒ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾\n"
 
-#: vms-alpha.c:5812
+#: vms-alpha.c:5992
 #, c-format
 msgid "   compile date   : %.17s\n"
 msgstr "   Ð´Ð°Ñ‚Ð° Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ�  : %.17s\n"
 
-#: vms-alpha.c:5817
+#: vms-alpha.c:5997
 #, c-format
 msgid "Language Processor Name\n"
 msgstr "Ð�Ð°Ð·Ð²Ð° Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° Ð¼Ð¾Ð²Ð¸\n"
 
-#: vms-alpha.c:5818
+#: vms-alpha.c:5998
 #, c-format
 msgid "   language name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð²Ð¸   : %.*s\n"
 
-#: vms-alpha.c:5822
+#: vms-alpha.c:6002
 #, c-format
 msgid "Source Files Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ„Ð°Ð¹Ð»Ñ–Ð² ÐºÐ¾Ð´Ñƒ\n"
 
-#: vms-alpha.c:5823
+#: vms-alpha.c:6003
 #, c-format
 msgid "   file: %.*s\n"
 msgstr "   Ñ„Ð°Ð¹Ð»: %.*s\n"
 
-#: vms-alpha.c:5827
+#: vms-alpha.c:6007
 #, c-format
 msgid "Title Text Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñ‚Ð¸Ñ‚ÑƒÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ñ‚ÐµÐºÑ�Ñ‚Ñƒ\n"
 
-#: vms-alpha.c:5828
+#: vms-alpha.c:6008
 #, c-format
 msgid "   title: %.*s\n"
 msgstr "   Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº: %.*s\n"
 
-#: vms-alpha.c:5832
+#: vms-alpha.c:6012
 #, c-format
 msgid "Copyright Header\n"
 msgstr "Ð—Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÐ¸Ñ… Ð¿Ñ€Ð°Ð²\n"
 
-#: vms-alpha.c:5833
+#: vms-alpha.c:6013
 #, c-format
 msgid "   copyright: %.*s\n"
 msgstr "   Ð°Ð²Ñ‚Ð¾Ñ€Ñ�ÑŒÐºÑ– Ð¿Ñ€Ð°Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:5837
+#: vms-alpha.c:6017
 #, c-format
 msgid "unhandled emh subtype %u\n"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿ emh, %u\n"
 
-#: vms-alpha.c:5847
+#: vms-alpha.c:6027
 #, c-format
 msgid "  EEOM (len=%u):\n"
 msgstr "  EEOM (Ð´Ð¾Ð²Ð¶=%u):\n"
 
-#: vms-alpha.c:5852
+#: vms-alpha.c:6032
 #, 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:6036
 #, c-format
 msgid "   number of cond linkage pairs: %u\n"
 msgstr "   ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿Ð°Ñ€ ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:5858
+#: vms-alpha.c:6038
 #, c-format
 msgid "   completion code: %u\n"
 msgstr "   ÐºÐ¾Ð´ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:5862
+#: vms-alpha.c:6042
 #, c-format
 msgid "   transfer addr flags: 0x%02x\n"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸: 0x%02x\n"
 
-#: vms-alpha.c:5863
+#: vms-alpha.c:6043
 #, c-format
 msgid "   transfer addr psect: %u\n"
 msgstr "   psect Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ� Ð°Ð´Ñ€ÐµÑ�Ð¸: %u\n"
 
-#: vms-alpha.c:5865
+#: vms-alpha.c:6045
 #, c-format
 msgid "   transfer address   : 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° Ð¿ÐµÑ€ÐµÐ½ÐµÑ�ÐµÐ½Ð½Ñ� : 0x%08x\n"
 
-#: vms-alpha.c:5874
+#: vms-alpha.c:6054
 msgid " WEAK"
 msgstr " WEAK"
 
-#: vms-alpha.c:5876
+#: vms-alpha.c:6056
 msgid " DEF"
 msgstr " DEF"
 
-#: vms-alpha.c:5878
+#: vms-alpha.c:6058
 msgid " UNI"
 msgstr " UNI"
 
-#: vms-alpha.c:5880 vms-alpha.c:5901
+#: vms-alpha.c:6060 vms-alpha.c:6081
 msgid " REL"
 msgstr " REL"
 
-#: vms-alpha.c:5882
+#: vms-alpha.c:6062
 msgid " COMM"
 msgstr " COMM"
 
-#: vms-alpha.c:5884
+#: vms-alpha.c:6064
 msgid " VECEP"
 msgstr " VECEP"
 
-#: vms-alpha.c:5886
+#: vms-alpha.c:6066
 msgid " NORM"
 msgstr " NORM"
 
-#: vms-alpha.c:5888
+#: vms-alpha.c:6068
 msgid " QVAL"
 msgstr " QVAL"
 
-#: vms-alpha.c:5895
+#: vms-alpha.c:6075
 msgid " PIC"
 msgstr " PIC"
 
-#: vms-alpha.c:5897
+#: vms-alpha.c:6077
 msgid " LIB"
 msgstr " LIB"
 
-#: vms-alpha.c:5899
+#: vms-alpha.c:6079
 msgid " OVR"
 msgstr " OVR"
 
-#: vms-alpha.c:5903
+#: vms-alpha.c:6083
 msgid " GBL"
 msgstr " GBL"
 
-#: vms-alpha.c:5905
+#: vms-alpha.c:6085
 msgid " SHR"
 msgstr " SHR"
 
-#: vms-alpha.c:5907
+#: vms-alpha.c:6087
 msgid " EXE"
 msgstr " EXE"
 
-#: vms-alpha.c:5909
+#: vms-alpha.c:6089
 msgid " RD"
 msgstr " RD"
 
-#: vms-alpha.c:5911
+#: vms-alpha.c:6091
 msgid " WRT"
 msgstr " WRT"
 
-#: vms-alpha.c:5913
+#: vms-alpha.c:6093
 msgid " VEC"
 msgstr " VEC"
 
-#: vms-alpha.c:5915
+#: vms-alpha.c:6095
 msgid " NOMOD"
 msgstr " NOMOD"
 
-#: vms-alpha.c:5917
+#: vms-alpha.c:6097
 msgid " COM"
 msgstr " COM"
 
-#: vms-alpha.c:5919
+#: vms-alpha.c:6099
 msgid " 64B"
 msgstr " 64B"
 
-#: vms-alpha.c:5928
+#: vms-alpha.c:6108
 #, c-format
 msgid "  EGSD (len=%u):\n"
 msgstr "  EGSD (Ð´Ð¾Ð²Ð¶=%u):\n"
 
-#: vms-alpha.c:5941
+#: vms-alpha.c:6121
 #, 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:6127 vms-alpha.c:6378
 #, c-format
 msgid "   Error: length larger than remaining space in record\n"
 msgstr "   ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¼Ñ–Ñ�Ñ†Ðµ, Ñ�ÐºÐµ Ð»Ð¸ÑˆÐ¸Ð»Ð¾Ñ�Ñ� Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–\n"
 
-#: vms-alpha.c:5959
+#: vms-alpha.c:6139
 #, c-format
 msgid "PSC - Program section definition\n"
 msgstr "PSC â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸\n"
 
-#: vms-alpha.c:5960 vms-alpha.c:5977
+#: vms-alpha.c:6140 vms-alpha.c:6157
 #, c-format
 msgid "   alignment  : 2**%u\n"
 msgstr "   Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�: 2**%u\n"
 
-#: vms-alpha.c:5961 vms-alpha.c:5978
+#: vms-alpha.c:6141 vms-alpha.c:6158
 #, c-format
 msgid "   flags      : 0x%04x"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–    : 0x%04x"
 
-#: vms-alpha.c:5965
+#: vms-alpha.c:6145
 #, 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:6146 vms-alpha.c:6203 vms-alpha.c:6252
 #, c-format
 msgid "   name       : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°      : %.*s\n"
 
-#: vms-alpha.c:5976
+#: vms-alpha.c:6156
 #, c-format
 msgid "SPSC - Shared Image Program section def\n"
 msgstr "SPSC â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¾Ð±Ñ€Ð°Ð·Ñƒ\n"
 
-#: vms-alpha.c:5982
+#: vms-alpha.c:6162
 #, c-format
 msgid "   alloc (len)   : %u (0x%08x)\n"
 msgstr "   alloc (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°): %u (0x%08x)\n"
 
-#: vms-alpha.c:5983
+#: vms-alpha.c:6163
 #, c-format
 msgid "   image offset  : 0x%08x\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:5985
+#: vms-alpha.c:6165
 #, c-format
 msgid "   symvec offset : 0x%08x\n"
 msgstr "   Ð·Ñ�ÑƒÐ² symvec   : 0x%08x\n"
 
-#: vms-alpha.c:5987
+#: vms-alpha.c:6167
 #, c-format
 msgid "   name          : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°         : %.*s\n"
 
-#: vms-alpha.c:6000
+#: vms-alpha.c:6180
 #, 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:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281
 #, c-format
 msgid "   flags: 0x%04x"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%04x"
 
-#: vms-alpha.c:6004
+#: vms-alpha.c:6184
 #, c-format
 msgid "   psect offset: 0x%08x\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ psect: 0x%08x\n"
 
-#: vms-alpha.c:6008
+#: vms-alpha.c:6188
 #, c-format
 msgid "   code address: 0x%08x\n"
 msgstr "   Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:6010
+#: vms-alpha.c:6190
 #, 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:6193 vms-alpha.c:6269 vms-alpha.c:6288
 #, 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:6195 vms-alpha.c:6271 vms-alpha.c:6290
 #, c-format
 msgid "   name        : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð°       : %.*s\n"
 
-#: vms-alpha.c:6022
+#: vms-alpha.c:6202
 #, c-format
 msgid "SYM - Global symbol reference\n"
 msgstr "SYM â€” Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð¸\n"
 
-#: vms-alpha.c:6034
+#: vms-alpha.c:6214
 #, c-format
 msgid "IDC - Ident Consistency check\n"
 msgstr "IDC â€” Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ�Ñ‚Ñ– Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ñ–Ð²\n"
 
-#: vms-alpha.c:6035
+#: vms-alpha.c:6215
 #, c-format
 msgid "   flags         : 0x%08x"
 msgstr "   Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–      : 0x%08x"
 
-#: vms-alpha.c:6039
+#: vms-alpha.c:6219
 #, c-format
 msgid "   id match      : %x\n"
 msgstr "   Ñ–Ð´. Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ñ�Ñ‚Ñ–: %x\n"
 
-#: vms-alpha.c:6041
+#: vms-alpha.c:6221
 #, c-format
 msgid "   error severity: %x\n"
 msgstr "   ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ñ–Ñ�Ñ‚ÑŒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸: %x\n"
 
-#: vms-alpha.c:6044
+#: vms-alpha.c:6224
 #, c-format
 msgid "   entity name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°: %.*s\n"
 
-#: vms-alpha.c:6046
+#: vms-alpha.c:6226
 #, c-format
 msgid "   object name   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° : %.*s\n"
 
-#: vms-alpha.c:6049
+#: vms-alpha.c:6229
 #, c-format
 msgid "   binary ident  : 0x%08x\n"
 msgstr "   Ð´Ð²Ñ–Ð¹Ðº. Ñ–Ð´ÐµÐ½Ñ‚. : 0x%08x\n"
 
-#: vms-alpha.c:6052
+#: vms-alpha.c:6232
 #, c-format
 msgid "   ascii ident   : %.*s\n"
 msgstr "   Ñ–Ð´ÐµÐ½Ñ‚. ascii  : %.*s\n"
 
-#: vms-alpha.c:6060
+#: vms-alpha.c:6240
 #, c-format
 msgid "SYMG - Universal symbol definition\n"
 msgstr "SYMG â€” Ð£Ð½Ñ–Ð²ÐµÑ€Ñ�Ð°Ð»ÑŒÐ½Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²\n"
 
-#: vms-alpha.c:6064
+#: vms-alpha.c:6244
 #, c-format
 msgid "   symbol vector offset: 0x%08x\n"
 msgstr "   Ð·Ñ�ÑƒÐ² Ð²ÐµÐºÑ‚Ð¾Ñ€Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: 0x%08x\n"
 
-#: vms-alpha.c:6066
+#: vms-alpha.c:6246
 #, c-format
 msgid "   entry point: 0x%08x\n"
 msgstr "   Ñ‚Ð¾Ñ‡ÐºÐ° Ð²Ñ…Ð¾Ð´Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:6068
+#: vms-alpha.c:6248
 #, c-format
 msgid "   proc descr : 0x%08x\n"
 msgstr "   Ð´ÐµÑ�ÐºÑ€. Ð¿Ñ€Ð¾Ñ†ÐµÑ�Ñƒ: 0x%08x\n"
 
-#: vms-alpha.c:6070
+#: vms-alpha.c:6250
 #, c-format
 msgid "   psect index: %u\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� psect: %u\n"
 
-#: vms-alpha.c:6081
+#: vms-alpha.c:6261
 #, c-format
 msgid "SYMV - Vectored symbol definition\n"
 msgstr "SYMV â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ\n"
 
-#: vms-alpha.c:6085
+#: vms-alpha.c:6265
 #, c-format
 msgid "   vector      : 0x%08x\n"
 msgstr "   Ð²ÐµÐºÑ‚Ð¾Ñ€      : 0x%08x\n"
 
-#: vms-alpha.c:6087 vms-alpha.c:6106
+#: vms-alpha.c:6267 vms-alpha.c:6286
 #, c-format
 msgid "   psect offset: %u\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ psect: %u\n"
 
-#: vms-alpha.c:6100
+#: vms-alpha.c:6280
 #, c-format
 msgid "SYMM - Global symbol definition with version\n"
 msgstr "SYMM â€” Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð· Ð²ÐµÑ€Ñ�Ñ–Ñ”ÑŽ\n"
 
-#: vms-alpha.c:6104
+#: vms-alpha.c:6284
 #, c-format
 msgid "   version mask: 0x%08x\n"
 msgstr "   Ð¼Ð°Ñ�ÐºÐ° Ð²ÐµÑ€Ñ�Ñ–Ñ—: 0x%08x\n"
 
-#: vms-alpha.c:6115
+#: vms-alpha.c:6295
 #, c-format
 msgid "unhandled egsd entry type %u\n"
 msgstr "Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ egsd, %u\n"
 
-#: vms-alpha.c:6150
+#: vms-alpha.c:6330
 #, c-format
 msgid "    linkage index: %u, replacement insn: 0x%08x\n"
 msgstr "    Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ñ–Ð½Ñ�Ñ‚Ñ€ÑƒÐºÑ†Ñ–Ñ�-Ð·Ð°Ð¼Ñ–Ð½Ð½Ð¸Ðº: 0x%08x\n"
 
-#: vms-alpha.c:6154
+#: vms-alpha.c:6334
 #, 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:6339
 #, 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:6345
 #, 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:6350
 #, c-format
 msgid "    global name: %.*s\n"
 msgstr "    Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð° Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:6181
+#: vms-alpha.c:6361
 #, c-format
 msgid "  %s (len=%u+%u):\n"
 msgstr "  %s (Ð´Ð¾Ð²Ð¶=%u+%u):\n"
 
-#: vms-alpha.c:6203
+#: vms-alpha.c:6383
 #, c-format
 msgid "   (type: %3u, size: 4+%3u): "
 msgstr "   (Ñ‚Ð¸Ð¿: %3u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 4+%3u): "
 
-#: vms-alpha.c:6207
+#: vms-alpha.c:6387
 #, c-format
 msgid "STA_GBL (stack global) %.*s\n"
 msgstr "STA_GBL (Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹ Ñ�Ñ‚ÐµÐº) %.*s\n"
 
-#: vms-alpha.c:6211
+#: vms-alpha.c:6391
 #, c-format
 msgid "STA_LW (stack longword) 0x%08x\n"
 msgstr "STA_LW (Ñ�Ñ‚ÐµÐº Ð´Ð¾Ð²Ð³Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x\n"
 
-#: vms-alpha.c:6215
+#: vms-alpha.c:6395
 #, c-format
 msgid "STA_QW (stack quadword) 0x%08x %08x\n"
 msgstr "STA_QW (Ñ�Ñ‚ÐµÐº Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð½Ð¸Ñ… Ñ�Ð»Ñ–Ð²) 0x%08x %08x\n"
 
-#: vms-alpha.c:6220
+#: vms-alpha.c:6400
 #, c-format
 msgid "STA_PQ (stack psect base + offset)\n"
 msgstr "STA_PQ (Ñ�Ñ‚ÐµÐº Ð¾Ñ�Ð½Ð¾Ð²Ð¸ psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6222
+#: vms-alpha.c:6402
 #, c-format
 msgid "    psect: %u, offset: 0x%08x %08x\n"
 msgstr "    psect: %u, Ð·Ñ�ÑƒÐ²: 0x%08x %08x\n"
 
-#: vms-alpha.c:6228
+#: vms-alpha.c:6408
 #, c-format
 msgid "STA_LI (stack literal)\n"
 msgstr "STA_LI (Ñ�Ñ‚ÐµÐº Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ñ–Ð²)\n"
 
-#: vms-alpha.c:6231
+#: vms-alpha.c:6411
 #, c-format
 msgid "STA_MOD (stack module)\n"
 msgstr "STA_MOD (Ñ�Ñ‚ÐµÐº Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²)\n"
 
-#: vms-alpha.c:6234
+#: vms-alpha.c:6414
 #, c-format
 msgid "STA_CKARG (compare procedure argument)\n"
 msgstr "STA_CKARG (Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸ Ð¿Ð¾Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6238
+#: vms-alpha.c:6418
 #, c-format
 msgid "STO_B (store byte)\n"
 msgstr "STO_B (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ Ð±Ð°Ð¹Ñ‚)\n"
 
-#: vms-alpha.c:6241
+#: vms-alpha.c:6421
 #, c-format
 msgid "STO_W (store word)\n"
 msgstr "STO_W (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ñ�Ð»Ð¾Ð²Ð¾)\n"
 
-#: vms-alpha.c:6244
+#: vms-alpha.c:6424
 #, c-format
 msgid "STO_LW (store longword)\n"
 msgstr "STO_LW (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ longword)\n"
 
-#: vms-alpha.c:6247
+#: vms-alpha.c:6427
 #, c-format
 msgid "STO_QW (store quadword)\n"
 msgstr "STO_QW (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ quadword)\n"
 
-#: vms-alpha.c:6253
+#: vms-alpha.c:6433
 #, c-format
 msgid "STO_IMMR (store immediate repeat) %u bytes\n"
 msgstr "STO_IMMR (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð½ÐµÐ³Ð°Ð¹Ð½Ðµ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ�) %u Ð±Ð°Ð¹Ñ‚Ñ–Ð²\n"
 
-#: vms-alpha.c:6260
+#: vms-alpha.c:6440
 #, c-format
 msgid "STO_GBL (store global) %.*s\n"
 msgstr "STO_GBL (Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ðµ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ�) %.*s\n"
 
-#: vms-alpha.c:6264
+#: vms-alpha.c:6444
 #, c-format
 msgid "STO_CA (store code address) %.*s\n"
 msgstr "STO_CA (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° ÐºÐ¾Ð´Ñƒ) %.*s\n"
 
-#: vms-alpha.c:6268
+#: vms-alpha.c:6448
 #, c-format
 msgid "STO_RB (store relative branch)\n"
 msgstr "STO_RB (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð²Ñ–Ð´Ð½Ð¾Ñ�Ð½Ðµ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6271
+#: vms-alpha.c:6451
 #, c-format
 msgid "STO_AB (store absolute branch)\n"
 msgstr "STO_AB (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð°Ð±Ñ�Ð¾Ð»ÑŽÑ‚Ð½Ðµ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6274
+#: vms-alpha.c:6454
 #, c-format
 msgid "STO_OFF (store offset to psect)\n"
 msgstr "STO_OFF (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ Ð·Ñ�ÑƒÐ² Ñ‰Ð¾Ð´Ð¾ psect)\n"
 
-#: vms-alpha.c:6280
+#: vms-alpha.c:6460
 #, c-format
 msgid "STO_IMM (store immediate) %u bytes\n"
 msgstr "STO_IMM (Ð½ÐµÐ³Ð°Ð¹Ð½Ðµ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ�) %u Ð±Ð°Ð¹Ñ‚\n"
 
-#: vms-alpha.c:6287
+#: vms-alpha.c:6467
 #, 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:6471
 #, c-format
 msgid "STO_OFF (store LP with procedure signature)\n"
 msgstr "STO_OFF (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ� LP Ð· Ð¿Ñ–Ð´Ð¿Ð¸Ñ�Ð¾Ð¼ Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸)\n"
 
-#: vms-alpha.c:6294
+#: vms-alpha.c:6474
 #, c-format
 msgid "STO_BR_GBL (store branch global) *todo*\n"
 msgstr "STO_BR_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ðµ Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ�) *Ñ‰Ðµ Ð½Ðµ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾*\n"
 
-#: vms-alpha.c:6297
+#: vms-alpha.c:6477
 #, 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:6481
 #, c-format
 msgid "OPR_NOP (no-operation)\n"
 msgstr "OPR_NOP (Ð±ÐµÐ· Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ—)\n"
 
-#: vms-alpha.c:6304
+#: vms-alpha.c:6484
 #, c-format
 msgid "OPR_ADD (add)\n"
 msgstr "OPR_ADD (Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6307
+#: vms-alpha.c:6487
 #, c-format
 msgid "OPR_SUB (subtract)\n"
 msgstr "OPR_SUB (Ð²Ñ–Ð´Ð½Ñ–Ð¼Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6310
+#: vms-alpha.c:6490
 #, c-format
 msgid "OPR_MUL (multiply)\n"
 msgstr "OPR_MUL (Ð¼Ð½Ð¾Ð¶ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6313
+#: vms-alpha.c:6493
 #, c-format
 msgid "OPR_DIV (divide)\n"
 msgstr "OPR_DIV (Ð´Ñ–Ð»ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6316
+#: vms-alpha.c:6496
 #, c-format
 msgid "OPR_AND (logical and)\n"
 msgstr "OPR_AND (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Â«Ð†Â»)\n"
 
-#: vms-alpha.c:6319
+#: vms-alpha.c:6499
 #, c-format
 msgid "OPR_IOR (logical inclusive or)\n"
 msgstr "OPR_IOR (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡Ð½Ðµ Â«Ð�Ð‘ÐžÂ»)\n"
 
-#: vms-alpha.c:6322
+#: vms-alpha.c:6502
 #, c-format
 msgid "OPR_EOR (logical exclusive or)\n"
 msgstr "OPR_EOR (Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ðµ Ð²Ð¸ÐºÐ»ÑŽÑ‡Ð½Ðµ Â«Ð�Ð‘ÐžÂ»)\n"
 
-#: vms-alpha.c:6325
+#: vms-alpha.c:6505
 #, c-format
 msgid "OPR_NEG (negate)\n"
 msgstr "OPR_NEG (Ð·Ð°Ð¿ÐµÑ€ÐµÑ‡ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6328
+#: vms-alpha.c:6508
 #, c-format
 msgid "OPR_COM (complement)\n"
 msgstr "OPR_COM (Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6331
+#: vms-alpha.c:6511
 #, c-format
 msgid "OPR_INSV (insert field)\n"
 msgstr "OPR_INSV (Ð²Ñ�Ñ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ� Ð¿Ð¾Ð»Ñ�)\n"
 
-#: vms-alpha.c:6334
+#: vms-alpha.c:6514
 #, c-format
 msgid "OPR_ASH (arithmetic shift)\n"
 msgstr "OPR_ASH (Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6337
+#: vms-alpha.c:6517
 #, c-format
 msgid "OPR_USH (unsigned shift)\n"
 msgstr "OPR_USH (Ð±ÐµÐ·Ð·Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6340
+#: vms-alpha.c:6520
 #, c-format
 msgid "OPR_ROT (rotate)\n"
 msgstr "OPR_ROT (Ñ†Ð¸ÐºÐ»Ñ–Ñ‡Ð½Ð¸Ð¹ Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6343
+#: vms-alpha.c:6523
 #, c-format
 msgid "OPR_SEL (select)\n"
 msgstr "OPR_SEL (Ð²Ð¸Ð±Ñ–Ñ€)\n"
 
-#: vms-alpha.c:6346
+#: vms-alpha.c:6526
 #, c-format
 msgid "OPR_REDEF (redefine symbol to curr location)\n"
 msgstr "OPR_REDEF (Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Ð´Ð¾ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ—)\n"
 
-#: vms-alpha.c:6349
+#: vms-alpha.c:6529
 #, c-format
 msgid "OPR_REDEF (define a literal)\n"
 msgstr "OPR_REDEF (Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ð°)\n"
 
-#: vms-alpha.c:6353
+#: vms-alpha.c:6533
 #, c-format
 msgid "STC_LP (store cond linkage pair)\n"
 msgstr "STC_LP (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð¿Ð°Ñ€Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6357
+#: vms-alpha.c:6537
 #, c-format
 msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
 msgstr "STC_LP_PSB (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð¿Ð°Ñ€Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� + Ð¿Ñ–Ð´Ð¿Ð¸Ñ�)\n"
 
-#: vms-alpha.c:6359
+#: vms-alpha.c:6539
 #, c-format
 msgid "   linkage index: %u, procedure: %.*s\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°: %.*s\n"
 
-#: vms-alpha.c:6362
+#: vms-alpha.c:6542
 #, c-format
 msgid "   signature: %.*s\n"
 msgstr "   Ð¿Ñ–Ð´Ð¿Ð¸Ñ�: %.*s\n"
 
-#: vms-alpha.c:6365
+#: vms-alpha.c:6545
 #, c-format
 msgid "STC_GBL (store cond global)\n"
 msgstr "STC_GBL (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð° ÑƒÐ¼Ð¾Ð²Ð°)\n"
 
-#: vms-alpha.c:6367
+#: vms-alpha.c:6547
 #, c-format
 msgid "   linkage index: %u, global: %.*s\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ð¹: %.*s\n"
 
-#: vms-alpha.c:6371
+#: vms-alpha.c:6551
 #, c-format
 msgid "STC_GCA (store cond code address)\n"
 msgstr "STC_GCA (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° ÑƒÐ¼Ð¾Ð²Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ð´Ñƒ)\n"
 
-#: vms-alpha.c:6373
+#: vms-alpha.c:6553
 #, c-format
 msgid "   linkage index: %u, procedure name: %.*s\n"
 msgstr "   Ñ–Ð½Ð´ÐµÐºÑ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�: %u, Ð½Ð°Ð·Ð²Ð° Ð¿Ñ–Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸: %.*s\n"
 
-#: vms-alpha.c:6377
+#: vms-alpha.c:6557
 #, c-format
 msgid "STC_PS (store cond psect + offset)\n"
 msgstr "STC_PS (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¸Ð¹ ÑƒÐ¼Ð¾Ð²Ð½Ð¸Ð¹ psect + Ð·Ñ�ÑƒÐ²)\n"
 
-#: vms-alpha.c:6380
+#: vms-alpha.c:6560
 #, 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:6567
 #, 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:6571
 #, 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:6575
 #, 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:6579
 #, 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:6583
 #, 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:6587
 #, 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:6591
 #, 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:6595
 #, 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:6600
 #, 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:6604
 #, 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:6608
 #, c-format
 msgid "CTL_SETRB (set relocation base)\n"
 msgstr "CTL_SETRB (Ð²Ñ�Ñ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6434
+#: vms-alpha.c:6614
 #, c-format
 msgid "CTL_AUGRB (augment relocation base) %u\n"
 msgstr "CTL_AUGRB (Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�) %u\n"
 
-#: vms-alpha.c:6438
+#: vms-alpha.c:6618
 #, c-format
 msgid "CTL_DFLOC (define location)\n"
 msgstr "CTL_DFLOC (Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6441
+#: vms-alpha.c:6621
 #, c-format
 msgid "CTL_STLOC (set location)\n"
 msgstr "CTL_STLOC (Ð²ÐºÐ°Ð·Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6444
+#: vms-alpha.c:6624
 #, 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:6627 vms-alpha.c:7051 vms-alpha.c:7177
 #, c-format
 msgid "*unhandled*\n"
 msgstr "*Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¾*\n"
 
-#: vms-alpha.c:6477 vms-alpha.c:6516
+#: vms-alpha.c:6657 vms-alpha.c:6696
 #, c-format
 msgid "cannot read GST record length\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST\n"
 
 #. Ill-formed.
-#: vms-alpha.c:6498
+#: vms-alpha.c:6678
 #, c-format
 msgid "cannot find EMH in first GST record\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ EMH Ñƒ Ð¿ÐµÑ€ÑˆÐ¾Ð¼Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñ– GST\n"
 
-#: vms-alpha.c:6524
+#: vms-alpha.c:6704
 #, c-format
 msgid "cannot read GST record header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ð·Ð°Ð¿Ð¸Ñ�Ñƒ GST\n"
 
-#: vms-alpha.c:6537
+#: vms-alpha.c:6717
 #, c-format
 msgid " corrupted GST\n"
 msgstr " Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ GST\n"
 
-#: vms-alpha.c:6545
+#: vms-alpha.c:6725
 #, c-format
 msgid "cannot read GST record\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ� GST\n"
 
-#: vms-alpha.c:6574
+#: vms-alpha.c:6754
 #, c-format
 msgid " unhandled EOBJ record type %u\n"
 msgstr " Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹ Ð´Ð¾ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ Ñ‚Ð¸Ð¿ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ EOBJ, %u\n"
 
-#: vms-alpha.c:6598
+#: vms-alpha.c:6778
 #, c-format
 msgid "  bitcount: %u, base addr: 0x%08x\n"
 msgstr "  ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ñ–Ñ‚Ñ–Ð²: %u, Ð±Ð°Ð·Ð¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:6612
+#: vms-alpha.c:6792
 #, c-format
 msgid "   bitmap: 0x%08x (count: %u):\n"
 msgstr "   Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x (Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº: %u):\n"
 
-#: vms-alpha.c:6619
+#: vms-alpha.c:6799
 #, c-format
 msgid " %08x"
 msgstr " %08x"
 
-#: vms-alpha.c:6645
+#: vms-alpha.c:6825
 #, c-format
 msgid "  image %u (%u entries)\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²)\n"
 
-#: vms-alpha.c:6651
+#: vms-alpha.c:6831
 #, c-format
 msgid "   offset: 0x%08x, val: 0x%08x\n"
 msgstr "   Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿: 0x%08x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: 0x%08x\n"
 
-#: vms-alpha.c:6673
+#: vms-alpha.c:6853
 #, c-format
 msgid "  image %u (%u entries), offsets:\n"
 msgstr "  Ð¾Ð±Ñ€Ð°Ð· %u (%u Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²), Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¸:\n"
 
-#: vms-alpha.c:6680
+#: vms-alpha.c:6860
 #, c-format
 msgid " 0x%08x"
 msgstr " 0x%08x"
 
 #. 64 bits.
-#: vms-alpha.c:6802
+#: vms-alpha.c:6982
 #, c-format
 msgid "64 bits *unhandled*\n"
 msgstr "64 Ð±Ñ–Ñ‚Ð¸ *Ð½Ðµ Ð¾Ð±Ñ€Ð¾Ð±Ð»Ñ�Ñ”Ñ‚ÑŒÑ�Ñ�*\n"
 
-#: vms-alpha.c:6807
+#: vms-alpha.c:6987
 #, 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:6998
 #, c-format
 msgid "non-contiguous array of %s\n"
 msgstr "Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð¼Ð°Ñ�Ð¸Ð² %s\n"
 
-#: vms-alpha.c:6823
+#: vms-alpha.c:7003
 #, 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:7008
 #, c-format
 msgid "arsize: %u, a0: 0x%08x\n"
 msgstr "arsize: %u, a0: 0x%08x\n"
 
-#: vms-alpha.c:6832
+#: vms-alpha.c:7012
 #, c-format
 msgid "Strides:\n"
 msgstr "ÐšÑ€Ð¾ÐºÐ¸:\n"
 
-#: vms-alpha.c:6842
+#: vms-alpha.c:7022
 #, c-format
 msgid "Bounds:\n"
 msgstr "ÐœÐµÐ¶Ñ–:\n"
 
-#: vms-alpha.c:6848
+#: vms-alpha.c:7028
 #, c-format
 msgid "[%u]: Lower: %u, upper: %u\n"
 msgstr "[%u]: Ð½Ð¸Ð¶Ð½Ñ�: %u, Ð²ÐµÑ€Ñ…Ð½Ñ�: %u\n"
 
-#: vms-alpha.c:6860
+#: vms-alpha.c:7040
 #, c-format
 msgid "unaligned bit-string of %s\n"
 msgstr "Ð½ÐµÐ²Ð¸Ñ€Ñ–Ð²Ð½Ñ�Ð½Ð¸Ð¹ Ð±Ñ–Ñ‚Ð¾Ð²Ð¸Ð¹ Ñ€Ñ�Ð´Ð¾Ðº %s\n"
 
-#: vms-alpha.c:6865
+#: vms-alpha.c:7045
 #, c-format
 msgid "base: %u, pos: %u\n"
 msgstr "Ð¾Ñ�Ð½Ð¾Ð²Ð°: %u, Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ�: %u\n"
 
-#: vms-alpha.c:6886
+#: vms-alpha.c:7066
 #, c-format
 msgid "vflags: 0x%02x, value: 0x%08x "
 msgstr "vflags: 0x%02x, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: 0x%08x "
 
-#: vms-alpha.c:6892
+#: vms-alpha.c:7072
 #, c-format
 msgid "(no value)\n"
 msgstr "(Ð½ÐµÐ¼Ð° Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6895
+#: vms-alpha.c:7075
 #, c-format
 msgid "(not active)\n"
 msgstr "(Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ðµ)\n"
 
-#: vms-alpha.c:6898
+#: vms-alpha.c:7078
 #, c-format
 msgid "(not allocated)\n"
 msgstr "(Ð½Ðµ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð¾)\n"
 
-#: vms-alpha.c:6901
+#: vms-alpha.c:7081
 #, c-format
 msgid "(descriptor)\n"
 msgstr "(Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€)\n"
 
-#: vms-alpha.c:6905
+#: vms-alpha.c:7085
 #, c-format
 msgid "(trailing value)\n"
 msgstr "(Ñ…Ð²Ð¾Ñ�Ñ‚Ð¾Ð²Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�)\n"
 
-#: vms-alpha.c:6908
+#: vms-alpha.c:7088
 #, c-format
 msgid "(value spec follows)\n"
 msgstr "(Ð´Ð°Ð»Ñ– Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ)\n"
 
-#: vms-alpha.c:6911
+#: vms-alpha.c:7091
 #, c-format
 msgid "(at bit offset %u)\n"
 msgstr "(Ð·Ð° Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿Ð¾Ð¼ Ñƒ Ð±Ñ–Ñ‚Ð°Ñ… %u)\n"
 
-#: vms-alpha.c:6915
+#: vms-alpha.c:7095
 #, c-format
 msgid "(reg: %u, disp: %u, indir: %u, kind: "
 msgstr "(Ñ€ÐµÐ³: %u, disp: %u, indir: %u, Ñ‚Ð¸Ð¿: "
 
-#: vms-alpha.c:6922
+#: vms-alpha.c:7102
 msgid "literal"
 msgstr "Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»"
 
-#: vms-alpha.c:6925
+#: vms-alpha.c:7105
 msgid "address"
 msgstr "Ð°Ð´Ñ€ÐµÑ�Ð°"
 
-#: vms-alpha.c:6928
+#: vms-alpha.c:7108
 msgid "desc"
 msgstr "Ð´ÐµÑ�Ðº"
 
-#: vms-alpha.c:6931
+#: vms-alpha.c:7111
 msgid "reg"
 msgstr "Ñ€ÐµÐ³"
 
-#: vms-alpha.c:6948
+#: vms-alpha.c:7128
 #, c-format
 msgid "len: %2u, kind: %2u "
 msgstr "Ð´Ð¾Ð²Ð¶.: %2u, Ñ‚Ð¸Ð¿: %2u "
 
-#: vms-alpha.c:6954
+#: vms-alpha.c:7134
 #, c-format
 msgid "atomic, type=0x%02x %s\n"
 msgstr "Ð°Ñ‚Ð¾Ð¼Ð°Ñ€Ð½Ð¸Ð¹, Ñ‚Ð¸Ð¿=0x%02x %s\n"
 
-#: vms-alpha.c:6958
+#: vms-alpha.c:7138
 #, c-format
 msgid "indirect, defined at 0x%08x\n"
 msgstr "Ð¾Ð¿Ð¾Ñ�ÐµÑ€ÐµÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹, Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñ‚ÑƒÑ‚: 0x%08x\n"
 
-#: vms-alpha.c:6962
+#: vms-alpha.c:7142
 #, c-format
 msgid "typed pointer\n"
 msgstr "Ñ‚Ð¸Ð¿Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº\n"
 
-#: vms-alpha.c:6966
+#: vms-alpha.c:7146
 #, c-format
 msgid "pointer\n"
 msgstr "Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸Ðº\n"
 
-#: vms-alpha.c:6974
+#: vms-alpha.c:7154
 #, c-format
 msgid "array, dim: %u, bitmap: "
 msgstr "Ð¼Ð°Ñ�Ð¸Ð², Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð½Ñ–Ñ�Ñ‚ÑŒ: %u, Ð±Ñ–Ñ‚Ð¾Ð²Ð° ÐºÐ°Ñ€Ñ‚Ð°: "
 
-#: vms-alpha.c:6981
+#: vms-alpha.c:7161
 #, c-format
 msgid "array descriptor:\n"
 msgstr "Ð´ÐµÑ�ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ñ€ Ð¼Ð°Ñ�Ð¸Ð²Ñƒ:\n"
 
-#: vms-alpha.c:6988
+#: vms-alpha.c:7168
 #, c-format
 msgid "type spec for element:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ñ‚Ð¸Ð¿Ñƒ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°:\n"
 
-#: vms-alpha.c:6990
+#: vms-alpha.c:7170
 #, c-format
 msgid "type spec for subscript %u:\n"
 msgstr "Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ñ‚Ð¸Ð¿Ñƒ Ð´Ð»Ñ� Ñ�Ð¿Ð¸Ñ�ÐºÑƒ Ñ–Ð½Ð´ÐµÐºÑ�Ñ–Ð² %u:\n"
 
-#: vms-alpha.c:7008
+#: vms-alpha.c:7188
 #, c-format
 msgid "Debug symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ�:\n"
 
-#: vms-alpha.c:7019
+#: vms-alpha.c:7199
 #, c-format
 msgid "cannot read DST header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DST\n"
 
-#: vms-alpha.c:7025
+#: vms-alpha.c:7205
 #, c-format
 msgid " type: %3u, len: %3u (at 0x%08x): "
 msgstr " Ñ‚Ð¸Ð¿: %3u, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %3u (Ð·Ð° 0x%08x): "
 
-#: vms-alpha.c:7039
+#: vms-alpha.c:7219
 #, c-format
 msgid "cannot read DST symbol\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð» DST\n"
 
-#: vms-alpha.c:7082
+#: vms-alpha.c:7262
 #, c-format
 msgid "standard data: %s\n"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ– Ð´Ð°Ð½Ñ–: %s\n"
 
-#: vms-alpha.c:7085 vms-alpha.c:7173
+#: vms-alpha.c:7265 vms-alpha.c:7353
 #, c-format
 msgid "    name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7092
+#: vms-alpha.c:7272
 #, c-format
 msgid "modbeg\n"
 msgstr "modbeg\n"
 
-#: vms-alpha.c:7094
+#: vms-alpha.c:7274
 #, 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:7280 vms-alpha.c:7554
 #, c-format
 msgid "   module name: %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ð¼Ð¾Ð´ÑƒÐ»Ñ�: %.*s\n"
 
-#: vms-alpha.c:7103
+#: vms-alpha.c:7283
 #, c-format
 msgid "   compiler   : %.*s\n"
 msgstr "   ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñ�Ñ‚Ð¾Ñ€ : %.*s\n"
 
-#: vms-alpha.c:7108
+#: vms-alpha.c:7288
 #, c-format
 msgid "modend\n"
 msgstr "modend\n"
 
-#: vms-alpha.c:7115
+#: vms-alpha.c:7295
 msgid "rtnbeg\n"
 msgstr "rtnbeg\n"
 
-#: vms-alpha.c:7117
+#: vms-alpha.c:7297
 #, 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:7302
 #, c-format
 msgid "    routine name: %.*s\n"
 msgstr "    Ð½Ð°Ð·Ð²Ð° Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸: %.*s\n"
 
-#: vms-alpha.c:7130
+#: vms-alpha.c:7310
 #, c-format
 msgid "rtnend: size 0x%08x\n"
 msgstr "rtnend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ 0x%08x\n"
 
-#: vms-alpha.c:7138
+#: vms-alpha.c:7318
 #, c-format
 msgid "prolog: bkpt address 0x%08x\n"
 msgstr "Ð¿Ñ€Ð¾Ð»Ð¾Ð³: Ð°Ð´Ñ€ÐµÑ�Ð° bkpt 0x%08x\n"
 
-#: vms-alpha.c:7147
+#: vms-alpha.c:7327
 #, c-format
 msgid "epilog: flags: %u, count: %u\n"
 msgstr "ÐµÐ¿Ñ–Ð»Ð¾Ð³: Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %u, Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸Ðº: %u\n"
 
-#: vms-alpha.c:7157
+#: vms-alpha.c:7337
 #, c-format
 msgid "blkbeg: address: 0x%08x, name: %.*s\n"
 msgstr "blkbeg: Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7166
+#: vms-alpha.c:7346
 #, c-format
 msgid "blkend: size: 0x%08x\n"
 msgstr "blkend: Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: 0x%08x\n"
 
-#: vms-alpha.c:7172
+#: vms-alpha.c:7352
 #, c-format
 msgid "typspec (len: %u)\n"
 msgstr "typspec (Ð´Ð¾Ð²Ð¶.: %u)\n"
 
-#: vms-alpha.c:7179
+#: vms-alpha.c:7359
 #, c-format
 msgid "septyp, name: %.*s\n"
 msgstr "septyp, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7188
+#: vms-alpha.c:7368
 #, c-format
 msgid "recbeg: name: %.*s\n"
 msgstr "recbeg: Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7190
+#: vms-alpha.c:7370
 #, c-format
 msgid "    len: %u bits\n"
 msgstr "    Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u Ð±Ñ–Ñ‚Ñ–Ð²\n"
 
-#: vms-alpha.c:7195
+#: vms-alpha.c:7375
 #, c-format
 msgid "recend\n"
 msgstr "recend\n"
 
-#: vms-alpha.c:7199
+#: vms-alpha.c:7379
 #, c-format
 msgid "enumbeg, len: %u, name: %.*s\n"
 msgstr "enumbeg, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7203
+#: vms-alpha.c:7383
 #, c-format
 msgid "enumelt, name: %.*s\n"
 msgstr "enumelt, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7207
+#: vms-alpha.c:7387
 #, c-format
 msgid "enumend\n"
 msgstr "enumend\n"
 
-#: vms-alpha.c:7212
+#: vms-alpha.c:7392
 #, c-format
 msgid "label, name: %.*s\n"
 msgstr "Ð¼Ñ–Ñ‚ÐºÐ°, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7214
+#: vms-alpha.c:7394
 #, c-format
 msgid "    address: 0x%08x\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x\n"
 
-#: vms-alpha.c:7224
+#: vms-alpha.c:7404
 #, c-format
 msgid "discontiguous range (nbr: %u)\n"
 msgstr "Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð½Ð¸Ð¹ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ (nbr: %u)\n"
 
-#: vms-alpha.c:7227
+#: vms-alpha.c:7407
 #, c-format
 msgid "    address: 0x%08x, size: %u\n"
 msgstr "    Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u\n"
 
-#: vms-alpha.c:7237
+#: vms-alpha.c:7417
 #, c-format
 msgid "line num  (len: %u)\n"
 msgstr "Ð½Ð¾Ð¼ÐµÑ€ Ñ€Ñ�Ð´ÐºÐ°  (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7254
+#: vms-alpha.c:7434
 #, c-format
 msgid "delta_pc_w %u\n"
 msgstr "delta_pc_w %u\n"
 
-#: vms-alpha.c:7261
+#: vms-alpha.c:7441
 #, c-format
 msgid "incr_linum(b): +%u\n"
 msgstr "incr_linum(b): +%u\n"
 
-#: vms-alpha.c:7267
+#: vms-alpha.c:7447
 #, c-format
 msgid "incr_linum_w: +%u\n"
 msgstr "incr_linum_w: +%u\n"
 
-#: vms-alpha.c:7273
+#: vms-alpha.c:7453
 #, c-format
 msgid "incr_linum_l: +%u\n"
 msgstr "incr_linum_l: +%u\n"
 
-#: vms-alpha.c:7279
+#: vms-alpha.c:7459
 #, c-format
 msgid "set_line_num(w) %u\n"
 msgstr "set_line_num(w) %u\n"
 
-#: vms-alpha.c:7284
+#: vms-alpha.c:7464
 #, c-format
 msgid "set_line_num_b %u\n"
 msgstr "set_line_num_b %u\n"
 
-#: vms-alpha.c:7289
+#: vms-alpha.c:7469
 #, c-format
 msgid "set_line_num_l %u\n"
 msgstr "set_line_num_l %u\n"
 
-#: vms-alpha.c:7294
+#: vms-alpha.c:7474
 #, c-format
 msgid "set_abs_pc: 0x%08x\n"
 msgstr "set_abs_pc: 0x%08x\n"
 
-#: vms-alpha.c:7298
+#: vms-alpha.c:7478
 #, c-format
 msgid "delta_pc_l: +0x%08x\n"
 msgstr "delta_pc_l: +0x%08x\n"
 
-#: vms-alpha.c:7303
+#: vms-alpha.c:7483
 #, c-format
 msgid "term(b): 0x%02x"
 msgstr "term(b): 0x%02x"
 
-#: vms-alpha.c:7305
+#: vms-alpha.c:7485
 #, c-format
 msgid "        pc: 0x%08x\n"
 msgstr "        pc: 0x%08x\n"
 
-#: vms-alpha.c:7310
+#: vms-alpha.c:7490
 #, c-format
 msgid "term_w: 0x%04x"
 msgstr "term_w: 0x%04x"
 
-#: vms-alpha.c:7312
+#: vms-alpha.c:7492
 #, c-format
 msgid "    pc: 0x%08x\n"
 msgstr "    pc: 0x%08x\n"
 
-#: vms-alpha.c:7318
+#: vms-alpha.c:7498
 #, c-format
 msgid "delta pc +%-4d"
 msgstr "Ð¿Ñ€Ð¸Ñ€Ñ–Ñ�Ñ‚ pc +%-4d"
 
-#: vms-alpha.c:7322
+#: vms-alpha.c:7502
 #, c-format
 msgid "    pc: 0x%08x line: %5u\n"
 msgstr "    pc: 0x%08x Ñ€Ñ�Ð´Ð¾Ðº: %5u\n"
 
-#: vms-alpha.c:7327
+#: vms-alpha.c:7507
 #, c-format
 msgid "    *unhandled* cmd %u\n"
 msgstr "    *Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð°* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7342
+#: vms-alpha.c:7522
 #, c-format
 msgid "source (len: %u)\n"
 msgstr "Ð´Ð¶ÐµÑ€ÐµÐ»Ð¾ (Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u)\n"
 
-#: vms-alpha.c:7357
+#: vms-alpha.c:7537
 #, c-format
 msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
 msgstr "   declfile: Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u, Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: %u, Ñ–Ð´. Ñ„Ð°Ð¹Ð»Ð°: %u\n"
 
-#: vms-alpha.c:7362
+#: vms-alpha.c:7542
 #, 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:7551
 #, c-format
 msgid "   filename   : %.*s\n"
 msgstr "   Ð½Ð°Ð·Ð²Ð° Ñ„Ð°Ð¹Ð»Ð°: %.*s\n"
 
-#: vms-alpha.c:7380
+#: vms-alpha.c:7560
 #, c-format
 msgid "   setfile %u\n"
 msgstr "   setfile %u\n"
 
-#: vms-alpha.c:7385 vms-alpha.c:7390
+#: vms-alpha.c:7565 vms-alpha.c:7570
 #, c-format
 msgid "   setrec %u\n"
 msgstr "   setrec %u\n"
 
-#: vms-alpha.c:7395 vms-alpha.c:7400
+#: vms-alpha.c:7575 vms-alpha.c:7580
 #, c-format
 msgid "   setlnum %u\n"
 msgstr "   setlnum %u\n"
 
-#: vms-alpha.c:7405 vms-alpha.c:7410
+#: vms-alpha.c:7585 vms-alpha.c:7590
 #, c-format
 msgid "   deflines %u\n"
 msgstr "   deflines %u\n"
 
-#: vms-alpha.c:7414
+#: vms-alpha.c:7594
 #, c-format
 msgid "   formfeed\n"
 msgstr "   formfeed\n"
 
-#: vms-alpha.c:7418
+#: vms-alpha.c:7598
 #, c-format
 msgid "   *unhandled* cmd %u\n"
 msgstr "   *Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð°* ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %u\n"
 
-#: vms-alpha.c:7430
+#: vms-alpha.c:7610
 #, c-format
 msgid "*unhandled* dst type %u\n"
 msgstr "*Ð½ÐµÐ¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ð¹* Ñ‚Ð¸Ð¿ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�, %u\n"
 
-#: vms-alpha.c:7462
+#: vms-alpha.c:7642
 #, c-format
 msgid "cannot read EIHD\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHD\n"
 
-#: vms-alpha.c:7466
+#: vms-alpha.c:7646
 #, c-format
 msgid "EIHD: (size: %u, nbr blocks: %u)\n"
 msgstr "EIHD: (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u, ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð±Ð»Ð¾ÐºÑ–Ð²: %u)\n"
 
-#: vms-alpha.c:7470
+#: vms-alpha.c:7650
 #, c-format
 msgid " majorid: %u, minorid: %u\n"
 msgstr " majorid: %u, minorid: %u\n"
 
-#: vms-alpha.c:7478
+#: vms-alpha.c:7658
 msgid "executable"
 msgstr "Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹"
 
-#: vms-alpha.c:7481
+#: vms-alpha.c:7661
 msgid "linkable image"
 msgstr "ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·"
 
-#: vms-alpha.c:7488
+#: vms-alpha.c:7668
 #, c-format
 msgid " image type: %u (%s)"
 msgstr " Ñ‚Ð¸Ð¿ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %u (%s)"
 
-#: vms-alpha.c:7494
+#: vms-alpha.c:7674
 msgid "native"
 msgstr "Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ð¹"
 
-#: vms-alpha.c:7497
+#: vms-alpha.c:7677
 msgid "CLI"
 msgstr "CLI"
 
-#: vms-alpha.c:7504
+#: vms-alpha.c:7684
 #, c-format
 msgid ", subtype: %u (%s)\n"
 msgstr ", Ð¿Ñ–Ð´Ñ‚Ð¸Ð¿: %u (%s)\n"
 
-#: vms-alpha.c:7511
+#: vms-alpha.c:7691
 #, 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:7695
 #, c-format
 msgid " fixup info rva: "
 msgstr " Ð´Ð°Ð½Ñ– Ñ‰Ð¾Ð´Ð¾ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ rva: "
 
-#: vms-alpha.c:7517
+#: vms-alpha.c:7697
 #, c-format
 msgid ", symbol vector rva: "
 msgstr ", Ð²ÐµÐºÑ‚Ð¾Ñ€ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² rva: "
 
-#: vms-alpha.c:7520
+#: vms-alpha.c:7700
 #, c-format
 msgid ""
 "\n"
@@ -7255,474 +7708,474 @@ msgstr ""
 "\n"
 " Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¼Ð°Ñ�Ð¸Ð²Ñƒ Ð²ÐµÑ€Ñ�Ñ–Ñ—: %u\n"
 
-#: vms-alpha.c:7525
+#: vms-alpha.c:7705
 #, 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:7711
 #, c-format
 msgid " linker flags: %08x:"
 msgstr " Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°: %08x:"
 
-#: vms-alpha.c:7562
+#: vms-alpha.c:7742
 #, 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:7748
 #, c-format
 msgid " BPAGE: %u"
 msgstr " BPAGE: %u"
 
-#: vms-alpha.c:7575
+#: vms-alpha.c:7755
 #, 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:7758
 #, c-format
 msgid ", alias: %u\n"
 msgstr ", Ð¿Ñ�ÐµÐ²Ð´Ð¾Ð½Ñ–Ð¼: %u\n"
 
-#: vms-alpha.c:7586
+#: vms-alpha.c:7766
 #, c-format
 msgid "system version array information:\n"
 msgstr "Ð¼Ð°Ñ�Ð¸Ð² Ð´Ð°Ð½Ð¸Ñ… Ñ‰Ð¾Ð´Ð¾ Ð²ÐµÑ€Ñ�Ñ–Ñ— Ñ�Ð¸Ñ�Ñ‚ÐµÐ¼Ð¸:\n"
 
-#: vms-alpha.c:7590
+#: vms-alpha.c:7770
 #, c-format
 msgid "cannot read EIHVN header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº EIHVN\n"
 
-#: vms-alpha.c:7600
+#: vms-alpha.c:7780
 #, c-format
 msgid "cannot read EIHVN version\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð²ÐµÑ€Ñ�Ñ–ÑŽ EIHVN\n"
 
-#: vms-alpha.c:7603
+#: vms-alpha.c:7783
 #, c-format
 msgid "   %02u "
 msgstr "   %02u "
 
-#: vms-alpha.c:7607
+#: vms-alpha.c:7787
 msgid "BASE_IMAGE       "
 msgstr "BASE_IMAGE       "
 
-#: vms-alpha.c:7610
+#: vms-alpha.c:7790
 msgid "MEMORY_MANAGEMENT"
 msgstr "MEMORY_MANAGEMENT"
 
-#: vms-alpha.c:7613
+#: vms-alpha.c:7793
 msgid "IO               "
 msgstr "IO               "
 
-#: vms-alpha.c:7616
+#: vms-alpha.c:7796
 msgid "FILES_VOLUMES    "
 msgstr "FILES_VOLUMES    "
 
-#: vms-alpha.c:7619
+#: vms-alpha.c:7799
 msgid "PROCESS_SCHED    "
 msgstr "PROCESS_SCHED    "
 
-#: vms-alpha.c:7622
+#: vms-alpha.c:7802
 msgid "SYSGEN           "
 msgstr "SYSGEN           "
 
-#: vms-alpha.c:7625
+#: vms-alpha.c:7805
 msgid "CLUSTERS_LOCKMGR "
 msgstr "CLUSTERS_LOCKMGR "
 
-#: vms-alpha.c:7628
+#: vms-alpha.c:7808
 msgid "LOGICAL_NAMES    "
 msgstr "LOGICAL_NAMES    "
 
-#: vms-alpha.c:7631
+#: vms-alpha.c:7811
 msgid "SECURITY         "
 msgstr "SECURITY         "
 
-#: vms-alpha.c:7634
+#: vms-alpha.c:7814
 msgid "IMAGE_ACTIVATOR  "
 msgstr "IMAGE_ACTIVATOR  "
 
-#: vms-alpha.c:7637
+#: vms-alpha.c:7817
 msgid "NETWORKS         "
 msgstr "NETWORKS         "
 
-#: vms-alpha.c:7640
+#: vms-alpha.c:7820
 msgid "COUNTERS         "
 msgstr "COUNTERS         "
 
-#: vms-alpha.c:7643
+#: vms-alpha.c:7823
 msgid "STABLE           "
 msgstr "STABLE           "
 
-#: vms-alpha.c:7646
+#: vms-alpha.c:7826
 msgid "MISC             "
 msgstr "MISC             "
 
-#: vms-alpha.c:7649
+#: vms-alpha.c:7829
 msgid "CPU              "
 msgstr "CPU              "
 
-#: vms-alpha.c:7652
+#: vms-alpha.c:7832
 msgid "VOLATILE         "
 msgstr "VOLATILE         "
 
-#: vms-alpha.c:7655
+#: vms-alpha.c:7835
 msgid "SHELL            "
 msgstr "SHELL            "
 
-#: vms-alpha.c:7658
+#: vms-alpha.c:7838
 msgid "POSIX            "
 msgstr "POSIX            "
 
-#: vms-alpha.c:7661
+#: vms-alpha.c:7841
 msgid "MULTI_PROCESSING "
 msgstr "MULTI_PROCESSING "
 
-#: vms-alpha.c:7664
+#: vms-alpha.c:7844
 msgid "GALAXY           "
 msgstr "GALAXY           "
 
-#: vms-alpha.c:7667
+#: vms-alpha.c:7847
 msgid "*unknown*        "
 msgstr "*Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾*       "
 
-#: vms-alpha.c:7683 vms-alpha.c:7958
+#: vms-alpha.c:7863 vms-alpha.c:8137
 #, c-format
 msgid "cannot read EIHA\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHA\n"
 
-#: vms-alpha.c:7686
+#: vms-alpha.c:7866
 #, c-format
 msgid "Image activation:  (size=%u)\n"
 msgstr "Ð�ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ:  (Ñ€Ð¾Ð·Ð¼Ñ–Ñ€=%u)\n"
 
-#: vms-alpha.c:7689
+#: vms-alpha.c:7869
 #, c-format
 msgid " First address : 0x%08x 0x%08x\n"
 msgstr " ÐŸÐµÑ€ÑˆÐ° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7693
+#: vms-alpha.c:7873
 #, c-format
 msgid " Second address: 0x%08x 0x%08x\n"
 msgstr " Ð”Ñ€ÑƒÐ³Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7697
+#: vms-alpha.c:7877
 #, c-format
 msgid " Third address : 0x%08x 0x%08x\n"
 msgstr " Ð¢Ñ€ÐµÑ‚Ñ� Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7701
+#: vms-alpha.c:7881
 #, c-format
 msgid " Fourth address: 0x%08x 0x%08x\n"
 msgstr " Ð§ÐµÑ‚Ð²ÐµÑ€Ñ‚Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7705
+#: vms-alpha.c:7885
 #, c-format
 msgid " Shared image  : 0x%08x 0x%08x\n"
 msgstr " Ð¡Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±Ñ€Ð°Ð·: 0x%08x 0x%08x\n"
 
-#: vms-alpha.c:7716
+#: vms-alpha.c:7896
 #, c-format
 msgid "cannot read EIHI\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHI\n"
 
-#: vms-alpha.c:7720
+#: vms-alpha.c:7900
 #, c-format
 msgid "Image identification: (major: %u, minor: %u)\n"
 msgstr "Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ñ�Ñ‚Ð°Ñ€ÑˆÐ¸Ð¹: %u, Ð¼Ð¾Ð»Ð¾Ð´ÑˆÐ¸Ð¹: %u)\n"
 
-#: vms-alpha.c:7723
+#: vms-alpha.c:7903
 #, c-format
 msgid " image name       : %.*s\n"
 msgstr " Ð½Ð°Ð·Ð²Ð° Ð¾Ð±Ñ€Ð°Ð·Ñƒ     : %.*s\n"
 
-#: vms-alpha.c:7725
+#: vms-alpha.c:7905
 #, c-format
 msgid " link time        : %s\n"
 msgstr " Ñ‡Ð°Ñ� ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� : %s\n"
 
-#: vms-alpha.c:7727
+#: vms-alpha.c:7907
 #, c-format
 msgid " image ident      : %.*s\n"
 msgstr " Ñ–Ð´. Ð¾Ð±Ñ€Ð°Ð·Ñƒ         : %.*s\n"
 
-#: vms-alpha.c:7729
+#: vms-alpha.c:7909
 #, c-format
 msgid " linker ident     : %.*s\n"
 msgstr " Ñ–Ð´. ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ°: %.*s\n"
 
-#: vms-alpha.c:7731
+#: vms-alpha.c:7911
 #, c-format
 msgid " image build ident: %.*s\n"
 msgstr " Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ� Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %.*s\n"
 
-#: vms-alpha.c:7741
+#: vms-alpha.c:7921
 #, c-format
 msgid "cannot read EIHS\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHS\n"
 
-#: vms-alpha.c:7745
+#: vms-alpha.c:7925
 #, c-format
 msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð² Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¾Ð±Ñ€Ð°Ð·Ñƒ (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u)\n"
 
-#: vms-alpha.c:7751
+#: vms-alpha.c:7931
 #, 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:7936
 #, c-format
 msgid " global symbol table: vbn: %u, records: %u\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²: vbn: %u, Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²: %u\n"
 
-#: vms-alpha.c:7761
+#: vms-alpha.c:7941
 #, c-format
 msgid " debug module table : vbn: %u, size: %u\n"
 msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²: vbn: %u, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u\n"
 
-#: vms-alpha.c:7774
+#: vms-alpha.c:7954
 #, c-format
 msgid "cannot read EISD\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EISD\n"
 
-#: vms-alpha.c:7785
+#: vms-alpha.c:7965
 #, 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:7973
 #, 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:7978
 #, c-format
 msgid " flags: 0x%04x"
 msgstr " Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%04x"
 
-#: vms-alpha.c:7836
+#: vms-alpha.c:8016
 #, 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:8022
 msgid "NORMAL"
 msgstr "NORMAL"
 
-#: vms-alpha.c:7845
+#: vms-alpha.c:8025
 msgid "SHRFXD"
 msgstr "SHRFXD"
 
-#: vms-alpha.c:7848
+#: vms-alpha.c:8028
 msgid "PRVFXD"
 msgstr "PRVFXD"
 
-#: vms-alpha.c:7851
+#: vms-alpha.c:8031
 msgid "SHRPIC"
 msgstr "SHRPIC"
 
-#: vms-alpha.c:7854
+#: vms-alpha.c:8034
 msgid "PRVPIC"
 msgstr "PRVPIC"
 
-#: vms-alpha.c:7857
+#: vms-alpha.c:8037
 msgid "USRSTACK"
 msgstr "USRSTACK"
 
-#: vms-alpha.c:7863
+#: vms-alpha.c:8043
 msgid ")\n"
 msgstr ")\n"
 
-#: vms-alpha.c:7866
+#: vms-alpha.c:8046
 #, c-format
 msgid " ident: 0x%08x, name: %.*s\n"
 msgstr " Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€: 0x%08x, Ð½Ð°Ð·Ð²Ð°: %.*s\n"
 
-#: vms-alpha.c:7876
+#: vms-alpha.c:8056
 #, c-format
 msgid "cannot read DMT\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT\n"
 
-#: vms-alpha.c:7880
+#: vms-alpha.c:8060
 #, c-format
 msgid "Debug module table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:\n"
 
-#: vms-alpha.c:7889
+#: vms-alpha.c:8069
 #, c-format
 msgid "cannot read DMT header\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº DMT\n"
 
-#: vms-alpha.c:7895
+#: vms-alpha.c:8075
 #, 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:8085
 #, c-format
 msgid "cannot read DMT psect\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ psect DMT\n"
 
-#: vms-alpha.c:7909
+#: vms-alpha.c:8089
 #, c-format
 msgid "  psect start: 0x%08x, length: %u\n"
 msgstr "  Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¾Ðº psect: 0x%08x, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð°: %u\n"
 
-#: vms-alpha.c:7922
+#: vms-alpha.c:8102
 #, c-format
 msgid "cannot read DST\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DST\n"
 
-#: vms-alpha.c:7932
+#: vms-alpha.c:8112
 #, c-format
 msgid "cannot read GST\n"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ GST\n"
 
-#: vms-alpha.c:7936
+#: vms-alpha.c:8116
 #, c-format
 msgid "Global symbol table:\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñ–Ð²:\n"
 
-#: vms-alpha.c:7965
+#: vms-alpha.c:8143
 #, c-format
 msgid "Image activator fixup: (major: %u, minor: %u)\n"
 msgstr "ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ° Ð°Ð´Ñ€ÐµÑ�Ð¸ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°: %u, Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�: %u)\n"
 
-#: vms-alpha.c:7969
+#: vms-alpha.c:8147
 #, c-format
 msgid "  iaflink : 0x%08x %08x\n"
 msgstr "  iaflink : 0x%08x %08x\n"
 
-#: vms-alpha.c:7973
+#: vms-alpha.c:8151
 #, c-format
 msgid "  fixuplnk: 0x%08x %08x\n"
 msgstr "  fixuplnk: 0x%08x %08x\n"
 
-#: vms-alpha.c:7976
+#: vms-alpha.c:8154
 #, c-format
 msgid "  size : %u\n"
 msgstr "  Ñ€Ð¾Ð·Ð¼Ñ–Ñ€: %u\n"
 
-#: vms-alpha.c:7978
+#: vms-alpha.c:8156
 #, c-format
 msgid "  flags: 0x%08x\n"
 msgstr "  Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–: 0x%08x\n"
 
-#: vms-alpha.c:7983
+#: vms-alpha.c:8161
 #, c-format
 msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 msgstr "  qrelfixoff: %5u, lrelfixoff: %5u\n"
 
-#: vms-alpha.c:7988
+#: vms-alpha.c:8166
 #, c-format
 msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
 msgstr "  qdotadroff: %5u, ldotadroff: %5u\n"
 
-#: vms-alpha.c:7993
+#: vms-alpha.c:8171
 #, c-format
 msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
 msgstr "  codeadroff: %5u, lpfixoff  : %5u\n"
 
-#: vms-alpha.c:7996
+#: vms-alpha.c:8174
 #, c-format
 msgid "  chgprtoff : %5u\n"
 msgstr "  chgprtoff : %5u\n"
 
-#: vms-alpha.c:8000
+#: vms-alpha.c:8178
 #, c-format
 msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
 msgstr "  shlstoff  : %5u, shrimgcnt : %5u\n"
 
-#: vms-alpha.c:8003
+#: vms-alpha.c:8181
 #, c-format
 msgid "  shlextra  : %5u, permctx   : %5u\n"
 msgstr "  shlextra  : %5u, permctx   : %5u\n"
 
-#: vms-alpha.c:8006
+#: vms-alpha.c:8184
 #, c-format
 msgid "  base_va : 0x%08x\n"
 msgstr "  base_va : 0x%08x\n"
 
-#: vms-alpha.c:8008
+#: vms-alpha.c:8186
 #, c-format
 msgid "  lppsbfixoff: %5u\n"
 msgstr "  lppsbfixoff: %5u\n"
 
-#: vms-alpha.c:8016
+#: vms-alpha.c:8194
 #, c-format
 msgid " Shareable images:\n"
 msgstr " ÐžÐ±Ñ€Ð°Ð·Ð¸ Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�:\n"
 
-#: vms-alpha.c:8021
+#: vms-alpha.c:8199
 #, 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:8206
 #, c-format
 msgid " quad-word relocation fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ñ‡Ð¾Ñ‚Ð¸Ñ€Ð¸ Ñ�Ð»Ð¾Ð²Ð°:\n"
 
-#: vms-alpha.c:8033
+#: vms-alpha.c:8211
 #, c-format
 msgid " long-word relocation fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½ÑŒ Ñƒ Ð´Ð¾Ð²Ð³Ðµ Ñ�Ð»Ð¾Ð²Ð¾:\n"
 
-#: vms-alpha.c:8038
+#: vms-alpha.c:8216
 #, c-format
 msgid " quad-word .address reference fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ .address Ñƒ Ñ‡Ð¾Ñ‚Ð¸Ñ€Ð¸ Ñ�Ð»Ð¾Ð²Ð°:\n"
 
-#: vms-alpha.c:8043
+#: vms-alpha.c:8221
 #, c-format
 msgid " long-word .address reference fixups:\n"
 msgstr " Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ .address Ñƒ Ð´Ð¾Ð²Ð³Ðµ Ñ�Ð»Ð¾Ð²Ð¾:\n"
 
-#: vms-alpha.c:8048
+#: vms-alpha.c:8226
 #, c-format
 msgid " Code Address Reference Fixups:\n"
 msgstr " ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð°Ð´Ñ€ÐµÑ� ÐºÐ¾Ð´Ñƒ:\n"
 
-#: vms-alpha.c:8053
+#: vms-alpha.c:8231
 #, c-format
 msgid " Linkage Pairs Reference Fixups:\n"
 msgstr " ÐŸÑ€Ð¸Ð²â€™Ñ�Ð·ÐºÐ¸ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½ÑŒ Ð½Ð° Ð¿Ð°Ñ€Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ�:\n"
 
-#: vms-alpha.c:8062
+#: vms-alpha.c:8240
 #, c-format
 msgid " Change Protection (%u entries):\n"
 msgstr " Ð—Ð¼Ñ–Ð½Ð° Ð·Ð°Ñ…Ð¸Ñ�Ñ‚Ñƒ (%u Ð·Ð°Ð¿Ð¸Ñ�Ð¸):\n"
 
-#: vms-alpha.c:8068
+#: vms-alpha.c:8246
 #, 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:9123
 msgid "%P: relocatable link is not supported\n"
 msgstr "%P: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ� Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–Ñ�Ñ‚ÑŽ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾\n"
 
-#: vms-alpha.c:8979
+#: vms-alpha.c:9194
 #, 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:1527
 #, 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 Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð¾ Ð´Ð»Ñ� Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— ÐºÑ–Ð»ÑŒÐºÐ¾Ñ�Ñ‚Ñ– Ð±Ð°Ð¹Ñ‚Ñ–Ð²"
 
@@ -7736,172 +8189,214 @@ msgstr "%pB: Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¸Ð¹ Ð¾Ð±â€™Ñ”Ð
 msgid "%pB: dynamic object with no .loader section"
 msgstr "%pB: Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ð¾Ð±â€™Ñ”ÐºÑ‚ Ð±ÐµÐ· Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .loader"
 
-#: xcofflink.c:1413
+#: xcofflink.c:1417
 #, c-format
 msgid "%pB: `%s' has line numbers but no enclosing section"
 msgstr "%pB: Â«%sÂ» Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ð¾Ð¼ÐµÑ€Ð¸ Ñ€Ñ�Ð´ÐºÑ–Ð², Ð°Ð»Ðµ Ð½Ðµ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: xcofflink.c:1466
+#: xcofflink.c:1470
 #, c-format
 msgid "%pB: class %d symbol `%s' has no aux entries"
 msgstr "%pB: ÐºÐ»Ð°Ñ� %d, Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ðµ Ð¼Ð°Ñ” Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð²"
 
-#: xcofflink.c:1489
+#: xcofflink.c:1493
 #, c-format
 msgid "%pB: symbol `%s' has unrecognized csect type %d"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» Â«%sÂ» Ð½Ð°Ð»ÐµÐ¶Ð¸Ñ‚ÑŒ Ð´Ð¾ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð³Ð¾ Ñ‚Ð¸Ð¿Ñƒ csect %d"
 
-#: xcofflink.c:1502
+#: xcofflink.c:1506
 #, 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:1537
 #, c-format
 msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %<PRId64>"
 msgstr "%pB: Ñ�Ð¸Ð¼Ð²Ð¾Ð» XMC_TC0 Â«%sÂ» Ñ” ÐºÐ»Ð°Ñ�Ð¾Ð¼ %d, Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %<PRId64>"
 
-#: xcofflink.c:1680
+#: xcofflink.c:1684
 #, c-format
 msgid "%pB: csect `%s' not in enclosing section"
 msgstr "%pB: csect Â«%sÂ» Ð½Ðµ Ñƒ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–"
 
-#: xcofflink.c:1788
+#: xcofflink.c:1792
 #, c-format
 msgid "%pB: misplaced XTY_LD `%s'"
 msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ðµ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ� XTY_LD Â«%sÂ»"
 
-#: xcofflink.c:2109
+#: xcofflink.c:2113
 #, c-format
 msgid "%pB: reloc %s:%<PRId64> not in csect"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s:%<PRId64> Ð½Ðµ Ñƒ csect"
 
-#: xcofflink.c:3196
+#: xcofflink.c:3199
 #, c-format
 msgid "%s: no such symbol"
 msgstr "%s: Ð½ÐµÐ¼Ð°Ñ” Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ"
 
-#: xcofflink.c:3301
+#: xcofflink.c:3310
 #, c-format
 msgid "warning: attempt to export undefined symbol `%s'"
 msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ñ�Ð¿Ñ€Ð¾Ð±Ð° ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
 
-#: xcofflink.c:3680
+#: xcofflink.c:3689
 msgid "error: undefined symbol __rtinit"
 msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ�Ð¸Ð¼Ð²Ð¾Ð» __rtinit"
 
-#: xcofflink.c:4060
+#: xcofflink.c:4067
 #, c-format
 msgid "%pB: loader reloc in unrecognized section `%s'"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ð½ÐµÑ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð½Ð¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Â«%sÂ»"
 
-#: xcofflink.c:4072
+#: xcofflink.c:4079
 #, c-format
 msgid "%pB: `%s' in loader reloc but not loader sym"
 msgstr "%pB: Â«%sÂ» Ñƒ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ– Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°, Ð°Ð»Ðµ Ð½Ðµ Ñƒ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ð°Ñ… Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ�"
 
-#: xcofflink.c:4089
+#: xcofflink.c:4096
 #, c-format
 msgid "%pB: loader reloc in read-only section %pA"
 msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–, Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð¼Ñƒ Ð»Ð¸ÑˆÐµ Ð´Ð»Ñ� Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ�, %pA"
 
-#: xcofflink.c:5113
+#: xcofflink.c:5124
 #, 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
+#. Not fatal, this callback cannot fail.
+#: elfnn-aarch64.c:2869
+#, c-format
+msgid "unknown attribute for symbol `%s': 0x%02x"
+msgstr "Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¸ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»: 0x%02x"
+
+#: elfnn-aarch64.c:5245
 #, 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:5337
 #, 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:5350
+msgid "%pB: error: erratum 843419 immediate 0x%"
+msgstr "%pB: Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ð»Ñ� Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ», Ñ�ÐºÐ¸Ð¹ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·ÑƒÐ²Ð°Ñ‚Ð¸Ñ�Ñ� Ð·Ð·Ð¾Ð²Ð½Ñ–, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -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: Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ ÑƒÐ¼Ð¾Ð²Ð½Ñƒ Ð³Ñ–Ð»ÐºÑƒ Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
+
+#: elfnn-aarch64.c:5992
 #, 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:6105 elfnn-aarch64.c:6142
+#, c-format
+msgid "%pB: TLS relocation %s against undefined symbol `%s'"
+msgstr "%pB: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� TLS %s Ñ‰Ð¾Ð´Ð¾ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñ�Ð»Ð°Ð±ÐºÐ¾Ð³Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»"
+
+#: elfnn-aarch64.c:7127
 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: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 "Ð¾Ð´Ð½Ñ–Ñ”ÑŽ Ñ–Ð· Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ñ… Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½ Ñ†Ñ–Ñ”Ñ— Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Ñ” Ñ‚Ðµ, Ñ‰Ð¾ Ð¿Ð¾Ñ�Ð¸Ð»Ð°Ð½Ð½Ñ� Ð½Ð° Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñƒ ÐºÐ¾Ð´Ñ– Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ðº, Ð½Ð°Ñ‡Ðµ Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ð¼Ð°Ñ” Ð±Ñ–Ð»ÑŒÑˆÐµ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�, Ð½Ñ–Ð¶ Ð±ÑƒÐ»Ð¾ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð¾ Ñ‚Ð°Ð¼, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð±ÑƒÐ»Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: /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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %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-riscv.c:221 elfnn-riscv.c:256
 #, c-format
 msgid "%pB: warning: RVE PLT generation not supported"
 msgstr "%pB: Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ¸ Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� PLT RVE Ð½Ðµ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311
+#: elfnn-riscv.c:2517
+#, c-format
+msgid "%pcrel_lo section symbol with an addend"
+msgstr "Ñ�Ð¸Ð¼Ð²Ð¾Ð» Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pcrel_lo Ñ–Ð· Ð´Ð¾Ð´Ð°Ð½ÐºÐ¾Ð¼"
+
+#: elfnn-riscv.c:2739
+#, 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: Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Â«%sÂ» Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ� Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñ�Ð¿Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð½Ñ�; Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ Ð·Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð· -fPIC\n"
+
+#: elfnn-riscv.c:2749
+#, c-format
+msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
+msgstr "%%X%%P: Ð½ÐµÑ€Ð¾Ð·Ð²â€™Ñ�Ð·Ð½Ðµ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� %s Ñ‰Ð¾Ð´Ð¾ Ñ�Ð¸Ð¼Ð²Ð¾Ð»Ñƒ Â«%sÂ»\n"
+
+#: elfnn-riscv.c:2789
 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:2794
 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:2800
+msgid "dangerous relocation error"
+msgstr "Ð½ÐµÐ±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð° Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ�"
+
+#: elfnn-riscv.c:2806
 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:3337
 #, 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 "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"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729
+#: elfnn-riscv.c:3370
 #, 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: 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:2773
+#: elfnn-riscv.c:3414
 #, c-format
-msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ñ€Ð¾Ð·Ð±Ñ–Ð¶Ð½Ñ–Ñ�Ñ‚ÑŒ Ñƒ Ñ€Ñ�Ð´ÐºÐ°Ñ… ISA Ð·Ð°Ð²Ð°Ð¶Ð°Ñ” Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½ÑŽ Â«%sÂ» Ð· Â«%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:2921
+#: elfnn-riscv.c:3569
 #, c-format
-msgid "error: %pB: ISA string of input (%s) doesn't match output (%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:2946
+#: elfnn-riscv.c:3589
 #, c-format
-msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: XLEN Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u) Ð½Ðµ Ð·Ð±Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð·Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�Ð¼ Ð´Ð»Ñ� Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… (%u)."
+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:2954
+#: elfnn-riscv.c:3597
 #, c-format
-msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� XLEN (%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:3039
+#: elfnn-riscv.c:3711
 #, c-format
-msgid "error: %pB: conflicting priv spec version (major/minor/revision)."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: ÐºÐ¾Ð½Ñ„Ð»Ñ–ÐºÑ‚ Ð²ÐµÑ€Ñ�Ñ–Ð¹ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— priv (Ð¾Ñ�Ð½Ð¾Ð²Ð½Ð°/Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð°/Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ�)."
+msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u"
+msgstr "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ�: %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ” Ð²ÐµÑ€Ñ�Ñ–ÑŽ Ñ�Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— Ð¿Ñ€Ð°Ð² Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ñƒ %u.%u.%u, Ð°Ð»Ðµ Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ… Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð¾Ð²ÑƒÑ”Ñ‚ÑŒÑ�Ñ� Ð²ÐµÑ€Ñ�Ñ–Ñ� %u.%u.%u"
+
+#: elfnn-riscv.c:3729
+msgid "warning: privilege 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:3055
+#: elfnn-riscv.c:3757
 #, c-format
-msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned."
-msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ %pB Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°, Ð° Ñƒ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ– Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾ %u-Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ñƒ Ñ–Ð· Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ�Ñ‚ÐµÐºÐ°."
+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:3096
+#: elfnn-riscv.c:3798
 #, c-format
 msgid ""
 "%pB: ABI is incompatible with that of the selected emulation:\n"
@@ -7910,111 +8405,111 @@ msgstr ""
 "%pB: ABI Ñ” Ð½ÐµÑ�ÑƒÐ¼Ñ–Ñ�Ð½Ð¸Ð¼ Ñ–Ð· Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾ÑŽ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ”ÑŽ:\n"
 "  Ñ†Ñ–Ð»ÑŒ ÐµÐ¼ÑƒÐ»Ñ�Ñ†Ñ–Ñ—, Â«%sÂ», Ð½Ðµ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Â«%sÂ»"
 
-#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119
+#: elfnn-riscv.c:3852
 #, 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:3862
 #, 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:4400
 #, 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>"
 
-#: peigen.c:157 pepigen.c:157 pex64igen.c:157
+#: peXXigen.c:158
 #, c-format
 msgid "%pB: unable to find name for empty section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð½Ð°Ð·Ð²Ñƒ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ"
 
-#: peigen.c:183 pepigen.c:183 pex64igen.c:183
+#: peXXigen.c:185
 #, 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:195
 #, c-format
 msgid "%pB: unable to create fake empty section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ñ�Ñ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ„Ñ–ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð»"
 
-#: peigen.c:532 pepigen.c:532 pex64igen.c:532
+#: peXXigen.c:527
 #, c-format
-msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld"
-msgstr "%pB: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº aout Ð²ÐºÐ°Ð·ÑƒÑ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ…: %ld"
+msgid "%pB: aout header specifies an invalid number of data-directory entries: %u"
+msgstr "%pB: Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº aout Ð²ÐºÐ°Ð·ÑƒÑ” Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ñƒ ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð·Ð°Ð¿Ð¸Ñ�Ñ–Ð² ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ð°Ð½Ð¸Ñ…: %u"
 
-#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091
+#: peXXigen.c:1067
 #, 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:1220
 msgid "Export Directory [.edata (or where ever we found it)]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [.edata (Ð°Ð±Ð¾ Ñ–Ð½ÑˆÐµ Ð¼Ñ–Ñ�Ñ†Ðµ, Ð´Ðµ Ð¹Ð¾Ð³Ð¾ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾)]"
 
-#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236
+#: peXXigen.c:1221
 msgid "Import Directory [parts of .idata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� [Ñ‡Ð°Ñ�Ñ‚Ð¸Ð½Ð¸ .idata]"
 
-#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237
+#: peXXigen.c:1222
 msgid "Resource Directory [.rsrc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ€ÐµÑ�ÑƒÑ€Ñ�Ñ–Ð² [.rsrc]"
 
-#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238
+#: peXXigen.c:1223
 msgid "Exception Directory [.pdata]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ [.pdata]"
 
-#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239
+#: peXXigen.c:1224
 msgid "Security Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ñ…Ð¸Ñ�Ñ‚Ñƒ"
 
-#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240
+#: peXXigen.c:1225
 msgid "Base Relocation Directory [.reloc]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð±Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� [.reloc]"
 
-#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241
+#: peXXigen.c:1226
 msgid "Debug Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸"
 
-#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242
+#: peXXigen.c:1227
 msgid "Description Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð¾Ð¿Ð¸Ñ�Ñ–Ð²"
 
-#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243
+#: peXXigen.c:1228
 msgid "Special Directory"
 msgstr "ÐžÑ�Ð¾Ð±Ð»Ð¸Ð²Ð¸Ð¹ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³"
 
-#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244
+#: peXXigen.c:1229
 msgid "Thread Storage Directory [.tls]"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ� Ð¿Ð¾Ñ‚Ð¾ÐºÑ–Ð² [.tls]"
 
-#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245
+#: peXXigen.c:1230
 msgid "Load Configuration Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ� Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ"
 
-#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246
+#: peXXigen.c:1231
 msgid "Bound Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ð¸Ð¼ÑƒÑˆÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247
+#: peXXigen.c:1232
 msgid "Import Address Table Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ð°Ð´Ñ€ÐµÑ�"
 
-#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248
+#: peXXigen.c:1233
 msgid "Delay Import Directory"
 msgstr "ÐšÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð²Ñ–Ð´ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�"
 
-#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249
+#: peXXigen.c:1234
 msgid "CLR Runtime Header"
 msgstr "Ð”Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¸Ð¹ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº CLR"
 
-#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250
+#: peXXigen.c:1235
 msgid "Reserved"
 msgstr "Ð—Ð°Ñ€ÐµÐ·ÐµÑ€Ð²Ð¾Ð²Ð°Ð½Ð¾"
 
-#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310
+#: peXXigen.c:1282
 #, c-format
 msgid ""
 "\n"
@@ -8023,7 +8518,7 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ñ—Ñ— Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316
+#: peXXigen.c:1288
 #, c-format
 msgid ""
 "\n"
@@ -8032,7 +8527,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323
+#: peXXigen.c:1295
 #, c-format
 msgid ""
 "\n"
@@ -8041,30 +8536,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:1301
 #, c-format
 msgid ""
 "\n"
@@ -8073,7 +8545,7 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s)\n"
 
-#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385
+#: peXXigen.c:1304
 #, c-format
 msgid ""
 " vma:            Hint    Time      Forward  DLL       First\n"
@@ -8082,7 +8554,7 @@ msgstr ""
 " vma:            Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð§Ð°Ñ�Ð¾Ð²Ð°    Ð›Ð°Ð½Ñ†ÑŽÐ¶Ð¾Ðº Ð�Ð°Ð·Ð²Ð°     ÐŸÐµÑ€ÑˆÐ¸Ð¹\n"
 "                 Ð²ÐºÐ°Ð·.   ÐŸÐ¾Ð·Ð½Ð°Ñ‡ÐºÐ°  Ñ�Ð¿Ñ€Ñ�Ð¼.   DLL       ÑˆÐ»ÑŽÐ·\n"
 
-#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435
+#: peXXigen.c:1353
 #, c-format
 msgid ""
 "\n"
@@ -8091,12 +8563,12 @@ msgstr ""
 "\n"
 "\tÐ�Ð°Ð·Ð²Ð° DLL: %.*s\n"
 
-#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451
+#: peXXigen.c:1369
 #, 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:1394
 #, c-format
 msgid ""
 "\n"
@@ -8105,13 +8577,12 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” Ð·Ð°Ð¿Ð¸Ñ� Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ð¹Ð¾Ð³Ð¾ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520
-#: pex64igen.c:1559
+#: peXXigen.c:1438 peXXigen.c:1477
 #, c-format
 msgid "\t<corrupt: 0x%04lx>"
 msgstr "\t<Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾: 0x%04lx>"
 
-#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652
+#: peXXigen.c:1570
 #, c-format
 msgid ""
 "\n"
@@ -8120,7 +8591,7 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” Ð·Ð°Ð¿Ð¸Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ñ—Ñ— Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658
+#: peXXigen.c:1576
 #, c-format
 msgid ""
 "\n"
@@ -8129,7 +8600,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669
+#: peXXigen.c:1587
 #, c-format
 msgid ""
 "\n"
@@ -8138,7 +8609,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ñ—Ñ— Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚Ð¸ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–\n"
 
-#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680
+#: peXXigen.c:1598
 #, c-format
 msgid ""
 "\n"
@@ -8147,7 +8618,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ�, Ð°Ð»Ðµ Ð²Ð¾Ð½Ð° Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ (%d)\n"
 
-#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686
+#: peXXigen.c:1604
 #, c-format
 msgid ""
 "\n"
@@ -8156,7 +8627,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� Ñƒ 0x%lx\n"
 
-#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714
+#: peXXigen.c:1632
 #, c-format
 msgid ""
 "\n"
@@ -8166,67 +8637,67 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ– ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ� (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s)\n"
 
-#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718
+#: peXXigen.c:1636
 #, 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:1639
 #, 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:1643
 #, 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:1646
 #, c-format
 msgid "Name \t\t\t\t"
 msgstr "Ð�Ð°Ð·Ð²Ð°\t\t\t\t"
 
-#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739
+#: peXXigen.c:1657
 #, 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:1660
 #, c-format
 msgid "Number in:\n"
 msgstr "Ð�Ð¾Ð¼ÐµÑ€ Ñƒ:\n"
 
-#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745
+#: peXXigen.c:1663
 #, 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:1667
 #, 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:1670
 #, c-format
 msgid "Table Addresses\n"
 msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ‡Ð½Ñ– Ð°Ð´Ñ€ÐµÑ�Ð¸\n"
 
-#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755
+#: peXXigen.c:1673
 #, c-format
 msgid "\tExport Address Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� \t\t"
 
-#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760
+#: peXXigen.c:1678
 #, c-format
 msgid "\tName Pointer Table \t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸ \t\t"
 
-#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765
+#: peXXigen.c:1683
 #, c-format
 msgid "\tOrdinal Table \t\t\t"
 msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² \t\t\t"
 
-#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779
+#: peXXigen.c:1697
 #, c-format
 msgid ""
 "\n"
@@ -8235,20 +8706,20 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� ÐµÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… Ð°Ð´Ñ€ÐµÑ� â€” Ð¾Ñ�Ð½Ð¾Ð²Ð° Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²: %ld\n"
 
-#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788
+#: peXXigen.c:1706
 #, 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:1725
 msgid "Forwarder RVA"
 msgstr "ÐŸÐµÑ€ÐµÑ�Ð¿Ñ€Ñ�Ð¼Ð¾Ð²Ð½Ð¸Ð¹ RVA"
 
-#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819
+#: peXXigen.c:1737
 msgid "Export RVA"
 msgstr "Ð•ÐºÑ�Ð¿Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ð¹ RVA"
 
-#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826
+#: peXXigen.c:1744
 #, c-format
 msgid ""
 "\n"
@@ -8257,29 +8728,27 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� [Ð¿Ð¾Ñ€Ñ�Ð´ÐºÐ¾Ð²Ð¸Ñ… Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð²/Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² Ð½Ð° Ð½Ð°Ð·Ð²Ð¸]\n"
 
-#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834
+#: peXXigen.c:1752
 #, 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:1759
 #, 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:1773
 #, 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:1827 peXXigen.c:1996
 #, 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:1831 peXXigen.c:2000
 #, c-format
 msgid ""
 "\n"
@@ -8288,12 +8757,12 @@ msgstr ""
 "\n"
 "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .pdata)\n"
 
-#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916
+#: peXXigen.c:1834
 #, 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:1836
 #, c-format
 msgid ""
 " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
@@ -8302,27 +8771,12 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡.     ÐšÑ–Ð½Ñ†.    ÐžÐ±Ñ€Ð¾Ð±Ð½Ð¸Ðº Ð”Ð°Ð½Ñ–     Ð�Ð´Ñ€ÐµÑ�Ð°     ÐœÐ°Ñ�ÐºÐ°\n"
 "     \t\tÐ°Ð´Ñ€ÐµÑ�Ð°   Ð°Ð´Ñ€ÐµÑ�Ð°   EH       EH       ÐºÑ–Ð½Ñ†. Ð¿Ñ€Ð¾Ð».Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ�\n"
 
-#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931
+#: peXXigen.c:1849
 #, 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:2002
 #, c-format
 msgid ""
 " vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
@@ -8331,7 +8785,7 @@ msgstr ""
 " vma:\t\tÐŸÐ¾Ñ‡.     Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð°  Ð”Ð¾Ð²Ð¶Ð¸Ð½Ð°  ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– ÐžÐ±Ñ€Ð¾Ð±Ð½Ð¸Ðº  Ð”Ð°Ð½Ñ–\n"
 "     \t\tÐ°Ð´Ñ€ÐµÑ�Ð°   Ð¿Ñ€Ð¾Ð»Ð¾Ð³Ñƒ  Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—  32Ð± Ð²Ð¸Ðº. Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ EH\n"
 
-#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234
+#: peXXigen.c:2123
 #, c-format
 msgid ""
 "\n"
@@ -8342,7 +8796,7 @@ msgstr ""
 "\n"
 "ÐŸÐµÑ€ÐµÑ�ÑƒÐ²Ð°Ð½Ð½Ñ� Ñ‰Ð¾Ð´Ð¾ Ð¾Ñ�Ð½Ð¾Ð²Ð¸ Ñ„Ð°Ð¹Ð»Ð° PE (Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð¸Ð¹ Ð²Ð¼Ñ–Ñ�Ñ‚ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ .reloc)\n"
 
-#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264
+#: peXXigen.c:2152
 #, c-format
 msgid ""
 "\n"
@@ -8351,62 +8805,62 @@ msgstr ""
 "\n"
 "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð° Ð°Ð´Ñ€ÐµÑ�Ð°: %08lx, Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°: %ld (0x%lx), ÐºÑ–Ð»ÑŒÐºÑ–Ñ�Ñ‚ÑŒ Ð¿Ñ€Ð¸Ð²â€™Ñ�Ð·Ð¾Ðº: %ld\n"
 
-#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282
+#: peXXigen.c:2170
 #, 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:2231
 #, c-format
 msgid "%03x %*.s Entry: "
 msgstr "Ð’Ñ…Ñ–Ð´ Ð´Ð¾ %03x %*.s: "
 
-#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367
+#: peXXigen.c:2255
 #, c-format
 msgid "name: [val: %08lx len %d]: "
 msgstr "Ð½Ð°Ð·Ð²Ð°: [Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %08lx Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° %d]: "
 
-#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387
+#: peXXigen.c:2275
 #, c-format
 msgid "<corrupt string length: %#x>\n"
 msgstr "<Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð° Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#x>\n"
 
-#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397
+#: peXXigen.c:2285
 #, c-format
 msgid "<corrupt string offset: %#lx>\n"
 msgstr "<Ð²Ñ–Ð´Ñ�Ñ‚ÑƒÐ¿ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñ�Ð´ÐºÐ°: %#lx>\n"
 
-#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402
+#: peXXigen.c:2290
 #, c-format
 msgid "ID: %#08lx"
 msgstr "Ð†Ð´.: %#08lx"
 
-#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405
+#: peXXigen.c:2293
 #, c-format
 msgid ", Value: %#08lx\n"
 msgstr ", Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ�: %#08lx\n"
 
-#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427
+#: peXXigen.c:2315
 #, 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:2357
 #, c-format
 msgid "<unknown directory type: %d>\n"
 msgstr "<Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¸Ð¹ Ñ‚Ð¸Ð¿ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: %d>\n"
 
-#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477
+#: peXXigen.c:2365
 #, 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:2453
 #, c-format
 msgid "Corrupt .rsrc section detected!\n"
 msgstr "Ð’Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð´Ñ–Ð» .rsrc!\n"
 
-#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590
+#: peXXigen.c:2477
 #, c-format
 msgid ""
 "\n"
@@ -8415,17 +8869,17 @@ msgstr ""
 "\n"
 "ÐŸÐžÐŸÐ•Ð Ð•Ð”Ð–Ð•Ð�Ð�Ð¯: Ð·Ð°Ð¹Ð²Ñ– Ð´Ð°Ð½Ñ– Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– .rsrc â€” Ñ—Ñ… Ð±ÑƒÐ´Ðµ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾ Windows:\n"
 
-#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596
+#: peXXigen.c:2483
 #, c-format
 msgid " String table starts at offset: %#03x\n"
 msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ� Ñ€Ñ�Ð´ÐºÑ–Ð² Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ”Ñ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x\n"
 
-#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599
+#: peXXigen.c:2486
 #, c-format
 msgid " Resources start at offset: %#03x\n"
 msgstr " Ð ÐµÑ�ÑƒÑ€Ñ�Ð¸ Ð¿Ð¾Ñ‡Ð¸Ð½Ð°ÑŽÑ‚ÑŒÑ�Ñ� Ð· Ñ‚Ð°ÐºÐ¸Ð¼ Ð·Ñ�ÑƒÐ²Ð¾Ð¼: %#03x\n"
 
-#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651
+#: peXXigen.c:2543
 #, c-format
 msgid ""
 "\n"
@@ -8434,7 +8888,7 @@ msgstr ""
 "\n"
 "Ð†Ñ�Ð½ÑƒÑ” ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ð°Ð»Ðµ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ, Ñ‰Ð¾ Ð¹Ð¾Ð³Ð¾ Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾\n"
 
-#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657
+#: peXXigen.c:2549
 #, c-format
 msgid ""
 "\n"
@@ -8443,7 +8897,7 @@ msgstr ""
 "\n"
 "Ð£ %s Ñ” ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸, Ð°Ð»Ðµ Ñƒ Ñ†ÑŒÐ¾Ð¼Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– Ð½ÐµÐ¼Ð°Ñ” Ð´Ð°Ð½Ð¸Ñ…\n"
 
-#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664
+#: peXXigen.c:2556
 #, c-format
 msgid ""
 "\n"
@@ -8452,7 +8906,7 @@ msgstr ""
 "\n"
 "ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ°: Ñƒ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– %s Ð¼Ñ–Ñ�Ñ‚Ð¸Ñ‚ÑŒÑ�Ñ� Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð°Ð´Ñ€ÐµÑ�Ð° Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…, Ð°Ð»Ðµ Ð²Ð¾Ð½Ð° Ñ” Ð½Ð°Ð´Ñ‚Ð¾ Ð¼Ð°Ð»Ð¾ÑŽ\n"
 
-#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669
+#: peXXigen.c:2561
 #, c-format
 msgid ""
 "\n"
@@ -8463,22 +8917,22 @@ msgstr ""
 "Ð’Ð¸Ñ�Ð²Ð»ÐµÐ½Ð¾ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ñƒ %s Ð·Ð° Ð°Ð´Ñ€ÐµÑ�Ð¾ÑŽ 0x%lx\n"
 "\n"
 
-#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676
+#: peXXigen.c:2568
 #, 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:2573
 #, c-format
 msgid "Type                Size     Rva      Offset\n"
 msgstr "Ð¢Ð¸Ð¿                 Ð Ð¾Ð·Ð¼     Rva      Ð—Ñ�ÑƒÐ²\n"
 
-#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729
+#: peXXigen.c:2620
 #, c-format
 msgid "(format %c%c%c%c signature %s age %ld)\n"
 msgstr "(Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ� %s Ð²Ñ–Ðº %ld)\n"
 
-#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737
+#: peXXigen.c:2630
 #, c-format
 msgid "The debug directory size is not a multiple of the debug directory entry size\n"
 msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ€ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸ Ð½Ðµ Ñ” ÐºÑ€Ð°Ñ‚Ð½Ð¸Ð¼ Ð´Ð¾ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð·Ð°Ð¿Ð¸Ñ�Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸\n"
@@ -8486,7 +8940,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:2714
 #, c-format
 msgid ""
 "\n"
@@ -8495,105 +8949,125 @@ msgstr ""
 "\n"
 "Ð¥Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ¸ 0x%x\n"
 
-#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993
+#: peXXigen.c:2960
 #, 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:2997
 msgid "failed to update file offsets in debug directory"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ Ð·Ñ�ÑƒÐ²Ð¸ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ñƒ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð·Ñ– Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸ÐºÐ¸"
 
-#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033
+#: peXXigen.c:3005
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr "%pB: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñ€Ð¾Ð·Ð´Ñ–Ð» Ð´Ñ–Ð°Ð³Ð½Ð¾Ñ�Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… Ð´Ð°Ð½Ð¸Ñ…"
 
-#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849
+#: peXXigen.c:3820
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ñ€ÐµÑ�ÑƒÑ€Ñ� Ð· Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ�Ð¼ Ñ€Ñ�Ð´ÐºÑ–Ð²: %d"
 
-#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984
+#: peXXigen.c:3955
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° Ð½ÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… Ð¼Ð°Ð½Ñ–Ñ„ÐµÑ�Ñ‚Ñ–Ð²"
 
-#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002
+#: peXXigen.c:3973
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” Ð»Ð¸Ñ�Ñ‚Ð¾Ðº"
 
-#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044
+#: peXXigen.c:4015
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð»Ð¸Ñ�Ñ‚ÐºÑ–Ð²"
 
-#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046
+#: peXXigen.c:4020
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ� Ð»Ð¸Ñ�Ñ‚ÐºÑ–Ð²: %s"
 
-#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112
+#: peXXigen.c:4087
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr "Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ�Ñ� Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¸ Ð· Ñ€Ñ–Ð·Ð½Ð¸Ð¼Ð¸ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñ�Ñ‚Ð¸ÐºÐ°Ð¼Ð¸"
 
-#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119
+#: peXXigen.c:4094
 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:4211
 #, 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:4219
 #, 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:4358
 #, 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:4378
 #, 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:4399
 #, 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:4419
 #, 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:4461
 #, 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:4486
 #, 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"
+#~ 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 "error: %pB: <corrupt x86 ISA used size: 0x%x>"
-#~ msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚Ð°Ð½Ð¾Ð³Ð¾ ISA x86: 0x%x>"
+#~ msgid "-march=%s: `d' extension requires `f' extension"
+#~ msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«dÂ» Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ� Â«fÂ»"
 
-#~ msgid "error: %pB: <corrupt x86 ISA needed size: 0x%x>"
-#~ msgstr "Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %pB: <Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ð³Ð¾ ISA x86: 0x%x>"
+#~ 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 "\ttoc Ð¾Ñ�Ð½Ð¾Ð²Ð¸ ÐºÐ¾Ð´Ñƒ %08lx (Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð½Ð¸Ð¹/Ð´Ñ–Ð¹Ñ�Ð½Ð¸Ð¹) %08lx/%08lx\n"
+
+#~ 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/PORTING ./bfd/PORTING
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/PORTING	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/PORTING	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ppcboot.c ./bfd/ppcboot.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ppcboot.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ppcboot.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for PPCbug boot records.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 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;
@@ -207,7 +207,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,7 +217,7 @@ 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,
@@ -226,8 +226,8 @@ ppcboot_get_section_contents (bfd *abfd,
 {
   if (bfd_seek (abfd, offset + (file_ptr) sizeof (ppcboot_hdr_t), SEEK_SET) != 0
       || bfd_bread (location, count, abfd) != count)
-    return FALSE;
-  return TRUE;
+    return false;
+  return true;
 }
 
 
@@ -276,11 +276,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;
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ptrace-core.c ./bfd/ptrace-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/ptrace-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/ptrace-core.c	2021-12-16 01:57:38.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-2021 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.
@@ -55,13 +55,13 @@ int ptrace_unix_core_file_failing_signal
 #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);
@@ -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);
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/README ./bfd/README
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/README	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/README	2021-12-16 01:57:38.000000000 +0000
@@ -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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/reloc16.c ./bfd/reloc16.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/reloc16.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/reloc16.c	2021-12-16 01:57:38.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-2021 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,7 +245,7 @@ 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.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/reloc.c ./bfd/reloc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/reloc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/reloc.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD support for handling relocation entries.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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
@@ -383,8 +384,8 @@ 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, 0, 0, false, 0, complain_overflow_dont, NULL, \
+.	  NULL, false, 0, 0, false)
 .
 */
 
@@ -432,8 +433,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 +468,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 +520,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 +535,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,
@@ -2732,6 +2737,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 +2833,8 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC_REL16DX_HA
 ENUMX
+  BFD_RELOC_PPC_NEG
+ENUMX
   BFD_RELOC_PPC64_HIGHER
 ENUMX
   BFD_RELOC_PPC64_HIGHER_S
@@ -2935,6 +2946,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 +3008,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 +3056,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
@@ -6176,6 +6207,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
@@ -6363,6 +6396,11 @@ 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
 
@@ -6556,6 +6594,8 @@ 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
@@ -6668,11 +6708,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
@@ -8119,7 +8209,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, 2, 32, false, 0, complain_overflow_dont, 0, "VRT32", false, 0xffffffff, 0xffffffff, true);
 
 /*
 INTERNAL_FUNCTION
@@ -8170,29 +8260,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 +8290,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 +8298,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 +8310,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 +8319,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 +8327,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 +8337,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 +8345,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,7 +8362,7 @@ SYNOPSIS
 	   struct bfd_link_info *link_info,
 	   struct bfd_link_order *link_order,
 	   bfd_byte *data,
-	   bfd_boolean relocatable,
+	   bool relocatable,
 	   asymbol **symbols);
 
 DESCRIPTION
@@ -8286,7 +8376,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;
@@ -8357,8 +8447,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 +8483,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,7 +8536,7 @@ bfd_generic_get_relocated_section_conten
   free (reloc_vector);
   return data;
 
-error_return:
+ error_return:
   free (reloc_vector);
   return NULL;
 }
@@ -8481,7 +8571,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 +8582,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 +8594,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/rs6000-core.c ./bfd/rs6000-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/rs6000-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/rs6000-core.c	2021-12-16 01:57:38.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-2021 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;
+    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;
+    return false;
 
   /* Read the trailing portion of the structure.  */
   if (CORE_NEW (*core))
@@ -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;
@@ -686,7 +685,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 +696,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 +704,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,12 +723,12 @@ 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)
@@ -737,7 +736,7 @@ rs6000coff_core_file_matches_executable_
       if (bfd_bread (s, (bfd_size_type) 1, core_bfd) != 1)
 	{
 	  free (path);
-	  return FALSE;
+	  return false;
 	}
       if (*s == '\0')
 	break;
@@ -751,7 +750,7 @@ rs6000coff_core_file_matches_executable_
 	  if (n == NULL)
 	    {
 	      free (path);
-	      return FALSE;
+	      return false;
 	    }
 	  s = n + (path - s);
 	  path = n;
@@ -759,16 +758,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/sco5-core.c ./bfd/sco5-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/sco5-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/sco5-core.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back end for SCO5 core files (U-area and raw sections)
-   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
    Written by Jouke Numan <jnuman@hiscom.nl>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -71,7 +71,7 @@ static struct user *
 read_uarea (bfd *abfd, int filepos)
 {
   struct sco5_core_struct *rawptr;
-  bfd_size_type amt = sizeof (struct sco5_core_struct);
+  size_t amt = sizeof (struct sco5_core_struct);
 
   rawptr = (struct sco5_core_struct *) bfd_zmalloc (amt);
   if (rawptr == NULL)
@@ -101,7 +101,7 @@ read_uarea (bfd *abfd, int filepos)
   return &rawptr->u;
 }
 
-const bfd_target *
+bfd_cleanup
 sco5_core_file_p (bfd *abfd)
 {
   int coffset_siz, val, nsecs, cheadoffs;
@@ -172,7 +172,7 @@ sco5_core_file_p (bfd *abfd)
 			      (file_ptr) coffsets.u_stack))
 	goto fail;
 
-      return abfd->xvec;		/* Done for version 1 */
+      return _bfd_no_cleanup;		/* Done for version 1 */
     }
 
   /* Immediately before coreoffsets region is a long with offset in core
@@ -300,7 +300,7 @@ sco5_core_file_p (bfd *abfd)
 
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 
  fail:
   if (abfd->tdata.any)
@@ -358,6 +358,7 @@ const bfd_target core_sco5_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 */
@@ -372,12 +373,16 @@ const bfd_target core_sco5_vec =
       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_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_false,
-      _bfd_bool_bfd_false_error, bfd_false
+      _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),
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/section.c ./bfd/section.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/section.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/section.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -154,6 +154,10 @@ CODE_FRAGMENT
 .  {* 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;
 .
@@ -287,6 +291,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.  *}
@@ -536,11 +544,17 @@ 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;
+. {* 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;
+.
 .} asection;
 .
 .{* Relax table contains information about instructions which can
@@ -595,7 +609,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 +619,33 @@ 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)
 .{
 .  sec->alignment_power = val;
-.  return TRUE;
+.  return true;
 .}
 .
 .{* These sections are global, and are managed by BFD.  The application
@@ -653,32 +667,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 +704,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, id,  section_id, index, next, prev, flags, user_set_vma, *}	\
+.  {  NAME, IDX, 0,          0,     NULL, NULL, 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, *}	\
+.  {* vma, lma, size, rawsize, compressed_size, relax, relax_count,  *}	\
 .     0,   0,   0,    0,       0,               0,     0,		\
 .									\
-.  {* output_offset, output_section, alignment_power,               *}	\
+.  {* output_offset, output_section, alignment_power,                *}	\
 .     0,             &SEC,           0,					\
 .									\
-.  {* relocation, orelocation, reloc_count, filepos, rel_filepos,   *}	\
+.  {* relocation, orelocation, reloc_count, filepos, rel_filepos,    *}	\
 .     NULL,       NULL,        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                           *}	\
+.     { NULL }, { NULL }, NULL						\
+.									\
 .    }
 .
 .{* We use a macro to initialize the static asymbol structures because
@@ -795,12 +812,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 +825,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 +898,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 +985,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 +1003,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 +1065,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 +1120,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 +1175,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 +1260,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 +1301,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 +1315,11 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_set_section_flags (asection *section, flagword flags)
 {
   section->flags = flags;
-  return TRUE;
+  return true;
 }
 
 /*
@@ -1372,7 +1393,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 +1409,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 +1426,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 +1438,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 +1447,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 +1459,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 +1485,7 @@ DESCRIPTION
 
 */
 
-bfd_boolean
+bool
 bfd_set_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  const void *location,
@@ -1476,23 +1497,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 +1523,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 +1535,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 +1552,7 @@ DESCRIPTION
 	<<FALSE>>.
 
 */
-bfd_boolean
+bool
 bfd_get_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  void *location,
@@ -1544,7 +1564,7 @@ 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)
@@ -1552,22 +1572,21 @@ bfd_get_section_contents (bfd *abfd,
   else
     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 (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 +1598,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,7 +1614,7 @@ 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
@@ -1603,7 +1622,7 @@ DESCRIPTION
 	into a buffer, *@var{buf}, malloc'd by this function.
 */
 
-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,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/simple.c ./bfd/simple.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/simple.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/simple.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* simple.c -- BFD simple client routines
-   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
    Contributed by MontaVista Software, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,6 +25,35 @@
 #include "bfdlink.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,
 		      const char *warning ATTRIBUTE_UNUSED,
 		      const char *symbol ATTRIBUTE_UNUSED,
@@ -40,7 +69,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)
 {
 }
 
@@ -208,6 +237,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 +247,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;
@@ -242,8 +277,7 @@ bfd_simple_get_relocated_section_content
 				   * saved_offsets.section_count);
   if (saved_offsets.sections == NULL)
     {
-      if (data)
-	free (data);
+      free (data);
       _bfd_generic_link_hash_table_free (abfd);
       abfd->link.next = link_next;
       return NULL;
@@ -267,7 +301,7 @@ bfd_simple_get_relocated_section_content
 						 outbuf,
 						 0,
 						 symbol_table);
-  if (contents == NULL && data != NULL)
+  if (contents == NULL)
     free (data);
 
   bfd_map_over_sections (abfd, simple_restore_output_info, &saved_offsets);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/som.c ./bfd/som.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/som.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/som.c	2021-12-16 01:57:38.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-2021 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;
@@ -637,7 +636,7 @@ static const int comp3_opcodes[] =
 #endif
 
 #define SOM_HOWTO(TYPE, NAME)	\
-  HOWTO(TYPE, 0, 0, 32, FALSE, 0, 0, hppa_som_reloc, NAME, FALSE, 0, 0, FALSE)
+  HOWTO(TYPE, 0, 0, 32, false, 0, 0, hppa_som_reloc, NAME, false, 0, 0, false)
 
 static reloc_howto_type som_hppa_howto_table[] =
 {
@@ -1425,7 +1424,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 +1508,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 +1547,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 +1944,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 +2059,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 +2068,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;
@@ -2195,6 +2196,9 @@ setup_sections (bfd *abfd,
 	  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 +2343,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 +2368,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,7 +2390,7 @@ 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)
 
@@ -2526,31 +2526,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 +2559,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 +2601,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 +2623,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 +2658,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 +2795,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 +2876,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 +2899,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 +2916,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;
@@ -2962,7 +2971,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.  */
@@ -3001,7 +3010,7 @@ som_write_fixups (bfd *abfd,
 		{
 		  amt = p - tmp_space;
 		  if (bfd_bwrite ((void *) tmp_space, amt, abfd) != amt)
-		    return FALSE;
+		    return false;
 
 		  p = tmp_space;
 		  som_initialize_reloc_queue (reloc_queue);
@@ -3286,7 +3295,7 @@ som_write_fixups (bfd *abfd,
 	  /* Scribble out the relocations.  */
 	  amt = p - tmp_space;
 	  if (bfd_bwrite ((void *) tmp_space, amt, abfd) != amt)
-	    return FALSE;
+	    return false;
 	  p = tmp_space;
 
 	  total_reloc_size += subspace_reloc_size;
@@ -3296,12 +3305,12 @@ som_write_fixups (bfd *abfd,
       section = section->next;
     }
   *total_reloc_sizep = total_reloc_size;
-  return TRUE;
+  return true;
 }
 
 /* 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)
@@ -3313,16 +3322,16 @@ som_write_space_strings (bfd *abfd,
   char *p = tmp_space;
   unsigned int strings_size = 0;
   asection *section;
-  bfd_size_type amt;
+  size_t 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;
+    return false;
 
   /* Walk through all the spaces and subspaces (order is not important)
      building up and writing string table entries for their names.  */
@@ -3347,7 +3356,7 @@ som_write_space_strings (bfd *abfd,
 	  /* Flush buffer before refilling or reallocating.  */
 	  amt = p - tmp_space;
 	  if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
-	    return FALSE;
+	    return false;
 
 	  /* Reallocate if now empty buffer still too small.  */
 	  if (5 + length > tmp_space_size)
@@ -3403,14 +3412,14 @@ som_write_space_strings (bfd *abfd,
   res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd);
   free (tmp_space);
   if (res != amt)
-    return FALSE;
+    return false;
   *string_sizep = strings_size;
-  return TRUE;
+  return true;
 }
 
 /* Write out the symbol string table.  */
 
-static bfd_boolean
+static bool
 som_write_symbol_strings (bfd *abfd,
 			  unsigned long current_offset,
 			  asymbol **syms,
@@ -3425,11 +3434,11 @@ som_write_symbol_strings (bfd *abfd,
   char *tmp_space = bfd_malloc (tmp_space_size);
   char *p = tmp_space;
   unsigned int strings_size = 0;
-  bfd_size_type amt;
+  size_t 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
@@ -3441,7 +3450,7 @@ 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;
+    return false;
 
   if (compilation_unit)
     {
@@ -3478,7 +3487,7 @@ som_write_symbol_strings (bfd *abfd,
 	      /* Flush buffer before refilling or reallocating.  */
 	      amt = p - tmp_space;
 	      if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
-		return FALSE;
+		return false;
 
 	      /* Reallocate if now empty buffer still too small.  */
 	      if (5 + length > tmp_space_size)
@@ -3533,7 +3542,7 @@ som_write_symbol_strings (bfd *abfd,
 	  /* Flush buffer before refilling or reallocating.  */
 	  amt = p - tmp_space;
 	  if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
-	    return FALSE;
+	    return false;
 
 	  /* Reallocate if now empty buffer still too small.  */
 	  if (5 + length > tmp_space_size)
@@ -3579,17 +3588,17 @@ som_write_symbol_strings (bfd *abfd,
   res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd);
   free (tmp_space);
   if (res != amt)
-    return FALSE;
+    return false;
 
   *string_sizep = strings_size;
-  return TRUE;
+  return true;
 }
 
 /* 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;
@@ -3635,7 +3644,7 @@ som_begin_writing (bfd *abfd)
       bfd_size_type len;
 
       if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       /* Write the aux_id structure and the string length.  */
       len = sizeof (struct som_external_string_auxhdr);
@@ -3644,7 +3653,7 @@ som_begin_writing (bfd *abfd)
       som_swap_string_auxhdr_out
 	(obj_som_version_hdr (abfd), &ext_string_auxhdr);
       if (bfd_bwrite (&ext_string_auxhdr, len, abfd) != len)
-	return FALSE;
+	return false;
 
       /* Write the version string.  */
       len = obj_som_version_hdr (abfd)->header_id.length - 4;
@@ -3652,7 +3661,7 @@ som_begin_writing (bfd *abfd)
       current_offset += len;
       if (bfd_bwrite ((void *) obj_som_version_hdr (abfd)->string, len, abfd)
 	  != len)
-	return FALSE;
+	return false;
     }
 
   if (obj_som_copyright_hdr (abfd) != NULL)
@@ -3661,7 +3670,7 @@ som_begin_writing (bfd *abfd)
       bfd_size_type len;
 
       if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
-	return FALSE;
+	return false;
 
       /* Write the aux_id structure and the string length.  */
       len = sizeof (struct som_external_string_auxhdr);
@@ -3670,7 +3679,7 @@ som_begin_writing (bfd *abfd)
       som_swap_string_auxhdr_out
 	(obj_som_copyright_hdr (abfd), &ext_string_auxhdr);
       if (bfd_bwrite (&ext_string_auxhdr, len, abfd) != len)
-	return FALSE;
+	return false;
 
       /* Write the copyright string.  */
       len = obj_som_copyright_hdr (abfd)->header_id.length - 4;
@@ -3678,7 +3687,7 @@ som_begin_writing (bfd *abfd)
       current_offset += len;
       if (bfd_bwrite ((void *) obj_som_copyright_hdr (abfd)->string, len, abfd)
 	  != len)
-	return FALSE;
+	return false;
     }
 
   /* Next comes the initialization pointers; we have no initialization
@@ -3728,7 +3737,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.  */
@@ -3925,9 +3934,9 @@ som_begin_writing (bfd *abfd)
   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;
+    return false;
   if (bfd_bwrite ((void *) "", (bfd_size_type) 1, abfd) != 1)
-    return FALSE;
+    return false;
 
   obj_som_file_hdr (abfd)->unloadable_sp_size
     = current_offset - obj_som_file_hdr (abfd)->unloadable_sp_location;
@@ -3939,12 +3948,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 +3964,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 +4010,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 +4018,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 +4032,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 +4043,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 +4051,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.  */
@@ -4093,7 +4103,7 @@ som_finish_writing (bfd *abfd)
 	    (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;
+	    return false;
 	}
       /* Goto the next section.  */
       section = section->next;
@@ -4151,7 +4161,7 @@ som_finish_writing (bfd *abfd)
 	    (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;
+	    return false;
 	}
       /* Goto the next section.  */
       section = section->next;
@@ -4164,7 +4174,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++)
@@ -4180,7 +4190,7 @@ som_finish_writing (bfd *abfd)
 				     &ext_space_dict);
       amt = sizeof (struct som_external_space_dictionary_record);
       if (bfd_bwrite (&ext_space_dict, amt, abfd) != amt)
-	return FALSE;
+	return false;
 
       /* Goto the next section.  */
       section = section->next;
@@ -4193,14 +4203,14 @@ 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;
+	return false;
     }
 
   /* Setting of the system_id has to happen very late now that copying of
@@ -4222,10 +4232,10 @@ 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;
+    return false;
   amt = sizeof (struct som_external_header);
   if (bfd_bwrite (&ext_header, amt, abfd) != amt)
-    return FALSE;
+    return false;
 
   /* Now write the exec header.  */
   if (abfd->flags & (EXEC_P | DYNAMIC))
@@ -4255,32 +4265,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;
+	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 +4412,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 +4458,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 +4467,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 +4517,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;
 
+  symtab_size = num_syms;
+  symtab_size *= sizeof (struct som_external_symbol_dictionary_record);
   if (bfd_bwrite ((void *) 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 +4542,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 +4553,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 +4561,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 +4569,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 +4648,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 +4668,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 +4699,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 +4731,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 +4800,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 +4834,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 +4871,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)
@@ -4883,7 +4913,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,7 +4939,7 @@ som_set_reloc_info (unsigned char *fixup
 		    arelent *internal_relocs,
 		    asection *section,
 		    asymbol **symbols,
-		    bfd_boolean just_count)
+		    bool just_count)
 {
   unsigned int op, varname, deallocate_contents = 0;
   unsigned char *end_fixups = &fixup[end];
@@ -5204,8 +5234,7 @@ som_set_reloc_info (unsigned char *fixup
 		      if (!bfd_malloc_and_get_section (section->owner, section,
 						       &contents))
 			{
-			  if (contents != NULL)
-			    free (contents);
+			  free (contents);
 			  return (unsigned) -1;
 			}
 		      section->contents = contents;
@@ -5245,69 +5274,68 @@ 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, 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, false);
 
   /* We're done with the external relocations.  Free them.  */
   free (external_relocs);
@@ -5315,7 +5343,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 +5356,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 +5379,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 +5396,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 +5416,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 +5428,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 +5466,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 +5549,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 +5565,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 +5595,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 +5608,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 +5626,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 +5641,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 +5650,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 +5658,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 +5683,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 +5703,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 +5714,15 @@ som_get_section_contents (bfd *abfd,
 			  bfd_size_type count)
 {
   if (count == 0 || ((section->flags & SEC_HAS_CONTENTS) == 0))
-    return TRUE;
+    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 false; /* On error.  */
+  return true;
 }
 
-static bfd_boolean
+static bool
 som_set_section_contents (bfd *abfd,
 			  sec_ptr section,
 			  const void *location,
@@ -5696,7 +5734,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 +5744,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;
+    return false;
+  return true;
 }
 
-static bfd_boolean
+static bool
 som_set_arch_mach (bfd *abfd,
 		   enum bfd_architecture arch,
 		   unsigned long machine)
@@ -5728,7 +5766,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 +5776,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 +5788,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 +5815,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 +5852,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 +5918,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++)
@@ -5930,6 +5974,15 @@ 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;
@@ -5942,20 +5995,18 @@ som_bfd_count_ar_symbols (bfd *abfd,
 	  (*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 +6015,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 +6037,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 +6055,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);
@@ -6032,20 +6089,27 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
       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++;
@@ -6076,20 +6140,27 @@ som_bfd_fill_in_ar_symbols (bfd *abfd,
 	  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 +6168,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 +6189,34 @@ som_slurp_armap (bfd *abfd)
   unsigned int parsed_size;
   struct artdata *ardata = bfd_ardata (abfd);
   char nextname[17];
-  bfd_size_type amt = 16;
+  size_t amt = 16;
   int i = bfd_bread ((void *) 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;
+    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;
+    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 +6225,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.  */
@@ -6168,7 +6235,7 @@ som_slurp_armap (bfd *abfd)
      in just a minute.  */
   amt = sizeof (struct som_external_lst_header);
   if (bfd_bread ((void *) &ext_lst_header, amt, abfd) != amt)
-    return FALSE;
+    return false;
 
   som_swap_lst_header_in (&ext_lst_header, &lst_header);
 
@@ -6176,39 +6243,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 +6286,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 +6315,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 +6354,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 +6376,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 +6390,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 +6450,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,17 +6604,17 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd
     }
 
   /* Now scribble out the hash table.  */
-  amt = hash_size * 4;
+  amt = (size_t) hash_size * 4;
   if (bfd_bwrite ((void *) hash_table, amt, abfd) != amt)
     goto error_return;
 
   /* Then the SOM dictionary.  */
-  amt = module_count * sizeof (struct som_external_som_entry);
+  amt = (size_t) module_count * sizeof (struct som_external_som_entry);
   if (bfd_bwrite ((void *) som_dict, amt, abfd) != amt)
     goto error_return;
 
   /* The library symbols.  */
-  amt = nsyms * sizeof (struct som_external_lst_symbol_record);
+  amt = (size_t) nsyms * sizeof (struct som_external_lst_symbol_record);
   if (bfd_bwrite ((void *) lst_syms, amt, abfd) != amt)
     goto error_return;
 
@@ -6534,38 +6623,28 @@ som_bfd_ar_write_symbol_stuff (bfd *abfd
   if (bfd_bwrite ((void *) 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 +6657,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 +6717,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;
 
@@ -6683,32 +6762,32 @@ 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;
+    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;
+    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.  */
 
-static bfd_boolean
+static bool
 som_bfd_free_cached_info (bfd *abfd)
 {
   if (bfd_get_format (abfd) == bfd_object)
     {
       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));
@@ -6729,7 +6808,7 @@ som_bfd_free_cached_info (bfd *abfd)
 
 /* 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;
@@ -6796,6 +6875,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/som.h ./bfd/som.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/som.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/som.h	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah (pa-gdb-bugs@cs.utah.edu).
@@ -231,13 +231,20 @@ struct som_section_data_struct
 #define R_HPPA_END_TRY			R_END_TRY
 
 /* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/srec.c ./bfd/srec.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/srec.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/srec.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for s-record objects.
-   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 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_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,18 +286,18 @@ 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;
@@ -493,8 +493,7 @@ srec_scan (bfd *abfd)
 
 	    if (bytes * 2 > bufsize)
 	      {
-		if (buf != NULL)
-		  free (buf);
+		free (buf);
 		buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2);
 		if (buf == NULL)
 		  goto error_return;
@@ -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;
@@ -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;
@@ -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,7 +733,8 @@ 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)
 	goto error_return;
@@ -751,8 +745,7 @@ srec_read_section (bfd *abfd, asection *
 
       if (bytes * 2 > bufsize)
 	{
-	  if (buf != NULL)
-	    free (buf);
+	  free (buf);
 	  buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2);
 	  if (buf == NULL)
 	    goto error_return;
@@ -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,
@@ -1012,21 +1003,21 @@ srec_write_record (bfd *abfd,
   return bfd_bwrite ((void *) 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,17 +1080,20 @@ srec_write_symbols (bfd *abfd)
       bfd_size_type len;
       asymbol **table = bfd_get_outsymbols (abfd);
 
-      len = strlen (abfd->filename);
+      len = strlen (bfd_get_filename (abfd));
       if (bfd_bwrite ("$$ ", (bfd_size_type) 3, abfd) != 3
-	  || bfd_bwrite (abfd->filename, len, abfd) != len
+	  || bfd_bwrite (bfd_get_filename (abfd), len, abfd) != len
 	  || bfd_bwrite ("\r\n", (bfd_size_type) 2, abfd) != 2)
-	return FALSE;
+	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;
@@ -1107,7 +1101,7 @@ srec_write_symbols (bfd *abfd)
 	      len = strlen (s->name);
 	      if (bfd_bwrite ("  ", (bfd_size_type) 2, abfd) != 2
 		  || bfd_bwrite (s->name, len, abfd) != len)
-		return FALSE;
+		return false;
 
 	      sprintf_vma (buf + 2, (s->value
 				     + s->section->output_section->lma
@@ -1122,17 +1116,17 @@ srec_write_symbols (bfd *abfd)
 	      *--p = ' ';
 	      len += 4;
 	      if (bfd_bwrite (p, len, abfd) != len)
-		return FALSE;
+		return false;
 	    }
 	}
       if (bfd_bwrite ("$$ \r\n", (bfd_size_type) 5, abfd) != 5)
-	return FALSE;
+	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 +1135,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 +1147,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);
@@ -1305,6 +1299,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 +1356,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/stabs.c ./bfd/stabs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/stabs.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/stabs.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Stabs in sections linking support.
-   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -144,7 +144,7 @@ stab_link_includes_newfunc (struct bfd_h
 /* This function is called for each input file from the add_symbols
    pass of the linker.  */
 
-bfd_boolean
+bool
 _bfd_link_section_stabs (bfd *abfd,
 			 struct stab_info *sinfo,
 			 asection *stabsec,
@@ -152,7 +152,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;
@@ -164,37 +164,37 @@ _bfd_link_section_stabs (bfd *abfd,
   if (stabsec->size == 0
       || stabstrsec->size == 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 +267,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 +282,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 +362,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,14 +491,12 @@ _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
@@ -507,11 +505,11 @@ _bfd_link_section_stabs (bfd *abfd,
    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;
@@ -524,24 +522,24 @@ _bfd_discard_section_stabs (bfd *abfd,
 
   if (stabsec->size == 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 +646,14 @@ _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.  */
 
-bfd_boolean
+bool
 _bfd_write_section_stabs (bfd *output_bfd,
 			  struct stab_info *sinfo,
 			  asection *stabsec,
@@ -727,12 +724,12 @@ _bfd_write_section_stabs (bfd *output_bf
 
 /* Write out the .stabstr section.  */
 
-bfd_boolean
+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,16 +739,16 @@ _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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/stab-syms.c ./bfd/stab-syms.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/stab-syms.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/stab-syms.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/syms.c ./bfd/syms.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/syms.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/syms.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -307,6 +307,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
@@ -361,23 +364,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 +389,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 +407,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 +440,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 +449,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 +541,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;
@@ -565,30 +568,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 +584,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 +606,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
@@ -667,8 +654,17 @@ 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 +701,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 '?';
@@ -735,10 +731,10 @@ DESCRIPTION
 	Returns zero otherwise.
 
 SYNOPSIS
-	bfd_boolean bfd_is_undefined_symclass (int symclass);
+	bool bfd_is_undefined_symclass (int symclass);
 */
 
-bfd_boolean
+bool
 bfd_is_undefined_symclass (int symclass)
 {
   return symclass == 'U' || symclass == 'w' || symclass == 'v';
@@ -775,7 +771,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 +795,7 @@ DESCRIPTION
 
 long
 _bfd_generic_read_minisymbols (bfd *abfd,
-			       bfd_boolean dynamic,
+			       bool dynamic,
 			       void **minisymsp,
 			       unsigned int *sizep)
 {
@@ -841,8 +837,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 +847,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 +927,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 +946,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;
@@ -984,7 +979,7 @@ _bfd_stab_section_find_nearest_line (bfd
       if (info->stabsec == NULL || info->strsec == NULL)
 	{
 	  /* No stabs debugging information.  */
-	  return TRUE;
+	  return true;
 	}
 
       stabsize = (info->stabsec->rawsize
@@ -1004,7 +999,7 @@ _bfd_stab_section_find_nearest_line (bfd
 
       info = (struct stab_find_info *) bfd_zalloc (abfd, amt);
       if (info == NULL)
-	return FALSE;
+	return false;
 
       /* FIXME: When using the linker --split-by-file or
 	 --split-by-reloc options, it is possible for the .stab and
@@ -1024,7 +1019,7 @@ _bfd_stab_section_find_nearest_line (bfd
 	      /* No stabs debugging information.  Set *pinfo so that we
 		 can return quickly in the info != NULL case above.  */
 	      *pinfo = info;
-	      return TRUE;
+	      return true;
 	    }
 	}
 
@@ -1039,13 +1034,13 @@ _bfd_stab_section_find_nearest_line (bfd
       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;
+	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;
+	return false;
 
       /* Stab strings ought to be nul terminated.  Ensure the last one
 	 is, to prevent running off the end of the buffer.  */
@@ -1057,17 +1052,16 @@ _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;
+	return false;
       reloc_vector = (arelent **) bfd_malloc (reloc_size);
       if (reloc_vector == NULL && reloc_size != 0)
-	return FALSE;
+	return false;
       reloc_count = bfd_canonicalize_reloc (abfd, info->stabsec, reloc_vector,
 					    symbols);
       if (reloc_count < 0)
 	{
-	  if (reloc_vector != NULL)
-	    free (reloc_vector);
-	  return FALSE;
+	  free (reloc_vector);
+	  return false;
 	}
       if (reloc_count > 0)
 	{
@@ -1097,9 +1091,8 @@ _bfd_stab_section_find_nearest_line (bfd
 		  _bfd_error_handler
 		    (_("unsupported .stab relocation"));
 		  bfd_set_error (bfd_error_invalid_operation);
-		  if (reloc_vector != NULL)
-		    free (reloc_vector);
-		  return FALSE;
+		  free (reloc_vector);
+		  return false;
 		}
 
 	      val = bfd_get_32 (abfd, info->stabs + octets);
@@ -1110,8 +1103,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 +1146,14 @@ _bfd_stab_section_find_nearest_line (bfd
 	++info->indextablesize;
 
       if (info->indextablesize == 0)
-	return TRUE;
+	return true;
       ++info->indextablesize;
 
       amt = info->indextablesize;
       amt *= sizeof (struct indexentry);
       info->indextable = (struct indexentry *) bfd_alloc (abfd, amt);
       if (info->indextable == NULL)
-	return FALSE;
+	return false;
 
       file_name = NULL;
       directory_name = NULL;
@@ -1334,7 +1326,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 +1335,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 +1383,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 +1399,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 +1421,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 +1443,7 @@ _bfd_stab_section_find_nearest_line (bfd
       *pfnname = indexentry->function_name;
     }
 
-  return TRUE;
+  return true;
 }
 
 long
@@ -1479,16 +1471,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 +1490,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 +1504,7 @@ _bfd_nosymbols_find_nearest_line
   return _bfd_bool_bfd_false_error (abfd);
 }
 
-bfd_boolean
+bool
 _bfd_nosymbols_find_line (bfd *abfd,
 			  asymbol **symbols ATTRIBUTE_UNUSED,
 			  asymbol *symbol ATTRIBUTE_UNUSED,
@@ -1521,7 +1514,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,
@@ -1541,7 +1534,7 @@ _bfd_nosymbols_bfd_make_debug_symbol (bf
 
 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 +1543,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/sysdep.h ./bfd/sysdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/sysdep.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/sysdep.h	2021-12-16 01:57:38.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-2021 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,10 +120,6 @@ 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
@@ -187,7 +132,7 @@ size_t strnlen (const char *, size_t);
 
    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 +168,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/targets.c ./bfd/targets.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/targets.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/targets.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -133,6 +133,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,
@@ -176,6 +181,8 @@ DESCRIPTION
 .{* Forward declaration.  *}
 .typedef struct flag_info flag_info;
 .
+.typedef void (*bfd_cleanup) (bfd *);
+.
 .typedef struct bfd_target
 .{
 .  {* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  *}
@@ -213,6 +220,9 @@ 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.  *}
@@ -240,15 +250,15 @@ 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.
@@ -262,17 +272,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 +296,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 +330,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 +349,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) \
@@ -377,46 +383,47 @@ BFD_JUMP_TABLE macros.
 .  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_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 *, void *, unsigned long size);
 .#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 +433,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 +476,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 +550,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 +562,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 +610,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 +660,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).
@@ -680,8 +694,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 +745,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;
@@ -835,14 +847,13 @@ 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 rl78_elf32_vec;
 extern const bfd_target rs6000_xcoff64_vec;
 extern const bfd_target rs6000_xcoff64_aix_vec;
@@ -879,7 +890,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 +909,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,15 +925,13 @@ 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;
@@ -932,6 +939,7 @@ extern const bfd_target xstormy16_elf32_
 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.  */
@@ -1008,8 +1016,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 +1088,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,
@@ -1228,11 +1234,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 +1246,8 @@ static const bfd_target * const _bfd_tar
 #ifdef BFD64
 	&riscv_elf32_vec,
 	&riscv_elf64_vec,
+	&riscv_elf32_be_vec,
+	&riscv_elf64_be_vec,
 #endif
 	&rl78_elf32_vec,
 
@@ -1296,7 +1301,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 +1310,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,15 +1336,13 @@ 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
 
@@ -1355,6 +1356,7 @@ static const bfd_target * const _bfd_tar
 	&xtensa_elf32_le_vec,
 
 	&z80_coff_vec,
+	&z80_elf32_vec,
 
 	&z8k_coff_vec,
 #endif /* not SELECT_VECS */
@@ -1414,7 +1416,7 @@ static const bfd_target * const _bfd_tar
 
 	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,13 +1431,13 @@ 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
@@ -1494,7 +1496,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 +1504,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 +1562,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 +1582,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 +1598,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 +1611,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 +1636,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 +1651,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 +1688,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 +1711,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;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/tekhex.c ./bfd/tekhex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/tekhex.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/tekhex.c	2021-12-16 01:57:38.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-2021 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;
+    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 = (bool) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
+      while (!is_eof && *src != '%')
+	is_eof = (bool) (bfd_bread (src, (bfd_size_type) 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;
+	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;
+	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,26 +581,26 @@ 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];
@@ -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
@@ -796,7 +796,7 @@ out (bfd *abfd, int type, char *start, c
     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);
@@ -899,7 +899,7 @@ tekhex_write_object_contents (bfd *abfd)
   /* And the terminator.  */
   if (bfd_bwrite ("%0781010\n", (bfd_size_type) 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);
 
@@ -1008,6 +1008,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/TODO ./bfd/TODO
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/TODO	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/TODO	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/trad-core.c ./bfd/trad-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/trad-core.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/trad-core.c	2021-12-16 01:57:38.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-2021 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,13 +59,13 @@ 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
@@ -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);
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vax1knetbsd.c ./bfd/vax1knetbsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vax1knetbsd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/vax1knetbsd.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vaxnetbsd.c ./bfd/vaxnetbsd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vaxnetbsd.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/vaxnetbsd.c	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/verilog.c ./bfd/verilog.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/verilog.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/verilog.c	2021-12-16 01:57:38.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-2021 Free Software Foundation, Inc.
    Written by Anthony Green <green@moxielogic.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -95,19 +95,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.  */
 
-static bfd_boolean
+static bool
 verilog_set_section_contents (bfd *abfd,
 			      sec_ptr section,
 			      const void * location,
@@ -119,7 +119,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 +129,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 +159,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));
@@ -190,7 +203,7 @@ verilog_write_address (bfd *abfd, bfd_vm
    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 +220,7 @@ verilog_write_record (bfd *abfd,
       > (long) sizeof (buffer))
     {
       /* FIXME: Should we generate an error message ?  */
-      return FALSE;
+      return false;
     }
 
   /* Write the data.
@@ -270,7 +283,7 @@ verilog_write_record (bfd *abfd,
   return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen;
 }
 
-static bfd_boolean
+static bool
 verilog_write_section (bfd *abfd,
 		       tdata_type *tdata ATTRIBUTE_UNUSED,
 		       verilog_data_list_type *list)
@@ -289,16 +302,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 +323,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 +334,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 +354,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
@@ -392,6 +405,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/version.h ./bfd/version.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/version.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/version.h	2021-12-16 01:57:38.000000000 +0000
@@ -16,7 +16,7 @@
 
    In releases, the date is not included in either version strings or
    sonames.  */
-#define BFD_VERSION_DATE 20200307
+#define BFD_VERSION_DATE 20211216
 #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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/version.m4 ./bfd/version.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/version.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/version.m4	2021-12-16 01:57:38.000000000 +0000
@@ -1 +1 @@
-m4_define([BFD_VERSION], [2.33.50])
+m4_define([BFD_VERSION], [2.37.50])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms-alpha.c ./bfd/vms-alpha.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms-alpha.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/vms-alpha.c	2021-12-16 01:57:38.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-2021 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;
@@ -263,7 +267,7 @@ struct module
 struct vms_private_data_struct
 {
   /* If true, relocs have been read.  */
-  bfd_boolean reloc_done;
+  bool reloc_done;
 
   /* Record input buffer.  */
   struct vms_rec_rd recrd;
@@ -367,15 +371,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 +405,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 +421,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 +462,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 +477,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 +502,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;
@@ -529,12 +529,12 @@ _bfd_vms_slurp_eisd (bfd *abfd, unsigned
       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 +547,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 +591,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 +612,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 +630,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 +664,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 +686,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 +704,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 +718,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.  */
@@ -861,7 +865,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;
@@ -894,7 +898,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 +928,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 +971,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 +1114,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 +1128,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 +1173,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 +1189,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 +1210,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 +1232,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 +1249,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 +1290,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 +1309,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 +1319,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 +1351,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 +1376,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 +1390,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 +1407,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 +1439,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 +1451,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 +1471,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 +1549,109 @@ 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;
       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 +1665,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 +1678,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 +1691,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 +1801,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 +1816,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 +1886,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 +1909,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 +1941,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 +1951,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 +1962,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 +1978,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 +1986,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 +1999,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 +2036,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 +2067,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 +2081,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 +2135,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 +2153,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 +2179,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 +2194,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 +2207,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 +2238,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 +2248,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 +2274,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 +2333,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 +2349,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 +2358,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 +2427,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 +2553,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 +2604,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 +2614,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 +2636,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 +2649,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 +2661,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 +2670,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 +2702,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 +2757,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 +2795,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;
+    goto error_ret;
 
   /* The first challenge with VMS is to discover the kind of the file.
 
@@ -2637,27 +2820,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 +2840,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, (file_ptr) 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 +2903,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;
@@ -2771,6 +2924,7 @@ static void
 _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 +2939,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,7 +2947,7 @@ _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);
 }
@@ -2819,7 +2973,7 @@ _bfd_vms_write_lmn (bfd *abfd, const cha
 
 /* 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 +2996,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);
@@ -2852,25 +3006,39 @@ _bfd_vms_write_eeom (bfd *abfd)
     }
 
   _bfd_vms_output_end (abfd, recwr);
-  return TRUE;
+  return true;
 }
 
-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)
-    {
-      vec->max_el = 16;
-      vec->els = bfd_malloc2 (vec->max_el, elsz);
-    }
-  else
+  if (vec->nbr_el >= vec->max_el)
     {
-      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 +3094,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 +3104,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 +3132,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 +3194,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 +3250,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 +3277,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 +3321,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 +3339,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;
@@ -3255,7 +3423,7 @@ 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;
+    return false;
 
   /* Write remaining eisd.  */
   if (eisd != NULL)
@@ -3276,7 +3444,7 @@ alpha_vms_write_exec (bfd *abfd)
 		  != eisd->file_pos / VMS_BLOCK_SIZE))
 	    {
 	      if (bfd_bwrite (blk, sizeof (blk), abfd) != sizeof (blk))
-		return FALSE;
+		return false;
 
 	      memset (blk, 0xff, sizeof (blk));
 	    }
@@ -3293,7 +3461,7 @@ alpha_vms_write_exec (bfd *abfd)
       if (sec->size == 0 || !(sec->flags & SEC_HAS_CONTENTS))
 	continue;
       if (bfd_bwrite (sec->contents, sec->size, abfd) != sec->size)
-	return FALSE;
+	return false;
 
       /* Pad.  */
       len = VMS_BLOCK_SIZE - sec->size % VMS_BLOCK_SIZE;
@@ -3301,7 +3469,7 @@ alpha_vms_write_exec (bfd *abfd)
 	{
 	  memset (blk, 0, len);
 	  if (bfd_bwrite (blk, len, abfd) != len)
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -3363,16 +3531,16 @@ alpha_vms_write_exec (bfd *abfd)
 	_bfd_vms_output_end (abfd, recwr);
 
       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;
@@ -3595,12 +3763,12 @@ _bfd_vms_write_egsd (bfd *abfd)
   _bfd_vms_output_alignment (recwr, 8);
   _bfd_vms_output_end (abfd, recwr);
 
-  return TRUE;
+  return true;
 }
 
 /* Write object header for bfd abfd.  Return FALSE on error.  */
 
-static bfd_boolean
+static bool
 _bfd_vms_write_ehdr (bfd *abfd)
 {
   asymbol *symbol;
@@ -3649,7 +3817,7 @@ _bfd_vms_write_ehdr (bfd *abfd)
 			 39);
   _bfd_vms_output_end (abfd, recwr);
 
-  return TRUE;
+  return true;
 }
 
 /* Part 4.6, relocations.  */
@@ -3770,7 +3938,7 @@ etir_output_check (bfd *abfd, asection *
 
 /* 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 +3947,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 +3980,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 +4028,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)
@@ -4096,7 +4264,7 @@ _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);
@@ -4118,12 +4286,12 @@ _bfd_vms_write_etir (bfd * abfd, int obj
     }
 
   _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 +4305,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.  */
@@ -4170,7 +4338,7 @@ new_module (bfd *abfd)
 
 /* 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)
 {
@@ -4204,7 +4372,7 @@ parse_module (bfd *abfd, struct module *
 	{
 	case DST__K_MODBEG:
 	  module->name
-	    = _bfd_vms_save_counted_string (ptr + DST_S_B_MODBEG_NAME,
+	    = _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_MODBEG_NAME,
 					    maxptr - (ptr + DST_S_B_MODBEG_NAME));
 
 	  curr_pc = 0;
@@ -4222,7 +4390,7 @@ parse_module (bfd *abfd, struct module *
 	  funcinfo = (struct funcinfo *)
 	    bfd_zalloc (abfd, sizeof (struct funcinfo));
 	  funcinfo->name
-	    = _bfd_vms_save_counted_string (ptr + DST_S_B_RTNBEG_NAME,
+	    = _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_RTNBEG_NAME,
 					    maxptr - (ptr + DST_S_B_RTNBEG_NAME));
 	  funcinfo->low = bfd_getl32 (ptr + DST_S_L_RTNBEG_ADDRESS);
 	  funcinfo->next = module->func_table;
@@ -4273,19 +4441,20 @@ parse_module (bfd *abfd, struct module *
 		  {
 		    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)
 		      {
 			module->file_table_count *= 2;
 			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;
 		      }
 
 		    module->file_table [fileid].name = filename;
@@ -4607,6 +4776,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.  */
@@ -4684,7 +4854,8 @@ 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, -1))
+	return NULL;
       list = module;
     }
 
@@ -4694,7 +4865,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 +4873,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 +4900,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 +4921,7 @@ module_find_nearest_line (bfd *abfd, str
 		  *file = module->name;
 		  *line = lineinfo->line;
 		}
-	      return TRUE;
+	      return true;
 	    }
 
 	break;
@@ -4761,7 +4934,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 +4957,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 +5035,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 +5107,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;
@@ -4943,14 +5116,14 @@ alpha_vms_slurp_relocs (bfd *abfd)
 
   /* We slurp relocs only once, for all sections.  */
   if (PRIV (reloc_done))
-      return TRUE;
-  PRIV (reloc_done) = TRUE;
+      return true;
+  PRIV (reloc_done) = true;
 
   if (alpha_vms_canonicalize_symtab (abfd, NULL) < 0)
-    return FALSE;
+    return false;
 
   if (bfd_seek (abfd, 0, SEEK_SET) != 0)
-    return FALSE;
+    return false;
 
   while (1)
     {
@@ -5012,7 +5185,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;
+		  return false;
 		}
 	      cur_psect = cur_psidx;
 	      vaddr = cur_addend;
@@ -5030,7 +5203,7 @@ 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;
+		      return false;
 		    }
 		}
 	      cur_addend = bfd_getl32 (ptr + 4);
@@ -5045,7 +5218,7 @@ 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;
+		  return false;
 		}
 	      cur_addend = bfd_getl64 (ptr + 4);
 	      prev_cmd = cmd;
@@ -5062,7 +5235,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;
+		  return false;
 		}
 	      reloc_code = BFD_RELOC_32;
 	      break;
@@ -5075,7 +5248,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;
+		  return false;
 		}
 	      reloc_code = BFD_RELOC_64;
 	      break;
@@ -5087,7 +5260,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;
+		  return false;
 		}
 	      reloc_code = BFD_RELOC_64;
 	      break;
@@ -5100,7 +5273,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;
+		  return false;
 		}
 	      prev_cmd = ETIR__C_OPR_ADD;
 	      continue;
@@ -5154,7 +5327,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	    default:
 	      _bfd_error_handler (_("unknown reloc %s"),
 				  _bfd_vms_etir_name (cmd));
-	      return FALSE;
+	      return false;
 	    }
 
 	  {
@@ -5167,16 +5340,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;
+		return false;
 	      }
 
 	    if (PRIV (sections) == NULL)
-	      return FALSE;
+	      return false;
 	    sec = PRIV (sections)[cur_psect];
 	    if (sec == bfd_abs_section_ptr)
 	      {
 		_bfd_error_handler (_("relocation for non-REL psect"));
-		return FALSE;
+		return false;
 	      }
 
 	    vms_sec = vms_section_data (sec);
@@ -5193,8 +5366,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)
+		      return false;
 		  }
 	      }
 	    reloc = &sec->relocation[sec->reloc_count];
@@ -5232,7 +5407,7 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	    else if (cur_psidx >= 0)
 	      {
 		if (PRIV (sections) == NULL || cur_psidx >= (int) PRIV (section_count))
-		  return FALSE;
+		  return false;
 		reloc->sym_ptr_ptr =
 		  PRIV (sections)[cur_psidx]->symbol_ptr_ptr;
 	      }
@@ -5255,9 +5430,9 @@ alpha_vms_slurp_relocs (bfd *abfd)
 	  cur_psidx = -1;
 	}
     }
-  vms_debug2 ((3, "alpha_vms_slurp_relocs: result = TRUE\n"));
+  vms_debug2 ((3, "alpha_vms_slurp_relocs: result = true\n"));
 
-  return TRUE;
+  return true;
 }
 
 /* Return the number of bytes required to store the relocation
@@ -5337,30 +5512,30 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* Rightshift.  */
 	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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
@@ -5369,90 +5544,90 @@ static reloc_howto_type alpha_howto_tabl
 	 2,			/* Rightshift.  */
 	 2,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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).  */
 	 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,			/* 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.  */
@@ -5460,15 +5635,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* Rightshift.  */
 	 4,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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.  */
@@ -5476,15 +5651,15 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* Rightshift.  */
 	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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.  */
@@ -5492,60 +5667,60 @@ static reloc_howto_type alpha_howto_tabl
 	 0,			/* Rightshift.  */
 	 0,			/* Size (0 = byte, 1 = short, 2 = long).  */
 	 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,			/* 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).  */
 	 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).  */
 	 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.  */
@@ -5554,57 +5729,57 @@ static reloc_howto_type alpha_howto_tabl
 	 /* 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,			/* 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,			/* 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,			/* 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 +5887,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);
 
@@ -6457,8 +6632,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 = false;
 
   while (1)
     {
@@ -6472,7 +6647,7 @@ evax_bfd_print_eobj (struct bfd *abfd, F
 	{
 	  unsigned char buf[6];
 
-	  is_first = FALSE;
+	  is_first = false;
 
 	  /* Read 6 bytes.  */
 	  if (bfd_bread (buf, sizeof (buf), abfd) != sizeof (buf))
@@ -6485,13 +6660,13 @@ evax_bfd_print_eobj (struct bfd *abfd, F
 	      && bfd_getl16 (buf + 2) == EOBJ__C_EMH)
 	    {
 	      /* The format is raw: record-size, type, record-size.  */
-	      has_records = TRUE;
+	      has_records = true;
 	      pad_len = (rec_len + 1) & ~1U;
 	      hdr_size = 4;
 	    }
 	  else if (rec_len == EOBJ__C_EMH)
 	    {
-	      has_records = FALSE;
+	      has_records = false;
 	      pad_len = bfd_getl16 (buf + 2);
 	      hdr_size = 6;
 	    }
@@ -6615,7 +6790,7 @@ evax_bfd_print_relocation_records (FILE
 	  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);
@@ -7036,8 +7211,8 @@ evax_bfd_print_dst (struct bfd *abfd, un
       dst_size -= len;
       off += len;
       len -= sizeof (dsth);
-      buf = bfd_malloc (len);
-      if (bfd_bread (buf, len, abfd) != len)
+      buf = _bfd_malloc_and_read (abfd, len, len);
+      if (buf == NULL)
 	{
 	  fprintf (file, _("cannot read DST symbol\n"));
 	  return;
@@ -7952,14 +8127,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;
@@ -8134,7 +8307,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 +8317,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 +8336,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 +8361,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 +8388,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 +8409,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 +8462,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 +8522,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 +8564,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 +8582,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 +8599,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 +8619,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 +8628,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 +8642,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 +8689,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 +8700,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 +8710,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 +8721,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 +8746,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 +8808,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 +8827,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 +9015,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 +9033,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 +9053,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 +9097,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 +9119,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 +9129,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 +9216,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 +9235,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 +9254,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 +9273,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 +9288,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 +9302,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 +9316,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 +9382,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 +9393,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 +9417,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 +9425,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 +9439,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 +9462,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 +9485,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 +9630,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 +9648,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 +9659,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);
 }
@@ -9591,6 +9790,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms.h ./bfd/vms.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/vms.h	2021-12-16 01:57:38.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-2021 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,16 +110,16 @@ 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);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms-lib.c ./bfd/vms-lib.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms-lib.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/vms-lib.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 /* BFD back-end for VMS archive files.
 
-   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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;
+	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,7 +210,7 @@ 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;
@@ -202,14 +218,14 @@ vms_read_block (bfd *abfd, unsigned int
   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;
+    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;
@@ -217,30 +233,41 @@ vms_write_block (bfd *abfd, unsigned int
   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;
+    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);
 	    }
@@ -355,27 +392,27 @@ vms_traverse_index (bfd *abfd, unsigned
 	      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;
+		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,6 +423,8 @@ 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;
 
@@ -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
@@ -431,14 +483,15 @@ vms_lib_read_index (bfd *abfd, int 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;
@@ -557,14 +610,11 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum
 	  != 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 +622,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 +691,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 +705,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 +713,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 +721,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 +729,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 +764,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);
@@ -810,7 +878,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 +889,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;
+	return false;
       if (bfd_bread (hdr, sizeof (hdr), abfd->my_archive) != sizeof (hdr))
-	return FALSE;
+	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
@@ -1216,7 +1284,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 +1296,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 +1308,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 +1354,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.  */
@@ -1356,7 +1424,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 +1454,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 +1499,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 +1525,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 +1642,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 +1666,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 +1700,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 +1745,13 @@ vms_write_index (bfd *abfd,
 		      if (kbn_vbn != 0)
 			{
 			  if (!vms_write_block (abfd, kbn_vbn, kbn_blk))
-			    return FALSE;
+			    return false;
 			}
 		      else
 			{
 			  kbn_blk = bfd_malloc (VMS_BLOCK_SIZE);
 			  if (kbn_blk == NULL)
-			    return FALSE;
+			    return false;
 			}
 		      *(unsigned short *)kbn_blk = 0;
 		    }
@@ -1789,7 +1863,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;
+		    return false;
 		}
 
 	      /* Reset this block.  */
@@ -1858,7 +1932,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,7 +1956,7 @@ 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;
+	return false;
 
       free (rblk[j]);
     }
@@ -1891,16 +1965,16 @@ vms_write_index (bfd *abfd,
   if (kbn_vbn != 0)
     {
       if (!vms_write_block (abfd, kbn_vbn, kbn_blk))
-	return FALSE;
+	return false;
       free (kbn_blk);
     }
 
-  return TRUE;
+  return true;
 }
 
 /* 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)
 {
@@ -1924,7 +1998,7 @@ vms_write_data_block (bfd *arch, struct
 	  bfd_putl32 ((*off / VMS_BLOCK_SIZE) + 2, data->link);
 
 	  if (bfd_bwrite (data, sizeof (*data), arch) != sizeof (*data))
-	    return FALSE;
+	    return false;
 
 	  *off += DATA__LENGTH - doff;
 
@@ -1932,12 +2006,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 +2047,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,19 +2095,17 @@ _bfd_vms_lib_build_map (unsigned int nbr
 
   *res_cnt = map_count;
   *res = map;
-  return TRUE;
+  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;
@@ -2050,7 +2121,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 +2148,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 +2157,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 +2168,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;
+    return false;
 
   vbn = 0;
   if (!vms_write_index (NULL, symbols, nbr_symbols, &vbn, NULL, is_elfidx))
-    return FALSE;
+    return false;
   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;
+    return false;
 
   for (i = 0; i < nbr_modules; i++)
     {
@@ -2209,7 +2280,7 @@ _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.  */
@@ -2218,13 +2289,13 @@ _bfd_vms_lib_write_archive_contents (bfd
 	      sz = bfd_bread (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 +2304,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;
+    return false;
   if (!vms_write_index (arch, symbols, nbr_symbols, &vbn, &sym_idx_vbn,
 			is_elfidx))
-    return FALSE;
+    return false;
 
   /* Write libary header.  */
   {
@@ -2307,14 +2378,14 @@ _bfd_vms_lib_write_archive_contents (bfd
     idd++;
 
     if (!vms_write_block (arch, 1, blk))
-      return FALSE;
+      return false;
   }
 
-  return TRUE;
+  return true;
 
  input_err:
   bfd_set_input_error (current, bfd_get_error ());
-  return FALSE;
+  return false;
 }
 
 /* Add a target for text library.  This costs almost nothing and is useful to
@@ -2332,6 +2403,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms-misc.c ./bfd/vms-misc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/vms-misc.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/vms-misc.c	2021-12-16 01:57:38.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-2021 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.   */
@@ -425,9 +434,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 +447,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 +456,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 +492,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 +594,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/warning.m4 ./bfd/warning.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/warning.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/warning.m4	2021-12-16 01:57:38.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-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/wasm-module.c ./bfd/wasm-module.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/wasm-module.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/wasm-module.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for WebAssembly modules.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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)
     {
       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
@@ -153,11 +170,11 @@ wasm_write_uleb128 (bfd *abfd, bfd_vma v
 	c |= 0x80;
 
       if (bfd_bwrite (&c, 1, abfd) != 1)
-	return FALSE;
+	return false;
     }
   while (v);
 
-  return TRUE;
+  return true;
 }
 
 /* Read the LEB128 integer at P, saving it to X; at end of buffer,
@@ -165,37 +182,34 @@ 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)
       && 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];
@@ -204,31 +218,31 @@ wasm_read_version (bfd *abfd, bfd_boolea
       /* 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,25 @@ 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;
+  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_get_error () != bfd_error_file_truncated)
-	*errorptr = TRUE;
+	*errorptr = true;
       return EOF;
     }
 
@@ -370,22 +382,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)
     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 +405,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)
+	  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 = name;
-	  ret = sprintf (p, "%s", prefix);
-	  if (ret < 0 || (bfd_vma) ret != strlen (prefix))
-	    goto error_return;
-	  p += ret;
-	  if (bfd_bread (p, namelen, abfd) != namelen)
+	  memcpy (name, prefix, prefixlen);
+	  if (bfd_bread (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 +476,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 +502,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 +530,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;
@@ -562,7 +564,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 +575,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;
@@ -586,7 +588,7 @@ wasm_compute_section_file_positions (bfd
 
   if (bfd_bwrite (magic, sizeof (magic), abfd) != (sizeof magic)
       || bfd_bwrite (vers, sizeof (vers), abfd) != sizeof (vers))
-    return FALSE;
+    return false;
 
   for (i = 0; i < WASM_NUMBERED_SECTIONS; i++)
     numbered_sections[i] = NULL;
@@ -603,27 +605,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 +633,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;
+    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;
+    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 +702,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 +741,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)
     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 */
@@ -792,6 +801,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/wasm-module.h ./bfd/wasm-module.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/wasm-module.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/wasm-module.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* BFD back-end for WebAssembly modules.
-   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xcofflink.c ./bfd/xcofflink.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xcofflink.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/xcofflink.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 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.
@@ -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,7 @@ struct xcoff_final_link_info
   bfd_byte *external_relocs;
 };
 
-static bfd_boolean xcoff_mark (struct bfd_link_info *, asection *);
+static bool xcoff_mark (struct bfd_link_info *, asection *);
 
 
 
@@ -209,16 +209,16 @@ static bfd_boolean xcoff_mark (struct bf
 
 /* Read the contents of a section.  */
 
-static bfd_boolean
+static bool
 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 false;
     }
 
   if (coff_section_data (abfd, sec)->contents == NULL)
@@ -227,14 +227,13 @@ xcoff_get_section_contents (bfd *abfd, a
 
       if (! bfd_malloc_and_get_section (abfd, sec, &contents))
 	{
-	  if (contents != NULL)
-	    free (contents);
-	  return FALSE;
+	  free (contents);
+	  return false;
 	}
       coff_section_data (abfd, sec)->contents = contents;
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Get the size required to hold the dynamic symbols.  */
@@ -297,7 +296,7 @@ _bfd_xcoff_canonicalize_dynamic_symtab (
     return -1;
   contents = coff_section_data (abfd, lsec)->contents;
 
-  coff_section_data (abfd, lsec)->keep_contents = TRUE;
+  coff_section_data (abfd, lsec)->keep_contents = true;
 
   bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
 
@@ -526,7 +525,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;
 
@@ -593,7 +592,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 +605,9 @@ _bfd_xcoff_bfd_link_hash_table_create (b
       return NULL;
     }
 
-  ret->debug_strtab = _bfd_xcoff_stringtab_init ();
+  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 +620,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 +632,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 +651,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 +682,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 +705,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 +734,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 +766,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 +779,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 +801,21 @@ 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->flags & XCOFF_DEF_DYNAMIC) == 0
       && (h->root.type == bfd_link_hash_undefined
 	  || h->root.type == bfd_link_hash_undefweak))
-    return TRUE;
+    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 +835,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
@@ -854,11 +856,11 @@ xcoff_link_add_dynamic_symbols (bfd *abf
 	(_("%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;
+    return false;
   contents = coff_section_data (abfd, lsec)->contents;
 
   /* Remove the sections from this object, so that they do not get
@@ -900,10 +902,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 +951,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;
@@ -995,14 +997,14 @@ xcoff_link_add_dynamic_symbols (bfd *abf
   /* 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 +1015,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 +1036,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 +1127,7 @@ xcoff_link_create_extra_sections (bfd *
 	}
     }
 
-  return_value = TRUE;
+  return_value = true;
 
  end_return:
 
@@ -1198,12 +1201,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 +1214,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;
@@ -1232,7 +1235,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 +1244,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 +1254,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 +1307,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 +1320,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;
@@ -1596,7 +1602,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 +1623,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;
 
@@ -1768,19 +1774,19 @@ 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;
+	    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 = true;
 	    if (! bad)
 	      {
 		section = xcoff_data (abfd)->csects[aux.x_csect.x_scnlen.l];
 		if (section == NULL
 		    || (section->flags & SEC_HAS_CONTENTS) == 0)
-		  bad = TRUE;
+		  bad = true;
 	      }
 	    if (bad)
 	      {
@@ -1811,6 +1817,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);
@@ -1883,7 +1895,7 @@ xcoff_link_add_symbols (bfd *abfd, struc
 
       if (EXTERN_SYM_P (sym.n_sclass))
 	{
-	  bfd_boolean copy, ok;
+	  bool copy, ok;
 	  flagword flags;
 
 	  BFD_ASSERT (section != NULL);
@@ -1893,7 +1905,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 +1944,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;
@@ -2024,7 +2036,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 +2152,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 +2161,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;
 			}
@@ -2175,7 +2187,6 @@ 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)
 	    {
 	      free (coff_section_data (abfd, o)->relocs);
@@ -2185,33 +2196,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 +2225,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,15 +2256,15 @@ 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)
     /* There are no symbols, so don't try to include it.  */
-    return TRUE;
+    return true;
 
   if (! xcoff_get_section_contents (abfd, lsec))
-    return FALSE;
+    return false;
   contents = coff_section_data (abfd, lsec)->contents;
 
   bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
@@ -2290,7 +2296,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,8 +2309,8 @@ 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;
 	}
     }
 
@@ -2315,23 +2321,23 @@ xcoff_link_check_dynamic_ar_symbols (bfd
       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 +2352,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 +2365,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 +2382,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 +2397,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 +2423,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 +2465,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 +2478,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 +2490,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 +2506,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 +2525,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 +2546,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 +2574,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 +2587,30 @@ 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;
 
   /* 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 +2635,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 +2669,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 +2678,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 +2693,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 +2746,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
@@ -2750,12 +2779,12 @@ xcoff_mark_symbol (struct bfd_link_info
 
 	  /* 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 +2806,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,14 +2835,14 @@ 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.  */
@@ -2834,12 +2863,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;
 	    }
 	}
     }
@@ -2854,7 +2883,7 @@ xcoff_mark_symbol (struct bfd_link_info
 	  && (hsec->flags & SEC_MARK) == 0)
 	{
 	  if (! xcoff_mark (info, hsec))
-	    return FALSE;
+	    return false;
 	}
     }
 
@@ -2862,23 +2891,23 @@ xcoff_mark_symbol (struct bfd_link_info
       && (h->toc_section->flags & SEC_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 +2915,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,12 +2927,12 @@ 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)
+  if (bfd_is_const_section (sec)
       || (sec->flags & SEC_MARK) != 0)
-    return TRUE;
+    return true;
 
   sec->flags |= SEC_MARK;
 
@@ -2927,17 +2956,17 @@ 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);
+	  rel = xcoff_read_internal_relocs (sec->owner, sec, true,
+					    NULL, false, NULL);
 	  if (rel == NULL)
-	    return FALSE;
+	    return false;
 	  relend = rel + sec->reloc_count;
 	  for (; rel < relend; rel++)
 	    {
@@ -2953,7 +2982,7 @@ xcoff_mark (struct bfd_link_info *info,
 		  if ((h->flags & XCOFF_MARK) == 0)
 		    {
 		      if (!xcoff_mark_symbol (info, h))
-			return FALSE;
+			return false;
 		    }
 		}
 	      else
@@ -2965,13 +2994,13 @@ xcoff_mark (struct bfd_link_info *info,
 		      && (rsec->flags & SEC_MARK) == 0)
 		    {
 		      if (!xcoff_mark (info, rsec))
-			return FALSE;
+			return false;
 		    }
 		}
 
 	      /* See if this reloc needs to be copied into the .loader
 		 section.  */
-	      if (xcoff_need_ldrel_p (info, rel, h))
+	      if (xcoff_need_ldrel_p (info, rel, h, sec))
 		{
 		  ++xcoff_hash_table (info)->ldrel_count;
 		  if (h != NULL)
@@ -2981,7 +3010,6 @@ xcoff_mark (struct bfd_link_info *info,
 
 	  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)
 	    {
 	      free (coff_section_data (sec->owner, sec)->relocs);
@@ -2990,7 +3018,7 @@ xcoff_mark (struct bfd_link_info *info,
 	}
     }
 
-  return TRUE;
+  return true;
 }
 
 /* Routines that are called after all the input files have been
@@ -3036,7 +3064,7 @@ xcoff_sweep (struct bfd_link_info *info)
 /* 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 +3072,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 +3083,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 +3091,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 +3109,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 +3125,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 +3150,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 +3161,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 +3176,7 @@ 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;
 
   h->flags |= XCOFF_EXPORT;
 
@@ -3159,7 +3185,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 +3195,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,16 +3213,16 @@ 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;
@@ -3208,15 +3234,21 @@ bfd_xcoff_link_count_reloc (bfd *output_
 
   /* 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 +3256,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,9 +3281,9 @@ 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.  */
@@ -3259,7 +3291,7 @@ xcoff_mark_auto_exports (struct xcoff_li
 /* 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 +3311,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 +3320,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 +3333,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 +3346,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 +3355,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 +3375,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 +3407,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 +3425,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.
 
@@ -3477,7 +3509,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
@@ -3493,7 +3525,7 @@ xcoff_keep_symbol_p (struct bfd_link_inf
 /* Lay out the .loader section, filling in the header and the import paths.
    LIBPATH is as for bfd_xcoff_size_dynamic_sections.  */
 
-static bfd_boolean
+static bool
 xcoff_build_loader_section (struct xcoff_loader_info *ldinfo,
 			    const char *libpath)
 {
@@ -3556,7 +3588,7 @@ xcoff_build_loader_section (struct xcoff
   lsec->size = stoff + ldhdr->l_stlen;
   lsec->contents = bfd_zalloc (output_bfd, lsec->size);
   if (lsec->contents == NULL)
-    return FALSE;
+    return false;
 
   /* Set up the header.  */
   bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents);
@@ -3600,7 +3632,7 @@ xcoff_build_loader_section (struct xcoff
      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
@@ -3619,7 +3651,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,12 +3659,12 @@ 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;
   int i;
@@ -3640,16 +3672,16 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
   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.failed = false;
   ldinfo.output_bfd = output_bfd;
   ldinfo.info = info;
   ldinfo.auto_export_flags = auto_export_flags;
@@ -3674,12 +3706,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);
@@ -3709,7 +3741,7 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 
       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 +3753,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.  */
@@ -3764,7 +3796,7 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
 	    goto error_return;
 	}
       xcoff_sweep (info);
-      xcoff_hash_table (info)->gc = TRUE;
+      xcoff_hash_table (info)->gc = true;
     }
 
   /* Return special sections to the caller.  */
@@ -3782,7 +3814,7 @@ 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);
@@ -3909,7 +3941,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;
+	    return false;
 
 	  if (!keep_p)
 	    /* Use a debug_index of -2 to record that a symbol should
@@ -3923,7 +3955,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;
@@ -3964,27 +3996,25 @@ bfd_xcoff_size_dynamic_sections (bfd *ou
     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 (ldinfo.strings);
+  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,14 +4029,14 @@ 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;
 }
 
 /* Return the section that defines H.  Return null if no section does.  */
@@ -4034,7 +4064,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 +4084,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 +4095,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 +4107,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 +4124,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 +4143,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 +4159,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 +4183,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 +4402,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;
 		}
 	    }
@@ -4424,7 +4458,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 			  || (bfd_bwrite (outsym, osymesz, output_bfd)
 			      != osymesz))
-			return FALSE;
+			return false;
 		    }
 		}
 
@@ -4500,7 +4534,7 @@ xcoff_link_input_bfd (struct xcoff_final
 			{
 			  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))
 			filename = _("<corrupt>");
@@ -4509,7 +4543,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		      indx = _bfd_stringtab_add (flinfo->strtab, filename,
 						 hash, copy);
 		      if (indx == (bfd_size_type) -1)
-			return FALSE;
+			return false;
 		      aux.x_file.x_n.x_offset = STRING_SIZE_SIZE + indx;
 		    }
 		}
@@ -4624,7 +4658,7 @@ xcoff_link_input_bfd (struct xcoff_final
 			  if (bfd_seek (input_bfd, pos, SEEK_SET) != 0
 			      || (bfd_bread (flinfo->linenos, amt, input_bfd)
 				  != amt))
-			    return FALSE;
+			    return false;
 			  oline = enclosing;
 			}
 
@@ -4656,7 +4690,7 @@ xcoff_link_input_bfd (struct xcoff_final
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 			  || bfd_bwrite (flinfo->linenos + linoff,
 					 amt, output_bfd) != amt)
-			return FALSE;
+			return false;
 		      o->output_section->lineno_count += *lineno_counts;
 
 		      /* Record the offset of the symbol's line numbers
@@ -4746,7 +4780,7 @@ xcoff_link_input_bfd (struct xcoff_final
       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;
+	return false;
 
       BFD_ASSERT ((obj_raw_syment_count (output_bfd)
 		   + (outsym - flinfo->outsyms) / osymesz)
@@ -4757,7 +4791,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 +4816,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 +4833,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 +4848,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;
@@ -4861,12 +4895,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 +4982,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 +4993,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 +5006,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 +5017,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 +5025,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 +5056,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 +5067,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;
@@ -5082,7 +5120,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)
@@ -5115,7 +5153,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 +5165,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,7 +5173,7 @@ 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;
@@ -5149,15 +5187,15 @@ xcoff_find_tc0 (bfd *output_bfd, struct
   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;
+    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 +5204,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 +5215,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)
@@ -5377,7 +5415,7 @@ xcoff_write_global_symbol (struct bfd_ha
 	  iraux.x_csect.x_scnlen.l = 4;
 	}
       else
-	return FALSE;
+	return false;
 
       irel->r_type = R_POS;
       flinfo->section_info[oindx].rel_hashes[osec->reloc_count] = NULL;
@@ -5385,7 +5423,7 @@ xcoff_write_global_symbol (struct bfd_ha
 
       if (!xcoff_create_ldrel (output_bfd, flinfo, osec,
 			       output_bfd, irel, NULL, h))
-	return FALSE;
+	return false;
 
       /* We need to emit a symbol to define a csect which holds
 	 the reloc.  */
@@ -5395,7 +5433,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;
@@ -5421,7 +5459,7 @@ xcoff_write_global_symbol (struct bfd_ha
 	      amt = outsym - flinfo->outsyms;
 	      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 		  || bfd_bwrite (flinfo->outsyms, amt, output_bfd) != amt)
-		return FALSE;
+		return false;
 	      obj_raw_syment_count (output_bfd) +=
 		(outsym - flinfo->outsyms) / bfd_coff_symesz (output_bfd);
 
@@ -5466,7 +5504,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 +5529,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 +5574,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 +5607,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)
@@ -5676,16 +5714,16 @@ xcoff_write_global_symbol (struct bfd_ha
   amt = outsym - flinfo->outsyms;
   if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
       || bfd_bwrite (flinfo->outsyms, amt, output_bfd) != amt)
-    return FALSE;
+    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 +5748,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 +5780,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 +5805,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 +5842,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 +5932,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 +5971,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,7 +6002,7 @@ _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;
 		    }
 		}
 	    }
@@ -6125,7 +6163,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;
@@ -6181,7 +6219,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 		{
 		  if (! xcoff_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
@@ -6199,31 +6237,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.  */
@@ -6242,11 +6265,8 @@ _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;
-    }
+  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
@@ -6328,11 +6348,8 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 	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,10 +6358,8 @@ _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;
@@ -6352,7 +6367,9 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, st
 
   /* 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 +6381,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))
@@ -6399,7 +6422,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 +6442,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 +6454,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xcofflink.h ./bfd/xcofflink.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xcofflink.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/xcofflink.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* POWER/PowerPC XCOFF linker support.
-   Copyright (C) 2019 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,24 +18,24 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-extern bfd_boolean bfd_xcoff_split_import_path
+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_link_generate_rtinit
+  (bfd *, const char *, const char *, bool);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xsym.c ./bfd/xsym.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xsym.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/xsym.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* xSYM symbol-file support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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"
@@ -100,7 +99,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 +114,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 +126,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
@@ -1808,22 +1795,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;
     }
 
@@ -2253,7 +2229,7 @@ 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;
@@ -2270,7 +2246,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 +2297,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xsym.h ./bfd/xsym.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xsym.h	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/xsym.h	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* xSYM symbol-file support for BFD.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xtensa-isa.c ./bfd/xtensa-isa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xtensa-isa.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/xtensa-isa.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Configurable Xtensa ISA support.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -24,8 +24,8 @@
 #include "xtensa-isa.h"
 #include "xtensa-isa-internal.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,7 +223,7 @@ 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;
     }
 }
 
@@ -340,43 +340,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xtensa-modules.c ./bfd/xtensa-modules.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/bfd/xtensa-modules.c	2020-03-07 02:07:41.000000000 +0000
+++ ./bfd/xtensa-modules.c	2021-12-16 01:57:38.000000000 +0000
@@ -1,5 +1,5 @@
 /* Xtensa configuration-specific ISA information.
-   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/ChangeLog ./ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/ChangeLog	2020-03-07 02:07:41.000000000 +0000
+++ ./ChangeLog	2021-12-16 01:57:38.000000000 +0000
@@ -1,16 +1,484 @@
-2020-02-01  Sergio Durigan Junior  <sergiodj@redhat.com>
+2021-07-03  Nick Clifton  <nickc@redhat.com>
 
-	* configure.ac: Don't abort the build if trying to build GDB in tree
-	_and_ invoking with '--enable-src-release-build'.
+	* 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.
-	* src-release.sh (do_proto_toplev): Invoke 'configure' using
-	'--enable-src-release-build'.
 
-2020-01-17  Joel Brobecker  <brobecker@adacore.com>
+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.ac: Abort the build with an error if trying to build
-	GDB in tree.
 	* 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>
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/acinclude.m4 ./config/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/acinclude.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/acinclude.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/ax_count_cpus.m4 ./config/ax_count_cpus.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/ax_count_cpus.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/ax_count_cpus.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/bootstrap-lto-lean.mk ./config/bootstrap-lto-lean.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/bootstrap-lto-lean.mk	1970-01-01 00:00:00.000000000 +0000
+++ ./config/bootstrap-lto-lean.mk	2021-12-16 01:57:38.000000000 +0000
@@ -0,0 +1,17 @@
+# 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_EXPORTS = AR="$(LTO_AR)"; export AR; \
+	      RANLIB="$(LTO_RANLIB)"; export RANLIB;
+LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
+
+do-compare = /bin/true
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/bootstrap-lto.mk ./config/bootstrap-lto.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/bootstrap-lto.mk	2020-03-07 02:07:41.000000000 +0000
+++ ./config/bootstrap-lto.mk	2021-12-16 01:57:38.000000000 +0000
@@ -15,3 +15,4 @@ LTO_EXPORTS = AR="$(LTO_AR)"; export AR;
 LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
 
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/bootstrap-Og.mk ./config/bootstrap-Og.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/bootstrap-Og.mk	1970-01-01 00:00:00.000000000 +0000
+++ ./config/bootstrap-Og.mk	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/cet.m4 ./config/cet.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/cet.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/cet.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/ChangeLog ./config/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/ChangeLog	2020-03-07 02:07:41.000000000 +0000
+++ ./config/ChangeLog	2021-12-16 01:57:38.000000000 +0000
@@ -1,3 +1,159 @@
+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 +2318,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/debuginfod.m4 ./config/debuginfod.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/debuginfod.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/debuginfod.m4	2021-12-16 01:57:38.000000000 +0000
@@ -0,0 +1,28 @@
+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
+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.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/futex.m4 ./config/futex.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/futex.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/futex.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/gcc-plugin.m4 ./config/gcc-plugin.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/gcc-plugin.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/gcc-plugin.m4	2021-12-16 01:57:38.000000000 +0000
@@ -124,3 +124,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/gettext.m4 ./config/gettext.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/gettext.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/gettext.m4	2021-12-16 01:57:38.000000000 +0000
@@ -128,6 +128,13 @@ AC_DEFUN([AM_GNU_GETTEXT],
 
         AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
          [AC_TRY_LINK([#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
 ]ifelse([$2], [need-formatstring-macros],
 [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
@@ -135,10 +142,9 @@ AC_DEFUN([AM_GNU_GETTEXT],
 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],
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + __GNU_GETTEXT_SYMBOL_EXPRESSION],
             gt_cv_func_gnugettext_libc=yes,
             gt_cv_func_gnugettext_libc=no)])
 
@@ -160,6 +166,17 @@ return (int) gettext ("")]ifelse([$2], [
             LIBS="$LIBS $LIBINTL"
             dnl Now see whether libintl exists and does not depend on libiconv.
             AC_TRY_LINK([#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (0))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
 ]ifelse([$2], [need-formatstring-macros],
 [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
@@ -167,20 +184,26 @@ return (int) gettext ("")]ifelse([$2], [
 changequote(,)dnl
 typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
 changequote([,])dnl
-], [])[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)],
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + __GNU_GETTEXT_SYMBOL_EXPRESSION],
               gt_cv_func_gnugettext_libintl=yes,
               gt_cv_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
               LIBS="$LIBS $LIBICONV"
               AC_TRY_LINK([#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (0))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
 ]ifelse([$2], [need-formatstring-macros],
 [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
 #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
@@ -188,14 +211,9 @@ return (int) gettext ("")]ifelse([$2], [
 changequote(,)dnl
 typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
 changequote([,])dnl
-], [])[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)],
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + __GNU_GETTEXT_SYMBOL_EXPRESSION],
                [LIBINTL="$LIBINTL $LIBICONV"
                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                 gt_cv_func_gnugettext_libintl=yes
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/gthr.m4 ./config/gthr.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/gthr.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/gthr.m4	2021-12-16 01:57:38.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 ;;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/jobserver.m4 ./config/jobserver.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/jobserver.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/jobserver.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/largefile.m4 ./config/largefile.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/largefile.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/largefile.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/lib-link.m4 ./config/lib-link.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/lib-link.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/lib-link.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/math.m4 ./config/math.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/math.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/math.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/mh-mingw ./config/mh-mingw
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/mh-mingw	2020-03-07 02:07:41.000000000 +0000
+++ ./config/mh-mingw	2021-12-16 01:57:38.000000000 +0000
@@ -2,6 +2,11 @@
 # Vista (see PR33281 for details).
 BOOT_CFLAGS += -D__USE_MINGW_ACCESS -Wno-pedantic-ms-format
 CFLAGS += -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/no-executables.m4 ./config/no-executables.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/no-executables.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/no-executables.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/override.m4 ./config/override.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/override.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/override.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/pkg.m4 ./config/pkg.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/pkg.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/pkg.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/tls.m4 ./config/tls.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/tls.m4	2020-03-07 02:07:41.000000000 +0000
+++ ./config/tls.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/toolexeclibdir.m4 ./config/toolexeclibdir.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config/toolexeclibdir.m4	1970-01-01 00:00:00.000000000 +0000
+++ ./config/toolexeclibdir.m4	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config.guess ./config.guess
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config.guess	2020-03-07 02:07:41.000000000 +0000
+++ ./config.guess	2021-12-16 01:57:38.000000000 +0000
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2019 Free Software Foundation, Inc.
+#   Copyright 1992-2021 Free Software Foundation, Inc.
 
-timestamp='2019-04-28'
+timestamp='2021-04-21'
 
 # 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
@@ -27,12 +27,12 @@ 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>.
 
 
-me=`echo "$0" | sed -e 's,.*/,,'`
+me=$(echo "$0" | sed -e 's,.*/,,')
 
 usage="\
 Usage: $0 [OPTION]
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2021 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."
@@ -99,9 +99,11 @@ 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
-    { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+    { 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 ; } ||
 	{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
@@ -129,16 +131,14 @@ if test -f /.attbin/uname ; then
 	PATH=$PATH:/.attbin ; export PATH
 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_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+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_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
 
 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"
@@ -147,17 +147,29 @@ Linux|GNU|GNU/*)
 	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
 	EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+	eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
 
-	# 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
@@ -176,20 +188,20 @@ 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 || \
-	    echo unknown)`
+	UNAME_MACHINE_ARCH=$( (uname -p 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
+	    aarch64eb) machine=aarch64_be-unknown ;;
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
 	    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'`
+		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="$UNAME_MACHINE_ARCH"-unknown ;;
@@ -220,7 +232,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	case "$UNAME_MACHINE_ARCH" in
 	    earm*)
 		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+		abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
 		;;
 	esac
 	# The OS release
@@ -233,7 +245,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 		release='-gnu'
 		;;
 	    *)
-		release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+		release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
@@ -242,15 +254,19 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	echo "$machine-${os}${release}${abi-}"
 	exit ;;
     *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
 	echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
 	exit ;;
     *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
 	echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
 	exit ;;
+    *:SecBSD:*:*)
+	UNAME_MACHINE_ARCH=$(arch | sed 's/SecBSD.//')
+	echo "$UNAME_MACHINE_ARCH"-unknown-secbsd"$UNAME_RELEASE"
+	exit ;;
     *:LibertyBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
 	echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
 	exit ;;
     *:MidnightBSD:*:*)
@@ -262,6 +278,9 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
     *:SolidBSD:*:*)
 	echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
 	exit ;;
+    *:OS108:*:*)
+	echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
+	exit ;;
     macppc:MirBSD:*:*)
 	echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
 	exit ;;
@@ -271,26 +290,29 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
     *:Sortix:*:*)
 	echo "$UNAME_MACHINE"-unknown-sortix
 	exit ;;
+    *:Twizzler:*:*)
+	echo "$UNAME_MACHINE"-unknown-twizzler
+	exit ;;
     *:Redox:*:*)
 	echo "$UNAME_MACHINE"-unknown-redox
 	exit ;;
     mips:OSF1:*.*)
-        echo mips-dec-osf1
-        exit ;;
+	echo mips-dec-osf1
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
 		;;
 	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
 	# 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`
+	ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1)
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
 		UNAME_MACHINE=alpha ;;
@@ -328,7 +350,7 @@ 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`"
+	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
@@ -362,7 +384,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	exit ;;
     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
+	if test "$( (/bin/universe) 2>/dev/null)" = att ; then
 		echo pyramid-pyramid-sysv3
 	else
 		echo pyramid-pyramid-bsd
@@ -375,17 +397,17 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	echo sparc-icl-nx6
 	exit ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
+	case $(/usr/bin/uname -p) in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
     s390x:SunOS:*:*)
-	echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+	echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
 	exit ;;
     sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
 	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+	echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
 	exit ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
 	echo i386-pc-auroraux"$UNAME_RELEASE"
@@ -396,7 +418,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	# 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) | \
 		grep IS_64BIT_ARCH >/dev/null
@@ -404,30 +426,30 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 		SUN_ARCH=x86_64
 	    fi
 	fi
-	echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
 	exit ;;
     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/[^.]*//'`"
+	echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
 	exit ;;
     sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
+	case "$(/usr/bin/arch -k)" in
 	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
+		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/-/_/'`"
+	echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
 	exit ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos"$UNAME_RELEASE"
 	exit ;;
     sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	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"
 		;;
@@ -507,8 +529,8 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAM
 	}
 EOF
 	$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
-	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+	  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 ;;
@@ -535,11 +557,11 @@ EOF
 	exit ;;
     AViiON:dgux:*:*)
 	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+	UNAME_PROCESSOR=$(/usr/bin/uname -p)
+	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"
 	    else
@@ -563,17 +585,17 @@ EOF
 	echo m68k-tektronix-bsd
 	exit ;;
     *:IRIX*:*:*)
-	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
+	echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
 	exit ;;
     ????????: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 '
+	exit ;;               # Note that: echo "'$(uname -s)'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
 	exit ;;
     ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if test -x /usr/bin/oslevel ; then
+		IBM_REV=$(/usr/bin/oslevel)
 	else
 		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
 	fi
@@ -593,7 +615,7 @@ EOF
 			exit(0);
 			}
 EOF
-		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
 		then
 			echo "$SYSTEM_NAME"
 		else
@@ -606,15 +628,15 @@ EOF
 	fi
 	exit ;;
     *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	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
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/lslpp ] ; then
-		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
-			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+	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"
 	fi
@@ -642,14 +664,14 @@ EOF
 	echo m68k-hp-bsd4.4
 	exit ;;
     9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+	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
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		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
 		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
 		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
@@ -661,7 +683,7 @@ EOF
 			esac ;;
 		    esac
 		fi
-		if [ "$HP_ARCH" = "" ]; then
+		if test "$HP_ARCH" = ""; then
 		    set_cc_for_build
 		    sed 's/^		//' << EOF > "$dummy.c"
 
@@ -696,11 +718,11 @@ EOF
 		    exit (0);
 		}
 EOF
-		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
 		    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
 
@@ -724,7 +746,7 @@ EOF
 	echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
 	exit ;;
     ia64:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+	HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
 	echo ia64-hp-hpux"$HPUX_REV"
 	exit ;;
     3050*:HI-UX:*:*)
@@ -754,7 +776,7 @@ EOF
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
 		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
 	exit ;;
@@ -774,7 +796,7 @@ EOF
 	echo hppa1.0-hp-osf
 	exit ;;
     i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
+	if test -x /usr/sbin/sysversion ; then
 	    echo "$UNAME_MACHINE"-unknown-osf1mk
 	else
 	    echo "$UNAME_MACHINE"-unknown-osf1
@@ -823,14 +845,14 @@ EOF
 	echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     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/ /_/'`
+	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 ;;
     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/ /_/'`
+	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 ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -843,25 +865,25 @@ EOF
 	echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
 	exit ;;
     arm:FreeBSD:*:*)
-	UNAME_PROCESSOR=`uname -p`
+	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
+	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
 	else
-	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
 	fi
 	exit ;;
     *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	UNAME_PROCESSOR=$(/usr/bin/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/[-(].*//'`"
+	echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
 	exit ;;
     i*:CYGWIN*:*)
 	echo "$UNAME_MACHINE"-pc-cygwin
@@ -897,15 +919,15 @@ EOF
 	echo x86_64-pc-cygwin
 	exit ;;
     prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
+	echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
 	exit ;;
     *: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"
+	echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
 	exit ;;
     *:Minix:*:*)
 	echo "$UNAME_MACHINE"-unknown-minix
@@ -918,7 +940,7 @@ EOF
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     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 ;;
@@ -931,7 +953,7 @@ EOF
 	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
+    arc:Linux:*:* | arceb:Linux:*:* | arc64:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     arm*:Linux:*:*)
@@ -977,6 +999,9 @@ EOF
     k1om:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
+    loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	exit ;;
     m32r*:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
@@ -1027,7 +1052,7 @@ EOF
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
+	eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
 	test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
 	;;
     mips64el:Linux:*:*)
@@ -1047,7 +1072,7 @@ EOF
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	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" ;;
@@ -1065,7 +1090,7 @@ EOF
     ppcle:Linux:*:*)
 	echo powerpcle-unknown-linux-"$LIBC"
 	exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
+    riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
@@ -1087,7 +1112,17 @@ EOF
 	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
 	exit ;;
     x86_64:Linux:*:*)
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+	set_cc_for_build
+	LIBCABI=$LIBC
+	if test "$CC_FOR_BUILD" != no_compiler_found; then
+	    if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_X32 >/dev/null
+	    then
+		LIBCABI="$LIBC"x32
+	    fi
+	fi
+	echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
 	exit ;;
     xtensa*:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -1127,7 +1162,7 @@ EOF
 	echo "$UNAME_MACHINE"-pc-msdosdjgpp
 	exit ;;
     i*86:*:4.*:*)
-	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+	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"
 	else
@@ -1136,7 +1171,7 @@ EOF
 	exit ;;
     i*86:*:5:[678]*)
 	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
+	case $(/bin/uname -X | grep "^Machine") in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
@@ -1145,10 +1180,10 @@ EOF
 	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
 		echo "$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/.*= //')`
+		UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
 		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
 			&& UNAME_MACHINE=i586
@@ -1198,7 +1233,7 @@ EOF
     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)
 	OS_REL=''
 	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	&& OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
 	  && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1209,7 +1244,7 @@ EOF
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	    && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
 	    && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1242,7 +1277,7 @@ EOF
 	exit ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		UNAME_MACHINE=$( (uname -p) 2>/dev/null)
 		echo "$UNAME_MACHINE"-sni-sysv4
 	else
 		echo ns32k-sni-sysv
@@ -1276,7 +1311,7 @@ EOF
 	echo mips-sony-newsos6
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
+	if test -d /usr/nec; then
 		echo mips-nec-sysv"$UNAME_RELEASE"
 	else
 		echo mips-unknown-sysv"$UNAME_RELEASE"
@@ -1324,44 +1359,48 @@ EOF
     *:Rhapsody:*:*)
 	echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
 	exit ;;
+    arm64:Darwin:*:*)
+	echo aarch64-apple-darwin"$UNAME_RELEASE"
+	exit ;;
     *: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 ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
+	UNAME_PROCESSOR=$(uname -p)
 	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
@@ -1429,10 +1468,10 @@ EOF
 	echo mips-sei-seiux"$UNAME_RELEASE"
 	exit ;;
     *:DragonFly:*:*)
-	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+	echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
 	exit ;;
     *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=$( (uname -p) 2>/dev/null)
 	case "$UNAME_MACHINE" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1442,13 +1481,13 @@ EOF
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
+	echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
 	exit ;;
     i*86:rdos:*:*)
 	echo "$UNAME_MACHINE"-pc-rdos
 	exit ;;
-    i*86:AROS:*:*)
-	echo "$UNAME_MACHINE"-pc-aros
+    *:AROS:*:*)
+	echo "$UNAME_MACHINE"-unknown-aros
 	exit ;;
     x86_64:VMkernel:*:*)
 	echo "$UNAME_MACHINE"-unknown-esx
@@ -1500,7 +1539,7 @@ main ()
 #define __ARCHITECTURE__ "m68k"
 #endif
   int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
   if (version < 4)
     printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
   else
@@ -1592,7 +1631,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.
@@ -1617,9 +1656,15 @@ 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
+
+year=$(echo $timestamp | sed 's,-.*,,')
+# shellcheck disable=SC2003
+if test "$(expr "$(date +%Y)" - "$year")" -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
@@ -1627,26 +1672,27 @@ provide the necessary information to han
 
 config.guess timestamp = $timestamp
 
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+uname -m = $( (uname -m) 2>/dev/null || echo unknown)
+uname -r = $( (uname -r) 2>/dev/null || echo unknown)
+uname -s = $( (uname -s) 2>/dev/null || echo unknown)
+uname -v = $( (uname -v) 2>/dev/null || echo unknown)
+
+/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
+/bin/uname -X     = $( (/bin/uname -X) 2>/dev/null)
+
+hostinfo               = $( (hostinfo) 2>/dev/null)
+/bin/universe          = $( (/bin/universe) 2>/dev/null)
+/usr/bin/arch -k       = $( (/usr/bin/arch -k) 2>/dev/null)
+/bin/arch              = $( (/bin/arch) 2>/dev/null)
+/usr/bin/oslevel       = $( (/usr/bin/oslevel) 2>/dev/null)
+/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
 
 UNAME_MACHINE = "$UNAME_MACHINE"
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config.sub ./config.sub
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/config.sub	2020-03-07 02:07:41.000000000 +0000
+++ ./config.sub	2021-12-16 01:57:38.000000000 +0000
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2019 Free Software Foundation, Inc.
+#   Copyright 1992-2021 Free Software Foundation, Inc.
 
-timestamp='2019-05-23'
+timestamp='2021-04-30'
 
 # 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,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,7 +50,7 @@ timestamp='2019-05-23'
 #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
-me=`echo "$0" | sed -e 's,.*/,,'`
+me=$(echo "$0" | sed -e 's,.*/,,')
 
 usage="\
 Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
@@ -67,7 +67,7 @@ Report bugs and patches to <config-patch
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2021 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."
@@ -124,28 +124,27 @@ case $1 in
 		;;
 	*-*-*-*)
 		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*)
 				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 +153,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 +161,7 @@ case $1 in
 					# Prevent following clause from handling this valid os
 					sun*os*)
 						basic_machine=$field1
-						os=$field2
+						basic_os=$field2
 						;;
 					# Manufacturers
 					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
@@ -175,11 +174,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 +190,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 +686,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 +706,7 @@ case $basic_machine in
 	dpx2*)
 		cpu=m68k
 		vendor=bull
-		os=sysv3
+		basic_os=sysv3
 		;;
 	encore | umax | mmax)
 		cpu=ns32k
@@ -715,7 +715,7 @@ case $basic_machine in
 	elxsi)
 		cpu=elxsi
 		vendor=elxsi
-		os=${os:-bsd}
+		basic_os=${basic_os:-bsd}
 		;;
 	fx2800)
 		cpu=i860
@@ -728,7 +728,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
@@ -769,38 +769,38 @@ case $basic_machine in
 		vendor=hp
 		;;
 	i*86v32)
-		cpu=`echo "$1" | sed -e 's/86.*/86/'`
+		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/'`
+		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/'`
+		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/'`
+		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 +811,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 +841,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 +883,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 +905,7 @@ case $basic_machine in
 	w89k-*)
 		cpu=hppa1.1
 		vendor=winbond
-		os=proelf
+		basic_os=proelf
 		;;
 	none)
 		cpu=none
@@ -917,7 +917,7 @@ case $basic_machine in
 		;;
 	leon-*|leon[3-9]-*)
 		cpu=sparc
-		vendor=`echo "$basic_machine" | sed 's/-.*//'`
+		vendor=$(echo "$basic_machine" | sed 's/-.*//')
 		;;
 
 	*-*)
@@ -958,11 +958,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
@@ -1006,7 +1006,7 @@ case $cpu-$vendor in
 	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 +1015,7 @@ case $cpu-$vendor in
 		;;
 	blackfin-*)
 		cpu=bfin
-		os=linux
+		basic_os=linux
 		;;
 	c54x-*)
 		cpu=tic54x
@@ -1028,7 +1028,7 @@ case $cpu-$vendor in
 		;;
 	e500v[12]-*)
 		cpu=powerpc
-		os=$os"spe"
+		basic_os=${basic_os}"spe"
 		;;
 	mips3*-*)
 		cpu=mips64
@@ -1038,7 +1038,7 @@ case $cpu-$vendor in
 		;;
 	m68knommu-*)
 		cpu=m68k
-		os=linux
+		basic_os=linux
 		;;
 	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
 		cpu=s12z
@@ -1048,7 +1048,7 @@ case $cpu-$vendor in
 		;;
 	parisc-*)
 		cpu=hppa
-		os=linux
+		basic_os=linux
 		;;
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 		cpu=i586
@@ -1084,7 +1084,7 @@ case $cpu-$vendor in
 		cpu=mipsisa64sb1el
 		;;
 	sh5e[lb]-*)
-		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+		cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
 		;;
 	spur-*)
 		cpu=spur
@@ -1102,13 +1102,16 @@ case $cpu-$vendor in
 		cpu=x86_64
 		;;
 	xscale-* | xscalee[bl]-*)
-		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+		cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
+		;;
+	arm64-*)
+		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 +1122,7 @@ case $cpu-$vendor in
 		vendor=axis
 		;;
 	crx-*)
-		os=${os:-elf}
+		basic_os=${basic_os:-elf}
 		;;
 	neo-tandem)
 		cpu=neo
@@ -1141,16 +1144,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}
 		;;
 
 	*)
@@ -1166,8 +1165,8 @@ case $cpu-$vendor in
 			| alphapca5[67] | alpha64pca5[67] \
 			| am33_2.0 \
 			| amdgcn \
-			| arc | arceb \
-			| arm  | arm[lb]e | arme[lb] | armv* \
+			| arc | arceb | arc64 \
+			| arm | arm[lb]e | arme[lb] | armv* \
 			| avr | avr32 \
 			| asmjs \
 			| ba \
@@ -1186,6 +1185,7 @@ case $cpu-$vendor in
 			| k1om \
 			| le32 | le64 \
 			| lm32 \
+			| loongarch32 | loongarch64 | loongarchx32 \
 			| m32c | m32r | m32rle \
 			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
 			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
@@ -1204,9 +1204,13 @@ case $cpu-$vendor in
 			| mips64vr5900 | mips64vr5900el \
 			| mipsisa32 | mipsisa32el \
 			| mipsisa32r2 | mipsisa32r2el \
+			| mipsisa32r3 | mipsisa32r3el \
+			| mipsisa32r5 | mipsisa32r5el \
 			| mipsisa32r6 | mipsisa32r6el \
 			| mipsisa64 | mipsisa64el \
 			| mipsisa64r2 | mipsisa64r2el \
+			| mipsisa64r3 | mipsisa64r3el \
+			| mipsisa64r5 | mipsisa64r5el \
 			| mipsisa64r6 | mipsisa64r6el \
 			| mipsisa64sb1 | mipsisa64sb1el \
 			| mipsisa64sr71k | mipsisa64sr71kel \
@@ -1230,8 +1234,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 +1246,7 @@ case $cpu-$vendor in
 			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
 			| spu \
 			| tahoe \
+			| thumbv7* \
 			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
 			| tron \
 			| ubicom32 \
@@ -1278,8 +1284,47 @@ 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 caes, or perhaps split kernel-os, or else just
+# set os.
+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
+		IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+		;;
+	# 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|')
+		;;
+	*)
+		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 +1336,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 +1344,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 +1365,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,78 +1376,26 @@ 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*)
-		os=`echo "$os" | sed -e 's|mac|macos|'`
+	mac[0-9]*)
+		os=$(echo "$os" | sed -e 's|mac|macos|')
 		;;
 	opened*)
 		os=openedition
@@ -1417,10 +1404,10 @@ case $os in
 		os=os400
 		;;
 	sunos5*)
-		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+		os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
 		;;
 	sunos6*)
-		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+		os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
 		;;
 	wince*)
 		os=wince
@@ -1452,12 +1439,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 +1464,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
 		;;
@@ -1508,19 +1486,11 @@ case $os in
 			;;
 		esac
 		;;
-	nacl*)
-		;;
-	ios)
-		;;
-	none)
-		;;
-	*-eabi)
-		;;
 	*)
-		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,6 +1503,7 @@ else
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
+kernel=
 case $cpu-$vendor in
 	score-*)
 		os=elf
@@ -1544,7 +1515,8 @@ case $cpu-$vendor in
 		os=riscix1.2
 		;;
 	arm*-rebel)
-		os=linux
+		kernel=linux
+		os=gnu
 		;;
 	arm*-semi)
 		os=aout
@@ -1710,84 +1682,178 @@ case $cpu-$vendor in
 		os=none
 		;;
 esac
+
 fi
 
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+	# Sometimes we do "kernel-libc", so those need to count as OSes.
+	musl* | newlib* | uclibc*)
+		;;
+	# Likewise for "kernel-abi"
+	eabi* | gnueabi*)
+		;;
+	# VxWorks passes extra cpu info in the 4th filed.
+	simlinux | simwindows | spe)
+		;;
+	# 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* \
+	     | 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* | aout* | elf* | oabi* \
+	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
+	     | chorusrdb* | cegcc* | glidix* | serenity* \
+	     | cygwin* | msys* | pe* | 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*)
+		;;
+	# 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)
+		;;
+	*)
+		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 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 in
+	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+		;;
+	uclinux-uclibc* )
+		;;
+	-dietlibc* | -newlib* | -musl* | -uclibc* )
+		# 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
+		;;
+	kfreebsd*-gnu* | kopensolaris*-gnu*)
+		;;
+	vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+		;;
+	nto-qnx*)
+		;;
+	os2-emx)
+		;;
+	*-eabi* | *-gnueabi*)
+		;;
+	-*)
+		# Blank kernel with real OS 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"
 exit
 
 # Local variables:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/configure ./configure
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/configure	2020-03-07 02:07:41.000000000 +0000
+++ ./configure	2021-12-16 01:57:38.000000000 +0000
@@ -616,6 +616,8 @@ GFORTRAN_FOR_TARGET
 GCC_FOR_TARGET
 CXX_FOR_TARGET
 CC_FOR_TARGET
+RANLIB_PLUGIN_OPTION
+AR_PLUGIN_OPTION
 READELF
 OBJDUMP
 OBJCOPY
@@ -690,6 +692,9 @@ extra_mpc_gmp_configure_flags
 extra_mpfr_configure_flags
 gmpinc
 gmplibs
+PGO_BUILD_LTO_CFLAGS
+PGO_BUILD_USE_CFLAGS
+PGO_BUILD_GEN_CFLAGS
 do_compare
 GNATMAKE
 GNATBIND
@@ -790,6 +795,7 @@ enable_libssp
 enable_libstdcxx
 enable_liboffloadmic
 enable_bootstrap
+enable_pgo_build
 with_mpc
 with_mpc_include
 with_mpc_lib
@@ -1520,6 +1526,8 @@ Optional Features:
   --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
@@ -2279,23 +2287,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-if test x"${enable_gdb}" != x"no" -a x"${enable_src_release_build}" != x"yes"; then
-  # For this branch, we do not support building GDB in-tree.
-  # Try to detect whether we are in this situation or not by
-  # searching for a couple of known files in the source directory.
-  if test -f gnulib/update-gnulib.sh -a -f gdb/ChangeLog; then
-    as_fn_error $? "GDB must be configured and built in a directory separate from its sources.
-
-To do so, create a dedicated directory for your GDB build and invoke
-the configure script from that directory:
-
-      $ mkdir build
-      $ cd build
-      $ <full path to your sources>/gdb-VERSION/configure [etc...]
-      $ make" "$LINENO" 5
-  fi
-fi
-
 progname=$0
 # if PWD already has a value, it is probably wrong.
 if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
@@ -2798,7 +2789,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 gotools"
 
 # 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)
@@ -3451,9 +3442,6 @@ case "${target}" in
   arm-wince-pe)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
-  arm*-*-symbianelf*)
-    noconfigdirs="$noconfigdirs target-libffi"
-    ;;
   cris-*-* | crisv32-*-*)
     case "${target}" in
       *-*-linux*)
@@ -3505,6 +3493,25 @@ case "${target}" in
     ;;
 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
@@ -3824,6 +3831,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"
@@ -4793,6 +4803,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'
@@ -5415,6 +5602,91 @@ if test "$enable_bootstrap:$GXX" = "yes:
   CXX="$CXX -std=gnu++98"
 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; }
@@ -5604,8 +5876,7 @@ if test -d ${srcdir}/gcc && test "x$have
   # 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
@@ -7223,13 +7494,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.
 
@@ -7320,6 +7598,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.
@@ -9998,6 +10282,150 @@ fi
 
 
 
+{ $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
+else
+  if test "$enable_pgo_build" != "no"; then
+    as_fn_error $? "AR with --plugin and rc is required for LTO build" "$LINENO" 5
+  fi
+fi
+
+
+
 # Target tools.
 
 # Check whether --with-build-time-tools was given.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/configure.ac ./configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/configure.ac	2020-03-07 02:11:44.000000000 +0000
+++ ./configure.ac	2021-12-16 02:00:37.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, 2020 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,7 @@ m4_include(config/acx.m4)
 m4_include(config/override.m4)
 m4_include(config/proginstall.m4)
 m4_include(config/elf.m4)
+m4_include(config/gcc-plugin.m4)
 m4_include([libtool.m4])
 m4_include([ltoptions.m4])
 m4_include([ltsugar.m4])
@@ -33,23 +34,6 @@ m4_include([config/isl.m4])
 AC_INIT(move-if-change)
 AC_DISABLE_OPTION_CHECKING
 
-if test x"${enable_gdb}" != x"no" -a x"${enable_src_release_build}" != x"yes"; then
-  # For this branch, we do not support building GDB in-tree.
-  # Try to detect whether we are in this situation or not by
-  # searching for a couple of known files in the source directory.
-  if test -f gnulib/update-gnulib.sh -a -f gdb/ChangeLog; then
-    AC_MSG_ERROR([GDB must be configured and built in a directory separate from its sources.
-
-To do so, create a dedicated directory for your GDB build and invoke
-the configure script from that directory:
-
-      $ mkdir build
-      $ cd build
-      $ <full path to your sources>/gdb-VERSION/configure [[etc...]]
-      $ make])
-  fi
-fi
-
 progname=$0
 # if PWD already has a value, it is probably wrong.
 if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
@@ -156,7 +140,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 gotools"
 
 # 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)
@@ -744,9 +728,6 @@ case "${target}" in
   arm-wince-pe)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
-  arm*-*-symbianelf*)
-    noconfigdirs="$noconfigdirs target-libffi"
-    ;;
   cris-*-* | crisv32-*-*)
     case "${target}" in
       *-*-linux*)
@@ -798,6 +779,22 @@ case "${target}" in
     ;;
 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
@@ -1117,6 +1114,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"
@@ -1278,7 +1278,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
@@ -1372,6 +1372,65 @@ if test "$enable_bootstrap:$GXX" = "yes:
   CXX="$CXX -std=gnu++98"
 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
 
@@ -2743,13 +2802,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.
 
@@ -2840,6 +2906,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],
@@ -3370,6 +3442,24 @@ AC_SUBST(CXX)
 AC_SUBST(CFLAGS)
 AC_SUBST(CXXFLAGS)
 
+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
+else
+  if test "$enable_pgo_build" != "no"; then
+    AC_MSG_ERROR([AR with --plugin and rc is required for LTO build])
+  fi
+fi
+AC_SUBST(AR_PLUGIN_OPTION)
+AC_SUBST(RANLIB_PLUGIN_OPTION)
+
 # Target tools.
 AC_ARG_WITH([build-time-tools], 
   [AS_HELP_STRING([--with-build-time-tools=PATH],
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/ChangeLog ./contrib/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/ChangeLog	2020-03-07 02:07:41.000000000 +0000
+++ ./contrib/ChangeLog	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/dg-extract-results.py ./contrib/dg-extract-results.py
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/dg-extract-results.py	2020-03-07 02:07:41.000000000 +0000
+++ ./contrib/dg-extract-results.py	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/dg-extract-results.sh ./contrib/dg-extract-results.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/dg-extract-results.sh	2020-03-07 02:07:41.000000000 +0000
+++ ./contrib/dg-extract-results.sh	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/mklog.py ./contrib/mklog.py
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/contrib/mklog.py	1970-01-01 00:00:00.000000000 +0000
+++ ./contrib/mklog.py	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/bpf.cpu ./cpu/bpf.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/bpf.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/bpf.cpu	2021-12-16 01:57:38.000000000 +0000
@@ -32,8 +32,12 @@
   (name bpf)
   (comment "Linux kernel BPF")
   (insn-lsb0? #t)
-  (machs bpf)
-  (isas ebpfle ebpfbe))
+  ;; XXX explain the default-alignment setting is for the simulator.
+  ;; It is confusing that the simulator follows the emulated memory
+  ;; access conventions for fetching instructions by pieces...
+  (default-alignment unaligned)
+  (machs bpf xbpf)
+  (isas ebpfle ebpfbe xbpfle xbpfbe))
 
 ;;;; The ISAs
 
@@ -94,34 +98,46 @@
     ;; 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)))
+    ;; Number of bits of insn that can be initially fetched.  This is
+    ;; the size of the smallest insn.
+    (base-insn-bitsize 64)))
 
 (define-bpf-isa le)
 (define-bpf-isa be)
 
-(define-pmacro all-isas () (ISA ebpfle,ebpfbe))
+(define-pmacro (define-xbpf-isa x-endian)
+  (define-isa
+    (name (.sym xbpf x-endian))
+    (comment "The xBPF instruction set")
+    (default-insn-word-bitsize 64)
+    (default-insn-bitsize 64)
+    (base-insn-bitsize 64)))
+
+(define-xbpf-isa le)
+(define-xbpf-isa be)
+
+(define-pmacro all-isas () (ISA ebpfle,ebpfbe,xbpfle,xbpfbe))
+(define-pmacro xbpf-isas () (ISA xbpfle,xbpfbe))
+
+(define-pmacro (endian-isas x-endian)
+  ((ISA (.sym ebpf x-endian) (.sym xbpf x-endian))))
 
 ;;;; Hardware Hierarchy
 
 ;;
-;;     bpf         architecture
-;;      |
-;;    bpfbf        cpu-family
-;;      |
-;;     bpf         machine
-;;      |
-;;   bpf-def       model
+;;         bpf            architecture
+;;          |
+;;        bpfbf           cpu-family
+;;      /       \
+;;     bpf     xbpf       machine
+;;      |       |
+;;   bpf-def  xbpf-def    model
 
 (define-cpu
   (name bpfbf)
   (comment "Linux kernel eBPF virtual CPU")
-  (word-bitsize 32))
+  (insn-endian big)
+  (word-bitsize 64))
 
 (define-mach
   (name bpf)
@@ -142,6 +158,25 @@
     () ; profile action (default)
     ))
 
+(define-mach
+  (name xbpf)
+  (comment "Experimental BPF")
+  (cpu bpfbf)
+  (isas ebpfle ebpfbe xbpfle xbpfbe))
+
+(define-model
+  (name xbpf-def)
+  (comment "xBPF default model")
+  (mach xbpf)
+  (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
@@ -150,7 +185,7 @@
 (define-hardware
   (name h-gpr)
   (comment "General Purpose Registers")
-  (attrs all-isas (MACH bpf))
+  (attrs all-isas (MACH bpf xbpf))
   (type register DI (16))
   (indices keyword "%"
            ;; XXX the frame pointer fp is read-only, so it should
@@ -159,13 +194,19 @@
             (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))))
+            (r0 0) (r6 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) () () ())
-
+(define-hardware
+  (name h-pc)
+  (comment "program counter")
+  (attrs PC PROFILE all-isas)
+  (type pc UDI)
+  (get () (raw-reg h-pc))
+  (set (newval) (set (raw-reg h-pc) newval)))
+  
 ;; 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
@@ -208,6 +249,8 @@
    (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)
+   ;; xBPF-only: signed div, signed mod
+   (SDIV #xe) (SMOD #xf)
    ;; 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)
@@ -222,7 +265,7 @@
 (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)))
+   (ALU   #b100) (JMP   #b101) (JMP32 #b110) (ALU64 #b111)))
 
 ;; For load/store instructions, the 8-bit code field is subdivided in:
 ;;
@@ -252,11 +295,11 @@
 ;; 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-dstle "eBPF dst register field" ((ISA ebpfle xbpfle)) 8 8 3 4 UINT)
+(dwf f-srcle "eBPF source register field" ((ISA ebpfle xbpfle)) 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-dstbe "eBPF dst register field" ((ISA ebpfbe xbpfbe)) 8 8 7 4 UINT)
+(dwf f-srcbe "eBPF source register field" ((ISA ebpfbe xbpfbe)) 8 8 3 4 UINT)
 
 (dwf f-regs "eBPF registers field" (all-isas) 8 8 7 8 UINT)
 
@@ -266,7 +309,7 @@
 ;; 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-offset16 "eBPF offset field" (all-isas) 16 16 15 16 HI)
 (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
@@ -288,19 +331,19 @@
                     (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)))))))
+                          (or (sll UDI (zext UDI (ifield f-imm64-c)) (const 32))
+                              (zext UDI (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 dstle "destination register" ((ISA ebpfle xbpfle)) h-gpr f-dstle)
+(dno srcle "source register" ((ISA ebpfle xbpfle)) h-gpr f-srcle)
 
-(dno dstbe "destination register" ((ISA ebpfbe)) h-gpr f-dstbe)
-(dno srcbe "source register" ((ISA ebpfbe)) h-gpr f-srcbe)
+(dno dstbe "destination register" ((ISA ebpfbe xbpfbe)) h-gpr f-dstbe)
+(dno srcbe "source register" ((ISA ebpfbe xbpfbe)) h-gpr f-srcbe)
 
 ;; Jump instructions have a 16-bit PC-relative address.
 ;; CALL instructions have a 32-bit PC-relative address.
@@ -361,60 +404,103 @@
 ;;   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 `i' variants perform `dst OP imm32 -> dst' operations.
+;; The `r' variants perform `dst OP src -> 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)
+(define-pmacro (define-alu-insn-un x-basename x-suffix x-op-class x-op-code
+                 x-endian x-mode x-semop)
   (dni (.sym x-basename x-suffix x-endian)
        (.str x-basename x-suffix)
-       ((ISA (.sym ebpf x-endian)))
+       (endian-isas 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) () ()))
+          x-op-class OP_SRC_K x-op-code)
+       (set x-mode (.sym dst x-endian) (x-semop x-mode (.sym dst x-endian)))
+       ()))
 
-(define-pmacro (define-alu-insn-bin x-basename x-suffix x-op-class x-op-code x-endian)
+(define-pmacro (define-alu-insn-bin x-basename x-suffix x-op-class x-op-code
+                 x-endian x-mode x-semop x-isas)
   (begin
+    ;; dst = dst OP immediate
     (dni (.sym x-basename x-suffix "i" x-endian)
          (.str x-basename x-suffix " immediate")
-         ((ISA (.sym ebpf x-endian)))
+         (.splice (.unsplice x-isas))
          (.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) () ())
+            x-op-class OP_SRC_K x-op-code)
+         (set x-mode (.sym dst x-endian) (x-semop x-mode (.sym dst x-endian) imm32))
+         ())
+    ;; dst = dst OP src
     (dni (.sym x-basename x-suffix "r" x-endian)
          (.str x-basename x-suffix " register")
-         ((ISA (.sym ebpf x-endian)))
+         (.splice (.unsplice x-isas))
          (.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) () ())))
+            x-op-class OP_SRC_X x-op-code)
+         (set x-mode (.sym dst x-endian)
+                      (x-semop x-mode (.sym dst x-endian) (.sym src x-endian)))
+         ())))
 
-(define-pmacro (daiu x-basename x-op-code x-endian)
+(define-pmacro (define-alu-insn-mov x-basename x-suffix x-op-class x-op-code
+                 x-endian x-mode)
   (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)))
+    (dni (.sym mov x-suffix "i" x-endian)
+         (.str mov x-suffix " immediate")
+         (endian-isas 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)
+         (set x-mode (.sym dst x-endian) imm32)
+         ())
+    (dni (.sym mov x-suffix "r" x-endian)
+         (.str mov x-suffix " register")
+         (endian-isas 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)
+         (set x-mode (.sym dst x-endian) (.sym src x-endian))
+         ())))
+
 
-(define-pmacro (daib x-basename x-op-code x-endian)
+;; Unary ALU instructions (neg)
+(define-pmacro (daiu x-basename x-op-code x-endian x-semop)
   (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-alu-insn-un x-basename "" OP_CLASS_ALU64 x-op-code x-endian DI x-semop)
+    (define-alu-insn-un x-basename "32" OP_CLASS_ALU x-op-code x-endian USI x-semop)))
+
+;; Binary ALU instructions (all the others)
+;; For ALU32: DST = (u32) DST OP (u32) SRC is correct semantics
+(define-pmacro (daib x-basename x-op-code x-endian x-semop x-isas)
+  (begin
+    (define-alu-insn-bin x-basename "" OP_CLASS_ALU64 x-op-code x-endian DI x-semop x-isas)
+    (define-alu-insn-bin x-basename "32" OP_CLASS_ALU x-op-code x-endian USI x-semop x-isas)))
+
+;; Move ALU instructions (mov)
+(define-pmacro (daim x-basename x-op-code x-endian)
+  (begin
+    (define-alu-insn-mov x-basename "" OP_CLASS_ALU64 x-op-code x-endian DI)
+    (define-alu-insn-mov x-basename "32" OP_CLASS_ALU x-op-code x-endian USI)))
 
 (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)))
+    (daib add OP_CODE_ADD x-endian add (endian-isas x-endian))
+    (daib sub OP_CODE_SUB x-endian sub (endian-isas x-endian))
+    (daib mul OP_CODE_MUL x-endian mul (endian-isas x-endian))
+    (daib div OP_CODE_DIV x-endian udiv (endian-isas x-endian))
+    (daib or  OP_CODE_OR x-endian or (endian-isas x-endian))
+    (daib and OP_CODE_AND x-endian and (endian-isas x-endian))
+    (daib lsh OP_CODE_LSH x-endian sll (endian-isas x-endian))
+    (daib rsh OP_CODE_RSH x-endian srl (endian-isas x-endian))
+    (daib mod OP_CODE_MOD x-endian umod (endian-isas x-endian))
+    (daib xor OP_CODE_XOR x-endian xor (endian-isas x-endian))
+    (daib arsh OP_CODE_ARSH x-endian sra (endian-isas x-endian))
+    (daib sdiv OP_CODE_SDIV x-endian div ((ISA (.sym xbpf x-endian))))
+    (daib smod OP_CODE_SMOD x-endian mod ((ISA (.sym xbpf x-endian))))
+    (daiu neg OP_CODE_NEG x-endian neg)
+    (daim mov OP_CODE_MOV x-endian)))
 
 (define-alu-instructions le)
 (define-alu-instructions be)
@@ -435,10 +521,13 @@
 (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)))
+       (endian-isas 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) () ()))
+           OP_CLASS_ALU x-op-src OP_CODE_END)
+       (set (.sym dst x-endian)
+            (c-call DI (.str "bpfbf_end" x-suffix) (.sym dst x-endian) endsize))
+       ()))
 
 (define-endian-insn "le" OP_SRC_K le)
 (define-endian-insn "be" OP_SRC_X le)
@@ -457,11 +546,13 @@
 (define-pmacro (define-lddw x-endian)
   (dni (.sym lddw x-endian)
        (.str "lddw" x-endian)
-       ((ISA (.sym ebpf x-endian)))
+       (endian-isas 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) () ()))
+          OP_CLASS_LD OP_SIZE_DW OP_MODE_IMM)
+       (set DI (.sym dst x-endian) imm64)
+       ()))
 
 (define-lddw le)
 (define-lddw be)
@@ -471,19 +562,29 @@
 ;;
 ;; LDABS{w,h,b,dw}
 
-(define-pmacro (dlabs x-suffix x-size)
+(define-pmacro (dlabs x-suffix x-size x-smode)
   (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)
+       (set x-smode
+            (reg x-smode h-gpr 0)
+            (mem x-smode
+                 (add DI
+                      (mem DI
+                           (add DI
+                                (reg DI h-gpr 6) ;; Pointer to struct sk_buff
+                                (c-call "bpfbf_skb_data_offset")))
+                      imm32)))
+       ;; XXX this clobbers R1-R5
+       ()))
+
+(dlabs "w" W SI)
+(dlabs "h" H HI)
+(dlabs "b" B QI)
+(dlabs "dw" DW DI)
 
 ;; The indirect load instructions are non-generic loads designed to be
 ;; used in socket filters.  They come in several variants:
@@ -491,21 +592,33 @@
 ;; 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)
+(define-pmacro (dlind x-suffix x-size x-endian x-smode)
   (dni (.sym "ldind" x-suffix x-endian)
        (.str "ldind" x-suffix)
-       ((ISA (.sym ebpf x-endian)))
+       (endian-isas 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))
-       () ()))
+       (set x-smode
+            (reg x-smode h-gpr 0)
+            (mem x-smode
+                 (add DI
+                      (mem DI
+                           (add DI
+                                (reg DI h-gpr 6) ;; Pointer to struct sk_buff
+                                (c-call "bpfbf_skb_data_offset")))
+                      (add DI
+                           (.sym src x-endian)
+                           imm32))))
+       ;; XXX this clobbers R1-R5
+       ()))
 
 (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)))
+    (dlind "w" W x-endian SI)
+    (dlind "h" H x-endian HI)
+    (dlind "b" B x-endian QI)
+    (dlind "dw" DW x-endian DI)))
 
 (define-ldind le)
 (define-ldind be)
@@ -520,35 +633,41 @@
 ;; Loads operate on [$SRC+-OFFSET] -> $DST
 ;; Stores operate on $SRC -> [$DST+-OFFSET]
 
-(define-pmacro (dxli x-basename x-suffix x-size x-endian)
+(define-pmacro (dxli x-basename x-suffix x-size x-endian x-mode)
   (dni (.sym x-basename x-suffix x-endian)
        (.str x-basename x-suffix)
-       ((ISA (.sym ebpf x-endian)))
+       (endian-isas 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)
-       () ()))
+       (set x-mode
+            (.sym dst x-endian)
+            (mem x-mode (add DI (.sym src x-endian) offset16)))
+       ()))
 
-(define-pmacro (dxsi x-basename x-suffix x-size x-endian)
+(define-pmacro (dxsi x-basename x-suffix x-size x-endian x-mode)
   (dni (.sym x-basename x-suffix x-endian)
        (.str x-basename x-suffix)
-       ((ISA (.sym ebpf x-endian)))
+       (endian-isas 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)
-       () ()))
+       (set x-mode
+            (mem x-mode (add DI (.sym dst x-endian) offset16))
+            (.sym src x-endian)) ;; XXX address is section-relative
+       ()))
 
 (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)))
+    (dxli "ldx" "w" W x-endian SI)
+    (dxli "ldx" "h" H x-endian HI)
+    (dxli "ldx" "b" B x-endian QI)
+    (dxli "ldx" "dw" DW x-endian DI)
+
+    (dxsi "stx" "w" W x-endian SI)
+    (dxsi "stx" "h" H x-endian HI)
+    (dxsi "stx" "b" B x-endian QI)
+    (dxsi "stx" "dw" DW x-endian DI)))
 
 (define-ldstx-insns le)
 (define-ldstx-insns be)
@@ -559,20 +678,24 @@
 ;;  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)
+(define-pmacro (dsti x-suffix x-size x-endian x-mode)
   (dni (.sym "st" x-suffix x-endian)
        (.str "st" x-suffix)
-       ((ISA (.sym ebpf x-endian)))
+       (endian-isas 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) () ()))
+          OP_CLASS_ST (.sym OP_SIZE_ x-size) OP_MODE_MEM)
+       (set x-mode
+            (mem x-mode (add DI (.sym dst x-endian) offset16))
+            imm32) ;; XXX address is section-relative
+       ()))
 
 (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)))
+    (dsti "b" B x-endian QI)
+    (dsti "h" H x-endian HI)
+    (dsti "w" W x-endian SI)
+    (dsti "dw" DW x-endian DI)))
 
 (define-st-insns le)
 (define-st-insns be)
@@ -583,78 +706,150 @@
 ;; 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
+;;   J{eq,gt,ge,lt,le,set,ne,sgt,sge,slt,sle}[32]{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
+;;   J{eq,gt,ge,lt,le,set,ne.sgt,sge,slt,sle}[32]{i,r}be for the
 ;;   big-endian ISA.
 
-(define-pmacro (dcji x-cond x-op-code x-endian)
+(define-pmacro (define-cond-jump-insn x-cond x-suffix x-op-class x-op-code x-endian x-mode x-semop)
   (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")
+    (dni (.sym j x-cond x-suffix i x-endian)
+         (.str j x-cond x-suffix " i")
+         (endian-isas x-endian)
+         (.str "j" x-cond x-suffix " $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")
+            x-op-class OP_SRC_K (.sym OP_CODE_ x-op-code))
+         (if VOID (x-semop x-mode (.sym dst x-endian) imm32)
+             (set DI
+                  (reg DI h-pc) (add DI (reg DI h-pc)
+                                     (mul DI (add HI disp16 1) 8))))
+         ())
+    (dni (.sym j x-cond x-suffix r x-endian)
+         (.str j x-cond x-suffix " r")
+         (endian-isas x-endian)
+         (.str "j" x-cond x-suffix " $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)) () ())))
+            x-op-class OP_SRC_X (.sym OP_CODE_ x-op-code))
+         (if VOID (x-semop x-mode (.sym dst x-endian) (.sym src x-endian))
+             (set DI
+                  (reg DI h-pc) (add DI (reg DI h-pc)
+                                     (mul DI (add HI disp16 1) 8))))
+         ())))
+
+(define-pmacro (dcji x-cond x-op-code x-endian x-semop)
+  (begin
+    (define-cond-jump-insn x-cond "" OP_CLASS_JMP x-op-code x-endian DI x-semop)
+    (define-cond-jump-insn x-cond "32" OP_CLASS_JMP32 x-op-code x-endian SI x-semop )))
 
 (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)))
+    (dcji "eq" JEQ x-endian eq)
+    (dcji "gt" JGT x-endian gtu)
+    (dcji "ge" JGE x-endian geu)
+    (dcji "lt" JLT x-endian ltu)
+    (dcji "le" JLE x-endian leu)
+    (dcji "set" JSET x-endian and)
+    (dcji "ne" JNE x-endian ne)
+    (dcji "sgt" JSGT x-endian gt)
+    (dcji "sge" JSGE x-endian ge)
+    (dcji "slt" JSLT x-endian lt)
+    (dcji "sle" JSLE x-endian le)))
 
 (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
+;; The `call' instruction doesn't make use of registers, but the
+;; semantic routine should have access to the src register in order to
+;; properly interpret the meaning of disp32.  Therefore we need one
+;; version per ISA.
+
+(define-pmacro (define-call-insn x-endian)
+  (dni (.sym call x-endian)
+       "call"
+       (endian-isas x-endian)
+       "call $disp32"
+       (+ disp32 (f-offset16 0) (f-regs 0)
+          OP_CLASS_JMP OP_SRC_K OP_CODE_CALL)
+       (c-call VOID
+               "bpfbf_call" disp32 (ifield (.sym f-src x-endian)))
+       ()))
+
+(define-call-insn le)
+(define-call-insn be)
+
+(define-pmacro (define-callr-insn x-endian)
+  (dni (.sym callr x-endian)
+       "callr"
+       ((ISA (.sym xbpf x-endian)))
+       (.str "call $dst" x-endian)
+       (+ (f-imm32 0) (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian)
+          OP_CLASS_JMP OP_SRC_X OP_CODE_CALL)
+       (c-call VOID
+               "bpfbf_callr" (ifield (.sym f-dst x-endian)))
+       ()))
+
+(define-callr-insn le)
+(define-callr-insn be)
+
+;; The jump-always 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) () ())
+        OP_CLASS_JMP OP_SRC_K OP_CODE_JA)
+     (set DI (reg DI h-pc) (add DI (reg DI h-pc)
+                                (mul DI (add HI disp16 1) 8)))
+     ())
 
 (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) () ())
+        OP_CLASS_JMP (f-op-src 0) OP_CODE_EXIT)
+     (c-call VOID "bpfbf_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 (sem-exchange-and-add x-endian x-mode)
+  (sequence VOID ((x-mode tmp))
+            ;; XXX acquire lock in simulator...  as a hardware element?
+            (set x-mode tmp (mem x-mode (add DI (.sym dst x-endian) offset16)))
+            (set x-mode
+                 (mem x-mode (add DI (.sym dst x-endian) offset16))
+                 (add x-mode tmp (.sym src x-endian)))))
+
 (define-pmacro (define-atomic-insns x-endian)
   (begin
     (dni (.str "xadddw" x-endian)
          "xadddw"
-         ((ISA (.sym ebpf x-endian)))
+         (endian-isas 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) () ())
+            offset16 OP_MODE_XADD OP_SIZE_DW OP_CLASS_STX)
+         (sem-exchange-and-add x-endian DI)
+         ())
     (dni (.str "xaddw" x-endian)
          "xaddw"
-         ((ISA (.sym ebpf x-endian)))
+         (endian-isas 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) () ())))
+            offset16 OP_MODE_XADD OP_SIZE_W OP_CLASS_STX)
+         (sem-exchange-and-add x-endian SI)
+         ())))
 
 (define-atomic-insns le)
 (define-atomic-insns be)
+
+;;; Breakpoint instruction
+
+;; The brkpt instruction is used by the BPF simulator and it doesn't
+;; really belong to the eBPF instruction set.
+
+(dni "brkpt" "brkpt" (all-isas)  "brkpt"
+     (+ (f-imm32 0) (f-offset16 0) (f-regs 0)
+        OP_CLASS_ALU OP_SRC_X OP_CODE_NEG)
+     (c-call VOID "bpfbf_breakpoint")
+     ())
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/ChangeLog ./cpu/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/ChangeLog	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/ChangeLog	2021-12-16 01:57:38.000000000 +0000
@@ -1,3 +1,210 @@
+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.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/fr30.cpu ./cpu/fr30.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/fr30.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/fr30.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/frv.cpu ./cpu/frv.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/frv.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/frv.cpu	2021-12-16 01:57:38.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)))
 )
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/frv.opc ./cpu/frv.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/frv.opc	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/frv.opc	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/iq2000.cpu ./cpu/iq2000.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/iq2000.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/iq2000.cpu	2021-12-16 01:57:38.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.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/m32c.cpu ./cpu/m32c.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/m32c.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/m32c.cpu	2021-12-16 01:57:38.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))))
 		)
 )
@@ -1072,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/m32r.cpu ./cpu/m32r.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/m32r.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/m32r.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/mep-core.cpu ./cpu/mep-core.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/mep-core.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/mep-core.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/mep.opc ./cpu/mep.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/mep.opc	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/mep.opc	2021-12-16 01:57:38.000000000 +0000
@@ -855,8 +855,7 @@ mep_cgen_expand_macros_and_parse_operand
 	*strp_in += (str - hold); 
     }
 
-  if (hold)
-    free (hold);
+  free (hold);
 
   return errmsg;
 }
@@ -1272,7 +1271,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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1kcommon.cpu ./cpu/or1kcommon.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1kcommon.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/or1kcommon.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1k.cpu ./cpu/or1k.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1k.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/or1k.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1k.opc ./cpu/or1k.opc
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1k.opc	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/or1k.opc	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1korbis.cpu ./cpu/or1korbis.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1korbis.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/or1korbis.cpu	2021-12-16 01:57:38.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.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1korfpx.cpu ./cpu/or1korfpx.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/or1korfpx.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/or1korfpx.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/xstormy16.cpu ./cpu/xstormy16.cpu
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/cpu/xstormy16.cpu	2020-03-07 02:07:41.000000000 +0000
+++ ./cpu/xstormy16.cpu	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/djunpack.bat ./djunpack.bat
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/djunpack.bat	2020-03-07 02:11:49.000000000 +0000
+++ ./djunpack.bat	2021-12-16 02:00:40.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.1.90.20200307
-if "%GDBVER%"=="$package-9.1.90.20200307" GoTo EnvOk
+set GDBVER=$package-11.1.90.20211216
+if "%GDBVER%"=="$package-11.1.90.20211216" 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/etc/ChangeLog ./etc/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/etc/ChangeLog	2020-03-07 02:07:41.000000000 +0000
+++ ./etc/ChangeLog	2021-12-16 01:57:38.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/etc/texi2pod.pl ./etc/texi2pod.pl
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/etc/texi2pod.pl	2020-03-07 02:07:41.000000000 +0000
+++ ./etc/texi2pod.pl	2021-12-16 01:57:38.000000000 +0000
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -w
 
-#   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+#   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
 # This file is part of GCC.
 
@@ -381,6 +381,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-linux-nat.c ./gdb/aarch32-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch32-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-linux-nat.h ./gdb/aarch32-linux-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-linux-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch32-linux-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-tdep.c ./gdb/aarch32-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch32-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-tdep.h ./gdb/aarch32-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch32-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch32-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-fbsd-nat.c ./gdb/aarch64-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-fbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-fbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/aarch64.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -124,8 +124,9 @@ aarch64_fbsd_nat_target::store_registers
     }
 }
 
+void _initialize_aarch64_fbsd_nat ();
 void
-_initialize_aarch64_fbsd_nat (void)
+_initialize_aarch64_fbsd_nat ()
 {
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-fbsd-tdep.c ./gdb/aarch64-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-fbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-fbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/aarch64.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -134,7 +134,7 @@ const struct regset aarch64_fbsd_fpregse
     regcache_supply_regset, regcache_collect_regset
   };
 
-/* Implement the "regset_from_core_section" gdbarch method.  */
+/* Implement the "iterate_over_regset_sections" gdbarch method.  */
 
 static void
 aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
@@ -170,8 +170,9 @@ aarch64_fbsd_init_abi (struct gdbarch_in
     (gdbarch, aarch64_fbsd_iterate_over_regset_sections);
 }
 
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-fbsd-tdep.h ./gdb/aarch64-fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-fbsd-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-fbsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* FreeBSD/aarch64 target support, prototypes.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-linux-nat.c ./gdb/aarch64-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for GNU/Linux AArch64.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -50,6 +50,10 @@
 #include "gdb_proc_service.h"
 #include "arch-utils.h"
 
+#include "arch/aarch64-mte-linux.h"
+
+#include "nat/aarch64-mte-linux-ptrace.h"
+
 #ifndef TRAP_HWBKPT
 #define TRAP_HWBKPT 0x0004
 #endif
@@ -100,6 +104,16 @@ public:
     override;
 
   struct gdbarch *thread_architecture (ptid_t) override;
+
+  bool supports_memory_tagging () override;
+
+  /* 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 aarch64_linux_nat_target the_aarch64_linux_nat_target;
@@ -459,6 +473,58 @@ fetch_pauth_masks_from_thread (struct re
 			&pauth_regset[1]);
 }
 
+/* Fill GDB's register array with the MTE register values from
+   the current thread.  */
+
+static void
+fetch_mteregs_from_thread (struct regcache *regcache)
+{
+  struct gdbarch_tdep *tdep = 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)
+{
+  struct gdbarch_tdep *tdep = 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."));
+}
+
 /* Implement the "fetch_registers" target_ops method.  */
 
 void
@@ -477,6 +543,9 @@ aarch64_linux_nat_target::fetch_register
 
       if (tdep->has_pauth ())
 	fetch_pauth_masks_from_thread (regcache);
+
+      if (tdep->has_mte ())
+	fetch_mteregs_from_thread (regcache);
     }
   else if (regno < AARCH64_V0_REGNUM)
     fetch_gregs_from_thread (regcache);
@@ -491,6 +560,11 @@ aarch64_linux_nat_target::fetch_register
 	  || regno == AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base))
 	fetch_pauth_masks_from_thread (regcache);
     }
+
+  /* Fetch individual MTE registers.  */
+  if (tdep->has_mte ()
+      && (regno == tdep->mte_reg_base))
+    fetch_mteregs_from_thread (regcache);
 }
 
 /* Implement the "store_registers" target_ops method.  */
@@ -508,6 +582,9 @@ aarch64_linux_nat_target::store_register
 	store_sveregs_to_thread (regcache);
       else
 	store_fpregs_to_thread (regcache);
+
+      if (tdep->has_mte ())
+	store_mteregs_to_thread (regcache);
     }
   else if (regno < AARCH64_V0_REGNUM)
     store_gregs_to_thread (regcache);
@@ -515,6 +592,11 @@ aarch64_linux_nat_target::store_register
     store_sveregs_to_thread (regcache);
   else
     store_fpregs_to_thread (regcache);
+
+  /* Store MTE registers.  */
+  if (tdep->has_mte ()
+      && (regno == tdep->mte_reg_base))
+    store_mteregs_to_thread (regcache);
 }
 
 /* Fill register REGNO (if it is a general-purpose register) in
@@ -641,7 +723,7 @@ aarch64_linux_nat_target::read_descripti
   gdb_byte regbuf[ARM_VFP3_REGS_SIZE];
   struct iovec iovec;
 
-  tid = inferior_ptid.lwp ();
+  tid = inferior_ptid.pid ();
 
   iovec.iov_base = regbuf;
   iovec.iov_len = ARM_VFP3_REGS_SIZE;
@@ -651,9 +733,12 @@ aarch64_linux_nat_target::read_descripti
     return aarch32_read_description ();
 
   CORE_ADDR hwcap = linux_get_hwcap (this);
+  CORE_ADDR hwcap2 = linux_get_hwcap2 (this);
 
-  return aarch64_read_description (aarch64_sve_get_vq (tid),
-				   hwcap & AARCH64_HWCAP_PACA);
+  bool pauth_p = hwcap & AARCH64_HWCAP_PACA;
+  bool mte_p = hwcap2 & HWCAP2_MTE;
+
+  return aarch64_read_description (aarch64_sve_get_vq (tid), pauth_p, mte_p);
 }
 
 /* Convert a native/host siginfo object, into/from the siginfo in the
@@ -877,6 +962,13 @@ 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
+    = address_significant (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)
@@ -884,7 +976,6 @@ aarch64_linux_nat_target::stopped_data_a
       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];
@@ -959,7 +1050,7 @@ aarch64_linux_nat_target::thread_archite
 
   /* 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);
+  inferior *inf = find_inferior_ptid (this, ptid);
   gdb_assert (inf != NULL);
   if (vq == gdbarch_tdep (inf->gdbarch)->vq)
     return inf->gdbarch;
@@ -969,12 +1060,49 @@ aarch64_linux_nat_target::thread_archite
      new one), stashing the vector length inside id.  Use -1 for when SVE
      unavailable, to distinguish from an unset value of 0.  */
   struct gdbarch_info info;
-  gdbarch_info_init (&info);
-  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
+  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_aarch64, bfd_mach_aarch64);
   info.id = (int *) (vq == 0 ? -1 : vq);
   return gdbarch_find_by_info (info);
 }
 
+/* Implement the "supports_memory_tagging" target_ops method.  */
+
+bool
+aarch64_linux_nat_target::supports_memory_tagging ()
+{
+  return (linux_get_hwcap2 (this) & 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;
+}
+
 /* Define AArch64 maintenance commands.  */
 
 static void
@@ -996,8 +1124,9 @@ triggers a breakpoint or watchpoint."),
 			   &maintenance_show_cmdlist);
 }
 
+void _initialize_aarch64_linux_nat ();
 void
-_initialize_aarch64_linux_nat (void)
+_initialize_aarch64_linux_nat ()
 {
   add_show_debug_regs_command ();
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-linux-tdep.c ./gdb/aarch64-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux AArch64.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -30,7 +30,9 @@
 #include "symtab.h"
 #include "tramp-frame.h"
 #include "trad-frame.h"
+#include "target.h"
 #include "target/target.h"
+#include "expop.h"
 
 #include "regcache.h"
 #include "regset.h"
@@ -44,6 +46,13 @@
 #include "record-full.h"
 #include "linux-record.h"
 
+#include "arch/aarch64-mte-linux.h"
+
+#include "arch-utils.h"
+#include "value.h"
+
+#include "gdbsupport/selftest.h"
+
 /* Signal frame handling.
 
       +------------+  ^
@@ -180,6 +189,93 @@ read_aarch64_ctx (CORE_ADDR ctx_addr, en
   return magic;
 }
 
+/* Given CACHE, use the trad_frame* functions to restore the FPSIMD
+   registers from a signal frame.
+
+   VREG_NUM is the number of the V register being restored, OFFSET is the
+   address containing the register value, BYTE_ORDER is the endianness and
+   HAS_SVE tells us if we have a valid SVE context or not.  */
+
+static void
+aarch64_linux_restore_vreg (struct trad_frame_cache *cache, int num_regs,
+			    int vreg_num, CORE_ADDR offset,
+			    enum bfd_endian byte_order, bool has_sve)
+{
+  /* 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. */
+
+  if (byte_order == BFD_ENDIAN_BIG)
+    {
+      gdb_byte buf[V_REGISTER_SIZE];
+
+      if (target_read_memory (offset, buf, V_REGISTER_SIZE) != 0)
+	{
+	  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 + vreg_num,
+					  {buf, V_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_Q0_REGNUM
+					  + vreg_num, {buf, Q_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_D0_REGNUM
+					  + vreg_num, {buf, D_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_S0_REGNUM
+					  + vreg_num, {buf, S_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_H0_REGNUM
+					  + vreg_num, {buf, H_REGISTER_SIZE});
+	  trad_frame_set_reg_value_bytes (cache,
+					  num_regs + AARCH64_B0_REGNUM
+					  + vreg_num, {buf, B_REGISTER_SIZE});
+
+	  if (has_sve)
+	    trad_frame_set_reg_value_bytes (cache,
+					    num_regs + AARCH64_SVE_V0_REGNUM
+					    + vreg_num, {buf, V_REGISTER_SIZE});
+	}
+      return;
+    }
+
+  /* Little endian, just point at the address containing the register
+     value.  */
+  trad_frame_set_reg_addr (cache, AARCH64_V0_REGNUM + vreg_num, offset);
+  trad_frame_set_reg_addr (cache, num_regs + AARCH64_Q0_REGNUM + vreg_num,
+			   offset);
+  trad_frame_set_reg_addr (cache, num_regs + AARCH64_D0_REGNUM + vreg_num,
+			   offset);
+  trad_frame_set_reg_addr (cache, num_regs + AARCH64_S0_REGNUM + vreg_num,
+			   offset);
+  trad_frame_set_reg_addr (cache, num_regs + AARCH64_H0_REGNUM + vreg_num,
+			   offset);
+  trad_frame_set_reg_addr (cache, num_regs + AARCH64_B0_REGNUM + vreg_num,
+			   offset);
+
+  if (has_sve)
+    trad_frame_set_reg_addr (cache, num_regs + AARCH64_SVE_V0_REGNUM
+			     + vreg_num, offset);
+
+}
+
 /* Implement the "init" method of struct tramp_frame.  */
 
 static void
@@ -332,27 +428,16 @@ aarch64_linux_sigframe_init (const struc
 
       /* 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
+	{
+	  for (int i = 0; i < 32; i++)
+	    {
+	      CORE_ADDR offset = (fpsimd + AARCH64_FPSIMD_V0_OFFSET
 				  + (i * AARCH64_FPSIMD_VREG_SIZE));
 
-	    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);
-	  }
+	      aarch64_linux_restore_vreg (this_cache, num_regs, i, offset,
+					  byte_order, tdep->has_sve ());
+	    }
+	}
     }
 
   trad_frame_set_id (this_cache, frame_id_build (sp, func));
@@ -582,7 +667,7 @@ aarch64_linux_collect_sve_regset (const
 			    size - SVE_HEADER_SIZE);
 }
 
-/* Implement the "regset_from_core_section" gdbarch method.  */
+/* Implement the "iterate_over_regset_sections" gdbarch method.  */
 
 static void
 aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
@@ -602,7 +687,7 @@ 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 }
@@ -643,6 +728,26 @@ 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);
+    }
 }
 
 /* Implement the "core_read_description" gdbarch method.  */
@@ -652,9 +757,12 @@ aarch64_linux_core_read_description (str
 				     struct target_ops *target, bfd *abfd)
 {
   CORE_ADDR hwcap = linux_get_hwcap (target);
+  CORE_ADDR hwcap2 = linux_get_hwcap2 (target);
 
+  bool pauth_p = hwcap & AARCH64_HWCAP_PACA;
+  bool mte_p = hwcap2 & HWCAP2_MTE;
   return aarch64_read_description (aarch64_linux_core_read_vq (gdbarch, abfd),
-				   hwcap & AARCH64_HWCAP_PACA);
+				   pauth_p, mte_p);
 }
 
 /* Implementation of `gdbarch_stap_is_single_operand', as defined in
@@ -677,7 +785,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 +796,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 +808,14 @@ aarch64_stap_parse_special_token (struct
 	++tmp;
 
       if (*tmp != ',')
-	return 0;
+	return {};
 
       len = tmp - start;
-      regname = (char *) alloca (len + 2);
+      std::string regname (start, len);
 
-      strncpy (regname, start, len);
-      regname[len] = '\0';
-
-      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 +833,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.  */
@@ -1432,6 +1529,256 @@ 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 gdb::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 = address_significant (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.  */
+  gdb::optional<CORE_ADDR> atag
+    = aarch64_mte_get_atag (address_significant (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 = value_contents_raw (address);
+      store_unsigned_integer (srcbuf, sizeof (addr), byte_order, addr);
+    }
+  else
+    {
+      /* Remove the top byte.  */
+      addr = address_significant (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 = address_significant (gdbarch, addr);
+      gdb::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)
+{
+  struct gdbarch_tdep *tdep = 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");
+
+      gdb::optional<CORE_ADDR> atag
+	= aarch64_mte_get_atag (address_significant (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"));
+    }
+}
+
 static void
 aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -1445,14 +1792,14 @@ aarch64_linux_init_abi (struct gdbarch_i
 
   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);
 
   /* 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);
@@ -1489,6 +1836,34 @@ aarch64_linux_init_abi (struct gdbarch_i
      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);
+    }
+
   /* Initialize the aarch64_linux_record_tdep.  */
   /* These values are the size of the type that will be used in a system
      call.  They are obtained from Linux Kernel source.  */
@@ -1658,16 +2033,45 @@ aarch64_linux_init_abi (struct gdbarch_i
   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);
 }
 
+#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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-linux-tdep.h ./gdb/aarch64-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-linux-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-linux-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GNU/Linux on AArch64 target support, prototypes.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-newlib-tdep.c ./gdb/aarch64-newlib-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-newlib-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-newlib-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Newlib AArch64.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -36,8 +36,9 @@ aarch64_newlib_init_abi (struct gdbarch_
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-ravenscar-thread.c ./gdb/aarch64-ravenscar-thread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-ravenscar-thread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-ravenscar-thread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ravenscar Aarch64 target support.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -81,7 +81,7 @@ struct ravenscar_reg_info
 
 static void
 supply_register_at_address (struct regcache *regcache, int regnum,
-                            CORE_ADDR register_addr)
+			    CORE_ADDR register_addr)
 {
   struct gdbarch *gdbarch = regcache->arch ();
   int buf_size = register_size (gdbarch, regnum);
@@ -125,12 +125,12 @@ aarch64_ravenscar_generic_fetch_register
   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);
-        }
+	{
+	  current_address = thread_descriptor_address
+	    + reg_info->context_offsets[current_regnum];
+	  supply_register_at_address (regcache, current_regnum,
+				      current_address);
+	}
     }
 }
 
@@ -155,8 +155,8 @@ aarch64_ravenscar_generic_store_register
 
   regcache->raw_collect (regnum, buf);
   write_memory (register_address,
-                buf,
-                buf_size);
+		buf,
+		buf_size);
 }
 
 /* The ravenscar_reg_info for most Aarch64 targets.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-ravenscar-thread.h ./gdb/aarch64-ravenscar-thread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-ravenscar-thread.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-ravenscar-thread.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ravenscar Aarch64 target support.
  
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-tdep.c ./gdb/aarch64-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on AArch64 systems.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -34,7 +34,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"
@@ -53,16 +53,12 @@
 #include "opcode/aarch64.h"
 #include <algorithm>
 
-#define submask(x) ((1L << ((x) + 1)) - 1)
-#define bit(obj,st) (((obj) >> (st)) & 1)
-#define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
-
 /* 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 target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/][2 /* mte */];
 
 /* The standard register names, and all the valid aliases for them.  */
 static const struct
@@ -176,6 +172,12 @@ static const char *const aarch64_pauth_r
   "pauth_cmask"
 };
 
+static const char *const aarch64_mte_register_names[] =
+{
+  /* Tag Control Register.  */
+  "tag_ctl"
+};
+
 /* AArch64 prologue cache structure.  */
 struct aarch64_prologue_cache
 {
@@ -205,12 +207,12 @@ struct aarch64_prologue_cache
   int framereg;
 
   /* Saved register offsets.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 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);
 }
@@ -287,6 +289,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 ommitted.  */
+  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,6 +334,10 @@ 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)
@@ -358,6 +370,12 @@ aarch64_analyze_prologue (struct gdbarch
       else if (inst.opcode->op == OP_MOVZ)
 	{
 	  gdb_assert (inst.operands[0].type == AARCH64_OPND_Rd);
+
+	  /* If this shows up before we set the stack, keep going.  Otherwise
+	     stop the analysis.  */
+	  if (seen_stack_set)
+	    break;
+
 	  regs[inst.operands[0].reg.regno] = pv_unknown ();
 	}
       else if (inst.opcode->iclass == log_shift
@@ -376,12 +394,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 +415,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 +462,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 +488,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)
 	{
@@ -489,26 +517,24 @@ aarch64_analyze_prologue (struct gdbarch
 	    }
 	  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->pauth_ra_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 +566,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 +576,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 +627,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);
@@ -630,19 +655,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 +697,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 +853,20 @@ 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->pauth_ra_state_regnum;
+	  SELF_CHECK (cache.saved_regs[regnum].is_value ());
 	}
     }
 }
@@ -815,8 +955,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);
     }
 }
 
@@ -845,8 +985,9 @@ aarch64_make_prologue_cache_1 (struct fr
   /* 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);
 
@@ -943,8 +1084,7 @@ aarch64_prologue_prev_register (struct f
       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->pauth_ra_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 +1094,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 +1114,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,
@@ -1068,8 +1209,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,
@@ -1090,7 +1232,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,
@@ -1201,6 +1343,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,7 +1396,7 @@ 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.  */
@@ -1250,7 +1425,7 @@ 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)
@@ -1259,7 +1434,7 @@ aapcs_is_vfp_call_or_return_candidate_1
       if (*fundamental_type == nullptr)
 	*fundamental_type = type;
       else if (TYPE_LENGTH (type) != TYPE_LENGTH (*fundamental_type)
-	       || TYPE_CODE (type) != TYPE_CODE (*fundamental_type))
+	       || type->code () != (*fundamental_type)->code ())
 	return -1;
 
       return 1;
@@ -1273,7 +1448,7 @@ aapcs_is_vfp_call_or_return_candidate_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))
+		 || target_type->code () != (*fundamental_type)->code ())
 	  return -1;
 
 	return 2;
@@ -1281,7 +1456,7 @@ 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)
 	      return -1;
@@ -1289,7 +1464,7 @@ aapcs_is_vfp_call_or_return_candidate_1
 	    if (*fundamental_type == nullptr)
 	      *fundamental_type = type;
 	    else if (TYPE_LENGTH (type) != TYPE_LENGTH (*fundamental_type)
-		     || TYPE_CODE (type) != TYPE_CODE (*fundamental_type))
+		     || type->code () != (*fundamental_type)->code ())
 	      return -1;
 
 	    return 1;
@@ -1313,13 +1488,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 (field_is_static (&type->field (i)))
 	      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);
@@ -1416,7 +1591,7 @@ pass_in_x (struct gdbarch *gdbarch, stru
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   int len = TYPE_LENGTH (type);
-  enum type_code typecode = TYPE_CODE (type);
+  enum type_code typecode = type->code ();
   int regnum = AARCH64_X0_REGNUM + info->ngrn;
   const bfd_byte *buf = value_contents (arg);
 
@@ -1435,12 +1610,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 +1648,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;
@@ -1509,11 +1680,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;
@@ -1567,7 +1735,7 @@ 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),
@@ -1588,17 +1756,17 @@ pass_in_v_vfp_candidate (struct gdbarch
       }
 
     case TYPE_CODE_ARRAY:
-      if (TYPE_VECTOR (arg_type))
+      if (arg_type->is_vector ())
 	return pass_in_v (gdbarch, regcache, info, TYPE_LENGTH (arg_type),
 			  value_contents (arg));
       /* fall through.  */
 
     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 (field_is_static (&arg_type->field (i)))
 	    continue;
 
 	  struct value *field = value_primitive_field (arg, 0, i, arg_type);
@@ -1662,13 +1830,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);
     }
@@ -1703,7 +1869,7 @@ aarch64_push_dummy_call (struct gdbarch
 	  continue;
 	}
 
-      switch (TYPE_CODE (arg_type))
+      switch (arg_type->code ())
 	{
 	case TYPE_CODE_INT:
 	case TYPE_CODE_BOOL:
@@ -1713,7 +1879,7 @@ aarch64_push_dummy_call (struct gdbarch
 	  if (len < 4)
 	    {
 	      /* 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;
@@ -1883,6 +2049,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);
 
@@ -1934,7 +2103,7 @@ aarch64_vnv_type (struct gdbarch *gdbarc
 
   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 +2133,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",
@@ -2075,24 +2246,22 @@ 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
@@ -2116,8 +2285,8 @@ 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).  */
+	 been stored to word-aligned memory and then loaded into
+	 registers with 64-bit load instruction(s).  */
       int len = TYPE_LENGTH (type);
       int regno = AARCH64_X0_REGNUM;
       bfd_byte buf[X_REGISTER_SIZE];
@@ -2155,7 +2324,7 @@ aarch64_return_in_memory (struct gdbarch
   if (TYPE_LENGTH (type) > 16)
     {
       /* PCS B.6 Aggregates larger than 16 bytes are passed by
-         invisible reference.  */
+	 invisible reference.  */
 
       return 1;
     }
@@ -2187,12 +2356,9 @@ 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));
 
 	  memcpy (tmpbuf, valbuf,
 		  len > V_REGISTER_SIZE ? V_REGISTER_SIZE : len);
@@ -2200,12 +2366,12 @@ aarch64_store_return_value (struct type
 	  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)
 	{
@@ -2261,14 +2427,13 @@ aarch64_return_value (struct gdbarch *gd
 		      gdb_byte *readbuf, 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");
+	  aarch64_debug_printf ("return value in memory");
 	  return RETURN_VALUE_STRUCT_CONVENTION;
 	}
     }
@@ -2279,8 +2444,7 @@ aarch64_return_value (struct gdbarch *gd
   if (readbuf)
     aarch64_extract_return_value (valtype, regcache, readbuf);
 
-  if (aarch64_debug)
-    debug_printf ("return value in registers\n");
+  aarch64_debug_printf ("return value in registers");
 
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
@@ -2731,13 +2895,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 +2922,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 +2981,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 +3016,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 +3041,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 +3106,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,7 +3138,7 @@ 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)
@@ -2985,8 +3158,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 +3177,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 +3190,33 @@ 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)
 {
-  aarch64_displaced_step_closure *dsc = (aarch64_displaced_step_closure *) dsc_;
+  aarch64_displaced_step_copy_insn_closure *dsc
+    = (aarch64_displaced_step_copy_insn_closure *) dsc_;
+
+  ULONGEST pc;
+
+  regcache_cooked_read_unsigned (regs, AARCH64_PC_REGNUM, &pc);
+
+  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 +3228,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 +3259,31 @@ 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. */
 
 const target_desc *
-aarch64_read_description (uint64_t vq, bool pauth_p)
+aarch64_read_description (uint64_t vq, bool pauth_p, bool mte_p)
 {
   if (vq > AARCH64_MAX_SVE_VQ)
     error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq,
 	   AARCH64_MAX_SVE_VQ);
 
-  struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p];
+  struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p][mte_p];
 
   if (tdesc == NULL)
     {
-      tdesc = aarch64_create_target_description (vq, pauth_p);
-      tdesc_aarch64_list[vq][pauth_p] = tdesc;
+      tdesc = aarch64_create_target_description (vq, pauth_p, mte_p);
+      tdesc_aarch64_list[vq][pauth_p][mte_p] = tdesc;
     }
 
   return tdesc;
@@ -3157,6 +3353,7 @@ aarch64_gdbarch_init (struct gdbarch_inf
   bool valid_p = true;
   int i, num_regs = 0, num_pseudo_regs = 0;
   int first_pauth_regnum = -1, pauth_ra_state_offset = -1;
+  int first_mte_regnum = -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
@@ -3187,23 +3384,25 @@ aarch64_gdbarch_init (struct gdbarch_inf
      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);
+    tdesc = aarch64_read_description (vq, false, false);
   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");
 
   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 +3417,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 +3430,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]);
 
@@ -3256,7 +3455,7 @@ aarch64_gdbarch_init (struct gdbarch_inf
       /* 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,
+	valid_p &= tdesc_numbered_register (feature_pauth, tdesc_data.get (),
 					    first_pauth_regnum + i,
 					    aarch64_pauth_register_names[i]);
 
@@ -3264,12 +3463,23 @@ aarch64_gdbarch_init (struct gdbarch_inf
       num_pseudo_regs += 1;	/* Count RA_STATE pseudo register.  */
     }
 
-  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;
     }
 
+  if (!valid_p)
+    return nullptr;
+
   /* AArch64 code is always little-endian.  */
   info.byte_order_for_code = BFD_ENDIAN_LITTLE;
 
@@ -3284,6 +3494,7 @@ aarch64_gdbarch_init (struct gdbarch_inf
   tdep->pauth_reg_base = first_pauth_regnum;
   tdep->pauth_ra_state_regnum = (feature_pauth == NULL) ? -1
 				: pauth_ra_state_offset + num_regs;
+  tdep->mte_reg_base = first_mte_regnum;
 
   set_gdbarch_push_dummy_call (gdbarch, aarch64_push_dummy_call);
   set_gdbarch_frame_align (gdbarch, aarch64_frame_align);
@@ -3349,7 +3560,7 @@ aarch64_gdbarch_init (struct gdbarch_inf
 
   /* 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 +3568,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 +3589,7 @@ 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));
 
   /* Add standard register aliases.  */
   for (i = 0; i < ARRAY_SIZE (aarch64_register_aliases); i++)
@@ -3406,8 +3621,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 +3648,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->len, &RECORD_BUF[0], \
+		       sizeof(struct aarch64_mem_r) * LENGTH); \
+	      } \
+	  } \
+	  while (0)
 
 /* AArch64 record/replay structures and enumerations.  */
 
@@ -3712,46 +3928,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 +3979,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 +3989,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,9 +4060,9 @@ 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;
 }
 
@@ -3917,9 +4133,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 +4145,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 +4226,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 +4255,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,54 +4303,54 @@ 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;
 }
 
@@ -4183,7 +4399,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 +4456,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 +4493,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++;
-  gdb_assert (aarch64_insn_r->reg_rec_count == 1);
+
+  /* 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 == 2);
   REG_ALLOC (aarch64_insn_r->aarch64_regs, aarch64_insn_r->reg_rec_count,
 	     record_buf);
   return AARCH64_RECORD_SUCCESS;
@@ -4337,7 +4560,6 @@ 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);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-tdep.h ./gdb/aarch64-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aarch64-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aarch64-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on AArch64 systems.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -23,6 +23,8 @@
 #define AARCH64_TDEP_H
 
 #include "arch/aarch64.h"
+#include "displaced-stepping.h"
+#include "infrun.h"
 
 /* Forward declarations.  */
 struct gdbarch;
@@ -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.  */
@@ -99,24 +100,33 @@ struct gdbarch_tdep
   {
     return pauth_reg_base != -1;
   }
+
+  /* First MTE register.  This is -1 if no MTE registers are available.  */
+  int mte_reg_base;
+
+  /* Returns true if the target supports MTE.  */
+  bool has_mte () const
+  {
+    return mte_reg_base != -1;
+  }
 };
 
-const target_desc *aarch64_read_description (uint64_t vq, bool pauth_p);
+const target_desc *aarch64_read_description (uint64_t vq, bool pauth_p,
+					     bool mte_p);
 
 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);
 
-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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/acinclude.m4 ./gdb/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/acinclude.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/acinclude.m4	2021-12-16 01:57:39.000000000 +0000
@@ -4,185 +4,53 @@ 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 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([gdbsupport/common.m4])
+m4_include([../gdbsupport/common.m4])
 
 dnl For libiberty_INIT.
 m4_include(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-2020 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 +71,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 +141,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 +162,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})
@@ -356,13 +233,21 @@ AC_DEFUN([GDB_AC_CHECK_BFD], [
   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])])
+  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]
+     )]
+  )
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aclocal.m4 ./gdb/aclocal.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aclocal.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aclocal.m4	2021-12-16 01:57:39.000000000 +0000
@@ -199,4 +199,16 @@ AC_DEFUN([_AM_SUBST_NOTMAKE])
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
+m4_include([../config/acx.m4])
+m4_include([../config/ax_pthread.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/largefile.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/override.m4])
+m4_include([../config/pkg.m4])
+m4_include([../config/plugins.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/acx_configure_dir.m4 ./gdb/acx_configure_dir.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/acx_configure_dir.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/acx_configure_dir.m4	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-2020 Free Software Foundation, Inc.
+# Copyright (C) 1992-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-exp.c ./gdb/ada-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-exp.c	2020-03-07 02:11:12.000000000 +0000
+++ ./gdb/ada-exp.c	2021-12-16 02:00:18.000000000 +0000
@@ -1,21 +1,20 @@
+/* A Bison parser, made by GNU Bison 3.6.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, 2018-2020 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,13 +27,17 @@
    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.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -46,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,14 +63,10 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
-/* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
+/* First part of user prologue.  */
 #line 36 "ada-exp.y"
 
 
@@ -83,6 +82,7 @@
 #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,8 +103,6 @@ struct name_info {
 
 static struct parser_state *pstate = NULL;
 
-static struct stoken empty_stoken = { "", 0 };
-
 /* If expression is in the context of TYPE'(...), then TYPE, else
  * NULL.  */
 static struct type *type_qualifier;
@@ -126,15 +124,12 @@ static struct type* write_var_or_type (s
 
 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 *);
 
@@ -150,85 +145,393 @@ static struct type *type_boolean (struct
 
 static struct type *type_system_address (struct parser_state *);
 
+using namespace expr;
+
+/* 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
+      && res->resolve (pstate->expout.get (),
+		       deprocedure_p,
+		       pstate->parse_completion,
+		       pstate->block_tracker,
+		       context_type))
+    result
+      = make_operation<ada_funcall_operation> (std::move (result),
+					       std::vector<operation_up> ());
+
+  return result;
+}
+
+/* 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);
+}
+
+/* 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
+      || SYMBOL_DOMAIN (vvo->get_symbol ()) != UNDEF_DOMAIN)
+    {
+      struct value *callee_v = callee->evaluate (nullptr,
+						 pstate->expout.get (),
+						 EVAL_AVOID_SIDE_EFFECTS);
+      callee_t = ada_check_typedef (value_type (callee_v));
+      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 ();
+  ada_choices_component *result = dynamic_cast<ada_choices_component *> (last);
+  gdb_assert (result != nullptr);
+  return result;
+}
+
+/* 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;
+}
+
 
+#line 442 "ada-exp.c.tmp"
+
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTRPTR nullptr
+#   else
+#    define YY_NULLPTRPTR 0
+#   endif
+#  else
+#   define YY_NULLPTRPTR ((void*)0)
+#  endif
+# endif
 
-/* Line 189 of yacc.c  */
-#line 157 "ada-exp.c.tmp"
 
-/* Enabling traces.  */
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+#if YYDEBUG
+extern int yydebug;
 #endif
 
-
-/* Tokens.  */
+/* Token kinds.  */
 #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
-   };
-#endif
-/* Tokens.  */
+  enum yytokentype
+  {
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    INT = 258,                     /* INT  */
+    NULL_PTR = 259,                /* NULL_PTR  */
+    CHARLIT = 260,                 /* CHARLIT  */
+    FLOAT = 261,                   /* FLOAT  */
+    TRUEKEYWORD = 262,             /* TRUEKEYWORD  */
+    FALSEKEYWORD = 263,            /* FALSEKEYWORD  */
+    COLONCOLON = 264,              /* COLONCOLON  */
+    STRING = 265,                  /* STRING  */
+    NAME = 266,                    /* NAME  */
+    DOT_ID = 267,                  /* DOT_ID  */
+    DOT_ALL = 268,                 /* DOT_ALL  */
+    DOLLAR_VARIABLE = 269,         /* DOLLAR_VARIABLE  */
+    ASSIGN = 270,                  /* ASSIGN  */
+    _AND_ = 271,                   /* _AND_  */
+    OR = 272,                      /* OR  */
+    XOR = 273,                     /* XOR  */
+    THEN = 274,                    /* THEN  */
+    ELSE = 275,                    /* ELSE  */
+    NOTEQUAL = 276,                /* NOTEQUAL  */
+    LEQ = 277,                     /* LEQ  */
+    GEQ = 278,                     /* GEQ  */
+    IN = 279,                      /* IN  */
+    DOTDOT = 280,                  /* DOTDOT  */
+    UNARY = 281,                   /* UNARY  */
+    MOD = 282,                     /* MOD  */
+    REM = 283,                     /* REM  */
+    STARSTAR = 284,                /* STARSTAR  */
+    ABS = 285,                     /* ABS  */
+    NOT = 286,                     /* NOT  */
+    VAR = 287,                     /* VAR  */
+    ARROW = 288,                   /* ARROW  */
+    TICK_ACCESS = 289,             /* TICK_ACCESS  */
+    TICK_ADDRESS = 290,            /* TICK_ADDRESS  */
+    TICK_FIRST = 291,              /* TICK_FIRST  */
+    TICK_LAST = 292,               /* TICK_LAST  */
+    TICK_LENGTH = 293,             /* TICK_LENGTH  */
+    TICK_MAX = 294,                /* TICK_MAX  */
+    TICK_MIN = 295,                /* TICK_MIN  */
+    TICK_MODULUS = 296,            /* TICK_MODULUS  */
+    TICK_POS = 297,                /* TICK_POS  */
+    TICK_RANGE = 298,              /* TICK_RANGE  */
+    TICK_SIZE = 299,               /* TICK_SIZE  */
+    TICK_TAG = 300,                /* TICK_TAG  */
+    TICK_VAL = 301,                /* TICK_VAL  */
+    NEW = 302,                     /* NEW  */
+    OTHERS = 303                   /* OTHERS  */
+  };
+  typedef enum yytokentype yytoken_kind_t;
+#endif
+/* Token kinds.  */
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
 #define INT 258
 #define NULL_PTR 259
 #define CHARLIT 260
@@ -242,49 +545,45 @@ static struct type *type_system_address
 #define DOT_ALL 268
 #define DOLLAR_VARIABLE 269
 #define ASSIGN 270
-#define ELSE 271
-#define THEN 272
+#define _AND_ 271
+#define OR 272
 #define XOR 273
-#define OR 274
-#define _AND_ 275
-#define DOTDOT 276
-#define IN 277
+#define THEN 274
+#define ELSE 275
+#define NOTEQUAL 276
+#define LEQ 277
 #define GEQ 278
-#define LEQ 279
-#define NOTEQUAL 280
+#define IN 279
+#define DOTDOT 280
 #define UNARY 281
-#define REM 282
-#define MOD 283
-#define NOT 284
+#define MOD 282
+#define REM 283
+#define STARSTAR 284
 #define ABS 285
-#define STARSTAR 286
+#define NOT 286
 #define VAR 287
 #define ARROW 288
-#define TICK_LENGTH 289
-#define TICK_LAST 290
+#define TICK_ACCESS 289
+#define TICK_ADDRESS 290
 #define TICK_FIRST 291
-#define TICK_ADDRESS 292
-#define TICK_ACCESS 293
-#define TICK_MODULUS 294
+#define TICK_LAST 292
+#define TICK_LENGTH 293
+#define TICK_MAX 294
 #define TICK_MIN 295
-#define TICK_MAX 296
-#define TICK_VAL 297
-#define TICK_TAG 298
+#define TICK_MODULUS 296
+#define TICK_POS 297
+#define TICK_RANGE 298
 #define TICK_SIZE 299
-#define TICK_RANGE 300
-#define TICK_POS 301
+#define TICK_TAG 300
+#define TICK_VAL 301
 #define NEW 302
 #define OTHERS 303
 
-
-
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 120 "ada-exp.y"
+#line 408 "ada-exp.y"
 
     LONGEST lval;
     struct {
@@ -301,51 +600,199 @@ typedef union YYSTYPE
     struct internalvar *ivar;
   
 
+#line 604 "ada-exp.c.tmp"
 
-/* Line 214 of yacc.c  */
-#line 307 "ada-exp.c.tmp"
-} YYSTYPE;
+};
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_INT = 3,                        /* INT  */
+  YYSYMBOL_NULL_PTR = 4,                   /* NULL_PTR  */
+  YYSYMBOL_CHARLIT = 5,                    /* CHARLIT  */
+  YYSYMBOL_FLOAT = 6,                      /* FLOAT  */
+  YYSYMBOL_TRUEKEYWORD = 7,                /* TRUEKEYWORD  */
+  YYSYMBOL_FALSEKEYWORD = 8,               /* FALSEKEYWORD  */
+  YYSYMBOL_COLONCOLON = 9,                 /* COLONCOLON  */
+  YYSYMBOL_STRING = 10,                    /* STRING  */
+  YYSYMBOL_NAME = 11,                      /* NAME  */
+  YYSYMBOL_DOT_ID = 12,                    /* DOT_ID  */
+  YYSYMBOL_DOT_ALL = 13,                   /* DOT_ALL  */
+  YYSYMBOL_DOLLAR_VARIABLE = 14,           /* DOLLAR_VARIABLE  */
+  YYSYMBOL_ASSIGN = 15,                    /* ASSIGN  */
+  YYSYMBOL__AND_ = 16,                     /* _AND_  */
+  YYSYMBOL_OR = 17,                        /* OR  */
+  YYSYMBOL_XOR = 18,                       /* XOR  */
+  YYSYMBOL_THEN = 19,                      /* THEN  */
+  YYSYMBOL_ELSE = 20,                      /* ELSE  */
+  YYSYMBOL_21_ = 21,                       /* '='  */
+  YYSYMBOL_NOTEQUAL = 22,                  /* NOTEQUAL  */
+  YYSYMBOL_23_ = 23,                       /* '<'  */
+  YYSYMBOL_24_ = 24,                       /* '>'  */
+  YYSYMBOL_LEQ = 25,                       /* LEQ  */
+  YYSYMBOL_GEQ = 26,                       /* GEQ  */
+  YYSYMBOL_IN = 27,                        /* IN  */
+  YYSYMBOL_DOTDOT = 28,                    /* DOTDOT  */
+  YYSYMBOL_29_ = 29,                       /* '@'  */
+  YYSYMBOL_30_ = 30,                       /* '+'  */
+  YYSYMBOL_31_ = 31,                       /* '-'  */
+  YYSYMBOL_32_ = 32,                       /* '&'  */
+  YYSYMBOL_UNARY = 33,                     /* UNARY  */
+  YYSYMBOL_34_ = 34,                       /* '*'  */
+  YYSYMBOL_35_ = 35,                       /* '/'  */
+  YYSYMBOL_MOD = 36,                       /* MOD  */
+  YYSYMBOL_REM = 37,                       /* REM  */
+  YYSYMBOL_STARSTAR = 38,                  /* STARSTAR  */
+  YYSYMBOL_ABS = 39,                       /* ABS  */
+  YYSYMBOL_NOT = 40,                       /* NOT  */
+  YYSYMBOL_VAR = 41,                       /* VAR  */
+  YYSYMBOL_ARROW = 42,                     /* ARROW  */
+  YYSYMBOL_43_ = 43,                       /* '|'  */
+  YYSYMBOL_TICK_ACCESS = 44,               /* TICK_ACCESS  */
+  YYSYMBOL_TICK_ADDRESS = 45,              /* TICK_ADDRESS  */
+  YYSYMBOL_TICK_FIRST = 46,                /* TICK_FIRST  */
+  YYSYMBOL_TICK_LAST = 47,                 /* TICK_LAST  */
+  YYSYMBOL_TICK_LENGTH = 48,               /* TICK_LENGTH  */
+  YYSYMBOL_TICK_MAX = 49,                  /* TICK_MAX  */
+  YYSYMBOL_TICK_MIN = 50,                  /* TICK_MIN  */
+  YYSYMBOL_TICK_MODULUS = 51,              /* TICK_MODULUS  */
+  YYSYMBOL_TICK_POS = 52,                  /* TICK_POS  */
+  YYSYMBOL_TICK_RANGE = 53,                /* TICK_RANGE  */
+  YYSYMBOL_TICK_SIZE = 54,                 /* TICK_SIZE  */
+  YYSYMBOL_TICK_TAG = 55,                  /* TICK_TAG  */
+  YYSYMBOL_TICK_VAL = 56,                  /* TICK_VAL  */
+  YYSYMBOL_57_ = 57,                       /* '.'  */
+  YYSYMBOL_58_ = 58,                       /* '('  */
+  YYSYMBOL_59_ = 59,                       /* '['  */
+  YYSYMBOL_NEW = 60,                       /* NEW  */
+  YYSYMBOL_OTHERS = 61,                    /* OTHERS  */
+  YYSYMBOL_62_ = 62,                       /* ';'  */
+  YYSYMBOL_63_ = 63,                       /* ')'  */
+  YYSYMBOL_64_ = 64,                       /* '\''  */
+  YYSYMBOL_65_ = 65,                       /* ','  */
+  YYSYMBOL_66_ = 66,                       /* '{'  */
+  YYSYMBOL_67_ = 67,                       /* '}'  */
+  YYSYMBOL_68_ = 68,                       /* ']'  */
+  YYSYMBOL_YYACCEPT = 69,                  /* $accept  */
+  YYSYMBOL_start = 70,                     /* start  */
+  YYSYMBOL_exp1 = 71,                      /* exp1  */
+  YYSYMBOL_primary = 72,                   /* primary  */
+  YYSYMBOL_73_1 = 73,                      /* $@1  */
+  YYSYMBOL_save_qualifier = 74,            /* save_qualifier  */
+  YYSYMBOL_simple_exp = 75,                /* simple_exp  */
+  YYSYMBOL_arglist = 76,                   /* arglist  */
+  YYSYMBOL_relation = 77,                  /* relation  */
+  YYSYMBOL_exp = 78,                       /* exp  */
+  YYSYMBOL_and_exp = 79,                   /* and_exp  */
+  YYSYMBOL_and_then_exp = 80,              /* and_then_exp  */
+  YYSYMBOL_or_exp = 81,                    /* or_exp  */
+  YYSYMBOL_or_else_exp = 82,               /* or_else_exp  */
+  YYSYMBOL_xor_exp = 83,                   /* xor_exp  */
+  YYSYMBOL_tick_arglist = 84,              /* tick_arglist  */
+  YYSYMBOL_type_prefix = 85,               /* type_prefix  */
+  YYSYMBOL_opt_type_prefix = 86,           /* opt_type_prefix  */
+  YYSYMBOL_var_or_type = 87,               /* var_or_type  */
+  YYSYMBOL_block = 88,                     /* block  */
+  YYSYMBOL_aggregate = 89,                 /* aggregate  */
+  YYSYMBOL_aggregate_component_list = 90,  /* aggregate_component_list  */
+  YYSYMBOL_positional_list = 91,           /* positional_list  */
+  YYSYMBOL_component_groups = 92,          /* component_groups  */
+  YYSYMBOL_others = 93,                    /* others  */
+  YYSYMBOL_component_group = 94,           /* component_group  */
+  YYSYMBOL_component_associations = 95     /* component_associations  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
 
 
-/* Line 264 of yacc.c  */
-#line 319 "ada-exp.c.tmp"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -353,55 +800,100 @@ 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 __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_uint8 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #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_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
 # 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__ && ! defined __ICC && 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 __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
 #endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#if !defined yyoverflow
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
 
@@ -417,11 +909,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 +921,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,111 +936,116 @@ 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
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   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 (YYSIZEOF (union 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) * (YYSIZEOF (yy_state_t) + YYSIZEOF (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                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*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, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYPTRDIFF_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
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   770
+#define YYLAST   751
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  69
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  31
+#define YYNNTS  27
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  122
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  233
+#define YYNRULES  118
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  229
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
 #define YYMAXUTOK   303
 
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
+static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -556,13 +1053,13 @@ static const yytype_uint8 yytranslate[]
        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,
+      23,    21,    24,     2,    29,     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,     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,    66,    43,    67,     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 +1074,428 @@ 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,
+      15,    16,    17,    18,    19,    20,    22,    25,    26,    27,
+      28,    33,    36,    37,    38,    39,    40,    41,    42,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    60,    61
 };
 
 #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[] =
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 yyrline[] =
 {
-      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.  */
-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,   473,   473,   477,   478,   480,   495,   499,   507,   509,
+     524,   524,   537,   541,   543,   551,   562,   568,   572,   579,
+     582,   586,   602,   609,   613,   616,   618,   620,   622,   626,
+     639,   643,   647,   651,   655,   659,   663,   667,   671,   675,
+     678,   682,   686,   690,   692,   699,   707,   710,   718,   729,
+     733,   737,   741,   742,   743,   744,   745,   746,   750,   753,
+     759,   762,   768,   771,   777,   779,   783,   786,   799,   801,
+     803,   809,   815,   821,   823,   825,   827,   829,   831,   837,
+     847,   849,   854,   863,   866,   870,   874,   882,   893,   901,
+     908,   910,   914,   918,   920,   922,   930,   941,   943,   948,
+     959,   960,   966,   971,   977,   986,   987,   988,   992,   999,
+    1012,  1018,  1024,  1033,  1038,  1043,  1057,  1059,  1061
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* 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",
-  "and_then_exp", "or_exp", "or_else_exp", "xor_exp", "tick_arglist",
-  "type_prefix", "opt_type_prefix", "var_or_type", "block", "aggregate",
+  "\"end of file\"", "error", "\"invalid token\"", "INT", "NULL_PTR",
+  "CHARLIT", "FLOAT", "TRUEKEYWORD", "FALSEKEYWORD", "COLONCOLON",
+  "STRING", "NAME", "DOT_ID", "DOT_ALL", "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", "'.'", "'('", "'['", "NEW",
+  "OTHERS", "';'", "')'", "'\\''", "','", "'{'", "'}'", "']'", "$accept",
+  "start", "exp1", "primary", "$@1", "save_qualifier", "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
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 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,
+     275,    61,   276,    60,    62,   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,
+     286,   287,   288,   124,   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
 };
-# endif
+#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 (-102)
+
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+#define YYTABLE_NINF (-83)
+
+#define yytable_value_is_error(Yyn) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-       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
+     410,  -102,  -102,  -102,  -102,  -102,  -102,  -102,    25,  -102,
+     410,   410,   134,   134,   410,   410,   269,    -3,     4,    20,
+     -38,   509,   648,    35,  -102,     9,    13,    11,    27,    56,
+     -46,    61,   255,    83,  -102,  -102,  -102,   546,   137,   137,
+      14,    14,   137,   137,    21,    57,   -51,   585,    49,    37,
+     269,  -102,  -102,    51,  -102,  -102,    62,  -102,   410,  -102,
+    -102,   410,  -102,  -102,    70,    70,    70,  -102,  -102,   257,
+     410,   410,   410,   410,   410,   410,   410,   410,   410,   410,
+     410,   410,   410,   410,   410,   410,   410,   103,   333,   372,
+     410,   410,   113,   410,   114,   410,  -102,    75,    78,    88,
+      91,   257,  -102,    58,   410,   448,   410,  -102,   410,   410,
+     448,  -102,  -102,    82,  -102,   269,   134,  -102,  -102,   147,
+    -102,  -102,  -102,    -2,   608,    12,  -102,    84,   713,   713,
+     713,   713,   713,   713,     1,   692,   170,    89,   137,   137,
+     137,   116,   116,   116,   116,   116,   410,   410,  -102,   410,
+    -102,  -102,  -102,   410,  -102,   410,  -102,   410,   410,   410,
+     410,   628,    42,  -102,  -102,  -102,  -102,   661,  -102,  -102,
+     676,  -102,  -102,  -102,  -102,    14,    92,   410,   410,  -102,
+     486,  -102,    70,   410,   525,   703,   191,  -102,  -102,  -102,
+    -102,    93,    86,    96,    99,   410,  -102,   105,   410,   448,
+    -102,  -102,   324,    24,  -102,  -102,   713,    70,   410,  -102,
+     410,   410,  -102,   498,   410,  -102,  -102,  -102,   410,  -102,
+     713,   101,   104,  -102,   106,  -102,  -102,  -102,  -102
 };
 
-/* 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[] =
+  /* 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_int8 yydefact[] =
 {
       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,
+     117,   116,    23,    22,    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,
+       6,    84,    68,    69,    80,    80,    80,    73,    74,    84,
       84,    84,    84,    84,    84,    84,    84,    84,    84,    84,
-      84,    84,    84,    84,    84,    84,     0,    84,    84,    84,
+      84,    84,    84,    84,    84,    84,    84,     0,    84,    84,
       84,    84,     0,    84,     0,    84,    79,     0,     0,     0,
-       0,    84,    12,    94,   115,   110,    84,    15,    84,    84,
+       0,    84,    12,    94,    84,    84,    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
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -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
+      70,    71,    72,    93,    39,     0,    25,     0,    40,    41,
+      50,    51,    42,    49,    19,     0,    16,    35,    36,    38,
+      37,    31,    32,    34,    33,    30,    84,    84,    58,    84,
+      62,    66,    59,    84,    63,    84,    67,    84,    84,    84,
+      84,    39,     0,    10,    98,    96,   110,     0,   113,   108,
+       0,   111,   114,   104,   107,    29,     0,    84,    84,     8,
+      84,   118,    80,    84,    19,     0,    16,    60,    64,    61,
+      65,     0,     0,     0,     0,    84,     9,     0,    84,    84,
+      81,    26,     0,    93,    27,    44,    43,    80,    84,    78,
+      84,    84,    77,     0,    84,   112,   115,    13,    84,    47,
+      46,     0,     0,    14,     0,    28,    76,    75,    11
 };
 
-/* 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
+    -102,  -102,   160,    19,  -102,  -102,     7,    77,   -52,     0,
+    -102,  -102,  -102,  -102,  -102,   -64,  -102,  -102,   -15,  -102,
+    -102,  -102,  -102,   -44,  -102,  -102,  -101
 };
 
-/* 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,    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
 };
 
-/* 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,
+      24,   121,   122,    56,   168,    96,   114,    35,    55,   172,
+      97,    58,   107,    59,    60,     8,    48,    38,    39,    21,
+      57,    42,    43,    47,    58,    91,    59,    60,    93,    92,
+      35,    40,    41,    35,    35,    21,   148,   150,   151,   152,
+     177,   154,    36,   156,    94,    62,    63,    64,    65,    66,
+     113,    88,    89,    90,   182,    67,    68,    47,   117,    69,
+      70,   118,   136,   104,   105,    36,   218,   164,    36,    36,
+     127,   174,    69,    70,    95,   179,   124,   180,   128,   129,
+     130,   131,   132,   133,   135,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   103,   187,   134,   188,   216,   106,
+     112,   189,   165,   190,   166,   196,   169,   180,   161,   171,
+      98,    99,   167,   100,   111,   170,   115,   167,   205,    79,
+      80,    81,   167,    82,    83,    84,    85,    86,   119,   116,
+     146,   186,   153,   157,   155,   175,   158,     1,     2,     3,
+       4,     5,     6,   219,     7,     8,   159,   173,     9,   160,
+     176,   210,   181,   185,    86,   200,   209,   191,   192,   193,
+     194,   211,   212,   214,   226,   184,    12,   227,    13,   228,
+     -45,    82,    83,    84,    85,    86,    46,   201,   162,     0,
+     204,     0,     0,     0,     0,   202,   -45,   -45,   -45,     0,
+     206,   -48,    16,     0,    17,     0,     0,     0,   215,     0,
+      18,     0,   213,     0,     0,     0,   167,   -48,   -48,   -48,
+     221,   222,     0,     0,   224,   220,     0,     0,   225,   -82,
+     -82,   -82,   -82,     0,     0,     0,   -82,     0,   101,     0,
+       0,     0,   -45,   -45,   102,   -45,     0,     0,   -45,     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,     0,    14,    15,     0,    10,
+      11,    12,     0,    13,   -82,   -82,   -82,   -82,    14,    15,
+       0,   -82,     0,   101,     0,    16,     0,    17,     0,   102,
+     -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,     0,
+       0,     0,   147,    78,    79,    80,    81,     0,    82,    83,
+      84,    85,    86,    10,    11,    12,     0,    13,     0,     0,
+       0,     0,    14,    15,     0,     1,     2,     3,     4,     5,
+       6,     0,     7,     8,     0,     0,     9,   217,     0,     0,
+       0,    16,   149,    17,     0,     0,     0,     0,     0,    18,
+       0,     0,    10,    11,    12,     0,    13,     0,     0,     0,
+       0,    14,    15,     1,     2,     3,     4,     5,     6,     0,
+       7,     8,     0,     0,     9,     0,     0,     0,     0,     0,
+      16,     0,    17,     0,     0,     0,     0,     0,    18,     0,
+      10,    11,    12,     0,    13,     0,     0,     0,     0,    14,
+      15,     1,     2,     3,     4,     5,     6,     0,     7,    44,
+       0,     0,     9,     0,     0,     0,     0,     0,    16,     0,
+      17,     0,     0,     0,     0,     0,    18,     0,    10,    11,
+      12,     0,    13,     0,     0,     0,     0,    14,    15,     1,
+       2,     3,     4,     5,     6,     0,     7,   203,     0,     0,
+       9,     0,     0,     0,     0,     0,    16,     0,    17,     0,
+       0,     0,     0,     0,    18,     0,    10,    11,    12,     0,
+      13,    59,    60,     0,    61,    14,    15,    78,    79,    80,
+      81,     0,    82,    83,    84,    85,    86,    59,    60,     0,
+       0,     0,     0,     0,    16,     0,    17,     0,     0,     0,
+       0,     0,    18,    62,    63,    64,    65,    66,    59,    60,
+       0,   223,     0,    67,    68,     0,     0,    69,    70,    62,
+      63,    64,    65,    66,     0,     0,     0,     0,   207,    67,
+      68,     0,     0,    69,    70,     0,     0,     0,     0,     0,
+      62,    63,    64,    65,    66,     0,     0,     0,     0,     0,
+      67,    68,     0,     0,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,   108,    78,    79,    80,    81,     0,    82,
+      83,    84,    85,    86,     0,    87,     0,   109,   110,    71,
+      72,    73,    74,    75,    76,    77,   178,    78,    79,    80,
+      81,     0,    82,    83,    84,    85,    86,     0,    87,    71,
+      72,    73,    74,    75,    76,    77,   195,    78,    79,    80,
+      81,     0,    82,    83,    84,    85,    86,     0,    87,    71,
+      72,    73,    74,    75,    76,    77,     0,    78,    79,    80,
+      81,     0,    82,    83,    84,    85,    86,     0,    87,   108,
       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
+       0,     0,     0,   109,   110,    78,    79,    80,    81,     0,
+      82,    83,    84,    85,    86,     0,     0,     0,   198,   199,
+     183,    78,    79,    80,    81,     0,    82,    83,    84,    85,
+      86,   208,    78,    79,    80,    81,     0,    82,    83,    84,
+      85,    86,    78,    79,    80,    81,     0,    82,    83,    84,
+      85,    86
 };
 
 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,
+       0,    65,    66,    18,   105,    51,    50,     9,    11,   110,
+      56,    62,    63,    12,    13,    11,    16,    10,    11,     0,
+       0,    14,    15,    16,    62,    16,    12,    13,    17,    16,
+       9,    12,    13,     9,     9,    16,    88,    89,    90,    91,
+      42,    93,    44,    95,    17,    44,    45,    46,    47,    48,
+      50,    16,    17,    18,    53,    54,    55,    50,    58,    58,
+      59,    61,    77,    42,    43,    44,    42,     9,    44,    44,
+      70,   115,    58,    59,    18,    63,    69,    65,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    11,   147,    77,   149,   199,    42,
+      63,   153,    44,   155,   104,    63,   106,    65,   101,   109,
+      49,    50,   105,    52,    65,   108,    65,   110,   182,    30,
+      31,    32,   115,    34,    35,    36,    37,    38,    58,    67,
+      27,   146,    19,    58,    20,   116,    58,     3,     4,     5,
+       6,     7,     8,   207,    10,    11,    58,    65,    14,    58,
+       3,    65,    68,   146,    38,    63,    63,   157,   158,   159,
+     160,    65,    63,    58,    63,   146,    32,    63,    34,    63,
+       0,    34,    35,    36,    37,    38,    16,   177,   101,    -1,
+     180,    -1,    -1,    -1,    -1,   178,    16,    17,    18,    -1,
+     183,     0,    58,    -1,    60,    -1,    -1,    -1,   198,    -1,
+      66,    -1,   195,    -1,    -1,    -1,   199,    16,    17,    18,
+     210,   211,    -1,    -1,   214,   208,    -1,    -1,   218,    49,
+      50,    51,    52,    -1,    -1,    -1,    56,    -1,    58,    -1,
+      -1,    -1,    62,    63,    64,    65,    -1,    -1,    68,    -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,    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,
+      -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,    -1,    39,    40,    -1,    30,
+      31,    32,    -1,    34,    49,    50,    51,    52,    39,    40,
+      -1,    56,    -1,    58,    -1,    58,    -1,    60,    -1,    64,
+      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,    -1,
+      -1,    -1,    19,    29,    30,    31,    32,    -1,    34,    35,
+      36,    37,    38,    30,    31,    32,    -1,    34,    -1,    -1,
+      -1,    -1,    39,    40,    -1,     3,     4,     5,     6,     7,
+       8,    -1,    10,    11,    -1,    -1,    14,    63,    -1,    -1,
+      -1,    58,    20,    60,    -1,    -1,    -1,    -1,    -1,    66,
+      -1,    -1,    30,    31,    32,    -1,    34,    -1,    -1,    -1,
+      -1,    39,    40,     3,     4,     5,     6,     7,     8,    -1,
+      10,    11,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+      58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
+      30,    31,    32,    -1,    34,    -1,    -1,    -1,    -1,    39,
+      40,     3,     4,     5,     6,     7,     8,    -1,    10,    11,
+      -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    58,    -1,
+      60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    30,    31,
+      32,    -1,    34,    -1,    -1,    -1,    -1,    39,    40,     3,
+       4,     5,     6,     7,     8,    -1,    10,    11,    -1,    -1,
+      14,    -1,    -1,    -1,    -1,    -1,    58,    -1,    60,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,    30,    31,    32,    -1,
+      34,    12,    13,    -1,    15,    39,    40,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    12,    13,    -1,
+      -1,    -1,    -1,    -1,    58,    -1,    60,    -1,    -1,    -1,
+      -1,    -1,    66,    44,    45,    46,    47,    48,    12,    13,
+      -1,    63,    -1,    54,    55,    -1,    -1,    58,    59,    44,
+      45,    46,    47,    48,    -1,    -1,    -1,    -1,    53,    54,
+      55,    -1,    -1,    58,    59,    -1,    -1,    -1,    -1,    -1,
+      44,    45,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    -1,    -1,    58,    59,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    38,    -1,    40,    -1,    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,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    -1,    40,    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
+      -1,    -1,    -1,    42,    43,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    38,    -1,    -1,    -1,    42,    43,
+      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
+      38,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38,    29,    30,    31,    32,    -1,    34,    35,    36,
+      37,    38
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_int8 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,    10,    11,    14,
-      30,    31,    32,    34,    38,    39,    58,    60,    66,    70,
+      30,    31,    32,    34,    39,    40,    58,    60,    66,    70,
       71,    72,    75,    77,    78,    79,    80,    81,    82,    83,
-      85,    86,    87,    88,    89,     9,    48,    72,    75,    75,
+      85,    86,    87,    88,    89,     9,    44,    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,
+      13,    15,    44,    45,    46,    47,    48,    54,    55,    58,
+      59,    21,    22,    23,    24,    25,    26,    27,    29,    30,
+      31,    32,    34,    35,    36,    37,    38,    40,    16,    17,
+      18,    16,    16,    17,    17,    18,    51,    56,    49,    50,
+      52,    58,    64,    11,    42,    43,    42,    63,    28,    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
+      75,    75,    75,    75,    72,    75,    87,    75,    75,    75,
+      75,    75,    75,    75,    75,    75,    27,    19,    77,    20,
+      77,    77,    77,    19,    77,    20,    77,    58,    58,    58,
+      58,    75,    76,    74,     9,    44,    78,    75,    95,    78,
+      75,    78,    95,    65,    92,    72,     3,    42,    28,    63,
+      65,    68,    53,    28,    72,    75,    87,    77,    77,    77,
+      77,    78,    78,    78,    78,    28,    63,    73,    42,    43,
+      63,    78,    75,    11,    78,    84,    75,    53,    28,    63,
+      65,    65,    63,    75,    58,    78,    95,    63,    42,    84,
+      75,    78,    78,    63,    78,    78,    63,    63,    63
 };
 
-#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
-
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_int8 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,
+      95,    95,    95,    95,    95,    95,    72,    72,    72
+};
 
-/* 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.  */
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_int8 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,
+       3,     3,     5,     3,     3,     5,     2,     2,     4
+};
 
-#define YYFAIL		goto yyerrlab
 
-#define YYRECOVERING()  (!!yyerrstatus)
+enum { YYENOMEM = -2 };
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      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
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
 
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-/* 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
 
+#define YYRECOVERING()  (!!yyerrstatus)
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
+#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 (0)
+
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1123,80 +1505,65 @@ 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))
-
-
-/*--------------------------------.
-| 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 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
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Kind, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#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 *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1204,16 +1571,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
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1224,63 +1583,56 @@ 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 (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule)
 {
+  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);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             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,
+                       YY_ACCESSING_SYMBOL (+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.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1295,342 +1647,82 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   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++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
 
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  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;
 
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
 
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      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;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# 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)
-{
-  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;
-    }
-}
-#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,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  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;
-
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
 
-/*-------------------------.
-| 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)
+
+/*----------.
+| yyparse.  |
+`----------*/
+
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
-    int yystate;
+    yy_state_fast_t 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.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -1638,133 +1730,147 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
   yystacksize = YYINITDEPTH;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  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;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined 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);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+
+        /* 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 * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* 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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, 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 */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
   /* 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.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      YYDPRINTF ((stderr, "Reading a token\n"));
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -1779,8 +1885,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;
     }
@@ -1792,13 +1898,13 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -1813,14 +1919,14 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   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
@@ -1833,988 +1939,921 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 4:
-
-/* Line 1455 of yacc.c  */
-#line 191 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+  case 4:
+#line 479 "ada-exp.y"
+                        { ada_wrap2<comma_operation> (BINOP_COMMA); }
+#line 1947 "ada-exp.c.tmp"
     break;
 
   case 5:
-
-/* Line 1455 of yacc.c  */
-#line 193 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 481 "ada-exp.y"
+                        {
+			  operation_up rhs = pstate->pop ();
+			  operation_up lhs = ada_pop ();
+			  value *lhs_val
+			    = lhs->evaluate (nullptr, pstate->expout.get (),
+					     EVAL_AVOID_SIDE_EFFECTS);
+			  rhs = resolve (std::move (rhs), true,
+					 value_type (lhs_val));
+			  pstate->push_new<ada_assign_operation>
+			    (std::move (lhs), std::move (rhs));
+			}
+#line 1963 "ada-exp.c.tmp"
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
-#line 198 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 496 "ada-exp.y"
+                        { ada_wrap<ada_unop_ind_operation> (); }
+#line 1969 "ada-exp.c.tmp"
     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 500 "ada-exp.y"
+                        {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_structop_operation>
+			    (std::move (arg), copy_name ((yyvsp[0].sval)));
+			}
+#line 1979 "ada-exp.c.tmp"
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 207 "ada-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate, (yyvsp[(3) - (4)].lval));
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-		        }
+#line 508 "ada-exp.y"
+                        { ada_funcall ((yyvsp[-1].lval)); }
+#line 1985 "ada-exp.c.tmp"
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 213 "ada-exp.y"
-    {
-			  if ((yyvsp[(1) - (4)].tval) != NULL)
+#line 510 "ada-exp.y"
+                        {
+			  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));
 			}
+#line 2002 "ada-exp.c.tmp"
     break;
 
   case 10:
-
-/* Line 1455 of yacc.c  */
-#line 231 "ada-exp.y"
-    { type_qualifier = (yyvsp[(1) - (3)].tval); }
+#line 524 "ada-exp.y"
+                                                { type_qualifier = (yyvsp[-2].tval); }
+#line 2008 "ada-exp.c.tmp"
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 233 "ada-exp.y"
-    {
-			  if ((yyvsp[(1) - (7)].tval) == NULL)
+#line 526 "ada-exp.y"
+                        {
+			  if ((yyvsp[-6].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[-6].tval)));
+			  pstate->push_new<ada_qual_operation>
+			    (std::move (arg), (yyvsp[-6].tval));
+			  type_qualifier = (yyvsp[-4].tval);
 			}
+#line 2022 "ada-exp.c.tmp"
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 243 "ada-exp.y"
-    { (yyval.tval) = type_qualifier; }
+#line 537 "ada-exp.y"
+                        { (yyval.tval) = type_qualifier; }
+#line 2028 "ada-exp.c.tmp"
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 248 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_SLICE); }
+#line 542 "ada-exp.y"
+                        { ada_wrap3<ada_ternop_slice_operation> (); }
+#line 2034 "ada-exp.c.tmp"
     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 544 "ada-exp.y"
+                        { if ((yyvsp[-5].tval) == NULL) 
+			    ada_wrap3<ada_ternop_slice_operation> ();
 			  else
 			    error (_("Cannot slice a type"));
 			}
+#line 2044 "ada-exp.c.tmp"
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 257 "ada-exp.y"
-    { }
+#line 551 "ada-exp.y"
+                                { }
+#line 2050 "ada-exp.c.tmp"
     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);
-			    }
+#line 563 "ada-exp.y"
+                        { if ((yyvsp[0].tval) != NULL)
+			    pstate->push_new<type_operation> ((yyvsp[0].tval));
 			}
+#line 2058 "ada-exp.c.tmp"
     break;
 
   case 17:
+#line 569 "ada-exp.y"
+                        { pstate->push_dollar ((yyvsp[0].sval)); }
+#line 2064 "ada-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 279 "ada-exp.y"
-    { write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval)); }
+  case 18:
+#line 573 "ada-exp.y"
+                        {
+			  pstate->push_new<ada_aggregate_operation>
+			    (pop_component ());
+			}
+#line 2073 "ada-exp.c.tmp"
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 289 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 583 "ada-exp.y"
+                        { ada_wrap_overload<ada_neg_operation> (UNOP_NEG); }
+#line 2079 "ada-exp.c.tmp"
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 293 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+#line 587 "ada-exp.y"
+                        {
+			  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));
+			}
+#line 2097 "ada-exp.c.tmp"
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
-#line 297 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 603 "ada-exp.y"
+                        {
+			  ada_wrap_overload<unary_logical_not_operation>
+			    (UNOP_LOGICAL_NOT);
+			}
+#line 2106 "ada-exp.c.tmp"
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 301 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ABS); }
+#line 610 "ada-exp.y"
+                        { ada_wrap_overload<ada_abs_operation> (UNOP_ABS); }
+#line 2112 "ada-exp.c.tmp"
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
-#line 304 "ada-exp.y"
-    { (yyval.lval) = 0; }
+#line 613 "ada-exp.y"
+                        { (yyval.lval) = 0; }
+#line 2118 "ada-exp.c.tmp"
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
-#line 308 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 617 "ada-exp.y"
+                        { (yyval.lval) = 1; }
+#line 2124 "ada-exp.c.tmp"
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 310 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 619 "ada-exp.y"
+                        { (yyval.lval) = 1; }
+#line 2130 "ada-exp.c.tmp"
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 312 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (3)].lval) + 1; }
+#line 621 "ada-exp.y"
+                        { (yyval.lval) = (yyvsp[-2].lval) + 1; }
+#line 2136 "ada-exp.c.tmp"
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 314 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (5)].lval) + 1; }
+#line 623 "ada-exp.y"
+                        { (yyval.lval) = (yyvsp[-4].lval) + 1; }
+#line 2142 "ada-exp.c.tmp"
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 319 "ada-exp.y"
-    { 
-			  if ((yyvsp[(2) - (4)].tval) == NULL)
+#line 628 "ada-exp.y"
+                        { 
+			  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 2154 "ada-exp.c.tmp"
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 331 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EXP); }
+#line 640 "ada-exp.y"
+                        { ada_wrap2<ada_binop_exp_operation> (BINOP_EXP); }
+#line 2160 "ada-exp.c.tmp"
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 335 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 644 "ada-exp.y"
+                        { ada_wrap2<ada_binop_mul_operation> (BINOP_MUL); }
+#line 2166 "ada-exp.c.tmp"
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 339 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 648 "ada-exp.y"
+                        { ada_wrap2<ada_binop_div_operation> (BINOP_DIV); }
+#line 2172 "ada-exp.c.tmp"
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 343 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 652 "ada-exp.y"
+                        { ada_wrap2<ada_binop_rem_operation> (BINOP_REM); }
+#line 2178 "ada-exp.c.tmp"
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
-#line 347 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MOD); }
+#line 656 "ada-exp.y"
+                        { ada_wrap2<ada_binop_mod_operation> (BINOP_MOD); }
+#line 2184 "ada-exp.c.tmp"
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 351 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+#line 660 "ada-exp.y"
+                        { ada_wrap2<repeat_operation> (BINOP_REPEAT); }
+#line 2190 "ada-exp.c.tmp"
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 355 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 664 "ada-exp.y"
+                        { ada_wrap_op<ada_binop_addsub_operation> (BINOP_ADD); }
+#line 2196 "ada-exp.c.tmp"
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 359 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_CONCAT); }
+#line 668 "ada-exp.y"
+                        { ada_wrap2<concat_operation> (BINOP_CONCAT); }
+#line 2202 "ada-exp.c.tmp"
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 363 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 672 "ada-exp.y"
+                        { ada_wrap_op<ada_binop_addsub_operation> (BINOP_SUB); }
+#line 2208 "ada-exp.c.tmp"
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 370 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 679 "ada-exp.y"
+                        { ada_wrap_op<ada_binop_equal_operation> (BINOP_EQUAL); }
+#line 2214 "ada-exp.c.tmp"
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
-#line 374 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 683 "ada-exp.y"
+                        { ada_wrap_op<ada_binop_equal_operation> (BINOP_NOTEQUAL); }
+#line 2220 "ada-exp.c.tmp"
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 378 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 687 "ada-exp.y"
+                        { ada_un_wrap2<leq_operation> (BINOP_LEQ); }
+#line 2226 "ada-exp.c.tmp"
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 382 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); }
+#line 691 "ada-exp.y"
+                        { ada_wrap3<ada_ternop_range_operation> (); }
+#line 2232 "ada-exp.c.tmp"
     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 693 "ada-exp.y"
+                        {
+			  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 2243 "ada-exp.c.tmp"
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 389 "ada-exp.y"
-    { 
-			  if ((yyvsp[(3) - (3)].tval) == NULL)
+#line 700 "ada-exp.y"
+                        { 
+			  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 2255 "ada-exp.c.tmp"
     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 708 "ada-exp.y"
+                        { ada_wrap3<ada_ternop_range_operation> ();
+			  ada_wrap<unary_logical_not_operation> (); }
+#line 2262 "ada-exp.c.tmp"
     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 711 "ada-exp.y"
+                        {
+			  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 2274 "ada-exp.c.tmp"
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 407 "ada-exp.y"
-    { 
-			  if ((yyvsp[(4) - (4)].tval) == NULL)
+#line 719 "ada-exp.y"
+                        { 
+			  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 2287 "ada-exp.c.tmp"
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 418 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 730 "ada-exp.y"
+                        { ada_un_wrap2<geq_operation> (BINOP_GEQ); }
+#line 2293 "ada-exp.c.tmp"
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 422 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 734 "ada-exp.y"
+                        { ada_un_wrap2<less_operation> (BINOP_LESS); }
+#line 2299 "ada-exp.c.tmp"
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 426 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 738 "ada-exp.y"
+                        { ada_un_wrap2<gtr_operation> (BINOP_GTR); }
+#line 2305 "ada-exp.c.tmp"
     break;
 
   case 58:
-
-/* Line 1455 of yacc.c  */
-#line 439 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 751 "ada-exp.y"
+                        { ada_wrap2<ada_bitwise_and_operation>
+			    (BINOP_BITWISE_AND); }
+#line 2312 "ada-exp.c.tmp"
     break;
 
   case 59:
-
-/* Line 1455 of yacc.c  */
-#line 441 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 754 "ada-exp.y"
+                        { ada_wrap2<ada_bitwise_and_operation>
+			    (BINOP_BITWISE_AND); }
+#line 2319 "ada-exp.c.tmp"
     break;
 
   case 60:
-
-/* Line 1455 of yacc.c  */
-#line 446 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 760 "ada-exp.y"
+                        { ada_wrap2<logical_and_operation>
+			    (BINOP_LOGICAL_AND); }
+#line 2326 "ada-exp.c.tmp"
     break;
 
   case 61:
-
-/* Line 1455 of yacc.c  */
-#line 448 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 763 "ada-exp.y"
+                        { ada_wrap2<logical_and_operation>
+			    (BINOP_LOGICAL_AND); }
+#line 2333 "ada-exp.c.tmp"
     break;
 
   case 62:
-
-/* Line 1455 of yacc.c  */
-#line 453 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 769 "ada-exp.y"
+                        { ada_wrap2<ada_bitwise_ior_operation>
+			    (BINOP_BITWISE_IOR); }
+#line 2340 "ada-exp.c.tmp"
     break;
 
   case 63:
-
-/* Line 1455 of yacc.c  */
-#line 455 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 772 "ada-exp.y"
+                        { ada_wrap2<ada_bitwise_ior_operation>
+			    (BINOP_BITWISE_IOR); }
+#line 2347 "ada-exp.c.tmp"
     break;
 
   case 64:
-
-/* Line 1455 of yacc.c  */
-#line 460 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 778 "ada-exp.y"
+                        { ada_wrap2<logical_or_operation> (BINOP_LOGICAL_OR); }
+#line 2353 "ada-exp.c.tmp"
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
-#line 462 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 780 "ada-exp.y"
+                        { ada_wrap2<logical_or_operation> (BINOP_LOGICAL_OR); }
+#line 2359 "ada-exp.c.tmp"
     break;
 
   case 66:
-
-/* Line 1455 of yacc.c  */
-#line 466 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 784 "ada-exp.y"
+                        { ada_wrap2<ada_bitwise_xor_operation>
+			    (BINOP_BITWISE_XOR); }
+#line 2366 "ada-exp.c.tmp"
     break;
 
   case 67:
-
-/* Line 1455 of yacc.c  */
-#line 468 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 787 "ada-exp.y"
+                        { ada_wrap2<ada_bitwise_xor_operation>
+			    (BINOP_BITWISE_XOR); }
+#line 2373 "ada-exp.c.tmp"
     break;
 
   case 68:
-
-/* Line 1455 of yacc.c  */
-#line 480 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 800 "ada-exp.y"
+                        { ada_addrof (); }
+#line 2379 "ada-exp.c.tmp"
     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 802 "ada-exp.y"
+                        { ada_addrof (type_system_address (pstate)); }
+#line 2385 "ada-exp.c.tmp"
     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 804 "ada-exp.y"
+                        {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_FIRST, (yyvsp[0].lval));
+			}
+#line 2395 "ada-exp.c.tmp"
     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 810 "ada-exp.y"
+                        {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_LAST, (yyvsp[0].lval));
+			}
+#line 2405 "ada-exp.c.tmp"
     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 816 "ada-exp.y"
+                        {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_unop_atr_operation>
+			    (std::move (arg), OP_ATR_LENGTH, (yyvsp[0].lval));
+			}
+#line 2415 "ada-exp.c.tmp"
     break;
 
   case 73:
-
-/* Line 1455 of yacc.c  */
-#line 498 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_SIZE); }
+#line 822 "ada-exp.y"
+                        { ada_wrap<ada_atr_size_operation> (); }
+#line 2421 "ada-exp.c.tmp"
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 500 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_TAG); }
+#line 824 "ada-exp.y"
+                        { ada_wrap<ada_atr_tag_operation> (); }
+#line 2427 "ada-exp.c.tmp"
     break;
 
   case 75:
-
-/* Line 1455 of yacc.c  */
-#line 502 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_MIN); }
+#line 826 "ada-exp.y"
+                        { ada_wrap2<ada_binop_min_operation> (BINOP_MIN); }
+#line 2433 "ada-exp.c.tmp"
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 504 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_MAX); }
+#line 828 "ada-exp.y"
+                        { ada_wrap2<ada_binop_max_operation> (BINOP_MAX); }
+#line 2439 "ada-exp.c.tmp"
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 506 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_POS); }
+#line 830 "ada-exp.y"
+                        { ada_wrap<ada_pos_operation> (); }
+#line 2445 "ada-exp.c.tmp"
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 508 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_VAL); }
+#line 832 "ada-exp.y"
+                        {
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_atr_val_operation>
+			    ((yyvsp[-4].tval), std::move (arg));
+			}
+#line 2455 "ada-exp.c.tmp"
     break;
 
   case 79:
-
-/* Line 1455 of yacc.c  */
-#line 510 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_ATR_MODULUS); }
+#line 838 "ada-exp.y"
+                        {
+			  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_TARGET_TYPE (type_arg));
+			}
+#line 2467 "ada-exp.c.tmp"
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 514 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 848 "ada-exp.y"
+                        { (yyval.lval) = 1; }
+#line 2473 "ada-exp.c.tmp"
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 516 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(2) - (3)].typed_val).val; }
+#line 850 "ada-exp.y"
+                        { (yyval.lval) = (yyvsp[-1].typed_val).val; }
+#line 2479 "ada-exp.c.tmp"
     break;
 
   case 82:
-
-/* Line 1455 of yacc.c  */
-#line 521 "ada-exp.y"
-    { 
-			  if ((yyvsp[(1) - (1)].tval) == NULL)
+#line 855 "ada-exp.y"
+                        { 
+			  if ((yyvsp[0].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); }
+			  (yyval.tval) = (yyvsp[0].tval);
+			}
+#line 2489 "ada-exp.c.tmp"
     break;
 
-  case 84:
+  case 83:
+#line 864 "ada-exp.y"
+                        { (yyval.tval) = (yyvsp[0].tval); }
+#line 2495 "ada-exp.c.tmp"
+    break;
 
-/* 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); }
+  case 84:
+#line 866 "ada-exp.y"
+                        { (yyval.tval) = parse_type (pstate)->builtin_void; }
+#line 2501 "ada-exp.c.tmp"
     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 871 "ada-exp.y"
+                        { write_int (pstate, (LONGEST) (yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); }
+#line 2507 "ada-exp.c.tmp"
     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),
+#line 875 "ada-exp.y"
+                  { write_int (pstate,
+			       convert_char_literal (type_qualifier, (yyvsp[0].typed_val).val),
 			       (type_qualifier == NULL) 
-			       ? (yyvsp[(1) - (1)].typed_val).type : type_qualifier);
+			       ? (yyvsp[0].typed_val).type : type_qualifier);
 		  }
+#line 2517 "ada-exp.c.tmp"
     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 883 "ada-exp.y"
+                        {
+			  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 2530 "ada-exp.c.tmp"
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
-#line 560 "ada-exp.y"
-    { write_int (pstate, 0, type_int (pstate)); }
+#line 894 "ada-exp.y"
+                        {
+			  struct type *null_ptr_type
+			    = lookup_pointer_type (parse_type (pstate)->builtin_int0);
+			  write_int (pstate, 0, null_ptr_type);
+			}
+#line 2540 "ada-exp.c.tmp"
     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 902 "ada-exp.y"
+                        { 
+			  pstate->push_new<ada_string_operation>
+			    (copy_name ((yyvsp[0].sval)));
 			}
+#line 2549 "ada-exp.c.tmp"
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 570 "ada-exp.y"
-    { write_int (pstate, 1, type_boolean (pstate)); }
+#line 909 "ada-exp.y"
+                        { write_int (pstate, 1, type_boolean (pstate)); }
+#line 2555 "ada-exp.c.tmp"
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
-#line 572 "ada-exp.y"
-    { write_int (pstate, 0, type_boolean (pstate)); }
+#line 911 "ada-exp.y"
+                        { write_int (pstate, 0, type_boolean (pstate)); }
+#line 2561 "ada-exp.c.tmp"
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 576 "ada-exp.y"
-    { error (_("NEW not implemented.")); }
+#line 915 "ada-exp.y"
+                        { error (_("NEW not implemented.")); }
+#line 2567 "ada-exp.c.tmp"
     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 919 "ada-exp.y"
+                                { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[0].sval)); }
+#line 2573 "ada-exp.c.tmp"
     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 921 "ada-exp.y"
+                                { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-1].bval), (yyvsp[0].sval)); }
+#line 2579 "ada-exp.c.tmp"
     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));
+#line 923 "ada-exp.y"
+                        { 
+			  (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[-1].sval));
 			  if ((yyval.tval) == NULL)
-			    write_exp_elt_opcode (pstate, UNOP_ADDR);
+			    ada_addrof ();
 			  else
 			    (yyval.tval) = lookup_pointer_type ((yyval.tval));
 			}
+#line 2591 "ada-exp.c.tmp"
     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));
+#line 931 "ada-exp.y"
+                        { 
+			  (yyval.tval) = write_var_or_type (pstate, (yyvsp[-2].bval), (yyvsp[-1].sval));
 			  if ((yyval.tval) == NULL)
-			    write_exp_elt_opcode (pstate, UNOP_ADDR);
+			    ada_addrof ();
 			  else
 			    (yyval.tval) = lookup_pointer_type ((yyval.tval));
 			}
+#line 2603 "ada-exp.c.tmp"
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
-#line 603 "ada-exp.y"
-    { (yyval.bval) = block_lookup (NULL, (yyvsp[(1) - (2)].sval).ptr); }
+#line 942 "ada-exp.y"
+                        { (yyval.bval) = block_lookup (NULL, (yyvsp[-1].sval).ptr); }
+#line 2609 "ada-exp.c.tmp"
     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 944 "ada-exp.y"
+                        { (yyval.bval) = block_lookup ((yyvsp[-2].bval), (yyvsp[-1].sval).ptr); }
+#line 2615 "ada-exp.c.tmp"
     break;
 
   case 99:
+#line 949 "ada-exp.y"
+                        {
+			  std::vector<ada_component_up> components
+			    = pop_components ((yyvsp[-1].lval));
 
-/* Line 1455 of yacc.c  */
-#line 610 "ada-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_AGGREGATE);
-			  write_exp_elt_longcst (pstate, (yyvsp[(2) - (3)].lval));
-			  write_exp_elt_opcode (pstate, OP_AGGREGATE);
-		        }
+			  push_component<ada_aggregate_component>
+			    (std::move (components));
+			}
+#line 2627 "ada-exp.c.tmp"
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 618 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (1)].lval); }
+#line 959 "ada-exp.y"
+                                         { (yyval.lval) = (yyvsp[0].lval); }
+#line 2633 "ada-exp.c.tmp"
     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 961 "ada-exp.y"
+                        {
+			  push_component<ada_positional_component>
+			    ((yyvsp[-1].lval), ada_pop ());
+			  (yyval.lval) = (yyvsp[-1].lval) + 1;
 			}
+#line 2643 "ada-exp.c.tmp"
     break;
 
   case 102:
-
-/* Line 1455 of yacc.c  */
-#line 626 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(1) - (2)].lval) + (yyvsp[(2) - (2)].lval); }
+#line 967 "ada-exp.y"
+                                         { (yyval.lval) = (yyvsp[-1].lval) + (yyvsp[0].lval); }
+#line 2649 "ada-exp.c.tmp"
     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);
+#line 972 "ada-exp.y"
+                        {
+			  push_component<ada_positional_component>
+			    (0, ada_pop ());
 			  (yyval.lval) = 1;
 			}
+#line 2659 "ada-exp.c.tmp"
     break;
 
   case 104:
-
-/* 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; 
+#line 978 "ada-exp.y"
+                        {
+			  push_component<ada_positional_component>
+			    ((yyvsp[-2].lval), ada_pop ());
+			  (yyval.lval) = (yyvsp[-2].lval) + 1; 
 			}
+#line 2669 "ada-exp.c.tmp"
     break;
 
   case 105:
-
-/* Line 1455 of yacc.c  */
-#line 645 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 986 "ada-exp.y"
+                                         { (yyval.lval) = 1; }
+#line 2675 "ada-exp.c.tmp"
     break;
 
   case 106:
-
-/* Line 1455 of yacc.c  */
-#line 646 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 987 "ada-exp.y"
+                                         { (yyval.lval) = 1; }
+#line 2681 "ada-exp.c.tmp"
     break;
 
   case 107:
-
-/* Line 1455 of yacc.c  */
-#line 648 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(3) - (3)].lval) + 1; }
+#line 989 "ada-exp.y"
+                                         { (yyval.lval) = (yyvsp[0].lval) + 1; }
+#line 2687 "ada-exp.c.tmp"
     break;
 
   case 108:
-
-/* Line 1455 of yacc.c  */
-#line 652 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_OTHERS); }
+#line 993 "ada-exp.y"
+                        {
+			  push_component<ada_others_component> (ada_pop ());
+			}
+#line 2695 "ada-exp.c.tmp"
     break;
 
   case 109:
-
-/* Line 1455 of yacc.c  */
-#line 657 "ada-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_CHOICES);
-			  write_exp_elt_longcst (pstate, (yyvsp[(1) - (1)].lval));
-			  write_exp_elt_opcode (pstate, OP_CHOICES);
-		        }
+#line 1000 "ada-exp.y"
+                        {
+			  ada_choices_component *choices = choice_component ();
+			  choices->set_associations (pop_associations ((yyvsp[0].lval)));
+			}
+#line 2704 "ada-exp.c.tmp"
     break;
 
   case 110:
-
-/* Line 1455 of yacc.c  */
-#line 671 "ada-exp.y"
-    { write_name_assoc (pstate, (yyvsp[(1) - (2)].sval)); }
+#line 1013 "ada-exp.y"
+                        {
+			  push_component<ada_choices_component> (ada_pop ());
+			  write_name_assoc (pstate, (yyvsp[-2].sval));
+			  (yyval.lval) = 1;
+			}
+#line 2714 "ada-exp.c.tmp"
     break;
 
   case 111:
-
-/* Line 1455 of yacc.c  */
-#line 672 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1019 "ada-exp.y"
+                        {
+			  push_component<ada_choices_component> (ada_pop ());
+			  push_association<ada_name_association> (ada_pop ());
+			  (yyval.lval) = 1;
+			}
+#line 2724 "ada-exp.c.tmp"
     break;
 
   case 112:
-
-/* Line 1455 of yacc.c  */
-#line 674 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1025 "ada-exp.y"
+                        {
+			  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 2737 "ada-exp.c.tmp"
     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 1034 "ada-exp.y"
+                        {
+			  write_name_assoc (pstate, (yyvsp[-2].sval));
+			  (yyval.lval) = (yyvsp[0].lval) + 1;
 			}
+#line 2746 "ada-exp.c.tmp"
     break;
 
   case 114:
-
-/* Line 1455 of yacc.c  */
-#line 680 "ada-exp.y"
-    { (yyval.lval) = 1; }
+#line 1039 "ada-exp.y"
+                        {
+			  push_association<ada_name_association> (ada_pop ());
+			  (yyval.lval) = (yyvsp[0].lval) + 1;
+			}
+#line 2755 "ada-exp.c.tmp"
     break;
 
   case 115:
-
-/* Line 1455 of yacc.c  */
-#line 682 "ada-exp.y"
-    { write_name_assoc (pstate, (yyvsp[(1) - (2)].sval)); }
+#line 1045 "ada-exp.y"
+                        {
+			  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 2767 "ada-exp.c.tmp"
     break;
 
   case 116:
-
-/* Line 1455 of yacc.c  */
-#line 683 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(4) - (4)].lval) + 1; }
+#line 1058 "ada-exp.y"
+                        { ada_wrap<ada_unop_ind_operation> (); }
+#line 2773 "ada-exp.c.tmp"
     break;
 
   case 117:
-
-/* Line 1455 of yacc.c  */
-#line 685 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(3) - (3)].lval) + 1; }
+#line 1060 "ada-exp.y"
+                        { ada_addrof (); }
+#line 2779 "ada-exp.c.tmp"
     break;
 
   case 118:
-
-/* Line 1455 of yacc.c  */
-#line 687 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); }
-    break;
-
-  case 119:
-
-/* Line 1455 of yacc.c  */
-#line 688 "ada-exp.y"
-    { (yyval.lval) = (yyvsp[(6) - (6)].lval) + 1; }
-    break;
-
-  case 120:
-
-/* Line 1455 of yacc.c  */
-#line 695 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
-    break;
-
-  case 121:
-
-/* Line 1455 of yacc.c  */
-#line 697 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
-    break;
-
-  case 122:
-
-/* Line 1455 of yacc.c  */
-#line 699 "ada-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 1062 "ada-exp.y"
+                        {
+			  ada_wrap2<subscript_operation> (BINOP_SUBSCRIPT);
+			  ada_wrap<ada_wrapped_operation> ();
+			}
+#line 2788 "ada-exp.c.tmp"
     break;
 
 
+#line 2792 "ada-exp.c.tmp"
 
-/* Line 1455 of yacc.c  */
-#line 2730 "ada-exp.c.tmp"
       default: break;
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  /* 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 ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   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 ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
-#else
-      {
-	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;
-	  }
-      }
-#endif
     }
 
-
-
   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
@@ -2826,14 +2865,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  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,39 +2883,42 @@ 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.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   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 += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+            {
+              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);
+                  YY_ACCESSING_SYMBOL (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.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -2891,6 +2931,7 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -2898,7 +2939,8 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2908,36 +2950,38 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 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);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  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 1068 "ada-exp.y"
 
 
 /* yylex defined in ada-lex.c: Reads one token, getting characters */
@@ -2976,8 +3020,18 @@ ada_parse (struct parser_state *par_stat
   type_qualifier = NULL;
   obstack_free (&temp_parse_space, NULL);
   obstack_init (&temp_parse_space);
+  components.clear ();
+  associations.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
@@ -2990,17 +3044,12 @@ yyerror (const char *msg)
    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,22 +3057,10 @@ 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
@@ -3071,7 +3108,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,9 +3127,9 @@ 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 */
@@ -3105,10 +3142,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, type_int (par_state));
 	  }
 	else
 	  {
@@ -3131,29 +3165,22 @@ write_object_renaming (struct parser_sta
 	    else if (SYMBOL_CLASS (index_sym_info.symbol) == 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 +3189,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 +3213,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, VAR_DOMAIN);
 
   if (context == NULL
-      && (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK))
+      && (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != 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)
+  else if (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)
     {
       if (context == NULL)
 	error (_("No file or function \"%s\"."), raw_name);
@@ -3219,7 +3248,7 @@ 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);
     }
@@ -3261,7 +3290,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 (),
@@ -3288,7 +3317,7 @@ find_primitive_type (struct parser_state
 }
 
 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 +3330,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;
@@ -3317,19 +3346,18 @@ chop_separator (char *name)
    <sep> is '__' or '.', write the indicated sequence of
    STRUCTOP_STRUCT expression operators. */
 static void
-write_selectors (struct parser_state *par_state, char *sels)
+write_selectors (struct parser_state *par_state, const char *sels)
 {
   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 ();
+      pstate->push_new<ada_structop_operation>
+	(std::move (arg), std::string (p, sels - p));
     }
 }
 
@@ -3339,18 +3367,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_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 +3385,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,10 +3406,10 @@ 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;
+  const char *field_name = encoded_field_name;
+  const char *subfield_name;
   struct type *type = SYMBOL_TYPE (sym);
   int fieldno;
 
@@ -3397,7 +3423,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 +3431,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 +3466,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 +3477,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 +3485,15 @@ 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);
+	  std::vector<struct block_symbol> syms
+	    = ada_lookup_symbol_list (encoded_name, block, VAR_DOMAIN);
 	  encoded_name[tail_index] = terminator;
 
 	  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 +3507,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);
@@ -3503,23 +3528,23 @@ write_var_or_type (struct parser_state *
 
 	  if (type_sym != NULL)
 	    {
-              struct type *field_type;
-              
-              if (tail_index == name_len)
+	      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)
+	      /* 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 +3553,19 @@ 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 bound_minimal_symbol msym
 		= ada_lookup_simple_minsym (encoded_name);
 	      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;
@@ -3596,19 +3621,21 @@ 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,
+				  VAR_DOMAIN);
 
-      if (nsyms != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF)
-	write_exp_op_with_string (par_state, OP_NAME, name);
+      if (syms.size () != 1 || SYMBOL_CLASS (syms[0].symbol) == 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."));
+
+  push_association<ada_name_association> (ada_pop ());
 }
 
 /* Convert the character literal whose ASCII value would be VAL to the
@@ -3625,7 +3652,7 @@ convert_char_literal (struct type *type,
   if (type == NULL)
     return val;
   type = check_typedef (type);
-  if (TYPE_CODE (type) != TYPE_CODE_ENUM)
+  if (type->code () != TYPE_CODE_ENUM)
     return val;
 
   if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9'))
@@ -3633,7 +3660,7 @@ convert_char_literal (struct type *type,
   else
     xsnprintf (name, sizeof (name), "QU%02x", (int) val);
   size_t len = strlen (name);
-  for (f = 0; f < TYPE_NFIELDS (type); f += 1)
+  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
@@ -3695,9 +3722,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-exp.h ./gdb/ada-exp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-exp.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ada-exp.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,729 @@
+/* Definitions for Ada expressions
+
+   Copyright (C) 2020, 2021 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_val_atr (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;
+};
+
+/* 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 (); }
+};
+
+/* 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 (value_type (arg1),
+						     exp, noside);
+    return ada_equal_binop (expect_type, exp, noside, std::get<0> (m_storage),
+			    arg1, arg2);
+  }
+
+  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 (value_type (lhs), 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:
+
+  using operation::do_generate_ax;
+};
+
+/* 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;
+};
+
+/* Implement the Ada 'val attribute.  */
+class ada_atr_val_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;
+
+  enum exp_opcode opcode () const override
+  { return OP_ATR_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; }
+};
+
+/* 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; }
+};
+
+/* 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;
+};
+
+} /* namespace expr */
+
+#endif /* ADA_EXP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-exp.y ./gdb/ada-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-exp.y	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-exp.y	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* YACC parser for Ada expressions, for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -47,6 +47,7 @@
 #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,8 +68,6 @@ struct name_info {
 
 static struct parser_state *pstate = NULL;
 
-static struct stoken empty_stoken = { "", 0 };
-
 /* If expression is in the context of TYPE'(...), then TYPE, else
  * NULL.  */
 static struct type *type_qualifier;
@@ -90,15 +89,12 @@ static struct type* write_var_or_type (s
 
 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 *);
 
@@ -114,6 +110,298 @@ static struct type *type_boolean (struct
 
 static struct type *type_system_address (struct parser_state *);
 
+using namespace expr;
+
+/* 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
+      && res->resolve (pstate->expout.get (),
+		       deprocedure_p,
+		       pstate->parse_completion,
+		       pstate->block_tracker,
+		       context_type))
+    result
+      = make_operation<ada_funcall_operation> (std::move (result),
+					       std::vector<operation_up> ());
+
+  return result;
+}
+
+/* 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);
+}
+
+/* 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
+      || SYMBOL_DOMAIN (vvo->get_symbol ()) != UNDEF_DOMAIN)
+    {
+      struct value *callee_v = callee->evaluate (nullptr,
+						 pstate->expout.get (),
+						 EVAL_AVOID_SIDE_EFFECTS);
+      callee_t = ada_check_typedef (value_type (callee_v));
+      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 ();
+  ada_choices_component *result = dynamic_cast<ada_choices_component *> (last);
+  gdb_assert (result != nullptr);
+  return result;
+}
+
+/* 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;
+}
+
 %}
 
 %union
@@ -135,7 +423,7 @@ 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_float> FLOAT
@@ -188,43 +476,48 @@ start   :	exp1
 /* Expressions, including the sequencing operator.  */
 exp1	:	exp
 	|	exp1 ';' exp
-			{ write_exp_elt_opcode (pstate, BINOP_COMMA); }
+			{ ada_wrap2<comma_operation> (BINOP_COMMA); }
 	| 	primary ASSIGN exp   /* Extension for convenience */
-			{ write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+			{
+			  operation_up rhs = pstate->pop ();
+			  operation_up lhs = ada_pop ();
+			  value *lhs_val
+			    = lhs->evaluate (nullptr, pstate->expout.get (),
+					     EVAL_AVOID_SIDE_EFFECTS);
+			  rhs = resolve (std::move (rhs), true,
+					 value_type (lhs_val));
+			  pstate->push_new<ada_assign_operation>
+			    (std::move (lhs), std::move (rhs));
+			}
 	;
 
 /* Expressions, not including the sequencing operator.  */
 primary :	primary DOT_ALL
-			{ write_exp_elt_opcode (pstate, UNOP_IND); }
+			{ ada_wrap<ada_unop_ind_operation> (); }
 	;
 
 primary :	primary DOT_ID
-			{ write_exp_op_with_string (pstate, STRUCTOP_STRUCT,
-						    $2); }
+			{
+			  operation_up arg = ada_pop ();
+			  pstate->push_new<ada_structop_operation>
+			    (std::move (arg), copy_name ($2));
+			}
 	;
 
 primary :	primary '(' arglist ')'
-			{
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-			  write_exp_elt_longcst (pstate, $3);
-			  write_exp_elt_opcode (pstate, OP_FUNCALL);
-		        }
+			{ 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);
 			}
 	;
 
@@ -233,9 +526,10 @@ primary :	var_or_type '\'' save_qualifie
 			{
 			  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);
+			  operation_up arg = ada_pop (true,
+						      check_typedef ($1));
+			  pstate->push_new<ada_qual_operation>
+			    (std::move (arg), $1);
 			  type_qualifier = $3;
 			}
 	;
@@ -245,10 +539,10 @@ 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 +561,53 @@ 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 ());
+			}
+	;        
 
 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 +628,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<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 +748,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,37 +797,51 @@ 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_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_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_TARGET_TYPE (type_arg));
+			}
 	;
 
 tick_arglist :			%prec '('
@@ -517,22 +851,19 @@ tick_arglist :			%prec '('
 	;
 
 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; }
 	;
 
 
@@ -541,7 +872,7 @@ primary	:	INT
 	;
 
 primary	:	CHARLIT
-                  { write_int (pstate,
+		  { write_int (pstate,
 			       convert_char_literal (type_qualifier, $1.val),
 			       (type_qualifier == NULL) 
 			       ? $1.type : type_qualifier);
@@ -549,26 +880,34 @@ primary	:	CHARLIT
 	;
 
 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
+	|	FALSEKEYWORD
 			{ write_int (pstate, 0, type_boolean (pstate)); }
 	;
 
@@ -579,12 +918,12 @@ primary	: 	NEW NAME
 var_or_type:	NAME   	    %prec VAR
 				{ $$ = write_var_or_type (pstate, NULL, $1); }
 	|	block NAME  %prec VAR
-                                { $$ = write_var_or_type (pstate, $1, $2); }
+				{ $$ = write_var_or_type (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 +931,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 +947,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 +969,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 +990,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 +1009,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> ();
+			}
 	;
 
 %%
@@ -737,8 +1103,18 @@ ada_parse (struct parser_state *par_stat
   type_qualifier = NULL;
   obstack_free (&temp_parse_space, NULL);
   obstack_init (&temp_parse_space);
+  components.clear ();
+  associations.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
@@ -751,17 +1127,12 @@ yyerror (const char *msg)
    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,22 +1140,10 @@ 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
@@ -832,7 +1191,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,9 +1210,9 @@ 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 */
@@ -866,10 +1225,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, type_int (par_state));
 	  }
 	else
 	  {
@@ -892,29 +1248,22 @@ write_object_renaming (struct parser_sta
 	    else if (SYMBOL_CLASS (index_sym_info.symbol) == 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 +1272,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 +1296,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, VAR_DOMAIN);
 
   if (context == NULL
-      && (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK))
+      && (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != 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)
+  else if (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)
     {
       if (context == NULL)
 	error (_("No file or function \"%s\"."), raw_name);
@@ -980,7 +1331,7 @@ 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);
     }
@@ -1022,7 +1373,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 (),
@@ -1049,7 +1400,7 @@ find_primitive_type (struct parser_state
 }
 
 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 +1413,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;
@@ -1078,19 +1429,18 @@ chop_separator (char *name)
    <sep> is '__' or '.', write the indicated sequence of
    STRUCTOP_STRUCT expression operators. */
 static void
-write_selectors (struct parser_state *par_state, char *sels)
+write_selectors (struct parser_state *par_state, const char *sels)
 {
   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 ();
+      pstate->push_new<ada_structop_operation>
+	(std::move (arg), std::string (p, sels - p));
     }
 }
 
@@ -1100,18 +1450,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_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 +1468,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,10 +1489,10 @@ 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;
+  const char *field_name = encoded_field_name;
+  const char *subfield_name;
   struct type *type = SYMBOL_TYPE (sym);
   int fieldno;
 
@@ -1158,7 +1506,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 +1514,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 +1549,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 +1560,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 +1568,15 @@ 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);
+	  std::vector<struct block_symbol> syms
+	    = ada_lookup_symbol_list (encoded_name, block, VAR_DOMAIN);
 	  encoded_name[tail_index] = terminator;
 
 	  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 +1590,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);
@@ -1264,23 +1611,23 @@ write_var_or_type (struct parser_state *
 
 	  if (type_sym != NULL)
 	    {
-              struct type *field_type;
-              
-              if (tail_index == name_len)
+	      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)
+	      /* 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 +1636,19 @@ 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 bound_minimal_symbol msym
 		= ada_lookup_simple_minsym (encoded_name);
 	      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;
@@ -1357,19 +1704,21 @@ 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,
+				  VAR_DOMAIN);
 
-      if (nsyms != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF)
-	write_exp_op_with_string (par_state, OP_NAME, name);
+      if (syms.size () != 1 || SYMBOL_CLASS (syms[0].symbol) == 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."));
+
+  push_association<ada_name_association> (ada_pop ());
 }
 
 /* Convert the character literal whose ASCII value would be VAL to the
@@ -1386,7 +1735,7 @@ convert_char_literal (struct type *type,
   if (type == NULL)
     return val;
   type = check_typedef (type);
-  if (TYPE_CODE (type) != TYPE_CODE_ENUM)
+  if (type->code () != TYPE_CODE_ENUM)
     return val;
 
   if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9'))
@@ -1394,7 +1743,7 @@ convert_char_literal (struct type *type,
   else
     xsnprintf (name, sizeof (name), "QU%02x", (int) val);
   size_t len = strlen (name);
-  for (f = 0; f < TYPE_NFIELDS (type); f += 1)
+  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
@@ -1456,8 +1805,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lang.c ./gdb/ada-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lang.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-lang.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ada language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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"
@@ -57,6 +58,7 @@
 #include "gdbsupport/function-view.h"
 #include "gdbsupport/byte-vector.h"
 #include <algorithm>
+#include "ada-exp.h"
 
 /* Define whether or not the C operator '/' truncates towards zero for
    differently signed operands (truncation direction is undefined in C).
@@ -94,41 +96,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 *);
 
-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);
-
-static void add_defn_to_vec (struct obstack *, struct symbol *,
-                             const struct block *);
-
-static int num_defns_collected (struct obstack *);
-
-static struct block_symbol *defns_collected (struct obstack *, int);
+static int is_nonfunction (const std::vector<struct block_symbol> &);
 
-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 +129,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 +157,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 +171,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,63 +179,29 @@ 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 value *val_atr (struct type *, LONGEST);
 
 static struct symbol *standard_lookup (const char *, const struct block *,
-                                       domain_enum);
+				       domain_enum);
 
 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
@@ -290,14 +241,12 @@ struct cache_entry
 struct ada_symbol_cache
 {
   /* An obstack used to store the entries in our cache.  */
-  struct obstack cache_space;
+  struct auto_obstack cache_space;
 
   /* The root of the hash table used to implement our symbol cache.  */
-  struct cache_entry *root[HASH_SIZE];
+  struct cache_entry *root[HASH_SIZE] {};
 };
 
-static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
-
 /* Maximum-sized dynamic type.  */
 static unsigned int varsize_limit;
 
@@ -319,11 +268,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 +281,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;
@@ -409,14 +341,8 @@ ada_inferior_exit (struct inferior *inf)
 /* This module's per-program-space data.  */
 struct ada_pspace_data
 {
-  ~ada_pspace_data ()
-  {
-    if (sym_cache != NULL)
-      ada_free_symbol_cache (sym_cache);
-  }
-
   /* The Ada symbol cache.  */
-  struct ada_symbol_cache *sym_cache = nullptr;
+  std::unique_ptr<ada_symbol_cache> sym_cache;
 };
 
 /* Key to our per-program-space data.  */
@@ -439,7 +365,7 @@ get_ada_pspace_data (struct program_spac
   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,7 +397,7 @@ get_ada_pspace_data (struct program_spac
 static struct type *
 ada_typedef_target_type (struct type *type)
 {
-  while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  while (type->code () == TYPE_CODE_TYPEDEF)
     type = TYPE_TARGET_TYPE (type);
   return type;
 }
@@ -509,56 +435,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 +446,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 +462,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++)
+  for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), 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 +490,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;
     }
 }
 
@@ -649,16 +525,20 @@ coerce_unspec_val_to_type (struct value
       struct value *result;
 
       /* Make sure that the object size is not unreasonable before
-         trying to allocate some memory for it.  */
+	 trying to allocate some memory for it.  */
       ada_ensure_varsize_limit (type);
 
-      if (value_lazy (val)
-          || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
+      if (value_optimized_out (val))
+	result = allocate_optimized_out_value (type);
+      else if (value_lazy (val)
+	       /* Be careful not to make a lazy not_lval value.  */
+	       || (VALUE_LVAL (val) != not_lval
+		   && 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));
+	  value_contents_copy (result, 0, val, 0, TYPE_LENGTH (type));
 	}
       set_value_component_location (result, val);
       set_value_bitsize (result, value_bitsize (val));
@@ -749,7 +629,7 @@ umax_of_size (int size)
 static LONGEST
 max_of_type (struct type *t)
 {
-  if (TYPE_UNSIGNED (t))
+  if (t->is_unsigned ())
     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
   else
     return max_of_size (TYPE_LENGTH (t));
@@ -759,7 +639,7 @@ max_of_type (struct type *t)
 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));
@@ -769,13 +649,27 @@ min_of_type (struct type *t)
 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.kind () == PROP_CONST)
+	  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_ENUMVAL (type, type->num_fields () - 1);
     case TYPE_CODE_BOOL:
       return 1;
     case TYPE_CODE_CHAR:
@@ -790,11 +684,25 @@ 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.kind () == PROP_CONST)
+	  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);
     case TYPE_CODE_BOOL:
@@ -813,10 +721,10 @@ 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;
+	return type;
       type = TYPE_TARGET_TYPE (type);
     }
   return type;
@@ -834,12 +742,12 @@ ada_get_decoded_value (struct value *val
 
   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,7 +771,7 @@ ada_get_decoded_type (struct type *type)
 
 
 
-                                /* Language Selection */
+				/* 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).  */
@@ -896,18 +804,11 @@ 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 = BMSYMBOL_VALUE_ADDRESS (msym);
       if (main_program_name_addr == 0)
-        error (_("Invalid address for Ada main program name."));
-
-      target_read_string (main_program_name_addr, &main_program_name,
-                          1024, &err_code);
+	error (_("Invalid address for Ada main program name."));
 
-      if (err_code != 0)
-        return NULL;
+      main_program_name = target_read_string (main_program_name_addr, 1024);
       return main_program_name.get ();
     }
 
@@ -915,7 +816,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,67 +846,49 @@ 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
+/* 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;
+  for (const char *p = decoded; *p != '\0'; p += 1)
     {
       if (*p == '.')
-        {
-          encoding_buffer[k] = encoding_buffer[k + 1] = '_';
-          k += 2;
-        }
+	encoding_buffer.append ("__");
       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);
     }
 
-  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.  */
+/* The "encoded" form of DECODED, according to GNAT conventions.  */
 
-char *
+std::string
 ada_encode (const char *decoded)
 {
   return ada_encode_1 (decoded, true);
@@ -1015,29 +898,21 @@ ada_encode (const char *decoded)
    quotes, unfolded, but with the quotes stripped away.  Result good
    to next call.  */
 
-static char *
-ada_fold_name (const char *name)
+static const char *
+ada_fold_name (gdb::string_view name)
 {
-  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 = gdb::to_string (name.substr (1, name.size () - 2));
   else
     {
-      int i;
-
-      for (i = 0; i <= len; i += 1)
-        fold_buffer[i] = tolower (name[i]);
+      fold_storage = gdb::to_string (name);
+      for (int i = 0; i < name.size (); i += 1)
+	fold_storage[i] = tolower (fold_storage[i]);
     }
 
-  return fold_buffer;
+  return fold_storage.c_str ();
 }
 
 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
@@ -1068,15 +943,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,12 +977,10 @@ 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.  */
+/* See ada-lang.h.  */
 
 std::string
-ada_decode (const char *encoded)
+ada_decode (const char *encoded, bool wrap)
 {
   int i, j;
   int len0;
@@ -1145,9 +1018,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
@@ -1180,12 +1053,12 @@ ada_decode (const char *encoded)
     {
       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;
+	len0 = i - 1;
       else if (encoded[i] == '$')
-        len0 = i;
+	len0 = i;
     }
 
   /* The first few characters that are not alphabetic are not part
@@ -1199,136 +1072,136 @@ ada_decode (const char *encoded)
     {
       /* Is this a symbol function?  */
       if (at_start_name && encoded[i] == 'O')
-        {
-          int k;
+	{
+	  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;
-        }
+	  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;
+	}
       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 (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[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;
+	}
     }
   decoded.resize (j);
 
@@ -1342,12 +1215,14 @@ ada_decode (const char *encoded)
   return decoded;
 
 Suppress:
+  if (!wrap)
+    return {};
+
   if (encoded[0] == '<')
     decoded = encoded;
   else
     decoded = '<' + std::string(encoded) + '>';
   return decoded;
-
 }
 
 /* Table for keeping permanent unique copies of decoded names.  Once
@@ -1376,7 +1251,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,19 +1259,19 @@ 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;
@@ -1408,48 +1283,9 @@ ada_la_decode (const char *encoded, int
   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 +1317,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 +1326,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 (),
+		 TYPE_FIELD_NAME (index_desc_type, 0)) == 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);
      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,12 +1354,12 @@ 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))
+      && (type->code () == TYPE_CODE_PTR
+	  || type->code () == TYPE_CODE_REF))
     return ada_check_typedef (TYPE_TARGET_TYPE (type));
   else
     return type;
@@ -1567,9 +1391,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;
     }
 }
 
@@ -1583,7 +1407,7 @@ thin_data_pntr (struct value *val)
 
   data_type = lookup_pointer_type (data_type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+  if (type->code () == TYPE_CODE_PTR)
     return value_cast (data_type, value_copy (val));
   else
     return value_from_longest (data_type, value_address (val));
@@ -1595,8 +1419,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 +1439,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 (TYPE_TARGET_TYPE (ada_check_typedef (r)));
     }
   return NULL;
 }
@@ -1640,37 +1464,37 @@ desc_bounds (struct value *arr)
   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 = value_address (arr);
 
       return
-        value_from_longest (lookup_pointer_type (bounds_type),
-                            addr - TYPE_LENGTH (bounds_type));
+	value_from_longest (lookup_pointer_type (bounds_type),
+			    addr - TYPE_LENGTH (bounds_type));
     }
 
   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);
 
       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);
 
-	  if (TYPE_STUB (target_type))
+	  if (target_type->is_stub ())
 	    p_bounds = value_cast (lookup_pointer_type
 				   (ada_check_typedef (target_type)),
 				   p_bounds);
@@ -1704,7 +1528,7 @@ fat_pntr_bounds_bitsize (struct type *ty
   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
     return TYPE_FIELD_BITSIZE (type, 1);
   else
-    return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
+    return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ()));
 }
 
 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
@@ -1719,13 +1543,13 @@ 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)
+	  && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
 	return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
     }
 
@@ -1743,8 +1567,8 @@ desc_data (struct value *arr)
   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;
 }
@@ -1770,7 +1594,7 @@ fat_pntr_data_bitsize (struct type *type
   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
     return TYPE_FIELD_BITSIZE (type, 0);
   else
-    return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
+    return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ());
 }
 
 /* If BOUNDS is an array-bounds structure (or pointer to one), return
@@ -1780,8 +1604,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
@@ -1806,7 +1633,7 @@ desc_bound_bitsize (struct type *type, i
   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
   else
-    return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
+    return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ());
 }
 
 /* If TYPE is the type of an array-bounds structure, the type of its
@@ -1817,8 +1644,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 +1663,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 +1677,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,9 +1687,9 @@ 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))
+  while (type != NULL
+	 && (type->code () == TYPE_CODE_PTR
+	     || type->code () == TYPE_CODE_REF))
     type = TYPE_TARGET_TYPE (type);
   return ada_is_direct_array_type (type);
 }
@@ -1871,10 +1702,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 (type))->code ()
+		  == TYPE_CODE_ARRAY)));
 }
 
 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
@@ -1888,7 +1719,7 @@ 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);
 }
 
@@ -1902,9 +1733,9 @@ ada_is_bogus_array_descriptor (struct ty
 {
   return
     type != NULL
-    && TYPE_CODE (type) == TYPE_CODE_STRUCT
+    && type->code () == TYPE_CODE_STRUCT
     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
-        || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
+	|| lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
     && !ada_is_array_descriptor_type (type);
 }
 
@@ -1947,28 +1778,28 @@ ada_type_of_array (struct value *arr, in
       arity = ada_array_arity (value_type (arr));
 
       if (elt_type == NULL || arity == 0)
-        return ada_check_typedef (value_type (arr));
+	return ada_check_typedef (value_type (arr));
 
       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);
+	{
+	  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),
+	  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);
+	  elt_type = create_array_type (array_type, elt_type, range_type);
 
 	  if (ada_is_unconstrained_packed_array_type (value_type (arr)))
 	    {
 	      /* 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);
@@ -1976,16 +1807,16 @@ ada_type_of_array (struct value *arr, in
 	      TYPE_FIELD_BITSIZE (elt_type, 0) =
 		decode_packed_array_bitsize (value_type (arr));
 	      /* 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) * TYPE_FIELD_BITSIZE (elt_type, 0);
 
 		  TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
 		}
 	    }
-        }
+	}
 
       return lookup_pointer_type (elt_type);
     }
@@ -2004,7 +1835,7 @@ ada_coerce_to_simple_array_ptr (struct v
       struct type *arrType = ada_type_of_array (arr, 1);
 
       if (arrType == NULL)
-        return NULL;
+	return NULL;
       return value_cast (arrType, value_copy (desc_data (arr)));
     }
   else if (ada_is_constrained_packed_array_type (value_type (arr)))
@@ -2025,7 +1856,7 @@ ada_coerce_to_simple_array (struct value
       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
 
       if (arrVal == NULL)
-        error (_("Bounds unavailable for null array pointer."));
+	error (_("Bounds unavailable for null array pointer."));
       ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
       return value_ind (arrVal);
     }
@@ -2054,7 +1885,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 +1902,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 +1912,37 @@ 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_TARGET_TYPE (type->field (0).type ());
+      /* Now we can see if the array elements are packed.  */
+      return TYPE_FIELD_BITSIZE (type, 0) > 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_BITSIZE (type, 0) % 8 != 0));
 }
 
 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
@@ -2098,7 +1958,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 +1969,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_TARGET_TYPE (type->field (0).type ());
+      /* Now we can see if the array elements are packed.  */
+      return TYPE_FIELD_BITSIZE (type, 0);
+    }
 
   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
     {
@@ -2148,15 +2016,15 @@ 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);
   new_elt_type =
@@ -2164,11 +2032,11 @@ constrained_packed_array_type (struct ty
 				   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->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;
@@ -2176,10 +2044,10 @@ constrained_packed_array_type (struct ty
     {
       *elt_bits *= (high_bound - low_bound + 1);
       TYPE_LENGTH (new_type) =
-        (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
+	(*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 +2085,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 +2096,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 (type);
+  if (elt_type->code () == TYPE_CODE_ARRAY)
+    {
+      LONGEST elt_len = recursively_update_array_bitsize (elt_type);
+      LONGEST elt_bitsize = elt_len * TYPE_FIELD_BITSIZE (elt_type, 0);
+      TYPE_FIELD_BITSIZE (type, 0) = elt_bitsize;
+
+      TYPE_LENGTH (type) = ((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,7 +2144,7 @@ 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 (value_type (arr))->code () == TYPE_CODE_PTR)
     arr = value_ind (arr);
 
   type = decode_constrained_packed_array_type (value_type (arr));
@@ -2257,13 +2154,25 @@ decode_constrained_packed_array (struct
       return NULL;
     }
 
+  /* 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 = value_contents_for_printing (arr);
+  CORE_ADDR address = value_address (arr);
+  gdb::array_view<const gdb_byte> view
+    = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
+  type = resolve_dynamic_type (type, view, address);
+  recursively_update_array_bitsize (type);
+
   if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
       && ada_is_modular_type (value_type (arr)))
     {
        /* 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;
 
@@ -2303,37 +2212,37 @@ value_subscript_packed (struct value *ar
   elt_type = ada_check_typedef (value_type (arr));
   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
+	  || TYPE_FIELD_BITSIZE (elt_type, 0) == 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 = TYPE_FIELD_BITSIZE (elt_type, 0);
+	  elt_total_bit_offset += (idx - lowerbound) * bits;
+	  elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_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 +2251,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 +2287,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 +2316,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 +2347,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 +2402,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 */
@@ -2522,10 +2431,10 @@ 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);
+      type = resolve_dynamic_type (type, staging, 0);
       if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
 	{
 	  /* This happens when the length of the object is dynamic,
@@ -2568,10 +2477,10 @@ ada_value_primitive_packed_val (struct v
       set_value_bitpos (v, bit_offset + value_bitpos (obj));
       set_value_bitsize (v, bit_size);
       if (value_bitpos (v) >= HOST_CHAR_BIT)
-        {
+	{
 	  ++new_offset;
-          set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
-        }
+	  set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
+	}
       set_value_offset (v, new_offset);
 
       /* Also set the parent value.  This is needed when trying to
@@ -2627,8 +2536,8 @@ ada_value_assign (struct value *toval, s
 
   if (VALUE_LVAL (toval) == 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)
 		 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
@@ -2637,8 +2546,8 @@ ada_value_assign (struct value *toval, s
       struct value *val;
       CORE_ADDR to_addr = value_address (toval);
 
-      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);
@@ -2656,7 +2565,7 @@ ada_value_assign (struct value *toval, s
 
       val = value_copy (toval);
       memcpy (value_contents_raw (val), value_contents (fromval),
-              TYPE_LENGTH (type));
+	      TYPE_LENGTH (type));
       deprecated_set_value_type (val, type);
 
       return val;
@@ -2699,7 +2608,7 @@ value_assign_to_component (struct value
       int src_offset;
 
       if (is_scalar_type (check_typedef (value_type (component))))
-        src_offset
+	src_offset
 	  = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
       else
 	src_offset = 0;
@@ -2718,7 +2627,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)));
 }
 
@@ -2736,7 +2645,7 @@ 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
+  if (elt_type->code () == TYPE_CODE_ARRAY
       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
     return value_subscript_packed (elt, arity, ind);
 
@@ -2744,13 +2653,13 @@ ada_value_subscript (struct value *arr,
     {
       struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_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)
+	  && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
 	{
 	  /* The element is a typedef to an unconstrained array,
 	     except that the value_subscript call stripped the
@@ -2793,22 +2702,20 @@ ada_value_ptr_subscript (struct value *a
   struct type *type
     = check_typedef (value_enclosing_type (array_ind));
 
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY
+  if (type->code () == TYPE_CODE_ARRAY
       && TYPE_FIELD_BITSIZE (type, 0) > 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);
+      if (type->code () != 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));
+			value_copy (arr));
+      get_discrete_bounds (type->index_type (), &lwb, &upb);
+      arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
       type = TYPE_TARGET_TYPE (type);
     }
 
@@ -2821,31 +2728,35 @@ 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 = TYPE_TARGET_TYPE (type0->index_type ());
   struct type *index_type
     = create_static_range_type (NULL, 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),
+			       type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
 			       TYPE_FIELD_BITSIZE (type0, 0));
-  int base_low =  ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
-  LONGEST base_low_pos, low_pos;
+  int base_low =  ada_discrete_type_low_bound (type0->index_type ());
+  gdb::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 = TYPE_FIELD_BITSIZE (slice_type, 0) / 8;
+  if (stride == 0)
+    stride = TYPE_LENGTH (TYPE_TARGET_TYPE (type0));
+
+  base = value_as_address (array_ptr) + (*low_pos - *base_low_pos) * stride;
   return value_at_lazy (slice_type, base);
 }
 
@@ -2854,17 +2765,20 @@ 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 *base_index_type = TYPE_TARGET_TYPE (type->index_type ());
   struct type *index_type
-    = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
+    = create_static_range_type (NULL, 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->dyn_prop (DYN_PROP_BYTE_STRIDE),
 			       TYPE_FIELD_BITSIZE (type, 0));
-  LONGEST low_pos, high_pos;
+  gdb::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 +2786,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 +2805,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 (type));
       }
 
   return arity;
@@ -2913,7 +2827,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 +2836,34 @@ 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 (TYPE_TARGET_TYPE (p_array_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 (type);
+	  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 +2878,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 (type);
+	}
+      result_type = TYPE_TARGET_TYPE (ada_check_typedef (type)->index_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
     {
@@ -3006,12 +2919,12 @@ ada_array_bound_from_type (struct type *
   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
     return (LONGEST) - which;
 
-  if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
+  if (arr_type->code () == TYPE_CODE_PTR)
     type = TYPE_TARGET_TYPE (arr_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,7 +2938,7 @@ 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
     {
@@ -3034,13 +2947,13 @@ ada_array_bound_from_type (struct type *
       for (i = 1; i < n; i++)
 	elt_type = check_typedef (TYPE_TARGET_TYPE (elt_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));
+	       ? 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,7 +2966,7 @@ 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 (value_type (arr))->code () == TYPE_CODE_PTR)
     arr = value_ind (arr);
   arr_type = value_enclosing_type (arr);
 
@@ -3077,7 +2990,7 @@ 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 (value_type (arr))->code () == TYPE_CODE_PTR)
     arr = value_ind (arr);
   arr_type = value_enclosing_type (arr);
 
@@ -3100,7 +3013,7 @@ ada_array_length (struct value *arr, int
   if (index_type != NULL)
     {
       struct type *base_type;
-      if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
+      if (index_type->code () == TYPE_CODE_RANGE)
 	base_type = TYPE_TARGET_TYPE (index_type);
       else
 	base_type = index_type;
@@ -3121,7 +3034,7 @@ empty_array (struct type *arr_type, int
   struct type *arr_type0 = ada_check_typedef (arr_type);
   struct type *index_type
     = create_static_range_type
-        (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low,
+	(NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low,
 	 high < low ? low - 1 : high);
   struct type *elt_type = ada_array_element_type (arr_type0, 1);
 
@@ -3129,7 +3042,7 @@ empty_array (struct type *arr_type, int
 }
 
 
-                                /* Name resolution */
+				/* Name resolution */
 
 /* The "decoded" name for the user-definable Ada operator corresponding
    to OP.  */
@@ -3142,7 +3055,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 +3078,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 +3113,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;
     }
 }
@@ -3228,25 +3141,25 @@ ada_print_symbol_signature (struct ui_fi
   fprintf_filtered (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)
+      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,
+	  ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
 			  flags);
 	}
       fprintf_filtered (stream, ")");
     }
   if (TYPE_TARGET_TYPE (type) != NULL
-      && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
+      && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
     {
       fprintf_filtered (stream, " return ");
       ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
@@ -3271,7 +3184,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;
@@ -3298,41 +3211,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)
@@ -3383,12 +3296,12 @@ See set/show multiple-symbol."));
   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);
+	{
+	  struct symtab_and_line sal =
+	    find_function_start_sal (syms[i].symbol, 1);
 
 	  printf_filtered ("[%d] ", i + first_choice);
 	  ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
@@ -3402,20 +3315,20 @@ See set/show multiple-symbol."));
 	       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 =
+	    (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
+	     && SYMBOL_TYPE (syms[i].symbol) != NULL
+	     && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
 	  struct symtab *symtab = NULL;
 
 	  if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
 	    symtab = symbol_symtab (syms[i].symbol);
 
-          if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
+	  if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
 	    {
 	      printf_filtered ("[%d] ", i + first_choice);
 	      ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
@@ -3424,15 +3337,15 @@ See set/show multiple-symbol."));
 			       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"),
+	  else if (is_enumeral
+		   && SYMBOL_TYPE (syms[i].symbol)->name () != 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 ());
-            }
+	    }
 	  else
 	    {
 	      printf_filtered ("[%d] ", i + first_choice);
@@ -3449,11 +3362,11 @@ See set/show multiple-symbol."));
 				 ? _(" (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 +3374,181 @@ 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.  */
-
-static void
-resolve (expression_up *expp, int void_context_p, int parse_completion,
-	 innermost_block_tracker *tracker)
-{
-  struct type *context_type = NULL;
-  int pc = 0;
-
-  if (void_context_p)
-    context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
-
-  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_find_operator_symbol (enum exp_opcode op, bool parse_completion,
+			  int nargs, value *argvec[])
 {
-  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 ();
-
-  /* Pass one: resolve operands, saving their types and updating *pos,
-     if needed.  */
-  switch (op)
+  if (possible_user_operator_p (op, argvec))
     {
-    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;
+      std::vector<struct block_symbol> candidates
+	= ada_lookup_symbol_list (ada_decoded_op_name (op),
+				  NULL, VAR_DOMAIN);
 
-    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;
+      int i = ada_resolve_function (candidates, argvec,
+				    nargs, ada_decoded_op_name (op), NULL,
+				    parse_completion);
+      if (i >= 0)
+	return candidates[i];
+    }
+  return {};
+}
 
-    case UNOP_MEMVAL:
-      *pos += 3;
-      nargs = 1;
-      break;
+/* See ada-lang.h.  */
 
-    case OP_REGISTER:
-      *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
-      break;
+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)
+{
+  std::vector<struct block_symbol> candidates
+    = ada_lookup_symbol_list (sym->linkage_name (), block, VAR_DOMAIN);
 
-    case STRUCTOP_STRUCT:
-      *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
-      nargs = 1;
-      break;
+  int i;
+  if (candidates.size () == 1)
+    i = 0;
+  else
+    {
+      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 TERNOP_SLICE:
-      *pos += 1;
-      nargs = 3;
-      break;
+  tracker->update (candidates[i]);
+  return candidates[i];
+}
 
-    case OP_STRING:
-      break;
+/* See ada-lang.h.  */
 
-    default:
-      error (_("Unexpected operator during name resolution"));
+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, VAR_DOMAIN);
+
+  if (std::any_of (candidates.begin (),
+		   candidates.end (),
+		   [] (block_symbol &bsym)
+		   {
+		     switch (SYMBOL_CLASS (bsym.symbol))
+		       {
+		       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 SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF;
+	  }),
+	 candidates.end ());
     }
 
-  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 ();
-
-  /* Pass two: perform any resolution on principal operator.  */
-  switch (op)
+  int i;
+  if (candidates.empty ())
+    error (_("No definition found for %s"), sym->print_name ());
+  else if (candidates.size () == 1)
+    i = 0;
+  else if (deprocedure_p && !is_nonfunction (candidates))
     {
-    default:
-      break;
-
-    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;
-
-    case OP_FUNCALL:
-      {
-        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);
-
-          i = ada_resolve_function (candidates.data (), n_candidates, argvec,
-				    nargs, ada_decoded_op_name (op), NULL,
-				    parse_completion);
-          if (i < 0)
-            break;
-
-	  replace_operator_with_call (expp, pc, nargs, 1,
-				      candidates[i].symbol,
-				      candidates[i].block);
-          exp = expp->get ();
-        }
-      break;
-
-    case OP_TYPE:
-    case OP_REGISTER:
-      return NULL;
+      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
+    {
+      printf_filtered (_("Multiple matches for %s\n"), sym->print_name ());
+      user_select_syms (candidates.data (), candidates.size (), 1);
+      i = 0;
     }
 
-  *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);
+  tracker->update (candidates[i]);
+  return candidates[i];
 }
 
-/* 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.  */
+/* Return non-zero if formal type FTYPE matches actual type ATYPE.  */
 /* The term "match" here is rather loose.  The match is heuristic and
    liberal.  */
 
 static int
-ada_type_match (struct type *ftype, struct type *atype, int may_deref)
+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)
+  if (ftype->code () == TYPE_CODE_REF)
     ftype = TYPE_TARGET_TYPE (ftype);
-  if (TYPE_CODE (atype) == TYPE_CODE_REF)
+  if (atype->code () == TYPE_CODE_REF)
     atype = TYPE_TARGET_TYPE (atype);
 
-  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 0;
+      atype = TYPE_TARGET_TYPE (atype);
+      /* This can only happen if the actual argument is 'null'.  */
+      if (atype->code () == TYPE_CODE_INT && TYPE_LENGTH (atype) == 0)
+	return 1;
+      return ada_type_match (TYPE_TARGET_TYPE (ftype), 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;
-        }
+      switch (atype->code ())
+	{
+	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));
+      return (atype->code () == TYPE_CODE_ARRAY
+	      || ada_is_array_descriptor_type (atype));
 
     case TYPE_CODE_STRUCT:
       if (ada_is_array_descriptor_type (ftype))
-        return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
-                || ada_is_array_descriptor_type (atype));
+	return (atype->code () == TYPE_CODE_ARRAY
+		|| ada_is_array_descriptor_type (atype));
       else
-        return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
-                && !ada_is_array_descriptor_type (atype));
+	return (atype->code () == TYPE_CODE_STRUCT
+		&& !ada_is_array_descriptor_type (atype));
 
     case TYPE_CODE_UNION:
     case TYPE_CODE_FLT:
-      return (TYPE_CODE (atype) == TYPE_CODE (ftype));
+      return (atype->code () == ftype->code ());
     }
 }
 
@@ -3917,27 +3564,26 @@ ada_args_match (struct symbol *func, str
   struct type *func_type = SYMBOL_TYPE (func);
 
   if (SYMBOL_CLASS (func) == LOC_CONST
-      && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
+      && 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 (value_type (actuals[i]));
+
+	  if (!ada_type_match (ftype, atype))
+	    return 0;
+	}
     }
   return 1;
 }
@@ -3955,7 +3601,7 @@ return_match (struct type *func_type, st
   if (func_type == NULL)
     return 1;
 
-  if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
+  if (func_type->code () == TYPE_CODE_FUNC)
     return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
   else
     return_type = get_base_type (func_type);
@@ -3964,16 +3610,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 +3632,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 +3647,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 (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;
+	    }
+	}
     }
 
   /* If we got multiple matches, ask the user which one to use.  Don't do this
@@ -4023,45 +3669,12 @@ ada_resolve_function (struct block_symbo
   else if (m > 1 && !parse_completion)
     {
       printf_filtered (_("Multiple matches for %s\n"), name);
-      user_select_syms (syms, m, 1);
+      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 +3687,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 (type)
+		  || numeric_type_p (TYPE_TARGET_TYPE (type)));
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -4097,16 +3711,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 (type)
+		  || integer_type_p (TYPE_TARGET_TYPE (type)));
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -4119,16 +3733,17 @@ 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;
+	}
     }
 }
 
@@ -4141,16 +3756,16 @@ 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:
+	  return 1;
+	default:
+	  return 0;
+	}
     }
 }
 
@@ -4210,7 +3825,7 @@ possible_user_operator_p (enum exp_opcod
     }
 }
 
-                                /* Renaming */
+				/* Renaming */
 
 /* NOTES: 
 
@@ -4317,7 +3932,7 @@ ada_read_renaming_var_value (struct symb
 }
 
 
-                                /* 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
@@ -4331,7 +3946,7 @@ ensure_lval (struct value *val)
     {
       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
       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);
@@ -4362,35 +3977,35 @@ ada_value_struct_elt (struct value *arg,
 
   v = NULL;
   t1 = t = ada_check_typedef (value_type (arg));
-  if (TYPE_CODE (t) == TYPE_CODE_REF)
+  if (t->code () == TYPE_CODE_REF)
     {
       t1 = TYPE_TARGET_TYPE (t);
       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);
       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 +4016,31 @@ ada_value_struct_elt (struct value *arg,
       struct type *field_type;
       CORE_ADDR address;
 
-      if (TYPE_CODE (t) == TYPE_CODE_PTR)
+      if (t->code () == TYPE_CODE_PTR)
 	address = value_address (ada_value_ind (arg));
       else
 	address = value_address (ada_coerce_ref (arg));
 
       /* 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 (TYPE_TARGET_TYPE (t1), 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,
+				  &field_type, &byte_offset, &bit_offset,
+				  &bit_size, NULL))
 	    check_tag = 1;
 	  else
 	    check_tag = 0;
-        }
+	}
       else
 	check_tag = 0;
 
@@ -4434,23 +4049,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 = value_type (arg);
+
       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)
@@ -4477,43 +4096,43 @@ ada_convert_actual (struct value *actual
   struct type *actual_type = ada_check_typedef (value_type (actual));
   struct type *formal_type = ada_check_typedef (formal_type0);
   struct type *formal_target =
-    TYPE_CODE (formal_type) == TYPE_CODE_PTR
+    formal_type->code () == TYPE_CODE_PTR
     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
   struct type *actual_target =
-    TYPE_CODE (actual_type) == TYPE_CODE_PTR
+    actual_type->code () == TYPE_CODE_PTR
     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_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 (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
 	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))
     {
@@ -4537,13 +4156,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);
   gdb_byte *buf = (gdb_byte *) alloca (len);
   CORE_ADDR addr;
 
   addr = value_address (value);
-  gdbarch_address_to_pointer (gdbarch, type, buf, addr);
+  gdbarch_address_to_pointer (type->arch (), type, buf, addr);
   addr = extract_unsigned_integer (buf, len, type_byte_order (type));
   return addr;
 }
@@ -4582,26 +4200,26 @@ make_array_descriptor (struct type *type
   modify_field (value_type (descriptor),
 		value_contents_writeable (descriptor),
 		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),
 		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,24 +4231,6 @@ 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.  */
 
@@ -4639,25 +4239,22 @@ ada_get_symbol_cache (struct program_spa
 {
   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);
-    }
+  if (pspace_data->sym_cache == nullptr)
+    pspace_data->sym_cache.reset (new ada_symbol_cache);
 
-  return pspace_data->sym_cache;
+  return pspace_data->sym_cache.get ();
 }
 
 /* Clear all entries from the symbol cache.  */
 
 static void
-ada_clear_symbol_cache (void)
+ada_clear_symbol_cache ()
 {
-  struct ada_symbol_cache *sym_cache
-    = ada_get_symbol_cache (current_program_space);
+  struct ada_pspace_data *pspace_data
+    = get_ada_pspace_data (current_program_space);
 
-  obstack_free (&sym_cache->cache_space, NULL);
-  ada_init_symbol_cache (sym_cache);
+  if (pspace_data->sym_cache != nullptr)
+    pspace_data->sym_cache.reset ();
 }
 
 /* Search our cache for an entry matching NAME and DOMAIN.
@@ -4674,7 +4271,7 @@ find_entry (const char *name, domain_enu
   for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
     {
       if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
-        return e;
+	return e;
     }
   return NULL;
 }
@@ -4687,7 +4284,7 @@ find_entry (const char *name, domain_enu
 
 static int
 lookup_cached_symbol (const char *name, domain_enum domain,
-                      struct symbol **sym, const struct block **block)
+		      struct symbol **sym, const struct block **block)
 {
   struct cache_entry **e = find_entry (name, domain);
 
@@ -4705,12 +4302,11 @@ lookup_cached_symbol (const char *name,
 
 static void
 cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
-              const struct block *block)
+	      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.
@@ -4733,15 +4329,13 @@ cache_symbol (const char *name, domain_e
   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->name = obstack_strdup (&sym_cache->cache_space, name);
   e->sym = sym;
   e->domain = domain;
   e->block = block;
 }
 
-                                /* 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 +4356,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_enum domain)
 {
   /* Initialize it just to avoid a GCC false warning.  */
   struct block_symbol sym = {};
@@ -4776,17 +4370,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 (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
+	&& (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
+	    || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
       return 1;
 
   return 0;
@@ -4801,10 +4393,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;
@@ -4830,28 +4422,28 @@ lesseq_defined_than (struct symbol *sym0
       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 = 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
+	  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));
+	&& equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
 
     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
+		&& SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
       }
 
     default:
@@ -4859,17 +4451,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 +4468,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
@@ -4959,12 +4524,12 @@ ada_lookup_simple_minsym (const char *na
 
 /* 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
+   and their blocks to the list of data in RESULT, as for
    ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
    with a wildcard prefix.  */
 
 static void
-add_symbols_from_enclosing_procs (struct obstack *obstackp,
+add_symbols_from_enclosing_procs (std::vector<struct block_symbol> &result,
 				  const lookup_name_info &lookup_name,
 				  domain_enum domain)
 {
@@ -4986,7 +4551,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,13 +4564,13 @@ 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++)
+  for (i = 0; i < type1->num_fields (); i++)
     if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
       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);
@@ -5015,7 +4580,7 @@ ada_identical_enum_types_p (struct type
       ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
       ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
       if (len_1 != len_2
-          || strncmp (TYPE_FIELD_NAME (type1, i),
+	  || strncmp (TYPE_FIELD_NAME (type1, i),
 		      TYPE_FIELD_NAME (type2, i),
 		      len_1) != 0)
 	return 0;
@@ -5058,7 +4623,7 @@ 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 (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
       return 0;
 
   /* Quick check: They should all have the same value.  */
@@ -5068,8 +4633,8 @@ symbols_are_identical_enums (const std::
 
   /* 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 (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
+	!= SYMBOL_TYPE (syms[0].symbol)->num_fields ())
       return 0;
 
   /* All the sanity checks passed, so we might have a set of
@@ -5077,7 +4642,7 @@ symbols_are_identical_enums (const std::
      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)))
+				     SYMBOL_TYPE (syms[0].symbol)))
       return 0;
 
   return 1;
@@ -5087,10 +4652,9 @@ 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
+static void
 remove_extra_symbols (std::vector<struct block_symbol> *syms)
 {
   int i, j;
@@ -5099,7 +4663,7 @@ remove_extra_symbols (std::vector<struct
      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 ();
+    return;
 
   i = 0;
   while (i < syms->size ())
@@ -5107,47 +4671,47 @@ remove_extra_symbols (std::vector<struct
       int remove_p = 0;
 
       /* 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 (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
+	  && (*syms)[i].symbol->linkage_name () != NULL)
+	{
+	  for (j = 0; j < syms->size (); j++)
+	    {
+	      if (j != i
+		  && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
+		  && (*syms)[j].symbol->linkage_name () != NULL
+		  && strcmp ((*syms)[i].symbol->linkage_name (),
+			     (*syms)[j].symbol->linkage_name ()) == 0)
+		remove_p = 1;
+	    }
+	}
 
       /* 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)[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;
-            }
-        }
+		  && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
+		  == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
+		remove_p = 1;
+	    }
+	}
       
       if (remove_p)
 	syms->erase (syms->begin () + i);
-
-      i += 1;
+      else
+	i += 1;
     }
 
   /* If all the remaining symbols are identical enumerals, then
@@ -5164,8 +4728,6 @@ remove_extra_symbols (std::vector<struct
      isn't missing some choices that were identical and yet distinct.  */
   if (symbols_are_identical_enums (*syms))
     syms->resize (1);
-
-  return syms->size ();
 }
 
 /* Given a type that corresponds to a renaming entity, use the type name
@@ -5181,7 +4743,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;
 
@@ -5257,8 +4819,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 +4842,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)
 {
@@ -5339,22 +4901,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);
   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,18 +4927,16 @@ 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)
+/* Add to RESULT 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,
@@ -5383,10 +4944,10 @@ remove_irrelevant_renamings (std::vector
    If WILD_MATCH_P is nonzero, perform the naming matching in
    "wild" mode (see function "wild_match" for more info).
 
-   Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
+   Note: This function assumes that RESULT has 0 (zero) element in it.  */
 
 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)
 {
@@ -5395,69 +4956,69 @@ ada_add_local_symbols (struct obstack *o
   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 (is_nonfunction (result))
+	return;
 
       block = BLOCK_SUPERBLOCK (block);
     }
 
   /* 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);
+  if (result.empty () && block_depth > 2)
+    add_symbols_from_enclosing_procs (result, 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),
+      if (!found_sym && arg_sym != NULL)
+	add_defn_to_vec (*resultp,
+			 fixup_symbol_section (arg_sym, objfile),
 			 block);
-      data->found_sym = 0;
-      data->arg_sym = NULL;
+      found_sym = false;
+      arg_sym = NULL;
     }
   else 
     {
       if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
 	return true;
       else if (SYMBOL_IS_ARGUMENT (sym))
-	data->arg_sym = sym;
+	arg_sym = sym;
       else
 	{
-	  data->found_sym = 1;
-	  add_defn_to_vec (data->obstackp,
-			   fixup_symbol_section (sym, data->objfile),
+	  found_sym = true;
+	  add_defn_to_vec (*resultp,
+			   fixup_symbol_section (sym, objfile),
 			   block);
 	}
     }
@@ -5466,16 +5027,16 @@ 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)
 {
   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);
@@ -5513,12 +5074,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;
+  return result.size () != defns_mark;
 }
 
 /* Implements compare_names, but only applying the comparision using
@@ -5615,67 +5176,77 @@ 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.  Call expand_matching_symbols
+   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,
+		      bool is_wild_match,
+		      domain_enum domain,
+		      int global,
+		      match_data &data)
+{
+  data.objfile = objfile;
+  objfile->expand_matching_symbols (lookup_name, domain, global,
+				    is_wild_match ? nullptr : compare_names);
+
+  const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
+  for (compunit_symtab *symtab : objfile->compunits ())
+    {
+      const struct block *block
+	= BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (symtab), 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)
 {
-  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, is_wild_match, domain,
+			    global, data);
 
       for (compunit_symtab *cu : objfile->compunits ())
 	{
 	  const struct block *global_block
 	    = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), 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, false, 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,7 +5262,7 @@ 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,
@@ -5718,15 +5289,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 +5309,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 +5318,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 +5342,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,
 			       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_enum 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
@@ -5863,7 +5400,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,14 +5413,12 @@ ada_lookup_encoded_symbol (const char *n
 
 struct block_symbol
 ada_lookup_symbol (const char *name, const struct block *block0,
-                   domain_enum domain)
+		   domain_enum domain)
 {
-  std::vector<struct block_symbol> candidates;
-  int n_candidates;
-
-  n_candidates = ada_lookup_symbol_list (name, block0, domain, &candidates);
+  std::vector<struct block_symbol> candidates
+    = ada_lookup_symbol_list (name, block0, domain);
 
-  if (n_candidates == 0)
+  if (candidates.empty ())
     return {};
 
   block_symbol info = candidates[0];
@@ -5891,46 +5426,6 @@ ada_lookup_symbol (const char *name, con
   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 {};
-}
-
 
 /* True iff STR is a possible encoded suffix of a normal Ada name
    that is to be ignored for matching purposes.  Suffixes of parallel
@@ -5960,7 +5455,7 @@ is_name_suffix (const char *str)
     {
       str += 3;
       while (isdigit (str[0]))
-        str += 1;
+	str += 1;
     }
   
   /* [.$][0-9]+ */
@@ -5969,9 +5464,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 +5475,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 +5507,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 +5522,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 +5535,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 +5595,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 +5626,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;
 	}
@@ -6175,34 +5677,11 @@ 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)
@@ -6211,17 +5690,16 @@ ada_add_block_symbols (struct obstack *o
   /* A matching argument symbol, if any.  */
   struct symbol *arg_sym;
   /* Set true when we find a matching non-argument symbol.  */
-  int found_sym;
+  bool found_sym;
   struct symbol *sym;
 
   arg_sym = NULL;
-  found_sym = 0;
+  found_sym = false;
   for (sym = block_iter_match_first (block, lookup_name, &iter);
        sym != NULL;
        sym = block_iter_match_next (lookup_name, &iter))
     {
-      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
-				 SYMBOL_DOMAIN (sym), domain))
+      if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
 	{
 	  if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
 	    {
@@ -6229,8 +5707,8 @@ ada_add_block_symbols (struct obstack *o
 		arg_sym = sym;
 	      else
 		{
-		  found_sym = 1;
-		  add_defn_to_vec (obstackp,
+		  found_sym = true;
+		  add_defn_to_vec (result,
 				   fixup_symbol_section (sym, objfile),
 				   block);
 		}
@@ -6240,72 +5718,72 @@ 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,
+		       fixup_symbol_section (arg_sym, objfile),
+		       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)
       {
-        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_matches_domain (sym->language (),
+				   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 (SYMBOL_IS_ARGUMENT (sym))
 		      arg_sym = sym;
 		    else
 		      {
-			found_sym = 1;
-			add_defn_to_vec (obstackp,
+			found_sym = true;
+			add_defn_to_vec (result,
 					 fixup_symbol_section (sym, objfile),
 					 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,
+			   fixup_symbol_section (arg_sym, objfile),
+			   block);
+	}
     }
 }
 
 
-                                /* Symbol Completion */
+				/* Symbol Completion */
 
 /* See symtab.h.  */
 
@@ -6328,9 +5806,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 +5817,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 +5833,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 +5867,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 +5877,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 (type)->name ();
   if (name == NULL)
     return 0;
 
@@ -6542,7 +5892,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,7 +5906,7 @@ 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.  */
@@ -6583,8 +5933,8 @@ ada_is_ignored_field (struct type *type,
   /* 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 +5957,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));
 
       return (name != NULL
-              && strcmp (name, "ada__tags__dispatch_table") == 0);
+	      && strcmp (name, "ada__tags__dispatch_table") == 0);
     }
 }
 
@@ -6650,13 +6000,13 @@ 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))
+			 NULL, NULL, NULL))
     {
       const gdb_byte *valaddr1 = ((valaddr == NULL)
 				  ? NULL
@@ -6671,10 +6021,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;
 }
 
@@ -6697,8 +6047,7 @@ ada_tag_value_at_base_address (struct va
 
   /* It is the responsability 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);
@@ -6823,37 +6172,41 @@ 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;
+
+  for (p = buffer.get (); *p != '\0'; ++p)
+    {
+      if (isalpha (*p))
+	*p = tolower (*p);
+    }
+
+  return buffer;
 }
 
 /* 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)))
     return NULL;
@@ -6890,21 +6243,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 = 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);
 
-        return ada_check_typedef (parent_type);
+	return ada_check_typedef (parent_type);
       }
 
   return NULL;
@@ -6920,8 +6273,8 @@ ada_is_parent_field (struct type *type,
   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
 
   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
@@ -6947,10 +6300,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 +6317,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)
+	      && (TYPE_TARGET_TYPE (field_type)->code ()
 		  == TYPE_CODE_UNION)));
 }
 
@@ -7004,14 +6357,13 @@ 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)
+  if (type0->code () == TYPE_CODE_PTR)
     type = TYPE_TARGET_TYPE (type0);
   else
     type = type0;
@@ -7025,7 +6377,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 +6386,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 +6426,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)
@@ -7107,35 +6457,35 @@ ada_in_variant (LONGEST val, struct type
   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,14 +6496,14 @@ 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
@@ -7164,8 +6514,8 @@ ada_value_primitive_field (struct value
       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
 
       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
-                                             offset + bit_pos / 8,
-                                             bit_pos % 8, bit_size, type);
+					     offset + bit_pos / 8,
+					     bit_pos % 8, bit_size, type);
     }
   else
     return value_primitive_field (arg1, offset, fieldno, arg_type);
@@ -7188,21 +6538,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 +6588,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 +6606,17 @@ 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);
 
       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 +6625,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_BITSIZE (type, i);
 
 	  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
+				     + TYPE_FIELD_BITPOS (field_type, j) / 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;
     }
@@ -7330,10 +6680,10 @@ find_struct_field (const char *name, str
       int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
       int fld_offset = 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 +6712,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);
 
       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 +6735,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_BITPOS (type, i) / 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_BITPOS (type, i) / 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 + TYPE_FIELD_BITPOS (field_type, j) / 8,
+		 field_type->field (j).type ());
+
+	      if (v != NULL)
+		return v;
+	    }
+	}
     }
 
   /* Field not found so far.  If this is a tagged type which
@@ -7432,10 +6781,10 @@ ada_search_struct_field (const char *nam
     {
       struct value *v = ada_search_struct_field (
 	name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
-	TYPE_FIELD_TYPE (type, parent_offset));
+	type->field (parent_offset).type ());
 
       if (v != NULL)
-        return v;
+	return v;
     }
 
   return NULL;
@@ -7469,29 +6818,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;
+	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,
+	{
+	  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));
+				      type->field (i).type ());
 
-          if (v != NULL)
-            return v;
-        }
+	  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;
     }
@@ -7532,7 +6881,7 @@ 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;
@@ -7543,19 +6892,18 @@ ada_lookup_struct_elt_type (struct type
   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 (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,16 +6911,16 @@ ada_lookup_struct_elt_type (struct type
 
   type = to_static_fixed_type (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);
       struct type *t;
 
       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
@@ -7581,47 +6929,45 @@ ada_lookup_struct_elt_type (struct type
 	     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 TYPE_FIELD_TYPE (type, i);
+	return type->field (i).type ();
 
       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)
+	{
+	  t = ada_lookup_struct_elt_type (type->field (i).type (), 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));
+	{
+	  int j;
+	  struct type *field_type = ada_check_typedef (type->field (i).type ());
 
-          for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
-            {
+	  for (j = field_type->num_fields () - 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
+		 NOT wrapped in a struct, since the compiler sometimes
 		 generates these for unchecked variant types.  Revisit
-	         if the compiler changes this practice.  */
+		 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);
+		t = field_type->field (j).type ();
 	      else
-		t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
-								 j),
+		t = ada_lookup_struct_elt_type (field_type->field (j).type (),
 						name, 0, 1);
 
-              if (t != NULL)
+	      if (t != NULL)
 		return t;
-            }
-        }
+	    }
+	}
 
     }
 
@@ -7630,11 +6976,11 @@ ada_lookup_struct_elt_type (struct type
 
     if (parent_offset != -1)
       {
-        struct type *t;
+	struct type *t;
 
-        t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, parent_offset),
-                                        name, 0, 1);
-        if (t != NULL)
+	t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
+					name, 0, 1);
+	if (t != NULL)
 	  return t;
       }
 
@@ -7665,38 +7011,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 +7045,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
@@ -7760,7 +7101,7 @@ 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 (value_type (val0)->code () == TYPE_CODE_REF)
     {
       struct value *val = val0;
 
@@ -7775,15 +7116,6 @@ 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
@@ -7870,21 +7202,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 +7233,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 +7258,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 +7344,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 +7352,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");
     }
 }
 
@@ -8035,7 +7367,7 @@ is_dynamic_field (struct type *templ_typ
   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
 
   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 +7379,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;
 }
@@ -8065,11 +7397,9 @@ empty_record (struct type *templ)
 {
   struct type *type = alloc_type_copy (templ);
 
-  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->set_name ("<empty>");
   TYPE_LENGTH (type) = 0;
   return type;
 }
@@ -8094,8 +7424,8 @@ 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;
@@ -8110,25 +7440,24 @@ ada_template_to_fixed_record_type_1 (str
      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->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->set_num_fields (nfields);
+  rtype->set_fields
+   ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
+  rtype->set_name (ada_type_name (type));
+  rtype->set_is_fixed_instance (true);
 
   off = 0;
   bit_len = 0;
@@ -8136,24 +7465,24 @@ ada_template_to_fixed_record_type_1 (str
 
   for (f = 0; f < nfields; f += 1)
     {
-      off = align_value (off, field_alignment (type, f))
+      off = align_up (off, field_alignment (type, f))
 	+ TYPE_FIELD_BITPOS (type, f);
-      SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
+      SET_FIELD_BITPOS (rtype->field (f), off);
       TYPE_FIELD_BITSIZE (rtype, f) = 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));
+	    TYPE_TARGET_TYPE (type->field (f).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
@@ -8170,8 +7499,8 @@ ada_template_to_fixed_record_type_1 (str
 								 address);
 	      rtype = value_type (dval);
 	    }
-          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.
@@ -8210,19 +7539,19 @@ ada_template_to_fixed_record_type_1 (str
 	     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);
+	  TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
 	  /* 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 =
+	    TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
+	}
       else
-        {
+	{
 	  /* Note: If this field's type is a typedef, it is important
 	     to preserve the typedef layer.
 
@@ -8233,31 +7562,31 @@ 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 ());
+	  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
 	    {
-	      struct type *field_type = TYPE_FIELD_TYPE (type, f);
+	      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 =
+		TYPE_LENGTH (ada_check_typedef (field_type)) * 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;
+	align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
     }
 
   /* We handle the variant part, if any, at the end because of certain
@@ -8280,31 +7609,31 @@ ada_template_to_fixed_record_type_1 (str
 	  rtype = value_type (dval);
 	}
       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);
+	  TYPE_FIELD_NAME (rtype, variant_field) = "S";
+	  fld_bit_len =
+	    TYPE_LENGTH (rtype->field (variant_field).type ()) *
+	    TARGET_CHAR_BIT;
+	  if (off + fld_bit_len > bit_len)
+	    bit_len = off + fld_bit_len;
+	  TYPE_LENGTH (rtype) =
+	    align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
+	}
     }
 
   /* According to exp_dbug.ads, the size of TYPE for variable-size records
@@ -8315,17 +7644,17 @@ ada_template_to_fixed_record_type_1 (str
      the current RTYPE length might be good enough for our purposes.  */
   if (TYPE_LENGTH (type) <= 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 (type)));
       else
 	warning (_("Invalid type size for <unnamed> detected: %s."),
 		 pulongest (TYPE_LENGTH (type)));
     }
   else
     {
-      TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
-                                         TYPE_LENGTH (type));
+      TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
+				      TYPE_LENGTH (type));
     }
 
   value_free_to_mark (mark);
@@ -8339,10 +7668,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
@@ -8362,7 +7691,7 @@ 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.  */
@@ -8371,7 +7700,7 @@ template_to_static_fixed_type (struct ty
 
   /* 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.  */
@@ -8379,16 +7708,16 @@ template_to_static_fixed_type (struct ty
 
   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 (TYPE_TARGET_TYPE (field_type));
 	}
       else
-        new_type = static_unwrap_type (field_type);
+	new_type = static_unwrap_type (field_type);
 
       if (new_type != field_type)
 	{
@@ -8396,18 +7725,22 @@ template_to_static_fixed_type (struct ty
 	  if (type == type0)
 	    {
 	      TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
-	      TYPE_CODE (type) = TYPE_CODE (type0);
+	      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),
+	      type->set_num_fields (nfields);
+
+	      field *fields =
+		((struct field *)
+		 TYPE_ALLOC (type, nfields * sizeof (struct field)));
+	      memcpy (fields, type0->fields (),
 		      sizeof (struct field) * nfields);
-	      TYPE_NAME (type) = ada_type_name (type0);
-	      TYPE_FIXED_INSTANCE (type) = 1;
+	      type->set_fields (fields);
+
+	      type->set_name (ada_type_name (type0));
+	      type->set_is_fixed_instance (true);
 	      TYPE_LENGTH (type) = 0;
 	    }
-	  TYPE_FIELD_TYPE (type, f) = new_type;
+	  type->field (f).set_type (new_type);
 	  TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
 	}
     }
@@ -8424,13 +7757,13 @@ 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)
@@ -8445,41 +7778,43 @@ to_record_with_fixed_variant_part (struc
     dval = dval0;
 
   rtype = alloc_type_copy (type);
-  TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
+  rtype->set_code (TYPE_CODE_STRUCT);
   INIT_NONE_SPECIFIC (rtype);
-  TYPE_NFIELDS (rtype) = nfields;
-  TYPE_FIELDS (rtype) =
+  rtype->set_num_fields (nfields);
+
+  field *fields =
     (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;
+  memcpy (fields, type->fields (), sizeof (struct field) * nfields);
+  rtype->set_fields (fields);
+
+  rtype->set_name (ada_type_name (type));
+  rtype->set_is_fixed_instance (true);
   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
 
   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_BITPOS (type, variant_field)
+		       / TARGET_CHAR_BIT),
      cond_offset_target (address,
-                         TYPE_FIELD_BITPOS (type, variant_field)
-                         / TARGET_CHAR_BIT), dval);
+			 TYPE_FIELD_BITPOS (type, variant_field)
+			 / 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;
+      rtype->field (variant_field).set_type (branch_type);
       TYPE_FIELD_NAME (rtype, variant_field) = "S";
       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
     }
-  TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
+  TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
 
   value_free_to_mark (mark);
   return rtype;
@@ -8505,11 +7840,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 +7854,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,13 +7876,13 @@ 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)
+  if (var_type0->code () == TYPE_CODE_PTR)
     var_type = TYPE_TARGET_TYPE (var_type0);
   else
     var_type = var_type0;
@@ -8559,22 +7894,20 @@ to_fixed_variant_branch_type (struct typ
 
   if (is_unchecked_variant (var_type, value_type (dval)))
       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)),
+      (TYPE_TARGET_TYPE (var_type->field (which).type ()),
        valaddr, address, dval);
-  else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
+  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 +7922,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 +7938,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,10 +7971,10 @@ 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));
     }
@@ -8659,7 +7992,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 +8000,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);
 
@@ -8715,26 +8052,26 @@ to_fixed_array_type (struct type *type0,
       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
 
       /* 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));
+	result = create_array_type (alloc_type_copy (type0),
+				    elt_type, type0->index_type ());
     }
   else
     {
@@ -8742,41 +8079,41 @@ 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 = TYPE_TARGET_TYPE (elt_type0);
 
       /* 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);
+      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);
 
-          result = create_array_type (alloc_type_copy (elt_type0),
-                                      result, range_type);
+	  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"));
+	error (_("array type with dynamic size is larger than varsize-limit"));
     }
 
   /* 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)
     {
@@ -8790,10 +8127,10 @@ to_fixed_array_type (struct type *type0,
       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)++;
+	TYPE_LENGTH (result)++;
     }
 
-  TYPE_FIXED_INSTANCE (result) = 1;
+  result->set_is_fixed_instance (true);
   return result;
 }
 
@@ -8812,7 +8149,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 +8157,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 +8186,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 = value_type (obj);
+	    if (real_type != NULL)
+	      return to_fixed_record_type
 		(real_type, NULL,
 		 value_address (ada_tag_value_at_base_address (obj)), 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 +8220,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 && 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.  */
+		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 +8282,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 +8305,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 +8324,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 +8355,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 +8366,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 +8402,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,7 +8433,7 @@ 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);
 
@@ -9132,7 +8469,7 @@ ada_to_fixed_value (struct value *val)
 /* 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[] = {
+static const char * const attribute_names[] = {
   "<?>",
 
   "first",
@@ -9165,47 +8502,62 @@ pos_atr (struct value *arg)
 {
   struct value *val = coerce_ref (arg);
   struct type *type = value_type (val);
-  LONGEST result;
 
   if (!discrete_type_p (type))
     error (_("'POS only defined on discrete types"));
 
-  if (!discrete_position (type, value_as_long (val), &result))
+  gdb::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 (type);
+  if (type->code () == TYPE_CODE_ENUM)
+    {
+      if (val < 0 || val >= type->num_fields ())
+	error (_("argument to 'VAL out of range"));
+      val = TYPE_FIELD_ENUMVAL (type, val);
+    }
+  return value_from_longest (type, val);
+}
+
+struct value *
+ada_val_atr (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)))
     error (_("'VAL requires integral argument"));
 
-  if (TYPE_CODE (type) == TYPE_CODE_ENUM)
-    {
-      long pos = value_as_long (arg);
-
-      if (pos < 0 || pos >= TYPE_NFIELDS (type))
-        error (_("argument to 'VAL out of range"));
-      return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
-    }
-  else
-    return value_from_longest (type, value_as_long (arg));
+  return val_atr (type, value_as_long (arg));
 }
 
 
-                                /* 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 +8570,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 +8592,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 +8628,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_NAME (type, 0), "F") == 0);
 }
 
 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
@@ -9290,7 +8642,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,11 +8662,11 @@ 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
@@ -9327,7 +8679,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 TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
 }
 
 /* The type of value designated by TYPE, with all aligners removed.  */
@@ -9336,7 +8688,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 +8701,10 @@ 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_BITPOS (type,
+						      0) / TARGET_CHAR_BIT);
   else
     return valaddr;
 }
@@ -9364,8 +8716,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 +8734,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 +8747,28 @@ ada_enum_name (const char *name)
       int v;
 
       if (name[1] == 'U' || name[1] == 'W')
-        {
-          if (sscanf (name + 2, "%x", &v) != 1)
-            return name;
-        }
+	{
+	  if (sscanf (name + 2, "%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
-        xsnprintf (result, result_len, "[\"%04x\"]", v);
+	storage = string_printf ("[\"%04x\"]", v);
 
-      return result;
+      return storage.c_str ();
     }
   else
     {
@@ -9427,27 +8776,15 @@ 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.  */
-
-static struct value *
-evaluate_subexp_type (struct expression *exp, int *pos)
-{
-  return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-}
-
 /* If VAL is wrapped in an aligner or subtype wrapper, return the
    value it wraps.  */
 
@@ -9462,14 +8799,14 @@ unwrap_value (struct value *val)
       struct type *val_type = ada_check_typedef (value_type (v));
 
       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));
+	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.  */
@@ -9478,39 +8815,13 @@ unwrap_value (struct value *val)
 	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,
+				 value_address (val),
+				 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.  */
 
@@ -9553,9 +8864,9 @@ ada_promote_array_of_integrals (struct t
   /* 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 (type->code () == TYPE_CODE_ARRAY);
   gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
-  gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
+  gdb_assert (value_type (val)->code () == 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))));
@@ -9591,15 +8902,15 @@ 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);
     }
 
-  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"));
@@ -9615,8 +8926,8 @@ coerce_for_assign (struct type *type, st
 	}
 
       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
-          != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
-        error (_("Incompatible types in assignment"));
+	  != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
+	error (_("Incompatible types in assignment"));
       deprecated_set_value_type (val, type);
     }
   return val;
@@ -9634,8 +8945,8 @@ ada_value_binop (struct value *arg1, str
   type1 = get_base_type (ada_check_typedef (value_type (arg1)));
   type2 = get_base_type (ada_check_typedef (value_type (arg2)));
 
-  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)
@@ -9650,9 +8961,22 @@ ada_value_binop (struct value *arg1, str
 
   v2 = value_as_long (arg2);
   if (v2 == 0)
-    error (_("second operand of %s must not be zero."), op_string (op));
+    {
+      const char *name;
+      if (op == BINOP_MOD)
+	name = "mod";
+      else if (op == BINOP_DIV)
+	name = "/";
+      else
+	{
+	  gdb_assert (op == BINOP_REM);
+	  name = "rem";
+	}
+
+      error (_("second operand of %s must not be zero."), name);
+    }
 
-  if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
+  if (type1->is_unsigned () || op == BINOP_MOD)
     return value_binop (arg1, arg2, op);
 
   v1 = value_as_long (arg1);
@@ -9661,12 +8985,12 @@ ada_value_binop (struct value *arg1, str
     case BINOP_DIV:
       v = v1 / v2;
       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
-        v += v > 0 ? -1 : 1;
+	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.  */
@@ -9675,7 +8999,7 @@ ada_value_binop (struct value *arg1, str
 
   val = allocate_value (type1);
   store_unsigned_integer (value_contents_raw (val),
-                          TYPE_LENGTH (value_type (val)),
+			  TYPE_LENGTH (value_type (val)),
 			  type_byte_order (type1), v);
   return val;
 }
@@ -9689,7 +9013,7 @@ ada_value_equal (struct value *arg1, str
       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);
 
@@ -9699,12 +9023,12 @@ ada_value_equal (struct value *arg1, str
       arg1_type = ada_check_typedef (value_type (arg1));
       arg2_type = ada_check_typedef (value_type (arg2));
 
-      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.  */
+	 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);
@@ -9712,49 +9036,31 @@ ada_value_equal (struct value *arg1, str
   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));
 
-  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);
@@ -9767,44 +9073,52 @@ assign_component (struct value *containe
       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));
+  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));
+}
 
-  value_free_to_mark (mark);
+bool
+ada_aggregate_component::uses_objfile (struct objfile *objfile)
+{
+  for (const auto &item : m_components)
+    if (item->uses_objfile (objfile))
+      return true;
+  return false;
 }
 
-/* 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.  */
+void
+ada_aggregate_component::dump (ui_file *stream, int depth)
+{
+  fprintf_filtered (stream, _("%*sAggregate\n"), depth, "");
+  for (const auto &item : m_components)
+    item->dump (stream, depth + 1);
+}
 
-static struct value *
-assign_aggregate (struct value *container, 
-		  struct value *lhs, struct expression *exp, 
-		  int *pos, enum noside noside)
+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)))
@@ -9818,10 +9132,10 @@ assign_aggregate (struct value *containe
     {
       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);
+      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 +9143,259 @@ 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)
+{
+  fprintf_filtered (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)
+{
+  fprintf_filtered (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;
-	}
-      else
-	{
-	  int ind;
-	  const char *name;
+bool
+ada_name_association::uses_objfile (struct objfile *objfile)
+{
+  return m_val->uses_objfile (objfile);
+}
 
-	  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;
-	}
+void
+ada_name_association::dump (ui_file *stream, int depth)
+{
+  fprintf_filtered (stream, _("%*sName:\n"), depth, "");
+  m_val->dump (stream, depth + 1);
+}
 
-      if (lower <= upper && (lower < low || upper > high))
-	error (_("Index in component association out of bounds."));
+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 (value_type (lhs)))
+    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 ());
 
-      add_component_interval (lower, upper, indices, num_indices,
-			      max_indices);
-      while (lower <= upper)
+      const char *name;
+      if (strop != nullptr)
+	name = strop->get_name ();
+      else
 	{
-	  int pos1;
-
-	  pos1 = expr_pc;
-	  assign_component (container, lhs, lower, exp, &pos1);
-	  lower += 1;
+	  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 ();
 	}
+
+      index = 0;
+      if (! find_struct_field (name, value_type (lhs), 0,
+			       NULL, NULL, NULL, NULL, &index))
+	error (_("Unknown component name: %s."), name);
     }
+
+  add_component_interval (index, index, indices);
+  assign_component (container, lhs, index, exp, op);
+}
+
+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;
+}
+
+void
+ada_choices_component::dump (ui_file *stream, int depth)
+{
+  fprintf_filtered (stream, _("%*sChoices:\n"), depth, "");
+  m_op->dump (stream, depth + 1);
+  for (const auto &item : m_assocs)
+    item->dump (stream, depth + 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)
+{
+  fprintf_filtered (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);
 
-	  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);
     }
-  ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
+  /* 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 = value_type (arg1);
+  if (VALUE_LVAL (arg1) == lval_internalvar)
+    type = NULL;
+  value *arg2 = std::get<1> (m_storage)->evaluate (type, exp, noside);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  if (VALUE_LVAL (arg1) == lval_internalvar)
+    {
+      /* Nothing.  */
+    }
+  else
+    arg2 = coerce_for_assign (value_type (arg1), 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 +9403,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;
@@ -10050,12 +9427,6 @@ ada_value_cast (struct type *type, struc
   if (type == ada_check_typedef (value_type (arg2)))
     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,10 +9472,10 @@ 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);
@@ -10121,15 +9492,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 +9540,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 +9563,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 +9595,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 +9613,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 +9647,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 +9684,1073 @@ 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, (LONGEST) 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 = value_type (arg1);
 
-      /* 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 (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 (type));
+}
 
-    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 (value_type (arg1), 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_zero (value_type (arg1), not_lval);
+    }
+  else
+    {
       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-      return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
+      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, (LONGEST) 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 (value_type (array)->code () == 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)));
 
-        *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 (value_type (array)))
+    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 (value_type (array)->code () == TYPE_CODE_REF
+      || (value_type (array)->code () == TYPE_CODE_ARRAY
+	  && VALUE_LVAL (array) == 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
+				       (value_type (array))))
+    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 (value_type (array)->code () == TYPE_CODE_PTR
+	 && (TYPE_TARGET_TYPE (value_type (array))->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 (value_type (array)))
+    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 (value_type (array))->code ()
+      == TYPE_CODE_PTR)
+    {
+      struct type *type0 = ada_check_typedef (value_type (array));
 
-	      if (TYPE_CODE (type) != TYPE_CODE_REF)
-		{
-		  struct type *actual_type;
+      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);
 
-		  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 (value_type (array), 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 (value_type (arg2), n, "range");
+  if (!type)
+    type = value_type (arg1);
 
-      /* 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);
-
-      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);
+  value *arg3 = value_from_longest (type, ada_array_bound (arg2, n, 1));
+  arg2 = value_from_longest (type, ada_array_bound (arg2, n, 0));
 
-        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"));
-        }
+  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_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));
-      }
+/* A helper function for some attribute operations.  */
 
-    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);
+static value *
+ada_unop_atr (struct expression *exp, enum noside noside, enum exp_opcode op,
+	      struct value *arg1, struct type *type_arg, int tem)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      if (type_arg == NULL)
+	type_arg = value_type (arg1);
 
-      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,
+					 ada_attribute_name (op));
+	      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);
 
-      type = ada_index_type (value_type (arg2), tem, "range");
-      if (!type)
-	type = value_type (arg1);
+      if (ada_is_constrained_packed_array_type (value_type (arg1)))
+	arg1 = ada_coerce_to_simple_array (arg1);
 
-      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 (value_type (arg1), tem,
+				 ada_attribute_name (op));
+	  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;
 
-      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);
+      if (ada_is_constrained_packed_array_type (type_arg))
+	type_arg = decode_constrained_packed_array_type (type_arg);
 
-      if (noside == EVAL_SKIP)
-        goto nosideret;
+      struct type *type;
+      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;
+	}
 
-      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;
+      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 (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 OP_ATR_MIN and OP_ATR_MAX.  */
 
-            if (ada_is_constrained_packed_array_type (type_arg))
-	      type_arg = decode_constrained_packed_array_type (type_arg);
+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 (value_type (arg1), not_lval);
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      return value_binop (arg1, arg2, op);
+    }
+}
 
-	    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;
-		  }
-	      }
+/* A helper function for BINOP_EXP.  */
 
-	    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;
-	      }
+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 (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);
 
-            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;
-	      }
+      return value_binop (arg1, arg2, op);
+    }
+}
 
-            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);
-              }
-          }
-      }
+namespace expr
+{
 
-    case OP_ATR_TAG:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
+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);
 
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (ada_tag_type (arg1), not_lval);
+  return result;
+}
 
-      return ada_value_tag (arg1);
+value *
+ada_string_operation::evaluate (struct type *expect_type,
+				struct expression *exp,
+				enum noside noside)
+{
+  value *result = string_operation::evaluate (expect_type, exp, noside);
+  /* The result type will have code OP_STRING, bashed there from 
+     OP_ARRAY.  Bash it back.  */
+  if (value_type (result)->code () == TYPE_CODE_STRING)
+    value_type (result)->set_code (TYPE_CODE_ARRAY);
+  return result;
+}
 
-    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);
-	}
+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);
+}
 
-    case OP_ATR_MODULUS:
-      {
-        struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
+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);
+}
+
+value *
+ada_binop_addsub_operation::evaluate (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside)
+{
+  value *arg1 = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
+  value *arg2 = std::get<2> (m_storage)->evaluate_with_coercion (exp, noside);
 
-        evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-        if (noside == EVAL_SKIP)
-          goto nosideret;
+  auto do_op = [=] (LONGEST x, LONGEST y)
+    {
+      if (std::get<0> (m_storage) == BINOP_ADD)
+	return x + y;
+      return x - y;
+    };
 
-        if (!ada_is_modular_type (type_arg))
-          error (_("'modulus must be applied to modular type"));
+  if (value_type (arg1)->code () == TYPE_CODE_PTR)
+    return (value_from_longest
+	    (value_type (arg1),
+	     do_op (value_as_long (arg1), value_as_long (arg2))));
+  if (value_type (arg2)->code () == TYPE_CODE_PTR)
+    return (value_from_longest
+	    (value_type (arg2),
+	     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 = value_type (arg1);
+  while (type->code () == TYPE_CODE_REF)
+    type = TYPE_TARGET_TYPE (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;
+}
 
-        return value_from_longest (TYPE_TARGET_TYPE (type_arg),
-                                   ada_modulus (type_arg));
-      }
+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 = value_type (tem);
+    }
+  else
+    val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
 
-    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 ada_unop_atr (exp, noside, std::get<1> (m_storage),
+		       val, type_arg, std::get<2> (m_storage));
+}
 
-    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);
+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);
 
-    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);
+  const bound_minimal_symbol &b = std::get<0> (m_storage);
+  value *val = evaluate_var_msym_value (noside, b.objfile, b.minsym);
 
-	  return value_binop (arg1, arg2, op);
-	}
+  val = ada_value_cast (expect_type, val);
 
-    case UNOP_PLUS:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-        goto nosideret;
-      else
-        return arg1;
+  /* 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;
+}
 
-    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));
-        }
+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 (VALUE_LVAL (val) == lval_memory)
+    {
+      if (value_lazy (val))
+	value_fetch_lazy (val);
+      VALUE_LVAL (val) = not_lval;
+    }
+  return val;
+}
 
-      if (ada_is_array_descriptor_type (type))
-        /* GDB allows dereferencing GNAT array descriptors.  */
-        return ada_coerce_to_simple_array (arg1);
-      else
-        return ada_value_ind (arg1);
+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 (SYMBOL_DOMAIN (sym) == 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 ());
 
-    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);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type = static_unwrap_type (SYMBOL_TYPE (sym));
+      /* 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 (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 (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.  */
+	  if (type->code () != TYPE_CODE_REF)
+	    {
+	      struct type *actual_type;
 
-              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"));
-	  }
+	      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);
+	    }
+	}
 
-      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;
+      /* 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);
     }
 
-nosideret:
-  return eval_skip_value (exp);
+  value *arg1 = var_value_operation::evaluate (expect_type, exp, noside);
+  return ada_to_fixed_value (arg1);
 }
-
 
-                                /* Fixed point */
+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 (SYMBOL_DOMAIN (sym) == 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
+      && (SYMBOL_TYPE (std::get<0> (m_storage).symbol)->code ()
+	  == TYPE_CODE_FUNC))
+    return true;
 
-/* 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.  */
+  return false;
+}
 
-static const char *
-fixed_type_info (struct type *type)
+value *
+ada_atr_val_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 *arg = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  return ada_val_atr (noside, std::get<0> (m_storage), arg);
+}
+
+value *
+ada_unop_ind_operation::evaluate (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside)
+{
+  value *arg1 = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
 
-  if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
+  struct type *type = ada_check_typedef (value_type (arg1));
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
     {
-      const char *tail = strstr (name, "___XF_");
+      if (ada_is_array_descriptor_type (type))
+	/* GDB allows dereferencing GNAT array descriptors.  */
+	{
+	  struct type *arrType = ada_type_of_array (arg1, 0);
 
-      if (tail == NULL)
-        return NULL;
+	  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 (type), 0))
+	    {
+	      arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp,
+							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_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
-        return tail + 5;
+	error (_("Attempt to take contents of a non-pointer value."));
     }
-  else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
-    return fixed_type_info (TYPE_TARGET_TYPE (type));
+  arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for??  */
+  type = ada_check_typedef (value_type (arg1));
+
+  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));
+    }
+
+  struct type *target_type = (to_static_fixed_type
+			      (ada_aligned_type
+			       (ada_check_typedef (TYPE_TARGET_TYPE (type)))));
+  ada_ensure_varsize_limit (target_type);
+
+  if (ada_is_array_descriptor_type (type))
+    /* GDB allows dereferencing GNAT array descriptors.  */
+    return ada_coerce_to_simple_array (arg1);
   else
-    return NULL;
+    return ada_value_ind (arg1);
 }
 
-/* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
-
-int
-ada_is_fixed_point_type (struct type *type)
+value *
+ada_structop_operation::evaluate (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside)
 {
-  return fixed_type_info (type) != NULL;
-}
+  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 = value_type (arg1);
 
-/* Return non-zero iff TYPE represents a System.Address type.  */
+      if (ada_is_tagged_type (type1, 1))
+	{
+	  type = ada_lookup_struct_elt_type (type1, str, 1, 1);
 
-int
-ada_is_system_address_type (struct type *type)
-{
-  return (TYPE_NAME (type)
-          && strcmp (TYPE_NAME (type), "system__address") == 0);
+	  /* 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 = value_type (ada_to_fixed_value (arg1));
+	    }
+	}
+      else
+	type = ada_lookup_struct_elt_type (type1, str, 1, 0);
+
+      return value_zero (ada_aligned_type (type), lval_memory);
+    }
+  else
+    {
+      arg1 = ada_value_struct_elt (arg1, str, 0);
+      arg1 = unwrap_value (arg1);
+      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.  */
+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
+      && SYMBOL_DOMAIN (avv->get_symbol ()) == 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 (value_type (callee))))
+    callee = ada_coerce_to_simple_array (callee);
+  else if (value_type (callee)->code () == TYPE_CODE_ARRAY
+	   && TYPE_FIELD_BITSIZE (value_type (callee), 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 (value_type (callee)->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 (value_type (callee)->code () == TYPE_CODE_ARRAY
+	   && VALUE_LVAL (callee) == lval_memory)
+    callee = value_addr (callee);
+
+  struct type *type = ada_check_typedef (value_type (callee));
+
+  /* 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);
 
-static struct type *
-ada_scaling_type (struct type *type)
-{
-  return builtin_type (get_type_arch (type))->builtin_long_double;
+  if (type->code () == TYPE_CODE_PTR)
+    {
+      switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
+	{
+	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)
+	    callee = ada_value_ind (callee);
+	  type = ada_check_typedef (TYPE_TARGET_TYPE (type));
+	  break;
+	default:
+	  error (_("cannot subscript or call something of type `%s'"),
+		 ada_type_name (value_type (callee)));
+	  break;
+	}
+    }
+
+  switch (type->code ())
+    {
+    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 (callee, NULL, 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 (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"));
+    }
 }
 
-/* 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.  */
+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;
 
-struct value *
-ada_delta (struct type *type)
-{
-  const char *encoding = fixed_type_info (type);
-  struct type *scale_type = ada_scaling_type (type);
+  symbol *sym = avv->get_symbol ();
+  if (SYMBOL_DOMAIN (sym) != UNDEF_DOMAIN)
+    return false;
 
-  long long num, den;
+  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);
 
-  if (sscanf (encoding, "_%lld_%lld", &num, &den) < 2)
-    return nullptr;
-  else
-    return value_binop (value_from_longest (scale_type, num),
-			value_from_longest (scale_type, den), BINOP_DIV);
+  std::get<0> (m_storage)
+    = make_operation<ada_var_value_operation> (resolved);
+  return false;
 }
 
-/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
-   factor ('SMALL value) associated with the type.  */
+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 (value_type (v)))
+    error (_("cannot slice a packed array"));
+  return false;
+}
 
-struct value *
-ada_scaling_factor (struct type *type)
-{
-  const char *encoding = fixed_type_info (type);
-  struct type *scale_type = ada_scaling_type (type);
+}
 
-  long long num0, den0, num1, den1;
-  int n;
+
 
-  n = sscanf (encoding, "_%lld_%lld_%lld_%lld",
-	      &num0, &den0, &num1, &den1);
+/* Return non-zero iff TYPE represents a System.Address type.  */
 
-  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);
-  else
-    return value_binop (value_from_longest (scale_type, num0),
-			value_from_longest (scale_type, den0), BINOP_DIV);
+int
+ada_is_system_address_type (struct type *type)
+{
+  return (type->name () && strcmp (type->name (), "system__address") == 0);
 }
 
 
 
-                                /* Range types */
+				/* 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 +10760,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,11 +10781,8 @@ 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;
     }
 
@@ -11576,26 +10796,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);
+
+  lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
 
-  std::vector<struct block_symbol> syms;
-  int nsyms = ada_lookup_symbol_list_worker (lookup_name,
-					     get_selected_block (0),
-					     VAR_DOMAIN, &syms, 1);
+  std::vector<struct block_symbol> syms
+    = ada_lookup_symbol_list_worker (lookup_name,
+				     get_selected_block (0),
+				     VAR_DOMAIN, 1);
 
-  if (nsyms != 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 +10857,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)
+  if (raw_type->code () == TYPE_CODE_RANGE)
     base_type = TYPE_TARGET_TYPE (raw_type);
   else
     base_type = raw_type;
 
-  name = TYPE_NAME (raw_type);
+  name = raw_type->name ();
   subtype_info = strstr (name, "___XD");
   if (subtype_info == NULL)
     {
@@ -11657,66 +10879,60 @@ to_fixed_range_type (struct type *raw_ty
     }
   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);
       /* 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.  */
+	 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;
+      type->set_name (name);
       return type;
     }
 }
@@ -11730,7 +10946,7 @@ ada_is_range_type_name (const char *name
 }
 
 
-                                /* Modular types */
+				/* Modular types */
 
 /* True iff TYPE is an Ada modular type.  */
 
@@ -11739,9 +10955,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 +10965,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.kind () == PROP_CONST)
+    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 +11016,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",
@@ -12052,10 +11275,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;
+	return 1;
       if (SYMTAB_OBJFILE (sal.symtab) != NULL
-          && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
-        return 1;
+	  && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
+	return 1;
     }
 
   /* Check whether the function is a GNAT-generated entity.  */
@@ -12084,10 +11307,10 @@ ada_find_printable_frame (struct frame_i
   for (; fi != NULL; fi = get_prev_frame (fi))
     {
       if (!is_known_support_routine (fi))
-        {
-          select_frame (fi);
-          break;
-        }
+	{
+	  select_frame (fi);
+	  break;
+	}
     }
 
 }
@@ -12133,7 +11356,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...  */
 	}
@@ -12157,32 +11380,32 @@ ada_unhandled_exception_name_addr_from_r
 
 static CORE_ADDR
 ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
-                           struct breakpoint *b)
+			   struct breakpoint *b)
 {
   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 (__FILE__, __LINE__, _("unexpected catchpoint type"));
+	break;
     }
 
   return 0; /* Should never be reached.  */
@@ -12222,7 +11445,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 (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
+	       e_msg_len);
   e_msg.get ()[e_msg_len] = '\0';
 
   return e_msg;
@@ -12255,7 +11479,7 @@ ada_exception_message (void)
 
 static CORE_ADDR
 ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
-                         struct breakpoint *b)
+			 struct breakpoint *b)
 {
   CORE_ADDR result = 0;
 
@@ -12327,10 +11551,8 @@ struct ada_catchpoint : public breakpoin
 
 static void
 create_excep_cond_exprs (struct ada_catchpoint *c,
-                         enum ada_exception_catchpoint_kind ex)
+			 enum ada_exception_catchpoint_kind ex)
 {
-  struct bp_location *bl;
-
   /* Nothing to do if there's no specific exception to catch.  */
   if (c->excep_string.empty ())
     return;
@@ -12346,7 +11568,7 @@ create_excep_cond_exprs (struct ada_catc
 
   /* 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 : c->locations ())
     {
       struct ada_catchpoint_location *ada_loc
 	= (struct ada_catchpoint_location *) bl;
@@ -12472,7 +11694,7 @@ should_stop_exception (const struct bp_l
 static void
 check_status_exception (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
@@ -12584,40 +11806,40 @@ print_one_exception (struct breakpoint *
   switch (c->m_kind)
     {
       case ada_catch_exception:
-        if (!c->excep_string.empty ())
-          {
+	if (!c->excep_string.empty ())
+	  {
 	    std::string msg = string_printf (_("`%s' Ada exception"),
 					     c->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 (!c->excep_string.empty ())
+	  {
 	    uiout->field_fmt ("what",
 			      _("`%s' Ada exception handlers"),
 			      c->excep_string.c_str ());
-          }
-        else
+	  }
+	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 (__FILE__, __LINE__, _("unexpected catchpoint type"));
+	break;
     }
 }
 
@@ -12631,46 +11853,46 @@ print_mention_exception (struct breakpoi
   struct ui_out *uiout = current_uiout;
 
   uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
-                                                 : _("Catchpoint "));
+						 : _("Catchpoint "));
   uiout->field_signed ("bkptno", b->number);
   uiout->text (": ");
 
   switch (c->m_kind)
     {
       case ada_catch_exception:
-        if (!c->excep_string.empty ())
+	if (!c->excep_string.empty ())
 	  {
 	    std::string info = string_printf (_("`%s' Ada exception"),
 					      c->excep_string.c_str ());
-	    uiout->text (info.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 (!c->excep_string.empty ())
 	  {
 	    std::string info
 	      = string_printf (_("`%s' Ada exception handlers"),
 			       c->excep_string.c_str ());
-	    uiout->text (info.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 (__FILE__, __LINE__, _("unexpected catchpoint type"));
+	break;
     }
 }
 
@@ -12738,7 +11960,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 +11986,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,20 +12037,20 @@ ada_exception_sym_name (enum ada_excepti
   switch (ex)
     {
       case ada_catch_exception:
-        return (data->exception_info->catch_exception_sym);
-        break;
+	return (data->exception_info->catch_exception_sym);
+	break;
       case ada_catch_exception_unhandled:
-        return (data->exception_info->catch_exception_unhandled_sym);
-        break;
+	return (data->exception_info->catch_exception_unhandled_sym);
+	break;
       case ada_catch_assert:
-        return (data->exception_info->catch_assert_sym);
-        break;
+	return (data->exception_info->catch_assert_sym);
+	break;
       case ada_catch_handlers:
-        return (data->exception_info->catch_handlers_sym);
-        break;
+	return (data->exception_info->catch_handlers_sym);
+	break;
       default:
-        internal_error (__FILE__, __LINE__,
-                        _("unexpected catchpoint kind (%d)"), ex);
+	internal_error (__FILE__, __LINE__,
+			_("unexpected catchpoint kind (%d)"), ex);
     }
 }
 
@@ -12841,20 +12063,20 @@ ada_exception_breakpoint_ops (enum ada_e
   switch (ex)
     {
       case ada_catch_exception:
-        return (&catch_exception_breakpoint_ops);
-        break;
+	return (&catch_exception_breakpoint_ops);
+	break;
       case ada_catch_exception_unhandled:
-        return (&catch_exception_unhandled_breakpoint_ops);
-        break;
+	return (&catch_exception_unhandled_breakpoint_ops);
+	break;
       case ada_catch_assert:
-        return (&catch_assert_breakpoint_ops);
-        break;
+	return (&catch_assert_breakpoint_ops);
+	break;
       case ada_catch_handlers:
-        return (&catch_handlers_breakpoint_ops);
-        break;
+	return (&catch_handlers_breakpoint_ops);
+	break;
       default:
-        internal_error (__FILE__, __LINE__,
-                        _("unexpected catchpoint kind (%d)"), ex);
+	internal_error (__FILE__, __LINE__,
+			_("unexpected catchpoint kind (%d)"), ex);
     }
 }
 
@@ -12866,7 +12088,7 @@ 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;
@@ -12875,7 +12097,7 @@ ada_exception_catchpoint_cond_string (co
   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)");
     }
@@ -12991,7 +12213,7 @@ create_ada_exception_catchpoint (struct
   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);
+    set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
   install_breakpoint (0, std::move (c), 1);
 }
 
@@ -13008,7 +12230,7 @@ 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 = "";
@@ -13033,7 +12255,7 @@ 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 = "";
@@ -13080,7 +12302,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,7 +12323,7 @@ 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 = "";
@@ -13117,13 +12339,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 = SYMBOL_TYPE (sym)->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);
+	  && SYMBOL_CLASS (sym) != LOC_BLOCK
+	  && SYMBOL_CLASS (sym) != LOC_CONST
+	  && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
+	  && type_name != NULL && strcmp (type_name, "exception") == 0);
 }
 
 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
@@ -13314,6 +12536,7 @@ ada_add_global_exceptions (compiled_rege
 			     return name_matches_regex (decoded.c_str (), preg);
 			   },
 			   NULL,
+			   SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
 			   VARIABLES_DOMAIN);
 
   for (objfile *objfile : current_program_space->objfiles ())
@@ -13426,503 +12649,9 @@ info_exceptions_command (const char *reg
     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;
-}
-
-/* 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 +12669,47 @@ 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;
+
+  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,14 +12726,16 @@ 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 ();
+  gdb::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);
+	m_encoded_name
+	  = gdb::to_string (user_name.substr (1, user_name.size () - 2));
       else
-	m_encoded_name = user_name.substr (1, user_name.size () - 1);
+	m_encoded_name
+	  = gdb::to_string (user_name.substr (1, user_name.size () - 1));
       m_encoded_p = true;
       m_verbatim_p = true;
       m_wild_match_p = false;
@@ -13974,19 +12745,17 @@ 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 ("__") != gdb::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
-	    m_encoded_name = user_name;
+	  const char *folded = ada_fold_name (user_name);
+	  m_encoded_name = ada_encode_1 (folded, false);
+	  if (m_encoded_name.empty ())
+	    m_encoded_name = gdb::to_string (user_name);
 	}
       else
-	m_encoded_name = user_name;
+	m_encoded_name = gdb::to_string (user_name);
 
       /* Handle the 'package Standard' special case.  See description
 	 of m_standard_p.  */
@@ -14033,12 +12802,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 ();
+  gdb::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 +12817,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,101 +12839,482 @@ 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);
+    fprintf_filtered (stream, " => ");
+  }
+
+  /* Implement the "read_var_value" language_defn method for Ada.  */
+
+  struct value *read_var_value (struct symbol *var,
+				const struct block *var_block,
+				struct frame_info *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.  */
+  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);
-}
+    add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
+			    0, "integer"));
+    add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
+			    0, "long_integer"));
+    add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
+			    0, "short_integer"));
+    struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
+						  0, "character");
+    lai->set_string_char_type (char_type);
+    add (char_type);
+    add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
+			  "float", gdbarch_float_format (gdbarch)));
+    add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
+			  "long_float", gdbarch_double_format (gdbarch)));
+    add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
+			    0, "long_long_integer"));
+    add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
+			  "long_long_float",
+			  gdbarch_long_double_format (gdbarch)));
+    add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
+			    0, "natural"));
+    add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
+			    0, "positive"));
+    add (builtin->builtin_void);
+
+    struct type *system_addr_ptr
+      = lookup_pointer_type (arch_type (gdbarch, 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 = TYPE_LENGTH (system_addr_ptr);
+    add (arch_integer_type (gdbarch, 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_enum 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,
+				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:
+
+	   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;
+      }
+
+    return false;
+  }
+
+  /* See language.h.  */
+
+  char *demangle_symbol (const char *mangled, int options) const override
+  {
+    return ada_la_decode (mangled, options);
+  }
+
+  /* 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
+  {
+    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,
+			     SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
+			     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 ();
+
+	    /* 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,
+				      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 = 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,
+					  sym->language (),
+					  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,
+					  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 (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)));
+  }
+
+  /* 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_enum domain) const override
+  {
+    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 (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.  */
+
+  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;
 
 static void
 initialize_ada_catchpoint_ops (void)
@@ -14230,24 +13380,25 @@ ada_free_objfile_observer (struct objfil
   ada_clear_symbol_cache ();
 }
 
+void _initialize_ada_language ();
 void
-_initialize_ada_language (void)
+_initialize_ada_language ()
 {
   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);
-
-  add_prefix_cmd ("ada", no_class, show_ada_command,
-                  _("Generic command for showing Ada-specific settings."),
-                  &show_ada_list, "show ada ", 0, &showlist);
+  add_basic_prefix_cmd ("ada", no_class,
+			_("Prefix command for changing Ada-specific settings."),
+			&set_ada_list, 0, &setlist);
+
+  add_show_prefix_cmd ("ada", no_class,
+		       _("Generic command for showing Ada-specific settings."),
+		       &show_ada_list, 0, &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 +13406,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, _("\
@@ -14289,7 +13440,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,7 +13449,7 @@ 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);
 
@@ -14318,15 +13469,15 @@ 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_basic_prefix_cmd ("ada", class_maintenance,
+			_("Set Ada maintenance-related variables."),
+			&maint_set_ada_cmdlist,
+			0/*allow-unknown*/, &maintenance_set_cmdlist);
+
+  add_show_prefix_cmd ("ada", class_maintenance,
+		       _("Show Ada maintenance-related variables."),
+		       &maint_show_ada_cmdlist,
+		       0/*allow-unknown*/, &maintenance_show_cmdlist);
 
   add_setshow_boolean_cmd
     ("ignore-descriptive-types", class_maintenance,
@@ -14338,11 +13489,12 @@ 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::free_objfile.attach (ada_free_objfile_observer, "ada-lang");
+  gdb::observers::inferior_exit.attach (ada_inferior_exit, "ada-lang");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lang.h ./gdb/ada-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lang.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-lang.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Ada language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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
   };
@@ -152,27 +152,27 @@ struct ada_task_info
 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 +183,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);
 
@@ -216,11 +216,15 @@ 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.  */
+extern std::string ada_decode (const char *name, bool wrap = 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_enum);
 
 extern struct block_symbol ada_lookup_symbol (const char *,
 					      const struct block *,
@@ -234,6 +238,11 @@ extern struct bound_minimal_symbol ada_l
 
 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 +251,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 +264,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 +285,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 +306,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 +316,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 *);
 
 extern const char *ada_enum_name (const char *);
 
@@ -371,9 +373,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 +384,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lex.c ./gdb/ada-lex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lex.c	2020-03-07 02:11:12.000000000 +0000
+++ ./gdb/ada-lex.c	2021-12-16 02:00:18.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,19 +343,22 @@ 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;
@@ -398,7 +399,7 @@ static yyconst flex_int16_t yy_accept[20
        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,
@@ -430,7 +431,7 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[68] =
+static yyconst YY_CHAR yy_meta[68] =
     {   0,
         1,    2,    3,    4,    5,    6,    7,    8,    5,    9,
         5,    5,    5,    5,    5,    5,   10,    5,   11,   11,
@@ -441,7 +442,7 @@ static yyconst flex_int32_t yy_meta[68]
        16,   16,   16,   16,   16,   16,   16
     } ;
 
-static yyconst flex_int16_t yy_base[229] =
+static yyconst flex_uint16_t yy_base[229] =
     {   0,
         0,    0,  649,  638,  646, 1252, 1252, 1252,   62,    0,
      1252,  109, 1252, 1252,  623, 1252,  619,  175,  606,  174,
@@ -499,7 +500,7 @@ static yyconst flex_int16_t yy_def[229]
       206,  206,  206,  206,  206,  206,  206,  206
     } ;
 
-static yyconst flex_int16_t yy_nxt[1320] =
+static yyconst flex_uint16_t yy_nxt[1320] =
     {   0,
         6,    7,    8,    7,    6,    9,    6,   10,   11,   12,
        13,   14,   15,   11,   16,   17,   18,   19,   20,   21,
@@ -813,7 +814,7 @@ int yy_flex_debug = 0;
 char *yytext;
 #line 1 "ada-lex.l"
 /* FLEX lexer for Ada expressions, for GDB.
-   Copyright (C) 1994-2020 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -841,7 +842,9 @@ char *yytext;
 
 /* 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
 
@@ -884,7 +887,7 @@ static int find_dot_all (const char *);
 static int paren_depth;
 
 
-#line 888 "<stdout>"
+#line 891 "<stdout>"
 
 #define INITIAL 0
 #define BEFORE_QUAL_QUOTE 1
@@ -918,19 +921,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 +947,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 +973,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 +986,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 +997,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 +1010,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 +1065,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 +1075,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 +1105,13 @@ YY_DECL
 		yy_load_buffer_state( );
 		}
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	{
+#line 98 "ada-lex.l"
+
+
+#line 1113 "<stdout>"
+
+	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
 		yy_cp = (yy_c_buf_p);
 
@@ -1114,7 +1127,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;
@@ -1126,7 +1139,7 @@ yy_match:
 				if ( yy_current_state >= 207 )
 					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 );
@@ -1156,17 +1169,17 @@ do_action:	/* This label is used only to
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 98 "ada-lex.l"
+#line 100 "ada-lex.l"
 { }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 100 "ada-lex.l"
+#line 102 "ada-lex.l"
 { yyterminate(); }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 102 "ada-lex.l"
+#line 104 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, NULL, numbuf,
@@ -1175,7 +1188,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 108 "ada-lex.l"
+#line 110 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, NULL, numbuf, NULL);
@@ -1183,7 +1196,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 113 "ada-lex.l"
+#line 115 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, numbuf,
@@ -1193,7 +1206,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 120 "ada-lex.l"
+#line 122 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processInt (pstate, numbuf, strchr (numbuf, '#') + 1,
@@ -1202,7 +1215,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 126 "ada-lex.l"
+#line 128 "ada-lex.l"
 {
 		  canonicalizeNumeral (numbuf, yytext+2);
 		  return processInt (pstate, "16#", numbuf, NULL);
@@ -1210,7 +1223,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 132 "ada-lex.l"
+#line 134 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processReal (pstate, numbuf);
@@ -1218,7 +1231,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 137 "ada-lex.l"
+#line 139 "ada-lex.l"
 {
 		   canonicalizeNumeral (numbuf, yytext);
 		   return processReal (pstate, numbuf);
@@ -1226,21 +1239,21 @@ YY_RULE_SETUP
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 142 "ada-lex.l"
+#line 144 "ada-lex.l"
 {
                    error (_("Based real literals not implemented yet."));
 		}
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 146 "ada-lex.l"
+#line 148 "ada-lex.l"
 {
                    error (_("Based real literals not implemented yet."));
 		}
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 150 "ada-lex.l"
+#line 152 "ada-lex.l"
 {
 		   yylval.typed_val.type = type_char (pstate);
 		   yylval.typed_val.val = yytext[1];
@@ -1249,7 +1262,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 156 "ada-lex.l"
+#line 158 "ada-lex.l"
 {
                    int v;
                    yylval.typed_val.type = type_char (pstate);
@@ -1260,7 +1273,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 164 "ada-lex.l"
+#line 166 "ada-lex.l"
 {
 	           yylval.sval = processString (yytext+1, yyleng-2);
 		   return STRING;
@@ -1268,14 +1281,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 169 "ada-lex.l"
+#line 171 "ada-lex.l"
 {
                    error (_("ill-formed or non-terminated string literal"));
 		}
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 174 "ada-lex.l"
+#line 176 "ada-lex.l"
 {
                   rewind_to_char ('i');
 		  return 0;
@@ -1283,7 +1296,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 179 "ada-lex.l"
+#line 181 "ada-lex.l"
 {
                   rewind_to_char ('t');
 		  return 0;
@@ -1292,7 +1305,7 @@ YY_RULE_SETUP
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
-#line 184 "ada-lex.l"
+#line 186 "ada-lex.l"
 {
                   /* This keyword signals the end of the expression and
                      will be processed separately.  */
@@ -1303,67 +1316,67 @@ YY_RULE_SETUP
 /* ADA KEYWORDS */
 case 19:
 YY_RULE_SETUP
-#line 193 "ada-lex.l"
+#line 195 "ada-lex.l"
 { return ABS; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 194 "ada-lex.l"
+#line 196 "ada-lex.l"
 { return _AND_; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 195 "ada-lex.l"
+#line 197 "ada-lex.l"
 { return ELSE; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 196 "ada-lex.l"
+#line 198 "ada-lex.l"
 { return IN; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 197 "ada-lex.l"
+#line 199 "ada-lex.l"
 { return MOD; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 198 "ada-lex.l"
+#line 200 "ada-lex.l"
 { return NEW; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 199 "ada-lex.l"
+#line 201 "ada-lex.l"
 { return NOT; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 200 "ada-lex.l"
+#line 202 "ada-lex.l"
 { return NULL_PTR; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 201 "ada-lex.l"
+#line 203 "ada-lex.l"
 { return OR; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 202 "ada-lex.l"
+#line 204 "ada-lex.l"
 { return OTHERS; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 203 "ada-lex.l"
+#line 205 "ada-lex.l"
 { return REM; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 204 "ada-lex.l"
+#line 206 "ada-lex.l"
 { return THEN; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 205 "ada-lex.l"
+#line 207 "ada-lex.l"
 { return XOR; }
 	YY_BREAK
 /* BOOLEAN "KEYWORDS" */
@@ -1373,70 +1386,70 @@ YY_RULE_SETUP
     making them keywords (when bare). */
 case 32:
 YY_RULE_SETUP
-#line 214 "ada-lex.l"
+#line 216 "ada-lex.l"
 { return TRUEKEYWORD; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 215 "ada-lex.l"
+#line 217 "ada-lex.l"
 { return FALSEKEYWORD; }
 	YY_BREAK
 /* ATTRIBUTES */
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
-#line 219 "ada-lex.l"
+#line 221 "ada-lex.l"
 { BEGIN INITIAL; return processAttribute (yytext+1); }
 	YY_BREAK
 /* PUNCTUATION */
 case 35:
 YY_RULE_SETUP
-#line 223 "ada-lex.l"
+#line 225 "ada-lex.l"
 { return ARROW; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 224 "ada-lex.l"
+#line 226 "ada-lex.l"
 { return DOTDOT; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 225 "ada-lex.l"
+#line 227 "ada-lex.l"
 { return STARSTAR; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 226 "ada-lex.l"
+#line 228 "ada-lex.l"
 { return ASSIGN; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 227 "ada-lex.l"
+#line 229 "ada-lex.l"
 { return NOTEQUAL; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 228 "ada-lex.l"
+#line 230 "ada-lex.l"
 { return LEQ; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 229 "ada-lex.l"
+#line 231 "ada-lex.l"
 { return GEQ; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 231 "ada-lex.l"
+#line 233 "ada-lex.l"
 { BEGIN INITIAL; return '\''; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 233 "ada-lex.l"
+#line 235 "ada-lex.l"
 { return yytext[0]; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 235 "ada-lex.l"
+#line 237 "ada-lex.l"
 { if (paren_depth == 0 && pstate->comma_terminates)
 		    {
 		      rewind_to_char (',');
@@ -1448,12 +1461,12 @@ YY_RULE_SETUP
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 244 "ada-lex.l"
+#line 246 "ada-lex.l"
 { paren_depth += 1; return '('; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 245 "ada-lex.l"
+#line 247 "ada-lex.l"
 { if (paren_depth == 0)
 		    {
 		      rewind_to_char (')');
@@ -1469,13 +1482,13 @@ YY_RULE_SETUP
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
-#line 257 "ada-lex.l"
+#line 259 "ada-lex.l"
 { return DOT_ALL; }
 	YY_BREAK
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
-#line 259 "ada-lex.l"
+#line 261 "ada-lex.l"
 {
 	 	  yylval.sval = processId (yytext+1, yyleng-1);
 	          return DOT_ID;
@@ -1484,7 +1497,7 @@ YY_RULE_SETUP
 case 49:
 /* rule 49 can match eol */
 YY_RULE_SETUP
-#line 264 "ada-lex.l"
+#line 266 "ada-lex.l"
 {
                   int all_posn = find_dot_all (yytext);
 
@@ -1503,7 +1516,7 @@ YY_RULE_SETUP
 case 50:
 /* rule 50 can match eol */
 YY_RULE_SETUP
-#line 281 "ada-lex.l"
+#line 283 "ada-lex.l"
 {
                   yyless (yyleng - 2);
 		  yylval.sval = processId (yytext, yyleng);
@@ -1512,18 +1525,18 @@ YY_RULE_SETUP
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 287 "ada-lex.l"
+#line 289 "ada-lex.l"
 { return COLONCOLON; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 289 "ada-lex.l"
+#line 291 "ada-lex.l"
 { return yytext[0]; }
 	YY_BREAK
 /* REGISTERS AND GDB CONVENIENCE VARIABLES */
 case 53:
 YY_RULE_SETUP
-#line 293 "ada-lex.l"
+#line 295 "ada-lex.l"
 {
 		  yylval.sval.ptr = yytext;
 		  yylval.sval.length = yyleng;
@@ -1533,15 +1546,15 @@ YY_RULE_SETUP
 /* CATCH-ALL ERROR CASE */
 case 54:
 YY_RULE_SETUP
-#line 301 "ada-lex.l"
+#line 303 "ada-lex.l"
 { error (_("Invalid character '%s' in expression."), yytext); }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 302 "ada-lex.l"
+#line 304 "ada-lex.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1545 "<stdout>"
+#line 1558 "<stdout>"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(BEFORE_QUAL_QUOTE):
 	yyterminate();
@@ -1673,6 +1686,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 +1698,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 +1729,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 +1749,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 +1765,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 +1787,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 +1811,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 +1832,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)] : 1);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -1837,7 +1851,7 @@ static int yy_get_next_buffer (void)
 			if ( yy_current_state >= 207 )
 				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 +1864,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 = 1;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -1865,15 +1879,17 @@ static int yy_get_next_buffer (void)
 		if ( yy_current_state >= 207 )
 			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_is_jam = (yy_current_state == 206);
 
-	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 +1899,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 +1911,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 +1924,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 +1974,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 +2080,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 +2110,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 +2230,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 +2247,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 +2277,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 +2309,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 +2327,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 +2353,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 +2366,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 +2421,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 +2451,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 +2462,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 +2474,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 +2513,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 +2523,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 +2533,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 +2546,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 304 "ada-lex.l"
 
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lex.l ./gdb/ada-lex.l
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-lex.l	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-lex.l	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* FLEX lexer for Ada expressions, for GDB.
-   Copyright (C) 1994-2020 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -45,7 +45,9 @@ POSEXP  (e"+"?{NUM10})
 
 /* 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
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-operator.def ./gdb/ada-operator.def
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-operator.def	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-tasks.c ./gdb/ada-tasks.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-tasks.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-tasks.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2021 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"),
@@ -86,7 +86,7 @@ static const char *task_states[] = {
 };
 
 /* 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"),
@@ -159,6 +159,10 @@ 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.  */
@@ -203,9 +207,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;
@@ -324,7 +328,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 +380,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 +390,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);
     }
 }
@@ -430,11 +434,11 @@ read_fat_string_value (char *dest, struc
       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 = TYPE_TARGET_TYPE (bounds_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;
@@ -502,20 +506,20 @@ ada_get_tcb_types_info (void)
   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,
 					    NULL).symbol;
 
       if (atcb_sym == NULL || atcb_sym->type == NULL)
-        return _("Cannot find Ada_Task_Control_Block type");
+	return _("Cannot find Ada_Task_Control_Block type");
 
       type = atcb_sym->type;
     }
   else
     {
       /* Get a static representation of the type record
-         Ada_Task_Control_Block.  */
+	 Ada_Task_Control_Block.  */
       type = atcb_sym->type;
       type = ada_template_to_fixed_record_type_1 (type, NULL, 0, NULL, 0);
     }
@@ -547,7 +551,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 +568,18 @@ 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 = BMSYMBOL_VALUE_ADDRESS (first_id_sym);
+      /* This symbol always has type uint32_t.  */
+      struct type *u32type = builtin_type (target_gdbarch ())->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 +589,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;
 }
 
@@ -658,10 +675,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 +696,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 +714,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 +744,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 (value_type (entry_calls_value_element),
+			     "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 +768,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
@@ -810,11 +829,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;
@@ -852,7 +871,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;
@@ -889,18 +908,19 @@ ada_tasks_inferior_data_sniffer (struct
 	  struct type *eltype = NULL;
 	  struct type *idxtype = NULL;
 
-	  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+	  if (type->code () == TYPE_CODE_ARRAY)
 	    eltype = check_typedef (TYPE_TARGET_TYPE (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.kind () != PROP_UNDEFINED
+	      && idxtype->bounds ()->high.kind () != PROP_UNDEFINED)
 	    {
 	      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;
 	    }
 	}
@@ -932,7 +952,7 @@ ada_tasks_inferior_data_sniffer (struct
 	  /* Validate.  */
 	  struct type *type = check_typedef (SYMBOL_TYPE (sym));
 
-	  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+	  if (type->code () == TYPE_CODE_PTR)
 	    {
 	      data->known_tasks_element = type;
 	      return;
@@ -997,7 +1017,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 +1126,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 +1146,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)
+				 ? find_thread_ptid (inf, task_info->ptid)
 				 : nullptr);
 
 	  if (thread != NULL)
@@ -1143,9 +1163,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);
@@ -1166,7 +1186,7 @@ print_ada_task_info (struct ui_out *uiou
 
       /* 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,7 +1219,7 @@ 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.  */
@@ -1229,7 +1249,7 @@ info_task (struct ui_out *uiout, const c
 
       printf_filtered (_("Parent: %d"), parent_taskno);
       if (parent->name[0] != '\0')
-        printf_filtered (" (%s)", parent->name);
+	printf_filtered (" (%s)", parent->name);
       printf_filtered ("\n");
     }
   else
@@ -1244,25 +1264,25 @@ 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);
+	printf_filtered (_("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);
+	printf_filtered (_("State: Waiting on task %d's entry"),
+			 target_taskno);
       }
     else
       printf_filtered (_("State: %s"), _(long_task_states[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')
+	  printf_filtered (" (%s)", target_task_info->name);
       }
 
     printf_filtered ("\n");
@@ -1319,7 +1339,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 +1363,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 = find_thread_ptid (inf, 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 ());
   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);
 }
 
@@ -1432,10 +1452,8 @@ ada_tasks_new_objfile_observer (struct o
     {
       /* All objfiles are being cleared, so we should clear all
 	 our caches for all program spaces.  */
-      struct program_space *pspace;
-
-      for (pspace = program_spaces; pspace != NULL; pspace = pspace->next)
-        ada_tasks_invalidate_pspace_data (pspace);
+      for (struct program_space *pspace : program_spaces)
+	ada_tasks_invalidate_pspace_data (pspace);
     }
   else
     {
@@ -1455,18 +1473,21 @@ ada_tasks_new_objfile_observer (struct o
       ada_tasks_invalidate_inferior_data (inf);
 }
 
+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");
 
   /* Some new commands provided by this module.  */
   add_info ("tasks", info_tasks_command,
-            _("Provide information about all known Ada tasks."));
+	    _("Provide information about all known Ada tasks."));
   add_cmd ("task", class_run, task_command,
-           _("Use this command to switch between Ada tasks.\n\
+	   _("Use this command to switch between Ada tasks.\n\
 Without argument, this command simply prints the current task ID."),
-           &cmdlist);
+	   &cmdlist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-typeprint.c ./gdb/ada-typeprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-typeprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-typeprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for printing Ada types for GDB, the GNU debugger.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -101,7 +101,7 @@ 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);
@@ -146,7 +146,7 @@ print_range (struct type *type, struct u
 	type = TYPE_TARGET_TYPE (type);
     }
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
     case TYPE_CODE_ENUM:
@@ -180,8 +180,8 @@ print_range (struct type *type, struct u
       break;
     default:
       fprintf_filtered (stream, "%.*s",
-			ada_name_prefix_len (TYPE_NAME (type)),
-			TYPE_NAME (type));
+			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] == '_')
@@ -267,10 +267,10 @@ print_range_type (struct type *raw_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)
+  if (raw_type->code () == TYPE_CODE_RANGE)
     base_type = TYPE_TARGET_TYPE (raw_type);
   else
     base_type = raw_type;
@@ -312,7 +312,7 @@ 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;
 
@@ -326,7 +326,8 @@ print_enum_type (struct type *type, stru
       if (i)
 	fprintf_filtered (stream, ", ");
       wrap_here ("    ");
-      fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
+      fputs_styled (ada_enum_name (TYPE_FIELD_NAME (type, i)),
+		    variable_name_style.style (), stream);
       if (lastval != TYPE_FIELD_ENUMVAL (type, i))
 	{
 	  fprintf_filtered (stream, " => %s",
@@ -338,31 +339,6 @@ print_enum_type (struct type *type, stru
   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))
-	{
-	  str = target_float_to_string (value_contents (small),
-					value_type (small), "%g");
-	  fprintf_filtered (stream, " <'small = %s>", str.c_str());
-	}
-    }
-}
-
 /* Print simple (constrained) array type TYPE on STREAM.  LEVEL is the
    recursion (indentation) level, in case the element type itself has
    nested structure, and SHOW is the number of levels of internal
@@ -401,12 +377,12 @@ 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;
+	  for (arr_type = type; arr_type->code () == TYPE_CODE_ARRAY;
 	       arr_type = TYPE_TARGET_TYPE (arr_type))
 	    {
 	      if (arr_type != type)
 		fprintf_filtered (stream, ", ");
-	      print_range (TYPE_INDEX_TYPE (arr_type), stream,
+	      print_range (arr_type->index_type (), stream,
 			   0 /* bounds_prefered_p */);
 	      if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
 		bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
@@ -416,14 +392,14 @@ print_array_type (struct type *type, str
 	{
 	  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))
 	    {
 	      if (k > 0)
 		fprintf_filtered (stream, ", ");
-	      print_range_type (TYPE_FIELD_TYPE (range_desc_type, k),
+	      print_range_type (range_desc_type->field (k).type (),
 				stream, 0 /* bounds_prefered_p */);
 	      if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
 		bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
@@ -455,7 +431,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,
@@ -548,13 +524,13 @@ print_variant_clauses (struct type *type
   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)
+      if (var_type == NULL || var_type->code () != TYPE_CODE_UNION)
 	return;
     }
 
@@ -562,12 +538,12 @@ print_variant_clauses (struct type *type
   if (par_type != NULL)
     var_type = par_type;
 
-  for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
+  for (i = 0; i < var_type->num_fields (); 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),
+	  if (print_record_field_types (var_type->field (i).type (),
 					outer_type, stream, show, level + 4,
 					flags)
 	      <= 0)
@@ -593,7 +569,7 @@ 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 = "?";
 
@@ -622,7 +598,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 +608,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))
 	{
@@ -643,7 +619,7 @@ print_selected_record_field_types (struc
 	{
 	  flds += 1;
 	  fprintf_filtered (stream, "\n%*s", level + 4, "");
-	  ada_print_type (TYPE_FIELD_TYPE (type, i),
+	  ada_print_type (type->field (i).type (),
 			  TYPE_FIELD_NAME (type, i),
 			  stream, show - 1, level + 4, flags);
 	  fprintf_filtered (stream, ";");
@@ -653,6 +629,120 @@ print_selected_record_field_types (struc
   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)
+{
+  fprintf_filtered (stream, "\n%*swhen ", level, "");
+  if (variant.is_default ())
+    fprintf_filtered (stream, "others");
+  else
+    {
+      bool first = true;
+      for (const discriminant_range &range : variant.discriminants)
+	{
+	  if (!first)
+	    fprintf_filtered (stream, " | ");
+	  first = false;
+
+	  ada_print_scalar (discr_type, range.low, stream);
+	  if (range.low != range.high)
+	    ada_print_scalar (discr_type, range.high, stream);
+	}
+    }
+
+  fprintf_filtered (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_NAME (type, part.discriminant_index);
+      discr_type = type->field (part.discriminant_index).type ();
+    }
+
+  fprintf_filtered (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)
+	fprintf_filtered (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;
+	}
+    }
+
+  fprintf_filtered (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 +751,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);
 }
    
@@ -733,7 +838,7 @@ print_unchecked_union_type (struct type
 {
   if (show < 0)
     fprintf_filtered (stream, "record (?) is ... end record");
-  else if (TYPE_NFIELDS (type) == 0)
+  else if (type->num_fields () == 0)
     fprintf_filtered (stream, "record (?) is null; end record");
   else
     {
@@ -741,11 +846,11 @@ print_unchecked_union_type (struct type
 
       fprintf_filtered (stream, "record (?) is\n%*scase ? is", level + 4, "");
 
-      for (i = 0; i < TYPE_NFIELDS (type); i += 1)
+      for (i = 0; i < type->num_fields (); i += 1)
 	{
 	  fprintf_filtered (stream, "\n%*swhen ? =>\n%*s", level + 8, "",
 			    level + 12, "");
-	  ada_print_type (TYPE_FIELD_TYPE (type, i),
+	  ada_print_type (type->field (i).type (),
 			  TYPE_FIELD_NAME (type, i),
 			  stream, show - 1, level + 12, flags);
 	  fprintf_filtered (stream, ";");
@@ -765,10 +870,10 @@ 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)
+      && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_VOID)
     fprintf_filtered (stream, "procedure");
   else
     fprintf_filtered (stream, "function");
@@ -790,7 +895,7 @@ print_func_type (struct type *type, stru
 	      wrap_here ("    ");
 	    }
 	  fprintf_filtered (stream, "a%d: ", i + 1);
-	  ada_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0,
+	  ada_print_type (type->field (i).type (), "", stream, -1, 0,
 			  flags);
 	}
       fprintf_filtered (stream, ")");
@@ -798,7 +903,7 @@ print_func_type (struct type *type, stru
 
   if (TYPE_TARGET_TYPE (type) == NULL)
     fprintf_filtered (stream, " return <unknown return type>");
-  else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
+  else if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
     {
       fprintf_filtered (stream, " return ");
       ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
@@ -825,7 +930,20 @@ ada_print_type (struct type *type0, cons
 		const struct type_print_options *flags)
 {
   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)
@@ -837,10 +955,7 @@ ada_print_type (struct type *type0, cons
       return;
     }
 
-  if (show > 0)
-    type = ada_check_typedef (type);
-
-  if (is_var_decl && TYPE_CODE (type) != TYPE_CODE_FUNC)
+  if (is_var_decl && type->code () != TYPE_CODE_FUNC)
     fprintf_filtered (stream, "%.*s: ",
 		      ada_name_prefix_len (varstring), varstring);
 
@@ -854,10 +969,10 @@ ada_print_type (struct type *type0, cons
   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, "<");
@@ -866,7 +981,11 @@ ada_print_type (struct type *type0, cons
 	break;
       case TYPE_CODE_PTR:
       case TYPE_CODE_TYPEDEF:
-	fprintf_filtered (stream, "access ");
+	/* An __XVL field is not truly a pointer, so don't print
+	   "access" in this case.  */
+	if (type->code () != TYPE_CODE_PTR
+	    || strstr (varstring, "___XVL") == nullptr)
+	  fprintf_filtered (stream, "access ");
 	ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
 			flags);
 	break;
@@ -882,26 +1001,27 @@ ada_print_type (struct type *type0, cons
 	fprintf_filtered (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 (type)));
+	  else
+	    {
+	      fprintf_filtered (stream, "range ");
+	      print_range_type (type, stream, 1 /* bounds_prefered_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))
+	  {
+	    fprintf_filtered (stream, "<");
+	    print_type_fixed_point (type, stream);
+	    fprintf_filtered (stream, ">");
+	  }
 	else if (ada_is_modular_type (type))
 	  fprintf_filtered (stream, "mod %s", 
 			    int_string (ada_modulus (type), 10, 0, 0, 1));
@@ -944,7 +1064,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-valprint.c ./gdb/ada-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-valprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-valprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing Ada values for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,22 +30,20 @@
 #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;
+  if (type != NULL && type->code () == TYPE_CODE_RANGE
+      && type->bounds ()->low.const_val () >= 0)
+    type->set_is_unsigned (true);
 }
 
 /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
@@ -73,20 +71,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.  */
+	 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);
     }
 
   /* 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,8 +92,9 @@ 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 = TYPE_FIELD_ENUMVAL (index_type, low_bound);
       break;
     case TYPE_CODE_UNDEF:
       index_type = NULL;
@@ -112,17 +111,15 @@ print_optional_low_bound (struct ui_file
 }
 
 /*  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;
@@ -134,51 +131,28 @@ val_print_packed_array_elements (struct
   LONGEST low = 0;
 
   elttype = TYPE_TARGET_TYPE (type);
-  index_type = TYPE_INDEX_TYPE (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 = TYPE_TARGET_TYPE (index_type);
+
   i = 0;
   annotate_array_section_begin (i, elttype);
 
@@ -199,6 +173,11 @@ val_print_packed_array_elements (struct
 	      fprintf_filtered (stream, ", ");
 	    }
 	}
+      else if (options->prettyformat_arrays)
+	{
+	  fprintf_filtered (stream, "\n");
+	  print_spaces_filtered (2 + 2 * recurse, stream);
+	}
       wrap_here (n_spaces (2 + 2 * recurse));
       maybe_print_array_index (index_type, i + low, stream, options);
 
@@ -230,9 +209,7 @@ 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);
+	  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);
@@ -262,9 +239,8 @@ val_print_packed_array_elements (struct
 		  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 ();
 	    }
 	}
@@ -279,12 +255,6 @@ val_print_packed_array_elements (struct
   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
    string whose delimiter is QUOTER.  TYPE_LEN is the length in bytes
    of the character.  */
@@ -321,7 +291,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
@@ -404,11 +374,11 @@ 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);
+      len = type->num_fields ();
       for (i = 0; i < len; i++)
 	{
 	  if (TYPE_FIELD_ENUMVAL (type, i) == val)
@@ -418,7 +388,8 @@ ada_print_scalar (struct type *type, LON
 	}
       if (i < len)
 	{
-	  fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
+	  fputs_styled (ada_enum_name (TYPE_FIELD_NAME (type, i)),
+			variable_name_style.style (), stream);
 	}
       else
 	{
@@ -427,7 +398,7 @@ ada_print_scalar (struct type *type, LON
       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:
@@ -491,7 +462,7 @@ printstr (struct ui_file *stream, struct
   for (i = 0; i < length && things_printed < options->print_max; 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;
@@ -563,39 +534,33 @@ ada_printstr (struct ui_file *stream, st
 }
 
 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 (value);
+  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);
-}
-
-/* Print out fields of value at VALADDR + OFFSET having structure type TYPE.
-
-   TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same
-   meanings as in ada_print_value and ada_val_print.
-
-   OUTER_TYPE and OUTER_OFFSET give type and address of enclosing
-   record (used to get discriminant values when printing variant
-   parts).
+
+  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.
+
+   STREAM, RECURSE, and OPTIONS have the same meanings as in
+   ada_print_value and ada_value_print.
+
+   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 +569,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 (value);
+  len = type->num_fields ();
 
   for (i = 0; i < len; i += 1)
     {
@@ -623,22 +587,19 @@ 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;
 	}
 
@@ -656,7 +617,7 @@ print_field_values (struct type *type, c
 	  wrap_here (n_spaces (2 + 2 * recurse));
 	}
 
-      annotate_field_begin (TYPE_FIELD_TYPE (type, i));
+      annotate_field_begin (type->field (i).type ());
       fprintf_filtered (stream, "%.*s",
 			ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
 			TYPE_FIELD_NAME (type, i));
@@ -680,18 +641,15 @@ print_field_values (struct type *type, c
 	      int bit_size = TYPE_FIELD_BITSIZE (type, i);
 	      struct value_print_options opts;
 
-	      adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
+	      adjust_type_signedness (type->field (i).type ());
 	      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);
+	      common_val_print (v, stream, recurse + 1, &opts, language);
 	    }
 	}
       else
@@ -699,9 +657,9 @@ print_field_values (struct type *type, c
 	  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);
+
+	  struct value *v = value_field (value, i);
+	  common_val_print (v, stream, recurse + 1, &opts, language);
 	}
       annotate_field_end ();
     }
@@ -714,9 +672,8 @@ 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);
@@ -734,9 +691,6 @@ ada_val_print_string (struct type *type,
   eltlen = TYPE_LENGTH (elttype);
   len = TYPE_LENGTH (type) / eltlen;
 
-  if (options->prettyformat_arrays)
-    print_spaces_filtered (2 + 2 * recurse, stream);
-
   /* If requested, look for the first null char and only print
      elements up to it.  */
   if (options->stop_print_at_null)
@@ -757,64 +711,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
+      && TYPE_TARGET_TYPE (value_type (val))->code () == TYPE_CODE_INT
+      && TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))) == 0)
     {
-      gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF);
-      fprintf_filtered (stream, "0x0");
+      fputs_filtered ("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 (value_type (val));
   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);
+	fprintf_filtered (stream, " (%s)", name.get ());
     }
 }
 
@@ -822,55 +743,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 (value_type (val));
+  const gdb_byte *valaddr = value_contents_for_printing (val);
+
+  if (type->code () == TYPE_CODE_RANGE
+      && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM
+	  || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_BOOL
+	  || TYPE_TARGET_TYPE (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));
+      val = value_cast (target_type, val);
+      common_val_print (val, stream, recurse + 1, options,
+			language_def (language_ada));
       return;
     }
   else
@@ -883,8 +774,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,10 +784,9 @@ 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, "(");
 	  type_print (type, "", stream, -1);
@@ -906,14 +795,13 @@ ada_val_print_num (struct type *type, co
 	}
       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);
+	      c = unpack_long (type, valaddr);
 	      ada_printchar (c, type, stream);
 	    }
 	}
@@ -925,10 +813,7 @@ 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;
@@ -937,12 +822,15 @@ ada_val_print_enum (struct type *type, c
 
   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);
+  struct type *type = ada_check_typedef (value_type (value));
+  const gdb_byte *valaddr = value_contents_for_printing (value);
+  int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
+
+  len = type->num_fields ();
   val = unpack_long (type, valaddr + offset_aligned);
   for (i = 0; i < len; i++)
     {
@@ -956,45 +844,26 @@ ada_val_print_enum (struct type *type, c
       const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
 
       if (name[0] == '\'')
-	fprintf_filtered (stream, "%ld %s", (long) val, name);
+	fprintf_filtered (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))
+  if (ada_is_bogus_array_descriptor (value_type (value)))
     {
       fprintf_filtered (stream, "(...?)");
       return;
@@ -1002,10 +871,8 @@ ada_val_print_struct_union
 
   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");
@@ -1015,36 +882,41 @@ ada_val_print_struct_union
   fprintf_filtered (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 (value_type (val));
+
   /* 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 = value_contents_for_printing (val);
+      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, "(");
   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 (value_entirely_optimized_out (val))
+    val_print_optimized_out (val, stream);
+  else if (TYPE_FIELD_BITSIZE (type, 0) > 0)
+    {
+      const gdb_byte *valaddr = value_contents_for_printing (val);
+      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);
+    value_print_array_elements (val, stream, recurse, options, 0);
   fprintf_filtered (stream, ")");
 }
 
@@ -1067,7 +939,7 @@ ada_val_print_ref (struct type *type, co
   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);
@@ -1107,109 +979,114 @@ ada_val_print_ref (struct type *type, co
   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));
+  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
+   ada_value_print).  */
 
 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)
+ada_value_print_1 (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 (value_type (val));
 
   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);
+	  fprintf_filtered (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 = value_type (val);
+  struct type *saved_type = type;
 
-  switch (TYPE_CODE (type))
+  const gdb_byte *valaddr = value_contents_for_printing (val);
+  CORE_ADDR address = value_address (val);
+  gdb::array_view<const gdb_byte> view
+    = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
+  type = ada_check_typedef (resolve_dynamic_type (type, view, address));
+  if (type != saved_type)
+    {
+      val = value_copy (val);
+      deprecated_set_value_type (val, 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.  */
+/* See ada-lang.h.  */
 
 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)
+ada_value_print_inner (struct value *val, struct ui_file *stream,
+		       int recurse,
+		       const struct value_print_options *options)
 {
   try
     {
-      ada_val_print_1 (type, embedded_offset, address,
-		       stream, recurse, val, options);
+      ada_value_print_1 (val, stream, recurse, options);
     }
   catch (const gdb_exception_error &except)
     {
@@ -1224,18 +1101,20 @@ ada_value_print (struct value *val0, str
 		 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 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 (type)->code () == TYPE_CODE_INT
+	   && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) == 0))
     {
       /* Hack:  don't print (char *) for char strings.  Their
-         type is indicated by the quoted string anyway.  */
+	 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_TARGET_TYPE (type)->code () != TYPE_CODE_INT
+	  || TYPE_TARGET_TYPE (type)->is_unsigned ())
 	{
 	  fprintf_filtered (stream, "(");
 	  type_print (type, "", stream, -1);
@@ -1247,8 +1126,8 @@ 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)
-        {
+      if (type->code () == TYPE_CODE_TYPEDEF)
+	{
 	  fprintf_filtered (stream, "(");
 	  type_print (type, "", stream, -1);
 	  fprintf_filtered (stream, ") ");
@@ -1264,7 +1143,5 @@ ada_value_print (struct value *val0, str
 
   opts = *options;
   opts.deref_ref = 1;
-  val_print (type,
-	     value_embedded_offset (val), address,
-	     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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-varobj.c ./gdb/ada-varobj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ada-varobj.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ada-varobj.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* varobj support for Ada.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 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_type (*value_ptr));
   else
     *type_ptr = ada_get_decoded_type (*type_ptr);
 }
@@ -105,7 +105,7 @@ ada_varobj_struct_elt (struct value *par
       type = value_type (value);
     }
   else
-    type = TYPE_FIELD_TYPE (parent_type, fieldno);
+    type = parent_type->field (fieldno).type ();
 
   if (child_value)
     *child_value = value;
@@ -132,11 +132,11 @@ 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)
+      while (parent_type->code () == TYPE_CODE_TYPEDEF)
 	parent_type = TYPE_TARGET_TYPE (parent_type);
       parent_type = ada_coerce_to_simple_array_type (parent_type);
       parent_type = lookup_pointer_type (parent_type);
@@ -178,7 +178,7 @@ 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);
@@ -206,9 +206,11 @@ 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)
+  if ((*type)->code () == TYPE_CODE_PTR
+      && (TYPE_TARGET_TYPE (*type)->code () == TYPE_CODE_STRUCT
+	  || TYPE_TARGET_TYPE (*type)->code () == TYPE_CODE_UNION)
+      && *value != nullptr
+      && value_as_address (*value) != 0
       && !ada_is_array_descriptor_type (TYPE_TARGET_TYPE (*type))
       && !ada_is_constrained_packed_array_type (TYPE_TARGET_TYPE (*type)))
     ada_varobj_ind (*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;
@@ -329,8 +331,12 @@ ada_varobj_get_ptr_number_of_children (s
 
   /* 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;
@@ -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)
+      while (index_type->code () == TYPE_CODE_RANGE)
 	index_type = TYPE_TARGET_TYPE (index_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,
@@ -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:
@@ -939,7 +945,7 @@ ada_value_is_changeable_p (const struct
   struct type *type = (var->value != nullptr
 		       ? value_type (var->value.get ()) : var->type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_REF)
+  if (type->code () == TYPE_CODE_REF)
     type = TYPE_TARGET_TYPE (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/addrmap.c ./gdb/addrmap.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/addrmap.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/addrmap.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* addrmap.c --- implementation of address map data structure.
 
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
+   Copyright (C) 2007-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -35,13 +35,13 @@ gdb_static_assert (sizeof (splay_tree_va
 struct addrmap_funcs
 {
   void (*set_empty) (struct addrmap *self,
-                     CORE_ADDR start, CORE_ADDR end_inclusive,
-                     void *obj);
+		     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);
+				   struct obstack *obstack);
   void (*relocate) (struct addrmap *self, CORE_ADDR offset);
-  int (*foreach) (struct addrmap *self, addrmap_foreach_fn fn, void *data);
+  int (*foreach) (struct addrmap *self, addrmap_foreach_fn fn);
 };
 
 
@@ -53,8 +53,8 @@ struct addrmap
 
 void
 addrmap_set_empty (struct addrmap *map,
-                   CORE_ADDR start, CORE_ADDR end_inclusive,
-                   void *obj)
+		   CORE_ADDR start, CORE_ADDR end_inclusive,
+		   void *obj)
 {
   map->funcs->set_empty (map, start, end_inclusive, obj);
 }
@@ -84,9 +84,9 @@ addrmap_relocate (struct addrmap *map, C
 
 
 int
-addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn, void *data)
+addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn)
 {
-  return map->funcs->foreach (map, fn, data);
+  return map->funcs->foreach (map, fn);
 }
 
 /* Fixed address maps.  */
@@ -119,12 +119,12 @@ struct addrmap_fixed
 
 static void
 addrmap_fixed_set_empty (struct addrmap *self,
-                   CORE_ADDR start, CORE_ADDR end_inclusive,
-                   void *obj)
+		   CORE_ADDR start, CORE_ADDR end_inclusive,
+		   void *obj)
 {
   internal_error (__FILE__, __LINE__,
-                  "addrmap_fixed_set_empty: "
-                  "fixed addrmaps can't be changed\n");
+		  "addrmap_fixed_set_empty: "
+		  "fixed addrmaps can't be changed\n");
 }
 
 
@@ -138,23 +138,23 @@ addrmap_fixed_find (struct addrmap *self
   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).  */
+	 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;
 
       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;
@@ -165,8 +165,8 @@ 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"));
+		  _("addrmap_create_fixed is not implemented yet "
+		    "for fixed addrmaps"));
 }
 
 
@@ -182,15 +182,14 @@ addrmap_fixed_relocate (struct addrmap *
 
 
 static int
-addrmap_fixed_foreach (struct addrmap *self, addrmap_foreach_fn fn,
-		       void *data)
+addrmap_fixed_foreach (struct addrmap *self, addrmap_foreach_fn fn)
 {
   struct addrmap_fixed *map = (struct addrmap_fixed *) self;
   size_t i;
 
   for (i = 0; i < map->num_transitions; i++)
     {
-      int res = fn (data, map->transitions[i].addr, map->transitions[i].value);
+      int res = fn (map->transitions[i].addr, map->transitions[i].value);
 
       if (res != 0)
 	return res;
@@ -311,8 +310,8 @@ addrmap_splay_tree_insert (struct addrma
 			   CORE_ADDR key, void *value)
 {
   splay_tree_insert (map->tree,
-                     allocate_key (map, key),
-                     (splay_tree_value) value);
+		     allocate_key (map, key),
+		     (splay_tree_value) value);
 }
 
 
@@ -329,15 +328,15 @@ force_transition (struct addrmap_mutable
     {
       n = addrmap_splay_tree_predecessor (self, addr);
       addrmap_splay_tree_insert (self, addr,
-                                 n ? addrmap_node_value (n) : NULL);
+				 n ? addrmap_node_value (n) : NULL);
     }
 }
 
 
 static void
 addrmap_mutable_set_empty (struct addrmap *self,
-                           CORE_ADDR start, CORE_ADDR end_inclusive,
-                           void *obj)
+			   CORE_ADDR start, CORE_ADDR end_inclusive,
+			   void *obj)
 {
   struct addrmap_mutable *map = (struct addrmap_mutable *) self;
   splay_tree_node n, next;
@@ -366,7 +365,7 @@ addrmap_mutable_set_empty (struct addrma
        n = addrmap_splay_tree_successor (map, 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
@@ -376,14 +375,14 @@ addrmap_mutable_set_empty (struct addrma
   prior_value = n ? addrmap_node_value (n) : NULL;
   for (n = addrmap_splay_tree_lookup (map, 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));
       if (addrmap_node_value (n) == prior_value)
-        addrmap_splay_tree_remove (map, addrmap_node_key (n));
+	addrmap_splay_tree_remove (map, addrmap_node_key (n));
       else
-        prior_value = addrmap_node_value (n);
+	prior_value = addrmap_node_value (n);
     }
 }
 
@@ -393,8 +392,8 @@ addrmap_mutable_find (struct addrmap *se
 {
   /* Not needed yet.  */
   internal_error (__FILE__, __LINE__,
-                  _("addrmap_find is not implemented yet "
-                    "for mutable addrmaps"));
+		  _("addrmap_find is not implemented yet "
+		    "for mutable addrmaps"));
 }
 
 
@@ -466,44 +465,29 @@ addrmap_mutable_relocate (struct addrmap
 {
   /* Not needed yet.  */
   internal_error (__FILE__, __LINE__,
-                  _("addrmap_relocate is not implemented yet "
-                    "for mutable addrmaps"));
+		  _("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)
+addrmap_mutable_foreach (struct addrmap *self, addrmap_foreach_fn fn)
 {
   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);
+			     &fn);
 }
 
 
@@ -584,11 +568,11 @@ addrmap_create_mutable (struct obstack *
   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);
+					     NULL, /* no delete key */
+					     NULL, /* no delete value */
+					     splay_obstack_alloc,
+					     splay_obstack_free,
+					     map);
 
   return (struct addrmap *) map;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/addrmap.h ./gdb/addrmap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/addrmap.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/addrmap.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* addrmap.h --- interface to address map data structure.
 
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
+   Copyright (C) 2007-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,8 @@
 #ifndef ADDRMAP_H
 #define ADDRMAP_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
@@ -76,8 +78,8 @@ struct addrmap *addrmap_create_mutable (
    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);
+			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);
@@ -85,7 +87,7 @@ void *addrmap_find (struct addrmap *map,
 /* 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);
+				      struct obstack *obstack);
 
 /* Relocate all the addresses in MAP by OFFSET.  (This can be applied
    to either mutable or immutable maps.)  */
@@ -93,13 +95,13 @@ void addrmap_relocate (struct addrmap *m
 
 /* 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);
+typedef gdb::function_view<int (CORE_ADDR start_addr, void *obj)>
+     addrmap_foreach_fn;
 
-/* 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);
+/* 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 addrmap_foreach (struct addrmap *map, addrmap_foreach_fn fn);
 
 #endif /* ADDRMAP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/agent.c ./gdb/agent.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/agent.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/agent.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2012-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2012-2021 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,
@@ -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;
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aix-thread.c ./gdb/aix-thread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/aix-thread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/aix-thread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low level interface for debugging AIX 4.3+ pthreads.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
    Written by Nick Duffek <nsd@redhat.com>.
 
    This file is part of GDB.
@@ -124,7 +124,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;
@@ -397,7 +397,7 @@ pdc_read_regs (pthdb_user_t user,
   
   if (debug_aix_thread)
     fprintf_unfiltered (gdb_stdlog, "pdc_read_regs tid=%d flags=%s\n",
-                        (int) tid, hex_string (flags));
+			(int) tid, hex_string (flags));
 
   /* General-purpose registers.  */
   if (flags & PTHDB_FLAG_GPRS)
@@ -433,13 +433,13 @@ pdc_read_regs (pthdb_user_t user,
 	  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));
 	}
     }  
   return 0;
@@ -463,7 +463,7 @@ pdc_write_regs (pthdb_user_t user,
 
   if (debug_aix_thread)
     fprintf_unfiltered (gdb_stdlog, "pdc_write_regs tid=%d flags=%s\n",
-                        (int) tid, hex_string (flags));
+			(int) tid, hex_string (flags));
 
   /* General-purpose registers.  */
   if (flags & PTHDB_FLAG_GPRS)
@@ -549,7 +549,7 @@ pdc_alloc (pthdb_user_t user, size_t len
 {
   if (debug_aix_thread)
     fprintf_unfiltered (gdb_stdlog,
-                        "pdc_alloc (user = %ld, len = %ld, bufp = 0x%lx)\n",
+			"pdc_alloc (user = %ld, len = %ld, bufp = 0x%lx)\n",
 			user, len, (long) bufp);
   *bufp = xmalloc (len);
   if (debug_aix_thread)
@@ -589,7 +589,7 @@ pdc_dealloc (pthdb_user_t user, void *bu
   if (debug_aix_thread)
     fprintf_unfiltered (gdb_stdlog, 
 			"pdc_free (user = %ld, buf = 0x%lx)\n", user,
-                        (long) buf);
+			(long) buf);
   xfree (buf);
   return PDC_SUCCESS;
 }
@@ -707,14 +707,14 @@ get_signaled_thread (void)
   tid_t ktid = 0;
 
   while (1)
-  {
-    if (getthrds (inferior_ptid.pid (), &thrinf, 
-          	  sizeof (thrinf), &ktid, 1) != 1)
-      break;
+    {
+      if (getthrds (inferior_ptid.pid (), &thrinf,
+		    sizeof (thrinf), &ktid, 1) != 1)
+	break;
 
-    if (thrinf.ti_cursig == SIGTRAP)
-      return thrinf.ti_tid;
-  }
+      if (thrinf.ti_cursig == SIGTRAP)
+	return thrinf.ti_tid;
+    }
 
   /* Didn't find any thread stopped on a SIGTRAP signal.  */
   return 0;
@@ -805,7 +805,11 @@ 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);
+	  process_stratum_target *proc_target
+	    = current_inferior ()->process_target ();
+	  thread = add_thread_with_info (proc_target,
+					 ptid_t (infpid, 0, pbuf[pi].pthid),
+					 priv);
 
 	  pi++;
 	}
@@ -837,7 +841,9 @@ sync_threadlists (void)
 	    }
 	  else
 	    {
-	      thread = add_thread (pptid);
+	      process_stratum_target *proc_target
+		= current_inferior ()->process_target ();
+	      thread = add_thread (proc_target, pptid);
 
 	      aix_thread_info *priv = new aix_thread_info;
 	      thread->priv.reset (priv);
@@ -896,7 +902,7 @@ pd_update (int set_infpid)
     {
       ptid = thread->ptid;
       if (set_infpid)
-	inferior_ptid = ptid;
+	switch_to_thread (thread);
     }
   return ptid;
 }
@@ -968,7 +974,7 @@ pd_enable (void)
     return;
 
   /* Prepare for thread debugging.  */
-  push_target (&aix_thread_ops);
+  current_inferior ()->push_target (&aix_thread_ops);
   pd_able = 1;
 
   /* If we're debugging a core file or an attached inferior, the
@@ -987,7 +993,7 @@ pd_disable (void)
   if (pd_active)
     pd_deactivate ();
   pd_able = 0;
-  unpush_target (&aix_thread_ops);
+  current_inferior ()->unpush_target (&aix_thread_ops);
 }
 
 /* new_objfile observer callback.
@@ -1009,7 +1015,7 @@ new_objfile (struct objfile *objfile)
 /* 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 ();
 }
@@ -1043,7 +1049,7 @@ aix_thread_target::resume (ptid_t ptid,
     }
   else
     {
-      thread = find_thread_ptid (ptid);
+      thread = find_thread_ptid (current_inferior (), ptid);
       if (!thread)
 	error (_("aix-thread resume: unknown pthread %ld"),
 	       ptid.lwp ());
@@ -1071,7 +1077,7 @@ 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)
 {
   {
     scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
@@ -1089,7 +1095,9 @@ aix_thread_target::wait (ptid_t ptid, st
   if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED
       && status->value.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)
@@ -1223,7 +1231,7 @@ fetch_regs_user_thread (struct regcache
   status = pthdb_pthread_context (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.  */
 
@@ -1284,7 +1292,7 @@ fetch_regs_kernel_thread (struct regcach
   /* 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)
 	{
@@ -1306,8 +1314,8 @@ fetch_regs_kernel_thread (struct regcach
 
   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));
@@ -1354,7 +1362,7 @@ aix_thread_target::fetch_registers (stru
     beneath ()->fetch_registers (regcache, regno);
   else
     {
-      thread = find_thread_ptid (regcache->ptid ());
+      thread = find_thread_ptid (current_inferior (), regcache->ptid ());
       aix_thread_info *priv = get_aix_thread_info (thread);
       tid = priv->tid;
 
@@ -1506,7 +1514,7 @@ store_regs_user_thread (const struct reg
   status = pthdb_pthread_context (pd_session, pdtid, &ctx);
   if (status != PTHDB_SUCCESS)
     error (_("aix-thread: store_registers: pthdb_pthread_context returned %s"),
-           pd_status2str (status));
+	   pd_status2str (status));
 
   /* Collect general-purpose register values from the regcache.  */
 
@@ -1565,7 +1573,7 @@ store_regs_user_thread (const struct reg
   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
@@ -1591,12 +1599,12 @@ store_regs_kernel_thread (const struct r
   if (debug_aix_thread)
     fprintf_unfiltered (gdb_stdlog, 
 			"store_regs_kernel_thread tid=%lx regno=%d\n",
-                        (long) tid, regno);
+			(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)
 	{
@@ -1618,8 +1626,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);
@@ -1692,7 +1700,7 @@ aix_thread_target::store_registers (stru
     beneath ()->store_registers (regcache, regno);
   else
     {
-      thread = find_thread_ptid (regcache->ptid ());
+      thread = find_thread_ptid (current_inferior (), regcache->ptid ());
       aix_thread_info *priv = get_aix_thread_info (thread);
       tid = priv->tid;
 
@@ -1740,7 +1748,9 @@ aix_thread_target::thread_alive (ptid_t
 
   /* 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
@@ -1824,15 +1834,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alloc.c ./gdb/alloc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alloc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alloc.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Shared allocation functions for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-bsd-nat.c ./gdb/alpha-bsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-bsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-bsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for Alpha BSD's.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-bsd-tdep.c ./gdb/alpha-bsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-bsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-bsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code Alpha BSD's.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-bsd-tdep.h ./gdb/alpha-bsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-bsd-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-bsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for Alpha BSD's.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-linux-nat.c ./gdb/alpha-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Low level Alpha GNU/Linux interface, for GDB when running native.
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-linux-tdep.c ./gdb/alpha-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target-dependent code for GNU/Linux on Alpha.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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)
@@ -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);  */
 
@@ -356,7 +356,7 @@ alpha_linux_init_abi (struct gdbarch_inf
 {
   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);
@@ -378,7 +378,7 @@ alpha_linux_init_abi (struct gdbarch_inf
 
   /* 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 +389,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-mdebug-tdep.c ./gdb/alpha-mdebug-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-mdebug-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-mdebug-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target-dependent mdebug code for the ALPHA architecture.
-   Copyright (C) 1993-2020 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,10 +34,10 @@
 /* *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,7 +72,7 @@
    |            |  called procedure.		|
    v            |  				|
    -------------|-------------------------------|<-- sp
-                |				|
+		|				|
 */
 /* *INDENT-ON* */
 
@@ -117,7 +117,7 @@ find_proc_desc (CORE_ADDR pc)
       proc_desc = (struct mdebug_extra_func_info *) SYMBOL_VALUE_BYTES (sym);
 
       /* 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 +154,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,7 +180,7 @@ 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
@@ -231,14 +231,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 +248,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;
 }
@@ -308,8 +308,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)
+			    struct frame_info *this_frame,
+			    void **this_cache)
 {
   CORE_ADDR pc = get_frame_address_in_block (this_frame);
   struct mdebug_extra_func_info *proc_desc;
@@ -333,7 +333,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,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-nbsd-tdep.c ./gdb/alpha-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-nbsd-tdep.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-netbsd-tdep.c ./gdb/alpha-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/alpha-netbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,292 @@
+/* Target-dependent code for NetBSD/alpha.
+
+   Copyright (C) 2002-2021 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 (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);
+
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-obsd-tdep.c ./gdb/alpha-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-obsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-obsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/alpha.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-tdep.c ./gdb/alpha-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
 
-   Copyright (C) 1993-2020 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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"
@@ -116,7 +116,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 *
@@ -327,7 +327,7 @@ alpha_push_dummy_call (struct gdbarch *g
       struct type *arg_type = check_typedef (value_type (arg));
 
       /* 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:
@@ -478,7 +478,7 @@ 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))
@@ -546,7 +546,7 @@ 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))
@@ -614,7 +614,7 @@ 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 ();
 
   if ((code == TYPE_CODE_STRUCT
        || code == TYPE_CODE_UNION
@@ -974,7 +974,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 +986,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)
+			      struct frame_info *this_frame,
+			      void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
@@ -1012,7 +1012,9 @@ alpha_sigtramp_frame_sniffer (const stru
   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,
@@ -1118,7 +1120,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 +1139,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
@@ -1282,15 +1284,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 +1307,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 +1387,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;
 }
@@ -1428,7 +1431,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,
@@ -1601,7 +1606,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 +1616,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 +1663,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;
 	}
     }
 
@@ -1821,8 +1826,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-tdep.h ./gdb/alpha-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/alpha-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/alpha-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common target dependent code for GDB on Alpha systems.
-   Copyright (C) 1993-2020 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-bsd-nat.c ./gdb/amd64-bsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-bsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-bsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for AMD64 BSD's.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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,7 +58,7 @@ void
 amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  ptid_t ptid = regcache->ptid ();
 #if defined(PT_GETFSBASE) || defined(PT_GETGSBASE)
   const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 #endif
@@ -51,7 +67,7 @@ amd64bsd_fetch_inferior_registers (struc
     {
       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);
@@ -64,7 +80,7 @@ amd64bsd_fetch_inferior_registers (struc
     {
       register_t base;
 
-      if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_GETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't get segment register fs_base"));
 
       regcache->raw_supply (tdep->fsbase_regnum, &base);
@@ -77,7 +93,7 @@ amd64bsd_fetch_inferior_registers (struc
     {
       register_t base;
 
-      if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_GETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't get segment register gs_base"));
 
       regcache->raw_supply (tdep->fsbase_regnum + 1, &base);
@@ -95,7 +111,7 @@ amd64bsd_fetch_inferior_registers (struc
       if (x86bsd_xsave_len != 0)
 	{
 	  xstateregs = alloca (x86bsd_xsave_len);
-	  if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0)
+	  if (gdb_ptrace (PT_GETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, 0)
 	      == -1)
 	    perror_with_name (_("Couldn't get extended state status"));
 
@@ -104,7 +120,7 @@ amd64bsd_fetch_inferior_registers (struc
 	}
 #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,7 +134,7 @@ void
 amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  ptid_t ptid = regcache->ptid ();
 #if defined(PT_SETFSBASE) || defined(PT_SETGSBASE)
   const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 #endif
@@ -127,13 +143,13 @@ amd64bsd_store_inferior_registers (struc
     {
       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 (gdb_ptrace (PT_SETREGS, ptid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+	perror_with_name (_("Couldn't write registers"));
 
       if (regnum != -1)
 	return;
@@ -148,7 +164,7 @@ amd64bsd_store_inferior_registers (struc
       base = 0;
       regcache->raw_collect (tdep->fsbase_regnum, &base);
 
-      if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_SETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't write segment register fs_base"));
       if (regnum != -1)
 	return;
@@ -163,7 +179,7 @@ amd64bsd_store_inferior_registers (struc
       base = 0;
       regcache->raw_collect (tdep->fsbase_regnum + 1, &base);
 
-      if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_SETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't write segment register gs_base"));
       if (regnum != -1)
 	return;
@@ -179,25 +195,25 @@ amd64bsd_store_inferior_registers (struc
       if (x86bsd_xsave_len != 0)
 	{
 	  xstateregs = alloca (x86bsd_xsave_len);
-	  if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0)
+	  if (gdb_ptrace (PT_GETXSTATE, ptid, (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)
+	  if (gdb_ptrace (PT_SETXSTATE, ptid, (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-bsd-nat.h ./gdb/amd64-bsd-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-bsd-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-bsd-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for modern AMD64 BSD's.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-darwin-tdep.c ./gdb/amd64-darwin-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-darwin-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-darwin-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 1997-2020 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 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.  */
@@ -116,9 +116,10 @@ x86_darwin_init_abi_64 (struct gdbarch_i
   set_solib_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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-darwin-tdep.h ./gdb/amd64-darwin-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-darwin-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-darwin-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Darwin x86-64.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-dicos-tdep.c ./gdb/amd64-dicos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-dicos-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-dicos-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for DICOS running on x86-64's, for GDB.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-fbsd-nat.c ./gdb/amd64-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-fbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-fbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/amd64.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -209,8 +209,9 @@ amd64_fbsd_nat_target::supports_stopped_
 }
 #endif
 
+void _initialize_amd64fbsd_nat ();
 void
-_initialize_amd64fbsd_nat (void)
+_initialize_amd64fbsd_nat ()
 {
   int offset;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-fbsd-tdep.c ./gdb/amd64-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-fbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-fbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/amd64.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,6 +30,7 @@
 #include "amd64-tdep.h"
 #include "fbsd-tdep.h"
 #include "solib-svr4.h"
+#include "inferior.h"
 
 /* Support for signal handlers.  */
 
@@ -51,7 +52,7 @@ amd64fbsd_sigtramp_p (struct frame_info
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[sizeof amd64fbsd_sigtramp_code];
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
   if (memcmp (buf, amd64fbsd_sigtramp_code, sizeof amd64fbsd_sigtramp_code)
       != 0)
@@ -212,7 +213,8 @@ amd64fbsd_get_thread_local_address (stru
 {
   struct regcache *regcache;
 
-  regcache = get_thread_arch_regcache (ptid, gdbarch);
+  regcache = get_thread_arch_regcache (current_inferior ()->process_target (),
+				       ptid, gdbarch);
 
   target_fetch_registers (regcache, AMD64_FSBASE_REGNUM);
 
@@ -268,8 +270,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-linux-nat.c ./gdb/amd64-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for GNU/Linux x86-64.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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);
 
@@ -259,30 +259,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
     }
 }
 
@@ -348,30 +324,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 +333,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->gdbarch)->bits_per_word == 32)
     {
       unsigned int base_addr;
       ps_err_e result;
@@ -408,11 +360,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 +371,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 +386,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 +422,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-linux-tdep.c ./gdb/amd64-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux x86-64.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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"
@@ -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;
     }
 
@@ -284,8 +285,8 @@ amd64_linux_register_reggroup_p (struct
       || regnum == AMD64_FSBASE_REGNUM
       || regnum == AMD64_GSBASE_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);
 }
 
@@ -1464,7 +1465,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;
 
@@ -1496,16 +1497,16 @@ 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"), 
+			   "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 +1539,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 +1562,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 ())
@@ -1733,17 +1734,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 +1757,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 +1765,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);
 
-  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;
@@ -1816,11 +1806,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,17 +1827,14 @@ 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
@@ -1882,7 +1869,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
@@ -2097,7 +2084,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
@@ -2272,8 +2259,9 @@ amd64_x32_linux_init_abi (struct gdbarch
     (gdbarch, svr4_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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-linux-tdep.h ./gdb/amd64-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-linux-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-linux-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux AMD64.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nat.c ./gdb/amd64-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for AMD64.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nat.h ./gdb/amd64-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for AMD64.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nbsd-nat.c ./gdb/amd64-nbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nbsd-nat.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nbsd-tdep.c ./gdb/amd64-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-nbsd-tdep.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-netbsd-nat.c ./gdb/amd64-netbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-netbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-netbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,68 @@
+/* Native-dependent code for NetBSD/amd64.
+
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-netbsd-tdep.c ./gdb/amd64-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-netbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,133 @@
+/* Target-dependent code for NetBSD/amd64.
+
+   Copyright (C) 2003-2021 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 (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));
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-obsd-nat.c ./gdb/amd64-obsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-obsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-obsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for OpenBSD/amd64.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-obsd-tdep.c ./gdb/amd64-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-obsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-obsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/amd64.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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
@@ -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);
 
@@ -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,
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-ravenscar-thread.c ./gdb/amd64-ravenscar-thread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-ravenscar-thread.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-ravenscar-thread.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,150 @@
+/* Ravenscar x86-64 target support.
+
+   Copyright (C) 2020-2021 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"
+
+struct amd64_ravenscar_ops : public ravenscar_arch_ops
+{
+  void fetch_registers (struct regcache *regcache, int regnum) override;
+  void store_registers (struct regcache *regcache, int regnum) override;
+
+private:
+
+  /* Return the offset of the register in the context buffer.  */
+  int register_offset (struct gdbarch *arch, int regnum);
+};
+
+/* 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[] =
+{
+  AMD64_RIP_REGNUM,
+  AMD64_EFLAGS_REGNUM,
+  AMD64_RSP_REGNUM,
+  AMD64_RBX_REGNUM,
+  AMD64_RBP_REGNUM,
+  AMD64_R12_REGNUM,
+  AMD64_R13_REGNUM,
+  AMD64_R14_REGNUM,
+  AMD64_R15_REGNUM,
+};
+
+int
+amd64_ravenscar_ops::register_offset (struct gdbarch *arch, int regnum)
+{
+  for (int i = 0; i < ARRAY_SIZE (register_layout); ++i)
+    if (register_layout[i] == regnum)
+      return i * 8;
+  /* Not saved.  */
+  return -1;
+}
+
+/* Supply register REGNUM, which has been saved at 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);
+}
+
+void
+amd64_ravenscar_ops::fetch_registers (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++)
+    {
+      int offset = register_offset (gdbarch, current_regnum);
+
+      if (offset != -1)
+        {
+          current_address = thread_descriptor_address + offset;
+          supply_register_at_address (regcache, current_regnum,
+                                      current_address);
+        }
+    }
+}
+
+void
+amd64_ravenscar_ops::store_registers (struct regcache *regcache, int regnum)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  int buf_size = register_size (gdbarch, regnum);
+  gdb_byte buf[buf_size];
+  CORE_ADDR register_address;
+
+  int offset = register_offset (gdbarch, regnum);
+  if (offset != -1)
+    {
+      register_address = inferior_ptid.tid () + offset;
+
+      regcache->raw_collect (regnum, buf);
+      write_memory (register_address,
+		    buf,
+		    buf_size);
+    }
+}
+
+/* The ravenscar_arch_ops vector for AMD64 targets.  */
+
+static struct amd64_ravenscar_ops amd64_ravenscar_ops;
+
+/* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-ravenscar-thread.h ./gdb/amd64-ravenscar-thread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-ravenscar-thread.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/amd64-ravenscar-thread.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,27 @@
+/* Ravenscar x86-64 target support.
+
+   Copyright (C) 2020-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-sol2-tdep.c ./gdb/amd64-sol2-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-sol2-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-sol2-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for AMD64 Solaris.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    Contributed by Joseph Myers, CodeSourcery, LLC.
 
@@ -63,21 +63,6 @@ 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.  */
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-tdep.c ./gdb/amd64-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for AMD64.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    Contributed by Jiri Smid, SuSE Labs.
 
@@ -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"
 };
 
@@ -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",
@@ -546,19 +547,18 @@ 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));
+	  struct type *subtype = check_typedef (type->field (i).type ());
 	  int bitpos = TYPE_FIELD_BITPOS (type, i);
-	  int align = type_align(subtype);
 
 	  /* 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))
+	  if (field_is_static (&type->field (i))
 	      || (TYPE_FIELD_BITSIZE (type, i) == 0
 		  && TYPE_LENGTH (subtype) == 0)
 	      || TYPE_FIELD_PACKED (type, i))
@@ -567,6 +567,10 @@ amd64_has_unaligned_fields (struct type
 	  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,7 +591,7 @@ 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));
+  struct type *subtype = check_typedef (type->field (i).type ());
   int bitpos = bitoffset + TYPE_FIELD_BITPOS (type, i);
   int pos = bitpos / 64;
   enum amd64_reg_class subclass[2];
@@ -600,15 +604,15 @@ amd64_classify_aggregate_field (struct t
 
   /* Ignore static fields, or empty fields, for example nested
      empty structures.*/
-  if (field_is_static (&TYPE_FIELD (type, i)) || bitsize == 0)
+  if (field_is_static (&type->field (i)) || bitsize == 0)
     return;
 
-  if (TYPE_CODE (subtype) == TYPE_CODE_STRUCT
-      || TYPE_CODE (subtype) == TYPE_CODE_UNION)
+  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;
     }
@@ -652,7 +656,7 @@ 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.  */
+	unaligned fields, it has class memory.  */
   if (TYPE_LENGTH (type) > 16 || amd64_has_unaligned_fields (type))
     {
       theclass[0] = theclass[1] = AMD64_MEMORY;
@@ -663,11 +667,11 @@ 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));
 
@@ -681,10 +685,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,7 +712,7 @@ 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);
+  enum type_code code = type->code ();
   int len = TYPE_LENGTH (type);
 
   theclass[0] = theclass[1] = AMD64_NO_CLASS;
@@ -798,8 +802,8 @@ 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)
 	{
@@ -813,7 +817,7 @@ amd64_return_value (struct gdbarch *gdba
     }
 
   /* 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 +858,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 +872,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 +880,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;
@@ -950,7 +954,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 +964,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))
@@ -1102,9 +1106,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)
   {}
 
@@ -1385,7 +1390,8 @@ 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;
@@ -1438,16 +1444,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 +1470,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 +1479,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 +1505,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),
+			  displaced_step_dump_bytes (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
@@ -1673,31 +1676,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)
 {
-  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);
     }
 
@@ -1742,12 +1742,7 @@ amd64_displaced_step_fixup (struct gdbar
 	     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");
-	}
+	displaced_debug_printf ("syscall changed %%rip; not relocating");
       else
 	{
 	  ULONGEST rip = orig_rip - insn_offset;
@@ -1758,12 +1753,9 @@ amd64_displaced_step_fixup (struct gdbar
 
 	  regcache_cooked_write_unsigned (regs, AMD64_RIP_REGNUM, 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, orig_rip),
+				  paddress (gdbarch, rip));
 	}
     }
 
@@ -1786,12 +1778,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));
     }
 }
 
@@ -1909,12 +1898,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,12 +1924,9 @@ 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.  */
@@ -2038,8 +2021,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 +2185,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 +2344,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 +2357,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 +2379,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 +2415,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
@@ -2486,7 +2488,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,12 +2529,14 @@ 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 ")))
+	      && (producer_is_llvm (COMPUNIT_PRODUCER (cust))
+	      || producer_is_icc_ge_19 (COMPUNIT_PRODUCER (cust)))))
         return std::max (start_pc, post_prologue_pc);
     }
 
@@ -2698,6 +2702,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,
@@ -2842,6 +2847,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,
@@ -2977,6 +2983,7 @@ amd64_epilogue_frame_this_id (struct fra
 
 static const struct frame_unwind amd64_epilogue_frame_unwind =
 {
+  "amd64 epilogue",
   NORMAL_FRAME,
   amd64_epilogue_frame_unwind_stop_reason,
   amd64_epilogue_frame_this_id,
@@ -3260,6 +3267,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.  */
@@ -3334,13 +3343,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);
 }
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-tdep.h ./gdb/amd64-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent definitions for AMD64.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
    Contributed by Jiri Smid, SuSE Labs.
 
    This file is part of GDB.
@@ -26,6 +26,7 @@ struct frame_info;
 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);
 
 /* Initialize the ABI for amd64.  Uses DEFAULT_TDESC as fallback
    tdesc, if INFO does not specify one.  */
@@ -138,7 +138,7 @@ 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.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-windows-nat.c ./gdb/amd64-windows-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-windows-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-windows-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-windows-tdep.c ./gdb/amd64-windows-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/amd64-windows-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/amd64-windows-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2021 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,6 +125,7 @@ amd64_windows_passed_by_integer_register
       case TYPE_CODE_RVALUE_REF:
       case TYPE_CODE_STRUCT:
       case TYPE_CODE_UNION:
+      case TYPE_CODE_COMPLEX:
 	return (TYPE_LENGTH (type) == 1
 		|| TYPE_LENGTH (type) == 2
 		|| TYPE_LENGTH (type) == 4
@@ -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 (type) == 4 || TYPE_LENGTH (type) == 8));
 }
 
 /* Return non-zero iff an argument of the given TYPE should be passed
@@ -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
@@ -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);
@@ -296,28 +362,40 @@ amd64_windows_return_value (struct gdbar
 
   /* 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 (type)->code ();
+	    if (code == TYPE_CODE_INT || code == TYPE_CODE_FLT)
+	      {
+		regnum = AMD64_XMM0_REGNUM;
+		break;
+	      }
+	  }
+	/* fall through */
       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)
-        {
+	{
 	  ULONGEST addr;
 
 	  regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &addr);
@@ -351,17 +429,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;
@@ -678,14 +756,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 +797,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 +830,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 +905,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 +971,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 +986,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 +1020,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 +1062,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;
 }
@@ -1062,11 +1126,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 +1145,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)
     {
@@ -1116,6 +1178,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,
@@ -1209,9 +1272,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)
 {
+  struct gdbarch_tdep *tdep = 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,11 +1295,6 @@ 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);
@@ -1242,12 +1304,86 @@ amd64_windows_init_abi (struct gdbarch_i
 
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/annotate.c ./gdb/annotate.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/annotate.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/annotate.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Annotation routines for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -238,8 +238,8 @@ annotate_thread_exited (struct thread_in
   if (annotation_level > 1)
     {
       printf_filtered(("\n\032\032thread-exited,"
-                       "id=\"%d\",group-id=\"i%d\"\n"),
-                      t->global_num, t->inf->num);
+		       "id=\"%d\",group-id=\"i%d\"\n"),
+		      t->global_num, t->inf->num);
     }
 }
 
@@ -435,7 +435,7 @@ annotate_source (const char *filename, i
 
 /* See annotate.h.  */
 
-void
+bool
 annotate_source_line (struct symtab *s, int line, int mid_statement,
 		      CORE_ADDR pc)
 {
@@ -443,16 +443,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, SYMTAB_OBJFILE (s)->arch (),
 		       pc);
+
+      /* Update the current symtab and line.  */
+      symtab_and_line sal;
+      sal.pspace = SYMTAB_PSPACE (s);
+      sal.symtab = s;
+      sal.line = line;
+      set_current_source_symtab_and_line (sal);
+
+      return true;
     }
+
+  return false;
 }
 
 
@@ -614,11 +623,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/annotate.h ./gdb/annotate.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/annotate.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/annotate.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Annotation routines for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch32.c ./gdb/arch/aarch32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch32.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/aarch32.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,18 +26,18 @@
 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");
 
-  return tdesc;
+  return tdesc.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch32.h ./gdb/arch/aarch32.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch32.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/aarch32.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64.c ./gdb/arch/aarch64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/aarch64.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,29 +23,34 @@
 #include "../features/aarch64-fpu.c"
 #include "../features/aarch64-sve.c"
 #include "../features/aarch64-pauth.c"
+#include "../features/aarch64-mte.c"
 
 /* See arch/aarch64.h.  */
 
 target_desc *
-aarch64_create_target_description (uint64_t vq, bool pauth_p)
+aarch64_create_target_description (uint64_t vq, bool pauth_p, bool mte_p)
 {
-  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);
+    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, vq);
 
   if (pauth_p)
-    regnum = create_feature_aarch64_pauth (tdesc, regnum);
+    regnum = create_feature_aarch64_pauth (tdesc.get (), regnum);
 
-  return tdesc;
+  /* Memory tagging extension registers.  */
+  if (mte_p)
+    regnum = create_feature_aarch64_mte (tdesc.get (), regnum);
+
+  return tdesc.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64.h ./gdb/arch/aarch64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/aarch64.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target-dependent functionality for AArch64.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,12 +22,24 @@
 
 #include "gdbsupport/tdesc.h"
 
+/* Holds information on what architectural features are available.  This is
+   used to select register sets.  */
+struct aarch64_features
+{
+  bool sve = false;
+  bool pauth = false;
+  bool mte = false;
+};
+
 /* 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.  */
+   feature.
 
-target_desc *aarch64_create_target_description (uint64_t vq, bool has_pauth_p);
+   MTE_P indicates the presence of the Memory Tagging Extension feature.  */
+
+target_desc *aarch64_create_target_description (uint64_t vq, bool has_pauth_p,
+						bool mte_p);
 
 /* Register numbers of various important registers.
    Note that on SVE, the Z registers reuse the V register numbers and the V
@@ -58,6 +70,8 @@ enum aarch64_regnum
   AARCH64_LAST_V_ARG_REGNUM = AARCH64_V0_REGNUM + 7
 };
 
+#define V_REGISTER_SIZE 16
+
 /* Pseudo register base numbers.  */
 #define AARCH64_Q0_REGNUM 0
 #define AARCH64_D0_REGNUM (AARCH64_Q0_REGNUM + AARCH64_D_REGISTER_COUNT)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-insn.c ./gdb/arch/aarch64-insn.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-insn.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/aarch64-insn.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-insn.h ./gdb/arch/aarch64-insn.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-insn.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/aarch64-insn.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2021 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GDB.
@@ -21,6 +21,27 @@
 
 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))))
+
 /* List of opcodes that we need for building the jump pad and relocating
    an instruction.  */
 
@@ -40,7 +61,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 +130,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-mte-linux.c ./gdb/arch/aarch64-mte-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-mte-linux.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/aarch64-mte-linux.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,77 @@
+/* Common Linux target-dependent functionality for AArch64 MTE
+
+   Copyright (C) 2021 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 */
+
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-mte-linux.h ./gdb/arch/aarch64-mte-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/aarch64-mte-linux.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/aarch64-mte-linux.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,74 @@
+/* Common Linux target-dependent definitions for AArch64 MTE
+
+   Copyright (C) 2021 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_LINUX_H
+#define ARCH_AARCH64_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_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);
+
+#endif /* ARCH_AARCH64_LINUX_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/amd64.c ./gdb/arch/amd64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/amd64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/amd64.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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);
+    regnum = create_feature_i386_64bit_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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/amd64.h ./gdb/arch/amd64.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/amd64.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/amd64.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arc.c ./gdb/arch/arc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arc.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/arc.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,125 @@
+/* Copyright (C) 2017-2021 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 (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 (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arc.h ./gdb/arch/arc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arc.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arch/arc.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,87 @@
+/* Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm.c ./gdb/arch/arm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/arm.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on ARM systems.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -42,17 +42,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 +119,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:
@@ -385,18 +374,18 @@ shifted_reg_val (struct regcache *regcac
 target_desc *
 arm_create_target_description (arm_fp_type fp_type)
 {
-  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 +393,22 @@ 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;
+  return tdesc.release ();
 }
 
 /* See arch/arm.h.  */
@@ -427,7 +416,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");
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-get-next-pcs.c ./gdb/arch/arm-get-next-pcs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-get-next-pcs.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/arm-get-next-pcs.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common code for ARM software single stepping support.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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.  */
 
@@ -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 {};
@@ -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))
 	    {
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-get-next-pcs.h ./gdb/arch/arm-get-next-pcs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-get-next-pcs.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/arm-get-next-pcs.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common code for ARM software single stepping support.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm.h ./gdb/arch/arm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/arm.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common target dependent code for GDB on ARM systems.
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,6 +31,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 */
@@ -159,9 +160,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);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-linux.c ./gdb/arch/arm-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-linux.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/arm-linux.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on ARM systems.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-linux.h ./gdb/arch/arm-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/arm-linux.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/arm-linux.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on ARM systems.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/i386.c ./gdb/arch/i386.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/i386.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/i386.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -35,39 +35,39 @@
 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_32bit_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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/i386.h ./gdb/arch/i386.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/i386.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/i386.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/ppc-linux-common.c ./gdb/arch/ppc-linux-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/ppc-linux-common.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/ppc-linux-common.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on PPC systems.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/ppc-linux-common.h ./gdb/arch/ppc-linux-common.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/ppc-linux-common.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/ppc-linux-common.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GNU/Linux on PPC systems.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/ppc-linux-tdesc.h ./gdb/arch/ppc-linux-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/ppc-linux-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/ppc-linux-tdesc.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target description declarations shared between gdb, gdbserver and IPA.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/riscv.c ./gdb/arch/riscv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/riscv.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/riscv.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/riscv.h ./gdb/arch/riscv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/riscv.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/riscv.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target-dependent functionality for RISC-V
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,10 +46,20 @@ 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 standard compliant
+     target should be 16, but GDB doesn't currently mind, and will accept
+     any vector size.  */
+  int vlen = 0;
+
+  /* When true this target is RV32E.  */
+  bool embedded = 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);
   }
 
   /* Inequality operator.  */
@@ -61,15 +71,36 @@ 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
+		       | (xlen & 0x1f) << 5
+		       | (flen & 0x1f) << 0
+		       | (vlen & 0xfff) << 11);
     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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/tic6x.c ./gdb/arch/tic6x.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/tic6x.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/tic6x.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/tic6x.h ./gdb/arch/tic6x.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/tic6x.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/tic6x.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/xtensa.h ./gdb/arch/xtensa.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch/xtensa.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch/xtensa.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common Target-dependent code for the Xtensa port of GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch-utils.c ./gdb/arch-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch-utils.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -38,9 +38,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);
 }
@@ -78,6 +77,55 @@ legacy_register_sim_regno (struct gdbarc
     return LEGACY_SIM_REGNO_IGNORE;
 }
 
+
+/* 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)
 {
@@ -211,7 +259,7 @@ 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
@@ -231,7 +279,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);
@@ -317,17 +371,17 @@ 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"));
+				  "(currently big endian).\n"));
     else
       fprintf_unfiltered (file, _("The target endianness is set automatically "
-				  "(currently little endian)\n"));
+				  "(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"));
+			  _("The target is set to big endian.\n"));
     else
       fprintf_unfiltered (file,
-			  _("The target is assumed to be little endian\n"));
+			  _("The target is set to little endian.\n"));
 }
 
 static void
@@ -335,8 +389,6 @@ 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;
@@ -476,11 +528,11 @@ 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"),
+    fprintf_filtered (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"),
+    fprintf_filtered (file, _("The target architecture is set to \"%s\".\n"),
 		      set_architecture_string);
 }
 
@@ -494,8 +546,6 @@ 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;
@@ -527,7 +577,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;
 
@@ -576,7 +626,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,7 +640,6 @@ 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);
@@ -625,10 +673,6 @@ 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);
   
   /* Find a default architecture.  */
   if (default_bfd_arch == NULL)
@@ -651,6 +695,7 @@ initialize_current_architecture (void)
 			_("initialize_current_architecture: Arch not found"));
     }
 
+  gdbarch_info info;
   info.bfd_arch_info = default_bfd_arch;
 
   /* Take several guesses at a byte order.  */
@@ -703,31 +748,18 @@ initialize_current_architecture (void)
     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_show_commands architecture_cmds
+      = 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_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.  */
@@ -858,7 +890,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 +908,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 +983,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 +1023,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);
@@ -1004,8 +1070,24 @@ default_get_pc_address_flags (frame_info
   return "";
 }
 
+/* See arch-utils.h.  */
+void
+default_read_core_file_mappings (struct gdbarch *gdbarch,
+				 struct bfd *cbfd,
+				 gdb::function_view<void (ULONGEST count)>
+				   pre_loop_cb,
+				 gdb::function_view<void (int num,
+							  ULONGEST start,
+							  ULONGEST end,
+							  ULONGEST file_ofs,
+							  const char *filename)>
+				   loop_cb)
+{
+}
+
+void _initialize_gdbarch_utils ();
 void
-_initialize_gdbarch_utils (void)
+_initialize_gdbarch_utils ()
 {
   add_setshow_enum_cmd ("endian", class_support,
 			endian_enum, &set_endian_string, 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch-utils.h ./gdb/arch-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arch-utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arch-utils.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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,6 +132,28 @@ extern const struct floatformat **
   default_floatformat_for_type (struct gdbarch *gdbarch,
 				const char *name, int len);
 
+/* 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 (struct frame_info *frame,
 					       CORE_ADDR pc);
 
@@ -176,12 +196,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 +242,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);
@@ -276,4 +294,15 @@ extern ULONGEST default_type_align (stru
 extern std::string default_get_pc_address_flags (frame_info *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,
+					     gdb::function_view<void (ULONGEST count)>
+					       pre_loop_cb,
+					     gdb::function_view<void (int num,
+								      ULONGEST start,
+								      ULONGEST end,
+								      ULONGEST file_ofs,
+								      const char *filename)>
+					       loop_cb);
 #endif /* ARCH_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-linux-nat.c ./gdb/arc-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-linux-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arc-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,320 @@
+/* Native-dependent code for GNU/Linux ARC.
+
+   Copyright 2020-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-linux-tdep.c ./gdb/arc-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-linux-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arc-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,746 @@
+/* Target dependent code for GNU/Linux ARC.
+
+   Copyright 2020-2021 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"
+
+/* 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 (struct frame_info *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 (struct frame_info *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 ();
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  struct disassemble_info di = arc_disassemble_info (gdbarch);
+
+  /* Read current instruction.  */
+  struct arc_instruction curr_insn;
+  arc_insn_decode (regcache_read_pc (regcache), &di, arc_delayed_print_insn,
+		   &curr_insn);
+
+  if (curr_insn.insn_class == LLOCK)
+    return handle_atomic_sequence (curr_insn, di);
+
+  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, &di, 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 = BMSYMBOL_VALUE_ADDRESS (resolver);
+	  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 && BMSYMBOL_VALUE_ADDRESS (resolver) == 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)
+{
+  gdb_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)
+{
+  gdb_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)
+{
+  struct gdbarch_tdep *tdep = 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,
+					 svr4_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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-linux-tdep.h ./gdb/arc-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-linux-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arc-linux-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,52 @@
+/* Target dependent code for GNU/Linux ARC.
+
+   Copyright 2020-2021 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 regsiters 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-newlib-tdep.c ./gdb/arc-newlib-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-newlib-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arc-newlib-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Newlib ARC.
 
-   Copyright (C) 2016-2020 Free Software Foundation, Inc.
+   Copyright (C) 2016-2021 Free Software Foundation, Inc.
    Contributed by Synopsys Inc.
 
    This file is part of GDB.
@@ -24,13 +24,17 @@
 #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);
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-tdep.c ./gdb/arc-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arc-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for ARC architecture, for GDB.
 
-   Copyright 2005-2020 Free Software Foundation, Inc.
+   Copyright 2005-2021 Free Software Foundation, Inc.
    Contributed by Synopsys Inc.
 
    This file is part of GDB.
@@ -21,27 +21,29 @@
 /* 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 "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 +83,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.  */
+
+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 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",
+/* 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 aux_minimal_register_names[] = {
-  "pc", "status32",
+/* 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 }
+  }
 };
 
-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",
+/* 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;
@@ -449,9 +602,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 +612,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 +672,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 +731,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 +747,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++;
     }
@@ -620,8 +766,7 @@ arc_push_dummy_call (struct gdbarch *gdb
 
 	  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.  */
@@ -635,9 +780,8 @@ arc_push_dummy_call (struct gdbarch *gdb
 	  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);
+	  arc_debug_printf ("copying arg %d, val 0x%08x, len %d to mem",
+			    i, *((int *) value_contents (args[i])), len);
 
 	  data += space;
 	}
@@ -646,9 +790,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 +811,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);
@@ -765,8 +907,7 @@ arc_extract_return_value (struct gdbarch
 {
   unsigned int len = TYPE_LENGTH (type);
 
-  if (arc_debug)
-    debug_printf ("arc: extract_return_value\n");
+  arc_debug_printf ("called");
 
   if (len <= ARC_REGISTER_SIZE)
     {
@@ -777,8 +918,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 +934,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);
@@ -819,8 +958,7 @@ arc_store_return_value (struct gdbarch *
 {
   unsigned int len = TYPE_LENGTH (type);
 
-  if (arc_debug)
-    debug_printf ("arc: store_return_value\n");
+  arc_debug_printf ("called");
 
   if (len <= ARC_REGISTER_SIZE)
     {
@@ -831,8 +969,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 +985,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."));
@@ -862,8 +998,7 @@ arc_store_return_value (struct gdbarch *
 static int
 arc_get_longjmp_target (struct frame_info *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);
@@ -891,14 +1026,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
+  int is_struct_return = (valtype->code () == TYPE_CODE_STRUCT
+			  || valtype->code () == 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));
+  arc_debug_printf ("readbuf = %s, writebuf = %s",
+		    host_address_to_string (readbuf),
+		    host_address_to_string (writebuf));
 
   if (writebuf != NULL)
     {
@@ -1249,10 +1383,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];
@@ -1270,7 +1403,7 @@ arc_analyze_prologue (struct gdbarch *gd
       arc_insn_decode (current_prologue_end, &di, arc_delayed_print_insn,
 		       &insn);
 
-      if (arc_debug >= 2)
+      if (arc_debug)
 	arc_insn_dump (insn);
 
       /* If this instruction is in the prologue, fields in the cache will be
@@ -1278,9 +1411,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 +1438,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 +1473,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 +1614,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,19 +1645,19 @@ 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 ()));
     }
 }
 
@@ -1534,8 +1666,7 @@ arc_print_frame_cache (struct gdbarch *g
 static struct arc_frame_cache *
 arc_make_frame_cache (struct frame_info *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 +1717,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)
@@ -1602,8 +1734,7 @@ static void
 arc_frame_this_id (struct frame_info *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);
 
@@ -1692,11 +1823,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 (struct frame_info *this_frame)
+{
+  arc_debug_printf ("called");
+
+  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+
+  /* 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 (struct frame_info *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 (struct frame_info *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,
+			    struct frame_info *this_frame,
+			    void **this_cache)
+{
+  struct gdbarch_tdep *tdep;
+
+  arc_debug_printf ("called");
+
+  tdep = gdbarch_tdep (get_frame_arch (this_frame));
+
+  /* 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 +1933,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 +1957,296 @@ 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.  */
+/* Add all the expected register sets into GDBARCH.  */
 
-static bool
-arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
-		struct tdesc_arch_data **tdesc_data)
+static void
+arc_add_reggroups (struct gdbarch *gdbarch)
 {
-  if (arc_debug)
-    debug_printf ("arc: Target description initialization.\n");
+  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);
+}
+
+static enum arc_isa
+mach_type_to_arc_isa (const unsigned long mach)
+{
+  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 (__FILE__, __LINE__,
+			_("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");
-	}
-    }
-  else
-    {
-      if (arc_debug)
-	debug_printf ("arc: Using provided register set.\n");
+	internal_error (__FILE__, __LINE__,
+			_("unknown ELF header class %d"), eclass);
     }
-  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);
 
-      is_reduced_rf = false;
-      core_feature_name = core_v2_feature_name;
-      core_regs = core_v2_register_names;
+  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.  */
+
+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)
+	  std::ostringstream reg_names;
+	  for (std::size_t i = 0; i < reg.names.size(); ++i)
 	    {
-	      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
-	    {
-	      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;
+}
 
-  gdb_assert (feature != NULL);
-  int valid_p = 1;
+/* 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.  */
 
-  for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++)
+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 ();
+
+  if (feature_aux == nullptr)
+    return false;
+
+  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 +2256,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:
@@ -1951,19 +2285,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);
+  gdb::unique_xmalloc_ptr<struct gdbarch_tdep> tdep
+    (XCNEW (struct gdbarch_tdep));
   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 ());
+  struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep.release ());
 
   /* Data types.  */
   set_gdbarch_short_bit (gdbarch, 16);
@@ -2034,9 +2369,13 @@ arc_gdbarch_init (struct gdbarch_info in
   /* This doesn't include possible long-immediate value.  */
   set_gdbarch_max_insn_length (gdbarch, 4);
 
+  /* Add default register groups.  */
+  arc_add_reggroups (gdbarch);
+
   /* 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);
 
@@ -2044,7 +2383,7 @@ arc_gdbarch_init (struct gdbarch_info in
      It can override functions set earlier.  */
   gdbarch_init_osabi (info, gdbarch);
 
-  if (tdep->jb_pc >= 0)
+  if (gdbarch_tdep (gdbarch)->jb_pc >= 0)
     set_gdbarch_get_longjmp_target (gdbarch, arc_get_longjmp_target);
 
   /* Disassembler options.  Enforce CPU if it was specified in XML target
@@ -2097,12 +2436,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;
 }
@@ -2115,14 +2456,15 @@ arc_dump_tdep (struct gdbarch *gdbarch,
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
   fprintf_unfiltered (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc);
-}
-
-/* Wrapper for "maintenance print arc" list of commands.  */
 
-static void
-maintenance_print_arc_command (const char *args, int from_tty)
-{
-  cmd_show_list (maintenance_print_arc_list, from_tty, "");
+  fprintf_unfiltered (file, "arc_dump_tdep: is_sigtramp = <%s>\n",
+		      host_address_to_string (tdep->is_sigtramp));
+  fprintf_unfiltered (file, "arc_dump_tdep: sigcontext_addr = <%s>\n",
+		      host_address_to_string (tdep->sigcontext_addr));
+  fprintf_unfiltered (file, "arc_dump_tdep: sc_reg_offset = <%s>\n",
+		      host_address_to_string (tdep->sc_reg_offset));
+  fprintf_unfiltered (file, "arc_dump_tdep: sc_num_regs = %d\n",
+		      tdep->sc_num_regs);
 }
 
 /* This command accepts single argument - address of instruction to
@@ -2145,22 +2487,20 @@ dump_arc_instruction_command (const char
   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_show_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 +2508,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-tdep.h ./gdb/arc-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arc-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arc-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for ARC architecture, for GDB.
 
-   Copyright 2005-2020 Free Software Foundation, Inc.
+   Copyright 2005-2021 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,9 +102,22 @@ enum arc_regnum
    Longer registers are represented as pairs of 32-bit registers.  */
 #define ARC_REGISTER_SIZE  4
 
+/* 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...) fprintf_unfiltered (gdb_stdlog, fmt, ##args)
 
-extern int arc_debug;
+extern bool 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.  */
 
@@ -100,6 +126,22 @@ struct gdbarch_tdep
   /* Offset to PC value in jump buffer.  If this is negative, longjmp
      support will be disabled.  */
   int jb_pc;
+
+  /* Whether target has hardware (aka zero-delay) loops.  */
+  bool has_hw_loops;
+
+  /* Detect sigtramp.  */
+  bool (*is_sigtramp) (struct frame_info *);
+
+  /* Get address of sigcontext for sigtramp.  */
+  CORE_ADDR (*sigcontext_addr) (struct frame_info *);
+
+  /* Offset of registers in `struct sigcontext'.  */
+  const int *sc_reg_offset;
+
+  /* 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;
 };
 
 /* Utility functions used by other ARC-specific modules.  */
@@ -163,4 +205,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-bsd-tdep.c ./gdb/arm-bsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-bsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-bsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for ARM BSD's.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-fbsd-nat.c ./gdb/arm-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-fbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-fbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/arm.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -143,8 +143,9 @@ arm_fbsd_nat_target::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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-fbsd-tdep.c ./gdb/arm-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-fbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-fbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/arm.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -150,7 +150,7 @@ const struct regset arm_fbsd_vfpregset =
     regcache_supply_regset, regcache_collect_regset
   };
 
-/* Implement the "regset_from_core_section" gdbarch method.  */
+/* Implement the "iterate_over_regset_sections" gdbarch method.  */
 
 static void
 arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
@@ -187,10 +187,10 @@ arm_fbsd_read_description_auxv (struct t
       if (arm_hwcap & HWCAP_NEON)
 	return aarch32_read_description ();
       else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPD32))
-	  == (HWCAP_VFPv3 | HWCAP_VFPD32))
+	       == (HWCAP_VFPv3 | HWCAP_VFPD32))
 	return arm_read_description (ARM_FP_TYPE_VFPV3);
       else
-      return arm_read_description (ARM_FP_TYPE_VFPV2);
+	return arm_read_description (ARM_FP_TYPE_VFPV2);
     }
 
   return nullptr;
@@ -235,8 +235,9 @@ arm_fbsd_init_abi (struct gdbarch_info i
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-fbsd-tdep.h ./gdb/arm-fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-fbsd-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-fbsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* FreeBSD/arm target support, prototypes.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-linux-nat.c ./gdb/arm-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* GNU/Linux on ARM native support.
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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;
@@ -537,7 +537,7 @@ arm_linux_nat_target::read_description (
     {
       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);
@@ -556,7 +556,7 @@ arm_linux_nat_target::read_description (
     {
       /* 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)
@@ -619,18 +619,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 +717,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 +963,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 +987,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 +1004,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 +1028,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 +1241,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 +1299,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-linux-tdep.c ./gdb/arm-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GNU/Linux on ARM target support.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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"
@@ -728,15 +729,15 @@ 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);
 
   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)
@@ -850,12 +851,12 @@ arm_linux_get_syscall_number (struct gdb
 
       if (svc_operand)
 	{
-          /* OABI */
+	  /* OABI */
 	  svc_number = svc_operand - 0x900000;
 	}
       else
 	{
-          /* EABI */
+	  /* EABI */
 	  regcache_cooked_read_unsigned (regs, 7, &svc_number);
 	}
     }
@@ -946,7 +947,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 +958,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,7 +971,7 @@ 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;
 
@@ -991,16 +988,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);
@@ -1025,19 +1018,18 @@ arm_linux_copy_svc (struct gdbarch *gdba
 	     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 +1057,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 +1066,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 +1078,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 +1095,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 +1147,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 +1162,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 +1171,7 @@ arm_stap_parse_special_token (struct gdb
 	++tmp;
 
       if (*tmp != ',')
-	return 0;
+	return {};
 
       len = tmp - start;
       regname = (char *) alloca (len + 2);
@@ -1220,43 +1212,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
@@ -1642,7 +1629,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))
@@ -1664,8 +1651,8 @@ 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));
+			   "support syscall number %s\n"),
+			   plongest (svc_number));
       return -1;
     }
 
@@ -1678,7 +1665,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;
 
@@ -1729,7 +1716,7 @@ arm_linux_init_abi (struct gdbarch_info
 								    NULL };
   struct gdbarch_tdep *tdep = 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)
@@ -1770,7 +1757,7 @@ arm_linux_init_abi (struct gdbarch_info
     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;
@@ -1787,7 +1774,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 +1802,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 +1987,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-linux-tdep.h ./gdb/arm-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-linux-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-linux-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GNU/Linux on ARM target support, prototypes.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-nbsd-nat.c ./gdb/arm-nbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-nbsd-nat.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-nbsd-tdep.c ./gdb/arm-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-nbsd-tdep.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-netbsd-nat.c ./gdb/arm-netbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-netbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-netbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,363 @@
+/* Native-dependent code for BSD Unix running on ARM's, for GDB.
+
+   Copyright (C) 1988-2021 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)
+{
+  struct gdbarch_tdep *tdep = 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;
+    }
+
+  struct gdbarch_tdep *tdep = 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;
+    }
+
+  struct gdbarch_tdep *tdep = 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)
+{
+  struct gdbarch_tdep *tdep = 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);
+
+  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);
+}
+
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-netbsd-tdep.c ./gdb/arm-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-netbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,171 @@
+/* Target-dependent code for NetBSD/arm.
+
+   Copyright (C) 2002-2021 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)
+{
+  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;
+
+  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)
+{
+  struct gdbarch_tdep *tdep = 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-netbsd-tdep.h ./gdb/arm-netbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-netbsd-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-netbsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,27 @@
+/* NetBSD/ARM support.
+
+   Copyright (C) 2020-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-none-tdep.c ./gdb/arm-none-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-none-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/arm-none-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,213 @@
+/* none on ARM target support.
+
+   Copyright (C) 2020-2021 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)
+{
+  struct gdbarch_tdep *tdep = 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-obsd-tdep.c ./gdb/arm-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-obsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-obsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/arm.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-pikeos-tdep.c ./gdb/arm-pikeos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-pikeos-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-pikeos-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2016-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-symbian-tdep.c ./gdb/arm-symbian-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-symbian-tdep.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-tdep.c ./gdb/arm-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on ARM systems.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -38,13 +38,14 @@
 #include "frame-base.h"
 #include "trad-frame.h"
 #include "objfiles.h"
-#include "dwarf2-frame.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"
@@ -59,12 +60,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.
@@ -80,7 +88,7 @@ static bool arm_debug;
 
 struct arm_mapping_symbol
 {
-  bfd_vma value;
+  CORE_ADDR value;
   char type;
 
   bool operator< (const arm_mapping_symbol &other) const
@@ -279,13 +287,36 @@ struct arm_prologue_cache
   int framereg;
 
   /* Saved register offsets.  */
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
+};
+
+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;
+};
+
+/* 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);
+  }
 };
 
-static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
-				       CORE_ADDR prologue_start,
-				       CORE_ADDR prologue_end,
-				       struct arm_prologue_cache *cache);
+} /* 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.  */
@@ -364,8 +395,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 +408,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 +419,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 +437,20 @@ 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;
+
+  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;
     }
 
@@ -458,7 +489,7 @@ 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.  */
@@ -466,7 +497,7 @@ arm_pc_is_thumb (struct gdbarch *gdbarch
 }
 
 /* Determine if the address specified equals any of these magic return
-   values, called EXC_RETURN, defined by the ARM v6-M and v7-M
+   values, called EXC_RETURN, defined by the ARM v6-M, v7-M and v8-M
    architectures.
 
    From ARMv6-M Reference Manual B1.5.8
@@ -497,13 +528,25 @@ 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.
+
+   In the ARMv8-M Architecture Technical Reference also adds
+   for implementations without the Security Extension:
+
+   EXC_RETURN    Condition
+   0xFFFFFFB0    Return to Handler mode.
+   0xFFFFFFB8    Return to Thread mode using the main stack.
+   0xFFFFFFBC    Return to Thread mode using the process stack.  */
 
 static int
 arm_m_addr_is_magic (CORE_ADDR addr)
 {
   switch (addr)
     {
+      /* Values from ARMv8-M Architecture Technical Reference.  */
+      case 0xffffffb0:
+      case 0xffffffb8:
+      case 0xffffffbc:
       /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
 	 the exception return behavior.  */
       case 0xffffffe1:
@@ -930,7 +973,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.  */
@@ -1083,9 +1126,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;
@@ -1114,7 +1156,7 @@ thumb_analyze_prologue (struct gdbarch *
 
   for (i = 0; i < 16; i++)
     if (stack.find_reg (gdbarch, i, &offset))
-      cache->saved_regs[i].addr = offset;
+      cache->saved_regs[i].set_addr (offset);
 
   return unrecognized_pc;
 }
@@ -1350,7 +1392,7 @@ arm_skip_prologue (struct gdbarch *gdbar
 	  && (cust == NULL
 	      || COMPUNIT_PRODUCER (cust) == NULL
 	      || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
-	      || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
+	      || producer_is_llvm (COMPUNIT_PRODUCER (cust))))
 	return post_prologue_pc;
 
       if (post_prologue_pc != 0)
@@ -1370,8 +1412,9 @@ arm_skip_prologue (struct gdbarch *gdbar
 	    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;
@@ -1396,7 +1439,8 @@ arm_skip_prologue (struct gdbarch *gdbar
   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* */
@@ -1472,6 +1516,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,7 +1549,8 @@ 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;
@@ -1511,8 +1576,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 +1586,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,16 +1651,12 @@ 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?,
@@ -1726,12 +1782,11 @@ 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 (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;
 }
@@ -1763,7 +1818,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);
 
@@ -1811,24 +1866,25 @@ arm_scan_prologue (struct frame_info *th
 
       /* AAPCS does not use a frame register, so we can abort here.  */
       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_AAPCS)
-        return;
+	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 *
@@ -1852,8 +1908,9 @@ arm_make_prologue_cache (struct frame_in
   /* 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 ()
+				       + cache->prev_sp);
 
   return cache;
 }
@@ -1969,7 +2026,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 +2043,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
@@ -2160,7 +2218,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,7 +2303,7 @@ 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);
       if (data != NULL)
@@ -2265,7 +2323,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 +2332,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;
 		}
 	    }
@@ -2311,14 +2369,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 +2411,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 +2440,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 +2455,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 +2475,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 +2506,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 +2521,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 +2541,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 +2558,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 +2570,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 +2588,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 +2601,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 +2613,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 +2626,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;
 
@@ -2679,6 +2737,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,
@@ -2705,8 +2764,9 @@ arm_make_epilogue_frame_cache (struct fr
   /* 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 ()
+				       + cache->prev_sp);
 
   return cache;
 }
@@ -2781,6 +2841,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,
@@ -2902,6 +2963,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,
@@ -2920,32 +2982,129 @@ arm_m_exception_cache (struct frame_info
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct arm_prologue_cache *cache;
+  CORE_ADDR lr;
+  CORE_ADDR sp;
   CORE_ADDR unwound_sp;
   LONGEST xpsr;
+  uint32_t exc_return;
+  uint32_t process_stack_used;
+  uint32_t extended_frame_used;
+  uint32_t secure_stack_used;
 
   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
   cache->saved_regs = trad_frame_alloc_saved_regs (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).  */
+
+  lr = get_frame_register_unsigned (this_frame, ARM_LR_REGNUM);
+  sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
+
+  /* Check EXC_RETURN indicator bits.  */
+  exc_return = (((lr >> 28) & 0xf) == 0xf);
+
+  /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used.  */
+  process_stack_used = ((lr & (1 << 2)) != 0);
+  if (exc_return && process_stack_used)
+    {
+      /* Thread (process) stack used.
+	 Potentially this could be other register defined by target, but PSP
+	 can be considered a standard name for the "Process Stack Pointer".
+	 To be fully aware of system registers like MSP and PSP, these could
+	 be added to a separate XML arm-m-system-profile that is valid for
+	 ARMv6-M and ARMv7-M architectures. Also to be able to debug eg a
+	 corefile off-line, then these registers must be defined by GDB,
+	 and also be included in the corefile regsets.  */
+
+      int psp_regnum = user_reg_map_name_to_regnum (gdbarch, "psp", -1);
+      if (psp_regnum == -1)
+	{
+	  /* Thread (process) stack could not be fetched,
+	     give warning and exit.  */
+
+	  warning (_("no PSP thread stack unwinding supported."));
+
+	  /* Terminate any further stack unwinding by refer to self.  */
+	  cache->prev_sp = sp;
+	  return cache;
+	}
+      else
+	{
+	  /* Thread (process) stack used, use PSP as SP.  */
+	  unwound_sp = get_frame_register_unsigned (this_frame, psp_regnum);
+	}
+    }
+  else
+    {
+      /* Main stack used, use MSP as SP.  */
+      unwound_sp = sp;
+    }
 
   /* 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;
+  cache->saved_regs[0].set_addr (unwound_sp);
+  cache->saved_regs[1].set_addr (unwound_sp + 4);
+  cache->saved_regs[2].set_addr (unwound_sp + 8);
+  cache->saved_regs[3].set_addr (unwound_sp + 12);
+  cache->saved_regs[ARM_IP_REGNUM].set_addr (unwound_sp + 16);
+  cache->saved_regs[ARM_LR_REGNUM].set_addr (unwound_sp + 20);
+  cache->saved_regs[ARM_PC_REGNUM].set_addr (unwound_sp + 24);
+  cache->saved_regs[ARM_PS_REGNUM].set_addr (unwound_sp + 28);
+
+  /* Check EXC_RETURN bit FTYPE if extended stack frame (FPU regs stored)
+     type used.  */
+  extended_frame_used = ((lr & (1 << 4)) == 0);
+  if (exc_return && extended_frame_used)
+    {
+      int i;
+      int fpu_regs_stack_offset;
+
+      /* This code does not take into account the lazy stacking, see "Lazy
+	 context save of FP state", in B1.5.7, also ARM AN298, supported
+	 by Cortex-M4F architecture.
+	 To fully handle this the FPCCR register (Floating-point Context
+	 Control Register) needs to be read out and the bits ASPEN and LSPEN
+	 could be checked to setup correct lazy stacked FP registers.
+	 This register is located at address 0xE000EF34.  */
+
+      /* Extended stack frame type used.  */
+      fpu_regs_stack_offset = unwound_sp + 0x20;
+      for (i = 0; i < 16; i++)
+	{
+	  cache->saved_regs[ARM_D0_REGNUM + i].set_addr (fpu_regs_stack_offset);
+	  fpu_regs_stack_offset += 4;
+	}
+      cache->saved_regs[ARM_FPSCR_REGNUM].set_addr (unwound_sp + 0x60);
+
+      /* Offset 0x64 is reserved.  */
+      cache->prev_sp = unwound_sp + 0x68;
+    }
+  else
+    {
+      /* Standard stack frame type used.  */
+      cache->prev_sp = unwound_sp + 0x20;
+    }
+
+  /* Check EXC_RETURN bit S if Secure or Non-secure stack used.  */
+  secure_stack_used = ((lr & (1 << 6)) != 0);
+  if (exc_return && secure_stack_used)
+    {
+      /* ARMv8-M Exception and interrupt handling is not considered here.
+	 In the ARMv8-M architecture also EXC_RETURN bit S is controlling if
+	 the Secure or Non-secure stack was used. To separate Secure and
+	 Non-secure stacks, processors that are based on the ARMv8-M
+	 architecture support 4 stack pointers: MSP_S, PSP_S, MSP_NS, PSP_NS.
+	 In addition, a stack limit feature is provided using stack limit
+	 registers (accessible using MSR and MRS instructions) in Privileged
+	 level.  */
+    }
 
   /* 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;
@@ -3016,6 +3175,7 @@ arm_m_exception_unwind_sniffer (const st
 
 struct frame_unwind arm_m_exception_unwind =
 {
+  "arm m exception",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   arm_m_exception_this_id,
@@ -3305,7 +3465,7 @@ 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.  */
@@ -3392,7 +3552,7 @@ 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))
@@ -3450,7 +3610,7 @@ 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.  */
@@ -3496,12 +3656,12 @@ 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 (!field_is_static (&t->field (i)))
+	      sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (),
 						      base_type);
 	    if (sub_count == -1)
 	      return -1;
@@ -3525,9 +3685,9 @@ 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;
@@ -3582,7 +3742,7 @@ arm_vfp_abi_for_function (struct gdbarch
   struct gdbarch_tdep *tdep = 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)
@@ -3614,7 +3774,7 @@ arm_push_dummy_call (struct gdbarch *gdb
   /* 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)
+  if (ftype->code () == TYPE_CODE_PTR)
     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
 
@@ -3636,10 +3796,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++;
     }
@@ -3659,7 +3819,7 @@ arm_push_dummy_call (struct gdbarch *gdb
       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);
+      typecode = arg_type->code ();
       val = value_contents (args[argnum]);
 
       align = type_align (arg_type);
@@ -3757,7 +3917,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))
@@ -3785,12 +3945,11 @@ arm_push_dummy_call (struct gdbarch *gdb
 		 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 +3961,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;
 	    }
@@ -3918,8 +4075,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;
     }
 
@@ -3957,8 +4114,8 @@ 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;
     }
 
@@ -3989,7 +4146,7 @@ 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
+	  && t->code () == TYPE_CODE_FLT
 	  && gdbarch_tdep (gdbarch)->have_neon)
 	return arm_neon_double_type (gdbarch);
       else
@@ -4326,7 +4483,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 +4502,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 +4531,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 +4577,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 +4589,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 +4603,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 +4618,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 "
@@ -4486,9 +4642,8 @@ displaced_write_reg (struct regcache *re
     }
   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 +4684,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 +4698,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 +4715,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 +4728,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 +4738,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 +4757,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 +4775,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 +4787,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 +4823,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 +4848,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 +4857,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 +4871,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 +4883,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 +4911,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 +4931,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 +4939,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 +4958,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 +4989,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 +5018,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 +5047,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 +5087,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 +5100,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 +5119,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 +5138,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 +5161,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 +5169,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 +5180,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 +5199,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 +5209,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 +5220,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 +5257,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 +5273,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 +5308,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 +5323,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 +5356,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 +5364,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 +5380,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 +5390,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 +5404,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 +5417,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 +5456,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 +5465,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 +5488,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 +5517,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 +5540,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,10 +5556,9 @@ 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;
 
@@ -5488,7 +5613,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 +5650,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 +5669,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 +5723,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 +5736,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 +5770,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 +5782,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 +5853,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 +5878,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 +5913,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 +5947,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 +5964,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 +5991,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 +6013,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 +6040,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 +6061,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 +6096,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 +6123,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 +6152,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 +6171,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 +6196,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 +6207,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);
@@ -6185,13 +6296,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 +6311,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 +6333,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 +6346,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 +6360,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 +6372,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 +6389,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 +6405,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 +6451,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 +6465,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 +6523,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 +6550,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 +6570,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,7 +6589,7 @@ 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.  */
 
@@ -6499,7 +6601,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 +6647,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 +6683,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 +6740,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 +6751,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 +6784,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 +6805,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 +6840,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 +6886,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 +6926,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 +6944,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 +6959,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 +6973,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 +6983,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 +7008,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 +7023,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 +7055,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 +7078,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 +7092,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 +7117,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 +7134,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 +7152,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 +7177,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 +7193,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 +7202,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 +7221,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);
@@ -7236,7 +7325,7 @@ 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 +7404,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);
@@ -7443,15 +7532,14 @@ thumb_process_displaced_32bit_insn (stru
 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 +7556,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 +7576,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);
@@ -7527,7 +7613,8 @@ arm_process_displaced_insn (struct gdbar
 
 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);
   unsigned int i, len, offset;
@@ -7539,20 +7626,14 @@ arm_displaced_init_closure (struct gdbar
   /* 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 +7655,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 +7664,12 @@ 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)
 {
-  arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
+  arm_displaced_step_copy_insn_closure *dsc
+    = (arm_displaced_step_copy_insn_closure *) dsc_;
 
   if (dsc->cleanup)
     dsc->cleanup (gdbarch, regs, dsc);
@@ -7643,9 +7724,10 @@ 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)
     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
 
   return default_print_insn (memaddr, info);
@@ -7803,7 +7885,7 @@ arm_extract_return_value (struct type *t
   struct gdbarch *gdbarch = regs->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
-  if (TYPE_CODE_FLT == TYPE_CODE (type))
+  if (TYPE_CODE_FLT == type->code ())
     {
       switch (gdbarch_tdep (gdbarch)->fp_model)
 	{
@@ -7838,12 +7920,12 @@ arm_extract_return_value (struct type *t
 	  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)
     {
       /* If the type is a plain integer, then the access is
 	 straight-forward.  Otherwise we have to play around a bit
@@ -7868,8 +7950,8 @@ 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).  */
+	 been stored to word-aligned memory and then loaded into 
+	 registers with 32-bit load instruction(s).  */
       int len = TYPE_LENGTH (type);
       int regno = ARM_A1_REGNUM;
       bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
@@ -7899,12 +7981,12 @@ 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_CODE_ARRAY == code && type->is_vector ())
     {
       /* Vector values should be returned using ARM registers if they
 	 are not over 16 bytes.  */
@@ -7968,13 +8050,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)
@@ -8012,7 +8093,7 @@ 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)
+  if (type->code () == TYPE_CODE_FLT)
     {
       gdb_byte buf[ARM_FP_REGISTER_SIZE];
 
@@ -8042,12 +8123,12 @@ arm_store_return_value (struct type *typ
 	  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)
     {
       if (TYPE_LENGTH (type) <= 4)
 	{
@@ -8078,8 +8159,8 @@ 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).  */
+	 been stored to word-aligned memory and then loaded into 
+	 registers with 32-bit load instruction(s).  */
       int len = TYPE_LENGTH (type);
       int regno = ARM_A1_REGNUM;
       bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
@@ -8143,15 +8224,15 @@ 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)
     {
       if (tdep->struct_return == pcc_struct_return
 	  || arm_return_in_memory (gdbarch, valtype))
 	return RETURN_VALUE_STRUCT_CONVENTION;
     }
-  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;
@@ -8267,7 +8348,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"
@@ -8324,31 +8405,14 @@ 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)
     return;
 
   /* Update the architecture.  */
-  gdbarch_info_init (&info);
-
+  gdbarch_info info;
   if (!gdbarch_update_p (info))
     internal_error (__FILE__, __LINE__, _("could not update architecture"));
 }
@@ -8472,7 +8536,7 @@ 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, ",");
@@ -8765,9 +8829,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;
@@ -8869,12 +8934,14 @@ arm_gdbarch_init (struct gdbarch_info in
   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;
+  int vfp_register_count = 0;
+  bool have_vfp_pseudos = false, have_neon_pseudos = false;
+  bool have_wmmx_registers = false;
+  bool have_neon = false;
+  bool have_fpa_registers = true;
   const struct target_desc *tdesc = info.target_desc;
 
   /* If we have an object to base this architecture on, try to determine
@@ -8991,7 +9058,7 @@ arm_gdbarch_init (struct gdbarch_info in
 		  && (attr_arch == TAG_CPU_ARCH_V6_M
 		      || attr_arch == TAG_CPU_ARCH_V6S_M
 		      || attr_profile == 'M'))
-		is_m = 1;
+		is_m = true;
 #endif
 	    }
 
@@ -9049,36 +9116,33 @@ 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)
-	{
-	  tdesc_data_cleanup (tdesc_data);
-	  return NULL;
-	}
+	return NULL;
 
       feature = tdesc_find_feature (tdesc,
 				    "org.gnu.gdb.arm.fpa");
@@ -9086,16 +9150,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 +9172,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 +9211,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 +9221,13 @@ 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;
 
 	  if (tdesc_unnumbered_register (feature, "s0") == 0)
-	    have_vfp_pseudos = 1;
+	    have_vfp_pseudos = true;
 
 	  vfp_register_count = i;
 
@@ -9185,18 +9240,15 @@ 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_neon_pseudos = true;
 
-	      have_neon = 1;
+	      have_neon = true;
 	    }
 	}
     }
@@ -9228,11 +9280,7 @@ 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);
@@ -9434,11 +9482,11 @@ arm_gdbarch_init (struct gdbarch_info in
       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
     }
 
-  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));
 
       /* Override tdesc_register_type to adjust the types of VFP
 	 registers for NEON.  */
@@ -9468,7 +9516,21 @@ arm_dump_tdep (struct gdbarch *gdbarch,
   if (tdep == NULL)
     return;
 
-  fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
+  fprintf_unfiltered (file, _("arm_dump_tdep: fp_model = %i\n"),
+		      (int) tdep->fp_model);
+  fprintf_unfiltered (file, _("arm_dump_tdep: have_fpa_registers = %i\n"),
+		      (int) tdep->have_fpa_registers);
+  fprintf_unfiltered (file, _("arm_dump_tdep: have_wmmx_registers = %i\n"),
+		      (int) tdep->have_wmmx_registers);
+  fprintf_unfiltered (file, _("arm_dump_tdep: vfp_register_count = %i\n"),
+		      (int) tdep->vfp_register_count);
+  fprintf_unfiltered (file, _("arm_dump_tdep: have_vfp_pseudos = %i\n"),
+		      (int) tdep->have_vfp_pseudos);
+  fprintf_unfiltered (file, _("arm_dump_tdep: have_neon_pseudos = %i\n"),
+		      (int) tdep->have_neon_pseudos);
+  fprintf_unfiltered (file, _("arm_dump_tdep: have_neon = %i\n"),
+		      (int) tdep->have_neon);
+  fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx\n"),
 		      (unsigned long) tdep->lowest_pc);
 }
 
@@ -9476,11 +9538,13 @@ arm_dump_tdep (struct gdbarch *gdbarch,
 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 +9554,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,13 +9562,13 @@ _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_basic_prefix_cmd ("arm", no_class,
+			_("Various ARM-specific commands."),
+			&setarmcmdlist, 0, &setlist);
+
+  add_show_prefix_cmd ("arm", no_class,
+		       _("Various ARM-specific commands."),
+		       &showarmcmdlist, 0, &showlist);
 
 
   arm_disassembler_options = xstrdup ("reg-names-std");
@@ -9512,14 +9576,14 @@ _initialize_arm_tdep (void)
     = &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];
@@ -9601,6 +9665,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 +9682,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
@@ -9689,9 +9754,9 @@ sbo_sbz (uint32_t insn, uint32_t bit_num
   while (ones)
     {
       if (!(ones & sbo))
-        {
-          return 0;
-        }
+	{
+	  return 0;
+	}
       ones = ones >> 1;
     }
   return 1;
@@ -9719,7 +9784,7 @@ typedef enum
 
 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)
+		 uint32_t *record_buf_mem, arm_record_strx_t str_type)
 {
 
   struct regcache *reg_cache = arm_insn_r->regcache;
@@ -9738,36 +9803,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 +9844,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 +9884,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 +9920,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;
@@ -9903,14 +9968,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 +9985,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 +9998,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 +10023,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 +10144,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;
+	}
 
     }
 
@@ -10238,20 +10303,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)
     {
@@ -10456,21 +10521,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;
@@ -10688,235 +10753,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);
@@ -11036,10 +11101,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);
 
@@ -11080,62 +11145,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);
@@ -11360,189 +11425,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);
@@ -11564,40 +11629,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);
@@ -11622,23 +11687,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
+	{
+	  printf_unfiltered (_("no syscall record support\n"));
+	  return -1;
+	}
     }
   else if (bits_24_25 == 0x02)
     {
@@ -11793,28 +11858,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 +11895,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 +11924,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;
 }
@@ -11899,7 +11964,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;
 }
@@ -11955,7 +12020,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;
 }
@@ -12085,7 +12150,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;
 }
@@ -12117,12 +12182,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 +12199,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
+	  {
+	    printf_unfiltered (_("no syscall record support\n"));
+	    return -1;
+	  }
     }
 
   /* B (1), conditional branch is automatically taken care in process_record,
@@ -12169,7 +12234,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;
 }
@@ -12226,77 +12291,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;
 }
 
@@ -12323,19 +12388,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 +12408,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;
 }
 
@@ -12442,7 +12507,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;
 }
 
@@ -12462,7 +12527,7 @@ 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;
 }
 
@@ -12482,16 +12547,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,7 +12567,7 @@ 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;
 }
 
@@ -12536,29 +12601,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 +12631,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,9 +12655,9 @@ 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;
 }
 
@@ -12615,7 +12680,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;
     }
 
@@ -12634,7 +12699,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;
 }
 
@@ -12671,7 +12736,7 @@ 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;
 }
 
@@ -12714,151 +12779,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,9 +12933,9 @@ 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;
 }
 
@@ -12888,91 +12953,91 @@ 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;
@@ -13020,7 +13085,7 @@ extract_arm_insn (abstract_memory_reader
   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, 
+			   insn_size, 
 			   gdbarch_byte_order_for_code (insn_record->gdbarch));
   return 0;
 }
@@ -13173,7 +13238,6 @@ 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);
@@ -13237,6 +13301,60 @@ arm_record_test (void)
     SELF_CHECK (arm_record.arm_regs[0] == 7);
   }
 }
+
+/* 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;
+      cache.saved_regs = trad_frame_alloc_saved_regs (gdbarch);
+
+      arm_analyze_prologue (gdbarch, 0, sizeof (insns) - 1, &cache, mem_reader);
+    }
+}
+
 } // namespace selftests
 #endif /* GDB_SELF_TEST */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-tdep.h ./gdb/arm-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common target dependent code for GDB on ARM systems.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -95,19 +95,19 @@ struct gdbarch_tdep
 
   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;	/* Does the target report the FPA registers?  */
+  bool have_wmmx_registers;	/* 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
+  bool have_vfp_pseudos;	/* Are we synthesizing the single precision
 				   VFP registers?  */
-  int have_neon_pseudos;	/* Are we synthesizing the quad precision
+  bool have_neon_pseudos;	/* Are we synthesizing the quad precision
 				   NEON registers?  Requires
 				   have_vfp_pseudos.  */
-  int have_neon;		/* Do we have a NEON unit?  */
+  bool have_neon;		/* Do we have a NEON unit?  */
 
-  int is_m;			/* Does the target follow the "M" profile.  */
+  bool is_m;			/* Does the target follow the "M" profile.  */
   CORE_ADDR lowest_pc;		/* Lowest address at which instructions 
 				   will appear.  */
 
@@ -149,7 +149,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 +195,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 +216,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,16 +235,17 @@ 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);
@@ -262,7 +264,7 @@ int arm_is_thumb (struct regcache *regca
 int arm_frame_is_thumb (struct frame_info *frame);
 
 extern void arm_displaced_step_fixup (struct gdbarch *,
-				      struct displaced_step_closure *,
+				      displaced_step_copy_insn_closure *,
 				      CORE_ADDR, CORE_ADDR, struct regcache *);
 
 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
@@ -273,7 +275,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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-wince-tdep.c ./gdb/arm-wince-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/arm-wince-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/arm-wince-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Target-dependent code for Windows CE running on ARM processors,
    for GDB.
 
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
+   Copyright (C) 2007-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/async-event.c ./gdb/async-event.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/async-event.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/async-event.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,369 @@
+/* Async events for the GDB event loop.
+   Copyright (C) 1999-2021 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"
+
+/* 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`",
+			   async_handler_ptr->name);
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/async-event.h ./gdb/async-event.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/async-event.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/async-event.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,90 @@
+/* Async events for the GDB event loop.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auto-load.c ./gdb/auto-load.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auto-load.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/auto-load.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB routines for supporting auto-loaded scripts.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -61,8 +61,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.  */
 
@@ -93,9 +94,9 @@ show_auto_load_gdb_scripts (struct ui_fi
 		    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;
@@ -170,7 +171,7 @@ static char *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.  */
@@ -183,8 +184,7 @@ auto_load_expand_dir_vars (const char *s
   substitute_path_component (&s, "$debugdir", debug_file_directory);
 
   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,10 +198,8 @@ 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);
 
   auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
   size_t len = auto_load_safe_path_vec.size ();
@@ -222,23 +220,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));
 	}
@@ -338,10 +331,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 +346,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 +418,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,45 +433,28 @@ 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\"."),
@@ -498,11 +463,26 @@ file_is_auto_load_safe (const char *file
 
   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 (_("\
 To enable execution of this file add\n\
@@ -515,11 +495,11 @@ For more information about this security
 \"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;
+		       home_config.c_str (), home_config.c_str ());
+      advice_printed = true;
     }
 
-  return 0;
+  return false;
 }
 
 /* For scripts specified in .debug_gdb_scripts, multiple objfiles may load
@@ -529,13 +509,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,8 +534,8 @@ 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;
 };
@@ -567,14 +544,6 @@ struct loaded_script
 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);
-}
-
 /* Get the current autoload data.  If none is found yet, add it now.  This
    function always returns a valid object.  */
 
@@ -621,14 +590,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 +621,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 +670,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.  */
 
@@ -766,9 +737,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 \"%s\" %s.",
+			  debugfile,
+			  input != nullptr ? "exists" : "does not exist");
 
   std::string debugfile_holder;
   if (!input)
@@ -779,10 +751,14 @@ auto_load_objfile_script_1 (struct objfi
       std::vector<gdb::unique_xmalloc_ptr<char>> vec
 	= auto_load_expand_dir_vars (auto_load_dir);
 
-      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);
+
+      /* 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 +767,13 @@ 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 \"%s\" %s.",
+				  debugfile,
+				  (input != nullptr
+				   ? "exists"
+				   : "does not exist"));
+
 	  if (input != NULL)
 	    break;
 	}
@@ -803,15 +781,13 @@ 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.  */
@@ -867,10 +843,11 @@ auto_load_objfile_script (struct objfile
 	{
 	  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_debug_printf
+	    ("auto-load: Stripped .exe suffix, retrying with \"%s\".",
+	     realname.get ());
+
 	  auto_load_objfile_script_1 (objfile, realname.get (), language);
 	}
     }
@@ -887,7 +864,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.  */
@@ -914,13 +890,12 @@ source_script_file (struct auto_load_psp
 
   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 +912,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 +937,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 +990,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)
@@ -1292,7 +1265,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 +1277,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 (),
@@ -1454,21 +1427,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 +1440,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 +1465,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 +1486,27 @@ 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;
   const char *suffix;
 
-  gdb::observers::new_objfile.attach (auto_load_new_objfile);
-
+  gdb::observers::new_objfile.attach (auto_load_new_objfile,
+                                      auto_load_new_objfile_observer_token,
+                                      "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."), _("\
@@ -1648,7 +1615,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auto-load.h ./gdb/auto-load.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auto-load.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/auto-load.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB routines for supporting auto-loaded scripts.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,12 +25,31 @@ 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,
@@ -44,11 +63,19 @@ extern struct cmd_list_element **auto_lo
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auxv.c ./gdb/auxv.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auxv.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/auxv.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Auxiliary vector support for GDB, the GNU debugger.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -192,8 +192,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)
 	{
@@ -248,34 +248,65 @@ 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 ());
+/* 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, gdb_byte **readptr,
+		    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 = TYPE_LENGTH (ptr_type);
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   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, gdb_byte **readptr,
+		    gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
+{
+  struct gdbarch *gdbarch = target_gdbarch ();
+  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
+  const int sizeof_auxv_type = TYPE_LENGTH (ptr_type);
+
+  return generic_auxv_parse (gdbarch, readptr, endptr, typep, valp,
+			     sizeof_auxv_type);
+}
+
+/* See auxv.h.  */
+
+int
+svr4_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr,
+		 gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
+{
+  struct type *int_type = builtin_type (gdbarch)->builtin_int;
+  const int sizeof_auxv_type = TYPE_LENGTH (int_type);
+
+  return generic_auxv_parse (gdbarch, readptr, endptr, typep, valp,
+			     sizeof_auxv_type);
+}
+
 /* 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.
@@ -289,7 +320,8 @@ target_auxv_parse (gdb_byte **readptr,
   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 current_inferior ()->top_target ()->auxv_parse (readptr, endptr,
+							 typep, valp);
 }
 
 
@@ -458,9 +490,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);
@@ -533,11 +577,12 @@ 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,
+				     current_inferior ()->top_target ());
 
       if (ents < 0)
 	error (_("No auxiliary vector found, or failed reading it."));
@@ -546,15 +591,16 @@ 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::executable_changed.attach (invalidate_auxv_cache, "auxv");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auxv.h ./gdb/auxv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/auxv.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/auxv.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Auxiliary vector support for GDB, the GNU debugger.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,12 +25,27 @@
 /* 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.
 
+   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, gdb_byte **readptr,
 			       gdb_byte *endptr, CORE_ADDR *typep,
 			       CORE_ADDR *valp);
 
+/* 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 svr4_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr,
+			    gdb_byte *endptr, CORE_ADDR *typep,
+			    CORE_ADDR *valp);
+
 /* 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.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/avr-tdep.c ./gdb/avr-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/avr-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/avr-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Atmel AVR, for GDB.
 
-   Copyright (C) 1996-2020 Free Software Foundation, Inc.
+   Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -185,7 +185,7 @@ 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
@@ -314,8 +314,8 @@ avr_address_to_pointer (struct gdbarch *
 			      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 (type)->code () == TYPE_CODE_FUNC
+	   || TYPE_TARGET_TYPE (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.  */
@@ -345,8 +345,8 @@ 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
+  else if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC
+	   || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_METHOD
 	   || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)))
     {
       /* A code pointer is word (16 bits) addressed so we shift it up
@@ -363,7 +363,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 +382,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;
@@ -405,7 +408,7 @@ avr_pseudo_register_read (struct gdbarch
 
 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;
 
@@ -430,87 +433,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 +569,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 +627,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 */
+	 Which is a pushes count in `-mcall-prologues' mode */
       num_pushes = AVR_MAX_PUSHES - (i - BMSYMBOL_VALUE_ADDRESS (msymbol)) / 2;
 
       if (num_pushes > AVR_MAX_PUSHES)
-        {
-          fprintf_unfiltered (gdb_stderr, _("Num pushes too large: %d\n"),
-                              num_pushes);
-          num_pushes = 0;
-        }
+	{
+	  fprintf_unfiltered (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 +705,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 +735,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
@@ -747,17 +750,17 @@ avr_scan_prologue (struct gdbarch *gdbar
     {
       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 += gdbarch_tdep (gdbarch)->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 +786,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 +816,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 +829,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 +864,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 +892,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,9 +938,9 @@ 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)
+  if ((valtype->code () == TYPE_CODE_STRUCT
+       || valtype->code () == TYPE_CODE_UNION
+       || valtype->code () == TYPE_CODE_ARRAY)
       && TYPE_LENGTH (valtype) > 8)
     return RETURN_VALUE_STRUCT_CONVENTION;
 
@@ -974,7 +977,7 @@ avr_return_value (struct gdbarch *gdbarc
 
 static struct avr_unwind_cache *
 avr_frame_unwind_cache (struct frame_info *this_frame,
-                        void **this_prologue_cache)
+			void **this_prologue_cache)
 {
   CORE_ADDR start_pc, current_pc;
   ULONGEST prev_sp;
@@ -1006,20 +1009,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,20 +1037,21 @@ 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);
+  info->saved_regs[AVR_SP_REGNUM].set_value (info->prev_sp
+					     - 1 + tdep->call_length);
 
   return info;
 }
@@ -1077,8 +1081,8 @@ avr_unwind_sp (struct gdbarch *gdbarch,
 
 static void
 avr_frame_this_id (struct frame_info *this_frame,
-                   void **this_prologue_cache,
-                   struct frame_id *this_id)
+		   void **this_prologue_cache,
+		   struct frame_id *this_id)
 {
   struct avr_unwind_cache *info
     = avr_frame_unwind_cache (this_frame, this_prologue_cache);
@@ -1109,8 +1113,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
@@ -1129,19 +1133,19 @@ avr_frame_prev_register (struct frame_in
 	  struct gdbarch *gdbarch = get_frame_arch (this_frame);
 	  struct gdbarch_tdep *tdep = 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 +1154,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,
@@ -1261,8 +1266,8 @@ 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)
 {
@@ -1276,13 +1281,13 @@ avr_push_dummy_call (struct gdbarch *gdb
   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++)
@@ -1295,30 +1300,30 @@ avr_push_dummy_call (struct gdbarch *gdb
       int len = TYPE_LENGTH (type);
 
       /* 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 +1374,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 +1391,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 +1404,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.  */
@@ -1556,7 +1562,8 @@ avr_io_reg_read_command (const char *arg
 
   /* 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");
+    = target_read_alloc (current_inferior ()->top_target (),
+			 TARGET_OBJECT_AVR, "avr.io_reg");
 
   if (!buf)
     {
@@ -1587,18 +1594,19 @@ 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,
+	{
+	  fprintf_unfiltered (gdb_stderr,
 			      _("ERR: error reading avr.io_reg:%x,%x\n"),
 			      i, j);
-          return;
-        }
+	  return;
+	}
 
       const char *p = (const char *) buf->data ();
       for (int k = i; k < (i + j); k++)
@@ -1616,8 +1624,9 @@ 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);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax_cxx_compile_stdcxx.m4 ./gdb/ax_cxx_compile_stdcxx.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax_cxx_compile_stdcxx.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ax_cxx_compile_stdcxx.m4	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2020 Free Software Foundation, Inc.
+# Copyright (c) 2016-2021 Free Software Foundation, Inc.
 #
 # Originally based on the AX_CXX_COMPILE_STDCXX macro found at the url
 # below.
@@ -94,6 +94,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
@@ -118,6 +122,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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax-gdb.c ./gdb/ax-gdb.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax-gdb.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ax-gdb.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB-specific functions for operating on agent expressions.
 
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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 (field_is_static (&type->field (i)))
 	{
 	  gen_static_field (ax, &value, type, i);
 	  if (value.optimized_out)
@@ -327,8 +219,8 @@ gen_trace_static_fields (struct agent_ex
 	    {
 	    case axs_lvalue_memory:
 	      {
-	        /* Initialize the TYPE_LENGTH if it is a typedef.  */
-	        check_typedef (value.type);
+		/* Initialize the TYPE_LENGTH if it is a typedef.  */
+		check_typedef (value.type);
 		ax_const_l (ax, TYPE_LENGTH (value.type));
 		ax_simple (ax, aop_trace);
 	      }
@@ -362,7 +254,7 @@ gen_traced_pop (struct agent_expr *ax, s
 {
   int string_trace = 0;
   if (ax->trace_string
-      && TYPE_CODE (value->type) == TYPE_CODE_PTR
+      && value->type->code () == TYPE_CODE_PTR
       && c_textual_element_type (check_typedef (TYPE_TARGET_TYPE (value->type)),
 				 's'))
     string_trace = 1;
@@ -396,10 +288,10 @@ 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.  */
+		 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));
 	      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,7 +336,7 @@ static void
 gen_sign_extend (struct agent_expr *ax, struct type *type)
 {
   /* Do we need to sign-extend this?  */
-  if (!TYPE_UNSIGNED (type))
+  if (!type->is_unsigned ())
     ax_ext (ax, TYPE_LENGTH (type) * TARGET_CHAR_BIT);
 }
 
@@ -458,7 +350,7 @@ gen_extend (struct agent_expr *ax, struc
   int bits = TYPE_LENGTH (type) * 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));
 }
 
 
@@ -474,10 +366,10 @@ gen_fetch (struct agent_expr *ax, struct
       ax_trace_quick (ax, TYPE_LENGTH (type));
     }
 
-  if (TYPE_CODE (type) == TYPE_CODE_RANGE)
+  if (type->code () == TYPE_CODE_RANGE)
     type = TYPE_TARGET_TYPE (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_REF:
@@ -487,7 +379,7 @@ 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?  */
+	 many bytes long is it?  */
       switch (TYPE_LENGTH (type))
 	{
 	case 8 / TARGET_CHAR_BIT:
@@ -520,7 +412,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 ());
     }
 }
 
@@ -685,16 +577,16 @@ gen_var_ref (struct agent_expr *ax, stru
 
     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);
       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,
@@ -775,10 +667,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 +686,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 +723,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,7 +732,7 @@ 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);
@@ -853,7 +745,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;
@@ -871,8 +763,8 @@ type_wider_than (struct type *type1, str
 {
   return (TYPE_LENGTH (type1) > TYPE_LENGTH (type2)
 	  || (TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
-	      && TYPE_UNSIGNED (type1)
-	      && !TYPE_UNSIGNED (type2)));
+	      && type1->is_unsigned ()
+	      && !type2->is_unsigned ()));
 }
 
 
@@ -899,7 +791,7 @@ gen_conversion (struct agent_expr *ax, s
      then we need to extend.  */
   else if (TYPE_LENGTH (to) == TYPE_LENGTH (from))
     {
-      if (TYPE_UNSIGNED (from) != TYPE_UNSIGNED (to))
+      if (from->is_unsigned () != to->is_unsigned ())
 	gen_extend (ax, to);
     }
 
@@ -907,7 +799,7 @@ gen_conversion (struct agent_expr *ax, s
      we need to zero out any possible sign bits.  */
   else if (TYPE_LENGTH (to) > TYPE_LENGTH (from))
     {
-      if (TYPE_UNSIGNED (to))
+      if (to->is_unsigned ())
 	gen_extend (ax, to);
     }
 }
@@ -943,14 +835,14 @@ gen_usual_arithmetic (struct agent_expr
 		      struct axs_value *value2)
 {
   /* Do the usual binary conversions.  */
-  if (TYPE_CODE (value1->type) == TYPE_CODE_INT
-      && TYPE_CODE (value2->type) == TYPE_CODE_INT)
+  if (value1->type->code () == TYPE_CODE_INT
+      && value2->type->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));
 
@@ -958,8 +850,8 @@ gen_usual_arithmetic (struct agent_expr
       gen_conversion (ax, value2->type, 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.  */
+	 generate the `swap' instructions if we're not actually going
+	 to do anything.  */
       if (is_nontrivial_conversion (value1->type, target))
 	{
 	  ax_simple (ax, aop_swap);
@@ -1003,13 +895,13 @@ gen_cast (struct agent_expr *ax, struct
   /* Dereference typedefs.  */
   type = check_typedef (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 +913,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 +925,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:
@@ -1070,7 +962,7 @@ gen_ptradd (struct agent_expr *ax, struc
 	    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 (value2->type->code () == TYPE_CODE_INT);
 
   gen_scale (ax, aop_mul, value1->type);
   ax_simple (ax, aop_add);
@@ -1086,7 +978,7 @@ gen_ptrsub (struct agent_expr *ax, struc
 	    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 (value2->type->code () == TYPE_CODE_INT);
 
   gen_scale (ax, aop_mul, value1->type);
   ax_simple (ax, aop_sub);
@@ -1158,12 +1050,11 @@ 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))
+  if ((value1->type->code () != TYPE_CODE_INT)
+      || (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, value1->type->is_unsigned () ? op_unsigned : op);
   if (may_carry)
     gen_extend (ax, value1->type);	/* catch overflow */
   value->type = value1->type;
@@ -1175,8 +1066,8 @@ 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)
+  if (value->type->code () != TYPE_CODE_INT
+      && value->type->code () != TYPE_CODE_PTR)
     error (_("Invalid type of operand to `!'."));
 
   ax_simple (ax, aop_log_not);
@@ -1187,7 +1078,7 @@ 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)
+  if (value->type->code () != TYPE_CODE_INT)
     error (_("Invalid type of operand to `~'."));
 
   ax_simple (ax, aop_bit_not);
@@ -1214,9 +1105,9 @@ gen_deref (struct axs_value *value)
      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)
+  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 +1119,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);
@@ -1322,7 +1213,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 +1290,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;
@@ -1417,7 +1308,7 @@ gen_primitive_field (struct agent_expr *
 {
   /* Is this a bitfield?  */
   if (TYPE_FIELD_PACKED (type, fieldno))
-    gen_bitfield_ref (ax, value, TYPE_FIELD_TYPE (type, fieldno),
+    gen_bitfield_ref (ax, value, type->field (fieldno).type (),
 		      (offset * TARGET_CHAR_BIT
 		       + TYPE_FIELD_BITPOS (type, fieldno)),
 		      (offset * TARGET_CHAR_BIT
@@ -1428,7 +1319,7 @@ gen_primitive_field (struct agent_expr *
       gen_offset (ax, offset
 		  + TYPE_FIELD_BITPOS (type, fieldno) / TARGET_CHAR_BIT);
       value->kind = axs_lvalue_memory;
-      value->type = TYPE_FIELD_TYPE (type, fieldno);
+      value->type = type->field (fieldno).type ();
     }
 }
 
@@ -1444,7 +1335,7 @@ 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);
 
@@ -1456,7 +1347,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 (field_is_static (&type->field (i)))
 		{
 		  gen_static_field (ax, value, type, i);
 		  if (value->optimized_out)
@@ -1518,8 +1409,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,15 +1424,15 @@ 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,
@@ -1551,7 +1442,7 @@ gen_static_field (struct agent_expr *ax,
     {
       ax_const_l (ax, TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
       value->kind = axs_lvalue_memory;
-      value->type = TYPE_FIELD_TYPE (type, fieldno);
+      value->type = type->field (fieldno).type ();
       value->optimized_out = 0;
     }
   else
@@ -1578,23 +1469,23 @@ 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)
+  if (t->code () != TYPE_CODE_STRUCT
+      && t->code () != TYPE_CODE_UNION)
     internal_error (__FILE__, __LINE__,
 		    _("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);
 
       if (t_field_name && strcmp (t_field_name, fieldname) == 0)
 	{
-	  if (field_is_static (&TYPE_FIELD (t, i)))
+	  if (field_is_static (&t->field (i)))
 	    {
 	      gen_static_field (ax, value, t, i);
 	      if (value->optimized_out)
@@ -1623,13 +1514,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,9 +1533,9 @@ 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,
@@ -1666,9 +1557,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:
@@ -1685,6 +1576,150 @@ gen_aggregate_elt_ref (struct agent_expr
   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 (value_type (v));
+    }
+  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)
+{
+  gen_int_literal (ax, value, std::get<1> (m_storage),
+		   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 (__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);
+}
+
+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->len);
+  std::get<2> (m_storage)->generate_ax (exp, 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;
+}
+
 /* 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,54 +1731,72 @@ 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 (value_type (v)->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
@@ -1752,523 +1805,251 @@ gen_sizeof (struct expression *exp, unio
      replacing it with code that simply pushes its size.  */
   int start = ax->len;
 
-  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_const_l (ax, TYPE_LENGTH (value->type));
   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)
-{
-  /* 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;
-
-    case 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 ());
-
-      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);
+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);
 
-      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;
-
-    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;
-
-    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 = value_type (val);
+
+  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 = block_linkage_function (b);
+  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
+    = dynamic_cast<internalvar_operation *> (subop);
+  gdb_assert (ivarop != nullptr);
+
+  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
+    = dynamic_cast<internalvar_operation *> (subop);
+  gdb_assert (ivarop != nullptr);
+
+  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, value_type (val));
+}
 
-	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->len);
+  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->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 = 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->len);
+  ax_label (ax, if2, ax->len);
+  ax_const_l (ax, 1);
+  ax_label (ax, end, ax->len);
+  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,19 +2058,18 @@ 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
+      if (value1->type->code () == TYPE_CODE_INT
 	  && pointer_type (value2->type))
 	{
 	  /* Swap the values and proceed normally.  */
@@ -2297,7 +2077,7 @@ gen_expr_binop_rest (struct expression *
 	  gen_ptradd (ax, value, value2, value1);
 	}
       else if (pointer_type (value1->type)
-	       && TYPE_CODE (value2->type) == TYPE_CODE_INT)
+	       && value2->type->code () == TYPE_CODE_INT)
 	gen_ptradd (ax, value, value1, value2);
       else
 	gen_binop (ax, value, value1, value2,
@@ -2305,7 +2085,7 @@ gen_expr_binop_rest (struct expression *
       break;
     case BINOP_SUB:
       if (pointer_type (value1->type)
-	  && TYPE_CODE (value2->type) == TYPE_CODE_INT)
+	  && value2->type->code () == TYPE_CODE_INT)
 	gen_ptrsub (ax,value, value1, value2);
       else if (pointer_type (value1->type)
 	       && pointer_type (value2->type))
@@ -2351,12 +2131,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"));
 	      }
@@ -2421,6 +2201,105 @@ gen_expr_binop_rest (struct expression *
 		      _("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 (__FILE__, __LINE__,
+		    _("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 (!pointer_type (value->type))
+	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
@@ -2466,14 +2345,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->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 +2372,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;
   value.optimized_out = 0;
-  gen_expr (expr, &pc, ax.get (), &value);
+  expr->op->generate_ax (expr, ax.get (), &value);
 
   require_rvalue (ax.get (), &value);
 
@@ -2543,7 +2418,6 @@ 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;
 
@@ -2554,9 +2428,8 @@ gen_printf (CORE_ADDR scope, struct gdba
      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 +2457,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;
@@ -2641,7 +2514,7 @@ agent_command_1 (const char *exp, int ev
 			NULL, NULL);
       exp = skip_spaces (exp);
       if (exp[0] == ',')
-        {
+	{
 	  exp++;
 	  exp = skip_spaces (exp);
 	}
@@ -2743,8 +2616,9 @@ 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,
 	   _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax-gdb.h ./gdb/ax-gdb.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax-gdb.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ax-gdb.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* GDB-specific functions for operating on agent expressions
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,6 @@
 #include "ax.h"  /* For agent_expr_up.  */
 
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax-general.c ./gdb/ax-general.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax-general.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ax-general.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Functions for manipulating expressions designed to be executed on the agent
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -244,7 +244,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,7 +292,7 @@ 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;
@@ -446,18 +446,18 @@ ax_reg_mask (struct agent_expr *ax, int
 
       /* Grow the bit mask if necessary.  */
       if (byte >= ax->reg_mask_len)
-        {
-          /* It's not appropriate to double here.  This isn't a
+	{
+	  /* It's not appropriate to double here.  This isn't a
 	     string buffer.  */
-          int new_len = byte + 1;
-          unsigned char *new_reg_mask
+	  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;
-        }
+	  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;
+	}
 
       ax->reg_mask[byte] |= 1 << (reg % 8);
     }
@@ -517,8 +517,8 @@ ax_reqs (struct agent_expr *ax)
 	}
 
       /* 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,8 +539,8 @@ 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)
 	{
@@ -552,7 +552,7 @@ ax_reqs (struct agent_expr *ax)
 	    }
 
 	  /* 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,13 +562,13 @@ 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)
 	{
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax.h ./gdb/ax.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ax.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ax.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Definitions for expressions designed to be executed on the agent
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bcache.c ./gdb/bcache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bcache.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bcache.c	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
    Written by Fred Fish <fnf@cygnus.com>
    Rewritten by Jim Blandy <jimb@cygnus.com>
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bcache.h ./gdb/bcache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bcache.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bcache.h	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
    Written by Fred Fish <fnf@cygnus.com>
    Rewritten by Jim Blandy <jimb@cygnus.com>
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -142,31 +142,17 @@ 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
@@ -175,6 +161,16 @@ struct bcache
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfd-target.c ./gdb/bfd-target.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfd-target.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bfd-target.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Very simple "bfd" target, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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 target_section_table *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;
+  target_section_table m_table;
 };
 
 target_xfer_status
@@ -76,36 +75,27 @@ 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 target_section_table *
 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 ()
-{
-  xfree (m_table.sections);
 }
 
 target_ops *
-target_bfd_reopen (struct bfd *abfd)
+target_bfd_reopen (const gdb_bfd_ref_ptr &abfd)
 {
   return new target_bfd (abfd);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfd-target.h ./gdb/bfd-target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfd-target.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bfd-target.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Very simple "bfd" target, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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".  */
+struct target_ops *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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfin-linux-tdep.c ./gdb/bfin-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfin-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bfin-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Analog Devices Blackfin processor, for GDB.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    Contributed by Analog Devices, Inc.
 
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfin-tdep.c ./gdb/bfin-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfin-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bfin-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Analog Devices Blackfin processor, for GDB.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    Contributed by Analog Devices, Inc.
 
@@ -31,7 +31,7 @@
 #include "dis-asm.h"
 #include "sim-regno.h"
 #include "gdb/sim-bfin.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "symtab.h"
 #include "elf-bfd.h"
 #include "elf/bfin.h"
@@ -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,
@@ -510,7 +511,7 @@ bfin_push_dummy_call (struct gdbarch *gd
     {
       struct type *value_type = value_enclosing_type (args[i]);
 
-      total_len += (TYPE_LENGTH (value_type) + 3) & ~3;
+      total_len += align_up (TYPE_LENGTH (value_type), 4);
     }
 
   /* At least twelve bytes of stack space must be allocated for the function's
@@ -526,7 +527,7 @@ bfin_push_dummy_call (struct gdbarch *gd
     {
       struct type *value_type = value_enclosing_type (args[i]);
       struct type *arg_type = check_typedef (value_type);
-      int container_len = (TYPE_LENGTH (arg_type) + 3) & ~3;
+      int container_len = align_up (TYPE_LENGTH (arg_type), 4);
 
       sp -= container_len;
       write_memory (sp, value_contents (args[i]), container_len);
@@ -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;
@@ -759,7 +760,7 @@ 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
@@ -833,8 +834,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);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfin-tdep.h ./gdb/bfin-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bfin-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bfin-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Analog Devices Blackfin processor, for GDB.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    Contributed by Analog Devices, Inc.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/block.c ./gdb/block.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/block.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/block.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Block-related functions for the GNU debugger, GDB.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -62,7 +62,7 @@ block_gdbarch (const struct block *block
   if (BLOCK_FUNCTION (block) != NULL)
     return symbol_arch (BLOCK_FUNCTION (block));
 
-  return get_objfile_arch (block_objfile (block));
+  return block_objfile (block)->arch ();
 }
 
 /* See block.h.  */
@@ -79,9 +79,9 @@ contained_in (const struct block *a, con
       if (a == b)
 	return true;
       /* If A is a function block, then A cannot be contained in B,
-         except if A was inlined.  */
+	 except if A was inlined.  */
       if (!allow_nested && BLOCK_FUNCTION (a) != NULL && !block_inlined_p (a))
-        return false;
+	return false;
       a = BLOCK_SUPERBLOCK (a);
     }
   while (a != NULL);
@@ -166,6 +166,8 @@ find_block_in_blockvector (const struct
   while (bot >= STATIC_BLOCK)
     {
       b = BLOCKVECTOR_BLOCK (bl, bot);
+      if (!(BLOCK_START (b) <= pc))
+	return NULL;
       if (BLOCK_END (b) > pc)
 	return b;
       bot--;
@@ -657,19 +659,18 @@ block_iter_match_next (const lookup_name
   return block_iter_match_step (iterator, name, 0);
 }
 
-/* Return true if symbol A is the best match possible for DOMAIN.  */
+/* See block.h.  */
 
-static bool
+bool
 best_symbol (struct symbol *a, const domain_enum domain)
 {
   return (SYMBOL_DOMAIN (a) == domain
 	  && SYMBOL_CLASS (a) != LOC_UNRESOLVED);
 }
 
-/* Return symbol B if it is a better match than symbol A for DOMAIN.
-   Otherwise return A.  */
+/* See block.h.  */
 
-static struct symbol *
+struct symbol *
 better_symbol (struct symbol *a, struct symbol *b, const domain_enum domain)
 {
   if (a == NULL)
@@ -729,7 +730,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),
+	  if (symbol_matches_domain (sym->language (),
 				     SYMBOL_DOMAIN (sym), domain))
 	    other = better_symbol (other, sym, domain);
 	}
@@ -750,7 +751,7 @@ block_lookup_symbol (const struct block
 
       ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
 	{
-	  if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+	  if (symbol_matches_domain (sym->language (),
 				     SYMBOL_DOMAIN (sym), domain))
 	    {
 	      sym_found = sym;
@@ -819,8 +820,7 @@ block_lookup_symbol_primary (const struc
 	 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 (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
 	other = better_symbol (other, sym, domain);
     }
 
@@ -847,8 +847,7 @@ block_find_symbol (const struct block *b
     {
       /* 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)
+      if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)
 	  && matcher (sym, data))
 	return sym;
     }
@@ -880,14 +879,14 @@ block_find_non_opaque_type_preferred (st
 
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/blockframe.c ./gdb/blockframe.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/blockframe.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/blockframe.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Get info from stack frames; convert between frames, blocks,
    functions and pc values.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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)
     {
@@ -269,7 +259,7 @@ find_pc_partial_function (CORE_ADDR pc,
 	{
 	  const struct block *b = SYMBOL_BLOCK_VALUE (f);
 
-	  cache_pc_function_name = f->linkage_name ();
+	  cache_pc_function_sym = f;
 	  cache_pc_function_section = section;
 	  cache_pc_function_block = b;
 
@@ -295,7 +285,7 @@ find_pc_partial_function (CORE_ADDR pc,
 	    {
 	      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))
 		    {
@@ -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)
@@ -337,7 +327,7 @@ find_pc_partial_function (CORE_ADDR pc,
     }
 
   cache_pc_function_low = BMSYMBOL_VALUE_ADDRESS (msymbol);
-  cache_pc_function_name = msymbol.minsym->linkage_name ();
+  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,6 +370,20 @@ 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)
 {
@@ -391,24 +395,24 @@ find_function_entry_range_from_pc (CORE_
       CORE_ADDR entry_pc = BLOCK_ENTRY_PC (block);
 
       for (int i = 0; i < BLOCK_NRANGES (block); i++)
-        {
+	{
 	  if (BLOCK_RANGE_START (block, i) <= entry_pc
 	      && entry_pc < BLOCK_RANGE_END (block, i))
 	    {
 	      if (address != nullptr)
-	        *address = BLOCK_RANGE_START (block, i);
+		*address = BLOCK_RANGE_START (block, i);
 
 	      if (endaddr != nullptr)
-	        *endaddr = BLOCK_RANGE_END (block, i);
+		*endaddr = BLOCK_RANGE_END (block, i);
 
 	      return status;
 	    }
 	}
 
       /* It's an internal error if we exit the above loop without finding
-         the range.  */
+	 the range.  */
       internal_error (__FILE__, __LINE__,
-                      _("Entry block not found in find_function_entry_range_from_pc"));
+		      _("Entry block not found in find_function_entry_range_from_pc"));
     }
 
   return status;
@@ -441,11 +445,11 @@ find_gnu_ifunc_target_type (CORE_ADDR re
 
       /* 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)
+	  if (check_typedef (resolved_type)->code () == TYPE_CODE_FUNC)
 	    return resolved_type;
 	}
     }
@@ -460,14 +464,10 @@ find_gnu_ifunc_target_type (CORE_ADDR re
 struct frame_info *
 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 *frame = get_selected_frame ();
   while (frame != NULL)
     {
       const struct block *frame_block = get_frame_block (frame, NULL);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/block.h ./gdb/block.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/block.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/block.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Code dealing with blocks for GDB.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -342,6 +342,16 @@ extern struct symbol *block_iter_match_f
 extern struct symbol *block_iter_match_next
   (const lookup_name_info &name, struct block_iterator *iterator);
 
+/* Return true if symbol A is the best match possible for DOMAIN.  */
+
+extern bool best_symbol (struct symbol *a, const domain_enum 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_enum domain);
+
 /* Search BLOCK for symbol NAME in DOMAIN.  */
 
 extern struct symbol *block_lookup_symbol (const struct block *block,
@@ -382,7 +392,7 @@ extern int block_find_non_opaque_type (s
    struct symbol *with_opaque = NULL;
    struct symbol *sym
      = block_find_symbol (block, name, domain,
-                          block_find_non_opaque_type_preferred, &with_opaque);
+			  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.
@@ -413,6 +423,6 @@ extern int block_find_non_opaque_type_pr
 /* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bpf-tdep.c ./gdb/bpf-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bpf-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/bpf-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,387 @@
+/* Target-dependent code for BPF.
+
+   Copyright (C) 2020-2021 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"
+
+
+/* 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 gdbarch_tdep
+{
+};
+
+
+/* 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)
+{
+  fprintf_filtered (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)
+{
+  if (reg >= 0 && reg < BPF_NUM_REGS)
+    return bpf_register_names[reg];
+  return NULL;
+}
+
+/* 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)
+{
+  fprintf_unfiltered (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 (struct frame_info *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 (struct frame_info *this_frame,
+			      void **this_cache)
+{
+  return UNWIND_OUTERMOST;
+}
+
+/* Ask THIS_FRAME to unwind its register.  */
+
+static struct value *
+bpf_frame_prev_register (struct frame_info *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, struct frame_info *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)
+{
+  fprintf_unfiltered (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 (type);
+  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 (type);
+  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 (type);
+
+  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.  */
+  struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep);
+  struct gdbarch *gdbarch = gdbarch_alloc (&info, 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 ()
+{
+  register_gdbarch_init (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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/break-catch-sig.c ./gdb/break-catch-sig.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/break-catch-sig.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/break-catch-sig.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about signal catchpoints, for GDB.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,6 +29,7 @@
 #include "cli/cli-utils.h"
 #include "completer.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
 
 #include <string>
 
@@ -60,7 +61,7 @@ static struct breakpoint_ops signal_catc
 
 /* Count of each signal.  */
 
-static unsigned int *signal_catch_counts;
+static unsigned int signal_catch_counts[GDB_SIGNAL_LAST];
 
 
 
@@ -181,12 +182,11 @@ static enum print_stop_action
 signal_catchpoint_print_it (bpstat bs)
 {
   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);
 
@@ -229,7 +229,7 @@ signal_catchpoint_print_one (struct brea
 
       bool first = true;
       for (gdb_signal iter : c->signals_to_be_caught)
-        {
+	{
 	  const char *name = signal_to_name_or_int (iter);
 
 	  if (!first)
@@ -237,8 +237,8 @@ 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",
@@ -261,16 +261,16 @@ signal_catchpoint_print_mention (struct
   if (!c->signals_to_be_caught.empty ())
     {
       if (c->signals_to_be_caught.size () > 1)
-        printf_filtered (_("Catchpoint %d (signals"), b->number);
+	printf_filtered (_("Catchpoint %d (signals"), b->number);
       else
-        printf_filtered (_("Catchpoint %d (signal"), b->number);
+	printf_filtered (_("Catchpoint %d (signal"), b->number);
 
       for (gdb_signal iter : c->signals_to_be_caught)
-        {
+	{
 	  const char *name = signal_to_name_or_int (iter);
 
 	  printf_filtered (" %s", name);
-        }
+	}
       printf_filtered (")");
     }
   else if (c->catch_all)
@@ -390,7 +390,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);
 
@@ -425,13 +425,12 @@ initialize_signal_catchpoint_ops (void)
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/break-catch-syscall.c ./gdb/break-catch-syscall.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/break-catch-syscall.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/break-catch-syscall.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about syscall catchpoints, for GDB.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,6 +30,7 @@
 #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
@@ -126,8 +127,8 @@ remove_catch_syscall (struct bp_location
 	  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 (),
@@ -182,12 +183,11 @@ print_it_catch_syscall (bpstat bs)
      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);
 
@@ -253,20 +253,20 @@ print_one_catch_syscall (struct breakpoi
       char *text = xstrprintf ("%s", "");
 
       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);
+	{
+	  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
+	  /* 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);
@@ -293,25 +293,25 @@ print_mention_catch_syscall (struct brea
   if (!c->syscalls_to_be_caught.empty ())
     {
       if (c->syscalls_to_be_caught.size () > 1)
-        printf_filtered (_("Catchpoint %d (syscalls"), b->number);
+	printf_filtered (_("Catchpoint %d (syscalls"), b->number);
       else
-        printf_filtered (_("Catchpoint %d (syscall"), b->number);
+	printf_filtered (_("Catchpoint %d (syscall"), b->number);
 
       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);
-        }
+	{
+	  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 (")");
     }
   else
     printf_filtered (_("Catchpoint %d (any syscall)"),
-                     b->number);
+		     b->number);
 }
 
 /* Implement the "print_recreate" breakpoint_ops method for syscall
@@ -353,7 +353,7 @@ syscall_catchpoint_p (struct breakpoint
 
 static void
 create_syscall_event_catchpoint (int tempflag, std::vector<int> &&filter,
-                                 const struct breakpoint_ops *ops)
+				 const struct breakpoint_ops *ops)
 {
   struct gdbarch *gdbarch = get_current_arch ();
 
@@ -391,6 +391,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 +440,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);
 
@@ -525,7 +527,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;
@@ -600,12 +602,14 @@ initialize_syscall_catchpoint_ops (void)
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/break-catch-throw.c ./gdb/break-catch-throw.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/break-catch-throw.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/break-catch-throw.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about catch/throw catchpoints, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,6 +36,7 @@
 #include "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
@@ -156,26 +157,28 @@ check_status_exception_catchpoint (struc
   if (self->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)
+      if (self->pattern->exec (name, 0, NULL, 0) != 0)
 	bs->stop = 0;
     }
 }
@@ -298,7 +301,7 @@ print_one_detail_exception_catchpoint (c
   if (!cp->exception_rx.empty ())
     {
       uiout->text (_("\tmatching: "));
-      uiout->field_string ("regexp", cp->exception_rx.c_str ());
+      uiout->field_string ("regexp", cp->exception_rx);
       uiout->text ("\n");
     }
 }
@@ -454,7 +457,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 +468,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 +479,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);
 }
@@ -532,8 +535,9 @@ initialize_throw_catchpoint_ops (void)
   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 ();
 
@@ -541,19 +545,19 @@ _initialize_break_catch_throw (void)
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/breakpoint.c ./gdb/breakpoint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/breakpoint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/breakpoint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Everything about breakpoints, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -67,6 +67,7 @@
 #include "thread-fsm.h"
 #include "tid-parse.h"
 #include "cli/cli-style.h"
+#include "cli/cli-decode.h"
 
 /* readline include files */
 #include "readline/tilde.h"
@@ -89,7 +90,7 @@ static void map_breakpoint_numbers (cons
 static void breakpoint_re_set_default (struct breakpoint *);
 
 static void
-  create_sals_from_location_default (const struct event_location *location,
+  create_sals_from_location_default (struct event_location *location,
 				     struct linespec_result *canonical,
 				     enum bptype type_wanted);
 
@@ -104,7 +105,7 @@ static void create_breakpoints_sal_defau
 					    int, int, int, unsigned);
 
 static std::vector<symtab_and_line> decode_location_default
-  (struct breakpoint *b, const struct event_location *location,
+  (struct breakpoint *b, struct event_location *location,
    struct program_space *search_pspace);
 
 static int can_use_hardware_watchpoint
@@ -135,7 +136,7 @@ static void breakpoint_adjustment_warnin
 
 static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
 					    CORE_ADDR bpaddr,
-                                            enum bptype bptype);
+					    enum bptype bptype);
 
 static void describe_other_breakpoints (struct gdbarch *,
 					struct program_space *, CORE_ADDR,
@@ -144,6 +145,10 @@ static void describe_other_breakpoints (
 static int watchpoint_locations_match (struct bp_location *loc1,
 				       struct bp_location *loc2);
 
+static int breakpoint_locations_match (struct bp_location *loc1,
+				       struct bp_location *loc2,
+				       bool sw_hw_bps_match = false);
+
 static int breakpoint_location_address_match (struct bp_location *bl,
 					      const struct address_space *aspace,
 					      CORE_ADDR addr);
@@ -168,8 +173,6 @@ 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);
@@ -221,8 +224,6 @@ 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 1 if B refers to a static tracepoint set by marker ("-m"), zero
    otherwise.  */
 
@@ -389,7 +390,7 @@ breakpoints_should_be_inserted_now (void
 	 no threads under GDB's control yet.  */
       return 1;
     }
-  else if (target_has_execution)
+  else
     {
       if (always_inserted_mode)
 	{
@@ -398,8 +399,10 @@ 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.  */
@@ -482,53 +485,109 @@ bool target_exact_watchpoints = false;
    ALL_BREAKPOINTS_SAFE does so even if the statement deletes the
    current breakpoint.  */
 
-#define ALL_BREAKPOINTS(B)  for (B = breakpoint_chain; B; B = B->next)
-
 #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))
-
 /* Chains of all breakpoints defined.  */
 
 static struct breakpoint *breakpoint_chain;
 
+/* See breakpoint.h.  */
+
+breakpoint_range
+all_breakpoints ()
+{
+  return breakpoint_range (breakpoint_chain);
+}
+
+/* See breakpoint.h.  */
+
+breakpoint_safe_range
+all_breakpoints_safe ()
+{
+  return breakpoint_safe_range (all_breakpoints ());
+}
+
+/* See breakpoint.h.  */
+
+tracepoint_range
+all_tracepoints ()
+{
+  return tracepoint_range (breakpoint_chain);
+}
+
 /* 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;
 
-/* Number of elements of 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; }
+    };
 
-static unsigned bp_locations_count;
+    auto it_pair = std::equal_range (bp_locations.begin (), bp_locations.end (),
+				     addr, compare ());
+
+    m_begin = it_pair.first;
+    m_end = it_pair.second;
+  }
+
+  iterator begin () const
+  { return m_begin; }
+
+  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
@@ -575,15 +634,11 @@ 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;
-    }
+  for (breakpoint *b : all_breakpoints ())
+    if (func (b, user_data) != 0)
+      return b;
 
-  return b;
+  return nullptr;
 }
 
 /* Return whether a breakpoint is an active enabled breakpoint.  */
@@ -628,9 +683,7 @@ scoped_rbreak_breakpoints::~scoped_rbrea
 void
 clear_breakpoint_hit_counts (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     b->hit_count = 0;
 }
 
@@ -641,13 +694,11 @@ clear_breakpoint_hit_counts (void)
 struct breakpoint *
 get_breakpoint (int num)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     if (b->number == num)
       return b;
   
-  return NULL;
+  return nullptr;
 }
 
 
@@ -658,8 +709,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,7 +720,7 @@ mark_breakpoint_modified (struct breakpo
   if (!is_breakpoint (b))
     return;
 
-  for (loc = b->loc; loc; loc = loc->next)
+  for (bp_location *loc : b->locations ())
     loc->condition_changed = condition_modified;
 }
 
@@ -724,7 +773,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 +784,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;
 	}
@@ -774,156 +822,252 @@ show_condition_evaluation_mode (struct u
 		      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;
-  else
-    return ((a->address > b->address) - (a->address < b->address));
-}
-
-/* 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;
-
-  /* Initialize the dummy location's address field.  */
-  dummy_loc.address = address;
-
-  /* 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));
+  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)
+	    printf_filtered (_("Breakpoint %d's condition is now valid at "
+			       "location %d, enabling.\n"),
+			     bp_num, loc_num);
 
-  /* Nothing was found, nothing left to do.  */
-  if (locp_found == NULL)
-    return NULL;
+	  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 ());
+	}
 
-  /* 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--;
+      loc->disabled_by_cond = true;
+    }
 
-  return locp_found;
+  if (has_junk)
+    error (_("Garbage '%s' follows condition"), cond_string);
 }
 
 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))
+  if (*exp == 0)
     {
-      struct watchpoint *w = (struct watchpoint *) b;
+      xfree (b->cond_string);
+      b->cond_string = nullptr;
 
-      w->cond_exp.reset ();
-    }
-  else
-    {
-      struct bp_location *loc;
-
-      for (loc = b->loc; loc; loc = loc->next)
+      if (is_watchpoint (b))
+	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)
+		printf_filtered (_("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);
     }
   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 = 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 (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->next == nullptr && !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.  */
+      xfree (b->cond_string);
+      b->cond_string = xstrdup (exp);
+      b->condition_not_parsed = 0;
     }
   mark_breakpoint_modified (b);
 
   gdb::observers::breakpoint_modified.notify (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.  */
 
 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];
 
@@ -936,8 +1080,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 +1093,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 +1100,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
@@ -1075,8 +1205,8 @@ validate_commands_for_breakpoint (struct
       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
@@ -1134,14 +1264,12 @@ 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)
+  for (breakpoint *b : all_breakpoints ())
     if (b->type == bp_static_tracepoint)
       {
-	for (loc = b->loc; loc; loc = loc->next)
+	for (bp_location *loc : b->locations ())
 	  if (loc->address == addr)
 	    found.push_back (b);
       }
@@ -1216,13 +1344,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)
@@ -1422,7 +1560,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 +1605,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.  */
@@ -1696,10 +1835,10 @@ 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.  */
+	 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));
 
@@ -1745,7 +1884,7 @@ 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
@@ -1761,12 +1900,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
@@ -1804,8 +1943,8 @@ update_watchpoint (struct watchpoint *b,
 		 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;
@@ -1845,7 +1984,7 @@ update_watchpoint (struct watchpoint *b,
 		  for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
 		    ;
 		  *tmp = loc;
-		  loc->gdbarch = get_type_arch (value_type (v));
+		  loc->gdbarch = value_type (v)->arch ();
 
 		  loc->pspace = frame_pspace;
 		  loc->address = address_significant (loc->gdbarch, addr);
@@ -1871,7 +2010,6 @@ update_watchpoint (struct watchpoint *b,
 	{
 	  int reg_cnt;
 	  enum bp_loc_type loc_type;
-	  struct bp_location *bl;
 
 	  reg_cnt = can_use_hardware_watchpoint (val_chain);
 
@@ -1947,7 +2085,7 @@ update_watchpoint (struct watchpoint *b,
 
 	  loc_type = (b->type == bp_watchpoint? bp_loc_other
 		      : bp_loc_hardware_watchpoint);
-	  for (bl = b->loc; bl; bl = bl->next)
+	  for (bp_location *bl : b->locations ())
 	    bl->loc_type = loc_type;
 	}
 
@@ -1987,7 +2125,8 @@ should_be_inserted (struct bp_location *
   if (bl->owner->disposition == disp_del_at_next_stop)
     return 0;
 
-  if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
+  if (!bl->enabled || bl->disabled_by_cond
+      || bl->shlib_disabled || bl->duplicate)
     return 0;
 
   if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
@@ -2022,13 +2161,8 @@ 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));
-	}
+      infrun_debug_printf ("skipping breakpoint: stepping past insn at: %s",
+			   paddress (bl->gdbarch, bl->address));
       return 0;
     }
 
@@ -2037,14 +2171,9 @@ 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);
-	}
+      infrun_debug_printf ("stepping past non-steppable watchpoint. "
+			   "skipping watchpoint at %s:%d",
+			   paddress (bl->gdbarch, bl->address), bl->length);
       return 0;
     }
 
@@ -2106,10 +2235,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;
   int modified = bl->needs_update;
-  struct bp_location *loc;
 
   /* Release conditions left over from a previous insert.  */
   bl->target_info.conditions.clear ();
@@ -2122,14 +2249,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)
@@ -2160,9 +2292,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 +2306,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 marge 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;
 }
@@ -2279,10 +2412,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;
   int modified = bl->needs_update;
-  struct bp_location *loc;
 
   /* Clear commands left over from a previous insert.  */
   bl->target_info.tcommands.clear ();
@@ -2294,27 +2425,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)
@@ -2342,38 +2471,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.  */
@@ -2449,72 +2580,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)
+	{
+	  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 (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
@@ -2585,17 +2675,17 @@ 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->ops->insert_location (bl);
 		  if (val)
 		    bp_excpt = gdb_exception {RETURN_ERROR, GENERIC_ERROR};
-	        }
+		}
 	      catch (gdb_exception &e)
-	        {
+		{
 		  bp_excpt = std::move (e);
-	        }
+		}
 	    }
 	  else
 	    {
@@ -2609,6 +2699,14 @@ insert_bp_location (struct bp_location *
 	{
 	  /* Can't set the breakpoint.  */
 
+	  /* 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.  */
+	  if (bp_excpt.error == TARGET_CLOSE_ERROR)
+	    throw bp_excpt;
+	  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
 	     removed, but we have not yet processed the shlib unload
@@ -2648,12 +2746,12 @@ 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,
+		  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",
+		  if (bp_excpt.message != NULL)
+		    fprintf_unfiltered (tmp_error_stream, "%s.\n",
 					bp_excpt.what ());
 		}
 	      else
@@ -2703,12 +2801,10 @@ insert_bp_location (struct bp_location *
 	 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))
@@ -2773,19 +2869,14 @@ 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)
+  for (bp_location *loc : all_bp_locations ())
     {
       struct bp_location *tmp;
 
@@ -2816,9 +2907,7 @@ breakpoint_program_space_exit (struct pr
 void
 insert_breakpoints (void)
 {
-  struct breakpoint *bpt;
-
-  ALL_BREAKPOINTS (bpt)
+  for (breakpoint *bpt : all_breakpoints ())
     if (is_hardware_watchpoint (bpt))
       {
 	struct watchpoint *w = (struct watchpoint *) bpt;
@@ -2828,23 +2917,14 @@ insert_breakpoints (void)
 
   /* 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 +2932,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 +2946,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.  */
@@ -2887,7 +2966,7 @@ update_inserted_breakpoint_locations (vo
 	 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)
+	  && (inferior_ptid == null_ptid || !target_has_execution ()))
 	continue;
 
       val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks,
@@ -2908,8 +2987,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 +3001,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;
@@ -2943,7 +3020,7 @@ insert_breakpoint_locations (void)
 	 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)
+	  && (inferior_ptid == null_ptid || !target_has_execution ()))
 	continue;
 
       val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks,
@@ -2954,10 +3031,9 @@ 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;
 
       if (!is_hardware_watchpoint (bpt))
 	continue;
@@ -2968,15 +3044,16 @@ insert_breakpoint_locations (void)
       if (bpt->disposition == disp_del_at_next_stop)
 	continue;
       
-      for (loc = bpt->loc; loc; loc = loc->next)
+      for (bp_location *loc : bpt->locations ())
 	if (!loc->inserted && should_be_inserted (loc))
 	  {
 	    some_failed = 1;
 	    break;
 	  }
+
       if (some_failed)
 	{
-	  for (loc = bpt->loc; loc; loc = loc->next)
+	  for (bp_location *loc : bpt->locations ())
 	    if (loc->inserted)
 	      remove_breakpoint (loc);
 
@@ -2991,7 +3068,7 @@ 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\
@@ -3009,14 +3086,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;
 }
 
@@ -3026,9 +3101,7 @@ remove_breakpoints (void)
 static void
 remove_threaded_breakpoints (struct thread_info *tp, 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))
 	{
@@ -3049,21 +3122,20 @@ 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;
+  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;
-      }
-  }
+      if (bl->inserted && !bl->target_info.persist)
+	{
+	  val = remove_breakpoint (bl);
+	  if (val != 0)
+	    return;
+	}
+    }
 }
 
 static int internal_breakpoint_number = -1;
@@ -3199,264 +3271,329 @@ create_overlay_event_breakpoint (void)
 	}
 
       addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
-      b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
-                                      bp_overlay_event,
+      b = create_internal_breakpoint (objfile->arch (), 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);
 
       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,
+				      &internal_breakpoint_ops);
+      b->location = new_probe_location ("-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;
+      struct explicit_location explicit_loc;
 
-	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 = 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;
+      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;
 
-  ALL_PSPACES (pspace)
-  {
-    CORE_ADDR addr;
+  for (struct program_space *pspace : program_spaces)
+    {
+      CORE_ADDR addr;
 
-    set_current_program_space (pspace);
+      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;
+	  struct explicit_location explicit_loc;
 
-	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 || (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;
+	    }
 
-	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;
-      }
-  }
+	  addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
+	  b = create_internal_breakpoint (objfile->arch (), 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;
+	}
+    }
 }
 
-/* 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,
+				      &internal_breakpoint_ops);
+      b->location = new_probe_location ("-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;
+  CORE_ADDR addr;
+  struct explicit_location explicit_loc;
 
-      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 (func_name, NULL, 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;
+    }
+
+  addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
+  addr = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, addr, current_inferior ()->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;
+
+  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;
     }
 }
 
@@ -3471,9 +3608,6 @@ breakpoint_event_location_empty_p (const
 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 +3616,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_event_location_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 +3736,23 @@ 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 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;
 
-    if (bl->inserted)
-      val |= remove_breakpoint_1 (bl, DETACH_BREAKPOINT);
-  }
+      if (bl->inserted)
+	val |= remove_breakpoint_1 (bl, DETACH_BREAKPOINT);
+    }
 
   return val;
 }
@@ -3760,8 +3893,8 @@ 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);
@@ -3798,9 +3931,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,7 +3951,6 @@ 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
@@ -3830,84 +3960,84 @@ breakpoint_init_inferior (enum inf_conte
 
   mark_breakpoints_out ();
 
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
-  {
-    if (b->loc && b->loc->pspace != pspace)
-      continue;
-
-    switch (b->type)
-      {
-      case bp_call_dummy:
-      case bp_longjmp_call_dummy:
+  for (breakpoint *b : all_breakpoints_safe ())
+    {
+      if (b->loc && b->loc->pspace != pspace)
+	continue;
 
-	/* 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.  */
+      switch (b->type)
+	{
+	case bp_call_dummy:
+	case bp_longjmp_call_dummy:
 
-      case bp_watchpoint_scope:
+	  /* 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.  */
 
-	/* Also get rid of scope breakpoints.  */
+	case bp_watchpoint_scope:
 
-      case bp_shlib_event:
+	  /* Also get rid of scope breakpoints.  */
 
-	/* 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.,
+	case bp_shlib_event:
 
-	   (gdb) file prog-linux
-	   (gdb) run               # native linux target
-	   ...
-	   (gdb) kill
-	   (gdb) file prog-win.exe
-	   (gdb) tar rem :9999     # remote Windows gdbserver.
-	*/
+	  /* 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.
+	  */
 
-      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:
-	{
-	  struct watchpoint *w = (struct 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->loc = NULL;
 
-	      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 +4063,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;
 
-  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)
@@ -3967,9 +4096,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)
@@ -4033,12 +4160,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 +4179,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 +4197,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,12 +4213,8 @@ 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)
 	continue;
@@ -4111,7 +4222,7 @@ hardware_watchpoint_inserted_in_range (c
       if (!breakpoint_enabled (bpt))
 	continue;
 
-      for (loc = bpt->loc; loc; loc = loc->next)
+      for (bp_location *loc : bpt->locations ())
 	if (loc->pspace->aspace == aspace && loc->inserted)
 	  {
 	    CORE_ADDR l, h;
@@ -4134,15 +4245,6 @@ 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.  */
 
@@ -4175,7 +4277,6 @@ bpstats::bpstats (const bpstats &other)
 {
   if (other.old_val != NULL)
     old_val = release_value (value_copy (other.old_val.get ()));
-  incref_bp_location (bp_location_at);
 }
 
 /* Return a copy of a bpstat.  Like "bs1 = bs2" but all storage that
@@ -4359,14 +4460,14 @@ bpstat_do_actions_1 (bpstat *bsp)
 
       /* 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 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.  */
       counted_command_line ccmd = bs->commands;
       bs->commands = NULL;
       if (ccmd != NULL)
@@ -4421,7 +4522,7 @@ 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 ();
@@ -4514,7 +4615,7 @@ print_bp_stop_message (bpstat bs)
 
     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;
 
@@ -4660,21 +4761,19 @@ breakpoint_cond_eval (expression *exp)
 
 bpstats::bpstats (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 ()
   : next (NULL),
-    bp_location_at (NULL),
     breakpoint_at (NULL),
     commands (NULL),
     print (0),
@@ -4691,13 +4790,12 @@ watchpoints_triggered (struct target_wai
 {
   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)
+      for (breakpoint *b : all_breakpoints ())
 	if (is_hardware_watchpoint (b))
 	  {
 	    struct watchpoint *w = (struct watchpoint *) b;
@@ -4708,11 +4806,11 @@ watchpoints_triggered (struct target_wai
       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)
+      for (breakpoint *b : all_breakpoints ())
 	if (is_hardware_watchpoint (b))
 	  {
 	    struct watchpoint *w = (struct watchpoint *) b;
@@ -4727,14 +4825,13 @@ watchpoints_triggered (struct target_wai
      affected by this data address as triggered, and all others as not
      triggered.  */
 
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     if (is_hardware_watchpoint (b))
       {
 	struct watchpoint *w = (struct watchpoint *) b;
-	struct bp_location *loc;
 
 	w->watchpoint_triggered = watch_triggered_no;
-	for (loc = b->loc; loc; loc = loc->next)
+	for (bp_location *loc : b->locations ())
 	  {
 	    if (is_masked_watchpoint (b))
 	      {
@@ -4748,9 +4845,9 @@ watchpoints_triggered (struct target_wai
 		  }
 	      }
 	    /* 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;
 		break;
@@ -4846,11 +4943,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 +4957,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,13 +4988,13 @@ 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
@@ -4905,7 +5002,7 @@ watchpoint_check (bpstat bs)
 	 here.  */
 
       SWITCH_THRU_ALL_UIS ()
-        {
+	{
 	  struct ui_out *uiout = current_uiout;
 
 	  if (uiout->is_mi_like_p ())
@@ -4952,7 +5049,7 @@ bpstat_check_watchpoint (bpstat bs)
   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);
@@ -5053,9 +5150,7 @@ bpstat_check_watchpoint (bpstat bs)
 
 		  if (bl->watchpoint_type == hw_read)
 		    {
-		      struct breakpoint *other_b;
-
-		      ALL_BREAKPOINTS (other_b)
+		      for (breakpoint *other_b : all_breakpoints ())
 			if (other_b->type == bp_hardware_watchpoint
 			    || other_b->type == bp_access_watchpoint)
 			  {
@@ -5128,7 +5223,7 @@ 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);
@@ -5271,15 +5366,14 @@ bpstat
 build_bpstat_chain (const address_space *aspace, CORE_ADDR bp_addr,
 		    const struct target_waitstatus *ws)
 {
-  struct breakpoint *b;
   bpstat bs_head = NULL, *bs_link = &bs_head;
 
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     {
       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
@@ -5289,7 +5383,7 @@ build_bpstat_chain (const address_space
 	  if (b->type == bp_hardware_watchpoint && bl != b->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))
@@ -5452,22 +5546,25 @@ bpstat_stop_status (const address_space
 }
 
 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);
+  jit_event_handler (gdbarch, jit_bp_sym.objfile);
 
   target_terminal::inferior ();
 }
@@ -5668,7 +5765,7 @@ 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);
@@ -5685,11 +5782,10 @@ bpstat_run_callbacks (bpstat bs_head)
 bool
 bpstat_should_step ()
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
       return true;
+
   return false;
 }
 
@@ -5747,7 +5843,6 @@ wrap_indent_at_field (struct ui_out *uio
 static const char *
 bp_condition_evaluator (struct breakpoint *b)
 {
-  struct bp_location *bl;
   char host_evals = 0;
   char target_evals = 0;
 
@@ -5761,7 +5856,7 @@ 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)
 	target_evals++;
@@ -5995,7 +6090,8 @@ print_one_breakpoint_location (struct br
      breakpoints with single disabled location.  */
   if (loc == NULL 
       && (b->loc != NULL 
-	  && (b->loc->next != NULL || !b->loc->enabled)))
+	  && (b->loc->next != NULL
+	      || !b->loc->enabled || b->loc->disabled_by_cond)))
     header_of_multiple = 1;
   if (loc == NULL)
     loc = b->loc;
@@ -6025,8 +6121,13 @@ print_one_breakpoint_location (struct br
 
   /* 4 */
   annotate_field (3);
+  /* For locations that are disabled because of an invalid condition,
+     display "N*" on CLI, where "*" refers to a footnote below the
+     table.  For MI, simply display a "N" without a footnote.  */
+  const char *N = (uiout->is_mi_like_p ()) ? "N" : "N*";
   if (part_of_multiple)
-    uiout->field_string ("enabled", loc->enabled ? "y" : "n");
+    uiout->field_string ("enabled", (loc->disabled_by_cond ? N
+				     : (loc->enabled ? "y" : "n")));
   else
     uiout->field_fmt ("enabled", "%c", bpenables[(int) b->enable_state]);
 
@@ -6082,11 +6183,11 @@ print_one_breakpoint_location (struct br
 	    inf_nums.push_back (inf->num);
 	}
 
-        /* For backward compatibility, don't display inferiors in CLI unless
+	/* 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
+		&& (program_spaces.size () > 1
 		    || number_of_inferiors () > 1)
 		/* LOC is for existing B, it cannot be in
 		   moribund_locations and thus having NULL OWNER.  */
@@ -6121,7 +6222,7 @@ print_one_breakpoint_location (struct br
       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");
@@ -6326,7 +6427,9 @@ 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->loc && (b->loc->next
+			     || !b->loc->enabled
+			     || b->loc->disabled_by_cond))))
 	{
 	  gdb::optional<ui_out_emit_list> locations_list;
 
@@ -6337,11 +6440,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,
 					     allflag, allflag);
+	      n++;
 	    }
 	}
     }
@@ -6351,14 +6455,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;
 
@@ -6413,20 +6516,20 @@ 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;
   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))
@@ -6494,7 +6597,7 @@ 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.  */
@@ -6520,7 +6623,12 @@ breakpoint_1 (const char *bp_num_list, b
 	/* 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);
+	  {
+	    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 +6649,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
@@ -6607,9 +6719,7 @@ 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
@@ -6629,18 +6739,18 @@ describe_other_breakpoints (struct gdbar
 			    struct obj_section *section, int thread)
 {
   int others = 0;
-  struct breakpoint *b;
 
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     others += (user_breakpoint_p (b)
-               && breakpoint_has_pc (b, pspace, pc, section));
+	       && breakpoint_has_pc (b, pspace, pc, section));
+
   if (others > 0)
     {
       if (others == 1)
 	printf_filtered (_("Note: breakpoint "));
       else /* if (others == ???) */
 	printf_filtered (_("Note: breakpoints "));
-      ALL_BREAKPOINTS (b)
+      for (breakpoint *b : all_breakpoints ())
 	if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
 	  {
 	    others--;
@@ -6811,11 +6921,14 @@ tracepoint_locations_match (struct bp_lo
 
 /* 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)
+breakpoint_locations_match (struct bp_location *loc1,
+			    struct bp_location *loc2,
+			    bool sw_hw_bps_match)
 {
   int hw_point1, hw_point2;
 
@@ -6833,15 +6946,18 @@ breakpoint_locations_match (struct bp_lo
   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.  */
+    /* 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, loc1->address,
 				     loc2->pspace->aspace, 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, int 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 +6968,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);
 }
@@ -6873,7 +6989,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)
@@ -6900,7 +7016,7 @@ adjust_breakpoint_address (struct gdbarc
       adjusted_bpaddr = address_significant (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);
@@ -6962,6 +7078,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 +7086,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)
@@ -6986,30 +7103,13 @@ allocate_bp_location (struct breakpoint
   return bpt->ops->allocate_location (bpt);
 }
 
-static void
-free_bp_location (struct bp_location *loc)
-{
-  delete loc;
-}
-
-/* Increment reference count.  */
-
-static void
-incref_bp_location (struct bp_location *bl)
-{
-  ++bl->refc;
-}
-
 /* Decrement reference count.  If the reference count reaches 0,
    destroy the bp_location.  Sets *BLP to NULL.  */
 
 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;
 }
 
@@ -7097,7 +7197,7 @@ set_breakpoint_location_function (struct
 		 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;
 	    }
 	}
@@ -7114,9 +7214,9 @@ 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 SYMTAB_OBJFILE (sal.symtab)->arch ();
 
   return NULL;
 }
@@ -7181,14 +7281,13 @@ 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)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->pspace == current_program_space
 	&& (b->type == bp_longjmp_master
 	    || b->type == bp_exception_master))
@@ -7210,9 +7309,7 @@ set_longjmp_breakpoint (struct thread_in
 void
 delete_longjmp_breakpoint (int thread)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->type == bp_longjmp || b->type == bp_exception)
       {
 	if (b->thread == thread)
@@ -7223,9 +7320,7 @@ delete_longjmp_breakpoint (int thread)
 void
 delete_longjmp_breakpoint_at_next_stop (int thread)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->type == bp_longjmp || b->type == bp_exception)
       {
 	if (b->thread == thread)
@@ -7241,9 +7336,9 @@ 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)
+  for (breakpoint *b : all_breakpoints ())
     if (b->pspace == current_program_space && b->type == bp_longjmp_master)
       {
 	struct breakpoint *new_b;
@@ -7271,9 +7366,10 @@ 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)
@@ -7285,12 +7381,55 @@ check_longjmp_breakpoint_for_call_dummy
       {
 	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;
-	
+
+	/* 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 (struct frame_info *fi = get_current_frame (); fi != nullptr; )
+	  {
+	    struct frame_info *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;
+
 	dummy_frame_discard (dummy_b->frame_id, tp);
 
 	while (b->related_breakpoint != b)
@@ -7306,29 +7445,25 @@ check_longjmp_breakpoint_for_call_dummy
 void
 enable_overlay_breakpoints (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
+  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;
-    }
+      {
+	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)
+  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;
-    }
+      {
+	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,9 +7471,7 @@ disable_overlay_breakpoints (void)
 void
 set_std_terminate_breakpoint (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->pspace == current_program_space
 	&& b->type == bp_std_terminate_master)
       {
@@ -7351,9 +7484,7 @@ set_std_terminate_breakpoint (void)
 void
 delete_std_terminate_breakpoint (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->type == bp_std_terminate)
       delete_breakpoint (b);
 }
@@ -7395,9 +7526,7 @@ create_jit_event_breakpoint (struct gdba
 void
 remove_jit_event_breakpoints (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->type == bp_jit_event
 	&& b->loc->pspace == current_program_space)
       delete_breakpoint (b);
@@ -7406,9 +7535,7 @@ remove_jit_event_breakpoints (void)
 void
 remove_solib_event_breakpoints (void)
 {
-  struct breakpoint *b, *b_tmp;
-
-  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->type == bp_shlib_event
 	&& b->loc->pspace == current_program_space)
       delete_breakpoint (b);
@@ -7419,9 +7546,7 @@ 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)
+  for (breakpoint *b : all_breakpoints_safe ())
     if (b->type == bp_shlib_event
 	&& b->loc->pspace == current_program_space)
       b->disposition = disp_del_at_next_stop;
@@ -7473,30 +7598,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
@@ -7506,43 +7629,42 @@ disable_breakpoints_in_shlibs (void)
 static void
 disable_breakpoints_in_unloaded_shlib (struct so_list *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;
-
-    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 (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);
+
+	  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;
+	}
+    }
 }
 
 /* Disable any breakpoints and tracepoints in OBJFILE upon
@@ -7552,8 +7674,6 @@ disable_breakpoints_in_unloaded_shlib (s
 static void
 disable_breakpoints_in_freed_objfile (struct objfile *objfile)
 {
-  struct breakpoint *b;
-
   if (objfile == NULL)
     return;
 
@@ -7572,15 +7692,14 @@ 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;
 
       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;
 
@@ -7872,7 +7991,7 @@ struct solib_catchpoint : public breakpo
   ~solib_catchpoint () override;
 
   /* True for "catch load", false for "catch unload".  */
-  unsigned char is_load;
+  bool is_load;
 
   /* Regular expression to match, if any.  COMPILED is only valid when
      REGEX is non-NULL.  */
@@ -7904,30 +8023,27 @@ breakpoint_hit_catch_solib (const struct
 			    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;
+  for (breakpoint *other : all_breakpoints ())
+    {
+      if (other == bl->owner)
+	continue;
 
-    if (other->type != bp_shlib_event)
-      continue;
+      if (other->type != bp_shlib_event)
+	continue;
 
-    if (self->pspace != NULL && other->pspace != self->pspace)
-      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;
-      }
-  }
+      for (bp_location *other_bl : other->locations ())
+	{
+	  if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
+	    return 1;
+	}
+    }
 
   return 0;
 }
@@ -8044,15 +8160,10 @@ print_recreate_catch_solib (struct break
 
 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)
+add_solib_catchpoint (const char *arg, bool is_load, bool is_temp, bool enabled)
 {
   struct gdbarch *gdbarch = get_current_arch ();
 
@@ -8085,12 +8196,10 @@ static void
 catch_load_or_unload (const char *arg, int from_tty, int is_load,
 		      struct cmd_list_element *command)
 {
-  int tempflag;
   const int enabled = 1;
+  bool temp = command->context () == CATCH_TEMPORARY;
 
-  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
-
-  add_solib_catchpoint (arg, is_load, tempflag, enabled);
+  add_solib_catchpoint (arg, is_load, temp, enabled);
 }
 
 static void
@@ -8107,14 +8216,11 @@ catch_unload_command_1 (const char *arg,
   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.  */
+/* See breakpoint.h.  */
 
 void
 init_catchpoint (struct breakpoint *b,
-		 struct gdbarch *gdbarch, int tempflag,
+		 struct gdbarch *gdbarch, bool temp,
 		 const char *cond_string,
 		 const struct breakpoint_ops *ops)
 {
@@ -8124,7 +8230,7 @@ init_catchpoint (struct breakpoint *b,
   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;
+  b->disposition = temp ? disp_del : disp_donttouch;
 }
 
 void
@@ -8144,12 +8250,12 @@ install_breakpoint (int internal, std::u
 
 static void
 create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
-				    int tempflag, const char *cond_string,
-                                    const struct breakpoint_ops *ops)
+				    bool temp, 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);
+  init_catchpoint (c.get (), gdbarch, temp, cond_string, ops);
 
   c->forked_inferior_pid = null_ptid;
 
@@ -8280,19 +8386,15 @@ static int
 hw_breakpoint_used_count (void)
 {
   int i = 0;
-  struct breakpoint *b;
-  struct bp_location *bl;
 
-  ALL_BREAKPOINTS (b)
-  {
+  for (breakpoint *b : all_breakpoints ())
     if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
-      for (bl = b->loc; bl; bl = bl->next)
+      for (bp_location *bl : b->locations ())
 	{
 	  /* Special types of hardware breakpoints may use more than
 	     one register.  */
 	  i += b->ops->resources_needed (bl);
 	}
-  }
 
   return i;
 }
@@ -8304,12 +8406,11 @@ 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.  */
@@ -8329,10 +8430,9 @@ 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)
 	continue;
@@ -8351,31 +8451,23 @@ hw_watchpoint_used_count_others (struct
 void
 disable_watchpoints_before_interactive_call_start (void)
 {
-  struct breakpoint *b;
-
-  ALL_BREAKPOINTS (b)
-  {
+  for (breakpoint *b : all_breakpoints ())
     if (is_watchpoint (b) && breakpoint_enabled (b))
       {
 	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)
-  {
+  for (breakpoint *b : all_breakpoints ())
     if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
       {
 	b->enable_state = bp_enabled;
 	update_global_location_list (UGLL_MAY_INSERT);
       }
-  }
 }
 
 void
@@ -8513,7 +8605,62 @@ mention (struct breakpoint *b)
 }
 
 
-static int bp_loc_is_permanent (struct bp_location *loc);
+static bool bp_loc_is_permanent (struct bp_location *loc);
+
+/* 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)
+		{
+		  fprintf_filtered (gdb_stdout,
+				    _("Note: automatically using "
+				      "hardware breakpoints for "
+				      "read-only addresses.\n"));
+		  said = true;
+		}
+	    }
+	}
+    }
+}
 
 static struct bp_location *
 add_location_to_breakpoint (struct breakpoint *b,
@@ -8579,42 +8726,10 @@ add_location_to_breakpoint (struct break
 }
 
 
-/* See breakpoint.h.  */
+/* Return true if LOC is pointing to a permanent breakpoint,
+   return false otherwise.  */
 
-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 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 +8737,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
@@ -8702,13 +8817,9 @@ 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)
+  for (breakpoint *b : all_breakpoints ())
+    if (b->type == bp_dprintf)
 	update_dprintf_command_list (b);
-    }
 }
 
 /* Create a breakpoint with SAL as location.  Use LOCATION
@@ -8821,15 +8932,9 @@ init_breakpoint_sal (struct breakpoint *
 	    loc->inserted = 1;
 	}
 
-      if (b->cond_string)
-	{
-	  const char *arg = b->cond_string;
-
-	  loc->cond = parse_exp_1 (&arg, loc->address,
-				   block_for_pc (loc->address), 0);
-	  if (*arg)
-              error (_("Garbage '%s' follows condition"), arg);
-	}
+      /* 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.  */
@@ -8844,6 +8949,19 @@ init_breakpoint_sal (struct breakpoint *
 	error (_("Garbage '%s' at end of command"), b->extra_string);
     }
 
+
+  /* The order of the locations is now stable.  Set the location
+     condition using the location's number.  */
+  int loc_num = 1;
+  for (bp_location *loc : b->locations ())
+    {
+      if (b->cond_string != nullptr)
+	set_breakpoint_location_condition (b->cond_string, loc, b->number,
+					   loc_num);
+
+      ++loc_num;
+    }
+
   b->display_canonical = display_canonical;
   if (location != NULL)
     b->location = std::move (location);
@@ -8940,7 +9058,7 @@ create_breakpoints_sal (struct gdbarch *
    the caller's responsibility to free them.  */
 
 static void
-parse_breakpoint_sals (const struct event_location *location,
+parse_breakpoint_sals (struct event_location *location,
 		       struct linespec_result *canonical)
 {
   struct symtab_and_line cursal;
@@ -9071,6 +9189,7 @@ find_condition_and_thread (const char *t
   *thread = -1;
   *task = 0;
   *rest = NULL;
+  bool force = false;
 
   while (tok && *tok)
     {
@@ -9094,10 +9213,25 @@ 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);
 	}
+      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;
@@ -9132,6 +9266,50 @@ find_condition_and_thread (const char *t
     }
 }
 
+/* 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, char **cond_string,
+				    int *thread, int *task, char **rest)
+{
+  int num_failures = 0;
+  for (auto &sal : sals)
+    {
+      char *cond = nullptr;
+      int thread_id = 0;
+      int task_id = 0;
+      char *remaining = nullptr;
+
+      /* 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,
+				     &task_id, &remaining);
+	  *cond_string = cond;
+	  *thread = thread_id;
+	  *task = task_id;
+	  *rest = 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>
@@ -9205,10 +9383,10 @@ breakpoint_ops_for_event_location (const
 
 int
 create_breakpoint (struct gdbarch *gdbarch,
-		   const struct event_location *location,
+		   struct event_location *location,
 		   const char *cond_string,
 		   int thread, const char *extra_string,
-		   int parse_extra,
+		   bool force_condition, int parse_extra,
 		   int tempflag, enum bptype type_wanted,
 		   int ignore_count,
 		   enum auto_boolean pending_break_support,
@@ -9245,7 +9423,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? "),
@@ -9289,35 +9467,57 @@ create_breakpoint (struct gdbarch *gdbar
       gdb::unique_xmalloc_ptr<char> extra_string_copy;
 
       if (parse_extra)
-        {
+	{
 	  char *rest;
 	  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);
+	  find_condition_and_thread_for_sals (lsal.sals, extra_string,
+					      &cond, &thread, &task, &rest);
 	  cond_string_copy.reset (cond);
 	  extra_string_copy.reset (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),
@@ -9350,7 +9550,7 @@ create_breakpoint (struct gdbarch *gdbar
       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);
@@ -9389,7 +9589,7 @@ break_command_1 (const char *arg, int fl
 
   create_breakpoint (get_current_arch (),
 		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     NULL, 0, arg, false, 1 /* parse arg */,
 		     tempflag, type_wanted,
 		     0 /* Ignore count */,
 		     pending_break_support,
@@ -9415,7 +9615,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);
     }
@@ -9434,22 +9634,21 @@ resolve_sal_pc (struct symtab_and_line *
 	  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 (SYMTAB_OBJFILE (sal->symtab));
 	    }
 	  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 ();
 	    }
 	}
     }
@@ -9500,8 +9699,8 @@ stopin_command (const char *arg, int fro
       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.  */
+	 say it is bad, otherwise, it should be an address or
+	 function/method name.  */
       while (*argptr && !hasColon)
 	{
 	  hasColon = (*argptr == ':');
@@ -9533,7 +9732,7 @@ stopat_command (const char *arg, int fro
       int hasColon = 0;
 
       /* Look for a ':'.  If there is a '::' then get out, otherwise
-         it is probably a line number.  */
+	 it is probably a line number.  */
       while (*argptr && !hasColon)
 	{
 	  hasColon = (*argptr == ':');
@@ -9577,7 +9776,7 @@ dprintf_command (const char *arg, int fr
 
   create_breakpoint (get_current_arch (),
 		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     NULL, 0, arg, false, 1 /* parse arg */,
 		     0, bp_dprintf,
 		     0 /* Ignore count */,
 		     pending_break_support,
@@ -9877,112 +10076,10 @@ break_range_command (const char *arg, in
     some constant expressions and in such case still falsely return
     zero.  */
 
-static int
+static bool
 watchpoint_exp_is_const (const struct expression *exp)
 {
-  int i = exp->nelts;
-
-  while (i > 0)
-    {
-      int oplenp, argsp;
-
-      /* 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;
-
-	    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;
+  return exp->op->constant_p ();
 }
 
 /* Watchpoint destructor.  */
@@ -10298,7 +10395,7 @@ remove_masked_watchpoint (struct bp_loca
   struct watchpoint *w = (struct watchpoint *) bl->owner;
 
   return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
-				        bl->watchpoint_type);
+					bl->watchpoint_type);
 }
 
 /* Implement the "resources_needed" breakpoint_ops method for
@@ -10430,7 +10527,6 @@ static void
 print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
 {
   struct watchpoint *w = (struct watchpoint *) b;
-  char tmp[40];
 
   switch (b->type)
     {
@@ -10448,8 +10544,8 @@ print_recreate_masked_watchpoint (struct
 		      _("Invalid hardware watchpoint type."));
     }
 
-  sprintf_vma (tmp, w->hw_wp_mask);
-  fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp);
+  fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string,
+		      phex (w->hw_wp_mask, sizeof (CORE_ADDR)));
   print_recreate_thread (b, fp);
 }
 
@@ -10466,11 +10562,11 @@ is_masked_watchpoint (const struct break
 }
 
 /* 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,10 +10580,9 @@ watch_command_1 (const char *arg, int ac
   const char *cond_end = NULL;
   enum bptype bp_type;
   int thread = -1;
-  int pc = 0;
   /* 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;
 
   /* Make sure that we actually have parameters to parse.  */
@@ -10554,7 +10649,7 @@ watch_command_1 (const char *arg, int ac
 	      if (use_mask)
 		error(_("You can specify only one mask."));
 
-	      use_mask = just_location = 1;
+	      use_mask = just_location = true;
 
 	      mark = value_mark ();
 	      mask_value = parse_to_comma_and_eval (&value_start);
@@ -10601,7 +10696,7 @@ 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)
@@ -10670,7 +10765,7 @@ 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);
@@ -10728,7 +10823,7 @@ watch_command_1 (const char *arg, int ac
       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).release ();
 
       w->exp_string = xstrprintf ("-location %.*s",
 				  (int) (exp_end - exp_start), exp_start);
@@ -10832,15 +10927,15 @@ can_use_hardware_watchpoint (const std::
 	  else
 	    {
 	      /* Ahh, memory we actually used!  Check if we can cover
-                 it with hardware watchpoints.  */
+		 it with hardware watchpoints.  */
 	      struct type *vtype = check_typedef (value_type (v));
 
 	      /* 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);
 		  int len;
@@ -10871,25 +10966,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;
+
+  watch_command_1 (arg, accessflag, from_tty, opts.location, false);
+}
 
-  if (arg
-      && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
-	  || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
-    just_location = 1;
+/* 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;
 
-  watch_command_1 (arg, accessflag, from_tty, just_location, 0);
+  const char *word = advance_to_expression_complete_word_point (tracker, text);
+  expression_completer (ignore, tracker, text, word);
 }
 
 static void
@@ -10899,7 +11048,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 +11060,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 +11081,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 +11104,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 +11122,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);
 }
 
@@ -11016,16 +11160,12 @@ until_break_command (const char *arg, in
        : decode_line_1 (location.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,7 +11182,7 @@ 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;
 
@@ -11054,10 +11194,11 @@ 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);
+
+      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, caller_frame_id);
       lj_deleter.emplace (thread);
@@ -11066,21 +11207,24 @@ until_break_command (const char *arg, in
   /* 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);
+  /* 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->thread_fsm = new until_break_fsm (command_interp (), tp->global_num,
-					std::move (location_breakpoint),
-					std::move (caller_breakpoint));
+					std::move (breakpoints));
 
   if (lj_deleter)
     lj_deleter->release ();
@@ -11136,11 +11280,10 @@ catch_fork_command_1 (const char *arg, i
   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);
+  fork_kind = (catch_fork_kind) (uintptr_t) command->context ();
+  bool temp = (fork_kind == catch_fork_temporary
+	       || fork_kind == catch_vfork_temporary);
 
   if (!arg)
     arg = "";
@@ -11162,13 +11305,13 @@ catch_fork_command_1 (const char *arg, i
     {
     case catch_fork_temporary:
     case catch_fork_permanent:
-      create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
-                                          &catch_fork_breakpoint_ops);
+      create_fork_vfork_event_catchpoint (gdbarch, temp, 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);
+      create_fork_vfork_event_catchpoint (gdbarch, temp, cond_string,
+					  &catch_vfork_breakpoint_ops);
       break;
     default:
       error (_("unsupported or unknown fork kind; cannot catch it"));
@@ -11181,10 +11324,8 @@ catch_exec_command_1 (const char *arg, i
 		      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;
+  bool temp = command->context () == CATCH_TEMPORARY;
 
   if (!arg)
     arg = "";
@@ -11201,7 +11342,7 @@ catch_exec_command_1 (const char *arg, i
     error (_("Junk at end of arguments."));
 
   std::unique_ptr<exec_catchpoint> c (new exec_catchpoint ());
-  init_catchpoint (c.get (), gdbarch, tempflag, cond_string,
+  init_catchpoint (c.get (), gdbarch, temp, cond_string,
 		   &catch_exec_breakpoint_ops);
   c->exec_pathname = NULL;
 
@@ -11227,13 +11368,13 @@ init_ada_exception_breakpoint (struct br
       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.  */
+	 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);
@@ -11245,19 +11386,8 @@ init_ada_exception_breakpoint (struct br
   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 +11413,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,29 +11468,28 @@ 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))
 	    {
-	      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.  */
@@ -11444,19 +11572,15 @@ clear_command (const char *arg, int from
 void
 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)
-  {
+  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
@@ -11482,6 +11606,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 +11635,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,14 +11667,12 @@ 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;
 
@@ -11560,7 +11692,7 @@ 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
@@ -11616,8 +11748,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 +11766,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 +11784,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,8 +11796,6 @@ 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.  */
@@ -11687,24 +11814,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,14 +11844,9 @@ 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;
@@ -11736,28 +11856,28 @@ update_global_location_list (enum ugll_i
 
       /* 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)
+	  if (bp_locations[loc2_i] == old_loc)
 	    found_object = 1;
 	}
 
@@ -11800,12 +11920,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,8 +11944,7 @@ 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;
@@ -11903,7 +12025,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 +12063,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)
@@ -12147,6 +12281,13 @@ breakpoint::~breakpoint ()
   xfree (this->extra_string);
 }
 
+/* See breakpoint.h.  */
+
+bp_locations_range breakpoint::locations ()
+{
+  return bp_locations_range (this->loc);
+}
+
 static struct bp_location *
 base_breakpoint_allocate_location (struct breakpoint *self)
 {
@@ -12235,7 +12376,7 @@ base_breakpoint_print_recreate (struct b
 
 static void
 base_breakpoint_create_sals_from_location
-  (const struct event_location *location,
+  (struct event_location *location,
    struct linespec_result *canonical,
    enum bptype type_wanted)
 {
@@ -12260,7 +12401,7 @@ base_breakpoint_create_breakpoints_sal (
 
 static std::vector<symtab_and_line>
 base_breakpoint_decode_location (struct breakpoint *b,
-				 const struct event_location *location,
+				 struct event_location *location,
 				 struct program_space *search_pspace)
 {
   internal_error_pure_virtual_called ();
@@ -12399,7 +12540,7 @@ bkpt_print_it (bpstat bs)
 
   gdb_assert (bs->bp_location_at != NULL);
 
-  bl = bs->bp_location_at;
+  bl = bs->bp_location_at.get ();
   b = bs->breakpoint_at;
 
   bp_temp = b->disposition == disp_del;
@@ -12483,7 +12624,7 @@ bkpt_print_recreate (struct breakpoint *
 }
 
 static void
-bkpt_create_sals_from_location (const struct event_location *location,
+bkpt_create_sals_from_location (struct event_location *location,
 				struct linespec_result *canonical,
 				enum bptype type_wanted)
 {
@@ -12514,7 +12655,7 @@ bkpt_create_breakpoints_sal (struct gdba
 
 static std::vector<symtab_and_line>
 bkpt_decode_location (struct breakpoint *b,
-		      const struct event_location *location,
+		      struct event_location *location,
 		      struct program_space *search_pspace)
 {
   return decode_location_default (b, location, search_pspace);
@@ -12537,7 +12678,7 @@ internal_bkpt_re_set (struct breakpoint
       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
@@ -12687,7 +12828,7 @@ bkpt_probe_remove_location (struct bp_lo
 }
 
 static void
-bkpt_probe_create_sals_from_location (const struct event_location *location,
+bkpt_probe_create_sals_from_location (struct event_location *location,
 				      struct linespec_result *canonical,
 				      enum bptype type_wanted)
 {
@@ -12701,7 +12842,7 @@ bkpt_probe_create_sals_from_location (co
 
 static std::vector<symtab_and_line>
 bkpt_probe_decode_location (struct breakpoint *b,
-			    const struct event_location *location,
+			    struct event_location *location,
 			    struct program_space *search_pspace)
 {
   std::vector<symtab_and_line> sals = parse_probes (location, search_pspace, NULL);
@@ -12795,7 +12936,7 @@ tracepoint_print_recreate (struct breakp
 }
 
 static void
-tracepoint_create_sals_from_location (const struct event_location *location,
+tracepoint_create_sals_from_location (struct event_location *location,
 				      struct linespec_result *canonical,
 				      enum bptype type_wanted)
 {
@@ -12826,7 +12967,7 @@ tracepoint_create_breakpoints_sal (struc
 
 static std::vector<symtab_and_line>
 tracepoint_decode_location (struct breakpoint *b,
-			    const struct event_location *location,
+			    struct event_location *location,
 			    struct program_space *search_pspace)
 {
   return decode_location_default (b, location, search_pspace);
@@ -12838,7 +12979,7 @@ struct breakpoint_ops tracepoint_breakpo
 
 static void
 tracepoint_probe_create_sals_from_location
-  (const struct event_location *location,
+  (struct event_location *location,
    struct linespec_result *canonical,
    enum bptype type_wanted)
 {
@@ -12848,7 +12989,7 @@ tracepoint_probe_create_sals_from_locati
 
 static std::vector<symtab_and_line>
 tracepoint_probe_decode_location (struct breakpoint *b,
-				  const struct event_location *location,
+				  struct event_location *location,
 				  struct program_space *search_pspace)
 {
   /* We use the same method for breakpoint on probes.  */
@@ -12929,7 +13070,7 @@ dprintf_after_condition_true (struct bps
    markers (`-m').  */
 
 static void
-strace_marker_create_sals_from_location (const struct event_location *location,
+strace_marker_create_sals_from_location (struct event_location *location,
 					 struct linespec_result *canonical,
 					 enum bptype type_wanted)
 {
@@ -12999,7 +13140,7 @@ 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 event_location *location,
 			       struct program_space *search_pspace)
 {
   struct tracepoint *tp = (struct tracepoint *) b;
@@ -13030,8 +13171,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
@@ -13086,12 +13225,12 @@ delete_breakpoint (struct breakpoint *bp
   if (breakpoint_chain == bpt)
     breakpoint_chain = bpt->next;
 
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     if (b->next == bpt)
-    {
-      b->next = bpt->next;
-      break;
-    }
+      {
+	b->next = bpt->next;
+	break;
+      }
 
   /* Be sure no bpstat's are pointing at the breakpoint after it's
      been freed.  */
@@ -13157,8 +13296,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,9 +13303,9 @@ 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)
+	 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;
@@ -13178,11 +13315,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
@@ -13199,9 +13334,7 @@ delete_command (const char *arg, int fro
 static int
 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
@@ -13218,8 +13351,8 @@ static int
 ambiguous_names_p (struct bp_location *loc)
 {
   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)
     {
@@ -13230,19 +13363,15 @@ ambiguous_names_p (struct bp_location *l
       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 1;
       *slot = name;
     }
 
-  htab_delete (htab);
   return 0;
 }
 
@@ -13387,6 +13516,9 @@ locations_are_equal (struct bp_location
       if (a->enabled != b->enabled)
 	return 0;
 
+      if (a->disabled_by_cond != b->disabled_by_cond)
+	return 0;
+
       a = a->next;
       b = b->next;
     }
@@ -13494,10 +13626,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;
 	    }
 	}
 
@@ -13522,25 +13651,35 @@ update_breakpoint_locations (struct brea
 
     for (; e; e = e->next)
       {
-	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)
+		for (bp_location *l : b->locations ())
 		  if (l->function_name
 		      && strcmp (e->function_name, l->function_name) == 0)
 		    {
-		      l->enabled = 0;
+		      l->enabled = e->enabled;
+		      l->disabled_by_cond = e->disabled_by_cond;
 		      break;
 		    }
 	      }
@@ -13614,9 +13753,9 @@ location_to_sals (struct breakpoint *b,
 	  char *cond_string, *extra_string;
 	  int thread, task;
 
-	  find_condition_and_thread (b->extra_string, sals[0].pc,
-				     &cond_string, &thread, &task,
-				     &extra_string);
+	  find_condition_and_thread_for_sals (sals, b->extra_string,
+					      &cond_string, &thread,
+					      &task, &extra_string);
 	  gdb_assert (b->cond_string == NULL);
 	  if (cond_string)
 	    b->cond_string = cond_string;
@@ -13673,7 +13812,7 @@ breakpoint_re_set_default (struct breakp
    calls parse_breakpoint_sals.  Return 1 for success, zero for failure.  */
 
 static void
-create_sals_from_location_default (const struct event_location *location,
+create_sals_from_location_default (struct event_location *location,
 				   struct linespec_result *canonical,
 				   enum bptype type_wanted)
 {
@@ -13710,7 +13849,7 @@ create_breakpoints_sal_default (struct g
 
 static std::vector<symtab_and_line>
 decode_location_default (struct breakpoint *b,
-			 const struct event_location *location,
+			 struct event_location *location,
 			 struct program_space *search_pspace)
 {
   struct linespec_result canonical;
@@ -13747,8 +13886,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,7 +13909,7 @@ 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
 	  {
@@ -13824,40 +13961,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)
+  for (breakpoint *b : all_breakpoints ())
     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;
-    }
+      {
+	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;
+      }
 
   error (_("No breakpoint number %d."), bptnum);
 }
@@ -13901,13 +14036,11 @@ 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)
+	  for (breakpoint *b : all_breakpoints_safe ())
 	    if (b->number == i)
 	      {
 		match = true;
@@ -13945,13 +14078,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,7 +14087,7 @@ 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;
 
@@ -14101,6 +14228,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;
@@ -14152,9 +14283,7 @@ 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)
+      for (bp_location *location : bpt->locations ())
 	target_disable_tracepoint (location);
     }
 
@@ -14173,9 +14302,7 @@ enable_disable_command (const char *args
 {
   if (args == 0)
     {
-      struct breakpoint *bpt;
-
-      ALL_BREAKPOINTS (bpt)
+      for (breakpoint *bpt : all_breakpoints ())
 	if (user_breakpoint_p (bpt))
 	  {
 	    if (enable)
@@ -14275,9 +14402,7 @@ 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)
+      for (bp_location *location : bpt->locations ())
 	target_enable_tracepoint (location);
     }
 
@@ -14355,16 +14480,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,9 +14489,7 @@ invalidate_bp_value_on_memory_change (st
 				      CORE_ADDR addr, ssize_t len,
 				      const bfd_byte *data)
 {
-  struct breakpoint *bp;
-
-  ALL_BREAKPOINTS (bp)
+  for (breakpoint *bp : all_breakpoints ())
     if (bp->enable_state == bp_enabled
 	&& bp->type == bp_hardware_watchpoint)
       {
@@ -14384,9 +14497,7 @@ invalidate_bp_value_on_memory_change (st
 
 	if (wp->val_valid && wp->val != nullptr)
 	  {
-	    struct bp_location *loc;
-
-	    for (loc = bp->loc; loc != NULL; loc = loc->next)
+	    for (bp_location *loc : bp->locations ())
 	      if (loc->loc_type == bp_loc_hardware_watchpoint
 		  && loc->address + loc->length > addr
 		  && addr + len > loc->address)
@@ -14455,9 +14566,7 @@ 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)
+  for (bp_location *loc : bp->locations ())
     if (loc->inserted
 	&& breakpoint_location_address_match (loc, aspace, pc))
       return 1;
@@ -14472,9 +14581,7 @@ 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))
@@ -14503,7 +14610,7 @@ trace_command (const char *arg, int from
 
   create_breakpoint (get_current_arch (),
 		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     NULL, 0, arg, false, 1 /* parse arg */,
 		     0 /* tempflag */,
 		     bp_tracepoint /* type_wanted */,
 		     0 /* Ignore count */,
@@ -14521,7 +14628,7 @@ ftrace_command (const char *arg, int fro
 							 current_language);
   create_breakpoint (get_current_arch (),
 		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     NULL, 0, arg, false, 1 /* parse arg */,
 		     0 /* tempflag */,
 		     bp_fast_tracepoint /* type_wanted */,
 		     0 /* Ignore count */,
@@ -14555,7 +14662,7 @@ strace_command (const char *arg, int fro
 
   create_breakpoint (get_current_arch (),
 		     location.get (),
-		     NULL, 0, arg, 1 /* parse arg */,
+		     NULL, 0, arg, false, 1 /* parse arg */,
 		     0 /* tempflag */,
 		     bp_static_tracepoint /* type_wanted */,
 		     0 /* Ignore count */,
@@ -14625,6 +14732,7 @@ create_tracepoint_from_upload (struct up
   if (!create_breakpoint (get_current_arch (),
 			  location.get (),
 			  utp->cond_string.get (), -1, addr_str,
+			  false /* force_condition */,
 			  0 /* parse cond/thread */,
 			  0 /* tempflag */,
 			  utp->type /* type_wanted */,
@@ -14719,8 +14827,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 +14834,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,7 +14848,7 @@ delete_trace_command (const char *arg, i
       if (!from_tty
 	  || (breaks_to_delete && query (_("Delete all tracepoints? "))))
 	{
-	  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+	  for (breakpoint *b : all_breakpoints_safe ())
 	    if (is_tracepoint (b) && user_breakpoint_p (b))
 	      delete_breakpoint (b);
 	}
@@ -14788,17 +14894,15 @@ 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 ())
+	{
+	  t1 = (struct tracepoint *) b;
+	  trace_pass_set_count (t1, count, from_tty);
+	}
     }
   else if (*args == '\0')
     {
@@ -14821,9 +14925,7 @@ trace_pass_command (const char *args, in
 struct tracepoint *
 get_tracepoint (int num)
 {
-  struct breakpoint *t;
-
-  ALL_TRACEPOINTS (t)
+  for (breakpoint *t : all_tracepoints ())
     if (t->number == num)
       return (struct tracepoint *) t;
 
@@ -14837,9 +14939,7 @@ 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;
 
@@ -14859,7 +14959,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;
 
@@ -14883,11 +14982,9 @@ get_tracepoint_by_number (const char **a
       return NULL;
     }
 
-  ALL_TRACEPOINTS (t)
+  for (breakpoint *t : all_tracepoints ())
     if (t->number == tpnum)
-    {
       return (struct tracepoint *) t;
-    }
 
   printf_unfiltered ("No tracepoint number %d.\n", tpnum);
   return NULL;
@@ -14914,7 +15011,6 @@ static void
 save_breakpoints (const char *filename, int from_tty,
 		  bool (*filter) (const struct breakpoint *))
 {
-  struct breakpoint *tp;
   int any = 0;
   int extra_trace_bits = 0;
 
@@ -14922,26 +15018,26 @@ save_breakpoints (const char *filename,
     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 = 1;
 
-    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,63 +15056,66 @@ 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->ops->print_recreate (tp, &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);
+      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");
+
+	  current_uiout->redirect (&fp);
+	  try
+	    {
+	      print_command_lines (current_uiout, tp->commands.get (), 2);
+	    }
+	  catch (const gdb_exception &ex)
+	    {
+	    current_uiout->redirect (NULL);
+	      throw;
+	    }
 
-    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;
-	  }
+	  fp.puts ("  end\n");
+	}
 
-	current_uiout->redirect (NULL);
-	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)
+	{
+	  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->loc && tp->loc->next)
-      {
-	struct bp_location *loc;
-	int n = 1;
+	  for (bp_location *loc : tp->locations ())
+	    {
+	      if (!loc->enabled)
+		fp.printf ("disable $bpnum.%d\n", n);
 
-	for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
-	  if (!loc->enabled)
-	    fp.printf ("disable $bpnum.%d\n", n);
-      }
-  }
+	      n++;
+	    }
+	}
+    }
 
   if (extra_trace_bits && *default_collect)
     fp.printf ("set default-collect %s\n", default_collect);
@@ -15041,22 +15140,6 @@ 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.  */
@@ -15091,7 +15174,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,6 +15188,9 @@ stack frame.  This is useful for breakin
 \n\
 THREADNUM is the number from \"info threads\".\n\
 CONDITION is a boolean expression.\n\
+\n\
+With the \"-force-condition\" flag, the condition is defined even when\n\
+it is invalid for all current locations.\n\
 \n" LOCATION_HELP_STRING "\n\n\
 Multiple breakpoints at one place are permitted, and useful if their\n\
 conditions are different.\n\
@@ -15128,38 +15215,16 @@ 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->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->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.  */
 
@@ -15181,15 +15246,12 @@ int
 pc_at_non_inline_function (const address_space *aspace, CORE_ADDR pc,
 			   const struct target_waitstatus *ws)
 {
-  struct breakpoint *b;
-  struct bp_location *bl;
-
-  ALL_BREAKPOINTS (b)
+  for (breakpoint *b : all_breakpoints ())
     {
       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))
@@ -15205,9 +15267,7 @@ pc_at_non_inline_function (const address
 void
 breakpoint_free_objfile (struct objfile *objfile)
 {
-  struct bp_location **locp, *loc;
-
-  ALL_BP_LOCATIONS (loc, locp)
+  for (bp_location *loc : all_bp_locations ())
     if (loc->symtab != NULL && SYMTAB_OBJFILE (loc->symtab) == objfile)
       loc->symtab = NULL;
 }
@@ -15396,16 +15456,20 @@ 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);
-  gdb::observers::free_objfile.attach (disable_breakpoints_in_freed_objfile);
-  gdb::observers::memory_changed.attach (invalidate_bp_value_on_memory_change);
+  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");
 
   breakpoint_chain = 0;
   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
@@ -15430,11 +15494,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 +15533,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 +15551,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 +15591,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 +15611,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,7 +15631,8 @@ 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\
@@ -15564,23 +15640,24 @@ With no argument, clears all breakpoints
 is executing in.\n"
 "\n" LOCATION_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);
+  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);
 
   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);
+			     &stoplist, 1, &cmdlist);
       add_cmd ("in", class_breakpoint, stopin_command,
 	       _("Break in function or address."), &stoplist);
       add_cmd ("at", class_breakpoint, stopat_command,
@@ -15602,7 +15679,8 @@ Convenience variable \"$bpnum\" contains
 breakpoint set."));
     }
 
-  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 +15696,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,29 +15719,29 @@ 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,
+		     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,
+		     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,
+		     NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
   add_catch_command ("load", _("Catch loads of shared libraries.\n\
@@ -15681,32 +15759,46 @@ If REGEX is given, only stop for librari
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
 
-  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\
+  const auto opts = make_watch_options_def_group (nullptr);
+
+  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 +15821,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\
@@ -15770,19 +15863,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 +15899,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 +15912,28 @@ 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_basic_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_set_cmdlist,
+			0/*allow-unknown*/, &setlist);
+  add_show_prefix_cmd ("breakpoint", class_maintenance, _("\
 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_show_cmdlist,
+		       0/*allow-unknown*/, &showlist);
 
   add_setshow_auto_boolean_cmd ("pending", no_class,
 				&pending_break_support, _("\
@@ -15891,7 +15987,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 +16000,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\
@@ -15967,6 +16063,8 @@ 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");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/breakpoint.h ./gdb/breakpoint.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/breakpoint.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/breakpoint.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Data structures associated with breakpoints in GDB.
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,7 +28,10 @@
 #include "location.h"
 #include <vector>
 #include "gdbsupport/array-view.h"
+#include "gdbsupport/filtered-iterator.h"
 #include "gdbsupport/function-view.h"
+#include "gdbsupport/refcounted-object.h"
+#include "gdbsupport/safe-iterator.h"
 #include "cli/cli-script.h"
 
 struct block;
@@ -311,7 +314,7 @@ enum bp_loc_type
   bp_loc_other			/* Miscellaneous...  */
 };
 
-class bp_location
+class bp_location : public refcounted_object
 {
 public:
   bp_location () = default;
@@ -329,9 +332,6 @@ public:
      the same parent breakpoint.  */
   bp_location *next = NULL;
 
-  /* The reference count.  */
-  int refc = 0;
-
   /* Type of this breakpoint location.  */
   bp_loc_type loc_type {};
 
@@ -387,6 +387,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;
 
@@ -504,6 +510,27 @@ public:
   const struct objfile *objfile = NULL;
 };
 
+/* 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
@@ -609,7 +636,7 @@ struct breakpoint_ops
      `create_sals_from_location_default'.
 
      This function is called inside `create_breakpoint'.  */
-  void (*create_sals_from_location) (const struct event_location *location,
+  void (*create_sals_from_location) (struct event_location *location,
 				     struct linespec_result *canonical,
 				     enum bptype type_wanted);
 
@@ -636,7 +663,7 @@ struct breakpoint_ops
      This function is called inside `location_to_sals'.  */
   std::vector<symtab_and_line> (*decode_location)
     (struct breakpoint *b,
-     const struct event_location *location,
+     struct event_location *location,
      struct program_space *search_pspace);
 
   /* Return true if this breakpoint explains a signal.  See
@@ -677,6 +704,10 @@ enum watchpoint_triggered
 
 extern bool target_exact_watchpoints;
 
+/* bp_location linked list range.  */
+
+using bp_locations_range = next_adapter<bp_location>;
+
 /* 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
@@ -689,6 +720,9 @@ struct breakpoint
 {
   virtual ~breakpoint ();
 
+  /* Return a range of this breakpoint's locations.  */
+  bp_locations_range locations ();
+
   /* Methods associated with this breakpoint.  */
   const breakpoint_ops *ops = NULL;
 
@@ -1124,7 +1158,6 @@ struct bpstats
   {
     bpstats ();
     bpstats (struct bp_location *bl, bpstat **bs_link_pointer);
-    ~bpstats ();
 
     bpstats (const bpstats &);
     bpstats &operator= (const bpstats &) = delete;
@@ -1149,7 +1182,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
@@ -1194,11 +1227,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);
 
@@ -1285,10 +1313,6 @@ extern void breakpoint_init_inferior (en
 
 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);
-
 /* Return the chain of command lines to execute when this breakpoint
    is hit.  */
 extern struct command_line *breakpoint_commands (struct breakpoint *b);
@@ -1299,9 +1323,9 @@ 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;
@@ -1338,8 +1362,13 @@ extern void
 				 int enabled,
 				 int from_tty);
 
+/* Initialize a new breakpoint of the bp_catchpoint kind.  If TEMP
+   is true, 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.  */
+
 extern void init_catchpoint (struct breakpoint *b,
-			     struct gdbarch *gdbarch, int tempflag,
+			     struct gdbarch *gdbarch, bool temp,
 			     const char *cond_string,
 			     const struct breakpoint_ops *ops);
 
@@ -1385,15 +1414,21 @@ enum breakpoint_create_flags
    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 event_location *location,
 			      const char *cond_string, int thread,
 			      const char *extra_string,
+			      bool force_condition,
 			      int parse_extra,
 			      int tempflag, enum bptype wanted_type,
 			      int ignore_count,
@@ -1536,7 +1571,7 @@ extern void breakpoint_set_task (struct
 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 +1601,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
@@ -1616,9 +1656,19 @@ 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);
+
+/* 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.
    Returns 0 if not, greater than 0 if we are.  */
@@ -1639,9 +1689,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,16 +1709,52 @@ public:
   DISABLE_COPY_AND_ASSIGN (scoped_rbreak_breakpoints);
 };
 
-/* Breakpoint iterator function.
+/* Breakpoint linked list iterator.  */
+
+using breakpoint_iterator = next_iterator<breakpoint>;
+
+/* Breakpoint linked list range.  */
+
+using breakpoint_range = next_adapter<breakpoint, 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.  */
+
+using tracepoint_range = next_adapter<breakpoint, tracepoint_iterator>;
+
+/* Return a range to iterate over all tracepoints.  */
+
+tracepoint_range all_tracepoints ();
+
+/* Return a range to iterate over all breakpoint locations.  */
 
-   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 *)>);
+const std::vector<bp_location *> &all_bp_locations ();
 
 /* Nonzero if the specified PC cannot be a location where functions
    have been inlined.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-kvm.c ./gdb/bsd-kvm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-kvm.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bsd-kvm.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD Kernel Data Access Library (libkvm) interface.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,6 +29,7 @@
 #include "gdbcore.h"
 #include "inferior.h"          /* for get_exec_file */
 #include "gdbthread.h"
+#include "gdbsupport/pathstuff.h"
 
 #include <fcntl.h>
 #include <kvm.h>
@@ -106,7 +107,7 @@ 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;
 
@@ -114,14 +115,13 @@ bsd_kvm_target_open (const char *arg, in
 
   if (arg)
     {
-      char *temp;
-
       filename = tilde_expand (arg);
       if (filename[0] != '/')
 	{
-	  temp = concat (current_directory, "/", filename, (char *)NULL);
+	  gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (filename));
+
 	  xfree (filename);
-	  filename = temp;
+	  filename = temp.release ();
 	}
     }
 
@@ -132,12 +132,12 @@ bsd_kvm_target_open (const char *arg, in
     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);
 
@@ -155,8 +155,8 @@ bsd_kvm_target::close ()
       core_kd = NULL;
     }
 
-  inferior_ptid = null_ptid;
-  discard_all_inferiors ();
+  switch_to_no_thread ();
+  exit_inferior_silent (current_inferior ());
 }
 
 static LONGEST
@@ -388,7 +388,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-kvm.h ./gdb/bsd-kvm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-kvm.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bsd-kvm.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD Kernel Data Access Library (libkvm) interface.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-uthread.c ./gdb/bsd-uthread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-uthread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bsd-uthread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD user-level threads support.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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;
@@ -231,7 +231,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;
 }
@@ -259,17 +259,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 */
@@ -279,7 +279,7 @@ static const char *bsd_uthread_solib_nam
 static void
 bsd_uthread_solib_loaded (struct so_list *so)
 {
-  const char **names = bsd_uthread_solib_names;
+  const char * const *names = bsd_uthread_solib_names;
 
   for (names = bsd_uthread_solib_names; *names; names++)
     {
@@ -370,20 +370,22 @@ 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 ());
   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.  */
@@ -399,9 +401,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 +416,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 = find_thread_ptid (beneath, ptid);
   if (thread == NULL || thread->state == THREAD_EXITED)
-    add_thread (ptid);
+    add_thread (beneath, ptid);
 
   return ptid;
 }
@@ -467,16 +469,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 = find_thread_ptid (proc_target, 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 +488,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",
@@ -540,12 +544,16 @@ bsd_uthread_target::pid_to_str (ptid_t p
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-uthread.h ./gdb/bsd-uthread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/bsd-uthread.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/bsd-uthread.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* BSD user-level threads support.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/btrace.c ./gdb/btrace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/btrace.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/btrace.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Branch trace support for GDB, the GNU debugger.
 
-   Copyright (C) 2013-2020 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 Free Software Foundation, Inc.
 
    Contributed by Intel Corp. <markus.t.metzger@intel.com>
 
@@ -62,7 +62,7 @@ static void btrace_add_pc (struct thread
   do									\
     {									\
       if (record_debug != 0)						\
-        fprintf_unfiltered (gdb_stdlog,					\
+	fprintf_unfiltered (gdb_stdlog,					\
 			    "[btrace] " msg "\n", ##args);		\
     }									\
   while (0)
@@ -265,7 +265,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 +283,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;
 
@@ -1222,6 +1222,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);
@@ -1533,7 +1536,7 @@ btrace_compute_ftrace_1 (struct thread_i
       return;
     }
 
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
+  internal_error (__FILE__, __LINE__, _("Unknown branch trace format."));
 }
 
 static void
@@ -1592,7 +1595,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)
@@ -1604,9 +1608,9 @@ btrace_enable (struct thread_info *tp, c
 
   tp->btrace.target = target_enable_btrace (tp->ptid, 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,7 +1655,8 @@ 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 ());
@@ -1791,7 +1796,7 @@ btrace_stitch_trace (struct btrace_data
       return -1;
     }
 
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
+  internal_error (__FILE__, __LINE__, _("Unknown branch trace format."));
 }
 
 /* Clear the branch trace histories in BTINFO.  */
@@ -1908,11 +1913,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));
@@ -3228,7 +3234,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 = find_thread_ptid (current_inferior (), inferior_ptid);
   if (tp == NULL)
     error (_("No thread."));
 
@@ -3358,51 +3364,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
@@ -3471,36 +3432,36 @@ show_maint_btrace_pt_skip_pad  (struct u
 
 /* 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_basic_prefix_cmd ("btrace", class_maintenance,
+			_("Branch tracing maintenance commands."),
+			&maint_btrace_cmdlist, 0, &maintenancelist);
 
-  add_prefix_cmd ("btrace", class_maintenance, maint_btrace_set_cmd, _("\
+  add_basic_prefix_cmd ("btrace", class_maintenance, _("\
 Set branch tracing specific variables."),
-                  &maint_btrace_set_cmdlist, "maintenance set btrace ",
-                  0, &maintenance_set_cmdlist);
+			&maint_btrace_set_cmdlist,
+			0, &maintenance_set_cmdlist);
 
-  add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_set_cmd, _("\
+  add_basic_prefix_cmd ("pt", class_maintenance, _("\
 Set Intel Processor Trace specific variables."),
-                  &maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ",
-                  0, &maint_btrace_set_cmdlist);
+			&maint_btrace_pt_set_cmdlist,
+			0, &maint_btrace_set_cmdlist);
 
-  add_prefix_cmd ("btrace", class_maintenance, maint_btrace_show_cmd, _("\
+  add_show_prefix_cmd ("btrace", class_maintenance, _("\
 Show branch tracing specific variables."),
-                  &maint_btrace_show_cmdlist, "maintenance show btrace ",
-                  0, &maintenance_show_cmdlist);
+		       &maint_btrace_show_cmdlist,
+		       0, &maintenance_show_cmdlist);
 
-  add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_show_cmd, _("\
+  add_show_prefix_cmd ("pt", class_maintenance, _("\
 Show Intel Processor Trace specific variables."),
-                  &maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ",
-                  0, &maint_btrace_show_cmdlist);
+		       &maint_btrace_pt_show_cmdlist,
+		       0, &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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/btrace.h ./gdb/btrace.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/btrace.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/btrace.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Branch trace support for GDB, the GNU debugger.
 
-   Copyright (C) 2013-2020 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 Free Software Foundation, Inc.
 
    Contributed by Intel Corp. <markus.t.metzger@intel.com>.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/build-id.c ./gdb/build-id.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/build-id.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/build-id.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* build-id-related functions.
 
-   Copyright (C) 1991-2020 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -57,7 +57,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
@@ -94,7 +94,7 @@ build_id_to_debug_bfd_1 (const std::stri
     }
 
   /* 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.get (), gnutarget);
 
   if (debug_bfd == NULL)
     {
@@ -140,7 +140,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,12 +161,12 @@ 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.  */
+	 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)
 	{
 	  link = gdb_sysroot + link;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/build-id.h ./gdb/build-id.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/build-id.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/build-id.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* build-id-related functions.
 
-   Copyright (C) 1991-2020 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym.c ./gdb/buildsym.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/buildsym.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support routines for building symbol tables in GDB's internal format.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -120,7 +120,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 +135,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,7 +213,7 @@ 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;
@@ -254,7 +254,7 @@ buildsym_compunit::finish_block_internal
       SYMBOL_BLOCK_VALUE (symbol) = block;
       BLOCK_FUNCTION (block) = 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
@@ -271,9 +271,10 @@ buildsym_compunit::finish_block_internal
 	    }
 	  if (nparams > 0)
 	    {
-	      TYPE_NFIELDS (ftype) = nparams;
-	      TYPE_FIELDS (ftype) = (struct field *)
-		TYPE_ALLOC (ftype, nparams * sizeof (struct field));
+	      ftype->set_num_fields (nparams);
+	      ftype->set_fields
+		((struct field *)
+		 TYPE_ALLOC (ftype, nparams * sizeof (struct field)));
 
 	      iparams = 0;
 	      /* Here we want to directly access the dictionary, because
@@ -285,7 +286,7 @@ buildsym_compunit::finish_block_internal
 
 		  if (SYMBOL_IS_ARGUMENT (sym))
 		    {
-		      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
+		      ftype->field (iparams).set_type (SYMBOL_TYPE (sym));
 		      TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
 		      iparams++;
 		    }
@@ -620,15 +621,15 @@ buildsym_compunit::patch_subfile_names (
       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);
       if (subfile->language == language_unknown
@@ -666,16 +667,10 @@ buildsym_compunit::pop_subfile ()
 
 void
 buildsym_compunit::record_line (struct subfile *subfile, int line,
-				CORE_ADDR pc)
+				CORE_ADDR pc, bool is_stmt)
 {
   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)
     {
@@ -687,7 +682,7 @@ buildsym_compunit::record_line (struct s
       m_have_line_numbers = true;
     }
 
-  if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length)
+  if (subfile->line_vector->nitems >= subfile->line_vector_length)
     {
       subfile->line_vector_length *= 2;
       subfile->line_vector = (struct linetable *)
@@ -710,38 +705,28 @@ 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)
+      struct linetable_entry *last = nullptr;
+      while (subfile->line_vector->nitems > 0)
 	{
-	  e--;
+	  last = subfile->line_vector->item + subfile->line_vector->nitems - 1;
+	  if (last->pc != pc)
+	    break;
 	  subfile->line_vector->nitems--;
 	}
+
+      /* Ignore an end-of-sequence marker marking an empty sequence.  */
+      if (last == nullptr || last->line == 0)
+	return;
     }
 
   e = subfile->line_vector->item + subfile->line_vector->nitems++;
   e->line = line;
+  e->is_stmt = is_stmt ? 1 : 0;
   e->pc = pc;
 }
 
-/* Needed in order to sort line tables from IBM xcoff files.  Sigh!  */
-
-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;
-
-  if (ln1.pc > ln2.pc)
-    return false;
-
-  /* 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;
-}
 
 /* Subroutine of end_symtab to simplify it.  Look for a subfile that
    matches the main source file's basename.  If there is only one, and
@@ -959,14 +944,27 @@ buildsym_compunit::end_symtab_with_block
 	  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.  */
+	  const auto lte_is_less_than
+	    = [] (const linetable_entry &ln1,
+		  const linetable_entry &ln2) -> bool
+	      {
+		if (ln1.pc == ln2.pc
+		    && ((ln1.line == 0) != (ln2.line == 0)))
+		  return ln1.line == 0;
+
+		return (ln1.pc < ln2.pc);
+	      };
+
+	  /* Like the pending blocks, the line table may be scrambled in
+	     reordered executables.  Sort it if OBJF_REORDERED is true.  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.  */
 	  if (m_objfile->flags & OBJF_REORDERED)
-	    std::sort (subfile->line_vector->item,
-		       subfile->line_vector->item
-			 + subfile->line_vector->nitems,
-		       lte_is_less_than);
+	    std::stable_sort (subfile->line_vector->item,
+			      subfile->line_vector->item
+			      + subfile->line_vector->nitems,
+			      lte_is_less_than);
 	}
 
       /* Allocate a symbol table if necessary.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym.h ./gdb/buildsym.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/buildsym.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Build symbol tables in GDB's internal format.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -187,7 +187,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, CORE_ADDR pc,
+		    bool is_stmt);
 
   struct compunit_symtab *get_compunit_symtab ()
   {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym-legacy.c ./gdb/buildsym-legacy.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym-legacy.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/buildsym-legacy.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Legacy support routines for building symbol tables in GDB's internal format.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -252,7 +252,9 @@ void
 record_line (struct subfile *subfile, int line, CORE_ADDR pc)
 {
   gdb_assert (buildsym_compunit != nullptr);
-  buildsym_compunit->record_line (subfile, line, pc);
+  /* 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, true);
 }
 
 /* Start a new symtab for a new source file in OBJFILE.  Called, for example,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym-legacy.h ./gdb/buildsym-legacy.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/buildsym-legacy.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/buildsym-legacy.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Build symbol tables in GDB's internal format - legacy APIs
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -63,7 +63,7 @@ extern struct block *finish_block (struc
 				   CORE_ADDR end);
 
 extern void record_block_range (struct block *,
-                                CORE_ADDR start, CORE_ADDR end_inclusive);
+				CORE_ADDR start, CORE_ADDR end_inclusive);
 
 extern void start_subfile (const char *name);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-exp.c ./gdb/c-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-exp.c	2020-03-07 02:11:12.000000000 +0000
+++ ./gdb/c-exp.c	2021-12-16 02:00:18.000000000 +0000
@@ -1,21 +1,20 @@
+/* A Bison parser, made by GNU Bison 3.6.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, 2018-2020 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,13 +27,17 @@
    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.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -46,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,14 +63,10 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
-/* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
+/* First part of user prologue.  */
 #line 36 "c-exp.y"
 
 
@@ -90,6 +89,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,175 +159,200 @@ static void yyerror (const char *);
 
 static int type_aggregate_p (struct type *);
 
+using namespace expr;
 
-
-/* Line 189 of yacc.c  */
 #line 165 "c-exp.c.tmp"
 
-/* Enabling traces.  */
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTRPTR nullptr
+#   else
+#    define YY_NULLPTRPTR 0
+#   endif
+#  else
+#   define YY_NULLPTRPTR ((void*)0)
+#  endif
+# endif
+
+
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+#if YYDEBUG
+extern int yydebug;
 #endif
 
-
-/* Tokens.  */
+/* Token kinds.  */
 #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
+  {
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    INT = 258,                     /* INT  */
+    COMPLEX_INT = 259,             /* COMPLEX_INT  */
+    FLOAT = 260,                   /* FLOAT  */
+    COMPLEX_FLOAT = 261,           /* COMPLEX_FLOAT  */
+    STRING = 262,                  /* STRING  */
+    NSSTRING = 263,                /* NSSTRING  */
+    SELECTOR = 264,                /* SELECTOR  */
+    CHAR = 265,                    /* CHAR  */
+    NAME = 266,                    /* NAME  */
+    UNKNOWN_CPP_NAME = 267,        /* UNKNOWN_CPP_NAME  */
+    COMPLETE = 268,                /* COMPLETE  */
+    TYPENAME = 269,                /* TYPENAME  */
+    CLASSNAME = 270,               /* CLASSNAME  */
+    OBJC_LBRAC = 271,              /* OBJC_LBRAC  */
+    NAME_OR_INT = 272,             /* NAME_OR_INT  */
+    OPERATOR = 273,                /* OPERATOR  */
+    STRUCT = 274,                  /* STRUCT  */
+    CLASS = 275,                   /* CLASS  */
+    UNION = 276,                   /* UNION  */
+    ENUM = 277,                    /* ENUM  */
+    SIZEOF = 278,                  /* SIZEOF  */
+    ALIGNOF = 279,                 /* ALIGNOF  */
+    UNSIGNED = 280,                /* UNSIGNED  */
+    COLONCOLON = 281,              /* COLONCOLON  */
+    TEMPLATE = 282,                /* TEMPLATE  */
+    ERROR = 283,                   /* ERROR  */
+    NEW = 284,                     /* NEW  */
+    DELETE = 285,                  /* DELETE  */
+    REINTERPRET_CAST = 286,        /* REINTERPRET_CAST  */
+    DYNAMIC_CAST = 287,            /* DYNAMIC_CAST  */
+    STATIC_CAST = 288,             /* STATIC_CAST  */
+    CONST_CAST = 289,              /* CONST_CAST  */
+    ENTRY = 290,                   /* ENTRY  */
+    TYPEOF = 291,                  /* TYPEOF  */
+    DECLTYPE = 292,                /* DECLTYPE  */
+    TYPEID = 293,                  /* TYPEID  */
+    SIGNED_KEYWORD = 294,          /* SIGNED_KEYWORD  */
+    LONG = 295,                    /* LONG  */
+    SHORT = 296,                   /* SHORT  */
+    INT_KEYWORD = 297,             /* INT_KEYWORD  */
+    CONST_KEYWORD = 298,           /* CONST_KEYWORD  */
+    VOLATILE_KEYWORD = 299,        /* VOLATILE_KEYWORD  */
+    DOUBLE_KEYWORD = 300,          /* DOUBLE_KEYWORD  */
+    RESTRICT = 301,                /* RESTRICT  */
+    ATOMIC = 302,                  /* ATOMIC  */
+    FLOAT_KEYWORD = 303,           /* FLOAT_KEYWORD  */
+    COMPLEX = 304,                 /* COMPLEX  */
+    DOLLAR_VARIABLE = 305,         /* DOLLAR_VARIABLE  */
+    ASSIGN_MODIFY = 306,           /* ASSIGN_MODIFY  */
+    TRUEKEYWORD = 307,             /* TRUEKEYWORD  */
+    FALSEKEYWORD = 308,            /* FALSEKEYWORD  */
+    ABOVE_COMMA = 309,             /* ABOVE_COMMA  */
+    OROR = 310,                    /* OROR  */
+    ANDAND = 311,                  /* ANDAND  */
+    EQUAL = 312,                   /* EQUAL  */
+    NOTEQUAL = 313,                /* NOTEQUAL  */
+    LEQ = 314,                     /* LEQ  */
+    GEQ = 315,                     /* GEQ  */
+    LSH = 316,                     /* LSH  */
+    RSH = 317,                     /* RSH  */
+    UNARY = 318,                   /* UNARY  */
+    INCREMENT = 319,               /* INCREMENT  */
+    DECREMENT = 320,               /* DECREMENT  */
+    ARROW = 321,                   /* ARROW  */
+    ARROW_STAR = 322,              /* ARROW_STAR  */
+    DOT_STAR = 323,                /* DOT_STAR  */
+    BLOCKNAME = 324,               /* BLOCKNAME  */
+    FILENAME = 325,                /* FILENAME  */
+    DOTDOTDOT = 326                /* DOTDOTDOT  */
+  };
+  typedef enum yytokentype yytoken_kind_t;
 #endif
-/* Tokens.  */
+/* Token kinds.  */
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
 #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 YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 132 "c-exp.y"
+#line 135 "c-exp.y"
 
     LONGEST lval;
     struct {
@@ -354,20 +380,176 @@ typedef union YYSTYPE
     struct objc_class_str theclass;
   
 
+#line 384 "c-exp.c.tmp"
 
-/* Line 214 of yacc.c  */
-#line 360 "c-exp.c.tmp"
-} YYSTYPE;
+};
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_INT = 3,                        /* INT  */
+  YYSYMBOL_COMPLEX_INT = 4,                /* COMPLEX_INT  */
+  YYSYMBOL_FLOAT = 5,                      /* FLOAT  */
+  YYSYMBOL_COMPLEX_FLOAT = 6,              /* COMPLEX_FLOAT  */
+  YYSYMBOL_STRING = 7,                     /* STRING  */
+  YYSYMBOL_NSSTRING = 8,                   /* NSSTRING  */
+  YYSYMBOL_SELECTOR = 9,                   /* SELECTOR  */
+  YYSYMBOL_CHAR = 10,                      /* CHAR  */
+  YYSYMBOL_NAME = 11,                      /* NAME  */
+  YYSYMBOL_UNKNOWN_CPP_NAME = 12,          /* UNKNOWN_CPP_NAME  */
+  YYSYMBOL_COMPLETE = 13,                  /* COMPLETE  */
+  YYSYMBOL_TYPENAME = 14,                  /* TYPENAME  */
+  YYSYMBOL_CLASSNAME = 15,                 /* CLASSNAME  */
+  YYSYMBOL_OBJC_LBRAC = 16,                /* OBJC_LBRAC  */
+  YYSYMBOL_NAME_OR_INT = 17,               /* NAME_OR_INT  */
+  YYSYMBOL_OPERATOR = 18,                  /* OPERATOR  */
+  YYSYMBOL_STRUCT = 19,                    /* STRUCT  */
+  YYSYMBOL_CLASS = 20,                     /* CLASS  */
+  YYSYMBOL_UNION = 21,                     /* UNION  */
+  YYSYMBOL_ENUM = 22,                      /* ENUM  */
+  YYSYMBOL_SIZEOF = 23,                    /* SIZEOF  */
+  YYSYMBOL_ALIGNOF = 24,                   /* ALIGNOF  */
+  YYSYMBOL_UNSIGNED = 25,                  /* UNSIGNED  */
+  YYSYMBOL_COLONCOLON = 26,                /* COLONCOLON  */
+  YYSYMBOL_TEMPLATE = 27,                  /* TEMPLATE  */
+  YYSYMBOL_ERROR = 28,                     /* ERROR  */
+  YYSYMBOL_NEW = 29,                       /* NEW  */
+  YYSYMBOL_DELETE = 30,                    /* DELETE  */
+  YYSYMBOL_REINTERPRET_CAST = 31,          /* REINTERPRET_CAST  */
+  YYSYMBOL_DYNAMIC_CAST = 32,              /* DYNAMIC_CAST  */
+  YYSYMBOL_STATIC_CAST = 33,               /* STATIC_CAST  */
+  YYSYMBOL_CONST_CAST = 34,                /* CONST_CAST  */
+  YYSYMBOL_ENTRY = 35,                     /* ENTRY  */
+  YYSYMBOL_TYPEOF = 36,                    /* TYPEOF  */
+  YYSYMBOL_DECLTYPE = 37,                  /* DECLTYPE  */
+  YYSYMBOL_TYPEID = 38,                    /* TYPEID  */
+  YYSYMBOL_SIGNED_KEYWORD = 39,            /* SIGNED_KEYWORD  */
+  YYSYMBOL_LONG = 40,                      /* LONG  */
+  YYSYMBOL_SHORT = 41,                     /* SHORT  */
+  YYSYMBOL_INT_KEYWORD = 42,               /* INT_KEYWORD  */
+  YYSYMBOL_CONST_KEYWORD = 43,             /* CONST_KEYWORD  */
+  YYSYMBOL_VOLATILE_KEYWORD = 44,          /* VOLATILE_KEYWORD  */
+  YYSYMBOL_DOUBLE_KEYWORD = 45,            /* DOUBLE_KEYWORD  */
+  YYSYMBOL_RESTRICT = 46,                  /* RESTRICT  */
+  YYSYMBOL_ATOMIC = 47,                    /* ATOMIC  */
+  YYSYMBOL_FLOAT_KEYWORD = 48,             /* FLOAT_KEYWORD  */
+  YYSYMBOL_COMPLEX = 49,                   /* COMPLEX  */
+  YYSYMBOL_DOLLAR_VARIABLE = 50,           /* DOLLAR_VARIABLE  */
+  YYSYMBOL_ASSIGN_MODIFY = 51,             /* ASSIGN_MODIFY  */
+  YYSYMBOL_TRUEKEYWORD = 52,               /* TRUEKEYWORD  */
+  YYSYMBOL_FALSEKEYWORD = 53,              /* FALSEKEYWORD  */
+  YYSYMBOL_54_ = 54,                       /* ','  */
+  YYSYMBOL_ABOVE_COMMA = 55,               /* ABOVE_COMMA  */
+  YYSYMBOL_56_ = 56,                       /* '='  */
+  YYSYMBOL_57_ = 57,                       /* '?'  */
+  YYSYMBOL_OROR = 58,                      /* OROR  */
+  YYSYMBOL_ANDAND = 59,                    /* ANDAND  */
+  YYSYMBOL_60_ = 60,                       /* '|'  */
+  YYSYMBOL_61_ = 61,                       /* '^'  */
+  YYSYMBOL_62_ = 62,                       /* '&'  */
+  YYSYMBOL_EQUAL = 63,                     /* EQUAL  */
+  YYSYMBOL_NOTEQUAL = 64,                  /* NOTEQUAL  */
+  YYSYMBOL_65_ = 65,                       /* '<'  */
+  YYSYMBOL_66_ = 66,                       /* '>'  */
+  YYSYMBOL_LEQ = 67,                       /* LEQ  */
+  YYSYMBOL_GEQ = 68,                       /* GEQ  */
+  YYSYMBOL_LSH = 69,                       /* LSH  */
+  YYSYMBOL_RSH = 70,                       /* RSH  */
+  YYSYMBOL_71_ = 71,                       /* '@'  */
+  YYSYMBOL_72_ = 72,                       /* '+'  */
+  YYSYMBOL_73_ = 73,                       /* '-'  */
+  YYSYMBOL_74_ = 74,                       /* '*'  */
+  YYSYMBOL_75_ = 75,                       /* '/'  */
+  YYSYMBOL_76_ = 76,                       /* '%'  */
+  YYSYMBOL_UNARY = 77,                     /* UNARY  */
+  YYSYMBOL_INCREMENT = 78,                 /* INCREMENT  */
+  YYSYMBOL_DECREMENT = 79,                 /* DECREMENT  */
+  YYSYMBOL_ARROW = 80,                     /* ARROW  */
+  YYSYMBOL_ARROW_STAR = 81,                /* ARROW_STAR  */
+  YYSYMBOL_82_ = 82,                       /* '.'  */
+  YYSYMBOL_DOT_STAR = 83,                  /* DOT_STAR  */
+  YYSYMBOL_84_ = 84,                       /* '['  */
+  YYSYMBOL_85_ = 85,                       /* '('  */
+  YYSYMBOL_BLOCKNAME = 86,                 /* BLOCKNAME  */
+  YYSYMBOL_FILENAME = 87,                  /* FILENAME  */
+  YYSYMBOL_DOTDOTDOT = 88,                 /* DOTDOTDOT  */
+  YYSYMBOL_89_ = 89,                       /* ')'  */
+  YYSYMBOL_90_ = 90,                       /* '!'  */
+  YYSYMBOL_91_ = 91,                       /* '~'  */
+  YYSYMBOL_92_ = 92,                       /* ']'  */
+  YYSYMBOL_93_ = 93,                       /* ':'  */
+  YYSYMBOL_94_ = 94,                       /* '{'  */
+  YYSYMBOL_95_ = 95,                       /* '}'  */
+  YYSYMBOL_YYACCEPT = 96,                  /* $accept  */
+  YYSYMBOL_start = 97,                     /* start  */
+  YYSYMBOL_type_exp = 98,                  /* type_exp  */
+  YYSYMBOL_exp1 = 99,                      /* exp1  */
+  YYSYMBOL_exp = 100,                      /* exp  */
+  YYSYMBOL_101_1 = 101,                    /* $@1  */
+  YYSYMBOL_102_2 = 102,                    /* $@2  */
+  YYSYMBOL_103_3 = 103,                    /* $@3  */
+  YYSYMBOL_msglist = 104,                  /* msglist  */
+  YYSYMBOL_msgarglist = 105,               /* msgarglist  */
+  YYSYMBOL_msgarg = 106,                   /* msgarg  */
+  YYSYMBOL_107_4 = 107,                    /* $@4  */
+  YYSYMBOL_108_5 = 108,                    /* $@5  */
+  YYSYMBOL_lcurly = 109,                   /* lcurly  */
+  YYSYMBOL_arglist = 110,                  /* arglist  */
+  YYSYMBOL_function_method = 111,          /* function_method  */
+  YYSYMBOL_function_method_void = 112,     /* function_method_void  */
+  YYSYMBOL_function_method_void_or_typelist = 113, /* function_method_void_or_typelist  */
+  YYSYMBOL_rcurly = 114,                   /* rcurly  */
+  YYSYMBOL_string_exp = 115,               /* string_exp  */
+  YYSYMBOL_block = 116,                    /* block  */
+  YYSYMBOL_variable = 117,                 /* variable  */
+  YYSYMBOL_qualified_name = 118,           /* qualified_name  */
+  YYSYMBOL_const_or_volatile = 119,        /* const_or_volatile  */
+  YYSYMBOL_single_qualifier = 120,         /* single_qualifier  */
+  YYSYMBOL_qualifier_seq_noopt = 121,      /* qualifier_seq_noopt  */
+  YYSYMBOL_qualifier_seq = 122,            /* qualifier_seq  */
+  YYSYMBOL_ptr_operator = 123,             /* ptr_operator  */
+  YYSYMBOL_124_6 = 124,                    /* $@6  */
+  YYSYMBOL_125_7 = 125,                    /* $@7  */
+  YYSYMBOL_ptr_operator_ts = 126,          /* ptr_operator_ts  */
+  YYSYMBOL_abs_decl = 127,                 /* abs_decl  */
+  YYSYMBOL_direct_abs_decl = 128,          /* direct_abs_decl  */
+  YYSYMBOL_array_mod = 129,                /* array_mod  */
+  YYSYMBOL_func_mod = 130,                 /* func_mod  */
+  YYSYMBOL_type = 131,                     /* type  */
+  YYSYMBOL_scalar_type = 132,              /* scalar_type  */
+  YYSYMBOL_typebase = 133,                 /* typebase  */
+  YYSYMBOL_type_name = 134,                /* type_name  */
+  YYSYMBOL_parameter_typelist = 135,       /* parameter_typelist  */
+  YYSYMBOL_nonempty_typelist = 136,        /* nonempty_typelist  */
+  YYSYMBOL_ptype = 137,                    /* ptype  */
+  YYSYMBOL_conversion_type_id = 138,       /* conversion_type_id  */
+  YYSYMBOL_conversion_declarator = 139,    /* conversion_declarator  */
+  YYSYMBOL_const_and_volatile = 140,       /* const_and_volatile  */
+  YYSYMBOL_const_or_volatile_noopt = 141,  /* const_or_volatile_noopt  */
+  YYSYMBOL_oper = 142,                     /* oper  */
+  YYSYMBOL_field_name = 143,               /* field_name  */
+  YYSYMBOL_name = 144,                     /* name  */
+  YYSYMBOL_name_not_typename = 145         /* name_not_typename  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
 
-/* Line 264 of yacc.c  */
-#line 159 "c-exp.y"
+/* Second part of user prologue.  */
+#line 162 "c-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (struct parser_state *par_state,
@@ -375,47 +557,88 @@ 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
 static void c_print_token (FILE *file, int type, YYSTYPE value);
 #define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE)
 #endif
 
+#line 567 "c-exp.c.tmp"
 
-/* Line 264 of yacc.c  */
-#line 389 "c-exp.c.tmp"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
+#else
 typedef signed char yytype_int8;
+#endif
+
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
-typedef short int yytype_int8;
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_uint8;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
 #else
-typedef short int yytype_int16;
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -423,55 +646,100 @@ 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 __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int16 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #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_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
 # 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__ && ! defined __ICC && 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
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
 
@@ -487,11 +755,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 +767,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,125 +782,130 @@ 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
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   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 (YYSIZEOF (union 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) * (YYSIZEOF (yy_state_t) + YYSIZEOF (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                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*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, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYPTRDIFF_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
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   320
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
+#define YYNRULES  285
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  442
+
+#define YYMAXUTOK   326
+
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
+static const yytype_int8 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 +923,760 @@ 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[] =
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 yyrline[] =
 {
-      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.  */
-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,   280,   280,   281,   284,   288,   292,   296,   303,   304,
+     309,   313,   317,   321,   325,   335,   339,   343,   347,   351,
+     355,   359,   363,   367,   371,   378,   388,   397,   404,   414,
+     422,   426,   438,   448,   457,   464,   474,   482,   486,   490,
+     500,   499,   519,   518,   530,   529,   535,   537,   540,   541,
+     544,   546,   548,   555,   552,   568,   577,   576,   595,   599,
+     602,   606,   610,   625,   635,   642,   643,   646,   653,   656,
+     665,   669,   679,   685,   689,   693,   697,   701,   705,   709,
+     713,   717,   727,   737,   747,   757,   767,   777,   781,   785,
+     789,   805,   821,   838,   848,   857,   864,   877,   886,   897,
+     906,   930,   933,   939,   946,   964,   968,   972,   976,   983,
+    1000,  1018,  1051,  1061,  1067,  1075,  1083,  1089,  1102,  1115,
+    1132,  1143,  1159,  1168,  1169,  1180,  1252,  1253,  1257,  1259,
+    1261,  1263,  1265,  1270,  1278,  1279,  1283,  1284,  1289,  1288,
+    1292,  1291,  1294,  1296,  1298,  1300,  1304,  1311,  1313,  1314,
+    1317,  1319,  1327,  1335,  1342,  1350,  1352,  1354,  1356,  1360,
+    1365,  1377,  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,  1462,  1467,
+    1472,  1477,  1480,  1483,  1486,  1502,  1504,  1506,  1510,  1515,
+    1521,  1527,  1532,  1538,  1544,  1549,  1555,  1561,  1565,  1570,
+    1579,  1584,  1586,  1590,  1591,  1598,  1605,  1615,  1617,  1626,
+    1635,  1642,  1643,  1650,  1654,  1655,  1658,  1659,  1662,  1666,
+    1668,  1672,  1674,  1676,  1678,  1680,  1682,  1684,  1686,  1688,
+    1690,  1692,  1694,  1696,  1698,  1700,  1702,  1704,  1706,  1708,
+    1710,  1750,  1752,  1754,  1756,  1758,  1760,  1762,  1764,  1766,
+    1768,  1770,  1772,  1774,  1776,  1778,  1780,  1782,  1804,  1805,
+    1806,  1807,  1808,  1809,  1810,  1811,  1814,  1815,  1816,  1817,
+    1818,  1819,  1822,  1823,  1831,  1844
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* 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",
+  "\"end of file\"", "error", "\"invalid token\"", "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", "DOLLAR_VARIABLE", "ASSIGN_MODIFY",
+  "VOLATILE_KEYWORD", "DOUBLE_KEYWORD", "RESTRICT", "ATOMIC",
+  "FLOAT_KEYWORD", "COMPLEX", "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", "')'",
+  "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", "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",
-  "ptr_operator_ts", "abs_decl", "direct_abs_decl", "array_mod",
-  "func_mod", "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
+  "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", "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", YY_NULLPTRPTR
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 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
+#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)
+
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
+
+#define YYTABLE_NINF (-128)
+
+#define yytable_value_is_error(Yyn) \
+  0
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+  /* 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.  */
-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,
+  /* 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_int16 yydefact[] =
+{
+       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
-
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
+  /* 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
+};
 
-/* 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.  */
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_int8 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
+};
 
-#define YYFAIL		goto yyerrlab
 
-#define YYRECOVERING()  (!!yyerrstatus)
+enum { YYENOMEM = -2 };
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      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
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
 
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-/* 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
 
+#define YYRECOVERING()  (!!yyerrstatus)
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
+#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 (0)
+
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1564,80 +1686,65 @@ 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))
-
-
-/*--------------------------------.
-| 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 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
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Kind, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#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 *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1645,16 +1752,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
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1665,63 +1764,56 @@ 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 (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule)
 {
+  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);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             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,
+                       YY_ACCESSING_SYMBOL (+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.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1736,342 +1828,82 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   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++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  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;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      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;
-	  }
-    do_not_strip_quotes: ;
-    }
 
-  if (! yyres)
-    return yystrlen (yystr);
 
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# 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)
-{
-  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;
-    }
-}
-#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,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  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;
-
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
 
-/*-------------------------.
-| 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)
+
+/*----------.
+| yyparse.  |
+`----------*/
+
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
-    int yystate;
+    yy_state_fast_t 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.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -2079,133 +1911,147 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
   yystacksize = YYINITDEPTH;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  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;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined 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);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+
+        /* 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 * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* 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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, 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 */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
   /* 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.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      YYDPRINTF ((stderr, "Reading a token\n"));
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -2220,8 +2066,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;
     }
@@ -2233,13 +2079,13 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -2254,14 +2100,14 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   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
@@ -2274,805 +2120,838 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   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);}
+  case 4:
+#line 285 "c-exp.y"
+                        {
+			  pstate->push_new<type_operation> ((yyvsp[0].tval));
+			}
+#line 2130 "c-exp.c.tmp"
     break;
 
   case 5:
-
-/* Line 1455 of yacc.c  */
-#line 286 "c-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_TYPEOF);
+#line 289 "c-exp.y"
+                        {
+			  pstate->wrap<typeof_operation> ();
 			}
+#line 2138 "c-exp.c.tmp"
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
-#line 290 "c-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_TYPE);
-			  write_exp_elt_type (pstate, (yyvsp[(3) - (4)].tval));
-			  write_exp_elt_opcode (pstate, OP_TYPE);
+#line 293 "c-exp.y"
+                        {
+			  pstate->push_new<type_operation> ((yyvsp[-1].tval));
 			}
+#line 2146 "c-exp.c.tmp"
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
-#line 296 "c-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_DECLTYPE);
+#line 297 "c-exp.y"
+                        {
+			  pstate->wrap<decltype_operation> ();
 			}
+#line 2154 "c-exp.c.tmp"
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 304 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+#line 305 "c-exp.y"
+                        { pstate->wrap2<comma_operation> (); }
+#line 2160 "c-exp.c.tmp"
     break;
 
   case 10:
-
-/* Line 1455 of yacc.c  */
-#line 309 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 310 "c-exp.y"
+                        { pstate->wrap<unop_ind_operation> (); }
+#line 2166 "c-exp.c.tmp"
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 313 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 314 "c-exp.y"
+                        { pstate->wrap<unop_addr_operation> (); }
+#line 2172 "c-exp.c.tmp"
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 317 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 318 "c-exp.y"
+                        { pstate->wrap<unary_neg_operation> (); }
+#line 2178 "c-exp.c.tmp"
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 321 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+#line 322 "c-exp.y"
+                        { pstate->wrap<unary_plus_operation> (); }
+#line 2184 "c-exp.c.tmp"
     break;
 
   case 14:
-
-/* Line 1455 of yacc.c  */
-#line 325 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 326 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap<opencl_not_operation> ();
+			  else
+			    pstate->wrap<unary_logical_not_operation> ();
+			}
+#line 2196 "c-exp.c.tmp"
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 329 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+#line 336 "c-exp.y"
+                        { pstate->wrap<unary_complement_operation> (); }
+#line 2202 "c-exp.c.tmp"
     break;
 
   case 16:
-
-/* Line 1455 of yacc.c  */
-#line 333 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
+#line 340 "c-exp.y"
+                        { pstate->wrap<preinc_operation> (); }
+#line 2208 "c-exp.c.tmp"
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
-#line 337 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
+#line 344 "c-exp.y"
+                        { pstate->wrap<predec_operation> (); }
+#line 2214 "c-exp.c.tmp"
     break;
 
   case 18:
-
-/* Line 1455 of yacc.c  */
-#line 341 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+#line 348 "c-exp.y"
+                        { pstate->wrap<postinc_operation> (); }
+#line 2220 "c-exp.c.tmp"
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 345 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+#line 352 "c-exp.y"
+                        { pstate->wrap<postdec_operation> (); }
+#line 2226 "c-exp.c.tmp"
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 349 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPEID); }
+#line 356 "c-exp.y"
+                        { pstate->wrap<typeid_operation> (); }
+#line 2232 "c-exp.c.tmp"
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 353 "c-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPEID); }
+#line 360 "c-exp.y"
+                        { pstate->wrap<typeid_operation> (); }
+#line 2238 "c-exp.c.tmp"
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
-#line 357 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 364 "c-exp.y"
+                        { pstate->wrap<unop_sizeof_operation> (); }
+#line 2244 "c-exp.c.tmp"
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 361 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ALIGNOF); }
+#line 368 "c-exp.y"
+                        { pstate->wrap<unop_alignof_operation> (); }
+#line 2250 "c-exp.c.tmp"
     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 372 "c-exp.y"
+                        {
+			  pstate->push_new<structop_ptr_operation>
+			    (pstate->pop (), copy_name ((yyvsp[0].sval)));
+			}
+#line 2259 "c-exp.c.tmp"
     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 379 "c-exp.y"
+                        {
+			  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 2271 "c-exp.c.tmp"
     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 389 "c-exp.y"
+                        {
+			  structop_base_operation *op
+			    = new structop_ptr_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2282 "c-exp.c.tmp"
     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 398 "c-exp.y"
+                        {
+			  pstate->push_new<structop_ptr_operation>
+			    (pstate->pop (), "~" + copy_name ((yyvsp[0].sval)));
+			}
+#line 2291 "c-exp.c.tmp"
     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 405 "c-exp.y"
+                        {
+			  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 2303 "c-exp.c.tmp"
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 401 "c-exp.y"
-    { /* exp->type::name becomes exp->*(&type::name) */
+#line 415 "c-exp.y"
+                        { /* 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 2313 "c-exp.c.tmp"
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 409 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
+#line 423 "c-exp.y"
+                        { pstate->wrap2<structop_mptr_operation> (); }
+#line 2319 "c-exp.c.tmp"
     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 427 "c-exp.y"
+                        {
+			  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 2333 "c-exp.c.tmp"
     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 439 "c-exp.y"
+                        {
+			  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 2345 "c-exp.c.tmp"
     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 449 "c-exp.y"
+                        {
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2356 "c-exp.c.tmp"
     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 458 "c-exp.y"
+                        {
+			  pstate->push_new<structop_operation>
+			    (pstate->pop (), "~" + copy_name ((yyvsp[0].sval)));
+			}
+#line 2365 "c-exp.c.tmp"
     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 465 "c-exp.y"
+                        {
+			  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 2377 "c-exp.c.tmp"
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 449 "c-exp.y"
-    { /* exp.type::name becomes exp.*(&type::name) */
+#line 475 "c-exp.y"
+                        { /* 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 2387 "c-exp.c.tmp"
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 457 "c-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
+#line 483 "c-exp.y"
+                        { pstate->wrap2<structop_member_operation> (); }
+#line 2393 "c-exp.c.tmp"
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 461 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 487 "c-exp.y"
+                        { pstate->wrap2<subscript_operation> (); }
+#line 2399 "c-exp.c.tmp"
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 465 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 491 "c-exp.y"
+                        { pstate->wrap2<subscript_operation> (); }
+#line 2405 "c-exp.c.tmp"
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 474 "c-exp.y"
-    {
+#line 500 "c-exp.y"
+                        {
 			  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 2424 "c-exp.c.tmp"
     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 515 "c-exp.y"
+                        { end_msglist (pstate); }
+#line 2430 "c-exp.c.tmp"
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 498 "c-exp.y"
-    {
-			  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);
+#line 519 "c-exp.y"
+                        {
+			  pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_int,
+			     (LONGEST) (yyvsp[0].theclass).theclass);
 			  start_msglist();
 			}
+#line 2441 "c-exp.c.tmp"
     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 526 "c-exp.y"
+                        { end_msglist (pstate); }
+#line 2447 "c-exp.c.tmp"
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 514 "c-exp.y"
-    { start_msglist(); }
+#line 530 "c-exp.y"
+                        { start_msglist(); }
+#line 2453 "c-exp.c.tmp"
     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 532 "c-exp.y"
+                        { end_msglist (pstate); }
+#line 2459 "c-exp.c.tmp"
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 523 "c-exp.y"
-    { add_msglist(&(yyvsp[(1) - (1)].sval), 0); }
+#line 536 "c-exp.y"
+                        { add_msglist(&(yyvsp[0].sval), 0); }
+#line 2465 "c-exp.c.tmp"
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 532 "c-exp.y"
-    { add_msglist(&(yyvsp[(1) - (3)].sval), 1); }
+#line 545 "c-exp.y"
+                        { add_msglist(&(yyvsp[-2].sval), 1); }
+#line 2471 "c-exp.c.tmp"
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 534 "c-exp.y"
-    { add_msglist(0, 1);   }
+#line 547 "c-exp.y"
+                        { add_msglist(0, 1);   }
+#line 2477 "c-exp.c.tmp"
     break;
 
   case 52:
-
-/* Line 1455 of yacc.c  */
-#line 536 "c-exp.y"
-    { add_msglist(0, 0);   }
+#line 549 "c-exp.y"
+                        { add_msglist(0, 0);   }
+#line 2483 "c-exp.c.tmp"
     break;
 
   case 53:
-
-/* Line 1455 of yacc.c  */
-#line 542 "c-exp.y"
-    { pstate->start_arglist (); }
+#line 555 "c-exp.y"
+                        { pstate->start_arglist (); }
+#line 2489 "c-exp.c.tmp"
     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 557 "c-exp.y"
+                        {
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::move (args));
+			}
+#line 2500 "c-exp.c.tmp"
     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 569 "c-exp.y"
+                        {
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::vector<operation_up> ());
+			}
+#line 2509 "c-exp.c.tmp"
     break;
 
   case 56:
-
-/* Line 1455 of yacc.c  */
-#line 563 "c-exp.y"
-    {
+#line 577 "c-exp.y"
+                        {
 			  /* 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 2521 "c-exp.c.tmp"
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
-#line 580 "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 585 "c-exp.y"
+                        {
+			  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 2534 "c-exp.c.tmp"
     break;
 
   case 58:
-
-/* Line 1455 of yacc.c  */
-#line 589 "c-exp.y"
-    { pstate->start_arglist (); }
+#line 596 "c-exp.y"
+                        { pstate->start_arglist (); }
+#line 2540 "c-exp.c.tmp"
     break;
 
   case 60:
-
-/* Line 1455 of yacc.c  */
-#line 596 "c-exp.y"
-    { pstate->arglist_len = 1; }
+#line 603 "c-exp.y"
+                        { pstate->arglist_len = 1; }
+#line 2546 "c-exp.c.tmp"
     break;
 
   case 61:
-
-/* Line 1455 of yacc.c  */
-#line 600 "c-exp.y"
-    { pstate->arglist_len++; }
+#line 607 "c-exp.y"
+                        { pstate->arglist_len++; }
+#line 2552 "c-exp.c.tmp"
     break;
 
   case 62:
-
-/* Line 1455 of yacc.c  */
-#line 604 "c-exp.y"
-    {
-			  std::vector<struct type *> *type_list = (yyvsp[(3) - (5)].tvec);
-			  LONGEST len = type_list->size ();
-
-			  write_exp_elt_opcode (pstate, TYPE_INSTANCE);
+#line 611 "c-exp.y"
+                        {
+			  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 2569 "c-exp.c.tmp"
     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 626 "c-exp.y"
+                       {
+			  type_instance_flags flags
+			    = (cpstate->type_stack
+			       .follow_type_instance_flags ());
+			  pstate->push_new<type_instance_operation>
+			    (flags, std::vector<type *> (), pstate->pop ());
 		       }
+#line 2581 "c-exp.c.tmp"
     break;
 
   case 67:
-
-/* Line 1455 of yacc.c  */
-#line 648 "c-exp.y"
-    {
-			  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);
+#line 647 "c-exp.y"
+                        {
+			  pstate->push_new<func_static_var_operation>
+			    (pstate->pop (), copy_name ((yyvsp[0].sval)));
 			}
+#line 2590 "c-exp.c.tmp"
     break;
 
   case 68:
-
-/* Line 1455 of yacc.c  */
-#line 656 "c-exp.y"
-    { (yyval.lval) = pstate->end_arglist () - 1; }
+#line 654 "c-exp.y"
+                        { (yyval.lval) = pstate->end_arglist () - 1; }
+#line 2596 "c-exp.c.tmp"
     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 657 "c-exp.y"
+                        {
+			  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 2607 "c-exp.c.tmp"
     break;
 
   case 70:
-
-/* Line 1455 of yacc.c  */
 #line 666 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_MEMVAL_TYPE); }
+                        { pstate->wrap2<unop_memval_type_operation> (); }
+#line 2613 "c-exp.c.tmp"
     break;
 
   case 71:
-
-/* Line 1455 of yacc.c  */
 #line 670 "c-exp.y"
-    { 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> ();
+			}
+#line 2625 "c-exp.c.tmp"
     break;
 
   case 72:
-
-/* Line 1455 of yacc.c  */
-#line 674 "c-exp.y"
-    { }
+#line 680 "c-exp.y"
+                        { }
+#line 2631 "c-exp.c.tmp"
     break;
 
   case 73:
-
-/* Line 1455 of yacc.c  */
-#line 680 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+#line 686 "c-exp.y"
+                        { pstate->wrap2<repeat_operation> (); }
+#line 2637 "c-exp.c.tmp"
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 684 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 690 "c-exp.y"
+                        { pstate->wrap2<mul_operation> (); }
+#line 2643 "c-exp.c.tmp"
     break;
 
   case 75:
-
-/* Line 1455 of yacc.c  */
-#line 688 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 694 "c-exp.y"
+                        { pstate->wrap2<div_operation> (); }
+#line 2649 "c-exp.c.tmp"
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 692 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 698 "c-exp.y"
+                        { pstate->wrap2<rem_operation> (); }
+#line 2655 "c-exp.c.tmp"
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 696 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 702 "c-exp.y"
+                        { pstate->wrap2<add_operation> (); }
+#line 2661 "c-exp.c.tmp"
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 700 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 706 "c-exp.y"
+                        { pstate->wrap2<sub_operation> (); }
+#line 2667 "c-exp.c.tmp"
     break;
 
   case 79:
-
-/* Line 1455 of yacc.c  */
-#line 704 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LSH); }
+#line 710 "c-exp.y"
+                        { pstate->wrap2<lsh_operation> (); }
+#line 2673 "c-exp.c.tmp"
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 708 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_RSH); }
+#line 714 "c-exp.y"
+                        { pstate->wrap2<rsh_operation> (); }
+#line 2679 "c-exp.c.tmp"
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 712 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 718 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_equal_operation> ();
+			  else
+			    pstate->wrap2<equal_operation> ();
+			}
+#line 2691 "c-exp.c.tmp"
     break;
 
   case 82:
-
-/* Line 1455 of yacc.c  */
-#line 716 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 728 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_notequal_operation> ();
+			  else
+			    pstate->wrap2<notequal_operation> ();
+			}
+#line 2703 "c-exp.c.tmp"
     break;
 
   case 83:
-
-/* Line 1455 of yacc.c  */
-#line 720 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 738 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_leq_operation> ();
+			  else
+			    pstate->wrap2<leq_operation> ();
+			}
+#line 2715 "c-exp.c.tmp"
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
-#line 724 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 748 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_geq_operation> ();
+			  else
+			    pstate->wrap2<geq_operation> ();
+			}
+#line 2727 "c-exp.c.tmp"
     break;
 
   case 85:
-
-/* Line 1455 of yacc.c  */
-#line 728 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 758 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_less_operation> ();
+			  else
+			    pstate->wrap2<less_operation> ();
+			}
+#line 2739 "c-exp.c.tmp"
     break;
 
   case 86:
-
-/* Line 1455 of yacc.c  */
-#line 732 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 768 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_gtr_operation> ();
+			  else
+			    pstate->wrap2<gtr_operation> ();
+			}
+#line 2751 "c-exp.c.tmp"
     break;
 
   case 87:
-
-/* Line 1455 of yacc.c  */
-#line 736 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 778 "c-exp.y"
+                        { pstate->wrap2<bitwise_and_operation> (); }
+#line 2757 "c-exp.c.tmp"
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
-#line 740 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 782 "c-exp.y"
+                        { pstate->wrap2<bitwise_xor_operation> (); }
+#line 2763 "c-exp.c.tmp"
     break;
 
   case 89:
-
-/* Line 1455 of yacc.c  */
-#line 744 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 786 "c-exp.y"
+                        { pstate->wrap2<bitwise_ior_operation> (); }
+#line 2769 "c-exp.c.tmp"
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 748 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 790 "c-exp.y"
+                        {
+			  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 2787 "c-exp.c.tmp"
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
-#line 752 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 806 "c-exp.y"
+                        {
+			  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 2805 "c-exp.c.tmp"
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 756 "c-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_COND); }
+#line 822 "c-exp.y"
+                        {
+			  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 2824 "c-exp.c.tmp"
     break;
 
   case 93:
-
-/* Line 1455 of yacc.c  */
-#line 760 "c-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 839 "c-exp.y"
+                        {
+			  if (pstate->language ()->la_language
+			      == language_opencl)
+			    pstate->wrap2<opencl_assign_operation> ();
+			  else
+			    pstate->wrap2<assign_operation> ();
+			}
+#line 2836 "c-exp.c.tmp"
     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 849 "c-exp.y"
+                        {
+			  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 2847 "c-exp.c.tmp"
     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 858 "c-exp.y"
+                        {
+			  pstate->push_new<long_const_operation>
+			    ((yyvsp[0].typed_val_int).type, (yyvsp[0].typed_val_int).val);
+			}
+#line 2856 "c-exp.c.tmp"
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
-#line 778 "c-exp.y"
-    {
-			  struct stoken_vector vec;
-			  vec.len = 1;
-			  vec.tokens = &(yyvsp[(1) - (1)].tsval);
-			  write_exp_string_vector (pstate, (yyvsp[(1) - (1)].tsval).type, &vec);
+#line 865 "c-exp.y"
+                        {
+			  operation_up real
+			    = (make_operation<long_const_operation>
+			       (TYPE_TARGET_TYPE ((yyvsp[0].typed_val_int).type), 0));
+			  operation_up imag
+			    = (make_operation<long_const_operation>
+			       (TYPE_TARGET_TYPE ((yyvsp[0].typed_val_int).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 2871 "c-exp.c.tmp"
     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 878 "c-exp.y"
+                        {
+			  struct stoken_vector vec;
+			  vec.len = 1;
+			  vec.tokens = &(yyvsp[0].tsval);
+			  pstate->push_c_string ((yyvsp[0].tsval).type, &vec);
 			}
+#line 2882 "c-exp.c.tmp"
     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 887 "c-exp.y"
+                        { 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 2894 "c-exp.c.tmp"
+    break;
+
+  case 99:
+#line 898 "c-exp.y"
+                        {
+			  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 2905 "c-exp.c.tmp"
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 810 "c-exp.y"
-    {
-			  write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval));
+#line 907 "c-exp.y"
+                        {
+			  struct type *underlying
+			    = TYPE_TARGET_TYPE ((yyvsp[0].typed_val_float).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 2931 "c-exp.c.tmp"
     break;
 
-  case 101:
-
-/* Line 1455 of yacc.c  */
-#line 816 "c-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR);
-			  write_exp_string (pstate, (yyvsp[(3) - (4)].sval));
-			  write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR); }
+  case 102:
+#line 934 "c-exp.y"
+                        {
+			  pstate->push_dollar ((yyvsp[0].sval));
+			}
+#line 2939 "c-exp.c.tmp"
     break;
 
-  case 102:
+  case 103:
+#line 940 "c-exp.y"
+                        {
+			  pstate->push_new<objc_selector_operation>
+			    (copy_name ((yyvsp[-1].sval)));
+			}
+#line 2948 "c-exp.c.tmp"
+    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 947 "c-exp.y"
+                        { 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)
@@ -3081,47 +2960,41 @@ yyreduce:
 			       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); }
+			  pstate->push_new<long_const_operation>
+			    (int_type, TYPE_LENGTH (type));
+			}
+#line 2968 "c-exp.c.tmp"
     break;
 
-  case 103:
-
-/* Line 1455 of yacc.c  */
-#line 842 "c-exp.y"
-    { write_exp_elt_opcode (pstate,
-						UNOP_REINTERPRET_CAST); }
+  case 105:
+#line 965 "c-exp.y"
+                        { pstate->wrap2<reinterpret_cast_operation> (); }
+#line 2974 "c-exp.c.tmp"
     break;
 
-  case 104:
-
-/* Line 1455 of yacc.c  */
-#line 847 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+  case 106:
+#line 969 "c-exp.y"
+                        { pstate->wrap2<unop_cast_type_operation> (); }
+#line 2980 "c-exp.c.tmp"
     break;
 
-  case 105:
-
-/* Line 1455 of yacc.c  */
-#line 851 "c-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_DYNAMIC_CAST); }
+  case 107:
+#line 973 "c-exp.y"
+                        { pstate->wrap2<dynamic_cast_operation> (); }
+#line 2986 "c-exp.c.tmp"
     break;
 
-  case 106:
-
-/* Line 1455 of yacc.c  */
-#line 855 "c-exp.y"
-    { /* We could do more error checking here, but
+  case 108:
+#line 977 "c-exp.y"
+                        { /* 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 2994 "c-exp.c.tmp"
     break;
 
-  case 107:
-
-/* Line 1455 of yacc.c  */
-#line 862 "c-exp.y"
-    {
+  case 109:
+#line 984 "c-exp.y"
+                        {
 			  /* We copy the string here, and not in the
 			     lexer, to guarantee that we do not leak a
 			     string.  Note that we follow the
@@ -3131,18 +3004,17 @@ 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 3014 "c-exp.c.tmp"
     break;
 
-  case 108:
-
-/* Line 1455 of yacc.c  */
-#line 879 "c-exp.y"
-    {
+  case 110:
+#line 1001 "c-exp.y"
+                        {
 			  /* Note that we NUL-terminate here, but just
 			     for convenience.  */
 			  char *p;
@@ -3150,26 +3022,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 3034 "c-exp.c.tmp"
     break;
 
-  case 109:
-
-/* Line 1455 of yacc.c  */
-#line 897 "c-exp.y"
-    {
+  case 111:
+#line 1019 "c-exp.y"
+                        {
 			  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,9 +3048,9 @@ 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 */
@@ -3188,108 +3059,95 @@ yyreduce:
 				}
 			    }
 
-			  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 3069 "c-exp.c.tmp"
     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 1054 "c-exp.y"
+                        {
+			  pstate->push_new<objc_nsstring_operation>
+			    (copy_name ((yyvsp[0].sval)));
+			}
+#line 3078 "c-exp.c.tmp"
     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 1062 "c-exp.y"
+                        { pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_bool, 1);
+			}
+#line 3086 "c-exp.c.tmp"
     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 1068 "c-exp.y"
+                        { pstate->push_new<long_const_operation>
+			    (parse_type (pstate)->builtin_bool, 0);
+			}
+#line 3094 "c-exp.c.tmp"
     break;
 
-  case 113:
-
-/* Line 1455 of yacc.c  */
-#line 957 "c-exp.y"
-    {
-			  if ((yyvsp[(1) - (1)].ssym).sym.symbol)
-			    (yyval.bval) = SYMBOL_BLOCK_VALUE ((yyvsp[(1) - (1)].ssym).sym.symbol);
+  case 115:
+#line 1076 "c-exp.y"
+                        {
+			  if ((yyvsp[0].ssym).sym.symbol)
+			    (yyval.bval) = SYMBOL_BLOCK_VALUE ((yyvsp[0].ssym).sym.symbol);
 			  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 3106 "c-exp.c.tmp"
     break;
 
-  case 114:
-
-/* Line 1455 of yacc.c  */
-#line 965 "c-exp.y"
-    {
-			  (yyval.bval) = (yyvsp[(1) - (1)].bval);
+  case 116:
+#line 1084 "c-exp.y"
+                        {
+			  (yyval.bval) = (yyvsp[0].bval);
 			}
+#line 3114 "c-exp.c.tmp"
     break;
 
-  case 115:
-
-/* Line 1455 of yacc.c  */
-#line 971 "c-exp.y"
-    {
-			  std::string copy = copy_name ((yyvsp[(3) - (3)].sval));
+  case 117:
+#line 1090 "c-exp.y"
+                        {
+			  std::string copy = copy_name ((yyvsp[0].sval));
 			  struct symbol *tem
-			    = lookup_symbol (copy.c_str (), (yyvsp[(1) - (3)].bval),
+			    = lookup_symbol (copy.c_str (), (yyvsp[-2].bval),
 					     VAR_DOMAIN, NULL).symbol;
 
 			  if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
 			    error (_("No function \"%s\" in specified context."),
 				   copy.c_str ());
 			  (yyval.bval) = SYMBOL_BLOCK_VALUE (tem); }
+#line 3129 "c-exp.c.tmp"
     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 1103 "c-exp.y"
+                        { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol;
 
 			  if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
 			      || !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 3144 "c-exp.c.tmp"
     break;
 
-  case 117:
-
-/* Line 1455 of yacc.c  */
-#line 999 "c-exp.y"
-    {
-			  std::string copy = copy_name ((yyvsp[(3) - (3)].sval));
+  case 119:
+#line 1116 "c-exp.y"
+                        {
+			  std::string copy = copy_name ((yyvsp[0].sval));
 			  struct block_symbol sym
-			    = lookup_symbol (copy.c_str (), (yyvsp[(1) - (3)].bval),
+			    = lookup_symbol (copy.c_str (), (yyvsp[-2].bval),
 					     VAR_DOMAIN, NULL);
 
 			  if (sym.symbol == 0)
@@ -3298,109 +3156,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 3163 "c-exp.c.tmp"
     break;
 
-  case 118:
-
-/* Line 1455 of yacc.c  */
-#line 1018 "c-exp.y"
-    {
-			  struct type *type = (yyvsp[(1) - (3)].tsym).type;
+  case 120:
+#line 1133 "c-exp.y"
+                        {
+			  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 3178 "c-exp.c.tmp"
     break;
 
-  case 119:
-
-/* Line 1455 of yacc.c  */
-#line 1031 "c-exp.y"
-    {
-			  struct type *type = (yyvsp[(1) - (4)].tsym).type;
-			  struct stoken tmp_token;
-			  char *buf;
+  case 121:
+#line 1144 "c-exp.y"
+                        {
+			  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 3198 "c-exp.c.tmp"
     break;
 
-  case 120:
-
-/* Line 1455 of yacc.c  */
-#line 1055 "c-exp.y"
-    {
-			  std::string copy = copy_name ((yyvsp[(3) - (5)].sval));
+  case 122:
+#line 1160 "c-exp.y"
+                        {
+			  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 3209 "c-exp.c.tmp"
     break;
 
-  case 122:
-
-/* Line 1455 of yacc.c  */
-#line 1065 "c-exp.y"
-    {
-			  std::string name = copy_name ((yyvsp[(2) - (2)].ssym).stoken);
-			  struct symbol *sym;
-			  struct bound_minimal_symbol msymbol;
-
-			  sym
+  case 124:
+#line 1170 "c-exp.y"
+                        {
+			  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 ());
+					     VAR_DOMAIN, NULL);
+			  pstate->push_symbol (name.c_str (), sym);
 			}
+#line 3222 "c-exp.c.tmp"
     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 1181 "c-exp.y"
+                        { struct block_symbol sym = (yyvsp[0].ssym).sym;
 
 			  if (sym.symbol)
 			    {
@@ -3415,30 +3237,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 ());
@@ -3465,861 +3282,816 @@ yyreduce:
 				   : 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,
+				    SYMBOL_BLOCK_VALUE (alias_target) };
+				  pstate->push_new<var_value_operation> (bsym);
 				}
 			      else
-				write_exp_msymbol (pstate, msymbol);
+				pstate->push_new<var_msym_value_operation>
+				  (msymbol);
 			    }
 			}
+#line 3296 "c-exp.c.tmp"
     break;
 
-  case 124:
-
-/* Line 1455 of yacc.c  */
-#line 1173 "c-exp.y"
-    {
-		  cpstate->type_stack.insert (pstate,
-					      copy_name ((yyvsp[(2) - (2)].ssym).stoken).c_str ());
-		}
+  case 128:
+#line 1258 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_const); }
+#line 3302 "c-exp.c.tmp"
     break;
 
-  case 132:
-
-/* Line 1455 of yacc.c  */
-#line 1197 "c-exp.y"
-    { cpstate->type_stack.insert (tp_pointer); }
+  case 129:
+#line 1260 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_volatile); }
+#line 3308 "c-exp.c.tmp"
     break;
 
-  case 134:
-
-/* Line 1455 of yacc.c  */
-#line 1200 "c-exp.y"
-    { cpstate->type_stack.insert (tp_pointer); }
+  case 130:
+#line 1262 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_atomic); }
+#line 3314 "c-exp.c.tmp"
     break;
 
-  case 136:
-
-/* Line 1455 of yacc.c  */
-#line 1203 "c-exp.y"
-    { cpstate->type_stack.insert (tp_reference); }
+  case 131:
+#line 1264 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_restrict); }
+#line 3320 "c-exp.c.tmp"
     break;
 
-  case 137:
+  case 132:
+#line 1266 "c-exp.y"
+                {
+		  cpstate->type_stack.insert (pstate,
+					      copy_name ((yyvsp[0].ssym).stoken).c_str ());
+		}
+#line 3329 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1205 "c-exp.y"
-    { cpstate->type_stack.insert (tp_reference); }
+  case 133:
+#line 1271 "c-exp.y"
+                {
+		  cpstate->type_stack.insert (pstate,
+					      copy_name ((yyvsp[0].ssym).stoken).c_str ());
+		}
+#line 3338 "c-exp.c.tmp"
     break;
 
   case 138:
+#line 1289 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_pointer); }
+#line 3344 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1207 "c-exp.y"
-    { cpstate->type_stack.insert (tp_rvalue_reference); }
+  case 140:
+#line 1292 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_pointer); }
+#line 3350 "c-exp.c.tmp"
     break;
 
-  case 139:
+  case 142:
+#line 1295 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_reference); }
+#line 3356 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1209 "c-exp.y"
-    { cpstate->type_stack.insert (tp_rvalue_reference); }
+  case 143:
+#line 1297 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_reference); }
+#line 3362 "c-exp.c.tmp"
     break;
 
-  case 140:
+  case 144:
+#line 1299 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_rvalue_reference); }
+#line 3368 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1213 "c-exp.y"
-    {
+  case 145:
+#line 1301 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_rvalue_reference); }
+#line 3374 "c-exp.c.tmp"
+    break;
+
+  case 146:
+#line 1305 "c-exp.y"
+                        {
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3383 "c-exp.c.tmp"
     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 1312 "c-exp.y"
+                        { (yyval.type_stack) = (yyvsp[0].type_stack)->append ((yyvsp[-1].type_stack)); }
+#line 3389 "c-exp.c.tmp"
     break;
 
-  case 144:
-
-/* Line 1455 of yacc.c  */
-#line 1226 "c-exp.y"
-    { (yyval.type_stack) = (yyvsp[(2) - (3)].type_stack); }
+  case 150:
+#line 1318 "c-exp.y"
+                        { (yyval.type_stack) = (yyvsp[-1].type_stack); }
+#line 3395 "c-exp.c.tmp"
     break;
 
-  case 145:
-
-/* Line 1455 of yacc.c  */
-#line 1228 "c-exp.y"
-    {
-			  cpstate->type_stack.push ((yyvsp[(1) - (2)].type_stack));
-			  cpstate->type_stack.push ((yyvsp[(2) - (2)].lval));
+  case 151:
+#line 1320 "c-exp.y"
+                        {
+			  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 3407 "c-exp.c.tmp"
     break;
 
-  case 146:
-
-/* Line 1455 of yacc.c  */
-#line 1236 "c-exp.y"
-    {
-			  cpstate->type_stack.push ((yyvsp[(1) - (1)].lval));
+  case 152:
+#line 1328 "c-exp.y"
+                        {
+			  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 3418 "c-exp.c.tmp"
     break;
 
-  case 147:
-
-/* Line 1455 of yacc.c  */
-#line 1244 "c-exp.y"
-    {
-			  cpstate->type_stack.push ((yyvsp[(1) - (2)].type_stack));
-			  cpstate->type_stack.push ((yyvsp[(2) - (2)].tvec));
+  case 153:
+#line 1336 "c-exp.y"
+                        {
+			  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 3429 "c-exp.c.tmp"
     break;
 
-  case 148:
-
-/* Line 1455 of yacc.c  */
-#line 1251 "c-exp.y"
-    {
-			  cpstate->type_stack.push ((yyvsp[(1) - (1)].tvec));
+  case 154:
+#line 1343 "c-exp.y"
+                        {
+			  cpstate->type_stack.push ((yyvsp[0].tvec));
 			  (yyval.type_stack) = cpstate->type_stack.create ();
 			  cpstate->type_stacks.emplace_back ((yyval.type_stack));
 			}
+#line 3439 "c-exp.c.tmp"
     break;
 
-  case 149:
-
-/* Line 1455 of yacc.c  */
-#line 1259 "c-exp.y"
-    { (yyval.lval) = -1; }
+  case 155:
+#line 1351 "c-exp.y"
+                        { (yyval.lval) = -1; }
+#line 3445 "c-exp.c.tmp"
     break;
 
-  case 150:
-
-/* Line 1455 of yacc.c  */
-#line 1261 "c-exp.y"
-    { (yyval.lval) = -1; }
+  case 156:
+#line 1353 "c-exp.y"
+                        { (yyval.lval) = -1; }
+#line 3451 "c-exp.c.tmp"
     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 1355 "c-exp.y"
+                        { (yyval.lval) = (yyvsp[-1].typed_val_int).val; }
+#line 3457 "c-exp.c.tmp"
     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 1357 "c-exp.y"
+                        { (yyval.lval) = (yyvsp[-1].typed_val_int).val; }
+#line 3463 "c-exp.c.tmp"
     break;
 
-  case 153:
-
-/* Line 1455 of yacc.c  */
-#line 1269 "c-exp.y"
-    {
+  case 159:
+#line 1361 "c-exp.y"
+                        {
 			  (yyval.tvec) = new std::vector<struct type *>;
 			  cpstate->type_lists.emplace_back ((yyval.tvec));
 			}
+#line 3472 "c-exp.c.tmp"
     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 1366 "c-exp.y"
+                        { (yyval.tvec) = (yyvsp[-1].tvec); }
+#line 3478 "c-exp.c.tmp"
     break;
 
-  case 157:
-
-/* Line 1455 of yacc.c  */
-#line 1302 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 162:
+#line 1385 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "int"); }
+#line 3485 "c-exp.c.tmp"
     break;
 
-  case 158:
-
-/* Line 1455 of yacc.c  */
-#line 1305 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 163:
+#line 1388 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3492 "c-exp.c.tmp"
     break;
 
-  case 159:
-
-/* Line 1455 of yacc.c  */
-#line 1308 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 164:
+#line 1391 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3499 "c-exp.c.tmp"
     break;
 
-  case 160:
-
-/* Line 1455 of yacc.c  */
-#line 1311 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 165:
+#line 1394 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3506 "c-exp.c.tmp"
     break;
 
-  case 161:
-
-/* Line 1455 of yacc.c  */
-#line 1314 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 166:
+#line 1397 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3513 "c-exp.c.tmp"
     break;
 
-  case 162:
-
-/* Line 1455 of yacc.c  */
-#line 1317 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 167:
+#line 1400 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3520 "c-exp.c.tmp"
     break;
 
-  case 163:
-
-/* Line 1455 of yacc.c  */
-#line 1320 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 168:
+#line 1403 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long"); }
+#line 3527 "c-exp.c.tmp"
     break;
 
-  case 164:
-
-/* Line 1455 of yacc.c  */
-#line 1323 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 169:
+#line 1406 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long"); }
+#line 3534 "c-exp.c.tmp"
     break;
 
-  case 165:
-
-/* Line 1455 of yacc.c  */
-#line 1326 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 170:
+#line 1409 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long"); }
+#line 3541 "c-exp.c.tmp"
     break;
 
-  case 166:
-
-/* Line 1455 of yacc.c  */
-#line 1329 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 171:
+#line 1412 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long"); }
+#line 3548 "c-exp.c.tmp"
     break;
 
-  case 167:
-
-/* Line 1455 of yacc.c  */
-#line 1332 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 172:
+#line 1415 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3555 "c-exp.c.tmp"
     break;
 
-  case 168:
-
-/* Line 1455 of yacc.c  */
-#line 1335 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 173:
+#line 1418 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3562 "c-exp.c.tmp"
     break;
 
-  case 169:
-
-/* Line 1455 of yacc.c  */
-#line 1338 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 174:
+#line 1421 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3569 "c-exp.c.tmp"
     break;
 
-  case 170:
-
-/* Line 1455 of yacc.c  */
-#line 1341 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 175:
+#line 1424 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3576 "c-exp.c.tmp"
     break;
 
-  case 171:
-
-/* Line 1455 of yacc.c  */
-#line 1344 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 176:
+#line 1427 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3583 "c-exp.c.tmp"
     break;
 
-  case 172:
-
-/* Line 1455 of yacc.c  */
-#line 1347 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 177:
+#line 1430 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "long long"); }
+#line 3590 "c-exp.c.tmp"
     break;
 
-  case 173:
-
-/* Line 1455 of yacc.c  */
-#line 1350 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 178:
+#line 1433 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3597 "c-exp.c.tmp"
     break;
 
-  case 174:
-
-/* Line 1455 of yacc.c  */
-#line 1353 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 179:
+#line 1436 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3604 "c-exp.c.tmp"
     break;
 
-  case 175:
-
-/* Line 1455 of yacc.c  */
-#line 1356 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 180:
+#line 1439 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3611 "c-exp.c.tmp"
     break;
 
-  case 176:
-
-/* Line 1455 of yacc.c  */
-#line 1359 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 181:
+#line 1442 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "long long"); }
+#line 3618 "c-exp.c.tmp"
     break;
 
-  case 177:
-
-/* Line 1455 of yacc.c  */
-#line 1362 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 182:
+#line 1445 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3625 "c-exp.c.tmp"
     break;
 
-  case 178:
-
-/* Line 1455 of yacc.c  */
-#line 1365 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 183:
+#line 1448 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3632 "c-exp.c.tmp"
     break;
 
-  case 179:
-
-/* Line 1455 of yacc.c  */
-#line 1368 "c-exp.y"
-    { (yyval.tval) = lookup_signed_typename (pstate->language (),
+  case 184:
+#line 1451 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
 						       "short"); }
+#line 3639 "c-exp.c.tmp"
     break;
 
-  case 180:
-
-/* Line 1455 of yacc.c  */
-#line 1371 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 185:
+#line 1454 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "short"); }
+#line 3646 "c-exp.c.tmp"
     break;
 
-  case 181:
-
-/* Line 1455 of yacc.c  */
-#line 1374 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 186:
+#line 1457 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "short"); }
+#line 3653 "c-exp.c.tmp"
     break;
 
-  case 182:
-
-/* Line 1455 of yacc.c  */
-#line 1377 "c-exp.y"
-    { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+  case 187:
+#line 1460 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
 							 "short"); }
+#line 3660 "c-exp.c.tmp"
     break;
 
-  case 183:
-
-/* Line 1455 of yacc.c  */
-#line 1380 "c-exp.y"
-    { (yyval.tval) = lookup_typename (pstate->language (),
+  case 188:
+#line 1463 "c-exp.y"
+                        { (yyval.tval) = lookup_typename (pstate->language (),
 						"double",
 						NULL,
 						0); }
+#line 3669 "c-exp.c.tmp"
     break;
 
-  case 184:
+  case 189:
+#line 1468 "c-exp.y"
+                        { (yyval.tval) = lookup_typename (pstate->language (),
+						"float",
+						NULL,
+						0); }
+#line 3678 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1385 "c-exp.y"
-    { (yyval.tval) = lookup_typename (pstate->language (),
+  case 190:
+#line 1473 "c-exp.y"
+                        { (yyval.tval) = lookup_typename (pstate->language (),
 						"long double",
 						NULL,
 						0); }
+#line 3687 "c-exp.c.tmp"
     break;
 
-  case 185:
+  case 191:
+#line 1478 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+							 (yyvsp[0].tsym).type->name ()); }
+#line 3694 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1390 "c-exp.y"
-    { (yyval.tval)
-			    = lookup_struct (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
-					     pstate->expression_context_block);
+  case 192:
+#line 1481 "c-exp.y"
+                        { (yyval.tval) = lookup_unsigned_typename (pstate->language (),
+							 "int"); }
+#line 3701 "c-exp.c.tmp"
+    break;
+
+  case 193:
+#line 1484 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
+						       (yyvsp[0].tsym).type->name ()); }
+#line 3708 "c-exp.c.tmp"
+    break;
+
+  case 194:
+#line 1487 "c-exp.y"
+                        { (yyval.tval) = lookup_signed_typename (pstate->language (),
+						       "int"); }
+#line 3715 "c-exp.c.tmp"
+    break;
+
+  case 195:
+#line 1503 "c-exp.y"
+                        { (yyval.tval) = (yyvsp[0].tsym).type; }
+#line 3721 "c-exp.c.tmp"
+    break;
+
+  case 196:
+#line 1505 "c-exp.y"
+                        { (yyval.tval) = (yyvsp[0].tval); }
+#line 3727 "c-exp.c.tmp"
+    break;
+
+  case 197:
+#line 1507 "c-exp.y"
+                        {
+			  (yyval.tval) = init_complex_type (nullptr, (yyvsp[0].tval));
 			}
+#line 3735 "c-exp.c.tmp"
     break;
 
-  case 186:
+  case 198:
+#line 1511 "c-exp.y"
+                        { (yyval.tval)
+			    = lookup_struct (copy_name ((yyvsp[0].sval)).c_str (),
+					     pstate->expression_context_block);
+			}
+#line 3744 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1395 "c-exp.y"
-    {
+  case 199:
+#line 1516 "c-exp.y"
+                        {
 			  pstate->mark_completion_tag (TYPE_CODE_STRUCT,
 						       "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3754 "c-exp.c.tmp"
     break;
 
-  case 187:
-
-/* Line 1455 of yacc.c  */
-#line 1401 "c-exp.y"
-    {
+  case 200:
+#line 1522 "c-exp.y"
+                        {
 			  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 3764 "c-exp.c.tmp"
     break;
 
-  case 188:
-
-/* Line 1455 of yacc.c  */
-#line 1407 "c-exp.y"
-    { (yyval.tval) = lookup_struct
-			    (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
+  case 201:
+#line 1528 "c-exp.y"
+                        { (yyval.tval) = lookup_struct
+			    (copy_name ((yyvsp[0].sval)).c_str (),
 			     pstate->expression_context_block);
 			}
+#line 3773 "c-exp.c.tmp"
     break;
 
-  case 189:
-
-/* Line 1455 of yacc.c  */
-#line 1412 "c-exp.y"
-    {
+  case 202:
+#line 1533 "c-exp.y"
+                        {
 			  pstate->mark_completion_tag (TYPE_CODE_STRUCT,
 						       "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3783 "c-exp.c.tmp"
     break;
 
-  case 190:
-
-/* Line 1455 of yacc.c  */
-#line 1418 "c-exp.y"
-    {
+  case 203:
+#line 1539 "c-exp.y"
+                        {
 			  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 3793 "c-exp.c.tmp"
     break;
 
-  case 191:
-
-/* Line 1455 of yacc.c  */
-#line 1424 "c-exp.y"
-    { (yyval.tval)
-			    = lookup_union (copy_name ((yyvsp[(2) - (2)].sval)).c_str (),
+  case 204:
+#line 1545 "c-exp.y"
+                        { (yyval.tval)
+			    = lookup_union (copy_name ((yyvsp[0].sval)).c_str (),
 					    pstate->expression_context_block);
 			}
+#line 3802 "c-exp.c.tmp"
     break;
 
-  case 192:
-
-/* Line 1455 of yacc.c  */
-#line 1429 "c-exp.y"
-    {
+  case 205:
+#line 1550 "c-exp.y"
+                        {
 			  pstate->mark_completion_tag (TYPE_CODE_UNION,
 						       "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3812 "c-exp.c.tmp"
     break;
 
-  case 193:
-
-/* Line 1455 of yacc.c  */
-#line 1435 "c-exp.y"
-    {
+  case 206:
+#line 1556 "c-exp.y"
+                        {
 			  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 3822 "c-exp.c.tmp"
     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 1562 "c-exp.y"
+                        { (yyval.tval) = lookup_enum (copy_name ((yyvsp[0].sval)).c_str (),
 					    pstate->expression_context_block);
 			}
+#line 3830 "c-exp.c.tmp"
     break;
 
-  case 195:
-
-/* Line 1455 of yacc.c  */
-#line 1445 "c-exp.y"
-    {
+  case 208:
+#line 1566 "c-exp.y"
+                        {
 			  pstate->mark_completion_tag (TYPE_CODE_ENUM, "", 0);
 			  (yyval.tval) = NULL;
 			}
+#line 3839 "c-exp.c.tmp"
     break;
 
-  case 196:
-
-/* Line 1455 of yacc.c  */
-#line 1450 "c-exp.y"
-    {
-			  pstate->mark_completion_tag (TYPE_CODE_ENUM, (yyvsp[(2) - (3)].sval).ptr,
-						       (yyvsp[(2) - (3)].sval).length);
+  case 209:
+#line 1571 "c-exp.y"
+                        {
+			  pstate->mark_completion_tag (TYPE_CODE_ENUM, (yyvsp[-1].sval).ptr,
+						       (yyvsp[-1].sval).length);
 			  (yyval.tval) = NULL;
 			}
+#line 3849 "c-exp.c.tmp"
     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"
-    { (yyval.tval) = lookup_template_type
-			    (copy_name((yyvsp[(2) - (5)].sval)).c_str (), (yyvsp[(4) - (5)].tval),
+  case 210:
+#line 1580 "c-exp.y"
+                        { (yyval.tval) = lookup_template_type
+			    (copy_name((yyvsp[-3].sval)).c_str (), (yyvsp[-1].tval),
 			     pstate->expression_context_block);
 			}
+#line 3858 "c-exp.c.tmp"
     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 1585 "c-exp.y"
+                        { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[0].tval)); }
+#line 3864 "c-exp.c.tmp"
     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 1587 "c-exp.y"
+                        { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); }
+#line 3870 "c-exp.c.tmp"
     break;
 
-  case 205:
-
-/* Line 1455 of yacc.c  */
-#line 1483 "c-exp.y"
-    {
+  case 214:
+#line 1592 "c-exp.y"
+                {
 		  (yyval.tsym).stoken.ptr = "int";
 		  (yyval.tsym).stoken.length = 3;
 		  (yyval.tsym).type = lookup_signed_typename (pstate->language (),
 						    "int");
 		}
+#line 3881 "c-exp.c.tmp"
     break;
 
-  case 206:
-
-/* Line 1455 of yacc.c  */
-#line 1490 "c-exp.y"
-    {
+  case 215:
+#line 1599 "c-exp.y"
+                {
 		  (yyval.tsym).stoken.ptr = "long";
 		  (yyval.tsym).stoken.length = 4;
 		  (yyval.tsym).type = lookup_signed_typename (pstate->language (),
 						    "long");
 		}
+#line 3892 "c-exp.c.tmp"
     break;
 
-  case 207:
-
-/* Line 1455 of yacc.c  */
-#line 1497 "c-exp.y"
-    {
+  case 216:
+#line 1606 "c-exp.y"
+                {
 		  (yyval.tsym).stoken.ptr = "short";
 		  (yyval.tsym).stoken.length = 5;
 		  (yyval.tsym).type = lookup_signed_typename (pstate->language (),
 						    "short");
 		}
+#line 3903 "c-exp.c.tmp"
     break;
 
-  case 208:
-
-/* Line 1455 of yacc.c  */
-#line 1507 "c-exp.y"
-    { check_parameter_typelist ((yyvsp[(1) - (1)].tvec)); }
+  case 217:
+#line 1616 "c-exp.y"
+                        { check_parameter_typelist ((yyvsp[0].tvec)); }
+#line 3909 "c-exp.c.tmp"
     break;
 
-  case 209:
-
-/* Line 1455 of yacc.c  */
-#line 1509 "c-exp.y"
-    {
-			  (yyvsp[(1) - (3)].tvec)->push_back (NULL);
-			  check_parameter_typelist ((yyvsp[(1) - (3)].tvec));
-			  (yyval.tvec) = (yyvsp[(1) - (3)].tvec);
+  case 218:
+#line 1618 "c-exp.y"
+                        {
+			  (yyvsp[-2].tvec)->push_back (NULL);
+			  check_parameter_typelist ((yyvsp[-2].tvec));
+			  (yyval.tvec) = (yyvsp[-2].tvec);
 			}
+#line 3919 "c-exp.c.tmp"
     break;
 
-  case 210:
-
-/* Line 1455 of yacc.c  */
-#line 1518 "c-exp.y"
-    {
+  case 219:
+#line 1627 "c-exp.y"
+                {
 		  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 3932 "c-exp.c.tmp"
     break;
 
-  case 211:
-
-/* Line 1455 of yacc.c  */
-#line 1527 "c-exp.y"
-    {
-		  (yyvsp[(1) - (3)].tvec)->push_back ((yyvsp[(3) - (3)].tval));
-		  (yyval.tvec) = (yyvsp[(1) - (3)].tvec);
+  case 220:
+#line 1636 "c-exp.y"
+                {
+		  (yyvsp[-2].tvec)->push_back ((yyvsp[0].tval));
+		  (yyval.tvec) = (yyvsp[-2].tvec);
 		}
+#line 3941 "c-exp.c.tmp"
     break;
 
-  case 213:
-
-/* Line 1455 of yacc.c  */
-#line 1535 "c-exp.y"
-    {
-		  cpstate->type_stack.push ((yyvsp[(2) - (2)].type_stack));
-		  (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[(1) - (2)].tval));
+  case 222:
+#line 1644 "c-exp.y"
+                {
+		  cpstate->type_stack.push ((yyvsp[0].type_stack));
+		  (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval));
 		}
+#line 3950 "c-exp.c.tmp"
     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 1651 "c-exp.y"
+                { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); }
+#line 3956 "c-exp.c.tmp"
     break;
 
-  case 219:
-
-/* Line 1455 of yacc.c  */
-#line 1554 "c-exp.y"
-    { cpstate->type_stack.insert (tp_const);
+  case 228:
+#line 1663 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_const);
 			  cpstate->type_stack.insert (tp_volatile);
 			}
+#line 3964 "c-exp.c.tmp"
     break;
 
-  case 220:
-
-/* Line 1455 of yacc.c  */
-#line 1558 "c-exp.y"
-    { cpstate->type_stack.insert (tp_const); }
+  case 229:
+#line 1667 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_const); }
+#line 3970 "c-exp.c.tmp"
     break;
 
-  case 221:
-
-/* Line 1455 of yacc.c  */
-#line 1560 "c-exp.y"
-    { cpstate->type_stack.insert (tp_volatile); }
+  case 230:
+#line 1669 "c-exp.y"
+                        { cpstate->type_stack.insert (tp_volatile); }
+#line 3976 "c-exp.c.tmp"
     break;
 
-  case 222:
-
-/* Line 1455 of yacc.c  */
-#line 1564 "c-exp.y"
-    { (yyval.sval) = operator_stoken (" new"); }
+  case 231:
+#line 1673 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (" new"); }
+#line 3982 "c-exp.c.tmp"
     break;
 
-  case 223:
-
-/* Line 1455 of yacc.c  */
-#line 1566 "c-exp.y"
-    { (yyval.sval) = operator_stoken (" delete"); }
+  case 232:
+#line 1675 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (" delete"); }
+#line 3988 "c-exp.c.tmp"
     break;
 
-  case 224:
-
-/* Line 1455 of yacc.c  */
-#line 1568 "c-exp.y"
-    { (yyval.sval) = operator_stoken (" new[]"); }
+  case 233:
+#line 1677 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (" new[]"); }
+#line 3994 "c-exp.c.tmp"
     break;
 
-  case 225:
-
-/* Line 1455 of yacc.c  */
-#line 1570 "c-exp.y"
-    { (yyval.sval) = operator_stoken (" delete[]"); }
+  case 234:
+#line 1679 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (" delete[]"); }
+#line 4000 "c-exp.c.tmp"
     break;
 
-  case 226:
-
-/* Line 1455 of yacc.c  */
-#line 1572 "c-exp.y"
-    { (yyval.sval) = operator_stoken (" new[]"); }
+  case 235:
+#line 1681 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (" new[]"); }
+#line 4006 "c-exp.c.tmp"
     break;
 
-  case 227:
-
-/* Line 1455 of yacc.c  */
-#line 1574 "c-exp.y"
-    { (yyval.sval) = operator_stoken (" delete[]"); }
+  case 236:
+#line 1683 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (" delete[]"); }
+#line 4012 "c-exp.c.tmp"
     break;
 
-  case 228:
-
-/* Line 1455 of yacc.c  */
-#line 1576 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("+"); }
+  case 237:
+#line 1685 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("+"); }
+#line 4018 "c-exp.c.tmp"
     break;
 
-  case 229:
-
-/* Line 1455 of yacc.c  */
-#line 1578 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("-"); }
+  case 238:
+#line 1687 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("-"); }
+#line 4024 "c-exp.c.tmp"
     break;
 
-  case 230:
-
-/* Line 1455 of yacc.c  */
-#line 1580 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("*"); }
+  case 239:
+#line 1689 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("*"); }
+#line 4030 "c-exp.c.tmp"
     break;
 
-  case 231:
-
-/* Line 1455 of yacc.c  */
-#line 1582 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("/"); }
+  case 240:
+#line 1691 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("/"); }
+#line 4036 "c-exp.c.tmp"
     break;
 
-  case 232:
-
-/* Line 1455 of yacc.c  */
-#line 1584 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("%"); }
+  case 241:
+#line 1693 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("%"); }
+#line 4042 "c-exp.c.tmp"
     break;
 
-  case 233:
-
-/* Line 1455 of yacc.c  */
-#line 1586 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("^"); }
+  case 242:
+#line 1695 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("^"); }
+#line 4048 "c-exp.c.tmp"
     break;
 
-  case 234:
-
-/* Line 1455 of yacc.c  */
-#line 1588 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("&"); }
+  case 243:
+#line 1697 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("&"); }
+#line 4054 "c-exp.c.tmp"
     break;
 
-  case 235:
-
-/* Line 1455 of yacc.c  */
-#line 1590 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("|"); }
+  case 244:
+#line 1699 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("|"); }
+#line 4060 "c-exp.c.tmp"
     break;
 
-  case 236:
-
-/* Line 1455 of yacc.c  */
-#line 1592 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("~"); }
+  case 245:
+#line 1701 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("~"); }
+#line 4066 "c-exp.c.tmp"
     break;
 
-  case 237:
-
-/* Line 1455 of yacc.c  */
-#line 1594 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("!"); }
+  case 246:
+#line 1703 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("!"); }
+#line 4072 "c-exp.c.tmp"
     break;
 
-  case 238:
-
-/* Line 1455 of yacc.c  */
-#line 1596 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("="); }
+  case 247:
+#line 1705 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("="); }
+#line 4078 "c-exp.c.tmp"
     break;
 
-  case 239:
-
-/* Line 1455 of yacc.c  */
-#line 1598 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("<"); }
+  case 248:
+#line 1707 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("<"); }
+#line 4084 "c-exp.c.tmp"
     break;
 
-  case 240:
-
-/* Line 1455 of yacc.c  */
-#line 1600 "c-exp.y"
-    { (yyval.sval) = operator_stoken (">"); }
+  case 249:
+#line 1709 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (">"); }
+#line 4090 "c-exp.c.tmp"
     break;
 
-  case 241:
-
-/* Line 1455 of yacc.c  */
-#line 1602 "c-exp.y"
-    { const char *op = " unknown";
-			  switch ((yyvsp[(2) - (2)].opcode))
+  case 250:
+#line 1711 "c-exp.y"
+                        { const char *op = " unknown";
+			  switch ((yyvsp[0].opcode))
 			    {
 			    case BINOP_RSH:
 			      op = ">>=";
@@ -4357,333 +4129,286 @@ yyreduce:
 
 			  (yyval.sval) = operator_stoken (op);
 			}
+#line 4134 "c-exp.c.tmp"
     break;
 
-  case 242:
-
-/* Line 1455 of yacc.c  */
-#line 1642 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("<<"); }
+  case 251:
+#line 1751 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("<<"); }
+#line 4140 "c-exp.c.tmp"
     break;
 
-  case 243:
-
-/* Line 1455 of yacc.c  */
-#line 1644 "c-exp.y"
-    { (yyval.sval) = operator_stoken (">>"); }
+  case 252:
+#line 1753 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (">>"); }
+#line 4146 "c-exp.c.tmp"
     break;
 
-  case 244:
-
-/* Line 1455 of yacc.c  */
-#line 1646 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("=="); }
+  case 253:
+#line 1755 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("=="); }
+#line 4152 "c-exp.c.tmp"
     break;
 
-  case 245:
-
-/* Line 1455 of yacc.c  */
-#line 1648 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("!="); }
+  case 254:
+#line 1757 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("!="); }
+#line 4158 "c-exp.c.tmp"
     break;
 
-  case 246:
-
-/* Line 1455 of yacc.c  */
-#line 1650 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("<="); }
+  case 255:
+#line 1759 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("<="); }
+#line 4164 "c-exp.c.tmp"
     break;
 
-  case 247:
-
-/* Line 1455 of yacc.c  */
-#line 1652 "c-exp.y"
-    { (yyval.sval) = operator_stoken (">="); }
+  case 256:
+#line 1761 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (">="); }
+#line 4170 "c-exp.c.tmp"
     break;
 
-  case 248:
-
-/* Line 1455 of yacc.c  */
-#line 1654 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("&&"); }
+  case 257:
+#line 1763 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("&&"); }
+#line 4176 "c-exp.c.tmp"
     break;
 
-  case 249:
-
-/* Line 1455 of yacc.c  */
-#line 1656 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("||"); }
+  case 258:
+#line 1765 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("||"); }
+#line 4182 "c-exp.c.tmp"
     break;
 
-  case 250:
-
-/* Line 1455 of yacc.c  */
-#line 1658 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("++"); }
+  case 259:
+#line 1767 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("++"); }
+#line 4188 "c-exp.c.tmp"
     break;
 
-  case 251:
-
-/* Line 1455 of yacc.c  */
-#line 1660 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("--"); }
+  case 260:
+#line 1769 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("--"); }
+#line 4194 "c-exp.c.tmp"
     break;
 
-  case 252:
-
-/* Line 1455 of yacc.c  */
-#line 1662 "c-exp.y"
-    { (yyval.sval) = operator_stoken (","); }
+  case 261:
+#line 1771 "c-exp.y"
+                        { (yyval.sval) = operator_stoken (","); }
+#line 4200 "c-exp.c.tmp"
     break;
 
-  case 253:
-
-/* Line 1455 of yacc.c  */
-#line 1664 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("->*"); }
+  case 262:
+#line 1773 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("->*"); }
+#line 4206 "c-exp.c.tmp"
     break;
 
-  case 254:
-
-/* Line 1455 of yacc.c  */
-#line 1666 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("->"); }
+  case 263:
+#line 1775 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("->"); }
+#line 4212 "c-exp.c.tmp"
     break;
 
-  case 255:
-
-/* Line 1455 of yacc.c  */
-#line 1668 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("()"); }
+  case 264:
+#line 1777 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("()"); }
+#line 4218 "c-exp.c.tmp"
     break;
 
-  case 256:
-
-/* Line 1455 of yacc.c  */
-#line 1670 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("[]"); }
+  case 265:
+#line 1779 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("[]"); }
+#line 4224 "c-exp.c.tmp"
     break;
 
-  case 257:
-
-/* Line 1455 of yacc.c  */
-#line 1672 "c-exp.y"
-    { (yyval.sval) = operator_stoken ("[]"); }
+  case 266:
+#line 1781 "c-exp.y"
+                        { (yyval.sval) = operator_stoken ("[]"); }
+#line 4230 "c-exp.c.tmp"
     break;
 
-  case 258:
-
-/* Line 1455 of yacc.c  */
-#line 1674 "c-exp.y"
-    { string_file buf;
+  case 267:
+#line 1783 "c-exp.y"
+                        { string_file buf;
 
-			  c_print_type ((yyvsp[(2) - (2)].tval), NULL, &buf, -1, 0,
+			  c_print_type ((yyvsp[0].tval), NULL, &buf, -1, 0,
 					&type_print_raw_options);
+			  std::string name = std::move (buf.string ());
 
 			  /* 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 4248 "c-exp.c.tmp"
     break;
 
-  case 260:
-
-/* Line 1455 of yacc.c  */
-#line 1697 "c-exp.y"
-    { (yyval.sval) = typename_stoken ("double"); }
+  case 269:
+#line 1805 "c-exp.y"
+                               { (yyval.sval) = typename_stoken ("double"); }
+#line 4254 "c-exp.c.tmp"
     break;
 
-  case 261:
-
-/* Line 1455 of yacc.c  */
-#line 1698 "c-exp.y"
-    { (yyval.sval) = typename_stoken ("int"); }
+  case 270:
+#line 1806 "c-exp.y"
+                              { (yyval.sval) = typename_stoken ("float"); }
+#line 4260 "c-exp.c.tmp"
     break;
 
-  case 262:
-
-/* Line 1455 of yacc.c  */
-#line 1699 "c-exp.y"
-    { (yyval.sval) = typename_stoken ("long"); }
+  case 271:
+#line 1807 "c-exp.y"
+                            { (yyval.sval) = typename_stoken ("int"); }
+#line 4266 "c-exp.c.tmp"
     break;
 
-  case 263:
-
-/* Line 1455 of yacc.c  */
-#line 1700 "c-exp.y"
-    { (yyval.sval) = typename_stoken ("short"); }
+  case 272:
+#line 1808 "c-exp.y"
+                     { (yyval.sval) = typename_stoken ("long"); }
+#line 4272 "c-exp.c.tmp"
     break;
 
-  case 264:
-
-/* Line 1455 of yacc.c  */
-#line 1701 "c-exp.y"
-    { (yyval.sval) = typename_stoken ("signed"); }
+  case 273:
+#line 1809 "c-exp.y"
+                      { (yyval.sval) = typename_stoken ("short"); }
+#line 4278 "c-exp.c.tmp"
     break;
 
-  case 265:
-
-/* Line 1455 of yacc.c  */
-#line 1702 "c-exp.y"
-    { (yyval.sval) = typename_stoken ("unsigned"); }
+  case 274:
+#line 1810 "c-exp.y"
+                               { (yyval.sval) = typename_stoken ("signed"); }
+#line 4284 "c-exp.c.tmp"
     break;
 
-  case 266:
-
-/* Line 1455 of yacc.c  */
-#line 1705 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 275:
+#line 1811 "c-exp.y"
+                         { (yyval.sval) = typename_stoken ("unsigned"); }
+#line 4290 "c-exp.c.tmp"
     break;
 
-  case 267:
-
-/* Line 1455 of yacc.c  */
-#line 1706 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 276:
+#line 1814 "c-exp.y"
+                     { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4296 "c-exp.c.tmp"
     break;
 
-  case 268:
-
-/* Line 1455 of yacc.c  */
-#line 1707 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].tsym).stoken; }
+  case 277:
+#line 1815 "c-exp.y"
+                          { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4302 "c-exp.c.tmp"
     break;
 
-  case 269:
-
-/* Line 1455 of yacc.c  */
-#line 1708 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 278:
+#line 1816 "c-exp.y"
+                         { (yyval.sval) = (yyvsp[0].tsym).stoken; }
+#line 4308 "c-exp.c.tmp"
     break;
 
-  case 270:
-
-/* Line 1455 of yacc.c  */
-#line 1709 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 279:
+#line 1817 "c-exp.y"
+                             { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4314 "c-exp.c.tmp"
     break;
 
-  case 271:
-
-/* Line 1455 of yacc.c  */
-#line 1710 "c-exp.y"
-    { (yyval.sval) = (yyvsp[(1) - (1)].sval); }
+  case 280:
+#line 1818 "c-exp.y"
+                                  { (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 4320 "c-exp.c.tmp"
     break;
 
-  case 274:
+  case 281:
+#line 1819 "c-exp.y"
+                     { (yyval.sval) = (yyvsp[0].sval); }
+#line 4326 "c-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 1723 "c-exp.y"
-    {
+  case 284:
+#line 1832 "c-exp.y"
+                        {
 			  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,
 					     &is_a_field_of_this);
 			  (yyval.ssym).is_a_field_of_this
 			    = is_a_field_of_this.type != NULL;
 			}
+#line 4343 "c-exp.c.tmp"
     break;
 
 
+#line 4347 "c-exp.c.tmp"
 
-/* Line 1455 of yacc.c  */
-#line 4599 "c-exp.c.tmp"
       default: break;
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  /* 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 ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   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 ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
-#else
-      {
-	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;
-	  }
-      }
-#endif
     }
 
-
-
   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
@@ -4695,14 +4420,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  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,39 +4438,42 @@ 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.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   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 += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+            {
+              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);
+                  YY_ACCESSING_SYMBOL (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.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -4760,6 +4486,7 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -4767,7 +4494,8 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -4777,53 +4505,39 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 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);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
-
-
-/* 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);
+  return yyresult;
+}
 
-  token.ptr = copy;
-  ++token.length;
+#line 1847 "c-exp.y"
 
-  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 +4574,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 +4592,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)
 	    {
@@ -4917,7 +4631,10 @@ 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;
@@ -4930,6 +4647,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 +4695,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 +4750,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,6 +4776,11 @@ 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 */
 	}
@@ -5057,13 +4790,13 @@ parse_number (struct parser_state *par_s
       /* 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)
+      if (c != 'l' && c != 'u' && c != 'i' && (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 (c != 'l' && c != 'u' && c != 'i' && n != 0)
 	{	
 	  if (unsigned_p && prevn >= n)
 	    error (_("Numeric constant too large."));
@@ -5135,7 +4868,11 @@ parse_number (struct parser_state *par_s
        putithere->typed_val_int.type = signed_type;
      }
 
-   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.  */
@@ -5417,11 +5154,15 @@ 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);
 
@@ -5437,8 +5178,8 @@ static const struct 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[] =
@@ -5451,27 +5192,27 @@ 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.  */
+   single word (like 'char') are handled by the classify_name function.  */
 static const struct token ident_tokens[] =
   {
     {"unsigned", UNSIGNED, OP_NULL, 0},
@@ -5483,27 +5224,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 +5273,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.  */
@@ -5604,12 +5349,11 @@ 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;
@@ -5622,6 +5366,7 @@ lex_one_token (struct parser_state *par_
 	if ((tokentab3[i].flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((tokentab3[i].flags & FLAG_C) == 0);
 
 	pstate->lexptr += 3;
 	yylval.opcode = tokentab3[i].opcode;
@@ -5635,6 +5380,7 @@ lex_one_token (struct parser_state *par_
 	if ((tokentab2[i].flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((tokentab2[i].flags & FLAG_C) == 0);
 
 	pstate->lexptr += 2;
 	yylval.opcode = tokentab2[i].opcode;
@@ -5647,16 +5393,16 @@ lex_one_token (struct parser_state *par_
     {
     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 +5411,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 +5438,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;
@@ -5719,7 +5465,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 +5485,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 +5507,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);
 
@@ -5929,6 +5678,10 @@ lex_one_token (struct parser_state *par_
 	if ((ident_tokens[i].flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	if ((ident_tokens[i].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)
 	  {
@@ -5938,7 +5691,7 @@ lex_one_token (struct parser_state *par_
 			       pstate->expression_context_block,
 			       VAR_DOMAIN,
 			       (par_state->language ()->la_language
-			        == language_cplus ? &is_a_field_of_this
+				== language_cplus ? &is_a_field_of_this
 				: NULL)).symbol
 		!= NULL)
 	      {
@@ -5982,7 +5735,7 @@ 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
@@ -6005,7 +5758,7 @@ classify_name (struct parser_state *par_
   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
+			par_state->language ()->name_of_this ()
 			? &is_a_field_of_this : NULL);
 
   if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
@@ -6380,7 +6133,10 @@ 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
@@ -6449,4 +6205,3 @@ yyerror (const char *msg)
 
   error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
 }
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-exp.h ./gdb/c-exp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-exp.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/c-exp.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,220 @@
+/* Definitions for C expressions
+
+   Copyright (C) 2020 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 (value_type (lhs), 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-exp.y ./gdb/c-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-exp.y	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-exp.y	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* YACC parser for C expressions, for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -54,6 +54,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 +124,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,8 +166,6 @@ 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
 static void c_print_token (FILE *file, int type, YYSTYPE value);
@@ -174,7 +175,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 +186,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 +238,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 +282,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 +506,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 +554,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 +577,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 +610,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 +645,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 +654,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 +683,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>
+			       (TYPE_TARGET_TYPE ($1.type), 0));
+			  operation_up imag
+			    = (make_operation<long_const_operation>
+			       (TYPE_TARGET_TYPE ($1.type), $1.val));
+			  pstate->push_new<complex_operation>
+			    (std::move (real), std::move (imag), $1.type);
+			}
 	;
 
 exp	:	CHAR
@@ -779,7 +879,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 +887,44 @@ 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
+			    = TYPE_TARGET_TYPE ($1.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 +932,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)
@@ -833,28 +956,27 @@ exp	:	SIZEOF '(' type ')'	%prec UNARY
 			       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); }
+			  pstate->push_new<long_const_operation>
+			    (int_type, TYPE_LENGTH (type));
+			}
 	;
 
 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:
@@ -919,7 +1041,7 @@ exp	:	string_exp
 				}
 			    }
 
-			  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 +1051,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++.  */
@@ -989,9 +1108,7 @@ variable:	name_not_typename ENTRY
 				     "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);
 			}
 	;
 
@@ -1008,10 +1125,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 +1137,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 +1169,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 ());
+					     VAR_DOMAIN, NULL);
+			  pstate->push_symbol (name.c_str (), sym);
 			}
 	;
 
@@ -1107,26 +1193,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
 			    {
@@ -1157,48 +1238,59 @@ variable:	name_not_typename
 				   : 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,
+				    SYMBOL_BLOCK_VALUE (alias_target) };
+				  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 +1377,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 +1464,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 +1573,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); }
 	;
 
@@ -1675,13 +1784,14 @@ oper:	OPERATOR NEW
 
 			  c_print_type ($2, NULL, &buf, -1, 0,
 					&type_print_raw_options);
+			  std::string name = std::move (buf.string ());
 
 			  /* 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 +1799,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"); }
@@ -1737,22 +1846,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 +1881,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 +1899,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)
 	    {
@@ -1845,7 +1938,10 @@ 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;
@@ -1858,6 +1954,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 +2002,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 +2057,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,6 +2083,11 @@ 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 */
 	}
@@ -1985,13 +2097,13 @@ parse_number (struct parser_state *par_s
       /* 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)
+      if (c != 'l' && c != 'u' && c != 'i' && (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 (c != 'l' && c != 'u' && c != 'i' && n != 0)
 	{	
 	  if (unsigned_p && prevn >= n)
 	    error (_("Numeric constant too large."));
@@ -2063,7 +2175,11 @@ parse_number (struct parser_state *par_s
        putithere->typed_val_int.type = signed_type;
      }
 
-   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,11 +2461,15 @@ 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);
 
@@ -2365,8 +2485,8 @@ static const struct 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[] =
@@ -2379,27 +2499,27 @@ 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.  */
+   single word (like 'char') are handled by the classify_name function.  */
 static const struct token ident_tokens[] =
   {
     {"unsigned", UNSIGNED, OP_NULL, 0},
@@ -2411,27 +2531,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 +2580,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.  */
@@ -2532,12 +2656,11 @@ 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;
@@ -2550,6 +2673,7 @@ lex_one_token (struct parser_state *par_
 	if ((tokentab3[i].flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((tokentab3[i].flags & FLAG_C) == 0);
 
 	pstate->lexptr += 3;
 	yylval.opcode = tokentab3[i].opcode;
@@ -2563,6 +2687,7 @@ lex_one_token (struct parser_state *par_
 	if ((tokentab2[i].flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	gdb_assert ((tokentab2[i].flags & FLAG_C) == 0);
 
 	pstate->lexptr += 2;
 	yylval.opcode = tokentab2[i].opcode;
@@ -2575,16 +2700,16 @@ lex_one_token (struct parser_state *par_
     {
     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 +2718,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 +2745,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;
@@ -2647,7 +2772,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 +2792,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 +2814,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);
 
@@ -2857,6 +2985,10 @@ lex_one_token (struct parser_state *par_
 	if ((ident_tokens[i].flags & FLAG_CXX) != 0
 	    && par_state->language ()->la_language != language_cplus)
 	  break;
+	if ((ident_tokens[i].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)
 	  {
@@ -2866,7 +2998,7 @@ lex_one_token (struct parser_state *par_
 			       pstate->expression_context_block,
 			       VAR_DOMAIN,
 			       (par_state->language ()->la_language
-			        == language_cplus ? &is_a_field_of_this
+				== language_cplus ? &is_a_field_of_this
 				: NULL)).symbol
 		!= NULL)
 	      {
@@ -2910,7 +3042,7 @@ 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
@@ -2933,7 +3065,7 @@ classify_name (struct parser_state *par_
   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
+			par_state->language ()->name_of_this ()
 			? &is_a_field_of_this : NULL);
 
   if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
@@ -3308,7 +3440,10 @@ 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog ./gdb/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog	2021-12-16 01:57:39.000000000 +0000
@@ -1,16594 +1,7756 @@
-2020-02-22  Eli Zaretskii  <eliz@gnu.org>
+2021-12-11  Bruno Larsen  <blarsen@redhat.com>
 
-	PRE gdb/25586:
-	* tui/tui-win.c (new_height_ok, tui_adjust_win_heights): Rename
-	'locator' to 'status_line', to better match terminology in the
-	manual.
-	(tui_adjust_win_heights): Resize the status_line window to match
-	the new dimensions of the command and source/disassembly windows.
-	Reported by Aleksey Midenkov <midenok@gmail.com>.
+	PR gdb/28480
 
-2020-02-08  Joel Brobecker  <brobecker@adacore.com>
+	Pushed by Joel Brobecker  <brobecker@adacore.com>
+	* valops.c (struct_field_searcher::update_result): Improve
+	ambiguous member detection.
 
-	* version.in: Set GDB version number to 9.1.90.DATE-git.
+2021-11-03  Luis Machado  <luis.machado@linaro.org>
 
-2020-02-08  Joel Brobecker  <brobecker@adacore.com>
+	PR gdb/28355
 
-	GDB 9.1 released.
+	* arch/aarch64.h (struct aarch64_features): New struct.
 
-2020-02-08  Joel Brobecker  <brobecker@adacore.com>
+2021-10-22  Tom de Vries  <tdevries@suse.de>
 
-	* version.in: Set GDB version number to 9.1.
+	PR tui/28483
+	* tui/tui-winsource.c (tui_source_window_base::update_breakpoint_info):
+	Fix returns in loop body.
 
-2020-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+2021-10-04  Tom de Vries  <tdevries@suse.de>
 
-	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-01-10  Christian Biesinger  <cbiesinger@google.com>
-
-	* gdbsupport/common-defs.h: Don't define _FORTIFY_SOURCE on MinGW.
-
-2020-01-07  Tom Tromey  <tromey@adacore.com>
-
-	PR build/24937:
-	* stap-probe.c (class stap_static_probe_ops): Add constructor.
-
-2020-01-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+	PR build/28318
+	* ax_cxx_compile_stdcxx.m4: Add CXX_DIALECT to CXX.
+	* configure: Regenerate.
 
-	* stack.c (print_frame_info): Move disassemble_next_line code
-	inside source_print block.
+2021-09-13  Joel Brobecker  <brobecker@adacore.com>
 
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+	* version.in: Set GDB version number to 11.1.90.DATE-git.
 
-	* gdbarch.sh: Update copyright year range of generated files.
+2021-09-13  Joel Brobecker  <brobecker@adacore.com>
 
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+	GDB 11.1 released.
 
-	Update copyright year range in all the GDB files automatically
-	handled by our copyright.py script.
+2021-09-13  Joel Brobecker  <brobecker@adacore.com>
 
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+	* version.in: Set GDB version number to 11.1.
 
-	* copyright.py: Convert to Python 3.
+2021-09-08  Tom Tromey  <tom@tromey.com>
 
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+	* dwarf2/read.h (dwarf2_per_objfile::resize_symtabs): Remove.
+	* dwarf2/read.c (all_comp_units_iterator, all_comp_units_range):
+	New classes.
+	(dwarf2_per_objfile::symtab_set_p)
+	(dwarf2_per_objfile::get_symtab, dwarf2_per_objfile::set_symtab):
+	Adjust to resizeable vectors.
+	(dwarf2_gdb_index::expand_symtabs_matching)
+	(dwarf2_base_index_functions::map_symbol_filenames)
+	(dwarf2_debug_names_index::expand_symtabs_matching): Use
+	all_comp_units_range.
+	(dwarf2_initialize_objfile, dwarf2_build_psymtabs)
+	(add_type_unit): Don't call resize_symtabs.
 
-	* copyright.py: Adapt after move of gnulib directory from gdb
-	directory to toplevel directory.
+2021-09-07  John Baldwin  <jhb@FreeBSD.org>
 
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+	* fbsd-nat.c (fbsd_nat_target::info_proc): Use plongest and
+	pulongest instead of %j.
 
-	* copyright.py (main): Exit if run from the wrong directory.
+2021-08-30  Tom de Vries  <tdevries@suse.de>
 
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+	PR cli/28290
+	* gdb/corelow.c (core_target_open): Skip call to gdb_abspath in the
+	empty-string case.
 
-	* top.c (print_gdb_version): Change copyright year to 2020.
+2021-08-23  Tom de Vries  <tdevries@suse.de>
 
-2019-12-26  Christian Biesinger  <cbiesinger@google.com>
+	PR gdb/26880
+	* gdb/exec.c (exec_file_attach): Use %s instead of %ps in call to
+	error function.
 
-	* configure: Regenerate.
-	* configure.ac: Quote variable arguments of test.
-	* gdbsupport/common.m4: Likewise.
+2021-08-06  Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tom de Vries  <tdevries@suse.de>
 
-2019-12-21  Eli Zaretskii  <eliz@gnu.org>
+	PR symtab/28004
+	* dwarf2/read.c (dwarf2_rnglists_process, dwarf2_ranges_process):
+	Fix zero address complaint.
 
-	* top.c (print_gdb_configuration): Print "--with-xxhash" or
-	"--without-xxhash" according to HAVE_LIBXXHASH.
+2021-08-02  Tom Tromey  <tromey@adacore.com>
 
-2019-12-18  Tom Tromey  <tromey@adacore.com>
+	PR varobj/28131
+	* varobj.c (~varobj): Delete 'dynamic' before 'root'.
 
-	PR build/25268:
-	* gdbsupport/thread-pool.c (set_thread_name): Expect "int" return
-	type on macOS.  Add comment.
+2021-08-02  Shahab Vahedi  <shahab@synopsys.com>
 
-2019-12-18  Tom Tromey  <tromey@adacore.com>
+	PR gdb/28104
+	* gdbtypes.c (gdbtypes_post_init): Use
+	"arch_boolean_type (..., unsigned=1, ...) to construct
+	"boolean".
+	cp-valprint.c (test_print_flags): New.
+	(_initialize_cp_valprint): Run the "test_print_flags" unit-test.
 
-	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.
+2021-07-28  Tom de Vries  <tdevries@suse.de>
 
-2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+	* dwarf2/read.c (attr_to_dynamic_prop): Handle DW_FORM_data16.
 
-	* jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop.
+2021-07-27  Tom de Vries  <tdevries@suse.de>
 
-2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+	PR testsuite/26904
+	* gdb/testsuite/gdb.ada/big_packed_array.exp: Add xfail.
 
-	* version.in: Set GDB version number to 9.0.90.DATE-git.
+2021-07-27  Tom de Vries  <tdevries@suse.de>
 
-2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+	PR testsuite/26903
+	* gdb/testsuite/gdb.ada/array_of_variant.exp: Add xfails.
 
-	GDB 9.0.90 released.
+2021-07-26  Frederic Cambus  <fred@statdns.com>
 
-2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+	* syscalls/netbsd.xml: Regenerate.
 
-	* version.in: Set GDB version number to 9.0.90.
+2021-07-26  Shahab Vahedi  <shahab@synopsys.com>
+	    Simon Marchi  <simon.marchi@efficios.com>
 
-2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+	PR gdb/28103
+	* valprint.c (val_print_type_code_flags): Merely shift the VAL
+	to the right to get rid of the lower bits.
+	(test_print_flags): New.
+	(_initialize_valprint): Invoke the "test_print_flags" as a unit-test.
 
-	* NEWS: Change "Changes since GDB 8.3" into "Changes in GDB 9".
+2021-07-26  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
-2019-12-11  Joel Brobecker  <brobecker@adacore.com>
+	PR gdb/28076
+	* mi/mi-cmd-break.c (mi_cmd_break_condition): Handle the case
+	of having no condition argument.
 
-	GDB 9 branch created (27f7b2f64062ac9e52afc60509263c2702a9ebd0):
-	* version.in: Bump version to 9.0.90.DATE-git.
+2021-07-20  Luis Machado  <luis.machado@linaro.org>
+	    Pedro Alves  <pedro@palves.net>
 
-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.
+	PR gdb/28110
+	* gdbarch.sh: Updated documentation for gdbarch_tagged_address_p.
+	* gdbarch.h: Regenerate.
+	* printcmd.c (should_validate_memtags): Reorder comparisons and only
+	validate tags for pointer and reference types.  Skip validation of
+	optimized out or unavailable values.
+	(print_command_1): Guard call memory tagging validation code with
+	a try/catch block.
 
-2019-12-11  Tom Tromey  <tromey@adacore.com>
+2021-07-19  Tom Tromey  <tromey@adacore.com>
 
-	* fbsd-tdep.c (fbsd_core_info_proc_status): Cast result of
-	bfd_get_signed_8.
+	PR gdb/28093
+	* language.c (auto_or_unknown_language::parser): Call error.
 
-2019-12-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-07-17  Sergey Belyashov  <Sergey.Belyashov@gmail.com>
 
-	* 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.
+	* Makefile.in (ALL_TARGET_OBS): Add z80-tdep.c.
+	* NEWS: Mention z80 support.
+	* configure.tgt: Handle z80*.
+	* features/Makefile (XMLTOC): Add z80.xml.
+	* features/z80-cpu.xml: New.
+	* features/z80.c: Generate.
+	* features/z80.xml: New.
+	* z80-tdep.c: New file.
+	* z80-tdep.h: New file.
 
-2019-12-10  Christian Biesinger  <cbiesinger@google.com>
+2021-07-13  Lancelot Six  <lsix@lancelotsix.com>
 
-	* gdbsupport/safe-strerror.c: Supress the unused function warning
-	for select_strerror_r.
+	* make-init-c: Use /bin/sh as shebang.
 
-2019-12-10  Christian Biesinger  <cbiesinger@google.com>
+2021-07-13  Pedro Alves  <pedro@palves.net>
 
-	* 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.
+	PR gdb/28080
+	* gdb_bfd.c (gdb_bfd_close_warning): New.
+	(gdb_bfd_iovec_fileio_close): Wrap target_fileio_close in
+	try/catch and print warning on exception.
+	(gdb_bfd_close_or_warn): Use gdb_bfd_close_warning.
 
-2019-12-06  Tom de Vries  <tdevries@suse.de>
+2021-07-13  Pedro Alves  <pedro@palves.net>
 
-	PR symtab/24971
-	* block.c (best_symbol, better_symbol): New function.
-	(block_lookup_symbol_primary, block_lookup_symbol): Prefer def over
-	decl.
+	PR gdb/28080
+	* remote.c (remote_unpush_target): Invalidate file I/O target
+	handles.
+	* target.c (fileio_handles_invalidate_target): Make extern.
+	* target.h (fileio_handles_invalidate_target): Declare.
 
-2019-12-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-07-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* mi/mi-main.c (mi_cmd_exec_interrupt): Use
+	scoped_disable_commit_resumed in the --thread-group case.
 
-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.
+2021-07-13  John Ericson  <git@JohnEricson.me>
 
-2019-12-05  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	* inferior.c (prune_inferiors):  Only call delete_inferior,
-	Do not modify the inferior list.
+	* sparc-tdep.h: Fix comment.
+	* netbsd-tdep.c (nbsd_info_proc_mappings_header): Fix comment.
+	(nbsd_init_abi): Fix comment.
+	* configure.tgt (*-*-netbsd* | *-*-knetbsd*-gnu): Fix netbsd
+	file name.
+	(alpha*-*-openbsd*): Likewise.
+	(sparc-*-openbsd*): Likewise.
+	(sparc64-*-openbsd*): Likewise.
 
-2019-12-05  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-07-11  Tom Tromey  <tom@tromey.com>
 
-	* 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.
+	Committed by Joel Brobecker  <brobecker@adacore.com>:
+	* gdb/symtab.c (info_sources_filter::matches): Add default
+	case hander in switch statement.
 
-2019-12-04  Christian Biesinger  <cbiesinger@google.com>
+2021-07-08  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* configure.nat (obsd64): Add missing files x86-nat.o and
-	nat/x86-dregs.o.
+	* s390-linux-tdep.c (s390_linux_init_abi_any): Pass 1 (number
+	of displaced stepping buffers to linux_init_abi.
+	* s390-tdep.c (s390_gdbarch_init): Don't set the Linux-specific
+	displaced-stepping gdbarch callbacks.
 
-2019-12-04  Tom Tromey  <tom@tromey.com>
+2021-07-08  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* Makefile.in (SUBDIRS): Remove testsuite.
 
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
+2021-07-06  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* configure.ac: Remove things that were moved from
+	testsuite/configure.ac.
+	* configure: Re-generate.
 
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-07-05  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* avr-tdep.c (_initialize_avr_tdep): Improve help of command
-	"info io_registers".
+	* config.in, configure: Re-generate.
 
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-07-04  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* regcache.c (cooked_read_test): Initialize thread list of
-	mock_inferior.
+	* solib-darwin.c (darwin_solib_create_inferior_hook): Return
+	early if no execution.
 
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-07-03  Joel Brobecker  <brobecker@adacore.com>
 
-	* aarch64-linux-tdep.c: Remove includes.
+	* version.in: Set GDB version number to 11.0.90.DATE-git.
 
-2019-12-04  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-07-03  Joel Brobecker  <brobecker@adacore.com>
 
-	* aarch64-tdep.c: Remove includes.
+	GDB 11.0.90 released.
 
-2019-12-04  Simon Marchi  <simon.marchi@efficios.com>
+2021-07-03  Joel Brobecker  <brobecker@adacore.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.
+	* version.in: Set GDB version number to 11.0.90.
 
-2019-12-04  Tom Tromey  <tromey@adacore.com>
+2021-07-03  Joel Brobecker  <brobecker@adacore.com>
 
-	* gdbtypes.c (create_range_type): Inherit endianity
-	from base type.
+	* NEWS: Replace "Changes since GDB 10" by "Changes in GDB 11".
 
-2019-12-04  Tom Tromey  <tromey@adacore.com>
+2021-07-03  Joel Brobecker  <brobecker@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.
+	GDB 11 branch created (4b51505e33441c6165e7789fa2b6d21930242927):
+	* version.in: Bump version to 11.0.90.DATE-git.
 
-2019-12-04  Tom Tromey  <tromey@adacore.com>
+2021-07-02  Tom Tromey  <tromey@adacore.com>
 
-	* gdbtypes.c (type_byte_order): Move earlier.  Assert for unknown
-	endian-ness.
+	* ada-exp.y (chop_selector, chop_separator, write_selectors)
+	(write_ambiguous_var, get_symbol_field_type): Use const.
 
-2019-12-04  Tom Tromey  <tromey@adacore.com>
+2021-07-02  Pedro Alves  <pedro@palves.net>
+	    Hannes Domani  <ssbssa@yahoo.de>
 
-	* 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.
+	* 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.
 
-2019-12-04  Tom Tromey  <tromey@adacore.com>
+2021-07-01  Pedro Alves  <pedro@palves.net>
 
-	* unittests/tui-selftests.c: Conditionally include tui-winsource.h.
+	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.
 
-2019-12-04  Tom Tromey  <tromey@adacore.com>
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* dwarf2read.c (process_structure_scope): Initialize
-	"discr_offset".
+	* 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.
 
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-12-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-06-29  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* frame.h (frame_debug): Change type to bool.
+	* frame.c (frame_debug): Change type to bool.
+	(_initialize_frame): Adjust.
 
-2019-12-01  Tom Tromey  <tom@tromey.com>
+2021-06-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.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.
+	* gdbthread.h (find_thread_ptid): Remove the duplicate declaration.
 
-2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	PR gdb/28017
+	* machoread.c (macho_symfile_offsets): Use
+	gdb_bfd_count_sections to allocate objfile::section_offsets.
 
-2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* valops.c (find_oload_champ): Improve debug output.
+	* 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.
 
-2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* valops.c (find_oload_champ): Print part of debug messages
-	before the badness vector is std::move'd.
+	* 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.
 
-2019-11-28  Tom Tromey  <tom@tromey.com>
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* value.c (creal_internal_fn): Fix comment.
+	* .flake8: New.
 
-2019-11-28  Tom Tromey  <tom@tromey.com>
+2021-06-28  Luis Machado  <luis.machado@linaro.org>
 
-	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count,
-	flag_bound_evaluated>: Now unsigned.
+	* 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.
 
-2019-11-28  Tom Tromey  <tom@tromey.com>
+2021-06-28  Luis Machado  <luis.machado@linaro.org>
 
-	* guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't
-	declare.
+	* aarch64-linux-tdep.c
+	(aarch64_linux_iterate_over_regset_sections): Fix FFR register size.
 
-2019-11-28  Mihails Strasuns  <mihails.strasuns@intel.com>
+2021-06-28  Luis Machado  <luis.machado@linaro.org>
 
-	* 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`.
+	* 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.
 
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* NEWS: Mention the new multithreaded symbol loading.
+	* 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.
 
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+2021-06-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* gdbarch.sh (struct gdbarch_info) <tdep_info>: Remove.
+	(gdbarch_find_by_info): Remove print.
+	* gdbarch.c, gdbarch.h: Re-generate.
 
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+2021-06-28  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* remote.c (remote_target::start_remote): Set 'starting_up' using
+	boolean values instead of integers.
 
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-11-27  Kevin Buettner  <kevinb@redhat.com>
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* dwarf2read.c (inherit_abstract_dies): Ensure that delayed
-	physnames are computed for inherited DIEs.
+	* 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.
 
-2019-11-27  Tom Tromey  <tromey@adacore.com>
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary
-	backslashes.
-	* cp-support.c: Remove unnecessary backslashes.
+	* cli/cli-decode.h (struct cmd_list_element) <set_context>: Add
+	assert.
 
-2019-11-27  Christian Biesinger  <cbiesinger@google.com>
+2021-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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
+	* 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.
-	(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>
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* infcall.c (call_function_by_hand_dummy): Add missing 'else' when
+	setting prototyped flag.
 
-2019-11-26  Christian Biesinger  <cbiesinger@google.com>
-	    Tom Tromey  <tom@tromey.com>
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* remote-sim.c (simulator_command): Make static, remove
-	declaration.
+	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.
 
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* dwarf-index-write.c: Include dwarf-index-write.h.
-	* mi/mi-interp.c: Include mi/mi-interp.h.
+	* guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
+	for invalid breakpoint numbers, and unsupported breakpoint
+	numbers.
 
-2019-11-26  Simon Marchi  <simon.marchi@efficios.com>
+2021-06-25  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-11-24  Simon Marchi  <simon.marchi@efficios.com>
+2021-06-25  Tom Tromey  <tromey@adacore.com>
 
-	* m68k-linux-nat.c: Include gdbarch.h.
+	* python/py-type.c (typy_get_name): Decode an Ada type name.
 
-2019-11-24  Tom Tromey  <tom@tromey.com>
+2021-06-25  Tom Tromey  <tromey@adacore.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.
+	* ada-lang.c (ada_decode): Add wrap parameter.
+	* ada-lang.h (ada_decode): Add wrap parameter.
 
-2019-11-22  Tom Tromey  <tom@tromey.com>
+2021-06-25  Luis Machado  <luis.machado@linaro.org>
 
-	* observable.h: Update comments.
+	* corelow.c (core_target::core_target) Update to read target
+	description.
 
-2019-11-22  Tom Tromey  <tromey@adacore.com>
+2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* python/lib/gdb/__init__.py: Format.
 
-2019-11-22  Christian Biesinger  <cbiesinger@google.com>
+2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* infrun.c (do_target_wait): Remove wait_ptid parameter.
+	(fetch_inferior_event): Adjust.
 
-2019-11-21  Tom Tromey  <tromey@adacore.com>
+2021-06-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* gdbsupport/format.c (format_pieces): Parse %I64d.
-	* unittests/format_pieces-selftests.c (test_windows_formats): New
-	function.
-	(run_tests): Call it.
+	* 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.
 
-2019-11-21  Peeter Joot  <peeter.joot@lzlabs.com>
+2021-06-22  Andreas Schwab  <schwab@suse.de>
 
-	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.
+	PR symtab/27999
+	* dwarf2/loc.c (decode_debug_loclists_addresses): Support
+	DW_LLE_start_end.
 
-2019-11-18  Christian Biesinger  <cbiesinger@google.com>
+2021-06-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* symtab.h (struct symbol) <owner>: Initialize explicitly in the
-	constructor instead of using a class initializer.
+	* breakpoint.c (insert_bp_location): If we catch a
+	TARGET_CLOSE_ERROR just rethrow it, the breakpoints might have
+	been deleted.
 
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+2021-06-21  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c.
+	* 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.
-	* 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.
+2021-06-17  Pedro Alves  <pedro@palves.net>
 
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+	* 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".
 
-	* gdbsupport/common-defs.h: Include time.h before pathmax.h to
-	avoid compile errors.
+2021-06-17  Pedro Alves  <pedro@palves.net>
 
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
+	* 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.
 
-	* 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.
+2021-06-16  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-11-14  Christian Biesinger  <cbiesinger@google.com>
+	* silent-rules.mk (ECHO_CCLD, ECHO_AR, ECHO_RANLIB): New.
 
-	* README (`configure' options): Update.
+2021-06-16  Tom de Vries  <tdevries@suse.de>
 
-2019-11-14  Tom Tromey  <tromey@adacore.com>
+	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.
 
-	* eval.c (evaluate_subexp_standard) <BINOP_ASSIGN>: Do not pass an
-	expected type for the RHS if the LHS is a convenience variable.
+2021-06-15  Alan Modra  <amodra@gmail.com>
 
-2019-11-14  Simon Marchi  <simon.marchi@polymtl.ca>
+	* testsuite/lib/gdb.exp (exec_is_pie): Match new PIE readelf output.
 
-	* unittests/vec-utils-selftests.c (unordered_remove_tests::obj):
-	Provide explicit default and copy constructor.
+2021-06-14  Mike Frysinger  <vapier@gentoo.org>
 
-2019-11-14  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* Makefile.in (GNULIB_BUILDDIR): Rename to ...
+	(GNULIB_PARENT_DIR): ... this.  Remove "gnulib" from value.
 
-	* python/py-finishbreakpoint.c (gdbpy_breakpoint_created):
-	only call Py_INCREF (newbp) in the bppy_pending_object case.
+2021-06-14  John Baldwin  <jhb@FreeBSD.org>
 
-2019-11-13  Tom Tromey  <tromey@adacore.com>
+	* 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.
 
-	PR build/25182:
-	* psympriv.h (partial_symbol): Remove static assert.
-	* symtab.h (general_symbol_info, symbol): Remove static assert.
+2021-06-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
-2019-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* compile/compile.c: Include missing header signal.h.
 
-	* 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.
+2021-06-12  John Baldwin  <jhb@FreeBSD.org>
 
-2019-11-12  Christian Biesinger  <cbiesinger@google.com>
+	* remote.c (remote_new_objfile): Fix indentation.
 
-	* 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.
+2021-06-11  Kevin Buettner  <kevinb@redhat.com>
 
-2019-11-11  Tom Tromey  <tom@tromey.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().
 
-	* tui/tui.c (tui_initialize_readline): Add new bindable readline
-	functions.
+2021-06-11  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-11-11  Christian Biesinger  <cbiesinger@google.com>
+	* dwarf2/loc.h (struct call_site_stuff): Remove.
 
-	* nat/linux-osdata.c (user_from_uid): Use getpwuid_r.
+2021-06-11  Tom Tromey  <tom@tromey.com>
 
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+	PR rust/23427
+	* rust-parse.c (rust_parser::lex_identifier): Handle raw
+	identifiers.
+	(rust_lex_tests): Add raw identifier tests.
 
-	* 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.
+2021-06-08  Lancelot Six  <lsix@lancelotsix.com>
 
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.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'.
 
-	* stack.c (frame_show_address): Convert return type to bool.
-	* stack.h (frame_show_address): Likewise, and update header
-	comment.
+2021-06-08  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-11-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* 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.
 
-	* 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
+2021-06-07  Pedro Alves  <pedro@palves.net>
 
-2019-11-05  Tom Tromey  <tom@tromey.com>
+	* dwarf2/read.c (struct partial_die_info): Add defaulted copy
+	ctor.
+	* symtab.h (struct symbol): Add defaulted copy assignment
+	operator.
 
-	* 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.
+2021-06-07  Pedro Alves  <pedro@palves.net>
 
-2019-11-05  Christian Biesinger  <cbiesinger@google.com>
+	* 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.
 
-	* symtab.h (gdb_static_assert): Put && operator at the beginning
-	of the line instead of the end.
+2021-06-07  Pedro Alves  <pedro@palves.net>
 
-2019-11-04  Christian Biesinger  <cbiesinger@google.com>
+	* 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.
 
-	* psympriv.h: Add static_asserts for sizeof (general_symbol_info)
-	and sizeof (symbol).
-	* symtab.h: Add a static_assert for sizeof (partial_symbol).
+2021-06-07  Pedro Alves  <pedro@palves.net>
 
-2019-11-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+	* nat/amd64-linux-siginfo.c (compat_x32_siginfo_t): Move
+	__attribute__ __aligned__ from the typedef to the struct.
 
-	* 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.
+2021-06-07  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-11-01  Tom Tromey  <tromey@adacore.com>
+	PR gdb/27847
+	* amd64-tdep.c (amd64_has_unaligned_fields): Move call to
+	type_align, and spot case where the alignment is unknown.
 
-	* utils.c (print_sys_errmsg): Simplify.
+2021-06-07  Carl Love  <cel@us.ibm.com>
 
-2019-11-01  Tom Tromey  <tromey@adacore.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.
 
-	* gdbsupport/mingw-strerror.c (safe_strerror): Constify result.
+2021-06-07  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-11-01  Christian Biesinger  <cbiesinger@google.com>
+	PR gdb/27899
+	* sparc-nat.c (sparc_fetch_inferior_registers): Set
+	inferior_ptid instead of using switch_to_thread.
+	(sparc_store_inferior_registers): Likewise.
 
-	* configure: Regenerate.
-	* configure.ac: Remove check for strerror_r.
-	* gdbsupport/common.m4: Check for strerror_r.
+2021-06-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
-2019-11-01  Luis Machado  <luis.machado@linaro.org>
+	* compile/compile.c (scoped_ignore_sigpipe): New helper class.
+	(compile_to_object): Ignore SIGPIPE before calling the plugin.
 
-	PR gdb/25124
+2021-06-05  Tom Tromey  <tom@tromey.com>
 
-	* 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.
+	* data-directory/Makefile.in (Makefile): Use correct directory
+	name.
 
-2019-10-31  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-06-05  Tom Tromey  <tom@tromey.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.
+	* data-directory/Makefile.in (Makefile): Rewrite.
 
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
+2021-06-05  Tom Tromey  <tromey@adacore.com>
 
-	* config.in: Regenerate.
+	* configure: Rebuild.
+	* configure.ac: Add ACX_NONCANONICAL_TARGET.
 
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
+2021-06-05  Shahab Vahedi  <shahab@synopsys.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.
+	* NEWS: Document 'set disassembler-options' support for the ARC
+	target.
+	* arc-tdep.c (arc_gdbarch_init): Set
+	'gdbarch_valid_disassembler_options'.
 
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+2021-06-04  Tom Tromey  <tromey@adacore.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.
+	* 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.
 
-2019-10-29  Christian Biesinger  <cbiesinger@google.com>
+2021-06-04  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* remote.c (remote_target)
+	<select_thread_for_ambiguous_stop_reply>: Add additional debug
+	output.
 
-2019-10-24  Christian Biesinger  <cbiesinger@google.com>
+2021-06-04  Hannes Domani  <ssbssa@yahoo.de>
 
-	* configure: Regenerate.
-	* configure.ac: Remove code that sets python_has_threads.
+	* python/py-tui.c (class tui_py_window): Add click function.
+	(tui_py_window::click): Likewise.
 
-2019-10-24  Christian Biesinger  <cbiesinger@google.com>
+2021-06-04  Hannes Domani  <ssbssa@yahoo.de>
 
-	* 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.
+	* 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.
 
-2019-10-24  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-06-03  Magne Hov  <mhov@undo.io>
 
-	* python/py-progspace.c (pspy_block_for_pc): Return None for all
-	error paths.
+	PR python/27841
+	* eval.c (expression::evaluate): Check inferior_ptid.
 
-2019-10-23  Tom Tromey  <tom@tromey.com>
+2021-06-03  Pedro Alves  <pedro@palves.net>
 
-	* 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.
+	* MAINTAINERS (The Official FSF-appointed GDB Maintainers): Remove
+	affiliation.
+	(Global Maintainers): Update my address.
+	(Write After Approval): Remove stale entry.
 
-2019-10-23  Tom Tromey  <tom@tromey.com>
+2021-06-03  John Baldwin  <jhb@FreeBSD.org>
 
-	* Makefile.in (READLINE_DIR): Update.
+	* 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.
 
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-06-03  Magne Hov  <mhov@undo.io>
 
-	* infcall.c (call_function_by_hand_dummy): Fix the function
-	comment.  And extract out a code section into...
-	(reserve_stack_space): ...this new function.
+	* MAINTAINERS (Write After Approval): Add Magne Hov.
 
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-06-03  Hannes Domani  <ssbssa@yahoo.de>
 
-	* infcall.c (value_arg_coerce): Remove an unused parameter.
-	(call_function_by_hand_dummy): Update the call to
-	'value_arg_coerce'.
+	* python/py-symbol.c (gdbpy_initialize_symbols): Restore
+	gdb.SYMBOL_LABEL_DOMAIN constant.
 
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-06-01  John Baldwin  <jhb@FreeBSD.org>
 
-	* infcall.c (call_function_by_hand_dummy): Refactor.
+	* infrun.c (handle_inferior_event): Only call
+	gdbarch_displaced_step_restore_all_in_ptid if
+	gdbarch_supports_displaced_stepping is true.
 
-2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+2021-06-01  Tom Tromey  <tromey@adacore.com>
 
-	* MAINTAINERS (Write After Approval): Add Tankut Baris Aktemur.
+	* Makefile.in (all-data-directory): Remove.
+	(data-directory/Makefile): Remove.
 
-2019-10-23  Tom Tromey  <tom@tromey.com>
+2021-06-01  Tom Tromey  <tromey@adacore.com>
 
 	* configure: Rebuild.
-	* configure.ac: Don't check for sigprocmask.
-	* gdbsupport/common.m4 (GDB_AC_COMMON): Check for sigprocmask.
+	* configure.ac: Use AS_HELP_STRING for enable-shared.  Fix typo.
 
-2019-10-23  Tom Tromey  <tom@tromey.com>
+2021-06-01  Tom Tromey  <tromey@adacore.com>
 
-	* configure: Rebuild.
-	* acinclude.m4: Use m4_include, not sinclude.
+	* silent-rules.mk (ECHO_CC): New variable.
 
-2019-10-23  Tom de Vries  <tdevries@suse.de>
+2021-06-01  Tom Tromey  <tromey@adacore.com>
 
-	PR breakpoints/24687
-	* symtab.c (iterate_over_some_symtabs): Apply gdb_realpath on fullname.
+	* Makefile.in (SUBDIRS): Add testsuite.
+	(all): Don't exclude testsuite.
 
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+2021-06-01  Tom Tromey  <tromey@adacore.com>
 
-	* symtab.c (struct demangled_name_entry) <language>: Change from
-	bitfield to regular variable.
+	* configure.ac: Copy some code from testsuite/configure.ac.
+	(enable_libctf): Subst this, not ENABLE_LIBCTF.
+	* configure: Rebuild.
 
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+2021-06-01  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	PR symtab/26096
+	* minsyms.c (msymbol_is_cold_clone): New function.
+	(msymbol_is_function): Use msymbol_is_cold_clone.
 
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+2021-06-01  Fredrik Hederstierna  <fredrik@hederstierna.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* Makefile.in: Link with libxxhash.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac: Search for libxxhash.
-	* utils.c (fast_hash): Use xxhash if present.
+	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.
 
-2019-10-22  Christian Biesinger  <cbiesinger@google.com>
+2021-06-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Richard Bunt  <richard.bunt@arm.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.
+	* breakpoint.c (check_longjmp_breakpoint_for_call_dummy): Add
+	check for why the backtrace stopped.
 
-2019-10-21  Tom Tromey  <tom@tromey.com>
+2021-05-31  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-winsource.h (tui_exec_info_content): Remove typedef.
+	* 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.
 
-2019-10-21  Tom Tromey  <tom@tromey.com>
+2021-05-31  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* dwarf2/read.h (signatured_type_up): New, use where possible.
 
-2019-10-20  Tom Tromey  <tom@tromey.com>
+2021-05-31  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* dwarf2/read.h (signatured_type, dwarf2_per_cu_data): Move up.
 
-2019-10-19  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-05-30  Tom Tromey  <tom@tromey.com>
 
-	* gdbsupport/common-utils.h (startswith): Change return type to
-	bool.
+	* 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.
 
-2019-10-19  Christian Biesinger  <cbiesinger@google.com>
+2021-05-30  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-10-17  Tom Tromey  <tromey@adacore.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* Fix tab after space indentation issues throughout.
 
-2019-10-15  Tom Tromey  <tromey@adacore.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* windows-nat.c (windows_nat_target::resume): Use %x when logging
-	TID.
+	* Fix some indentation mistakes throughout.
 
-2019-10-15  Tom Tromey  <tromey@adacore.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* windows-nat.c (windows_nat_target::fetch_registers)
-	(windows_nat_target::store_registers): Rename "pid" to "tid".
+	* 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.
 
-2019-10-15  Tom Tromey  <tromey@adacore.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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):
-	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>
+	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.
 
-	* dwarf2read.c: Remove includes.
+2021-05-27  Hannes Domani  <ssbssa@yahoo.de>
 
-2019-10-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* ui-out.c (ui_out::call_do_message): Silence
-	-Wformat-nonliteral warning.
+	* python/py-tui.c (tui_py_window::output): Add full_window
+	argument.
+	(gdbpy_tui_write): Parse "full_window" argument.
 
-2019-10-12  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-05-27  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.
+	* make-init-c: Add option to reverse function calls.
 
-2019-10-12  Christian Biesinger  <cbiesinger@google.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* remote.c (remote_target::get_trace_status): Remove declaration of
-	trace_regblock_size.
+	* 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.
 
-2019-10-12  Christian Biesinger  <cbiesinger@google.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* command.h (add_alias_cmd): Accept target as
+	cmd_list_element.  Update callers.
 
-2019-10-11  Jim Wilson  <jimw@sifive.com>
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* command.h (add_info_alias): Accept target as
+	cmd_list_element.  Update callers.
 
-	* riscv-tdep.c (riscv_push_dummy_code): Change %lld to %s and use
-	plongest instead of unsigned long long cast.
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-10-10  Christian Biesinger  <cbiesinger@google.com>
+	* command.h (add_com_alias): Accept target as
+	cmd_list_element.  Update callers.
 
-	* main.c (captured_main_1): Include gdbtk.h and remove declarations
-	for external_editor_command and gdbtk_test.
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-10-10  Christian Biesinger  <cbiesinger@google.com>
+	* python/py-param.c (add_setshow_generic): Use return values of
+	add_setshow functions.
 
-	* mi/mi-cmd-var.c (varobjdebug): Remove declaration.
-	* varobj.c (varobjdebug): Move comment to...
-	* varobj.h (varobjdebug): ...here, and declare.
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-10-09  Tom Tromey  <tom@tromey.com>
+	* mi/mi-main.c (_initialize_mi_main):
+	* python/py-auto-load.c (gdbpy_initialize_auto_load):
+	* remote.c (_initialize_remote):
 
-	* tui/tui-regs.c (tui_data_window::show_registers): Don't call
-	erase_data_content.
+2021-05-27  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-10-09  Tom Tromey  <tom@tromey.com>
+	* 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.
 
-	* 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.
+2021-05-27  Tom de Vries  <tdevries@suse.de>
 
-2019-10-09  Tom Tromey  <tom@tromey.com>
+	PR symtab/27919
+	* dwarf2/read.c (process_psymtab_comp_unit):
 
-	* tui/tui-wingeneral.h (struct tui_gen_win_info): Don't declare.
+2021-05-27  Tom de Vries  <tdevries@suse.de>
 
-2019-10-09  Tom Tromey  <tom@tromey.com>
+	* dwarf2/read.c (find_partial_die): Fix "Cannot not" typo in dwarf
+	error.
 
-	* tui/tui-data.c (tui_win_is_auxiliary): Remove.
-	* tui/tui-data.h (tui_win_is_auxiliary): Don't declare.
+2021-05-27  Tom de Vries  <tdevries@suse.de>
 
-2019-10-09  Tom Tromey  <tom@tromey.com>
+	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.
 
-	* 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.
+2021-05-26  Simon Marchi  <simon.marchi@efficios.com>
 
-2019-10-09  Tom Tromey  <tom@tromey.com>
+	* regcache.c (reg_buffer::reg_buffer): Default-initialize
+	m_registers array.
 
-	* tui/tui.h: Remove comments.
+2021-05-26  Tom Tromey  <tom@tromey.com>
 
-2019-10-09  Tom de Vries  <tdevries@suse.de>
+	* 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.
 
-	* python/lib/gdb/printer/bound_registers.py: Use
-	'^builtin_type_bound128' as regexp argument for
-	add_builtin_pretty_printer.
+2021-05-24  Hannes Domani  <ssbssa@yahoo.de>
 
-2019-10-09  Christian Biesinger  <cbiesinger@google.com>
+	* python/py-tui.c (tui_py_window::refresh_window):
+	Avoid flickering.
 
-	* 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.
+2021-05-23  Tom de Vries  <tdevries@suse.de>
 
-2019-10-09  Andreas Arnez  <arnez@linux.ibm.com>
+	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.
 
-	* s390-tdep.c (390_process_record): Handle new arch13 instructions
-	except SORTL, DFLTCC, and KDSA.
+2021-05-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
-2019-10-08  Tom Tromey  <tromey@adacore.com>
+	* main.c (enum cmdarg_kind): Fix option type comments for
+	CMDARG_EARLYINIT_FILE and CMDARG_EARLYINIT_COMMAND.
 
-	* windows-nat.c (struct windows_thread_info_struct) <sf>: Remove.
-	(struct safe_symbol_file_add_args): Remove.
+2021-05-21  Tom de Vries  <tdevries@suse.de>
 
-2019-10-08  Tom Tromey  <tromey@adacore.com>
+	PR testsuite/25047
+	* contrib/cc-with-tweaks.sh: Handle -l.
 
-	* windows-nat.c: Don't include buildsym-legacy.h.
+2021-05-21  Tom de Vries  <tdevries@suse.de>
 
-2019-10-08  Tom Tromey  <tromey@adacore.com>
+	PR breakpoint/27889
+	* jit.c (jit_breakpoint_re_set_internal): Skip separate debug
+	objects.  Call get_jiter_objfile_data with the_objfile.
 
-	* contrib/ari/gdb_ari.sh (%p): Allow gdb-specific %p extensions.
+2021-05-20  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-10-08  Christian Biesinger  <cbiesinger@google.com>
+	* linespec.c (linespec_p): Remove.  Replace all uses with
+	"linespec *".
 
-	* gdbtypes.c (overload_debug): Move comment to header.
-	* gdbtypes.h (overload_debug): Declare.
-	* valops.c: Remove declaration of overload_debug, instead
-	include gdbtypes.h.
+2021-05-20  Alexandra HÃ¡jkovÃ¡  <ahajkova@redhat.com>
+	    Pedro Alves  <pedro@palves.net>
 
-2019-10-08  Christian Biesinger  <cbiesinger@google.com>
+	* 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.
 
-	* 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 _().
+2021-05-20  Alexandra HÃ¡jkovÃ¡  <ahajkova@redhat.com>
 
-2019-10-07  Christian Biesinger  <cbiesinger@google.com>
+	* MAINTAINERS (Write After Approval): Add myself.
 
-	* 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.
+2021-05-19  John Baldwin  <jhb@FreeBSD.org>
 
-2019-10-07  Christian Biesinger  <cbiesinger@google.com>
+	* dwarf2/read.c (tu_abbrev_offset::operator<): Mark const.
 
-	* charset.c (your_gdb_wchar_t_is_bogus): Replace with a
-	gdb_static_assert.
+2021-05-18  Alexandra HÃ¡jkovÃ¡  <ahajkova@redhat.com>
 
-2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
+	* inflow.c (new_tty): Do not leak tty.
 
-	* ../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.
+2021-05-17  Tom Tromey  <tom@tromey.com>
 
-2019-10-07  Andrew Burgess  <andrew.burgess@embecosm.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.
 
-	* 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.
+2021-05-17  Tom Tromey  <tom@tromey.com>
 
-2019-10-07  Weimin Pan  <weimin.pan@oracle.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.
 
-	* 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.
+2021-05-17  Tom Tromey  <tom@tromey.com>
 
-2019-10-06  Joel Brobecker  <brobecker@adacore.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.
 
-	* version.in: Change version number to "9.0.50.DATE-git".
+2021-05-17  Tom Tromey  <tom@tromey.com>
 
-2019-10-03  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.
 
-	PR rust/24976:
-	* dwarf2read.c (quirk_rust_enum): Handle single-element unions.
+2021-05-17  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-10-03  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.
 
-	* f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and
-	cp_search_name_hash.
-	* NEWS: Add entry about nested function support.
+2021-05-17  Tom Tromey  <tromey@adacore.com>
 
-2019-10-03  Bernhard Heckel  <bernhard.heckel@intel.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	* dwarf2/loc.c (dwarf2_evaluate_loc_desc::get_frame_base): Throw
+	if frame is null.
 
-	* 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.
+2021-05-17  Tom Tromey  <tromey@adacore.com>
 
-2019-10-02  Tom Tromey  <tromey@adacore.com>
+	* nat/linux-osdata.c (user_from_uid, time_from_time_t)
+	(group_from_gid): Subtract one from strncpy length.
 
-	* 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.
+2021-05-17  Tom Tromey  <tromey@adacore.com>
 
-2019-10-02  Tom Tromey  <tromey@adacore.com>
+	* source.c (add_path): Check 'p' before using 'p[-1]'.
 
-	* source.c (select_source_symtab): Don't call
-	decode_line_with_current_source.
+2021-05-17  Tom Tromey  <tromey@adacore.com>
 
-2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.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.
 
-	* symtab.c (lookup_global_symbol): Search global block.
+2021-05-17  Tom Tromey  <tom@tromey.com>
 
-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.
+	* dwarf2/read.c (tu_abbrev_offset::operator<): New method.
+	(sort_tu_by_abbrev_offset): Remove.
+	(build_type_psymtabs): Update.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* py-project.toml: New.
+	* gdb-gdb.py.in: Re-format.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-stack.c (tui_locator_window::set_locator_fullname):
-	Don't call tui_locator_win_info_ptr.
+	* cli/cli-decode.h (cmd_list_element) <is_alias>: New, use it.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-win.c (tui_resize_all): Don't call refresh.
+	* 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.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* cli/cli-decode.c (add_alias_cmd): Don't handle old == 0.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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".
+	* cli/cli-decode.h (prefixname): Make const, move implementation
+	to cli/cli-decode.c.
+	* cli/cli-decode.c (cmd_list_element::prefixname): New.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-16  Weimin Pan  <weimin.pan@oracle.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.
+	* 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.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-14  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.
+	* rust-lang.c (rust_language::val_print_struct)
+	(rust_language::print_enum): Use common_val_print, not
+	value_print_inner.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
-	* tui/tui-layout.c (show_source_disasm_command)
-	(show_source_or_disasm_and_command): Don't call
-	show_source_content.
+	* 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.
 
-2019-09-20  Tom Tromey  <tom@tromey.com>
+2021-05-14  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-09-20  Tom Tromey  <tromey@adacore.com>
+2021-05-14  Kent Cheung  <kent.cheung@arm.com>
 
-	PR ada/24919:
-	* block.c (contained_in): Fix final return value.
+	* 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.
 
-2019-09-20  Alan Modra  <amodra@gmail.com>
+2021-05-14  Mike Frysinger  <vapier@gentoo.org>
 
-	* 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.
+	* remote-sim.c: Change gdb/callback.h & gdb/remote-sim.h includes to
+	sim/callback.h & sim/sim.h.
 
-2019-09-18  Tom Tromey  <tom@tromey.com>
+2021-05-13  Mike Frysinger  <vapier@gentoo.org>
 
-	* 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.
+	* lm32-tdep.c: Delete gdb/callback.h, gdb/remote-sim.h, and
+	sim-regno.h include.
 
-2019-09-11  Ali Tamur  <tamur@google.com>
+2021-05-13  Simon Marchi  <simon.marchi@efficios.com>
 
-	*gdb/target-float.c (host_float_ops<T>::to_longest): Update
-	implementation.
+	* inf-child.h (inf_child_target) <follow_exec>: New.
+	* inf-child.c (inf_child_target::follow_exec): New.
 
-2019-09-11  Christian Biesinger  <cbiesinger@google.com>
+2021-05-13  Simon Marchi  <simon.marchi@efficios.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"
+	* target.h (struct target_ops) <follow_exec>: Add ptid_t
 	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.
+	(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.
 
-2019-09-06  Christian Biesinger  <cbiesinger@google.com>
+2021-05-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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):
+	* cli/cli-decode.h (struct cmd_list_element) <pre_show_hook>:
 	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.
+	* cli/cli-setshow.c (do_show_command): Adjust.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-13  Luis Machado  <luis.machado@linaro.org>
 
-	* tui/tui-io.c (tui_cont_sig): Don't call wrefresh.
+	* arch/aarch64-mte-linux.c (aarch64_mte_get_tag_granules): Don't
+	include the last address in the range.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-12  Markus Metzger  <markus.t.metzger@intel.com>
 
-	* tui/tui-layout.c (show_layout): Don't call tui_refresh_all.
+	* btrace.c (handle_pt_insn_events): Ignore status update enable
+	events.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-11  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Don't
-	call touchwin.
+	* arm-tdep.c (arm_record_data_proc_misc_ld_str): Fix
+	indentation.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-11  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-wingeneral.c (box_win): Assume win_info and
-	win_info->handle cannot be NULL.
+	* cli/cli-decode.h (struct cmd_list_element): Fix indentation.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-10  Lancelot Six  <lsix@lancelotsix.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.
+	PR gdb/27614
+	* contrib/gdb-add-index.sh: Fix when called with a symlink as an
+	argument.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-10  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* nat/linux-waitpid.c (status_to_str): Show signal name.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-09  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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".
+	* target-descriptions.c (struct target_desc_info) <fetched>:
+	bool.
+	(target_find_description): Adjust.
+	(target_clear_description): Adjust.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-08-30  Tom Tromey  <tom@tromey.com>
+2021-05-07  Simon Marchi  <simon.marchi@efficios.com>
 
-	* tui/tui-regs.c (tui_data_window::display_all_data): Change
-	text.
-	* tui/tui-data.h (NO_DATA_STRING): Remove define.
+	* target.c (target_stack::unpush): Call target_ops::find_beneath
+	to get the target beneath `t`.
 
-2019-08-29  Bernhard Wodok  <barto@gmx.net>
-	    Sergio Durigan Junior  <sergiodj@redhat.com>
+2021-05-07  Simon Marchi  <simon.marchi@efficios.com>
 
-	PR win32/24284
-	* mingw-hdep.c (gdb_select): Handle case when 'n' is zero.
+	* target.c (target_close): Check in all inferiors that the
+	target is not pushed.
 
-2019-08-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-05-07  Aaron Merey  <amerey@redhat.com>
 
-	* symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols
-	when searching for types.
+	* debuginfod-support.c (debuginfod_init): Remove.
+	(get_debuginfod_client): New function.
 
-2019-08-28  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-05-07  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-08-27  Christian Biesinger  <cbiesinger@google.com>
+2021-05-07  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* nat/linux-namespaces.c (mnsh_main): Initialize fd (to -1).
+	* Re-format all Python files using black.
 
-2019-08-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-05-07  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.
+	* 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.
 
-2019-08-20  Tom Tromey  <tom@tromey.com>
+2021-05-06  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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
+	* inferior.h (class inferior) <args>: Change type to
 	unique_xmalloc_ptr.
-	(tui_get_register): Update.
-	(~tui_data_item_window): Remove.
-	(tui_data_window::display_registers_from, tui_display_register):
+	* 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.
-	* tui/tui-io.h (tui_expand_tabs): Update.
-	* tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr.
-	Remove "col" parameter.
+	(read_comp_units_from_section): Add types_htab, section_kind
+	parameters.
+	(create_all_comp_units): Read type units.
 
-2019-08-20  Tom Tromey  <tom@tromey.com>
+2021-04-30  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.
+	* 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.
 
-2019-08-20  Tom Tromey  <tom@tromey.com>
+2021-04-30  Tom Tromey  <tromey@adacore.com>
 
-	* tui/tui-regs.c (tui_register_format, tui_get_register): Move
-	earlier.
+	* nat/windows-nat.h (GenerateConsoleCtrlEvent): New define.
+	(GenerateConsoleCtrlEvent_ftype, GenerateConsoleCtrlEvent):
+	Declare.
+	* nat/windows-nat.c (GenerateConsoleCtrlEvent): Define.
+	(initialize_loadable): Initialize GenerateConsoleCtrlEvent.
 
-2019-08-20  Tom Tromey  <tom@tromey.com>
+2021-04-30  Tom Tromey  <tromey@adacore.com>
 
-	* tui/tui-regs.c (tui_reg_command): Remove NULL check.
+	* 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.
 
-2019-08-20  Tom Tromey  <tom@tromey.com>
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-08-20  Conrad Meyer  <cem@FreeBSD.org>
+2021-04-28  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* remote.c (remote_target::remote_btrace_maybe_reopen): Avoid
-	unnecessary thread walk if remote doesn't support the packet.
+	* 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.
 
-2019-08-19  Tom Tromey  <tromey@adacore.com>
+2021-04-27  Luis Machado  <luis.machado@linaro.org>
 
-	* python/py-value.c (value_has_field): Fix indentation.
+	* 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.
 
-2019-08-19  Tom Tromey  <tromey@adacore.com>
+2021-04-27  Michael Weghorn  <m.weghorn@posteo.de>
+	    Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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>
 
-2019-08-19  Tom Tromey  <tom@tromey.com>
+	* sparc-linux-nat.c (sparc_linux_nat_target): fix sparc build
+	by passing `process_stratum_target*` parameter.
 
-	* 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.
+2021-04-25  Lancelot Six  <lsix@lancelotsix.com>
 
-2019-08-16  Tom Tromey  <tom@tromey.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.
 
-	* 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.
+2021-04-22  Tom Tromey  <tom@tromey.com>
 
-2019-08-15  Tom Tromey  <tom@tromey.com>
+	* c-typeprint.c (c_type_print_base_struct_union): Use
+	print_spaces_filtered_with_print_options.
 
-	* 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.
+2021-04-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-08-15  Tom Tromey  <tom@tromey.com>
+	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.
 
-	* 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>
+2021-04-21  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	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.
 
-2019-08-15  Tom Tromey  <tom@tromey.com>
+2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
-	* tui/tui-stack.c (tui_make_status_line): Use string constructor.
+	* 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.
 
-2019-08-15  Tom Tromey  <tom@tromey.com>
+2021-04-17  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>:
+	* 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.
 
-2019-08-15  Tom Tromey  <tom@tromey.com>
+2021-04-17  Tom Tromey  <tom@tromey.com>
 
-	* tui/tui-wingeneral.h (tui_make_window): Update.
-	* tui/tui-wingeneral.c (tui_make_window): Remove "box_it"
+	* 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.
-	(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>
+2021-04-17  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.
+	* 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.
 
-2019-08-13  Tom Tromey  <tom@tromey.com>
+2021-04-17  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):
+	* symtab.c (default_collect_symbol_completion_matches_break_on):
 	Update.
-	(tui_clear_exec_info_content): Remove.
+	* 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.
 
-2019-08-13  Tom Tromey  <tom@tromey.com>
+2021-04-15  Tom Tromey  <tom@tromey.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-08-13  Tom Tromey  <tom@tromey.com>
+2021-04-15  Andrew Burgess  <andrew.burgess@embecosm.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.
+	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.
 
-2019-08-13  Tom Tromey  <tromey@adacore.com>
+2021-04-15  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* tracepoint.c: Don't include readline.h or history.h.
+	* 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.
 
-2019-08-12  Tom Tromey  <tom@tromey.com>
+2021-04-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
-	* configure: Rebuild.
-	* configure.ac: Check for readline 7.
-	* NEWS: Mention readline 7 requirement.
-	* README: Update.
+	* 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.
 
-2019-08-12  Tom Tromey  <tom@tromey.com>
+2021-04-13  Tom de Vries  <tdevries@suse.de>
 
-	* mingw-hdep.c (gdb_select): Remove readline hack.
+	* ui-style.c (read_semi_number, extended_color): Change idx parameter
+	type to regoff_t *.
 
-2019-08-09  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+2021-04-13  Luis Machado  <luis.machado@linaro.org>
 
-	* blockframe.c (find_pc_partial_function): Set *block to nullptr
-	when the function fails.
+	* rs6000-tdep.c (ppc_displaced_step_fixup): Use %s to print
+	hex values.
 
-2019-08-09  Andreas Arnez  <arnez@linux.ibm.com>
+2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>
 
-	* s390-tdep.c (s390_type_align): New function.
-	(s390_gdbarch_init): Set it as type_align gdbarch method.
+	* rs6000-tdep.c:  Add support for single-stepping of
+	prefixed instructions.
 
-2019-08-09  Tom de Vries  <tdevries@suse.de>
+2021-04-12  Will Schmidt  <will_schmidt@vnet.ibm.com>
 
-	PR gdb/24591
-	* dwarf2read.c (dwarf2_fetch_die_loc_sect_off): Adjust pc_high and
-	pc_low with relocation offset.
+	PR gdb/27525
+	* gdb/rs6000-tdep.c (ppc_displaced_step_fixup): Update to
+	handle the addpcis/lnia instruction.
 
-2019-08-07  Tom Tromey  <tromey@adacore.com>
+2021-04-05  Will Schmidt  <will_schmidt@vnet.ibm.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.
+	* MAINTAINERS (Write After Approval): Add myself.
 
-2019-08-05  Christian Biesinger  <cbiesinger@google.com>
+2021-4-12  Carl Love  <cel@us.ibm.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.
+	* rs6000-tdep.c (rs6000_builtin_type_vec128): Add t_float128 variable.
+	(rs6000_builtin_type_vec128): Add append_composite_type_field for
+	float128.
 
-2019-08-02  Alexandre Oliva <oliva@adacore.com>
+2021-04-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* nat/windows-nat.c: Remove all code guarded by _WIN32_WCE.
+	* nat/windows-nat.h: Likewise.
 
-2019-07-27  Kevin Buettner  <kevinb@redhat.com>
+2021-04-10  Eli Zaretskii  <eliz@gnu.org>
 
-	* 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.
+	* 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.
 
-2019-07-27  Kevin Buettner  <kevinb@redhat.com>
+2021-04-09  Luis Machado  <luis.machado@linaro.org>
 
-	* infrun.c (fill_in_stop_func): Use find_pc_partial_function
-	instead of find_function_entry_range_from_pc.
+	* nat/aarch64-mte-linux-ptrace.c: Update include file order.
 
-2019-07-27  Kevin Buettner  <kevinb@redhat.com>
+2021-04-08  Dominique Quatravaux  <dominique.quatravaux@epfl.ch>
 
-	* 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.
+	* darwin-nat.c (darwin_nat_target::resume): Remove status
+	variable.
 
-	* dwarf2-frame.c (dwarf2_frame_cache): Don't decode FDE instructions
-	for entry pc when entry pc is out of range for that FDE.
+2021-04-08  Felix Willgerodt  <felix.willgerodt@intel.com>
 
-2019-07-26  Brian Callahan  <bcallah@openbsd.org>
+	* 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.
 
-	PR gdb/24839:
-	* gdb/obsd-nat.c (obsd_nat_target::pid_to_str): Fix typo in return
-	type.
+2021-04-08  Felix Willgerodt  <felix.willgerodt@intel.com>
 
-2019-07-25  Christian Biesinger  <cbiesinger@google.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.
 
-	* python/py-objfile.c (add_separate_debug_file): Fix comment about
-	this function's Python signature.
+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.
 
-2019-07-24  Christian Biesinger  <cbiesinger@google.com>
+2021-04-07  Weimin Pan  <weimin.pan@oracle.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.
+	* 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>
 
-2019-07-24  Yoshinori Sato  <ysato@users.sourceforge.jp>
+	* 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.
 
-	* 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.
+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.
 
-2019-07-23  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* valops.c (value_cast): Call value_deeply_equal before performing
+	any cast.
 
-2019-07-22  Tom Tromey  <tom@tromey.com>
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* tui/tui-win.c (tui_win_info::make_invisible_and_set_new_height):
-	Don't self-assign.
+	* gdbtypes.c (types_equal): Move pointer equality check earlier in
+	the function.
 
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-04-07  Caroline Tice  <cmtice@google.com>
 
-	* c-typeprint.c (c_print_typedef): Pass -1 instead of 0 to
-	type_print.
+	* dwarf2/read.c (try_open_dwop_file): Add path for the binary to
+	the search paths used resolve relative location of .dwo file.
 
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-04-07  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.
+	* 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.
 
-2019-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-04-07  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.
+	* 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.
 
-2019-07-21  Christian Biesinger  <cbiesinger@google.com>
+2021-04-06  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	PR breakpoints/25884
+	* infcmd.c (prepare_one_step): Using inline frame info to narrow
+	stepping range.
 
-2019-07-20  Christian Biesinger  <cbiesinger@google.com>
+2021-04-06  Tom de Vries  <tdevries@suse.de>
 
-	* MAINTAINERS (Write After Approval): Add self.
+	PR tui/27680
+	* tui/tui-disasm.c (len_without_escapes): Pass ptr pointing at escape
+	to style.parse.
 
-2019-07-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-04-04  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* riscv-tdep.c (riscv_push_dummy_code): Write a 4-byte nop
-	instruction to the dummy code region.
+	* avr-tdep.c (avr_frame_unwind_cache): Use
+	trad_frame_saved_reg::is_addr.
 
-2019-07-19  Tom Tromey  <tromey@adacore.com>
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* contrib/ari/gdb_ari.sh: Mention C++11, not ISO C 90.
-	(ARGSUSED, PARAMS, __func__): Remove rules.
+	* objfiles.c (get_objfile_bfd_data): Remove objfile parameter,
+	adjust callers.
 
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* 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.
 
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* arm-tdep.c (_initialize_arm_tdep): Add xml regression tests.
+	* psymtab.c (partial_symtab::partial_symtab): Change
+	last_objfile_name to be an std::string.
+	* symfile.c (allocate_symtab): Likewise.
 
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+2021-04-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* objfiles.h (struct objfile_per_bfd_storage) <intern>: New
+	methods.
+	(struct objfile) <intern>: Use
+	objfile::objfile_per_bfd_storage::intern.
 
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+2021-04-01  Simon Marchi  <simon.marchi@efficios.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.
+	* gdbtypes.h (TYPE_FLAG_ENUM): Remove, replace all uses
+	with type::is_flag_enum.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-04-01  Simon Marchi  <simon.marchi@efficios.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.
+	* 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.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
 
-	* tui/tui-layout.c (make_data_window): Remove.
-	(show_data): Unify creation and re-initialization cases.
+	* gdbtypes.h (TYPE_DECLARED_CLASS): Remove, replace all uses
+	with type::is_declared_class.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
 
-	* tui/tui-layout.c (make_source_window, make_disasm_window):
-	Remove.
-	(show_data): Unify creation and re-initialization cases.
+	* 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.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-02-28  Boris Staletic  <boris.staletic@gmail.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.
+	* gdb/python/lib/gdb/__init__.py: Use importlib on python 3.4+
+	to avoid deprecation warnings.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-04-01  Martin Liska  <mliska@suse.cz>
 
-	* tui/tui-layout.c (show_source_or_disasm_and_command): Unify
-	creation and re-initialization cases.
+	* 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.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-31  Tom Tromey  <tom@tromey.com>
 
-	* tui/tui-regs.c (tui_get_register): Return void.
+	* 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.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-31  Tom Tromey  <tromey@adacore.com>
 
-	* tui/tui-wingeneral.c (tui_gen_win_info::make_visible):
-	Simplify.
+	* dwarf2/stringify.h: Fix typo.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-30  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-layout.c (show_source_disasm_command): Simplify window
-	resetting.
+	PR gdb/27541
+	* dwarf2/read.c (dwarf2_has_info): Don't share dwarf2_per_bfd
+	with objfiles using READNOW.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-29  Tom Tromey  <tromey@adacore.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.
+	* top.c (check_frame_language_change): Update.
+	* language.c (language_info): Remove parameter.
+	* language.h (language_info): Remove parameter.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-29  Luis Machado  <luis.machado@linaro.org>
 
-	* tui/tui-layout.h (tui/tui-layout): Return void.
-	* tui/tui-layout.c (tui_set_layout): Return void.  Add assert.
+	* compile/compile.c (get_args): Don't add empty argv entries.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
-	* tui/tui-layout.c (show_source_disasm_command, show_data):
-	Update.
-	(reset_locator): Remove.
-	(show_source_or_disasm_and_command): Update.
+	gdb:
+	* procfs.c (procfs_target::attach): Define inf.
+	Use it.
+	(procfs_target::create_inferior): Likewise.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-28  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.
+	* 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.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-27  Tom Tromey  <tom@tromey.com>
 
-	* tui/tui-layout.c (tui_set_layout): Remove regs_populate
-	variable.
+	* elfread.c (elf_sym_fns_lazy_psyms): Don't declare.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-27  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.
+	* elfread.c (elf_symfile_read): Don't clear 'qf'.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-26  Lancelot Six  <lsix@lancelotsix.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.
+	* contrib/gdb-add-index.sh: Avoid variable shadowing and get
+	rid of 'local'.
 
-2019-07-17  Tom Tromey  <tom@tromey.com>
+2021-03-26  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
+	* 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.
-
-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"
+	* 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.
-	(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>
+	(mi_cmd_file_list_exec_source_files): Update.
+	* dwarf2/read.c
+	(dwarf2_base_index_functions::map_symbol_filenames): Update.
 
-	* 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.
+2021-03-26  Tom Tromey  <tom@tromey.com>
 
-2019-07-10  Tom Tromey  <tromey@adacore.com>
+	* ada-lang.c (struct match_data): Add operator().
+	(match_data::operator()): Rename from aux_add_nonlocal_symbols.
+	(callback): Remove 'callback'.
 
-	* 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.
+2021-03-26  Tom Tromey  <tom@tromey.com>
 
-2019-07-10  Tom Tromey  <tromey@adacore.com>
+	* psymtab.c (psymbol_functions::expand_symtabs_matching): Only
+	call make_ignore_params once.
 
-	* valops.c (value_cast): Specialize error message for Ada.
+2021-03-26  Tom Tromey  <tom@tromey.com>
 
-2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
+	* psymtab.c (psymbol_functions::expand_symtabs_matching): Remove
+	"user" check.
 
-	* breakpoint.c (breakpoint_1): Update doc and parameter names.
+2021-03-26  Simon Marchi  <simon.marchi@efficios.com>
+	    Pedro Alves  <pedro@palves.net>
 
-2019-07-10  Simon Marchi  <simon.marchi@polymtl.ca>
+	* 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.
 
-	* 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.
+2021-03-25  Pedro Alves  <pedro@palves.net>
 
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
+	* gdb.server/bkpt-other-inferior.exp: Only enable remote output
+	around setting the breakpoint.
 
-	* 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.
+2021-03-25  Pedro Alves  <pedro@palves.net>
 
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
+	* 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.
 
-	* arm-linux-nat.c (arm_linux_nat_target::read_description): Check
-	ptrace earlier.
+2021-03-24  Keith Seitz  <keiths@redhat.com>
 
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
+	* compile/compile-cplus-types.c
+	(compile_cplus_convert_struct_or_union): Fix TYPE_DECLARED_CLASS
+	thinko.
 
-	* features/aarch64-pauth.c: Regenerate.
+2021-03-24  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-07-09  Simon Marchi  <simon.marchi@polymtl.ca>
+	* gdbarch.sh (gdbarch_data_registry): Make static.
+	* gdbarch.c: Re-generate.
 
-	* breakpoint.h (struct bpstat_what) <is_longjmp>: Change type to
-	bool.
-	(bpstat_what): Use false instead of 0.
+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.
 
-2019-07-09  Pedro Alves  <palves@redhat.com>
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
 
-	* 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.
+	* aarch64-linux-tdep.c
+	(aarch64_linux_iterate_over_regset_sections): Handle MTE register set.
+	* aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_MTE_REGSET): Define.
 
-2019-07-09  Tom Tromey  <tom@tromey.com>
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
 
-	* 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.
+	* 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.
 
-2019-07-03  Pedro Alves  <palves@redhat.com>
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
 
-	* 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"
+	* 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.
-	(ada_lookup_encoded_symbol, ada_lookup_symbol_nonlocal): Update.
-
-2019-06-28  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR breakpoints/24541
+	* 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: 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>
+	* 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.
 
-	* minsyms.c (lookup_minimal_symbol_solib_trampoline): Remove.
-	* minsyms.h (lookup_minimal_symbol_solib_trampoline): Don't
-	declare.
+2021-03-24  Luis Machado  <luis.machado@linaro.org>
 
-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.
+	* 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.
 
-2019-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-03-23  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.
+	* target.h (target_longname): Remove.
 
-2019-06-25  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* cli/cli-cmds.c (alias_command): Compare the alias prefix
-	with the command prefix.
+	* target.h (target_is_pushed): Remove, update callers to use
+	inferior::target_is_pushed instead.
+	* target.c (target_is_pushed): Remove.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-wingeneral.c (tui_delete_win): Remove "return".
-	* tui/tui-data.c (~tui_gen_win_info): Remove "if".
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* tui/tui-layout.c (init_and_make_win): Assert on unrecognized
-	type.
-	* tui/tui-data.h (struct tui_gen_win_info): Make constructor
-	protected.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-22  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-22  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* objfiles.h (struct objfile) <psymtabs>: Remove method.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-	* tui/tui-win.c (tui_source_window_base::update_tab_width): New
+	* psymtab.c (psymbol_functions::count_psyms): Rename.
+	(psymbol_functions::print_stats): Update.
+	* psympriv.h (struct psymbol_functions) <count_psyms>: Declare
 	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>
+2021-03-20  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"
+	* 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.
-	(tui_gen_win_info::make_visible): Update.
-	* tui/tui-layout.c (init_and_make_win): Change type of "box_it"
+	(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.
-	* tui/tui-data.h (enum tui_box): New enum.
-	(BOX_WINDOW, DONT_BOX_WINDOW): Remove defines.
+	(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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-	* tui/tui-winsource.c
-	(tui_source_window_base::do_scroll_horizontal): Remove direction
+	* dwarf2/read.c (dwarf2_create_include_psymtab): Add per_bfd
 	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.
+	(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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-	* tui/tui-wingeneral.c (make_visible): Remove check of window
-	type.
+	* dwarf2/read.c (dwarf2_build_psymtabs): Set partial_symtabs
+	earlier.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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
+	* 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.
-	(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.
+	<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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* 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.
 
-2019-06-25  Tom Tromey  <tom@tromey.com>
+2021-03-20  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.
+	* 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.
 
-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.
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-2019-06-14  Tom Tromey  <tromey@adacore.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.
 
-	* ada-lang.c (ada_evaluate_subexp) <case BINOP_ASSIGN>: Always
-	allow assignment to an internalvar.
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-2019-06-14  Tom Tromey  <tromey@adacore.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.
 
-	* ada-lex.l: Allow "_" in attribute names.
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-2019-06-14  Tom Tromey  <tromey@adacore.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.
 
-	PR gdb/24653:
-	* regcache.c (registers_changed): Don't call alloca.
-	* top.c (execute_command): Don't call alloca.
+2021-03-20  Tom Tromey  <tom@tromey.com>
 
-2019-06-13  Pedro Alves  <palves@redhat.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.
 
-	* 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.
+2021-03-19  Pedro Alves  <pedro@palves.net>
 
-2019-06-13  Pedro Alves  <palves@redhat.com>
+	* thread.c (any_thread_of_inferior): Check if there's a selected
+	thread before calling inferior_thread().
 
-	* 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.
+2021-03-18  Tom Tromey  <tromey@adacore.com>
 
-2019-06-13  Pedro Alves  <palves@redhat.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.
 
-	* 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".
+2021-03-18  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-06-13  Pedro Alves  <palves@redhat.com>
+	* python/py-param.c (get_set_value): Update header comment.
 
-	* 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.
+2021-03-17  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-06-13  Pedro Alves  <palves@redhat.com>
+	* infrun.c (check_multi_target_resumption): Remove argument to
+	all_non_exited_inferiors.
 
-	* 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.
+2021-03-16  Christian Biesinger  <cbiesinger@google.com>
 
-2019-06-13  Pedro Alves  <palves@redhat.com>
+	* windows-nat.c (windows_init_thread_list): Add message to
+	debug log.
 
-	* completer.c (advance_to_completion_word): Handle delimiters.
+2021-03-16  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-06-11  Bernhard Heckel  <bernhard.heckel@intel.com>
+	* python/py-framefilter.c (py_print_frame): Use PyInt_Check as
+	well as PyLong_Check for Python 2.
 
-	* dwarf2read.c (add_partial_symbol): Skip nameless modules.
+2021-03-15  Tom Tromey  <tromey@adacore.com>
 
-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.
+	PR build/27579:
+	* rust-exp.y (maker_map): Use gdb::hash_enum.
+	* stap-probe.c (stap_maker_map): Use gdb::hash_enum.
 
-2019-05-30  Tom Tromey  <tromey@adacore.com>
+2021-03-15  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count>:
-	Fix comment.
-	(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): Rewrite comment.
+	* dwarf2/read.c (create_debug_type_hash_table): Remove colon at
+	end of debug print.
 
-2019-05-30  Jan Vrany  <jan.vrany@fit.cvut.cz>
+2021-03-15  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	PR cli/24587
-	* completer.c (complete): Initialize variable word.
+	* dwarf2/read.c (dw2_get_file_names_reader): Remove info_ptr
+	parameter, adjust caller.
 
-2019-05-29  Sergio Durigan Junior  <sergiodj@redhat.com>
+2021-03-15  Tom Tromey  <tromey@adacore.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.
+	* ada-exp.y (simple_exp): Always push a result for unary '+'.
 
-2019-05-29  Tom Tromey  <tromey@adacore.com>
+2021-03-15  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.
+	* ada-lang.c (ada_unop_ind_operation::evaluate): Call
+	ada_ensure_varsize_limit.
 
-2019-05-29  Tom Tromey  <tromey@adacore.com>
+2021-03-15  Tom Tromey  <tromey@adacore.com>
 
-	PR c++/20020:
-	* cp-valprint.c (cp_print_value_fields): Call
-	cp_print_static_field inside "try".
+	* 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.
 
-2019-05-29  Tom Tromey  <tromey@adacore.com>
+2021-03-15  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.
+	PR ada/27545:
+	* ada-lang.c (ada_var_value_operation::evaluate): Use recursive
+	call for tagged type.
 
-2019-05-29  Tom Tromey  <tromey@adacore.com>
+2021-03-15  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.
+	* ada-exp.y (exp1): Handle resolution of the right hand side of an
+	assignment.
 
-2019-05-28  Tom Tromey  <tromey@adacore.com>
+2021-03-15  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.
+	* 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.
 
-2019-05-22  Alan Hayward  <alan.hayward@arm.com>
+2021-03-15  Felix Willgerodt  <felix.willgerodt@intel.com>
 
-	* aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat
-	DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets.
+	* i386-tdep.c (i386_floatformat_for_type): Add COMPLEX*32 and REAL*16.
 
-2019-05-22  Alan Hayward  <alan.hayward@arm.com>
+2021-03-15  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* NEWS: Add debugredirect and testsuite sections.
+	* python/python.c (gdbpy_source_objfile_script): Use
+	make_scoped_restore to restore gdbpy_current_objfile.
+	(gdbpy_execute_objfile_script): Likewise.
 
-2019-05-22  Simon Cook  <simon.cook@embecosm.com>
+2021-03-14  Tom Tromey  <tom@tromey.com>
 
-	* riscv-tdep.c (riscv_gdbarch_init): Support determining flen from
-	target descriptions using exclusively floating point register name
-	aliases.
+	* dwarf2/read.c (read_attribute_value): Use cu_header
+	consistently.
 
-2019-05-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-14  Tom Tromey  <tom@tromey.com>
 
-	PR gdb/18644:
-	* f-lang.c (build_fortran_types): Handle the case where
-	gdbarch_floatformat_for_type returns a nullptr.
+	* dwarf2/read.c (struct die_reader_specs) <abfd>: Fix formatting.
+	(peek_die_abbrev): Use reader.abfd.
 
-2019-05-21  Tom de Vries  <tdevries@suse.de>
+2021-03-14  Tom Tromey  <tom@tromey.com>
 
-	PR cli/24587
-	* cli/cli-cmds.c (complete_command): Fix use of unitialized variable.
+	* dwarf2/read.c (dwarf2_per_cu_data::get_header): Set
+	m_header_read_in.
 
-2019-05-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-13  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-05-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-13  Tom Tromey  <tom@tromey.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.
+	* dwarf2/abbrev.c (abbrev_table::read): Remove Irix 6 workaround.
 
-2019-05-17  Tom Tromey  <tromey@adacore.com>
+2021-03-12  Christian Biesinger  <cbiesinger@google.com>
 
-	* source.c (find_and_open_source): Remove cast.
+	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.
 
-2019-05-17  Tom Tromey  <tromey@adacore.com>
+2021-03-10  Tom Tromey  <tromey@adacore.com>
 
-	* annotate.c (annotate_source): Make "filename" const.
-	* annotate.h (annotate_source): Use const.
+	* 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.
 
-2019-05-17  Alan Hayward  <alan.hayward@arm.com>
+2021-03-09  Tom Tromey  <tromey@adacore.com>
 
-	* disasm.c (set_disassembler_options): Send errors to stderr.
+	* eval.c (operation::evaluate_funcall): Use function formal
+	parameter types when evaluating.
 
-2019-05-17  Alan Hayward  <alan.hayward@arm.com>
+2021-03-09  Andrew Burgess  <andrew.burgess@embecosm.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
+	* 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.
-	* 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):
+	(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.
-	* 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>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* parse.c (expression::expression, expression::~expression):
+	Remove.
+	* expression.h (struct expression): Inline constructor.  Remove
+	destructor.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* objc-lang.c (objc_objfile_data): Change type.
-	(find_methods): Update.
-	(_initialize_objc_lang): Remove.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* stabsread.c (rs6000_builtin_type_data): Change type.
-	(rs6000_builtin_type, _initialize_stabsread): Update.
+	* expression.h (enum exp_opcode) <OP_UNUSED_LAST>: Remove.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* mips-tdep.c (mips_pdr_data): Remove.
-	(_initialize_mips_tdep): Update.
+	* std-operator.def (OP_EXTENDED0): Remove.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* std-operator.def (OP_NAME, OP_ATR_IMAGE, OP_ATR_MODULUS)
+	(OP_OTHERS, OP_CHOICES, OP_POSITIONAL, OP_DISCRETE_RANGE):
+	Remove.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* std-operator.def (UNOP_CAP, UNOP_CHR, UNOP_ORD, UNOP_FLOAT)
+	(UNOP_MAX, UNOP_MIN, UNOP_ODD, UNOP_TRUNC, OP_M2_STRING): Remove.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* mdebugread.c (basic_type_data): Change type.
-	(basic_type, _initialize_mdebugread): Update.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* common/gdb_unique_ptr.h (struct noop_deleter): New.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* f-exp.y: Create operations.
+	(f_language::parser): Update.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* m2-exp.y: Create operations.
+	(m2_language::parser): Update.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* p-exp.y: Create operations.
+	(pascal_language::parser): Update.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* d-exp.y: Create operations.
+	(d_parse): Update.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* go-exp.y: Create operations.
+	(go_language::parser): Update.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* 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.
 
-2019-05-08  Tom Tromey  <tom@tromey.com>
+2021-03-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):
+	* 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.
-
-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
+	* 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.
 
-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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-08  Tom Tromey  <tromey@adacore.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.
 
-	* dwarf2loc.c (dwarf2_evaluate_property) <PROP_ADDR_OFFSET>:
-	Compare main types.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-06  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_structop_operation::evaluate): New method.
+	* ada-exp.h (class ada_structop_operation): New.
 
-	* common/scoped_mmap.c: Include common-defs.h.
-	* common/scoped_mmap.h: Don't include config.h.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_unop_ind_operation::evaluate): New method.
+	* ada-exp.h (class ada_unop_ind_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Simon Marchi  <simon.marchi@efficios.com>
-	    Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_binop_exp): No longer static.
+	* ada-exp.h (ada_binop_exp_operation): New typedef.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  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.
 
-	* arc-tdep.c (arc_tdesc_init): Return bool.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_pos_atr): No longer static.
+	* ada-exp.h (ada_pos_operation): New typedef.
 
-	* arm-linux-nat.c (arm_linux_nat_target::can_use_hw_breakpoint):
-	Use gdb_assert_not_reached.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_pos_atr): Rename from value_pos_atr.  Change
+	parameters.
+	(ada_evaluate_subexp): Use it.
 
-	* compile/compile-cplus-types.c (compile_cplus_convert_enum): Use
-	"false".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  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.
 
-	* arc-tdep.c (arc_tdesc_init): Use bool.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  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.
 
-	* stack.c (select_frame_for_mi): Use "false", not "FALSE".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  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.
 
-	* cli/cli-cmds.c (valid_command_p): Return bool.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_unop_atr_operation::evaluate): New method.
+	* ada-exp.h (class ada_unop_atr_operation): New.
 
-	* cli/cli-decode.c (valid_user_defined_cmd_name_p): Return bool.
-	* command.h (valid_user_defined_cmd_name_p): Channge return type.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Raul Tambre  <raul@tambre.ee>
+	* ada-lang.c (ada_binop_in_bounds): No longer static.
+	* ada-exp.h (class ada_binop_in_bounds_operation): New.
 
-	* python/lib/gdb/prompt.py (_ExtendedPrompt)
-	<before_prompt_hook, get_show_string>: Fix incorrect use of 'is'
-	operator for comparison.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-05-04  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (ada_ternop_slice): No longer static.
+	* ada-exp.h (class ada_ternop_slice_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* 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.
+	* ada-exp.h (ada_bitwise_operation): New template class.
+	(ada_bitwise_and_operation, ada_bitwise_ior_operation)
+	(ada_bitwise_xor_operation): New typedefs.
 
-2019-05-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* rust-lang.c (val_print_struct): Handle printing structures
-	containing strings.
+	* ada-lang.c (ada_equal_binop): No longer static.
+	* ada-exp.h (class ada_binop_equal_operation): New.
 
-2019-05-02  Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* valarith.c (_initialize_valarith): Remove.
+	* 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.
 
-2019-05-01  Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* ada-lang.c (ada_value_primitive_field): Treat more fields as
-	bitfields.
+	* ada-lang.c (ada_binop_addsub_operation::evaluate): New method.
+	* ada-exp.h (class ada_binop_addsub_operation): New.
 
-2019-05-01  Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* ada-lang.c (ada_value_assign): Correctly compute starting offset
-	for big-endian copies.
+	* 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.
 
-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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Joel Brobecker  <brobecker@adacore.com>
+	* opencl-lang.c (opencl_ternop_cond_operation::evaluate): New
+	method.
+	* c-exp.h (class opencl_ternop_cond_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Joel Brobecker  <brobecker@adacore.com>
+	* opencl-lang.c (opencl_logical_binop_operation::evaluate): New
+	method.
+	* c-exp.h (class opencl_logical_binop_operation): New.
 
-	* windows-nat.c (get_windows_debug_event) <EXIT_PROCESS_DEBUG_EVENT>:
-	Use current_event.dwThreadId instead of main_thread_id.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Tom Tromey  <tromey@adacore.com>
+	* opencl-lang.c (opencl_structop_operation::evaluate): New
+	method.
+	* c-exp.h (class opencl_structop_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Tom Tromey  <tromey@adacore.com>
+	* opencl-lang.c (opencl_logical_not): No longer static.  Change
+	parameters.
+	(evaluate_subexp_opencl): Update.
+	* c-exp.h (opencl_notequal_operation): New typedef.
 
-	PR c++/24470:
-	* dwarf2read.c (process_structure_scope): Handle case where type
-	has template parameters but no symbol was created.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.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.
 
-	* f-typeprint.c (f_type_print_base): Print 'allocatable' type
-	qualifier.
-	* gdbtypes.h (TYPE_IS_ALLOCATABLE): Define.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* opencl-lang.c (opencl_value_cast): No longer static.
+	* c-exp.h (opencl_cast_type_operation): New typedef.
 
-	* f-typeprint.c (f_print_type): Update rules for printing
-	whitespace.
-	(f_type_print_varspec_suffix): Likewise.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
+	* f-exp.h (eval_op_f_allocated): Declare.
+	(fortran_allocated_operation): New typedef.
+	* f-lang.c (eval_op_f_allocated): No longer static.
 
-	* f-typeprint.c (f_type_print_varspec_suffix): Handle printing
-	function arguments.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* f-lang.c (eval_op_f_associated): New functions.
+	* f-exp.h (fortran_associated_1arg, fortran_associated_2arg): New
+	typedefs.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.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.
 
-	* dwarf2read.c (dwarf2_init_complex_target_type): Use different
-	types for Fortran.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
-	    David Lecomber  <david.lecomber@arm.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.
 
-	* 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
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-30  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* rust-lang.c (rust_structop::evaluate_funcall): New method.
+	* rust-exp.h (class rust_structop) <evaluate_funcall>: Declare
+	method.
 
-	* 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>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-04-25  Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	PR gdb/24475:
-	* event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt"
+	* m2-lang.c (eval_op_m2_high, eval_op_m2_subscript): No longer
 	static.
+	* m2-exp.h: New file.
 
-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>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* rust-lang.c (rust_aggregate_operation::evaluate): New method.
+	* rust-exp.h (class rust_aggregate_operation): New.
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* vax-tdep.c (vax_unwind_pc): Delete.
-	(vax_gdbarch_init): Don't register deleted function with gdbarch.
+	* 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.
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* rust-lang.c (rust_range): No longer static.
+	* rust-exp.h (class rust_range_operation): New.
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* rust-lang.c (rust_subscript): No longer static.
+	* rust-exp.h (class rust_subscript_operation): New.
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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>
+	* 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.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.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.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.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.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* ada-lang.c (ada_ternop_range_operation::evaluate): New method.
+	* ada-exp.h (class ada_ternop_range_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* ada-lang.c (ada_qual_operation::evaluate): New method.
+	* ada-exp.h (class ada_qual_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* ada-lang.c (ada_string_operation::evaluate): New method.
+	* ada-exp.h (class ada_string_operation): New.
 
-	* m68hc11-tdep.c (m68hc11_unwind_pc): Delete.
-	(m68hc11_unwind_sp): Delete.
-	(m68hc11_gdbarch_init): Don't register deleted functions with
-	gdbarch.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* ada-lang.c (ada_wrapped_operation::evaluate): New method.
+	* ada-exp.h: New file.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* expop.h (class multi_subscript_operation): New.
+	* eval.c (multi_subscript_operation::evaluate): New method.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* eval.c (objc_msgcall_operation::evaluate): New method.
+	* c-exp.h (class objc_msgcall_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.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.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* expop.h (cxx_cast_ftype): New typedef.
+	(cxx_cast_operation): New template.
+	(dynamic_cast_operation, reinterpret_cast_operation): New
+	typedefs.
 
-	* nds32-tdep.c (nds32_type_align): Delete.
-	(nds32_push_dummy_call): Use type_align instead.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* expop.h (class unop_cast_type_operation): New.
+	* ax-gdb.c (unop_cast_type_operation::do_generate_ax): New
+	method.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* expop.h (class unop_cast_operation): New.
+	* ax-gdb.c (unop_cast_operation::do_generate_ax): New method.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Tom Tromey  <tromey@adacore.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.
 
-	* dwarf2read.c (line_header::file_name_at): Remove unused
-	overload.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-23  Tom de Vries  <tdevries@suse.de>
+	* expop.h (class assign_operation): New.
+	* ax-gdb.c (assign_operation::do_generate_ax): New method.
 
-	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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-19  Sergei Trofimovich <siarheit@google.com>
+	* expop.h (class type_instance_operation): New.
+	* eval.c (type_instance_operation::evaluate): New method.
 
-	* configure.ac: add --enable-source-highlight switch.
-	* configure: Regenerate.
-	* top.c (print_gdb_version): plumb --enable-source-highlight
-	status to "show configuration".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-19  Tom Tromey  <tromey@adacore.com>
+	* expop.h (class op_this_operation): New.
+	* ax-gdb.c (op_this_operation::do_generate_ax): New method.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-19  Ilya Yu. Malakhov  <malakhov@mcst.ru>
+	* 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.
 
-	PR symtab/24423:
-	* source.c (print_source_lines_base): Advance "iter" when a
-	control character is seen.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-19  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* expop.h (class unop_alignof_operation): New.
+	* eval.c (eval_op_alignof): No longer static.
 
-	* inferior.h (struct infcall_suspend_state_deleter):
-	Catch exception in destructor to avoid crash.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-19  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* expop.h (class unop_sizeof_operation): New.
+	* ax-gdb.c (unop_sizeof_operation::do_generate_ax): New method.
 
-	* cli/cli-cmds.c (_initialize_cli_cmds): Move "shell" "!" alias
-	close to the add_com "shell".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-18  Tom Tromey  <tromey@adacore.com>
+	* expop.h (class unop_addr_operation): New.
+	* ax-gdb.c (gen_expr_unop) <case UNOP_ADDR>: New.
 
-	* process-stratum-target.h (class process_stratum_target)
-	<stratum>: Add "final".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-17  Tom Tromey  <tromey@adacore.com>
+	* expop.h (class typeid_operation): New.
 
-	* dwarf2read.c (dwarf2_init_complex_target_type): Check "tt"
-	against nullptr before use.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-17  Alan Hayward  <alan.hayward@arm.com>
+	* expop.h (class decltype_operation): New.
 
-	* nat/linux-waitpid.c (linux_debug): Call debug_vprintf.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-17  Jim Wilson  <jimw@sifive.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	* expop.h (class typeof_operation): New.
 
-	* riscv-tdep.c (riscv_breakpoint_kind_from_pc): Hanndle case where
-	code read might fail, assume 4-byte breakpoint in that case.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-15  Leszek Swirski  <leszeks@google.com>
+	* expop.h (class type_operation): New.
+	* eval.c (eval_op_type): No longer static.
 
-	* amd64-tdep.c (amd64_classify_aggregate): Use cp_pass_by_reference
-	rather than a hand-rolled POD check when checking for forced MEMORY
-	classification.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-15  Alan Hayward  <alan.hayward@arm.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.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-15  Alan Hayward  <alan.hayward@arm.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.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-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.
+	* 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.
 
-2019-04-09  Simon Marchi  <simon.marchi@efficios.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* infcmd.c (run_command_1): Pass -qualified to tbreak when using
-	the "start" command.
+	* ax-gdb.c (comma_operation::do_generate_ax): New method.
 
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* python/py-infthread.c (thpy_thread_handle): New function.
-	(thread_object_methods): Register thpy_thread_handle.
+	* 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.
 
-2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* gdbthread.h (thread_to_thread_handle): Declare.
-	* thread.c (gdbtypes.h): Include.
-	(thread_to_thread_handle): New function.
+	* expop.h (class subscript_operation): New.
+	* eval.c (eval_op_subscript): No longer static.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* 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.
+	* 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.
 
-2019-04-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* expop.h (class sub_operation): New.
+	* eval.c (eval_op_sub): No longer static.  Remove "op" parameter.
+	(evaluate_subexp_standard): Update.
 
-2019-04-08  Tom Tromey  <tom@tromey.com>
+2021-03-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.
+	* expop.h (class add_operation): New.
+	* eval.c (eval_op_add): No longer static.  Remove "op" parameter.
+	(evaluate_subexp_standard): Update.
 
-2019-04-08  Tom Tromey  <tom@tromey.com>
+2021-03-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"
+	* expop.h (class concat_operation): New.
+	* eval.c (eval_op_concat): No longer static.  Remove "op"
 	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.
+	(evaluate_subexp_standard): Update.
 
-2019-04-04  Tom Tromey  <tom@tromey.com>
+2021-03-08  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.
+	* expop.h (class structop_member_operation)
+	(class structop_mptr_operation): New.
+	* eval.c (eval_op_member): No longer static.
 
-2019-04-04  Tom Tromey  <tom@tromey.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* rust-exp.y (rustyylex, rust_lex_tests): Update.
-	* parser-defs.h (struct parser_state) <parser_state>: Add new
+	* expop.h (class structop_ptr_operation): New.
+	* eval.c (eval_op_structop_ptr): No longer static.  Remove "op"
 	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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-04  Tom Tromey  <tom@tromey.com>
+	* expop.h (class structop_base_operation)
+	(class structop_operation): New.
+	* eval.c (eval_op_structop_struct): No longer static.
 
-	* parser-defs.h (increase_expout_size): Don't declare.
-	* parse.c (increase_expout_size): Now static.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-04  Thomas Schwinge  <thomas@codesourcery.com>
+	* expop.h (class complex_operation): New.
 
-	* gnu-nat.c (gnu_nat_target::wait): Fix
-	target_waitstatus_to_string call.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* eval.c (eval_op_objc_selector): No longer static.
+	* c-exp.h (class objc_selector_operation): New.
 
-	* eval.c (evaluate_subexp_standard): Handle internal functions
-	during Fortran function call handling.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* eval.c: Include c-exp.h.
+	* c-exp.h (class objc_nsstring_operation): New.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-01  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* c-lang.c (c_string_operation::evaluate): New method.
+	* c-exp.h: New file.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-01  Tom Tromey  <tromey@adacore.com>
+	* expop.h (class ternop_cond_operation): New.
+	* ax-gdb.c (ternop_cond_operation::do_generate_ax): New method.
 
-	PR symtab/23331:
-	* dwarf2read.c (partial_die_info::read): Handle DW_AT_ranges.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-04-01  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Pedro Alves  <palves@redhat.com>
+	* expop.h (class ternop_slice_operation): New.
+	* eval.c (eval_op_ternop): No longer static.
 
-	* top.c (quit_force): Call 'finalize_values'.
-	* value.c (finalize_values): New function.
-	* value.h (finalize_values): Declare.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-30  Eli Zaretskii  <eliz@gnu.org>
+	* expop.h (class string_operation): New.
+	* eval.c (eval_op_string): No longer static.
 
-	* NEWS: Announce $_gdb_major and $_gdb_minor.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* top.c (init_gdb_version_vars): New function.
-	(gdb_init): Call init_gdb_version_vars.
+	* expop.h (class internalvar_operation): New.
+	* ax-gdb.c (internalvar_operation::do_generate_ax): New method.
 
-2019-03-29  Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* printcmd.c (_initialize_printcmd): Add usage lines.  Update some
-	help text.  Remove dead code.
+	* expop.h (class bool_operation): New.
 
-2019-03-29  Keith Seitz  <keiths@redhat.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* expop.h (class register_operation): New.
+	* eval.c (eval_op_register): No longer static.
+	* ax-gdb.c (register_operation::do_generate_ax): New method.
 
-2019-03-29  Keith Seitz  <keiths@redhat.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* expop.h (class last_operation): New.
 
-2019-03-28  Jon Turney  <jon.turney@dronecode.org.uk>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* windows-nat.c (display_selector): Fixed format specifications
-	for 64-bit Cygwin.
+	* expop.h (class func_static_var_operation): New.
+	* eval.c (eval_op_func_static_var): No longer static.
 
-2019-03-28  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* infrun.c (follow_exec): Call target_terminal::ours_for_output.
+	* expop.h (class var_entry_value_operation): New.
+	* eval.c (eval_op_var_entry_value): No longer static.
 
-2019-03-28  Sandra Loosemore  <sandra@codesourcery.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-03-28  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* aarch64-tdep.c (aarch64_vnv_type): Use vector types.
+	* expop.h (class long_const_operation): New.
+	* ax-gdb.c (long_const_operation::do_generate_ax): New method.
 
-2019-03-28  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* features/aarch64-sve.c (create_feature_aarch64_sve): Add q view.
+	* 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.
 
-2019-03-24  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	    Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* minsyms.c (minimal_symbol_upper_bound): Fix buffer overflow.
+	* expprint.c (float_const_operation::dump): New method.
+	* expop.h (float_data): New typedef.
+	(class float_const_operation): New.
 
-2019-03-26  Joel Brobecker  <brobecker@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* expop.h (gen_expr_binop, gen_expr_structop): Declare.
+	* ax-gdb.c (gen_expr_binop): New function.
+	(gen_expr_structop): Likewise.
 
-2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* cp-valprint.c (cp_print_value_fields): Don't print trailing
-	whitespace when pretty printing is on.
+	* 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.
 
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* ppc-linux-nat.c: Add include.
+	* 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.
 
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* NEWS: Mention AArch64 Pointer Authentication.
+	* ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter.
+	(gen_expr_binop_rest): New overload.
 
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* arm-linux-nat.c: Add include.
+	* eval.c (eval_multi_subscript): New function.
+	(evaluate_subexp_standard): Use it.
 
-2019-03-25  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* source-cache.c (source_cache::get_source_lines): Re-read
-	fullname after calling open_source_file.
+	* ada-lang.c (ada_binop_exp): New function.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-25  John Baldwin  <jhb@FreeBSD.org>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* NEWS: Mention TLS support for FreeBSD.
+	* ada-lang.c (ada_val_atr): Rename from value_val_atr.  Change
+	parameters.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-25  Tom Tromey  <tromey@adacore.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* ada-lang.c (ada_binop_minmax): New function.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-25  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* s390-linux-nat.c: Add include.
+	* ada-lang.c (ada_unop_atr): New function.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-25  Alan Hayward  <alan.hayward@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* ada-lang.c (ada_binop_in_bounds): New function.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* ada-lang.c (ada_ternop_slice): New function.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* ada-lang.c (ada_equal_binop): New function.
+	(ada_evaluate_subexp): Use it.
 
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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>
+	* ada-lang.c (ada_mult_binop): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* arch/aarch64.h (AARCH64_PAUTH_REGS_SIZE): New define.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
+	* ada-lang.c (ada_abs): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
+	* ada-lang.c (ada_atr_size): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
+	* ada-lang.c (ada_atr_tag): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Alan Hayward  <alan.hayward@arm.com>
+	* ada-lang.c (ada_unop_in_range): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* arm-linux-nat.c (arm_linux_insert_hw_breakpoint1): Fix
-	variable names.
-	(arm_linux_remove_hw_breakpoint1): Use a gdb::function_view.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Pedro Alves  <palves@redhat.com>
-	    Eli Zaretskii <eliz@gnu.org>
+	* ada-lang.c (ada_unop_neg): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* tui/tui-out.c (tui_ui_out::tui_ui_out): Fix initialization of
-	m_line and m_start_of_line.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Eli Zaretskii  <eliz@gnu.org>
+	* ada-lang.c (eval_ternop_in_range): New function.
+	(ada_evaluate_subexp): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Tom Tromey  <tromey@adacore.com>
+	* opencl-lang.c (eval_opencl_assign): New function.
+	(evaluate_subexp_opencl): Use it.
 
-	* minsyms.c (minimal_symbol_reader::install): Remove call to
-	obstack_blank.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Pedro Alves  <palves@redhat.com>
+	* eval.c (eval_op_objc_msgcall): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Hannes Domani  <ssbssa@yahoo.de>
+	* eval.c (eval_binop_assign_modify): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* tui/tui-source.c (copy_source_line): Fix handling of 'column'.
-	Handle tabs.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-18  Tom Tromey  <tromey@adacore.com>
+	* m2-lang.c (eval_op_m2_subscript): New function.
+	(evaluate_subexp_modula2): Use it.
 
-	* ada-lang.c (empty_array): Add "high" parameter.
-	(ada_evaluate_subexp): Update.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-17  Sergei Trofimovich <siarheit@google.com>
+	* m2-lang.c (eval_op_m2_high): New function.
+	(evaluate_subexp_modula2): Use it.
 
-	* unittests/string_view-selftests.c: Define
-	_initialize_string_view_selftests unconditionally.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-17  Vladimir Martyanov  <vilgeforce@gmail.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.
 
-	PR gdb/24350
-	* windows-nat.c (windows_make_so): Remove unused text_vma variable.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-17  Vladimir Martyanov  <vilgeforce@gmail.com>
+	* rust-lang.c (eval_op_rust_structop): New function.
+	(rust_evaluate_subexp): Use it.
 
-	PR gdb/24351
-	* windows-nat.c (display_selector): Fix format specifiers.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-17  Eli Zaretskii  <eliz@gnu.org>
+	* rust-lang.c (eval_op_rust_struct_anon): New function.
+	(rust_evaluate_subexp): Use it.
 
-	* 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".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-16  Eli Zaretskii  <eliz@gnu.org>
+	* rust-lang.c (eval_op_rust_array): New function.
+	(rust_evaluate_subexp): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-16  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* rust-lang.c (eval_op_rust_complement): New function.
+	(rust_evaluate_subexp): Use it.
 
-	* auto-load.c (_initialize_auto_load): Fix 'This options has'.
-	linux-thread-db.c (_initialize_thread_db): Likewise.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-16  Eli Zaretskii  <eliz@gnu.org>
+	* rust-lang.c (eval_op_rust_ind): New function.
+	(rust_evaluate_subexp): Use it.
 
-	* tui/tui-winsource.c (tui_show_source_line): Revert "Use
-	wclrtoeol in tui_show_source_line".  This reverts changes made in
-	commit 4a3045920bbe4e50a0f4920b0fdc4e88ef23015c.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* rust-lang.c (rust_subscript): Change parameters.
+	(rust_evaluate_subexp): Update.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* rust-lang.c (rust_range): Change parameters.
+	(rust_evaluate_subexp): Update.
 
-	* minsyms.c (minimal_symbol_reader::install): Use memcpy.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* f-lang.c (eval_op_f_allocated): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* f-lang.c (fortran_require_array): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* f-lang.c (eval_op_f_kind): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* f-lang.c (eval_op_f_cmplx): New function.
+	(evaluate_subexp_f): Use it.
 
-	* minsyms.c (minimal_symbol_reader::record_full): Remove some
-	initializations.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-15  Tom Tromey  <tom@tromey.com>
+	* f-lang.c (eval_op_f_modulo): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-14  Tom Tromey  <tromey@adacore.com>
+	* f-lang.c (eval_op_f_floor): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-13  Simon Marchi  <simon.marchi@ericsson.com>
+	* f-lang.c (eval_op_f_ceil): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* f-lang.c (eval_op_f_mod): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* f-lang.c (eval_op_f_abs): New function.
+	(evaluate_subexp_f): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_type): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_postdec): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_postinc): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_predec): New file.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (lookup_struct_elt_type): Update comment and
-	remove disabled code block.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_preinc): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_memval): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* target.h (target::get_thread_local_address): Update comment.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_alignof): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* solib-svr4.c (svr4_fetch_objfile_link_map): Look for
-	objfile->separate_debug_objfile_backlink if not NULL.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_ind): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
+	* eval.c (eval_op_lognot): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-11  Tom Tromey  <tromey@adacore.com>
+	* eval.c (eval_op_complement): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* dwarf2read.c (dwarf2_find_containing_comp_unit): Remove
-	redundant assignment to "this_cu".
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_neg): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type): Remove unnecessary cases from switch.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_plus): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_set): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_repeat): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_struct): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_leq): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_complex): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_geq): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_float): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_gtr): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_bool): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_less): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_range): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_notequal): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_char): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_equal): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_enum): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_subscript): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_int): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_binary): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_func): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_sub): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_array): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Simon Marchi  <simon.marchi@efficios.com>
+	* eval.c (eval_op_add): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* gdbtypes.c (rank_one_type_parm_ptr): New function extracted
-	from...
-	(rank_one_type): ... this.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-02-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* eval.c (eval_op_member): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* inferior.c (initialize_inferiors): Ensure 'help set/show print
-	inferior-events' shows the example events.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-08  Eli Zaretskii  <eliz@gnu.org>
+	* eval.c (eval_op_structop_ptr): New function.
+	(evaluate_subexp_standard): Use it.
 
-	Support styling on native MS-Windows console
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	PR/24315
-	* utils.c (can_emit_style_escape) [_WIN32]: Don't disable styling
-	on MS-Windows if $TERM is not defined.
+	* eval.c (eval_op_structop_struct): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* cli/cli-style.c: Set cli_styling to 1 in the MinGW build.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* 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.
+	* eval.c (eval_op_ternop): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* ui-file.c (stdio_file::puts): Call gdb_console_fputs, and fall
-	back to fputs only if the former returns zero.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-07  Tom Tromey  <tom@tromey.com>
+	* eval.c (eval_op_concat): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-06  Tom Tromey  <tom@tromey.com>
+	* eval.c (eval_op_objc_selector): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* remote.c (remote_target::remote_parse_stop_reply): Use
-	unique_xmalloc_ptr.
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-2019-03-06  Tom Tromey  <tom@tromey.com>
+	* eval.c (eval_op_string): New function.
+	(evaluate_subexp_standard): Use it.
 
-	* 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>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* f-lang.c (build_fortran_types): Use TYPE_CODE_CHAR for character
-	types.
+	* eval.c (eval_op_register): New function.
+	(evaluate_subexp_standard): Use it.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* eval.c (eval_op_func_static_var): New function.
+	(evaluate_subexp_standard): Use it.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* f-exp.y (convert_to_kind_type): Handle more type kinds.
+	* eval.c (eval_op_var_msym_value): New function.
+	(evaluate_subexp_standard): Use it.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Chris January  <chris.january@arm.com>
+2021-03-08  Tom Tromey  <tom@tromey.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.
+	* eval.c (eval_op_var_entry_value): New function.
+	(evaluate_subexp_standard): Use it.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-08  Tom Tromey  <tom@tromey.com>
 
-	* f-exp.y (f_parse): Set yydebug.
+	* eval.c (eval_op_scope): New function.
+	(evaluate_subexp_standard): Use it.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-06  Chernov Sergey  <klen_s@mail.ru>
 
-	* 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.
+	PR gdb/27528:
+	* ada-lang.c (ada_fold_name): Use gdb::to_string.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-06  Tom Tromey  <tom@tromey.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.
+	* 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.
 
-2019-03-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-03-06  Tom Tromey  <tom@tromey.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.
+	* debuginfod-support.h: Include scoped_fd.h.
 
-2019-03-06  Tom Tromey  <tromey@adacore.com>
+2021-03-06  Tom Tromey  <tom@tromey.com>
 
-	* remote-sim.c (gdbsim_target_open): Use result of
-	gdb_argv::release.
+	* 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.
 
-2019-03-06  Richard Bunt  <richard.bunt@arm.com>
-	Dirk Schubert  <dirk.schubert@arm.com>
-	Chris January  <chris.january@arm.com>
+2021-03-06  Tom Tromey  <tom@tromey.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>
+	* 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.
 
-	* target.c (the_dummy_target): Move later.  Change type to
-	"dummy_target".
-	(initialize_targets): Don't initialize the_dummy_target.
+2021-03-06  Tom Tromey  <tom@tromey.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.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.
 
-	* gdb_bfd.c (gdb_bfd_fdopenr): Remove.
-	* gdb_bfd.h (gdb_bfd_fdopenr): Don't declare.
+2021-03-06  Tom Tromey  <tom@tromey.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.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.
 
-	* 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.
+2021-03-06  Weimin Pan  <weimin.pan@oracle.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.com>
+	* ctfread.c (ctf_psymtab_add_enums): New function.
+	(ctf_psymtab_type_cb): call ctf_psymtab_add_enums.
 
-	* 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.
+2021-03-06  Weimin Pan  <weimin.pan@oracle.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.com>
+	* ctfread.c (read_func_kind_type): Set up function arguments.
 
-	* remote.c (class scoped_remote_fd) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.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.
 
-	* macroexp.c (struct macro_buffer) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
+2021-03-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+	    Craig Blackmore  <craig.blackmore@embecosm.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.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.
 
-	* nat/linux-btrace.c (linux_enable_bts, linux_enable_pt): Update.
-	* common/scoped_mmap.h (class scoped_mmap) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
+2021-03-05  Craig Blackmore  <craig.blackmore@embecosm.com>
+	    Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.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.
 
-	* common/scoped_fd.h (class scoped_fd) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
+2021-03-05  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-03-05  Tom Tromey  <tromey@adacore.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.
 
-	* parser-defs.h (struct parser_state) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
+2021-03-04  Tom Tromey  <tromey@adacore.com>
 
-2019-03-05  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.
 
-	* utils.h (class gdb_argv) <release>: Add
-	ATTRIBUTE_UNUSED_RESULT.
-	* common/common-defs.h (ATTRIBUTE_UNUSED_RESULT): Define.
+2021-03-02  Tom Tromey  <tromey@adacore.com>
 
-2019-03-02  Eli Zaretskii  <eliz@gnu.org>
+	* 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.
 
-	* xml-syscall.c (xml_list_syscalls_by_group): Drop 'struct' from
-	for-loop range, to avoid compiler warnings.
+2021-03-02  Tom Tromey  <tromey@adacore.com>
 
-	* tui/tui.c (tui_enable) [__MINGW32__]: Don't declare 'cap', to
-	avoid compiler warnings about unused variables.
+	* 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.
 
-	* NEWS: Mention end of support for native debugging on MS-Windows
-	before XP.
+2021-02-25  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	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.
+	* f-exp.y (fortran_operators): Add ".xor.".
 
-2019-03-01  Gary Benson <gbenson@redhat.com>
+2021-02-24  Tom de Vries  <tdevries@suse.de>
 
-	* coffread.c (coff_start_symtab): Remove unnecessary xstrdup.
+	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.
 
-2019-02-28  Brian Vandenberg  <phantall@gmail.com>
-	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+2021-02-24  Kevin Buettner  <kevinb@redhat.com>
 
-	PR gdb/8527
-	* procfs.c (proc_wait_for_stop): Wrap write of PCWSTOP in
-	set_sigint_trap, clear_sigint_trap.
+	* nat/aarch64-linux-hw-point.c: Add comment regarding include
+	order for <sys/ptrace.h> and <asm/ptrace.h>.
 
-2019-02-27  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-02-24  Kevin Buettner  <kevinb@redhat.com>
 
-	* target.c (target_detach): Clear the regcache and the
-	frame cache.
+	* nat/aarch64-linux-hw-point.c: Include <asm/ptrace.h> after
+	<sys/ptrace.h>.
 
-2019-02-27  Pedro Alves  <palves@redhat.com>
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* utils.c (set_screen_size): When we cap the height/width sizes,
-	tweak the corresponding command variable to show "unlimited":
+	* exec.c (set_section_command): Move variable declarations into
+	the function body, and use std::string instead of a fixed size
+	buffer.
 
-2019-02-27  Saagar Jha  <saagar@saagarjha.com>
-	    Pedro Alves  <palves@redhat.com>
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* utils.c (set_screen_size): Reduce "infinite" rows and columns
-	before calling rl_set_screen_size.
+	* 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.
 
-2019-02-27  Tom Tromey  <tromey@adacore.com>
+2021-02-24  Andrew Burgess  <andrew.burgess@embecosm.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.
+	* 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.
 
-2019-02-27  Kevin Buettner  <kevinb@redhat.com>
+2021-02-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* NEWS: Note minimum Python version.
+	* linux-nat.c (linux_nat_filter_event): Return void.
 
-2019-02-27  Kevin Buettner  <kevinb@redhat.com>
+2021-02-22  Tom Tromey  <tromey@adacore.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.
+	* 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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* gdb/hppa-tdep.c (hppa_dummy_id): Delete.
-	(hppa_gdbarch_init): Don't register deleted functions with
-	gdbarch.
+	* thread.c (add_thread_silent): Add assert.
+	(find_thread_ptid): Add assert.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-19  Kevin Buettner  <kevinb@redhat.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.
+	* nat/amd64-linux-siginfo.c: Include "gdbsupport/common-defs.h"
+	(which in turn includes <gnulib/config.h>) before include
+	of <signal.h>.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-19  Nelson Chu  <nelson.chu@sifive.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.
+	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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-18  Tom Tromey  <tom@tromey.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.
+	* expression.h (struct expression) <evaluate>: Declare method.
+	* eval.c (evaluate_subexp): Simplify.
+	(expression::evaluate): New method.
+	(evaluate_expression, evaluate_type): Use expression::evaluate.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-17  Kevin Buettner  <kevinb@redhat.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.
+	* ada-lang.c (ada_fold_name): Check for non-empty string prior
+	to accessing it.
+	(ada_lookup_name_info): Likewise.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-13  Mike Frysinger  <vapier@gentoo.org>
 
-	* 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.
+	* aclocal.m4: Regenerate.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-12  Tom de Vries  <tdevries@suse.de>
 
-	* gdb/bfin-tdep.c (bfin_dummy_id): Delete.
-	(bfin_unwind_pc): Delete.
-	(bfin_gdbarch_init): Don't register deleted functions with gdbarch.
+	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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-12  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.
+	* 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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-11  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-11  Alan Modra  <amodra@gmail.com>
 
-	* gdb/alpha-tdep.c (alpha_dummy_id): Delete.
-	(alpha_unwind_pc): Delete.
-	(alpha_gdbarch_init): Don't register deleted functions with
-	gdbarch.
+	* 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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-10  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.
+	* 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.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-09  Tom Tromey  <tom@tromey.com>
 
-	* gdbtypes.c (type_align): Don't consider static members when
-	computing structure alignment.
+	* stap-probe.c (stap_parse_argument_conditionally): Fix typo.
 
-2019-02-27  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-09  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	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().
 
-2019-02-26  Kevin Buettner  <kevinb@redhat.com>
+2021-02-08  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* NEWS: Mention two argument form of gdb.Value constructor.
-	* python/py-value.c (convert_buffer_and_type_to_value): New
+	* python/py-tui.c (gdbpy_tui_window) <is_valid>: New member
 	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.
+	(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.
 
-2019-02-25  Tom Tromey  <tromey@adacore.com>
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
 
-	* solib-darwin.c (darwin_get_dyld_bfd): Don't release dyld_bfd.
+	* 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.
 
-2019-02-23  Sergio Durigan Junior  <sergiodj@redhat.com>
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
 
-	* gcore.in: Add '--readnever' option when invoking GDB.
+	* tui/tui-regs.c (tui_data_item_window::rerender): Don't call
+	n_spaces with a negative value.
 
-2019-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
 
-	* MAINTAINERS: Update my email address.
+	* tui/tui-regs.c (tui_data_window::display_registers_from):
+	Add refresh_window call.
 
-2019-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-02-07  Hannes Domani  <ssbssa@yahoo.de>
 
-	* build-id.c (build_id_to_debug_bfd_1): New function.
-	(build_id_to_debug_bfd): Look for separate debug file in
-	sysroot.
+	* python/py-frame.c (frapy_richcompare): Compare frame_id_is_next.
 
-2019-02-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-05  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* gdbarch.sh: Update the copyright year range that is placed into
-	generated files.
+	* symmisc.c (std_in, std_out, std_err): Remove.
+	(_initialize_symmisc): Don't set std_in, std_out and std_err.
 
-2019-02-22  Keith Seitz  <keiths@redhat.com>
+2021-02-05  Tom de Vries  <tdevries@suse.de>
 
-	PR symtab/23853
-	* linespec.c (create_sals_line_offset): Search for the default
-	symtab's filename instead of its fullname.
+	PR breakpoints/27330
+	* breakpoint.c (create_exception_master_breakpoint): Handle case that
+	glibc object file has debug info.
 
-2019-02-21  Alan Hayward  <alan.hayward@arm.com>
+2021-02-05  Tom de Vries  <tdevries@suse.de>
 
-	* NEWS: Update style defaults.
+	PR symtab/27333
+	* dwarf2/read.c (process_psymtab_comp_unit): Handle DW_TAG_type_unit.
 
-2019-02-21  Alan Hayward  <alan.hayward@arm.com>
+2021-02-05  Tom de Vries  <tdevries@suse.de>
 
-	* main.c (captured_main_1): Disable styling in batch mode.
+	PR breakpoints/27313
+	* break-catch-syscall.c (catch_syscall_split_args): Reject negative
+	syscall numbers.
 
-2019-02-20  Tom Tromey  <tom@tromey.com>
+2021-02-05  Tom Tromey  <tom@tromey.com>
 
-	* symtab.c (symtab_symbol_info): Fix typos.
+	* 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.
 
-2019-02-20  Tom Tromey  <tromey@adacore.com>
+2021-02-05  Tom Tromey  <tom@tromey.com>
 
-	* findcmd.c (_initialize_mem_search): Use upper case for
-	metasyntactic variables.
+	* 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.
 
-2019-02-20  Alan Hayward  <alan.hayward@arm.com>
+2021-02-05  Tom de Vries  <tdevries@suse.de>
 
-	* aarch64-tdep.c (aarch64_add_reggroups): New function.
-	(aarch64_gdbarch_init): Call aarch64_add_reggroups.
+	PR exp/27265
+	* valarith.c (complex_binop): Throw an error if complex type can't
+	be created.
 
-2019-02-19  Simon Marchi  <simon.marchi@polymtl.ca>
+2021-02-05  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	PR symtab/27307
+	* dwarf2/read.c (create_cus_from_debug_names_list): Add missing
+	return.
 
-2019-02-19  Tom Tromey  <tromey@adacore.com>
+2021-02-05  Tom de Vries  <tdevries@suse.de>
 
-	* 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.
+	* dwarf2/read.c (create_cus_from_debug_names_list): Fix indentation.
 
-2019-02-18  Andrew Burgess  <andrew.burgess@embecosm.com>
+2021-02-04  Mike Frysinger  <vapier@gentoo.org>
 
-	* gdbtypes.c (type_align): Allow alignment of TYPE_CODE_METHODPTR
-	and TYPE_CODE_MEMBERPTR to be overridden by the gdbarch.
+	* configure.tgt (riscv*-*-*): Set gdb_sim.
 
-2019-02-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-02-04  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* target.c (target_is_non_stop_p): Return bool.
+	* target.h (target_is_non_stop_p): Return bool.
 
-2019-02-17  Tom Tromey  <tom@tromey.com>
+2021-02-04  Simon Marchi  <simon.marchi@efficios.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.
+	* 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.
 
-2019-02-17  Tom Tromey  <tom@tromey.com>
+2021-02-04  Simon Marchi  <simon.marchi@efficios.com>
 
-	* macrocmd.c (show_pp_source_pos): Style the file names.
+	* 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.
 
-2019-02-17  Tom Tromey  <tom@tromey.com>
+2021-02-04  Simon Marchi  <simon.marchi@efficios.com>
 
-	PR tui/24197:
-	* tui/tui-source.c (tui_set_source_content_nil): Rewrite.
+	* 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.
 
-2019-02-17  Tom Tromey  <tom@tromey.com>
+2021-02-04  Simon Marchi  <simon.marchi@efficios.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.
+	* 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.
 
-2019-02-15  Tom Tromey  <tromey@adacore.com>
+2021-02-03  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* 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.
+	* infrun.c (handle_inferior_event): Move stop_soon variable to
+	inner scope.
 
-2019-02-15  Tom Tromey  <tromey@adacore.com>
+2021-02-03  Pedro Alves  <pedro@palves.net>
 
-	* ravenscar-thread.c: Fix some typos.
+	* 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.
 
-2019-02-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	    Tom Tromey  <tromey@adacore.com>
+2021-01-27  Matthew Malcomson  <matthew.malcomson@arm.com>
 
-	* ada-lang.c (ada_exception_sal): Change addr_string to a
-	std::string.
-	(create_ada_exception_catchpoint): Update.
+	* 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.
 
-2019-02-15  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-	    Tom Tromey  <tromey@adacore.com>
+2021-01-26  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.
+	* 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.
 
-2019-02-14  Thomas Schwinge  <thomas@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
+2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>
 
-	* remote.c (remote_target::remote_parse_stop_reply): Avoid using
-	'PATH_MAX'.
+	* linux-tdep.c (linux_make_mappings_corefile_notes): Start using
+	elfcore_write_file_note.
 
-2019-02-14  David Michael  <fedora.dm0@gmail.com>
-	    Samuel Thibault  <samuel.thibault@gnu.org>
-	    Thomas Schwinge  <thomas@codesourcery.com>
+2021-01-26  Shahab Vahedi  <shahab@synopsys.com>
 
-	* gnu-nat.c (S_proc_getmsgport_reply, S_proc_task2proc_reply)
-	(S_proc_pid2proc_reply): Adjust to Hurd "proc" interface changes.
+	* arc-tdep.c (arc_add_reggroups): New function.
+	(arc_gdbarch_init): Call arc_add_reggroups.
 
-2019-02-14  Thomas Schwinge  <thomas@codesourcery.com>
+2021-01-26  Anton Kolesov  <anton.kolesov@synopsys.com>
 
-	* gnu-nat.c (gnu_write_inferior, parse_int_arg, _parse_bool_arg)
-	(check_empty): Use "const char *".
+	* arc-tdep.c (arc_skip_prologue): Log "pc" address.
 
-	* gnu-nat.c (gnu_nat_target::detach): Instead of
-	'detach_inferior (pid)' call
-	'detach_inferior (find_inferior_pid (pid))'.
+2021-01-25  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+	    Simon Marchi  <simon.marchi@polymtl.ca>
+	    Tom de Vries  <tdevries@suse.de>
 
-	* configure.nat [gdb_host == i386gnu] (NATDEPFILES): Add
-	'nat/fork-inferior.o'.
-	* gnu-nat.c: #include "nat/fork-inferior.h".
+	* dwarf2/read.c (partial_die_info::read): Use as_unsigned () for
+	DW_AT_ranges.
 
-	* 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'.
+2021-01-25  Tom Tromey  <tromey@adacore.com>
 
-	* 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.
+	* dwarf2/read.c (get_mpz): New function.
+	(get_dwarf2_rational_constant): Use it.
 
-	* config/i386/nm-i386gnu.h (gnu_target_pid_to_str): Remove.
+2021-01-25  Tom Tromey  <tromey@adacore.com>
 
-2019-02-14  Frederic Konrad  <konrad@adacore.com>
+	* ada-lang.c (resolve_subexp): Handle array context.
 
-	* riscv-rdep.c (riscv_type_alignment): Handle TYPE_CODE_RANGE.
+2021-01-23  Tom Tromey  <tom@tromey.com>
 
-2019-02-14  Joel Brobecker  <brobecker@adacore.com>
+	PR compile/25575
+	* compile/compile-loc2c.c (note_register): New function.
+	(pushf_register_address, pushf_register): Use it.
 
-	* 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.
+2021-01-23  Tom Tromey  <tom@tromey.com>
 
-2019-02-13  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* MAINTAINERS: Add Andrew Burgess as global maintainer.
+	* 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.
 
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+2021-01-23  Tom Tromey  <tom@tromey.com>
 
-	* symfile.c (find_separate_debug_file): Use canonical path of
-	sysroot with child_path instead of gdb_sysroot if it is valid.
+	* 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.
 
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+2021-01-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* symfile.c (find_separate_debug_file): Use child_path to
-	determine if an object file is under a sysroot.
+	* gdbtypes.c (copy_type_recursive): Use get_type_arch.
+	* gdbtypes.h (struct type) <set_owner>: Add asserts.
 
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+2021-01-23  Lancelot SIX  <lsix@lancelotsix.com>
 
-	* 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.
+	* Makefile.in (SELFTESTS_SRCS): Add
+	unittests/gdb_tilde_expand-selftests.c.
+	* unittests/gdb_tilde_expand-selftests.c: New file.
 
-2019-02-12  John Baldwin  <jhb@FreeBSD.org>
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* symfile.c (find_separate_debug_file): Look for separate debug
-	files in debug directories under the sysroot.
+	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.
 
-2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-	* 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.
+	* 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.
 
-2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* breakpoint.c (describe_other_breakpoints): Use address style
-	to print addresses.
-	(say_where): Likewise.
+	* remote.h (remote_debug_printf): New.
+	(remote_debug_printf_nofunc): New.
+	(REMOTE_SCOPED_DEBUG_ENTER_EXIT): New.
+	* remote.c: Use above macros throughout file.
 
-2019-02-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* ada-typeprint.c (print_func_type): Print function name
-	style to print function name.
-	* c-typeprint.c (c_print_type_1): Likewise.
+	* remote.h (remote_debug): Change to bool.
+	* remote.c (remote_debug): Change to bool.
+	(_initialize_remote): Adjust.
 
-2019-02-11  Alan Hayward  <alan.hayward@arm.com>
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* aarch64-linux-tdep.c (aarch64_linux_get_syscall_number): Check
-	for execve.
+	* 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.
 
-2019-02-10  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* c-exp.y (direct_abs_decl): Use emplace_back to record the
-	type_stack.
+	* 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.
 
-2019-02-10  Joel Brobecker  <brobecker@adacore.com>
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* ada-varobj.c (ada_value_is_changeable_p): Add handling of
-	TYPE_CODE_REF types.
+	* gdbtypes.h (TYPE_OBJFILE): Remove, change all users to use the
+	type::objfile method instead.
 
-2019-02-08  Jim Wilson  <jimw@sifive.com>
+2021-01-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
-	* riscv-linux-tdep.c (riscv_linux_fregmap): New.
-	(riscv_linux_fregset): New.
-	(riscv_linux_iterate_over_regset_sections): Call cb for .reg2 section.
+	* gdbtypes.h (TYPE_OBJFILE_OWNED): Remove, update all users to
+	use the type::is_objfile_owned method.
 
-2019-02-07  Tom Tromey  <tom@tromey.com>
+2021-01-22  Simon Marchi  <simon.marchi@efficios.com>
 
-	* thread.c (thread_cancel_execution_command): Update.
-	* thread-fsm.h (struct thread_fsm): Add constructor, destructor,
+	* 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.
-	(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):
+	(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.
-	* 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>
+2021-01-21  Luis Machado  <luis.machado@linaro.org>
 
-2019-01-23  Pedro Alves  <palves@redhat.com>
+	* coffread.c (enter_linenos): Passing string to complaint.
+	* valops.c (value_assign): Make array view.
 
-	* gdbarch-selftests.c (struct on_exit): Use SCOPE_EXIT.
+2021-01-21  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-23  Pedro Alves  <palves@redhat.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	* 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.
 
-	* gdbthread.h: Include "common/forward-scope-exit.h".
-	(scoped_finish_thread_state): Redefine custom class in terms of
-	forward_scope_exit.
+2021-01-15  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-01-23  Pedro Alves  <palves@redhat.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
+	* tui/tui.c (tui_is_window_visible): Compare to nullptr, not 0.
 
-	* common/forward-scope-exit.h: New file.
+2021-01-14  Lancelot Six  <lsix@lancelotsix.com>
 
-2019-01-23  Pedro Alves  <palves@redhat.com>
-	    Andrew Burgess  <andrew.burgess@embecosm.com>
-	    Tom Tromey  <tom@tromey.com>
+	* MAINTAINERS (Write After Approval): Add myself.
 
-	* common/scope-exit.h: New file.
+2021-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
-2019-01-23  Pedro Alves  <palves@redhat.com>
+	* trad-frame.c (trad_frame_alloc_saved_regs): Avoid compile-error
+	because is_trivially_default_constructible was first implemented with
+	gcc-5.
 
-	* 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.
+2021-01-14  Tom de Vries  <tdevries@suse.de>
 
-2019-01-23  Tom Tromey  <tom@tromey.com>
+	PR breakpoints/27151
+	* objfiles.h (in_plt_section): Handle .plt.sec.
 
-	* language.h (class scoped_switch_to_sym_language_if_auto):
-	Initialize m_lang in both cases.
+2021-01-13  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-01-23  Alan Hayward  <alan.hayward@arm.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.
 
-	* nat/aarch64-linux.c (aarch64_linux_new_thread): Replace XNEW
-	with XCNEW.
+2021-01-13  Simon Marchi  <simon.marchi@efficios.com>
 
-2019-01-22  Tom Tromey  <tom@tromey.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.
 
-	* corelow.c: Do not include sys/file.h.
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* 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.
 
-	* tui/tui-wingeneral.h: Include gdb_curses.h.
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* 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.
 
-	* source-cache.h (class source_cache) <get_source_lines,
-	get_plain_source_lines, extract_lines>: Rename "lines" parameter.
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* auto-load.c (auto_load_objfile_script_1): Use bool.
+	(execute_script_contents): Use bool.
 
-	* remote-fileio.h (struct remote_target): Declare.
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* 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.
 
-	* 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.
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* 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.
 
-	* objfiles.h (struct objfile_per_bfd_storage): Use "struct"
-	keyword for bcache.
+2021-01-13  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* jit.c (jit_debug_printf): New, use throughout file.
 
-	* compile/compile-cplus-types.c: Remove a comment by #include.
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* infrun.c (normal_stop): Fix indentation.
 
-	* compile/gcc-c-plugin.h: Include compile-internal.h.
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Tom Tromey  <tom@tromey.com>
+	* top.h (readnow_symbol_files, readnever_symbol_files): Move
+	declarations to ...
+	* symfile.h: ... here.
+	* symfile.c: Update doc.
 
-	* 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".
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
+	* target.h (baud_rate, serial_parity): Move declarations...
+	* serial.h: ... here.
+	* main.c: Include serial.h.
+	* serial.c (baud_rate, serial_parity): Update doc.
 
-	* event-top.c (handle_line_of_input): use unique_xmalloc_ptr for
-	history_value.
+2021-01-12  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-21  Tom Tromey  <tom@tromey.com>
+	* top.c (pre_init_ui_hook): Remove.
 
-	* 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.
+2021-01-12  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
 
-2019-01-21  Alan Hayward  <alan.hayward@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.
 
-	* aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check
-	for padding.
+2021-01-12  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-01-16  Tom Tromey  <tom@tromey.com>
+	* expprint.c (dump_subexp_body_standard): Handle OP_BOOL.
 
-	* 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.
+2021-01-12  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-01-16  Tom Tromey  <tom@tromey.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.
 
-	* 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.
+2021-01-11  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-15  Tom Tromey  <tom@tromey.com>
+	* arch/aarch64-insn.h (aarch64_debug_printf): New.
+	* arch/aarch64-insn.c: Use aarch64_debug_printf.
+	* aarch64-tdep.c: Use aarch64_debug_printf.
 
-	* 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.
+2021-01-11  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-17  Tom Tromey  <tromey@bapiya>
+	* solib-aix.c (solib_aix_debug_printf): New, use throughout
+	file.
 
-	* 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.
+2021-01-11  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-10  Pedro Alves  <palves@redhat.com>
+	* jit.c (jit_debug): Change type to bool.
+	(_initialize_jit): Adjust.
 
-	* 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.
+2021-01-09  Tom Tromey  <tom@tromey.com>
 
-2019-01-10  Pedro Alves  <palves@redhat.com>
+	PR compile/23672
+	* compile/compile.c (compile_to_object): Avoid crash when
+	osabi_triplet_regexp returns NULL.
 
-	* solib-target.c (library_list_start_library): Don't xstrdup name.
+2021-01-09  Tom Tromey  <tom@tromey.com>
 
-2019-01-10  Pedro Alves  <palves@redhat.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.
 
-	* mdebugread.c (parse_partial_symbols): Use
-	gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'.
+2021-01-08  Tom Tromey  <tromey@adacore.com>
 
-2019-01-10  Andrew Burgess  <andrew.burgess@embecosm.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.
 
-	* linux-fork.c (scoped_switch_fork_info)
-	<~scoped_switch_fork_info>: Fix incorrect variable name.
+2021-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-01-10  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* value.c (set_value_component_location): Adjust the VALUE_LVAL
+	for internalvar components that have a dynamic location.
 
-	* linux-fork.c (scoped_switch_fork_info)
-	<scoped_switch_fork_info>: Make explicit.
-	<~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
+2021-01-08  Tom de Vries  <tdevries@suse.de>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	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.
 
-	* 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.
+2021-01-08  Andrew Burgess  <andrew.burgess@embecosm.com>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	* f-lang.c (fortran_value_subarray): Call value_from_component.
 
-	* 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.
+2021-01-07  Mike Frysinger  <vapier@gentoo.org>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	* remote-sim.c: Include memory-map.h.
+	(gdbsim_target): Define memory_map override.
+	(gdbsim_target::memory_map): Define.
 
-	* 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.
+2021-01-07  Tom Tromey  <tromey@adacore.com>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (do_full_match): Conditionally skip "_ada_" prefix.
 
-	* symfile.c (reread_symbols): Call objfile->reset_psymtabs.
-	* objfiles.h (objfile::reset_psymtabs): New method.
+2021-01-07  Tom Tromey  <tromey@adacore.com>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	* ada-lang.c (add_component_interval): Start loop using vector's
+	updated size.
 
-	* 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.
+2021-01-06  Tom Tromey  <tromey@adacore.com>
 
-2019-01-10  Tom Tromey  <tom@tromey.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.
 
-	* 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.
+2021-01-05  Hannes Domani  <ssbssa@yahoo.de>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	* tui/tui-winsource.c (tui_source_window_base::refresh_window):
+	Call wnoutrefresh instead of tui_win_info::refresh_window.
 
-	* 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.
+2021-01-05  Hannes Domani  <ssbssa@yahoo.de>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	* tui/tui-source.c (tui_source_window::show_line_number):
+	Redraw second space after line number.
 
-	* 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.
+2021-01-05  Hannes Domani  <ssbssa@yahoo.de>
 
-2019-01-10  Tom Tromey  <tom@tromey.com>
+	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.
 
-	* 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.
+2021-01-04  Mike Frysinger  <vapier@gentoo.org>
 
-2019-01-09  Tom Tromey  <tom@tromey.com>
+	* bfin-tdep.c (bfin_push_dummy_call): Use align_up.
+	(bfin_frame_align): Use align_down.
 
-	* 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.
+2021-01-04  Tom de Vries  <tdevries@suse.de>
 
-2019-01-09  Tom Tromey  <tom@tromey.com>
+	* buildsym.c (buildsym_compunit::record_line): Filter out end-of-seq
+	terminators that do not terminate anything.
 
-	* 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.
+2021-01-04  Simon Marchi  <simon.marchi@efficios.com>
 
-2019-01-09  Tom Tromey  <tom@tromey.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.
 
-	* 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.
+2021-01-04  Simon Marchi  <simon.marchi@efficios.com>
 
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* infrun.c (print_target_wait_results): Use infrun_debug_printf.
 
-	* valops.c (find_overload_match): Remove use of null_cleanup, and
-	calls to do_cleanups.
+2021-01-04  Simon Marchi  <simon.marchi@efficios.com>
 
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* utils.c (vfprintf_unfiltered): Print timestamp only when
+	previous debug output ended with a newline.
 
-	* 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.
+2021-01-04  Luis Machado  <luis.machado@linaro.org>
 
-2019-01-03  Andrew Burgess  <andrew.burgess@embecosm.com>
+	Update all users of trad_frame_saved_reg to use the new member
+	functions.
 
-	* remote.c (remote_target::remote_check_symbols): Convert `msg` to
-	gdb::char_vector, remove cleanup, and update uses of `msg`.
+	Remote all struct keywords from declarations of trad_frame_saved_reg
+	types, except on forward declarations.
 
-2019-01-03  Jim Wilson  <jimw@sifive.com>
+	* 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.
 
-	* riscv-tdep.c (riscv_freg_feature): Drop s0 name from f8.
+	* frame-unwind.c (frame_unwind_got_bytes): Make parameter const.
+	* frame-unwind.h (frame_unwind_got_bytes): Likewise.
 
-2019-01-02  Tom Tromey  <tom@tromey.com>
+	* 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.
 
-	* 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.
+2021-01-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
-2019-01-02  Tom Tromey  <tom@tromey.com>
+	* target-float.c: Fix typos.
 
-	* 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.
+2021-01-02  Hannes Domani  <ssbssa@yahoo.de>
 
-2019-01-02  Andrey Utkin  <autkin@undo.io>
+	* gdb-gdb.py.in: Fix main_type.flds_bnds.bounds pretty printer.
 
-	* symfile.c (find_separate_debug_file): Fix search of debug files for
-	remote debuggee.
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
 
-2019-01-02  Tom Tromey  <tom@tromey.com>
+	* gdbarch.sh: Update copyright year range.
 
-	* 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.
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
 
-2019-01-02  Joel Brobecker  <brobecker@adacore.com>
+	Update copyright year range in copyright header of all GDB files.
 
-	* unittests/basic_string_view/element_access/char/empty.cc:
-	Fix year range in copyright header.
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
 
-2019-01-01  Andrew Burgess  <andrew.burgess@embecosm.com>
+	* copyright.py (get_update_list): Add "gdbserver" and "gdbsupport"
+	to the list of directories to update.
 
-	* 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>
+2021-01-01  Joel Brobecker  <brobecker@adacore.com>
 
-	Update copyright year range in all GDB files.
+	* top.c (print_gdb_version): Update copyright year.
 
-2019-01-01, 19  Joel Brobecker  <brobecker@adacore.com>
+2021-01-01, 21  Joel Brobecker  <brobecker@adacore.com>
 
-	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2018.
+	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2020.
 
-For older changes see ChangeLog-2018.
+For older changes see ChangeLog-2020.
 
 Local Variables:
 mode: change-log
@@ -16597,4 +7759,3 @@ 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1992 ./gdb/ChangeLog-1992
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1992	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-1992	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1993 ./gdb/ChangeLog-1993
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1993	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-1993	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1995 ./gdb/ChangeLog-1995
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1995	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-1995	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1996 ./gdb/ChangeLog-1996
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1996	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-1996	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1998 ./gdb/ChangeLog-1998
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1998	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-1998	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1999 ./gdb/ChangeLog-1999
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-1999	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-1999	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2000 ./gdb/ChangeLog-2000
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2000	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2000	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2001 ./gdb/ChangeLog-2001
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2001	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2001	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2002 ./gdb/ChangeLog-2002
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2002	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2002	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2003 ./gdb/ChangeLog-2003
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2003	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2003	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2004 ./gdb/ChangeLog-2004
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2004	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2004	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2005 ./gdb/ChangeLog-2005
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2005	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2005	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2006 ./gdb/ChangeLog-2006
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2006	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2006	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2007 ./gdb/ChangeLog-2007
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2007	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2007	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2008 ./gdb/ChangeLog-2008
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2008	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2008	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2009 ./gdb/ChangeLog-2009
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2009	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2009	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2010 ./gdb/ChangeLog-2010
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2010	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2010	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2011 ./gdb/ChangeLog-2011
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2011	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2011	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2012 ./gdb/ChangeLog-2012
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2012	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2012	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2013 ./gdb/ChangeLog-2013
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2013	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2013	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2014 ./gdb/ChangeLog-2014
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2014	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2014	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2015 ./gdb/ChangeLog-2015
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2015	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2015	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2016 ./gdb/ChangeLog-2016
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2016	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2016	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2017 ./gdb/ChangeLog-2017
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2017	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2017	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2018 ./gdb/ChangeLog-2018
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2018	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ChangeLog-2018	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2019 ./gdb/ChangeLog-2019
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2019	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ChangeLog-2019	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2020 ./gdb/ChangeLog-2020
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ChangeLog-2020	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/ChangeLog-2020	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/charset.c ./gdb/charset.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/charset.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/charset.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Character set conversion support for GDB.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -247,7 +247,7 @@ show_target_charset_name (struct ui_file
   if (!strcmp (value, "auto"))
     fprintf_filtered (file,
 		      _("The target character set is \"auto; "
-		        "currently %s\".\n"),
+			"currently %s\".\n"),
 		      gdbarch_auto_charset (get_current_arch ()));
   else
     fprintf_filtered (file, _("The target character set is \"%s\".\n"),
@@ -264,20 +264,20 @@ show_target_wide_charset_name (struct ui
   if (!strcmp (value, "auto"))
     fprintf_filtered (file,
 		      _("The target wide character set is \"auto; "
-		        "currently %s\".\n"),
+			"currently %s\".\n"),
 		      gdbarch_auto_wide_charset (get_current_arch ()));
   else
     fprintf_filtered (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
@@ -818,7 +818,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");
@@ -989,20 +990,21 @@ intermediate_encoding (void)
   /* 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;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/charset.h ./gdb/charset.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/charset.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/charset.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Character set conversion support for GDB.
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/charset-list.h ./gdb/charset-list.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/charset-list.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/charset-list.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* List of character set names for GDB.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-lang.c ./gdb/c-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-lang.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-lang.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* C language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,6 +36,8 @@
 #include <ctype.h>
 #include "gdbcore.h"
 #include "gdbarch.h"
+#include "compile/compile-internal.h"
+#include "c-exp.h"
 
 /* Given a C string type, STR_TYPE, return the corresponding target
    character set name.  */
@@ -84,9 +86,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,7 +112,7 @@ 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.  */
@@ -147,16 +149,19 @@ c_emit_char (int c, struct type *type,
 {
   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:
@@ -173,7 +178,7 @@ c_printchar (int c, struct type *type, s
     }
 
   fputc_filtered ('\'', stream);
-  LA_EMIT_CHAR (c, type, stream, '\'');
+  emitchar (c, type, stream, '\'');
   fputc_filtered ('\'', stream);
 }
 
@@ -194,7 +199,7 @@ c_printstr (struct ui_file *stream, stru
   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)
     {
@@ -250,23 +255,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,7 +279,7 @@ 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);
+  classify_type (element_type, element_type->arch (), charset);
   width = TYPE_LENGTH (element_type);
 
   /* If the string lives in GDB's memory instead of the inferior's,
@@ -292,7 +297,7 @@ c_get_string (struct value *value, gdb::
      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)
+       || type->code () == TYPE_CODE_ARRAY)
       && fetchlimit != UINT_MAX
       && (*length < 0 || *length <= fetchlimit))
     {
@@ -303,14 +308,14 @@ c_get_string (struct value *value, gdb::
       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,7 +327,7 @@ 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)
 	    error (_("Attempt to take address of value "
@@ -396,8 +401,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;
@@ -438,9 +443,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;
@@ -463,9 +468,9 @@ 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;
 
@@ -494,9 +499,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 +553,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 +570,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,181 +579,129 @@ 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.  */
-
-struct value *
-evaluate_subexp_c (struct type *expect_type, struct expression *exp,
-		   int *pos, enum noside noside)
+namespace expr
 {
-  enum exp_opcode op = exp->elts[*pos].opcode;
 
-  switch (op)
+value *
+c_string_operation::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  struct type *type;
+  struct value *result;
+  c_string_type dest_type;
+  const char *dest_charset;
+  int satisfy_expected = 0;
+
+  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 (__FILE__, __LINE__, _("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)));
+  /* 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 && expect_type->code () == TYPE_CODE_ARRAY)
+    {
+      struct type *element_type
+	= check_typedef (TYPE_TARGET_TYPE (expect_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 (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 (expect_type->index_type (),
+				    &low_bound, &high_bound))
+	    {
+	      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;
 }
 
+} /* 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 = check_typedef (type);
     }
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
       {
@@ -773,68 +726,6 @@ 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[] =
-{
-  {",", 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}
-};
-
-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 +733,402 @@ 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.  */
+
+  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, 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 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,
+				char **demangled) const override
+  {
+    *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
+    return *demangled != NULL;
+  }
+
+  /* See language.h.  */
+
+  char *demangle_symbol (const char *mangled, int options) const override
+  {
+    return gdb_demangle (mangled, options);
+  }
+
+  /* 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, flags);
+  }
+
+  /* See language.h.  */
+
+  CORE_ADDR skip_trampoline (struct frame_info *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_enum 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.  */
+
+  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, 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.  */
+
+  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, 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-lang.h ./gdb/c-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-lang.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-lang.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* C language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,7 +28,6 @@ struct parser_state;
 
 #include "value.h"
 #include "macroexp.h"
-#include "parser-defs.h"
 #include "gdbsupport/enum-flags.h"
 
 
@@ -81,22 +80,16 @@ 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,
@@ -110,16 +103,9 @@ extern void c_printstr (struct ui_file *
 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 +116,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 +140,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 +168,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,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-cmds.c ./gdb/cli/cli-cmds.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-cmds.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-cmds.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB CLI commands.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -50,9 +50,11 @@
 #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.  */
@@ -150,6 +152,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;
@@ -191,26 +197,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,6 +227,7 @@ 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);
@@ -324,7 +322,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.  */
 
@@ -448,7 +493,7 @@ 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"),
@@ -492,7 +537,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 +576,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]))
@@ -676,7 +721,7 @@ source_script_with_search (const char *f
   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 +738,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;
+  gdb::unique_xmalloc_ptr<char> tilde_expanded_file;
+  if (search_path)
+    file_to_open = opened->full_path.get ();
+  else
+    {
+      tilde_expanded_file = gdb_tilde_expand_up (file);
+      file_to_open = tilde_expanded_file.get ();
+    }
+  source_script_from_stream (opened->stream.get (), file, file_to_open);
 }
 
 /* Wrapper around source_script_with_search to export it to main.c
@@ -800,6 +853,18 @@ exit_status_set_internal_vars (int exit_
   clear_internalvar (var_signal);
   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
@@ -827,8 +892,8 @@ shell_escape (const char *arg, int from_
   /* 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
+  exit_status_set_internal_vars (rc);
 #else /* Can fork.  */
   int status, pid;
 
@@ -919,40 +984,40 @@ edit_command (const char *arg, int from_
       sal = sals[0];
 
       if (*arg1)
-        error (_("Junk at end of line specification."));
+	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)
+	  gdbarch = SYMTAB_OBJFILE (sal.symtab)->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);
-          else
+	  else
 	    printf_filtered ("%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)
@@ -1058,7 +1123,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);
 }
 
@@ -1265,7 +1330,7 @@ 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 = SYMTAB_OBJFILE (sal.symtab)->arch ();
       sym = find_pc_function (sal.pc);
       if (sym)
 	printf_filtered ("%s is in %s (%s:%d).\n",
@@ -1338,42 +1403,44 @@ 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 ");
+      printf_filtered (_("Dump of assembler code "));
       if (name != NULL)
-	printf_filtered ("for function %s:\n", name);
+	printf_filtered (_("for function %ps:\n"),
+			 styled_string (function_name_style.style (), name));
       if (block == nullptr || BLOCK_CONTIGUOUS_P (block))
-        {
+	{
 	  if (name == NULL)
-	    printf_filtered ("from %s to %s:\n",
-			     paddress (gdbarch, low), paddress (gdbarch, high));
+	    printf_filtered (_("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++)
 	    {
 	      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));
+	      printf_filtered (_("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");
-    }
-#if defined(TUI)
-  else
-    {
-      tui_show_assembly (gdbarch, low);
+      printf_filtered (_("End of assembler dump.\n"));
     }
-#endif
 }
 
 /* Subroutine of disassemble_command to simplify it.
@@ -1434,6 +1501,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;
@@ -1489,8 +1557,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'.  */
@@ -1542,7 +1616,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,7 +1625,7 @@ 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);
 	}
     }
@@ -1574,6 +1648,71 @@ apropos_command (const char *arg, int fr
   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.
    Return the first N elements of ARGV flattened back to a string
    with a space separating each element.
@@ -1601,24 +1740,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);
+
+  if (!default_args.empty ())
+    error (_("Cannot define an alias of an alias that has default args"));
 
-  /* 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';
+  return c;
 }
 
 /* Called when "alias" was incorrectly used.  */
@@ -1626,7 +1771,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 +1779,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 +1796,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 +1827,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 +1876,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 +1897,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;
     }
 }
 
@@ -1844,20 +2019,6 @@ filter_sals (std::vector<symtab_and_line
   sals.erase (from, sals.end ());
 }
 
-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)
 {
@@ -1886,23 +2047,6 @@ show_history_expansion_p (struct ui_file
 }
 
 static void
-show_remote_debug (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);
-}
-
-static void
-show_remote_timeout (struct ui_file *file, int from_tty,
-		     struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file,
-		    _("Timeout limit to wait for target to respond is %s.\n"),
-		    value);
-}
-
-static void
 show_max_user_call_depth (struct ui_file *file, int from_tty,
 			  struct cmd_list_element *c, const char *value)
 {
@@ -1927,14 +2071,14 @@ setting_cmd (const char *fnname, struct
 
   struct type *type0 = check_typedef (value_type (argv[0]));
 
-  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);
+  cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0);
 
-  if (cmd == nullptr || cmd_type (cmd) != show_cmd)
+  if (cmd == nullptr || cmd->type != show_cmd)
     error (_("First argument of %s must be a "
 	     "valid setting of the 'show' command."), fnname);
 
@@ -2105,8 +2249,9 @@ gdb_maint_setting_str_internal_fn (struc
 				 gdbarch);
 }
 
+void _initialize_cli_cmds ();
 void
-_initialize_cli_cmds (void)
+_initialize_cli_cmds ()
 {
   struct cmd_list_element *c;
 
@@ -2121,7 +2266,7 @@ 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\
@@ -2143,6 +2288,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 +2332,18 @@ 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\
 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 ("h", help_cmd, class_support, 1);
 
   add_setshow_boolean_cmd ("verbose", class_support, &info_verbose, _("\
 Set verbosity."), _("\
@@ -2199,12 +2352,12 @@ 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_basic_prefix_cmd ("history", class_support, _("\
+Generic command for setting command history parameters."),
+			&sethistlist, 0, &setlist);
+  add_show_prefix_cmd ("history", class_support, _("\
+Generic command for showing command history parameters."),
+		       &showhistlist, 0, &showlist);
 
   add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\
 Set history expansion on command input."), _("\
@@ -2214,22 +2367,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 +2398,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\
@@ -2296,39 +2451,21 @@ 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_basic_prefix_cmd ("debug", no_class,
+			_("Generic command for setting gdb debugging flags."),
+			&setdebuglist, 0, &setlist);
+
+  add_show_prefix_cmd ("debug", no_class,
+		       _("Generic command for showing gdb debugging flags."),
+		       &showdebuglist, 0, &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 +2479,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,10 +2495,11 @@ 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 before a previous ten-line listing.\n\
@@ -2379,15 +2518,20 @@ 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);
+  add_com_alias ("l", list_cmd, class_files, 1);
 
   if (dbx_commands)
-    add_com_alias ("file", "list", class_files, 1);
+    add_com_alias ("file", 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 +2539,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\
@@ -2441,19 +2580,37 @@ 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);
 
   const char *source_help_text = xstrprintf (_("\
 Read commands from a file named FILE.\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-cmds.h ./gdb/cli/cli-cmds.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-cmds.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-cmds.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB CLI command implementation library.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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
@@ -89,6 +89,10 @@ 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;
+
 extern struct cmd_list_element *setprintlist;
 
 extern struct cmd_list_element *showprintlist;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-decode.c ./gdb/cli/cli-decode.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-decode.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-decode.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Handle lists of commands, their decoding and documentation, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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
@@ -43,14 +43,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 +69,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,29 +88,8 @@ 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);
+print_help_for_command (struct cmd_list_element *c,
+			bool recurse, struct ui_file *stream);
 
 
 /* Set the callback function for the specified command.  For each both
@@ -140,24 +135,6 @@ cmd_cfunc_eq (struct cmd_list_element *c
 }
 
 void
-set_cmd_context (struct cmd_list_element *cmd, void *context)
-{
-  cmd->context = context;
-}
-
-void *
-get_cmd_context (struct cmd_list_element *cmd)
-{
-  return cmd->context;
-}
-
-enum cmd_types
-cmd_type (struct cmd_list_element *cmd)
-{
-  return cmd->type;
-}
-
-void
 set_cmd_completer (struct cmd_list_element *cmd, completer_ftype *completer)
 {
   cmd->completer = completer; /* Ok.  */
@@ -172,6 +149,23 @@ set_cmd_completer_handle_brkchars (struc
   cmd->completer_handle_brkchars = func;
 }
 
+std::string
+cmd_list_element::prefixname () const
+{
+  if (!this->is_prefix ())
+    /* Not a prefix command.  */
+    return "";
+
+  std::string prefixname;
+  if (this->prefix != nullptr)
+    prefixname = this->prefix->prefixname ();
+
+  prefixname += this->name;
+  prefixname += " ";
+
+  return prefixname;
+}
+
 /* 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
@@ -203,7 +197,7 @@ do_add_cmd (const char *name, enum comma
   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;
+    iter->alias_target = c;
   if (c->hook_pre)
     c->hook_pre->hookee_pre = c;
   if (c->hookee_pre)
@@ -229,6 +223,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;
 }
 
@@ -294,107 +294,152 @@ 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);
-
-      /* If this happens, it means a programmer error somewhere.  */
-      gdb_assert (!aliases && !prehook && !prehookee
-		  && !posthook && ! posthookee);
-      return 0;
-    }
+  gdb_assert (target != nullptr);
 
-  struct cmd_list_element *c = add_cmd (name, theclass, old->doc, list);
+  struct cmd_list_element *c = add_cmd (name, theclass, target->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;
+  c->alias_chain = target->aliases;
+  target->aliases = 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)
+		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);
+  set_cmd_sfunc (cmd, 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);
+  set_cmd_sfunc (cmd, do_show_prefix_cmd);
+  return cmd;
+}
+
 /* 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,
+	       (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,
+		const char *doc, struct cmd_list_element **subcommands,
+		int allow_unknown, struct cmd_list_element **list,
 		int *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;
 }
@@ -404,14 +449,12 @@ 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,
+		       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;
@@ -464,11 +507,11 @@ add_set_or_show_cmd (const char *name,
    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.  */
+   strings.
 
-static void
+   Return the newly created set and show commands.  */
+
+static set_show_commands
 add_setshow_cmd_full (const char *name,
 		      enum command_class theclass,
 		      var_types var_type, void *var,
@@ -477,9 +520,7 @@ add_setshow_cmd_full (const char *name,
 		      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)
+		      struct cmd_list_element **show_list)
 {
   struct cmd_list_element *set;
   struct cmd_list_element *show;
@@ -503,8 +544,6 @@ add_setshow_cmd_full (const char *name,
   if (set_func != NULL)
     set_cmd_sfunc (set, set_func);
 
-  set_cmd_prefix (set, set_list);
-
   show = add_set_or_show_cmd (name, show_cmd, theclass, var_type, var,
 			      full_show_doc, show_list);
   show->doc_allocated = 1;
@@ -513,10 +552,7 @@ add_setshow_cmd_full (const char *name,
      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};
 }
 
 /* Add element named NAME to command list LIST (the list for set or
@@ -524,7 +560,7 @@ add_setshow_cmd_full (const char *name,
    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,
@@ -535,20 +571,15 @@ add_setshow_enum_cmd (const char *name,
 		      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)
+		      struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *c, *show;
-
-  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;
-
-  set_cmd_context (c, context);
-  set_cmd_context (show, context);
+  set_show_commands commands
+    =  add_setshow_cmd_full (name, theclass, var_enum, var,
+			     set_doc, show_doc, help_doc,
+			     set_func, show_func,
+			     set_list, show_list);
+  commands.set->enums = enumlist;
+  return commands;
 }
 
 /* See cli-decode.h.  */
@@ -558,7 +589,8 @@ const char * const auto_boolean_enums[]
    command list lists.  CLASS 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,
@@ -569,14 +601,15 @@ add_setshow_auto_boolean_cmd (const char
 			      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 (name, theclass, var_auto_boolean, var,
+			    set_doc, show_doc, help_doc,
+			    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;
 }
 
 /* See cli-decode.h.  */
@@ -588,7 +621,7 @@ const char * const boolean_enums[] = { "
    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,
@@ -597,21 +630,21 @@ add_setshow_boolean_cmd (const char *nam
 			 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 (name, theclass, var_boolean, var,
+			    set_doc, show_doc, help_doc,
+			    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;
 }
 
 /* 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,
 			  const char *set_doc, const char *show_doc,
@@ -621,19 +654,21 @@ add_setshow_filename_cmd (const char *na
 			  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 (name, theclass, var_filename, var,
+			    set_doc, show_doc, help_doc,
+			    set_func, show_func,
+			    set_list, show_list);
 
-  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);
+  set_cmd_completer (commands.set, filename_completer);
+
+  return commands;
 }
 
 /* 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,
 			const char *set_doc, const char *show_doc,
@@ -643,21 +678,22 @@ add_setshow_string_cmd (const char *name
 			struct cmd_list_element **set_list,
 			struct cmd_list_element **show_list)
 {
-  cmd_list_element *set_cmd;
-
-  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);
+  set_show_commands commands
+    = add_setshow_cmd_full (name, theclass, var_string, var,
+			    set_doc, show_doc, help_doc,
+			    set_func, show_func,
+			    set_list, show_list);
 
   /* Disable the default symbol completer.  */
-  set_cmd_completer (set_cmd, nullptr);
+  set_cmd_completer (commands.set, nullptr);
+
+  return commands;
 }
 
 /* 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,
 				 const char *set_doc, const char *show_doc,
@@ -667,23 +703,22 @@ add_setshow_string_noescape_cmd (const c
 				 struct cmd_list_element **set_list,
 				 struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *set_cmd;
-
-  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);
+  set_show_commands commands
+    = add_setshow_cmd_full (name, theclass, var_string_noescape, var,
+			    set_doc, show_doc, help_doc,
+			    set_func, show_func,
+			    set_list, show_list);
 
   /* Disable the default symbol completer.  */
-  set_cmd_completer (set_cmd, nullptr);
+  set_cmd_completer (commands.set, nullptr);
 
-  return set_cmd;
+  return commands;
 }
 
 /* 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,
 				   const char *set_doc, const char *show_doc,
@@ -693,16 +728,15 @@ add_setshow_optional_filename_cmd (const
 				   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_show_commands commands
+    = 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_cmd_completer (set_result, filename_completer);
+  set_cmd_completer (commands.set, filename_completer);
 
+  return commands;
 }
 
 /* Completes on literal "unlimited".  Used by integer commands that
@@ -727,7 +761,8 @@ integer_unlimited_completer (struct cmd_
    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 char *set_doc, const char *show_doc,
@@ -737,22 +772,23 @@ add_setshow_integer_cmd (const char *nam
 			 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 (name, theclass, var_integer, var,
+			    set_doc, show_doc, help_doc,
+			    set_func, show_func,
+			    set_list, show_list);
 
-  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);
+  set_cmd_completer (commands.set, integer_unlimited_completer);
 
-  set_cmd_completer (set, integer_unlimited_completer);
+  return commands;
 }
 
 /* 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_uinteger_cmd (const char *name, enum command_class theclass,
 			  unsigned int *var,
 			  const char *set_doc, const char *show_doc,
@@ -762,22 +798,23 @@ add_setshow_uinteger_cmd (const char *na
 			  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 (name, theclass, var_uinteger, var,
+			    set_doc, show_doc, help_doc,
+			    set_func, show_func,
+			    set_list, show_list);
 
-  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);
+  set_cmd_completer (commands.set, integer_unlimited_completer);
 
-  set_cmd_completer (set, integer_unlimited_completer);
+  return commands;
 }
 
 /* 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_zinteger_cmd (const char *name, enum command_class theclass,
 			  int *var,
 			  const char *set_doc, const char *show_doc,
@@ -787,14 +824,13 @@ add_setshow_zinteger_cmd (const char *na
 			  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 (name, theclass, var_zinteger, var,
+			       set_doc, show_doc, help_doc,
+			       set_func, show_func,
+			       set_list, show_list);
 }
 
-void
+set_show_commands
 add_setshow_zuinteger_unlimited_cmd (const char *name,
 				     enum command_class theclass,
 				     int *var,
@@ -806,22 +842,23 @@ add_setshow_zuinteger_unlimited_cmd (con
 				     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 (name, theclass, var_zuinteger_unlimited, var,
+			    set_doc, show_doc, help_doc,
+			    set_func, show_func,
+			    set_list, show_list);
 
-  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_cmd_completer (commands.set, integer_unlimited_completer);
 
-  set_cmd_completer (set, integer_unlimited_completer);
+  return commands;
 }
 
 /* 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_zuinteger_cmd (const char *name, enum command_class theclass,
 			   unsigned int *var,
 			   const char *set_doc, const char *show_doc,
@@ -831,11 +868,10 @@ add_setshow_zuinteger_cmd (const char *n
 			   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 (name, theclass, var_zuinteger, var,
+			       set_doc, show_doc, help_doc,
+			       set_func, show_func,
+			       set_list, show_list);
 }
 
 /* Remove the command named NAME from the command list.  Return the
@@ -867,7 +903,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;
@@ -884,9 +921,9 @@ delete_cmd (const char *name, struct cmd
 
 	  /* 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 **prevp = &iter->alias_target->aliases;
 	      struct cmd_list_element *a = *prevp;
 
 	      while (a != iter)
@@ -921,10 +958,10 @@ add_info (const char *name, cmd_const_cf
 
 /* 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.  */
@@ -937,13 +974,16 @@ add_com (const char *name, enum command_
   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.  */
@@ -957,6 +997,78 @@ add_com_suppress_notification (const cha
 					&cmdlist, suppress_notification);
 }
 
+/* Print the prefix of C followed by name of C in title style.  */
+
+static void
+fput_command_name_styled (struct 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);
+}
+
+/* Print the definition of alias C using title style for alias
+   and aliased command.  */
+
+static void
+fput_alias_definition_styled (struct cmd_list_element *c,
+			      struct ui_file *stream)
+{
+  gdb_assert (c->is_alias ());
+  fputs_filtered ("  alias ", stream);
+  fput_command_name_styled (c, stream);
+  fprintf_filtered (stream, " = ");
+  fput_command_name_styled (c->alias_target, stream);
+  fprintf_filtered (stream, " %s\n", c->default_args.c_str ());
+}
+
+/* Print the definition of the aliases of CMD that have default args.  */
+
+static void
+fput_aliases_definition_styled (struct cmd_list_element *cmd,
+				struct ui_file *stream)
+{
+  if (cmd->aliases != nullptr)
+    {
+      for (cmd_list_element *iter = cmd->aliases;
+	   iter;
+	   iter = iter->alias_chain)
+	{
+	  if (!iter->default_args.empty ())
+	    fput_alias_definition_styled (iter, stream);
+	}
+    }
+}
+
+
+/* If C has one or more aliases, style print the name of C and
+   the name of its aliases, 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 (struct cmd_list_element *c,
+			   bool always_fput_c_name, const char *postfix,
+			   struct ui_file *stream)
+{
+  if (always_fput_c_name ||  c->aliases != nullptr)
+    fput_command_name_styled (c, stream);
+  if (c->aliases != nullptr)
+    {
+      for (cmd_list_element *iter = c->aliases; iter; iter = iter->alias_chain)
+	{
+	  fputs_filtered (", ", stream);
+	  wrap_here ("   ");
+	  fput_command_name_styled (iter, stream);
+	}
+    }
+  if (always_fput_c_name ||  c->aliases != nullptr)
+    fputs_filtered (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.  */
@@ -972,14 +1084,21 @@ print_doc_of_command (struct cmd_list_el
   if (verbose)
     fputs_filtered ("\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);
+    {
+      fputs_filtered ("\n", stream);
+      fput_aliases_definition_styled (c, stream);
+      fputs_highlighted (c->doc, highlight, stream);
+      fputs_filtered ("\n", stream);
+    }
   else
-    print_doc_line (stream, c->doc, false);
-  fputs_filtered ("\n", stream);
+    {
+      print_doc_line (stream, c->doc, false);
+      fputs_filtered ("\n", stream);
+      fput_aliases_definition_styled (c, stream);
+    }
 }
 
 /* Recursively walk the commandlist structures, and print out the
@@ -1000,6 +1119,14 @@ apropos_cmd (struct ui_file *stream,
   /* Walk through the commands.  */
   for (c=commandlist;c;c=c->next)
     {
+      if (c->is_alias ())
+	{
+	  /* Command aliases/abbreviations 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)
 	{
@@ -1009,6 +1136,17 @@ apropos_cmd (struct ui_file *stream,
 	  returnvalue = regex.search (c->name, name_len, 0, name_len, NULL);
 	  if (returnvalue >= 0)
 	    print_doc_of_command (c, prefix, verbose, regex, stream);
+
+	  /* Try to match against the name of the aliases.  */
+	  for (cmd_list_element *iter = c->aliases;
+	       returnvalue < 0 && iter;
+	       iter = iter->alias_chain)
+	    {
+	      name_len = strlen (iter->name);
+	      returnvalue = regex.search (iter->name, name_len, 0, name_len, NULL);
+	      if (returnvalue >= 0)
+		print_doc_of_command (c, prefix, verbose, regex, stream);
+	    }
 	}
       if (c->doc != NULL && returnvalue < 0)
 	{
@@ -1018,14 +1156,13 @@ apropos_cmd (struct ui_file *stream,
 	  if (regex.search (c->doc, doc_len, 0, doc_len, NULL) >= 0)
 	    print_doc_of_command (c, prefix, 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,
+		       c->prefixname ().c_str ());
 	}
     }
 }
@@ -1044,7 +1181,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 +1195,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 +1215,39 @@ help_cmd (const char *command, struct ui
      number of this class so that the commands in the class will be
      listed.  */
 
+  /* 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);
   fputs_filtered (c->doc, stream);
   fputs_filtered ("\n", stream);
 
-  if (c->prefixlist == 0 && c->func != NULL)
+  if (!c->is_prefix () && !c->is_command_class_help ())
     return;
+
   fprintf_filtered (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");
+		      "\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);
+		      "\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);
+		      "\tThis command is run before : %s (post hook)\n",
+		    c->hook_post->name);
 }
 
 /*
@@ -1144,7 +1290,7 @@ help_list (struct cmd_list_element *list
   else
     fprintf_filtered (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)
     {
@@ -1184,14 +1330,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);
+	  help_cmd_list (cmdlist, c->theclass, true, stream);
 	}
     }
 
@@ -1202,7 +1348,7 @@ help_all (struct ui_file *stream)
   for (c = cmdlist; c; c = c->next)
     {
       if (c->abbrev_flag)
-        continue;
+	continue;
 
       if (c->theclass == no_class)
 	{
@@ -1211,7 +1357,7 @@ help_all (struct ui_file *stream)
 	      fprintf_filtered (stream, "\nUnclassified commands\n\n");
 	      seen_unclassified = 1;
 	    }
-	  print_help_for_command (c, "", 1, stream);
+	  print_help_for_command (c, true, stream);
 	}
     }
 
@@ -1263,63 +1409,96 @@ print_doc_line (struct ui_file *stream,
    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 (struct cmd_list_element *c,
+			bool recurse, struct ui_file *stream)
 {
-  fprintf_styled (stream, title_style.style (),
-		  "%s%s", prefix, c->name);
-  fputs_filtered (" -- ", stream);
+  fput_command_names_styled (c, true, " -- ", stream);
   print_doc_line (stream, c->doc, false);
   fputs_filtered ("\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->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 +1517,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 +1591,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 +1633,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 +1646,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 +1654,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 +1686,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 +1706,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 +1729,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 +1749,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 +1761,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 +1780,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 +1825,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 +1848,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 +1886,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)
+	printf_filtered (_("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");
+	printf_filtered (_("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
+    printf_filtered (_("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)
+    printf_filtered (_("Use '%ps'.\n\n"),
+		     styled_string (title_style.style (),
+				    replacement));
+  else
+    printf_filtered (_("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 +2096,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,20 +2146,11 @@ 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;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-decode.h ./gdb/cli/cli-decode.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-decode.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-decode.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Header file for GDB command decoding library.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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
@@ -27,230 +27,246 @@
 #include "cli-script.h"
 #include "completer.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),
+      var_type (var_boolean),
+      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 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;
+
+  /* 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;
 
-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;
+
+  /* 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 *alias_target = 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;
+
+private:
+  /* Local state (context) for this command.  This can be anything.  */
+  void *m_context = nullptr;
+};
 
 /* Functions that implement commands about CLI commands.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-dump.c ./gdb/cli/cli-dump.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-dump.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-dump.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Dump-to-file commands, for GDB, the GNU debugger.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    Contributed by Red Hat.
 
@@ -129,26 +129,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);
@@ -344,7 +333,7 @@ struct dump_context
 static void
 call_dump_func (struct cmd_list_element *c, const char *args, int from_tty)
 {
-  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 +352,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 +360,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 +374,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,8 +394,8 @@ 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"), 
@@ -425,12 +406,12 @@ restore_section_callback (bfd *ibfd, ase
   /* 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);
@@ -443,26 +424,28 @@ restore_section_callback (bfd *ibfd, ase
 		   (unsigned long) sec_start, 
 		   (unsigned long) sec_end);
 
-  if (data->load_offset != 0 || data->load_start != 0 || data->load_end != 0)
+  if (load_offset != 0 || load_start != 0 || load_end != 0)
     printf_filtered (" into memory (%s to %s)\n",
 		     paddress (target_gdbarch (),
 			       (unsigned long) sec_start
-			       + sec_offset + data->load_offset), 
+			       + sec_offset + load_offset),
 		     paddress (target_gdbarch (),
 			       (unsigned long) sec_start + sec_offset
-				+ data->load_offset + sec_load_count));
+				+ load_offset + sec_load_count));
   else
     puts_filtered ("\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 +463,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 
     ("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 +490,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 +498,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,19 +522,20 @@ 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."));
 	    }
 	}
@@ -561,13 +543,14 @@ restore_command (const char *args, int f
 
   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);
+		     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 +558,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 +591,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-interp.c ./gdb/cli/cli-interp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-interp.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-interp.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI Definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -430,6 +430,14 @@ cli_interp_base::set_logging (ui_file_up
 	  saved_output.file_to_delete = tee;
 	}
 
+      /* Make sure that the call to logfile's dtor does not delete the
+         underlying pointer if we still keep a reference to it.  If
+         logfile_p is not referenced as the file_to_delete, then either
+         the logfile is not used (no redirection) and it should be
+         deleted, or a tee took ownership of the pointer. */
+      if (logfile_p != nullptr && saved_output.file_to_delete == logfile_p)
+	logfile.release ();
+
       gdb_stdout = logging_redirect ? logfile_p : tee;
       gdb_stdlog = debug_redirect ? logfile_p : tee;
       gdb_stderr = logging_redirect ? logfile_p : tee;
@@ -467,20 +475,23 @@ 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::normal_stop.attach (cli_on_normal_stop, "cli-interp");
+  gdb::observers::end_stepping_range.attach (cli_on_end_stepping_range,
+					     "cli-interp");
+  gdb::observers::signal_received.attach (cli_on_signal_received, "cli-interp");
+  gdb::observers::signal_exited.attach (cli_on_signal_exited, "cli-interp");
+  gdb::observers::exited.attach (cli_on_exited, "cli-interp");
+  gdb::observers::no_history.attach (cli_on_no_history, "cli-interp");
+  gdb::observers::sync_execution_done.attach (cli_on_sync_execution_done,
+					      "cli-interp");
+  gdb::observers::command_error.attach (cli_on_command_error, "cli-interp");
   gdb::observers::user_selected_context_changed.attach
-    (cli_on_user_selected_context_changed);
+    (cli_on_user_selected_context_changed, "cli-interp");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-interp.h ./gdb/cli/cli-interp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-interp.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-interp.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI Definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2016-2020 Free Software Foundation, Inc.
+   Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-logging.c ./gdb/cli/cli-logging.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-logging.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-logging.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Command-line output logging for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -165,54 +165,18 @@ set_logging_off (const char *args, int f
   saved_filename = NULL;
 }
 
-static void
-set_logging_command (const char *args, int from_tty)
-{
-  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"));
-}
-
-static void
-show_logging_command (const char *args, int from_tty)
-{
-  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"));
-  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"));
-}
-
+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);
+  add_basic_prefix_cmd ("logging", class_support,
+			_("Set logging options."), &set_logging_cmdlist,
+			0, &setlist);
+  add_show_prefix_cmd ("logging", class_support,
+		       _("Show logging options."), &show_logging_cmdlist,
+		       0, &showlist);
   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."), _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-option.c ./gdb/cli/cli-option.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-option.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-option.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI options framework, for GDB.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-option.h ./gdb/cli/cli-option.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-option.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-option.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI options framework, for GDB.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-script.c ./gdb/cli/cli-script.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-script.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-script.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB CLI command scripting.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -51,6 +51,9 @@ recurse_read_control_structure
 static void do_define_command (const char *comname, int from_tty,
 			       const counted_command_line *commands);
 
+static void do_document_command (const char *comname, int from_tty,
+                                 const counted_command_line *commands);
+
 static const char *read_next_line ();
 
 /* Level of control structure when reading.  */
@@ -71,6 +74,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
@@ -139,6 +145,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 +155,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 +166,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 +181,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 +219,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 +401,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);
@@ -464,6 +469,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);
 }
 
@@ -543,7 +553,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 +561,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;
 
@@ -678,6 +688,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:
       {
@@ -941,7 +957,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 +990,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 +1034,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 +1055,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 +1065,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;
@@ -1079,10 +1087,11 @@ recurse_read_control_structure (gdb::fun
 {
   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 +1102,8 @@ recurse_read_control_structure (gdb::fun
     {
       dont_repeat ();
 
-      next = NULL;
-      val = process_next_line (read_next_line_func (), &next, 
+      next = nullptr;
+      val = process_next_line (read_next_line_func (), &next,
 			       current_cmd->control_type != python_control
 			       && current_cmd->control_type != guile_control
 			       && current_cmd->control_type != compile_control,
@@ -1126,7 +1135,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 +1145,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--;
 
@@ -1222,10 +1236,11 @@ read_command_lines_1 (gdb::function_view
 		      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;
@@ -1255,7 +1270,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 +1278,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 +1349,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 +1391,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 +1403,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 +1414,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 +1444,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 +1470,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 +1480,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 +1494,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.  */
+	  break;
+	default:
+	  /* Should never come here as hookc would be 0.  */
 	  internal_error (__FILE__, __LINE__, _("bad switch"));
-        }
+	}
     }
 }
 
@@ -1507,8 +1517,13 @@ define_command (const char *comname, int
   do_define_command (comname, from_tty, nullptr);
 }
 
+/* Document a user-defined command.  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;
@@ -1518,18 +1533,23 @@ document_command (const char *comname, i
   list = validate_comname (&comname);
 
   tem = comname;
-  c = lookup_cmd (&tem, *list, "", 0, 1);
+  c = lookup_cmd (&tem, *list, "", NULL, 0, 1);
 
   if (c->theclass != class_user)
     error (_("Command \"%s\" is built-in."), comfull);
 
-  std::string prompt = string_printf ("Type documentation for \"%s\".",
-				      comfull);
-  counted_command_line doclines = read_command_lines (prompt.c_str (),
-						      from_tty, 0, 0);
+  counted_command_line doclines;
+
+  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)
-    xfree ((char *) c->doc);
+  xfree ((char *) c->doc);
 
   {
     struct command_line *cl1;
@@ -1553,28 +1573,29 @@ document_command (const char *comname, i
   }
 }
 
+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'
@@ -1645,7 +1665,7 @@ 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 ");
+			c->is_prefix () ? "prefix" : "");
       fprintf_styled (stream, title_style.style (), "%s%s",
 		      prefix, name);
       fprintf_filtered (stream, "\":\n");
@@ -1656,30 +1676,32 @@ show_user_1 (struct cmd_list_element *c,
 	}
     }
 
-  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_cmd_element = add_com ("document", class_support, document_command,
+                                  _("\
 Document a user-defined command.\n\
 Give command 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-script.h ./gdb/cli/cli-script.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-script.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-script.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB CLI command implementation library.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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).  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-setshow.c ./gdb/cli/cli-setshow.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-setshow.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-setshow.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Handle set and show GDB commands.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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
@@ -550,10 +550,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);
@@ -708,17 +708,13 @@ do_show_command (const char *arg, int fr
 
   gdb_assert (c->type == show_cmd);
 
-  /* Possibly call the pre hook.  */
-  if (c->pre_show_hook)
-    (c->pre_show_hook) (c);
-
   std::string val = get_setshow_command_value_string (c);
 
   /* 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)
@@ -733,39 +729,47 @@ do_show_command (const char *arg, int fr
 /* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-setshow.h ./gdb/cli/cli-setshow.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-setshow.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-setshow.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB CLI set and show commands implementation.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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
@@ -60,7 +60,6 @@ extern void do_show_command (const char
 /* Get a string version of C's current value.  */
 extern std::string get_setshow_command_value_string (const cmd_list_element *c);
 
-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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-style.c ./gdb/cli/cli-style.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-style.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-style.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI colorizing
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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;
@@ -98,13 +100,19 @@ 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::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 +168,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,7 +181,7 @@ 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);
+  cli_style_option *cso = (cli_style_option *) cmd->context ();
   fputs_filtered (_("The "), file);
   fprintf_styled (file, cso->style (), _("\"%s\" style"), cso->name ());
   fprintf_filtered (file, _(" %s is: %s\n"), what, value);
@@ -215,66 +223,59 @@ void
 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 + " ";
+  add_basic_prefix_cmd (m_name, no_class, prefix_doc, &m_set_list,
+			0, set_list);
+  add_show_prefix_cmd (m_name, no_class, prefix_doc, &m_show_list,
+		       0, 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);
+    }
 }
 
 static cmd_list_element *style_set_list;
 static 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);
-}
-
-static void
-show_style (const char *arg, int from_tty)
-{
-  cmd_show_list (style_show_list, from_tty, "");
-}
-
-static void
 set_style_enabled  (const char *args, int from_tty, struct cmd_list_element *c)
 {
   g_source_cache.clear ();
@@ -301,29 +302,18 @@ show_style_sources (struct ui_file *file
     fprintf_filtered (file, _("Source code styling is disabled.\n"));
 }
 
-/* Builds the "set style NAME " prefix.  */
-
-static std::string
-set_style_name (const char *name)
-{
-  std::string result ("set style ");
-
-  result += name;
-  result += " ";
-  return result;
-}
-
+void _initialize_cli_style ();
 void
 _initialize_cli_style ()
 {
-  add_prefix_cmd ("style", no_class, set_style, _("\
+  add_basic_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_set_list, 0, &setlist);
+  add_show_prefix_cmd ("style", no_class, _("\
 Style-specific settings.\n\
 Configure various style-related variables, such as colors"),
-		  &style_show_list, "show style ", 0, &showlist);
+		  &style_show_list, 0, &showlist);
 
   add_setshow_boolean_cmd ("enabled", no_class, &cli_styling, _("\
 Set whether CLI styling is enabled."), _("\
@@ -340,84 +330,81 @@ 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)
-
-  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,
-			      _("\
+  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,
-			      _("\
+  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);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-style.h ./gdb/cli/cli-style.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-style.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-style.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI stylizing
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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);
@@ -46,9 +47,7 @@ public:
   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);
 
   /* Return the 'set style NAME' command list, that can be used
@@ -73,9 +72,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;
@@ -126,6 +122,9 @@ 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;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-utils.c ./gdb/cli/cli-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-utils.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI utilities.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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 (value_type (val)->code () == TYPE_CODE_INT)
 	    retval = value_as_long (val);
 	  else
 	    error (_("History value must have integer type."));
@@ -96,7 +96,7 @@ get_number_trailer (const char **pp, int
 
       if (val)	/* Value history reference */
 	{
-	  if (TYPE_CODE (value_type (val)) == TYPE_CODE_INT)
+	  if (value_type (val)->code () == TYPE_CODE_INT)
 	    retval = value_as_long (val);
 	  else
 	    {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-utils.h ./gdb/cli/cli-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli/cli-utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli/cli-utils.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CLI utilities.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli-out.c ./gdb/cli-out.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli-out.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli-out.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Output generating routines for GDB CLI.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    Contributed by Cygnus Solutions.
    Written by Fernando Nasser for Cygnus.
@@ -265,6 +265,107 @@ cli_ui_out::do_redirect (ui_file *outstr
     m_streams.pop_back ();
 }
 
+/* The cli_ui_out::do_progress_* functions result in the following:
+   - printed for tty, SHOULD_PRINT == true:
+     <NAME
+      [#####                      ]\r>
+   - printed for tty, SHOULD_PRINT == false:
+     <>
+   - printed for not-a-tty:
+     <NAME...
+     >
+*/
+
+void
+cli_ui_out::do_progress_start (const std::string &name, bool should_print)
+{
+  struct ui_file *stream = m_streams.back ();
+  cli_progress_info meter;
+
+  meter.last_value = 0;
+  meter.name = name;
+  if (!stream->isatty ())
+    {
+      fprintf_unfiltered (stream, "%s...", meter.name.c_str ());
+      gdb_flush (stream);
+      meter.printing = WORKING;
+    }
+  else
+    {
+      /* Don't actually emit anything until the first call notifies us
+	 of progress.  This makes it so a second progress message can
+	 be started before the first one has been notified, without
+	 messy output.  */
+      meter.printing = should_print ? START : NO_PRINT;
+    }
+
+  m_meters.push_back (std::move (meter));
+}
+
+void
+cli_ui_out::do_progress_notify (double howmuch)
+{
+  struct ui_file *stream = m_streams.back ();
+  cli_progress_info &meter (m_meters.back ());
+
+  if (meter.printing == NO_PRINT)
+    return;
+
+  if (meter.printing == START)
+    {
+      fprintf_unfiltered (stream, "%s\n", meter.name.c_str ());
+      gdb_flush (stream);
+      meter.printing = WORKING;
+    }
+
+  if (meter.printing == WORKING && howmuch >= 1.0)
+    return;
+
+  if (!stream->isatty ())
+    return;
+
+  int chars_per_line = get_chars_per_line ();
+  if (chars_per_line > 0)
+    {
+      int i, max;
+      int width = chars_per_line - 3;
+
+      max = width * howmuch;
+      fprintf_unfiltered (stream, "\r[");
+      for (i = 0; i < width; ++i)
+	fprintf_unfiltered (stream, i < max ? "#" : " ");
+      fprintf_unfiltered (stream, "]");
+      gdb_flush (stream);
+      meter.printing = PROGRESS;
+    }
+}
+
+void
+cli_ui_out::do_progress_end ()
+{
+  struct ui_file *stream = m_streams.back ();
+  cli_progress_info &meter = m_meters.back ();
+
+  if (!stream->isatty ())
+    {
+      fprintf_unfiltered (stream, "\n");
+      gdb_flush (stream);
+    }
+  else if (meter.printing == PROGRESS)
+    {
+      int i;
+      int width = get_chars_per_line () - 3;
+
+      fprintf_unfiltered (stream, "\r");
+      for (i = 0; i < width + 2; ++i)
+	fprintf_unfiltered (stream, " ");
+      fprintf_unfiltered (stream, "\r");
+      gdb_flush (stream);
+    }
+
+  m_meters.pop_back ();
+}
+
 /* local functions */
 
 void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli-out.h ./gdb/cli-out.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cli-out.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cli-out.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Output generating routines for GDB CLI.
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions.
 
    This file is part of GDB.
@@ -71,6 +71,10 @@ protected:
   virtual void do_flush () override;
   virtual void do_redirect (struct ui_file *outstream) override;
 
+  virtual void do_progress_start (const std::string &, bool) override;
+  virtual void do_progress_notify (double) override;
+  virtual void do_progress_end () override;
+
   bool suppress_output ()
   { return m_suppress_output; }
 
@@ -80,6 +84,33 @@ private:
 
   std::vector<ui_file *> m_streams;
   bool m_suppress_output;
+
+  /* Represents the printing state of a progress meter.  */
+  enum meter_state
+  {
+    /* Printing will start with the next output.  */
+    START,
+    /* Printing has already started.  */
+    WORKING,
+    /* Progress printing has already started.  */
+    PROGRESS,
+    /* Printing should not be done.  */
+    NO_PRINT
+  };
+
+  /* The state of a recent progress meter.  */
+  struct cli_progress_info
+  {
+    /* The current state.  */
+    enum meter_state printing;
+    /* The name to print.  */
+    std::string name;
+    /* The last notification value.  */
+    double last_value;
+  };
+
+  /* Stack of progress meters.  */
+  std::vector<cli_progress_info> m_meters;
 };
 
 extern cli_ui_out *cli_out_new (struct ui_file *stream);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/coff-pe-read.c ./gdb/coff-pe-read.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/coff-pe-read.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/coff-pe-read.c	2021-12-16 01:57:39.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-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -133,7 +133,7 @@ get_section_vmas (bfd *abfd, asection *s
   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.  */
+	 bfd_get_section_vma() within memory.  Store the offset.  */
 
       sections[sectix].vma_offset
 	= bfd_section_vma (sectp) - sections[sectix].rva_start;
@@ -246,7 +246,7 @@ add_pe_forwarded_sym (minimal_symbol_rea
 
   vma = BMSYMBOL_VALUE_ADDRESS (msymbol);
   msymtype = MSYMBOL_TYPE (msymbol.minsym);
-  section = MSYMBOL_SECTION (msymbol.minsym);
+  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,7 +266,7 @@ 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));
+  baseaddr = objfile->text_section_offset ();
 
   reader.record_with_info (qualified_name.c_str (), vma - baseaddr, msymtype,
 			   section);
@@ -342,7 +342,7 @@ 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;
+  char *dll_name = (char *) bfd_get_filename (dll);
   int otherix = PE_SECTION_TABLE_SIZE;
   int is_pe64 = 0;
   int is_pe32 = 0;
@@ -441,6 +441,12 @@ read_pe_exported_syms (minimal_symbol_re
 	}
     }
 
+  if (expptr == 0)
+    {
+      /* no section contains export table rva */
+      return;
+    }
+
   export_rva = export_opthdrrva;
   export_size = export_opthdrsize;
 
@@ -543,7 +549,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;
@@ -685,8 +691,9 @@ show_debug_coff_pe_read (struct ui_file
 
 /* 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/coff-pe-read.h ./gdb/coff-pe-read.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/coff-pe-read.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/coff-pe-read.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Interface to coff-pe-read.c (portable-executable-specific symbol reader).
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/coffread.c ./gdb/coffread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/coffread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/coffread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Read coff symbol tables and convert to internal format, for GDB.
-   Copyright (C) 1987-2020 Free Software Foundation, Inc.
+   Copyright (C) 1987-2021 Free Software Foundation, Inc.
    Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu).
 
    This file is part of GDB.
@@ -36,6 +36,7 @@
 #include "target.h"
 #include "block.h"
 #include "dictionary.h"
+#include "dwarf2/public.h"
 
 #include "coff-pe-read.h"
 
@@ -155,8 +156,8 @@ 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;
 
@@ -188,23 +189,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 +242,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;
@@ -540,9 +541,9 @@ coff_symfile_read (struct objfile *objfi
   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.  */
@@ -610,10 +611,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.  */
@@ -659,7 +660,7 @@ coff_symfile_read (struct objfile *objfi
 		  int lead = bfd_get_symbol_leading_char (objfile->obfd);
 		  struct bound_minimal_symbol found;
 
-                  if (lead != '\0' && *name1 == lead)
+		  if (lead != '\0' && *name1 == lead)
 		    name1 += 1;
 
 		  found = lookup_minimal_symbol (name1, NULL, objfile);
@@ -688,7 +689,7 @@ coff_symfile_read (struct objfile *objfi
 	}
 
       /* FIXME: dubious.  Why can't we use something normal like
-         bfd_get_section_contents?  */
+	 bfd_get_section_contents?  */
       bfd_seek (abfd, abfd->where, 0);
 
       stabstrsize = bfd_section_size (info->stabstrsect);
@@ -707,7 +708,7 @@ coff_symfile_read (struct objfile *objfi
   dwarf2_build_frame_info (objfile);
 
   /* Try to add separate debug file if no symbols table found.   */
-  if (!objfile_has_partial_symbols (objfile))
+  if (!objfile->has_partial_symbols ())
     {
       std::string debugfile = find_separate_debug_file_by_buildid (objfile);
 
@@ -750,10 +751,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;
@@ -796,7 +797,7 @@ coff_symtab_read (minimal_symbol_reader
   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, symtab_offset, 0);
   if (val < 0)
     perror_with_name (objfile_name (objfile));
 
@@ -919,8 +920,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;
 		}
@@ -967,26 +968,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)
 		  {
@@ -1026,7 +1027,7 @@ 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_section_index (sec);
 	      }
 	  }
 	  break;
@@ -1039,7 +1040,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 +1048,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 +1062,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,12 +1096,12 @@ 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,
@@ -1113,8 +1114,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 +1123,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 +1146,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);
@@ -1218,7 +1215,7 @@ read_one_sym (struct coff_symbol *cs,
 			    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);
@@ -1274,7 +1271,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;
@@ -1321,7 +1318,7 @@ 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.  */
+	 seeing whether offset points to within the stringtab.  */
       result = stringtab + symbol_entry->_n._n_n._n_offset;
     }
   else
@@ -1370,7 +1367,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;
@@ -1403,10 +1400,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 +1411,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,8 +1438,7 @@ 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));
+	  addr += objfile->text_section_offset ();
 	  record_line (get_current_subfile (),
 		       first_line + L_LNNO32 (&lptr),
 		       gdbarch_addr_bits_remove (gdbarch, addr));
@@ -1457,24 +1453,21 @@ patch_type (struct type *type, struct ty
 {
   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);
+  int field_size = real_target->num_fields () * 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);
+  target->set_num_fields (real_target->num_fields ());
+
+  field *fields = (struct field *) TYPE_ALLOC (target, field_size);
+  memcpy (fields, real_target->fields (), field_size);
+  target->set_fields (fields);
 
-  if (TYPE_NAME (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 ()));
     }
 }
 
@@ -1494,12 +1487,12 @@ patch_opaque_types (struct symtab *s)
   ALL_BLOCK_SYMBOLS (b, iter, real_sym)
     {
       /* 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.  */
+	 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
+	  && SYMBOL_TYPE (real_sym)->code () == TYPE_CODE_PTR
 	  && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
 	{
 	  const char *name = real_sym->linkage_name ();
@@ -1561,24 +1554,23 @@ 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);
+  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_section_index (cs_to_section (cs, objfile));
 
   if (ISFCN (cs->c_type))
     {
-      SYMBOL_VALUE (sym) += ANOFFSET (objfile->section_offsets,
-				      SECT_OFF_TEXT (objfile));
+      SYMBOL_VALUE (sym) += objfile->text_section_offset ();
       SYMBOL_TYPE (sym) =
 	lookup_function_type (decode_function_type (cs, cs->c_type,
 						    aux, objfile));
@@ -1610,8 +1602,7 @@ process_coff_symbol (struct coff_symbol
 	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
 	  SET_SYMBOL_VALUE_ADDRESS (sym,
 				    (CORE_ADDR) cs->c_value
-				    + ANOFFSET (objfile->section_offsets,
-						SECT_OFF_TEXT (objfile)));
+				    + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
 	  add_symbol_to_list (sym, get_global_symbols ());
 	  break;
 
@@ -1621,8 +1612,7 @@ process_coff_symbol (struct coff_symbol
 	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
 	  SET_SYMBOL_VALUE_ADDRESS (sym,
 				    (CORE_ADDR) cs->c_value
-				    + ANOFFSET (objfile->section_offsets,
-						SECT_OFF_TEXT (objfile)));
+				    + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
 	  if (within_function)
 	    {
 	      /* Static symbol of local scope.  */
@@ -1666,10 +1656,10 @@ process_coff_symbol (struct coff_symbol
 	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
 
 	  /* If type has no name, give it one.  */
-	  if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
+	  if (SYMBOL_TYPE (sym)->name () == 0)
 	    {
-	      if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
-		  || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC)
+	      if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
+		  || SYMBOL_TYPE (sym)->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 +1682,7 @@ process_coff_symbol (struct coff_symbol
 		  ;
 		}
 	      else
-		TYPE_NAME (SYMBOL_TYPE (sym)) =
-		  xstrdup (sym->linkage_name ());
+		SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ()));
 	    }
 
 	  /* Keep track of any type which points to empty structured
@@ -1702,10 +1691,10 @@ 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
+	  if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
 	      && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
-	      && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym)))
-	         != TYPE_CODE_UNDEF)
+	      && TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))->code ()
+	      != TYPE_CODE_UNDEF)
 	    {
 	      int i = hashname (sym->linkage_name ());
 
@@ -1724,11 +1713,11 @@ process_coff_symbol (struct coff_symbol
 	  /* 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 (SYMBOL_TYPE (sym)->name () == 0)
 	    if (sym->linkage_name () != NULL
 		&& *sym->linkage_name () != '~'
 		&& *sym->linkage_name () != '.')
-	      TYPE_NAME (SYMBOL_TYPE (sym)) = xstrdup (sym->linkage_name ());
+	      SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ()));
 
 	  add_symbol_to_list (sym, get_file_symbols ());
 	  break;
@@ -1842,7 +1831,7 @@ 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)
@@ -1888,12 +1877,12 @@ decode_base_type (struct coff_symbol *cs
 	{
 	  /* 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_fields (nullptr);
+	  type->set_num_fields (0);
 	}
       else
 	{
@@ -1909,11 +1898,11 @@ 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_fields (nullptr);
+	  type->set_num_fields (0);
 	}
       else
 	{
@@ -1922,7 +1911,7 @@ decode_base_type (struct coff_symbol *cs
 					aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
 					objfile);
 	}
-      TYPE_CODE (type) = TYPE_CODE_UNION;
+      type->set_code (TYPE_CODE_UNION);
       return type;
 
     case T_ENUM:
@@ -1930,11 +1919,11 @@ 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->set_code (TYPE_CODE_ENUM);
+	  type->set_name (NULL);
 	  TYPE_LENGTH (type) = 0;
-	  TYPE_FIELDS (type) = 0;
-	  TYPE_NFIELDS (type) = 0;
+	  type->set_fields (nullptr);
+	  type->set_num_fields (0);
 	}
       else
 	{
@@ -1998,7 +1987,7 @@ 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;
 
@@ -2020,8 +2009,8 @@ coff_read_struct_type (int index, int le
 
 	  /* 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);
+	  list->field.set_type (decode_type (ms, ms->c_type, &sub_aux,
+					     objfile));
 	  SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
 	  FIELD_BITSIZE (list->field) = 0;
 	  nfields++;
@@ -2036,8 +2025,8 @@ coff_read_struct_type (int index, int le
 
 	  /* 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);
+	  list->field.set_type (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;
 	  nfields++;
@@ -2050,14 +2039,14 @@ 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->set_num_fields (nfields);
+  type->set_fields
+    ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * 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 +2059,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;
@@ -2103,7 +2092,7 @@ coff_read_enum_type (int index, int leng
       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);
@@ -2129,10 +2118,10 @@ coff_read_enum_type (int index, int leng
     TYPE_LENGTH (type) = 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_code (TYPE_CODE_ENUM);
+  type->set_num_fields (nsyms);
+  type->set_fields
+    ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * 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
@@ -2154,7 +2143,7 @@ coff_read_enum_type (int index, int leng
 
 	  SYMBOL_TYPE (xsym) = type;
 	  TYPE_FIELD_NAME (type, n) = xsym->linkage_name ();
-	  SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
+	  SET_FIELD_ENUMVAL (type->field (n), SYMBOL_VALUE (xsym));
 	  if (SYMBOL_VALUE (xsym) < 0)
 	    unsigned_enum = 0;
 	  TYPE_FIELD_BITSIZE (type, n) = 0;
@@ -2164,7 +2153,7 @@ coff_read_enum_type (int index, int leng
     }
 
   if (unsigned_enum)
-    TYPE_UNSIGNED (type) = 1;
+    type->set_is_unsigned (true);
 
   return type;
 }
@@ -2179,7 +2168,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 +2179,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/command.h ./gdb/command.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/command.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/command.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Header file for command creation.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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,35 +29,47 @@ 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 */
+  class_deprecated = -3,
+  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
@@ -162,10 +174,6 @@ extern struct cmd_list_element *add_cmd_
 			 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 **);
-
 extern struct cmd_list_element *add_alias_cmd (const char *,
 					       cmd_list_element *,
 					       enum command_class, int,
@@ -176,14 +184,28 @@ extern struct cmd_list_element *add_pref
 						cmd_const_cfunc_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 **);
+
 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,
+			 const char *doc, struct cmd_list_element **subcommands,
+			 int allow_unknown,
 			 struct cmd_list_element **list,
 			 int *suppress_notification);
 
@@ -192,7 +214,7 @@ extern struct cmd_list_element *add_abbr
 						       cmd_const_cfunc_ftype *fun,
 						       const char *,
 						       struct cmd_list_element
-						       **, const char *, int,
+						       **, int,
 						       struct cmd_list_element
 						       **);
 
@@ -231,38 +253,92 @@ extern void set_cmd_completer_handle_brk
 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);
-
-
 /* 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
    hook, the call is silently ignored.  */
 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,
@@ -273,8 +349,10 @@ extern struct cmd_list_element *add_com
 					 cmd_const_cfunc_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,
@@ -285,8 +363,9 @@ extern struct cmd_list_element *add_info
 					  cmd_const_cfunc_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,
@@ -312,145 +391,89 @@ typedef void (show_value_ftype) (struct
    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);
+/* Return value type for the add_setshow_* functions.  */
+
+struct set_show_commands
+{
+  cmd_list_element *set, *show;
+};
+
+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_const_sfunc_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, 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,
+   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_const_sfunc_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, 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, cmd_list_element **set_list,
+   cmd_list_element **show_list);
+
+extern set_show_commands add_setshow_string_cmd
+  (const char *name, 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, 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, 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, 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, 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, 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_const_sfunc_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, 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,
+   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_const_sfunc_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, 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,
+   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_const_sfunc_ftype *set_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 +532,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile.c ./gdb/compile/compile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* General Compile and inject code
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -43,6 +43,7 @@
 #include "gdbsupport/gdb_optional.h"
 #include "gdbsupport/gdb_unlinker.h"
 #include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_ignore_signal.h"
 
 
 
@@ -493,33 +494,18 @@ get_expr_block_and_pc (CORE_ADDR *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;
 
-/* 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);
 }
 
 /* Implement 'show compile-args'.  */
@@ -533,21 +519,6 @@ show_compile_args (struct ui_file *file,
 		    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;
-}
-
 /* String for 'set compile-gcc' and 'show compile-gcc'.  */
 static char *compile_gcc;
 
@@ -586,10 +557,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 +570,6 @@ filter_args (int *argcp, char **argv)
       if (strcmp (*argv, "-fpreprocessed") == 0)
 	{
 	  xfree (*argv);
-	  (*argcp)--;
 	  continue;
 	}
       *destv++ = *argv;
@@ -627,35 +597,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;
 
-  build_argc_argv (gdbarch_gcc_target_options (gdbarch).c_str (),
-		   argcp, argvp);
+  std::string gcc_options = gdbarch_gcc_target_options (gdbarch);
+
+  /* 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
@@ -677,13 +644,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 +656,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,8 +689,8 @@ 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 ());
 
@@ -747,17 +710,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 ());
@@ -791,6 +756,10 @@ compile_to_object (struct command_line *
     fprintf_unfiltered (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 ());
   ok = compiler->compile (fnames.object_file (), compile_debug);
@@ -822,14 +791,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 +810,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 +892,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 +926,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);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c.h ./gdb/compile/compile-c.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-c.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB compile C-language support.
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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
@@ -66,7 +66,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-cplus.h ./gdb/compile/compile-cplus.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-cplus.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-cplus.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB compile C++ language support.
-   Copyright (C) 2016-2020 Free Software Foundation, Inc.
+   Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-cplus-symbols.c ./gdb/compile/compile-cplus-symbols.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-cplus-symbols.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-cplus-symbols.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert symbols from GDB to GCC
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,7 +30,7 @@
 #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"
@@ -73,9 +73,9 @@ convert_one_symbol (compile_cplus_instan
       switch (SYMBOL_CLASS (sym.symbol))
 	{
 	case LOC_TYPEDEF:
-	  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_TYPEDEF)
+	  if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_TYPEDEF)
 	    kind = GCC_CP_SYMBOL_TYPEDEF;
-	  else  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_NAMESPACE)
+	  else  if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_NAMESPACE)
 	    return;
 	  break;
 
@@ -88,13 +88,13 @@ convert_one_symbol (compile_cplus_instan
 	  {
 	    kind = GCC_CP_SYMBOL_FUNCTION;
 	    addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym.symbol));
-	    if (is_global && TYPE_GNU_IFUNC (SYMBOL_TYPE (sym.symbol)))
+	    if (is_global && SYMBOL_TYPE (sym.symbol)->is_gnu_ifunc ())
 	      addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
 	  }
 	  break;
 
 	case LOC_CONST:
-	  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_ENUM)
+	  if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_ENUM)
 	    {
 	      /* Already handled by convert_enum.  */
 	      return;
@@ -208,7 +208,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.  */
@@ -323,7 +323,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 ("");
 }
@@ -442,7 +442,7 @@ gcc_cplus_symbol_address (void *datum, s
 				"gcc_symbol_address \"%s\": full symbol\n",
 				identifier);
 	  result = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
-	  if (TYPE_GNU_IFUNC (SYMBOL_TYPE (sym)))
+	  if (SYMBOL_TYPE (sym)->is_gnu_ifunc ())
 	    result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
 	  found = 1;
 	}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-cplus-types.c ./gdb/compile/compile-cplus-types.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-cplus-types.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-cplus-types.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert types from GDB to GCC
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -88,10 +88,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.  */
@@ -161,7 +161,7 @@ type_name_to_scope (const char *type_nam
 
 	  scope.push_back (comp);
 
-	  if (TYPE_CODE (SYMBOL_TYPE (bsymbol.symbol)) != TYPE_CODE_NAMESPACE)
+	  if (SYMBOL_TYPE (bsymbol.symbol)->code () != TYPE_CODE_NAMESPACE)
 	    {
 	      /* We're done.  */
 	      break;
@@ -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 (SYMBOL_TYPE (comp.bsymbol.symbol)->code ()
 		      == TYPE_CODE_NAMESPACE);
 
 	  const char *ns = (comp.name == CP_ANONYMOUS_NAMESPACE_STR ? nullptr
@@ -313,7 +313,7 @@ compile_cplus_instance::leave_scope ()
       std::for_each
 	(current.begin (),current.end () - 1,
 	 [this] (const scope_component &comp) {
-	  gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol))
+	  gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code ()
 		      == TYPE_CODE_NAMESPACE);
 	  this->plugin ().pop_binding_level (comp.name.c_str ());
 	});
@@ -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 (), VAR_DOMAIN, nullptr)
 	      };
 	  scope.push_back (comp);
 	}
@@ -413,7 +413,7 @@ compile_cplus_convert_reference (compile
   gcc_type target = instance->convert_type (TYPE_TARGET_TYPE (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;
@@ -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);
+  struct type *range = type->index_type ();
   gcc_type element_type = instance->convert_type (TYPE_TARGET_TYPE (type));
 
-  if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST)
+  if (range->bounds ()->low.kind () != PROP_CONST)
     {
       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,7 +580,7 @@ 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);
 
@@ -593,9 +593,9 @@ 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 (field_is_static (&type->field (i)))
 	{
 	  CORE_ADDR physaddr;
 
@@ -648,7 +648,7 @@ compile_cplus_convert_struct_or_union_me
 	    | get_field_access_flag (type, i);
 
 	  if (bitsize == 0)
-	    bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, i));
+	    bitsize = 8 * TYPE_LENGTH (type->field (i).type ());
 
 	  instance->plugin ().build_field
 	    (field_name, field_type, field_flags, bitsize,
@@ -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.  */
@@ -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;
 		}
@@ -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);
 	}
     }
@@ -807,10 +807,10 @@ compile_cplus_convert_struct_or_union (c
 
   /* 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);
     }
@@ -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,13 +919,13 @@ 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),
+    = instance->plugin ().get_int_type (type->is_unsigned (),
 					TYPE_LENGTH (type), nullptr);
   gcc_type result
     = instance->plugin ().start_enum_type (name.get (), int_type,
@@ -938,7 +934,7 @@ 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));
@@ -964,7 +960,7 @@ static gcc_type
 compile_cplus_convert_func (compile_cplus_instance *instance,
 			    struct type *type, bool strip_artificial)
 {
-  int is_varargs = TYPE_VARARGS (type);
+  int is_varargs = type->has_varargs ();
   struct type *target_type = TYPE_TARGET_TYPE (type);
 
   /* Functions with no debug info have no return type.  Ideally we'd
@@ -974,10 +970,10 @@ 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;
+      if (type->is_objfile_owned ())
+	target_type = objfile_type (type->objfile_owner ())->builtin_int;
       else
-	target_type = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+	target_type = builtin_type (type->arch_owner ())->builtin_int;
       warning (_("function has unknown return type; assuming int"));
     }
 
@@ -985,10 +981,10 @@ 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 = { 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))
 	{
@@ -998,7 +994,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 +1002,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 +1010,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);
       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), type->name ());
 }
 
 /* Convert a floating-point type to its gcc representation.  */
@@ -1032,7 +1027,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), type->name ());
 }
 
 /* Convert the 'void' type to its gcc representation.  */
@@ -1060,7 +1055,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;
 }
@@ -1102,9 +1097,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 +1130,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 +1193,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 ());
 }
@@ -1404,6 +1399,7 @@ gcc_cp_plugin::pop_binding_level (const
   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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c-support.c ./gdb/compile/compile-c-support.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c-support.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-c-support.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* C/C++ language support for compilation.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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::unique_ptr<compile_instance> (new 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
@@ -213,7 +213,7 @@ 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;
@@ -221,7 +221,7 @@ generate_register_struct (struct ui_file
   fputs_unfiltered ("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])
@@ -242,7 +242,7 @@ generate_register_struct (struct ui_file
 	       maximally-aligned array of the correct size.  */
 
 	    fputs_unfiltered ("  ", stream);
-	    switch (TYPE_CODE (regtype))
+	    switch (regtype->code ())
 	      {
 	      case TYPE_CODE_PTR:
 		fprintf_filtered (stream, "__gdb_uintptr %s",
@@ -256,7 +256,7 @@ generate_register_struct (struct ui_file
 
 		  if (mode != NULL)
 		    {
-		      if (TYPE_UNSIGNED (regtype))
+		      if (regtype->is_unsigned ())
 			fputs_unfiltered ("unsigned ", stream);
 		      fprintf_unfiltered (stream,
 					  "int %s"
@@ -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);
@@ -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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c-symbols.c ./gdb/compile/compile-c-symbols.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c-symbols.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-c-symbols.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert symbols from GDB to GCC
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,7 @@
 #include "value.h"
 #include "exceptions.h"
 #include "gdbtypes.h"
-#include "dwarf2loc.h"
+#include "dwarf2/loc.h"
 
 
 
@@ -94,12 +94,12 @@ convert_one_symbol (compile_c_instance *
 	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)))
+	  if (is_global && SYMBOL_TYPE (sym.symbol)->is_gnu_ifunc ())
 	    addr = gnu_ifunc_resolve_addr (target_gdbarch (), addr);
 	  break;
 
 	case LOC_CONST:
-	  if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_ENUM)
+	  if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_ENUM)
 	    {
 	      /* Already handled by convert_enum.  */
 	      return;
@@ -405,7 +405,7 @@ gcc_symbol_address (void *datum, struct
 				"gcc_symbol_address \"%s\": full symbol\n",
 				identifier);
 	  result = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
-	  if (TYPE_GNU_IFUNC (SYMBOL_TYPE (sym)))
+	  if (SYMBOL_TYPE (sym)->is_gnu_ifunc ())
 	    result = gnu_ifunc_resolve_addr (target_gdbarch (), result);
 	  found = 1;
 	}
@@ -487,7 +487,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)
@@ -497,14 +497,14 @@ generate_vla_size (compile_instance *com
   if (TYPE_IS_REFERENCE (type))
     type = check_typedef (TYPE_TARGET_TYPE (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,7 +516,7 @@ 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);
       break;
@@ -526,10 +526,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 (!field_is_static (&type->field (i)))
 	    generate_vla_size (compiler, stream, gdbarch, registers_used, pc,
-			       TYPE_FIELD_TYPE (type, i), sym);
+			       type->field (i).type (), sym);
       }
       break;
     }
@@ -541,7 +541,7 @@ 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)
 {
@@ -606,7 +606,7 @@ 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,
@@ -618,10 +618,9 @@ generate_c_for_variable_locations (compi
   /* 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.  */
@@ -641,7 +640,7 @@ generate_c_for_variable_locations (compi
 	{
 	  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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c-types.c ./gdb/compile/compile-c-types.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-c-types.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-c-types.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert types from GDB to GCC
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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));
 
-  if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST)
+  if (range->bounds ()->low.kind () != PROP_CONST)
     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,23 +94,23 @@ 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);
 
-      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_LENGTH (type->field (i).type ());
       context->plugin ().build_add_field (result,
 					  TYPE_FIELD_NAME (type, i),
 					  field_type,
@@ -130,11 +130,11 @@ convert_enum (compile_c_instance *contex
   gcc_type int_type, result;
   int i;
 
-  int_type = context->plugin ().int_type_v0 (TYPE_UNSIGNED (type),
+  int_type = context->plugin ().int_type_v0 (type->is_unsigned (),
 					     TYPE_LENGTH (type));
 
   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));
@@ -153,7 +153,7 @@ 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);
 
@@ -164,10 +164,10 @@ 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;
+      if (type->is_objfile_owned ())
+	target_type = objfile_type (type->objfile_owner ())->builtin_int;
       else
-	target_type = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+	target_type = builtin_type (type->arch_owner ())->builtin_int;
       warning (_("function has unknown return type; assuming int"));
     }
 
@@ -175,14 +175,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,17 +194,17 @@ 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);
 	  return context->plugin ().char_type ();
 	}
-      return context->plugin ().int_type (TYPE_UNSIGNED (type),
+      return context->plugin ().int_type (type->is_unsigned (),
 					  TYPE_LENGTH (type),
-					  TYPE_NAME (type));
+					  type->name ());
     }
   else
-    return context->plugin ().int_type_v0 (TYPE_UNSIGNED (type),
+    return context->plugin ().int_type_v0 (type->is_unsigned (),
 					   TYPE_LENGTH (type));
 }
 
@@ -215,7 +215,7 @@ convert_float (compile_c_instance *conte
 {
   if (context->plugin ().version () >= GCC_C_FE_VERSION_1)
     return context->plugin ().float_type (TYPE_LENGTH (type),
-					  TYPE_NAME (type));
+					  type->name ());
   else
     return context->plugin ().float_type_v0 (TYPE_LENGTH (type));
 }
@@ -254,7 +254,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.  */
@@ -277,12 +278,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);
@@ -322,10 +323,10 @@ convert_type_basic (compile_c_instance *
 	   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;
+	if (type->is_objfile_owned ())
+	  fallback = objfile_type (type->objfile_owner ())->builtin_int;
 	else
-	  fallback = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+	  fallback = builtin_type (type->arch_owner ())->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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile.h ./gdb/compile/compile.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Header file for Compile and inject module.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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 @@
 struct ui_file;
 struct gdbarch;
 struct dwarf2_per_cu_data;
+struct dwarf2_per_objfile;
 struct symbol;
 struct dynamic_prop;
 
@@ -53,6 +54,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 +64,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 +93,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 +103,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-internal.h ./gdb/compile/compile-internal.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-internal.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-internal.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file for GDB compile command and supporting functions.
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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
@@ -96,7 +96,8 @@ public:
 
   /* 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);
+  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);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-loc2c.c ./gdb/compile/compile-loc2c.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-loc2c.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-loc2c.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Convert a DWARF location expression to C
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,15 +19,16 @@
 
 #include "defs.h"
 #include "dwarf2.h"
-#include "dwarf2expr.h"
-#include "dwarf2loc.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 +434,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));
+  fprintf_filtered (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 +450,13 @@ pushf (int indent, string_file *stream,
 {
   va_list args;
 
-  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos + 1] = ");
+  fprintf_filtered (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");
+  fprintf_filtered (stream, "%*s++__gdb_tos;\n", indent, "");
 }
 
 /* Emit code for a unary expression -- one which operates in-place on
@@ -469,7 +470,7 @@ unary (int indent, string_file *stream,
 {
   va_list args;
 
-  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos] = ");
+  fprintf_filtered (stream, "%*s__gdb_stack[__gdb_tos] = ", indent, "");
   va_start (args, format);
   stream->vprintf (format, args);
   va_end (args);
@@ -486,12 +487,12 @@ binary (int indent, string_file *stream,
 {
   va_list args;
 
-  fprintfi_filtered (indent, stream, "__gdb_stack[__gdb_tos - 1] = ");
+  fprintf_filtered (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");
+  fprintf_filtered (stream, "%*s--__gdb_tos;\n", indent, "");
 }
 
 /* Print the name of a label given its "SCOPE", an arbitrary integer
@@ -504,18 +505,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 +543,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 +593,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 +613,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");
+  fprintf_filtered (stream, "%*s__attribute__ ((unused)) %s %s;\n",
+		    indent, "", type_name, result_name);
+  fprintf_filtered (stream, "%*s{\n", indent, "");
   indent += 2;
 
   stack_depth = compute_stack_depth (byte_order, addr_size,
@@ -635,19 +651,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");
+      fprintf_filtered (stream, "%*s%s = %s;\n",
+			indent, "", result_name,
+			core_addr_to_string (value_address (val)));
+      fprintf_filtered (stream, "%*s}\n", indent - 2, "");
       return;
     }
 
-  fprintfi_filtered (indent, stream, GCC_UINTPTR " __gdb_stack[%d];\n",
-		     stack_depth);
+  fprintf_filtered (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");
+    fprintf_filtered (stream, "%*s" GCC_UINTPTR " __gdb_tmp;\n", indent, "");
+  fprintf_filtered (stream, "%*sint __gdb_tos = -1;\n", indent, "");
 
   if (initial != NULL)
     pushf (indent, stream, "%s", core_addr_to_string (*initial));
@@ -718,7 +734,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;
 
@@ -895,7 +911,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 +922,7 @@ do_compile_dwarf_expr_to_c (int indent,
 	  break;
 
 	case DW_OP_drop:
-	  fprintfi_filtered (indent, stream, "--__gdb_tos;\n");
+	  fprintf_filtered (stream, "%*s--__gdb_tos;\n", indent, "");
 	  break;
 
 	case DW_OP_pick:
@@ -916,13 +932,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"));
+	  fprintf_filtered (stream,
+			    "%*s__gdb_tmp = __gdb_stack[__gdb_tos - 1];\n",
+			    indent, "");
+	  fprintf_filtered (stream,
+			    "%*s__gdb_stack[__gdb_tos - 1] = "
+			    "__gdb_stack[__gdb_tos];\n",
+			    indent, "");
+	  fprintf_filtered (stream, ("%*s__gdb_stack[__gdb_tos] = "
+				     "__gdb_tmp;\n"),
+			    indent, "");
 	  break;
 
 	case DW_OP_over:
@@ -930,16 +949,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");
+	  fprintf_filtered (stream, ("%*s__gdb_tmp = "
+				     "__gdb_stack[__gdb_tos];\n"),
+			    indent, "");
+	  fprintf_filtered (stream,
+			    "%*s__gdb_stack[__gdb_tos] = "
+			    "__gdb_stack[__gdb_tos - 1];\n",
+			    indent, "");
+	  fprintf_filtered (stream,
+			    "%*s__gdb_stack[__gdb_tos - 1] = "
+			    "__gdb_stack[__gdb_tos -2];\n",
+			    indent, "");
+	  fprintf_filtered (stream, "%*s__gdb_stack[__gdb_tos - 2] = "
+			    "__gdb_tmp;\n",
+			    indent, "");
 	  break;
 
 	case DW_OP_deref:
@@ -960,11 +983,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);
+	    fprintf_filtered (stream,
+			      "%*s__gdb_stack[__gdb_tos] = "
+			      "*((__gdb_int_%s *) "
+			      "__gdb_stack[__gdb_tos]);\n",
+			      indent, "", mode);
 	  }
 	  break;
 
@@ -1076,7 +1099,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 +1109,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 ");
+	  fprintf_filtered (stream, "%*sgoto ", indent, "");
 	  print_label (stream, scope, op_ptr + offset - base);
 	  stream->puts (";\n");
 	  break;
@@ -1094,9 +1117,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 ");
+	  fprintf_filtered (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 +1133,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");
+  fprintf_filtered (stream, "%*s%s = __gdb_stack[__gdb_tos];\n",
+		    indent, "", result_name);
+  fprintf_filtered (stream, "%*s}\n", indent - 2, "");
 }
 
 /* See compile.h.  */
@@ -1119,14 +1143,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 +1162,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-load.c ./gdb/compile/compile-object-load.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-load.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-object-load.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Load module for 'compile' command.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -62,34 +62,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;
 
@@ -112,7 +128,7 @@ setup_sections (bfd *abfd, asection *sec
       if (compile_debug)
 	fprintf_unfiltered (gdb_stdlog,
 			    "module \"%s\" section \"%s\" size %s prot %u\n",
-			    bfd_get_filename (abfd),
+			    bfd_get_filename (m_bfd),
 			    bfd_section_name (sect),
 			    paddress (target_gdbarch (),
 				      bfd_section_size (sect)),
@@ -122,55 +138,55 @@ setup_sections (bfd *abfd, asection *sec
     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 (target_gdbarch (), 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 (), m_last_size),
 				paddress (target_gdbarch (), addr),
-				data->last_prot);
+				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 (target_gdbarch (), 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 +208,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"),
@@ -402,6 +418,9 @@ get_out_value_type (struct symbol *func_
   int nblocks = 0;
   int block_loop = 0;
 
+  lookup_name_info func_matcher (GCC_FE_WRAPPER_FUNCTION,
+				 symbol_name_match_type::SEARCH_NAME);
+
   bv = SYMTAB_BLOCKVECTOR (func_sym->owner.symtab);
   nblocks = BLOCKVECTOR_NBLOCKS (bv);
 
@@ -433,13 +452,11 @@ get_out_value_type (struct symbol *func_
       if (function != NULL
 	  && (BLOCK_SUPERBLOCK (function_block)
 	      == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
-	  && (strcmp_iw (function->linkage_name (),
-			 GCC_FE_WRAPPER_FUNCTION)
-	      == 0))
+	  && 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 = check_typedef (gdb_type);
@@ -451,7 +468,7 @@ get_out_value_type (struct symbol *func_
     error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
   gdb_ptr_type = SYMBOL_TYPE (gdb_ptr_type_sym);
   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));
 
@@ -463,14 +480,14 @@ 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);
@@ -480,7 +497,7 @@ get_out_value_type (struct symbol *func_
     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,
@@ -504,21 +521,21 @@ get_regs_type (struct symbol *func_sym,
   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)
+  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;
@@ -533,14 +550,14 @@ store_regs (struct type *regs_type, CORE
   struct gdbarch *gdbarch = target_gdbarch ();
   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);
       ULONGEST reg_offset;
-      struct type *reg_type = check_typedef (TYPE_FIELD_TYPE (regs_type,
-							      fieldno));
+      struct type *reg_type
+	= check_typedef (regs_type->field (fieldno).type ());
       ULONGEST reg_size = TYPE_LENGTH (reg_type);
       int regnum;
       struct value *regval;
@@ -554,10 +571,10 @@ 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);
 
@@ -581,11 +598,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 +609,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 +618,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 +631,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,9 +643,9 @@ 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.get (),
+						       filename.get (),
+						       0, NULL, 0, NULL));
   objfile = objfile_holder.get ();
 
   func_sym = lookup_global_symbol_from_objfile (objfile,
@@ -645,10 +656,10 @@ compile_object_load (const compile_file_
     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)
+  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)
@@ -669,10 +680,10 @@ compile_object_load (const compile_file_
     default:
       internal_error (__FILE__, __LINE__, _("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)))
     error (_("Invalid return type of function \"%s\" in compiled "
@@ -757,7 +768,7 @@ compile_object_load (const compile_file_
 					TYPE_LENGTH (regs_type),
 					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, TYPE_LENGTH (regs_type));
       if (compile_debug)
 	fprintf_unfiltered (gdb_stdlog,
 			    "allocated %s bytes at %s for registers\n",
@@ -779,8 +790,8 @@ compile_object_load (const compile_file_
 					     (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,
+					   TYPE_LENGTH (out_value_type));
       if (compile_debug)
 	fprintf_unfiltered (gdb_stdlog,
 			    "allocated %s bytes at %s for printed value\n",
@@ -789,16 +800,16 @@ compile_object_load (const compile_file_
 			    paddress (target_gdbarch (), 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-load.h ./gdb/compile/compile-object-load.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-load.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-object-load.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file to load module for 'compile' command.
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-run.c ./gdb/compile/compile-object-run.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-run.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-object-run.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Call module for 'compile' command.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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,24 +63,31 @@ 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);
 	}
     }
 
+  /* 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 (data->module->objfile);
   for (objfile *objfile : current_program_space->objfiles ())
     if ((objfile->flags & OBJF_USERLOADED) == 0
-        && (strcmp (objfile_name (objfile), data->objfile_name_string) == 0))
+	&& objfile_name_s == objfile_name (objfile))
       {
-	delete objfile;
+	objfile->unlink ();
 
 	/* It may be a bit too pervasive in this dummy_frame dtor callback.  */
 	clear_symtab_users (0);
@@ -95,14 +96,22 @@ do_module_cleanup (void *arg, int regist
       }
 
   /* Delete the .c file.  */
-  unlink (data->source_file);
-  xfree (data->source_file);
-
-  delete data->munmap_list_head;
+  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 (objfile);
+  func_type = copy_type_recursive (objfile, func_type, copied_types.get ());
+  return func_type;
 }
 
 /* Perform inferior call of MODULE.  This function may throw an error.
@@ -112,64 +121,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;
       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)));
 
-      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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-run.h ./gdb/compile/compile-object-run.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/compile-object-run.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/compile-object-run.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header file to call module for 'compile' command.
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/gcc-c-plugin.h ./gdb/compile/gcc-c-plugin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/gcc-c-plugin.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/gcc-c-plugin.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GCC C plug-in wrapper for GDB.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/gcc-cp-plugin.h ./gdb/compile/gcc-cp-plugin.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/compile/gcc-cp-plugin.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/compile/gcc-cp-plugin.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GCC C++ plug-in wrapper for GDB.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/complaints.c ./gdb/complaints.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/complaints.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/complaints.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for complaint handling during symbol reading in GDB.
 
-   Copyright (C) 1990-2020 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -74,8 +74,9 @@ complaints_show_value (struct ui_file *f
 		    value);
 }
 
+void _initialize_complaints ();
 void
-_initialize_complaints (void)
+_initialize_complaints ()
 {
   add_setshow_zinteger_cmd ("complaints", class_support, 
 			    &stop_whining, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/complaints.h ./gdb/complaints.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/complaints.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/complaints.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for complaint handling during symbol reading in GDB.
 
-   Copyright (C) 1990-2020 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,6 +25,10 @@
 extern void complaint_internal (const char *fmt, ...)
   ATTRIBUTE_PRINTF (1, 2);
 
+/* This controls whether complaints are emitted.  */
+
+extern int stop_whining;
+
 /* 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,8 +36,6 @@ extern void complaint_internal (const ch
 #define complaint(FMT, ...)					\
   do								\
     {								\
-      extern int stop_whining;					\
-								\
       if (stop_whining > 0)					\
 	complaint_internal (FMT, ##__VA_ARGS__);		\
     }								\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/completer.c ./gdb/completer.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/completer.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/completer.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Line completion stuff for GDB, the GNU debugger.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -45,6 +45,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 +147,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,7 +220,7 @@ 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;
@@ -198,14 +250,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 +276,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 +293,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 +303,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 +320,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 +340,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 +422,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 +441,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 +547,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;
     }
 
@@ -831,7 +866,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.  */
@@ -1029,7 +1068,7 @@ add_struct_fields (struct type *type, co
   const char *type_name = NULL;
 
   type = check_typedef (type);
-  for (i = 0; i < TYPE_NFIELDS (type); ++i)
+  for (i = 0; i < type->num_fields (); ++i)
     {
       if (i < TYPE_N_BASECLASSES (type))
 	add_struct_fields (TYPE_BASECLASS (type, i),
@@ -1042,10 +1081,10 @@ add_struct_fields (struct type *type, co
 			     fieldname, namelen))
 		output.emplace_back (xstrdup (TYPE_FIELD_NAME (type, i)));
 	    }
-	  else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)
+	  else if (type->field (i).type ()->code () == TYPE_CODE_UNION)
 	    {
 	      /* Recurse into anonymous unions.  */
-	      add_struct_fields (TYPE_FIELD_TYPE (type, i),
+	      add_struct_fields (type->field (i).type (),
 				 output, fieldname, namelen);
 	    }
 	}
@@ -1059,7 +1098,7 @@ add_struct_fields (struct type *type, co
 	{
 	  if (!computed_type_name)
 	    {
-	      type_name = TYPE_NAME (type);
+	      type_name = type->name ();
 	      computed_type_name = 1;
 	    }
 	  /* Omit constructors from the completion list.  */
@@ -1095,13 +1134,13 @@ complete_expression (completion_tracker
       for (;;)
 	{
 	  type = check_typedef (type);
-	  if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
+	  if (type->code () != 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)
+      if (type->code () == TYPE_CODE_UNION
+	  || type->code () == TYPE_CODE_STRUCT)
 	{
 	  completion_list result;
 
@@ -1287,7 +1326,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 +1362,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 +1402,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 +1430,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 +1498,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".  */
@@ -1512,9 +1550,7 @@ int max_completions = 200;
 
 completion_tracker::completion_tracker ()
 {
-  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 +1562,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 +1604,6 @@ completion_tracker::discard_completions
 completion_tracker::~completion_tracker ()
 {
   xfree (m_lowest_common_denominator);
-  htab_delete (m_entries_hash);
 }
 
 /* See completer.h.  */
@@ -1556,10 +1619,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 +1638,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 +1669,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.  */
@@ -1858,7 +1939,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.  */
@@ -1982,23 +2063,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 +2097,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 +2202,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 +2231,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 +2304,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;
 }
 
@@ -2314,7 +2450,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 +2630,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 +2733,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, '^');
@@ -2935,8 +3071,9 @@ gdb_display_match_list (char **matches,
     }
 }
 
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/completer.h ./gdb/completer.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/completer.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/completer.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Header for GDB line completion.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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
@@ -242,7 +242,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 ();
@@ -326,6 +326,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 +393,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.  */
@@ -403,6 +407,9 @@ public:
 
 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 +417,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 +434,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 +484,16 @@ 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;
 };
 
 /* Return a string to hand off to readline as a completion match
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/djcheck.sh ./gdb/config/djgpp/djcheck.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/djcheck.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/djgpp/djcheck.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # A shell script to run the test suite on the DJGPP version of GDB.
 
-#  Copyright (C) 2000-2020 Free Software Foundation, Inc.
+#  Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/djconfig.sh ./gdb/config/djgpp/djconfig.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/djconfig.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/djgpp/djconfig.sh	2021-12-16 01:57:39.000000000 +0000
@@ -5,7 +5,7 @@
 # configuring other GNU programs for DJGPP.
 #
 #=====================================================================
-# Copyright (C) 1997-2020 Free Software Foundation, Inc.
+# Copyright (C) 1997-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/fnchange.lst ./gdb/config/djgpp/fnchange.lst
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/fnchange.lst	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/djgpp/fnchange.lst	2021-12-16 01:57:39.000000000 +0000
@@ -117,6 +117,8 @@
 @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-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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/langinfo.h ./gdb/config/djgpp/langinfo.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/langinfo.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/djgpp/langinfo.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* langinfo.h file for DJGPP.
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/nl_types.h ./gdb/config/djgpp/nl_types.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/djgpp/nl_types.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/djgpp/nl_types.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* nl_types.h for DJGPP.
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/i386/i386gnu.mn ./gdb/config/i386/i386gnu.mn
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/i386/i386gnu.mn	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/i386/i386gnu.mn	2021-12-16 01:57:39.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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/i386/nm-i386gnu.h ./gdb/config/i386/nm-i386gnu.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/i386/nm-i386gnu.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/i386/nm-i386gnu.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native-dependent definitions for Intel 386 running the GNU Hurd
-   Copyright (C) 1994-2020 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/nm-linux.h ./gdb/config/nm-linux.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/nm-linux.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/nm-linux.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native support for GNU/Linux.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/nm-nto.h ./gdb/config/nm-nto.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/nm-nto.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/nm-nto.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native support for QNX Neutrino version 6.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/sparc/nm-sol2.h ./gdb/config/sparc/nm-sol2.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config/sparc/nm-sol2.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config/sparc/nm-sol2.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent definitions for Solaris SPARC.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config.in ./gdb/config.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/config.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/config.in	2021-12-16 01:57:39.000000000 +0000
@@ -36,10 +36,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
 
@@ -109,10 +115,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
@@ -212,12 +214,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,9 +226,15 @@
 /* Define if you have the babeltrace library. */
 #undef HAVE_LIBBABELTRACE
 
+/* Define to 1 if debuginfod is enabled. */
+#undef HAVE_LIBDEBUGINFOD
+
 /* Define if you have the expat library. */
 #undef HAVE_LIBEXPAT
 
+/* Define if you have the gmp library. */
+#undef HAVE_LIBGMP
+
 /* Define to 1 if you have the `libiconvlist' function. */
 #undef HAVE_LIBICONVLIST
 
@@ -296,9 +301,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
 
@@ -416,6 +418,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 +475,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 +493,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
 
@@ -572,6 +574,9 @@
 /* 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
 
@@ -649,6 +654,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
 
@@ -719,9 +728,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,6 +758,10 @@
 /* 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
@@ -792,6 +802,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure ./gdb/configure
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/configure	2021-12-16 01:57:39.000000000 +0000
@@ -631,6 +631,8 @@ GDB_NM_FILE
 LTLIBXXHASH
 LIBXXHASH
 HAVE_LIBXXHASH
+CTF_DEPS
+LIBCTF
 LTLIBBABELTRACE
 LIBBABELTRACE
 HAVE_LIBBABELTRACE
@@ -688,12 +690,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 +704,15 @@ SYSTEM_GDBINIT
 TARGET_SYSTEM_ROOT
 CONFIG_LDFLAGS
 RDYNAMIC
+LTLIBIPT
+LIBIPT
+HAVE_LIBIPT
 PTHREAD_CFLAGS
 PTHREAD_LIBS
 PTHREAD_CC
 ax_pthread_config
 SED
 ALLOCA
-LTLIBIPT
-LIBIPT
-HAVE_LIBIPT
 SRCHIGH_CFLAGS
 SRCHIGH_LIBS
 HAVE_GUILE_FALSE
@@ -729,6 +731,9 @@ python_prog_path
 LTLIBMPFR
 LIBMPFR
 HAVE_LIBMPFR
+LTLIBGMP
+LIBGMP
+HAVE_LIBGMP
 LTLIBEXPAT
 LIBEXPAT
 HAVE_LIBEXPAT
@@ -758,6 +763,11 @@ REPORT_BUGS_TEXI
 REPORT_BUGS_TO
 PKGVERSION
 CODESIGN_CERT
+DEBUGINFOD_LIBS
+DEBUGINFOD_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
 HAVE_NATIVE_GCORE_TARGET
 TARGET_OBS
 subdirs
@@ -784,9 +794,11 @@ DEPDIR
 am__leading_dot
 CXX_DIALECT
 HAVE_CXX11
+target_noncanonical
 INSTALL_STRIP_PROGRAM
 STRIP
 install_sh
+LARGEFILE_CPPFLAGS
 target_os
 target_vendor
 target_cpu
@@ -869,6 +881,7 @@ enable_64_bit_bfd
 enable_gdbmi
 enable_tui
 enable_gdbtk
+with_debuginfod
 with_libunwind_ia64
 with_curses
 enable_profiling
@@ -879,19 +892,25 @@ with_system_zlib
 with_gnu_ld
 enable_rpath
 with_libiconv_prefix
+with_libiconv_type
 with_iconv_bin
 with_system_readline
 with_jit_reader_dir
 with_expat
 with_libexpat_prefix
+with_libexpat_type
+with_libgmp_prefix
+with_libgmp_type
 with_mpfr
 with_libmpfr_prefix
+with_libmpfr_type
 with_python
+with_python_libdir
 with_guile
 enable_source_highlight
 with_intel_pt
 with_libipt_prefix
-with_included_regex
+with_libipt_type
 with_sysroot
 with_system_gdbinit
 with_system_gdbinit_dir
@@ -901,15 +920,18 @@ enable_gdb_build_warnings
 enable_ubsan
 with_lzma
 with_liblzma_prefix
+with_liblzma_type
 with_tcl
 with_tk
 with_x
 enable_sim
-enable_gdbserver
 with_babeltrace
 with_libbabeltrace_prefix
+with_libbabeltrace_type
 with_xxhash
+enable_libctf
 with_libxxhash_prefix
+with_libxxhash_type
 enable_unit_tests
 '
       ac_precious_vars='build_alias
@@ -926,12 +948,16 @@ CCC
 CPP
 MAKEINFO
 MAKEINFOFLAGS
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+DEBUGINFOD_CFLAGS
+DEBUGINFOD_LIBS
 YACC
 YFLAGS
 XMKMF'
 ac_subdirs_all='testsuite
-gdbtk
-gdbserver'
+gdbtk'
 
 # Initialize some variables set by options.
 ac_init_help=
@@ -1575,8 +1601,7 @@ 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-libctf         Handle .ctf type-info sections [default=yes]
   --enable-unit-tests     Enable the inclusion of unit tests when compiling
                           GDB
 
@@ -1598,6 +1623,8 @@ Optional Packages:
                           [--with-auto-load-dir]
   --without-auto-load-safe-path
                           do not restrict auto-loaded files locations
+  --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
@@ -1607,6 +1634,7 @@ Optional Packages:
   --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-iconv-bin=PATH   specify where to find the iconv program
   --with-system-readline  use installed readline library
   --with-jit-reader-dir=PATH
@@ -1614,20 +1642,24 @@ 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-libexpat-type=TYPE     type of library to search for (auto/static/shared)
+  --with-libgmp-prefix[=DIR]  search for libgmp in DIR/include and DIR/lib
+  --without-libgmp-prefix     don't search for libgmp in includedir and libdir
+  --with-libgmp-type=TYPE     type of library to search for (auto/static/shared)
   --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-libmpfr-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-libipt-type=TYPE     type of library to search for (auto/static/shared)
   --with-sysroot[=DIR]    search for usr/lib et al within DIR
   --with-system-gdbinit=PATH
                           automatically load a system-wide gdbinit file
@@ -1637,15 +1669,18 @@ 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-libbabeltrace-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)
 
 Some influential environment variables:
   CC          C compiler command
@@ -1661,6 +1696,15 @@ Some influential environment variables:
   MAKEINFO    Parent configure detects if it is of sufficient version.
   MAKEINFOFLAGS
               Parameters for MAKEINFO.
+  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
+  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'.
@@ -2318,63 +2362,6 @@ 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 ()
-{
-  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"
-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
-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
-
-} # ac_fn_c_check_member
-
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
 # Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -2475,6 +2462,63 @@ eval ac_res=\$$3
 
 } # ac_fn_c_check_decl
 
+# 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
+  { $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"
+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
+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
+
+} # ac_fn_c_check_member
+
 # ac_fn_cxx_try_link LINENO
 # -------------------------
 # Try to link conftest.$ac_ext, and return whether this succeeded.
@@ -2945,6 +2989,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+
+
 ac_config_headers="$ac_config_headers config.h:config.in"
 
 
@@ -2971,9 +3017,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 +4775,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 +5029,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,6 +5172,33 @@ ac_configure="$SHELL $ac_aux_dir/configu
 
 
 
+# Set build, build_cpu, build_vendor and build_os.
+
+
+# Set host, host_cpu, host_vendor, and host_os.
+
+
+# Set target, target_cpu, target_vendor, and target_os.
+
+
+ case ${build_alias} in
+  "") build_noncanonical=${build} ;;
+  *) build_noncanonical=${build_alias} ;;
+esac
+
+ case ${host_alias} in
+  "") host_noncanonical=${build_noncanonical} ;;
+  *) host_noncanonical=${host_alias} ;;
+esac
+
+ case ${target_alias} in
+  "") target_noncanonical=${host_noncanonical} ;;
+  *) target_noncanonical=${target_alias} ;;
+esac
+
+
+
+
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
@@ -5812,6 +5841,10 @@ eval ac_res=\$$cachevar
 $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
@@ -6131,6 +6164,10 @@ eval ac_res=\$$cachevar
 $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
@@ -6738,7 +6775,6 @@ fi
 # 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.
@@ -6824,9 +6860,258 @@ case $host_os in
     enable_gdbtk=no ;;
 esac
 
-# Libunwind support for ia64.
+# Handle optional debuginfod support
+
 
 
+
+
+
+
+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
+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
+
+
+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
+
+  ;;
+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
+    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
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+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
+
+# Handle optional debuginfod support
+
+# 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.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;
@@ -6936,12 +7221,12 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
-extern char _etext;
-
+	 extern char _etext;
 int
 main ()
 {
 free (&_etext);
+
   ;
   return 0;
 }
@@ -6950,9 +7235,11 @@ 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; }
@@ -6969,12 +7256,12 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
-extern char etext;
-
+	 extern char etext;
 int
 main ()
 {
 free (&etext);
+
   ;
   return 0;
 }
@@ -6983,9 +7270,11 @@ 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; }
@@ -7022,8 +7311,10 @@ 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; }
@@ -7071,7 +7362,7 @@ if test "${with_bugurl+set}" = set; then
 	   ;;
      esac
 else
-  BUGURL="http://www.gnu.org/software/gdb/bugs/"
+  BUGURL="https://www.gnu.org/software/gdb/bugs/"
 
 fi
 
@@ -7943,127 +8234,6 @@ fi
 
 
 
-# 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 :
-
-else
-  ac_cv_search_kinfo_getvmmap=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_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
-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"
-
-$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h
-
-fi
-
-
 
       if test "X$prefix" = "XNONE"; then
     acl_final_prefix="$ac_default_prefix"
@@ -8269,6 +8439,16 @@ if test "${with_libiconv_prefix+set}" =
 
 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=
@@ -8306,13 +8486,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"
@@ -8336,13 +8516,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"
@@ -8570,8 +8750,13 @@ fi
               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
+              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
@@ -9034,7 +9219,7 @@ fi
 
 
 if test "$with_system_readline" = yes; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system readline is new enough" >&5
+  { $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
@@ -9042,13 +9227,14 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
-#include <readline/readline.h>
+	   #include <readline/readline.h>
 int
 main ()
 {
 #if RL_VERSION_MAJOR < 7
-# error "readline version 7 required"
-#endif
+	   # error "readline version 7 required"
+	   #endif
+
   ;
   return 0;
 }
@@ -9057,8 +9243,10 @@ 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; }
@@ -9371,6 +9559,16 @@ if test "${with_libexpat_prefix+set}" =
 
 fi
 
+
+# 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=
@@ -9408,13 +9606,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"
@@ -9438,13 +9636,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"
@@ -9672,8 +9870,13 @@ fi
               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
+              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
@@ -9809,6 +10012,489 @@ done
   fi
 fi
 
+# Verify that we have a usable GMP library.
+
+
+
+
+
+
+
+
+    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-libgmp-prefix was given.
+if test "${with_libgmp_prefix+set}" = set; then :
+  withval=$with_libgmp_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-libgmp-type was given.
+if test "${with_libgmp_type+set}" = set; then :
+  withval=$with_libgmp_type;  with_libgmp_type=$withval
+else
+   with_libgmp_type=auto
+fi
+
+  lib_type=`eval echo \$with_libgmp_type`
+
+      LIBGMP=
+  LTLIBGMP=
+  INCGMP=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='gmp '
+  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" || LIBGMP="${LIBGMP}${LIBGMP:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }$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 $LTLIBGMP; 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
+                        LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }-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
+                                LIBGMP="${LIBGMP}${LIBGMP:+ }$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
+                                                      LIBGMP="${LIBGMP}${LIBGMP:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBGMP="${LIBGMP}${LIBGMP:+ }$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 $LIBGMP; 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
+                      LIBGMP="${LIBGMP}${LIBGMP:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBGMP="${LIBGMP}${LIBGMP:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBGMP="${LIBGMP}${LIBGMP:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBGMP="${LIBGMP}${LIBGMP:+ }$found_a"
+              else
+                                                LIBGMP="${LIBGMP}${LIBGMP:+ }-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 $INCGMP; 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
+                                            INCGMP="${INCGMP}${INCGMP:+ }-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 $LIBGMP; 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
+                                                        LIBGMP="${LIBGMP}${LIBGMP:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBGMP; 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
+                                                        LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }-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$,,'`
+                    ;;
+                  *)
+                                        LIBGMP="${LIBGMP}${LIBGMP:+ }$dep"
+                    LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then
+              LIBGMP="${LIBGMP}${LIBGMP:+ }-l$name"
+              LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }-l$name"
+            else
+              LIBGMP="${LIBGMP}${LIBGMP:+ }-l:lib$name.$libext"
+              LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }-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"
+      LIBGMP="${LIBGMP}${LIBGMP:+ }$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"
+        LIBGMP="${LIBGMP}${LIBGMP:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBGMP="${LTLIBGMP}${LTLIBGMP:+ }-R$found_dir"
+    done
+  fi
+
+
+        ac_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCGMP; 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 libgmp" >&5
+$as_echo_n "checking for libgmp... " >&6; }
+if ${ac_cv_libgmp+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIBGMP"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <gmp.h>
+int
+main ()
+{
+mpz_t n;
+                       mpz_init (n);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_libgmp=yes
+else
+  ac_cv_libgmp=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_libgmp" >&5
+$as_echo "$ac_cv_libgmp" >&6; }
+  if test "$ac_cv_libgmp" = yes; then
+    HAVE_LIBGMP=yes
+
+$as_echo "#define HAVE_LIBGMP 1" >>confdefs.h
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libgmp" >&5
+$as_echo_n "checking how to link with libgmp... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGMP" >&5
+$as_echo "$LIBGMP" >&6; }
+  else
+    HAVE_LIBGMP=no
+            CPPFLAGS="$ac_save_CPPFLAGS"
+    LIBGMP=
+    LTLIBGMP=
+  fi
+
+
+
+
+
+
+if test "$HAVE_LIBGMP" != yes; then
+  as_fn_error $? "GMP is missing or unusable" "$LINENO" 5
+fi
+
 
 # Check whether --with-mpfr was given.
 if test "${with_mpfr+set}" = set; then :
@@ -9876,6 +10562,16 @@ if test "${with_libmpfr_prefix+set}" = s
 
 fi
 
+
+# Check whether --with-libmpfr-type was given.
+if test "${with_libmpfr_type+set}" = set; then :
+  withval=$with_libmpfr_type;  with_libmpfr_type=$withval
+else
+   with_libmpfr_type=auto
+fi
+
+  lib_type=`eval echo \$with_libmpfr_type`
+
       LIBMPFR=
   LTLIBMPFR=
   INCMPFR=
@@ -9913,13 +10609,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"
@@ -9943,13 +10639,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"
@@ -10177,8 +10873,13 @@ fi
               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
+              LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l$name"
+              LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-l$name"
+            else
+              LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l:lib$name.$libext"
+              LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-l:lib$name.$libext"
+            fi
           fi
         fi
       fi
@@ -10464,7 +11165,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 +11179,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
@@ -10671,6 +11372,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 +11397,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 +11573,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)
@@ -11344,13 +12091,13 @@ 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
+      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_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight`
       SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight`
 
@@ -11370,556 +12117,6 @@ 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
-
-
-  { $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
-
 # ------------------------- #
 # Checks for header files.  #
 # ------------------------- #
@@ -12037,11 +12234,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,6 +12299,31 @@ fi
 done
 
 
+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
+
+done
+
+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
+
+fi
+
+done
+
+
 # ------------------------- #
 # Checks for declarations.  #
 # ------------------------- #
@@ -12312,36 +12534,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 +12912,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 \
+for ac_func in getuid getgid \
+		pipe pread pread64 pwrite resize_term \
+		getpgid setsid \
 		sigaction sigsetmask socketpair \
 		ttrace wborder 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"
@@ -13198,6 +12975,40 @@ _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
+
 { $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 :
@@ -13268,6 +13079,9 @@ fi
   rm -f conftest.sed
 
 
+  # 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 :
@@ -13567,6 +13381,16 @@ _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; }
@@ -13602,7 +13426,7 @@ fi
   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
+  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"
@@ -13616,8 +13440,400 @@ fi
 done
 
 
-  for ac_func in fdwalk getrlimit pipe pipe2 socketpair sigaction \
-		  sigprocmask
+
+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
+
+  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"
@@ -13630,6 +13846,22 @@ 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
@@ -13642,6 +13874,103 @@ cat >>confdefs.h <<_ACEOF
 _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 std::thread.  This does not work on some platforms, like
   # mingw and DJGPP.
   ac_ext=cpp
@@ -14351,20 +14680,21 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5
+      { $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);
+sigjmp_buf env;
+           while (! sigsetjmp (env, 1))
+             siglongjmp (env, 1);
+
   ;
   return 0;
 }
@@ -14373,16 +14703,889 @@ 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
+  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
+
+
+$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 the return and argument types of ptrace.
@@ -14411,26 +15614,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 +15624,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 +15644,7 @@ int
 main ()
 {
 extern int ptrace ();
+
   ;
   return 0;
 }
@@ -14468,25 +15653,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 +15683,7 @@ int
 main ()
 {
 extern long ptrace (enum __ptrace_request, ...);
+
   ;
   return 0;
 }
@@ -14501,20 +15691,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 +15709,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 +15825,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,8 +15842,10 @@ 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; }
@@ -14667,57 +15855,6 @@ if test "$ac_cv_func_setpgrp_void" = yes
 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 +15879,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,8 +15894,10 @@ 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; }
@@ -14776,11 +15916,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,8 +15930,10 @@ 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; }
@@ -14826,33 +15969,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,8 +15990,10 @@ 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
@@ -14907,8 +16025,10 @@ 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
@@ -14928,11 +16048,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,8 +16062,10 @@ 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
@@ -14962,11 +16085,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_GETXMMREGS;
+
   ;
   return 0;
 }
@@ -14975,8 +16099,10 @@ 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
@@ -15017,305 +16143,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
@@ -15558,16 +16385,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 +16408,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 +16477,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;
   ;
@@ -15697,8 +16524,9 @@ int
 main ()
 {
 #ifndef PTHDB_VERSION_3
-                                    #error
-                                    #endif
+	       #error
+	       #endif
+
   ;
   return 0;
 }
@@ -15707,8 +16535,10 @@ 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
@@ -15740,7 +16570,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 +16582,7 @@ int
 main ()
 {
 int i = TD_NOTALLOC;
+
   ;
   return 0;
 }
@@ -15767,7 +16598,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 +16611,7 @@ int
 main ()
 {
 int i = TD_VERSION;
+
   ;
   return 0;
 }
@@ -15794,7 +16627,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 +16640,7 @@ int
 main ()
 {
 int i = TD_NOTLS;
+
   ;
   return 0;
 }
@@ -15838,80 +16673,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 +16688,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.
@@ -16105,7 +16872,11 @@ build_warnings="-Wall -Wpointer-arith \
 -Wshadow=local \
 -Wdeprecated-copy \
 -Wdeprecated-copy-dtor \
--Wredundant-move"
+-Wredundant-move \
+-Wmissing-declarations \
+-Wmissing-prototypes \
+-Wstrict-null-sentinel \
+"
 
 case "${host}" in
   *-*-mingw32*)
@@ -16202,13 +16973,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 +17062,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
@@ -16355,15 +17128,8 @@ if test x"$gdb_cv_os_cygwin" = xyes; the
 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.
 
@@ -16386,13 +17152,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,9 +17168,11 @@ 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; }
@@ -16411,7 +17180,8 @@ fi
   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"
+  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
 
@@ -16497,13 +17267,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,9 +17283,11 @@ 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; }
@@ -16593,6 +17366,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 +17413,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 +17443,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 +17677,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
@@ -17844,40 +18632,6 @@ _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
-else
-  enable_gdbserver=auto
-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"
-
-    gdbserver_build_enabled=yes
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  fi
-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
-  as_fn_error $? "Automatic gdbserver build is not supported for this configuration" "$LINENO" 5
-fi
-
 # Check for babeltrace and babeltrace-ctf
 
 # Check whether --with-babeltrace was given.
@@ -17953,6 +18707,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 +18754,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 +18784,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 +19018,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
@@ -18399,6 +19168,40 @@ else
 fi
 
 
+ # 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
+
+else
+  enable_libctf=yes
+fi
+
+
+if test x${enable_static} = xno; then
+  LIBCTF="-Wl,--rpath,../libctf/.libs ../libctf/.libs/libctf.so"
+  CTF_DEPS="../libctf/.libs/libctf.so"
+else
+  LIBCTF="../libctf/.libs/libctf.a"
+  CTF_DEPS="$LIBCTF"
+fi
+if test "${enable_libctf}" = yes; then
+
+$as_echo "#define ENABLE_LIBCTF 1" >>confdefs.h
+
+else
+  LIBCTF=
+  CTF_DEPS=
+fi
+
+
+
+# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
+# empty version.
+
 if test "x$with_xxhash" != "xno"; then
 
 
@@ -18449,6 +19252,16 @@ if test "${with_libxxhash_prefix+set}" =
 
 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=
@@ -18486,13 +19299,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"
@@ -18516,13 +19329,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"
@@ -18750,8 +19563,13 @@ fi
               done
             fi
           else
-                                                            LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name"
-            LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-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
@@ -18962,7 +19780,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 +19804,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
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.ac ./gdb/configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.ac	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/configure.ac	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 dnl Autoconf configure script for GDB, the GNU debugger.
-dnl Copyright (C) 1995-2020 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2021 Free Software Foundation, Inc.
 dnl
 dnl This file is part of GDB.
 dnl
@@ -18,23 +18,32 @@ 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
@@ -150,7 +159,7 @@ 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 ;;
@@ -254,7 +263,6 @@ 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.
@@ -323,8 +331,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]),,
@@ -383,22 +393,36 @@ AS_HELP_STRING([--enable-profiling], [en
  [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)])
+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)])
+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. ])
@@ -411,9 +435,15 @@ if test "$enable_profiling" = yes ; then
   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
     AC_MSG_ERROR(--enable-profiling requires a compiler which supports -pg)
@@ -430,7 +460,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])
 
@@ -474,17 +504,6 @@ AC_SEARCH_LIBS(socketpair, socket)
 # Link in zlib 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. ])])
-
 AM_ICONV
 
 # GDB may fork/exec the iconv program to get the list of supported character
@@ -577,16 +596,21 @@ 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_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
@@ -660,6 +684,14 @@ else
   fi
 fi
 
+# Verify that we have a usable GMP library.
+AC_LIB_HAVE_LINKFLAGS([gmp], [], [#include <gmp.h>],
+                      [mpz_t n;
+                       mpz_init (n);])
+if test "$HAVE_LIBGMP" != yes; then
+  AC_MSG_ERROR([GMP is missing or unusable])
+fi
+
 AC_ARG_WITH(mpfr,
   AS_HELP_STRING([--with-mpfr], [include MPFR support (auto/yes/no)]),
   [], [with_mpfr=auto])
@@ -781,12 +813,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
@@ -814,7 +846,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 +860,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
@@ -896,6 +928,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 +954,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 +979,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 +1129,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)
@@ -1179,15 +1239,15 @@ 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,
@@ -1204,58 +1264,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 +1289,9 @@ AC_CHECK_HEADERS(term.h, [], [],
 #endif
 ])
 
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([ws2tcpip.h])
+
 # ------------------------- #
 # Checks for declarations.  #
 # ------------------------- #
@@ -1279,19 +1301,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,15 +1326,13 @@ 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 \
+AC_CHECK_FUNCS([getuid getgid \
+		pipe pread pread64 pwrite resize_term \
+		getpgid setsid \
 		sigaction sigsetmask socketpair \
 		ttrace wborder 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
 
@@ -1326,49 +1344,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)])
+  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,21 +1371,39 @@ 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)])
+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)])
+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>.])
@@ -1402,20 +1415,16 @@ 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
   AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
@@ -1424,11 +1433,14 @@ 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
   AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
@@ -1437,12 +1449,18 @@ 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
   AC_DEFINE(HAVE_PT_GETDBREGS, 1,
@@ -1451,12 +1469,18 @@ 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_CACHE_VAL(
+  [gdb_cv_have_pt_getxmmregs],
+  [AC_COMPILE_IFELSE(
+     [AC_LANG_PROGRAM(
+	[#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,
@@ -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,
@@ -1590,18 +1603,23 @@ 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 +1635,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 +1662,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])
@@ -1670,13 +1692,19 @@ if test "${build}" = "${host}" -a "${hos
    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
          CONFIG_SRCS="${CONFIG_SRCS} aix-thread.c"
@@ -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,
@@ -1827,23 +1846,15 @@ if test x"$gdb_cv_os_cygwin" = xyes; the
 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"
+  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>.
@@ -2098,36 +2109,9 @@ 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
-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
-
 # 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])
@@ -2170,9 +2154,29 @@ fi
 
 # Check for xxhash
 AC_ARG_WITH(xxhash,
-  AC_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]),
+  AS_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]),
   [], [with_xxhash=auto])
 
+GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
+if test x${enable_static} = xno; then
+  LIBCTF="-Wl,--rpath,../libctf/.libs ../libctf/.libs/libctf.so"
+  CTF_DEPS="../libctf/.libs/libctf.so"
+else
+  LIBCTF="../libctf/.libs/libctf.a"
+  CTF_DEPS="$LIBCTF"
+fi
+if test "${enable_libctf}" = yes; then
+  AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
+else
+  LIBCTF=
+  CTF_DEPS=
+fi
+AC_SUBST(LIBCTF)
+AC_SUBST(CTF_DEPS)
+
+# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
+# empty version.
+
 if test "x$with_xxhash" != "xno"; then
   AC_LIB_HAVE_LINKFLAGS([xxhash], [],
 			[#include <xxhash.h>],
@@ -2210,7 +2214,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 +2228,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.host ./gdb/configure.host
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.host	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/configure.host	2021-12-16 01:57:39.000000000 +0000
@@ -60,6 +60,7 @@ 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 ;;
@@ -91,6 +92,8 @@ alpha*-*-netbsd* | alpha*-*-knetbsd*-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)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.nat ./gdb/configure.nat
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.nat	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/configure.nat	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 # ; -*- mode: sh ; -*-
-# Copyright (C) 2013-2020 Free Software Foundation, Inc.
+# Copyright (C) 2013-2021 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'
@@ -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
 	;;
@@ -236,7 +236,12 @@ case ${gdb_host} in
 		NATDEPFILES="${NATDEPFILES} aarch64-linux-nat.o \
 		aarch32-linux-nat.o nat/aarch64-linux-hw-point.o \
 		nat/aarch64-linux.o \
-		nat/aarch64-sve-linux-ptrace.o"
+		nat/aarch64-sve-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
@@ -276,7 +281,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
@@ -324,7 +330,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 +343,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 +365,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 +381,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 +397,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'
 		;;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.tgt ./gdb/configure.tgt
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/configure.tgt	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/configure.tgt	2021-12-16 01:57:39.000000000 +0000
@@ -5,7 +5,6 @@
 #  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
 
 # NOTE: Every file added to a gdb_target_obs variable for any target here
@@ -40,7 +39,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 +60,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
@@ -85,7 +86,8 @@ ia64*-*-*)
 	;;
 
 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 +105,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 +126,11 @@ aarch64*-*-freebsd*)
 aarch64*-*-linux*)
 	# Target: AArch64 linux
 	gdb_target_obs="aarch64-linux-tdep.o arch/aarch64.o\
+			arch/aarch64-mte-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 +141,12 @@ 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"
 	;;
 
 am33_2.0*-*-linux*)
@@ -158,16 +160,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,16 +180,12 @@ 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"
@@ -201,7 +202,6 @@ 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
@@ -209,6 +209,12 @@ bfin-*-*)
 	gdb_sim=../sim/bfin/libsim.a
 	;;
 
+bpf-*-*)
+	# Target: eBPF
+	gdb_target_obs="bpf-tdep.o"
+	gdb_sim=../sim/bpf/libsim.a
+	;;
+
 cris*)
 	# Target: CRIS
 	gdb_target_obs="cris-tdep.o cris-linux-tdep.o linux-tdep.o solib-svr4.o"
@@ -249,7 +255,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 +280,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 +290,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 +307,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 +314,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 +329,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
@@ -358,7 +359,6 @@ m32r*-*-linux*)
 			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
@@ -381,7 +381,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
@@ -415,11 +414,10 @@ mips*-*-linux*)
 	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_target_obs="mips-tdep.o mips-netbsd-tdep.o"
 	gdb_sim=../sim/mips/libsim.a
 	;;
 mips*-*-freebsd*)
@@ -453,7 +451,7 @@ mn10300-*-*)
 	gdb_sim=../sim/mn10300/libsim.a
 	;;
 
-msp430*-*-elf)
+msp430-*-elf*)
 	gdb_target_obs="msp430-tdep.o"
 	gdb_sim=../sim/msp430/libsim.a
 	;;
@@ -479,7 +477,6 @@ or1k*-*-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-*-*)
@@ -497,7 +494,7 @@ 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
 	;;
@@ -521,7 +518,6 @@ powerpc*-*-linux*)
 			linux-record.o \
 			arch/ppc-linux-common.o"
 	gdb_sim=../sim/ppc/libsim.a
-	build_gdbserver=yes
 	;;
 powerpc-*-lynx*178)
 	# Target: PowerPC running Lynx178.
@@ -540,7 +536,6 @@ 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*)
@@ -557,6 +552,7 @@ riscv*-*-linux*)
 riscv*-*-*)
 	# Target: RISC-V architecture
 	gdb_target_obs=""
+	gdb_sim=../sim/riscv/libsim.a
 	;;
 
 rl78-*-elf)
@@ -574,7 +570,6 @@ rx-*-elf)
 score-*-*)
 	# Target: S+core embedded system
 	gdb_target_obs="score-tdep.o"
-	build_gdbserver=yes
 	;;
 
 sh*-*-linux*)
@@ -583,16 +578,15 @@ sh*-*-linux*)
 			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)
 	# Target: NetBSD/sh
-	gdb_target_obs="sh-tdep.o sh-nbsd-tdep.o"
+	gdb_target_obs="sh-tdep.o sh-netbsd-tdep.o"
 	gdb_sim=../sim/sh/libsim.a
 	;;
 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
@@ -602,24 +596,22 @@ sh*)
 
 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 +620,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*)
@@ -688,7 +680,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-*-*)
@@ -741,7 +732,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 +741,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 +760,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
@@ -794,11 +786,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/continuations.c ./gdb/continuations.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/continuations.c	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/continuations.h ./gdb/continuations.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/continuations.h	2020-03-07 02:07:43.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-2020 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/create-web-ari-in-src.sh ./gdb/contrib/ari/create-web-ari-in-src.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/create-web-ari-in-src.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/ari/create-web-ari-in-src.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to create web ARI page directly from within gdb/ari directory.
 #
-# Copyright (C) 2012-2020 Free Software Foundation, Inc.
+# Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/gdb_ari.sh ./gdb/contrib/ari/gdb_ari.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/gdb_ari.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/ari/gdb_ari.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to list of problems using awk.
 #
-# Copyright (C) 2002-2020 Free Software Foundation, Inc.
+# Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/gdb_find.sh ./gdb/contrib/ari/gdb_find.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/gdb_find.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/ari/gdb_find.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to create list of files to check using gdb_ari.sh.
 #
-# Copyright (C) 2003-2020 Free Software Foundation, Inc.
+# Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/update-web-ari.sh ./gdb/contrib/ari/update-web-ari.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/ari/update-web-ari.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/ari/update-web-ari.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # GDB script to create GDB ARI web page.
 #
-# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/cc-with-tweaks.sh ./gdb/contrib/cc-with-tweaks.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/cc-with-tweaks.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/cc-with-tweaks.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 # Wrapper around gcc to tweak the output in various ways when running
 # the testsuite.
 
-# Copyright (C) 2010-2020 Free Software Foundation, Inc.
+# Copyright (C) 2010-2021 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
@@ -45,6 +45,7 @@
 # -i make an index (.gdb_index)
 # -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
@@ -83,6 +84,7 @@ want_dwz=false
 want_multi=false
 want_dwp=false
 want_objcopy_compress=false
+want_gnu_debuglink=false
 
 while [ $# -gt 0 ]; do
     case "$1" in
@@ -92,6 +94,7 @@ while [ $# -gt 0 ]; do
 	-n) want_index=true; index_options=-dwarf-5;;
 	-m) want_multi=true ;;
 	-p) want_dwp=true ;;
+	-l) want_gnu_debuglink=true ;;
 	*) break ;;
     esac
     shift
@@ -144,13 +147,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 +161,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,12 +177,16 @@ if [ "$want_objcopy_compress" = true ];
 fi
 
 if [ "$want_index" = true ]; then
+    get_tmpdir
+    mv "$output_file" "$tmpdir"
+    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"
     [ $rc != 0 ] && exit $rc
 fi
 
@@ -237,5 +242,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-debug "${output_file}" \
+	  -o "${stripped_file}"
+    rc=$?
+    [ $rc != 0 ] && exit $rc
+    strip --only-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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/expect-read1.c ./gdb/contrib/expect-read1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/expect-read1.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/expect-read1.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/expect-read1.sh ./gdb/contrib/expect-read1.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/expect-read1.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/expect-read1.sh	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 #! /bin/sh
 # runtest wrapper to reliably reproduce racy incomplete reads in the testsuite.
 
-# Copyright (C) 2013-2020 Free Software Foundation, Inc.
+# Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/gdb-add-index.sh ./gdb/contrib/gdb-add-index.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/gdb-add-index.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/gdb-add-index.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # Add a .gdb_index section to a file.
 
-# Copyright (C) 2010-2020 Free Software Foundation, Inc.
+# Copyright (C) 2010-2021 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=
@@ -99,13 +127,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 +145,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 +169,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/test_pubnames_and_indexes.py ./gdb/contrib/test_pubnames_and_indexes.py
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/test_pubnames_and_indexes.py	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/test_pubnames_and_indexes.py	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2011-2020 Free Software Foundation, Inc.
+# Copyright (C) 2011-2021 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 + ": (",
+        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
 
-  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/words.sh ./gdb/contrib/words.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/contrib/words.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/contrib/words.sh	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright (C) 2019-2020 Free Software Foundation, Inc.
+# Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/copying.c ./gdb/copying.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/copying.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/copying.c	2021-12-16 01:57:39.000000000 +0000
@@ -640,8 +640,9 @@ show_warranty_command (const char *ignor
   printf_filtered ("\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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/copyright.py ./gdb/copyright.py
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/copyright.py	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/copyright.py	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 #! /usr/bin/env python3
 
-# Copyright (C) 2011-2020 Free Software Foundation, Inc.
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -46,22 +46,33 @@ def get_update_list():
     the files are relative to that root directory.
     """
     result = []
-    for gdb_dir in ('gdb', 'gnulib', '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:
@@ -78,15 +89,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', '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,
-                         encoding=locale.getpreferredencoding())
+    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
@@ -98,7 +112,7 @@ def update_files(update_list):
     # 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(keepends=False)
-    warning_string = ': warning: copyright statement not found'
+    warning_string = ": warning: copyright statement not found"
     warning_len = len(warning_string)
 
     for line in update_out:
@@ -132,11 +146,11 @@ def may_have_copyright_notice(filename):
     # 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.
-    fd = open(filename, 'rb')
+    fd = open(filename, "rb")
 
     lineno = 1
     for line in fd:
-        if b'Copyright' in line:
+        if b"Copyright" in line:
             return True
         lineno += 1
         if lineno > 50:
@@ -144,36 +158,41 @@ def may_have_copyright_notice(filename):
     return False
 
 
-def main ():
+def main():
     """The main subprogram."""
     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")):
+    if not (
+        os.path.isdir("gdb") and os.path.isfile("gnulib/import/extra/update-copyright")
+    ):
         print("Error: This script must be called from the gdb directory.")
         sys.exit(1)
 
     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(
+            "\033[31m"
+            "REMINDER: Multiple copyright headers must be updated by hand:"
+            "\033[0m"
+        )
         for filename in MULTIPLE_COPYRIGHT_HEADERS:
             print("  ", filename)
 
     if BY_HAND:
         print()
-        print("\033[31mREMINDER: The following files must be updated by hand." \
-              "\033[0m")
+        print(
+            "\033[31mREMINDER: The following files must be updated by hand." "\033[0m"
+        )
         for filename in BY_HAND:
             print("  ", filename)
 
+
 ############################################################################
 #
 # Some constants, placed at the end because they take up a lot of room.
@@ -188,9 +207,11 @@ def main ():
 #
 # Filenames are relative to the root directory.
 EXCLUDE_LIST = (
-    'gdb/nat/glibc_thread_db.h',
-    'gdb/CONTRIBUTE',
-    'gnulib/import'
+    "gdb/nat/glibc_thread_db.h",
+    "gdb/CONTRIBUTE",
+    "gnulib/import",
+    "gnulib/config.in",
+    "gnulib/Makefile.in",
 )
 
 # Files which should not be modified, either because they are
@@ -202,8 +223,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.
@@ -226,66 +253,166 @@ 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/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/mips/mips32-dsp2.s",
 )
 
 if __name__ == "__main__":
     main()
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/corefile.c ./gdb/corefile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/corefile.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/corefile.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Core dump and executable file functions above target vector, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -88,8 +88,8 @@ specify_exec_file_hook (void (*hook) (co
 	}
 
       /* 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.  */
+	 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,
@@ -108,14 +108,16 @@ reopen_exec_file (void)
   struct stat st;
 
   /* Don't do anything if there isn't an exec file.  */
-  if (exec_bfd == NULL)
+  if (current_program_space->exec_bfd () == NULL)
     return;
 
   /* If the timestamp of the exec file has changed, reopen it.  */
-  std::string filename = bfd_get_filename (exec_bfd);
+  std::string filename = bfd_get_filename (current_program_space->exec_bfd ());
   res = stat (filename.c_str (), &st);
 
-  if (res == 0 && exec_bfd_mtime && exec_bfd_mtime != st.st_mtime)
+  if (res == 0
+      && current_program_space->ebfd_mtime
+      && current_program_space->ebfd_mtime != st.st_mtime)
     exec_file_attach (filename.c_str (), 0);
   else
     /* If we accessed the file since last opening it, close it now;
@@ -130,28 +132,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;
 }
 
 
@@ -215,8 +218,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,33 +332,6 @@ 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)
 {
@@ -416,7 +392,7 @@ 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;
@@ -473,26 +449,26 @@ complete_set_gnutarget (struct cmd_list_
 void
 set_gnutarget (const char *newtarget)
 {
-  if (gnutarget_string != NULL)
-    xfree (gnutarget_string);
+  xfree (gnutarget_string);
   gnutarget_string = xstrdup (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 +476,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/corelow.c ./gdb/corelow.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/corelow.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/corelow.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Core dump and executable file functions below target vector, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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,16 @@
 #include "completer.h"
 #include "gdbsupport/filestuff.h"
 #include "build-id.h"
+#include "gdbsupport/pathstuff.h"
+#include <unordered_map>
+#include <unordered_set>
+#include "gdbcmd.h"
+#include "xml-tdesc.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 +68,6 @@ class core_target final : public process
 {
 public:
   core_target ();
-  ~core_target () override;
 
   const target_info &info () const override
   { return core_target_info; }
@@ -89,11 +91,11 @@ 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;
 
@@ -110,10 +112,12 @@ 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 */
 
   /* The core's section table.  Note that these target sections are
@@ -122,11 +126,26 @@ private: /* per-core data */
      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 {};
+  target_section_table 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.  */
+  target_section_table 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,124 +154,141 @@ 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;
+/* Construct the target_section_table for file-backed mappings if
+   they exist.
 
-static int gdb_check_format (bfd *);
+   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.
 
-static void add_to_thread_list (bfd *, asection *, void *);
-
-/* An arbitrary identifier for the core inferior.  */
-#define CORELOW_PID 1
-
-/* 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.  */
-
-int
-default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
-{
-  int result;
-
-  result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
-  return (result);
-}
-
-/* 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.  */
-
-static struct core_fns *
-sniff_core_bfd (struct gdbarch *core_gdbarch, bfd *abfd)
-{
-  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)
-    {
-      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);
-}
+  std::unordered_map<std::string, struct bfd *> bfd_map;
+  std::unordered_set<std::string> unavailable_paths;
 
-/* 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.  */
+  /* 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)
+      {
+	/* Architecture-specific read_core_mapping methods are expected to
+	   weed out non-file-backed mappings.  */
+	gdb_assert (filename != nullptr);
+
+	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)
+	      {
+		m_core_unavailable_mappings.emplace_back (start, end - start);
+		/* Print just one warning per path.  */
+		if (unavailable_paths.insert (filename).second)
+		  warning (_("Can't open file %s during file-backed mapping "
+			     "note processing"),
+			   filename);
+		return;
+	      }
+
+	    bfd = bfd_map[filename] = bfd_openr (expanded_fname.get (),
+						 "binary");
+
+	    if (bfd == nullptr || !bfd_check_format (bfd, bfd_object))
+	      {
+		m_core_unavailable_mappings.emplace_back (start, end - start);
+		/* If we get here, there's a good chance that it's due to
+		   an internal error.  We issue a warning instead of an
+		   internal error because of the possibility that the
+		   file was removed in between checking for its
+		   existence during the expansion in exec_file_find()
+		   and the calls to bfd_openr() / bfd_check_format(). 
+		   Output both the path from the core file note along
+		   with its expansion to make debugging this problem
+		   easier.  */
+		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);
+	  }
+
+	/* 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);
+      });
 
-int
-default_check_format (bfd *abfd)
-{
-  return (0);
+  normalize_mem_ranges (&m_core_unavailable_mappings);
 }
 
-/* Attempt to recognize core file formats that BFD rejects.  */
-
-static int
-gdb_check_format (bfd *abfd)
-{
-  struct core_fns *cf;
-
-  for (cf = core_file_fns; cf != NULL; cf = cf->next)
-    {
-      if (cf->check_format (abfd))
-	{
-	  return (1);
-	}
-    }
-  return (0);
-}
+/* An arbitrary identifier for the core inferior.  */
+#define CORELOW_PID 1
 
 /* Close the core target.  */
 
@@ -261,12 +297,12 @@ core_target::close ()
 {
   if (core_bfd)
     {
-      inferior_ptid = null_ptid;    /* Avoid confusion from thread
-				       stuff.  */
+      switch_to_no_thread ();    /* 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.  */
+	 comments in clear_solib in solib.c.  */
       clear_solib ();
 
       current_program_space->cbfd.reset (nullptr);
@@ -281,12 +317,10 @@ core_target::close ()
    extract the list of threads in a core file.  */
 
 static void
-add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
+add_to_thread_list (asection *asect, asection *reg_sect)
 {
-  ptid_t ptid;
   int core_tid;
   int pid, lwpid;
-  asection *reg_sect = (asection *) reg_sect_arg;
   bool fake_pid_p = false;
   struct inferior *inf;
 
@@ -311,15 +345,15 @@ add_to_thread_list (bfd *abfd, asection
       inf->fake_pid_p = fake_pid_p;
     }
 
-  ptid = ptid_t (pid, lwpid, 0);
+  ptid_t ptid (pid, lwpid);
 
-  add_thread (ptid);
+  thread_info *thr = add_thread (inf->process_target (), ptid);
 
 /* 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.  */
@@ -394,9 +428,9 @@ 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 = gdb_abspath (filename.get ());
 
   flags = O_BINARY | O_LARGEFILE;
   if (write_files)
@@ -413,13 +447,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 +470,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
@@ -455,8 +488,9 @@ core_target_open (const char *arg, int f
   /* 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);
 
   if (inferior_ptid == null_ptid)
     {
@@ -471,17 +505,16 @@ core_target_open (const char *arg, int f
       if (thread == NULL)
 	{
 	  inferior_appeared (current_inferior (), CORELOW_PID);
-	  inferior_ptid = ptid_t (CORELOW_PID);
-	  add_thread_silent (inferior_ptid);
+	  thread = add_thread_silent (target, ptid_t (CORELOW_PID));
 	}
-      else
-	switch_to_thread (thread);
+
+      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
@@ -521,8 +554,11 @@ core_target_open (const char *arg, int f
 							       siggy)
 			     : gdb_signal_from_host (siggy));
 
-      printf_filtered (_("Program terminated with signal %s, %s.\n"),
+      printf_filtered (_("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);
+      printf_filtered (_(".\n"));
 
       /* Set the value of the internal variable $_exitsignal,
 	 which holds the signal uncaught by the inferior.  */
@@ -540,7 +576,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
 	{
@@ -559,7 +595,7 @@ core_target::detach (inferior *inf, int
   /* Note that 'this' is dangling after this call.  unpush_target
      closes the target, and our close implementation deletes
      'this'.  */
-  unpush_target (this);
+  inf->unpush_target (this);
 
   /* Clear the register cache and the frame cache.  */
   registers_changed ();
@@ -568,8 +604,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 +623,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 +656,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 +683,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 +704,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 +718,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");
       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 +744,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 +802,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)
 	{
@@ -910,6 +1016,29 @@ core_target::thread_alive (ptid_t ptid)
 const struct target_desc *
 core_target::read_description ()
 {
+  /* If the core file contains a target description note then we will use
+     that in preference to anything else.  */
+  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 (m_core_gdbarch && gdbarch_core_read_description_p (m_core_gdbarch))
     {
       const struct target_desc *result;
@@ -944,7 +1073,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 +1123,90 @@ core_target::info_proc (const char *args
   return true;
 }
 
+/* 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 ())
+    {
+      printf_filtered (_("Mapped address spaces:\n\n"));
+      if (gdbarch_addr_bit (gdbarch) == 32)
+	{
+	  printf_filtered ("\t%10s %10s %10s %10s %s\n",
+			   "Start Addr",
+			   "  End Addr",
+			   "      Size", "    Offset", "objfile");
+	}
+      else
+	{
+	  printf_filtered ("  %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)
+	printf_filtered ("\t%10s %10s %10s %10s %s\n",
+			 paddress (gdbarch, start),
+			 paddress (gdbarch, end),
+			 hex_string (end - start),
+			 hex_string (file_ofs),
+			 filename);
+      else
+	printf_filtered ("  %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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-abi.c ./gdb/cp-abi.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-abi.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-abi.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Generic code for supporting multiple C++ ABI's
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -220,11 +220,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);
 }
 
@@ -271,10 +273,8 @@ set_cp_abi_as_auto_default (const char *
 		    _("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;
 
@@ -389,8 +389,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-abi.h ./gdb/cp-abi.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-abi.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-abi.h	2021-12-16 01:57:39.000000000 +0000
@@ -3,7 +3,7 @@
 
    Contributed by Daniel Berlin <dberlin@redhat.com>
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -135,7 +135,7 @@ extern struct value *value_virtual_fn_fi
    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
@@ -207,9 +207,11 @@ extern std::string cplus_typename_from_t
 CORE_ADDR cplus_skip_trampoline (struct frame_info *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
 {
@@ -246,7 +248,7 @@ struct cp_abi_ops
   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);
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-name-parser.c ./gdb/cp-name-parser.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-name-parser.c	2020-03-07 02:11:12.000000000 +0000
+++ ./gdb/cp-name-parser.c	2021-12-16 02:00:18.000000000 +0000
@@ -1,21 +1,20 @@
+/* A Bison parser, made by GNU Bison 3.6.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, 2018-2020 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,13 +27,17 @@
    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.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -46,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,14 +63,10 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
-/* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
+/* First part of user prologue.  */
 #line 38 "cp-name-parser.y"
 
 
@@ -95,88 +94,104 @@ struct demangle_info {
 };
 
 
+#line 98 "cp-name-parser.c.tmp"
+
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTRPTR nullptr
+#   else
+#    define YY_NULLPTRPTR 0
+#   endif
+#  else
+#   define YY_NULLPTRPTR ((void*)0)
+#  endif
+# endif
 
-/* Line 189 of yacc.c  */
-#line 101 "cp-name-parser.c.tmp"
 
-/* Enabling traces.  */
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+#if YYDEBUG
+extern int yydebug;
 #endif
 
-
-/* Tokens.  */
+/* Token kinds.  */
 #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
-   };
-#endif
-/* Tokens.  */
+  enum yytokentype
+  {
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    INT = 258,                     /* INT  */
+    FLOAT = 259,                   /* FLOAT  */
+    NAME = 260,                    /* NAME  */
+    STRUCT = 261,                  /* STRUCT  */
+    CLASS = 262,                   /* CLASS  */
+    UNION = 263,                   /* UNION  */
+    ENUM = 264,                    /* ENUM  */
+    SIZEOF = 265,                  /* SIZEOF  */
+    UNSIGNED = 266,                /* UNSIGNED  */
+    COLONCOLON = 267,              /* COLONCOLON  */
+    TEMPLATE = 268,                /* TEMPLATE  */
+    ERROR = 269,                   /* ERROR  */
+    NEW = 270,                     /* NEW  */
+    DELETE = 271,                  /* DELETE  */
+    OPERATOR = 272,                /* OPERATOR  */
+    STATIC_CAST = 273,             /* STATIC_CAST  */
+    REINTERPRET_CAST = 274,        /* REINTERPRET_CAST  */
+    DYNAMIC_CAST = 275,            /* DYNAMIC_CAST  */
+    SIGNED_KEYWORD = 276,          /* SIGNED_KEYWORD  */
+    LONG = 277,                    /* LONG  */
+    SHORT = 278,                   /* SHORT  */
+    INT_KEYWORD = 279,             /* INT_KEYWORD  */
+    CONST_KEYWORD = 280,           /* CONST_KEYWORD  */
+    VOLATILE_KEYWORD = 281,        /* VOLATILE_KEYWORD  */
+    DOUBLE_KEYWORD = 282,          /* DOUBLE_KEYWORD  */
+    BOOL = 283,                    /* BOOL  */
+    ELLIPSIS = 284,                /* ELLIPSIS  */
+    RESTRICT = 285,                /* RESTRICT  */
+    VOID = 286,                    /* VOID  */
+    FLOAT_KEYWORD = 287,           /* FLOAT_KEYWORD  */
+    CHAR = 288,                    /* CHAR  */
+    WCHAR_T = 289,                 /* WCHAR_T  */
+    ASSIGN_MODIFY = 290,           /* ASSIGN_MODIFY  */
+    TRUEKEYWORD = 291,             /* TRUEKEYWORD  */
+    FALSEKEYWORD = 292,            /* FALSEKEYWORD  */
+    DEMANGLER_SPECIAL = 293,       /* DEMANGLER_SPECIAL  */
+    CONSTRUCTION_VTABLE = 294,     /* CONSTRUCTION_VTABLE  */
+    CONSTRUCTION_IN = 295,         /* CONSTRUCTION_IN  */
+    OROR = 296,                    /* OROR  */
+    ANDAND = 297,                  /* ANDAND  */
+    EQUAL = 298,                   /* EQUAL  */
+    NOTEQUAL = 299,                /* NOTEQUAL  */
+    LEQ = 300,                     /* LEQ  */
+    GEQ = 301,                     /* GEQ  */
+    LSH = 302,                     /* LSH  */
+    RSH = 303,                     /* RSH  */
+    UNARY = 304,                   /* UNARY  */
+    INCREMENT = 305,               /* INCREMENT  */
+    DECREMENT = 306,               /* DECREMENT  */
+    ARROW = 307                    /* ARROW  */
+  };
+  typedef enum yytokentype yytoken_kind_t;
+#endif
+/* Token kinds.  */
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
 #define INT 258
 #define FLOAT 259
 #define NAME 260
@@ -217,25 +232,21 @@ 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 YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
 #line 66 "cp-name-parser.y"
 
     struct demangle_component *comp;
@@ -256,19 +267,143 @@ typedef union YYSTYPE
     const char *opname;
   
 
+#line 271 "cp-name-parser.c.tmp"
 
-/* Line 214 of yacc.c  */
-#line 262 "cp-name-parser.c.tmp"
-} YYSTYPE;
+};
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
 
-/* Line 264 of yacc.c  */
+int yyparse (struct cpname_state *state);
+
+
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_INT = 3,                        /* INT  */
+  YYSYMBOL_FLOAT = 4,                      /* FLOAT  */
+  YYSYMBOL_NAME = 5,                       /* NAME  */
+  YYSYMBOL_STRUCT = 6,                     /* STRUCT  */
+  YYSYMBOL_CLASS = 7,                      /* CLASS  */
+  YYSYMBOL_UNION = 8,                      /* UNION  */
+  YYSYMBOL_ENUM = 9,                       /* ENUM  */
+  YYSYMBOL_SIZEOF = 10,                    /* SIZEOF  */
+  YYSYMBOL_UNSIGNED = 11,                  /* UNSIGNED  */
+  YYSYMBOL_COLONCOLON = 12,                /* COLONCOLON  */
+  YYSYMBOL_TEMPLATE = 13,                  /* TEMPLATE  */
+  YYSYMBOL_ERROR = 14,                     /* ERROR  */
+  YYSYMBOL_NEW = 15,                       /* NEW  */
+  YYSYMBOL_DELETE = 16,                    /* DELETE  */
+  YYSYMBOL_OPERATOR = 17,                  /* OPERATOR  */
+  YYSYMBOL_STATIC_CAST = 18,               /* STATIC_CAST  */
+  YYSYMBOL_REINTERPRET_CAST = 19,          /* REINTERPRET_CAST  */
+  YYSYMBOL_DYNAMIC_CAST = 20,              /* DYNAMIC_CAST  */
+  YYSYMBOL_SIGNED_KEYWORD = 21,            /* SIGNED_KEYWORD  */
+  YYSYMBOL_LONG = 22,                      /* LONG  */
+  YYSYMBOL_SHORT = 23,                     /* SHORT  */
+  YYSYMBOL_INT_KEYWORD = 24,               /* INT_KEYWORD  */
+  YYSYMBOL_CONST_KEYWORD = 25,             /* CONST_KEYWORD  */
+  YYSYMBOL_VOLATILE_KEYWORD = 26,          /* VOLATILE_KEYWORD  */
+  YYSYMBOL_DOUBLE_KEYWORD = 27,            /* DOUBLE_KEYWORD  */
+  YYSYMBOL_BOOL = 28,                      /* BOOL  */
+  YYSYMBOL_ELLIPSIS = 29,                  /* ELLIPSIS  */
+  YYSYMBOL_RESTRICT = 30,                  /* RESTRICT  */
+  YYSYMBOL_VOID = 31,                      /* VOID  */
+  YYSYMBOL_FLOAT_KEYWORD = 32,             /* FLOAT_KEYWORD  */
+  YYSYMBOL_CHAR = 33,                      /* CHAR  */
+  YYSYMBOL_WCHAR_T = 34,                   /* WCHAR_T  */
+  YYSYMBOL_ASSIGN_MODIFY = 35,             /* ASSIGN_MODIFY  */
+  YYSYMBOL_TRUEKEYWORD = 36,               /* TRUEKEYWORD  */
+  YYSYMBOL_FALSEKEYWORD = 37,              /* FALSEKEYWORD  */
+  YYSYMBOL_DEMANGLER_SPECIAL = 38,         /* DEMANGLER_SPECIAL  */
+  YYSYMBOL_CONSTRUCTION_VTABLE = 39,       /* CONSTRUCTION_VTABLE  */
+  YYSYMBOL_CONSTRUCTION_IN = 40,           /* CONSTRUCTION_IN  */
+  YYSYMBOL_41_ = 41,                       /* ')'  */
+  YYSYMBOL_42_ = 42,                       /* ','  */
+  YYSYMBOL_43_ = 43,                       /* '='  */
+  YYSYMBOL_44_ = 44,                       /* '?'  */
+  YYSYMBOL_OROR = 45,                      /* OROR  */
+  YYSYMBOL_ANDAND = 46,                    /* ANDAND  */
+  YYSYMBOL_47_ = 47,                       /* '|'  */
+  YYSYMBOL_48_ = 48,                       /* '^'  */
+  YYSYMBOL_49_ = 49,                       /* '&'  */
+  YYSYMBOL_EQUAL = 50,                     /* EQUAL  */
+  YYSYMBOL_NOTEQUAL = 51,                  /* NOTEQUAL  */
+  YYSYMBOL_52_ = 52,                       /* '<'  */
+  YYSYMBOL_53_ = 53,                       /* '>'  */
+  YYSYMBOL_LEQ = 54,                       /* LEQ  */
+  YYSYMBOL_GEQ = 55,                       /* GEQ  */
+  YYSYMBOL_LSH = 56,                       /* LSH  */
+  YYSYMBOL_RSH = 57,                       /* RSH  */
+  YYSYMBOL_58_ = 58,                       /* '@'  */
+  YYSYMBOL_59_ = 59,                       /* '+'  */
+  YYSYMBOL_60_ = 60,                       /* '-'  */
+  YYSYMBOL_61_ = 61,                       /* '*'  */
+  YYSYMBOL_62_ = 62,                       /* '/'  */
+  YYSYMBOL_63_ = 63,                       /* '%'  */
+  YYSYMBOL_UNARY = 64,                     /* UNARY  */
+  YYSYMBOL_INCREMENT = 65,                 /* INCREMENT  */
+  YYSYMBOL_DECREMENT = 66,                 /* DECREMENT  */
+  YYSYMBOL_ARROW = 67,                     /* ARROW  */
+  YYSYMBOL_68_ = 68,                       /* '.'  */
+  YYSYMBOL_69_ = 69,                       /* '['  */
+  YYSYMBOL_70_ = 70,                       /* ']'  */
+  YYSYMBOL_71_ = 71,                       /* '~'  */
+  YYSYMBOL_72_ = 72,                       /* '!'  */
+  YYSYMBOL_73_ = 73,                       /* '('  */
+  YYSYMBOL_74_ = 74,                       /* ':'  */
+  YYSYMBOL_YYACCEPT = 75,                  /* $accept  */
+  YYSYMBOL_result = 76,                    /* result  */
+  YYSYMBOL_start = 77,                     /* start  */
+  YYSYMBOL_start_opt = 78,                 /* start_opt  */
+  YYSYMBOL_function = 79,                  /* function  */
+  YYSYMBOL_demangler_special = 80,         /* demangler_special  */
+  YYSYMBOL_oper = 81,                      /* oper  */
+  YYSYMBOL_conversion_op = 82,             /* conversion_op  */
+  YYSYMBOL_conversion_op_name = 83,        /* conversion_op_name  */
+  YYSYMBOL_unqualified_name = 84,          /* unqualified_name  */
+  YYSYMBOL_colon_name = 85,                /* colon_name  */
+  YYSYMBOL_name = 86,                      /* name  */
+  YYSYMBOL_colon_ext_name = 87,            /* colon_ext_name  */
+  YYSYMBOL_colon_ext_only = 88,            /* colon_ext_only  */
+  YYSYMBOL_ext_only_name = 89,             /* ext_only_name  */
+  YYSYMBOL_nested_name = 90,               /* nested_name  */
+  YYSYMBOL_templ = 91,                     /* templ  */
+  YYSYMBOL_template_params = 92,           /* template_params  */
+  YYSYMBOL_template_arg = 93,              /* template_arg  */
+  YYSYMBOL_function_args = 94,             /* function_args  */
+  YYSYMBOL_function_arglist = 95,          /* function_arglist  */
+  YYSYMBOL_qualifiers_opt = 96,            /* qualifiers_opt  */
+  YYSYMBOL_qualifier = 97,                 /* qualifier  */
+  YYSYMBOL_qualifiers = 98,                /* qualifiers  */
+  YYSYMBOL_int_part = 99,                  /* int_part  */
+  YYSYMBOL_int_seq = 100,                  /* int_seq  */
+  YYSYMBOL_builtin_type = 101,             /* builtin_type  */
+  YYSYMBOL_ptr_operator = 102,             /* ptr_operator  */
+  YYSYMBOL_array_indicator = 103,          /* array_indicator  */
+  YYSYMBOL_typespec_2 = 104,               /* typespec_2  */
+  YYSYMBOL_abstract_declarator = 105,      /* abstract_declarator  */
+  YYSYMBOL_direct_abstract_declarator = 106, /* direct_abstract_declarator  */
+  YYSYMBOL_abstract_declarator_fn = 107,   /* abstract_declarator_fn  */
+  YYSYMBOL_type = 108,                     /* type  */
+  YYSYMBOL_declarator = 109,               /* declarator  */
+  YYSYMBOL_direct_declarator = 110,        /* direct_declarator  */
+  YYSYMBOL_declarator_1 = 111,             /* declarator_1  */
+  YYSYMBOL_direct_declarator_1 = 112,      /* direct_declarator_1  */
+  YYSYMBOL_exp = 113,                      /* exp  */
+  YYSYMBOL_exp1 = 114                      /* exp1  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
+
+/* Second part of user prologue.  */
 #line 85 "cp-name-parser.y"
 
 
@@ -437,39 +572,82 @@ cpname_state::make_name (const char *nam
 static int yylex (YYSTYPE *, cpname_state *);
 static void yyerror (cpname_state *, const char *);
 
+#line 576 "cp-name-parser.c.tmp"
 
-/* Line 264 of yacc.c  */
-#line 443 "cp-name-parser.c.tmp"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
+#else
 typedef signed char yytype_int8;
+#endif
+
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
-typedef short int yytype_int8;
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_uint8;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
 #else
-typedef short int yytype_int16;
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -477,55 +655,100 @@ 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 __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int16 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #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_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
 # 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__ && ! defined __ICC && 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
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
 
@@ -541,11 +764,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 +776,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,92 +791,93 @@ 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
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   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 (YYSIZEOF (union 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) * (YYSIZEOF (yy_state_t) + YYSIZEOF (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                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*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, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYPTRDIFF_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 +885,33 @@ 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.  */
-#define YYUNDEFTOK  2
 #define YYMAXUTOK   307
 
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
+static const yytype_int8 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,106 +932,12 @@ 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.  */
-static const yytype_uint16 yyrline[] =
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 yyrline[] =
 {
        0,   348,   348,   352,   354,   356,   361,   362,   369,   378,
      385,   389,   392,   411,   413,   417,   423,   429,   435,   441,
@@ -828,39 +962,53 @@ static const yytype_uint16 yyrline[] =
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* 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", "NAME", "STRUCT",
-  "CLASS", "UNION", "ENUM", "SIZEOF", "UNSIGNED", "COLONCOLON", "TEMPLATE",
-  "ERROR", "NEW", "DELETE", "OPERATOR", "STATIC_CAST", "REINTERPRET_CAST",
-  "DYNAMIC_CAST", "SIGNED_KEYWORD", "LONG", "SHORT", "INT_KEYWORD",
-  "CONST_KEYWORD", "VOLATILE_KEYWORD", "DOUBLE_KEYWORD", "BOOL",
-  "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", "']'", "'~'",
-  "'!'", "'('", "':'", "$accept", "result", "start", "start_opt",
-  "function", "demangler_special", "oper", "conversion_op",
-  "conversion_op_name", "unqualified_name", "colon_name", "name",
-  "colon_ext_name", "colon_ext_only", "ext_only_name", "nested_name",
-  "templ", "template_params", "template_arg", "function_args",
-  "function_arglist", "qualifiers_opt", "qualifier", "qualifiers",
-  "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
+  "\"end of file\"", "error", "\"invalid token\"", "INT", "FLOAT", "NAME",
+  "STRUCT", "CLASS", "UNION", "ENUM", "SIZEOF", "UNSIGNED", "COLONCOLON",
+  "TEMPLATE", "ERROR", "NEW", "DELETE", "OPERATOR", "STATIC_CAST",
+  "REINTERPRET_CAST", "DYNAMIC_CAST", "SIGNED_KEYWORD", "LONG", "SHORT",
+  "INT_KEYWORD", "CONST_KEYWORD", "VOLATILE_KEYWORD", "DOUBLE_KEYWORD",
+  "BOOL", "ELLIPSIS", "RESTRICT", "VOID", "FLOAT_KEYWORD", "CHAR",
+  "WCHAR_T", "ASSIGN_MODIFY", "TRUEKEYWORD", "FALSEKEYWORD",
+  "DEMANGLER_SPECIAL", "CONSTRUCTION_VTABLE", "CONSTRUCTION_IN", "')'",
+  "','", "'='", "'?'", "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", "colon_ext_name", "colon_ext_only", "ext_only_name",
+  "nested_name", "templ", "template_params", "template_arg",
+  "function_args", "function_arglist", "qualifiers_opt", "qualifier",
+  "qualifiers", "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", YY_NULLPTRPTR
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -868,64 +1016,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
+#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(Yyn) \
+  ((Yyn) == YYPACT_NINF)
+
+#define YYTABLE_NINF (-1)
+
+#define yytable_value_is_error(Yyn) \
+  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 +1080,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 +1090,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 +1102,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 +1128,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
-static const yytype_uint16 yytable[] =
+  /* 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[] =
 {
       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 +1193,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,67 +1311,65 @@ 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.  */
-static const yytype_uint8 yystos[] =
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_int8 yystos[] =
 {
        0,     5,    11,    12,    17,    21,    22,    23,    24,    25,
       26,    27,    28,    30,    31,    32,    33,    34,    38,    39,
@@ -1277,15 +1378,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 +1394,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,181 +1406,159 @@ 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_int8 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_int8 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.  */
+enum { YYENOMEM = -2 };
 
-#define YYFAIL		goto yyerrlab
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
 
-#define YYRECOVERING()  (!!yyerrstatus)
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
-      yyerror (state, YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
 
+#define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYTERROR	1
-#define YYERRCODE	256
+#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 (0)
+
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
 
-/* 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
+/* Enable debugging if requested.  */
+#if YYDEBUG
 
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# 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 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
-#endif
 
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Kind, Value, state); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
 
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, state)
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
 
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
-# 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))
-
-
-/*--------------------------------.
-| 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
 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 *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, struct cpname_state *state)
 {
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
+  YYUSE (state);
   if (!yyvaluep)
     return;
-  YYUSE (state);
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#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 *yyo,
+                 yysymbol_kind_t yykind, 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 (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep, state);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep, state);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1487,16 +1566,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
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1507,64 +1578,56 @@ 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 (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule, struct cpname_state *state)
 {
+  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);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             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,
+                       YY_ACCESSING_SYMBOL (+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.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1579,343 +1642,89 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   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++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  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;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
 
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      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;
-	  }
-    do_not_strip_quotes: ;
-    }
 
-  if (! yyres)
-    return yystrlen (yystr);
 
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# 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)
-{
-  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;
-    }
-}
-#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,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep, struct cpname_state *state)
 {
   YYUSE (yyvaluep);
   YYUSE (state);
-
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  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 YYSTYPE yyval_default;)
+YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 
     /* Number of syntax errors so far.  */
     int yynerrs;
 
-    int yystate;
+    yy_state_fast_t 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.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -1923,133 +1732,147 @@ YYSTYPE yylval;
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
   yystacksize = YYINITDEPTH;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  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;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined 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);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+
+        /* 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 * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* 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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, 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 */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
   /* 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.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      YYDPRINTF ((stderr, "Reading a token\n"));
+      yychar = yylex (&yylval, state);
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -2064,8 +1887,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;
     }
@@ -2077,13 +1900,13 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -2098,14 +1921,14 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   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
@@ -2118,1504 +1941,1309 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
-
-/* Line 1455 of yacc.c  */
+  case 2:
 #line 349 "cp-name-parser.y"
-    { state->global_result = (yyvsp[(1) - (1)].comp); }
+                        { state->global_result = (yyvsp[0].comp); }
+#line 1949 "cp-name-parser.c.tmp"
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
 #line 361 "cp-name-parser.y"
-    { (yyval.comp) = NULL; }
+                        { (yyval.comp) = NULL; }
+#line 1955 "cp-name-parser.c.tmp"
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
 #line 363 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+                        { (yyval.comp) = (yyvsp[0].comp); }
+#line 1961 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.comp) = (yyvsp[0].nested).comp;
+			  *(yyvsp[0].nested).last = (yyvsp[-1].comp);
 			}
+#line 1969 "cp-name-parser.c.tmp"
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
 #line 379 "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_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[(3) - (3)].comp));
+						   (yyval.comp), (yyvsp[0].comp));
 			}
+#line 1980 "cp-name-parser.c.tmp"
     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)); }
+                        { (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 1987 "cp-name-parser.c.tmp"
     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)); }
+                        { (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 1994 "cp-name-parser.c.tmp"
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
 #line 393 "cp-name-parser.y"
-    { if ((yyvsp[(2) - (2)].abstract).last)
+                        { 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 2014 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->fill_comp ((enum demangle_component_type) (yyvsp[-1].lval), (yyvsp[0].comp), NULL); }
+#line 2020 "cp-name-parser.c.tmp"
     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)); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 2026 "cp-name-parser.c.tmp"
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
 #line 418 "cp-name-parser.y"
-    {
+                        {
 			  /* 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"
     break;
 
   case 16:
-
-/* Line 1455 of yacc.c  */
 #line 424 "cp-name-parser.y"
-    {
+                        {
 			  /* 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"
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
 #line 430 "cp-name-parser.y"
-    {
+                        {
 			  /* Match the whitespacing of cplus_demangle_operators.
 			     It would abort on unrecognized string otherwise.  */
 			  (yyval.comp) = state->make_operator ("new[]", 3);
 			}
+#line 2056 "cp-name-parser.c.tmp"
     break;
 
   case 18:
-
-/* Line 1455 of yacc.c  */
 #line 436 "cp-name-parser.y"
-    {
+                        {
 			  /* Match the whitespacing of cplus_demangle_operators.
 			     It would abort on unrecognized string otherwise.  */
 			  (yyval.comp) = state->make_operator ("delete[] ", 1);
 			}
+#line 2066 "cp-name-parser.c.tmp"
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
 #line 442 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("+", 2); }
+                        { (yyval.comp) = state->make_operator ("+", 2); }
+#line 2072 "cp-name-parser.c.tmp"
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
 #line 444 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("-", 2); }
+                        { (yyval.comp) = state->make_operator ("-", 2); }
+#line 2078 "cp-name-parser.c.tmp"
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
 #line 446 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("*", 2); }
+                        { (yyval.comp) = state->make_operator ("*", 2); }
+#line 2084 "cp-name-parser.c.tmp"
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
 #line 448 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("/", 2); }
+                        { (yyval.comp) = state->make_operator ("/", 2); }
+#line 2090 "cp-name-parser.c.tmp"
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
 #line 450 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("%", 2); }
+                        { (yyval.comp) = state->make_operator ("%", 2); }
+#line 2096 "cp-name-parser.c.tmp"
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
 #line 452 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("^", 2); }
+                        { (yyval.comp) = state->make_operator ("^", 2); }
+#line 2102 "cp-name-parser.c.tmp"
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
 #line 454 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("&", 2); }
+                        { (yyval.comp) = state->make_operator ("&", 2); }
+#line 2108 "cp-name-parser.c.tmp"
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
 #line 456 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("|", 2); }
+                        { (yyval.comp) = state->make_operator ("|", 2); }
+#line 2114 "cp-name-parser.c.tmp"
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
 #line 458 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("~", 1); }
+                        { (yyval.comp) = state->make_operator ("~", 1); }
+#line 2120 "cp-name-parser.c.tmp"
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
 #line 460 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("!", 1); }
+                        { (yyval.comp) = state->make_operator ("!", 1); }
+#line 2126 "cp-name-parser.c.tmp"
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
 #line 462 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("=", 2); }
+                        { (yyval.comp) = state->make_operator ("=", 2); }
+#line 2132 "cp-name-parser.c.tmp"
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
 #line 464 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("<", 2); }
+                        { (yyval.comp) = state->make_operator ("<", 2); }
+#line 2138 "cp-name-parser.c.tmp"
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
 #line 466 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator (">", 2); }
+                        { (yyval.comp) = state->make_operator (">", 2); }
+#line 2144 "cp-name-parser.c.tmp"
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
 #line 468 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ((yyvsp[(2) - (2)].opname), 2); }
+                        { (yyval.comp) = state->make_operator ((yyvsp[0].opname), 2); }
+#line 2150 "cp-name-parser.c.tmp"
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
 #line 470 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("<<", 2); }
+                        { (yyval.comp) = state->make_operator ("<<", 2); }
+#line 2156 "cp-name-parser.c.tmp"
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
 #line 472 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator (">>", 2); }
+                        { (yyval.comp) = state->make_operator (">>", 2); }
+#line 2162 "cp-name-parser.c.tmp"
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
 #line 474 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("==", 2); }
+                        { (yyval.comp) = state->make_operator ("==", 2); }
+#line 2168 "cp-name-parser.c.tmp"
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
 #line 476 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("!=", 2); }
+                        { (yyval.comp) = state->make_operator ("!=", 2); }
+#line 2174 "cp-name-parser.c.tmp"
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
 #line 478 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("<=", 2); }
+                        { (yyval.comp) = state->make_operator ("<=", 2); }
+#line 2180 "cp-name-parser.c.tmp"
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
 #line 480 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator (">=", 2); }
+                        { (yyval.comp) = state->make_operator (">=", 2); }
+#line 2186 "cp-name-parser.c.tmp"
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
 #line 482 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("&&", 2); }
+                        { (yyval.comp) = state->make_operator ("&&", 2); }
+#line 2192 "cp-name-parser.c.tmp"
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
 #line 484 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("||", 2); }
+                        { (yyval.comp) = state->make_operator ("||", 2); }
+#line 2198 "cp-name-parser.c.tmp"
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
 #line 486 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("++", 1); }
+                        { (yyval.comp) = state->make_operator ("++", 1); }
+#line 2204 "cp-name-parser.c.tmp"
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
 #line 488 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("--", 1); }
+                        { (yyval.comp) = state->make_operator ("--", 1); }
+#line 2210 "cp-name-parser.c.tmp"
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
 #line 490 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator (",", 2); }
+                        { (yyval.comp) = state->make_operator (",", 2); }
+#line 2216 "cp-name-parser.c.tmp"
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
 #line 492 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("->*", 2); }
+                        { (yyval.comp) = state->make_operator ("->*", 2); }
+#line 2222 "cp-name-parser.c.tmp"
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
 #line 494 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("->", 2); }
+                        { (yyval.comp) = state->make_operator ("->", 2); }
+#line 2228 "cp-name-parser.c.tmp"
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
 #line 496 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("()", 2); }
+                        { (yyval.comp) = state->make_operator ("()", 2); }
+#line 2234 "cp-name-parser.c.tmp"
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
 #line 498 "cp-name-parser.y"
-    { (yyval.comp) = state->make_operator ("[]", 2); }
+                        { (yyval.comp) = state->make_operator ("[]", 2); }
+#line 2240 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONVERSION, (yyvsp[0].comp), NULL); }
+#line 2246 "cp-name-parser.c.tmp"
     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));
+                        { (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 2255 "cp-name-parser.c.tmp"
     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));
+                        { (yyval.nested).comp = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_left ((yyvsp[0].comp));
 			}
+#line 2263 "cp-name-parser.c.tmp"
     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));
+                        { (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 2272 "cp-name-parser.c.tmp"
     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));
+                        { (yyval.nested).comp = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_left ((yyvsp[0].comp));
 			}
+#line 2280 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); }
+#line 2286 "cp-name-parser.c.tmp"
     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)); }
+                        { (yyval.comp) = state->make_dtor (gnu_v3_complete_object_dtor, (yyvsp[0].comp)); }
+#line 2292 "cp-name-parser.c.tmp"
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
 #line 549 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+                        { (yyval.comp) = (yyvsp[0].comp); }
+#line 2298 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); }
+#line 2304 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); }
+#line 2310 "cp-name-parser.c.tmp"
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
 #line 568 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+                        { (yyval.comp) = (yyvsp[0].comp); }
+#line 2316 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); }
+#line 2322 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL);
 			  (yyval.nested1).last = (yyval.nested1).comp;
 			}
+#line 2330 "cp-name-parser.c.tmp"
     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);
+                        { (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 2339 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL);
 			  (yyval.nested1).last = (yyval.nested1).comp;
 			}
+#line 2347 "cp-name-parser.c.tmp"
     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);
+                        { (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 2356 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); }
+#line 2362 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[0].comp), NULL);
 			(yyval.nested).last = &d_right ((yyval.nested).comp); }
+#line 2369 "cp-name-parser.c.tmp"
     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);
+                        { (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 2378 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.comp) = (yyvsp[0].abstract).comp;
+			  *(yyvsp[0].abstract).last = (yyvsp[-1].comp);
 			}
+#line 2386 "cp-name-parser.c.tmp"
     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)); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); }
+#line 2392 "cp-name-parser.c.tmp"
     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)); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); }
+#line 2398 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2406 "cp-name-parser.c.tmp"
     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);
+                        { *(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 2415 "cp-name-parser.c.tmp"
     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);
+                        { *(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 2424 "cp-name-parser.c.tmp"
     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);
+                        { *(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 2434 "cp-name-parser.c.tmp"
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
 #line 649 "cp-name-parser.y"
-    { *(yyvsp[(1) - (3)].nested).last
+                        { *(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 2446 "cp-name-parser.c.tmp"
     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);
+                        { (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 2454 "cp-name-parser.c.tmp"
     break;
 
   case 86:
-
-/* Line 1455 of yacc.c  */
 #line 663 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL);
+                        { (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 2462 "cp-name-parser.c.tmp"
     break;
 
   case 87:
-
-/* Line 1455 of yacc.c  */
 #line 667 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL);
+                        { (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 2470 "cp-name-parser.c.tmp"
     break;
 
   case 88:
-
-/* Line 1455 of yacc.c  */
 #line 674 "cp-name-parser.y"
-    { (yyval.lval) = 0; }
+                        { (yyval.lval) = 0; }
+#line 2476 "cp-name-parser.c.tmp"
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
 #line 679 "cp-name-parser.y"
-    { (yyval.lval) = QUAL_RESTRICT; }
+                        { (yyval.lval) = QUAL_RESTRICT; }
+#line 2482 "cp-name-parser.c.tmp"
     break;
 
   case 91:
-
-/* Line 1455 of yacc.c  */
 #line 681 "cp-name-parser.y"
-    { (yyval.lval) = QUAL_VOLATILE; }
+                        { (yyval.lval) = QUAL_VOLATILE; }
+#line 2488 "cp-name-parser.c.tmp"
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
 #line 683 "cp-name-parser.y"
-    { (yyval.lval) = QUAL_CONST; }
+                        { (yyval.lval) = QUAL_CONST; }
+#line 2494 "cp-name-parser.c.tmp"
     break;
 
   case 94:
-
-/* Line 1455 of yacc.c  */
 #line 688 "cp-name-parser.y"
-    { (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval); }
+                        { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); }
+#line 2500 "cp-name-parser.c.tmp"
     break;
 
   case 95:
-
-/* Line 1455 of yacc.c  */
 #line 695 "cp-name-parser.y"
-    { (yyval.lval) = 0; }
+                        { (yyval.lval) = 0; }
+#line 2506 "cp-name-parser.c.tmp"
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
 #line 697 "cp-name-parser.y"
-    { (yyval.lval) = INT_SIGNED; }
+                        { (yyval.lval) = INT_SIGNED; }
+#line 2512 "cp-name-parser.c.tmp"
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
 #line 699 "cp-name-parser.y"
-    { (yyval.lval) = INT_UNSIGNED; }
+                        { (yyval.lval) = INT_UNSIGNED; }
+#line 2518 "cp-name-parser.c.tmp"
     break;
 
   case 98:
-
-/* Line 1455 of yacc.c  */
 #line 701 "cp-name-parser.y"
-    { (yyval.lval) = INT_CHAR; }
+                        { (yyval.lval) = INT_CHAR; }
+#line 2524 "cp-name-parser.c.tmp"
     break;
 
   case 99:
-
-/* Line 1455 of yacc.c  */
 #line 703 "cp-name-parser.y"
-    { (yyval.lval) = INT_LONG; }
+                        { (yyval.lval) = INT_LONG; }
+#line 2530 "cp-name-parser.c.tmp"
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
 #line 705 "cp-name-parser.y"
-    { (yyval.lval) = INT_SHORT; }
+                        { (yyval.lval) = INT_SHORT; }
+#line 2536 "cp-name-parser.c.tmp"
     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; }
+                        { (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 2542 "cp-name-parser.c.tmp"
     break;
 
   case 103:
-
-/* Line 1455 of yacc.c  */
 #line 714 "cp-name-parser.y"
-    { (yyval.comp) = state->d_int_type ((yyvsp[(1) - (1)].lval)); }
+                        { (yyval.comp) = state->d_int_type ((yyvsp[0].lval)); }
+#line 2548 "cp-name-parser.c.tmp"
     break;
 
   case 104:
-
-/* Line 1455 of yacc.c  */
 #line 716 "cp-name-parser.y"
-    { (yyval.comp) = state->make_builtin_type ("float"); }
+                        { (yyval.comp) = state->make_builtin_type ("float"); }
+#line 2554 "cp-name-parser.c.tmp"
     break;
 
   case 105:
-
-/* Line 1455 of yacc.c  */
 #line 718 "cp-name-parser.y"
-    { (yyval.comp) = state->make_builtin_type ("double"); }
+                        { (yyval.comp) = state->make_builtin_type ("double"); }
+#line 2560 "cp-name-parser.c.tmp"
     break;
 
   case 106:
-
-/* Line 1455 of yacc.c  */
 #line 720 "cp-name-parser.y"
-    { (yyval.comp) = state->make_builtin_type ("long double"); }
+                        { (yyval.comp) = state->make_builtin_type ("long double"); }
+#line 2566 "cp-name-parser.c.tmp"
     break;
 
   case 107:
-
-/* Line 1455 of yacc.c  */
 #line 722 "cp-name-parser.y"
-    { (yyval.comp) = state->make_builtin_type ("bool"); }
+                        { (yyval.comp) = state->make_builtin_type ("bool"); }
+#line 2572 "cp-name-parser.c.tmp"
     break;
 
   case 108:
-
-/* Line 1455 of yacc.c  */
 #line 724 "cp-name-parser.y"
-    { (yyval.comp) = state->make_builtin_type ("wchar_t"); }
+                        { (yyval.comp) = state->make_builtin_type ("wchar_t"); }
+#line 2578 "cp-name-parser.c.tmp"
     break;
 
   case 109:
-
-/* Line 1455 of yacc.c  */
 #line 726 "cp-name-parser.y"
-    { (yyval.comp) = state->make_builtin_type ("void"); }
+                        { (yyval.comp) = state->make_builtin_type ("void"); }
+#line 2584 "cp-name-parser.c.tmp"
     break;
 
   case 110:
-
-/* Line 1455 of yacc.c  */
 #line 730 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_POINTER, NULL, NULL);
+                        { (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 2592 "cp-name-parser.c.tmp"
     break;
 
   case 111:
-
-/* Line 1455 of yacc.c  */
 #line 735 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_REFERENCE, NULL, NULL);
+                        { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_REFERENCE, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp); }
+#line 2599 "cp-name-parser.c.tmp"
     break;
 
   case 112:
-
-/* Line 1455 of yacc.c  */
 #line 738 "cp-name-parser.y"
-    { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_RVALUE_REFERENCE, NULL, NULL);
+                        { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_RVALUE_REFERENCE, NULL, NULL);
 			  (yyval.nested).last = &d_left ((yyval.nested).comp); }
+#line 2606 "cp-name-parser.c.tmp"
     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);
+                        { (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 2616 "cp-name-parser.c.tmp"
     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);
+                        { (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 2626 "cp-name-parser.c.tmp"
     break;
 
   case 115:
-
-/* Line 1455 of yacc.c  */
 #line 755 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, NULL, NULL); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, NULL, NULL); }
+#line 2632 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, (yyvsp[-1].comp), NULL); }
+#line 2638 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); }
+#line 2644 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); }
+#line 2650 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); }
+#line 2656 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); }
+#line 2662 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); }
+#line 2668 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); }
+#line 2674 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); }
+#line 2680 "cp-name-parser.c.tmp"
     break;
 
   case 126:
-
-/* Line 1455 of yacc.c  */
 #line 789 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (2)].comp); }
+                        { (yyval.comp) = (yyvsp[0].comp); }
+#line 2686 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-3].lval) | (yyvsp[0].lval), 0); }
+#line 2692 "cp-name-parser.c.tmp"
     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); }
+                        { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-2].lval), 0); }
+#line 2698 "cp-name-parser.c.tmp"
     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;
+                        { (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 2705 "cp-name-parser.c.tmp"
     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; }
+                        { (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 2714 "cp-name-parser.c.tmp"
     break;
 
   case 131:
-
-/* Line 1455 of yacc.c  */
 #line 806 "cp-name-parser.y"
-    { (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; }
+                        { (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; }
 			}
+#line 2722 "cp-name-parser.c.tmp"
     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; }
+                        { (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 2730 "cp-name-parser.c.tmp"
     break;
 
   case 133:
-
-/* Line 1455 of yacc.c  */
 #line 817 "cp-name-parser.y"
-    { (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)
+                        { (yyval.abstract).fold_flag = 0;
+			  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 2745 "cp-name-parser.c.tmp"
     break;
 
   case 134:
-
-/* Line 1455 of yacc.c  */
 #line 828 "cp-name-parser.y"
-    { (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));
+                        { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0;
+			  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 2755 "cp-name-parser.c.tmp"
     break;
 
   case 135:
-
-/* Line 1455 of yacc.c  */
 #line 834 "cp-name-parser.y"
-    { (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).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0;
+			  (yyval.abstract).comp = (yyvsp[0].comp);
+			  (yyval.abstract).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2764 "cp-name-parser.c.tmp"
     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;
+                        { (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 2771 "cp-name-parser.c.tmp"
     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;
+                        { (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 2783 "cp-name-parser.c.tmp"
     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; }
+                        { (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 2789 "cp-name-parser.c.tmp"
     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)
+                        { (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 2804 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.abstract).fn = (yyvsp[-1].nested);
+			  (yyval.abstract).start = (yyvsp[0].comp);
 			  (yyval.abstract).comp = NULL; (yyval.abstract).last = NULL;
 			}
+#line 2813 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.comp) = (yyvsp[0].abstract).comp;
+			  *(yyvsp[0].abstract).last = (yyvsp[-1].comp);
 			}
+#line 2821 "cp-name-parser.c.tmp"
     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; }
+                        { (yyval.nested).comp = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[-1].nested).last;
+			  *(yyvsp[0].nested).last = (yyvsp[-1].nested).comp; }
+#line 2829 "cp-name-parser.c.tmp"
     break;
 
   case 145:
-
-/* Line 1455 of yacc.c  */
 #line 898 "cp-name-parser.y"
-    { (yyval.nested) = (yyvsp[(2) - (3)].nested); }
+                        { (yyval.nested) = (yyvsp[-1].nested); }
+#line 2835 "cp-name-parser.c.tmp"
     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;
+                        { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[0].nested).last;
 			}
+#line 2844 "cp-name-parser.c.tmp"
     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));
+                        { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2853 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2861 "cp-name-parser.c.tmp"
     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; }
+                        { (yyval.nested).comp = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[-1].nested).last;
+			  *(yyvsp[0].nested).last = (yyvsp[-1].nested).comp; }
+#line 2869 "cp-name-parser.c.tmp"
     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);
+                        { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL);
 			  (yyval.nested).last = &d_right ((yyval.nested).comp);
 			}
+#line 2877 "cp-name-parser.c.tmp"
     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));
+                        { (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 2886 "cp-name-parser.c.tmp"
     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));
+                        { (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 2896 "cp-name-parser.c.tmp"
     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; }
+                        { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  (yyval.nested).last = (yyvsp[-2].nested).last;
+			  *(yyvsp[-1].nested).last = (yyvsp[-2].nested).comp; }
+#line 2904 "cp-name-parser.c.tmp"
     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;
+                        { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].nested).comp;
+			  (yyval.nested).last = (yyvsp[0].nested).last;
 			}
+#line 2913 "cp-name-parser.c.tmp"
     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));
+                        { (yyval.nested).comp = (yyvsp[-1].nested).comp;
+			  *(yyvsp[-1].nested).last = (yyvsp[0].comp);
+			  (yyval.nested).last = &d_right ((yyvsp[0].comp));
 			}
+#line 2922 "cp-name-parser.c.tmp"
     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;
+                        { (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 2930 "cp-name-parser.c.tmp"
     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));
+                        { (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 2938 "cp-name-parser.c.tmp"
     break;
 
   case 159:
-
-/* Line 1455 of yacc.c  */
 #line 976 "cp-name-parser.y"
-    { (yyval.comp) = (yyvsp[(2) - (3)].comp); }
+                { (yyval.comp) = (yyvsp[-1].comp); }
+#line 2944 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary (">", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 2950 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); }
+#line 2956 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); }
+#line 2962 "cp-name-parser.c.tmp"
     break;
 
   case 164:
-
-/* Line 1455 of yacc.c  */
 #line 999 "cp-name-parser.y"
-    { (yyval.comp) = state->d_unary ("-", (yyvsp[(2) - (2)].comp)); }
+                { (yyval.comp) = state->d_unary ("-", (yyvsp[0].comp)); }
+#line 2968 "cp-name-parser.c.tmp"
     break;
 
   case 165:
-
-/* Line 1455 of yacc.c  */
 #line 1003 "cp-name-parser.y"
-    { (yyval.comp) = state->d_unary ("!", (yyvsp[(2) - (2)].comp)); }
+                { (yyval.comp) = state->d_unary ("!", (yyvsp[0].comp)); }
+#line 2974 "cp-name-parser.c.tmp"
     break;
 
   case 166:
-
-/* Line 1455 of yacc.c  */
 #line 1007 "cp-name-parser.y"
-    { (yyval.comp) = state->d_unary ("~", (yyvsp[(2) - (2)].comp)); }
+                { (yyval.comp) = state->d_unary ("~", (yyvsp[0].comp)); }
+#line 2980 "cp-name-parser.c.tmp"
     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)
+                { 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 2996 "cp-name-parser.c.tmp"
     break;
 
   case 168:
-
-/* Line 1455 of yacc.c  */
 #line 1030 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(3) - (7)].comp), NULL),
-				    (yyvsp[(6) - (7)].comp));
+                { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
+				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL),
+				    (yyvsp[-1].comp));
 		}
+#line 3005 "cp-name-parser.c.tmp"
     break;
 
   case 169:
-
-/* Line 1455 of yacc.c  */
 #line 1037 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(3) - (7)].comp), NULL),
-				    (yyvsp[(6) - (7)].comp));
+                { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
+				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL),
+				    (yyvsp[-1].comp));
 		}
+#line 3014 "cp-name-parser.c.tmp"
     break;
 
   case 170:
-
-/* Line 1455 of yacc.c  */
 #line 1044 "cp-name-parser.y"
-    { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
-				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[(3) - (7)].comp), NULL),
-				    (yyvsp[(6) - (7)].comp));
+                { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY,
+				    state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL),
+				    (yyvsp[-1].comp));
 		}
+#line 3023 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("*", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3029 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("/", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3035 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("%", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3041 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("+", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3047 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("-", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3053 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("<<", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3059 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary (">>", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3065 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("==", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3071 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("!=", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3077 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("<=", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3083 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary (">=", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3089 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("<", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3095 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("&", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3101 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("^", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3107 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("|", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3113 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("&&", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3119 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("||", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3125 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary ("->", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3131 "cp-name-parser.c.tmp"
     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)); }
+                { (yyval.comp) = state->d_binary (".", (yyvsp[-2].comp), (yyvsp[0].comp)); }
+#line 3137 "cp-name-parser.c.tmp"
     break;
 
   case 190:
-
-/* Line 1455 of yacc.c  */
 #line 1140 "cp-name-parser.y"
-    { (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))));
+                { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TRINARY, state->make_operator ("?", 3),
+				    state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG1, (yyvsp[-4].comp),
+						 state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG2, (yyvsp[-2].comp), (yyvsp[0].comp))));
 		}
+#line 3146 "cp-name-parser.c.tmp"
     break;
 
   case 193:
-
-/* Line 1455 of yacc.c  */
 #line 1154 "cp-name-parser.y"
-    {
+                {
 		  /* 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 3156 "cp-name-parser.c.tmp"
     break;
 
   case 194:
-
-/* Line 1455 of yacc.c  */
 #line 1163 "cp-name-parser.y"
-    { struct demangle_component *i;
+                { 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 3167 "cp-name-parser.c.tmp"
     break;
 
   case 195:
-
-/* Line 1455 of yacc.c  */
 #line 1172 "cp-name-parser.y"
-    { struct demangle_component *i;
+                { 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 3178 "cp-name-parser.c.tmp"
     break;
 
 
+#line 3182 "cp-name-parser.c.tmp"
 
-/* Line 1455 of yacc.c  */
-#line 3531 "cp-name-parser.c.tmp"
       default: break;
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  /* 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 ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   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 ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (state, YY_("syntax error"));
-#else
-      {
-	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;
-	  }
-      }
-#endif
     }
 
-
-
   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
@@ -3627,14 +3255,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  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,39 +3273,42 @@ 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.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   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 += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+            {
+              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);
+                  YY_ACCESSING_SYMBOL (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.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -3692,6 +3321,7 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -3699,7 +3329,8 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -3709,35 +3340,37 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 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);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, state);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  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"
 
 
@@ -3897,8 +3530,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 +3704,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;					\
@@ -4152,7 +3785,7 @@ 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)",
@@ -4185,7 +3818,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;
@@ -4256,7 +3889,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 +3996,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 +4020,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 +4048,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 +4061,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:
@@ -4741,4 +4374,3 @@ main (int argc, char **argv)
 }
 
 #endif
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-name-parser.y ./gdb/cp-name-parser.y
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-name-parser.y	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-name-parser.y	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* YACC parser for C++ names, for GDB.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Parts of the lexer are based on c-exp.y from GDB.
 
@@ -1337,8 +1337,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 +1511,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,7 +1592,7 @@ 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)",
@@ -1625,7 +1625,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;
@@ -1696,7 +1696,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 +1803,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 +1827,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 +1855,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 +1868,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:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-namespace.c ./gdb/cp-namespace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-namespace.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-namespace.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C++ support in GDB.
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Contributed by David Carlton and by Kealia, Inc.
 
@@ -224,7 +224,7 @@ cp_lookup_bare_symbol (const struct lang
       /* 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.  */
@@ -278,8 +278,8 @@ cp_search_static_and_baseclasses (const
 
   /* 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)
+  if ((scope_type->code () == TYPE_CODE_FUNC
+       || scope_type->code () == TYPE_CODE_METHOD)
       && domain == VAR_DOMAIN)
     return lookup_symbol (nested, SYMBOL_BLOCK_VALUE (scope_sym.symbol),
 			  VAR_DOMAIN, NULL);
@@ -359,7 +359,7 @@ cp_lookup_symbol_in_namespace (const cha
      namespace A {
        using namespace X;
        namespace B {
-         using namespace Y;
+	 using namespace Y;
        }
      }
 
@@ -404,14 +404,14 @@ cp_lookup_symbol_via_imports (const char
 
       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
@@ -516,7 +516,7 @@ cp_lookup_symbol_imports_or_template (co
 			  domain_name (domain));
     }
 
-  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))
@@ -628,9 +628,9 @@ 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_enum domain)
 {
   struct block_symbol sym;
 
@@ -918,7 +918,7 @@ 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",
@@ -927,7 +927,7 @@ cp_lookup_nested_symbol (struct type *pa
 			  domain_name (domain));
     }
 
-  switch (TYPE_CODE (parent_type))
+  switch (parent_type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_NAMESPACE:
@@ -935,7 +935,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;
@@ -1061,8 +1061,9 @@ maintenance_cplus_namespace (const char
   printf_unfiltered (_("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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-support.c ./gdb/cp-support.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-support.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-support.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C++ support in GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    Contributed by MontaVista Software.
 
@@ -183,8 +183,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,21 +207,21 @@ 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))
+		     && (TYPE_TARGET_TYPE (last)->code ()
 			 == TYPE_CODE_TYPEDEF))
 		last = TYPE_TARGET_TYPE (last);
 
@@ -274,12 +274,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 +294,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 +350,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 +429,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);
 
@@ -506,16 +575,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 +599,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 +644,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
@@ -668,8 +735,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 +763,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:
@@ -744,11 +811,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 +828,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:
@@ -869,8 +936,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;
@@ -1268,18 +1335,18 @@ add_symbol_overload_list_adl_namespace (
   const char *type_name;
   int i, prefix_len;
 
-  while (TYPE_CODE (type) == TYPE_CODE_PTR
+  while (type->code () == TYPE_CODE_PTR
 	 || TYPE_IS_REFERENCE (type)
-         || TYPE_CODE (type) == TYPE_CODE_ARRAY
-         || TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+	 || 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_name = TYPE_NAME (type);
+  type_name = type->name ();
 
   if (type_name == NULL)
     return;
@@ -1297,7 +1364,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))
@@ -1348,12 +1415,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.  */
@@ -1385,10 +1452,7 @@ add_symbol_overload_list_qualified (cons
      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.  */
@@ -1451,7 +1515,7 @@ cp_lookup_rtti_type (const char *name, c
 
   rtti_type = check_typedef (SYMBOL_TYPE (rtti_sym));
 
-  switch (TYPE_CODE (rtti_type))
+  switch (rtti_type->code ())
     {
     case TYPE_CODE_STRUCT:
       break;
@@ -1548,11 +1612,10 @@ gdb_demangle (const char *name, int opti
   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 +1624,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.  */
@@ -1580,7 +1643,7 @@ gdb_demangle (const char *name, int opti
   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 +1655,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 ([=] ()
+	    {
+	      report_failed_demangle (copy.c_str (), core_dump_allowed,
+				      crash_signal);
+	    });
 
-          result = NULL;
-        }
+	  result = NULL;
+	}
     }
 #endif
 
@@ -1609,15 +1672,6 @@ gdb_demangle (const char *name, int opti
 
 /* See cp-support.h.  */
 
-int
-gdb_sniff_from_mangled_name (const char *mangled, char **demangled)
-{
-  *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
-  return *demangled != NULL;
-}
-
-/* See cp-support.h.  */
-
 unsigned int
 cp_search_name_hash (const char *search_name)
 {
@@ -2118,18 +2172,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.  */
@@ -2163,17 +2205,16 @@ info_vtbl_command (const char *arg, int
   cplus_print_vtable (value);
 }
 
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-support.h ./gdb/cp-support.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-support.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-support.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C++ support in GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    Contributed by MontaVista Software.
    Namespace support contributed by David Carlton.
@@ -77,15 +77,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);
 
@@ -126,8 +127,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);
 
@@ -190,8 +190,4 @@ extern struct cmd_list_element *maint_cp
 
 char *gdb_demangle (const char *name, int options);
 
-/* Like gdb_demangle, but suitable for use as la_sniff_from_mangled_name.  */
-
-int gdb_sniff_from_mangled_name (const char *mangled, char **demangled);
-
 #endif /* CP_SUPPORT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-valprint.c ./gdb/cp-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cp-valprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cp-valprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing C++ values for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -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)
+      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 */
+	  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 (value_type (val));
+
   if (recurse == 0)
     {
       /* Any object can be left on obstacks only during an unexpected
@@ -155,17 +151,14 @@ cp_print_value_fields (struct type *type
     }
 
   fprintf_filtered (stream, "{");
-  len = TYPE_NFIELDS (type);
+  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 */
 
@@ -200,7 +193,7 @@ cp_print_value_fields (struct type *type
 
 	  /* If requested, skip printing of static fields.  */
 	  if (!options->static_field_print
-	      && field_is_static (&TYPE_FIELD (type, i)))
+	      && field_is_static (&type->field (i)))
 	    continue;
 
 	  if (fields_seen)
@@ -216,7 +209,7 @@ cp_print_value_fields (struct type *type
 		  fprintf_filtered (stream, "\n");
 		  print_spaces_filtered (2 + 2 * recurse, stream);
 		  fputs_filtered ("members of ", stream);
-		  fputs_filtered (TYPE_NAME (type), stream);
+		  fputs_filtered (type->name (), stream);
 		  fputs_filtered (":", stream);
 		}
 	    }
@@ -232,14 +225,19 @@ cp_print_value_fields (struct type *type
 	      wrap_here (n_spaces (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 (field_is_static (&type->field (i)))
+	    {
+	      fputs_filtered ("static ", stream);
+	      fprintf_symbol_filtered (stream,
+				       TYPE_FIELD_NAME (type, i),
+				       current_language->la_language,
+				       DMGL_PARAMS | DMGL_ANSI);
+	    }
+	  else
+	    fputs_styled (TYPE_FIELD_NAME (type, i),
+			  variable_name_style.style (), stream);
 	  annotate_field_name_end ();
 
 	  /* We tweak various options in a few cases below.  */
@@ -260,13 +258,13 @@ cp_print_value_fields (struct type *type
 	    }
 	  annotate_field_value ();
 
-	  if (!field_is_static (&TYPE_FIELD (type, i))
+	  if (!field_is_static (&type->field (i))
 	      && TYPE_FIELD_PACKED (type, i))
 	    {
 	      struct value *v;
 
 	      /* Bitfields require special handling, especially due to
-	         byte order problems.  */
+		 byte order problems.  */
 	      if (TYPE_FIELD_IGNORE (type, i))
 		{
 		  fputs_styled ("<optimized out or zero length>",
@@ -285,7 +283,8 @@ cp_print_value_fields (struct type *type
 		{
 		  opts->deref_ref = 0;
 
-		  v = value_field_bitfield (type, i, valaddr, offset, val);
+		  v = value_field_bitfield (type, i, valaddr,
+					    value_embedded_offset (val), val);
 
 		  common_val_print (v, stream, recurse + 1,
 				    opts, current_language);
@@ -298,13 +297,13 @@ cp_print_value_fields (struct type *type
 		  fputs_styled ("<optimized out or zero length>",
 				metadata_style.style (), stream);
 		}
-	      else if (field_is_static (&TYPE_FIELD (type, i)))
+	      else if (field_is_static (&type->field (i)))
 		{
 		  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 +316,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_BITPOS (type, i) / 8;
+		  struct type *i_type = type->field (i).type ();
 
 		  if (valprint_check_validity (stream, i_type, i_offset, val))
 		    {
 		      CORE_ADDR addr;
-		      
+
+		      i_offset += value_embedded_offset (val);
 		      addr = extract_typed_address (valaddr + i_offset, i_type);
 		      print_function_pointer_address (opts,
-						      get_type_arch (type),
+						      type->arch (),
 						      addr, stream);
 		    }
 		}
 	      else
 		{
+		  struct value *v = value_primitive_field (val, 0, i, type);
 		  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);
+		  common_val_print (v, stream, recurse + 1, opts,
+				    current_language);
 		}
 	    }
 	  annotate_field_end ();
@@ -346,7 +344,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 +358,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 =
@@ -385,76 +383,27 @@ cp_print_value_fields (struct type *type
   fprintf_filtered (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.  */
-
-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)
-{
-  struct type *real_type = NULL;
-
-  /* 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);
-}
-
 /* 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 (value_type (val));
+  CORE_ADDR address = value_address (val);
   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);
 
   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 +413,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 +431,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,
+				      value_embedded_offset (val),
+				      address, val);
 	}
       catch (const gdb_exception_error &ex)
 	{
@@ -505,8 +453,7 @@ 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 (type))
 		{
 		  gdb::byte_vector buf (TYPE_LENGTH (baseclass));
 
@@ -517,9 +464,7 @@ cp_print_value (struct type *type, struc
 							      buf.data (),
 							      address + boffset);
 		  baseclass = value_type (base_val);
-		  thisoffset = 0;
 		  boffset = 0;
-		  thistype = baseclass;
 		}
 	      else
 		{
@@ -540,7 +485,7 @@ cp_print_value (struct type *type, struc
 	}
       fputs_filtered ("<", stream);
       /* Not sure what the best notation is in the case where there is
-         no baseclass name.  */
+	 no baseclass name.  */
       fputs_filtered (basename ? basename : "", stream);
       fputs_filtered ("> = ", stream);
 
@@ -552,31 +497,22 @@ cp_print_value (struct type *type, struc
 	{
 	  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))
 	    {
+	      struct value *baseclass_val = value_primitive_field (val, 0,
+								   i, type);
+
 	      /* 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,
+		  = apply_ext_lang_val_pretty_printer (baseclass_val, stream,
+						       recurse, options,
 						       current_language);
 
 	      if (!result)
-		cp_print_value_fields (baseclass, thistype,
-				       thisoffset + boffset,
-				       value_address (base_val),
-				       stream, recurse, base_val, options,
+		cp_print_value_fields (baseclass_val, stream, recurse, options,
 				       ((struct type **)
 					obstack_base (&dont_print_vb_obstack)),
 				       0);
@@ -591,10 +527,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;
     }
 }
@@ -623,10 +559,10 @@ cp_print_static_field (struct type *type
     }
 
   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 = value_address (val);
       int i;
 
       first_dont_print
@@ -636,7 +572,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,17 +581,13 @@ 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 (val, stream, recurse, options, NULL, 1);
       return;
     }
 
-  if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY)
+  if (real_type->code () == TYPE_CODE_ARRAY)
     {
       struct type **first_dont_print;
       int i;
@@ -684,11 +616,7 @@ 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);
+  common_val_print (val, stream, recurse, &opts, current_language);
 }
 
 /* Find the field in *SELF, or its non-virtual base classes, with
@@ -706,7 +634,7 @@ 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++)
     {
@@ -723,11 +651,11 @@ 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 bitsize = 8 * TYPE_LENGTH (self->field (i).type ());
 
       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;
 	}
@@ -776,22 +704,90 @@ cp_print_class_member (const gdb_byte *v
       const char *name;
 
       fputs_filtered (prefix, stream);
-      name = TYPE_NAME (self_type);
+      name = self_type->name ();
       if (name)
 	fputs_filtered (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);
+      fputs_styled (TYPE_FIELD_NAME (self_type, fieldno),
+		    variable_name_style.style (), stream);
     }
   else
     fprintf_filtered (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);
+  TYPE_LENGTH (the_struct) = 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);
+      SET_FIELD_BITPOS (*f, 1);
+      FIELD_BITSIZE (*f) = 1;
+      f = append_composite_type_field_raw (the_struct, "B", uint8_type);
+      SET_FIELD_BITPOS (*f, 3);
+      FIELD_BITSIZE (*f) = 3;
+      f = append_composite_type_field_raw (the_struct, "C", bool_type);
+      SET_FIELD_BITPOS (*f, 7);
+      FIELD_BITSIZE (*f) = 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);
+      SET_FIELD_BITPOS (*f, 30);
+      FIELD_BITSIZE (*f) = 1;
+      f = append_composite_type_field_raw (the_struct, "B", uint8_type);
+      SET_FIELD_BITPOS (*f, 26);
+      FIELD_BITSIZE (*f) = 3;
+      f = append_composite_type_field_raw (the_struct, "C", bool_type);
+      SET_FIELD_BITPOS (*f, 24);
+      FIELD_BITSIZE (*f) = 1;
+    }
+
+  value *val = allocate_value (the_struct);
+  gdb_byte *contents = value_contents_writeable (val);
+  store_unsigned_integer (contents, TYPE_LENGTH (value_enclosing_type (val)),
+			  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cris-linux-tdep.c ./gdb/cris-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cris-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cris-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux on CRIS processors, for GDB.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    Contributed by Axis Communications AB.
    Written by Hendrik Ruijter, Stefan Andersson, Orjan Friberg,
@@ -35,20 +35,21 @@ cris_linux_init_abi (struct gdbarch_info
 {
   struct gdbarch_tdep *tdep = 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);
 
 }
 
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cris-tdep.c ./gdb/cris-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cris-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cris-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for CRIS, for GDB, the GNU debugger.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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,6 +37,7 @@
 #include "osabi.h"
 #include "arch-utils.h"
 #include "regcache.h"
+#include "regset.h"
 
 #include "objfiles.h"
 
@@ -197,7 +198,7 @@ cris_sigtramp_start (struct frame_info *
   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;
     }
 
@@ -225,7 +226,7 @@ cris_rt_sigtramp_start (struct frame_inf
   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;
     }
 
@@ -304,7 +305,7 @@ 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 *
@@ -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,8 +395,7 @@ 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;
@@ -403,7 +403,7 @@ cris_sigtramp_frame_unwind_cache (struct
 
 static void
 cris_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
-                             struct frame_id *this_id)
+			     struct frame_id *this_id)
 {
   struct cris_unwind_cache *cache =
     cris_sigtramp_frame_unwind_cache (this_frame, this_cache);
@@ -416,7 +416,7 @@ static struct value *cris_frame_prev_reg
 					       void **this_cache, int regnum);
 static struct value *
 cris_sigtramp_frame_prev_register (struct frame_info *this_frame,
-                                   void **this_cache, int regnum)
+				   void **this_cache, int regnum)
 {
   /* Make sure we've initialized the cache.  */
   cris_sigtramp_frame_unwind_cache (this_frame, this_cache);
@@ -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,
@@ -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 *);
 
@@ -771,10 +772,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.  */
@@ -824,40 +825,40 @@ cris_push_dummy_call (struct gdbarch *gd
       
       /* 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 +875,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 +901,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,
@@ -1048,165 +1050,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 +1226,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 +1255,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 +1269,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);
 	}
     }
 
@@ -1439,16 +1440,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 +1472,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 +1513,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 
@@ -1752,7 +1753,7 @@ 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 dwarf2_frame_state_reg *reg,
 			    struct frame_info *this_frame)
 {
   /* The return address column.  */
@@ -1804,8 +1805,8 @@ 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
+  if (type->code () == TYPE_CODE_STRUCT
+      || type->code () == TYPE_CODE_UNION
       || TYPE_LENGTH (type) > 8)
     /* Structs, unions, and anything larger than 8 bytes (2 registers)
        goes on the stack.  */
@@ -1824,7 +1825,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 +1836,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 +1924,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 +1990,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 +2043,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 +2095,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 +2316,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 +2377,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 +2388,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 +2457,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 +2541,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 +2618,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 +2672,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 +2783,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 +2821,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 +2877,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 +2940,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 +2967,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 +3026,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 +3083,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 +3148,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 +3240,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 +3252,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 +3268,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 +3284,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 +3342,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 +3357,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 +3372,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 +3387,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 +3401,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 +3429,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 +3441,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 +3450,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 +3462,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 +3480,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 +3525,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 +3536,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 +3564,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 +3762,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);
   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
@@ -3788,49 +3796,27 @@ cris_supply_gregset (struct regcache *re
     }
 }
 
-/*  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 +3853,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.  */
@@ -3880,11 +3864,11 @@ cris_dump_tdep (struct gdbarch *gdbarch,
   if (tdep != NULL)
     {
       fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_version = %i\n",
-                          tdep->cris_version);
+			  tdep->cris_version);
       fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_mode = %s\n",
-                          tdep->cris_mode);
+			  tdep->cris_mode);
       fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
-                          tdep->cris_dwarf2_cfi);
+			  tdep->cris_dwarf2_cfi);
     }
 }
 
@@ -3897,7 +3881,6 @@ 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."));
@@ -3910,7 +3893,6 @@ 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.");
@@ -3923,7 +3905,6 @@ 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."));
@@ -3965,7 +3946,7 @@ cris_gdbarch_init (struct gdbarch_info i
 	   == usr_cmd_cris_mode)
 	  && (gdbarch_tdep (arches->gdbarch)->cris_dwarf2_cfi 
 	      == usr_cmd_cris_dwarf2_cfi))
-        return arches->gdbarch;
+	return arches->gdbarch;
     }
 
   /* No matching architecture was found.  Create a new one.  */
@@ -4007,7 +3988,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 +4039,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cris-tdep.h ./gdb/cris-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/cris-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/cris-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target dependent code for CRIS, for GDB, the GNU debugger.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    Contributed by Axis Communications AB.
    Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/csky-linux-tdep.c ./gdb/csky-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/csky-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/csky-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux on CSKY.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    Contributed by C-SKY Microsystems and Mentor Graphics.
 
@@ -233,7 +233,7 @@ csky_linux_rt_sigreturn_tramp_frame = {
 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);
@@ -255,8 +255,9 @@ csky_linux_init_abi (struct gdbarch_info
 				&csky_linux_rt_sigreturn_tramp_frame);
 }
 
+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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/csky-tdep.c ./gdb/csky-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/csky-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/csky-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the CSKY architecture, for GDB.
 
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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"
@@ -162,7 +162,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",
@@ -266,8 +266,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;
 }
@@ -502,7 +502,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
@@ -1459,17 +1459,17 @@ 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);
+		    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,
+					this_cache->saved_regs[rn].addr (),
 				      (unsigned long) rn_value);
 		}
 	    }
@@ -1871,7 +1871,7 @@ 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;
 }
 
@@ -1916,6 +1916,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,
@@ -1998,7 +1999,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,
@@ -2240,8 +2242,9 @@ csky_gdbarch_init (struct gdbarch_info i
   return gdbarch;
 }
 
+void _initialize_csky_tdep ();
 void
-_initialize_csky_tdep (void)
+_initialize_csky_tdep ()
 {
 
   register_gdbarch_init (bfd_arch_csky, csky_gdbarch_init);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/csky-tdep.h ./gdb/csky-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/csky-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/csky-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the CSKY architecture, for GDB.
 
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-support.h ./gdb/c-support.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-support.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-support.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Helper routines for C support in GDB.
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ctfread.c ./gdb/ctfread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ctfread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ctfread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Compact ANSI-C Type Format (CTF) support in GDB.
 
-   Copyright (C) 2019-2020 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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.
 
@@ -81,20 +81,61 @@
 #include "block.h"
 #include "ctfread.h"
 #include "psympriv.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;
+
+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 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;
   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,
+	       CORE_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 +152,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;
@@ -128,30 +169,30 @@ struct ctf_field_info
 
 /* Local function prototypes */
 
-static void psymtab_to_symtab (struct partial_symtab *);
-
 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
@@ -223,21 +264,40 @@ get_tid_type (struct objfile *of, ctf_id
 
   htab = (htab_t) 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 +317,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_section_index (msym.minsym->section_index ());
     }
 }
 
@@ -277,15 +337,15 @@ 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->set_num_fields (nfields);
+  type->set_fields
+    ((struct field *) TYPE_ZALLOC (type, sizeof (struct field) * 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,12 +359,12 @@ 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;
 
   format = gdbarch_floatformat_for_type (gdbarch, name_hint, bits);
-  if (format != NULL)
+  if (format != nullptr)
     type = init_float_type (objfile, bits, name, format);
   else
     type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
@@ -323,7 +383,7 @@ 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;
@@ -333,11 +393,11 @@ ctf_add_member_cb (const char *name,
   FIELD_NAME (*fp) = 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;
@@ -348,7 +408,7 @@ 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;
+  fp->set_type (t);
   SET_FIELD_BITPOS (*fp, offset / TARGET_CHAR_BIT);
   FIELD_BITSIZE (*fp) = get_bitsize (ccp->fp, tid, kind);
 
@@ -366,21 +426,21 @@ 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;
+  fp->set_type (nullptr);
   SET_FIELD_ENUMVAL (*fp, enum_value);
   FIELD_BITSIZE (*fp) = 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);
+      sym->set_language (language_c, &ccp->of->objfile_obstack);
+      sym->compute_and_set_names (name, false, ccp->of->per_bfd);
       SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       SYMBOL_TYPE (sym) = fip->ptype;
@@ -396,24 +456,24 @@ 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);
+      sym->set_language (language_c, &objfile->objfile_obstack);
+      sym->compute_and_set_names (name, false, objfile->per_bfd);
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
 
-      if (type != NULL)
+      if (type != nullptr)
 	SYMBOL_TYPE (sym) = type;
 
       uint32_t kind = ctf_type_kind (fp, tid);
@@ -427,9 +487,10 @@ new_symbol (ctf_context_t *ccp, struct t
 	    break;
 	  case CTF_K_FUNCTION:
 	    SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+	    set_symbol_address (objfile, sym, sym->linkage_name ());
 	    break;
 	  case CTF_K_CONST:
-	    if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID)
+	    if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_VOID)
 	      SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int;
 	    break;
 	  case CTF_K_TYPEDEF:
@@ -459,38 +520,36 @@ 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 ());
 
   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;
@@ -522,7 +581,7 @@ 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
@@ -531,14 +590,14 @@ read_base_type (ctf_context_t *ccp, ctf_
       type = init_type (of, 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,24 +613,24 @@ 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);
 
-  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);
   set_type_align (type, ctf_type_align (fp, tid));
@@ -583,7 +642,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 +660,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 +671,48 @@ 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);
 
-  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;
+  type->set_code (TYPE_CODE_FUNC);
   ctf_func_type_info (fp, tid, &cfi);
-  rettype = get_tid_type (of, cfi.ctc_return);
+  rettype = fetch_tid_type (ccp, cfi.ctc_return);
   TYPE_TARGET_TYPE (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->set_fields
+	((struct field *) TYPE_ZALLOC (type, argc * sizeof (struct field)));
+      struct type *void_type = objfile_type (of)->builtin_void;
+      /* If failed to find the argument type, fill it with void_type.  */
+      for (int iparam = 0; iparam < argc; iparam++)
+	{
+	  atype = get_tid_type (of, 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,20 +720,20 @@ 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;
+  ctf_dict_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 ());
+  const char *name = ctf_type_name_raw (fp, tid);
+  if (name != nullptr && strlen (name) != 0)
+    type->set_name (name);
 
-  TYPE_CODE (type) = TYPE_CODE_ENUM;
+  type->set_code (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);
@@ -662,7 +744,7 @@ read_enum_type (ctf_context_t *ccp, ctf_
 }
 
 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 +766,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,7 +777,7 @@ 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 (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY)
     {
       TYPE_TARGET_TYPE (inner_array)
 	= copy_type (TYPE_TARGET_TYPE (inner_array));
@@ -705,7 +787,7 @@ add_array_cv_type (ctf_context_t *ccp,
   el_type = TYPE_TARGET_TYPE (inner_array);
   cnst |= TYPE_CONST (el_type);
   voltl |= TYPE_VOLATILE (el_type);
-  TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, NULL);
+  TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, nullptr);
 
   return set_tid_type (ccp->of, tid, base_type);
 }
@@ -713,10 +795,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,24 +807,24 @@ 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 = fetch_tid_type (ccp, ar.ctr_index);
+  if (idx_type == nullptr)
     idx_type = objfile_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);
   if (ar.ctr_nelems <= 1)	/* Check if undefined upper bound.  */
     {
-      TYPE_HIGH_BOUND_KIND (range_type) = PROP_UNDEFINED;
+      range_type->bounds ()->high.set_undefined ();
       TYPE_LENGTH (type) = 0;
-      TYPE_TARGET_STUB (type) = 1;
+      type->set_target_is_stub (true);
     }
   else
     TYPE_LENGTH (type) = ctf_type_size (fp, tid);
@@ -755,16 +837,16 @@ 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;
@@ -778,17 +860,17 @@ 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;
@@ -805,16 +887,16 @@ 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;
@@ -828,7 +910,7 @@ 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;
@@ -837,12 +919,13 @@ read_typedef_type (ctf_context_t *ccp, c
   char *aname = obstack_strdup (&objfile->objfile_obstack, name);
   this_type = init_type (objfile, 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;
   else
-    TYPE_TARGET_TYPE (this_type) = NULL;
-  TYPE_TARGET_STUB (this_type) = TYPE_TARGET_TYPE (this_type) ? 1 : 0;
+    TYPE_TARGET_TYPE (this_type) = nullptr;
+
+  this_type->set_target_is_stub (TYPE_TARGET_TYPE (this_type) != nullptr);
 
   return set_tid_type (objfile, tid, this_type);
 }
@@ -850,16 +933,16 @@ 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;
@@ -872,14 +955,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 = alloc_type (of);
+
+  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_LENGTH (type) = 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 +1012,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 +1036,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 +1053,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 +1118,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 +1129,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:
@@ -1029,23 +1143,23 @@ ctf_add_var_cb (const char *name, ctf_id
 	if (type)
 	  {
 	    sym = new_symbol (ccp, type, id);
-	    SYMBOL_SET_NAMES (sym, name, false, ccp->of);
+	    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 = objfile_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);
+	sym->compute_and_set_names (name, false, ccp->of->per_bfd);
 	add_symbol_to_list (sym, ccp->builder->get_global_symbols ());
 	break;
       default:
@@ -1053,7 +1167,7 @@ ctf_add_var_cb (const char *name, ctf_id
 	break;
     }
 
-  if (sym)
+  if (sym != nullptr)
     set_symbol_address (ccp->of, sym, name);
 
   return 0;
@@ -1062,18 +1176,18 @@ ctf_add_var_cb (const char *name, ctf_id
 /* Add an ELF STT_OBJ symbol with index IDX to the symbol table.  */
 
 static struct symbol *
-add_stt_obj (ctf_context_t *ccp, unsigned long idx)
+add_stt_obj (struct ctf_context *ccp, unsigned long idx)
 {
   struct symbol *sym;
   struct type *type;
   ctf_id_t tid;
 
   if ((tid = ctf_lookup_by_symbol (ccp->fp, idx)) == CTF_ERR)
-    return NULL;
+    return nullptr;
 
-  type = get_tid_type (ccp->of, tid);
-  if (type == NULL)
-    return NULL;
+  type = fetch_tid_type (ccp, tid);
+  if (type == nullptr)
+    return nullptr;
 
   sym = new_symbol (ccp, type, tid);
 
@@ -1083,7 +1197,7 @@ add_stt_obj (ctf_context_t *ccp, unsigne
 /* Add an ELF STT_FUNC symbol with index IDX to the symbol table.  */
 
 static struct symbol *
-add_stt_func (ctf_context_t *ccp, unsigned long idx)
+add_stt_func (struct ctf_context *ccp, unsigned long idx)
 {
   struct type *ftype, *atyp, *rettyp;
   struct symbol *sym;
@@ -1094,41 +1208,41 @@ add_stt_func (ctf_context_t *ccp, unsign
   struct type *void_type = objfile_type (ccp->of)->builtin_void;
 
   if (ctf_func_info (ccp->fp, idx, &finfo) == CTF_ERR)
-    return NULL;
+    return nullptr;
 
   argc = finfo.ctc_argc;
   if (ctf_func_args (ccp->fp, idx, argc, argv) == CTF_ERR)
-    return NULL;
+    return nullptr;
 
   gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (ccp->fp, idx));
-  if (name == NULL)
-    return NULL;
+  if (name == nullptr)
+    return nullptr;
 
   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;
+  ftype = fetch_tid_type (ccp, tid);
+  if ((finfo.ctc_flags & CTF_FUNC_VARARG) != 0)
+    ftype->set_has_varargs (true);
+  ftype->set_num_fields (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));
+    ftype->set_fields
+      ((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]);
+      atyp = fetch_tid_type (ccp, argv[iparam]);
       if (atyp)
-	TYPE_FIELD_TYPE (ftype, iparam) = atyp;
+	ftype->field (iparam).set_type (atyp);
       else
-	TYPE_FIELD_TYPE (ftype, iparam) = void_type;
+	ftype->field (iparam).set_type (void_type);
     }
 
   sym = new_symbol (ccp, ftype, tid);
-  rettyp = get_tid_type (ccp->of, finfo.ctc_return);
-  if (rettyp != NULL)
+  rettyp = fetch_tid_type (ccp, finfo.ctc_return);
+  if (rettyp != nullptr)
     SYMBOL_TYPE (sym) = rettyp;
   else
     SYMBOL_TYPE (sym) = void_type;
@@ -1141,36 +1255,25 @@ add_stt_func (ctf_context_t *ccp, unsign
 static CORE_ADDR
 get_objfile_text_range (struct objfile *of, int *tsize)
 {
-  CORE_ADDR text_base;
   bfd *abfd = of->obfd;
   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,
+ctf_start_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, of->original_name, nullptr,
 		       language_c, text_offset);
   ccp->builder->record_debugformat ("ctf");
 }
@@ -1180,30 +1283,51 @@ ctf_start_symtab (struct partial_symtab
    the .text section number.  */
 
 static struct compunit_symtab *
-ctf_end_symtab (struct partial_symtab *pst,
+ctf_end_symtab (ctf_psymtab *pst,
 		CORE_ADDR end_addr, int section)
 {
-  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);
   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)
+{
+  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,
+			     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)));
+}
+
+/* Read in full symbols for PST, and anything it depends on.  */
+
+void
+ctf_psymtab::expand_psymtab (struct objfile *objfile)
 {
   struct symbol *sym;
-  ctf_context_t *ccp;
+  struct ctf_context *ccp;
 
-  gdb_assert (!pst->readin);
+  gdb_assert (!readin);
 
-  ccp = (ctf_context_t *) pst->read_symtab_private;
+  ccp = context;
 
   /* Iterate over entries in data types section.  */
   if (ctf_type_iter (ccp->fp, ctf_add_type_cb, ccp) == CTF_ERR)
@@ -1220,50 +1344,50 @@ psymtab_to_symtab (struct partial_symtab
   for (unsigned long i = 0; ; i++)
     {
       sym = add_stt_obj (ccp, i);
-      if (sym == NULL)
+      if (sym == nullptr)
 	{
 	  if (ctf_errno (ccp->fp) == EINVAL
 	      || ctf_errno (ccp->fp) == ECTF_NOSYMTAB)
 	    break;
 	  sym = add_stt_func (ccp, i);
 	}
-      if (sym == NULL)
+      if (sym == nullptr)
 	continue;
 
       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);
+	  printf_filtered (_("Reading in CTF data for %s..."), filename);
 	  gdb_flush (gdb_stdout);
 	}
 
       /* Start a symtab.  */
-      CORE_ADDR text_offset;        /* Start of text segment.  */
+      CORE_ADDR offset;        /* Start of text segment.  */
       int 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_symtab (this, objfile, offset);
+      expand_psymtab (objfile);
+
+      set_text_low (offset);
+      set_text_high (offset + tsize);
+      compunit_symtab = ctf_end_symtab (this, offset + tsize,
+					SECT_OFF_TEXT (objfile));
 
       /* Finish up the debug error message.  */
       if (info_verbose)
@@ -1271,17 +1395,6 @@ ctf_read_symtab (struct partial_symtab *
     }
 }
 
-/* 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 +1407,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_dict_t *cfp,
+		       psymtab_storage *partial_symtabs,
 		       struct objfile *objfile)
 {
-  struct partial_symtab *pst;
-  ctf_context_t *ccx;
+  ctf_psymtab *pst;
+  struct ctf_context *ccx;
 
-  pst = start_psymtab_common (objfile, name, 0);
+  pst = new ctf_psymtab (name, partial_symtabs, objfile->per_bfd, 0);
 
-  ccx = XOBNEW (&objfile->objfile_obstack, ctf_context_t);
+  ccx = XOBNEW (&objfile->objfile_obstack, struct ctf_context);
   ccx->fp = cfp;
   ccx->of = objfile;
-  pst->read_symtab_private = (void *) ccx;
-  pst->read_symtab = ctf_read_symtab;
+  ccx->partial_symtabs = partial_symtabs;
+  ccx->pst = pst;
+  ccx->builder = nullptr;
+  pst->context = ccx;
 
   return pst;
 }
@@ -1318,23 +1434,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);
+	/* FALL THROUGH */
       case CTF_K_STRUCT:
       case CTF_K_UNION:
-      case CTF_K_ENUM:
 	domain = STRUCT_DOMAIN;
 	aclass = LOC_TYPEDEF;
 	break;
@@ -1365,10 +1480,14 @@ 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);
+			 0, language_c, ccp->partial_symtabs, ccp->of);
 
   return 0;
 }
@@ -1378,12 +1497,12 @@ 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,
+			 0, language_c, ccp->partial_symtabs, ccp->of);
   return 0;
 }
 
@@ -1391,21 +1510,20 @@ 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 objfile *of)
 {
-  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);
+  ctf_psymtab *pst = create_partial_symtab (name, cfp, partial_symtabs, of);
 
-  ccx.fp = cfp;
-  ccx.of = of;
+  struct ctf_context *ccx = pst->context;
 
-  if (ctf_type_iter (cfp, ctf_psymtab_type_cb, &ccx) == CTF_ERR)
+  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)));
 
@@ -1422,7 +1540,7 @@ scan_partial_symbols (ctf_file_t *cfp, s
 	else
 	  continue;
 	}
-      gdb::unique_xmalloc_ptr<char> tname (ctf_type_aname_raw (cfp, tid));
+      const char *tname = ctf_type_name_raw (cfp, tid);
       uint32_t kind = ctf_type_kind (cfp, tid);
       address_class aclass;
       domain_enum tdomain;
@@ -1445,13 +1563,13 @@ scan_partial_symbols (ctf_file_t *cfp, s
       else
 	aclass = LOC_TYPEDEF;
 
-      add_psymbol_to_list (tname.get (), true,
-			   tdomain, aclass, -1,
-			   psymbol_placement::STATIC,
-			   0, language_c, of);
+      pst->add_psymbol (tname, false,
+			tdomain, aclass, -1,
+			psymbol_placement::STATIC,
+			0, language_c, partial_symtabs, of);
     }
 
-  end_psymtab_common (of, pst);
+  pst->end ();
 }
 
 /* Read CTF debugging information from a BFD section.  This is
@@ -1465,22 +1583,28 @@ elfctf_build_psymtabs (struct objfile *o
   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);
+  psymbol_functions *psf = new psymbol_functions ();
+  psymtab_storage *partial_symtabs = psf->get_partial_symtabs ().get ();
+  of->qf.emplace_front (psf);
+  scan_partial_symbols (fp, partial_symtabs, of);
 }
 
+#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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ctfread.h ./gdb/ctfread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ctfread.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ctfread.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* CTF debugging format support for GDB.
 
-   Copyright (C) 2019-2020 Free Software Foundation, Inc.
+   Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-typeprint.c ./gdb/c-typeprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-typeprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-typeprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Support for printing C and C++ types for GDB, the GNU debugger.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -58,7 +58,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 +84,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);
+  fputs_filtered (s != nullptr ? s.get () : name, stream);
 }
 
 
@@ -116,7 +116,7 @@ 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);
@@ -129,11 +129,11 @@ 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))))
@@ -148,10 +148,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;
@@ -171,7 +171,7 @@ c_print_type (struct type *type,
 	      int show, int level,
 	      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,
 		  current_language->la_language, flags, &podata);
@@ -188,7 +188,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);
@@ -206,10 +206,10 @@ c_print_typedef (struct type *type,
   type = check_typedef (type);
   fprintf_filtered (stream, "typedef ");
   type_print (type, "", stream, -1);
-  if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
-      || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
+  if ((SYMBOL_TYPE (new_symbol))->name () == 0
+      || strcmp ((SYMBOL_TYPE (new_symbol))->name (),
 		 new_symbol->linkage_name ()) != 0
-      || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF)
+      || SYMBOL_TYPE (new_symbol)->code () == TYPE_CODE_TYPEDEF)
     fprintf_filtered (stream, " %s", new_symbol->print_name ());
   fprintf_filtered (stream, ";");
 }
@@ -256,7 +256,7 @@ cp_type_print_derivation_info (struct ui
 			? "public" : (TYPE_FIELD_PROTECTED (type, i)
 				      ? "protected" : "private"),
 			BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
-      name = TYPE_NAME (TYPE_BASECLASS (type, i));
+      name = TYPE_BASECLASS (type, i)->name ();
       if (name)
 	print_name_maybe_canonical (name, flags, stream);
       else
@@ -277,9 +277,9 @@ 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,
@@ -302,7 +302,7 @@ cp_type_print_method_args (struct type *
 	  if (FIELD_ARTIFICIAL (arg))
 	    continue;
 
-	  c_print_type (arg.type, "", stream, 0, 0, flags);
+	  c_print_type (arg.type (), "", stream, 0, 0, flags);
 
 	  if (i == nargs && varargs)
 	    fprintf_filtered (stream, ", ...");
@@ -327,8 +327,8 @@ 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 = TYPE_TARGET_TYPE (args[0].type ());
 
       if (TYPE_CONST (domain))
 	fprintf_filtered (stream, " const");
@@ -337,7 +337,9 @@ cp_type_print_method_args (struct type *
 	fprintf_filtered (stream, " volatile");
 
       if (TYPE_RESTRICT (domain))
-	fprintf_filtered (stream, " restrict");
+	fprintf_filtered (stream, (language == language_cplus
+				   ? " __restrict__"
+				   : " restrict"));
 
       if (TYPE_ATOMIC (domain))
 	fprintf_filtered (stream, " _Atomic");
@@ -371,25 +373,25 @@ 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),
 				   stream, show, 1, 1, language, flags,
 				   podata);
       fprintf_filtered (stream, "*");
-      c_type_print_modifier (type, stream, 1, need_post_space);
+      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),
 				   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
@@ -404,7 +406,7 @@ c_type_print_varspec_prefix (struct type
 				   stream, show, 0, 0, language, flags,
 				   podata);
       fprintf_filtered (stream, "(");
-      name = TYPE_NAME (TYPE_SELF_TYPE (type));
+      name = TYPE_SELF_TYPE (type)->name ();
       if (name)
 	print_name_maybe_canonical (name, flags, stream);
       else
@@ -419,8 +421,8 @@ c_type_print_varspec_prefix (struct type
       c_type_print_varspec_prefix (TYPE_TARGET_TYPE (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);
+      fprintf_filtered (stream, type->code () == TYPE_CODE_REF ? "&" : "&&");
+      c_type_print_modifier (type, stream, 1, need_post_space, language);
       break;
 
     case TYPE_CODE_METHOD:
@@ -463,8 +465,9 @@ c_type_print_varspec_prefix (struct type
     case TYPE_CODE_COMPLEX:
     case TYPE_CODE_NAMESPACE:
     case TYPE_CODE_DECFLOAT:
+    case TYPE_CODE_FIXED_POINT:
       /* These types need no prefix.  They are listed here so that
-         gcc -Wall will reveal any types that haven't been handled.  */
+	 gcc -Wall will reveal any types that haven't been handled.  */
       break;
     default:
       error (_("type not handled in c_type_print_varspec_prefix()"));
@@ -481,7 +484,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;
@@ -509,7 +513,9 @@ c_type_print_modifier (struct type *type
     {
       if (did_print_modifier || need_pre_space)
 	fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "restrict");
+      fprintf_filtered (stream, (language == language_cplus
+				 ? "__restrict__"
+				 : "restrict"));
       did_print_modifier = 1;
     }
 
@@ -521,8 +527,9 @@ c_type_print_modifier (struct type *type
       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)
@@ -555,7 +562,7 @@ c_type_print_args (struct type *type, st
 
   fprintf_filtered (stream, "(");
 
-  for (i = 0; i < TYPE_NFIELDS (type); i++)
+  for (i = 0; i < type->num_fields (); i++)
     {
       struct type *param_type;
 
@@ -568,7 +575,7 @@ c_type_print_args (struct type *type, st
 	  wrap_here ("    ");
 	}
 
-      param_type = TYPE_FIELD_TYPE (type, i);
+      param_type = type->field (i).type ();
 
       if (language == language_cplus && linkage_name)
 	{
@@ -586,12 +593,12 @@ 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 ("    ");
@@ -599,7 +606,7 @@ c_type_print_args (struct type *type, st
 	}
     }
   else if (!printed_any
-	   && (TYPE_PROTOTYPED (type) || language == language_cplus))
+	   && (type->is_prototyped () || language == language_cplus))
     fprintf_filtered (stream, "void");
 
   fprintf_filtered (stream, ")");
@@ -757,17 +764,17 @@ 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, ")");
@@ -775,8 +782,8 @@ c_type_print_varspec_suffix (struct type
 	fprintf_filtered (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)
+	if (type->bounds ()->high.kind () == PROP_LOCEXPR
+	    || type->bounds ()->high.kind () == PROP_LOCLIST)
 	  fprintf_filtered (stream, "variable length");
 	else if (get_array_bounds (type, &low_bound, &high_bound))
 	  fprintf_filtered (stream, "%s", 
@@ -838,9 +845,10 @@ c_type_print_varspec_suffix (struct type
     case TYPE_CODE_COMPLEX:
     case TYPE_CODE_NAMESPACE:
     case TYPE_CODE_DECFLOAT:
+    case TYPE_CODE_FIXED_POINT:
       /* These types do not need a suffix.  They are listed so that
-         gcc -Wall will report types that may not have been
-         considered.  */
+	 gcc -Wall will report types that may not have been
+	 considered.  */
       break;
     default:
       error (_("type not handled in c_type_print_varspec_suffix()"));
@@ -957,10 +965,10 @@ output_access_specifier (struct ui_file
 static bool
 need_access_label_p (struct type *type)
 {
-  if (TYPE_DECLARED_CLASS (type))
+  if (type->is_declared_class ())
     {
       QUIT;
-      for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
+      for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++)
 	if (!TYPE_FIELD_PRIVATE (type, i))
 	  return true;
       QUIT;
@@ -977,7 +985,7 @@ need_access_label_p (struct type *type)
   else
     {
       QUIT;
-      for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++)
+      for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++)
 	if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
 	  return true;
       QUIT;
@@ -1050,10 +1058,10 @@ 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)
+  c_type_print_modifier (type, stream, 0, 1, language);
+  if (type->code () == TYPE_CODE_UNION)
     fprintf_filtered (stream, "union ");
-  else if (TYPE_DECLARED_CLASS (type))
+  else if (type->is_declared_class ())
     fprintf_filtered (stream, "class ");
   else
     fprintf_filtered (stream, "struct ");
@@ -1062,13 +1070,13 @@ c_type_print_base_struct_union (struct t
      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);
     }
@@ -1077,10 +1085,10 @@ c_type_print_base_struct_union (struct t
     {
       /* If we just printed a tag name, no need to print anything
 	 else.  */
-      if (TYPE_NAME (type) == NULL)
+      if (type->name () == NULL)
 	fprintf_filtered (stream, "{...}");
     }
-  else if (show > 0 || TYPE_NAME (type) == NULL)
+  else if (show > 0 || type->name () == NULL)
     {
       struct type *basetype;
       int vptr_fieldno;
@@ -1110,17 +1118,16 @@ c_type_print_base_struct_union (struct t
 
       fprintf_filtered (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 ())
+	    fprintf_filtered (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);
+	    fprintf_filtered (stream, _("%p[<no data fields>%p]\n"),
+			      metadata_style.style ().ptr (), nullptr);
 	}
 
       /* Start off with no specific section type, so we can print
@@ -1138,10 +1145,10 @@ c_type_print_base_struct_union (struct t
       /* 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++)
 	{
@@ -1162,7 +1169,7 @@ c_type_print_base_struct_union (struct t
 		 TYPE_FIELD_PRIVATE (type, i), flags);
 	    }
 
-	  bool is_static = field_is_static (&TYPE_FIELD (type, i));
+	  bool is_static = field_is_static (&type->field (i));
 
 	  if (flags->print_offsets)
 	    podata->update (type, i, stream);
@@ -1174,8 +1181,8 @@ c_type_print_base_struct_union (struct t
 	  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
@@ -1195,10 +1202,10 @@ 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_LENGTH (type->field (i).type ()) * TARGET_CHAR_BIT;
 	    }
 
-	  c_print_type_1 (TYPE_FIELD_TYPE (type, i),
+	  c_print_type_1 (type->field (i).type (),
 			  TYPE_FIELD_NAME (type, i),
 			  stream, newshow, level + 4,
 			  language, &local_flags, &local_podata);
@@ -1242,7 +1249,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;
 
@@ -1369,7 +1376,7 @@ 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)
+	  if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0)
 	    fprintf_filtered (stream, "\n");
 
 	  for (int i = 0; i < TYPE_NESTED_TYPES_COUNT (type); ++i)
@@ -1387,7 +1394,7 @@ 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");
 
@@ -1396,7 +1403,7 @@ c_type_print_base_struct_union (struct t
 	      struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
 
 	      /* Dereference the typedef declaration itself.  */
-	      gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
+	      gdb_assert (target->code () == TYPE_CODE_TYPEDEF);
 	      target = TYPE_TARGET_TYPE (target);
 
 	      if (need_access_label)
@@ -1431,7 +1438,7 @@ c_type_print_base_struct_union (struct t
 	    print_spaces_filtered (2, stream);
 	}
 
-      fprintfi_filtered (level, stream, "}");
+      fprintf_filtered (stream, "%*s}", level, "");
     }
 }
 
@@ -1475,9 +1482,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,31 +1494,31 @@ c_type_print_base_1 (struct type *type,
 	 way. */
       if (language == language_c || language == language_minimal)
 	{
-	  if (TYPE_CODE (type) == TYPE_CODE_UNION)
+	  if (type->code () == TYPE_CODE_UNION)
 	    fprintf_filtered (stream, "union ");
-	  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+	  else if (type->code () == TYPE_CODE_STRUCT)
 	    {
-	      if (TYPE_DECLARED_CLASS (type))
+	      if (type->is_declared_class ())
 		fprintf_filtered (stream, "class ");
 	      else
 		fprintf_filtered (stream, "struct ");
 	    }
-	  else if (TYPE_CODE (type) == TYPE_CODE_ENUM)
+	  else if (type->code () == TYPE_CODE_ENUM)
 	    fprintf_filtered (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->name () == NULL);
       gdb_assert (TYPE_TARGET_TYPE (type) == NULL);
       fprintf_styled (stream, metadata_style.style (),
 		      _("<unnamed typedef>"));
@@ -1542,19 +1549,19 @@ c_type_print_base_1 (struct type *type,
       break;
 
     case TYPE_CODE_ENUM:
-      c_type_print_modifier (type, stream, 0, 1);
+      c_type_print_modifier (type, stream, 0, 1, language);
       fprintf_filtered (stream, "enum ");
-      if (TYPE_DECLARED_CLASS (type))
+      if (type->is_declared_class ())
 	fprintf_filtered (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);
 	}
@@ -1564,10 +1571,10 @@ c_type_print_base_1 (struct type *type,
 	{
 	  /* If we just printed a tag name, no need to print anything
 	     else.  */
-	  if (TYPE_NAME (type) == NULL)
+	  if (type->name () == NULL)
 	    fprintf_filtered (stream, "{...}");
 	}
-      else if (show > 0 || TYPE_NAME (type) == NULL)
+      else if (show > 0 || type->name () == NULL)
 	{
 	  LONGEST lastval = 0;
 
@@ -1583,19 +1590,20 @@ c_type_print_base_1 (struct type *type,
 	    {
 	      struct type *underlying = check_typedef (TYPE_TARGET_TYPE (type));
 
-	      if (TYPE_NAME (underlying) != NULL)
-		fprintf_filtered (stream, ": %s ", TYPE_NAME (underlying));
+	      if (underlying->name () != NULL)
+		fprintf_filtered (stream, ": %s ", underlying->name ());
 	    }
 
 	  fprintf_filtered (stream, "{");
-	  len = TYPE_NFIELDS (type);
+	  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);
+	      fputs_styled (TYPE_FIELD_NAME (type, i),
+			    variable_name_style.style (), stream);
 	      if (lastval != TYPE_FIELD_ENUMVAL (type, i))
 		{
 		  fprintf_filtered (stream, " = %s",
@@ -1614,32 +1622,34 @@ c_type_print_base_1 (struct type *type,
 
 	local_flags.local_typedefs = NULL;
 
-	c_type_print_modifier (type, stream, 0, 1);
+	c_type_print_modifier (type, stream, 0, 1, language);
 	fprintf_filtered (stream, "flag ");
-	print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
+	print_name_maybe_canonical (type->name (), flags, stream);
 	if (show > 0)
 	  {
 	    fputs_filtered (" ", stream);
 	    fprintf_filtered (stream, "{\n");
-	    if (TYPE_NFIELDS (type) == 0)
+	    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 ())
+		  fprintf_filtered (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);
+		  fprintf_filtered (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);
 		/* 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),
+		c_print_type_1 (type->field (i).type (),
 				TYPE_FIELD_NAME (type, i),
 				stream, show, level + 4,
 				language, &local_flags, podata);
@@ -1654,7 +1664,7 @@ c_type_print_base_1 (struct type *type,
 		  }
 		fprintf_filtered (stream, ";\n");
 	      }
-	    fprintfi_filtered (level, stream, "}");
+	    fprintf_filtered (stream, "%*s}", level, "");
 	  }
       }
       break;
@@ -1676,27 +1686,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);
+      fputs_filtered (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 +1723,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-valprint.c ./gdb/c-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-valprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-valprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing C values for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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,10 +78,10 @@ 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
@@ -97,7 +97,7 @@ 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
+      if (true_type->code () == TYPE_CODE_INT
 	  && TYPE_LENGTH (true_type) == 1)
 	return 1;
     }
@@ -106,7 +106,7 @@ 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
+      if (true_type->code () == TYPE_CODE_INT
 	  && TYPE_LENGTH (true_type) == 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);
@@ -228,45 +228,37 @@ print_unpacked_pointer (struct type *typ
     }
 }
 
-/* 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)
-{
+c_value_print_array (struct value *val,
+		     struct ui_file *stream, int recurse,
+		     const struct value_print_options *options)
+{
+  struct type *type = check_typedef (value_type (val));
+  CORE_ADDR address = value_address (val);
+  const gdb_byte *valaddr = value_contents_for_printing (val);
   struct type *unresolved_elttype = TYPE_TARGET_TYPE (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)
     {
       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);
       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,
+	  && value_bytes_available (val, 0, TYPE_LENGTH (type))
+	  && !value_bits_any_optimized_out (val, 0,
 					    TARGET_CHAR_BIT * TYPE_LENGTH (type)))
 	{
 	  int force_ellipses = 0;
@@ -280,9 +272,7 @@ c_val_print_array (struct type *type, co
 	      for (temp_len = 0;
 		   (temp_len < len
 		    && temp_len < options->print_max
-		    && extract_unsigned_integer (valaddr
-						 + embedded_offset * unit_size
-						 + temp_len * eltlen,
+		    && extract_unsigned_integer (valaddr + temp_len * eltlen,
 						 eltlen, byte_order) != 0);
 		   ++temp_len)
 		;
@@ -292,25 +282,22 @@ c_val_print_array (struct type *type, co
 		 the next character is not \000.  */
 	      if (temp_len == options->print_max && 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,
+	  LA_PRINT_STRING (stream, unresolved_elttype, valaddr, len,
 			   NULL, force_ellipses, options);
-	  i = len;
 	}
       else
 	{
+	  unsigned int i = 0;
 	  fprintf_filtered (stream, "{");
 	  /* If this is a virtual function table, print the 0th
 	     entry specially, and the rest of the members
@@ -321,13 +308,7 @@ c_val_print_array (struct type *type, co
 	      fprintf_filtered (stream, _("%d vtable entries"),
 				len - 1);
 	    }
-	  else
-	    {
-	      i = 0;
-	    }
-	  val_print_array_elements (type, embedded_offset,
-				    address, stream,
-				    recurse, original_value, options, i);
+	  value_print_array_elements (val, stream, recurse, options, i);
 	  fprintf_filtered (stream, "}");
 	}
     }
@@ -335,211 +316,135 @@ c_val_print_array (struct type *type, co
     {
       /* 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 (value_type (val));
+  const gdb_byte *valaddr = value_contents_for_printing (val);
+
+  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 *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 (value_type (val));
+
+  if (type->code () == TYPE_CODE_UNION && recurse && !options->unionprint)
+    fprintf_filtered (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_BITPOS (type, VTBL_FNADDR_OFFSET) / 8;
+      struct type *field_type = type->field (VTBL_FNADDR_OFFSET).type ();
+      const gdb_byte *valaddr = value_contents_for_printing (val);
       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 = value_type (val);
+      const gdb_byte *valaddr = value_contents_for_printing (val);
+      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);
+	  LA_PRINT_CHAR (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 = value_type (val);
 
   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,20 +459,18 @@ 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;
@@ -581,29 +484,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 (value_type (val));
 
-  if (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type))
+  if (type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type))
     {
+      struct type *original_type = value_type (val);
+
       /* 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
+	  && TYPE_TARGET_TYPE (original_type)->name () != NULL
+	  && (strcmp (TYPE_TARGET_TYPE (original_type)->name (),
 		      "char") == 0
-	      || textual_name (TYPE_NAME (TYPE_TARGET_TYPE (val_type)))))
+	      || textual_name (TYPE_TARGET_TYPE (original_type)->name ())))
 	{
 	  /* Print nothing.  */
 	}
       else if (options->objectprint
-	       && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
+	       && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT))
 	{
 	  int is_ref = TYPE_IS_REFERENCE (type);
 	  enum type_code refcode = TYPE_CODE_UNDEF;
@@ -611,7 +512,7 @@ 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.  */
@@ -624,7 +525,6 @@ c_value_print (struct value *val, struct
 	      if (real_type)
 		{
 		  /* RTTI entry found.  */
-		  type = real_type;
 
 		  /* Need to adjust pointer value.  */
 		  val = value_from_pointer (real_type,
@@ -637,14 +537,11 @@ 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 = value_type (val);
 	  type_print (type, "", stream, -1);
 	  fprintf_filtered (stream, ") ");
-	  val_type = type;
 	}
       else
 	{
@@ -658,7 +555,7 @@ c_value_print (struct value *val, struct
   if (!value_initialized (val))
     fprintf_filtered (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 +564,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);
+	  /* 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
+		&& (TYPE_LENGTH (real_type)
+		    < TYPE_LENGTH (value_enclosing_type (val)))))
+	    val = value_cast (real_type, val);
 	  fprintf_filtered (stream, "(%s%s) ",
-			    TYPE_NAME (real_type),
+			    real_type->name (),
 			    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.  */
 	}
       else if (type != check_typedef (value_enclosing_type (val)))
 	{
 	  /* 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;
+			    value_enclosing_type (val)->name ());
+	  val = value_cast (value_enclosing_type (val), 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-varobj.c ./gdb/c-varobj.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/c-varobj.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/c-varobj.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* varobj support for C and C++.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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,12 +159,12 @@ 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));
+	      gdb_assert (var->index < parent_type->num_fields ());
 	      field_name = TYPE_FIELD_NAME (parent_type, var->index);
 	      return !(field_name == NULL || *field_name == '\0');
 	    }
@@ -188,11 +188,11 @@ 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))
+	  && (type->bounds ()->high.kind () != PROP_UNDEFINED))
 	children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
       else
 	/* If we don't know how many elements there are, don't display
@@ -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;
@@ -249,12 +249,12 @@ value_struct_element_index (struct value
 
   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 (field_is_static (&type->field (type_index)))
 	result = value_static_field (type, type_index);
       else
 	result = value_primitive_field (value, 0, type_index, type);
@@ -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;
 
@@ -348,7 +346,7 @@ c_describe_child (const struct varobj *p
 	  {
 	    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;
 
@@ -486,7 +484,7 @@ c_value_of_variable (const struct varobj
   while (TYPE_IS_REFERENCE (type))
     type = check_typedef (TYPE_TARGET_TYPE (type));
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
@@ -574,15 +572,15 @@ 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 = (TYPE_IS_REFERENCE (var->type)
+				|| var->type->code () == TYPE_CODE_PTR);
+	}
       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 +607,13 @@ 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);
-        }
+				|| parent->type->code () == TYPE_CODE_PTR);
+	}
       adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
 
       cplus_class_num_children (type, kids);
@@ -649,7 +647,7 @@ 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++)
     {
       /* If we have a virtual table pointer, omit it.  Even if virtual
 	 table pointers are not specifically marked in the debug info,
@@ -719,7 +717,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);
+			  || var->type->code () == TYPE_CODE_PTR);
   value = var->value.get ();
   type = varobj_get_value_type (var);
   if (cfull_expression)
@@ -728,8 +726,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 ? "->" : ".";
 
@@ -771,10 +769,10 @@ cplus_describe_child (const struct varob
 	    {
 	      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;
 		}
@@ -797,7 +795,7 @@ 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))
 	{
@@ -806,11 +804,11 @@ cplus_describe_child (const struct varob
 	    *cname = TYPE_FIELD_NAME (type, index);
 
 	  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 +817,10 @@ cplus_describe_child (const struct varob
 
 	      /* Cast the parent to the base' type.  Note that in gdb,
 		 expression like 
-		         (Base1)d
+			 (Base1)d
 		 will create an lvalue, for all appearences, 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/darwin-nat.c ./gdb/darwin-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/darwin-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/darwin-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 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);
 
@@ -180,7 +176,7 @@ inferior_debug (int level, const char *f
 
 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,7 @@ 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), pti);
 	  new_thread_vec.push_back (pti);
 	  new_ix++;
 	  continue;
@@ -364,7 +360,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));
+	    = find_thread_ptid (this, ptid_t (inf->pid, 0, old_id));
 	  delete_thread (thr);
 	  kret = mach_port_deallocate (gdb_task, old_id);
 	  MACH_CHECK_ERROR (kret);
@@ -382,32 +378,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,23 +456,6 @@ 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)
 {
@@ -611,10 +588,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 +689,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 +875,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,8 +903,6 @@ 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
@@ -963,49 +921,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,7 +972,7 @@ 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)
 	{
@@ -1153,8 +1109,7 @@ darwin_decode_message (mach_msg_header_t
 	      /* 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
 	    {
@@ -1172,8 +1127,8 @@ darwin_decode_message (mach_msg_header_t
   return minus_one_ptid;
 }
 
-static int
-cancel_breakpoint (ptid_t ptid)
+int
+darwin_nat_target::cancel_breakpoint (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,7 +1138,7 @@ 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;
 
@@ -1202,8 +1157,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,7 +1169,6 @@ 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"),
@@ -1223,7 +1177,7 @@ darwin_wait (ptid_t ptid, struct target_
   /* 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);
@@ -1262,7 +1216,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;
 
@@ -1273,7 +1228,11 @@ darwin_wait (ptid_t ptid, struct target_
   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,7 +1257,8 @@ 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)
@@ -1323,9 +1283,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 +1375,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,14 +1392,14 @@ 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);
+      ptid = wait_1 (ptid_t (inf->pid), &wstatus);
       if (wstatus.kind == TARGET_WAITKIND_STOPPED
 	  && wstatus.value.sig == GDB_SIGNAL_STOP)
 	break;
@@ -1470,10 +1430,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 +1506,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 +1650,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 +1676,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 +1689,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 +1743,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);
 }
@@ -1813,7 +1773,7 @@ darwin_execvp (const char *file, char *
   if (res != 0)
     {
       fprintf_unfiltered
-        (gdb_stderr, "Cannot initialize attribute for posix_spawn\n");
+	(gdb_stderr, "Cannot initialize attribute for posix_spawn\n");
       return;
     }
 
@@ -1851,7 +1811,7 @@ may_have_sip ()
     {
       unsigned long ver = strtoul (str, NULL, 10);
       if (ver >= 16)
-        return true;
+	return true;
     }
   return false;
 }
@@ -1986,6 +1946,7 @@ darwin_nat_target::create_inferior (cons
 				    char **env, int from_tty)
 {
   gdb::optional<scoped_restore_tmpl<bool>> restore_startup_with_shell;
+  darwin_nat_target *the_target = this;
 
   if (startup_with_shell && may_have_sip ())
     {
@@ -1998,7 +1959,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);
 }
 
@@ -2045,7 +2010,7 @@ darwin_nat_target::attach (const char *a
 
   if (from_tty)
     {
-      char *exec_file = get_exec_file (0);
+      const char *exec_file = get_exec_file (0);
 
       if (exec_file)
 	printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
@@ -2057,9 +2022,8 @@ darwin_nat_target::attach (const char *a
 
   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;
@@ -2068,7 +2032,7 @@ darwin_nat_target::attach (const char *a
 
   darwin_suspend_inferior (inf);
 
-  darwin_init_thread_list (inf);
+  init_thread_list (inf);
 
   darwin_inferior *priv = get_darwin_inferior (inf);
 
@@ -2099,7 +2063,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);
@@ -2361,10 +2325,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
@@ -2468,10 +2432,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 +2446,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/darwin-nat.h ./gdb/darwin-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/darwin-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/darwin-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common things used by the various darwin files
-   Copyright (C) 1995-2020 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 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;
 
@@ -59,6 +112,21 @@ class darwin_nat_target : public inf_chi
   bool supports_multi_process () override;
 
   ptid_t get_ada_task_ptid (long lwp, long 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 (ptid_t ptid);
 };
 
 /* Describe the mach exception handling state for a task.  This state is saved
@@ -83,59 +151,6 @@ 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)
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/darwin-nat-info.c ./gdb/darwin-nat-info.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/darwin-nat-info.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/darwin-nat-info.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 1997-2020 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    Contributed by Apple Computer, Inc.
 
@@ -90,20 +90,20 @@ info_mach_tasks_command (const char *arg
       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);
-        }
+	{
+	  printf_unfiltered (_("    %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);
-        }
+	{
+	  printf_unfiltered (_("    %s is %d unknown task port\n"),
+			     procInfo[index].kp_proc.p_comm,
+			     procInfo[index].kp_proc.p_pid);
+	}
     }
 
   xfree (procInfo);
@@ -156,8 +156,8 @@ info_mach_task_command (const char *args
   printf_unfiltered (_("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);
@@ -168,8 +168,8 @@ info_mach_task_command (const char *args
   printf_unfiltered (_("\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);
@@ -184,9 +184,9 @@ info_mach_task_command (const char *args
   printf_unfiltered (_("\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);
@@ -293,9 +293,9 @@ info_mach_ports_command (const char *arg
     }
 
   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)));
 }
 
 
@@ -311,7 +311,7 @@ darwin_debug_port_info (task_t task, mac
   MACH_CHECK_ERROR (kret);
 
   printf_unfiltered (_("Port 0x%lx in task 0x%lx:\n"), (unsigned long) port,
-                     (unsigned long) task);
+		     (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);
@@ -360,7 +360,7 @@ info_mach_threads_command (const char *a
     }
 
   vm_deallocate (task_self (), (vm_address_t) threads,
-                 (thread_count * sizeof (thread_t)));
+		 (thread_count * sizeof (thread_t)));
 }
 
 static void
@@ -543,65 +543,65 @@ 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;
+	{
+	  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;
 
-          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;
     }
 }
 
@@ -838,29 +838,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/data-directory/Makefile.in ./gdb/data-directory/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/data-directory/Makefile.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/data-directory/Makefile.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2010-2020 Free Software Foundation, Inc.
+# Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
 # Makefile for building a staged copy of the data-directory.
 # This file is part of GDB.
@@ -63,7 +63,7 @@ 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)
@@ -411,7 +411,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dbxread.c ./gdb/dbxread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dbxread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dbxread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -245,7 +245,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 +254,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 +263,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 *);
@@ -297,8 +298,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 *, CORE_ADDR, int);
 
 /* Free up old header file tables.  */
 
@@ -461,8 +462,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,9 +479,9 @@ 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 '_'.  */
+	 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)
 	ms_type = mst_data;
 
@@ -535,9 +536,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 +545,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.  */
@@ -630,8 +631,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;
     }
@@ -765,7 +766,7 @@ 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)
@@ -857,7 +858,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 +867,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 +914,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 +950,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 +971,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 +979,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 +992,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 +1002,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;
@@ -1046,9 +1049,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 +1072,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 imbedded it in the following macro.  */
 
       switch (nlist.n_type)
 	{
@@ -1132,13 +1133,14 @@ read_dbx_symtab (minimal_symbol_reader &
 		     which are not the address.  */
 		  && nlist.n_value >= pst->raw_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 (),
 				   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 +1249,14 @@ read_dbx_symtab (minimal_symbol_reader &
 
 		if (pst)
 		  {
-		    dbx_end_psymtab (objfile, pst, psymtab_include_list,
+		    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 ()),
 				     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 +1283,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,7 +1293,7 @@ read_dbx_symtab (minimal_symbol_reader &
 
 	    if (!pst)
 	      {
-		pst = start_psymtab (objfile,
+		pst = start_psymtab (partial_symtabs, objfile,
 				     namestring, valu,
 				     first_so_symnum * symbol_size);
 		pst->dirname = dirname_nso;
@@ -1431,25 +1434,26 @@ 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 ());
 		}
 	    }
 
- 	  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 +1465,23 @@ 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);
+	      pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+				VAR_DOMAIN, LOC_STATIC,
+				data_sect_index,
+				psymbol_placement::STATIC,
+				nlist.n_value, psymtab_language,
+				partial_symtabs, objfile);
 	      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);
+	      pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+				VAR_DOMAIN, LOC_STATIC,
+				data_sect_index,
+				psymbol_placement::GLOBAL,
+				nlist.n_value, psymtab_language,
+				partial_symtabs, objfile);
 	      continue;
 
 	    case 'T':
@@ -1492,17 +1495,19 @@ 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);
+		  pst->add_psymbol (gdb::string_view (sym_name, sym_len),
+				    true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
+				    psymbol_placement::STATIC,
+				    0, psymtab_language,
+				    partial_symtabs, objfile);
 		  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);
+		      pst->add_psymbol (gdb::string_view (sym_name, sym_len),
+					true, VAR_DOMAIN, LOC_TYPEDEF, -1,
+					psymbol_placement::STATIC,
+					0, psymtab_language,
+					partial_symtabs, objfile);
 		      p += 1;
 		    }
 		}
@@ -1511,10 +1516,11 @@ 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);
+		  pst->add_psymbol (gdb::string_view (sym_name, sym_len),
+				    true, VAR_DOMAIN, LOC_TYPEDEF, -1,
+				    psymbol_placement::STATIC,
+				    0, psymtab_language,
+				    partial_symtabs, objfile);
 		}
 	    check_enum:
 	      /* If this is an enumerated type, we need to
@@ -1572,10 +1578,11 @@ 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);
+		      pst->add_psymbol (gdb::string_view (p, q - p), true,
+					VAR_DOMAIN, LOC_CONST, -1,
+					psymbol_placement::STATIC, 0,
+					psymtab_language,
+					partial_symtabs, objfile);
 		      /* Point past the name.  */
 		      p = q;
 		      /* Skip over the value.  */
@@ -1590,10 +1597,11 @@ 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);
+	      pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+				VAR_DOMAIN, LOC_CONST, -1,
+				psymbol_placement::STATIC, 0,
+				psymtab_language,
+				partial_symtabs, objfile);
 	      continue;
 
 	    case 'f':
@@ -1645,11 +1653,12 @@ read_dbx_symtab (minimal_symbol_reader &
 		  pst->set_text_low (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);
+	      pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+				VAR_DOMAIN, LOC_BLOCK,
+				SECT_OFF_TEXT (objfile),
+				psymbol_placement::STATIC,
+				nlist.n_value, psymtab_language,
+				partial_symtabs, objfile);
 	      continue;
 
 	      /* Global functions were ignored here, but now they
@@ -1704,11 +1713,12 @@ read_dbx_symtab (minimal_symbol_reader &
 		  pst->set_text_low (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);
+	      pst->add_psymbol (gdb::string_view (sym_name, sym_len), true,
+				VAR_DOMAIN, LOC_BLOCK,
+				SECT_OFF_TEXT (objfile),
+				psymbol_placement::GLOBAL,
+				nlist.n_value, psymtab_language,
+				partial_symtabs, objfile);
 	      continue;
 
 	      /* Two things show up here (hopefully); static symbols of
@@ -1764,7 +1774,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,15 +1801,15 @@ 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 "
@@ -1820,12 +1830,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,
 			       dependencies_used, textlow_not_set);
-	      pst = (struct partial_symtab *) 0;
+	      pst = (legacy_psymtab *) 0;
 	      includes_used = 0;
 	      dependencies_used = 0;
 	      has_line_numbers = 0;
@@ -1886,7 +1896,8 @@ read_dbx_symtab (minimal_symbol_reader &
 	 : 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 ()),
@@ -1901,17 +1912,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, CORE_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 +1941,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,
+		 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);
@@ -2000,34 +2013,34 @@ dbx_end_psymtab (struct objfile *objfile
   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 ());
     }
 
   /* 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 +2048,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 +2079,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.  */
     {
@@ -2110,33 +2099,19 @@ dbx_psymtab_to_symtab_1 (struct objfile
       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 +2126,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,13 +2150,12 @@ 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;
 
@@ -2232,8 +2202,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 +2251,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
@@ -2378,10 +2348,10 @@ cp_set_block_scope (const struct symbol
 
 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
@@ -2412,9 +2382,9 @@ process_one_symbol (int type, int desc,
   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 +2400,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
@@ -2456,7 +2426,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 +2439,7 @@ process_one_symbol (int type, int desc,
       sline_found_in_function = 0;
 
       /* Relocate for dynamic loading.  */
-      valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
       valu = gdbarch_addr_bits_remove (gdbarch, valu);
       last_function_start = valu;
 
@@ -2477,7 +2447,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 +2460,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 +2526,16 @@ 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.  */
+      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.  */
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
 
       n_opt_found = 0;
 
@@ -2585,7 +2555,7 @@ process_one_symbol (int type, int desc,
 	}
 
       /* 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;
 
@@ -2598,10 +2568,10 @@ process_one_symbol (int type, int desc,
 
     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.  */
+      valu += section_offsets[SECT_OFF_TEXT (objfile)];
       start_subfile (name);
       break;
 
@@ -2621,11 +2591,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
@@ -2665,22 +2635,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 +2671,12 @@ 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));
+		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:
@@ -2723,27 +2693,27 @@ process_one_symbol (int type, int desc,
 
     case_N_STSYM:		/* Static symbol in data segment.  */
     case N_DSLINE:		/* Source line number, data segment.  */
-      valu += ANOFFSET (section_offsets, 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));
+      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));
+      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));
+      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.  */
@@ -2762,7 +2732,7 @@ process_one_symbol (int type, int desc,
 
     define_a_symbol:
       /* 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,10 +2757,9 @@ 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
@@ -2823,7 +2792,7 @@ 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);
 		}
@@ -2840,8 +2809,8 @@ process_one_symbol (int type, int desc,
       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 +2841,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 +2856,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))
@@ -3174,18 +3143,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dcache.c ./gdb/dcache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dcache.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dcache.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Caching code for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -324,7 +324,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 +401,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)];
@@ -597,7 +597,7 @@ dcache_info_1 (DCACHE *dcache, const cha
       if (linestart == exp || i < 0)
 	{
 	  printf_filtered (_("Usage: info dcache [LINENUMBER]\n"));
-          return;
+	  return;
 	}
 
       dcache_print_line (dcache, i);
@@ -670,22 +670,9 @@ set_dcache_line_size (const char *args,
   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, "");
-}
-
+void _initialize_dcache ();
 void
-_initialize_dcache (void)
+_initialize_dcache ()
 {
   add_setshow_boolean_cmd ("remotecache", class_support,
 			   &dcache_enabled_p, _("\
@@ -707,12 +694,13 @@ 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_basic_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, _("\
+			&dcache_set_list, /*allow_unknown*/0, &setlist);
+  add_show_prefix_cmd ("dcache", class_obscure, _("\
 Show dcachesettings."),
-		  &dcache_show_list, "show dcache ", /*allow_unknown*/0, &showlist);
+		       &dcache_show_list, /*allow_unknown*/0,
+		       &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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dcache.h ./gdb/dcache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dcache.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dcache.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Declarations for caching.  Typically used by remote back ends for
    caching remote memory.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/debug.c ./gdb/debug.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/debug.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/debug.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Debug printing functions.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,6 +19,12 @@
 
 #include "defs.h"
 
+#include "gdbsupport/common-debug.h"
+
+/* See gdbsupport/common-debug.h.  */
+
+int debug_print_depth = 0;
+
 /* See gdbsupport/common-debug.h.  */
 
 void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/debuginfod-support.c ./gdb/debuginfod-support.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/debuginfod-support.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/debuginfod-support.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,197 @@
+/* debuginfod utilities for GDB.
+   Copyright (C) 2020-2021 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 <errno.h>
+#include "cli/cli-style.h"
+#include "gdbsupport/scoped_fd.h"
+#include "debuginfod-support.h"
+#include "gdbsupport/gdb_optional.h"
+
+#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);
+}
+#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;
+  gdb::optional<ui_out::progress_meter> meter;
+};
+
+/* Deleter for a debuginfod_client.  */
+
+struct debuginfod_client_deleter
+{
+  void operator() (debuginfod_client *c)
+  {
+    debuginfod_end (c);
+  }
+};
+
+using debuginfod_client_up
+  = std::unique_ptr<debuginfod_client, debuginfod_client_deleter>;
+
+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);
+
+  if (check_quit_flag ())
+    {
+      printf_filtered ("Cancelling download of %s %ps...\n",
+		       data->desc,
+		       styled_string (file_name_style.style (), data->fname));
+      return 1;
+    }
+
+  if (total == 0)
+    return 0;
+
+  if (!data->meter.has_value ())
+    {
+      float size_in_mb = 1.0f * total / (1024 * 1024);
+      string_file styled_filename (current_uiout->can_emit_style_escape ());
+      fprintf_styled (&styled_filename,
+		      file_name_style.style (),
+		      "%s",
+		      data->fname);
+      std::string message
+	= string_printf ("Downloading %.2f MB %s %s", size_in_mb, data->desc,
+			 styled_filename.c_str());
+      data->meter.emplace (current_uiout, message, 1);
+    }
+
+  current_uiout->progress ((double)cur / (double)total);
+
+  return 0;
+}
+
+static debuginfod_client *
+get_debuginfod_client ()
+{
+  static debuginfod_client_up global_client;
+
+  if (global_client == nullptr)
+    {
+      global_client.reset (debuginfod_begin ());
+
+      if (global_client != nullptr)
+	debuginfod_set_progressfn (global_client.get (), progressfn);
+    }
+
+  return global_client.get ();
+}
+
+/* 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)
+{
+  const char *urls_env_var = getenv (DEBUGINFOD_URLS_ENV_VAR);
+  if (urls_env_var == NULL || urls_env_var[0] == '\0')
+    return scoped_fd (-ENOSYS);
+
+  debuginfod_client *c = get_debuginfod_client ();
+
+  if (c == nullptr)
+    return scoped_fd (-ENOMEM);
+
+  user_data data ("source file", srcpath);
+
+  debuginfod_set_user_data (c, &data);
+  scoped_fd fd (debuginfod_find_source (c,
+					build_id,
+					build_id_len,
+					srcpath,
+					nullptr));
+  debuginfod_set_user_data (c, nullptr);
+
+  /* TODO: Add 'set debug debuginfod' command to control when error messages are shown.  */
+  if (fd.get () < 0 && fd.get () != -ENOENT)
+    printf_filtered (_("Download failed: %s.  Continuing without source file %ps.\n"),
+		     safe_strerror (-fd.get ()),
+		     styled_string (file_name_style.style (),  srcpath));
+
+  if (fd.get () >= 0)
+    *destname = make_unique_xstrdup (srcpath);
+
+  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)
+{
+  const char *urls_env_var = getenv (DEBUGINFOD_URLS_ENV_VAR);
+  if (urls_env_var == NULL || urls_env_var[0] == '\0')
+    return scoped_fd (-ENOSYS);
+
+  debuginfod_client *c = get_debuginfod_client ();
+
+  if (c == nullptr)
+    return scoped_fd (-ENOMEM);
+
+  char *dname = nullptr;
+  user_data data ("separate debug info for", filename);
+
+  debuginfod_set_user_data (c, &data);
+  scoped_fd fd (debuginfod_find_debuginfo (c, build_id, build_id_len,
+					   &dname));
+  debuginfod_set_user_data (c, nullptr);
+
+  if (fd.get () < 0 && fd.get () != -ENOENT)
+    printf_filtered (_("Download failed: %s.  Continuing without debug info for %ps.\n"),
+		     safe_strerror (-fd.get ()),
+		     styled_string (file_name_style.style (),  filename));
+
+  if (fd.get () >= 0)
+    destname->reset (dname);
+
+  return fd;
+}
+#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/debuginfod-support.h ./gdb/debuginfod-support.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/debuginfod-support.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/debuginfod-support.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,64 @@
+/* debuginfod utilities for GDB.
+   Copyright (C) 2020-2021 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, its path on the local machine
+   is stored in DESTNAME.  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, its path on the local machine
+   is stored in DESTNAME.  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);
+
+#endif /* DEBUGINFOD_SUPPORT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/defs.h ./gdb/defs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/defs.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/defs.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it
 		      for now.  */
 /* Basic, host-specific, and target-specific definitions for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,6 +27,15 @@
 
 #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>
 
@@ -469,37 +478,6 @@ enum val_prettyformat
 
 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-exp.c ./gdb/d-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-exp.c	2020-03-07 02:11:12.000000000 +0000
+++ ./gdb/d-exp.c	2021-12-16 02:00:19.000000000 +0000
@@ -1,21 +1,20 @@
+/* A Bison parser, made by GNU Bison 3.6.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, 2018-2020 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,13 +27,17 @@
    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.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -46,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,14 +63,10 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
-/* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
+/* First part of user prologue.  */
 #line 39 "d-exp.y"
 
 
@@ -85,6 +84,7 @@
 #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,86 +110,104 @@ 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"
 
-/* Enabling traces.  */
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTRPTR nullptr
+#   else
+#    define YY_NULLPTRPTR 0
+#   endif
+#  else
+#   define YY_NULLPTRPTR ((void*)0)
+#  endif
+# endif
+
+
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+#if YYDEBUG
+extern int yydebug;
 #endif
 
-
-/* Tokens.  */
+/* Token kinds.  */
 #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
+  {
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    IDENTIFIER = 258,              /* IDENTIFIER  */
+    UNKNOWN_NAME = 259,            /* UNKNOWN_NAME  */
+    TYPENAME = 260,                /* TYPENAME  */
+    COMPLETE = 261,                /* COMPLETE  */
+    NAME_OR_INT = 262,             /* NAME_OR_INT  */
+    INTEGER_LITERAL = 263,         /* INTEGER_LITERAL  */
+    FLOAT_LITERAL = 264,           /* FLOAT_LITERAL  */
+    CHARACTER_LITERAL = 265,       /* CHARACTER_LITERAL  */
+    STRING_LITERAL = 266,          /* STRING_LITERAL  */
+    ENTRY = 267,                   /* ENTRY  */
+    ERROR = 268,                   /* ERROR  */
+    TRUE_KEYWORD = 269,            /* TRUE_KEYWORD  */
+    FALSE_KEYWORD = 270,           /* FALSE_KEYWORD  */
+    NULL_KEYWORD = 271,            /* NULL_KEYWORD  */
+    SUPER_KEYWORD = 272,           /* SUPER_KEYWORD  */
+    CAST_KEYWORD = 273,            /* CAST_KEYWORD  */
+    SIZEOF_KEYWORD = 274,          /* SIZEOF_KEYWORD  */
+    TYPEOF_KEYWORD = 275,          /* TYPEOF_KEYWORD  */
+    TYPEID_KEYWORD = 276,          /* TYPEID_KEYWORD  */
+    INIT_KEYWORD = 277,            /* INIT_KEYWORD  */
+    IMMUTABLE_KEYWORD = 278,       /* IMMUTABLE_KEYWORD  */
+    CONST_KEYWORD = 279,           /* CONST_KEYWORD  */
+    SHARED_KEYWORD = 280,          /* SHARED_KEYWORD  */
+    STRUCT_KEYWORD = 281,          /* STRUCT_KEYWORD  */
+    UNION_KEYWORD = 282,           /* UNION_KEYWORD  */
+    CLASS_KEYWORD = 283,           /* CLASS_KEYWORD  */
+    INTERFACE_KEYWORD = 284,       /* INTERFACE_KEYWORD  */
+    ENUM_KEYWORD = 285,            /* ENUM_KEYWORD  */
+    TEMPLATE_KEYWORD = 286,        /* TEMPLATE_KEYWORD  */
+    DELEGATE_KEYWORD = 287,        /* DELEGATE_KEYWORD  */
+    FUNCTION_KEYWORD = 288,        /* FUNCTION_KEYWORD  */
+    DOLLAR_VARIABLE = 289,         /* DOLLAR_VARIABLE  */
+    ASSIGN_MODIFY = 290,           /* ASSIGN_MODIFY  */
+    OROR = 291,                    /* OROR  */
+    ANDAND = 292,                  /* ANDAND  */
+    EQUAL = 293,                   /* EQUAL  */
+    NOTEQUAL = 294,                /* NOTEQUAL  */
+    LEQ = 295,                     /* LEQ  */
+    GEQ = 296,                     /* GEQ  */
+    LSH = 297,                     /* LSH  */
+    RSH = 298,                     /* RSH  */
+    HATHAT = 299,                  /* HATHAT  */
+    IDENTITY = 300,                /* IDENTITY  */
+    NOTIDENTITY = 301,             /* NOTIDENTITY  */
+    INCREMENT = 302,               /* INCREMENT  */
+    DECREMENT = 303,               /* DECREMENT  */
+    DOTDOT = 304                   /* DOTDOT  */
+  };
+  typedef enum yytokentype yytoken_kind_t;
 #endif
-/* Tokens.  */
+/* Token kinds.  */
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
 #define IDENTIFIER 258
 #define UNKNOWN_NAME 259
 #define TYPENAME 260
@@ -225,28 +243,24 @@ 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 YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 87 "d-exp.y"
+#line 90 "d-exp.y"
 
     struct {
       LONGEST val;
@@ -268,58 +282,217 @@ typedef union YYSTYPE
     struct stoken_vector svec;
   
 
+#line 286 "d-exp.c.tmp"
 
-/* Line 214 of yacc.c  */
-#line 274 "d-exp.c.tmp"
-} YYSTYPE;
+};
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern YYSTYPE yylval;
+
+int yyparse (void);
 
-/* Line 264 of yacc.c  */
-#line 108 "d-exp.y"
+
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_IDENTIFIER = 3,                 /* IDENTIFIER  */
+  YYSYMBOL_UNKNOWN_NAME = 4,               /* UNKNOWN_NAME  */
+  YYSYMBOL_TYPENAME = 5,                   /* TYPENAME  */
+  YYSYMBOL_COMPLETE = 6,                   /* COMPLETE  */
+  YYSYMBOL_NAME_OR_INT = 7,                /* NAME_OR_INT  */
+  YYSYMBOL_INTEGER_LITERAL = 8,            /* INTEGER_LITERAL  */
+  YYSYMBOL_FLOAT_LITERAL = 9,              /* FLOAT_LITERAL  */
+  YYSYMBOL_CHARACTER_LITERAL = 10,         /* CHARACTER_LITERAL  */
+  YYSYMBOL_STRING_LITERAL = 11,            /* STRING_LITERAL  */
+  YYSYMBOL_ENTRY = 12,                     /* ENTRY  */
+  YYSYMBOL_ERROR = 13,                     /* ERROR  */
+  YYSYMBOL_TRUE_KEYWORD = 14,              /* TRUE_KEYWORD  */
+  YYSYMBOL_FALSE_KEYWORD = 15,             /* FALSE_KEYWORD  */
+  YYSYMBOL_NULL_KEYWORD = 16,              /* NULL_KEYWORD  */
+  YYSYMBOL_SUPER_KEYWORD = 17,             /* SUPER_KEYWORD  */
+  YYSYMBOL_CAST_KEYWORD = 18,              /* CAST_KEYWORD  */
+  YYSYMBOL_SIZEOF_KEYWORD = 19,            /* SIZEOF_KEYWORD  */
+  YYSYMBOL_TYPEOF_KEYWORD = 20,            /* TYPEOF_KEYWORD  */
+  YYSYMBOL_TYPEID_KEYWORD = 21,            /* TYPEID_KEYWORD  */
+  YYSYMBOL_INIT_KEYWORD = 22,              /* INIT_KEYWORD  */
+  YYSYMBOL_IMMUTABLE_KEYWORD = 23,         /* IMMUTABLE_KEYWORD  */
+  YYSYMBOL_CONST_KEYWORD = 24,             /* CONST_KEYWORD  */
+  YYSYMBOL_SHARED_KEYWORD = 25,            /* SHARED_KEYWORD  */
+  YYSYMBOL_STRUCT_KEYWORD = 26,            /* STRUCT_KEYWORD  */
+  YYSYMBOL_UNION_KEYWORD = 27,             /* UNION_KEYWORD  */
+  YYSYMBOL_CLASS_KEYWORD = 28,             /* CLASS_KEYWORD  */
+  YYSYMBOL_INTERFACE_KEYWORD = 29,         /* INTERFACE_KEYWORD  */
+  YYSYMBOL_ENUM_KEYWORD = 30,              /* ENUM_KEYWORD  */
+  YYSYMBOL_TEMPLATE_KEYWORD = 31,          /* TEMPLATE_KEYWORD  */
+  YYSYMBOL_DELEGATE_KEYWORD = 32,          /* DELEGATE_KEYWORD  */
+  YYSYMBOL_FUNCTION_KEYWORD = 33,          /* FUNCTION_KEYWORD  */
+  YYSYMBOL_DOLLAR_VARIABLE = 34,           /* DOLLAR_VARIABLE  */
+  YYSYMBOL_ASSIGN_MODIFY = 35,             /* ASSIGN_MODIFY  */
+  YYSYMBOL_36_ = 36,                       /* ','  */
+  YYSYMBOL_37_ = 37,                       /* '='  */
+  YYSYMBOL_38_ = 38,                       /* '?'  */
+  YYSYMBOL_OROR = 39,                      /* OROR  */
+  YYSYMBOL_ANDAND = 40,                    /* ANDAND  */
+  YYSYMBOL_41_ = 41,                       /* '|'  */
+  YYSYMBOL_42_ = 42,                       /* '^'  */
+  YYSYMBOL_43_ = 43,                       /* '&'  */
+  YYSYMBOL_EQUAL = 44,                     /* EQUAL  */
+  YYSYMBOL_NOTEQUAL = 45,                  /* NOTEQUAL  */
+  YYSYMBOL_46_ = 46,                       /* '<'  */
+  YYSYMBOL_47_ = 47,                       /* '>'  */
+  YYSYMBOL_LEQ = 48,                       /* LEQ  */
+  YYSYMBOL_GEQ = 49,                       /* GEQ  */
+  YYSYMBOL_LSH = 50,                       /* LSH  */
+  YYSYMBOL_RSH = 51,                       /* RSH  */
+  YYSYMBOL_52_ = 52,                       /* '+'  */
+  YYSYMBOL_53_ = 53,                       /* '-'  */
+  YYSYMBOL_54_ = 54,                       /* '*'  */
+  YYSYMBOL_55_ = 55,                       /* '/'  */
+  YYSYMBOL_56_ = 56,                       /* '%'  */
+  YYSYMBOL_HATHAT = 57,                    /* HATHAT  */
+  YYSYMBOL_IDENTITY = 58,                  /* IDENTITY  */
+  YYSYMBOL_NOTIDENTITY = 59,               /* NOTIDENTITY  */
+  YYSYMBOL_INCREMENT = 60,                 /* INCREMENT  */
+  YYSYMBOL_DECREMENT = 61,                 /* DECREMENT  */
+  YYSYMBOL_62_ = 62,                       /* '.'  */
+  YYSYMBOL_63_ = 63,                       /* '['  */
+  YYSYMBOL_64_ = 64,                       /* '('  */
+  YYSYMBOL_DOTDOT = 65,                    /* DOTDOT  */
+  YYSYMBOL_66_ = 66,                       /* ':'  */
+  YYSYMBOL_67_ = 67,                       /* '~'  */
+  YYSYMBOL_68_ = 68,                       /* '!'  */
+  YYSYMBOL_69_ = 69,                       /* ')'  */
+  YYSYMBOL_70_ = 70,                       /* ']'  */
+  YYSYMBOL_YYACCEPT = 71,                  /* $accept  */
+  YYSYMBOL_start = 72,                     /* start  */
+  YYSYMBOL_Expression = 73,                /* Expression  */
+  YYSYMBOL_CommaExpression = 74,           /* CommaExpression  */
+  YYSYMBOL_AssignExpression = 75,          /* AssignExpression  */
+  YYSYMBOL_ConditionalExpression = 76,     /* ConditionalExpression  */
+  YYSYMBOL_OrOrExpression = 77,            /* OrOrExpression  */
+  YYSYMBOL_AndAndExpression = 78,          /* AndAndExpression  */
+  YYSYMBOL_OrExpression = 79,              /* OrExpression  */
+  YYSYMBOL_XorExpression = 80,             /* XorExpression  */
+  YYSYMBOL_AndExpression = 81,             /* AndExpression  */
+  YYSYMBOL_CmpExpression = 82,             /* CmpExpression  */
+  YYSYMBOL_EqualExpression = 83,           /* EqualExpression  */
+  YYSYMBOL_IdentityExpression = 84,        /* IdentityExpression  */
+  YYSYMBOL_RelExpression = 85,             /* RelExpression  */
+  YYSYMBOL_ShiftExpression = 86,           /* ShiftExpression  */
+  YYSYMBOL_AddExpression = 87,             /* AddExpression  */
+  YYSYMBOL_MulExpression = 88,             /* MulExpression  */
+  YYSYMBOL_UnaryExpression = 89,           /* UnaryExpression  */
+  YYSYMBOL_CastExpression = 90,            /* CastExpression  */
+  YYSYMBOL_PowExpression = 91,             /* PowExpression  */
+  YYSYMBOL_PostfixExpression = 92,         /* PostfixExpression  */
+  YYSYMBOL_ArgumentList = 93,              /* ArgumentList  */
+  YYSYMBOL_ArgumentList_opt = 94,          /* ArgumentList_opt  */
+  YYSYMBOL_CallExpression = 95,            /* CallExpression  */
+  YYSYMBOL_96_1 = 96,                      /* $@1  */
+  YYSYMBOL_IndexExpression = 97,           /* IndexExpression  */
+  YYSYMBOL_SliceExpression = 98,           /* SliceExpression  */
+  YYSYMBOL_PrimaryExpression = 99,         /* PrimaryExpression  */
+  YYSYMBOL_ArrayLiteral = 100,             /* ArrayLiteral  */
+  YYSYMBOL_IdentifierExp = 101,            /* IdentifierExp  */
+  YYSYMBOL_StringExp = 102,                /* StringExp  */
+  YYSYMBOL_TypeExp = 103,                  /* TypeExp  */
+  YYSYMBOL_BasicType2 = 104,               /* BasicType2  */
+  YYSYMBOL_BasicType = 105                 /* BasicType  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
+
+/* Second part of user prologue.  */
+#line 111 "d-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (struct parser_state *, const char *,
 			 int, int, YYSTYPE *);
 
+#line 421 "d-exp.c.tmp"
 
-/* Line 264 of yacc.c  */
-#line 293 "d-exp.c.tmp"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -327,55 +500,100 @@ 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 __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_uint8 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #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_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
 # 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__ && ! defined __ICC && 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 __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
 #endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
 
@@ -391,11 +609,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 +621,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,88 +636,89 @@ 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
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   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 (YYSIZEOF (union 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) * (YYSIZEOF (yy_state_t) + YYSIZEOF (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                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*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, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYPTRDIFF_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,18 +730,22 @@ 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.  */
-#define YYUNDEFTOK  2
 #define YYMAXUTOK   304
 
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
+static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -530,7 +753,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,102 +776,54 @@ 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.  */
-static const yytype_uint16 yyrline[] =
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 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
+       0,   184,   184,   185,   191,   195,   196,   201,   202,   204,
+     214,   215,   227,   228,   233,   234,   239,   240,   245,   246,
+     251,   252,   257,   258,   259,   260,   264,   266,   271,   273,
+     278,   280,   282,   284,   289,   290,   292,   297,   298,   300,
+     302,   307,   308,   310,   312,   316,   318,   320,   322,   324,
+     326,   328,   330,   332,   334,   335,   339,   343,   348,   349,
+     354,   355,   362,   367,   374,   376,   378,   380,   381,   382,
+     386,   388,   394,   395,   400,   399,   411,   425,   427,   439,
+     441,   480,   514,   516,   521,   525,   527,   529,   531,   538,
+     543,   549,   556,   561,   566,   570,   585,   603,   605,   607,
+     614,   616,   618,   621,   627
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* 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", "IDENTIFIER", "UNKNOWN_NAME", "TYPENAME",
-  "COMPLETE", "NAME_OR_INT", "INTEGER_LITERAL", "FLOAT_LITERAL",
-  "CHARACTER_LITERAL", "STRING_LITERAL", "ENTRY", "ERROR", "TRUE_KEYWORD",
-  "FALSE_KEYWORD", "NULL_KEYWORD", "SUPER_KEYWORD", "CAST_KEYWORD",
-  "SIZEOF_KEYWORD", "TYPEOF_KEYWORD", "TYPEID_KEYWORD", "INIT_KEYWORD",
-  "IMMUTABLE_KEYWORD", "CONST_KEYWORD", "SHARED_KEYWORD", "STRUCT_KEYWORD",
-  "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", "'.'", "'['", "'('",
-  "DOTDOT", "':'", "'~'", "'!'", "')'", "']'", "$accept", "start",
-  "Expression", "CommaExpression", "AssignExpression",
+  "\"end of file\"", "error", "\"invalid token\"", "IDENTIFIER",
+  "UNKNOWN_NAME", "TYPENAME", "COMPLETE", "NAME_OR_INT", "INTEGER_LITERAL",
+  "FLOAT_LITERAL", "CHARACTER_LITERAL", "STRING_LITERAL", "ENTRY", "ERROR",
+  "TRUE_KEYWORD", "FALSE_KEYWORD", "NULL_KEYWORD", "SUPER_KEYWORD",
+  "CAST_KEYWORD", "SIZEOF_KEYWORD", "TYPEOF_KEYWORD", "TYPEID_KEYWORD",
+  "INIT_KEYWORD", "IMMUTABLE_KEYWORD", "CONST_KEYWORD", "SHARED_KEYWORD",
+  "STRUCT_KEYWORD", "UNION_KEYWORD", "CLASS_KEYWORD", "INTERFACE_KEYWORD",
+  "ENUM_KEYWORD", "TEMPLATE_KEYWORD", "DELEGATE_KEYWORD",
+  "FUNCTION_KEYWORD", "DOLLAR_VARIABLE", "ASSIGN_MODIFY", "','", "'='",
+  "'?'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQUAL", "NOTEQUAL", "'<'",
+  "'>'", "LEQ", "GEQ", "LSH", "RSH", "'+'", "'-'", "'*'", "'/'", "'%'",
+  "HATHAT", "IDENTITY", "NOTIDENTITY", "INCREMENT", "DECREMENT", "'.'",
+  "'['", "'('", "DOTDOT", "':'", "'~'", "'!'", "')'", "']'", "$accept",
+  "start", "Expression", "CommaExpression", "AssignExpression",
   "ConditionalExpression", "OrOrExpression", "AndAndExpression",
   "OrExpression", "XorExpression", "AndExpression", "CmpExpression",
   "EqualExpression", "IdentityExpression", "RelExpression",
@@ -656,94 +831,44 @@ 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
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 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
+#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(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-/* 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(Yyn) \
+  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 +890,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_int8 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 +923,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,9 +985,9 @@ static const yytype_int16 yycheck[] =
       68
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_int8 yystos[] =
 {
        0,     3,     5,     7,     8,     9,    10,    11,    14,    15,
       16,    18,    20,    34,    43,    52,    53,    54,    60,    61,
@@ -852,95 +1008,72 @@ 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
-
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_int8 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
+};
 
-/* 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.  */
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_int8 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 YYFAIL		goto yyerrlab
 
-#define YYRECOVERING()  (!!yyerrstatus)
+enum { YYENOMEM = -2 };
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      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
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
 
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-/* 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
 
+#define YYRECOVERING()  (!!yyerrstatus)
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
+#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 (0)
+
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -950,80 +1083,65 @@ 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))
-
-
-/*--------------------------------.
-| 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 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
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Kind, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#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 *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1031,16 +1149,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
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1051,63 +1161,56 @@ 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 (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule)
 {
+  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);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             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,
+                       YY_ACCESSING_SYMBOL (+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.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1122,342 +1225,82 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   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++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  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;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      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;
-	  }
-    do_not_strip_quotes: ;
-    }
 
-  if (! yyres)
-    return yystrlen (yystr);
 
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# 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)
-{
-  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;
-    }
-}
-#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,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  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;
-
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
 
-/*-------------------------.
-| 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)
+
+/*----------.
+| yyparse.  |
+`----------*/
+
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
-    int yystate;
+    yy_state_fast_t 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.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -1465,133 +1308,147 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
   yystacksize = YYINITDEPTH;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  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;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined 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);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+
+        /* 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 * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* 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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, 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 */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
   /* 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.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      YYDPRINTF ((stderr, "Reading a token\n"));
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -1606,8 +1463,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;
     }
@@ -1619,13 +1476,13 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -1640,14 +1497,14 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   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
@@ -1660,399 +1517,368 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 6:
-
-/* Line 1455 of yacc.c  */
-#line 194 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+  case 6:
+#line 197 "d-exp.y"
+                { pstate->wrap2<comma_operation> (); }
+#line 1525 "d-exp.c.tmp"
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 200 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 203 "d-exp.y"
+                { pstate->wrap2<assign_operation> (); }
+#line 1531 "d-exp.c.tmp"
     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 205 "d-exp.y"
+                {
+		  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 1542 "d-exp.c.tmp"
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 210 "d-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_COND); }
+#line 216 "d-exp.y"
+                {
+		  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 1555 "d-exp.c.tmp"
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 216 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 229 "d-exp.y"
+                { pstate->wrap2<logical_or_operation> (); }
+#line 1561 "d-exp.c.tmp"
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 222 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 235 "d-exp.y"
+                { pstate->wrap2<logical_and_operation> (); }
+#line 1567 "d-exp.c.tmp"
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
-#line 228 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 241 "d-exp.y"
+                { pstate->wrap2<bitwise_ior_operation> (); }
+#line 1573 "d-exp.c.tmp"
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 234 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 247 "d-exp.y"
+                { pstate->wrap2<bitwise_xor_operation> (); }
+#line 1579 "d-exp.c.tmp"
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 240 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 253 "d-exp.y"
+                { pstate->wrap2<bitwise_and_operation> (); }
+#line 1585 "d-exp.c.tmp"
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 252 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 265 "d-exp.y"
+                { pstate->wrap2<equal_operation> (); }
+#line 1591 "d-exp.c.tmp"
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 254 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 267 "d-exp.y"
+                { pstate->wrap2<notequal_operation> (); }
+#line 1597 "d-exp.c.tmp"
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 259 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 272 "d-exp.y"
+                { pstate->wrap2<equal_operation> (); }
+#line 1603 "d-exp.c.tmp"
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 261 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 274 "d-exp.y"
+                { pstate->wrap2<notequal_operation> (); }
+#line 1609 "d-exp.c.tmp"
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 266 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 279 "d-exp.y"
+                { pstate->wrap2<less_operation> (); }
+#line 1615 "d-exp.c.tmp"
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 268 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 281 "d-exp.y"
+                { pstate->wrap2<leq_operation> (); }
+#line 1621 "d-exp.c.tmp"
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 270 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 283 "d-exp.y"
+                { pstate->wrap2<gtr_operation> (); }
+#line 1627 "d-exp.c.tmp"
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 272 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 285 "d-exp.y"
+                { pstate->wrap2<geq_operation> (); }
+#line 1633 "d-exp.c.tmp"
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 278 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LSH); }
+#line 291 "d-exp.y"
+                { pstate->wrap2<lsh_operation> (); }
+#line 1639 "d-exp.c.tmp"
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 280 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_RSH); }
+#line 293 "d-exp.y"
+                { pstate->wrap2<rsh_operation> (); }
+#line 1645 "d-exp.c.tmp"
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 286 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 299 "d-exp.y"
+                { pstate->wrap2<add_operation> (); }
+#line 1651 "d-exp.c.tmp"
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 288 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 301 "d-exp.y"
+                { pstate->wrap2<sub_operation> (); }
+#line 1657 "d-exp.c.tmp"
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 290 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_CONCAT); }
+#line 303 "d-exp.y"
+                { pstate->wrap2<concat_operation> (); }
+#line 1663 "d-exp.c.tmp"
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 296 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 309 "d-exp.y"
+                { pstate->wrap2<mul_operation> (); }
+#line 1669 "d-exp.c.tmp"
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 298 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 311 "d-exp.y"
+                { pstate->wrap2<div_operation> (); }
+#line 1675 "d-exp.c.tmp"
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 300 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 313 "d-exp.y"
+                { pstate->wrap2<rem_operation> (); }
+#line 1681 "d-exp.c.tmp"
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 304 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 317 "d-exp.y"
+                { pstate->wrap<unop_addr_operation> (); }
+#line 1687 "d-exp.c.tmp"
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 306 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
+#line 319 "d-exp.y"
+                { pstate->wrap<preinc_operation> (); }
+#line 1693 "d-exp.c.tmp"
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
-#line 308 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
+#line 321 "d-exp.y"
+                { pstate->wrap<predec_operation> (); }
+#line 1699 "d-exp.c.tmp"
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 310 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 323 "d-exp.y"
+                { pstate->wrap<unop_ind_operation> (); }
+#line 1705 "d-exp.c.tmp"
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 312 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 325 "d-exp.y"
+                { pstate->wrap<unary_neg_operation> (); }
+#line 1711 "d-exp.c.tmp"
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 314 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+#line 327 "d-exp.y"
+                { pstate->wrap<unary_plus_operation> (); }
+#line 1717 "d-exp.c.tmp"
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 316 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 329 "d-exp.y"
+                { pstate->wrap<unary_logical_not_operation> (); }
+#line 1723 "d-exp.c.tmp"
     break;
 
   case 52:
-
-/* Line 1455 of yacc.c  */
-#line 318 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+#line 331 "d-exp.y"
+                { pstate->wrap<unary_complement_operation> (); }
+#line 1729 "d-exp.c.tmp"
     break;
 
   case 53:
-
-/* Line 1455 of yacc.c  */
-#line 320 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 333 "d-exp.y"
+                { pstate->wrap<unop_sizeof_operation> (); }
+#line 1735 "d-exp.c.tmp"
     break;
 
   case 56:
-
-/* Line 1455 of yacc.c  */
-#line 327 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+#line 340 "d-exp.y"
+                { pstate->wrap2<unop_cast_type_operation> (); }
+#line 1741 "d-exp.c.tmp"
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
-#line 331 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
+#line 344 "d-exp.y"
+                { pstate->wrap2<unop_cast_type_operation> (); }
+#line 1747 "d-exp.c.tmp"
     break;
 
   case 59:
-
-/* Line 1455 of yacc.c  */
-#line 338 "d-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EXP); }
+#line 350 "d-exp.y"
+                { pstate->wrap2<exp_operation> (); }
+#line 1753 "d-exp.c.tmp"
     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 356 "d-exp.y"
+                {
+		  structop_base_operation *op
+		    = new structop_ptr_operation (pstate->pop (), "");
+		  pstate->mark_struct_expression (op);
+		  pstate->push (operation_up (op));
+		}
+#line 1764 "d-exp.c.tmp"
     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 363 "d-exp.y"
+                {
+		  pstate->push_new<structop_operation>
+		    (pstate->pop (), copy_name ((yyvsp[0].sval)));
+		}
+#line 1773 "d-exp.c.tmp"
     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 368 "d-exp.y"
+                {
+		  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 1784 "d-exp.c.tmp"
     break;
 
   case 64:
-
-/* Line 1455 of yacc.c  */
-#line 361 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 375 "d-exp.y"
+                { pstate->wrap<unop_sizeof_operation> (); }
+#line 1790 "d-exp.c.tmp"
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
-#line 363 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+#line 377 "d-exp.y"
+                { pstate->wrap<postinc_operation> (); }
+#line 1796 "d-exp.c.tmp"
     break;
 
   case 66:
-
-/* Line 1455 of yacc.c  */
-#line 365 "d-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+#line 379 "d-exp.y"
+                { pstate->wrap<postdec_operation> (); }
+#line 1802 "d-exp.c.tmp"
     break;
 
   case 70:
-
-/* Line 1455 of yacc.c  */
-#line 373 "d-exp.y"
-    { pstate->arglist_len = 1; }
+#line 387 "d-exp.y"
+                { pstate->arglist_len = 1; }
+#line 1808 "d-exp.c.tmp"
     break;
 
   case 71:
-
-/* Line 1455 of yacc.c  */
-#line 375 "d-exp.y"
-    { pstate->arglist_len++; }
+#line 389 "d-exp.y"
+                { pstate->arglist_len++; }
+#line 1814 "d-exp.c.tmp"
     break;
 
   case 72:
-
-/* Line 1455 of yacc.c  */
-#line 380 "d-exp.y"
-    { pstate->arglist_len = 0; }
+#line 394 "d-exp.y"
+                { pstate->arglist_len = 0; }
+#line 1820 "d-exp.c.tmp"
     break;
 
   case 74:
-
-/* Line 1455 of yacc.c  */
-#line 386 "d-exp.y"
-    { pstate->start_arglist (); }
+#line 400 "d-exp.y"
+                { pstate->start_arglist (); }
+#line 1826 "d-exp.c.tmp"
     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 402 "d-exp.y"
+                {
+		  std::vector<operation_up> args
+		    = pstate->pop_vector (pstate->end_arglist ());
+		  pstate->push_new<funcall_operation>
+		    (pstate->pop (), std::move (args));
+		}
+#line 1837 "d-exp.c.tmp"
     break;
 
   case 76:
-
-/* Line 1455 of yacc.c  */
-#line 395 "d-exp.y"
-    { if (pstate->arglist_len > 0)
+#line 412 "d-exp.y"
+                { 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 1852 "d-exp.c.tmp"
     break;
 
   case 77:
-
-/* Line 1455 of yacc.c  */
-#line 408 "d-exp.y"
-    { /* Do nothing.  */ }
+#line 426 "d-exp.y"
+                { /* Do nothing.  */ }
+#line 1858 "d-exp.c.tmp"
     break;
 
   case 78:
-
-/* Line 1455 of yacc.c  */
-#line 410 "d-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_SLICE); }
+#line 428 "d-exp.y"
+                {
+		  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 1871 "d-exp.c.tmp"
     break;
 
   case 79:
-
-/* Line 1455 of yacc.c  */
-#line 415 "d-exp.y"
-    { /* Do nothing.  */ }
+#line 440 "d-exp.y"
+                { /* Do nothing.  */ }
+#line 1877 "d-exp.c.tmp"
     break;
 
   case 80:
-
-/* Line 1455 of yacc.c  */
-#line 417 "d-exp.y"
-    { struct bound_minimal_symbol msymbol;
-		  std::string copy = copy_name ((yyvsp[(1) - (1)].sval));
+#line 442 "d-exp.y"
+                { struct bound_minimal_symbol msymbol;
+		  std::string copy = copy_name ((yyvsp[0].sval));
 		  struct field_of_this_result is_a_field_of_this;
 		  struct block_symbol sym;
 
@@ -2064,28 +1890,24 @@ 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);
 		    }
 		  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,184 +1915,144 @@ yyreduce:
 			       copy.c_str ());
 		    }
 		  }
+#line 1920 "d-exp.c.tmp"
     break;
 
   case 81:
-
-/* Line 1455 of yacc.c  */
-#line 460 "d-exp.y"
-    { struct type *type = check_typedef ((yyvsp[(1) - (3)].tval));
+#line 481 "d-exp.y"
+                        { 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 ());
+			      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 1958 "d-exp.c.tmp"
     break;
 
   case 82:
-
-/* Line 1455 of yacc.c  */
-#line 511 "d-exp.y"
-    { write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval)); }
+#line 515 "d-exp.y"
+                { pstate->push_dollar ((yyvsp[0].sval)); }
+#line 1964 "d-exp.c.tmp"
     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 517 "d-exp.y"
+                { 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 1973 "d-exp.c.tmp"
     break;
 
   case 84:
-
-/* Line 1455 of yacc.c  */
-#line 521 "d-exp.y"
-    { struct type *type = parse_d_type (pstate)->builtin_void;
+#line 522 "d-exp.y"
+                { 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 1981 "d-exp.c.tmp"
     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 526 "d-exp.y"
+                { pstate->push_new<bool_operation> (true); }
+#line 1987 "d-exp.c.tmp"
     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 528 "d-exp.y"
+                { pstate->push_new<bool_operation> (false); }
+#line 1993 "d-exp.c.tmp"
     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 530 "d-exp.y"
+                { pstate->push_new<long_const_operation> ((yyvsp[0].typed_val_int).type, (yyvsp[0].typed_val_int).val); }
+#line 1999 "d-exp.c.tmp"
     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 532 "d-exp.y"
+                {
+		  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 2010 "d-exp.c.tmp"
     break;
 
   case 89:
-
-/* Line 1455 of yacc.c  */
-#line 546 "d-exp.y"
-    { struct stoken_vector vec;
+#line 539 "d-exp.y"
+                { 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 2019 "d-exp.c.tmp"
     break;
 
   case 90:
-
-/* Line 1455 of yacc.c  */
-#line 551 "d-exp.y"
-    { 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); }
+#line 544 "d-exp.y"
+                { int i;
+		  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 2029 "d-exp.c.tmp"
     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 550 "d-exp.y"
+                {
+		  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 2040 "d-exp.c.tmp"
     break;
 
   case 92:
-
-/* Line 1455 of yacc.c  */
-#line 562 "d-exp.y"
-    { write_exp_elt_opcode (pstate, OP_TYPEOF); }
+#line 557 "d-exp.y"
+                { pstate->wrap<typeof_operation> (); }
+#line 2046 "d-exp.c.tmp"
     break;
 
   case 93:
-
-/* Line 1455 of yacc.c  */
-#line 567 "d-exp.y"
-    { (yyval.ival) = pstate->arglist_len; }
+#line 562 "d-exp.y"
+                { (yyval.ival) = pstate->arglist_len; }
+#line 2052 "d-exp.c.tmp"
     break;
 
   case 95:
-
-/* Line 1455 of yacc.c  */
-#line 576 "d-exp.y"
-    { /* We copy the string here, and not in the
+#line 571 "d-exp.y"
+                { /* We copy the string here, and not in the
 		     lexer, to guarantee that we do not leak a
 		     string.  Note that we follow the
 		     NUL-termination convention of the
@@ -2279,190 +2061,153 @@ 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 2071 "d-exp.c.tmp"
     break;
 
   case 96:
-
-/* Line 1455 of yacc.c  */
-#line 591 "d-exp.y"
-    { /* Note that we NUL-terminate here, but just
+#line 586 "d-exp.y"
+                { /* Note that we NUL-terminate here, but just
 		     for convenience.  */
 		  char *p;
 		  ++(yyval.svec).len;
 		  (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 2090 "d-exp.c.tmp"
     break;
 
   case 97:
-
-/* Line 1455 of yacc.c  */
-#line 609 "d-exp.y"
-    { /* Do nothing.  */ }
+#line 604 "d-exp.y"
+                { /* Do nothing.  */ }
+#line 2096 "d-exp.c.tmp"
     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 606 "d-exp.y"
+                { pstate->push_new<type_operation> ((yyvsp[0].tval)); }
+#line 2102 "d-exp.c.tmp"
     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 608 "d-exp.y"
+                { (yyval.tval) = type_stack->follow_types ((yyvsp[-1].tval));
+		  pstate->push_new<type_operation> ((yyval.tval));
 		}
+#line 2110 "d-exp.c.tmp"
     break;
 
   case 100:
-
-/* Line 1455 of yacc.c  */
-#line 624 "d-exp.y"
-    { type_stack->push (tp_pointer); }
+#line 615 "d-exp.y"
+                { type_stack->push (tp_pointer); }
+#line 2116 "d-exp.c.tmp"
     break;
 
   case 101:
-
-/* Line 1455 of yacc.c  */
-#line 626 "d-exp.y"
-    { type_stack->push (tp_pointer); }
+#line 617 "d-exp.y"
+                { type_stack->push (tp_pointer); }
+#line 2122 "d-exp.c.tmp"
     break;
 
   case 102:
-
-/* Line 1455 of yacc.c  */
-#line 628 "d-exp.y"
-    { type_stack->push ((yyvsp[(2) - (3)].typed_val_int).val);
+#line 619 "d-exp.y"
+                { type_stack->push ((yyvsp[-1].typed_val_int).val);
 		  type_stack->push (tp_array); }
+#line 2129 "d-exp.c.tmp"
     break;
 
   case 103:
-
-/* Line 1455 of yacc.c  */
-#line 631 "d-exp.y"
-    { type_stack->push ((yyvsp[(2) - (4)].typed_val_int).val);
+#line 622 "d-exp.y"
+                { type_stack->push ((yyvsp[-2].typed_val_int).val);
 		  type_stack->push (tp_array); }
+#line 2136 "d-exp.c.tmp"
     break;
 
   case 104:
-
-/* Line 1455 of yacc.c  */
-#line 637 "d-exp.y"
-    { (yyval.tval) = (yyvsp[(1) - (1)].tsym).type; }
+#line 628 "d-exp.y"
+                { (yyval.tval) = (yyvsp[0].tsym).type; }
+#line 2142 "d-exp.c.tmp"
     break;
 
 
+#line 2146 "d-exp.c.tmp"
 
-/* Line 1455 of yacc.c  */
-#line 2378 "d-exp.c.tmp"
       default: break;
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  /* 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 ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   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 ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
-#else
-      {
-	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;
-	  }
-      }
-#endif
     }
 
-
-
   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
@@ -2474,14 +2219,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  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,39 +2237,42 @@ 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.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   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 += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+            {
+              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);
+                  YY_ACCESSING_SYMBOL (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.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -2539,6 +2285,7 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -2546,7 +2293,8 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2556,36 +2304,38 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 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);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  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 631 "d-exp.y"
 
 
 /* Return true if the type is aggregate-like.  */
@@ -2593,11 +2343,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).
@@ -2742,7 +2492,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)
@@ -2921,25 +2671,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[] =
   {
-    {"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},
@@ -3029,7 +2779,7 @@ lex_one_token (struct parser_state *par_
       else if (saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -3218,9 +2968,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;
@@ -3437,7 +3187,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);
 
@@ -3517,7 +3267,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);
@@ -3584,7 +3334,10 @@ 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
@@ -3596,4 +3349,3 @@ yyerror (const char *msg)
   error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
 }
 
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-exp.y ./gdb/d-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-exp.y	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/d-exp.y	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* YACC parser for D expressions, for GDB.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -52,6 +52,7 @@
 #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 +78,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 +194,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 +262,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 +399,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 +425,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:
@@ -427,28 +452,24 @@ PrimaryExpression:
 		    {
 		      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 +483,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);
@@ -477,89 +497,64 @@ PrimaryExpression:
 				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 ());
+			      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 +603,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 +635,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 +784,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)
@@ -972,25 +963,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[] =
   {
-    {"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},
@@ -1080,7 +1071,7 @@ lex_one_token (struct parser_state *par_
       else if (saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -1269,9 +1260,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;
@@ -1488,7 +1479,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);
 
@@ -1568,7 +1559,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);
@@ -1635,7 +1626,10 @@ 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dicos-tdep.c ./gdb/dicos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dicos-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dicos-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent, architecture-independent code for DICOS, for GDB.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dicos-tdep.h ./gdb/dicos-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dicos-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dicos-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent, architecture-independent code for DICOS, for GDB.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dictionary.c ./gdb/dictionary.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dictionary.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dictionary.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Routines for name->symbol lookups in GDB.
    
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Contributed by David Carlton <carlton@bactrian.org> and by Kealia,
    Inc.
@@ -584,7 +584,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 +612,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 +640,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;
@@ -719,7 +719,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 +761,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 +835,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 +935,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]);
 	}
     }
@@ -1116,13 +1123,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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dictionary.h ./gdb/dictionary.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dictionary.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dictionary.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Routines for name->symbol lookups in GDB.
    
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Contributed by David Carlton <carlton@bactrian.org> and by Kealia,
    Inc.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/.dir-locals.el ./gdb/.dir-locals.el
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/.dir-locals.el	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/.dir-locals.el	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 ;; Emacs settings.
-;; Copyright (C) 2012-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disable-implicit-rules.mk ./gdb/disable-implicit-rules.mk
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disable-implicit-rules.mk	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/disable-implicit-rules.mk	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020 Free Software Foundation, Inc.
+# Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disasm.c ./gdb/disasm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disasm.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/disasm.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Disassemble support for GDB.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -176,14 +176,14 @@ 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;
+	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 +238,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.  */
@@ -460,7 +460,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 ();
@@ -781,6 +781,11 @@ gdb_disassembler::gdb_disassembler (stru
   disassemble_init_for_target (&m_di);
 }
 
+gdb_disassembler::~gdb_disassembler ()
+{
+  disassemble_free_target (&m_di);
+}
+
 int
 gdb_disassembler::print_insn (CORE_ADDR memaddr,
 			      int *branch_delay_insns)
@@ -908,7 +913,9 @@ gdb_buffered_insn_length (struct gdbarch
   gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr,
 				     &disassembler_options_holder);
 
-  return gdbarch_print_insn (gdbarch, addr, &di);
+  int result = gdbarch_print_insn (gdbarch, addr, &di);
+  disassemble_free_target (&di);
+  return result;
 }
 
 char *
@@ -1128,14 +1135,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 +1150,5 @@ 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);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disasm.h ./gdb/disasm.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disasm.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/disasm.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Disassemble support for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -47,6 +47,10 @@ public:
     : gdb_disassembler (gdbarch, file, dis_asm_read_memory)
   {}
 
+  ~gdb_disassembler ();
+
+  DISABLE_COPY_AND_ASSIGN (gdb_disassembler);
+
   int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL);
 
   /* Return the gdbarch of gdb_disassembler.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disasm-selftests.c ./gdb/disasm-selftests.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/disasm-selftests.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/disasm-selftests.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Self tests for disassembler for GDB, the GNU debugger.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,8 +19,6 @@
 
 #include "defs.h"
 #include "disasm.h"
-
-#if GDB_SELF_TEST
 #include "gdbsupport/selftest.h"
 #include "selftest-arch.h"
 #include "gdbarch.h"
@@ -71,11 +69,6 @@ print_one_insn_test (struct gdbarch *gdb
       insn = 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:
@@ -88,6 +81,11 @@ print_one_insn_test (struct gdbarch *gdb
 	len = bplen;
       }
       break;
+    case bfd_arch_arc:
+      /* PR 21003 */
+      if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_arc_arc601)
+	return;
+      /* fall through */
     default:
       {
 	/* Test disassemble breakpoint instruction.  */
@@ -208,15 +206,13 @@ 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
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/displaced-stepping.c ./gdb/displaced-stepping.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/displaced-stepping.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/displaced-stepping.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,305 @@
+/* Displaced stepping related things.
+
+   Copyright (C) 2020-2021 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)
+{
+  fprintf_filtered (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);
+  const address_space *aspace = regcache->aspace ();
+  gdbarch *arch = regcache->arch ();
+  ULONGEST len = gdbarch_max_insn_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 (aspace, 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),
+			  displaced_step_dump_bytes
+			  (buffer->saved_copy.data (), len).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;
+    }
+
+  /* Resume execution at the copy.  */
+  regcache_write_pc (regcache, buffer->addr);
+
+  /* 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);
+
+  /* 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,
+						  gdb_signal signal)
+{
+  if (signal != GDB_SIGNAL_TRAP)
+    return false;
+
+  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,
+				gdb_signal sig)
+{
+  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_max_insn_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",
+			  target_pid_to_str (thread->ptid).c_str (),
+			  paddress (arch, buffer->addr));
+
+  regcache *rc = get_thread_regcache (thread);
+
+  bool instruction_executed_successfully
+    = displaced_step_instruction_executed_successfully (arch, sig);
+
+  if (instruction_executed_successfully)
+    {
+      gdbarch_displaced_step_fixup (arch, copy_insn_closure.get (),
+				    buffer->original_pc,
+				    buffer->addr, rc);
+      return DISPLACED_STEP_FINISH_STATUS_OK;
+    }
+  else
+    {
+      /* Since the instruction didn't complete, all we can do is relocate the
+	 PC.  */
+      CORE_ADDR pc = regcache_read_pc (rc);
+      pc = buffer->original_pc + (pc - buffer->addr);
+      regcache_write_pc (rc, pc);
+      return 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)
+    {
+      if (addr == buffer.addr)
+	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_max_insn_length (arch);
+
+      write_memory_ptid (ptid, buffer.addr, buffer.saved_copy.data (), len);
+
+      displaced_debug_printf ("restored in ptid %s %s",
+			      target_pid_to_str (ptid).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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/displaced-stepping.h ./gdb/displaced-stepping.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/displaced-stepping.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/displaced-stepping.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,210 @@
+/* Displaced stepping related things.
+
+   Copyright (C) 2020-2021 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,
+				       gdb_signal sig);
+
+  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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-lang.c ./gdb/d-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-lang.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/d-lang.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* D language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 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";
@@ -56,204 +57,132 @@ d_demangle (const char *symbol, int opti
   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,
+				char **demangled) const override
+  {
+    *demangled = d_demangle (mangled, 0);
+    return *demangled != NULL;
+  }
+
+  /* See language.h.  */
+
+  char *demangle_symbol (const char *mangled, int options) const override
+  {
+    return d_demangle (mangled, options);
+  }
+
+  /* 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, 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_enum 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;
+/* Single instance of the D language class.  */
 
-  lai->bool_type_symbol = "bool";
-  lai->bool_type_default = builtin->builtin_bool;
-}
-
-static const char *d_extensions[] =
-{
-  ".d", NULL
-};
-
-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.  */
 
@@ -298,10 +227,13 @@ build_d_types (struct gdbarch *gdbarch)
     = arch_float_type (gdbarch, 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
@@ -314,14 +246,11 @@ build_d_types (struct gdbarch *gdbarch)
     = arch_float_type (gdbarch, 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
@@ -344,8 +273,9 @@ builtin_d_type (struct gdbarch *gdbarch)
   return (const struct builtin_d_type *) gdbarch_data (gdbarch, d_type_data);
 }
 
+void _initialize_d_language ();
 void
-_initialize_d_language (void)
+_initialize_d_language ()
 {
   d_type_data = gdbarch_data_register_post_init (build_d_types);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-lang.h ./gdb/d-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-lang.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/d-lang.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* D language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -76,12 +76,10 @@ extern struct block_symbol d_lookup_symb
 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-namespace.c ./gdb/d-namespace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-namespace.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/d-namespace.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Helper routines for D support in GDB.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -131,7 +131,7 @@ d_lookup_symbol (const struct language_d
 	    return {};
 
 	  type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol)));
-	  classname = TYPE_NAME (type);
+	  classname = type->name ();
 	  nested = name;
 	}
       else
@@ -308,7 +308,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:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/agentexpr.texi ./gdb/doc/agentexpr.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/agentexpr.texi	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/agentexpr.texi	2021-12-16 01:57:39.000000000 +0000
@@ -7,7 +7,7 @@
 
 @c This file is part of the GDB manual.
 @c
-@c Copyright (C) 2003-2020 Free Software Foundation, Inc.
+@c Copyright (C) 2003--2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/all-cfg.texi ./gdb/doc/all-cfg.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/all-cfg.texi	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/all-cfg.texi	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 @c GDB MANUAL configuration file.  
 @c
-@c Copyright (C) 1993-2020 Free Software Foundation, Inc.
+@c Copyright (C) 1993--2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/annotate.info ./gdb/doc/annotate.info
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/annotate.info	2020-03-07 02:11:41.000000000 +0000
+++ ./gdb/doc/annotate.info	2021-12-16 02:00:34.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1994-2021 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-2020 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/annotate.texinfo ./gdb/doc/annotate.texinfo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/annotate.texinfo	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/annotate.texinfo	2021-12-16 01:57:39.000000000 +0000
@@ -27,7 +27,7 @@
 @c cost.  Having a smaller cheaper manual helps the GNU Press with its sales.
 
 @copying
-Copyright @copyright{} 1994-2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1994--2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/ChangeLog ./gdb/doc/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/ChangeLog	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/ChangeLog	2021-12-16 01:57:39.000000000 +0000
@@ -1,11 +1,641 @@
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
+2021-08-12  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.texinfo (Output Styling): Mention Pygments.
+
+2021-07-26  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	PR gdb/28076
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Mention clearing
+	the condition in the -break-condition command.
+
+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.
 
-2019-12-15  Christian Biesinger  <cbiesinger@google.com>
+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>
 
-	* gdb.texinfo (Maintenance Commands): Update documentation for
-	maint set worker-threads to say the default is 0.
+	* 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>
 
@@ -884,6 +1514,10 @@
 	* 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:
@@ -1287,6 +1921,18 @@
 	(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.
@@ -1302,6 +1948,11 @@
 	* 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_*,
@@ -1935,6 +2586,15 @@
 	* 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"
@@ -2337,6 +2997,11 @@
 
 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.
@@ -2456,6 +3121,10 @@
 	* 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
@@ -3655,6 +4324,12 @@
 
 	* 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.
@@ -6118,6 +6793,10 @@
 	* 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
@@ -7288,6 +7967,11 @@
 	* 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>
 
@@ -7545,6 +8229,11 @@
 	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
@@ -7820,6 +8509,10 @@
 	* 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.
@@ -7831,6 +8524,10 @@
 	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)
@@ -8279,6 +8976,11 @@
 	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,
@@ -8427,6 +9129,10 @@
 
 	* 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.
@@ -9026,6 +9732,10 @@
 	* 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.
@@ -9195,6 +9905,11 @@
 	* 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
@@ -10169,6 +10884,10 @@
 	* 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
@@ -10288,6 +11007,10 @@
 
 	* 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.
@@ -10487,6 +11210,10 @@
 	* 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.
@@ -10623,6 +11350,11 @@
 	* 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.
@@ -10662,6 +11394,11 @@
 	'_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.
@@ -11489,6 +12226,10 @@ Thu Oct 14 21:17:17 1999  Andrew Cagney
 
 	* 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>:
@@ -11593,6 +12334,10 @@ Wed Aug 11 13:18:14 1999  Andrew Cagney
 	* 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.
@@ -11914,6 +12659,11 @@ Mon Dec  9 12:23:32 1996  Roland Pesch
 
 	* 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
@@ -12020,6 +12770,10 @@ Wed Sep 20 13:14:10 1995  Ian Lance Tayl
 	* 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.
@@ -12872,6 +13626,17 @@ Thu Apr 29 09:36:25 1993  Jim Kingdon  (
 
 	* 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):
@@ -12928,6 +13693,10 @@ Fri Apr  2 16:55:13 1993  Jim Kingdon  (
 
 	* 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
@@ -12958,6 +13727,11 @@ Tue Mar 23 16:03:24 1993  Roland H. Pesc
 
 	* 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
@@ -12995,6 +13769,10 @@ Wed Feb 10 23:59:19 1993  John Gilmore
 
 	* 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
@@ -13033,6 +13811,18 @@ Mon Feb  1 15:35:47 1993  Roland H. Pesc
 	* 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
@@ -13042,6 +13832,10 @@ Mon Nov  9 23:57:02 1992  John Gilmore
 
 	* 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.
@@ -13050,11 +13844,38 @@ Fri Oct 23 00:41:21 1992  John Gilmore
 
 	* 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.
@@ -13067,6 +13888,19 @@ Tue Sep 15 02:57:09 1992  John Gilmore
 
 	* 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.
@@ -13076,6 +13910,15 @@ Wed Sep  9 16:52:06 1992  John Gilmore
 	* 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
@@ -13124,6 +13967,10 @@ Fri Aug 14 21:08:47 1992  John Gilmore
 
 	* 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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-base.in ./gdb/doc/Doxyfile-base.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-base.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/Doxyfile-base.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 Free Software Foundation, Inc.
+# Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-gdb-api.in ./gdb/doc/Doxyfile-gdb-api.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-gdb-api.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/Doxyfile-gdb-api.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 Free Software Foundation, Inc.
+# Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-gdbserver.in ./gdb/doc/Doxyfile-gdbserver.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-gdbserver.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/Doxyfile-gdbserver.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 Free Software Foundation, Inc.
+# Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-gdb-xref.in ./gdb/doc/Doxyfile-gdb-xref.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Doxyfile-gdb-xref.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/Doxyfile-gdb-xref.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 Free Software Foundation, Inc.
+# Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/doxy-index.in ./gdb/doc/doxy-index.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/doxy-index.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/doxy-index.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gcore.1 ./gdb/doc/gcore.1
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gcore.1	2020-03-07 02:11:42.000000000 +0000
+++ ./gdb/doc/gcore.1	2021-12-16 02:00:35.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 "2020-03-07" "gdb-9.1.90.20200307-git" "GNU Development Tools"
+.TH GCORE 1 "2021-12-16" "gdb-11.1.90.20211216-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\-2020 Free Software Foundation, Inc.
+Copyright (c) 1988\-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.1 ./gdb/doc/gdb.1
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.1	2020-03-07 02:11:42.000000000 +0000
+++ ./gdb/doc/gdb.1	2021-12-16 02:00:34.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 "2020-03-07" "gdb-9.1.90.20200307-git" "GNU Development Tools"
+.TH GDB 1 "2021-12-16" "gdb-11.1.90.20211216-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
@@ -159,7 +168,7 @@ 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
@@ -225,13 +234,13 @@ 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.
+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"
@@ -307,14 +316,17 @@ Execute given \s-1GDB\s0 \fIcommand\fR.
 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.
+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.
+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
@@ -377,11 +389,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\-2020 Free Software Foundation, Inc.
+Copyright (c) 1988\-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb-add-index.1 ./gdb/doc/gdb-add-index.1
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb-add-index.1	2020-03-07 02:11:42.000000000 +0000
+++ ./gdb/doc/gdb-add-index.1	2021-12-16 02:00:35.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 "2020-03-07" "gdb-9.1.90.20200307-git" "GNU Development Tools"
+.TH GDB-ADD-INDEX 1 "2021-12-16" "gdb-11.1.90.20211216-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\-2020 Free Software Foundation, Inc.
+Copyright (c) 1988\-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info ./gdb/doc/gdb.info
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info	2020-03-07 02:11:39.000000000 +0000
+++ ./gdb/doc/gdb.info	2021-12-16 02:00:33.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,790 +38,811 @@ developing GNU and promoting software fr
 
 
 Indirect:
-gdb.info-1: 1716
-gdb.info-2: 302441
-gdb.info-3: 602089
-gdb.info-4: 902042
-gdb.info-5: 1212847
-gdb.info-6: 1511800
-gdb.info-7: 1841199
-gdb.info-8: 2230505
+gdb.info-1: 1717
+gdb.info-2: 305947
+gdb.info-3: 603230
+gdb.info-4: 904435
+gdb.info-5: 1202955
+gdb.info-6: 1501796
+gdb.info-7: 1805020
+gdb.info-8: 2127251
 
 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: Help66655
-Node: Running73169
-Node: Compilation74398
-Node: Starting76477
-Ref: set exec-wrapper82267
-Ref: set startup-with-shell83356
-Ref: set auto-connect-native-target84417
-Node: Arguments88813
-Node: Environment90082
-Ref: set environment91964
-Ref: unset environment93146
-Node: Working Directory94152
-Ref: set cwd command94724
-Ref: cd command95664
-Node: Input/Output96358
-Node: Attach98418
-Node: Kill Process100884
-Node: Inferiors and Programs101865
-Node: Threads109597
-Ref: thread numbers111708
-Ref: thread ID lists112598
-Ref: global thread numbers113638
-Ref: thread apply all117490
-Ref: set libthread-db-search-path122329
-Node: Forks124383
-Node: Checkpoint/Restart130901
-Ref: Checkpoint/Restart-Footnote-1135429
-Node: Stopping135464
-Node: Breakpoints136727
-Node: Set Breaks139984
-Node: Set Watchpoints158943
-Node: Set Catchpoints168325
-Ref: catch syscall173823
-Node: Delete Breaks181588
-Node: Disabling183524
-Node: Conditions186904
-Node: Break Commands192551
-Node: Dynamic Printf195771
-Node: Save Breakpoints200075
-Node: Static Probe Points201250
-Ref: Static Probe Points-Footnote-1205428
-Ref: Static Probe Points-Footnote-2205588
-Node: Error in Breakpoints205728
-Node: Breakpoint-related Warnings206464
-Node: Continuing and Stepping208791
-Ref: range stepping218571
-Node: Skipping Over Functions and Files219651
-Node: Signals225500
-Ref: stepping and signal handlers229934
-Ref: stepping into signal handlers230730
-Ref: extra signal information231963
-Node: Thread Stops234429
-Node: All-Stop Mode235528
-Node: Non-Stop Mode239495
-Node: Background Execution242908
-Node: Thread-Specific Breakpoints245124
-Node: Interrupted System Calls247140
-Node: Observer Mode248654
-Node: Reverse Execution252090
-Ref: Reverse Execution-Footnote-1257008
-Ref: Reverse Execution-Footnote-2257635
-Node: Process Record and Replay257685
-Node: Stack279074
-Node: Frames280691
-Node: Backtrace283029
-Ref: backtrace-command283366
-Ref: set backtrace past-main289813
-Ref: set backtrace past-entry290141
-Ref: set backtrace limit290708
-Ref: Backtrace-Footnote-1291332
-Node: Selection291520
-Node: Frame Info296303
-Node: Frame Apply302441
-Ref: frame apply302627
-Node: Frame Filter Management306860
-Ref: disable frame-filter all307388
-Node: Source311696
-Node: List312762
-Node: Specify Location315464
-Node: Linespec Locations316085
-Node: Explicit Locations319484
-Node: Address Locations322696
-Node: Edit324447
-Ref: Edit-Footnote-1325923
-Node: Search326158
-Node: Source Path326966
-Ref: set substitute-path335907
-Node: Machine Code338127
-Node: Data348471
-Ref: print options349310
-Node: Expressions359311
-Node: Ambiguous Expressions361414
-Node: Variables364644
-Node: Arrays371242
-Node: Output Formats373773
-Ref: Output Formats-Footnote-1377146
-Node: Memory377303
-Ref: addressable memory unit383488
-Node: Auto Display384982
-Node: Print Settings389524
-Ref: set print address389822
-Ref: set print symbol393484
-Ref: set print array393972
-Ref: set print array-indexes394300
-Ref: set print elements394786
-Ref: set print frame-arguments395451
-Ref: set print raw-frame-arguments397620
-Ref: set print entry-values398036
-Ref: set print frame-info402415
-Ref: set print repeats404081
-Ref: set print max-depth404723
-Ref: set print null-stop406415
-Ref: set print pretty406739
-Ref: set print raw-values407326
-Ref: set print union408343
-Ref: set print object410649
-Ref: set print static-members411443
-Ref: set print vtbl412120
-Node: Pretty Printing412504
-Node: Pretty-Printer Introduction413018
-Node: Pretty-Printer Example414773
-Node: Pretty-Printer Commands415551
-Node: Value History418482
-Node: Convenience Vars420904
-Node: Convenience Funs428546
-Node: Registers437061
-Ref: standard registers438269
-Ref: Registers-Footnote-1443220
-Node: Floating Point Hardware443615
-Node: Vector Unit444147
-Node: OS Information444534
-Ref: linux info os infotypes446558
-Node: Memory Region Attributes451149
-Node: Dump/Restore Files455813
-Node: Core File Generation458216
-Ref: set use-coredump-filter459776
-Ref: set dump-excluded-mappings461224
-Node: Character Sets461506
-Node: Caching Target Data467871
-Ref: Caching Target Data-Footnote-1470599
-Node: Searching Memory470837
-Node: Value Sizes473980
-Node: Optimized Code475632
-Node: Inline Functions477309
-Node: Tail Call Frames479936
-Ref: set debug entry-values482073
-Node: Macros486137
-Ref: Macros-Footnote-1493713
-Node: Tracepoints493866
-Node: Set Tracepoints495928
-Node: Create and Delete Tracepoints498866
-Node: Enable and Disable Tracepoints505214
-Node: Tracepoint Passcounts506454
-Node: Tracepoint Conditions507865
-Node: Trace State Variables509559
-Node: Tracepoint Actions511754
-Node: Listing Tracepoints518537
-Node: Listing Static Tracepoint Markers520239
-Node: Starting and Stopping Trace Experiments522087
-Ref: disconnected tracing523832
-Node: Tracepoint Restrictions528252
-Node: Analyze Collected Data532021
-Node: tfind533327
-Node: tdump537809
-Node: save tracepoints540324
-Node: Tracepoint Variables540820
-Node: Trace Files541948
-Node: Overlays544324
-Node: How Overlays Work545044
-Ref: A code overlay547599
-Node: Overlay Commands551012
-Node: Automatic Overlay Debugging555194
-Node: Overlay Sample Program557333
-Node: Languages559070
-Node: Setting560233
-Node: Filenames561934
-Node: Manually562745
-Node: Automatically563954
-Node: Show565015
-Ref: show language565303
-Node: Checks566337
-Node: Type Checking567342
-Node: Range Checking569171
-Node: Supported Languages571572
-Node: C572909
-Node: C Operators573873
-Node: C Constants578212
-Node: C Plus Plus Expressions581091
-Node: C Defaults584451
-Node: C Checks585119
-Node: Debugging C585679
-Node: Debugging C Plus Plus586163
-Node: Decimal Floating Point591050
-Node: D592320
-Node: Go592578
-Node: Objective-C593672
-Node: Method Names in Commands594135
-Node: The Print Command with Objective-C595826
-Node: OpenCL C596477
-Node: OpenCL C Datatypes596752
-Node: OpenCL C Expressions597127
-Node: OpenCL C Operators597484
-Node: Fortran597716
-Node: Fortran Operators598437
-Node: Fortran Defaults599482
-Node: Special Fortran Commands599867
-Node: Pascal602089
-Node: Rust602600
-Node: Modula-2605687
-Node: M2 Operators606660
-Node: Built-In Func/Proc609658
-Node: M2 Constants612572
-Node: M2 Types614173
-Node: M2 Defaults617391
-Node: Deviations617992
-Node: M2 Checks619093
-Node: M2 Scope619910
-Node: GDB/M2620934
-Node: Ada621847
-Node: Ada Mode Intro623153
-Node: Omissions from Ada624655
-Node: Additions to Ada629010
-Node: Overloading support for Ada632938
-Node: Stopping Before Main Program634578
-Node: Ada Exceptions635125
-Node: Ada Tasks636324
-Node: Ada Tasks and Core Files642815
-Node: Ravenscar Profile643662
-Node: Ada Settings644733
-Node: Ada Glitches646155
-Node: Unsupported Languages650163
-Node: Symbols650853
-Ref: quoting names651456
-Node: Altering682371
-Node: Assignment683409
-Node: Jumping686515
-Node: Signaling688589
-Node: Returning691518
-Node: Calling694869
-Node: Patching700354
-Node: Compiling and Injecting Code701468
-Ref: set debug compile705095
-Ref: set debug compile-cplus-types705345
-Node: GDB Files715366
-Node: Files716155
-Ref: Shared Libraries729872
-Ref: Files-Footnote-1742070
-Node: File Caching742199
-Node: Separate Debug Files743333
-Ref: debug-file-directory746686
-Node: MiniDebugInfo755301
-Node: Index Files757752
-Node: Symbol Errors761923
-Node: Data Files765539
-Node: Targets766495
-Node: Active Targets767975
-Node: Target Commands769049
-Ref: load773438
-Ref: flash-erase774631
-Node: Byte Order774691
-Node: Remote Debugging776130
-Node: Connecting777392
-Ref: --multi Option in Types of Remote Connnections779618
-Ref: Attaching in Types of Remote Connections781033
-Ref: Host and target files781534
-Node: File Transfer790156
-Node: Server791095
-Ref: Running gdbserver792671
-Ref: Attaching to a program794889
-Ref: Other Command-Line Arguments for gdbserver797414
-Ref: Monitor Commands for gdbserver800733
-Ref: Server-Footnote-1806109
-Node: Remote Configuration806229
-Ref: set remotebreak807489
-Ref: set remote hardware-watchpoint-limit808951
-Ref: set remote hardware-breakpoint-limit808951
-Ref: set remote hardware-watchpoint-length-limit809453
-Ref: set remote exec-file809908
-Node: Remote Stub821713
-Node: Stub Contents824608
-Node: Bootstrapping826715
-Node: Debug Session830530
-Node: Configurations832571
-Node: Native833340
-Node: BSD libkvm Interface833909
-Node: Process Information834961
-Node: DJGPP Native840510
-Node: Cygwin Native847064
-Node: Non-debug DLL Symbols851985
-Node: Hurd Native856224
-Node: Darwin861480
-Node: FreeBSD862757
-Node: Embedded OS863477
-Node: Embedded Processors863888
-Node: ARC864878
-Node: ARM865425
-Node: M68K867972
-Node: MicroBlaze868145
-Node: MIPS Embedded869594
-Node: OpenRISC 1000870891
-Node: PowerPC Embedded871797
-Node: AVR875026
-Node: CRIS875398
-Node: Super-H876374
-Node: Architectures877433
-Node: AArch64877829
-Node: i386879402
-Ref: i386-Footnote-1883612
-Node: Alpha883698
-Node: MIPS883831
-Node: HPPA887725
-Node: PowerPC888247
-Node: Nios II888983
-Node: Sparc64889388
-Node: S12Z891756
-Node: Controlling GDB892049
-Node: Prompt892992
-Node: Editing894710
-Node: Command History896020
-Node: Screen Size902042
-Node: Output Styling904058
-Node: Numbers908141
-Node: ABI910123
-Node: Auto-loading913296
-Ref: set auto-load off914671
-Ref: show auto-load915307
-Ref: info auto-load916086
-Node: Init File in the Current Directory919053
-Ref: set auto-load local-gdbinit919628
-Ref: show auto-load local-gdbinit919810
-Ref: info auto-load local-gdbinit919974
-Node: libthread_db.so.1 file920122
-Ref: set auto-load libthread-db921061
-Ref: show auto-load libthread-db921192
-Ref: info auto-load libthread-db921329
-Node: Auto-loading safe path921513
-Ref: set auto-load safe-path922819
-Ref: show auto-load safe-path923558
-Ref: add-auto-load-safe-path923681
-Node: Auto-loading verbose mode926583
-Ref: set debug auto-load927746
-Ref: show debug auto-load927847
-Node: Messages/Warnings927969
-Ref: confirmation requests929403
-Node: Debugging Output930607
-Node: Other Misc Settings941024
-Node: Extending GDB942048
-Node: Sequences943901
-Node: Define944562
-Node: Hooks950047
-Node: Command Files952413
-Node: Output957486
-Ref: eval962288
-Node: Auto-loading sequences962450
-Ref: set auto-load gdb-scripts962945
-Ref: show auto-load gdb-scripts963069
-Ref: info auto-load gdb-scripts963199
-Node: Python963430
-Node: Python Commands964716
-Node: Python API966830
-Node: Basic Python969435
-Ref: prompt_hook980472
-Node: Exception Handling981070
-Node: Values From Inferior983972
-Node: Types In Python1001308
-Node: Pretty Printing API1011300
-Node: Selecting Pretty-Printers1015743
-Node: Writing a Pretty-Printer1018470
-Node: Type Printing API1023792
-Node: Frame Filter API1026408
-Node: Frame Decorator API1033720
-Ref: frame_args1037461
-Node: Writing a Frame Filter1040791
-Node: Unwinding Frames in Python1052265
-Node: Xmethods In Python1059904
-Node: Xmethod API1062800
-Node: Writing an Xmethod1066612
-Node: Inferiors In Python1072447
-Node: Events In Python1076206
-Node: Threads In Python1085414
-Node: Recordings In Python1088758
-Node: Commands In Python1096092
-Node: Parameters In Python1105505
-Node: Functions In Python1112443
-Node: Progspaces In Python1114660
-Node: Objfiles In Python1119565
-Node: Frames In Python1126227
-Node: Blocks In Python1133233
-Node: Symbols In Python1137900
-Node: Symbol Tables In Python1147363
-Node: Line Tables In Python1150584
-Node: Breakpoints In Python1153421
-Ref: python_breakpoint_thread1159744
-Node: Finish Breakpoints in Python1162777
-Node: Lazy Strings In Python1164883
-Node: Architectures In Python1167111
-Node: Python Auto-loading1169300
-Ref: set auto-load python-scripts1169929
-Ref: show auto-load python-scripts1170029
-Ref: info auto-load python-scripts1170135
-Node: Python modules1171269
-Node: gdb.printing1171655
-Node: gdb.types1173082
-Node: gdb.prompt1176094
-Node: Guile1177690
-Node: Guile Introduction1178349
-Node: Guile Commands1179220
-Node: Guile API1181074
-Node: Basic Guile1183071
-Node: Guile Configuration1188753
-Node: GDB Scheme Data Types1189729
-Node: Guile Exception Handling1191561
-Node: Values From Inferior In Guile1195595
-Node: Arithmetic In Guile1212847
-Node: Types In Guile1214478
-Ref: Fields of a type in Guile1222419
-Node: Guile Pretty Printing API1223807
-Node: Selecting Guile Pretty-Printers1229536
-Node: Writing a Guile Pretty-Printer1231912
-Node: Commands In Guile1237097
-Node: Parameters In Guile1247877
-Ref: Parameters In Guile-Footnote-11254758
-Node: Progspaces In Guile1254874
-Node: Objfiles In Guile1257462
-Node: Frames In Guile1259743
-Node: Blocks In Guile1266321
-Node: Symbols In Guile1271129
-Node: Symbol Tables In Guile1278464
-Node: Breakpoints In Guile1281427
-Node: Lazy Strings In Guile1291688
-Node: Architectures In Guile1293979
-Node: Disassembly In Guile1298286
-Node: I/O Ports in Guile1301488
-Node: Memory Ports in Guile1302044
-Node: Iterators In Guile1305310
-Node: Guile Auto-loading1309599
-Ref: set auto-load guile-scripts1310222
-Ref: show auto-load guile-scripts1310320
-Ref: info auto-load guile-scripts1310424
-Node: Guile Modules1311383
-Node: Guile Printing Module1311705
-Node: Guile Types Module1312524
-Node: Auto-loading extensions1313817
-Node: objfile-gdbdotext file1315015
-Ref: set auto-load scripts-directory1316451
-Ref: with-auto-load-dir1316827
-Ref: show auto-load scripts-directory1317645
-Ref: add-auto-load-scripts-directory1317725
-Node: dotdebug_gdb_scripts section1318201
-Node: Which flavor to choose?1321951
-Node: Multiple Extension Languages1323772
-Node: Aliases1324836
-Node: Interpreters1327701
-Node: TUI1330852
-Node: TUI Overview1331850
-Node: TUI Keys1334283
-Node: TUI Single Key Mode1337006
-Node: TUI Commands1338189
-Node: TUI Configuration1341956
-Node: Emacs1343978
-Node: GDB/MI1349415
-Node: GDB/MI General Design1351389
-Node: Context management1353909
-Node: Asynchronous and non-stop modes1357696
-Node: Thread groups1360669
-Node: GDB/MI Command Syntax1362947
-Node: GDB/MI Input Syntax1363190
-Node: GDB/MI Output Syntax1364740
-Node: GDB/MI Compatibility with CLI1368325
-Node: GDB/MI Development and Front Ends1369062
-Node: GDB/MI Output Records1372581
-Node: GDB/MI Result Records1372987
-Node: GDB/MI Stream Records1374337
-Node: GDB/MI Async Records1375602
-Node: GDB/MI Breakpoint Information1386039
-Node: GDB/MI Frame Information1391675
-Node: GDB/MI Thread Information1392957
-Node: GDB/MI Ada Exception Information1394427
-Node: GDB/MI Simple Examples1394977
-Node: GDB/MI Command Description Format1397213
-Node: GDB/MI Breakpoint Commands1398093
-Ref: -break-insert1405201
-Node: GDB/MI Catchpoint Commands1418775
-Node: Shared Library GDB/MI Catchpoint Commands1419188
-Node: Ada Exception GDB/MI Catchpoint Commands1420846
-Node: C++ Exception GDB/MI Catchpoint Commands1424396
-Node: GDB/MI Program Context1428412
-Node: GDB/MI Thread Commands1432680
-Node: GDB/MI Ada Tasking Commands1435981
-Node: GDB/MI Program Execution1438253
-Node: GDB/MI Stack Manipulation1450520
-Ref: -stack-list-arguments1452444
-Ref: -stack-list-frames1456274
-Ref: -stack-list-locals1460603
-Ref: -stack-list-variables1462093
-Node: GDB/MI Variable Objects1463627
-Ref: -var-set-format1473593
-Ref: -var-list-children1474974
-Ref: -var-update1483782
-Ref: -var-set-frozen1486780
-Ref: -var-set-update-range1487577
-Ref: -var-set-visualizer1488106
-Node: GDB/MI Data Manipulation1489596
-Node: GDB/MI Tracepoint Commands1511800
-Node: GDB/MI Symbol Query1523591
-Ref: -symbol-info-functions1523860
-Ref: -symbol-info-module-functions1528373
-Ref: -symbol-info-module-variables1531353
-Ref: -symbol-info-modules1535070
-Ref: -symbol-info-types1536974
-Ref: -symbol-info-variables1538967
-Node: GDB/MI File Commands1543991
-Node: GDB/MI Target Manipulation1548425
-Node: GDB/MI File Transfer Commands1555083
-Node: GDB/MI Ada Exceptions Commands1556406
-Node: GDB/MI Support Commands1557759
-Node: GDB/MI Miscellaneous Commands1562478
-Ref: -interpreter-exec1572831
-Node: Annotations1576803
-Node: Annotations Overview1577722
-Node: Server Prefix1580185
-Node: Prompting1580919
-Node: Errors1582436
-Node: Invalidation1583332
-Node: Annotations for Running1583811
-Node: Source Annotations1585345
-Node: JIT Interface1586274
-Node: Declarations1588074
-Node: Registering Code1589461
-Node: Unregistering Code1590433
-Node: Custom Debug Info1591060
-Node: Using JIT Debug Info Readers1592356
-Node: Writing JIT Debug Info Readers1593368
-Node: In-Process Agent1595563
-Ref: Control Agent1597506
-Node: In-Process Agent Protocol1598373
-Node: IPA Protocol Objects1599164
-Ref: agent expression object1600162
-Ref: tracepoint action object1600367
-Ref: tracepoint object1600447
-Node: IPA Protocol Commands1602977
-Node: GDB Bugs1604447
-Node: Bug Criteria1605179
-Node: Bug Reporting1606056
-Node: Command Line Editing1613885
-Node: Introduction and Notation1614537
-Node: Readline Interaction1616158
-Node: Readline Bare Essentials1617347
-Node: Readline Movement Commands1619128
-Node: Readline Killing Commands1620086
-Node: Readline Arguments1622002
-Node: Searching1623044
-Node: Readline Init File1625194
-Node: Readline Init File Syntax1626345
-Node: Conditional Init Constructs1646501
-Node: Sample Init File1650695
-Node: Bindable Readline Commands1653810
-Node: Commands For Moving1654862
-Node: Commands For History1656426
-Node: Commands For Text1660688
-Node: Commands For Killing1664127
-Node: Numeric Arguments1666291
-Node: Commands For Completion1667428
-Node: Keyboard Macros1669394
-Node: Miscellaneous Commands1670079
-Node: Readline vi Mode1673998
-Node: Using History Interactively1674908
-Node: History Interaction1675423
-Node: Event Designators1677319
-Node: Word Designators1678456
-Node: Modifiers1680091
-Node: In Memoriam1681312
-Node: Formatting Documentation1682195
-Ref: Formatting Documentation-Footnote-11685571
-Node: Installing GDB1685667
-Node: Requirements1686239
-Ref: Expat1686940
-Ref: MPFR1690233
-Node: Running Configure1691854
-Node: Separate Objdir1694725
-Node: Config Names1697699
-Node: Configure Options1699176
-Node: System-wide configuration1708527
-Node: System-wide Configuration Scripts1711064
-Node: Maintenance Commands1712248
-Ref: maint info breakpoints1713903
-Ref: maint check libthread-db1722368
-Node: Remote Protocol1739043
-Node: Overview1739735
-Ref: Binary Data1742280
-Node: Packets1744805
-Ref: thread-id syntax1745705
-Ref: extended mode1747150
-Ref: ? packet1747408
-Ref: bc1748874
-Ref: bs1749084
-Ref: read registers packet1750701
-Ref: cycle step packet1752556
-Ref: write register packet1755267
-Ref: step with signal packet1756246
-Ref: vCont packet1757722
-Ref: vCtrlC packet1760956
-Ref: vKill packet1763374
-Ref: X packet1764908
-Ref: insert breakpoint or watchpoint packet1765277
-Node: Stop Reply Packets1769603
-Ref: swbreak stop reason1772854
-Ref: thread create event1776451
-Ref: thread exit event1777654
-Node: General Query Packets1779863
-Ref: qCRC packet1782693
-Ref: QEnvironmentHexEncoded1785846
-Ref: QEnvironmentUnset1787076
-Ref: QEnvironmentReset1788020
-Ref: QSetWorkingDir packet1788964
-Ref: QNonStop1795415
-Ref: QCatchSyscalls1796091
-Ref: QPassSignals1797628
-Ref: QProgramSignals1798835
-Ref: QThreadEvents1800402
-Ref: qSearch memory1802420
-Ref: QStartNoAckMode1802928
-Ref: qSupported1803460
-Ref: multiprocess extensions1818980
-Ref: install tracepoint in tracing1821010
-Ref: qXfer read1825533
-Ref: qXfer auxiliary vector read1827140
-Ref: qXfer btrace read1827488
-Ref: qXfer btrace-conf read1828553
-Ref: qXfer executable filename read1828904
-Ref: qXfer target description read1829519
-Ref: qXfer library list read1829953
-Ref: qXfer svr4 library list read1830609
-Ref: qXfer memory map read1832462
-Ref: qXfer sdata read1832849
-Ref: qXfer siginfo read1833315
-Ref: qXfer threads read1833711
-Ref: qXfer traceframe info read1834114
-Ref: qXfer unwind info block1834532
-Ref: qXfer fdpic loadmap read1834766
-Ref: qXfer osdata read1835182
-Ref: qXfer write1835336
-Ref: qXfer siginfo write1836428
-Ref: General Query Packets-Footnote-11839156
-Node: Architecture-Specific Protocol Details1841199
-Node: ARM-Specific Protocol Details1841708
-Node: ARM Breakpoint Kinds1841956
-Node: MIPS-Specific Protocol Details1842287
-Node: MIPS Register packet Format1842570
-Node: MIPS Breakpoint Kinds1843497
-Node: Tracepoint Packets1843915
-Ref: QTEnable1853229
-Ref: QTDisable1853425
-Ref: qTfSTM1858962
-Ref: qTsSTM1858962
-Ref: qTSTMat1860039
-Ref: QTBuffer-size1861190
-Node: Host I/O Packets1863163
-Node: Interrupts1868744
-Ref: interrupting remote targets1868888
-Node: Notification Packets1871056
-Node: Remote Non-Stop1876481
-Node: Packet Acknowledgment1879597
-Node: Examples1881712
-Node: File-I/O Remote Protocol Extension1882306
-Node: File-I/O Overview1882768
-Node: Protocol Basics1884967
-Node: The F Request Packet1887196
-Node: The F Reply Packet1888097
-Node: The Ctrl-C Message1889015
-Node: Console I/O1890641
-Node: List of Supported Calls1891857
-Node: open1892219
-Node: close1894727
-Node: read1895110
-Node: write1895719
-Node: lseek1896490
-Node: rename1897374
-Node: unlink1898781
-Node: stat/fstat1899728
-Node: gettimeofday1900621
-Node: isatty1901057
-Node: system1901653
-Node: Protocol-specific Representation of Datatypes1903195
-Node: Integral Datatypes1903572
-Node: Pointer Values1904379
-Node: Memory Transfer1905083
-Node: struct stat1905703
-Node: struct timeval1907905
-Node: Constants1908422
-Node: Open Flags1908871
-Node: mode_t Values1909212
-Node: Errno Values1909704
-Node: Lseek Flags1910514
-Node: Limits1910699
-Node: File-I/O Examples1911059
-Node: Library List Format1912147
-Node: Library List Format for SVR4 Targets1914929
-Node: Memory Map Format1917396
-Node: Thread List Format1919920
-Node: Traceframe Info Format1920924
-Node: Branch Trace Format1922610
-Node: Branch Trace Configuration Format1924310
-Node: Agent Expressions1925484
-Node: General Bytecode Design1928305
-Node: Bytecode Descriptions1933099
-Node: Using Agent Expressions1946566
-Node: Varying Target Capabilities1948543
-Node: Rationale1949704
-Node: Target Descriptions1957093
-Node: Retrieving Descriptions1959036
-Node: Target Description Format1960121
-Node: Predefined Target Types1969996
-Node: Enum Target Types1971441
-Node: Standard Target Features1972436
-Node: AArch64 Features1974436
-Node: ARC Features1975142
-Node: ARM Features1977203
-Node: i386 Features1978717
-Node: MicroBlaze Features1980932
-Node: MIPS Features1981509
-Node: M68K Features1982700
-Node: NDS32 Features1983361
-Node: Nios II Features1984385
-Node: OpenRISC 1000 Features1984790
-Node: PowerPC Features1985156
-Node: RISC-V Features1989126
-Node: RX Features1990816
-Node: S/390 and System z Features1991178
-Node: Sparc Features1993318
-Node: TIC6x Features1994223
-Node: Operating System Information1994772
-Node: Process list1995608
-Node: Trace File Format1996671
-Node: Index Section Format1999885
-Node: Man Pages2007811
-Node: gdb man2008281
-Node: gdbserver man2014255
-Node: gcore man2021652
-Node: gdbinit man2022774
-Node: gdb-add-index man2023967
-Ref: gdb-add-index2024076
-Node: Copying2024950
-Node: GNU Free Documentation License2062511
-Node: Concept Index2087658
-Node: Command and Variable Index2230505
+Node: Top1717
+Node: Summary5164
+Node: Free Software7025
+Node: Free Documentation7765
+Node: Contributors12699
+Node: Sample Session21730
+Node: Invocation28583
+Node: Invoking GDB29126
+Node: File Options31521
+Ref: --readnever34924
+Node: Mode Options35398
+Ref: -nx35625
+Ref: -nh35737
+Node: Startup42512
+Ref: Option -init-eval-command43737
+Node: Initialization Files45513
+Ref: System Wide Init Files49120
+Ref: Home Directory Init File50401
+Ref: Init File in the Current Directory during Startup51564
+Ref: Initialization Files-Footnote-152287
+Ref: Initialization Files-Footnote-252396
+Node: Quitting GDB52505
+Node: Shell Commands53402
+Ref: pipe54394
+Node: Logging Output55908
+Node: Commands57034
+Node: Command Syntax57795
+Node: Command Settings59967
+Node: Completion62980
+Ref: Completion-Footnote-169920
+Node: Command Options70080
+Node: Help72432
+Node: Running79493
+Node: Compilation80746
+Node: Starting82825
+Ref: set exec-wrapper88615
+Ref: set startup-with-shell89704
+Ref: set auto-connect-native-target90765
+Node: Arguments95236
+Node: Environment96505
+Ref: set environment98387
+Ref: unset environment99569
+Node: Working Directory100575
+Ref: set cwd command101147
+Ref: cd command102087
+Node: Input/Output102781
+Node: Attach104841
+Ref: set exec-file-mismatch106058
+Node: Kill Process108194
+Node: Inferiors Connections and Programs109187
+Node: Threads119237
+Ref: thread numbers121360
+Ref: thread ID lists122250
+Ref: global thread numbers123290
+Ref: thread apply all127146
+Ref: set libthread-db-search-path131996
+Node: Forks134050
+Node: Checkpoint/Restart140616
+Ref: Checkpoint/Restart-Footnote-1145144
+Node: Stopping145179
+Node: Breakpoints146442
+Node: Set Breaks149699
+Node: Set Watchpoints171382
+Node: Set Catchpoints180764
+Ref: catch syscall186262
+Node: Delete Breaks194027
+Node: Disabling195963
+Node: Conditions199343
+Node: Break Commands205252
+Node: Dynamic Printf208472
+Node: Save Breakpoints212776
+Node: Static Probe Points213951
+Ref: Static Probe Points-Footnote-1218129
+Ref: Static Probe Points-Footnote-2218289
+Node: Error in Breakpoints218429
+Node: Breakpoint-related Warnings219165
+Node: Continuing and Stepping221492
+Ref: range stepping231272
+Node: Skipping Over Functions and Files232352
+Node: Signals238201
+Ref: stepping and signal handlers242635
+Ref: stepping into signal handlers243431
+Ref: extra signal information244664
+Node: Thread Stops247130
+Node: All-Stop Mode248229
+Node: Non-Stop Mode252196
+Node: Background Execution255609
+Node: Thread-Specific Breakpoints257825
+Node: Interrupted System Calls259841
+Node: Observer Mode261355
+Node: Reverse Execution264791
+Ref: Reverse Execution-Footnote-1269709
+Ref: Reverse Execution-Footnote-2270336
+Node: Process Record and Replay270386
+Node: Stack291784
+Node: Frames293401
+Node: Backtrace295739
+Ref: backtrace-command296076
+Ref: set backtrace past-main302523
+Ref: set backtrace past-entry302851
+Ref: set backtrace limit303418
+Ref: Backtrace-Footnote-1304042
+Node: Selection305947
+Node: Frame Info310730
+Node: Frame Apply315152
+Node: Frame Filter Management319582
+Ref: disable frame-filter all320110
+Node: Source324418
+Node: List325484
+Node: Specify Location328186
+Node: Linespec Locations328807
+Node: Explicit Locations332206
+Node: Address Locations335418
+Node: Edit337169
+Ref: Edit-Footnote-1338645
+Node: Search338880
+Node: Source Path339688
+Ref: set substitute-path348628
+Node: Machine Code350848
+Node: Data361197
+Ref: print options362036
+Node: Expressions372278
+Node: Ambiguous Expressions374381
+Node: Variables377611
+Node: Arrays384209
+Node: Output Formats386740
+Ref: Output Formats-Footnote-1390113
+Node: Memory390270
+Ref: addressable memory unit397225
+Node: Memory Tagging398719
+Node: Auto Display401402
+Node: Print Settings405952
+Ref: set print address406250
+Ref: set print symbol409912
+Ref: set print array410400
+Ref: set print array-indexes410728
+Ref: set print elements411214
+Ref: set print frame-arguments411879
+Ref: set print raw-frame-arguments414048
+Ref: set print entry-values414464
+Ref: set print frame-info418843
+Ref: set print repeats420509
+Ref: set print max-depth421151
+Ref: set print memory-tag-violations422843
+Ref: set print null-stop423270
+Ref: set print pretty423594
+Ref: set print raw-values424181
+Ref: set print union425198
+Ref: set print object427504
+Ref: set print static-members428298
+Ref: set print vtbl428975
+Node: Pretty Printing429359
+Node: Pretty-Printer Introduction429875
+Node: Pretty-Printer Example431632
+Node: Pretty-Printer Commands432412
+Node: Value History435345
+Node: Convenience Vars437767
+Node: Convenience Funs445438
+Node: Registers453953
+Ref: info_registers_reggroup454610
+Ref: standard registers455161
+Ref: Registers-Footnote-1460112
+Node: Floating Point Hardware460507
+Node: Vector Unit461039
+Node: OS Information461426
+Ref: linux info os infotypes463450
+Node: Memory Region Attributes468041
+Node: Dump/Restore Files472705
+Node: Core File Generation475108
+Ref: set use-coredump-filter476668
+Ref: set dump-excluded-mappings478116
+Node: Character Sets478398
+Node: Caching Target Data484763
+Ref: Caching Target Data-Footnote-1487655
+Node: Searching Memory487893
+Node: Value Sizes491036
+Node: Optimized Code492688
+Node: Inline Functions494365
+Node: Tail Call Frames496992
+Ref: set debug entry-values499129
+Node: Macros503193
+Ref: Macros-Footnote-1510769
+Node: Tracepoints510922
+Node: Set Tracepoints512984
+Node: Create and Delete Tracepoints515922
+Node: Enable and Disable Tracepoints522270
+Node: Tracepoint Passcounts523510
+Node: Tracepoint Conditions524921
+Node: Trace State Variables526615
+Node: Tracepoint Actions528810
+Node: Listing Tracepoints535593
+Node: Listing Static Tracepoint Markers537295
+Node: Starting and Stopping Trace Experiments539143
+Ref: disconnected tracing540888
+Node: Tracepoint Restrictions545308
+Node: Analyze Collected Data549077
+Node: tfind550383
+Node: tdump554865
+Node: save tracepoints557380
+Node: Tracepoint Variables557876
+Node: Trace Files559004
+Node: Overlays561380
+Node: How Overlays Work562100
+Ref: A code overlay564635
+Node: Overlay Commands568068
+Node: Automatic Overlay Debugging572250
+Node: Overlay Sample Program574389
+Node: Languages576126
+Node: Setting577289
+Node: Filenames578990
+Node: Manually579801
+Node: Automatically581010
+Node: Show582071
+Ref: show language582359
+Node: Checks583393
+Node: Type Checking584398
+Node: Range Checking586227
+Node: Supported Languages588634
+Node: C589971
+Node: C Operators590935
+Node: C Constants595274
+Node: C Plus Plus Expressions598153
+Node: C Defaults603230
+Node: C Checks603898
+Node: Debugging C604458
+Node: Debugging C Plus Plus604942
+Node: Decimal Floating Point609829
+Node: D611099
+Node: Go611357
+Node: Objective-C612451
+Node: Method Names in Commands612914
+Node: The Print Command with Objective-C614605
+Node: OpenCL C615256
+Node: OpenCL C Datatypes615531
+Node: OpenCL C Expressions615906
+Node: OpenCL C Operators616263
+Node: Fortran616495
+Node: Fortran Operators617216
+Node: Fortran Defaults618261
+Node: Special Fortran Commands618646
+Node: Pascal620045
+Node: Rust620556
+Node: Modula-2623643
+Node: M2 Operators624616
+Node: Built-In Func/Proc627614
+Node: M2 Constants630528
+Node: M2 Types632129
+Node: M2 Defaults635347
+Node: Deviations635948
+Node: M2 Checks637049
+Node: M2 Scope637866
+Node: GDB/M2638890
+Node: Ada639803
+Node: Ada Mode Intro641109
+Node: Omissions from Ada642611
+Node: Additions to Ada646966
+Node: Overloading support for Ada650894
+Node: Stopping Before Main Program652534
+Node: Ada Exceptions653081
+Node: Ada Tasks654280
+Node: Ada Tasks and Core Files660771
+Node: Ravenscar Profile661618
+Node: Ada Settings663789
+Node: Ada Glitches665211
+Node: Unsupported Languages669219
+Node: Symbols669909
+Ref: quoting names670512
+Node: Altering703135
+Node: Assignment704173
+Node: Jumping707279
+Node: Signaling709353
+Node: Returning712282
+Node: Calling715633
+Node: Patching721118
+Node: Compiling and Injecting Code722232
+Ref: set debug compile725859
+Ref: set debug compile-cplus-types726109
+Node: GDB Files736130
+Node: Files736919
+Ref: Shared Libraries751031
+Ref: Files-Footnote-1763210
+Node: File Caching763339
+Node: Separate Debug Files764473
+Ref: build ID765714
+Ref: debug-file-directory767826
+Node: MiniDebugInfo776441
+Node: Index Files778892
+Node: Symbol Errors782955
+Node: Data Files786571
+Node: Targets787527
+Node: Active Targets789007
+Node: Target Commands790081
+Ref: load794470
+Ref: flash-erase795663
+Node: Byte Order795723
+Node: Remote Debugging797162
+Node: Connecting798424
+Ref: --multi Option in Types of Remote Connnections800650
+Ref: Attaching in Types of Remote Connections802065
+Ref: Host and target files802945
+Node: File Transfer811567
+Node: Server812506
+Ref: Running gdbserver814082
+Ref: Attaching to a program816300
+Ref: Other Command-Line Arguments for gdbserver818825
+Ref: Monitor Commands for gdbserver822144
+Ref: Server-Footnote-1827520
+Node: Remote Configuration827640
+Ref: set remotebreak828900
+Ref: set remote hardware-watchpoint-limit830362
+Ref: set remote hardware-breakpoint-limit830362
+Ref: set remote hardware-watchpoint-length-limit830864
+Ref: set remote exec-file831319
+Node: Remote Stub843138
+Node: Stub Contents846033
+Node: Bootstrapping848140
+Node: Debug Session851955
+Node: Configurations853996
+Node: Native854765
+Node: BSD libkvm Interface855334
+Node: Process Information856386
+Node: DJGPP Native862010
+Node: Cygwin Native868564
+Node: Non-debug DLL Symbols873485
+Node: Hurd Native877724
+Node: Darwin882980
+Node: FreeBSD884257
+Node: Embedded OS884977
+Node: Embedded Processors885388
+Node: ARC886415
+Node: ARM886962
+Node: BPF889508
+Node: M68K889988
+Node: MicroBlaze890161
+Node: MIPS Embedded891610
+Node: OpenRISC 1000892907
+Node: PowerPC Embedded893813
+Node: AVR897042
+Node: CRIS897414
+Node: Super-H898392
+Node: Architectures899451
+Node: AArch64899847
+Node: i386904435
+Ref: i386-Footnote-1908645
+Node: Alpha908731
+Node: MIPS908864
+Node: HPPA912758
+Node: PowerPC913280
+Node: Nios II914016
+Node: Sparc64914421
+Node: S12Z916789
+Node: Controlling GDB917082
+Node: Prompt918025
+Node: Editing919743
+Node: Command History921053
+Node: Screen Size926247
+Node: Output Styling928263
+Node: Numbers933097
+Node: ABI935079
+Node: Auto-loading938252
+Ref: set auto-load off939318
+Ref: show auto-load939954
+Ref: info auto-load940733
+Node: Init File in the Current Directory944009
+Ref: set auto-load local-gdbinit944584
+Ref: show auto-load local-gdbinit944766
+Ref: info auto-load local-gdbinit944930
+Node: libthread_db.so.1 file945078
+Ref: set auto-load libthread-db946017
+Ref: show auto-load libthread-db946148
+Ref: info auto-load libthread-db946285
+Node: Auto-loading safe path946469
+Ref: set auto-load safe-path947770
+Ref: show auto-load safe-path948509
+Ref: add-auto-load-safe-path948632
+Node: Auto-loading verbose mode951534
+Ref: set debug auto-load952697
+Ref: show debug auto-load952798
+Node: Messages/Warnings952920
+Ref: confirmation requests954354
+Node: Debugging Output955558
+Node: Other Misc Settings966631
+Node: Extending GDB967655
+Node: Sequences969480
+Node: Define970142
+Node: Hooks975627
+Node: Command Files977993
+Node: Output983066
+Ref: eval987868
+Node: Auto-loading sequences988030
+Ref: set auto-load gdb-scripts988525
+Ref: show auto-load gdb-scripts988649
+Ref: info auto-load gdb-scripts988779
+Node: Aliases989010
+Node: Command aliases default args992453
+Ref: Command aliases default args-Footnote-1995782
+Node: Python995936
+Node: Python Commands997220
+Ref: Python Commands-Footnote-11001353
+Node: Python API1001443
+Node: Basic Python1004178
+Ref: prompt_hook1015215
+Node: Exception Handling1015813
+Node: Values From Inferior1018717
+Node: Types In Python1036254
+Node: Pretty Printing API1047645
+Node: Selecting Pretty-Printers1052088
+Node: Writing a Pretty-Printer1054815
+Node: Type Printing API1060137
+Node: Frame Filter API1062753
+Node: Frame Decorator API1070065
+Ref: frame_args1073806
+Node: Writing a Frame Filter1077134
+Node: Unwinding Frames in Python1088608
+Node: Xmethods In Python1096536
+Node: Xmethod API1099432
+Node: Writing an Xmethod1103244
+Node: Inferiors In Python1109079
+Node: Events In Python1113051
+Node: Threads In Python1122263
+Node: Recordings In Python1125608
+Node: Commands In Python1132942
+Node: Parameters In Python1142535
+Node: Functions In Python1149499
+Node: Progspaces In Python1151716
+Node: Objfiles In Python1156642
+Node: Frames In Python1163299
+Ref: gdbpy_frame_read_register1169518
+Node: Blocks In Python1171329
+Node: Symbols In Python1175996
+Node: Symbol Tables In Python1185510
+Node: Line Tables In Python1188731
+Node: Breakpoints In Python1191570
+Ref: python_breakpoint_thread1198205
+Node: Finish Breakpoints in Python1202955
+Node: Lazy Strings In Python1205065
+Node: Architectures In Python1207293
+Ref: gdbpy_architecture_registers1209510
+Ref: gdbpy_architecture_reggroups1209831
+Node: Registers In Python1210030
+Node: TUI Windows In Python1212300
+Node: Python Auto-loading1217263
+Ref: set auto-load python-scripts1217892
+Ref: show auto-load python-scripts1217992
+Ref: info auto-load python-scripts1218098
+Node: Python modules1219232
+Node: gdb.printing1219618
+Node: gdb.types1221045
+Node: gdb.prompt1224057
+Node: Guile1225653
+Node: Guile Introduction1226312
+Node: Guile Commands1227150
+Node: Guile API1229004
+Node: Basic Guile1231001
+Node: Guile Configuration1236683
+Node: GDB Scheme Data Types1237659
+Node: Guile Exception Handling1239491
+Node: Values From Inferior In Guile1243525
+Node: Arithmetic In Guile1259571
+Node: Types In Guile1261202
+Ref: Fields of a type in Guile1269203
+Node: Guile Pretty Printing API1270591
+Node: Selecting Guile Pretty-Printers1276320
+Node: Writing a Guile Pretty-Printer1278696
+Node: Commands In Guile1283881
+Node: Parameters In Guile1294661
+Ref: Parameters In Guile-Footnote-11301542
+Node: Progspaces In Guile1301658
+Node: Objfiles In Guile1304270
+Node: Frames In Guile1306551
+Node: Blocks In Guile1313129
+Node: Symbols In Guile1317937
+Node: Symbol Tables In Guile1325272
+Node: Breakpoints In Guile1328235
+Node: Lazy Strings In Guile1338612
+Node: Architectures In Guile1340903
+Node: Disassembly In Guile1345210
+Node: I/O Ports in Guile1348412
+Node: Memory Ports in Guile1348968
+Node: Iterators In Guile1352819
+Node: Guile Auto-loading1357108
+Ref: set auto-load guile-scripts1357731
+Ref: show auto-load guile-scripts1357829
+Ref: info auto-load guile-scripts1357933
+Node: Guile Modules1358892
+Node: Guile Printing Module1359214
+Node: Guile Types Module1360033
+Node: Auto-loading extensions1361326
+Node: objfile-gdbdotext file1362745
+Ref: set auto-load scripts-directory1364415
+Ref: with-auto-load-dir1364791
+Ref: show auto-load scripts-directory1365609
+Ref: add-auto-load-scripts-directory1365689
+Node: dotdebug_gdb_scripts section1366165
+Node: Which flavor to choose?1369915
+Node: Multiple Extension Languages1371736
+Node: Interpreters1372784
+Node: TUI1375935
+Node: TUI Overview1376983
+Node: TUI Keys1379486
+Node: TUI Single Key Mode1382209
+Node: TUI Mouse Support1383397
+Node: TUI Commands1384144
+Node: TUI Configuration1389999
+Node: Emacs1392021
+Node: GDB/MI1397458
+Node: GDB/MI General Design1400163
+Node: Context management1402683
+Node: Asynchronous and non-stop modes1406470
+Node: Thread groups1409443
+Node: GDB/MI Command Syntax1411733
+Node: GDB/MI Input Syntax1411976
+Node: GDB/MI Output Syntax1413526
+Node: GDB/MI Compatibility with CLI1417111
+Node: GDB/MI Development and Front Ends1417848
+Node: GDB/MI Output Records1421362
+Node: GDB/MI Result Records1421768
+Node: GDB/MI Stream Records1423118
+Node: GDB/MI Async Records1424383
+Node: GDB/MI Breakpoint Information1434816
+Node: GDB/MI Frame Information1440541
+Node: GDB/MI Thread Information1441823
+Node: GDB/MI Ada Exception Information1443293
+Node: GDB/MI Simple Examples1443843
+Node: GDB/MI Command Description Format1446079
+Node: GDB/MI Breakpoint Commands1446959
+Ref: -break-insert1454290
+Node: GDB/MI Catchpoint Commands1468334
+Node: Shared Library GDB/MI Catchpoint Commands1468747
+Node: Ada Exception GDB/MI Catchpoint Commands1470405
+Node: C++ Exception GDB/MI Catchpoint Commands1473955
+Node: GDB/MI Program Context1477971
+Node: GDB/MI Thread Commands1482239
+Node: GDB/MI Ada Tasking Commands1485540
+Node: GDB/MI Program Execution1487812
+Node: GDB/MI Stack Manipulation1501796
+Ref: -stack-list-arguments1503720
+Ref: -stack-list-frames1507550
+Ref: -stack-list-locals1511879
+Ref: -stack-list-variables1513369
+Node: GDB/MI Variable Objects1514903
+Ref: -var-set-format1524869
+Ref: -var-list-children1526250
+Ref: -var-update1535058
+Ref: -var-set-frozen1538056
+Ref: -var-set-update-range1538853
+Ref: -var-set-visualizer1539382
+Node: GDB/MI Data Manipulation1540872
+Node: GDB/MI Tracepoint Commands1561360
+Node: GDB/MI Symbol Query1573151
+Ref: -symbol-info-functions1573420
+Ref: -symbol-info-module-functions1577933
+Ref: -symbol-info-module-variables1580913
+Ref: -symbol-info-modules1584630
+Ref: -symbol-info-types1586534
+Ref: -symbol-info-variables1588527
+Node: GDB/MI File Commands1593551
+Node: GDB/MI Target Manipulation1603390
+Node: GDB/MI File Transfer Commands1610048
+Node: GDB/MI Ada Exceptions Commands1611371
+Node: GDB/MI Support Commands1612724
+Node: GDB/MI Miscellaneous Commands1617443
+Ref: -interpreter-exec1627815
+Node: Annotations1631787
+Node: Annotations Overview1632706
+Node: Server Prefix1635169
+Node: Prompting1635903
+Node: Errors1637420
+Node: Invalidation1638316
+Node: Annotations for Running1638795
+Node: Source Annotations1640329
+Node: JIT Interface1641258
+Node: Declarations1643058
+Node: Registering Code1644445
+Node: Unregistering Code1645417
+Node: Custom Debug Info1646044
+Node: Using JIT Debug Info Readers1647340
+Node: Writing JIT Debug Info Readers1648352
+Node: In-Process Agent1650547
+Ref: Control Agent1652490
+Node: In-Process Agent Protocol1653357
+Node: IPA Protocol Objects1654148
+Ref: agent expression object1655146
+Ref: tracepoint action object1655351
+Ref: tracepoint object1655431
+Node: IPA Protocol Commands1657961
+Node: GDB Bugs1659431
+Node: Bug Criteria1660163
+Node: Bug Reporting1661040
+Node: Command Line Editing1668017
+Node: Introduction and Notation1668669
+Node: Readline Interaction1670290
+Node: Readline Bare Essentials1671479
+Node: Readline Movement Commands1673260
+Node: Readline Killing Commands1674218
+Node: Readline Arguments1676134
+Node: Searching1677176
+Node: Readline Init File1679326
+Node: Readline Init File Syntax1680477
+Node: Conditional Init Constructs1700732
+Node: Sample Init File1704926
+Node: Bindable Readline Commands1708048
+Node: Commands For Moving1709100
+Node: Commands For History1710856
+Node: Commands For Text1715616
+Node: Commands For Killing1719316
+Node: Numeric Arguments1722027
+Node: Commands For Completion1723164
+Node: Keyboard Macros1725130
+Node: Miscellaneous Commands1725815
+Node: Readline vi Mode1729734
+Node: Using History Interactively1730644
+Node: History Interaction1731159
+Node: Event Designators1733055
+Node: Word Designators1734327
+Node: Modifiers1736085
+Node: In Memoriam1737628
+Node: Formatting Documentation1738511
+Ref: Formatting Documentation-Footnote-11741891
+Node: Installing GDB1741989
+Node: Requirements1742561
+Ref: Expat1743649
+Ref: MPFR1746942
+Node: Running Configure1748563
+Node: Separate Objdir1751445
+Node: Config Names1754425
+Node: Configure Options1755904
+Node: System-wide configuration1765726
+Node: System-wide Configuration Scripts1768263
+Node: Maintenance Commands1769447
+Ref: maint info breakpoints1771102
+Ref: maint check libthread-db1780254
+Node: Remote Protocol1797410
+Node: Overview1798102
+Ref: Binary Data1800647
+Node: Packets1805020
+Ref: thread-id syntax1805920
+Ref: extended mode1807365
+Ref: ? packet1807623
+Ref: bc1809144
+Ref: bs1809354
+Ref: read registers packet1810971
+Ref: cycle step packet1812826
+Ref: write register packet1815537
+Ref: step with signal packet1816516
+Ref: vCont packet1817992
+Ref: vCtrlC packet1821226
+Ref: vKill packet1823644
+Ref: X packet1825178
+Ref: insert breakpoint or watchpoint packet1825547
+Node: Stop Reply Packets1829873
+Ref: swbreak stop reason1833124
+Ref: thread create event1836721
+Ref: thread exit event1837924
+Node: General Query Packets1840133
+Ref: qCRC packet1842963
+Ref: QEnvironmentHexEncoded1846116
+Ref: QEnvironmentUnset1847346
+Ref: QEnvironmentReset1848290
+Ref: QSetWorkingDir packet1849234
+Ref: qMemTags1854119
+Ref: QMemTags1855144
+Ref: QNonStop1858528
+Ref: QCatchSyscalls1859204
+Ref: QPassSignals1860741
+Ref: QProgramSignals1861948
+Ref: QThreadEvents1863515
+Ref: qSearch memory1865533
+Ref: QStartNoAckMode1866041
+Ref: qSupported1866573
+Ref: multiprocess extensions1882209
+Ref: install tracepoint in tracing1884239
+Ref: qXfer read1889213
+Ref: qXfer auxiliary vector read1890820
+Ref: qXfer btrace read1891168
+Ref: qXfer btrace-conf read1892233
+Ref: qXfer executable filename read1892584
+Ref: qXfer target description read1893199
+Ref: qXfer library list read1893633
+Ref: qXfer svr4 library list read1894289
+Ref: qXfer memory map read1896142
+Ref: qXfer sdata read1896529
+Ref: qXfer siginfo read1896995
+Ref: qXfer threads read1897391
+Ref: qXfer traceframe info read1897794
+Ref: qXfer unwind info block1898212
+Ref: qXfer fdpic loadmap read1898446
+Ref: qXfer osdata read1898862
+Ref: qXfer write1899016
+Ref: qXfer siginfo write1900108
+Ref: General Query Packets-Footnote-11902836
+Node: Architecture-Specific Protocol Details1903163
+Node: ARM-Specific Protocol Details1903672
+Node: ARM Breakpoint Kinds1903945
+Node: ARM Memory Tag Types1904305
+Node: MIPS-Specific Protocol Details1904604
+Node: MIPS Register packet Format1904887
+Node: MIPS Breakpoint Kinds1905814
+Node: Tracepoint Packets1906232
+Ref: QTEnable1915546
+Ref: QTDisable1915742
+Ref: qTfSTM1921279
+Ref: qTsSTM1921279
+Ref: qTSTMat1922356
+Ref: QTBuffer-size1923507
+Node: Host I/O Packets1925480
+Node: Interrupts1931061
+Ref: interrupting remote targets1931205
+Node: Notification Packets1933373
+Node: Remote Non-Stop1938798
+Node: Packet Acknowledgment1941914
+Node: Examples1944029
+Node: File-I/O Remote Protocol Extension1944623
+Node: File-I/O Overview1945085
+Node: Protocol Basics1947284
+Node: The F Request Packet1949513
+Node: The F Reply Packet1950414
+Node: The Ctrl-C Message1951332
+Node: Console I/O1952958
+Node: List of Supported Calls1954174
+Node: open1954536
+Node: close1957044
+Node: read1957427
+Node: write1958036
+Node: lseek1958807
+Node: rename1959691
+Node: unlink1961098
+Node: stat/fstat1962045
+Node: gettimeofday1962938
+Node: isatty1963374
+Node: system1963970
+Node: Protocol-specific Representation of Datatypes1965512
+Node: Integral Datatypes1965889
+Node: Pointer Values1966696
+Node: Memory Transfer1967400
+Node: struct stat1968020
+Node: struct timeval1970222
+Node: Constants1970739
+Node: Open Flags1971188
+Node: mode_t Values1971529
+Node: Errno Values1972021
+Node: Lseek Flags1972831
+Node: Limits1973016
+Node: File-I/O Examples1973376
+Node: Library List Format1974464
+Node: Library List Format for SVR4 Targets1977246
+Node: Memory Map Format1979713
+Node: Thread List Format1982237
+Node: Traceframe Info Format1983241
+Node: Branch Trace Format1984927
+Node: Branch Trace Configuration Format1986627
+Node: Agent Expressions1987801
+Node: General Bytecode Design1990622
+Node: Bytecode Descriptions1995416
+Node: Using Agent Expressions2008883
+Node: Varying Target Capabilities2010860
+Node: Rationale2012021
+Node: Target Descriptions2019410
+Node: Retrieving Descriptions2021353
+Node: Target Description Format2022438
+Node: Predefined Target Types2032313
+Node: Enum Target Types2033758
+Node: Standard Target Features2034753
+Node: AArch64 Features2036753
+Node: ARC Features2037459
+Ref: ARC Features-Footnote-12039278
+Node: ARM Features2039311
+Node: i386 Features2040824
+Node: MicroBlaze Features2043039
+Node: MIPS Features2043616
+Node: M68K Features2044807
+Node: NDS32 Features2045794
+Node: Nios II Features2046818
+Node: OpenRISC 1000 Features2047223
+Node: PowerPC Features2047589
+Node: RISC-V Features2051559
+Node: RX Features2053677
+Node: S/390 and System z Features2054039
+Node: Sparc Features2056179
+Node: TIC6x Features2057084
+Node: Operating System Information2057633
+Node: Process list2058469
+Node: Trace File Format2059532
+Node: Index Section Format2062746
+Node: Man Pages2070672
+Node: gdb man2071142
+Node: gdbserver man2077220
+Node: gcore man2084629
+Node: gdbinit man2085751
+Node: gdb-add-index man2086990
+Ref: gdb-add-index2087099
+Node: Copying2087973
+Node: GNU Free Documentation License2127251
+Node: Concept Index2152398
+Node: Command and Variable Index2296884
 
 End Tag Table
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-1 ./gdb/doc/gdb.info-1
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-1	2020-03-07 02:11:26.000000000 +0000
+++ ./gdb/doc/gdb.info-1	2021-12-16 02:00:26.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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.1.90.20200307-git.
+   This is the Tenth Edition, for GDB (GDB) Version
+11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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
@@ -461,6 +462,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 +512,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.1.90.20200307-git, Copyright 1999 Free Software Foundation, Inc...
+     GDB 11.1.90.20211216-git, Copyright 1999 Free Software Foundation, Inc...
      (gdb)
 
 GDB reads only enough symbol data to know where to find the rest when
@@ -762,6 +767,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
@@ -838,6 +844,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 +885,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 +900,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 +1052,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 +1112,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
 
@@ -1173,9 +1312,10 @@ 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,
+     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.).
 
    The utility 'make' is often needed in development environments.  You
@@ -1641,7 +1781,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 +1804,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,7 +1832,11 @@ 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.
 
 'apropos [-v] REGEXP'
      The 'apropos' command searches through all of the GDB commands, and
@@ -1699,10 +1851,7 @@ command 'help'.
      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 +1972,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 +2198,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 +2539,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 +2583,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 +2608,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,
@@ -2476,7 +2646,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 +2658,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 informations 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 argument
+     ID... - a space separated list of connections numbers - 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,13 +2719,22 @@ 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
@@ -2521,15 +2742,15 @@ the 'remove-inferiors' command.
      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.
 
@@ -2624,7 +2845,7 @@ command.
      call.
 
 
-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
 =============================================
@@ -2766,7 +2987,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 +3089,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
@@ -3039,13 +3260,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
@@ -3368,6 +3590,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
@@ -4389,6 +4666,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.
@@ -6369,14 +6652,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 +6677,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 +6692,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,13 +6705,13 @@ 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.
+     Show how many functions to print in the 'record
+     function-call-history' command.
 
 
 File: gdb.info,  Node: Stack,  Next: Source,  Prev: Process Record and Replay,  Up: Top
@@ -6733,221 +7016,3 @@ levels in a backtrace, you can change th
 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
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-2 ./gdb/doc/gdb.info-2
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-2	2020-03-07 02:11:28.000000000 +0000
+++ ./gdb/doc/gdb.info-2	2021-12-16 02:00: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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,224 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+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 +360,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.
@@ -389,18 +607,18 @@ File: gdb.info,  Node: Specify Location,
 9.2 Specifying a Location
 =========================
 
-* Menu:
-
-* Linespec Locations::                Linespec locations
-* 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.
 
+* Menu:
+
+* Linespec Locations::                Linespec locations
+* Explicit Locations::                Explicit locations
+* Address Locations::                 Address locations
+
 
 File: gdb.info,  Node: Linespec Locations,  Next: Explicit Locations,  Up: Specify Location
 
@@ -747,7 +965,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
@@ -1136,8 +1354,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.
@@ -1288,6 +1506,10 @@ 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.
@@ -1423,6 +1645,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
@@ -1908,7 +2131,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
 =====================
@@ -1935,9 +2158,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
@@ -2026,6 +2250,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
@@ -2068,9 +2308,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
+===================
+
+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.7 Automatic Display
+10.8 Automatic Display
 ======================
 
 If you find that you want to print the value of an expression frequently
@@ -2167,7 +2465,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
@@ -2571,6 +2869,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
@@ -2759,8 +3069,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
@@ -2775,8 +3085,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
@@ -2817,8 +3127,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:
 
@@ -2845,8 +3155,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
@@ -2938,7 +3248,7 @@ 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
@@ -3000,7 +3310,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
@@ -3164,7 +3474,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::.
@@ -3194,7 +3505,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
@@ -3424,7 +3735,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
@@ -3562,7 +3873,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
@@ -3577,7 +3888,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
@@ -3590,7 +3901,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
@@ -3722,7 +4033,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
@@ -3784,10 +4095,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
@@ -3804,7 +4115,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
@@ -3821,7 +4132,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.
@@ -3834,7 +4145,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
@@ -3855,7 +4166,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
@@ -3912,7 +4223,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
@@ -3980,7 +4291,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
@@ -4163,13 +4474,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
@@ -4230,6 +4541,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
@@ -4240,7 +4555,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
@@ -4333,7 +4648,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
@@ -6602,7 +6917,7 @@ checker:
      accessing memory that the process does not own (a typical example
      from many Unix systems).
 
-'show range'
+'show check range'
      Show the current setting of the range checker, and whether or not
      it is being set automatically by GDB.
 
@@ -6937,449 +7252,3 @@ GDB expression handling can interpret mo
   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.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-3 ./gdb/doc/gdb.info-3
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-3	2020-03-07 02:11:29.000000000 +0000
+++ ./gdb/doc/gdb.info-3	2021-12-16 02:00: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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,472 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+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.
+'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
@@ -1218,6 +1684,29 @@ 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
 
@@ -1429,6 +1918,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
@@ -1529,6 +2031,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
@@ -1566,14 +2076,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
@@ -1586,34 +2096,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 */
+                                              } fff2;
 
-                                          /* total size (bytes):   40 */
-                                        }
+                                              /* 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
@@ -1624,20 +2134,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.
@@ -1796,20 +2306,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
@@ -2058,10 +2582,13 @@ 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'..
 
 
 File: gdb.info,  Node: Altering,  Next: GDB Files,  Prev: Symbols,  Up: Top
@@ -3022,7 +3549,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)
@@ -3057,22 +3584,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
@@ -3102,6 +3632,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
@@ -3194,9 +3731,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'
@@ -3247,11 +3784,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
 
@@ -3770,9 +4307,7 @@ 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
 -----------------------------------
@@ -4280,6 +4815,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
 ----------------------------
 
@@ -4961,7 +5503,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.
@@ -4972,7 +5514,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.
 
@@ -5527,8 +6069,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
@@ -5552,15 +6094,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
@@ -5591,10 +6133,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'
@@ -5602,13 +6145,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
@@ -6235,6 +6778,7 @@ send an arbitrary command to the simulat
 
 * ARC::                         Synopsys ARC
 * ARM::                         ARM
+* BPF::                         eBPF
 * M68K::                        Motorola M68K
 * MicroBlaze::			Xilinx MicroBlaze
 * MIPS Embedded::               MIPS Embedded
@@ -6265,7 +6809,7 @@ GDB provides the following ARC-specific
      given address.
 
 
-File: gdb.info,  Node: ARM,  Next: M68K,  Prev: ARC,  Up: Embedded Processors
+File: gdb.info,  Node: ARM,  Next: BPF,  Prev: ARC,  Up: Embedded Processors
 
 21.3.2 ARM
 ----------
@@ -6351,9 +6895,24 @@ GDB provides the following ARM-specific
           'all'
 
 
-File: gdb.info,  Node: M68K,  Next: MicroBlaze,  Prev: ARM,  Up: Embedded Processors
+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.3 M68k
+21.3.4 M68k
 -----------
 
 The Motorola m68k configuration includes ColdFire support.
@@ -6361,7 +6920,7 @@ The Motorola m68k configuration includes
 
 File: gdb.info,  Node: MicroBlaze,  Next: MIPS Embedded,  Prev: M68K,  Up: Embedded Processors
 
-21.3.4 MicroBlaze
+21.3.5 MicroBlaze
 -----------------
 
 The MicroBlaze is a soft-core processor supported on various Xilinx
@@ -6398,7 +6957,7 @@ need to do this.)
 
 File: gdb.info,  Node: MIPS Embedded,  Next: OpenRISC 1000,  Prev: MicroBlaze,  Up: Embedded Processors
 
-21.3.5 MIPS Embedded
+21.3.6 MIPS Embedded
 --------------------
 
 GDB supports these special commands for MIPS targets:
@@ -6430,7 +6989,7 @@ GDB supports these special commands for
 
 File: gdb.info,  Node: OpenRISC 1000,  Next: PowerPC Embedded,  Prev: MIPS Embedded,  Up: Embedded Processors
 
-21.3.6 OpenRISC 1000
+21.3.7 OpenRISC 1000
 --------------------
 
 The OpenRISC 1000 provides a free RISC instruction set architecture.  It
@@ -6459,7 +7018,7 @@ target:
 
 File: gdb.info,  Node: PowerPC Embedded,  Next: AVR,  Prev: OpenRISC 1000,  Up: Embedded Processors
 
-21.3.7 PowerPC Embedded
+21.3.8 PowerPC Embedded
 -----------------------
 
 GDB supports using the DVC (Data Value Compare) register to implement in
@@ -6531,7 +7090,7 @@ command.
 
 File: gdb.info,  Node: AVR,  Next: CRIS,  Prev: PowerPC Embedded,  Up: Embedded Processors
 
-21.3.8 Atmel AVR
+21.3.9 Atmel AVR
 ----------------
 
 When configured for debugging the Atmel AVR, GDB supports the following
@@ -6544,8 +7103,8 @@ AVR-specific commands:
 
 File: gdb.info,  Node: CRIS,  Next: Super-H,  Prev: AVR,  Up: Embedded Processors
 
-21.3.9 CRIS
------------
+21.3.10 CRIS
+------------
 
 When configured for debugging CRIS, GDB provides the following
 CRIS-specific commands:
@@ -6577,7 +7136,7 @@ CRIS-specific commands:
 
 File: gdb.info,  Node: Super-H,  Prev: CRIS,  Up: Embedded Processors
 
-21.3.10 Renesas Super-H
+21.3.11 Renesas Super-H
 -----------------------
 
 For the Renesas Super-H processor, GDB provides these commands:
@@ -6660,558 +7219,35 @@ When GDB prints a backtrace, any address
 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.
+21.4.1.3 AArch64 Memory Tagging Extension.
+..........................................
 
-'show commands +'
-     Print ten commands just after the commands last printed.
+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.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-4 ./gdb/doc/gdb.info-4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-4	2020-03-07 02:11:32.000000000 +0000
+++ ./gdb/doc/gdb.info-4	2021-12-16 02:00:29.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,576 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+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.
+
+     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
@@ -105,10 +675,15 @@ styles can also be disabled entirely.
 
 '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.
@@ -159,6 +734,16 @@ each style.
      style address' family of commands.  By default, this style's
      foreground color is blue.
 
+'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
@@ -324,14 +909,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::.
@@ -428,6 +1005,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
 
@@ -504,7 +1089,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".
@@ -724,28 +1309,33 @@ 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 debug aix-solib'
      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 check-physname'
      Check the results of the "physname" computation.  When reading
      DWARF debugging information for C++, GDB attempts to compute each
@@ -755,17 +1345,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
@@ -773,6 +1366,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
@@ -780,41 +1374,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
@@ -822,36 +1441,43 @@ commands.
      single-stepping the inferior.
 'show debug infrun'
      Displays the current state of GDB inferior 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-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
@@ -859,6 +1485,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
@@ -866,6 +1493,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
@@ -898,11 +1526,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 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
@@ -910,11 +1540,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
@@ -922,6 +1554,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
@@ -929,6 +1562,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
@@ -936,12 +1570,14 @@ 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'
@@ -982,15 +1618,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
@@ -1017,8 +1644,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
 =================================
@@ -1510,9 +2146,178 @@ 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.
+
+   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 20
+     (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::.
+
+   ---------- 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.2 Extending GDB using Python
+23.3 Extending GDB using Python
 ===============================
 
 You can extend GDB using the Python programming language
@@ -1544,7 +2349,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
@@ -1593,6 +2398,40 @@ 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 Python will
+     check the environment variable 'PYTHONDONTWRITEBYTECODE' to see if
+     it should write out byte-code or not.
+
+     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:
 
@@ -1601,10 +2440,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
@@ -1651,11 +2507,13 @@ 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.
+* TUI Windows In Python::       Implementing new TUI windows.
 
 
 File: gdb.info,  Node: Basic Python,  Next: Exception Handling,  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
@@ -1910,7 +2768,7 @@ for debugging purposes only, expect them
 
 File: gdb.info,  Node: Exception Handling,  Next: Values From Inferior,  Prev: Basic Python,  Up: Python API
 
-23.2.2.2 Exception Handling
+23.3.2.2 Exception Handling
 ...........................
 
 When executing the 'python' command, Python exceptions uncaught within
@@ -1970,7 +2828,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
@@ -1979,7 +2837,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.3 Values From Inferior
 .............................
 
 GDB provides values it obtains from the inferior program in an object of
@@ -2267,6 +3125,11 @@ 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::).
+
      'deref_refs'
           'True' if C++ references should be resolved to the value they
           refer to, 'False' (the default) if they shouldn't.  Note that,
@@ -2282,7 +3145,7 @@ 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::).
@@ -2376,7 +3239,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.4 Types In Python
 ........................
 
 GDB represents types from the inferior using the class 'gdb.Type'.
@@ -2415,6 +3278,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.
@@ -2422,7 +3305,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
@@ -2437,20 +3322,34 @@ of the 'Type.fields' method for a descri
    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.
+
+        * 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.
+
+        * 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
@@ -2662,7 +3561,7 @@ 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.5 Pretty Printing API
 ............................
 
 A pretty-printer is just an object that holds a value and implements a
@@ -2763,7 +3662,7 @@ pretty-printer for a 'gdb.Value':
 
 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.6 Selecting Pretty-Printers
 ..................................
 
 GDB provides several ways to register a pretty-printer: globally, per
@@ -2818,7 +3717,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.7 Writing a Pretty-Printer
 .................................
 
 A pretty-printer consists of two parts: a lookup function to detect if
@@ -2845,7 +3744,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):
@@ -2968,7 +3867,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.8 Type Printing API
 ..........................
 
 GDB provides a way for Python code to customize type display.  This is
@@ -3023,7 +3922,7 @@ 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.9 Filtering Frames
 .........................
 
 Frame filters are Python objects that manipulate the visibility of a
@@ -3166,7 +4065,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.10 Decorating Frames
 ...........................
 
 Frame decorators are sister objects to frame filters (*note Frame Filter
@@ -3261,7 +4160,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
@@ -3349,7 +4248,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.11 Writing a Frame Filter
 ................................
 
 There are three basic elements that a frame filter must implement: it
@@ -3492,7 +4391,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:
@@ -3610,7 +4509,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.12 Unwinding Frames in Python
 ....................................
 
 In GDB terminology "unwinding" is the process of finding the previous
@@ -3651,11 +4550,10 @@ 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.
+     as a 'gdb.Value' object.  For a description of the acceptable
+     values of REG see *note Frame.read_register:
+     gdbpy_frame_read_register.  If REG 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.
@@ -3707,6 +4605,15 @@ instance to be returned to GDB:
 
      Each attribute value should be an instance of 'gdb.Value'.
 
+ -- 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.
+
 Unwinder Output: UnwindInfo
 ---------------------------
 
@@ -3715,9 +4622,9 @@ Use 'PendingFrame.create_unwind_info' me
 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).
+     REG 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
 ----------------------
@@ -3785,7 +4692,7 @@ the unwinders from GDB.
 
 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.13 Xmethods In Python
 ............................
 
 "Xmethods" are additional methods or replacements for existing methods
@@ -3836,7 +4743,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.14 Xmethod API
 .....................
 
 The GDB Python API provides classes, interfaces and functions to
@@ -3925,7 +4832,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.15 Writing an Xmethod
 ............................
 
 Implementing xmethods in Python will require implementing xmethod
@@ -4106,13 +5013,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.16 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:
@@ -4128,6 +5035,11 @@ module:
  -- Variable: Inferior.num
      ID of inferior, as assigned by GDB.
 
+ -- 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::.
+
  -- Variable: Inferior.pid
      Process ID of the inferior, as assigned by the underlying operating
      system.
@@ -4195,7 +5107,7 @@ module:
 
 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
+23.3.2.17 Events In Python
 ..........................
 
 GDB provides a general event facility so that Python code can be
@@ -4222,8 +5134,8 @@ provides methods to register and unregis
    Here is an example:
 
      def exit_handler (event):
-         print "event type: exit"
-         print "exit code: %d" % (event.exit_code)
+         print ("event type: exit")
+         print ("exit code: %d" % (event.exit_code))
 
      gdb.events.exited.connect (exit_handler)
 
@@ -4420,7 +5332,7 @@ and details of the events they emit:
 
 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
+23.3.2.18 Threads In Python
 ...........................
 
 Python scripts can access information about, and manipulate inferior
@@ -4435,7 +5347,7 @@ module:
      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::
+'Inferior.threads()' method.  *Note Inferiors In Python::.
 
    A 'gdb.InferiorThread' object has the following attributes:
 
@@ -4501,7 +5413,7 @@ module:
 
 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
+23.3.2.19 Recordings In Python
 ..............................
 
 The following recordings-related functions (*note Process Record and
@@ -4708,7 +5620,7 @@ limited to be contiguous.
 
 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
+23.3.2.20 Commands In Python
 ............................
 
 You can implement new GDB CLI commands in Python.  A CLI command is
@@ -4859,6 +5771,11 @@ defined in the 'gdb' module:
      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
@@ -4915,7 +5832,7 @@ implemented in Python:
          super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
 
        def invoke (self, arg, from_tty):
-         print "Hello, World!"
+         print ("Hello, World!")
 
      HelloWorld ()
 
@@ -4926,7 +5843,7 @@ is read into GDB, you may need to import
 
 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
+23.3.2.21 Parameters In Python
 ..............................
 
 You can implement new GDB parameters using Python.  A new parameter is
@@ -5024,6 +5941,7 @@ class.  These are:
                   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
@@ -5090,7 +6008,7 @@ module:
 
 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
+23.3.2.22 Writing new convenience functions
 ...........................................
 
 You can implement new convenience functions (*note Convenience Vars::)
@@ -5146,22 +6064,22 @@ is read into GDB, you may need to import
 
 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
+23.3.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.
+*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 and Programs::.  This is identical to
-     'gdb.selected_inferior().progspace' (*note Inferiors In Python::)
-     and is included for historical compatibility.
+     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.
@@ -5232,7 +6150,7 @@ will be loaded.
          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 ..."
+         print ("Computing the answer to the ultimate question ...")
          return 42
      def new_objfile_handler(event):
          objfile = event.new_objfile
@@ -5249,7 +6167,7 @@ will be loaded.
      gdb.events.new_objfile.connect(new_objfile_handler)
      end
      (gdb) file /tmp/hello
-     Reading symbols from /tmp/hello...done.
+     Reading symbols from /tmp/hello...
      Computing the answer to the ultimate question ...
      (gdb) python print gdb.current_progspace().expensive_computation
      42
@@ -5261,7 +6179,7 @@ will be loaded.
 
 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
+23.3.2.24 Objfiles In Python
 ............................
 
 GDB loads symbols for an inferior from various symbol-containing files
@@ -5372,7 +6290,7 @@ objfile.
      gdb.events.new_objfile.connect(new_objfile_handler)
      end
      (gdb) file ./hello
-     Reading symbols from ./hello...done.
+     Reading symbols from ./hello...
      (gdb) python print gdb.objfiles()[0].time_loaded
      2014-10-09 11:41:36.770345
 
@@ -5412,7 +6330,7 @@ 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
+23.3.2.25 Accessing inferior stack frames from Python
 .....................................................
 
 When the debugged program stops, GDB is able to analyze its call stack
@@ -5543,7 +6461,7 @@ module:
                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
+                   print ("An error occured: %s" % reason_str)
 
  -- Function: Frame.pc ()
      Returns the frame's resume address.
@@ -5569,9 +6487,24 @@ module:
      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.
+     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
@@ -5585,10 +6518,14 @@ module:
      Set this frame to be the selected frame.  *Note Examining the
      Stack: Stack.
 
+ -- Function: Frame.level ()
+     Return an integer, the stack frame level for this frame.  *Note
+     Stack Frames: Frames.
+
 
 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
+23.3.2.26 Accessing blocks from Python
 ......................................
 
 In GDB, symbols are stored in blocks.  A block corresponds roughly to a
@@ -5709,7 +6646,7 @@ module:
 
 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
+23.3.2.27 Python representation of Symbols
 ..........................................
 
 GDB represents every variable, function and type as an entry in a symbol
@@ -5924,6 +6861,9 @@ represented as constants in the 'gdb' mo
      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.
 
@@ -5941,14 +6881,14 @@ represented as constants in the 'gdb' mo
 'gdb.SYMBOL_LOC_COMPUTED'
      The value's address is a computed location.
 
-'gdb.SYMBOL_LOC_COMPUTED'
+'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.2.2.28 Symbol table representation in Python
+23.3.2.28 Symbol table representation in Python
 ...............................................
 
 Access to symbol table data maintained by GDB on the inferior is exposed
@@ -6029,7 +6969,7 @@ Examining the Symbol Table: Symbols, for
 
 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
+23.3.2.29 Manipulating line tables using Python
 ...............................................
 
 Python code can request and inspect line table information from a symbol
@@ -6061,7 +7001,7 @@ 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)
+        print ("Line: "+str(line.line)+" Address: "+hex(line.pc))
 
    This will have the following output:
 
@@ -6097,7 +7037,7 @@ the following direct access methods:
 
 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
+23.3.2.30 Manipulating breakpoints using Python
 ...............................................
 
 Python code can manipulate breakpoints via the 'gdb.Breakpoint' class.
@@ -6159,6 +7099,9 @@ module:
 'gdb.BP_BREAKPOINT'
      Normal code breakpoint.
 
+'gdb.BP_HARDWARE_BREAKPOINT'
+     Hardware assisted code breakpoint.
+
 'gdb.BP_WATCHPOINT'
      Watchpoint breakpoint.
 
@@ -6171,7 +7114,13 @@ module:
 'gdb.BP_ACCESS_WATCHPOINT'
      Hardware assisted access watchpoint.
 
-   The available watchpoint types represented by constants are defined
+'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'
@@ -6311,1216 +7260,3 @@ in the 'gdb' module:
      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.
-
- -- 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.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-5 ./gdb/doc/gdb.info-5
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-5	2020-03-07 02:11:34.000000000 +0000
+++ ./gdb/doc/gdb.info-5	2021-12-16 02:00:30.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,1405 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: Finish Breakpoints in Python,  Next: Lazy Strings In Python,  Prev: Breakpoints In Python,  Up: Python API
+
+23.3.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.3.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,  Next: Registers In Python,  Prev: Lazy Strings In Python,  Up: Python API
+
+23.3.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.
+
+ -- 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: TUI Windows In Python,  Prev: Architectures In Python,  Up: Python API
+
+23.3.2.34 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: TUI Windows In Python,  Prev: Registers In Python,  Up: Python API
+
+23.3.2.35 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.
+
+     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 model, it is the viewport that moves, not the
+     contents.  A positive argument should cause the viewport to move
+     right, and so the content should appear to move to the left.
+
+ -- Function: Window.vscroll (NUM)
+     This is a request to scroll the window vertically.  NUM is the
+     amount by which to scroll, with negative numbers meaning to scroll
+     backward.  In the TUI model, it is the viewport that moves, not the
+     contents.  A positive argument should cause the viewport to move
+     down, and so the content should appear to move up.
+
+ -- Function: Window.click (X, Y, BUTTON)
+     This is called on a mouse click in this window.  X and Y are the
+     mouse coordinates inside the window (0-based), and BUTTON specifies
+     which mouse button was used, whose values can be 1 (left), 2
+     (middle), or 3 (right).
+
+
+File: gdb.info,  Node: Python Auto-loading,  Next: Python modules,  Prev: Python API,  Up: Python
+
+23.3.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.3.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.3.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.3.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.3.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.4 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.4.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 3.0, 2.2, or 2.0.
+
+   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.4.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.4.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.4.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.4.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.4.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.4.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.4.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-reference-value value
+     Return a new '<gdb:value>' object which is a reference to the value
+     encapsulated by '<gdb:value>' object VALUE.
+
+ -- Scheme Procedure: value-rvalue-reference-value value
+     Return a new '<gdb:value>' object which is an rvalue reference to
+     the value encapsulated by '<gdb:value>' object VALUE.
+
+ -- Scheme Procedure: value-const-value value
+     Return a new '<gdb:value>' object which is a 'const' version of
+     '<gdb:value>' object VALUE.
+
+ -- 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.
+
+ -- 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.
+
+
 File: gdb.info,  Node: Arithmetic In Guile,  Next: Types In Guile,  Prev: Values From Inferior In Guile,  Up: Guile API
 
-23.3.3.6 Arithmetic In Guile
+23.4.3.6 Arithmetic In Guile
 ............................
 
 The '(gdb)' module provides several functions for performing arithmetic
@@ -105,7 +1501,7 @@ support in GDB does not either.
 
 File: gdb.info,  Node: Types In Guile,  Next: Guile Pretty Printing API,  Prev: Arithmetic In Guile,  Up: Guile API
 
-23.3.3.7 Types In Guile
+23.4.3.7 Types In Guile
 .......................
 
 GDB represents types from the inferior in objects of type '<gdb:type>'.
@@ -311,6 +1707,9 @@ defined in the '(gdb)' module:
 'TYPE_CODE_REF'
      A reference type.
 
+'TYPE_CODE_RVALUE_REF'
+     A C++11 rvalue reference type.
+
 'TYPE_CODE_CHAR'
      A character type.
 
@@ -375,7 +1774,7 @@ module:
 
 File: gdb.info,  Node: Guile Pretty Printing API,  Next: Selecting Guile Pretty-Printers,  Prev: Types In Guile,  Up: Guile API
 
-23.3.3.8 Guile Pretty Printing API
+23.4.3.8 Guile Pretty Printing API
 ..................................
 
 An example output is provided (*note Pretty Printing::).
@@ -509,7 +1908,7 @@ pretty-printer for a '<gdb:value>':
 
 File: gdb.info,  Node: Selecting Guile Pretty-Printers,  Next: Writing a Guile Pretty-Printer,  Prev: Guile Pretty Printing API,  Up: Guile API
 
-23.3.3.9 Selecting Guile Pretty-Printers
+23.4.3.9 Selecting Guile Pretty-Printers
 ........................................
 
 There are three sets of pretty-printers that GDB searches:
@@ -557,7 +1956,7 @@ highly illegible if any argument is prin
 
 File: gdb.info,  Node: Writing a Guile Pretty-Printer,  Next: Commands In Guile,  Prev: Selecting Guile Pretty-Printers,  Up: Guile API
 
-23.3.3.10 Writing a Guile Pretty-Printer
+23.4.3.10 Writing a Guile Pretty-Printer
 ........................................
 
 A pretty-printer consists of two basic parts: a lookup function to
@@ -695,7 +2094,7 @@ corresponding output of 'info pretty-pri
 
 File: gdb.info,  Node: Commands In Guile,  Next: Parameters In Guile,  Prev: Writing a Guile Pretty-Printer,  Up: Guile API
 
-23.3.3.11 Commands In Guile
+23.4.3.11 Commands In Guile
 ...........................
 
 You can implement new GDB CLI commands in Guile.  A CLI command object
@@ -942,7 +2341,7 @@ implemented in Guile:
 
 File: gdb.info,  Node: Parameters In Guile,  Next: Progspaces In Guile,  Prev: Commands In Guile,  Up: Guile API
 
-23.3.3.12 Parameters In Guile
+23.4.3.12 Parameters In Guile
 .............................
 
 You can implement new GDB "parameters" using Guile (1).
@@ -1107,13 +2506,13 @@ parameter objects (*note (guile)Paramete
 
 File: gdb.info,  Node: Progspaces In Guile,  Next: Objfiles In Guile,  Prev: Parameters In Guile,  Up: Guile API
 
-23.3.3.13 Program Spaces In Guile
+23.4.3.13 Program Spaces In Guile
 .................................
 
 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 Guile::.  *Note program spaces: Inferiors and
-Programs, for more details about program spaces.
+*Note Objfiles In Guile::.  *Note program spaces: Inferiors Connections
+and Programs, for more details about program spaces.
 
    Each progspace is represented by an instance of the '<gdb:progspace>'
 smob.  *Note GDB Scheme Data Types::.
@@ -1133,7 +2532,7 @@ smob.  *Note GDB Scheme Data Types::.
  -- Scheme Procedure: current-progspace
      This function returns the program space of the currently selected
      inferior.  There is always a current progspace, this never returns
-     '#f'.  *Note Inferiors and Programs::.
+     '#f'.  *Note Inferiors Connections and Programs::.
 
  -- Scheme Procedure: progspaces
      Return a list of all the progspaces currently known to GDB.
@@ -1170,7 +2569,7 @@ smob.  *Note GDB Scheme Data Types::.
 
 File: gdb.info,  Node: Objfiles In Guile,  Next: Frames In Guile,  Prev: Progspaces In Guile,  Up: Guile API
 
-23.3.3.14 Objfiles In Guile
+23.4.3.14 Objfiles In Guile
 ...........................
 
 GDB loads symbols for an inferior from various symbol-containing files
@@ -1225,7 +2624,7 @@ module:
 
 File: gdb.info,  Node: Frames In Guile,  Next: Blocks In Guile,  Prev: Objfiles In Guile,  Up: Guile API
 
-23.3.3.15 Accessing inferior stack frames from Guile.
+23.4.3.15 Accessing inferior stack frames from Guile.
 .....................................................
 
 When the debugged program stops, GDB is able to analyze its call stack
@@ -1393,7 +2792,7 @@ module:
 
 File: gdb.info,  Node: Blocks In Guile,  Next: Symbols In Guile,  Prev: Frames In Guile,  Up: Guile API
 
-23.3.3.16 Accessing blocks from Guile.
+23.4.3.16 Accessing blocks from Guile.
 ......................................
 
 In GDB, symbols are stored in blocks.  A block corresponds roughly to a
@@ -1515,7 +2914,7 @@ module:
 
 File: gdb.info,  Node: Symbols In Guile,  Next: Symbol Tables In Guile,  Prev: Blocks In Guile,  Up: Guile API
 
-23.3.3.17 Guile representation of Symbols.
+23.4.3.17 Guile representation of Symbols.
 ..........................................
 
 GDB represents every variable, function and type as an entry in a symbol
@@ -1708,7 +3107,7 @@ represented as constants in the 'gdb' mo
 
 File: gdb.info,  Node: Symbol Tables In Guile,  Next: Breakpoints In Guile,  Prev: Symbols In Guile,  Up: Guile API
 
-23.3.3.18 Symbol table representation in Guile.
+23.4.3.18 Symbol table representation in Guile.
 ...............................................
 
 Access to symbol table data maintained by GDB on the inferior is exposed
@@ -1785,7 +3184,7 @@ module:
 
 File: gdb.info,  Node: Breakpoints In Guile,  Next: Lazy Strings In Guile,  Prev: Symbol Tables In Guile,  Up: Guile API
 
-23.3.3.19 Manipulating breakpoints using Guile
+23.4.3.19 Manipulating breakpoints using Guile
 ..............................................
 
 Breakpoints in Guile are represented by objects of type
@@ -1857,7 +3256,11 @@ outside of Guile.
           Hardware assisted access watchpoint.  This value cannot be
           specified when creating the breakpoint.
 
-     The available watchpoint types represented by constants are defined
+     'BP_CATCHPOINT'
+          Catchpoint.  This value cannot be specified when creating the
+          breakpoint.
+
+     The available watchpoint types are represented by constants defined
      in the '(gdb)' module:
 
      'WP_READ'
@@ -2025,7 +3428,7 @@ outside of Guile.
 
 File: gdb.info,  Node: Lazy Strings In Guile,  Next: Architectures In Guile,  Prev: Breakpoints In Guile,  Up: Guile API
 
-23.3.3.20 Guile representation of lazy strings.
+23.4.3.20 Guile representation of lazy strings.
 ...............................................
 
 A "lazy string" is a string whose contents is not retrieved or encoded
@@ -2077,7 +3480,7 @@ creation.
 
 File: gdb.info,  Node: Architectures In Guile,  Next: Disassembly In Guile,  Prev: Lazy Strings In Guile,  Up: Guile API
 
-23.3.3.21 Guile representation of architectures
+23.4.3.21 Guile representation of architectures
 ...............................................
 
 GDB uses architecture specific parameters and artifacts in a number of
@@ -2210,7 +3613,7 @@ following functions.
 
 File: gdb.info,  Node: Disassembly In Guile,  Next: I/O Ports in Guile,  Prev: Architectures In Guile,  Up: Guile API
 
-23.3.3.22 Disassembly In Guile
+23.4.3.22 Disassembly In Guile
 ..............................
 
 The disassembler can be invoked from Scheme code.  Furthermore, the
@@ -2277,7 +3680,7 @@ from any source, and not just target mem
 
 File: gdb.info,  Node: I/O Ports in Guile,  Next: Memory Ports in Guile,  Prev: Disassembly In Guile,  Up: Guile API
 
-23.3.3.23 I/O Ports in Guile
+23.4.3.23 I/O Ports in Guile
 ............................
 
  -- Scheme Procedure: input-port
@@ -2295,7 +3698,7 @@ File: gdb.info,  Node: I/O Ports in Guil
 
 File: gdb.info,  Node: Memory Ports in Guile,  Next: Iterators In Guile,  Prev: I/O Ports in Guile,  Up: Guile API
 
-23.3.3.24 Memory Ports in Guile
+23.4.3.24 Memory Ports in Guile
 ...............................
 
 GDB provides a 'port' interface to target memory.  This allows Guile
@@ -2333,19 +3736,33 @@ object.  One can then read/write memory
      Return the size of the read buffer of '<gdb:memory-port>'
      MEMORY-PORT.
 
+     This procedure is deprecated and will be removed in GDB 11.  It
+     returns 0 when using Guile 2.2 or later.
+
  -- Scheme Procedure: set-memory-port-read-buffer-size! memory-port size
      Set the size of the read buffer of '<gdb:memory-port>' MEMORY-PORT
      to SIZE.  The result is unspecified.
 
+     This procedure is deprecated and will be removed in GDB 11.  When
+     GDB is built with Guile 2.2 or later, you can call 'setvbuf'
+     instead (*note 'setvbuf': (guile)Buffering.).
+
  -- Scheme Procedure: memory-port-write-buffer-size memory-port
      Return the size of the write buffer of '<gdb:memory-port>'
      MEMORY-PORT.
 
+     This procedure is deprecated and will be removed in GDB 11.  It
+     returns 0 when GDB is built with Guile 2.2 or later.
+
  -- Scheme Procedure: set-memory-port-write-buffer-size! memory-port
           size
      Set the size of the write buffer of '<gdb:memory-port>' MEMORY-PORT
      to SIZE.  The result is unspecified.
 
+     This procedure is deprecated and will be removed in GDB 11.  When
+     GDB is built with Guile 2.2 or later, you can call 'setvbuf'
+     instead.
+
    A memory port is closed like any other port, with 'close-port'.
 
    Combined with Guile's 'bytevectors', memory ports provide a lot of
@@ -2370,7 +3787,7 @@ can do something like the following.
 
 File: gdb.info,  Node: Iterators In Guile,  Prev: Memory Ports in Guile,  Up: Guile API
 
-23.3.3.25 Iterators In Guile
+23.4.3.25 Iterators In Guile
 ............................
 
 A simple iterator facility is provided to allow, for example, iterating
@@ -2472,7 +3889,7 @@ in using iterators.
 
 File: gdb.info,  Node: Guile Auto-loading,  Next: Guile Modules,  Prev: Guile API,  Up: Guile
 
-23.3.4 Guile Auto-loading
+23.4.4 Guile Auto-loading
 -------------------------
 
 When a new object file is read (for example, due to the 'file' command,
@@ -2520,7 +3937,7 @@ pretty-printers.
 
 File: gdb.info,  Node: Guile Modules,  Prev: Guile Auto-loading,  Up: Guile
 
-23.3.5 Guile Modules
+23.4.5 Guile Modules
 --------------------
 
 GDB comes with several modules to assist writing Guile code.
@@ -2533,7 +3950,7 @@ GDB comes with several modules to assist
 
 File: gdb.info,  Node: Guile Printing Module,  Next: Guile Types Module,  Up: Guile Modules
 
-23.3.5.1 Guile Printing Module
+23.4.5.1 Guile Printing Module
 ..............................
 
 This module provides a collection of utilities for working with
@@ -2556,7 +3973,7 @@ pretty-printers.
 
 File: gdb.info,  Node: Guile Types Module,  Prev: Guile Printing Module,  Up: Guile Modules
 
-23.3.5.2 Guile Types Module
+23.4.5.2 Guile Types Module
 ...........................
 
 This module provides a collection of utilities for working with
@@ -2597,19 +4014,17 @@ This module provides a collection of uti
 
 File: gdb.info,  Node: Auto-loading extensions,  Next: Multiple Extension Languages,  Prev: Guile,  Up: Extending GDB
 
-23.4 Auto-loading extensions
+23.5 Auto-loading extensions
 ============================
 
 GDB provides two mechanisms for automatically loading extensions when a
 new object file is read (for example, due to the 'file' command, or
-because the inferior has loaded a shared library): 'OBJFILE-gdb.EXT' and
-the '.debug_gdb_scripts' section of modern file formats like ELF.
-
-* Menu:
-
-* objfile-gdb.ext file: objfile-gdbdotext file.  The 'OBJFILE-gdb.EXT' file
-* .debug_gdb_scripts section: dotdebug_gdb_scripts section.  The '.debug_gdb_scripts' section
-* Which flavor to choose?::
+because the inferior has loaded a shared library): 'OBJFILE-gdb.EXT'
+(*note The 'OBJFILE-gdb.EXT' file: objfile-gdbdotext file.) and the
+'.debug_gdb_scripts' section of modern file formats like ELF (*note The
+'.debug_gdb_scripts' section: dotdebug_gdb_scripts section.).  For a
+discussion of the differences between these two approaches see *note
+Which flavor to choose?::.
 
    The auto-loading feature is useful for supplying application-specific
 debugging commands and features.
@@ -2623,10 +4038,16 @@ Auto-loading::.
    Note that loading of this script file also requires accordingly
 configured 'auto-load safe-path' (*note Auto-loading safe path::).
 
+* Menu:
+
+* objfile-gdbdotext file::		The 'OBJFILE-gdb.EXT' file
+* dotdebug_gdb_scripts section::	The '.debug_gdb_scripts' section
+* Which flavor to choose?::		Choosing between these approaches
+
 
 File: gdb.info,  Node: objfile-gdbdotext file,  Next: dotdebug_gdb_scripts section,  Up: Auto-loading extensions
 
-23.4.1 The 'OBJFILE-gdb.EXT' file
+23.5.1 The 'OBJFILE-gdb.EXT' file
 ---------------------------------
 
 When a new object file is read, GDB looks for a file named
@@ -2648,7 +4069,11 @@ readable, GDB will evaluate it as a scri
 language.
 
    If this file does not exist, then GDB will look for SCRIPT-NAME file
-in all of the directories as specified below.
+in all of the directories as specified below.  (On MS-Windows/MS-DOS,
+the drive letter of the executable's leading directories is converted to
+a one-letter subdirectory, i.e. 'd:/usr/bin/' is converted to
+'/d/usr/bin/', because Windows filesystems disallow colons in file
+names.)
 
    Note that loading of these files requires an accordingly configured
 'auto-load safe-path' (*note Auto-loading safe path::).
@@ -2700,7 +4125,7 @@ it is evaluated more than once.
 
 File: gdb.info,  Node: dotdebug_gdb_scripts section,  Next: Which flavor to choose?,  Prev: objfile-gdbdotext file,  Up: Auto-loading extensions
 
-23.4.2 The '.debug_gdb_scripts' section
+23.5.2 The '.debug_gdb_scripts' section
 ---------------------------------------
 
 For systems using file formats like ELF and COFF, when GDB loads a new
@@ -2718,7 +4143,7 @@ the extension language and whether the s
 'SECTION_SCRIPT_ID_PYTHON_TEXT = 4'
 'SECTION_SCRIPT_ID_SCHEME_TEXT = 6'
 
-23.4.2.1 Script File Entries
+23.5.2.1 Script File Entries
 ............................
 
 If the entry specifies a file, GDB will look for the file first in the
@@ -2753,7 +4178,7 @@ library using this header will get a ref
 and with the use of '"MS"' attributes on the section, the linker will
 remove duplicates.
 
-23.4.2.2 Script Text Entries
+23.5.2.2 Script Text Entries
 ............................
 
 Script text entries allow to put the executable script in the entry
@@ -2793,7 +4218,7 @@ safe-path' (*note Auto-loading safe path
 
 File: gdb.info,  Node: Which flavor to choose?,  Prev: dotdebug_gdb_scripts section,  Up: Auto-loading extensions
 
-23.4.3 Which flavor to choose?
+23.5.3 Which flavor to choose?
 ------------------------------
 
 Given the multiple ways of auto-loading extensions, it might not always
@@ -2837,16 +4262,16 @@ Benefits of the '.debug_gdb_scripts' way
      the top of the source tree to the source search path.
 
 
-File: gdb.info,  Node: Multiple Extension Languages,  Next: Aliases,  Prev: Auto-loading extensions,  Up: Extending GDB
+File: gdb.info,  Node: Multiple Extension Languages,  Prev: Auto-loading extensions,  Up: Extending GDB
 
-23.5 Multiple Extension Languages
+23.6 Multiple Extension Languages
 =================================
 
 The Guile and Python extension languages do not share any state, and
 generally do not interfere with each other.  There are some things to be
 aware of, however.
 
-23.5.1 Python comes first
+23.6.1 Python comes first
 -------------------------
 
 Python was GDB's first extension language, and to avoid breaking
@@ -2861,81 +4286,6 @@ to pretty-print an object then the error
 extension languages are not tried.
 
 
-File: gdb.info,  Node: Aliases,  Prev: Multiple Extension Languages,  Up: Extending GDB
-
-23.6 Creating new spellings of existing commands
-================================================
-
-It is often useful to define alternate spellings of existing commands.
-For example, if a new GDB command defined in Python has a long name to
-type, it is handy to have an abbreviated version of it that involves
-less typing.
-
-   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'
-
-   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.
-
-   The '-a' option specifies that the new alias is an abbreviation of
-the command.  Abbreviations are not shown in command lists displayed by
-the 'help' command.
-
-   The '--' option specifies the end of options, and is useful when
-ALIAS begins with a dash.
-
-   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 20
-     (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
-
-
 File: gdb.info,  Node: Interpreters,  Next: TUI,  Prev: Extending GDB,  Up: Top
 
 24 Command Interpreters
@@ -3021,14 +4371,6 @@ File: gdb.info,  Node: TUI,  Next: Emacs
 25 GDB Text User Interface
 **************************
 
-* Menu:
-
-* TUI Overview::                TUI overview
-* TUI Keys::                    TUI key bindings
-* TUI Single Key Mode::         TUI single key mode
-* TUI Commands::                TUI-specific commands
-* TUI Configuration::           TUI configuration variables
-
 The GDB Text User Interface (TUI) is a terminal interface which uses the
 'curses' library to show the source file, the assembly output, the
 program registers and GDB commands in separate text windows.  The TUI
@@ -3041,6 +4383,15 @@ various TUI commands and key bindings, s
 C-a'.  *Note TUI Commands: TUI Commands, and *note TUI Key Bindings: TUI
 Keys.
 
+* Menu:
+
+* TUI Overview::                TUI overview
+* TUI Keys::                    TUI key bindings
+* TUI Single Key Mode::         TUI single key mode
+* TUI Mouse Support::           TUI mouse support
+* TUI Commands::                TUI-specific commands
+* TUI Configuration::           TUI configuration variables
+
 
 File: gdb.info,  Node: TUI Overview,  Next: TUI Keys,  Up: TUI
 
@@ -3107,6 +4458,8 @@ layouts:
 
    * assembly and registers.
 
+   These are the standard layouts, but other layouts can be defined.
+
    A status line above the command window shows the following
 information:
 
@@ -3220,7 +4573,7 @@ readline key bindings such as 'C-p', 'C-
 the command window.
 
 
-File: gdb.info,  Node: TUI Single Key Mode,  Next: TUI Commands,  Prev: TUI Keys,  Up: TUI
+File: gdb.info,  Node: TUI Single Key Mode,  Next: TUI Mouse Support,  Prev: TUI Keys,  Up: TUI
 
 25.3 TUI Single Key Mode
 ========================
@@ -3277,9 +4630,29 @@ will be named 'SingleKey'.  This can be
 additional bindings to this keymap.
 
 
-File: gdb.info,  Node: TUI Commands,  Next: TUI Configuration,  Prev: TUI Single Key Mode,  Up: TUI
+File: gdb.info,  Node: TUI Mouse Support,  Next: TUI Commands,  Prev: TUI Single Key Mode,  Up: TUI
 
-25.4 TUI-specific Commands
+25.4 TUI Mouse Support
+======================
+
+If the curses library supports the mouse, the TUI supports mouse
+actions.
+
+   The mouse wheel scrolls the appropriate window under the mouse
+cursor.
+
+   The TUI itself does not directly support copying/pasting with the
+mouse.  However, on Unix terminals, you can typically press and hold the
+<SHIFT> key on your keyboard to temporarily bypass GDB's TUI and access
+the terminal's native mouse copy/paste functionality (commonly,
+click-drag-release or double-click to select text, middle-click to
+paste).  This copy/paste works with the terminal's selection buffer, as
+opposed to the TUI's buffer.
+
+
+File: gdb.info,  Node: TUI Commands,  Next: TUI Configuration,  Prev: TUI Mouse Support,  Up: TUI
+
+25.5 TUI-specific Commands
 ==========================
 
 The TUI has specific commands to control the text windows.  These
@@ -3304,11 +4677,59 @@ window management.
 'info win'
      List and give the size of all displayed windows.
 
+'tui new-layout NAME WINDOW WEIGHT [WINDOW WEIGHT...]'
+     Create a new TUI layout.  The new layout will be named NAME, and
+     can be accessed using the 'layout' command (see below).
+
+     Each WINDOW parameter is either the name of a window to display, or
+     a window description.  The windows will be displayed from top to
+     bottom in the order listed.
+
+     The names of the windows are the same as the ones given to the
+     'focus' command (see below); additional, the 'status' window can be
+     specified.  Note that, because it is of fixed height, the weight
+     assigned to the status window is of no importance.  It is
+     conventional to use '0' here.
+
+     A window description looks a bit like an invocation of 'tui
+     new-layout', and is of the form {['-horizontal']WINDOW WEIGHT
+     [WINDOW WEIGHT...]}.
+
+     This specifies a sub-layout.  If '-horizontal' is given, the
+     windows in this description will be arranged side-by-side, rather
+     than top-to-bottom.
+
+     Each WEIGHT is an integer.  It is the weight of this window
+     relative to all the other windows in the layout.  These numbers are
+     used to calculate how much of the screen is given to each window.
+
+     For example:
+
+          (gdb) tui new-layout example src 1 regs 1 status 0 cmd 1
+
+     Here, the new layout is called 'example'.  It shows the source and
+     register windows, followed by the status window, and then finally
+     the command window.  The non-status windows all have the same
+     weight, so the terminal will be split into three roughly equal
+     sections.
+
+     Here is a more complex example, showing a horizontal layout:
+
+          (gdb) tui new-layout example {-horizontal src 1 asm 1} 2 status 0 cmd 1
+
+     This will result in side-by-side source and assembly windows; with
+     the status and command window being beneath these, filling the
+     entire width of the terminal.  Because they have weight 2, the
+     source and assembly windows will be twice the height of the command
+     window.
+
 'layout NAME'
-     Changes which TUI windows are displayed.  In each layout the
-     command window is always displayed, the NAME parameter controls
-     which additional windows are displayed, and can be any of the
-     following:
+     Changes which TUI windows are displayed.  The NAME parameter
+     controls which layout is shown.  It can be either one of the
+     built-in layout names, or the name of a layout defined by the user
+     using 'tui new-layout'.
+
+     The built-in layouts are as follows:
 
      'next'
           Display the next layout.
@@ -3395,7 +4816,7 @@ window management.
 
 File: gdb.info,  Node: TUI Configuration,  Prev: TUI Commands,  Up: TUI
 
-25.5 TUI Configuration Variables
+25.6 TUI Configuration Variables
 ================================
 
 Several configuration variables control the appearance of TUI windows.
@@ -3591,6 +5012,33 @@ File: gdb.info,  Node: GDB/MI,  Next: An
 27 The GDB/MI Interface
 ***********************
 
+* Menu:
+
+* GDB/MI General Design::
+* GDB/MI Command Syntax::
+* GDB/MI Compatibility with CLI::
+* GDB/MI Development and Front Ends::
+* GDB/MI Output Records::
+* GDB/MI Simple Examples::
+* GDB/MI Command Description Format::
+* GDB/MI Breakpoint Commands::
+* GDB/MI Catchpoint Commands::
+* GDB/MI Program Context::
+* GDB/MI Thread Commands::
+* GDB/MI Ada Tasking Commands::
+* GDB/MI Program Execution::
+* GDB/MI Stack Manipulation::
+* GDB/MI Variable Objects::
+* GDB/MI Data Manipulation::
+* GDB/MI Tracepoint Commands::
+* GDB/MI Symbol Query::
+* GDB/MI File Commands::
+* GDB/MI Target Manipulation::
+* GDB/MI File Transfer Commands::
+* GDB/MI Ada Exceptions Commands::
+* GDB/MI Support Commands::
+* GDB/MI Miscellaneous Commands::
+
 Function and Purpose
 ====================
 
@@ -3875,10 +5323,10 @@ of available top-level thread groups can
 '-list-thread-groups --available'.  In general, the content of a thread
 group may be only retrieved only after attaching to that thread group.
 
-   Thread groups are related to inferiors (*note Inferiors and
-Programs::).  Each inferior corresponds to a thread group of a special
-type 'process', and some additional operations are permitted on such
-thread groups.
+   Thread groups are related to inferiors (*note Inferiors Connections
+and Programs::).  Each inferior corresponds to a thread group of a
+special type 'process', and some additional operations are permitted on
+such thread groups.
 
 
 File: gdb.info,  Node: GDB/MI Command Syntax,  Next: GDB/MI Compatibility with CLI,  Prev: GDB/MI General Design,  Up: GDB/MI
@@ -4123,13 +5571,12 @@ the latest MI version.
 
    Since '--interpreter=mi' always points to the latest MI version, it
 is recommended that front ends request a specific version of MI when
-launching GDB (e.g.  '--interpreter=mi2') to make sure they get an
+launching GDB (e.g. '--interpreter=mi2') to make sure they get an
 interpreter with the MI version they expect.
 
-   The following table gives a summary of the the released versions of
-the MI interface: the version number, the version of GDB in which it
-first appeared and the breaking changes compared to the previous
-version.
+   The following table gives a summary of the released versions of the
+MI interface: the version number, the version of GDB in which it first
+appeared and the breaking changes compared to the previous version.
 
 MI   GDB  Breaking changes
 versionversion
@@ -4269,9 +5716,9 @@ activity (e.g., target stopped).
 
 '*running,thread-id="THREAD"'
      The target is now running.  The THREAD field can be the global
-     thread ID of the the thread that is now running, and it can be
-     'all' if all threads are running.  The frontend should assume that
-     no interaction with a running thread is possible after this
+     thread ID of the thread that is now running, and it can be 'all' if
+     all threads are running.  The frontend should assume that no
+     interaction with a running thread is possible after this
      notification is produced.  The frontend should not assume that this
      notification is output only once for any command.  GDB may emit
      this notification several times, either for different threads,
@@ -4605,9 +6052,14 @@ with the following fields:
      number of the location within that breakpoint.
 
 'enabled'
-     This indicates whether the location is enabled, in which case the
-     value is 'y', or disabled, in which case the value is 'n'.  Note
-     that this is not the same as the field 'enable'.
+     There are three possible values, with the following meanings:
+     'y'
+          The location is enabled.
+     'n'
+          The location is disabled by the user.
+     'N'
+          The location is disabled because the breakpoint condition is
+          invalid at this location.
 
 'addr'
      The address of this location as an hexidecimal number.
@@ -4948,11 +6400,14 @@ The '-break-condition' Command
 Synopsis
 ........
 
-      -break-condition NUMBER EXPR
+      -break-condition [ --force ] NUMBER [ EXPR ]
 
    Breakpoint NUMBER will stop the program only if the condition in EXPR
 is true.  The condition becomes part of the '-break-list' output (see
-the description of the '-break-list' command below).
+the description of the '-break-list' command below).  If the '--force'
+flag is passed, the condition is forcibly defined even when it is
+invalid for all locations of breakpoint NUMBER.  If the EXPR argument is
+omitted, breakpoint NUMBER becomes unconditional.
 
 GDB Command
 ...........
@@ -5114,8 +6569,8 @@ The '-break-insert' Command
 Synopsis
 ........
 
-      -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ]
-         [ -c CONDITION ] [ -i IGNORE-COUNT ]
+      -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ] [ --qualified ]
+         [ -c CONDITION ] [ --force-condition ] [ -i IGNORE-COUNT ]
          [ -p THREAD-ID ] [ LOCATION ]
 
 If specified, LOCATION, can be one of:
@@ -5163,11 +6618,17 @@ The possible optional parameters of this
      used together with '-h', a fast tracepoint is created.
 '-c CONDITION'
      Make the breakpoint conditional on CONDITION.
+'--force-condition'
+     Forcibly define the breakpoint even if the condition is invalid at
+     all of the breakpoint locations.
 '-i IGNORE-COUNT'
      Initialize the IGNORE-COUNT.
 '-p THREAD-ID'
      Restrict the breakpoint to the thread with the specified global
      THREAD-ID.
+'--qualified'
+     This option makes GDB interpret a function name specified as a
+     complete fully-qualified name.
 
 Result
 ......
@@ -5221,13 +6682,13 @@ The '-dprintf-insert' Command
 Synopsis
 ........
 
-      -dprintf-insert [ -t ] [ -f ] [ -d ]
-         [ -c CONDITION ] [ -i IGNORE-COUNT ]
+      -dprintf-insert [ -t ] [ -f ] [ -d ] [ --qualified ]
+         [ -c CONDITION ] [--force-condition] [ -i IGNORE-COUNT ]
          [ -p THREAD-ID ] [ LOCATION ] [ FORMAT ]
          [ ARGUMENT ]
 
-If supplied, LOCATION may be specified the same way as for the
-'-break-insert' command.  *Note -break-insert::.
+If supplied, LOCATION and '--qualified' may be specified the same way as
+for the '-break-insert' command.  *Note -break-insert::.
 
    The possible optional parameters of this command are:
 
@@ -5242,6 +6703,9 @@ If supplied, LOCATION may be specified t
      Create a disabled breakpoint.
 '-c CONDITION'
      Make the breakpoint conditional on CONDITION.
+'--force-condition'
+     Forcibly define the breakpoint even if the condition is invalid at
+     all of the breakpoint locations.
 '-i IGNORE-COUNT'
      Set the ignore count of the breakpoint (*note ignore count:
      Conditions.) to IGNORE-COUNT.
@@ -6676,1761 +8140,3 @@ Example
      arch="i386:x86_64"}
      (gdb)
 
-
-File: gdb.info,  Node: GDB/MI Stack Manipulation,  Next: GDB/MI Variable Objects,  Prev: GDB/MI Program Execution,  Up: GDB/MI
-
-27.14 GDB/MI Stack Manipulation Commands
-========================================
-
-The '-enable-frame-filters' Command
------------------------------------
-
-     -enable-frame-filters
-
-   GDB allows Python-based frame filters to affect the output of the MI
-commands relating to stack traces.  As there is no way to implement this
-in a fully backward-compatible way, a front end must request that this
-functionality be enabled.
-
-   Once enabled, this feature cannot be disabled.
-
-   Note that if Python support has not been compiled into GDB, this
-command will still succeed (and do nothing).
-
-The '-stack-info-frame' Command
--------------------------------
-
-Synopsis
-........
-
-      -stack-info-frame
-
-   Get info on the selected frame.
-
-GDB Command
-...........
-
-The corresponding GDB command is 'info frame' or 'frame' (without
-arguments).
-
-Example
-.......
-
-     (gdb)
-     -stack-info-frame
-     ^done,frame={level="1",addr="0x0001076c",func="callee3",
-     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17",
-     arch="i386:x86_64"}
-     (gdb)
-
-The '-stack-info-depth' Command
--------------------------------
-
-Synopsis
-........
-
-      -stack-info-depth [ MAX-DEPTH ]
-
-   Return the depth of the stack.  If the integer argument MAX-DEPTH is
-specified, do not count beyond MAX-DEPTH frames.
-
-GDB Command
-...........
-
-There's no equivalent GDB command.
-
-Example
-.......
-
-For a stack with frame levels 0 through 11:
-
-     (gdb)
-     -stack-info-depth
-     ^done,depth="12"
-     (gdb)
-     -stack-info-depth 4
-     ^done,depth="4"
-     (gdb)
-     -stack-info-depth 12
-     ^done,depth="12"
-     (gdb)
-     -stack-info-depth 11
-     ^done,depth="11"
-     (gdb)
-     -stack-info-depth 13
-     ^done,depth="12"
-     (gdb)
-
-The '-stack-list-arguments' Command
------------------------------------
-
-Synopsis
-........
-
-      -stack-list-arguments [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
-         [ LOW-FRAME HIGH-FRAME ]
-
-   Display a list of the arguments for the frames between LOW-FRAME and
-HIGH-FRAME (inclusive).  If LOW-FRAME and HIGH-FRAME are not provided,
-list the arguments for the whole call stack.  If the two arguments are
-equal, show the single frame at the corresponding level.  It is an error
-if LOW-FRAME is larger than the actual number of frames.  On the other
-hand, HIGH-FRAME may be larger than the actual number of frames, in
-which case only existing frames will be returned.
-
-   If PRINT-VALUES is 0 or '--no-values', print only the names of the
-variables; if it is 1 or '--all-values', print also their values; and if
-it is 2 or '--simple-values', print the name, type and value for simple
-data types, and the name and type for arrays, structures and unions.  If
-the option '--no-frame-filters' is supplied, then Python frame filters
-will not be executed.
-
-   If the '--skip-unavailable' option is specified, arguments that are
-not available are not listed.  Partially available arguments are still
-displayed, however.
-
-   Use of this command to obtain arguments in a single frame is
-deprecated in favor of the '-stack-list-variables' command.
-
-GDB Command
-...........
-
-GDB does not have an equivalent command.  'gdbtk' has a 'gdb_get_args'
-command which partially overlaps with the functionality of
-'-stack-list-arguments'.
-
-Example
-.......
-
-     (gdb)
-     -stack-list-frames
-     ^done,
-     stack=[
-     frame={level="0",addr="0x00010734",func="callee4",
-     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
-     arch="i386:x86_64"},
-     frame={level="1",addr="0x0001076c",func="callee3",
-     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17",
-     arch="i386:x86_64"},
-     frame={level="2",addr="0x0001078c",func="callee2",
-     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22",
-     arch="i386:x86_64"},
-     frame={level="3",addr="0x000107b4",func="callee1",
-     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27",
-     arch="i386:x86_64"},
-     frame={level="4",addr="0x000107e0",func="main",
-     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32",
-     arch="i386:x86_64"}]
-     (gdb)
-     -stack-list-arguments 0
-     ^done,
-     stack-args=[
-     frame={level="0",args=[]},
-     frame={level="1",args=[name="strarg"]},
-     frame={level="2",args=[name="intarg",name="strarg"]},
-     frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
-     frame={level="4",args=[]}]
-     (gdb)
-     -stack-list-arguments 1
-     ^done,
-     stack-args=[
-     frame={level="0",args=[]},
-     frame={level="1",
-      args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
-     frame={level="2",args=[
-     {name="intarg",value="2"},
-     {name="strarg",value="0x11940 \"A string argument.\""}]},
-     {frame={level="3",args=[
-     {name="intarg",value="2"},
-     {name="strarg",value="0x11940 \"A string argument.\""},
-     {name="fltarg",value="3.5"}]},
-     frame={level="4",args=[]}]
-     (gdb)
-     -stack-list-arguments 0 2 2
-     ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
-     (gdb)
-     -stack-list-arguments 1 2 2
-     ^done,stack-args=[frame={level="2",
-     args=[{name="intarg",value="2"},
-     {name="strarg",value="0x11940 \"A string argument.\""}]}]
-     (gdb)
-
-The '-stack-list-frames' Command
---------------------------------
-
-Synopsis
-........
-
-      -stack-list-frames [ --no-frame-filters LOW-FRAME HIGH-FRAME ]
-
-   List the frames currently on the stack.  For each frame it displays
-the following info:
-
-'LEVEL'
-     The frame number, 0 being the topmost frame, i.e., the innermost
-     function.
-'ADDR'
-     The '$pc' value for that frame.
-'FUNC'
-     Function name.
-'FILE'
-     File name of the source file where the function lives.
-'FULLNAME'
-     The full file name of the source file where the function lives.
-'LINE'
-     Line number corresponding to the '$pc'.
-'FROM'
-     The shared library where this function is defined.  This is only
-     given if the frame's function is not known.
-'ARCH'
-     Frame's architecture.
-
-   If invoked without arguments, this command prints a backtrace for the
-whole stack.  If given two integer arguments, it shows the frames whose
-levels are between the two arguments (inclusive).  If the two arguments
-are equal, it shows the single frame at the corresponding level.  It is
-an error if LOW-FRAME is larger than the actual number of frames.  On
-the other hand, HIGH-FRAME may be larger than the actual number of
-frames, in which case only existing frames will be returned.  If the
-option '--no-frame-filters' is supplied, then Python frame filters will
-not be executed.
-
-GDB Command
-...........
-
-The corresponding GDB commands are 'backtrace' and 'where'.
-
-Example
-.......
-
-Full stack backtrace:
-
-     (gdb)
-     -stack-list-frames
-     ^done,stack=
-     [frame={level="0",addr="0x0001076c",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11",
-       arch="i386:x86_64"},
-     frame={level="1",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="2",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="3",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="4",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="5",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="6",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="7",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="8",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="9",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="10",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="11",addr="0x00010738",func="main",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4",
-       arch="i386:x86_64"}]
-     (gdb)
-
-   Show frames between LOW_FRAME and HIGH_FRAME:
-
-     (gdb)
-     -stack-list-frames 3 5
-     ^done,stack=
-     [frame={level="3",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="4",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"},
-     frame={level="5",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"}]
-     (gdb)
-
-   Show a single frame:
-
-     (gdb)
-     -stack-list-frames 3 3
-     ^done,stack=
-     [frame={level="3",addr="0x000107a4",func="foo",
-       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
-       arch="i386:x86_64"}]
-     (gdb)
-
-The '-stack-list-locals' Command
---------------------------------
-
-Synopsis
-........
-
-      -stack-list-locals [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
-
-   Display the local variable names for the selected frame.  If
-PRINT-VALUES is 0 or '--no-values', print only the names of the
-variables; if it is 1 or '--all-values', print also their values; and if
-it is 2 or '--simple-values', print the name, type and value for simple
-data types, and the name and type for arrays, structures and unions.  In
-this last case, a frontend can immediately display the value of simple
-data types and create variable objects for other data types when the
-user wishes to explore their values in more detail.  If the option
-'--no-frame-filters' is supplied, then Python frame filters will not be
-executed.
-
-   If the '--skip-unavailable' option is specified, local variables that
-are not available are not listed.  Partially available local variables
-are still displayed, however.
-
-   This command is deprecated in favor of the '-stack-list-variables'
-command.
-
-GDB Command
-...........
-
-'info locals' in GDB, 'gdb_get_locals' in 'gdbtk'.
-
-Example
-.......
-
-     (gdb)
-     -stack-list-locals 0
-     ^done,locals=[name="A",name="B",name="C"]
-     (gdb)
-     -stack-list-locals --all-values
-     ^done,locals=[{name="A",value="1"},{name="B",value="2"},
-       {name="C",value="{1, 2, 3}"}]
-     -stack-list-locals --simple-values
-     ^done,locals=[{name="A",type="int",value="1"},
-       {name="B",type="int",value="2"},{name="C",type="int [3]"}]
-     (gdb)
-
-The '-stack-list-variables' Command
------------------------------------
-
-Synopsis
-........
-
-      -stack-list-variables [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
-
-   Display the names of local variables and function arguments for the
-selected frame.  If PRINT-VALUES is 0 or '--no-values', print only the
-names of the variables; if it is 1 or '--all-values', print also their
-values; and if it is 2 or '--simple-values', print the name, type and
-value for simple data types, and the name and type for arrays,
-structures and unions.  If the option '--no-frame-filters' is supplied,
-then Python frame filters will not be executed.
-
-   If the '--skip-unavailable' option is specified, local variables and
-arguments that are not available are not listed.  Partially available
-arguments and local variables are still displayed, however.
-
-Example
-.......
-
-     (gdb)
-     -stack-list-variables --thread 1 --frame 0 --all-values
-     ^done,variables=[{name="x",value="11"},{name="s",value="{a = 1, b = 2}"}]
-     (gdb)
-
-The '-stack-select-frame' Command
----------------------------------
-
-Synopsis
-........
-
-      -stack-select-frame FRAMENUM
-
-   Change the selected frame.  Select a different frame FRAMENUM on the
-stack.
-
-   This command in deprecated in favor of passing the '--frame' option
-to every command.
-
-GDB Command
-...........
-
-The corresponding GDB commands are 'frame', 'up', 'down',
-'select-frame', 'up-silent', and 'down-silent'.
-
-Example
-.......
-
-     (gdb)
-     -stack-select-frame 2
-     ^done
-     (gdb)
-
-
-File: gdb.info,  Node: GDB/MI Variable Objects,  Next: GDB/MI Data Manipulation,  Prev: GDB/MI Stack Manipulation,  Up: GDB/MI
-
-27.15 GDB/MI Variable Objects
-=============================
-
-Introduction to Variable Objects
---------------------------------
-
-Variable objects are "object-oriented" MI interface for examining and
-changing values of expressions.  Unlike some other MI interfaces that
-work with expressions, variable objects are specifically designed for
-simple and efficient presentation in the frontend.  A variable object is
-identified by string name.  When a variable object is created, the
-frontend specifies the expression for that variable object.  The
-expression can be a simple variable, or it can be an arbitrary complex
-expression, and can even involve CPU registers.  After creating a
-variable object, the frontend can invoke other variable object
-operations--for example to obtain or change the value of a variable
-object, or to change display format.
-
-   Variable objects have hierarchical tree structure.  Any variable
-object that corresponds to a composite type, such as structure in C, has
-a number of child variable objects, for example corresponding to each
-element of a structure.  A child variable object can itself have
-children, recursively.  Recursion ends when we reach leaf variable
-objects, which always have built-in types.  Child variable objects are
-created only by explicit request, so if a frontend is not interested in
-the children of a particular variable object, no child will be created.
-
-   For a leaf variable object it is possible to obtain its value as a
-string, or set the value from a string.  String value can be also
-obtained for a non-leaf variable object, but it's generally a string
-that only indicates the type of the object, and does not list its
-contents.  Assignment to a non-leaf variable object is not allowed.
-
-   A frontend does not need to read the values of all variable objects
-each time the program stops.  Instead, MI provides an update command
-that lists all variable objects whose values has changed since the last
-update operation.  This considerably reduces the amount of data that
-must be transferred to the frontend.  As noted above, children variable
-objects are created on demand, and only leaf variable objects have a
-real value.  As result, gdb will read target memory only for leaf
-variables that frontend has created.
-
-   The automatic update is not always desirable.  For example, a
-frontend might want to keep a value of some expression for future
-reference, and never update it.  For another example, fetching memory is
-relatively slow for embedded targets, so a frontend might want to
-disable automatic update for the variables that are either not visible
-on the screen, or "closed".  This is possible using so called "frozen
-variable objects".  Such variable objects are never implicitly updated.
-
-   Variable objects can be either "fixed" or "floating".  For the fixed
-variable object, the expression is parsed when the variable object is
-created, including associating identifiers to specific variables.  The
-meaning of expression never changes.  For a floating variable object the
-values of variables whose names appear in the expressions are
-re-evaluated every time in the context of the current frame.  Consider
-this example:
-
-     void do_work(...)
-     {
-             struct work_state state;
-
-             if (...)
-                do_work(...);
-     }
-
-   If a fixed variable object for the 'state' variable is created in
-this function, and we enter the recursive call, the variable object will
-report the value of 'state' in the top-level 'do_work' invocation.  On
-the other hand, a floating variable object will report the value of
-'state' in the current frame.
-
-   If an expression specified when creating a fixed variable object
-refers to a local variable, the variable object becomes bound to the
-thread and frame in which the variable object is created.  When such
-variable object is updated, GDB makes sure that the thread/frame
-combination the variable object is bound to still exists, and
-re-evaluates the variable object in context of that thread/frame.
-
-   The following is the complete set of GDB/MI operations defined to
-access this functionality:
-
-*Operation*                   *Description*
-                              
-'-enable-pretty-printing'     enable Python-based pretty-printing
-'-var-create'                 create a variable object
-'-var-delete'                 delete the variable object and/or its
-                              children
-'-var-set-format'             set the display format of this variable
-'-var-show-format'            show the display format of this variable
-'-var-info-num-children'      tells how many children this object has
-'-var-list-children'          return a list of the object's children
-'-var-info-type'              show the type of this variable object
-'-var-info-expression'        print parent-relative expression that
-                              this variable object represents
-'-var-info-path-expression'   print full expression that this variable
-                              object represents
-'-var-show-attributes'        is this variable editable?  does it exist
-                              here?
-'-var-evaluate-expression'    get the value of this variable
-'-var-assign'                 set the value of this variable
-'-var-update'                 update the variable and its children
-'-var-set-frozen'             set frozenness attribute
-'-var-set-update-range'       set range of children to display on
-                              update
-
-   In the next subsection we describe each operation in detail and
-suggest how it can be used.
-
-Description And Use of Operations on Variable Objects
------------------------------------------------------
-
-The '-enable-pretty-printing' Command
--------------------------------------
-
-     -enable-pretty-printing
-
-   GDB allows Python-based visualizers to affect the output of the MI
-variable object commands.  However, because there was no way to
-implement this in a fully backward-compatible way, a front end must
-request that this functionality be enabled.
-
-   Once enabled, this feature cannot be disabled.
-
-   Note that if Python support has not been compiled into GDB, this
-command will still succeed (and do nothing).
-
-   This feature is currently (as of GDB 7.0) experimental, and may work
-differently in future versions of GDB.
-
-The '-var-create' Command
--------------------------
-
-Synopsis
-........
-
-      -var-create {NAME | "-"}
-         {FRAME-ADDR | "*" | "@"} EXPRESSION
-
-   This operation creates a variable object, which allows the monitoring
-of a variable, the result of an expression, a memory cell or a CPU
-register.
-
-   The NAME parameter is the string by which the object can be
-referenced.  It must be unique.  If '-' is specified, the varobj system
-will generate a string "varNNNNNN" automatically.  It will be unique
-provided that one does not specify NAME of that format.  The command
-fails if a duplicate name is found.
-
-   The frame under which the expression should be evaluated can be
-specified by FRAME-ADDR.  A '*' indicates that the current frame should
-be used.  A '@' indicates that a floating variable object must be
-created.
-
-   EXPRESSION is any expression valid on the current language set (must
-not begin with a '*'), or one of the following:
-
-   * '*ADDR', where ADDR is the address of a memory cell
-
-   * '*ADDR-ADDR' -- a memory address range (TBD)
-
-   * '$REGNAME' -- a CPU register name
-
-   A varobj's contents may be provided by a Python-based pretty-printer.
-In this case the varobj is known as a "dynamic varobj".  Dynamic varobjs
-have slightly different semantics in some cases.  If the
-'-enable-pretty-printing' command is not sent, then GDB will never
-create a dynamic varobj.  This ensures backward compatibility for
-existing clients.
-
-Result
-......
-
-This operation returns attributes of the newly-created varobj.  These
-are:
-
-'name'
-     The name of the varobj.
-
-'numchild'
-     The number of children of the varobj.  This number is not
-     necessarily reliable for a dynamic varobj.  Instead, you must
-     examine the 'has_more' attribute.
-
-'value'
-     The varobj's scalar value.  For a varobj whose type is some sort of
-     aggregate (e.g., a 'struct'), or for a dynamic varobj, this value
-     will not be interesting.
-
-'type'
-     The varobj's type.  This is a string representation of the type, as
-     would be printed by the GDB CLI. If 'print object' (*note set print
-     object: Print Settings.) is set to 'on', the _actual_ (derived)
-     type of the object is shown rather than the _declared_ one.
-
-'thread-id'
-     If a variable object is bound to a specific thread, then this is
-     the thread's global identifier.
-
-'has_more'
-     For a dynamic varobj, this indicates whether there appear to be any
-     children available.  For a non-dynamic varobj, this will be 0.
-
-'dynamic'
-     This attribute will be present and have the value '1' if the varobj
-     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
-     this attribute will not be present.
-
-'displayhint'
-     A dynamic varobj can supply a display hint to the front end.  The
-     value comes directly from the Python pretty-printer object's
-     'display_hint' method.  *Note Pretty Printing API::.
-
-   Typical output will look like this:
-
-      name="NAME",numchild="N",type="TYPE",thread-id="M",
-       has_more="HAS_MORE"
-
-The '-var-delete' Command
--------------------------
-
-Synopsis
-........
-
-      -var-delete [ -c ] NAME
-
-   Deletes a previously created variable object and all of its children.
-With the '-c' option, just deletes the children.
-
-   Returns an error if the object NAME is not found.
-
-The '-var-set-format' Command
------------------------------
-
-Synopsis
-........
-
-      -var-set-format NAME FORMAT-SPEC
-
-   Sets the output format for the value of the object NAME to be
-FORMAT-SPEC.
-
-   The syntax for the FORMAT-SPEC is as follows:
-
-      FORMAT-SPEC ==>
-      {binary | decimal | hexadecimal | octal | natural | zero-hexadecimal}
-
-   The natural format is the default format choosen automatically based
-on the variable type (like decimal for an 'int', hex for pointers,
-etc.).
-
-   The zero-hexadecimal format has a representation similar to
-hexadecimal but with padding zeroes to the left of the value.  For
-example, a 32-bit hexadecimal value of 0x1234 would be represented as
-0x00001234 in the zero-hexadecimal format.
-
-   For a variable with children, the format is set only on the variable
-itself, and the children are not affected.
-
-The '-var-show-format' Command
-------------------------------
-
-Synopsis
-........
-
-      -var-show-format NAME
-
-   Returns the format used to display the value of the object NAME.
-
-      FORMAT ==>
-      FORMAT-SPEC
-
-The '-var-info-num-children' Command
-------------------------------------
-
-Synopsis
-........
-
-      -var-info-num-children NAME
-
-   Returns the number of children of a variable object NAME:
-
-      numchild=N
-
-   Note that this number is not completely reliable for a dynamic
-varobj.  It will return the current number of children, but more
-children may be available.
-
-The '-var-list-children' Command
---------------------------------
-
-Synopsis
-........
-
-      -var-list-children [PRINT-VALUES] NAME [FROM TO]
-
-   Return a list of the children of the specified variable object and
-create variable objects for them, if they do not already exist.  With a
-single argument or if PRINT-VALUES has a value of 0 or '--no-values',
-print only the names of the variables; if PRINT-VALUES is 1 or
-'--all-values', also print their values; and if it is 2 or
-'--simple-values' print the name and value for simple data types and
-just the name for arrays, structures and unions.
-
-   FROM and TO, if specified, indicate the range of children to report.
-If FROM or TO is less than zero, the range is reset and all children
-will be reported.  Otherwise, children starting at FROM (zero-based) and
-up to and excluding TO will be reported.
-
-   If a child range is requested, it will only affect the current call
-to '-var-list-children', but not future calls to '-var-update'.  For
-this, you must instead use '-var-set-update-range'.  The intent of this
-approach is to enable a front end to implement any update approach it
-likes; for example, scrolling a view may cause the front end to request
-more children with '-var-list-children', and then the front end could
-call '-var-set-update-range' with a different range to ensure that
-future updates are restricted to just the visible items.
-
-   For each child the following results are returned:
-
-NAME
-     Name of the variable object created for this child.
-
-EXP
-     The expression to be shown to the user by the front end to
-     designate this child.  For example this may be the name of a
-     structure member.
-
-     For a dynamic varobj, this value cannot be used to form an
-     expression.  There is no way to do this at all with a dynamic
-     varobj.
-
-     For C/C++ structures there are several pseudo children returned to
-     designate access qualifiers.  For these pseudo children EXP is
-     'public', 'private', or 'protected'.  In this case the type and
-     value are not present.
-
-     A dynamic varobj will not report the access qualifying
-     pseudo-children, regardless of the language.  This information is
-     not available at all with a dynamic varobj.
-
-NUMCHILD
-     Number of children this child has.  For a dynamic varobj, this will
-     be 0.
-
-TYPE
-     The type of the child.  If 'print object' (*note set print object:
-     Print Settings.) is set to 'on', the _actual_ (derived) type of the
-     object is shown rather than the _declared_ one.
-
-VALUE
-     If values were requested, this is the value.
-
-THREAD-ID
-     If this variable object is associated with a thread, this is the
-     thread's global thread id.  Otherwise this result is not present.
-
-FROZEN
-     If the variable object is frozen, this variable will be present
-     with a value of 1.
-
-DISPLAYHINT
-     A dynamic varobj can supply a display hint to the front end.  The
-     value comes directly from the Python pretty-printer object's
-     'display_hint' method.  *Note Pretty Printing API::.
-
-DYNAMIC
-     This attribute will be present and have the value '1' if the varobj
-     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
-     this attribute will not be present.
-
-   The result may have its own attributes:
-
-'displayhint'
-     A dynamic varobj can supply a display hint to the front end.  The
-     value comes directly from the Python pretty-printer object's
-     'display_hint' method.  *Note Pretty Printing API::.
-
-'has_more'
-     This is an integer attribute which is nonzero if there are children
-     remaining after the end of the selected range.
-
-Example
-.......
-
-     (gdb)
-      -var-list-children n
-      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
-      numchild=N,type=TYPE},(repeats N times)]
-     (gdb)
-      -var-list-children --all-values n
-      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
-      numchild=N,value=VALUE,type=TYPE},(repeats N times)]
-
-The '-var-info-type' Command
-----------------------------
-
-Synopsis
-........
-
-      -var-info-type NAME
-
-   Returns the type of the specified variable NAME.  The type is
-returned as a string in the same format as it is output by the GDB CLI:
-
-      type=TYPENAME
-
-The '-var-info-expression' Command
-----------------------------------
-
-Synopsis
-........
-
-      -var-info-expression NAME
-
-   Returns a string that is suitable for presenting this variable object
-in user interface.  The string is generally not valid expression in the
-current language, and cannot be evaluated.
-
-   For example, if 'a' is an array, and variable object 'A' was created
-for 'a', then we'll get this output:
-
-     (gdb) -var-info-expression A.1
-     ^done,lang="C",exp="1"
-
-Here, the value of 'lang' is the language name, which can be found in
-*note Supported Languages::.
-
-   Note that the output of the '-var-list-children' command also
-includes those expressions, so the '-var-info-expression' command is of
-limited use.
-
-The '-var-info-path-expression' Command
----------------------------------------
-
-Synopsis
-........
-
-      -var-info-path-expression NAME
-
-   Returns an expression that can be evaluated in the current context
-and will yield the same value that a variable object has.  Compare this
-with the '-var-info-expression' command, which result can be used only
-for UI presentation.  Typical use of the '-var-info-path-expression'
-command is creating a watchpoint from a variable object.
-
-   This command is currently not valid for children of a dynamic varobj,
-and will give an error when invoked on one.
-
-   For example, suppose 'C' is a C++ class, derived from class 'Base',
-and that the 'Base' class has a member called 'm_size'.  Assume a
-variable 'c' is has the type of 'C' and a variable object 'C' was
-created for variable 'c'.  Then, we'll get this output:
-     (gdb) -var-info-path-expression C.Base.public.m_size
-     ^done,path_expr=((Base)c).m_size)
-
-The '-var-show-attributes' Command
-----------------------------------
-
-Synopsis
-........
-
-      -var-show-attributes NAME
-
-   List attributes of the specified variable object NAME:
-
-      status=ATTR [ ( ,ATTR )* ]
-
-where ATTR is '{ { editable | noneditable } | TBD }'.
-
-The '-var-evaluate-expression' Command
---------------------------------------
-
-Synopsis
-........
-
-      -var-evaluate-expression [-f FORMAT-SPEC] NAME
-
-   Evaluates the expression that is represented by the specified
-variable object and returns its value as a string.  The format of the
-string can be specified with the '-f' option.  The possible values of
-this option are the same as for '-var-set-format' (*note
--var-set-format::).  If the '-f' option is not specified, the current
-display format will be used.  The current display format can be changed
-using the '-var-set-format' command.
-
-      value=VALUE
-
-   Note that one must invoke '-var-list-children' for a variable before
-the value of a child variable can be evaluated.
-
-The '-var-assign' Command
--------------------------
-
-Synopsis
-........
-
-      -var-assign NAME EXPRESSION
-
-   Assigns the value of EXPRESSION to the variable object specified by
-NAME.  The object must be 'editable'.  If the variable's value is
-altered by the assign, the variable will show up in any subsequent
-'-var-update' list.
-
-Example
-.......
-
-     (gdb)
-     -var-assign var1 3
-     ^done,value="3"
-     (gdb)
-     -var-update *
-     ^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
-     (gdb)
-
-The '-var-update' Command
--------------------------
-
-Synopsis
-........
-
-      -var-update [PRINT-VALUES] {NAME | "*"}
-
-   Reevaluate the expressions corresponding to the variable object NAME
-and all its direct and indirect children, and return the list of
-variable objects whose values have changed; NAME must be a root variable
-object.  Here, "changed" means that the result of
-'-var-evaluate-expression' before and after the '-var-update' is
-different.  If '*' is used as the variable object names, all existing
-variable objects are updated, except for frozen ones (*note
--var-set-frozen::).  The option PRINT-VALUES determines whether both
-names and values, or just names are printed.  The possible values of
-this option are the same as for '-var-list-children' (*note
--var-list-children::).  It is recommended to use the '--all-values'
-option, to reduce the number of MI commands needed on each program stop.
-
-   With the '*' parameter, if a variable object is bound to a currently
-running thread, it will not be updated, without any diagnostic.
-
-   If '-var-set-update-range' was previously used on a varobj, then only
-the selected range of children will be reported.
-
-   '-var-update' reports all the changed varobjs in a tuple named
-'changelist'.
-
-   Each item in the change list is itself a tuple holding:
-
-'name'
-     The name of the varobj.
-
-'value'
-     If values were requested for this update, then this field will be
-     present and will hold the value of the varobj.
-
-'in_scope'
-     This field is a string which may take one of three values:
-
-     '"true"'
-          The variable object's current value is valid.
-
-     '"false"'
-          The variable object does not currently hold a valid value but
-          it may hold one in the future if its associated expression
-          comes back into scope.
-
-     '"invalid"'
-          The variable object no longer holds a valid value.  This can
-          occur when the executable file being debugged has changed,
-          either through recompilation or by using the GDB 'file'
-          command.  The front end should normally choose to delete these
-          variable objects.
-
-     In the future new values may be added to this list so the front
-     should be prepared for this possibility.  *Note GDB/MI Development
-     and Front Ends: GDB/MI Development and Front Ends.
-
-'type_changed'
-     This is only present if the varobj is still valid.  If the type
-     changed, then this will be the string 'true'; otherwise it will be
-     'false'.
-
-     When a varobj's type changes, its children are also likely to have
-     become incorrect.  Therefore, the varobj's children are
-     automatically deleted when this attribute is 'true'.  Also, the
-     varobj's update range, when set using the '-var-set-update-range'
-     command, is unset.
-
-'new_type'
-     If the varobj's type changed, then this field will be present and
-     will hold the new type.
-
-'new_num_children'
-     For a dynamic varobj, if the number of children changed, or if the
-     type changed, this will be the new number of children.
-
-     The 'numchild' field in other varobj responses is generally not
-     valid for a dynamic varobj - it will show the number of children
-     that GDB knows about, but because dynamic varobjs lazily
-     instantiate their children, this will not reflect the number of
-     children which may be available.
-
-     The 'new_num_children' attribute only reports changes to the number
-     of children known by GDB.  This is the only way to detect whether
-     an update has removed children (which necessarily can only happen
-     at the end of the update range).
-
-'displayhint'
-     The display hint, if any.
-
-'has_more'
-     This is an integer value, which will be 1 if there are more
-     children available outside the varobj's update range.
-
-'dynamic'
-     This attribute will be present and have the value '1' if the varobj
-     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
-     this attribute will not be present.
-
-'new_children'
-     If new children were added to a dynamic varobj within the selected
-     update range (as set by '-var-set-update-range'), then they will be
-     listed in this attribute.
-
-Example
-.......
-
-     (gdb)
-     -var-assign var1 3
-     ^done,value="3"
-     (gdb)
-     -var-update --all-values var1
-     ^done,changelist=[{name="var1",value="3",in_scope="true",
-     type_changed="false"}]
-     (gdb)
-
-The '-var-set-frozen' Command
------------------------------
-
-Synopsis
-........
-
-      -var-set-frozen NAME FLAG
-
-   Set the frozenness flag on the variable object NAME.  The FLAG
-parameter should be either '1' to make the variable frozen or '0' to
-make it unfrozen.  If a variable object is frozen, then neither itself,
-nor any of its children, are implicitly updated by '-var-update' of a
-parent variable or by '-var-update *'.  Only '-var-update' of the
-variable itself will update its value and values of its children.  After
-a variable object is unfrozen, it is implicitly updated by all
-subsequent '-var-update' operations.  Unfreezing a variable does not
-update it, only subsequent '-var-update' does.
-
-Example
-.......
-
-     (gdb)
-     -var-set-frozen V 1
-     ^done
-     (gdb)
-
-The '-var-set-update-range' command
------------------------------------
-
-Synopsis
-........
-
-      -var-set-update-range NAME FROM TO
-
-   Set the range of children to be returned by future invocations of
-'-var-update'.
-
-   FROM and TO indicate the range of children to report.  If FROM or TO
-is less than zero, the range is reset and all children will be reported.
-Otherwise, children starting at FROM (zero-based) and up to and
-excluding TO will be reported.
-
-Example
-.......
-
-     (gdb)
-     -var-set-update-range V 1 2
-     ^done
-
-The '-var-set-visualizer' command
----------------------------------
-
-Synopsis
-........
-
-      -var-set-visualizer NAME VISUALIZER
-
-   Set a visualizer for the variable object NAME.
-
-   VISUALIZER is the visualizer to use.  The special value 'None' means
-to disable any visualizer in use.
-
-   If not 'None', VISUALIZER must be a Python expression.  This
-expression must evaluate to a callable object which accepts a single
-argument.  GDB will call this object with the value of the varobj NAME
-as an argument (this is done so that the same Python pretty-printing
-code can be used for both the CLI and MI). When called, this object must
-return an object which conforms to the pretty-printing interface (*note
-Pretty Printing API::).
-
-   The pre-defined function 'gdb.default_visualizer' may be used to
-select a visualizer by following the built-in process (*note Selecting
-Pretty-Printers::).  This is done automatically when a varobj is
-created, and so ordinarily is not needed.
-
-   This feature is only available if Python support is enabled.  The MI
-command '-list-features' (*note GDB/MI Support Commands::) can be used
-to check this.
-
-Example
-.......
-
-Resetting the visualizer:
-
-     (gdb)
-     -var-set-visualizer V None
-     ^done
-
-   Reselecting the default (type-based) visualizer:
-
-     (gdb)
-     -var-set-visualizer V gdb.default_visualizer
-     ^done
-
-   Suppose 'SomeClass' is a visualizer class.  A lambda expression can
-be used to instantiate this class for a varobj:
-
-     (gdb)
-     -var-set-visualizer V "lambda val: SomeClass()"
-     ^done
-
-
-File: gdb.info,  Node: GDB/MI Data Manipulation,  Next: GDB/MI Tracepoint Commands,  Prev: GDB/MI Variable Objects,  Up: GDB/MI
-
-27.16 GDB/MI Data Manipulation
-==============================
-
-This section describes the GDB/MI commands that manipulate data: examine
-memory and registers, evaluate expressions, etc.
-
-   For details about what an addressable memory unit is, *note
-addressable memory unit::.
-
-The '-data-disassemble' Command
--------------------------------
-
-Synopsis
-........
-
-      -data-disassemble
-         [ -s START-ADDR -e END-ADDR ]
-       | [ -a ADDR ]
-       | [ -f FILENAME -l LINENUM [ -n LINES ] ]
-       -- MODE
-
-Where:
-
-'START-ADDR'
-     is the beginning address (or '$pc')
-'END-ADDR'
-     is the end address
-'ADDR'
-     is an address anywhere within (or the name of) the function to
-     disassemble.  If an address is specified, the whole function
-     surrounding that address will be disassembled.  If a name is
-     specified, the whole function with that name will be disassembled.
-'FILENAME'
-     is the name of the file to disassemble
-'LINENUM'
-     is the line number to disassemble around
-'LINES'
-     is the number of disassembly lines to be produced.  If it is -1,
-     the whole function will be disassembled, in case no END-ADDR is
-     specified.  If END-ADDR is specified as a non-zero value, and LINES
-     is lower than the number of disassembly lines between START-ADDR
-     and END-ADDR, only LINES lines are displayed; if LINES is higher
-     than the number of lines between START-ADDR and END-ADDR, only the
-     lines up to END-ADDR are displayed.
-'MODE'
-     is one of:
-        * 0 disassembly only
-        * 1 mixed source and disassembly (deprecated)
-        * 2 disassembly with raw opcodes
-        * 3 mixed source and disassembly with raw opcodes (deprecated)
-        * 4 mixed source and disassembly
-        * 5 mixed source and disassembly with raw opcodes
-
-     Modes 1 and 3 are deprecated.  The output is "source centric" which
-     hasn't proved useful in practice.  *Note Machine Code::, for a
-     discussion of the difference between '/m' and '/s' output of the
-     'disassemble' command.
-
-Result
-......
-
-The result of the '-data-disassemble' command will be a list named
-'asm_insns', the contents of this list depend on the MODE used with the
-'-data-disassemble' command.
-
-   For modes 0 and 2 the 'asm_insns' list contains tuples with the
-following fields:
-
-'address'
-     The address at which this instruction was disassembled.
-
-'func-name'
-     The name of the function this instruction is within.
-
-'offset'
-     The decimal offset in bytes from the start of 'func-name'.
-
-'inst'
-     The text disassembly for this 'address'.
-
-'opcodes'
-     This field is only present for modes 2, 3 and 5.  This contains the
-     raw opcode bytes for the 'inst' field.
-
-   For modes 1, 3, 4 and 5 the 'asm_insns' list contains tuples named
-'src_and_asm_line', each of which has the following fields:
-
-'line'
-     The line number within 'file'.
-
-'file'
-     The file name from the compilation unit.  This might be an absolute
-     file name or a relative file name depending on the compile command
-     used.
-
-'fullname'
-     Absolute file name of 'file'.  It is converted to a canonical form
-     using the source file search path (*note Specifying Source
-     Directories: Source Path.) and after resolving all the symbolic
-     links.
-
-     If the source file is not found this field will contain the path as
-     present in the debug information.
-
-'line_asm_insn'
-     This is a list of tuples containing the disassembly for 'line' in
-     'file'.  The fields of each tuple are the same as for
-     '-data-disassemble' in MODE 0 and 2, so 'address', 'func-name',
-     'offset', 'inst', and optionally 'opcodes'.
-
-   Note that whatever included in the 'inst' field, is not manipulated
-directly by GDB/MI, i.e., it is not possible to adjust its format.
-
-GDB Command
-...........
-
-The corresponding GDB command is 'disassemble'.
-
-Example
-.......
-
-Disassemble from the current value of '$pc' to '$pc + 20':
-
-     (gdb)
-     -data-disassemble -s $pc -e "$pc + 20" -- 0
-     ^done,
-     asm_insns=[
-     {address="0x000107c0",func-name="main",offset="4",
-     inst="mov  2, %o0"},
-     {address="0x000107c4",func-name="main",offset="8",
-     inst="sethi  %hi(0x11800), %o2"},
-     {address="0x000107c8",func-name="main",offset="12",
-     inst="or  %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
-     {address="0x000107cc",func-name="main",offset="16",
-     inst="sethi  %hi(0x11800), %o2"},
-     {address="0x000107d0",func-name="main",offset="20",
-     inst="or  %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}]
-     (gdb)
-
-   Disassemble the whole 'main' function.  Line 32 is part of 'main'.
-
-     -data-disassemble -f basics.c -l 32 -- 0
-     ^done,asm_insns=[
-     {address="0x000107bc",func-name="main",offset="0",
-     inst="save  %sp, -112, %sp"},
-     {address="0x000107c0",func-name="main",offset="4",
-     inst="mov   2, %o0"},
-     {address="0x000107c4",func-name="main",offset="8",
-     inst="sethi %hi(0x11800), %o2"},
-     [...]
-     {address="0x0001081c",func-name="main",offset="96",inst="ret "},
-     {address="0x00010820",func-name="main",offset="100",inst="restore "}]
-     (gdb)
-
-   Disassemble 3 instructions from the start of 'main':
-
-     (gdb)
-     -data-disassemble -f basics.c -l 32 -n 3 -- 0
-     ^done,asm_insns=[
-     {address="0x000107bc",func-name="main",offset="0",
-     inst="save  %sp, -112, %sp"},
-     {address="0x000107c0",func-name="main",offset="4",
-     inst="mov  2, %o0"},
-     {address="0x000107c4",func-name="main",offset="8",
-     inst="sethi  %hi(0x11800), %o2"}]
-     (gdb)
-
-   Disassemble 3 instructions from the start of 'main' in mixed mode:
-
-     (gdb)
-     -data-disassemble -f basics.c -l 32 -n 3 -- 1
-     ^done,asm_insns=[
-     src_and_asm_line={line="31",
-     file="../../../src/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c",
-     line_asm_insn=[{address="0x000107bc",
-     func-name="main",offset="0",inst="save  %sp, -112, %sp"}]},
-     src_and_asm_line={line="32",
-     file="../../../src/gdb/testsuite/gdb.mi/basics.c",
-     fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c",
-     line_asm_insn=[{address="0x000107c0",
-     func-name="main",offset="4",inst="mov  2, %o0"},
-     {address="0x000107c4",func-name="main",offset="8",
-     inst="sethi  %hi(0x11800), %o2"}]}]
-     (gdb)
-
-The '-data-evaluate-expression' Command
----------------------------------------
-
-Synopsis
-........
-
-      -data-evaluate-expression EXPR
-
-   Evaluate EXPR as an expression.  The expression could contain an
-inferior function call.  The function call will execute synchronously.
-If the expression contains spaces, it must be enclosed in double quotes.
-
-GDB Command
-...........
-
-The corresponding GDB commands are 'print', 'output', and 'call'.  In
-'gdbtk' only, there's a corresponding 'gdb_eval' command.
-
-Example
-.......
-
-In the following example, the numbers that precede the commands are the
-"tokens" described in *note GDB/MI Command Syntax: GDB/MI Command
-Syntax.  Notice how GDB/MI returns the same tokens in its output.
-
-     211-data-evaluate-expression A
-     211^done,value="1"
-     (gdb)
-     311-data-evaluate-expression &A
-     311^done,value="0xefffeb7c"
-     (gdb)
-     411-data-evaluate-expression A+3
-     411^done,value="4"
-     (gdb)
-     511-data-evaluate-expression "A + 3"
-     511^done,value="4"
-     (gdb)
-
-The '-data-list-changed-registers' Command
-------------------------------------------
-
-Synopsis
-........
-
-      -data-list-changed-registers
-
-   Display a list of the registers that have changed.
-
-GDB Command
-...........
-
-GDB doesn't have a direct analog for this command; 'gdbtk' has the
-corresponding command 'gdb_changed_register_list'.
-
-Example
-.......
-
-On a PPC MBX board:
-
-     (gdb)
-     -exec-continue
-     ^running
-
-     (gdb)
-     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={
-     func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c",
-     line="5",arch="powerpc"}
-     (gdb)
-     -data-list-changed-registers
-     ^done,changed-registers=["0","1","2","4","5","6","7","8","9",
-     "10","11","13","14","15","16","17","18","19","20","21","22","23",
-     "24","25","26","27","28","30","31","64","65","66","67","69"]
-     (gdb)
-
-The '-data-list-register-names' Command
----------------------------------------
-
-Synopsis
-........
-
-      -data-list-register-names [ ( REGNO )+ ]
-
-   Show a list of register names for the current target.  If no
-arguments are given, it shows a list of the names of all the registers.
-If integer numbers are given as arguments, it will print a list of the
-names of the registers corresponding to the arguments.  To ensure
-consistency between a register name and its number, the output list may
-include empty register names.
-
-GDB Command
-...........
-
-GDB does not have a command which corresponds to
-'-data-list-register-names'.  In 'gdbtk' there is a corresponding
-command 'gdb_regnames'.
-
-Example
-.......
-
-For the PPC MBX board:
-     (gdb)
-     -data-list-register-names
-     ^done,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","r26","r27","r28","r29",
-     "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
-     "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
-     "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
-     "", "pc","ps","cr","lr","ctr","xer"]
-     (gdb)
-     -data-list-register-names 1 2 3
-     ^done,register-names=["r1","r2","r3"]
-     (gdb)
-
-The '-data-list-register-values' Command
-----------------------------------------
-
-Synopsis
-........
-
-      -data-list-register-values
-         [ --skip-unavailable ] FMT [ ( REGNO )*]
-
-   Display the registers' contents.  The format according to which the
-registers' contents are to be returned is given by FMT, followed by an
-optional list of numbers specifying the registers to display.  A missing
-list of numbers indicates that the contents of all the registers must be
-returned.  The '--skip-unavailable' option indicates that only the
-available registers are to be returned.
-
-   Allowed formats for FMT are:
-
-'x'
-     Hexadecimal
-'o'
-     Octal
-'t'
-     Binary
-'d'
-     Decimal
-'r'
-     Raw
-'N'
-     Natural
-
-GDB Command
-...........
-
-The corresponding GDB commands are 'info reg', 'info all-reg', and (in
-'gdbtk') 'gdb_fetch_registers'.
-
-Example
-.......
-
-For a PPC MBX board (note: line breaks are for readability only, they
-don't appear in the actual output):
-
-     (gdb)
-     -data-list-register-values r 64 65
-     ^done,register-values=[{number="64",value="0xfe00a300"},
-     {number="65",value="0x00029002"}]
-     (gdb)
-     -data-list-register-values x
-     ^done,register-values=[{number="0",value="0xfe0043c8"},
-     {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
-     {number="3",value="0x0"},{number="4",value="0xa"},
-     {number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
-     {number="7",value="0xfe011e98"},{number="8",value="0x2"},
-     {number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
-     {number="11",value="0x1"},{number="12",value="0x0"},
-     {number="13",value="0x4544"},{number="14",value="0xffdfffff"},
-     {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
-     {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
-     {number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
-     {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
-     {number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
-     {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
-     {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
-     {number="29",value="0x0"},{number="30",value="0xfe010000"},
-     {number="31",value="0x0"},{number="32",value="0x0"},
-     {number="33",value="0x0"},{number="34",value="0x0"},
-     {number="35",value="0x0"},{number="36",value="0x0"},
-     {number="37",value="0x0"},{number="38",value="0x0"},
-     {number="39",value="0x0"},{number="40",value="0x0"},
-     {number="41",value="0x0"},{number="42",value="0x0"},
-     {number="43",value="0x0"},{number="44",value="0x0"},
-     {number="45",value="0x0"},{number="46",value="0x0"},
-     {number="47",value="0x0"},{number="48",value="0x0"},
-     {number="49",value="0x0"},{number="50",value="0x0"},
-     {number="51",value="0x0"},{number="52",value="0x0"},
-     {number="53",value="0x0"},{number="54",value="0x0"},
-     {number="55",value="0x0"},{number="56",value="0x0"},
-     {number="57",value="0x0"},{number="58",value="0x0"},
-     {number="59",value="0x0"},{number="60",value="0x0"},
-     {number="61",value="0x0"},{number="62",value="0x0"},
-     {number="63",value="0x0"},{number="64",value="0xfe00a300"},
-     {number="65",value="0x29002"},{number="66",value="0x202f04b5"},
-     {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
-     {number="69",value="0x20002b03"}]
-     (gdb)
-
-The '-data-read-memory' Command
--------------------------------
-
-This command is deprecated, use '-data-read-memory-bytes' instead.
-
-Synopsis
-........
-
-      -data-read-memory [ -o BYTE-OFFSET ]
-        ADDRESS WORD-FORMAT WORD-SIZE
-        NR-ROWS NR-COLS [ ASCHAR ]
-
-where:
-
-'ADDRESS'
-     An expression specifying the address of the first memory word to be
-     read.  Complex expressions containing embedded white space should
-     be quoted using the C convention.
-
-'WORD-FORMAT'
-     The format to be used to print the memory words.  The notation is
-     the same as for GDB's 'print' command (*note Output Formats: Output
-     Formats.).
-
-'WORD-SIZE'
-     The size of each memory word in bytes.
-
-'NR-ROWS'
-     The number of rows in the output table.
-
-'NR-COLS'
-     The number of columns in the output table.
-
-'ASCHAR'
-     If present, indicates that each row should include an ASCII dump.
-     The value of ASCHAR is used as a padding character when a byte is
-     not a member of the printable ASCII character set (printable ASCII
-     characters are those whose code is between 32 and 126,
-     inclusively).
-
-'BYTE-OFFSET'
-     An offset to add to the ADDRESS before fetching memory.
-
-   This command displays memory contents as a table of NR-ROWS by
-NR-COLS words, each word being WORD-SIZE bytes.  In total, 'NR-ROWS *
-NR-COLS * WORD-SIZE' bytes are read (returned as 'total-bytes').  Should
-less than the requested number of bytes be returned by the target, the
-missing words are identified using 'N/A'.  The number of bytes read from
-the target is returned in 'nr-bytes' and the starting address used to
-read memory in 'addr'.
-
-   The address of the next/previous row or page is available in
-'next-row' and 'prev-row', 'next-page' and 'prev-page'.
-
-GDB Command
-...........
-
-The corresponding GDB command is 'x'.  'gdbtk' has 'gdb_get_mem' memory
-read command.
-
-Example
-.......
-
-Read six bytes of memory starting at 'bytes+6' but then offset by '-6'
-bytes.  Format as three rows of two columns.  One byte per word.
-Display each word in hex.
-
-     (gdb)
-     9-data-read-memory -o -6 -- bytes+6 x 1 3 2
-     9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
-     next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
-     prev-page="0x0000138a",memory=[
-     {addr="0x00001390",data=["0x00","0x01"]},
-     {addr="0x00001392",data=["0x02","0x03"]},
-     {addr="0x00001394",data=["0x04","0x05"]}]
-     (gdb)
-
-   Read two bytes of memory starting at address 'shorts + 64' and
-display as a single word formatted in decimal.
-
-     (gdb)
-     5-data-read-memory shorts+64 d 2 1 1
-     5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
-     next-row="0x00001512",prev-row="0x0000150e",
-     next-page="0x00001512",prev-page="0x0000150e",memory=[
-     {addr="0x00001510",data=["128"]}]
-     (gdb)
-
-   Read thirty two bytes of memory starting at 'bytes+16' and format as
-eight rows of four columns.  Include a string encoding with 'x' used as
-the non-printable character.
-
-     (gdb)
-     4-data-read-memory bytes+16 x 1 8 4 x
-     4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
-     next-row="0x000013c0",prev-row="0x0000139c",
-     next-page="0x000013c0",prev-page="0x00001380",memory=[
-     {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"},
-     {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"},
-     {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"},
-     {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"},
-     {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"},
-     {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"},
-     {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"},
-     {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}]
-     (gdb)
-
-The '-data-read-memory-bytes' Command
--------------------------------------
-
-Synopsis
-........
-
-      -data-read-memory-bytes [ -o OFFSET ]
-        ADDRESS COUNT
-
-where:
-
-'ADDRESS'
-     An expression specifying the address of the first addressable
-     memory unit to be read.  Complex expressions containing embedded
-     white space should be quoted using the C convention.
-
-'COUNT'
-     The number of addressable memory units to read.  This should be an
-     integer literal.
-
-'OFFSET'
-     The offset relative to ADDRESS at which to start reading.  This
-     should be an integer literal.  This option is provided so that a
-     frontend is not required to first evaluate address and then perform
-     address arithmetics itself.
-
-   This command attempts to read all accessible memory regions in the
-specified range.  First, all regions marked as unreadable in the memory
-map (if one is defined) will be skipped.  *Note Memory Region
-Attributes::.  Second, GDB will attempt to read the remaining regions.
-For each one, if reading full region results in an errors, GDB will try
-to read a subset of the region.
-
-   In general, every single memory unit in the region may be readable or
-not, and the only way to read every readable unit is to try a read at
-every address, which is not practical.  Therefore, GDB will attempt to
-read all accessible memory units at either beginning or the end of the
-region, using a binary division scheme.  This heuristic works well for
-reading across a memory map boundary.  Note that if a region has a
-readable range that is neither at the beginning or the end, GDB will not
-read it.
-
-   The result record (*note GDB/MI Result Records::) that is output of
-the command includes a field named 'memory' whose content is a list of
-tuples.  Each tuple represent a successfully read memory block and has
-the following fields:
-
-'begin'
-     The start address of the memory block, as hexadecimal literal.
-
-'end'
-     The end address of the memory block, as hexadecimal literal.
-
-'offset'
-     The offset of the memory block, as hexadecimal literal, relative to
-     the start address passed to '-data-read-memory-bytes'.
-
-'contents'
-     The contents of the memory block, in hex.
-
-GDB Command
-...........
-
-The corresponding GDB command is 'x'.
-
-Example
-.......
-
-     (gdb)
-     -data-read-memory-bytes &a 10
-     ^done,memory=[{begin="0xbffff154",offset="0x00000000",
-                   end="0xbffff15e",
-                   contents="01000000020000000300"}]
-     (gdb)
-
-The '-data-write-memory-bytes' Command
---------------------------------------
-
-Synopsis
-........
-
-      -data-write-memory-bytes ADDRESS CONTENTS
-      -data-write-memory-bytes ADDRESS CONTENTS [COUNT]
-
-where:
-
-'ADDRESS'
-     An expression specifying the address of the first addressable
-     memory unit to be written.  Complex expressions containing embedded
-     white space should be quoted using the C convention.
-
-'CONTENTS'
-     The hex-encoded data to write.  It is an error if CONTENTS does not
-     represent an integral number of addressable memory units.
-
-'COUNT'
-     Optional argument indicating the number of addressable memory units
-     to be written.  If COUNT is greater than CONTENTS' length, GDB will
-     repeatedly write CONTENTS until it fills COUNT memory units.
-
-GDB Command
-...........
-
-There's no corresponding GDB command.
-
-Example
-.......
-
-     (gdb)
-     -data-write-memory-bytes &a "aabbccdd"
-     ^done
-     (gdb)
-
-     (gdb)
-     -data-write-memory-bytes &a "aabbccdd" 16e
-     ^done
-     (gdb)
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-6 ./gdb/doc/gdb.info-6
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-6	2020-03-07 02:11:36.000000000 +0000
+++ ./gdb/doc/gdb.info-6	2021-12-16 02:00:31.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,1764 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: GDB/MI Stack Manipulation,  Next: GDB/MI Variable Objects,  Prev: GDB/MI Program Execution,  Up: GDB/MI
+
+27.14 GDB/MI Stack Manipulation Commands
+========================================
+
+The '-enable-frame-filters' Command
+-----------------------------------
+
+     -enable-frame-filters
+
+   GDB allows Python-based frame filters to affect the output of the MI
+commands relating to stack traces.  As there is no way to implement this
+in a fully backward-compatible way, a front end must request that this
+functionality be enabled.
+
+   Once enabled, this feature cannot be disabled.
+
+   Note that if Python support has not been compiled into GDB, this
+command will still succeed (and do nothing).
+
+The '-stack-info-frame' Command
+-------------------------------
+
+Synopsis
+........
+
+      -stack-info-frame
+
+   Get info on the selected frame.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'info frame' or 'frame' (without
+arguments).
+
+Example
+.......
+
+     (gdb)
+     -stack-info-frame
+     ^done,frame={level="1",addr="0x0001076c",func="callee3",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17",
+     arch="i386:x86_64"}
+     (gdb)
+
+The '-stack-info-depth' Command
+-------------------------------
+
+Synopsis
+........
+
+      -stack-info-depth [ MAX-DEPTH ]
+
+   Return the depth of the stack.  If the integer argument MAX-DEPTH is
+specified, do not count beyond MAX-DEPTH frames.
+
+GDB Command
+...........
+
+There's no equivalent GDB command.
+
+Example
+.......
+
+For a stack with frame levels 0 through 11:
+
+     (gdb)
+     -stack-info-depth
+     ^done,depth="12"
+     (gdb)
+     -stack-info-depth 4
+     ^done,depth="4"
+     (gdb)
+     -stack-info-depth 12
+     ^done,depth="12"
+     (gdb)
+     -stack-info-depth 11
+     ^done,depth="11"
+     (gdb)
+     -stack-info-depth 13
+     ^done,depth="12"
+     (gdb)
+
+The '-stack-list-arguments' Command
+-----------------------------------
+
+Synopsis
+........
+
+      -stack-list-arguments [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
+         [ LOW-FRAME HIGH-FRAME ]
+
+   Display a list of the arguments for the frames between LOW-FRAME and
+HIGH-FRAME (inclusive).  If LOW-FRAME and HIGH-FRAME are not provided,
+list the arguments for the whole call stack.  If the two arguments are
+equal, show the single frame at the corresponding level.  It is an error
+if LOW-FRAME is larger than the actual number of frames.  On the other
+hand, HIGH-FRAME may be larger than the actual number of frames, in
+which case only existing frames will be returned.
+
+   If PRINT-VALUES is 0 or '--no-values', print only the names of the
+variables; if it is 1 or '--all-values', print also their values; and if
+it is 2 or '--simple-values', print the name, type and value for simple
+data types, and the name and type for arrays, structures and unions.  If
+the option '--no-frame-filters' is supplied, then Python frame filters
+will not be executed.
+
+   If the '--skip-unavailable' option is specified, arguments that are
+not available are not listed.  Partially available arguments are still
+displayed, however.
+
+   Use of this command to obtain arguments in a single frame is
+deprecated in favor of the '-stack-list-variables' command.
+
+GDB Command
+...........
+
+GDB does not have an equivalent command.  'gdbtk' has a 'gdb_get_args'
+command which partially overlaps with the functionality of
+'-stack-list-arguments'.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-frames
+     ^done,
+     stack=[
+     frame={level="0",addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
+     arch="i386:x86_64"},
+     frame={level="1",addr="0x0001076c",func="callee3",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17",
+     arch="i386:x86_64"},
+     frame={level="2",addr="0x0001078c",func="callee2",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22",
+     arch="i386:x86_64"},
+     frame={level="3",addr="0x000107b4",func="callee1",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27",
+     arch="i386:x86_64"},
+     frame={level="4",addr="0x000107e0",func="main",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32",
+     arch="i386:x86_64"}]
+     (gdb)
+     -stack-list-arguments 0
+     ^done,
+     stack-args=[
+     frame={level="0",args=[]},
+     frame={level="1",args=[name="strarg"]},
+     frame={level="2",args=[name="intarg",name="strarg"]},
+     frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
+     frame={level="4",args=[]}]
+     (gdb)
+     -stack-list-arguments 1
+     ^done,
+     stack-args=[
+     frame={level="0",args=[]},
+     frame={level="1",
+      args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
+     frame={level="2",args=[
+     {name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""}]},
+     {frame={level="3",args=[
+     {name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""},
+     {name="fltarg",value="3.5"}]},
+     frame={level="4",args=[]}]
+     (gdb)
+     -stack-list-arguments 0 2 2
+     ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
+     (gdb)
+     -stack-list-arguments 1 2 2
+     ^done,stack-args=[frame={level="2",
+     args=[{name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""}]}]
+     (gdb)
+
+The '-stack-list-frames' Command
+--------------------------------
+
+Synopsis
+........
+
+      -stack-list-frames [ --no-frame-filters LOW-FRAME HIGH-FRAME ]
+
+   List the frames currently on the stack.  For each frame it displays
+the following info:
+
+'LEVEL'
+     The frame number, 0 being the topmost frame, i.e., the innermost
+     function.
+'ADDR'
+     The '$pc' value for that frame.
+'FUNC'
+     Function name.
+'FILE'
+     File name of the source file where the function lives.
+'FULLNAME'
+     The full file name of the source file where the function lives.
+'LINE'
+     Line number corresponding to the '$pc'.
+'FROM'
+     The shared library where this function is defined.  This is only
+     given if the frame's function is not known.
+'ARCH'
+     Frame's architecture.
+
+   If invoked without arguments, this command prints a backtrace for the
+whole stack.  If given two integer arguments, it shows the frames whose
+levels are between the two arguments (inclusive).  If the two arguments
+are equal, it shows the single frame at the corresponding level.  It is
+an error if LOW-FRAME is larger than the actual number of frames.  On
+the other hand, HIGH-FRAME may be larger than the actual number of
+frames, in which case only existing frames will be returned.  If the
+option '--no-frame-filters' is supplied, then Python frame filters will
+not be executed.
+
+GDB Command
+...........
+
+The corresponding GDB commands are 'backtrace' and 'where'.
+
+Example
+.......
+
+Full stack backtrace:
+
+     (gdb)
+     -stack-list-frames
+     ^done,stack=
+     [frame={level="0",addr="0x0001076c",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11",
+       arch="i386:x86_64"},
+     frame={level="1",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="2",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="4",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="5",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="6",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="7",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="8",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="9",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="10",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="11",addr="0x00010738",func="main",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4",
+       arch="i386:x86_64"}]
+     (gdb)
+
+   Show frames between LOW_FRAME and HIGH_FRAME:
+
+     (gdb)
+     -stack-list-frames 3 5
+     ^done,stack=
+     [frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="4",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"},
+     frame={level="5",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"}]
+     (gdb)
+
+   Show a single frame:
+
+     (gdb)
+     -stack-list-frames 3 3
+     ^done,stack=
+     [frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14",
+       arch="i386:x86_64"}]
+     (gdb)
+
+The '-stack-list-locals' Command
+--------------------------------
+
+Synopsis
+........
+
+      -stack-list-locals [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
+
+   Display the local variable names for the selected frame.  If
+PRINT-VALUES is 0 or '--no-values', print only the names of the
+variables; if it is 1 or '--all-values', print also their values; and if
+it is 2 or '--simple-values', print the name, type and value for simple
+data types, and the name and type for arrays, structures and unions.  In
+this last case, a frontend can immediately display the value of simple
+data types and create variable objects for other data types when the
+user wishes to explore their values in more detail.  If the option
+'--no-frame-filters' is supplied, then Python frame filters will not be
+executed.
+
+   If the '--skip-unavailable' option is specified, local variables that
+are not available are not listed.  Partially available local variables
+are still displayed, however.
+
+   This command is deprecated in favor of the '-stack-list-variables'
+command.
+
+GDB Command
+...........
+
+'info locals' in GDB, 'gdb_get_locals' in 'gdbtk'.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-locals 0
+     ^done,locals=[name="A",name="B",name="C"]
+     (gdb)
+     -stack-list-locals --all-values
+     ^done,locals=[{name="A",value="1"},{name="B",value="2"},
+       {name="C",value="{1, 2, 3}"}]
+     -stack-list-locals --simple-values
+     ^done,locals=[{name="A",type="int",value="1"},
+       {name="B",type="int",value="2"},{name="C",type="int [3]"}]
+     (gdb)
+
+The '-stack-list-variables' Command
+-----------------------------------
+
+Synopsis
+........
+
+      -stack-list-variables [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
+
+   Display the names of local variables and function arguments for the
+selected frame.  If PRINT-VALUES is 0 or '--no-values', print only the
+names of the variables; if it is 1 or '--all-values', print also their
+values; and if it is 2 or '--simple-values', print the name, type and
+value for simple data types, and the name and type for arrays,
+structures and unions.  If the option '--no-frame-filters' is supplied,
+then Python frame filters will not be executed.
+
+   If the '--skip-unavailable' option is specified, local variables and
+arguments that are not available are not listed.  Partially available
+arguments and local variables are still displayed, however.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-variables --thread 1 --frame 0 --all-values
+     ^done,variables=[{name="x",value="11"},{name="s",value="{a = 1, b = 2}"}]
+     (gdb)
+
+The '-stack-select-frame' Command
+---------------------------------
+
+Synopsis
+........
+
+      -stack-select-frame FRAMENUM
+
+   Change the selected frame.  Select a different frame FRAMENUM on the
+stack.
+
+   This command in deprecated in favor of passing the '--frame' option
+to every command.
+
+GDB Command
+...........
+
+The corresponding GDB commands are 'frame', 'up', 'down',
+'select-frame', 'up-silent', and 'down-silent'.
+
+Example
+.......
+
+     (gdb)
+     -stack-select-frame 2
+     ^done
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Variable Objects,  Next: GDB/MI Data Manipulation,  Prev: GDB/MI Stack Manipulation,  Up: GDB/MI
+
+27.15 GDB/MI Variable Objects
+=============================
+
+Introduction to Variable Objects
+--------------------------------
+
+Variable objects are "object-oriented" MI interface for examining and
+changing values of expressions.  Unlike some other MI interfaces that
+work with expressions, variable objects are specifically designed for
+simple and efficient presentation in the frontend.  A variable object is
+identified by string name.  When a variable object is created, the
+frontend specifies the expression for that variable object.  The
+expression can be a simple variable, or it can be an arbitrary complex
+expression, and can even involve CPU registers.  After creating a
+variable object, the frontend can invoke other variable object
+operations--for example to obtain or change the value of a variable
+object, or to change display format.
+
+   Variable objects have hierarchical tree structure.  Any variable
+object that corresponds to a composite type, such as structure in C, has
+a number of child variable objects, for example corresponding to each
+element of a structure.  A child variable object can itself have
+children, recursively.  Recursion ends when we reach leaf variable
+objects, which always have built-in types.  Child variable objects are
+created only by explicit request, so if a frontend is not interested in
+the children of a particular variable object, no child will be created.
+
+   For a leaf variable object it is possible to obtain its value as a
+string, or set the value from a string.  String value can be also
+obtained for a non-leaf variable object, but it's generally a string
+that only indicates the type of the object, and does not list its
+contents.  Assignment to a non-leaf variable object is not allowed.
+
+   A frontend does not need to read the values of all variable objects
+each time the program stops.  Instead, MI provides an update command
+that lists all variable objects whose values has changed since the last
+update operation.  This considerably reduces the amount of data that
+must be transferred to the frontend.  As noted above, children variable
+objects are created on demand, and only leaf variable objects have a
+real value.  As result, gdb will read target memory only for leaf
+variables that frontend has created.
+
+   The automatic update is not always desirable.  For example, a
+frontend might want to keep a value of some expression for future
+reference, and never update it.  For another example, fetching memory is
+relatively slow for embedded targets, so a frontend might want to
+disable automatic update for the variables that are either not visible
+on the screen, or "closed".  This is possible using so called "frozen
+variable objects".  Such variable objects are never implicitly updated.
+
+   Variable objects can be either "fixed" or "floating".  For the fixed
+variable object, the expression is parsed when the variable object is
+created, including associating identifiers to specific variables.  The
+meaning of expression never changes.  For a floating variable object the
+values of variables whose names appear in the expressions are
+re-evaluated every time in the context of the current frame.  Consider
+this example:
+
+     void do_work(...)
+     {
+             struct work_state state;
+
+             if (...)
+                do_work(...);
+     }
+
+   If a fixed variable object for the 'state' variable is created in
+this function, and we enter the recursive call, the variable object will
+report the value of 'state' in the top-level 'do_work' invocation.  On
+the other hand, a floating variable object will report the value of
+'state' in the current frame.
+
+   If an expression specified when creating a fixed variable object
+refers to a local variable, the variable object becomes bound to the
+thread and frame in which the variable object is created.  When such
+variable object is updated, GDB makes sure that the thread/frame
+combination the variable object is bound to still exists, and
+re-evaluates the variable object in context of that thread/frame.
+
+   The following is the complete set of GDB/MI operations defined to
+access this functionality:
+
+*Operation*                   *Description*
+                              
+'-enable-pretty-printing'     enable Python-based pretty-printing
+'-var-create'                 create a variable object
+'-var-delete'                 delete the variable object and/or its
+                              children
+'-var-set-format'             set the display format of this variable
+'-var-show-format'            show the display format of this variable
+'-var-info-num-children'      tells how many children this object has
+'-var-list-children'          return a list of the object's children
+'-var-info-type'              show the type of this variable object
+'-var-info-expression'        print parent-relative expression that
+                              this variable object represents
+'-var-info-path-expression'   print full expression that this variable
+                              object represents
+'-var-show-attributes'        is this variable editable?  does it exist
+                              here?
+'-var-evaluate-expression'    get the value of this variable
+'-var-assign'                 set the value of this variable
+'-var-update'                 update the variable and its children
+'-var-set-frozen'             set frozenness attribute
+'-var-set-update-range'       set range of children to display on
+                              update
+
+   In the next subsection we describe each operation in detail and
+suggest how it can be used.
+
+Description And Use of Operations on Variable Objects
+-----------------------------------------------------
+
+The '-enable-pretty-printing' Command
+-------------------------------------
+
+     -enable-pretty-printing
+
+   GDB allows Python-based visualizers to affect the output of the MI
+variable object commands.  However, because there was no way to
+implement this in a fully backward-compatible way, a front end must
+request that this functionality be enabled.
+
+   Once enabled, this feature cannot be disabled.
+
+   Note that if Python support has not been compiled into GDB, this
+command will still succeed (and do nothing).
+
+   This feature is currently (as of GDB 7.0) experimental, and may work
+differently in future versions of GDB.
+
+The '-var-create' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-create {NAME | "-"}
+         {FRAME-ADDR | "*" | "@"} EXPRESSION
+
+   This operation creates a variable object, which allows the monitoring
+of a variable, the result of an expression, a memory cell or a CPU
+register.
+
+   The NAME parameter is the string by which the object can be
+referenced.  It must be unique.  If '-' is specified, the varobj system
+will generate a string "varNNNNNN" automatically.  It will be unique
+provided that one does not specify NAME of that format.  The command
+fails if a duplicate name is found.
+
+   The frame under which the expression should be evaluated can be
+specified by FRAME-ADDR.  A '*' indicates that the current frame should
+be used.  A '@' indicates that a floating variable object must be
+created.
+
+   EXPRESSION is any expression valid on the current language set (must
+not begin with a '*'), or one of the following:
+
+   * '*ADDR', where ADDR is the address of a memory cell
+
+   * '*ADDR-ADDR' -- a memory address range (TBD)
+
+   * '$REGNAME' -- a CPU register name
+
+   A varobj's contents may be provided by a Python-based pretty-printer.
+In this case the varobj is known as a "dynamic varobj".  Dynamic varobjs
+have slightly different semantics in some cases.  If the
+'-enable-pretty-printing' command is not sent, then GDB will never
+create a dynamic varobj.  This ensures backward compatibility for
+existing clients.
+
+Result
+......
+
+This operation returns attributes of the newly-created varobj.  These
+are:
+
+'name'
+     The name of the varobj.
+
+'numchild'
+     The number of children of the varobj.  This number is not
+     necessarily reliable for a dynamic varobj.  Instead, you must
+     examine the 'has_more' attribute.
+
+'value'
+     The varobj's scalar value.  For a varobj whose type is some sort of
+     aggregate (e.g., a 'struct'), or for a dynamic varobj, this value
+     will not be interesting.
+
+'type'
+     The varobj's type.  This is a string representation of the type, as
+     would be printed by the GDB CLI. If 'print object' (*note set print
+     object: Print Settings.) is set to 'on', the _actual_ (derived)
+     type of the object is shown rather than the _declared_ one.
+
+'thread-id'
+     If a variable object is bound to a specific thread, then this is
+     the thread's global identifier.
+
+'has_more'
+     For a dynamic varobj, this indicates whether there appear to be any
+     children available.  For a non-dynamic varobj, this will be 0.
+
+'dynamic'
+     This attribute will be present and have the value '1' if the varobj
+     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
+     this attribute will not be present.
+
+'displayhint'
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     'display_hint' method.  *Note Pretty Printing API::.
+
+   Typical output will look like this:
+
+      name="NAME",numchild="N",type="TYPE",thread-id="M",
+       has_more="HAS_MORE"
+
+The '-var-delete' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-delete [ -c ] NAME
+
+   Deletes a previously created variable object and all of its children.
+With the '-c' option, just deletes the children.
+
+   Returns an error if the object NAME is not found.
+
+The '-var-set-format' Command
+-----------------------------
+
+Synopsis
+........
+
+      -var-set-format NAME FORMAT-SPEC
+
+   Sets the output format for the value of the object NAME to be
+FORMAT-SPEC.
+
+   The syntax for the FORMAT-SPEC is as follows:
+
+      FORMAT-SPEC ==>
+      {binary | decimal | hexadecimal | octal | natural | zero-hexadecimal}
+
+   The natural format is the default format choosen automatically based
+on the variable type (like decimal for an 'int', hex for pointers,
+etc.).
+
+   The zero-hexadecimal format has a representation similar to
+hexadecimal but with padding zeroes to the left of the value.  For
+example, a 32-bit hexadecimal value of 0x1234 would be represented as
+0x00001234 in the zero-hexadecimal format.
+
+   For a variable with children, the format is set only on the variable
+itself, and the children are not affected.
+
+The '-var-show-format' Command
+------------------------------
+
+Synopsis
+........
+
+      -var-show-format NAME
+
+   Returns the format used to display the value of the object NAME.
+
+      FORMAT ==>
+      FORMAT-SPEC
+
+The '-var-info-num-children' Command
+------------------------------------
+
+Synopsis
+........
+
+      -var-info-num-children NAME
+
+   Returns the number of children of a variable object NAME:
+
+      numchild=N
+
+   Note that this number is not completely reliable for a dynamic
+varobj.  It will return the current number of children, but more
+children may be available.
+
+The '-var-list-children' Command
+--------------------------------
+
+Synopsis
+........
+
+      -var-list-children [PRINT-VALUES] NAME [FROM TO]
+
+   Return a list of the children of the specified variable object and
+create variable objects for them, if they do not already exist.  With a
+single argument or if PRINT-VALUES has a value of 0 or '--no-values',
+print only the names of the variables; if PRINT-VALUES is 1 or
+'--all-values', also print their values; and if it is 2 or
+'--simple-values' print the name and value for simple data types and
+just the name for arrays, structures and unions.
+
+   FROM and TO, if specified, indicate the range of children to report.
+If FROM or TO is less than zero, the range is reset and all children
+will be reported.  Otherwise, children starting at FROM (zero-based) and
+up to and excluding TO will be reported.
+
+   If a child range is requested, it will only affect the current call
+to '-var-list-children', but not future calls to '-var-update'.  For
+this, you must instead use '-var-set-update-range'.  The intent of this
+approach is to enable a front end to implement any update approach it
+likes; for example, scrolling a view may cause the front end to request
+more children with '-var-list-children', and then the front end could
+call '-var-set-update-range' with a different range to ensure that
+future updates are restricted to just the visible items.
+
+   For each child the following results are returned:
+
+NAME
+     Name of the variable object created for this child.
+
+EXP
+     The expression to be shown to the user by the front end to
+     designate this child.  For example this may be the name of a
+     structure member.
+
+     For a dynamic varobj, this value cannot be used to form an
+     expression.  There is no way to do this at all with a dynamic
+     varobj.
+
+     For C/C++ structures there are several pseudo children returned to
+     designate access qualifiers.  For these pseudo children EXP is
+     'public', 'private', or 'protected'.  In this case the type and
+     value are not present.
+
+     A dynamic varobj will not report the access qualifying
+     pseudo-children, regardless of the language.  This information is
+     not available at all with a dynamic varobj.
+
+NUMCHILD
+     Number of children this child has.  For a dynamic varobj, this will
+     be 0.
+
+TYPE
+     The type of the child.  If 'print object' (*note set print object:
+     Print Settings.) is set to 'on', the _actual_ (derived) type of the
+     object is shown rather than the _declared_ one.
+
+VALUE
+     If values were requested, this is the value.
+
+THREAD-ID
+     If this variable object is associated with a thread, this is the
+     thread's global thread id.  Otherwise this result is not present.
+
+FROZEN
+     If the variable object is frozen, this variable will be present
+     with a value of 1.
+
+DISPLAYHINT
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     'display_hint' method.  *Note Pretty Printing API::.
+
+DYNAMIC
+     This attribute will be present and have the value '1' if the varobj
+     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
+     this attribute will not be present.
+
+   The result may have its own attributes:
+
+'displayhint'
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     'display_hint' method.  *Note Pretty Printing API::.
+
+'has_more'
+     This is an integer attribute which is nonzero if there are children
+     remaining after the end of the selected range.
+
+Example
+.......
+
+     (gdb)
+      -var-list-children n
+      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+      numchild=N,type=TYPE},(repeats N times)]
+     (gdb)
+      -var-list-children --all-values n
+      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+      numchild=N,value=VALUE,type=TYPE},(repeats N times)]
+
+The '-var-info-type' Command
+----------------------------
+
+Synopsis
+........
+
+      -var-info-type NAME
+
+   Returns the type of the specified variable NAME.  The type is
+returned as a string in the same format as it is output by the GDB CLI:
+
+      type=TYPENAME
+
+The '-var-info-expression' Command
+----------------------------------
+
+Synopsis
+........
+
+      -var-info-expression NAME
+
+   Returns a string that is suitable for presenting this variable object
+in user interface.  The string is generally not valid expression in the
+current language, and cannot be evaluated.
+
+   For example, if 'a' is an array, and variable object 'A' was created
+for 'a', then we'll get this output:
+
+     (gdb) -var-info-expression A.1
+     ^done,lang="C",exp="1"
+
+Here, the value of 'lang' is the language name, which can be found in
+*note Supported Languages::.
+
+   Note that the output of the '-var-list-children' command also
+includes those expressions, so the '-var-info-expression' command is of
+limited use.
+
+The '-var-info-path-expression' Command
+---------------------------------------
+
+Synopsis
+........
+
+      -var-info-path-expression NAME
+
+   Returns an expression that can be evaluated in the current context
+and will yield the same value that a variable object has.  Compare this
+with the '-var-info-expression' command, which result can be used only
+for UI presentation.  Typical use of the '-var-info-path-expression'
+command is creating a watchpoint from a variable object.
+
+   This command is currently not valid for children of a dynamic varobj,
+and will give an error when invoked on one.
+
+   For example, suppose 'C' is a C++ class, derived from class 'Base',
+and that the 'Base' class has a member called 'm_size'.  Assume a
+variable 'c' is has the type of 'C' and a variable object 'C' was
+created for variable 'c'.  Then, we'll get this output:
+     (gdb) -var-info-path-expression C.Base.public.m_size
+     ^done,path_expr=((Base)c).m_size)
+
+The '-var-show-attributes' Command
+----------------------------------
+
+Synopsis
+........
+
+      -var-show-attributes NAME
+
+   List attributes of the specified variable object NAME:
+
+      status=ATTR [ ( ,ATTR )* ]
+
+where ATTR is '{ { editable | noneditable } | TBD }'.
+
+The '-var-evaluate-expression' Command
+--------------------------------------
+
+Synopsis
+........
+
+      -var-evaluate-expression [-f FORMAT-SPEC] NAME
+
+   Evaluates the expression that is represented by the specified
+variable object and returns its value as a string.  The format of the
+string can be specified with the '-f' option.  The possible values of
+this option are the same as for '-var-set-format' (*note
+-var-set-format::).  If the '-f' option is not specified, the current
+display format will be used.  The current display format can be changed
+using the '-var-set-format' command.
+
+      value=VALUE
+
+   Note that one must invoke '-var-list-children' for a variable before
+the value of a child variable can be evaluated.
+
+The '-var-assign' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-assign NAME EXPRESSION
+
+   Assigns the value of EXPRESSION to the variable object specified by
+NAME.  The object must be 'editable'.  If the variable's value is
+altered by the assign, the variable will show up in any subsequent
+'-var-update' list.
+
+Example
+.......
+
+     (gdb)
+     -var-assign var1 3
+     ^done,value="3"
+     (gdb)
+     -var-update *
+     ^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
+     (gdb)
+
+The '-var-update' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-update [PRINT-VALUES] {NAME | "*"}
+
+   Reevaluate the expressions corresponding to the variable object NAME
+and all its direct and indirect children, and return the list of
+variable objects whose values have changed; NAME must be a root variable
+object.  Here, "changed" means that the result of
+'-var-evaluate-expression' before and after the '-var-update' is
+different.  If '*' is used as the variable object names, all existing
+variable objects are updated, except for frozen ones (*note
+-var-set-frozen::).  The option PRINT-VALUES determines whether both
+names and values, or just names are printed.  The possible values of
+this option are the same as for '-var-list-children' (*note
+-var-list-children::).  It is recommended to use the '--all-values'
+option, to reduce the number of MI commands needed on each program stop.
+
+   With the '*' parameter, if a variable object is bound to a currently
+running thread, it will not be updated, without any diagnostic.
+
+   If '-var-set-update-range' was previously used on a varobj, then only
+the selected range of children will be reported.
+
+   '-var-update' reports all the changed varobjs in a tuple named
+'changelist'.
+
+   Each item in the change list is itself a tuple holding:
+
+'name'
+     The name of the varobj.
+
+'value'
+     If values were requested for this update, then this field will be
+     present and will hold the value of the varobj.
+
+'in_scope'
+     This field is a string which may take one of three values:
+
+     '"true"'
+          The variable object's current value is valid.
+
+     '"false"'
+          The variable object does not currently hold a valid value but
+          it may hold one in the future if its associated expression
+          comes back into scope.
+
+     '"invalid"'
+          The variable object no longer holds a valid value.  This can
+          occur when the executable file being debugged has changed,
+          either through recompilation or by using the GDB 'file'
+          command.  The front end should normally choose to delete these
+          variable objects.
+
+     In the future new values may be added to this list so the front
+     should be prepared for this possibility.  *Note GDB/MI Development
+     and Front Ends: GDB/MI Development and Front Ends.
+
+'type_changed'
+     This is only present if the varobj is still valid.  If the type
+     changed, then this will be the string 'true'; otherwise it will be
+     'false'.
+
+     When a varobj's type changes, its children are also likely to have
+     become incorrect.  Therefore, the varobj's children are
+     automatically deleted when this attribute is 'true'.  Also, the
+     varobj's update range, when set using the '-var-set-update-range'
+     command, is unset.
+
+'new_type'
+     If the varobj's type changed, then this field will be present and
+     will hold the new type.
+
+'new_num_children'
+     For a dynamic varobj, if the number of children changed, or if the
+     type changed, this will be the new number of children.
+
+     The 'numchild' field in other varobj responses is generally not
+     valid for a dynamic varobj - it will show the number of children
+     that GDB knows about, but because dynamic varobjs lazily
+     instantiate their children, this will not reflect the number of
+     children which may be available.
+
+     The 'new_num_children' attribute only reports changes to the number
+     of children known by GDB.  This is the only way to detect whether
+     an update has removed children (which necessarily can only happen
+     at the end of the update range).
+
+'displayhint'
+     The display hint, if any.
+
+'has_more'
+     This is an integer value, which will be 1 if there are more
+     children available outside the varobj's update range.
+
+'dynamic'
+     This attribute will be present and have the value '1' if the varobj
+     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
+     this attribute will not be present.
+
+'new_children'
+     If new children were added to a dynamic varobj within the selected
+     update range (as set by '-var-set-update-range'), then they will be
+     listed in this attribute.
+
+Example
+.......
+
+     (gdb)
+     -var-assign var1 3
+     ^done,value="3"
+     (gdb)
+     -var-update --all-values var1
+     ^done,changelist=[{name="var1",value="3",in_scope="true",
+     type_changed="false"}]
+     (gdb)
+
+The '-var-set-frozen' Command
+-----------------------------
+
+Synopsis
+........
+
+      -var-set-frozen NAME FLAG
+
+   Set the frozenness flag on the variable object NAME.  The FLAG
+parameter should be either '1' to make the variable frozen or '0' to
+make it unfrozen.  If a variable object is frozen, then neither itself,
+nor any of its children, are implicitly updated by '-var-update' of a
+parent variable or by '-var-update *'.  Only '-var-update' of the
+variable itself will update its value and values of its children.  After
+a variable object is unfrozen, it is implicitly updated by all
+subsequent '-var-update' operations.  Unfreezing a variable does not
+update it, only subsequent '-var-update' does.
+
+Example
+.......
+
+     (gdb)
+     -var-set-frozen V 1
+     ^done
+     (gdb)
+
+The '-var-set-update-range' command
+-----------------------------------
+
+Synopsis
+........
+
+      -var-set-update-range NAME FROM TO
+
+   Set the range of children to be returned by future invocations of
+'-var-update'.
+
+   FROM and TO indicate the range of children to report.  If FROM or TO
+is less than zero, the range is reset and all children will be reported.
+Otherwise, children starting at FROM (zero-based) and up to and
+excluding TO will be reported.
+
+Example
+.......
+
+     (gdb)
+     -var-set-update-range V 1 2
+     ^done
+
+The '-var-set-visualizer' command
+---------------------------------
+
+Synopsis
+........
+
+      -var-set-visualizer NAME VISUALIZER
+
+   Set a visualizer for the variable object NAME.
+
+   VISUALIZER is the visualizer to use.  The special value 'None' means
+to disable any visualizer in use.
+
+   If not 'None', VISUALIZER must be a Python expression.  This
+expression must evaluate to a callable object which accepts a single
+argument.  GDB will call this object with the value of the varobj NAME
+as an argument (this is done so that the same Python pretty-printing
+code can be used for both the CLI and MI). When called, this object must
+return an object which conforms to the pretty-printing interface (*note
+Pretty Printing API::).
+
+   The pre-defined function 'gdb.default_visualizer' may be used to
+select a visualizer by following the built-in process (*note Selecting
+Pretty-Printers::).  This is done automatically when a varobj is
+created, and so ordinarily is not needed.
+
+   This feature is only available if Python support is enabled.  The MI
+command '-list-features' (*note GDB/MI Support Commands::) can be used
+to check this.
+
+Example
+.......
+
+Resetting the visualizer:
+
+     (gdb)
+     -var-set-visualizer V None
+     ^done
+
+   Reselecting the default (type-based) visualizer:
+
+     (gdb)
+     -var-set-visualizer V gdb.default_visualizer
+     ^done
+
+   Suppose 'SomeClass' is a visualizer class.  A lambda expression can
+be used to instantiate this class for a varobj:
+
+     (gdb)
+     -var-set-visualizer V "lambda val: SomeClass()"
+     ^done
+
+
+File: gdb.info,  Node: GDB/MI Data Manipulation,  Next: GDB/MI Tracepoint Commands,  Prev: GDB/MI Variable Objects,  Up: GDB/MI
+
+27.16 GDB/MI Data Manipulation
+==============================
+
+This section describes the GDB/MI commands that manipulate data: examine
+memory and registers, evaluate expressions, etc.
+
+   For details about what an addressable memory unit is, *note
+addressable memory unit::.
+
+The '-data-disassemble' Command
+-------------------------------
+
+Synopsis
+........
+
+      -data-disassemble
+         [ -s START-ADDR -e END-ADDR ]
+       | [ -a ADDR ]
+       | [ -f FILENAME -l LINENUM [ -n LINES ] ]
+       -- MODE
+
+Where:
+
+'START-ADDR'
+     is the beginning address (or '$pc')
+'END-ADDR'
+     is the end address
+'ADDR'
+     is an address anywhere within (or the name of) the function to
+     disassemble.  If an address is specified, the whole function
+     surrounding that address will be disassembled.  If a name is
+     specified, the whole function with that name will be disassembled.
+'FILENAME'
+     is the name of the file to disassemble
+'LINENUM'
+     is the line number to disassemble around
+'LINES'
+     is the number of disassembly lines to be produced.  If it is -1,
+     the whole function will be disassembled, in case no END-ADDR is
+     specified.  If END-ADDR is specified as a non-zero value, and LINES
+     is lower than the number of disassembly lines between START-ADDR
+     and END-ADDR, only LINES lines are displayed; if LINES is higher
+     than the number of lines between START-ADDR and END-ADDR, only the
+     lines up to END-ADDR are displayed.
+'MODE'
+     is one of:
+        * 0 disassembly only
+        * 1 mixed source and disassembly (deprecated)
+        * 2 disassembly with raw opcodes
+        * 3 mixed source and disassembly with raw opcodes (deprecated)
+        * 4 mixed source and disassembly
+        * 5 mixed source and disassembly with raw opcodes
+
+     Modes 1 and 3 are deprecated.  The output is "source centric" which
+     hasn't proved useful in practice.  *Note Machine Code::, for a
+     discussion of the difference between '/m' and '/s' output of the
+     'disassemble' command.
+
+Result
+......
+
+The result of the '-data-disassemble' command will be a list named
+'asm_insns', the contents of this list depend on the MODE used with the
+'-data-disassemble' command.
+
+   For modes 0 and 2 the 'asm_insns' list contains tuples with the
+following fields:
+
+'address'
+     The address at which this instruction was disassembled.
+
+'func-name'
+     The name of the function this instruction is within.
+
+'offset'
+     The decimal offset in bytes from the start of 'func-name'.
+
+'inst'
+     The text disassembly for this 'address'.
+
+'opcodes'
+     This field is only present for modes 2, 3 and 5.  This contains the
+     raw opcode bytes for the 'inst' field.
+
+   For modes 1, 3, 4 and 5 the 'asm_insns' list contains tuples named
+'src_and_asm_line', each of which has the following fields:
+
+'line'
+     The line number within 'file'.
+
+'file'
+     The file name from the compilation unit.  This might be an absolute
+     file name or a relative file name depending on the compile command
+     used.
+
+'fullname'
+     Absolute file name of 'file'.  It is converted to a canonical form
+     using the source file search path (*note Specifying Source
+     Directories: Source Path.) and after resolving all the symbolic
+     links.
+
+     If the source file is not found this field will contain the path as
+     present in the debug information.
+
+'line_asm_insn'
+     This is a list of tuples containing the disassembly for 'line' in
+     'file'.  The fields of each tuple are the same as for
+     '-data-disassemble' in MODE 0 and 2, so 'address', 'func-name',
+     'offset', 'inst', and optionally 'opcodes'.
+
+   Note that whatever included in the 'inst' field, is not manipulated
+directly by GDB/MI, i.e., it is not possible to adjust its format.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'disassemble'.
+
+Example
+.......
+
+Disassemble from the current value of '$pc' to '$pc + 20':
+
+     (gdb)
+     -data-disassemble -s $pc -e "$pc + 20" -- 0
+     ^done,
+     asm_insns=[
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"},
+     {address="0x000107c8",func-name="main",offset="12",
+     inst="or  %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
+     {address="0x000107cc",func-name="main",offset="16",
+     inst="sethi  %hi(0x11800), %o2"},
+     {address="0x000107d0",func-name="main",offset="20",
+     inst="or  %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}]
+     (gdb)
+
+   Disassemble the whole 'main' function.  Line 32 is part of 'main'.
+
+     -data-disassemble -f basics.c -l 32 -- 0
+     ^done,asm_insns=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"},
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov   2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi %hi(0x11800), %o2"},
+     [...]
+     {address="0x0001081c",func-name="main",offset="96",inst="ret "},
+     {address="0x00010820",func-name="main",offset="100",inst="restore "}]
+     (gdb)
+
+   Disassemble 3 instructions from the start of 'main':
+
+     (gdb)
+     -data-disassemble -f basics.c -l 32 -n 3 -- 0
+     ^done,asm_insns=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"},
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"}]
+     (gdb)
+
+   Disassemble 3 instructions from the start of 'main' in mixed mode:
+
+     (gdb)
+     -data-disassemble -f basics.c -l 32 -n 3 -- 1
+     ^done,asm_insns=[
+     src_and_asm_line={line="31",
+     file="../../../src/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c",
+     line_asm_insn=[{address="0x000107bc",
+     func-name="main",offset="0",inst="save  %sp, -112, %sp"}]},
+     src_and_asm_line={line="32",
+     file="../../../src/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c",
+     line_asm_insn=[{address="0x000107c0",
+     func-name="main",offset="4",inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"}]}]
+     (gdb)
+
+The '-data-evaluate-expression' Command
+---------------------------------------
+
+Synopsis
+........
+
+      -data-evaluate-expression EXPR
+
+   Evaluate EXPR as an expression.  The expression could contain an
+inferior function call.  The function call will execute synchronously.
+If the expression contains spaces, it must be enclosed in double quotes.
+
+GDB Command
+...........
+
+The corresponding GDB commands are 'print', 'output', and 'call'.  In
+'gdbtk' only, there's a corresponding 'gdb_eval' command.
+
+Example
+.......
+
+In the following example, the numbers that precede the commands are the
+"tokens" described in *note GDB/MI Command Syntax: GDB/MI Command
+Syntax.  Notice how GDB/MI returns the same tokens in its output.
+
+     211-data-evaluate-expression A
+     211^done,value="1"
+     (gdb)
+     311-data-evaluate-expression &A
+     311^done,value="0xefffeb7c"
+     (gdb)
+     411-data-evaluate-expression A+3
+     411^done,value="4"
+     (gdb)
+     511-data-evaluate-expression "A + 3"
+     511^done,value="4"
+     (gdb)
+
+The '-data-list-changed-registers' Command
+------------------------------------------
+
+Synopsis
+........
+
+      -data-list-changed-registers
+
+   Display a list of the registers that have changed.
+
+GDB Command
+...........
+
+GDB doesn't have a direct analog for this command; 'gdbtk' has the
+corresponding command 'gdb_changed_register_list'.
+
+Example
+.......
+
+On a PPC MBX board:
+
+     (gdb)
+     -exec-continue
+     ^running
+
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={
+     func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c",
+     line="5",arch="powerpc"}
+     (gdb)
+     -data-list-changed-registers
+     ^done,changed-registers=["0","1","2","4","5","6","7","8","9",
+     "10","11","13","14","15","16","17","18","19","20","21","22","23",
+     "24","25","26","27","28","30","31","64","65","66","67","69"]
+     (gdb)
+
+The '-data-list-register-names' Command
+---------------------------------------
+
+Synopsis
+........
+
+      -data-list-register-names [ ( REGNO )+ ]
+
+   Show a list of register names for the current target.  If no
+arguments are given, it shows a list of the names of all the registers.
+If integer numbers are given as arguments, it will print a list of the
+names of the registers corresponding to the arguments.  To ensure
+consistency between a register name and its number, the output list may
+include empty register names.
+
+GDB Command
+...........
+
+GDB does not have a command which corresponds to
+'-data-list-register-names'.  In 'gdbtk' there is a corresponding
+command 'gdb_regnames'.
+
+Example
+.......
+
+For the PPC MBX board:
+     (gdb)
+     -data-list-register-names
+     ^done,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","r26","r27","r28","r29",
+     "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
+     "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
+     "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
+     "", "pc","ps","cr","lr","ctr","xer"]
+     (gdb)
+     -data-list-register-names 1 2 3
+     ^done,register-names=["r1","r2","r3"]
+     (gdb)
+
+The '-data-list-register-values' Command
+----------------------------------------
+
+Synopsis
+........
+
+      -data-list-register-values
+         [ --skip-unavailable ] FMT [ ( REGNO )*]
+
+   Display the registers' contents.  The format according to which the
+registers' contents are to be returned is given by FMT, followed by an
+optional list of numbers specifying the registers to display.  A missing
+list of numbers indicates that the contents of all the registers must be
+returned.  The '--skip-unavailable' option indicates that only the
+available registers are to be returned.
+
+   Allowed formats for FMT are:
+
+'x'
+     Hexadecimal
+'o'
+     Octal
+'t'
+     Binary
+'d'
+     Decimal
+'r'
+     Raw
+'N'
+     Natural
+
+GDB Command
+...........
+
+The corresponding GDB commands are 'info reg', 'info all-reg', and (in
+'gdbtk') 'gdb_fetch_registers'.
+
+Example
+.......
+
+For a PPC MBX board (note: line breaks are for readability only, they
+don't appear in the actual output):
+
+     (gdb)
+     -data-list-register-values r 64 65
+     ^done,register-values=[{number="64",value="0xfe00a300"},
+     {number="65",value="0x00029002"}]
+     (gdb)
+     -data-list-register-values x
+     ^done,register-values=[{number="0",value="0xfe0043c8"},
+     {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
+     {number="3",value="0x0"},{number="4",value="0xa"},
+     {number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
+     {number="7",value="0xfe011e98"},{number="8",value="0x2"},
+     {number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
+     {number="11",value="0x1"},{number="12",value="0x0"},
+     {number="13",value="0x4544"},{number="14",value="0xffdfffff"},
+     {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
+     {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
+     {number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
+     {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
+     {number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
+     {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
+     {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
+     {number="29",value="0x0"},{number="30",value="0xfe010000"},
+     {number="31",value="0x0"},{number="32",value="0x0"},
+     {number="33",value="0x0"},{number="34",value="0x0"},
+     {number="35",value="0x0"},{number="36",value="0x0"},
+     {number="37",value="0x0"},{number="38",value="0x0"},
+     {number="39",value="0x0"},{number="40",value="0x0"},
+     {number="41",value="0x0"},{number="42",value="0x0"},
+     {number="43",value="0x0"},{number="44",value="0x0"},
+     {number="45",value="0x0"},{number="46",value="0x0"},
+     {number="47",value="0x0"},{number="48",value="0x0"},
+     {number="49",value="0x0"},{number="50",value="0x0"},
+     {number="51",value="0x0"},{number="52",value="0x0"},
+     {number="53",value="0x0"},{number="54",value="0x0"},
+     {number="55",value="0x0"},{number="56",value="0x0"},
+     {number="57",value="0x0"},{number="58",value="0x0"},
+     {number="59",value="0x0"},{number="60",value="0x0"},
+     {number="61",value="0x0"},{number="62",value="0x0"},
+     {number="63",value="0x0"},{number="64",value="0xfe00a300"},
+     {number="65",value="0x29002"},{number="66",value="0x202f04b5"},
+     {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
+     {number="69",value="0x20002b03"}]
+     (gdb)
+
+The '-data-read-memory' Command
+-------------------------------
+
+This command is deprecated, use '-data-read-memory-bytes' instead.
+
+Synopsis
+........
+
+      -data-read-memory [ -o BYTE-OFFSET ]
+        ADDRESS WORD-FORMAT WORD-SIZE
+        NR-ROWS NR-COLS [ ASCHAR ]
+
+where:
+
+'ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
+
+'WORD-FORMAT'
+     The format to be used to print the memory words.  The notation is
+     the same as for GDB's 'print' command (*note Output Formats: Output
+     Formats.).
+
+'WORD-SIZE'
+     The size of each memory word in bytes.
+
+'NR-ROWS'
+     The number of rows in the output table.
+
+'NR-COLS'
+     The number of columns in the output table.
+
+'ASCHAR'
+     If present, indicates that each row should include an ASCII dump.
+     The value of ASCHAR is used as a padding character when a byte is
+     not a member of the printable ASCII character set (printable ASCII
+     characters are those whose code is between 32 and 126,
+     inclusively).
+
+'BYTE-OFFSET'
+     An offset to add to the ADDRESS before fetching memory.
+
+   This command displays memory contents as a table of NR-ROWS by
+NR-COLS words, each word being WORD-SIZE bytes.  In total, 'NR-ROWS *
+NR-COLS * WORD-SIZE' bytes are read (returned as 'total-bytes').  Should
+less than the requested number of bytes be returned by the target, the
+missing words are identified using 'N/A'.  The number of bytes read from
+the target is returned in 'nr-bytes' and the starting address used to
+read memory in 'addr'.
+
+   The address of the next/previous row or page is available in
+'next-row' and 'prev-row', 'next-page' and 'prev-page'.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'x'.  'gdbtk' has 'gdb_get_mem' memory
+read command.
+
+Example
+.......
+
+Read six bytes of memory starting at 'bytes+6' but then offset by '-6'
+bytes.  Format as three rows of two columns.  One byte per word.
+Display each word in hex.
+
+     (gdb)
+     9-data-read-memory -o -6 -- bytes+6 x 1 3 2
+     9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
+     next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
+     prev-page="0x0000138a",memory=[
+     {addr="0x00001390",data=["0x00","0x01"]},
+     {addr="0x00001392",data=["0x02","0x03"]},
+     {addr="0x00001394",data=["0x04","0x05"]}]
+     (gdb)
+
+   Read two bytes of memory starting at address 'shorts + 64' and
+display as a single word formatted in decimal.
+
+     (gdb)
+     5-data-read-memory shorts+64 d 2 1 1
+     5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
+     next-row="0x00001512",prev-row="0x0000150e",
+     next-page="0x00001512",prev-page="0x0000150e",memory=[
+     {addr="0x00001510",data=["128"]}]
+     (gdb)
+
+   Read thirty two bytes of memory starting at 'bytes+16' and format as
+eight rows of four columns.  Include a string encoding with 'x' used as
+the non-printable character.
+
+     (gdb)
+     4-data-read-memory bytes+16 x 1 8 4 x
+     4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
+     next-row="0x000013c0",prev-row="0x0000139c",
+     next-page="0x000013c0",prev-page="0x00001380",memory=[
+     {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"},
+     {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"},
+     {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"},
+     {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"},
+     {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"},
+     {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"},
+     {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"},
+     {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}]
+     (gdb)
+
+The '-data-read-memory-bytes' Command
+-------------------------------------
+
+Synopsis
+........
+
+      -data-read-memory-bytes [ -o OFFSET ]
+        ADDRESS COUNT
+
+where:
+
+'ADDRESS'
+     An expression specifying the address of the first addressable
+     memory unit to be read.  Complex expressions containing embedded
+     white space should be quoted using the C convention.
+
+'COUNT'
+     The number of addressable memory units to read.  This should be an
+     integer literal.
+
+'OFFSET'
+     The offset relative to ADDRESS at which to start reading.  This
+     should be an integer literal.  This option is provided so that a
+     frontend is not required to first evaluate address and then perform
+     address arithmetics itself.
+
+   This command attempts to read all accessible memory regions in the
+specified range.  First, all regions marked as unreadable in the memory
+map (if one is defined) will be skipped.  *Note Memory Region
+Attributes::.  Second, GDB will attempt to read the remaining regions.
+For each one, if reading full region results in an errors, GDB will try
+to read a subset of the region.
+
+   In general, every single memory unit in the region may be readable or
+not, and the only way to read every readable unit is to try a read at
+every address, which is not practical.  Therefore, GDB will attempt to
+read all accessible memory units at either beginning or the end of the
+region, using a binary division scheme.  This heuristic works well for
+reading across a memory map boundary.  Note that if a region has a
+readable range that is neither at the beginning or the end, GDB will not
+read it.
+
+   The result record (*note GDB/MI Result Records::) that is output of
+the command includes a field named 'memory' whose content is a list of
+tuples.  Each tuple represent a successfully read memory block and has
+the following fields:
+
+'begin'
+     The start address of the memory block, as hexadecimal literal.
+
+'end'
+     The end address of the memory block, as hexadecimal literal.
+
+'offset'
+     The offset of the memory block, as hexadecimal literal, relative to
+     the start address passed to '-data-read-memory-bytes'.
+
+'contents'
+     The contents of the memory block, in hex.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'x'.
+
+Example
+.......
+
+     (gdb)
+     -data-read-memory-bytes &a 10
+     ^done,memory=[{begin="0xbffff154",offset="0x00000000",
+                   end="0xbffff15e",
+                   contents="01000000020000000300"}]
+     (gdb)
+
+The '-data-write-memory-bytes' Command
+--------------------------------------
+
+Synopsis
+........
+
+      -data-write-memory-bytes ADDRESS CONTENTS
+      -data-write-memory-bytes ADDRESS CONTENTS [COUNT]
+
+where:
+
+'ADDRESS'
+     An expression specifying the address of the first addressable
+     memory unit to be written.  Complex expressions containing embedded
+     white space should be quoted using the C convention.
+
+'CONTENTS'
+     The hex-encoded data to write.  It is an error if CONTENTS does not
+     represent an integral number of addressable memory units.
+
+'COUNT'
+     Optional argument indicating the number of addressable memory units
+     to be written.  If COUNT is greater than CONTENTS' length, GDB will
+     repeatedly write CONTENTS until it fills COUNT memory units.
+
+GDB Command
+...........
+
+There's no corresponding GDB command.
+
+Example
+.......
+
+     (gdb)
+     -data-write-memory-bytes &a "aabbccdd"
+     ^done
+     (gdb)
+
+     (gdb)
+     -data-write-memory-bytes &a "aabbccdd" 16e
+     ^done
+     (gdb)
+
+
 File: gdb.info,  Node: GDB/MI Tracepoint Commands,  Next: GDB/MI Symbol Query,  Prev: GDB/MI Data Manipulation,  Up: GDB/MI
 
 27.17 GDB/MI Tracepoint Commands
@@ -979,12 +2737,61 @@ The '-file-list-exec-source-files' Comma
 Synopsis
 ........
 
-      -file-list-exec-source-files
-
-   List the source files for the current executable.
+      -file-list-exec-source-files [ --GROUP-BY-OBJFILE ]
+                                   [ --DIRNAME | --BASENAME ]
+                                   [ -- ]
+                                   [ REGEXP ]
+
+   This command returns information about the source files GDB knows
+about, it will output both the filename and fullname (absolute file
+name) of a source file, though the fullname can be elided if this
+information is not known to GDB.
+
+   With no arguments this command returns a list of source files.  Each
+source file is represented by a tuple with the fields; FILE, FULLNAME,
+and DEBUG-FULLY-READ.  The FILE is the display name for the file, while
+FULLNAME is the absolute name of the file.  The FULLNAME field can be
+elided if the absolute name of the source file can't be computed.  The
+field DEBUG-FULLY-READ will be a string, either 'true' or 'false'.  When
+'true', this indicates the full debug information for the compilation
+unit describing this file has been read in.  When 'false', the full
+debug information has not yet been read in.  While reading in the full
+debug information it is possible that GDB could become aware of
+additional source files.
+
+   The optional REGEXP can be used to filter the list of source files
+returned.  The REGEXP will be matched against the full source file name.
+The matching is case-sensitive, except on operating systems that have
+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 '-').
+
+   If '--dirname' is provided, then REGEXP is matched only against the
+directory name of each source file.  If '--basename' is provided, then
+REGEXP is matched against the basename of each source file.  Only one of
+'--dirname' or '--basename' may be given, and if either is given then
+REGEXP is required.
+
+   If '--group-by-objfile' is used then the format of the results is
+changed.  The results will now be a list of tuples, with each tuple
+representing an object file (executable or shared library) loaded into
+GDB.  The fields of these tuples are; FILENAME, DEBUG-INFO, and SOURCES.
+The FILENAME is the absolute name of the object file, DEBUG-INFO is a
+string with one of the following values:
 
-   It will always output both the filename and fullname (absolute file
-name) of a source file.
+'none'
+     This object file has no debug information.
+'partially-read'
+     This object file has debug information, but it is not fully read in
+     yet.  When it is read in later, GDB might become aware of
+     additional source files.
+'fully-read'
+     This object file has debug information, and this information is
+     fully read into GDB. The list of source files is complete.
+
+   The SOURCES is a list or tuples, with each tuple describing a single
+source file with the same fields as described previously.  The SOURCES
+list can be empty for object files that have no debug information.
 
 GDB Command
 ...........
@@ -997,11 +2804,64 @@ Example
 
      (gdb)
      -file-list-exec-source-files
-     ^done,files=[
-     {file=foo.c,fullname=/home/foo.c},
-     {file=/home/bar.c,fullname=/home/bar.c},
-     {file=gdb_could_not_find_fullpath.c}]
+     ^done,files=[{file="foo.c",fullname="/home/foo.c",debug-fully-read="true"},
+                  {file="/home/bar.c",fullname="/home/bar.c",debug-fully-read="true"},
+                  {file="gdb_could_not_find_fullpath.c",debug-fully-read="true"}]
      (gdb)
+     -file-list-exec-source-files
+     ^done,files=[{file="test.c",
+                   fullname="/tmp/info-sources/test.c",
+                   debug-fully-read="true"},
+                  {file="/usr/include/stdc-predef.h",
+                   fullname="/usr/include/stdc-predef.h",
+                   debug-fully-read="true"},
+                  {file="header.h",
+                   fullname="/tmp/info-sources/header.h",
+                   debug-fully-read="true"},
+                  {file="helper.c",
+                   fullname="/tmp/info-sources/helper.c",
+                   debug-fully-read="true"}]
+     (gdb)
+     -file-list-exec-source-files -- \\.c
+     ^done,files=[{file="test.c",
+                   fullname="/tmp/info-sources/test.c",
+                   debug-fully-read="true"},
+                  {file="helper.c",
+                   fullname="/tmp/info-sources/helper.c",
+                   debug-fully-read="true"}]
+     (gdb)
+     -file-list-exec-source-files --group-by-objfile
+     ^done,files=[{filename="/tmp/info-sources/test.x",
+                   debug-info="fully-read",
+                   sources=[{file="test.c",
+                             fullname="/tmp/info-sources/test.c",
+                             debug-fully-read="true"},
+                            {file="/usr/include/stdc-predef.h",
+                             fullname="/usr/include/stdc-predef.h",
+                             debug-fully-read="true"},
+                            {file="header.h",
+                             fullname="/tmp/info-sources/header.h",
+                             debug-fully-read="true"}]},
+                  {filename="/lib64/ld-linux-x86-64.so.2",
+                   debug-info="none",
+                   sources=[]},
+                  {filename="system-supplied DSO at 0x7ffff7fcf000",
+                   debug-info="none",
+                   sources=[]},
+                  {filename="/tmp/info-sources/libhelper.so",
+                   debug-info="fully-read",
+                   sources=[{file="helper.c",
+                             fullname="/tmp/info-sources/helper.c",
+                             debug-fully-read="true"},
+                            {file="/usr/include/stdc-predef.h",
+                             fullname="/usr/include/stdc-predef.h",
+                             debug-fully-read="true"},
+                            {file="header.h",
+                             fullname="/tmp/info-sources/header.h",
+                             debug-fully-read="true"}]},
+                  {filename="/lib64/libc.so.6",
+                   debug-info="none",
+                   sources=[]}]
 
 The '-file-list-shared-libraries' Command
 -----------------------------------------
@@ -1770,7 +3630,7 @@ the following fields:
 Example
 -------
 
-     gdb
+     (gdb)
      -list-thread-groups
      ^done,groups=[{id="17",type="process",pid="yyy",num_children="2"}]
      -list-thread-groups 17
@@ -1817,7 +3677,7 @@ Example
 When run on a GNU/Linux system, the output will look something like
 this:
 
-     gdb
+     (gdb)
      -info-os
      ^done,OSDataTable={nr_rows="10",nr_cols="3",
      hdr=[{width="10",alignment="-1",col_name="col0",colhdr="Type"},
@@ -1843,7 +3703,7 @@ this:
                  col2="Sockets"},
            item={col0="threads",col1="Listing of all threads",
                  col2="Threads"}]
-     gdb
+     (gdb)
      -info-os processes
      ^done,OSDataTable={nr_rows="190",nr_cols="4",
      hdr=[{width="10",alignment="-1",col_name="col0",colhdr="pid"},
@@ -1872,17 +3732,17 @@ Synopsis
 
      -add-inferior
 
-   Creates a new inferior (*note Inferiors and Programs::).  The created
-inferior is not associated with any executable.  Such association may be
-established with the '-file-exec-and-symbols' command (*note GDB/MI File
-Commands::).  The command response has a single field, 'inferior', whose
-value is the identifier of the thread group corresponding to the new
-inferior.
+   Creates a new inferior (*note Inferiors Connections and Programs::).
+The created inferior is not associated with any executable.  Such
+association may be established with the '-file-exec-and-symbols' command
+(*note GDB/MI File Commands::).  The command response has a single
+field, 'inferior', whose value is the identifier of the thread group
+corresponding to the new inferior.
 
 Example
 -------
 
-     gdb
+     (gdb)
      -add-inferior
      ^done,inferior="i3"
 
@@ -2852,23 +4712,8 @@ contact that organization first.
    You can find contact information for many support companies and
 individuals in the file 'etc/SERVICE' in the GNU Emacs distribution.
 
-   In any event, we also recommend that you submit bug reports for GDB.
-The preferred method is to submit them directly using GDB's Bugs web
-page (http://www.gnu.org/software/gdb/bugs/).  Alternatively, the e-mail
-gateway <bug-gdb@gnu.org> can be used.
-
-   *Do not send bug reports to 'info-gdb', or to 'help-gdb', or to any
-newsgroups.*  Most users of GDB do not want to receive bug reports.
-Those that do have arranged to receive 'bug-gdb'.
-
-   The mailing list 'bug-gdb' has a newsgroup 'gnu.gdb.bug' which serves
-as a repeater.  The mailing list and the newsgroup carry exactly the
-same messages.  Often people think of posting bug reports to the
-newsgroup instead of mailing them.  This appears to work, but it has one
-problem which can be crucial: a newsgroup posting often lacks a mail
-path back to the sender.  Thus, if we need to ask for more information,
-we may be unable to reach you.  For this reason, it is better to send
-bug reports to the mailing list.
+   In any event, we also recommend that you submit bug reports for GDB
+to <https://www.gnu.org/software/gdb/bugs/>.
 
    The fundamental principle of reporting bugs usefully is this: *report
 all the facts*.  If you are not sure whether to state a fact or leave it
@@ -3397,11 +5242,11 @@ Variable Settings
           The number of possible completions that determines when the
           user is asked whether the list of possibilities should be
           displayed.  If the number of possible completions is greater
-          than this value, Readline will ask the user whether or not he
-          wishes to view them; otherwise, they are simply listed.  This
-          variable must be set to an integer value greater than or equal
-          to 0.  A negative value means Readline should never ask.  The
-          default limit is '100'.
+          than or equal to this value, Readline will ask whether or not
+          the user wishes to view them; otherwise, they are simply
+          listed.  This variable must be set to an integer value greater
+          than or equal to 0.  A negative value means Readline should
+          never ask.  The default limit is '100'.
 
      'convert-meta'
           If set to 'on', Readline will convert characters with the
@@ -3443,7 +5288,7 @@ Variable Settings
           buffer as a single string of characters, instead of treating
           each character as if it had been read from the keyboard.  This
           can prevent pasted characters from being interpreted as
-          editing commands.  The default is 'off'.
+          editing commands.  The default is 'On'.
 
      'enable-keypad'
           When set to 'on', Readline will try to enable the application
@@ -3480,7 +5325,9 @@ Variable Settings
           to 'on' means that the text of the lines being edited will
           scroll horizontally on a single screen line when they are
           longer than the width of the screen, instead of wrapping onto
-          a new screen line.  By default, this variable is set to 'off'.
+          a new screen line.  This variable is automatically set to 'on'
+          for terminals of height 1.  By default, this variable is set
+          to 'off'.
 
      'input-meta'
           If set to 'on', Readline will enable eight-bit input (it will
@@ -3922,8 +5769,8 @@ variable assignment, and conditional syn
      # rather than as meta-prefixed characters
      set output-meta on
 
-     # if there are more than 150 possible completions for
-     # a word, ask the user if he wants to see all of them
+     # if there are 150 or more possible completions for a word,
+     # ask whether or not the user wants to see all of them
      set completion-query-items 150
 
      # For FTP
@@ -3999,8 +5846,13 @@ File: gdb.info,  Node: Commands For Movi
      physical line or if the length of the current Readline line is not
      greater than the length of the prompt plus the screen width.
 
+'clear-display (M-C-l)'
+     Clear the screen and, if possible, the terminal's scrollback
+     buffer, then redraw the current line, leaving the current line at
+     the top of the screen.
+
 'clear-screen (C-l)'
-     Clear the screen and redraw the current line, leaving the current
+     Clear the screen, then redraw the current line, leaving the current
      line at the top of the screen.
 
 'redraw-current-line ()'
@@ -4035,10 +5887,14 @@ File: gdb.info,  Node: Commands For Hist
 'reverse-search-history (C-r)'
      Search backward starting at the current line and moving 'up'
      through the history as necessary.  This is an incremental search.
+     This command sets the region to the matched text and activates the
+     mark.
 
 'forward-search-history (C-s)'
      Search forward starting at the current line and moving 'down'
      through the history as necessary.  This is an incremental search.
+     This command sets the region to the matched text and activates the
+     mark.
 
 'non-incremental-reverse-search-history (M-p)'
      Search backward starting at the current line and moving 'up'
@@ -4097,6 +5953,13 @@ File: gdb.info,  Node: Commands For Hist
      history expansion facilities are used to extract the last argument,
      as if the '!$' history expansion had been specified.
 
+'operate-and-get-next (C-o)'
+     Accept the current line for return to the calling application as if
+     a newline had been entered, and fetch the next line relative to the
+     current line from the history for editing.  A numeric argument, if
+     supplied, specifies the history entry to use instead of the current
+     line.
+
 
 File: gdb.info,  Node: Commands For Text,  Next: Commands For Killing,  Prev: Commands For History,  Up: Bindable Readline Commands
 
@@ -4142,6 +6005,11 @@ File: gdb.info,  Node: Commands For Text
      was bound to 'self-insert' instead of executing any editing
      commands.
 
+     Bracketed paste sets the region (the characters between point and
+     the mark) to the inserted text.  It uses the concept of an _active
+     mark_: when the mark is active, Readline redisplay uses the
+     terminal's standout mode to denote the region.
+
 'transpose-chars (C-t)'
      Drag the character before the cursor forward over the character at
      the cursor, moving the cursor forward as well.  If the insertion
@@ -4186,10 +6054,14 @@ File: gdb.info,  Node: Commands For Kill
 --------------------------
 
 'kill-line (C-k)'
-     Kill the text from point to the end of the line.
+     Kill the text from point to the end of the line.  With a negative
+     numeric argument, kill backward from the cursor to the beginning of
+     the current line.
 
 'backward-kill-line (C-x Rubout)'
      Kill backward from the cursor to the beginning of the current line.
+     With a negative numeric argument, kill forward from the cursor to
+     the end of the current line.
 
 'unix-line-discard (C-u)'
      Kill backward from the cursor to the beginning of the current line.
@@ -4207,6 +6079,13 @@ File: gdb.info,  Node: Commands For Kill
      Kill the word behind point.  Word boundaries are the same as
      'backward-word'.
 
+'shell-transpose-words (M-C-t)'
+     Drag the word before point past the word after point, moving point
+     past that word as well.  If the insertion point is at the end of
+     the line, this transposes the last two words on the line.  Word
+     boundaries are the same as 'shell-forward-word' and
+     'shell-backward-word'.
+
 'unix-word-rubout (C-w)'
      Kill the word behind point, using white space as a word boundary.
      The killed text is saved on the kill-ring.
@@ -4536,11 +6415,13 @@ the current position in the history list
 '!?STRING[?]'
      Refer to the most recent command preceding the current position in
      the history list containing STRING.  The trailing '?' may be
-     omitted if the STRING is followed immediately by a newline.
+     omitted if the STRING is followed immediately by a newline.  If
+     STRING is missing, the string from the most recent search is used;
+     it is an error if there is no previous search string.
 
 '^STRING1^STRING2^'
      Quick Substitution.  Repeat the last command, replacing STRING1
-     with STRING2.  Equivalent to '!!:s/STRING1/STRING2/'.
+     with STRING2.  Equivalent to '!!:s^STRING1^STRING2^'.
 
 '!#'
      The entire command line typed so far.
@@ -4587,7 +6468,8 @@ separated by single spaces.
      The last argument.
 
 '%'
-     The word matched by the most recent '?STRING?' search.
+     The first word matched by the most recent '?STRING?' search, if the
+     search string begins with a character that is part of a word.
 
 'X-Y'
      A range of words; '-Y' abbreviates '0-Y'.
@@ -4601,7 +6483,8 @@ separated by single spaces.
      Abbreviates 'X-$'
 
 'X-'
-     Abbreviates 'X-$' like 'X*', but omits the last word.
+     Abbreviates 'X-$' like 'X*', but omits the last word.  If 'x' is
+     missing, it defaults to 0.
 
    If a word designator is supplied without an event specification, the
 previous command is used as the event.
@@ -4613,7 +6496,8 @@ File: gdb.info,  Node: Modifiers,  Prev:
 ----------------
 
 After the optional word designator, you can add a sequence of one or
-more of the following modifiers, each preceded by a ':'.
+more of the following modifiers, each preceded by a ':'.  These modify,
+or edit, the word or words selected from the history event.
 
 'h'
      Remove a trailing pathname component, leaving only the head.
@@ -4633,11 +6517,14 @@ more of the following modifiers, each pr
 
 's/OLD/NEW/'
      Substitute NEW for the first occurrence of OLD in the event line.
-     Any delimiter may be used in place of '/'.  The delimiter may be
-     quoted in OLD and NEW with a single backslash.  If '&' appears in
-     NEW, it is replaced by OLD.  A single backslash will quote the '&'.
-     The final delimiter is optional if it is the last character on the
-     input line.
+     Any character may be used as the delimiter in place of '/'.  The
+     delimiter may be quoted in OLD and NEW with a single backslash.  If
+     '&' appears in NEW, it is replaced by OLD.  A single backslash will
+     quote the '&'.  If OLD is null, it is set to the last OLD
+     substituted, or, if no previous history substitutions took place,
+     the last STRING in a !?STRING'[?]' search.  If NEW is is null, each
+     matching OLD is deleted.  The final delimiter is optional if it is
+     the last character on the input line.
 
 '&'
      Repeat the previous substitution.
@@ -4648,7 +6535,8 @@ more of the following modifiers, each pr
      conjunction with 's', as in 'gs/OLD/NEW/', or with '&'.
 
 'G'
-     Apply the following 's' modifier once to each word in the event.
+     Apply the following 's' or '&' modifier once to each word in the
+     event.
 
 
 File: gdb.info,  Node: In Memoriam,  Next: Formatting Documentation,  Prev: Using History Interactively,  Up: Top
@@ -4704,7 +6592,7 @@ and TeX (or 'texi2roff') to typeset the
 
    GDB includes an already formatted copy of the on-line Info version of
 this manual in the 'gdb' subdirectory.  The main Info file is
-'gdb-9.1.90.20200307-git/gdb/gdb.info', and it refers to subordinate
+'gdb-11.1.90.20211216-git/gdb/gdb.info', and it refers to subordinate
 files matching 'gdb.info*' in the same directory.  If necessary, you can
 print out these files, or read them with any editor; but they are easier
 to read using the 'info' subsystem in GNU Emacs or the standalone 'info'
@@ -4714,8 +6602,8 @@ program, available as part of the GNU Te
 Info formatting programs, such as 'texinfo-format-buffer' or 'makeinfo'.
 
    If you have 'makeinfo' installed, and are in the top level GDB source
-directory ('gdb-9.1.90.20200307-git', in the case of version
-9.1.90.20200307-git), you can make the Info file by typing:
+directory ('gdb-11.1.90.20211216-git', in the case of version
+11.1.90.20211216-git), you can make the Info file by typing:
 
      cd gdb
      make gdb.info
@@ -4740,7 +6628,7 @@ On its own, TeX cannot either read or ty
 
    If you have TeX and a DVI printer program installed, you can typeset
 and print this manual.  First switch to the 'gdb' subdirectory of the
-main source directory (for example, to 'gdb-9.1.90.20200307-git/gdb')
+main source directory (for example, to 'gdb-11.1.90.20211216-git/gdb')
 and type:
 
      make gdb.dvi
@@ -4749,8 +6637,8 @@ and type:
 
    ---------- Footnotes ----------
 
-   (1) In 'gdb-9.1.90.20200307-git/gdb/refcard.ps' of the version
-9.1.90.20200307-git release.
+   (1) In 'gdb-11.1.90.20211216-git/gdb/refcard.ps' of the version
+11.1.90.20211216-git release.
 
 
 File: gdb.info,  Node: Installing GDB,  Next: Maintenance Commands,  Prev: Formatting Documentation,  Up: Top
@@ -4787,6 +6675,13 @@ GNU make
      GDB's build system relies on features only found in the GNU make
      program.  Other variants of 'make' will not work.
 
+GMP (The GNU Multiple Precision Arithmetic Library)
+     GDB now uses GMP to perform some of its arithmetics.  This library
+     may be included with your operating system distribution; if it is
+     not, you can get the latest version from <https://gmplib.org/>.  If
+     GMP is installed at an unusual path, you can use the
+     '--with-libgmp-prefix' option to specify its location.
+
 Tools/Packages Optional for Building GDB
 ========================================
 
@@ -4901,35 +6796,35 @@ preparing GDB for installation; you can
 a single directory, whose name is usually composed by appending the
 version number to 'gdb'.
 
-   For example, the GDB version 9.1.90.20200307-git distribution is in
-the 'gdb-9.1.90.20200307-git' directory.  That directory contains:
+   For example, the GDB version 11.1.90.20211216-git distribution is in
+the 'gdb-11.1.90.20211216-git' directory.  That directory contains:
 
-'gdb-9.1.90.20200307-git/configure (and supporting files)'
+'gdb-11.1.90.20211216-git/configure (and supporting files)'
      script for configuring GDB and all its supporting libraries
 
-'gdb-9.1.90.20200307-git/gdb'
+'gdb-11.1.90.20211216-git/gdb'
      the source specific to GDB itself
 
-'gdb-9.1.90.20200307-git/bfd'
+'gdb-11.1.90.20211216-git/bfd'
      source for the Binary File Descriptor library
 
-'gdb-9.1.90.20200307-git/include'
+'gdb-11.1.90.20211216-git/include'
      GNU include files
 
-'gdb-9.1.90.20200307-git/libiberty'
+'gdb-11.1.90.20211216-git/libiberty'
      source for the '-liberty' free software library
 
-'gdb-9.1.90.20200307-git/opcodes'
+'gdb-11.1.90.20211216-git/opcodes'
      source for the library of opcode tables and disassemblers
 
-'gdb-9.1.90.20200307-git/readline'
+'gdb-11.1.90.20211216-git/readline'
      source for the GNU command-line interface
 
    There may be other subdirectories as well.
 
    The simplest way to configure and build GDB is to run 'configure'
 from the 'gdb-VERSION-NUMBER' source directory, which in this example is
-the 'gdb-9.1.90.20200307-git' directory.
+the 'gdb-11.1.90.20211216-git' directory.
 
    First switch to the 'gdb-VERSION-NUMBER' source directory if you are
 not already in it; then run 'configure'.  Pass the identifier for the
@@ -4937,7 +6832,7 @@ platform on which GDB will run as an arg
 
    For example:
 
-     cd gdb-9.1.90.20200307-git
+     cd gdb-11.1.90.20211216-git
      ./configure
      make
 
@@ -4985,13 +6880,13 @@ to specify a path to find 'configure' it
 directory.  If the path to 'configure' would be the same as the argument
 to '--srcdir', you can leave out the '--srcdir' option; it is assumed.)
 
-   For example, with version 9.1.90.20200307-git, you can build GDB in a
-separate directory for a Sun 4 like this:
+   For example, with version 11.1.90.20211216-git, you can build GDB in
+a separate directory for a Sun 4 like this:
 
-     cd gdb-9.1.90.20200307-git
+     cd gdb-11.1.90.20211216-git
      mkdir ../gdb-sun4
      cd ../gdb-sun4
-     ../gdb-9.1.90.20200307-git/configure
+     ../gdb-11.1.90.20211216-git/configure
      make
 
    When 'configure' builds a configuration using a remote source
@@ -5002,9 +6897,9 @@ the example, you'd find the Sun 4 librar
 
    Make sure that your path to the 'configure' script has just one
 instance of 'gdb' in it.  If your path to 'configure' looks like
-'../gdb-9.1.90.20200307-git/gdb/configure', you are configuring only one
-subdirectory of GDB, not the whole package.  This leads to build errors
-about missing include files such as 'bfd/bfd.h'.
+'../gdb-11.1.90.20211216-git/gdb/configure', you are configuring only
+one subdirectory of GDB, not the whole package.  This leads to build
+errors about missing include files such as 'bfd/bfd.h'.
 
    One popular reason to build several GDB configurations in separate
 directories is to configure GDB for cross-compiling (where GDB runs on
@@ -5018,8 +6913,8 @@ a configured directory--whatever directo
 
    The 'Makefile' that 'configure' generates in each source directory
 also runs recursively.  If you type 'make' in a source directory such as
-'gdb-9.1.90.20200307-git' (or in a separate configured directory
-configured with '--srcdir=DIRNAME/gdb-9.1.90.20200307-git'), you will
+'gdb-11.1.90.20211216-git' (or in a separate configured directory
+configured with '--srcdir=DIRNAME/gdb-11.1.90.20211216-git'), you will
 build all the required libraries, and then build GDB.
 
    When you have multiple hosts or targets configured in separate
@@ -5064,7 +6959,7 @@ you can use it to test your guesses on a
      Invalid configuration `i986v': machine `i986v' not recognized
 
 'config.sub' is also distributed in the GDB source directory
-('gdb-9.1.90.20200307-git', for version 9.1.90.20200307-git).
+('gdb-11.1.90.20211216-git', for version 11.1.90.20211216-git).
 
 
 File: gdb.info,  Node: Configure Options,  Next: System-wide configuration,  Prev: Config Names,  Up: Installing GDB
@@ -5151,6 +7046,15 @@ described here.
      Use the curses library instead of the termcap library, for
      text-mode terminal operations.
 
+'--with-debuginfod'
+     Build GDB with libdebuginfod, the debuginfod client library.  Used
+     to automatically fetch source files and separate debug files from
+     debuginfod servers using the associated executable's build ID.
+     Enabled by default if libdebuginfod is installed and found at
+     configure time.  debuginfod is packaged with elfutils, starting
+     with version 0.178.  You can get the latest version from
+     'https://sourceware.org/elfutils/'.
+
 '--with-libunwind-ia64'
      Use the libunwind library for unwinding function call stack on ia64
      target platforms.  See http://www.nongnu.org/libunwind/index.html
@@ -5587,7 +7491,7 @@ commands that turn on debugging messages
      Print the entire architecture configuration.  The optional argument
      FILE names the file where the output goes.
 
-'maint print c-tdesc'
+'maint print c-tdesc [-single-feature] [FILE]'
      Print the target description (*note Target Descriptions::) as a C
      source file.  By default, the target description is for the current
      target, but if the optional argument FILE is provided, that file is
@@ -5597,6 +7501,19 @@ commands that turn on debugging messages
      built again.  This command is used by developers after they add or
      modify XML target descriptions.
 
+     When the optional flag '-single-feature' is provided then the
+     target description being processed (either the default, or from
+     FILE) must only contain a single feature.  The source file produced
+     is different in this case.
+
+'maint print xml-tdesc [FILE]'
+     Print the target description (*note Target Descriptions::) as an
+     XML file.  By default print the target description for the current
+     target, but if the optional argument FILE is provided, then that
+     file is read in by GDB and then used to produce the description.
+     The FILE should be an XML document, of the form described in *note
+     Target Description Format::.
+
 'maint check xml-descriptions DIR'
      Check that the target descriptions dynamically created by GDB equal
      the descriptions created from XML files found in DIR.
@@ -5609,6 +7526,12 @@ commands that turn on debugging messages
      Note that parts of the test may be skipped on some platforms when
      debugging core files.
 
+'maint print core-file-backed-mappings'
+     Print the file-backed mappings which were loaded from a core file
+     note.  This output represents state internal to GDB and should be
+     similar to the mappings displayed by the 'info proc mappings'
+     command.
+
 'maint print dummy-frames'
      Prints the contents of GDB's internal dummy-frame stack.
 
@@ -5660,8 +7583,12 @@ commands that turn on debugging messages
            save       internal
            restore    internal
 
+'maint flush register-cache'
 'flushregs'
-     This command forces GDB to flush its internal register cache.
+     Flush the contents of the register cache and as a consequence the
+     frame cache.  This command is useful when debugging issues related
+     to register fetching, or frame unwinding.  The command 'flushregs'
+     is deprecated in favor of 'maint flush register-cache'.
 
 'maint print objfiles [REGEXP]'
      Print a dump of all known object files.  If REGEXP is specified,
@@ -5790,10 +7717,10 @@ commands that turn on debugging messages
      capable hosts, GDB may use multiple threads to speed up certain
      CPU-intensive operations, such as demangling symbol names.  While
      the number of threads used by GDB may vary, this command can be
-     used to set an upper bound on this number.  The default is '0'
-     (disabled).  A value of 'unlimited' lets GDB choose a reasonable
-     number.  Note that this only controls worker threads started by GDB
-     itself; libraries used by GDB may start threads of their own.
+     used to set an upper bound on this number.  The default is
+     'unlimited', which lets GDB choose a reasonable number.  Note that
+     this only controls worker threads started by GDB itself; libraries
+     used by GDB may start threads of their own.
 
 'maint set profile'
 'maint show profile'
@@ -6104,2381 +8031,12 @@ error number.  That number is not well d
 should be returned.  That way it is possible to extend the protocol.  A
 newer GDB can tell if a packet is supported based on that response.
 
-   At a minimum, a stub is required to support the 'g' and 'G' commands
-for register access, and the 'm' and 'M' commands for memory access.
-Stubs that only control single-threaded targets can implement run
-control with the 'c' (continue), and 's' (step) commands.  Stubs that
+   At a minimum, a stub is required to support the '?' command to tell
+GDB the reason for halting, 'g' and 'G' commands for register access,
+and the 'm' and 'M' commands for memory access.  Stubs that only control
+single-threaded targets can implement run control with the 'c'
+(continue) command, and if the target architecture supports
+hardware-assisted single-stepping, the 's' (step) command.  Stubs that
 support multi-threading targets should support the 'vCont' command.  All
 other commands are optional.
 
-
-File: gdb.info,  Node: Packets,  Next: Stop Reply Packets,  Prev: Overview,  Up: Remote Protocol
-
-E.2 Packets
-===========
-
-The following table provides a complete list of all currently defined
-COMMANDs and their corresponding response DATA.  *Note File-I/O Remote
-Protocol Extension::, for details about the File I/O extension of the
-remote protocol.
-
-   Each packet's description has a template showing the packet's overall
-syntax, followed by an explanation of the packet's meaning.  We include
-spaces in some of the templates for clarity; these are not part of the
-packet's syntax.  No GDB packet uses spaces to separate its components.
-For example, a template like 'foo BAR BAZ' describes a packet beginning
-with the three ASCII bytes 'foo', followed by a BAR, followed directly
-by a BAZ.  GDB does not transmit a space character between the 'foo' and
-the BAR, or between the BAR and the BAZ.
-
-   Several packets and replies include a THREAD-ID field to identify a
-thread.  Normally these are positive numbers with a target-specific
-interpretation, formatted as big-endian hex strings.  A THREAD-ID can
-also be a literal '-1' to indicate all threads, or '0' to pick any
-thread.
-
-   In addition, the remote protocol supports a multiprocess feature in
-which the THREAD-ID syntax is extended to optionally include both
-process and thread ID fields, as 'pPID.TID'.  The PID (process) and TID
-(thread) components each have the format described above: a positive
-number with target-specific interpretation formatted as a big-endian hex
-string, literal '-1' to indicate all processes or threads
-(respectively), or '0' to indicate an arbitrary process or thread.
-Specifying just a process, as 'pPID', is equivalent to 'pPID.-1'.  It is
-an error to specify all processes but a specific thread, such as
-'p-1.TID'.  Note that the 'p' prefix is _not_ used for those packets and
-replies explicitly documented to include a process ID, rather than a
-THREAD-ID.
-
-   The multiprocess THREAD-ID syntax extensions are only used if both
-GDB and the stub report support for the 'multiprocess' feature using
-'qSupported'.  *Note multiprocess extensions::, for more information.
-
-   Note that all packet forms beginning with an upper- or lower-case
-letter, other than those described here, are reserved for future use.
-
-   Here are the packet descriptions.
-
-'!'
-     Enable extended mode.  In extended mode, the remote server is made
-     persistent.  The 'R' packet is used to restart the program being
-     debugged.
-
-     Reply:
-     'OK'
-          The remote target both supports and has enabled extended mode.
-
-'?'
-     Indicate the reason the target halted.  The reply is the same as
-     for step and continue.  This packet has a special interpretation
-     when the target is in non-stop mode; see *note Remote Non-Stop::.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'A ARGLEN,ARGNUM,ARG,...'
-     Initialized 'argv[]' array passed into program.  ARGLEN specifies
-     the number of bytes in the hex encoded byte stream ARG.  See
-     'gdbserver' for more details.
-
-     Reply:
-     'OK'
-          The arguments were set.
-     'E NN'
-          An error occurred.
-
-'b BAUD'
-     (Don't use this packet; its behavior is not well-defined.)  Change
-     the serial line speed to BAUD.
-
-     JTC: _When does the transport layer state change?  When it's
-     received, or after the ACK is transmitted.  In either case, there
-     are problems if the command or the acknowledgment packet is
-     dropped._
-
-     Stan: _If people really wanted to add something like this, and get
-     it working for the first time, they ought to modify ser-unix.c to
-     send some kind of out-of-band message to a specially-setup stub and
-     have the switch happen "in between" packets, so that from remote
-     protocol's point of view, nothing actually happened._
-
-'B ADDR,MODE'
-     Set (MODE is 'S') or clear (MODE is 'C') a breakpoint at ADDR.
-
-     Don't use this packet.  Use the 'Z' and 'z' packets instead (*note
-     insert breakpoint or watchpoint packet::).
-
-'bc'
-     Backward continue.  Execute the target system in reverse.  No
-     parameter.  *Note Reverse Execution::, for more information.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'bs'
-     Backward single step.  Execute one instruction in reverse.  No
-     parameter.  *Note Reverse Execution::, for more information.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'c [ADDR]'
-     Continue at ADDR, which is the address to resume.  If ADDR is
-     omitted, resume at current address.
-
-     This packet is deprecated for multi-threading support.  *Note vCont
-     packet::.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'C SIG[;ADDR]'
-     Continue with signal SIG (hex signal number).  If ';ADDR' is
-     omitted, resume at same address.
-
-     This packet is deprecated for multi-threading support.  *Note vCont
-     packet::.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'d'
-     Toggle debug flag.
-
-     Don't use this packet; instead, define a general set packet (*note
-     General Query Packets::).
-
-'D'
-'D;PID'
-     The first form of the packet is used to detach GDB from the remote
-     system.  It is sent to the remote target before GDB disconnects via
-     the 'detach' command.
-
-     The second form, including a process ID, is used when multiprocess
-     protocol extensions are enabled (*note multiprocess extensions::),
-     to detach only a specific process.  The PID is specified as a
-     big-endian hex string.
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error
-
-'F RC,EE,CF;XX'
-     A reply from GDB to an 'F' packet sent by the target.  This is part
-     of the File-I/O protocol extension.  *Note File-I/O Remote Protocol
-     Extension::, for the specification.
-
-'g'
-     Read general registers.
-
-     Reply:
-     'XX...'
-          Each byte of register data is described by two hex digits.
-          The bytes with the register are transmitted in target byte
-          order.  The size of each register and their position within
-          the 'g' packet are determined by the GDB internal gdbarch
-          functions 'DEPRECATED_REGISTER_RAW_SIZE' and
-          'gdbarch_register_name'.
-
-          When reading registers from a trace frame (*note Using the
-          Collected Data: Analyze Collected Data.), the stub may also
-          return a string of literal 'x''s in place of the register data
-          digits, to indicate that the corresponding register has not
-          been collected, thus its value is unavailable.  For example,
-          for an architecture with 4 registers of 4 bytes each, the
-          following reply indicates to GDB that registers 0 and 2 have
-          not been collected, while registers 1 and 3 have been
-          collected, and both have zero value:
-
-               -> g
-               <- xxxxxxxx00000000xxxxxxxx00000000
-
-     'E NN'
-          for an error.
-
-'G XX...'
-     Write general registers.  *Note read registers packet::, for a
-     description of the XX... data.
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error
-
-'H OP THREAD-ID'
-     Set thread for subsequent operations ('m', 'M', 'g', 'G', et.al.).
-     Depending on the operation to be performed, OP should be 'c' for
-     step and continue operations (note that this is deprecated,
-     supporting the 'vCont' command is a better option), and 'g' for
-     other operations.  The thread designator THREAD-ID has the format
-     and interpretation described in *note thread-id syntax::.
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error
-
-'i [ADDR[,NNN]]'
-     Step the remote target by a single clock cycle.  If ',NNN' is
-     present, cycle step NNN cycles.  If ADDR is present, cycle step
-     starting at that address.
-
-'I'
-     Signal, then cycle step.  *Note step with signal packet::.  *Note
-     cycle step packet::.
-
-'k'
-     Kill request.
-
-     The exact effect of this packet is not specified.
-
-     For a bare-metal target, it may power cycle or reset the target
-     system.  For that reason, the 'k' packet has no reply.
-
-     For a single-process target, it may kill that process if possible.
-
-     A multiple-process target may choose to kill just one process, or
-     all that are under GDB's control.  For more precise control, use
-     the vKill packet (*note vKill packet::).
-
-     If the target system immediately closes the connection in response
-     to 'k', GDB does not consider the lack of packet acknowledgment to
-     be an error, and assumes the kill was successful.
-
-     If connected using 'target extended-remote', and the target does
-     not close the connection in response to a kill request, GDB probes
-     the target state as if a new connection was opened (*note ?
-     packet::).
-
-'m ADDR,LENGTH'
-     Read LENGTH addressable memory units starting at address ADDR
-     (*note addressable memory unit::).  Note that ADDR may not be
-     aligned to any particular boundary.
-
-     The stub need not use any particular size or alignment when
-     gathering data from memory for the response; even if ADDR is
-     word-aligned and LENGTH is a multiple of the word size, the stub is
-     free to use byte accesses, or not.  For this reason, this packet
-     may not be suitable for accessing memory-mapped I/O devices.
-
-     Reply:
-     'XX...'
-          Memory contents; each byte is transmitted as a two-digit
-          hexadecimal number.  The reply may contain fewer addressable
-          memory units than requested if the server was able to read
-          only part of the region of memory.
-     'E NN'
-          NN is errno
-
-'M ADDR,LENGTH:XX...'
-     Write LENGTH addressable memory units starting at address ADDR
-     (*note addressable memory unit::).  The data is given by XX...;
-     each byte is transmitted as a two-digit hexadecimal number.
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error (this includes the case where only part of the
-          data was written).
-
-'p N'
-     Read the value of register N; N is in hex.  *Note read registers
-     packet::, for a description of how the returned register value is
-     encoded.
-
-     Reply:
-     'XX...'
-          the register's value
-     'E NN'
-          for an error
-     ''
-          Indicating an unrecognized QUERY.
-
-'P N...=R...'
-     Write register N... with value R....  The register number N is in
-     hexadecimal, and R... contains two hex digits for each byte in the
-     register (target byte order).
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error
-
-'q NAME PARAMS...'
-'Q NAME PARAMS...'
-     General query ('q') and set ('Q').  These packets are described
-     fully in *note General Query Packets::.
-
-'r'
-     Reset the entire system.
-
-     Don't use this packet; use the 'R' packet instead.
-
-'R XX'
-     Restart the program being debugged.  The XX, while needed, is
-     ignored.  This packet is only available in extended mode (*note
-     extended mode::).
-
-     The 'R' packet has no reply.
-
-'s [ADDR]'
-     Single step, resuming at ADDR.  If ADDR is omitted, resume at same
-     address.
-
-     This packet is deprecated for multi-threading support.  *Note vCont
-     packet::.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'S SIG[;ADDR]'
-     Step with signal.  This is analogous to the 'C' packet, but
-     requests a single-step, rather than a normal resumption of
-     execution.
-
-     This packet is deprecated for multi-threading support.  *Note vCont
-     packet::.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'t ADDR:PP,MM'
-     Search backwards starting at address ADDR for a match with pattern
-     PP and mask MM, both of which are are 4 byte long.  There must be
-     at least 3 digits in ADDR.
-
-'T THREAD-ID'
-     Find out if the thread THREAD-ID is alive.  *Note thread-id
-     syntax::.
-
-     Reply:
-     'OK'
-          thread is still alive
-     'E NN'
-          thread is dead
-
-'v'
-     Packets starting with 'v' are identified by a multi-letter name, up
-     to the first ';' or '?' (or the end of the packet).
-
-'vAttach;PID'
-     Attach to a new process with the specified process ID PID.  The
-     process ID is a hexadecimal integer identifying the process.  In
-     all-stop mode, all threads in the attached process are stopped; in
-     non-stop mode, it may be attached without being stopped if that is
-     supported by the target.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'E NN'
-          for an error
-     'Any stop packet'
-          for success in all-stop mode (*note Stop Reply Packets::)
-     'OK'
-          for success in non-stop mode (*note Remote Non-Stop::)
-
-'vCont[;ACTION[:THREAD-ID]]...'
-     Resume the inferior, specifying different actions for each thread.
-
-     For each inferior thread, the leftmost action with a matching
-     THREAD-ID is applied.  Threads that don't match any action remain
-     in their current state.  Thread IDs are specified using the syntax
-     described in *note thread-id syntax::.  If multiprocess extensions
-     (*note multiprocess extensions::) are supported, actions can be
-     specified to match all threads in a process by using the 'pPID.-1'
-     form of the THREAD-ID.  An action with no THREAD-ID matches all
-     threads.  Specifying no actions is an error.
-
-     Currently supported actions are:
-
-     'c'
-          Continue.
-     'C SIG'
-          Continue with signal SIG.  The signal SIG should be two hex
-          digits.
-     's'
-          Step.
-     'S SIG'
-          Step with signal SIG.  The signal SIG should be two hex
-          digits.
-     't'
-          Stop.
-     'r START,END'
-          Step once, and then keep stepping as long as the thread stops
-          at addresses between START (inclusive) and END (exclusive).
-          The remote stub reports a stop reply when either the thread
-          goes out of the range or is stopped due to an unrelated
-          reason, such as hitting a breakpoint.  *Note range stepping::.
-
-          If the range is empty (START == END), then the action becomes
-          equivalent to the 's' action.  In other words, single-step
-          once, and report the stop (even if the stepped instruction
-          jumps to START).
-
-          (A stop reply may be sent at any point even if the PC is still
-          within the stepping range; for example, it is valid to
-          implement this packet in a degenerate way as a single
-          instruction step operation.)
-
-     The optional argument ADDR normally associated with the 'c', 'C',
-     's', and 'S' packets is not supported in 'vCont'.
-
-     The 't' action is only relevant in non-stop mode (*note Remote
-     Non-Stop::) and may be ignored by the stub otherwise.  A stop reply
-     should be generated for any affected thread not already stopped.
-     When a thread is stopped by means of a 't' action, the
-     corresponding stop reply should indicate that the thread has
-     stopped with signal '0', regardless of whether the target uses some
-     other signal as an implementation detail.
-
-     The server must ignore 'c', 'C', 's', 'S', and 'r' actions for
-     threads that are already running.  Conversely, the server must
-     ignore 't' actions for threads that are already stopped.
-
-     _Note:_ In non-stop mode, a thread is considered running until GDB
-     acknowledges an asynchronous stop notification for it with the
-     'vStopped' packet (*note Remote Non-Stop::).
-
-     The stub must support 'vCont' if it reports support for
-     multiprocess extensions (*note multiprocess extensions::).
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-'vCont?'
-     Request a list of actions supported by the 'vCont' packet.
-
-     Reply:
-     'vCont[;ACTION...]'
-          The 'vCont' packet is supported.  Each ACTION is a supported
-          command in the 'vCont' packet.
-     ''
-          The 'vCont' packet is not supported.
-
-'vCtrlC'
-     Interrupt remote target as if a control-C was pressed on the remote
-     terminal.  This is the equivalent to reacting to the '^C' ('\003',
-     the control-C character) character in all-stop mode while the
-     target is running, except this works in non-stop mode.  *Note
-     interrupting remote targets::, for more info on the all-stop
-     variant.
-
-     Reply:
-     'E NN'
-          for an error
-     'OK'
-          for success
-
-'vFile:OPERATION:PARAMETER...'
-     Perform a file operation on the target system.  For details, see
-     *note Host I/O Packets::.
-
-'vFlashErase:ADDR,LENGTH'
-     Direct the stub to erase LENGTH bytes of flash starting at ADDR.
-     The region may enclose any number of flash blocks, but its start
-     and end must fall on block boundaries, as indicated by the flash
-     block size appearing in the memory map (*note Memory Map Format::).
-     GDB groups flash memory programming operations together, and sends
-     a 'vFlashDone' request after each group; the stub is allowed to
-     delay erase operation until the 'vFlashDone' packet is received.
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error
-
-'vFlashWrite:ADDR:XX...'
-     Direct the stub to write data to flash address ADDR.  The data is
-     passed in binary form using the same encoding as for the 'X' packet
-     (*note Binary Data::).  The memory ranges specified by
-     'vFlashWrite' packets preceding a 'vFlashDone' packet must not
-     overlap, and must appear in order of increasing addresses (although
-     'vFlashErase' packets for higher addresses may already have been
-     received; the ordering is guaranteed only between 'vFlashWrite'
-     packets).  If a packet writes to an address that was neither erased
-     by a preceding 'vFlashErase' packet nor by some other
-     target-specific method, the results are unpredictable.
-
-     Reply:
-     'OK'
-          for success
-     'E.memtype'
-          for vFlashWrite addressing non-flash memory
-     'E NN'
-          for an error
-
-'vFlashDone'
-     Indicate to the stub that flash programming operation is finished.
-     The stub is permitted to delay or batch the effects of a group of
-     'vFlashErase' and 'vFlashWrite' packets until a 'vFlashDone' packet
-     is received.  The contents of the affected regions of flash memory
-     are unpredictable until the 'vFlashDone' request is completed.
-
-'vKill;PID'
-     Kill the process with the specified process ID PID, which is a
-     hexadecimal integer identifying the process.  This packet is used
-     in preference to 'k' when multiprocess protocol extensions are
-     supported; see *note multiprocess extensions::.
-
-     Reply:
-     'E NN'
-          for an error
-     'OK'
-          for success
-
-'vMustReplyEmpty'
-     The correct reply to an unknown 'v' packet is to return the empty
-     string, however, some older versions of 'gdbserver' would
-     incorrectly return 'OK' for unknown 'v' packets.
-
-     The 'vMustReplyEmpty' is used as a feature test to check how
-     'gdbserver' handles unknown packets, it is important that this
-     packet be handled in the same way as other unknown 'v' packets.  If
-     this packet is handled differently to other unknown 'v' packets
-     then it is possible that GDB may run into problems in other areas,
-     specifically around use of 'vFile:setfs:'.
-
-'vRun;FILENAME[;ARGUMENT]...'
-     Run the program FILENAME, passing it each ARGUMENT on its command
-     line.  The file and arguments are hex-encoded strings.  If FILENAME
-     is an empty string, the stub may use a default program (e.g. the
-     last program run).  The program is created in the stopped state.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'E NN'
-          for an error
-     'Any stop packet'
-          for success (*note Stop Reply Packets::)
-
-'vStopped'
-     *Note Notification Packets::.
-
-'X ADDR,LENGTH:XX...'
-     Write data to memory, where the data is transmitted in binary.
-     Memory is specified by its address ADDR and number of addressable
-     memory units LENGTH (*note addressable memory unit::); 'XX...' is
-     binary data (*note Binary Data::).
-
-     Reply:
-     'OK'
-          for success
-     'E NN'
-          for an error
-
-'z TYPE,ADDR,KIND'
-'Z TYPE,ADDR,KIND'
-     Insert ('Z') or remove ('z') a TYPE breakpoint or watchpoint
-     starting at address ADDRESS of kind KIND.
-
-     Each breakpoint and watchpoint packet TYPE is documented
-     separately.
-
-     _Implementation notes: A remote target shall return an empty string
-     for an unrecognized breakpoint or watchpoint packet TYPE.  A remote
-     target shall support either both or neither of a given 'ZTYPE...'
-     and 'zTYPE...' packet pair.  To avoid potential problems with
-     duplicate packets, the operations should be implemented in an
-     idempotent way._
-
-'z0,ADDR,KIND'
-'Z0,ADDR,KIND[;COND_LIST...][;cmds:PERSIST,CMD_LIST...]'
-     Insert ('Z0') or remove ('z0') a software breakpoint at address
-     ADDR of type KIND.
-
-     A software breakpoint is implemented by replacing the instruction
-     at ADDR with a software breakpoint or trap instruction.  The KIND
-     is target-specific and typically indicates the size of the
-     breakpoint in bytes that should be inserted.  E.g., the ARM and
-     MIPS can insert either a 2 or 4 byte breakpoint.  Some
-     architectures have additional meanings for KIND (*note
-     Architecture-Specific Protocol Details::); if no
-     architecture-specific value is being used, it should be '0'.  KIND
-     is hex-encoded.  COND_LIST is an optional list of conditional
-     expressions in bytecode form that should be evaluated on the
-     target's side.  These are the conditions that should be taken into
-     consideration when deciding if the breakpoint trigger should be
-     reported back to GDB.
-
-     See also the 'swbreak' stop reason (*note swbreak stop reason::)
-     for how to best report a software breakpoint event to GDB.
-
-     The COND_LIST parameter is comprised of a series of expressions,
-     concatenated without separators.  Each expression has the following
-     form:
-
-     'X LEN,EXPR'
-          LEN is the length of the bytecode expression and EXPR is the
-          actual conditional expression in bytecode form.
-
-     The optional CMD_LIST parameter introduces commands that may be run
-     on the target, rather than being reported back to GDB.  The
-     parameter starts with a numeric flag PERSIST; if the flag is
-     nonzero, then the breakpoint may remain active and the commands
-     continue to be run even when GDB disconnects from the target.
-     Following this flag is a series of expressions concatenated with no
-     separators.  Each expression has the following form:
-
-     'X LEN,EXPR'
-          LEN is the length of the bytecode expression and EXPR is the
-          actual commands expression in bytecode form.
-
-     _Implementation note: It is possible for a target to copy or move
-     code that contains software breakpoints (e.g., when implementing
-     overlays).  The behavior of this packet, in the presence of such a
-     target, is not defined._
-
-     Reply:
-     'OK'
-          success
-     ''
-          not supported
-     'E NN'
-          for an error
-
-'z1,ADDR,KIND'
-'Z1,ADDR,KIND[;COND_LIST...][;cmds:PERSIST,CMD_LIST...]'
-     Insert ('Z1') or remove ('z1') a hardware breakpoint at address
-     ADDR.
-
-     A hardware breakpoint is implemented using a mechanism that is not
-     dependent on being able to modify the target's memory.  The KIND,
-     COND_LIST, and CMD_LIST arguments have the same meaning as in 'Z0'
-     packets.
-
-     _Implementation note: A hardware breakpoint is not affected by code
-     movement._
-
-     Reply:
-     'OK'
-          success
-     ''
-          not supported
-     'E NN'
-          for an error
-
-'z2,ADDR,KIND'
-'Z2,ADDR,KIND'
-     Insert ('Z2') or remove ('z2') a write watchpoint at ADDR.  The
-     number of bytes to watch is specified by KIND.
-
-     Reply:
-     'OK'
-          success
-     ''
-          not supported
-     'E NN'
-          for an error
-
-'z3,ADDR,KIND'
-'Z3,ADDR,KIND'
-     Insert ('Z3') or remove ('z3') a read watchpoint at ADDR.  The
-     number of bytes to watch is specified by KIND.
-
-     Reply:
-     'OK'
-          success
-     ''
-          not supported
-     'E NN'
-          for an error
-
-'z4,ADDR,KIND'
-'Z4,ADDR,KIND'
-     Insert ('Z4') or remove ('z4') an access watchpoint at ADDR.  The
-     number of bytes to watch is specified by KIND.
-
-     Reply:
-     'OK'
-          success
-     ''
-          not supported
-     'E NN'
-          for an error
-
-
-File: gdb.info,  Node: Stop Reply Packets,  Next: General Query Packets,  Prev: Packets,  Up: Remote Protocol
-
-E.3 Stop Reply Packets
-======================
-
-The 'C', 'c', 'S', 's', 'vCont', 'vAttach', 'vRun', 'vStopped', and '?'
-packets can receive any of the below as a reply.  Except for '?' and
-'vStopped', that reply is only returned when the target halts.  In the
-below the exact meaning of "signal number" is defined by the header
-'include/gdb/signals.h' in the GDB source code.
-
-   In non-stop mode, the server will simply reply 'OK' to commands such
-as 'vCont'; any stop will be the subject of a future notification.
-*Note Remote Non-Stop::.
-
-   As in the description of request packets, we include spaces in the
-reply templates for clarity; these are not part of the reply packet's
-syntax.  No GDB stop reply packet uses spaces to separate its
-components.
-
-'S AA'
-     The program received signal number AA (a two-digit hexadecimal
-     number).  This is equivalent to a 'T' response with no N:R pairs.
-
-'T AA N1:R1;N2:R2;...'
-     The program received signal number AA (a two-digit hexadecimal
-     number).  This is equivalent to an 'S' response, except that the
-     'N:R' pairs can carry values of important registers and other
-     information directly in the stop reply packet, reducing round-trip
-     latency.  Single-step and breakpoint traps are reported this way.
-     Each 'N:R' pair is interpreted as follows:
-
-        * If N is a hexadecimal number, it is a register number, and the
-          corresponding R gives that register's value.  The data R is a
-          series of bytes in target byte order, with each byte given by
-          a two-digit hex number.
-
-        * If N is 'thread', then R is the THREAD-ID of the stopped
-          thread, as specified in *note thread-id syntax::.
-
-        * If N is 'core', then R is the hexadecimal number of the core
-          on which the stop event was detected.
-
-        * If N is a recognized "stop reason", it describes a more
-          specific event that stopped the target.  The currently defined
-          stop reasons are listed below.  The AA should be '05', the
-          trap signal.  At most one stop reason should be present.
-
-        * Otherwise, GDB should ignore this 'N:R' pair and go on to the
-          next; this allows us to extend the protocol in the future.
-
-     The currently defined stop reasons are:
-
-     'watch'
-     'rwatch'
-     'awatch'
-          The packet indicates a watchpoint hit, and R is the data
-          address, in hex.
-
-     'syscall_entry'
-     'syscall_return'
-          The packet indicates a syscall entry or return, and R is the
-          syscall number, in hex.
-
-     'library'
-          The packet indicates that the loaded libraries have changed.
-          GDB should use 'qXfer:libraries:read' to fetch a new list of
-          loaded libraries.  The R part is ignored.
-
-     'replaylog'
-          The packet indicates that the target cannot continue replaying
-          logged execution events, because it has reached the end (or
-          the beginning when executing backward) of the log.  The value
-          of R will be either 'begin' or 'end'.  *Note Reverse
-          Execution::, for more information.
-
-     'swbreak'
-          The packet indicates a software breakpoint instruction was
-          executed, irrespective of whether it was GDB that planted the
-          breakpoint or the breakpoint is hardcoded in the program.  The
-          R part must be left empty.
-
-          On some architectures, such as x86, at the architecture level,
-          when a breakpoint instruction executes the program counter
-          points at the breakpoint address plus an offset.  On such
-          targets, the stub is responsible for adjusting the PC to point
-          back at the breakpoint address.
-
-          This packet should not be sent by default; older GDB versions
-          did not support it.  GDB requests it, by supplying an
-          appropriate 'qSupported' feature (*note qSupported::).  The
-          remote stub must also supply the appropriate 'qSupported'
-          feature indicating support.
-
-          This packet is required for correct non-stop mode operation.
-
-     'hwbreak'
-          The packet indicates the target stopped for a hardware
-          breakpoint.  The R part must be left empty.
-
-          The same remarks about 'qSupported' and non-stop mode above
-          apply.
-
-     'fork'
-          The packet indicates that 'fork' was called, and R is the
-          thread ID of the new child process.  Refer to *note thread-id
-          syntax:: for the format of the THREAD-ID field.  This packet
-          is only applicable to targets that support fork events.
-
-          This packet should not be sent by default; older GDB versions
-          did not support it.  GDB requests it, by supplying an
-          appropriate 'qSupported' feature (*note qSupported::).  The
-          remote stub must also supply the appropriate 'qSupported'
-          feature indicating support.
-
-     'vfork'
-          The packet indicates that 'vfork' was called, and R is the
-          thread ID of the new child process.  Refer to *note thread-id
-          syntax:: for the format of the THREAD-ID field.  This packet
-          is only applicable to targets that support vfork events.
-
-          This packet should not be sent by default; older GDB versions
-          did not support it.  GDB requests it, by supplying an
-          appropriate 'qSupported' feature (*note qSupported::).  The
-          remote stub must also supply the appropriate 'qSupported'
-          feature indicating support.
-
-     'vforkdone'
-          The packet indicates that a child process created by a vfork
-          has either called 'exec' or terminated, so that the address
-          spaces of the parent and child process are no longer shared.
-          The R part is ignored.  This packet is only applicable to
-          targets that support vforkdone events.
-
-          This packet should not be sent by default; older GDB versions
-          did not support it.  GDB requests it, by supplying an
-          appropriate 'qSupported' feature (*note qSupported::).  The
-          remote stub must also supply the appropriate 'qSupported'
-          feature indicating support.
-
-     'exec'
-          The packet indicates that 'execve' was called, and R is the
-          absolute pathname of the file that was executed, in hex.  This
-          packet is only applicable to targets that support exec events.
-
-          This packet should not be sent by default; older GDB versions
-          did not support it.  GDB requests it, by supplying an
-          appropriate 'qSupported' feature (*note qSupported::).  The
-          remote stub must also supply the appropriate 'qSupported'
-          feature indicating support.
-
-     'create'
-          The packet indicates that the thread was just created.  The
-          new thread is stopped until GDB sets it running with a
-          resumption packet (*note vCont packet::).  This packet should
-          not be sent by default; GDB requests it with the *note
-          QThreadEvents:: packet.  See also the 'w' (*note thread exit
-          event::) remote reply below.  The R part is ignored.
-
-'W AA'
-'W AA ; process:PID'
-     The process exited, and AA is the exit status.  This is only
-     applicable to certain targets.
-
-     The second form of the response, including the process ID of the
-     exited process, can be used only when GDB has reported support for
-     multiprocess protocol extensions; see *note multiprocess
-     extensions::.  Both AA and PID are formatted as big-endian hex
-     strings.
-
-'X AA'
-'X AA ; process:PID'
-     The process terminated with signal AA.
-
-     The second form of the response, including the process ID of the
-     terminated process, can be used only when GDB has reported support
-     for multiprocess protocol extensions; see *note multiprocess
-     extensions::.  Both AA and PID are formatted as big-endian hex
-     strings.
-
-'w AA ; TID'
-
-     The thread exited, and AA is the exit status.  This response should
-     not be sent by default; GDB requests it with the *note
-     QThreadEvents:: packet.  See also *note thread create event::
-     above.  AA is formatted as a big-endian hex string.
-
-'N'
-     There are no resumed threads left in the target.  In other words,
-     even though the process is alive, the last resumed thread has
-     exited.  For example, say the target process has two threads:
-     thread 1 and thread 2.  The client leaves thread 1 stopped, and
-     resumes thread 2, which subsequently exits.  At this point, even
-     though the process is still alive, and thus no 'W' stop reply is
-     sent, no thread is actually executing either.  The 'N' stop reply
-     thus informs the client that it can stop waiting for stop replies.
-     This packet should not be sent by default; older GDB versions did
-     not support it.  GDB requests it, by supplying an appropriate
-     'qSupported' feature (*note qSupported::).  The remote stub must
-     also supply the appropriate 'qSupported' feature indicating
-     support.
-
-'O XX...'
-     'XX...' is hex encoding of ASCII data, to be written as the
-     program's console output.  This can happen at any time while the
-     program is running and the debugger should continue to wait for
-     'W', 'T', etc.  This reply is not permitted in non-stop mode.
-
-'F CALL-ID,PARAMETER...'
-     CALL-ID is the identifier which says which host system call should
-     be called.  This is just the name of the function.  Translation
-     into the correct system call is only applicable as it's defined in
-     GDB.  *Note File-I/O Remote Protocol Extension::, for a list of
-     implemented system calls.
-
-     'PARAMETER...' is a list of parameters as defined for this very
-     system call.
-
-     The target replies with this packet when it expects GDB to call a
-     host system call on behalf of the target.  GDB replies with an
-     appropriate 'F' packet and keeps up waiting for the next reply
-     packet from the target.  The latest 'C', 'c', 'S' or 's' action is
-     expected to be continued.  *Note File-I/O Remote Protocol
-     Extension::, for more details.
-
-
-File: gdb.info,  Node: General Query Packets,  Next: Architecture-Specific Protocol Details,  Prev: Stop Reply Packets,  Up: Remote Protocol
-
-E.4 General Query Packets
-=========================
-
-Packets starting with 'q' are "general query packets"; packets starting
-with 'Q' are "general set packets".  General query and set packets are a
-semi-unified form for retrieving and sending information to and from the
-stub.
-
-   The initial letter of a query or set packet is followed by a name
-indicating what sort of thing the packet applies to.  For example, GDB
-may use a 'qSymbol' packet to exchange symbol definitions with the stub.
-These packet names follow some conventions:
-
-   * The name must not contain commas, colons or semicolons.
-   * Most GDB query and set packets have a leading upper case letter.
-   * The names of custom vendor packets should use a company prefix, in
-     lower case, followed by a period.  For example, packets designed at
-     the Acme Corporation might begin with 'qacme.foo' (for querying
-     foos) or 'Qacme.bar' (for setting bars).
-
-   The name of a query or set packet should be separated from any
-parameters by a ':'; the parameters themselves should be separated by
-',' or ';'.  Stubs must be careful to match the full packet name, and
-check for a separator or the end of the packet, in case two packet names
-share a common prefix.  New packets should not begin with 'qC', 'qP', or
-'qL'(1).
-
-   Like the descriptions of the other packets, each description here has
-a template showing the packet's overall syntax, followed by an
-explanation of the packet's meaning.  We include spaces in some of the
-templates for clarity; these are not part of the packet's syntax.  No
-GDB packet uses spaces to separate its components.
-
-   Here are the currently defined query and set packets:
-
-'QAgent:1'
-'QAgent:0'
-     Turn on or off the agent as a helper to perform some debugging
-     operations delegated from GDB (*note Control Agent::).
-
-'QAllow:OP:VAL...'
-     Specify which operations GDB expects to request of the target, as a
-     semicolon-separated list of operation name and value pairs.
-     Possible values for OP include 'WriteReg', 'WriteMem',
-     'InsertBreak', 'InsertTrace', 'InsertFastTrace', and 'Stop'.  VAL
-     is either 0, indicating that GDB will not request the operation, or
-     1, indicating that it may.  (The target can then use this to set up
-     its own internals optimally, for instance if the debugger never
-     expects to insert breakpoints, it may not need to install its own
-     trap handler.)
-
-'qC'
-     Return the current thread ID.
-
-     Reply:
-     'QC THREAD-ID'
-          Where THREAD-ID is a thread ID as documented in *note
-          thread-id syntax::.
-     '(anything else)'
-          Any other reply implies the old thread ID.
-
-'qCRC:ADDR,LENGTH'
-     Compute the CRC checksum of a block of memory using CRC-32 defined
-     in IEEE 802.3.  The CRC is computed byte at a time, taking the most
-     significant bit of each byte first.  The initial pattern code
-     '0xffffffff' is used to ensure leading zeros affect the CRC.
-
-     _Note:_ This is the same CRC used in validating separate debug
-     files (*note Debugging Information in Separate Files: Separate
-     Debug Files.).  However the algorithm is slightly different.  When
-     validating separate debug files, the CRC is computed taking the
-     _least_ significant bit of each byte first, and the final result is
-     inverted to detect trailing zeros.
-
-     Reply:
-     'E NN'
-          An error (such as memory fault)
-     'C CRC32'
-          The specified memory region's checksum is CRC32.
-
-'QDisableRandomization:VALUE'
-     Some target operating systems will randomize the virtual address
-     space of the inferior process as a security feature, but provide a
-     feature to disable such randomization, e.g. to allow for a more
-     deterministic debugging experience.  On such systems, this packet
-     with a VALUE of 1 directs the target to disable address space
-     randomization for processes subsequently started via 'vRun'
-     packets, while a packet with a VALUE of 0 tells the target to
-     enable address space randomization.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     ''
-          An empty reply indicates that 'QDisableRandomization' is not
-          supported by the stub.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).  This should only be done on targets that actually
-     support disabling address space randomization.
-
-'QStartupWithShell:VALUE'
-     On UNIX-like targets, it is possible to start the inferior using a
-     shell program.  This is the default behavior on both GDB and
-     'gdbserver' (*note set startup-with-shell::).  This packet is used
-     to inform 'gdbserver' whether it should start the inferior using a
-     shell or not.
-
-     If VALUE is '0', 'gdbserver' will not use a shell to start the
-     inferior.  If VALUE is '1', 'gdbserver' will use a shell to start
-     the inferior.  All other values are considered an error.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).  This should only be done on targets that actually
-     support starting the inferior using a shell.
-
-     Use of this packet is controlled by the 'set startup-with-shell'
-     command; *note set startup-with-shell::.
-
-'QEnvironmentHexEncoded:HEX-VALUE'
-     On UNIX-like targets, it is possible to set environment variables
-     that will be passed to the inferior during the startup process.
-     This packet is used to inform 'gdbserver' of an environment
-     variable that has been defined by the user on GDB (*note set
-     environment::).
-
-     The packet is composed by HEX-VALUE, an hex encoded representation
-     of the NAME=VALUE format representing an environment variable.  The
-     name of the environment variable is represented by NAME, and the
-     value to be assigned to the environment variable is represented by
-     VALUE.  If the variable has no value (i.e., the value is 'null'),
-     then VALUE will not be present.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).  This should only be done on targets that actually
-     support passing environment variables to the starting inferior.
-
-     This packet is related to the 'set environment' command; *note set
-     environment::.
-
-'QEnvironmentUnset:HEX-VALUE'
-     On UNIX-like targets, it is possible to unset environment variables
-     before starting the inferior in the remote target.  This packet is
-     used to inform 'gdbserver' of an environment variable that has been
-     unset by the user on GDB (*note unset environment::).
-
-     The packet is composed by HEX-VALUE, an hex encoded representation
-     of the name of the environment variable to be unset.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).  This should only be done on targets that actually
-     support passing environment variables to the starting inferior.
-
-     This packet is related to the 'unset environment' command; *note
-     unset environment::.
-
-'QEnvironmentReset'
-     On UNIX-like targets, this packet is used to reset the state of
-     environment variables in the remote target before starting the
-     inferior.  In this context, reset means unsetting all environment
-     variables that were previously set by the user (i.e., were not
-     initially present in the environment).  It is sent to 'gdbserver'
-     before the 'QEnvironmentHexEncoded' (*note
-     QEnvironmentHexEncoded::) and the 'QEnvironmentUnset' (*note
-     QEnvironmentUnset::) packets.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).  This should only be done on targets that actually
-     support passing environment variables to the starting inferior.
-
-'QSetWorkingDir:[DIRECTORY]'
-     This packet is used to inform the remote server of the intended
-     current working directory for programs that are going to be
-     executed.
-
-     The packet is composed by DIRECTORY, an hex encoded representation
-     of the directory that the remote inferior will use as its current
-     working directory.  If DIRECTORY is an empty string, the remote
-     server should reset the inferior's current working directory to its
-     original, empty value.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-'qfThreadInfo'
-'qsThreadInfo'
-     Obtain a list of all active thread IDs from the target (OS). Since
-     there may be too many active threads to fit into one reply packet,
-     this query works iteratively: it may require more than one
-     query/reply sequence to obtain the entire list of threads.  The
-     first query of the sequence will be the 'qfThreadInfo' query;
-     subsequent queries in the sequence will be the 'qsThreadInfo'
-     query.
-
-     NOTE: This packet replaces the 'qL' query (see below).
-
-     Reply:
-     'm THREAD-ID'
-          A single thread ID
-     'm THREAD-ID,THREAD-ID...'
-          a comma-separated list of thread IDs
-     'l'
-          (lower case letter 'L') denotes end of list.
-
-     In response to each query, the target will reply with a list of one
-     or more thread IDs, separated by commas.  GDB will respond to each
-     reply with a request for more thread ids (using the 'qs' form of
-     the query), until the target responds with 'l' (lower-case ell, for
-     "last").  Refer to *note thread-id syntax::, for the format of the
-     THREAD-ID fields.
-
-     _Note: GDB will send the 'qfThreadInfo' query during the initial
-     connection with the remote target, and the very first thread ID
-     mentioned in the reply will be stopped by GDB in a subsequent
-     message.  Therefore, the stub should ensure that the first thread
-     ID in the 'qfThreadInfo' reply is suitable for being stopped by
-     GDB._
-
-'qGetTLSAddr:THREAD-ID,OFFSET,LM'
-     Fetch the address associated with thread local storage specified by
-     THREAD-ID, OFFSET, and LM.
-
-     THREAD-ID is the thread ID associated with the thread for which to
-     fetch the TLS address.  *Note thread-id syntax::.
-
-     OFFSET is the (big endian, hex encoded) offset associated with the
-     thread local variable.  (This offset is obtained from the debug
-     information associated with the variable.)
-
-     LM is the (big endian, hex encoded) OS/ABI-specific encoding of the
-     load module associated with the thread local storage.  For example,
-     a GNU/Linux system will pass the link map address of the shared
-     object associated with the thread local storage under
-     consideration.  Other operating environments may choose to
-     represent the load module differently, so the precise meaning of
-     this parameter will vary.
-
-     Reply:
-     'XX...'
-          Hex encoded (big endian) bytes representing the address of the
-          thread local storage requested.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     ''
-          An empty reply indicates that 'qGetTLSAddr' is not supported
-          by the stub.
-
-'qGetTIBAddr:THREAD-ID'
-     Fetch address of the Windows OS specific Thread Information Block.
-
-     THREAD-ID is the thread ID associated with the thread.
-
-     Reply:
-     'XX...'
-          Hex encoded (big endian) bytes representing the linear address
-          of the thread information block.
-
-     'E NN'
-          An error occured.  This means that either the thread was not
-          found, or the address could not be retrieved.
-
-     ''
-          An empty reply indicates that 'qGetTIBAddr' is not supported
-          by the stub.
-
-'qL STARTFLAG THREADCOUNT NEXTTHREAD'
-     Obtain thread information from RTOS. Where: STARTFLAG (one hex
-     digit) is one to indicate the first query and zero to indicate a
-     subsequent query; THREADCOUNT (two hex digits) is the maximum
-     number of threads the response packet can contain; and NEXTTHREAD
-     (eight hex digits), for subsequent queries (STARTFLAG is zero), is
-     returned in the response as ARGTHREAD.
-
-     Don't use this packet; use the 'qfThreadInfo' query instead (see
-     above).
-
-     Reply:
-     'qM COUNT DONE ARGTHREAD THREAD...'
-          Where: COUNT (two hex digits) is the number of threads being
-          returned; DONE (one hex digit) is zero to indicate more
-          threads and one indicates no further threads; ARGTHREADID
-          (eight hex digits) is NEXTTHREAD from the request packet;
-          THREAD... is a sequence of thread IDs, THREADID (eight hex
-          digits), from the target.  See
-          'remote.c:parse_threadlist_response()'.
-
-'qOffsets'
-     Get section offsets that the target used when relocating the
-     downloaded image.
-
-     Reply:
-     'Text=XXX;Data=YYY[;Bss=ZZZ]'
-          Relocate the 'Text' section by XXX from its original address.
-          Relocate the 'Data' section by YYY from its original address.
-          If the object file format provides segment information (e.g.
-          ELF 'PT_LOAD' program headers), GDB will relocate entire
-          segments by the supplied offsets.
-
-          _Note: while a 'Bss' offset may be included in the response,
-          GDB ignores this and instead applies the 'Data' offset to the
-          'Bss' section._
-
-     'TextSeg=XXX[;DataSeg=YYY]'
-          Relocate the first segment of the object file, which
-          conventionally contains program code, to a starting address of
-          XXX.  If 'DataSeg' is specified, relocate the second segment,
-          which conventionally contains modifiable data, to a starting
-          address of YYY.  GDB will report an error if the object file
-          does not contain segment information, or does not contain at
-          least as many segments as mentioned in the reply.  Extra
-          segments are kept at fixed offsets relative to the last
-          relocated segment.
-
-'qP MODE THREAD-ID'
-     Returns information on THREAD-ID.  Where: MODE is a hex encoded 32
-     bit mode; THREAD-ID is a thread ID (*note thread-id syntax::).
-
-     Don't use this packet; use the 'qThreadExtraInfo' query instead
-     (see below).
-
-     Reply: see 'remote.c:remote_unpack_thread_info_response()'.
-
-'QNonStop:1'
-'QNonStop:0'
-     Enter non-stop ('QNonStop:1') or all-stop ('QNonStop:0') mode.
-     *Note Remote Non-Stop::, for more information.
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     ''
-          An empty reply indicates that 'QNonStop' is not supported by
-          the stub.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).  Use of this packet is controlled by the 'set
-     non-stop' command; *note Non-Stop Mode::.
-
-'QCatchSyscalls:1 [;SYSNO]...'
-'QCatchSyscalls:0'
-     Enable ('QCatchSyscalls:1') or disable ('QCatchSyscalls:0')
-     catching syscalls from the inferior process.
-
-     For 'QCatchSyscalls:1', each listed syscall SYSNO (encoded in hex)
-     should be reported to GDB.  If no syscall SYSNO is listed, every
-     system call should be reported.
-
-     Note that if a syscall not in the list is reported, GDB will still
-     filter the event according to its own list from all corresponding
-     'catch syscall' commands.  However, it is more efficient to only
-     report the requested syscalls.
-
-     Multiple 'QCatchSyscalls:1' packets do not combine; any earlier
-     'QCatchSyscalls:1' list is completely replaced by the new list.
-
-     If the inferior process execs, the state of 'QCatchSyscalls' is
-     kept for the new process too.  On targets where exec may affect
-     syscall numbers, for example with exec between 32 and 64-bit
-     processes, the client should send a new packet with the new syscall
-     list.
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  NN are hex digits.
-
-     ''
-          An empty reply indicates that 'QCatchSyscalls' is not
-          supported by the stub.
-
-     Use of this packet is controlled by the 'set remote catch-syscalls'
-     command (*note set remote catch-syscalls: Remote Configuration.).
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).
-
-'QPassSignals: SIGNAL [;SIGNAL]...'
-     Each listed SIGNAL should be passed directly to the inferior
-     process.  Signals are numbered identically to continue packets and
-     stop replies (*note Stop Reply Packets::).  Each SIGNAL list item
-     should be strictly greater than the previous item.  These signals
-     do not need to stop the inferior, or be reported to GDB.  All other
-     signals should be reported to GDB.  Multiple 'QPassSignals' packets
-     do not combine; any earlier 'QPassSignals' list is completely
-     replaced by the new list.  This packet improves performance when
-     using 'handle SIGNAL nostop noprint pass'.
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     ''
-          An empty reply indicates that 'QPassSignals' is not supported
-          by the stub.
-
-     Use of this packet is controlled by the 'set remote pass-signals'
-     command (*note set remote pass-signals: Remote Configuration.).
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate 'qSupported' response (*note
-     qSupported::).
-
-'QProgramSignals: SIGNAL [;SIGNAL]...'
-     Each listed SIGNAL may be delivered to the inferior process.
-     Others should be silently discarded.
-
-     In some cases, the remote stub may need to decide whether to
-     deliver a signal to the program or not without GDB involvement.
-     One example of that is while detaching -- the program's threads may
-     have stopped for signals that haven't yet had a chance of being
-     reported to GDB, and so the remote stub can use the signal list
-     specified by this packet to know whether to deliver or ignore those
-     pending signals.
-
-     This does not influence whether to deliver a signal as requested by
-     a resumption packet (*note vCont packet::).
-
-     Signals are numbered identically to continue packets and stop
-     replies (*note Stop Reply Packets::).  Each SIGNAL list item should
-     be strictly greater than the previous item.  Multiple
-     'QProgramSignals' packets do not combine; any earlier
-     'QProgramSignals' list is completely replaced by the new list.
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     ''
-          An empty reply indicates that 'QProgramSignals' is not
-          supported by the stub.
-
-     Use of this packet is controlled by the 'set remote
-     program-signals' command (*note set remote program-signals: Remote
-     Configuration.).  This packet is not probed by default; the remote
-     stub must request it, by supplying an appropriate 'qSupported'
-     response (*note qSupported::).
-
-'QThreadEvents:1'
-'QThreadEvents:0'
-
-     Enable ('QThreadEvents:1') or disable ('QThreadEvents:0') reporting
-     of thread create and exit events.  *Note thread create event::, for
-     the reply specifications.  For example, this is used in non-stop
-     mode when GDB stops a set of threads and synchronously waits for
-     the their corresponding stop replies.  Without exit events, if one
-     of the threads exits, GDB would hang forever not knowing that it
-     should no longer expect a stop for that same thread.  GDB does not
-     enable this feature unless the stub reports that it supports it by
-     including 'QThreadEvents+' in its 'qSupported' reply.
-
-     Reply:
-     'OK'
-          The request succeeded.
-
-     'E NN'
-          An error occurred.  The error number NN is given as hex
-          digits.
-
-     ''
-          An empty reply indicates that 'QThreadEvents' is not supported
-          by the stub.
-
-     Use of this packet is controlled by the 'set remote thread-events'
-     command (*note set remote thread-events: Remote Configuration.).
-
-'qRcmd,COMMAND'
-     COMMAND (hex encoded) is passed to the local interpreter for
-     execution.  Invalid commands should be reported using the output
-     string.  Before the final result packet, the target may also
-     respond with a number of intermediate 'OOUTPUT' console output
-     packets.  _Implementors should note that providing access to a
-     stubs's interpreter may have security implications_.
-
-     Reply:
-     'OK'
-          A command response with no output.
-     'OUTPUT'
-          A command response with the hex encoded output string OUTPUT.
-     'E NN'
-          Indicate a badly formed request.
-     ''
-          An empty reply indicates that 'qRcmd' is not recognized.
-
-     (Note that the 'qRcmd' packet's name is separated from the command
-     by a ',', not a ':', contrary to the naming conventions above.
-     Please don't use this packet as a model for new packets.)
-
-'qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN'
-     Search LENGTH bytes at ADDRESS for SEARCH-PATTERN.  Both ADDRESS
-     and LENGTH are encoded in hex; SEARCH-PATTERN is a sequence of
-     bytes, also hex encoded.
-
-     Reply:
-     '0'
-          The pattern was not found.
-     '1,address'
-          The pattern was found at ADDRESS.
-     'E NN'
-          A badly formed request or an error was encountered while
-          searching memory.
-     ''
-          An empty reply indicates that 'qSearch:memory' is not
-          recognized.
-
-'QStartNoAckMode'
-     Request that the remote stub disable the normal '+'/'-' protocol
-     acknowledgments (*note Packet Acknowledgment::).
-
-     Reply:
-     'OK'
-          The stub has switched to no-acknowledgment mode.  GDB
-          acknowledges this response, but neither the stub nor GDB shall
-          send or expect further '+'/'-' acknowledgments in the current
-          connection.
-     ''
-          An empty reply indicates that the stub does not support
-          no-acknowledgment mode.
-
-'qSupported [:GDBFEATURE [;GDBFEATURE]... ]'
-     Tell the remote stub about features supported by GDB, and query the
-     stub for features it supports.  This packet allows GDB and the
-     remote stub to take advantage of each others' features.
-     'qSupported' also consolidates multiple feature probes at startup,
-     to improve GDB performance--a single larger packet performs better
-     than multiple smaller probe packets on high-latency links.  Some
-     features may enable behavior which must not be on by default, e.g.
-     because it would confuse older clients or stubs.  Other features
-     may describe packets which could be automatically probed for, but
-     are not.  These features must be reported before GDB will use them.
-     This "default unsupported" behavior is not appropriate for all
-     packets, but it helps to keep the initial connection time under
-     control with new versions of GDB which support increasing numbers
-     of packets.
-
-     Reply:
-     'STUBFEATURE [;STUBFEATURE]...'
-          The stub supports or does not support each returned
-          STUBFEATURE, depending on the form of each STUBFEATURE (see
-          below for the possible forms).
-     ''
-          An empty reply indicates that 'qSupported' is not recognized,
-          or that no features needed to be reported to GDB.
-
-     The allowed forms for each feature (either a GDBFEATURE in the
-     'qSupported' packet, or a STUBFEATURE in the response) are:
-
-     'NAME=VALUE'
-          The remote protocol feature NAME is supported, and associated
-          with the specified VALUE.  The format of VALUE depends on the
-          feature, but it must not include a semicolon.
-     'NAME+'
-          The remote protocol feature NAME is supported, and does not
-          need an associated value.
-     'NAME-'
-          The remote protocol feature NAME is not supported.
-     'NAME?'
-          The remote protocol feature NAME may be supported, and GDB
-          should auto-detect support in some other way when it is
-          needed.  This form will not be used for GDBFEATURE
-          notifications, but may be used for STUBFEATURE responses.
-
-     Whenever the stub receives a 'qSupported' request, the supplied set
-     of GDB features should override any previous request.  This allows
-     GDB to put the stub in a known state, even if the stub had
-     previously been communicating with a different version of GDB.
-
-     The following values of GDBFEATURE (for the packet sent by GDB) are
-     defined:
-
-     'multiprocess'
-          This feature indicates whether GDB supports multiprocess
-          extensions to the remote protocol.  GDB does not use such
-          extensions unless the stub also reports that it supports them
-          by including 'multiprocess+' in its 'qSupported' reply.  *Note
-          multiprocess extensions::, for details.
-
-     'xmlRegisters'
-          This feature indicates that GDB supports the XML target
-          description.  If the stub sees 'xmlRegisters=' with target
-          specific strings separated by a comma, it will report register
-          description.
-
-     'qRelocInsn'
-          This feature indicates whether GDB supports the 'qRelocInsn'
-          packet (*note Relocate instruction reply packet: Tracepoint
-          Packets.).
-
-     'swbreak'
-          This feature indicates whether GDB supports the swbreak stop
-          reason in stop replies.  *Note swbreak stop reason::, for
-          details.
-
-     'hwbreak'
-          This feature indicates whether GDB supports the hwbreak stop
-          reason in stop replies.  *Note swbreak stop reason::, for
-          details.
-
-     'fork-events'
-          This feature indicates whether GDB supports fork event
-          extensions to the remote protocol.  GDB does not use such
-          extensions unless the stub also reports that it supports them
-          by including 'fork-events+' in its 'qSupported' reply.
-
-     'vfork-events'
-          This feature indicates whether GDB supports vfork event
-          extensions to the remote protocol.  GDB does not use such
-          extensions unless the stub also reports that it supports them
-          by including 'vfork-events+' in its 'qSupported' reply.
-
-     'exec-events'
-          This feature indicates whether GDB supports exec event
-          extensions to the remote protocol.  GDB does not use such
-          extensions unless the stub also reports that it supports them
-          by including 'exec-events+' in its 'qSupported' reply.
-
-     'vContSupported'
-          This feature indicates whether GDB wants to know the supported
-          actions in the reply to 'vCont?' packet.
-
-     Stubs should ignore any unknown values for GDBFEATURE.  Any GDB
-     which sends a 'qSupported' packet supports receiving packets of
-     unlimited length (earlier versions of GDB may reject overly long
-     responses).  Additional values for GDBFEATURE may be defined in the
-     future to let the stub take advantage of new features in GDB, e.g.
-     incompatible improvements in the remote protocol--the
-     'multiprocess' feature is an example of such a feature.  The stub's
-     reply should be independent of the GDBFEATURE entries sent by GDB;
-     first GDB describes all the features it supports, and then the stub
-     replies with all the features it supports.
-
-     Similarly, GDB will silently ignore unrecognized stub feature
-     responses, as long as each response uses one of the standard forms.
-
-     Some features are flags.  A stub which supports a flag feature
-     should respond with a '+' form response.  Other features require
-     values, and the stub should respond with an '=' form response.
-
-     Each feature has a default value, which GDB will use if
-     'qSupported' is not available or if the feature is not mentioned in
-     the 'qSupported' response.  The default values are fixed; a stub is
-     free to omit any feature responses that match the defaults.
-
-     Not all features can be probed, but for those which can, the
-     probing mechanism is useful: in some cases, a stub's internal
-     architecture may not allow the protocol layer to know some
-     information about the underlying target in advance.  This is
-     especially common in stubs which may be configured for multiple
-     targets.
-
-     These are the currently defined stub features and their properties:
-
-     Feature Name              Value          Default   Probe
-                               Required                 Allowed
-                                                        
-     'PacketSize'              Yes            '-'       No
-                                                        
-     'qXfer:auxv:read'         No             '-'       Yes
-                                                        
-     'qXfer:btrace:read'       No             '-'       Yes
-                                                        
-     'qXfer:btrace-conf:read'  No             '-'       Yes
-                                                        
-     'qXfer:exec-file:read'    No             '-'       Yes
-                                                        
-     'qXfer:features:read'     No             '-'       Yes
-                                                        
-     'qXfer:libraries:read'    No             '-'       Yes
-                                                        
-     'qXfer:libraries-svr4:read'No            '-'       Yes
-                                                        
-     'augmented-libraries-svr4-read'No        '-'       No
-                                                        
-     'qXfer:memory-map:read'   No             '-'       Yes
-                                                        
-     'qXfer:sdata:read'        No             '-'       Yes
-                                                        
-     'qXfer:siginfo:read'      No             '-'       Yes
-                                                        
-     'qXfer:siginfo:write'     No             '-'       Yes
-                                                        
-     'qXfer:threads:read'      No             '-'       Yes
-                                                        
-     'qXfer:traceframe-info:read'No           '-'       Yes
-                                                        
-     'qXfer:uib:read'          No             '-'       Yes
-                                                        
-     'qXfer:fdpic:read'        No             '-'       Yes
-                                                        
-     'Qbtrace:off'             Yes            '-'       Yes
-                                                        
-     'Qbtrace:bts'             Yes            '-'       Yes
-                                                        
-     'Qbtrace:pt'              Yes            '-'       Yes
-                                                        
-     'Qbtrace-conf:bts:size'   Yes            '-'       Yes
-                                                        
-     'Qbtrace-conf:pt:size'    Yes            '-'       Yes
-                                                        
-     'QNonStop'                No             '-'       Yes
-                                                        
-     'QCatchSyscalls'          No             '-'       Yes
-                                                        
-     'QPassSignals'            No             '-'       Yes
-                                                        
-     'QStartNoAckMode'         No             '-'       Yes
-                                                        
-     'multiprocess'            No             '-'       No
-                                                        
-     'ConditionalBreakpoints'  No             '-'       No
-                                                        
-     'ConditionalTracepoints'  No             '-'       No
-                                                        
-     'ReverseContinue'         No             '-'       No
-                                                        
-     'ReverseStep'             No             '-'       No
-                                                        
-     'TracepointSource'        No             '-'       No
-                                                        
-     'QAgent'                  No             '-'       No
-                                                        
-     'QAllow'                  No             '-'       No
-                                                        
-     'QDisableRandomization'   No             '-'       No
-                                                        
-     'EnableDisableTracepoints'No             '-'       No
-                                                        
-     'QTBuffer:size'           No             '-'       No
-                                                        
-     'tracenz'                 No             '-'       No
-                                                        
-     'BreakpointCommands'      No             '-'       No
-                                                        
-     'swbreak'                 No             '-'       No
-                                                        
-     'hwbreak'                 No             '-'       No
-                                                        
-     'fork-events'             No             '-'       No
-                                                        
-     'vfork-events'            No             '-'       No
-                                                        
-     'exec-events'             No             '-'       No
-                                                        
-     'QThreadEvents'           No             '-'       No
-                                                        
-     'no-resumed'              No             '-'       No
-                                                        
-
-     These are the currently defined stub features, in more detail:
-
-     'PacketSize=BYTES'
-          The remote stub can accept packets up to at least BYTES in
-          length.  GDB will send packets up to this size for bulk
-          transfers, and will never send larger packets.  This is a
-          limit on the data characters in the packet, including the
-          frame and checksum.  There is no trailing NUL byte in a remote
-          protocol packet; if the stub stores packets in a
-          NUL-terminated format, it should allow an extra byte in its
-          buffer for the NUL. If this stub feature is not supported, GDB
-          guesses based on the size of the 'g' packet response.
-
-     'qXfer:auxv:read'
-          The remote stub understands the 'qXfer:auxv:read' packet
-          (*note qXfer auxiliary vector read::).
-
-     'qXfer:btrace:read'
-          The remote stub understands the 'qXfer:btrace:read' packet
-          (*note qXfer btrace read::).
-
-     'qXfer:btrace-conf:read'
-          The remote stub understands the 'qXfer:btrace-conf:read'
-          packet (*note qXfer btrace-conf read::).
-
-     'qXfer:exec-file:read'
-          The remote stub understands the 'qXfer:exec-file:read' packet
-          (*note qXfer executable filename read::).
-
-     'qXfer:features:read'
-          The remote stub understands the 'qXfer:features:read' packet
-          (*note qXfer target description read::).
-
-     'qXfer:libraries:read'
-          The remote stub understands the 'qXfer:libraries:read' packet
-          (*note qXfer library list read::).
-
-     'qXfer:libraries-svr4:read'
-          The remote stub understands the 'qXfer:libraries-svr4:read'
-          packet (*note qXfer svr4 library list read::).
-
-     'augmented-libraries-svr4-read'
-          The remote stub understands the augmented form of the
-          'qXfer:libraries-svr4:read' packet (*note qXfer svr4 library
-          list read::).
-
-     'qXfer:memory-map:read'
-          The remote stub understands the 'qXfer:memory-map:read' packet
-          (*note qXfer memory map read::).
-
-     'qXfer:sdata:read'
-          The remote stub understands the 'qXfer:sdata:read' packet
-          (*note qXfer sdata read::).
-
-     'qXfer:siginfo:read'
-          The remote stub understands the 'qXfer:siginfo:read' packet
-          (*note qXfer siginfo read::).
-
-     'qXfer:siginfo:write'
-          The remote stub understands the 'qXfer:siginfo:write' packet
-          (*note qXfer siginfo write::).
-
-     'qXfer:threads:read'
-          The remote stub understands the 'qXfer:threads:read' packet
-          (*note qXfer threads read::).
-
-     'qXfer:traceframe-info:read'
-          The remote stub understands the 'qXfer:traceframe-info:read'
-          packet (*note qXfer traceframe info read::).
-
-     'qXfer:uib:read'
-          The remote stub understands the 'qXfer:uib:read' packet (*note
-          qXfer unwind info block::).
-
-     'qXfer:fdpic:read'
-          The remote stub understands the 'qXfer:fdpic:read' packet
-          (*note qXfer fdpic loadmap read::).
-
-     'QNonStop'
-          The remote stub understands the 'QNonStop' packet (*note
-          QNonStop::).
-
-     'QCatchSyscalls'
-          The remote stub understands the 'QCatchSyscalls' packet (*note
-          QCatchSyscalls::).
-
-     'QPassSignals'
-          The remote stub understands the 'QPassSignals' packet (*note
-          QPassSignals::).
-
-     'QStartNoAckMode'
-          The remote stub understands the 'QStartNoAckMode' packet and
-          prefers to operate in no-acknowledgment mode.  *Note Packet
-          Acknowledgment::.
-
-     'multiprocess'
-          The remote stub understands the multiprocess extensions to the
-          remote protocol syntax.  The multiprocess extensions affect
-          the syntax of thread IDs in both packets and replies (*note
-          thread-id syntax::), and add process IDs to the 'D' packet and
-          'W' and 'X' replies.  Note that reporting this feature
-          indicates support for the syntactic extensions only, not that
-          the stub necessarily supports debugging of more than one
-          process at a time.  The stub must not use multiprocess
-          extensions in packet replies unless GDB has also indicated it
-          supports them in its 'qSupported' request.
-
-     'qXfer:osdata:read'
-          The remote stub understands the 'qXfer:osdata:read' packet
-          ((*note qXfer osdata read::).
-
-     'ConditionalBreakpoints'
-          The target accepts and implements evaluation of conditional
-          expressions defined for breakpoints.  The target will only
-          report breakpoint triggers when such conditions are true
-          (*note Break Conditions: Conditions.).
-
-     'ConditionalTracepoints'
-          The remote stub accepts and implements conditional expressions
-          defined for tracepoints (*note Tracepoint Conditions::).
-
-     'ReverseContinue'
-          The remote stub accepts and implements the reverse continue
-          packet (*note bc::).
-
-     'ReverseStep'
-          The remote stub accepts and implements the reverse step packet
-          (*note bs::).
-
-     'TracepointSource'
-          The remote stub understands the 'QTDPsrc' packet that supplies
-          the source form of tracepoint definitions.
-
-     'QAgent'
-          The remote stub understands the 'QAgent' packet.
-
-     'QAllow'
-          The remote stub understands the 'QAllow' packet.
-
-     'QDisableRandomization'
-          The remote stub understands the 'QDisableRandomization'
-          packet.
-
-     'StaticTracepoint'
-          The remote stub supports static tracepoints.
-
-     'InstallInTrace'
-          The remote stub supports installing tracepoint in tracing.
-
-     'EnableDisableTracepoints'
-          The remote stub supports the 'QTEnable' (*note QTEnable::) and
-          'QTDisable' (*note QTDisable::) packets that allow tracepoints
-          to be enabled and disabled while a trace experiment is
-          running.
-
-     'QTBuffer:size'
-          The remote stub supports the 'QTBuffer:size' (*note
-          QTBuffer-size::) packet that allows to change the size of the
-          trace buffer.
-
-     'tracenz'
-          The remote stub supports the 'tracenz' bytecode for collecting
-          strings.  See *note Bytecode Descriptions:: for details about
-          the bytecode.
-
-     'BreakpointCommands'
-          The remote stub supports running a breakpoint's command list
-          itself, rather than reporting the hit to GDB.
-
-     'Qbtrace:off'
-          The remote stub understands the 'Qbtrace:off' packet.
-
-     'Qbtrace:bts'
-          The remote stub understands the 'Qbtrace:bts' packet.
-
-     'Qbtrace:pt'
-          The remote stub understands the 'Qbtrace:pt' packet.
-
-     'Qbtrace-conf:bts:size'
-          The remote stub understands the 'Qbtrace-conf:bts:size'
-          packet.
-
-     'Qbtrace-conf:pt:size'
-          The remote stub understands the 'Qbtrace-conf:pt:size' packet.
-
-     'swbreak'
-          The remote stub reports the 'swbreak' stop reason for memory
-          breakpoints.
-
-     'hwbreak'
-          The remote stub reports the 'hwbreak' stop reason for hardware
-          breakpoints.
-
-     'fork-events'
-          The remote stub reports the 'fork' stop reason for fork
-          events.
-
-     'vfork-events'
-          The remote stub reports the 'vfork' stop reason for vfork
-          events and vforkdone events.
-
-     'exec-events'
-          The remote stub reports the 'exec' stop reason for exec
-          events.
-
-     'vContSupported'
-          The remote stub reports the supported actions in the reply to
-          'vCont?' packet.
-
-     'QThreadEvents'
-          The remote stub understands the 'QThreadEvents' packet.
-
-     'no-resumed'
-          The remote stub reports the 'N' stop reply.
-
-'qSymbol::'
-     Notify the target that GDB is prepared to serve symbol lookup
-     requests.  Accept requests from the target for the values of
-     symbols.
-
-     Reply:
-     'OK'
-          The target does not need to look up any (more) symbols.
-     'qSymbol:SYM_NAME'
-          The target requests the value of symbol SYM_NAME (hex
-          encoded).  GDB may provide the value by using the
-          'qSymbol:SYM_VALUE:SYM_NAME' message, described below.
-
-'qSymbol:SYM_VALUE:SYM_NAME'
-     Set the value of SYM_NAME to SYM_VALUE.
-
-     SYM_NAME (hex encoded) is the name of a symbol whose value the
-     target has previously requested.
-
-     SYM_VALUE (hex) is the value for symbol SYM_NAME.  If GDB cannot
-     supply a value for SYM_NAME, then this field will be empty.
-
-     Reply:
-     'OK'
-          The target does not need to look up any (more) symbols.
-     'qSymbol:SYM_NAME'
-          The target requests the value of a new symbol SYM_NAME (hex
-          encoded).  GDB will continue to supply the values of symbols
-          (if available), until the target ceases to request them.
-
-'qTBuffer'
-'QTBuffer'
-'QTDisconnected'
-'QTDP'
-'QTDPsrc'
-'QTDV'
-'qTfP'
-'qTfV'
-'QTFrame'
-'qTMinFTPILen'
-
-     *Note Tracepoint Packets::.
-
-'qThreadExtraInfo,THREAD-ID'
-     Obtain from the target OS a printable string description of thread
-     attributes for the thread THREAD-ID; see *note thread-id syntax::,
-     for the forms of THREAD-ID.  This string may contain anything that
-     the target OS thinks is interesting for GDB to tell the user about
-     the thread.  The string is displayed in GDB's 'info threads'
-     display.  Some examples of possible thread extra info strings are
-     'Runnable', or 'Blocked on Mutex'.
-
-     Reply:
-     'XX...'
-          Where 'XX...' is a hex encoding of ASCII data, comprising the
-          printable string containing the extra information about the
-          thread's attributes.
-
-     (Note that the 'qThreadExtraInfo' packet's name is separated from
-     the command by a ',', not a ':', contrary to the naming conventions
-     above.  Please don't use this packet as a model for new packets.)
-
-'QTNotes'
-'qTP'
-'QTSave'
-'qTsP'
-'qTsV'
-'QTStart'
-'QTStop'
-'QTEnable'
-'QTDisable'
-'QTinit'
-'QTro'
-'qTStatus'
-'qTV'
-'qTfSTM'
-'qTsSTM'
-'qTSTMat'
-     *Note Tracepoint Packets::.
-
-'qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH'
-     Read uninterpreted bytes from the target's special data area
-     identified by the keyword OBJECT.  Request LENGTH bytes starting at
-     OFFSET bytes into the data.  The content and encoding of ANNEX is
-     specific to OBJECT; it can supply additional details about what
-     data to access.
-
-     Reply:
-     'm DATA'
-          Data DATA (*note Binary Data::) has been read from the target.
-          There may be more data at a higher address (although it is
-          permitted to return 'm' even for the last valid block of data,
-          as long as at least one byte of data was read).  It is
-          possible for DATA to have fewer bytes than the LENGTH in the
-          request.
-
-     'l DATA'
-          Data DATA (*note Binary Data::) has been read from the target.
-          There is no more data to be read.  It is possible for DATA to
-          have fewer bytes than the LENGTH in the request.
-
-     'l'
-          The OFFSET in the request is at the end of the data.  There is
-          no more data to be read.
-
-     'E00'
-          The request was malformed, or ANNEX was invalid.
-
-     'E NN'
-          The offset was invalid, or there was an error encountered
-          reading the data.  The NN part is a hex-encoded 'errno' value.
-
-     ''
-          An empty reply indicates the OBJECT string was not recognized
-          by the stub, or that the object does not support reading.
-
-     Here are the specific requests of this form defined so far.  All
-     the 'qXfer:OBJECT:read:...' requests use the same reply formats,
-     listed above.
-
-     'qXfer:auxv:read::OFFSET,LENGTH'
-          Access the target's "auxiliary vector".  *Note auxiliary
-          vector: OS Information.  Note ANNEX must be empty.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:btrace:read:ANNEX:OFFSET,LENGTH'
-
-          Return a description of the current branch trace.  *Note
-          Branch Trace Format::.  The annex part of the generic 'qXfer'
-          packet may have one of the following values:
-
-          'all'
-               Returns all available branch trace.
-
-          'new'
-               Returns all available branch trace if the branch trace
-               changed since the last read request.
-
-          'delta'
-               Returns the new branch trace since the last read request.
-               Adds a new block to the end of the trace that begins at
-               zero and ends at the source location of the first branch
-               in the trace buffer.  This extra block is used to stitch
-               traces together.
-
-               If the trace buffer overflowed, returns an error
-               indicating the overflow.
-
-          This packet is not probed by default; the remote stub must
-          request it by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:btrace-conf:read::OFFSET,LENGTH'
-
-          Return a description of the current branch trace
-          configuration.  *Note Branch Trace Configuration Format::.
-
-          This packet is not probed by default; the remote stub must
-          request it by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:exec-file:read:ANNEX:OFFSET,LENGTH'
-          Return the full absolute name of the file that was executed to
-          create a process running on the remote system.  The annex
-          specifies the numeric process ID of the process to query,
-          encoded as a hexadecimal number.  If the annex part is empty
-          the remote stub should return the filename corresponding to
-          the currently executing process.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:features:read:ANNEX:OFFSET,LENGTH'
-          Access the "target description".  *Note Target Descriptions::.
-          The annex specifies which XML document to access.  The main
-          description is always loaded from the 'target.xml' annex.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:libraries:read:ANNEX:OFFSET,LENGTH'
-          Access the target's list of loaded libraries.  *Note Library
-          List Format::.  The annex part of the generic 'qXfer' packet
-          must be empty (*note qXfer read::).
-
-          Targets which maintain a list of libraries in the program's
-          memory do not need to implement this packet; it is designed
-          for platforms where the operating system manages the list of
-          loaded libraries.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:libraries-svr4:read:ANNEX:OFFSET,LENGTH'
-          Access the target's list of loaded libraries when the target
-          is an SVR4 platform.  *Note Library List Format for SVR4
-          Targets::.  The annex part of the generic 'qXfer' packet must
-          be empty unless the remote stub indicated it supports the
-          augmented form of this packet by supplying an appropriate
-          'qSupported' response (*note qXfer read::, *note
-          qSupported::).
-
-          This packet is optional for better performance on SVR4
-          targets.  GDB uses memory read packets to read the SVR4
-          library list otherwise.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-          If the remote stub indicates it supports the augmented form of
-          this packet then the annex part of the generic 'qXfer' packet
-          may contain a semicolon-separated list of 'NAME=VALUE'
-          arguments.  The currently supported arguments are:
-
-          'start=ADDRESS'
-               A hexadecimal number specifying the address of the
-               'struct link_map' to start reading the library list from.
-               If unset or zero then the first 'struct link_map' in the
-               library list will be chosen as the starting point.
-
-          'prev=ADDRESS'
-               A hexadecimal number specifying the address of the
-               'struct link_map' immediately preceding the 'struct
-               link_map' specified by the 'start' argument.  If unset or
-               zero then the remote stub will expect that no 'struct
-               link_map' exists prior to the starting point.
-
-          Arguments that are not understood by the remote stub will be
-          silently ignored.
-
-     'qXfer:memory-map:read::OFFSET,LENGTH'
-          Access the target's "memory-map".  *Note Memory Map Format::.
-          The annex part of the generic 'qXfer' packet must be empty
-          (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:sdata:read::OFFSET,LENGTH'
-
-          Read contents of the extra collected static tracepoint marker
-          information.  The annex part of the generic 'qXfer' packet
-          must be empty (*note qXfer read::).  *Note Tracepoint Action
-          Lists: Tracepoint Actions.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:siginfo:read::OFFSET,LENGTH'
-          Read contents of the extra signal information on the target
-          system.  The annex part of the generic 'qXfer' packet must be
-          empty (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:threads:read::OFFSET,LENGTH'
-          Access the list of threads on target.  *Note Thread List
-          Format::.  The annex part of the generic 'qXfer' packet must
-          be empty (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:traceframe-info:read::OFFSET,LENGTH'
-
-          Return a description of the current traceframe's contents.
-          *Note Traceframe Info Format::.  The annex part of the generic
-          'qXfer' packet must be empty (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:uib:read:PC:OFFSET,LENGTH'
-
-          Return the unwind information block for PC.  This packet is
-          used on OpenVMS/ia64 to ask the kernel unwind information.
-
-          This packet is not probed by default.
-
-     'qXfer:fdpic:read:ANNEX:OFFSET,LENGTH'
-          Read contents of 'loadmap's on the target system.  The annex,
-          either 'exec' or 'interp', specifies which 'loadmap',
-          executable 'loadmap' or interpreter 'loadmap' to read.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-     'qXfer:osdata:read::OFFSET,LENGTH'
-          Access the target's "operating system information".  *Note
-          Operating System Information::.
-
-'qXfer:OBJECT:write:ANNEX:OFFSET:DATA...'
-     Write uninterpreted bytes into the target's special data area
-     identified by the keyword OBJECT, starting at OFFSET bytes into the
-     data.  The binary-encoded data (*note Binary Data::) to be written
-     is given by DATA....  The content and encoding of ANNEX is specific
-     to OBJECT; it can supply additional details about what data to
-     access.
-
-     Reply:
-     'NN'
-          NN (hex encoded) is the number of bytes written.  This may be
-          fewer bytes than supplied in the request.
-
-     'E00'
-          The request was malformed, or ANNEX was invalid.
-
-     'E NN'
-          The offset was invalid, or there was an error encountered
-          writing the data.  The NN part is a hex-encoded 'errno' value.
-
-     ''
-          An empty reply indicates the OBJECT string was not recognized
-          by the stub, or that the object does not support writing.
-
-     Here are the specific requests of this form defined so far.  All
-     the 'qXfer:OBJECT:write:...' requests use the same reply formats,
-     listed above.
-
-     'qXfer:siginfo:write::OFFSET:DATA...'
-          Write DATA to the extra signal information on the target
-          system.  The annex part of the generic 'qXfer' packet must be
-          empty (*note qXfer write::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate 'qSupported' response
-          (*note qSupported::).
-
-'qXfer:OBJECT:OPERATION:...'
-     Requests of this form may be added in the future.  When a stub does
-     not recognize the OBJECT keyword, or its support for OBJECT does
-     not recognize the OPERATION keyword, the stub must respond with an
-     empty packet.
-
-'qAttached:PID'
-     Return an indication of whether the remote server attached to an
-     existing process or created a new process.  When the multiprocess
-     protocol extensions are supported (*note multiprocess
-     extensions::), PID is an integer in hexadecimal format identifying
-     the target process.  Otherwise, GDB will omit the PID field and the
-     query packet will be simplified as 'qAttached'.
-
-     This query is used, for example, to know whether the remote process
-     should be detached or killed when a GDB session is ended with the
-     'quit' command.
-
-     Reply:
-     '1'
-          The remote server attached to an existing process.
-     '0'
-          The remote server created a new process.
-     'E NN'
-          A badly formed request or an error was encountered.
-
-'Qbtrace:bts'
-     Enable branch tracing for the current thread using Branch Trace
-     Store.
-
-     Reply:
-     'OK'
-          Branch tracing has been enabled.
-     'E.errtext'
-          A badly formed request or an error was encountered.
-
-'Qbtrace:pt'
-     Enable branch tracing for the current thread using Intel Processor
-     Trace.
-
-     Reply:
-     'OK'
-          Branch tracing has been enabled.
-     'E.errtext'
-          A badly formed request or an error was encountered.
-
-'Qbtrace:off'
-     Disable branch tracing for the current thread.
-
-     Reply:
-     'OK'
-          Branch tracing has been disabled.
-     'E.errtext'
-          A badly formed request or an error was encountered.
-
-'Qbtrace-conf:bts:size=VALUE'
-     Set the requested ring buffer size for new threads that use the
-     btrace recording method in bts format.
-
-     Reply:
-     'OK'
-          The ring buffer size has been set.
-     'E.errtext'
-          A badly formed request or an error was encountered.
-
-'Qbtrace-conf:pt:size=VALUE'
-     Set the requested ring buffer size for new threads that use the
-     btrace recording method in pt format.
-
-     Reply:
-     'OK'
-          The ring buffer size has been set.
-     'E.errtext'
-          A badly formed request or an error was encountered.
-
-   ---------- Footnotes ----------
-
-   (1) The 'qP' and 'qL' packets predate these conventions, and have
-arguments without any terminator for the packet name; we suspect they
-are in widespread use in places that are difficult to upgrade.  The 'qC'
-packet has no arguments, but some existing stubs (e.g. RedBoot) are
-known to not check for the end of the packet.
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-7 ./gdb/doc/gdb.info-7
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-7	2020-03-07 02:11:38.000000000 +0000
+++ ./gdb/doc/gdb.info-7	2021-12-16 02:00:32.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,2463 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: Packets,  Next: Stop Reply Packets,  Prev: Overview,  Up: Remote Protocol
+
+E.2 Packets
+===========
+
+The following table provides a complete list of all currently defined
+COMMANDs and their corresponding response DATA.  *Note File-I/O Remote
+Protocol Extension::, for details about the File I/O extension of the
+remote protocol.
+
+   Each packet's description has a template showing the packet's overall
+syntax, followed by an explanation of the packet's meaning.  We include
+spaces in some of the templates for clarity; these are not part of the
+packet's syntax.  No GDB packet uses spaces to separate its components.
+For example, a template like 'foo BAR BAZ' describes a packet beginning
+with the three ASCII bytes 'foo', followed by a BAR, followed directly
+by a BAZ.  GDB does not transmit a space character between the 'foo' and
+the BAR, or between the BAR and the BAZ.
+
+   Several packets and replies include a THREAD-ID field to identify a
+thread.  Normally these are positive numbers with a target-specific
+interpretation, formatted as big-endian hex strings.  A THREAD-ID can
+also be a literal '-1' to indicate all threads, or '0' to pick any
+thread.
+
+   In addition, the remote protocol supports a multiprocess feature in
+which the THREAD-ID syntax is extended to optionally include both
+process and thread ID fields, as 'pPID.TID'.  The PID (process) and TID
+(thread) components each have the format described above: a positive
+number with target-specific interpretation formatted as a big-endian hex
+string, literal '-1' to indicate all processes or threads
+(respectively), or '0' to indicate an arbitrary process or thread.
+Specifying just a process, as 'pPID', is equivalent to 'pPID.-1'.  It is
+an error to specify all processes but a specific thread, such as
+'p-1.TID'.  Note that the 'p' prefix is _not_ used for those packets and
+replies explicitly documented to include a process ID, rather than a
+THREAD-ID.
+
+   The multiprocess THREAD-ID syntax extensions are only used if both
+GDB and the stub report support for the 'multiprocess' feature using
+'qSupported'.  *Note multiprocess extensions::, for more information.
+
+   Note that all packet forms beginning with an upper- or lower-case
+letter, other than those described here, are reserved for future use.
+
+   Here are the packet descriptions.
+
+'!'
+     Enable extended mode.  In extended mode, the remote server is made
+     persistent.  The 'R' packet is used to restart the program being
+     debugged.
+
+     Reply:
+     'OK'
+          The remote target both supports and has enabled extended mode.
+
+'?'
+     This is sent when connection is first established to query the
+     reason the target halted.  The reply is the same as for step and
+     continue.  This packet has a special interpretation when the target
+     is in non-stop mode; see *note Remote Non-Stop::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'A ARGLEN,ARGNUM,ARG,...'
+     Initialized 'argv[]' array passed into program.  ARGLEN specifies
+     the number of bytes in the hex encoded byte stream ARG.  See
+     'gdbserver' for more details.
+
+     Reply:
+     'OK'
+          The arguments were set.
+     'E NN'
+          An error occurred.
+
+'b BAUD'
+     (Don't use this packet; its behavior is not well-defined.)  Change
+     the serial line speed to BAUD.
+
+     JTC: _When does the transport layer state change?  When it's
+     received, or after the ACK is transmitted.  In either case, there
+     are problems if the command or the acknowledgment packet is
+     dropped._
+
+     Stan: _If people really wanted to add something like this, and get
+     it working for the first time, they ought to modify ser-unix.c to
+     send some kind of out-of-band message to a specially-setup stub and
+     have the switch happen "in between" packets, so that from remote
+     protocol's point of view, nothing actually happened._
+
+'B ADDR,MODE'
+     Set (MODE is 'S') or clear (MODE is 'C') a breakpoint at ADDR.
+
+     Don't use this packet.  Use the 'Z' and 'z' packets instead (*note
+     insert breakpoint or watchpoint packet::).
+
+'bc'
+     Backward continue.  Execute the target system in reverse.  No
+     parameter.  *Note Reverse Execution::, for more information.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'bs'
+     Backward single step.  Execute one instruction in reverse.  No
+     parameter.  *Note Reverse Execution::, for more information.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'c [ADDR]'
+     Continue at ADDR, which is the address to resume.  If ADDR is
+     omitted, resume at current address.
+
+     This packet is deprecated for multi-threading support.  *Note vCont
+     packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'C SIG[;ADDR]'
+     Continue with signal SIG (hex signal number).  If ';ADDR' is
+     omitted, resume at same address.
+
+     This packet is deprecated for multi-threading support.  *Note vCont
+     packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'d'
+     Toggle debug flag.
+
+     Don't use this packet; instead, define a general set packet (*note
+     General Query Packets::).
+
+'D'
+'D;PID'
+     The first form of the packet is used to detach GDB from the remote
+     system.  It is sent to the remote target before GDB disconnects via
+     the 'detach' command.
+
+     The second form, including a process ID, is used when multiprocess
+     protocol extensions are enabled (*note multiprocess extensions::),
+     to detach only a specific process.  The PID is specified as a
+     big-endian hex string.
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error
+
+'F RC,EE,CF;XX'
+     A reply from GDB to an 'F' packet sent by the target.  This is part
+     of the File-I/O protocol extension.  *Note File-I/O Remote Protocol
+     Extension::, for the specification.
+
+'g'
+     Read general registers.
+
+     Reply:
+     'XX...'
+          Each byte of register data is described by two hex digits.
+          The bytes with the register are transmitted in target byte
+          order.  The size of each register and their position within
+          the 'g' packet are determined by the GDB internal gdbarch
+          functions 'DEPRECATED_REGISTER_RAW_SIZE' and
+          'gdbarch_register_name'.
+
+          When reading registers from a trace frame (*note Using the
+          Collected Data: Analyze Collected Data.), the stub may also
+          return a string of literal 'x''s in place of the register data
+          digits, to indicate that the corresponding register has not
+          been collected, thus its value is unavailable.  For example,
+          for an architecture with 4 registers of 4 bytes each, the
+          following reply indicates to GDB that registers 0 and 2 have
+          not been collected, while registers 1 and 3 have been
+          collected, and both have zero value:
+
+               -> g
+               <- xxxxxxxx00000000xxxxxxxx00000000
+
+     'E NN'
+          for an error.
+
+'G XX...'
+     Write general registers.  *Note read registers packet::, for a
+     description of the XX... data.
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error
+
+'H OP THREAD-ID'
+     Set thread for subsequent operations ('m', 'M', 'g', 'G', et.al.).
+     Depending on the operation to be performed, OP should be 'c' for
+     step and continue operations (note that this is deprecated,
+     supporting the 'vCont' command is a better option), and 'g' for
+     other operations.  The thread designator THREAD-ID has the format
+     and interpretation described in *note thread-id syntax::.
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error
+
+'i [ADDR[,NNN]]'
+     Step the remote target by a single clock cycle.  If ',NNN' is
+     present, cycle step NNN cycles.  If ADDR is present, cycle step
+     starting at that address.
+
+'I'
+     Signal, then cycle step.  *Note step with signal packet::.  *Note
+     cycle step packet::.
+
+'k'
+     Kill request.
+
+     The exact effect of this packet is not specified.
+
+     For a bare-metal target, it may power cycle or reset the target
+     system.  For that reason, the 'k' packet has no reply.
+
+     For a single-process target, it may kill that process if possible.
+
+     A multiple-process target may choose to kill just one process, or
+     all that are under GDB's control.  For more precise control, use
+     the vKill packet (*note vKill packet::).
+
+     If the target system immediately closes the connection in response
+     to 'k', GDB does not consider the lack of packet acknowledgment to
+     be an error, and assumes the kill was successful.
+
+     If connected using 'target extended-remote', and the target does
+     not close the connection in response to a kill request, GDB probes
+     the target state as if a new connection was opened (*note ?
+     packet::).
+
+'m ADDR,LENGTH'
+     Read LENGTH addressable memory units starting at address ADDR
+     (*note addressable memory unit::).  Note that ADDR may not be
+     aligned to any particular boundary.
+
+     The stub need not use any particular size or alignment when
+     gathering data from memory for the response; even if ADDR is
+     word-aligned and LENGTH is a multiple of the word size, the stub is
+     free to use byte accesses, or not.  For this reason, this packet
+     may not be suitable for accessing memory-mapped I/O devices.
+
+     Reply:
+     'XX...'
+          Memory contents; each byte is transmitted as a two-digit
+          hexadecimal number.  The reply may contain fewer addressable
+          memory units than requested if the server was able to read
+          only part of the region of memory.
+     'E NN'
+          NN is errno
+
+'M ADDR,LENGTH:XX...'
+     Write LENGTH addressable memory units starting at address ADDR
+     (*note addressable memory unit::).  The data is given by XX...;
+     each byte is transmitted as a two-digit hexadecimal number.
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error (this includes the case where only part of the
+          data was written).
+
+'p N'
+     Read the value of register N; N is in hex.  *Note read registers
+     packet::, for a description of how the returned register value is
+     encoded.
+
+     Reply:
+     'XX...'
+          the register's value
+     'E NN'
+          for an error
+     ''
+          Indicating an unrecognized QUERY.
+
+'P N...=R...'
+     Write register N... with value R....  The register number N is in
+     hexadecimal, and R... contains two hex digits for each byte in the
+     register (target byte order).
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error
+
+'q NAME PARAMS...'
+'Q NAME PARAMS...'
+     General query ('q') and set ('Q').  These packets are described
+     fully in *note General Query Packets::.
+
+'r'
+     Reset the entire system.
+
+     Don't use this packet; use the 'R' packet instead.
+
+'R XX'
+     Restart the program being debugged.  The XX, while needed, is
+     ignored.  This packet is only available in extended mode (*note
+     extended mode::).
+
+     The 'R' packet has no reply.
+
+'s [ADDR]'
+     Single step, resuming at ADDR.  If ADDR is omitted, resume at same
+     address.
+
+     This packet is deprecated for multi-threading support.  *Note vCont
+     packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'S SIG[;ADDR]'
+     Step with signal.  This is analogous to the 'C' packet, but
+     requests a single-step, rather than a normal resumption of
+     execution.
+
+     This packet is deprecated for multi-threading support.  *Note vCont
+     packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'t ADDR:PP,MM'
+     Search backwards starting at address ADDR for a match with pattern
+     PP and mask MM, both of which are are 4 byte long.  There must be
+     at least 3 digits in ADDR.
+
+'T THREAD-ID'
+     Find out if the thread THREAD-ID is alive.  *Note thread-id
+     syntax::.
+
+     Reply:
+     'OK'
+          thread is still alive
+     'E NN'
+          thread is dead
+
+'v'
+     Packets starting with 'v' are identified by a multi-letter name, up
+     to the first ';' or '?' (or the end of the packet).
+
+'vAttach;PID'
+     Attach to a new process with the specified process ID PID.  The
+     process ID is a hexadecimal integer identifying the process.  In
+     all-stop mode, all threads in the attached process are stopped; in
+     non-stop mode, it may be attached without being stopped if that is
+     supported by the target.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'E NN'
+          for an error
+     'Any stop packet'
+          for success in all-stop mode (*note Stop Reply Packets::)
+     'OK'
+          for success in non-stop mode (*note Remote Non-Stop::)
+
+'vCont[;ACTION[:THREAD-ID]]...'
+     Resume the inferior, specifying different actions for each thread.
+
+     For each inferior thread, the leftmost action with a matching
+     THREAD-ID is applied.  Threads that don't match any action remain
+     in their current state.  Thread IDs are specified using the syntax
+     described in *note thread-id syntax::.  If multiprocess extensions
+     (*note multiprocess extensions::) are supported, actions can be
+     specified to match all threads in a process by using the 'pPID.-1'
+     form of the THREAD-ID.  An action with no THREAD-ID matches all
+     threads.  Specifying no actions is an error.
+
+     Currently supported actions are:
+
+     'c'
+          Continue.
+     'C SIG'
+          Continue with signal SIG.  The signal SIG should be two hex
+          digits.
+     's'
+          Step.
+     'S SIG'
+          Step with signal SIG.  The signal SIG should be two hex
+          digits.
+     't'
+          Stop.
+     'r START,END'
+          Step once, and then keep stepping as long as the thread stops
+          at addresses between START (inclusive) and END (exclusive).
+          The remote stub reports a stop reply when either the thread
+          goes out of the range or is stopped due to an unrelated
+          reason, such as hitting a breakpoint.  *Note range stepping::.
+
+          If the range is empty (START == END), then the action becomes
+          equivalent to the 's' action.  In other words, single-step
+          once, and report the stop (even if the stepped instruction
+          jumps to START).
+
+          (A stop reply may be sent at any point even if the PC is still
+          within the stepping range; for example, it is valid to
+          implement this packet in a degenerate way as a single
+          instruction step operation.)
+
+     The optional argument ADDR normally associated with the 'c', 'C',
+     's', and 'S' packets is not supported in 'vCont'.
+
+     The 't' action is only relevant in non-stop mode (*note Remote
+     Non-Stop::) and may be ignored by the stub otherwise.  A stop reply
+     should be generated for any affected thread not already stopped.
+     When a thread is stopped by means of a 't' action, the
+     corresponding stop reply should indicate that the thread has
+     stopped with signal '0', regardless of whether the target uses some
+     other signal as an implementation detail.
+
+     The server must ignore 'c', 'C', 's', 'S', and 'r' actions for
+     threads that are already running.  Conversely, the server must
+     ignore 't' actions for threads that are already stopped.
+
+     _Note:_ In non-stop mode, a thread is considered running until GDB
+     acknowledges an asynchronous stop notification for it with the
+     'vStopped' packet (*note Remote Non-Stop::).
+
+     The stub must support 'vCont' if it reports support for
+     multiprocess extensions (*note multiprocess extensions::).
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+'vCont?'
+     Request a list of actions supported by the 'vCont' packet.
+
+     Reply:
+     'vCont[;ACTION...]'
+          The 'vCont' packet is supported.  Each ACTION is a supported
+          command in the 'vCont' packet.
+     ''
+          The 'vCont' packet is not supported.
+
+'vCtrlC'
+     Interrupt remote target as if a control-C was pressed on the remote
+     terminal.  This is the equivalent to reacting to the '^C' ('\003',
+     the control-C character) character in all-stop mode while the
+     target is running, except this works in non-stop mode.  *Note
+     interrupting remote targets::, for more info on the all-stop
+     variant.
+
+     Reply:
+     'E NN'
+          for an error
+     'OK'
+          for success
+
+'vFile:OPERATION:PARAMETER...'
+     Perform a file operation on the target system.  For details, see
+     *note Host I/O Packets::.
+
+'vFlashErase:ADDR,LENGTH'
+     Direct the stub to erase LENGTH bytes of flash starting at ADDR.
+     The region may enclose any number of flash blocks, but its start
+     and end must fall on block boundaries, as indicated by the flash
+     block size appearing in the memory map (*note Memory Map Format::).
+     GDB groups flash memory programming operations together, and sends
+     a 'vFlashDone' request after each group; the stub is allowed to
+     delay erase operation until the 'vFlashDone' packet is received.
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error
+
+'vFlashWrite:ADDR:XX...'
+     Direct the stub to write data to flash address ADDR.  The data is
+     passed in binary form using the same encoding as for the 'X' packet
+     (*note Binary Data::).  The memory ranges specified by
+     'vFlashWrite' packets preceding a 'vFlashDone' packet must not
+     overlap, and must appear in order of increasing addresses (although
+     'vFlashErase' packets for higher addresses may already have been
+     received; the ordering is guaranteed only between 'vFlashWrite'
+     packets).  If a packet writes to an address that was neither erased
+     by a preceding 'vFlashErase' packet nor by some other
+     target-specific method, the results are unpredictable.
+
+     Reply:
+     'OK'
+          for success
+     'E.memtype'
+          for vFlashWrite addressing non-flash memory
+     'E NN'
+          for an error
+
+'vFlashDone'
+     Indicate to the stub that flash programming operation is finished.
+     The stub is permitted to delay or batch the effects of a group of
+     'vFlashErase' and 'vFlashWrite' packets until a 'vFlashDone' packet
+     is received.  The contents of the affected regions of flash memory
+     are unpredictable until the 'vFlashDone' request is completed.
+
+'vKill;PID'
+     Kill the process with the specified process ID PID, which is a
+     hexadecimal integer identifying the process.  This packet is used
+     in preference to 'k' when multiprocess protocol extensions are
+     supported; see *note multiprocess extensions::.
+
+     Reply:
+     'E NN'
+          for an error
+     'OK'
+          for success
+
+'vMustReplyEmpty'
+     The correct reply to an unknown 'v' packet is to return the empty
+     string, however, some older versions of 'gdbserver' would
+     incorrectly return 'OK' for unknown 'v' packets.
+
+     The 'vMustReplyEmpty' is used as a feature test to check how
+     'gdbserver' handles unknown packets, it is important that this
+     packet be handled in the same way as other unknown 'v' packets.  If
+     this packet is handled differently to other unknown 'v' packets
+     then it is possible that GDB may run into problems in other areas,
+     specifically around use of 'vFile:setfs:'.
+
+'vRun;FILENAME[;ARGUMENT]...'
+     Run the program FILENAME, passing it each ARGUMENT on its command
+     line.  The file and arguments are hex-encoded strings.  If FILENAME
+     is an empty string, the stub may use a default program (e.g. the
+     last program run).  The program is created in the stopped state.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'E NN'
+          for an error
+     'Any stop packet'
+          for success (*note Stop Reply Packets::)
+
+'vStopped'
+     *Note Notification Packets::.
+
+'X ADDR,LENGTH:XX...'
+     Write data to memory, where the data is transmitted in binary.
+     Memory is specified by its address ADDR and number of addressable
+     memory units LENGTH (*note addressable memory unit::); 'XX...' is
+     binary data (*note Binary Data::).
+
+     Reply:
+     'OK'
+          for success
+     'E NN'
+          for an error
+
+'z TYPE,ADDR,KIND'
+'Z TYPE,ADDR,KIND'
+     Insert ('Z') or remove ('z') a TYPE breakpoint or watchpoint
+     starting at address ADDRESS of kind KIND.
+
+     Each breakpoint and watchpoint packet TYPE is documented
+     separately.
+
+     _Implementation notes: A remote target shall return an empty string
+     for an unrecognized breakpoint or watchpoint packet TYPE.  A remote
+     target shall support either both or neither of a given 'ZTYPE...'
+     and 'zTYPE...' packet pair.  To avoid potential problems with
+     duplicate packets, the operations should be implemented in an
+     idempotent way._
+
+'z0,ADDR,KIND'
+'Z0,ADDR,KIND[;COND_LIST...][;cmds:PERSIST,CMD_LIST...]'
+     Insert ('Z0') or remove ('z0') a software breakpoint at address
+     ADDR of type KIND.
+
+     A software breakpoint is implemented by replacing the instruction
+     at ADDR with a software breakpoint or trap instruction.  The KIND
+     is target-specific and typically indicates the size of the
+     breakpoint in bytes that should be inserted.  E.g., the ARM and
+     MIPS can insert either a 2 or 4 byte breakpoint.  Some
+     architectures have additional meanings for KIND (*note
+     Architecture-Specific Protocol Details::); if no
+     architecture-specific value is being used, it should be '0'.  KIND
+     is hex-encoded.  COND_LIST is an optional list of conditional
+     expressions in bytecode form that should be evaluated on the
+     target's side.  These are the conditions that should be taken into
+     consideration when deciding if the breakpoint trigger should be
+     reported back to GDB.
+
+     See also the 'swbreak' stop reason (*note swbreak stop reason::)
+     for how to best report a software breakpoint event to GDB.
+
+     The COND_LIST parameter is comprised of a series of expressions,
+     concatenated without separators.  Each expression has the following
+     form:
+
+     'X LEN,EXPR'
+          LEN is the length of the bytecode expression and EXPR is the
+          actual conditional expression in bytecode form.
+
+     The optional CMD_LIST parameter introduces commands that may be run
+     on the target, rather than being reported back to GDB.  The
+     parameter starts with a numeric flag PERSIST; if the flag is
+     nonzero, then the breakpoint may remain active and the commands
+     continue to be run even when GDB disconnects from the target.
+     Following this flag is a series of expressions concatenated with no
+     separators.  Each expression has the following form:
+
+     'X LEN,EXPR'
+          LEN is the length of the bytecode expression and EXPR is the
+          actual commands expression in bytecode form.
+
+     _Implementation note: It is possible for a target to copy or move
+     code that contains software breakpoints (e.g., when implementing
+     overlays).  The behavior of this packet, in the presence of such a
+     target, is not defined._
+
+     Reply:
+     'OK'
+          success
+     ''
+          not supported
+     'E NN'
+          for an error
+
+'z1,ADDR,KIND'
+'Z1,ADDR,KIND[;COND_LIST...][;cmds:PERSIST,CMD_LIST...]'
+     Insert ('Z1') or remove ('z1') a hardware breakpoint at address
+     ADDR.
+
+     A hardware breakpoint is implemented using a mechanism that is not
+     dependent on being able to modify the target's memory.  The KIND,
+     COND_LIST, and CMD_LIST arguments have the same meaning as in 'Z0'
+     packets.
+
+     _Implementation note: A hardware breakpoint is not affected by code
+     movement._
+
+     Reply:
+     'OK'
+          success
+     ''
+          not supported
+     'E NN'
+          for an error
+
+'z2,ADDR,KIND'
+'Z2,ADDR,KIND'
+     Insert ('Z2') or remove ('z2') a write watchpoint at ADDR.  The
+     number of bytes to watch is specified by KIND.
+
+     Reply:
+     'OK'
+          success
+     ''
+          not supported
+     'E NN'
+          for an error
+
+'z3,ADDR,KIND'
+'Z3,ADDR,KIND'
+     Insert ('Z3') or remove ('z3') a read watchpoint at ADDR.  The
+     number of bytes to watch is specified by KIND.
+
+     Reply:
+     'OK'
+          success
+     ''
+          not supported
+     'E NN'
+          for an error
+
+'z4,ADDR,KIND'
+'Z4,ADDR,KIND'
+     Insert ('Z4') or remove ('z4') an access watchpoint at ADDR.  The
+     number of bytes to watch is specified by KIND.
+
+     Reply:
+     'OK'
+          success
+     ''
+          not supported
+     'E NN'
+          for an error
+
+
+File: gdb.info,  Node: Stop Reply Packets,  Next: General Query Packets,  Prev: Packets,  Up: Remote Protocol
+
+E.3 Stop Reply Packets
+======================
+
+The 'C', 'c', 'S', 's', 'vCont', 'vAttach', 'vRun', 'vStopped', and '?'
+packets can receive any of the below as a reply.  Except for '?' and
+'vStopped', that reply is only returned when the target halts.  In the
+below the exact meaning of "signal number" is defined by the header
+'include/gdb/signals.h' in the GDB source code.
+
+   In non-stop mode, the server will simply reply 'OK' to commands such
+as 'vCont'; any stop will be the subject of a future notification.
+*Note Remote Non-Stop::.
+
+   As in the description of request packets, we include spaces in the
+reply templates for clarity; these are not part of the reply packet's
+syntax.  No GDB stop reply packet uses spaces to separate its
+components.
+
+'S AA'
+     The program received signal number AA (a two-digit hexadecimal
+     number).  This is equivalent to a 'T' response with no N:R pairs.
+
+'T AA N1:R1;N2:R2;...'
+     The program received signal number AA (a two-digit hexadecimal
+     number).  This is equivalent to an 'S' response, except that the
+     'N:R' pairs can carry values of important registers and other
+     information directly in the stop reply packet, reducing round-trip
+     latency.  Single-step and breakpoint traps are reported this way.
+     Each 'N:R' pair is interpreted as follows:
+
+        * If N is a hexadecimal number, it is a register number, and the
+          corresponding R gives that register's value.  The data R is a
+          series of bytes in target byte order, with each byte given by
+          a two-digit hex number.
+
+        * If N is 'thread', then R is the THREAD-ID of the stopped
+          thread, as specified in *note thread-id syntax::.
+
+        * If N is 'core', then R is the hexadecimal number of the core
+          on which the stop event was detected.
+
+        * If N is a recognized "stop reason", it describes a more
+          specific event that stopped the target.  The currently defined
+          stop reasons are listed below.  The AA should be '05', the
+          trap signal.  At most one stop reason should be present.
+
+        * Otherwise, GDB should ignore this 'N:R' pair and go on to the
+          next; this allows us to extend the protocol in the future.
+
+     The currently defined stop reasons are:
+
+     'watch'
+     'rwatch'
+     'awatch'
+          The packet indicates a watchpoint hit, and R is the data
+          address, in hex.
+
+     'syscall_entry'
+     'syscall_return'
+          The packet indicates a syscall entry or return, and R is the
+          syscall number, in hex.
+
+     'library'
+          The packet indicates that the loaded libraries have changed.
+          GDB should use 'qXfer:libraries:read' to fetch a new list of
+          loaded libraries.  The R part is ignored.
+
+     'replaylog'
+          The packet indicates that the target cannot continue replaying
+          logged execution events, because it has reached the end (or
+          the beginning when executing backward) of the log.  The value
+          of R will be either 'begin' or 'end'.  *Note Reverse
+          Execution::, for more information.
+
+     'swbreak'
+          The packet indicates a software breakpoint instruction was
+          executed, irrespective of whether it was GDB that planted the
+          breakpoint or the breakpoint is hardcoded in the program.  The
+          R part must be left empty.
+
+          On some architectures, such as x86, at the architecture level,
+          when a breakpoint instruction executes the program counter
+          points at the breakpoint address plus an offset.  On such
+          targets, the stub is responsible for adjusting the PC to point
+          back at the breakpoint address.
+
+          This packet should not be sent by default; older GDB versions
+          did not support it.  GDB requests it, by supplying an
+          appropriate 'qSupported' feature (*note qSupported::).  The
+          remote stub must also supply the appropriate 'qSupported'
+          feature indicating support.
+
+          This packet is required for correct non-stop mode operation.
+
+     'hwbreak'
+          The packet indicates the target stopped for a hardware
+          breakpoint.  The R part must be left empty.
+
+          The same remarks about 'qSupported' and non-stop mode above
+          apply.
+
+     'fork'
+          The packet indicates that 'fork' was called, and R is the
+          thread ID of the new child process.  Refer to *note thread-id
+          syntax:: for the format of the THREAD-ID field.  This packet
+          is only applicable to targets that support fork events.
+
+          This packet should not be sent by default; older GDB versions
+          did not support it.  GDB requests it, by supplying an
+          appropriate 'qSupported' feature (*note qSupported::).  The
+          remote stub must also supply the appropriate 'qSupported'
+          feature indicating support.
+
+     'vfork'
+          The packet indicates that 'vfork' was called, and R is the
+          thread ID of the new child process.  Refer to *note thread-id
+          syntax:: for the format of the THREAD-ID field.  This packet
+          is only applicable to targets that support vfork events.
+
+          This packet should not be sent by default; older GDB versions
+          did not support it.  GDB requests it, by supplying an
+          appropriate 'qSupported' feature (*note qSupported::).  The
+          remote stub must also supply the appropriate 'qSupported'
+          feature indicating support.
+
+     'vforkdone'
+          The packet indicates that a child process created by a vfork
+          has either called 'exec' or terminated, so that the address
+          spaces of the parent and child process are no longer shared.
+          The R part is ignored.  This packet is only applicable to
+          targets that support vforkdone events.
+
+          This packet should not be sent by default; older GDB versions
+          did not support it.  GDB requests it, by supplying an
+          appropriate 'qSupported' feature (*note qSupported::).  The
+          remote stub must also supply the appropriate 'qSupported'
+          feature indicating support.
+
+     'exec'
+          The packet indicates that 'execve' was called, and R is the
+          absolute pathname of the file that was executed, in hex.  This
+          packet is only applicable to targets that support exec events.
+
+          This packet should not be sent by default; older GDB versions
+          did not support it.  GDB requests it, by supplying an
+          appropriate 'qSupported' feature (*note qSupported::).  The
+          remote stub must also supply the appropriate 'qSupported'
+          feature indicating support.
+
+     'create'
+          The packet indicates that the thread was just created.  The
+          new thread is stopped until GDB sets it running with a
+          resumption packet (*note vCont packet::).  This packet should
+          not be sent by default; GDB requests it with the *note
+          QThreadEvents:: packet.  See also the 'w' (*note thread exit
+          event::) remote reply below.  The R part is ignored.
+
+'W AA'
+'W AA ; process:PID'
+     The process exited, and AA is the exit status.  This is only
+     applicable to certain targets.
+
+     The second form of the response, including the process ID of the
+     exited process, can be used only when GDB has reported support for
+     multiprocess protocol extensions; see *note multiprocess
+     extensions::.  Both AA and PID are formatted as big-endian hex
+     strings.
+
+'X AA'
+'X AA ; process:PID'
+     The process terminated with signal AA.
+
+     The second form of the response, including the process ID of the
+     terminated process, can be used only when GDB has reported support
+     for multiprocess protocol extensions; see *note multiprocess
+     extensions::.  Both AA and PID are formatted as big-endian hex
+     strings.
+
+'w AA ; TID'
+
+     The thread exited, and AA is the exit status.  This response should
+     not be sent by default; GDB requests it with the *note
+     QThreadEvents:: packet.  See also *note thread create event::
+     above.  AA is formatted as a big-endian hex string.
+
+'N'
+     There are no resumed threads left in the target.  In other words,
+     even though the process is alive, the last resumed thread has
+     exited.  For example, say the target process has two threads:
+     thread 1 and thread 2.  The client leaves thread 1 stopped, and
+     resumes thread 2, which subsequently exits.  At this point, even
+     though the process is still alive, and thus no 'W' stop reply is
+     sent, no thread is actually executing either.  The 'N' stop reply
+     thus informs the client that it can stop waiting for stop replies.
+     This packet should not be sent by default; older GDB versions did
+     not support it.  GDB requests it, by supplying an appropriate
+     'qSupported' feature (*note qSupported::).  The remote stub must
+     also supply the appropriate 'qSupported' feature indicating
+     support.
+
+'O XX...'
+     'XX...' is hex encoding of ASCII data, to be written as the
+     program's console output.  This can happen at any time while the
+     program is running and the debugger should continue to wait for
+     'W', 'T', etc.  This reply is not permitted in non-stop mode.
+
+'F CALL-ID,PARAMETER...'
+     CALL-ID is the identifier which says which host system call should
+     be called.  This is just the name of the function.  Translation
+     into the correct system call is only applicable as it's defined in
+     GDB.  *Note File-I/O Remote Protocol Extension::, for a list of
+     implemented system calls.
+
+     'PARAMETER...' is a list of parameters as defined for this very
+     system call.
+
+     The target replies with this packet when it expects GDB to call a
+     host system call on behalf of the target.  GDB replies with an
+     appropriate 'F' packet and keeps up waiting for the next reply
+     packet from the target.  The latest 'C', 'c', 'S' or 's' action is
+     expected to be continued.  *Note File-I/O Remote Protocol
+     Extension::, for more details.
+
+
+File: gdb.info,  Node: General Query Packets,  Next: Architecture-Specific Protocol Details,  Prev: Stop Reply Packets,  Up: Remote Protocol
+
+E.4 General Query Packets
+=========================
+
+Packets starting with 'q' are "general query packets"; packets starting
+with 'Q' are "general set packets".  General query and set packets are a
+semi-unified form for retrieving and sending information to and from the
+stub.
+
+   The initial letter of a query or set packet is followed by a name
+indicating what sort of thing the packet applies to.  For example, GDB
+may use a 'qSymbol' packet to exchange symbol definitions with the stub.
+These packet names follow some conventions:
+
+   * The name must not contain commas, colons or semicolons.
+   * Most GDB query and set packets have a leading upper case letter.
+   * The names of custom vendor packets should use a company prefix, in
+     lower case, followed by a period.  For example, packets designed at
+     the Acme Corporation might begin with 'qacme.foo' (for querying
+     foos) or 'Qacme.bar' (for setting bars).
+
+   The name of a query or set packet should be separated from any
+parameters by a ':'; the parameters themselves should be separated by
+',' or ';'.  Stubs must be careful to match the full packet name, and
+check for a separator or the end of the packet, in case two packet names
+share a common prefix.  New packets should not begin with 'qC', 'qP', or
+'qL'(1).
+
+   Like the descriptions of the other packets, each description here has
+a template showing the packet's overall syntax, followed by an
+explanation of the packet's meaning.  We include spaces in some of the
+templates for clarity; these are not part of the packet's syntax.  No
+GDB packet uses spaces to separate its components.
+
+   Here are the currently defined query and set packets:
+
+'QAgent:1'
+'QAgent:0'
+     Turn on or off the agent as a helper to perform some debugging
+     operations delegated from GDB (*note Control Agent::).
+
+'QAllow:OP:VAL...'
+     Specify which operations GDB expects to request of the target, as a
+     semicolon-separated list of operation name and value pairs.
+     Possible values for OP include 'WriteReg', 'WriteMem',
+     'InsertBreak', 'InsertTrace', 'InsertFastTrace', and 'Stop'.  VAL
+     is either 0, indicating that GDB will not request the operation, or
+     1, indicating that it may.  (The target can then use this to set up
+     its own internals optimally, for instance if the debugger never
+     expects to insert breakpoints, it may not need to install its own
+     trap handler.)
+
+'qC'
+     Return the current thread ID.
+
+     Reply:
+     'QC THREAD-ID'
+          Where THREAD-ID is a thread ID as documented in *note
+          thread-id syntax::.
+     '(anything else)'
+          Any other reply implies the old thread ID.
+
+'qCRC:ADDR,LENGTH'
+     Compute the CRC checksum of a block of memory using CRC-32 defined
+     in IEEE 802.3.  The CRC is computed byte at a time, taking the most
+     significant bit of each byte first.  The initial pattern code
+     '0xffffffff' is used to ensure leading zeros affect the CRC.
+
+     _Note:_ This is the same CRC used in validating separate debug
+     files (*note Debugging Information in Separate Files: Separate
+     Debug Files.).  However the algorithm is slightly different.  When
+     validating separate debug files, the CRC is computed taking the
+     _least_ significant bit of each byte first, and the final result is
+     inverted to detect trailing zeros.
+
+     Reply:
+     'E NN'
+          An error (such as memory fault)
+     'C CRC32'
+          The specified memory region's checksum is CRC32.
+
+'QDisableRandomization:VALUE'
+     Some target operating systems will randomize the virtual address
+     space of the inferior process as a security feature, but provide a
+     feature to disable such randomization, e.g. to allow for a more
+     deterministic debugging experience.  On such systems, this packet
+     with a VALUE of 1 directs the target to disable address space
+     randomization for processes subsequently started via 'vRun'
+     packets, while a packet with a VALUE of 0 tells the target to
+     enable address space randomization.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     ''
+          An empty reply indicates that 'QDisableRandomization' is not
+          supported by the stub.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).  This should only be done on targets that actually
+     support disabling address space randomization.
+
+'QStartupWithShell:VALUE'
+     On UNIX-like targets, it is possible to start the inferior using a
+     shell program.  This is the default behavior on both GDB and
+     'gdbserver' (*note set startup-with-shell::).  This packet is used
+     to inform 'gdbserver' whether it should start the inferior using a
+     shell or not.
+
+     If VALUE is '0', 'gdbserver' will not use a shell to start the
+     inferior.  If VALUE is '1', 'gdbserver' will use a shell to start
+     the inferior.  All other values are considered an error.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).  This should only be done on targets that actually
+     support starting the inferior using a shell.
+
+     Use of this packet is controlled by the 'set startup-with-shell'
+     command; *note set startup-with-shell::.
+
+'QEnvironmentHexEncoded:HEX-VALUE'
+     On UNIX-like targets, it is possible to set environment variables
+     that will be passed to the inferior during the startup process.
+     This packet is used to inform 'gdbserver' of an environment
+     variable that has been defined by the user on GDB (*note set
+     environment::).
+
+     The packet is composed by HEX-VALUE, an hex encoded representation
+     of the NAME=VALUE format representing an environment variable.  The
+     name of the environment variable is represented by NAME, and the
+     value to be assigned to the environment variable is represented by
+     VALUE.  If the variable has no value (i.e., the value is 'null'),
+     then VALUE will not be present.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).  This should only be done on targets that actually
+     support passing environment variables to the starting inferior.
+
+     This packet is related to the 'set environment' command; *note set
+     environment::.
+
+'QEnvironmentUnset:HEX-VALUE'
+     On UNIX-like targets, it is possible to unset environment variables
+     before starting the inferior in the remote target.  This packet is
+     used to inform 'gdbserver' of an environment variable that has been
+     unset by the user on GDB (*note unset environment::).
+
+     The packet is composed by HEX-VALUE, an hex encoded representation
+     of the name of the environment variable to be unset.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).  This should only be done on targets that actually
+     support passing environment variables to the starting inferior.
+
+     This packet is related to the 'unset environment' command; *note
+     unset environment::.
+
+'QEnvironmentReset'
+     On UNIX-like targets, this packet is used to reset the state of
+     environment variables in the remote target before starting the
+     inferior.  In this context, reset means unsetting all environment
+     variables that were previously set by the user (i.e., were not
+     initially present in the environment).  It is sent to 'gdbserver'
+     before the 'QEnvironmentHexEncoded' (*note
+     QEnvironmentHexEncoded::) and the 'QEnvironmentUnset' (*note
+     QEnvironmentUnset::) packets.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).  This should only be done on targets that actually
+     support passing environment variables to the starting inferior.
+
+'QSetWorkingDir:[DIRECTORY]'
+     This packet is used to inform the remote server of the intended
+     current working directory for programs that are going to be
+     executed.
+
+     The packet is composed by DIRECTORY, an hex encoded representation
+     of the directory that the remote inferior will use as its current
+     working directory.  If DIRECTORY is an empty string, the remote
+     server should reset the inferior's current working directory to its
+     original, empty value.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+'qfThreadInfo'
+'qsThreadInfo'
+     Obtain a list of all active thread IDs from the target (OS). Since
+     there may be too many active threads to fit into one reply packet,
+     this query works iteratively: it may require more than one
+     query/reply sequence to obtain the entire list of threads.  The
+     first query of the sequence will be the 'qfThreadInfo' query;
+     subsequent queries in the sequence will be the 'qsThreadInfo'
+     query.
+
+     NOTE: This packet replaces the 'qL' query (see below).
+
+     Reply:
+     'm THREAD-ID'
+          A single thread ID
+     'm THREAD-ID,THREAD-ID...'
+          a comma-separated list of thread IDs
+     'l'
+          (lower case letter 'L') denotes end of list.
+
+     In response to each query, the target will reply with a list of one
+     or more thread IDs, separated by commas.  GDB will respond to each
+     reply with a request for more thread ids (using the 'qs' form of
+     the query), until the target responds with 'l' (lower-case ell, for
+     "last").  Refer to *note thread-id syntax::, for the format of the
+     THREAD-ID fields.
+
+     _Note: GDB will send the 'qfThreadInfo' query during the initial
+     connection with the remote target, and the very first thread ID
+     mentioned in the reply will be stopped by GDB in a subsequent
+     message.  Therefore, the stub should ensure that the first thread
+     ID in the 'qfThreadInfo' reply is suitable for being stopped by
+     GDB._
+
+'qGetTLSAddr:THREAD-ID,OFFSET,LM'
+     Fetch the address associated with thread local storage specified by
+     THREAD-ID, OFFSET, and LM.
+
+     THREAD-ID is the thread ID associated with the thread for which to
+     fetch the TLS address.  *Note thread-id syntax::.
+
+     OFFSET is the (big endian, hex encoded) offset associated with the
+     thread local variable.  (This offset is obtained from the debug
+     information associated with the variable.)
+
+     LM is the (big endian, hex encoded) OS/ABI-specific encoding of the
+     load module associated with the thread local storage.  For example,
+     a GNU/Linux system will pass the link map address of the shared
+     object associated with the thread local storage under
+     consideration.  Other operating environments may choose to
+     represent the load module differently, so the precise meaning of
+     this parameter will vary.
+
+     Reply:
+     'XX...'
+          Hex encoded (big endian) bytes representing the address of the
+          thread local storage requested.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     ''
+          An empty reply indicates that 'qGetTLSAddr' is not supported
+          by the stub.
+
+'qGetTIBAddr:THREAD-ID'
+     Fetch address of the Windows OS specific Thread Information Block.
+
+     THREAD-ID is the thread ID associated with the thread.
+
+     Reply:
+     'XX...'
+          Hex encoded (big endian) bytes representing the linear address
+          of the thread information block.
+
+     'E NN'
+          An error occured.  This means that either the thread was not
+          found, or the address could not be retrieved.
+
+     ''
+          An empty reply indicates that 'qGetTIBAddr' is not supported
+          by the stub.
+
+'qL STARTFLAG THREADCOUNT NEXTTHREAD'
+     Obtain thread information from RTOS. Where: STARTFLAG (one hex
+     digit) is one to indicate the first query and zero to indicate a
+     subsequent query; THREADCOUNT (two hex digits) is the maximum
+     number of threads the response packet can contain; and NEXTTHREAD
+     (eight hex digits), for subsequent queries (STARTFLAG is zero), is
+     returned in the response as ARGTHREAD.
+
+     Don't use this packet; use the 'qfThreadInfo' query instead (see
+     above).
+
+     Reply:
+     'qM COUNT DONE ARGTHREAD THREAD...'
+          Where: COUNT (two hex digits) is the number of threads being
+          returned; DONE (one hex digit) is zero to indicate more
+          threads and one indicates no further threads; ARGTHREADID
+          (eight hex digits) is NEXTTHREAD from the request packet;
+          THREAD... is a sequence of thread IDs, THREADID (eight hex
+          digits), from the target.  See
+          'remote.c:parse_threadlist_response()'.
+
+'qMemTags:START ADDRESS,LENGTH:TYPE'
+     Fetch memory tags of type TYPE from the address range
+     [START ADDRESS, START ADDRESS + LENGTH).  The target is responsible
+     for calculating how many tags will be returned, as this is
+     architecture-specific.
+
+     START ADDRESS is the starting address of the memory range.
+
+     LENGTH is the length, in bytes, of the memory range.
+
+     TYPE is the type of tag the request wants to fetch.  The type is a
+     signed integer.
+
+     Reply:
+     'MXX...'
+          Hex encoded sequence of uninterpreted bytes, XX...,
+          representing the tags found in the requested memory range.
+
+     'E NN'
+          An error occured.  This means that fetching of memory tags
+          failed for some reason.
+
+     ''
+          An empty reply indicates that 'qMemTags' is not supported by
+          the stub, although this should not happen given GDB will only
+          send this packet if the stub has advertised support for memory
+          tagging via 'qSupported'.
+
+'QMemTags:START ADDRESS,LENGTH:TYPE:TAG BYTES'
+     Store memory tags of type TYPE to the address range
+     [START ADDRESS, START ADDRESS + LENGTH).  The target is responsible
+     for interpreting the type, the tag bytes and modifying the memory
+     tag granules accordingly, given this is architecture-specific.
+
+     The interpretation of how many tags (NT) should be written to how
+     many memory tag granules (NG) is also architecture-specific.  The
+     behavior is implementation-specific, but the following is
+     suggested.
+
+     If the number of memory tags, NT, is greater than or equal to the
+     number of memory tag granules, NG, only NG tags will be stored.
+
+     If NT is less than NG, the behavior is that of a fill operation,
+     and the tag bytes will be used as a pattern that will get repeated
+     until NG tags are stored.
+
+     START ADDRESS is the starting address of the memory range.  The
+     address does not have any restriction on alignment or size.
+
+     LENGTH is the length, in bytes, of the memory range.
+
+     TYPE is the type of tag the request wants to fetch.  The type is a
+     signed integer.
+
+     TAG BYTES is a sequence of hex encoded uninterpreted bytes which
+     will be interpreted by the target.  Each pair of hex digits is
+     interpreted as a single byte.
+
+     Reply:
+     'OK'
+          The request was successful and the memory tag granules were
+          modified accordingly.
+
+     'E NN'
+          An error occured.  This means that modifying the memory tag
+          granules failed for some reason.
+
+     ''
+          An empty reply indicates that 'QMemTags' is not supported by
+          the stub, although this should not happen given GDB will only
+          send this packet if the stub has advertised support for memory
+          tagging via 'qSupported'.
+
+'qOffsets'
+     Get section offsets that the target used when relocating the
+     downloaded image.
+
+     Reply:
+     'Text=XXX;Data=YYY[;Bss=ZZZ]'
+          Relocate the 'Text' section by XXX from its original address.
+          Relocate the 'Data' section by YYY from its original address.
+          If the object file format provides segment information (e.g.
+          ELF 'PT_LOAD' program headers), GDB will relocate entire
+          segments by the supplied offsets.
+
+          _Note: while a 'Bss' offset may be included in the response,
+          GDB ignores this and instead applies the 'Data' offset to the
+          'Bss' section._
+
+     'TextSeg=XXX[;DataSeg=YYY]'
+          Relocate the first segment of the object file, which
+          conventionally contains program code, to a starting address of
+          XXX.  If 'DataSeg' is specified, relocate the second segment,
+          which conventionally contains modifiable data, to a starting
+          address of YYY.  GDB will report an error if the object file
+          does not contain segment information, or does not contain at
+          least as many segments as mentioned in the reply.  Extra
+          segments are kept at fixed offsets relative to the last
+          relocated segment.
+
+'qP MODE THREAD-ID'
+     Returns information on THREAD-ID.  Where: MODE is a hex encoded 32
+     bit mode; THREAD-ID is a thread ID (*note thread-id syntax::).
+
+     Don't use this packet; use the 'qThreadExtraInfo' query instead
+     (see below).
+
+     Reply: see 'remote.c:remote_unpack_thread_info_response()'.
+
+'QNonStop:1'
+'QNonStop:0'
+     Enter non-stop ('QNonStop:1') or all-stop ('QNonStop:0') mode.
+     *Note Remote Non-Stop::, for more information.
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     ''
+          An empty reply indicates that 'QNonStop' is not supported by
+          the stub.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).  Use of this packet is controlled by the 'set
+     non-stop' command; *note Non-Stop Mode::.
+
+'QCatchSyscalls:1 [;SYSNO]...'
+'QCatchSyscalls:0'
+     Enable ('QCatchSyscalls:1') or disable ('QCatchSyscalls:0')
+     catching syscalls from the inferior process.
+
+     For 'QCatchSyscalls:1', each listed syscall SYSNO (encoded in hex)
+     should be reported to GDB.  If no syscall SYSNO is listed, every
+     system call should be reported.
+
+     Note that if a syscall not in the list is reported, GDB will still
+     filter the event according to its own list from all corresponding
+     'catch syscall' commands.  However, it is more efficient to only
+     report the requested syscalls.
+
+     Multiple 'QCatchSyscalls:1' packets do not combine; any earlier
+     'QCatchSyscalls:1' list is completely replaced by the new list.
+
+     If the inferior process execs, the state of 'QCatchSyscalls' is
+     kept for the new process too.  On targets where exec may affect
+     syscall numbers, for example with exec between 32 and 64-bit
+     processes, the client should send a new packet with the new syscall
+     list.
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  NN are hex digits.
+
+     ''
+          An empty reply indicates that 'QCatchSyscalls' is not
+          supported by the stub.
+
+     Use of this packet is controlled by the 'set remote catch-syscalls'
+     command (*note set remote catch-syscalls: Remote Configuration.).
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).
+
+'QPassSignals: SIGNAL [;SIGNAL]...'
+     Each listed SIGNAL should be passed directly to the inferior
+     process.  Signals are numbered identically to continue packets and
+     stop replies (*note Stop Reply Packets::).  Each SIGNAL list item
+     should be strictly greater than the previous item.  These signals
+     do not need to stop the inferior, or be reported to GDB.  All other
+     signals should be reported to GDB.  Multiple 'QPassSignals' packets
+     do not combine; any earlier 'QPassSignals' list is completely
+     replaced by the new list.  This packet improves performance when
+     using 'handle SIGNAL nostop noprint pass'.
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     ''
+          An empty reply indicates that 'QPassSignals' is not supported
+          by the stub.
+
+     Use of this packet is controlled by the 'set remote pass-signals'
+     command (*note set remote pass-signals: Remote Configuration.).
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate 'qSupported' response (*note
+     qSupported::).
+
+'QProgramSignals: SIGNAL [;SIGNAL]...'
+     Each listed SIGNAL may be delivered to the inferior process.
+     Others should be silently discarded.
+
+     In some cases, the remote stub may need to decide whether to
+     deliver a signal to the program or not without GDB involvement.
+     One example of that is while detaching -- the program's threads may
+     have stopped for signals that haven't yet had a chance of being
+     reported to GDB, and so the remote stub can use the signal list
+     specified by this packet to know whether to deliver or ignore those
+     pending signals.
+
+     This does not influence whether to deliver a signal as requested by
+     a resumption packet (*note vCont packet::).
+
+     Signals are numbered identically to continue packets and stop
+     replies (*note Stop Reply Packets::).  Each SIGNAL list item should
+     be strictly greater than the previous item.  Multiple
+     'QProgramSignals' packets do not combine; any earlier
+     'QProgramSignals' list is completely replaced by the new list.
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     ''
+          An empty reply indicates that 'QProgramSignals' is not
+          supported by the stub.
+
+     Use of this packet is controlled by the 'set remote
+     program-signals' command (*note set remote program-signals: Remote
+     Configuration.).  This packet is not probed by default; the remote
+     stub must request it, by supplying an appropriate 'qSupported'
+     response (*note qSupported::).
+
+'QThreadEvents:1'
+'QThreadEvents:0'
+
+     Enable ('QThreadEvents:1') or disable ('QThreadEvents:0') reporting
+     of thread create and exit events.  *Note thread create event::, for
+     the reply specifications.  For example, this is used in non-stop
+     mode when GDB stops a set of threads and synchronously waits for
+     the their corresponding stop replies.  Without exit events, if one
+     of the threads exits, GDB would hang forever not knowing that it
+     should no longer expect a stop for that same thread.  GDB does not
+     enable this feature unless the stub reports that it supports it by
+     including 'QThreadEvents+' in its 'qSupported' reply.
+
+     Reply:
+     'OK'
+          The request succeeded.
+
+     'E NN'
+          An error occurred.  The error number NN is given as hex
+          digits.
+
+     ''
+          An empty reply indicates that 'QThreadEvents' is not supported
+          by the stub.
+
+     Use of this packet is controlled by the 'set remote thread-events'
+     command (*note set remote thread-events: Remote Configuration.).
+
+'qRcmd,COMMAND'
+     COMMAND (hex encoded) is passed to the local interpreter for
+     execution.  Invalid commands should be reported using the output
+     string.  Before the final result packet, the target may also
+     respond with a number of intermediate 'OOUTPUT' console output
+     packets.  _Implementors should note that providing access to a
+     stubs's interpreter may have security implications_.
+
+     Reply:
+     'OK'
+          A command response with no output.
+     'OUTPUT'
+          A command response with the hex encoded output string OUTPUT.
+     'E NN'
+          Indicate a badly formed request.
+     ''
+          An empty reply indicates that 'qRcmd' is not recognized.
+
+     (Note that the 'qRcmd' packet's name is separated from the command
+     by a ',', not a ':', contrary to the naming conventions above.
+     Please don't use this packet as a model for new packets.)
+
+'qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN'
+     Search LENGTH bytes at ADDRESS for SEARCH-PATTERN.  Both ADDRESS
+     and LENGTH are encoded in hex; SEARCH-PATTERN is a sequence of
+     bytes, also hex encoded.
+
+     Reply:
+     '0'
+          The pattern was not found.
+     '1,address'
+          The pattern was found at ADDRESS.
+     'E NN'
+          A badly formed request or an error was encountered while
+          searching memory.
+     ''
+          An empty reply indicates that 'qSearch:memory' is not
+          recognized.
+
+'QStartNoAckMode'
+     Request that the remote stub disable the normal '+'/'-' protocol
+     acknowledgments (*note Packet Acknowledgment::).
+
+     Reply:
+     'OK'
+          The stub has switched to no-acknowledgment mode.  GDB
+          acknowledges this response, but neither the stub nor GDB shall
+          send or expect further '+'/'-' acknowledgments in the current
+          connection.
+     ''
+          An empty reply indicates that the stub does not support
+          no-acknowledgment mode.
+
+'qSupported [:GDBFEATURE [;GDBFEATURE]... ]'
+     Tell the remote stub about features supported by GDB, and query the
+     stub for features it supports.  This packet allows GDB and the
+     remote stub to take advantage of each others' features.
+     'qSupported' also consolidates multiple feature probes at startup,
+     to improve GDB performance--a single larger packet performs better
+     than multiple smaller probe packets on high-latency links.  Some
+     features may enable behavior which must not be on by default, e.g.
+     because it would confuse older clients or stubs.  Other features
+     may describe packets which could be automatically probed for, but
+     are not.  These features must be reported before GDB will use them.
+     This "default unsupported" behavior is not appropriate for all
+     packets, but it helps to keep the initial connection time under
+     control with new versions of GDB which support increasing numbers
+     of packets.
+
+     Reply:
+     'STUBFEATURE [;STUBFEATURE]...'
+          The stub supports or does not support each returned
+          STUBFEATURE, depending on the form of each STUBFEATURE (see
+          below for the possible forms).
+     ''
+          An empty reply indicates that 'qSupported' is not recognized,
+          or that no features needed to be reported to GDB.
+
+     The allowed forms for each feature (either a GDBFEATURE in the
+     'qSupported' packet, or a STUBFEATURE in the response) are:
+
+     'NAME=VALUE'
+          The remote protocol feature NAME is supported, and associated
+          with the specified VALUE.  The format of VALUE depends on the
+          feature, but it must not include a semicolon.
+     'NAME+'
+          The remote protocol feature NAME is supported, and does not
+          need an associated value.
+     'NAME-'
+          The remote protocol feature NAME is not supported.
+     'NAME?'
+          The remote protocol feature NAME may be supported, and GDB
+          should auto-detect support in some other way when it is
+          needed.  This form will not be used for GDBFEATURE
+          notifications, but may be used for STUBFEATURE responses.
+
+     Whenever the stub receives a 'qSupported' request, the supplied set
+     of GDB features should override any previous request.  This allows
+     GDB to put the stub in a known state, even if the stub had
+     previously been communicating with a different version of GDB.
+
+     The following values of GDBFEATURE (for the packet sent by GDB) are
+     defined:
+
+     'multiprocess'
+          This feature indicates whether GDB supports multiprocess
+          extensions to the remote protocol.  GDB does not use such
+          extensions unless the stub also reports that it supports them
+          by including 'multiprocess+' in its 'qSupported' reply.  *Note
+          multiprocess extensions::, for details.
+
+     'xmlRegisters'
+          This feature indicates that GDB supports the XML target
+          description.  If the stub sees 'xmlRegisters=' with target
+          specific strings separated by a comma, it will report register
+          description.
+
+     'qRelocInsn'
+          This feature indicates whether GDB supports the 'qRelocInsn'
+          packet (*note Relocate instruction reply packet: Tracepoint
+          Packets.).
+
+     'swbreak'
+          This feature indicates whether GDB supports the swbreak stop
+          reason in stop replies.  *Note swbreak stop reason::, for
+          details.
+
+     'hwbreak'
+          This feature indicates whether GDB supports the hwbreak stop
+          reason in stop replies.  *Note swbreak stop reason::, for
+          details.
+
+     'fork-events'
+          This feature indicates whether GDB supports fork event
+          extensions to the remote protocol.  GDB does not use such
+          extensions unless the stub also reports that it supports them
+          by including 'fork-events+' in its 'qSupported' reply.
+
+     'vfork-events'
+          This feature indicates whether GDB supports vfork event
+          extensions to the remote protocol.  GDB does not use such
+          extensions unless the stub also reports that it supports them
+          by including 'vfork-events+' in its 'qSupported' reply.
+
+     'exec-events'
+          This feature indicates whether GDB supports exec event
+          extensions to the remote protocol.  GDB does not use such
+          extensions unless the stub also reports that it supports them
+          by including 'exec-events+' in its 'qSupported' reply.
+
+     'vContSupported'
+          This feature indicates whether GDB wants to know the supported
+          actions in the reply to 'vCont?' packet.
+
+     Stubs should ignore any unknown values for GDBFEATURE.  Any GDB
+     which sends a 'qSupported' packet supports receiving packets of
+     unlimited length (earlier versions of GDB may reject overly long
+     responses).  Additional values for GDBFEATURE may be defined in the
+     future to let the stub take advantage of new features in GDB, e.g.
+     incompatible improvements in the remote protocol--the
+     'multiprocess' feature is an example of such a feature.  The stub's
+     reply should be independent of the GDBFEATURE entries sent by GDB;
+     first GDB describes all the features it supports, and then the stub
+     replies with all the features it supports.
+
+     Similarly, GDB will silently ignore unrecognized stub feature
+     responses, as long as each response uses one of the standard forms.
+
+     Some features are flags.  A stub which supports a flag feature
+     should respond with a '+' form response.  Other features require
+     values, and the stub should respond with an '=' form response.
+
+     Each feature has a default value, which GDB will use if
+     'qSupported' is not available or if the feature is not mentioned in
+     the 'qSupported' response.  The default values are fixed; a stub is
+     free to omit any feature responses that match the defaults.
+
+     Not all features can be probed, but for those which can, the
+     probing mechanism is useful: in some cases, a stub's internal
+     architecture may not allow the protocol layer to know some
+     information about the underlying target in advance.  This is
+     especially common in stubs which may be configured for multiple
+     targets.
+
+     These are the currently defined stub features and their properties:
+
+     Feature Name              Value          Default   Probe
+                               Required                 Allowed
+                                                        
+     'PacketSize'              Yes            '-'       No
+                                                        
+     'qXfer:auxv:read'         No             '-'       Yes
+                                                        
+     'qXfer:btrace:read'       No             '-'       Yes
+                                                        
+     'qXfer:btrace-conf:read'  No             '-'       Yes
+                                                        
+     'qXfer:exec-file:read'    No             '-'       Yes
+                                                        
+     'qXfer:features:read'     No             '-'       Yes
+                                                        
+     'qXfer:libraries:read'    No             '-'       Yes
+                                                        
+     'qXfer:libraries-svr4:read'No            '-'       Yes
+                                                        
+     'augmented-libraries-svr4-read'No        '-'       No
+                                                        
+     'qXfer:memory-map:read'   No             '-'       Yes
+                                                        
+     'qXfer:sdata:read'        No             '-'       Yes
+                                                        
+     'qXfer:siginfo:read'      No             '-'       Yes
+                                                        
+     'qXfer:siginfo:write'     No             '-'       Yes
+                                                        
+     'qXfer:threads:read'      No             '-'       Yes
+                                                        
+     'qXfer:traceframe-info:read'No           '-'       Yes
+                                                        
+     'qXfer:uib:read'          No             '-'       Yes
+                                                        
+     'qXfer:fdpic:read'        No             '-'       Yes
+                                                        
+     'Qbtrace:off'             Yes            '-'       Yes
+                                                        
+     'Qbtrace:bts'             Yes            '-'       Yes
+                                                        
+     'Qbtrace:pt'              Yes            '-'       Yes
+                                                        
+     'Qbtrace-conf:bts:size'   Yes            '-'       Yes
+                                                        
+     'Qbtrace-conf:pt:size'    Yes            '-'       Yes
+                                                        
+     'QNonStop'                No             '-'       Yes
+                                                        
+     'QCatchSyscalls'          No             '-'       Yes
+                                                        
+     'QPassSignals'            No             '-'       Yes
+                                                        
+     'QStartNoAckMode'         No             '-'       Yes
+                                                        
+     'multiprocess'            No             '-'       No
+                                                        
+     'ConditionalBreakpoints'  No             '-'       No
+                                                        
+     'ConditionalTracepoints'  No             '-'       No
+                                                        
+     'ReverseContinue'         No             '-'       No
+                                                        
+     'ReverseStep'             No             '-'       No
+                                                        
+     'TracepointSource'        No             '-'       No
+                                                        
+     'QAgent'                  No             '-'       No
+                                                        
+     'QAllow'                  No             '-'       No
+                                                        
+     'QDisableRandomization'   No             '-'       No
+                                                        
+     'EnableDisableTracepoints'No             '-'       No
+                                                        
+     'QTBuffer:size'           No             '-'       No
+                                                        
+     'tracenz'                 No             '-'       No
+                                                        
+     'BreakpointCommands'      No             '-'       No
+                                                        
+     'swbreak'                 No             '-'       No
+                                                        
+     'hwbreak'                 No             '-'       No
+                                                        
+     'fork-events'             No             '-'       No
+                                                        
+     'vfork-events'            No             '-'       No
+                                                        
+     'exec-events'             No             '-'       No
+                                                        
+     'QThreadEvents'           No             '-'       No
+                                                        
+     'no-resumed'              No             '-'       No
+                                                        
+     'memory-tagging'          No             '-'       No
+                                                        
+
+     These are the currently defined stub features, in more detail:
+
+     'PacketSize=BYTES'
+          The remote stub can accept packets up to at least BYTES in
+          length.  GDB will send packets up to this size for bulk
+          transfers, and will never send larger packets.  This is a
+          limit on the data characters in the packet, including the
+          frame and checksum.  There is no trailing NUL byte in a remote
+          protocol packet; if the stub stores packets in a
+          NUL-terminated format, it should allow an extra byte in its
+          buffer for the NUL. If this stub feature is not supported, GDB
+          guesses based on the size of the 'g' packet response.
+
+     'qXfer:auxv:read'
+          The remote stub understands the 'qXfer:auxv:read' packet
+          (*note qXfer auxiliary vector read::).
+
+     'qXfer:btrace:read'
+          The remote stub understands the 'qXfer:btrace:read' packet
+          (*note qXfer btrace read::).
+
+     'qXfer:btrace-conf:read'
+          The remote stub understands the 'qXfer:btrace-conf:read'
+          packet (*note qXfer btrace-conf read::).
+
+     'qXfer:exec-file:read'
+          The remote stub understands the 'qXfer:exec-file:read' packet
+          (*note qXfer executable filename read::).
+
+     'qXfer:features:read'
+          The remote stub understands the 'qXfer:features:read' packet
+          (*note qXfer target description read::).
+
+     'qXfer:libraries:read'
+          The remote stub understands the 'qXfer:libraries:read' packet
+          (*note qXfer library list read::).
+
+     'qXfer:libraries-svr4:read'
+          The remote stub understands the 'qXfer:libraries-svr4:read'
+          packet (*note qXfer svr4 library list read::).
+
+     'augmented-libraries-svr4-read'
+          The remote stub understands the augmented form of the
+          'qXfer:libraries-svr4:read' packet (*note qXfer svr4 library
+          list read::).
+
+     'qXfer:memory-map:read'
+          The remote stub understands the 'qXfer:memory-map:read' packet
+          (*note qXfer memory map read::).
+
+     'qXfer:sdata:read'
+          The remote stub understands the 'qXfer:sdata:read' packet
+          (*note qXfer sdata read::).
+
+     'qXfer:siginfo:read'
+          The remote stub understands the 'qXfer:siginfo:read' packet
+          (*note qXfer siginfo read::).
+
+     'qXfer:siginfo:write'
+          The remote stub understands the 'qXfer:siginfo:write' packet
+          (*note qXfer siginfo write::).
+
+     'qXfer:threads:read'
+          The remote stub understands the 'qXfer:threads:read' packet
+          (*note qXfer threads read::).
+
+     'qXfer:traceframe-info:read'
+          The remote stub understands the 'qXfer:traceframe-info:read'
+          packet (*note qXfer traceframe info read::).
+
+     'qXfer:uib:read'
+          The remote stub understands the 'qXfer:uib:read' packet (*note
+          qXfer unwind info block::).
+
+     'qXfer:fdpic:read'
+          The remote stub understands the 'qXfer:fdpic:read' packet
+          (*note qXfer fdpic loadmap read::).
+
+     'QNonStop'
+          The remote stub understands the 'QNonStop' packet (*note
+          QNonStop::).
+
+     'QCatchSyscalls'
+          The remote stub understands the 'QCatchSyscalls' packet (*note
+          QCatchSyscalls::).
+
+     'QPassSignals'
+          The remote stub understands the 'QPassSignals' packet (*note
+          QPassSignals::).
+
+     'QStartNoAckMode'
+          The remote stub understands the 'QStartNoAckMode' packet and
+          prefers to operate in no-acknowledgment mode.  *Note Packet
+          Acknowledgment::.
+
+     'multiprocess'
+          The remote stub understands the multiprocess extensions to the
+          remote protocol syntax.  The multiprocess extensions affect
+          the syntax of thread IDs in both packets and replies (*note
+          thread-id syntax::), and add process IDs to the 'D' packet and
+          'W' and 'X' replies.  Note that reporting this feature
+          indicates support for the syntactic extensions only, not that
+          the stub necessarily supports debugging of more than one
+          process at a time.  The stub must not use multiprocess
+          extensions in packet replies unless GDB has also indicated it
+          supports them in its 'qSupported' request.
+
+     'qXfer:osdata:read'
+          The remote stub understands the 'qXfer:osdata:read' packet
+          ((*note qXfer osdata read::).
+
+     'ConditionalBreakpoints'
+          The target accepts and implements evaluation of conditional
+          expressions defined for breakpoints.  The target will only
+          report breakpoint triggers when such conditions are true
+          (*note Break Conditions: Conditions.).
+
+     'ConditionalTracepoints'
+          The remote stub accepts and implements conditional expressions
+          defined for tracepoints (*note Tracepoint Conditions::).
+
+     'ReverseContinue'
+          The remote stub accepts and implements the reverse continue
+          packet (*note bc::).
+
+     'ReverseStep'
+          The remote stub accepts and implements the reverse step packet
+          (*note bs::).
+
+     'TracepointSource'
+          The remote stub understands the 'QTDPsrc' packet that supplies
+          the source form of tracepoint definitions.
+
+     'QAgent'
+          The remote stub understands the 'QAgent' packet.
+
+     'QAllow'
+          The remote stub understands the 'QAllow' packet.
+
+     'QDisableRandomization'
+          The remote stub understands the 'QDisableRandomization'
+          packet.
+
+     'StaticTracepoint'
+          The remote stub supports static tracepoints.
+
+     'InstallInTrace'
+          The remote stub supports installing tracepoint in tracing.
+
+     'EnableDisableTracepoints'
+          The remote stub supports the 'QTEnable' (*note QTEnable::) and
+          'QTDisable' (*note QTDisable::) packets that allow tracepoints
+          to be enabled and disabled while a trace experiment is
+          running.
+
+     'QTBuffer:size'
+          The remote stub supports the 'QTBuffer:size' (*note
+          QTBuffer-size::) packet that allows to change the size of the
+          trace buffer.
+
+     'tracenz'
+          The remote stub supports the 'tracenz' bytecode for collecting
+          strings.  See *note Bytecode Descriptions:: for details about
+          the bytecode.
+
+     'BreakpointCommands'
+          The remote stub supports running a breakpoint's command list
+          itself, rather than reporting the hit to GDB.
+
+     'Qbtrace:off'
+          The remote stub understands the 'Qbtrace:off' packet.
+
+     'Qbtrace:bts'
+          The remote stub understands the 'Qbtrace:bts' packet.
+
+     'Qbtrace:pt'
+          The remote stub understands the 'Qbtrace:pt' packet.
+
+     'Qbtrace-conf:bts:size'
+          The remote stub understands the 'Qbtrace-conf:bts:size'
+          packet.
+
+     'Qbtrace-conf:pt:size'
+          The remote stub understands the 'Qbtrace-conf:pt:size' packet.
+
+     'swbreak'
+          The remote stub reports the 'swbreak' stop reason for memory
+          breakpoints.
+
+     'hwbreak'
+          The remote stub reports the 'hwbreak' stop reason for hardware
+          breakpoints.
+
+     'fork-events'
+          The remote stub reports the 'fork' stop reason for fork
+          events.
+
+     'vfork-events'
+          The remote stub reports the 'vfork' stop reason for vfork
+          events and vforkdone events.
+
+     'exec-events'
+          The remote stub reports the 'exec' stop reason for exec
+          events.
+
+     'vContSupported'
+          The remote stub reports the supported actions in the reply to
+          'vCont?' packet.
+
+     'QThreadEvents'
+          The remote stub understands the 'QThreadEvents' packet.
+
+     'no-resumed'
+          The remote stub reports the 'N' stop reply.
+
+     'memory-tagging'
+          The remote stub supports and implements the required memory
+          tagging functionality and understands the 'qMemTags' (*note
+          qMemTags::) and 'QMemTags' (*note QMemTags::) packets.
+
+          For AArch64 GNU/Linux systems, this feature also requires
+          access to the '/proc/PID/smaps' file so memory mapping page
+          flags can be inspected.  This is done via the 'vFile'
+          requests.
+
+'qSymbol::'
+     Notify the target that GDB is prepared to serve symbol lookup
+     requests.  Accept requests from the target for the values of
+     symbols.
+
+     Reply:
+     'OK'
+          The target does not need to look up any (more) symbols.
+     'qSymbol:SYM_NAME'
+          The target requests the value of symbol SYM_NAME (hex
+          encoded).  GDB may provide the value by using the
+          'qSymbol:SYM_VALUE:SYM_NAME' message, described below.
+
+'qSymbol:SYM_VALUE:SYM_NAME'
+     Set the value of SYM_NAME to SYM_VALUE.
+
+     SYM_NAME (hex encoded) is the name of a symbol whose value the
+     target has previously requested.
+
+     SYM_VALUE (hex) is the value for symbol SYM_NAME.  If GDB cannot
+     supply a value for SYM_NAME, then this field will be empty.
+
+     Reply:
+     'OK'
+          The target does not need to look up any (more) symbols.
+     'qSymbol:SYM_NAME'
+          The target requests the value of a new symbol SYM_NAME (hex
+          encoded).  GDB will continue to supply the values of symbols
+          (if available), until the target ceases to request them.
+
+'qTBuffer'
+'QTBuffer'
+'QTDisconnected'
+'QTDP'
+'QTDPsrc'
+'QTDV'
+'qTfP'
+'qTfV'
+'QTFrame'
+'qTMinFTPILen'
+
+     *Note Tracepoint Packets::.
+
+'qThreadExtraInfo,THREAD-ID'
+     Obtain from the target OS a printable string description of thread
+     attributes for the thread THREAD-ID; see *note thread-id syntax::,
+     for the forms of THREAD-ID.  This string may contain anything that
+     the target OS thinks is interesting for GDB to tell the user about
+     the thread.  The string is displayed in GDB's 'info threads'
+     display.  Some examples of possible thread extra info strings are
+     'Runnable', or 'Blocked on Mutex'.
+
+     Reply:
+     'XX...'
+          Where 'XX...' is a hex encoding of ASCII data, comprising the
+          printable string containing the extra information about the
+          thread's attributes.
+
+     (Note that the 'qThreadExtraInfo' packet's name is separated from
+     the command by a ',', not a ':', contrary to the naming conventions
+     above.  Please don't use this packet as a model for new packets.)
+
+'QTNotes'
+'qTP'
+'QTSave'
+'qTsP'
+'qTsV'
+'QTStart'
+'QTStop'
+'QTEnable'
+'QTDisable'
+'QTinit'
+'QTro'
+'qTStatus'
+'qTV'
+'qTfSTM'
+'qTsSTM'
+'qTSTMat'
+     *Note Tracepoint Packets::.
+
+'qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH'
+     Read uninterpreted bytes from the target's special data area
+     identified by the keyword OBJECT.  Request LENGTH bytes starting at
+     OFFSET bytes into the data.  The content and encoding of ANNEX is
+     specific to OBJECT; it can supply additional details about what
+     data to access.
+
+     Reply:
+     'm DATA'
+          Data DATA (*note Binary Data::) has been read from the target.
+          There may be more data at a higher address (although it is
+          permitted to return 'm' even for the last valid block of data,
+          as long as at least one byte of data was read).  It is
+          possible for DATA to have fewer bytes than the LENGTH in the
+          request.
+
+     'l DATA'
+          Data DATA (*note Binary Data::) has been read from the target.
+          There is no more data to be read.  It is possible for DATA to
+          have fewer bytes than the LENGTH in the request.
+
+     'l'
+          The OFFSET in the request is at the end of the data.  There is
+          no more data to be read.
+
+     'E00'
+          The request was malformed, or ANNEX was invalid.
+
+     'E NN'
+          The offset was invalid, or there was an error encountered
+          reading the data.  The NN part is a hex-encoded 'errno' value.
+
+     ''
+          An empty reply indicates the OBJECT string was not recognized
+          by the stub, or that the object does not support reading.
+
+     Here are the specific requests of this form defined so far.  All
+     the 'qXfer:OBJECT:read:...' requests use the same reply formats,
+     listed above.
+
+     'qXfer:auxv:read::OFFSET,LENGTH'
+          Access the target's "auxiliary vector".  *Note auxiliary
+          vector: OS Information.  Note ANNEX must be empty.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:btrace:read:ANNEX:OFFSET,LENGTH'
+
+          Return a description of the current branch trace.  *Note
+          Branch Trace Format::.  The annex part of the generic 'qXfer'
+          packet may have one of the following values:
+
+          'all'
+               Returns all available branch trace.
+
+          'new'
+               Returns all available branch trace if the branch trace
+               changed since the last read request.
+
+          'delta'
+               Returns the new branch trace since the last read request.
+               Adds a new block to the end of the trace that begins at
+               zero and ends at the source location of the first branch
+               in the trace buffer.  This extra block is used to stitch
+               traces together.
+
+               If the trace buffer overflowed, returns an error
+               indicating the overflow.
+
+          This packet is not probed by default; the remote stub must
+          request it by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:btrace-conf:read::OFFSET,LENGTH'
+
+          Return a description of the current branch trace
+          configuration.  *Note Branch Trace Configuration Format::.
+
+          This packet is not probed by default; the remote stub must
+          request it by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:exec-file:read:ANNEX:OFFSET,LENGTH'
+          Return the full absolute name of the file that was executed to
+          create a process running on the remote system.  The annex
+          specifies the numeric process ID of the process to query,
+          encoded as a hexadecimal number.  If the annex part is empty
+          the remote stub should return the filename corresponding to
+          the currently executing process.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:features:read:ANNEX:OFFSET,LENGTH'
+          Access the "target description".  *Note Target Descriptions::.
+          The annex specifies which XML document to access.  The main
+          description is always loaded from the 'target.xml' annex.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:libraries:read:ANNEX:OFFSET,LENGTH'
+          Access the target's list of loaded libraries.  *Note Library
+          List Format::.  The annex part of the generic 'qXfer' packet
+          must be empty (*note qXfer read::).
+
+          Targets which maintain a list of libraries in the program's
+          memory do not need to implement this packet; it is designed
+          for platforms where the operating system manages the list of
+          loaded libraries.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:libraries-svr4:read:ANNEX:OFFSET,LENGTH'
+          Access the target's list of loaded libraries when the target
+          is an SVR4 platform.  *Note Library List Format for SVR4
+          Targets::.  The annex part of the generic 'qXfer' packet must
+          be empty unless the remote stub indicated it supports the
+          augmented form of this packet by supplying an appropriate
+          'qSupported' response (*note qXfer read::, *note
+          qSupported::).
+
+          This packet is optional for better performance on SVR4
+          targets.  GDB uses memory read packets to read the SVR4
+          library list otherwise.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+          If the remote stub indicates it supports the augmented form of
+          this packet then the annex part of the generic 'qXfer' packet
+          may contain a semicolon-separated list of 'NAME=VALUE'
+          arguments.  The currently supported arguments are:
+
+          'start=ADDRESS'
+               A hexadecimal number specifying the address of the
+               'struct link_map' to start reading the library list from.
+               If unset or zero then the first 'struct link_map' in the
+               library list will be chosen as the starting point.
+
+          'prev=ADDRESS'
+               A hexadecimal number specifying the address of the
+               'struct link_map' immediately preceding the 'struct
+               link_map' specified by the 'start' argument.  If unset or
+               zero then the remote stub will expect that no 'struct
+               link_map' exists prior to the starting point.
+
+          Arguments that are not understood by the remote stub will be
+          silently ignored.
+
+     'qXfer:memory-map:read::OFFSET,LENGTH'
+          Access the target's "memory-map".  *Note Memory Map Format::.
+          The annex part of the generic 'qXfer' packet must be empty
+          (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:sdata:read::OFFSET,LENGTH'
+
+          Read contents of the extra collected static tracepoint marker
+          information.  The annex part of the generic 'qXfer' packet
+          must be empty (*note qXfer read::).  *Note Tracepoint Action
+          Lists: Tracepoint Actions.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:siginfo:read::OFFSET,LENGTH'
+          Read contents of the extra signal information on the target
+          system.  The annex part of the generic 'qXfer' packet must be
+          empty (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:threads:read::OFFSET,LENGTH'
+          Access the list of threads on target.  *Note Thread List
+          Format::.  The annex part of the generic 'qXfer' packet must
+          be empty (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:traceframe-info:read::OFFSET,LENGTH'
+
+          Return a description of the current traceframe's contents.
+          *Note Traceframe Info Format::.  The annex part of the generic
+          'qXfer' packet must be empty (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:uib:read:PC:OFFSET,LENGTH'
+
+          Return the unwind information block for PC.  This packet is
+          used on OpenVMS/ia64 to ask the kernel unwind information.
+
+          This packet is not probed by default.
+
+     'qXfer:fdpic:read:ANNEX:OFFSET,LENGTH'
+          Read contents of 'loadmap's on the target system.  The annex,
+          either 'exec' or 'interp', specifies which 'loadmap',
+          executable 'loadmap' or interpreter 'loadmap' to read.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+     'qXfer:osdata:read::OFFSET,LENGTH'
+          Access the target's "operating system information".  *Note
+          Operating System Information::.
+
+'qXfer:OBJECT:write:ANNEX:OFFSET:DATA...'
+     Write uninterpreted bytes into the target's special data area
+     identified by the keyword OBJECT, starting at OFFSET bytes into the
+     data.  The binary-encoded data (*note Binary Data::) to be written
+     is given by DATA....  The content and encoding of ANNEX is specific
+     to OBJECT; it can supply additional details about what data to
+     access.
+
+     Reply:
+     'NN'
+          NN (hex encoded) is the number of bytes written.  This may be
+          fewer bytes than supplied in the request.
+
+     'E00'
+          The request was malformed, or ANNEX was invalid.
+
+     'E NN'
+          The offset was invalid, or there was an error encountered
+          writing the data.  The NN part is a hex-encoded 'errno' value.
+
+     ''
+          An empty reply indicates the OBJECT string was not recognized
+          by the stub, or that the object does not support writing.
+
+     Here are the specific requests of this form defined so far.  All
+     the 'qXfer:OBJECT:write:...' requests use the same reply formats,
+     listed above.
+
+     'qXfer:siginfo:write::OFFSET:DATA...'
+          Write DATA to the extra signal information on the target
+          system.  The annex part of the generic 'qXfer' packet must be
+          empty (*note qXfer write::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate 'qSupported' response
+          (*note qSupported::).
+
+'qXfer:OBJECT:OPERATION:...'
+     Requests of this form may be added in the future.  When a stub does
+     not recognize the OBJECT keyword, or its support for OBJECT does
+     not recognize the OPERATION keyword, the stub must respond with an
+     empty packet.
+
+'qAttached:PID'
+     Return an indication of whether the remote server attached to an
+     existing process or created a new process.  When the multiprocess
+     protocol extensions are supported (*note multiprocess
+     extensions::), PID is an integer in hexadecimal format identifying
+     the target process.  Otherwise, GDB will omit the PID field and the
+     query packet will be simplified as 'qAttached'.
+
+     This query is used, for example, to know whether the remote process
+     should be detached or killed when a GDB session is ended with the
+     'quit' command.
+
+     Reply:
+     '1'
+          The remote server attached to an existing process.
+     '0'
+          The remote server created a new process.
+     'E NN'
+          A badly formed request or an error was encountered.
+
+'Qbtrace:bts'
+     Enable branch tracing for the current thread using Branch Trace
+     Store.
+
+     Reply:
+     'OK'
+          Branch tracing has been enabled.
+     'E.errtext'
+          A badly formed request or an error was encountered.
+
+'Qbtrace:pt'
+     Enable branch tracing for the current thread using Intel Processor
+     Trace.
+
+     Reply:
+     'OK'
+          Branch tracing has been enabled.
+     'E.errtext'
+          A badly formed request or an error was encountered.
+
+'Qbtrace:off'
+     Disable branch tracing for the current thread.
+
+     Reply:
+     'OK'
+          Branch tracing has been disabled.
+     'E.errtext'
+          A badly formed request or an error was encountered.
+
+'Qbtrace-conf:bts:size=VALUE'
+     Set the requested ring buffer size for new threads that use the
+     btrace recording method in bts format.
+
+     Reply:
+     'OK'
+          The ring buffer size has been set.
+     'E.errtext'
+          A badly formed request or an error was encountered.
+
+'Qbtrace-conf:pt:size=VALUE'
+     Set the requested ring buffer size for new threads that use the
+     btrace recording method in pt format.
+
+     Reply:
+     'OK'
+          The ring buffer size has been set.
+     'E.errtext'
+          A badly formed request or an error was encountered.
+
+   ---------- Footnotes ----------
+
+   (1) The 'qP' and 'qL' packets predate these conventions, and have
+arguments without any terminator for the packet name; we suspect they
+are in widespread use in places that are difficult to upgrade.  The 'qC'
+packet has no arguments, but some existing stubs (e.g. RedBoot) are
+known to not check for the end of the packet.
+
+
 File: gdb.info,  Node: Architecture-Specific Protocol Details,  Next: Tracepoint Packets,  Prev: General Query Packets,  Up: Remote Protocol
 
 E.5 Architecture-Specific Protocol Details
@@ -60,9 +2517,10 @@ E.5.1 ARM-specific Protocol Details
 * Menu:
 
 * ARM Breakpoint Kinds::
+* ARM Memory Tag Types::
 
 
-File: gdb.info,  Node: ARM Breakpoint Kinds,  Up: ARM-Specific Protocol Details
+File: gdb.info,  Node: ARM Breakpoint Kinds,  Next: ARM Memory Tag Types,  Up: ARM-Specific Protocol Details
 
 E.5.1.1 ARM Breakpoint Kinds
 ............................
@@ -79,6 +2537,21 @@ These breakpoint kinds are defined for t
      32-bit ARM mode breakpoint.
 
 
+File: gdb.info,  Node: ARM Memory Tag Types,  Prev: ARM Breakpoint Kinds,  Up: ARM-Specific Protocol Details
+
+E.5.1.2 ARM Memory Tag Types
+............................
+
+These memory tag types are defined for the 'qMemTag' and 'QMemTag'
+packets.
+
+0
+     MTE logical tag
+
+1
+     MTE allocation tag
+
+
 File: gdb.info,  Node: MIPS-Specific Protocol Details,  Prev: ARM-Specific Protocol Details,  Up: Architecture-Specific Protocol Details
 
 E.5.2 MIPS-specific Protocol Details
@@ -3592,39 +6065,44 @@ File: gdb.info,  Node: ARC Features,  Ne
 G.5.2 ARC Features
 ------------------
 
-ARC processors are highly configurable, so even core registers and their
-number are not completely predetermined.  In addition flags and PC
-registers which are important to GDB are not "core" registers in ARC. It
-is required that one of the core registers features is present.
-'org.gnu.gdb.arc.aux-minimal' feature is mandatory.
-
-   The 'org.gnu.gdb.arc.core.v2' feature is required for ARC EM and ARC
-HS targets with a normal register file.  It should contain registers
-'r0' through 'r25', 'gp', 'fp', 'sp', 'r30', 'blink', 'lp_count' and
-'pcl'.  This feature may contain register 'ilink' and any of extension
-core registers 'r32' through 'r59/acch'.  'ilink' and extension core
-registers are not available to read/write, when debugging GNU/Linux
-applications, thus 'ilink' is made optional.
-
-   The 'org.gnu.gdb.arc.core-reduced.v2' feature is required for ARC EM
-and ARC HS targets with a reduced register file.  It should contain
-registers 'r0' through 'r3', 'r10' through 'r15', 'gp', 'fp', 'sp',
-'r30', 'blink', 'lp_count' and 'pcl'.  This feature may contain register
-'ilink' and any of extension core registers 'r32' through 'r59/acch'.
-
-   The 'org.gnu.gdb.arc.core.arcompact' feature is required for
-ARCompact targets with a normal register file.  It should contain
-registers 'r0' through 'r25', 'gp', 'fp', 'sp', 'r30', 'blink',
-'lp_count' and 'pcl'.  This feature may contain registers 'ilink1',
-'ilink2' and any of extension core registers 'r32' through 'r59/acch'.
-'ilink1' and 'ilink2' and extension core registers are not available
-when debugging GNU/Linux applications.  The only difference with
-'org.gnu.gdb.arc.core.v2' feature is in the names of 'ilink1' and
-'ilink2' registers and that 'r30' is mandatory in ARC v2, but 'ilink2'
-is optional on ARCompact.
+ARC processors are so configurable that even core registers and their
+numbers are not predetermined completely.  Moreover, _flags_ and _PC_
+registers, which are important to GDB, are not "core" registers in ARC.
+Therefore, there are two features that their presence is mandatory:
+'org.gnu.gdb.arc.core' and 'org.gnu.gdb.arc.aux'.
+
+   The 'org.gnu.gdb.arc.core' feature is required for all targets.  It
+must contain registers:
+
+   - 'r0' through 'r25' for normal register file targets.
+   - 'r0' through 'r3', and 'r10' through 'r15' for reduced register
+     file targets.
+   - 'gp', 'fp', 'sp', 'r30'(1), 'blink', 'lp_count', 'pcl'.
+
+   In case of an ARCompact target (ARCv1 ISA), the
+'org.gnu.gdb.arc.core' feature may contain registers 'ilink1' and
+'ilink2'.  While in case of ARC EM and ARC HS targets (ARCv2 ISA),
+register 'ilink' may be present.  The difference between ARCv1 and ARCv2
+is the naming of registers _29th_ and _30th_.  They are called 'ilink1'
+and 'ilink2' for ARCv1 and are optional.  For ARCv2, they are called
+'ilink' and 'r30' and only 'ilink' is optional.  The optionality of
+'ilink*' registers is because of their inaccessibility during user space
+debugging sessions.
+
+   Extension core registers 'r32' through 'r59' are optional and their
+existence depends on the configuration.  When debugging GNU/Linux
+applications, i.e. user space debugging, these core registers are not
+available.
+
+   The 'org.gnu.gdb.arc.aux' feature is required for all ARC targets.
+Here is the list of registers pertinent to this feature:
+
+   - mandatory: 'pc' and 'status32'.
+   - optional: 'lp_start', 'lp_end', and 'bta'.
+
+   ---------- Footnotes ----------
 
-   The 'org.gnu.gdb.arc.aux-minimal' feature is required for all ARC
-targets.  It should contain registers 'pc' and 'status32'.
+   (1) Not necessary for ARCv1.
 
 
 File: gdb.info,  Node: ARM Features,  Next: i386 Features,  Prev: ARC Features,  Up: Standard Target Features
@@ -3636,7 +6114,7 @@ The 'org.gnu.gdb.arm.core' feature is re
 targets.  It should contain registers 'r0' through 'r13', 'sp', 'lr',
 'pc', and 'cpsr'.
 
-   For M-profile targets (e.g.  Cortex-M3), the 'org.gnu.gdb.arm.core'
+   For M-profile targets (e.g. Cortex-M3), the 'org.gnu.gdb.arm.core'
 feature is replaced by 'org.gnu.gdb.arm.m-profile'.  It should contain
 registers 'r0' through 'r13', 'sp', 'lr', 'pc', and 'xpsr'.
 
@@ -3789,6 +6267,12 @@ G.5.7 M68K Features
      This feature is optional.  If present, it should contain registers
      'fp0' through 'fp7', 'fpcontrol', 'fpstatus' and 'fpiaddr'.
 
+     Note that, despite the fact that this feature's name says
+     'coldfire', it is used to describe any floating point registers.
+     The size of the registers must match the main m68k flavor; so, for
+     example, if the primary feature is reported as 'coldfire', then
+     64-bit floating point registers are required.
+
 
 File: gdb.info,  Node: NDS32 Features,  Next: Nios II Features,  Prev: M68K Features,  Up: Standard Target Features
 
@@ -3952,6 +6436,14 @@ floating point hardware, but can be move
 target has the floating point control registers, but no other floating
 point hardware.
 
+   The 'org.gnu.gdb.riscv.vector' feature is optional.  If present, it
+should contain registers 'v0' through 'v31', all of which must be the
+same size.  These requirements are based on the v0.10 draft vector
+extension, as the vector extension is not yet final.  In the event that
+the register set of the vector extension changes for the final
+specification, the requirements given here could change for future
+releases of GDB.
+
 
 File: gdb.info,  Node: RX Features,  Next: S/390 and System z Features,  Prev: RISC-V Features,  Up: Standard Target Features
 
@@ -4058,10 +6550,6 @@ File: gdb.info,  Node: Operating System
 Appendix H Operating System Information
 ***************************************
 
-* Menu:
-
-* Process list::
-
 Users of GDB often wish to obtain information about the state of the
 operating system running on the target--for example the list of
 processes, or the list of open files.  This section describes the
@@ -4074,6 +6562,10 @@ remote protocol, using 'qXfer' requests
 The object name in the request should be 'osdata', and the ANNEX
 identifies the data to be fetched.
 
+* Menu:
+
+* Process list::
+
 
 File: gdb.info,  Node: Process list,  Up: Operating System Information
 
@@ -4467,7 +6959,7 @@ PROGRAM filename.
      Display the value of an expression.
 
 'c'
-     Continue running your program (after stopping, e.g.  at a
+     Continue running your program (after stopping, e.g. at a
      breakpoint).
 
 'next'
@@ -4541,11 +7033,13 @@ used.
      Add DIRECTORY to the path to search for source files.
 
 '-nh'
-     Do not execute commands from '~/.gdbinit'.
+     Do not execute commands from '~/.config/gdb/gdbinit', '~/.gdbinit',
+     '~/.config/gdb/gdbearlyinit', or '~/.gdbearlyinit'
 
 '-nx'
 '-n'
-     Do not execute commands from any '.gdbinit' initialization files.
+     Do not execute commands from any '.gdbinit' or '.gdbearlyinit'
+     initialization files.
 
 '-quiet'
 '-q'
@@ -4683,8 +7177,8 @@ using the 'target remote' command, other
 looks something like 'Connection refused'.
 
    'gdbserver' can also debug multiple inferiors at once, described in
-*note Inferiors and Programs::.  In such case use the 'extended-remote'
-GDB command variant:
+*note Inferiors Connections and Programs::.  In such case use the
+'extended-remote' GDB command variant:
 
      (gdb) target extended-remote the-target:2345
 
@@ -4817,6 +7311,8 @@ gdbinit
 
 
 
+~/.config/gdb/gdbinit
+
 ~/.gdbinit
 
 ./.gdbinit
@@ -4836,11 +7332,11 @@ described in *note Sequences::.
      '-n', as long as they have a recognized file extension.  See more
      in *note System-wide configuration::.
 
-'~/.gdbinit'
+'~/.config/gdb/gdbinit or ~/.gdbinit'
      User initialization file.  It is executed unless user specified GDB
      options '-nx', '-n' or '-nh'.
 
-'./.gdbinit'
+'.gdbinit'
      Initialization file for current directory.  It may need to be
      enabled with GDB security command 'set auto-load local-gdbinit'.
      See more in *note Init File in the Current Directory::.
@@ -5588,2463 +8084,3 @@ applications with the library.  If this
 GNU Lesser General Public License instead of this License.  But first,
 please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
 
-
-File: gdb.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Copying,  Up: Top
-
-Appendix M GNU Free Documentation License
-*****************************************
-
-                     Version 1.3, 3 November 2008
-
-     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
-     <http://fsf.org/>
-
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-  0. PREAMBLE
-
-     The purpose of this License is to make a manual, textbook, or other
-     functional and useful document "free" in the sense of freedom: to
-     assure everyone the effective freedom to copy and redistribute it,
-     with or without modifying it, either commercially or
-     noncommercially.  Secondarily, this License preserves for the
-     author and publisher a way to get credit for their work, while not
-     being considered responsible for modifications made by others.
-
-     This License is a kind of "copyleft", which means that derivative
-     works of the document must themselves be free in the same sense.
-     It complements the GNU General Public License, which is a copyleft
-     license designed for free software.
-
-     We have designed this License in order to use it for manuals for
-     free software, because free software needs free documentation: a
-     free program should come with manuals providing the same freedoms
-     that the software does.  But this License is not limited to
-     software manuals; it can be used for any textual work, regardless
-     of subject matter or whether it is published as a printed book.  We
-     recommend this License principally for works whose purpose is
-     instruction or reference.
-
-  1. APPLICABILITY AND DEFINITIONS
-
-     This License applies to any manual or other work, in any medium,
-     that contains a notice placed by the copyright holder saying it can
-     be distributed under the terms of this License.  Such a notice
-     grants a world-wide, royalty-free license, unlimited in duration,
-     to use that work under the conditions stated herein.  The
-     "Document", below, refers to any such manual or work.  Any member
-     of the public is a licensee, and is addressed as "you".  You accept
-     the license if you copy, modify or distribute the work in a way
-     requiring permission under copyright law.
-
-     A "Modified Version" of the Document means any work containing the
-     Document or a portion of it, either copied verbatim, or with
-     modifications and/or translated into another language.
-
-     A "Secondary Section" is a named appendix or a front-matter section
-     of the Document that deals exclusively with the relationship of the
-     publishers or authors of the Document to the Document's overall
-     subject (or to related matters) and contains nothing that could
-     fall directly within that overall subject.  (Thus, if the Document
-     is in part a textbook of mathematics, a Secondary Section may not
-     explain any mathematics.)  The relationship could be a matter of
-     historical connection with the subject or with related matters, or
-     of legal, commercial, philosophical, ethical or political position
-     regarding them.
-
-     The "Invariant Sections" are certain Secondary Sections whose
-     titles are designated, as being those of Invariant Sections, in the
-     notice that says that the Document is released under this License.
-     If a section does not fit the above definition of Secondary then it
-     is not allowed to be designated as Invariant.  The Document may
-     contain zero Invariant Sections.  If the Document does not identify
-     any Invariant Sections then there are none.
-
-     The "Cover Texts" are certain short passages of text that are
-     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
-     that says that the Document is released under this License.  A
-     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
-     be at most 25 words.
-
-     A "Transparent" copy of the Document means a machine-readable copy,
-     represented in a format whose specification is available to the
-     general public, that is suitable for revising the document
-     straightforwardly with generic text editors or (for images composed
-     of pixels) generic paint programs or (for drawings) some widely
-     available drawing editor, and that is suitable for input to text
-     formatters or for automatic translation to a variety of formats
-     suitable for input to text formatters.  A copy made in an otherwise
-     Transparent file format whose markup, or absence of markup, has
-     been arranged to thwart or discourage subsequent modification by
-     readers is not Transparent.  An image format is not Transparent if
-     used for any substantial amount of text.  A copy that is not
-     "Transparent" is called "Opaque".
-
-     Examples of suitable formats for Transparent copies include plain
-     ASCII without markup, Texinfo input format, LaTeX input format,
-     SGML or XML using a publicly available DTD, and standard-conforming
-     simple HTML, PostScript or PDF designed for human modification.
-     Examples of transparent image formats include PNG, XCF and JPG.
-     Opaque formats include proprietary formats that can be read and
-     edited only by proprietary word processors, SGML or XML for which
-     the DTD and/or processing tools are not generally available, and
-     the machine-generated HTML, PostScript or PDF produced by some word
-     processors for output purposes only.
-
-     The "Title Page" means, for a printed book, the title page itself,
-     plus such following pages as are needed to hold, legibly, the
-     material this License requires to appear in the title page.  For
-     works in formats which do not have any title page as such, "Title
-     Page" means the text near the most prominent appearance of the
-     work's title, preceding the beginning of the body of the text.
-
-     The "publisher" means any person or entity that distributes copies
-     of the Document to the public.
-
-     A section "Entitled XYZ" means a named subunit of the Document
-     whose title either is precisely XYZ or contains XYZ in parentheses
-     following text that translates XYZ in another language.  (Here XYZ
-     stands for a specific section name mentioned below, such as
-     "Acknowledgements", "Dedications", "Endorsements", or "History".)
-     To "Preserve the Title" of such a section when you modify the
-     Document means that it remains a section "Entitled XYZ" according
-     to this definition.
-
-     The Document may include Warranty Disclaimers next to the notice
-     which states that this License applies to the Document.  These
-     Warranty Disclaimers are considered to be included by reference in
-     this License, but only as regards disclaiming warranties: any other
-     implication that these Warranty Disclaimers may have is void and
-     has no effect on the meaning of this License.
-
-  2. VERBATIM COPYING
-
-     You may copy and distribute the Document in any medium, either
-     commercially or noncommercially, provided that this License, the
-     copyright notices, and the license notice saying this License
-     applies to the Document are reproduced in all copies, and that you
-     add no other conditions whatsoever to those of this License.  You
-     may not use technical measures to obstruct or control the reading
-     or further copying of the copies you make or distribute.  However,
-     you may accept compensation in exchange for copies.  If you
-     distribute a large enough number of copies you must also follow the
-     conditions in section 3.
-
-     You may also lend copies, under the same conditions stated above,
-     and you may publicly display copies.
-
-  3. COPYING IN QUANTITY
-
-     If you publish printed copies (or copies in media that commonly
-     have printed covers) of the Document, numbering more than 100, and
-     the Document's license notice requires Cover Texts, you must
-     enclose the copies in covers that carry, clearly and legibly, all
-     these Cover Texts: Front-Cover Texts on the front cover, and
-     Back-Cover Texts on the back cover.  Both covers must also clearly
-     and legibly identify you as the publisher of these copies.  The
-     front cover must present the full title with all words of the title
-     equally prominent and visible.  You may add other material on the
-     covers in addition.  Copying with changes limited to the covers, as
-     long as they preserve the title of the Document and satisfy these
-     conditions, can be treated as verbatim copying in other respects.
-
-     If the required texts for either cover are too voluminous to fit
-     legibly, you should put the first ones listed (as many as fit
-     reasonably) on the actual cover, and continue the rest onto
-     adjacent pages.
-
-     If you publish or distribute Opaque copies of the Document
-     numbering more than 100, you must either include a machine-readable
-     Transparent copy along with each Opaque copy, or state in or with
-     each Opaque copy a computer-network location from which the general
-     network-using public has access to download using public-standard
-     network protocols a complete Transparent copy of the Document, free
-     of added material.  If you use the latter option, you must take
-     reasonably prudent steps, when you begin distribution of Opaque
-     copies in quantity, to ensure that this Transparent copy will
-     remain thus accessible at the stated location until at least one
-     year after the last time you distribute an Opaque copy (directly or
-     through your agents or retailers) of that edition to the public.
-
-     It is requested, but not required, that you contact the authors of
-     the Document well before redistributing any large number of copies,
-     to give them a chance to provide you with an updated version of the
-     Document.
-
-  4. MODIFICATIONS
-
-     You may copy and distribute a Modified Version of the Document
-     under the conditions of sections 2 and 3 above, provided that you
-     release the Modified Version under precisely this License, with the
-     Modified Version filling the role of the Document, thus licensing
-     distribution and modification of the Modified Version to whoever
-     possesses a copy of it.  In addition, you must do these things in
-     the Modified Version:
-
-       A. Use in the Title Page (and on the covers, if any) a title
-          distinct from that of the Document, and from those of previous
-          versions (which should, if there were any, be listed in the
-          History section of the Document).  You may use the same title
-          as a previous version if the original publisher of that
-          version gives permission.
-
-       B. List on the Title Page, as authors, one or more persons or
-          entities responsible for authorship of the modifications in
-          the Modified Version, together with at least five of the
-          principal authors of the Document (all of its principal
-          authors, if it has fewer than five), unless they release you
-          from this requirement.
-
-       C. State on the Title page the name of the publisher of the
-          Modified Version, as the publisher.
-
-       D. Preserve all the copyright notices of the Document.
-
-       E. Add an appropriate copyright notice for your modifications
-          adjacent to the other copyright notices.
-
-       F. Include, immediately after the copyright notices, a license
-          notice giving the public permission to use the Modified
-          Version under the terms of this License, in the form shown in
-          the Addendum below.
-
-       G. Preserve in that license notice the full lists of Invariant
-          Sections and required Cover Texts given in the Document's
-          license notice.
-
-       H. Include an unaltered copy of this License.
-
-       I. Preserve the section Entitled "History", Preserve its Title,
-          and add to it an item stating at least the title, year, new
-          authors, and publisher of the Modified Version as given on the
-          Title Page.  If there is no section Entitled "History" in the
-          Document, create one stating the title, year, authors, and
-          publisher of the Document as given on its Title Page, then add
-          an item describing the Modified Version as stated in the
-          previous sentence.
-
-       J. Preserve the network location, if any, given in the Document
-          for public access to a Transparent copy of the Document, and
-          likewise the network locations given in the Document for
-          previous versions it was based on.  These may be placed in the
-          "History" section.  You may omit a network location for a work
-          that was published at least four years before the Document
-          itself, or if the original publisher of the version it refers
-          to gives permission.
-
-       K. For any section Entitled "Acknowledgements" or "Dedications",
-          Preserve the Title of the section, and preserve in the section
-          all the substance and tone of each of the contributor
-          acknowledgements and/or dedications given therein.
-
-       L. Preserve all the Invariant Sections of the Document, unaltered
-          in their text and in their titles.  Section numbers or the
-          equivalent are not considered part of the section titles.
-
-       M. Delete any section Entitled "Endorsements".  Such a section
-          may not be included in the Modified Version.
-
-       N. Do not retitle any existing section to be Entitled
-          "Endorsements" or to conflict in title with any Invariant
-          Section.
-
-       O. Preserve any Warranty Disclaimers.
-
-     If the Modified Version includes new front-matter sections or
-     appendices that qualify as Secondary Sections and contain no
-     material copied from the Document, you may at your option designate
-     some or all of these sections as invariant.  To do this, add their
-     titles to the list of Invariant Sections in the Modified Version's
-     license notice.  These titles must be distinct from any other
-     section titles.
-
-     You may add a section Entitled "Endorsements", provided it contains
-     nothing but endorsements of your Modified Version by various
-     parties--for example, statements of peer review or that the text
-     has been approved by an organization as the authoritative
-     definition of a standard.
-
-     You may add a passage of up to five words as a Front-Cover Text,
-     and a passage of up to 25 words as a Back-Cover Text, to the end of
-     the list of Cover Texts in the Modified Version.  Only one passage
-     of Front-Cover Text and one of Back-Cover Text may be added by (or
-     through arrangements made by) any one entity.  If the Document
-     already includes a cover text for the same cover, previously added
-     by you or by arrangement made by the same entity you are acting on
-     behalf of, you may not add another; but you may replace the old
-     one, on explicit permission from the previous publisher that added
-     the old one.
-
-     The author(s) and publisher(s) of the Document do not by this
-     License give permission to use their names for publicity for or to
-     assert or imply endorsement of any Modified Version.
-
-  5. COMBINING DOCUMENTS
-
-     You may combine the Document with other documents released under
-     this License, under the terms defined in section 4 above for
-     modified versions, provided that you include in the combination all
-     of the Invariant Sections of all of the original documents,
-     unmodified, and list them all as Invariant Sections of your
-     combined work in its license notice, and that you preserve all
-     their Warranty Disclaimers.
-
-     The combined work need only contain one copy of this License, and
-     multiple identical Invariant Sections may be replaced with a single
-     copy.  If there are multiple Invariant Sections with the same name
-     but different contents, make the title of each such section unique
-     by adding at the end of it, in parentheses, the name of the
-     original author or publisher of that section if known, or else a
-     unique number.  Make the same adjustment to the section titles in
-     the list of Invariant Sections in the license notice of the
-     combined work.
-
-     In the combination, you must combine any sections Entitled
-     "History" in the various original documents, forming one section
-     Entitled "History"; likewise combine any sections Entitled
-     "Acknowledgements", and any sections Entitled "Dedications".  You
-     must delete all sections Entitled "Endorsements."
-
-  6. COLLECTIONS OF DOCUMENTS
-
-     You may make a collection consisting of the Document and other
-     documents released under this License, and replace the individual
-     copies of this License in the various documents with a single copy
-     that is included in the collection, provided that you follow the
-     rules of this License for verbatim copying of each of the documents
-     in all other respects.
-
-     You may extract a single document from such a collection, and
-     distribute it individually under this License, provided you insert
-     a copy of this License into the extracted document, and follow this
-     License in all other respects regarding verbatim copying of that
-     document.
-
-  7. AGGREGATION WITH INDEPENDENT WORKS
-
-     A compilation of the Document or its derivatives with other
-     separate and independent documents or works, in or on a volume of a
-     storage or distribution medium, is called an "aggregate" if the
-     copyright resulting from the compilation is not used to limit the
-     legal rights of the compilation's users beyond what the individual
-     works permit.  When the Document is included in an aggregate, this
-     License does not apply to the other works in the aggregate which
-     are not themselves derivative works of the Document.
-
-     If the Cover Text requirement of section 3 is applicable to these
-     copies of the Document, then if the Document is less than one half
-     of the entire aggregate, the Document's Cover Texts may be placed
-     on covers that bracket the Document within the aggregate, or the
-     electronic equivalent of covers if the Document is in electronic
-     form.  Otherwise they must appear on printed covers that bracket
-     the whole aggregate.
-
-  8. TRANSLATION
-
-     Translation is considered a kind of modification, so you may
-     distribute translations of the Document under the terms of section
-     4.  Replacing Invariant Sections with translations requires special
-     permission from their copyright holders, but you may include
-     translations of some or all Invariant Sections in addition to the
-     original versions of these Invariant Sections.  You may include a
-     translation of this License, and all the license notices in the
-     Document, and any Warranty Disclaimers, provided that you also
-     include the original English version of this License and the
-     original versions of those notices and disclaimers.  In case of a
-     disagreement between the translation and the original version of
-     this License or a notice or disclaimer, the original version will
-     prevail.
-
-     If a section in the Document is Entitled "Acknowledgements",
-     "Dedications", or "History", the requirement (section 4) to
-     Preserve its Title (section 1) will typically require changing the
-     actual title.
-
-  9. TERMINATION
-
-     You may not copy, modify, sublicense, or distribute the Document
-     except as expressly provided under this License.  Any attempt
-     otherwise to copy, modify, sublicense, or distribute it is void,
-     and will automatically terminate your rights under this License.
-
-     However, if you cease all violation of this License, then your
-     license from a particular copyright holder is reinstated (a)
-     provisionally, unless and until the copyright holder explicitly and
-     finally terminates your license, and (b) permanently, if the
-     copyright holder fails to notify you of the violation by some
-     reasonable means prior to 60 days after the cessation.
-
-     Moreover, your license from a particular copyright holder is
-     reinstated permanently if the copyright holder notifies you of the
-     violation by some reasonable means, this is the first time you have
-     received notice of violation of this License (for any work) from
-     that copyright holder, and you cure the violation prior to 30 days
-     after your receipt of the notice.
-
-     Termination of your rights under this section does not terminate
-     the licenses of parties who have received copies or rights from you
-     under this License.  If your rights have been terminated and not
-     permanently reinstated, receipt of a copy of some or all of the
-     same material does not give you any rights to use it.
-
-  10. FUTURE REVISIONS OF THIS LICENSE
-
-     The Free Software Foundation may publish new, revised versions of
-     the GNU Free Documentation License from time to time.  Such new
-     versions will be similar in spirit to the present version, but may
-     differ in detail to address new problems or concerns.  See
-     <http://www.gnu.org/copyleft/>.
-
-     Each version of the License is given a distinguishing version
-     number.  If the Document specifies that a particular numbered
-     version of this License "or any later version" applies to it, you
-     have the option of following the terms and conditions either of
-     that specified version or of any later version that has been
-     published (not as a draft) by the Free Software Foundation.  If the
-     Document does not specify a version number of this License, you may
-     choose any version ever published (not as a draft) by the Free
-     Software Foundation.  If the Document specifies that a proxy can
-     decide which future versions of this License can be used, that
-     proxy's public statement of acceptance of a version permanently
-     authorizes you to choose that version for the Document.
-
-  11. RELICENSING
-
-     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
-     World Wide Web server that publishes copyrightable works and also
-     provides prominent facilities for anybody to edit those works.  A
-     public wiki that anybody can edit is an example of such a server.
-     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
-     site means any set of copyrightable works thus published on the MMC
-     site.
-
-     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
-     license published by Creative Commons Corporation, a not-for-profit
-     corporation with a principal place of business in San Francisco,
-     California, as well as future copyleft versions of that license
-     published by that same organization.
-
-     "Incorporate" means to publish or republish a Document, in whole or
-     in part, as part of another Document.
-
-     An MMC is "eligible for relicensing" if it is licensed under this
-     License, and if all works that were first published under this
-     License somewhere other than this MMC, and subsequently
-     incorporated in whole or in part into the MMC, (1) had no cover
-     texts or invariant sections, and (2) were thus incorporated prior
-     to November 1, 2008.
-
-     The operator of an MMC Site may republish an MMC contained in the
-     site under CC-BY-SA on the same site at any time before August 1,
-     2009, provided the MMC is eligible for relicensing.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
-       Copyright (C)  YEAR  YOUR NAME.
-       Permission is granted to copy, distribute and/or modify this document
-       under the terms of the GNU Free Documentation License, Version 1.3
-       or any later version published by the Free Software Foundation;
-       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-       Texts.  A copy of the license is included in the section entitled ``GNU
-       Free Documentation License''.
-
-   If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts."  line with this:
-
-         with the Invariant Sections being LIST THEIR TITLES, with
-         the Front-Cover Texts being LIST, and with the Back-Cover Texts
-         being LIST.
-
-   If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-   If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of free
-software license, such as the GNU General Public License, to permit
-their use in free software.
-
-
-File: gdb.info,  Node: Concept Index,  Next: Command and Variable Index,  Prev: GNU Free Documentation License,  Up: Top
-
-Concept Index
-*************
-
-[index]
-* Menu:
-
-* ! packet:                              Packets.            (line   49)
-* "No symbol "foo" in current context":  Variables.          (line  122)
-* # in Modula-2:                         GDB/M2.             (line   18)
-* $:                                     Value History.      (line   13)
-* $$:                                    Value History.      (line   13)
-* $_ and info breakpoints:               Set Breaks.         (line  133)
-* $_ and info line:                      Machine Code.       (line   34)
-* $_, $__, and value history:            Memory.             (line  119)
-* &, background execution of commands:   Background Execution.
-                                                             (line   16)
-* --annotate:                            Mode Options.       (line  132)
-* --args:                                Mode Options.       (line  145)
-* --attach, gdbserver option:            Server.             (line   86)
-* --batch:                               Mode Options.       (line   55)
-* --batch-silent:                        Mode Options.       (line   73)
-* --baud:                                Mode Options.       (line  151)
-* --cd:                                  Mode Options.       (line  112)
-* --command:                             File Options.       (line   51)
-* --configuration:                       Mode Options.       (line  195)
-* --core:                                File Options.       (line   43)
-* --data-directory:                      Mode Options.       (line  117)
-* --debug, gdbserver option:             Server.             (line  146)
-* --debug-file, gdbserver option:        Server.             (line  148)
-* --debug-format, gdbserver option:      Server.             (line  153)
-* --directory:                           File Options.       (line   77)
-* --eval-command:                        File Options.       (line   57)
-* --exec:                                File Options.       (line   35)
-* --fullname:                            Mode Options.       (line  122)
-* --init-command:                        File Options.       (line   67)
-* --init-eval-command:                   File Options.       (line   72)
-* --interpreter:                         Mode Options.       (line  170)
-* --multi, gdbserver option:             Connecting.         (line   45)
-* --nh:                                  Mode Options.       (line   45)
-* --nowindows:                           Mode Options.       (line  102)
-* --nx:                                  Mode Options.       (line   11)
-* --once, gdbserver option:              Server.             (line  126)
-* --pid:                                 File Options.       (line   47)
-* --quiet:                               Mode Options.       (line   51)
-* --readnever, command-line option:      File Options.       (line   87)
-* --readnow:                             File Options.       (line   81)
-* --remote-debug, gdbserver option:      Server.             (line  147)
-* --return-child-result:                 Mode Options.       (line   85)
-* --se:                                  File Options.       (line   39)
-* --selftest:                            Server.             (line  187)
-* --silent:                              Mode Options.       (line   51)
-* --statistics:                          Mode Options.       (line  187)
-* --symbols:                             File Options.       (line   31)
-* --tty:                                 Mode Options.       (line  160)
-* --tui:                                 Mode Options.       (line  163)
-* --version:                             Mode Options.       (line  191)
-* --windows:                             Mode Options.       (line  108)
-* --with-gdb-datadir:                    Data Files.         (line   19)
-* --with-relocated-sources:              Source Path.        (line  149)
-* --with-sysroot:                        Files.              (line  453)
-* --wrapper, gdbserver option:           Server.             (line  166)
-* --write:                               Mode Options.       (line  182)
-* -b:                                    Mode Options.       (line  151)
-* -c:                                    File Options.       (line   43)
-* -d:                                    File Options.       (line   77)
-* -D:                                    Mode Options.       (line  117)
-* -e:                                    File Options.       (line   35)
-* -ex:                                   File Options.       (line   57)
-* -f:                                    Mode Options.       (line  122)
-* -iex:                                  File Options.       (line   72)
-* -info-gdb-mi-command:                  GDB/MI Support Commands.
-                                                             (line   14)
-* -ix:                                   File Options.       (line   67)
-* -l:                                    Mode Options.       (line  155)
-* -n:                                    Mode Options.       (line   11)
-* -nw:                                   Mode Options.       (line  102)
-* -p:                                    File Options.       (line   47)
-* -q:                                    Mode Options.       (line   51)
-* -r:                                    File Options.       (line   81)
-* -readnever, option for symbol-file command: Files.         (line  101)
-* -s:                                    File Options.       (line   31)
-* -t:                                    Mode Options.       (line  160)
-* -w:                                    Mode Options.       (line  108)
-* -x:                                    File Options.       (line   51)
-* ., Modula-2 scope operator:            M2 Scope.           (line    6)
-* .build-id directory:                   Separate Debug Files.
-                                                             (line    6)
-* .debug subdirectories:                 Separate Debug Files.
-                                                             (line    6)
-* .debug_gdb_scripts section:            dotdebug_gdb_scripts section.
-                                                             (line    6)
-* .gdbinit:                              Startup.            (line   69)
-* .gdb_index section:                    Index Files.        (line    6)
-* .gdb_index section format:             Index Section Format.
-                                                             (line    6)
-* .gnu_debugdata section:                MiniDebugInfo.      (line    6)
-* .gnu_debuglink sections:               Separate Debug Files.
-                                                             (line   79)
-* .note.gnu.build-id sections:           Separate Debug Files.
-                                                             (line   95)
-* .o files, reading symbols from:        Files.              (line  146)
-* /proc:                                 Process Information.
-                                                             (line    6)
-* <architecture>:                        Target Description Format.
-                                                             (line   72)
-* <compatible>:                          Target Description Format.
-                                                             (line   95)
-* <feature>:                             Target Description Format.
-                                                             (line  119)
-* <flags>:                               Target Description Format.
-                                                             (line  163)
-* <not saved> values:                    Registers.          (line  106)
-* <osabi>:                               Target Description Format.
-                                                             (line   82)
-* <reg>:                                 Target Description Format.
-                                                             (line  222)
-* <struct>:                              Target Description Format.
-                                                             (line  163)
-* <union>:                               Target Description Format.
-                                                             (line  153)
-* <vector>:                              Target Description Format.
-                                                             (line  146)
-* ? packet:                              Packets.            (line   58)
-* _NSPrintForDebugger, and printing Objective-C objects: The Print Command with Objective-C.
-                                                             (line   11)
-* {TYPE}:                                Expressions.        (line   41)
-* A packet:                              Packets.            (line   65)
-* AArch64 Pointer Authentication.:       AArch64.            (line   34)
-* AArch64 support:                       AArch64.            (line    6)
-* AArch64 SVE.:                          AArch64.            (line   19)
-* abbreviation:                          Command Syntax.     (line   13)
-* acknowledgment, for GDB remote:        Packet Acknowledgment.
-                                                             (line    6)
-* active targets:                        Active Targets.     (line    6)
-* Ada:                                   Ada.                (line    6)
-* Ada exception catching:                Set Catchpoints.    (line   66)
-* Ada exception handlers catching:       Set Catchpoints.    (line   92)
-* Ada mode, general:                     Ada Mode Intro.     (line    6)
-* Ada settings:                          Ada Settings.       (line    6)
-* Ada task switching:                    Ada Tasks.          (line  115)
-* Ada tasking and core file debugging:   Ada Tasks and Core Files.
-                                                             (line    6)
-* Ada, deviations from:                  Additions to Ada.   (line    6)
-* Ada, omissions from:                   Omissions from Ada. (line    6)
-* Ada, problems:                         Ada Glitches.       (line    6)
-* Ada, tasking:                          Ada Tasks.          (line    6)
-* add new commands for external monitor: Connecting.         (line  272)
-* address locations:                     Address Locations.  (line    6)
-* address of a symbol:                   Symbols.            (line   85)
-* address size for remote targets:       Remote Configuration.
-                                                             (line   12)
-* addressable memory unit:               Memory.             (line  133)
-* aggregates (Ada):                      Omissions from Ada. (line   44)
-* AIX shared library debugging:          Debugging Output.   (line   30)
-* AIX threads:                           Debugging Output.   (line   36)
-* aliases for commands:                  Aliases.            (line    6)
-* alignment of remote memory accesses:   Packets.            (line  247)
-* all-stop mode:                         All-Stop Mode.      (line    6)
-* Alpha stack:                           MIPS.               (line    6)
-* ambiguous expressions:                 Ambiguous Expressions.
-                                                             (line    6)
-* annotations:                           Annotations Overview.
-                                                             (line    6)
-* annotations for errors, warnings and interrupts: Errors.   (line    6)
-* annotations for invalidation messages: Invalidation.       (line    6)
-* annotations for prompts:               Prompting.          (line    6)
-* annotations for running programs:      Annotations for Running.
-                                                             (line    6)
-* annotations for source display:        Source Annotations. (line    6)
-* append data to a file:                 Dump/Restore Files. (line    6)
-* Application Data Integrity:            Sparc64.            (line    5)
-* apply a command to all frames (ignoring errors and empty output): Frame Apply.
-                                                             (line   96)
-* apply a command to all frames of all threads (ignoring errors and empty output): Threads.
-                                                             (line  229)
-* apply command to all threads (ignoring errors and empty output): Threads.
-                                                             (line  222)
-* apply command to several frames:       Frame Apply.        (line    6)
-* apply command to several threads:      Threads.            (line  187)
-* ARC EM:                                ARC.                (line    6)
-* ARC HS:                                ARC.                (line    6)
-* ARC specific commands:                 ARC.                (line    6)
-* ARC600:                                ARC.                (line    6)
-* ARC700:                                ARC.                (line    6)
-* architecture debugging info:           Debugging Output.   (line   23)
-* argument count in user-defined commands: Define.           (line   25)
-* arguments (to your program):           Arguments.          (line    6)
-* arguments, to gdbserver:               Server.             (line   34)
-* arguments, to user-defined commands:   Define.             (line    6)
-* ARM 32-bit mode:                       ARM.                (line   16)
-* ARM AArch64:                           Debugging Output.   (line   17)
-* array aggregates (Ada):                Omissions from Ada. (line   44)
-* arrays:                                Arrays.             (line    6)
-* arrays in expressions:                 Expressions.        (line   13)
-* artificial array:                      Arrays.             (line    6)
-* assembly instructions:                 Machine Code.       (line   43)
-* assignment:                            Assignment.         (line    6)
-* async output in GDB/MI:                GDB/MI Output Syntax.
-                                                             (line   98)
-* async records in GDB/MI:               GDB/MI Async Records.
-                                                             (line    6)
-* asynchronous execution:                Background Execution.
-                                                             (line    6)
-* asynchronous execution, and process record and replay: Process Record and Replay.
-                                                             (line  101)
-* AT&T disassembly flavor:               Machine Code.       (line  237)
-* attach:                                Attach.             (line    6)
-* attach to a program, gdbserver:        Server.             (line   86)
-* auto-loading:                          Auto-loading.       (line    6)
-* auto-loading extensions:               Auto-loading extensions.
-                                                             (line    6)
-* auto-loading init file in the current directory: Init File in the Current Directory.
-                                                             (line    6)
-* auto-loading libthread_db.so.1:        libthread_db.so.1 file.
-                                                             (line    6)
-* auto-loading safe-path:                Auto-loading safe path.
-                                                             (line    6)
-* auto-loading verbose mode:             Auto-loading verbose mode.
-                                                             (line    6)
-* auto-retry, for remote TCP target:     Remote Configuration.
-                                                             (line  131)
-* automatic display:                     Auto Display.       (line    6)
-* automatic hardware breakpoints:        Set Breaks.         (line  296)
-* automatic overlay debugging:           Automatic Overlay Debugging.
-                                                             (line    6)
-* automatic symbol index cache:          Index Files.        (line   75)
-* automatic thread selection:            All-Stop Mode.      (line   28)
-* auxiliary vector:                      OS Information.     (line    9)
-* AVR:                                   AVR.                (line    6)
-* b packet:                              Packets.            (line   76)
-* B packet:                              Packets.            (line   91)
-* background execution:                  Background Execution.
-                                                             (line    6)
-* backtrace beyond main function:        Backtrace.          (line  155)
-* backtrace limit:                       Backtrace.          (line  192)
-* base name differences:                 Files.              (line  520)
-* baud rate for remote targets:          Remote Configuration.
-                                                             (line   21)
-* bc packet:                             Packets.            (line   96)
-* bcache statistics:                     Maintenance Commands.
-                                                             (line  328)
-* bits in remote address:                Remote Configuration.
-                                                             (line   12)
-* blocks in guile:                       Blocks In Guile.    (line    6)
-* blocks in python:                      Blocks In Python.   (line    6)
-* bookmark:                              Checkpoint/Restart. (line    6)
-* boundary violations, Intel MPX:        Signals.            (line  197)
-* branch trace configuration format:     Branch Trace Configuration Format.
-                                                             (line    6)
-* branch trace format:                   Branch Trace Format.
-                                                             (line    6)
-* branch trace store:                    Process Record and Replay.
-                                                             (line   70)
-* break in overloaded functions:         Debugging C Plus Plus.
-                                                             (line    9)
-* break on a system call.:               Set Catchpoints.    (line  120)
-* break on fork/exec:                    Set Catchpoints.    (line  116)
-* BREAK signal instead of Ctrl-C:        Remote Configuration.
-                                                             (line   36)
-* breakpoint address adjusted:           Breakpoint-related Warnings.
-                                                             (line    6)
-* breakpoint at static probe point:      Linespec Locations. (line   65)
-* breakpoint commands:                   Break Commands.     (line    6)
-* breakpoint commands for GDB/MI:        GDB/MI Breakpoint Commands.
-                                                             (line    6)
-* breakpoint commands, in remote protocol: General Query Packets.
-                                                             (line  983)
-* breakpoint conditions:                 Conditions.         (line    6)
-* breakpoint kinds, ARM:                 ARM Breakpoint Kinds.
-                                                             (line    6)
-* breakpoint kinds, MIPS:                MIPS Breakpoint Kinds.
-                                                             (line    6)
-* breakpoint lists:                      Breakpoints.        (line   45)
-* breakpoint numbers:                    Breakpoints.        (line   38)
-* breakpoint on events:                  Breakpoints.        (line   30)
-* breakpoint on memory address:          Breakpoints.        (line   17)
-* breakpoint on variable modification:   Breakpoints.        (line   17)
-* breakpoint ranges:                     Breakpoints.        (line   45)
-* breakpoint subroutine, remote:         Stub Contents.      (line   31)
-* breakpointing Ada elaboration code:    Stopping Before Main Program.
-                                                             (line    6)
-* breakpoints:                           Breakpoints.        (line    6)
-* breakpoints and tasks, in Ada:         Ada Tasks.          (line  135)
-* breakpoints and threads:               Thread-Specific Breakpoints.
-                                                             (line   10)
-* breakpoints at functions matching a regexp: Set Breaks.    (line   90)
-* breakpoints in guile:                  Breakpoints In Guile.
-                                                             (line    6)
-* breakpoints in overlays:               Overlay Commands.   (line   91)
-* breakpoints in python:                 Breakpoints In Python.
-                                                             (line    6)
-* breakpoints, multiple locations:       Set Breaks.         (line  200)
-* bs packet:                             Packets.            (line  102)
-* bug criteria:                          Bug Criteria.       (line    6)
-* bug reports:                           Bug Reporting.      (line    6)
-* bugs in GDB:                           GDB Bugs.           (line    6)
-* build ID sections:                     Separate Debug Files.
-                                                             (line   95)
-* build ID, and separate debugging files: Separate Debug Files.
-                                                             (line    6)
-* building GDB, requirements for:        Requirements.       (line    6)
-* built-in simulator target:             Target Commands.    (line   73)
-* builtin Go functions:                  Go.                 (line   31)
-* builtin Go types:                      Go.                 (line   28)
-* C and C++:                             C.                  (line    6)
-* C and C++ checks:                      C Checks.           (line    6)
-* C and C++ constants:                   C Constants.        (line    6)
-* C and C++ defaults:                    C Defaults.         (line    6)
-* C and C++ operators:                   C Operators.        (line    6)
-* c packet:                              Packets.            (line  109)
-* C packet:                              Packets.            (line  118)
-* C++:                                   C.                  (line   10)
-* C++ compilers:                         C Plus Plus Expressions.
-                                                             (line    8)
-* C++ demangling:                        Debugging C Plus Plus.
-                                                             (line   36)
-* C++ exception handling:                Debugging C Plus Plus.
-                                                             (line   20)
-* C++ overload debugging info:           Debugging Output.   (line  147)
-* C++ scope resolution:                  Variables.          (line   90)
-* C++ symbol decoding style:             Print Settings.     (line  529)
-* C++ symbol display:                    Debugging C Plus Plus.
-                                                             (line   40)
-* caching data of targets:               Caching Target Data.
-                                                             (line    6)
-* caching of bfd objects:                File Caching.       (line    6)
-* caching of opened files:               File Caching.       (line    6)
-* call dummy stack unwinding:            Calling.            (line   36)
-* call dummy stack unwinding on unhandled exception.: Calling.
-                                                             (line   47)
-* call overloaded functions:             C Plus Plus Expressions.
-                                                             (line   26)
-* call stack:                            Stack.              (line    9)
-* call stack traces:                     Backtrace.          (line    6)
-* call-clobbered registers:              Registers.          (line  106)
-* caller-saved registers:                Registers.          (line  106)
-* calling functions:                     Calling.            (line    6)
-* calling functions in the program, disabling: Calling.      (line   59)
-* calling make:                          Shell Commands.     (line   21)
-* case sensitivity in symbol names:      Symbols.            (line   27)
-* case-insensitive symbol names:         Symbols.            (line   27)
-* casts, in expressions:                 Expressions.        (line   26)
-* casts, to view memory:                 Expressions.        (line   41)
-* catch Ada exceptions:                  Set Catchpoints.    (line   66)
-* catch Ada exceptions when handled:     Set Catchpoints.    (line   92)
-* catch syscalls from inferior, remote request: General Query Packets.
-                                                             (line  401)
-* catchpoints:                           Breakpoints.        (line   30)
-* catchpoints, setting:                  Set Catchpoints.    (line    6)
-* change GDB's working directory:        Working Directory.  (line   32)
-* change inferior's working directory:   Working Directory.  (line   13)
-* character sets:                        Character Sets.     (line    6)
-* charset:                               Character Sets.     (line    6)
-* checkpoint:                            Checkpoint/Restart. (line    6)
-* checkpoints and process id:            Checkpoint/Restart. (line   76)
-* checks, range:                         Type Checking.      (line   44)
-* checks, type:                          Checks.             (line   23)
-* checksum, for GDB remote:              Overview.           (line   21)
-* choosing target byte order:            Byte Order.         (line    6)
-* circular trace buffer:                 Starting and Stopping Trace Experiments.
-                                                             (line   80)
-* clearing breakpoints, watchpoints, catchpoints: Delete Breaks.
-                                                             (line    6)
-* close, file-i/o system call:           close.              (line    6)
-* closest symbol and offset for an address: Symbols.         (line   95)
-* code address and its source line:      Machine Code.       (line   28)
-* code compression, MIPS:                MIPS.               (line   49)
-* COFF/PE exported symbols:              Debugging Output.   (line   50)
-* collected data discarded:              Starting and Stopping Trace Experiments.
-                                                             (line    6)
-* colon, doubled as scope operator:      M2 Scope.           (line    6)
-* colon-colon, context for variables/functions: Variables.   (line   44)
-* colors:                                Output Styling.     (line    6)
-* command editing:                       Readline Bare Essentials.
-                                                             (line    6)
-* command files:                         Command Files.      (line    6)
-* command history:                       Command History.    (line    6)
-* command hooks:                         Hooks.              (line    6)
-* command interpreters:                  Interpreters.       (line    6)
-* command line editing:                  Editing.            (line    6)
-* command options:                       Command Options.    (line    6)
-* command options, boolean:              Command Options.    (line   21)
-* command options, raw input:            Command Options.    (line   13)
-* command scripts, debugging:            Messages/Warnings.  (line   65)
-* command tracing:                       Messages/Warnings.  (line   60)
-* commands for C++:                      Debugging C Plus Plus.
-                                                             (line    6)
-* commands in guile:                     Commands In Guile.  (line    6)
-* commands in python:                    Commands In Python. (line    6)
-* commands to access guile:              Guile Commands.     (line    6)
-* commands to access python:             Python Commands.    (line    6)
-* comment:                               Command Syntax.     (line   37)
-* COMMON blocks, Fortran:                Special Fortran Commands.
-                                                             (line    9)
-* common targets:                        Target Commands.    (line   46)
-* compatibility, GDB/MI and CLI:         GDB/MI Compatibility with CLI.
-                                                             (line    6)
-* compilation directory:                 Source Path.        (line   40)
-* compile C++ type conversion:           Compiling and Injecting Code.
-                                                             (line   90)
-* compile command debugging info:        Compiling and Injecting Code.
-                                                             (line   82)
-* compile command driver filename override: Compiling and Injecting Code.
-                                                             (line  300)
-* compile command options override:      Compiling and Injecting Code.
-                                                             (line  125)
-* compiling code:                        Compiling and Injecting Code.
-                                                             (line    6)
-* completion:                            Completion.         (line    6)
-* completion of Guile commands:          Commands In Guile.  (line  100)
-* completion of Python commands:         Commands In Python. (line   70)
-* completion of quoted strings:          Completion.         (line   83)
-* completion of structure field names:   Completion.         (line  135)
-* completion of union field names:       Completion.         (line  135)
-* compressed debug sections:             Requirements.       (line  110)
-* conditional breakpoints:               Conditions.         (line    6)
-* conditional tracepoints:               Tracepoint Conditions.
-                                                             (line    6)
-* configuring GDB:                       Running Configure.  (line    6)
-* confirmation:                          Messages/Warnings.  (line   49)
-* connection timeout, for remote TCP target: Remote Configuration.
-                                                             (line  147)
-* console i/o as part of file-i/o:       Console I/O.        (line    6)
-* console interpreter:                   Interpreters.       (line   21)
-* console output in GDB/MI:              GDB/MI Output Syntax.
-                                                             (line  106)
-* constants, in file-i/o protocol:       Constants.          (line    6)
-* continuing:                            Continuing and Stepping.
-                                                             (line    6)
-* continuing threads:                    Thread Stops.       (line    6)
-* control C, and remote debugging:       Bootstrapping.      (line   25)
-* controlling terminal:                  Input/Output.       (line   23)
-* convenience functions:                 Convenience Funs.   (line    6)
-* convenience functions in python:       Functions In Python.
-                                                             (line    6)
-* convenience variables:                 Convenience Vars.   (line    6)
-* convenience variables for tracepoints: Tracepoint Variables.
-                                                             (line    6)
-* convenience variables, and trace state variables: Trace State Variables.
-                                                             (line   17)
-* convenience variables, initializing:   Convenience Vars.   (line   42)
-* core dump file:                        Files.              (line    6)
-* core dump file target:                 Target Commands.    (line   54)
-* crash of debugger:                     Bug Criteria.       (line    9)
-* CRC algorithm definition:              Separate Debug Files.
-                                                             (line  140)
-* CRC of memory block, remote request:   General Query Packets.
-                                                             (line   65)
-* CRIS:                                  CRIS.               (line    6)
-* CRIS mode:                             CRIS.               (line   26)
-* CRIS version:                          CRIS.               (line   10)
-* Ctrl-BREAK, MS-Windows:                Cygwin Native.      (line    9)
-* ctrl-c message, in file-i/o protocol:  The Ctrl-C Message. (line    6)
-* current Ada task ID:                   Ada Tasks.          (line  105)
-* current directory:                     Source Path.        (line   40)
-* current Go package:                    Go.                 (line   11)
-* current thread:                        Threads.            (line   29)
-* current thread, remote request:        General Query Packets.
-                                                             (line   55)
-* custom JIT debug info:                 Custom Debug Info.  (line    6)
-* Cygwin DLL, debugging:                 Cygwin Native.      (line   60)
-* Cygwin-specific commands:              Cygwin Native.      (line    6)
-* D:                                     D.                  (line    6)
-* d packet:                              Packets.            (line  127)
-* D packet:                              Packets.            (line  134)
-* Darwin:                                Darwin.             (line    6)
-* data breakpoints:                      Breakpoints.        (line   17)
-* data manipulation, in GDB/MI:          GDB/MI Data Manipulation.
-                                                             (line    6)
-* dcache line-size:                      Caching Target Data.
-                                                             (line   60)
-* dcache size:                           Caching Target Data.
-                                                             (line   57)
-* dead names, GNU Hurd:                  Hurd Native.        (line   84)
-* debug expression parser:               Debugging Output.   (line  152)
-* debug formats and C++:                 C Plus Plus Expressions.
-                                                             (line    8)
-* debug link sections:                   Separate Debug Files.
-                                                             (line   79)
-* debug remote protocol:                 Debugging Output.   (line  159)
-* debugger crash:                        Bug Criteria.       (line    9)
-* debugging agent:                       In-Process Agent.   (line    6)
-* debugging C++ programs:                C Plus Plus Expressions.
-                                                             (line    8)
-* debugging information directory, global: Separate Debug Files.
-                                                             (line    6)
-* debugging information in separate files: Separate Debug Files.
-                                                             (line    6)
-* debugging libthread_db:                Threads.            (line  331)
-* debugging multiple processes:          Forks.              (line   55)
-* debugging optimized code:              Optimized Code.     (line    6)
-* debugging stub, example:               Remote Stub.        (line    6)
-* debugging target:                      Targets.            (line    6)
-* debugging the Cygwin DLL:              Cygwin Native.      (line   60)
-* decimal floating point format:         Decimal Floating Point.
-                                                             (line    6)
-* default behavior of commands, changing: Command Settings.  (line    6)
-* default collection action:             Tracepoint Actions. (line  142)
-* default data directory:                Data Files.         (line   19)
-* default settings, changing:            Command Settings.   (line    6)
-* default source path substitution:      Source Path.        (line  149)
-* default system root:                   Files.              (line  453)
-* define trace state variable, remote request: Tracepoint Packets.
-                                                             (line  121)
-* defining macros interactively:         Macros.             (line   59)
-* definition of a macro, showing:        Macros.             (line   47)
-* delete breakpoints:                    Delete Breaks.      (line   41)
-* deleting breakpoints, watchpoints, catchpoints: Delete Breaks.
-                                                             (line    6)
-* deliver a signal to a program:         Signaling.          (line    6)
-* demangle:                              Symbols.            (line  114)
-* demangler crashes:                     Maintenance Commands.
-                                                             (line  146)
-* demangler crashes <1>:                 Maintenance Commands.
-                                                             (line  173)
-* demangler crashes <2>:                 Maintenance Commands.
-                                                             (line  197)
-* demangling C++ names:                  Print Settings.     (line  510)
-* deprecated commands:                   Maintenance Commands.
-                                                             (line  160)
-* derived type of an object, printing:   Print Settings.     (line  541)
-* descriptor tables display:             DJGPP Native.       (line   24)
-* detach from task, GNU Hurd:            Hurd Native.        (line   59)
-* detach from thread, GNU Hurd:          Hurd Native.        (line  109)
-* direct memory access (DMA) on MS-DOS:  DJGPP Native.       (line   74)
-* directories for source files:          Source Path.        (line    6)
-* directory, compilation:                Source Path.        (line   40)
-* directory, current:                    Source Path.        (line   40)
-* disable address space randomization, remote request: General Query Packets.
-                                                             (line   84)
-* disabling calling functions in the program: Calling.       (line   59)
-* disassembler options:                  Machine Code.       (line  222)
-* disconnected tracing:                  Starting and Stopping Trace Experiments.
-                                                             (line   45)
-* displaced stepping debugging info:     Debugging Output.   (line   75)
-* displaced stepping support:            Maintenance Commands.
-                                                             (line  112)
-* displaced stepping, and process record and replay: Process Record and Replay.
-                                                             (line   96)
-* display command history:               Command History.    (line   95)
-* display derived types:                 Print Settings.     (line  541)
-* display disabled out of scope:         Auto Display.       (line   86)
-* display GDB copyright:                 Help.               (line  158)
-* display of expressions:                Auto Display.       (line    6)
-* display remote monitor communications: Target Commands.    (line  107)
-* display remote packets:                Debugging Output.   (line  159)
-* DJGPP debugging:                       DJGPP Native.       (line    6)
-* DLLs with no debugging symbols:        Non-debug DLL Symbols.
-                                                             (line    6)
-* do not print frame arguments:          Print Settings.     (line  154)
-* documentation:                         Formatting Documentation.
-                                                             (line   22)
-* don't repeat command:                  Define.             (line  111)
-* don't repeat Guile command:            Commands In Guile.  (line   67)
-* don't repeat Python command:           Commands In Python. (line   42)
-* DOS file-name semantics of file names.: Files.             (line  476)
-* DOS serial data link, remote debugging: DJGPP Native.      (line  118)
-* DOS serial port status:                DJGPP Native.       (line  139)
-* DPMI:                                  DJGPP Native.       (line    6)
-* dprintf:                               Dynamic Printf.     (line    6)
-* dump all data collected at tracepoint: tdump.              (line    6)
-* dump core from inferior:               Core File Generation.
-                                                             (line    6)
-* dump data to a file:                   Dump/Restore Files. (line    6)
-* dump/restore files:                    Dump/Restore Files. (line    6)
-* DVC register:                          PowerPC Embedded.   (line    6)
-* DWARF compilation units cache:         Maintenance Commands.
-                                                             (line  394)
-* DWARF DIEs:                            Debugging Output.   (line   56)
-* DWARF frame unwinders:                 Maintenance Commands.
-                                                             (line  408)
-* DWARF Line Tables:                     Debugging Output.   (line   61)
-* DWARF Reading:                         Debugging Output.   (line   68)
-* DWARF-2 CFI and CRIS:                  CRIS.               (line   18)
-* dynamic linking:                       Files.              (line  123)
-* dynamic printf:                        Dynamic Printf.     (line    6)
-* dynamic varobj:                        GDB/MI Variable Objects.
-                                                             (line  166)
-* editing:                               Editing.            (line   15)
-* editing command lines:                 Readline Bare Essentials.
-                                                             (line    6)
-* editing source files:                  Edit.               (line    6)
-* eight-bit characters in strings:       Print Settings.     (line  455)
-* elaboration phase:                     Starting.           (line   92)
-* ELinOS system-wide configuration script: System-wide Configuration Scripts.
-                                                             (line   15)
-* Emacs:                                 Emacs.              (line    6)
-* empty response, for unsupported packets: Overview.         (line   97)
-* enable/disable a breakpoint:           Disabling.          (line    6)
-* enabling and disabling probes:         Static Probe Points.
-                                                             (line   52)
-* entering numbers:                      Numbers.            (line    6)
-* environment (of your program):         Environment.        (line    6)
-* errno values, in file-i/o protocol:    Errno Values.       (line    6)
-* error on valid input:                  Bug Criteria.       (line   12)
-* event debugging info:                  Debugging Output.   (line   81)
-* event designators:                     Event Designators.  (line    6)
-* event handling:                        Set Catchpoints.    (line    6)
-* examine process image:                 Process Information.
-                                                             (line    6)
-* examining data:                        Data.               (line    6)
-* examining memory:                      Memory.             (line    9)
-* exception handlers:                    Set Catchpoints.    (line    6)
-* exceptions, guile:                     Guile Exception Handling.
-                                                             (line    6)
-* exceptions, python:                    Exception Handling. (line    6)
-* exec events, remote reply:             Stop Reply Packets. (line  141)
-* executable file:                       Files.              (line   16)
-* executable file target:                Target Commands.    (line   50)
-* executable file, for remote target:    Remote Configuration.
-                                                             (line  102)
-* execute commands from a file:          Command Files.      (line   17)
-* execute forward or backward in time:   Reverse Execution.  (line   92)
-* execute remote command, remote request: General Query Packets.
-                                                             (line  536)
-* execution, foreground, background and asynchronous: Background Execution.
-                                                             (line    6)
-* exit status of shell commands:         Convenience Vars.   (line  187)
-* exiting GDB:                           Quitting GDB.       (line    6)
-* expand macro once:                     Macros.             (line   38)
-* expanding preprocessor macros:         Macros.             (line   29)
-* explicit locations:                    Explicit Locations. (line    6)
-* explore type:                          Data.               (line  234)
-* explore value:                         Data.               (line  227)
-* exploring hierarchical data structures: Data.              (line  125)
-* expression debugging info:             Debugging Output.   (line   86)
-* expression parser, debugging info:     Debugging Output.   (line  152)
-* expressions:                           Expressions.        (line    6)
-* expressions in Ada:                    Ada.                (line   11)
-* expressions in C or C++:               C.                  (line    6)
-* expressions in C++:                    C Plus Plus Expressions.
-                                                             (line    6)
-* expressions in Modula-2:               Modula-2.           (line   12)
-* extend GDB for remote targets:         Connecting.         (line  272)
-* extending GDB:                         Extending GDB.      (line    6)
-* extra signal information:              Signals.            (line  156)
-* F packet:                              Packets.            (line  150)
-* F reply packet:                        The F Reply Packet. (line    6)
-* F request packet:                      The F Request Packet.
-                                                             (line    6)
-* fast tracepoints:                      Set Tracepoints.    (line   24)
-* fast tracepoints, setting:             Create and Delete Tracepoints.
-                                                             (line   50)
-* fatal signal:                          Bug Criteria.       (line    9)
-* fatal signals:                         Signals.            (line   15)
-* features of the remote protocol:       General Query Packets.
-                                                             (line  589)
-* file name canonicalization:            Files.              (line  520)
-* file transfer:                         File Transfer.      (line    6)
-* file transfer, remote protocol:        Host I/O Packets.   (line    6)
-* file-i/o examples:                     File-I/O Examples.  (line    6)
-* file-i/o overview:                     File-I/O Overview.  (line    6)
-* File-I/O remote protocol extension:    File-I/O Remote Protocol Extension.
-                                                             (line    6)
-* file-i/o reply packet:                 The F Reply Packet. (line    6)
-* file-i/o request packet:               The F Request Packet.
-                                                             (line    6)
-* filename-display:                      Backtrace.          (line  202)
-* find trace snapshot:                   tfind.              (line    6)
-* flinching:                             Messages/Warnings.  (line   49)
-* float promotion:                       ABI.                (line   34)
-* floating point:                        Floating Point Hardware.
-                                                             (line    6)
-* floating point registers:              Registers.          (line   15)
-* floating point, MIPS remote:           MIPS Embedded.      (line   13)
-* focus of debugging:                    Threads.            (line   29)
-* foo:                                   Symbol Errors.      (line   54)
-* foreground execution:                  Background Execution.
-                                                             (line    6)
-* fork events, remote reply:             Stop Reply Packets. (line  104)
-* fork, debugging programs which call:   Forks.              (line    6)
-* format options:                        Print Settings.     (line    6)
-* formatted output:                      Output Formats.     (line    6)
-* Fortran:                               Summary.            (line   40)
-* Fortran Defaults:                      Fortran Defaults.   (line    6)
-* Fortran modules, information about:    Symbols.            (line  555)
-* Fortran operators and expressions:     Fortran Operators.  (line    6)
-* Fortran-specific support in GDB:       Fortran.            (line    6)
-* FR-V shared-library debugging:         Debugging Output.   (line  193)
-* frame debugging info:                  Debugging Output.   (line  101)
-* frame decorator api:                   Frame Decorator API.
-                                                             (line    6)
-* frame filters api:                     Frame Filter API.   (line    6)
-* frame information, printing:           Print Settings.     (line  314)
-* frame level:                           Frames.             (line   28)
-* frame number:                          Frames.             (line   28)
-* frame pointer:                         Frames.             (line   21)
-* frame pointer register:                Registers.          (line   31)
-* frame, definition:                     Frames.             (line    6)
-* frameless execution:                   Frames.             (line   34)
-* frames in guile:                       Frames In Guile.    (line    6)
-* frames in python:                      Frames In Python.   (line    6)
-* free memory information (MS-DOS):      DJGPP Native.       (line   19)
-* FreeBSD:                               FreeBSD.            (line    6)
-* FreeBSD LWP debug messages:            Debugging Output.   (line   92)
-* FreeBSD native target debug messages:  Debugging Output.   (line   97)
-* fstat, file-i/o system call:           stat/fstat.         (line    6)
-* Fujitsu:                               Remote Stub.        (line   68)
-* full symbol tables, listing GDB's internal: Symbols.       (line  645)
-* function call arguments, optimized out: Backtrace.         (line  133)
-* function entry/exit, wrong values of variables: Variables. (line  106)
-* functions and variables by Fortran module: Symbols.        (line  555)
-* functions without line info, and stepping: Continuing and Stepping.
-                                                             (line   92)
-* g packet:                              Packets.            (line  155)
-* G packet:                              Packets.            (line  183)
-* g++, GNU C++ compiler:                 C.                  (line   10)
-* garbled pointers:                      DJGPP Native.       (line   42)
-* GCC and C++:                           C Plus Plus Expressions.
-                                                             (line    8)
-* GDB bugs, reporting:                   Bug Reporting.      (line    6)
-* GDB internal error:                    Maintenance Commands.
-                                                             (line  197)
-* gdb module:                            Basic Python.       (line   28)
-* gdb objects:                           GDB Scheme Data Types.
-                                                             (line    6)
-* GDB reference card:                    Formatting Documentation.
-                                                             (line    6)
-* GDB startup:                           Startup.            (line    6)
-* GDB version number:                    Help.               (line  148)
-* gdb.ini:                               Startup.            (line   69)
-* gdb.printing:                          gdb.printing.       (line    6)
-* gdb.prompt:                            gdb.prompt.         (line    6)
-* gdb.types:                             gdb.types.          (line    6)
-* gdb.Value:                             Values From Inferior.
-                                                             (line    6)
-* GDB/MI development:                    GDB/MI Development and Front Ends.
-                                                             (line    6)
-* GDB/MI General Design:                 GDB/MI General Design.
-                                                             (line    6)
-* GDB/MI, async records:                 GDB/MI Async Records.
-                                                             (line    6)
-* GDB/MI, breakpoint commands:           GDB/MI Breakpoint Commands.
-                                                             (line    6)
-* GDB/MI, compatibility with CLI:        GDB/MI Compatibility with CLI.
-                                                             (line    6)
-* GDB/MI, data manipulation:             GDB/MI Data Manipulation.
-                                                             (line    6)
-* GDB/MI, input syntax:                  GDB/MI Input Syntax.
-                                                             (line    6)
-* GDB/MI, its purpose:                   GDB/MI.             (line    9)
-* GDB/MI, output syntax:                 GDB/MI Output Syntax.
-                                                             (line    6)
-* GDB/MI, result records:                GDB/MI Result Records.
-                                                             (line    6)
-* GDB/MI, simple examples:               GDB/MI Simple Examples.
-                                                             (line    6)
-* GDB/MI, stream records:                GDB/MI Stream Records.
-                                                             (line    6)
-* gdbarch debugging info:                Debugging Output.   (line   23)
-* GDBHISTFILE, environment variable:     Command History.    (line   26)
-* GDBHISTSIZE, environment variable:     Command History.    (line   45)
-* gdbserver, command-line arguments:     Server.             (line   34)
-* gdbserver, connecting:                 Connecting.         (line    6)
-* gdbserver, search path for libthread_db: Server.           (line  254)
-* gdbserver, send all debug output to a single file: Server. (line  148)
-* gdbserver, target extended-remote mode: Connecting.        (line    6)
-* gdbserver, target remote mode:         Connecting.         (line    6)
-* gdbserver, types of connections:       Connecting.         (line    6)
-* GDT:                                   DJGPP Native.       (line   24)
-* get thread information block address:  General Query Packets.
-                                                             (line  303)
-* get thread-local storage address, remote request: General Query Packets.
-                                                             (line  271)
-* gettimeofday, file-i/o system call:    gettimeofday.       (line    6)
-* getting structure elements using gdb.Field objects as subscripts: Values From Inferior.
-                                                             (line   40)
-* global debugging information directories: Separate Debug Files.
-                                                             (line    6)
-* global thread identifier (GDB):        Threads.            (line   88)
-* global thread number:                  Threads.            (line   88)
-* GNAT descriptive types:                Ada Glitches.       (line   57)
-* GNAT encoding:                         Ada Glitches.       (line   57)
-* GNU C++:                               C.                  (line   10)
-* GNU Emacs:                             Emacs.              (line    6)
-* GNU Hurd debugging:                    Hurd Native.        (line    6)
-* GNU/Hurd debug messages:               Debugging Output.   (line  106)
-* GNU/Linux LWP debug messages:          Debugging Output.   (line  121)
-* GNU/Linux namespaces debug messages:   Debugging Output.   (line  125)
-* Go (programming language):             Go.                 (line    6)
-* guile api:                             Guile API.          (line    6)
-* guile architectures:                   Architectures In Guile.
-                                                             (line    6)
-* guile auto-loading:                    Guile Auto-loading. (line    6)
-* guile commands:                        Guile Commands.     (line    6)
-* guile commands <1>:                    Commands In Guile.  (line    6)
-* guile configuration:                   Guile Configuration.
-                                                             (line    6)
-* guile exceptions:                      Guile Exception Handling.
-                                                             (line    6)
-* guile gdb module:                      Basic Guile.        (line   37)
-* guile iterators:                       Iterators In Guile. (line    6)
-* guile modules:                         Guile Modules.      (line    6)
-* guile pagination:                      Basic Guile.        (line    6)
-* guile parameters:                      Parameters In Guile.
-                                                             (line    6)
-* guile pretty printing api:             Guile Pretty Printing API.
-                                                             (line    6)
-* guile scripting:                       Guile.              (line    6)
-* guile scripts directory:               Guile Introduction. (line   16)
-* guile stdout:                          Basic Guile.        (line    6)
-* guile, working with types:             Types In Guile.     (line    6)
-* guile, working with values from inferior: Values From Inferior In Guile.
-                                                             (line    6)
-* H packet:                              Packets.            (line  193)
-* handling signals:                      Signals.            (line   27)
-* hardware breakpoints:                  Set Breaks.         (line   61)
-* hardware debug registers:              Maintenance Commands.
-                                                             (line  454)
-* hardware watchpoints:                  Set Watchpoints.    (line   31)
-* hash mark while downloading:           Target Commands.    (line   98)
-* heuristic-fence-post (Alpha, MIPS):    MIPS.               (line   14)
-* history events:                        Event Designators.  (line    8)
-* history expansion:                     History Interaction.
-                                                             (line    6)
-* history expansion, turn on/off:        Command History.    (line   70)
-* history file:                          Command History.    (line   26)
-* history number:                        Value History.      (line   13)
-* history of values printed by GDB:      Value History.      (line    6)
-* history size:                          Command History.    (line   45)
-* history substitution:                  Command History.    (line   26)
-* hooks, for commands:                   Hooks.              (line    6)
-* hooks, post-command:                   Hooks.              (line   11)
-* hooks, pre-command:                    Hooks.              (line    6)
-* host character set:                    Character Sets.     (line    6)
-* Host I/O, remote protocol:             Host I/O Packets.   (line    6)
-* how many arguments (user-defined commands): Define.        (line   25)
-* HPPA support:                          HPPA.               (line    6)
-* i packet:                              Packets.            (line  207)
-* I packet:                              Packets.            (line  212)
-* i/o:                                   Input/Output.       (line    6)
-* I/O registers (Atmel AVR):             AVR.                (line   10)
-* i386:                                  Remote Stub.        (line   56)
-* i386-stub.c:                           Remote Stub.        (line   56)
-* IDT:                                   DJGPP Native.       (line   24)
-* ignore count (of breakpoint):          Conditions.         (line   79)
-* in-process agent protocol:             In-Process Agent Protocol.
-                                                             (line    6)
-* incomplete type:                       Symbols.            (line  346)
-* indentation in structure display:      Print Settings.     (line  417)
-* index files:                           Index Files.        (line    6)
-* index section format:                  Index Section Format.
-                                                             (line    6)
-* inferior:                              Inferiors and Programs.
-                                                             (line   13)
-* inferior debugging info:               Debugging Output.   (line  110)
-* inferior events in Python:             Events In Python.   (line    6)
-* inferior functions, calling:           Calling.            (line    6)
-* inferior tty:                          Input/Output.       (line   44)
-* inferiors in Python:                   Inferiors In Python.
-                                                             (line    6)
-* infinite recursion in user-defined commands: Define.       (line  128)
-* info for known .debug_gdb_scripts-loaded scripts: Maintenance Commands.
-                                                             (line  321)
-* info for known object files:           Maintenance Commands.
-                                                             (line  306)
-* info line, repeated calls:             Machine Code.       (line   40)
-* info proc cmdline:                     Process Information.
-                                                             (line   41)
-* info proc cwd:                         Process Information.
-                                                             (line   45)
-* info proc exe:                         Process Information.
-                                                             (line   49)
-* info proc files:                       Process Information.
-                                                             (line   53)
-* information about static tracepoint markers: Listing Static Tracepoint Markers.
-                                                             (line    6)
-* information about tracepoints:         Listing Tracepoints.
-                                                             (line    6)
-* inheritance:                           Debugging C Plus Plus.
-                                                             (line   26)
-* init file:                             Startup.            (line   11)
-* init file name:                        Startup.            (line   69)
-* initial frame:                         Frames.             (line   12)
-* initialization file, readline:         Readline Init File. (line    6)
-* injecting code:                        Compiling and Injecting Code.
-                                                             (line    6)
-* inline functions, debugging:           Inline Functions.   (line    6)
-* innermost frame:                       Frames.             (line   12)
-* input syntax for GDB/MI:               GDB/MI Input Syntax.
-                                                             (line    6)
-* installation:                          Installing GDB.     (line    6)
-* instructions, assembly:                Machine Code.       (line   43)
-* integral datatypes, in file-i/o protocol: Integral Datatypes.
-                                                             (line    6)
-* Intel:                                 Remote Stub.        (line   56)
-* Intel disassembly flavor:              Machine Code.       (line  237)
-* Intel Memory Protection Extensions (MPX).: i386.           (line   21)
-* Intel MPX boundary violations:         Signals.            (line  197)
-* Intel Processor Trace:                 Process Record and Replay.
-                                                             (line   75)
-* interaction, readline:                 Readline Interaction.
-                                                             (line    6)
-* internal commands:                     Maintenance Commands.
-                                                             (line    6)
-* internal errors, control of GDB behavior: Maintenance Commands.
-                                                             (line  197)
-* internal GDB breakpoints:              Set Breaks.         (line  374)
-* interrupt:                             Quitting GDB.       (line   13)
-* interrupt debuggee on MS-Windows:      Cygwin Native.      (line    9)
-* interrupt remote programs:             Remote Configuration.
-                                                             (line   36)
-* interrupt remote programs <1>:         Remote Configuration.
-                                                             (line  108)
-* interrupting remote programs:          Connecting.         (line  239)
-* interrupting remote targets:           Bootstrapping.      (line   25)
-* interrupts (remote protocol):          Interrupts.         (line    6)
-* invalid input:                         Bug Criteria.       (line   16)
-* invoke another interpreter:            Interpreters.       (line   39)
-* ipa protocol commands:                 IPA Protocol Commands.
-                                                             (line    6)
-* ipa protocol objects:                  IPA Protocol Objects.
-                                                             (line    6)
-* isatty, file-i/o system call:          isatty.             (line    6)
-* JIT compilation interface:             JIT Interface.      (line    6)
-* JIT debug info reader:                 Custom Debug Info.  (line    6)
-* just-in-time compilation:              JIT Interface.      (line    6)
-* just-in-time compilation, debugging messages: Debugging Output.
-                                                             (line  117)
-* k packet:                              Packets.            (line  216)
-* kernel crash dump:                     BSD libkvm Interface.
-                                                             (line    6)
-* kernel memory image:                   BSD libkvm Interface.
-                                                             (line    6)
-* kill ring:                             Readline Killing Commands.
-                                                             (line   18)
-* killing text:                          Readline Killing Commands.
-                                                             (line    6)
-* languages:                             Languages.          (line    6)
-* last tracepoint number:                Create and Delete Tracepoints.
-                                                             (line  122)
-* latest breakpoint:                     Set Breaks.         (line    6)
-* lazy strings in guile:                 Lazy Strings In Guile.
-                                                             (line    6)
-* lazy strings in python:                Lazy Strings In Python.
-                                                             (line    6)
-* LDT:                                   DJGPP Native.       (line   24)
-* leaving GDB:                           Quitting GDB.       (line    6)
-* libkvm:                                BSD libkvm Interface.
-                                                             (line    6)
-* library list format, remote protocol:  Library List Format.
-                                                             (line    6)
-* library list format, remote protocol <1>: Library List Format for SVR4 Targets.
-                                                             (line    6)
-* limit hardware breakpoints and watchpoints: Remote Configuration.
-                                                             (line   79)
-* limit hardware watchpoints length:     Remote Configuration.
-                                                             (line   91)
-* limit on number of printed array elements: Print Settings. (line  141)
-* limits, in file-i/o protocol:          Limits.             (line    6)
-* line tables in python:                 Line Tables In Python.
-                                                             (line    6)
-* line tables, listing GDB's internal:   Symbols.            (line  692)
-* linespec locations:                    Linespec Locations. (line    6)
-* Linux lightweight processes:           Debugging Output.   (line  121)
-* list active threads, remote request:   General Query Packets.
-                                                             (line  238)
-* list of supported file-i/o calls:      List of Supported Calls.
-                                                             (line    6)
-* list output in GDB/MI:                 GDB/MI Output Syntax.
-                                                             (line  117)
-* list, how many lines to display:       List.               (line   30)
-* listing GDB's internal line tables:    Symbols.            (line  692)
-* listing GDB's internal symbol tables:  Symbols.            (line  645)
-* listing machine instructions:          Machine Code.       (line   43)
-* listing mapped overlays:               Overlay Commands.   (line   60)
-* lists of breakpoints:                  Breakpoints.        (line   45)
-* load address, overlay's:               How Overlays Work.  (line    6)
-* load shared library:                   Files.              (line  327)
-* load symbols from memory:              Files.              (line  193)
-* local socket, target remote:           Connecting.         (line  140)
-* local variables:                       Symbols.            (line  415)
-* locate address:                        Output Formats.     (line   35)
-* location:                              Specify Location.   (line    6)
-* lock scheduler:                        All-Stop Mode.      (line   37)
-* log output in GDB/MI:                  GDB/MI Output Syntax.
-                                                             (line  113)
-* logging file name:                     Logging Output.     (line   12)
-* logging GDB output:                    Logging Output.     (line    6)
-* lseek flags, in file-i/o protocol:     Lseek Flags.        (line    6)
-* lseek, file-i/o system call:           lseek.              (line    6)
-* m packet:                              Packets.            (line  239)
-* M packet:                              Packets.            (line  259)
-* m680x0:                                Remote Stub.        (line   59)
-* m68k-stub.c:                           Remote Stub.        (line   59)
-* Mach-O symbols processing:             Debugging Output.   (line  130)
-* machine instructions:                  Machine Code.       (line   43)
-* macro definition, showing:             Macros.             (line   47)
-* macro expansion, showing the results of preprocessor: Macros.
-                                                             (line   29)
-* macros, example of debugging with:     Macros.             (line   83)
-* macros, from debug info:               Macros.             (line   47)
-* macros, user-defined:                  Macros.             (line   59)
-* mailing lists:                         GDB/MI Development and Front Ends.
-                                                             (line   78)
-* maintenance commands:                  Maintenance Commands.
-                                                             (line    6)
-* Man pages:                             Man Pages.          (line    6)
-* managing frame filters:                Frame Filter Management.
-                                                             (line    6)
-* manual overlay debugging:              Overlay Commands.   (line   23)
-* map an overlay:                        Overlay Commands.   (line   30)
-* mapinfo list, QNX Neutrino:            Process Information.
-                                                             (line  130)
-* mapped address:                        How Overlays Work.  (line    6)
-* mapped overlays:                       How Overlays Work.  (line    6)
-* markers, static tracepoints:           Set Tracepoints.    (line   28)
-* maximum value for offset of closest symbol: Print Settings.
-                                                             (line   70)
-* member functions:                      C Plus Plus Expressions.
-                                                             (line   16)
-* memory address space mappings:         Process Information.
-                                                             (line   80)
-* memory map format:                     Memory Map Format.  (line    6)
-* memory region attributes:              Memory Region Attributes.
-                                                             (line    6)
-* memory tracing:                        Breakpoints.        (line   17)
-* memory transfer, in file-i/o protocol: Memory Transfer.    (line    6)
-* memory used by commands:               Maintenance Commands.
-                                                             (line  555)
-* memory used for symbol tables:         Files.              (line  315)
-* memory, alignment and size of remote accesses: Packets.    (line  247)
-* memory, viewing as typed object:       Expressions.        (line   41)
-* mi interpreter:                        Interpreters.       (line   26)
-* mi1 interpreter:                       Interpreters.       (line   37)
-* mi2 interpreter:                       Interpreters.       (line   34)
-* mi3 interpreter:                       Interpreters.       (line   31)
-* minimal language:                      Unsupported Languages.
-                                                             (line    6)
-* minimal symbol dump:                   Symbols.            (line  619)
-* Minimal symbols and DLLs:              Non-debug DLL Symbols.
-                                                             (line    6)
-* MIPS addresses, masking:               MIPS.               (line   80)
-* MIPS remote floating point:            MIPS Embedded.      (line   13)
-* MIPS stack:                            MIPS.               (line    6)
-* miscellaneous settings:                Other Misc Settings.
-                                                             (line    6)
-* MMX registers (x86):                   Registers.          (line   76)
-* mode_t values, in file-i/o protocol:   mode_t Values.      (line    6)
-* Modula-2:                              Summary.            (line   29)
-* Modula-2 built-ins:                    Built-In Func/Proc. (line    6)
-* Modula-2 checks:                       M2 Checks.          (line    6)
-* Modula-2 constants:                    Built-In Func/Proc. (line  114)
-* Modula-2 defaults:                     M2 Defaults.        (line    6)
-* Modula-2 operators:                    M2 Operators.       (line    6)
-* Modula-2 types:                        M2 Types.           (line    6)
-* Modula-2, deviations from:             Deviations.         (line    6)
-* Modula-2, GDB support:                 Modula-2.           (line    6)
-* module functions and variables:        Symbols.            (line  555)
-* modules:                               Symbols.            (line  547)
-* monitor commands, for gdbserver:       Server.             (line  218)
-* Motorola 680x0:                        Remote Stub.        (line   59)
-* MS Windows debugging:                  Cygwin Native.      (line    6)
-* MS-DOS system info:                    DJGPP Native.       (line   19)
-* MS-DOS-specific commands:              DJGPP Native.       (line    6)
-* multiple locations, breakpoints:       Set Breaks.         (line  200)
-* multiple processes:                    Forks.              (line    6)
-* multiple targets:                      Active Targets.     (line    6)
-* multiple threads:                      Threads.            (line    6)
-* multiple threads, backtrace:           Backtrace.          (line   97)
-* multiple-symbols menu:                 Ambiguous Expressions.
-                                                             (line   51)
-* multiprocess extensions, in remote protocol: General Query Packets.
-                                                             (line  913)
-* name a thread:                         Threads.            (line  247)
-* names of symbols:                      Symbols.            (line   14)
-* namespace in C++:                      C Plus Plus Expressions.
-                                                             (line   20)
-* native Cygwin debugging:               Cygwin Native.      (line    6)
-* native DJGPP debugging:                DJGPP Native.       (line    6)
-* native script auto-loading:            Auto-loading sequences.
-                                                             (line    6)
-* native target:                         Target Commands.    (line   85)
-* negative breakpoint numbers:           Set Breaks.         (line  374)
-* never read symbols:                    Files.              (line  101)
-* New SYSTAG message:                    Threads.            (line   35)
-* new user interface:                    Interpreters.       (line   68)
-* Newlib OS ABI and its influence on the longjmp handling: ABI.
-                                                             (line   11)
-* Nios II architecture:                  Nios II.            (line    6)
-* no debug info functions:               Calling.            (line   78)
-* no debug info variables:               Variables.          (line  142)
-* non-member C++ functions, set breakpoint in: Set Breaks.   (line  113)
-* non-stop mode:                         Non-Stop Mode.      (line    6)
-* non-stop mode, and process record and replay: Process Record and Replay.
-                                                             (line  101)
-* non-stop mode, and set displaced-stepping: Maintenance Commands.
-                                                             (line  129)
-* non-stop mode, remote request:         General Query Packets.
-                                                             (line  379)
-* noninvasive task options:              Hurd Native.        (line   72)
-* notation, readline:                    Readline Bare Essentials.
-                                                             (line    6)
-* notational conventions, for GDB/MI:    GDB/MI.             (line   25)
-* notification packets:                  Notification Packets.
-                                                             (line    6)
-* notify output in GDB/MI:               GDB/MI Output Syntax.
-                                                             (line  102)
-* NULL elements in arrays:               Print Settings.     (line  408)
-* number of array elements to print:     Print Settings.     (line  141)
-* number representation:                 Numbers.            (line    6)
-* numbers for breakpoints:               Breakpoints.        (line   38)
-* object files, relocatable, reading symbols from: Files.    (line  146)
-* Objective-C:                           Objective-C.        (line    6)
-* Objective-C, classes and selectors:    Symbols.            (line  570)
-* Objective-C, print objects:            The Print Command with Objective-C.
-                                                             (line    6)
-* OBJFILE-gdb.gdb:                       objfile-gdbdotext file.
-                                                             (line    6)
-* OBJFILE-gdb.py:                        objfile-gdbdotext file.
-                                                             (line    6)
-* OBJFILE-gdb.scm:                       objfile-gdbdotext file.
-                                                             (line    6)
-* objfiles in guile:                     Objfiles In Guile.  (line    6)
-* objfiles in python:                    Objfiles In Python. (line    6)
-* observer debugging info:               Debugging Output.   (line  142)
-* octal escapes in strings:              Print Settings.     (line  455)
-* online documentation:                  Help.               (line    6)
-* opaque data types:                     Symbols.            (line  582)
-* open flags, in file-i/o protocol:      Open Flags.         (line    6)
-* open, file-i/o system call:            open.               (line    6)
-* OpenCL C:                              OpenCL C.           (line    6)
-* OpenCL C Datatypes:                    OpenCL C Datatypes. (line    6)
-* OpenCL C Expressions:                  OpenCL C Expressions.
-                                                             (line    6)
-* OpenCL C Operators:                    OpenCL C Operators. (line    6)
-* OpenRISC 1000:                         OpenRISC 1000.      (line    6)
-* operate-and-get-next:                  Editing.            (line   32)
-* operating system information:          Operating System Information.
-                                                             (line    6)
-* operating system information, process list: Process list.  (line    6)
-* optimized code, debugging:             Optimized Code.     (line    6)
-* optimized code, wrong values of variables: Variables.      (line  106)
-* optimized out value in guile:          Values From Inferior In Guile.
-                                                             (line  102)
-* optimized out value in Python:         Values From Inferior.
-                                                             (line   70)
-* optimized out, in backtrace:           Backtrace.          (line  133)
-* optional debugging messages:           Debugging Output.   (line    6)
-* optional warnings:                     Messages/Warnings.  (line    6)
-* OS ABI:                                ABI.                (line   11)
-* OS information:                        OS Information.     (line    6)
-* out-of-line single-stepping:           Maintenance Commands.
-                                                             (line  112)
-* outermost frame:                       Frames.             (line   12)
-* output formats:                        Output Formats.     (line    6)
-* output syntax of GDB/MI:               GDB/MI Output Syntax.
-                                                             (line    6)
-* overlay area:                          How Overlays Work.  (line    6)
-* overlay example program:               Overlay Sample Program.
-                                                             (line    6)
-* overlays:                              Overlays.           (line    6)
-* overlays, setting breakpoints in:      Overlay Commands.   (line   91)
-* overloaded functions, calling:         C Plus Plus Expressions.
-                                                             (line   26)
-* overloaded functions, overload resolution: Debugging C Plus Plus.
-                                                             (line   59)
-* overloading in C++:                    Debugging C Plus Plus.
-                                                             (line   15)
-* overloading, Ada:                      Overloading support for Ada.
-                                                             (line    6)
-* p packet:                              Packets.            (line  271)
-* P packet:                              Packets.            (line  284)
-* packet acknowledgment, for GDB remote: Packet Acknowledgment.
-                                                             (line    6)
-* packet size, remote protocol:          General Query Packets.
-                                                             (line  819)
-* packets, notification:                 Notification Packets.
-                                                             (line    6)
-* packets, reporting on stdout:          Debugging Output.   (line  159)
-* packets, tracepoint:                   Tracepoint Packets. (line    6)
-* page size:                             Screen Size.        (line    6)
-* page tables display (MS-DOS):          DJGPP Native.       (line   55)
-* pagination:                            Screen Size.        (line    6)
-* parameters in guile:                   Parameters In Guile.
-                                                             (line    6)
-* parameters in python:                  Parameters In Python.
-                                                             (line    6)
-* partial symbol dump:                   Symbols.            (line  619)
-* partial symbol tables, listing GDB's internal: Symbols.    (line  645)
-* Pascal:                                Summary.            (line   35)
-* Pascal objects, static members display: Print Settings.    (line  570)
-* Pascal support in GDB, limitations:    Pascal.             (line    6)
-* pass signals to inferior, remote request: General Query Packets.
-                                                             (line  440)
-* patching binaries:                     Patching.           (line    6)
-* patching object files:                 Files.              (line   26)
-* pause current task (GNU Hurd):         Hurd Native.        (line   48)
-* pause current thread (GNU Hurd):       Hurd Native.        (line   90)
-* pauses in output:                      Screen Size.        (line    6)
-* pending breakpoints:                   Set Breaks.         (line  245)
-* physical address from linear address:  DJGPP Native.       (line   80)
-* physname:                              Debugging Output.   (line   41)
-* pipe, target remote to:                Connecting.         (line  227)
-* pipes:                                 Starting.           (line   64)
-* pointer values, in file-i/o protocol:  Pointer Values.     (line    6)
-* pointer, finding referent:             Print Settings.     (line   80)
-* port rights, GNU Hurd:                 Hurd Native.        (line   84)
-* port sets, GNU Hurd:                   Hurd Native.        (line   84)
-* PowerPC architecture:                  PowerPC.            (line    6)
-* prefix for data files:                 Data Files.         (line    6)
-* prefix for executable and shared library file names: Files.
-                                                             (line  386)
-* premature return from system calls:    Interrupted System Calls.
-                                                             (line    6)
-* preprocessor macro expansion, showing the results of: Macros.
-                                                             (line   29)
-* pretty print arrays:                   Print Settings.     (line  115)
-* pretty print C++ virtual function tables: Print Settings.  (line  581)
-* pretty-printer commands:               Pretty-Printer Commands.
-                                                             (line    6)
-* print all frame argument values:       Print Settings.     (line  154)
-* print an Objective-C object description: The Print Command with Objective-C.
-                                                             (line   11)
-* print array indexes:                   Print Settings.     (line  125)
-* print frame argument values for scalars only: Print Settings.
-                                                             (line  154)
-* print list of auto-loaded canned sequences of commands scripts: Auto-loading sequences.
-                                                             (line   21)
-* print list of auto-loaded Guile scripts: Guile Auto-loading.
-                                                             (line   23)
-* print list of auto-loaded Python scripts: Python Auto-loading.
-                                                             (line   23)
-* print messages on inferior start and exit: Inferiors and Programs.
-                                                             (line  126)
-* print messages on thread start and exit: Threads.          (line  272)
-* print messages when symbols are loaded: Symbols.           (line  600)
-* print settings:                        Print Settings.     (line    6)
-* print structures in indented form:     Print Settings.     (line  417)
-* print/don't print memory addresses:    Print Settings.     (line   13)
-* printing byte arrays:                  Output Formats.     (line   60)
-* printing data:                         Data.               (line    6)
-* printing frame argument values:        Print Settings.     (line  154)
-* printing frame information:            Print Settings.     (line  314)
-* printing nested structures:            Print Settings.     (line  362)
-* printing strings:                      Output Formats.     (line   60)
-* probe static tracepoint marker:        Create and Delete Tracepoints.
-                                                             (line   75)
-* probing markers, static tracepoints:   Set Tracepoints.    (line   28)
-* process detailed status information:   Process Information.
-                                                             (line   88)
-* process ID:                            Process Information.
-                                                             (line   25)
-* process info via /proc:                Process Information.
-                                                             (line    6)
-* process list, QNX Neutrino:            Process Information.
-                                                             (line  126)
-* process record and replay:             Process Record and Replay.
-                                                             (line    6)
-* process status register:               Registers.          (line   31)
-* processes, multiple:                   Forks.              (line    6)
-* procfs API calls:                      Process Information.
-                                                             (line  105)
-* profiling GDB:                         Maintenance Commands.
-                                                             (line  438)
-* program counter register:              Registers.          (line   31)
-* program entry point:                   Backtrace.          (line  155)
-* programming in guile:                  Guile API.          (line    6)
-* programming in python:                 Python API.         (line    6)
-* progspaces in guile:                   Progspaces In Guile.
-                                                             (line    6)
-* progspaces in python:                  Progspaces In Python.
-                                                             (line    6)
-* prompt:                                Prompt.             (line    6)
-* protocol basics, file-i/o:             Protocol Basics.    (line    6)
-* protocol, GDB remote serial:           Overview.           (line   14)
-* protocol-specific representation of datatypes, in file-i/o protocol: Protocol-specific Representation of Datatypes.
-                                                             (line    6)
-* python api:                            Python API.         (line    6)
-* Python architectures:                  Architectures In Python.
-                                                             (line    6)
-* Python auto-loading:                   Python Auto-loading.
-                                                             (line    6)
-* python commands:                       Python Commands.    (line    6)
-* python commands <1>:                   Commands In Python. (line    6)
-* python convenience functions:          Functions In Python.
-                                                             (line    6)
-* python directory:                      Python.             (line   12)
-* python exceptions:                     Exception Handling. (line    6)
-* python finish breakpoints:             Finish Breakpoints in Python.
-                                                             (line    6)
-* python functions:                      Basic Python.       (line   28)
-* python module:                         Basic Python.       (line   28)
-* python modules:                        Python modules.     (line    6)
-* python pagination:                     Basic Python.       (line    6)
-* python parameters:                     Parameters In Python.
-                                                             (line    6)
-* python pretty printing api:            Pretty Printing API.
-                                                             (line    6)
-* python scripting:                      Python.             (line    6)
-* python stdout:                         Basic Python.       (line    6)
-* Python, working with types:            Types In Python.    (line    6)
-* python, working with values from inferior: Values From Inferior.
-                                                             (line    6)
-* q packet:                              Packets.            (line  296)
-* Q packet:                              Packets.            (line  296)
-* QAllow packet:                         General Query Packets.
-                                                             (line   44)
-* qAttached packet:                      General Query Packets.
-                                                             (line 1381)
-* qC packet:                             General Query Packets.
-                                                             (line   55)
-* QCatchSyscalls packet:                 General Query Packets.
-                                                             (line  401)
-* qCRC packet:                           General Query Packets.
-                                                             (line   65)
-* QDisableRandomization packet:          General Query Packets.
-                                                             (line   84)
-* QEnvironmentHexEncoded packet:         General Query Packets.
-                                                             (line  144)
-* QEnvironmentReset packet:              General Query Packets.
-                                                             (line  197)
-* QEnvironmentUnset packet:              General Query Packets.
-                                                             (line  173)
-* qfThreadInfo packet:                   General Query Packets.
-                                                             (line  238)
-* qGetTIBAddr packet:                    General Query Packets.
-                                                             (line  303)
-* qGetTLSAddr packet:                    General Query Packets.
-                                                             (line  271)
-* QNonStop packet:                       General Query Packets.
-                                                             (line  379)
-* qOffsets packet:                       General Query Packets.
-                                                             (line  342)
-* qP packet:                             General Query Packets.
-                                                             (line  369)
-* QPassSignals packet:                   General Query Packets.
-                                                             (line  440)
-* QProgramSignals packet:                General Query Packets.
-                                                             (line  469)
-* qRcmd packet:                          General Query Packets.
-                                                             (line  536)
-* qSearch memory packet:                 General Query Packets.
-                                                             (line  558)
-* QSetWorkingDir packet:                 General Query Packets.
-                                                             (line  219)
-* QStartNoAckMode packet:                General Query Packets.
-                                                             (line  575)
-* QStartupWithShell packet:              General Query Packets.
-                                                             (line  114)
-* qsThreadInfo packet:                   General Query Packets.
-                                                             (line  238)
-* qSupported packet:                     General Query Packets.
-                                                             (line  589)
-* qSymbol packet:                        General Query Packets.
-                                                             (line 1033)
-* qTBuffer packet:                       Tracepoint Packets. (line  393)
-* QTBuffer size packet:                  Tracepoint Packets. (line  406)
-* QTDisable packet:                      Tracepoint Packets. (line  209)
-* QTDisconnected packet:                 Tracepoint Packets. (line  228)
-* QTDP packet:                           Tracepoint Packets. (line   10)
-* QTDPsrc packet:                        Tracepoint Packets. (line   90)
-* QTDV packet:                           Tracepoint Packets. (line  121)
-* QTEnable packet:                       Tracepoint Packets. (line  204)
-* qTfP packet:                           Tracepoint Packets. (line  335)
-* QTFrame packet:                        Tracepoint Packets. (line  133)
-* qTfSTM packet:                         Tracepoint Packets. (line  352)
-* qTfV packet:                           Tracepoint Packets. (line  343)
-* QThreadEvents packet:                  General Query Packets.
-                                                             (line  509)
-* qThreadExtraInfo packet:               General Query Packets.
-                                                             (line 1076)
-* QTinit packet:                         Tracepoint Packets. (line  214)
-* qTMinFTPILen packet:                   Tracepoint Packets. (line  171)
-* QTNotes packet:                        Tracepoint Packets. (line  411)
-* qTP packet:                            Tracepoint Packets. (line  307)
-* QTro packet:                           Tracepoint Packets. (line  217)
-* QTSave packet:                         Tracepoint Packets. (line  387)
-* qTsP packet:                           Tracepoint Packets. (line  336)
-* qTsSTM packet:                         Tracepoint Packets. (line  352)
-* QTStart packet:                        Tracepoint Packets. (line  195)
-* qTStatus packet:                       Tracepoint Packets. (line  234)
-* qTSTMat packet:                        Tracepoint Packets. (line  381)
-* QTStop packet:                         Tracepoint Packets. (line  201)
-* qTsV packet:                           Tracepoint Packets. (line  344)
-* qTV packet:                            Tracepoint Packets. (line  318)
-* qualified thread ID:                   Threads.            (line   52)
-* query attached, remote request:        General Query Packets.
-                                                             (line 1381)
-* quotes in commands:                    Completion.         (line   83)
-* quoting Ada internal identifiers:      Additions to Ada.   (line   76)
-* quoting names:                         Symbols.            (line   14)
-* qXfer packet:                          General Query Packets.
-                                                             (line 1113)
-* r packet:                              Packets.            (line  300)
-* R packet:                              Packets.            (line  305)
-* range checking:                        Type Checking.      (line   45)
-* range stepping:                        Continuing and Stepping.
-                                                             (line  217)
-* ranged breakpoint:                     PowerPC Embedded.   (line   33)
-* ranges of breakpoints:                 Breakpoints.        (line   45)
-* Ravenscar Profile:                     Ravenscar Profile.  (line    6)
-* raw printing:                          Output Formats.     (line   76)
-* read special object, remote request:   General Query Packets.
-                                                             (line 1113)
-* read, file-i/o system call:            read.               (line    6)
-* read-only sections:                    Files.              (line  265)
-* reading symbols from relocatable object files: Files.      (line  146)
-* reading symbols immediately:           Files.              (line   94)
-* readline:                              Editing.            (line    6)
-* Readline application name:             Editing.            (line   29)
-* receive rights, GNU Hurd:              Hurd Native.        (line   84)
-* recent tracepoint number:              Create and Delete Tracepoints.
-                                                             (line  122)
-* record aggregates (Ada):               Omissions from Ada. (line   44)
-* record mode:                           Process Record and Replay.
-                                                             (line   19)
-* record serial communications on file:  Remote Configuration.
-                                                             (line   64)
-* recording a session script:            Bug Reporting.      (line  108)
-* recording inferior's execution and replaying it: Process Record and Replay.
-                                                             (line    6)
-* recordings in python:                  Recordings In Python.
-                                                             (line    6)
-* redirection:                           Input/Output.       (line    6)
-* reference card:                        Formatting Documentation.
-                                                             (line    6)
-* reference declarations:                C Plus Plus Expressions.
-                                                             (line   50)
-* register packet format, MIPS:          MIPS Register packet Format.
-                                                             (line    6)
-* registers:                             Registers.          (line    6)
-* regular expression:                    Set Breaks.         (line   90)
-* reloading the overlay table:           Overlay Commands.   (line   52)
-* relocatable object files, reading symbols from: Files.     (line  146)
-* remote async notification debugging info: Debugging Output.
-                                                             (line  136)
-* remote connection commands:            Connecting.         (line  120)
-* remote connection without stubs:       Server.             (line    6)
-* remote debugging:                      Remote Debugging.   (line    6)
-* remote debugging, connecting:          Connecting.         (line    6)
-* remote debugging, detach and program exit: Connecting.     (line   19)
-* remote debugging, symbol files:        Connecting.         (line   90)
-* remote debugging, types of connections: Connecting.        (line    6)
-* remote memory comparison:              Memory.             (line  142)
-* remote packets, enabling and disabling: Remote Configuration.
-                                                             (line  159)
-* remote programs, interrupting:         Connecting.         (line  239)
-* remote protocol debugging:             Debugging Output.   (line  159)
-* remote protocol, binary data:          Overview.           (line   63)
-* remote protocol, field separator:      Overview.           (line   55)
-* remote query requests:                 General Query Packets.
-                                                             (line    6)
-* remote serial debugging summary:       Debug Session.      (line    6)
-* remote serial debugging, overview:     Remote Stub.        (line   14)
-* remote serial protocol:                Overview.           (line   14)
-* remote serial stub:                    Stub Contents.      (line    6)
-* remote serial stub list:               Remote Stub.        (line   53)
-* remote serial stub, initialization:    Stub Contents.      (line   10)
-* remote serial stub, main routine:      Stub Contents.      (line   15)
-* remote stub, example:                  Remote Stub.        (line    6)
-* remote stub, support routines:         Bootstrapping.      (line    6)
-* remote target:                         Target Commands.    (line   58)
-* remote target, file transfer:          File Transfer.      (line    6)
-* remote target, limit break- and watchpoints: Remote Configuration.
-                                                             (line   79)
-* remote target, limit watchpoints length: Remote Configuration.
-                                                             (line   91)
-* remote timeout:                        Remote Configuration.
-                                                             (line   72)
-* remove actions from a tracepoint:      Tracepoint Actions. (line   21)
-* remove duplicate history:              Command History.    (line   54)
-* rename, file-i/o system call:          rename.             (line    6)
-* Renesas:                               Remote Stub.        (line   62)
-* repeated array elements:               Print Settings.     (line  348)
-* repeating command sequences:           Command Syntax.     (line   41)
-* repeating commands:                    Command Syntax.     (line   21)
-* replay log events, remote reply:       Stop Reply Packets. (line   70)
-* replay mode:                           Process Record and Replay.
-                                                             (line   10)
-* reporting bugs in GDB:                 GDB Bugs.           (line    6)
-* reprint the last value:                Data.               (line  112)
-* reprint the last value <1>:            Compiling and Injecting Code.
-                                                             (line   74)
-* reset environment, remote request:     General Query Packets.
-                                                             (line  197)
-* resources used by commands:            Maintenance Commands.
-                                                             (line  509)
-* response time, MIPS debugging:         MIPS.               (line   10)
-* restart:                               Checkpoint/Restart. (line    6)
-* restore data from a file:              Dump/Restore Files. (line    6)
-* restrictions on Go expressions:        Go.                 (line   35)
-* result records in GDB/MI:              GDB/MI Result Records.
-                                                             (line    6)
-* resume threads of multiple processes simultaneously: All-Stop Mode.
-                                                             (line   54)
-* resuming execution:                    Continuing and Stepping.
-                                                             (line    6)
-* returning from a function:             Returning.          (line    6)
-* reverse execution:                     Reverse Execution.  (line    6)
-* rewind program state:                  Checkpoint/Restart. (line    6)
-* run to first instruction:              Starting.           (line  114)
-* run to main procedure:                 Starting.           (line   81)
-* run until specified location:          Continuing and Stepping.
-                                                             (line  124)
-* running:                               Starting.           (line    6)
-* running programs backward:             Reverse Execution.  (line    6)
-* s packet:                              Packets.            (line  312)
-* S packet:                              Packets.            (line  321)
-* S12Z support:                          S12Z.               (line    6)
-* save breakpoints to a file for future sessions: Save Breakpoints.
-                                                             (line    9)
-* save command history:                  Command History.    (line   36)
-* save GDB output to a file:             Logging Output.     (line    6)
-* save tracepoints for future sessions:  save tracepoints.   (line    6)
-* scheduler locking mode:                All-Stop Mode.      (line   37)
-* scope:                                 M2 Scope.           (line    6)
-* screen size:                           Screen Size.        (line    6)
-* scripting commands:                    Command Files.      (line    6)
-* scripting with guile:                  Guile.              (line    6)
-* scripting with python:                 Python.             (line    6)
-* search for a thread:                   Threads.            (line  258)
-* search path for libthread_db:          Threads.            (line  293)
-* searching memory:                      Searching Memory.   (line    6)
-* searching memory, in remote debugging: General Query Packets.
-                                                             (line  558)
-* searching source files:                Search.             (line    6)
-* section offsets, remote request:       General Query Packets.
-                                                             (line  342)
-* segment descriptor tables:             DJGPP Native.       (line   24)
-* select Ctrl-C, BREAK or BREAK-g:       Remote Configuration.
-                                                             (line  108)
-* select trace snapshot:                 tfind.              (line    6)
-* selected frame:                        Stack.              (line   19)
-* selecting guile pretty-printers:       Selecting Guile Pretty-Printers.
-                                                             (line    6)
-* selecting python pretty-printers:      Selecting Pretty-Printers.
-                                                             (line    6)
-* self tests:                            Maintenance Commands.
-                                                             (line  360)
-* self tests <1>:                        Maintenance Commands.
-                                                             (line  366)
-* semaphores on static probe points:     Static Probe Points.
-                                                             (line   20)
-* send command to remote monitor:        Connecting.         (line  272)
-* send command to simulator:             Embedded Processors.
-                                                             (line    9)
-* send interrupt-sequence on start:      Remote Configuration.
-                                                             (line  121)
-* send rights, GNU Hurd:                 Hurd Native.        (line   84)
-* send the output of a gdb command to a shell command: Shell Commands.
-                                                             (line   25)
-* sending files to remote systems:       File Transfer.      (line    6)
-* separate debug sections:               MiniDebugInfo.      (line    6)
-* separate debugging information files:  Separate Debug Files.
-                                                             (line    6)
-* sequence-id, for GDB remote:           Overview.           (line   30)
-* serial connections, debugging:         Debugging Output.   (line  159)
-* serial line, target remote:            Connecting.         (line  129)
-* serial protocol, GDB remote:           Overview.           (line   14)
-* server prefix:                         Server Prefix.      (line    6)
-* server, command prefix:                Command History.    (line   20)
-* set ABI for MIPS:                      MIPS.               (line   32)
-* set breakpoints in many functions:     Set Breaks.         (line   90)
-* set breakpoints on all functions:      Set Breaks.         (line  117)
-* set environment variable, remote request: General Query Packets.
-                                                             (line  144)
-* set fast tracepoint:                   Create and Delete Tracepoints.
-                                                             (line   50)
-* set inferior controlling terminal:     Input/Output.       (line   44)
-* set static tracepoint:                 Create and Delete Tracepoints.
-                                                             (line   75)
-* set tdesc filename:                    Retrieving Descriptions.
-                                                             (line   18)
-* set tracepoint:                        Create and Delete Tracepoints.
-                                                             (line    6)
-* set working directory, remote request: General Query Packets.
-                                                             (line  219)
-* setting variables:                     Assignment.         (line    6)
-* setting watchpoints:                   Set Watchpoints.    (line    6)
-* settings:                              Command Settings.   (line   39)
-* SH:                                    Remote Stub.        (line   62)
-* sh-stub.c:                             Remote Stub.        (line   62)
-* shared libraries:                      Files.              (line  287)
-* shared library events, remote reply:   Stop Reply Packets. (line   65)
-* shell command, exit code:              Convenience Vars.   (line  187)
-* shell command, exit signal:            Convenience Vars.   (line  187)
-* shell escape:                          Shell Commands.     (line   10)
-* show all convenience functions:        Convenience Funs.   (line  228)
-* show all user variables and functions: Convenience Vars.   (line   37)
-* show inferior's working directory:     Working Directory.  (line   27)
-* show last commands:                    Command History.    (line   95)
-* show tdesc filename:                   Retrieving Descriptions.
-                                                             (line   25)
-* signals:                               Signals.            (line    6)
-* signals the inferior may see, remote request: General Query Packets.
-                                                             (line  469)
-* SIGQUIT signal, dump core of GDB:      Maintenance Commands.
-                                                             (line  169)
-* SingleKey keymap name:                 TUI Single Key Mode.
-                                                             (line   53)
-* size of remote memory accesses:        Packets.            (line  247)
-* size of screen:                        Screen Size.        (line    6)
-* skipping over files via glob-style patterns: Skipping Over Functions and Files.
-                                                             (line   55)
-* skipping over functions and files:     Skipping Over Functions and Files.
-                                                             (line    6)
-* skipping over functions via regular expressions: Skipping Over Functions and Files.
-                                                             (line   68)
-* snapshot of a process:                 Checkpoint/Restart. (line    6)
-* software watchpoints:                  Set Watchpoints.    (line   31)
-* source file and line of a symbol:      Print Settings.     (line   50)
-* source line and its code address:      Machine Code.       (line    6)
-* source location:                       Specify Location.   (line    6)
-* source path:                           Source Path.        (line    6)
-* Sparc:                                 Remote Stub.        (line   65)
-* sparc-stub.c:                          Remote Stub.        (line   65)
-* Sparc64 support:                       Sparc64.            (line    6)
-* sparcl-stub.c:                         Remote Stub.        (line   68)
-* SparcLite:                             Remote Stub.        (line   68)
-* Special Fortran commands:              Special Fortran Commands.
-                                                             (line    6)
-* specifying location:                   Specify Location.   (line    6)
-* SSE registers (x86):                   Registers.          (line   76)
-* stack frame:                           Frames.             (line    6)
-* stack on Alpha:                        MIPS.               (line    6)
-* stack on MIPS:                         MIPS.               (line    6)
-* stack pointer register:                Registers.          (line   31)
-* stacking targets:                      Active Targets.     (line    6)
-* standard registers:                    Registers.          (line   31)
-* start a new independent interpreter:   Interpreters.       (line   52)
-* start a new trace experiment:          Starting and Stopping Trace Experiments.
-                                                             (line    6)
-* starting:                              Starting.           (line    6)
-* startup code, and backtrace:           Backtrace.          (line  155)
-* startup with shell, remote request:    General Query Packets.
-                                                             (line  114)
-* stat, file-i/o system call:            stat/fstat.         (line    6)
-* static members of C++ objects:         Print Settings.     (line  559)
-* static members of Pascal objects:      Print Settings.     (line  570)
-* static probe point, DTrace:            Static Probe Points.
-                                                             (line    6)
-* static probe point, SystemTap:         Static Probe Points.
-                                                             (line    6)
-* static tracepoints:                    Set Tracepoints.    (line   28)
-* static tracepoints, in remote protocol: General Query Packets.
-                                                             (line  961)
-* static tracepoints, setting:           Create and Delete Tracepoints.
-                                                             (line   75)
-* status of trace data collection:       Starting and Stopping Trace Experiments.
-                                                             (line   27)
-* status output in GDB/MI:               GDB/MI Output Syntax.
-                                                             (line   94)
-* stepping:                              Continuing and Stepping.
-                                                             (line    6)
-* stepping and signal handlers:          Signals.            (line  106)
-* stepping into functions with no line info: Continuing and Stepping.
-                                                             (line   92)
-* stop a running trace experiment:       Starting and Stopping Trace Experiments.
-                                                             (line   16)
-* stop on C++ exceptions:                Set Catchpoints.    (line   16)
-* stop reply packets:                    Stop Reply Packets. (line    6)
-* stopped threads:                       Thread Stops.       (line    6)
-* stream records in GDB/MI:              GDB/MI Stream Records.
-                                                             (line    6)
-* string tracing, in remote protocol:    General Query Packets.
-                                                             (line  978)
-* struct gdb_reader_funcs:               Writing JIT Debug Info Readers.
-                                                             (line   22)
-* struct gdb_symbol_callbacks:           Writing JIT Debug Info Readers.
-                                                             (line   43)
-* struct gdb_unwind_callbacks:           Writing JIT Debug Info Readers.
-                                                             (line   43)
-* struct return convention:              i386.               (line    7)
-* struct stat, in file-i/o protocol:     struct stat.        (line    6)
-* struct timeval, in file-i/o protocol:  struct timeval.     (line    6)
-* struct/union returned in registers:    i386.               (line    7)
-* structure field name completion:       Completion.         (line  135)
-* stub example, remote debugging:        Remote Stub.        (line    6)
-* stupid questions:                      Messages/Warnings.  (line   49)
-* styling:                               Output Styling.     (line    6)
-* Super-H:                               Super-H.            (line    6)
-* supported GDB/MI features, list:       GDB/MI Support Commands.
-                                                             (line   57)
-* supported packets, remote query:       General Query Packets.
-                                                             (line  589)
-* switching threads:                     Threads.            (line    6)
-* switching threads automatically:       All-Stop Mode.      (line   28)
-* symbol cache size:                     Symbols.            (line  698)
-* symbol cache, flushing:                Symbols.            (line  714)
-* symbol cache, printing its contents:   Symbols.            (line  706)
-* symbol cache, printing usage statistics: Symbols.          (line  710)
-* symbol decoding style, C++:            Print Settings.     (line  529)
-* symbol dump:                           Symbols.            (line  619)
-* symbol file functions:                 Debugging Output.   (line  205)
-* symbol files, remote debugging:        Connecting.         (line   90)
-* symbol from address:                   Symbols.            (line   95)
-* symbol lookup:                         Debugging Output.   (line  198)
-* symbol lookup, remote request:         General Query Packets.
-                                                             (line 1033)
-* symbol names:                          Symbols.            (line   14)
-* symbol table:                          Files.              (line    6)
-* symbol table creation:                 Debugging Output.   (line  210)
-* symbol tables in guile:                Symbol Tables In Guile.
-                                                             (line    6)
-* symbol tables in python:               Symbol Tables In Python.
-                                                             (line    6)
-* symbol tables, listing GDB's internal: Symbols.            (line  645)
-* symbol, source file and line:          Print Settings.     (line   50)
-* symbols in guile:                      Symbols In Guile.   (line    6)
-* symbols in python:                     Symbols In Python.  (line    6)
-* symbols, never read:                   Files.              (line  101)
-* symbols, reading from relocatable object files: Files.     (line  146)
-* symbols, reading immediately:          Files.              (line   94)
-* Synopsys ARC:                          ARC.                (line    6)
-* syscall DSO:                           Files.              (line  193)
-* system calls and thread breakpoints:   Interrupted System Calls.
-                                                             (line    6)
-* system root, alternate:                Files.              (line  386)
-* system, file-i/o system call:          system.             (line    6)
-* system-wide configuration scripts:     System-wide Configuration Scripts.
-                                                             (line    6)
-* system-wide init file:                 System-wide configuration.
-                                                             (line    6)
-* t packet:                              Packets.            (line  331)
-* T packet:                              Packets.            (line  336)
-* T packet reply:                        Stop Reply Packets. (line   26)
-* tail call frames, debugging:           Tail Call Frames.   (line    6)
-* target architecture:                   Targets.            (line   17)
-* target byte order:                     Byte Order.         (line    6)
-* target character set:                  Character Sets.     (line    6)
-* target debugging info:                 Debugging Output.   (line  217)
-* target descriptions:                   Target Descriptions.
-                                                             (line    6)
-* target descriptions, AArch64 features: AArch64 Features.   (line    6)
-* target descriptions, ARC Features:     ARC Features.       (line    6)
-* target descriptions, ARM features:     ARM Features.       (line    6)
-* target descriptions, enum types:       Enum Target Types.  (line    6)
-* target descriptions, i386 features:    i386 Features.      (line    6)
-* target descriptions, inclusion:        Target Description Format.
-                                                             (line   53)
-* target descriptions, M68K features:    M68K Features.      (line    6)
-* target descriptions, MicroBlaze features: MicroBlaze Features.
-                                                             (line    6)
-* target descriptions, MIPS features:    MIPS Features.      (line    6)
-* target descriptions, NDS32 features:   NDS32 Features.     (line    6)
-* target descriptions, Nios II features: Nios II Features.   (line    6)
-* target descriptions, OpenRISC 1000 features: OpenRISC 1000 Features.
-                                                             (line    6)
-* target descriptions, PowerPC features: PowerPC Features.   (line    6)
-* target descriptions, predefined types: Predefined Target Types.
-                                                             (line    6)
-* target descriptions, RISC-V Features:  RISC-V Features.    (line    6)
-* target descriptions, RX Features:      RX Features.        (line    6)
-* target descriptions, S/390 features:   S/390 and System z Features.
-                                                             (line    6)
-* target descriptions, sparc32 features: Sparc Features.     (line    6)
-* target descriptions, sparc64 features: Sparc Features.     (line    6)
-* target descriptions, standard features: Standard Target Features.
-                                                             (line    6)
-* target descriptions, System z features: S/390 and System z Features.
-                                                             (line    6)
-* target descriptions, TIC6x features:   TIC6x Features.     (line    6)
-* target descriptions, TMS320C6x features: TIC6x Features.   (line    6)
-* target descriptions, XML format:       Target Description Format.
-                                                             (line    6)
-* target memory comparison:              Memory.             (line  142)
-* target output in GDB/MI:               GDB/MI Output Syntax.
-                                                             (line  110)
-* target stack description:              Maintenance Commands.
-                                                             (line  341)
-* target-assisted range stepping:        Continuing and Stepping.
-                                                             (line  217)
-* task attributes (GNU Hurd):            Hurd Native.        (line   48)
-* task breakpoints, in Ada:              Ada Tasks.          (line  135)
-* task exception port, GNU Hurd:         Hurd Native.        (line   67)
-* task suspend count:                    Hurd Native.        (line   59)
-* task switching with program using Ravenscar Profile: Ravenscar Profile.
-                                                             (line   10)
-* TCP port, target remote:               Connecting.         (line  166)
-* temporarily change settings:           Command Settings.   (line   39)
-* terminal:                              Input/Output.       (line    6)
-* Text User Interface:                   TUI.                (line    6)
-* thread attributes info, remote request: General Query Packets.
-                                                             (line 1076)
-* thread breakpoints:                    Thread-Specific Breakpoints.
-                                                             (line   10)
-* thread breakpoints and system calls:   Interrupted System Calls.
-                                                             (line    6)
-* thread create event, remote reply:     Stop Reply Packets. (line  152)
-* thread create/exit events, remote request: General Query Packets.
-                                                             (line  509)
-* thread default settings, GNU Hurd:     Hurd Native.        (line  130)
-* thread exit event, remote reply:       Stop Reply Packets. (line  181)
-* thread ID lists:                       Threads.            (line   65)
-* thread identifier (GDB):               Threads.            (line   47)
-* thread identifier (system):            Threads.            (line   35)
-* thread info (Solaris):                 Threads.            (line  167)
-* thread information, remote request:    General Query Packets.
-                                                             (line  369)
-* thread list format:                    Thread List Format. (line    6)
-* thread number, per inferior:           Threads.            (line   47)
-* thread properties, GNU Hurd:           Hurd Native.        (line   90)
-* thread suspend count, GNU Hurd:        Hurd Native.        (line  109)
-* THREAD-ID, in remote protocol:         Packets.            (line   20)
-* threads and watchpoints:               Set Watchpoints.    (line  179)
-* threads in python:                     Threads In Python.  (line    6)
-* threads of execution:                  Threads.            (line    6)
-* threads, automatic switching:          All-Stop Mode.      (line   28)
-* threads, continuing:                   Thread Stops.       (line    6)
-* threads, stopped:                      Thread Stops.       (line    6)
-* time of command execution:             Maintenance Commands.
-                                                             (line  559)
-* timeout for commands:                  Maintenance Commands.
-                                                             (line  610)
-* timeout for serial communications:     Remote Configuration.
-                                                             (line   72)
-* timeout, for remote target connection: Remote Configuration.
-                                                             (line  147)
-* timestamping debugging info:           Debugging Output.   (line  224)
-* trace experiment, status of:           Starting and Stopping Trace Experiments.
-                                                             (line   27)
-* trace file format:                     Trace File Format.  (line    6)
-* trace files:                           Trace Files.        (line    6)
-* trace state variable value, remote request: Tracepoint Packets.
-                                                             (line  318)
-* trace state variables:                 Trace State Variables.
-                                                             (line    6)
-* traceback:                             Backtrace.          (line    6)
-* traceframe info format:                Traceframe Info Format.
-                                                             (line    6)
-* tracepoint actions:                    Tracepoint Actions. (line    6)
-* tracepoint conditions:                 Tracepoint Conditions.
-                                                             (line    6)
-* tracepoint data, display:              tdump.              (line    6)
-* tracepoint deletion:                   Create and Delete Tracepoints.
-                                                             (line  125)
-* tracepoint number:                     Create and Delete Tracepoints.
-                                                             (line  122)
-* tracepoint packets:                    Tracepoint Packets. (line    6)
-* tracepoint pass count:                 Tracepoint Passcounts.
-                                                             (line    6)
-* tracepoint restrictions:               Tracepoint Restrictions.
-                                                             (line    6)
-* tracepoint status, remote request:     Tracepoint Packets. (line  307)
-* tracepoint variables:                  Tracepoint Variables.
-                                                             (line    6)
-* tracepoints:                           Tracepoints.        (line    6)
-* tracepoints support in gdbserver:      Server.             (line  272)
-* trailing underscore, in Fortran symbols: Fortran.          (line    9)
-* translating between character sets:    Character Sets.     (line    6)
-* TUI:                                   TUI.                (line    6)
-* TUI commands:                          TUI Commands.       (line    6)
-* TUI configuration variables:           TUI Configuration.  (line    6)
-* TUI key bindings:                      TUI Keys.           (line    6)
-* TUI single key mode:                   TUI Single Key Mode.
-                                                             (line    6)
-* type casting memory:                   Expressions.        (line   41)
-* type chain of a data type:             Maintenance Commands.
-                                                             (line  353)
-* type checking:                         Checks.             (line   24)
-* type conversions in C++:               C Plus Plus Expressions.
-                                                             (line   26)
-* type printer:                          Type Printing API.  (line    9)
-* type printing API for Python:          Type Printing API.  (line    6)
-* types in guile:                        Types In Guile.     (line    6)
-* types in Python:                       Types In Python.    (line    6)
-* UDP port, target remote:               Connecting.         (line  215)
-* union field name completion:           Completion.         (line  135)
-* unions in structures, printing:        Print Settings.     (line  469)
-* Unix domain socket:                    Connecting.         (line  140)
-* unknown address, locating:             Output Formats.     (line   35)
-* unknown type:                          Symbols.            (line  363)
-* unlink, file-i/o system call:          unlink.             (line    6)
-* unlinked object files:                 Files.              (line   26)
-* unload symbols from shared libraries:  Files.              (line  348)
-* unmap an overlay:                      Overlay Commands.   (line   39)
-* unmapped overlays:                     How Overlays Work.  (line    6)
-* unset environment variable, remote request: General Query Packets.
-                                                             (line  173)
-* unset tdesc filename:                  Retrieving Descriptions.
-                                                             (line   21)
-* unsupported languages:                 Unsupported Languages.
-                                                             (line    6)
-* unwind stack in called functions:      Calling.            (line   36)
-* unwind stack in called functions with unhandled exceptions: Calling.
-                                                             (line   47)
-* unwinding frames in Python:            Unwinding Frames in Python.
-                                                             (line    6)
-* use only software watchpoints:         Set Watchpoints.    (line  108)
-* user registers:                        Maintenance Commands.
-                                                             (line  312)
-* user-defined command:                  Define.             (line    6)
-* user-defined macros:                   Macros.             (line   59)
-* user-defined variables:                Convenience Vars.   (line    6)
-* value history:                         Value History.      (line    6)
-* values from inferior, in guile:        Values From Inferior In Guile.
-                                                             (line    6)
-* values from inferior, with Python:     Values From Inferior.
-                                                             (line    6)
-* variable name conflict:                Variables.          (line   36)
-* variable object debugging info:        Debugging Output.   (line  231)
-* variable objects in GDB/MI:            GDB/MI Variable Objects.
-                                                             (line    9)
-* variable values, wrong:                Variables.          (line  106)
-* variables, readline:                   Readline Init File Syntax.
-                                                             (line   34)
-* variables, setting:                    Assignment.         (line   16)
-* vAttach packet:                        Packets.            (line  350)
-* vCont packet:                          Packets.            (line  368)
-* vCont? packet:                         Packets.            (line  435)
-* vCtrlC packet:                         Packets.            (line  445)
-* vector unit:                           Vector Unit.        (line    6)
-* vector, auxiliary:                     OS Information.     (line    9)
-* verbose operation:                     Messages/Warnings.  (line    6)
-* verify remote memory image:            Memory.             (line  142)
-* verify target memory image:            Memory.             (line  142)
-* vFile packet:                          Packets.            (line  459)
-* vFlashDone packet:                     Packets.            (line  498)
-* vFlashErase packet:                    Packets.            (line  463)
-* vFlashWrite packet:                    Packets.            (line  478)
-* vfork events, remote reply:            Stop Reply Packets. (line  116)
-* vforkdone events, remote reply:        Stop Reply Packets. (line  128)
-* virtual functions (C++) display:       Print Settings.     (line  581)
-* vKill packet:                          Packets.            (line  505)
-* vMustReplyEmpty packet:                Packets.            (line  517)
-* volatile registers:                    Registers.          (line  106)
-* vRun packet:                           Packets.            (line  529)
-* vStopped packet:                       Packets.            (line  544)
-* VTBL display:                          Print Settings.     (line  581)
-* watchdog timer:                        Maintenance Commands.
-                                                             (line  610)
-* watchpoints:                           Breakpoints.        (line   17)
-* watchpoints and threads:               Set Watchpoints.    (line  179)
-* where to look for shared libraries:    Files.              (line  381)
-* wild pointer, interpreting:            Print Settings.     (line   80)
-* Wind River Linux system-wide configuration script: System-wide Configuration Scripts.
-                                                             (line   22)
-* word completion:                       Completion.         (line    6)
-* working directory:                     Source Path.        (line   40)
-* working directory (of your program):   Working Directory.  (line    6)
-* working language:                      Languages.          (line   13)
-* write data into object, remote request: General Query Packets.
-                                                             (line 1338)
-* write, file-i/o system call:           write.              (line    6)
-* writing a frame filter:                Writing a Frame Filter.
-                                                             (line    6)
-* writing a Guile pretty-printer:        Writing a Guile Pretty-Printer.
-                                                             (line    6)
-* writing a pretty-printer:              Writing a Pretty-Printer.
-                                                             (line    6)
-* writing convenience functions:         Functions In Python.
-                                                             (line    6)
-* writing into corefiles:                Patching.           (line    6)
-* writing into executables:              Patching.           (line    6)
-* writing into executables <1>:          Compiling and Injecting Code.
-                                                             (line    6)
-* writing JIT debug info readers:        Writing JIT Debug Info Readers.
-                                                             (line    6)
-* writing xmethods in Python:            Writing an Xmethod. (line    6)
-* wrong values:                          Variables.          (line  106)
-* x command, default address:            Machine Code.       (line   34)
-* X packet:                              Packets.            (line  547)
-* Xilinx MicroBlaze:                     MicroBlaze.         (line    6)
-* XInclude:                              Target Description Format.
-                                                             (line   53)
-* XMD, Xilinx Microprocessor Debugger:   MicroBlaze.         (line    6)
-* xmethod API:                           Xmethod API.        (line    6)
-* xmethods in Python:                    Xmethods In Python. (line    6)
-* XML parser debugging:                  Debugging Output.   (line  237)
-* yanking text:                          Readline Killing Commands.
-                                                             (line    6)
-* z packet:                              Packets.            (line  560)
-* Z packets:                             Packets.            (line  560)
-* z0 packet:                             Packets.            (line  575)
-* Z0 packet:                             Packets.            (line  575)
-* z1 packet:                             Packets.            (line  630)
-* Z1 packet:                             Packets.            (line  630)
-* z2 packet:                             Packets.            (line  651)
-* Z2 packet:                             Packets.            (line  651)
-* z3 packet:                             Packets.            (line  664)
-* Z3 packet:                             Packets.            (line  664)
-* z4 packet:                             Packets.            (line  677)
-* Z4 packet:                             Packets.            (line  677)
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-8 ./gdb/doc/gdb.info-8
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.info-8	2020-03-07 02:11:39.000000000 +0000
+++ ./gdb/doc/gdb.info-8	2021-12-16 02:00:33.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-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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.1.90.20200307-git.
+Source-Level Debugger' for GDB (GDB) Version 11.1.90.20211216-git.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 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,2514 @@ this GNU Manual.  Buying copies from GNU
 developing GNU and promoting software freedom."
 
 
+File: gdb.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Copying,  Up: Top
+
+Appendix M GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     <http://fsf.org/>
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.  We
+     recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it can
+     be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You accept
+     the license if you copy, modify or distribute the work in a way
+     requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in the
+     notice that says that the Document is released under this License.
+     If a section does not fit the above definition of Secondary then it
+     is not allowed to be designated as Invariant.  The Document may
+     contain zero Invariant Sections.  If the Document does not identify
+     any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images composed
+     of pixels) generic paint programs or (for drawings) some widely
+     available drawing editor, and that is suitable for input to text
+     formatters or for automatic translation to a variety of formats
+     suitable for input to text formatters.  A copy made in an otherwise
+     Transparent file format whose markup, or absence of markup, has
+     been arranged to thwart or discourage subsequent modification by
+     readers is not Transparent.  An image format is not Transparent if
+     used for any substantial amount of text.  A copy that is not
+     "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and standard-conforming
+     simple HTML, PostScript or PDF designed for human modification.
+     Examples of transparent image formats include PNG, XCF and JPG.
+     Opaque formats include proprietary formats that can be read and
+     edited only by proprietary word processors, SGML or XML for which
+     the DTD and/or processing tools are not generally available, and
+     the machine-generated HTML, PostScript or PDF produced by some word
+     processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow the
+     conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the title
+     equally prominent and visible.  You may add other material on the
+     covers in addition.  Copying with changes limited to the covers, as
+     long as they preserve the title of the Document and satisfy these
+     conditions, can be treated as verbatim copying in other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a machine-readable
+     Transparent copy along with each Opaque copy, or state in or with
+     each Opaque copy a computer-network location from which the general
+     network-using public has access to download using public-standard
+     network protocols a complete Transparent copy of the Document, free
+     of added material.  If you use the latter option, you must take
+     reasonably prudent steps, when you begin distribution of Opaque
+     copies in quantity, to ensure that this Transparent copy will
+     remain thus accessible at the stated location until at least one
+     year after the last time you distribute an Opaque copy (directly or
+     through your agents or retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of copies,
+     to give them a chance to provide you with an updated version of the
+     Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with the
+     Modified Version filling the role of the Document, thus licensing
+     distribution and modification of the Modified Version to whoever
+     possesses a copy of it.  In addition, you must do these things in
+     the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of previous
+          versions (which should, if there were any, be listed in the
+          History section of the Document).  You may use the same title
+          as a previous version if the original publisher of that
+          version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on the
+          Title Page.  If there is no section Entitled "History" in the
+          Document, create one stating the title, year, authors, and
+          publisher of the Document as given on its Title Page, then add
+          an item describing the Modified Version as stated in the
+          previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in the
+          "History" section.  You may omit a network location for a work
+          that was published at least four years before the Document
+          itself, or if the original publisher of the version it refers
+          to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the section
+          all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document, unaltered
+          in their text and in their titles.  Section numbers or the
+          equivalent are not considered part of the section titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option designate
+     some or all of these sections as invariant.  To do this, add their
+     titles to the list of Invariant Sections in the Modified Version's
+     license notice.  These titles must be distinct from any other
+     section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end of
+     the list of Cover Texts in the Modified Version.  Only one passage
+     of Front-Cover Text and one of Back-Cover Text may be added by (or
+     through arrangements made by) any one entity.  If the Document
+     already includes a cover text for the same cover, previously added
+     by you or by arrangement made by the same entity you are acting on
+     behalf of, you may not add another; but you may replace the old
+     one, on explicit permission from the previous publisher that added
+     the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination all
+     of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the documents
+     in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow this
+     License in all other respects regarding verbatim copying of that
+     document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of a
+     storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly and
+     finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from you
+     under this License.  If your rights have been terminated and not
+     permanently reinstated, receipt of a copy of some or all of the
+     same material does not give you any rights to use it.
+
+  10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     <http://www.gnu.org/copyleft/>.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If the
+     Document does not specify a version number of this License, you may
+     choose any version ever published (not as a draft) by the Free
+     Software Foundation.  If the Document specifies that a proxy can
+     decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+  11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts."  line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: gdb.info,  Node: Concept Index,  Next: Command and Variable Index,  Prev: GNU Free Documentation License,  Up: Top
+
+Concept Index
+*************
+
+[index]
+* Menu:
+
+* ! packet:                              Packets.            (line   49)
+* "No symbol "foo" in current context":  Variables.          (line  122)
+* # in Modula-2:                         GDB/M2.             (line   18)
+* $:                                     Value History.      (line   13)
+* $$:                                    Value History.      (line   13)
+* $_ and info breakpoints:               Set Breaks.         (line  188)
+* $_ and info line:                      Machine Code.       (line   34)
+* $_, $__, and value history:            Memory.             (line  136)
+* &, background execution of commands:   Background Execution.
+                                                             (line   16)
+* --annotate:                            Mode Options.       (line  110)
+* --args:                                Mode Options.       (line  123)
+* --attach, gdbserver option:            Server.             (line   86)
+* --batch:                               Mode Options.       (line   33)
+* --batch-silent:                        Mode Options.       (line   51)
+* --baud:                                Mode Options.       (line  129)
+* --cd:                                  Mode Options.       (line   90)
+* --command:                             File Options.       (line   51)
+* --configuration:                       Mode Options.       (line  173)
+* --core:                                File Options.       (line   43)
+* --data-directory:                      Mode Options.       (line   95)
+* --debug, gdbserver option:             Server.             (line  146)
+* --debug-file, gdbserver option:        Server.             (line  148)
+* --debug-format, gdbserver option:      Server.             (line  153)
+* --directory:                           File Options.       (line   87)
+* --early-init-command:                  File Options.       (line   77)
+* --early-init-eval-command:             File Options.       (line   82)
+* --eval-command:                        File Options.       (line   57)
+* --exec:                                File Options.       (line   35)
+* --fullname:                            Mode Options.       (line  100)
+* --init-command:                        File Options.       (line   67)
+* --init-eval-command:                   File Options.       (line   72)
+* --interpreter:                         Mode Options.       (line  148)
+* --multi, gdbserver option:             Connecting.         (line   45)
+* --nh:                                  Mode Options.       (line   15)
+* --nowindows:                           Mode Options.       (line   80)
+* --nx:                                  Mode Options.       (line   11)
+* --once, gdbserver option:              Server.             (line  126)
+* --pid:                                 File Options.       (line   47)
+* --quiet:                               Mode Options.       (line   23)
+* --readnever, command-line option:      File Options.       (line   97)
+* --readnow:                             File Options.       (line   91)
+* --remote-debug, gdbserver option:      Server.             (line  147)
+* --return-child-result:                 Mode Options.       (line   63)
+* --se:                                  File Options.       (line   39)
+* --selftest:                            Server.             (line  187)
+* --silent:                              Mode Options.       (line   23)
+* --statistics:                          Mode Options.       (line  165)
+* --symbols:                             File Options.       (line   31)
+* --tty:                                 Mode Options.       (line  138)
+* --tui:                                 Mode Options.       (line  141)
+* --version:                             Mode Options.       (line  169)
+* --windows:                             Mode Options.       (line   86)
+* --with-gdb-datadir:                    Data Files.         (line   19)
+* --with-relocated-sources:              Source Path.        (line  149)
+* --with-sysroot:                        Files.              (line  463)
+* --wrapper, gdbserver option:           Server.             (line  166)
+* --write:                               Mode Options.       (line  160)
+* -b:                                    Mode Options.       (line  129)
+* -c:                                    File Options.       (line   43)
+* -d:                                    File Options.       (line   87)
+* -D:                                    Mode Options.       (line   95)
+* -e:                                    File Options.       (line   35)
+* -eiex:                                 File Options.       (line   82)
+* -eix:                                  File Options.       (line   77)
+* -ex:                                   File Options.       (line   57)
+* -f:                                    Mode Options.       (line  100)
+* -iex:                                  File Options.       (line   72)
+* -info-gdb-mi-command:                  GDB/MI Support Commands.
+                                                             (line   14)
+* -ix:                                   File Options.       (line   67)
+* -l:                                    Mode Options.       (line  133)
+* -n:                                    Mode Options.       (line   11)
+* -nw:                                   Mode Options.       (line   80)
+* -p:                                    File Options.       (line   47)
+* -q:                                    Mode Options.       (line   23)
+* -r:                                    File Options.       (line   91)
+* -readnever, option for symbol-file command: Files.         (line  101)
+* -s:                                    File Options.       (line   31)
+* -t:                                    Mode Options.       (line  138)
+* -w:                                    Mode Options.       (line   86)
+* -x:                                    File Options.       (line   51)
+* ., Modula-2 scope operator:            M2 Scope.           (line    6)
+* .build-id directory:                   Separate Debug Files.
+                                                             (line    6)
+* .debug subdirectories:                 Separate Debug Files.
+                                                             (line    6)
+* .debug_gdb_scripts section:            dotdebug_gdb_scripts section.
+                                                             (line    6)
+* .gdbinit:                              Initialization Files.
+                                                             (line  107)
+* .gdb_index section:                    Index Files.        (line    6)
+* .gdb_index section format:             Index Section Format.
+                                                             (line    6)
+* .gnu_debugdata section:                MiniDebugInfo.      (line    6)
+* .gnu_debuglink sections:               Separate Debug Files.
+                                                             (line   79)
+* .note.gnu.build-id sections:           Separate Debug Files.
+                                                             (line   95)
+* .o files, reading symbols from:        Files.              (line  146)
+* /proc:                                 Process Information.
+                                                             (line    6)
+* <architecture>:                        Target Description Format.
+                                                             (line   72)
+* <compatible>:                          Target Description Format.
+                                                             (line   95)
+* <feature>:                             Target Description Format.
+                                                             (line  119)
+* <flags>:                               Target Description Format.
+                                                             (line  163)
+* <not saved> values:                    Registers.          (line  106)
+* <osabi>:                               Target Description Format.
+                                                             (line   82)
+* <reg>:                                 Target Description Format.
+                                                             (line  222)
+* <struct>:                              Target Description Format.
+                                                             (line  163)
+* <union>:                               Target Description Format.
+                                                             (line  153)
+* <vector>:                              Target Description Format.
+                                                             (line  146)
+* ? packet:                              Packets.            (line   58)
+* _NSPrintForDebugger, and printing Objective-C objects: The Print Command with Objective-C.
+                                                             (line   11)
+* {TYPE}:                                Expressions.        (line   41)
+* A packet:                              Packets.            (line   66)
+* AArch64 Memory Tagging Extension.:     AArch64.            (line   44)
+* AArch64 Pointer Authentication.:       AArch64.            (line   34)
+* AArch64 support:                       AArch64.            (line    6)
+* AArch64 SVE.:                          AArch64.            (line   19)
+* abbreviation:                          Command Syntax.     (line   13)
+* acknowledgment, for GDB remote:        Packet Acknowledgment.
+                                                             (line    6)
+* active targets:                        Active Targets.     (line    6)
+* Ada:                                   Ada.                (line    6)
+* Ada exception catching:                Set Catchpoints.    (line   66)
+* Ada exception handlers catching:       Set Catchpoints.    (line   92)
+* Ada mode, general:                     Ada Mode Intro.     (line    6)
+* Ada settings:                          Ada Settings.       (line    6)
+* Ada task switching:                    Ada Tasks.          (line  115)
+* Ada tasking and core file debugging:   Ada Tasks and Core Files.
+                                                             (line    6)
+* Ada, deviations from:                  Additions to Ada.   (line    6)
+* Ada, omissions from:                   Omissions from Ada. (line    6)
+* Ada, problems:                         Ada Glitches.       (line    6)
+* Ada, tasking:                          Ada Tasks.          (line    6)
+* add new commands for external monitor: Connecting.         (line  279)
+* address locations:                     Address Locations.  (line    6)
+* address of a symbol:                   Symbols.            (line   98)
+* address size for remote targets:       Remote Configuration.
+                                                             (line   12)
+* addressable memory unit:               Memory.             (line  150)
+* aggregates (Ada):                      Omissions from Ada. (line   44)
+* AIX shared library debugging:          Debugging Output.   (line   33)
+* AIX threads:                           Debugging Output.   (line   40)
+* aliases for commands:                  Aliases.            (line    6)
+* aliases for commands, default arguments: Command aliases default args.
+                                                             (line    6)
+* alignment of remote memory accesses:   Packets.            (line  248)
+* all-stop mode:                         All-Stop Mode.      (line    6)
+* Alpha stack:                           MIPS.               (line    6)
+* ambiguous expressions:                 Ambiguous Expressions.
+                                                             (line    6)
+* annotations:                           Annotations Overview.
+                                                             (line    6)
+* annotations for errors, warnings and interrupts: Errors.   (line    6)
+* annotations for invalidation messages: Invalidation.       (line    6)
+* annotations for prompts:               Prompting.          (line    6)
+* annotations for running programs:      Annotations for Running.
+                                                             (line    6)
+* annotations for source display:        Source Annotations. (line    6)
+* append data to a file:                 Dump/Restore Files. (line    6)
+* Application Data Integrity:            Sparc64.            (line    5)
+* apply a command to all frames (ignoring errors and empty output): Frame Apply.
+                                                             (line   96)
+* apply a command to all frames of all threads (ignoring errors and empty output): Threads.
+                                                             (line  229)
+* apply command to all threads (ignoring errors and empty output): Threads.
+                                                             (line  222)
+* apply command to several frames:       Frame Apply.        (line    6)
+* apply command to several threads:      Threads.            (line  187)
+* ARC EM:                                ARC.                (line    6)
+* ARC HS:                                ARC.                (line    6)
+* ARC specific commands:                 ARC.                (line    6)
+* ARC600:                                ARC.                (line    6)
+* ARC700:                                ARC.                (line    6)
+* architecture debugging info:           Debugging Output.   (line   26)
+* argument count in user-defined commands: Define.           (line   25)
+* arguments (to your program):           Arguments.          (line    6)
+* arguments, to gdbserver:               Server.             (line   34)
+* arguments, to user-defined commands:   Define.             (line    6)
+* ARM 32-bit mode:                       ARM.                (line   16)
+* ARM AArch64:                           Debugging Output.   (line   19)
+* array aggregates (Ada):                Omissions from Ada. (line   44)
+* arrays:                                Arrays.             (line    6)
+* arrays in expressions:                 Expressions.        (line   13)
+* arrays slices (Fortran):               Special Fortran Commands.
+                                                             (line   13)
+* artificial array:                      Arrays.             (line    6)
+* assembly instructions:                 Machine Code.       (line   43)
+* assignment:                            Assignment.         (line    6)
+* async output in GDB/MI:                GDB/MI Output Syntax.
+                                                             (line   98)
+* async records in GDB/MI:               GDB/MI Async Records.
+                                                             (line    6)
+* asynchronous execution:                Background Execution.
+                                                             (line    6)
+* asynchronous execution, and process record and replay: Process Record and Replay.
+                                                             (line  101)
+* AT&T disassembly flavor:               Machine Code.       (line  237)
+* attach:                                Attach.             (line    6)
+* attach to a program, gdbserver:        Server.             (line   86)
+* auto-loading:                          Auto-loading.       (line    6)
+* auto-loading extensions:               Auto-loading extensions.
+                                                             (line    6)
+* auto-loading init file in the current directory: Init File in the Current Directory.
+                                                             (line    6)
+* auto-loading libthread_db.so.1:        libthread_db.so.1 file.
+                                                             (line    6)
+* auto-loading safe-path:                Auto-loading safe path.
+                                                             (line    6)
+* auto-loading verbose mode:             Auto-loading verbose mode.
+                                                             (line    6)
+* auto-retry, for remote TCP target:     Remote Configuration.
+                                                             (line  131)
+* automatic display:                     Auto Display.       (line    6)
+* automatic hardware breakpoints:        Set Breaks.         (line  351)
+* automatic overlay debugging:           Automatic Overlay Debugging.
+                                                             (line    6)
+* automatic symbol index cache:          Index Files.        (line   73)
+* automatic thread selection:            All-Stop Mode.      (line   28)
+* auxiliary vector:                      OS Information.     (line    9)
+* AVR:                                   AVR.                (line    6)
+* b packet:                              Packets.            (line   77)
+* B packet:                              Packets.            (line   92)
+* background execution:                  Background Execution.
+                                                             (line    6)
+* backtrace beyond main function:        Backtrace.          (line  155)
+* backtrace limit:                       Backtrace.          (line  192)
+* base name differences:                 Files.              (line  530)
+* baud rate for remote targets:          Remote Configuration.
+                                                             (line   21)
+* bc packet:                             Packets.            (line   97)
+* bcache statistics:                     Maintenance Commands.
+                                                             (line  351)
+* bits in remote address:                Remote Configuration.
+                                                             (line   12)
+* blocks in guile:                       Blocks In Guile.    (line    6)
+* blocks in python:                      Blocks In Python.   (line    6)
+* bookmark:                              Checkpoint/Restart. (line    6)
+* boundary violations, Intel MPX:        Signals.            (line  197)
+* branch trace configuration format:     Branch Trace Configuration Format.
+                                                             (line    6)
+* branch trace format:                   Branch Trace Format.
+                                                             (line    6)
+* branch trace store:                    Process Record and Replay.
+                                                             (line   70)
+* break in overloaded functions:         Debugging C Plus Plus.
+                                                             (line    9)
+* break on a system call.:               Set Catchpoints.    (line  120)
+* break on fork/exec:                    Set Catchpoints.    (line  116)
+* BREAK signal instead of Ctrl-C:        Remote Configuration.
+                                                             (line   36)
+* breakpoint address adjusted:           Breakpoint-related Warnings.
+                                                             (line    6)
+* breakpoint at static probe point:      Linespec Locations. (line   65)
+* breakpoint commands:                   Break Commands.     (line    6)
+* breakpoint commands for GDB/MI:        GDB/MI Breakpoint Commands.
+                                                             (line    6)
+* breakpoint commands, in remote protocol: General Query Packets.
+                                                             (line 1058)
+* breakpoint conditions:                 Conditions.         (line    6)
+* breakpoint kinds, ARM:                 ARM Breakpoint Kinds.
+                                                             (line    6)
+* breakpoint kinds, MIPS:                MIPS Breakpoint Kinds.
+                                                             (line    6)
+* breakpoint lists:                      Breakpoints.        (line   45)
+* breakpoint numbers:                    Breakpoints.        (line   38)
+* breakpoint on events:                  Breakpoints.        (line   30)
+* breakpoint on memory address:          Breakpoints.        (line   17)
+* breakpoint on variable modification:   Breakpoints.        (line   17)
+* breakpoint ranges:                     Breakpoints.        (line   45)
+* breakpoint subroutine, remote:         Stub Contents.      (line   31)
+* breakpointing Ada elaboration code:    Stopping Before Main Program.
+                                                             (line    6)
+* breakpoints:                           Breakpoints.        (line    6)
+* breakpoints and tasks, in Ada:         Ada Tasks.          (line  135)
+* breakpoints and threads:               Thread-Specific Breakpoints.
+                                                             (line   10)
+* breakpoints at functions matching a regexp: Set Breaks.    (line  145)
+* breakpoints in guile:                  Breakpoints In Guile.
+                                                             (line    6)
+* breakpoints in overlays:               Overlay Commands.   (line   91)
+* breakpoints in python:                 Breakpoints In Python.
+                                                             (line    6)
+* breakpoints, multiple locations:       Set Breaks.         (line  255)
+* bs packet:                             Packets.            (line  103)
+* bug criteria:                          Bug Criteria.       (line    6)
+* bug reports:                           Bug Reporting.      (line    6)
+* bugs in GDB:                           GDB Bugs.           (line    6)
+* build ID sections:                     Separate Debug Files.
+                                                             (line   95)
+* build ID, and separate debugging files: Separate Debug Files.
+                                                             (line    6)
+* building GDB, requirements for:        Requirements.       (line    6)
+* built-in simulator target:             Target Commands.    (line   73)
+* builtin Go functions:                  Go.                 (line   31)
+* builtin Go types:                      Go.                 (line   28)
+* C and C++:                             C.                  (line    6)
+* C and C++ checks:                      C Checks.           (line    6)
+* C and C++ constants:                   C Constants.        (line    6)
+* C and C++ defaults:                    C Defaults.         (line    6)
+* C and C++ operators:                   C Operators.        (line    6)
+* c packet:                              Packets.            (line  110)
+* C packet:                              Packets.            (line  119)
+* C++:                                   C.                  (line   10)
+* C++ compilers:                         C Plus Plus Expressions.
+                                                             (line    8)
+* C++ demangling:                        Debugging C Plus Plus.
+                                                             (line   36)
+* C++ exception handling:                Debugging C Plus Plus.
+                                                             (line   20)
+* C++ overload debugging info:           Debugging Output.   (line  188)
+* C++ scope resolution:                  Variables.          (line   90)
+* C++ symbol decoding style:             Print Settings.     (line  541)
+* C++ symbol display:                    Debugging C Plus Plus.
+                                                             (line   40)
+* caching data of targets:               Caching Target Data.
+                                                             (line    6)
+* caching of bfd objects:                File Caching.       (line    6)
+* caching of opened files:               File Caching.       (line    6)
+* call dummy stack unwinding:            Calling.            (line   36)
+* call dummy stack unwinding on unhandled exception.: Calling.
+                                                             (line   47)
+* call overloaded functions:             C Plus Plus Expressions.
+                                                             (line   26)
+* call stack:                            Stack.              (line    9)
+* call stack traces:                     Backtrace.          (line    6)
+* call-clobbered registers:              Registers.          (line  106)
+* caller-saved registers:                Registers.          (line  106)
+* calling functions:                     Calling.            (line    6)
+* calling functions in the program, disabling: Calling.      (line   59)
+* calling make:                          Shell Commands.     (line   22)
+* case sensitivity in symbol names:      Symbols.            (line   27)
+* case-insensitive symbol names:         Symbols.            (line   27)
+* casts, in expressions:                 Expressions.        (line   26)
+* casts, to view memory:                 Expressions.        (line   41)
+* catch Ada exceptions:                  Set Catchpoints.    (line   66)
+* catch Ada exceptions when handled:     Set Catchpoints.    (line   92)
+* catch syscalls from inferior, remote request: General Query Packets.
+                                                             (line  474)
+* catchpoints:                           Breakpoints.        (line   30)
+* catchpoints, setting:                  Set Catchpoints.    (line    6)
+* change GDB's working directory:        Working Directory.  (line   32)
+* change inferior's working directory:   Working Directory.  (line   13)
+* character sets:                        Character Sets.     (line    6)
+* charset:                               Character Sets.     (line    6)
+* checkpoint:                            Checkpoint/Restart. (line    6)
+* checkpoints and process id:            Checkpoint/Restart. (line   76)
+* checks, range:                         Type Checking.      (line   44)
+* checks, type:                          Checks.             (line   23)
+* checksum, for GDB remote:              Overview.           (line   21)
+* choosing target byte order:            Byte Order.         (line    6)
+* circular trace buffer:                 Starting and Stopping Trace Experiments.
+                                                             (line   80)
+* clearing breakpoints, watchpoints, catchpoints: Delete Breaks.
+                                                             (line    6)
+* close, file-i/o system call:           close.              (line    6)
+* closest symbol and offset for an address: Symbols.         (line  108)
+* code address and its source line:      Machine Code.       (line   28)
+* code compression, MIPS:                MIPS.               (line   49)
+* COFF/PE exported symbols:              Debugging Output.   (line   56)
+* collected data discarded:              Starting and Stopping Trace Experiments.
+                                                             (line    6)
+* colon, doubled as scope operator:      M2 Scope.           (line    6)
+* colon-colon, context for variables/functions: Variables.   (line   44)
+* colors:                                Output Styling.     (line    6)
+* command editing:                       Readline Bare Essentials.
+                                                             (line    6)
+* command files:                         Command Files.      (line    6)
+* command history:                       Command History.    (line    6)
+* command hooks:                         Hooks.              (line    6)
+* command interpreters:                  Interpreters.       (line    6)
+* command line editing:                  Editing.            (line    6)
+* command options:                       Command Options.    (line    6)
+* command options, boolean:              Command Options.    (line   21)
+* command options, raw input:            Command Options.    (line   13)
+* command scripts, debugging:            Messages/Warnings.  (line   65)
+* command tracing:                       Messages/Warnings.  (line   60)
+* commands for C++:                      Debugging C Plus Plus.
+                                                             (line    6)
+* commands in guile:                     Commands In Guile.  (line    6)
+* commands in python:                    Commands In Python. (line    6)
+* commands to access guile:              Guile Commands.     (line    6)
+* commands to access python:             Python Commands.    (line    6)
+* comment:                               Command Syntax.     (line   37)
+* COMMON blocks, Fortran:                Special Fortran Commands.
+                                                             (line    9)
+* common targets:                        Target Commands.    (line   46)
+* compatibility, GDB/MI and CLI:         GDB/MI Compatibility with CLI.
+                                                             (line    6)
+* compilation directory:                 Source Path.        (line   40)
+* compile C++ type conversion:           Compiling and Injecting Code.
+                                                             (line   90)
+* compile command debugging info:        Compiling and Injecting Code.
+                                                             (line   82)
+* compile command driver filename override: Compiling and Injecting Code.
+                                                             (line  300)
+* compile command options override:      Compiling and Injecting Code.
+                                                             (line  125)
+* compiling code:                        Compiling and Injecting Code.
+                                                             (line    6)
+* completion:                            Completion.         (line    6)
+* completion of Guile commands:          Commands In Guile.  (line  100)
+* completion of Python commands:         Commands In Python. (line   70)
+* completion of quoted strings:          Completion.         (line   83)
+* completion of structure field names:   Completion.         (line  135)
+* completion of union field names:       Completion.         (line  135)
+* compressed debug sections:             Requirements.       (line  117)
+* conditional breakpoints:               Conditions.         (line    6)
+* conditional tracepoints:               Tracepoint Conditions.
+                                                             (line    6)
+* configuring GDB:                       Running Configure.  (line    6)
+* confirmation:                          Messages/Warnings.  (line   49)
+* connection timeout, for remote TCP target: Remote Configuration.
+                                                             (line  147)
+* console i/o as part of file-i/o:       Console I/O.        (line    6)
+* console interpreter:                   Interpreters.       (line   21)
+* console output in GDB/MI:              GDB/MI Output Syntax.
+                                                             (line  106)
+* constants, in file-i/o protocol:       Constants.          (line    6)
+* continuing:                            Continuing and Stepping.
+                                                             (line    6)
+* continuing threads:                    Thread Stops.       (line    6)
+* control C, and remote debugging:       Bootstrapping.      (line   25)
+* controlling terminal:                  Input/Output.       (line   23)
+* convenience functions:                 Convenience Funs.   (line    6)
+* convenience functions in python:       Functions In Python.
+                                                             (line    6)
+* convenience variables:                 Convenience Vars.   (line    6)
+* convenience variables for tracepoints: Tracepoint Variables.
+                                                             (line    6)
+* convenience variables, and trace state variables: Trace State Variables.
+                                                             (line   17)
+* convenience variables, initializing:   Convenience Vars.   (line   42)
+* core dump file:                        Files.              (line    6)
+* core dump file target:                 Target Commands.    (line   54)
+* crash of debugger:                     Bug Criteria.       (line    9)
+* CRC algorithm definition:              Separate Debug Files.
+                                                             (line  140)
+* CRC of memory block, remote request:   General Query Packets.
+                                                             (line   65)
+* CRIS:                                  CRIS.               (line    6)
+* CRIS mode:                             CRIS.               (line   26)
+* CRIS version:                          CRIS.               (line   10)
+* Ctrl-BREAK, MS-Windows:                Cygwin Native.      (line    9)
+* ctrl-c message, in file-i/o protocol:  The Ctrl-C Message. (line    6)
+* current Ada task ID:                   Ada Tasks.          (line  105)
+* current directory:                     Source Path.        (line   40)
+* current Go package:                    Go.                 (line   11)
+* current thread:                        Threads.            (line   29)
+* current thread, remote request:        General Query Packets.
+                                                             (line   55)
+* custom JIT debug info:                 Custom Debug Info.  (line    6)
+* Cygwin DLL, debugging:                 Cygwin Native.      (line   60)
+* Cygwin-specific commands:              Cygwin Native.      (line    6)
+* D:                                     D.                  (line    6)
+* d packet:                              Packets.            (line  128)
+* D packet:                              Packets.            (line  135)
+* Darwin:                                Darwin.             (line    6)
+* data breakpoints:                      Breakpoints.        (line   17)
+* data manipulation, in GDB/MI:          GDB/MI Data Manipulation.
+                                                             (line    6)
+* dcache line-size:                      Caching Target Data.
+                                                             (line   60)
+* dcache size:                           Caching Target Data.
+                                                             (line   57)
+* dcache, flushing:                      Caching Target Data.
+                                                             (line   71)
+* dead names, GNU Hurd:                  Hurd Native.        (line   84)
+* debug expression parser:               Debugging Output.   (line  195)
+* debug formats and C++:                 C Plus Plus Expressions.
+                                                             (line    8)
+* debug link sections:                   Separate Debug Files.
+                                                             (line   79)
+* debug remote protocol:                 Debugging Output.   (line  203)
+* debugger crash:                        Bug Criteria.       (line    9)
+* debugging agent:                       In-Process Agent.   (line    6)
+* debugging C++ programs:                C Plus Plus Expressions.
+                                                             (line    8)
+* debugging information directory, global: Separate Debug Files.
+                                                             (line    6)
+* debugging information in separate files: Separate Debug Files.
+                                                             (line    6)
+* debugging libthread_db:                Threads.            (line  331)
+* debugging multiple processes:          Forks.              (line   55)
+* debugging optimized code:              Optimized Code.     (line    6)
+* debugging stub, example:               Remote Stub.        (line    6)
+* debugging target:                      Targets.            (line    6)
+* debugging the Cygwin DLL:              Cygwin Native.      (line   60)
+* decimal floating point format:         Decimal Floating Point.
+                                                             (line    6)
+* default behavior of commands, changing: Command Settings.  (line    6)
+* default collection action:             Tracepoint Actions. (line  142)
+* default data directory:                Data Files.         (line   19)
+* default settings, changing:            Command Settings.   (line    6)
+* default source path substitution:      Source Path.        (line  149)
+* default system root:                   Files.              (line  463)
+* define trace state variable, remote request: Tracepoint Packets.
+                                                             (line  121)
+* defining macros interactively:         Macros.             (line   59)
+* definition of a macro, showing:        Macros.             (line   47)
+* delete breakpoints:                    Delete Breaks.      (line   41)
+* deleting breakpoints, watchpoints, catchpoints: Delete Breaks.
+                                                             (line    6)
+* deliver a signal to a program:         Signaling.          (line    6)
+* demangle:                              Symbols.            (line  127)
+* demangler crashes:                     Maintenance Commands.
+                                                             (line  146)
+* demangler crashes <1>:                 Maintenance Commands.
+                                                             (line  173)
+* demangler crashes <2>:                 Maintenance Commands.
+                                                             (line  197)
+* demangling C++ names:                  Print Settings.     (line  522)
+* deprecated commands:                   Maintenance Commands.
+                                                             (line  160)
+* derived type of an object, printing:   Print Settings.     (line  553)
+* descriptor tables display:             DJGPP Native.       (line   24)
+* detach from task, GNU Hurd:            Hurd Native.        (line   59)
+* detach from thread, GNU Hurd:          Hurd Native.        (line  109)
+* direct memory access (DMA) on MS-DOS:  DJGPP Native.       (line   74)
+* directories for source files:          Source Path.        (line    6)
+* directory, compilation:                Source Path.        (line   40)
+* directory, current:                    Source Path.        (line   40)
+* disable address space randomization, remote request: General Query Packets.
+                                                             (line   84)
+* disabling calling functions in the program: Calling.       (line   59)
+* disassembler options:                  Machine Code.       (line  222)
+* disconnected tracing:                  Starting and Stopping Trace Experiments.
+                                                             (line   45)
+* displaced stepping debugging info:     Debugging Output.   (line   85)
+* displaced stepping support:            Maintenance Commands.
+                                                             (line  112)
+* displaced stepping, and process record and replay: Process Record and Replay.
+                                                             (line   96)
+* display command history:               Command History.    (line  110)
+* display derived types:                 Print Settings.     (line  553)
+* display disabled out of scope:         Auto Display.       (line   86)
+* display GDB copyright:                 Help.               (line  167)
+* display of expressions:                Auto Display.       (line    6)
+* display remote monitor communications: Target Commands.    (line  107)
+* display remote packets:                Debugging Output.   (line  203)
+* DJGPP debugging:                       DJGPP Native.       (line    6)
+* DLLs with no debugging symbols:        Non-debug DLL Symbols.
+                                                             (line    6)
+* do not print frame arguments:          Print Settings.     (line  154)
+* documentation:                         Formatting Documentation.
+                                                             (line   22)
+* don't repeat command:                  Define.             (line  111)
+* don't repeat Guile command:            Commands In Guile.  (line   67)
+* don't repeat Python command:           Commands In Python. (line   42)
+* DOS file-name semantics of file names.: Files.             (line  486)
+* DOS serial data link, remote debugging: DJGPP Native.      (line  118)
+* DOS serial port status:                DJGPP Native.       (line  139)
+* DPMI:                                  DJGPP Native.       (line    6)
+* dprintf:                               Dynamic Printf.     (line    6)
+* dump all data collected at tracepoint: tdump.              (line    6)
+* dump core from inferior:               Core File Generation.
+                                                             (line    6)
+* dump data to a file:                   Dump/Restore Files. (line    6)
+* dump/restore files:                    Dump/Restore Files. (line    6)
+* DVC register:                          PowerPC Embedded.   (line    6)
+* DWARF compilation units cache:         Maintenance Commands.
+                                                             (line  417)
+* DWARF DIEs:                            Debugging Output.   (line   63)
+* DWARF frame unwinders:                 Maintenance Commands.
+                                                             (line  431)
+* DWARF Line Tables:                     Debugging Output.   (line   69)
+* DWARF Reading:                         Debugging Output.   (line   77)
+* DWARF-2 CFI and CRIS:                  CRIS.               (line   18)
+* dynamic linking:                       Files.              (line  123)
+* dynamic printf:                        Dynamic Printf.     (line    6)
+* dynamic varobj:                        GDB/MI Variable Objects.
+                                                             (line  166)
+* early initialization:                  Initialization Files.
+                                                             (line   14)
+* early initialization file:             Startup.            (line   10)
+* editing:                               Editing.            (line   15)
+* editing command lines:                 Readline Bare Essentials.
+                                                             (line    6)
+* editing source files:                  Edit.               (line    6)
+* eight-bit characters in strings:       Print Settings.     (line  467)
+* elaboration phase:                     Starting.           (line   92)
+* ELinOS system-wide configuration script: System-wide Configuration Scripts.
+                                                             (line   15)
+* Emacs:                                 Emacs.              (line    6)
+* empty response, for unsupported packets: Overview.         (line   97)
+* enable/disable a breakpoint:           Disabling.          (line    6)
+* enabling and disabling probes:         Static Probe Points.
+                                                             (line   52)
+* entering numbers:                      Numbers.            (line    6)
+* environment (of your program):         Environment.        (line    6)
+* errno values, in file-i/o protocol:    Errno Values.       (line    6)
+* error on valid input:                  Bug Criteria.       (line   12)
+* event debugging info:                  Debugging Output.   (line   92)
+* event designators:                     Event Designators.  (line    6)
+* event handling:                        Set Catchpoints.    (line    6)
+* event-loop debugging:                  Debugging Output.   (line   98)
+* examine process image:                 Process Information.
+                                                             (line    6)
+* examining data:                        Data.               (line    6)
+* examining memory:                      Memory.             (line    9)
+* exception handlers:                    Set Catchpoints.    (line    6)
+* exceptions, guile:                     Guile Exception Handling.
+                                                             (line    6)
+* exceptions, python:                    Exception Handling. (line    6)
+* exec events, remote reply:             Stop Reply Packets. (line  141)
+* executable file:                       Files.              (line   16)
+* executable file target:                Target Commands.    (line   50)
+* executable file, for remote target:    Remote Configuration.
+                                                             (line  102)
+* execute commands from a file:          Command Files.      (line   17)
+* execute forward or backward in time:   Reverse Execution.  (line   92)
+* execute remote command, remote request: General Query Packets.
+                                                             (line  609)
+* execution, foreground, background and asynchronous: Background Execution.
+                                                             (line    6)
+* exit status of shell commands:         Convenience Vars.   (line  188)
+* exiting GDB:                           Quitting GDB.       (line    6)
+* expand macro once:                     Macros.             (line   38)
+* expanding preprocessor macros:         Macros.             (line   29)
+* explicit locations:                    Explicit Locations. (line    6)
+* explore type:                          Data.               (line  238)
+* explore value:                         Data.               (line  231)
+* exploring hierarchical data structures: Data.              (line  129)
+* expression debugging info:             Debugging Output.   (line  107)
+* expression parser, debugging info:     Debugging Output.   (line  195)
+* expressions:                           Expressions.        (line    6)
+* expressions in Ada:                    Ada.                (line   11)
+* expressions in C or C++:               C.                  (line    6)
+* expressions in C++:                    C Plus Plus Expressions.
+                                                             (line    6)
+* expressions in Modula-2:               Modula-2.           (line   12)
+* extend GDB for remote targets:         Connecting.         (line  279)
+* extending GDB:                         Extending GDB.      (line    6)
+* extra signal information:              Signals.            (line  156)
+* F packet:                              Packets.            (line  151)
+* F reply packet:                        The F Reply Packet. (line    6)
+* F request packet:                      The F Request Packet.
+                                                             (line    6)
+* fast tracepoints:                      Set Tracepoints.    (line   24)
+* fast tracepoints, setting:             Create and Delete Tracepoints.
+                                                             (line   50)
+* fatal signal:                          Bug Criteria.       (line    9)
+* fatal signals:                         Signals.            (line   15)
+* features of the remote protocol:       General Query Packets.
+                                                             (line  662)
+* fetch memory tags:                     General Query Packets.
+                                                             (line  342)
+* file name canonicalization:            Files.              (line  530)
+* file transfer:                         File Transfer.      (line    6)
+* file transfer, remote protocol:        Host I/O Packets.   (line    6)
+* file-i/o examples:                     File-I/O Examples.  (line    6)
+* file-i/o overview:                     File-I/O Overview.  (line    6)
+* File-I/O remote protocol extension:    File-I/O Remote Protocol Extension.
+                                                             (line    6)
+* file-i/o reply packet:                 The F Reply Packet. (line    6)
+* file-i/o request packet:               The F Request Packet.
+                                                             (line    6)
+* filename-display:                      Backtrace.          (line  202)
+* find trace snapshot:                   tfind.              (line    6)
+* flinching:                             Messages/Warnings.  (line   49)
+* float promotion:                       ABI.                (line   34)
+* floating point:                        Floating Point Hardware.
+                                                             (line    6)
+* floating point registers:              Registers.          (line   15)
+* floating point, MIPS remote:           MIPS Embedded.      (line   13)
+* focus of debugging:                    Threads.            (line   29)
+* foo:                                   Symbol Errors.      (line   54)
+* foreground execution:                  Background Execution.
+                                                             (line    6)
+* fork events, remote reply:             Stop Reply Packets. (line  104)
+* fork, debugging programs which call:   Forks.              (line    6)
+* format options:                        Print Settings.     (line    6)
+* formatted output:                      Output Formats.     (line    6)
+* Fortran:                               Summary.            (line   40)
+* fortran array slicing debugging info:  Debugging Output.   (line  125)
+* Fortran Defaults:                      Fortran Defaults.   (line    6)
+* Fortran modules, information about:    Symbols.            (line  590)
+* Fortran operators and expressions:     Fortran Operators.  (line    6)
+* Fortran-specific support in GDB:       Fortran.            (line    6)
+* FR-V shared-library debugging:         Debugging Output.   (line  237)
+* frame debugging info:                  Debugging Output.   (line  133)
+* frame decorator api:                   Frame Decorator API.
+                                                             (line    6)
+* frame filters api:                     Frame Filter API.   (line    6)
+* frame information, printing:           Print Settings.     (line  314)
+* frame level:                           Frames.             (line   28)
+* frame number:                          Frames.             (line   28)
+* frame pointer:                         Frames.             (line   21)
+* frame pointer register:                Registers.          (line   31)
+* frame, definition:                     Frames.             (line    6)
+* frameless execution:                   Frames.             (line   34)
+* frames in guile:                       Frames In Guile.    (line    6)
+* frames in python:                      Frames In Python.   (line    6)
+* free memory information (MS-DOS):      DJGPP Native.       (line   19)
+* FreeBSD:                               FreeBSD.            (line    6)
+* FreeBSD LWP debug messages:            Debugging Output.   (line  114)
+* FreeBSD native target debug messages:  Debugging Output.   (line  120)
+* fstat, file-i/o system call:           stat/fstat.         (line    6)
+* Fujitsu:                               Remote Stub.        (line   68)
+* full symbol tables, listing GDB's internal: Symbols.       (line  680)
+* function call arguments, optimized out: Backtrace.         (line  133)
+* function entry/exit, wrong values of variables: Variables. (line  106)
+* functions and variables by Fortran module: Symbols.        (line  590)
+* functions without line info, and stepping: Continuing and Stepping.
+                                                             (line   92)
+* g packet:                              Packets.            (line  156)
+* G packet:                              Packets.            (line  184)
+* g++, GNU C++ compiler:                 C.                  (line   10)
+* garbled pointers:                      DJGPP Native.       (line   42)
+* GCC and C++:                           C Plus Plus Expressions.
+                                                             (line    8)
+* GDB bugs, reporting:                   Bug Reporting.      (line    6)
+* GDB internal error:                    Maintenance Commands.
+                                                             (line  197)
+* gdb module:                            Basic Python.       (line   28)
+* gdb objects:                           GDB Scheme Data Types.
+                                                             (line    6)
+* GDB reference card:                    Formatting Documentation.
+                                                             (line    6)
+* GDB startup:                           Startup.            (line    6)
+* GDB version number:                    Help.               (line  157)
+* gdb.ini:                               Initialization Files.
+                                                             (line  107)
+* gdb.printing:                          gdb.printing.       (line    6)
+* gdb.prompt:                            gdb.prompt.         (line    6)
+* gdb.types:                             gdb.types.          (line    6)
+* gdb.Value:                             Values From Inferior.
+                                                             (line    6)
+* GDB/MI development:                    GDB/MI Development and Front Ends.
+                                                             (line    6)
+* GDB/MI General Design:                 GDB/MI General Design.
+                                                             (line    6)
+* GDB/MI, async records:                 GDB/MI Async Records.
+                                                             (line    6)
+* GDB/MI, breakpoint commands:           GDB/MI Breakpoint Commands.
+                                                             (line    6)
+* GDB/MI, compatibility with CLI:        GDB/MI Compatibility with CLI.
+                                                             (line    6)
+* GDB/MI, data manipulation:             GDB/MI Data Manipulation.
+                                                             (line    6)
+* GDB/MI, input syntax:                  GDB/MI Input Syntax.
+                                                             (line    6)
+* GDB/MI, its purpose:                   GDB/MI.             (line   36)
+* GDB/MI, output syntax:                 GDB/MI Output Syntax.
+                                                             (line    6)
+* GDB/MI, result records:                GDB/MI Result Records.
+                                                             (line    6)
+* GDB/MI, simple examples:               GDB/MI Simple Examples.
+                                                             (line    6)
+* GDB/MI, stream records:                GDB/MI Stream Records.
+                                                             (line    6)
+* gdbarch debugging info:                Debugging Output.   (line   26)
+* GDBHISTFILE, environment variable:     Command History.    (line   26)
+* GDBHISTSIZE, environment variable:     Command History.    (line   56)
+* gdbinit:                               Initialization Files.
+                                                             (line  107)
+* gdbserver, command-line arguments:     Server.             (line   34)
+* gdbserver, connecting:                 Connecting.         (line    6)
+* gdbserver, search path for libthread_db: Server.           (line  254)
+* gdbserver, send all debug output to a single file: Server. (line  148)
+* gdbserver, target extended-remote mode: Connecting.        (line    6)
+* gdbserver, target remote mode:         Connecting.         (line    6)
+* gdbserver, types of connections:       Connecting.         (line    6)
+* GDT:                                   DJGPP Native.       (line   24)
+* general initialization:                Initialization Files.
+                                                             (line   30)
+* get thread information block address:  General Query Packets.
+                                                             (line  303)
+* get thread-local storage address, remote request: General Query Packets.
+                                                             (line  271)
+* gettimeofday, file-i/o system call:    gettimeofday.       (line    6)
+* getting structure elements using gdb.Field objects as subscripts: Values From Inferior.
+                                                             (line   40)
+* global debugging information directories: Separate Debug Files.
+                                                             (line    6)
+* global thread identifier (GDB):        Threads.            (line   88)
+* global thread number:                  Threads.            (line   88)
+* GNAT descriptive types:                Ada Glitches.       (line   57)
+* GNAT encoding:                         Ada Glitches.       (line   57)
+* GNU C++:                               C.                  (line   10)
+* GNU Emacs:                             Emacs.              (line    6)
+* GNU Hurd debugging:                    Hurd Native.        (line    6)
+* GNU/Hurd debug messages:               Debugging Output.   (line  139)
+* GNU/Linux LWP debug messages:          Debugging Output.   (line  157)
+* GNU/Linux namespaces debug messages:   Debugging Output.   (line  162)
+* Go (programming language):             Go.                 (line    6)
+* guile api:                             Guile API.          (line    6)
+* guile architectures:                   Architectures In Guile.
+                                                             (line    6)
+* guile auto-loading:                    Guile Auto-loading. (line    6)
+* guile commands:                        Guile Commands.     (line    6)
+* guile commands <1>:                    Commands In Guile.  (line    6)
+* guile configuration:                   Guile Configuration.
+                                                             (line    6)
+* guile exceptions:                      Guile Exception Handling.
+                                                             (line    6)
+* guile gdb module:                      Basic Guile.        (line   37)
+* guile iterators:                       Iterators In Guile. (line    6)
+* guile modules:                         Guile Modules.      (line    6)
+* guile pagination:                      Basic Guile.        (line    6)
+* guile parameters:                      Parameters In Guile.
+                                                             (line    6)
+* guile pretty printing api:             Guile Pretty Printing API.
+                                                             (line    6)
+* guile scripting:                       Guile.              (line    6)
+* guile scripts directory:               Guile Introduction. (line   15)
+* guile stdout:                          Basic Guile.        (line    6)
+* guile, working with types:             Types In Guile.     (line    6)
+* guile, working with values from inferior: Values From Inferior In Guile.
+                                                             (line    6)
+* H packet:                              Packets.            (line  194)
+* handling signals:                      Signals.            (line   27)
+* hardware breakpoints:                  Set Breaks.         (line  116)
+* hardware debug registers:              Maintenance Commands.
+                                                             (line  477)
+* hardware watchpoints:                  Set Watchpoints.    (line   31)
+* hash mark while downloading:           Target Commands.    (line   98)
+* heuristic-fence-post (Alpha, MIPS):    MIPS.               (line   14)
+* history events:                        Event Designators.  (line    8)
+* history expansion:                     History Interaction.
+                                                             (line    6)
+* history expansion, turn on/off:        Command History.    (line   85)
+* history file:                          Command History.    (line   26)
+* history number:                        Value History.      (line   13)
+* history of values printed by GDB:      Value History.      (line    6)
+* history size:                          Command History.    (line   56)
+* history substitution:                  Command History.    (line   26)
+* hooks, for commands:                   Hooks.              (line    6)
+* hooks, post-command:                   Hooks.              (line   11)
+* hooks, pre-command:                    Hooks.              (line    6)
+* host character set:                    Character Sets.     (line    6)
+* Host I/O, remote protocol:             Host I/O Packets.   (line    6)
+* how many arguments (user-defined commands): Define.        (line   25)
+* HPPA support:                          HPPA.               (line    6)
+* i packet:                              Packets.            (line  208)
+* I packet:                              Packets.            (line  213)
+* i/o:                                   Input/Output.       (line    6)
+* I/O registers (Atmel AVR):             AVR.                (line   10)
+* i386:                                  Remote Stub.        (line   56)
+* i386-stub.c:                           Remote Stub.        (line   56)
+* IDT:                                   DJGPP Native.       (line   24)
+* ignore count (of breakpoint):          Conditions.         (line   85)
+* in-process agent protocol:             In-Process Agent Protocol.
+                                                             (line    6)
+* incomplete type:                       Symbols.            (line  367)
+* indentation in structure display:      Print Settings.     (line  429)
+* index files:                           Index Files.        (line    6)
+* index section format:                  Index Section Format.
+                                                             (line    6)
+* inferior:                              Inferiors Connections and Programs.
+                                                             (line   15)
+* inferior debugging info:               Debugging Output.   (line  144)
+* inferior events in Python:             Events In Python.   (line    6)
+* inferior functions, calling:           Calling.            (line    6)
+* inferior tty:                          Input/Output.       (line   44)
+* inferiors in Python:                   Inferiors In Python.
+                                                             (line    6)
+* infinite recursion in user-defined commands: Define.       (line  128)
+* info for known .debug_gdb_scripts-loaded scripts: Maintenance Commands.
+                                                             (line  344)
+* info for known object files:           Maintenance Commands.
+                                                             (line  329)
+* info line, repeated calls:             Machine Code.       (line   40)
+* info proc cmdline:                     Process Information.
+                                                             (line   41)
+* info proc cwd:                         Process Information.
+                                                             (line   45)
+* info proc exe:                         Process Information.
+                                                             (line   49)
+* info proc files:                       Process Information.
+                                                             (line   53)
+* information about static tracepoint markers: Listing Static Tracepoint Markers.
+                                                             (line    6)
+* information about tracepoints:         Listing Tracepoints.
+                                                             (line    6)
+* inheritance:                           Debugging C Plus Plus.
+                                                             (line   26)
+* init file:                             Startup.            (line   23)
+* init file name:                        Initialization Files.
+                                                             (line    6)
+* initial frame:                         Frames.             (line   12)
+* initialization file:                   Initialization Files.
+                                                             (line   34)
+* initialization file, readline:         Readline Init File. (line    6)
+* injecting code:                        Compiling and Injecting Code.
+                                                             (line    6)
+* inline functions, debugging:           Inline Functions.   (line    6)
+* innermost frame:                       Frames.             (line   12)
+* input syntax for GDB/MI:               GDB/MI Input Syntax.
+                                                             (line    6)
+* installation:                          Installing GDB.     (line    6)
+* instructions, assembly:                Machine Code.       (line   43)
+* integral datatypes, in file-i/o protocol: Integral Datatypes.
+                                                             (line    6)
+* Intel:                                 Remote Stub.        (line   56)
+* Intel disassembly flavor:              Machine Code.       (line  237)
+* Intel Memory Protection Extensions (MPX).: i386.           (line   21)
+* Intel MPX boundary violations:         Signals.            (line  197)
+* Intel Processor Trace:                 Process Record and Replay.
+                                                             (line   75)
+* interaction, readline:                 Readline Interaction.
+                                                             (line    6)
+* internal commands:                     Maintenance Commands.
+                                                             (line    6)
+* internal errors, control of GDB behavior: Maintenance Commands.
+                                                             (line  197)
+* internal GDB breakpoints:              Set Breaks.         (line  429)
+* interrupt:                             Quitting GDB.       (line   13)
+* interrupt debuggee on MS-Windows:      Cygwin Native.      (line    9)
+* interrupt remote programs:             Remote Configuration.
+                                                             (line   36)
+* interrupt remote programs <1>:         Remote Configuration.
+                                                             (line  108)
+* interrupting remote programs:          Connecting.         (line  246)
+* interrupting remote targets:           Bootstrapping.      (line   25)
+* interrupts (remote protocol):          Interrupts.         (line    6)
+* invalid input:                         Bug Criteria.       (line   16)
+* invoke another interpreter:            Interpreters.       (line   39)
+* ipa protocol commands:                 IPA Protocol Commands.
+                                                             (line    6)
+* ipa protocol objects:                  IPA Protocol Objects.
+                                                             (line    6)
+* isatty, file-i/o system call:          isatty.             (line    6)
+* JIT compilation interface:             JIT Interface.      (line    6)
+* JIT debug info reader:                 Custom Debug Info.  (line    6)
+* just-in-time compilation:              JIT Interface.      (line    6)
+* just-in-time compilation, debugging messages: Debugging Output.
+                                                             (line  152)
+* k packet:                              Packets.            (line  217)
+* kernel crash dump:                     BSD libkvm Interface.
+                                                             (line    6)
+* kernel memory image:                   BSD libkvm Interface.
+                                                             (line    6)
+* kill ring:                             Readline Killing Commands.
+                                                             (line   18)
+* killing text:                          Readline Killing Commands.
+                                                             (line    6)
+* languages:                             Languages.          (line    6)
+* last tracepoint number:                Create and Delete Tracepoints.
+                                                             (line  122)
+* latest breakpoint:                     Set Breaks.         (line    6)
+* lazy strings in guile:                 Lazy Strings In Guile.
+                                                             (line    6)
+* lazy strings in python:                Lazy Strings In Python.
+                                                             (line    6)
+* LDT:                                   DJGPP Native.       (line   24)
+* leaving GDB:                           Quitting GDB.       (line    6)
+* libkvm:                                BSD libkvm Interface.
+                                                             (line    6)
+* library list format, remote protocol:  Library List Format.
+                                                             (line    6)
+* library list format, remote protocol <1>: Library List Format for SVR4 Targets.
+                                                             (line    6)
+* limit hardware breakpoints and watchpoints: Remote Configuration.
+                                                             (line   79)
+* limit hardware watchpoints length:     Remote Configuration.
+                                                             (line   91)
+* limit on number of printed array elements: Print Settings. (line  141)
+* limits, in file-i/o protocol:          Limits.             (line    6)
+* line tables in python:                 Line Tables In Python.
+                                                             (line    6)
+* line tables, listing GDB's internal:   Symbols.            (line  727)
+* linespec locations:                    Linespec Locations. (line    6)
+* Linux lightweight processes:           Debugging Output.   (line  157)
+* list active threads, remote request:   General Query Packets.
+                                                             (line  238)
+* list of supported file-i/o calls:      List of Supported Calls.
+                                                             (line    6)
+* list output in GDB/MI:                 GDB/MI Output Syntax.
+                                                             (line  117)
+* list, how many lines to display:       List.               (line   30)
+* listing GDB's internal line tables:    Symbols.            (line  727)
+* listing GDB's internal symbol tables:  Symbols.            (line  680)
+* listing machine instructions:          Machine Code.       (line   43)
+* listing mapped overlays:               Overlay Commands.   (line   60)
+* lists of breakpoints:                  Breakpoints.        (line   45)
+* load address, overlay's:               How Overlays Work.  (line    6)
+* load shared library:                   Files.              (line  337)
+* load symbols from memory:              Files.              (line  193)
+* local socket, target remote:           Connecting.         (line  147)
+* local variables:                       Symbols.            (line  436)
+* locate address:                        Output Formats.     (line   35)
+* location:                              Specify Location.   (line    6)
+* lock scheduler:                        All-Stop Mode.      (line   37)
+* log output in GDB/MI:                  GDB/MI Output Syntax.
+                                                             (line  113)
+* logging file name:                     Logging Output.     (line   12)
+* logging GDB output:                    Logging Output.     (line    6)
+* lseek flags, in file-i/o protocol:     Lseek Flags.        (line    6)
+* lseek, file-i/o system call:           lseek.              (line    6)
+* m packet:                              Packets.            (line  240)
+* M packet:                              Packets.            (line  260)
+* m680x0:                                Remote Stub.        (line   59)
+* m68k-stub.c:                           Remote Stub.        (line   59)
+* Mach-O symbols processing:             Debugging Output.   (line  168)
+* machine instructions:                  Machine Code.       (line   43)
+* macro definition, showing:             Macros.             (line   47)
+* macro expansion, showing the results of preprocessor: Macros.
+                                                             (line   29)
+* macros, example of debugging with:     Macros.             (line   83)
+* macros, from debug info:               Macros.             (line   47)
+* macros, user-defined:                  Macros.             (line   59)
+* mailing lists:                         GDB/MI Development and Front Ends.
+                                                             (line   77)
+* maintenance commands:                  Maintenance Commands.
+                                                             (line    6)
+* Man pages:                             Man Pages.          (line    6)
+* managing frame filters:                Frame Filter Management.
+                                                             (line    6)
+* manual overlay debugging:              Overlay Commands.   (line   23)
+* map an overlay:                        Overlay Commands.   (line   30)
+* mapinfo list, QNX Neutrino:            Process Information.
+                                                             (line  131)
+* mapped address:                        How Overlays Work.  (line    6)
+* mapped overlays:                       How Overlays Work.  (line    6)
+* markers, static tracepoints:           Set Tracepoints.    (line   28)
+* maximum value for offset of closest symbol: Print Settings.
+                                                             (line   70)
+* member functions:                      C Plus Plus Expressions.
+                                                             (line   16)
+* memory address space mappings:         Process Information.
+                                                             (line   80)
+* memory address space mappings <1>:     Maintenance Commands.
+                                                             (line  265)
+* memory map format:                     Memory Map Format.  (line    6)
+* memory region attributes:              Memory Region Attributes.
+                                                             (line    6)
+* memory tag types, ARM:                 ARM Memory Tag Types.
+                                                             (line    6)
+* memory tracing:                        Breakpoints.        (line   17)
+* memory transfer, in file-i/o protocol: Memory Transfer.    (line    6)
+* memory used by commands:               Maintenance Commands.
+                                                             (line  578)
+* memory used for symbol tables:         Files.              (line  325)
+* memory, alignment and size of remote accesses: Packets.    (line  248)
+* memory, viewing as typed object:       Expressions.        (line   41)
+* mi interpreter:                        Interpreters.       (line   26)
+* mi1 interpreter:                       Interpreters.       (line   37)
+* mi2 interpreter:                       Interpreters.       (line   34)
+* mi3 interpreter:                       Interpreters.       (line   31)
+* minimal language:                      Unsupported Languages.
+                                                             (line    6)
+* minimal symbol dump:                   Symbols.            (line  654)
+* Minimal symbols and DLLs:              Non-debug DLL Symbols.
+                                                             (line    6)
+* MIPS addresses, masking:               MIPS.               (line   80)
+* MIPS remote floating point:            MIPS Embedded.      (line   13)
+* MIPS stack:                            MIPS.               (line    6)
+* miscellaneous settings:                Other Misc Settings.
+                                                             (line    6)
+* MMX registers (x86):                   Registers.          (line   76)
+* mode_t values, in file-i/o protocol:   mode_t Values.      (line    6)
+* Modula-2:                              Summary.            (line   29)
+* Modula-2 built-ins:                    Built-In Func/Proc. (line    6)
+* Modula-2 checks:                       M2 Checks.          (line    6)
+* Modula-2 constants:                    Built-In Func/Proc. (line  114)
+* Modula-2 defaults:                     M2 Defaults.        (line    6)
+* Modula-2 operators:                    M2 Operators.       (line    6)
+* Modula-2 types:                        M2 Types.           (line    6)
+* Modula-2, deviations from:             Deviations.         (line    6)
+* Modula-2, GDB support:                 Modula-2.           (line    6)
+* module functions and variables:        Symbols.            (line  590)
+* modules:                               Symbols.            (line  582)
+* monitor commands, for gdbserver:       Server.             (line  218)
+* Motorola 680x0:                        Remote Stub.        (line   59)
+* MS Windows debugging:                  Cygwin Native.      (line    6)
+* MS-DOS system info:                    DJGPP Native.       (line   19)
+* MS-DOS-specific commands:              DJGPP Native.       (line    6)
+* multiple locations, breakpoints:       Set Breaks.         (line  255)
+* multiple processes:                    Forks.              (line    6)
+* multiple targets:                      Active Targets.     (line    6)
+* multiple threads:                      Threads.            (line    6)
+* multiple threads, backtrace:           Backtrace.          (line   97)
+* multiple-symbols menu:                 Ambiguous Expressions.
+                                                             (line   51)
+* multiprocess extensions, in remote protocol: General Query Packets.
+                                                             (line  988)
+* name a thread:                         Threads.            (line  247)
+* names of symbols:                      Symbols.            (line   14)
+* namespace in C++:                      C Plus Plus Expressions.
+                                                             (line   20)
+* native Cygwin debugging:               Cygwin Native.      (line    6)
+* native DJGPP debugging:                DJGPP Native.       (line    6)
+* native script auto-loading:            Auto-loading sequences.
+                                                             (line    6)
+* native target:                         Target Commands.    (line   85)
+* negative breakpoint numbers:           Set Breaks.         (line  429)
+* never read symbols:                    Files.              (line  101)
+* New SYSTAG message:                    Threads.            (line   35)
+* new user interface:                    Interpreters.       (line   68)
+* Newlib OS ABI and its influence on the longjmp handling: ABI.
+                                                             (line   11)
+* Nios II architecture:                  Nios II.            (line    6)
+* no debug info functions:               Calling.            (line   78)
+* no debug info variables:               Variables.          (line  142)
+* non-member C++ functions, set breakpoint in: Set Breaks.   (line  168)
+* non-stop mode:                         Non-Stop Mode.      (line    6)
+* non-stop mode, and process record and replay: Process Record and Replay.
+                                                             (line  101)
+* non-stop mode, and set displaced-stepping: Maintenance Commands.
+                                                             (line  129)
+* non-stop mode, remote request:         General Query Packets.
+                                                             (line  452)
+* noninvasive task options:              Hurd Native.        (line   72)
+* notation, readline:                    Readline Bare Essentials.
+                                                             (line    6)
+* notational conventions, for GDB/MI:    GDB/MI.             (line   52)
+* notification packets:                  Notification Packets.
+                                                             (line    6)
+* notify output in GDB/MI:               GDB/MI Output Syntax.
+                                                             (line  102)
+* NULL elements in arrays:               Print Settings.     (line  420)
+* number of array elements to print:     Print Settings.     (line  141)
+* number representation:                 Numbers.            (line    6)
+* numbers for breakpoints:               Breakpoints.        (line   38)
+* object files, relocatable, reading symbols from: Files.    (line  146)
+* Objective-C:                           Objective-C.        (line    6)
+* Objective-C, classes and selectors:    Symbols.            (line  605)
+* Objective-C, print objects:            The Print Command with Objective-C.
+                                                             (line    6)
+* OBJFILE-gdb.gdb:                       objfile-gdbdotext file.
+                                                             (line    6)
+* OBJFILE-gdb.py:                        objfile-gdbdotext file.
+                                                             (line    6)
+* OBJFILE-gdb.scm:                       objfile-gdbdotext file.
+                                                             (line    6)
+* objfiles in guile:                     Objfiles In Guile.  (line    6)
+* objfiles in python:                    Objfiles In Python. (line    6)
+* observer debugging info:               Debugging Output.   (line  182)
+* octal escapes in strings:              Print Settings.     (line  467)
+* online documentation:                  Help.               (line    6)
+* opaque data types:                     Symbols.            (line  617)
+* open flags, in file-i/o protocol:      Open Flags.         (line    6)
+* open, file-i/o system call:            open.               (line    6)
+* OpenCL C:                              OpenCL C.           (line    6)
+* OpenCL C Datatypes:                    OpenCL C Datatypes. (line    6)
+* OpenCL C Expressions:                  OpenCL C Expressions.
+                                                             (line    6)
+* OpenCL C Operators:                    OpenCL C Operators. (line    6)
+* OpenRISC 1000:                         OpenRISC 1000.      (line    6)
+* operate-and-get-next:                  Editing.            (line   32)
+* operating system information:          Operating System Information.
+                                                             (line    6)
+* operating system information, process list: Process list.  (line    6)
+* optimized code, debugging:             Optimized Code.     (line    6)
+* optimized code, wrong values of variables: Variables.      (line  106)
+* optimized out value in guile:          Values From Inferior In Guile.
+                                                             (line  102)
+* optimized out value in Python:         Values From Inferior.
+                                                             (line   70)
+* optimized out, in backtrace:           Backtrace.          (line  133)
+* optional debugging messages:           Debugging Output.   (line    6)
+* optional warnings:                     Messages/Warnings.  (line    6)
+* OS ABI:                                ABI.                (line   11)
+* OS information:                        OS Information.     (line    6)
+* out-of-line single-stepping:           Maintenance Commands.
+                                                             (line  112)
+* outermost frame:                       Frames.             (line   12)
+* output formats:                        Output Formats.     (line    6)
+* output syntax of GDB/MI:               GDB/MI Output Syntax.
+                                                             (line    6)
+* overlay area:                          How Overlays Work.  (line    6)
+* overlay example program:               Overlay Sample Program.
+                                                             (line    6)
+* overlays:                              Overlays.           (line    6)
+* overlays, setting breakpoints in:      Overlay Commands.   (line   91)
+* overloaded functions, calling:         C Plus Plus Expressions.
+                                                             (line   26)
+* overloaded functions, overload resolution: Debugging C Plus Plus.
+                                                             (line   59)
+* overloading in C++:                    Debugging C Plus Plus.
+                                                             (line   15)
+* overloading, Ada:                      Overloading support for Ada.
+                                                             (line    6)
+* p packet:                              Packets.            (line  272)
+* P packet:                              Packets.            (line  285)
+* packet acknowledgment, for GDB remote: Packet Acknowledgment.
+                                                             (line    6)
+* packet size, remote protocol:          General Query Packets.
+                                                             (line  894)
+* packets, notification:                 Notification Packets.
+                                                             (line    6)
+* packets, reporting on stdout:          Debugging Output.   (line  203)
+* packets, tracepoint:                   Tracepoint Packets. (line    6)
+* page size:                             Screen Size.        (line    6)
+* page tables display (MS-DOS):          DJGPP Native.       (line   55)
+* pagination:                            Screen Size.        (line    6)
+* parameters in guile:                   Parameters In Guile.
+                                                             (line    6)
+* parameters in python:                  Parameters In Python.
+                                                             (line    6)
+* partial symbol dump:                   Symbols.            (line  654)
+* partial symbol tables, listing GDB's internal: Symbols.    (line  680)
+* Pascal:                                Summary.            (line   35)
+* Pascal objects, static members display: Print Settings.    (line  582)
+* Pascal support in GDB, limitations:    Pascal.             (line    6)
+* pass signals to inferior, remote request: General Query Packets.
+                                                             (line  513)
+* patching binaries:                     Patching.           (line    6)
+* patching object files:                 Files.              (line   26)
+* pause current task (GNU Hurd):         Hurd Native.        (line   48)
+* pause current thread (GNU Hurd):       Hurd Native.        (line   90)
+* pauses in output:                      Screen Size.        (line    6)
+* pending breakpoints:                   Set Breaks.         (line  300)
+* physical address from linear address:  DJGPP Native.       (line   80)
+* physname:                              Debugging Output.   (line   46)
+* pipe, target remote to:                Connecting.         (line  234)
+* pipes:                                 Starting.           (line   64)
+* pointer values, in file-i/o protocol:  Pointer Values.     (line    6)
+* pointer, finding referent:             Print Settings.     (line   80)
+* port rights, GNU Hurd:                 Hurd Native.        (line   84)
+* port sets, GNU Hurd:                   Hurd Native.        (line   84)
+* PowerPC architecture:                  PowerPC.            (line    6)
+* prefix for data files:                 Data Files.         (line    6)
+* prefix for executable and shared library file names: Files.
+                                                             (line  396)
+* premature return from system calls:    Interrupted System Calls.
+                                                             (line    6)
+* preprocessor macro expansion, showing the results of: Macros.
+                                                             (line   29)
+* pretty print arrays:                   Print Settings.     (line  115)
+* pretty print C++ virtual function tables: Print Settings.  (line  593)
+* pretty-printer commands:               Pretty-Printer Commands.
+                                                             (line    6)
+* print all frame argument values:       Print Settings.     (line  154)
+* print an Objective-C object description: The Print Command with Objective-C.
+                                                             (line   11)
+* print array indexes:                   Print Settings.     (line  125)
+* print frame argument values for scalars only: Print Settings.
+                                                             (line  154)
+* print list of auto-loaded canned sequences of commands scripts: Auto-loading sequences.
+                                                             (line   21)
+* print list of auto-loaded Guile scripts: Guile Auto-loading.
+                                                             (line   23)
+* print list of auto-loaded Python scripts: Python Auto-loading.
+                                                             (line   23)
+* print messages on inferior start and exit: Inferiors Connections and Programs.
+                                                             (line  179)
+* print messages on thread start and exit: Threads.          (line  272)
+* print messages when symbols are loaded: Symbols.           (line  635)
+* print settings:                        Print Settings.     (line    6)
+* print structures in indented form:     Print Settings.     (line  429)
+* print/don't print memory addresses:    Print Settings.     (line   13)
+* printing byte arrays:                  Output Formats.     (line   60)
+* printing data:                         Data.               (line    6)
+* printing frame argument values:        Print Settings.     (line  154)
+* printing frame information:            Print Settings.     (line  314)
+* printing memory tag violation information: Print Settings. (line  407)
+* printing nested structures:            Print Settings.     (line  362)
+* printing strings:                      Output Formats.     (line   60)
+* probe static tracepoint marker:        Create and Delete Tracepoints.
+                                                             (line   75)
+* probing markers, static tracepoints:   Set Tracepoints.    (line   28)
+* process detailed status information:   Process Information.
+                                                             (line   89)
+* process ID:                            Process Information.
+                                                             (line   25)
+* process info via /proc:                Process Information.
+                                                             (line    6)
+* process list, QNX Neutrino:            Process Information.
+                                                             (line  127)
+* process record and replay:             Process Record and Replay.
+                                                             (line    6)
+* process status register:               Registers.          (line   31)
+* processes, multiple:                   Forks.              (line    6)
+* procfs API calls:                      Process Information.
+                                                             (line  106)
+* profiling GDB:                         Maintenance Commands.
+                                                             (line  461)
+* program counter register:              Registers.          (line   31)
+* program entry point:                   Backtrace.          (line  155)
+* programming in guile:                  Guile API.          (line    6)
+* programming in python:                 Python API.         (line    6)
+* progspaces in guile:                   Progspaces In Guile.
+                                                             (line    6)
+* progspaces in python:                  Progspaces In Python.
+                                                             (line    6)
+* prompt:                                Prompt.             (line    6)
+* protocol basics, file-i/o:             Protocol Basics.    (line    6)
+* protocol, GDB remote serial:           Overview.           (line   14)
+* protocol-specific representation of datatypes, in file-i/o protocol: Protocol-specific Representation of Datatypes.
+                                                             (line    6)
+* python api:                            Python API.         (line    6)
+* Python architectures:                  Architectures In Python.
+                                                             (line    6)
+* Python auto-loading:                   Python Auto-loading.
+                                                             (line    6)
+* python commands:                       Python Commands.    (line    6)
+* python commands <1>:                   Commands In Python. (line    6)
+* python convenience functions:          Functions In Python.
+                                                             (line    6)
+* python directory:                      Python.             (line   12)
+* python exceptions:                     Exception Handling. (line    6)
+* python finish breakpoints:             Finish Breakpoints in Python.
+                                                             (line    6)
+* python functions:                      Basic Python.       (line   28)
+* python module:                         Basic Python.       (line   28)
+* python modules:                        Python modules.     (line    6)
+* python pagination:                     Basic Python.       (line    6)
+* python parameters:                     Parameters In Python.
+                                                             (line    6)
+* python pretty printing api:            Pretty Printing API.
+                                                             (line    6)
+* python scripting:                      Python.             (line    6)
+* python stdout:                         Basic Python.       (line    6)
+* Python TUI Windows:                    TUI Windows In Python.
+                                                             (line    6)
+* Python, working with types:            Types In Python.    (line    6)
+* python, working with values from inferior: Values From Inferior.
+                                                             (line    6)
+* q packet:                              Packets.            (line  297)
+* Q packet:                              Packets.            (line  297)
+* QAllow packet:                         General Query Packets.
+                                                             (line   44)
+* qAttached packet:                      General Query Packets.
+                                                             (line 1466)
+* qC packet:                             General Query Packets.
+                                                             (line   55)
+* QCatchSyscalls packet:                 General Query Packets.
+                                                             (line  474)
+* qCRC packet:                           General Query Packets.
+                                                             (line   65)
+* QDisableRandomization packet:          General Query Packets.
+                                                             (line   84)
+* QEnvironmentHexEncoded packet:         General Query Packets.
+                                                             (line  144)
+* QEnvironmentReset packet:              General Query Packets.
+                                                             (line  197)
+* QEnvironmentUnset packet:              General Query Packets.
+                                                             (line  173)
+* qfThreadInfo packet:                   General Query Packets.
+                                                             (line  238)
+* qGetTIBAddr packet:                    General Query Packets.
+                                                             (line  303)
+* qGetTLSAddr packet:                    General Query Packets.
+                                                             (line  271)
+* qMemTags packet:                       General Query Packets.
+                                                             (line  342)
+* QMemTags packet:                       General Query Packets.
+                                                             (line  370)
+* QNonStop packet:                       General Query Packets.
+                                                             (line  452)
+* qOffsets packet:                       General Query Packets.
+                                                             (line  415)
+* qP packet:                             General Query Packets.
+                                                             (line  442)
+* QPassSignals packet:                   General Query Packets.
+                                                             (line  513)
+* QProgramSignals packet:                General Query Packets.
+                                                             (line  542)
+* qRcmd packet:                          General Query Packets.
+                                                             (line  609)
+* qSearch memory packet:                 General Query Packets.
+                                                             (line  631)
+* QSetWorkingDir packet:                 General Query Packets.
+                                                             (line  219)
+* QStartNoAckMode packet:                General Query Packets.
+                                                             (line  648)
+* QStartupWithShell packet:              General Query Packets.
+                                                             (line  114)
+* qsThreadInfo packet:                   General Query Packets.
+                                                             (line  238)
+* qSupported packet:                     General Query Packets.
+                                                             (line  662)
+* qSymbol packet:                        General Query Packets.
+                                                             (line 1118)
+* qTBuffer packet:                       Tracepoint Packets. (line  393)
+* QTBuffer size packet:                  Tracepoint Packets. (line  406)
+* QTDisable packet:                      Tracepoint Packets. (line  209)
+* QTDisconnected packet:                 Tracepoint Packets. (line  228)
+* QTDP packet:                           Tracepoint Packets. (line   10)
+* QTDPsrc packet:                        Tracepoint Packets. (line   90)
+* QTDV packet:                           Tracepoint Packets. (line  121)
+* QTEnable packet:                       Tracepoint Packets. (line  204)
+* qTfP packet:                           Tracepoint Packets. (line  335)
+* QTFrame packet:                        Tracepoint Packets. (line  133)
+* qTfSTM packet:                         Tracepoint Packets. (line  352)
+* qTfV packet:                           Tracepoint Packets. (line  343)
+* QThreadEvents packet:                  General Query Packets.
+                                                             (line  582)
+* qThreadExtraInfo packet:               General Query Packets.
+                                                             (line 1161)
+* QTinit packet:                         Tracepoint Packets. (line  214)
+* qTMinFTPILen packet:                   Tracepoint Packets. (line  171)
+* QTNotes packet:                        Tracepoint Packets. (line  411)
+* qTP packet:                            Tracepoint Packets. (line  307)
+* QTro packet:                           Tracepoint Packets. (line  217)
+* QTSave packet:                         Tracepoint Packets. (line  387)
+* qTsP packet:                           Tracepoint Packets. (line  336)
+* qTsSTM packet:                         Tracepoint Packets. (line  352)
+* QTStart packet:                        Tracepoint Packets. (line  195)
+* qTStatus packet:                       Tracepoint Packets. (line  234)
+* qTSTMat packet:                        Tracepoint Packets. (line  381)
+* QTStop packet:                         Tracepoint Packets. (line  201)
+* qTsV packet:                           Tracepoint Packets. (line  344)
+* qTV packet:                            Tracepoint Packets. (line  318)
+* qualified thread ID:                   Threads.            (line   52)
+* query attached, remote request:        General Query Packets.
+                                                             (line 1466)
+* quotes in commands:                    Completion.         (line   83)
+* quoting Ada internal identifiers:      Additions to Ada.   (line   76)
+* quoting names:                         Symbols.            (line   14)
+* qXfer packet:                          General Query Packets.
+                                                             (line 1198)
+* r packet:                              Packets.            (line  301)
+* R packet:                              Packets.            (line  306)
+* range checking:                        Type Checking.      (line   45)
+* range stepping:                        Continuing and Stepping.
+                                                             (line  217)
+* ranged breakpoint:                     PowerPC Embedded.   (line   33)
+* ranges of breakpoints:                 Breakpoints.        (line   45)
+* Ravenscar Profile:                     Ravenscar Profile.  (line    6)
+* Ravenscar thread:                      Ravenscar Profile.  (line   26)
+* raw printing:                          Output Formats.     (line   76)
+* read special object, remote request:   General Query Packets.
+                                                             (line 1198)
+* read, file-i/o system call:            read.               (line    6)
+* read-only sections:                    Files.              (line  275)
+* reading symbols from relocatable object files: Files.      (line  146)
+* reading symbols immediately:           Files.              (line   94)
+* readline:                              Editing.            (line    6)
+* Readline application name:             Editing.            (line   29)
+* receive rights, GNU Hurd:              Hurd Native.        (line   84)
+* recent tracepoint number:              Create and Delete Tracepoints.
+                                                             (line  122)
+* record aggregates (Ada):               Omissions from Ada. (line   44)
+* record mode:                           Process Record and Replay.
+                                                             (line   19)
+* record serial communications on file:  Remote Configuration.
+                                                             (line   64)
+* recording a session script:            Bug Reporting.      (line   93)
+* recording inferior's execution and replaying it: Process Record and Replay.
+                                                             (line    6)
+* recordings in python:                  Recordings In Python.
+                                                             (line    6)
+* redirection:                           Input/Output.       (line    6)
+* reference card:                        Formatting Documentation.
+                                                             (line    6)
+* reference declarations:                C Plus Plus Expressions.
+                                                             (line   50)
+* register cache, flushing:              Maintenance Commands.
+                                                             (line  322)
+* register packet format, MIPS:          MIPS Register packet Format.
+                                                             (line    6)
+* registers:                             Registers.          (line    6)
+* Registers In Python:                   Registers In Python.
+                                                             (line    6)
+* regular expression:                    Set Breaks.         (line  145)
+* reloading the overlay table:           Overlay Commands.   (line   52)
+* relocatable object files, reading symbols from: Files.     (line  146)
+* remote async notification debugging info: Debugging Output.
+                                                             (line  175)
+* remote connection commands:            Connecting.         (line  127)
+* remote connection without stubs:       Server.             (line    6)
+* remote debugging:                      Remote Debugging.   (line    6)
+* remote debugging, connecting:          Connecting.         (line    6)
+* remote debugging, detach and program exit: Connecting.     (line   19)
+* remote debugging, symbol files:        Connecting.         (line   97)
+* remote debugging, types of connections: Connecting.        (line    6)
+* remote memory comparison:              Memory.             (line  159)
+* remote packets, enabling and disabling: Remote Configuration.
+                                                             (line  159)
+* remote programs, interrupting:         Connecting.         (line  246)
+* remote protocol debugging:             Debugging Output.   (line  203)
+* remote protocol, binary data:          Overview.           (line   63)
+* remote protocol, field separator:      Overview.           (line   55)
+* remote query requests:                 General Query Packets.
+                                                             (line    6)
+* remote serial debugging summary:       Debug Session.      (line    6)
+* remote serial debugging, overview:     Remote Stub.        (line   14)
+* remote serial protocol:                Overview.           (line   14)
+* remote serial stub:                    Stub Contents.      (line    6)
+* remote serial stub list:               Remote Stub.        (line   53)
+* remote serial stub, initialization:    Stub Contents.      (line   10)
+* remote serial stub, main routine:      Stub Contents.      (line   15)
+* remote stub, example:                  Remote Stub.        (line    6)
+* remote stub, support routines:         Bootstrapping.      (line    6)
+* remote target:                         Target Commands.    (line   58)
+* remote target, file transfer:          File Transfer.      (line    6)
+* remote target, limit break- and watchpoints: Remote Configuration.
+                                                             (line   79)
+* remote target, limit watchpoints length: Remote Configuration.
+                                                             (line   91)
+* remote timeout:                        Remote Configuration.
+                                                             (line   72)
+* remove actions from a tracepoint:      Tracepoint Actions. (line   21)
+* remove duplicate history:              Command History.    (line   69)
+* rename, file-i/o system call:          rename.             (line    6)
+* Renesas:                               Remote Stub.        (line   62)
+* repeated array elements:               Print Settings.     (line  348)
+* repeating command sequences:           Command Syntax.     (line   41)
+* repeating commands:                    Command Syntax.     (line   21)
+* replay log events, remote reply:       Stop Reply Packets. (line   70)
+* replay mode:                           Process Record and Replay.
+                                                             (line   10)
+* reporting bugs in GDB:                 GDB Bugs.           (line    6)
+* reprint the last value:                Data.               (line  112)
+* reprint the last value <1>:            Compiling and Injecting Code.
+                                                             (line   74)
+* reset environment, remote request:     General Query Packets.
+                                                             (line  197)
+* resources used by commands:            Maintenance Commands.
+                                                             (line  532)
+* response time, MIPS debugging:         MIPS.               (line   10)
+* restart:                               Checkpoint/Restart. (line    6)
+* restore data from a file:              Dump/Restore Files. (line    6)
+* restrictions on Go expressions:        Go.                 (line   35)
+* result records in GDB/MI:              GDB/MI Result Records.
+                                                             (line    6)
+* resume threads of multiple processes simultaneously: All-Stop Mode.
+                                                             (line   54)
+* resuming execution:                    Continuing and Stepping.
+                                                             (line    6)
+* returning from a function:             Returning.          (line    6)
+* reverse execution:                     Reverse Execution.  (line    6)
+* rewind program state:                  Checkpoint/Restart. (line    6)
+* run to first instruction:              Starting.           (line  114)
+* run to main procedure:                 Starting.           (line   81)
+* run until specified location:          Continuing and Stepping.
+                                                             (line  124)
+* running:                               Starting.           (line    6)
+* running programs backward:             Reverse Execution.  (line    6)
+* s packet:                              Packets.            (line  313)
+* S packet:                              Packets.            (line  322)
+* S12Z support:                          S12Z.               (line    6)
+* save breakpoints to a file for future sessions: Save Breakpoints.
+                                                             (line    9)
+* save command history:                  Command History.    (line   44)
+* save GDB output to a file:             Logging Output.     (line    6)
+* save tracepoints for future sessions:  save tracepoints.   (line    6)
+* scheduler locking mode:                All-Stop Mode.      (line   37)
+* scope:                                 M2 Scope.           (line    6)
+* screen size:                           Screen Size.        (line    6)
+* scripting commands:                    Command Files.      (line    6)
+* scripting with guile:                  Guile.              (line    6)
+* scripting with python:                 Python.             (line    6)
+* search for a thread:                   Threads.            (line  258)
+* search path for libthread_db:          Threads.            (line  293)
+* searching memory:                      Searching Memory.   (line    6)
+* searching memory, in remote debugging: General Query Packets.
+                                                             (line  631)
+* searching source files:                Search.             (line    6)
+* section offsets, remote request:       General Query Packets.
+                                                             (line  415)
+* segment descriptor tables:             DJGPP Native.       (line   24)
+* select Ctrl-C, BREAK or BREAK-g:       Remote Configuration.
+                                                             (line  108)
+* select trace snapshot:                 tfind.              (line    6)
+* selected frame:                        Stack.              (line   19)
+* selecting guile pretty-printers:       Selecting Guile Pretty-Printers.
+                                                             (line    6)
+* selecting python pretty-printers:      Selecting Pretty-Printers.
+                                                             (line    6)
+* self tests:                            Maintenance Commands.
+                                                             (line  383)
+* self tests <1>:                        Maintenance Commands.
+                                                             (line  389)
+* semaphores on static probe points:     Static Probe Points.
+                                                             (line   20)
+* send command to remote monitor:        Connecting.         (line  279)
+* send command to simulator:             Embedded Processors.
+                                                             (line    9)
+* send interrupt-sequence on start:      Remote Configuration.
+                                                             (line  121)
+* send rights, GNU Hurd:                 Hurd Native.        (line   84)
+* send the output of a gdb command to a shell command: Shell Commands.
+                                                             (line   26)
+* sending files to remote systems:       File Transfer.      (line    6)
+* separate debug sections:               MiniDebugInfo.      (line    6)
+* separate debugging information files:  Separate Debug Files.
+                                                             (line    6)
+* sequence-id, for GDB remote:           Overview.           (line   30)
+* serial connections, debugging:         Debugging Output.   (line  203)
+* serial line, target remote:            Connecting.         (line  136)
+* serial protocol, GDB remote:           Overview.           (line   14)
+* server prefix:                         Server Prefix.      (line    6)
+* server, command prefix:                Command History.    (line   20)
+* set ABI for MIPS:                      MIPS.               (line   32)
+* set breakpoints in many functions:     Set Breaks.         (line  145)
+* set breakpoints on all functions:      Set Breaks.         (line  172)
+* set environment variable, remote request: General Query Packets.
+                                                             (line  144)
+* set exec-file-mismatch:                Attach.             (line   34)
+* set fast tracepoint:                   Create and Delete Tracepoints.
+                                                             (line   50)
+* set inferior controlling terminal:     Input/Output.       (line   44)
+* set static tracepoint:                 Create and Delete Tracepoints.
+                                                             (line   75)
+* set tdesc filename:                    Retrieving Descriptions.
+                                                             (line   18)
+* set tracepoint:                        Create and Delete Tracepoints.
+                                                             (line    6)
+* set working directory, remote request: General Query Packets.
+                                                             (line  219)
+* setting variables:                     Assignment.         (line    6)
+* setting watchpoints:                   Set Watchpoints.    (line    6)
+* settings:                              Command Settings.   (line   39)
+* SH:                                    Remote Stub.        (line   62)
+* sh-stub.c:                             Remote Stub.        (line   62)
+* shared libraries:                      Files.              (line  297)
+* shared library events, remote reply:   Stop Reply Packets. (line   65)
+* shell command, exit code:              Convenience Vars.   (line  188)
+* shell command, exit signal:            Convenience Vars.   (line  188)
+* shell escape:                          Shell Commands.     (line   10)
+* show all convenience functions:        Convenience Funs.   (line  228)
+* show all user variables and functions: Convenience Vars.   (line   37)
+* show exec-file-mismatch:               Attach.             (line   44)
+* show inferior's working directory:     Working Directory.  (line   27)
+* show last commands:                    Command History.    (line  110)
+* show tdesc filename:                   Retrieving Descriptions.
+                                                             (line   25)
+* signals:                               Signals.            (line    6)
+* signals the inferior may see, remote request: General Query Packets.
+                                                             (line  542)
+* SIGQUIT signal, dump core of GDB:      Maintenance Commands.
+                                                             (line  169)
+* SingleKey keymap name:                 TUI Single Key Mode.
+                                                             (line   53)
+* size of remote memory accesses:        Packets.            (line  248)
+* size of screen:                        Screen Size.        (line    6)
+* skipping over files via glob-style patterns: Skipping Over Functions and Files.
+                                                             (line   55)
+* skipping over functions and files:     Skipping Over Functions and Files.
+                                                             (line    6)
+* skipping over functions via regular expressions: Skipping Over Functions and Files.
+                                                             (line   68)
+* snapshot of a process:                 Checkpoint/Restart. (line    6)
+* software watchpoints:                  Set Watchpoints.    (line   31)
+* source file and line of a symbol:      Print Settings.     (line   50)
+* source line and its code address:      Machine Code.       (line    6)
+* source location:                       Specify Location.   (line    6)
+* source path:                           Source Path.        (line    6)
+* Sparc:                                 Remote Stub.        (line   65)
+* sparc-stub.c:                          Remote Stub.        (line   65)
+* Sparc64 support:                       Sparc64.            (line    6)
+* sparcl-stub.c:                         Remote Stub.        (line   68)
+* SparcLite:                             Remote Stub.        (line   68)
+* Special Fortran commands:              Special Fortran Commands.
+                                                             (line    6)
+* specifying location:                   Specify Location.   (line    6)
+* SSE registers (x86):                   Registers.          (line   76)
+* stack frame:                           Frames.             (line    6)
+* stack on Alpha:                        MIPS.               (line    6)
+* stack on MIPS:                         MIPS.               (line    6)
+* stack pointer register:                Registers.          (line   31)
+* stacking targets:                      Active Targets.     (line    6)
+* standard registers:                    Registers.          (line   31)
+* start a new independent interpreter:   Interpreters.       (line   52)
+* start a new trace experiment:          Starting and Stopping Trace Experiments.
+                                                             (line    6)
+* starting:                              Starting.           (line    6)
+* startup code, and backtrace:           Backtrace.          (line  155)
+* startup with shell, remote request:    General Query Packets.
+                                                             (line  114)
+* stat, file-i/o system call:            stat/fstat.         (line    6)
+* static members of C++ objects:         Print Settings.     (line  571)
+* static members of Pascal objects:      Print Settings.     (line  582)
+* static probe point, DTrace:            Static Probe Points.
+                                                             (line    6)
+* static probe point, SystemTap:         Static Probe Points.
+                                                             (line    6)
+* static tracepoints:                    Set Tracepoints.    (line   28)
+* static tracepoints, in remote protocol: General Query Packets.
+                                                             (line 1036)
+* static tracepoints, setting:           Create and Delete Tracepoints.
+                                                             (line   75)
+* status of trace data collection:       Starting and Stopping Trace Experiments.
+                                                             (line   27)
+* status output in GDB/MI:               GDB/MI Output Syntax.
+                                                             (line   94)
+* stepping:                              Continuing and Stepping.
+                                                             (line    6)
+* stepping and signal handlers:          Signals.            (line  106)
+* stepping into functions with no line info: Continuing and Stepping.
+                                                             (line   92)
+* stop a running trace experiment:       Starting and Stopping Trace Experiments.
+                                                             (line   16)
+* stop on C++ exceptions:                Set Catchpoints.    (line   16)
+* stop reply packets:                    Stop Reply Packets. (line    6)
+* stopped threads:                       Thread Stops.       (line    6)
+* store memory tags:                     General Query Packets.
+                                                             (line  370)
+* stream records in GDB/MI:              GDB/MI Stream Records.
+                                                             (line    6)
+* string tracing, in remote protocol:    General Query Packets.
+                                                             (line 1053)
+* struct gdb_reader_funcs:               Writing JIT Debug Info Readers.
+                                                             (line   22)
+* struct gdb_symbol_callbacks:           Writing JIT Debug Info Readers.
+                                                             (line   43)
+* struct gdb_unwind_callbacks:           Writing JIT Debug Info Readers.
+                                                             (line   43)
+* struct return convention:              i386.               (line    7)
+* struct stat, in file-i/o protocol:     struct stat.        (line    6)
+* struct timeval, in file-i/o protocol:  struct timeval.     (line    6)
+* struct/union returned in registers:    i386.               (line    7)
+* structure field name completion:       Completion.         (line  135)
+* stub example, remote debugging:        Remote Stub.        (line    6)
+* stupid questions:                      Messages/Warnings.  (line   49)
+* styling:                               Output Styling.     (line    6)
+* Super-H:                               Super-H.            (line    6)
+* supported GDB/MI features, list:       GDB/MI Support Commands.
+                                                             (line   57)
+* supported packets, remote query:       General Query Packets.
+                                                             (line  662)
+* switching threads:                     Threads.            (line    6)
+* switching threads automatically:       All-Stop Mode.      (line   28)
+* symbol cache size:                     Symbols.            (line  733)
+* symbol cache, flushing:                Symbols.            (line  749)
+* symbol cache, printing its contents:   Symbols.            (line  741)
+* symbol cache, printing usage statistics: Symbols.          (line  745)
+* symbol decoding style, C++:            Print Settings.     (line  541)
+* symbol dump:                           Symbols.            (line  654)
+* symbol file functions:                 Debugging Output.   (line  251)
+* symbol files, remote debugging:        Connecting.         (line   97)
+* symbol from address:                   Symbols.            (line  108)
+* symbol lookup:                         Debugging Output.   (line  243)
+* symbol lookup, remote request:         General Query Packets.
+                                                             (line 1118)
+* symbol names:                          Symbols.            (line   14)
+* symbol table:                          Files.              (line    6)
+* symbol table creation:                 Debugging Output.   (line  257)
+* symbol tables in guile:                Symbol Tables In Guile.
+                                                             (line    6)
+* symbol tables in python:               Symbol Tables In Python.
+                                                             (line    6)
+* symbol tables, listing GDB's internal: Symbols.            (line  680)
+* symbol, source file and line:          Print Settings.     (line   50)
+* symbols in guile:                      Symbols In Guile.   (line    6)
+* symbols in python:                     Symbols In Python.  (line    6)
+* symbols, never read:                   Files.              (line  101)
+* symbols, reading from relocatable object files: Files.     (line  146)
+* symbols, reading immediately:          Files.              (line   94)
+* Synopsys ARC:                          ARC.                (line    6)
+* syscall DSO:                           Files.              (line  193)
+* system calls and thread breakpoints:   Interrupted System Calls.
+                                                             (line    6)
+* system root, alternate:                Files.              (line  396)
+* system, file-i/o system call:          system.             (line    6)
+* system-wide configuration scripts:     System-wide Configuration Scripts.
+                                                             (line    6)
+* system-wide init file:                 System-wide configuration.
+                                                             (line    6)
+* t packet:                              Packets.            (line  332)
+* T packet:                              Packets.            (line  337)
+* T packet reply:                        Stop Reply Packets. (line   26)
+* tail call frames, debugging:           Tail Call Frames.   (line    6)
+* target architecture:                   Targets.            (line   17)
+* target byte order:                     Byte Order.         (line    6)
+* target character set:                  Character Sets.     (line    6)
+* target debugging info:                 Debugging Output.   (line  265)
+* target descriptions:                   Target Descriptions.
+                                                             (line    6)
+* target descriptions, AArch64 features: AArch64 Features.   (line    6)
+* target descriptions, ARC Features:     ARC Features.       (line    6)
+* target descriptions, ARM features:     ARM Features.       (line    6)
+* target descriptions, enum types:       Enum Target Types.  (line    6)
+* target descriptions, i386 features:    i386 Features.      (line    6)
+* target descriptions, inclusion:        Target Description Format.
+                                                             (line   53)
+* target descriptions, M68K features:    M68K Features.      (line    6)
+* target descriptions, MicroBlaze features: MicroBlaze Features.
+                                                             (line    6)
+* target descriptions, MIPS features:    MIPS Features.      (line    6)
+* target descriptions, NDS32 features:   NDS32 Features.     (line    6)
+* target descriptions, Nios II features: Nios II Features.   (line    6)
+* target descriptions, OpenRISC 1000 features: OpenRISC 1000 Features.
+                                                             (line    6)
+* target descriptions, PowerPC features: PowerPC Features.   (line    6)
+* target descriptions, predefined types: Predefined Target Types.
+                                                             (line    6)
+* target descriptions, RISC-V Features:  RISC-V Features.    (line    6)
+* target descriptions, RX Features:      RX Features.        (line    6)
+* target descriptions, S/390 features:   S/390 and System z Features.
+                                                             (line    6)
+* target descriptions, sparc32 features: Sparc Features.     (line    6)
+* target descriptions, sparc64 features: Sparc Features.     (line    6)
+* target descriptions, standard features: Standard Target Features.
+                                                             (line    6)
+* target descriptions, System z features: S/390 and System z Features.
+                                                             (line    6)
+* target descriptions, TIC6x features:   TIC6x Features.     (line    6)
+* target descriptions, TMS320C6x features: TIC6x Features.   (line    6)
+* target descriptions, XML format:       Target Description Format.
+                                                             (line    6)
+* target memory comparison:              Memory.             (line  159)
+* target output in GDB/MI:               GDB/MI Output Syntax.
+                                                             (line  110)
+* target stack description:              Maintenance Commands.
+                                                             (line  364)
+* target-assisted range stepping:        Continuing and Stepping.
+                                                             (line  217)
+* task attributes (GNU Hurd):            Hurd Native.        (line   48)
+* task breakpoints, in Ada:              Ada Tasks.          (line  135)
+* task exception port, GNU Hurd:         Hurd Native.        (line   67)
+* task suspend count:                    Hurd Native.        (line   59)
+* task switching with program using Ravenscar Profile: Ravenscar Profile.
+                                                             (line   10)
+* TCP port, target remote:               Connecting.         (line  173)
+* temporarily change settings:           Command Settings.   (line   39)
+* terminal:                              Input/Output.       (line    6)
+* Text User Interface:                   TUI.                (line    6)
+* thread attributes info, remote request: General Query Packets.
+                                                             (line 1161)
+* thread breakpoints:                    Thread-Specific Breakpoints.
+                                                             (line   10)
+* thread breakpoints and system calls:   Interrupted System Calls.
+                                                             (line    6)
+* thread create event, remote reply:     Stop Reply Packets. (line  152)
+* thread create/exit events, remote request: General Query Packets.
+                                                             (line  582)
+* thread default settings, GNU Hurd:     Hurd Native.        (line  130)
+* thread exit event, remote reply:       Stop Reply Packets. (line  181)
+* thread ID lists:                       Threads.            (line   65)
+* thread identifier (GDB):               Threads.            (line   47)
+* thread identifier (system):            Threads.            (line   35)
+* thread info (Solaris):                 Threads.            (line  167)
+* thread information, remote request:    General Query Packets.
+                                                             (line  442)
+* thread list format:                    Thread List Format. (line    6)
+* thread number, per inferior:           Threads.            (line   47)
+* thread properties, GNU Hurd:           Hurd Native.        (line   90)
+* thread suspend count, GNU Hurd:        Hurd Native.        (line  109)
+* THREAD-ID, in remote protocol:         Packets.            (line   20)
+* threads and watchpoints:               Set Watchpoints.    (line  179)
+* threads in python:                     Threads In Python.  (line    6)
+* threads of execution:                  Threads.            (line    6)
+* threads, automatic switching:          All-Stop Mode.      (line   28)
+* threads, continuing:                   Thread Stops.       (line    6)
+* threads, stopped:                      Thread Stops.       (line    6)
+* time of command execution:             Maintenance Commands.
+                                                             (line  582)
+* timeout for commands:                  Maintenance Commands.
+                                                             (line  633)
+* timeout for serial communications:     Remote Configuration.
+                                                             (line   72)
+* timeout, for remote target connection: Remote Configuration.
+                                                             (line  147)
+* timestamping debugging info:           Debugging Output.   (line  273)
+* trace experiment, status of:           Starting and Stopping Trace Experiments.
+                                                             (line   27)
+* trace file format:                     Trace File Format.  (line    6)
+* trace files:                           Trace Files.        (line    6)
+* trace state variable value, remote request: Tracepoint Packets.
+                                                             (line  318)
+* trace state variables:                 Trace State Variables.
+                                                             (line    6)
+* traceback:                             Backtrace.          (line    6)
+* traceframe info format:                Traceframe Info Format.
+                                                             (line    6)
+* tracepoint actions:                    Tracepoint Actions. (line    6)
+* tracepoint conditions:                 Tracepoint Conditions.
+                                                             (line    6)
+* tracepoint data, display:              tdump.              (line    6)
+* tracepoint deletion:                   Create and Delete Tracepoints.
+                                                             (line  125)
+* tracepoint number:                     Create and Delete Tracepoints.
+                                                             (line  122)
+* tracepoint packets:                    Tracepoint Packets. (line    6)
+* tracepoint pass count:                 Tracepoint Passcounts.
+                                                             (line    6)
+* tracepoint restrictions:               Tracepoint Restrictions.
+                                                             (line    6)
+* tracepoint status, remote request:     Tracepoint Packets. (line  307)
+* tracepoint variables:                  Tracepoint Variables.
+                                                             (line    6)
+* tracepoints:                           Tracepoints.        (line    6)
+* tracepoints support in gdbserver:      Server.             (line  272)
+* trailing underscore, in Fortran symbols: Fortran.          (line    9)
+* translating between character sets:    Character Sets.     (line    6)
+* TUI:                                   TUI.                (line    6)
+* TUI commands:                          TUI Commands.       (line    6)
+* TUI configuration variables:           TUI Configuration.  (line    6)
+* TUI key bindings:                      TUI Keys.           (line    6)
+* TUI mouse support:                     TUI Mouse Support.  (line    6)
+* TUI single key mode:                   TUI Single Key Mode.
+                                                             (line    6)
+* type casting memory:                   Expressions.        (line   41)
+* type chain of a data type:             Maintenance Commands.
+                                                             (line  376)
+* type checking:                         Checks.             (line   24)
+* type conversions in C++:               C Plus Plus Expressions.
+                                                             (line   26)
+* type printer:                          Type Printing API.  (line    9)
+* type printing API for Python:          Type Printing API.  (line    6)
+* types in guile:                        Types In Guile.     (line    6)
+* types in Python:                       Types In Python.    (line    6)
+* UDP port, target remote:               Connecting.         (line  222)
+* union field name completion:           Completion.         (line  135)
+* unions in structures, printing:        Print Settings.     (line  481)
+* Unix domain socket:                    Connecting.         (line  147)
+* unknown address, locating:             Output Formats.     (line   35)
+* unknown type:                          Symbols.            (line  384)
+* unlink, file-i/o system call:          unlink.             (line    6)
+* unlinked object files:                 Files.              (line   26)
+* unload symbols from shared libraries:  Files.              (line  358)
+* unmap an overlay:                      Overlay Commands.   (line   39)
+* unmapped overlays:                     How Overlays Work.  (line    6)
+* unset environment variable, remote request: General Query Packets.
+                                                             (line  173)
+* unset tdesc filename:                  Retrieving Descriptions.
+                                                             (line   21)
+* unsupported languages:                 Unsupported Languages.
+                                                             (line    6)
+* unwind stack in called functions:      Calling.            (line   36)
+* unwind stack in called functions with unhandled exceptions: Calling.
+                                                             (line   47)
+* unwinding frames in Python:            Unwinding Frames in Python.
+                                                             (line    6)
+* use only software watchpoints:         Set Watchpoints.    (line  108)
+* user registers:                        Maintenance Commands.
+                                                             (line  335)
+* user-defined command:                  Define.             (line    6)
+* user-defined macros:                   Macros.             (line   59)
+* user-defined variables:                Convenience Vars.   (line    6)
+* value history:                         Value History.      (line    6)
+* values from inferior, in guile:        Values From Inferior In Guile.
+                                                             (line    6)
+* values from inferior, with Python:     Values From Inferior.
+                                                             (line    6)
+* variable name conflict:                Variables.          (line   36)
+* variable object debugging info:        Debugging Output.   (line  281)
+* variable objects in GDB/MI:            GDB/MI Variable Objects.
+                                                             (line    9)
+* variable values, wrong:                Variables.          (line  106)
+* variables, readline:                   Readline Init File Syntax.
+                                                             (line   34)
+* variables, setting:                    Assignment.         (line   16)
+* vAttach packet:                        Packets.            (line  351)
+* vCont packet:                          Packets.            (line  369)
+* vCont? packet:                         Packets.            (line  436)
+* vCtrlC packet:                         Packets.            (line  446)
+* vector unit:                           Vector Unit.        (line    6)
+* vector, auxiliary:                     OS Information.     (line    9)
+* verbose operation:                     Messages/Warnings.  (line    6)
+* verify remote memory image:            Memory.             (line  159)
+* verify target memory image:            Memory.             (line  159)
+* vFile packet:                          Packets.            (line  460)
+* vFlashDone packet:                     Packets.            (line  499)
+* vFlashErase packet:                    Packets.            (line  464)
+* vFlashWrite packet:                    Packets.            (line  479)
+* vfork events, remote reply:            Stop Reply Packets. (line  116)
+* vforkdone events, remote reply:        Stop Reply Packets. (line  128)
+* virtual functions (C++) display:       Print Settings.     (line  593)
+* vKill packet:                          Packets.            (line  506)
+* vMustReplyEmpty packet:                Packets.            (line  518)
+* volatile registers:                    Registers.          (line  106)
+* vRun packet:                           Packets.            (line  530)
+* vStopped packet:                       Packets.            (line  545)
+* VTBL display:                          Print Settings.     (line  593)
+* watchdog timer:                        Maintenance Commands.
+                                                             (line  633)
+* watchpoints:                           Breakpoints.        (line   17)
+* watchpoints and threads:               Set Watchpoints.    (line  179)
+* where to look for shared libraries:    Files.              (line  391)
+* wild pointer, interpreting:            Print Settings.     (line   80)
+* Wind River Linux system-wide configuration script: System-wide Configuration Scripts.
+                                                             (line   22)
+* word completion:                       Completion.         (line    6)
+* working directory:                     Source Path.        (line   40)
+* working directory (of your program):   Working Directory.  (line    6)
+* working language:                      Languages.          (line   13)
+* write data into object, remote request: General Query Packets.
+                                                             (line 1423)
+* write, file-i/o system call:           write.              (line    6)
+* writing a frame filter:                Writing a Frame Filter.
+                                                             (line    6)
+* writing a Guile pretty-printer:        Writing a Guile Pretty-Printer.
+                                                             (line    6)
+* writing a pretty-printer:              Writing a Pretty-Printer.
+                                                             (line    6)
+* writing convenience functions:         Functions In Python.
+                                                             (line    6)
+* writing into corefiles:                Patching.           (line    6)
+* writing into executables:              Patching.           (line    6)
+* writing into executables <1>:          Compiling and Injecting Code.
+                                                             (line    6)
+* writing JIT debug info readers:        Writing JIT Debug Info Readers.
+                                                             (line    6)
+* writing xmethods in Python:            Writing an Xmethod. (line    6)
+* wrong values:                          Variables.          (line  106)
+* x command, default address:            Machine Code.       (line   34)
+* X packet:                              Packets.            (line  548)
+* Xilinx MicroBlaze:                     MicroBlaze.         (line    6)
+* XInclude:                              Target Description Format.
+                                                             (line   53)
+* XMD, Xilinx Microprocessor Debugger:   MicroBlaze.         (line    6)
+* xmethod API:                           Xmethod API.        (line    6)
+* xmethods in Python:                    Xmethods In Python. (line    6)
+* XML parser debugging:                  Debugging Output.   (line  288)
+* yanking text:                          Readline Killing Commands.
+                                                             (line    6)
+* z packet:                              Packets.            (line  561)
+* Z packets:                             Packets.            (line  561)
+* z0 packet:                             Packets.            (line  576)
+* Z0 packet:                             Packets.            (line  576)
+* z1 packet:                             Packets.            (line  631)
+* Z1 packet:                             Packets.            (line  631)
+* z2 packet:                             Packets.            (line  652)
+* Z2 packet:                             Packets.            (line  652)
+* z3 packet:                             Packets.            (line  665)
+* Z3 packet:                             Packets.            (line  665)
+* z4 packet:                             Packets.            (line  678)
+* Z4 packet:                             Packets.            (line  678)
+
+
 File: gdb.info,  Node: Command and Variable Index,  Prev: Concept Index,  Up: Top
 
 Command, Variable, and Function Index
@@ -79,21 +2587,21 @@ Command, Variable, and Function Index
                                                               (line 129)
 * $_gdb_maint_setting_str, convenience function: Convenience Funs.
                                                               (line 125)
-* $_gdb_major, convenience variable:     Convenience Vars.    (line 178)
-* $_gdb_minor, convenience variable:     Convenience Vars.    (line 178)
+* $_gdb_major, convenience variable:     Convenience Vars.    (line 179)
+* $_gdb_minor, convenience variable:     Convenience Vars.    (line 179)
 * $_gdb_setting, convenience function:   Convenience Funs.    (line  76)
 * $_gdb_setting_str, convenience function: Convenience Funs.  (line  63)
 * $_gthread, convenience variable:       Threads.             (line  98)
-* $_inferior, convenience variable:      Inferiors and Programs.
-                                                              (line  56)
+* $_inferior, convenience variable:      Inferiors Connections and Programs.
+                                                              (line 100)
 * $_isvoid, convenience function:        Convenience Funs.    (line  15)
 * $_memeq, convenience function:         Convenience Funs.    (line 136)
 * $_probe_arg, convenience variable:     Static Probe Points. (line  77)
 * $_regex, convenience function:         Convenience Funs.    (line 140)
 * $_sdata, collect:                      Tracepoint Actions.  (line  86)
 * $_sdata, inspect, convenience variable: Convenience Vars.   (line 147)
-* $_shell_exitcode, convenience variable: Convenience Vars.   (line 187)
-* $_shell_exitsignal, convenience variable: Convenience Vars. (line 187)
+* $_shell_exitcode, convenience variable: Convenience Vars.   (line 188)
+* $_shell_exitsignal, convenience variable: Convenience Vars. (line 188)
 * $_siginfo, convenience variable:       Convenience Vars.    (line 153)
 * $_streq, convenience function:         Convenience Funs.    (line 145)
 * $_strlen, convenience function:        Convenience Funs.    (line 149)
@@ -113,21 +2621,21 @@ Command, Variable, and Function Index
 * -break-condition:                      GDB/MI Breakpoint Commands.
                                                               (line  90)
 * -break-delete:                         GDB/MI Breakpoint Commands.
-                                                              (line 127)
+                                                              (line 130)
 * -break-disable:                        GDB/MI Breakpoint Commands.
-                                                              (line 161)
+                                                              (line 164)
 * -break-enable:                         GDB/MI Breakpoint Commands.
-                                                              (line 197)
+                                                              (line 200)
 * -break-info:                           GDB/MI Breakpoint Commands.
-                                                              (line 232)
+                                                              (line 235)
 * -break-insert:                         GDB/MI Breakpoint Commands.
-                                                              (line 256)
+                                                              (line 259)
 * -break-list:                           GDB/MI Breakpoint Commands.
-                                                              (line 427)
+                                                              (line 439)
 * -break-passcount:                      GDB/MI Breakpoint Commands.
-                                                              (line 499)
-* -break-watch:                          GDB/MI Breakpoint Commands.
                                                               (line 511)
+* -break-watch:                          GDB/MI Breakpoint Commands.
+                                                              (line 523)
 * -catch-assert:                         Ada Exception GDB/MI Catchpoint Commands.
                                                               (line  12)
 * -catch-catch:                          C++ Exception GDB/MI Catchpoint Commands.
@@ -163,7 +2671,7 @@ Command, Variable, and Function Index
 * -data-write-memory-bytes:              GDB/MI Data Manipulation.
                                                               (line 575)
 * -dprintf-insert:                       GDB/MI Breakpoint Commands.
-                                                              (line 363)
+                                                              (line 372)
 * -enable-frame-filters:                 GDB/MI Stack Manipulation.
                                                               (line   9)
 * -enable-pretty-printing:               GDB/MI Variable Objects.
@@ -211,9 +2719,9 @@ Command, Variable, and Function Index
 * -file-list-exec-source-files:          GDB/MI File Commands.
                                                               (line  93)
 * -file-list-shared-libraries:           GDB/MI File Commands.
-                                                              (line 123)
+                                                              (line 225)
 * -file-symbol-file:                     GDB/MI File Commands.
-                                                              (line 157)
+                                                              (line 259)
 * -gdb-exit:                             GDB/MI Miscellaneous Commands.
                                                               (line   9)
 * -gdb-set:                              GDB/MI Miscellaneous Commands.
@@ -363,7 +2871,7 @@ Command, Variable, and Function Index
 * ^running:                              GDB/MI Result Records.
                                                               (line  14)
 * __init__ on TypePrinter:               gdb.types.           (line  82)
-* |:                                     Shell Commands.      (line  25)
+* |:                                     Shell Commands.      (line  26)
 * abort (C-g):                           Miscellaneous Commands.
                                                               (line  10)
 * accept-line (Newline or Return):       Commands For History.
@@ -374,9 +2882,9 @@ Command, Variable, and Function Index
 * add-auto-load-safe-path:               Auto-loading safe path.
                                                               (line  50)
 * add-auto-load-scripts-directory:       objfile-gdbdotext file.
-                                                              (line  64)
-* add-inferior:                          Inferiors and Programs.
-                                                              (line  69)
+                                                              (line  68)
+* add-inferior:                          Inferiors Connections and Programs.
+                                                              (line 113)
 * add-symbol-file:                       Files.               (line 123)
 * add-symbol-file-from-memory:           Files.               (line 193)
 * adi assign:                            Sparc64.             (line  45)
@@ -387,7 +2895,7 @@ Command, Variable, and Function Index
 * append:                                Dump/Restore Files.  (line  34)
 * append-pretty-printer!:                Guile Printing Module.
                                                               (line  18)
-* apropos:                               Help.                (line  62)
+* apropos:                               Help.                (line  74)
 * arch-bool-type:                        Architectures In Guile.
                                                               (line  84)
 * arch-char-type:                        Architectures In Guile.
@@ -450,6 +2958,10 @@ Command, Variable, and Function Index
                                                               (line  15)
 * Architecture.name:                     Architectures In Python.
                                                               (line  12)
+* Architecture.registers:                Architectures In Python.
+                                                              (line  47)
+* Architecture.register_groups:          Architectures In Python.
+                                                              (line  53)
 * attach:                                Attach.              (line   6)
 * attach&:                               Background Execution.
                                                               (line  25)
@@ -459,9 +2971,9 @@ Command, Variable, and Function Index
 * backward-char (C-b):                   Commands For Moving. (line  15)
 * backward-delete-char (Rubout):         Commands For Text.   (line  17)
 * backward-kill-line (C-x Rubout):       Commands For Killing.
-                                                              (line   9)
+                                                              (line  11)
 * backward-kill-word (M-<DEL>):          Commands For Killing.
-                                                              (line  24)
+                                                              (line  28)
 * backward-word (M-b):                   Commands For Moving. (line  22)
 * beginning-of-history (M-<):            Commands For History.
                                                               (line  19)
@@ -497,23 +3009,29 @@ Command, Variable, and Function Index
 * Block.superblock:                      Blocks In Python.    (line 100)
 * block?:                                Blocks In Guile.     (line  55)
 * BP_ACCESS_WATCHPOINT:                  Breakpoints In Python.
-                                                              (line  74)
+                                                              (line  77)
 * BP_ACCESS_WATCHPOINT <1>:              Breakpoints In Guile.
                                                               (line  71)
 * BP_BREAKPOINT:                         Breakpoints In Python.
                                                               (line  62)
 * BP_BREAKPOINT <1>:                     Breakpoints In Guile.
                                                               (line  57)
+* BP_CATCHPOINT:                         Breakpoints In Python.
+                                                              (line  80)
+* BP_CATCHPOINT <1>:                     Breakpoints In Guile.
+                                                              (line  75)
+* BP_HARDWARE_BREAKPOINT:                Breakpoints In Python.
+                                                              (line  65)
 * BP_HARDWARE_WATCHPOINT:                Breakpoints In Python.
-                                                              (line  68)
+                                                              (line  71)
 * BP_HARDWARE_WATCHPOINT <1>:            Breakpoints In Guile.
                                                               (line  63)
 * BP_READ_WATCHPOINT:                    Breakpoints In Python.
-                                                              (line  71)
+                                                              (line  74)
 * BP_READ_WATCHPOINT <1>:                Breakpoints In Guile.
                                                               (line  67)
 * BP_WATCHPOINT:                         Breakpoints In Python.
-                                                              (line  65)
+                                                              (line  68)
 * BP_WATCHPOINT <1>:                     Breakpoints In Guile.
                                                               (line  60)
 * bracketed-paste-begin ():              Commands For Text.   (line  36)
@@ -527,83 +3045,83 @@ Command, Variable, and Function Index
 * breakpoint annotation:                 Annotations for Running.
                                                               (line  47)
 * breakpoint-commands:                   Breakpoints In Guile.
-                                                              (line 236)
+                                                              (line 240)
 * breakpoint-condition:                  Breakpoints In Guile.
-                                                              (line 194)
+                                                              (line 198)
 * breakpoint-enabled?:                   Breakpoints In Guile.
-                                                              (line 144)
+                                                              (line 148)
 * breakpoint-expression:                 Breakpoints In Guile.
-                                                              (line 139)
+                                                              (line 143)
 * breakpoint-hit-count:                  Breakpoints In Guile.
-                                                              (line 169)
+                                                              (line 173)
 * breakpoint-ignore-count:               Breakpoints In Guile.
-                                                              (line 163)
+                                                              (line 167)
 * breakpoint-location:                   Breakpoints In Guile.
-                                                              (line 134)
+                                                              (line 138)
 * breakpoint-notifications:              GDB/MI Support Commands.
                                                               (line  91)
 * breakpoint-number:                     Breakpoints In Guile.
-                                                              (line 122)
+                                                              (line 126)
 * breakpoint-silent?:                    Breakpoints In Guile.
-                                                              (line 151)
+                                                              (line 155)
 * breakpoint-stop:                       Breakpoints In Guile.
-                                                              (line 202)
+                                                              (line 206)
 * breakpoint-task:                       Breakpoints In Guile.
-                                                              (line 185)
+                                                              (line 189)
 * breakpoint-thread:                     Breakpoints In Guile.
-                                                              (line 176)
+                                                              (line 180)
 * breakpoint-type:                       Breakpoints In Guile.
-                                                              (line 126)
+                                                              (line 130)
 * breakpoint-valid?:                     Breakpoints In Guile.
-                                                              (line 112)
+                                                              (line 116)
 * breakpoint-visible?:                   Breakpoints In Guile.
-                                                              (line 130)
+                                                              (line 134)
 * Breakpoint.commands:                   Breakpoints In Python.
-                                                              (line 211)
+                                                              (line 220)
 * Breakpoint.condition:                  Breakpoints In Python.
-                                                              (line 206)
+                                                              (line 215)
 * Breakpoint.delete:                     Breakpoints In Python.
-                                                              (line 128)
+                                                              (line 137)
 * Breakpoint.enabled:                    Breakpoints In Python.
-                                                              (line 133)
+                                                              (line 142)
 * Breakpoint.expression:                 Breakpoints In Python.
-                                                              (line 200)
+                                                              (line 209)
 * Breakpoint.hit_count:                  Breakpoints In Python.
-                                                              (line 189)
+                                                              (line 198)
 * Breakpoint.ignore_count:               Breakpoints In Python.
-                                                              (line 161)
+                                                              (line 170)
 * Breakpoint.is_valid:                   Breakpoints In Python.
-                                                              (line 120)
+                                                              (line 129)
 * Breakpoint.location:                   Breakpoints In Python.
-                                                              (line 194)
+                                                              (line 203)
 * Breakpoint.number:                     Breakpoints In Python.
-                                                              (line 165)
+                                                              (line 174)
 * Breakpoint.pending:                    Breakpoints In Python.
-                                                              (line 146)
+                                                              (line 155)
 * Breakpoint.silent:                     Breakpoints In Python.
-                                                              (line 138)
+                                                              (line 147)
 * Breakpoint.stop:                       Breakpoints In Python.
-                                                              (line  89)
+                                                              (line  98)
 * Breakpoint.task:                       Breakpoints In Python.
-                                                              (line 155)
+                                                              (line 164)
 * Breakpoint.temporary:                  Breakpoints In Python.
-                                                              (line 180)
+                                                              (line 189)
 * Breakpoint.thread:                     Breakpoints In Python.
-                                                              (line 150)
+                                                              (line 159)
 * Breakpoint.type:                       Breakpoints In Python.
-                                                              (line 170)
+                                                              (line 179)
 * Breakpoint.visible:                    Breakpoints In Python.
-                                                              (line 175)
+                                                              (line 184)
 * Breakpoint.__init__:                   Breakpoints In Python.
                                                               (line  16)
 * Breakpoint.__init__ <1>:               Breakpoints In Python.
                                                               (line  49)
 * breakpoint?:                           Breakpoints In Guile.
-                                                              (line 108)
+                                                              (line 112)
 * BreakpointEvent.breakpoint:            Events In Python.    (line 105)
 * BreakpointEvent.breakpoints:           Events In Python.    (line 101)
 * breakpoints:                           Breakpoints In Guile.
-                                                              (line 104)
+                                                              (line 108)
 * breakpoints-invalid annotation:        Invalidation.        (line  14)
 * bt (backtrace):                        Backtrace.           (line  11)
 * c (continue):                          Continuing and Stepping.
@@ -619,7 +3137,7 @@ Command, Variable, and Function Index
 * C-x s:                                 TUI Keys.            (line  53)
 * call:                                  Calling.             (line  11)
 * call-last-kbd-macro (C-x e):           Keyboard Macros.     (line  13)
-* capitalize-word (M-c):                 Commands For Text.   (line  64)
+* capitalize-word (M-c):                 Commands For Text.   (line  69)
 * catch:                                 Set Catchpoints.     (line  10)
 * catch assert:                          Set Catchpoints.     (line 112)
 * catch catch:                           Set Catchpoints.     (line  16)
@@ -645,10 +3163,11 @@ Command, Variable, and Function Index
 * clear:                                 Delete Breaks.       (line  21)
 * clear, and Objective-C:                Method Names in Commands.
                                                               (line   9)
-* clear-screen (C-l):                    Commands For Moving. (line  40)
+* clear-display (M-C-l):                 Commands For Moving. (line  40)
+* clear-screen (C-l):                    Commands For Moving. (line  45)
 * ClearObjFilesEvent.progspace:          Events In Python.    (line 125)
-* clone-inferior:                        Inferiors and Programs.
-                                                              (line  76)
+* clone-inferior:                        Inferiors Connections and Programs.
+                                                              (line 129)
 * collect (tracepoints):                 Tracepoint Actions.  (line  49)
 * colon-colon, in Modula-2:              M2 Scope.            (line   6)
 * colored-completion-prefix:             Readline Init File Syntax.
@@ -668,11 +3187,11 @@ Command, Variable, and Function Index
 * COMMAND_DATA <1>:                      Commands In Guile.   (line 148)
 * COMMAND_FILES:                         Commands In Python.  (line 124)
 * COMMAND_FILES <1>:                     Commands In Guile.   (line 159)
-* COMMAND_MAINTENANCE:                   Commands In Python.  (line 166)
+* COMMAND_MAINTENANCE:                   Commands In Python.  (line 171)
 * COMMAND_MAINTENANCE <1>:               Commands In Guile.   (line 201)
 * COMMAND_NONE:                          Commands In Python.  (line 103)
 * COMMAND_NONE <1>:                      Commands In Guile.   (line 137)
-* COMMAND_OBSCURE:                       Commands In Python.  (line 160)
+* COMMAND_OBSCURE:                       Commands In Python.  (line 165)
 * COMMAND_OBSCURE <1>:                   Commands In Guile.   (line 195)
 * COMMAND_RUNNING:                       Commands In Python.  (line 107)
 * COMMAND_RUNNING <1>:                   Commands In Guile.   (line 142)
@@ -684,29 +3203,30 @@ Command, Variable, and Function Index
 * COMMAND_SUPPORT <1>:                   Commands In Guile.   (line 164)
 * COMMAND_TRACEPOINTS:                   Commands In Python.  (line 148)
 * COMMAND_TRACEPOINTS <1>:               Commands In Guile.   (line 183)
-* COMMAND_USER:                          Commands In Python.  (line 154)
+* COMMAND_TUI:                           Commands In Python.  (line 154)
+* COMMAND_USER:                          Commands In Python.  (line 159)
 * COMMAND_USER <1>:                      Commands In Guile.   (line 189)
 * comment-begin:                         Readline Init File Syntax.
                                                               (line  65)
-* compare-sections:                      Memory.              (line 149)
+* compare-sections:                      Memory.              (line 166)
 * compile code:                          Compiling and Injecting Code.
                                                               (line  11)
 * compile file:                          Compiling and Injecting Code.
                                                               (line  56)
-* complete:                              Help.                (line  97)
+* complete:                              Help.                (line 106)
 * complete (<TAB>):                      Commands For Completion.
                                                               (line   6)
-* COMPLETE_COMMAND:                      Commands In Python.  (line 187)
+* COMPLETE_COMMAND:                      Commands In Python.  (line 192)
 * COMPLETE_COMMAND <1>:                  Commands In Guile.   (line 222)
-* COMPLETE_EXPRESSION:                   Commands In Python.  (line 195)
+* COMPLETE_EXPRESSION:                   Commands In Python.  (line 200)
 * COMPLETE_EXPRESSION <1>:               Commands In Guile.   (line 230)
-* COMPLETE_FILENAME:                     Commands In Python.  (line 180)
+* COMPLETE_FILENAME:                     Commands In Python.  (line 185)
 * COMPLETE_FILENAME <1>:                 Commands In Guile.   (line 215)
-* COMPLETE_LOCATION:                     Commands In Python.  (line 183)
+* COMPLETE_LOCATION:                     Commands In Python.  (line 188)
 * COMPLETE_LOCATION <1>:                 Commands In Guile.   (line 218)
-* COMPLETE_NONE:                         Commands In Python.  (line 177)
+* COMPLETE_NONE:                         Commands In Python.  (line 182)
 * COMPLETE_NONE <1>:                     Commands In Guile.   (line 212)
-* COMPLETE_SYMBOL:                       Commands In Python.  (line 191)
+* COMPLETE_SYMBOL:                       Commands In Python.  (line 196)
 * COMPLETE_SYMBOL <1>:                   Commands In Guile.   (line 226)
 * completion-display-width:              Readline Init File Syntax.
                                                               (line  70)
@@ -726,11 +3246,11 @@ Command, Variable, and Function Index
 * convert-meta:                          Readline Init File Syntax.
                                                               (line 105)
 * copy-backward-word ():                 Commands For Killing.
-                                                              (line  49)
+                                                              (line  60)
 * copy-forward-word ():                  Commands For Killing.
-                                                              (line  54)
+                                                              (line  65)
 * copy-region-as-kill ():                Commands For Killing.
-                                                              (line  45)
+                                                              (line  56)
 * core-file:                             Files.               (line 107)
 * ctf:                                   Trace Files.         (line  28)
 * Ctrl-o (operate-and-get-next):         Command Syntax.      (line  41)
@@ -760,17 +3280,17 @@ Command, Variable, and Function Index
 * delete tvariable:                      Trace State Variables.
                                                               (line  42)
 * delete-breakpoint!:                    Breakpoints In Guile.
-                                                              (line  95)
+                                                              (line  99)
 * delete-char (C-d):                     Commands For Text.   (line  12)
 * delete-char-or-list ():                Commands For Completion.
                                                               (line  39)
 * delete-horizontal-space ():            Commands For Killing.
-                                                              (line  37)
-* demangle:                              Symbols.             (line 114)
-* detach:                                Attach.              (line  36)
-* detach (remote):                       Connecting.          (line 256)
-* detach inferiors INFNO...:             Inferiors and Programs.
-                                                              (line 105)
+                                                              (line  48)
+* demangle:                              Symbols.             (line 127)
+* detach:                                Attach.              (line  55)
+* detach (remote):                       Connecting.          (line 263)
+* detach inferiors INFNO...:             Inferiors Connections and Programs.
+                                                              (line 158)
 * digit-argument (M-0, M-1, ... M--):    Numeric Arguments.   (line   6)
 * dir:                                   Source Path.         (line  99)
 * directory:                             Source Path.         (line  99)
@@ -786,11 +3306,11 @@ Command, Variable, and Function Index
 * disable probes:                        Static Probe Points. (line  73)
 * disable tracepoint:                    Enable and Disable Tracepoints.
                                                               (line   9)
-* disable type-printer:                  Symbols.             (line 411)
+* disable type-printer:                  Symbols.             (line 432)
 * disable-completion:                    Readline Init File Syntax.
                                                               (line 113)
 * disassemble:                           Machine Code.        (line  43)
-* disconnect:                            Connecting.          (line 265)
+* disconnect:                            Connecting.          (line 272)
 * display:                               Auto Display.        (line  23)
 * do (down):                             Selection.           (line  74)
 * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
@@ -801,7 +3321,7 @@ Command, Variable, and Function Index
 * down:                                  Selection.           (line  74)
 * Down:                                  TUI Keys.            (line  70)
 * down-silently:                         Selection.           (line 106)
-* downcase-word (M-l):                   Commands For Text.   (line  60)
+* downcase-word (M-l):                   Commands For Text.   (line  65)
 * dprintf:                               Dynamic Printf.      (line  26)
 * dprintf-style agent:                   Dynamic Printf.      (line  46)
 * dprintf-style call:                    Dynamic Printf.      (line  42)
@@ -836,7 +3356,7 @@ Command, Variable, and Function Index
 * enable probes:                         Static Probe Points. (line  60)
 * enable tracepoint:                     Enable and Disable Tracepoints.
                                                               (line  19)
-* enable type-printer:                   Symbols.             (line 411)
+* enable type-printer:                   Symbols.             (line 432)
 * enable-bracketed-paste:                Readline Init File Syntax.
                                                               (line 139)
 * enable-keypad:                         Readline Init File Syntax.
@@ -869,6 +3389,7 @@ Command, Variable, and Function Index
 * exchange-point-and-mark (C-x C-x):     Miscellaneous Commands.
                                                               (line  37)
 * exec-file:                             Files.               (line  39)
+* exec-file-mismatch:                    Attach.              (line  34)
 * exec-run-start-option:                 GDB/MI Support Commands.
                                                               (line 105)
 * execute:                               Basic Guile.         (line  68)
@@ -878,20 +3399,20 @@ Command, Variable, and Function Index
 * ExitedEvent.inferior:                  Events In Python.    (line  72)
 * expand-tilde:                          Readline Init File Syntax.
                                                               (line 158)
-* explore:                               Data.                (line 125)
+* explore:                               Data.                (line 129)
 * f (frame):                             Selection.           (line  11)
 * f (SingleKey TUI key):                 TUI Single Key Mode. (line  16)
 * faas:                                  Frame Apply.         (line  96)
 * fg (resume foreground execution):      Continuing and Stepping.
                                                               (line  16)
-* field-artificial?:                     Types In Guile.      (line 262)
-* field-base-class?:                     Types In Guile.      (line 266)
-* field-bitpos:                          Types In Guile.      (line 253)
-* field-bitsize:                         Types In Guile.      (line 257)
-* field-enumval:                         Types In Guile.      (line 250)
-* field-name:                            Types In Guile.      (line 243)
-* field-type:                            Types In Guile.      (line 246)
-* field?:                                Types In Guile.      (line 239)
+* field-artificial?:                     Types In Guile.      (line 265)
+* field-base-class?:                     Types In Guile.      (line 269)
+* field-bitpos:                          Types In Guile.      (line 256)
+* field-bitsize:                         Types In Guile.      (line 260)
+* field-enumval:                         Types In Guile.      (line 253)
+* field-name:                            Types In Guile.      (line 246)
+* field-type:                            Types In Guile.      (line 249)
+* field?:                                Types In Guile.      (line 242)
 * file:                                  Files.               (line  16)
 * fin (finish):                          Continuing and Stepping.
                                                               (line 109)
@@ -910,15 +3431,15 @@ Command, Variable, and Function Index
                                                               (line  14)
 * flash-erase:                           Target Commands.     (line 140)
 * flushregs:                             Maintenance Commands.
-                                                              (line 303)
+                                                              (line 322)
 * flush_i_cache:                         Bootstrapping.       (line  60)
 * fo (forward-search):                   Search.              (line   9)
-* focus:                                 TUI Commands.        (line  55)
+* focus:                                 TUI Commands.        (line 103)
 * forward-backward-delete-char ():       Commands For Text.   (line  21)
 * forward-char (C-f):                    Commands For Moving. (line  12)
 * forward-search:                        Search.              (line   9)
 * forward-search-history (C-s):          Commands For History.
-                                                              (line  30)
+                                                              (line  32)
 * forward-word (M-f):                    Commands For Moving. (line  18)
 * frame address:                         Selection.           (line  30)
 * frame apply:                           Frame Apply.         (line   6)
@@ -945,13 +3466,14 @@ Command, Variable, and Function Index
 * Frame.find_sal:                        Frames In Python.    (line 155)
 * Frame.function:                        Frames In Python.    (line 145)
 * Frame.is_valid:                        Frames In Python.    (line  43)
+* Frame.level:                           Frames In Python.    (line 191)
 * Frame.name:                            Frames In Python.    (line  49)
 * Frame.newer:                           Frames In Python.    (line 152)
 * Frame.older:                           Frames In Python.    (line 149)
 * Frame.pc:                              Frames In Python.    (line 136)
 * Frame.read_register:                   Frames In Python.    (line 159)
-* Frame.read_var:                        Frames In Python.    (line 164)
-* Frame.select:                          Frames In Python.    (line 172)
+* Frame.read_var:                        Frames In Python.    (line 179)
+* Frame.select:                          Frames In Python.    (line 187)
 * Frame.type:                            Frames In Python.    (line  57)
 * Frame.unwind_stop_reason:              Frames In Python.    (line  84)
 * frame?:                                Frames In Guile.     (line  22)
@@ -984,15 +3506,19 @@ Command, Variable, and Function Index
 * gdb.block_for_pc:                      Blocks In Python.    (line  64)
 * gdb.block_for_pc <1>:                  Blocks In Python.    (line  64)
 * gdb.BP_ACCESS_WATCHPOINT:              Breakpoints In Python.
-                                                              (line  74)
+                                                              (line  77)
 * gdb.BP_BREAKPOINT:                     Breakpoints In Python.
                                                               (line  62)
+* gdb.BP_CATCHPOINT:                     Breakpoints In Python.
+                                                              (line  80)
+* gdb.BP_HARDWARE_BREAKPOINT:            Breakpoints In Python.
+                                                              (line  65)
 * gdb.BP_HARDWARE_WATCHPOINT:            Breakpoints In Python.
-                                                              (line  68)
-* gdb.BP_READ_WATCHPOINT:                Breakpoints In Python.
                                                               (line  71)
+* gdb.BP_READ_WATCHPOINT:                Breakpoints In Python.
+                                                              (line  74)
 * gdb.BP_WATCHPOINT:                     Breakpoints In Python.
-                                                              (line  65)
+                                                              (line  68)
 * gdb.Breakpoint:                        Breakpoints In Python.
                                                               (line   6)
 * gdb.breakpoints:                       Basic Python.        (line  59)
@@ -1000,21 +3526,22 @@ Command, Variable, and Function Index
 * gdb.COMMAND_BREAKPOINTS:               Commands In Python.  (line 142)
 * gdb.COMMAND_DATA:                      Commands In Python.  (line 113)
 * gdb.COMMAND_FILES:                     Commands In Python.  (line 124)
-* gdb.COMMAND_MAINTENANCE:               Commands In Python.  (line 166)
+* gdb.COMMAND_MAINTENANCE:               Commands In Python.  (line 171)
 * gdb.COMMAND_NONE:                      Commands In Python.  (line 103)
-* gdb.COMMAND_OBSCURE:                   Commands In Python.  (line 160)
+* gdb.COMMAND_OBSCURE:                   Commands In Python.  (line 165)
 * gdb.COMMAND_RUNNING:                   Commands In Python.  (line 107)
 * gdb.COMMAND_STACK:                     Commands In Python.  (line 118)
 * gdb.COMMAND_STATUS:                    Commands In Python.  (line 136)
 * gdb.COMMAND_SUPPORT:                   Commands In Python.  (line 129)
 * gdb.COMMAND_TRACEPOINTS:               Commands In Python.  (line 148)
-* gdb.COMMAND_USER:                      Commands In Python.  (line 154)
-* gdb.COMPLETE_COMMAND:                  Commands In Python.  (line 187)
-* gdb.COMPLETE_EXPRESSION:               Commands In Python.  (line 195)
-* gdb.COMPLETE_FILENAME:                 Commands In Python.  (line 180)
-* gdb.COMPLETE_LOCATION:                 Commands In Python.  (line 183)
-* gdb.COMPLETE_NONE:                     Commands In Python.  (line 177)
-* gdb.COMPLETE_SYMBOL:                   Commands In Python.  (line 191)
+* gdb.COMMAND_TUI:                       Commands In Python.  (line 154)
+* gdb.COMMAND_USER:                      Commands In Python.  (line 159)
+* gdb.COMPLETE_COMMAND:                  Commands In Python.  (line 192)
+* gdb.COMPLETE_EXPRESSION:               Commands In Python.  (line 200)
+* gdb.COMPLETE_FILENAME:                 Commands In Python.  (line 185)
+* gdb.COMPLETE_LOCATION:                 Commands In Python.  (line 188)
+* gdb.COMPLETE_NONE:                     Commands In Python.  (line 182)
+* gdb.COMPLETE_SYMBOL:                   Commands In Python.  (line 196)
 * gdb.convenience_variable:              Basic Python.        (line 106)
 * gdb.convenience_variable <1>:          Basic Python.        (line 106)
 * gdb.current_objfile:                   Objfiles In Python.  (line  15)
@@ -1078,29 +3605,29 @@ Command, Variable, and Function Index
 * gdb.parameter:                         Basic Python.        (line  82)
 * gdb.parameter <1>:                     Basic Python.        (line  82)
 * gdb.PARAM_AUTO_BOOLEAN:                Parameters In Python.
-                                                              (line 116)
+                                                              (line 117)
 * gdb.PARAM_BOOLEAN:                     Parameters In Python.
-                                                              (line 112)
+                                                              (line 113)
 * gdb.PARAM_ENUM:                        Parameters In Python.
-                                                              (line 160)
+                                                              (line 161)
 * gdb.PARAM_FILENAME:                    Parameters In Python.
-                                                              (line 142)
+                                                              (line 143)
 * gdb.PARAM_INTEGER:                     Parameters In Python.
-                                                              (line 125)
+                                                              (line 126)
 * gdb.PARAM_OPTIONAL_FILENAME:           Parameters In Python.
-                                                              (line 139)
+                                                              (line 140)
 * gdb.PARAM_STRING:                      Parameters In Python.
-                                                              (line 129)
+                                                              (line 130)
 * gdb.PARAM_STRING_NOESCAPE:             Parameters In Python.
-                                                              (line 135)
+                                                              (line 136)
 * gdb.PARAM_UINTEGER:                    Parameters In Python.
-                                                              (line 121)
+                                                              (line 122)
 * gdb.PARAM_ZINTEGER:                    Parameters In Python.
-                                                              (line 146)
+                                                              (line 147)
 * gdb.PARAM_ZUINTEGER:                   Parameters In Python.
-                                                              (line 150)
+                                                              (line 151)
 * gdb.PARAM_ZUINTEGER_UNLIMITED:         Parameters In Python.
-                                                              (line 155)
+                                                              (line 156)
 * gdb.parse_and_eval:                    Basic Python.        (line 122)
 * gdb.parse_and_eval <1>:                Basic Python.        (line 122)
 * gdb.post_event:                        Basic Python.        (line 141)
@@ -1119,7 +3646,11 @@ Command, Variable, and Function Index
 * gdb.PYTHONDIR:                         Basic Python.        (line  37)
 * gdb.PYTHONDIR <1>:                     Basic Python.        (line  37)
 * gdb.rbreak:                            Basic Python.        (line  66)
-* gdb.search_memory:                     Inferiors In Python. (line  71)
+* gdb.register_window_type:              TUI Windows In Python.
+                                                              (line   8)
+* gdb.register_window_type <1>:          TUI Windows In Python.
+                                                              (line   8)
+* gdb.search_memory:                     Inferiors In Python. (line  76)
 * gdb.selected_frame:                    Frames In Python.    (line  22)
 * gdb.selected_frame <1>:                Frames In Python.    (line  22)
 * gdb.selected_inferior:                 Inferiors In Python. (line  17)
@@ -1144,20 +3675,21 @@ Command, Variable, and Function Index
 * gdb.SYMBOL_COMMON_BLOCK_DOMAIN:        Symbols In Python.   (line 178)
 * gdb.SYMBOL_LABEL_DOMAIN:               Symbols In Python.   (line 172)
 * gdb.SYMBOL_LOC_ARG:                    Symbols In Python.   (line 197)
-* gdb.SYMBOL_LOC_BLOCK:                  Symbols In Python.   (line 218)
-* gdb.SYMBOL_LOC_COMPUTED:               Symbols In Python.   (line 232)
-* gdb.SYMBOL_LOC_COMPUTED <1>:           Symbols In Python.   (line 235)
+* gdb.SYMBOL_LOC_BLOCK:                  Symbols In Python.   (line 221)
+* gdb.SYMBOL_LOC_COMMON_BLOCK:           Symbols In Python.   (line 238)
+* gdb.SYMBOL_LOC_COMPUTED:               Symbols In Python.   (line 235)
 * gdb.SYMBOL_LOC_CONST:                  Symbols In Python.   (line 188)
-* gdb.SYMBOL_LOC_CONST_BYTES:            Symbols In Python.   (line 221)
+* gdb.SYMBOL_LOC_CONST_BYTES:            Symbols In Python.   (line 224)
+* gdb.SYMBOL_LOC_LABEL:                  Symbols In Python.   (line 218)
 * gdb.SYMBOL_LOC_LOCAL:                  Symbols In Python.   (line 211)
-* gdb.SYMBOL_LOC_OPTIMIZED_OUT:          Symbols In Python.   (line 229)
+* gdb.SYMBOL_LOC_OPTIMIZED_OUT:          Symbols In Python.   (line 232)
 * gdb.SYMBOL_LOC_REF_ARG:                Symbols In Python.   (line 201)
 * gdb.SYMBOL_LOC_REGISTER:               Symbols In Python.   (line 194)
 * gdb.SYMBOL_LOC_REGPARM_ADDR:           Symbols In Python.   (line 206)
 * gdb.SYMBOL_LOC_STATIC:                 Symbols In Python.   (line 191)
 * gdb.SYMBOL_LOC_TYPEDEF:                Symbols In Python.   (line 214)
 * gdb.SYMBOL_LOC_UNDEF:                  Symbols In Python.   (line 184)
-* gdb.SYMBOL_LOC_UNRESOLVED:             Symbols In Python.   (line 224)
+* gdb.SYMBOL_LOC_UNRESOLVED:             Symbols In Python.   (line 227)
 * gdb.SYMBOL_MODULE_DOMAIN:              Symbols In Python.   (line 175)
 * gdb.SYMBOL_STRUCT_DOMAIN:              Symbols In Python.   (line 169)
 * gdb.SYMBOL_UNDEF_DOMAIN:               Symbols In Python.   (line 160)
@@ -1171,43 +3703,43 @@ Command, Variable, and Function Index
 * gdb.target_wide_charset:               Basic Python.        (line 217)
 * gdb.target_wide_charset <1>:           Basic Python.        (line 217)
 * gdb.Type:                              Types In Python.     (line   6)
-* gdb.TYPE_CODE_ARRAY:                   Types In Python.     (line 202)
-* gdb.TYPE_CODE_BITSTRING:               Types In Python.     (line 240)
-* gdb.TYPE_CODE_BOOL:                    Types In Python.     (line 264)
-* gdb.TYPE_CODE_CHAR:                    Types In Python.     (line 261)
-* gdb.TYPE_CODE_COMPLEX:                 Types In Python.     (line 267)
-* gdb.TYPE_CODE_DECFLOAT:                Types In Python.     (line 276)
-* gdb.TYPE_CODE_ENUM:                    Types In Python.     (line 211)
-* gdb.TYPE_CODE_ERROR:                   Types In Python.     (line 243)
-* gdb.TYPE_CODE_FLAGS:                   Types In Python.     (line 214)
-* gdb.TYPE_CODE_FLT:                     Types In Python.     (line 223)
-* gdb.TYPE_CODE_FUNC:                    Types In Python.     (line 217)
-* gdb.TYPE_CODE_INT:                     Types In Python.     (line 220)
-* gdb.TYPE_CODE_INTERNAL_FUNCTION:       Types In Python.     (line 279)
-* gdb.TYPE_CODE_MEMBERPTR:               Types In Python.     (line 252)
-* gdb.TYPE_CODE_METHOD:                  Types In Python.     (line 246)
-* gdb.TYPE_CODE_METHODPTR:               Types In Python.     (line 249)
-* gdb.TYPE_CODE_NAMESPACE:               Types In Python.     (line 273)
-* gdb.TYPE_CODE_PTR:                     Types In Python.     (line 199)
-* gdb.TYPE_CODE_RANGE:                   Types In Python.     (line 232)
-* gdb.TYPE_CODE_REF:                     Types In Python.     (line 255)
-* gdb.TYPE_CODE_RVALUE_REF:              Types In Python.     (line 258)
-* gdb.TYPE_CODE_SET:                     Types In Python.     (line 229)
-* gdb.TYPE_CODE_STRING:                  Types In Python.     (line 235)
-* gdb.TYPE_CODE_STRUCT:                  Types In Python.     (line 205)
-* gdb.TYPE_CODE_TYPEDEF:                 Types In Python.     (line 270)
-* gdb.TYPE_CODE_UNION:                   Types In Python.     (line 208)
-* gdb.TYPE_CODE_VOID:                    Types In Python.     (line 226)
+* gdb.TYPE_CODE_ARRAY:                   Types In Python.     (line 238)
+* gdb.TYPE_CODE_BITSTRING:               Types In Python.     (line 276)
+* gdb.TYPE_CODE_BOOL:                    Types In Python.     (line 300)
+* gdb.TYPE_CODE_CHAR:                    Types In Python.     (line 297)
+* gdb.TYPE_CODE_COMPLEX:                 Types In Python.     (line 303)
+* gdb.TYPE_CODE_DECFLOAT:                Types In Python.     (line 312)
+* gdb.TYPE_CODE_ENUM:                    Types In Python.     (line 247)
+* gdb.TYPE_CODE_ERROR:                   Types In Python.     (line 279)
+* gdb.TYPE_CODE_FLAGS:                   Types In Python.     (line 250)
+* gdb.TYPE_CODE_FLT:                     Types In Python.     (line 259)
+* gdb.TYPE_CODE_FUNC:                    Types In Python.     (line 253)
+* gdb.TYPE_CODE_INT:                     Types In Python.     (line 256)
+* gdb.TYPE_CODE_INTERNAL_FUNCTION:       Types In Python.     (line 315)
+* gdb.TYPE_CODE_MEMBERPTR:               Types In Python.     (line 288)
+* gdb.TYPE_CODE_METHOD:                  Types In Python.     (line 282)
+* gdb.TYPE_CODE_METHODPTR:               Types In Python.     (line 285)
+* gdb.TYPE_CODE_NAMESPACE:               Types In Python.     (line 309)
+* gdb.TYPE_CODE_PTR:                     Types In Python.     (line 235)
+* gdb.TYPE_CODE_RANGE:                   Types In Python.     (line 268)
+* gdb.TYPE_CODE_REF:                     Types In Python.     (line 291)
+* gdb.TYPE_CODE_RVALUE_REF:              Types In Python.     (line 294)
+* gdb.TYPE_CODE_SET:                     Types In Python.     (line 265)
+* gdb.TYPE_CODE_STRING:                  Types In Python.     (line 271)
+* gdb.TYPE_CODE_STRUCT:                  Types In Python.     (line 241)
+* gdb.TYPE_CODE_TYPEDEF:                 Types In Python.     (line 306)
+* gdb.TYPE_CODE_UNION:                   Types In Python.     (line 244)
+* gdb.TYPE_CODE_VOID:                    Types In Python.     (line 262)
 * gdb.unwinder.register_unwinder:        Unwinding Frames in Python.
-                                                              (line 157)
+                                                              (line 165)
 * gdb.UnwindInfo.add_saved_register:     Unwinding Frames in Python.
-                                                              (line 107)
+                                                              (line 115)
 * gdb.WP_ACCESS:                         Breakpoints In Python.
-                                                              (line  86)
+                                                              (line  95)
 * gdb.WP_READ:                           Breakpoints In Python.
-                                                              (line  80)
+                                                              (line  89)
 * gdb.WP_WRITE:                          Breakpoints In Python.
-                                                              (line  83)
+                                                              (line  92)
 * gdb.write:                             Basic Python.        (line 175)
 * gdb.write <1>:                         Basic Python.        (line 175)
 * gdb:error:                             Guile Exception Handling.
@@ -1235,7 +3767,7 @@ Command, Variable, and Function Index
 * h (help):                              Help.                (line   9)
 * handle:                                Signals.             (line  49)
 * handle_exception:                      Stub Contents.       (line  15)
-* hbreak:                                Set Breaks.          (line  61)
+* hbreak:                                Set Breaks.          (line 116)
 * help:                                  Help.                (line   6)
 * help function:                         Convenience Funs.    (line 228)
 * help target:                           Target Commands.     (line  19)
@@ -1245,41 +3777,44 @@ Command, Variable, and Function Index
                                                               (line 162)
 * history-ref:                           Basic Guile.         (line  87)
 * history-search-backward ():            Commands For History.
-                                                              (line  52)
+                                                              (line  56)
 * history-search-forward ():             Commands For History.
-                                                              (line  46)
+                                                              (line  50)
 * history-size:                          Readline Init File Syntax.
                                                               (line 168)
 * history-substring-search-backward ():  Commands For History.
-                                                              (line  64)
+                                                              (line  68)
 * history-substring-search-forward ():   Commands For History.
-                                                              (line  58)
+                                                              (line  62)
 * hook:                                  Hooks.               (line   6)
 * hookpost:                              Hooks.               (line  11)
 * horizontal-scroll-mode:                Readline Init File Syntax.
                                                               (line 177)
 * host-config:                           Guile Configuration. (line  20)
-* i (info):                              Help.                (line 120)
+* i (info):                              Help.                (line 129)
 * i (SingleKey TUI key):                 TUI Single Key Mode. (line  34)
 * if:                                    Command Files.       (line  74)
-* ignore:                                Conditions.          (line  90)
-* inferior INFNO:                        Inferiors and Programs.
-                                                              (line  51)
-* Inferior.architecture:                 Inferiors In Python. (line  50)
-* Inferior.is_valid:                     Inferiors In Python. (line  38)
+* ignore:                                Conditions.          (line  96)
+* inferior:                              Inferiors Connections and Programs.
+                                                              (line  57)
+* inferior INFNO:                        Inferiors Connections and Programs.
+                                                              (line  95)
+* Inferior.architecture:                 Inferiors In Python. (line  55)
+* Inferior.connection_num:               Inferiors In Python. (line  25)
+* Inferior.is_valid:                     Inferiors In Python. (line  43)
 * Inferior.num:                          Inferiors In Python. (line  22)
-* Inferior.pid:                          Inferiors In Python. (line  25)
-* Inferior.progspace:                    Inferiors In Python. (line  33)
-* Inferior.read_memory:                  Inferiors In Python. (line  57)
-* Inferior.read_memory <1>:              Inferiors In Python. (line  57)
-* Inferior.search_memory:                Inferiors In Python. (line  71)
-* Inferior.threads:                      Inferiors In Python. (line  45)
-* Inferior.thread_from_handle:           Inferiors In Python. (line  80)
-* Inferior.thread_from_handle <1>:       Inferiors In Python. (line  80)
-* Inferior.thread_from_thread_handle:    Inferiors In Python. (line  80)
-* Inferior.was_attached:                 Inferiors In Python. (line  29)
-* Inferior.write_memory:                 Inferiors In Python. (line  64)
-* Inferior.write_memory <1>:             Inferiors In Python. (line  64)
+* Inferior.pid:                          Inferiors In Python. (line  30)
+* Inferior.progspace:                    Inferiors In Python. (line  38)
+* Inferior.read_memory:                  Inferiors In Python. (line  62)
+* Inferior.read_memory <1>:              Inferiors In Python. (line  62)
+* Inferior.search_memory:                Inferiors In Python. (line  76)
+* Inferior.threads:                      Inferiors In Python. (line  50)
+* Inferior.thread_from_handle:           Inferiors In Python. (line  85)
+* Inferior.thread_from_handle <1>:       Inferiors In Python. (line  85)
+* Inferior.thread_from_thread_handle:    Inferiors In Python. (line  85)
+* Inferior.was_attached:                 Inferiors In Python. (line  34)
+* Inferior.write_memory:                 Inferiors In Python. (line  69)
+* Inferior.write_memory <1>:             Inferiors In Python. (line  69)
 * InferiorCallPostEvent.address:         Events In Python.    (line 152)
 * InferiorCallPostEvent.ptid:            Events In Python.    (line 149)
 * InferiorCallPreEvent.address:          Events In Python.    (line 142)
@@ -1295,11 +3830,11 @@ Command, Variable, and Function Index
 * InferiorThread.num:                    Threads In Python.   (line  32)
 * InferiorThread.ptid:                   Threads In Python.   (line  40)
 * InferiorThread.switch:                 Threads In Python.   (line  61)
-* info:                                  Help.                (line 120)
-* info address:                          Symbols.             (line  85)
+* info:                                  Help.                (line 129)
+* info address:                          Symbols.             (line  98)
 * info all-registers:                    Registers.           (line  15)
 * info args:                             Frame Info.          (line  43)
-* info auto-load:                        Auto-loading.        (line  60)
+* info auto-load:                        Auto-loading.        (line  52)
 * info auto-load gdb-scripts:            Auto-loading sequences.
                                                               (line  21)
 * info auto-load guile-scripts:          Guile Auto-loading.  (line  23)
@@ -1309,15 +3844,17 @@ Command, Variable, and Function Index
                                                               (line  22)
 * info auto-load python-scripts:         Python Auto-loading. (line  23)
 * info auxv:                             OS Information.      (line  20)
-* info breakpoints:                      Set Breaks.          (line 133)
+* info breakpoints:                      Set Breaks.          (line 188)
 * info checkpoints:                      Checkpoint/Restart.  (line  31)
-* info classes:                          Symbols.             (line 570)
+* info classes:                          Symbols.             (line 605)
 * info common:                           Special Fortran Commands.
                                                               (line   9)
-* info copying:                          Help.                (line 158)
+* info connections [ ID... ]:            Inferiors Connections and Programs.
+                                                              (line  68)
+* info copying:                          Help.                (line 167)
 * info dcache:                           Caching Target Data. (line  46)
 * info display:                          Auto Display.        (line  78)
-* info dll:                              Files.               (line 336)
+* info dll:                              Files.               (line 346)
 * info dos:                              DJGPP Native.        (line  15)
 * info exceptions:                       Ada Exceptions.      (line   8)
 * info extensions:                       Show.                (line  34)
@@ -1329,10 +3866,10 @@ Command, Variable, and Function Index
 * info frame, show the source language:  Show.                (line  15)
 * info frame-filter:                     Frame Filter Management.
                                                               (line  12)
-* info functions:                        Symbols.             (line 467)
+* info functions:                        Symbols.             (line 502)
 * info handle:                           Signals.             (line  33)
-* info inferiors [ ID... ]:              Inferiors and Programs.
-                                                              (line  25)
+* info inferiors [ ID... ]:              Inferiors Connections and Programs.
+                                                              (line  27)
 * info io_registers, AVR:                AVR.                 (line  10)
 * info line:                             Machine Code.        (line  14)
 * info line, and Objective-C:            Method Names in Commands.
@@ -1342,9 +3879,9 @@ Command, Variable, and Function Index
 * info macros:                           Macros.              (line  54)
 * info mem:                              Memory Region Attributes.
                                                               (line  45)
-* info meminfo:                          Process Information. (line 130)
-* info module:                           Symbols.             (line 555)
-* info modules:                          Symbols.             (line 547)
+* info meminfo:                          Process Information. (line 131)
+* info module:                           Symbols.             (line 590)
+* info modules:                          Symbols.             (line 582)
 * info os:                               OS Information.      (line  37)
 * info os cpus:                          OS Information.      (line  43)
 * info os files:                         OS Information.      (line  51)
@@ -1356,7 +3893,7 @@ Command, Variable, and Function Index
 * info os shm:                           OS Information.      (line 102)
 * info os sockets:                       OS Information.      (line 112)
 * info os threads:                       OS Information.      (line 119)
-* info pidlist:                          Process Information. (line 126)
+* info pidlist:                          Process Information. (line 127)
 * info pretty-printer:                   Pretty-Printer Commands.
                                                               (line   6)
 * info probes:                           Static Probe Points. (line  32)
@@ -1365,22 +3902,24 @@ Command, Variable, and Function Index
 * info record:                           Process Record and Replay.
                                                               (line 323)
 * info registers:                        Registers.           (line  11)
-* info scope:                            Symbols.             (line 415)
-* info selectors:                        Symbols.             (line 576)
+* info scope:                            Symbols.             (line 436)
+* info selectors:                        Symbols.             (line 611)
 * info serial:                           DJGPP Native.        (line 139)
-* info set:                              Help.                (line 141)
-* info share:                            Files.               (line 330)
-* info sharedlibrary:                    Files.               (line 330)
+* info set:                              Help.                (line 150)
+* info share:                            Files.               (line 340)
+* info sharedlibrary:                    Files.               (line 340)
 * info signals:                          Signals.             (line  33)
 * info skip:                             Skipping Over Functions and Files.
                                                               (line 113)
-* info source:                           Symbols.             (line 436)
+* info source:                           Symbols.             (line 457)
 * info source, show the source language: Show.                (line  21)
-* info sources:                          Symbols.             (line 452)
+* info sources:                          Symbols.             (line 473)
+* info sources <1>:                      GDB/MI File Commands.
+                                                              (line  93)
 * info stack:                            Backtrace.           (line  94)
 * info static-tracepoint-markers:        Listing Static Tracepoint Markers.
                                                               (line   6)
-* info symbol:                           Symbols.             (line  95)
+* info symbol:                           Symbols.             (line 108)
 * info target:                           Files.               (line 211)
 * info task TASKNO:                      Ada Tasks.           (line  88)
 * info tasks:                            Ada Tasks.           (line   9)
@@ -1390,19 +3929,19 @@ Command, Variable, and Function Index
 * info tracepoints [N...]:               Listing Tracepoints. (line   6)
 * info tvariables:                       Trace State Variables.
                                                               (line  37)
-* info type-printers:                    Symbols.             (line 403)
-* info types:                            Symbols.             (line 378)
-* info variables:                        Symbols.             (line 512)
+* info type-printers:                    Symbols.             (line 424)
+* info types:                            Symbols.             (line 399)
+* info variables:                        Symbols.             (line 547)
 * info vector:                           Vector Unit.         (line   9)
 * info w32:                              Cygwin Native.       (line  19)
-* info warranty:                         Help.                (line 162)
+* info warranty:                         Help.                (line 171)
 * info watchpoints [LIST...]:            Set Watchpoints.     (line  87)
 * info win:                              TUI Commands.        (line  26)
 * info-gdb-mi-command:                   GDB/MI Support Commands.
                                                               (line  99)
 * init-if-undefined:                     Convenience Vars.    (line  42)
 * input-meta:                            Readline Init File Syntax.
-                                                              (line 184)
+                                                              (line 186)
 * input-port:                            I/O Ports in Guile.  (line   6)
 * insert-comment (M-#):                  Miscellaneous Commands.
                                                               (line  61)
@@ -1422,7 +3961,7 @@ Command, Variable, and Function Index
 * interrupt:                             Background Execution.
                                                               (line  59)
 * isearch-terminators:                   Readline Init File Syntax.
-                                                              (line 192)
+                                                              (line 194)
 * iterator->list:                        Iterators In Guile.  (line  83)
 * iterator-filter:                       Iterators In Guile.  (line  94)
 * iterator-for-each:                     Iterators In Guile.  (line  90)
@@ -1442,24 +3981,24 @@ Command, Variable, and Function Index
                                                               (line   9)
 * KeyboardInterrupt:                     Exception Handling.  (line  34)
 * keymap:                                Readline Init File Syntax.
-                                                              (line 199)
+                                                              (line 201)
 * kill:                                  Kill Process.        (line   6)
-* kill inferiors INFNO...:               Inferiors and Programs.
-                                                              (line 111)
+* kill inferiors INFNO...:               Inferiors Connections and Programs.
+                                                              (line 164)
 * kill-line (C-k):                       Commands For Killing.
                                                               (line   6)
 * kill-region ():                        Commands For Killing.
-                                                              (line  41)
+                                                              (line  52)
 * kill-whole-line ():                    Commands For Killing.
-                                                              (line  15)
-* kill-word (M-d):                       Commands For Killing.
                                                               (line  19)
+* kill-word (M-d):                       Commands For Killing.
+                                                              (line  23)
 * kvm:                                   BSD libkvm Interface.
                                                               (line  24)
 * l (list):                              List.                (line   6)
 * language-option:                       GDB/MI Support Commands.
                                                               (line  96)
-* layout:                                TUI Commands.        (line  29)
+* layout:                                TUI Commands.        (line  75)
 * lazy-string->value:                    Lazy Strings In Guile.
                                                               (line  46)
 * lazy-string-address:                   Lazy Strings In Guile.
@@ -1523,9 +4062,9 @@ Command, Variable, and Function Index
 * maint btrace packet-history:           Maintenance Commands.
                                                               (line  65)
 * maint check libthread-db:              Maintenance Commands.
-                                                              (line 244)
+                                                              (line 257)
 * maint check xml-descriptions:          Maintenance Commands.
-                                                              (line 240)
+                                                              (line 253)
 * maint check-psymtabs:                  Maintenance Commands.
                                                               (line 134)
 * maint check-symtabs:                   Maintenance Commands.
@@ -1542,22 +4081,27 @@ Command, Variable, and Function Index
                                                               (line 168)
 * maint expand-symtabs:                  Maintenance Commands.
                                                               (line 142)
-* maint flush-symbol-cache:              Symbols.             (line 714)
+* maint flush dcache:                    Caching Target Data. (line  71)
+* maint flush register-cache:            Maintenance Commands.
+                                                              (line 322)
+* maint flush symbol-cache:              Symbols.             (line 749)
+* maint flush-symbol-cache:              Symbols.             (line 749)
 * maint info bdccsr, S12Z:               S12Z.                (line  10)
 * maint info bfds:                       File Caching.        (line  10)
 * maint info breakpoints:                Maintenance Commands.
                                                               (line  32)
 * maint info btrace:                     Maintenance Commands.
                                                               (line  62)
-* maint info line-table:                 Symbols.             (line 692)
-* maint info program-spaces:             Inferiors and Programs.
-                                                              (line 148)
-* maint info psymtabs:                   Symbols.             (line 645)
+* maint info line-table:                 Symbols.             (line 727)
+* maint info program-spaces:             Inferiors Connections and Programs.
+                                                              (line 201)
+* maint info psymtabs:                   Symbols.             (line 680)
 * maint info sections:                   Files.               (line 220)
 * maint info selftests:                  Maintenance Commands.
-                                                              (line 366)
+                                                              (line 389)
 * maint info sol-threads:                Threads.             (line 167)
-* maint info symtabs:                    Symbols.             (line 645)
+* maint info symtabs:                    Symbols.             (line 680)
+* maint info target-sections:            Files.               (line 269)
 * maint internal-error:                  Maintenance Commands.
                                                               (line 173)
 * maint internal-warning:                Maintenance Commands.
@@ -1567,133 +4111,137 @@ Command, Variable, and Function Index
 * maint print arc arc-instruction:       ARC.                 (line  17)
 * maint print architecture:              Maintenance Commands.
                                                               (line 226)
-* maint print c-tdesc [FILE]:            Maintenance Commands.
+* maint print c-tdesc:                   Maintenance Commands.
                                                               (line 230)
 * maint print cooked-registers:          Maintenance Commands.
-                                                              (line 268)
+                                                              (line 287)
+* maint print core-file-backed-mappings: Maintenance Commands.
+                                                              (line 265)
 * maint print dummy-frames:              Maintenance Commands.
-                                                              (line 252)
-* maint print msymbols:                  Symbols.             (line 619)
+                                                              (line 271)
+* maint print msymbols:                  Symbols.             (line 654)
 * maint print objfiles:                  Maintenance Commands.
-                                                              (line 306)
-* maint print psymbols:                  Symbols.             (line 619)
+                                                              (line 329)
+* maint print psymbols:                  Symbols.             (line 654)
 * maint print raw-registers:             Maintenance Commands.
-                                                              (line 268)
-* maint print reggroups:                 Maintenance Commands.
                                                               (line 287)
+* maint print reggroups:                 Maintenance Commands.
+                                                              (line 306)
 * maint print register-groups:           Maintenance Commands.
-                                                              (line 268)
+                                                              (line 287)
 * maint print registers:                 Maintenance Commands.
-                                                              (line 268)
+                                                              (line 287)
 * maint print remote-registers:          Maintenance Commands.
-                                                              (line 268)
+                                                              (line 287)
 * maint print section-scripts:           Maintenance Commands.
-                                                              (line 321)
+                                                              (line 344)
 * maint print statistics:                Maintenance Commands.
-                                                              (line 328)
-* maint print symbol-cache:              Symbols.             (line 706)
-* maint print symbol-cache-statistics:   Symbols.             (line 710)
-* maint print symbols:                   Symbols.             (line 619)
+                                                              (line 351)
+* maint print symbol-cache:              Symbols.             (line 741)
+* maint print symbol-cache-statistics:   Symbols.             (line 745)
+* maint print symbols:                   Symbols.             (line 654)
 * maint print target-stack:              Maintenance Commands.
-                                                              (line 341)
+                                                              (line 364)
 * maint print type:                      Maintenance Commands.
-                                                              (line 353)
+                                                              (line 376)
 * maint print unwind, HPPA:              HPPA.                (line  17)
 * maint print user-registers:            Maintenance Commands.
-                                                              (line 312)
+                                                              (line 335)
+* maint print xml-tdesc:                 Maintenance Commands.
+                                                              (line 245)
 * maint selftest:                        Maintenance Commands.
-                                                              (line 360)
+                                                              (line 383)
 * maint set bfd-sharing:                 File Caching.        (line  14)
 * maint set btrace pt skip-pad:          Maintenance Commands.
                                                               (line 107)
 * maint set catch-demangler-crashes:     Maintenance Commands.
                                                               (line 146)
 * maint set check-libthread-db:          Maintenance Commands.
-                                                              (line 546)
+                                                              (line 569)
 * maint set demangler-warning:           Maintenance Commands.
                                                               (line 197)
 * maint set dwarf always-disassemble:    Maintenance Commands.
-                                                              (line 369)
+                                                              (line 392)
 * maint set dwarf max-cache-age:         Maintenance Commands.
-                                                              (line 390)
+                                                              (line 413)
 * maint set dwarf unwinders:             Maintenance Commands.
-                                                              (line 404)
+                                                              (line 427)
 * maint set internal-error:              Maintenance Commands.
                                                               (line 197)
 * maint set internal-warning:            Maintenance Commands.
                                                               (line 197)
 * maint set per-command:                 Maintenance Commands.
-                                                              (line 507)
+                                                              (line 530)
 * maint set profile:                     Maintenance Commands.
-                                                              (line 438)
+                                                              (line 461)
 * maint set show-all-tib:                Maintenance Commands.
-                                                              (line 462)
+                                                              (line 485)
 * maint set show-debug-regs:             Maintenance Commands.
-                                                              (line 454)
-* maint set symbol-cache-size:           Symbols.             (line 698)
+                                                              (line 477)
+* maint set symbol-cache-size:           Symbols.             (line 733)
 * maint set target-async:                Maintenance Commands.
-                                                              (line 468)
+                                                              (line 491)
 * maint set target-non-stop MODE [on|off|auto]: Maintenance Commands.
-                                                              (line 476)
+                                                              (line 499)
 * maint set test-settings:               Maintenance Commands.
-                                                              (line 595)
+                                                              (line 618)
 * maint set tui-resize-message:          Maintenance Commands.
-                                                              (line 496)
+                                                              (line 519)
 * maint set worker-threads:              Maintenance Commands.
-                                                              (line 427)
+                                                              (line 450)
 * maint show bfd-sharing:                File Caching.        (line  14)
 * maint show btrace pt skip-pad:         Maintenance Commands.
                                                               (line 108)
 * maint show catch-demangler-crashes:    Maintenance Commands.
                                                               (line 146)
 * maint show check-libthread-db:         Maintenance Commands.
-                                                              (line 546)
+                                                              (line 569)
 * maint show demangler-warning:          Maintenance Commands.
                                                               (line 197)
 * maint show dwarf always-disassemble:   Maintenance Commands.
-                                                              (line 369)
+                                                              (line 392)
 * maint show dwarf max-cache-age:        Maintenance Commands.
-                                                              (line 390)
+                                                              (line 413)
 * maint show dwarf unwinders:            Maintenance Commands.
-                                                              (line 404)
+                                                              (line 427)
 * maint show internal-error:             Maintenance Commands.
                                                               (line 197)
 * maint show internal-warning:           Maintenance Commands.
                                                               (line 197)
 * maint show per-command:                Maintenance Commands.
-                                                              (line 507)
+                                                              (line 530)
 * maint show profile:                    Maintenance Commands.
-                                                              (line 438)
+                                                              (line 461)
 * maint show show-all-tib:               Maintenance Commands.
-                                                              (line 462)
+                                                              (line 485)
 * maint show show-debug-regs:            Maintenance Commands.
-                                                              (line 454)
-* maint show symbol-cache-size:          Symbols.             (line 703)
+                                                              (line 477)
+* maint show symbol-cache-size:          Symbols.             (line 738)
 * maint show target-async:               Maintenance Commands.
-                                                              (line 468)
+                                                              (line 491)
 * maint show target-non-stop:            Maintenance Commands.
-                                                              (line 476)
+                                                              (line 499)
 * maint show test-options-completion-result: Maintenance Commands.
-                                                              (line 590)
+                                                              (line 613)
 * maint show test-settings:              Maintenance Commands.
-                                                              (line 595)
+                                                              (line 618)
 * maint show tui-resize-message:         Maintenance Commands.
-                                                              (line 496)
+                                                              (line 519)
 * maint show worker-threads:             Maintenance Commands.
-                                                              (line 427)
+                                                              (line 450)
 * maint space:                           Maintenance Commands.
-                                                              (line 555)
+                                                              (line 578)
 * maint test-options:                    Maintenance Commands.
-                                                              (line 576)
+                                                              (line 599)
 * maint time:                            Maintenance Commands.
-                                                              (line 559)
+                                                              (line 582)
 * maint translate-address:               Maintenance Commands.
-                                                              (line 563)
+                                                              (line 586)
 * maint undeprecate:                     Maintenance Commands.
                                                               (line 160)
 * maint with:                            Maintenance Commands.
-                                                              (line 601)
-* make:                                  Shell Commands.      (line  21)
+                                                              (line 624)
+* make:                                  Shell Commands.      (line  22)
 * make-block-symbols-iterator:           Blocks In Guile.     (line 105)
 * make-breakpoint:                       Breakpoints In Guile.
                                                               (line  19)
@@ -1703,7 +4251,7 @@ Command, Variable, and Function Index
 * make-field-iterator:                   Types In Guile.      (line 125)
 * make-iterator:                         Iterators In Guile.  (line  11)
 * make-lazy-value:                       Values From Inferior In Guile.
-                                                              (line 327)
+                                                              (line 339)
 * make-list-iterator:                    Iterators In Guile.  (line  80)
 * make-pretty-printer:                   Guile Pretty Printing API.
                                                               (line  15)
@@ -1712,11 +4260,11 @@ Command, Variable, and Function Index
 * make-value:                            Values From Inferior In Guile.
                                                               (line  45)
 * mark-modified-lines:                   Readline Init File Syntax.
-                                                              (line 229)
+                                                              (line 231)
 * mark-symlinked-directories:            Readline Init File Syntax.
-                                                              (line 234)
+                                                              (line 236)
 * match-hidden-files:                    Readline Init File Syntax.
-                                                              (line 239)
+                                                              (line 241)
 * may-insert-breakpoints:                Observer Mode.       (line  50)
 * may-insert-fast-tracepoints:           Observer Mode.       (line  69)
 * may-insert-tracepoints:                Observer Mode.       (line  59)
@@ -1730,9 +4278,14 @@ Command, Variable, and Function Index
 * memory-port-read-buffer-size:          Memory Ports in Guile.
                                                               (line  37)
 * memory-port-write-buffer-size:         Memory Ports in Guile.
-                                                              (line  45)
+                                                              (line  52)
 * memory-port?:                          Memory Ports in Guile.
                                                               (line  29)
+* memory-tag check:                      Memory Tagging.      (line  45)
+* memory-tag print-allocation-tag:       Memory Tagging.      (line  39)
+* memory-tag print-logical-tag:          Memory Tagging.      (line  35)
+* memory-tag setatag:                    Memory Tagging.      (line  42)
+* memory-tag with-logical-tag:           Memory Tagging.      (line  36)
 * MemoryChangedEvent.address:            Events In Python.    (line 162)
 * MemoryChangedEvent.length:             Events In Python.    (line 165)
 * memset:                                Bootstrapping.       (line  70)
@@ -1741,11 +4294,11 @@ Command, Variable, and Function Index
 * menu-complete-backward ():             Commands For Completion.
                                                               (line  34)
 * menu-complete-display-prefix:          Readline Init File Syntax.
-                                                              (line 246)
+                                                              (line 248)
 * meta-flag:                             Readline Init File Syntax.
-                                                              (line 184)
+                                                              (line 186)
 * methods:                               Xmethod API.         (line  22)
-* monitor:                               Connecting.          (line 272)
+* monitor:                               Connecting.          (line 279)
 * n (next):                              Continuing and Stepping.
                                                               (line  77)
 * n (SingleKey TUI key):                 TUI Single Key Mode. (line  19)
@@ -1771,10 +4324,10 @@ Command, Variable, and Function Index
 * ni (nexti):                            Continuing and Stepping.
                                                               (line 209)
 * non-incremental-forward-search-history (M-n): Commands For History.
-                                                              (line  40)
+                                                              (line  44)
 * non-incremental-reverse-search-history (M-p): Commands For History.
-                                                              (line  34)
-* nosharedlibrary:                       Files.               (line 348)
+                                                              (line  38)
+* nosharedlibrary:                       Files.               (line 358)
 * o (SingleKey TUI key):                 TUI Single Key Mode. (line  22)
 * Objfile:                               Objfiles In Python.  (line   6)
 * objfile-filename:                      Objfiles In Guile.   (line  28)
@@ -1798,15 +4351,17 @@ Command, Variable, and Function Index
 * observer:                              Observer Mode.       (line  22)
 * open-memory:                           Memory Ports in Guile.
                                                               (line  11)
+* operate-and-get-next (C-o):            Commands For History.
+                                                              (line  95)
 * output:                                Output.              (line  35)
 * output-meta:                           Readline Init File Syntax.
-                                                              (line 251)
+                                                              (line 253)
 * output-port:                           I/O Ports in Guile.  (line   9)
 * overlay:                               Overlay Commands.    (line  17)
 * overload-choice annotation:            Prompting.           (line  32)
-* overwrite-mode ():                     Commands For Text.   (line  68)
+* overwrite-mode ():                     Commands For Text.   (line  73)
 * page-completions:                      Readline Init File Syntax.
-                                                              (line 257)
+                                                              (line 259)
 * Parameter:                             Parameters In Python.
                                                               (line   6)
 * Parameter <1>:                         Parameters In Guile. (line   6)
@@ -1814,7 +4369,7 @@ Command, Variable, and Function Index
 * Parameter.get_set_string:              Parameters In Python.
                                                               (line  73)
 * Parameter.get_show_string:             Parameters In Python.
-                                                              (line 102)
+                                                              (line 103)
 * Parameter.set_doc:                     Parameters In Python.
                                                               (line  53)
 * Parameter.show_doc:                    Parameters In Python.
@@ -1825,39 +4380,39 @@ Command, Variable, and Function Index
                                                               (line  18)
 * parameter?:                            Parameters In Guile. (line  99)
 * PARAM_AUTO_BOOLEAN:                    Parameters In Python.
-                                                              (line 116)
+                                                              (line 117)
 * PARAM_AUTO_BOOLEAN <1>:                Parameters In Guile. (line 120)
 * PARAM_BOOLEAN:                         Parameters In Python.
-                                                              (line 112)
+                                                              (line 113)
 * PARAM_BOOLEAN <1>:                     Parameters In Guile. (line 116)
 * PARAM_ENUM:                            Parameters In Python.
-                                                              (line 160)
+                                                              (line 161)
 * PARAM_ENUM <1>:                        Parameters In Guile. (line 156)
 * PARAM_FILENAME:                        Parameters In Python.
-                                                              (line 142)
+                                                              (line 143)
 * PARAM_FILENAME <1>:                    Parameters In Guile. (line 152)
 * PARAM_INTEGER:                         Parameters In Python.
-                                                              (line 125)
+                                                              (line 126)
 * PARAM_OPTIONAL_FILENAME:               Parameters In Python.
-                                                              (line 139)
+                                                              (line 140)
 * PARAM_OPTIONAL_FILENAME <1>:           Parameters In Guile. (line 149)
 * PARAM_STRING:                          Parameters In Python.
-                                                              (line 129)
+                                                              (line 130)
 * PARAM_STRING <1>:                      Parameters In Guile. (line 139)
 * PARAM_STRING_NOESCAPE:                 Parameters In Python.
-                                                              (line 135)
+                                                              (line 136)
 * PARAM_STRING_NOESCAPE <1>:             Parameters In Guile. (line 145)
 * PARAM_UINTEGER:                        Parameters In Python.
-                                                              (line 121)
+                                                              (line 122)
 * PARAM_UINTEGER <1>:                    Parameters In Guile. (line 125)
 * PARAM_ZINTEGER:                        Parameters In Python.
-                                                              (line 146)
+                                                              (line 147)
 * PARAM_ZINTEGER <1>:                    Parameters In Guile. (line 129)
 * PARAM_ZUINTEGER:                       Parameters In Python.
-                                                              (line 150)
+                                                              (line 151)
 * PARAM_ZUINTEGER <1>:                   Parameters In Guile. (line 132)
 * PARAM_ZUINTEGER_UNLIMITED:             Parameters In Python.
-                                                              (line 155)
+                                                              (line 156)
 * PARAM_ZUINTEGER_UNLIMITED <1>:         Parameters In Guile. (line 135)
 * parse-and-eval:                        Basic Guile.         (line 113)
 * passcount:                             Tracepoint Passcounts.
@@ -1865,14 +4420,18 @@ Command, Variable, and Function Index
 * path:                                  Environment.         (line  14)
 * pending-breakpoints:                   GDB/MI Support Commands.
                                                               (line  79)
+* PendingFrame.architecture:             Unwinding Frames in Python.
+                                                              (line  99)
 * PendingFrame.create_unwind_info:       Unwinding Frames in Python.
-                                                              (line  67)
+                                                              (line  66)
+* PendingFrame.level:                    Unwinding Frames in Python.
+                                                              (line 104)
 * PendingFrame.read_register:            Unwinding Frames in Python.
                                                               (line  42)
 * PgDn:                                  TUI Keys.            (line  64)
 * PgUp:                                  TUI Keys.            (line  61)
 * pi:                                    Python Commands.     (line   9)
-* pipe:                                  Shell Commands.      (line  25)
+* pipe:                                  Shell Commands.      (line  26)
 * po (print-object):                     The Print Command with Objective-C.
                                                               (line   6)
 * possible-completions (M-?):            Commands For Completion.
@@ -1908,10 +4467,10 @@ Command, Variable, and Function Index
 * print-object:                          The Print Command with Objective-C.
                                                               (line   6)
 * printf:                                Output.              (line  46)
-* proc-trace-entry:                      Process Information. (line 122)
-* proc-trace-exit:                       Process Information. (line 122)
-* proc-untrace-entry:                    Process Information. (line 122)
-* proc-untrace-exit:                     Process Information. (line 122)
+* proc-trace-entry:                      Process Information. (line 123)
+* proc-trace-exit:                       Process Information. (line 123)
+* proc-untrace-entry:                    Process Information. (line 123)
+* proc-untrace-exit:                     Process Information. (line 123)
 * Progspace:                             Progspaces In Python.
                                                               (line   6)
 * progspace-filename:                    Progspaces In Guile. (line  34)
@@ -1950,7 +4509,7 @@ Command, Variable, and Function Index
 * progspaces:                            Progspaces In Guile. (line  31)
 * prompt annotation:                     Prompting.           (line  24)
 * prompt-for-continue annotation:        Prompting.           (line  40)
-* ptype:                                 Symbols.             (line 298)
+* ptype:                                 Symbols.             (line 319)
 * putDebugChar:                          Bootstrapping.       (line  20)
 * pwd:                                   Working Directory.   (line  40)
 * py:                                    Python Commands.     (line  23)
@@ -1967,7 +4526,7 @@ Command, Variable, and Function Index
 * quoted-insert (C-q or C-v):            Commands For Text.   (line  26)
 * r (run):                               Starting.            (line   6)
 * r (SingleKey TUI key):                 TUI Single Key Mode. (line  28)
-* rbreak:                                Set Breaks.          (line  90)
+* rbreak:                                Set Breaks.          (line 145)
 * rc (reverse-continue):                 Reverse Execution.   (line  36)
 * re-read-init-file (C-x C-r):           Miscellaneous Commands.
                                                               (line   6)
@@ -2065,20 +4624,23 @@ Command, Variable, and Function Index
                                                               (line  81)
 * RecordInstruction.sal:                 Recordings In Python.
                                                               (line  86)
-* redraw-current-line ():                Commands For Moving. (line  44)
-* refresh:                               TUI Commands.        (line  77)
+* redraw-current-line ():                Commands For Moving. (line  49)
+* refresh:                               TUI Commands.        (line 125)
 * register-breakpoint!:                  Breakpoints In Guile.
-                                                              (line  87)
+                                                              (line  91)
 * register-command!:                     Commands In Guile.   (line  58)
 * register-parameter!:                   Parameters In Guile. (line  94)
 * RegisterChangedEvent.frame:            Events In Python.    (line 172)
 * RegisterChangedEvent.regnum:           Events In Python.    (line 175)
+* RegisterDescriptor.name:               Registers In Python. (line  19)
+* RegisterDescriptorIterator.find:       Registers In Python. (line  25)
+* RegisterGroup.name:                    Registers In Python. (line  48)
 * register_xmethod_matcher:              Xmethod API.         (line  82)
 * remote delete:                         File Transfer.       (line  23)
 * remote get:                            File Transfer.       (line  19)
 * remote put:                            File Transfer.       (line  15)
-* remove-inferiors:                      Inferiors and Programs.
-                                                              (line  95)
+* remove-inferiors:                      Inferiors Connections and Programs.
+                                                              (line 148)
 * remove-symbol-file:                    Files.               (line 174)
 * restart CHECKPOINT-ID:                 Checkpoint/Restart.  (line  41)
 * restore:                               Dump/Restore Files.  (line  40)
@@ -2094,7 +4656,7 @@ Command, Variable, and Function Index
 * reverse-step:                          Reverse Execution.   (line  43)
 * reverse-stepi:                         Reverse Execution.   (line  58)
 * revert-all-at-newline:                 Readline Init File Syntax.
-                                                              (line 267)
+                                                              (line 269)
 * revert-line (M-r):                     Miscellaneous Commands.
                                                               (line  26)
 * Right:                                 TUI Keys.            (line  76)
@@ -2131,7 +4693,7 @@ Command, Variable, and Function Index
 * selected-frame:                        Frames In Guile.     (line 156)
 * self:                                  Commands In Guile.   (line 100)
 * self-insert (a, b, A, 1, !, ...):      Commands For Text.   (line  33)
-* set:                                   Help.                (line 129)
+* set:                                   Help.                (line 138)
 * set ada print-signatures:              Overloading support for Ada.
                                                               (line  31)
 * set ada trust-PAD-over-XVS:            Ada Glitches.        (line  42)
@@ -2150,19 +4712,19 @@ Command, Variable, and Function Index
                                                               (line  21)
 * set auto-load local-gdbinit:           Init File in the Current Directory.
                                                               (line  14)
-* set auto-load off:                     Auto-loading.        (line  32)
+* set auto-load off:                     Auto-loading.        (line  24)
 * set auto-load python-scripts:          Python Auto-loading. (line  17)
 * set auto-load safe-path:               Auto-loading safe path.
                                                               (line  32)
 * set auto-load scripts-directory:       objfile-gdbdotext file.
-                                                              (line  37)
-* set auto-solib-add:                    Files.               (line 307)
+                                                              (line  41)
+* set auto-solib-add:                    Files.               (line 317)
 * set backtrace:                         Backtrace.           (line 166)
-* set basenames-may-differ:              Files.               (line 536)
-* set breakpoint always-inserted:        Set Breaks.          (line 325)
-* set breakpoint auto-hw:                Set Breaks.          (line 305)
-* set breakpoint condition-evaluation:   Set Breaks.          (line 346)
-* set breakpoint pending:                Set Breaks.          (line 275)
+* set basenames-may-differ:              Files.               (line 546)
+* set breakpoint always-inserted:        Set Breaks.          (line 380)
+* set breakpoint auto-hw:                Set Breaks.          (line 360)
+* set breakpoint condition-evaluation:   Set Breaks.          (line 401)
+* set breakpoint pending:                Set Breaks.          (line 330)
 * set can-use-hw-watchpoints:            Set Watchpoints.     (line 116)
 * set case-sensitive:                    Symbols.             (line  27)
 * set charset:                           Character Sets.      (line  46)
@@ -2188,7 +4750,7 @@ Command, Variable, and Function Index
 * set data-directory:                    Data Files.          (line  12)
 * set dcache line-size:                  Caching Target Data. (line  60)
 * set dcache size:                       Caching Target Data. (line  57)
-* set debug:                             Debugging Output.    (line  17)
+* set debug:                             Debugging Output.    (line  19)
 * set debug aarch64:                     AArch64.             (line  10)
 * set debug arc:                         ARC.                 (line   9)
 * set debug auto-load:                   Auto-loading verbose mode.
@@ -2202,6 +4764,8 @@ Command, Variable, and Function Index
 * set debug mips:                        MIPS.                (line 100)
 * set debug monitor:                     Target Commands.     (line 107)
 * set debug nios2:                       Nios II.             (line  10)
+* set debug py-breakpoint:               Python Commands.     (line  96)
+* set debug py-unwind:                   Python Commands.     (line 101)
 * set debug skip:                        Skipping Over Functions and Files.
                                                               (line 149)
 * set debug-file-directory:              Separate Debug Files.
@@ -2211,7 +4775,7 @@ Command, Variable, and Function Index
 * set debugexec:                         Cygwin Native.       (line  96)
 * set debugmemory:                       Cygwin Native.       (line 104)
 * set default-collect:                   Tracepoint Actions.  (line 142)
-* set demangle-style:                    Print Settings.      (line 529)
+* set demangle-style:                    Print Settings.      (line 541)
 * set detach-on-fork:                    Forks.               (line  58)
 * set directories:                       Source Path.         (line 178)
 * set disable-randomization:             Starting.            (line 212)
@@ -2234,8 +4798,10 @@ Command, Variable, and Function Index
 * set exec-wrapper:                      Starting.            (line 120)
 * set extended-prompt:                   Prompt.              (line  25)
 * set extension-language:                Show.                (line  30)
-* set follow-exec-mode:                  Forks.               (line 105)
+* set follow-exec-mode:                  Forks.               (line 106)
 * set follow-fork-mode:                  Forks.               (line  39)
+* set fortran repack-array-slices:       Special Fortran Commands.
+                                                              (line  13)
 * set frame-filter priority:             Frame Filter Management.
                                                               (line  84)
 * set gnutarget:                         Target Commands.     (line  28)
@@ -2243,13 +4809,13 @@ Command, Variable, and Function Index
                                                               (line   6)
 * set hash, for remote monitors:         Target Commands.     (line  98)
 * set height:                            Screen Size.         (line  22)
-* set history expansion:                 Command History.     (line  82)
+* set history expansion:                 Command History.     (line  97)
 * set history filename:                  Command History.     (line  26)
-* set history remove-duplicates:         Command History.     (line  54)
-* set history save:                      Command History.     (line  36)
-* set history size:                      Command History.     (line  45)
+* set history remove-duplicates:         Command History.     (line  69)
+* set history save:                      Command History.     (line  44)
+* set history size:                      Command History.     (line  56)
 * set host-charset:                      Character Sets.      (line  33)
-* set index-cache:                       Index Files.         (line  81)
+* set index-cache:                       Index Files.         (line  79)
 * set inferior-tty:                      Input/Output.        (line  49)
 * set input-radix:                       Numbers.             (line  14)
 * set interactive-mode:                  Other Misc Settings. (line   6)
@@ -2274,7 +4840,7 @@ Command, Variable, and Function Index
 * set new-console:                       Cygwin Native.       (line  72)
 * set new-group:                         Cygwin Native.       (line  81)
 * set non-stop:                          Non-Stop Mode.       (line  35)
-* set opaque-type-resolution:            Symbols.             (line 582)
+* set opaque-type-resolution:            Symbols.             (line 617)
 * set osabi:                             ABI.                 (line  11)
 * set output-radix:                      Numbers.             (line  30)
 * set overload-resolution:               Debugging C Plus Plus.
@@ -2287,17 +4853,20 @@ Command, Variable, and Function Index
                                                               (line 117)
 * set print frame-arguments:             Print Settings.      (line 154)
 * set print frame-info:                  Print Settings.      (line 314)
-* set print inferior-events:             Inferiors and Programs.
-                                                              (line 126)
-* set print symbol-loading:              Symbols.             (line 600)
+* set print inferior-events:             Inferiors Connections and Programs.
+                                                              (line 179)
+* set print symbol-loading:              Symbols.             (line 635)
 * set print thread-events:               Threads.             (line 272)
+* set print type hex:                    Symbols.             (line  85)
 * set print type methods:                Symbols.             (line  44)
 * set print type nested-type-limit:      Symbols.             (line  57)
 * set print type typedefs:               Symbols.             (line  68)
 * set processor:                         Targets.             (line  31)
-* set procfs-file:                       Process Information. (line 111)
-* set procfs-trace:                      Process Information. (line 105)
+* set procfs-file:                       Process Information. (line 112)
+* set procfs-trace:                      Process Information. (line 106)
 * set prompt:                            Prompt.              (line  16)
+* set python dont-write-bytecode:        Python Commands.     (line  67)
+* set python ignore-environment:         Python Commands.     (line  52)
 * set python print-stack:                Python Commands.     (line  44)
 * set radix:                             Numbers.             (line  43)
 * set range-stepping:                    Continuing and Stepping.
@@ -2322,27 +4891,28 @@ Command, Variable, and Function Index
 * set remoteflow:                        Remote Configuration.
                                                               (line  48)
 * set schedule-multiple:                 All-Stop Mode.       (line  67)
-* set script-extension:                  Extending GDB.       (line  29)
+* set script-extension:                  Extending GDB.       (line  20)
 * set sh calling-convention:             Super-H.             (line   9)
 * set shell:                             Cygwin Native.       (line 108)
 * set signal-thread:                     Hurd Native.         (line  21)
 * set signals, Hurd command:             Hurd Native.         (line  11)
 * set sigs, Hurd command:                Hurd Native.         (line  11)
 * set sigthread:                         Hurd Native.         (line  21)
-* set solib-absolute-prefix:             Files.               (line 386)
-* set solib-search-path:                 Files.               (line 462)
+* set solib-absolute-prefix:             Files.               (line 396)
+* set solib-search-path:                 Files.               (line 472)
 * set stack-cache:                       Caching Target Data. (line  28)
+* set startup-quietly:                   Mode Options.        (line  26)
 * set startup-with-shell:                Starting.            (line 145)
 * set step-mode:                         Continuing and Stepping.
                                                               (line  91)
-* set stop-on-solib-events:              Files.               (line 363)
+* set stop-on-solib-events:              Files.               (line 373)
 * set stopped, Hurd command:             Hurd Native.         (line  31)
 * set struct-convention:                 i386.                (line   7)
 * set style:                             Output Styling.      (line   6)
 * set substitute-path:                   Source Path.         (line 185)
-* set sysroot:                           Files.               (line 386)
+* set sysroot:                           Files.               (line 396)
 * set target-charset:                    Character Sets.      (line  28)
-* set target-file-system-kind (unix|dos-based|auto): Files.   (line 476)
+* set target-file-system-kind (unix|dos-based|auto): Files.   (line 486)
 * set target-wide-charset:               Character Sets.      (line  61)
 * set task, Hurd commands:               Hurd Native.         (line  48)
 * set tcp:                               Remote Configuration.
@@ -2357,7 +4927,7 @@ Command, Variable, and Function Index
                                                               (line 132)
 * set trace-user:                        Starting and Stopping Trace Experiments.
                                                               (line 122)
-* set trust-readonly-sections:           Files.               (line 265)
+* set trust-readonly-sections:           Files.               (line 275)
 * set tui active-border-mode:            TUI Configuration.   (line  24)
 * set tui border-kind:                   TUI Configuration.   (line   9)
 * set tui border-mode:                   TUI Configuration.   (line  23)
@@ -2371,32 +4941,32 @@ Command, Variable, and Function Index
 * set varsize-limit:                     Ada Settings.        (line   6)
 * set verbose:                           Messages/Warnings.   (line  15)
 * set watchdog:                          Maintenance Commands.
-                                                              (line 610)
+                                                              (line 633)
 * set width:                             Screen Size.         (line  22)
 * set write:                             Patching.            (line  15)
 * set-breakpoint-condition!:             Breakpoints In Guile.
-                                                              (line 198)
+                                                              (line 202)
 * set-breakpoint-enabled!:               Breakpoints In Guile.
-                                                              (line 147)
+                                                              (line 151)
 * set-breakpoint-hit-count!:             Breakpoints In Guile.
-                                                              (line 172)
+                                                              (line 176)
 * set-breakpoint-ignore-count!:          Breakpoints In Guile.
-                                                              (line 166)
+                                                              (line 170)
 * set-breakpoint-silent!:                Breakpoints In Guile.
-                                                              (line 158)
+                                                              (line 162)
 * set-breakpoint-stop!:                  Breakpoints In Guile.
-                                                              (line 206)
+                                                              (line 210)
 * set-breakpoint-task!:                  Breakpoints In Guile.
-                                                              (line 190)
+                                                              (line 194)
 * set-breakpoint-thread!:                Breakpoints In Guile.
-                                                              (line 180)
+                                                              (line 184)
 * set-iterator-progress!:                Iterators In Guile.  (line  60)
 * set-mark (C-@):                        Miscellaneous Commands.
                                                               (line  33)
 * set-memory-port-read-buffer-size!:     Memory Ports in Guile.
-                                                              (line  41)
+                                                              (line  44)
 * set-memory-port-write-buffer-size!:    Memory Ports in Guile.
-                                                              (line  49)
+                                                              (line  59)
 * set-objfile-pretty-printers!:          Objfiles In Guile.   (line  40)
 * set-parameter-value!:                  Parameters In Guile. (line 107)
 * set-pretty-printer-enabled!:           Guile Pretty Printing API.
@@ -2405,10 +4975,12 @@ Command, Variable, and Function Index
                                                               (line  38)
 * set-progspace-pretty-printers!:        Progspaces In Guile. (line  57)
 * set_debug_traps:                       Stub Contents.       (line  10)
-* share:                                 Files.               (line 339)
-* sharedlibrary:                         Files.               (line 339)
+* share:                                 Files.               (line 349)
+* sharedlibrary:                         Files.               (line 349)
 * shell:                                 Shell Commands.      (line  10)
-* show:                                  Help.                (line 134)
+* shell-transpose-words (M-C-t):         Commands For Killing.
+                                                              (line  32)
+* show:                                  Help.                (line 143)
 * show ada print-signatures:             Overloading support for Ada.
                                                               (line  36)
 * show ada trust-PAD-over-XVS:           Ada Glitches.        (line  42)
@@ -2418,7 +4990,7 @@ Command, Variable, and Function Index
 * show architecture:                     Targets.             (line  21)
 * show args:                             Arguments.           (line  28)
 * show arm:                              ARM.                 (line  13)
-* show auto-load:                        Auto-loading.        (line  45)
+* show auto-load:                        Auto-loading.        (line  37)
 * show auto-load gdb-scripts:            Auto-loading sequences.
                                                               (line  17)
 * show auto-load guile-scripts:          Guile Auto-loading.  (line  20)
@@ -2430,14 +5002,14 @@ Command, Variable, and Function Index
 * show auto-load safe-path:              Auto-loading safe path.
                                                               (line  46)
 * show auto-load scripts-directory:      objfile-gdbdotext file.
-                                                              (line  61)
-* show auto-solib-add:                   Files.               (line 324)
+                                                              (line  65)
+* show auto-solib-add:                   Files.               (line 334)
 * show backtrace:                        Backtrace.           (line 173)
-* show basenames-may-differ:             Files.               (line 539)
-* show breakpoint always-inserted:       Set Breaks.          (line 325)
-* show breakpoint auto-hw:               Set Breaks.          (line 305)
-* show breakpoint condition-evaluation:  Set Breaks.          (line 346)
-* show breakpoint pending:               Set Breaks.          (line 275)
+* show basenames-may-differ:             Files.               (line 549)
+* show breakpoint always-inserted:       Set Breaks.          (line 380)
+* show breakpoint auto-hw:               Set Breaks.          (line 360)
+* show breakpoint condition-evaluation:  Set Breaks.          (line 401)
+* show breakpoint pending:               Set Breaks.          (line 330)
 * show can-use-hw-watchpoints:           Set Watchpoints.     (line 119)
 * show case-sensitive:                   Symbols.             (line  40)
 * show charset:                          Character Sets.      (line  52)
@@ -2455,19 +5027,19 @@ Command, Variable, and Function Index
 * show com3irq:                          DJGPP Native.        (line 134)
 * show com4base:                         DJGPP Native.        (line 134)
 * show com4irq:                          DJGPP Native.        (line 134)
-* show commands:                         Command History.     (line  95)
+* show commands:                         Command History.     (line 110)
 * show complaints:                       Messages/Warnings.   (line  35)
-* show configuration:                    Help.                (line 167)
+* show configuration:                    Help.                (line 176)
 * show confirm:                          Messages/Warnings.   (line  57)
 * show convenience:                      Convenience Vars.    (line  37)
-* show copying:                          Help.                (line 158)
+* show copying:                          Help.                (line 167)
 * show cp-abi:                           ABI.                 (line  57)
 * show cwd:                              Working Directory.   (line  27)
 * show cygwin-exceptions:                Cygwin Native.       (line  68)
 * show data-directory:                   Data Files.          (line  16)
 * show dcache line-size:                 Caching Target Data. (line  68)
 * show dcache size:                      Caching Target Data. (line  64)
-* show debug:                            Debugging Output.    (line  20)
+* show debug:                            Debugging Output.    (line  21)
 * show debug arc:                        ARC.                 (line  14)
 * show debug auto-load:                  Auto-loading verbose mode.
                                                               (line  30)
@@ -2479,6 +5051,8 @@ Command, Variable, and Function Index
 * show debug mips:                       MIPS.                (line 104)
 * show debug monitor:                    Target Commands.     (line 111)
 * show debug nios2:                      Nios II.             (line  14)
+* show debug py-breakpoint:              Python Commands.     (line  96)
+* show debug py-unwind:                  Python Commands.     (line 101)
 * show debug skip:                       Skipping Over Functions and Files.
                                                               (line 153)
 * show debug-file-directory:             Separate Debug Files.
@@ -2500,14 +5074,16 @@ Command, Variable, and Function Index
 * show exec-done-display:                Debugging Output.    (line  14)
 * show extended-prompt:                  Prompt.              (line  39)
 * show follow-fork-mode:                 Forks.               (line  52)
+* show fortran repack-array-slices:      Special Fortran Commands.
+                                                              (line  13)
 * show frame-filter priority:            Frame Filter Management.
                                                               (line  91)
 * show gnutarget:                        Target Commands.     (line  40)
 * show hash, for remote monitors:        Target Commands.     (line 104)
 * show height:                           Screen Size.         (line  22)
-* show history:                          Command History.     (line  87)
+* show history:                          Command History.     (line 102)
 * show host-charset:                     Character Sets.      (line  55)
-* show index-cache:                      Index Files.         (line  86)
+* show index-cache:                      Index Files.         (line  84)
 * show inferior-tty:                     Input/Output.        (line  54)
 * show input-radix:                      Numbers.             (line  35)
 * show interactive-mode:                 Other Misc Settings. (line  20)
@@ -2532,7 +5108,7 @@ Command, Variable, and Function Index
 * show new-console:                      Cygwin Native.       (line  77)
 * show new-group:                        Cygwin Native.       (line  86)
 * show non-stop:                         Non-Stop Mode.       (line  38)
-* show opaque-type-resolution:           Symbols.             (line 597)
+* show opaque-type-resolution:           Symbols.             (line 632)
 * show osabi:                            ABI.                 (line  11)
 * show output-radix:                     Numbers.             (line  38)
 * show overload-resolution:              Debugging C Plus Plus.
@@ -2542,16 +5118,17 @@ Command, Variable, and Function Index
 * show print:                            Print Settings.      (line  39)
 * show print finish:                     Continuing and Stepping.
                                                               (line 117)
-* show print inferior-events:            Inferiors and Programs.
-                                                              (line 134)
-* show print symbol-loading:             Symbols.             (line 615)
+* show print inferior-events:            Inferiors Connections and Programs.
+                                                              (line 187)
+* show print symbol-loading:             Symbols.             (line 650)
 * show print thread-events:              Threads.             (line 282)
+* show print type hex:                   Symbols.             (line  94)
 * show print type methods:               Symbols.             (line  53)
 * show print type nested-type-limit:     Symbols.             (line  64)
 * show print type typedefs:              Symbols.             (line  81)
 * show processor:                        Targets.             (line  31)
-* show procfs-file:                      Process Information. (line 116)
-* show procfs-trace:                     Process Information. (line 108)
+* show procfs-file:                      Process Information. (line 117)
+* show procfs-trace:                     Process Information. (line 109)
 * show prompt:                           Prompt.              (line  19)
 * show radix:                            Numbers.             (line  43)
 * show range-stepping:                   Continuing and Stepping.
@@ -2570,23 +5147,24 @@ Command, Variable, and Function Index
 * show remotecache:                      Caching Target Data. (line  25)
 * show remoteflow:                       Remote Configuration.
                                                               (line  52)
-* show script-extension:                 Extending GDB.       (line  29)
+* show script-extension:                 Extending GDB.       (line  20)
 * show sh calling-convention:            Super-H.             (line  22)
 * show shell:                            Cygwin Native.       (line 112)
 * show signal-thread:                    Hurd Native.         (line  27)
 * show signals, Hurd command:            Hurd Native.         (line  17)
 * show sigs, Hurd command:               Hurd Native.         (line  17)
 * show sigthread:                        Hurd Native.         (line  27)
-* show solib-search-path:                Files.               (line 473)
+* show solib-search-path:                Files.               (line 483)
 * show stack-cache:                      Caching Target Data. (line  33)
-* show stop-on-solib-events:             Files.               (line 369)
+* show startup-quietly:                  Mode Options.        (line  26)
+* show stop-on-solib-events:             Files.               (line 379)
 * show stopped, Hurd command:            Hurd Native.         (line  36)
 * show struct-convention:                i386.                (line  15)
 * show style:                            Output Styling.      (line   6)
 * show substitute-path:                  Source Path.         (line 222)
-* show sysroot:                          Files.               (line 459)
+* show sysroot:                          Files.               (line 469)
 * show target-charset:                   Character Sets.      (line  58)
-* show target-file-system-kind:          Files.               (line 476)
+* show target-file-system-kind:          Files.               (line 486)
 * show target-wide-charset:              Character Sets.      (line  67)
 * show task, Hurd commands:              Hurd Native.         (line  56)
 * show tcp:                              Remote Configuration.
@@ -2606,16 +5184,16 @@ Command, Variable, and Function Index
 * show values:                           Value History.       (line  47)
 * show varsize-limit:                    Ada Settings.        (line  26)
 * show verbose:                          Messages/Warnings.   (line  21)
-* show version:                          Help.                (line 148)
-* show warranty:                         Help.                (line 162)
+* show version:                          Help.                (line 157)
+* show warranty:                         Help.                (line 171)
 * show width:                            Screen Size.         (line  22)
 * show write:                            Patching.            (line  26)
 * show-all-if-ambiguous:                 Readline Init File Syntax.
-                                                              (line 273)
+                                                              (line 275)
 * show-all-if-unmodified:                Readline Init File Syntax.
-                                                              (line 279)
+                                                              (line 281)
 * show-mode-in-prompt:                   Readline Init File Syntax.
-                                                              (line 288)
+                                                              (line 290)
 * si (stepi):                            Continuing and Stepping.
                                                               (line 196)
 * signal:                                Signaling.           (line   6)
@@ -2648,7 +5226,7 @@ Command, Variable, and Function Index
 * skip function:                         Skipping Over Functions and Files.
                                                               (line  89)
 * skip-completed-text:                   Readline Init File Syntax.
-                                                              (line 294)
+                                                              (line 296)
 * skip-csi-sequence ():                  Miscellaneous Commands.
                                                               (line  52)
 * source:                                Command Files.       (line  17)
@@ -2715,18 +5293,19 @@ Command, Variable, and Function Index
 * SYMBOL_LABEL_DOMAIN <1>:               Symbols In Guile.    (line 126)
 * SYMBOL_LOC_ARG:                        Symbols In Python.   (line 197)
 * SYMBOL_LOC_ARG <1>:                    Symbols In Guile.    (line 155)
-* SYMBOL_LOC_BLOCK:                      Symbols In Python.   (line 218)
+* SYMBOL_LOC_BLOCK:                      Symbols In Python.   (line 221)
 * SYMBOL_LOC_BLOCK <1>:                  Symbols In Guile.    (line 176)
-* SYMBOL_LOC_COMPUTED:                   Symbols In Python.   (line 232)
-* SYMBOL_LOC_COMPUTED <1>:               Symbols In Python.   (line 235)
-* SYMBOL_LOC_COMPUTED <2>:               Symbols In Guile.    (line 190)
+* SYMBOL_LOC_COMMON_BLOCK:               Symbols In Python.   (line 238)
+* SYMBOL_LOC_COMPUTED:                   Symbols In Python.   (line 235)
+* SYMBOL_LOC_COMPUTED <1>:               Symbols In Guile.    (line 190)
 * SYMBOL_LOC_CONST:                      Symbols In Python.   (line 188)
 * SYMBOL_LOC_CONST <1>:                  Symbols In Guile.    (line 146)
-* SYMBOL_LOC_CONST_BYTES:                Symbols In Python.   (line 221)
+* SYMBOL_LOC_CONST_BYTES:                Symbols In Python.   (line 224)
 * SYMBOL_LOC_CONST_BYTES <1>:            Symbols In Guile.    (line 179)
+* SYMBOL_LOC_LABEL:                      Symbols In Python.   (line 218)
 * SYMBOL_LOC_LOCAL:                      Symbols In Python.   (line 211)
 * SYMBOL_LOC_LOCAL <1>:                  Symbols In Guile.    (line 169)
-* SYMBOL_LOC_OPTIMIZED_OUT:              Symbols In Python.   (line 229)
+* SYMBOL_LOC_OPTIMIZED_OUT:              Symbols In Python.   (line 232)
 * SYMBOL_LOC_OPTIMIZED_OUT <1>:          Symbols In Guile.    (line 187)
 * SYMBOL_LOC_REF_ARG:                    Symbols In Python.   (line 201)
 * SYMBOL_LOC_REF_ARG <1>:                Symbols In Guile.    (line 159)
@@ -2740,7 +5319,7 @@ Command, Variable, and Function Index
 * SYMBOL_LOC_TYPEDEF <1>:                Symbols In Guile.    (line 172)
 * SYMBOL_LOC_UNDEF:                      Symbols In Python.   (line 184)
 * SYMBOL_LOC_UNDEF <1>:                  Symbols In Guile.    (line 142)
-* SYMBOL_LOC_UNRESOLVED:                 Symbols In Python.   (line 224)
+* SYMBOL_LOC_UNRESOLVED:                 Symbols In Python.   (line 227)
 * SYMBOL_LOC_UNRESOLVED <1>:             Symbols In Guile.    (line 182)
 * SYMBOL_MODULE_DOMAIN:                  Symbols In Python.   (line 175)
 * SYMBOL_STRUCT_DOMAIN:                  Symbols In Python.   (line 169)
@@ -2807,14 +5386,14 @@ Command, Variable, and Function Index
 * target tfile:                          Trace Files.         (line  28)
 * target-config:                         Guile Configuration. (line  24)
 * task (Ada):                            Ada Tasks.           (line 105)
-* tbreak:                                Set Breaks.          (line  54)
+* tbreak:                                Set Breaks.          (line 109)
 * tcatch:                                Set Catchpoints.     (line 298)
 * tdump:                                 tdump.               (line   6)
 * teval (tracepoints):                   Tracepoint Actions.  (line 118)
 * tfaas:                                 Threads.             (line 229)
 * tfile:                                 Trace Files.         (line  28)
 * tfind:                                 tfind.               (line   6)
-* thbreak:                               Set Breaks.          (line  80)
+* thbreak:                               Set Breaks.          (line 135)
 * this, inside C++ member functions:     C Plus Plus Expressions.
                                                               (line  20)
 * thread apply:                          Threads.             (line 187)
@@ -2829,8 +5408,8 @@ Command, Variable, and Function Index
                                                               (line  30)
 * trace:                                 Create and Delete Tracepoints.
                                                               (line   6)
-* transpose-chars (C-t):                 Commands For Text.   (line  45)
-* transpose-words (M-t):                 Commands For Text.   (line  51)
+* transpose-chars (C-t):                 Commands For Text.   (line  50)
+* transpose-words (M-t):                 Commands For Text.   (line  56)
 * tsave:                                 Trace Files.         (line  12)
 * tstart [ NOTES ]:                      Starting and Stopping Trace Experiments.
                                                               (line   6)
@@ -2841,7 +5420,20 @@ Command, Variable, and Function Index
 * tty:                                   Input/Output.        (line  23)
 * tui disable:                           TUI Commands.        (line  23)
 * tui enable:                            TUI Commands.        (line  18)
-* tui reg:                               TUI Commands.        (line  80)
+* tui new-layout:                        TUI Commands.        (line  29)
+* tui reg:                               TUI Commands.        (line 128)
+* TuiWindow.erase:                       TUI Windows In Python.
+                                                              (line  49)
+* TuiWindow.height:                      TUI Windows In Python.
+                                                              (line  41)
+* TuiWindow.is_valid:                    TUI Windows In Python.
+                                                              (line  26)
+* TuiWindow.title:                       TUI Windows In Python.
+                                                              (line  44)
+* TuiWindow.width:                       TUI Windows In Python.
+                                                              (line  38)
+* TuiWindow.write:                       TUI Windows In Python.
+                                                              (line  52)
 * tvariable:                             Trace State Variables.
                                                               (line  26)
 * type-array:                            Types In Guile.      (line  52)
@@ -2865,77 +5457,79 @@ Command, Variable, and Function Index
 * type-vector:                           Types In Guile.      (line  60)
 * type-volatile:                         Types In Guile.      (line 103)
 * Type.alignof:                          Types In Python.     (line  32)
-* Type.array:                            Types In Python.     (line 112)
+* Type.array:                            Types In Python.     (line 148)
 * Type.code:                             Types In Python.     (line  38)
-* Type.const:                            Types In Python.     (line 133)
-* Type.fields:                           Types In Python.     (line  63)
-* Type.name:                             Types In Python.     (line  42)
-* Type.objfile:                          Types In Python.     (line  57)
-* Type.optimized_out:                    Types In Python.     (line 190)
-* Type.pointer:                          Types In Python.     (line 156)
-* Type.range:                            Types In Python.     (line 146)
-* Type.reference:                        Types In Python.     (line 152)
-* Type.sizeof:                           Types In Python.     (line  46)
-* Type.strip_typedefs:                   Types In Python.     (line 160)
-* Type.tag:                              Types In Python.     (line  51)
-* Type.target:                           Types In Python.     (line 164)
-* Type.template_argument:                Types In Python.     (line 178)
-* Type.unqualified:                      Types In Python.     (line 141)
-* Type.vector:                           Types In Python.     (line 120)
-* Type.volatile:                         Types In Python.     (line 137)
+* Type.const:                            Types In Python.     (line 169)
+* Type.dynamic:                          Types In Python.     (line  42)
+* Type.fields:                           Types In Python.     (line  85)
+* Type.name:                             Types In Python.     (line  62)
+* Type.objfile:                          Types In Python.     (line  79)
+* Type.optimized_out:                    Types In Python.     (line 226)
+* Type.pointer:                          Types In Python.     (line 192)
+* Type.range:                            Types In Python.     (line 182)
+* Type.reference:                        Types In Python.     (line 188)
+* Type.sizeof:                           Types In Python.     (line  66)
+* Type.strip_typedefs:                   Types In Python.     (line 196)
+* Type.tag:                              Types In Python.     (line  73)
+* Type.target:                           Types In Python.     (line 200)
+* Type.template_argument:                Types In Python.     (line 214)
+* Type.unqualified:                      Types In Python.     (line 177)
+* Type.vector:                           Types In Python.     (line 156)
+* Type.volatile:                         Types In Python.     (line 173)
 * type?:                                 Types In Guile.      (line  11)
-* TYPE_CODE_ARRAY:                       Types In Python.     (line 202)
+* TYPE_CODE_ARRAY:                       Types In Python.     (line 238)
 * TYPE_CODE_ARRAY <1>:                   Types In Guile.      (line 153)
-* TYPE_CODE_BITSTRING:                   Types In Python.     (line 240)
+* TYPE_CODE_BITSTRING:                   Types In Python.     (line 276)
 * TYPE_CODE_BITSTRING <1>:               Types In Guile.      (line 191)
-* TYPE_CODE_BOOL:                        Types In Python.     (line 264)
-* TYPE_CODE_BOOL <1>:                    Types In Guile.      (line 212)
-* TYPE_CODE_CHAR:                        Types In Python.     (line 261)
-* TYPE_CODE_CHAR <1>:                    Types In Guile.      (line 209)
-* TYPE_CODE_COMPLEX:                     Types In Python.     (line 267)
-* TYPE_CODE_COMPLEX <1>:                 Types In Guile.      (line 215)
-* TYPE_CODE_DECFLOAT:                    Types In Python.     (line 276)
-* TYPE_CODE_DECFLOAT <1>:                Types In Guile.      (line 224)
-* TYPE_CODE_ENUM:                        Types In Python.     (line 211)
+* TYPE_CODE_BOOL:                        Types In Python.     (line 300)
+* TYPE_CODE_BOOL <1>:                    Types In Guile.      (line 215)
+* TYPE_CODE_CHAR:                        Types In Python.     (line 297)
+* TYPE_CODE_CHAR <1>:                    Types In Guile.      (line 212)
+* TYPE_CODE_COMPLEX:                     Types In Python.     (line 303)
+* TYPE_CODE_COMPLEX <1>:                 Types In Guile.      (line 218)
+* TYPE_CODE_DECFLOAT:                    Types In Python.     (line 312)
+* TYPE_CODE_DECFLOAT <1>:                Types In Guile.      (line 227)
+* TYPE_CODE_ENUM:                        Types In Python.     (line 247)
 * TYPE_CODE_ENUM <1>:                    Types In Guile.      (line 162)
-* TYPE_CODE_ERROR:                       Types In Python.     (line 243)
+* TYPE_CODE_ERROR:                       Types In Python.     (line 279)
 * TYPE_CODE_ERROR <1>:                   Types In Guile.      (line 194)
-* TYPE_CODE_FLAGS:                       Types In Python.     (line 214)
+* TYPE_CODE_FLAGS:                       Types In Python.     (line 250)
 * TYPE_CODE_FLAGS <1>:                   Types In Guile.      (line 165)
-* TYPE_CODE_FLT:                         Types In Python.     (line 223)
+* TYPE_CODE_FLT:                         Types In Python.     (line 259)
 * TYPE_CODE_FLT <1>:                     Types In Guile.      (line 174)
-* TYPE_CODE_FUNC:                        Types In Python.     (line 217)
+* TYPE_CODE_FUNC:                        Types In Python.     (line 253)
 * TYPE_CODE_FUNC <1>:                    Types In Guile.      (line 168)
-* TYPE_CODE_INT:                         Types In Python.     (line 220)
+* TYPE_CODE_INT:                         Types In Python.     (line 256)
 * TYPE_CODE_INT <1>:                     Types In Guile.      (line 171)
-* TYPE_CODE_INTERNAL_FUNCTION:           Types In Python.     (line 279)
-* TYPE_CODE_INTERNAL_FUNCTION <1>:       Types In Guile.      (line 227)
-* TYPE_CODE_MEMBERPTR:                   Types In Python.     (line 252)
+* TYPE_CODE_INTERNAL_FUNCTION:           Types In Python.     (line 315)
+* TYPE_CODE_INTERNAL_FUNCTION <1>:       Types In Guile.      (line 230)
+* TYPE_CODE_MEMBERPTR:                   Types In Python.     (line 288)
 * TYPE_CODE_MEMBERPTR <1>:               Types In Guile.      (line 203)
-* TYPE_CODE_METHOD:                      Types In Python.     (line 246)
+* TYPE_CODE_METHOD:                      Types In Python.     (line 282)
 * TYPE_CODE_METHOD <1>:                  Types In Guile.      (line 197)
-* TYPE_CODE_METHODPTR:                   Types In Python.     (line 249)
+* TYPE_CODE_METHODPTR:                   Types In Python.     (line 285)
 * TYPE_CODE_METHODPTR <1>:               Types In Guile.      (line 200)
-* TYPE_CODE_NAMESPACE:                   Types In Python.     (line 273)
-* TYPE_CODE_NAMESPACE <1>:               Types In Guile.      (line 221)
-* TYPE_CODE_PTR:                         Types In Python.     (line 199)
+* TYPE_CODE_NAMESPACE:                   Types In Python.     (line 309)
+* TYPE_CODE_NAMESPACE <1>:               Types In Guile.      (line 224)
+* TYPE_CODE_PTR:                         Types In Python.     (line 235)
 * TYPE_CODE_PTR <1>:                     Types In Guile.      (line 150)
-* TYPE_CODE_RANGE:                       Types In Python.     (line 232)
+* TYPE_CODE_RANGE:                       Types In Python.     (line 268)
 * TYPE_CODE_RANGE <1>:                   Types In Guile.      (line 183)
-* TYPE_CODE_REF:                         Types In Python.     (line 255)
+* TYPE_CODE_REF:                         Types In Python.     (line 291)
 * TYPE_CODE_REF <1>:                     Types In Guile.      (line 206)
-* TYPE_CODE_RVALUE_REF:                  Types In Python.     (line 258)
-* TYPE_CODE_SET:                         Types In Python.     (line 229)
+* TYPE_CODE_RVALUE_REF:                  Types In Python.     (line 294)
+* TYPE_CODE_RVALUE_REF <1>:              Types In Guile.      (line 209)
+* TYPE_CODE_SET:                         Types In Python.     (line 265)
 * TYPE_CODE_SET <1>:                     Types In Guile.      (line 180)
-* TYPE_CODE_STRING:                      Types In Python.     (line 235)
+* TYPE_CODE_STRING:                      Types In Python.     (line 271)
 * TYPE_CODE_STRING <1>:                  Types In Guile.      (line 186)
-* TYPE_CODE_STRUCT:                      Types In Python.     (line 205)
+* TYPE_CODE_STRUCT:                      Types In Python.     (line 241)
 * TYPE_CODE_STRUCT <1>:                  Types In Guile.      (line 156)
-* TYPE_CODE_TYPEDEF:                     Types In Python.     (line 270)
-* TYPE_CODE_TYPEDEF <1>:                 Types In Guile.      (line 218)
-* TYPE_CODE_UNION:                       Types In Python.     (line 208)
+* TYPE_CODE_TYPEDEF:                     Types In Python.     (line 306)
+* TYPE_CODE_TYPEDEF <1>:                 Types In Guile.      (line 221)
+* TYPE_CODE_UNION:                       Types In Python.     (line 244)
 * TYPE_CODE_UNION <1>:                   Types In Guile.      (line 159)
-* TYPE_CODE_VOID:                        Types In Python.     (line 226)
+* TYPE_CODE_VOID:                        Types In Python.     (line 262)
 * TYPE_CODE_VOID <1>:                    Types In Guile.      (line 177)
 * u (SingleKey TUI key):                 TUI Single Key Mode. (line  37)
 * u (until):                             Continuing and Stepping.
@@ -2947,11 +5541,11 @@ Command, Variable, and Function Index
                                                               (line  23)
 * universal-argument ():                 Numeric Arguments.   (line  10)
 * unix-filename-rubout ():               Commands For Killing.
-                                                              (line  32)
+                                                              (line  43)
 * unix-line-discard (C-u):               Commands For Killing.
-                                                              (line  12)
+                                                              (line  16)
 * unix-word-rubout (C-w):                Commands For Killing.
-                                                              (line  28)
+                                                              (line  39)
 * unset environment:                     Environment.         (line  65)
 * unset substitute-path:                 Source Path.         (line 214)
 * until:                                 Continuing and Stepping.
@@ -2962,29 +5556,31 @@ Command, Variable, and Function Index
 * up:                                    Selection.           (line  69)
 * Up:                                    TUI Keys.            (line  67)
 * up-silently:                           Selection.           (line 106)
-* upcase-word (M-u):                     Commands For Text.   (line  56)
-* update:                                TUI Commands.        (line 106)
+* upcase-word (M-u):                     Commands For Text.   (line  61)
+* update:                                TUI Commands.        (line 154)
 * v (SingleKey TUI key):                 TUI Single Key Mode. (line  40)
 * value->bool:                           Values From Inferior In Guile.
-                                                              (line 234)
-* value->bytevector:                     Values From Inferior In Guile.
                                                               (line 246)
+* value->bytevector:                     Values From Inferior In Guile.
+                                                              (line 258)
 * value->integer:                        Values From Inferior In Guile.
-                                                              (line 238)
+                                                              (line 250)
 * value->lazy-string:                    Values From Inferior In Guile.
-                                                              (line 291)
+                                                              (line 303)
 * value->real:                           Values From Inferior In Guile.
-                                                              (line 242)
+                                                              (line 254)
 * value->string:                         Values From Inferior In Guile.
-                                                              (line 250)
+                                                              (line 262)
 * value-abs:                             Arithmetic In Guile. (line  35)
 * value-add:                             Arithmetic In Guile. (line  15)
 * value-address:                         Values From Inferior In Guile.
                                                               (line 106)
 * value-call:                            Values From Inferior In Guile.
-                                                              (line 228)
+                                                              (line 240)
 * value-cast:                            Values From Inferior In Guile.
                                                               (line 129)
+* value-const-value:                     Values From Inferior In Guile.
+                                                              (line 229)
 * value-dereference:                     Values From Inferior In Guile.
                                                               (line 143)
 * value-div:                             Arithmetic In Guile. (line  21)
@@ -2993,11 +5589,11 @@ Command, Variable, and Function Index
 * value-dynamic-type:                    Values From Inferior In Guile.
                                                               (line 114)
 * value-fetch-lazy!:                     Values From Inferior In Guile.
-                                                              (line 333)
+                                                              (line 345)
 * value-field:                           Values From Inferior In Guile.
-                                                              (line 221)
+                                                              (line 233)
 * value-lazy?:                           Values From Inferior In Guile.
-                                                              (line 316)
+                                                              (line 328)
 * value-logand:                          Arithmetic In Guile. (line  47)
 * value-logior:                          Arithmetic In Guile. (line  49)
 * value-lognot:                          Arithmetic In Guile. (line  45)
@@ -3014,16 +5610,20 @@ Command, Variable, and Function Index
 * value-pos:                             Arithmetic In Guile. (line  33)
 * value-pow:                             Arithmetic In Guile. (line  27)
 * value-print:                           Values From Inferior In Guile.
-                                                              (line 342)
+                                                              (line 354)
+* value-reference-value:                 Values From Inferior In Guile.
+                                                              (line 221)
 * value-referenced-value:                Values From Inferior In Guile.
                                                               (line 196)
 * value-reinterpret-cast:                Values From Inferior In Guile.
                                                               (line 139)
 * value-rem:                             Arithmetic In Guile. (line  23)
 * value-rsh:                             Arithmetic In Guile. (line  39)
+* value-rvalue-reference-value:          Values From Inferior In Guile.
+                                                              (line 225)
 * value-sub:                             Arithmetic In Guile. (line  17)
 * value-subscript:                       Values From Inferior In Guile.
-                                                              (line 224)
+                                                              (line 236)
 * value-type:                            Values From Inferior In Guile.
                                                               (line 110)
 * Value.address:                         Values From Inferior.
@@ -3039,7 +5639,7 @@ Command, Variable, and Function Index
 * Value.dynamic_type:                    Values From Inferior.
                                                               (line  79)
 * Value.fetch_lazy:                      Values From Inferior.
-                                                              (line 386)
+                                                              (line 391)
 * Value.format_string:                   Values From Inferior.
                                                               (line 248)
 * Value.is_lazy:                         Values From Inferior.
@@ -3047,7 +5647,7 @@ Command, Variable, and Function Index
 * Value.is_optimized_out:                Values From Inferior.
                                                               (line  70)
 * Value.lazy_string:                     Values From Inferior.
-                                                              (line 364)
+                                                              (line 369)
 * Value.referenced_value:                Values From Inferior.
                                                               (line 207)
 * Value.reference_value:                 Values From Inferior.
@@ -3055,7 +5655,7 @@ Command, Variable, and Function Index
 * Value.reinterpret_cast:                Values From Inferior.
                                                               (line 244)
 * Value.string:                          Values From Inferior.
-                                                              (line 332)
+                                                              (line 337)
 * Value.type:                            Values From Inferior.
                                                               (line  75)
 * Value.__init__:                        Values From Inferior.
@@ -3070,36 +5670,46 @@ Command, Variable, and Function Index
 * value?:                                Values From Inferior In Guile.
                                                               (line  41)
 * vi-cmd-mode-string:                    Readline Init File Syntax.
-                                                              (line 307)
+                                                              (line 309)
 * vi-editing-mode (M-C-j):               Miscellaneous Commands.
                                                               (line  92)
 * vi-ins-mode-string:                    Readline Init File Syntax.
-                                                              (line 318)
+                                                              (line 320)
 * visible-stats:                         Readline Init File Syntax.
-                                                              (line 329)
+                                                              (line 331)
 * w (SingleKey TUI key):                 TUI Single Key Mode. (line  43)
 * w (with):                              Command Settings.    (line  39)
 * watch:                                 Set Watchpoints.     (line  42)
 * watchpoint annotation:                 Annotations for Running.
                                                               (line  50)
-* whatis:                                Symbols.             (line 125)
+* whatis:                                Symbols.             (line 138)
 * where:                                 Backtrace.           (line  94)
 * while:                                 Command Files.       (line  85)
 * while-stepping (tracepoints):          Tracepoint Actions.  (line 126)
-* winheight:                             TUI Commands.        (line 110)
+* Window.click:                          TUI Windows In Python.
+                                                              (line 104)
+* Window.close:                          TUI Windows In Python.
+                                                              (line  71)
+* Window.hscroll:                        TUI Windows In Python.
+                                                              (line  90)
+* Window.render:                         TUI Windows In Python.
+                                                              (line  80)
+* Window.vscroll:                        TUI Windows In Python.
+                                                              (line  97)
+* winheight:                             TUI Commands.        (line 158)
 * with command:                          Command Settings.    (line  39)
 * WP_ACCESS:                             Breakpoints In Python.
-                                                              (line  86)
+                                                              (line  95)
 * WP_ACCESS <1>:                         Breakpoints In Guile.
-                                                              (line  84)
+                                                              (line  88)
 * WP_READ:                               Breakpoints In Python.
-                                                              (line  80)
+                                                              (line  89)
 * WP_READ <1>:                           Breakpoints In Guile.
-                                                              (line  78)
+                                                              (line  82)
 * WP_WRITE:                              Breakpoints In Python.
-                                                              (line  83)
+                                                              (line  92)
 * WP_WRITE <1>:                          Breakpoints In Guile.
-                                                              (line  81)
+                                                              (line  85)
 * x (examine memory):                    Memory.              (line   9)
 * x(examine), and info line:             Machine Code.        (line  34)
 * XMethod.__init__:                      Xmethod API.         (line  38)
@@ -3109,11 +5719,11 @@ Command, Variable, and Function Index
 * XMethodWorker.get_result_type:         Xmethod API.         (line  67)
 * XMethodWorker.__call__:                Xmethod API.         (line  73)
 * yank (C-y):                            Commands For Killing.
-                                                              (line  59)
+                                                              (line  70)
 * yank-last-arg (M-. or M-_):            Commands For History.
-                                                              (line  79)
+                                                              (line  83)
 * yank-nth-arg (M-C-y):                  Commands For History.
-                                                              (line  70)
+                                                              (line  74)
 * yank-pop (M-y):                        Commands For Killing.
-                                                              (line  62)
+                                                              (line  73)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdbinit.5 ./gdb/doc/gdbinit.5
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdbinit.5	2020-03-07 02:11:42.000000000 +0000
+++ ./gdb/doc/gdbinit.5	2021-12-16 02:00:35.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 "GDBINIT 5"
-.TH GDBINIT 5 "2020-03-07" "gdb-9.1.90.20200307-git" "GNU Development Tools"
+.TH GDBINIT 5 "2021-12-16" "gdb-11.1.90.20211216-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,6 +142,8 @@
 gdbinit \- GDB initialization scripts
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
+~/.config/gdb/gdbinit
+.PP
 ~/.gdbinit
 .PP
 \&./.gdbinit
@@ -147,7 +158,7 @@ the \s-1GDB\s0 manual in node \f(CW\*(C`
 Please read more in
 the \s-1GDB\s0 manual in node \f(CW\*(C`Startup\*(C'\fR
 \&\*(-- shell command \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR.
-.ie n .IP "\fB(not enabled with \fB""\-\-with\-system\-gdbinit""\fB during compilation)\fR" 4
+.ie n .IP "\fB(not enabled with \f(CB""\-\-with\-system\-gdbinit""\fB during compilation)\fR" 4
 .el .IP "\fB(not enabled with \f(CB\-\-with\-system\-gdbinit\fB during compilation)\fR" 4
 .IX Item "(not enabled with --with-system-gdbinit during compilation)"
 System-wide initialization file.  It is executed unless user specified
@@ -155,7 +166,7 @@ System-wide initialization file.  It is
 See more in
 the \s-1GDB\s0 manual in node \f(CW\*(C`System\-wide configuration\*(C'\fR
 \&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqSystem\-wide configuration\*(Aq\*(C'\fR.
-.ie n .IP "\fB(not enabled with \fB""\-\-with\-system\-gdbinit\-dir""\fB during compilation)\fR" 4
+.ie n .IP "\fB(not enabled with \f(CB""\-\-with\-system\-gdbinit\-dir""\fB during compilation)\fR" 4
 .el .IP "\fB(not enabled with \f(CB\-\-with\-system\-gdbinit\-dir\fB during compilation)\fR" 4
 .IX Item "(not enabled with --with-system-gdbinit-dir during compilation)"
 System-wide initialization directory.  All files in this directory are
@@ -164,12 +175,12 @@ executed on startup unless user specifie
 See more in
 the \s-1GDB\s0 manual in node \f(CW\*(C`System\-wide configuration\*(C'\fR
 \&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqSystem\-wide configuration\*(Aq\*(C'\fR.
-.IP "\fB~/.gdbinit\fR" 4
-.IX Item "~/.gdbinit"
+.IP "\fB\f(BI~/.config/gdb/gdbinit\fB or \f(BI~/.gdbinit\fB\fR" 4
+.IX Item "~/.config/gdb/gdbinit or ~/.gdbinit"
 User initialization file.  It is executed unless user specified
 \&\s-1GDB\s0 options \f(CW\*(C`\-nx\*(C'\fR, \f(CW\*(C`\-n\*(C'\fR or \f(CW\*(C`\-nh\*(C'\fR.
-.IP "\fB./.gdbinit\fR" 4
-.IX Item "./.gdbinit"
+.IP "\fB\f(BI.gdbinit\fB\fR" 4
+.IX Item ".gdbinit"
 Initialization file for current directory.  It may need to be enabled with
 \&\s-1GDB\s0 security command \f(CW\*(C`set auto\-load local\-gdbinit\*(C'\fR.
 See more in
@@ -179,7 +190,7 @@ the \s-1GDB\s0 manual in node \f(CW\*(C`
 .IX Header "OPTIONS"
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-\&\fIgdb\fR\|(1), \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR
+\&\fBgdb\fR\|(1), \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR
 .PP
 The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual.
 If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo
@@ -191,11 +202,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\-2020 Free Software Foundation, Inc.
+Copyright (c) 1988\-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdbserver.1 ./gdb/doc/gdbserver.1
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdbserver.1	2020-03-07 02:11:42.000000000 +0000
+++ ./gdb/doc/gdbserver.1	2021-12-16 02:00:34.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 "GDBSERVER 1"
-.TH GDBSERVER 1 "2020-03-07" "gdb-9.1.90.20200307-git" "GNU Development Tools"
+.TH GDBSERVER 1 "2021-12-16" "gdb-11.1.90.20211216-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
@@ -151,7 +160,7 @@ the target system.  The program can be s
 the \s-1GDB\s0 running on the host system.
 .PP
 To use the server, you log on to the target system, and run the \fBgdbserver\fR
-program.  You must tell it (a) how to communicate with \s-1GDB\s0, (b) the name of
+program.  You must tell it (a) how to communicate with \s-1GDB,\s0 (b) the name of
 your program, and (c) its arguments.  The general syntax is:
 .PP
 .Vb 1
@@ -175,7 +184,7 @@ To use a \s-1TCP\s0 connection, you coul
 .Ve
 .PP
 This says pretty much the same thing as the last example, except that we are
-going to communicate with the \f(CW\*(C`host\*(C'\fR \s-1GDB\s0 via \s-1TCP\s0.  The \f(CW\*(C`host:2345\*(C'\fR argument means
+going to communicate with the \f(CW\*(C`host\*(C'\fR \s-1GDB\s0 via \s-1TCP.\s0  The \f(CW\*(C`host:2345\*(C'\fR argument means
 that we are expecting to see a \s-1TCP\s0 connection from \f(CW\*(C`host\*(C'\fR to local \s-1TCP\s0 port
 2345.  (Currently, the \f(CW\*(C`host\*(C'\fR part is ignored.)  You can choose any number you
 want for the port number as long as it does not conflict with any existing \s-1TCP\s0
@@ -233,8 +242,8 @@ command, otherwise you may get an error
 .PP
 \&\fBgdbserver\fR can also debug multiple inferiors at once,
 described in
-the \s-1GDB\s0 manual in node \f(CW\*(C`Inferiors and Programs\*(C'\fR
-\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInferiors and Programs\*(Aq\*(C'\fR.
+the \s-1GDB\s0 manual in node \f(CW\*(C`Inferiors Connections and Programs\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInferiors Connections and Programs\*(Aq\*(C'\fR.
 In such case use the \f(CW\*(C`extended\-remote\*(C'\fR \s-1GDB\s0 command variant:
 .PP
 .Vb 1
@@ -355,11 +364,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\-2020 Free Software Foundation, Inc.
+Copyright (c) 1988\-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.texinfo ./gdb/doc/gdb.texinfo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/gdb.texinfo	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/gdb.texinfo	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 \input texinfo      @c -*-texinfo-*-
-@c Copyright (C) 1988-2020 Free Software Foundation, Inc.
+@c Copyright (C) 1988--2021 Free Software Foundation, Inc.
 @c
 @c %**start of header
 @c makeinfo ignores cmds prev to setfilename, so its arg cannot make use
@@ -50,7 +50,7 @@
 
 @copying
 @c man begin COPYRIGHT
-Copyright @copyright{} 1988-2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2021 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
@@ -108,7 +108,7 @@ ISBN 978-0-9831592-3-0 @*
 @page
 
 @ifnottex
-@node Top, Summary, (dir), (dir)
+@node Top, Summary
 
 @top Debugging with @value{GDBN}
 
@@ -120,7 +120,7 @@ This is the @value{EDITION} Edition, for
 @end ifset
 Version @value{GDBVN}.
 
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2021 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
@@ -557,6 +557,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.
+
 @node Sample Session
 @chapter A Sample @value{GDBN} Session
 
@@ -933,6 +937,7 @@ in sequential order.  The order makes a
 * File Options::                Choosing files
 * Mode Options::                Choosing modes
 * Startup::                     What @value{GDBN} does during startup
+* Initialization Files::        Initialization Files
 @end menu
 
 @node File Options
@@ -1035,6 +1040,20 @@ Execute a single @value{GDBN} command be
 after loading gdbinit files).
 @xref{Startup}.
 
+@item -early-init-command @var{file}
+@itemx -eix @var{file}
+@cindex @code{--early-init-command}
+@cindex @code{-eix}
+Execute commands from @var{file} very early in the initialization
+process, before any output is produced.  @xref{Startup}.
+
+@item -early-init-eval-command @var{command}
+@itemx -eiex @var{command}
+@cindex @code{--early-init-eval-command}
+@cindex @code{-eiex}
+Execute a single @value{GDBN} command very early in the initialization
+process, before any output is produced.
+
 @item -directory @var{directory}
 @itemx -d @var{directory}
 @cindex @code{--directory}
@@ -1073,47 +1092,16 @@ batch mode or quiet mode.
 @itemx -n
 @cindex @code{--nx}
 @cindex @code{-n}
-Do not execute commands found in any initialization file.
-There are three init files, loaded in the following order:
-
-@table @code
-@item @file{system.gdbinit}
-This is the system-wide init file.
-Its location is specified with the @code{--with-system-gdbinit}
-configure option (@pxref{System-wide configuration}).
-It is loaded first when @value{GDBN} starts, before command line options
-have been processed.
-@item @file{system.gdbinit.d}
-This is the system-wide init directory.
-Its location is specified with the @code{--with-system-gdbinit-dir}
-configure option (@pxref{System-wide configuration}).
-Files in this directory are loaded in alphabetical order immediately after
-system.gdbinit (if enabled) when @value{GDBN} starts, before command line
-options have been processed.  Files need to have a recognized scripting
-language extension (@file{.py}/@file{.scm}) or be named with a @file{.gdb}
-extension to be interpreted as regular @value{GDBN} commands.  @value{GDBN}
-will not recurse into any subdirectories of this directory.
-@item @file{~/.gdbinit}
-This is the init file in your home directory.
-It is loaded next, after @file{system.gdbinit}, and before
-command options have been processed.
-@item @file{./.gdbinit}
-This is the init file in the current directory.
-It is loaded last, after command line options other than @code{-x} and
-@code{-ex} have been processed.  Command line options @code{-x} and
-@code{-ex} are processed last, after @file{./.gdbinit} has been loaded.
-@end table
-
-For further documentation on startup processing, @xref{Startup}.
-For documentation on how to write command files,
-@xref{Command Files,,Command Files}.
+Do not execute commands found in any initialization files
+(@pxref{Initialization Files}).
 
 @anchor{-nh}
 @item -nh
 @cindex @code{--nh}
-Do not execute commands found in @file{~/.gdbinit}, the init file
-in your home directory.
-@xref{Startup}.
+Do not execute commands found in any home directory initialization
+file (@pxref{Initialization Files,,Home directory initialization
+file}).  The system wide and current directory initialization files
+are still loaded.
 
 @item -quiet
 @itemx -silent
@@ -1124,6 +1112,14 @@ in your home directory.
 ``Quiet''.  Do not print the introductory and copyright messages.  These
 messages are also suppressed in batch mode.
 
+@kindex set startup-quietly
+@kindex show startup-quietly
+This can also be enabled using @code{set startup-quietly on}.  The
+default is @code{off}.  Use @code{show startup-quietly} to see the
+current setting.  Place @code{set startup-quietly on} into your early
+initialization file (@pxref{Initialization Files,,Initialization
+Files}) to have future @value{GDBN} sessions startup quietly.
+
 @item -batch
 @cindex @code{--batch}
 Run in batch mode.  Exit with status @code{0} after processing all the
@@ -1317,26 +1313,36 @@ important when reporting @value{GDBN} bu
 Here's the description of what @value{GDBN} does during session startup:
 
 @enumerate
+
+@item
+Performs minimal setup required to initialize basic internal state.
+
+@item
+@cindex early initialization file
+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 @ref{Initialization Files}, for
+details.
+
+@item
+Executes commands and command files specified by the @samp{-eiex} and
+@samp{-eix} command line options in their specified order.  Only a
+restricted set of commands can be used with @samp{-eiex} and
+@samp{eix}, see @ref{Initialization Files}, for details.
+
 @item
 Sets up the command interpreter as specified by the command line
 (@pxref{Mode Options, interpreter}).
 
 @item
 @cindex init file
-Reads the system-wide @dfn{init file} (if @option{--with-system-gdbinit} was
-used when building @value{GDBN}; @pxref{System-wide configuration,
- ,System-wide configuration and settings}) and the files in the system-wide
-gdbinit directory (if @option{--with-system-gdbinit-dir} was used) and executes
-all the commands in those files.  The files need to be named with a @file{.gdb}
-extension to be interpreted as @value{GDBN} commands, or they can be written
-in a supported scripting language with an appropriate file extension.
+Reads the system wide initialization file and the files from the
+system wide initialization directory, @pxref{System Wide Init Files}.
 
-@anchor{Home Directory Init File}
 @item
-Reads the init file (if any) in your home directory@footnote{On
-DOS/Windows systems, the home directory is the one pointed to by the
-@code{HOME} environment variable.} and executes all the commands in
-that file.
+Reads the initialization file (if any) in your home directory and
+executes all the commands in that file, @pxref{Home Directory Init
+File}.
 
 @anchor{Option -init-eval-command}
 @item
@@ -1349,16 +1355,16 @@ gets loaded.
 @item
 Processes command line options and operands.
 
-@anchor{Init File in the Current Directory during Startup}
 @item
-Reads and executes the commands from init file (if any) in the current
-working directory as long as @samp{set auto-load local-gdbinit} is set to
-@samp{on} (@pxref{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
-@value{GDBN}.
+Reads and executes the commands from the initialization file (if any)
+in the current working directory as long as @samp{set auto-load
+local-gdbinit} is set to @samp{on} (@pxref{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
+@value{GDBN}. @xref{Init File in the Current Directory during
+Startup}.
 
 @item
 If the command line specified a program to debug, or a process to
@@ -1387,26 +1393,184 @@ Reads the command history recorded in th
 files where @value{GDBN} records it.
 @end enumerate
 
-Init files use the same syntax as @dfn{command files} (@pxref{Command
-Files}) and are processed by @value{GDBN} in the same way.  The init
-file in your home directory can set options (such as @samp{set
-complaints}) that affect subsequent processing of command line options
-and operands.  Init files are not executed if you use the @samp{-nx}
-option (@pxref{Mode Options, ,Choosing Modes}).
+@node Initialization Files
+@subsection Initialization Files
+@cindex init file name
 
-To display the list of init files loaded by gdb at startup, you
-can use @kbd{gdb --help}.
+During startup (@pxref{Startup}) @value{GDBN} will execute commands
+from several initialization files.  These initialization files use the
+same syntax as @dfn{command files} (@pxref{Command Files}) and are
+processed by @value{GDBN} in the same way.
+
+To display the list of initialization files loaded by @value{GDBN} at
+startup, in the order they will be loaded, you can use @kbd{gdb
+--help}.
+
+@cindex early initialization
+The @dfn{early initialization} file is loaded very early in
+@value{GDBN}'s initialization process, before the interpreter
+(@pxref{Interpreters}) has been initialized, and before the default
+target (@pxref{Targets}) is initialized.  Only @code{set} or
+@code{source} commands should be placed into an early initialization
+file, and the only @code{set} commands that can be used are those that
+control how @value{GDBN} 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 @code{--early-init-command} or @code{-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 @code{--early-init-eval-command} or @code{-eiex}.
+
+@cindex general initialization
+In contrast, the @dfn{general initialization} files are processed
+later, after @value{GDBN} has finished its own internal initialization
+process, any valid command can be used in these files.
+
+@cindex initialization file
+Throughout the rest of this document the term @dfn{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.@: @samp{set complaints}) can affect subsequent processing of
+command line options and operands.
+
+The following sections describe where @value{GDBN} looks for the early
+initialization and initialization files, and the order that the files
+are searched for.
+
+@subsubsection Home directory early initialization files
+
+@value{GDBN} initially looks for an early initialization file in the
+users home directory@footnote{On DOS/Windows systems, the home
+directory is the one pointed to by the @env{HOME} environment
+variable.}.  There are a number of locations that @value{GDBN} will
+search in the home directory, these locations are searched in order
+and @value{GDBN} will load the first file that it finds, and
+subsequent locations will not be checked.
 
-@cindex init file name
+On non-macOS hosts the locations searched are:
+@itemize
+@item
+The file @file{gdb/gdbearlyinit} within the directory pointed to by the
+environment variable @env{XDG_CONFIG_HOME}, if it is defined.
+@item
+The file @file{.config/gdb/gdbearlyinit} within the directory pointed to
+by the environment variable @env{HOME}, if it is defined.
+@item
+The file @file{.gdbearlyinit} within the directory pointed to by the
+environment variable @env{HOME}, if it is defined.
+@end itemize
+
+By contrast, on macOS hosts the locations searched are:
+@itemize
+@item
+The file @file{Library/Preferences/gdb/gdbearlyinit} within the
+directory pointed to by the environment variable @env{HOME}, if it is
+defined.
+@item
+The file @file{.gdbearlyinit} within the directory pointed to by the
+environment variable @env{HOME}, if it is defined.
+@end itemize
+
+It is possible to prevent the home directory early initialization file
+from being loaded using the @samp{-nx} or @samp{-nh} command line
+options, @pxref{Mode Options,,Choosing Modes}.
+
+@anchor{System Wide Init Files}
+@subsubsection System wide initialization files
+
+There are two locations that are searched for system wide
+initialization files.  Both of these locations are always checked:
+
+@table @code
+
+@item @file{system.gdbinit}
+This is a single system-wide initialization file.  Its location is
+specified with the @code{--with-system-gdbinit} configure option
+(@pxref{System-wide configuration}).  It is loaded first when
+@value{GDBN} starts, before command line options have been processed.
+
+@item @file{system.gdbinit.d}
+This is the system-wide initialization directory.  Its location is
+specified with the @code{--with-system-gdbinit-dir} configure option
+(@pxref{System-wide configuration}).  Files in this directory are
+loaded in alphabetical order immediately after @file{system.gdbinit}
+(if enabled) when @value{GDBN} starts, before command line options
+have been processed.  Files need to have a recognized scripting
+language extension (@file{.py}/@file{.scm}) or be named with a
+@file{.gdb} extension to be interpreted as regular @value{GDBN}
+commands.  @value{GDBN} will not recurse into any subdirectories of
+this directory.
+
+@end table
+
+It is possible to prevent the system wide initialization files from
+being loaded using the @samp{-nx} command line option, @pxref{Mode
+Options,,Choosing Modes}.
+
+@anchor{Home Directory Init File}
+@subsubsection Home directory initialization file
+@cindex @file{gdbinit}
 @cindex @file{.gdbinit}
 @cindex @file{gdb.ini}
-The @value{GDBN} init files are normally called @file{.gdbinit}.
-The DJGPP port of @value{GDBN} uses the name @file{gdb.ini}, due to
-the limitations of file names imposed by DOS filesystems.  The Windows
-port of @value{GDBN} uses the standard name, but if it finds a
-@file{gdb.ini} file in your home directory, it warns you about that
-and suggests to rename the file to the standard name.
 
+After loading the system wide initialization files @value{GDBN} will
+look for an initialization file in the users home
+directory@footnote{On DOS/Windows systems, the home directory is the
+one pointed to by the @env{HOME} environment variable.}.  There are a
+number of locations that @value{GDBN} will search in the home
+directory, these locations are searched in order and @value{GDBN} will
+load the first file that it finds, and subsequent locations will not
+be checked.
+
+On non-Apple hosts the locations searched are:
+@table @file
+@item $XDG_CONFIG_HOME/gdb/gdbinit
+@item $HOME/.config/gdb/gdbinit
+@item $HOME/.gdbinit
+@end table
+
+While on Apple hosts the locations searched are:
+@table @file
+@item $HOME/Library/Preferences/gdb/gdbinit
+@item $HOME/.gdbinit
+@end table
+
+It is possible to prevent the home directory initialization file from
+being loaded using the @samp{-nx} or @samp{-nh} command line options,
+@pxref{Mode Options,,Choosing Modes}.
+
+The DJGPP port of @value{GDBN} uses the name @file{gdb.ini} instead of
+@file{.gdbinit} or @file{gdbinit}, due to the limitations of file
+names imposed by DOS filesystems.  The Windows port of @value{GDBN}
+uses the standard name, but if it finds a @file{gdb.ini} file in your
+home directory, it warns you about that and suggests to rename the
+file to the standard name.
+
+@anchor{Init File in the Current Directory during Startup}
+@subsubsection Local directory initialization file
+
+@value{GDBN} will check the current directory for a file called
+@file{.gdbinit}.  It is loaded last, after command line options
+other than @samp{-x} and @samp{-ex} have been processed.  The command
+line options @samp{-x} and @samp{-ex} are processed last, after
+@file{.gdbinit} has been loaded, @pxref{File Options,,Choosing
+Files}.
+
+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 @samp{-nx} command line option, @pxref{Mode
+Options,,Choosing Modes}.
 
 @node Quitting GDB
 @section Quitting @value{GDBN}
@@ -1451,9 +1615,10 @@ just use the @code{shell} command.
 @itemx !@var{command-string}
 Invoke a standard shell to execute @var{command-string}.
 Note that no space is needed between @code{!} and @var{command-string}.
-If it exists, the environment variable @code{SHELL} determines which
-shell to run.  Otherwise @value{GDBN} uses the default shell
-(@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.).
+On GNU and Unix systems, the environment variable @env{SHELL}, if it
+exists, determines which shell to run.  Otherwise @value{GDBN} uses
+the default shell (@file{/bin/sh} on GNU and Unix systems,
+@file{cmd.exe} on MS-Windows, @file{COMMAND.COM} on MS-DOS, etc.).
 @end table
 
 The utility @code{make} is often needed in development environments.
@@ -2016,7 +2181,7 @@ display a short list of named classes of
 (@value{GDBP}) 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
@@ -2041,8 +2206,11 @@ Command name abbreviations are allowed i
 
 @item help @var{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 @code{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 @code{status}:
 
 @smallexample
 (@value{GDBP}) help status
@@ -2052,9 +2220,14 @@ List of commands:
 
 @c Line break in "show" line falsifies real output, but needed
 @c to fit in smallbook page size.
-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
@@ -2065,7 +2238,11 @@ Command name abbreviations are allowed i
 
 @item help @var{command}
 With a command name as @code{help} argument, @value{GDBN} displays a
-short paragraph on how to use that command.
+short paragraph on how to use that command.  If that command has
+one or more aliases, @value{GDBN} 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.
 
 @kindex apropos
 @item apropos [-v] @var{regexp}
@@ -2086,10 +2263,7 @@ results in:
 @smallexample
 @group
 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
 @end group
 @end smallexample
 
@@ -2250,8 +2424,8 @@ kill a 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 @emph{bookmark} to return to later
@@ -2351,7 +2525,7 @@ is used to pass the arguments, so that y
 (such as wildcard expansion or variable substitution) in describing
 the arguments.
 In Unix systems, you can control which shell is used with the
-@code{SHELL} environment variable.  If you do not define @code{SHELL},
+@env{SHELL} environment variable.  If you do not define @env{SHELL},
 @value{GDBN} uses the default shell (@file{/bin/sh}).  You can disable
 use of any shell with the @code{set startup-with-shell} command (see
 below for details).
@@ -2497,7 +2671,7 @@ which indicates the shell or the wrapper
 caused by something odd in your shell's non-interactive mode
 initialization file---such as @file{.cshrc} for C-shell,
 $@file{.zshenv} for the Z shell, or the file specified in the
-@samp{BASH_ENV} environment variable for BASH.
+@env{BASH_ENV} environment variable for BASH.
 
 @anchor{set auto-connect-native-target}
 @kindex set auto-connect-native-target
@@ -2506,27 +2680,28 @@ initialization file---such as @file{.csh
 @itemx set auto-connect-native-target off
 @itemx show auto-connect-native-target
 
-By default, if not connected to any target yet (e.g., with
-@code{target remote}), the @code{run} command starts your program as a
-native process under @value{GDBN}, on your local machine.  If you're
-sure you don't want to debug programs on your local machine, you can
-tell @value{GDBN} to not connect to the native target automatically
-with the @code{set auto-connect-native-target off} command.
+By default, if the current inferior is not connected to any target yet
+(e.g., with @code{target remote}), the @code{run} command starts your
+program as a native process under @value{GDBN}, on your local machine.
+If you're sure you don't want to debug programs on your local machine,
+you can tell @value{GDBN} to not connect to the native target
+automatically with the @code{set auto-connect-native-target off}
+command.
 
-If @code{on}, which is the default, and if @value{GDBN} is not
+If @code{on}, which is the default, and if the current inferior is not
 connected to a target already, the @code{run} command automaticaly
 connects to the native target, if one is available.
 
-If @code{off}, and if @value{GDBN} is not connected to a target
-already, the @code{run} command fails with an error:
+If @code{off}, and if the current inferior is not connected to a
+target already, the @code{run} command fails with an error:
 
 @smallexample
 (@value{GDBP}) run
 Don't know how to run.  Try "help target".
 @end smallexample
 
-If @value{GDBN} is already connected to a target, @value{GDBN} always
-uses it with the @code{run} command.
+If the current inferior is already connected to a target, @value{GDBN}
+always uses it with the @code{run} command.
 
 In any case, you can explicitly connect to the native target with the
 @code{target native} command.  For example,
@@ -2611,8 +2786,8 @@ The arguments to your program can be spe
 @code{run} command.
 They are passed to a shell, which expands wildcard characters and
 performs redirection of I/O, and thence to your program.  Your
-@code{SHELL} environment variable (if it exists) specifies what shell
-@value{GDBN} uses.  If you do not define @code{SHELL}, @value{GDBN} uses
+@env{SHELL} environment variable (if it exists) specifies what shell
+@value{GDBN} uses.  If you do not define @env{SHELL}, @value{GDBN} uses
 the default shell (@file{/bin/sh} on Unix).
 
 On non-Unix systems, the program is usually invoked directly by
@@ -2652,9 +2827,9 @@ environment without having to start @val
 @table @code
 @kindex path
 @item path @var{directory}
-Add @var{directory} to the front of the @code{PATH} environment variable
+Add @var{directory} to the front of the @env{PATH} environment variable
 (the search path for executables) that will be passed to your program.
-The value of @code{PATH} used by @value{GDBN} does not change.
+The value of @env{PATH} used by @value{GDBN} does not change.
 You may specify several directory names, separated by whitespace or by a
 system-dependent separator character (@samp{:} on Unix, @samp{;} on
 MS-DOS and MS-Windows).  If @var{directory} is already in the path, it
@@ -2671,7 +2846,7 @@ use @samp{.} instead, it refers to the d
 
 @kindex show paths
 @item show paths
-Display the list of search paths for executables (the @code{PATH}
+Display the list of search paths for executables (the @env{PATH}
 environment variable).
 
 @kindex show environment
@@ -2729,11 +2904,11 @@ Environment variables that are unset by
 @end table
 
 @emph{Warning:} On Unix systems, @value{GDBN} runs your program using
-the shell indicated by your @code{SHELL} environment variable if it
-exists (or @code{/bin/sh} if not).  If your @code{SHELL} variable
+the shell indicated by your @env{SHELL} environment variable if it
+exists (or @code{/bin/sh} if not).  If your @env{SHELL} variable
 names a shell that runs an initialization file when started
 non-interactively---such as @file{.cshrc} for C-shell, $@file{.zshenv}
-for the Z shell, or the file specified in the @samp{BASH_ENV}
+for the Z shell, or the file specified in the @env{BASH_ENV}
 environment variable for BASH---any variables you set in that file
 affect your program.  You may wish to move setting of environment
 variables to files that are only run when you sign on, such as
@@ -2904,6 +3079,32 @@ the program is not found) by using the s
 the @code{file} command to load the program.  @xref{Files, ,Commands to
 Specify Files}.
 
+@anchor{set exec-file-mismatch}
+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 @value{GDBN}, the option @code{exec-file-mismatch} specifies how to
+handle the mismatch.  @value{GDBN} tries to compare the files by
+comparing their build IDs (@pxref{build ID}), if available.
+
+@table @code
+@kindex exec-file-mismatch
+@cindex set exec-file-mismatch
+@item set exec-file-mismatch @samp{ask|warn|off}
+
+Whether to detect mismatch between the current executable file loaded
+by @value{GDBN} and the executable file used to start the process.  If
+@samp{ask}, the default, display a warning and ask the user whether to
+load the process executable file; if @samp{warn}, just display a
+warning; if @samp{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.
+
+@cindex show exec-file-mismatch
+@item show exec-file-mismatch
+Show the current value of @code{exec-file-mismatch}.
+
+@end table
+
 The first thing @value{GDBN} does after arranging to debug the specified
 process is to stop it.  You can examine and modify an attached process
 with all the @value{GDBN} commands that are ordinarily available when
@@ -2956,15 +3157,17 @@ next type @code{run}, @value{GDBN} notic
 reads the symbol table again (while trying to preserve your current
 breakpoint settings).
 
-@node Inferiors and Programs
-@section Debugging Multiple Inferiors and Programs
+@node Inferiors Connections and Programs
+@section Debugging Multiple Inferiors Connections and Programs
 
 @value{GDBN} lets you run and debug multiple programs in a single
 session.  In addition, @value{GDBN} 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.
+before starting another).  On some systems @value{GDBN} 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.
 
 @cindex inferior
 @value{GDBN} represents the state of each program execution with an
@@ -2999,6 +3202,11 @@ the inferior number assigned by @value{G
 the target system's inferior identifier
 
 @item
+the target connection the inferior is bound to, including the unique
+connection number assigned by @value{GDBN}, and the protocol used by
+the connection.
+
+@item
 the name of the executable the inferior is running.
 
 @end enumerate
@@ -3013,9 +3221,67 @@ For example,
 
 @smallexample
 (@value{GDBP}) 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
+@end smallexample
+
+To get informations about the current inferior, use @code{inferior}:
+
+@table @code
+@kindex inferior
+@item inferior
+Shows information about the current inferior.
+
+For example,
+@end table
+@c end table here to get a little more width for example
+
+@smallexample
+(@value{GDBP}) inferior
+[Current inferior is 1 [process 3401] (helloworld)]
+@end smallexample
+
+To find out what open target connections exist at any moment, use
+@w{@code{info connections}}:
+
+@table @code
+@kindex info connections [ @var{id}@dots{} ]
+@item info connections
+Print a list of all open target connections currently being managed by
+@value{GDBN}.  By default all connections are printed, but the
+argument @var{id}@dots{} -- a space separated list of connections
+numbers -- can be used to limit the display to just the requested
+connections.
+
+@value{GDBN} displays for each connection (in this order):
+
+@enumerate
+@item
+the connection number assigned by @value{GDBN}.
+
+@item
+the protocol used by the connection.
+
+@item
+a textual description of the protocol used by the connection.
+
+@end enumerate
+
+@noindent
+An asterisk @samp{*} preceding the connection number indicates the
+connection of the current inferior.
+
+For example,
+@end table
+@c end table here to get a little more width for example
+
+@smallexample
+(@value{GDBP}) 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
 @end smallexample
 
 To switch focus between inferiors, use the @code{inferior} command:
@@ -3044,13 +3310,22 @@ remove inferiors from the debugging sess
 
 @table @code
 @kindex add-inferior
-@item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ]
+@item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ] [-no-connection ]
 Adds @var{n} inferiors to be run using @var{executable} as the
 executable; @var{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
 @code{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 @code{gdbserver} with @code{target remote},
+then the new inferior will be connected to the same @code{gdbserver}
+instance.  The @samp{-no-connection} option starts the new inferior
+with no connection yet.  You can then for example use the @code{target
+remote} command to connect to some other @code{gdbserver} instance,
+use @code{run} to spawn a local program, etc.
+
 @kindex clone-inferior
 @item clone-inferior [ -copies @var{n} ] [ @var{infno} ]
 Adds @var{n} inferiors ready to execute the same program as inferior
@@ -3060,15 +3335,15 @@ want to run another instance of the infe
 
 @smallexample
 (@value{GDBP}) info inferiors
-  Num  Description       Executable
-* 1    process 29964     helloworld
+  Num  Description       Connection   Executable
+* 1    process 29964     1 (native)   helloworld
 (@value{GDBP}) clone-inferior
 Added inferior 2.
 1 inferiors added.
 (@value{GDBP}) 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
 @end smallexample
 
 You can now simply switch focus to inferior 2 and run it.
@@ -3389,7 +3664,7 @@ For example,
 
 @smallexample
 (@value{GDBP}) 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 ()
@@ -3514,7 +3789,7 @@ is, using:
 @end smallexample
 
 The @code{tfaas} command accepts the same options as the @code{frame
-apply} command.  @xref{frame apply}.
+apply} command.  @xref{Frame Apply,,frame apply}.
 
 @kindex thread name
 @cindex name a thread
@@ -3721,14 +3996,14 @@ If you choose to set @samp{detach-on-for
 will retain control of all forked processes (including nested forks).
 You can list the forked processes under the control of @value{GDBN} by
 using the @w{@code{info inferiors}} command, and switch from one fork
-to another by using the @code{inferior} command (@pxref{Inferiors and
-Programs, ,Debugging Multiple Inferiors and Programs}).
+to another by using the @code{inferior} command (@pxref{Inferiors Connections and
+Programs, ,Debugging Multiple Inferiors Connections and Programs}).
 
 To quit debugging one of the forked processes, you can either detach
 from it by using the @w{@code{detach inferiors}} command (allowing it
 to run independently), or kill it using the @w{@code{kill inferiors}}
-command.  @xref{Inferiors and Programs, ,Debugging Multiple Inferiors
-and Programs}.
+command.  @xref{Inferiors Connections and Programs, ,Debugging
+Multiple Inferiors Connections and Programs}.
 
 If you ask to debug a child process and a @code{vfork} is followed by an
 @code{exec}, @value{GDBN} executes the new target up to the first
@@ -4095,6 +4370,70 @@ value is nonzero---that is, if @var{cond
 above (or no argument) specifying where to break.  @xref{Conditions,
 ,Break Conditions}, for more information on breakpoint conditions.
 
+The breakpoint may be mapped to multiple locations.  If the breakpoint
+condition @var{cond} is invalid at some but not all of the locations,
+the locations for which the condition is invalid are disabled.  For
+example, @value{GDBN} reports below that two of the three locations
+are disabled.
+
+@smallexample
+(@value{GDBP}) 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)
+@end smallexample
+
+Locations that are disabled because of the condition are denoted by an
+uppercase @code{N} in the output of the @code{info breakpoints}
+command:
+
+@smallexample
+(@value{GDBP}) 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.
+@end smallexample
+
+If the breakpoint condition @var{cond} is invalid in the context of
+@emph{all} the locations of the breakpoint, @value{GDBN} refuses to
+define the breakpoint.  For example, if variable @code{foo} is an
+undefined variable:
+
+@smallexample
+(@value{GDBP}) break func if foo
+No symbol "foo" in current context.
+@end smallexample
+
+@item break @dots{} -force-condition if @var{cond}
+There may be cases where the condition @var{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 @code{-force-condition} keyword before @samp{if},
+@value{GDBN} can be forced to define the breakpoint with the given
+condition expression instead of refusing it.
+
+@smallexample
+(@value{GDBP}) 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)
+@end smallexample
+
+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
+@code{-force-condition} keyword has no effect.
+
 @kindex tbreak
 @item tbreak @var{args}
 Set a breakpoint enabled only for one stop.  The @var{args} are the
@@ -5280,6 +5619,12 @@ not actually evaluate @var{expression} a
 command (or a command that sets a breakpoint with a condition, like
 @code{break if @dots{}}) is given, however.  @xref{Expressions, ,Expressions}.
 
+@item condition -force @var{bnum} @var{expression}
+When the @code{-force} flag is used, define the condition even if
+@var{expression} is invalid at all the current locations of breakpoint
+@var{bnum}.  This is similar to the @code{-force-condition} option
+of the @code{break} command.
+
 @item condition @var{bnum}
 Remove the condition from breakpoint number @var{bnum}.  It becomes
 an ordinary unconditional breakpoint.
@@ -7581,15 +7926,14 @@ instruction-history} command.
 @kindex record function-call-history
 @kindex rec function-call-history
 @item 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 @code{/l} modifier is
-specified), and the instructions numbers that form the sequence (if
-the @code{/i} modifier is specified).  The function names are indented
-to reflect the call stack depth if the @code{/c} modifier is
-specified.  The @code{/l}, @code{/i}, and @code{/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
+@code{/l} modifier is specified), and the instructions numbers that form
+the sequence (if the @code{/i} modifier is specified).  The function names
+are indented to reflect the call stack depth if the @code{/c} modifier is
+specified.  The @code{/l}, @code{/i}, and @code{/c} modifiers can be given
+together.
 
 @smallexample
 (@value{GDBP}) @b{list 1, 10}
@@ -7609,7 +7953,7 @@ given together.
 3  bar     inst 11,13   at foo.c:9,10
 @end smallexample
 
-By default, ten lines are printed.  This can be changed using the
+By default, ten functions are printed.  This can be changed using the
 @code{set record function-call-history-size} command.  Functions are
 printed in execution order.  There are several ways to specify what
 to print:
@@ -7625,10 +7969,10 @@ function number @var{func}.  If @var{n}
 prints @var{n} functions before function number @var{func}.
 
 @item record function-call-history
-Prints ten more functions after the last ten-line print.
+Prints ten more functions after the last ten-function print.
 
 @item record function-call-history -
-Prints ten more functions before the last ten-line print.
+Prints ten more functions before the last ten-function print.
 
 @item record function-call-history @var{begin}, @var{end}
 Prints functions beginning with function number @var{begin} until
@@ -7639,12 +7983,12 @@ This command may not be available for al
 
 @item set record function-call-history-size @var{size}
 @itemx set record function-call-history-size unlimited
-Define how many lines to print in the
+Define how many functions to print in the
 @code{record function-call-history} command.  The default value is 10.
-A size of @code{unlimited} means unlimited lines.
+A size of @code{unlimited} means unlimited functions.
 
 @item show record function-call-history-size
-Show how many lines to print in the
+Show how many functions to print in the
 @code{record function-call-history} command.
 @end table
 
@@ -8272,7 +8616,6 @@ tfaas i lo -q -t lock_something_t
 
 @node Frame Apply
 @section Applying a Command to Several Frames.
-@anchor{frame apply}
 @kindex frame apply
 @cindex apply command to several frames
 @table @code
@@ -8404,7 +8747,7 @@ is, using:
 @end smallexample
 
 The @code{faas} command accepts the same options as the @code{frame
-apply} command.  @xref{frame apply}.
+apply} command.  @xref{Frame Apply,,frame apply}.
 
 Note that the command @code{tfaas @var{command}} applies @var{command}
 on all frames of all threads.  See @xref{Threads,,Threads}.
@@ -8672,18 +9015,18 @@ As described in the preceding table.
 @cindex location
 @cindex source location
 
-@menu
-* Linespec Locations::                Linespec locations
-* Explicit Locations::                Explicit locations
-* Address Locations::                 Address locations
-@end menu
-
 Several @value{GDBN} commands accept arguments that specify a location
 of your program's code.  Since @value{GDBN} 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.
 
+@menu
+* Linespec Locations::                Linespec locations
+* Explicit Locations::                Explicit locations
+* Address Locations::                 Address locations
+@end menu
+
 @node Linespec Locations
 @subsection Linespec Locations
 @cindex linespec locations
@@ -8923,7 +9266,7 @@ ex +@var{number} file
 The optional numeric value +@var{number} specifies the number of the line in
 the file where to start editing.}.
 By default, it is @file{@value{EDITOR}}, but you can change this
-by setting the environment variable @code{EDITOR} before using
+by setting the environment variable @env{EDITOR} before using
 @value{GDBN}.  For example, to configure @value{GDBN} to use the
 @code{vi} editor, you could use these commands with the @code{sh} shell:
 @smallexample
@@ -9070,7 +9413,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.
+absolute paths start with a drive letter (e.g.@:
 @file{C:/project/foo.c}), @value{GDBN} will remove the drive letter
 from the file name before appending it to a search directory from
 @dfn{source path}; for instance if the executable references the
@@ -9535,8 +9878,8 @@ The default value is the empty string.
 
 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.
+Currently this command is only supported on targets ARC, ARM, MIPS,
+PowerPC and S/390.
 
 @kindex show disassembler-options
 @item show disassembler-options
@@ -9715,6 +10058,10 @@ If you omit @var{expr}, @value{GDBN} dis
 conveniently inspect the same value in an alternative format.
 @end table
 
+If the architecture supports memory tagging, the @code{print} command will
+display pointer/memory tag mismatches if what is being printed is a pointer
+or reference type. @xref{Memory Tagging}.
+
 A more low-level way of examining data is with the @code{x} command.
 It examines data in memory at a specified address and prints it in a
 specified format.  @xref{Memory, ,Examining Memory}.
@@ -9878,6 +10225,7 @@ being passed the type of @var{arg} as th
 * 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
@@ -10482,7 +10830,8 @@ number is specified, memory is examined
 @item @var{f}, the display format
 The display format is one of the formats used by @code{print}
 (@samp{x}, @samp{d}, @samp{u}, @samp{o}, @samp{t}, @samp{a}, @samp{c},
-@samp{f}, @samp{s}), and in addition @samp{i} (for machine instructions).
+@samp{f}, @samp{s}), @samp{i} (for machine instructions) and
+@samp{m} (for displaying memory tags).
 The default is @samp{x} (hexadecimal) initially.  The default changes
 each time you use either @code{x} or @code{print}.
 
@@ -10577,6 +10926,22 @@ counter is shown with a @code{=>} marker
    0x804838c <main+24>: call   0x80482d4 <puts@@plt>
 @end smallexample
 
+If the architecture supports memory tagging, the tags can be displayed by
+using @samp{m}.  @xref{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 @value{GDBN} prints information with the @code{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 @code{x} command, it
+will be displayed on the next line.
+
+The @samp{m} format doesn't affect any other specified formats that were
+passed to the @code{x} command.
+
 @cindex @code{$_}, @code{$__}, and value history
 The addresses and contents printed by the @code{x} command are not saved
 in the value history because there is often too much of them and they
@@ -10628,6 +10993,67 @@ target supports computing the CRC checks
 (@pxref{qCRC packet}).
 @end table
 
+@node Memory Tagging
+@section Memory Tagging
+
+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,  @value{GDBN} can make use of it to validate pointers
+against memory allocation tags.
+
+The @code{print} (@pxref{Data}) and @code{x} (@pxref{Memory}) commands will
+display tag information when appropriate, and a command prefix of
+@code{memory-tag} gives access to the various memory tagging commands.
+
+The @code{memory-tag} commands are the following:
+
+@table @code
+@kindex memory-tag print-logical-tag
+@item memory-tag print-logical-tag @var{pointer_expression}
+Print the logical tag stored in @var{pointer_expression}.
+@kindex memory-tag with-logical-tag
+@item memory-tag with-logical-tag @var{pointer_expression} @var{tag_bytes}
+Print the pointer given by @var{pointer_expression}, augmented with a logical
+tag of @var{tag_bytes}.
+@kindex memory-tag print-allocation-tag
+@item memory-tag print-allocation-tag @var{address_expression}
+Print the allocation tag associated with the memory address given by
+@var{address_expression}.
+@kindex memory-tag setatag
+@item memory-tag setatag @var{starting_address} @var{length} @var{tag_bytes}
+Set the allocation tag(s) for memory range @r{[}@var{starting_address},
+@var{starting_address} + @var{length}@r{)} to @var{tag_bytes}.
+@kindex memory-tag check
+@item memory-tag check @var{pointer_expression}
+Check if the logical tag in the pointer given by @var{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.
+@end table
+
 @node Auto Display
 @section Automatic Display
 @cindex automatic display
@@ -11231,6 +11657,20 @@ language, for most languages @code{@{...
 Display the current threshold after which nested structures are
 replaces with ellipsis.
 
+@anchor{set print memory-tag-violations}
+@cindex printing memory tag violation information
+@item set print memory-tag-violations
+@itemx set print memory-tag-violations on
+Cause @value{GDBN} to display additional information about memory tag violations
+when printing pointers and addresses.
+
+@item set print memory-tag-violations off
+Stop printing memory tag violation information.
+
+@item show print memory-tag-violations
+Show whether memory tag violation information is displayed when printing
+pointers and addresses.
+
 @anchor{set print null-stop}
 @item set print null-stop
 @cindex @sc{null} elements in arrays
@@ -11911,8 +12351,8 @@ gdbserver that supports the @code{qGetTI
 This variable contains the address of the thread information block.
 
 @item $_inferior
-The number of the current inferior.  @xref{Inferiors and
-Programs, ,Debugging Multiple Inferiors and Programs}.
+The number of the current inferior.  @xref{Inferiors Connections and
+Programs, ,Debugging Multiple Inferiors Connections and Programs}.
 
 @item $_thread
 The thread number of the current thread.  @xref{thread numbers}.
@@ -12258,6 +12698,7 @@ and vector registers (in the selected st
 Print the names and values of all registers, including floating-point
 and vector registers (in the selected stack frame).
 
+@anchor{info_registers_reggroup}
 @item info registers @var{reggroup} @dots{}
 Print the name and value of the registers in each of the specified
 @var{reggroup}s.  The @var{reggroup} can be any of those returned by
@@ -13108,7 +13549,7 @@ character.
 
 @value{GDBN} caches data exchanged between the debugger and a target.
 Each cache is associated with the address space of the inferior.
-@xref{Inferiors and Programs}, about inferior and address space.
+@xref{Inferiors Connections and Programs}, about inferior and address space.
 Such caching generally improves performance in remote debugging
 (@pxref{Remote Debugging}), because it reduces the overhead of the
 remote protocol by bundling memory reads and writes into large chunks.
@@ -13189,6 +13630,12 @@ Show maximum number of dcache entries.
 @kindex show dcache line-size
 Show default size of dcache lines.
 
+@item maint flush dcache
+@cindex dcache, flushing
+@kindex maint flush dcache
+Flush the contents (if any) of the dcache.  This maintainer command is
+useful when debugging the dcache implementation.
+
 @end table
 
 @node Searching Memory
@@ -15865,7 +16312,7 @@ expression may still be impossible for o
 memory that the process does not own (a typical example from many Unix
 systems).
 
-@item show range
+@item show check range
 Show the current setting of the range checker, and whether or not it is
 being set automatically by @value{GDBN}.
 @end table
@@ -16736,6 +17183,29 @@ This command prints the values contained
 block whose name is @var{common-name}.  With no argument, the names of
 all @code{COMMON} blocks visible at the current program location are
 printed.
+@cindex arrays slices (Fortran)
+@kindex set fortran repack-array-slices
+@kindex show fortran repack-array-slices
+@item set fortran repack-array-slices [on|off]
+@item 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 @value{GDBN} will also repack array
+slices in some situations.  When this setting is off, then
+@value{GDBN} will create array descriptors for slices that reference
+the original data in place.
+
+@value{GDBN} will never repack an array slice if the data for the
+slice is contiguous within the original array.
+
+@value{GDBN} will always repack string slices if the data for the
+slice is non-contiguous within the original string as @value{GDBN}
+does not support printing non-contiguous strings.
+
+The default for this setting is @code{off}.
 @end table
 
 @node Pascal
@@ -18137,6 +18607,34 @@ using the Ravenscar Profile.
 
 @end table
 
+@cindex Ravenscar thread
+When Ravenscar task-switching is enabled, Ravenscar tasks are
+announced by @value{GDBN} as if they were threads:
+
+@smallexample
+(gdb) continue
+[New Ravenscar Thread 0x2b8f0]
+@end smallexample
+
+Both Ravenscar tasks and the underlying CPU threads will show up in
+the output of @code{info threads}:
+
+@smallexample
+(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 ()
+@end smallexample
+
+One known limitation of the Ravenscar support in @value{GDBN} 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 @code{set ravenscar task-switching off}.
+
 @node Ada Settings
 @subsubsection Ada Settings
 @cindex Ada settings
@@ -18386,6 +18884,21 @@ types.
 This command shows the current setting of typedef display when
 printing classes.
 
+@kindex set print type hex
+@item set print type hex
+@itemx set print type hex on
+@itemx set print type hex off
+
+When @value{GDBN} 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 @code{ptype}, or by using
+the @command{set print type hex} command.
+
+@kindex show print type hex
+@item show print type hex
+This command shows whether the sizes and offsets of struct members are
+printed in decimal or hexadecimal notation.
+
 @kindex info address
 @cindex address of a symbol
 @item info address @var{symbol}
@@ -18498,6 +19011,14 @@ exists in case you change the default wi
 Print the offsets and sizes of fields in a struct, similar to what the
 @command{pahole} tool does.  This option implies the @code{/tm} flags.
 
+@item x
+Use hexadecimal notation when printing offsets and sizes of fields in a
+struct.
+
+@item d
+Use decimal notation when printing offsets and sizes of fields in a
+struct.
+
 For example, given the following declarations:
 
 @smallexample
@@ -18538,14 +19059,14 @@ Issuing a @kbd{ptype /o struct tuv} comm
 
 @smallexample
 (@value{GDBP}) 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 */
+                             @}
 @end smallexample
 
 Notice the format of the first column of comments.  There, you can
@@ -18560,34 +19081,34 @@ It is also possible to print offsets ins
 
 @smallexample
 (@value{GDBP}) 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 */
+                               @} fff2;
 
-                           /* total size (bytes):   40 */
-                         @}
+                               /* total size (bytes):   40 */
+                             @}
 @end smallexample
 
 In this case, since @code{struct tuv} and @code{struct xyz} occupy the
@@ -18600,20 +19121,20 @@ bitfields:
 
 @smallexample
 (@value{GDBP}) 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 */
+                             @}
 @end smallexample
 
 Note how the offset information is now extended to also include the
@@ -18813,20 +19334,36 @@ preprocessor macros.
 
 
 @kindex info sources
-@item 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.
-
-@item info sources [-dirname | -basename] [--] [@var{regexp}]
-Like @samp{info sources}, but only print the names of the files
-matching the provided @var{regexp}.
-By default, the @var{regexp} is used to match anywhere in the filename.
-If @code{-dirname}, only files having a dirname matching @var{regexp} are shown.
-If  @code{-basename}, only files having a basename matching @var{regexp}
-are shown.
-The matching is case-sensitive, except on operating systems that
-have case-insensitive filesystem (e.g., MS-Windows).
+@item info sources @r{[}-dirname | -basename@r{]} @r{[}--@r{]} @r{[}@var{regexp}@r{]}
+
+
+With no options @samp{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 @value{GDBN}.  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 @var{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). @samp{--} can be used before
+@var{regexp} to prevent @value{GDBN} interpreting @var{regexp} as a
+command option (e.g. if @var{regexp} starts with @samp{-}).
+
+By default, the @var{regexp} is used to match anywhere in the
+filename.  If @code{-dirname}, only files having a dirname matching
+@var{regexp} are shown.  If @code{-basename}, only files having a
+basename matching @var{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 @var{regexp}, or, the object file was compiled without debug
+information and so @value{GDBN} is unable to find any source file
+names.
 
 @kindex info functions
 @item info functions [-q] [-n]
@@ -19147,12 +19684,16 @@ This is useful when debugging symbol cac
 Print symbol cache usage statistics.
 This helps determine how well the cache is being utilized.
 
+@kindex maint flush symbol-cache
 @kindex maint flush-symbol-cache
 @cindex symbol cache, flushing
-@item 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.
+@item maint flush symbol-cache
+@itemx 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.  The command @code{maint
+flush-symbol-cache} is deprecated in favor of @code{maint flush
+symbol-cache}..
 
 @end table
 
@@ -20001,15 +20542,15 @@ will print to the console.
 
 @value{GDBN} needs to find @value{NGCC} for the inferior being debugged
 which may not be obvious for remote targets of different architecture
-than where @value{GDBN} is running.  Environment variable @code{PATH} on
+than where @value{GDBN} is running.  Environment variable @env{PATH} on
 @value{GDBN} host is searched for @value{NGCC} binary matching the
 target architecture and operating system.  This search can be overriden
-by @code{set compile-gcc} @value{GDBN} command below.  @code{PATH} is
+by @code{set compile-gcc} @value{GDBN} command below.  @env{PATH} is
 taken from shell that executed @value{GDBN}, it is not the value set by
 @value{GDBN} command @code{set environment}).  @xref{Environment}.
 
 
-Specifically @code{PATH} is searched for binaries matching regular expression
+Specifically @env{PATH} is searched for binaries matching regular expression
 @code{@var{arch}(-[^-]*)?-@var{os}-gcc} according to the inferior target being
 debugged.  @var{arch} is processor name --- multiarch is supported, so for
 example both @code{i386} and @code{x86_64} targets look for pattern
@@ -20020,7 +20561,7 @@ pattern @code{linux(-gnu)?}.
 On Posix hosts the compiler driver @value{GDBN} needs to find also
 shared library @file{libcc1.so} from the compiler.  It is searched in
 default shared library search path (overridable with usual environment
-variable @code{LD_LIBRARY_PATH}), unrelated to @code{PATH} or @code{set
+variable @env{LD_LIBRARY_PATH}), unrelated to @env{PATH} or @code{set
 compile-gcc} settings.  Contrary to it @file{libcc1plugin.so} is found
 according to the installation of the found compiler --- as possibly
 specified by the @code{set compile-gcc} command.
@@ -20083,7 +20624,7 @@ Use @var{filename} as the program to be
 symbols and for the contents of pure memory.  It is also the program
 executed when you use the @code{run} command.  If you do not specify a
 directory and the file is not found in the @value{GDBN} working directory,
-@value{GDBN} uses the environment variable @code{PATH} as a list of
+@value{GDBN} uses the environment variable @env{PATH} as a list of
 directories to search, just as the shell does when looking for a program
 to run.  You can change the value of this variable, for both @value{GDBN}
 and your program, using the @code{path} command.
@@ -20106,13 +20647,13 @@ has on both executable file and the symb
 @kindex exec-file
 @item exec-file @r{[} @var{filename} @r{]}
 Specify that the program to be run (but not the symbol table) is found
-in @var{filename}.  @value{GDBN} searches the environment variable @code{PATH}
+in @var{filename}.  @value{GDBN} searches the environment variable @env{PATH}
 if necessary to locate your program.  Omitting @var{filename} means to
 discard information on the executable file.
 
 @kindex symbol-file
 @item symbol-file @r{[} @var{filename} @r{[} -o @var{offset} @r{]]}
-Read symbol table information from file @var{filename}.  @code{PATH} is
+Read symbol table information from file @var{filename}.  @env{PATH} is
 searched when necessary.  Use the @code{file} command to get both symbol
 table and program to run from the same file.
 
@@ -20277,7 +20818,7 @@ that lies within the boundaries of this
 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)
@@ -20321,22 +20862,25 @@ command @code{help target} lists all pos
 current ones.
 
 @kindex maint info sections
-@item maint info sections
+@item maint info sections @r{[}-all-objects@r{]} @r{[}@var{filter-list}@r{]}
 Another command that can give you extra information about program sections
 is @code{maint info sections}.  In addition to the section information
 displayed by @code{info files}, this command displays the flags and file
-offset of each section in the executable and core dump files.  In addition,
-@code{maint info sections} provides the following command options (which
-may be arbitrarily combined):
+offset of each section in the executable and core dump files.
+
+When @samp{-all-objects} is passed then sections from all loaded object
+files, including shared libraries, are printed.
+
+The optional @var{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:
 
 @table @code
-@item ALLOBJ
-Display sections for all loaded object files, including shared libraries.
-@item @var{sections}
-Display info only for named @var{sections}.
-@item @var{section-flags}
-Display info only for sections for which @var{section-flags} are true.
-The section flags that @value{GDBN} currently knows about are:
+@item @var{section-name}
+Display information about any section named @var{section-name}.
+@item @var{section-flag}
+Display information for any section with @var{section-flag}.  The
+section flags that @value{GDBN} currently knows about are:
 @table @code
 @item ALLOC
 Section will have space allocated in the process when loaded.
@@ -20367,6 +20911,14 @@ COFF shared library information.
 Section contains common symbols.
 @end table
 @end table
+
+@kindex maint info target-sections
+@item maint info target-sections
+This command prints @value{GDBN}'s internal section table.  For each
+target @value{GDBN} maintains a table containing the allocatable
+sections from all currently mapped objects, along with information
+about where the section is mapped.
+
 @kindex set trust-readonly-sections
 @cindex read-only sections
 @item set trust-readonly-sections on
@@ -20485,7 +21037,7 @@ when any of shared library events happen
 to use @code{catch load} and @code{catch unload} (@pxref{Set
 Catchpoints}).
 
-@value{GDBN} also supports the the @code{set stop-on-solib-events}
+@value{GDBN} also supports the @code{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.
@@ -20552,8 +21104,8 @@ to specify a local system root using a d
 named @file{target:} or @file{remote:}, you need to use some
 equivalent variant of the name like @file{./target:}.
 
-For targets with an MS-DOS based filesystem, such as MS-Windows and
-SymbianOS, @value{GDBN} tries prefixing a few variants of the target
+For targets with an MS-DOS based filesystem, such as MS-Windows,
+@value{GDBN} tries prefixing a few variants of the target
 absolute file name with @var{path}.  But first, on Unix hosts,
 @value{GDBN} converts all backslash directory separators into forward
 slashes, because the backslash is not a directory separator on Unix:
@@ -20788,6 +21340,7 @@ checksum for the debug file, which @valu
 the executable and the debug file came from the same build.
 
 @item
+@anchor{build ID}
 The executable contains a @dfn{build ID}, a unique bit string that is
 also present in the corresponding debug info file.  (This is supported
 only on some operating systems, when using the ELF or PE file formats
@@ -21199,9 +21752,7 @@ Instead you must do, for example,
 $ gdb -iex "set use-deprecated-index-sections on" <program>
 @end smallexample
 
-There are currently some limitation on indices.  They only work when
-using DWARF debugging information, not stabs.  And, only the
-@code{-dwarf-5} index works for programs using Ada.
+Indices only work when using DWARF debugging information, not stabs.
 
 @subsection Automatic symbol index cache
 
@@ -21780,6 +22331,12 @@ established.  If you are using @code{gdb
 @code{gdbserver} using the @option{--attach} option
 (@pxref{Running gdbserver}).
 
+Some remote targets allow @value{GDBN} to determine the executable file running
+in the process the debugger is attaching to.  In such a case, @value{GDBN}
+uses the value of @code{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 @value{GDBN} (@pxref{set exec-file-mismatch}).
+
 @end table
 
 @anchor{Host and target files}
@@ -21863,19 +22420,19 @@ This feature is not available if the hos
 Unix domain sockets.
 
 @item target remote @code{@var{host}:@var{port}}
-@itemx target remote @code{@var{[host]}:@var{port}}
+@itemx target remote @code{[@var{host}]:@var{port}}
 @itemx target remote @code{tcp:@var{host}:@var{port}}
-@itemx target remote @code{tcp:@var{[host]}:@var{port}}
+@itemx target remote @code{tcp:[@var{host}]:@var{port}}
 @itemx target remote @code{tcp4:@var{host}:@var{port}}
 @itemx target remote @code{tcp6:@var{host}:@var{port}}
-@itemx target remote @code{tcp6:@var{[host]}:@var{port}}
+@itemx target remote @code{tcp6:[@var{host}]:@var{port}}
 @itemx target extended-remote @code{@var{host}:@var{port}}
-@itemx target extended-remote @code{@var{[host]}:@var{port}}
+@itemx target extended-remote @code{[@var{host}]:@var{port}}
 @itemx target extended-remote @code{tcp:@var{host}:@var{port}}
-@itemx target extended-remote @code{tcp:@var{[host]}:@var{port}}
+@itemx target extended-remote @code{tcp:[@var{host}]:@var{port}}
 @itemx target extended-remote @code{tcp4:@var{host}:@var{port}}
 @itemx target extended-remote @code{tcp6:@var{host}:@var{port}}
-@itemx target extended-remote @code{tcp6:@var{[host]}:@var{port}}
+@itemx target extended-remote @code{tcp6:[@var{host}]:@var{port}}
 @cindex @acronym{TCP} port, @code{target remote}
 Debug using a @acronym{TCP} connection to @var{port} on @var{host}.
 The @var{host} may be either a host name, a numeric @acronym{IPv4}
@@ -21927,15 +22484,15 @@ target remote :1234
 Note that the colon is still required here.
 
 @item target remote @code{udp:@var{host}:@var{port}}
-@itemx target remote @code{udp:@var{[host]}:@var{port}}
+@itemx target remote @code{udp:[@var{host}]:@var{port}}
 @itemx target remote @code{udp4:@var{host}:@var{port}}
-@itemx target remote @code{udp6:@var{[host]}:@var{port}}
+@itemx target remote @code{udp6:[@var{host}]:@var{port}}
 @itemx target extended-remote @code{udp:@var{host}:@var{port}}
 @itemx target extended-remote @code{udp:@var{host}:@var{port}}
-@itemx target extended-remote @code{udp:@var{[host]}:@var{port}}
+@itemx target extended-remote @code{udp:[@var{host}]:@var{port}}
 @itemx target extended-remote @code{udp4:@var{host}:@var{port}}
 @itemx target extended-remote @code{udp6:@var{host}:@var{port}}
-@itemx target extended-remote @code{udp6:@var{[host]}:@var{port}}
+@itemx target extended-remote @code{udp6:[@var{host}]:@var{port}}
 @cindex @acronym{UDP} port, @code{target remote}
 Debug using @acronym{UDP} packets to @var{port} on @var{host}.  For example, to
 connect to @acronym{UDP} port 2828 on a terminal server named @code{manyfarms}:
@@ -22599,7 +23156,7 @@ is high level of serial line for some ce
 Linux kernel prefers @samp{BREAK-g}, a.k.a Magic SysRq g.
 It is @code{BREAK} signal followed by character @code{g}.
 
-@item show interrupt-sequence
+@item show remote interrupt-sequence
 Show which of @samp{Ctrl-C}, @code{BREAK} or @code{BREAK-g}
 is sent by @value{GDBN} to interrupt the remote program.
 @code{BREAK-g} is BREAK signal followed by @code{g} and
@@ -22612,7 +23169,7 @@ Specify whether interrupt-sequence is se
 Linux kernel.  Linux kernel expects @code{BREAK} followed by @code{g}
 which is known as Magic SysRq g in order to connect @value{GDBN}.
 
-@item show interrupt-on-connect
+@item show remote interrupt-on-connect
 Show whether interrupt-sequence is sent
 to remote target when @value{GDBN} connects to it.
 
@@ -23318,8 +23875,8 @@ used to examine the image of a running p
 subroutines.  This facility is supported on @sc{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
@@ -23349,17 +23906,17 @@ a process ID rather than a thread ID).
 @item info proc cmdline
 @cindex info proc cmdline
 Show the original command line of the process.  This command is
-supported on @sc{gnu}/Linux and FreeBSD.
+supported on @sc{gnu}/Linux, FreeBSD and NetBSD.
 
 @item info proc cwd
 @cindex info proc cwd
 Show the current working directory of the process.  This command is
-supported on @sc{gnu}/Linux and FreeBSD.
+supported on @sc{gnu}/Linux, FreeBSD and NetBSD.
 
 @item info proc exe
 @cindex info proc exe
 Show the name of executable of the process.  This command is supported
-on @sc{gnu}/Linux and FreeBSD.
+on @sc{gnu}/Linux, FreeBSD and NetBSD.
 
 @item info proc files
 @cindex info proc files
@@ -23394,9 +23951,9 @@ Open files:
 @item info proc mappings
 @cindex memory address space 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 @sc{gnu}/Linux and FreeBSD systems, each memory 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 @sc{gnu}/Linux, FreeBSD and NetBSD systems, each memory range
 includes the object file which is mapped to that range.
 
 @item info proc stat
@@ -23406,13 +23963,13 @@ Show additional process-related informat
 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 @samp{nice} value; etc.  These commands are supported
-on @sc{gnu}/Linux and FreeBSD.
+on @sc{gnu}/Linux, FreeBSD and NetBSD.
 
 For @sc{gnu}/Linux systems, see the @samp{proc} man page for more
 information (type @kbd{man 5 proc} from your shell prompt).
 
-For FreeBSD systems, @code{info proc stat} is an alias for @code{info
-proc status}.
+For FreeBSD and NetBSD systems, @code{info proc stat} is an alias for
+@code{info proc status}.
 
 @item info proc all
 Show all the information about the process described under all of the
@@ -24197,6 +24754,7 @@ acceptable commands.
 @menu
 * ARC::                         Synopsys ARC
 * ARM::                         ARM
+* BPF::                         eBPF
 * M68K::                        Motorola M68K
 * MicroBlaze::			Xilinx MicroBlaze
 * MIPS Embedded::               MIPS Embedded
@@ -24331,6 +24889,22 @@ The default value is @code{all}.
 @end table
 @end table
 
+@node BPF
+@subsection BPF
+
+@table @code
+@item target sim @r{[}@var{simargs}@r{]} @dots{}
+The @value{GDBN} BPF simulator accepts the following optional arguments.
+
+@table @code
+@item --skb-data-offset=@var{offset}
+Tell the simulator the offset, measured in bytes, of the
+@code{skb_data} field in the kernel @code{struct sk_buff} structure.
+This offset is used by some BPF specific-purpose load/store
+instructions.  Defaults to 0.
+@end table
+@end table
+
 @node M68K
 @subsection M68k
 
@@ -24450,8 +25024,8 @@ Show whether OpenRISC-specific debugging
 implement in hardware simple hardware watchpoint conditions of the form:
 
 @smallexample
-(@value{GDBP}) watch @var{ADDRESS|VARIABLE} \
-  if  @var{ADDRESS|VARIABLE} == @var{CONSTANT EXPRESSION}
+(@value{GDBP}) watch @var{address|variable} \
+  if  @var{address|variable} == @var{constant expression}
 @end smallexample
 
 The DVC register will be automatically used when @value{GDBN} detects
@@ -24662,6 +25236,42 @@ When GDB prints a backtrace, any address
 postfixed with the marker [PAC].  When using the MI, this is printed as part
 of the @code{addr_flags} field.
 
+@subsubsection AArch64 Memory Tagging Extension.
+@cindex AArch64 Memory Tagging Extension.
+
+When @value{GDBN} 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, @value{GDBN} will make memory tagging functionality
+available for inspection and editing of logical and allocation tags.
+@xref{Memory Tagging}.
+
+To aid debugging, @value{GDBN} 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:
+
+@smallexample
+Program received signal SIGSEGV, Segmentation fault
+Memory tag violation while accessing address 0x0500fffff7ff8000
+Allocation tag 0x1
+Logical tag 0x5.
+@end smallexample
+
+If the tag violation is asynchronous, the fault address is not available.
+In this case @value{GDBN} will show the following:
+
+@smallexample
+Program received signal SIGSEGV, Segmentation fault
+Memory tag violation
+Fault address unavailable.
+@end smallexample
+
+A special register, @code{tag_ctl}, is made available through the
+@code{org.gnu.gdb.aarch64.mte} feature.  This register exposes some
+options that can be controlled at runtime and emulates the @code{prctl}
+option @code{PR_SET_TAGGED_ADDR_CTRL}.  For further information, see the
+documentation in the Linux kernel.
+
 @node i386
 @subsection x86 Architecture-specific Issues
 
@@ -25217,25 +25827,39 @@ history.
 @cindex history file
 @kindex set history filename
 @cindex @env{GDBHISTFILE}, environment variable
-@item set history filename @var{fname}
+@item set history filename @r{[}@var{fname}@r{]}
 Set the name of the @value{GDBN} command history file to @var{fname}.
 This is the file where @value{GDBN} 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 @code{GDBHISTFILE}, or to
+to the value of the environment variable @env{GDBHISTFILE}, or to
 @file{./.gdb_history} (@file{./_gdb_history} on MS-DOS) if this variable
 is not set.
 
+The @env{GDBHISTFILE} environment variable is read after processing
+any @value{GDBN} initialization files (@pxref{Startup}) and after
+processing any commands passed using command line options (for
+example, @code{-ex}).
+
+If the @var{fname} argument is not given, or if the @env{GDBHISTFILE}
+is the empty string then @value{GDBN} will neither try to load an
+existing history file, nor will it try to save the history on exit.
+
 @cindex save command history
 @kindex set history save
 @item set history save
 @itemx set history save on
 Record command history in a file, whose name may be specified with the
-@code{set history filename} command.  By default, this option is disabled.
+@code{set history filename} command.  By default, this option is
+disabled.  The command history will be recorded when @value{GDBN}
+exits.  If @code{set history filename} is set to the empty string then
+history saving is disabled, even when @code{set history save} is
+@code{on}.
 
 @item set history save off
-Stop recording command history in a file.
+Don't record the command history into the file specified by @code{set
+history filename} when @value{GDBN} exits.
 
 @cindex history size
 @kindex set history size
@@ -25249,6 +25873,11 @@ are ignored.  If @var{size} is @code{unl
 either a negative number or the empty string, then the number of commands
 @value{GDBN} keeps in the history list is unlimited.
 
+The @env{GDBHISTSIZE} environment variable is read after processing
+any @value{GDBN} initialization files (@pxref{Startup}) and after
+processing any commands passed using command line options (for
+example, @code{-ex}).
+
 @cindex remove duplicate history
 @kindex set history remove-duplicates
 @item set history remove-duplicates @var{count}
@@ -25341,7 +25970,7 @@ following line.
 
 Normally @value{GDBN} knows the size of the screen from the terminal
 driver software.  For example, on Unix @value{GDBN} uses the termcap data base
-together with the value of the @code{TERM} environment variable and the
+together with the value of the @env{TERM} environment variable and the
 @code{stty rows} and @code{stty cols} settings.  If this is not correct,
 you can override it with the @code{set height} and @code{set
 width} commands:
@@ -25404,10 +26033,16 @@ Show the current state of styling.
 
 @item set style sources @samp{on|off}
 Enable or disable source code styling.  This affects whether source
-code, such as the output of the @code{list} command, is styled.  Note
-that source styling only works if styling in general is enabled, and
-if @value{GDBN} was linked with the GNU Source Highlight library.  The
-default is @samp{on}.
+code, such as the output of the @code{list} command, is styled.  The
+default is @samp{on}.  Note that source styling only works if styling
+in general is enabled, and if a source highlighting library is
+available to @value{GDBN}.
+
+There are two ways that highlighting can be done.  First, if
+@value{GDBN} was linked with the GNU Source Highlight library, then it
+is used.  Otherwise, if @value{GDBN} was configured with Python
+scripting support, and if the Python Pygments package is available,
+then it will be used.
 
 @item show style sources
 Show the current state of source code styling.
@@ -25465,6 +26100,17 @@ Control the styling of addresses.  These
 @code{set style address} family of commands.  By default, this style's
 foreground color is blue.
 
+@item version
+Control the styling of @value{GDBN}'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 @command{show version}, and when @value{GDBN} starts up.
+
+In order to control how @value{GDBN} styles the version number at
+startup, add the @code{set style version} family of commands to the
+early initialization command file (@pxref{Initialization
+Files}).
+
 @item title
 Control the styling of titles.  These are managed with the
 @code{set style title} family of commands.  By default, this style's
@@ -25659,14 +26305,6 @@ without being explicitly told so by the
 results or introduce security risks (e.g., if the file comes from untrusted
 sources).
 
-@menu
-* Init File in the Current Directory:: @samp{set/show/info auto-load local-gdbinit}
-* libthread_db.so.1 file::             @samp{set/show/info auto-load libthread-db}
-
-* Auto-loading safe path::             @samp{set/show/info auto-load safe-path}
-* Auto-loading verbose mode::          @samp{set/show debug auto-load}
-@end menu
-
 There are various kinds of files @value{GDBN} can automatically load.
 In addition to these files, @value{GDBN} supports auto-loading code written
 in various extension languages.  @xref{Auto-loading extensions}.
@@ -25788,6 +26426,14 @@ These are @value{GDBN} control commands
 @tab Add directory trusted for automatic loading.
 @end multitable
 
+@menu
+* Init File in the Current Directory:: @samp{set/show/info auto-load local-gdbinit}
+* libthread_db.so.1 file::             @samp{set/show/info auto-load libthread-db}
+
+* Auto-loading safe path::             @samp{set/show/info auto-load safe-path}
+* Auto-loading verbose mode::          @samp{set/show debug auto-load}
+@end menu
+
 @node Init File in the Current Directory
 @subsection Automatically loading init file in the current directory
 @cindex auto-loading init file in the current directory
@@ -25872,7 +26518,7 @@ get loaded:
 
 @smallexample
 $ ./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".
@@ -26136,6 +26782,7 @@ asynchronous command finishes its execut
 @item show exec-done-display
 Displays the current setting of asynchronous command completion
 notification.
+
 @kindex set debug
 @cindex ARM AArch64
 @item set debug aarch64
@@ -26145,24 +26792,28 @@ The default is off.
 @item show debug aarch64
 Displays the current state of displaying debugging messages related to
 ARM AArch64.
+
 @cindex gdbarch debugging info
 @cindex architecture debugging info
 @item set debug arch
 Turns on or off display of gdbarch debugging info.  The default is off
 @item show debug arch
 Displays the current state of displaying gdbarch debugging info.
+
 @item set debug aix-solib
 @cindex AIX shared library debugging
 Control display of debugging messages from the AIX shared library
 support module.  The default is off.
-@item show debug aix-thread
+@item show debug aix-solib
 Show the current state of displaying AIX shared library debugging messages.
+
 @item set debug aix-thread
 @cindex AIX threads
 Display debugging messages about inner workings of the AIX thread
 module.
 @item show debug aix-thread
 Show the current state of AIX thread debugging info display.
+
 @item set debug check-physname
 @cindex physname
 Check the results of the ``physname'' computation.  When reading DWARF
@@ -26173,6 +26824,7 @@ When enabled, this setting causes @value
 both ways and display any discrepancies.
 @item show debug check-physname
 Show the current state of ``physname'' checking.
+
 @item set debug coff-pe-read
 @cindex COFF/PE exported symbols
 Control display of debugging messages related to reading of COFF/PE
@@ -26180,6 +26832,7 @@ exported symbols.  The default is off.
 @item show debug coff-pe-read
 Displays the current state of displaying debugging messages related to
 reading of COFF/PE exported symbols.
+
 @item set debug dwarf-die
 @cindex DWARF DIEs
 Dump DWARF DIEs after they are read in.
@@ -26187,6 +26840,7 @@ The value is the number of nesting level
 A value of zero turns off the display.
 @item show debug dwarf-die
 Show the current state of DWARF DIE debugging.
+
 @item set debug dwarf-line
 @cindex DWARF Line Tables
 Turns on or off display of debugging messages related to reading
@@ -26195,6 +26849,7 @@ A value of 1 provides basic information.
 A value greater than 1 provides more verbose information.
 @item show debug dwarf-line
 Show the current state of DWARF line table debugging.
+
 @item set debug dwarf-read
 @cindex DWARF Reading
 Turns on or off display of debugging messages related to reading
@@ -26203,6 +26858,7 @@ A value of 1 provides basic information.
 A value greater than 1 provides more verbose information.
 @item show debug dwarf-read
 Show the current state of DWARF reader debugging.
+
 @item set debug displaced
 @cindex displaced stepping debugging info
 Turns on or off display of @value{GDBN} debugging info for the
@@ -26210,6 +26866,7 @@ displaced stepping support.  The default
 @item show debug displaced
 Displays the current state of displaying @value{GDBN} debugging info
 related to displaced stepping.
+
 @item set debug event
 @cindex event debugging info
 Turns on or off display of @value{GDBN} event debugging info.  The
@@ -26217,6 +26874,17 @@ default is off.
 @item show debug event
 Displays the current state of displaying @value{GDBN} event debugging
 info.
+
+@item set debug event-loop
+@cindex event-loop debugging
+Controls output of debugging info about the event loop.  The possible
+values are @samp{off}, @samp{all} (shows all debugging info) and
+@samp{all-except-ui} (shows all debugging info except those about
+UI-related events).
+@item show debug event-loop
+Shows the current state of displaying debugging info about the event
+loop.
+
 @item set debug expression
 @cindex expression debugging info
 Turns on or off display of debugging info about @value{GDBN}
@@ -26224,16 +26892,28 @@ expression parsing.  The default is off.
 @item show debug expression
 Displays the current state of displaying debugging info about
 @value{GDBN} expression parsing.
+
 @item set debug fbsd-lwp
 @cindex FreeBSD LWP debug messages
 Turns on or off debugging messages from the FreeBSD LWP debug support.
 @item show debug fbsd-lwp
 Show the current state of FreeBSD LWP debugging messages.
+
 @item set debug fbsd-nat
 @cindex FreeBSD native target debug messages
 Turns on or off debugging messages from the FreeBSD native target.
 @item show debug fbsd-nat
 Show the current state of FreeBSD native target debugging messages.
+
+@item set debug fortran-array-slicing
+@cindex fortran array slicing debugging info
+Turns on or off display of @value{GDBN} Fortran array slicing
+debugging info.  The default is off.
+
+@item show debug fortran-array-slicing
+Displays the current state of displaying @value{GDBN} Fortran array
+slicing debugging info.
+
 @item set debug frame
 @cindex frame debugging info
 Turns on or off display of @value{GDBN} frame debugging info.  The
@@ -26241,11 +26921,13 @@ default is off.
 @item show debug frame
 Displays the current state of displaying @value{GDBN} frame debugging
 info.
+
 @item set debug gnu-nat
 @cindex @sc{gnu}/Hurd debug messages
 Turn on or off debugging messages from the @sc{gnu}/Hurd debug support.
 @item show debug gnu-nat
 Show the current state of @sc{gnu}/Hurd debugging messages.
+
 @item set debug infrun
 @cindex inferior debugging info
 Turns on or off display of @value{GDBN} debugging info for running the inferior.
@@ -26253,22 +26935,26 @@ The default is off.  @file{infrun.c} con
 for implementing operations such as single-stepping the inferior.
 @item show debug infrun
 Displays the current state of @value{GDBN} inferior debugging.
+
 @item set debug jit
 @cindex just-in-time compilation, debugging messages
 Turn on or off debugging messages from JIT debug support.
 @item show debug jit
 Displays the current state of @value{GDBN} JIT debugging.
+
 @item set debug lin-lwp
 @cindex @sc{gnu}/Linux LWP debug messages
 @cindex Linux lightweight processes
 Turn on or off debugging messages from the Linux LWP debug support.
 @item show debug lin-lwp
 Show the current state of Linux LWP debugging messages.
+
 @item set debug linux-namespaces
 @cindex @sc{gnu}/Linux namespaces debug messages
 Turn on or off debugging messages from the Linux namespaces debug support.
 @item show debug linux-namespaces
 Show the current state of Linux namespaces debugging messages.
+
 @item set debug mach-o
 @cindex Mach-O symbols processing
 Control display of debugging messages related to Mach-O symbols
@@ -26276,18 +26962,21 @@ processing.  The default is off.
 @item show debug mach-o
 Displays the current state of displaying debugging messages related to
 reading of COFF/PE exported symbols.
+
 @item set debug notification
 @cindex remote async notification debugging info
 Turn on or off debugging messages about remote async notification.
 The default is off.
 @item show debug notification
 Displays the current state of remote async notification debugging messages.
+
 @item set debug observer
 @cindex observer debugging info
 Turns on or off display of @value{GDBN} observer debugging.  This
 includes info such as the notification of observable events.
 @item show debug observer
 Displays the current state of observer debugging.
+
 @item set debug overload
 @cindex C@t{++} overload debugging info
 Turns on or off display of @value{GDBN} C@t{++} overload debugging
@@ -26296,6 +26985,7 @@ is off.
 @item show debug overload
 Displays the current state of displaying @value{GDBN} C@t{++} overload
 debugging info.
+
 @cindex expression parser, debugging info
 @cindex debug expression parser
 @item set debug parser
@@ -26305,6 +26995,7 @@ parser.  @xref{Tracing, , Tracing Your P
 details.  The default is off.
 @item show debug parser
 Show the current state of expression parser debugging.
+
 @cindex packets, reporting on stdout
 @cindex serial connections, debugging
 @cindex debug remote protocol
@@ -26341,12 +27032,14 @@ default is off.
 @item show debug serial
 Displays the current state of displaying @value{GDBN} serial debugging
 info.
+
 @item set debug solib-frv
 @cindex FR-V shared-library debugging
 Turn on or off debugging messages for FR-V shared-library code.
 @item show debug solib-frv
 Display the current state of FR-V shared-library code debugging
 messages.
+
 @item set debug symbol-lookup
 @cindex symbol lookup
 Turns on or off display of debugging messages related to symbol lookup.
@@ -26355,12 +27048,14 @@ A value of 1 provides basic information.
 A value greater than 1 provides more verbose information.
 @item show debug symbol-lookup
 Show the current state of symbol lookup debugging messages.
+
 @item set debug symfile
 @cindex symbol file functions
 Turns on or off display of debugging messages related to symbol file functions.
 The default is off.  @xref{Files}.
 @item show debug symfile
 Show the current state of symbol file debugging messages.
+
 @item set debug symtab-create
 @cindex symbol table creation
 Turns on or off display of debugging messages related to symbol table creation.
@@ -26369,6 +27064,7 @@ A value of 1 provides basic information.
 A value greater than 1 provides more verbose information.
 @item show debug symtab-create
 Show the current state of symbol table creation debugging.
+
 @item set debug target
 @cindex target debugging info
 Turns on or off display of @value{GDBN} target debugging info. This info
@@ -26378,6 +27074,7 @@ value of large memory transfers.
 @item show debug target
 Displays the current state of displaying @value{GDBN} target debugging
 info.
+
 @item set debug timestamp
 @cindex timestamping debugging info
 Turns on or off display of timestamps with @value{GDBN} debugging info.
@@ -26386,6 +27083,7 @@ message.
 @item show debug timestamp
 Displays the current state of displaying timestamps with @value{GDBN}
 debugging info.
+
 @item set debug varobj
 @cindex variable object debugging info
 Turns on or off display of @value{GDBN} variable object debugging
@@ -26393,6 +27091,7 @@ info. The default is off.
 @item show debug varobj
 Displays the current state of displaying @value{GDBN} variable object
 debugging info.
+
 @item set debug xml
 @cindex XML parser debugging
 Turn on or off debugging messages for built-in XML parsers.
@@ -26436,15 +27135,6 @@ extensions when it reads a file for debu
 user to automatically customize @value{GDBN} for the program
 being debugged.
 
-@menu
-* Sequences::                Canned Sequences of @value{GDBN} Commands
-* Python::                   Extending @value{GDBN} using Python
-* Guile::                    Extending @value{GDBN} using Guile
-* Auto-loading extensions::  Automatically loading extensions
-* Multiple Extension Languages:: Working with multiple extension languages
-* Aliases::                  Creating new spellings of existing commands
-@end menu
-
 To facilitate the use of extension languages, @value{GDBN} is capable
 of evaluating the contents of a file.  When doing so, @value{GDBN}
 can recognize which extension language is being used by looking at
@@ -26484,6 +27174,15 @@ or have a @file{.gdb} extension to be in
 commands.  @xref{Startup}.
 @end ifset
 
+@menu
+* Sequences::                Canned Sequences of @value{GDBN} Commands
+* Aliases::                  Command Aliases
+* Python::                   Extending @value{GDBN} using Python
+* Guile::                    Extending @value{GDBN} using Guile
+* Auto-loading extensions::  Automatically loading extensions
+* Multiple Extension Languages:: Working with multiple extension languages
+@end menu
+
 @node Sequences
 @section Canned Sequences of Commands
 
@@ -27075,6 +27774,196 @@ auto-loaded.
 If @var{regexp} is supplied only canned sequences of commands scripts with
 matching names are printed.
 
+@node Aliases
+@section Command Aliases
+@cindex aliases for commands
+
+Aliases allow you to define alternate spellings for existing commands.
+For example, if a new @value{GDBN} command defined in Python
+(@pxref{Python}) has a long name, it is handy to have an abbreviated
+version of it that involves less typing.
+
+@value{GDBN} itself uses aliases.  For example @samp{s} is an alias
+of the @samp{step} command even though it is otherwise an ambiguous
+abbreviation of other commands like @samp{set} and @samp{show}.
+
+Aliases are also used to provide shortened or more common versions
+of multi-word commands.  For example, @value{GDBN} provides the
+@samp{tty} alias of the @samp{set inferior-tty} command.
+
+You can define a new alias with the @samp{alias} command.
+
+@table @code
+
+@kindex alias
+@item alias [-a] [--] @var{alias} = @var{command} [@var{default-args}]
+
+@end table
+
+@var{alias} specifies the name of the new alias.  Each word of
+@var{alias} must consist of letters, numbers, dashes and underscores.
+
+@var{command} specifies the name of an existing command
+that is being aliased.
+
+@var{command} can also be the name of an existing alias.  In this
+case, @var{command} cannot be an alias that has default arguments.
+
+The @samp{-a} option specifies that the new alias is an abbreviation
+of the command.  Abbreviations are not used in command completion.
+
+The @samp{--} option specifies the end of options,
+and is useful when @var{alias} begins with a dash.
+
+You can specify @var{default-args} for your alias.  These
+@var{default-args} will be automatically added before the alias
+arguments typed explicitly on the command line.
+
+For example, the below defines an alias @code{btfullall} that shows all local
+variables and all frame arguments:
+@smallexample
+(@value{GDBP}) alias btfullall = backtrace -full -frame-arguments all
+@end smallexample
+
+For more information about @var{default-args}, see @ref{Command
+aliases default args, ,Default Arguments}.
+
+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 @samp{disas}, the current shortest unambiguous abbreviation of
+the @samp{disassemble} command and you wanted an even shorter version
+named @samp{di}.  The following will accomplish this.
+
+@smallexample
+(gdb) alias -a di = disas
+@end smallexample
+
+Note that aliases are different from user-defined commands.  With a
+user-defined command, you also need to write documentation for it with
+the @samp{document} command.  An alias automatically picks up the
+documentation of the existing command.
+
+Here is an example where we make @samp{elms} an abbreviation of
+@samp{elements} in the @samp{set print elements} command.
+This is to show that you can make an abbreviation of any part
+of a command.
+
+@smallexample
+(gdb) alias -a set print elms = set print elements
+(gdb) alias -a show print elms = show print elements
+(gdb) set p elms 20
+(gdb) show p elms
+Limit on string chars or array elements to print is 200.
+@end smallexample
+
+Note that if you are defining an alias of a @samp{set} command,
+and you want to have an alias for the corresponding @samp{show}
+command, then you need to define the latter separately.
+
+Unambiguously abbreviated commands are allowed in @var{command} and
+@var{alias}, just as they are normally.
+
+@smallexample
+(gdb) alias -a set pr elms = set p ele
+@end smallexample
+
+Finally, here is an example showing the creation of a one word
+alias for a more complex command.
+This creates alias @samp{spe} of the command @samp{set print elements}.
+
+@smallexample
+(gdb) alias spe = set print elements
+(gdb) spe 20
+@end smallexample
+
+@menu
+* Command aliases default args::	Default arguments for aliases
+@end menu
+
+@node Command aliases default args
+@subsection Default Arguments
+@cindex aliases for commands, default arguments
+
+You can tell @value{GDBN} 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 @value{GDBN} to
+automatically prepend these arguments or options to the list of
+arguments you type explicitly when using the alias@footnote{@value{GDBN}
+could easily accept default arguments for pre-defined commands and aliases,
+but it was deemed this would be confusing, and so is not allowed.}.
+
+For example, if you often use the command @code{thread apply all}
+specifying to work on the threads in ascending order and to continue in case it
+encounters an error, you can tell @value{GDBN} to automatically preprend
+the @code{-ascending} and @code{-c} options by using:
+
+@smallexample
+(@value{GDBP}) alias thread apply asc-all = thread apply all -ascending -c
+@end smallexample
+
+Once you have defined this alias with its default args, any time you type
+the @code{thread apply asc-all} followed by @code{some arguments},
+@value{GDBN} will execute  @code{thread apply all -ascending -c some arguments}.
+
+To have even less to type, you can also define a one word alias:
+@smallexample
+(@value{GDBP}) alias t_a_c = thread apply all -ascending -c
+@end smallexample
+
+As usual, unambiguous abbreviations can be used for @var{alias}
+and @var{default-args}.
+
+The different aliases of a command do not share their default args.
+For example, you define a new alias @code{bt_ALL} showing all possible
+information and another alias @code{bt_SMALL} showing very limited information
+using:
+@smallexample
+(@value{GDBP}) alias bt_ALL = backtrace -entry-values both -frame-arg all \
+   -past-main -past-entry -full
+(@value{GDBP}) alias bt_SMALL = backtrace -entry-values no -frame-arg none \
+   -past-main off -past-entry off
+@end smallexample
+
+(For more on using the @code{alias} command, see @ref{Aliases}.)
+
+Default args are not limited to the arguments and options of @var{command},
+but can specify nested commands if @var{command} accepts such a nested command
+as argument.
+For example, the below defines @code{faalocalsoftype} that lists the
+frames having locals of a certain type, together with the matching
+local vars:
+@smallexample
+(@value{GDBP}) alias faalocalsoftype = frame apply all info locals -q -t
+(@value{GDBP}) faalocalsoftype int
+#1  0x55554f5e in sleeper_or_burner (v=0xdf50) at sleepers.c:86
+i = 0
+ret = 21845
+@end smallexample
+
+This is also very useful to define an alias for a set of nested @code{with}
+commands to have a particular combination of temporary settings.  For example,
+the below defines the alias @code{pp10} that pretty prints an expression
+argument, with a maximum of 10 elements if the expression is a string or
+an array:
+@smallexample
+(@value{GDBP}) alias pp10 = with print pretty -- with print elements 10 -- print
+@end smallexample
+This defines the alias  @code{pp10} as being a sequence of 3 commands.
+The first part @code{with print pretty --} temporarily activates the setting
+@code{set print pretty}, then launches the command that follows the separator
+@code{--}.
+The command following the first part is also a @code{with} command that
+temporarily changes the setting @code{set print elements} to 10, then
+launches the command that follows the second separator @code{--}.
+The third part @code{print} is the command the @code{pp10} alias will launch,
+using the temporary values of the settings and the arguments explicitly given
+by the user.
+For more information about the @code{with} command usage,
+see @ref{Command Settings}.
+
 @c Python docs live in a separate file.
 @include python.texi
 
@@ -27085,17 +27974,15 @@ matching names are printed.
 @section Auto-loading extensions
 @cindex auto-loading extensions
 
-@value{GDBN} provides two mechanisms for automatically loading extensions
-when a new object file is read (for example, due to the @code{file}
-command, or because the inferior has loaded a shared library):
-@file{@var{objfile}-gdb.@var{ext}} and the @code{.debug_gdb_scripts}
-section of modern file formats like ELF.
-
-@menu
-* objfile-gdb.ext file: objfile-gdbdotext file.  The @file{@var{objfile}-gdb.@var{ext}} file
-* .debug_gdb_scripts section: dotdebug_gdb_scripts section.  The @code{.debug_gdb_scripts} section
-* Which flavor to choose?::
-@end menu
+@value{GDBN} provides two mechanisms for automatically loading
+extensions when a new object file is read (for example, due to the
+@code{file} command, or because the inferior has loaded a shared
+library): @file{@var{objfile}-gdb.@var{ext}} (@pxref{objfile-gdbdotext
+file,,The @file{@var{objfile}-gdb.@var{ext}} file}) and the
+@code{.debug_gdb_scripts} section of modern file formats like ELF
+(@pxref{dotdebug_gdb_scripts section,,The @code{.debug_gdb_scripts}
+section}).  For a discussion of the differences between these two
+approaches see @ref{Which flavor to choose?}.
 
 The auto-loading feature is useful for supplying application-specific
 debugging commands and features.
@@ -27110,6 +27997,12 @@ For Python files see @ref{Python Auto-lo
 Note that loading of this script file also requires accordingly configured
 @code{auto-load safe-path} (@pxref{Auto-loading safe path}).
 
+@menu
+* objfile-gdbdotext file::		The @file{@var{objfile}-gdb.@var{ext}} file
+* dotdebug_gdb_scripts section::	The @code{.debug_gdb_scripts} section
+* Which flavor to choose?::		Choosing between these approaches
+@end menu
+
 @node objfile-gdbdotext file
 @subsection The @file{@var{objfile}-gdb.@var{ext}} file
 @cindex @file{@var{objfile}-gdb.gdb}
@@ -27138,6 +28031,10 @@ script in the specified extension langua
 
 If this file does not exist, then @value{GDBN} will look for
 @var{script-name} file in all of the directories as specified below.
+(On MS-Windows/MS-DOS, the drive letter of the executable's leading
+directories is converted to a one-letter subdirectory, i.e.@:
+@file{d:/usr/bin/} is converted to @file{/d/usr/bin/}, because Windows
+filesystems disallow colons in file names.)
 
 Note that loading of these files requires an accordingly configured
 @code{auto-load safe-path} (@pxref{Auto-loading safe path}).
@@ -27370,95 +28267,6 @@ This extends to errors while performing
 while, for example, trying to pretty-print an object then the error is
 reported and any following extension languages are not tried.
 
-@node Aliases
-@section Creating new spellings of existing commands
-@cindex aliases for commands
-
-It is often useful to define alternate spellings of existing commands.
-For example, if a new @value{GDBN} command defined in Python has
-a long name to type, it is handy to have an abbreviated version of it
-that involves less typing.
-
-@value{GDBN} itself uses aliases.  For example @samp{s} is an alias
-of the @samp{step} command even though it is otherwise an ambiguous
-abbreviation of other commands like @samp{set} and @samp{show}.
-
-Aliases are also used to provide shortened or more common versions
-of multi-word commands.  For example, @value{GDBN} provides the
-@samp{tty} alias of the @samp{set inferior-tty} command.
-
-You can define a new alias with the @samp{alias} command.
-
-@table @code
-
-@kindex alias
-@item alias [-a] [--] @var{ALIAS} = @var{COMMAND}
-
-@end table
-
-@var{ALIAS} specifies the name of the new alias.
-Each word of @var{ALIAS} must consist of letters, numbers, dashes and
-underscores.
-
-@var{COMMAND} specifies the name of an existing command
-that is being aliased.
-
-The @samp{-a} option specifies that the new alias is an abbreviation
-of the command.  Abbreviations are not shown in command
-lists displayed by the @samp{help} command.
-
-The @samp{--} option specifies the end of options,
-and is useful when @var{ALIAS} begins with a dash.
-
-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 @samp{disas}, the current
-shortest unambiguous abbreviation of the @samp{disassemble} command
-and you wanted an even shorter version named @samp{di}.
-The following will accomplish this.
-
-@smallexample
-(gdb) alias -a di = disas
-@end smallexample
-
-Note that aliases are different from user-defined commands.
-With a user-defined command, you also need to write documentation
-for it with the @samp{document} command.
-An alias automatically picks up the documentation of the existing command.
-
-Here is an example where we make @samp{elms} an abbreviation of
-@samp{elements} in the @samp{set print elements} command.
-This is to show that you can make an abbreviation of any part
-of a command.
-
-@smallexample
-(gdb) alias -a set print elms = set print elements
-(gdb) alias -a show print elms = show print elements
-(gdb) set p elms 20
-(gdb) show p elms
-Limit on string chars or array elements to print is 200.
-@end smallexample
-
-Note that if you are defining an alias of a @samp{set} command,
-and you want to have an alias for the corresponding @samp{show}
-command, then you need to define the latter separately.
-
-Unambiguously abbreviated commands are allowed in @var{COMMAND} and
-@var{ALIAS}, just as they are normally.
-
-@smallexample
-(gdb) alias -a set pr elms = set p ele
-@end smallexample
-
-Finally, here is an example showing the creation of a one word
-alias for a more complex command.
-This creates alias @samp{spe} of the command @samp{set print elements}.
-
-@smallexample
-(gdb) alias spe = set print elements
-(gdb) spe 20
-@end smallexample
-
 @node Interpreters
 @chapter Command Interpreters
 @cindex command interpreters
@@ -27567,14 +28375,6 @@ runs an MI interpreter on @file{/dev/pts
 @cindex TUI
 @cindex Text User Interface
 
-@menu
-* TUI Overview::                TUI overview
-* TUI Keys::                    TUI key bindings
-* TUI Single Key Mode::         TUI single key mode
-* TUI Commands::                TUI-specific commands
-* TUI Configuration::           TUI configuration variables
-@end menu
-
 The @value{GDBN} Text User Interface (TUI) is a terminal
 interface which uses the @code{curses} library to show the source
 file, the assembly output, the program registers and @value{GDBN}
@@ -27589,6 +28389,15 @@ using various TUI commands and key bindi
 enable} or @kbd{C-x C-a}.  @xref{TUI Commands, ,TUI Commands}, and
 @ref{TUI Keys, ,TUI Key Bindings}.
 
+@menu
+* TUI Overview::                TUI overview
+* TUI Keys::                    TUI key bindings
+* TUI Single Key Mode::         TUI single key mode
+* TUI Mouse Support::           TUI mouse support
+* TUI Commands::                TUI-specific commands
+* TUI Configuration::           TUI configuration variables
+@end menu
+
 @node TUI Overview
 @section TUI Overview
 
@@ -27666,6 +28475,8 @@ source and registers, or
 assembly and registers.
 @end itemize
 
+These are the standard layouts, but other layouts can be defined.
+
 A status line above the command window shows the following information:
 
 @table @emph
@@ -27872,6 +28683,23 @@ If @value{GDBN} was built with Readline
 SingleKey keymap will be named @samp{SingleKey}.  This can be used in
 @file{.inputrc} to add additional bindings to this keymap.
 
+@node TUI Mouse Support
+@section TUI Mouse Support
+@cindex TUI mouse support
+
+If the curses library supports the mouse, the TUI supports mouse
+actions.
+
+The mouse wheel scrolls the appropriate window under the mouse cursor.
+
+The TUI itself does not directly support copying/pasting with the
+mouse.  However, on Unix terminals, you can typically press and hold
+the @key{SHIFT} key on your keyboard to temporarily bypass
+@value{GDBN}'s TUI and access the terminal's native mouse copy/paste
+functionality (commonly, click-drag-release or double-click to select
+text, middle-click to paste).  This copy/paste works with the
+terminal's selection buffer, as opposed to the TUI's buffer.
+
 @node TUI Commands
 @section TUI-specific Commands
 @cindex TUI commands
@@ -27902,11 +28730,63 @@ Disable TUI mode, returning to the conso
 @kindex info win
 List and give the size of all displayed windows.
 
+@item tui new-layout @var{name} @var{window} @var{weight} @r{[}@var{window} @var{weight}@dots{}@r{]}
+@kindex tui new-layout
+Create a new TUI layout.  The new layout will be named @var{name}, and
+can be accessed using the @code{layout} command (see below).
+
+Each @var{window} parameter is either the name of a window to display,
+or a window description.  The windows will be displayed from top to
+bottom in the order listed.
+
+The names of the windows are the same as the ones given to the
+@code{focus} command (see below); additional, the @code{status}
+window can be specified.  Note that, because it is of fixed height,
+the weight assigned to the status window is of no importance.  It is
+conventional to use @samp{0} here.
+
+A window description looks a bit like an invocation of @code{tui
+new-layout}, and is of the form
+@{@r{[}@code{-horizontal}@r{]}@var{window} @var{weight} @r{[}@var{window} @var{weight}@dots{}@r{]}@}.
+
+This specifies a sub-layout.  If @code{-horizontal} is given, the
+windows in this description will be arranged side-by-side, rather than
+top-to-bottom.
+
+Each @var{weight} is an integer.  It is the weight of this window
+relative to all the other windows in the layout.  These numbers are
+used to calculate how much of the screen is given to each window.
+
+For example:
+
+@example
+(gdb) tui new-layout example src 1 regs 1 status 0 cmd 1
+@end example
+
+Here, the new layout is called @samp{example}.  It shows the source
+and register windows, followed by the status window, and then finally
+the command window.  The non-status windows all have the same weight,
+so the terminal will be split into three roughly equal sections.
+
+Here is a more complex example, showing a horizontal layout:
+
+@example
+(gdb) tui new-layout example @{-horizontal src 1 asm 1@} 2 status 0 cmd 1
+@end example
+
+This will result in side-by-side source and assembly windows; with the
+status and command window being beneath these, filling the entire
+width of the terminal.  Because they have weight 2, the source and
+assembly windows will be twice the height of the command window.
+
 @item layout @var{name}
 @kindex layout
-Changes which TUI windows are displayed.  In each layout the command
-window is always displayed, the @var{name} parameter controls which
-additional windows are displayed, and can be any of the following:
+Changes which TUI windows are displayed.  The @var{name} parameter
+controls which layout is shown.  It can be either one of the built-in
+layout names, or the name of a layout defined by the user using
+@code{tui new-layout}.
+
+The built-in layouts are as follows:
 
 @table @code
 @item next
@@ -28131,7 +29011,7 @@ gdb} argument, then Emacs sets your curr
 your program resides.  If you only specify the file name, then Emacs
 sets your current working directory to the directory associated
 with the previous buffer.  In this case, @value{GDBN} may find your
-program by searching your environment's @code{PATH} variable, but on
+program by searching your environment's @env{PATH} variable, but on
 some operating systems it might not find the source.  So, although the
 @value{GDBN} input and output session proceeds normally, the auxiliary
 buffer does not display the current source and line of execution.
@@ -28524,7 +29404,7 @@ groups can be obtained using @samp{-list
 In general, the content of a thread group may be only retrieved only
 after attaching to that thread group.
 
-Thread groups are related to inferiors (@pxref{Inferiors and
+Thread groups are related to inferiors (@pxref{Inferiors Connections and
 Programs}).  Each inferior corresponds to a thread group of a special
 type @samp{process}, and some additional operations are permitted on
 such thread groups.
@@ -28815,10 +29695,10 @@ to keep using them until they are modifi
 
 Since @code{--interpreter=mi} always points to the latest MI version, it is
 recommended that front ends request a specific version of MI when launching
-@value{GDBN} (e.g. @code{--interpreter=mi2}) to make sure they get an
+@value{GDBN} (e.g.@: @code{--interpreter=mi2}) to make sure they get an
 interpreter with the MI version they expect.
 
-The following table gives a summary of the the released versions of the MI
+The following table gives a summary of the released versions of the MI
 interface: the version number, the version of GDB in which it first appeared
 and the breaking changes compared to the previous version.
 
@@ -28996,7 +29876,7 @@ The following is the list of possible as
 
 @item *running,thread-id="@var{thread}"
 The target is now running.  The @var{thread} field can be the global
-thread ID of the the thread that is now running, and it can be
+thread ID of the thread that is now running, and it can be
 @samp{all} if all threads are running.  The frontend should assume
 that no interaction with a running thread is possible after this
 notification is produced.  The frontend should not assume that this
@@ -29336,9 +30216,16 @@ number of the parent breakpoint.  The se
 location within that breakpoint.
 
 @item enabled
-This indicates whether the location is enabled, in which case the
-value is @samp{y}, or disabled, in which case the value is @samp{n}.
-Note that this is not the same as the field @code{enable}.
+There are three possible values, with the following meanings:
+@table @code
+@item y
+The location is enabled.
+@item n
+The location is disabled by the user.
+@item N
+The location is disabled because the breakpoint condition is invalid
+at this location.
+@end table
 
 @item addr
 The address of this location as an hexidecimal number.
@@ -29684,13 +30571,16 @@ times="0"@}
 @subsubheading Synopsis
 
 @smallexample
- -break-condition @var{number} @var{expr}
+ -break-condition [ --force ] @var{number} [ @var{expr} ]
 @end smallexample
 
 Breakpoint @var{number} will stop the program only if the condition in
 @var{expr} is true.  The condition becomes part of the
 @samp{-break-list} output (see the description of the @samp{-break-list}
-command below).
+command below).  If the @samp{--force} flag is passed, the condition
+is forcibly defined even when it is invalid for all locations of
+breakpoint @var{number}.  If the @var{expr} argument is omitted,
+breakpoint @var{number} becomes unconditional.
 
 @subsubheading @value{GDBN} Command
 
@@ -29855,8 +30745,8 @@ N.A.
 @subsubheading Synopsis
 
 @smallexample
- -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ]
-    [ -c @var{condition} ] [ -i @var{ignore-count} ]
+ -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ] [ --qualified ]
+    [ -c @var{condition} ] [ --force-condition ] [ -i @var{ignore-count} ]
     [ -p @var{thread-id} ] [ @var{location} ]
 @end smallexample
 
@@ -29912,11 +30802,17 @@ Create a tracepoint.  @xref{Tracepoints}
 is used together with @samp{-h}, a fast tracepoint is created.
 @item -c @var{condition}
 Make the breakpoint conditional on @var{condition}.
+@item --force-condition
+Forcibly define the breakpoint even if the condition is invalid at
+all of the breakpoint locations.
 @item -i @var{ignore-count}
 Initialize the @var{ignore-count}.
 @item -p @var{thread-id}
 Restrict the breakpoint to the thread with the specified global
 @var{thread-id}.
+@item --qualified
+This option makes @value{GDBN} interpret a function name specified as
+a complete fully-qualified name.
 @end table
 
 @subsubheading Result
@@ -29977,15 +30873,16 @@ times="0"@}]@}
 @subsubheading Synopsis
 
 @smallexample
- -dprintf-insert [ -t ] [ -f ] [ -d ]
-    [ -c @var{condition} ] [ -i @var{ignore-count} ]
+ -dprintf-insert [ -t ] [ -f ] [ -d ] [ --qualified ]
+    [ -c @var{condition} ] [--force-condition] [ -i @var{ignore-count} ]
     [ -p @var{thread-id} ] [ @var{location} ] [ @var{format} ]
     [ @var{argument} ]
 @end smallexample
 
 @noindent
-If supplied, @var{location} may be specified the same way as for
-the @code{-break-insert} command.  @xref{-break-insert}.
+If supplied, @var{location} and @code{--qualified} may be specified
+the same way as for the @code{-break-insert} command.
+@xref{-break-insert}.
 
 The possible optional parameters of this command are:
 
@@ -30002,6 +30899,9 @@ cannot be parsed.
 Create a disabled breakpoint.
 @item -c @var{condition}
 Make the breakpoint conditional on @var{condition}.
+@item --force-condition
+Forcibly define the breakpoint even if the condition is invalid at
+all of the breakpoint locations.
 @item -i @var{ignore-count}
 Set the ignore count of the breakpoint (@pxref{Conditions, ignore count})
 to @var{ignore-count}.
@@ -34764,18 +35664,75 @@ The @value{GDBN} equivalent is @samp{inf
 
 
 @subheading The @code{-file-list-exec-source-files} Command
+@kindex info sources
 @findex -file-list-exec-source-files
 
 @subsubheading Synopsis
 
 @smallexample
- -file-list-exec-source-files
-@end smallexample
+ -file-list-exec-source-files @r{[} @var{--group-by-objfile} @r{]}
+                              @r{[} @var{--dirname} @r{|} @var{--basename} @r{]}
+                              @r{[} -- @r{]}
+                              @r{[} @var{regexp} @r{]}
+@end smallexample
+
+This command returns information about the source files @value{GDBN}
+knows about, it will output both the filename and fullname (absolute
+file name) of a source file, though the fullname can be elided if this
+information is not known to @value{GDBN}.
+
+With no arguments this command returns a list of source files.  Each
+source file is represented by a tuple with the fields; @var{file},
+@var{fullname}, and @var{debug-fully-read}.  The @var{file} is the
+display name for the file, while @var{fullname} is the absolute name
+of the file.  The @var{fullname} field can be elided if the absolute
+name of the source file can't be computed.  The field
+@var{debug-fully-read} will be a string, either @code{true} or
+@code{false}.  When @code{true}, this indicates the full debug
+information for the compilation unit describing this file has been
+read in.  When @code{false}, the full debug information has not yet
+been read in.  While reading in the full debug information it is
+possible that @value{GDBN} could become aware of additional source
+files.
 
-List the source files for the current executable.
+The optional @var{regexp} can be used to filter the list of source
+files returned.  The @var{regexp} will be matched against the full
+source file name.  The matching is case-sensitive, except on operating
+systems that have case-insensitive filesystem (e.g.,
+MS-Windows).  @samp{--} can be used before @var{regexp} to prevent
+@value{GDBN} interpreting @var{regexp} as a command option (e.g.@: if
+@var{regexp} starts with @samp{-}).
+
+If @code{--dirname} is provided, then @var{regexp} is matched only
+against the directory name of each source file.  If @code{--basename}
+is provided, then @var{regexp} is matched against the basename of each
+source file.  Only one of @code{--dirname} or @code{--basename} may be
+given, and if either is given then @var{regexp} is required.
+
+If @code{--group-by-objfile} is used then the format of the results is
+changed.  The results will now be a list of tuples, with each tuple
+representing an object file (executable or shared library) loaded into
+@value{GDBN}.  The fields of these tuples are; @var{filename},
+@var{debug-info}, and @var{sources}.  The @var{filename} is the
+absolute name of the object file, @var{debug-info} is a string with
+one of the following values:
 
-It will always output both the filename and fullname (absolute file
-name) of a source file.
+@table @code
+@item none
+This object file has no debug information.
+@item partially-read
+This object file has debug information, but it is not fully read in
+yet.  When it is read in later, GDB might become aware of additional
+source files.
+@item fully-read
+This object file has debug information, and this information is fully
+read into GDB.  The list of source files is complete.
+@end table
+
+The @var{sources} is a list or tuples, with each tuple describing a
+single source file with the same fields as described previously.  The
+@var{sources} list can be empty for object files that have no debug
+information.
 
 @subsubheading @value{GDBN} Command
 
@@ -34784,13 +35741,66 @@ The @value{GDBN} equivalent is @samp{inf
 
 @subsubheading Example
 @smallexample
-(gdb)
+(@value{GDBP})
 -file-list-exec-source-files
-^done,files=[
-@{file=foo.c,fullname=/home/foo.c@},
-@{file=/home/bar.c,fullname=/home/bar.c@},
-@{file=gdb_could_not_find_fullpath.c@}]
-(gdb)
+^done,files=[@{file="foo.c",fullname="/home/foo.c",debug-fully-read="true"@},
+             @{file="/home/bar.c",fullname="/home/bar.c",debug-fully-read="true"@},
+             @{file="gdb_could_not_find_fullpath.c",debug-fully-read="true"@}]
+(@value{GDBP})
+-file-list-exec-source-files
+^done,files=[@{file="test.c",
+              fullname="/tmp/info-sources/test.c",
+              debug-fully-read="true"@},
+             @{file="/usr/include/stdc-predef.h",
+              fullname="/usr/include/stdc-predef.h",
+              debug-fully-read="true"@},
+             @{file="header.h",
+              fullname="/tmp/info-sources/header.h",
+              debug-fully-read="true"@},
+             @{file="helper.c",
+              fullname="/tmp/info-sources/helper.c",
+              debug-fully-read="true"@}]
+(@value{GDBP})
+-file-list-exec-source-files -- \\.c
+^done,files=[@{file="test.c",
+              fullname="/tmp/info-sources/test.c",
+              debug-fully-read="true"@},
+             @{file="helper.c",
+              fullname="/tmp/info-sources/helper.c",
+              debug-fully-read="true"@}]
+(@value{GDBP})
+-file-list-exec-source-files --group-by-objfile
+^done,files=[@{filename="/tmp/info-sources/test.x",
+              debug-info="fully-read",
+              sources=[@{file="test.c",
+                        fullname="/tmp/info-sources/test.c",
+                        debug-fully-read="true"@},
+                       @{file="/usr/include/stdc-predef.h",
+                        fullname="/usr/include/stdc-predef.h",
+                        debug-fully-read="true"@},
+                       @{file="header.h",
+                        fullname="/tmp/info-sources/header.h",
+                        debug-fully-read="true"@}]@},
+             @{filename="/lib64/ld-linux-x86-64.so.2",
+              debug-info="none",
+              sources=[]@},
+             @{filename="system-supplied DSO at 0x7ffff7fcf000",
+              debug-info="none",
+              sources=[]@},
+             @{filename="/tmp/info-sources/libhelper.so",
+              debug-info="fully-read",
+              sources=[@{file="helper.c",
+                        fullname="/tmp/info-sources/helper.c",
+                        debug-fully-read="true"@},
+                       @{file="/usr/include/stdc-predef.h",
+                        fullname="/usr/include/stdc-predef.h",
+                        debug-fully-read="true"@},
+                       @{file="header.h",
+                        fullname="/tmp/info-sources/header.h",
+                        debug-fully-read="true"@}]@},
+             @{filename="/lib64/libc.so.6",
+              debug-info="none",
+              sources=[]@}]
 @end smallexample
 
 @subheading The @code{-file-list-shared-libraries} Command
@@ -35798,7 +36808,7 @@ and only if there is a corresponding exe
 @subheading Example
 
 @smallexample
-@value{GDBP}
+(@value{GDBP})
 -list-thread-groups
 ^done,groups=[@{id="17",type="process",pid="yyy",num_children="2"@}]
 -list-thread-groups 17
@@ -35846,7 +36856,7 @@ When run on a @sc{gnu}/Linux system, the
 like this:
 
 @smallexample
-@value{GDBP}
+(@value{GDBP})
 -info-os
 ^done,OSDataTable=@{nr_rows="10",nr_cols="3",
 hdr=[@{width="10",alignment="-1",col_name="col0",colhdr="Type"@},
@@ -35872,7 +36882,7 @@ body=[item=@{col0="cpus",col1="Listing o
             col2="Sockets"@},
       item=@{col0="threads",col1="Listing of all threads",
             col2="Threads"@}]
-@value{GDBP}
+(@value{GDBP})
 -info-os processes
 ^done,OSDataTable=@{nr_rows="190",nr_cols="4",
 hdr=[@{width="10",alignment="-1",col_name="col0",colhdr="pid"@},
@@ -35885,7 +36895,7 @@ body=[item=@{col0="1",col1="root",col2="
       ...
       item=@{col0="26446",col1="stan",col2="bash",col3="0"@},
       item=@{col0="28152",col1="stan",col2="bash",col3="1"@}]@}
-(gdb)
+(@value{GDBP})
 @end smallexample
 
 (Note that the MI output here includes a @code{"Title"} column that
@@ -35903,7 +36913,7 @@ popup menu, but is needless clutter on t
 -add-inferior
 @end smallexample
 
-Creates a new inferior (@pxref{Inferiors and Programs}).  The created
+Creates a new inferior (@pxref{Inferiors Connections and Programs}).  The created
 inferior is not associated with any executable.  Such association may
 be established with the @samp{-file-exec-and-symbols} command
 (@pxref{GDB/MI File Commands}).  The command response has a single
@@ -35913,7 +36923,7 @@ thread group corresponding to the new in
 @subheading Example
 
 @smallexample
-@value{GDBP}
+(@value{GDBP})
 -add-inferior
 ^done,inferior="i3"
 @end smallexample
@@ -37295,6 +38305,15 @@ recent C@t{++}11 compiler, e.g.@: GCC.
 @item GNU make
 @value{GDBN}'s build system relies on features only found in the GNU
 make program.  Other variants of @code{make} will not work.
+
+@item GMP (The GNU Multiple Precision Arithmetic Library)
+@value{GDBN} now uses GMP to perform some of its arithmetics.
+This library may be included with your operating system distribution;
+if it is not, you can get the latest version from
+@url{https://gmplib.org/}. If GMP is installed at an unusual path,
+you can use the @option{--with-libgmp-prefix} option to specify
+its location.
+
 @end table
 
 @heading Tools/Packages Optional for Building @value{GDBN}
@@ -37705,6 +38724,14 @@ supported).
 Use the curses library instead of the termcap library, for text-mode
 terminal operations.
 
+@item --with-debuginfod
+Build @value{GDBN} with libdebuginfod, the debuginfod client library.
+Used to automatically fetch source files and separate debug files from
+debuginfod servers using the associated executable's build ID. Enabled
+by default if libdebuginfod is installed and found at configure time.
+debuginfod is packaged with elfutils, starting with version 0.178. You
+can get the latest version from `https://sourceware.org/elfutils/'.
+
 @item --with-libunwind-ia64
 Use the libunwind library for unwinding function call stack on ia64
 target platforms.  See http://www.nongnu.org/libunwind/index.html for
@@ -38213,8 +39240,8 @@ checksum.
 Print the entire architecture configuration.  The optional argument
 @var{file} names the file where the output goes.
 
-@kindex maint print c-tdesc @r{[}@var{file}@r{]}
-@item maint print c-tdesc
+@kindex maint print c-tdesc
+@item maint print c-tdesc @r{[}-single-feature@r{]} @r{[}@var{file}@r{]}
 Print the target description (@pxref{Target Descriptions}) as
 a C source file.  By default, the target description is for the current
 target, but if the optional argument @var{file} is provided, that file
@@ -38224,6 +39251,20 @@ The created source file is built into @v
 built again.  This command is used by developers after they add or
 modify XML target descriptions.
 
+When the optional flag @samp{-single-feature} is provided then the
+target description being processed (either the default, or from
+@var{file}) must only contain a single feature.  The source file
+produced is different in this case.
+
+@kindex maint print xml-tdesc
+@item maint print xml-tdesc  @r{[}@var{file}@r{]}
+Print the target description (@pxref{Target Descriptions}) as an XML
+file.  By default print the target description for the current target,
+but if the optional argument @var{file} is provided, then that file is
+read in by GDB and then used to produce the description.  The
+@var{file} should be an XML document, of the form described in
+@ref{Target Description Format}.
+
 @kindex maint check xml-descriptions
 @item maint check xml-descriptions @var{dir}
 Check that the target descriptions dynamically created by @value{GDBN}
@@ -38239,6 +39280,14 @@ library.  This exercises all @code{libth
 @code{libthread_db} uses.  Note that parts of the test may be skipped
 on some platforms when debugging core files.
 
+@kindex maint print core-file-backed-mappings
+@cindex memory address space mappings
+@item maint print core-file-backed-mappings
+Print the file-backed mappings which were loaded from a core file note.
+This output represents state internal to @value{GDBN} and should be
+similar to the mappings displayed by the @code{info proc mappings}
+command.
+
 @kindex maint print dummy-frames
 @item maint print dummy-frames
 Prints the contents of @value{GDBN}'s internal dummy-frame stack.
@@ -38302,9 +39351,15 @@ The register groups info looks like this
  restore    internal
 @end smallexample
 
+@kindex maint flush register-cache
 @kindex flushregs
-@item flushregs
-This command forces @value{GDBN} to flush its internal register cache.
+@cindex register cache, flushing
+@item maint flush register-cache
+@itemx flushregs
+Flush the contents of the register cache and as a consequence the
+frame cache.  This command is useful when debugging issues related to
+register fetching, or frame unwinding.  The command @code{flushregs}
+is deprecated in favor of @code{maint flush register-cache}.
 
 @kindex maint print objfiles
 @cindex info for known object files
@@ -38460,10 +39515,10 @@ On capable hosts, @value{GDBN} may use m
 certain CPU-intensive operations, such as demangling symbol names.
 While the number of threads used by @value{GDBN} may vary, this
 command can be used to set an upper bound on this number.  The default
-is @code{0} (disabled).  A value of @code{unlimited} lets @value{GDBN} choose a
-reasonable number.  Note that this only controls worker threads started by
-@value{GDBN} itself; libraries used by @value{GDBN} may start threads of their
-own.
+is @code{unlimited}, which lets @value{GDBN} choose a reasonable
+number.  Note that this only controls worker threads started by
+@value{GDBN} itself; libraries used by @value{GDBN} may start threads
+of their own.
 
 @kindex maint set profile
 @kindex maint show profile
@@ -38841,12 +39896,15 @@ For any @var{command} not supported by t
 protocol.  A newer @value{GDBN} can tell if a packet is supported based
 on that response.
 
-At a minimum, a stub is required to support the @samp{g} and @samp{G}
+At a minimum, a stub is required to support the @samp{?} command to
+tell @value{GDBN} the reason for halting, @samp{g} and @samp{G}
 commands for register access, and the @samp{m} and @samp{M} commands
 for memory access.  Stubs that only control single-threaded targets
-can implement run control with the @samp{c} (continue), and @samp{s}
-(step) commands.  Stubs that support multi-threading targets should
-support the @samp{vCont} command.  All other commands are optional.
+can implement run control with the @samp{c} (continue) command, and if
+the target architecture supports hardware-assisted single-stepping,
+the @samp{s} (step) command.  Stubs that support multi-threading
+targets should support the @samp{vCont} command.  All other commands
+are optional.
 
 @node Packets
 @section Packets
@@ -38917,9 +39975,10 @@ The remote target both supports and has
 @item ?
 @cindex @samp{?} packet
 @anchor{? packet}
-Indicate the reason the target halted.  The reply is the same as for
-step and continue.  This packet has a special interpretation when the
-target is in non-stop mode; see @ref{Remote Non-Stop}.
+This is sent when connection is first established to query the reason
+the target halted.  The reply is the same as for step and continue.
+This packet has a special interpretation when the target is in
+non-stop mode; see @ref{Remote Non-Stop}.
 
 Reply:
 @xref{Stop Reply Packets}, for the reply specifications.
@@ -40361,6 +41420,87 @@ is a sequence of thread IDs, @var{thread
 digits), from the target.  See @code{remote.c:parse_threadlist_response()}.
 @end table
 
+@item qMemTags:@var{start address},@var{length}:@var{type}
+@anchor{qMemTags}
+@cindex fetch memory tags
+@cindex @samp{qMemTags} packet
+Fetch memory tags of type @var{type} from the address range
+@w{@r{[}@var{start address}, @var{start address} + @var{length}@r{)}}.  The
+target is responsible for calculating how many tags will be returned, as this
+is architecture-specific.
+
+@var{start address} is the starting address of the memory range.
+
+@var{length} is the length, in bytes, of the memory range.
+
+@var{type} is the type of tag the request wants to fetch.  The type is a signed
+integer.
+
+Reply:
+@table @samp
+@item @var{mxx}@dots{}
+Hex encoded sequence of uninterpreted bytes, @var{xx}@dots{}, representing the
+tags found in the requested memory range.
+
+@item E @var{nn}
+An error occured.  This means that fetching of memory tags failed for some
+reason.
+
+@item @w{}
+An empty reply indicates that @samp{qMemTags} is not supported by the stub,
+although this should not happen given @value{GDBN} will only send this packet
+if the stub has advertised support for memory tagging via @samp{qSupported}.
+@end table
+
+@item QMemTags:@var{start address},@var{length}:@var{type}:@var{tag bytes}
+@anchor{QMemTags}
+@cindex store memory tags
+@cindex @samp{QMemTags} packet
+Store memory tags of type @var{type} to the address range
+@w{@r{[}@var{start address}, @var{start address} + @var{length}@r{)}}.  The
+target is responsible for interpreting the type, the tag bytes and modifying
+the memory tag granules accordingly, given this is architecture-specific.
+
+The interpretation of how many tags (@var{nt}) should be written to how many
+memory tag granules (@var{ng}) is also architecture-specific.  The behavior is
+implementation-specific, but the following is suggested.
+
+If the number of memory tags, @var{nt}, is greater than or equal to the
+number of memory tag granules, @var{ng}, only @var{ng} tags will be
+stored.
+
+If @var{nt} is less than @var{ng}, the behavior is that of a fill operation,
+and the tag bytes will be used as a pattern that will get repeated until
+@var{ng} tags are stored.
+
+@var{start address} is the starting address of the memory range.  The address
+does not have any restriction on alignment or size.
+
+@var{length} is the length, in bytes, of the memory range.
+
+@var{type} is the type of tag the request wants to fetch.  The type is a signed
+integer.
+
+@var{tag bytes} is a sequence of hex encoded uninterpreted bytes which will be
+interpreted by the target.  Each pair of hex digits is interpreted as a
+single byte.
+
+Reply:
+@table @samp
+@item OK
+The request was successful and the memory tag granules were modified
+accordingly.
+
+@item E @var{nn}
+An error occured.  This means that modifying the memory tag granules failed
+for some reason.
+
+@item @w{}
+An empty reply indicates that @samp{QMemTags} is not supported by the stub,
+although this should not happen given @value{GDBN} will only send this packet
+if the stub has advertised support for memory tagging via @samp{qSupported}.
+@end table
+
 @item qOffsets
 @cindex section offsets, remote request
 @cindex @samp{qOffsets} packet
@@ -41028,6 +42168,11 @@ These are the currently defined stub fea
 @tab @samp{-}
 @tab No
 
+@item @samp{memory-tagging}
+@tab No
+@tab @samp{-}
+@tab No
+
 @end multitable
 
 These are the currently defined stub features, in more detail:
@@ -41242,6 +42387,16 @@ The remote stub understands the @samp{QT
 @item no-resumed
 The remote stub reports the @samp{N} stop reply.
 
+
+@item memory-tagging
+The remote stub supports and implements the required memory tagging
+functionality and understands the @samp{qMemTags} (@pxref{qMemTags}) and
+@samp{QMemTags} (@pxref{QMemTags}) packets.
+
+For AArch64 GNU/Linux systems, this feature also requires access to the
+@file{/proc/@var{pid}/smaps} file so memory mapping page flags can be inspected.
+This is done via the @samp{vFile} requests.
+
 @end table
 
 @item qSymbol::
@@ -41723,6 +42878,7 @@ details of XML target descriptions for e
 
 @menu
 * ARM Breakpoint Kinds::
+* ARM Memory Tag Types::
 @end menu
 
 @node ARM Breakpoint Kinds
@@ -41744,6 +42900,23 @@ These breakpoint kinds are defined for t
 
 @end table
 
+@node ARM Memory Tag Types
+@subsubsection @acronym{ARM} Memory Tag Types
+@cindex memory tag types, @acronym{ARM}
+
+These memory tag types are defined for the @samp{qMemTag} and @samp{QMemTag}
+packets.
+
+@table @r
+
+@item 0
+MTE logical tag
+
+@item 1
+MTE allocation tag
+
+@end table
+
 @node MIPS-Specific Protocol Details
 @subsection @acronym{MIPS}-specific Protocol Details
 
@@ -44912,40 +46085,48 @@ it should contain registers @samp{pauth_
 @subsection ARC Features
 @cindex target descriptions, ARC Features
 
-ARC processors are highly configurable, so even core registers and their number
-are not completely predetermined.  In addition flags and PC registers which are
-important to @value{GDBN} are not ``core'' registers in ARC.  It is required
-that one of the core registers features is present.
-@samp{org.gnu.gdb.arc.aux-minimal} feature is mandatory.
-
-The @samp{org.gnu.gdb.arc.core.v2} feature is required for ARC EM and ARC HS
-targets with a normal register file.  It should contain registers @samp{r0}
-through @samp{r25}, @samp{gp}, @samp{fp}, @samp{sp}, @samp{r30}, @samp{blink},
-@samp{lp_count} and @samp{pcl}.  This feature may contain register @samp{ilink}
-and any of extension core registers @samp{r32} through @samp{r59/acch}.
-@samp{ilink} and extension core registers are not available to read/write, when
-debugging GNU/Linux applications, thus @samp{ilink} is made optional.
-
-The @samp{org.gnu.gdb.arc.core-reduced.v2} feature is required for ARC EM and
-ARC HS targets with a reduced register file.  It should contain registers
-@samp{r0} through @samp{r3}, @samp{r10} through @samp{r15}, @samp{gp},
-@samp{fp}, @samp{sp}, @samp{r30}, @samp{blink}, @samp{lp_count} and @samp{pcl}.
-This feature may contain register @samp{ilink} and any of extension core
-registers @samp{r32} through @samp{r59/acch}.
-
-The @samp{org.gnu.gdb.arc.core.arcompact} feature is required for ARCompact
-targets with a normal register file.  It should contain registers @samp{r0}
-through @samp{r25}, @samp{gp}, @samp{fp}, @samp{sp}, @samp{r30}, @samp{blink},
-@samp{lp_count} and @samp{pcl}.  This feature may contain registers
-@samp{ilink1}, @samp{ilink2} and any of extension core registers @samp{r32}
-through @samp{r59/acch}.  @samp{ilink1} and @samp{ilink2} and extension core
-registers are not available when debugging GNU/Linux applications.  The only
-difference with @samp{org.gnu.gdb.arc.core.v2} feature is in the names of
-@samp{ilink1} and @samp{ilink2} registers and that @samp{r30} is mandatory in
-ARC v2, but @samp{ilink2} is optional on ARCompact.
+ARC processors are so configurable that even core registers and their numbers
+are not predetermined completely.  Moreover, @emph{flags} and @emph{PC}
+registers, which are important to @value{GDBN}, are not ``core'' registers in
+ARC.  Therefore, there are two features that their presence is mandatory:
+@samp{org.gnu.gdb.arc.core} and @samp{org.gnu.gdb.arc.aux}.
+
+The @samp{org.gnu.gdb.arc.core} feature is required for all targets.  It must
+contain registers:
+
+@itemize @minus
+@item
+@samp{r0} through @samp{r25} for normal register file targets.
+@item
+@samp{r0} through @samp{r3}, and @samp{r10} through @samp{r15} for reduced
+register file targets.
+@item
+@samp{gp}, @samp{fp}, @samp{sp}, @samp{r30}@footnote{Not necessary for ARCv1.},
+@samp{blink}, @samp{lp_count}, @samp{pcl}.
+@end itemize
 
-The @samp{org.gnu.gdb.arc.aux-minimal} feature is required for all ARC
-targets.  It should contain registers @samp{pc} and @samp{status32}.
+In case of an ARCompact target (ARCv1 ISA), the @samp{org.gnu.gdb.arc.core}
+feature may contain registers @samp{ilink1} and @samp{ilink2}.  While in case
+of ARC EM and ARC HS targets (ARCv2 ISA), register @samp{ilink} may be present.
+The difference between ARCv1 and ARCv2 is the naming of registers @emph{29th}
+and @emph{30th}.  They are called @samp{ilink1} and @samp{ilink2} for ARCv1 and
+are optional.  For ARCv2, they are called @samp{ilink} and @samp{r30} and only
+@samp{ilink} is optional.  The optionality of @samp{ilink*} registers is
+because of their inaccessibility during user space debugging sessions.
+
+Extension core registers @samp{r32} through @samp{r59} are optional and their
+existence depends on the configuration.  When debugging GNU/Linux applications,
+i.e.@: user space debugging, these core registers are not available.
+
+The @samp{org.gnu.gdb.arc.aux} feature is required for all ARC targets.  Here
+is the list of registers pertinent to this feature:
+
+@itemize @minus
+@item
+mandatory: @samp{pc} and @samp{status32}.
+@item
+optional: @samp{lp_start}, @samp{lp_end}, and @samp{bta}.
+@end itemize
 
 @node ARM Features
 @subsection ARM Features
@@ -44956,7 +46137,7 @@ ARM targets.
 It should contain registers @samp{r0} through @samp{r13}, @samp{sp},
 @samp{lr}, @samp{pc}, and @samp{cpsr}.
 
-For M-profile targets (e.g. Cortex-M3), the @samp{org.gnu.gdb.arm.core}
+For M-profile targets (e.g.@: Cortex-M3), the @samp{org.gnu.gdb.arm.core}
 feature is replaced by @samp{org.gnu.gdb.arm.m-profile}.  It should contain
 registers @samp{r0} through @samp{r13}, @samp{sp}, @samp{lr}, @samp{pc},
 and @samp{xpsr}.
@@ -45141,6 +46322,12 @@ used.  The feature that is present shoul
 This feature is optional.  If present, it should contain registers
 @samp{fp0} through @samp{fp7}, @samp{fpcontrol}, @samp{fpstatus} and
 @samp{fpiaddr}.
+
+Note that, despite the fact that this feature's name says
+@samp{coldfire}, it is used to describe any floating point registers.
+The size of the registers must match the main m68k flavor; so, for
+example, if the primary feature is reported as @samp{coldfire}, then
+64-bit floating point registers are required.
 @end table
 
 @node NDS32 Features
@@ -45313,6 +46500,14 @@ target has floating point hardware, but
 feature if the target has the floating point control registers, but no
 other floating point hardware.
 
+The @samp{org.gnu.gdb.riscv.vector} feature is optional.  If present,
+it should contain registers @samp{v0} through @samp{v31}, all of which
+must be the same size.  These requirements are based on the v0.10
+draft vector extension, as the vector extension is not yet final.  In
+the event that the register set of the vector extension changes for
+the final specification, the requirements given here could change for
+future releases of @value{GDBN}.
+
 @node RX Features
 @subsection RX Features
 @cindex target descriptions, RX Features
@@ -45432,10 +46627,6 @@ contain registers @samp{TSR}, @samp{ILC}
 @appendix Operating System Information
 @cindex operating system information
 
-@menu
-* Process list::
-@end menu
-
 Users of @value{GDBN} often wish to obtain information about the state of
 the operating system running on the target---for example the list of
 processes, or the list of open files.  This section describes the
@@ -45448,6 +46639,10 @@ remote protocol, using @samp{qXfer} requ
 read}).  The object name in the request should be @samp{osdata}, and
 the @var{annex} identifies the data to be fetched.
 
+@menu
+* Process list::
+@end menu
+
 @node Process list
 @appendixsection Process list
 @cindex operating system information, process list
@@ -45898,7 +47093,7 @@ Backtrace: display the program stack.
 Display the value of an expression.
 
 @item c
-Continue running your program (after stopping, e.g. at a breakpoint).
+Continue running your program (after stopping, e.g.@: at a breakpoint).
 
 @item next
 Execute next program line (after stopping); step @emph{over} any
@@ -45985,11 +47180,14 @@ Execute given @value{GDBN} @var{command}
 Add @var{directory} to the path to search for source files.
 
 @item -nh
-Do not execute commands from @file{~/.gdbinit}.
+Do not execute commands from @file{~/.config/gdb/gdbinit},
+@file{~/.gdbinit}, @file{~/.config/gdb/gdbearlyinit}, or
+@file{~/.gdbearlyinit}
 
 @item -nx
 @itemx -n
-Do not execute commands from any @file{.gdbinit} initialization files.
+Do not execute commands from any @file{.gdbinit} or
+@file{.gdbearlyinit} initialization files.
 
 @item -quiet
 @itemx -q
@@ -46189,11 +47387,11 @@ command, otherwise you may get an error
 @command{gdbserver} can also debug multiple inferiors at once,
 described in
 @ifset man
-the @value{GDBN} manual in node @code{Inferiors and Programs}
--- shell command @code{info -f gdb -n 'Inferiors and Programs'}.
+the @value{GDBN} manual in node @code{Inferiors Connections and Programs}
+-- shell command @code{info -f gdb -n 'Inferiors Connections and Programs'}.
 @end ifset
 @ifclear man
-@ref{Inferiors and Programs}.
+@ref{Inferiors Connections and Programs}.
 @end ifclear
 In such case use the @code{extended-remote} @value{GDBN} command variant:
 
@@ -46410,6 +47608,8 @@ Richard M. Stallman and Roland H. Pesch,
 @value{SYSTEM_GDBINIT_DIR}/*
 @end ifset
 
+~/.config/gdb/gdbinit
+
 ~/.gdbinit
 
 ./.gdbinit
@@ -46469,11 +47669,11 @@ the @value{GDBN} manual in node @code{Sy
 @ref{System-wide configuration}.
 @end ifclear
 
-@item ~/.gdbinit
+@item @file{~/.config/gdb/gdbinit} or @file{~/.gdbinit}
 User initialization file.  It is executed unless user specified
 @value{GDBN} options @code{-nx}, @code{-n} or @code{-nh}.
 
-@item ./.gdbinit
+@item @file{.gdbinit}
 Initialization file for current directory.  It may need to be enabled with
 @value{GDBN} security command @code{set auto-load local-gdbinit}.
 See more in
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/GDBvn.texi ./gdb/doc/GDBvn.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/GDBvn.texi	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/doc/GDBvn.texi	2021-12-16 02:00:20.000000000 +0000
@@ -0,0 +1,3 @@
+@set GDBVN 11.1.90.20211216-git
+@set VERSION_PACKAGE (GDB) 
+@set BUGURL @uref{https://www.gnu.org/software/gdb/bugs/}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/guile.texi ./gdb/doc/guile.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/guile.texi	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/guile.texi	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-@c Copyright (C) 2008-2020 Free Software Foundation, Inc.
+@c Copyright (C) 2008--2021 Free Software Foundation, Inc.
 @c Permission is granted to copy, distribute and/or modify this document
 @c under the terms of the GNU Free Documentation License, Version 1.3 or
 @c any later version published by the Free Software Foundation; with the
@@ -38,8 +38,7 @@ Guile support in @value{GDBN} follows th
 reasonably closely, so concepts there should carry over.
 However, some things are done differently where it makes sense.
 
-@value{GDBN} requires Guile version 2.0 or greater.
-Older versions are not supported.
+@value{GDBN} requires Guile version 3.0, 2.2, or 2.0.
 
 @cindex guile scripts directory
 Guile scripts used by @value{GDBN} should be installed in
@@ -802,6 +801,21 @@ The @code{<gdb:value>} object @code{scm-
 corresponding to @code{val}.
 @end deffn
 
+@deffn {Scheme Procedure} value-reference-value value
+Return a new @code{<gdb:value>} object which is a reference to the value
+encapsulated by @code{<gdb:value>} object @var{value}.
+@end deffn
+
+@deffn {Scheme Procedure} value-rvalue-reference-value value
+Return a new @code{<gdb:value>} object which is an rvalue reference to
+the value encapsulated by @code{<gdb:value>} object @var{value}.
+@end deffn
+
+@deffn {Scheme Procedure} value-const-value value
+Return a new @code{<gdb:value>} object which is a @samp{const} version
+of @code{<gdb:value>} object @var{value}.
+@end deffn
+
 @deffn {Scheme Procedure} value-field value field-name
 Return field @var{field-name} from @code{<gdb:value>} object @var{value}.
 @end deffn
@@ -1269,6 +1283,9 @@ A pointer-to-member.
 @item TYPE_CODE_REF
 A reference type.
 
+@item TYPE_CODE_RVALUE_REF
+A C@t{++}11 rvalue reference type.
+
 @item TYPE_CODE_CHAR
 A character type.
 
@@ -2155,7 +2172,7 @@ A program space, or @dfn{progspace}, rep
 of an address space.
 It consists of all of the objfiles of the program.
 @xref{Objfiles In Guile}.
-@xref{Inferiors and Programs, program spaces}, for more details
+@xref{Inferiors Connections and Programs, program spaces}, for more details
 about program spaces.
 
 Each progspace is represented by an instance of the @code{<gdb:progspace>}
@@ -2178,7 +2195,7 @@ if the program it refers to is not loade
 @deffn {Scheme Procedure} current-progspace
 This function returns the program space of the currently selected inferior.
 There is always a current progspace, this never returns @code{#f}.
-@xref{Inferiors and Programs}.
+@xref{Inferiors Connections and Programs}.
 @end deffn
 
 @deffn {Scheme Procedure} progspaces
@@ -3002,9 +3019,13 @@ This value cannot be specified when crea
 @item BP_ACCESS_WATCHPOINT
 Hardware assisted access watchpoint.
 This value cannot be specified when creating the breakpoint.
+
+@item BP_CATCHPOINT
+Catchpoint.
+This value cannot be specified when creating the breakpoint.
 @end vtable
 
-The available watchpoint types represented by constants are defined in the
+The available watchpoint types are represented by constants defined in the
 @code{(gdb)} module:
 
 @vtable @code
@@ -3559,21 +3580,36 @@ inclusive.
 @deffn {Scheme Procedure} memory-port-read-buffer-size memory-port
 Return the size of the read buffer of @code{<gdb:memory-port>}
 @var{memory-port}.
+
+This procedure is deprecated and will be removed in @value{GDBN} 11.
+It returns 0 when using Guile 2.2 or later.
 @end deffn
 
 @deffn {Scheme Procedure} set-memory-port-read-buffer-size! memory-port size
 Set the size of the read buffer of @code{<gdb:memory-port>}
 @var{memory-port} to @var{size}.  The result is unspecified.
+
+This procedure is deprecated and will be removed in @value{GDBN} 11.
+When @value{GDBN} is built with Guile 2.2 or later, you can call
+@code{setvbuf} instead (@pxref{Buffering, @code{setvbuf},, guile, GNU
+Guile Reference Manual}).
 @end deffn
 
 @deffn {Scheme Procedure} memory-port-write-buffer-size memory-port
 Return the size of the write buffer of @code{<gdb:memory-port>}
 @var{memory-port}.
+
+This procedure is deprecated and will be removed in @value{GDBN} 11.
+It returns 0 when @value{GDBN} is built with Guile 2.2 or later.
 @end deffn
 
 @deffn {Scheme Procedure} set-memory-port-write-buffer-size! memory-port size
 Set the size of the write buffer of @code{<gdb:memory-port>}
 @var{memory-port} to @var{size}.  The result is unspecified.
+
+This procedure is deprecated and will be removed in @value{GDBN} 11.
+When @value{GDBN} is built with Guile 2.2 or later, you can call
+@code{setvbuf} instead.
 @end deffn
 
 A memory port is closed like any other port, with @code{close-port}.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Makefile.in ./gdb/doc/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/Makefile.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/Makefile.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-##Copyright (C) 1991-2020 Free Software Foundation, Inc.
+##Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
 # Makefile for GDB documentation.
 # This file is part of GDB.
@@ -180,6 +180,7 @@ MAN5S = gdbinit.5
 MANS = $(MAN1S) $(MAN5S)
 
 HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@
+HAVE_NATIVE_GCORE_HOST = @HAVE_NATIVE_GCORE_HOST@
 
 ###
 
@@ -230,7 +231,7 @@ Doxyfile-gdbserver:	$(srcdir)/Doxyfile-g
 
 all-doc: info dvi ps # pdf
 diststuff: info man
-	rm -f gdb-cfg.texi GDBvn.texi
+	rm -f gdb-cfg.texi
 
 install-info: $(INFO_DEPS)
 	$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(infodir)
@@ -666,10 +667,9 @@ mostlyclean:
 	rm -f $(STABS_TEX_TMPS)
 	rm -f $(ANNOTATE_TEX_TMPS)
 	rm -f sedref.dvi sedref.tex tmp.sed
-	rm -f version.subst
 
 clean: mostlyclean
-	rm -f gdb-cfg.texi GDBvn.texi
+	rm -f gdb-cfg.texi
 
 distclean: clean
 	rm -f Makefile
@@ -679,7 +679,7 @@ distclean: clean
 # "clean" or "distclean".  Use maintainer-clean to remove them.
 
 maintainer-clean realclean: distclean
-	rm -f GDBvn.texi *.info* *.dvi *.ps *.html *.pdf $(MANS)
+	rm -f GDBvn.texi version.subst *.info* *.dvi *.ps *.html *.pdf $(MANS)
 
 install: install-info install-man
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/python.texi ./gdb/doc/python.texi
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/python.texi	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/python.texi	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-@c Copyright (C) 2008-2020 Free Software Foundation, Inc.
+@c Copyright (C) 2008--2021 Free Software Foundation, Inc.
 @c Permission is granted to copy, distribute and/or modify this document
 @c under the terms of the GNU Free Documentation License, Version 1.3 or
 @c any later version published by the Free Software Foundation; with the
@@ -103,6 +103,44 @@ controlled using @code{set python print-
 full Python stack printing is enabled; if @code{none}, then Python stack
 and message printing is disabled; if @code{message}, the default, only
 the message component of the error is printed.
+
+@kindex set python ignore-environment
+@item set python ignore-environment @r{[}on@r{|}off@r{]}
+By default this option is @samp{off}, and, when @value{GDBN}
+initializes its internal Python interpreter, the Python interpreter
+will check the environment for variables that will effect how it
+behaves, for example @env{PYTHONHOME}, and
+@env{PYTHONPATH}@footnote{See the ENVIRONMENT VARIABLES section of
+@command{man 1 python} for a comprehensive list.}.
+
+If this option is set to @samp{on} before Python is initialized then
+Python will ignore all such environment variables.  As Python is
+initialized early during @value{GDBN}'s startup process, then this
+option must be placed into the early initialization file
+(@pxref{Initialization Files}) to have the desired effect.
+
+This option is equivalent to passing @option{-E} to the real
+@command{python} executable.
+
+@kindex set python dont-write-bytecode
+@item set python dont-write-bytecode @r{[}auto@r{|}on@r{|}off@r{]}
+When this option is @samp{off}, then, once @value{GDBN} has
+initialized the Python interpreter, the interpreter will byte-compile
+any Python modules that it imports and write the byte code to disk in
+@file{.pyc} files.
+
+If this option is set to @samp{on} before Python is initialized then
+Python will no longer write the byte code to disk.  As Python is
+initialized early during @value{GDBN}'s startup process, then this
+option must be placed into the early initialization file
+(@pxref{Initialization Files}) to have the desired effect.
+
+By default this option is set to @samp{auto}, in this mode Python will
+check the environment variable @env{PYTHONDONTWRITEBYTECODE} to see
+if it should write out byte-code or not.
+
+This option is equivalent to passing @option{-B} to the real
+@command{python} executable.
 @end table
 
 It is also possible to execute a Python script from the @value{GDBN}
@@ -115,6 +153,24 @@ to recognize the script language based o
 the @code{script-extension} setting.  @xref{Extending GDB, ,Extending GDB}.
 @end table
 
+The following commands are intended to help debug @value{GDBN} itself:
+
+@table @code
+@kindex set debug py-breakpoint
+@kindex show debug py-breakpoint
+@item set debug py-breakpoint on@r{|}off
+@itemx show debug py-breakpoint
+When @samp{on}, @value{GDBN} prints debug messages related to the
+Python breakpoint API.  This is @samp{off} by default.
+
+@kindex set debug py-unwind
+@kindex show debug py-unwind
+@item set debug py-unwind on@r{|}off
+@itemx show debug py-unwind
+When @samp{on}, @value{GDBN} prints debug messages related to the
+Python unwinder API.  This is @samp{off} by default.
+@end table
+
 @node Python API
 @subsection Python API
 @cindex python api
@@ -163,6 +219,8 @@ 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.
+* TUI Windows In Python::       Implementing new TUI windows.
 @end menu
 
 @node Basic Python
@@ -557,7 +615,7 @@ rather recognizes it when thrown from us
 >    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
@@ -904,6 +962,11 @@ corresponding symbol name (if one exists
 should be expanded, @code{False} if they shouldn't (see @code{set print
 union} in @ref{Print Settings}).
 
+@item address
+@code{True} if the string representation of a pointer should include the
+address, @code{False} if it shouldn't (see @code{set print address} in
+@ref{Print Settings}).
+
 @item deref_refs
 @code{True} if C@t{++} references should be resolved to the value they
 refer to, @code{False} (the default) if they shouldn't.  Note that, unlike
@@ -919,7 +982,7 @@ identify the @emph{actual} (derived) typ
 the @emph{declared} type should be used.  (See @code{set print object} in
 @ref{Print Settings}).
 
-@item static_fields
+@item static_members
 @code{True} if static members should be included in the string
 representation of a C@t{++} object, @code{False} if they shouldn't (see
 @code{set print static-members} in @ref{Print Settings}).
@@ -1067,6 +1130,29 @@ The type code for this type.  The type c
 @code{TYPE_CODE_} constants defined below.
 @end defvar
 
+@defvar Type.dynamic
+A boolean indicating whether this type is dynamic.  In some
+situations, such as Rust @code{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
+@code{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:
+@smallexample
+int n;
+int array[n];
+@end smallexample
+
+Here, at least conceptually (whether your compiler actually does this
+is a separate issue), examining @w{@code{gdb.lookup_symbol("array", ...).type}}
+could yield a @code{gdb.Type} which reports a size of @code{None}.
+This is the dynamic type.
+
+However, examining @code{gdb.parse_and_eval("array").type} would yield
+a concrete type, whose length would be known.
+@end defvar
+
 @defvar Type.name
 The name of this type.  If this type has no name, then @code{None}
 is returned.
@@ -1075,7 +1161,9 @@ is returned.
 @defvar Type.sizeof
 The size of this type, in target @code{char} units.  Usually, a
 target's @code{char} type will be an 8-bit byte.  However, on some
-unusual platforms, this type may have a different size.
+unusual 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 @code{None}.
 @end defvar
 
 @defvar Type.tag
@@ -1093,19 +1181,42 @@ there is no associated objfile.
 The following methods are provided:
 
 @defun 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@t{++} 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:
+
+@itemize @bullet
+
+@item
+For structure and union types, this method returns the fields.
+
+@item
+Range types have two fields, the minimum and maximum values.
+
+@item
+Enum types have one field per enum constant.
+
+@item
+Function and method types have one field per parameter.  The base types of
+C@t{++} classes are also represented as fields.
+
+@item
+Array types have one field representing the array's range.
+
+@item
+If the type does not fit into one of these categories, a @code{TypeError}
+is raised.
+
+@end itemize
 
 Each field is a @code{gdb.Field} object, with some pre-defined attributes:
 @table @code
 @item bitpos
 This attribute is not available for @code{enum} or @code{static}
 (as in C@t{++}) fields.  The value is the position, counting
-in bits, from the start of the containing type.
+in bits, 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 @code{None}.  Also, a dynamic type may have
+fields that do not appear in a corresponding concrete type.
 
 @item enumval
 This attribute is only available for @code{enum} fields, and its value
@@ -1550,7 +1661,7 @@ example above might be written.
 @smallexample
 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):
@@ -2010,7 +2121,7 @@ empty iterable, or @code{None} means fra
 printed for this frame.  This iterable must contain objects that
 implement two methods, described here.
 
-This object must implement a @code{argument} method which takes a
+This object must implement a @code{symbol} method which takes a
 single @code{self} parameter and must return a @code{gdb.Symbol}
 (@pxref{Symbols In Python}), or a Python string.  The object must also
 implement a @code{value} method which takes a single @code{self}
@@ -2256,7 +2367,7 @@ class InlinedFrameDecorator(FrameDecorat
         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:
@@ -2428,12 +2539,11 @@ provides a method to read frame's regist
 
 @defun PendingFrame.read_register (reg)
 This method returns the contents of the register @var{reg} in the
-frame as a @code{gdb.Value} object.  @var{reg} can be either a
-register number or a register name; the values are platform-specific.
-They are usually found in the corresponding
-@file{@var{platform}-tdep.h} file in the @value{GDBN} source tree.  If
-@var{reg} does not name a register for the current architecture, this
-method will throw an exception.
+frame as a @code{gdb.Value} object.  For a description of the
+acceptable values of @var{reg} see
+@ref{gdbpy_frame_read_register,,Frame.read_register}.  If @var{reg}
+does not name a register for the current architecture, this method
+will throw an exception.
 
 Note that this method will always return a @code{gdb.Value} for a
 valid register name.  This does not mean that the value will be valid.
@@ -2489,6 +2599,17 @@ Each attribute value should be an instan
 
 @end defun
 
+@defun PendingFrame.architecture ()
+Return the @code{gdb.Architecture} (@pxref{Architectures In Python})
+for this @code{gdb.PendingFrame}.  This represents the architecture of
+the particular frame being unwound.
+@end defun
+
+@defun PendingFrame.level ()
+Return an integer, the stack frame level for this frame.
+@xref{Frames, ,Stack Frames}.
+@end defun
+
 @subheading Unwinder Output: UnwindInfo
 
 Use @code{PendingFrame.create_unwind_info} method described above to
@@ -2496,8 +2617,8 @@ create a @code{gdb.UnwindInfo} instance.
 specify caller registers that have been saved in this frame:
 
 @defun gdb.UnwindInfo.add_saved_register (reg, value)
-@var{reg} identifies the register.  It can be a number or a name, just
-as for the @code{PendingFrame.read_register} method above.
+@var{reg} identifies the register, for a description of the acceptable
+values see @ref{gdbpy_frame_read_register,,Frame.read_register}.
 @var{value} is a register value (a @code{gdb.Value} object).
 @end defun
 
@@ -2928,7 +3049,7 @@ itself.
 
 @findex gdb.Inferior
 Programs which are being run under @value{GDBN} are called inferiors
-(@pxref{Inferiors and Programs}).  Python scripts can access
+(@pxref{Inferiors Connections and Programs}).  Python scripts can access
 information about and manipulate inferiors controlled by @value{GDBN}
 via objects of the @code{gdb.Inferior} class.
 
@@ -2949,6 +3070,12 @@ A @code{gdb.Inferior} object has the fol
 ID of inferior, as assigned by GDB.
 @end defvar
 
+@defvar Inferior.connection_num
+ID of inferior's connection as assigned by @value{GDBN}, or None if
+the inferior is not connected to a target.
+@xref{Inferiors Connections and Programs}.
+@end defvar
+
 @defvar Inferior.pid
 Process ID of the inferior, as assigned by the underlying operating
 system.
@@ -3060,8 +3187,8 @@ Here is an example:
 
 @smallexample
 def exit_handler (event):
-    print "event type: exit"
-    print "exit code: %d" % (event.exit_code)
+    print ("event type: exit")
+    print ("exit code: %d" % (event.exit_code))
 
 gdb.events.exited.connect (exit_handler)
 @end smallexample
@@ -3294,7 +3421,7 @@ is no selected thread, this will return
 @end defun
 
 To get the list of threads for an inferior, use the @code{Inferior.threads()}
-method.  @xref{Inferiors In Python}
+method.  @xref{Inferiors In Python}.
 
 A @code{gdb.InferiorThread} object has the following attributes:
 
@@ -3800,6 +3927,13 @@ The command has to do with tracepoints.
 @kbd{help tracepoints} at the @value{GDBN} prompt to see a list of
 commands in this category.
 
+@findex COMMAND_TUI
+@findex gdb.COMMAND_TUI
+@item gdb.COMMAND_TUI
+The command has to do with the text user interface (@pxref{TUI}).
+Type @kbd{help tui} at the @value{GDBN} prompt to see a list of
+commands in this category.
+
 @findex COMMAND_USER
 @findex gdb.COMMAND_USER
 @item gdb.COMMAND_USER
@@ -3874,7 +4008,7 @@ class HelloWorld (gdb.Command):
     super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
 
   def invoke (self, arg, from_tty):
-    print "Hello, World!"
+    print ("Hello, World!")
 
 HelloWorld ()
 @end smallexample
@@ -3994,6 +4128,7 @@ class ExampleParam (gdb.Parameter):
         self.value = self.saved_value
         raise gdb.GdbError('Failed to validate')
       self.saved_value = self.value
+      return ""
 @end smallexample
 @end defun
 
@@ -4161,7 +4296,7 @@ A program space, or @dfn{progspace}, rep
 of an address space.
 It consists of all of the objfiles of the program.
 @xref{Objfiles In Python}.
-@xref{Inferiors and Programs, program spaces}, for more details
+@xref{Inferiors Connections and Programs, program spaces}, for more details
 about program spaces.
 
 The following progspace-related functions are available in the
@@ -4170,7 +4305,7 @@ The following progspace-related function
 @findex gdb.current_progspace
 @defun gdb.current_progspace ()
 This function returns the program space of the currently selected inferior.
-@xref{Inferiors and Programs}.  This is identical to
+@xref{Inferiors Connections and Programs}.  This is identical to
 @code{gdb.selected_inferior().progspace} (@pxref{Inferiors In Python}) and is
 included for historical compatibility.
 @end defun
@@ -4262,7 +4397,7 @@ 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 ..."
+    print ("Computing the answer to the ultimate question ...")
     return 42
 def new_objfile_handler(event):
     objfile = event.new_objfile
@@ -4279,7 +4414,7 @@ gdb.events.clear_objfiles.connect(clear_
 gdb.events.new_objfile.connect(new_objfile_handler)
 end
 (gdb) file /tmp/hello
-Reading symbols from /tmp/hello...done.
+Reading symbols from /tmp/hello...
 Computing the answer to the ultimate question ...
 (gdb) python print gdb.current_progspace().expensive_computation
 42
@@ -4418,7 +4553,7 @@ def new_objfile_handler(event):
 gdb.events.new_objfile.connect(new_objfile_handler)
 end
 (gdb) file ./hello
-Reading symbols from ./hello...done.
+Reading symbols from ./hello...
 (gdb) python print gdb.objfiles()[0].time_loaded
 2014-10-09 11:41:36.770345
 @end smallexample
@@ -4607,7 +4742,7 @@ 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
+    print ("An error occured: %s" % reason_str)
 @end smallexample
 @end table
 
@@ -4642,11 +4777,31 @@ Return the frame's symtab and line objec
 @xref{Symbol Tables In Python}.
 @end defun
 
+@anchor{gdbpy_frame_read_register}
 @defun Frame.read_register (register)
-Return the value of @var{register} in this frame.  The @var{register}
-argument must be a string (e.g., @code{'sp'} or @code{'rax'}).
-Returns a @code{Gdb.Value} object.  Throws an exception if @var{register}
-does not exist.
+Return the value of @var{register} in this frame.  Returns a
+@code{Gdb.Value} object.  Throws an exception if @var{register} does
+not exist.  The @var{register} argument must be one of the following:
+@enumerate
+@item
+A string that is the name of a valid register (e.g., @code{'sp'} or
+@code{'rax'}).
+@item
+A @code{gdb.RegisterDescriptor} object (@pxref{Registers In Python}).
+@item
+A @value{GDBN} internal, platform specific number.  Using these
+numbers is supported for historic reasons, but is not recommended as
+future changes to @value{GDBN} 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 @file{@var{platform}-tdep.h} file in the
+@value{GDBN} source tree.
+@end enumerate
+Using a string to access registers will be slightly slower than the
+other two methods as @value{GDBN} must look up the mapping between
+name and internal register number.  If performance is critical
+consider looking up and caching a @code{gdb.RegisterDescriptor}
+object.
 @end defun
 
 @defun Frame.read_var (variable @r{[}, block@r{]})
@@ -4663,6 +4818,10 @@ Set this frame to be the selected frame.
 Stack}.
 @end defun
 
+@defun Frame.level ()
+Return an integer, the stack frame level for this frame.  @xref{Frames, ,Stack Frames}.
+@end defun
+
 @node Blocks In Python
 @subsubsection Accessing blocks from Python
 
@@ -5064,6 +5223,10 @@ Value is a local variable.
 Value not used.  Symbols in the domain @code{SYMBOL_STRUCT_DOMAIN} all
 have this class.
 
+@vindex SYMBOL_LOC_LABEL
+@item gdb.SYMBOL_LOC_LABEL
+Value is a label.
+
 @vindex SYMBOL_LOC_BLOCK
 @item gdb.SYMBOL_LOC_BLOCK
 Value is a block.
@@ -5086,8 +5249,8 @@ The value does not actually exist in the
 @item gdb.SYMBOL_LOC_COMPUTED
 The value's address is a computed location.
 
-@vindex SYMBOL_LOC_COMPUTED
-@item gdb.SYMBOL_LOC_COMPUTED
+@vindex SYMBOL_LOC_COMMON_BLOCK
+@item gdb.SYMBOL_LOC_COMMON_BLOCK
 The value's address is a symbol.  This is only used for Fortran common
 blocks.
 @end vtable
@@ -5228,7 +5391,7 @@ example illustrating iterating over a li
 symtab = gdb.selected_frame().find_sal().symtab
 linetable = symtab.linetable()
 for line in linetable:
-   print "Line: "+str(line.line)+" Address: "+hex(line.pc)
+   print ("Line: "+str(line.line)+" Address: "+hex(line.pc))
 @end smallexample
 
 This will have the following output:
@@ -5335,6 +5498,10 @@ module:
 @item gdb.BP_BREAKPOINT
 Normal code breakpoint.
 
+@vindex BP_HARDWARE_BREAKPOINT
+@item gdb.BP_HARDWARE_BREAKPOINT
+Hardware assisted code breakpoint.
+
 @vindex BP_WATCHPOINT
 @item gdb.BP_WATCHPOINT
 Watchpoint breakpoint.
@@ -5350,9 +5517,16 @@ Hardware assisted read watchpoint.
 @vindex BP_ACCESS_WATCHPOINT
 @item gdb.BP_ACCESS_WATCHPOINT
 Hardware assisted access watchpoint.
+
+@vindex BP_CATCHPOINT
+@item gdb.BP_CATCHPOINT
+Catchpoint.  Currently, this type can't be used when creating
+@code{gdb.Breakpoint} objects, but will be present in
+@code{gdb.Breakpoint} objects reported from
+@code{gdb.BreakpointEvent}s (@pxref{Events In Python}).
 @end vtable
 
-The available watchpoint types represented by constants are defined in the
+The available watchpoint types are represented by constants defined in the
 @code{gdb} module:
 
 @vtable @code
@@ -5551,11 +5725,11 @@ method:
 @smallexample
 class MyFinishBreakpoint (gdb.FinishBreakpoint)
     def stop (self):
-        print "normal finish"
+        print ("normal finish")
         return True
     
     def out_of_scope ():
-        print "abnormal finish"
+        print ("abnormal finish")
 @end smallexample 
 @end defun
 
@@ -5673,6 +5847,198 @@ instruction in bytes.
 @end table
 @end defun
 
+@anchor{gdbpy_architecture_registers}
+@defun Architecture.registers (@r{[} @var{reggroup} @r{]})
+Return a @code{gdb.RegisterDescriptorIterator} (@pxref{Registers In
+Python}) for all of the registers in @var{reggroup}, a string that is
+the name of a register group.  If @var{reggroup} is omitted, or is the
+empty string, then the register group @samp{all} is assumed.
+@end defun
+
+@anchor{gdbpy_architecture_reggroups}
+@defun Architecture.register_groups ()
+Return a @code{gdb.RegisterGroupsIterator} (@pxref{Registers In
+Python}) for all of the register groups available for the
+@code{gdb.Architecture}.
+@end defun
+
+@node Registers In Python
+@subsubsection Registers In Python
+@cindex Registers In Python
+
+Python code can request from a @code{gdb.Architecture} information
+about the set of registers available
+(@pxref{gdbpy_architecture_registers,,@code{Architecture.registers}}).
+The register information is returned as a
+@code{gdb.RegisterDescriptorIterator}, which is an iterator that in
+turn returns @code{gdb.RegisterDescriptor} objects.
+
+A @code{gdb.RegisterDescriptor} does not provide the value of a
+register (@pxref{gdbpy_frame_read_register,,@code{Frame.read_register}}
+for reading a register's value), instead the @code{RegisterDescriptor}
+is a way to discover which registers are available for a particular
+architecture.
+
+A @code{gdb.RegisterDescriptor} has the following read-only properties:
+
+@defvar RegisterDescriptor.name
+The name of this register.
+@end defvar
+
+It is also possible to lookup a register descriptor based on its name
+using the following @code{gdb.RegisterDescriptorIterator} function:
+
+@defun RegisterDescriptorIterator.find (@var{name})
+Takes @var{name} as an argument, which must be a string, and returns a
+@code{gdb.RegisterDescriptor} for the register with that name, or
+@code{None} if there is no register with that name.
+@end defun
+
+Python code can also request from a @code{gdb.Architecture}
+information about the set of register groups available on a given
+architecture
+(@pxref{gdbpy_architecture_reggroups,,@code{Architecture.register_groups}}).
+
+Every register can be a member of zero or more register groups.  Some
+register groups are used internally within @value{GDBN} to control
+things like which registers must be saved when calling into the
+program being debugged (@pxref{Calling,,Calling Program Functions}).
+Other register groups exist to allow users to easily see related sets
+of registers in commands like @code{info registers}
+(@pxref{info_registers_reggroup,,@code{info registers
+@var{reggroup}}}).
+
+The register groups information is returned as a
+@code{gdb.RegisterGroupsIterator}, which is an iterator that in turn
+returns @code{gdb.RegisterGroup} objects.
+
+A @code{gdb.RegisterGroup} object has the following read-only
+properties:
+
+@defvar RegisterGroup.name
+A string that is the name of this register group.
+@end defvar
+
+@node TUI Windows In Python
+@subsubsection Implementing new TUI windows
+@cindex Python TUI Windows
+
+New TUI (@pxref{TUI}) windows can be implemented in Python.
+
+@findex gdb.register_window_type
+@defun gdb.register_window_type (@var{name}, @var{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 @value{GDBN}.
+
+@var{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.
+
+@var{function} is a factory function that is called to create the TUI
+window.  This is called with a single argument of type
+@code{gdb.TuiWindow}, described below.  It should return an object
+that implements the TUI window protocol, also described below.
+@end defun
+
+As mentioned above, when a factory function is called, it is passed
+an object of type @code{gdb.TuiWindow}.  This object has these
+methods and attributes:
+
+@defun TuiWindow.is_valid ()
+This method returns @code{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 @code{gdb.TuiWindow}
+will no longer be valid, and methods (and attributes) other than
+@code{is_valid} will throw an exception.
+
+When the TUI is disabled using @code{tui disable} (@pxref{TUI
+Commands,,tui disable}) the window is hidden rather than destroyed,
+but @code{is_valid} will still return @code{False} and other methods
+(and attributes) will still throw an exception.
+@end defun
+
+@defvar TuiWindow.width
+This attribute holds the width of the window.  It is not writable.
+@end defvar
+
+@defvar TuiWindow.height
+This attribute holds the height of the window.  It is not writable.
+@end defvar
+
+@defvar TuiWindow.title
+This attribute holds the window's title, a string.  This is normally
+displayed above the window.  This attribute can be modified.
+@end defvar
+
+@defun TuiWindow.erase ()
+Remove all the contents of the window.
+@end defun
+
+@defun TuiWindow.write (@var{string} @r{[}, @var{full_window}@r{]})
+Write @var{string} to the window.  @var{string} can contain ANSI
+terminal escape styling sequences; @value{GDBN} will translate these
+as appropriate for the terminal.
+
+If the @var{full_window} parameter is @code{True}, then @var{string}
+contains the full contents of the window.  This is similar to calling
+@code{erase} before @code{write}, but avoids the flickering.
+@end defun
+
+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, @value{GDBN} will not attempt
+to call it.  Additional new methods may be added to the window
+protocol in the future.  @value{GDBN} 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.
+
+@defun Window.close ()
+When the TUI window is closed, the @code{gdb.TuiWindow} object will be
+put into an invalid state.  At this time, @value{GDBN} will call
+@code{close} method on the window object.
+
+After this method is called, @value{GDBN} will discard any references
+it holds on this window object, and will no longer call methods on
+this object.
+@end defun
+
+@defun 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, @value{GDBN} will call the @code{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 @code{gdb.TuiWindow}.
+@end defun
+
+@defun Window.hscroll (@var{num})
+This is a request to scroll the window horizontally.  @var{num} is the
+amount by which to scroll, with negative numbers meaning to scroll
+right.  In the TUI model, it is the viewport that moves, not the
+contents.  A positive argument should cause the viewport to move
+right, and so the content should appear to move to the left.
+@end defun
+
+@defun Window.vscroll (@var{num})
+This is a request to scroll the window vertically.  @var{num} is the
+amount by which to scroll, with negative numbers meaning to scroll
+backward.  In the TUI model, it is the viewport that moves, not the
+contents.  A positive argument should cause the viewport to move down,
+and so the content should appear to move up.
+@end defun
+
+@defun Window.click (@var{x}, @var{y}, @var{button})
+This is called on a mouse click in this window.  @var{x} and @var{y} are
+the mouse coordinates inside the window (0-based), and @var{button}
+specifies which mouse button was used, whose values can be 1 (left),
+2 (middle), or 3 (right).
+@end defun
+
 @node Python Auto-loading
 @subsection Python Auto-loading
 @cindex Python auto-loading
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/refcard.tex ./gdb/doc/refcard.tex
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/refcard.tex	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/refcard.tex	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%% gdb-refcard.tex %%%%%%%%%%%%%%%%
 
 %This file is TeX source for a reference card describing GDB, the GNU debugger.
-%Copyright (C) 1991-2020 Free Software Foundation, Inc.
+%Copyright (C) 1991--2021 Free Software Foundation, Inc.
 %Permission is granted to make and distribute verbatim copies of
 %this reference provided the copyright notices and permission notices
 %are preserved on all copies.
@@ -307,7 +307,7 @@ shell {\it cmd}&execute arbitrary shell
 \line{\smrm \opt{ } surround optional arguments \hfill $\ldots$ show
 one or more arguments}
 \vskip\baselineskip
-\centerline{\smrm \copyright 1998-2020 Free Software Foundation, Inc.\qquad Permissions on back}
+\centerline{\smrm \copyright 1998-2021 Free Software Foundation, Inc.\qquad Permissions on back}
 \eject
 \sec Breakpoints and Watchpoints;
 break \opt{\it file\tt:}{\it line}\par
@@ -632,7 +632,7 @@ statement.\cr
 
 \vfill
 {\smrm\parskip=6pt
-Copyright \copyright 1991-2020 Free Software Foundation, Inc.
+Copyright \copyright 1991-2021 Free Software Foundation, Inc.
 Author: Roland H. Pesch
 
 The author assumes no responsibility for any errors on this card.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/stabs.info ./gdb/doc/stabs.info
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/stabs.info	2020-03-07 02:11:41.000000000 +0000
+++ ./gdb/doc/stabs.info	2021-12-16 02:00:34.000000000 +0000
@@ -1,6 +1,6 @@
-This is stabs.info, produced by makeinfo version 6.3 from stabs.texinfo.
+This is stabs.info, produced by makeinfo version 6.5 from stabs.texinfo.
 
-Copyright (C) 1992-2020 Free Software Foundation, Inc.  Contributed by
+Copyright (C) 1992-2021 Free Software Foundation, Inc.  Contributed by
 Cygnus Support.  Written by Julia Menapace, Jim Kingdon, and David
 MacKenzie.
 
@@ -17,7 +17,7 @@ END-INFO-DIR-ENTRY
 
    This document describes the stabs debugging symbol tables.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.  Contributed
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.  Contributed
 by Cygnus Support.  Written by Julia Menapace, Jim Kingdon, and David
 MacKenzie.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/stabs.texinfo ./gdb/doc/stabs.texinfo
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/stabs.texinfo	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/doc/stabs.texinfo	2021-12-16 01:57:39.000000000 +0000
@@ -17,7 +17,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 1992-2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1992--2021 Free Software Foundation, Inc.
 Contributed by Cygnus Support.  Written by Julia Menapace, Jim Kingdon,
 and David MacKenzie.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/version.subst ./gdb/doc/version.subst
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/doc/version.subst	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/doc/version.subst	2021-12-16 02:00:20.000000000 +0000
@@ -0,0 +1 @@
+11.1.90.20211216-git
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dtrace-probe.c ./gdb/dtrace-probe.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dtrace-probe.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dtrace-probe.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* DTrace probe support for GDB.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    Contributed by Oracle, Inc.
 
@@ -32,6 +32,7 @@
 #include "language.h"
 #include "parser-defs.h"
 #include "inferior.h"
+#include "expop.h"
 
 /* The type of the ELF sections where we will find the DOF programs
    with information about probes.  */
@@ -462,8 +463,8 @@ dtrace_process_dof_probe (struct objfile
       int probe_argc = DOF_UINT (dof, probe->dofpr_nargc);
 
       /* Store argument type descriptions.  A description of the type
-         of the argument is in the (J+1)th null-terminated string
-         starting at 'strtab' + 'probe->dofpr_nargv'.  */
+	 of the argument is in the (J+1)th null-terminated string
+	 starting at 'strtab' + 'probe->dofpr_nargv'.  */
       std::vector<struct dtrace_probe_arg> args;
       p = strtab + DOF_UINT (dof, probe->dofpr_nargv);
       for (j = 0; j < probe_argc; j++)
@@ -481,7 +482,7 @@ dtrace_process_dof_probe (struct objfile
 	  /* Try to parse a type expression from the type string.  If
 	     this does not work then we set the type to `long
 	     int'.  */
-          struct type *type = builtin_type (gdbarch)->builtin_long;
+	  struct type *type = builtin_type (gdbarch)->builtin_long;
 
 	  try
 	    {
@@ -492,8 +493,8 @@ dtrace_process_dof_probe (struct objfile
 	    {
 	    }
 
-	  if (expr != NULL && expr.get ()->elts[0].opcode == OP_TYPE)
-	    type = expr.get ()->elts[1].type;
+	  if (expr != NULL && expr->first_opcode () == OP_TYPE)
+	    type = value_type (evaluate_type (expr.get ()));
 
 	  args.emplace_back (type, std::move (type_str), std::move (expr));
 	}
@@ -520,7 +521,7 @@ dtrace_process_dof (asection *sect, stru
 		    std::vector<std::unique_ptr<probe>> *probesp,
 		    struct dtrace_dof_hdr *dof)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct dtrace_dof_sect *section;
   int i;
 
@@ -629,20 +630,18 @@ dtrace_probe::build_arg_exprs (struct gd
 
       /* The argument value, which is ABI dependent and casted to
 	 `long int'.  */
-      gdbarch_dtrace_parse_probe_argument (gdbarch, &builder, argc);
+      expr::operation_up op = gdbarch_dtrace_parse_probe_argument (gdbarch,
+								   argc);
 
       /* Casting to the expected type, but only if the type was
 	 recognized at probe load time.  Otherwise the argument will
 	 be evaluated as the long integer passed to the probe.  */
       if (arg.type != NULL)
-	{
-	  write_exp_elt_opcode (&builder, UNOP_CAST);
-	  write_exp_elt_type (&builder, arg.type);
-	  write_exp_elt_opcode (&builder, UNOP_CAST);
-	}
+	op = expr::make_operation<expr::unop_cast_operation> (std::move (op),
+							      arg.type);
 
+      builder.set_operation (std::move (op));
       arg.expr = builder.release ();
-      prefixify_expression (arg.expr.get ());
       ++argc;
     }
 }
@@ -685,8 +684,7 @@ dtrace_probe::is_enabled () const
 CORE_ADDR
 dtrace_probe::get_relocated_address (struct objfile *objfile)
 {
-  return this->get_address () + ANOFFSET (objfile->section_offsets,
-					  SECT_OFF_DATA (objfile));
+  return this->get_address () + objfile->data_section_offset ();
 }
 
 /* Implementation of the get_argument_count method.  */
@@ -715,11 +713,9 @@ dtrace_probe::evaluate_argument (unsigne
 {
   struct gdbarch *gdbarch = this->get_gdbarch ();
   struct dtrace_probe_arg *arg;
-  int pos = 0;
 
   arg = this->get_arg_by_number (n, gdbarch);
-  return evaluate_subexp_standard (arg->type, arg->expr.get (), &pos,
-				   EVAL_NORMAL);
+  return evaluate_expression (arg->expr.get (), arg->type);
 }
 
 /* Implementation of the compile_to_ax method.  */
@@ -729,12 +725,9 @@ dtrace_probe::compile_to_ax (struct agen
 			     unsigned n)
 {
   struct dtrace_probe_arg *arg;
-  union exp_element *pc;
 
   arg = this->get_arg_by_number (n, expr->gdbarch);
-
-  pc = arg->expr->elts;
-  gen_expr (arg->expr.get (), &pc, expr, value);
+  arg->expr->op->generate_ax (arg->expr.get (), expr, value);
 
   require_rvalue (expr, value);
   value->type = arg->type;
@@ -857,11 +850,11 @@ dtrace_static_probe_ops::get_probes
 	     extract the information of any probe defined into it.  */
 	  if (bfd_malloc_and_get_section (abfd, sect, &dof) && dof != NULL)
 	    dtrace_process_dof (sect, objfile, probesp,
-			        (struct dtrace_dof_hdr *) dof);
-         else
+				(struct dtrace_dof_hdr *) dof);
+	 else
 	    complaint (_("could not obtain the contents of"
 			 "section '%s' in objfile `%s'."),
-		       sect->name, abfd->filename);
+		       bfd_section_name (sect), bfd_get_filename (abfd));
 
 	  xfree (dof);
 	}
@@ -897,8 +890,9 @@ info_probes_dtrace_command (const char *
   info_probes_for_spops (arg, from_tty, &dtrace_static_probe_ops);
 }
 
+void _initialize_dtrace_probe ();
 void
-_initialize_dtrace_probe (void)
+_initialize_dtrace_probe ()
 {
   all_static_probe_ops.push_back (&dtrace_static_probe_ops);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dummy-frame.c ./gdb/dummy-frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dummy-frame.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dummy-frame.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Code dealing with dummy stack frames, for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -166,10 +166,9 @@ pop_dummy_frame (struct dummy_frame **du
 
   restore_infcall_suspend_state (dummy->caller_state);
 
-  iterate_over_breakpoints ([dummy] (breakpoint* bp)
-    {
-      return pop_dummy_frame_bpt (bp, dummy);
-    });
+  for (breakpoint *bp : all_breakpoints_safe ())
+    if (pop_dummy_frame_bpt (bp, dummy))
+      break;
 
   /* restore_infcall_control_state frees inf_state,
      all that remains is to pop *dummy_ptr.  */
@@ -273,7 +272,7 @@ find_dummy_frame_dtor (dummy_frame_dtor_
    them up at least once whenever we start a new inferior.  */
 
 static void
-cleanup_dummy_frames (struct target_ops *target, int from_tty)
+cleanup_dummy_frames (inferior *inf)
 {
   while (dummy_frame_stack != NULL)
     remove_dummy_frame (&dummy_frame_stack);
@@ -379,6 +378,7 @@ dummy_frame_this_id (struct frame_info *
 
 const struct frame_unwind dummy_frame_unwind =
 {
+  "dummy",
   DUMMY_FRAME,
   default_frame_unwind_stop_reason,
   dummy_frame_this_id,
@@ -408,8 +408,7 @@ fprint_dummy_frames (struct ui_file *fil
     {
       gdb_print_host_address (s, file);
       fprintf_unfiltered (file, ":");
-      fprintf_unfiltered (file, " id=");
-      fprint_frame_id (file, s->id.id);
+      fprintf_unfiltered (file, " id=%s", s->id.id.to_string ().c_str ());
       fprintf_unfiltered (file, ", ptid=%s",
 			  target_pid_to_str (s->id.thread->ptid).c_str ());
       fprintf_unfiltered (file, "\n");
@@ -431,12 +430,13 @@ maintenance_print_dummy_frames (const ch
     }
 }
 
+void _initialize_dummy_frame ();
 void
-_initialize_dummy_frame (void)
+_initialize_dummy_frame ()
 {
   add_cmd ("dummy-frames", class_maintenance, maintenance_print_dummy_frames,
 	   _("Print the contents of the internal dummy-frame stack."),
 	   &maintenanceprintlist);
 
-  gdb::observers::inferior_created.attach (cleanup_dummy_frames);
+  gdb::observers::inferior_created.attach (cleanup_dummy_frames, "dummy-frame");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dummy-frame.h ./gdb/dummy-frame.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dummy-frame.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dummy-frame.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Code dealing with dummy stack frames, for GDB, the GNU debugger.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-valprint.c ./gdb/d-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/d-valprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/d-valprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing D values for GDB, the GNU debugger.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,8 +34,8 @@ dynamic_array_type (struct type *type,
 		    struct value *val,
 		    const struct value_print_options *options)
 {
-  if (TYPE_NFIELDS (type) == 2
-      && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_INT
+  if (type->num_fields () == 2
+      && type->field (0).type ()->code () == TYPE_CODE_INT
       && strcmp (TYPE_FIELD_NAME (type, 0), "length") == 0
       && strcmp (TYPE_FIELD_NAME (type, 1), "ptr") == 0
       && !value_bits_any_optimized_out (val,
@@ -52,7 +52,7 @@ dynamic_array_type (struct type *type,
 
       length = unpack_field_as_long (type, valaddr + embedded_offset, 0);
 
-      ptr_type = TYPE_FIELD_TYPE (type, 1);
+      ptr_type = type->field (1).type ();
       elttype = check_typedef (TYPE_TARGET_TYPE (ptr_type));
       addr = unpack_pointer (ptr_type,
 			     valaddr + TYPE_FIELD_BITPOS (type, 1) / 8
@@ -63,34 +63,32 @@ dynamic_array_type (struct type *type,
       ival = value_at (true_type, addr);
       true_type = value_type (ival);
 
-      d_val_print (true_type,
-		   value_embedded_offset (ival), addr,
-		   stream, recurse + 1, ival, options);
+      d_value_print_inner (ival, stream, recurse + 1, options);
       return 0;
     }
   return 1;
 }
 
-/* Implements the la_val_print routine for language D.  */
+/* See d-lang.h.  */
+
 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)
+d_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
+		     const struct value_print_options *options)
 {
   int ret;
 
-  type = check_typedef (type);
-  switch (TYPE_CODE (type))
+  struct type *type = check_typedef (value_type (val));
+  switch (type->code ())
     {
       case TYPE_CODE_STRUCT:
-	ret = dynamic_array_type (type, embedded_offset, address,
+	ret = dynamic_array_type (type, value_embedded_offset (val),
+				  value_address (val),
 				  stream, recurse, val, options);
 	if (ret == 0)
 	  break;
 	/* Fall through.  */
       default:
-	c_val_print (type, embedded_offset, address, stream,
-		     recurse, val, options);
+	c_value_print_inner (val, stream, recurse, options);
+	break;
     }
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/abbrev.c ./gdb/dwarf2/abbrev.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/abbrev.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/abbrev.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,154 @@
+/* DWARF 2 abbreviations
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2/read.h"
+#include "dwarf2/abbrev.h"
+#include "dwarf2/leb.h"
+#include "bfd.h"
+
+/* Hash function for an abbrev.  */
+
+static hashval_t
+hash_abbrev (const void *item)
+{
+  const struct abbrev_info *info = (const struct abbrev_info *) item;
+  /* Warning: if you change this next line, you must also update the
+     other code in this class using the _with_hash functions.  */
+  return info->number;
+}
+
+/* Comparison function for abbrevs.  */
+
+static int
+eq_abbrev (const void *lhs, const void *rhs)
+{
+  const struct abbrev_info *l_info = (const struct abbrev_info *) lhs;
+  const struct abbrev_info *r_info = (const struct abbrev_info *) rhs;
+  return l_info->number == r_info->number;
+}
+
+/* Abbreviation tables.
+
+   In DWARF version 2, the description of the debugging information is
+   stored in a separate .debug_abbrev section.  Before we read any
+   dies from a section we read in all abbreviations and install them
+   in a hash table.  */
+
+abbrev_table::abbrev_table (sect_offset off)
+  : sect_off (off),
+    m_abbrevs (htab_create_alloc (20, hash_abbrev, eq_abbrev,
+				  nullptr, xcalloc, xfree))
+{
+}
+
+/* Add an abbreviation to the table.  */
+
+void
+abbrev_table::add_abbrev (struct abbrev_info *abbrev)
+{
+  void **slot = htab_find_slot_with_hash (m_abbrevs.get (), abbrev,
+					  abbrev->number, INSERT);
+  *slot = abbrev;
+}
+
+/* Read in an abbrev table.  */
+
+abbrev_table_up
+abbrev_table::read (struct dwarf2_section_info *section,
+		    sect_offset sect_off)
+{
+  bfd *abfd = section->get_bfd_owner ();
+  const gdb_byte *abbrev_ptr;
+  struct abbrev_info *cur_abbrev;
+
+  abbrev_table_up abbrev_table (new struct abbrev_table (sect_off));
+  struct obstack *obstack = &abbrev_table->m_abbrev_obstack;
+
+  /* Caller must ensure this.  */
+  gdb_assert (section->readin);
+  abbrev_ptr = section->buffer + to_underlying (sect_off);
+
+  while (true)
+    {
+      unsigned int bytes_read;
+      /* Loop until we reach an abbrev number of 0.  */
+      unsigned int abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr,
+							 &bytes_read);
+      if (abbrev_number == 0)
+	break;
+      abbrev_ptr += bytes_read;
+
+      /* Start without any attrs.  */
+      obstack_blank (obstack, offsetof (abbrev_info, attrs));
+      cur_abbrev = (struct abbrev_info *) obstack_base (obstack);
+
+      /* Read in abbrev header.  */
+      cur_abbrev->number = abbrev_number;
+      cur_abbrev->tag
+	= (enum dwarf_tag) read_unsigned_leb128 (abfd, abbrev_ptr,
+						 &bytes_read);
+      abbrev_ptr += bytes_read;
+      cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
+      abbrev_ptr += 1;
+
+      /* Now read in declarations.  */
+      int num_attrs = 0;
+      for (;;)
+	{
+	  struct attr_abbrev cur_attr;
+
+	  cur_attr.name
+	    = (enum dwarf_attribute) read_unsigned_leb128 (abfd, abbrev_ptr,
+							   &bytes_read);
+	  abbrev_ptr += bytes_read;
+	  cur_attr.form
+	    = (enum dwarf_form) read_unsigned_leb128 (abfd, abbrev_ptr,
+						      &bytes_read);
+	  abbrev_ptr += bytes_read;
+	  if (cur_attr.form == DW_FORM_implicit_const)
+	    {
+	      cur_attr.implicit_const = read_signed_leb128 (abfd, abbrev_ptr,
+							    &bytes_read);
+	      abbrev_ptr += bytes_read;
+	    }
+	  else
+	    cur_attr.implicit_const = -1;
+
+	  if (cur_attr.name == 0)
+	    break;
+
+	  ++num_attrs;
+	  obstack_grow (obstack, &cur_attr, sizeof (cur_attr));
+	}
+
+      cur_abbrev = (struct abbrev_info *) obstack_finish (obstack);
+      cur_abbrev->num_attrs = num_attrs;
+      abbrev_table->add_abbrev (cur_abbrev);
+    }
+
+  return abbrev_table;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/abbrev.h ./gdb/dwarf2/abbrev.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/abbrev.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/abbrev.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,104 @@
+/* DWARF abbrev table
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 GDB_DWARF2_ABBREV_H
+#define GDB_DWARF2_ABBREV_H
+
+#include "hashtab.h"
+
+struct attr_abbrev
+{
+  ENUM_BITFIELD(dwarf_attribute) name : 16;
+  ENUM_BITFIELD(dwarf_form) form : 16;
+
+  /* It is valid only if FORM is DW_FORM_implicit_const.  */
+  LONGEST implicit_const;
+};
+
+/* This data structure holds the information of an abbrev.  */
+struct abbrev_info
+{
+  /* Number identifying abbrev.  */
+  unsigned int number;
+  /* DWARF tag.  */
+  enum dwarf_tag tag;
+  /* True if the DIE has children.  */
+  unsigned short has_children;
+  /* Number of attributes.  */
+  unsigned short num_attrs;
+  /* An array of attribute descriptions, allocated using the struct
+     hack.  */
+  struct attr_abbrev attrs[1];
+};
+
+struct abbrev_table;
+typedef std::unique_ptr<struct abbrev_table> abbrev_table_up;
+
+/* Top level data structure to contain an abbreviation table.  */
+
+struct abbrev_table
+{
+  /* Read an abbrev table from the indicated section, at the given
+     offset.  The caller is responsible for ensuring that the section
+     has already been read.  */
+
+  static abbrev_table_up read (struct dwarf2_section_info *section,
+			       sect_offset sect_off);
+
+  /* Look up an abbrev in the table.
+     Returns NULL if the abbrev is not found.  */
+
+  const struct abbrev_info *lookup_abbrev (unsigned int abbrev_number) const
+  {
+    struct abbrev_info search;
+    search.number = abbrev_number;
+
+    return (struct abbrev_info *) htab_find_with_hash (m_abbrevs.get (),
+						       &search,
+						       abbrev_number);
+  }
+
+  /* Where the abbrev table came from.
+     This is used as a sanity check when the table is used.  */
+  const sect_offset sect_off;
+
+private:
+
+  explicit abbrev_table (sect_offset off);
+
+  DISABLE_COPY_AND_ASSIGN (abbrev_table);
+
+  /* Add an abbreviation to the table.  */
+  void add_abbrev (struct abbrev_info *abbrev);
+
+  /* Hash table of abbrevs.  */
+  htab_up m_abbrevs;
+
+  /* Storage for the abbrev table.  */
+  auto_obstack m_abbrev_obstack;
+};
+
+#endif /* GDB_DWARF2_ABBREV_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/attribute.c ./gdb/dwarf2/attribute.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/attribute.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/attribute.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,271 @@
+/* DWARF attributes
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2/attribute.h"
+#include "dwarf2/stringify.h"
+#include "complaints.h"
+
+/* See attribute.h.  */
+
+CORE_ADDR
+attribute::as_address () const
+{
+  CORE_ADDR addr;
+
+  gdb_assert (!requires_reprocessing);
+
+  if (form != DW_FORM_addr && form != DW_FORM_addrx
+      && form != DW_FORM_GNU_addr_index)
+    {
+      /* Aside from a few clearly defined exceptions, attributes that
+	 contain an address must always be in DW_FORM_addr form.
+	 Unfortunately, some compilers happen to be violating this
+	 requirement by encoding addresses using other forms, such
+	 as DW_FORM_data4 for example.  For those broken compilers,
+	 we try to do our best, without any guarantee of success,
+	 to interpret the address correctly.  It would also be nice
+	 to generate a complaint, but that would require us to maintain
+	 a list of legitimate cases where a non-address form is allowed,
+	 as well as update callers to pass in at least the CU's DWARF
+	 version.  This is more overhead than what we're willing to
+	 expand for a pretty rare case.  */
+      addr = u.unsnd;
+    }
+  else
+    addr = u.addr;
+
+  return addr;
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_is_string () const
+{
+  return (form == DW_FORM_strp || form == DW_FORM_line_strp
+	  || form == DW_FORM_string
+	  || form == DW_FORM_strx
+	  || form == DW_FORM_strx1
+	  || form == DW_FORM_strx2
+	  || form == DW_FORM_strx3
+	  || form == DW_FORM_strx4
+	  || form == DW_FORM_GNU_str_index
+	  || form == DW_FORM_GNU_strp_alt);
+}
+
+/* See attribute.h.  */
+
+const char *
+attribute::as_string () const
+{
+  gdb_assert (!requires_reprocessing);
+  if (form_is_string ())
+    return u.str;
+  return nullptr;
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_is_block () const
+{
+  return (form == DW_FORM_block1
+	  || form == DW_FORM_block2
+	  || form == DW_FORM_block4
+	  || form == DW_FORM_block
+	  || form == DW_FORM_exprloc
+	  || form == DW_FORM_data16);
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_is_section_offset () const
+{
+  return (form == DW_FORM_data4
+	  || form == DW_FORM_data8
+	  || form == DW_FORM_sec_offset
+	  || form == DW_FORM_loclistx);
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_is_constant () const
+{
+  switch (form)
+    {
+    case DW_FORM_sdata:
+    case DW_FORM_udata:
+    case DW_FORM_data1:
+    case DW_FORM_data2:
+    case DW_FORM_data4:
+    case DW_FORM_data8:
+    case DW_FORM_implicit_const:
+      return true;
+    default:
+      return false;
+    }
+}
+
+/* See attribute.h.  */
+
+void
+attribute::get_ref_die_offset_complaint () const
+{
+  complaint (_("unsupported die ref attribute form: '%s'"),
+	     dwarf_form_name (form));
+}
+
+/* See attribute.h.  */
+
+LONGEST
+attribute::constant_value (int default_value) const
+{
+  if (form == DW_FORM_sdata || form == DW_FORM_implicit_const)
+    return u.snd;
+  else if (form == DW_FORM_udata
+	   || form == DW_FORM_data1
+	   || form == DW_FORM_data2
+	   || form == DW_FORM_data4
+	   || form == DW_FORM_data8)
+    return u.unsnd;
+  else
+    {
+      /* For DW_FORM_data16 see attribute::form_is_constant.  */
+      complaint (_("Attribute value is not a constant (%s)"),
+		 dwarf_form_name (form));
+      return default_value;
+    }
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_is_unsigned () const
+{
+  return (form == DW_FORM_ref_addr
+	  || form == DW_FORM_GNU_ref_alt
+	  || form == DW_FORM_data2
+	  || form == DW_FORM_data4
+	  || form == DW_FORM_data8
+	  || form == DW_FORM_sec_offset
+	  || form == DW_FORM_data1
+	  || form == DW_FORM_flag
+	  || form == DW_FORM_flag_present
+	  || form == DW_FORM_udata
+	  || form == DW_FORM_rnglistx
+	  || form == DW_FORM_loclistx
+	  || form == DW_FORM_ref1
+	  || form == DW_FORM_ref2
+	  || form == DW_FORM_ref4
+	  || form == DW_FORM_ref8
+	  || form == DW_FORM_ref_udata);
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_is_signed () const
+{
+  return form == DW_FORM_sdata || form == DW_FORM_implicit_const;
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::form_requires_reprocessing () const
+{
+  return (form == DW_FORM_strx
+	  || form == DW_FORM_strx1
+	  || form == DW_FORM_strx2
+	  || form == DW_FORM_strx3
+	  || form == DW_FORM_strx4
+	  || form == DW_FORM_GNU_str_index
+	  || form == DW_FORM_addrx
+	  || form == DW_FORM_GNU_addr_index
+	  || form == DW_FORM_rnglistx
+	  || form == DW_FORM_loclistx);
+}
+
+/* See attribute.h.  */
+
+dwarf_defaulted_attribute
+attribute::defaulted () const
+{
+  LONGEST value = constant_value (-1);
+
+  switch (value)
+    {
+    case DW_DEFAULTED_no:
+    case DW_DEFAULTED_in_class:
+    case DW_DEFAULTED_out_of_class:
+      return (dwarf_defaulted_attribute) value;
+    }
+
+  /* If the form was not constant, we already complained in
+     constant_value, so there's no need to complain again.  */
+  if (form_is_constant ())
+    complaint (_("unrecognized DW_AT_defaulted value (%s)"),
+	       plongest (value));
+  return DW_DEFAULTED_no;
+}
+
+/* See attribute.h.  */
+
+dwarf_virtuality_attribute
+attribute::as_virtuality () const
+{
+  LONGEST value = constant_value (-1);
+
+  switch (value)
+    {
+    case DW_VIRTUALITY_none:
+    case DW_VIRTUALITY_virtual:
+    case DW_VIRTUALITY_pure_virtual:
+      return (dwarf_virtuality_attribute) value;
+    }
+
+  /* If the form was not constant, we already complained in
+     constant_value, so there's no need to complain again.  */
+  if (form_is_constant ())
+    complaint (_("unrecognized DW_AT_virtuality value (%s)"),
+	       plongest (value));
+  return DW_VIRTUALITY_none;
+}
+
+/* See attribute.h.  */
+
+bool
+attribute::as_boolean () const
+{
+  if (form == DW_FORM_flag_present)
+    return true;
+  else if (form == DW_FORM_flag)
+    return u.unsnd != 0;
+  return constant_value (0) != 0;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/attribute.h ./gdb/dwarf2/attribute.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/attribute.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/attribute.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,334 @@
+/* DWARF attributes
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 GDB_DWARF2_ATTRIBUTE_H
+#define GDB_DWARF2_ATTRIBUTE_H
+
+#include "dwarf2.h"
+#include "gdbtypes.h"
+#include "gdbsupport/gdb_optional.h"
+
+/* Blocks are a bunch of untyped bytes.  */
+struct dwarf_block
+{
+  size_t size;
+
+  /* Valid only if SIZE is not zero.  */
+  const gdb_byte *data;
+};
+
+/* Attributes have a name and a value.  */
+struct attribute
+{
+  /* Read the given attribute value as an address, taking the
+     attribute's form into account.  */
+  CORE_ADDR as_address () const;
+
+  /* If the attribute has a string form, return the string value;
+     otherwise return NULL.  */
+  const char *as_string () const;
+
+  /* Return the block value.  The attribute must have block form.  */
+  dwarf_block *as_block () const
+  {
+    gdb_assert (form_is_block ());
+    return u.blk;
+  }
+
+  /* Return the signature.  The attribute must have signature
+     form.  */
+  ULONGEST as_signature () const
+  {
+    gdb_assert (form == DW_FORM_ref_sig8);
+    return u.signature;
+  }
+
+  /* Return the signed value.  The attribute must have the appropriate
+     form.  */
+  LONGEST as_signed () const
+  {
+    gdb_assert (form_is_signed ());
+    return u.snd;
+  }
+
+  /* Return the unsigned value, but only for attributes requiring
+     reprocessing.  */
+  ULONGEST as_unsigned_reprocess () const
+  {
+    gdb_assert (form_requires_reprocessing ());
+    gdb_assert (requires_reprocessing);
+    return u.unsnd;
+  }
+
+  /* Return the unsigned value.  Requires that the form be an unsigned
+     form, and that reprocessing not be needed.  */
+  ULONGEST as_unsigned () const
+  {
+    gdb_assert (form_is_unsigned ());
+    gdb_assert (!requires_reprocessing);
+    return u.unsnd;
+  }
+
+  /* Return true if the value is nonnegative.  Requires that that
+     reprocessing not be needed.  */
+  bool is_nonnegative () const
+  {
+    if (form_is_unsigned ())
+      return true;
+    if (form_is_signed ())
+      return as_signed () >= 0;
+    return false;
+  }
+
+  /* Return the nonnegative value.  Requires that that reprocessing not be
+     needed.  */
+  ULONGEST as_nonnegative () const
+  {
+    if (form_is_unsigned ())
+      return as_unsigned ();
+    if (form_is_signed ())
+      return (ULONGEST)as_signed ();
+    gdb_assert (false);
+  }
+
+  /* Return non-zero if ATTR's value is a section offset --- classes
+     lineptr, loclistptr, macptr or rangelistptr --- or zero, otherwise.
+     You may use the as_unsigned method to retrieve such offsets.
+
+     Section 7.5.4, "Attribute Encodings", explains that no attribute
+     may have a value that belongs to more than one of these classes; it
+     would be ambiguous if we did, because we use the same forms for all
+     of them.  */
+
+  bool form_is_section_offset () const;
+
+  /* Return non-zero if ATTR's value falls in the 'constant' class, or
+     zero otherwise.  When this function returns true, you can apply
+     the constant_value method to it.
+
+     However, note that for some attributes you must check
+     attr_form_is_section_offset before using this test.  DW_FORM_data4
+     and DW_FORM_data8 are members of both the constant class, and of
+     the classes that contain offsets into other debug sections
+     (lineptr, loclistptr, macptr or rangelistptr).  The DWARF spec says
+     that, if an attribute's can be either a constant or one of the
+     section offset classes, DW_FORM_data4 and DW_FORM_data8 should be
+     taken as section offsets, not constants.
+
+     DW_FORM_data16 is not considered as constant_value cannot handle
+     that.  */
+
+  bool form_is_constant () const;
+
+  /* The address is always stored already as sect_offset; despite for
+     the forms besides DW_FORM_ref_addr it is stored as cu_offset in
+     the DWARF file.  */
+
+  bool form_is_ref () const
+  {
+    return (form == DW_FORM_ref_addr
+	    || form == DW_FORM_ref1
+	    || form == DW_FORM_ref2
+	    || form == DW_FORM_ref4
+	    || form == DW_FORM_ref8
+	    || form == DW_FORM_ref_udata
+	    || form == DW_FORM_GNU_ref_alt);
+  }
+
+  /* Check if the attribute's form is a DW_FORM_block*
+     if so return true else false.  */
+
+  bool form_is_block () const;
+
+  /* Check if the attribute's form is a string form.  */
+  bool form_is_string () const;
+
+  /* Check if the attribute's form is an unsigned integer form.  */
+  bool form_is_unsigned () const;
+
+  /* Check if the attribute's form is a signed integer form.  */
+  bool form_is_signed () const;
+
+  /* Check if the attribute's form is a form that requires
+     "reprocessing".  */
+  bool form_requires_reprocessing () const;
+
+  /* Return DIE offset of this attribute.  Return 0 with complaint if
+     the attribute is not of the required kind.  */
+
+  sect_offset get_ref_die_offset () const
+  {
+    if (form_is_ref ())
+      return (sect_offset) u.unsnd;
+    get_ref_die_offset_complaint ();
+    return {};
+  }
+
+  /* Return the constant value held by this attribute.  Return
+     DEFAULT_VALUE if the value held by the attribute is not
+     constant.  */
+
+  LONGEST constant_value (int default_value) const;
+
+  /* Return true if this attribute holds a canonical string.  In some
+     cases, like C++ names, gdb will rewrite the name of a DIE to a
+     canonical form.  This makes lookups robust when a name can be
+     spelled different ways (e.g., "signed" or "signed int").  This
+     flag indicates whether the value has been canonicalized.  */
+  bool canonical_string_p () const
+  {
+    gdb_assert (form_is_string ());
+    return string_is_canonical;
+  }
+
+  /* Initialize this attribute to hold a non-canonical string
+     value.  */
+  void set_string_noncanonical (const char *str)
+  {
+    gdb_assert (form_is_string ());
+    u.str = str;
+    string_is_canonical = 0;
+    requires_reprocessing = 0;
+  }
+
+  /* Set the canonical string value for this attribute.  */
+  void set_string_canonical (const char *str)
+  {
+    gdb_assert (form_is_string ());
+    u.str = str;
+    string_is_canonical = 1;
+  }
+
+  /* Set the block value for this attribute.  */
+  void set_block (dwarf_block *blk)
+  {
+    gdb_assert (form_is_block ());
+    u.blk = blk;
+  }
+
+  /* Set the signature value for this attribute.  */
+  void set_signature (ULONGEST signature)
+  {
+    gdb_assert (form == DW_FORM_ref_sig8);
+    u.signature = signature;
+  }
+
+  /* Set this attribute to a signed integer.  */
+  void set_signed (LONGEST snd)
+  {
+    gdb_assert (form == DW_FORM_sdata || form == DW_FORM_implicit_const);
+    u.snd = snd;
+  }
+
+  /* Set this attribute to an unsigned integer.  */
+  void set_unsigned (ULONGEST unsnd)
+  {
+    gdb_assert (form_is_unsigned ());
+    u.unsnd = unsnd;
+    requires_reprocessing = 0;
+  }
+
+  /* Temporarily set this attribute to an unsigned integer.  This is
+     used only for those forms that require reprocessing.  */
+  void set_unsigned_reprocess (ULONGEST unsnd)
+  {
+    gdb_assert (form_requires_reprocessing ());
+    u.unsnd = unsnd;
+    requires_reprocessing = 1;
+  }
+
+  /* Set this attribute to an address.  */
+  void set_address (CORE_ADDR addr)
+  {
+    gdb_assert (form == DW_FORM_addr
+		|| ((form == DW_FORM_addrx
+		     || form == DW_FORM_GNU_addr_index)
+		    && requires_reprocessing));
+    u.addr = addr;
+    requires_reprocessing = 0;
+  }
+
+  /* True if this attribute requires reprocessing.  */
+  bool requires_reprocessing_p () const
+  {
+    return requires_reprocessing;
+  }
+
+  /* Return the value as one of the recognized enum
+     dwarf_defaulted_attribute constants according to DWARF5 spec,
+     Table 7.24.  If the value is incorrect, or if this attribute has
+     the wrong form, then a complaint is issued and DW_DEFAULTED_no is
+     returned.  */
+  dwarf_defaulted_attribute defaulted () const;
+
+  /* Return the attribute's value as a dwarf_virtuality_attribute
+     constant according to DWARF spec.  An unrecognized value will
+     issue a complaint and return DW_VIRTUALITY_none.  */
+  dwarf_virtuality_attribute as_virtuality () const;
+
+  /* Return the attribute's value as a boolean.  An unrecognized form
+     will issue a complaint and return false.  */
+  bool as_boolean () const;
+
+  ENUM_BITFIELD(dwarf_attribute) name : 15;
+
+  /* A boolean that is used for forms that require reprocessing.  A
+     form may require data not directly available in the attribute.
+     E.g., DW_FORM_strx requires the corresponding
+     DW_AT_str_offsets_base.  In this case, the processing for the
+     attribute must be done in two passes.  In the first past, this
+     flag is set and the value is an unsigned.  In the second pass,
+     the unsigned value is turned into the correct value for the form,
+     and this flag is cleared.  This flag is unused for other
+     forms.  */
+  unsigned int requires_reprocessing : 1;
+
+  ENUM_BITFIELD(dwarf_form) form : 15;
+
+  /* Has u.str already been updated by dwarf2_canonicalize_name?  This
+     field should be in u.str but it is kept here for better struct
+     attribute alignment.  */
+  unsigned int string_is_canonical : 1;
+
+  union
+    {
+      const char *str;
+      struct dwarf_block *blk;
+      ULONGEST unsnd;
+      LONGEST snd;
+      CORE_ADDR addr;
+      ULONGEST signature;
+    }
+  u;
+
+private:
+
+  /* Used by get_ref_die_offset to issue a complaint.  */
+
+  void get_ref_die_offset_complaint () const;
+};
+
+#endif /* GDB_DWARF2_ATTRIBUTE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/comp-unit-head.c ./gdb/dwarf2/comp-unit-head.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/comp-unit-head.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/comp-unit-head.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,246 @@
+/* DWARF 2 debugging format support for GDB.
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2/comp-unit-head.h"
+#include "dwarf2/leb.h"
+#include "dwarf2/read.h"
+#include "dwarf2/section.h"
+#include "dwarf2/stringify.h"
+
+/* See comp-unit-head.h.  */
+
+const gdb_byte *
+read_comp_unit_head (struct comp_unit_head *cu_header,
+		     const gdb_byte *info_ptr,
+		     struct dwarf2_section_info *section,
+		     rcuh_kind section_kind)
+{
+  int signed_addr;
+  unsigned int bytes_read;
+  const char *filename = section->get_file_name ();
+  bfd *abfd = section->get_bfd_owner ();
+
+  cu_header->length = read_initial_length (abfd, info_ptr, &bytes_read);
+  cu_header->initial_length_size = bytes_read;
+  cu_header->offset_size = (bytes_read == 4) ? 4 : 8;
+  info_ptr += bytes_read;
+  unsigned version = read_2_bytes (abfd, info_ptr);
+  if (version < 2 || version > 5)
+    error (_("Dwarf Error: wrong version in compilation unit header "
+	   "(is %d, should be 2, 3, 4 or 5) [in module %s]"),
+	   version, filename);
+  cu_header->version = version;
+  info_ptr += 2;
+  if (cu_header->version < 5)
+    switch (section_kind)
+      {
+      case rcuh_kind::COMPILE:
+	cu_header->unit_type = DW_UT_compile;
+	break;
+      case rcuh_kind::TYPE:
+	cu_header->unit_type = DW_UT_type;
+	break;
+      default:
+	internal_error (__FILE__, __LINE__,
+			_("read_comp_unit_head: invalid section_kind"));
+      }
+  else
+    {
+      cu_header->unit_type = static_cast<enum dwarf_unit_type>
+						 (read_1_byte (abfd, info_ptr));
+      info_ptr += 1;
+      switch (cu_header->unit_type)
+	{
+	case DW_UT_compile:
+	case DW_UT_partial:
+	case DW_UT_skeleton:
+	case DW_UT_split_compile:
+	  if (section_kind != rcuh_kind::COMPILE)
+	    error (_("Dwarf Error: wrong unit_type in compilation unit header "
+		   "(is %s, should be %s) [in module %s]"),
+		   dwarf_unit_type_name (cu_header->unit_type),
+		   dwarf_unit_type_name (DW_UT_type), filename);
+	  break;
+	case DW_UT_type:
+	case DW_UT_split_type:
+	  section_kind = rcuh_kind::TYPE;
+	  break;
+	default:
+	  error (_("Dwarf Error: wrong unit_type in compilation unit header "
+		 "(is %#04x, should be one of: %s, %s, %s, %s or %s) "
+		 "[in module %s]"), cu_header->unit_type,
+		 dwarf_unit_type_name (DW_UT_compile),
+		 dwarf_unit_type_name (DW_UT_skeleton),
+		 dwarf_unit_type_name (DW_UT_split_compile),
+		 dwarf_unit_type_name (DW_UT_type),
+		 dwarf_unit_type_name (DW_UT_split_type), filename);
+	}
+
+      cu_header->addr_size = read_1_byte (abfd, info_ptr);
+      info_ptr += 1;
+    }
+  cu_header->abbrev_sect_off
+    = (sect_offset) cu_header->read_offset (abfd, info_ptr, &bytes_read);
+  info_ptr += bytes_read;
+  if (cu_header->version < 5)
+    {
+      cu_header->addr_size = read_1_byte (abfd, info_ptr);
+      info_ptr += 1;
+    }
+  signed_addr = bfd_get_sign_extend_vma (abfd);
+  if (signed_addr < 0)
+    internal_error (__FILE__, __LINE__,
+		    _("read_comp_unit_head: dwarf from non elf file"));
+  cu_header->signed_addr_p = signed_addr;
+
+  bool header_has_signature = section_kind == rcuh_kind::TYPE
+    || cu_header->unit_type == DW_UT_skeleton
+    || cu_header->unit_type == DW_UT_split_compile;
+
+  if (header_has_signature)
+    {
+      cu_header->signature = read_8_bytes (abfd, info_ptr);
+      info_ptr += 8;
+    }
+
+  if (section_kind == rcuh_kind::TYPE)
+    {
+      LONGEST type_offset;
+      type_offset = cu_header->read_offset (abfd, info_ptr, &bytes_read);
+      info_ptr += bytes_read;
+      cu_header->type_cu_offset_in_tu = (cu_offset) type_offset;
+      if (to_underlying (cu_header->type_cu_offset_in_tu) != type_offset)
+	error (_("Dwarf Error: Too big type_offset in compilation unit "
+	       "header (is %s) [in module %s]"), plongest (type_offset),
+	       filename);
+    }
+
+  return info_ptr;
+}
+
+/* Subroutine of read_and_check_comp_unit_head and
+   read_and_check_type_unit_head to simplify them.
+   Perform various error checking on the header.  */
+
+static void
+error_check_comp_unit_head (dwarf2_per_objfile *per_objfile,
+			    struct comp_unit_head *header,
+			    struct dwarf2_section_info *section,
+			    struct dwarf2_section_info *abbrev_section)
+{
+  const char *filename = section->get_file_name ();
+
+  if (to_underlying (header->abbrev_sect_off)
+      >= abbrev_section->get_size (per_objfile->objfile))
+    error (_("Dwarf Error: bad offset (%s) in compilation unit header "
+	   "(offset %s + 6) [in module %s]"),
+	   sect_offset_str (header->abbrev_sect_off),
+	   sect_offset_str (header->sect_off),
+	   filename);
+
+  /* Cast to ULONGEST to use 64-bit arithmetic when possible to
+     avoid potential 32-bit overflow.  */
+  if (((ULONGEST) header->sect_off + header->get_length ())
+      > section->size)
+    error (_("Dwarf Error: bad length (0x%x) in compilation unit header "
+	   "(offset %s + 0) [in module %s]"),
+	   header->length, sect_offset_str (header->sect_off),
+	   filename);
+}
+
+/* See comp-unit-head.h.  */
+
+const gdb_byte *
+read_and_check_comp_unit_head (dwarf2_per_objfile *per_objfile,
+			       struct comp_unit_head *header,
+			       struct dwarf2_section_info *section,
+			       struct dwarf2_section_info *abbrev_section,
+			       const gdb_byte *info_ptr,
+			       rcuh_kind section_kind)
+{
+  const gdb_byte *beg_of_comp_unit = info_ptr;
+
+  header->sect_off = (sect_offset) (beg_of_comp_unit - section->buffer);
+
+  info_ptr = read_comp_unit_head (header, info_ptr, section, section_kind);
+
+  header->first_die_cu_offset = (cu_offset) (info_ptr - beg_of_comp_unit);
+
+  error_check_comp_unit_head (per_objfile, header, section, abbrev_section);
+
+  return info_ptr;
+}
+
+CORE_ADDR
+comp_unit_head::read_address (bfd *abfd, const gdb_byte *buf,
+			      unsigned int *bytes_read) const
+{
+  CORE_ADDR retval = 0;
+
+  if (signed_addr_p)
+    {
+      switch (addr_size)
+	{
+	case 2:
+	  retval = bfd_get_signed_16 (abfd, buf);
+	  break;
+	case 4:
+	  retval = bfd_get_signed_32 (abfd, buf);
+	  break;
+	case 8:
+	  retval = bfd_get_signed_64 (abfd, buf);
+	  break;
+	default:
+	  internal_error (__FILE__, __LINE__,
+			  _("read_address: bad switch, signed [in module %s]"),
+			  bfd_get_filename (abfd));
+	}
+    }
+  else
+    {
+      switch (addr_size)
+	{
+	case 2:
+	  retval = bfd_get_16 (abfd, buf);
+	  break;
+	case 4:
+	  retval = bfd_get_32 (abfd, buf);
+	  break;
+	case 8:
+	  retval = bfd_get_64 (abfd, buf);
+	  break;
+	default:
+	  internal_error (__FILE__, __LINE__,
+			  _("read_address: bad switch, "
+			    "unsigned [in module %s]"),
+			  bfd_get_filename (abfd));
+	}
+    }
+
+  *bytes_read = addr_size;
+  return retval;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/comp-unit-head.h ./gdb/dwarf2/comp-unit-head.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/comp-unit-head.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/comp-unit-head.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,121 @@
+/* Low-level DWARF 2 reading code
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 GDB_DWARF2_COMP_UNIT_H
+#define GDB_DWARF2_COMP_UNIT_H
+
+#include "dwarf2/leb.h"
+#include "gdbtypes.h"
+
+/* The data in a compilation unit header, after target2host
+   translation, looks like this.  */
+struct comp_unit_head
+{
+  unsigned int length;
+  unsigned char version;
+  unsigned char addr_size;
+  unsigned char signed_addr_p;
+  sect_offset abbrev_sect_off;
+
+  /* Size of file offsets; either 4 or 8.  */
+  unsigned int offset_size;
+
+  /* Size of the length field; either 4 or 12.  */
+  unsigned int initial_length_size;
+
+  enum dwarf_unit_type unit_type;
+
+  /* Offset to first die in this cu from the start of the cu.
+     This will be the first byte following the compilation unit header.  */
+  cu_offset first_die_cu_offset;
+
+  /* Offset to the first byte of this compilation unit header in the
+     .debug_info section, for resolving relative reference dies.  */
+  sect_offset sect_off;
+
+  /* For types, offset in the type's DIE of the type defined by this TU.  */
+  cu_offset type_cu_offset_in_tu;
+
+  /* 64-bit signature of this unit. For type units, it denotes the signature of
+     the type (DW_UT_type in DWARF 4, additionally DW_UT_split_type in DWARF 5).
+     Also used in DWARF 5, to denote the dwo id when the unit type is
+     DW_UT_skeleton or DW_UT_split_compile.  */
+  ULONGEST signature;
+
+  /* Return the total length of the CU described by this header.  */
+  unsigned int get_length () const
+  {
+    return initial_length_size + length;
+  }
+
+  /* Return TRUE if OFF is within this CU.  */
+  bool offset_in_cu_p (sect_offset off) const
+  {
+    sect_offset bottom = sect_off;
+    sect_offset top = sect_off + get_length ();
+    return off >= bottom && off < top;
+  }
+
+  /* Read an offset from the data stream.  The size of the offset is
+     given by cu_header->offset_size.  */
+  LONGEST read_offset (bfd *abfd, const gdb_byte *buf,
+		       unsigned int *bytes_read) const
+  {
+    LONGEST offset = ::read_offset (abfd, buf, offset_size);
+    *bytes_read = offset_size;
+    return offset;
+  }
+
+  /* Read an address from BUF.  BYTES_READ is updated.  */
+  CORE_ADDR read_address (bfd *abfd, const gdb_byte *buf,
+			  unsigned int *bytes_read) const;
+};
+
+/* Expected enum dwarf_unit_type for read_comp_unit_head.  */
+enum class rcuh_kind { COMPILE, TYPE };
+
+/* Read in the comp unit header information from the debug_info at info_ptr.
+   Use rcuh_kind::COMPILE as the default type if not known by the caller.
+   NOTE: This leaves members offset, first_die_offset to be filled in
+   by the caller.  */
+extern const gdb_byte *read_comp_unit_head
+  (struct comp_unit_head *cu_header,
+   const gdb_byte *info_ptr,
+   struct dwarf2_section_info *section,
+   rcuh_kind section_kind);
+
+/* Read in a CU/TU header and perform some basic error checking.
+   The contents of the header are stored in HEADER.
+   The result is a pointer to the start of the first DIE.  */
+extern const gdb_byte *read_and_check_comp_unit_head
+  (dwarf2_per_objfile *per_objfile,
+   struct comp_unit_head *header,
+   struct dwarf2_section_info *section,
+   struct dwarf2_section_info *abbrev_section,
+   const gdb_byte *info_ptr,
+   rcuh_kind section_kind);
+
+#endif /* GDB_DWARF2_COMP_UNIT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/cu.c ./gdb/dwarf2/cu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/cu.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/cu.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,155 @@
+/* DWARF CU data structure
+
+   Copyright (C) 2021 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 "dwarf2/cu.h"
+#include "dwarf2/read.h"
+
+/* Initialize dwarf2_cu to read PER_CU, in the context of PER_OBJFILE.  */
+
+dwarf2_cu::dwarf2_cu (dwarf2_per_cu_data *per_cu,
+		      dwarf2_per_objfile *per_objfile)
+  : per_cu (per_cu),
+    per_objfile (per_objfile),
+    m_mark (false),
+    has_loclist (false),
+    checked_producer (false),
+    producer_is_gxx_lt_4_6 (false),
+    producer_is_gcc_lt_4_3 (false),
+    producer_is_icc (false),
+    producer_is_icc_lt_14 (false),
+    producer_is_codewarrior (false),
+    processing_has_namespace_info (false),
+    load_all_dies (false)
+{
+}
+
+/* See cu.h.  */
+
+struct type *
+dwarf2_cu::addr_sized_int_type (bool unsigned_p) const
+{
+  int addr_size = this->per_cu->addr_size ();
+  return this->per_objfile->int_type (addr_size, unsigned_p);
+}
+
+/* Start a symtab for DWARF.  NAME, COMP_DIR, LOW_PC are passed to the
+   buildsym_compunit constructor.  */
+
+struct compunit_symtab *
+dwarf2_cu::start_symtab (const char *name, const char *comp_dir,
+			 CORE_ADDR low_pc)
+{
+  gdb_assert (m_builder == nullptr);
+
+  m_builder.reset (new struct buildsym_compunit
+		   (this->per_objfile->objfile,
+		    name, comp_dir, per_cu->lang, low_pc));
+
+  list_in_scope = get_builder ()->get_file_symbols ();
+
+  get_builder ()->record_debugformat ("DWARF 2");
+  get_builder ()->record_producer (producer);
+
+  processing_has_namespace_info = false;
+
+  return get_builder ()->get_compunit_symtab ();
+}
+
+/* See read.h.  */
+
+struct type *
+dwarf2_cu::addr_type () const
+{
+  struct objfile *objfile = this->per_objfile->objfile;
+  struct type *void_type = objfile_type (objfile)->builtin_void;
+  struct type *addr_type = lookup_pointer_type (void_type);
+  int addr_size = this->per_cu->addr_size ();
+
+  if (TYPE_LENGTH (addr_type) == addr_size)
+    return addr_type;
+
+  addr_type = addr_sized_int_type (addr_type->is_unsigned ());
+  return addr_type;
+}
+
+/* A hashtab traversal function that marks the dependent CUs.  */
+
+static int
+dwarf2_mark_helper (void **slot, void *data)
+{
+  dwarf2_per_cu_data *per_cu = (dwarf2_per_cu_data *) *slot;
+  dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) data;
+  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+
+  /* cu->m_dependencies references may not yet have been ever read if
+     QUIT aborts reading of the chain.  As such dependencies remain
+     valid it is not much useful to track and undo them during QUIT
+     cleanups.  */
+  if (cu != nullptr)
+    cu->mark ();
+  return 1;
+}
+
+/* See dwarf2/cu.h.  */
+
+void
+dwarf2_cu::mark ()
+{
+  if (!m_mark)
+    {
+      m_mark = true;
+      if (m_dependencies != nullptr)
+	htab_traverse (m_dependencies, dwarf2_mark_helper, per_objfile);
+    }
+}
+
+/* See dwarf2/cu.h.  */
+
+void
+dwarf2_cu::add_dependence (struct dwarf2_per_cu_data *ref_per_cu)
+{
+  void **slot;
+
+  if (m_dependencies == nullptr)
+    m_dependencies
+      = htab_create_alloc_ex (5, htab_hash_pointer, htab_eq_pointer,
+			      NULL, &comp_unit_obstack,
+			      hashtab_obstack_allocate,
+			      dummy_obstack_deallocate);
+
+  slot = htab_find_slot (m_dependencies, ref_per_cu, INSERT);
+  if (*slot == nullptr)
+    *slot = ref_per_cu;
+}
+
+/* See dwarf2/cu.h.  */
+
+buildsym_compunit *
+dwarf2_cu::get_builder ()
+{
+  /* If this CU has a builder associated with it, use that.  */
+  if (m_builder != nullptr)
+    return m_builder.get ();
+
+  if (per_objfile->sym_cu != nullptr)
+    return per_objfile->sym_cu->m_builder.get ();
+
+  gdb_assert_not_reached ("");
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/cu.h ./gdb/dwarf2/cu.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/cu.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/cu.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,278 @@
+/* DWARF CU data structure
+
+   Copyright (C) 2021 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 GDB_DWARF2_CU_H
+#define GDB_DWARF2_CU_H
+
+#include "buildsym.h"
+#include "dwarf2/comp-unit-head.h"
+#include "gdbsupport/gdb_optional.h"
+
+/* Type used for delaying computation of method physnames.
+   See comments for compute_delayed_physnames.  */
+struct delayed_method_info
+{
+  /* The type to which the method is attached, i.e., its parent class.  */
+  struct type *type;
+
+  /* The index of the method in the type's function fieldlists.  */
+  int fnfield_index;
+
+  /* The index of the method in the fieldlist.  */
+  int index;
+
+  /* The name of the DIE.  */
+  const char *name;
+
+  /*  The DIE associated with this method.  */
+  struct die_info *die;
+};
+
+/* Internal state when decoding a particular compilation unit.  */
+struct dwarf2_cu
+{
+  explicit dwarf2_cu (dwarf2_per_cu_data *per_cu,
+		      dwarf2_per_objfile *per_objfile);
+
+  DISABLE_COPY_AND_ASSIGN (dwarf2_cu);
+
+  /* TU version of handle_DW_AT_stmt_list for read_type_unit_scope.
+     Create the set of symtabs used by this TU, or if this TU is sharing
+     symtabs with another TU and the symtabs have already been created
+     then restore those symtabs in the line header.
+     We don't need the pc/line-number mapping for type units.  */
+  void setup_type_unit_groups (struct die_info *die);
+
+  /* Start a symtab for DWARF.  NAME, COMP_DIR, LOW_PC are passed to the
+     buildsym_compunit constructor.  */
+  struct compunit_symtab *start_symtab (const char *name,
+					const char *comp_dir,
+					CORE_ADDR low_pc);
+
+  /* Reset the builder.  */
+  void reset_builder () { m_builder.reset (); }
+
+  /* Return a type that is a generic pointer type, the size of which
+     matches the address size given in the compilation unit header for
+     this CU.  */
+  struct type *addr_type () const;
+
+  /* Find an integer type the same size as the address size given in
+     the compilation unit header for this CU.  UNSIGNED_P controls if
+     the integer is unsigned or not.  */
+  struct type *addr_sized_int_type (bool unsigned_p) const;
+
+  /* Mark this CU as used.  */
+  void mark ();
+
+  /* Clear the mark on this CU.  */
+  void clear_mark ()
+  {
+    m_mark = false;
+  }
+
+  /* True if this CU has been marked.  */
+  bool is_marked () const
+  {
+    return m_mark;
+  }
+
+  /* Add a dependence relationship from this cu to REF_PER_CU.  */
+  void add_dependence (struct dwarf2_per_cu_data *ref_per_cu);
+
+  /* The header of the compilation unit.  */
+  struct comp_unit_head header {};
+
+  /* Base address of this compilation unit.  */
+  gdb::optional<CORE_ADDR> base_address;
+
+  /* The language we are debugging.  */
+  const struct language_defn *language_defn = nullptr;
+
+  const char *producer = nullptr;
+
+private:
+  /* The symtab builder for this CU.  This is only non-NULL when full
+     symbols are being read.  */
+  std::unique_ptr<buildsym_compunit> m_builder;
+
+  /* A set of pointers to dwarf2_per_cu_data objects for compilation
+     units referenced by this one.  Only set during full symbol processing;
+     partial symbol tables do not have dependencies.  */
+  htab_t m_dependencies = nullptr;
+
+public:
+  /* The generic symbol table building routines have separate lists for
+     file scope symbols and all all other scopes (local scopes).  So
+     we need to select the right one to pass to add_symbol_to_list().
+     We do it by keeping a pointer to the correct list in list_in_scope.
+
+     FIXME: The original dwarf code just treated the file scope as the
+     first local scope, and all other local scopes as nested local
+     scopes, and worked fine.  Check to see if we really need to
+     distinguish these in buildsym.c.  */
+  struct pending **list_in_scope = nullptr;
+
+  /* Hash table holding all the loaded partial DIEs
+     with partial_die->offset.SECT_OFF as hash.  */
+  htab_t partial_dies = nullptr;
+
+  /* Storage for things with the same lifetime as this read-in compilation
+     unit, including partial DIEs.  */
+  auto_obstack comp_unit_obstack;
+
+  /* Backlink to our per_cu entry.  */
+  struct dwarf2_per_cu_data *per_cu;
+
+  /* The dwarf2_per_objfile that owns this.  */
+  dwarf2_per_objfile *per_objfile;
+
+  /* How many compilation units ago was this CU last referenced?  */
+  int last_used = 0;
+
+  /* A hash table of DIE cu_offset for following references with
+     die_info->offset.sect_off as hash.  */
+  htab_t die_hash = nullptr;
+
+  /* Full DIEs if read in.  */
+  struct die_info *dies = nullptr;
+
+  /* Header data from the line table, during full symbol processing.  */
+  struct line_header *line_header = nullptr;
+  /* Non-NULL if LINE_HEADER is owned by this DWARF_CU.  Otherwise,
+     it's owned by dwarf2_per_bfd::line_header_hash.  If non-NULL,
+     this is the DW_TAG_compile_unit die for this CU.  We'll hold on
+     to the line header as long as this DIE is being processed.  See
+     process_die_scope.  */
+  die_info *line_header_die_owner = nullptr;
+
+  /* A list of methods which need to have physnames computed
+     after all type information has been read.  */
+  std::vector<delayed_method_info> method_list;
+
+  /* To be copied to symtab->call_site_htab.  */
+  htab_t call_site_htab = nullptr;
+
+  /* Non-NULL if this CU came from a DWO file.
+     There is an invariant here that is important to remember:
+     Except for attributes copied from the top level DIE in the "main"
+     (or "stub") file in preparation for reading the DWO file
+     (e.g., DW_AT_addr_base), we KISS: there is only *one* CU.
+     Either there isn't a DWO file (in which case this is NULL and the point
+     is moot), or there is and either we're not going to read it (in which
+     case this is NULL) or there is and we are reading it (in which case this
+     is non-NULL).  */
+  struct dwo_unit *dwo_unit = nullptr;
+
+  /* The DW_AT_addr_base (DW_AT_GNU_addr_base) attribute if present.
+     Note this value comes from the Fission stub CU/TU's DIE.  */
+  gdb::optional<ULONGEST> addr_base;
+
+  /* The DW_AT_GNU_ranges_base attribute, if present.
+
+     This is only relevant in the context of pre-DWARF 5 split units.  In this
+     context, there is a .debug_ranges section in the linked executable,
+     containing all the ranges data for all the compilation units.  Each
+     skeleton/stub unit has (if needed) a DW_AT_GNU_ranges_base attribute that
+     indicates the base of its contribution to that section.  The DW_AT_ranges
+     attributes in the split-unit are of the form DW_FORM_sec_offset and point
+     into the .debug_ranges section of the linked file.  However, they are not
+     "true" DW_FORM_sec_offset, because they are relative to the base of their
+     compilation unit's contribution, rather than relative to the beginning of
+     the section.  The DW_AT_GNU_ranges_base value must be added to it to make
+     it relative to the beginning of the section.
+
+     Note that the value is zero when we are not in a pre-DWARF 5 split-unit
+     case, so this value can be added without needing to know whether we are in
+     this case or not.
+
+     N.B. If a DW_AT_ranges attribute is found on the DW_TAG_compile_unit in the
+     skeleton/stub, it must not have the base added, as it already points to the
+     right place.  And since the DW_TAG_compile_unit DIE in the split-unit can't
+     have a DW_AT_ranges attribute, we can use the
+
+       die->tag != DW_AT_compile_unit
+
+     to determine whether the base should be added or not.  */
+  ULONGEST gnu_ranges_base = 0;
+
+  /* The DW_AT_rnglists_base attribute, if present.
+
+     This is used when processing attributes of form DW_FORM_rnglistx in
+     non-split units.  Attributes of this form found in a split unit don't
+     use it, as split-unit files have their own non-shared .debug_rnglists.dwo
+     section.  */
+  ULONGEST rnglists_base = 0;
+
+  /* The DW_AT_loclists_base attribute if present.  */
+  ULONGEST loclist_base = 0;
+
+  /* When reading debug info generated by older versions of rustc, we
+     have to rewrite some union types to be struct types with a
+     variant part.  This rewriting must be done after the CU is fully
+     read in, because otherwise at the point of rewriting some struct
+     type might not have been fully processed.  So, we keep a list of
+     all such types here and process them after expansion.  */
+  std::vector<struct type *> rust_unions;
+
+  /* The DW_AT_str_offsets_base attribute if present.  For DWARF 4 version DWO
+     files, the value is implicitly zero.  For DWARF 5 version DWO files, the
+     value is often implicit and is the size of the header of
+     .debug_str_offsets section (8 or 4, depending on the address size).  */
+  gdb::optional<ULONGEST> str_offsets_base;
+
+  /* Mark used when releasing cached dies.  */
+  bool m_mark : 1;
+
+  /* This CU references .debug_loc.  See the symtab->locations_valid field.
+     This test is imperfect as there may exist optimized debug code not using
+     any location list and still facing inlining issues if handled as
+     unoptimized code.  For a future better test see GCC PR other/32998.  */
+  bool has_loclist : 1;
+
+  /* These cache the results for producer_is_* fields.  CHECKED_PRODUCER is true
+     if all the producer_is_* fields are valid.  This information is cached
+     because profiling CU expansion showed excessive time spent in
+     producer_is_gxx_lt_4_6.  */
+  bool checked_producer : 1;
+  bool producer_is_gxx_lt_4_6 : 1;
+  bool producer_is_gcc_lt_4_3 : 1;
+  bool producer_is_icc : 1;
+  bool producer_is_icc_lt_14 : 1;
+  bool producer_is_codewarrior : 1;
+
+  /* When true, the file that we're processing is known to have
+     debugging info for C++ namespaces.  GCC 3.3.x did not produce
+     this information, but later versions do.  */
+
+  bool processing_has_namespace_info : 1;
+
+  /* This flag will be set when reading partial DIEs if we need to load
+     absolutely all DIEs for this compilation unit, instead of just the ones
+     we think are interesting.  It gets set if we look for a DIE in the
+     hash table and don't find it.  */
+  bool load_all_dies : 1;
+
+  struct partial_die_info *find_partial_die (sect_offset sect_off);
+
+  /* Get the buildsym_compunit for this CU.  */
+  buildsym_compunit *get_builder ();
+};
+
+#endif /* GDB_DWARF2_CU_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/die.h ./gdb/dwarf2/die.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/die.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/die.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,129 @@
+/* DWARF DIEs
+
+   Copyright (C) 2003-2021 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 GDB_DWARF2_DIE_H
+#define GDB_DWARF2_DIE_H
+
+#include "complaints.h"
+
+/* This data structure holds a complete die structure.  */
+struct die_info
+{
+  /* Return the named attribute or NULL if not there, but do not
+     follow DW_AT_specification, etc.  */
+  struct attribute *attr (dwarf_attribute name)
+  {
+    for (unsigned i = 0; i < num_attrs; ++i)
+      if (attrs[i].name == name)
+	return &attrs[i];
+    return NULL;
+  }
+
+  /* Return the address base of the compile unit, which, if exists, is
+     stored either at the attribute DW_AT_GNU_addr_base, or
+     DW_AT_addr_base.  */
+  gdb::optional<ULONGEST> addr_base ()
+  {
+    for (unsigned i = 0; i < num_attrs; ++i)
+      if (attrs[i].name == DW_AT_addr_base
+	   || attrs[i].name == DW_AT_GNU_addr_base)
+	{
+	  if (attrs[i].form_is_unsigned ())
+	    {
+	      /* If both exist, just use the first one.  */
+	      return attrs[i].as_unsigned ();
+	    }
+	  complaint (_("address base attribute (offset %s) as wrong form"),
+		     sect_offset_str (sect_off));
+	}
+    return gdb::optional<ULONGEST> ();
+  }
+
+  /* Return the base address of the compile unit into the .debug_ranges section,
+     which, if exists, is stored in the DW_AT_GNU_ranges_base attribute.  This
+     value is only relevant in pre-DWARF 5 split-unit scenarios.  */
+  ULONGEST gnu_ranges_base ()
+  {
+    for (unsigned i = 0; i < num_attrs; ++i)
+      if (attrs[i].name == DW_AT_GNU_ranges_base)
+	{
+	  if (attrs[i].form_is_unsigned ())
+	    return attrs[i].as_unsigned ();
+
+	  complaint (_("ranges base attribute (offset %s) has wrong form"),
+		     sect_offset_str (sect_off));
+	}
+
+    return 0;
+  }
+
+  /* Return the rnglists base of the compile unit, which, if exists, is stored
+     in the DW_AT_rnglists_base attribute.  */
+  ULONGEST rnglists_base ()
+  {
+    for (unsigned i = 0; i < num_attrs; ++i)
+      if (attrs[i].name == DW_AT_rnglists_base)
+	{
+	  if (attrs[i].form_is_unsigned ())
+	    return attrs[i].as_unsigned ();
+
+	  complaint (_("rnglists base attribute (offset %s) has wrong form"),
+		     sect_offset_str (sect_off));
+	}
+
+    return 0;
+  }
+
+  /* DWARF-2 tag for this DIE.  */
+  ENUM_BITFIELD(dwarf_tag) tag : 16;
+
+  /* Number of attributes */
+  unsigned char num_attrs;
+
+  /* True if we're presently building the full type name for the
+     type derived from this DIE.  */
+  unsigned char building_fullname : 1;
+
+  /* True if this die is in process.  PR 16581.  */
+  unsigned char in_process : 1;
+
+  /* True if this DIE has children.  */
+  unsigned char has_children : 1;
+
+  /* Abbrev number */
+  unsigned int abbrev;
+
+  /* Offset in .debug_info or .debug_types section.  */
+  sect_offset sect_off;
+
+  /* The dies in a compilation unit form an n-ary tree.  PARENT
+     points to this die's parent; CHILD points to the first child of
+     this node; and all the children of a given node are chained
+     together via their SIBLING fields.  */
+  struct die_info *child;	/* Its first child, if any.  */
+  struct die_info *sibling;	/* Its next sibling, if any.  */
+  struct die_info *parent;	/* Its parent, if any.  */
+
+  /* An array of attributes, with NUM_ATTRS elements.  There may be
+     zero, but it's not common and zero-sized arrays are not
+     sufficiently portable C.  */
+  struct attribute attrs[1];
+};
+
+#endif /* GDB_DWARF2_DIE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/dwz.c ./gdb/dwarf2/dwz.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/dwz.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/dwz.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,282 @@
+/* DWARF DWZ handling for GDB.
+
+   Copyright (C) 2003-2021 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 "dwarf2/dwz.h"
+
+#include "build-id.h"
+#include "debuginfod-support.h"
+#include "dwarf2/read.h"
+#include "dwarf2/sect-names.h"
+#include "filenames.h"
+#include "gdb_bfd.h"
+#include "gdbcore.h"
+#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_fd.h"
+
+const char *
+dwz_file::read_string (struct objfile *objfile, LONGEST str_offset)
+{
+  str.read (objfile);
+
+  if (str.buffer == NULL)
+    error (_("DW_FORM_GNU_strp_alt used without .debug_str "
+	     "section [in module %s]"),
+	   bfd_get_filename (dwz_bfd.get ()));
+  if (str_offset >= str.size)
+    error (_("DW_FORM_GNU_strp_alt pointing outside of "
+	     ".debug_str section [in module %s]"),
+	   bfd_get_filename (dwz_bfd.get ()));
+  gdb_assert (HOST_CHAR_BIT == 8);
+  if (str.buffer[str_offset] == '\0')
+    return NULL;
+  return (const char *) (str.buffer + str_offset);
+}
+
+/* A helper function to find the sections for a .dwz file.  */
+
+static void
+locate_dwz_sections (bfd *abfd, asection *sectp, dwz_file *dwz_file)
+{
+  /* Note that we only support the standard ELF names, because .dwz
+     is ELF-only (at the time of writing).  */
+  if (dwarf2_elf_names.abbrev.matches (sectp->name))
+    {
+      dwz_file->abbrev.s.section = sectp;
+      dwz_file->abbrev.size = bfd_section_size (sectp);
+    }
+  else if (dwarf2_elf_names.info.matches (sectp->name))
+    {
+      dwz_file->info.s.section = sectp;
+      dwz_file->info.size = bfd_section_size (sectp);
+    }
+  else if (dwarf2_elf_names.str.matches (sectp->name))
+    {
+      dwz_file->str.s.section = sectp;
+      dwz_file->str.size = bfd_section_size (sectp);
+    }
+  else if (dwarf2_elf_names.line.matches (sectp->name))
+    {
+      dwz_file->line.s.section = sectp;
+      dwz_file->line.size = bfd_section_size (sectp);
+    }
+  else if (dwarf2_elf_names.macro.matches (sectp->name))
+    {
+      dwz_file->macro.s.section = sectp;
+      dwz_file->macro.size = bfd_section_size (sectp);
+    }
+  else if (dwarf2_elf_names.gdb_index.matches (sectp->name))
+    {
+      dwz_file->gdb_index.s.section = sectp;
+      dwz_file->gdb_index.size = bfd_section_size (sectp);
+    }
+  else if (dwarf2_elf_names.debug_names.matches (sectp->name))
+    {
+      dwz_file->debug_names.s.section = sectp;
+      dwz_file->debug_names.size = bfd_section_size (sectp);
+    }
+}
+
+/* Attempt to find a .dwz file (whose full path is represented by
+   FILENAME) in all of the specified debug file directories provided.
+
+   Return the equivalent gdb_bfd_ref_ptr of the .dwz file found, or
+   nullptr if it could not find anything.  */
+
+static gdb_bfd_ref_ptr
+dwz_search_other_debugdirs (std::string &filename, bfd_byte *buildid,
+			    size_t buildid_len)
+{
+  /* Let's assume that the path represented by FILENAME has the
+     "/.dwz/" subpath in it.  This is what (most) GNU/Linux
+     distributions do, anyway.  */
+  size_t dwz_pos = filename.find ("/.dwz/");
+
+  if (dwz_pos == std::string::npos)
+    return nullptr;
+
+  /* This is an obvious assertion, but it's here more to educate
+     future readers of this code that FILENAME at DWZ_POS *must*
+     contain a directory separator.  */
+  gdb_assert (IS_DIR_SEPARATOR (filename[dwz_pos]));
+
+  gdb_bfd_ref_ptr dwz_bfd;
+  std::vector<gdb::unique_xmalloc_ptr<char>> debugdir_vec
+    = dirnames_to_char_ptr_vec (debug_file_directory);
+
+  for (const gdb::unique_xmalloc_ptr<char> &debugdir : debugdir_vec)
+    {
+      /* The idea is to iterate over the
+	 debug file directories provided by the user and
+	 replace the hard-coded path in the "filename" by each
+	 debug-file-directory.
+
+	 For example, suppose that filename is:
+
+	   /usr/lib/debug/.dwz/foo.dwz
+
+	 And suppose that we have "$HOME/bar" as the
+	 debug-file-directory.  We would then adjust filename
+	 to look like:
+
+	   $HOME/bar/.dwz/foo.dwz
+
+	 which would hopefully allow us to find the alt debug
+	 file.  */
+      std::string ddir = debugdir.get ();
+
+      if (ddir.empty ())
+	continue;
+
+      /* Make sure the current debug-file-directory ends with a
+	 directory separator.  This is needed because, if FILENAME
+	 contains something like "/usr/lib/abcde/.dwz/foo.dwz" and
+	 DDIR is "/usr/lib/abc", then could wrongfully skip it
+	 below.  */
+      if (!IS_DIR_SEPARATOR (ddir.back ()))
+	ddir += SLASH_STRING;
+
+      /* Check whether the beginning of FILENAME is DDIR.  If it is,
+	 then we are dealing with a file which we already attempted to
+	 open before, so we just skip it and continue processing the
+	 remaining debug file directories.  */
+      if (filename.size () > ddir.size ()
+	  && filename.compare (0, ddir.size (), ddir) == 0)
+	continue;
+
+      /* Replace FILENAME's default debug-file-directory with
+	 DDIR.  */
+      std::string new_filename = ddir + &filename[dwz_pos + 1];
+
+      dwz_bfd = gdb_bfd_open (new_filename.c_str (), gnutarget);
+
+      if (dwz_bfd == nullptr)
+	continue;
+
+      if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid))
+	{
+	  dwz_bfd.reset (nullptr);
+	  continue;
+	}
+
+      /* Found it.  */
+      break;
+    }
+
+  return dwz_bfd;
+}
+
+/* See dwz.h.  */
+
+struct dwz_file *
+dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd, bool require)
+{
+  bfd_size_type buildid_len_arg;
+  size_t buildid_len;
+  bfd_byte *buildid;
+
+  if (per_bfd->dwz_file != NULL)
+    return per_bfd->dwz_file.get ();
+
+  bfd_set_error (bfd_error_no_error);
+  gdb::unique_xmalloc_ptr<char> data
+    (bfd_get_alt_debug_link_info (per_bfd->obfd,
+				  &buildid_len_arg, &buildid));
+  if (data == NULL)
+    {
+      if (bfd_get_error () == bfd_error_no_error)
+	{
+	  if (!require)
+	    return nullptr;
+	  error (_("could not read '.gnu_debugaltlink' section"));
+	}
+      error (_("could not read '.gnu_debugaltlink' section: %s"),
+	     bfd_errmsg (bfd_get_error ()));
+    }
+
+  gdb::unique_xmalloc_ptr<bfd_byte> buildid_holder (buildid);
+
+  buildid_len = (size_t) buildid_len_arg;
+
+  std::string filename = data.get ();
+
+  if (!IS_ABSOLUTE_PATH (filename.c_str ()))
+    {
+      gdb::unique_xmalloc_ptr<char> abs
+	= gdb_realpath (bfd_get_filename (per_bfd->obfd));
+
+      filename = ldirname (abs.get ()) + SLASH_STRING + filename;
+    }
+
+  /* First try the file name given in the section.  If that doesn't
+     work, try to use the build-id instead.  */
+  gdb_bfd_ref_ptr dwz_bfd (gdb_bfd_open (filename.c_str (), gnutarget));
+  if (dwz_bfd != NULL)
+    {
+      if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid))
+	dwz_bfd.reset (nullptr);
+    }
+
+  if (dwz_bfd == NULL)
+    dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid);
+
+  if (dwz_bfd == nullptr)
+    {
+      /* If the user has provided us with different
+	 debug file directories, we can try them in order.  */
+      dwz_bfd = dwz_search_other_debugdirs (filename, buildid, buildid_len);
+    }
+
+  if (dwz_bfd == nullptr)
+    {
+      gdb::unique_xmalloc_ptr<char> alt_filename;
+      const char *origname = bfd_get_filename (per_bfd->obfd);
+
+      scoped_fd fd (debuginfod_debuginfo_query (buildid,
+						buildid_len,
+						origname,
+						&alt_filename));
+
+      if (fd.get () >= 0)
+	{
+	  /* File successfully retrieved from server.  */
+	  dwz_bfd = gdb_bfd_open (alt_filename.get (), gnutarget);
+
+	  if (dwz_bfd == nullptr)
+	    warning (_("File \"%s\" from debuginfod cannot be opened as bfd"),
+		     alt_filename.get ());
+	  else if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid))
+	    dwz_bfd.reset (nullptr);
+	}
+    }
+
+  if (dwz_bfd == NULL)
+    error (_("could not find '.gnu_debugaltlink' file for %s"),
+	   bfd_get_filename (per_bfd->obfd));
+
+  std::unique_ptr<struct dwz_file> result
+    (new struct dwz_file (std::move (dwz_bfd)));
+
+  for (asection *sec : gdb_bfd_sections (result->dwz_bfd))
+    locate_dwz_sections (result->dwz_bfd.get (), sec, result.get ());
+
+  gdb_bfd_record_inclusion (per_bfd->obfd, result->dwz_bfd.get ());
+  per_bfd->dwz_file = std::move (result);
+  return per_bfd->dwz_file.get ();
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/dwz.h ./gdb/dwarf2/dwz.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/dwz.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/dwz.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,76 @@
+/* DWARF DWZ handling for GDB.
+
+   Copyright (C) 2003-2021 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 GDB_DWARF2_DWZ_H
+#define GDB_DWARF2_DWZ_H
+
+#include "gdb_bfd.h"
+#include "dwarf2/index-cache.h"
+#include "dwarf2/section.h"
+
+struct dwarf2_per_bfd;
+
+/* This represents a '.dwz' file.  */
+
+struct dwz_file
+{
+  dwz_file (gdb_bfd_ref_ptr &&bfd)
+    : dwz_bfd (std::move (bfd))
+  {
+  }
+
+  const char *filename () const
+  {
+    return bfd_get_filename (this->dwz_bfd.get ());
+  }
+
+  /* A dwz file can only contain a few sections.  */
+  struct dwarf2_section_info abbrev {};
+  struct dwarf2_section_info info {};
+  struct dwarf2_section_info str {};
+  struct dwarf2_section_info line {};
+  struct dwarf2_section_info macro {};
+  struct dwarf2_section_info gdb_index {};
+  struct dwarf2_section_info debug_names {};
+
+  /* The dwz's BFD.  */
+  gdb_bfd_ref_ptr dwz_bfd;
+
+  /* If we loaded the index from an external file, this contains the
+     resources associated to the open file, memory mapping, etc.  */
+  std::unique_ptr<index_cache_resource> index_cache_res;
+
+  /* Read a string at offset STR_OFFSET in the .debug_str section from
+     this dwz file.  Throw an error if the offset is too large.  If
+     the string consists of a single NUL byte, return NULL; otherwise
+     return a pointer to the string.  */
+
+  const char *read_string (struct objfile *objfile, LONGEST str_offset);
+};
+
+/* Open the separate '.dwz' debug file, if needed.  If there is no
+   .gnu_debugaltlink section in the file, then the result depends on
+   REQUIRE: if REQUIRE is true, then error; if REQUIRE is false,
+   return NULL.  Always error if there is such a section but the file
+   cannot be found.  */
+
+extern dwz_file *dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd,
+				      bool require = false);
+
+#endif /* GDB_DWARF2_DWZ_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/expr.c ./gdb/dwarf2/expr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/expr.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/expr.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,1430 @@
+/* DWARF 2 Expression Evaluator.
+
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+
+   Contributed by Daniel Berlin (dan@dberlin.org)
+
+   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 "symtab.h"
+#include "gdbtypes.h"
+#include "value.h"
+#include "gdbcore.h"
+#include "dwarf2.h"
+#include "dwarf2/expr.h"
+#include "dwarf2/loc.h"
+#include "dwarf2/read.h"
+#include "gdbsupport/underlying.h"
+#include "gdbarch.h"
+
+/* Cookie for gdbarch data.  */
+
+static struct gdbarch_data *dwarf_arch_cookie;
+
+/* This holds gdbarch-specific types used by the DWARF expression
+   evaluator.  See comments in execute_stack_op.  */
+
+struct dwarf_gdbarch_types
+{
+  struct type *dw_types[3];
+};
+
+/* Allocate and fill in dwarf_gdbarch_types for an arch.  */
+
+static void *
+dwarf_gdbarch_types_init (struct gdbarch *gdbarch)
+{
+  struct dwarf_gdbarch_types *types
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct dwarf_gdbarch_types);
+
+  /* The types themselves are lazily initialized.  */
+
+  return types;
+}
+
+/* Return the type used for DWARF operations where the type is
+   unspecified in the DWARF spec.  Only certain sizes are
+   supported.  */
+
+struct type *
+dwarf_expr_context::address_type () const
+{
+  struct dwarf_gdbarch_types *types
+    = (struct dwarf_gdbarch_types *) gdbarch_data (this->gdbarch,
+						   dwarf_arch_cookie);
+  int ndx;
+
+  if (this->addr_size == 2)
+    ndx = 0;
+  else if (this->addr_size == 4)
+    ndx = 1;
+  else if (this->addr_size == 8)
+    ndx = 2;
+  else
+    error (_("Unsupported address size in DWARF expressions: %d bits"),
+	   8 * this->addr_size);
+
+  if (types->dw_types[ndx] == NULL)
+    types->dw_types[ndx]
+      = arch_integer_type (this->gdbarch,
+			   8 * this->addr_size,
+			   0, "<signed DWARF address type>");
+
+  return types->dw_types[ndx];
+}
+
+/* Create a new context for the expression evaluator.  */
+
+dwarf_expr_context::dwarf_expr_context (dwarf2_per_objfile *per_objfile)
+: gdbarch (NULL),
+  addr_size (0),
+  ref_addr_size (0),
+  recursion_depth (0),
+  max_recursion_depth (0x100),
+  location (DWARF_VALUE_MEMORY),
+  len (0),
+  data (NULL),
+  initialized (0),
+  per_objfile (per_objfile)
+{
+}
+
+/* Push VALUE onto the stack.  */
+
+void
+dwarf_expr_context::push (struct value *value, bool in_stack_memory)
+{
+  stack.emplace_back (value, in_stack_memory);
+}
+
+/* Push VALUE onto the stack.  */
+
+void
+dwarf_expr_context::push_address (CORE_ADDR value, bool in_stack_memory)
+{
+  push (value_from_ulongest (address_type (), value), in_stack_memory);
+}
+
+/* Pop the top item off of the stack.  */
+
+void
+dwarf_expr_context::pop ()
+{
+  if (stack.empty ())
+    error (_("dwarf expression stack underflow"));
+
+  stack.pop_back ();
+}
+
+/* Retrieve the N'th item on the stack.  */
+
+struct value *
+dwarf_expr_context::fetch (int n)
+{
+  if (stack.size () <= n)
+     error (_("Asked for position %d of stack, "
+	      "stack only has %zu elements on it."),
+	    n, stack.size ());
+  return stack[stack.size () - (1 + n)].value;
+}
+
+/* Require that TYPE be an integral type; throw an exception if not.  */
+
+static void
+dwarf_require_integral (struct type *type)
+{
+  if (type->code () != TYPE_CODE_INT
+      && type->code () != TYPE_CODE_CHAR
+      && type->code () != TYPE_CODE_BOOL)
+    error (_("integral type expected in DWARF expression"));
+}
+
+/* Return the unsigned form of TYPE.  TYPE is necessarily an integral
+   type.  */
+
+static struct type *
+get_unsigned_type (struct gdbarch *gdbarch, struct type *type)
+{
+  switch (TYPE_LENGTH (type))
+    {
+    case 1:
+      return builtin_type (gdbarch)->builtin_uint8;
+    case 2:
+      return builtin_type (gdbarch)->builtin_uint16;
+    case 4:
+      return builtin_type (gdbarch)->builtin_uint32;
+    case 8:
+      return builtin_type (gdbarch)->builtin_uint64;
+    default:
+      error (_("no unsigned variant found for type, while evaluating "
+	       "DWARF expression"));
+    }
+}
+
+/* Return the signed form of TYPE.  TYPE is necessarily an integral
+   type.  */
+
+static struct type *
+get_signed_type (struct gdbarch *gdbarch, struct type *type)
+{
+  switch (TYPE_LENGTH (type))
+    {
+    case 1:
+      return builtin_type (gdbarch)->builtin_int8;
+    case 2:
+      return builtin_type (gdbarch)->builtin_int16;
+    case 4:
+      return builtin_type (gdbarch)->builtin_int32;
+    case 8:
+      return builtin_type (gdbarch)->builtin_int64;
+    default:
+      error (_("no signed variant found for type, while evaluating "
+	       "DWARF expression"));
+    }
+}
+
+/* Retrieve the N'th item on the stack, converted to an address.  */
+
+CORE_ADDR
+dwarf_expr_context::fetch_address (int n)
+{
+  struct value *result_val = fetch (n);
+  enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
+  ULONGEST result;
+
+  dwarf_require_integral (value_type (result_val));
+  result = extract_unsigned_integer (value_contents (result_val),
+				     TYPE_LENGTH (value_type (result_val)),
+				     byte_order);
+
+  /* For most architectures, calling extract_unsigned_integer() alone
+     is sufficient for extracting an address.  However, some
+     architectures (e.g. MIPS) use signed addresses and using
+     extract_unsigned_integer() will not produce a correct
+     result.  Make sure we invoke gdbarch_integer_to_address()
+     for those architectures which require it.  */
+  if (gdbarch_integer_to_address_p (this->gdbarch))
+    {
+      gdb_byte *buf = (gdb_byte *) alloca (this->addr_size);
+      struct type *int_type = get_unsigned_type (this->gdbarch,
+						 value_type (result_val));
+
+      store_unsigned_integer (buf, this->addr_size, byte_order, result);
+      return gdbarch_integer_to_address (this->gdbarch, int_type, buf);
+    }
+
+  return (CORE_ADDR) result;
+}
+
+/* Retrieve the in_stack_memory flag of the N'th item on the stack.  */
+
+bool
+dwarf_expr_context::fetch_in_stack_memory (int n)
+{
+  if (stack.size () <= n)
+     error (_("Asked for position %d of stack, "
+	      "stack only has %zu elements on it."),
+	    n, stack.size ());
+  return stack[stack.size () - (1 + n)].in_stack_memory;
+}
+
+/* Return true if the expression stack is empty.  */
+
+bool
+dwarf_expr_context::stack_empty_p () const
+{
+  return stack.empty ();
+}
+
+/* Add a new piece to the dwarf_expr_context's piece list.  */
+void
+dwarf_expr_context::add_piece (ULONGEST size, ULONGEST offset)
+{
+  this->pieces.emplace_back ();
+  dwarf_expr_piece &p = this->pieces.back ();
+
+  p.location = this->location;
+  p.size = size;
+  p.offset = offset;
+
+  if (p.location == DWARF_VALUE_LITERAL)
+    {
+      p.v.literal.data = this->data;
+      p.v.literal.length = this->len;
+    }
+  else if (stack_empty_p ())
+    {
+      p.location = DWARF_VALUE_OPTIMIZED_OUT;
+      /* Also reset the context's location, for our callers.  This is
+	 a somewhat strange approach, but this lets us avoid setting
+	 the location to DWARF_VALUE_MEMORY in all the individual
+	 cases in the evaluator.  */
+      this->location = DWARF_VALUE_OPTIMIZED_OUT;
+    }
+  else if (p.location == DWARF_VALUE_MEMORY)
+    {
+      p.v.mem.addr = fetch_address (0);
+      p.v.mem.in_stack_memory = fetch_in_stack_memory (0);
+    }
+  else if (p.location == DWARF_VALUE_IMPLICIT_POINTER)
+    {
+      p.v.ptr.die_sect_off = (sect_offset) this->len;
+      p.v.ptr.offset = value_as_long (fetch (0));
+    }
+  else if (p.location == DWARF_VALUE_REGISTER)
+    p.v.regno = value_as_long (fetch (0));
+  else
+    {
+      p.v.value = fetch (0);
+    }
+}
+
+/* Evaluate the expression at ADDR (LEN bytes long).  */
+
+void
+dwarf_expr_context::eval (const gdb_byte *addr, size_t len)
+{
+  int old_recursion_depth = this->recursion_depth;
+
+  execute_stack_op (addr, addr + len);
+
+  /* RECURSION_DEPTH becomes invalid if an exception was thrown here.  */
+
+  gdb_assert (this->recursion_depth == old_recursion_depth);
+}
+
+/* Helper to read a uleb128 value or throw an error.  */
+
+const gdb_byte *
+safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		   uint64_t *r)
+{
+  buf = gdb_read_uleb128 (buf, buf_end, r);
+  if (buf == NULL)
+    error (_("DWARF expression error: ran off end of buffer reading uleb128 value"));
+  return buf;
+}
+
+/* Helper to read a sleb128 value or throw an error.  */
+
+const gdb_byte *
+safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		   int64_t *r)
+{
+  buf = gdb_read_sleb128 (buf, buf_end, r);
+  if (buf == NULL)
+    error (_("DWARF expression error: ran off end of buffer reading sleb128 value"));
+  return buf;
+}
+
+const gdb_byte *
+safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
+{
+  buf = gdb_skip_leb128 (buf, buf_end);
+  if (buf == NULL)
+    error (_("DWARF expression error: ran off end of buffer reading leb128 value"));
+  return buf;
+}
+
+
+/* Check that the current operator is either at the end of an
+   expression, or that it is followed by a composition operator or by
+   DW_OP_GNU_uninit (which should terminate the expression).  */
+
+void
+dwarf_expr_require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end,
+				const char *op_name)
+{
+  if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece
+      && *op_ptr != DW_OP_GNU_uninit)
+    error (_("DWARF-2 expression error: `%s' operations must be "
+	     "used either alone or in conjunction with DW_OP_piece "
+	     "or DW_OP_bit_piece."),
+	   op_name);
+}
+
+/* Return true iff the types T1 and T2 are "the same".  This only does
+   checks that might reasonably be needed to compare DWARF base
+   types.  */
+
+static int
+base_types_equal_p (struct type *t1, struct type *t2)
+{
+  if (t1->code () != t2->code ())
+    return 0;
+  if (t1->is_unsigned () != t2->is_unsigned ())
+    return 0;
+  return TYPE_LENGTH (t1) == TYPE_LENGTH (t2);
+}
+
+/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_reg* return the
+   DWARF register number.  Otherwise return -1.  */
+
+int
+dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end)
+{
+  uint64_t dwarf_reg;
+
+  if (buf_end <= buf)
+    return -1;
+  if (*buf >= DW_OP_reg0 && *buf <= DW_OP_reg31)
+    {
+      if (buf_end - buf != 1)
+	return -1;
+      return *buf - DW_OP_reg0;
+    }
+
+  if (*buf == DW_OP_regval_type || *buf == DW_OP_GNU_regval_type)
+    {
+      buf++;
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return -1;
+      buf = gdb_skip_leb128 (buf, buf_end);
+      if (buf == NULL)
+	return -1;
+    }
+  else if (*buf == DW_OP_regx)
+    {
+      buf++;
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return -1;
+    }
+  else
+    return -1;
+  if (buf != buf_end || (int) dwarf_reg != dwarf_reg)
+    return -1;
+  return dwarf_reg;
+}
+
+/* If <BUF..BUF_END] contains DW_FORM_block* with just DW_OP_breg*(0) and
+   DW_OP_deref* return the DWARF register number.  Otherwise return -1.
+   DEREF_SIZE_RETURN contains -1 for DW_OP_deref; otherwise it contains the
+   size from DW_OP_deref_size.  */
+
+int
+dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end,
+				CORE_ADDR *deref_size_return)
+{
+  uint64_t dwarf_reg;
+  int64_t offset;
+
+  if (buf_end <= buf)
+    return -1;
+
+  if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
+    {
+      dwarf_reg = *buf - DW_OP_breg0;
+      buf++;
+      if (buf >= buf_end)
+	return -1;
+    }
+  else if (*buf == DW_OP_bregx)
+    {
+      buf++;
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return -1;
+      if ((int) dwarf_reg != dwarf_reg)
+       return -1;
+    }
+  else
+    return -1;
+
+  buf = gdb_read_sleb128 (buf, buf_end, &offset);
+  if (buf == NULL)
+    return -1;
+  if (offset != 0)
+    return -1;
+
+  if (*buf == DW_OP_deref)
+    {
+      buf++;
+      *deref_size_return = -1;
+    }
+  else if (*buf == DW_OP_deref_size)
+    {
+      buf++;
+      if (buf >= buf_end)
+       return -1;
+      *deref_size_return = *buf++;
+    }
+  else
+    return -1;
+
+  if (buf != buf_end)
+    return -1;
+
+  return dwarf_reg;
+}
+
+/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_fbreg(X) fill
+   in FB_OFFSET_RETURN with the X offset and return 1.  Otherwise return 0.  */
+
+int
+dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
+			  CORE_ADDR *fb_offset_return)
+{
+  int64_t fb_offset;
+
+  if (buf_end <= buf)
+    return 0;
+
+  if (*buf != DW_OP_fbreg)
+    return 0;
+  buf++;
+
+  buf = gdb_read_sleb128 (buf, buf_end, &fb_offset);
+  if (buf == NULL)
+    return 0;
+  *fb_offset_return = fb_offset;
+  if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return)
+    return 0;
+
+  return 1;
+}
+
+/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_bregSP(X) fill
+   in SP_OFFSET_RETURN with the X offset and return 1.  Otherwise return 0.
+   The matched SP register number depends on GDBARCH.  */
+
+int
+dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
+			  const gdb_byte *buf_end, CORE_ADDR *sp_offset_return)
+{
+  uint64_t dwarf_reg;
+  int64_t sp_offset;
+
+  if (buf_end <= buf)
+    return 0;
+  if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
+    {
+      dwarf_reg = *buf - DW_OP_breg0;
+      buf++;
+    }
+  else
+    {
+      if (*buf != DW_OP_bregx)
+       return 0;
+      buf++;
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return 0;
+    }
+
+  if (dwarf_reg_to_regnum (gdbarch, dwarf_reg)
+      != gdbarch_sp_regnum (gdbarch))
+    return 0;
+
+  buf = gdb_read_sleb128 (buf, buf_end, &sp_offset);
+  if (buf == NULL)
+    return 0;
+  *sp_offset_return = sp_offset;
+  if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return)
+    return 0;
+
+  return 1;
+}
+
+/* The engine for the expression evaluator.  Using the context in this
+   object, evaluate the expression between OP_PTR and OP_END.  */
+
+void
+dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
+				      const gdb_byte *op_end)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
+  /* Old-style "untyped" DWARF values need special treatment in a
+     couple of places, specifically DW_OP_mod and DW_OP_shr.  We need
+     a special type for these values so we can distinguish them from
+     values that have an explicit type, because explicitly-typed
+     values do not need special treatment.  This special type must be
+     different (in the `==' sense) from any base type coming from the
+     CU.  */
+  struct type *address_type = this->address_type ();
+
+  this->location = DWARF_VALUE_MEMORY;
+  this->initialized = 1;  /* Default is initialized.  */
+
+  if (this->recursion_depth > this->max_recursion_depth)
+    error (_("DWARF-2 expression error: Loop detected (%d)."),
+	   this->recursion_depth);
+  this->recursion_depth++;
+
+  while (op_ptr < op_end)
+    {
+      enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr++;
+      ULONGEST result;
+      /* Assume the value is not in stack memory.
+	 Code that knows otherwise sets this to true.
+	 Some arithmetic on stack addresses can probably be assumed to still
+	 be a stack address, but we skip this complication for now.
+	 This is just an optimization, so it's always ok to punt
+	 and leave this as false.  */
+      bool in_stack_memory = false;
+      uint64_t uoffset, reg;
+      int64_t offset;
+      struct value *result_val = NULL;
+
+      /* The DWARF expression might have a bug causing an infinite
+	 loop.  In that case, quitting is the only way out.  */
+      QUIT;
+
+      switch (op)
+	{
+	case DW_OP_lit0:
+	case DW_OP_lit1:
+	case DW_OP_lit2:
+	case DW_OP_lit3:
+	case DW_OP_lit4:
+	case DW_OP_lit5:
+	case DW_OP_lit6:
+	case DW_OP_lit7:
+	case DW_OP_lit8:
+	case DW_OP_lit9:
+	case DW_OP_lit10:
+	case DW_OP_lit11:
+	case DW_OP_lit12:
+	case DW_OP_lit13:
+	case DW_OP_lit14:
+	case DW_OP_lit15:
+	case DW_OP_lit16:
+	case DW_OP_lit17:
+	case DW_OP_lit18:
+	case DW_OP_lit19:
+	case DW_OP_lit20:
+	case DW_OP_lit21:
+	case DW_OP_lit22:
+	case DW_OP_lit23:
+	case DW_OP_lit24:
+	case DW_OP_lit25:
+	case DW_OP_lit26:
+	case DW_OP_lit27:
+	case DW_OP_lit28:
+	case DW_OP_lit29:
+	case DW_OP_lit30:
+	case DW_OP_lit31:
+	  result = op - DW_OP_lit0;
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
+	case DW_OP_addr:
+	  result = extract_unsigned_integer (op_ptr,
+					     this->addr_size, byte_order);
+	  op_ptr += this->addr_size;
+	  /* Some versions of GCC emit DW_OP_addr before
+	     DW_OP_GNU_push_tls_address.  In this case the value is an
+	     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)
+	    result += this->per_objfile->objfile->text_section_offset ();
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
+	case DW_OP_addrx:
+	case DW_OP_GNU_addr_index:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	  result = this->get_addr_index (uoffset);
+	  result += this->per_objfile->objfile->text_section_offset ();
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+	case DW_OP_GNU_const_index:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	  result = this->get_addr_index (uoffset);
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
+	case DW_OP_const1u:
+	  result = extract_unsigned_integer (op_ptr, 1, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 1;
+	  break;
+	case DW_OP_const1s:
+	  result = extract_signed_integer (op_ptr, 1, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 1;
+	  break;
+	case DW_OP_const2u:
+	  result = extract_unsigned_integer (op_ptr, 2, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 2;
+	  break;
+	case DW_OP_const2s:
+	  result = extract_signed_integer (op_ptr, 2, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 2;
+	  break;
+	case DW_OP_const4u:
+	  result = extract_unsigned_integer (op_ptr, 4, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 4;
+	  break;
+	case DW_OP_const4s:
+	  result = extract_signed_integer (op_ptr, 4, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 4;
+	  break;
+	case DW_OP_const8u:
+	  result = extract_unsigned_integer (op_ptr, 8, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 8;
+	  break;
+	case DW_OP_const8s:
+	  result = extract_signed_integer (op_ptr, 8, byte_order);
+	  result_val = value_from_ulongest (address_type, result);
+	  op_ptr += 8;
+	  break;
+	case DW_OP_constu:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	  result = uoffset;
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+	case DW_OP_consts:
+	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	  result = offset;
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
+	/* The DW_OP_reg operations are required to occur alone in
+	   location expressions.  */
+	case DW_OP_reg0:
+	case DW_OP_reg1:
+	case DW_OP_reg2:
+	case DW_OP_reg3:
+	case DW_OP_reg4:
+	case DW_OP_reg5:
+	case DW_OP_reg6:
+	case DW_OP_reg7:
+	case DW_OP_reg8:
+	case DW_OP_reg9:
+	case DW_OP_reg10:
+	case DW_OP_reg11:
+	case DW_OP_reg12:
+	case DW_OP_reg13:
+	case DW_OP_reg14:
+	case DW_OP_reg15:
+	case DW_OP_reg16:
+	case DW_OP_reg17:
+	case DW_OP_reg18:
+	case DW_OP_reg19:
+	case DW_OP_reg20:
+	case DW_OP_reg21:
+	case DW_OP_reg22:
+	case DW_OP_reg23:
+	case DW_OP_reg24:
+	case DW_OP_reg25:
+	case DW_OP_reg26:
+	case DW_OP_reg27:
+	case DW_OP_reg28:
+	case DW_OP_reg29:
+	case DW_OP_reg30:
+	case DW_OP_reg31:
+	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg");
+
+	  result = op - DW_OP_reg0;
+	  result_val = value_from_ulongest (address_type, result);
+	  this->location = DWARF_VALUE_REGISTER;
+	  break;
+
+	case DW_OP_regx:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
+
+	  result = reg;
+	  result_val = value_from_ulongest (address_type, result);
+	  this->location = DWARF_VALUE_REGISTER;
+	  break;
+
+	case DW_OP_implicit_value:
+	  {
+	    uint64_t len;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
+	    if (op_ptr + len > op_end)
+	      error (_("DW_OP_implicit_value: too few bytes available."));
+	    this->len = len;
+	    this->data = op_ptr;
+	    this->location = DWARF_VALUE_LITERAL;
+	    op_ptr += len;
+	    dwarf_expr_require_composition (op_ptr, op_end,
+					    "DW_OP_implicit_value");
+	  }
+	  goto no_push;
+
+	case DW_OP_stack_value:
+	  this->location = DWARF_VALUE_STACK;
+	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
+	  goto no_push;
+
+	case DW_OP_implicit_pointer:
+	case DW_OP_GNU_implicit_pointer:
+	  {
+	    int64_t len;
+
+	    if (this->ref_addr_size == -1)
+	      error (_("DWARF-2 expression error: DW_OP_implicit_pointer "
+		       "is not allowed in frame context"));
+
+	    /* The referred-to DIE of sect_offset kind.  */
+	    this->len = extract_unsigned_integer (op_ptr, this->ref_addr_size,
+						 byte_order);
+	    op_ptr += this->ref_addr_size;
+
+	    /* The byte offset into the data.  */
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &len);
+	    result = (ULONGEST) len;
+	    result_val = value_from_ulongest (address_type, result);
+
+	    this->location = DWARF_VALUE_IMPLICIT_POINTER;
+	    dwarf_expr_require_composition (op_ptr, op_end,
+					    "DW_OP_implicit_pointer");
+	  }
+	  break;
+
+	case DW_OP_breg0:
+	case DW_OP_breg1:
+	case DW_OP_breg2:
+	case DW_OP_breg3:
+	case DW_OP_breg4:
+	case DW_OP_breg5:
+	case DW_OP_breg6:
+	case DW_OP_breg7:
+	case DW_OP_breg8:
+	case DW_OP_breg9:
+	case DW_OP_breg10:
+	case DW_OP_breg11:
+	case DW_OP_breg12:
+	case DW_OP_breg13:
+	case DW_OP_breg14:
+	case DW_OP_breg15:
+	case DW_OP_breg16:
+	case DW_OP_breg17:
+	case DW_OP_breg18:
+	case DW_OP_breg19:
+	case DW_OP_breg20:
+	case DW_OP_breg21:
+	case DW_OP_breg22:
+	case DW_OP_breg23:
+	case DW_OP_breg24:
+	case DW_OP_breg25:
+	case DW_OP_breg26:
+	case DW_OP_breg27:
+	case DW_OP_breg28:
+	case DW_OP_breg29:
+	case DW_OP_breg30:
+	case DW_OP_breg31:
+	  {
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	    result = this->read_addr_from_reg (op - DW_OP_breg0);
+	    result += offset;
+	    result_val = value_from_ulongest (address_type, result);
+	  }
+	  break;
+	case DW_OP_bregx:
+	  {
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	    result = this->read_addr_from_reg (reg);
+	    result += offset;
+	    result_val = value_from_ulongest (address_type, result);
+	  }
+	  break;
+	case DW_OP_fbreg:
+	  {
+	    const gdb_byte *datastart;
+	    size_t datalen;
+
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+
+	    /* Rather than create a whole new context, we simply
+	       backup the current stack locally and install a new empty stack,
+	       then reset it afterwards, effectively erasing whatever the
+	       recursive call put there.  */
+	    std::vector<dwarf_stack_value> saved_stack = std::move (stack);
+	    stack.clear ();
+
+	    /* FIXME: cagney/2003-03-26: This code should be using
+	       get_frame_base_address(), and then implement a dwarf2
+	       specific this_base method.  */
+	    this->get_frame_base (&datastart, &datalen);
+	    eval (datastart, datalen);
+	    if (this->location == DWARF_VALUE_MEMORY)
+	      result = fetch_address (0);
+	    else if (this->location == DWARF_VALUE_REGISTER)
+	      result = this->read_addr_from_reg (value_as_long (fetch (0)));
+	    else
+	      error (_("Not implemented: computing frame "
+		       "base using explicit value operator"));
+	    result = result + offset;
+	    result_val = value_from_ulongest (address_type, result);
+	    in_stack_memory = true;
+
+	    /* Restore the content of the original stack.  */
+	    stack = std::move (saved_stack);
+
+	    this->location = DWARF_VALUE_MEMORY;
+	  }
+	  break;
+
+	case DW_OP_dup:
+	  result_val = fetch (0);
+	  in_stack_memory = fetch_in_stack_memory (0);
+	  break;
+
+	case DW_OP_drop:
+	  pop ();
+	  goto no_push;
+
+	case DW_OP_pick:
+	  offset = *op_ptr++;
+	  result_val = fetch (offset);
+	  in_stack_memory = fetch_in_stack_memory (offset);
+	  break;
+	  
+	case DW_OP_swap:
+	  {
+	    if (stack.size () < 2)
+	       error (_("Not enough elements for "
+			"DW_OP_swap.  Need 2, have %zu."),
+		      stack.size ());
+
+	    dwarf_stack_value &t1 = stack[stack.size () - 1];
+	    dwarf_stack_value &t2 = stack[stack.size () - 2];
+	    std::swap (t1, t2);
+	    goto no_push;
+	  }
+
+	case DW_OP_over:
+	  result_val = fetch (1);
+	  in_stack_memory = fetch_in_stack_memory (1);
+	  break;
+
+	case DW_OP_rot:
+	  {
+	    if (stack.size () < 3)
+	       error (_("Not enough elements for "
+			"DW_OP_rot.  Need 3, have %zu."),
+		      stack.size ());
+
+	    dwarf_stack_value temp = stack[stack.size () - 1];
+	    stack[stack.size () - 1] = stack[stack.size () - 2];
+	    stack[stack.size () - 2] = stack[stack.size () - 3];
+	    stack[stack.size () - 3] = temp;
+	    goto no_push;
+	  }
+
+	case DW_OP_deref:
+	case DW_OP_deref_size:
+	case DW_OP_deref_type:
+	case DW_OP_GNU_deref_type:
+	  {
+	    int addr_size = (op == DW_OP_deref ? this->addr_size : *op_ptr++);
+	    gdb_byte *buf = (gdb_byte *) alloca (addr_size);
+	    CORE_ADDR addr = fetch_address (0);
+	    struct type *type;
+
+	    pop ();
+
+	    if (op == DW_OP_deref_type || op == DW_OP_GNU_deref_type)
+	      {
+		op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+		cu_offset type_die_cu_off = (cu_offset) uoffset;
+		type = get_base_type (type_die_cu_off, 0);
+	      }
+	    else
+	      type = address_type;
+
+	    this->read_mem (buf, addr, addr_size);
+
+	    /* If the size of the object read from memory is different
+	       from the type length, we need to zero-extend it.  */
+	    if (TYPE_LENGTH (type) != addr_size)
+	      {
+		ULONGEST datum =
+		  extract_unsigned_integer (buf, addr_size, byte_order);
+
+		buf = (gdb_byte *) alloca (TYPE_LENGTH (type));
+		store_unsigned_integer (buf, TYPE_LENGTH (type),
+					byte_order, datum);
+	      }
+
+	    result_val = value_from_contents_and_address (type, buf, addr);
+	    break;
+	  }
+
+	case DW_OP_abs:
+	case DW_OP_neg:
+	case DW_OP_not:
+	case DW_OP_plus_uconst:
+	  {
+	    /* Unary operations.  */
+	    result_val = fetch (0);
+	    pop ();
+
+	    switch (op)
+	      {
+	      case DW_OP_abs:
+		if (value_less (result_val,
+				value_zero (value_type (result_val), not_lval)))
+		  result_val = value_neg (result_val);
+		break;
+	      case DW_OP_neg:
+		result_val = value_neg (result_val);
+		break;
+	      case DW_OP_not:
+		dwarf_require_integral (value_type (result_val));
+		result_val = value_complement (result_val);
+		break;
+	      case DW_OP_plus_uconst:
+		dwarf_require_integral (value_type (result_val));
+		result = value_as_long (result_val);
+		op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+		result += reg;
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      }
+	  }
+	  break;
+
+	case DW_OP_and:
+	case DW_OP_div:
+	case DW_OP_minus:
+	case DW_OP_mod:
+	case DW_OP_mul:
+	case DW_OP_or:
+	case DW_OP_plus:
+	case DW_OP_shl:
+	case DW_OP_shr:
+	case DW_OP_shra:
+	case DW_OP_xor:
+	case DW_OP_le:
+	case DW_OP_ge:
+	case DW_OP_eq:
+	case DW_OP_lt:
+	case DW_OP_gt:
+	case DW_OP_ne:
+	  {
+	    /* Binary operations.  */
+	    struct value *first, *second;
+
+	    second = fetch (0);
+	    pop ();
+
+	    first = fetch (0);
+	    pop ();
+
+	    if (! base_types_equal_p (value_type (first), value_type (second)))
+	      error (_("Incompatible types on DWARF stack"));
+
+	    switch (op)
+	      {
+	      case DW_OP_and:
+		dwarf_require_integral (value_type (first));
+		dwarf_require_integral (value_type (second));
+		result_val = value_binop (first, second, BINOP_BITWISE_AND);
+		break;
+	      case DW_OP_div:
+		result_val = value_binop (first, second, BINOP_DIV);
+		break;
+	      case DW_OP_minus:
+		result_val = value_binop (first, second, BINOP_SUB);
+		break;
+	      case DW_OP_mod:
+		{
+		  int cast_back = 0;
+		  struct type *orig_type = value_type (first);
+
+		  /* We have to special-case "old-style" untyped values
+		     -- these must have mod computed using unsigned
+		     math.  */
+		  if (orig_type == address_type)
+		    {
+		      struct type *utype
+			= get_unsigned_type (this->gdbarch, orig_type);
+
+		      cast_back = 1;
+		      first = value_cast (utype, first);
+		      second = value_cast (utype, second);
+		    }
+		  /* Note that value_binop doesn't handle float or
+		     decimal float here.  This seems unimportant.  */
+		  result_val = value_binop (first, second, BINOP_MOD);
+		  if (cast_back)
+		    result_val = value_cast (orig_type, result_val);
+		}
+		break;
+	      case DW_OP_mul:
+		result_val = value_binop (first, second, BINOP_MUL);
+		break;
+	      case DW_OP_or:
+		dwarf_require_integral (value_type (first));
+		dwarf_require_integral (value_type (second));
+		result_val = value_binop (first, second, BINOP_BITWISE_IOR);
+		break;
+	      case DW_OP_plus:
+		result_val = value_binop (first, second, BINOP_ADD);
+		break;
+	      case DW_OP_shl:
+		dwarf_require_integral (value_type (first));
+		dwarf_require_integral (value_type (second));
+		result_val = value_binop (first, second, BINOP_LSH);
+		break;
+	      case DW_OP_shr:
+		dwarf_require_integral (value_type (first));
+		dwarf_require_integral (value_type (second));
+		if (!value_type (first)->is_unsigned ())
+		  {
+		    struct type *utype
+		      = get_unsigned_type (this->gdbarch, value_type (first));
+
+		    first = value_cast (utype, first);
+		  }
+
+		result_val = value_binop (first, second, BINOP_RSH);
+		/* Make sure we wind up with the same type we started
+		   with.  */
+		if (value_type (result_val) != value_type (second))
+		  result_val = value_cast (value_type (second), result_val);
+		break;
+	      case DW_OP_shra:
+		dwarf_require_integral (value_type (first));
+		dwarf_require_integral (value_type (second));
+		if (value_type (first)->is_unsigned ())
+		  {
+		    struct type *stype
+		      = get_signed_type (this->gdbarch, value_type (first));
+
+		    first = value_cast (stype, first);
+		  }
+
+		result_val = value_binop (first, second, BINOP_RSH);
+		/* Make sure we wind up with the same type we started
+		   with.  */
+		if (value_type (result_val) != value_type (second))
+		  result_val = value_cast (value_type (second), result_val);
+		break;
+	      case DW_OP_xor:
+		dwarf_require_integral (value_type (first));
+		dwarf_require_integral (value_type (second));
+		result_val = value_binop (first, second, BINOP_BITWISE_XOR);
+		break;
+	      case DW_OP_le:
+		/* A <= B is !(B < A).  */
+		result = ! value_less (second, first);
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      case DW_OP_ge:
+		/* A >= B is !(A < B).  */
+		result = ! value_less (first, second);
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      case DW_OP_eq:
+		result = value_equal (first, second);
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      case DW_OP_lt:
+		result = value_less (first, second);
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      case DW_OP_gt:
+		/* A > B is B < A.  */
+		result = value_less (second, first);
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      case DW_OP_ne:
+		result = ! value_equal (first, second);
+		result_val = value_from_ulongest (address_type, result);
+		break;
+	      default:
+		internal_error (__FILE__, __LINE__,
+				_("Can't be reached."));
+	      }
+	  }
+	  break;
+
+	case DW_OP_call_frame_cfa:
+	  result = this->get_frame_cfa ();
+	  result_val = value_from_ulongest (address_type, result);
+	  in_stack_memory = true;
+	  break;
+
+	case DW_OP_GNU_push_tls_address:
+	case DW_OP_form_tls_address:
+	  /* Variable is at a constant offset in the thread-local
+	  storage block into the objfile for the current thread and
+	  the dynamic linker module containing this expression.  Here
+	  we return returns the offset from that base.  The top of the
+	  stack has the offset from the beginning of the thread
+	  control block at which the variable is located.  Nothing
+	  should follow this operator, so the top of stack would be
+	  returned.  */
+	  result = value_as_long (fetch (0));
+	  pop ();
+	  result = this->get_tls_address (result);
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
+	case DW_OP_skip:
+	  offset = extract_signed_integer (op_ptr, 2, byte_order);
+	  op_ptr += 2;
+	  op_ptr += offset;
+	  goto no_push;
+
+	case DW_OP_bra:
+	  {
+	    struct value *val;
+
+	    offset = extract_signed_integer (op_ptr, 2, byte_order);
+	    op_ptr += 2;
+	    val = fetch (0);
+	    dwarf_require_integral (value_type (val));
+	    if (value_as_long (val) != 0)
+	      op_ptr += offset;
+	    pop ();
+	  }
+	  goto no_push;
+
+	case DW_OP_nop:
+	  goto no_push;
+
+	case DW_OP_piece:
+	  {
+	    uint64_t size;
+
+	    /* Record the piece.  */
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
+	    add_piece (8 * size, 0);
+
+	    /* Pop off the address/regnum, and reset the location
+	       type.  */
+	    if (this->location != DWARF_VALUE_LITERAL
+		&& this->location != DWARF_VALUE_OPTIMIZED_OUT)
+	      pop ();
+	    this->location = DWARF_VALUE_MEMORY;
+	  }
+	  goto no_push;
+
+	case DW_OP_bit_piece:
+	  {
+	    uint64_t size, uleb_offset;
+
+	    /* Record the piece.  */
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uleb_offset);
+	    add_piece (size, uleb_offset);
+
+	    /* Pop off the address/regnum, and reset the location
+	       type.  */
+	    if (this->location != DWARF_VALUE_LITERAL
+		&& this->location != DWARF_VALUE_OPTIMIZED_OUT)
+	      pop ();
+	    this->location = DWARF_VALUE_MEMORY;
+	  }
+	  goto no_push;
+
+	case DW_OP_GNU_uninit:
+	  if (op_ptr != op_end)
+	    error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always "
+		   "be the very last op."));
+
+	  this->initialized = 0;
+	  goto no_push;
+
+	case DW_OP_call2:
+	  {
+	    cu_offset cu_off
+	      = (cu_offset) extract_unsigned_integer (op_ptr, 2, byte_order);
+	    op_ptr += 2;
+	    this->dwarf_call (cu_off);
+	  }
+	  goto no_push;
+
+	case DW_OP_call4:
+	  {
+	    cu_offset cu_off
+	      = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order);
+	    op_ptr += 4;
+	    this->dwarf_call (cu_off);
+	  }
+	  goto no_push;
+
+	case DW_OP_GNU_variable_value:
+	  {
+	    sect_offset sect_off
+	      = (sect_offset) extract_unsigned_integer (op_ptr,
+							this->ref_addr_size,
+							byte_order);
+	    op_ptr += this->ref_addr_size;
+	    result_val = value_cast (address_type,
+				     this->dwarf_variable_value (sect_off));
+	  }
+	  break;
+	
+	case DW_OP_entry_value:
+	case DW_OP_GNU_entry_value:
+	  {
+	    uint64_t len;
+	    CORE_ADDR deref_size;
+	    union call_site_parameter_u kind_u;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
+	    if (op_ptr + len > op_end)
+	      error (_("DW_OP_entry_value: too few bytes available."));
+
+	    kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len);
+	    if (kind_u.dwarf_reg != -1)
+	      {
+		op_ptr += len;
+		this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
+						  kind_u,
+						  -1 /* deref_size */);
+		goto no_push;
+	      }
+
+	    kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr,
+							       op_ptr + len,
+							       &deref_size);
+	    if (kind_u.dwarf_reg != -1)
+	      {
+		if (deref_size == -1)
+		  deref_size = this->addr_size;
+		op_ptr += len;
+		this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
+						  kind_u, deref_size);
+		goto no_push;
+	      }
+
+	    error (_("DWARF-2 expression error: DW_OP_entry_value is "
+		     "supported only for single DW_OP_reg* "
+		     "or for DW_OP_breg*(0)+DW_OP_deref*"));
+	  }
+
+	case DW_OP_GNU_parameter_ref:
+	  {
+	    union call_site_parameter_u kind_u;
+
+	    kind_u.param_cu_off
+	      = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order);
+	    op_ptr += 4;
+	    this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_PARAM_OFFSET,
+					      kind_u,
+					      -1 /* deref_size */);
+	  }
+	  goto no_push;
+
+	case DW_OP_const_type:
+	case DW_OP_GNU_const_type:
+	  {
+	    int n;
+	    const gdb_byte *data;
+	    struct type *type;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	    cu_offset type_die_cu_off = (cu_offset) uoffset;
+
+	    n = *op_ptr++;
+	    data = op_ptr;
+	    op_ptr += n;
+
+	    type = get_base_type (type_die_cu_off, n);
+	    result_val = value_from_contents (type, data);
+	  }
+	  break;
+
+	case DW_OP_regval_type:
+	case DW_OP_GNU_regval_type:
+	  {
+	    struct type *type;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	    cu_offset type_die_cu_off = (cu_offset) uoffset;
+
+	    type = get_base_type (type_die_cu_off, 0);
+	    result_val = this->get_reg_value (type, reg);
+	  }
+	  break;
+
+	case DW_OP_convert:
+	case DW_OP_GNU_convert:
+	case DW_OP_reinterpret:
+	case DW_OP_GNU_reinterpret:
+	  {
+	    struct type *type;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	    cu_offset type_die_cu_off = (cu_offset) uoffset;
+
+	    if (to_underlying (type_die_cu_off) == 0)
+	      type = address_type;
+	    else
+	      type = get_base_type (type_die_cu_off, 0);
+
+	    result_val = fetch (0);
+	    pop ();
+
+	    if (op == DW_OP_convert || op == DW_OP_GNU_convert)
+	      result_val = value_cast (type, result_val);
+	    else if (type == value_type (result_val))
+	      {
+		/* Nothing.  */
+	      }
+	    else if (TYPE_LENGTH (type)
+		     != TYPE_LENGTH (value_type (result_val)))
+	      error (_("DW_OP_reinterpret has wrong size"));
+	    else
+	      result_val
+		= value_from_contents (type,
+				       value_contents_all (result_val));
+	  }
+	  break;
+
+	case DW_OP_push_object_address:
+	  /* Return the address of the object we are currently observing.  */
+	  result = this->get_object_address ();
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
+	default:
+	  error (_("Unhandled dwarf expression opcode 0x%x"), op);
+	}
+
+      /* Most things push a result value.  */
+      gdb_assert (result_val != NULL);
+      push (result_val, in_stack_memory);
+    no_push:
+      ;
+    }
+
+  /* To simplify our main caller, if the result is an implicit
+     pointer, then make a pieced value.  This is ok because we can't
+     have implicit pointers in contexts where pieces are invalid.  */
+  if (this->location == DWARF_VALUE_IMPLICIT_POINTER)
+    add_piece (8 * this->addr_size, 0);
+
+  this->recursion_depth--;
+  gdb_assert (this->recursion_depth >= 0);
+}
+
+void _initialize_dwarf2expr ();
+void
+_initialize_dwarf2expr ()
+{
+  dwarf_arch_cookie
+    = gdbarch_data_register_post_init (dwarf_gdbarch_types_init);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/expr.h ./gdb/dwarf2/expr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/expr.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/expr.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,326 @@
+/* DWARF 2 Expression Evaluator.
+
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+
+   Contributed by Daniel Berlin <dan@dberlin.org>.
+
+   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/>.  */
+
+#if !defined (DWARF2EXPR_H)
+#define DWARF2EXPR_H
+
+#include "leb128.h"
+#include "gdbtypes.h"
+
+struct dwarf2_per_objfile;
+
+/* The location of a value.  */
+enum dwarf_value_location
+{
+  /* The piece is in memory.
+     The value on the dwarf stack is its address.  */
+  DWARF_VALUE_MEMORY,
+
+  /* The piece is in a register.
+     The value on the dwarf stack is the register number.  */
+  DWARF_VALUE_REGISTER,
+
+  /* The piece is on the dwarf stack.  */
+  DWARF_VALUE_STACK,
+
+  /* The piece is a literal.  */
+  DWARF_VALUE_LITERAL,
+
+  /* The piece was optimized out.  */
+  DWARF_VALUE_OPTIMIZED_OUT,
+
+  /* The piece is an implicit pointer.  */
+  DWARF_VALUE_IMPLICIT_POINTER
+};
+
+/* A piece of an object, as recorded by DW_OP_piece or DW_OP_bit_piece.  */
+struct dwarf_expr_piece
+{
+  enum dwarf_value_location location;
+
+  union
+  {
+    struct
+    {
+      /* This piece's address, for DWARF_VALUE_MEMORY pieces.  */
+      CORE_ADDR addr;
+      /* Non-zero if the piece is known to be in memory and on
+	 the program's stack.  */
+      bool in_stack_memory;
+    } mem;
+
+    /* The piece's register number, for DWARF_VALUE_REGISTER pieces.  */
+    int regno;
+
+    /* The piece's literal value, for DWARF_VALUE_STACK pieces.  */
+    struct value *value;
+
+    struct
+    {
+      /* A pointer to the data making up this piece,
+	 for DWARF_VALUE_LITERAL pieces.  */
+      const gdb_byte *data;
+      /* The length of the available data.  */
+      ULONGEST length;
+    } literal;
+
+    /* Used for DWARF_VALUE_IMPLICIT_POINTER.  */
+    struct
+    {
+      /* The referent DIE from DW_OP_implicit_pointer.  */
+      sect_offset die_sect_off;
+      /* The byte offset into the resulting data.  */
+      LONGEST offset;
+    } ptr;
+  } v;
+
+  /* The length of the piece, in bits.  */
+  ULONGEST size;
+  /* The piece offset, in bits.  */
+  ULONGEST offset;
+};
+
+/* The dwarf expression stack.  */
+
+struct dwarf_stack_value
+{
+  dwarf_stack_value (struct value *value_, int in_stack_memory_)
+  : value (value_), in_stack_memory (in_stack_memory_)
+  {}
+
+  struct value *value;
+
+  /* True if the piece is in memory and is known to be on the program's stack.
+     It is always ok to set this to zero.  This is used, for example, to
+     optimize memory access from the target.  It can vastly speed up backtraces
+     on long latency connections when "set stack-cache on".  */
+  bool in_stack_memory;
+};
+
+/* The expression evaluator works with a dwarf_expr_context, describing
+   its current state and its callbacks.  */
+struct dwarf_expr_context
+{
+  dwarf_expr_context (dwarf2_per_objfile *per_objfile);
+  virtual ~dwarf_expr_context () = default;
+
+  void push_address (CORE_ADDR value, bool in_stack_memory);
+  void eval (const gdb_byte *addr, size_t len);
+  struct value *fetch (int n);
+  CORE_ADDR fetch_address (int n);
+  bool fetch_in_stack_memory (int n);
+
+  /* The stack of values.  */
+  std::vector<dwarf_stack_value> stack;
+
+  /* Target architecture to use for address operations.  */
+  struct gdbarch *gdbarch;
+
+  /* Target address size in bytes.  */
+  int addr_size;
+
+  /* DW_FORM_ref_addr size in bytes.  If -1 DWARF is executed from a frame
+     context and operations depending on DW_FORM_ref_addr are not allowed.  */
+  int ref_addr_size;
+
+  /* The current depth of dwarf expression recursion, via DW_OP_call*,
+     DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum
+     depth we'll tolerate before raising an error.  */
+  int recursion_depth, max_recursion_depth;
+
+  /* Location of the value.  */
+  enum dwarf_value_location location;
+
+  /* For DWARF_VALUE_LITERAL, the current literal value's length and
+     data.  For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the
+     target DIE of sect_offset kind.  */
+  ULONGEST len;
+  const gdb_byte *data;
+
+  /* Initialization status of variable: Non-zero if variable has been
+     initialized; zero otherwise.  */
+  int initialized;
+
+  /* A vector of pieces.
+
+     Each time DW_OP_piece is executed, we add a new element to the
+     end of this array, recording the current top of the stack, the
+     current location, and the size given as the operand to
+     DW_OP_piece.  We then pop the top value from the stack, reset the
+     location, and resume evaluation.
+
+     The Dwarf spec doesn't say whether DW_OP_piece pops the top value
+     from the stack.  We do, ensuring that clients of this interface
+     expecting to see a value left on the top of the stack (say, code
+     evaluating frame base expressions or CFA's specified with
+     DW_CFA_def_cfa_expression) will get an error if the expression
+     actually marks all the values it computes as pieces.
+
+     If an expression never uses DW_OP_piece, num_pieces will be zero.
+     (It would be nice to present these cases as expressions yielding
+     a single piece, so that callers need not distinguish between the
+     no-DW_OP_piece and one-DW_OP_piece cases.  But expressions with
+     no DW_OP_piece operations have no value to place in a piece's
+     'size' field; the size comes from the surrounding data.  So the
+     two cases need to be handled separately.)  */
+  std::vector<dwarf_expr_piece> pieces;
+
+  /* We evaluate the expression in the context of this objfile.  */
+  dwarf2_per_objfile *per_objfile;
+
+  /* Return the value of register number REGNUM (a DWARF register number),
+     read as an address.  */
+  virtual CORE_ADDR read_addr_from_reg (int regnum) = 0;
+
+  /* Return a value of type TYPE, stored in register number REGNUM
+     of the frame associated to the given BATON.
+
+     REGNUM is a DWARF register number.  */
+  virtual struct value *get_reg_value (struct type *type, int regnum) = 0;
+
+  /* Read LENGTH bytes at ADDR into BUF.  */
+  virtual void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) = 0;
+
+  /* Return the location expression for the frame base attribute, in
+     START and LENGTH.  The result must be live until the current
+     expression evaluation is complete.  */
+  virtual void get_frame_base (const gdb_byte **start, size_t *length) = 0;
+
+  /* Return the CFA for the frame.  */
+  virtual CORE_ADDR get_frame_cfa () = 0;
+
+  /* Return the PC for the frame.  */
+  virtual CORE_ADDR get_frame_pc ()
+  {
+    error (_("%s is invalid in this context"), "DW_OP_implicit_pointer");
+  }
+
+  /* Return the thread-local storage address for
+     DW_OP_GNU_push_tls_address or DW_OP_form_tls_address.  */
+  virtual CORE_ADDR get_tls_address (CORE_ADDR offset) = 0;
+
+  /* Execute DW_AT_location expression for the DWARF expression
+     subroutine in the DIE at DIE_CU_OFF in the CU.  Do not touch
+     STACK while it being passed to and returned from the called DWARF
+     subroutine.  */
+  virtual void dwarf_call (cu_offset die_cu_off) = 0;
+
+  /* Execute "variable value" operation on the DIE at SECT_OFF.  */
+  virtual struct value *dwarf_variable_value (sect_offset sect_off) = 0;
+
+  /* Return the base type given by the indicated DIE at DIE_CU_OFF.
+     This can throw an exception if the DIE is invalid or does not
+     represent a base type.  SIZE is non-zero if this function should
+     verify that the resulting type has the correct size.  */
+  virtual struct type *get_base_type (cu_offset die_cu_off, int size)
+  {
+    /* Anything will do.  */
+    return builtin_type (this->gdbarch)->builtin_int;
+  }
+
+  /* Push on DWARF stack an entry evaluated for DW_TAG_call_site's
+     parameter matching KIND and KIND_U at the caller of specified BATON.
+     If DEREF_SIZE is not -1 then use DW_AT_call_data_value instead of
+     DW_AT_call_value.  */
+  virtual void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
+					   union call_site_parameter_u kind_u,
+					   int deref_size) = 0;
+
+  /* Return the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index.
+     This can throw an exception if the index is out of range.  */
+  virtual CORE_ADDR get_addr_index (unsigned int index) = 0;
+
+  /* Return the `object address' for DW_OP_push_object_address.  */
+  virtual CORE_ADDR get_object_address () = 0;
+
+private:
+
+  struct type *address_type () const;
+  void push (struct value *value, bool in_stack_memory);
+  bool stack_empty_p () const;
+  void add_piece (ULONGEST size, ULONGEST offset);
+  void execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end);
+  void pop ();
+};
+
+void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *,
+				     const char *);
+
+int dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end);
+
+int dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf,
+				    const gdb_byte *buf_end,
+				    CORE_ADDR *deref_size_return);
+
+int dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
+			      CORE_ADDR *fb_offset_return);
+
+int dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
+			      const gdb_byte *buf_end,
+			      CORE_ADDR *sp_offset_return);
+
+/* Wrappers around the leb128 reader routines to simplify them for our
+   purposes.  */
+
+static inline const gdb_byte *
+gdb_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		  uint64_t *r)
+{
+  size_t bytes_read = read_uleb128_to_uint64 (buf, buf_end, r);
+
+  if (bytes_read == 0)
+    return NULL;
+  return buf + bytes_read;
+}
+
+static inline const gdb_byte *
+gdb_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		  int64_t *r)
+{
+  size_t bytes_read = read_sleb128_to_int64 (buf, buf_end, r);
+
+  if (bytes_read == 0)
+    return NULL;
+  return buf + bytes_read;
+}
+
+static inline const gdb_byte *
+gdb_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
+{
+  size_t bytes_read = skip_leb128 (buf, buf_end);
+
+  if (bytes_read == 0)
+    return NULL;
+  return buf + bytes_read;
+}
+
+extern const gdb_byte *safe_read_uleb128 (const gdb_byte *buf,
+					  const gdb_byte *buf_end,
+					  uint64_t *r);
+
+extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf,
+					  const gdb_byte *buf_end,
+					  int64_t *r);
+
+extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf,
+					 const gdb_byte *buf_end);
+
+#endif /* dwarf2expr.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame.c ./gdb/dwarf2/frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/frame.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,2329 @@
+/* Frame unwinder for frames with DWARF Call Frame Information.
+
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
+
+   Contributed by Mark Kettenis.
+
+   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 "dwarf2/expr.h"
+#include "dwarf2.h"
+#include "dwarf2/leb.h"
+#include "frame.h"
+#include "frame-base.h"
+#include "frame-unwind.h"
+#include "gdbcore.h"
+#include "gdbtypes.h"
+#include "symtab.h"
+#include "objfiles.h"
+#include "regcache.h"
+#include "value.h"
+#include "record.h"
+
+#include "complaints.h"
+#include "dwarf2/frame.h"
+#include "dwarf2/read.h"
+#include "dwarf2/public.h"
+#include "ax.h"
+#include "dwarf2/loc.h"
+#include "dwarf2/frame-tailcall.h"
+#include "gdbsupport/gdb_binary_search.h"
+#if GDB_SELF_TEST
+#include "gdbsupport/selftest.h"
+#include "selftest-arch.h"
+#endif
+#include <unordered_map>
+
+#include <algorithm>
+
+struct comp_unit;
+
+/* Call Frame Information (CFI).  */
+
+/* Common Information Entry (CIE).  */
+
+struct dwarf2_cie
+{
+  /* Computation Unit for this CIE.  */
+  struct comp_unit *unit;
+
+  /* Offset into the .debug_frame section where this CIE was found.
+     Used to identify this CIE.  */
+  ULONGEST cie_pointer;
+
+  /* Constant that is factored out of all advance location
+     instructions.  */
+  ULONGEST code_alignment_factor;
+
+  /* Constants that is factored out of all offset instructions.  */
+  LONGEST data_alignment_factor;
+
+  /* Return address column.  */
+  ULONGEST return_address_register;
+
+  /* Instruction sequence to initialize a register set.  */
+  const gdb_byte *initial_instructions;
+  const gdb_byte *end;
+
+  /* Saved augmentation, in case it's needed later.  */
+  char *augmentation;
+
+  /* Encoding of addresses.  */
+  gdb_byte encoding;
+
+  /* Target address size in bytes.  */
+  int addr_size;
+
+  /* Target pointer size in bytes.  */
+  int ptr_size;
+
+  /* True if a 'z' augmentation existed.  */
+  unsigned char saw_z_augmentation;
+
+  /* True if an 'S' augmentation existed.  */
+  unsigned char signal_frame;
+
+  /* The version recorded in the CIE.  */
+  unsigned char version;
+
+  /* The segment size.  */
+  unsigned char segment_size;
+};
+
+/* The CIE table is used to find CIEs during parsing, but then
+   discarded.  It maps from the CIE's offset to the CIE.  */
+typedef std::unordered_map<ULONGEST, dwarf2_cie *> dwarf2_cie_table;
+
+/* Frame Description Entry (FDE).  */
+
+struct dwarf2_fde
+{
+  /* CIE for this FDE.  */
+  struct dwarf2_cie *cie;
+
+  /* First location associated with this FDE.  */
+  CORE_ADDR initial_location;
+
+  /* Number of bytes of program instructions described by this FDE.  */
+  CORE_ADDR address_range;
+
+  /* Instruction sequence.  */
+  const gdb_byte *instructions;
+  const gdb_byte *end;
+
+  /* True if this FDE is read from a .eh_frame instead of a .debug_frame
+     section.  */
+  unsigned char eh_frame_p;
+};
+
+typedef std::vector<dwarf2_fde *> dwarf2_fde_table;
+
+/* A minimal decoding of DWARF2 compilation units.  We only decode
+   what's needed to get to the call frame information.  */
+
+struct comp_unit
+{
+  comp_unit (struct objfile *objf)
+    : abfd (objf->obfd)
+  {
+  }
+
+  /* Keep the bfd convenient.  */
+  bfd *abfd;
+
+  /* Pointer to the .debug_frame section loaded into memory.  */
+  const gdb_byte *dwarf_frame_buffer = nullptr;
+
+  /* Length of the loaded .debug_frame section.  */
+  bfd_size_type dwarf_frame_size = 0;
+
+  /* Pointer to the .debug_frame section.  */
+  asection *dwarf_frame_section = nullptr;
+
+  /* Base for DW_EH_PE_datarel encodings.  */
+  bfd_vma dbase = 0;
+
+  /* Base for DW_EH_PE_textrel encodings.  */
+  bfd_vma tbase = 0;
+
+  /* The FDE table.  */
+  dwarf2_fde_table fde_table;
+
+  /* Hold data used by this module.  */
+  auto_obstack obstack;
+};
+
+static struct dwarf2_fde *dwarf2_frame_find_fde
+  (CORE_ADDR *pc, dwarf2_per_objfile **out_per_objfile);
+
+static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum,
+				       int eh_frame_p);
+
+static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
+				     int ptr_len, const gdb_byte *buf,
+				     unsigned int *bytes_read_ptr,
+				     CORE_ADDR func_base);
+
+
+/* See dwarf2-frame.h.  */
+bool dwarf2_frame_unwinders_enabled_p = true;
+
+/* Store the length the expression for the CFA in the `cfa_reg' field,
+   which is unused in that case.  */
+#define cfa_exp_len cfa_reg
+
+dwarf2_frame_state::dwarf2_frame_state (CORE_ADDR pc_, struct dwarf2_cie *cie)
+  : pc (pc_), data_align (cie->data_alignment_factor),
+    code_align (cie->code_alignment_factor),
+    retaddr_column (cie->return_address_register)
+{
+}
+
+
+/* Helper functions for execute_stack_op.  */
+
+static CORE_ADDR
+read_addr_from_reg (struct frame_info *this_frame, int reg)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg);
+
+  return address_from_register (regnum, this_frame);
+}
+
+/* Execute the required actions for both the DW_CFA_restore and
+DW_CFA_restore_extended instructions.  */
+static void
+dwarf2_restore_rule (struct gdbarch *gdbarch, ULONGEST reg_num,
+		     struct dwarf2_frame_state *fs, int eh_frame_p)
+{
+  ULONGEST reg;
+
+  reg = dwarf2_frame_adjust_regnum (gdbarch, reg_num, eh_frame_p);
+  fs->regs.alloc_regs (reg + 1);
+
+  /* Check if this register was explicitly initialized in the
+  CIE initial instructions.  If not, default the rule to
+  UNSPECIFIED.  */
+  if (reg < fs->initial.reg.size ())
+    fs->regs.reg[reg] = fs->initial.reg[reg];
+  else
+    fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED;
+
+  if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED)
+    {
+      int regnum = dwarf_reg_to_regnum (gdbarch, reg);
+
+      complaint (_("\
+incomplete CFI data; DW_CFA_restore unspecified\n\
+register %s (#%d) at %s"),
+		 gdbarch_register_name (gdbarch, regnum), regnum,
+		 paddress (gdbarch, fs->pc));
+    }
+}
+
+class dwarf_expr_executor : public dwarf_expr_context
+{
+public:
+
+  dwarf_expr_executor (dwarf2_per_objfile *per_objfile)
+    : dwarf_expr_context (per_objfile)
+  {}
+
+  struct frame_info *this_frame;
+
+  CORE_ADDR read_addr_from_reg (int reg) override
+  {
+    return ::read_addr_from_reg (this_frame, reg);
+  }
+
+  struct value *get_reg_value (struct type *type, int reg) override
+  {
+    struct gdbarch *gdbarch = get_frame_arch (this_frame);
+    int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg);
+
+    return value_from_register (type, regnum, this_frame);
+  }
+
+  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
+  {
+    read_memory (addr, buf, len);
+  }
+
+  void get_frame_base (const gdb_byte **start, size_t *length) override
+  {
+    invalid ("DW_OP_fbreg");
+  }
+
+  void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
+				   union call_site_parameter_u kind_u,
+				   int deref_size) override
+  {
+    invalid ("DW_OP_entry_value");
+  }
+
+  CORE_ADDR get_object_address () override
+  {
+    invalid ("DW_OP_push_object_address");
+  }
+
+  CORE_ADDR get_frame_cfa () override
+  {
+    invalid ("DW_OP_call_frame_cfa");
+  }
+
+  CORE_ADDR get_tls_address (CORE_ADDR offset) override
+  {
+    invalid ("DW_OP_form_tls_address");
+  }
+
+  void dwarf_call (cu_offset die_offset) override
+  {
+    invalid ("DW_OP_call*");
+  }
+
+  struct value *dwarf_variable_value (sect_offset sect_off) override
+  {
+    invalid ("DW_OP_GNU_variable_value");
+  }
+
+  CORE_ADDR get_addr_index (unsigned int index) override
+  {
+    invalid ("DW_OP_addrx or DW_OP_GNU_addr_index");
+  }
+
+ private:
+
+  void invalid (const char *op) ATTRIBUTE_NORETURN
+  {
+    error (_("%s is invalid in this context"), op);
+  }
+};
+
+static CORE_ADDR
+execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size,
+		  struct frame_info *this_frame, CORE_ADDR initial,
+		  int initial_in_stack_memory, dwarf2_per_objfile *per_objfile)
+{
+  CORE_ADDR result;
+
+  dwarf_expr_executor ctx (per_objfile);
+  scoped_value_mark free_values;
+
+  ctx.this_frame = this_frame;
+  ctx.gdbarch = get_frame_arch (this_frame);
+  ctx.addr_size = addr_size;
+  ctx.ref_addr_size = -1;
+
+  ctx.push_address (initial, initial_in_stack_memory);
+  ctx.eval (exp, len);
+
+  if (ctx.location == DWARF_VALUE_MEMORY)
+    result = ctx.fetch_address (0);
+  else if (ctx.location == DWARF_VALUE_REGISTER)
+    result = ctx.read_addr_from_reg (value_as_long (ctx.fetch (0)));
+  else
+    {
+      /* This is actually invalid DWARF, but if we ever do run across
+	 it somehow, we might as well support it.  So, instead, report
+	 it as unimplemented.  */
+      error (_("\
+Not implemented: computing unwound register using explicit value operator"));
+    }
+
+  return result;
+}
+
+
+/* Execute FDE program from INSN_PTR possibly up to INSN_END or up to inferior
+   PC.  Modify FS state accordingly.  Return current INSN_PTR where the
+   execution has stopped, one can resume it on the next call.  */
+
+static const gdb_byte *
+execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
+		     const gdb_byte *insn_end, struct gdbarch *gdbarch,
+		     CORE_ADDR pc, struct dwarf2_frame_state *fs,
+		     CORE_ADDR text_offset)
+{
+  int eh_frame_p = fde->eh_frame_p;
+  unsigned int bytes_read;
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+
+  while (insn_ptr < insn_end && fs->pc <= pc)
+    {
+      gdb_byte insn = *insn_ptr++;
+      uint64_t utmp, reg;
+      int64_t offset;
+
+      if ((insn & 0xc0) == DW_CFA_advance_loc)
+	fs->pc += (insn & 0x3f) * fs->code_align;
+      else if ((insn & 0xc0) == DW_CFA_offset)
+	{
+	  reg = insn & 0x3f;
+	  reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	  insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	  offset = utmp * fs->data_align;
+	  fs->regs.alloc_regs (reg + 1);
+	  fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
+	  fs->regs.reg[reg].loc.offset = offset;
+	}
+      else if ((insn & 0xc0) == DW_CFA_restore)
+	{
+	  reg = insn & 0x3f;
+	  dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
+	}
+      else
+	{
+	  switch (insn)
+	    {
+	    case DW_CFA_set_loc:
+	      fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding,
+					   fde->cie->ptr_size, insn_ptr,
+					   &bytes_read, fde->initial_location);
+	      /* Apply the text offset for relocatable objects.  */
+	      fs->pc += text_offset;
+	      insn_ptr += bytes_read;
+	      break;
+
+	    case DW_CFA_advance_loc1:
+	      utmp = extract_unsigned_integer (insn_ptr, 1, byte_order);
+	      fs->pc += utmp * fs->code_align;
+	      insn_ptr++;
+	      break;
+	    case DW_CFA_advance_loc2:
+	      utmp = extract_unsigned_integer (insn_ptr, 2, byte_order);
+	      fs->pc += utmp * fs->code_align;
+	      insn_ptr += 2;
+	      break;
+	    case DW_CFA_advance_loc4:
+	      utmp = extract_unsigned_integer (insn_ptr, 4, byte_order);
+	      fs->pc += utmp * fs->code_align;
+	      insn_ptr += 4;
+	      break;
+
+	    case DW_CFA_offset_extended:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      offset = utmp * fs->data_align;
+	      fs->regs.alloc_regs (reg + 1);
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
+	      fs->regs.reg[reg].loc.offset = offset;
+	      break;
+
+	    case DW_CFA_restore_extended:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
+	      break;
+
+	    case DW_CFA_undefined:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      fs->regs.alloc_regs (reg + 1);
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
+	      break;
+
+	    case DW_CFA_same_value:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      fs->regs.alloc_regs (reg + 1);
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
+	      break;
+
+	    case DW_CFA_register:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p);
+	      fs->regs.alloc_regs (reg + 1);
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
+	      fs->regs.reg[reg].loc.reg = utmp;
+	      break;
+
+	    case DW_CFA_remember_state:
+	      {
+		struct dwarf2_frame_state_reg_info *new_rs;
+
+		new_rs = new dwarf2_frame_state_reg_info (fs->regs);
+		fs->regs.prev = new_rs;
+	      }
+	      break;
+
+	    case DW_CFA_restore_state:
+	      {
+		struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev;
+
+		if (old_rs == NULL)
+		  {
+		    complaint (_("\
+bad CFI data; mismatched DW_CFA_restore_state at %s"),
+			       paddress (gdbarch, fs->pc));
+		  }
+		else
+		  fs->regs = std::move (*old_rs);
+	      }
+	      break;
+
+	    case DW_CFA_def_cfa:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.cfa_reg = reg;
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+
+	      if (fs->armcc_cfa_offsets_sf)
+		utmp *= fs->data_align;
+
+	      fs->regs.cfa_offset = utmp;
+	      fs->regs.cfa_how = CFA_REG_OFFSET;
+	      break;
+
+	    case DW_CFA_def_cfa_register:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg,
+							     eh_frame_p);
+	      fs->regs.cfa_how = CFA_REG_OFFSET;
+	      break;
+
+	    case DW_CFA_def_cfa_offset:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+
+	      if (fs->armcc_cfa_offsets_sf)
+		utmp *= fs->data_align;
+
+	      fs->regs.cfa_offset = utmp;
+	      /* cfa_how deliberately not set.  */
+	      break;
+
+	    case DW_CFA_nop:
+	      break;
+
+	    case DW_CFA_def_cfa_expression:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      fs->regs.cfa_exp_len = utmp;
+	      fs->regs.cfa_exp = insn_ptr;
+	      fs->regs.cfa_how = CFA_EXP;
+	      insn_ptr += fs->regs.cfa_exp_len;
+	      break;
+
+	    case DW_CFA_expression:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      fs->regs.alloc_regs (reg + 1);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      fs->regs.reg[reg].loc.exp.start = insn_ptr;
+	      fs->regs.reg[reg].loc.exp.len = utmp;
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP;
+	      insn_ptr += utmp;
+	      break;
+
+	    case DW_CFA_offset_extended_sf:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
+	      offset *= fs->data_align;
+	      fs->regs.alloc_regs (reg + 1);
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
+	      fs->regs.reg[reg].loc.offset = offset;
+	      break;
+
+	    case DW_CFA_val_offset:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.alloc_regs (reg + 1);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      offset = utmp * fs->data_align;
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
+	      fs->regs.reg[reg].loc.offset = offset;
+	      break;
+
+	    case DW_CFA_val_offset_sf:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.alloc_regs (reg + 1);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
+	      offset *= fs->data_align;
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
+	      fs->regs.reg[reg].loc.offset = offset;
+	      break;
+
+	    case DW_CFA_val_expression:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.alloc_regs (reg + 1);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      fs->regs.reg[reg].loc.exp.start = insn_ptr;
+	      fs->regs.reg[reg].loc.exp.len = utmp;
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
+	      insn_ptr += utmp;
+	      break;
+
+	    case DW_CFA_def_cfa_sf:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg,
+							     eh_frame_p);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
+	      fs->regs.cfa_offset = offset * fs->data_align;
+	      fs->regs.cfa_how = CFA_REG_OFFSET;
+	      break;
+
+	    case DW_CFA_def_cfa_offset_sf:
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
+	      fs->regs.cfa_offset = offset * fs->data_align;
+	      /* cfa_how deliberately not set.  */
+	      break;
+
+	    case DW_CFA_GNU_args_size:
+	      /* Ignored.  */
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      break;
+
+	    case DW_CFA_GNU_negative_offset_extended:
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      offset = utmp * fs->data_align;
+	      fs->regs.alloc_regs (reg + 1);
+	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
+	      fs->regs.reg[reg].loc.offset = -offset;
+	      break;
+
+	    default:
+	      if (insn >= DW_CFA_lo_user && insn <= DW_CFA_hi_user)
+		{
+		  /* Handle vendor-specific CFI for different architectures.  */
+		  if (!gdbarch_execute_dwarf_cfa_vendor_op (gdbarch, insn, fs))
+		    error (_("Call Frame Instruction op %d in vendor extension "
+			     "space is not handled on this architecture."),
+			   insn);
+		}
+	      else
+		internal_error (__FILE__, __LINE__,
+				_("Unknown CFI encountered."));
+	    }
+	}
+    }
+
+  if (fs->initial.reg.empty ())
+    {
+      /* Don't allow remember/restore between CIE and FDE programs.  */
+      delete fs->regs.prev;
+      fs->regs.prev = NULL;
+    }
+
+  return insn_ptr;
+}
+
+#if GDB_SELF_TEST
+
+namespace selftests {
+
+/* Unit test to function execute_cfa_program.  */
+
+static void
+execute_cfa_program_test (struct gdbarch *gdbarch)
+{
+  struct dwarf2_fde fde;
+  struct dwarf2_cie cie;
+
+  memset (&fde, 0, sizeof fde);
+  memset (&cie, 0, sizeof cie);
+
+  cie.data_alignment_factor = -4;
+  cie.code_alignment_factor = 2;
+  fde.cie = &cie;
+
+  dwarf2_frame_state fs (0, fde.cie);
+
+  gdb_byte insns[] =
+    {
+      DW_CFA_def_cfa, 1, 4,  /* DW_CFA_def_cfa: r1 ofs 4 */
+      DW_CFA_offset | 0x2, 1,  /* DW_CFA_offset: r2 at cfa-4 */
+      DW_CFA_remember_state,
+      DW_CFA_restore_state,
+    };
+
+  const gdb_byte *insn_end = insns + sizeof (insns);
+  const gdb_byte *out = execute_cfa_program (&fde, insns, insn_end, gdbarch,
+					     0, &fs, 0);
+
+  SELF_CHECK (out == insn_end);
+  SELF_CHECK (fs.pc == 0);
+
+  /* The instructions above only use r1 and r2, but the register numbers
+     used are adjusted by dwarf2_frame_adjust_regnum.  */
+  auto r1 = dwarf2_frame_adjust_regnum (gdbarch, 1, fde.eh_frame_p);
+  auto r2 = dwarf2_frame_adjust_regnum (gdbarch, 2, fde.eh_frame_p);
+
+  SELF_CHECK (fs.regs.reg.size () == (std::max (r1, r2) + 1));
+
+  SELF_CHECK (fs.regs.reg[r2].how == DWARF2_FRAME_REG_SAVED_OFFSET);
+  SELF_CHECK (fs.regs.reg[r2].loc.offset == -4);
+
+  for (auto i = 0; i < fs.regs.reg.size (); i++)
+    if (i != r2)
+      SELF_CHECK (fs.regs.reg[i].how == DWARF2_FRAME_REG_UNSPECIFIED);
+
+  SELF_CHECK (fs.regs.cfa_reg == 1);
+  SELF_CHECK (fs.regs.cfa_offset == 4);
+  SELF_CHECK (fs.regs.cfa_how == CFA_REG_OFFSET);
+  SELF_CHECK (fs.regs.cfa_exp == NULL);
+  SELF_CHECK (fs.regs.prev == NULL);
+}
+
+} // namespace selftests
+#endif /* GDB_SELF_TEST */
+
+
+
+/* Architecture-specific operations.  */
+
+/* Per-architecture data key.  */
+static struct gdbarch_data *dwarf2_frame_data;
+
+struct dwarf2_frame_ops
+{
+  /* Pre-initialize the register state REG for register REGNUM.  */
+  void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *,
+		    struct frame_info *);
+
+  /* Check whether the THIS_FRAME is a signal trampoline.  */
+  int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
+
+  /* Convert .eh_frame register number to DWARF register number, or
+     adjust .debug_frame register number.  */
+  int (*adjust_regnum) (struct gdbarch *, int, int);
+};
+
+/* Default architecture-specific register state initialization
+   function.  */
+
+static void
+dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum,
+			       struct dwarf2_frame_state_reg *reg,
+			       struct frame_info *this_frame)
+{
+  /* If we have a register that acts as a program counter, mark it as
+     a destination for the return address.  If we have a register that
+     serves as the stack pointer, arrange for it to be filled with the
+     call frame address (CFA).  The other registers are marked as
+     unspecified.
+
+     We copy the return address to the program counter, since many
+     parts in GDB assume that it is possible to get the return address
+     by unwinding the program counter register.  However, on ISA's
+     with a dedicated return address register, the CFI usually only
+     contains information to unwind that return address register.
+
+     The reason we're treating the stack pointer special here is
+     because in many cases GCC doesn't emit CFI for the stack pointer
+     and implicitly assumes that it is equal to the CFA.  This makes
+     some sense since the DWARF specification (version 3, draft 8,
+     p. 102) says that:
+
+     "Typically, the CFA is defined to be the value of the stack
+     pointer at the call site in the previous frame (which may be
+     different from its value on entry to the current frame)."
+
+     However, this isn't true for all platforms supported by GCC
+     (e.g. IBM S/390 and zSeries).  Those architectures should provide
+     their own architecture-specific initialization function.  */
+
+  if (regnum == gdbarch_pc_regnum (gdbarch))
+    reg->how = DWARF2_FRAME_REG_RA;
+  else if (regnum == gdbarch_sp_regnum (gdbarch))
+    reg->how = DWARF2_FRAME_REG_CFA;
+}
+
+/* Return a default for the architecture-specific operations.  */
+
+static void *
+dwarf2_frame_init (struct obstack *obstack)
+{
+  struct dwarf2_frame_ops *ops;
+  
+  ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops);
+  ops->init_reg = dwarf2_frame_default_init_reg;
+  return ops;
+}
+
+/* Set the architecture-specific register state initialization
+   function for GDBARCH to INIT_REG.  */
+
+void
+dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
+			   void (*init_reg) (struct gdbarch *, int,
+					     struct dwarf2_frame_state_reg *,
+					     struct frame_info *))
+{
+  struct dwarf2_frame_ops *ops
+    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
+
+  ops->init_reg = init_reg;
+}
+
+/* Pre-initialize the register state REG for register REGNUM.  */
+
+static void
+dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
+		       struct dwarf2_frame_state_reg *reg,
+		       struct frame_info *this_frame)
+{
+  struct dwarf2_frame_ops *ops
+    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
+
+  ops->init_reg (gdbarch, regnum, reg, this_frame);
+}
+
+/* Set the architecture-specific signal trampoline recognition
+   function for GDBARCH to SIGNAL_FRAME_P.  */
+
+void
+dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
+				 int (*signal_frame_p) (struct gdbarch *,
+							struct frame_info *))
+{
+  struct dwarf2_frame_ops *ops
+    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
+
+  ops->signal_frame_p = signal_frame_p;
+}
+
+/* Query the architecture-specific signal frame recognizer for
+   THIS_FRAME.  */
+
+static int
+dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
+			     struct frame_info *this_frame)
+{
+  struct dwarf2_frame_ops *ops
+    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
+
+  if (ops->signal_frame_p == NULL)
+    return 0;
+  return ops->signal_frame_p (gdbarch, this_frame);
+}
+
+/* Set the architecture-specific adjustment of .eh_frame and .debug_frame
+   register numbers.  */
+
+void
+dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
+				int (*adjust_regnum) (struct gdbarch *,
+						      int, int))
+{
+  struct dwarf2_frame_ops *ops
+    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
+
+  ops->adjust_regnum = adjust_regnum;
+}
+
+/* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame
+   register.  */
+
+static int
+dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch,
+			    int regnum, int eh_frame_p)
+{
+  struct dwarf2_frame_ops *ops
+    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
+
+  if (ops->adjust_regnum == NULL)
+    return regnum;
+  return ops->adjust_regnum (gdbarch, regnum, eh_frame_p);
+}
+
+static void
+dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs,
+			  struct dwarf2_fde *fde)
+{
+  struct compunit_symtab *cust;
+
+  cust = find_pc_compunit_symtab (fs->pc);
+  if (cust == NULL)
+    return;
+
+  if (producer_is_realview (COMPUNIT_PRODUCER (cust)))
+    {
+      if (fde->cie->version == 1)
+	fs->armcc_cfa_offsets_sf = 1;
+
+      if (fde->cie->version == 1)
+	fs->armcc_cfa_offsets_reversed = 1;
+
+      /* The reversed offset problem is present in some compilers
+	 using DWARF3, but it was eventually fixed.  Check the ARM
+	 defined augmentations, which are in the format "armcc" followed
+	 by a list of one-character options.  The "+" option means
+	 this problem is fixed (no quirk needed).  If the armcc
+	 augmentation is missing, the quirk is needed.  */
+      if (fde->cie->version == 3
+	  && (!startswith (fde->cie->augmentation, "armcc")
+	      || strchr (fde->cie->augmentation + 5, '+') == NULL))
+	fs->armcc_cfa_offsets_reversed = 1;
+
+      return;
+    }
+}
+
+
+/* See dwarf2-frame.h.  */
+
+int
+dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc,
+		       struct dwarf2_per_cu_data *data,
+		       int *regnum_out, LONGEST *offset_out,
+		       CORE_ADDR *text_offset_out,
+		       const gdb_byte **cfa_start_out,
+		       const gdb_byte **cfa_end_out)
+{
+  struct dwarf2_fde *fde;
+  dwarf2_per_objfile *per_objfile;
+  CORE_ADDR pc1 = pc;
+
+  /* Find the correct FDE.  */
+  fde = dwarf2_frame_find_fde (&pc1, &per_objfile);
+  if (fde == NULL)
+    error (_("Could not compute CFA; needed to translate this expression"));
+
+  gdb_assert (per_objfile != nullptr);
+
+  dwarf2_frame_state fs (pc1, fde->cie);
+
+  /* Check for "quirks" - known bugs in producers.  */
+  dwarf2_frame_find_quirks (&fs, fde);
+
+  /* First decode all the insns in the CIE.  */
+  execute_cfa_program (fde, fde->cie->initial_instructions,
+		       fde->cie->end, gdbarch, pc, &fs,
+		       per_objfile->objfile->text_section_offset ());
+
+  /* Save the initialized register set.  */
+  fs.initial = fs.regs;
+
+  /* Then decode the insns in the FDE up to our target PC.  */
+  execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs,
+		       per_objfile->objfile->text_section_offset ());
+
+  /* Calculate the CFA.  */
+  switch (fs.regs.cfa_how)
+    {
+    case CFA_REG_OFFSET:
+      {
+	int regnum = dwarf_reg_to_regnum_or_error (gdbarch, fs.regs.cfa_reg);
+
+	*regnum_out = regnum;
+	if (fs.armcc_cfa_offsets_reversed)
+	  *offset_out = -fs.regs.cfa_offset;
+	else
+	  *offset_out = fs.regs.cfa_offset;
+	return 1;
+      }
+
+    case CFA_EXP:
+      *text_offset_out = per_objfile->objfile->text_section_offset ();
+      *cfa_start_out = fs.regs.cfa_exp;
+      *cfa_end_out = fs.regs.cfa_exp + fs.regs.cfa_exp_len;
+      return 0;
+
+    default:
+      internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
+    }
+}
+
+
+struct dwarf2_frame_cache
+{
+  /* DWARF Call Frame Address.  */
+  CORE_ADDR cfa;
+
+  /* Set if the return address column was marked as unavailable
+     (required non-collected memory or registers to compute).  */
+  int unavailable_retaddr;
+
+  /* Set if the return address column was marked as undefined.  */
+  int undefined_retaddr;
+
+  /* Saved registers, indexed by GDB register number, not by DWARF
+     register number.  */
+  struct dwarf2_frame_state_reg *reg;
+
+  /* Return address register.  */
+  struct dwarf2_frame_state_reg retaddr_reg;
+
+  /* Target address size in bytes.  */
+  int addr_size;
+
+  /* The dwarf2_per_objfile from which this frame description came.  */
+  dwarf2_per_objfile *per_objfile;
+
+  /* If not NULL then this frame is the bottom frame of a TAILCALL_FRAME
+     sequence.  If NULL then it is a normal case with no TAILCALL_FRAME
+     involved.  Non-bottom frames of a virtual tail call frames chain use
+     dwarf2_tailcall_frame_unwind unwinder so this field does not apply for
+     them.  */
+  void *tailcall_cache;
+};
+
+static struct dwarf2_frame_cache *
+dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  const int num_regs = gdbarch_num_cooked_regs (gdbarch);
+  struct dwarf2_frame_cache *cache;
+  struct dwarf2_fde *fde;
+  CORE_ADDR entry_pc;
+  const gdb_byte *instr;
+
+  if (*this_cache)
+    return (struct dwarf2_frame_cache *) *this_cache;
+
+  /* Allocate a new cache.  */
+  cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
+  cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
+  *this_cache = cache;
+
+  /* Unwind the PC.
+
+     Note that if the next frame is never supposed to return (i.e. a call
+     to abort), the compiler might optimize away the instruction at
+     its return address.  As a result the return address will
+     point at some random instruction, and the CFI for that
+     instruction is probably worthless to us.  GCC's unwinder solves
+     this problem by substracting 1 from the return address to get an
+     address in the middle of a presumed call instruction (or the
+     instruction in the associated delay slot).  This should only be
+     done for "normal" frames and not for resume-type frames (signal
+     handlers, sentinel frames, dummy frames).  The function
+     get_frame_address_in_block does just this.  It's not clear how
+     reliable the method is though; there is the potential for the
+     register state pre-call being different to that on return.  */
+  CORE_ADDR pc1 = get_frame_address_in_block (this_frame);
+
+  /* Find the correct FDE.  */
+  fde = dwarf2_frame_find_fde (&pc1, &cache->per_objfile);
+  gdb_assert (fde != NULL);
+  gdb_assert (cache->per_objfile != nullptr);
+
+  /* Allocate and initialize the frame state.  */
+  struct dwarf2_frame_state fs (pc1, fde->cie);
+
+  cache->addr_size = fde->cie->addr_size;
+
+  /* Check for "quirks" - known bugs in producers.  */
+  dwarf2_frame_find_quirks (&fs, fde);
+
+  /* First decode all the insns in the CIE.  */
+  execute_cfa_program (fde, fde->cie->initial_instructions,
+		       fde->cie->end, gdbarch,
+		       get_frame_address_in_block (this_frame), &fs,
+		       cache->per_objfile->objfile->text_section_offset ());
+
+  /* Save the initialized register set.  */
+  fs.initial = fs.regs;
+
+  /* Fetching the entry pc for THIS_FRAME won't necessarily result
+     in an address that's within the range of FDE locations.  This
+     is due to the possibility of the function occupying non-contiguous
+     ranges.  */
+  LONGEST entry_cfa_sp_offset;
+  int entry_cfa_sp_offset_p = 0;
+  if (get_frame_func_if_available (this_frame, &entry_pc)
+      && fde->initial_location <= entry_pc
+      && entry_pc < fde->initial_location + fde->address_range)
+    {
+      /* Decode the insns in the FDE up to the entry PC.  */
+      instr = execute_cfa_program
+	(fde, fde->instructions, fde->end, gdbarch, entry_pc, &fs,
+	 cache->per_objfile->objfile->text_section_offset ());
+
+      if (fs.regs.cfa_how == CFA_REG_OFFSET
+	  && (dwarf_reg_to_regnum (gdbarch, fs.regs.cfa_reg)
+	      == gdbarch_sp_regnum (gdbarch)))
+	{
+	  entry_cfa_sp_offset = fs.regs.cfa_offset;
+	  entry_cfa_sp_offset_p = 1;
+	}
+    }
+  else
+    instr = fde->instructions;
+
+  /* Then decode the insns in the FDE up to our target PC.  */
+  execute_cfa_program (fde, instr, fde->end, gdbarch,
+		       get_frame_address_in_block (this_frame), &fs,
+		       cache->per_objfile->objfile->text_section_offset ());
+
+  try
+    {
+      /* Calculate the CFA.  */
+      switch (fs.regs.cfa_how)
+	{
+	case CFA_REG_OFFSET:
+	  cache->cfa = read_addr_from_reg (this_frame, fs.regs.cfa_reg);
+	  if (fs.armcc_cfa_offsets_reversed)
+	    cache->cfa -= fs.regs.cfa_offset;
+	  else
+	    cache->cfa += fs.regs.cfa_offset;
+	  break;
+
+	case CFA_EXP:
+	  cache->cfa =
+	    execute_stack_op (fs.regs.cfa_exp, fs.regs.cfa_exp_len,
+			      cache->addr_size, this_frame, 0, 0,
+			      cache->per_objfile);
+	  break;
+
+	default:
+	  internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
+	}
+    }
+  catch (const gdb_exception_error &ex)
+    {
+      if (ex.error == NOT_AVAILABLE_ERROR)
+	{
+	  cache->unavailable_retaddr = 1;
+	  return cache;
+	}
+
+      throw;
+    }
+
+  /* Initialize the register state.  */
+  {
+    int regnum;
+
+    for (regnum = 0; regnum < num_regs; regnum++)
+      dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], this_frame);
+  }
+
+  /* Go through the DWARF2 CFI generated table and save its register
+     location information in the cache.  Note that we don't skip the
+     return address column; it's perfectly all right for it to
+     correspond to a real register.  */
+  {
+    int column;		/* CFI speak for "register number".  */
+
+    for (column = 0; column < fs.regs.reg.size (); column++)
+      {
+	/* Use the GDB register number as the destination index.  */
+	int regnum = dwarf_reg_to_regnum (gdbarch, column);
+
+	/* Protect against a target returning a bad register.  */
+	if (regnum < 0 || regnum >= num_regs)
+	  continue;
+
+	/* NOTE: cagney/2003-09-05: CFI should specify the disposition
+	   of all debug info registers.  If it doesn't, complain (but
+	   not too loudly).  It turns out that GCC assumes that an
+	   unspecified register implies "same value" when CFI (draft
+	   7) specifies nothing at all.  Such a register could equally
+	   be interpreted as "undefined".  Also note that this check
+	   isn't sufficient; it only checks that all registers in the
+	   range [0 .. max column] are specified, and won't detect
+	   problems when a debug info register falls outside of the
+	   table.  We need a way of iterating through all the valid
+	   DWARF2 register numbers.  */
+	if (fs.regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
+	  {
+	    if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED)
+	      complaint (_("\
+incomplete CFI data; unspecified registers (e.g., %s) at %s"),
+			 gdbarch_register_name (gdbarch, regnum),
+			 paddress (gdbarch, fs.pc));
+	  }
+	else
+	  cache->reg[regnum] = fs.regs.reg[column];
+      }
+  }
+
+  /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information
+     we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules.  */
+  {
+    int regnum;
+
+    for (regnum = 0; regnum < num_regs; regnum++)
+      {
+	if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA
+	    || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET)
+	  {
+	    const std::vector<struct dwarf2_frame_state_reg> &regs
+	      = fs.regs.reg;
+	    ULONGEST retaddr_column = fs.retaddr_column;
+
+	    /* It seems rather bizarre to specify an "empty" column as
+	       the return adress column.  However, this is exactly
+	       what GCC does on some targets.  It turns out that GCC
+	       assumes that the return address can be found in the
+	       register corresponding to the return address column.
+	       Incidentally, that's how we should treat a return
+	       address column specifying "same value" too.  */
+	    if (fs.retaddr_column < fs.regs.reg.size ()
+		&& regs[retaddr_column].how != DWARF2_FRAME_REG_UNSPECIFIED
+		&& regs[retaddr_column].how != DWARF2_FRAME_REG_SAME_VALUE)
+	      {
+		if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
+		  cache->reg[regnum] = regs[retaddr_column];
+		else
+		  cache->retaddr_reg = regs[retaddr_column];
+	      }
+	    else
+	      {
+		if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
+		  {
+		    cache->reg[regnum].loc.reg = fs.retaddr_column;
+		    cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG;
+		  }
+		else
+		  {
+		    cache->retaddr_reg.loc.reg = fs.retaddr_column;
+		    cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG;
+		  }
+	      }
+	  }
+      }
+  }
+
+  if (fs.retaddr_column < fs.regs.reg.size ()
+      && fs.regs.reg[fs.retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
+    cache->undefined_retaddr = 1;
+
+  dwarf2_tailcall_sniffer_first (this_frame, &cache->tailcall_cache,
+				 (entry_cfa_sp_offset_p
+				  ? &entry_cfa_sp_offset : NULL));
+
+  return cache;
+}
+
+static enum unwind_stop_reason
+dwarf2_frame_unwind_stop_reason (struct frame_info *this_frame,
+				 void **this_cache)
+{
+  struct dwarf2_frame_cache *cache
+    = dwarf2_frame_cache (this_frame, this_cache);
+
+  if (cache->unavailable_retaddr)
+    return UNWIND_UNAVAILABLE;
+
+  if (cache->undefined_retaddr)
+    return UNWIND_OUTERMOST;
+
+  return UNWIND_NO_REASON;
+}
+
+static void
+dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache,
+		      struct frame_id *this_id)
+{
+  struct dwarf2_frame_cache *cache =
+    dwarf2_frame_cache (this_frame, this_cache);
+
+  if (cache->unavailable_retaddr)
+    (*this_id) = frame_id_build_unavailable_stack (get_frame_func (this_frame));
+  else if (cache->undefined_retaddr)
+    return;
+  else
+    (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame));
+}
+
+static struct value *
+dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache,
+			    int regnum)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  struct dwarf2_frame_cache *cache =
+    dwarf2_frame_cache (this_frame, this_cache);
+  CORE_ADDR addr;
+  int realnum;
+
+  /* Non-bottom frames of a virtual tail call frames chain use
+     dwarf2_tailcall_frame_unwind unwinder so this code does not apply for
+     them.  If dwarf2_tailcall_prev_register_first does not have specific value
+     unwind the register, tail call frames are assumed to have the register set
+     of the top caller.  */
+  if (cache->tailcall_cache)
+    {
+      struct value *val;
+      
+      val = dwarf2_tailcall_prev_register_first (this_frame,
+						 &cache->tailcall_cache,
+						 regnum);
+      if (val)
+	return val;
+    }
+
+  switch (cache->reg[regnum].how)
+    {
+    case DWARF2_FRAME_REG_UNDEFINED:
+      /* If CFI explicitly specified that the value isn't defined,
+	 mark it as optimized away; the value isn't available.  */
+      return frame_unwind_got_optimized (this_frame, regnum);
+
+    case DWARF2_FRAME_REG_SAVED_OFFSET:
+      addr = cache->cfa + cache->reg[regnum].loc.offset;
+      return frame_unwind_got_memory (this_frame, regnum, addr);
+
+    case DWARF2_FRAME_REG_SAVED_REG:
+      realnum = dwarf_reg_to_regnum_or_error
+	(gdbarch, cache->reg[regnum].loc.reg);
+      return frame_unwind_got_register (this_frame, regnum, realnum);
+
+    case DWARF2_FRAME_REG_SAVED_EXP:
+      addr = execute_stack_op (cache->reg[regnum].loc.exp.start,
+			       cache->reg[regnum].loc.exp.len,
+			       cache->addr_size,
+			       this_frame, cache->cfa, 1,
+			       cache->per_objfile);
+      return frame_unwind_got_memory (this_frame, regnum, addr);
+
+    case DWARF2_FRAME_REG_SAVED_VAL_OFFSET:
+      addr = cache->cfa + cache->reg[regnum].loc.offset;
+      return frame_unwind_got_constant (this_frame, regnum, addr);
+
+    case DWARF2_FRAME_REG_SAVED_VAL_EXP:
+      addr = execute_stack_op (cache->reg[regnum].loc.exp.start,
+			       cache->reg[regnum].loc.exp.len,
+			       cache->addr_size,
+			       this_frame, cache->cfa, 1,
+			       cache->per_objfile);
+      return frame_unwind_got_constant (this_frame, regnum, addr);
+
+    case DWARF2_FRAME_REG_UNSPECIFIED:
+      /* GCC, in its infinite wisdom decided to not provide unwind
+	 information for registers that are "same value".  Since
+	 DWARF2 (3 draft 7) doesn't define such behavior, said
+	 registers are actually undefined (which is different to CFI
+	 "undefined").  Code above issues a complaint about this.
+	 Here just fudge the books, assume GCC, and that the value is
+	 more inner on the stack.  */
+      return frame_unwind_got_register (this_frame, regnum, regnum);
+
+    case DWARF2_FRAME_REG_SAME_VALUE:
+      return frame_unwind_got_register (this_frame, regnum, regnum);
+
+    case DWARF2_FRAME_REG_CFA:
+      return frame_unwind_got_address (this_frame, regnum, cache->cfa);
+
+    case DWARF2_FRAME_REG_CFA_OFFSET:
+      addr = cache->cfa + cache->reg[regnum].loc.offset;
+      return frame_unwind_got_address (this_frame, regnum, addr);
+
+    case DWARF2_FRAME_REG_RA_OFFSET:
+      addr = cache->reg[regnum].loc.offset;
+      regnum = dwarf_reg_to_regnum_or_error
+	(gdbarch, cache->retaddr_reg.loc.reg);
+      addr += get_frame_register_unsigned (this_frame, regnum);
+      return frame_unwind_got_address (this_frame, regnum, addr);
+
+    case DWARF2_FRAME_REG_FN:
+      return cache->reg[regnum].loc.fn (this_frame, this_cache, regnum);
+
+    default:
+      internal_error (__FILE__, __LINE__, _("Unknown register rule."));
+    }
+}
+
+/* Proxy for tailcall_frame_dealloc_cache for bottom frame of a virtual tail
+   call frames chain.  */
+
+static void
+dwarf2_frame_dealloc_cache (struct frame_info *self, void *this_cache)
+{
+  struct dwarf2_frame_cache *cache = dwarf2_frame_cache (self, &this_cache);
+
+  if (cache->tailcall_cache)
+    dwarf2_tailcall_frame_unwind.dealloc_cache (self, cache->tailcall_cache);
+}
+
+static int
+dwarf2_frame_sniffer (const struct frame_unwind *self,
+		      struct frame_info *this_frame, void **this_cache)
+{
+  if (!dwarf2_frame_unwinders_enabled_p)
+    return 0;
+
+  /* Grab an address that is guaranteed to reside somewhere within the
+     function.  get_frame_pc(), with a no-return next function, can
+     end up returning something past the end of this function's body.
+     If the frame we're sniffing for is a signal frame whose start
+     address is placed on the stack by the OS, its FDE must
+     extend one byte before its start address or we could potentially
+     select the FDE of the previous function.  */
+  CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
+  struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr, NULL);
+
+  if (!fde)
+    return 0;
+
+  /* On some targets, signal trampolines may have unwind information.
+     We need to recognize them so that we set the frame type
+     correctly.  */
+
+  if (fde->cie->signal_frame
+      || dwarf2_frame_signal_frame_p (get_frame_arch (this_frame),
+				      this_frame))
+    return self->type == SIGTRAMP_FRAME;
+
+  if (self->type != NORMAL_FRAME)
+    return 0;
+
+  return 1;
+}
+
+static const struct frame_unwind dwarf2_frame_unwind =
+{
+  "dwarf2",
+  NORMAL_FRAME,
+  dwarf2_frame_unwind_stop_reason,
+  dwarf2_frame_this_id,
+  dwarf2_frame_prev_register,
+  NULL,
+  dwarf2_frame_sniffer,
+  dwarf2_frame_dealloc_cache
+};
+
+static const struct frame_unwind dwarf2_signal_frame_unwind =
+{
+  "dwarf2 signal",
+  SIGTRAMP_FRAME,
+  dwarf2_frame_unwind_stop_reason,
+  dwarf2_frame_this_id,
+  dwarf2_frame_prev_register,
+  NULL,
+  dwarf2_frame_sniffer,
+
+  /* TAILCALL_CACHE can never be in such frame to need dealloc_cache.  */
+  NULL
+};
+
+/* Append the DWARF-2 frame unwinders to GDBARCH's list.  */
+
+void
+dwarf2_append_unwinders (struct gdbarch *gdbarch)
+{
+  frame_unwind_append_unwinder (gdbarch, &dwarf2_frame_unwind);
+  frame_unwind_append_unwinder (gdbarch, &dwarf2_signal_frame_unwind);
+}
+
+
+/* There is no explicitly defined relationship between the CFA and the
+   location of frame's local variables and arguments/parameters.
+   Therefore, frame base methods on this page should probably only be
+   used as a last resort, just to avoid printing total garbage as a
+   response to the "info frame" command.  */
+
+static CORE_ADDR
+dwarf2_frame_base_address (struct frame_info *this_frame, void **this_cache)
+{
+  struct dwarf2_frame_cache *cache =
+    dwarf2_frame_cache (this_frame, this_cache);
+
+  return cache->cfa;
+}
+
+static const struct frame_base dwarf2_frame_base =
+{
+  &dwarf2_frame_unwind,
+  dwarf2_frame_base_address,
+  dwarf2_frame_base_address,
+  dwarf2_frame_base_address
+};
+
+const struct frame_base *
+dwarf2_frame_base_sniffer (struct frame_info *this_frame)
+{
+  CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
+
+  if (dwarf2_frame_find_fde (&block_addr, NULL))
+    return &dwarf2_frame_base;
+
+  return NULL;
+}
+
+/* Compute the CFA for THIS_FRAME, but only if THIS_FRAME came from
+   the DWARF unwinder.  This is used to implement
+   DW_OP_call_frame_cfa.  */
+
+CORE_ADDR
+dwarf2_frame_cfa (struct frame_info *this_frame)
+{
+  if (frame_unwinder_is (this_frame, &record_btrace_tailcall_frame_unwind)
+      || frame_unwinder_is (this_frame, &record_btrace_frame_unwind))
+    throw_error (NOT_AVAILABLE_ERROR,
+		 _("cfa not available for record btrace target"));
+
+  while (get_frame_type (this_frame) == INLINE_FRAME)
+    this_frame = get_prev_frame (this_frame);
+  if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE)
+    throw_error (NOT_AVAILABLE_ERROR,
+		_("can't compute CFA for this frame: "
+		  "required registers or memory are unavailable"));
+
+  if (get_frame_id (this_frame).stack_status != FID_STACK_VALID)
+    throw_error (NOT_AVAILABLE_ERROR,
+		_("can't compute CFA for this frame: "
+		  "frame base not available"));
+
+  return get_frame_base (this_frame);
+}
+
+/* We store the frame data on the BFD.  This is only done if it is
+   independent of the address space and so can be shared.  */
+static const struct bfd_key<comp_unit> dwarf2_frame_bfd_data;
+
+/* If any BFD sections require relocations (note; really should be if
+   any debug info requires relocations), then we store the frame data
+   on the objfile instead, and do not share it.  */
+const struct objfile_key<comp_unit> dwarf2_frame_objfile_data;
+
+
+/* Pointer encoding helper functions.  */
+
+/* GCC supports exception handling based on DWARF2 CFI.  However, for
+   technical reasons, it encodes addresses in its FDE's in a different
+   way.  Several "pointer encodings" are supported.  The encoding
+   that's used for a particular FDE is determined by the 'R'
+   augmentation in the associated CIE.  The argument of this
+   augmentation is a single byte.  
+
+   The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
+   LEB128.  This is encoded in bits 0, 1 and 2.  Bit 3 encodes whether
+   the address is signed or unsigned.  Bits 4, 5 and 6 encode how the
+   address should be interpreted (absolute, relative to the current
+   position in the FDE, ...).  Bit 7, indicates that the address
+   should be dereferenced.  */
+
+static gdb_byte
+encoding_for_size (unsigned int size)
+{
+  switch (size)
+    {
+    case 2:
+      return DW_EH_PE_udata2;
+    case 4:
+      return DW_EH_PE_udata4;
+    case 8:
+      return DW_EH_PE_udata8;
+    default:
+      internal_error (__FILE__, __LINE__, _("Unsupported address size"));
+    }
+}
+
+static CORE_ADDR
+read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
+		    int ptr_len, const gdb_byte *buf,
+		    unsigned int *bytes_read_ptr,
+		    CORE_ADDR func_base)
+{
+  ptrdiff_t offset;
+  CORE_ADDR base;
+
+  /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
+     FDE's.  */
+  if (encoding & DW_EH_PE_indirect)
+    internal_error (__FILE__, __LINE__, 
+		    _("Unsupported encoding: DW_EH_PE_indirect"));
+
+  *bytes_read_ptr = 0;
+
+  switch (encoding & 0x70)
+    {
+    case DW_EH_PE_absptr:
+      base = 0;
+      break;
+    case DW_EH_PE_pcrel:
+      base = bfd_section_vma (unit->dwarf_frame_section);
+      base += (buf - unit->dwarf_frame_buffer);
+      break;
+    case DW_EH_PE_datarel:
+      base = unit->dbase;
+      break;
+    case DW_EH_PE_textrel:
+      base = unit->tbase;
+      break;
+    case DW_EH_PE_funcrel:
+      base = func_base;
+      break;
+    case DW_EH_PE_aligned:
+      base = 0;
+      offset = buf - unit->dwarf_frame_buffer;
+      if ((offset % ptr_len) != 0)
+	{
+	  *bytes_read_ptr = ptr_len - (offset % ptr_len);
+	  buf += *bytes_read_ptr;
+	}
+      break;
+    default:
+      internal_error (__FILE__, __LINE__,
+		      _("Invalid or unsupported encoding"));
+    }
+
+  if ((encoding & 0x07) == 0x00)
+    {
+      encoding |= encoding_for_size (ptr_len);
+      if (bfd_get_sign_extend_vma (unit->abfd))
+	encoding |= DW_EH_PE_signed;
+    }
+
+  switch (encoding & 0x0f)
+    {
+    case DW_EH_PE_uleb128:
+      {
+	uint64_t value;
+	const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
+
+	*bytes_read_ptr += safe_read_uleb128 (buf, end_buf, &value) - buf;
+	return base + value;
+      }
+    case DW_EH_PE_udata2:
+      *bytes_read_ptr += 2;
+      return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
+    case DW_EH_PE_udata4:
+      *bytes_read_ptr += 4;
+      return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
+    case DW_EH_PE_udata8:
+      *bytes_read_ptr += 8;
+      return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
+    case DW_EH_PE_sleb128:
+      {
+	int64_t value;
+	const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
+
+	*bytes_read_ptr += safe_read_sleb128 (buf, end_buf, &value) - buf;
+	return base + value;
+      }
+    case DW_EH_PE_sdata2:
+      *bytes_read_ptr += 2;
+      return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
+    case DW_EH_PE_sdata4:
+      *bytes_read_ptr += 4;
+      return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
+    case DW_EH_PE_sdata8:
+      *bytes_read_ptr += 8;
+      return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
+    default:
+      internal_error (__FILE__, __LINE__,
+		      _("Invalid or unsupported encoding"));
+    }
+}
+
+
+/* Find CIE with the given CIE_POINTER in CIE_TABLE.  */
+static struct dwarf2_cie *
+find_cie (const dwarf2_cie_table &cie_table, ULONGEST cie_pointer)
+{
+  auto iter = cie_table.find (cie_pointer);
+  if (iter != cie_table.end ())
+    return iter->second;
+  return NULL;
+}
+
+static inline int
+bsearch_fde_cmp (const dwarf2_fde *fde, CORE_ADDR seek_pc)
+{
+  if (fde->initial_location + fde->address_range <= seek_pc)
+    return -1;
+  if (fde->initial_location <= seek_pc)
+    return 0;
+  return 1;
+}
+
+/* Find an existing comp_unit for an objfile, if any.  */
+
+static comp_unit *
+find_comp_unit (struct objfile *objfile)
+{
+  bfd *abfd = objfile->obfd;
+  if (gdb_bfd_requires_relocations (abfd))
+    return dwarf2_frame_objfile_data.get (objfile);
+
+  return dwarf2_frame_bfd_data.get (abfd);
+}
+
+/* Store the comp_unit on OBJFILE, or the corresponding BFD, as
+   appropriate.  */
+
+static void
+set_comp_unit (struct objfile *objfile, struct comp_unit *unit)
+{
+  bfd *abfd = objfile->obfd;
+  if (gdb_bfd_requires_relocations (abfd))
+    return dwarf2_frame_objfile_data.set (objfile, unit);
+
+  return dwarf2_frame_bfd_data.set (abfd, unit);
+}
+
+/* Find the FDE for *PC.  Return a pointer to the FDE, and store the
+   initial location associated with it into *PC.  */
+
+static struct dwarf2_fde *
+dwarf2_frame_find_fde (CORE_ADDR *pc, dwarf2_per_objfile **out_per_objfile)
+{
+  for (objfile *objfile : current_program_space->objfiles ())
+    {
+      CORE_ADDR offset;
+      CORE_ADDR seek_pc;
+
+      comp_unit *unit = find_comp_unit (objfile);
+      if (unit == NULL)
+	{
+	  dwarf2_build_frame_info (objfile);
+	  unit = find_comp_unit (objfile);
+	}
+      gdb_assert (unit != NULL);
+
+      dwarf2_fde_table *fde_table = &unit->fde_table;
+      if (fde_table->empty ())
+	continue;
+
+      gdb_assert (!objfile->section_offsets.empty ());
+      offset = objfile->text_section_offset ();
+
+      gdb_assert (!fde_table->empty ());
+      if (*pc < offset + (*fde_table)[0]->initial_location)
+	continue;
+
+      seek_pc = *pc - offset;
+      auto it = gdb::binary_search (fde_table->begin (), fde_table->end (),
+				    seek_pc, bsearch_fde_cmp);
+      if (it != fde_table->end ())
+	{
+	  *pc = (*it)->initial_location + offset;
+	  if (out_per_objfile != nullptr)
+	    *out_per_objfile = get_dwarf2_per_objfile (objfile);
+
+	  return *it;
+	}
+    }
+  return NULL;
+}
+
+/* Add FDE to FDE_TABLE.  */
+static void
+add_fde (dwarf2_fde_table *fde_table, struct dwarf2_fde *fde)
+{
+  if (fde->address_range == 0)
+    /* Discard useless FDEs.  */
+    return;
+
+  fde_table->push_back (fde);
+}
+
+#define DW64_CIE_ID 0xffffffffffffffffULL
+
+/* Defines the type of eh_frames that are expected to be decoded: CIE, FDE
+   or any of them.  */
+
+enum eh_frame_type
+{
+  EH_CIE_TYPE_ID = 1 << 0,
+  EH_FDE_TYPE_ID = 1 << 1,
+  EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID
+};
+
+static const gdb_byte *decode_frame_entry (struct gdbarch *gdbarch,
+					   struct comp_unit *unit,
+					   const gdb_byte *start,
+					   int eh_frame_p,
+					   dwarf2_cie_table &cie_table,
+					   dwarf2_fde_table *fde_table,
+					   enum eh_frame_type entry_type);
+
+/* Decode the next CIE or FDE, entry_type specifies the expected type.
+   Return NULL if invalid input, otherwise the next byte to be processed.  */
+
+static const gdb_byte *
+decode_frame_entry_1 (struct gdbarch *gdbarch,
+		      struct comp_unit *unit, const gdb_byte *start,
+		      int eh_frame_p,
+		      dwarf2_cie_table &cie_table,
+		      dwarf2_fde_table *fde_table,
+		      enum eh_frame_type entry_type)
+{
+  const gdb_byte *buf, *end;
+  ULONGEST length;
+  unsigned int bytes_read;
+  int dwarf64_p;
+  ULONGEST cie_id;
+  ULONGEST cie_pointer;
+  int64_t sleb128;
+  uint64_t uleb128;
+
+  buf = start;
+  length = read_initial_length (unit->abfd, buf, &bytes_read, false);
+  buf += bytes_read;
+  end = buf + (size_t) length;
+
+  if (length == 0)
+    return end;
+
+  /* Are we still within the section?  */
+  if (end <= buf || end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
+    return NULL;
+
+  /* Distinguish between 32 and 64-bit encoded frame info.  */
+  dwarf64_p = (bytes_read == 12);
+
+  /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs.  */
+  if (eh_frame_p)
+    cie_id = 0;
+  else if (dwarf64_p)
+    cie_id = DW64_CIE_ID;
+  else
+    cie_id = DW_CIE_ID;
+
+  if (dwarf64_p)
+    {
+      cie_pointer = read_8_bytes (unit->abfd, buf);
+      buf += 8;
+    }
+  else
+    {
+      cie_pointer = read_4_bytes (unit->abfd, buf);
+      buf += 4;
+    }
+
+  if (cie_pointer == cie_id)
+    {
+      /* This is a CIE.  */
+      struct dwarf2_cie *cie;
+      char *augmentation;
+      unsigned int cie_version;
+
+      /* Check that a CIE was expected.  */
+      if ((entry_type & EH_CIE_TYPE_ID) == 0)
+	error (_("Found a CIE when not expecting it."));
+
+      /* Record the offset into the .debug_frame section of this CIE.  */
+      cie_pointer = start - unit->dwarf_frame_buffer;
+
+      /* Check whether we've already read it.  */
+      if (find_cie (cie_table, cie_pointer))
+	return end;
+
+      cie = XOBNEW (&unit->obstack, struct dwarf2_cie);
+      cie->initial_instructions = NULL;
+      cie->cie_pointer = cie_pointer;
+
+      /* The encoding for FDE's in a normal .debug_frame section
+	 depends on the target address size.  */
+      cie->encoding = DW_EH_PE_absptr;
+
+      /* We'll determine the final value later, but we need to
+	 initialize it conservatively.  */
+      cie->signal_frame = 0;
+
+      /* Check version number.  */
+      cie_version = read_1_byte (unit->abfd, buf);
+      if (cie_version != 1 && cie_version != 3 && cie_version != 4)
+	return NULL;
+      cie->version = cie_version;
+      buf += 1;
+
+      /* Interpret the interesting bits of the augmentation.  */
+      cie->augmentation = augmentation = (char *) buf;
+      buf += (strlen (augmentation) + 1);
+
+      /* Ignore armcc augmentations.  We only use them for quirks,
+	 and that doesn't happen until later.  */
+      if (startswith (augmentation, "armcc"))
+	augmentation += strlen (augmentation);
+
+      /* The GCC 2.x "eh" augmentation has a pointer immediately
+	 following the augmentation string, so it must be handled
+	 first.  */
+      if (augmentation[0] == 'e' && augmentation[1] == 'h')
+	{
+	  /* Skip.  */
+	  buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
+	  augmentation += 2;
+	}
+
+      if (cie->version >= 4)
+	{
+	  /* FIXME: check that this is the same as from the CU header.  */
+	  cie->addr_size = read_1_byte (unit->abfd, buf);
+	  ++buf;
+	  cie->segment_size = read_1_byte (unit->abfd, buf);
+	  ++buf;
+	}
+      else
+	{
+	  cie->addr_size = gdbarch_dwarf2_addr_size (gdbarch);
+	  cie->segment_size = 0;
+	}
+      /* Address values in .eh_frame sections are defined to have the
+	 target's pointer size.  Watchout: This breaks frame info for
+	 targets with pointer size < address size, unless a .debug_frame
+	 section exists as well.  */
+      if (eh_frame_p)
+	cie->ptr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
+      else
+	cie->ptr_size = cie->addr_size;
+
+      buf = gdb_read_uleb128 (buf, end, &uleb128);
+      if (buf == NULL)
+	return NULL;
+      cie->code_alignment_factor = uleb128;
+
+      buf = gdb_read_sleb128 (buf, end, &sleb128);
+      if (buf == NULL)
+	return NULL;
+      cie->data_alignment_factor = sleb128;
+
+      if (cie_version == 1)
+	{
+	  cie->return_address_register = read_1_byte (unit->abfd, buf);
+	  ++buf;
+	}
+      else
+	{
+	  buf = gdb_read_uleb128 (buf, end, &uleb128);
+	  if (buf == NULL)
+	    return NULL;
+	  cie->return_address_register = uleb128;
+	}
+
+      cie->return_address_register
+	= dwarf2_frame_adjust_regnum (gdbarch,
+				      cie->return_address_register,
+				      eh_frame_p);
+
+      cie->saw_z_augmentation = (*augmentation == 'z');
+      if (cie->saw_z_augmentation)
+	{
+	  uint64_t uleb_length;
+
+	  buf = gdb_read_uleb128 (buf, end, &uleb_length);
+	  if (buf == NULL)
+	    return NULL;
+	  cie->initial_instructions = buf + uleb_length;
+	  augmentation++;
+	}
+
+      while (*augmentation)
+	{
+	  /* "L" indicates a byte showing how the LSDA pointer is encoded.  */
+	  if (*augmentation == 'L')
+	    {
+	      /* Skip.  */
+	      buf++;
+	      augmentation++;
+	    }
+
+	  /* "R" indicates a byte indicating how FDE addresses are encoded.  */
+	  else if (*augmentation == 'R')
+	    {
+	      cie->encoding = *buf++;
+	      augmentation++;
+	    }
+
+	  /* "P" indicates a personality routine in the CIE augmentation.  */
+	  else if (*augmentation == 'P')
+	    {
+	      /* Skip.  Avoid indirection since we throw away the result.  */
+	      gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
+	      read_encoded_value (unit, encoding, cie->ptr_size,
+				  buf, &bytes_read, 0);
+	      buf += bytes_read;
+	      augmentation++;
+	    }
+
+	  /* "S" indicates a signal frame, such that the return
+	     address must not be decremented to locate the call frame
+	     info for the previous frame; it might even be the first
+	     instruction of a function, so decrementing it would take
+	     us to a different function.  */
+	  else if (*augmentation == 'S')
+	    {
+	      cie->signal_frame = 1;
+	      augmentation++;
+	    }
+
+	  /* Otherwise we have an unknown augmentation.  Assume that either
+	     there is no augmentation data, or we saw a 'z' prefix.  */
+	  else
+	    {
+	      if (cie->initial_instructions)
+		buf = cie->initial_instructions;
+	      break;
+	    }
+	}
+
+      cie->initial_instructions = buf;
+      cie->end = end;
+      cie->unit = unit;
+
+      cie_table[cie->cie_pointer] = cie;
+    }
+  else
+    {
+      /* This is a FDE.  */
+      struct dwarf2_fde *fde;
+      CORE_ADDR addr;
+
+      /* Check that an FDE was expected.  */
+      if ((entry_type & EH_FDE_TYPE_ID) == 0)
+	error (_("Found an FDE when not expecting it."));
+
+      /* In an .eh_frame section, the CIE pointer is the delta between the
+	 address within the FDE where the CIE pointer is stored and the
+	 address of the CIE.  Convert it to an offset into the .eh_frame
+	 section.  */
+      if (eh_frame_p)
+	{
+	  cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
+	  cie_pointer -= (dwarf64_p ? 8 : 4);
+	}
+
+      /* In either case, validate the result is still within the section.  */
+      if (cie_pointer >= unit->dwarf_frame_size)
+	return NULL;
+
+      fde = XOBNEW (&unit->obstack, struct dwarf2_fde);
+      fde->cie = find_cie (cie_table, cie_pointer);
+      if (fde->cie == NULL)
+	{
+	  decode_frame_entry (gdbarch, unit,
+			      unit->dwarf_frame_buffer + cie_pointer,
+			      eh_frame_p, cie_table, fde_table,
+			      EH_CIE_TYPE_ID);
+	  fde->cie = find_cie (cie_table, cie_pointer);
+	}
+
+      gdb_assert (fde->cie != NULL);
+
+      addr = read_encoded_value (unit, fde->cie->encoding, fde->cie->ptr_size,
+				 buf, &bytes_read, 0);
+      fde->initial_location = gdbarch_adjust_dwarf2_addr (gdbarch, addr);
+      buf += bytes_read;
+
+      fde->address_range =
+	read_encoded_value (unit, fde->cie->encoding & 0x0f,
+			    fde->cie->ptr_size, buf, &bytes_read, 0);
+      addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + fde->address_range);
+      fde->address_range = addr - fde->initial_location;
+      buf += bytes_read;
+
+      /* A 'z' augmentation in the CIE implies the presence of an
+	 augmentation field in the FDE as well.  The only thing known
+	 to be in here at present is the LSDA entry for EH.  So we
+	 can skip the whole thing.  */
+      if (fde->cie->saw_z_augmentation)
+	{
+	  uint64_t uleb_length;
+
+	  buf = gdb_read_uleb128 (buf, end, &uleb_length);
+	  if (buf == NULL)
+	    return NULL;
+	  buf += uleb_length;
+	  if (buf > end)
+	    return NULL;
+	}
+
+      fde->instructions = buf;
+      fde->end = end;
+
+      fde->eh_frame_p = eh_frame_p;
+
+      add_fde (fde_table, fde);
+    }
+
+  return end;
+}
+
+/* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we
+   expect an FDE or a CIE.  */
+
+static const gdb_byte *
+decode_frame_entry (struct gdbarch *gdbarch,
+		    struct comp_unit *unit, const gdb_byte *start,
+		    int eh_frame_p,
+		    dwarf2_cie_table &cie_table,
+		    dwarf2_fde_table *fde_table,
+		    enum eh_frame_type entry_type)
+{
+  enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
+  const gdb_byte *ret;
+  ptrdiff_t start_offset;
+
+  while (1)
+    {
+      ret = decode_frame_entry_1 (gdbarch, unit, start, eh_frame_p,
+				  cie_table, fde_table, entry_type);
+      if (ret != NULL)
+	break;
+
+      /* We have corrupt input data of some form.  */
+
+      /* ??? Try, weakly, to work around compiler/assembler/linker bugs
+	 and mismatches wrt padding and alignment of debug sections.  */
+      /* Note that there is no requirement in the standard for any
+	 alignment at all in the frame unwind sections.  Testing for
+	 alignment before trying to interpret data would be incorrect.
+
+	 However, GCC traditionally arranged for frame sections to be
+	 sized such that the FDE length and CIE fields happen to be
+	 aligned (in theory, for performance).  This, unfortunately,
+	 was done with .align directives, which had the side effect of
+	 forcing the section to be aligned by the linker.
+
+	 This becomes a problem when you have some other producer that
+	 creates frame sections that are not as strictly aligned.  That
+	 produces a hole in the frame info that gets filled by the 
+	 linker with zeros.
+
+	 The GCC behaviour is arguably a bug, but it's effectively now
+	 part of the ABI, so we're now stuck with it, at least at the
+	 object file level.  A smart linker may decide, in the process
+	 of compressing duplicate CIE information, that it can rewrite
+	 the entire output section without this extra padding.  */
+
+      start_offset = start - unit->dwarf_frame_buffer;
+      if (workaround < ALIGN4 && (start_offset & 3) != 0)
+	{
+	  start += 4 - (start_offset & 3);
+	  workaround = ALIGN4;
+	  continue;
+	}
+      if (workaround < ALIGN8 && (start_offset & 7) != 0)
+	{
+	  start += 8 - (start_offset & 7);
+	  workaround = ALIGN8;
+	  continue;
+	}
+
+      /* Nothing left to try.  Arrange to return as if we've consumed
+	 the entire input section.  Hopefully we'll get valid info from
+	 the other of .debug_frame/.eh_frame.  */
+      workaround = FAIL;
+      ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
+      break;
+    }
+
+  switch (workaround)
+    {
+    case NONE:
+      break;
+
+    case ALIGN4:
+      complaint (_("\
+Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
+		 bfd_get_filename (unit->dwarf_frame_section->owner),
+		 bfd_section_name (unit->dwarf_frame_section));
+      break;
+
+    case ALIGN8:
+      complaint (_("\
+Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
+		 bfd_get_filename (unit->dwarf_frame_section->owner),
+		 bfd_section_name (unit->dwarf_frame_section));
+      break;
+
+    default:
+      complaint (_("Corrupt data in %s:%s"),
+		 bfd_get_filename (unit->dwarf_frame_section->owner),
+		 bfd_section_name (unit->dwarf_frame_section));
+      break;
+    }
+
+  return ret;
+}
+
+static bool
+fde_is_less_than (const dwarf2_fde *aa, const dwarf2_fde *bb)
+{
+  if (aa->initial_location == bb->initial_location)
+    {
+      if (aa->address_range != bb->address_range
+	  && aa->eh_frame_p == 0 && bb->eh_frame_p == 0)
+	/* Linker bug, e.g. gold/10400.
+	   Work around it by keeping stable sort order.  */
+	return aa < bb;
+      else
+	/* Put eh_frame entries after debug_frame ones.  */
+	return aa->eh_frame_p < bb->eh_frame_p;
+    }
+
+  return aa->initial_location < bb->initial_location;
+}
+
+void
+dwarf2_build_frame_info (struct objfile *objfile)
+{
+  const gdb_byte *frame_ptr;
+  dwarf2_cie_table cie_table;
+  dwarf2_fde_table fde_table;
+
+  struct gdbarch *gdbarch = objfile->arch ();
+
+  /* Build a minimal decoding of the DWARF2 compilation unit.  */
+  std::unique_ptr<comp_unit> unit (new comp_unit (objfile));
+
+  if (objfile->separate_debug_objfile_backlink == NULL)
+    {
+      /* Do not read .eh_frame from separate file as they must be also
+	 present in the main file.  */
+      dwarf2_get_section_info (objfile, DWARF2_EH_FRAME,
+			       &unit->dwarf_frame_section,
+			       &unit->dwarf_frame_buffer,
+			       &unit->dwarf_frame_size);
+      if (unit->dwarf_frame_size)
+	{
+	  asection *got, *txt;
+
+	  /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
+	     that is used for the i386/amd64 target, which currently is
+	     the only target in GCC that supports/uses the
+	     DW_EH_PE_datarel encoding.  */
+	  got = bfd_get_section_by_name (unit->abfd, ".got");
+	  if (got)
+	    unit->dbase = got->vma;
+
+	  /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
+	     so far.  */
+	  txt = bfd_get_section_by_name (unit->abfd, ".text");
+	  if (txt)
+	    unit->tbase = txt->vma;
+
+	  try
+	    {
+	      frame_ptr = unit->dwarf_frame_buffer;
+	      while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
+		frame_ptr = decode_frame_entry (gdbarch, unit.get (),
+						frame_ptr, 1,
+						cie_table, &fde_table,
+						EH_CIE_OR_FDE_TYPE_ID);
+	    }
+
+	  catch (const gdb_exception_error &e)
+	    {
+	      warning (_("skipping .eh_frame info of %s: %s"),
+		       objfile_name (objfile), e.what ());
+
+	      fde_table.clear ();
+	      /* The cie_table is discarded below.  */
+	    }
+
+	  cie_table.clear ();
+	}
+    }
+
+  dwarf2_get_section_info (objfile, DWARF2_DEBUG_FRAME,
+			   &unit->dwarf_frame_section,
+			   &unit->dwarf_frame_buffer,
+			   &unit->dwarf_frame_size);
+  if (unit->dwarf_frame_size)
+    {
+      size_t num_old_fde_entries = fde_table.size ();
+
+      try
+	{
+	  frame_ptr = unit->dwarf_frame_buffer;
+	  while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
+	    frame_ptr = decode_frame_entry (gdbarch, unit.get (), frame_ptr, 0,
+					    cie_table, &fde_table,
+					    EH_CIE_OR_FDE_TYPE_ID);
+	}
+      catch (const gdb_exception_error &e)
+	{
+	  warning (_("skipping .debug_frame info of %s: %s"),
+		   objfile_name (objfile), e.what ());
+
+	  fde_table.resize (num_old_fde_entries);
+	}
+    }
+
+  struct dwarf2_fde *fde_prev = NULL;
+  struct dwarf2_fde *first_non_zero_fde = NULL;
+
+  /* Prepare FDE table for lookups.  */
+  std::sort (fde_table.begin (), fde_table.end (), fde_is_less_than);
+
+  /* Check for leftovers from --gc-sections.  The GNU linker sets
+     the relevant symbols to zero, but doesn't zero the FDE *end*
+     ranges because there's no relocation there.  It's (offset,
+     length), not (start, end).  On targets where address zero is
+     just another valid address this can be a problem, since the
+     FDEs appear to be non-empty in the output --- we could pick
+     out the wrong FDE.  To work around this, when overlaps are
+     detected, we prefer FDEs that do not start at zero.
+
+     Start by finding the first FDE with non-zero start.  Below
+     we'll discard all FDEs that start at zero and overlap this
+     one.  */
+  for (struct dwarf2_fde *fde : fde_table)
+    {
+      if (fde->initial_location != 0)
+	{
+	  first_non_zero_fde = fde;
+	  break;
+	}
+    }
+
+  /* Since we'll be doing bsearch, squeeze out identical (except
+     for eh_frame_p) fde entries so bsearch result is predictable.
+     Also discard leftovers from --gc-sections.  */
+  for (struct dwarf2_fde *fde : fde_table)
+    {
+      if (fde->initial_location == 0
+	  && first_non_zero_fde != NULL
+	  && (first_non_zero_fde->initial_location
+	      < fde->initial_location + fde->address_range))
+	continue;
+
+      if (fde_prev != NULL
+	  && fde_prev->initial_location == fde->initial_location)
+	continue;
+
+      unit->fde_table.push_back (fde);
+      fde_prev = fde;
+    }
+  unit->fde_table.shrink_to_fit ();
+
+  set_comp_unit (objfile, unit.release ());
+}
+
+/* Handle 'maintenance show dwarf unwinders'.  */
+
+static void
+show_dwarf_unwinders_enabled_p (struct ui_file *file, int from_tty,
+				struct cmd_list_element *c,
+				const char *value)
+{
+  fprintf_filtered (file,
+		    _("The DWARF stack unwinders are currently %s.\n"),
+		    value);
+}
+
+void _initialize_dwarf2_frame ();
+void
+_initialize_dwarf2_frame ()
+{
+  dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
+
+  add_setshow_boolean_cmd ("unwinders", class_obscure,
+			   &dwarf2_frame_unwinders_enabled_p , _("\
+Set whether the DWARF stack frame unwinders are used."), _("\
+Show whether the DWARF stack frame unwinders are used."), _("\
+When enabled the DWARF stack frame unwinders can be used for architectures\n\
+that support the DWARF unwinders.  Enabling the DWARF unwinders for an\n\
+architecture that doesn't support them will have no effect."),
+			   NULL,
+			   show_dwarf_unwinders_enabled_p,
+			   &set_dwarf_cmdlist,
+			   &show_dwarf_cmdlist);
+
+#if GDB_SELF_TEST
+  selftests::register_test_foreach_arch ("execute_cfa_program",
+					 selftests::execute_cfa_program_test);
+#endif
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame.h ./gdb/dwarf2/frame.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/frame.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,265 @@
+/* Frame unwinder for frames with DWARF Call Frame Information.
+
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
+
+   Contributed by Mark Kettenis.
+
+   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 DWARF2_FRAME_H
+#define DWARF2_FRAME_H 1
+
+struct gdbarch;
+struct frame_info;
+struct dwarf2_per_cu_data;
+struct agent_expr;
+struct axs_value;
+
+/* Register rule.  */
+
+enum dwarf2_frame_reg_rule
+{
+  /* Make certain that 0 maps onto the correct enum value; the
+     corresponding structure is being initialized using memset zero.
+     This indicates that CFI didn't provide any information at all
+     about a register, leaving how to obtain its value totally
+     unspecified.  */
+  DWARF2_FRAME_REG_UNSPECIFIED = 0,
+
+  /* The term "undefined" comes from the DWARF2 CFI spec which this
+     code is modeling; it indicates that the register's value is
+     "undefined".  GCC uses the less formal term "unsaved".  Its
+     definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED.
+     The failure to differentiate the two helps explain a few problems
+     with the CFI generated by GCC.  */
+  DWARF2_FRAME_REG_UNDEFINED,
+  DWARF2_FRAME_REG_SAVED_OFFSET,
+  DWARF2_FRAME_REG_SAVED_REG,
+  DWARF2_FRAME_REG_SAVED_EXP,
+  DWARF2_FRAME_REG_SAME_VALUE,
+
+  /* These are defined in Dwarf3.  */
+  DWARF2_FRAME_REG_SAVED_VAL_OFFSET,
+  DWARF2_FRAME_REG_SAVED_VAL_EXP,
+
+  /* These aren't defined by the DWARF2 CFI specification, but are
+     used internally by GDB.  */
+  DWARF2_FRAME_REG_FN,		/* Call a registered function.  */
+  DWARF2_FRAME_REG_RA,		/* Return Address.  */
+  DWARF2_FRAME_REG_RA_OFFSET,	/* Return Address with offset.  */
+  DWARF2_FRAME_REG_CFA,		/* Call Frame Address.  */
+  DWARF2_FRAME_REG_CFA_OFFSET	/* Call Frame Address with offset.  */
+};
+
+/* Register state.  */
+
+struct dwarf2_frame_state_reg
+{
+  /* Each register save state can be described in terms of a CFA slot,
+     another register, or a location expression.  */
+  union {
+    LONGEST offset;
+    ULONGEST reg;
+    struct
+    {
+      const gdb_byte *start;
+      ULONGEST len;
+    } exp;
+    struct value *(*fn) (struct frame_info *this_frame, void **this_cache,
+			 int regnum);
+  } loc;
+  enum dwarf2_frame_reg_rule how;
+};
+
+enum cfa_how_kind
+{
+  CFA_UNSET,
+  CFA_REG_OFFSET,
+  CFA_EXP
+};
+
+struct dwarf2_frame_state_reg_info
+{
+  dwarf2_frame_state_reg_info () = default;
+  ~dwarf2_frame_state_reg_info ()
+  {
+    delete prev;
+  }
+
+  /* Copy constructor.  */
+  dwarf2_frame_state_reg_info (const dwarf2_frame_state_reg_info &src)
+    : reg (src.reg), cfa_offset (src.cfa_offset),
+      cfa_reg (src.cfa_reg), cfa_how (src.cfa_how), cfa_exp (src.cfa_exp),
+      prev (src.prev)
+  {
+  }
+
+  /* Assignment operator for both move-assignment and copy-assignment.  */
+  dwarf2_frame_state_reg_info&
+  operator= (dwarf2_frame_state_reg_info rhs)
+  {
+    swap (*this, rhs);
+    return *this;
+  }
+
+  /* Move constructor.  */
+  dwarf2_frame_state_reg_info (dwarf2_frame_state_reg_info &&rhs) noexcept
+    : reg (std::move (rhs.reg)), cfa_offset (rhs.cfa_offset),
+      cfa_reg (rhs.cfa_reg), cfa_how (rhs.cfa_how), cfa_exp (rhs.cfa_exp),
+      prev (rhs.prev)
+  {
+    rhs.prev = nullptr;
+  }
+
+  /* If necessary, enlarge the register set to hold NUM_REGS_REQUESTED
+     registers.  */
+  void alloc_regs (int num_regs_requested)
+  {
+    gdb_assert (num_regs_requested > 0);
+
+    if (num_regs_requested <= reg.size ())
+      return;
+
+    reg.resize (num_regs_requested);
+  }
+
+  std::vector<struct dwarf2_frame_state_reg> reg;
+
+  LONGEST cfa_offset = 0;
+  ULONGEST cfa_reg = 0;
+  enum cfa_how_kind cfa_how = CFA_UNSET;
+  const gdb_byte *cfa_exp = NULL;
+
+  /* Used to implement DW_CFA_remember_state.  */
+  struct dwarf2_frame_state_reg_info *prev = NULL;
+
+private:
+  friend void swap (dwarf2_frame_state_reg_info& lhs,
+		    dwarf2_frame_state_reg_info& rhs)
+  {
+    using std::swap;
+
+    swap (lhs.reg, rhs.reg);
+    swap (lhs.cfa_offset, rhs.cfa_offset);
+    swap (lhs.cfa_reg, rhs.cfa_reg);
+    swap (lhs.cfa_how, rhs.cfa_how);
+    swap (lhs.cfa_exp, rhs.cfa_exp);
+    swap (lhs.prev, rhs.prev);
+  }
+};
+
+struct dwarf2_cie;
+
+/* Structure describing a frame state.  */
+
+struct dwarf2_frame_state
+{
+  dwarf2_frame_state (CORE_ADDR pc, struct dwarf2_cie *cie);
+
+  /* Each register save state can be described in terms of a CFA slot,
+     another register, or a location expression.  */
+  struct dwarf2_frame_state_reg_info regs {};
+
+  /* The PC described by the current frame state.  */
+  CORE_ADDR pc;
+
+  /* Initial register set from the CIE.
+     Used to implement DW_CFA_restore.  */
+  struct dwarf2_frame_state_reg_info initial {};
+
+  /* The information we care about from the CIE.  */
+  const LONGEST data_align;
+  const ULONGEST code_align;
+  const ULONGEST retaddr_column;
+
+  /* Flags for known producer quirks.  */
+
+  /* The ARM compilers, in DWARF2 mode, assume that DW_CFA_def_cfa
+     and DW_CFA_def_cfa_offset takes a factored offset.  */
+  bool armcc_cfa_offsets_sf = false;
+
+  /* The ARM compilers, in DWARF2 or DWARF3 mode, may assume that
+     the CFA is defined as REG - OFFSET rather than REG + OFFSET.  */
+  bool armcc_cfa_offsets_reversed = false;
+};
+
+/* When this is true the DWARF frame unwinders can be used if they are
+   registered with the gdbarch.  Not all architectures can or do use the
+   DWARF unwinders.  Setting this to true on a target that does not
+   otherwise support the DWARF unwinders has no effect.  */
+extern bool dwarf2_frame_unwinders_enabled_p;
+
+/* Set the architecture-specific register state initialization
+   function for GDBARCH to INIT_REG.  */
+
+extern void dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
+				       void (*init_reg) (struct gdbarch *, int,
+					     struct dwarf2_frame_state_reg *,
+					     struct frame_info *));
+
+/* Set the architecture-specific signal trampoline recognition
+   function for GDBARCH to SIGNAL_FRAME_P.  */
+
+extern void
+  dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
+				   int (*signal_frame_p) (struct gdbarch *,
+							  struct frame_info *));
+
+/* Set the architecture-specific adjustment of .eh_frame and .debug_frame
+   register numbers.  */
+
+extern void
+  dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
+				  int (*adjust_regnum) (struct gdbarch *,
+							int, int));
+
+/* Append the DWARF-2 frame unwinders to GDBARCH's list.  */
+
+void dwarf2_append_unwinders (struct gdbarch *gdbarch);
+
+/* Return the frame base methods for the function that contains PC, or
+   NULL if it can't be handled by the DWARF CFI frame unwinder.  */
+
+extern const struct frame_base *
+  dwarf2_frame_base_sniffer (struct frame_info *this_frame);
+
+/* Compute the DWARF CFA for a frame.  */
+
+CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame);
+
+/* Find the CFA information for PC.
+
+   Return 1 if a register is used for the CFA, or 0 if another
+   expression is used.  Throw an exception on error.
+
+   GDBARCH is the architecture to use.
+   DATA is the per-CU data.
+
+   REGNUM_OUT is an out parameter that is set to the register number.
+   OFFSET_OUT is the offset to use from this register.
+   These are only filled in when 1 is returned.
+
+   TEXT_OFFSET_OUT, CFA_START_OUT, and CFA_END_OUT describe the CFA
+   in other cases.  These are only used when 0 is returned.  */
+
+extern int dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc,
+				  struct dwarf2_per_cu_data *data,
+				  int *regnum_out, LONGEST *offset_out,
+				  CORE_ADDR *text_offset_out,
+				  const gdb_byte **cfa_start_out,
+				  const gdb_byte **cfa_end_out);
+
+#endif /* dwarf2-frame.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame-tailcall.c ./gdb/dwarf2/frame-tailcall.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame-tailcall.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/frame-tailcall.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,488 @@
+/* Virtual tail call frames unwinder for GDB.
+
+   Copyright (C) 2010-2021 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 "dwarf2/frame-tailcall.h"
+#include "dwarf2/loc.h"
+#include "frame-unwind.h"
+#include "block.h"
+#include "hashtab.h"
+#include "gdbtypes.h"
+#include "regcache.h"
+#include "value.h"
+#include "dwarf2/frame.h"
+#include "gdbarch.h"
+
+/* Contains struct tailcall_cache indexed by next_bottom_frame.  */
+static htab_t cache_htab;
+
+/* Associate structure of the unwinder to call_site_chain.  Lifetime of this
+   structure is maintained by REFC decremented by dealloc_cache, all of them
+   get deleted during reinit_frame_cache.  */
+struct tailcall_cache
+{
+  /* It must be the first one of this struct.  It is the furthest callee.  */
+  struct frame_info *next_bottom_frame;
+
+  /* Reference count.  The whole chain of virtual tail call frames shares one
+     tailcall_cache.  */
+  int refc;
+
+  /* Associated found virtual tail call frames chain, it is never NULL.  */
+  struct call_site_chain *chain;
+
+  /* Cached pretended_chain_levels result.  */
+  int chain_levels;
+
+  /* Unwound PC from the top (caller) frame, as it is not contained
+     in CHAIN.  */
+  CORE_ADDR prev_pc;
+
+  /* Compensate SP in caller frames appropriately.  prev_sp and
+     entry_cfa_sp_offset are valid only if PREV_SP_P.  PREV_SP is SP at the top
+     (caller) frame.  ENTRY_CFA_SP_OFFSET is shift of SP in tail call frames
+     against next_bottom_frame SP.  */
+  unsigned prev_sp_p : 1;
+  CORE_ADDR prev_sp;
+  LONGEST entry_cfa_sp_offset;
+};
+
+/* hash_f for htab_create_alloc of cache_htab.  */
+
+static hashval_t
+cache_hash (const void *arg)
+{
+  const struct tailcall_cache *cache = (const struct tailcall_cache *) arg;
+
+  return htab_hash_pointer (cache->next_bottom_frame);
+}
+
+/* eq_f for htab_create_alloc of cache_htab.  */
+
+static int
+cache_eq (const void *arg1, const void *arg2)
+{
+  const struct tailcall_cache *cache1 = (const struct tailcall_cache *) arg1;
+  const struct tailcall_cache *cache2 = (const struct tailcall_cache *) arg2;
+
+  return cache1->next_bottom_frame == cache2->next_bottom_frame;
+}
+
+/* Create new tailcall_cache for NEXT_BOTTOM_FRAME, NEXT_BOTTOM_FRAME must not
+   yet have been indexed by cache_htab.  Caller holds one reference of the new
+   tailcall_cache.  */
+
+static struct tailcall_cache *
+cache_new_ref1 (struct frame_info *next_bottom_frame)
+{
+  struct tailcall_cache *cache = XCNEW (struct tailcall_cache);
+  void **slot;
+
+  cache->next_bottom_frame = next_bottom_frame;
+  cache->refc = 1;
+
+  slot = htab_find_slot (cache_htab, cache, INSERT);
+  gdb_assert (*slot == NULL);
+  *slot = cache;
+
+  return cache;
+}
+
+/* Create new reference to CACHE.  */
+
+static void
+cache_ref (struct tailcall_cache *cache)
+{
+  gdb_assert (cache->refc > 0);
+
+  cache->refc++;
+}
+
+/* Drop reference to CACHE, possibly fully freeing it and unregistering it from
+   cache_htab.  */
+
+static void
+cache_unref (struct tailcall_cache *cache)
+{
+  gdb_assert (cache->refc > 0);
+
+  if (!--cache->refc)
+    {
+      gdb_assert (htab_find_slot (cache_htab, cache, NO_INSERT) != NULL);
+      htab_remove_elt (cache_htab, cache);
+
+      xfree (cache->chain);
+      xfree (cache);
+    }
+}
+
+/* Return 1 if FI is a non-bottom (not the callee) tail call frame.  Otherwise
+   return 0.  */
+
+static int
+frame_is_tailcall (struct frame_info *fi)
+{
+  return frame_unwinder_is (fi, &dwarf2_tailcall_frame_unwind);
+}
+
+/* Try to find tailcall_cache in cache_htab if FI is a part of its virtual tail
+   call chain.  Otherwise return NULL.  No new reference is created.  */
+
+static struct tailcall_cache *
+cache_find (struct frame_info *fi)
+{
+  struct tailcall_cache *cache;
+  void **slot;
+
+  while (frame_is_tailcall (fi))
+    {
+      fi = get_next_frame (fi);
+      gdb_assert (fi != NULL);
+    }
+
+  slot = htab_find_slot (cache_htab, &fi, NO_INSERT);
+  if (slot == NULL)
+    return NULL;
+
+  cache = (struct tailcall_cache *) *slot;
+  gdb_assert (cache != NULL);
+  return cache;
+}
+
+/* Number of virtual frames between THIS_FRAME and CACHE->NEXT_BOTTOM_FRAME.
+   If THIS_FRAME is CACHE-> NEXT_BOTTOM_FRAME return -1.  */
+
+static int
+existing_next_levels (struct frame_info *this_frame,
+		      struct tailcall_cache *cache)
+{
+  int retval = (frame_relative_level (this_frame)
+		- frame_relative_level (cache->next_bottom_frame) - 1);
+
+  gdb_assert (retval >= -1);
+
+  return retval;
+}
+
+/* The number of virtual tail call frames in CHAIN.  With no virtual tail call
+   frames the function would return 0 (but CHAIN does not exist in such
+   case).  */
+
+static int
+pretended_chain_levels (struct call_site_chain *chain)
+{
+  int chain_levels;
+
+  gdb_assert (chain != NULL);
+
+  if (chain->callers == chain->length && chain->callees == chain->length)
+    return chain->length;
+
+  chain_levels = chain->callers + chain->callees;
+  gdb_assert (chain_levels <= chain->length);
+
+  return chain_levels;
+}
+
+/* Implementation of frame_this_id_ftype.  THIS_CACHE must be already
+   initialized with tailcall_cache, THIS_FRAME must be a part of THIS_CACHE.
+
+   Specific virtual tail call frames are tracked by INLINE_DEPTH.  */
+
+static void
+tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache,
+			struct frame_id *this_id)
+{
+  struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache;
+  struct frame_info *next_frame;
+
+  /* Tail call does not make sense for a sentinel frame.  */
+  next_frame = get_next_frame (this_frame);
+  gdb_assert (next_frame != NULL);
+
+  *this_id = get_frame_id (next_frame);
+  (*this_id).code_addr = get_frame_pc (this_frame);
+  (*this_id).code_addr_p = true;
+  (*this_id).artificial_depth = (cache->chain_levels
+				 - existing_next_levels (this_frame, cache));
+  gdb_assert ((*this_id).artificial_depth > 0);
+}
+
+/* Find PC to be unwound from THIS_FRAME.  THIS_FRAME must be a part of
+   CACHE.  */
+
+static CORE_ADDR
+pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache)
+{
+  int next_levels = existing_next_levels (this_frame, cache);
+  struct call_site_chain *chain = cache->chain;
+
+  gdb_assert (chain != NULL);
+
+  next_levels++;
+  gdb_assert (next_levels >= 0);
+
+  if (next_levels < chain->callees)
+    return chain->call_site[chain->length - next_levels - 1]->pc;
+  next_levels -= chain->callees;
+
+  /* Otherwise CHAIN->CALLEES are already covered by CHAIN->CALLERS.  */
+  if (chain->callees != chain->length)
+    {
+      if (next_levels < chain->callers)
+	return chain->call_site[chain->callers - next_levels - 1]->pc;
+      next_levels -= chain->callers;
+    }
+
+  gdb_assert (next_levels == 0);
+  return cache->prev_pc;
+}
+
+/* Implementation of frame_prev_register_ftype.  If no specific register
+   override is supplied NULL is returned (this is incompatible with
+   frame_prev_register_ftype semantics).  next_bottom_frame and tail call
+   frames unwind the NULL case differently.  */
+
+struct value *
+dwarf2_tailcall_prev_register_first (struct frame_info *this_frame,
+				     void **tailcall_cachep, int regnum)
+{
+  struct gdbarch *this_gdbarch = get_frame_arch (this_frame);
+  struct tailcall_cache *cache = (struct tailcall_cache *) *tailcall_cachep;
+  CORE_ADDR addr;
+
+  if (regnum == gdbarch_pc_regnum (this_gdbarch))
+    addr = pretend_pc (this_frame, cache);
+  else if (cache->prev_sp_p && regnum == gdbarch_sp_regnum (this_gdbarch))
+    {
+      int next_levels = existing_next_levels (this_frame, cache);
+
+      if (next_levels == cache->chain_levels - 1)
+	addr = cache->prev_sp;
+      else
+	addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset;
+    }
+  else
+    return NULL;
+
+  return frame_unwind_got_address (this_frame, regnum, addr);
+}
+
+/* Implementation of frame_prev_register_ftype for tail call frames.  Register
+   set of virtual tail call frames is assumed to be the one of the top (caller)
+   frame - assume unchanged register value for NULL from
+   dwarf2_tailcall_prev_register_first.  */
+
+static struct value *
+tailcall_frame_prev_register (struct frame_info *this_frame,
+			       void **this_cache, int regnum)
+{
+  struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache;
+  struct value *val;
+
+  gdb_assert (this_frame != cache->next_bottom_frame);
+
+  val = dwarf2_tailcall_prev_register_first (this_frame, this_cache, regnum);
+  if (val)
+    return val;
+
+  return frame_unwind_got_register (this_frame, regnum, regnum);
+}
+
+/* Implementation of frame_sniffer_ftype.  It will never find a new chain, use
+   dwarf2_tailcall_sniffer_first for the bottom (callee) frame.  It will find
+   all the predecessing virtual tail call frames, it will return false when
+   there exist no more tail call frames in this chain.  */
+
+static int
+tailcall_frame_sniffer (const struct frame_unwind *self,
+			 struct frame_info *this_frame, void **this_cache)
+{
+  struct frame_info *next_frame;
+  int next_levels;
+  struct tailcall_cache *cache;
+
+  if (!dwarf2_frame_unwinders_enabled_p)
+    return 0;
+
+  /* Inner tail call element does not make sense for a sentinel frame.  */
+  next_frame = get_next_frame (this_frame);
+  if (next_frame == NULL)
+    return 0;
+
+  cache = cache_find (next_frame);
+  if (cache == NULL)
+    return 0;
+
+  cache_ref (cache);
+
+  next_levels = existing_next_levels (this_frame, cache);
+
+  /* NEXT_LEVELS is -1 only in dwarf2_tailcall_sniffer_first.  */
+  gdb_assert (next_levels >= 0);
+  gdb_assert (next_levels <= cache->chain_levels);
+
+  if (next_levels == cache->chain_levels)
+    {
+      cache_unref (cache);
+      return 0;
+    }
+
+  *this_cache = cache;
+  return 1;
+}
+
+/* The initial "sniffer" whether THIS_FRAME is a bottom (callee) frame of a new
+   chain to create.  Keep TAILCALL_CACHEP NULL if it did not find any chain,
+   initialize it otherwise.  No tail call chain is created if there are no
+   unambiguous virtual tail call frames to report.
+   
+   ENTRY_CFA_SP_OFFSETP is NULL if no special SP handling is possible,
+   otherwise *ENTRY_CFA_SP_OFFSETP is the number of bytes to subtract from tail
+   call frames frame base to get the SP value there - to simulate return
+   address pushed on the stack.  */
+
+void
+dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
+			       void **tailcall_cachep,
+			       const LONGEST *entry_cfa_sp_offsetp)
+{
+  CORE_ADDR prev_pc = 0, prev_sp = 0;	/* GCC warning.  */
+  int prev_sp_p = 0;
+  CORE_ADDR this_pc;
+  struct gdbarch *prev_gdbarch;
+  gdb::unique_xmalloc_ptr<call_site_chain> chain;
+  struct tailcall_cache *cache;
+
+  gdb_assert (*tailcall_cachep == NULL);
+
+  /* PC may be after the function if THIS_FRAME calls noreturn function,
+     get_frame_address_in_block will decrease it by 1 in such case.  */
+  this_pc = get_frame_address_in_block (this_frame);
+
+  try
+    {
+      int sp_regnum;
+
+      prev_gdbarch = frame_unwind_arch (this_frame);
+
+      /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p.  */
+      prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame);
+
+      /* call_site_find_chain can throw an exception.  */
+      chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc);
+
+      if (entry_cfa_sp_offsetp != NULL)
+	{
+	  sp_regnum = gdbarch_sp_regnum (prev_gdbarch);
+	  if (sp_regnum != -1)
+	    {
+	      prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum);
+	      prev_sp_p = 1;
+	    }
+	}
+    }
+  catch (const gdb_exception_error &except)
+    {
+      if (entry_values_debug)
+	exception_print (gdb_stdout, except);
+
+      switch (except.error)
+	{
+	case NO_ENTRY_VALUE_ERROR:
+	  /* Thrown by call_site_find_chain.  */
+	case MEMORY_ERROR:
+	case OPTIMIZED_OUT_ERROR:
+	case NOT_AVAILABLE_ERROR:
+	  /* These can normally happen when we try to access an
+	     optimized out or unavailable register, either in a
+	     physical register or spilled to memory.  */
+	  return;
+	}
+
+      /* Let unexpected errors propagate.  */
+      throw;
+    }
+
+  /* Ambiguous unwind or unambiguous unwind verified as matching.  */
+  if (chain == NULL || chain->length == 0)
+    return;
+
+  cache = cache_new_ref1 (this_frame);
+  *tailcall_cachep = cache;
+  cache->chain = chain.release ();
+  cache->prev_pc = prev_pc;
+  cache->chain_levels = pretended_chain_levels (cache->chain);
+  cache->prev_sp_p = prev_sp_p;
+  if (cache->prev_sp_p)
+    {
+      cache->prev_sp = prev_sp;
+      cache->entry_cfa_sp_offset = *entry_cfa_sp_offsetp;
+    }
+  gdb_assert (cache->chain_levels > 0);
+}
+
+/* Implementation of frame_dealloc_cache_ftype.  It can be called even for the
+   bottom chain frame from dwarf2_frame_dealloc_cache which is not a real
+   TAILCALL_FRAME.  */
+
+static void
+tailcall_frame_dealloc_cache (struct frame_info *self, void *this_cache)
+{
+  struct tailcall_cache *cache = (struct tailcall_cache *) this_cache;
+
+  cache_unref (cache);
+}
+
+/* Implementation of frame_prev_arch_ftype.  We assume all the virtual tail
+   call frames have gdbarch of the bottom (callee) frame.  */
+
+static struct gdbarch *
+tailcall_frame_prev_arch (struct frame_info *this_frame,
+			  void **this_prologue_cache)
+{
+  struct tailcall_cache *cache = (struct tailcall_cache *) *this_prologue_cache;
+
+  return get_frame_arch (cache->next_bottom_frame);
+}
+
+/* Virtual tail call frame unwinder if dwarf2_tailcall_sniffer_first finds
+   a chain to create.  */
+
+const struct frame_unwind dwarf2_tailcall_frame_unwind =
+{
+  "dwarf2 tailcall",
+  TAILCALL_FRAME,
+  default_frame_unwind_stop_reason,
+  tailcall_frame_this_id,
+  tailcall_frame_prev_register,
+  NULL,
+  tailcall_frame_sniffer,
+  tailcall_frame_dealloc_cache,
+  tailcall_frame_prev_arch
+};
+
+void _initialize_tailcall_frame ();
+void
+_initialize_tailcall_frame ()
+{
+  cache_htab = htab_create_alloc (50, cache_hash, cache_eq, NULL, xcalloc,
+				  xfree);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame-tailcall.h ./gdb/dwarf2/frame-tailcall.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/frame-tailcall.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/frame-tailcall.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,39 @@
+/* Definitions for virtual tail call frames unwinder for GDB.
+
+   Copyright (C) 2010-2021 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 DWARF2_FRAME_TAILCALL_H
+#define DWARF2_FRAME_TAILCALL_H 1
+
+struct frame_info;
+struct frame_unwind;
+
+/* The tail call frame unwinder.  */
+
+extern void
+  dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
+				 void **tailcall_cachep,
+				 const LONGEST *entry_cfa_sp_offsetp);
+
+extern struct value *
+  dwarf2_tailcall_prev_register_first (struct frame_info *this_frame,
+				       void **tailcall_cachep, int regnum);
+
+extern const struct frame_unwind dwarf2_tailcall_frame_unwind;
+
+#endif /* !DWARF2_FRAME_TAILCALL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-cache.c ./gdb/dwarf2/index-cache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-cache.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/index-cache.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,376 @@
+/* Caching of GDB/DWARF index files.
+
+   Copyright (C) 1994-2021 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 "dwarf2/index-cache.h"
+
+#include "build-id.h"
+#include "cli/cli-cmds.h"
+#include "command.h"
+#include "gdbsupport/scoped_mmap.h"
+#include "gdbsupport/pathstuff.h"
+#include "dwarf2/index-write.h"
+#include "dwarf2/read.h"
+#include "dwarf2/dwz.h"
+#include "objfiles.h"
+#include "gdbsupport/selftest.h"
+#include <string>
+#include <stdlib.h>
+
+/* When set to true, show debug messages about the index cache.  */
+static bool debug_index_cache = false;
+
+/* The index cache directory, used for "set/show index-cache directory".  */
+static char *index_cache_directory = NULL;
+
+/* See dwarf-index.cache.h.  */
+index_cache global_index_cache;
+
+/* set/show index-cache commands.  */
+static cmd_list_element *set_index_cache_prefix_list;
+static cmd_list_element *show_index_cache_prefix_list;
+
+/* Default destructor of index_cache_resource.  */
+index_cache_resource::~index_cache_resource () = default;
+
+/* See dwarf-index-cache.h.  */
+
+void
+index_cache::set_directory (std::string dir)
+{
+  gdb_assert (!dir.empty ());
+
+  m_dir = std::move (dir);
+
+  if (debug_index_cache)
+    printf_unfiltered ("index cache: now using directory %s\n", m_dir.c_str ());
+}
+
+/* See dwarf-index-cache.h.  */
+
+void
+index_cache::enable ()
+{
+  if (debug_index_cache)
+    printf_unfiltered ("index cache: enabling (%s)\n", m_dir.c_str ());
+
+  m_enabled = true;
+}
+
+/* See dwarf-index-cache.h.  */
+
+void
+index_cache::disable ()
+{
+  if (debug_index_cache)
+    printf_unfiltered ("index cache: disabling\n");
+
+  m_enabled = false;
+}
+
+/* See dwarf-index-cache.h.  */
+
+void
+index_cache::store (dwarf2_per_objfile *per_objfile)
+{
+  objfile *obj = per_objfile->objfile;
+
+  if (!enabled ())
+    return;
+
+  /* Get build id of objfile.  */
+  const bfd_build_id *build_id = build_id_bfd_get (obj->obfd);
+  if (build_id == nullptr)
+    {
+      if (debug_index_cache)
+	printf_unfiltered ("index cache: objfile %s has no build id\n",
+			   objfile_name (obj));
+      return;
+    }
+
+  std::string build_id_str = build_id_to_string (build_id);
+
+  /* Get build id of dwz file, if present.  */
+  gdb::optional<std::string> dwz_build_id_str;
+  const dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd);
+  const char *dwz_build_id_ptr = NULL;
+
+  if (dwz != nullptr)
+    {
+      const bfd_build_id *dwz_build_id = build_id_bfd_get (dwz->dwz_bfd.get ());
+
+      if (dwz_build_id == nullptr)
+	{
+	  if (debug_index_cache)
+	    printf_unfiltered ("index cache: dwz objfile %s has no build id\n",
+			       dwz->filename ());
+	  return;
+	}
+
+      dwz_build_id_str = build_id_to_string (dwz_build_id);
+      dwz_build_id_ptr = dwz_build_id_str->c_str ();
+    }
+
+  if (m_dir.empty ())
+    {
+      warning (_("The index cache directory name is empty, skipping store."));
+      return;
+    }
+
+  try
+    {
+      /* Try to create the containing directory.  */
+      if (!mkdir_recursive (m_dir.c_str ()))
+	{
+	  warning (_("index cache: could not make cache directory: %s"),
+		   safe_strerror (errno));
+	  return;
+	}
+
+      if (debug_index_cache)
+	printf_unfiltered ("index cache: writing index cache for objfile %s\n",
+			   objfile_name (obj));
+
+      /* Write the index itself to the directory, using the build id as the
+	 filename.  */
+      write_psymtabs_to_index (per_objfile, m_dir.c_str (),
+			       build_id_str.c_str (), dwz_build_id_ptr,
+			       dw_index_kind::GDB_INDEX);
+    }
+  catch (const gdb_exception_error &except)
+    {
+      if (debug_index_cache)
+	printf_unfiltered ("index cache: couldn't store index cache for objfile "
+			   "%s: %s", objfile_name (obj), except.what ());
+    }
+}
+
+#if HAVE_SYS_MMAN_H
+
+/* Hold the resources for an mmapped index file.  */
+
+struct index_cache_resource_mmap final : public index_cache_resource
+{
+  /* Try to mmap FILENAME.  Throw an exception on failure, including if the
+     file doesn't exist. */
+  index_cache_resource_mmap (const char *filename)
+    : mapping (mmap_file (filename))
+  {}
+
+  scoped_mmap mapping;
+};
+
+/* See dwarf-index-cache.h.  */
+
+gdb::array_view<const gdb_byte>
+index_cache::lookup_gdb_index (const bfd_build_id *build_id,
+			       std::unique_ptr<index_cache_resource> *resource)
+{
+  if (!enabled ())
+    return {};
+
+  if (m_dir.empty ())
+    {
+      warning (_("The index cache directory name is empty, skipping cache "
+		 "lookup."));
+      return {};
+    }
+
+  /* Compute where we would expect a gdb index file for this build id to be.  */
+  std::string filename = make_index_filename (build_id, INDEX4_SUFFIX);
+
+  try
+    {
+      if (debug_index_cache)
+	printf_unfiltered ("index cache: trying to read %s\n",
+			   filename.c_str ());
+
+      /* Try to map that file.  */
+      index_cache_resource_mmap *mmap_resource
+	= new index_cache_resource_mmap (filename.c_str ());
+
+      /* Yay, it worked!  Hand the resource to the caller.  */
+      resource->reset (mmap_resource);
+
+      return gdb::array_view<const gdb_byte>
+	  ((const gdb_byte *) mmap_resource->mapping.get (),
+	   mmap_resource->mapping.size ());
+    }
+  catch (const gdb_exception_error &except)
+    {
+      if (debug_index_cache)
+	printf_unfiltered ("index cache: couldn't read %s: %s\n",
+			   filename.c_str (), except.what ());
+    }
+
+  return {};
+}
+
+#else /* !HAVE_SYS_MMAN_H */
+
+/* See dwarf-index-cache.h.  This is a no-op on unsupported systems.  */
+
+gdb::array_view<const gdb_byte>
+index_cache::lookup_gdb_index (const bfd_build_id *build_id,
+			       std::unique_ptr<index_cache_resource> *resource)
+{
+  return {};
+}
+
+#endif
+
+/* See dwarf-index-cache.h.  */
+
+std::string
+index_cache::make_index_filename (const bfd_build_id *build_id,
+				  const char *suffix) const
+{
+  std::string build_id_str = build_id_to_string (build_id);
+
+  return m_dir + SLASH_STRING + build_id_str + suffix;
+}
+
+/* True when we are executing "show index-cache".  This is used to improve the
+   printout a little bit.  */
+static bool in_show_index_cache_command = false;
+
+/* "show index-cache" handler.  */
+
+static void
+show_index_cache_command (const char *arg, int from_tty)
+{
+  /* Note that we are executing "show index-cache".  */
+  auto restore_flag = make_scoped_restore (&in_show_index_cache_command, true);
+
+  /* Call all "show index-cache" subcommands.  */
+  cmd_show_list (show_index_cache_prefix_list, from_tty);
+
+  printf_unfiltered ("\n");
+  printf_unfiltered
+    (_("The index cache is currently %s.\n"),
+     global_index_cache.enabled () ? _("enabled") : _("disabled"));
+}
+
+/* "set index-cache on" handler.  */
+
+static void
+set_index_cache_on_command (const char *arg, int from_tty)
+{
+  global_index_cache.enable ();
+}
+
+/* "set index-cache off" handler.  */
+
+static void
+set_index_cache_off_command (const char *arg, int from_tty)
+{
+  global_index_cache.disable ();
+}
+
+/* "set index-cache directory" handler.  */
+
+static void
+set_index_cache_directory_command (const char *arg, int from_tty,
+				   cmd_list_element *element)
+{
+  /* Make sure the index cache directory is absolute and tilde-expanded.  */
+  gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (index_cache_directory));
+  xfree (index_cache_directory);
+  index_cache_directory = abs.release ();
+  global_index_cache.set_directory (index_cache_directory);
+}
+
+/* "show index-cache stats" handler.  */
+
+static void
+show_index_cache_stats_command (const char *arg, int from_tty)
+{
+  const char *indent = "";
+
+  /* If this command is invoked through "show index-cache", make the display a
+     bit nicer.  */
+  if (in_show_index_cache_command)
+    {
+      indent = "  ";
+      printf_unfiltered ("\n");
+    }
+
+  printf_unfiltered (_("%s  Cache hits (this session): %u\n"),
+		     indent, global_index_cache.n_hits ());
+  printf_unfiltered (_("%sCache misses (this session): %u\n"),
+		     indent, global_index_cache.n_misses ());
+}
+
+void _initialize_index_cache ();
+void
+_initialize_index_cache ()
+{
+  /* Set the default index cache directory.  */
+  std::string cache_dir = get_standard_cache_dir ();
+  if (!cache_dir.empty ())
+    {
+      index_cache_directory = xstrdup (cache_dir.c_str ());
+      global_index_cache.set_directory (std::move (cache_dir));
+    }
+  else
+    warning (_("Couldn't determine a path for the index cache directory."));
+
+  /* set index-cache */
+  add_basic_prefix_cmd ("index-cache", class_files,
+			_("Set index-cache options."),
+			&set_index_cache_prefix_list,
+			false, &setlist);
+
+  /* show index-cache */
+  add_prefix_cmd ("index-cache", class_files, show_index_cache_command,
+		  _("Show index-cache options."), &show_index_cache_prefix_list,
+		  false, &showlist);
+
+  /* set index-cache on */
+  add_cmd ("on", class_files, set_index_cache_on_command,
+	   _("Enable the index cache."), &set_index_cache_prefix_list);
+
+  /* set index-cache off */
+  add_cmd ("off", class_files, set_index_cache_off_command,
+	   _("Disable the index cache."), &set_index_cache_prefix_list);
+
+  /* set index-cache directory */
+  add_setshow_filename_cmd ("directory", class_files, &index_cache_directory,
+			    _("Set the directory of the index cache."),
+			    _("Show the directory of the index cache."),
+			    NULL,
+			    set_index_cache_directory_command, NULL,
+			    &set_index_cache_prefix_list,
+			    &show_index_cache_prefix_list);
+
+  /* show index-cache stats */
+  add_cmd ("stats", class_files, show_index_cache_stats_command,
+	   _("Show some stats about the index cache."),
+	   &show_index_cache_prefix_list);
+
+  /* set debug index-cache */
+  add_setshow_boolean_cmd ("index-cache", class_maintenance,
+			   &debug_index_cache,
+			   _("Set display of index-cache debug messages."),
+			   _("Show display of index-cache debug messages."),
+			   _("\
+When non-zero, debugging output for the index cache is displayed."),
+			    NULL, NULL,
+			    &setdebuglist, &showdebuglist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-cache.h ./gdb/dwarf2/index-cache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-cache.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/index-cache.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,112 @@
+/* Caching of GDB/DWARF index files.
+
+   Copyright (C) 2018-2021 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 DWARF_INDEX_CACHE_H
+#define DWARF_INDEX_CACHE_H
+
+#include "dwarf2/index-common.h"
+#include "gdbsupport/array-view.h"
+#include "symfile.h"
+
+/* Base of the classes used to hold the resources of the indices loaded from
+   the cache (e.g. mmapped files).  */
+
+struct index_cache_resource
+{
+  virtual ~index_cache_resource () = 0;
+};
+
+/* Class to manage the access to the DWARF index cache.  */
+
+class index_cache
+{
+public:
+  /* Change the directory used to save/load index files.  */
+  void set_directory (std::string dir);
+
+  /* Return true if the usage of the cache is enabled.  */
+  bool enabled () const
+  {
+    return m_enabled;
+  }
+
+  /* Enable the cache.  */
+  void enable ();
+
+  /* Disable the cache.  */
+  void disable ();
+
+  /* Store an index for the specified object file in the cache.  */
+  void store (dwarf2_per_objfile *per_objfile);
+
+  /* Look for an index file matching BUILD_ID.  If found, return the contents
+     as an array_view and store the underlying resources (allocated memory,
+     mapped file, etc) in RESOURCE.  The returned array_view is valid as long
+     as RESOURCE is not destroyed.
+
+     If no matching index file is found, return an empty array view.  */
+  gdb::array_view<const gdb_byte>
+  lookup_gdb_index (const bfd_build_id *build_id,
+		    std::unique_ptr<index_cache_resource> *resource);
+
+  /* Return the number of cache hits.  */
+  unsigned int n_hits () const
+  { return m_n_hits; }
+
+  /* Record a cache hit.  */
+  void hit ()
+  {
+    if (enabled ())
+      m_n_hits++;
+  }
+
+  /* Return the number of cache misses.  */
+  unsigned int n_misses () const
+  { return m_n_misses; }
+
+  /* Record a cache miss.  */
+  void miss ()
+  {
+    if (enabled ())
+      m_n_misses++;
+  }
+
+private:
+
+  /* Compute the absolute filename where the index of the objfile with build
+     id BUILD_ID will be stored.  SUFFIX is appended at the end of the
+     filename.  */
+  std::string make_index_filename (const bfd_build_id *build_id,
+				   const char *suffix) const;
+
+  /* The base directory where we are storing and looking up index files.  */
+  std::string m_dir;
+
+  /* Whether the cache is enabled.  */
+  bool m_enabled = false;
+
+  /* Number of cache hits and misses during this GDB session.  */
+  unsigned int m_n_hits = 0;
+  unsigned int m_n_misses = 0;
+};
+
+/* The global instance of the index cache.  */
+extern index_cache global_index_cache;
+
+#endif /* DWARF_INDEX_CACHE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-common.c ./gdb/dwarf2/index-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-common.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/index-common.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,56 @@
+/* Things needed for both reading and writing DWARF indices.
+
+   Copyright (C) 1994-2021 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 "dwarf2/index-common.h"
+
+/* See dwarf-index-common.h.  */
+
+hashval_t
+mapped_index_string_hash (int index_version, const void *p)
+{
+  const unsigned char *str = (const unsigned char *) p;
+  hashval_t r = 0;
+  unsigned char c;
+
+  while ((c = *str++) != 0)
+    {
+      if (index_version >= 5)
+	c = tolower (c);
+      r = r * 67 + c - 113;
+    }
+
+  return r;
+}
+
+/* See dwarf-index-common.h.  */
+
+uint32_t
+dwarf5_djb_hash (const char *str_)
+{
+  const unsigned char *str = (const unsigned char *) str_;
+
+  /* Note: tolower here ignores UTF-8, which isn't fully compliant.
+     See http://dwarfstd.org/ShowIssue.php?issue=161027.1.  */
+
+  uint32_t hash = 5381;
+  while (int c = *str++)
+    hash = hash * 33 + tolower (c);
+  return hash;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-common.h ./gdb/dwarf2/index-common.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-common.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/index-common.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,55 @@
+/* Things needed for both reading and writing DWARF indices.
+
+   Copyright (C) 1994-2021 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 DWARF_INDEX_COMMON_H
+#define DWARF_INDEX_COMMON_H
+
+/* The suffix for an index file.  */
+#define INDEX4_SUFFIX ".gdb-index"
+#define INDEX5_SUFFIX ".debug_names"
+#define DEBUG_STR_SUFFIX ".debug_str"
+
+/* All offsets in the index are of this type.  It must be
+   architecture-independent.  */
+typedef uint32_t offset_type;
+
+/* Unpack a 32-bit little-endian value.  */
+
+static inline offset_type
+gdb_index_unpack (const gdb_byte *value)
+{
+  return (offset_type) extract_unsigned_integer (value, sizeof (offset_type),
+						 BFD_ENDIAN_LITTLE);
+}
+
+/* The hash function for strings in the mapped index.  This is the same as
+   SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the
+   implementation.  This is necessary because the hash function is tied to the
+   format of the mapped index file.  The hash values do not have to match with
+   SYMBOL_HASH_NEXT.
+
+   Use INT_MAX for INDEX_VERSION if you generate the current index format.  */
+
+hashval_t mapped_index_string_hash (int index_version, const void *p);
+
+/* Symbol name hashing function as specified by DWARF-5.  */
+
+uint32_t dwarf5_djb_hash (const char *str_);
+
+#endif /* DWARF_INDEX_COMMON_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-write.c ./gdb/dwarf2/index-write.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-write.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/index-write.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,1816 @@
+/* DWARF index writing support for GDB.
+
+   Copyright (C) 1994-2021 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 "dwarf2/index-write.h"
+
+#include "addrmap.h"
+#include "cli/cli-decode.h"
+#include "gdbsupport/byte-vector.h"
+#include "gdbsupport/filestuff.h"
+#include "gdbsupport/gdb_unlinker.h"
+#include "gdbsupport/pathstuff.h"
+#include "gdbsupport/scoped_fd.h"
+#include "complaints.h"
+#include "dwarf2/index-common.h"
+#include "dwarf2.h"
+#include "dwarf2/read.h"
+#include "dwarf2/dwz.h"
+#include "gdb/gdb-index.h"
+#include "gdbcmd.h"
+#include "objfiles.h"
+#include "psympriv.h"
+#include "ada-lang.h"
+
+#include <algorithm>
+#include <cmath>
+#include <forward_list>
+#include <set>
+#include <unordered_map>
+#include <unordered_set>
+
+/* Ensure only legit values are used.  */
+#define DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \
+  do { \
+    gdb_assert ((unsigned int) (value) <= 1); \
+    GDB_INDEX_SYMBOL_STATIC_SET_VALUE((cu_index), (value)); \
+  } while (0)
+
+/* Ensure only legit values are used.  */
+#define DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \
+  do { \
+    gdb_assert ((value) >= GDB_INDEX_SYMBOL_KIND_TYPE \
+		&& (value) <= GDB_INDEX_SYMBOL_KIND_OTHER); \
+    GDB_INDEX_SYMBOL_KIND_SET_VALUE((cu_index), (value)); \
+  } while (0)
+
+/* Ensure we don't use more than the allotted number of bits for the CU.  */
+#define DW2_GDB_INDEX_CU_SET_VALUE(cu_index, value) \
+  do { \
+    gdb_assert (((value) & ~GDB_INDEX_CU_MASK) == 0); \
+    GDB_INDEX_CU_SET_VALUE((cu_index), (value)); \
+  } while (0)
+
+/* The "save gdb-index" command.  */
+
+/* Write SIZE bytes from the buffer pointed to by DATA to FILE, with
+   error checking.  */
+
+static void
+file_write (FILE *file, const void *data, size_t size)
+{
+  if (fwrite (data, 1, size, file) != size)
+    error (_("couldn't data write to file"));
+}
+
+/* Write the contents of VEC to FILE, with error checking.  */
+
+template<typename Elem, typename Alloc>
+static void
+file_write (FILE *file, const std::vector<Elem, Alloc> &vec)
+{
+  if (!vec.empty ())
+    file_write (file, vec.data (), vec.size () * sizeof (vec[0]));
+}
+
+/* In-memory buffer to prepare data to be written later to a file.  */
+class data_buf
+{
+public:
+  /* Copy ARRAY to the end of the buffer.  */
+  void append_array (gdb::array_view<const gdb_byte> array)
+  {
+    std::copy (array.begin (), array.end (), grow (array.size ()));
+  }
+
+  /* Copy CSTR (a zero-terminated string) to the end of buffer.  The
+     terminating zero is appended too.  */
+  void append_cstr0 (const char *cstr)
+  {
+    const size_t size = strlen (cstr) + 1;
+    std::copy (cstr, cstr + size, grow (size));
+  }
+
+  /* Store INPUT as ULEB128 to the end of buffer.  */
+  void append_unsigned_leb128 (ULONGEST input)
+  {
+    for (;;)
+      {
+	gdb_byte output = input & 0x7f;
+	input >>= 7;
+	if (input)
+	  output |= 0x80;
+	m_vec.push_back (output);
+	if (input == 0)
+	  break;
+      }
+  }
+
+  /* Accept a host-format integer in VAL and append it to the buffer
+     as a target-format integer which is LEN bytes long.  */
+  void append_uint (size_t len, bfd_endian byte_order, ULONGEST val)
+  {
+    ::store_unsigned_integer (grow (len), len, byte_order, val);
+  }
+
+  /* Copy VALUE to the end of the buffer, little-endian.  */
+  void append_offset (offset_type value)
+  {
+    append_uint (sizeof (value), BFD_ENDIAN_LITTLE, value);
+  }
+
+  /* Return the size of the buffer.  */
+  size_t size () const
+  {
+    return m_vec.size ();
+  }
+
+  /* Return true iff the buffer is empty.  */
+  bool empty () const
+  {
+    return m_vec.empty ();
+  }
+
+  /* Write the buffer to FILE.  */
+  void file_write (FILE *file) const
+  {
+    ::file_write (file, m_vec);
+  }
+
+private:
+  /* Grow SIZE bytes at the end of the buffer.  Returns a pointer to
+     the start of the new block.  */
+  gdb_byte *grow (size_t size)
+  {
+    m_vec.resize (m_vec.size () + size);
+    return &*(m_vec.end () - size);
+  }
+
+  gdb::byte_vector m_vec;
+};
+
+/* An entry in the symbol table.  */
+struct symtab_index_entry
+{
+  /* The name of the symbol.  */
+  const char *name;
+  /* The offset of the name in the constant pool.  */
+  offset_type index_offset;
+  /* A sorted vector of the indices of all the CUs that hold an object
+     of this name.  */
+  std::vector<offset_type> cu_indices;
+};
+
+/* The symbol table.  This is a power-of-2-sized hash table.  */
+struct mapped_symtab
+{
+  mapped_symtab ()
+  {
+    data.resize (1024);
+  }
+
+  offset_type n_elements = 0;
+  std::vector<symtab_index_entry> data;
+
+  /* Temporary storage for Ada names.  */
+  auto_obstack m_string_obstack;
+};
+
+/* Find a slot in SYMTAB for the symbol NAME.  Returns a reference to
+   the slot.
+
+   Function is used only during write_hash_table so no index format backward
+   compatibility is needed.  */
+
+static symtab_index_entry &
+find_slot (struct mapped_symtab *symtab, const char *name)
+{
+  offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name);
+
+  index = hash & (symtab->data.size () - 1);
+  step = ((hash * 17) & (symtab->data.size () - 1)) | 1;
+
+  for (;;)
+    {
+      if (symtab->data[index].name == NULL
+	  || strcmp (name, symtab->data[index].name) == 0)
+	return symtab->data[index];
+      index = (index + step) & (symtab->data.size () - 1);
+    }
+}
+
+/* Expand SYMTAB's hash table.  */
+
+static void
+hash_expand (struct mapped_symtab *symtab)
+{
+  auto old_entries = std::move (symtab->data);
+
+  symtab->data.clear ();
+  symtab->data.resize (old_entries.size () * 2);
+
+  for (auto &it : old_entries)
+    if (it.name != NULL)
+      {
+	auto &ref = find_slot (symtab, it.name);
+	ref = std::move (it);
+      }
+}
+
+/* Add an entry to SYMTAB.  NAME is the name of the symbol.
+   CU_INDEX is the index of the CU in which the symbol appears.
+   IS_STATIC is one if the symbol is static, otherwise zero (global).  */
+
+static void
+add_index_entry (struct mapped_symtab *symtab, const char *name,
+		 int is_static, gdb_index_symbol_kind kind,
+		 offset_type cu_index)
+{
+  offset_type cu_index_and_attrs;
+
+  ++symtab->n_elements;
+  if (4 * symtab->n_elements / 3 >= symtab->data.size ())
+    hash_expand (symtab);
+
+  symtab_index_entry &slot = find_slot (symtab, name);
+  if (slot.name == NULL)
+    {
+      slot.name = name;
+      /* index_offset is set later.  */
+    }
+
+  cu_index_and_attrs = 0;
+  DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index);
+  DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static);
+  DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind);
+
+  /* We don't want to record an index value twice as we want to avoid the
+     duplication.
+     We process all global symbols and then all static symbols
+     (which would allow us to avoid the duplication by only having to check
+     the last entry pushed), but a symbol could have multiple kinds in one CU.
+     To keep things simple we don't worry about the duplication here and
+     sort and uniquify the list after we've processed all symbols.  */
+  slot.cu_indices.push_back (cu_index_and_attrs);
+}
+
+/* Sort and remove duplicates of all symbols' cu_indices lists.  */
+
+static void
+uniquify_cu_indices (struct mapped_symtab *symtab)
+{
+  for (auto &entry : symtab->data)
+    {
+      if (entry.name != NULL && !entry.cu_indices.empty ())
+	{
+	  auto &cu_indices = entry.cu_indices;
+	  std::sort (cu_indices.begin (), cu_indices.end ());
+	  auto from = std::unique (cu_indices.begin (), cu_indices.end ());
+	  cu_indices.erase (from, cu_indices.end ());
+	}
+    }
+}
+
+/* A form of 'const char *' suitable for container keys.  Only the
+   pointer is stored.  The strings themselves are compared, not the
+   pointers.  */
+class c_str_view
+{
+public:
+  c_str_view (const char *cstr)
+    : m_cstr (cstr)
+  {}
+
+  bool operator== (const c_str_view &other) const
+  {
+    return strcmp (m_cstr, other.m_cstr) == 0;
+  }
+
+  /* Return the underlying C string.  Note, the returned string is
+     only a reference with lifetime of this object.  */
+  const char *c_str () const
+  {
+    return m_cstr;
+  }
+
+private:
+  friend class c_str_view_hasher;
+  const char *const m_cstr;
+};
+
+/* A std::unordered_map::hasher for c_str_view that uses the right
+   hash function for strings in a mapped index.  */
+class c_str_view_hasher
+{
+public:
+  size_t operator () (const c_str_view &x) const
+  {
+    return mapped_index_string_hash (INT_MAX, x.m_cstr);
+  }
+};
+
+/* A std::unordered_map::hasher for std::vector<>.  */
+template<typename T>
+class vector_hasher
+{
+public:
+  size_t operator () (const std::vector<T> &key) const
+  {
+    return iterative_hash (key.data (),
+			   sizeof (key.front ()) * key.size (), 0);
+  }
+};
+
+/* Write the mapped hash table SYMTAB to the data buffer OUTPUT, with
+   constant pool entries going into the data buffer CPOOL.  */
+
+static void
+write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool)
+{
+  {
+    /* Elements are sorted vectors of the indices of all the CUs that
+       hold an object of this name.  */
+    std::unordered_map<std::vector<offset_type>, offset_type,
+		       vector_hasher<offset_type>>
+      symbol_hash_table;
+
+    /* We add all the index vectors to the constant pool first, to
+       ensure alignment is ok.  */
+    for (symtab_index_entry &entry : symtab->data)
+      {
+	if (entry.name == NULL)
+	  continue;
+	gdb_assert (entry.index_offset == 0);
+
+	/* Finding before inserting is faster than always trying to
+	   insert, because inserting always allocates a node, does the
+	   lookup, and then destroys the new node if another node
+	   already had the same key.  C++17 try_emplace will avoid
+	   this.  */
+	const auto found
+	  = symbol_hash_table.find (entry.cu_indices);
+	if (found != symbol_hash_table.end ())
+	  {
+	    entry.index_offset = found->second;
+	    continue;
+	  }
+
+	symbol_hash_table.emplace (entry.cu_indices, cpool.size ());
+	entry.index_offset = cpool.size ();
+	cpool.append_offset (entry.cu_indices.size ());
+	for (const auto index : entry.cu_indices)
+	  cpool.append_offset (index);
+      }
+  }
+
+  /* Now write out the hash table.  */
+  std::unordered_map<c_str_view, offset_type, c_str_view_hasher> str_table;
+  for (const auto &entry : symtab->data)
+    {
+      offset_type str_off, vec_off;
+
+      if (entry.name != NULL)
+	{
+	  const auto insertpair = str_table.emplace (entry.name, cpool.size ());
+	  if (insertpair.second)
+	    cpool.append_cstr0 (entry.name);
+	  str_off = insertpair.first->second;
+	  vec_off = entry.index_offset;
+	}
+      else
+	{
+	  /* While 0 is a valid constant pool index, it is not valid
+	     to have 0 for both offsets.  */
+	  str_off = 0;
+	  vec_off = 0;
+	}
+
+      output.append_offset (str_off);
+      output.append_offset (vec_off);
+    }
+}
+
+typedef std::unordered_map<partial_symtab *, unsigned int> psym_index_map;
+
+/* Helper struct for building the address table.  */
+struct addrmap_index_data
+{
+  addrmap_index_data (data_buf &addr_vec_, psym_index_map &cu_index_htab_)
+    : addr_vec (addr_vec_), cu_index_htab (cu_index_htab_)
+  {}
+
+  data_buf &addr_vec;
+  psym_index_map &cu_index_htab;
+
+  int operator() (CORE_ADDR start_addr, void *obj);
+
+  /* Non-zero if the previous_* fields are valid.
+     We can't write an entry until we see the next entry (since it is only then
+     that we know the end of the entry).  */
+  int previous_valid = 0;
+  /* Index of the CU in the table of all CUs in the index file.  */
+  unsigned int previous_cu_index = 0;
+  /* Start address of the CU.  */
+  CORE_ADDR previous_cu_start = 0;
+};
+
+/* Write an address entry to ADDR_VEC.  */
+
+static void
+add_address_entry (data_buf &addr_vec,
+		   CORE_ADDR start, CORE_ADDR end, unsigned int cu_index)
+{
+  addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, start);
+  addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, end);
+  addr_vec.append_offset (cu_index);
+}
+
+/* Worker function for traversing an addrmap to build the address table.  */
+
+int
+addrmap_index_data::operator() (CORE_ADDR start_addr, void *obj)
+{
+  partial_symtab *pst = (partial_symtab *) obj;
+
+  if (previous_valid)
+    add_address_entry (addr_vec,
+		       previous_cu_start, start_addr,
+		       previous_cu_index);
+
+  previous_cu_start = start_addr;
+  if (pst != NULL)
+    {
+      const auto it = cu_index_htab.find (pst);
+      gdb_assert (it != cu_index_htab.cend ());
+      previous_cu_index = it->second;
+      previous_valid = 1;
+    }
+  else
+    previous_valid = 0;
+
+  return 0;
+}
+
+/* Write PER_BFD's address map to ADDR_VEC.
+   CU_INDEX_HTAB is used to map addrmap entries to their CU indices
+   in the index file.  */
+
+static void
+write_address_map (dwarf2_per_bfd *per_bfd, data_buf &addr_vec,
+		   psym_index_map &cu_index_htab)
+{
+  struct addrmap_index_data addrmap_index_data (addr_vec, cu_index_htab);
+
+  addrmap_foreach (per_bfd->partial_symtabs->psymtabs_addrmap,
+		   addrmap_index_data);
+
+  /* It's highly unlikely the last entry (end address = 0xff...ff)
+     is valid, but we should still handle it.
+     The end address is recorded as the start of the next region, but that
+     doesn't work here.  To cope we pass 0xff...ff, this is a rare situation
+     anyway.  */
+  if (addrmap_index_data.previous_valid)
+    add_address_entry (addr_vec,
+		       addrmap_index_data.previous_cu_start, (CORE_ADDR) -1,
+		       addrmap_index_data.previous_cu_index);
+}
+
+/* Return the symbol kind of PSYM.  */
+
+static gdb_index_symbol_kind
+symbol_kind (struct partial_symbol *psym)
+{
+  domain_enum domain = psym->domain;
+  enum address_class aclass = psym->aclass;
+
+  switch (domain)
+    {
+    case VAR_DOMAIN:
+      switch (aclass)
+	{
+	case LOC_BLOCK:
+	  return GDB_INDEX_SYMBOL_KIND_FUNCTION;
+	case LOC_TYPEDEF:
+	  return GDB_INDEX_SYMBOL_KIND_TYPE;
+	case LOC_COMPUTED:
+	case LOC_CONST_BYTES:
+	case LOC_OPTIMIZED_OUT:
+	case LOC_STATIC:
+	  return GDB_INDEX_SYMBOL_KIND_VARIABLE;
+	case LOC_CONST:
+	  /* Note: It's currently impossible to recognize psyms as enum values
+	     short of reading the type info.  For now punt.  */
+	  return GDB_INDEX_SYMBOL_KIND_VARIABLE;
+	default:
+	  /* There are other LOC_FOO values that one might want to classify
+	     as variables, but dwarf2read.c doesn't currently use them.  */
+	  return GDB_INDEX_SYMBOL_KIND_OTHER;
+	}
+    case STRUCT_DOMAIN:
+      return GDB_INDEX_SYMBOL_KIND_TYPE;
+    default:
+      return GDB_INDEX_SYMBOL_KIND_OTHER;
+    }
+}
+
+/* Add a list of partial symbols to SYMTAB.  */
+
+static void
+write_psymbols (struct mapped_symtab *symtab,
+		std::unordered_set<partial_symbol *> &psyms_seen,
+		const std::vector<partial_symbol *> &symbols,
+		offset_type cu_index,
+		int is_static)
+{
+  for (partial_symbol *psym : symbols)
+    {
+      const char *name = psym->ginfo.search_name ();
+
+      if (psym->ginfo.language () == language_ada)
+	{
+	  /* We want to ensure that the Ada main function's name appears
+	     verbatim in the index.  However, this name will be of the
+	     form "_ada_mumble", and will be rewritten by ada_decode.
+	     So, recognize it specially here and add it to the index by
+	     hand.  */
+	  if (strcmp (main_name (), name) == 0)
+	    {
+	      gdb_index_symbol_kind kind = symbol_kind (psym);
+
+	      add_index_entry (symtab, name, is_static, kind, cu_index);
+	    }
+
+	  /* In order for the index to work when read back into gdb, it
+	     has to supply a funny form of the name: it should be the
+	     encoded name, with any suffixes stripped.  Using the
+	     ordinary encoded name will not work properly with the
+	     searching logic in find_name_components_bounds; nor will
+	     using the decoded name.  Furthermore, an Ada "verbatim"
+	     name (of the form "<MumBle>") must be entered without the
+	     angle brackets.  Note that the current index is unusual,
+	     see PR symtab/24820 for details.  */
+	  std::string decoded = ada_decode (name);
+	  if (decoded[0] == '<')
+	    name = (char *) obstack_copy0 (&symtab->m_string_obstack,
+					   decoded.c_str () + 1,
+					   decoded.length () - 2);
+	  else
+	    name = obstack_strdup (&symtab->m_string_obstack,
+				   ada_encode (decoded.c_str ()));
+	}
+
+      /* Only add a given psymbol once.  */
+      if (psyms_seen.insert (psym).second)
+	{
+	  gdb_index_symbol_kind kind = symbol_kind (psym);
+
+	  add_index_entry (symtab, name, is_static, kind, cu_index);
+	}
+    }
+}
+
+/* A helper struct used when iterating over debug_types.  */
+struct signatured_type_index_data
+{
+  signatured_type_index_data (data_buf &types_list_,
+			      std::unordered_set<partial_symbol *> &psyms_seen_)
+    : types_list (types_list_), psyms_seen (psyms_seen_)
+  {}
+
+  struct objfile *objfile;
+  struct mapped_symtab *symtab;
+  data_buf &types_list;
+  std::unordered_set<partial_symbol *> &psyms_seen;
+  int cu_index;
+};
+
+/* A helper function that writes a single signatured_type to an
+   obstack.  */
+
+static int
+write_one_signatured_type (void **slot, void *d)
+{
+  struct signatured_type_index_data *info
+    = (struct signatured_type_index_data *) d;
+  struct signatured_type *entry = (struct signatured_type *) *slot;
+  partial_symtab *psymtab = entry->v.psymtab;
+
+  if (psymtab == nullptr)
+    {
+      /* We can end up here when processing a skeleton CU referring to a
+	 .dwo file that hasn't been found.  There's not much we can do in
+	 such a case, so skip this CU.  */
+      return 1;
+    }
+
+  write_psymbols (info->symtab, info->psyms_seen,
+		  psymtab->global_psymbols, info->cu_index,
+		  0);
+  write_psymbols (info->symtab, info->psyms_seen,
+		  psymtab->static_psymbols, info->cu_index,
+		  1);
+
+  info->types_list.append_uint (8, BFD_ENDIAN_LITTLE,
+				to_underlying (entry->sect_off));
+  info->types_list.append_uint (8, BFD_ENDIAN_LITTLE,
+				to_underlying (entry->type_offset_in_tu));
+  info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, entry->signature);
+
+  ++info->cu_index;
+
+  return 1;
+}
+
+/* Recurse into all "included" dependencies and count their symbols as
+   if they appeared in this psymtab.  */
+
+static void
+recursively_count_psymbols (partial_symtab *psymtab,
+			    size_t &psyms_seen)
+{
+  for (int i = 0; i < psymtab->number_of_dependencies; ++i)
+    if (psymtab->dependencies[i]->user != NULL)
+      recursively_count_psymbols (psymtab->dependencies[i],
+				  psyms_seen);
+
+  psyms_seen += psymtab->global_psymbols.size ();
+  psyms_seen += psymtab->static_psymbols.size ();
+}
+
+/* Recurse into all "included" dependencies and write their symbols as
+   if they appeared in this psymtab.  */
+
+static void
+recursively_write_psymbols (struct objfile *objfile,
+			    partial_symtab *psymtab,
+			    struct mapped_symtab *symtab,
+			    std::unordered_set<partial_symbol *> &psyms_seen,
+			    offset_type cu_index)
+{
+  int i;
+
+  for (i = 0; i < psymtab->number_of_dependencies; ++i)
+    if (psymtab->dependencies[i]->user != NULL)
+      recursively_write_psymbols (objfile,
+				  psymtab->dependencies[i],
+				  symtab, psyms_seen, cu_index);
+
+  write_psymbols (symtab, psyms_seen,
+		  psymtab->global_psymbols, cu_index,
+		  0);
+  write_psymbols (symtab, psyms_seen,
+		  psymtab->static_psymbols, cu_index,
+		  1);
+}
+
+/* DWARF-5 .debug_names builder.  */
+class debug_names
+{
+public:
+  debug_names (dwarf2_per_objfile *per_objfile, bool is_dwarf64,
+	       bfd_endian dwarf5_byte_order)
+    : m_dwarf5_byte_order (dwarf5_byte_order),
+      m_dwarf32 (dwarf5_byte_order),
+      m_dwarf64 (dwarf5_byte_order),
+      m_dwarf (is_dwarf64
+	       ? static_cast<dwarf &> (m_dwarf64)
+	       : static_cast<dwarf &> (m_dwarf32)),
+      m_name_table_string_offs (m_dwarf.name_table_string_offs),
+      m_name_table_entry_offs (m_dwarf.name_table_entry_offs),
+      m_debugstrlookup (per_objfile)
+  {}
+
+  int dwarf5_offset_size () const
+  {
+    const bool dwarf5_is_dwarf64 = &m_dwarf == &m_dwarf64;
+    return dwarf5_is_dwarf64 ? 8 : 4;
+  }
+
+  /* Is this symbol from DW_TAG_compile_unit or DW_TAG_type_unit?  */
+  enum class unit_kind { cu, tu };
+
+  /* Insert one symbol.  */
+  void insert (const partial_symbol *psym, int cu_index, bool is_static,
+	       unit_kind kind)
+  {
+    const int dwarf_tag = psymbol_tag (psym);
+    if (dwarf_tag == 0)
+      return;
+    const char *name = psym->ginfo.search_name ();
+
+    if (psym->ginfo.language () == language_ada)
+      {
+	/* We want to ensure that the Ada main function's name appears
+	   verbatim in the index.  However, this name will be of the
+	   form "_ada_mumble", and will be rewritten by ada_decode.
+	   So, recognize it specially here and add it to the index by
+	   hand.  */
+	if (strcmp (main_name (), name) == 0)
+	  {
+	    const auto insertpair
+	      = m_name_to_value_set.emplace (c_str_view (name),
+					     std::set<symbol_value> ());
+	    std::set<symbol_value> &value_set = insertpair.first->second;
+	    value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static,
+					     kind));
+	  }
+
+	/* In order for the index to work when read back into gdb, it
+	   has to supply a funny form of the name: it should be the
+	   encoded name, with any suffixes stripped.  Using the
+	   ordinary encoded name will not work properly with the
+	   searching logic in find_name_components_bounds; nor will
+	   using the decoded name.  Furthermore, an Ada "verbatim"
+	   name (of the form "<MumBle>") must be entered without the
+	   angle brackets.  Note that the current index is unusual,
+	   see PR symtab/24820 for details.  */
+	std::string decoded = ada_decode (name);
+	if (decoded[0] == '<')
+	  name = (char *) obstack_copy0 (&m_string_obstack,
+					 decoded.c_str () + 1,
+					 decoded.length () - 2);
+	else
+	  name = obstack_strdup (&m_string_obstack,
+				 ada_encode (decoded.c_str ()));
+      }
+
+    const auto insertpair
+      = m_name_to_value_set.emplace (c_str_view (name),
+				     std::set<symbol_value> ());
+    std::set<symbol_value> &value_set = insertpair.first->second;
+    value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind));
+  }
+
+  /* Build all the tables.  All symbols must be already inserted.
+     This function does not call file_write, caller has to do it
+     afterwards.  */
+  void build ()
+  {
+    /* Verify the build method has not be called twice.  */
+    gdb_assert (m_abbrev_table.empty ());
+    const size_t name_count = m_name_to_value_set.size ();
+    m_bucket_table.resize
+      (std::pow (2, std::ceil (std::log2 (name_count * 4 / 3))));
+    m_hash_table.reserve (name_count);
+    m_name_table_string_offs.reserve (name_count);
+    m_name_table_entry_offs.reserve (name_count);
+
+    /* Map each hash of symbol to its name and value.  */
+    struct hash_it_pair
+    {
+      uint32_t hash;
+      decltype (m_name_to_value_set)::const_iterator it;
+    };
+    std::vector<std::forward_list<hash_it_pair>> bucket_hash;
+    bucket_hash.resize (m_bucket_table.size ());
+    for (decltype (m_name_to_value_set)::const_iterator it
+	   = m_name_to_value_set.cbegin ();
+	 it != m_name_to_value_set.cend ();
+	 ++it)
+      {
+	const char *const name = it->first.c_str ();
+	const uint32_t hash = dwarf5_djb_hash (name);
+	hash_it_pair hashitpair;
+	hashitpair.hash = hash;
+	hashitpair.it = it;
+	auto &slot = bucket_hash[hash % bucket_hash.size()];
+	slot.push_front (std::move (hashitpair));
+      }
+    for (size_t bucket_ix = 0; bucket_ix < bucket_hash.size (); ++bucket_ix)
+      {
+	const std::forward_list<hash_it_pair> &hashitlist
+	  = bucket_hash[bucket_ix];
+	if (hashitlist.empty ())
+	  continue;
+	uint32_t &bucket_slot = m_bucket_table[bucket_ix];
+	/* The hashes array is indexed starting at 1.  */
+	store_unsigned_integer (reinterpret_cast<gdb_byte *> (&bucket_slot),
+				sizeof (bucket_slot), m_dwarf5_byte_order,
+				m_hash_table.size () + 1);
+	for (const hash_it_pair &hashitpair : hashitlist)
+	  {
+	    m_hash_table.push_back (0);
+	    store_unsigned_integer (reinterpret_cast<gdb_byte *>
+							(&m_hash_table.back ()),
+				    sizeof (m_hash_table.back ()),
+				    m_dwarf5_byte_order, hashitpair.hash);
+	    const c_str_view &name = hashitpair.it->first;
+	    const std::set<symbol_value> &value_set = hashitpair.it->second;
+	    m_name_table_string_offs.push_back_reorder
+	      (m_debugstrlookup.lookup (name.c_str ()));
+	    m_name_table_entry_offs.push_back_reorder (m_entry_pool.size ());
+	    gdb_assert (!value_set.empty ());
+	    for (const symbol_value &value : value_set)
+	      {
+		int &idx = m_indexkey_to_idx[index_key (value.dwarf_tag,
+							value.is_static,
+							value.kind)];
+		if (idx == 0)
+		  {
+		    idx = m_idx_next++;
+		    m_abbrev_table.append_unsigned_leb128 (idx);
+		    m_abbrev_table.append_unsigned_leb128 (value.dwarf_tag);
+		    m_abbrev_table.append_unsigned_leb128
+			      (value.kind == unit_kind::cu ? DW_IDX_compile_unit
+							   : DW_IDX_type_unit);
+		    m_abbrev_table.append_unsigned_leb128 (DW_FORM_udata);
+		    m_abbrev_table.append_unsigned_leb128 (value.is_static
+							   ? DW_IDX_GNU_internal
+							   : DW_IDX_GNU_external);
+		    m_abbrev_table.append_unsigned_leb128 (DW_FORM_flag_present);
+
+		    /* Terminate attributes list.  */
+		    m_abbrev_table.append_unsigned_leb128 (0);
+		    m_abbrev_table.append_unsigned_leb128 (0);
+		  }
+
+		m_entry_pool.append_unsigned_leb128 (idx);
+		m_entry_pool.append_unsigned_leb128 (value.cu_index);
+	      }
+
+	    /* Terminate the list of CUs.  */
+	    m_entry_pool.append_unsigned_leb128 (0);
+	  }
+      }
+    gdb_assert (m_hash_table.size () == name_count);
+
+    /* Terminate tags list.  */
+    m_abbrev_table.append_unsigned_leb128 (0);
+  }
+
+  /* Return .debug_names bucket count.  This must be called only after
+     calling the build method.  */
+  uint32_t bucket_count () const
+  {
+    /* Verify the build method has been already called.  */
+    gdb_assert (!m_abbrev_table.empty ());
+    const uint32_t retval = m_bucket_table.size ();
+
+    /* Check for overflow.  */
+    gdb_assert (retval == m_bucket_table.size ());
+    return retval;
+  }
+
+  /* Return .debug_names names count.  This must be called only after
+     calling the build method.  */
+  uint32_t name_count () const
+  {
+    /* Verify the build method has been already called.  */
+    gdb_assert (!m_abbrev_table.empty ());
+    const uint32_t retval = m_hash_table.size ();
+
+    /* Check for overflow.  */
+    gdb_assert (retval == m_hash_table.size ());
+    return retval;
+  }
+
+  /* Return number of bytes of .debug_names abbreviation table.  This
+     must be called only after calling the build method.  */
+  uint32_t abbrev_table_bytes () const
+  {
+    gdb_assert (!m_abbrev_table.empty ());
+    return m_abbrev_table.size ();
+  }
+
+  /* Recurse into all "included" dependencies and store their symbols
+     as if they appeared in this psymtab.  */
+  void recursively_write_psymbols
+    (struct objfile *objfile,
+     partial_symtab *psymtab,
+     std::unordered_set<partial_symbol *> &psyms_seen,
+     int cu_index)
+  {
+    for (int i = 0; i < psymtab->number_of_dependencies; ++i)
+      if (psymtab->dependencies[i]->user != NULL)
+	recursively_write_psymbols
+	  (objfile, psymtab->dependencies[i], psyms_seen, cu_index);
+
+    write_psymbols (psyms_seen, psymtab->global_psymbols,
+		    cu_index, false, unit_kind::cu);
+    write_psymbols (psyms_seen, psymtab->static_psymbols,
+		    cu_index, true, unit_kind::cu);
+  }
+
+  /* Return number of bytes the .debug_names section will have.  This
+     must be called only after calling the build method.  */
+  size_t bytes () const
+  {
+    /* Verify the build method has been already called.  */
+    gdb_assert (!m_abbrev_table.empty ());
+    size_t expected_bytes = 0;
+    expected_bytes += m_bucket_table.size () * sizeof (m_bucket_table[0]);
+    expected_bytes += m_hash_table.size () * sizeof (m_hash_table[0]);
+    expected_bytes += m_name_table_string_offs.bytes ();
+    expected_bytes += m_name_table_entry_offs.bytes ();
+    expected_bytes += m_abbrev_table.size ();
+    expected_bytes += m_entry_pool.size ();
+    return expected_bytes;
+  }
+
+  /* Write .debug_names to FILE_NAMES and .debug_str addition to
+     FILE_STR.  This must be called only after calling the build
+     method.  */
+  void file_write (FILE *file_names, FILE *file_str) const
+  {
+    /* Verify the build method has been already called.  */
+    gdb_assert (!m_abbrev_table.empty ());
+    ::file_write (file_names, m_bucket_table);
+    ::file_write (file_names, m_hash_table);
+    m_name_table_string_offs.file_write (file_names);
+    m_name_table_entry_offs.file_write (file_names);
+    m_abbrev_table.file_write (file_names);
+    m_entry_pool.file_write (file_names);
+    m_debugstrlookup.file_write (file_str);
+  }
+
+  /* A helper user data for write_one_signatured_type.  */
+  class write_one_signatured_type_data
+  {
+  public:
+    write_one_signatured_type_data (debug_names &nametable_,
+				    signatured_type_index_data &&info_)
+    : nametable (nametable_), info (std::move (info_))
+    {}
+    debug_names &nametable;
+    struct signatured_type_index_data info;
+  };
+
+  /* A helper function to pass write_one_signatured_type to
+     htab_traverse_noresize.  */
+  static int
+  write_one_signatured_type (void **slot, void *d)
+  {
+    write_one_signatured_type_data *data = (write_one_signatured_type_data *) d;
+    struct signatured_type_index_data *info = &data->info;
+    struct signatured_type *entry = (struct signatured_type *) *slot;
+
+    data->nametable.write_one_signatured_type (entry, info);
+
+    return 1;
+  }
+
+private:
+
+  /* Storage for symbol names mapping them to their .debug_str section
+     offsets.  */
+  class debug_str_lookup
+  {
+  public:
+
+    /* Object constructor to be called for current DWARF2_PER_OBJFILE.
+       All .debug_str section strings are automatically stored.  */
+    debug_str_lookup (dwarf2_per_objfile *per_objfile)
+      : m_abfd (per_objfile->objfile->obfd),
+	m_per_objfile (per_objfile)
+    {
+      per_objfile->per_bfd->str.read (per_objfile->objfile);
+      if (per_objfile->per_bfd->str.buffer == NULL)
+	return;
+      for (const gdb_byte *data = per_objfile->per_bfd->str.buffer;
+	   data < (per_objfile->per_bfd->str.buffer
+		   + per_objfile->per_bfd->str.size);)
+	{
+	  const char *const s = reinterpret_cast<const char *> (data);
+	  const auto insertpair
+	    = m_str_table.emplace (c_str_view (s),
+				   data - per_objfile->per_bfd->str.buffer);
+	  if (!insertpair.second)
+	    complaint (_("Duplicate string \"%s\" in "
+			 ".debug_str section [in module %s]"),
+		       s, bfd_get_filename (m_abfd));
+	  data += strlen (s) + 1;
+	}
+    }
+
+    /* Return offset of symbol name S in the .debug_str section.  Add
+       such symbol to the section's end if it does not exist there
+       yet.  */
+    size_t lookup (const char *s)
+    {
+      const auto it = m_str_table.find (c_str_view (s));
+      if (it != m_str_table.end ())
+	return it->second;
+      const size_t offset = (m_per_objfile->per_bfd->str.size
+			     + m_str_add_buf.size ());
+      m_str_table.emplace (c_str_view (s), offset);
+      m_str_add_buf.append_cstr0 (s);
+      return offset;
+    }
+
+    /* Append the end of the .debug_str section to FILE.  */
+    void file_write (FILE *file) const
+    {
+      m_str_add_buf.file_write (file);
+    }
+
+  private:
+    std::unordered_map<c_str_view, size_t, c_str_view_hasher> m_str_table;
+    bfd *const m_abfd;
+    dwarf2_per_objfile *m_per_objfile;
+
+    /* Data to add at the end of .debug_str for new needed symbol names.  */
+    data_buf m_str_add_buf;
+  };
+
+  /* Container to map used DWARF tags to their .debug_names abbreviation
+     tags.  */
+  class index_key
+  {
+  public:
+    index_key (int dwarf_tag_, bool is_static_, unit_kind kind_)
+      : dwarf_tag (dwarf_tag_), is_static (is_static_), kind (kind_)
+    {
+    }
+
+    bool
+    operator== (const index_key &other) const
+    {
+      return (dwarf_tag == other.dwarf_tag && is_static == other.is_static
+	      && kind == other.kind);
+    }
+
+    const int dwarf_tag;
+    const bool is_static;
+    const unit_kind kind;
+  };
+
+  /* Provide std::unordered_map::hasher for index_key.  */
+  class index_key_hasher
+  {
+  public:
+    size_t
+    operator () (const index_key &key) const
+    {
+      return (std::hash<int>() (key.dwarf_tag) << 1) | key.is_static;
+    }
+  };
+
+  /* Parameters of one symbol entry.  */
+  class symbol_value
+  {
+  public:
+    const int dwarf_tag, cu_index;
+    const bool is_static;
+    const unit_kind kind;
+
+    symbol_value (int dwarf_tag_, int cu_index_, bool is_static_,
+		  unit_kind kind_)
+      : dwarf_tag (dwarf_tag_), cu_index (cu_index_), is_static (is_static_),
+	kind (kind_)
+    {}
+
+    bool
+    operator< (const symbol_value &other) const
+    {
+#define X(n) \
+  do \
+    { \
+      if (n < other.n) \
+	return true; \
+      if (n > other.n) \
+	return false; \
+    } \
+  while (0)
+      X (dwarf_tag);
+      X (is_static);
+      X (kind);
+      X (cu_index);
+#undef X
+      return false;
+    }
+  };
+
+  /* Abstract base class to unify DWARF-32 and DWARF-64 name table
+     output.  */
+  class offset_vec
+  {
+  protected:
+    const bfd_endian dwarf5_byte_order;
+  public:
+    explicit offset_vec (bfd_endian dwarf5_byte_order_)
+      : dwarf5_byte_order (dwarf5_byte_order_)
+    {}
+
+    /* Call std::vector::reserve for NELEM elements.  */
+    virtual void reserve (size_t nelem) = 0;
+
+    /* Call std::vector::push_back with store_unsigned_integer byte
+       reordering for ELEM.  */
+    virtual void push_back_reorder (size_t elem) = 0;
+
+    /* Return expected output size in bytes.  */
+    virtual size_t bytes () const = 0;
+
+    /* Write name table to FILE.  */
+    virtual void file_write (FILE *file) const = 0;
+  };
+
+  /* Template to unify DWARF-32 and DWARF-64 output.  */
+  template<typename OffsetSize>
+  class offset_vec_tmpl : public offset_vec
+  {
+  public:
+    explicit offset_vec_tmpl (bfd_endian dwarf5_byte_order_)
+      : offset_vec (dwarf5_byte_order_)
+    {}
+
+    /* Implement offset_vec::reserve.  */
+    void reserve (size_t nelem) override
+    {
+      m_vec.reserve (nelem);
+    }
+
+    /* Implement offset_vec::push_back_reorder.  */
+    void push_back_reorder (size_t elem) override
+    {
+      m_vec.push_back (elem);
+      /* Check for overflow.  */
+      gdb_assert (m_vec.back () == elem);
+      store_unsigned_integer (reinterpret_cast<gdb_byte *> (&m_vec.back ()),
+			      sizeof (m_vec.back ()), dwarf5_byte_order, elem);
+    }
+
+    /* Implement offset_vec::bytes.  */
+    size_t bytes () const override
+    {
+      return m_vec.size () * sizeof (m_vec[0]);
+    }
+
+    /* Implement offset_vec::file_write.  */
+    void file_write (FILE *file) const override
+    {
+      ::file_write (file, m_vec);
+    }
+
+  private:
+    std::vector<OffsetSize> m_vec;
+  };
+
+  /* Base class to unify DWARF-32 and DWARF-64 .debug_names output
+     respecting name table width.  */
+  class dwarf
+  {
+  public:
+    offset_vec &name_table_string_offs, &name_table_entry_offs;
+
+    dwarf (offset_vec &name_table_string_offs_,
+	   offset_vec &name_table_entry_offs_)
+      : name_table_string_offs (name_table_string_offs_),
+	name_table_entry_offs (name_table_entry_offs_)
+    {
+    }
+  };
+
+  /* Template to unify DWARF-32 and DWARF-64 .debug_names output
+     respecting name table width.  */
+  template<typename OffsetSize>
+  class dwarf_tmpl : public dwarf
+  {
+  public:
+    explicit dwarf_tmpl (bfd_endian dwarf5_byte_order_)
+      : dwarf (m_name_table_string_offs, m_name_table_entry_offs),
+	m_name_table_string_offs (dwarf5_byte_order_),
+	m_name_table_entry_offs (dwarf5_byte_order_)
+    {}
+
+  private:
+    offset_vec_tmpl<OffsetSize> m_name_table_string_offs;
+    offset_vec_tmpl<OffsetSize> m_name_table_entry_offs;
+  };
+
+  /* Try to reconstruct original DWARF tag for given partial_symbol.
+     This function is not DWARF-5 compliant but it is sufficient for
+     GDB as a DWARF-5 index consumer.  */
+  static int psymbol_tag (const struct partial_symbol *psym)
+  {
+    domain_enum domain = psym->domain;
+    enum address_class aclass = psym->aclass;
+
+    switch (domain)
+      {
+      case VAR_DOMAIN:
+	switch (aclass)
+	  {
+	  case LOC_BLOCK:
+	    return DW_TAG_subprogram;
+	  case LOC_TYPEDEF:
+	    return DW_TAG_typedef;
+	  case LOC_COMPUTED:
+	  case LOC_CONST_BYTES:
+	  case LOC_OPTIMIZED_OUT:
+	  case LOC_STATIC:
+	    return DW_TAG_variable;
+	  case LOC_CONST:
+	    /* Note: It's currently impossible to recognize psyms as enum values
+	       short of reading the type info.  For now punt.  */
+	    return DW_TAG_variable;
+	  default:
+	    /* There are other LOC_FOO values that one might want to classify
+	       as variables, but dwarf2read.c doesn't currently use them.  */
+	    return DW_TAG_variable;
+	  }
+      case STRUCT_DOMAIN:
+	return DW_TAG_structure_type;
+      case MODULE_DOMAIN:
+	return DW_TAG_module;
+      default:
+	return 0;
+      }
+  }
+
+  /* Call insert for all partial symbols and mark them in PSYMS_SEEN.  */
+  void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen,
+		       const std::vector<partial_symbol *> &symbols,
+		       int cu_index, bool is_static, unit_kind kind)
+  {
+    for (partial_symbol *psym : symbols)
+      {
+	/* Only add a given psymbol once.  */
+	if (psyms_seen.insert (psym).second)
+	  insert (psym, cu_index, is_static, kind);
+      }
+  }
+
+  /* A helper function that writes a single signatured_type
+     to a debug_names.  */
+  void
+  write_one_signatured_type (struct signatured_type *entry,
+			     struct signatured_type_index_data *info)
+  {
+    partial_symtab *psymtab = entry->v.psymtab;
+
+    write_psymbols (info->psyms_seen, psymtab->global_psymbols,
+		    info->cu_index, false, unit_kind::tu);
+    write_psymbols (info->psyms_seen, psymtab->static_psymbols,
+		    info->cu_index, true, unit_kind::tu);
+
+    info->types_list.append_uint (dwarf5_offset_size (), m_dwarf5_byte_order,
+				  to_underlying (entry->sect_off));
+
+    ++info->cu_index;
+  }
+
+  /* Store value of each symbol.  */
+  std::unordered_map<c_str_view, std::set<symbol_value>, c_str_view_hasher>
+    m_name_to_value_set;
+
+  /* Tables of DWARF-5 .debug_names.  They are in object file byte
+     order.  */
+  std::vector<uint32_t> m_bucket_table;
+  std::vector<uint32_t> m_hash_table;
+
+  const bfd_endian m_dwarf5_byte_order;
+  dwarf_tmpl<uint32_t> m_dwarf32;
+  dwarf_tmpl<uint64_t> m_dwarf64;
+  dwarf &m_dwarf;
+  offset_vec &m_name_table_string_offs, &m_name_table_entry_offs;
+  debug_str_lookup m_debugstrlookup;
+
+  /* Map each used .debug_names abbreviation tag parameter to its
+     index value.  */
+  std::unordered_map<index_key, int, index_key_hasher> m_indexkey_to_idx;
+
+  /* Next unused .debug_names abbreviation tag for
+     m_indexkey_to_idx.  */
+  int m_idx_next = 1;
+
+  /* .debug_names abbreviation table.  */
+  data_buf m_abbrev_table;
+
+  /* .debug_names entry pool.  */
+  data_buf m_entry_pool;
+
+  /* Temporary storage for Ada names.  */
+  auto_obstack m_string_obstack;
+};
+
+/* Return iff any of the needed offsets does not fit into 32-bit
+   .debug_names section.  */
+
+static bool
+check_dwarf64_offsets (dwarf2_per_objfile *per_objfile)
+{
+  for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
+    {
+      if (to_underlying (per_cu->sect_off)
+	  >= (static_cast<uint64_t> (1) << 32))
+	return true;
+    }
+  return false;
+}
+
+/* The psyms_seen set is potentially going to be largish (~40k
+   elements when indexing a -g3 build of GDB itself).  Estimate the
+   number of elements in order to avoid too many rehashes, which
+   require rebuilding buckets and thus many trips to
+   malloc/free.  */
+
+static size_t
+psyms_seen_size (dwarf2_per_objfile *per_objfile)
+{
+  size_t psyms_count = 0;
+  for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
+    {
+      partial_symtab *psymtab = per_cu->v.psymtab;
+
+      if (psymtab != NULL && psymtab->user == NULL)
+	recursively_count_psymbols (psymtab, psyms_count);
+    }
+  /* Generating an index for gdb itself shows a ratio of
+     TOTAL_SEEN_SYMS/UNIQUE_SYMS or ~5.  4 seems like a good bet.  */
+  return psyms_count / 4;
+}
+
+/* Assert that FILE's size is EXPECTED_SIZE.  Assumes file's seek
+   position is at the end of the file.  */
+
+static void
+assert_file_size (FILE *file, size_t expected_size)
+{
+  const auto file_size = ftell (file);
+  if (file_size == -1)
+    perror_with_name (("ftell"));
+  gdb_assert (file_size == expected_size);
+}
+
+/* Write a gdb index file to OUT_FILE from all the sections passed as
+   arguments.  */
+
+static void
+write_gdbindex_1 (FILE *out_file,
+		  const data_buf &cu_list,
+		  const data_buf &types_cu_list,
+		  const data_buf &addr_vec,
+		  const data_buf &symtab_vec,
+		  const data_buf &constant_pool)
+{
+  data_buf contents;
+  const offset_type size_of_header = 6 * sizeof (offset_type);
+  offset_type total_len = size_of_header;
+
+  /* The version number.  */
+  contents.append_offset (8);
+
+  /* The offset of the CU list from the start of the file.  */
+  contents.append_offset (total_len);
+  total_len += cu_list.size ();
+
+  /* The offset of the types CU list from the start of the file.  */
+  contents.append_offset (total_len);
+  total_len += types_cu_list.size ();
+
+  /* The offset of the address table from the start of the file.  */
+  contents.append_offset (total_len);
+  total_len += addr_vec.size ();
+
+  /* The offset of the symbol table from the start of the file.  */
+  contents.append_offset (total_len);
+  total_len += symtab_vec.size ();
+
+  /* The offset of the constant pool from the start of the file.  */
+  contents.append_offset (total_len);
+  total_len += constant_pool.size ();
+
+  gdb_assert (contents.size () == size_of_header);
+
+  contents.file_write (out_file);
+  cu_list.file_write (out_file);
+  types_cu_list.file_write (out_file);
+  addr_vec.file_write (out_file);
+  symtab_vec.file_write (out_file);
+  constant_pool.file_write (out_file);
+
+  assert_file_size (out_file, total_len);
+}
+
+/* Write contents of a .gdb_index section for OBJFILE into OUT_FILE.
+   If OBJFILE has an associated dwz file, write contents of a .gdb_index
+   section for that dwz file into DWZ_OUT_FILE.  If OBJFILE does not have an
+   associated dwz file, DWZ_OUT_FILE must be NULL.  */
+
+static void
+write_gdbindex (dwarf2_per_objfile *per_objfile, FILE *out_file,
+		FILE *dwz_out_file)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  mapped_symtab symtab;
+  data_buf objfile_cu_list;
+  data_buf dwz_cu_list;
+
+  /* While we're scanning CU's create a table that maps a psymtab pointer
+     (which is what addrmap records) to its index (which is what is recorded
+     in the index file).  This will later be needed to write the address
+     table.  */
+  psym_index_map cu_index_htab;
+  cu_index_htab.reserve (per_objfile->per_bfd->all_comp_units.size ());
+
+  /* The CU list is already sorted, so we don't need to do additional
+     work here.  Also, the debug_types entries do not appear in
+     all_comp_units, but only in their own hash table.  */
+
+  std::unordered_set<partial_symbol *> psyms_seen
+    (psyms_seen_size (per_objfile));
+  int counter = 0;
+  for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
+    {
+      dwarf2_per_cu_data *per_cu
+	= per_objfile->per_bfd->all_comp_units[i].get ();
+      if (per_cu->is_debug_types)
+	continue;
+
+      partial_symtab *psymtab = per_cu->v.psymtab;
+
+      if (psymtab != NULL)
+	{
+	  if (psymtab->user == NULL)
+	    recursively_write_psymbols (objfile, psymtab, &symtab,
+					psyms_seen, i);
+
+	  const auto insertpair = cu_index_htab.emplace (psymtab, counter);
+	  gdb_assert (insertpair.second);
+	}
+
+      /* The all_comp_units list contains CUs read from the objfile as well as
+	 from the eventual dwz file.  We need to place the entry in the
+	 corresponding index.  */
+      data_buf &cu_list = per_cu->is_dwz ? dwz_cu_list : objfile_cu_list;
+      cu_list.append_uint (8, BFD_ENDIAN_LITTLE,
+			   to_underlying (per_cu->sect_off));
+      cu_list.append_uint (8, BFD_ENDIAN_LITTLE, per_cu->length);
+      ++counter;
+    }
+
+  /* Dump the address map.  */
+  data_buf addr_vec;
+  write_address_map (per_objfile->per_bfd, addr_vec, cu_index_htab);
+
+  /* Write out the .debug_type entries, if any.  */
+  data_buf types_cu_list;
+  if (per_objfile->per_bfd->signatured_types)
+    {
+      signatured_type_index_data sig_data (types_cu_list,
+					   psyms_seen);
+
+      sig_data.objfile = objfile;
+      sig_data.symtab = &symtab;
+      sig_data.cu_index = (per_objfile->per_bfd->all_comp_units.size ()
+			   - per_objfile->per_bfd->tu_stats.nr_tus);
+      htab_traverse_noresize (per_objfile->per_bfd->signatured_types.get (),
+			      write_one_signatured_type, &sig_data);
+    }
+
+  /* Now that we've processed all symbols we can shrink their cu_indices
+     lists.  */
+  uniquify_cu_indices (&symtab);
+
+  data_buf symtab_vec, constant_pool;
+  write_hash_table (&symtab, symtab_vec, constant_pool);
+
+  write_gdbindex_1(out_file, objfile_cu_list, types_cu_list, addr_vec,
+		   symtab_vec, constant_pool);
+
+  if (dwz_out_file != NULL)
+    write_gdbindex_1 (dwz_out_file, dwz_cu_list, {}, {}, {}, {});
+  else
+    gdb_assert (dwz_cu_list.empty ());
+}
+
+/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension.  */
+static const gdb_byte dwarf5_gdb_augmentation[] = { 'G', 'D', 'B', 0 };
+
+/* Write a new .debug_names section for OBJFILE into OUT_FILE, write
+   needed addition to .debug_str section to OUT_FILE_STR.  Return how
+   many bytes were expected to be written into OUT_FILE.  */
+
+static void
+write_debug_names (dwarf2_per_objfile *per_objfile,
+		   FILE *out_file, FILE *out_file_str)
+{
+  const bool dwarf5_is_dwarf64 = check_dwarf64_offsets (per_objfile);
+  struct objfile *objfile = per_objfile->objfile;
+  const enum bfd_endian dwarf5_byte_order
+    = gdbarch_byte_order (objfile->arch ());
+
+  /* The CU list is already sorted, so we don't need to do additional
+     work here.  Also, the debug_types entries do not appear in
+     all_comp_units, but only in their own hash table.  */
+  data_buf cu_list;
+  debug_names nametable (per_objfile, dwarf5_is_dwarf64, dwarf5_byte_order);
+  std::unordered_set<partial_symbol *>
+    psyms_seen (psyms_seen_size (per_objfile));
+  int counter = 0;
+  for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
+    {
+      const dwarf2_per_cu_data *per_cu
+	= per_objfile->per_bfd->all_comp_units[i].get ();
+      if (per_cu->is_debug_types)
+	continue;
+
+      partial_symtab *psymtab = per_cu->v.psymtab;
+
+      /* CU of a shared file from 'dwz -m' may be unused by this main
+	 file.  It may be referenced from a local scope but in such
+	 case it does not need to be present in .debug_names.  */
+      if (psymtab == NULL)
+	continue;
+
+      if (psymtab->user == NULL)
+	nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen,
+					      counter);
+
+      cu_list.append_uint (nametable.dwarf5_offset_size (), dwarf5_byte_order,
+			   to_underlying (per_cu->sect_off));
+      ++counter;
+    }
+
+  /* Write out the .debug_type entries, if any.  */
+  data_buf types_cu_list;
+  if (per_objfile->per_bfd->signatured_types)
+    {
+      debug_names::write_one_signatured_type_data sig_data (nametable,
+			signatured_type_index_data (types_cu_list, psyms_seen));
+
+      sig_data.info.objfile = objfile;
+      /* It is used only for gdb_index.  */
+      sig_data.info.symtab = nullptr;
+      sig_data.info.cu_index = 0;
+      htab_traverse_noresize (per_objfile->per_bfd->signatured_types.get (),
+			      debug_names::write_one_signatured_type,
+			      &sig_data);
+    }
+
+  nametable.build ();
+
+  /* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC.  */
+
+  const offset_type bytes_of_header
+    = ((dwarf5_is_dwarf64 ? 12 : 4)
+       + 2 + 2 + 7 * 4
+       + sizeof (dwarf5_gdb_augmentation));
+  size_t expected_bytes = 0;
+  expected_bytes += bytes_of_header;
+  expected_bytes += cu_list.size ();
+  expected_bytes += types_cu_list.size ();
+  expected_bytes += nametable.bytes ();
+  data_buf header;
+
+  if (!dwarf5_is_dwarf64)
+    {
+      const uint64_t size64 = expected_bytes - 4;
+      gdb_assert (size64 < 0xfffffff0);
+      header.append_uint (4, dwarf5_byte_order, size64);
+    }
+  else
+    {
+      header.append_uint (4, dwarf5_byte_order, 0xffffffff);
+      header.append_uint (8, dwarf5_byte_order, expected_bytes - 12);
+    }
+
+  /* The version number.  */
+  header.append_uint (2, dwarf5_byte_order, 5);
+
+  /* Padding.  */
+  header.append_uint (2, dwarf5_byte_order, 0);
+
+  /* comp_unit_count - The number of CUs in the CU list.  */
+  header.append_uint (4, dwarf5_byte_order,
+		      per_objfile->per_bfd->all_comp_units.size ()
+		      - per_objfile->per_bfd->tu_stats.nr_tus);
+
+  /* local_type_unit_count - The number of TUs in the local TU
+     list.  */
+  header.append_uint (4, dwarf5_byte_order,
+		      per_objfile->per_bfd->tu_stats.nr_tus);
+
+  /* foreign_type_unit_count - The number of TUs in the foreign TU
+     list.  */
+  header.append_uint (4, dwarf5_byte_order, 0);
+
+  /* bucket_count - The number of hash buckets in the hash lookup
+     table.  */
+  header.append_uint (4, dwarf5_byte_order, nametable.bucket_count ());
+
+  /* name_count - The number of unique names in the index.  */
+  header.append_uint (4, dwarf5_byte_order, nametable.name_count ());
+
+  /* abbrev_table_size - The size in bytes of the abbreviations
+     table.  */
+  header.append_uint (4, dwarf5_byte_order, nametable.abbrev_table_bytes ());
+
+  /* augmentation_string_size - The size in bytes of the augmentation
+     string.  This value is rounded up to a multiple of 4.  */
+  static_assert (sizeof (dwarf5_gdb_augmentation) % 4 == 0, "");
+  header.append_uint (4, dwarf5_byte_order, sizeof (dwarf5_gdb_augmentation));
+  header.append_array (dwarf5_gdb_augmentation);
+
+  gdb_assert (header.size () == bytes_of_header);
+
+  header.file_write (out_file);
+  cu_list.file_write (out_file);
+  types_cu_list.file_write (out_file);
+  nametable.file_write (out_file, out_file_str);
+
+  assert_file_size (out_file, expected_bytes);
+}
+
+/* This represents an index file being written (work-in-progress).
+
+   The data is initially written to a temporary file.  When the finalize method
+   is called, the file is closed and moved to its final location.
+
+   On failure (if this object is being destroyed with having called finalize),
+   the temporary file is closed and deleted.  */
+
+struct index_wip_file
+{
+  index_wip_file (const char *dir, const char *basename,
+		  const char *suffix)
+  {
+    filename = (std::string (dir) + SLASH_STRING + basename
+		+ suffix);
+
+    filename_temp = make_temp_filename (filename);
+
+    scoped_fd out_file_fd (gdb_mkostemp_cloexec (filename_temp.data (),
+						 O_BINARY));
+    if (out_file_fd.get () == -1)
+      perror_with_name (("mkstemp"));
+
+    out_file = out_file_fd.to_file ("wb");
+
+    if (out_file == nullptr)
+      error (_("Can't open `%s' for writing"), filename_temp.data ());
+
+    unlink_file.emplace (filename_temp.data ());
+  }
+
+  void finalize ()
+  {
+    /* We want to keep the file.  */
+    unlink_file->keep ();
+
+    /* Close and move the str file in place.  */
+    unlink_file.reset ();
+    if (rename (filename_temp.data (), filename.c_str ()) != 0)
+      perror_with_name (("rename"));
+  }
+
+  std::string filename;
+  gdb::char_vector filename_temp;
+
+  /* Order matters here; we want FILE to be closed before
+     FILENAME_TEMP is unlinked, because on MS-Windows one cannot
+     delete a file that is still open.  So, we wrap the unlinker in an
+     optional and emplace it once we know the file name.  */
+  gdb::optional<gdb::unlinker> unlink_file;
+
+  gdb_file_up out_file;
+};
+
+/* See dwarf-index-write.h.  */
+
+void
+write_psymtabs_to_index (dwarf2_per_objfile *per_objfile, const char *dir,
+			 const char *basename, const char *dwz_basename,
+			 dw_index_kind index_kind)
+{
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+  struct objfile *objfile = per_objfile->objfile;
+
+  if (per_objfile->per_bfd->using_index)
+    error (_("Cannot use an index to create the index"));
+
+  if (per_objfile->per_bfd->types.size () > 1)
+    error (_("Cannot make an index when the file has multiple .debug_types sections"));
+
+  if (per_bfd->partial_symtabs == nullptr
+      || !per_bfd->partial_symtabs->psymtabs
+      || !per_bfd->partial_symtabs->psymtabs_addrmap)
+    return;
+
+  struct stat st;
+  if (stat (objfile_name (objfile), &st) < 0)
+    perror_with_name (objfile_name (objfile));
+
+  const char *index_suffix = (index_kind == dw_index_kind::DEBUG_NAMES
+			      ? INDEX5_SUFFIX : INDEX4_SUFFIX);
+
+  index_wip_file objfile_index_wip (dir, basename, index_suffix);
+  gdb::optional<index_wip_file> dwz_index_wip;
+
+  if (dwz_basename != NULL)
+      dwz_index_wip.emplace (dir, dwz_basename, index_suffix);
+
+  if (index_kind == dw_index_kind::DEBUG_NAMES)
+    {
+      index_wip_file str_wip_file (dir, basename, DEBUG_STR_SUFFIX);
+
+      write_debug_names (per_objfile, objfile_index_wip.out_file.get (),
+			 str_wip_file.out_file.get ());
+
+      str_wip_file.finalize ();
+    }
+  else
+    write_gdbindex (per_objfile, objfile_index_wip.out_file.get (),
+		    (dwz_index_wip.has_value ()
+		     ? dwz_index_wip->out_file.get () : NULL));
+
+  objfile_index_wip.finalize ();
+
+  if (dwz_index_wip.has_value ())
+    dwz_index_wip->finalize ();
+}
+
+/* Implementation of the `save gdb-index' command.
+
+   Note that the .gdb_index file format used by this command is
+   documented in the GDB manual.  Any changes here must be documented
+   there.  */
+
+static void
+save_gdb_index_command (const char *arg, int from_tty)
+{
+  const char dwarf5space[] = "-dwarf-5 ";
+  dw_index_kind index_kind = dw_index_kind::GDB_INDEX;
+
+  if (!arg)
+    arg = "";
+
+  arg = skip_spaces (arg);
+  if (strncmp (arg, dwarf5space, strlen (dwarf5space)) == 0)
+    {
+      index_kind = dw_index_kind::DEBUG_NAMES;
+      arg += strlen (dwarf5space);
+      arg = skip_spaces (arg);
+    }
+
+  if (!*arg)
+    error (_("usage: save gdb-index [-dwarf-5] DIRECTORY"));
+
+  for (objfile *objfile : current_program_space->objfiles ())
+    {
+      struct stat st;
+
+      /* If the objfile does not correspond to an actual file, skip it.  */
+      if (stat (objfile_name (objfile), &st) < 0)
+	continue;
+
+      dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+      if (per_objfile != NULL)
+	{
+	  try
+	    {
+	      const char *basename = lbasename (objfile_name (objfile));
+	      const dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd);
+	      const char *dwz_basename = NULL;
+
+	      if (dwz != NULL)
+		dwz_basename = lbasename (dwz->filename ());
+
+	      write_psymtabs_to_index (per_objfile, arg, basename, dwz_basename,
+				       index_kind);
+	    }
+	  catch (const gdb_exception_error &except)
+	    {
+	      exception_fprintf (gdb_stderr, except,
+				 _("Error while writing index for `%s': "),
+				 objfile_name (objfile));
+	    }
+	    }
+
+    }
+}
+
+void _initialize_dwarf_index_write ();
+void
+_initialize_dwarf_index_write ()
+{
+  cmd_list_element *c = add_cmd ("gdb-index", class_files,
+				 save_gdb_index_command, _("\
+Save a gdb-index file.\n\
+Usage: save gdb-index [-dwarf-5] DIRECTORY\n\
+\n\
+No options create one file with .gdb-index extension for pre-DWARF-5\n\
+compatible .gdb_index section.  With -dwarf-5 creates two files with\n\
+extension .debug_names and .debug_str for DWARF-5 .debug_names section."),
+	       &save_cmdlist);
+  set_cmd_completer (c, filename_completer);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-write.h ./gdb/dwarf2/index-write.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/index-write.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/index-write.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,39 @@
+/* DWARF index writing support for GDB.
+
+   Copyright (C) 2018-2021 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 DWARF_INDEX_WRITE_H
+#define DWARF_INDEX_WRITE_H
+
+#include "dwarf2/read.h"
+#include "dwarf2/public.h"
+
+/* Create index files for OBJFILE in the directory DIR.
+
+   An index file is created for OBJFILE itself, and is created for its
+   associated dwz file, if it has one.
+
+   BASENAME is the desired filename base for OBJFILE's index.  An extension
+   derived from INDEX_KIND is added to this base name.  DWZ_BASENAME is the
+   same, but for the dwz file's index.  */
+
+extern void write_psymtabs_to_index
+  (dwarf2_per_objfile *per_objfile, const char *dir, const char *basename,
+   const char *dwz_basename, dw_index_kind index_kind);
+
+#endif /* DWARF_INDEX_WRITE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/leb.c ./gdb/dwarf2/leb.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/leb.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/leb.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,136 @@
+/* Low-level DWARF 2 reading code
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2/leb.h"
+
+ULONGEST
+read_unsigned_leb128 (bfd *abfd, const gdb_byte *buf,
+			  unsigned int *bytes_read_ptr)
+{
+  ULONGEST result;
+  unsigned int num_read;
+  int shift;
+  unsigned char byte;
+
+  result = 0;
+  shift = 0;
+  num_read = 0;
+  while (1)
+    {
+      byte = bfd_get_8 (abfd, buf);
+      buf++;
+      num_read++;
+      result |= ((ULONGEST) (byte & 127) << shift);
+      if ((byte & 128) == 0)
+	{
+	  break;
+	}
+      shift += 7;
+    }
+  *bytes_read_ptr = num_read;
+  return result;
+}
+
+LONGEST
+read_signed_leb128 (bfd *abfd, const gdb_byte *buf,
+		    unsigned int *bytes_read_ptr)
+{
+  ULONGEST result;
+  int shift, num_read;
+  unsigned char byte;
+
+  result = 0;
+  shift = 0;
+  num_read = 0;
+  while (1)
+    {
+      byte = bfd_get_8 (abfd, buf);
+      buf++;
+      num_read++;
+      result |= ((ULONGEST) (byte & 127) << shift);
+      shift += 7;
+      if ((byte & 128) == 0)
+	{
+	  break;
+	}
+    }
+  if ((shift < 8 * sizeof (result)) && (byte & 0x40))
+    result |= -(((ULONGEST) 1) << shift);
+  *bytes_read_ptr = num_read;
+  return result;
+}
+
+/* See leb.h.  */
+
+LONGEST
+read_initial_length (bfd *abfd, const gdb_byte *buf, unsigned int *bytes_read,
+		     bool handle_nonstd)
+{
+  LONGEST length = bfd_get_32 (abfd, buf);
+
+  if (length == 0xffffffff)
+    {
+      length = bfd_get_64 (abfd, buf + 4);
+      *bytes_read = 12;
+    }
+  else if (handle_nonstd && length == 0)
+    {
+      /* Handle the (non-standard) 64-bit DWARF2 format used by IRIX.  */
+      length = bfd_get_64 (abfd, buf);
+      *bytes_read = 8;
+    }
+  else
+    {
+      *bytes_read = 4;
+    }
+
+  return length;
+}
+
+/* See leb.h.  */
+
+LONGEST
+read_offset (bfd *abfd, const gdb_byte *buf, unsigned int offset_size)
+{
+  LONGEST retval = 0;
+
+  switch (offset_size)
+    {
+    case 4:
+      retval = bfd_get_32 (abfd, buf);
+      break;
+    case 8:
+      retval = bfd_get_64 (abfd, buf);
+      break;
+    default:
+      internal_error (__FILE__, __LINE__,
+		      _("read_offset_1: bad switch [in module %s]"),
+		      bfd_get_filename (abfd));
+    }
+
+  return retval;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/leb.h ./gdb/dwarf2/leb.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/leb.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/leb.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,157 @@
+/* Low-level DWARF 2 reading code
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 GDB_DWARF2_LEB_H
+#define GDB_DWARF2_LEB_H
+
+/* Read dwarf information from a buffer.  */
+
+static inline unsigned int
+read_1_byte (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_8 (abfd, buf);
+}
+
+static inline int
+read_1_signed_byte (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_signed_8 (abfd, buf);
+}
+
+static inline unsigned int
+read_2_bytes (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_16 (abfd, buf);
+}
+
+static inline int
+read_2_signed_bytes (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_signed_16 (abfd, buf);
+}
+
+/* Read the next three bytes (little-endian order) as an unsigned integer.  */
+static inline unsigned int
+read_3_bytes (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_24 (abfd, buf);
+}
+
+static inline unsigned int
+read_4_bytes (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_32 (abfd, buf);
+}
+
+static inline int
+read_4_signed_bytes (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_signed_32 (abfd, buf);
+}
+
+static inline ULONGEST
+read_8_bytes (bfd *abfd, const gdb_byte *buf)
+{
+  return bfd_get_64 (abfd, buf);
+}
+
+extern LONGEST read_signed_leb128 (bfd *, const gdb_byte *, unsigned int *);
+
+extern ULONGEST read_unsigned_leb128 (bfd *, const gdb_byte *, unsigned int *);
+
+/* Read the initial length from a section.  The (draft) DWARF 3
+   specification allows the initial length to take up either 4 bytes
+   or 12 bytes.  If the first 4 bytes are 0xffffffff, then the next 8
+   bytes describe the length and all offsets will be 8 bytes in length
+   instead of 4.
+
+   An older, non-standard 64-bit format is also handled by this
+   function.  The older format in question stores the initial length
+   as an 8-byte quantity without an escape value.  Lengths greater
+   than 2^32 aren't very common which means that the initial 4 bytes
+   is almost always zero.  Since a length value of zero doesn't make
+   sense for the 32-bit format, this initial zero can be considered to
+   be an escape value which indicates the presence of the older 64-bit
+   format.  As written, the code can't detect (old format) lengths
+   greater than 4GB.  If it becomes necessary to handle lengths
+   somewhat larger than 4GB, we could allow other small values (such
+   as the non-sensical values of 1, 2, and 3) to also be used as
+   escape values indicating the presence of the old format.
+
+   The value returned via bytes_read should be used to increment the
+   relevant pointer after calling read_initial_length().
+
+   [ Note:  read_initial_length() and read_offset() are based on the
+     document entitled "DWARF Debugging Information Format", revision
+     3, draft 8, dated November 19, 2001.  This document was obtained
+     from:
+
+	http://reality.sgiweb.org/davea/dwarf3-draft8-011125.pdf
+
+     This document is only a draft and is subject to change.  (So beware.)
+
+     Details regarding the older, non-standard 64-bit format were
+     determined empirically by examining 64-bit ELF files produced by
+     the SGI toolchain on an IRIX 6.5 machine.
+
+     - Kevin, July 16, 2002
+   ] */
+extern LONGEST read_initial_length (bfd *abfd, const gdb_byte *buf,
+				    unsigned int *bytes_read,
+				    bool handle_nonstd = true);
+
+/* Read an offset from the data stream.  */
+extern LONGEST read_offset (bfd *abfd, const gdb_byte *buf,
+			    unsigned int offset_size);
+
+static inline const gdb_byte *
+read_n_bytes (bfd *abfd, const gdb_byte *buf, unsigned int size)
+{
+  /* If the size of a host char is 8 bits, we can return a pointer
+     to the buffer, otherwise we have to copy the data to a buffer
+     allocated on the temporary obstack.  */
+  gdb_assert (HOST_CHAR_BIT == 8);
+  return buf;
+}
+
+static inline const char *
+read_direct_string (bfd *abfd, const gdb_byte *buf,
+		    unsigned int *bytes_read_ptr)
+{
+  /* If the size of a host char is 8 bits, we can return a pointer
+     to the string, otherwise we have to copy the string to a buffer
+     allocated on the temporary obstack.  */
+  gdb_assert (HOST_CHAR_BIT == 8);
+  if (*buf == '\0')
+    {
+      *bytes_read_ptr = 1;
+      return NULL;
+    }
+  *bytes_read_ptr = strlen ((const char *) buf) + 1;
+  return (const char *) buf;
+}
+
+#endif /* GDB_DWARF2_LEB_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/line-header.c ./gdb/dwarf2/line-header.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/line-header.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/line-header.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,446 @@
+/* DWARF 2 debugging format support for GDB.
+
+   Copyright (C) 1994-2021 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 "dwarf2/comp-unit-head.h"
+#include "dwarf2/leb.h"
+#include "dwarf2/line-header.h"
+#include "dwarf2/read.h"
+#include "complaints.h"
+#include "filenames.h"
+
+void
+line_header::add_include_dir (const char *include_dir)
+{
+  if (dwarf_line_debug >= 2)
+    {
+      size_t new_size;
+      if (version >= 5)
+	new_size = m_include_dirs.size ();
+      else
+	new_size = m_include_dirs.size () + 1;
+      fprintf_unfiltered (gdb_stdlog, "Adding dir %zu: %s\n",
+			  new_size, include_dir);
+    }
+  m_include_dirs.push_back (include_dir);
+}
+
+void
+line_header::add_file_name (const char *name,
+			    dir_index d_index,
+			    unsigned int mod_time,
+			    unsigned int length)
+{
+  if (dwarf_line_debug >= 2)
+    {
+      size_t new_size;
+      if (version >= 5)
+	new_size = file_names_size ();
+      else
+	new_size = file_names_size () + 1;
+      fprintf_unfiltered (gdb_stdlog, "Adding file %zu: %s\n",
+			  new_size, name);
+    }
+  m_file_names.emplace_back (name, d_index, mod_time, length);
+}
+
+gdb::unique_xmalloc_ptr<char>
+line_header::file_file_name (int file) const
+{
+  /* Is the file number a valid index into the line header's file name
+     table?  Remember that file numbers start with one, not zero.  */
+  if (is_valid_file_index (file))
+    {
+      const file_entry *fe = file_name_at (file);
+
+      if (!IS_ABSOLUTE_PATH (fe->name))
+	{
+	  const char *dir = fe->include_dir (this);
+	  if (dir != NULL)
+	    return gdb::unique_xmalloc_ptr<char> (concat (dir, SLASH_STRING,
+							  fe->name,
+							  (char *) NULL));
+	}
+      return make_unique_xstrdup (fe->name);
+    }
+  else
+    {
+      /* The compiler produced a bogus file number.  We can at least
+	 record the macro definitions made in the file, even if we
+	 won't be able to find the file by name.  */
+      char fake_name[80];
+
+      xsnprintf (fake_name, sizeof (fake_name),
+		 "<bad macro file number %d>", file);
+
+      complaint (_("bad file number in macro information (%d)"),
+		 file);
+
+      return make_unique_xstrdup (fake_name);
+    }
+}
+
+gdb::unique_xmalloc_ptr<char>
+line_header::file_full_name (int file, const char *comp_dir) const
+{
+  /* Is the file number a valid index into the line header's file name
+     table?  Remember that file numbers start with one, not zero.  */
+  if (is_valid_file_index (file))
+    {
+      gdb::unique_xmalloc_ptr<char> relative = file_file_name (file);
+
+      if (IS_ABSOLUTE_PATH (relative.get ()) || comp_dir == NULL)
+	return relative;
+      return gdb::unique_xmalloc_ptr<char> (concat (comp_dir, SLASH_STRING,
+						    relative.get (),
+						    (char *) NULL));
+    }
+  else
+    return file_file_name (file);
+}
+
+static void
+dwarf2_statement_list_fits_in_line_number_section_complaint (void)
+{
+  complaint (_("statement list doesn't fit in .debug_line section"));
+}
+
+/* Cover function for read_initial_length.
+   Returns the length of the object at BUF, and stores the size of the
+   initial length in *BYTES_READ and stores the size that offsets will be in
+   *OFFSET_SIZE.
+   If the initial length size is not equivalent to that specified in
+   CU_HEADER then issue a complaint.
+   This is useful when reading non-comp-unit headers.  */
+
+static LONGEST
+read_checked_initial_length_and_offset (bfd *abfd, const gdb_byte *buf,
+					const struct comp_unit_head *cu_header,
+					unsigned int *bytes_read,
+					unsigned int *offset_size)
+{
+  LONGEST length = read_initial_length (abfd, buf, bytes_read);
+
+  gdb_assert (cu_header->initial_length_size == 4
+	      || cu_header->initial_length_size == 8
+	      || cu_header->initial_length_size == 12);
+
+  if (cu_header->initial_length_size != *bytes_read)
+    complaint (_("intermixed 32-bit and 64-bit DWARF sections"));
+
+  *offset_size = (*bytes_read == 4) ? 4 : 8;
+  return length;
+}
+
+/* Read directory or file name entry format, starting with byte of
+   format count entries, ULEB128 pairs of entry formats, ULEB128 of
+   entries count and the entries themselves in the described entry
+   format.  */
+
+static void
+read_formatted_entries (dwarf2_per_objfile *per_objfile, bfd *abfd,
+			const gdb_byte **bufp, struct line_header *lh,
+			const struct comp_unit_head *cu_header,
+			void (*callback) (struct line_header *lh,
+					  const char *name,
+					  dir_index d_index,
+					  unsigned int mod_time,
+					  unsigned int length))
+{
+  gdb_byte format_count, formati;
+  ULONGEST data_count, datai;
+  const gdb_byte *buf = *bufp;
+  const gdb_byte *format_header_data;
+  unsigned int bytes_read;
+
+  format_count = read_1_byte (abfd, buf);
+  buf += 1;
+  format_header_data = buf;
+  for (formati = 0; formati < format_count; formati++)
+    {
+      read_unsigned_leb128 (abfd, buf, &bytes_read);
+      buf += bytes_read;
+      read_unsigned_leb128 (abfd, buf, &bytes_read);
+      buf += bytes_read;
+    }
+
+  data_count = read_unsigned_leb128 (abfd, buf, &bytes_read);
+  buf += bytes_read;
+  for (datai = 0; datai < data_count; datai++)
+    {
+      const gdb_byte *format = format_header_data;
+      struct file_entry fe;
+
+      for (formati = 0; formati < format_count; formati++)
+	{
+	  ULONGEST content_type = read_unsigned_leb128 (abfd, format, &bytes_read);
+	  format += bytes_read;
+
+	  ULONGEST form  = read_unsigned_leb128 (abfd, format, &bytes_read);
+	  format += bytes_read;
+
+	  gdb::optional<const char *> string;
+	  gdb::optional<unsigned int> uint;
+
+	  switch (form)
+	    {
+	    case DW_FORM_string:
+	      string.emplace (read_direct_string (abfd, buf, &bytes_read));
+	      buf += bytes_read;
+	      break;
+
+	    case DW_FORM_line_strp:
+	      string.emplace
+		(per_objfile->read_line_string (buf, cu_header, &bytes_read));
+	      buf += bytes_read;
+	      break;
+
+	    case DW_FORM_data1:
+	      uint.emplace (read_1_byte (abfd, buf));
+	      buf += 1;
+	      break;
+
+	    case DW_FORM_data2:
+	      uint.emplace (read_2_bytes (abfd, buf));
+	      buf += 2;
+	      break;
+
+	    case DW_FORM_data4:
+	      uint.emplace (read_4_bytes (abfd, buf));
+	      buf += 4;
+	      break;
+
+	    case DW_FORM_data8:
+	      uint.emplace (read_8_bytes (abfd, buf));
+	      buf += 8;
+	      break;
+
+	    case DW_FORM_data16:
+	      /*  This is used for MD5, but file_entry does not record MD5s. */
+	      buf += 16;
+	      break;
+
+	    case DW_FORM_udata:
+	      uint.emplace (read_unsigned_leb128 (abfd, buf, &bytes_read));
+	      buf += bytes_read;
+	      break;
+
+	    case DW_FORM_block:
+	      /* It is valid only for DW_LNCT_timestamp which is ignored by
+		 current GDB.  */
+	      break;
+	    }
+
+	  switch (content_type)
+	    {
+	    case DW_LNCT_path:
+	      if (string.has_value ())
+		fe.name = *string;
+	      break;
+	    case DW_LNCT_directory_index:
+	      if (uint.has_value ())
+		fe.d_index = (dir_index) *uint;
+	      break;
+	    case DW_LNCT_timestamp:
+	      if (uint.has_value ())
+		fe.mod_time = *uint;
+	      break;
+	    case DW_LNCT_size:
+	      if (uint.has_value ())
+		fe.length = *uint;
+	      break;
+	    case DW_LNCT_MD5:
+	      break;
+	    default:
+	      complaint (_("Unknown format content type %s"),
+			 pulongest (content_type));
+	    }
+	}
+
+      callback (lh, fe.name, fe.d_index, fe.mod_time, fe.length);
+    }
+
+  *bufp = buf;
+}
+
+/* See line-header.h.  */
+
+line_header_up
+dwarf_decode_line_header  (sect_offset sect_off, bool is_dwz,
+			   dwarf2_per_objfile *per_objfile,
+			   struct dwarf2_section_info *section,
+			   const struct comp_unit_head *cu_header)
+{
+  const gdb_byte *line_ptr;
+  unsigned int bytes_read, offset_size;
+  int i;
+  const char *cur_dir, *cur_file;
+
+  bfd *abfd = section->get_bfd_owner ();
+
+  /* Make sure that at least there's room for the total_length field.
+     That could be 12 bytes long, but we're just going to fudge that.  */
+  if (to_underlying (sect_off) + 4 >= section->size)
+    {
+      dwarf2_statement_list_fits_in_line_number_section_complaint ();
+      return 0;
+    }
+
+  line_header_up lh (new line_header ());
+
+  lh->sect_off = sect_off;
+  lh->offset_in_dwz = is_dwz;
+
+  line_ptr = section->buffer + to_underlying (sect_off);
+
+  /* Read in the header.  */
+  lh->total_length =
+    read_checked_initial_length_and_offset (abfd, line_ptr, cu_header,
+					    &bytes_read, &offset_size);
+  line_ptr += bytes_read;
+
+  const gdb_byte *start_here = line_ptr;
+
+  if (line_ptr + lh->total_length > (section->buffer + section->size))
+    {
+      dwarf2_statement_list_fits_in_line_number_section_complaint ();
+      return 0;
+    }
+  lh->statement_program_end = start_here + lh->total_length;
+  lh->version = read_2_bytes (abfd, line_ptr);
+  line_ptr += 2;
+  if (lh->version > 5)
+    {
+      /* This is a version we don't understand.  The format could have
+	 changed in ways we don't handle properly so just punt.  */
+      complaint (_("unsupported version in .debug_line section"));
+      return NULL;
+    }
+  if (lh->version >= 5)
+    {
+      gdb_byte segment_selector_size;
+
+      /* Skip address size.  */
+      read_1_byte (abfd, line_ptr);
+      line_ptr += 1;
+
+      segment_selector_size = read_1_byte (abfd, line_ptr);
+      line_ptr += 1;
+      if (segment_selector_size != 0)
+	{
+	  complaint (_("unsupported segment selector size %u "
+		       "in .debug_line section"),
+		     segment_selector_size);
+	  return NULL;
+	}
+    }
+  lh->header_length = read_offset (abfd, line_ptr, offset_size);
+  line_ptr += offset_size;
+  lh->statement_program_start = line_ptr + lh->header_length;
+  lh->minimum_instruction_length = read_1_byte (abfd, line_ptr);
+  line_ptr += 1;
+  if (lh->version >= 4)
+    {
+      lh->maximum_ops_per_instruction = read_1_byte (abfd, line_ptr);
+      line_ptr += 1;
+    }
+  else
+    lh->maximum_ops_per_instruction = 1;
+
+  if (lh->maximum_ops_per_instruction == 0)
+    {
+      lh->maximum_ops_per_instruction = 1;
+      complaint (_("invalid maximum_ops_per_instruction "
+		   "in `.debug_line' section"));
+    }
+
+  lh->default_is_stmt = read_1_byte (abfd, line_ptr);
+  line_ptr += 1;
+  lh->line_base = read_1_signed_byte (abfd, line_ptr);
+  line_ptr += 1;
+  lh->line_range = read_1_byte (abfd, line_ptr);
+  line_ptr += 1;
+  lh->opcode_base = read_1_byte (abfd, line_ptr);
+  line_ptr += 1;
+  lh->standard_opcode_lengths.reset (new unsigned char[lh->opcode_base]);
+
+  lh->standard_opcode_lengths[0] = 1;  /* This should never be used anyway.  */
+  for (i = 1; i < lh->opcode_base; ++i)
+    {
+      lh->standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
+      line_ptr += 1;
+    }
+
+  if (lh->version >= 5)
+    {
+      /* Read directory table.  */
+      read_formatted_entries (per_objfile, abfd, &line_ptr, lh.get (),
+			      cu_header,
+			      [] (struct line_header *header, const char *name,
+				  dir_index d_index, unsigned int mod_time,
+				  unsigned int length)
+	{
+	  header->add_include_dir (name);
+	});
+
+      /* Read file name table.  */
+      read_formatted_entries (per_objfile, abfd, &line_ptr, lh.get (),
+			      cu_header,
+			      [] (struct line_header *header, const char *name,
+				  dir_index d_index, unsigned int mod_time,
+				  unsigned int length)
+	{
+	  header->add_file_name (name, d_index, mod_time, length);
+	});
+    }
+  else
+    {
+      /* Read directory table.  */
+      while ((cur_dir = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL)
+	{
+	  line_ptr += bytes_read;
+	  lh->add_include_dir (cur_dir);
+	}
+      line_ptr += bytes_read;
+
+      /* Read file name table.  */
+      while ((cur_file = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL)
+	{
+	  unsigned int mod_time, length;
+	  dir_index d_index;
+
+	  line_ptr += bytes_read;
+	  d_index = (dir_index) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+	  line_ptr += bytes_read;
+	  mod_time = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+	  line_ptr += bytes_read;
+	  length = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+	  line_ptr += bytes_read;
+
+	  lh->add_file_name (cur_file, d_index, mod_time, length);
+	}
+      line_ptr += bytes_read;
+    }
+
+  if (line_ptr > (section->buffer + section->size))
+    complaint (_("line number info header doesn't "
+		 "fit in `.debug_line' section"));
+
+  return lh;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/line-header.h ./gdb/dwarf2/line-header.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/line-header.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/line-header.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,210 @@
+/* DWARF 2 debugging format support for GDB.
+
+   Copyright (C) 1994-2021 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 DWARF2_LINE_HEADER_H
+#define DWARF2_LINE_HEADER_H
+
+#include "gdbtypes.h"
+
+/* dir_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5 and
+   later.  */
+typedef int dir_index;
+
+/* file_name_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5
+   and later.  */
+typedef int file_name_index;
+
+struct line_header;
+
+struct file_entry
+{
+  file_entry () = default;
+
+  file_entry (const char *name_, dir_index d_index_,
+	      unsigned int mod_time_, unsigned int length_)
+    : name (name_),
+      d_index (d_index_),
+      mod_time (mod_time_),
+      length (length_)
+  {}
+
+  /* Return the include directory at D_INDEX stored in LH.  Returns
+     NULL if D_INDEX is out of bounds.  */
+  const char *include_dir (const line_header *lh) const;
+
+  /* The file name.  Note this is an observing pointer.  The memory is
+     owned by debug_line_buffer.  */
+  const char *name {};
+
+  /* The directory index (1-based).  */
+  dir_index d_index {};
+
+  unsigned int mod_time {};
+
+  unsigned int length {};
+
+  /* True if referenced by the Line Number Program.  */
+  bool included_p {};
+
+  /* The associated symbol table, if any.  */
+  struct symtab *symtab {};
+};
+
+/* The line number information for a compilation unit (found in the
+   .debug_line section) begins with a "statement program header",
+   which contains the following information.  */
+struct line_header
+{
+  line_header ()
+    : offset_in_dwz {}
+  {}
+
+  /* Add an entry to the include directory table.  */
+  void add_include_dir (const char *include_dir);
+
+  /* Add an entry to the file name table.  */
+  void add_file_name (const char *name, dir_index d_index,
+		      unsigned int mod_time, unsigned int length);
+
+  /* Return the include dir at INDEX (0-based in DWARF 5 and 1-based before).
+     Returns NULL if INDEX is out of bounds.  */
+  const char *include_dir_at (dir_index index) const
+  {
+    int vec_index;
+    if (version >= 5)
+      vec_index = index;
+    else
+      vec_index = index - 1;
+    if (vec_index < 0 || vec_index >= m_include_dirs.size ())
+      return NULL;
+    return m_include_dirs[vec_index];
+  }
+
+  bool is_valid_file_index (int file_index) const
+  {
+    if (version >= 5)
+      return 0 <= file_index && file_index < file_names_size ();
+    return 1 <= file_index && file_index <= file_names_size ();
+  }
+
+  /* Return the file name at INDEX (0-based in DWARF 5 and 1-based before).
+     Returns NULL if INDEX is out of bounds.  */
+  file_entry *file_name_at (file_name_index index)
+  {
+    int vec_index;
+    if (version >= 5)
+      vec_index = index;
+    else
+      vec_index = index - 1;
+    if (vec_index < 0 || vec_index >= m_file_names.size ())
+      return NULL;
+    return &m_file_names[vec_index];
+  }
+
+  /* A const overload of the same.  */
+  const file_entry *file_name_at (file_name_index index) const
+  {
+    line_header *lh = const_cast<line_header *> (this);
+    return lh->file_name_at (index);
+  }
+
+  /* The indexes are 0-based in DWARF 5 and 1-based in DWARF 4. Therefore,
+     this method should only be used to iterate through all file entries in an
+     index-agnostic manner.  */
+  std::vector<file_entry> &file_names ()
+  { return m_file_names; }
+  /* A const overload of the same.  */
+  const std::vector<file_entry> &file_names () const
+  { return m_file_names; }
+
+  /* Offset of line number information in .debug_line section.  */
+  sect_offset sect_off {};
+
+  /* OFFSET is for struct dwz_file associated with dwarf2_per_objfile.  */
+  unsigned offset_in_dwz : 1; /* Can't initialize bitfields in-class.  */
+
+  unsigned int total_length {};
+  unsigned short version {};
+  unsigned int header_length {};
+  unsigned char minimum_instruction_length {};
+  unsigned char maximum_ops_per_instruction {};
+  unsigned char default_is_stmt {};
+  int line_base {};
+  unsigned char line_range {};
+  unsigned char opcode_base {};
+
+  /* standard_opcode_lengths[i] is the number of operands for the
+     standard opcode whose value is i.  This means that
+     standard_opcode_lengths[0] is unused, and the last meaningful
+     element is standard_opcode_lengths[opcode_base - 1].  */
+  std::unique_ptr<unsigned char[]> standard_opcode_lengths;
+
+  int file_names_size () const
+  { return m_file_names.size(); }
+
+  /* The start and end of the statement program following this
+     header.  These point into dwarf2_per_objfile->line_buffer.  */
+  const gdb_byte *statement_program_start {}, *statement_program_end {};
+
+  /* Return the full name of file number I in this object's file name
+     table.  Use COMP_DIR as the name of the current directory of the
+     compilation.  The result is allocated using xmalloc; the caller
+     is responsible for freeing it.  */
+  gdb::unique_xmalloc_ptr<char> file_full_name (int file,
+						const char *comp_dir) const;
+
+  /* Return file name relative to the compilation directory of file
+     number I in this object's file name table.  The result is
+     allocated using xmalloc; the caller is responsible for freeing
+     it.  */
+  gdb::unique_xmalloc_ptr<char> file_file_name (int file) const;
+
+ private:
+  /* The include_directories table.  Note these are observing
+     pointers.  The memory is owned by debug_line_buffer.  */
+  std::vector<const char *> m_include_dirs;
+
+  /* The file_names table. This is private because the meaning of indexes
+     differs among DWARF versions (The first valid index is 1 in DWARF 4 and
+     before, and is 0 in DWARF 5 and later).  So the client should use
+     file_name_at method for access.  */
+  std::vector<file_entry> m_file_names;
+};
+
+typedef std::unique_ptr<line_header> line_header_up;
+
+inline const char *
+file_entry::include_dir (const line_header *lh) const
+{
+  return lh->include_dir_at (d_index);
+}
+
+/* Read the statement program header starting at SECT_OFF in SECTION.
+   Return line_header.  Returns nullptr if there is a problem reading
+   the header, e.g., if it has a version we don't understand.
+
+   NOTE: the strings in the include directory and file name tables of
+   the returned object point into the dwarf line section buffer,
+   and must not be freed.  */
+
+extern line_header_up dwarf_decode_line_header
+  (sect_offset sect_off, bool is_dwz, dwarf2_per_objfile *per_objfile,
+   struct dwarf2_section_info *section, const struct comp_unit_head *cu_header);
+
+#endif /* DWARF2_LINE_HEADER_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/loc.c ./gdb/dwarf2/loc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/loc.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/loc.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,4826 @@
+/* DWARF 2 location expression support for GDB.
+
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
+
+   Contributed by Daniel Jacobowitz, MontaVista Software, 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 "ui-out.h"
+#include "value.h"
+#include "frame.h"
+#include "gdbcore.h"
+#include "target.h"
+#include "inferior.h"
+#include "ax.h"
+#include "ax-gdb.h"
+#include "regcache.h"
+#include "objfiles.h"
+#include "block.h"
+#include "gdbcmd.h"
+#include "complaints.h"
+#include "dwarf2.h"
+#include "dwarf2/expr.h"
+#include "dwarf2/loc.h"
+#include "dwarf2/read.h"
+#include "dwarf2/frame.h"
+#include "dwarf2/leb.h"
+#include "compile/compile.h"
+#include "gdbsupport/selftest.h"
+#include <algorithm>
+#include <vector>
+#include <unordered_set>
+#include "gdbsupport/underlying.h"
+#include "gdbsupport/byte-vector.h"
+
+static struct value *dwarf2_evaluate_loc_desc_full
+  (struct type *type, struct frame_info *frame, const gdb_byte *data,
+   size_t size, dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile,
+   struct type *subobj_type, LONGEST subobj_byte_offset);
+
+static struct call_site_parameter *dwarf_expr_reg_to_entry_parameter
+    (struct frame_info *frame,
+     enum call_site_parameter_kind kind,
+     union call_site_parameter_u kind_u,
+     dwarf2_per_cu_data **per_cu_return,
+     dwarf2_per_objfile **per_objfile_return);
+
+static struct value *indirect_synthetic_pointer
+  (sect_offset die, LONGEST byte_offset,
+   dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile,
+   struct frame_info *frame,
+   struct type *type, bool resolve_abstract_p = false);
+
+/* Until these have formal names, we define these here.
+   ref: http://gcc.gnu.org/wiki/DebugFission
+   Each entry in .debug_loc.dwo begins with a byte that describes the entry,
+   and is then followed by data specific to that entry.  */
+
+enum debug_loc_kind
+{
+  /* Indicates the end of the list of entries.  */
+  DEBUG_LOC_END_OF_LIST = 0,
+
+  /* This is followed by an unsigned LEB128 number that is an index into
+     .debug_addr and specifies the base address for all following entries.  */
+  DEBUG_LOC_BASE_ADDRESS = 1,
+
+  /* This is followed by two unsigned LEB128 numbers that are indices into
+     .debug_addr and specify the beginning and ending addresses, and then
+     a normal location expression as in .debug_loc.  */
+  DEBUG_LOC_START_END = 2,
+
+  /* This is followed by an unsigned LEB128 number that is an index into
+     .debug_addr and specifies the beginning address, and a 4 byte unsigned
+     number that specifies the length, and then a normal location expression
+     as in .debug_loc.  */
+  DEBUG_LOC_START_LENGTH = 3,
+
+  /* This is followed by two unsigned LEB128 operands. The values of these
+     operands are the starting and ending offsets, respectively, relative to
+     the applicable base address.  */
+  DEBUG_LOC_OFFSET_PAIR = 4,
+
+  /* An internal value indicating there is insufficient data.  */
+  DEBUG_LOC_BUFFER_OVERFLOW = -1,
+
+  /* An internal value indicating an invalid kind of entry was found.  */
+  DEBUG_LOC_INVALID_ENTRY = -2
+};
+
+/* Helper function which throws an error if a synthetic pointer is
+   invalid.  */
+
+static void
+invalid_synthetic_pointer (void)
+{
+  error (_("access outside bounds of object "
+	   "referenced via synthetic pointer"));
+}
+
+/* Decode the addresses in a non-dwo .debug_loc entry.
+   A pointer to the next byte to examine is returned in *NEW_PTR.
+   The encoded low,high addresses are return in *LOW,*HIGH.
+   The result indicates the kind of entry found.  */
+
+static enum debug_loc_kind
+decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end,
+			    const gdb_byte **new_ptr,
+			    CORE_ADDR *low, CORE_ADDR *high,
+			    enum bfd_endian byte_order,
+			    unsigned int addr_size,
+			    int signed_addr_p)
+{
+  CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
+
+  if (buf_end - loc_ptr < 2 * addr_size)
+    return DEBUG_LOC_BUFFER_OVERFLOW;
+
+  if (signed_addr_p)
+    *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
+  else
+    *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+  loc_ptr += addr_size;
+
+  if (signed_addr_p)
+    *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
+  else
+    *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+  loc_ptr += addr_size;
+
+  *new_ptr = loc_ptr;
+
+  /* A base-address-selection entry.  */
+  if ((*low & base_mask) == base_mask)
+    return DEBUG_LOC_BASE_ADDRESS;
+
+  /* An end-of-list entry.  */
+  if (*low == 0 && *high == 0)
+    return DEBUG_LOC_END_OF_LIST;
+
+  return DEBUG_LOC_START_END;
+}
+
+/* Decode the addresses in .debug_loclists entry.
+   A pointer to the next byte to examine is returned in *NEW_PTR.
+   The encoded low,high addresses are return in *LOW,*HIGH.
+   The result indicates the kind of entry found.  */
+
+static enum debug_loc_kind
+decode_debug_loclists_addresses (dwarf2_per_cu_data *per_cu,
+				 dwarf2_per_objfile *per_objfile,
+				 const gdb_byte *loc_ptr,
+				 const gdb_byte *buf_end,
+				 const gdb_byte **new_ptr,
+				 CORE_ADDR *low, CORE_ADDR *high,
+				 enum bfd_endian byte_order,
+				 unsigned int addr_size,
+				 int signed_addr_p)
+{
+  uint64_t u64;
+
+  if (loc_ptr == buf_end)
+    return DEBUG_LOC_BUFFER_OVERFLOW;
+
+  switch (*loc_ptr++)
+    {
+    case DW_LLE_base_addressx:
+      *low = 0;
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
+      if (loc_ptr == NULL)
+	 return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high = dwarf2_read_addr_index (per_cu, per_objfile, u64);
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_BASE_ADDRESS;
+
+    case DW_LLE_startx_length:
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
+      if (loc_ptr == NULL)
+	 return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *low = dwarf2_read_addr_index (per_cu, per_objfile, u64);
+      *high = *low;
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
+      if (loc_ptr == NULL)
+	 return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high += u64;
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_START_LENGTH;
+
+    case DW_LLE_start_length:
+      if (buf_end - loc_ptr < addr_size)
+	 return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      if (signed_addr_p)
+	 *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
+      else
+	 *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+
+      loc_ptr += addr_size;
+      *high = *low;
+
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
+      if (loc_ptr == NULL)
+	 return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high += u64;
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_START_LENGTH;
+
+    case DW_LLE_end_of_list:
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_END_OF_LIST;
+
+    case DW_LLE_base_address:
+      if (loc_ptr + addr_size > buf_end)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      if (signed_addr_p)
+	*high = extract_signed_integer (loc_ptr, addr_size, byte_order);
+      else
+	*high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+
+      loc_ptr += addr_size;
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_BASE_ADDRESS;
+
+    case DW_LLE_offset_pair:
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *low = u64;
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high = u64;
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_OFFSET_PAIR;
+
+    case DW_LLE_start_end:
+      if (loc_ptr + 2 * addr_size > buf_end)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      if (signed_addr_p)
+	*low = extract_signed_integer (loc_ptr, addr_size, byte_order);
+      else
+	*low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+
+      loc_ptr += addr_size;
+      if (signed_addr_p)
+	*high = extract_signed_integer (loc_ptr, addr_size, byte_order);
+      else
+	*high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+
+      loc_ptr += addr_size;
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_START_END;
+
+    /* Following cases are not supported yet.  */
+    case DW_LLE_startx_endx:
+    case DW_LLE_default_location:
+    default:
+      return DEBUG_LOC_INVALID_ENTRY;
+    }
+}
+
+/* Decode the addresses in .debug_loc.dwo entry.
+   A pointer to the next byte to examine is returned in *NEW_PTR.
+   The encoded low,high addresses are return in *LOW,*HIGH.
+   The result indicates the kind of entry found.  */
+
+static enum debug_loc_kind
+decode_debug_loc_dwo_addresses (dwarf2_per_cu_data *per_cu,
+				dwarf2_per_objfile *per_objfile,
+				const gdb_byte *loc_ptr,
+				const gdb_byte *buf_end,
+				const gdb_byte **new_ptr,
+				CORE_ADDR *low, CORE_ADDR *high,
+				enum bfd_endian byte_order)
+{
+  uint64_t low_index, high_index;
+
+  if (loc_ptr == buf_end)
+    return DEBUG_LOC_BUFFER_OVERFLOW;
+
+  switch (*loc_ptr++)
+    {
+    case DW_LLE_GNU_end_of_list_entry:
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_END_OF_LIST;
+
+    case DW_LLE_GNU_base_address_selection_entry:
+      *low = 0;
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index);
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_BASE_ADDRESS;
+
+    case DW_LLE_GNU_start_end_entry:
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index);
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index);
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_START_END;
+
+    case DW_LLE_GNU_start_length_entry:
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index);
+      if (loc_ptr + 4 > buf_end)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+
+      *high = *low;
+      *high += extract_unsigned_integer (loc_ptr, 4, byte_order);
+      *new_ptr = loc_ptr + 4;
+      return DEBUG_LOC_START_LENGTH;
+
+    default:
+      return DEBUG_LOC_INVALID_ENTRY;
+    }
+}
+
+/* A function for dealing with location lists.  Given a
+   symbol baton (BATON) and a pc value (PC), find the appropriate
+   location expression, set *LOCEXPR_LENGTH, and return a pointer
+   to the beginning of the expression.  Returns NULL on failure.
+
+   For now, only return the first matching location expression; there
+   can be more than one in the list.  */
+
+const gdb_byte *
+dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
+				 size_t *locexpr_length, CORE_ADDR pc)
+{
+  dwarf2_per_objfile *per_objfile = baton->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  unsigned int addr_size = baton->per_cu->addr_size ();
+  int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
+  /* Adjust base_address for relocatable objects.  */
+  CORE_ADDR base_offset = baton->per_objfile->objfile->text_section_offset ();
+  CORE_ADDR base_address = baton->base_address + base_offset;
+  const gdb_byte *loc_ptr, *buf_end;
+
+  loc_ptr = baton->data;
+  buf_end = baton->data + baton->size;
+
+  while (1)
+    {
+      CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
+      int length;
+      enum debug_loc_kind kind;
+      const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
+
+      if (baton->per_cu->version () < 5 && baton->from_dwo)
+	kind = decode_debug_loc_dwo_addresses (baton->per_cu,
+					       baton->per_objfile,
+					       loc_ptr, buf_end, &new_ptr,
+					       &low, &high, byte_order);
+      else if (baton->per_cu->version () < 5)
+	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
+					   &low, &high,
+					   byte_order, addr_size,
+					   signed_addr_p);
+      else
+	kind = decode_debug_loclists_addresses (baton->per_cu,
+						baton->per_objfile,
+						loc_ptr, buf_end, &new_ptr,
+						&low, &high, byte_order,
+						addr_size, signed_addr_p);
+
+      loc_ptr = new_ptr;
+      switch (kind)
+	{
+	case DEBUG_LOC_END_OF_LIST:
+	  *locexpr_length = 0;
+	  return NULL;
+
+	case DEBUG_LOC_BASE_ADDRESS:
+	  base_address = high + base_offset;
+	  continue;
+
+	case DEBUG_LOC_START_END:
+	case DEBUG_LOC_START_LENGTH:
+	case DEBUG_LOC_OFFSET_PAIR:
+	  break;
+
+	case DEBUG_LOC_BUFFER_OVERFLOW:
+	case DEBUG_LOC_INVALID_ENTRY:
+	  error (_("dwarf2_find_location_expression: "
+		   "Corrupted DWARF expression."));
+
+	default:
+	  gdb_assert_not_reached ("bad debug_loc_kind");
+	}
+
+      /* Otherwise, a location expression entry.
+	 If the entry is from a DWO, don't add base address: the entry is from
+	 .debug_addr which already has the DWARF "base address". We still add
+	 base_offset in case we're debugging a PIE executable. However, if the
+	 entry is DW_LLE_offset_pair from a DWO, add the base address as the
+	 operands are offsets relative to the applicable base address.  */
+      if (baton->from_dwo && kind != DEBUG_LOC_OFFSET_PAIR)
+	{
+	  low += base_offset;
+	  high += base_offset;
+	}
+      else
+	{
+	  low += base_address;
+	  high += base_address;
+	}
+
+      if (baton->per_cu->version () < 5)
+	{
+	  length = extract_unsigned_integer (loc_ptr, 2, byte_order);
+	  loc_ptr += 2;
+	}
+      else
+	{
+	  unsigned int bytes_read;
+
+	  length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
+	  loc_ptr += bytes_read;
+	}
+
+      if (low == high && pc == low)
+	{
+	  /* This is entry PC record present only at entry point
+	     of a function.  Verify it is really the function entry point.  */
+
+	  const struct block *pc_block = block_for_pc (pc);
+	  struct symbol *pc_func = NULL;
+
+	  if (pc_block)
+	    pc_func = block_linkage_function (pc_block);
+
+	  if (pc_func && pc == BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (pc_func)))
+	    {
+	      *locexpr_length = length;
+	      return loc_ptr;
+	    }
+	}
+
+      if (pc >= low && pc < high)
+	{
+	  *locexpr_length = length;
+	  return loc_ptr;
+	}
+
+      loc_ptr += length;
+    }
+}
+
+/* Implement find_frame_base_location method for LOC_BLOCK functions using
+   DWARF expression for its DW_AT_frame_base.  */
+
+static void
+locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
+				  const gdb_byte **start, size_t *length)
+{
+  struct dwarf2_locexpr_baton *symbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
+
+  *length = symbaton->size;
+  *start = symbaton->data;
+}
+
+/* Implement the struct symbol_block_ops::get_frame_base method for
+   LOC_BLOCK functions using a DWARF expression as its DW_AT_frame_base.  */
+
+static CORE_ADDR
+locexpr_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
+{
+  struct gdbarch *gdbarch;
+  struct type *type;
+  struct dwarf2_locexpr_baton *dlbaton;
+  const gdb_byte *start;
+  size_t length;
+  struct value *result;
+
+  /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
+     Thus, it's supposed to provide the find_frame_base_location method as
+     well.  */
+  gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
+
+  gdbarch = get_frame_arch (frame);
+  type = builtin_type (gdbarch)->builtin_data_ptr;
+  dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
+
+  SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
+    (framefunc, get_frame_pc (frame), &start, &length);
+  result = dwarf2_evaluate_loc_desc (type, frame, start, length,
+				     dlbaton->per_cu, dlbaton->per_objfile);
+
+  /* The DW_AT_frame_base attribute contains a location description which
+     computes the base address itself.  However, the call to
+     dwarf2_evaluate_loc_desc returns a value representing a variable at
+     that address.  The frame base address is thus this variable's
+     address.  */
+  return value_address (result);
+}
+
+/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
+   function uses DWARF expression for its DW_AT_frame_base.  */
+
+const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs =
+{
+  locexpr_find_frame_base_location,
+  locexpr_get_frame_base
+};
+
+/* Implement find_frame_base_location method for LOC_BLOCK functions using
+   DWARF location list for its DW_AT_frame_base.  */
+
+static void
+loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
+				  const gdb_byte **start, size_t *length)
+{
+  struct dwarf2_loclist_baton *symbaton
+    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
+
+  *start = dwarf2_find_location_expression (symbaton, length, pc);
+}
+
+/* Implement the struct symbol_block_ops::get_frame_base method for
+   LOC_BLOCK functions using a DWARF location list as its DW_AT_frame_base.  */
+
+static CORE_ADDR
+loclist_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
+{
+  struct gdbarch *gdbarch;
+  struct type *type;
+  struct dwarf2_loclist_baton *dlbaton;
+  const gdb_byte *start;
+  size_t length;
+  struct value *result;
+
+  /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
+     Thus, it's supposed to provide the find_frame_base_location method as
+     well.  */
+  gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
+
+  gdbarch = get_frame_arch (frame);
+  type = builtin_type (gdbarch)->builtin_data_ptr;
+  dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
+
+  SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
+    (framefunc, get_frame_pc (frame), &start, &length);
+  result = dwarf2_evaluate_loc_desc (type, frame, start, length,
+				     dlbaton->per_cu, dlbaton->per_objfile);
+
+  /* The DW_AT_frame_base attribute contains a location description which
+     computes the base address itself.  However, the call to
+     dwarf2_evaluate_loc_desc returns a value representing a variable at
+     that address.  The frame base address is thus this variable's
+     address.  */
+  return value_address (result);
+}
+
+/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
+   function uses DWARF location list for its DW_AT_frame_base.  */
+
+const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
+{
+  loclist_find_frame_base_location,
+  loclist_get_frame_base
+};
+
+/* See dwarf2loc.h.  */
+
+void
+func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc,
+				 const gdb_byte **start, size_t *length)
+{
+  if (SYMBOL_BLOCK_OPS (framefunc) != NULL)
+    {
+      const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc);
+
+      ops_block->find_frame_base_location (framefunc, pc, start, length);
+    }
+  else
+    *length = 0;
+
+  if (*length == 0)
+    error (_("Could not find the frame base for \"%s\"."),
+	   framefunc->natural_name ());
+}
+
+static void
+per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset,
+		   dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile)
+{
+  struct dwarf2_locexpr_baton block;
+
+  auto get_frame_pc_from_ctx = [ctx] ()
+    {
+      return ctx->get_frame_pc ();
+    };
+
+  block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu, per_objfile,
+				       get_frame_pc_from_ctx);
+
+  /* DW_OP_call_ref is currently not supported.  */
+  gdb_assert (block.per_cu == per_cu);
+
+  ctx->eval (block.data, block.size);
+}
+
+/* A helper function to find the definition of NAME and compute its
+   value.  Returns nullptr if the name is not found.  */
+
+static value *
+compute_var_value (const char *name)
+{
+  struct block_symbol sym = lookup_symbol (name, nullptr, VAR_DOMAIN,
+					   nullptr);
+  if (sym.symbol != nullptr)
+    return value_of_variable (sym.symbol, sym.block);
+  return nullptr;
+}
+
+/* Given context CTX, section offset SECT_OFF, and compilation unit
+   data PER_CU, execute the "variable value" operation on the DIE
+   found at SECT_OFF.  */
+
+static struct value *
+sect_variable_value (struct dwarf_expr_context *ctx, sect_offset sect_off,
+		     dwarf2_per_cu_data *per_cu,
+		     dwarf2_per_objfile *per_objfile)
+{
+  const char *var_name = nullptr;
+  struct type *die_type
+    = dwarf2_fetch_die_type_sect_off (sect_off, per_cu, per_objfile,
+				      &var_name);
+
+  if (die_type == NULL)
+    error (_("Bad DW_OP_GNU_variable_value DIE."));
+
+  /* Note: Things still work when the following test is removed.  This
+     test and error is here to conform to the proposed specification.  */
+  if (die_type->code () != TYPE_CODE_INT
+      && die_type->code () != TYPE_CODE_ENUM
+      && die_type->code () != TYPE_CODE_RANGE
+      && die_type->code () != TYPE_CODE_PTR)
+    error (_("Type of DW_OP_GNU_variable_value DIE must be an integer or pointer."));
+
+  if (var_name != nullptr)
+    {
+      value *result = compute_var_value (var_name);
+      if (result != nullptr)
+	return result;
+    }
+
+  struct type *type = lookup_pointer_type (die_type);
+  struct frame_info *frame = get_selected_frame (_("No frame selected."));
+  return indirect_synthetic_pointer (sect_off, 0, per_cu, per_objfile, frame,
+				     type, true);
+}
+
+class dwarf_evaluate_loc_desc : public dwarf_expr_context
+{
+public:
+  dwarf_evaluate_loc_desc (dwarf2_per_objfile *per_objfile)
+    : dwarf_expr_context (per_objfile)
+  {}
+
+  struct frame_info *frame;
+  struct dwarf2_per_cu_data *per_cu;
+  CORE_ADDR obj_address;
+
+  /* Helper function for dwarf2_evaluate_loc_desc.  Computes the CFA for
+     the frame in BATON.  */
+
+  CORE_ADDR get_frame_cfa () override
+  {
+    return dwarf2_frame_cfa (frame);
+  }
+
+  /* Helper function for dwarf2_evaluate_loc_desc.  Computes the PC for
+     the frame in BATON.  */
+
+  CORE_ADDR get_frame_pc () override
+  {
+    return get_frame_address_in_block (frame);
+  }
+
+  /* Using the objfile specified in BATON, find the address for the
+     current thread's thread-local storage with offset OFFSET.  */
+  CORE_ADDR get_tls_address (CORE_ADDR offset) override
+  {
+    return target_translate_tls_address (per_objfile->objfile, offset);
+  }
+
+  /* Helper interface of per_cu_dwarf_call for
+     dwarf2_evaluate_loc_desc.  */
+
+  void dwarf_call (cu_offset die_offset) override
+  {
+    per_cu_dwarf_call (this, die_offset, per_cu, per_objfile);
+  }
+
+  /* Helper interface of sect_variable_value for
+     dwarf2_evaluate_loc_desc.  */
+
+  struct value *dwarf_variable_value (sect_offset sect_off) override
+  {
+    return sect_variable_value (this, sect_off, per_cu, per_objfile);
+  }
+
+  struct type *get_base_type (cu_offset die_offset, int size) override
+  {
+    struct type *result = dwarf2_get_die_type (die_offset, per_cu, per_objfile);
+    if (result == NULL)
+      error (_("Could not find type for DW_OP_const_type"));
+    if (size != 0 && TYPE_LENGTH (result) != size)
+      error (_("DW_OP_const_type has different sizes for type and data"));
+    return result;
+  }
+
+  /* Callback function for dwarf2_evaluate_loc_desc.
+     Fetch the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index.  */
+
+  CORE_ADDR get_addr_index (unsigned int index) override
+  {
+    return dwarf2_read_addr_index (per_cu, per_objfile, index);
+  }
+
+  /* Callback function for get_object_address. Return the address of the VLA
+     object.  */
+
+  CORE_ADDR get_object_address () override
+  {
+    if (obj_address == 0)
+      error (_("Location address is not set."));
+    return obj_address;
+  }
+
+  /* Execute DWARF block of call_site_parameter which matches KIND and
+     KIND_U.  Choose DEREF_SIZE value of that parameter.  Search
+     caller of this objects's frame.
+
+     The caller can be from a different CU - per_cu_dwarf_call
+     implementation can be more simple as it does not support cross-CU
+     DWARF executions.  */
+
+  void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
+				   union call_site_parameter_u kind_u,
+				   int deref_size) override
+  {
+    struct frame_info *caller_frame;
+    dwarf2_per_cu_data *caller_per_cu;
+    dwarf2_per_objfile *caller_per_objfile;
+    struct call_site_parameter *parameter;
+    const gdb_byte *data_src;
+    size_t size;
+
+    caller_frame = get_prev_frame (frame);
+
+    parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
+						   &caller_per_cu,
+						   &caller_per_objfile);
+    data_src = deref_size == -1 ? parameter->value : parameter->data_value;
+    size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
+
+    /* DEREF_SIZE size is not verified here.  */
+    if (data_src == NULL)
+      throw_error (NO_ENTRY_VALUE_ERROR,
+		   _("Cannot resolve DW_AT_call_data_value"));
+
+    /* We are about to evaluate an expression in the context of the caller
+       of the current frame.  This evaluation context may be different from
+       the current (callee's) context), so temporarily set the caller's context.
+
+       It is possible for the caller to be from a different objfile from the
+       callee if the call is made through a function pointer.  */
+    scoped_restore save_frame = make_scoped_restore (&this->frame,
+						     caller_frame);
+    scoped_restore save_per_cu = make_scoped_restore (&this->per_cu,
+						      caller_per_cu);
+    scoped_restore save_obj_addr = make_scoped_restore (&this->obj_address,
+							(CORE_ADDR) 0);
+    scoped_restore save_per_objfile = make_scoped_restore (&this->per_objfile,
+							   caller_per_objfile);
+
+    scoped_restore save_arch = make_scoped_restore (&this->gdbarch);
+    this->gdbarch = this->per_objfile->objfile->arch ();
+    scoped_restore save_addr_size = make_scoped_restore (&this->addr_size);
+    this->addr_size = this->per_cu->addr_size ();
+
+    this->eval (data_src, size);
+  }
+
+  /* Using the frame specified in BATON, find the location expression
+     describing the frame base.  Return a pointer to it in START and
+     its length in LENGTH.  */
+  void get_frame_base (const gdb_byte **start, size_t * length) override
+  {
+    if (frame == nullptr)
+      error (_("frame address is not available."));
+
+    /* FIXME: cagney/2003-03-26: This code should be using
+       get_frame_base_address(), and then implement a dwarf2 specific
+       this_base method.  */
+    struct symbol *framefunc;
+    const struct block *bl = get_frame_block (frame, NULL);
+
+    if (bl == NULL)
+      error (_("frame address is not available."));
+
+    /* Use block_linkage_function, which returns a real (not inlined)
+       function, instead of get_frame_function, which may return an
+       inlined function.  */
+    framefunc = block_linkage_function (bl);
+
+    /* If we found a frame-relative symbol then it was certainly within
+       some function associated with a frame. If we can't find the frame,
+       something has gone wrong.  */
+    gdb_assert (framefunc != NULL);
+
+    func_get_frame_base_dwarf_block (framefunc,
+				     get_frame_address_in_block (frame),
+				     start, length);
+  }
+
+  /* Read memory at ADDR (length LEN) into BUF.  */
+
+  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
+  {
+    read_memory (addr, buf, len);
+  }
+
+  /* Using the frame specified in BATON, return the value of register
+     REGNUM, treated as a pointer.  */
+  CORE_ADDR read_addr_from_reg (int dwarf_regnum) override
+  {
+    struct gdbarch *gdbarch = get_frame_arch (frame);
+    int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum);
+
+    return address_from_register (regnum, frame);
+  }
+
+  /* Implement "get_reg_value" callback.  */
+
+  struct value *get_reg_value (struct type *type, int dwarf_regnum) override
+  {
+    struct gdbarch *gdbarch = get_frame_arch (frame);
+    int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum);
+
+    return value_from_register (type, regnum, frame);
+  }
+};
+
+/* See dwarf2loc.h.  */
+
+unsigned int entry_values_debug = 0;
+
+/* Helper to set entry_values_debug.  */
+
+static void
+show_entry_values_debug (struct ui_file *file, int from_tty,
+			 struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("Entry values and tail call frames debugging is %s.\n"),
+		    value);
+}
+
+/* Find DW_TAG_call_site's DW_AT_call_target address.
+   CALLER_FRAME (for registers) can be NULL if it is not known.  This function
+   always returns valid address or it throws NO_ENTRY_VALUE_ERROR.  */
+
+static CORE_ADDR
+call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
+			  struct call_site *call_site,
+			  struct frame_info *caller_frame)
+{
+  switch (FIELD_LOC_KIND (call_site->target))
+    {
+    case FIELD_LOC_KIND_DWARF_BLOCK:
+      {
+	struct dwarf2_locexpr_baton *dwarf_block;
+	struct value *val;
+	struct type *caller_core_addr_type;
+	struct gdbarch *caller_arch;
+
+	dwarf_block = FIELD_DWARF_BLOCK (call_site->target);
+	if (dwarf_block == NULL)
+	  {
+	    struct bound_minimal_symbol msym;
+	    
+	    msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
+	    throw_error (NO_ENTRY_VALUE_ERROR,
+			 _("DW_AT_call_target is not specified at %s in %s"),
+			 paddress (call_site_gdbarch, call_site->pc),
+			 (msym.minsym == NULL ? "???"
+			  : msym.minsym->print_name ()));
+			
+	  }
+	if (caller_frame == NULL)
+	  {
+	    struct bound_minimal_symbol msym;
+	    
+	    msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
+	    throw_error (NO_ENTRY_VALUE_ERROR,
+			 _("DW_AT_call_target DWARF block resolving "
+			   "requires known frame which is currently not "
+			   "available at %s in %s"),
+			 paddress (call_site_gdbarch, call_site->pc),
+			 (msym.minsym == NULL ? "???"
+			  : msym.minsym->print_name ()));
+			
+	  }
+	caller_arch = get_frame_arch (caller_frame);
+	caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr;
+	val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame,
+					dwarf_block->data, dwarf_block->size,
+					dwarf_block->per_cu,
+					dwarf_block->per_objfile);
+	/* DW_AT_call_target is a DWARF expression, not a DWARF location.  */
+	if (VALUE_LVAL (val) == lval_memory)
+	  return value_address (val);
+	else
+	  return value_as_address (val);
+      }
+
+    case FIELD_LOC_KIND_PHYSNAME:
+      {
+	const char *physname;
+	struct bound_minimal_symbol msym;
+
+	physname = FIELD_STATIC_PHYSNAME (call_site->target);
+
+	/* Handle both the mangled and demangled PHYSNAME.  */
+	msym = lookup_minimal_symbol (physname, NULL, NULL);
+	if (msym.minsym == NULL)
+	  {
+	    msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
+	    throw_error (NO_ENTRY_VALUE_ERROR,
+			 _("Cannot find function \"%s\" for a call site target "
+			   "at %s in %s"),
+			 physname, paddress (call_site_gdbarch, call_site->pc),
+			 (msym.minsym == NULL ? "???"
+			  : msym.minsym->print_name ()));
+			
+	  }
+	return BMSYMBOL_VALUE_ADDRESS (msym);
+      }
+
+    case FIELD_LOC_KIND_PHYSADDR:
+      return FIELD_STATIC_PHYSADDR (call_site->target);
+
+    default:
+      internal_error (__FILE__, __LINE__, _("invalid call site target kind"));
+    }
+}
+
+/* Convert function entry point exact address ADDR to the function which is
+   compliant with TAIL_CALL_LIST_COMPLETE condition.  Throw
+   NO_ENTRY_VALUE_ERROR otherwise.  */
+
+static struct symbol *
+func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+  struct symbol *sym = find_pc_function (addr);
+  struct type *type;
+
+  if (sym == NULL || BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) != addr)
+    throw_error (NO_ENTRY_VALUE_ERROR,
+		 _("DW_TAG_call_site resolving failed to find function "
+		   "name for address %s"),
+		 paddress (gdbarch, addr));
+
+  type = SYMBOL_TYPE (sym);
+  gdb_assert (type->code () == TYPE_CODE_FUNC);
+  gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
+
+  return sym;
+}
+
+/* Verify function with entry point exact address ADDR can never call itself
+   via its tail calls (incl. transitively).  Throw NO_ENTRY_VALUE_ERROR if it
+   can call itself via tail calls.
+
+   If a funtion can tail call itself its entry value based parameters are
+   unreliable.  There is no verification whether the value of some/all
+   parameters is unchanged through the self tail call, we expect if there is
+   a self tail call all the parameters can be modified.  */
+
+static void
+func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
+{
+  CORE_ADDR addr;
+
+  /* The verification is completely unordered.  Track here function addresses
+     which still need to be iterated.  */
+  std::vector<CORE_ADDR> todo;
+
+  /* Track here CORE_ADDRs which were already visited.  */
+  std::unordered_set<CORE_ADDR> addr_hash;
+
+  todo.push_back (verify_addr);
+  while (!todo.empty ())
+    {
+      struct symbol *func_sym;
+      struct call_site *call_site;
+
+      addr = todo.back ();
+      todo.pop_back ();
+
+      func_sym = func_addr_to_tail_call_list (gdbarch, addr);
+
+      for (call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym));
+	   call_site; call_site = call_site->tail_call_next)
+	{
+	  CORE_ADDR target_addr;
+
+	  /* CALLER_FRAME with registers is not available for tail-call jumped
+	     frames.  */
+	  target_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
+
+	  if (target_addr == verify_addr)
+	    {
+	      struct bound_minimal_symbol msym;
+	      
+	      msym = lookup_minimal_symbol_by_pc (verify_addr);
+	      throw_error (NO_ENTRY_VALUE_ERROR,
+			   _("DW_OP_entry_value resolving has found "
+			     "function \"%s\" at %s can call itself via tail "
+			     "calls"),
+			   (msym.minsym == NULL ? "???"
+			    : msym.minsym->print_name ()),
+			   paddress (gdbarch, verify_addr));
+	    }
+
+	  if (addr_hash.insert (target_addr).second)
+	    todo.push_back (target_addr);
+	}
+    }
+}
+
+/* Print user readable form of CALL_SITE->PC to gdb_stdlog.  Used only for
+   ENTRY_VALUES_DEBUG.  */
+
+static void
+tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
+{
+  CORE_ADDR addr = call_site->pc;
+  struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
+
+  fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
+		      (msym.minsym == NULL ? "???"
+		       : msym.minsym->print_name ()));
+
+}
+
+/* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP
+   only top callers and bottom callees which are present in both.  GDBARCH is
+   used only for ENTRY_VALUES_DEBUG.  RESULTP is NULL after return if there are
+   no remaining possibilities to provide unambiguous non-trivial result.
+   RESULTP should point to NULL on the first (initialization) call.  Caller is
+   responsible for xfree of any RESULTP data.  */
+
+static void
+chain_candidate (struct gdbarch *gdbarch,
+		 gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
+		 std::vector<struct call_site *> *chain)
+{
+  long length = chain->size ();
+  int callers, callees, idx;
+
+  if (*resultp == NULL)
+    {
+      /* Create the initial chain containing all the passed PCs.  */
+
+      struct call_site_chain *result
+	= ((struct call_site_chain *)
+	   xmalloc (sizeof (*result)
+		    + sizeof (*result->call_site) * (length - 1)));
+      result->length = length;
+      result->callers = result->callees = length;
+      if (!chain->empty ())
+	memcpy (result->call_site, chain->data (),
+		sizeof (*result->call_site) * length);
+      resultp->reset (result);
+
+      if (entry_values_debug)
+	{
+	  fprintf_unfiltered (gdb_stdlog, "tailcall: initial:");
+	  for (idx = 0; idx < length; idx++)
+	    tailcall_dump (gdbarch, result->call_site[idx]);
+	  fputc_unfiltered ('\n', gdb_stdlog);
+	}
+
+      return;
+    }
+
+  if (entry_values_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog, "tailcall: compare:");
+      for (idx = 0; idx < length; idx++)
+	tailcall_dump (gdbarch, chain->at (idx));
+      fputc_unfiltered ('\n', gdb_stdlog);
+    }
+
+  /* Intersect callers.  */
+
+  callers = std::min ((long) (*resultp)->callers, length);
+  for (idx = 0; idx < callers; idx++)
+    if ((*resultp)->call_site[idx] != chain->at (idx))
+      {
+	(*resultp)->callers = idx;
+	break;
+      }
+
+  /* Intersect callees.  */
+
+  callees = std::min ((long) (*resultp)->callees, length);
+  for (idx = 0; idx < callees; idx++)
+    if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
+	!= chain->at (length - 1 - idx))
+      {
+	(*resultp)->callees = idx;
+	break;
+      }
+
+  if (entry_values_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:");
+      for (idx = 0; idx < (*resultp)->callers; idx++)
+	tailcall_dump (gdbarch, (*resultp)->call_site[idx]);
+      fputs_unfiltered (" |", gdb_stdlog);
+      for (idx = 0; idx < (*resultp)->callees; idx++)
+	tailcall_dump (gdbarch,
+		       (*resultp)->call_site[(*resultp)->length
+					     - (*resultp)->callees + idx]);
+      fputc_unfiltered ('\n', gdb_stdlog);
+    }
+
+  if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
+    {
+      /* There are no common callers or callees.  It could be also a direct
+	 call (which has length 0) with ambiguous possibility of an indirect
+	 call - CALLERS == CALLEES == 0 is valid during the first allocation
+	 but any subsequence processing of such entry means ambiguity.  */
+      resultp->reset (NULL);
+      return;
+    }
+
+  /* See call_site_find_chain_1 why there is no way to reach the bottom callee
+     PC again.  In such case there must be two different code paths to reach
+     it.  CALLERS + CALLEES equal to LENGTH in the case of self tail-call.  */
+  gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
+}
+
+/* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
+   assumed frames between them use GDBARCH.  Use depth first search so we can
+   keep single CHAIN of call_site's back to CALLER_PC.  Function recursion
+   would have needless GDB stack overhead.  Any unreliability results
+   in thrown NO_ENTRY_VALUE_ERROR.  */
+
+static gdb::unique_xmalloc_ptr<call_site_chain>
+call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
+			CORE_ADDR callee_pc)
+{
+  CORE_ADDR save_callee_pc = callee_pc;
+  gdb::unique_xmalloc_ptr<struct call_site_chain> retval;
+  struct call_site *call_site;
+
+  /* CHAIN contains only the intermediate CALL_SITEs.  Neither CALLER_PC's
+     call_site nor any possible call_site at CALLEE_PC's function is there.
+     Any CALL_SITE in CHAIN will be iterated to its siblings - via
+     TAIL_CALL_NEXT.  This is inappropriate for CALLER_PC's call_site.  */
+  std::vector<struct call_site *> chain;
+
+  /* We are not interested in the specific PC inside the callee function.  */
+  callee_pc = get_pc_function_start (callee_pc);
+  if (callee_pc == 0)
+    throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"),
+		 paddress (gdbarch, save_callee_pc));
+
+  /* Mark CALL_SITEs so we do not visit the same ones twice.  */
+  std::unordered_set<CORE_ADDR> addr_hash;
+
+  /* Do not push CALL_SITE to CHAIN.  Push there only the first tail call site
+     at the target's function.  All the possible tail call sites in the
+     target's function will get iterated as already pushed into CHAIN via their
+     TAIL_CALL_NEXT.  */
+  call_site = call_site_for_pc (gdbarch, caller_pc);
+
+  while (call_site)
+    {
+      CORE_ADDR target_func_addr;
+      struct call_site *target_call_site;
+
+      /* CALLER_FRAME with registers is not available for tail-call jumped
+	 frames.  */
+      target_func_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
+
+      if (target_func_addr == callee_pc)
+	{
+	  chain_candidate (gdbarch, &retval, &chain);
+	  if (retval == NULL)
+	    break;
+
+	  /* There is no way to reach CALLEE_PC again as we would prevent
+	     entering it twice as being already marked in ADDR_HASH.  */
+	  target_call_site = NULL;
+	}
+      else
+	{
+	  struct symbol *target_func;
+
+	  target_func = func_addr_to_tail_call_list (gdbarch, target_func_addr);
+	  target_call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func));
+	}
+
+      do
+	{
+	  /* Attempt to visit TARGET_CALL_SITE.  */
+
+	  if (target_call_site)
+	    {
+	      if (addr_hash.insert (target_call_site->pc).second)
+		{
+		  /* Successfully entered TARGET_CALL_SITE.  */
+
+		  chain.push_back (target_call_site);
+		  break;
+		}
+	    }
+
+	  /* Backtrack (without revisiting the originating call_site).  Try the
+	     callers's sibling; if there isn't any try the callers's callers's
+	     sibling etc.  */
+
+	  target_call_site = NULL;
+	  while (!chain.empty ())
+	    {
+	      call_site = chain.back ();
+	      chain.pop_back ();
+
+	      size_t removed = addr_hash.erase (call_site->pc);
+	      gdb_assert (removed == 1);
+
+	      target_call_site = call_site->tail_call_next;
+	      if (target_call_site)
+		break;
+	    }
+	}
+      while (target_call_site);
+
+      if (chain.empty ())
+	call_site = NULL;
+      else
+	call_site = chain.back ();
+    }
+
+  if (retval == NULL)
+    {
+      struct bound_minimal_symbol msym_caller, msym_callee;
+      
+      msym_caller = lookup_minimal_symbol_by_pc (caller_pc);
+      msym_callee = lookup_minimal_symbol_by_pc (callee_pc);
+      throw_error (NO_ENTRY_VALUE_ERROR,
+		   _("There are no unambiguously determinable intermediate "
+		     "callers or callees between caller function \"%s\" at %s "
+		     "and callee function \"%s\" at %s"),
+		   (msym_caller.minsym == NULL
+		    ? "???" : msym_caller.minsym->print_name ()),
+		   paddress (gdbarch, caller_pc),
+		   (msym_callee.minsym == NULL
+		    ? "???" : msym_callee.minsym->print_name ()),
+		   paddress (gdbarch, callee_pc));
+    }
+
+  return retval;
+}
+
+/* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
+   assumed frames between them use GDBARCH.  If valid call_site_chain cannot be
+   constructed return NULL.  */
+
+gdb::unique_xmalloc_ptr<call_site_chain>
+call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
+		      CORE_ADDR callee_pc)
+{
+  gdb::unique_xmalloc_ptr<call_site_chain> retval;
+
+  try
+    {
+      retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc);
+    }
+  catch (const gdb_exception_error &e)
+    {
+      if (e.error == NO_ENTRY_VALUE_ERROR)
+	{
+	  if (entry_values_debug)
+	    exception_print (gdb_stdout, e);
+
+	  return NULL;
+	}
+      else
+	throw;
+    }
+
+  return retval;
+}
+
+/* Return 1 if KIND and KIND_U match PARAMETER.  Return 0 otherwise.  */
+
+static int
+call_site_parameter_matches (struct call_site_parameter *parameter,
+			     enum call_site_parameter_kind kind,
+			     union call_site_parameter_u kind_u)
+{
+  if (kind == parameter->kind)
+    switch (kind)
+      {
+      case CALL_SITE_PARAMETER_DWARF_REG:
+	return kind_u.dwarf_reg == parameter->u.dwarf_reg;
+
+      case CALL_SITE_PARAMETER_FB_OFFSET:
+	return kind_u.fb_offset == parameter->u.fb_offset;
+
+      case CALL_SITE_PARAMETER_PARAM_OFFSET:
+	return kind_u.param_cu_off == parameter->u.param_cu_off;
+      }
+  return 0;
+}
+
+/* Fetch call_site_parameter from caller matching KIND and KIND_U.
+   FRAME is for callee.
+
+   Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
+   otherwise.  */
+
+static struct call_site_parameter *
+dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
+				   enum call_site_parameter_kind kind,
+				   union call_site_parameter_u kind_u,
+				   dwarf2_per_cu_data **per_cu_return,
+				   dwarf2_per_objfile **per_objfile_return)
+{
+  CORE_ADDR func_addr, caller_pc;
+  struct gdbarch *gdbarch;
+  struct frame_info *caller_frame;
+  struct call_site *call_site;
+  int iparams;
+  /* Initialize it just to avoid a GCC false warning.  */
+  struct call_site_parameter *parameter = NULL;
+  CORE_ADDR target_addr;
+
+  while (get_frame_type (frame) == INLINE_FRAME)
+    {
+      frame = get_prev_frame (frame);
+      gdb_assert (frame != NULL);
+    }
+
+  func_addr = get_frame_func (frame);
+  gdbarch = get_frame_arch (frame);
+  caller_frame = get_prev_frame (frame);
+  if (gdbarch != frame_unwind_arch (frame))
+    {
+      struct bound_minimal_symbol msym
+	= lookup_minimal_symbol_by_pc (func_addr);
+      struct gdbarch *caller_gdbarch = frame_unwind_arch (frame);
+
+      throw_error (NO_ENTRY_VALUE_ERROR,
+		   _("DW_OP_entry_value resolving callee gdbarch %s "
+		     "(of %s (%s)) does not match caller gdbarch %s"),
+		   gdbarch_bfd_arch_info (gdbarch)->printable_name,
+		   paddress (gdbarch, func_addr),
+		   (msym.minsym == NULL ? "???"
+		    : msym.minsym->print_name ()),
+		   gdbarch_bfd_arch_info (caller_gdbarch)->printable_name);
+    }
+
+  if (caller_frame == NULL)
+    {
+      struct bound_minimal_symbol msym
+	= lookup_minimal_symbol_by_pc (func_addr);
+
+      throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving "
+					   "requires caller of %s (%s)"),
+		   paddress (gdbarch, func_addr),
+		   (msym.minsym == NULL ? "???"
+		    : msym.minsym->print_name ()));
+    }
+  caller_pc = get_frame_pc (caller_frame);
+  call_site = call_site_for_pc (gdbarch, caller_pc);
+
+  target_addr = call_site_to_target_addr (gdbarch, call_site, caller_frame);
+  if (target_addr != func_addr)
+    {
+      struct minimal_symbol *target_msym, *func_msym;
+
+      target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
+      func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
+      throw_error (NO_ENTRY_VALUE_ERROR,
+		   _("DW_OP_entry_value resolving expects callee %s at %s "
+		     "but the called frame is for %s at %s"),
+		   (target_msym == NULL ? "???"
+					: target_msym->print_name ()),
+		   paddress (gdbarch, target_addr),
+		   func_msym == NULL ? "???" : func_msym->print_name (),
+		   paddress (gdbarch, func_addr));
+    }
+
+  /* No entry value based parameters would be reliable if this function can
+     call itself via tail calls.  */
+  func_verify_no_selftailcall (gdbarch, func_addr);
+
+  for (iparams = 0; iparams < call_site->parameter_count; iparams++)
+    {
+      parameter = &call_site->parameter[iparams];
+      if (call_site_parameter_matches (parameter, kind, kind_u))
+	break;
+    }
+  if (iparams == call_site->parameter_count)
+    {
+      struct minimal_symbol *msym
+	= lookup_minimal_symbol_by_pc (caller_pc).minsym;
+
+      /* DW_TAG_call_site_parameter will be missing just if GCC could not
+	 determine its value.  */
+      throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter "
+					   "at DW_TAG_call_site %s at %s"),
+		   paddress (gdbarch, caller_pc),
+		   msym == NULL ? "???" : msym->print_name ()); 
+    }
+
+  *per_cu_return = call_site->per_cu;
+  *per_objfile_return = call_site->per_objfile;
+  return parameter;
+}
+
+/* Return value for PARAMETER matching DEREF_SIZE.  If DEREF_SIZE is -1, return
+   the normal DW_AT_call_value block.  Otherwise return the
+   DW_AT_call_data_value (dereferenced) block.
+
+   TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned
+   struct value.
+
+   Function always returns non-NULL, non-optimized out value.  It throws
+   NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason.  */
+
+static struct value *
+dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
+				CORE_ADDR deref_size, struct type *type,
+				struct frame_info *caller_frame,
+				dwarf2_per_cu_data *per_cu,
+				dwarf2_per_objfile *per_objfile)
+{
+  const gdb_byte *data_src;
+  gdb_byte *data;
+  size_t size;
+
+  data_src = deref_size == -1 ? parameter->value : parameter->data_value;
+  size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
+
+  /* DEREF_SIZE size is not verified here.  */
+  if (data_src == NULL)
+    throw_error (NO_ENTRY_VALUE_ERROR,
+		 _("Cannot resolve DW_AT_call_data_value"));
+
+  /* DW_AT_call_value is a DWARF expression, not a DWARF
+     location.  Postprocessing of DWARF_VALUE_MEMORY would lose the type from
+     DWARF block.  */
+  data = (gdb_byte *) alloca (size + 1);
+  memcpy (data, data_src, size);
+  data[size] = DW_OP_stack_value;
+
+  return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu,
+				   per_objfile);
+}
+
+/* VALUE must be of type lval_computed with entry_data_value_funcs.  Perform
+   the indirect method on it, that is use its stored target value, the sole
+   purpose of entry_data_value_funcs..  */
+
+static struct value *
+entry_data_value_coerce_ref (const struct value *value)
+{
+  struct type *checked_type = check_typedef (value_type (value));
+  struct value *target_val;
+
+  if (!TYPE_IS_REFERENCE (checked_type))
+    return NULL;
+
+  target_val = (struct value *) value_computed_closure (value);
+  value_incref (target_val);
+  return target_val;
+}
+
+/* Implement copy_closure.  */
+
+static void *
+entry_data_value_copy_closure (const struct value *v)
+{
+  struct value *target_val = (struct value *) value_computed_closure (v);
+
+  value_incref (target_val);
+  return target_val;
+}
+
+/* Implement free_closure.  */
+
+static void
+entry_data_value_free_closure (struct value *v)
+{
+  struct value *target_val = (struct value *) value_computed_closure (v);
+
+  value_decref (target_val);
+}
+
+/* Vector for methods for an entry value reference where the referenced value
+   is stored in the caller.  On the first dereference use
+   DW_AT_call_data_value in the caller.  */
+
+static const struct lval_funcs entry_data_value_funcs =
+{
+  NULL,	/* read */
+  NULL,	/* write */
+  NULL,	/* indirect */
+  entry_data_value_coerce_ref,
+  NULL,	/* check_synthetic_pointer */
+  entry_data_value_copy_closure,
+  entry_data_value_free_closure
+};
+
+/* Read parameter of TYPE at (callee) FRAME's function entry.  KIND and KIND_U
+   are used to match DW_AT_location at the caller's
+   DW_TAG_call_site_parameter.
+
+   Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
+   cannot resolve the parameter for any reason.  */
+
+static struct value *
+value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
+			  enum call_site_parameter_kind kind,
+			  union call_site_parameter_u kind_u)
+{
+  struct type *checked_type = check_typedef (type);
+  struct type *target_type = TYPE_TARGET_TYPE (checked_type);
+  struct frame_info *caller_frame = get_prev_frame (frame);
+  struct value *outer_val, *target_val, *val;
+  struct call_site_parameter *parameter;
+  dwarf2_per_cu_data *caller_per_cu;
+  dwarf2_per_objfile *caller_per_objfile;
+
+  parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
+						 &caller_per_cu,
+						 &caller_per_objfile);
+
+  outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
+					      type, caller_frame,
+					      caller_per_cu,
+					      caller_per_objfile);
+
+  /* Check if DW_AT_call_data_value cannot be used.  If it should be
+     used and it is not available do not fall back to OUTER_VAL - dereferencing
+     TYPE_CODE_REF with non-entry data value would give current value - not the
+     entry value.  */
+
+  if (!TYPE_IS_REFERENCE (checked_type)
+      || TYPE_TARGET_TYPE (checked_type) == NULL)
+    return outer_val;
+
+  target_val = dwarf_entry_parameter_to_value (parameter,
+					       TYPE_LENGTH (target_type),
+					       target_type, caller_frame,
+					       caller_per_cu,
+					       caller_per_objfile);
+
+  val = allocate_computed_value (type, &entry_data_value_funcs,
+				 release_value (target_val).release ());
+
+  /* Copy the referencing pointer to the new computed value.  */
+  memcpy (value_contents_raw (val), value_contents_raw (outer_val),
+	  TYPE_LENGTH (checked_type));
+  set_value_lazy (val, 0);
+
+  return val;
+}
+
+/* Read parameter of TYPE at (callee) FRAME's function entry.  DATA and
+   SIZE are DWARF block used to match DW_AT_location at the caller's
+   DW_TAG_call_site_parameter.
+
+   Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
+   cannot resolve the parameter for any reason.  */
+
+static struct value *
+value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
+			    const gdb_byte *block, size_t block_len)
+{
+  union call_site_parameter_u kind_u;
+
+  kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
+  if (kind_u.dwarf_reg != -1)
+    return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
+				     kind_u);
+
+  if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
+    return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
+				     kind_u);
+
+  /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
+     suppressed during normal operation.  The expression can be arbitrary if
+     there is no caller-callee entry value binding expected.  */
+  throw_error (NO_ENTRY_VALUE_ERROR,
+	       _("DWARF-2 expression error: DW_OP_entry_value is supported "
+		 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
+}
+
+struct piece_closure
+{
+  /* Reference count.  */
+  int refc = 0;
+
+  /* The objfile from which this closure's expression came.  */
+  dwarf2_per_objfile *per_objfile = nullptr;
+
+  /* The CU from which this closure's expression came.  */
+  struct dwarf2_per_cu_data *per_cu = NULL;
+
+  /* The pieces describing this variable.  */
+  std::vector<dwarf_expr_piece> pieces;
+
+  /* Frame ID of frame to which a register value is relative, used
+     only by DWARF_VALUE_REGISTER.  */
+  struct frame_id frame_id;
+};
+
+/* Allocate a closure for a value formed from separately-described
+   PIECES.  */
+
+static struct piece_closure *
+allocate_piece_closure (dwarf2_per_cu_data *per_cu,
+			dwarf2_per_objfile *per_objfile,
+			std::vector<dwarf_expr_piece> &&pieces,
+			struct frame_info *frame)
+{
+  struct piece_closure *c = new piece_closure;
+
+  c->refc = 1;
+  /* We must capture this here due to sharing of DWARF state.  */
+  c->per_objfile = per_objfile;
+  c->per_cu = per_cu;
+  c->pieces = std::move (pieces);
+  if (frame == NULL)
+    c->frame_id = null_frame_id;
+  else
+    c->frame_id = get_frame_id (frame);
+
+  for (dwarf_expr_piece &piece : c->pieces)
+    if (piece.location == DWARF_VALUE_STACK)
+      value_incref (piece.v.value);
+
+  return c;
+}
+
+/* Return the number of bytes overlapping a contiguous chunk of N_BITS
+   bits whose first bit is located at bit offset START.  */
+
+static size_t
+bits_to_bytes (ULONGEST start, ULONGEST n_bits)
+{
+  return (start % 8 + n_bits + 7) / 8;
+}
+
+/* Read or write a pieced value V.  If FROM != NULL, operate in "write
+   mode": copy FROM into the pieces comprising V.  If FROM == NULL,
+   operate in "read mode": fetch the contents of the (lazy) value V by
+   composing it from its pieces.  */
+
+static void
+rw_pieced_value (struct value *v, struct value *from)
+{
+  int i;
+  LONGEST offset = 0, max_offset;
+  ULONGEST bits_to_skip;
+  gdb_byte *v_contents;
+  const gdb_byte *from_contents;
+  struct piece_closure *c
+    = (struct piece_closure *) value_computed_closure (v);
+  gdb::byte_vector buffer;
+  bool bits_big_endian = type_byte_order (value_type (v)) == BFD_ENDIAN_BIG;
+
+  if (from != NULL)
+    {
+      from_contents = value_contents (from);
+      v_contents = NULL;
+    }
+  else
+    {
+      if (value_type (v) != value_enclosing_type (v))
+	internal_error (__FILE__, __LINE__,
+			_("Should not be able to create a lazy value with "
+			  "an enclosing type"));
+      v_contents = value_contents_raw (v);
+      from_contents = NULL;
+    }
+
+  bits_to_skip = 8 * value_offset (v);
+  if (value_bitsize (v))
+    {
+      bits_to_skip += (8 * value_offset (value_parent (v))
+		       + value_bitpos (v));
+      if (from != NULL
+	  && (type_byte_order (value_type (from))
+	      == BFD_ENDIAN_BIG))
+	{
+	  /* Use the least significant bits of FROM.  */
+	  max_offset = 8 * TYPE_LENGTH (value_type (from));
+	  offset = max_offset - value_bitsize (v);
+	}
+      else
+	max_offset = value_bitsize (v);
+    }
+  else
+    max_offset = 8 * TYPE_LENGTH (value_type (v));
+
+  /* Advance to the first non-skipped piece.  */
+  for (i = 0; i < c->pieces.size () && bits_to_skip >= c->pieces[i].size; i++)
+    bits_to_skip -= c->pieces[i].size;
+
+  for (; i < c->pieces.size () && offset < max_offset; i++)
+    {
+      struct dwarf_expr_piece *p = &c->pieces[i];
+      size_t this_size_bits, this_size;
+
+      this_size_bits = p->size - bits_to_skip;
+      if (this_size_bits > max_offset - offset)
+	this_size_bits = max_offset - offset;
+
+      switch (p->location)
+	{
+	case DWARF_VALUE_REGISTER:
+	  {
+	    struct frame_info *frame = frame_find_by_id (c->frame_id);
+	    struct gdbarch *arch = get_frame_arch (frame);
+	    int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno);
+	    ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum);
+	    int optim, unavail;
+
+	    if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
+		&& p->offset + p->size < reg_bits)
+	      {
+		/* Big-endian, and we want less than full size.  */
+		bits_to_skip += reg_bits - (p->offset + p->size);
+	      }
+	    else
+	      bits_to_skip += p->offset;
+
+	    this_size = bits_to_bytes (bits_to_skip, this_size_bits);
+	    buffer.resize (this_size);
+
+	    if (from == NULL)
+	      {
+		/* Read mode.  */
+		if (!get_frame_register_bytes (frame, gdb_regnum,
+					       bits_to_skip / 8,
+					       buffer,
+					       &optim, &unavail))
+		  {
+		    if (optim)
+		      mark_value_bits_optimized_out (v, offset,
+						     this_size_bits);
+		    if (unavail)
+		      mark_value_bits_unavailable (v, offset,
+						   this_size_bits);
+		    break;
+		  }
+
+		copy_bitwise (v_contents, offset,
+			      buffer.data (), bits_to_skip % 8,
+			      this_size_bits, bits_big_endian);
+	      }
+	    else
+	      {
+		/* Write mode.  */
+		if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0)
+		  {
+		    /* Data is copied non-byte-aligned into the register.
+		       Need some bits from original register value.  */
+		    get_frame_register_bytes (frame, gdb_regnum,
+					      bits_to_skip / 8,
+					      buffer,
+					      &optim, &unavail);
+		    if (optim)
+		      throw_error (OPTIMIZED_OUT_ERROR,
+				   _("Can't do read-modify-write to "
+				     "update bitfield; containing word "
+				     "has been optimized out"));
+		    if (unavail)
+		      throw_error (NOT_AVAILABLE_ERROR,
+				   _("Can't do read-modify-write to "
+				     "update bitfield; containing word "
+				     "is unavailable"));
+		  }
+
+		copy_bitwise (buffer.data (), bits_to_skip % 8,
+			      from_contents, offset,
+			      this_size_bits, bits_big_endian);
+		put_frame_register_bytes (frame, gdb_regnum,
+					  bits_to_skip / 8,
+					  buffer);
+	      }
+	  }
+	  break;
+
+	case DWARF_VALUE_MEMORY:
+	  {
+	    bits_to_skip += p->offset;
+
+	    CORE_ADDR start_addr = p->v.mem.addr + bits_to_skip / 8;
+
+	    if (bits_to_skip % 8 == 0 && this_size_bits % 8 == 0
+		&& offset % 8 == 0)
+	      {
+		/* Everything is byte-aligned; no buffer needed.  */
+		if (from != NULL)
+		  write_memory_with_notification (start_addr,
+						  (from_contents
+						   + offset / 8),
+						  this_size_bits / 8);
+		else
+		  read_value_memory (v, offset,
+				     p->v.mem.in_stack_memory,
+				     p->v.mem.addr + bits_to_skip / 8,
+				     v_contents + offset / 8,
+				     this_size_bits / 8);
+		break;
+	      }
+
+	    this_size = bits_to_bytes (bits_to_skip, this_size_bits);
+	    buffer.resize (this_size);
+
+	    if (from == NULL)
+	      {
+		/* Read mode.  */
+		read_value_memory (v, offset,
+				   p->v.mem.in_stack_memory,
+				   p->v.mem.addr + bits_to_skip / 8,
+				   buffer.data (), this_size);
+		copy_bitwise (v_contents, offset,
+			      buffer.data (), bits_to_skip % 8,
+			      this_size_bits, bits_big_endian);
+	      }
+	    else
+	      {
+		/* Write mode.  */
+		if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0)
+		  {
+		    if (this_size <= 8)
+		      {
+			/* Perform a single read for small sizes.  */
+			read_memory (start_addr, buffer.data (),
+				     this_size);
+		      }
+		    else
+		      {
+			/* Only the first and last bytes can possibly have
+			   any bits reused.  */
+			read_memory (start_addr, buffer.data (), 1);
+			read_memory (start_addr + this_size - 1,
+				     &buffer[this_size - 1], 1);
+		      }
+		  }
+
+		copy_bitwise (buffer.data (), bits_to_skip % 8,
+			      from_contents, offset,
+			      this_size_bits, bits_big_endian);
+		write_memory_with_notification (start_addr,
+						buffer.data (),
+						this_size);
+	      }
+	  }
+	  break;
+
+	case DWARF_VALUE_STACK:
+	  {
+	    if (from != NULL)
+	      {
+		mark_value_bits_optimized_out (v, offset, this_size_bits);
+		break;
+	      }
+
+	    gdbarch *objfile_gdbarch = c->per_objfile->objfile->arch ();
+	    ULONGEST stack_value_size_bits
+	      = 8 * TYPE_LENGTH (value_type (p->v.value));
+
+	    /* Use zeroes if piece reaches beyond stack value.  */
+	    if (p->offset + p->size > stack_value_size_bits)
+	      break;
+
+	    /* Piece is anchored at least significant bit end.  */
+	    if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
+	      bits_to_skip += stack_value_size_bits - p->offset - p->size;
+	    else
+	      bits_to_skip += p->offset;
+
+	    copy_bitwise (v_contents, offset,
+			  value_contents_all (p->v.value),
+			  bits_to_skip,
+			  this_size_bits, bits_big_endian);
+	  }
+	  break;
+
+	case DWARF_VALUE_LITERAL:
+	  {
+	    if (from != NULL)
+	      {
+		mark_value_bits_optimized_out (v, offset, this_size_bits);
+		break;
+	      }
+
+	    ULONGEST literal_size_bits = 8 * p->v.literal.length;
+	    size_t n = this_size_bits;
+
+	    /* Cut off at the end of the implicit value.  */
+	    bits_to_skip += p->offset;
+	    if (bits_to_skip >= literal_size_bits)
+	      break;
+	    if (n > literal_size_bits - bits_to_skip)
+	      n = literal_size_bits - bits_to_skip;
+
+	    copy_bitwise (v_contents, offset,
+			  p->v.literal.data, bits_to_skip,
+			  n, bits_big_endian);
+	  }
+	  break;
+
+	case DWARF_VALUE_IMPLICIT_POINTER:
+	    if (from != NULL)
+	      {
+		mark_value_bits_optimized_out (v, offset, this_size_bits);
+		break;
+	      }
+
+	  /* These bits show up as zeros -- but do not cause the value to
+	     be considered optimized-out.  */
+	  break;
+
+	case DWARF_VALUE_OPTIMIZED_OUT:
+	  mark_value_bits_optimized_out (v, offset, this_size_bits);
+	  break;
+
+	default:
+	  internal_error (__FILE__, __LINE__, _("invalid location type"));
+	}
+
+      offset += this_size_bits;
+      bits_to_skip = 0;
+    }
+}
+
+
+static void
+read_pieced_value (struct value *v)
+{
+  rw_pieced_value (v, NULL);
+}
+
+static void
+write_pieced_value (struct value *to, struct value *from)
+{
+  rw_pieced_value (to, from);
+}
+
+/* An implementation of an lval_funcs method to see whether a value is
+   a synthetic pointer.  */
+
+static int
+check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset,
+				int bit_length)
+{
+  struct piece_closure *c
+    = (struct piece_closure *) value_computed_closure (value);
+  int i;
+
+  bit_offset += 8 * value_offset (value);
+  if (value_bitsize (value))
+    bit_offset += value_bitpos (value);
+
+  for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
+    {
+      struct dwarf_expr_piece *p = &c->pieces[i];
+      size_t this_size_bits = p->size;
+
+      if (bit_offset > 0)
+	{
+	  if (bit_offset >= this_size_bits)
+	    {
+	      bit_offset -= this_size_bits;
+	      continue;
+	    }
+
+	  bit_length -= this_size_bits - bit_offset;
+	  bit_offset = 0;
+	}
+      else
+	bit_length -= this_size_bits;
+
+      if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
+	return 0;
+    }
+
+  return 1;
+}
+
+/* Fetch a DW_AT_const_value through a synthetic pointer.  */
+
+static struct value *
+fetch_const_value_from_synthetic_pointer (sect_offset die, LONGEST byte_offset,
+					  dwarf2_per_cu_data *per_cu,
+					  dwarf2_per_objfile *per_objfile,
+					  struct type *type)
+{
+  struct value *result = NULL;
+  const gdb_byte *bytes;
+  LONGEST len;
+
+  auto_obstack temp_obstack;
+  bytes = dwarf2_fetch_constant_bytes (die, per_cu, per_objfile,
+				       &temp_obstack, &len);
+
+  if (bytes != NULL)
+    {
+      if (byte_offset >= 0
+	  && byte_offset + TYPE_LENGTH (TYPE_TARGET_TYPE (type)) <= len)
+	{
+	  bytes += byte_offset;
+	  result = value_from_contents (TYPE_TARGET_TYPE (type), bytes);
+	}
+      else
+	invalid_synthetic_pointer ();
+    }
+  else
+    result = allocate_optimized_out_value (TYPE_TARGET_TYPE (type));
+
+  return result;
+}
+
+/* Fetch the value pointed to by a synthetic pointer.  */
+
+static struct value *
+indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset,
+			    dwarf2_per_cu_data *per_cu,
+			    dwarf2_per_objfile *per_objfile,
+			    struct frame_info *frame, struct type *type,
+			    bool resolve_abstract_p)
+{
+  /* Fetch the location expression of the DIE we're pointing to.  */
+  auto get_frame_address_in_block_wrapper = [frame] ()
+    {
+     return get_frame_address_in_block (frame);
+    };
+  struct dwarf2_locexpr_baton baton
+    = dwarf2_fetch_die_loc_sect_off (die, per_cu, per_objfile,
+				     get_frame_address_in_block_wrapper,
+				     resolve_abstract_p);
+
+  /* Get type of pointed-to DIE.  */
+  struct type *orig_type = dwarf2_fetch_die_type_sect_off (die, per_cu,
+							   per_objfile);
+  if (orig_type == NULL)
+    invalid_synthetic_pointer ();
+
+  /* If pointed-to DIE has a DW_AT_location, evaluate it and return the
+     resulting value.  Otherwise, it may have a DW_AT_const_value instead,
+     or it may've been optimized out.  */
+  if (baton.data != NULL)
+    return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data,
+					  baton.size, baton.per_cu,
+					  baton.per_objfile,
+					  TYPE_TARGET_TYPE (type),
+					  byte_offset);
+  else
+    return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu,
+						     per_objfile, type);
+}
+
+/* An implementation of an lval_funcs method to indirect through a
+   pointer.  This handles the synthetic pointer case when needed.  */
+
+static struct value *
+indirect_pieced_value (struct value *value)
+{
+  struct piece_closure *c
+    = (struct piece_closure *) value_computed_closure (value);
+  struct type *type;
+  struct frame_info *frame;
+  int i, bit_length;
+  LONGEST bit_offset;
+  struct dwarf_expr_piece *piece = NULL;
+  LONGEST byte_offset;
+  enum bfd_endian byte_order;
+
+  type = check_typedef (value_type (value));
+  if (type->code () != TYPE_CODE_PTR)
+    return NULL;
+
+  bit_length = 8 * TYPE_LENGTH (type);
+  bit_offset = 8 * value_offset (value);
+  if (value_bitsize (value))
+    bit_offset += value_bitpos (value);
+
+  for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
+    {
+      struct dwarf_expr_piece *p = &c->pieces[i];
+      size_t this_size_bits = p->size;
+
+      if (bit_offset > 0)
+	{
+	  if (bit_offset >= this_size_bits)
+	    {
+	      bit_offset -= this_size_bits;
+	      continue;
+	    }
+
+	  bit_length -= this_size_bits - bit_offset;
+	  bit_offset = 0;
+	}
+      else
+	bit_length -= this_size_bits;
+
+      if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
+	return NULL;
+
+      if (bit_length != 0)
+	error (_("Invalid use of DW_OP_implicit_pointer"));
+
+      piece = p;
+      break;
+    }
+
+  gdb_assert (piece != NULL);
+  frame = get_selected_frame (_("No frame selected."));
+
+  /* This is an offset requested by GDB, such as value subscripts.
+     However, due to how synthetic pointers are implemented, this is
+     always presented to us as a pointer type.  This means we have to
+     sign-extend it manually as appropriate.  Use raw
+     extract_signed_integer directly rather than value_as_address and
+     sign extend afterwards on architectures that would need it
+     (mostly everywhere except MIPS, which has signed addresses) as
+     the later would go through gdbarch_pointer_to_address and thus
+     return a CORE_ADDR with high bits set on architectures that
+     encode address spaces and other things in CORE_ADDR.  */
+  byte_order = gdbarch_byte_order (get_frame_arch (frame));
+  byte_offset = extract_signed_integer (value_contents (value),
+					TYPE_LENGTH (type), byte_order);
+  byte_offset += piece->v.ptr.offset;
+
+  return indirect_synthetic_pointer (piece->v.ptr.die_sect_off,
+				     byte_offset, c->per_cu,
+				     c->per_objfile, frame, type);
+}
+
+/* Implementation of the coerce_ref method of lval_funcs for synthetic C++
+   references.  */
+
+static struct value *
+coerce_pieced_ref (const struct value *value)
+{
+  struct type *type = check_typedef (value_type (value));
+
+  if (value_bits_synthetic_pointer (value, value_embedded_offset (value),
+				    TARGET_CHAR_BIT * TYPE_LENGTH (type)))
+    {
+      const struct piece_closure *closure
+	= (struct piece_closure *) value_computed_closure (value);
+      struct frame_info *frame
+	= get_selected_frame (_("No frame selected."));
+
+      /* gdb represents synthetic pointers as pieced values with a single
+	 piece.  */
+      gdb_assert (closure != NULL);
+      gdb_assert (closure->pieces.size () == 1);
+
+      return indirect_synthetic_pointer
+	(closure->pieces[0].v.ptr.die_sect_off,
+	 closure->pieces[0].v.ptr.offset,
+	 closure->per_cu, closure->per_objfile, frame, type);
+    }
+  else
+    {
+      /* Else: not a synthetic reference; do nothing.  */
+      return NULL;
+    }
+}
+
+static void *
+copy_pieced_value_closure (const struct value *v)
+{
+  struct piece_closure *c
+    = (struct piece_closure *) value_computed_closure (v);
+  
+  ++c->refc;
+  return c;
+}
+
+static void
+free_pieced_value_closure (struct value *v)
+{
+  struct piece_closure *c
+    = (struct piece_closure *) value_computed_closure (v);
+
+  --c->refc;
+  if (c->refc == 0)
+    {
+      for (dwarf_expr_piece &p : c->pieces)
+	if (p.location == DWARF_VALUE_STACK)
+	  value_decref (p.v.value);
+
+      delete c;
+    }
+}
+
+/* Functions for accessing a variable described by DW_OP_piece.  */
+static const struct lval_funcs pieced_value_funcs = {
+  read_pieced_value,
+  write_pieced_value,
+  indirect_pieced_value,
+  coerce_pieced_ref,
+  check_pieced_synthetic_pointer,
+  copy_pieced_value_closure,
+  free_pieced_value_closure
+};
+
+/* Evaluate a location description, starting at DATA and with length
+   SIZE, to find the current location of variable of TYPE in the
+   context of FRAME.  If SUBOBJ_TYPE is non-NULL, return instead the
+   location of the subobject of type SUBOBJ_TYPE at byte offset
+   SUBOBJ_BYTE_OFFSET within the variable of type TYPE.  */
+
+static struct value *
+dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
+			       const gdb_byte *data, size_t size,
+			       dwarf2_per_cu_data *per_cu,
+			       dwarf2_per_objfile *per_objfile,
+			       struct type *subobj_type,
+			       LONGEST subobj_byte_offset)
+{
+  struct value *retval;
+
+  if (subobj_type == NULL)
+    {
+      subobj_type = type;
+      subobj_byte_offset = 0;
+    }
+  else if (subobj_byte_offset < 0)
+    invalid_synthetic_pointer ();
+
+  if (size == 0)
+    return allocate_optimized_out_value (subobj_type);
+
+  dwarf_evaluate_loc_desc ctx (per_objfile);
+  ctx.frame = frame;
+  ctx.per_cu = per_cu;
+  ctx.obj_address = 0;
+
+  scoped_value_mark free_values;
+
+  ctx.gdbarch = per_objfile->objfile->arch ();
+  ctx.addr_size = per_cu->addr_size ();
+  ctx.ref_addr_size = per_cu->ref_addr_size ();
+
+  try
+    {
+      ctx.eval (data, size);
+    }
+  catch (const gdb_exception_error &ex)
+    {
+      if (ex.error == NOT_AVAILABLE_ERROR)
+	{
+	  free_values.free_to_mark ();
+	  retval = allocate_value (subobj_type);
+	  mark_value_bytes_unavailable (retval, 0,
+					TYPE_LENGTH (subobj_type));
+	  return retval;
+	}
+      else if (ex.error == NO_ENTRY_VALUE_ERROR)
+	{
+	  if (entry_values_debug)
+	    exception_print (gdb_stdout, ex);
+	  free_values.free_to_mark ();
+	  return allocate_optimized_out_value (subobj_type);
+	}
+      else
+	throw;
+    }
+
+  if (ctx.pieces.size () > 0)
+    {
+      struct piece_closure *c;
+      ULONGEST bit_size = 0;
+
+      for (dwarf_expr_piece &piece : ctx.pieces)
+	bit_size += piece.size;
+      /* Complain if the expression is larger than the size of the
+	 outer type.  */
+      if (bit_size > 8 * TYPE_LENGTH (type))
+	invalid_synthetic_pointer ();
+
+      c = allocate_piece_closure (per_cu, per_objfile, std::move (ctx.pieces),
+				  frame);
+      /* We must clean up the value chain after creating the piece
+	 closure but before allocating the result.  */
+      free_values.free_to_mark ();
+      retval = allocate_computed_value (subobj_type,
+					&pieced_value_funcs, c);
+      set_value_offset (retval, subobj_byte_offset);
+    }
+  else
+    {
+      switch (ctx.location)
+	{
+	case DWARF_VALUE_REGISTER:
+	  {
+	    struct gdbarch *arch = get_frame_arch (frame);
+	    int dwarf_regnum
+	      = longest_to_int (value_as_long (ctx.fetch (0)));
+	    int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, dwarf_regnum);
+
+	    if (subobj_byte_offset != 0)
+	      error (_("cannot use offset on synthetic pointer to register"));
+	    free_values.free_to_mark ();
+	    retval = value_from_register (subobj_type, gdb_regnum, frame);
+	    if (value_optimized_out (retval))
+	      {
+		struct value *tmp;
+
+		/* This means the register has undefined value / was
+		   not saved.  As we're computing the location of some
+		   variable etc. in the program, not a value for
+		   inspecting a register ($pc, $sp, etc.), return a
+		   generic optimized out value instead, so that we show
+		   <optimized out> instead of <not saved>.  */
+		tmp = allocate_value (subobj_type);
+		value_contents_copy (tmp, 0, retval, 0,
+				     TYPE_LENGTH (subobj_type));
+		retval = tmp;
+	      }
+	  }
+	  break;
+
+	case DWARF_VALUE_MEMORY:
+	  {
+	    struct type *ptr_type;
+	    CORE_ADDR address = ctx.fetch_address (0);
+	    bool in_stack_memory = ctx.fetch_in_stack_memory (0);
+
+	    /* DW_OP_deref_size (and possibly other operations too) may
+	       create a pointer instead of an address.  Ideally, the
+	       pointer to address conversion would be performed as part
+	       of those operations, but the type of the object to
+	       which the address refers is not known at the time of
+	       the operation.  Therefore, we do the conversion here
+	       since the type is readily available.  */
+
+	    switch (subobj_type->code ())
+	      {
+		case TYPE_CODE_FUNC:
+		case TYPE_CODE_METHOD:
+		  ptr_type = builtin_type (ctx.gdbarch)->builtin_func_ptr;
+		  break;
+		default:
+		  ptr_type = builtin_type (ctx.gdbarch)->builtin_data_ptr;
+		  break;
+	      }
+	    address = value_as_address (value_from_pointer (ptr_type, address));
+
+	    free_values.free_to_mark ();
+	    retval = value_at_lazy (subobj_type,
+				    address + subobj_byte_offset);
+	    if (in_stack_memory)
+	      set_value_stack (retval, 1);
+	  }
+	  break;
+
+	case DWARF_VALUE_STACK:
+	  {
+	    struct value *value = ctx.fetch (0);
+	    size_t n = TYPE_LENGTH (value_type (value));
+	    size_t len = TYPE_LENGTH (subobj_type);
+	    size_t max = TYPE_LENGTH (type);
+	    gdbarch *objfile_gdbarch = per_objfile->objfile->arch ();
+
+	    if (subobj_byte_offset + len > max)
+	      invalid_synthetic_pointer ();
+
+	    /* Preserve VALUE because we are going to free values back
+	       to the mark, but we still need the value contents
+	       below.  */
+	    value_ref_ptr value_holder = value_ref_ptr::new_reference (value);
+	    free_values.free_to_mark ();
+
+	    retval = allocate_value (subobj_type);
+
+	    /* The given offset is relative to the actual object.  */
+	    if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
+	      subobj_byte_offset += n - max;
+
+	    memcpy (value_contents_raw (retval),
+		    value_contents_all (value) + subobj_byte_offset, len);
+	  }
+	  break;
+
+	case DWARF_VALUE_LITERAL:
+	  {
+	    bfd_byte *contents;
+	    size_t n = TYPE_LENGTH (subobj_type);
+
+	    if (subobj_byte_offset + n > ctx.len)
+	      invalid_synthetic_pointer ();
+
+	    free_values.free_to_mark ();
+	    retval = allocate_value (subobj_type);
+	    contents = value_contents_raw (retval);
+	    memcpy (contents, ctx.data + subobj_byte_offset, n);
+	  }
+	  break;
+
+	case DWARF_VALUE_OPTIMIZED_OUT:
+	  free_values.free_to_mark ();
+	  retval = allocate_optimized_out_value (subobj_type);
+	  break;
+
+	  /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
+	     operation by execute_stack_op.  */
+	case DWARF_VALUE_IMPLICIT_POINTER:
+	  /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
+	     it can only be encountered when making a piece.  */
+	default:
+	  internal_error (__FILE__, __LINE__, _("invalid location type"));
+	}
+    }
+
+  set_value_initialized (retval, ctx.initialized);
+
+  return retval;
+}
+
+/* The exported interface to dwarf2_evaluate_loc_desc_full; it always
+   passes 0 as the byte_offset.  */
+
+struct value *
+dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
+			  const gdb_byte *data, size_t size,
+			  dwarf2_per_cu_data *per_cu,
+			  dwarf2_per_objfile *per_objfile)
+{
+  return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu,
+					per_objfile, NULL, 0);
+}
+
+/* A specialization of dwarf_evaluate_loc_desc that is used by
+   dwarf2_locexpr_baton_eval.  This subclass exists to handle the case
+   where a caller of dwarf2_locexpr_baton_eval passes in some data,
+   but with the address being 0.  In this situation, we arrange for
+   memory reads to come from the passed-in buffer.  */
+
+struct evaluate_for_locexpr_baton : public dwarf_evaluate_loc_desc
+{
+  evaluate_for_locexpr_baton (dwarf2_per_objfile *per_objfile)
+    : dwarf_evaluate_loc_desc (per_objfile)
+  {}
+
+  /* The data that was passed in.  */
+  gdb::array_view<const gdb_byte> data_view;
+
+  CORE_ADDR get_object_address () override
+  {
+    if (data_view.data () == nullptr && obj_address == 0)
+      error (_("Location address is not set."));
+    return obj_address;
+  }
+
+  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
+  {
+    if (len == 0)
+      return;
+
+    /* Prefer the passed-in memory, if it exists.  */
+    CORE_ADDR offset = addr - obj_address;
+    if (offset < data_view.size () && offset + len <= data_view.size ())
+      {
+	memcpy (buf, data_view.data (), len);
+	return;
+      }
+
+    read_memory (addr, buf, len);
+  }
+};
+
+/* Evaluates a dwarf expression and stores the result in VAL,
+   expecting that the dwarf expression only produces a single
+   CORE_ADDR.  FRAME is the frame in which the expression is
+   evaluated.  ADDR_STACK is a context (location of a variable) and
+   might be needed to evaluate the location expression.
+   PUSH_INITIAL_VALUE is true if the address (either from ADDR_STACK,
+   or the default of 0) should be pushed on the DWARF expression
+   evaluation stack before evaluating the expression; this is required
+   by certain forms of DWARF expression.  Returns 1 on success, 0
+   otherwise.  */
+
+static int
+dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
+			   struct frame_info *frame,
+			   const struct property_addr_info *addr_stack,
+			   CORE_ADDR *valp,
+			   bool push_initial_value,
+			   bool *is_reference)
+{
+  if (dlbaton == NULL || dlbaton->size == 0)
+    return 0;
+
+  dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
+  evaluate_for_locexpr_baton ctx (per_objfile);
+
+  ctx.frame = frame;
+  ctx.per_cu = dlbaton->per_cu;
+  if (addr_stack == nullptr)
+    ctx.obj_address = 0;
+  else
+    {
+      ctx.obj_address = addr_stack->addr;
+      ctx.data_view = addr_stack->valaddr;
+    }
+
+  ctx.gdbarch = per_objfile->objfile->arch ();
+  ctx.addr_size = dlbaton->per_cu->addr_size ();
+  ctx.ref_addr_size = dlbaton->per_cu->ref_addr_size ();
+
+  if (push_initial_value)
+    ctx.push_address (ctx.obj_address, false);
+
+  try
+    {
+      ctx.eval (dlbaton->data, dlbaton->size);
+    }
+  catch (const gdb_exception_error &ex)
+    {
+      if (ex.error == NOT_AVAILABLE_ERROR)
+	{
+	  return 0;
+	}
+      else if (ex.error == NO_ENTRY_VALUE_ERROR)
+	{
+	  if (entry_values_debug)
+	    exception_print (gdb_stdout, ex);
+	  return 0;
+	}
+      else
+	throw;
+    }
+
+  switch (ctx.location)
+    {
+    case DWARF_VALUE_STACK:
+      *is_reference = false;
+      /* FALLTHROUGH */
+
+    case DWARF_VALUE_REGISTER:
+    case DWARF_VALUE_MEMORY:
+      *valp = ctx.fetch_address (0);
+      if (ctx.location == DWARF_VALUE_REGISTER)
+	*valp = ctx.read_addr_from_reg (*valp);
+      return 1;
+    case DWARF_VALUE_LITERAL:
+      *valp = extract_signed_integer (ctx.data, ctx.len,
+				      gdbarch_byte_order (ctx.gdbarch));
+      return 1;
+      /* Unsupported dwarf values.  */
+    case DWARF_VALUE_OPTIMIZED_OUT:
+    case DWARF_VALUE_IMPLICIT_POINTER:
+      break;
+    }
+
+  return 0;
+}
+
+/* See dwarf2loc.h.  */
+
+bool
+dwarf2_evaluate_property (const struct dynamic_prop *prop,
+			  struct frame_info *frame,
+			  const struct property_addr_info *addr_stack,
+			  CORE_ADDR *value,
+			  bool push_initial_value)
+{
+  if (prop == NULL)
+    return false;
+
+  if (frame == NULL && has_stack_frames ())
+    frame = get_selected_frame (NULL);
+
+  switch (prop->kind ())
+    {
+    case PROP_LOCEXPR:
+      {
+	const struct dwarf2_property_baton *baton
+	  = (const struct dwarf2_property_baton *) prop->baton ();
+	gdb_assert (baton->property_type != NULL);
+
+	bool is_reference = baton->locexpr.is_reference;
+	if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame, addr_stack,
+				       value, push_initial_value, &is_reference))
+	  {
+	    if (is_reference)
+	      {
+		struct value *val = value_at (baton->property_type, *value);
+		*value = value_as_address (val);
+	      }
+	    else
+	      {
+		gdb_assert (baton->property_type != NULL);
+
+		struct type *type = check_typedef (baton->property_type);
+		if (TYPE_LENGTH (type) < sizeof (CORE_ADDR)
+		    && !type->is_unsigned ())
+		  {
+		    /* If we have a valid return candidate and it's value
+		       is signed, we have to sign-extend the value because
+		       CORE_ADDR on 64bit machine has 8 bytes but address
+		       size of an 32bit application is bytes.  */
+		    const int addr_size
+		      = (baton->locexpr.per_cu->addr_size ()
+			 * TARGET_CHAR_BIT);
+		    const CORE_ADDR neg_mask
+		      = (~((CORE_ADDR) 0) <<  (addr_size - 1));
+
+		    /* Check if signed bit is set and sign-extend values.  */
+		    if (*value & neg_mask)
+		      *value |= neg_mask;
+		  }
+	      }
+	    return true;
+	  }
+      }
+      break;
+
+    case PROP_LOCLIST:
+      {
+	struct dwarf2_property_baton *baton
+	  = (struct dwarf2_property_baton *) prop->baton ();
+	CORE_ADDR pc;
+	const gdb_byte *data;
+	struct value *val;
+	size_t size;
+
+	if (frame == NULL
+	    || !get_frame_address_in_block_if_available (frame, &pc))
+	  return false;
+
+	data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
+	if (data != NULL)
+	  {
+	    val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
+					    size, baton->loclist.per_cu,
+					    baton->loclist.per_objfile);
+	    if (!value_optimized_out (val))
+	      {
+		*value = value_as_address (val);
+		return true;
+	      }
+	  }
+      }
+      break;
+
+    case PROP_CONST:
+      *value = prop->const_val ();
+      return true;
+
+    case PROP_ADDR_OFFSET:
+      {
+	struct dwarf2_property_baton *baton
+	  = (struct dwarf2_property_baton *) prop->baton ();
+	const struct property_addr_info *pinfo;
+	struct value *val;
+
+	for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
+	  {
+	    /* This approach lets us avoid checking the qualifiers.  */
+	    if (TYPE_MAIN_TYPE (pinfo->type)
+		== TYPE_MAIN_TYPE (baton->property_type))
+	      break;
+	  }
+	if (pinfo == NULL)
+	  error (_("cannot find reference address for offset property"));
+	if (pinfo->valaddr.data () != NULL)
+	  val = value_from_contents
+		  (baton->offset_info.type,
+		   pinfo->valaddr.data () + baton->offset_info.offset);
+	else
+	  val = value_at (baton->offset_info.type,
+			  pinfo->addr + baton->offset_info.offset);
+	*value = value_as_address (val);
+	return true;
+      }
+
+    case PROP_VARIABLE_NAME:
+      {
+	struct value *val = compute_var_value (prop->variable_name ());
+	if (val != nullptr)
+	  {
+	    *value = value_as_long (val);
+	    return true;
+	  }
+      }
+      break;
+    }
+
+  return false;
+}
+
+/* See dwarf2loc.h.  */
+
+void
+dwarf2_compile_property_to_c (string_file *stream,
+			      const char *result_name,
+			      struct gdbarch *gdbarch,
+			      std::vector<bool> &registers_used,
+			      const struct dynamic_prop *prop,
+			      CORE_ADDR pc,
+			      struct symbol *sym)
+{
+  struct dwarf2_property_baton *baton
+    = (struct dwarf2_property_baton *) prop->baton ();
+  const gdb_byte *data;
+  size_t size;
+  dwarf2_per_cu_data *per_cu;
+  dwarf2_per_objfile *per_objfile;
+
+  if (prop->kind () == PROP_LOCEXPR)
+    {
+      data = baton->locexpr.data;
+      size = baton->locexpr.size;
+      per_cu = baton->locexpr.per_cu;
+      per_objfile = baton->locexpr.per_objfile;
+    }
+  else
+    {
+      gdb_assert (prop->kind () == PROP_LOCLIST);
+
+      data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
+      per_cu = baton->loclist.per_cu;
+      per_objfile = baton->loclist.per_objfile;
+    }
+
+  compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
+			     gdbarch, registers_used,
+			     per_cu->addr_size (),
+			     data, data + size, per_cu, per_objfile);
+}
+
+
+/* Helper functions and baton for dwarf2_loc_desc_get_symbol_read_needs.  */
+
+class symbol_needs_eval_context : public dwarf_expr_context
+{
+public:
+  symbol_needs_eval_context (dwarf2_per_objfile *per_objfile)
+    : dwarf_expr_context (per_objfile)
+  {}
+
+  enum symbol_needs_kind needs;
+  struct dwarf2_per_cu_data *per_cu;
+
+  /* Reads from registers do require a frame.  */
+  CORE_ADDR read_addr_from_reg (int regnum) override
+  {
+    needs = SYMBOL_NEEDS_FRAME;
+    return 1;
+  }
+
+  /* "get_reg_value" callback: Reads from registers do require a
+     frame.  */
+
+  struct value *get_reg_value (struct type *type, int regnum) override
+  {
+    needs = SYMBOL_NEEDS_FRAME;
+    return value_zero (type, not_lval);
+  }
+
+  /* Reads from memory do not require a frame.  */
+  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
+  {
+    memset (buf, 0, len);
+  }
+
+  /* Frame-relative accesses do require a frame.  */
+  void get_frame_base (const gdb_byte **start, size_t *length) override
+  {
+    static gdb_byte lit0 = DW_OP_lit0;
+
+    *start = &lit0;
+    *length = 1;
+
+    needs = SYMBOL_NEEDS_FRAME;
+  }
+
+  /* CFA accesses require a frame.  */
+  CORE_ADDR get_frame_cfa () override
+  {
+    needs = SYMBOL_NEEDS_FRAME;
+    return 1;
+  }
+
+  CORE_ADDR get_frame_pc () override
+  {
+    needs = SYMBOL_NEEDS_FRAME;
+    return 1;
+  }
+
+  /* Thread-local accesses require registers, but not a frame.  */
+  CORE_ADDR get_tls_address (CORE_ADDR offset) override
+  {
+    if (needs <= SYMBOL_NEEDS_REGISTERS)
+      needs = SYMBOL_NEEDS_REGISTERS;
+    return 1;
+  }
+
+  /* Helper interface of per_cu_dwarf_call for
+     dwarf2_loc_desc_get_symbol_read_needs.  */
+
+  void dwarf_call (cu_offset die_offset) override
+  {
+    per_cu_dwarf_call (this, die_offset, per_cu, per_objfile);
+  }
+
+  /* Helper interface of sect_variable_value for
+     dwarf2_loc_desc_get_symbol_read_needs.  */
+
+  struct value *dwarf_variable_value (sect_offset sect_off) override
+  {
+    return sect_variable_value (this, sect_off, per_cu, per_objfile);
+  }
+
+  /* DW_OP_entry_value accesses require a caller, therefore a
+     frame.  */
+
+  void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
+				   union call_site_parameter_u kind_u,
+				   int deref_size) override
+  {
+    needs = SYMBOL_NEEDS_FRAME;
+
+    /* The expression may require some stub values on DWARF stack.  */
+    push_address (0, 0);
+  }
+
+  /* DW_OP_addrx and DW_OP_GNU_addr_index doesn't require a frame.  */
+
+  CORE_ADDR get_addr_index (unsigned int index) override
+  {
+    /* Nothing to do.  */
+    return 1;
+  }
+
+  /* DW_OP_push_object_address has a frame already passed through.  */
+
+  CORE_ADDR get_object_address () override
+  {
+    /* Nothing to do.  */
+    return 1;
+  }
+};
+
+/* Compute the correct symbol_needs_kind value for the location
+   expression at DATA (length SIZE).  */
+
+static enum symbol_needs_kind
+dwarf2_loc_desc_get_symbol_read_needs (const gdb_byte *data, size_t size,
+				       dwarf2_per_cu_data *per_cu,
+				       dwarf2_per_objfile *per_objfile)
+{
+  scoped_value_mark free_values;
+
+  symbol_needs_eval_context ctx (per_objfile);
+
+  ctx.needs = SYMBOL_NEEDS_NONE;
+  ctx.per_cu = per_cu;
+  ctx.gdbarch = per_objfile->objfile->arch ();
+  ctx.addr_size = per_cu->addr_size ();
+  ctx.ref_addr_size = per_cu->ref_addr_size ();
+
+  ctx.eval (data, size);
+
+  bool in_reg = ctx.location == DWARF_VALUE_REGISTER;
+
+  /* If the location has several pieces, and any of them are in
+     registers, then we will need a frame to fetch them from.  */
+  for (dwarf_expr_piece &p : ctx.pieces)
+    if (p.location == DWARF_VALUE_REGISTER)
+      in_reg = true;
+
+  if (in_reg)
+    ctx.needs = SYMBOL_NEEDS_FRAME;
+
+  return ctx.needs;
+}
+
+/* A helper function that throws an unimplemented error mentioning a
+   given DWARF operator.  */
+
+static void ATTRIBUTE_NORETURN
+unimplemented (unsigned int op)
+{
+  const char *name = get_DW_OP_name (op);
+
+  if (name)
+    error (_("DWARF operator %s cannot be translated to an agent expression"),
+	   name);
+  else
+    error (_("Unknown DWARF operator 0x%02x cannot be translated "
+	     "to an agent expression"),
+	   op);
+}
+
+/* See dwarf2loc.h.
+
+   This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
+   can issue a complaint, which is better than having every target's
+   implementation of dwarf2_reg_to_regnum do it.  */
+
+int
+dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg)
+{
+  int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
+
+  if (reg == -1)
+    {
+      complaint (_("bad DWARF register number %d"), dwarf_reg);
+    }
+  return reg;
+}
+
+/* Subroutine of dwarf_reg_to_regnum_or_error to simplify it.
+   Throw an error because DWARF_REG is bad.  */
+
+static void
+throw_bad_regnum_error (ULONGEST dwarf_reg)
+{
+  /* Still want to print -1 as "-1".
+     We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error
+     but that's overkill for now.  */
+  if ((int) dwarf_reg == dwarf_reg)
+    error (_("Unable to access DWARF register number %d"), (int) dwarf_reg);
+  error (_("Unable to access DWARF register number %s"),
+	 pulongest (dwarf_reg));
+}
+
+/* See dwarf2loc.h.  */
+
+int
+dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
+{
+  int reg;
+
+  if (dwarf_reg > INT_MAX)
+    throw_bad_regnum_error (dwarf_reg);
+  /* Yes, we will end up issuing a complaint and an error if DWARF_REG is
+     bad, but that's ok.  */
+  reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg);
+  if (reg == -1)
+    throw_bad_regnum_error (dwarf_reg);
+  return reg;
+}
+
+/* A helper function that emits an access to memory.  ARCH is the
+   target architecture.  EXPR is the expression which we are building.
+   NBITS is the number of bits we want to read.  This emits the
+   opcodes needed to read the memory and then extract the desired
+   bits.  */
+
+static void
+access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
+{
+  ULONGEST nbytes = (nbits + 7) / 8;
+
+  gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
+
+  if (expr->tracing)
+    ax_trace_quick (expr, nbytes);
+
+  if (nbits <= 8)
+    ax_simple (expr, aop_ref8);
+  else if (nbits <= 16)
+    ax_simple (expr, aop_ref16);
+  else if (nbits <= 32)
+    ax_simple (expr, aop_ref32);
+  else
+    ax_simple (expr, aop_ref64);
+
+  /* If we read exactly the number of bytes we wanted, we're done.  */
+  if (8 * nbytes == nbits)
+    return;
+
+  if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
+    {
+      /* On a bits-big-endian machine, we want the high-order
+	 NBITS.  */
+      ax_const_l (expr, 8 * nbytes - nbits);
+      ax_simple (expr, aop_rsh_unsigned);
+    }
+  else
+    {
+      /* On a bits-little-endian box, we want the low-order NBITS.  */
+      ax_zero_ext (expr, nbits);
+    }
+}
+
+/* Compile a DWARF location expression to an agent expression.
+   
+   EXPR is the agent expression we are building.
+   LOC is the agent value we modify.
+   ARCH is the architecture.
+   ADDR_SIZE is the size of addresses, in bytes.
+   OP_PTR is the start of the location expression.
+   OP_END is one past the last byte of the location expression.
+   
+   This will throw an exception for various kinds of errors -- for
+   example, if the expression cannot be compiled, or if the expression
+   is invalid.  */
+
+static void
+dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
+			   unsigned int addr_size, const gdb_byte *op_ptr,
+			   const gdb_byte *op_end,
+			   dwarf2_per_cu_data *per_cu,
+			   dwarf2_per_objfile *per_objfile)
+{
+  gdbarch *arch = expr->gdbarch;
+  std::vector<int> dw_labels, patches;
+  const gdb_byte * const base = op_ptr;
+  const gdb_byte *previous_piece = op_ptr;
+  enum bfd_endian byte_order = gdbarch_byte_order (arch);
+  ULONGEST bits_collected = 0;
+  unsigned int addr_size_bits = 8 * addr_size;
+  bool bits_big_endian = byte_order == BFD_ENDIAN_BIG;
+
+  std::vector<int> offsets (op_end - op_ptr, -1);
+
+  /* By default we are making an address.  */
+  loc->kind = axs_lvalue_memory;
+
+  while (op_ptr < op_end)
+    {
+      enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
+      uint64_t uoffset, reg;
+      int64_t offset;
+      int i;
+
+      offsets[op_ptr - base] = expr->len;
+      ++op_ptr;
+
+      /* Our basic approach to code generation is to map DWARF
+	 operations directly to AX operations.  However, there are
+	 some differences.
+
+	 First, DWARF works on address-sized units, but AX always uses
+	 LONGEST.  For most operations we simply ignore this
+	 difference; instead we generate sign extensions as needed
+	 before division and comparison operations.  It would be nice
+	 to omit the sign extensions, but there is no way to determine
+	 the size of the target's LONGEST.  (This code uses the size
+	 of the host LONGEST in some cases -- that is a bug but it is
+	 difficult to fix.)
+
+	 Second, some DWARF operations cannot be translated to AX.
+	 For these we simply fail.  See
+	 http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
+      switch (op)
+	{
+	case DW_OP_lit0:
+	case DW_OP_lit1:
+	case DW_OP_lit2:
+	case DW_OP_lit3:
+	case DW_OP_lit4:
+	case DW_OP_lit5:
+	case DW_OP_lit6:
+	case DW_OP_lit7:
+	case DW_OP_lit8:
+	case DW_OP_lit9:
+	case DW_OP_lit10:
+	case DW_OP_lit11:
+	case DW_OP_lit12:
+	case DW_OP_lit13:
+	case DW_OP_lit14:
+	case DW_OP_lit15:
+	case DW_OP_lit16:
+	case DW_OP_lit17:
+	case DW_OP_lit18:
+	case DW_OP_lit19:
+	case DW_OP_lit20:
+	case DW_OP_lit21:
+	case DW_OP_lit22:
+	case DW_OP_lit23:
+	case DW_OP_lit24:
+	case DW_OP_lit25:
+	case DW_OP_lit26:
+	case DW_OP_lit27:
+	case DW_OP_lit28:
+	case DW_OP_lit29:
+	case DW_OP_lit30:
+	case DW_OP_lit31:
+	  ax_const_l (expr, op - DW_OP_lit0);
+	  break;
+
+	case DW_OP_addr:
+	  uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
+	  op_ptr += addr_size;
+	  /* Some versions of GCC emit DW_OP_addr before
+	     DW_OP_GNU_push_tls_address.  In this case the value is an
+	     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 += per_objfile->objfile->text_section_offset ();
+	  ax_const_l (expr, uoffset);
+	  break;
+
+	case DW_OP_const1u:
+	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
+	  op_ptr += 1;
+	  break;
+
+	case DW_OP_const1s:
+	  ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
+	  op_ptr += 1;
+	  break;
+
+	case DW_OP_const2u:
+	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
+	  op_ptr += 2;
+	  break;
+
+	case DW_OP_const2s:
+	  ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
+	  op_ptr += 2;
+	  break;
+
+	case DW_OP_const4u:
+	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
+	  op_ptr += 4;
+	  break;
+
+	case DW_OP_const4s:
+	  ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
+	  op_ptr += 4;
+	  break;
+
+	case DW_OP_const8u:
+	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
+	  op_ptr += 8;
+	  break;
+
+	case DW_OP_const8s:
+	  ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
+	  op_ptr += 8;
+	  break;
+
+	case DW_OP_constu:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	  ax_const_l (expr, uoffset);
+	  break;
+
+	case DW_OP_consts:
+	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	  ax_const_l (expr, offset);
+	  break;
+
+	case DW_OP_reg0:
+	case DW_OP_reg1:
+	case DW_OP_reg2:
+	case DW_OP_reg3:
+	case DW_OP_reg4:
+	case DW_OP_reg5:
+	case DW_OP_reg6:
+	case DW_OP_reg7:
+	case DW_OP_reg8:
+	case DW_OP_reg9:
+	case DW_OP_reg10:
+	case DW_OP_reg11:
+	case DW_OP_reg12:
+	case DW_OP_reg13:
+	case DW_OP_reg14:
+	case DW_OP_reg15:
+	case DW_OP_reg16:
+	case DW_OP_reg17:
+	case DW_OP_reg18:
+	case DW_OP_reg19:
+	case DW_OP_reg20:
+	case DW_OP_reg21:
+	case DW_OP_reg22:
+	case DW_OP_reg23:
+	case DW_OP_reg24:
+	case DW_OP_reg25:
+	case DW_OP_reg26:
+	case DW_OP_reg27:
+	case DW_OP_reg28:
+	case DW_OP_reg29:
+	case DW_OP_reg30:
+	case DW_OP_reg31:
+	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
+	  loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0);
+	  loc->kind = axs_lvalue_register;
+	  break;
+
+	case DW_OP_regx:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
+	  loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg);
+	  loc->kind = axs_lvalue_register;
+	  break;
+
+	case DW_OP_implicit_value:
+	  {
+	    uint64_t len;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
+	    if (op_ptr + len > op_end)
+	      error (_("DW_OP_implicit_value: too few bytes available."));
+	    if (len > sizeof (ULONGEST))
+	      error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
+		     (int) len);
+
+	    ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
+							byte_order));
+	    op_ptr += len;
+	    dwarf_expr_require_composition (op_ptr, op_end,
+					    "DW_OP_implicit_value");
+
+	    loc->kind = axs_rvalue;
+	  }
+	  break;
+
+	case DW_OP_stack_value:
+	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
+	  loc->kind = axs_rvalue;
+	  break;
+
+	case DW_OP_breg0:
+	case DW_OP_breg1:
+	case DW_OP_breg2:
+	case DW_OP_breg3:
+	case DW_OP_breg4:
+	case DW_OP_breg5:
+	case DW_OP_breg6:
+	case DW_OP_breg7:
+	case DW_OP_breg8:
+	case DW_OP_breg9:
+	case DW_OP_breg10:
+	case DW_OP_breg11:
+	case DW_OP_breg12:
+	case DW_OP_breg13:
+	case DW_OP_breg14:
+	case DW_OP_breg15:
+	case DW_OP_breg16:
+	case DW_OP_breg17:
+	case DW_OP_breg18:
+	case DW_OP_breg19:
+	case DW_OP_breg20:
+	case DW_OP_breg21:
+	case DW_OP_breg22:
+	case DW_OP_breg23:
+	case DW_OP_breg24:
+	case DW_OP_breg25:
+	case DW_OP_breg26:
+	case DW_OP_breg27:
+	case DW_OP_breg28:
+	case DW_OP_breg29:
+	case DW_OP_breg30:
+	case DW_OP_breg31:
+	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	  i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0);
+	  ax_reg (expr, i);
+	  if (offset != 0)
+	    {
+	      ax_const_l (expr, offset);
+	      ax_simple (expr, aop_add);
+	    }
+	  break;
+
+	case DW_OP_bregx:
+	  {
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	    i = dwarf_reg_to_regnum_or_error (arch, reg);
+	    ax_reg (expr, i);
+	    if (offset != 0)
+	      {
+		ax_const_l (expr, offset);
+		ax_simple (expr, aop_add);
+	      }
+	  }
+	  break;
+
+	case DW_OP_fbreg:
+	  {
+	    const gdb_byte *datastart;
+	    size_t datalen;
+	    const struct block *b;
+	    struct symbol *framefunc;
+
+	    b = block_for_pc (expr->scope);
+
+	    if (!b)
+	      error (_("No block found for address"));
+
+	    framefunc = block_linkage_function (b);
+
+	    if (!framefunc)
+	      error (_("No function found for block"));
+
+	    func_get_frame_base_dwarf_block (framefunc, expr->scope,
+					     &datastart, &datalen);
+
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
+	    dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
+				       datastart + datalen, per_cu,
+				       per_objfile);
+	    if (loc->kind == axs_lvalue_register)
+	      require_rvalue (expr, loc);
+
+	    if (offset != 0)
+	      {
+		ax_const_l (expr, offset);
+		ax_simple (expr, aop_add);
+	      }
+
+	    loc->kind = axs_lvalue_memory;
+	  }
+	  break;
+
+	case DW_OP_dup:
+	  ax_simple (expr, aop_dup);
+	  break;
+
+	case DW_OP_drop:
+	  ax_simple (expr, aop_pop);
+	  break;
+
+	case DW_OP_pick:
+	  offset = *op_ptr++;
+	  ax_pick (expr, offset);
+	  break;
+
+	case DW_OP_swap:
+	  ax_simple (expr, aop_swap);
+	  break;
+
+	case DW_OP_over:
+	  ax_pick (expr, 1);
+	  break;
+
+	case DW_OP_rot:
+	  ax_simple (expr, aop_rot);
+	  break;
+
+	case DW_OP_deref:
+	case DW_OP_deref_size:
+	  {
+	    int size;
+
+	    if (op == DW_OP_deref_size)
+	      size = *op_ptr++;
+	    else
+	      size = addr_size;
+
+	    if (size != 1 && size != 2 && size != 4 && size != 8)
+	      error (_("Unsupported size %d in %s"),
+		     size, get_DW_OP_name (op));
+	    access_memory (arch, expr, size * TARGET_CHAR_BIT);
+	  }
+	  break;
+
+	case DW_OP_abs:
+	  /* Sign extend the operand.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_dup);
+	  ax_const_l (expr, 0);
+	  ax_simple (expr, aop_less_signed);
+	  ax_simple (expr, aop_log_not);
+	  i = ax_goto (expr, aop_if_goto);
+	  /* We have to emit 0 - X.  */
+	  ax_const_l (expr, 0);
+	  ax_simple (expr, aop_swap);
+	  ax_simple (expr, aop_sub);
+	  ax_label (expr, i, expr->len);
+	  break;
+
+	case DW_OP_neg:
+	  /* No need to sign extend here.  */
+	  ax_const_l (expr, 0);
+	  ax_simple (expr, aop_swap);
+	  ax_simple (expr, aop_sub);
+	  break;
+
+	case DW_OP_not:
+	  /* Sign extend the operand.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_bit_not);
+	  break;
+
+	case DW_OP_plus_uconst:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	  /* It would be really weird to emit `DW_OP_plus_uconst 0',
+	     but we micro-optimize anyhow.  */
+	  if (reg != 0)
+	    {
+	      ax_const_l (expr, reg);
+	      ax_simple (expr, aop_add);
+	    }
+	  break;
+
+	case DW_OP_and:
+	  ax_simple (expr, aop_bit_and);
+	  break;
+
+	case DW_OP_div:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_simple (expr, aop_div_signed);
+	  break;
+
+	case DW_OP_minus:
+	  ax_simple (expr, aop_sub);
+	  break;
+
+	case DW_OP_mod:
+	  ax_simple (expr, aop_rem_unsigned);
+	  break;
+
+	case DW_OP_mul:
+	  ax_simple (expr, aop_mul);
+	  break;
+
+	case DW_OP_or:
+	  ax_simple (expr, aop_bit_or);
+	  break;
+
+	case DW_OP_plus:
+	  ax_simple (expr, aop_add);
+	  break;
+
+	case DW_OP_shl:
+	  ax_simple (expr, aop_lsh);
+	  break;
+
+	case DW_OP_shr:
+	  ax_simple (expr, aop_rsh_unsigned);
+	  break;
+
+	case DW_OP_shra:
+	  ax_simple (expr, aop_rsh_signed);
+	  break;
+
+	case DW_OP_xor:
+	  ax_simple (expr, aop_bit_xor);
+	  break;
+
+	case DW_OP_le:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  /* Note no swap here: A <= B is !(B < A).  */
+	  ax_simple (expr, aop_less_signed);
+	  ax_simple (expr, aop_log_not);
+	  break;
+
+	case DW_OP_ge:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  /* A >= B is !(A < B).  */
+	  ax_simple (expr, aop_less_signed);
+	  ax_simple (expr, aop_log_not);
+	  break;
+
+	case DW_OP_eq:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  /* No need for a second swap here.  */
+	  ax_simple (expr, aop_equal);
+	  break;
+
+	case DW_OP_lt:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_simple (expr, aop_less_signed);
+	  break;
+
+	case DW_OP_gt:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  /* Note no swap here: A > B is B < A.  */
+	  ax_simple (expr, aop_less_signed);
+	  break;
+
+	case DW_OP_ne:
+	  /* Sign extend the operands.  */
+	  ax_ext (expr, addr_size_bits);
+	  ax_simple (expr, aop_swap);
+	  ax_ext (expr, addr_size_bits);
+	  /* No need for a swap here.  */
+	  ax_simple (expr, aop_equal);
+	  ax_simple (expr, aop_log_not);
+	  break;
+
+	case DW_OP_call_frame_cfa:
+	  {
+	    int regnum;
+	    CORE_ADDR text_offset;
+	    LONGEST off;
+	    const gdb_byte *cfa_start, *cfa_end;
+
+	    if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu,
+				       &regnum, &off,
+				       &text_offset, &cfa_start, &cfa_end))
+	      {
+		/* Register.  */
+		ax_reg (expr, regnum);
+		if (off != 0)
+		  {
+		    ax_const_l (expr, off);
+		    ax_simple (expr, aop_add);
+		  }
+	      }
+	    else
+	      {
+		/* Another expression.  */
+		ax_const_l (expr, text_offset);
+		dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
+					   cfa_end, per_cu, per_objfile);
+	      }
+
+	    loc->kind = axs_lvalue_memory;
+	  }
+	  break;
+
+	case DW_OP_GNU_push_tls_address:
+	case DW_OP_form_tls_address:
+	  unimplemented (op);
+	  break;
+
+	case DW_OP_push_object_address:
+	  unimplemented (op);
+	  break;
+
+	case DW_OP_skip:
+	  offset = extract_signed_integer (op_ptr, 2, byte_order);
+	  op_ptr += 2;
+	  i = ax_goto (expr, aop_goto);
+	  dw_labels.push_back (op_ptr + offset - base);
+	  patches.push_back (i);
+	  break;
+
+	case DW_OP_bra:
+	  offset = extract_signed_integer (op_ptr, 2, byte_order);
+	  op_ptr += 2;
+	  /* Zero extend the operand.  */
+	  ax_zero_ext (expr, addr_size_bits);
+	  i = ax_goto (expr, aop_if_goto);
+	  dw_labels.push_back (op_ptr + offset - base);
+	  patches.push_back (i);
+	  break;
+
+	case DW_OP_nop:
+	  break;
+
+	case DW_OP_piece:
+	case DW_OP_bit_piece:
+	  {
+	    uint64_t size;
+
+	    if (op_ptr - 1 == previous_piece)
+	      error (_("Cannot translate empty pieces to agent expressions"));
+	    previous_piece = op_ptr - 1;
+
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
+	    if (op == DW_OP_piece)
+	      {
+		size *= 8;
+		uoffset = 0;
+	      }
+	    else
+	      op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+
+	    if (bits_collected + size > 8 * sizeof (LONGEST))
+	      error (_("Expression pieces exceed word size"));
+
+	    /* Access the bits.  */
+	    switch (loc->kind)
+	      {
+	      case axs_lvalue_register:
+		ax_reg (expr, loc->u.reg);
+		break;
+
+	      case axs_lvalue_memory:
+		/* Offset the pointer, if needed.  */
+		if (uoffset > 8)
+		  {
+		    ax_const_l (expr, uoffset / 8);
+		    ax_simple (expr, aop_add);
+		    uoffset %= 8;
+		  }
+		access_memory (arch, expr, size);
+		break;
+	      }
+
+	    /* For a bits-big-endian target, shift up what we already
+	       have.  For a bits-little-endian target, shift up the
+	       new data.  Note that there is a potential bug here if
+	       the DWARF expression leaves multiple values on the
+	       stack.  */
+	    if (bits_collected > 0)
+	      {
+		if (bits_big_endian)
+		  {
+		    ax_simple (expr, aop_swap);
+		    ax_const_l (expr, size);
+		    ax_simple (expr, aop_lsh);
+		    /* We don't need a second swap here, because
+		       aop_bit_or is symmetric.  */
+		  }
+		else
+		  {
+		    ax_const_l (expr, size);
+		    ax_simple (expr, aop_lsh);
+		  }
+		ax_simple (expr, aop_bit_or);
+	      }
+
+	    bits_collected += size;
+	    loc->kind = axs_rvalue;
+	  }
+	  break;
+
+	case DW_OP_GNU_uninit:
+	  unimplemented (op);
+
+	case DW_OP_call2:
+	case DW_OP_call4:
+	  {
+	    struct dwarf2_locexpr_baton block;
+	    int size = (op == DW_OP_call2 ? 2 : 4);
+
+	    uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
+	    op_ptr += size;
+
+	    auto get_frame_pc_from_expr = [expr] ()
+	      {
+		return expr->scope;
+	      };
+	    cu_offset cuoffset = (cu_offset) uoffset;
+	    block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu, per_objfile,
+						 get_frame_pc_from_expr);
+
+	    /* DW_OP_call_ref is currently not supported.  */
+	    gdb_assert (block.per_cu == per_cu);
+
+	    dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
+				       block.data + block.size, per_cu,
+				       per_objfile);
+	  }
+	  break;
+
+	case DW_OP_call_ref:
+	  unimplemented (op);
+
+	case DW_OP_GNU_variable_value:
+	  unimplemented (op);
+
+	default:
+	  unimplemented (op);
+	}
+    }
+
+  /* Patch all the branches we emitted.  */
+  for (int i = 0; i < patches.size (); ++i)
+    {
+      int targ = offsets[dw_labels[i]];
+      if (targ == -1)
+	internal_error (__FILE__, __LINE__, _("invalid label"));
+      ax_label (expr, patches[i], targ);
+    }
+}
+
+
+/* Return the value of SYMBOL in FRAME using the DWARF-2 expression
+   evaluator to calculate the location.  */
+static struct value *
+locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
+{
+  struct dwarf2_locexpr_baton *dlbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+  struct value *val;
+
+  val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
+				  dlbaton->size, dlbaton->per_cu,
+				  dlbaton->per_objfile);
+
+  return val;
+}
+
+/* Return the value of SYMBOL in FRAME at (callee) FRAME's function
+   entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
+   will be thrown.  */
+
+static struct value *
+locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
+{
+  struct dwarf2_locexpr_baton *dlbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+
+  return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
+				     dlbaton->size);
+}
+
+/* Implementation of get_symbol_read_needs from
+   symbol_computed_ops.  */
+
+static enum symbol_needs_kind
+locexpr_get_symbol_read_needs (struct symbol *symbol)
+{
+  struct dwarf2_locexpr_baton *dlbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+
+  return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size,
+						dlbaton->per_cu,
+						dlbaton->per_objfile);
+}
+
+/* Return true if DATA points to the end of a piece.  END is one past
+   the last byte in the expression.  */
+
+static int
+piece_end_p (const gdb_byte *data, const gdb_byte *end)
+{
+  return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
+}
+
+/* Helper for locexpr_describe_location_piece that finds the name of a
+   DWARF register.  */
+
+static const char *
+locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
+{
+  int regnum;
+
+  /* This doesn't use dwarf_reg_to_regnum_or_error on purpose.
+     We'd rather print *something* here than throw an error.  */
+  regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum);
+  /* gdbarch_register_name may just return "", return something more
+     descriptive for bad register numbers.  */
+  if (regnum == -1)
+    {
+      /* The text is output as "$bad_register_number".
+	 That is why we use the underscores.  */
+      return _("bad_register_number");
+    }
+  return gdbarch_register_name (gdbarch, regnum);
+}
+
+/* Nicely describe a single piece of a location, returning an updated
+   position in the bytecode sequence.  This function cannot recognize
+   all locations; if a location is not recognized, it simply returns
+   DATA.  If there is an error during reading, e.g. we run off the end
+   of the buffer, an error is thrown.  */
+
+static const gdb_byte *
+locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
+				 CORE_ADDR addr, dwarf2_per_cu_data *per_cu,
+				 dwarf2_per_objfile *per_objfile,
+				 const gdb_byte *data, const gdb_byte *end,
+				 unsigned int addr_size)
+{
+  objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  size_t leb128_size;
+
+  if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
+    {
+      fprintf_filtered (stream, _("a variable in $%s"),
+			locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
+      data += 1;
+    }
+  else if (data[0] == DW_OP_regx)
+    {
+      uint64_t reg;
+
+      data = safe_read_uleb128 (data + 1, end, &reg);
+      fprintf_filtered (stream, _("a variable in $%s"),
+			locexpr_regname (gdbarch, reg));
+    }
+  else if (data[0] == DW_OP_fbreg)
+    {
+      const struct block *b;
+      struct symbol *framefunc;
+      int frame_reg = 0;
+      int64_t frame_offset;
+      const gdb_byte *base_data, *new_data, *save_data = data;
+      size_t base_size;
+      int64_t base_offset = 0;
+
+      new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
+      if (!piece_end_p (new_data, end))
+	return data;
+      data = new_data;
+
+      b = block_for_pc (addr);
+
+      if (!b)
+	error (_("No block found for address for symbol \"%s\"."),
+	       symbol->print_name ());
+
+      framefunc = block_linkage_function (b);
+
+      if (!framefunc)
+	error (_("No function found for block for symbol \"%s\"."),
+	       symbol->print_name ());
+
+      func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size);
+
+      if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
+	{
+	  const gdb_byte *buf_end;
+	  
+	  frame_reg = base_data[0] - DW_OP_breg0;
+	  buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
+				       &base_offset);
+	  if (buf_end != base_data + base_size)
+	    error (_("Unexpected opcode after "
+		     "DW_OP_breg%u for symbol \"%s\"."),
+		   frame_reg, symbol->print_name ());
+	}
+      else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
+	{
+	  /* The frame base is just the register, with no offset.  */
+	  frame_reg = base_data[0] - DW_OP_reg0;
+	  base_offset = 0;
+	}
+      else
+	{
+	  /* We don't know what to do with the frame base expression,
+	     so we can't trace this variable; give up.  */
+	  return save_data;
+	}
+
+      fprintf_filtered (stream,
+			_("a variable at frame base reg $%s offset %s+%s"),
+			locexpr_regname (gdbarch, frame_reg),
+			plongest (base_offset), plongest (frame_offset));
+    }
+  else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
+	   && piece_end_p (data, end))
+    {
+      int64_t offset;
+
+      data = safe_read_sleb128 (data + 1, end, &offset);
+
+      fprintf_filtered (stream,
+			_("a variable at offset %s from base reg $%s"),
+			plongest (offset),
+			locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
+    }
+
+  /* The location expression for a TLS variable looks like this (on a
+     64-bit LE machine):
+
+     DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
+			(DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
+
+     0x3 is the encoding for DW_OP_addr, which has an operand as long
+     as the size of an address on the target machine (here is 8
+     bytes).  Note that more recent version of GCC emit DW_OP_const4u
+     or DW_OP_const8u, depending on address size, rather than
+     DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
+     The operand represents the offset at which the variable is within
+     the thread local storage.  */
+
+  else if (data + 1 + addr_size < end
+	   && (data[0] == DW_OP_addr
+	       || (addr_size == 4 && data[0] == DW_OP_const4u)
+	       || (addr_size == 8 && data[0] == DW_OP_const8u))
+	   && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
+	       || data[1 + addr_size] == DW_OP_form_tls_address)
+	   && piece_end_p (data + 2 + addr_size, end))
+    {
+      ULONGEST offset;
+      offset = extract_unsigned_integer (data + 1, addr_size,
+					 gdbarch_byte_order (gdbarch));
+
+      fprintf_filtered (stream, 
+			_("a thread-local variable at offset 0x%s "
+			  "in the thread-local storage for `%s'"),
+			phex_nz (offset, addr_size), objfile_name (objfile));
+
+      data += 1 + addr_size + 1;
+    }
+
+  /* With -gsplit-dwarf a TLS variable can also look like this:
+     DW_AT_location    : 3 byte block: fc 4 e0
+			(DW_OP_GNU_const_index: 4;
+			 DW_OP_GNU_push_tls_address)  */
+  else if (data + 3 <= end
+	   && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
+	   && data[0] == DW_OP_GNU_const_index
+	   && leb128_size > 0
+	   && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
+	       || data[1 + leb128_size] == DW_OP_form_tls_address)
+	   && piece_end_p (data + 2 + leb128_size, end))
+    {
+      uint64_t offset;
+
+      data = safe_read_uleb128 (data + 1, end, &offset);
+      offset = dwarf2_read_addr_index (per_cu, per_objfile, offset);
+      fprintf_filtered (stream, 
+			_("a thread-local variable at offset 0x%s "
+			  "in the thread-local storage for `%s'"),
+			phex_nz (offset, addr_size), objfile_name (objfile));
+      ++data;
+    }
+
+  else if (data[0] >= DW_OP_lit0
+	   && data[0] <= DW_OP_lit31
+	   && data + 1 < end
+	   && data[1] == DW_OP_stack_value)
+    {
+      fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
+      data += 2;
+    }
+
+  return data;
+}
+
+/* Disassemble an expression, stopping at the end of a piece or at the
+   end of the expression.  Returns a pointer to the next unread byte
+   in the input expression.  If ALL is nonzero, then this function
+   will keep going until it reaches the end of the expression.
+   If there is an error during reading, e.g. we run off the end
+   of the buffer, an error is thrown.  */
+
+static const gdb_byte *
+disassemble_dwarf_expression (struct ui_file *stream,
+			      struct gdbarch *arch, unsigned int addr_size,
+			      int offset_size, const gdb_byte *start,
+			      const gdb_byte *data, const gdb_byte *end,
+			      int indent, int all,
+			      dwarf2_per_cu_data *per_cu,
+			      dwarf2_per_objfile *per_objfile)
+{
+  while (data < end
+	 && (all
+	     || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
+    {
+      enum dwarf_location_atom op = (enum dwarf_location_atom) *data++;
+      uint64_t ul;
+      int64_t l;
+      const char *name;
+
+      name = get_DW_OP_name (op);
+
+      if (!name)
+	error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
+	       op, (long) (data - 1 - start));
+      fprintf_filtered (stream, "  %*ld: %s", indent + 4,
+			(long) (data - 1 - start), name);
+
+      switch (op)
+	{
+	case DW_OP_addr:
+	  ul = extract_unsigned_integer (data, addr_size,
+					 gdbarch_byte_order (arch));
+	  data += addr_size;
+	  fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
+	  break;
+
+	case DW_OP_const1u:
+	  ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
+	  data += 1;
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_const1s:
+	  l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
+	  data += 1;
+	  fprintf_filtered (stream, " %s", plongest (l));
+	  break;
+
+	case DW_OP_const2u:
+	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
+	  data += 2;
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_const2s:
+	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
+	  data += 2;
+	  fprintf_filtered (stream, " %s", plongest (l));
+	  break;
+
+	case DW_OP_const4u:
+	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
+	  data += 4;
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_const4s:
+	  l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
+	  data += 4;
+	  fprintf_filtered (stream, " %s", plongest (l));
+	  break;
+
+	case DW_OP_const8u:
+	  ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
+	  data += 8;
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_const8s:
+	  l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
+	  data += 8;
+	  fprintf_filtered (stream, " %s", plongest (l));
+	  break;
+
+	case DW_OP_constu:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_consts:
+	  data = safe_read_sleb128 (data, end, &l);
+	  fprintf_filtered (stream, " %s", plongest (l));
+	  break;
+
+	case DW_OP_reg0:
+	case DW_OP_reg1:
+	case DW_OP_reg2:
+	case DW_OP_reg3:
+	case DW_OP_reg4:
+	case DW_OP_reg5:
+	case DW_OP_reg6:
+	case DW_OP_reg7:
+	case DW_OP_reg8:
+	case DW_OP_reg9:
+	case DW_OP_reg10:
+	case DW_OP_reg11:
+	case DW_OP_reg12:
+	case DW_OP_reg13:
+	case DW_OP_reg14:
+	case DW_OP_reg15:
+	case DW_OP_reg16:
+	case DW_OP_reg17:
+	case DW_OP_reg18:
+	case DW_OP_reg19:
+	case DW_OP_reg20:
+	case DW_OP_reg21:
+	case DW_OP_reg22:
+	case DW_OP_reg23:
+	case DW_OP_reg24:
+	case DW_OP_reg25:
+	case DW_OP_reg26:
+	case DW_OP_reg27:
+	case DW_OP_reg28:
+	case DW_OP_reg29:
+	case DW_OP_reg30:
+	case DW_OP_reg31:
+	  fprintf_filtered (stream, " [$%s]",
+			    locexpr_regname (arch, op - DW_OP_reg0));
+	  break;
+
+	case DW_OP_regx:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
+			    locexpr_regname (arch, (int) ul));
+	  break;
+
+	case DW_OP_implicit_value:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  data += ul;
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_breg0:
+	case DW_OP_breg1:
+	case DW_OP_breg2:
+	case DW_OP_breg3:
+	case DW_OP_breg4:
+	case DW_OP_breg5:
+	case DW_OP_breg6:
+	case DW_OP_breg7:
+	case DW_OP_breg8:
+	case DW_OP_breg9:
+	case DW_OP_breg10:
+	case DW_OP_breg11:
+	case DW_OP_breg12:
+	case DW_OP_breg13:
+	case DW_OP_breg14:
+	case DW_OP_breg15:
+	case DW_OP_breg16:
+	case DW_OP_breg17:
+	case DW_OP_breg18:
+	case DW_OP_breg19:
+	case DW_OP_breg20:
+	case DW_OP_breg21:
+	case DW_OP_breg22:
+	case DW_OP_breg23:
+	case DW_OP_breg24:
+	case DW_OP_breg25:
+	case DW_OP_breg26:
+	case DW_OP_breg27:
+	case DW_OP_breg28:
+	case DW_OP_breg29:
+	case DW_OP_breg30:
+	case DW_OP_breg31:
+	  data = safe_read_sleb128 (data, end, &l);
+	  fprintf_filtered (stream, " %s [$%s]", plongest (l),
+			    locexpr_regname (arch, op - DW_OP_breg0));
+	  break;
+
+	case DW_OP_bregx:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  data = safe_read_sleb128 (data, end, &l);
+	  fprintf_filtered (stream, " register %s [$%s] offset %s",
+			    pulongest (ul),
+			    locexpr_regname (arch, (int) ul),
+			    plongest (l));
+	  break;
+
+	case DW_OP_fbreg:
+	  data = safe_read_sleb128 (data, end, &l);
+	  fprintf_filtered (stream, " %s", plongest (l));
+	  break;
+
+	case DW_OP_xderef_size:
+	case DW_OP_deref_size:
+	case DW_OP_pick:
+	  fprintf_filtered (stream, " %d", *data);
+	  ++data;
+	  break;
+
+	case DW_OP_plus_uconst:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_skip:
+	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
+	  data += 2;
+	  fprintf_filtered (stream, " to %ld",
+			    (long) (data + l - start));
+	  break;
+
+	case DW_OP_bra:
+	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
+	  data += 2;
+	  fprintf_filtered (stream, " %ld",
+			    (long) (data + l - start));
+	  break;
+
+	case DW_OP_call2:
+	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
+	  data += 2;
+	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
+	  break;
+
+	case DW_OP_call4:
+	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
+	  data += 4;
+	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
+	  break;
+
+	case DW_OP_call_ref:
+	  ul = extract_unsigned_integer (data, offset_size,
+					 gdbarch_byte_order (arch));
+	  data += offset_size;
+	  fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
+	  break;
+
+	case DW_OP_piece:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
+	  break;
+
+	case DW_OP_bit_piece:
+	  {
+	    uint64_t offset;
+
+	    data = safe_read_uleb128 (data, end, &ul);
+	    data = safe_read_uleb128 (data, end, &offset);
+	    fprintf_filtered (stream, " size %s offset %s (bits)",
+			      pulongest (ul), pulongest (offset));
+	  }
+	  break;
+
+	case DW_OP_implicit_pointer:
+	case DW_OP_GNU_implicit_pointer:
+	  {
+	    ul = extract_unsigned_integer (data, offset_size,
+					   gdbarch_byte_order (arch));
+	    data += offset_size;
+
+	    data = safe_read_sleb128 (data, end, &l);
+
+	    fprintf_filtered (stream, " DIE %s offset %s",
+			      phex_nz (ul, offset_size),
+			      plongest (l));
+	  }
+	  break;
+
+	case DW_OP_deref_type:
+	case DW_OP_GNU_deref_type:
+	  {
+	    int deref_addr_size = *data++;
+	    struct type *type;
+
+	    data = safe_read_uleb128 (data, end, &ul);
+	    cu_offset offset = (cu_offset) ul;
+	    type = dwarf2_get_die_type (offset, per_cu, per_objfile);
+	    fprintf_filtered (stream, "<");
+	    type_print (type, "", stream, -1);
+	    fprintf_filtered (stream, " [0x%s]> %d",
+			      phex_nz (to_underlying (offset), 0),
+			      deref_addr_size);
+	  }
+	  break;
+
+	case DW_OP_const_type:
+	case DW_OP_GNU_const_type:
+	  {
+	    struct type *type;
+
+	    data = safe_read_uleb128 (data, end, &ul);
+	    cu_offset type_die = (cu_offset) ul;
+	    type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
+	    fprintf_filtered (stream, "<");
+	    type_print (type, "", stream, -1);
+	    fprintf_filtered (stream, " [0x%s]>",
+			      phex_nz (to_underlying (type_die), 0));
+
+	    int n = *data++;
+	    fprintf_filtered (stream, " %d byte block:", n);
+	    for (int i = 0; i < n; ++i)
+	      fprintf_filtered (stream, " %02x", data[i]);
+	    data += n;
+	  }
+	  break;
+
+	case DW_OP_regval_type:
+	case DW_OP_GNU_regval_type:
+	  {
+	    uint64_t reg;
+	    struct type *type;
+
+	    data = safe_read_uleb128 (data, end, &reg);
+	    data = safe_read_uleb128 (data, end, &ul);
+	    cu_offset type_die = (cu_offset) ul;
+
+	    type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
+	    fprintf_filtered (stream, "<");
+	    type_print (type, "", stream, -1);
+	    fprintf_filtered (stream, " [0x%s]> [$%s]",
+			      phex_nz (to_underlying (type_die), 0),
+			      locexpr_regname (arch, reg));
+	  }
+	  break;
+
+	case DW_OP_convert:
+	case DW_OP_GNU_convert:
+	case DW_OP_reinterpret:
+	case DW_OP_GNU_reinterpret:
+	  {
+	    data = safe_read_uleb128 (data, end, &ul);
+	    cu_offset type_die = (cu_offset) ul;
+
+	    if (to_underlying (type_die) == 0)
+	      fprintf_filtered (stream, "<0>");
+	    else
+	      {
+		struct type *type;
+
+		type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
+		fprintf_filtered (stream, "<");
+		type_print (type, "", stream, -1);
+		fprintf_filtered (stream, " [0x%s]>",
+				  phex_nz (to_underlying (type_die), 0));
+	      }
+	  }
+	  break;
+
+	case DW_OP_entry_value:
+	case DW_OP_GNU_entry_value:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  fputc_filtered ('\n', stream);
+	  disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
+					start, data, data + ul, indent + 2,
+					all, per_cu, per_objfile);
+	  data += ul;
+	  continue;
+
+	case DW_OP_GNU_parameter_ref:
+	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
+	  data += 4;
+	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
+	  break;
+
+	case DW_OP_addrx:
+	case DW_OP_GNU_addr_index:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
+	  fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
+	  break;
+
+	case DW_OP_GNU_const_index:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
+
+	case DW_OP_GNU_variable_value:
+	  ul = extract_unsigned_integer (data, offset_size,
+					 gdbarch_byte_order (arch));
+	  data += offset_size;
+	  fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
+	  break;
+	}
+
+      fprintf_filtered (stream, "\n");
+    }
+
+  return data;
+}
+
+static bool dwarf_always_disassemble;
+
+static void
+show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
+			       struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("Whether to always disassemble "
+		      "DWARF expressions is %s.\n"),
+		    value);
+}
+
+/* Describe a single location, which may in turn consist of multiple
+   pieces.  */
+
+static void
+locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
+			     struct ui_file *stream,
+			     const gdb_byte *data, size_t size,
+			     unsigned int addr_size,
+			     int offset_size, dwarf2_per_cu_data *per_cu,
+			     dwarf2_per_objfile *per_objfile)
+{
+  const gdb_byte *end = data + size;
+  int first_piece = 1, bad = 0;
+  objfile *objfile = per_objfile->objfile;
+
+  while (data < end)
+    {
+      const gdb_byte *here = data;
+      int disassemble = 1;
+
+      if (first_piece)
+	first_piece = 0;
+      else
+	fprintf_filtered (stream, _(", and "));
+
+      if (!dwarf_always_disassemble)
+	{
+	  data = locexpr_describe_location_piece (symbol, stream,
+						  addr, per_cu, per_objfile,
+						  data, end, addr_size);
+	  /* If we printed anything, or if we have an empty piece,
+	     then don't disassemble.  */
+	  if (data != here
+	      || data[0] == DW_OP_piece
+	      || data[0] == DW_OP_bit_piece)
+	    disassemble = 0;
+	}
+      if (disassemble)
+	{
+	  fprintf_filtered (stream, _("a complex DWARF expression:\n"));
+	  data = disassemble_dwarf_expression (stream,
+					       objfile->arch (),
+					       addr_size, offset_size, data,
+					       data, end, 0,
+					       dwarf_always_disassemble,
+					       per_cu, per_objfile);
+	}
+
+      if (data < end)
+	{
+	  int empty = data == here;
+	      
+	  if (disassemble)
+	    fprintf_filtered (stream, "   ");
+	  if (data[0] == DW_OP_piece)
+	    {
+	      uint64_t bytes;
+
+	      data = safe_read_uleb128 (data + 1, end, &bytes);
+
+	      if (empty)
+		fprintf_filtered (stream, _("an empty %s-byte piece"),
+				  pulongest (bytes));
+	      else
+		fprintf_filtered (stream, _(" [%s-byte piece]"),
+				  pulongest (bytes));
+	    }
+	  else if (data[0] == DW_OP_bit_piece)
+	    {
+	      uint64_t bits, offset;
+
+	      data = safe_read_uleb128 (data + 1, end, &bits);
+	      data = safe_read_uleb128 (data, end, &offset);
+
+	      if (empty)
+		fprintf_filtered (stream,
+				  _("an empty %s-bit piece"),
+				  pulongest (bits));
+	      else
+		fprintf_filtered (stream,
+				  _(" [%s-bit piece, offset %s bits]"),
+				  pulongest (bits), pulongest (offset));
+	    }
+	  else
+	    {
+	      bad = 1;
+	      break;
+	    }
+	}
+    }
+
+  if (bad || data > end)
+    error (_("Corrupted DWARF2 expression for \"%s\"."),
+	   symbol->print_name ());
+}
+
+/* Print a natural-language description of SYMBOL to STREAM.  This
+   version is for a symbol with a single location.  */
+
+static void
+locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
+			   struct ui_file *stream)
+{
+  struct dwarf2_locexpr_baton *dlbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+  unsigned int addr_size = dlbaton->per_cu->addr_size ();
+  int offset_size = dlbaton->per_cu->offset_size ();
+
+  locexpr_describe_location_1 (symbol, addr, stream,
+			       dlbaton->data, dlbaton->size,
+			       addr_size, offset_size,
+			       dlbaton->per_cu, dlbaton->per_objfile);
+}
+
+/* Describe the location of SYMBOL as an agent value in VALUE, generating
+   any necessary bytecode in AX.  */
+
+static void
+locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
+			    struct axs_value *value)
+{
+  struct dwarf2_locexpr_baton *dlbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
+  unsigned int addr_size = dlbaton->per_cu->addr_size ();
+
+  if (dlbaton->size == 0)
+    value->optimized_out = 1;
+  else
+    dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
+			       dlbaton->data + dlbaton->size, dlbaton->per_cu,
+			       dlbaton->per_objfile);
+}
+
+/* symbol_computed_ops 'generate_c_location' method.  */
+
+static void
+locexpr_generate_c_location (struct symbol *sym, string_file *stream,
+			     struct gdbarch *gdbarch,
+			     std::vector<bool> &registers_used,
+			     CORE_ADDR pc, const char *result_name)
+{
+  struct dwarf2_locexpr_baton *dlbaton
+    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
+  unsigned int addr_size = dlbaton->per_cu->addr_size ();
+
+  if (dlbaton->size == 0)
+    error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
+
+  compile_dwarf_expr_to_c (stream, result_name,
+			   sym, pc, gdbarch, registers_used, addr_size,
+			   dlbaton->data, dlbaton->data + dlbaton->size,
+			   dlbaton->per_cu, dlbaton->per_objfile);
+}
+
+/* The set of location functions used with the DWARF-2 expression
+   evaluator.  */
+const struct symbol_computed_ops dwarf2_locexpr_funcs = {
+  locexpr_read_variable,
+  locexpr_read_variable_at_entry,
+  locexpr_get_symbol_read_needs,
+  locexpr_describe_location,
+  0,	/* location_has_loclist */
+  locexpr_tracepoint_var_ref,
+  locexpr_generate_c_location
+};
+
+
+/* Wrapper functions for location lists.  These generally find
+   the appropriate location expression and call something above.  */
+
+/* Return the value of SYMBOL in FRAME using the DWARF-2 expression
+   evaluator to calculate the location.  */
+static struct value *
+loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
+{
+  struct dwarf2_loclist_baton *dlbaton
+    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+  struct value *val;
+  const gdb_byte *data;
+  size_t size;
+  CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
+
+  data = dwarf2_find_location_expression (dlbaton, &size, pc);
+  val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
+				  dlbaton->per_cu, dlbaton->per_objfile);
+
+  return val;
+}
+
+/* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
+   entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
+   will be thrown.
+
+   Function always returns non-NULL value, it may be marked optimized out if
+   inferior frame information is not available.  It throws NO_ENTRY_VALUE_ERROR
+   if it cannot resolve the parameter for any reason.  */
+
+static struct value *
+loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
+{
+  struct dwarf2_loclist_baton *dlbaton
+    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+  const gdb_byte *data;
+  size_t size;
+  CORE_ADDR pc;
+
+  if (frame == NULL || !get_frame_func_if_available (frame, &pc))
+    return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
+
+  data = dwarf2_find_location_expression (dlbaton, &size, pc);
+  if (data == NULL)
+    return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
+
+  return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
+}
+
+/* Implementation of get_symbol_read_needs from
+   symbol_computed_ops.  */
+
+static enum symbol_needs_kind
+loclist_symbol_needs (struct symbol *symbol)
+{
+  /* If there's a location list, then assume we need to have a frame
+     to choose the appropriate location expression.  With tracking of
+     global variables this is not necessarily true, but such tracking
+     is disabled in GCC at the moment until we figure out how to
+     represent it.  */
+
+  return SYMBOL_NEEDS_FRAME;
+}
+
+/* Print a natural-language description of SYMBOL to STREAM.  This
+   version applies when there is a list of different locations, each
+   with a specified address range.  */
+
+static void
+loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
+			   struct ui_file *stream)
+{
+  struct dwarf2_loclist_baton *dlbaton
+    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+  const gdb_byte *loc_ptr, *buf_end;
+  dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  unsigned int addr_size = dlbaton->per_cu->addr_size ();
+  int offset_size = dlbaton->per_cu->offset_size ();
+  int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
+  /* Adjust base_address for relocatable objects.  */
+  CORE_ADDR base_offset = objfile->text_section_offset ();
+  CORE_ADDR base_address = dlbaton->base_address + base_offset;
+  int done = 0;
+
+  loc_ptr = dlbaton->data;
+  buf_end = dlbaton->data + dlbaton->size;
+
+  fprintf_filtered (stream, _("multi-location:\n"));
+
+  /* Iterate through locations until we run out.  */
+  while (!done)
+    {
+      CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
+      int length;
+      enum debug_loc_kind kind;
+      const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
+
+      if (dlbaton->per_cu->version () < 5 && dlbaton->from_dwo)
+	kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
+					       dlbaton->per_objfile,
+					       loc_ptr, buf_end, &new_ptr,
+					       &low, &high, byte_order);
+      else if (dlbaton->per_cu->version () < 5)
+	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
+					   &low, &high,
+					   byte_order, addr_size,
+					   signed_addr_p);
+      else
+	kind = decode_debug_loclists_addresses (dlbaton->per_cu,
+						dlbaton->per_objfile,
+						loc_ptr, buf_end, &new_ptr,
+						&low, &high, byte_order,
+						addr_size, signed_addr_p);
+      loc_ptr = new_ptr;
+      switch (kind)
+	{
+	case DEBUG_LOC_END_OF_LIST:
+	  done = 1;
+	  continue;
+
+	case DEBUG_LOC_BASE_ADDRESS:
+	  base_address = high + base_offset;
+	  fprintf_filtered (stream, _("  Base address %s"),
+			    paddress (gdbarch, base_address));
+	  continue;
+
+	case DEBUG_LOC_START_END:
+	case DEBUG_LOC_START_LENGTH:
+	case DEBUG_LOC_OFFSET_PAIR:
+	  break;
+
+	case DEBUG_LOC_BUFFER_OVERFLOW:
+	case DEBUG_LOC_INVALID_ENTRY:
+	  error (_("Corrupted DWARF expression for symbol \"%s\"."),
+		 symbol->print_name ());
+
+	default:
+	  gdb_assert_not_reached ("bad debug_loc_kind");
+	}
+
+      /* Otherwise, a location expression entry.  */
+      low += base_address;
+      high += base_address;
+
+      low = gdbarch_adjust_dwarf2_addr (gdbarch, low);
+      high = gdbarch_adjust_dwarf2_addr (gdbarch, high);
+
+      if (dlbaton->per_cu->version () < 5)
+	 {
+	   length = extract_unsigned_integer (loc_ptr, 2, byte_order);
+	   loc_ptr += 2;
+	 }
+      else
+	 {
+	   unsigned int bytes_read;
+	   length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
+	   loc_ptr += bytes_read;
+	 }
+
+      /* (It would improve readability to print only the minimum
+	 necessary digits of the second number of the range.)  */
+      fprintf_filtered (stream, _("  Range %s-%s: "),
+			paddress (gdbarch, low), paddress (gdbarch, high));
+
+      /* Now describe this particular location.  */
+      locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
+				   addr_size, offset_size,
+				   dlbaton->per_cu, dlbaton->per_objfile);
+
+      fprintf_filtered (stream, "\n");
+
+      loc_ptr += length;
+    }
+}
+
+/* Describe the location of SYMBOL as an agent value in VALUE, generating
+   any necessary bytecode in AX.  */
+static void
+loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
+			    struct axs_value *value)
+{
+  struct dwarf2_loclist_baton *dlbaton
+    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
+  const gdb_byte *data;
+  size_t size;
+  unsigned int addr_size = dlbaton->per_cu->addr_size ();
+
+  data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
+  if (size == 0)
+    value->optimized_out = 1;
+  else
+    dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
+			       dlbaton->per_cu, dlbaton->per_objfile);
+}
+
+/* symbol_computed_ops 'generate_c_location' method.  */
+
+static void
+loclist_generate_c_location (struct symbol *sym, string_file *stream,
+			     struct gdbarch *gdbarch,
+			     std::vector<bool> &registers_used,
+			     CORE_ADDR pc, const char *result_name)
+{
+  struct dwarf2_loclist_baton *dlbaton
+    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
+  unsigned int addr_size = dlbaton->per_cu->addr_size ();
+  const gdb_byte *data;
+  size_t size;
+
+  data = dwarf2_find_location_expression (dlbaton, &size, pc);
+  if (size == 0)
+    error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
+
+  compile_dwarf_expr_to_c (stream, result_name,
+			   sym, pc, gdbarch, registers_used, addr_size,
+			   data, data + size,
+			   dlbaton->per_cu,
+			   dlbaton->per_objfile);
+}
+
+/* The set of location functions used with the DWARF-2 expression
+   evaluator and location lists.  */
+const struct symbol_computed_ops dwarf2_loclist_funcs = {
+  loclist_read_variable,
+  loclist_read_variable_at_entry,
+  loclist_symbol_needs,
+  loclist_describe_location,
+  1,	/* location_has_loclist */
+  loclist_tracepoint_var_ref,
+  loclist_generate_c_location
+};
+
+void _initialize_dwarf2loc ();
+void
+_initialize_dwarf2loc ()
+{
+  add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
+			     &entry_values_debug,
+			     _("Set entry values and tail call frames "
+			       "debugging."),
+			     _("Show entry values and tail call frames "
+			       "debugging."),
+			     _("When non-zero, the process of determining "
+			       "parameter values from function entry point "
+			       "and tail call frames will be printed."),
+			     NULL,
+			     show_entry_values_debug,
+			     &setdebuglist, &showdebuglist);
+
+  add_setshow_boolean_cmd ("always-disassemble", class_obscure,
+			   &dwarf_always_disassemble, _("\
+Set whether `info address' always disassembles DWARF expressions."), _("\
+Show whether `info address' always disassembles DWARF expressions."), _("\
+When enabled, DWARF expressions are always printed in an assembly-like\n\
+syntax.  When disabled, expressions will be printed in a more\n\
+conversational style, when possible."),
+			   NULL,
+			   show_dwarf_always_disassemble,
+			   &set_dwarf_cmdlist,
+			   &show_dwarf_cmdlist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/loc.h ./gdb/dwarf2/loc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/loc.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/loc.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,266 @@
+/* DWARF 2 location expression support for GDB.
+
+   Copyright (C) 2003-2021 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/>.  */
+
+#if !defined (DWARF2LOC_H)
+#define DWARF2LOC_H
+
+#include "dwarf2/expr.h"
+
+struct symbol_computed_ops;
+struct dwarf2_per_objfile;
+struct dwarf2_per_cu_data;
+struct dwarf2_loclist_baton;
+struct agent_expr;
+struct axs_value;
+
+/* This header is private to the DWARF-2 reader.  It is shared between
+   dwarf2read.c and dwarf2loc.c.  */
+
+/* `set debug entry-values' setting.  */
+extern unsigned int entry_values_debug;
+
+/* Find a particular location expression from a location list.  */
+const gdb_byte *dwarf2_find_location_expression
+  (struct dwarf2_loclist_baton *baton,
+   size_t *locexpr_length,
+   CORE_ADDR pc);
+
+/* Find the frame base information for FRAMEFUNC at PC.  START is an
+   out parameter which is set to point to the DWARF expression to
+   compute.  LENGTH is an out parameter which is set to the length of
+   the DWARF expression.  This throws an exception on error or if an
+   expression is not found; the returned length will never be
+   zero.  */
+
+extern void func_get_frame_base_dwarf_block (struct symbol *framefunc,
+					     CORE_ADDR pc,
+					     const gdb_byte **start,
+					     size_t *length);
+
+/* Evaluate a location description, starting at DATA and with length
+   SIZE, to find the current location of variable of TYPE in the context
+   of FRAME.  */
+
+struct value *dwarf2_evaluate_loc_desc (struct type *type,
+					struct frame_info *frame,
+					const gdb_byte *data,
+					size_t size,
+					dwarf2_per_cu_data *per_cu,
+					dwarf2_per_objfile *per_objfile);
+
+/* A chain of addresses that might be needed to resolve a dynamic
+   property.  */
+
+struct property_addr_info
+{
+  /* The type of the object whose dynamic properties, if any, are
+     being resolved.  */
+  struct type *type;
+
+  /* If not NULL, a buffer containing the object's value.  */
+  gdb::array_view<const gdb_byte> valaddr;
+
+  /* The address of that object.  */
+  CORE_ADDR addr;
+
+  /* If not NULL, a pointer to the info for the object containing
+     the object described by this node.  */
+  struct property_addr_info *next;
+};
+
+/* Converts a dynamic property into a static one.  FRAME is the frame in which
+   the property is evaluated; if NULL, the selected frame (if any) is used
+   instead.
+
+   ADDR_STACK is the stack of addresses that might be needed to evaluate the
+   property. When evaluating a property that is not related to a type, it can
+   be NULL.
+
+   Returns true if PROP could be converted and the static value is passed
+   back into VALUE, otherwise returns false.
+
+   If PUSH_INITIAL_VALUE is true, then the top value of ADDR_STACK
+   will be pushed before evaluating a location expression.  */
+
+bool dwarf2_evaluate_property (const struct dynamic_prop *prop,
+			       struct frame_info *frame,
+			       const struct property_addr_info *addr_stack,
+			       CORE_ADDR *value,
+			       bool push_initial_value = false);
+
+/* A helper for the compiler interface that compiles a single dynamic
+   property to C code.
+
+   STREAM is where the C code is to be written.
+   RESULT_NAME is the name of the generated variable.
+   GDBARCH is the architecture to use.
+   REGISTERS_USED is a bit-vector that is filled to note which
+   registers are required by the generated expression.
+   PROP is the property for which code is generated.
+   ADDRESS is the address at which the property is considered to be
+   evaluated.
+   SYM the originating symbol, used for error reporting.  */
+
+void dwarf2_compile_property_to_c (string_file *stream,
+				   const char *result_name,
+				   struct gdbarch *gdbarch,
+				   std::vector<bool> &registers_used,
+				   const struct dynamic_prop *prop,
+				   CORE_ADDR address,
+				   struct symbol *sym);
+
+/* The symbol location baton types used by the DWARF-2 reader (i.e.
+   SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol).  "struct
+   dwarf2_locexpr_baton" is for a symbol with a single location
+   expression; "struct dwarf2_loclist_baton" is for a symbol with a
+   location list.  */
+
+struct dwarf2_locexpr_baton
+{
+  /* Pointer to the start of the location expression.  Valid only if SIZE is
+     not zero.  */
+  const gdb_byte *data;
+
+  /* Length of the location expression.  For optimized out expressions it is
+     zero.  */
+  size_t size;
+
+  /* When true this location expression is a reference and actually
+     describes the address at which the value of the attribute can be
+     found.  When false the expression provides the value of the attribute
+     directly.  */
+  bool is_reference;
+
+  /* The objfile that was used when creating this.  */
+  dwarf2_per_objfile *per_objfile;
+
+  /* The compilation unit containing the symbol whose location
+     we're computing.  */
+  struct dwarf2_per_cu_data *per_cu;
+};
+
+struct dwarf2_loclist_baton
+{
+  /* The initial base address for the location list, based on the compilation
+     unit.  */
+  CORE_ADDR base_address;
+
+  /* Pointer to the start of the location list.  */
+  const gdb_byte *data;
+
+  /* Length of the location list.  */
+  size_t size;
+
+  /* The objfile that was used when creating this.  */
+  dwarf2_per_objfile *per_objfile;
+
+  /* The compilation unit containing the symbol whose location
+     we're computing.  */
+  struct dwarf2_per_cu_data *per_cu;
+
+  /* Non-zero if the location list lives in .debug_loc.dwo.
+     The format of entries in this section are different.  */
+  unsigned char from_dwo;
+};
+
+/* The baton used when a dynamic property is an offset to a parent
+   type.  This can be used, for instance, then the bound of an array
+   inside a record is determined by the value of another field inside
+   that record.  */
+
+struct dwarf2_offset_baton
+{
+  /* The offset from the parent type where the value of the property
+     is stored.  In the example provided above, this would be the offset
+     of the field being used as the array bound.  */
+  LONGEST offset;
+
+  /* The type of the object whose property is dynamic.  In the example
+     provided above, this would the array's index type.  */
+  struct type *type;
+};
+
+/* A dynamic property is either expressed as a single location expression
+   or a location list.  If the property is an indirection, pointing to
+   another die, keep track of the targeted type in PROPERTY_TYPE.
+   Alternatively, if the property location gives the property value
+   directly then it will have PROPERTY_TYPE.  */
+
+struct dwarf2_property_baton
+{
+  /* If the property is an indirection, we need to evaluate the location
+     in the context of the type PROPERTY_TYPE.  If the property is supplied
+     by value then it will be of PROPERTY_TYPE.  This field should never be
+     NULL.  */
+  struct type *property_type;
+  union
+  {
+    /* Location expression either evaluated in the context of
+       PROPERTY_TYPE, or a value of type PROPERTY_TYPE.  */
+    struct dwarf2_locexpr_baton locexpr;
+
+    /* Location list to be evaluated in the context of PROPERTY_TYPE.  */
+    struct dwarf2_loclist_baton loclist;
+
+    /* The location is an offset to PROPERTY_TYPE.  */
+    struct dwarf2_offset_baton offset_info;
+  };
+};
+
+extern const struct symbol_computed_ops dwarf2_locexpr_funcs;
+extern const struct symbol_computed_ops dwarf2_loclist_funcs;
+
+extern const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs;
+extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs;
+
+/* Determined tail calls for constructing virtual tail call frames.  */
+
+struct call_site_chain
+  {
+    /* Initially CALLERS == CALLEES == LENGTH.  For partially ambiguous result
+       CALLERS + CALLEES < LENGTH.  */
+    int callers, callees, length;
+
+    /* Variably sized array with LENGTH elements.  Later [0..CALLERS-1] contain
+       top (GDB "prev") sites and [LENGTH-CALLEES..LENGTH-1] contain bottom
+       (GDB "next") sites.  One is interested primarily in the PC field.  */
+    struct call_site *call_site[1];
+  };
+
+extern gdb::unique_xmalloc_ptr<call_site_chain> call_site_find_chain
+  (struct gdbarch *gdbarch, CORE_ADDR caller_pc, CORE_ADDR callee_pc);
+
+/* A helper function to convert a DWARF register to an arch register.
+   ARCH is the architecture.
+   DWARF_REG is the register.
+   If DWARF_REG is bad then a complaint is issued and -1 is returned.
+   Note: Some targets get this wrong.  */
+
+extern int dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg);
+
+/* A wrapper on dwarf_reg_to_regnum to throw an exception if the
+   DWARF register cannot be translated to an architecture register.
+   This takes a ULONGEST instead of an int because some callers actually have
+   a ULONGEST.  Negative values passed as ints will still be flagged as
+   invalid.  */
+
+extern int dwarf_reg_to_regnum_or_error (struct gdbarch *arch,
+					 ULONGEST dwarf_reg);
+
+#endif /* dwarf2loc.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/macro.c ./gdb/dwarf2/macro.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/macro.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/macro.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,932 @@
+/* Read DWARF macro information
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2/read.h"
+#include "dwarf2/leb.h"
+#include "dwarf2/expr.h"
+#include "dwarf2/line-header.h"
+#include "dwarf2/section.h"
+#include "dwarf2/macro.h"
+#include "dwarf2/dwz.h"
+#include "buildsym.h"
+#include "macrotab.h"
+#include "complaints.h"
+
+static void
+dwarf2_macro_malformed_definition_complaint (const char *arg1)
+{
+  complaint (_("macro debug info contains a "
+	       "malformed macro definition:\n`%s'"),
+	     arg1);
+}
+
+static struct macro_source_file *
+macro_start_file (buildsym_compunit *builder,
+		  int file, int line,
+		  struct macro_source_file *current_file,
+		  const struct line_header *lh)
+{
+  /* File name relative to the compilation directory of this source file.  */
+  gdb::unique_xmalloc_ptr<char> file_name = lh->file_file_name (file);
+
+  if (! current_file)
+    {
+      /* Note: We don't create a macro table for this compilation unit
+	 at all until we actually get a filename.  */
+      struct macro_table *macro_table = builder->get_macro_table ();
+
+      /* If we have no current file, then this must be the start_file
+	 directive for the compilation unit's main source file.  */
+      current_file = macro_set_main (macro_table, file_name.get ());
+      macro_define_special (macro_table);
+    }
+  else
+    current_file = macro_include (current_file, line, file_name.get ());
+
+  return current_file;
+}
+
+static const char *
+consume_improper_spaces (const char *p, const char *body)
+{
+  if (*p == ' ')
+    {
+      complaint (_("macro definition contains spaces "
+		   "in formal argument list:\n`%s'"),
+		 body);
+
+      while (*p == ' ')
+	p++;
+    }
+
+  return p;
+}
+
+
+static void
+parse_macro_definition (struct macro_source_file *file, int line,
+			const char *body)
+{
+  const char *p;
+
+  /* The body string takes one of two forms.  For object-like macro
+     definitions, it should be:
+
+	<macro name> " " <definition>
+
+     For function-like macro definitions, it should be:
+
+	<macro name> "() " <definition>
+     or
+	<macro name> "(" <arg name> ( "," <arg name> ) * ") " <definition>
+
+     Spaces may appear only where explicitly indicated, and in the
+     <definition>.
+
+     The Dwarf 2 spec says that an object-like macro's name is always
+     followed by a space, but versions of GCC around March 2002 omit
+     the space when the macro's definition is the empty string.
+
+     The Dwarf 2 spec says that there should be no spaces between the
+     formal arguments in a function-like macro's formal argument list,
+     but versions of GCC around March 2002 include spaces after the
+     commas.  */
+
+
+  /* Find the extent of the macro name.  The macro name is terminated
+     by either a space or null character (for an object-like macro) or
+     an opening paren (for a function-like macro).  */
+  for (p = body; *p; p++)
+    if (*p == ' ' || *p == '(')
+      break;
+
+  if (*p == ' ' || *p == '\0')
+    {
+      /* It's an object-like macro.  */
+      int name_len = p - body;
+      std::string name (body, name_len);
+      const char *replacement;
+
+      if (*p == ' ')
+	replacement = body + name_len + 1;
+      else
+	{
+	  dwarf2_macro_malformed_definition_complaint (body);
+	  replacement = body + name_len;
+	}
+
+      macro_define_object (file, line, name.c_str (), replacement);
+    }
+  else if (*p == '(')
+    {
+      /* It's a function-like macro.  */
+      std::string name (body, p - body);
+      int argc = 0;
+      int argv_size = 1;
+      char **argv = XNEWVEC (char *, argv_size);
+
+      p++;
+
+      p = consume_improper_spaces (p, body);
+
+      /* Parse the formal argument list.  */
+      while (*p && *p != ')')
+	{
+	  /* Find the extent of the current argument name.  */
+	  const char *arg_start = p;
+
+	  while (*p && *p != ',' && *p != ')' && *p != ' ')
+	    p++;
+
+	  if (! *p || p == arg_start)
+	    dwarf2_macro_malformed_definition_complaint (body);
+	  else
+	    {
+	      /* Make sure argv has room for the new argument.  */
+	      if (argc >= argv_size)
+		{
+		  argv_size *= 2;
+		  argv = XRESIZEVEC (char *, argv, argv_size);
+		}
+
+	      argv[argc++] = savestring (arg_start, p - arg_start);
+	    }
+
+	  p = consume_improper_spaces (p, body);
+
+	  /* Consume the comma, if present.  */
+	  if (*p == ',')
+	    {
+	      p++;
+
+	      p = consume_improper_spaces (p, body);
+	    }
+	}
+
+      if (*p == ')')
+	{
+	  p++;
+
+	  if (*p == ' ')
+	    /* Perfectly formed definition, no complaints.  */
+	    macro_define_function (file, line, name.c_str (),
+				   argc, (const char **) argv,
+				   p + 1);
+	  else if (*p == '\0')
+	    {
+	      /* Complain, but do define it.  */
+	      dwarf2_macro_malformed_definition_complaint (body);
+	      macro_define_function (file, line, name.c_str (),
+				     argc, (const char **) argv,
+				     p);
+	    }
+	  else
+	    /* Just complain.  */
+	    dwarf2_macro_malformed_definition_complaint (body);
+	}
+      else
+	/* Just complain.  */
+	dwarf2_macro_malformed_definition_complaint (body);
+
+      {
+	int i;
+
+	for (i = 0; i < argc; i++)
+	  xfree (argv[i]);
+      }
+      xfree (argv);
+    }
+  else
+    dwarf2_macro_malformed_definition_complaint (body);
+}
+
+/* Skip some bytes from BYTES according to the form given in FORM.
+   Returns the new pointer.  */
+
+static const gdb_byte *
+skip_form_bytes (bfd *abfd, const gdb_byte *bytes, const gdb_byte *buffer_end,
+		 enum dwarf_form form,
+		 unsigned int offset_size,
+		 const struct dwarf2_section_info *section)
+{
+  unsigned int bytes_read;
+
+  switch (form)
+    {
+    case DW_FORM_data1:
+    case DW_FORM_flag:
+      ++bytes;
+      break;
+
+    case DW_FORM_data2:
+      bytes += 2;
+      break;
+
+    case DW_FORM_data4:
+      bytes += 4;
+      break;
+
+    case DW_FORM_data8:
+      bytes += 8;
+      break;
+
+    case DW_FORM_data16:
+      bytes += 16;
+      break;
+
+    case DW_FORM_string:
+      read_direct_string (abfd, bytes, &bytes_read);
+      bytes += bytes_read;
+      break;
+
+    case DW_FORM_sec_offset:
+    case DW_FORM_strp:
+    case DW_FORM_GNU_strp_alt:
+      bytes += offset_size;
+      break;
+
+    case DW_FORM_block:
+      bytes += read_unsigned_leb128 (abfd, bytes, &bytes_read);
+      bytes += bytes_read;
+      break;
+
+    case DW_FORM_block1:
+      bytes += 1 + read_1_byte (abfd, bytes);
+      break;
+    case DW_FORM_block2:
+      bytes += 2 + read_2_bytes (abfd, bytes);
+      break;
+    case DW_FORM_block4:
+      bytes += 4 + read_4_bytes (abfd, bytes);
+      break;
+
+    case DW_FORM_addrx:
+    case DW_FORM_sdata:
+    case DW_FORM_strx:
+    case DW_FORM_udata:
+    case DW_FORM_GNU_addr_index:
+    case DW_FORM_GNU_str_index:
+      bytes = gdb_skip_leb128 (bytes, buffer_end);
+      if (bytes == NULL)
+	{
+	  section->overflow_complaint ();
+	  return NULL;
+	}
+      break;
+
+    case DW_FORM_implicit_const:
+      break;
+
+    default:
+      {
+	complaint (_("invalid form 0x%x in `%s'"),
+		   form, section->get_name ());
+	return NULL;
+      }
+    }
+
+  return bytes;
+}
+
+/* A helper for dwarf_decode_macros that handles skipping an unknown
+   opcode.  Returns an updated pointer to the macro data buffer; or,
+   on error, issues a complaint and returns NULL.  */
+
+static const gdb_byte *
+skip_unknown_opcode (unsigned int opcode,
+		     const gdb_byte **opcode_definitions,
+		     const gdb_byte *mac_ptr, const gdb_byte *mac_end,
+		     bfd *abfd,
+		     unsigned int offset_size,
+		     const struct dwarf2_section_info *section)
+{
+  unsigned int bytes_read, i;
+  unsigned long arg;
+  const gdb_byte *defn;
+
+  if (opcode_definitions[opcode] == NULL)
+    {
+      complaint (_("unrecognized DW_MACFINO opcode 0x%x"),
+		 opcode);
+      return NULL;
+    }
+
+  defn = opcode_definitions[opcode];
+  arg = read_unsigned_leb128 (abfd, defn, &bytes_read);
+  defn += bytes_read;
+
+  for (i = 0; i < arg; ++i)
+    {
+      mac_ptr = skip_form_bytes (abfd, mac_ptr, mac_end,
+				 (enum dwarf_form) defn[i], offset_size,
+				 section);
+      if (mac_ptr == NULL)
+	{
+	  /* skip_form_bytes already issued the complaint.  */
+	  return NULL;
+	}
+    }
+
+  return mac_ptr;
+}
+
+/* A helper function which parses the header of a macro section.
+   If the macro section is the extended (for now called "GNU") type,
+   then this updates *OFFSET_SIZE.  Returns a pointer to just after
+   the header, or issues a complaint and returns NULL on error.  */
+
+static const gdb_byte *
+dwarf_parse_macro_header (const gdb_byte **opcode_definitions,
+			  bfd *abfd,
+			  const gdb_byte *mac_ptr,
+			  unsigned int *offset_size,
+			  int section_is_gnu)
+{
+  memset (opcode_definitions, 0, 256 * sizeof (gdb_byte *));
+
+  if (section_is_gnu)
+    {
+      unsigned int version, flags;
+
+      version = read_2_bytes (abfd, mac_ptr);
+      if (version != 4 && version != 5)
+	{
+	  complaint (_("unrecognized version `%d' in .debug_macro section"),
+		     version);
+	  return NULL;
+	}
+      mac_ptr += 2;
+
+      flags = read_1_byte (abfd, mac_ptr);
+      ++mac_ptr;
+      *offset_size = (flags & 1) ? 8 : 4;
+
+      if ((flags & 2) != 0)
+	/* We don't need the line table offset.  */
+	mac_ptr += *offset_size;
+
+      /* Vendor opcode descriptions.  */
+      if ((flags & 4) != 0)
+	{
+	  unsigned int i, count;
+
+	  count = read_1_byte (abfd, mac_ptr);
+	  ++mac_ptr;
+	  for (i = 0; i < count; ++i)
+	    {
+	      unsigned int opcode, bytes_read;
+	      unsigned long arg;
+
+	      opcode = read_1_byte (abfd, mac_ptr);
+	      ++mac_ptr;
+	      opcode_definitions[opcode] = mac_ptr;
+	      arg = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	      mac_ptr += bytes_read;
+	      mac_ptr += arg;
+	    }
+	}
+    }
+
+  return mac_ptr;
+}
+
+/* A helper for dwarf_decode_macros that handles the GNU extensions,
+   including DW_MACRO_import.  */
+
+static void
+dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
+			  buildsym_compunit *builder,
+			  bfd *abfd,
+			  const gdb_byte *mac_ptr, const gdb_byte *mac_end,
+			  struct macro_source_file *current_file,
+			  const struct line_header *lh,
+			  const struct dwarf2_section_info *section,
+			  int section_is_gnu, int section_is_dwz,
+			  unsigned int offset_size,
+			  struct dwarf2_section_info *str_section,
+			  struct dwarf2_section_info *str_offsets_section,
+			  ULONGEST str_offsets_base,
+			  htab_t include_hash)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  enum dwarf_macro_record_type macinfo_type;
+  int at_commandline;
+  const gdb_byte *opcode_definitions[256];
+
+  mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr,
+				      &offset_size, section_is_gnu);
+  if (mac_ptr == NULL)
+    {
+      /* We already issued a complaint.  */
+      return;
+    }
+
+  /* Determines if GDB is still before first DW_MACINFO_start_file.  If true
+     GDB is still reading the definitions from command line.  First
+     DW_MACINFO_start_file will need to be ignored as it was already executed
+     to create CURRENT_FILE for the main source holding also the command line
+     definitions.  On first met DW_MACINFO_start_file this flag is reset to
+     normally execute all the remaining DW_MACINFO_start_file macinfos.  */
+
+  at_commandline = 1;
+
+  do
+    {
+      /* Do we at least have room for a macinfo type byte?  */
+      if (mac_ptr >= mac_end)
+	{
+	  section->overflow_complaint ();
+	  break;
+	}
+
+      macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr);
+      mac_ptr++;
+
+      /* Note that we rely on the fact that the corresponding GNU and
+	 DWARF constants are the same.  */
+      DIAGNOSTIC_PUSH
+      DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
+      switch (macinfo_type)
+	{
+	  /* A zero macinfo type indicates the end of the macro
+	     information.  */
+	case 0:
+	  break;
+
+	case DW_MACRO_define:
+	case DW_MACRO_undef:
+	case DW_MACRO_define_strp:
+	case DW_MACRO_undef_strp:
+	case DW_MACRO_define_sup:
+	case DW_MACRO_undef_sup:
+	  {
+	    unsigned int bytes_read;
+	    int line;
+	    const char *body;
+	    int is_define;
+
+	    line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+
+	    if (macinfo_type == DW_MACRO_define
+		|| macinfo_type == DW_MACRO_undef)
+	      {
+		body = read_direct_string (abfd, mac_ptr, &bytes_read);
+		mac_ptr += bytes_read;
+	      }
+	    else
+	      {
+		LONGEST str_offset;
+
+		str_offset = read_offset (abfd, mac_ptr, offset_size);
+		mac_ptr += offset_size;
+
+		if (macinfo_type == DW_MACRO_define_sup
+		    || macinfo_type == DW_MACRO_undef_sup
+		    || section_is_dwz)
+		  {
+		    dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd,
+							 true);
+
+		    body = dwz->read_string (objfile, str_offset);
+		  }
+		else
+		  body = per_objfile->per_bfd->str.read_string (objfile,
+								str_offset,
+								"DW_FORM_strp");
+	      }
+
+	    is_define = (macinfo_type == DW_MACRO_define
+			 || macinfo_type == DW_MACRO_define_strp
+			 || macinfo_type == DW_MACRO_define_sup);
+	    if (! current_file)
+	      {
+		/* DWARF violation as no main source is present.  */
+		complaint (_("debug info with no main source gives macro %s "
+			     "on line %d: %s"),
+			   is_define ? _("definition") : _("undefinition"),
+			   line, body);
+		break;
+	      }
+	    if ((line == 0 && !at_commandline)
+		|| (line != 0 && at_commandline))
+	      complaint (_("debug info gives %s macro %s with %s line %d: %s"),
+			 at_commandline ? _("command-line") : _("in-file"),
+			 is_define ? _("definition") : _("undefinition"),
+			 line == 0 ? _("zero") : _("non-zero"), line, body);
+
+	    if (body == NULL)
+	      {
+		/* Fedora's rpm-build's "debugedit" binary
+		   corrupted .debug_macro sections.
+
+		   For more info, see
+		   https://bugzilla.redhat.com/show_bug.cgi?id=1708786 */
+		complaint (_("debug info gives %s invalid macro %s "
+			     "without body (corrupted?) at line %d "
+			     "on file %s"),
+			   at_commandline ? _("command-line") : _("in-file"),
+			   is_define ? _("definition") : _("undefinition"),
+			   line, current_file->filename);
+	      }
+	    else if (is_define)
+	      parse_macro_definition (current_file, line, body);
+	    else
+	      {
+		gdb_assert (macinfo_type == DW_MACRO_undef
+			    || macinfo_type == DW_MACRO_undef_strp
+			    || macinfo_type == DW_MACRO_undef_sup);
+		macro_undef (current_file, line, body);
+	      }
+	  }
+	  break;
+
+	case DW_MACRO_define_strx:
+	case DW_MACRO_undef_strx:
+	  {
+	    unsigned int bytes_read;
+
+	    int line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	    int offset_index = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+
+	    str_offsets_section->read (objfile);
+	    const gdb_byte *info_ptr = (str_offsets_section->buffer
+					+ str_offsets_base
+					+ offset_index * offset_size);
+
+	    const char *macinfo_str = (macinfo_type == DW_MACRO_define_strx ?
+				       "DW_MACRO_define_strx" : "DW_MACRO_undef_strx");
+
+	    if (str_offsets_base + offset_index * offset_size
+		>= str_offsets_section->size)
+	      {
+		complaint (_("%s pointing outside of .debug_str_offsets section "
+			     "[in module %s]"), macinfo_str, objfile_name (objfile));
+		break;
+	      }
+
+	    ULONGEST str_offset = read_offset (abfd, info_ptr, offset_size);
+
+	    const char *body = str_section->read_string (objfile, str_offset,
+							 macinfo_str);
+	    if (current_file == nullptr)
+	      {
+		/* DWARF violation as no main source is present.  */
+		complaint (_("debug info with no main source gives macro %s "
+			     "on line %d: %s"),
+			     macinfo_type == DW_MACRO_define_strx ? _("definition")
+			     : _("undefinition"), line, body);
+		break;
+	      }
+
+	    if (macinfo_type == DW_MACRO_define_strx)
+	      parse_macro_definition (current_file, line, body);
+	    else
+	      macro_undef (current_file, line, body);
+	   }
+	   break;
+
+	case DW_MACRO_start_file:
+	  {
+	    unsigned int bytes_read;
+	    int line, file;
+
+	    line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	    file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+
+	    if ((line == 0 && !at_commandline)
+		|| (line != 0 && at_commandline))
+	      complaint (_("debug info gives source %d included "
+			   "from %s at %s line %d"),
+			 file, at_commandline ? _("command-line") : _("file"),
+			 line == 0 ? _("zero") : _("non-zero"), line);
+
+	    if (at_commandline)
+	      {
+		/* This DW_MACRO_start_file was executed in the
+		   pass one.  */
+		at_commandline = 0;
+	      }
+	    else
+	      current_file = macro_start_file (builder, file, line,
+					       current_file, lh);
+	  }
+	  break;
+
+	case DW_MACRO_end_file:
+	  if (! current_file)
+	    complaint (_("macro debug info has an unmatched "
+			 "`close_file' directive"));
+	  else
+	    {
+	      current_file = current_file->included_by;
+	      if (! current_file)
+		{
+		  enum dwarf_macro_record_type next_type;
+
+		  /* GCC circa March 2002 doesn't produce the zero
+		     type byte marking the end of the compilation
+		     unit.  Complain if it's not there, but exit no
+		     matter what.  */
+
+		  /* Do we at least have room for a macinfo type byte?  */
+		  if (mac_ptr >= mac_end)
+		    {
+		      section->overflow_complaint ();
+		      return;
+		    }
+
+		  /* We don't increment mac_ptr here, so this is just
+		     a look-ahead.  */
+		  next_type
+		    = (enum dwarf_macro_record_type) read_1_byte (abfd,
+								  mac_ptr);
+		  if (next_type != 0)
+		    complaint (_("no terminating 0-type entry for "
+				 "macros in `.debug_macinfo' section"));
+
+		  return;
+		}
+	    }
+	  break;
+
+	case DW_MACRO_import:
+	case DW_MACRO_import_sup:
+	  {
+	    LONGEST offset;
+	    void **slot;
+	    bfd *include_bfd = abfd;
+	    const struct dwarf2_section_info *include_section = section;
+	    const gdb_byte *include_mac_end = mac_end;
+	    int is_dwz = section_is_dwz;
+	    const gdb_byte *new_mac_ptr;
+
+	    offset = read_offset (abfd, mac_ptr, offset_size);
+	    mac_ptr += offset_size;
+
+	    if (macinfo_type == DW_MACRO_import_sup)
+	      {
+		dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd,
+						     true);
+
+		dwz->macro.read (objfile);
+
+		include_section = &dwz->macro;
+		include_bfd = include_section->get_bfd_owner ();
+		include_mac_end = dwz->macro.buffer + dwz->macro.size;
+		is_dwz = 1;
+	      }
+
+	    new_mac_ptr = include_section->buffer + offset;
+	    slot = htab_find_slot (include_hash, new_mac_ptr, INSERT);
+
+	    if (*slot != NULL)
+	      {
+		/* This has actually happened; see
+		   http://sourceware.org/bugzilla/show_bug.cgi?id=13568.  */
+		complaint (_("recursive DW_MACRO_import in "
+			     ".debug_macro section"));
+	      }
+	    else
+	      {
+		*slot = (void *) new_mac_ptr;
+
+		dwarf_decode_macro_bytes (per_objfile, builder, include_bfd,
+					  new_mac_ptr, include_mac_end,
+					  current_file, lh, section,
+					  section_is_gnu, is_dwz, offset_size,
+					  str_section, str_offsets_section,
+					  str_offsets_base, include_hash);
+
+		htab_remove_elt (include_hash, (void *) new_mac_ptr);
+	      }
+	  }
+	  break;
+
+	case DW_MACINFO_vendor_ext:
+	  if (!section_is_gnu)
+	    {
+	      unsigned int bytes_read;
+
+	      /* This reads the constant, but since we don't recognize
+		 any vendor extensions, we ignore it.  */
+	      read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	      mac_ptr += bytes_read;
+	      read_direct_string (abfd, mac_ptr, &bytes_read);
+	      mac_ptr += bytes_read;
+
+	      /* We don't recognize any vendor extensions.  */
+	      break;
+	    }
+	  /* FALLTHROUGH */
+
+	default:
+	  mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
+					 mac_ptr, mac_end, abfd, offset_size,
+					 section);
+	  if (mac_ptr == NULL)
+	    return;
+	  break;
+	}
+      DIAGNOSTIC_POP
+    } while (macinfo_type != 0);
+}
+
+void
+dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
+		     buildsym_compunit *builder,
+		     const dwarf2_section_info *section,
+		     const struct line_header *lh, unsigned int offset_size,
+		     unsigned int offset, struct dwarf2_section_info *str_section,
+		     struct dwarf2_section_info *str_offsets_section,
+		     ULONGEST str_offsets_base, int section_is_gnu)
+{
+  bfd *abfd;
+  const gdb_byte *mac_ptr, *mac_end;
+  struct macro_source_file *current_file = 0;
+  enum dwarf_macro_record_type macinfo_type;
+  const gdb_byte *opcode_definitions[256];
+  void **slot;
+
+  abfd = section->get_bfd_owner ();
+
+  /* First pass: Find the name of the base filename.
+     This filename is needed in order to process all macros whose definition
+     (or undefinition) comes from the command line.  These macros are defined
+     before the first DW_MACINFO_start_file entry, and yet still need to be
+     associated to the base file.
+
+     To determine the base file name, we scan the macro definitions until we
+     reach the first DW_MACINFO_start_file entry.  We then initialize
+     CURRENT_FILE accordingly so that any macro definition found before the
+     first DW_MACINFO_start_file can still be associated to the base file.  */
+
+  mac_ptr = section->buffer + offset;
+  mac_end = section->buffer + section->size;
+
+  mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr,
+				      &offset_size, section_is_gnu);
+  if (mac_ptr == NULL)
+    {
+      /* We already issued a complaint.  */
+      return;
+    }
+
+  do
+    {
+      /* Do we at least have room for a macinfo type byte?  */
+      if (mac_ptr >= mac_end)
+	{
+	  /* Complaint is printed during the second pass as GDB will probably
+	     stop the first pass earlier upon finding
+	     DW_MACINFO_start_file.  */
+	  break;
+	}
+
+      macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr);
+      mac_ptr++;
+
+      /* Note that we rely on the fact that the corresponding GNU and
+	 DWARF constants are the same.  */
+      DIAGNOSTIC_PUSH
+      DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
+      switch (macinfo_type)
+	{
+	  /* A zero macinfo type indicates the end of the macro
+	     information.  */
+	case 0:
+	  break;
+
+	case DW_MACRO_define:
+	case DW_MACRO_undef:
+	  /* Only skip the data by MAC_PTR.  */
+	  {
+	    unsigned int bytes_read;
+
+	    read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	    read_direct_string (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	  }
+	  break;
+
+	case DW_MACRO_start_file:
+	  {
+	    unsigned int bytes_read;
+	    int line, file;
+
+	    line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	    file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+
+	    current_file = macro_start_file (builder, file, line,
+					     current_file, lh);
+	  }
+	  break;
+
+	case DW_MACRO_end_file:
+	  /* No data to skip by MAC_PTR.  */
+	  break;
+
+	case DW_MACRO_define_strp:
+	case DW_MACRO_undef_strp:
+	case DW_MACRO_define_sup:
+	case DW_MACRO_undef_sup:
+	  {
+	    unsigned int bytes_read;
+
+	    read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	    mac_ptr += offset_size;
+	  }
+	  break;
+	case DW_MACRO_define_strx:
+	case DW_MACRO_undef_strx:
+	  {
+	    unsigned int bytes_read;
+
+	    read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	    read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	    mac_ptr += bytes_read;
+	  }
+	  break;
+
+	case DW_MACRO_import:
+	case DW_MACRO_import_sup:
+	  /* Note that, according to the spec, a transparent include
+	     chain cannot call DW_MACRO_start_file.  So, we can just
+	     skip this opcode.  */
+	  mac_ptr += offset_size;
+	  break;
+
+	case DW_MACINFO_vendor_ext:
+	  /* Only skip the data by MAC_PTR.  */
+	  if (!section_is_gnu)
+	    {
+	      unsigned int bytes_read;
+
+	      read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
+	      mac_ptr += bytes_read;
+	      read_direct_string (abfd, mac_ptr, &bytes_read);
+	      mac_ptr += bytes_read;
+	    }
+	  /* FALLTHROUGH */
+
+	default:
+	  mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
+					 mac_ptr, mac_end, abfd, offset_size,
+					 section);
+	  if (mac_ptr == NULL)
+	    return;
+	  break;
+	}
+      DIAGNOSTIC_POP
+    } while (macinfo_type != 0 && current_file == NULL);
+
+  /* Second pass: Process all entries.
+
+     Use the AT_COMMAND_LINE flag to determine whether we are still processing
+     command-line macro definitions/undefinitions.  This flag is unset when we
+     reach the first DW_MACINFO_start_file entry.  */
+
+  htab_up include_hash (htab_create_alloc (1, htab_hash_pointer,
+					   htab_eq_pointer,
+					   NULL, xcalloc, xfree));
+  mac_ptr = section->buffer + offset;
+  slot = htab_find_slot (include_hash.get (), mac_ptr, INSERT);
+  *slot = (void *) mac_ptr;
+  dwarf_decode_macro_bytes (per_objfile, builder, abfd, mac_ptr, mac_end,
+			    current_file, lh, section, section_is_gnu, 0,
+			    offset_size, str_section, str_offsets_section,
+			    str_offsets_base, include_hash.get ());
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/macro.h ./gdb/dwarf2/macro.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/macro.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/macro.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,36 @@
+/* DWARF macro support for GDB.
+
+   Copyright (C) 2003-2021 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 GDB_DWARF2_MACRO_H
+#define GDB_DWARF2_MACRO_H
+
+struct buildsym_compunit;
+
+extern void dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
+				 buildsym_compunit *builder,
+				 const dwarf2_section_info *section,
+				 const struct line_header *lh,
+				 unsigned int offset_size,
+				 unsigned int offset,
+				 dwarf2_section_info *str_section,
+				 dwarf2_section_info *str_offsets_section,
+				 ULONGEST str_offsets_base,
+				 int section_is_gnu);
+
+#endif /* GDB_DWARF2_MACRO_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/public.h ./gdb/dwarf2/public.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/public.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/public.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,46 @@
+/* Public API for gdb DWARF reader
+
+   Copyright (C) 2021 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 DWARF2_PUBLIC_H
+#define DWARF2_PUBLIC_H
+
+extern int dwarf2_has_info (struct objfile *,
+                            const struct dwarf2_debug_sections *,
+			    bool = false);
+
+/* A DWARF names index variant.  */
+enum class dw_index_kind
+{
+  /* GDB's own .gdb_index format.   */
+  GDB_INDEX,
+
+  /* DWARF5 .debug_names.  */
+  DEBUG_NAMES,
+};
+
+/* Initialize for reading DWARF for OBJFILE, and push the appropriate
+   entry on the objfile's "qf" list.  */
+extern void dwarf2_initialize_objfile (struct objfile *objfile);
+
+struct psymbol_functions;
+extern void dwarf2_build_psymtabs (struct objfile *,
+				   psymbol_functions *psf = nullptr);
+extern void dwarf2_build_frame_info (struct objfile *);
+
+#endif /* DWARF2_PUBLIC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/read.c ./gdb/dwarf2/read.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/read.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/read.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,24903 @@
+/* DWARF 2 debugging format support for GDB.
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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/>.  */
+
+/* FIXME: Various die-reading functions need to be more careful with
+   reading off the end of the section.
+   E.g., load_partial_dies, read_partial_die.  */
+
+#include "defs.h"
+#include "dwarf2/read.h"
+#include "dwarf2/abbrev.h"
+#include "dwarf2/attribute.h"
+#include "dwarf2/comp-unit-head.h"
+#include "dwarf2/cu.h"
+#include "dwarf2/index-cache.h"
+#include "dwarf2/index-common.h"
+#include "dwarf2/leb.h"
+#include "dwarf2/line-header.h"
+#include "dwarf2/dwz.h"
+#include "dwarf2/macro.h"
+#include "dwarf2/die.h"
+#include "dwarf2/sect-names.h"
+#include "dwarf2/stringify.h"
+#include "dwarf2/public.h"
+#include "bfd.h"
+#include "elf-bfd.h"
+#include "symtab.h"
+#include "gdbtypes.h"
+#include "objfiles.h"
+#include "dwarf2.h"
+#include "demangle.h"
+#include "gdb-demangle.h"
+#include "filenames.h"	/* for DOSish file names */
+#include "language.h"
+#include "complaints.h"
+#include "dwarf2/expr.h"
+#include "dwarf2/loc.h"
+#include "cp-support.h"
+#include "hashtab.h"
+#include "command.h"
+#include "gdbcmd.h"
+#include "block.h"
+#include "addrmap.h"
+#include "typeprint.h"
+#include "psympriv.h"
+#include "c-lang.h"
+#include "go-lang.h"
+#include "valprint.h"
+#include "gdbcore.h" /* for gnutarget */
+#include "gdb/gdb-index.h"
+#include "gdb_bfd.h"
+#include "f-lang.h"
+#include "source.h"
+#include "build-id.h"
+#include "namespace.h"
+#include "gdbsupport/function-view.h"
+#include "gdbsupport/gdb_optional.h"
+#include "gdbsupport/underlying.h"
+#include "gdbsupport/hash_enum.h"
+#include "filename-seen-cache.h"
+#include "producer.h"
+#include <fcntl.h>
+#include <algorithm>
+#include <unordered_map>
+#include "gdbsupport/selftest.h"
+#include "rust-lang.h"
+#include "gdbsupport/pathstuff.h"
+#include "count-one-bits.h"
+#include <unordered_set>
+
+/* When == 1, print basic high level tracing messages.
+   When > 1, be more verbose.
+   This is in contrast to the low level DIE reading of dwarf_die_debug.  */
+static unsigned int dwarf_read_debug = 0;
+
+/* Print a "dwarf-read" debug statement if dwarf_read_debug is >= 1.  */
+
+#define dwarf_read_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (dwarf_read_debug >= 1, "dwarf-read", fmt, \
+			      ##__VA_ARGS__)
+
+/* Print a "dwarf-read" debug statement if dwarf_read_debug is >= 2.  */
+
+#define dwarf_read_debug_printf_v(fmt, ...) \
+  debug_prefixed_printf_cond (dwarf_read_debug >= 2, "dwarf-read", fmt, \
+			      ##__VA_ARGS__)
+
+/* When non-zero, dump DIEs after they are read in.  */
+static unsigned int dwarf_die_debug = 0;
+
+/* When non-zero, dump line number entries as they are read in.  */
+unsigned int dwarf_line_debug = 0;
+
+/* When true, cross-check physname against demangler.  */
+static bool check_physname = false;
+
+/* When true, do not reject deprecated .gdb_index sections.  */
+static bool use_deprecated_index_sections = false;
+
+/* This is used to store the data that is always per objfile.  */
+static const objfile_key<dwarf2_per_objfile> dwarf2_objfile_data_key;
+
+/* These are used to store the dwarf2_per_bfd objects.
+
+   objfiles having the same BFD, which doesn't require relocations, are going to
+   share a dwarf2_per_bfd object, which is held in the _bfd_data_key version.
+
+   Other objfiles are not going to share a dwarf2_per_bfd with any other
+   objfiles, so they'll have their own version kept in the _objfile_data_key
+   version.  */
+static const struct bfd_key<dwarf2_per_bfd> dwarf2_per_bfd_bfd_data_key;
+static const struct objfile_key<dwarf2_per_bfd> dwarf2_per_bfd_objfile_data_key;
+
+/* The "aclass" indices for various kinds of computed DWARF symbols.  */
+
+static int dwarf2_locexpr_index;
+static int dwarf2_loclist_index;
+static int dwarf2_locexpr_block_index;
+static int dwarf2_loclist_block_index;
+
+/* Size of .debug_loclists section header for 32-bit DWARF format.  */
+#define LOCLIST_HEADER_SIZE32 12
+
+/* Size of .debug_loclists section header for 64-bit DWARF format.  */
+#define LOCLIST_HEADER_SIZE64 20
+
+/* Size of .debug_rnglists section header for 32-bit DWARF format.  */
+#define RNGLIST_HEADER_SIZE32 12
+
+/* Size of .debug_rnglists section header for 64-bit DWARF format.  */
+#define RNGLIST_HEADER_SIZE64 20
+
+/* An index into a (C++) symbol name component in a symbol name as
+   recorded in the mapped_index's symbol table.  For each C++ symbol
+   in the symbol table, we record one entry for the start of each
+   component in the symbol in a table of name components, and then
+   sort the table, in order to be able to binary search symbol names,
+   ignoring leading namespaces, both completion and regular look up.
+   For example, for symbol "A::B::C", we'll have an entry that points
+   to "A::B::C", another that points to "B::C", and another for "C".
+   Note that function symbols in GDB index have no parameter
+   information, just the function/method names.  You can convert a
+   name_component to a "const char *" using the
+   'mapped_index::symbol_name_at(offset_type)' method.  */
+
+struct name_component
+{
+  /* Offset in the symbol name where the component starts.  Stored as
+     a (32-bit) offset instead of a pointer to save memory and improve
+     locality on 64-bit architectures.  */
+  offset_type name_offset;
+
+  /* The symbol's index in the symbol and constant pool tables of a
+     mapped_index.  */
+  offset_type idx;
+};
+
+/* Base class containing bits shared by both .gdb_index and
+   .debug_name indexes.  */
+
+struct mapped_index_base
+{
+  mapped_index_base () = default;
+  DISABLE_COPY_AND_ASSIGN (mapped_index_base);
+
+  /* The name_component table (a sorted vector).  See name_component's
+     description above.  */
+  std::vector<name_component> name_components;
+
+  /* How NAME_COMPONENTS is sorted.  */
+  enum case_sensitivity name_components_casing;
+
+  /* Return the number of names in the symbol table.  */
+  virtual size_t symbol_name_count () const = 0;
+
+  /* Get the name of the symbol at IDX in the symbol table.  */
+  virtual const char *symbol_name_at
+    (offset_type idx, dwarf2_per_objfile *per_objfile) const = 0;
+
+  /* Return whether the name at IDX in the symbol table should be
+     ignored.  */
+  virtual bool symbol_name_slot_invalid (offset_type idx) const
+  {
+    return false;
+  }
+
+  /* Build the symbol name component sorted vector, if we haven't
+     yet.  */
+  void build_name_components (dwarf2_per_objfile *per_objfile);
+
+  /* Returns the lower (inclusive) and upper (exclusive) bounds of the
+     possible matches for LN_NO_PARAMS in the name component
+     vector.  */
+  std::pair<std::vector<name_component>::const_iterator,
+	    std::vector<name_component>::const_iterator>
+    find_name_components_bounds (const lookup_name_info &ln_no_params,
+				 enum language lang,
+				 dwarf2_per_objfile *per_objfile) const;
+
+  /* Prevent deleting/destroying via a base class pointer.  */
+protected:
+  ~mapped_index_base() = default;
+};
+
+/* This is a view into the index that converts from bytes to an
+   offset_type, and allows indexing.  Unaligned bytes are specifically
+   allowed here, and handled via unpacking.  */
+
+class offset_view
+{
+public:
+  offset_view () = default;
+
+  explicit offset_view (gdb::array_view<const gdb_byte> bytes)
+    : m_bytes (bytes)
+  {
+  }
+
+  /* Extract the INDEXth offset_type from the array.  */
+  offset_type operator[] (size_t index) const
+  {
+    const gdb_byte *bytes = &m_bytes[index * sizeof (offset_type)];
+    return (offset_type) extract_unsigned_integer (bytes,
+						   sizeof (offset_type),
+						   BFD_ENDIAN_LITTLE);
+  }
+
+  /* Return the number of offset_types in this array.  */
+  size_t size () const
+  {
+    return m_bytes.size () / sizeof (offset_type);
+  }
+
+  /* Return true if this view is empty.  */
+  bool empty () const
+  {
+    return m_bytes.empty ();
+  }
+
+private:
+  /* The underlying bytes.  */
+  gdb::array_view<const gdb_byte> m_bytes;
+};
+
+/* A description of the mapped index.  The file format is described in
+   a comment by the code that writes the index.  */
+struct mapped_index final : public mapped_index_base
+{
+  /* Index data format version.  */
+  int version = 0;
+
+  /* The address table data.  */
+  gdb::array_view<const gdb_byte> address_table;
+
+  /* The symbol table, implemented as a hash table.  */
+  offset_view symbol_table;
+
+  /* A pointer to the constant pool.  */
+  gdb::array_view<const gdb_byte> constant_pool;
+
+  /* Return the index into the constant pool of the name of the IDXth
+     symbol in the symbol table.  */
+  offset_type symbol_name_index (offset_type idx) const
+  {
+    return symbol_table[2 * idx];
+  }
+
+  /* Return the index into the constant pool of the CU vector of the
+     IDXth symbol in the symbol table.  */
+  offset_type symbol_vec_index (offset_type idx) const
+  {
+    return symbol_table[2 * idx + 1];
+  }
+
+  bool symbol_name_slot_invalid (offset_type idx) const override
+  {
+    return (symbol_name_index (idx) == 0
+	    && symbol_vec_index (idx) == 0);
+  }
+
+  /* Convenience method to get at the name of the symbol at IDX in the
+     symbol table.  */
+  const char *symbol_name_at
+    (offset_type idx, dwarf2_per_objfile *per_objfile) const override
+  {
+    return (const char *) (this->constant_pool.data ()
+			   + symbol_name_index (idx));
+  }
+
+  size_t symbol_name_count () const override
+  { return this->symbol_table.size () / 2; }
+};
+
+/* A description of the mapped .debug_names.
+   Uninitialized map has CU_COUNT 0.  */
+struct mapped_debug_names final : public mapped_index_base
+{
+  bfd_endian dwarf5_byte_order;
+  bool dwarf5_is_dwarf64;
+  bool augmentation_is_gdb;
+  uint8_t offset_size;
+  uint32_t cu_count = 0;
+  uint32_t tu_count, bucket_count, name_count;
+  const gdb_byte *cu_table_reordered, *tu_table_reordered;
+  const uint32_t *bucket_table_reordered, *hash_table_reordered;
+  const gdb_byte *name_table_string_offs_reordered;
+  const gdb_byte *name_table_entry_offs_reordered;
+  const gdb_byte *entry_pool;
+
+  struct index_val
+  {
+    ULONGEST dwarf_tag;
+    struct attr
+    {
+      /* Attribute name DW_IDX_*.  */
+      ULONGEST dw_idx;
+
+      /* Attribute form DW_FORM_*.  */
+      ULONGEST form;
+
+      /* Value if FORM is DW_FORM_implicit_const.  */
+      LONGEST implicit_const;
+    };
+    std::vector<attr> attr_vec;
+  };
+
+  std::unordered_map<ULONGEST, index_val> abbrev_map;
+
+  const char *namei_to_name
+    (uint32_t namei, dwarf2_per_objfile *per_objfile) const;
+
+  /* Implementation of the mapped_index_base virtual interface, for
+     the name_components cache.  */
+
+  const char *symbol_name_at
+    (offset_type idx, dwarf2_per_objfile *per_objfile) const override
+  { return namei_to_name (idx, per_objfile); }
+
+  size_t symbol_name_count () const override
+  { return this->name_count; }
+};
+
+/* See dwarf2read.h.  */
+
+dwarf2_per_objfile *
+get_dwarf2_per_objfile (struct objfile *objfile)
+{
+  return dwarf2_objfile_data_key.get (objfile);
+}
+
+/* Default names of the debugging sections.  */
+
+/* Note that if the debugging section has been compressed, it might
+   have a name like .zdebug_info.  */
+
+const struct dwarf2_debug_sections dwarf2_elf_names =
+{
+  { ".debug_info", ".zdebug_info" },
+  { ".debug_abbrev", ".zdebug_abbrev" },
+  { ".debug_line", ".zdebug_line" },
+  { ".debug_loc", ".zdebug_loc" },
+  { ".debug_loclists", ".zdebug_loclists" },
+  { ".debug_macinfo", ".zdebug_macinfo" },
+  { ".debug_macro", ".zdebug_macro" },
+  { ".debug_str", ".zdebug_str" },
+  { ".debug_str_offsets", ".zdebug_str_offsets" },
+  { ".debug_line_str", ".zdebug_line_str" },
+  { ".debug_ranges", ".zdebug_ranges" },
+  { ".debug_rnglists", ".zdebug_rnglists" },
+  { ".debug_types", ".zdebug_types" },
+  { ".debug_addr", ".zdebug_addr" },
+  { ".debug_frame", ".zdebug_frame" },
+  { ".eh_frame", NULL },
+  { ".gdb_index", ".zgdb_index" },
+  { ".debug_names", ".zdebug_names" },
+  { ".debug_aranges", ".zdebug_aranges" },
+  23
+};
+
+/* List of DWO/DWP sections.  */
+
+static const struct dwop_section_names
+{
+  struct dwarf2_section_names abbrev_dwo;
+  struct dwarf2_section_names info_dwo;
+  struct dwarf2_section_names line_dwo;
+  struct dwarf2_section_names loc_dwo;
+  struct dwarf2_section_names loclists_dwo;
+  struct dwarf2_section_names macinfo_dwo;
+  struct dwarf2_section_names macro_dwo;
+  struct dwarf2_section_names rnglists_dwo;
+  struct dwarf2_section_names str_dwo;
+  struct dwarf2_section_names str_offsets_dwo;
+  struct dwarf2_section_names types_dwo;
+  struct dwarf2_section_names cu_index;
+  struct dwarf2_section_names tu_index;
+}
+dwop_section_names =
+{
+  { ".debug_abbrev.dwo", ".zdebug_abbrev.dwo" },
+  { ".debug_info.dwo", ".zdebug_info.dwo" },
+  { ".debug_line.dwo", ".zdebug_line.dwo" },
+  { ".debug_loc.dwo", ".zdebug_loc.dwo" },
+  { ".debug_loclists.dwo", ".zdebug_loclists.dwo" },
+  { ".debug_macinfo.dwo", ".zdebug_macinfo.dwo" },
+  { ".debug_macro.dwo", ".zdebug_macro.dwo" },
+  { ".debug_rnglists.dwo", ".zdebug_rnglists.dwo" },
+  { ".debug_str.dwo", ".zdebug_str.dwo" },
+  { ".debug_str_offsets.dwo", ".zdebug_str_offsets.dwo" },
+  { ".debug_types.dwo", ".zdebug_types.dwo" },
+  { ".debug_cu_index", ".zdebug_cu_index" },
+  { ".debug_tu_index", ".zdebug_tu_index" },
+};
+
+/* local data types */
+
+/* The location list and range list sections (.debug_loclists & .debug_rnglists)
+   begin with a header,  which contains the following information.  */
+struct loclists_rnglists_header
+{
+  /* A 4-byte or 12-byte length containing the length of the
+     set of entries for this compilation unit, not including the
+     length field itself.  */
+  unsigned int length;
+
+  /* A 2-byte version identifier.  */
+  short version;
+
+  /* A 1-byte unsigned integer containing the size in bytes of an address on
+     the target system.  */
+  unsigned char addr_size;
+
+  /* A 1-byte unsigned integer containing the size in bytes of a segment selector
+     on the target system.  */
+  unsigned char segment_collector_size;
+
+  /* A 4-byte count of the number of offsets that follow the header.  */
+  unsigned int offset_entry_count;
+};
+
+/* A struct that can be used as a hash key for tables based on DW_AT_stmt_list.
+   This includes type_unit_group and quick_file_names.  */
+
+struct stmt_list_hash
+{
+  /* The DWO unit this table is from or NULL if there is none.  */
+  struct dwo_unit *dwo_unit;
+
+  /* Offset in .debug_line or .debug_line.dwo.  */
+  sect_offset line_sect_off;
+};
+
+/* Each element of dwarf2_per_bfd->type_unit_groups is a pointer to
+   an object of this type.  This contains elements of type unit groups
+   that can be shared across objfiles.  The non-shareable parts are in
+   type_unit_group_unshareable.  */
+
+struct type_unit_group : public dwarf2_per_cu_data
+{
+  /* The TUs that share this DW_AT_stmt_list entry.
+     This is added to while parsing type units to build partial symtabs,
+     and is deleted afterwards and not used again.  */
+  std::vector<signatured_type *> *tus = nullptr;
+
+  /* The data used to construct the hash key.  */
+  struct stmt_list_hash hash {};
+};
+
+/* These sections are what may appear in a (real or virtual) DWO file.  */
+
+struct dwo_sections
+{
+  struct dwarf2_section_info abbrev;
+  struct dwarf2_section_info line;
+  struct dwarf2_section_info loc;
+  struct dwarf2_section_info loclists;
+  struct dwarf2_section_info macinfo;
+  struct dwarf2_section_info macro;
+  struct dwarf2_section_info rnglists;
+  struct dwarf2_section_info str;
+  struct dwarf2_section_info str_offsets;
+  /* In the case of a virtual DWO file, these two are unused.  */
+  struct dwarf2_section_info info;
+  std::vector<dwarf2_section_info> types;
+};
+
+/* CUs/TUs in DWP/DWO files.  */
+
+struct dwo_unit
+{
+  /* Backlink to the containing struct dwo_file.  */
+  struct dwo_file *dwo_file;
+
+  /* The "id" that distinguishes this CU/TU.
+     .debug_info calls this "dwo_id", .debug_types calls this "signature".
+     Since signatures came first, we stick with it for consistency.  */
+  ULONGEST signature;
+
+  /* The section this CU/TU lives in, in the DWO file.  */
+  struct dwarf2_section_info *section;
+
+  /* Same as dwarf2_per_cu_data:{sect_off,length} but in the DWO section.  */
+  sect_offset sect_off;
+  unsigned int length;
+
+  /* For types, offset in the type's DIE of the type defined by this TU.  */
+  cu_offset type_offset_in_tu;
+};
+
+/* include/dwarf2.h defines the DWP section codes.
+   It defines a max value but it doesn't define a min value, which we
+   use for error checking, so provide one.  */
+
+enum dwp_v2_section_ids
+{
+  DW_SECT_MIN = 1
+};
+
+/* Data for one DWO file.
+
+   This includes virtual DWO files (a virtual DWO file is a DWO file as it
+   appears in a DWP file).  DWP files don't really have DWO files per se -
+   comdat folding of types "loses" the DWO file they came from, and from
+   a high level view DWP files appear to contain a mass of random types.
+   However, to maintain consistency with the non-DWP case we pretend DWP
+   files contain virtual DWO files, and we assign each TU with one virtual
+   DWO file (generally based on the line and abbrev section offsets -
+   a heuristic that seems to work in practice).  */
+
+struct dwo_file
+{
+  dwo_file () = default;
+  DISABLE_COPY_AND_ASSIGN (dwo_file);
+
+  /* The DW_AT_GNU_dwo_name or DW_AT_dwo_name attribute.
+     For virtual DWO files the name is constructed from the section offsets
+     of abbrev,line,loc,str_offsets so that we combine virtual DWO files
+     from related CU+TUs.  */
+  const char *dwo_name = nullptr;
+
+  /* The DW_AT_comp_dir attribute.  */
+  const char *comp_dir = nullptr;
+
+  /* The bfd, when the file is open.  Otherwise this is NULL.
+     This is unused(NULL) for virtual DWO files where we use dwp_file.dbfd.  */
+  gdb_bfd_ref_ptr dbfd;
+
+  /* The sections that make up this DWO file.
+     Remember that for virtual DWO files in DWP V2 or DWP V5, these are virtual
+     sections (for lack of a better name).  */
+  struct dwo_sections sections {};
+
+  /* The CUs in the file.
+     Each element is a struct dwo_unit. Multiple CUs per DWO are supported as
+     an extension to handle LLVM's Link Time Optimization output (where
+     multiple source files may be compiled into a single object/dwo pair). */
+  htab_up cus;
+
+  /* Table of TUs in the file.
+     Each element is a struct dwo_unit.  */
+  htab_up tus;
+};
+
+/* These sections are what may appear in a DWP file.  */
+
+struct dwp_sections
+{
+  /* These are used by all DWP versions (1, 2 and 5).  */
+  struct dwarf2_section_info str;
+  struct dwarf2_section_info cu_index;
+  struct dwarf2_section_info tu_index;
+
+  /* These are only used by DWP version 2 and version 5 files.
+     In DWP version 1 the .debug_info.dwo, .debug_types.dwo, and other
+     sections are referenced by section number, and are not recorded here.
+     In DWP version 2 or 5 there is at most one copy of all these sections,
+     each section being (effectively) comprised of the concatenation of all of
+     the individual sections that exist in the version 1 format.
+     To keep the code simple we treat each of these concatenated pieces as a
+     section itself (a virtual section?).  */
+  struct dwarf2_section_info abbrev;
+  struct dwarf2_section_info info;
+  struct dwarf2_section_info line;
+  struct dwarf2_section_info loc;
+  struct dwarf2_section_info loclists;
+  struct dwarf2_section_info macinfo;
+  struct dwarf2_section_info macro;
+  struct dwarf2_section_info rnglists;
+  struct dwarf2_section_info str_offsets;
+  struct dwarf2_section_info types;
+};
+
+/* These sections are what may appear in a virtual DWO file in DWP version 1.
+   A virtual DWO file is a DWO file as it appears in a DWP file.  */
+
+struct virtual_v1_dwo_sections
+{
+  struct dwarf2_section_info abbrev;
+  struct dwarf2_section_info line;
+  struct dwarf2_section_info loc;
+  struct dwarf2_section_info macinfo;
+  struct dwarf2_section_info macro;
+  struct dwarf2_section_info str_offsets;
+  /* Each DWP hash table entry records one CU or one TU.
+     That is recorded here, and copied to dwo_unit.section.  */
+  struct dwarf2_section_info info_or_types;
+};
+
+/* Similar to virtual_v1_dwo_sections, but for DWP version 2 or 5.
+   In version 2, the sections of the DWO files are concatenated together
+   and stored in one section of that name.  Thus each ELF section contains
+   several "virtual" sections.  */
+
+struct virtual_v2_or_v5_dwo_sections
+{
+  bfd_size_type abbrev_offset;
+  bfd_size_type abbrev_size;
+
+  bfd_size_type line_offset;
+  bfd_size_type line_size;
+
+  bfd_size_type loc_offset;
+  bfd_size_type loc_size;
+
+  bfd_size_type loclists_offset;
+  bfd_size_type loclists_size;
+
+  bfd_size_type macinfo_offset;
+  bfd_size_type macinfo_size;
+
+  bfd_size_type macro_offset;
+  bfd_size_type macro_size;
+
+  bfd_size_type rnglists_offset;
+  bfd_size_type rnglists_size;
+
+  bfd_size_type str_offsets_offset;
+  bfd_size_type str_offsets_size;
+
+  /* Each DWP hash table entry records one CU or one TU.
+     That is recorded here, and copied to dwo_unit.section.  */
+  bfd_size_type info_or_types_offset;
+  bfd_size_type info_or_types_size;
+};
+
+/* Contents of DWP hash tables.  */
+
+struct dwp_hash_table
+{
+  uint32_t version, nr_columns;
+  uint32_t nr_units, nr_slots;
+  const gdb_byte *hash_table, *unit_table;
+  union
+  {
+    struct
+    {
+      const gdb_byte *indices;
+    } v1;
+    struct
+    {
+      /* This is indexed by column number and gives the id of the section
+	 in that column.  */
+#define MAX_NR_V2_DWO_SECTIONS \
+  (1 /* .debug_info or .debug_types */ \
+   + 1 /* .debug_abbrev */ \
+   + 1 /* .debug_line */ \
+   + 1 /* .debug_loc */ \
+   + 1 /* .debug_str_offsets */ \
+   + 1 /* .debug_macro or .debug_macinfo */)
+      int section_ids[MAX_NR_V2_DWO_SECTIONS];
+      const gdb_byte *offsets;
+      const gdb_byte *sizes;
+    } v2;
+    struct
+    {
+      /* This is indexed by column number and gives the id of the section
+	 in that column.  */
+#define MAX_NR_V5_DWO_SECTIONS \
+  (1 /* .debug_info */ \
+   + 1 /* .debug_abbrev */ \
+   + 1 /* .debug_line */ \
+   + 1 /* .debug_loclists */ \
+   + 1 /* .debug_str_offsets */ \
+   + 1 /* .debug_macro */ \
+   + 1 /* .debug_rnglists */)
+      int section_ids[MAX_NR_V5_DWO_SECTIONS];
+      const gdb_byte *offsets;
+      const gdb_byte *sizes;
+    } v5;
+  } section_pool;
+};
+
+/* Data for one DWP file.  */
+
+struct dwp_file
+{
+  dwp_file (const char *name_, gdb_bfd_ref_ptr &&abfd)
+    : name (name_),
+      dbfd (std::move (abfd))
+  {
+  }
+
+  /* Name of the file.  */
+  const char *name;
+
+  /* File format version.  */
+  int version = 0;
+
+  /* The bfd.  */
+  gdb_bfd_ref_ptr dbfd;
+
+  /* Section info for this file.  */
+  struct dwp_sections sections {};
+
+  /* Table of CUs in the file.  */
+  const struct dwp_hash_table *cus = nullptr;
+
+  /* Table of TUs in the file.  */
+  const struct dwp_hash_table *tus = nullptr;
+
+  /* Tables of loaded CUs/TUs.  Each entry is a struct dwo_unit *.  */
+  htab_up loaded_cus;
+  htab_up loaded_tus;
+
+  /* Table to map ELF section numbers to their sections.
+     This is only needed for the DWP V1 file format.  */
+  unsigned int num_sections = 0;
+  asection **elf_sections = nullptr;
+};
+
+/* Struct used to pass misc. parameters to read_die_and_children, et
+   al.  which are used for both .debug_info and .debug_types dies.
+   All parameters here are unchanging for the life of the call.  This
+   struct exists to abstract away the constant parameters of die reading.  */
+
+struct die_reader_specs
+{
+  /* The bfd of die_section.  */
+  bfd *abfd;
+
+  /* The CU of the DIE we are parsing.  */
+  struct dwarf2_cu *cu;
+
+  /* Non-NULL if reading a DWO file (including one packaged into a DWP).  */
+  struct dwo_file *dwo_file;
+
+  /* The section the die comes from.
+     This is either .debug_info or .debug_types, or the .dwo variants.  */
+  struct dwarf2_section_info *die_section;
+
+  /* die_section->buffer.  */
+  const gdb_byte *buffer;
+
+  /* The end of the buffer.  */
+  const gdb_byte *buffer_end;
+
+  /* The abbreviation table to use when reading the DIEs.  */
+  struct abbrev_table *abbrev_table;
+};
+
+/* A subclass of die_reader_specs that holds storage and has complex
+   constructor and destructor behavior.  */
+
+class cutu_reader : public die_reader_specs
+{
+public:
+
+  cutu_reader (dwarf2_per_cu_data *this_cu,
+	       dwarf2_per_objfile *per_objfile,
+	       struct abbrev_table *abbrev_table,
+	       dwarf2_cu *existing_cu,
+	       bool skip_partial);
+
+  explicit cutu_reader (struct dwarf2_per_cu_data *this_cu,
+			dwarf2_per_objfile *per_objfile,
+			struct dwarf2_cu *parent_cu = nullptr,
+			struct dwo_file *dwo_file = nullptr);
+
+  DISABLE_COPY_AND_ASSIGN (cutu_reader);
+
+  const gdb_byte *info_ptr = nullptr;
+  struct die_info *comp_unit_die = nullptr;
+  bool dummy_p = false;
+
+  /* Release the new CU, putting it on the chain.  This cannot be done
+     for dummy CUs.  */
+  void keep ();
+
+private:
+  void init_tu_and_read_dwo_dies (dwarf2_per_cu_data *this_cu,
+				  dwarf2_per_objfile *per_objfile,
+				  dwarf2_cu *existing_cu);
+
+  struct dwarf2_per_cu_data *m_this_cu;
+  std::unique_ptr<dwarf2_cu> m_new_cu;
+
+  /* The ordinary abbreviation table.  */
+  abbrev_table_up m_abbrev_table_holder;
+
+  /* The DWO abbreviation table.  */
+  abbrev_table_up m_dwo_abbrev_table;
+};
+
+/* When we construct a partial symbol table entry we only
+   need this much information.  */
+struct partial_die_info : public allocate_on_obstack
+  {
+    partial_die_info (sect_offset sect_off, const struct abbrev_info *abbrev);
+
+    /* Disable assign but still keep copy ctor, which is needed
+       load_partial_dies.   */
+    partial_die_info& operator=(const partial_die_info& rhs) = delete;
+    partial_die_info (const partial_die_info &) = default;
+
+    /* Adjust the partial die before generating a symbol for it.  This
+       function may set the is_external flag or change the DIE's
+       name.  */
+    void fixup (struct dwarf2_cu *cu);
+
+    /* Read a minimal amount of information into the minimal die
+       structure.  */
+    const gdb_byte *read (const struct die_reader_specs *reader,
+			  const struct abbrev_info &abbrev,
+			  const gdb_byte *info_ptr);
+
+    /* Compute the name of this partial DIE.  This memoizes the
+       result, so it is safe to call multiple times.  */
+    const char *name (dwarf2_cu *cu);
+
+    /* Offset of this DIE.  */
+    const sect_offset sect_off;
+
+    /* DWARF-2 tag for this DIE.  */
+    const ENUM_BITFIELD(dwarf_tag) tag : 16;
+
+    /* Assorted flags describing the data found in this DIE.  */
+    const unsigned int has_children : 1;
+
+    unsigned int is_external : 1;
+    unsigned int is_declaration : 1;
+    unsigned int has_type : 1;
+    unsigned int has_specification : 1;
+    unsigned int has_pc_info : 1;
+    unsigned int may_be_inlined : 1;
+
+    /* This DIE has been marked DW_AT_main_subprogram.  */
+    unsigned int main_subprogram : 1;
+
+    /* Flag set if the SCOPE field of this structure has been
+       computed.  */
+    unsigned int scope_set : 1;
+
+    /* Flag set if the DIE has a byte_size attribute.  */
+    unsigned int has_byte_size : 1;
+
+    /* Flag set if the DIE has a DW_AT_const_value attribute.  */
+    unsigned int has_const_value : 1;
+
+    /* Flag set if any of the DIE's children are template arguments.  */
+    unsigned int has_template_arguments : 1;
+
+    /* Flag set if fixup has been called on this die.  */
+    unsigned int fixup_called : 1;
+
+    /* Flag set if DW_TAG_imported_unit uses DW_FORM_GNU_ref_alt.  */
+    unsigned int is_dwz : 1;
+
+    /* Flag set if spec_offset uses DW_FORM_GNU_ref_alt.  */
+    unsigned int spec_is_dwz : 1;
+
+    unsigned int canonical_name : 1;
+
+    /* The name of this DIE.  Normally the value of DW_AT_name, but
+       sometimes a default name for unnamed DIEs.  */
+    const char *raw_name = nullptr;
+
+    /* The linkage name, if present.  */
+    const char *linkage_name = nullptr;
+
+    /* The scope to prepend to our children.  This is generally
+       allocated on the comp_unit_obstack, so will disappear
+       when this compilation unit leaves the cache.  */
+    const char *scope = nullptr;
+
+    /* Some data associated with the partial DIE.  The tag determines
+       which field is live.  */
+    union
+    {
+      /* The location description associated with this DIE, if any.  */
+      struct dwarf_block *locdesc;
+      /* The offset of an import, for DW_TAG_imported_unit.  */
+      sect_offset sect_off;
+    } d {};
+
+    /* If HAS_PC_INFO, the PC range associated with this DIE.  */
+    CORE_ADDR lowpc = 0;
+    CORE_ADDR highpc = 0;
+
+    /* Pointer into the info_buffer (or types_buffer) pointing at the target of
+       DW_AT_sibling, if any.  */
+    /* NOTE: This member isn't strictly necessary, partial_die_info::read
+       could return DW_AT_sibling values to its caller load_partial_dies.  */
+    const gdb_byte *sibling = nullptr;
+
+    /* If HAS_SPECIFICATION, the offset of the DIE referred to by
+       DW_AT_specification (or DW_AT_abstract_origin or
+       DW_AT_extension).  */
+    sect_offset spec_offset {};
+
+    /* Pointers to this DIE's parent, first child, and next sibling,
+       if any.  */
+    struct partial_die_info *die_parent = nullptr;
+    struct partial_die_info *die_child = nullptr;
+    struct partial_die_info *die_sibling = nullptr;
+
+    friend struct partial_die_info *
+    dwarf2_cu::find_partial_die (sect_offset sect_off);
+
+  private:
+    /* Only need to do look up in dwarf2_cu::find_partial_die.  */
+    partial_die_info (sect_offset sect_off)
+      : partial_die_info (sect_off, DW_TAG_padding, 0)
+    {
+    }
+
+    partial_die_info (sect_offset sect_off_, enum dwarf_tag tag_,
+		      int has_children_)
+      : sect_off (sect_off_), tag (tag_), has_children (has_children_)
+    {
+      is_external = 0;
+      is_declaration = 0;
+      has_type = 0;
+      has_specification = 0;
+      has_pc_info = 0;
+      may_be_inlined = 0;
+      main_subprogram = 0;
+      scope_set = 0;
+      has_byte_size = 0;
+      has_const_value = 0;
+      has_template_arguments = 0;
+      fixup_called = 0;
+      is_dwz = 0;
+      spec_is_dwz = 0;
+      canonical_name = 0;
+    }
+  };
+
+/* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte,
+   but this would require a corresponding change in unpack_field_as_long
+   and friends.  */
+static int bits_per_byte = 8;
+
+struct variant_part_builder;
+
+/* When reading a variant, we track a bit more information about the
+   field, and store it in an object of this type.  */
+
+struct variant_field
+{
+  int first_field = -1;
+  int last_field = -1;
+
+  /* A variant can contain other variant parts.  */
+  std::vector<variant_part_builder> variant_parts;
+
+  /* If we see a DW_TAG_variant, then this will be set if this is the
+     default branch.  */
+  bool default_branch = false;
+  /* If we see a DW_AT_discr_value, then this will be the discriminant
+     value.  */
+  ULONGEST discriminant_value = 0;
+  /* If we see a DW_AT_discr_list, then this is a pointer to the list
+     data.  */
+  struct dwarf_block *discr_list_data = nullptr;
+};
+
+/* This represents a DW_TAG_variant_part.  */
+
+struct variant_part_builder
+{
+  /* The offset of the discriminant field.  */
+  sect_offset discriminant_offset {};
+
+  /* Variants that are direct children of this variant part.  */
+  std::vector<variant_field> variants;
+
+  /* True if we're currently reading a variant.  */
+  bool processing_variant = false;
+};
+
+struct nextfield
+{
+  int accessibility = 0;
+  int virtuality = 0;
+  /* Variant parts need to find the discriminant, which is a DIE
+     reference.  We track the section offset of each field to make
+     this link.  */
+  sect_offset offset;
+  struct field field {};
+};
+
+struct fnfieldlist
+{
+  const char *name = nullptr;
+  std::vector<struct fn_field> fnfields;
+};
+
+/* The routines that read and process dies for a C struct or C++ class
+   pass lists of data member fields and lists of member function fields
+   in an instance of a field_info structure, as defined below.  */
+struct field_info
+{
+  /* List of data member and baseclasses fields.  */
+  std::vector<struct nextfield> fields;
+  std::vector<struct nextfield> baseclasses;
+
+  /* Set if the accessibility of one of the fields is not public.  */
+  bool non_public_fields = false;
+
+  /* Member function fieldlist array, contains name of possibly overloaded
+     member function, number of overloaded member functions and a pointer
+     to the head of the member function field chain.  */
+  std::vector<struct fnfieldlist> fnfieldlists;
+
+  /* typedefs defined inside this class.  TYPEDEF_FIELD_LIST contains head of
+     a NULL terminated list of TYPEDEF_FIELD_LIST_COUNT elements.  */
+  std::vector<struct decl_field> typedef_field_list;
+
+  /* Nested types defined by this class and the number of elements in this
+     list.  */
+  std::vector<struct decl_field> nested_types_list;
+
+  /* If non-null, this is the variant part we are currently
+     reading.  */
+  variant_part_builder *current_variant_part = nullptr;
+  /* This holds all the top-level variant parts attached to the type
+     we're reading.  */
+  std::vector<variant_part_builder> variant_parts;
+
+  /* Return the total number of fields (including baseclasses).  */
+  int nfields () const
+  {
+    return fields.size () + baseclasses.size ();
+  }
+};
+
+/* Loaded secondary compilation units are kept in memory until they
+   have not been referenced for the processing of this many
+   compilation units.  Set this to zero to disable caching.  Cache
+   sizes of up to at least twenty will improve startup time for
+   typical inter-CU-reference binaries, at an obvious memory cost.  */
+static int dwarf_max_cache_age = 5;
+static void
+show_dwarf_max_cache_age (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("The upper bound on the age of cached "
+			    "DWARF compilation units is %s.\n"),
+		    value);
+}
+
+/* local function prototypes */
+
+static void dwarf2_find_base_address (struct die_info *die,
+				      struct dwarf2_cu *cu);
+
+static dwarf2_psymtab *create_partial_symtab
+  (dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile,
+   const char *name);
+
+static void build_type_psymtabs_reader (const struct die_reader_specs *reader,
+					const gdb_byte *info_ptr,
+					struct die_info *type_unit_die);
+
+static void dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile);
+
+static void scan_partial_symbols (struct partial_die_info *,
+				  CORE_ADDR *, CORE_ADDR *,
+				  int, struct dwarf2_cu *);
+
+static void add_partial_symbol (struct partial_die_info *,
+				struct dwarf2_cu *);
+
+static void add_partial_namespace (struct partial_die_info *pdi,
+				   CORE_ADDR *lowpc, CORE_ADDR *highpc,
+				   int set_addrmap, struct dwarf2_cu *cu);
+
+static void add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc,
+				CORE_ADDR *highpc, int set_addrmap,
+				struct dwarf2_cu *cu);
+
+static void add_partial_enumeration (struct partial_die_info *enum_pdi,
+				     struct dwarf2_cu *cu);
+
+static void add_partial_subprogram (struct partial_die_info *pdi,
+				    CORE_ADDR *lowpc, CORE_ADDR *highpc,
+				    int need_pc, struct dwarf2_cu *cu);
+
+static unsigned int peek_abbrev_code (bfd *, const gdb_byte *);
+
+static struct partial_die_info *load_partial_dies
+  (const struct die_reader_specs *, const gdb_byte *, int);
+
+/* A pair of partial_die_info and compilation unit.  */
+struct cu_partial_die_info
+{
+  /* The compilation unit of the partial_die_info.  */
+  struct dwarf2_cu *cu;
+  /* A partial_die_info.  */
+  struct partial_die_info *pdi;
+
+  cu_partial_die_info (struct dwarf2_cu *cu, struct partial_die_info *pdi)
+    : cu (cu),
+      pdi (pdi)
+  { /* Nothing.  */ }
+
+private:
+  cu_partial_die_info () = delete;
+};
+
+static const struct cu_partial_die_info find_partial_die (sect_offset, int,
+							  struct dwarf2_cu *);
+
+static const gdb_byte *read_attribute (const struct die_reader_specs *,
+				       struct attribute *,
+				       const struct attr_abbrev *,
+				       const gdb_byte *);
+
+static void read_attribute_reprocess (const struct die_reader_specs *reader,
+				      struct attribute *attr, dwarf_tag tag);
+
+static CORE_ADDR read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index);
+
+static sect_offset read_abbrev_offset (dwarf2_per_objfile *per_objfile,
+				       dwarf2_section_info *, sect_offset);
+
+static const char *read_indirect_string
+  (dwarf2_per_objfile *per_objfile, bfd *, const gdb_byte *,
+   const struct comp_unit_head *, unsigned int *);
+
+static const char *read_indirect_string_at_offset
+  (dwarf2_per_objfile *per_objfile, LONGEST str_offset);
+
+static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *,
+					      const gdb_byte *,
+					      unsigned int *);
+
+static const char *read_dwo_str_index (const struct die_reader_specs *reader,
+				       ULONGEST str_index);
+
+static const char *read_stub_str_index (struct dwarf2_cu *cu,
+					ULONGEST str_index);
+
+static struct attribute *dwarf2_attr (struct die_info *, unsigned int,
+				      struct dwarf2_cu *);
+
+static const char *dwarf2_string_attr (struct die_info *die, unsigned int name,
+				       struct dwarf2_cu *cu);
+
+static const char *dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu);
+
+static int dwarf2_flag_true_p (struct die_info *die, unsigned name,
+			       struct dwarf2_cu *cu);
+
+static int die_is_declaration (struct die_info *, struct dwarf2_cu *cu);
+
+static struct die_info *die_specification (struct die_info *die,
+					   struct dwarf2_cu **);
+
+static line_header_up dwarf_decode_line_header (sect_offset sect_off,
+						struct dwarf2_cu *cu);
+
+static void dwarf_decode_lines (struct line_header *, const char *,
+				struct dwarf2_cu *, dwarf2_psymtab *,
+				CORE_ADDR, int decode_mapping);
+
+static void dwarf2_start_subfile (struct dwarf2_cu *, const char *,
+				  const char *);
+
+static struct symbol *new_symbol (struct die_info *, struct type *,
+				  struct dwarf2_cu *, struct symbol * = NULL);
+
+static void dwarf2_const_value (const struct attribute *, struct symbol *,
+				struct dwarf2_cu *);
+
+static void dwarf2_const_value_attr (const struct attribute *attr,
+				     struct type *type,
+				     const char *name,
+				     struct obstack *obstack,
+				     struct dwarf2_cu *cu, LONGEST *value,
+				     const gdb_byte **bytes,
+				     struct dwarf2_locexpr_baton **baton);
+
+static struct type *read_subrange_index_type (struct die_info *die,
+					      struct dwarf2_cu *cu);
+
+static struct type *die_type (struct die_info *, struct dwarf2_cu *);
+
+static int need_gnat_info (struct dwarf2_cu *);
+
+static struct type *die_descriptive_type (struct die_info *,
+					  struct dwarf2_cu *);
+
+static void set_descriptive_type (struct type *, struct die_info *,
+				  struct dwarf2_cu *);
+
+static struct type *die_containing_type (struct die_info *,
+					 struct dwarf2_cu *);
+
+static struct type *lookup_die_type (struct die_info *, const struct attribute *,
+				     struct dwarf2_cu *);
+
+static struct type *read_type_die (struct die_info *, struct dwarf2_cu *);
+
+static struct type *read_type_die_1 (struct die_info *, struct dwarf2_cu *);
+
+static const char *determine_prefix (struct die_info *die, struct dwarf2_cu *);
+
+static char *typename_concat (struct obstack *obs, const char *prefix,
+			      const char *suffix, int physname,
+			      struct dwarf2_cu *cu);
+
+static void read_file_scope (struct die_info *, struct dwarf2_cu *);
+
+static void read_type_unit_scope (struct die_info *, struct dwarf2_cu *);
+
+static void read_func_scope (struct die_info *, struct dwarf2_cu *);
+
+static void read_lexical_block_scope (struct die_info *, struct dwarf2_cu *);
+
+static void read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu);
+
+static void read_variable (struct die_info *die, struct dwarf2_cu *cu);
+
+/* Return the .debug_loclists section to use for cu.  */
+static struct dwarf2_section_info *cu_debug_loc_section (struct dwarf2_cu *cu);
+
+/* Return the .debug_rnglists section to use for cu.  */
+static struct dwarf2_section_info *cu_debug_rnglists_section
+  (struct dwarf2_cu *cu, dwarf_tag tag);
+
+/* How dwarf2_get_pc_bounds constructed its *LOWPC and *HIGHPC return
+   values.  Keep the items ordered with increasing constraints compliance.  */
+enum pc_bounds_kind
+{
+  /* No attribute DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges was found.  */
+  PC_BOUNDS_NOT_PRESENT,
+
+  /* Some of the attributes DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges
+     were present but they do not form a valid range of PC addresses.  */
+  PC_BOUNDS_INVALID,
+
+  /* Discontiguous range was found - that is DW_AT_ranges was found.  */
+  PC_BOUNDS_RANGES,
+
+  /* Contiguous range was found - DW_AT_low_pc and DW_AT_high_pc were found.  */
+  PC_BOUNDS_HIGH_LOW,
+};
+
+static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *,
+						 CORE_ADDR *, CORE_ADDR *,
+						 struct dwarf2_cu *,
+						 dwarf2_psymtab *);
+
+static void get_scope_pc_bounds (struct die_info *,
+				 CORE_ADDR *, CORE_ADDR *,
+				 struct dwarf2_cu *);
+
+static void dwarf2_record_block_ranges (struct die_info *, struct block *,
+					CORE_ADDR, struct dwarf2_cu *);
+
+static void dwarf2_add_field (struct field_info *, struct die_info *,
+			      struct dwarf2_cu *);
+
+static void dwarf2_attach_fields_to_type (struct field_info *,
+					  struct type *, struct dwarf2_cu *);
+
+static void dwarf2_add_member_fn (struct field_info *,
+				  struct die_info *, struct type *,
+				  struct dwarf2_cu *);
+
+static void dwarf2_attach_fn_fields_to_type (struct field_info *,
+					     struct type *,
+					     struct dwarf2_cu *);
+
+static void process_structure_scope (struct die_info *, struct dwarf2_cu *);
+
+static void read_common_block (struct die_info *, struct dwarf2_cu *);
+
+static void read_namespace (struct die_info *die, struct dwarf2_cu *);
+
+static void read_module (struct die_info *die, struct dwarf2_cu *cu);
+
+static struct using_direct **using_directives (struct dwarf2_cu *cu);
+
+static void read_import_statement (struct die_info *die, struct dwarf2_cu *);
+
+static int read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu);
+
+static struct type *read_module_type (struct die_info *die,
+				      struct dwarf2_cu *cu);
+
+static const char *namespace_name (struct die_info *die,
+				   int *is_anonymous, struct dwarf2_cu *);
+
+static void process_enumeration_scope (struct die_info *, struct dwarf2_cu *);
+
+static CORE_ADDR decode_locdesc (struct dwarf_block *, struct dwarf2_cu *,
+				 bool * = nullptr);
+
+static enum dwarf_array_dim_ordering read_array_order (struct die_info *,
+						       struct dwarf2_cu *);
+
+static struct die_info *read_die_and_siblings_1
+  (const struct die_reader_specs *, const gdb_byte *, const gdb_byte **,
+   struct die_info *);
+
+static struct die_info *read_die_and_siblings (const struct die_reader_specs *,
+					       const gdb_byte *info_ptr,
+					       const gdb_byte **new_info_ptr,
+					       struct die_info *parent);
+
+static const gdb_byte *read_full_die_1 (const struct die_reader_specs *,
+					struct die_info **, const gdb_byte *,
+					int);
+
+static const gdb_byte *read_full_die (const struct die_reader_specs *,
+				      struct die_info **, const gdb_byte *);
+
+static void process_die (struct die_info *, struct dwarf2_cu *);
+
+static const char *dwarf2_canonicalize_name (const char *, struct dwarf2_cu *,
+					     struct objfile *);
+
+static const char *dwarf2_name (struct die_info *die, struct dwarf2_cu *);
+
+static const char *dwarf2_full_name (const char *name,
+				     struct die_info *die,
+				     struct dwarf2_cu *cu);
+
+static const char *dwarf2_physname (const char *name, struct die_info *die,
+				    struct dwarf2_cu *cu);
+
+static struct die_info *dwarf2_extension (struct die_info *die,
+					  struct dwarf2_cu **);
+
+static void dump_die_shallow (struct ui_file *, int indent, struct die_info *);
+
+static void dump_die_for_error (struct die_info *);
+
+static void dump_die_1 (struct ui_file *, int level, int max_level,
+			struct die_info *);
+
+/*static*/ void dump_die (struct die_info *, int max_level);
+
+static void store_in_ref_table (struct die_info *,
+				struct dwarf2_cu *);
+
+static struct die_info *follow_die_ref_or_sig (struct die_info *,
+					       const struct attribute *,
+					       struct dwarf2_cu **);
+
+static struct die_info *follow_die_ref (struct die_info *,
+					const struct attribute *,
+					struct dwarf2_cu **);
+
+static struct die_info *follow_die_sig (struct die_info *,
+					const struct attribute *,
+					struct dwarf2_cu **);
+
+static struct type *get_signatured_type (struct die_info *, ULONGEST,
+					 struct dwarf2_cu *);
+
+static struct type *get_DW_AT_signature_type (struct die_info *,
+					      const struct attribute *,
+					      struct dwarf2_cu *);
+
+static void load_full_type_unit (dwarf2_per_cu_data *per_cu,
+				 dwarf2_per_objfile *per_objfile);
+
+static void read_signatured_type (signatured_type *sig_type,
+				  dwarf2_per_objfile *per_objfile);
+
+static int attr_to_dynamic_prop (const struct attribute *attr,
+				 struct die_info *die, struct dwarf2_cu *cu,
+				 struct dynamic_prop *prop, struct type *type);
+
+/* memory allocation interface */
+
+static struct dwarf_block *dwarf_alloc_block (struct dwarf2_cu *);
+
+static struct die_info *dwarf_alloc_die (struct dwarf2_cu *, int);
+
+static void dwarf_decode_macros (struct dwarf2_cu *, unsigned int, int);
+
+static void fill_in_loclist_baton (struct dwarf2_cu *cu,
+				   struct dwarf2_loclist_baton *baton,
+				   const struct attribute *attr);
+
+static void dwarf2_symbol_mark_computed (const struct attribute *attr,
+					 struct symbol *sym,
+					 struct dwarf2_cu *cu,
+					 int is_block);
+
+static const gdb_byte *skip_one_die (const struct die_reader_specs *reader,
+				     const gdb_byte *info_ptr,
+				     const struct abbrev_info *abbrev);
+
+static hashval_t partial_die_hash (const void *item);
+
+static int partial_die_eq (const void *item_lhs, const void *item_rhs);
+
+static struct dwarf2_per_cu_data *dwarf2_find_containing_comp_unit
+  (sect_offset sect_off, unsigned int offset_in_dwz,
+   dwarf2_per_objfile *per_objfile);
+
+static void prepare_one_comp_unit (struct dwarf2_cu *cu,
+				   struct die_info *comp_unit_die,
+				   enum language pretend_language);
+
+static struct type *set_die_type (struct die_info *, struct type *,
+				  struct dwarf2_cu *, bool = false);
+
+static void create_all_comp_units (dwarf2_per_objfile *per_objfile);
+
+static void load_full_comp_unit (dwarf2_per_cu_data *per_cu,
+				 dwarf2_per_objfile *per_objfile,
+				 dwarf2_cu *existing_cu,
+				 bool skip_partial,
+				 enum language pretend_language);
+
+static void process_full_comp_unit (dwarf2_cu *cu,
+				    enum language pretend_language);
+
+static void process_full_type_unit (dwarf2_cu *cu,
+				    enum language pretend_language);
+
+static struct type *get_die_type_at_offset (sect_offset,
+					    dwarf2_per_cu_data *per_cu,
+					    dwarf2_per_objfile *per_objfile);
+
+static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu);
+
+static void queue_comp_unit (dwarf2_per_cu_data *per_cu,
+			     dwarf2_per_objfile *per_objfile,
+			     enum language pretend_language);
+
+static void process_queue (dwarf2_per_objfile *per_objfile);
+
+/* Class, the destructor of which frees all allocated queue entries.  This
+   will only have work to do if an error was thrown while processing the
+   dwarf.  If no error was thrown then the queue entries should have all
+   been processed, and freed, as we went along.  */
+
+class dwarf2_queue_guard
+{
+public:
+  explicit dwarf2_queue_guard (dwarf2_per_objfile *per_objfile)
+    : m_per_objfile (per_objfile)
+  {
+    gdb_assert (!m_per_objfile->per_bfd->queue.has_value ());
+
+    m_per_objfile->per_bfd->queue.emplace ();
+  }
+
+  /* Free any entries remaining on the queue.  There should only be
+     entries left if we hit an error while processing the dwarf.  */
+  ~dwarf2_queue_guard ()
+  {
+    gdb_assert (m_per_objfile->per_bfd->queue.has_value ());
+
+    m_per_objfile->per_bfd->queue.reset ();
+  }
+
+  DISABLE_COPY_AND_ASSIGN (dwarf2_queue_guard);
+
+private:
+  dwarf2_per_objfile *m_per_objfile;
+};
+
+dwarf2_queue_item::~dwarf2_queue_item ()
+{
+  /* Anything still marked queued is likely to be in an
+     inconsistent state, so discard it.  */
+  if (per_cu->queued)
+    {
+      per_objfile->remove_cu (per_cu);
+      per_cu->queued = 0;
+    }
+}
+
+/* See dwarf2/read.h.  */
+
+void
+dwarf2_per_cu_data_deleter::operator() (dwarf2_per_cu_data *data)
+{
+  if (data->is_debug_types)
+    delete static_cast<signatured_type *> (data);
+  else
+    delete data;
+}
+
+/* The return type of find_file_and_directory.  Note, the enclosed
+   string pointers are only valid while this object is valid.  */
+
+struct file_and_directory
+{
+  /* The filename.  This is never NULL.  */
+  const char *name;
+
+  /* The compilation directory.  NULL if not known.  If we needed to
+     compute a new string, this points to COMP_DIR_STORAGE, otherwise,
+     points directly to the DW_AT_comp_dir string attribute owned by
+     the obstack that owns the DIE.  */
+  const char *comp_dir;
+
+  /* If we needed to build a new string for comp_dir, this is what
+     owns the storage.  */
+  std::string comp_dir_storage;
+};
+
+static file_and_directory find_file_and_directory (struct die_info *die,
+						   struct dwarf2_cu *cu);
+
+static htab_up allocate_signatured_type_table ();
+
+static htab_up allocate_dwo_unit_table ();
+
+static struct dwo_unit *lookup_dwo_unit_in_dwp
+  (dwarf2_per_objfile *per_objfile, struct dwp_file *dwp_file,
+   const char *comp_dir, ULONGEST signature, int is_debug_types);
+
+static struct dwp_file *get_dwp_file (dwarf2_per_objfile *per_objfile);
+
+static struct dwo_unit *lookup_dwo_comp_unit
+  (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir,
+   ULONGEST signature);
+
+static struct dwo_unit *lookup_dwo_type_unit
+  (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir);
+
+static void queue_and_load_all_dwo_tus (dwarf2_cu *cu);
+
+/* A unique pointer to a dwo_file.  */
+
+typedef std::unique_ptr<struct dwo_file> dwo_file_up;
+
+static void process_cu_includes (dwarf2_per_objfile *per_objfile);
+
+static void check_producer (struct dwarf2_cu *cu);
+
+/* Various complaints about symbol reading that don't abort the process.  */
+
+static void
+dwarf2_debug_line_missing_file_complaint (void)
+{
+  complaint (_(".debug_line section has line data without a file"));
+}
+
+static void
+dwarf2_debug_line_missing_end_sequence_complaint (void)
+{
+  complaint (_(".debug_line section has line "
+	       "program sequence without an end"));
+}
+
+static void
+dwarf2_complex_location_expr_complaint (void)
+{
+  complaint (_("location expression too complex"));
+}
+
+static void
+dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2,
+					      int arg3)
+{
+  complaint (_("const value length mismatch for '%s', got %d, expected %d"),
+	     arg1, arg2, arg3);
+}
+
+static void
+dwarf2_invalid_attrib_class_complaint (const char *arg1, const char *arg2)
+{
+  complaint (_("invalid attribute class or form for '%s' in '%s'"),
+	     arg1, arg2);
+}
+
+/* Hash function for line_header_hash.  */
+
+static hashval_t
+line_header_hash (const struct line_header *ofs)
+{
+  return to_underlying (ofs->sect_off) ^ ofs->offset_in_dwz;
+}
+
+/* Hash function for htab_create_alloc_ex for line_header_hash.  */
+
+static hashval_t
+line_header_hash_voidp (const void *item)
+{
+  const struct line_header *ofs = (const struct line_header *) item;
+
+  return line_header_hash (ofs);
+}
+
+/* Equality function for line_header_hash.  */
+
+static int
+line_header_eq_voidp (const void *item_lhs, const void *item_rhs)
+{
+  const struct line_header *ofs_lhs = (const struct line_header *) item_lhs;
+  const struct line_header *ofs_rhs = (const struct line_header *) item_rhs;
+
+  return (ofs_lhs->sect_off == ofs_rhs->sect_off
+	  && ofs_lhs->offset_in_dwz == ofs_rhs->offset_in_dwz);
+}
+
+
+
+/* An iterator for all_comp_units that is based on index.  This
+   approach makes it possible to iterate over all_comp_units safely,
+   when some caller in the loop may add new units.  */
+
+class all_comp_units_iterator
+{
+public:
+
+  all_comp_units_iterator (dwarf2_per_bfd *per_bfd, bool start)
+    : m_per_bfd (per_bfd),
+      m_index (start ? 0 : per_bfd->all_comp_units.size ())
+  {
+  }
+
+  all_comp_units_iterator &operator++ ()
+  {
+    ++m_index;
+    return *this;
+  }
+
+  dwarf2_per_cu_data *operator* () const
+  {
+    return m_per_bfd->get_cu (m_index);
+  }
+
+  bool operator== (const all_comp_units_iterator &other) const
+  {
+    return m_index == other.m_index;
+  }
+
+
+  bool operator!= (const all_comp_units_iterator &other) const
+  {
+    return m_index != other.m_index;
+  }
+
+private:
+
+  dwarf2_per_bfd *m_per_bfd;
+  size_t m_index;
+};
+
+/* A range adapter for the all_comp_units_iterator.  */
+class all_comp_units_range
+{
+public:
+
+  all_comp_units_range (dwarf2_per_bfd *per_bfd)
+    : m_per_bfd (per_bfd)
+  {
+  }
+
+  all_comp_units_iterator begin ()
+  {
+    return all_comp_units_iterator (m_per_bfd, true);
+  }
+
+  all_comp_units_iterator end ()
+  {
+    return all_comp_units_iterator (m_per_bfd, false);
+  }
+
+private:
+
+  dwarf2_per_bfd *m_per_bfd;
+};
+
+/* See declaration.  */
+
+dwarf2_per_bfd::dwarf2_per_bfd (bfd *obfd, const dwarf2_debug_sections *names,
+				bool can_copy_)
+  : obfd (obfd),
+    can_copy (can_copy_)
+{
+  if (names == NULL)
+    names = &dwarf2_elf_names;
+
+  for (asection *sec = obfd->sections; sec != NULL; sec = sec->next)
+    locate_sections (obfd, sec, *names);
+}
+
+dwarf2_per_bfd::~dwarf2_per_bfd ()
+{
+  for (auto &per_cu : all_comp_units)
+    per_cu->imported_symtabs_free ();
+
+  /* Everything else should be on this->obstack.  */
+}
+
+/* See read.h.  */
+
+void
+dwarf2_per_objfile::remove_all_cus ()
+{
+  gdb_assert (!this->per_bfd->queue.has_value ());
+
+  for (auto pair : m_dwarf2_cus)
+    delete pair.second;
+
+  m_dwarf2_cus.clear ();
+}
+
+/* A helper class that calls free_cached_comp_units on
+   destruction.  */
+
+class free_cached_comp_units
+{
+public:
+
+  explicit free_cached_comp_units (dwarf2_per_objfile *per_objfile)
+    : m_per_objfile (per_objfile)
+  {
+  }
+
+  ~free_cached_comp_units ()
+  {
+    m_per_objfile->remove_all_cus ();
+  }
+
+  DISABLE_COPY_AND_ASSIGN (free_cached_comp_units);
+
+private:
+
+  dwarf2_per_objfile *m_per_objfile;
+};
+
+/* See read.h.  */
+
+bool
+dwarf2_per_objfile::symtab_set_p (const dwarf2_per_cu_data *per_cu) const
+{
+  if (per_cu->index < this->m_symtabs.size ())
+    return this->m_symtabs[per_cu->index] != nullptr;
+  return false;
+}
+
+/* See read.h.  */
+
+compunit_symtab *
+dwarf2_per_objfile::get_symtab (const dwarf2_per_cu_data *per_cu) const
+{
+  if (per_cu->index < this->m_symtabs.size ())
+    return this->m_symtabs[per_cu->index];
+  return nullptr;
+}
+
+/* See read.h.  */
+
+void
+dwarf2_per_objfile::set_symtab (const dwarf2_per_cu_data *per_cu,
+				compunit_symtab *symtab)
+{
+  if (per_cu->index >= this->m_symtabs.size ())
+    this->m_symtabs.resize (per_cu->index + 1);
+  gdb_assert (this->m_symtabs[per_cu->index] == nullptr);
+  this->m_symtabs[per_cu->index] = symtab;
+}
+
+/* Try to locate the sections we need for DWARF 2 debugging
+   information and return true if we have enough to do something.
+   NAMES points to the dwarf2 section names, or is NULL if the standard
+   ELF names are used.  CAN_COPY is true for formats where symbol
+   interposition is possible and so symbol values must follow copy
+   relocation rules.  */
+
+int
+dwarf2_has_info (struct objfile *objfile,
+		 const struct dwarf2_debug_sections *names,
+		 bool can_copy)
+{
+  if (objfile->flags & OBJF_READNEVER)
+    return 0;
+
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  if (per_objfile == NULL)
+    {
+      dwarf2_per_bfd *per_bfd;
+
+      /* We can share a "dwarf2_per_bfd" with other objfiles if the
+	 BFD doesn't require relocations.
+
+	 We don't share with objfiles for which -readnow was requested,
+	 because it would complicate things when loading the same BFD with
+	 -readnow and then without -readnow.  */
+      if (!gdb_bfd_requires_relocations (objfile->obfd)
+	  && (objfile->flags & OBJF_READNOW) == 0)
+	{
+	  /* See if one has been created for this BFD yet.  */
+	  per_bfd = dwarf2_per_bfd_bfd_data_key.get (objfile->obfd);
+
+	  if (per_bfd == nullptr)
+	    {
+	      /* No, create it now.  */
+	      per_bfd = new dwarf2_per_bfd (objfile->obfd, names, can_copy);
+	      dwarf2_per_bfd_bfd_data_key.set (objfile->obfd, per_bfd);
+	    }
+	}
+      else
+	{
+	  /* No sharing possible, create one specifically for this objfile.  */
+	  per_bfd = new dwarf2_per_bfd (objfile->obfd, names, can_copy);
+	  dwarf2_per_bfd_objfile_data_key.set (objfile, per_bfd);
+	}
+
+      per_objfile = dwarf2_objfile_data_key.emplace (objfile, objfile, per_bfd);
+    }
+
+  return (!per_objfile->per_bfd->info.is_virtual
+	  && per_objfile->per_bfd->info.s.section != NULL
+	  && !per_objfile->per_bfd->abbrev.is_virtual
+	  && per_objfile->per_bfd->abbrev.s.section != NULL);
+}
+
+/* See declaration.  */
+
+void
+dwarf2_per_bfd::locate_sections (bfd *abfd, asection *sectp,
+				 const dwarf2_debug_sections &names)
+{
+  flagword aflag = bfd_section_flags (sectp);
+
+  if ((aflag & SEC_HAS_CONTENTS) == 0)
+    {
+    }
+  else if (elf_section_data (sectp)->this_hdr.sh_size
+	   > bfd_get_file_size (abfd))
+    {
+      bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size;
+      warning (_("Discarding section %s which has a section size (%s"
+		 ") larger than the file size [in module %s]"),
+	       bfd_section_name (sectp), phex_nz (size, sizeof (size)),
+	       bfd_get_filename (abfd));
+    }
+  else if (names.info.matches (sectp->name))
+    {
+      this->info.s.section = sectp;
+      this->info.size = bfd_section_size (sectp);
+    }
+  else if (names.abbrev.matches (sectp->name))
+    {
+      this->abbrev.s.section = sectp;
+      this->abbrev.size = bfd_section_size (sectp);
+    }
+  else if (names.line.matches (sectp->name))
+    {
+      this->line.s.section = sectp;
+      this->line.size = bfd_section_size (sectp);
+    }
+  else if (names.loc.matches (sectp->name))
+    {
+      this->loc.s.section = sectp;
+      this->loc.size = bfd_section_size (sectp);
+    }
+  else if (names.loclists.matches (sectp->name))
+    {
+      this->loclists.s.section = sectp;
+      this->loclists.size = bfd_section_size (sectp);
+    }
+  else if (names.macinfo.matches (sectp->name))
+    {
+      this->macinfo.s.section = sectp;
+      this->macinfo.size = bfd_section_size (sectp);
+    }
+  else if (names.macro.matches (sectp->name))
+    {
+      this->macro.s.section = sectp;
+      this->macro.size = bfd_section_size (sectp);
+    }
+  else if (names.str.matches (sectp->name))
+    {
+      this->str.s.section = sectp;
+      this->str.size = bfd_section_size (sectp);
+    }
+  else if (names.str_offsets.matches (sectp->name))
+    {
+      this->str_offsets.s.section = sectp;
+      this->str_offsets.size = bfd_section_size (sectp);
+    }
+  else if (names.line_str.matches (sectp->name))
+    {
+      this->line_str.s.section = sectp;
+      this->line_str.size = bfd_section_size (sectp);
+    }
+  else if (names.addr.matches (sectp->name))
+    {
+      this->addr.s.section = sectp;
+      this->addr.size = bfd_section_size (sectp);
+    }
+  else if (names.frame.matches (sectp->name))
+    {
+      this->frame.s.section = sectp;
+      this->frame.size = bfd_section_size (sectp);
+    }
+  else if (names.eh_frame.matches (sectp->name))
+    {
+      this->eh_frame.s.section = sectp;
+      this->eh_frame.size = bfd_section_size (sectp);
+    }
+  else if (names.ranges.matches (sectp->name))
+    {
+      this->ranges.s.section = sectp;
+      this->ranges.size = bfd_section_size (sectp);
+    }
+  else if (names.rnglists.matches (sectp->name))
+    {
+      this->rnglists.s.section = sectp;
+      this->rnglists.size = bfd_section_size (sectp);
+    }
+  else if (names.types.matches (sectp->name))
+    {
+      struct dwarf2_section_info type_section;
+
+      memset (&type_section, 0, sizeof (type_section));
+      type_section.s.section = sectp;
+      type_section.size = bfd_section_size (sectp);
+
+      this->types.push_back (type_section);
+    }
+  else if (names.gdb_index.matches (sectp->name))
+    {
+      this->gdb_index.s.section = sectp;
+      this->gdb_index.size = bfd_section_size (sectp);
+    }
+  else if (names.debug_names.matches (sectp->name))
+    {
+      this->debug_names.s.section = sectp;
+      this->debug_names.size = bfd_section_size (sectp);
+    }
+  else if (names.debug_aranges.matches (sectp->name))
+    {
+      this->debug_aranges.s.section = sectp;
+      this->debug_aranges.size = bfd_section_size (sectp);
+    }
+
+  if ((bfd_section_flags (sectp) & (SEC_LOAD | SEC_ALLOC))
+      && bfd_section_vma (sectp) == 0)
+    this->has_section_at_zero = true;
+}
+
+/* Fill in SECTP, BUFP and SIZEP with section info, given OBJFILE and
+   SECTION_NAME.  */
+
+void
+dwarf2_get_section_info (struct objfile *objfile,
+			 enum dwarf2_section_enum sect,
+			 asection **sectp, const gdb_byte **bufp,
+			 bfd_size_type *sizep)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  struct dwarf2_section_info *info;
+
+  /* We may see an objfile without any DWARF, in which case we just
+     return nothing.  */
+  if (per_objfile == NULL)
+    {
+      *sectp = NULL;
+      *bufp = NULL;
+      *sizep = 0;
+      return;
+    }
+  switch (sect)
+    {
+    case DWARF2_DEBUG_FRAME:
+      info = &per_objfile->per_bfd->frame;
+      break;
+    case DWARF2_EH_FRAME:
+      info = &per_objfile->per_bfd->eh_frame;
+      break;
+    default:
+      gdb_assert_not_reached ("unexpected section");
+    }
+
+  info->read (objfile);
+
+  *sectp = info->get_bfd_section ();
+  *bufp = info->buffer;
+  *sizep = info->size;
+}
+
+
+/* DWARF quick_symbol_functions support.  */
+
+/* TUs can share .debug_line entries, and there can be a lot more TUs than
+   unique line tables, so we maintain a separate table of all .debug_line
+   derived entries to support the sharing.
+   All the quick functions need is the list of file names.  We discard the
+   line_header when we're done and don't need to record it here.  */
+struct quick_file_names
+{
+  /* The data used to construct the hash key.  */
+  struct stmt_list_hash hash;
+
+  /* The number of entries in file_names, real_names.  */
+  unsigned int num_file_names;
+
+  /* The file names from the line table, after being run through
+     file_full_name.  */
+  const char **file_names;
+
+  /* The file names from the line table after being run through
+     gdb_realpath.  These are computed lazily.  */
+  const char **real_names;
+};
+
+/* When using the index (and thus not using psymtabs), each CU has an
+   object of this type.  This is used to hold information needed by
+   the various "quick" methods.  */
+struct dwarf2_per_cu_quick_data
+{
+  /* The file table.  This can be NULL if there was no file table
+     or it's currently not read in.
+     NOTE: This points into dwarf2_per_objfile->per_bfd->quick_file_names_table.  */
+  struct quick_file_names *file_names;
+
+  /* A temporary mark bit used when iterating over all CUs in
+     expand_symtabs_matching.  */
+  unsigned int mark : 1;
+
+  /* True if we've tried to read the file table and found there isn't one.
+     There will be no point in trying to read it again next time.  */
+  unsigned int no_file_data : 1;
+};
+
+/* A subclass of psymbol_functions that arranges to read the DWARF
+   partial symbols when needed.  */
+struct lazy_dwarf_reader : public psymbol_functions
+{
+  using psymbol_functions::psymbol_functions;
+
+  bool can_lazily_read_symbols () override
+  {
+    return true;
+  }
+
+  void read_partial_symbols (struct objfile *objfile) override
+  {
+    if (dwarf2_has_info (objfile, nullptr))
+      dwarf2_build_psymtabs (objfile, this);
+  }
+};
+
+static quick_symbol_functions_up
+make_lazy_dwarf_reader ()
+{
+  return quick_symbol_functions_up (new lazy_dwarf_reader);
+}
+
+struct dwarf2_base_index_functions : public quick_symbol_functions
+{
+  bool has_symbols (struct objfile *objfile) override;
+
+  bool has_unexpanded_symtabs (struct objfile *objfile) override;
+
+  struct symtab *find_last_source_symtab (struct objfile *objfile) override;
+
+  void forget_cached_source_info (struct objfile *objfile) override;
+
+  enum language lookup_global_symbol_language (struct objfile *objfile,
+					       const char *name,
+					       domain_enum domain,
+					       bool *symbol_found_p) override
+  {
+    *symbol_found_p = false;
+    return language_unknown;
+  }
+
+  void print_stats (struct objfile *objfile, bool print_bcache) override;
+
+  void expand_all_symtabs (struct objfile *objfile) override;
+
+  struct compunit_symtab *find_pc_sect_compunit_symtab
+    (struct objfile *objfile, struct bound_minimal_symbol msymbol,
+     CORE_ADDR pc, struct obj_section *section, int warn_if_readin) override;
+
+  struct compunit_symtab *find_compunit_symtab_by_address
+    (struct objfile *objfile, CORE_ADDR address) override
+  {
+    return nullptr;
+  }
+
+  void map_symbol_filenames (struct objfile *objfile,
+			     gdb::function_view<symbol_filename_ftype> fun,
+			     bool need_fullname) override;
+};
+
+struct dwarf2_gdb_index : public dwarf2_base_index_functions
+{
+  void dump (struct objfile *objfile) override;
+
+  void expand_matching_symbols
+    (struct objfile *,
+     const lookup_name_info &lookup_name,
+     domain_enum domain,
+     int global,
+     symbol_compare_ftype *ordered_compare) override;
+
+  bool expand_symtabs_matching
+    (struct objfile *objfile,
+     gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+     const lookup_name_info *lookup_name,
+     gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+     gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+     block_search_flags search_flags,
+     domain_enum domain,
+     enum search_domain kind) override;
+};
+
+struct dwarf2_debug_names_index : public dwarf2_base_index_functions
+{
+  void dump (struct objfile *objfile) override;
+
+  void expand_matching_symbols
+    (struct objfile *,
+     const lookup_name_info &lookup_name,
+     domain_enum domain,
+     int global,
+     symbol_compare_ftype *ordered_compare) override;
+
+  bool expand_symtabs_matching
+    (struct objfile *objfile,
+     gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+     const lookup_name_info *lookup_name,
+     gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+     gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+     block_search_flags search_flags,
+     domain_enum domain,
+     enum search_domain kind) override;
+};
+
+static quick_symbol_functions_up
+make_dwarf_gdb_index ()
+{
+  return quick_symbol_functions_up (new dwarf2_gdb_index);
+}
+
+static quick_symbol_functions_up
+make_dwarf_debug_names ()
+{
+  return quick_symbol_functions_up (new dwarf2_debug_names_index);
+}
+
+/* Utility hash function for a stmt_list_hash.  */
+
+static hashval_t
+hash_stmt_list_entry (const struct stmt_list_hash *stmt_list_hash)
+{
+  hashval_t v = 0;
+
+  if (stmt_list_hash->dwo_unit != NULL)
+    v += (uintptr_t) stmt_list_hash->dwo_unit->dwo_file;
+  v += to_underlying (stmt_list_hash->line_sect_off);
+  return v;
+}
+
+/* Utility equality function for a stmt_list_hash.  */
+
+static int
+eq_stmt_list_entry (const struct stmt_list_hash *lhs,
+		    const struct stmt_list_hash *rhs)
+{
+  if ((lhs->dwo_unit != NULL) != (rhs->dwo_unit != NULL))
+    return 0;
+  if (lhs->dwo_unit != NULL
+      && lhs->dwo_unit->dwo_file != rhs->dwo_unit->dwo_file)
+    return 0;
+
+  return lhs->line_sect_off == rhs->line_sect_off;
+}
+
+/* Hash function for a quick_file_names.  */
+
+static hashval_t
+hash_file_name_entry (const void *e)
+{
+  const struct quick_file_names *file_data
+    = (const struct quick_file_names *) e;
+
+  return hash_stmt_list_entry (&file_data->hash);
+}
+
+/* Equality function for a quick_file_names.  */
+
+static int
+eq_file_name_entry (const void *a, const void *b)
+{
+  const struct quick_file_names *ea = (const struct quick_file_names *) a;
+  const struct quick_file_names *eb = (const struct quick_file_names *) b;
+
+  return eq_stmt_list_entry (&ea->hash, &eb->hash);
+}
+
+/* Delete function for a quick_file_names.  */
+
+static void
+delete_file_name_entry (void *e)
+{
+  struct quick_file_names *file_data = (struct quick_file_names *) e;
+  int i;
+
+  for (i = 0; i < file_data->num_file_names; ++i)
+    {
+      xfree ((void*) file_data->file_names[i]);
+      if (file_data->real_names)
+	xfree ((void*) file_data->real_names[i]);
+    }
+
+  /* The space for the struct itself lives on the obstack, so we don't
+     free it here.  */
+}
+
+/* Create a quick_file_names hash table.  */
+
+static htab_up
+create_quick_file_names_table (unsigned int nr_initial_entries)
+{
+  return htab_up (htab_create_alloc (nr_initial_entries,
+				     hash_file_name_entry, eq_file_name_entry,
+				     delete_file_name_entry, xcalloc, xfree));
+}
+
+/* Read in CU (dwarf2_cu object) for PER_CU in the context of PER_OBJFILE.  This
+   function is unrelated to symtabs, symtab would have to be created afterwards.
+   You should call age_cached_comp_units after processing the CU.  */
+
+static dwarf2_cu *
+load_cu (dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile,
+	 bool skip_partial)
+{
+  if (per_cu->is_debug_types)
+    load_full_type_unit (per_cu, per_objfile);
+  else
+    load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu),
+			 skip_partial, language_minimal);
+
+  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+  if (cu == nullptr)
+    return nullptr;  /* Dummy CU.  */
+
+  dwarf2_find_base_address (cu->dies, cu);
+
+  return cu;
+}
+
+/* Read in the symbols for PER_CU in the context of PER_OBJFILE.  */
+
+static void
+dw2_do_instantiate_symtab (dwarf2_per_cu_data *per_cu,
+			   dwarf2_per_objfile *per_objfile, bool skip_partial)
+{
+  /* Skip type_unit_groups, reading the type units they contain
+     is handled elsewhere.  */
+  if (per_cu->type_unit_group_p ())
+    return;
+
+  {
+    /* The destructor of dwarf2_queue_guard frees any entries left on
+       the queue.  After this point we're guaranteed to leave this function
+       with the dwarf queue empty.  */
+    dwarf2_queue_guard q_guard (per_objfile);
+
+    if (!per_objfile->symtab_set_p (per_cu))
+      {
+	queue_comp_unit (per_cu, per_objfile, language_minimal);
+	dwarf2_cu *cu = load_cu (per_cu, per_objfile, skip_partial);
+
+	/* If we just loaded a CU from a DWO, and we're working with an index
+	   that may badly handle TUs, load all the TUs in that DWO as well.
+	   http://sourceware.org/bugzilla/show_bug.cgi?id=15021  */
+	if (!per_cu->is_debug_types
+	    && cu != NULL
+	    && cu->dwo_unit != NULL
+	    && per_objfile->per_bfd->index_table != NULL
+	    && per_objfile->per_bfd->index_table->version <= 7
+	    /* DWP files aren't supported yet.  */
+	    && get_dwp_file (per_objfile) == NULL)
+	  queue_and_load_all_dwo_tus (cu);
+      }
+
+    process_queue (per_objfile);
+  }
+
+  /* Age the cache, releasing compilation units that have not
+     been used recently.  */
+  per_objfile->age_comp_units ();
+}
+
+/* Ensure that the symbols for PER_CU have been read in.  DWARF2_PER_OBJFILE is
+   the per-objfile for which this symtab is instantiated.
+
+   Returns the resulting symbol table.  */
+
+static struct compunit_symtab *
+dw2_instantiate_symtab (dwarf2_per_cu_data *per_cu,
+			dwarf2_per_objfile *per_objfile,
+			bool skip_partial)
+{
+  gdb_assert (per_objfile->per_bfd->using_index);
+
+  if (!per_objfile->symtab_set_p (per_cu))
+    {
+      free_cached_comp_units freer (per_objfile);
+      scoped_restore decrementer = increment_reading_symtab ();
+      dw2_do_instantiate_symtab (per_cu, per_objfile, skip_partial);
+      process_cu_includes (per_objfile);
+    }
+
+  return per_objfile->get_symtab (per_cu);
+}
+
+/* See read.h.  */
+
+dwarf2_per_cu_data_up
+dwarf2_per_bfd::allocate_per_cu ()
+{
+  dwarf2_per_cu_data_up result (new dwarf2_per_cu_data);
+  result->per_bfd = this;
+  result->index = all_comp_units.size ();
+  return result;
+}
+
+/* See read.h.  */
+
+signatured_type_up
+dwarf2_per_bfd::allocate_signatured_type (ULONGEST signature)
+{
+  signatured_type_up result (new signatured_type (signature));
+  result->per_bfd = this;
+  result->index = all_comp_units.size ();
+  result->is_debug_types = true;
+  tu_stats.nr_tus++;
+  return result;
+}
+
+/* Return a new dwarf2_per_cu_data allocated on the per-bfd
+   obstack, and constructed with the specified field values.  */
+
+static dwarf2_per_cu_data_up
+create_cu_from_index_list (dwarf2_per_bfd *per_bfd,
+			   struct dwarf2_section_info *section,
+			   int is_dwz,
+			   sect_offset sect_off, ULONGEST length)
+{
+  dwarf2_per_cu_data_up the_cu = per_bfd->allocate_per_cu ();
+  the_cu->sect_off = sect_off;
+  the_cu->length = length;
+  the_cu->section = section;
+  the_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack,
+				    struct dwarf2_per_cu_quick_data);
+  the_cu->is_dwz = is_dwz;
+  return the_cu;
+}
+
+/* A helper for create_cus_from_index that handles a given list of
+   CUs.  */
+
+static void
+create_cus_from_index_list (dwarf2_per_bfd *per_bfd,
+			    const gdb_byte *cu_list, offset_type n_elements,
+			    struct dwarf2_section_info *section,
+			    int is_dwz)
+{
+  for (offset_type i = 0; i < n_elements; i += 2)
+    {
+      gdb_static_assert (sizeof (ULONGEST) >= 8);
+
+      sect_offset sect_off
+	= (sect_offset) extract_unsigned_integer (cu_list, 8, BFD_ENDIAN_LITTLE);
+      ULONGEST length = extract_unsigned_integer (cu_list + 8, 8, BFD_ENDIAN_LITTLE);
+      cu_list += 2 * 8;
+
+      dwarf2_per_cu_data_up per_cu
+	= create_cu_from_index_list (per_bfd, section, is_dwz, sect_off,
+				     length);
+      per_bfd->all_comp_units.push_back (std::move (per_cu));
+    }
+}
+
+/* Read the CU list from the mapped index, and use it to create all
+   the CU objects for PER_BFD.  */
+
+static void
+create_cus_from_index (dwarf2_per_bfd *per_bfd,
+		       const gdb_byte *cu_list, offset_type cu_list_elements,
+		       const gdb_byte *dwz_list, offset_type dwz_elements)
+{
+  gdb_assert (per_bfd->all_comp_units.empty ());
+  per_bfd->all_comp_units.reserve ((cu_list_elements + dwz_elements) / 2);
+
+  create_cus_from_index_list (per_bfd, cu_list, cu_list_elements,
+			      &per_bfd->info, 0);
+
+  if (dwz_elements == 0)
+    return;
+
+  dwz_file *dwz = dwarf2_get_dwz_file (per_bfd);
+  create_cus_from_index_list (per_bfd, dwz_list, dwz_elements,
+			      &dwz->info, 1);
+}
+
+/* Create the signatured type hash table from the index.  */
+
+static void
+create_signatured_type_table_from_index
+  (dwarf2_per_bfd *per_bfd, struct dwarf2_section_info *section,
+   const gdb_byte *bytes, offset_type elements)
+{
+  htab_up sig_types_hash = allocate_signatured_type_table ();
+
+  for (offset_type i = 0; i < elements; i += 3)
+    {
+      signatured_type_up sig_type;
+      ULONGEST signature;
+      void **slot;
+      cu_offset type_offset_in_tu;
+
+      gdb_static_assert (sizeof (ULONGEST) >= 8);
+      sect_offset sect_off
+	= (sect_offset) extract_unsigned_integer (bytes, 8, BFD_ENDIAN_LITTLE);
+      type_offset_in_tu
+	= (cu_offset) extract_unsigned_integer (bytes + 8, 8,
+						BFD_ENDIAN_LITTLE);
+      signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE);
+      bytes += 3 * 8;
+
+      sig_type = per_bfd->allocate_signatured_type (signature);
+      sig_type->type_offset_in_tu = type_offset_in_tu;
+      sig_type->section = section;
+      sig_type->sect_off = sect_off;
+      sig_type->v.quick
+	= OBSTACK_ZALLOC (&per_bfd->obstack,
+			  struct dwarf2_per_cu_quick_data);
+
+      slot = htab_find_slot (sig_types_hash.get (), sig_type.get (), INSERT);
+      *slot = sig_type.get ();
+
+      per_bfd->all_comp_units.emplace_back (sig_type.release ());
+    }
+
+  per_bfd->signatured_types = std::move (sig_types_hash);
+}
+
+/* Create the signatured type hash table from .debug_names.  */
+
+static void
+create_signatured_type_table_from_debug_names
+  (dwarf2_per_objfile *per_objfile,
+   const mapped_debug_names &map,
+   struct dwarf2_section_info *section,
+   struct dwarf2_section_info *abbrev_section)
+{
+  struct objfile *objfile = per_objfile->objfile;
+
+  section->read (objfile);
+  abbrev_section->read (objfile);
+
+  htab_up sig_types_hash = allocate_signatured_type_table ();
+
+  for (uint32_t i = 0; i < map.tu_count; ++i)
+    {
+      signatured_type_up sig_type;
+      void **slot;
+
+      sect_offset sect_off
+	= (sect_offset) (extract_unsigned_integer
+			 (map.tu_table_reordered + i * map.offset_size,
+			  map.offset_size,
+			  map.dwarf5_byte_order));
+
+      comp_unit_head cu_header;
+      read_and_check_comp_unit_head (per_objfile, &cu_header, section,
+				     abbrev_section,
+				     section->buffer + to_underlying (sect_off),
+				     rcuh_kind::TYPE);
+
+      sig_type = per_objfile->per_bfd->allocate_signatured_type
+	(cu_header.signature);
+      sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
+      sig_type->section = section;
+      sig_type->sect_off = sect_off;
+      sig_type->v.quick
+	= OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack,
+			  struct dwarf2_per_cu_quick_data);
+
+      slot = htab_find_slot (sig_types_hash.get (), sig_type.get (), INSERT);
+      *slot = sig_type.get ();
+
+      per_objfile->per_bfd->all_comp_units.emplace_back (sig_type.release ());
+    }
+
+  per_objfile->per_bfd->signatured_types = std::move (sig_types_hash);
+}
+
+/* Read the address map data from the mapped index, and use it to
+   populate the psymtabs_addrmap.  */
+
+static void
+create_addrmap_from_index (dwarf2_per_objfile *per_objfile,
+			   struct mapped_index *index)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+  struct gdbarch *gdbarch = objfile->arch ();
+  const gdb_byte *iter, *end;
+  struct addrmap *mutable_map;
+  CORE_ADDR baseaddr;
+
+  auto_obstack temp_obstack;
+
+  mutable_map = addrmap_create_mutable (&temp_obstack);
+
+  iter = index->address_table.data ();
+  end = iter + index->address_table.size ();
+
+  baseaddr = objfile->text_section_offset ();
+
+  while (iter < end)
+    {
+      ULONGEST hi, lo, cu_index;
+      lo = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE);
+      iter += 8;
+      hi = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE);
+      iter += 8;
+      cu_index = extract_unsigned_integer (iter, 4, BFD_ENDIAN_LITTLE);
+      iter += 4;
+
+      if (lo > hi)
+	{
+	  complaint (_(".gdb_index address table has invalid range (%s - %s)"),
+		     hex_string (lo), hex_string (hi));
+	  continue;
+	}
+
+      if (cu_index >= per_bfd->all_comp_units.size ())
+	{
+	  complaint (_(".gdb_index address table has invalid CU number %u"),
+		     (unsigned) cu_index);
+	  continue;
+	}
+
+      lo = gdbarch_adjust_dwarf2_addr (gdbarch, lo + baseaddr) - baseaddr;
+      hi = gdbarch_adjust_dwarf2_addr (gdbarch, hi + baseaddr) - baseaddr;
+      addrmap_set_empty (mutable_map, lo, hi - 1,
+			 per_bfd->get_cu (cu_index));
+    }
+
+  per_bfd->index_addrmap = addrmap_create_fixed (mutable_map,
+						 &per_bfd->obstack);
+}
+
+/* Read the address map data from DWARF-5 .debug_aranges, and use it to
+   populate the psymtabs_addrmap.  */
+
+static void
+create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile,
+			     struct dwarf2_section_info *section)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *abfd = objfile->obfd;
+  struct gdbarch *gdbarch = objfile->arch ();
+  const CORE_ADDR baseaddr = objfile->text_section_offset ();
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  auto_obstack temp_obstack;
+  addrmap *mutable_map = addrmap_create_mutable (&temp_obstack);
+
+  std::unordered_map<sect_offset,
+		     dwarf2_per_cu_data *,
+		     gdb::hash_enum<sect_offset>>
+    debug_info_offset_to_per_cu;
+  for (const auto &per_cu : per_bfd->all_comp_units)
+    {
+      const auto insertpair
+	= debug_info_offset_to_per_cu.emplace (per_cu->sect_off,
+					       per_cu.get ());
+      if (!insertpair.second)
+	{
+	  warning (_("Section .debug_aranges in %s has duplicate "
+		     "debug_info_offset %s, ignoring .debug_aranges."),
+		   objfile_name (objfile), sect_offset_str (per_cu->sect_off));
+	  return;
+	}
+    }
+
+  section->read (objfile);
+
+  const bfd_endian dwarf5_byte_order = gdbarch_byte_order (gdbarch);
+
+  const gdb_byte *addr = section->buffer;
+
+  while (addr < section->buffer + section->size)
+    {
+      const gdb_byte *const entry_addr = addr;
+      unsigned int bytes_read;
+
+      const LONGEST entry_length = read_initial_length (abfd, addr,
+							&bytes_read);
+      addr += bytes_read;
+
+      const gdb_byte *const entry_end = addr + entry_length;
+      const bool dwarf5_is_dwarf64 = bytes_read != 4;
+      const uint8_t offset_size = dwarf5_is_dwarf64 ? 8 : 4;
+      if (addr + entry_length > section->buffer + section->size)
+	{
+	  warning (_("Section .debug_aranges in %s entry at offset %s "
+		     "length %s exceeds section length %s, "
+		     "ignoring .debug_aranges."),
+		   objfile_name (objfile),
+		   plongest (entry_addr - section->buffer),
+		   plongest (bytes_read + entry_length),
+		   pulongest (section->size));
+	  return;
+	}
+
+      /* The version number.  */
+      const uint16_t version = read_2_bytes (abfd, addr);
+      addr += 2;
+      if (version != 2)
+	{
+	  warning (_("Section .debug_aranges in %s entry at offset %s "
+		     "has unsupported version %d, ignoring .debug_aranges."),
+		   objfile_name (objfile),
+		   plongest (entry_addr - section->buffer), version);
+	  return;
+	}
+
+      const uint64_t debug_info_offset
+	= extract_unsigned_integer (addr, offset_size, dwarf5_byte_order);
+      addr += offset_size;
+      const auto per_cu_it
+	= debug_info_offset_to_per_cu.find (sect_offset (debug_info_offset));
+      if (per_cu_it == debug_info_offset_to_per_cu.cend ())
+	{
+	  warning (_("Section .debug_aranges in %s entry at offset %s "
+		     "debug_info_offset %s does not exists, "
+		     "ignoring .debug_aranges."),
+		   objfile_name (objfile),
+		   plongest (entry_addr - section->buffer),
+		   pulongest (debug_info_offset));
+	  return;
+	}
+      dwarf2_per_cu_data *const per_cu = per_cu_it->second;
+
+      const uint8_t address_size = *addr++;
+      if (address_size < 1 || address_size > 8)
+	{
+	  warning (_("Section .debug_aranges in %s entry at offset %s "
+		     "address_size %u is invalid, ignoring .debug_aranges."),
+		   objfile_name (objfile),
+		   plongest (entry_addr - section->buffer), address_size);
+	  return;
+	}
+
+      const uint8_t segment_selector_size = *addr++;
+      if (segment_selector_size != 0)
+	{
+	  warning (_("Section .debug_aranges in %s entry at offset %s "
+		     "segment_selector_size %u is not supported, "
+		     "ignoring .debug_aranges."),
+		   objfile_name (objfile),
+		   plongest (entry_addr - section->buffer),
+		   segment_selector_size);
+	  return;
+	}
+
+      /* Must pad to an alignment boundary that is twice the address
+	 size.  It is undocumented by the DWARF standard but GCC does
+	 use it.  However, not every compiler does this.  We can see
+	 whether it has happened by looking at the total length of the
+	 contents of the aranges for this CU -- it if isn't a multiple
+	 of twice the address size, then we skip any leftover
+	 bytes.  */
+      addr += (entry_end - addr) % (2 * address_size);
+
+      for (;;)
+	{
+	  if (addr + 2 * address_size > entry_end)
+	    {
+	      warning (_("Section .debug_aranges in %s entry at offset %s "
+			 "address list is not properly terminated, "
+			 "ignoring .debug_aranges."),
+		       objfile_name (objfile),
+		       plongest (entry_addr - section->buffer));
+	      return;
+	    }
+	  ULONGEST start = extract_unsigned_integer (addr, address_size,
+						     dwarf5_byte_order);
+	  addr += address_size;
+	  ULONGEST length = extract_unsigned_integer (addr, address_size,
+						      dwarf5_byte_order);
+	  addr += address_size;
+	  if (start == 0 && length == 0)
+	    break;
+	  if (start == 0 && !per_bfd->has_section_at_zero)
+	    {
+	      /* Symbol was eliminated due to a COMDAT group.  */
+	      continue;
+	    }
+	  ULONGEST end = start + length;
+	  start = (gdbarch_adjust_dwarf2_addr (gdbarch, start + baseaddr)
+		   - baseaddr);
+	  end = (gdbarch_adjust_dwarf2_addr (gdbarch, end + baseaddr)
+		 - baseaddr);
+	  addrmap_set_empty (mutable_map, start, end - 1, per_cu);
+	}
+    }
+
+  per_bfd->index_addrmap = addrmap_create_fixed (mutable_map,
+						 &per_bfd->obstack);
+}
+
+/* A helper function that reads the .gdb_index from BUFFER and fills
+   in MAP.  FILENAME is the name of the file containing the data;
+   it is used for error reporting.  DEPRECATED_OK is true if it is
+   ok to use deprecated sections.
+
+   CU_LIST, CU_LIST_ELEMENTS, TYPES_LIST, and TYPES_LIST_ELEMENTS are
+   out parameters that are filled in with information about the CU and
+   TU lists in the section.
+
+   Returns true if all went well, false otherwise.  */
+
+static bool
+read_gdb_index_from_buffer (const char *filename,
+			    bool deprecated_ok,
+			    gdb::array_view<const gdb_byte> buffer,
+			    struct mapped_index *map,
+			    const gdb_byte **cu_list,
+			    offset_type *cu_list_elements,
+			    const gdb_byte **types_list,
+			    offset_type *types_list_elements)
+{
+  const gdb_byte *addr = &buffer[0];
+  offset_view metadata (buffer);
+
+  /* Version check.  */
+  offset_type version = metadata[0];
+  /* Versions earlier than 3 emitted every copy of a psymbol.  This
+     causes the index to behave very poorly for certain requests.  Version 3
+     contained incomplete addrmap.  So, it seems better to just ignore such
+     indices.  */
+  if (version < 4)
+    {
+      static int warning_printed = 0;
+      if (!warning_printed)
+	{
+	  warning (_("Skipping obsolete .gdb_index section in %s."),
+		   filename);
+	  warning_printed = 1;
+	}
+      return 0;
+    }
+  /* Index version 4 uses a different hash function than index version
+     5 and later.
+
+     Versions earlier than 6 did not emit psymbols for inlined
+     functions.  Using these files will cause GDB not to be able to
+     set breakpoints on inlined functions by name, so we ignore these
+     indices unless the user has done
+     "set use-deprecated-index-sections on".  */
+  if (version < 6 && !deprecated_ok)
+    {
+      static int warning_printed = 0;
+      if (!warning_printed)
+	{
+	  warning (_("\
+Skipping deprecated .gdb_index section in %s.\n\
+Do \"set use-deprecated-index-sections on\" before the file is read\n\
+to use the section anyway."),
+		   filename);
+	  warning_printed = 1;
+	}
+      return 0;
+    }
+  /* Version 7 indices generated by gold refer to the CU for a symbol instead
+     of the TU (for symbols coming from TUs),
+     http://sourceware.org/bugzilla/show_bug.cgi?id=15021.
+     Plus gold-generated indices can have duplicate entries for global symbols,
+     http://sourceware.org/bugzilla/show_bug.cgi?id=15646.
+     These are just performance bugs, and we can't distinguish gdb-generated
+     indices from gold-generated ones, so issue no warning here.  */
+
+  /* Indexes with higher version than the one supported by GDB may be no
+     longer backward compatible.  */
+  if (version > 8)
+    return 0;
+
+  map->version = version;
+
+  int i = 1;
+  *cu_list = addr + metadata[i];
+  *cu_list_elements = (metadata[i + 1] - metadata[i]) / 8;
+  ++i;
+
+  *types_list = addr + metadata[i];
+  *types_list_elements = (metadata[i + 1] - metadata[i]) / 8;
+  ++i;
+
+  const gdb_byte *address_table = addr + metadata[i];
+  const gdb_byte *address_table_end = addr + metadata[i + 1];
+  map->address_table
+    = gdb::array_view<const gdb_byte> (address_table, address_table_end);
+  ++i;
+
+  const gdb_byte *symbol_table = addr + metadata[i];
+  const gdb_byte *symbol_table_end = addr + metadata[i + 1];
+  map->symbol_table
+    = offset_view (gdb::array_view<const gdb_byte> (symbol_table,
+						    symbol_table_end));
+
+  ++i;
+  map->constant_pool = buffer.slice (metadata[i]);
+
+  return 1;
+}
+
+/* Callback types for dwarf2_read_gdb_index.  */
+
+typedef gdb::function_view
+    <gdb::array_view<const gdb_byte>(objfile *, dwarf2_per_bfd *)>
+    get_gdb_index_contents_ftype;
+typedef gdb::function_view
+    <gdb::array_view<const gdb_byte>(objfile *, dwz_file *)>
+    get_gdb_index_contents_dwz_ftype;
+
+/* Read .gdb_index.  If everything went ok, initialize the "quick"
+   elements of all the CUs and return 1.  Otherwise, return 0.  */
+
+static int
+dwarf2_read_gdb_index
+  (dwarf2_per_objfile *per_objfile,
+   get_gdb_index_contents_ftype get_gdb_index_contents,
+   get_gdb_index_contents_dwz_ftype get_gdb_index_contents_dwz)
+{
+  const gdb_byte *cu_list, *types_list, *dwz_list = NULL;
+  offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0;
+  struct dwz_file *dwz;
+  struct objfile *objfile = per_objfile->objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  gdb::array_view<const gdb_byte> main_index_contents
+    = get_gdb_index_contents (objfile, per_bfd);
+
+  if (main_index_contents.empty ())
+    return 0;
+
+  std::unique_ptr<struct mapped_index> map (new struct mapped_index);
+  if (!read_gdb_index_from_buffer (objfile_name (objfile),
+				   use_deprecated_index_sections,
+				   main_index_contents, map.get (), &cu_list,
+				   &cu_list_elements, &types_list,
+				   &types_list_elements))
+    return 0;
+
+  /* Don't use the index if it's empty.  */
+  if (map->symbol_table.empty ())
+    return 0;
+
+  /* If there is a .dwz file, read it so we can get its CU list as
+     well.  */
+  dwz = dwarf2_get_dwz_file (per_bfd);
+  if (dwz != NULL)
+    {
+      struct mapped_index dwz_map;
+      const gdb_byte *dwz_types_ignore;
+      offset_type dwz_types_elements_ignore;
+
+      gdb::array_view<const gdb_byte> dwz_index_content
+	= get_gdb_index_contents_dwz (objfile, dwz);
+
+      if (dwz_index_content.empty ())
+	return 0;
+
+      if (!read_gdb_index_from_buffer (bfd_get_filename (dwz->dwz_bfd.get ()),
+				       1, dwz_index_content, &dwz_map,
+				       &dwz_list, &dwz_list_elements,
+				       &dwz_types_ignore,
+				       &dwz_types_elements_ignore))
+	{
+	  warning (_("could not read '.gdb_index' section from %s; skipping"),
+		   bfd_get_filename (dwz->dwz_bfd.get ()));
+	  return 0;
+	}
+    }
+
+  create_cus_from_index (per_bfd, cu_list, cu_list_elements, dwz_list,
+			 dwz_list_elements);
+
+  if (types_list_elements)
+    {
+      /* We can only handle a single .debug_types when we have an
+	 index.  */
+      if (per_bfd->types.size () != 1)
+	return 0;
+
+      dwarf2_section_info *section = &per_bfd->types[0];
+
+      create_signatured_type_table_from_index (per_bfd, section, types_list,
+					       types_list_elements);
+    }
+
+  create_addrmap_from_index (per_objfile, map.get ());
+
+  per_bfd->index_table = std::move (map);
+  per_bfd->using_index = 1;
+  per_bfd->quick_file_names_table =
+    create_quick_file_names_table (per_bfd->all_comp_units.size ());
+
+  return 1;
+}
+
+/* die_reader_func for dw2_get_file_names.  */
+
+static void
+dw2_get_file_names_reader (const struct die_reader_specs *reader,
+			   struct die_info *comp_unit_die)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  struct dwarf2_per_cu_data *this_cu = cu->per_cu;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct dwarf2_per_cu_data *lh_cu;
+  struct attribute *attr;
+  void **slot;
+  struct quick_file_names *qfn;
+
+  gdb_assert (! this_cu->is_debug_types);
+
+  /* Our callers never want to match partial units -- instead they
+     will match the enclosing full CU.  */
+  if (comp_unit_die->tag == DW_TAG_partial_unit)
+    {
+      this_cu->v.quick->no_file_data = 1;
+      return;
+    }
+
+  lh_cu = this_cu;
+  slot = NULL;
+
+  line_header_up lh;
+  sect_offset line_offset {};
+
+  attr = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, cu);
+  if (attr != nullptr && attr->form_is_unsigned ())
+    {
+      struct quick_file_names find_entry;
+
+      line_offset = (sect_offset) attr->as_unsigned ();
+
+      /* We may have already read in this line header (TU line header sharing).
+	 If we have we're done.  */
+      find_entry.hash.dwo_unit = cu->dwo_unit;
+      find_entry.hash.line_sect_off = line_offset;
+      slot = htab_find_slot (per_objfile->per_bfd->quick_file_names_table.get (),
+			     &find_entry, INSERT);
+      if (*slot != NULL)
+	{
+	  lh_cu->v.quick->file_names = (struct quick_file_names *) *slot;
+	  return;
+	}
+
+      lh = dwarf_decode_line_header (line_offset, cu);
+    }
+  if (lh == NULL)
+    {
+      lh_cu->v.quick->no_file_data = 1;
+      return;
+    }
+
+  qfn = XOBNEW (&per_objfile->per_bfd->obstack, struct quick_file_names);
+  qfn->hash.dwo_unit = cu->dwo_unit;
+  qfn->hash.line_sect_off = line_offset;
+  gdb_assert (slot != NULL);
+  *slot = qfn;
+
+  file_and_directory fnd = find_file_and_directory (comp_unit_die, cu);
+
+  int offset = 0;
+  if (strcmp (fnd.name, "<unknown>") != 0)
+    ++offset;
+
+  qfn->num_file_names = offset + lh->file_names_size ();
+  qfn->file_names =
+    XOBNEWVEC (&per_objfile->per_bfd->obstack, const char *,
+	       qfn->num_file_names);
+  if (offset != 0)
+    qfn->file_names[0] = xstrdup (fnd.name);
+  for (int i = 0; i < lh->file_names_size (); ++i)
+    qfn->file_names[i + offset] = lh->file_full_name (i + 1,
+						      fnd.comp_dir).release ();
+  qfn->real_names = NULL;
+
+  lh_cu->v.quick->file_names = qfn;
+}
+
+/* A helper for the "quick" functions which attempts to read the line
+   table for THIS_CU.  */
+
+static struct quick_file_names *
+dw2_get_file_names (dwarf2_per_cu_data *this_cu,
+		    dwarf2_per_objfile *per_objfile)
+{
+  /* This should never be called for TUs.  */
+  gdb_assert (! this_cu->is_debug_types);
+  /* Nor type unit groups.  */
+  gdb_assert (! this_cu->type_unit_group_p ());
+
+  if (this_cu->v.quick->file_names != NULL)
+    return this_cu->v.quick->file_names;
+  /* If we know there is no line data, no point in looking again.  */
+  if (this_cu->v.quick->no_file_data)
+    return NULL;
+
+  cutu_reader reader (this_cu, per_objfile);
+  if (!reader.dummy_p)
+    dw2_get_file_names_reader (&reader, reader.comp_unit_die);
+
+  if (this_cu->v.quick->no_file_data)
+    return NULL;
+  return this_cu->v.quick->file_names;
+}
+
+/* A helper for the "quick" functions which computes and caches the
+   real path for a given file name from the line table.  */
+
+static const char *
+dw2_get_real_path (dwarf2_per_objfile *per_objfile,
+		   struct quick_file_names *qfn, int index)
+{
+  if (qfn->real_names == NULL)
+    qfn->real_names = OBSTACK_CALLOC (&per_objfile->per_bfd->obstack,
+				      qfn->num_file_names, const char *);
+
+  if (qfn->real_names[index] == NULL)
+    qfn->real_names[index] = gdb_realpath (qfn->file_names[index]).release ();
+
+  return qfn->real_names[index];
+}
+
+struct symtab *
+dwarf2_base_index_functions::find_last_source_symtab (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  dwarf2_per_cu_data *dwarf_cu
+    = per_objfile->per_bfd->all_comp_units.back ().get ();
+  compunit_symtab *cust = dw2_instantiate_symtab (dwarf_cu, per_objfile, false);
+
+  if (cust == NULL)
+    return NULL;
+
+  return compunit_primary_filetab (cust);
+}
+
+/* Traversal function for dw2_forget_cached_source_info.  */
+
+static int
+dw2_free_cached_file_names (void **slot, void *info)
+{
+  struct quick_file_names *file_data = (struct quick_file_names *) *slot;
+
+  if (file_data->real_names)
+    {
+      int i;
+
+      for (i = 0; i < file_data->num_file_names; ++i)
+	{
+	  xfree ((void*) file_data->real_names[i]);
+	  file_data->real_names[i] = NULL;
+	}
+    }
+
+  return 1;
+}
+
+void
+dwarf2_base_index_functions::forget_cached_source_info
+     (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  htab_traverse_noresize (per_objfile->per_bfd->quick_file_names_table.get (),
+			  dw2_free_cached_file_names, NULL);
+}
+
+/* Struct used to manage iterating over all CUs looking for a symbol.  */
+
+struct dw2_symtab_iterator
+{
+  /* The dwarf2_per_objfile owning the CUs we are iterating on.  */
+  dwarf2_per_objfile *per_objfile;
+  /* If set, only look for symbols that match that block.  Valid values are
+     GLOBAL_BLOCK and STATIC_BLOCK.  */
+  gdb::optional<block_enum> block_index;
+  /* The kind of symbol we're looking for.  */
+  domain_enum domain;
+  /* The list of CUs from the index entry of the symbol,
+     or NULL if not found.  */
+  offset_view vec;
+  /* The next element in VEC to look at.  */
+  int next;
+  /* The number of elements in VEC, or zero if there is no match.  */
+  int length;
+  /* Have we seen a global version of the symbol?
+     If so we can ignore all further global instances.
+     This is to work around gold/15646, inefficient gold-generated
+     indices.  */
+  int global_seen;
+};
+
+/* Initialize the index symtab iterator ITER, offset_type NAMEI variant.  */
+
+static void
+dw2_symtab_iter_init (struct dw2_symtab_iterator *iter,
+		      dwarf2_per_objfile *per_objfile,
+		      gdb::optional<block_enum> block_index,
+		      domain_enum domain, offset_type namei)
+{
+  iter->per_objfile = per_objfile;
+  iter->block_index = block_index;
+  iter->domain = domain;
+  iter->next = 0;
+  iter->global_seen = 0;
+  iter->vec = {};
+  iter->length = 0;
+
+  mapped_index *index = per_objfile->per_bfd->index_table.get ();
+  /* index is NULL if OBJF_READNOW.  */
+  if (index == NULL)
+    return;
+
+  gdb_assert (!index->symbol_name_slot_invalid (namei));
+  offset_type vec_idx = index->symbol_vec_index (namei);
+
+  iter->vec = offset_view (index->constant_pool.slice (vec_idx));
+  iter->length = iter->vec[0];
+}
+
+/* Return the next matching CU or NULL if there are no more.  */
+
+static struct dwarf2_per_cu_data *
+dw2_symtab_iter_next (struct dw2_symtab_iterator *iter)
+{
+  dwarf2_per_objfile *per_objfile = iter->per_objfile;
+
+  for ( ; iter->next < iter->length; ++iter->next)
+    {
+      offset_type cu_index_and_attrs = iter->vec[iter->next + 1];
+      offset_type cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs);
+      gdb_index_symbol_kind symbol_kind =
+	GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs);
+      /* Only check the symbol attributes if they're present.
+	 Indices prior to version 7 don't record them,
+	 and indices >= 7 may elide them for certain symbols
+	 (gold does this).  */
+      int attrs_valid =
+	(per_objfile->per_bfd->index_table->version >= 7
+	 && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE);
+
+      /* Don't crash on bad data.  */
+      if (cu_index >= per_objfile->per_bfd->all_comp_units.size ())
+	{
+	  complaint (_(".gdb_index entry has bad CU index"
+		       " [in module %s]"), objfile_name (per_objfile->objfile));
+	  continue;
+	}
+
+      dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cu (cu_index);
+
+      /* Skip if already read in.  */
+      if (per_objfile->symtab_set_p (per_cu))
+	continue;
+
+      /* Check static vs global.  */
+      if (attrs_valid)
+	{
+	  bool is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs);
+
+	  if (iter->block_index.has_value ())
+	    {
+	      bool want_static = *iter->block_index == STATIC_BLOCK;
+
+	      if (is_static != want_static)
+		continue;
+	    }
+
+	  /* Work around gold/15646.  */
+	  if (!is_static
+	      && symbol_kind == GDB_INDEX_SYMBOL_KIND_TYPE)
+	    {
+	      if (iter->global_seen)
+		continue;
+
+	      iter->global_seen = 1;
+	    }
+	}
+
+      /* Only check the symbol's kind if it has one.  */
+      if (attrs_valid)
+	{
+	  switch (iter->domain)
+	    {
+	    case VAR_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE
+		  && symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION
+		  /* Some types are also in VAR_DOMAIN.  */
+		  && symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
+		continue;
+	      break;
+	    case STRUCT_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
+		continue;
+	      break;
+	    case LABEL_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
+		continue;
+	      break;
+	    case MODULE_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
+		continue;
+	      break;
+	    default:
+	      break;
+	    }
+	}
+
+      ++iter->next;
+      return per_cu;
+    }
+
+  return NULL;
+}
+
+void
+dwarf2_base_index_functions::print_stats (struct objfile *objfile,
+					  bool print_bcache)
+{
+  if (print_bcache)
+    return;
+
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  int total = per_objfile->per_bfd->all_comp_units.size ();
+  int count = 0;
+
+  for (int i = 0; i < total; ++i)
+    {
+      dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cu (i);
+
+      if (!per_objfile->symtab_set_p (per_cu))
+	++count;
+    }
+  printf_filtered (_("  Number of read CUs: %d\n"), total - count);
+  printf_filtered (_("  Number of unread CUs: %d\n"), count);
+}
+
+/* This dumps minimal information about the index.
+   It is called via "mt print objfiles".
+   One use is to verify .gdb_index has been loaded by the
+   gdb.dwarf2/gdb-index.exp testcase.  */
+
+void
+dwarf2_gdb_index::dump (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  gdb_assert (per_objfile->per_bfd->using_index);
+  printf_filtered (".gdb_index:");
+  if (per_objfile->per_bfd->index_table != NULL)
+    {
+      printf_filtered (" version %d\n",
+		       per_objfile->per_bfd->index_table->version);
+    }
+  else
+    printf_filtered (" faked for \"readnow\"\n");
+  printf_filtered ("\n");
+}
+
+void
+dwarf2_base_index_functions::expand_all_symtabs (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  int total_units = per_objfile->per_bfd->all_comp_units.size ();
+
+  for (int i = 0; i < total_units; ++i)
+    {
+      dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cu (i);
+
+      /* We don't want to directly expand a partial CU, because if we
+	 read it with the wrong language, then assertion failures can
+	 be triggered later on.  See PR symtab/23010.  So, tell
+	 dw2_instantiate_symtab to skip partial CUs -- any important
+	 partial CU will be read via DW_TAG_imported_unit anyway.  */
+      dw2_instantiate_symtab (per_cu, per_objfile, true);
+    }
+}
+
+static bool
+dw2_expand_symtabs_matching_symbol
+  (mapped_index_base &index,
+   const lookup_name_info &lookup_name_in,
+   gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+   gdb::function_view<bool (offset_type)> match_callback,
+   dwarf2_per_objfile *per_objfile);
+
+static bool
+dw2_expand_symtabs_matching_one
+  (dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile,
+   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify);
+
+void
+dwarf2_gdb_index::expand_matching_symbols
+  (struct objfile *objfile,
+   const lookup_name_info &name, domain_enum domain,
+   int global,
+   symbol_compare_ftype *ordered_compare)
+{
+  /* Used for Ada.  */
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
+
+  if (per_objfile->per_bfd->index_table != nullptr)
+    {
+      mapped_index &index = *per_objfile->per_bfd->index_table;
+
+      const char *match_name = name.ada ().lookup_name ().c_str ();
+      auto matcher = [&] (const char *symname)
+	{
+	  if (ordered_compare == nullptr)
+	    return true;
+	  return ordered_compare (symname, match_name) == 0;
+	};
+
+      dw2_expand_symtabs_matching_symbol (index, name, matcher,
+					  [&] (offset_type namei)
+      {
+	struct dw2_symtab_iterator iter;
+	struct dwarf2_per_cu_data *per_cu;
+
+	dw2_symtab_iter_init (&iter, per_objfile, block_kind, domain,
+			      namei);
+	while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL)
+	  dw2_expand_symtabs_matching_one (per_cu, per_objfile, nullptr,
+					   nullptr);
+	return true;
+      }, per_objfile);
+    }
+  else
+    {
+      /* We have -readnow: no .gdb_index, but no partial symtabs either.  So,
+	 proceed assuming all symtabs have been read in.  */
+    }
+}
+
+/* Starting from a search name, return the string that finds the upper
+   bound of all strings that start with SEARCH_NAME in a sorted name
+   list.  Returns the empty string to indicate that the upper bound is
+   the end of the list.  */
+
+static std::string
+make_sort_after_prefix_name (const char *search_name)
+{
+  /* When looking to complete "func", we find the upper bound of all
+     symbols that start with "func" by looking for where we'd insert
+     the closest string that would follow "func" in lexicographical
+     order.  Usually, that's "func"-with-last-character-incremented,
+     i.e. "fund".  Mind non-ASCII characters, though.  Usually those
+     will be UTF-8 multi-byte sequences, but we can't be certain.
+     Especially mind the 0xff character, which is a valid character in
+     non-UTF-8 source character sets (e.g. Latin1 'Ã¿'), and we can't
+     rule out compilers allowing it in identifiers.  Note that
+     conveniently, strcmp/strcasecmp are specified to compare
+     characters interpreted as unsigned char.  So what we do is treat
+     the whole string as a base 256 number composed of a sequence of
+     base 256 "digits" and add 1 to it.  I.e., adding 1 to 0xff wraps
+     to 0, and carries 1 to the following more-significant position.
+     If the very first character in SEARCH_NAME ends up incremented
+     and carries/overflows, then the upper bound is the end of the
+     list.  The string after the empty string is also the empty
+     string.
+
+     Some examples of this operation:
+
+       SEARCH_NAME  => "+1" RESULT
+
+       "abc"              => "abd"
+       "ab\xff"           => "ac"
+       "\xff" "a" "\xff"  => "\xff" "b"
+       "\xff"             => ""
+       "\xff\xff"         => ""
+       ""                 => ""
+
+     Then, with these symbols for example:
+
+      func
+      func1
+      fund
+
+     completing "func" looks for symbols between "func" and
+     "func"-with-last-character-incremented, i.e. "fund" (exclusive),
+     which finds "func" and "func1", but not "fund".
+
+     And with:
+
+      funcÃ¿     (Latin1 'Ã¿' [0xff])
+      funcÃ¿1
+      fund
+
+     completing "funcÃ¿" looks for symbols between "funcÃ¿" and "fund"
+     (exclusive), which finds "funcÃ¿" and "funcÃ¿1", but not "fund".
+
+     And with:
+
+      Ã¿Ã¿        (Latin1 'Ã¿' [0xff])
+      Ã¿Ã¿1
+
+     completing "Ã¿" or "Ã¿Ã¿" looks for symbols between between "Ã¿Ã¿" and
+     the end of the list.
+  */
+  std::string after = search_name;
+  while (!after.empty () && (unsigned char) after.back () == 0xff)
+    after.pop_back ();
+  if (!after.empty ())
+    after.back () = (unsigned char) after.back () + 1;
+  return after;
+}
+
+/* See declaration.  */
+
+std::pair<std::vector<name_component>::const_iterator,
+	  std::vector<name_component>::const_iterator>
+mapped_index_base::find_name_components_bounds
+  (const lookup_name_info &lookup_name_without_params, language lang,
+   dwarf2_per_objfile *per_objfile) const
+{
+  auto *name_cmp
+    = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp;
+
+  const char *lang_name
+    = lookup_name_without_params.language_lookup_name (lang);
+
+  /* Comparison function object for lower_bound that matches against a
+     given symbol name.  */
+  auto lookup_compare_lower = [&] (const name_component &elem,
+				   const char *name)
+    {
+      const char *elem_qualified = this->symbol_name_at (elem.idx, per_objfile);
+      const char *elem_name = elem_qualified + elem.name_offset;
+      return name_cmp (elem_name, name) < 0;
+    };
+
+  /* Comparison function object for upper_bound that matches against a
+     given symbol name.  */
+  auto lookup_compare_upper = [&] (const char *name,
+				   const name_component &elem)
+    {
+      const char *elem_qualified = this->symbol_name_at (elem.idx, per_objfile);
+      const char *elem_name = elem_qualified + elem.name_offset;
+      return name_cmp (name, elem_name) < 0;
+    };
+
+  auto begin = this->name_components.begin ();
+  auto end = this->name_components.end ();
+
+  /* Find the lower bound.  */
+  auto lower = [&] ()
+    {
+      if (lookup_name_without_params.completion_mode () && lang_name[0] == '\0')
+	return begin;
+      else
+	return std::lower_bound (begin, end, lang_name, lookup_compare_lower);
+    } ();
+
+  /* Find the upper bound.  */
+  auto upper = [&] ()
+    {
+      if (lookup_name_without_params.completion_mode ())
+	{
+	  /* In completion mode, we want UPPER to point past all
+	     symbols names that have the same prefix.  I.e., with
+	     these symbols, and completing "func":
+
+	      function        << lower bound
+	      function1
+	      other_function  << upper bound
+
+	     We find the upper bound by looking for the insertion
+	     point of "func"-with-last-character-incremented,
+	     i.e. "fund".  */
+	  std::string after = make_sort_after_prefix_name (lang_name);
+	  if (after.empty ())
+	    return end;
+	  return std::lower_bound (lower, end, after.c_str (),
+				   lookup_compare_lower);
+	}
+      else
+	return std::upper_bound (lower, end, lang_name, lookup_compare_upper);
+    } ();
+
+  return {lower, upper};
+}
+
+/* See declaration.  */
+
+void
+mapped_index_base::build_name_components (dwarf2_per_objfile *per_objfile)
+{
+  if (!this->name_components.empty ())
+    return;
+
+  this->name_components_casing = case_sensitivity;
+  auto *name_cmp
+    = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp;
+
+  /* The code below only knows how to break apart components of C++
+     symbol names (and other languages that use '::' as
+     namespace/module separator) and Ada symbol names.  */
+  auto count = this->symbol_name_count ();
+  for (offset_type idx = 0; idx < count; idx++)
+    {
+      if (this->symbol_name_slot_invalid (idx))
+	continue;
+
+      const char *name = this->symbol_name_at (idx, per_objfile);
+
+      /* Add each name component to the name component table.  */
+      unsigned int previous_len = 0;
+
+      if (strstr (name, "::") != nullptr)
+	{
+	  for (unsigned int current_len = cp_find_first_component (name);
+	       name[current_len] != '\0';
+	       current_len += cp_find_first_component (name + current_len))
+	    {
+	      gdb_assert (name[current_len] == ':');
+	      this->name_components.push_back ({previous_len, idx});
+	      /* Skip the '::'.  */
+	      current_len += 2;
+	      previous_len = current_len;
+	    }
+	}
+      else
+	{
+	  /* Handle the Ada encoded (aka mangled) form here.  */
+	  for (const char *iter = strstr (name, "__");
+	       iter != nullptr;
+	       iter = strstr (iter, "__"))
+	    {
+	      this->name_components.push_back ({previous_len, idx});
+	      iter += 2;
+	      previous_len = iter - name;
+	    }
+	}
+
+      this->name_components.push_back ({previous_len, idx});
+    }
+
+  /* Sort name_components elements by name.  */
+  auto name_comp_compare = [&] (const name_component &left,
+				const name_component &right)
+    {
+      const char *left_qualified
+	= this->symbol_name_at (left.idx, per_objfile);
+      const char *right_qualified
+	= this->symbol_name_at (right.idx, per_objfile);
+
+      const char *left_name = left_qualified + left.name_offset;
+      const char *right_name = right_qualified + right.name_offset;
+
+      return name_cmp (left_name, right_name) < 0;
+    };
+
+  std::sort (this->name_components.begin (),
+	     this->name_components.end (),
+	     name_comp_compare);
+}
+
+/* Helper for dw2_expand_symtabs_matching that works with a
+   mapped_index_base instead of the containing objfile.  This is split
+   to a separate function in order to be able to unit test the
+   name_components matching using a mock mapped_index_base.  For each
+   symbol name that matches, calls MATCH_CALLBACK, passing it the
+   symbol's index in the mapped_index_base symbol table.  */
+
+static bool
+dw2_expand_symtabs_matching_symbol
+  (mapped_index_base &index,
+   const lookup_name_info &lookup_name_in,
+   gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+   gdb::function_view<bool (offset_type)> match_callback,
+   dwarf2_per_objfile *per_objfile)
+{
+  lookup_name_info lookup_name_without_params
+    = lookup_name_in.make_ignore_params ();
+
+  /* Build the symbol name component sorted vector, if we haven't
+     yet.  */
+  index.build_name_components (per_objfile);
+
+  /* The same symbol may appear more than once in the range though.
+     E.g., if we're looking for symbols that complete "w", and we have
+     a symbol named "w1::w2", we'll find the two name components for
+     that same symbol in the range.  To be sure we only call the
+     callback once per symbol, we first collect the symbol name
+     indexes that matched in a temporary vector and ignore
+     duplicates.  */
+  std::vector<offset_type> matches;
+
+  struct name_and_matcher
+  {
+    symbol_name_matcher_ftype *matcher;
+    const char *name;
+
+    bool operator== (const name_and_matcher &other) const
+    {
+      return matcher == other.matcher && strcmp (name, other.name) == 0;
+    }
+  };
+
+  /* A vector holding all the different symbol name matchers, for all
+     languages.  */
+  std::vector<name_and_matcher> matchers;
+
+  for (int i = 0; i < nr_languages; i++)
+    {
+      enum language lang_e = (enum language) i;
+
+      const language_defn *lang = language_def (lang_e);
+      symbol_name_matcher_ftype *name_matcher
+	= lang->get_symbol_name_matcher (lookup_name_without_params);
+
+      name_and_matcher key {
+	 name_matcher,
+	 lookup_name_without_params.language_lookup_name (lang_e)
+      };
+
+      /* Don't insert the same comparison routine more than once.
+	 Note that we do this linear walk.  This is not a problem in
+	 practice because the number of supported languages is
+	 low.  */
+      if (std::find (matchers.begin (), matchers.end (), key)
+	  != matchers.end ())
+	continue;
+      matchers.push_back (std::move (key));
+
+      auto bounds
+	= index.find_name_components_bounds (lookup_name_without_params,
+					     lang_e, per_objfile);
+
+      /* Now for each symbol name in range, check to see if we have a name
+	 match, and if so, call the MATCH_CALLBACK callback.  */
+
+      for (; bounds.first != bounds.second; ++bounds.first)
+	{
+	  const char *qualified
+	    = index.symbol_name_at (bounds.first->idx, per_objfile);
+
+	  if (!name_matcher (qualified, lookup_name_without_params, NULL)
+	      || (symbol_matcher != NULL && !symbol_matcher (qualified)))
+	    continue;
+
+	  matches.push_back (bounds.first->idx);
+	}
+    }
+
+  std::sort (matches.begin (), matches.end ());
+
+  /* Finally call the callback, once per match.  */
+  ULONGEST prev = -1;
+  bool result = true;
+  for (offset_type idx : matches)
+    {
+      if (prev != idx)
+	{
+	  if (!match_callback (idx))
+	    {
+	      result = false;
+	      break;
+	    }
+	  prev = idx;
+	}
+    }
+
+  /* Above we use a type wider than idx's for 'prev', since 0 and
+     (offset_type)-1 are both possible values.  */
+  static_assert (sizeof (prev) > sizeof (offset_type), "");
+
+  return result;
+}
+
+#if GDB_SELF_TEST
+
+namespace selftests { namespace dw2_expand_symtabs_matching {
+
+/* A mock .gdb_index/.debug_names-like name index table, enough to
+   exercise dw2_expand_symtabs_matching_symbol, which works with the
+   mapped_index_base interface.  Builds an index from the symbol list
+   passed as parameter to the constructor.  */
+class mock_mapped_index : public mapped_index_base
+{
+public:
+  mock_mapped_index (gdb::array_view<const char *> symbols)
+    : m_symbol_table (symbols)
+  {}
+
+  DISABLE_COPY_AND_ASSIGN (mock_mapped_index);
+
+  /* Return the number of names in the symbol table.  */
+  size_t symbol_name_count () const override
+  {
+    return m_symbol_table.size ();
+  }
+
+  /* Get the name of the symbol at IDX in the symbol table.  */
+  const char *symbol_name_at
+    (offset_type idx, dwarf2_per_objfile *per_objfile) const override
+  {
+    return m_symbol_table[idx];
+  }
+
+private:
+  gdb::array_view<const char *> m_symbol_table;
+};
+
+/* Convenience function that converts a NULL pointer to a "<null>"
+   string, to pass to print routines.  */
+
+static const char *
+string_or_null (const char *str)
+{
+  return str != NULL ? str : "<null>";
+}
+
+/* Check if a lookup_name_info built from
+   NAME/MATCH_TYPE/COMPLETION_MODE matches the symbols in the mock
+   index.  EXPECTED_LIST is the list of expected matches, in expected
+   matching order.  If no match expected, then an empty list is
+   specified.  Returns true on success.  On failure prints a warning
+   indicating the file:line that failed, and returns false.  */
+
+static bool
+check_match (const char *file, int line,
+	     mock_mapped_index &mock_index,
+	     const char *name, symbol_name_match_type match_type,
+	     bool completion_mode,
+	     std::initializer_list<const char *> expected_list,
+	     dwarf2_per_objfile *per_objfile)
+{
+  lookup_name_info lookup_name (name, match_type, completion_mode);
+
+  bool matched = true;
+
+  auto mismatch = [&] (const char *expected_str,
+		       const char *got)
+  {
+    warning (_("%s:%d: match_type=%s, looking-for=\"%s\", "
+	       "expected=\"%s\", got=\"%s\"\n"),
+	     file, line,
+	     (match_type == symbol_name_match_type::FULL
+	      ? "FULL" : "WILD"),
+	     name, string_or_null (expected_str), string_or_null (got));
+    matched = false;
+  };
+
+  auto expected_it = expected_list.begin ();
+  auto expected_end = expected_list.end ();
+
+  dw2_expand_symtabs_matching_symbol (mock_index, lookup_name,
+				      nullptr,
+				      [&] (offset_type idx)
+  {
+    const char *matched_name = mock_index.symbol_name_at (idx, per_objfile);
+    const char *expected_str
+      = expected_it == expected_end ? NULL : *expected_it++;
+
+    if (expected_str == NULL || strcmp (expected_str, matched_name) != 0)
+      mismatch (expected_str, matched_name);
+    return true;
+  }, per_objfile);
+
+  const char *expected_str
+  = expected_it == expected_end ? NULL : *expected_it++;
+  if (expected_str != NULL)
+    mismatch (expected_str, NULL);
+
+  return matched;
+}
+
+/* The symbols added to the mock mapped_index for testing (in
+   canonical form).  */
+static const char *test_symbols[] = {
+  "function",
+  "std::bar",
+  "std::zfunction",
+  "std::zfunction2",
+  "w1::w2",
+  "ns::foo<char*>",
+  "ns::foo<int>",
+  "ns::foo<long>",
+  "ns2::tmpl<int>::foo2",
+  "(anonymous namespace)::A::B::C",
+
+  /* These are used to check that the increment-last-char in the
+     matching algorithm for completion doesn't match "t1_fund" when
+     completing "t1_func".  */
+  "t1_func",
+  "t1_func1",
+  "t1_fund",
+  "t1_fund1",
+
+  /* A UTF-8 name with multi-byte sequences to make sure that
+     cp-name-parser understands this as a single identifier ("funÃ§Ã£o"
+     is "function" in PT).  */
+  u8"u8funÃ§Ã£o",
+
+  /* \377 (0xff) is Latin1 'Ã¿'.  */
+  "yfunc\377",
+
+  /* \377 (0xff) is Latin1 'Ã¿'.  */
+  "\377",
+  "\377\377123",
+
+  /* A name with all sorts of complications.  Starts with "z" to make
+     it easier for the completion tests below.  */
+#define Z_SYM_NAME \
+  "z::std::tuple<(anonymous namespace)::ui*, std::bar<(anonymous namespace)::ui> >" \
+    "::tuple<(anonymous namespace)::ui*, " \
+    "std::default_delete<(anonymous namespace)::ui>, void>"
+
+  Z_SYM_NAME
+};
+
+/* Returns true if the mapped_index_base::find_name_component_bounds
+   method finds EXPECTED_SYMS in INDEX when looking for SEARCH_NAME,
+   in completion mode.  */
+
+static bool
+check_find_bounds_finds (mapped_index_base &index,
+			 const char *search_name,
+			 gdb::array_view<const char *> expected_syms,
+			 dwarf2_per_objfile *per_objfile)
+{
+  lookup_name_info lookup_name (search_name,
+				symbol_name_match_type::FULL, true);
+
+  auto bounds = index.find_name_components_bounds (lookup_name,
+						   language_cplus,
+						   per_objfile);
+
+  size_t distance = std::distance (bounds.first, bounds.second);
+  if (distance != expected_syms.size ())
+    return false;
+
+  for (size_t exp_elem = 0; exp_elem < distance; exp_elem++)
+    {
+      auto nc_elem = bounds.first + exp_elem;
+      const char *qualified = index.symbol_name_at (nc_elem->idx, per_objfile);
+      if (strcmp (qualified, expected_syms[exp_elem]) != 0)
+	return false;
+    }
+
+  return true;
+}
+
+/* Test the lower-level mapped_index::find_name_component_bounds
+   method.  */
+
+static void
+test_mapped_index_find_name_component_bounds ()
+{
+  mock_mapped_index mock_index (test_symbols);
+
+  mock_index.build_name_components (NULL /* per_objfile */);
+
+  /* Test the lower-level mapped_index::find_name_component_bounds
+     method in completion mode.  */
+  {
+    static const char *expected_syms[] = {
+      "t1_func",
+      "t1_func1",
+    };
+
+    SELF_CHECK (check_find_bounds_finds
+		  (mock_index, "t1_func", expected_syms,
+		   NULL /* per_objfile */));
+  }
+
+  /* Check that the increment-last-char in the name matching algorithm
+     for completion doesn't get confused with Ansi1 'Ã¿' / 0xff.  */
+  {
+    static const char *expected_syms1[] = {
+      "\377",
+      "\377\377123",
+    };
+    SELF_CHECK (check_find_bounds_finds
+		  (mock_index, "\377", expected_syms1, NULL /* per_objfile */));
+
+    static const char *expected_syms2[] = {
+      "\377\377123",
+    };
+    SELF_CHECK (check_find_bounds_finds
+		  (mock_index, "\377\377", expected_syms2,
+		   NULL /* per_objfile */));
+  }
+}
+
+/* Test dw2_expand_symtabs_matching_symbol.  */
+
+static void
+test_dw2_expand_symtabs_matching_symbol ()
+{
+  mock_mapped_index mock_index (test_symbols);
+
+  /* We let all tests run until the end even if some fails, for debug
+     convenience.  */
+  bool any_mismatch = false;
+
+  /* Create the expected symbols list (an initializer_list).  Needed
+     because lists have commas, and we need to pass them to CHECK,
+     which is a macro.  */
+#define EXPECT(...) { __VA_ARGS__ }
+
+  /* Wrapper for check_match that passes down the current
+     __FILE__/__LINE__.  */
+#define CHECK_MATCH(NAME, MATCH_TYPE, COMPLETION_MODE, EXPECTED_LIST)	\
+  any_mismatch |= !check_match (__FILE__, __LINE__,			\
+				mock_index,				\
+				NAME, MATCH_TYPE, COMPLETION_MODE,	\
+				EXPECTED_LIST, NULL)
+
+  /* Identity checks.  */
+  for (const char *sym : test_symbols)
+    {
+      /* Should be able to match all existing symbols.  */
+      CHECK_MATCH (sym, symbol_name_match_type::FULL, false,
+		   EXPECT (sym));
+
+      /* Should be able to match all existing symbols with
+	 parameters.  */
+      std::string with_params = std::string (sym) + "(int)";
+      CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false,
+		   EXPECT (sym));
+
+      /* Should be able to match all existing symbols with
+	 parameters and qualifiers.  */
+      with_params = std::string (sym) + " ( int ) const";
+      CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false,
+		   EXPECT (sym));
+
+      /* This should really find sym, but cp-name-parser.y doesn't
+	 know about lvalue/rvalue qualifiers yet.  */
+      with_params = std::string (sym) + " ( int ) &&";
+      CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false,
+		   {});
+    }
+
+  /* Check that the name matching algorithm for completion doesn't get
+     confused with Latin1 'Ã¿' / 0xff.  */
+  {
+    static const char str[] = "\377";
+    CHECK_MATCH (str, symbol_name_match_type::FULL, true,
+		 EXPECT ("\377", "\377\377123"));
+  }
+
+  /* Check that the increment-last-char in the matching algorithm for
+     completion doesn't match "t1_fund" when completing "t1_func".  */
+  {
+    static const char str[] = "t1_func";
+    CHECK_MATCH (str, symbol_name_match_type::FULL, true,
+		 EXPECT ("t1_func", "t1_func1"));
+  }
+
+  /* Check that completion mode works at each prefix of the expected
+     symbol name.  */
+  {
+    static const char str[] = "function(int)";
+    size_t len = strlen (str);
+    std::string lookup;
+
+    for (size_t i = 1; i < len; i++)
+      {
+	lookup.assign (str, i);
+	CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true,
+		     EXPECT ("function"));
+      }
+  }
+
+  /* While "w" is a prefix of both components, the match function
+     should still only be called once.  */
+  {
+    CHECK_MATCH ("w", symbol_name_match_type::FULL, true,
+		 EXPECT ("w1::w2"));
+    CHECK_MATCH ("w", symbol_name_match_type::WILD, true,
+		 EXPECT ("w1::w2"));
+  }
+
+  /* Same, with a "complicated" symbol.  */
+  {
+    static const char str[] = Z_SYM_NAME;
+    size_t len = strlen (str);
+    std::string lookup;
+
+    for (size_t i = 1; i < len; i++)
+      {
+	lookup.assign (str, i);
+	CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true,
+		     EXPECT (Z_SYM_NAME));
+      }
+  }
+
+  /* In FULL mode, an incomplete symbol doesn't match.  */
+  {
+    CHECK_MATCH ("std::zfunction(int", symbol_name_match_type::FULL, false,
+		 {});
+  }
+
+  /* A complete symbol with parameters matches any overload, since the
+     index has no overload info.  */
+  {
+    CHECK_MATCH ("std::zfunction(int)", symbol_name_match_type::FULL, true,
+		 EXPECT ("std::zfunction", "std::zfunction2"));
+    CHECK_MATCH ("zfunction(int)", symbol_name_match_type::WILD, true,
+		 EXPECT ("std::zfunction", "std::zfunction2"));
+    CHECK_MATCH ("zfunc", symbol_name_match_type::WILD, true,
+		 EXPECT ("std::zfunction", "std::zfunction2"));
+  }
+
+  /* Check that whitespace is ignored appropriately.  A symbol with a
+     template argument list. */
+  {
+    static const char expected[] = "ns::foo<int>";
+    CHECK_MATCH ("ns :: foo < int > ", symbol_name_match_type::FULL, false,
+		 EXPECT (expected));
+    CHECK_MATCH ("foo < int > ", symbol_name_match_type::WILD, false,
+		 EXPECT (expected));
+  }
+
+  /* Check that whitespace is ignored appropriately.  A symbol with a
+     template argument list that includes a pointer.  */
+  {
+    static const char expected[] = "ns::foo<char*>";
+    /* Try both completion and non-completion modes.  */
+    static const bool completion_mode[2] = {false, true};
+    for (size_t i = 0; i < 2; i++)
+      {
+	CHECK_MATCH ("ns :: foo < char * >", symbol_name_match_type::FULL,
+		     completion_mode[i], EXPECT (expected));
+	CHECK_MATCH ("foo < char * >", symbol_name_match_type::WILD,
+		     completion_mode[i], EXPECT (expected));
+
+	CHECK_MATCH ("ns :: foo < char * > (int)", symbol_name_match_type::FULL,
+		     completion_mode[i], EXPECT (expected));
+	CHECK_MATCH ("foo < char * > (int)", symbol_name_match_type::WILD,
+		     completion_mode[i], EXPECT (expected));
+      }
+  }
+
+  {
+    /* Check method qualifiers are ignored.  */
+    static const char expected[] = "ns::foo<char*>";
+    CHECK_MATCH ("ns :: foo < char * >  ( int ) const",
+		 symbol_name_match_type::FULL, true, EXPECT (expected));
+    CHECK_MATCH ("ns :: foo < char * >  ( int ) &&",
+		 symbol_name_match_type::FULL, true, EXPECT (expected));
+    CHECK_MATCH ("foo < char * >  ( int ) const",
+		 symbol_name_match_type::WILD, true, EXPECT (expected));
+    CHECK_MATCH ("foo < char * >  ( int ) &&",
+		 symbol_name_match_type::WILD, true, EXPECT (expected));
+  }
+
+  /* Test lookup names that don't match anything.  */
+  {
+    CHECK_MATCH ("bar2", symbol_name_match_type::WILD, false,
+		 {});
+
+    CHECK_MATCH ("doesntexist", symbol_name_match_type::FULL, false,
+		 {});
+  }
+
+  /* Some wild matching tests, exercising "(anonymous namespace)",
+     which should not be confused with a parameter list.  */
+  {
+    static const char *syms[] = {
+      "A::B::C",
+      "B::C",
+      "C",
+      "A :: B :: C ( int )",
+      "B :: C ( int )",
+      "C ( int )",
+    };
+
+    for (const char *s : syms)
+      {
+	CHECK_MATCH (s, symbol_name_match_type::WILD, false,
+		     EXPECT ("(anonymous namespace)::A::B::C"));
+      }
+  }
+
+  {
+    static const char expected[] = "ns2::tmpl<int>::foo2";
+    CHECK_MATCH ("tmp", symbol_name_match_type::WILD, true,
+		 EXPECT (expected));
+    CHECK_MATCH ("tmpl<", symbol_name_match_type::WILD, true,
+		 EXPECT (expected));
+  }
+
+  SELF_CHECK (!any_mismatch);
+
+#undef EXPECT
+#undef CHECK_MATCH
+}
+
+static void
+run_test ()
+{
+  test_mapped_index_find_name_component_bounds ();
+  test_dw2_expand_symtabs_matching_symbol ();
+}
+
+}} // namespace selftests::dw2_expand_symtabs_matching
+
+#endif /* GDB_SELF_TEST */
+
+/* If FILE_MATCHER is NULL or if PER_CU has
+   dwarf2_per_cu_quick_data::MARK set (see
+   dw_expand_symtabs_matching_file_matcher), expand the CU and call
+   EXPANSION_NOTIFY on it.  */
+
+static bool
+dw2_expand_symtabs_matching_one
+  (dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile,
+   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify)
+{
+  if (file_matcher == NULL || per_cu->v.quick->mark)
+    {
+      bool symtab_was_null = !per_objfile->symtab_set_p (per_cu);
+
+      compunit_symtab *symtab
+	= dw2_instantiate_symtab (per_cu, per_objfile, false);
+      gdb_assert (symtab != nullptr);
+
+      if (expansion_notify != NULL && symtab_was_null)
+	return expansion_notify (symtab);
+    }
+  return true;
+}
+
+/* Helper for dw2_expand_matching symtabs.  Called on each symbol
+   matched, to expand corresponding CUs that were marked.  IDX is the
+   index of the symbol name that matched.  */
+
+static bool
+dw2_expand_marked_cus
+  (dwarf2_per_objfile *per_objfile, offset_type idx,
+   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+   block_search_flags search_flags,
+   search_domain kind)
+{
+  offset_type vec_len, vec_idx;
+  bool global_seen = false;
+  mapped_index &index = *per_objfile->per_bfd->index_table;
+
+  offset_view vec (index.constant_pool.slice (index.symbol_vec_index (idx)));
+  vec_len = vec[0];
+  for (vec_idx = 0; vec_idx < vec_len; ++vec_idx)
+    {
+      offset_type cu_index_and_attrs = vec[vec_idx + 1];
+      /* This value is only valid for index versions >= 7.  */
+      int is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs);
+      gdb_index_symbol_kind symbol_kind =
+	GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs);
+      int cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs);
+      /* Only check the symbol attributes if they're present.
+	 Indices prior to version 7 don't record them,
+	 and indices >= 7 may elide them for certain symbols
+	 (gold does this).  */
+      int attrs_valid =
+	(index.version >= 7
+	 && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE);
+
+      /* Work around gold/15646.  */
+      if (attrs_valid
+	  && !is_static
+	  && symbol_kind == GDB_INDEX_SYMBOL_KIND_TYPE)
+	{
+	  if (global_seen)
+	    continue;
+
+	  global_seen = true;
+	}
+
+      /* Only check the symbol's kind if it has one.  */
+      if (attrs_valid)
+	{
+	  if (is_static)
+	    {
+	      if ((search_flags & SEARCH_STATIC_BLOCK) == 0)
+		continue;
+	    }
+	  else
+	    {
+	      if ((search_flags & SEARCH_GLOBAL_BLOCK) == 0)
+		continue;
+	    }
+
+	  switch (kind)
+	    {
+	    case VARIABLES_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE)
+		continue;
+	      break;
+	    case FUNCTIONS_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION)
+		continue;
+	      break;
+	    case TYPES_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
+		continue;
+	      break;
+	    case MODULES_DOMAIN:
+	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
+		continue;
+	      break;
+	    default:
+	      break;
+	    }
+	}
+
+      /* Don't crash on bad data.  */
+      if (cu_index >= per_objfile->per_bfd->all_comp_units.size ())
+	{
+	  complaint (_(".gdb_index entry has bad CU index"
+		       " [in module %s]"), objfile_name (per_objfile->objfile));
+	  continue;
+	}
+
+      dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cu (cu_index);
+      if (!dw2_expand_symtabs_matching_one (per_cu, per_objfile, file_matcher,
+					    expansion_notify))
+	return false;
+    }
+
+  return true;
+}
+
+/* If FILE_MATCHER is non-NULL, set all the
+   dwarf2_per_cu_quick_data::MARK of the current DWARF2_PER_OBJFILE
+   that match FILE_MATCHER.  */
+
+static void
+dw_expand_symtabs_matching_file_matcher
+  (dwarf2_per_objfile *per_objfile,
+   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher)
+{
+  if (file_matcher == NULL)
+    return;
+
+  htab_up visited_found (htab_create_alloc (10, htab_hash_pointer,
+					    htab_eq_pointer,
+					    NULL, xcalloc, xfree));
+  htab_up visited_not_found (htab_create_alloc (10, htab_hash_pointer,
+						htab_eq_pointer,
+						NULL, xcalloc, xfree));
+
+  /* The rule is CUs specify all the files, including those used by
+     any TU, so there's no need to scan TUs here.  */
+
+  for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
+    {
+      QUIT;
+
+      if (per_cu->is_debug_types)
+	continue;
+      per_cu->v.quick->mark = 0;
+
+      /* We only need to look at symtabs not already expanded.  */
+      if (per_objfile->symtab_set_p (per_cu.get ()))
+	continue;
+
+      quick_file_names *file_data = dw2_get_file_names (per_cu.get (),
+							per_objfile);
+      if (file_data == NULL)
+	continue;
+
+      if (htab_find (visited_not_found.get (), file_data) != NULL)
+	continue;
+      else if (htab_find (visited_found.get (), file_data) != NULL)
+	{
+	  per_cu->v.quick->mark = 1;
+	  continue;
+	}
+
+      for (int j = 0; j < file_data->num_file_names; ++j)
+	{
+	  const char *this_real_name;
+
+	  if (file_matcher (file_data->file_names[j], false))
+	    {
+	      per_cu->v.quick->mark = 1;
+	      break;
+	    }
+
+	  /* Before we invoke realpath, which can get expensive when many
+	     files are involved, do a quick comparison of the basenames.  */
+	  if (!basenames_may_differ
+	      && !file_matcher (lbasename (file_data->file_names[j]),
+				true))
+	    continue;
+
+	  this_real_name = dw2_get_real_path (per_objfile, file_data, j);
+	  if (file_matcher (this_real_name, false))
+	    {
+	      per_cu->v.quick->mark = 1;
+	      break;
+	    }
+	}
+
+      void **slot = htab_find_slot (per_cu->v.quick->mark
+				    ? visited_found.get ()
+				    : visited_not_found.get (),
+				    file_data, INSERT);
+      *slot = file_data;
+    }
+}
+
+bool
+dwarf2_gdb_index::expand_symtabs_matching
+    (struct objfile *objfile,
+     gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+     const lookup_name_info *lookup_name,
+     gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+     gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+     block_search_flags search_flags,
+     domain_enum domain,
+     enum search_domain kind)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  /* index_table is NULL if OBJF_READNOW.  */
+  if (!per_objfile->per_bfd->index_table)
+    return true;
+
+  dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
+
+  if (symbol_matcher == NULL && lookup_name == NULL)
+    {
+      for (dwarf2_per_cu_data *per_cu
+	     : all_comp_units_range (per_objfile->per_bfd))
+	{
+	  QUIT;
+
+	  if (!dw2_expand_symtabs_matching_one (per_cu, per_objfile,
+						file_matcher,
+						expansion_notify))
+	    return false;
+	}
+      return true;
+    }
+
+  mapped_index &index = *per_objfile->per_bfd->index_table;
+
+  bool result
+    = dw2_expand_symtabs_matching_symbol (index, *lookup_name,
+					  symbol_matcher,
+					  [&] (offset_type idx)
+    {
+      if (!dw2_expand_marked_cus (per_objfile, idx, file_matcher,
+				  expansion_notify, search_flags, kind))
+	return false;
+      return true;
+    }, per_objfile);
+
+  return result;
+}
+
+/* A helper for dw2_find_pc_sect_compunit_symtab which finds the most specific
+   symtab.  */
+
+static struct compunit_symtab *
+recursively_find_pc_sect_compunit_symtab (struct compunit_symtab *cust,
+					  CORE_ADDR pc)
+{
+  int i;
+
+  if (COMPUNIT_BLOCKVECTOR (cust) != NULL
+      && blockvector_contains_pc (COMPUNIT_BLOCKVECTOR (cust), pc))
+    return cust;
+
+  if (cust->includes == NULL)
+    return NULL;
+
+  for (i = 0; cust->includes[i]; ++i)
+    {
+      struct compunit_symtab *s = cust->includes[i];
+
+      s = recursively_find_pc_sect_compunit_symtab (s, pc);
+      if (s != NULL)
+	return s;
+    }
+
+  return NULL;
+}
+
+struct compunit_symtab *
+dwarf2_base_index_functions::find_pc_sect_compunit_symtab
+     (struct objfile *objfile,
+      struct bound_minimal_symbol msymbol,
+      CORE_ADDR pc,
+      struct obj_section *section,
+      int warn_if_readin)
+{
+  struct dwarf2_per_cu_data *data;
+  struct compunit_symtab *result;
+
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  if (per_objfile->per_bfd->index_addrmap == nullptr)
+    return NULL;
+
+  CORE_ADDR baseaddr = objfile->text_section_offset ();
+  data = ((struct dwarf2_per_cu_data *)
+	  addrmap_find (per_objfile->per_bfd->index_addrmap,
+			pc - baseaddr));
+  if (!data)
+    return NULL;
+
+  if (warn_if_readin && per_objfile->symtab_set_p (data))
+    warning (_("(Internal error: pc %s in read in CU, but not in symtab.)"),
+	     paddress (objfile->arch (), pc));
+
+  result = recursively_find_pc_sect_compunit_symtab
+    (dw2_instantiate_symtab (data, per_objfile, false), pc);
+
+  gdb_assert (result != NULL);
+  return result;
+}
+
+void
+dwarf2_base_index_functions::map_symbol_filenames
+     (struct objfile *objfile,
+      gdb::function_view<symbol_filename_ftype> fun,
+      bool need_fullname)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  /* Use caches to ensure we only call FUN once for each filename.  */
+  filename_seen_cache filenames_cache;
+  std::unordered_set<quick_file_names *> qfn_cache;
+
+  /* The rule is CUs specify all the files, including those used by any TU,
+     so there's no need to scan TUs here.  We can ignore file names coming
+     from already-expanded CUs.  It is possible that an expanded CU might
+     reuse the file names data from a currently unexpanded CU, in this
+     case we don't want to report the files from the unexpanded CU.  */
+
+  for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
+    {
+      if (per_objfile->symtab_set_p (per_cu.get ()))
+	{
+	  if (per_cu->v.quick->file_names != nullptr)
+	    qfn_cache.insert (per_cu->v.quick->file_names);
+	}
+    }
+
+  for (dwarf2_per_cu_data *per_cu
+	 : all_comp_units_range (per_objfile->per_bfd))
+    {
+      /* We only need to look at symtabs not already expanded.  */
+      if (per_cu->is_debug_types || per_objfile->symtab_set_p (per_cu))
+	continue;
+
+      quick_file_names *file_data = dw2_get_file_names (per_cu, per_objfile);
+      if (file_data == nullptr
+	  || qfn_cache.find (file_data) != qfn_cache.end ())
+	continue;
+
+      for (int j = 0; j < file_data->num_file_names; ++j)
+	{
+	  const char *filename = file_data->file_names[j];
+	  filenames_cache.seen (filename);
+	}
+    }
+
+  filenames_cache.traverse ([&] (const char *filename)
+    {
+      gdb::unique_xmalloc_ptr<char> this_real_name;
+
+      if (need_fullname)
+	this_real_name = gdb_realpath (filename);
+      fun (filename, this_real_name.get ());
+    });
+}
+
+bool
+dwarf2_base_index_functions::has_symbols (struct objfile *objfile)
+{
+  return true;
+}
+
+/* See quick_symbol_functions::has_unexpanded_symtabs in quick-symbol.h.  */
+
+bool
+dwarf2_base_index_functions::has_unexpanded_symtabs (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
+    {
+      /* Is this already expanded?  */
+      if (per_objfile->symtab_set_p (per_cu.get ()))
+	continue;
+
+      /* It has not yet been expanded.  */
+      return true;
+    }
+
+  return false;
+}
+
+/* DWARF-5 debug_names reader.  */
+
+/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension.  */
+static const gdb_byte dwarf5_augmentation[] = { 'G', 'D', 'B', 0 };
+
+/* A helper function that reads the .debug_names section in SECTION
+   and fills in MAP.  FILENAME is the name of the file containing the
+   section; it is used for error reporting.
+
+   Returns true if all went well, false otherwise.  */
+
+static bool
+read_debug_names_from_section (struct objfile *objfile,
+			       const char *filename,
+			       struct dwarf2_section_info *section,
+			       mapped_debug_names &map)
+{
+  if (section->empty ())
+    return false;
+
+  /* Older elfutils strip versions could keep the section in the main
+     executable while splitting it for the separate debug info file.  */
+  if ((section->get_flags () & SEC_HAS_CONTENTS) == 0)
+    return false;
+
+  section->read (objfile);
+
+  map.dwarf5_byte_order = gdbarch_byte_order (objfile->arch ());
+
+  const gdb_byte *addr = section->buffer;
+
+  bfd *const abfd = section->get_bfd_owner ();
+
+  unsigned int bytes_read;
+  LONGEST length = read_initial_length (abfd, addr, &bytes_read);
+  addr += bytes_read;
+
+  map.dwarf5_is_dwarf64 = bytes_read != 4;
+  map.offset_size = map.dwarf5_is_dwarf64 ? 8 : 4;
+  if (bytes_read + length != section->size)
+    {
+      /* There may be multiple per-CU indices.  */
+      warning (_("Section .debug_names in %s length %s does not match "
+		 "section length %s, ignoring .debug_names."),
+	       filename, plongest (bytes_read + length),
+	       pulongest (section->size));
+      return false;
+    }
+
+  /* The version number.  */
+  uint16_t version = read_2_bytes (abfd, addr);
+  addr += 2;
+  if (version != 5)
+    {
+      warning (_("Section .debug_names in %s has unsupported version %d, "
+		 "ignoring .debug_names."),
+	       filename, version);
+      return false;
+    }
+
+  /* Padding.  */
+  uint16_t padding = read_2_bytes (abfd, addr);
+  addr += 2;
+  if (padding != 0)
+    {
+      warning (_("Section .debug_names in %s has unsupported padding %d, "
+		 "ignoring .debug_names."),
+	       filename, padding);
+      return false;
+    }
+
+  /* comp_unit_count - The number of CUs in the CU list.  */
+  map.cu_count = read_4_bytes (abfd, addr);
+  addr += 4;
+
+  /* local_type_unit_count - The number of TUs in the local TU
+     list.  */
+  map.tu_count = read_4_bytes (abfd, addr);
+  addr += 4;
+
+  /* foreign_type_unit_count - The number of TUs in the foreign TU
+     list.  */
+  uint32_t foreign_tu_count = read_4_bytes (abfd, addr);
+  addr += 4;
+  if (foreign_tu_count != 0)
+    {
+      warning (_("Section .debug_names in %s has unsupported %lu foreign TUs, "
+		 "ignoring .debug_names."),
+	       filename, static_cast<unsigned long> (foreign_tu_count));
+      return false;
+    }
+
+  /* bucket_count - The number of hash buckets in the hash lookup
+     table.  */
+  map.bucket_count = read_4_bytes (abfd, addr);
+  addr += 4;
+
+  /* name_count - The number of unique names in the index.  */
+  map.name_count = read_4_bytes (abfd, addr);
+  addr += 4;
+
+  /* abbrev_table_size - The size in bytes of the abbreviations
+     table.  */
+  uint32_t abbrev_table_size = read_4_bytes (abfd, addr);
+  addr += 4;
+
+  /* augmentation_string_size - The size in bytes of the augmentation
+     string.  This value is rounded up to a multiple of 4.  */
+  uint32_t augmentation_string_size = read_4_bytes (abfd, addr);
+  addr += 4;
+  map.augmentation_is_gdb = ((augmentation_string_size
+			      == sizeof (dwarf5_augmentation))
+			     && memcmp (addr, dwarf5_augmentation,
+					sizeof (dwarf5_augmentation)) == 0);
+  augmentation_string_size += (-augmentation_string_size) & 3;
+  addr += augmentation_string_size;
+
+  /* List of CUs */
+  map.cu_table_reordered = addr;
+  addr += map.cu_count * map.offset_size;
+
+  /* List of Local TUs */
+  map.tu_table_reordered = addr;
+  addr += map.tu_count * map.offset_size;
+
+  /* Hash Lookup Table */
+  map.bucket_table_reordered = reinterpret_cast<const uint32_t *> (addr);
+  addr += map.bucket_count * 4;
+  map.hash_table_reordered = reinterpret_cast<const uint32_t *> (addr);
+  addr += map.name_count * 4;
+
+  /* Name Table */
+  map.name_table_string_offs_reordered = addr;
+  addr += map.name_count * map.offset_size;
+  map.name_table_entry_offs_reordered = addr;
+  addr += map.name_count * map.offset_size;
+
+  const gdb_byte *abbrev_table_start = addr;
+  for (;;)
+    {
+      const ULONGEST index_num = read_unsigned_leb128 (abfd, addr, &bytes_read);
+      addr += bytes_read;
+      if (index_num == 0)
+	break;
+
+      const auto insertpair
+	= map.abbrev_map.emplace (index_num, mapped_debug_names::index_val ());
+      if (!insertpair.second)
+	{
+	  warning (_("Section .debug_names in %s has duplicate index %s, "
+		     "ignoring .debug_names."),
+		   filename, pulongest (index_num));
+	  return false;
+	}
+      mapped_debug_names::index_val &indexval = insertpair.first->second;
+      indexval.dwarf_tag = read_unsigned_leb128 (abfd, addr, &bytes_read);
+      addr += bytes_read;
+
+      for (;;)
+	{
+	  mapped_debug_names::index_val::attr attr;
+	  attr.dw_idx = read_unsigned_leb128 (abfd, addr, &bytes_read);
+	  addr += bytes_read;
+	  attr.form = read_unsigned_leb128 (abfd, addr, &bytes_read);
+	  addr += bytes_read;
+	  if (attr.form == DW_FORM_implicit_const)
+	    {
+	      attr.implicit_const = read_signed_leb128 (abfd, addr,
+							&bytes_read);
+	      addr += bytes_read;
+	    }
+	  if (attr.dw_idx == 0 && attr.form == 0)
+	    break;
+	  indexval.attr_vec.push_back (std::move (attr));
+	}
+    }
+  if (addr != abbrev_table_start + abbrev_table_size)
+    {
+      warning (_("Section .debug_names in %s has abbreviation_table "
+		 "of size %s vs. written as %u, ignoring .debug_names."),
+	       filename, plongest (addr - abbrev_table_start),
+	       abbrev_table_size);
+      return false;
+    }
+  map.entry_pool = addr;
+
+  return true;
+}
+
+/* A helper for create_cus_from_debug_names that handles the MAP's CU
+   list.  */
+
+static void
+create_cus_from_debug_names_list (dwarf2_per_bfd *per_bfd,
+				  const mapped_debug_names &map,
+				  dwarf2_section_info &section,
+				  bool is_dwz)
+{
+  if (!map.augmentation_is_gdb)
+    {
+      for (uint32_t i = 0; i < map.cu_count; ++i)
+	{
+	  sect_offset sect_off
+	    = (sect_offset) (extract_unsigned_integer
+			     (map.cu_table_reordered + i * map.offset_size,
+			      map.offset_size,
+			      map.dwarf5_byte_order));
+	  /* We don't know the length of the CU, because the CU list in a
+	     .debug_names index can be incomplete, so we can't use the start
+	     of the next CU as end of this CU.  We create the CUs here with
+	     length 0, and in cutu_reader::cutu_reader we'll fill in the
+	     actual length.  */
+	  dwarf2_per_cu_data_up per_cu
+	    = create_cu_from_index_list (per_bfd, &section, is_dwz,
+					 sect_off, 0);
+	  per_bfd->all_comp_units.push_back (std::move (per_cu));
+	}
+      return;
+    }
+
+  sect_offset sect_off_prev;
+  for (uint32_t i = 0; i <= map.cu_count; ++i)
+    {
+      sect_offset sect_off_next;
+      if (i < map.cu_count)
+	{
+	  sect_off_next
+	    = (sect_offset) (extract_unsigned_integer
+			     (map.cu_table_reordered + i * map.offset_size,
+			      map.offset_size,
+			      map.dwarf5_byte_order));
+	}
+      else
+	sect_off_next = (sect_offset) section.size;
+      if (i >= 1)
+	{
+	  const ULONGEST length = sect_off_next - sect_off_prev;
+	  dwarf2_per_cu_data_up per_cu
+	    = create_cu_from_index_list (per_bfd, &section, is_dwz,
+					 sect_off_prev, length);
+	  per_bfd->all_comp_units.push_back (std::move (per_cu));
+	}
+      sect_off_prev = sect_off_next;
+    }
+}
+
+/* Read the CU list from the mapped index, and use it to create all
+   the CU objects for this dwarf2_per_objfile.  */
+
+static void
+create_cus_from_debug_names (dwarf2_per_bfd *per_bfd,
+			     const mapped_debug_names &map,
+			     const mapped_debug_names &dwz_map)
+{
+  gdb_assert (per_bfd->all_comp_units.empty ());
+  per_bfd->all_comp_units.reserve (map.cu_count + dwz_map.cu_count);
+
+  create_cus_from_debug_names_list (per_bfd, map, per_bfd->info,
+				    false /* is_dwz */);
+
+  if (dwz_map.cu_count == 0)
+    return;
+
+  dwz_file *dwz = dwarf2_get_dwz_file (per_bfd);
+  create_cus_from_debug_names_list (per_bfd, dwz_map, dwz->info,
+				    true /* is_dwz */);
+}
+
+/* Read .debug_names.  If everything went ok, initialize the "quick"
+   elements of all the CUs and return true.  Otherwise, return false.  */
+
+static bool
+dwarf2_read_debug_names (dwarf2_per_objfile *per_objfile)
+{
+  std::unique_ptr<mapped_debug_names> map (new mapped_debug_names);
+  mapped_debug_names dwz_map;
+  struct objfile *objfile = per_objfile->objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  if (!read_debug_names_from_section (objfile, objfile_name (objfile),
+				      &per_bfd->debug_names, *map))
+    return false;
+
+  /* Don't use the index if it's empty.  */
+  if (map->name_count == 0)
+    return false;
+
+  /* If there is a .dwz file, read it so we can get its CU list as
+     well.  */
+  dwz_file *dwz = dwarf2_get_dwz_file (per_bfd);
+  if (dwz != NULL)
+    {
+      if (!read_debug_names_from_section (objfile,
+					  bfd_get_filename (dwz->dwz_bfd.get ()),
+					  &dwz->debug_names, dwz_map))
+	{
+	  warning (_("could not read '.debug_names' section from %s; skipping"),
+		   bfd_get_filename (dwz->dwz_bfd.get ()));
+	  return false;
+	}
+    }
+
+  create_cus_from_debug_names (per_bfd, *map, dwz_map);
+
+  if (map->tu_count != 0)
+    {
+      /* We can only handle a single .debug_types when we have an
+	 index.  */
+      if (per_bfd->types.size () != 1)
+	return false;
+
+      dwarf2_section_info *section = &per_bfd->types[0];
+
+      create_signatured_type_table_from_debug_names
+	(per_objfile, *map, section, &per_bfd->abbrev);
+    }
+
+  create_addrmap_from_aranges (per_objfile, &per_bfd->debug_aranges);
+
+  per_bfd->debug_names_table = std::move (map);
+  per_bfd->using_index = 1;
+  per_bfd->quick_file_names_table =
+    create_quick_file_names_table (per_bfd->all_comp_units.size ());
+
+  return true;
+}
+
+/* Type used to manage iterating over all CUs looking for a symbol for
+   .debug_names.  */
+
+class dw2_debug_names_iterator
+{
+public:
+  dw2_debug_names_iterator (const mapped_debug_names &map,
+			    block_search_flags block_index,
+			    domain_enum domain,
+			    const char *name, dwarf2_per_objfile *per_objfile)
+    : m_map (map), m_block_index (block_index), m_domain (domain),
+      m_addr (find_vec_in_debug_names (map, name, per_objfile)),
+      m_per_objfile (per_objfile)
+  {}
+
+  dw2_debug_names_iterator (const mapped_debug_names &map,
+			    search_domain search, uint32_t namei,
+			    dwarf2_per_objfile *per_objfile,
+			    domain_enum domain = UNDEF_DOMAIN)
+    : m_map (map),
+      m_domain (domain),
+      m_search (search),
+      m_addr (find_vec_in_debug_names (map, namei, per_objfile)),
+      m_per_objfile (per_objfile)
+  {}
+
+  dw2_debug_names_iterator (const mapped_debug_names &map,
+			    block_search_flags block_index, domain_enum domain,
+			    uint32_t namei, dwarf2_per_objfile *per_objfile)
+    : m_map (map), m_block_index (block_index), m_domain (domain),
+      m_addr (find_vec_in_debug_names (map, namei, per_objfile)),
+      m_per_objfile (per_objfile)
+  {}
+
+  /* Return the next matching CU or NULL if there are no more.  */
+  dwarf2_per_cu_data *next ();
+
+private:
+  static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map,
+						  const char *name,
+						  dwarf2_per_objfile *per_objfile);
+  static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map,
+						  uint32_t namei,
+						  dwarf2_per_objfile *per_objfile);
+
+  /* The internalized form of .debug_names.  */
+  const mapped_debug_names &m_map;
+
+  /* Restrict the search to these blocks.  */
+  block_search_flags m_block_index = (SEARCH_GLOBAL_BLOCK
+				      | SEARCH_STATIC_BLOCK);
+
+  /* The kind of symbol we're looking for.  */
+  const domain_enum m_domain = UNDEF_DOMAIN;
+  const search_domain m_search = ALL_DOMAIN;
+
+  /* The list of CUs from the index entry of the symbol, or NULL if
+     not found.  */
+  const gdb_byte *m_addr;
+
+  dwarf2_per_objfile *m_per_objfile;
+};
+
+const char *
+mapped_debug_names::namei_to_name
+  (uint32_t namei, dwarf2_per_objfile *per_objfile) const
+{
+  const ULONGEST namei_string_offs
+    = extract_unsigned_integer ((name_table_string_offs_reordered
+				 + namei * offset_size),
+				offset_size,
+				dwarf5_byte_order);
+  return read_indirect_string_at_offset (per_objfile, namei_string_offs);
+}
+
+/* Find a slot in .debug_names for the object named NAME.  If NAME is
+   found, return pointer to its pool data.  If NAME cannot be found,
+   return NULL.  */
+
+const gdb_byte *
+dw2_debug_names_iterator::find_vec_in_debug_names
+  (const mapped_debug_names &map, const char *name,
+   dwarf2_per_objfile *per_objfile)
+{
+  int (*cmp) (const char *, const char *);
+
+  gdb::unique_xmalloc_ptr<char> without_params;
+  if (current_language->la_language == language_cplus
+      || current_language->la_language == language_fortran
+      || current_language->la_language == language_d)
+    {
+      /* NAME is already canonical.  Drop any qualifiers as
+	 .debug_names does not contain any.  */
+
+      if (strchr (name, '(') != NULL)
+	{
+	  without_params = cp_remove_params (name);
+	  if (without_params != NULL)
+	    name = without_params.get ();
+	}
+    }
+
+  cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp);
+
+  const uint32_t full_hash = dwarf5_djb_hash (name);
+  uint32_t namei
+    = extract_unsigned_integer (reinterpret_cast<const gdb_byte *>
+				(map.bucket_table_reordered
+				 + (full_hash % map.bucket_count)), 4,
+				map.dwarf5_byte_order);
+  if (namei == 0)
+    return NULL;
+  --namei;
+  if (namei >= map.name_count)
+    {
+      complaint (_("Wrong .debug_names with name index %u but name_count=%u "
+		   "[in module %s]"),
+		 namei, map.name_count,
+		 objfile_name (per_objfile->objfile));
+      return NULL;
+    }
+
+  for (;;)
+    {
+      const uint32_t namei_full_hash
+	= extract_unsigned_integer (reinterpret_cast<const gdb_byte *>
+				    (map.hash_table_reordered + namei), 4,
+				    map.dwarf5_byte_order);
+      if (full_hash % map.bucket_count != namei_full_hash % map.bucket_count)
+	return NULL;
+
+      if (full_hash == namei_full_hash)
+	{
+	  const char *const namei_string = map.namei_to_name (namei, per_objfile);
+
+#if 0 /* An expensive sanity check.  */
+	  if (namei_full_hash != dwarf5_djb_hash (namei_string))
+	    {
+	      complaint (_("Wrong .debug_names hash for string at index %u "
+			   "[in module %s]"),
+			 namei, objfile_name (dwarf2_per_objfile->objfile));
+	      return NULL;
+	    }
+#endif
+
+	  if (cmp (namei_string, name) == 0)
+	    {
+	      const ULONGEST namei_entry_offs
+		= extract_unsigned_integer ((map.name_table_entry_offs_reordered
+					     + namei * map.offset_size),
+					    map.offset_size, map.dwarf5_byte_order);
+	      return map.entry_pool + namei_entry_offs;
+	    }
+	}
+
+      ++namei;
+      if (namei >= map.name_count)
+	return NULL;
+    }
+}
+
+const gdb_byte *
+dw2_debug_names_iterator::find_vec_in_debug_names
+  (const mapped_debug_names &map, uint32_t namei, dwarf2_per_objfile *per_objfile)
+{
+  if (namei >= map.name_count)
+    {
+      complaint (_("Wrong .debug_names with name index %u but name_count=%u "
+		   "[in module %s]"),
+		 namei, map.name_count,
+		 objfile_name (per_objfile->objfile));
+      return NULL;
+    }
+
+  const ULONGEST namei_entry_offs
+    = extract_unsigned_integer ((map.name_table_entry_offs_reordered
+				 + namei * map.offset_size),
+				map.offset_size, map.dwarf5_byte_order);
+  return map.entry_pool + namei_entry_offs;
+}
+
+/* See dw2_debug_names_iterator.  */
+
+dwarf2_per_cu_data *
+dw2_debug_names_iterator::next ()
+{
+  if (m_addr == NULL)
+    return NULL;
+
+  dwarf2_per_bfd *per_bfd = m_per_objfile->per_bfd;
+  struct objfile *objfile = m_per_objfile->objfile;
+  bfd *const abfd = objfile->obfd;
+
+ again:
+
+  unsigned int bytes_read;
+  const ULONGEST abbrev = read_unsigned_leb128 (abfd, m_addr, &bytes_read);
+  m_addr += bytes_read;
+  if (abbrev == 0)
+    return NULL;
+
+  const auto indexval_it = m_map.abbrev_map.find (abbrev);
+  if (indexval_it == m_map.abbrev_map.cend ())
+    {
+      complaint (_("Wrong .debug_names undefined abbrev code %s "
+		   "[in module %s]"),
+		 pulongest (abbrev), objfile_name (objfile));
+      return NULL;
+    }
+  const mapped_debug_names::index_val &indexval = indexval_it->second;
+  enum class symbol_linkage {
+    unknown,
+    static_,
+    extern_,
+  } symbol_linkage_ = symbol_linkage::unknown;
+  dwarf2_per_cu_data *per_cu = NULL;
+  for (const mapped_debug_names::index_val::attr &attr : indexval.attr_vec)
+    {
+      ULONGEST ull;
+      switch (attr.form)
+	{
+	case DW_FORM_implicit_const:
+	  ull = attr.implicit_const;
+	  break;
+	case DW_FORM_flag_present:
+	  ull = 1;
+	  break;
+	case DW_FORM_udata:
+	  ull = read_unsigned_leb128 (abfd, m_addr, &bytes_read);
+	  m_addr += bytes_read;
+	  break;
+	case DW_FORM_ref4:
+	  ull = read_4_bytes (abfd, m_addr);
+	  m_addr += 4;
+	  break;
+	case DW_FORM_ref8:
+	  ull = read_8_bytes (abfd, m_addr);
+	  m_addr += 8;
+	  break;
+	case DW_FORM_ref_sig8:
+	  ull = read_8_bytes (abfd, m_addr);
+	  m_addr += 8;
+	  break;
+	default:
+	  complaint (_("Unsupported .debug_names form %s [in module %s]"),
+		     dwarf_form_name (attr.form),
+		     objfile_name (objfile));
+	  return NULL;
+	}
+      switch (attr.dw_idx)
+	{
+	case DW_IDX_compile_unit:
+	  /* Don't crash on bad data.  */
+	  if (ull >= per_bfd->all_comp_units.size ())
+	    {
+	      complaint (_(".debug_names entry has bad CU index %s"
+			   " [in module %s]"),
+			 pulongest (ull),
+			 objfile_name (objfile));
+	      continue;
+	    }
+	  per_cu = per_bfd->get_cu (ull);
+	  break;
+	case DW_IDX_type_unit:
+	  /* Don't crash on bad data.  */
+	  if (ull >= per_bfd->tu_stats.nr_tus)
+	    {
+	      complaint (_(".debug_names entry has bad TU index %s"
+			   " [in module %s]"),
+			 pulongest (ull),
+			 objfile_name (objfile));
+	      continue;
+	    }
+	  per_cu = per_bfd->get_cu (ull + per_bfd->tu_stats.nr_tus);
+	  break;
+	case DW_IDX_die_offset:
+	  /* In a per-CU index (as opposed to a per-module index), index
+	     entries without CU attribute implicitly refer to the single CU.  */
+	  if (per_cu == NULL)
+	    per_cu = per_bfd->get_cu (0);
+	  break;
+	case DW_IDX_GNU_internal:
+	  if (!m_map.augmentation_is_gdb)
+	    break;
+	  symbol_linkage_ = symbol_linkage::static_;
+	  break;
+	case DW_IDX_GNU_external:
+	  if (!m_map.augmentation_is_gdb)
+	    break;
+	  symbol_linkage_ = symbol_linkage::extern_;
+	  break;
+	}
+    }
+
+  /* Skip if already read in.  */
+  if (m_per_objfile->symtab_set_p (per_cu))
+    goto again;
+
+  /* Check static vs global.  */
+  if (symbol_linkage_ != symbol_linkage::unknown)
+    {
+      if (symbol_linkage_ == symbol_linkage::static_)
+	{
+	  if ((m_block_index & SEARCH_STATIC_BLOCK) == 0)
+	    goto again;
+	}
+      else
+	{
+	  if ((m_block_index & SEARCH_GLOBAL_BLOCK) == 0)
+	    goto again;
+	}
+    }
+
+  /* Match dw2_symtab_iter_next, symbol_kind
+     and debug_names::psymbol_tag.  */
+  switch (m_domain)
+    {
+    case VAR_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_variable:
+	case DW_TAG_subprogram:
+	/* Some types are also in VAR_DOMAIN.  */
+	case DW_TAG_typedef:
+	case DW_TAG_structure_type:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    case STRUCT_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_typedef:
+	case DW_TAG_structure_type:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    case LABEL_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case 0:
+	case DW_TAG_variable:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    case MODULE_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_module:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    default:
+      break;
+    }
+
+  /* Match dw2_expand_symtabs_matching, symbol_kind and
+     debug_names::psymbol_tag.  */
+  switch (m_search)
+    {
+    case VARIABLES_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_variable:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    case FUNCTIONS_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_subprogram:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    case TYPES_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_typedef:
+	case DW_TAG_structure_type:
+	  break;
+	default:
+	  goto again;
+	}
+      break;
+    case MODULES_DOMAIN:
+      switch (indexval.dwarf_tag)
+	{
+	case DW_TAG_module:
+	  break;
+	default:
+	  goto again;
+	}
+    default:
+      break;
+    }
+
+  return per_cu;
+}
+
+/* This dumps minimal information about .debug_names.  It is called
+   via "mt print objfiles".  The gdb.dwarf2/gdb-index.exp testcase
+   uses this to verify that .debug_names has been loaded.  */
+
+void
+dwarf2_debug_names_index::dump (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  gdb_assert (per_objfile->per_bfd->using_index);
+  printf_filtered (".debug_names:");
+  if (per_objfile->per_bfd->debug_names_table)
+    printf_filtered (" exists\n");
+  else
+    printf_filtered (" faked for \"readnow\"\n");
+  printf_filtered ("\n");
+}
+
+void
+dwarf2_debug_names_index::expand_matching_symbols
+  (struct objfile *objfile,
+   const lookup_name_info &name, domain_enum domain,
+   int global,
+   symbol_compare_ftype *ordered_compare)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  /* debug_names_table is NULL if OBJF_READNOW.  */
+  if (!per_objfile->per_bfd->debug_names_table)
+    return;
+
+  mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table;
+  const block_search_flags block_flags
+    = global ? SEARCH_GLOBAL_BLOCK : SEARCH_STATIC_BLOCK;
+
+  const char *match_name = name.ada ().lookup_name ().c_str ();
+  auto matcher = [&] (const char *symname)
+    {
+      if (ordered_compare == nullptr)
+	return true;
+      return ordered_compare (symname, match_name) == 0;
+    };
+
+  dw2_expand_symtabs_matching_symbol (map, name, matcher,
+				      [&] (offset_type namei)
+    {
+      /* The name was matched, now expand corresponding CUs that were
+	 marked.  */
+      dw2_debug_names_iterator iter (map, block_flags, domain, namei,
+				     per_objfile);
+
+      struct dwarf2_per_cu_data *per_cu;
+      while ((per_cu = iter.next ()) != NULL)
+	dw2_expand_symtabs_matching_one (per_cu, per_objfile, nullptr,
+					 nullptr);
+      return true;
+    }, per_objfile);
+}
+
+bool
+dwarf2_debug_names_index::expand_symtabs_matching
+  (struct objfile *objfile,
+   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+   const lookup_name_info *lookup_name,
+   gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+   block_search_flags search_flags,
+   domain_enum domain,
+   enum search_domain kind)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  /* debug_names_table is NULL if OBJF_READNOW.  */
+  if (!per_objfile->per_bfd->debug_names_table)
+    return true;
+
+  dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
+
+  if (symbol_matcher == NULL && lookup_name == NULL)
+    {
+      for (dwarf2_per_cu_data *per_cu
+	     : all_comp_units_range (per_objfile->per_bfd))
+	{
+	  QUIT;
+
+	  if (!dw2_expand_symtabs_matching_one (per_cu, per_objfile,
+						file_matcher,
+						expansion_notify))
+	    return false;
+	}
+      return true;
+    }
+
+  mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table;
+
+  bool result
+    = dw2_expand_symtabs_matching_symbol (map, *lookup_name,
+					  symbol_matcher,
+					  [&] (offset_type namei)
+    {
+      /* The name was matched, now expand corresponding CUs that were
+	 marked.  */
+      dw2_debug_names_iterator iter (map, kind, namei, per_objfile, domain);
+
+      struct dwarf2_per_cu_data *per_cu;
+      while ((per_cu = iter.next ()) != NULL)
+	if (!dw2_expand_symtabs_matching_one (per_cu, per_objfile,
+					      file_matcher,
+					      expansion_notify))
+	  return false;
+      return true;
+    }, per_objfile);
+
+  return result;
+}
+
+/* Get the content of the .gdb_index section of OBJ.  SECTION_OWNER should point
+   to either a dwarf2_per_bfd or dwz_file object.  */
+
+template <typename T>
+static gdb::array_view<const gdb_byte>
+get_gdb_index_contents_from_section (objfile *obj, T *section_owner)
+{
+  dwarf2_section_info *section = &section_owner->gdb_index;
+
+  if (section->empty ())
+    return {};
+
+  /* Older elfutils strip versions could keep the section in the main
+     executable while splitting it for the separate debug info file.  */
+  if ((section->get_flags () & SEC_HAS_CONTENTS) == 0)
+    return {};
+
+  section->read (obj);
+
+  /* dwarf2_section_info::size is a bfd_size_type, while
+     gdb::array_view works with size_t.  On 32-bit hosts, with
+     --enable-64-bit-bfd, bfd_size_type is a 64-bit type, while size_t
+     is 32-bit.  So we need an explicit narrowing conversion here.
+     This is fine, because it's impossible to allocate or mmap an
+     array/buffer larger than what size_t can represent.  */
+  return gdb::make_array_view (section->buffer, section->size);
+}
+
+/* Lookup the index cache for the contents of the index associated to
+   DWARF2_OBJ.  */
+
+static gdb::array_view<const gdb_byte>
+get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd)
+{
+  const bfd_build_id *build_id = build_id_bfd_get (obj->obfd);
+  if (build_id == nullptr)
+    return {};
+
+  return global_index_cache.lookup_gdb_index (build_id,
+					      &dwarf2_per_bfd->index_cache_res);
+}
+
+/* Same as the above, but for DWZ.  */
+
+static gdb::array_view<const gdb_byte>
+get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz)
+{
+  const bfd_build_id *build_id = build_id_bfd_get (dwz->dwz_bfd.get ());
+  if (build_id == nullptr)
+    return {};
+
+  return global_index_cache.lookup_gdb_index (build_id, &dwz->index_cache_res);
+}
+
+/* See dwarf2/public.h.  */
+
+void
+dwarf2_initialize_objfile (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  dwarf_read_debug_printf ("called");
+
+  /* If we're about to read full symbols, don't bother with the
+     indices.  In this case we also don't care if some other debug
+     format is making psymtabs, because they are all about to be
+     expanded anyway.  */
+  if ((objfile->flags & OBJF_READNOW))
+    {
+      dwarf_read_debug_printf ("readnow requested");
+
+      /* When using READNOW, the using_index flag (set below) indicates that
+	 PER_BFD was already initialized, when we loaded some other objfile.  */
+      if (per_bfd->using_index)
+	{
+	  dwarf_read_debug_printf ("using_index already set");
+	  objfile->qf.push_front (make_dwarf_gdb_index ());
+	  return;
+	}
+
+      per_bfd->using_index = 1;
+      create_all_comp_units (per_objfile);
+      per_bfd->quick_file_names_table
+	= create_quick_file_names_table (per_bfd->all_comp_units.size ());
+
+      for (int i = 0; i < per_bfd->all_comp_units.size (); ++i)
+	{
+	  dwarf2_per_cu_data *per_cu = per_bfd->get_cu (i);
+
+	  per_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack,
+					    struct dwarf2_per_cu_quick_data);
+	}
+
+      /* Arrange for gdb to see the "quick" functions.  However, these
+	 functions will be no-ops because we will have expanded all
+	 symtabs.  */
+      objfile->qf.push_front (make_dwarf_gdb_index ());
+      return;
+    }
+
+  /* Was a debug names index already read when we processed an objfile sharing
+     PER_BFD?  */
+  if (per_bfd->debug_names_table != nullptr)
+    {
+      dwarf_read_debug_printf ("re-using shared debug names table");
+      objfile->qf.push_front (make_dwarf_debug_names ());
+      return;
+    }
+
+  /* Was a GDB index already read when we processed an objfile sharing
+     PER_BFD?  */
+  if (per_bfd->index_table != nullptr)
+    {
+      dwarf_read_debug_printf ("re-using shared index table");
+      objfile->qf.push_front (make_dwarf_gdb_index ());
+      return;
+    }
+
+  /* There might already be partial symtabs built for this BFD.  This happens
+     when loading the same binary twice with the index-cache enabled.  If so,
+     don't try to read an index.  The objfile / per_objfile initialization will
+     be completed in dwarf2_build_psymtabs, in the standard partial symtabs
+     code path.  */
+  if (per_bfd->partial_symtabs != nullptr)
+    {
+      dwarf_read_debug_printf ("re-using shared partial symtabs");
+      objfile->qf.push_front (make_lazy_dwarf_reader ());
+      return;
+    }
+
+  if (dwarf2_read_debug_names (per_objfile))
+    {
+      dwarf_read_debug_printf ("found debug names");
+      objfile->qf.push_front (make_dwarf_debug_names ());
+      return;
+    }
+
+  if (dwarf2_read_gdb_index (per_objfile,
+			     get_gdb_index_contents_from_section<struct dwarf2_per_bfd>,
+			     get_gdb_index_contents_from_section<dwz_file>))
+    {
+      dwarf_read_debug_printf ("found gdb index from file");
+      objfile->qf.push_front (make_dwarf_gdb_index ());
+      return;
+    }
+
+  /* ... otherwise, try to find the index in the index cache.  */
+  if (dwarf2_read_gdb_index (per_objfile,
+			     get_gdb_index_contents_from_cache,
+			     get_gdb_index_contents_from_cache_dwz))
+    {
+      dwarf_read_debug_printf ("found gdb index from cache");
+      global_index_cache.hit ();
+      objfile->qf.push_front (make_dwarf_gdb_index ());
+      return;
+    }
+
+  global_index_cache.miss ();
+  objfile->qf.push_front (make_lazy_dwarf_reader ());
+}
+
+
+
+/* Build a partial symbol table.  */
+
+void
+dwarf2_build_psymtabs (struct objfile *objfile, psymbol_functions *psf)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  if (per_bfd->partial_symtabs != nullptr)
+    {
+      /* Partial symbols were already read, so now we can simply
+	 attach them.  */
+      if (psf == nullptr)
+	{
+	  psf = new psymbol_functions (per_bfd->partial_symtabs);
+	  objfile->qf.emplace_front (psf);
+	}
+      else
+	psf->set_partial_symtabs (per_bfd->partial_symtabs);
+      return;
+    }
+
+  if (psf == nullptr)
+    {
+      psf = new psymbol_functions;
+      objfile->qf.emplace_front (psf);
+    }
+  const std::shared_ptr<psymtab_storage> &partial_symtabs
+    = psf->get_partial_symtabs ();
+
+  /* Set the local reference to partial symtabs, so that we don't try
+     to read them again if reading another objfile with the same BFD.
+     If we can't in fact share, this won't make a difference anyway as
+     the dwarf2_per_bfd object won't be shared.  */
+  per_bfd->partial_symtabs = partial_symtabs;
+
+  try
+    {
+      /* This isn't really ideal: all the data we allocate on the
+	 objfile's obstack is still uselessly kept around.  However,
+	 freeing it seems unsafe.  */
+      psymtab_discarder psymtabs (partial_symtabs.get ());
+      dwarf2_build_psymtabs_hard (per_objfile);
+      psymtabs.keep ();
+
+      /* (maybe) store an index in the cache.  */
+      global_index_cache.store (per_objfile);
+    }
+  catch (const gdb_exception_error &except)
+    {
+      exception_print (gdb_stderr, except);
+    }
+}
+
+/* Find the base address of the compilation unit for range lists and
+   location lists.  It will normally be specified by DW_AT_low_pc.
+   In DWARF-3 draft 4, the base address could be overridden by
+   DW_AT_entry_pc.  It's been removed, but GCC still uses this for
+   compilation units with discontinuous ranges.  */
+
+static void
+dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  cu->base_address.reset ();
+
+  attr = dwarf2_attr (die, DW_AT_entry_pc, cu);
+  if (attr != nullptr)
+    cu->base_address = attr->as_address ();
+  else
+    {
+      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+      if (attr != nullptr)
+	cu->base_address = attr->as_address ();
+    }
+}
+
+/* Helper function that returns the proper abbrev section for
+   THIS_CU.  */
+
+static struct dwarf2_section_info *
+get_abbrev_section_for_cu (struct dwarf2_per_cu_data *this_cu)
+{
+  struct dwarf2_section_info *abbrev;
+  dwarf2_per_bfd *per_bfd = this_cu->per_bfd;
+
+  if (this_cu->is_dwz)
+    abbrev = &dwarf2_get_dwz_file (per_bfd, true)->abbrev;
+  else
+    abbrev = &per_bfd->abbrev;
+
+  return abbrev;
+}
+
+/* Fetch the abbreviation table offset from a comp or type unit header.  */
+
+static sect_offset
+read_abbrev_offset (dwarf2_per_objfile *per_objfile,
+		    struct dwarf2_section_info *section,
+		    sect_offset sect_off)
+{
+  bfd *abfd = section->get_bfd_owner ();
+  const gdb_byte *info_ptr;
+  unsigned int initial_length_size, offset_size;
+  uint16_t version;
+
+  section->read (per_objfile->objfile);
+  info_ptr = section->buffer + to_underlying (sect_off);
+  read_initial_length (abfd, info_ptr, &initial_length_size);
+  offset_size = initial_length_size == 4 ? 4 : 8;
+  info_ptr += initial_length_size;
+
+  version = read_2_bytes (abfd, info_ptr);
+  info_ptr += 2;
+  if (version >= 5)
+    {
+      /* Skip unit type and address size.  */
+      info_ptr += 2;
+    }
+
+  return (sect_offset) read_offset (abfd, info_ptr, offset_size);
+}
+
+/* A partial symtab that is used only for include files.  */
+struct dwarf2_include_psymtab : public partial_symtab
+{
+  dwarf2_include_psymtab (const char *filename,
+			  psymtab_storage *partial_symtabs,
+			  objfile_per_bfd_storage *objfile_per_bfd)
+    : partial_symtab (filename, partial_symtabs, objfile_per_bfd)
+  {
+  }
+
+  void read_symtab (struct objfile *objfile) override
+  {
+    /* It's an include file, no symbols to read for it.
+       Everything is in the includer symtab.  */
+
+    /* The expansion of a dwarf2_include_psymtab is just a trigger for
+       expansion of the includer psymtab.  We use the dependencies[0] field to
+       model the includer.  But if we go the regular route of calling
+       expand_psymtab here, and having expand_psymtab call expand_dependencies
+       to expand the includer, we'll only use expand_psymtab on the includer
+       (making it a non-toplevel psymtab), while if we expand the includer via
+       another path, we'll use read_symtab (making it a toplevel psymtab).
+       So, don't pretend a dwarf2_include_psymtab is an actual toplevel
+       psymtab, and trigger read_symtab on the includer here directly.  */
+    includer ()->read_symtab (objfile);
+  }
+
+  void expand_psymtab (struct objfile *objfile) override
+  {
+    /* This is not called by read_symtab, and should not be called by any
+       expand_dependencies.  */
+    gdb_assert (false);
+  }
+
+  bool readin_p (struct objfile *objfile) const override
+  {
+    return includer ()->readin_p (objfile);
+  }
+
+  compunit_symtab *get_compunit_symtab (struct objfile *objfile) const override
+  {
+    return nullptr;
+  }
+
+private:
+  partial_symtab *includer () const
+  {
+    /* An include psymtab has exactly one dependency: the psymtab that
+       includes it.  */
+    gdb_assert (this->number_of_dependencies == 1);
+    return this->dependencies[0];
+  }
+};
+
+/* Allocate a new partial symtab for file named NAME and mark this new
+   partial symtab as being an include of PST.  */
+
+static void
+dwarf2_create_include_psymtab (dwarf2_per_bfd *per_bfd,
+			       const char *name,
+			       dwarf2_psymtab *pst,
+			       psymtab_storage *partial_symtabs,
+			       objfile_per_bfd_storage *objfile_per_bfd)
+{
+  dwarf2_include_psymtab *subpst
+    = new dwarf2_include_psymtab (name, partial_symtabs, objfile_per_bfd);
+
+  if (!IS_ABSOLUTE_PATH (subpst->filename))
+    subpst->dirname = pst->dirname;
+
+  subpst->dependencies = per_bfd->partial_symtabs->allocate_dependencies (1);
+  subpst->dependencies[0] = pst;
+  subpst->number_of_dependencies = 1;
+}
+
+/* Read the Line Number Program data and extract the list of files
+   included by the source file represented by PST.  Build an include
+   partial symtab for each of these included files.  */
+
+static void
+dwarf2_build_include_psymtabs (struct dwarf2_cu *cu,
+			       struct die_info *die,
+			       dwarf2_psymtab *pst)
+{
+  line_header_up lh;
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
+  if (attr != nullptr && attr->form_is_unsigned ())
+    lh = dwarf_decode_line_header ((sect_offset) attr->as_unsigned (), cu);
+  if (lh == NULL)
+    return;  /* No linetable, so no includes.  */
+
+  /* NOTE: pst->dirname is DW_AT_comp_dir (if present).  Also note
+     that we pass in the raw text_low here; that is ok because we're
+     only decoding the line table to make include partial symtabs, and
+     so the addresses aren't really used.  */
+  dwarf_decode_lines (lh.get (), pst->dirname, cu, pst,
+		      pst->raw_text_low (), 1);
+}
+
+static hashval_t
+hash_signatured_type (const void *item)
+{
+  const struct signatured_type *sig_type
+    = (const struct signatured_type *) item;
+
+  /* This drops the top 32 bits of the signature, but is ok for a hash.  */
+  return sig_type->signature;
+}
+
+static int
+eq_signatured_type (const void *item_lhs, const void *item_rhs)
+{
+  const struct signatured_type *lhs = (const struct signatured_type *) item_lhs;
+  const struct signatured_type *rhs = (const struct signatured_type *) item_rhs;
+
+  return lhs->signature == rhs->signature;
+}
+
+/* Allocate a hash table for signatured types.  */
+
+static htab_up
+allocate_signatured_type_table ()
+{
+  return htab_up (htab_create_alloc (41,
+				     hash_signatured_type,
+				     eq_signatured_type,
+				     NULL, xcalloc, xfree));
+}
+
+/* A helper for create_debug_types_hash_table.  Read types from SECTION
+   and fill them into TYPES_HTAB.  It will process only type units,
+   therefore DW_UT_type.  */
+
+static void
+create_debug_type_hash_table (dwarf2_per_objfile *per_objfile,
+			      struct dwo_file *dwo_file,
+			      dwarf2_section_info *section, htab_up &types_htab,
+			      rcuh_kind section_kind)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  struct dwarf2_section_info *abbrev_section;
+  bfd *abfd;
+  const gdb_byte *info_ptr, *end_ptr;
+
+  abbrev_section = &dwo_file->sections.abbrev;
+
+  dwarf_read_debug_printf ("Reading %s for %s",
+			   section->get_name (),
+			   abbrev_section->get_file_name ());
+
+  section->read (objfile);
+  info_ptr = section->buffer;
+
+  if (info_ptr == NULL)
+    return;
+
+  /* We can't set abfd until now because the section may be empty or
+     not present, in which case the bfd is unknown.  */
+  abfd = section->get_bfd_owner ();
+
+  /* We don't use cutu_reader here because we don't need to read
+     any dies: the signature is in the header.  */
+
+  end_ptr = info_ptr + section->size;
+  while (info_ptr < end_ptr)
+    {
+      signatured_type_up sig_type;
+      struct dwo_unit *dwo_tu;
+      void **slot;
+      const gdb_byte *ptr = info_ptr;
+      struct comp_unit_head header;
+      unsigned int length;
+
+      sect_offset sect_off = (sect_offset) (ptr - section->buffer);
+
+      /* Initialize it due to a false compiler warning.  */
+      header.signature = -1;
+      header.type_cu_offset_in_tu = (cu_offset) -1;
+
+      /* We need to read the type's signature in order to build the hash
+	 table, but we don't need anything else just yet.  */
+
+      ptr = read_and_check_comp_unit_head (per_objfile, &header, section,
+					   abbrev_section, ptr, section_kind);
+
+      length = header.get_length ();
+
+      /* Skip dummy type units.  */
+      if (ptr >= info_ptr + length
+	  || peek_abbrev_code (abfd, ptr) == 0
+	  || (header.unit_type != DW_UT_type
+	      && header.unit_type != DW_UT_split_type))
+	{
+	  info_ptr += length;
+	  continue;
+	}
+
+      if (types_htab == NULL)
+	types_htab = allocate_dwo_unit_table ();
+
+      dwo_tu = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, dwo_unit);
+      dwo_tu->dwo_file = dwo_file;
+      dwo_tu->signature = header.signature;
+      dwo_tu->type_offset_in_tu = header.type_cu_offset_in_tu;
+      dwo_tu->section = section;
+      dwo_tu->sect_off = sect_off;
+      dwo_tu->length = length;
+
+      slot = htab_find_slot (types_htab.get (), dwo_tu, INSERT);
+      gdb_assert (slot != NULL);
+      if (*slot != NULL)
+	complaint (_("debug type entry at offset %s is duplicate to"
+		     " the entry at offset %s, signature %s"),
+		   sect_offset_str (sect_off),
+		   sect_offset_str (dwo_tu->sect_off),
+		   hex_string (header.signature));
+      *slot = dwo_tu;
+
+      dwarf_read_debug_printf_v ("  offset %s, signature %s",
+				 sect_offset_str (sect_off),
+				 hex_string (header.signature));
+
+      info_ptr += length;
+    }
+}
+
+/* Create the hash table of all entries in the .debug_types
+   (or .debug_types.dwo) section(s).
+   DWO_FILE is a pointer to the DWO file object.
+
+   The result is a pointer to the hash table or NULL if there are no types.
+
+   Note: This function processes DWO files only, not DWP files.  */
+
+static void
+create_debug_types_hash_table (dwarf2_per_objfile *per_objfile,
+			       struct dwo_file *dwo_file,
+			       gdb::array_view<dwarf2_section_info> type_sections,
+			       htab_up &types_htab)
+{
+  for (dwarf2_section_info &section : type_sections)
+    create_debug_type_hash_table (per_objfile, dwo_file, &section, types_htab,
+				  rcuh_kind::TYPE);
+}
+
+/* Add an entry for signature SIG to dwarf2_per_objfile->per_bfd->signatured_types.
+   If SLOT is non-NULL, it is the entry to use in the hash table.
+   Otherwise we find one.  */
+
+static struct signatured_type *
+add_type_unit (dwarf2_per_objfile *per_objfile, ULONGEST sig, void **slot)
+{
+  if (per_objfile->per_bfd->all_comp_units.size ()
+      == per_objfile->per_bfd->all_comp_units.capacity ())
+    ++per_objfile->per_bfd->tu_stats.nr_all_type_units_reallocs;
+
+  signatured_type_up sig_type_holder
+    = per_objfile->per_bfd->allocate_signatured_type (sig);
+  signatured_type *sig_type = sig_type_holder.get ();
+
+  per_objfile->per_bfd->all_comp_units.emplace_back
+    (sig_type_holder.release ());
+  if (per_objfile->per_bfd->using_index)
+    {
+      sig_type->v.quick =
+	OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack,
+			struct dwarf2_per_cu_quick_data);
+    }
+
+  if (slot == NULL)
+    {
+      slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (),
+			     sig_type, INSERT);
+    }
+  gdb_assert (*slot == NULL);
+  *slot = sig_type;
+  /* The rest of sig_type must be filled in by the caller.  */
+  return sig_type;
+}
+
+/* Subroutine of lookup_dwo_signatured_type and lookup_dwp_signatured_type.
+   Fill in SIG_ENTRY with DWO_ENTRY.  */
+
+static void
+fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile *per_objfile,
+				  struct signatured_type *sig_entry,
+				  struct dwo_unit *dwo_entry)
+{
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  /* Make sure we're not clobbering something we don't expect to.  */
+  gdb_assert (! sig_entry->queued);
+  gdb_assert (per_objfile->get_cu (sig_entry) == NULL);
+  if (per_bfd->using_index)
+    {
+      gdb_assert (sig_entry->v.quick != NULL);
+      gdb_assert (!per_objfile->symtab_set_p (sig_entry));
+    }
+  else
+      gdb_assert (sig_entry->v.psymtab == NULL);
+  gdb_assert (sig_entry->signature == dwo_entry->signature);
+  gdb_assert (to_underlying (sig_entry->type_offset_in_section) == 0);
+  gdb_assert (sig_entry->type_unit_group == NULL);
+  gdb_assert (sig_entry->dwo_unit == NULL);
+
+  sig_entry->section = dwo_entry->section;
+  sig_entry->sect_off = dwo_entry->sect_off;
+  sig_entry->length = dwo_entry->length;
+  sig_entry->reading_dwo_directly = 1;
+  sig_entry->per_bfd = per_bfd;
+  sig_entry->type_offset_in_tu = dwo_entry->type_offset_in_tu;
+  sig_entry->dwo_unit = dwo_entry;
+}
+
+/* Subroutine of lookup_signatured_type.
+   If we haven't read the TU yet, create the signatured_type data structure
+   for a TU to be read in directly from a DWO file, bypassing the stub.
+   This is the "Stay in DWO Optimization": When there is no DWP file and we're
+   using .gdb_index, then when reading a CU we want to stay in the DWO file
+   containing that CU.  Otherwise we could end up reading several other DWO
+   files (due to comdat folding) to process the transitive closure of all the
+   mentioned TUs, and that can be slow.  The current DWO file will have every
+   type signature that it needs.
+   We only do this for .gdb_index because in the psymtab case we already have
+   to read all the DWOs to build the type unit groups.  */
+
+static struct signatured_type *
+lookup_dwo_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct dwo_file *dwo_file;
+  struct dwo_unit find_dwo_entry, *dwo_entry;
+  void **slot;
+
+  gdb_assert (cu->dwo_unit && per_objfile->per_bfd->using_index);
+
+  /* If TU skeletons have been removed then we may not have read in any
+     TUs yet.  */
+  if (per_objfile->per_bfd->signatured_types == NULL)
+    per_objfile->per_bfd->signatured_types = allocate_signatured_type_table ();
+
+  /* We only ever need to read in one copy of a signatured type.
+     Use the global signatured_types array to do our own comdat-folding
+     of types.  If this is the first time we're reading this TU, and
+     the TU has an entry in .gdb_index, replace the recorded data from
+     .gdb_index with this TU.  */
+
+  signatured_type find_sig_entry (sig);
+  slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (),
+			 &find_sig_entry, INSERT);
+  signatured_type *sig_entry = (struct signatured_type *) *slot;
+
+  /* We can get here with the TU already read, *or* in the process of being
+     read.  Don't reassign the global entry to point to this DWO if that's
+     the case.  Also note that if the TU is already being read, it may not
+     have come from a DWO, the program may be a mix of Fission-compiled
+     code and non-Fission-compiled code.  */
+
+  /* Have we already tried to read this TU?
+     Note: sig_entry can be NULL if the skeleton TU was removed (thus it
+     needn't exist in the global table yet).  */
+  if (sig_entry != NULL && sig_entry->tu_read)
+    return sig_entry;
+
+  /* Note: cu->dwo_unit is the dwo_unit that references this TU, not the
+     dwo_unit of the TU itself.  */
+  dwo_file = cu->dwo_unit->dwo_file;
+
+  /* Ok, this is the first time we're reading this TU.  */
+  if (dwo_file->tus == NULL)
+    return NULL;
+  find_dwo_entry.signature = sig;
+  dwo_entry = (struct dwo_unit *) htab_find (dwo_file->tus.get (),
+					     &find_dwo_entry);
+  if (dwo_entry == NULL)
+    return NULL;
+
+  /* If the global table doesn't have an entry for this TU, add one.  */
+  if (sig_entry == NULL)
+    sig_entry = add_type_unit (per_objfile, sig, slot);
+
+  fill_in_sig_entry_from_dwo_entry (per_objfile, sig_entry, dwo_entry);
+  sig_entry->tu_read = 1;
+  return sig_entry;
+}
+
+/* Subroutine of lookup_signatured_type.
+   Look up the type for signature SIG, and if we can't find SIG in .gdb_index
+   then try the DWP file.  If the TU stub (skeleton) has been removed then
+   it won't be in .gdb_index.  */
+
+static struct signatured_type *
+lookup_dwp_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct dwp_file *dwp_file = get_dwp_file (per_objfile);
+  struct dwo_unit *dwo_entry;
+  void **slot;
+
+  gdb_assert (cu->dwo_unit && per_objfile->per_bfd->using_index);
+  gdb_assert (dwp_file != NULL);
+
+  /* If TU skeletons have been removed then we may not have read in any
+     TUs yet.  */
+  if (per_objfile->per_bfd->signatured_types == NULL)
+    per_objfile->per_bfd->signatured_types = allocate_signatured_type_table ();
+
+  signatured_type find_sig_entry (sig);
+  slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (),
+			 &find_sig_entry, INSERT);
+  signatured_type *sig_entry = (struct signatured_type *) *slot;
+
+  /* Have we already tried to read this TU?
+     Note: sig_entry can be NULL if the skeleton TU was removed (thus it
+     needn't exist in the global table yet).  */
+  if (sig_entry != NULL)
+    return sig_entry;
+
+  if (dwp_file->tus == NULL)
+    return NULL;
+  dwo_entry = lookup_dwo_unit_in_dwp (per_objfile, dwp_file, NULL, sig,
+				      1 /* is_debug_types */);
+  if (dwo_entry == NULL)
+    return NULL;
+
+  sig_entry = add_type_unit (per_objfile, sig, slot);
+  fill_in_sig_entry_from_dwo_entry (per_objfile, sig_entry, dwo_entry);
+
+  return sig_entry;
+}
+
+/* Lookup a signature based type for DW_FORM_ref_sig8.
+   Returns NULL if signature SIG is not present in the table.
+   It is up to the caller to complain about this.  */
+
+static struct signatured_type *
+lookup_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+  if (cu->dwo_unit && per_objfile->per_bfd->using_index)
+    {
+      /* We're in a DWO/DWP file, and we're using .gdb_index.
+	 These cases require special processing.  */
+      if (get_dwp_file (per_objfile) == NULL)
+	return lookup_dwo_signatured_type (cu, sig);
+      else
+	return lookup_dwp_signatured_type (cu, sig);
+    }
+  else
+    {
+      if (per_objfile->per_bfd->signatured_types == NULL)
+	return NULL;
+      signatured_type find_entry (sig);
+      return ((struct signatured_type *)
+	      htab_find (per_objfile->per_bfd->signatured_types.get (),
+			 &find_entry));
+    }
+}
+
+/* Low level DIE reading support.  */
+
+/* Initialize a die_reader_specs struct from a dwarf2_cu struct.  */
+
+static void
+init_cu_die_reader (struct die_reader_specs *reader,
+		    struct dwarf2_cu *cu,
+		    struct dwarf2_section_info *section,
+		    struct dwo_file *dwo_file,
+		    struct abbrev_table *abbrev_table)
+{
+  gdb_assert (section->readin && section->buffer != NULL);
+  reader->abfd = section->get_bfd_owner ();
+  reader->cu = cu;
+  reader->dwo_file = dwo_file;
+  reader->die_section = section;
+  reader->buffer = section->buffer;
+  reader->buffer_end = section->buffer + section->size;
+  reader->abbrev_table = abbrev_table;
+}
+
+/* Subroutine of cutu_reader to simplify it.
+   Read in the rest of a CU/TU top level DIE from DWO_UNIT.
+   There's just a lot of work to do, and cutu_reader is big enough
+   already.
+
+   STUB_COMP_UNIT_DIE is for the stub DIE, we copy over certain attributes
+   from it to the DIE in the DWO.  If NULL we are skipping the stub.
+   STUB_COMP_DIR is similar to STUB_COMP_UNIT_DIE: When reading a TU directly
+   from the DWO file, bypassing the stub, it contains the DW_AT_comp_dir
+   attribute of the referencing CU.  At most one of STUB_COMP_UNIT_DIE and
+   STUB_COMP_DIR may be non-NULL.
+   *RESULT_READER,*RESULT_INFO_PTR,*RESULT_COMP_UNIT_DIE
+   are filled in with the info of the DIE from the DWO file.
+   *RESULT_DWO_ABBREV_TABLE will be filled in with the abbrev table allocated
+   from the dwo.  Since *RESULT_READER references this abbrev table, it must be
+   kept around for at least as long as *RESULT_READER.
+
+   The result is non-zero if a valid (non-dummy) DIE was found.  */
+
+static int
+read_cutu_die_from_dwo (dwarf2_cu *cu,
+			struct dwo_unit *dwo_unit,
+			struct die_info *stub_comp_unit_die,
+			const char *stub_comp_dir,
+			struct die_reader_specs *result_reader,
+			const gdb_byte **result_info_ptr,
+			struct die_info **result_comp_unit_die,
+			abbrev_table_up *result_dwo_abbrev_table)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  dwarf2_per_cu_data *per_cu = cu->per_cu;
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *abfd;
+  const gdb_byte *begin_info_ptr, *info_ptr;
+  struct attribute *comp_dir, *stmt_list, *low_pc, *high_pc, *ranges;
+  int i,num_extra_attrs;
+  struct dwarf2_section_info *dwo_abbrev_section;
+  struct die_info *comp_unit_die;
+
+  /* At most one of these may be provided.  */
+  gdb_assert ((stub_comp_unit_die != NULL) + (stub_comp_dir != NULL) <= 1);
+
+  /* These attributes aren't processed until later:
+     DW_AT_stmt_list, DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges.
+     DW_AT_comp_dir is used now, to find the DWO file, but it is also
+     referenced later.  However, these attributes are found in the stub
+     which we won't have later.  In order to not impose this complication
+     on the rest of the code, we read them here and copy them to the
+     DWO CU/TU die.  */
+
+  stmt_list = NULL;
+  low_pc = NULL;
+  high_pc = NULL;
+  ranges = NULL;
+  comp_dir = NULL;
+
+  if (stub_comp_unit_die != NULL)
+    {
+      /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the
+	 DWO file.  */
+      if (!per_cu->is_debug_types)
+	stmt_list = dwarf2_attr (stub_comp_unit_die, DW_AT_stmt_list, cu);
+      low_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_low_pc, cu);
+      high_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_high_pc, cu);
+      ranges = dwarf2_attr (stub_comp_unit_die, DW_AT_ranges, cu);
+      comp_dir = dwarf2_attr (stub_comp_unit_die, DW_AT_comp_dir, cu);
+
+      cu->addr_base = stub_comp_unit_die->addr_base ();
+
+      /* There should be a DW_AT_GNU_ranges_base attribute here (if needed).
+         We need the value before we can process DW_AT_ranges values from the
+         DWO.  */
+      cu->gnu_ranges_base = stub_comp_unit_die->gnu_ranges_base ();
+
+      /* For DWARF5: record the DW_AT_rnglists_base value from the skeleton.  If
+         there are attributes of form DW_FORM_rnglistx in the skeleton, they'll
+         need the rnglists base.  Attributes of form DW_FORM_rnglistx in the
+         split unit don't use it, as the DWO has its own .debug_rnglists.dwo
+         section.  */
+      cu->rnglists_base = stub_comp_unit_die->rnglists_base ();
+    }
+  else if (stub_comp_dir != NULL)
+    {
+      /* Reconstruct the comp_dir attribute to simplify the code below.  */
+      comp_dir = OBSTACK_ZALLOC (&cu->comp_unit_obstack, struct attribute);
+      comp_dir->name = DW_AT_comp_dir;
+      comp_dir->form = DW_FORM_string;
+      comp_dir->set_string_noncanonical (stub_comp_dir);
+    }
+
+  /* Set up for reading the DWO CU/TU.  */
+  cu->dwo_unit = dwo_unit;
+  dwarf2_section_info *section = dwo_unit->section;
+  section->read (objfile);
+  abfd = section->get_bfd_owner ();
+  begin_info_ptr = info_ptr = (section->buffer
+			       + to_underlying (dwo_unit->sect_off));
+  dwo_abbrev_section = &dwo_unit->dwo_file->sections.abbrev;
+
+  if (per_cu->is_debug_types)
+    {
+      signatured_type *sig_type = (struct signatured_type *) per_cu;
+
+      info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header,
+						section, dwo_abbrev_section,
+						info_ptr, rcuh_kind::TYPE);
+      /* This is not an assert because it can be caused by bad debug info.  */
+      if (sig_type->signature != cu->header.signature)
+	{
+	  error (_("Dwarf Error: signature mismatch %s vs %s while reading"
+		   " TU at offset %s [in module %s]"),
+		 hex_string (sig_type->signature),
+		 hex_string (cu->header.signature),
+		 sect_offset_str (dwo_unit->sect_off),
+		 bfd_get_filename (abfd));
+	}
+      gdb_assert (dwo_unit->sect_off == cu->header.sect_off);
+      /* For DWOs coming from DWP files, we don't know the CU length
+	 nor the type's offset in the TU until now.  */
+      dwo_unit->length = cu->header.get_length ();
+      dwo_unit->type_offset_in_tu = cu->header.type_cu_offset_in_tu;
+
+      /* Establish the type offset that can be used to lookup the type.
+	 For DWO files, we don't know it until now.  */
+      sig_type->type_offset_in_section
+	= dwo_unit->sect_off + to_underlying (dwo_unit->type_offset_in_tu);
+    }
+  else
+    {
+      info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header,
+						section, dwo_abbrev_section,
+						info_ptr, rcuh_kind::COMPILE);
+      gdb_assert (dwo_unit->sect_off == cu->header.sect_off);
+      /* For DWOs coming from DWP files, we don't know the CU length
+	 until now.  */
+      dwo_unit->length = cu->header.get_length ();
+    }
+
+  dwo_abbrev_section->read (objfile);
+  *result_dwo_abbrev_table
+    = abbrev_table::read (dwo_abbrev_section, cu->header.abbrev_sect_off);
+  init_cu_die_reader (result_reader, cu, section, dwo_unit->dwo_file,
+		      result_dwo_abbrev_table->get ());
+
+  /* Read in the die, but leave space to copy over the attributes
+     from the stub.  This has the benefit of simplifying the rest of
+     the code - all the work to maintain the illusion of a single
+     DW_TAG_{compile,type}_unit DIE is done here.  */
+  num_extra_attrs = ((stmt_list != NULL)
+		     + (low_pc != NULL)
+		     + (high_pc != NULL)
+		     + (ranges != NULL)
+		     + (comp_dir != NULL));
+  info_ptr = read_full_die_1 (result_reader, result_comp_unit_die, info_ptr,
+			      num_extra_attrs);
+
+  /* Copy over the attributes from the stub to the DIE we just read in.  */
+  comp_unit_die = *result_comp_unit_die;
+  i = comp_unit_die->num_attrs;
+  if (stmt_list != NULL)
+    comp_unit_die->attrs[i++] = *stmt_list;
+  if (low_pc != NULL)
+    comp_unit_die->attrs[i++] = *low_pc;
+  if (high_pc != NULL)
+    comp_unit_die->attrs[i++] = *high_pc;
+  if (ranges != NULL)
+    comp_unit_die->attrs[i++] = *ranges;
+  if (comp_dir != NULL)
+    comp_unit_die->attrs[i++] = *comp_dir;
+  comp_unit_die->num_attrs += num_extra_attrs;
+
+  if (dwarf_die_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Read die from %s@0x%x of %s:\n",
+			  section->get_name (),
+			  (unsigned) (begin_info_ptr - section->buffer),
+			  bfd_get_filename (abfd));
+      dump_die (comp_unit_die, dwarf_die_debug);
+    }
+
+  /* Skip dummy compilation units.  */
+  if (info_ptr >= begin_info_ptr + dwo_unit->length
+      || peek_abbrev_code (abfd, info_ptr) == 0)
+    return 0;
+
+  *result_info_ptr = info_ptr;
+  return 1;
+}
+
+/* Return the signature of the compile unit, if found. In DWARF 4 and before,
+   the signature is in the DW_AT_GNU_dwo_id attribute. In DWARF 5 and later, the
+   signature is part of the header.  */
+static gdb::optional<ULONGEST>
+lookup_dwo_id (struct dwarf2_cu *cu, struct die_info* comp_unit_die)
+{
+  if (cu->header.version >= 5)
+    return cu->header.signature;
+  struct attribute *attr;
+  attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_id, cu);
+  if (attr == nullptr || !attr->form_is_unsigned ())
+    return gdb::optional<ULONGEST> ();
+  return attr->as_unsigned ();
+}
+
+/* Subroutine of cutu_reader to simplify it.
+   Look up the DWO unit specified by COMP_UNIT_DIE of THIS_CU.
+   Returns NULL if the specified DWO unit cannot be found.  */
+
+static struct dwo_unit *
+lookup_dwo_unit (dwarf2_cu *cu, die_info *comp_unit_die, const char *dwo_name)
+{
+  dwarf2_per_cu_data *per_cu = cu->per_cu;
+  struct dwo_unit *dwo_unit;
+  const char *comp_dir;
+
+  gdb_assert (cu != NULL);
+
+  /* Yeah, we look dwo_name up again, but it simplifies the code.  */
+  dwo_name = dwarf2_dwo_name (comp_unit_die, cu);
+  comp_dir = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu);
+
+  if (per_cu->is_debug_types)
+    dwo_unit = lookup_dwo_type_unit (cu, dwo_name, comp_dir);
+  else
+    {
+      gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die);
+
+      if (!signature.has_value ())
+	error (_("Dwarf Error: missing dwo_id for dwo_name %s"
+		 " [in module %s]"),
+	       dwo_name, bfd_get_filename (per_cu->per_bfd->obfd));
+
+      dwo_unit = lookup_dwo_comp_unit (cu, dwo_name, comp_dir, *signature);
+    }
+
+  return dwo_unit;
+}
+
+/* Subroutine of cutu_reader to simplify it.
+   See it for a description of the parameters.
+   Read a TU directly from a DWO file, bypassing the stub.  */
+
+void
+cutu_reader::init_tu_and_read_dwo_dies (dwarf2_per_cu_data *this_cu,
+					dwarf2_per_objfile *per_objfile,
+					dwarf2_cu *existing_cu)
+{
+  struct signatured_type *sig_type;
+
+  /* Verify we can do the following downcast, and that we have the
+     data we need.  */
+  gdb_assert (this_cu->is_debug_types && this_cu->reading_dwo_directly);
+  sig_type = (struct signatured_type *) this_cu;
+  gdb_assert (sig_type->dwo_unit != NULL);
+
+  dwarf2_cu *cu;
+
+  if (existing_cu != nullptr)
+    {
+      cu = existing_cu;
+      gdb_assert (cu->dwo_unit == sig_type->dwo_unit);
+      /* There's no need to do the rereading_dwo_cu handling that
+	 cutu_reader does since we don't read the stub.  */
+    }
+  else
+    {
+      /* If an existing_cu is provided, a dwarf2_cu must not exist for this_cu
+	 in per_objfile yet.  */
+      gdb_assert (per_objfile->get_cu (this_cu) == nullptr);
+      m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile));
+      cu = m_new_cu.get ();
+    }
+
+  /* A future optimization, if needed, would be to use an existing
+     abbrev table.  When reading DWOs with skeletonless TUs, all the TUs
+     could share abbrev tables.  */
+
+  if (read_cutu_die_from_dwo (cu, sig_type->dwo_unit,
+			      NULL /* stub_comp_unit_die */,
+			      sig_type->dwo_unit->dwo_file->comp_dir,
+			      this, &info_ptr,
+			      &comp_unit_die,
+			      &m_dwo_abbrev_table) == 0)
+    {
+      /* Dummy die.  */
+      dummy_p = true;
+    }
+}
+
+/* Initialize a CU (or TU) and read its DIEs.
+   If the CU defers to a DWO file, read the DWO file as well.
+
+   ABBREV_TABLE, if non-NULL, is the abbreviation table to use.
+   Otherwise the table specified in the comp unit header is read in and used.
+   This is an optimization for when we already have the abbrev table.
+
+   If EXISTING_CU is non-NULL, then use it.  Otherwise, a new CU is
+   allocated.  */
+
+cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
+			  dwarf2_per_objfile *per_objfile,
+			  struct abbrev_table *abbrev_table,
+			  dwarf2_cu *existing_cu,
+			  bool skip_partial)
+  : die_reader_specs {},
+    m_this_cu (this_cu)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  struct dwarf2_section_info *section = this_cu->section;
+  bfd *abfd = section->get_bfd_owner ();
+  const gdb_byte *begin_info_ptr;
+  struct signatured_type *sig_type = NULL;
+  struct dwarf2_section_info *abbrev_section;
+  /* Non-zero if CU currently points to a DWO file and we need to
+     reread it.  When this happens we need to reread the skeleton die
+     before we can reread the DWO file (this only applies to CUs, not TUs).  */
+  int rereading_dwo_cu = 0;
+
+  if (dwarf_die_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n",
+			this_cu->is_debug_types ? "type" : "comp",
+			sect_offset_str (this_cu->sect_off));
+
+  /* If we're reading a TU directly from a DWO file, including a virtual DWO
+     file (instead of going through the stub), short-circuit all of this.  */
+  if (this_cu->reading_dwo_directly)
+    {
+      /* Narrow down the scope of possibilities to have to understand.  */
+      gdb_assert (this_cu->is_debug_types);
+      gdb_assert (abbrev_table == NULL);
+      init_tu_and_read_dwo_dies (this_cu, per_objfile, existing_cu);
+      return;
+    }
+
+  /* This is cheap if the section is already read in.  */
+  section->read (objfile);
+
+  begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off);
+
+  abbrev_section = get_abbrev_section_for_cu (this_cu);
+
+  dwarf2_cu *cu;
+
+  if (existing_cu != nullptr)
+    {
+      cu = existing_cu;
+      /* If this CU is from a DWO file we need to start over, we need to
+	 refetch the attributes from the skeleton CU.
+	 This could be optimized by retrieving those attributes from when we
+	 were here the first time: the previous comp_unit_die was stored in
+	 comp_unit_obstack.  But there's no data yet that we need this
+	 optimization.  */
+      if (cu->dwo_unit != NULL)
+	rereading_dwo_cu = 1;
+    }
+  else
+    {
+      /* If an existing_cu is provided, a dwarf2_cu must not exist for this_cu
+	 in per_objfile yet.  */
+      gdb_assert (per_objfile->get_cu (this_cu) == nullptr);
+      m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile));
+      cu = m_new_cu.get ();
+    }
+
+  /* Get the header.  */
+  if (to_underlying (cu->header.first_die_cu_offset) != 0 && !rereading_dwo_cu)
+    {
+      /* We already have the header, there's no need to read it in again.  */
+      info_ptr += to_underlying (cu->header.first_die_cu_offset);
+    }
+  else
+    {
+      if (this_cu->is_debug_types)
+	{
+	  info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header,
+						    section, abbrev_section,
+						    info_ptr, rcuh_kind::TYPE);
+
+	  /* Since per_cu is the first member of struct signatured_type,
+	     we can go from a pointer to one to a pointer to the other.  */
+	  sig_type = (struct signatured_type *) this_cu;
+	  gdb_assert (sig_type->signature == cu->header.signature);
+	  gdb_assert (sig_type->type_offset_in_tu
+		      == cu->header.type_cu_offset_in_tu);
+	  gdb_assert (this_cu->sect_off == cu->header.sect_off);
+
+	  /* LENGTH has not been set yet for type units if we're
+	     using .gdb_index.  */
+	  this_cu->length = cu->header.get_length ();
+
+	  /* Establish the type offset that can be used to lookup the type.  */
+	  sig_type->type_offset_in_section =
+	    this_cu->sect_off + to_underlying (sig_type->type_offset_in_tu);
+
+	  this_cu->dwarf_version = cu->header.version;
+	}
+      else
+	{
+	  info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header,
+						    section, abbrev_section,
+						    info_ptr,
+						    rcuh_kind::COMPILE);
+
+	  gdb_assert (this_cu->sect_off == cu->header.sect_off);
+	  if (this_cu->length == 0)
+	    this_cu->length = cu->header.get_length ();
+	  else
+	    gdb_assert (this_cu->length == cu->header.get_length ());
+	  this_cu->dwarf_version = cu->header.version;
+	}
+    }
+
+  /* Skip dummy compilation units.  */
+  if (info_ptr >= begin_info_ptr + this_cu->length
+      || peek_abbrev_code (abfd, info_ptr) == 0)
+    {
+      dummy_p = true;
+      return;
+    }
+
+  /* If we don't have them yet, read the abbrevs for this compilation unit.
+     And if we need to read them now, make sure they're freed when we're
+     done.  */
+  if (abbrev_table != NULL)
+    gdb_assert (cu->header.abbrev_sect_off == abbrev_table->sect_off);
+  else
+    {
+      abbrev_section->read (objfile);
+      m_abbrev_table_holder
+	= abbrev_table::read (abbrev_section, cu->header.abbrev_sect_off);
+      abbrev_table = m_abbrev_table_holder.get ();
+    }
+
+  /* Read the top level CU/TU die.  */
+  init_cu_die_reader (this, cu, section, NULL, abbrev_table);
+  info_ptr = read_full_die (this, &comp_unit_die, info_ptr);
+
+  if (skip_partial && comp_unit_die->tag == DW_TAG_partial_unit)
+    {
+      dummy_p = true;
+      return;
+    }
+
+  /* If we are in a DWO stub, process it and then read in the "real" CU/TU
+     from the DWO file.  read_cutu_die_from_dwo will allocate the abbreviation
+     table from the DWO file and pass the ownership over to us.  It will be
+     referenced from READER, so we must make sure to free it after we're done
+     with READER.
+
+     Note that if USE_EXISTING_OK != 0, and THIS_CU->cu already contains a
+     DWO CU, that this test will fail (the attribute will not be present).  */
+  const char *dwo_name = dwarf2_dwo_name (comp_unit_die, cu);
+  if (dwo_name != nullptr)
+    {
+      struct dwo_unit *dwo_unit;
+      struct die_info *dwo_comp_unit_die;
+
+      if (comp_unit_die->has_children)
+	{
+	  complaint (_("compilation unit with DW_AT_GNU_dwo_name"
+		       " has children (offset %s) [in module %s]"),
+		     sect_offset_str (this_cu->sect_off),
+		     bfd_get_filename (abfd));
+	}
+      dwo_unit = lookup_dwo_unit (cu, comp_unit_die, dwo_name);
+      if (dwo_unit != NULL)
+	{
+	  if (read_cutu_die_from_dwo (cu, dwo_unit,
+				      comp_unit_die, NULL,
+				      this, &info_ptr,
+				      &dwo_comp_unit_die,
+				      &m_dwo_abbrev_table) == 0)
+	    {
+	      /* Dummy die.  */
+	      dummy_p = true;
+	      return;
+	    }
+	  comp_unit_die = dwo_comp_unit_die;
+	}
+      else
+	{
+	  /* Yikes, we couldn't find the rest of the DIE, we only have
+	     the stub.  A complaint has already been logged.  There's
+	     not much more we can do except pass on the stub DIE to
+	     die_reader_func.  We don't want to throw an error on bad
+	     debug info.  */
+	}
+    }
+}
+
+void
+cutu_reader::keep ()
+{
+  /* Done, clean up.  */
+  gdb_assert (!dummy_p);
+  if (m_new_cu != NULL)
+    {
+      /* Save this dwarf2_cu in the per_objfile.  The per_objfile owns it
+	 now.  */
+      dwarf2_per_objfile *per_objfile = m_new_cu->per_objfile;
+      per_objfile->set_cu (m_this_cu, m_new_cu.release ());
+    }
+}
+
+/* Read CU/TU THIS_CU but do not follow DW_AT_GNU_dwo_name (DW_AT_dwo_name)
+   if present. DWO_FILE, if non-NULL, is the DWO file to read (the caller is
+   assumed to have already done the lookup to find the DWO file).
+
+   The caller is required to fill in THIS_CU->section, THIS_CU->offset, and
+   THIS_CU->is_debug_types, but nothing else.
+
+   We fill in THIS_CU->length.
+
+   THIS_CU->cu is always freed when done.
+   This is done in order to not leave THIS_CU->cu in a state where we have
+   to care whether it refers to the "main" CU or the DWO CU.
+
+   When parent_cu is passed, it is used to provide a default value for
+   str_offsets_base and addr_base from the parent.  */
+
+cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu,
+			  dwarf2_per_objfile *per_objfile,
+			  struct dwarf2_cu *parent_cu,
+			  struct dwo_file *dwo_file)
+  : die_reader_specs {},
+    m_this_cu (this_cu)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  struct dwarf2_section_info *section = this_cu->section;
+  bfd *abfd = section->get_bfd_owner ();
+  struct dwarf2_section_info *abbrev_section;
+  const gdb_byte *begin_info_ptr, *info_ptr;
+
+  if (dwarf_die_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n",
+			this_cu->is_debug_types ? "type" : "comp",
+			sect_offset_str (this_cu->sect_off));
+
+  gdb_assert (per_objfile->get_cu (this_cu) == nullptr);
+
+  abbrev_section = (dwo_file != NULL
+		    ? &dwo_file->sections.abbrev
+		    : get_abbrev_section_for_cu (this_cu));
+
+  /* This is cheap if the section is already read in.  */
+  section->read (objfile);
+
+  m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile));
+
+  begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off);
+  info_ptr = read_and_check_comp_unit_head (per_objfile, &m_new_cu->header,
+					    section, abbrev_section, info_ptr,
+					    (this_cu->is_debug_types
+					     ? rcuh_kind::TYPE
+					     : rcuh_kind::COMPILE));
+
+  if (parent_cu != nullptr)
+    {
+      m_new_cu->str_offsets_base = parent_cu->str_offsets_base;
+      m_new_cu->addr_base = parent_cu->addr_base;
+    }
+  this_cu->length = m_new_cu->header.get_length ();
+
+  /* Skip dummy compilation units.  */
+  if (info_ptr >= begin_info_ptr + this_cu->length
+      || peek_abbrev_code (abfd, info_ptr) == 0)
+    {
+      dummy_p = true;
+      return;
+    }
+
+  abbrev_section->read (objfile);
+  m_abbrev_table_holder
+    = abbrev_table::read (abbrev_section, m_new_cu->header.abbrev_sect_off);
+
+  init_cu_die_reader (this, m_new_cu.get (), section, dwo_file,
+		      m_abbrev_table_holder.get ());
+  info_ptr = read_full_die (this, &comp_unit_die, info_ptr);
+}
+
+
+/* Type Unit Groups.
+
+   Type Unit Groups are a way to collapse the set of all TUs (type units) into
+   a more manageable set.  The grouping is done by DW_AT_stmt_list entry
+   so that all types coming from the same compilation (.o file) are grouped
+   together.  A future step could be to put the types in the same symtab as
+   the CU the types ultimately came from.  */
+
+static hashval_t
+hash_type_unit_group (const void *item)
+{
+  const struct type_unit_group *tu_group
+    = (const struct type_unit_group *) item;
+
+  return hash_stmt_list_entry (&tu_group->hash);
+}
+
+static int
+eq_type_unit_group (const void *item_lhs, const void *item_rhs)
+{
+  const struct type_unit_group *lhs = (const struct type_unit_group *) item_lhs;
+  const struct type_unit_group *rhs = (const struct type_unit_group *) item_rhs;
+
+  return eq_stmt_list_entry (&lhs->hash, &rhs->hash);
+}
+
+/* Allocate a hash table for type unit groups.  */
+
+static htab_up
+allocate_type_unit_groups_table ()
+{
+  return htab_up (htab_create_alloc (3,
+				     hash_type_unit_group,
+				     eq_type_unit_group,
+				     htab_delete_entry<type_unit_group>,
+				     xcalloc, xfree));
+}
+
+/* Type units that don't have DW_AT_stmt_list are grouped into their own
+   partial symtabs.  We combine several TUs per psymtab to not let the size
+   of any one psymtab grow too big.  */
+#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB (1 << 31)
+#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE 10
+
+/* Helper routine for get_type_unit_group.
+   Create the type_unit_group object used to hold one or more TUs.  */
+
+static std::unique_ptr<type_unit_group>
+create_type_unit_group (struct dwarf2_cu *cu, sect_offset line_offset_struct)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  std::unique_ptr<type_unit_group> tu_group (new type_unit_group);
+  tu_group->per_bfd = per_bfd;
+
+  if (per_bfd->using_index)
+    {
+      tu_group->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack,
+					  struct dwarf2_per_cu_quick_data);
+    }
+  else
+    {
+      unsigned int line_offset = to_underlying (line_offset_struct);
+      dwarf2_psymtab *pst;
+      std::string name;
+
+      /* Give the symtab a useful name for debug purposes.  */
+      if ((line_offset & NO_STMT_LIST_TYPE_UNIT_PSYMTAB) != 0)
+	name = string_printf ("<type_units_%d>",
+			      (line_offset & ~NO_STMT_LIST_TYPE_UNIT_PSYMTAB));
+      else
+	name = string_printf ("<type_units_at_0x%x>", line_offset);
+
+      pst = create_partial_symtab (tu_group.get (), per_objfile,
+				   name.c_str ());
+      pst->anonymous = true;
+    }
+
+  tu_group->hash.dwo_unit = cu->dwo_unit;
+  tu_group->hash.line_sect_off = line_offset_struct;
+
+  return tu_group;
+}
+
+/* Look up the type_unit_group for type unit CU, and create it if necessary.
+   STMT_LIST is a DW_AT_stmt_list attribute.  */
+
+static struct type_unit_group *
+get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats;
+  struct type_unit_group *tu_group;
+  void **slot;
+  unsigned int line_offset;
+  struct type_unit_group type_unit_group_for_lookup;
+
+  if (per_objfile->per_bfd->type_unit_groups == NULL)
+    per_objfile->per_bfd->type_unit_groups = allocate_type_unit_groups_table ();
+
+  /* Do we need to create a new group, or can we use an existing one?  */
+
+  if (stmt_list != nullptr && stmt_list->form_is_unsigned ())
+    {
+      line_offset = stmt_list->as_unsigned ();
+      ++tu_stats->nr_symtab_sharers;
+    }
+  else
+    {
+      /* Ugh, no stmt_list.  Rare, but we have to handle it.
+	 We can do various things here like create one group per TU or
+	 spread them over multiple groups to split up the expansion work.
+	 To avoid worst case scenarios (too many groups or too large groups)
+	 we, umm, group them in bunches.  */
+      line_offset = (NO_STMT_LIST_TYPE_UNIT_PSYMTAB
+		     | (tu_stats->nr_stmt_less_type_units
+			/ NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE));
+      ++tu_stats->nr_stmt_less_type_units;
+    }
+
+  type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit;
+  type_unit_group_for_lookup.hash.line_sect_off = (sect_offset) line_offset;
+  slot = htab_find_slot (per_objfile->per_bfd->type_unit_groups.get (),
+			 &type_unit_group_for_lookup, INSERT);
+  if (*slot == nullptr)
+    {
+      sect_offset line_offset_struct = (sect_offset) line_offset;
+      std::unique_ptr<type_unit_group> grp
+	= create_type_unit_group (cu, line_offset_struct);
+      *slot = grp.release ();
+      ++tu_stats->nr_symtabs;
+    }
+
+  tu_group = (struct type_unit_group *) *slot;
+  gdb_assert (tu_group != nullptr);
+  return tu_group;
+}
+
+/* Partial symbol tables.  */
+
+/* Create a psymtab named NAME and assign it to PER_CU.
+
+   The caller must fill in the following details:
+   dirname, textlow, texthigh.  */
+
+static dwarf2_psymtab *
+create_partial_symtab (dwarf2_per_cu_data *per_cu,
+		       dwarf2_per_objfile *per_objfile,
+		       const char *name)
+{
+  dwarf2_psymtab *pst
+    = new dwarf2_psymtab (name, per_objfile->per_bfd->partial_symtabs.get (),
+			  per_objfile->objfile->per_bfd, per_cu);
+
+  pst->psymtabs_addrmap_supported = true;
+
+  /* This is the glue that links PST into GDB's symbol API.  */
+  per_cu->v.psymtab = pst;
+
+  return pst;
+}
+
+/* DIE reader function for process_psymtab_comp_unit.  */
+
+static void
+process_psymtab_comp_unit_reader (const struct die_reader_specs *reader,
+				  const gdb_byte *info_ptr,
+				  struct die_info *comp_unit_die,
+				  enum language pretend_language)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
+  CORE_ADDR baseaddr;
+  CORE_ADDR best_lowpc = 0, best_highpc = 0;
+  dwarf2_psymtab *pst;
+  enum pc_bounds_kind cu_bounds_kind;
+  const char *filename;
+
+  gdb_assert (! per_cu->is_debug_types);
+
+  prepare_one_comp_unit (cu, comp_unit_die, pretend_language);
+
+  /* Allocate a new partial symbol table structure.  */
+  gdb::unique_xmalloc_ptr<char> debug_filename;
+  static const char artificial[] = "<artificial>";
+  filename = dwarf2_string_attr (comp_unit_die, DW_AT_name, cu);
+  if (filename == NULL)
+    filename = "";
+  else if (strcmp (filename, artificial) == 0)
+    {
+      debug_filename.reset (concat (artificial, "@",
+				    sect_offset_str (per_cu->sect_off),
+				    (char *) NULL));
+      filename = debug_filename.get ();
+    }
+
+  pst = create_partial_symtab (per_cu, per_objfile, filename);
+
+  /* This must be done before calling dwarf2_build_include_psymtabs.  */
+  pst->dirname = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu);
+
+  baseaddr = objfile->text_section_offset ();
+
+  dwarf2_find_base_address (comp_unit_die, cu);
+
+  /* Possibly set the default values of LOWPC and HIGHPC from
+     `DW_AT_ranges'.  */
+  cu_bounds_kind = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc,
+					 &best_highpc, cu, pst);
+  if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc)
+    {
+      CORE_ADDR low
+	= (gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr)
+	   - baseaddr);
+      CORE_ADDR high
+	= (gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr)
+	   - baseaddr - 1);
+      /* Store the contiguous range if it is not empty; it can be
+	 empty for CUs with no code.  */
+      addrmap_set_empty (per_bfd->partial_symtabs->psymtabs_addrmap,
+			 low, high, pst);
+    }
+
+  /* Check if comp unit has_children.
+     If so, read the rest of the partial symbols from this comp unit.
+     If not, there's no more debug_info for this comp unit.  */
+  if (comp_unit_die->has_children)
+    {
+      struct partial_die_info *first_die;
+      CORE_ADDR lowpc, highpc;
+
+      lowpc = ((CORE_ADDR) -1);
+      highpc = ((CORE_ADDR) 0);
+
+      first_die = load_partial_dies (reader, info_ptr, 1);
+
+      scan_partial_symbols (first_die, &lowpc, &highpc,
+			    cu_bounds_kind <= PC_BOUNDS_INVALID, cu);
+
+      /* If we didn't find a lowpc, set it to highpc to avoid
+	 complaints from `maint check'.	 */
+      if (lowpc == ((CORE_ADDR) -1))
+	lowpc = highpc;
+
+      /* If the compilation unit didn't have an explicit address range,
+	 then use the information extracted from its child dies.  */
+      if (cu_bounds_kind <= PC_BOUNDS_INVALID)
+	{
+	  best_lowpc = lowpc;
+	  best_highpc = highpc;
+	}
+    }
+  pst->set_text_low (gdbarch_adjust_dwarf2_addr (gdbarch,
+						 best_lowpc + baseaddr)
+		     - baseaddr);
+  pst->set_text_high (gdbarch_adjust_dwarf2_addr (gdbarch,
+						  best_highpc + baseaddr)
+		      - baseaddr);
+
+  pst->end ();
+
+  if (!cu->per_cu->imported_symtabs_empty ())
+    {
+      int i;
+      int len = cu->per_cu->imported_symtabs_size ();
+
+      /* Fill in 'dependencies' here; we fill in 'users' in a
+	 post-pass.  */
+      pst->number_of_dependencies = len;
+      pst->dependencies
+	= per_bfd->partial_symtabs->allocate_dependencies (len);
+      for (i = 0; i < len; ++i)
+	{
+	  pst->dependencies[i]
+	    = cu->per_cu->imported_symtabs->at (i)->v.psymtab;
+	}
+
+      cu->per_cu->imported_symtabs_free ();
+    }
+
+  /* Get the list of files included in the current compilation unit,
+     and build a psymtab for each of them.  */
+  dwarf2_build_include_psymtabs (cu, comp_unit_die, pst);
+
+  dwarf_read_debug_printf ("Psymtab for %s unit @%s: %s - %s"
+			   ", %d global, %d static syms",
+			   per_cu->is_debug_types ? "type" : "comp",
+			   sect_offset_str (per_cu->sect_off),
+			   paddress (gdbarch, pst->text_low (objfile)),
+			   paddress (gdbarch, pst->text_high (objfile)),
+			   (int) pst->global_psymbols.size (),
+			   (int) pst->static_psymbols.size ());
+}
+
+/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
+   Process compilation unit THIS_CU for a psymtab.  */
+
+static void
+process_psymtab_comp_unit (dwarf2_per_cu_data *this_cu,
+			   dwarf2_per_objfile *per_objfile,
+			   bool want_partial_unit,
+			   enum language pretend_language)
+{
+  /* If this compilation unit was already read in, free the
+     cached copy in order to read it in again.	This is
+     necessary because we skipped some symbols when we first
+     read in the compilation unit (see load_partial_dies).
+     This problem could be avoided, but the benefit is unclear.  */
+  per_objfile->remove_cu (this_cu);
+
+  cutu_reader reader (this_cu, per_objfile, nullptr, nullptr, false);
+
+  if (reader.comp_unit_die == nullptr)
+    return;
+
+  switch (reader.comp_unit_die->tag)
+    {
+    case DW_TAG_compile_unit:
+      this_cu->unit_type = DW_UT_compile;
+      break;
+    case DW_TAG_partial_unit:
+      this_cu->unit_type = DW_UT_partial;
+      break;
+    case DW_TAG_type_unit:
+      this_cu->unit_type = DW_UT_type;
+      break;
+    default:
+      error (_("Dwarf Error: unexpected tag '%s' at offset %s [in module %s]"),
+	     dwarf_tag_name (reader.comp_unit_die->tag),
+	     sect_offset_str (reader.cu->per_cu->sect_off),
+	     objfile_name (per_objfile->objfile));
+    }
+
+  if (reader.dummy_p)
+    {
+      /* Nothing.  */
+    }
+  else if (this_cu->is_debug_types)
+    build_type_psymtabs_reader (&reader, reader.info_ptr,
+				reader.comp_unit_die);
+  else if (want_partial_unit
+	   || reader.comp_unit_die->tag != DW_TAG_partial_unit)
+    process_psymtab_comp_unit_reader (&reader, reader.info_ptr,
+				      reader.comp_unit_die,
+				      pretend_language);
+
+  /* Age out any secondary CUs.  */
+  per_objfile->age_comp_units ();
+}
+
+/* Reader function for build_type_psymtabs.  */
+
+static void
+build_type_psymtabs_reader (const struct die_reader_specs *reader,
+			    const gdb_byte *info_ptr,
+			    struct die_info *type_unit_die)
+{
+  dwarf2_per_objfile *per_objfile = reader->cu->per_objfile;
+  struct dwarf2_cu *cu = reader->cu;
+  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
+  struct signatured_type *sig_type;
+  struct type_unit_group *tu_group;
+  struct attribute *attr;
+  struct partial_die_info *first_die;
+  CORE_ADDR lowpc, highpc;
+  dwarf2_psymtab *pst;
+
+  gdb_assert (per_cu->is_debug_types);
+  sig_type = (struct signatured_type *) per_cu;
+
+  if (! type_unit_die->has_children)
+    return;
+
+  attr = type_unit_die->attr (DW_AT_stmt_list);
+  tu_group = get_type_unit_group (cu, attr);
+
+  if (tu_group->tus == nullptr)
+    tu_group->tus = new std::vector<signatured_type *>;
+  tu_group->tus->push_back (sig_type);
+
+  prepare_one_comp_unit (cu, type_unit_die, language_minimal);
+  pst = create_partial_symtab (per_cu, per_objfile, "");
+  pst->anonymous = true;
+
+  first_die = load_partial_dies (reader, info_ptr, 1);
+
+  lowpc = (CORE_ADDR) -1;
+  highpc = (CORE_ADDR) 0;
+  scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu);
+
+  pst->end ();
+}
+
+/* Struct used to sort TUs by their abbreviation table offset.  */
+
+struct tu_abbrev_offset
+{
+  tu_abbrev_offset (signatured_type *sig_type_, sect_offset abbrev_offset_)
+  : sig_type (sig_type_), abbrev_offset (abbrev_offset_)
+  {}
+
+  /* This is used when sorting.  */
+  bool operator< (const tu_abbrev_offset &other) const
+  {
+    return abbrev_offset < other.abbrev_offset;
+  }
+
+  signatured_type *sig_type;
+  sect_offset abbrev_offset;
+};
+
+/* Efficiently read all the type units.
+
+   The efficiency is because we sort TUs by the abbrev table they use and
+   only read each abbrev table once.  In one program there are 200K TUs
+   sharing 8K abbrev tables.
+
+   The main purpose of this function is to support building the
+   dwarf2_per_objfile->per_bfd->type_unit_groups table.
+   TUs typically share the DW_AT_stmt_list of the CU they came from, so we
+   can collapse the search space by grouping them by stmt_list.
+   The savings can be significant, in the same program from above the 200K TUs
+   share 8K stmt_list tables.
+
+   FUNC is expected to call get_type_unit_group, which will create the
+   struct type_unit_group if necessary and add it to
+   dwarf2_per_objfile->per_bfd->type_unit_groups.  */
+
+static void
+build_type_psymtabs (dwarf2_per_objfile *per_objfile)
+{
+  struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats;
+  abbrev_table_up abbrev_table;
+  sect_offset abbrev_offset;
+
+  /* It's up to the caller to not call us multiple times.  */
+  gdb_assert (per_objfile->per_bfd->type_unit_groups == NULL);
+
+  if (per_objfile->per_bfd->tu_stats.nr_tus == 0)
+    return;
+
+  /* TUs typically share abbrev tables, and there can be way more TUs than
+     abbrev tables.  Sort by abbrev table to reduce the number of times we
+     read each abbrev table in.
+     Alternatives are to punt or to maintain a cache of abbrev tables.
+     This is simpler and efficient enough for now.
+
+     Later we group TUs by their DW_AT_stmt_list value (as this defines the
+     symtab to use).  Typically TUs with the same abbrev offset have the same
+     stmt_list value too so in practice this should work well.
+
+     The basic algorithm here is:
+
+      sort TUs by abbrev table
+      for each TU with same abbrev table:
+	read abbrev table if first user
+	read TU top level DIE
+	  [IWBN if DWO skeletons had DW_AT_stmt_list]
+	call FUNC  */
+
+  dwarf_read_debug_printf ("Building type unit groups ...");
+
+  /* Sort in a separate table to maintain the order of all_comp_units
+     for .gdb_index: TU indices directly index all_type_units.  */
+  std::vector<tu_abbrev_offset> sorted_by_abbrev;
+  sorted_by_abbrev.reserve (per_objfile->per_bfd->tu_stats.nr_tus);
+
+  for (const auto &cu : per_objfile->per_bfd->all_comp_units)
+    {
+      if (cu->is_debug_types)
+	{
+	  auto sig_type = static_cast<signatured_type *> (cu.get ());
+	  sorted_by_abbrev.emplace_back
+	    (sig_type, read_abbrev_offset (per_objfile, sig_type->section,
+					   sig_type->sect_off));
+	}
+    }
+
+  std::sort (sorted_by_abbrev.begin (), sorted_by_abbrev.end ());
+
+  abbrev_offset = (sect_offset) ~(unsigned) 0;
+
+  for (const tu_abbrev_offset &tu : sorted_by_abbrev)
+    {
+      /* Switch to the next abbrev table if necessary.  */
+      if (abbrev_table == NULL
+	  || tu.abbrev_offset != abbrev_offset)
+	{
+	  abbrev_offset = tu.abbrev_offset;
+	  per_objfile->per_bfd->abbrev.read (per_objfile->objfile);
+	  abbrev_table =
+	    abbrev_table::read (&per_objfile->per_bfd->abbrev, abbrev_offset);
+	  ++tu_stats->nr_uniq_abbrev_tables;
+	}
+
+      cutu_reader reader (tu.sig_type, per_objfile,
+			  abbrev_table.get (), nullptr, false);
+      if (!reader.dummy_p)
+	build_type_psymtabs_reader (&reader, reader.info_ptr,
+				    reader.comp_unit_die);
+    }
+}
+
+/* Print collected type unit statistics.  */
+
+static void
+print_tu_stats (dwarf2_per_objfile *per_objfile)
+{
+  struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats;
+
+  dwarf_read_debug_printf ("Type unit statistics:");
+  dwarf_read_debug_printf ("  %d TUs", tu_stats->nr_tus);
+  dwarf_read_debug_printf ("  %d uniq abbrev tables",
+			   tu_stats->nr_uniq_abbrev_tables);
+  dwarf_read_debug_printf ("  %d symtabs from stmt_list entries",
+			   tu_stats->nr_symtabs);
+  dwarf_read_debug_printf ("  %d symtab sharers",
+			   tu_stats->nr_symtab_sharers);
+  dwarf_read_debug_printf ("  %d type units without a stmt_list",
+			   tu_stats->nr_stmt_less_type_units);
+  dwarf_read_debug_printf ("  %d all_type_units reallocs",
+			   tu_stats->nr_all_type_units_reallocs);
+}
+
+/* Traversal function for build_type_psymtabs.  */
+
+static int
+build_type_psymtab_dependencies (void **slot, void *info)
+{
+  dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) info;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+  struct type_unit_group *tu_group = (struct type_unit_group *) *slot;
+  dwarf2_psymtab *pst = tu_group->v.psymtab;
+  int len = (tu_group->tus == nullptr) ? 0 : tu_group->tus->size ();
+  int i;
+
+  gdb_assert (len > 0);
+  gdb_assert (tu_group->type_unit_group_p ());
+
+  pst->number_of_dependencies = len;
+  pst->dependencies = per_bfd->partial_symtabs->allocate_dependencies (len);
+  for (i = 0; i < len; ++i)
+    {
+      struct signatured_type *iter = tu_group->tus->at (i);
+      gdb_assert (iter->is_debug_types);
+      pst->dependencies[i] = iter->v.psymtab;
+      iter->type_unit_group = tu_group;
+    }
+
+  delete tu_group->tus;
+  tu_group->tus = nullptr;
+
+  return 1;
+}
+
+/* Traversal function for process_skeletonless_type_unit.
+   Read a TU in a DWO file and build partial symbols for it.  */
+
+static int
+process_skeletonless_type_unit (void **slot, void *info)
+{
+  struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot;
+  dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) info;
+
+  /* If this TU doesn't exist in the global table, add it and read it in.  */
+
+  if (per_objfile->per_bfd->signatured_types == NULL)
+    per_objfile->per_bfd->signatured_types = allocate_signatured_type_table ();
+
+  signatured_type find_entry (dwo_unit->signature);
+  slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (),
+			 &find_entry, INSERT);
+  /* If we've already seen this type there's nothing to do.  What's happening
+     is we're doing our own version of comdat-folding here.  */
+  if (*slot != NULL)
+    return 1;
+
+  /* This does the job that create_all_comp_units would have done for
+     this TU.  */
+  signatured_type *entry
+    = add_type_unit (per_objfile, dwo_unit->signature, slot);
+  fill_in_sig_entry_from_dwo_entry (per_objfile, entry, dwo_unit);
+  *slot = entry;
+
+  /* This does the job that build_type_psymtabs would have done.  */
+  cutu_reader reader (entry, per_objfile, nullptr, nullptr, false);
+  if (!reader.dummy_p)
+    build_type_psymtabs_reader (&reader, reader.info_ptr,
+				reader.comp_unit_die);
+
+  return 1;
+}
+
+/* Traversal function for process_skeletonless_type_units.  */
+
+static int
+process_dwo_file_for_skeletonless_type_units (void **slot, void *info)
+{
+  struct dwo_file *dwo_file = (struct dwo_file *) *slot;
+
+  if (dwo_file->tus != NULL)
+    htab_traverse_noresize (dwo_file->tus.get (),
+			    process_skeletonless_type_unit, info);
+
+  return 1;
+}
+
+/* Scan all TUs of DWO files, verifying we've processed them.
+   This is needed in case a TU was emitted without its skeleton.
+   Note: This can't be done until we know what all the DWO files are.  */
+
+static void
+process_skeletonless_type_units (dwarf2_per_objfile *per_objfile)
+{
+  /* Skeletonless TUs in DWP files without .gdb_index is not supported yet.  */
+  if (get_dwp_file (per_objfile) == NULL
+      && per_objfile->per_bfd->dwo_files != NULL)
+    {
+      htab_traverse_noresize (per_objfile->per_bfd->dwo_files.get (),
+			      process_dwo_file_for_skeletonless_type_units,
+			      per_objfile);
+    }
+}
+
+/* Compute the 'user' field for each psymtab in DWARF2_PER_OBJFILE.  */
+
+static void
+set_partial_user (dwarf2_per_objfile *per_objfile)
+{
+  for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
+    {
+      dwarf2_psymtab *pst = per_cu->v.psymtab;
+
+      if (pst == NULL)
+	continue;
+
+      for (int j = 0; j < pst->number_of_dependencies; ++j)
+	{
+	  /* Set the 'user' field only if it is not already set.  */
+	  if (pst->dependencies[j]->user == NULL)
+	    pst->dependencies[j]->user = pst;
+	}
+    }
+}
+
+/* Build the partial symbol table by doing a quick pass through the
+   .debug_info and .debug_abbrev sections.  */
+
+static void
+dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+
+  dwarf_read_debug_printf ("Building psymtabs of objfile %s ...",
+			   objfile_name (objfile));
+
+  scoped_restore restore_reading_psyms
+    = make_scoped_restore (&per_bfd->reading_partial_symbols, true);
+
+  per_bfd->info.read (objfile);
+
+  /* Any cached compilation units will be linked by the per-objfile
+     read_in_chain.  Make sure to free them when we're done.  */
+  free_cached_comp_units freer (per_objfile);
+
+  create_all_comp_units (per_objfile);
+  build_type_psymtabs (per_objfile);
+
+  /* Create a temporary address map on a temporary obstack.  We later
+     copy this to the final obstack.  */
+  auto_obstack temp_obstack;
+
+  scoped_restore save_psymtabs_addrmap
+    = make_scoped_restore (&per_bfd->partial_symtabs->psymtabs_addrmap,
+			   addrmap_create_mutable (&temp_obstack));
+
+  for (const auto &per_cu : per_bfd->all_comp_units)
+    {
+      if (per_cu->v.psymtab != NULL)
+	/* In case a forward DW_TAG_imported_unit has read the CU already.  */
+	continue;
+      process_psymtab_comp_unit (per_cu.get (), per_objfile, false,
+				 language_minimal);
+    }
+
+  /* This has to wait until we read the CUs, we need the list of DWOs.  */
+  process_skeletonless_type_units (per_objfile);
+
+  /* Now that all TUs have been processed we can fill in the dependencies.  */
+  if (per_bfd->type_unit_groups != NULL)
+    {
+      htab_traverse_noresize (per_bfd->type_unit_groups.get (),
+			      build_type_psymtab_dependencies, per_objfile);
+    }
+
+  if (dwarf_read_debug > 0)
+    print_tu_stats (per_objfile);
+
+  set_partial_user (per_objfile);
+
+  per_bfd->partial_symtabs->psymtabs_addrmap
+    = addrmap_create_fixed (per_bfd->partial_symtabs->psymtabs_addrmap,
+			    per_bfd->partial_symtabs->obstack ());
+  /* At this point we want to keep the address map.  */
+  save_psymtabs_addrmap.release ();
+
+  dwarf_read_debug_printf ("Done building psymtabs of %s",
+			   objfile_name (objfile));
+}
+
+/* Load the partial DIEs for a secondary CU into memory.
+   This is also used when rereading a primary CU with load_all_dies.  */
+
+static void
+load_partial_comp_unit (dwarf2_per_cu_data *this_cu,
+			dwarf2_per_objfile *per_objfile,
+			dwarf2_cu *existing_cu)
+{
+  cutu_reader reader (this_cu, per_objfile, nullptr, existing_cu, false);
+
+  if (!reader.dummy_p)
+    {
+      prepare_one_comp_unit (reader.cu, reader.comp_unit_die,
+			     language_minimal);
+
+      /* Check if comp unit has_children.
+	 If so, read the rest of the partial symbols from this comp unit.
+	 If not, there's no more debug_info for this comp unit.  */
+      if (reader.comp_unit_die->has_children)
+	load_partial_dies (&reader, reader.info_ptr, 0);
+
+      reader.keep ();
+    }
+}
+
+static void
+read_comp_units_from_section (dwarf2_per_objfile *per_objfile,
+			      struct dwarf2_section_info *section,
+			      struct dwarf2_section_info *abbrev_section,
+			      unsigned int is_dwz,
+			      htab_up &types_htab,
+			      rcuh_kind section_kind)
+{
+  const gdb_byte *info_ptr;
+  struct objfile *objfile = per_objfile->objfile;
+
+  dwarf_read_debug_printf ("Reading %s for %s",
+			   section->get_name (),
+			   section->get_file_name ());
+
+  section->read (objfile);
+
+  info_ptr = section->buffer;
+
+  while (info_ptr < section->buffer + section->size)
+    {
+      dwarf2_per_cu_data_up this_cu;
+
+      sect_offset sect_off = (sect_offset) (info_ptr - section->buffer);
+
+      comp_unit_head cu_header;
+      read_and_check_comp_unit_head (per_objfile, &cu_header, section,
+				     abbrev_section, info_ptr,
+				     section_kind);
+
+      /* Save the compilation unit for later lookup.  */
+      if (cu_header.unit_type != DW_UT_type)
+	this_cu = per_objfile->per_bfd->allocate_per_cu ();
+      else
+	{
+	  if (types_htab == nullptr)
+	    types_htab = allocate_signatured_type_table ();
+
+	  auto sig_type = per_objfile->per_bfd->allocate_signatured_type
+	    (cu_header.signature);
+	  signatured_type *sig_ptr = sig_type.get ();
+	  sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
+	  this_cu.reset (sig_type.release ());
+
+	  void **slot = htab_find_slot (types_htab.get (), sig_ptr, INSERT);
+	  gdb_assert (slot != nullptr);
+	  if (*slot != nullptr)
+	    complaint (_("debug type entry at offset %s is duplicate to"
+			 " the entry at offset %s, signature %s"),
+		       sect_offset_str (sect_off),
+		       sect_offset_str (sig_ptr->sect_off),
+		       hex_string (sig_ptr->signature));
+	  *slot = sig_ptr;
+	}
+      this_cu->sect_off = sect_off;
+      this_cu->length = cu_header.length + cu_header.initial_length_size;
+      this_cu->is_dwz = is_dwz;
+      this_cu->section = section;
+
+      info_ptr = info_ptr + this_cu->length;
+      per_objfile->per_bfd->all_comp_units.push_back (std::move (this_cu));
+    }
+}
+
+/* Create a list of all compilation units in OBJFILE.
+   This is only done for -readnow and building partial symtabs.  */
+
+static void
+create_all_comp_units (dwarf2_per_objfile *per_objfile)
+{
+  htab_up types_htab;
+
+  read_comp_units_from_section (per_objfile, &per_objfile->per_bfd->info,
+				&per_objfile->per_bfd->abbrev, 0,
+				types_htab, rcuh_kind::COMPILE);
+  for (dwarf2_section_info &section : per_objfile->per_bfd->types)
+    read_comp_units_from_section (per_objfile, &section,
+				  &per_objfile->per_bfd->abbrev, 0,
+				  types_htab, rcuh_kind::TYPE);
+
+  dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd);
+  if (dwz != NULL)
+    read_comp_units_from_section (per_objfile, &dwz->info, &dwz->abbrev, 1,
+				  types_htab, rcuh_kind::COMPILE);
+
+  per_objfile->per_bfd->signatured_types = std::move (types_htab);
+}
+
+/* Process all loaded DIEs for compilation unit CU, starting at
+   FIRST_DIE.  The caller should pass SET_ADDRMAP == 1 if the compilation
+   unit DIE did not have PC info (DW_AT_low_pc and DW_AT_high_pc, or
+   DW_AT_ranges).  See the comments of add_partial_subprogram on how
+   SET_ADDRMAP is used and how *LOWPC and *HIGHPC are updated.  */
+
+static void
+scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
+		      CORE_ADDR *highpc, int set_addrmap,
+		      struct dwarf2_cu *cu)
+{
+  struct partial_die_info *pdi;
+
+  /* Now, march along the PDI's, descending into ones which have
+     interesting children but skipping the children of the other ones,
+     until we reach the end of the compilation unit.  */
+
+  pdi = first_die;
+
+  while (pdi != NULL)
+    {
+      pdi->fixup (cu);
+
+      /* Anonymous namespaces or modules have no name but have interesting
+	 children, so we need to look at them.  Ditto for anonymous
+	 enums.  */
+
+      if (pdi->raw_name != NULL || pdi->tag == DW_TAG_namespace
+	  || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type
+	  || pdi->tag == DW_TAG_imported_unit
+	  || pdi->tag == DW_TAG_inlined_subroutine)
+	{
+	  switch (pdi->tag)
+	    {
+	    case DW_TAG_subprogram:
+	    case DW_TAG_inlined_subroutine:
+	      add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu);
+	      if (cu->per_cu->lang == language_cplus)
+		scan_partial_symbols (pdi->die_child, lowpc, highpc,
+				      set_addrmap, cu);
+	      break;
+	    case DW_TAG_constant:
+	    case DW_TAG_variable:
+	    case DW_TAG_typedef:
+	    case DW_TAG_union_type:
+	      if (!pdi->is_declaration
+		  || (pdi->tag == DW_TAG_variable && pdi->is_external))
+		{
+		  add_partial_symbol (pdi, cu);
+		}
+	      break;
+	    case DW_TAG_class_type:
+	    case DW_TAG_interface_type:
+	    case DW_TAG_structure_type:
+	      if (!pdi->is_declaration)
+		{
+		  add_partial_symbol (pdi, cu);
+		}
+	      if ((cu->per_cu->lang == language_rust
+		   || cu->per_cu->lang == language_cplus)
+		  && pdi->has_children)
+		scan_partial_symbols (pdi->die_child, lowpc, highpc,
+				      set_addrmap, cu);
+	      break;
+	    case DW_TAG_enumeration_type:
+	      if (!pdi->is_declaration)
+		add_partial_enumeration (pdi, cu);
+	      break;
+	    case DW_TAG_base_type:
+	    case DW_TAG_subrange_type:
+	      /* File scope base type definitions are added to the partial
+		 symbol table.  */
+	      add_partial_symbol (pdi, cu);
+	      break;
+	    case DW_TAG_namespace:
+	      add_partial_namespace (pdi, lowpc, highpc, set_addrmap, cu);
+	      break;
+	    case DW_TAG_module:
+	      if (!pdi->is_declaration)
+		add_partial_module (pdi, lowpc, highpc, set_addrmap, cu);
+	      break;
+	    case DW_TAG_imported_unit:
+	      {
+		struct dwarf2_per_cu_data *per_cu;
+
+		/* For now we don't handle imported units in type units.  */
+		if (cu->per_cu->is_debug_types)
+		  {
+		    error (_("Dwarf Error: DW_TAG_imported_unit is not"
+			     " supported in type units [in module %s]"),
+			   objfile_name (cu->per_objfile->objfile));
+		  }
+
+		per_cu = dwarf2_find_containing_comp_unit
+			   (pdi->d.sect_off, pdi->is_dwz, cu->per_objfile);
+
+		/* Go read the partial unit, if needed.  */
+		if (per_cu->v.psymtab == NULL)
+		  process_psymtab_comp_unit (per_cu, cu->per_objfile, true,
+					     cu->per_cu->lang);
+
+		cu->per_cu->imported_symtabs_push (per_cu);
+	      }
+	      break;
+	    case DW_TAG_imported_declaration:
+	      add_partial_symbol (pdi, cu);
+	      break;
+	    default:
+	      break;
+	    }
+	}
+
+      /* If the die has a sibling, skip to the sibling.  */
+
+      pdi = pdi->die_sibling;
+    }
+}
+
+/* Functions used to compute the fully scoped name of a partial DIE.
+
+   Normally, this is simple.  For C++, the parent DIE's fully scoped
+   name is concatenated with "::" and the partial DIE's name.
+   Enumerators are an exception; they use the scope of their parent
+   enumeration type, i.e. the name of the enumeration type is not
+   prepended to the enumerator.
+
+   There are two complexities.  One is DW_AT_specification; in this
+   case "parent" means the parent of the target of the specification,
+   instead of the direct parent of the DIE.  The other is compilers
+   which do not emit DW_TAG_namespace; in this case we try to guess
+   the fully qualified name of structure types from their members'
+   linkage names.  This must be done using the DIE's children rather
+   than the children of any DW_AT_specification target.  We only need
+   to do this for structures at the top level, i.e. if the target of
+   any DW_AT_specification (if any; otherwise the DIE itself) does not
+   have a parent.  */
+
+/* Compute the scope prefix associated with PDI's parent, in
+   compilation unit CU.  The result will be allocated on CU's
+   comp_unit_obstack, or a copy of the already allocated PDI->NAME
+   field.  NULL is returned if no prefix is necessary.  */
+static const char *
+partial_die_parent_scope (struct partial_die_info *pdi,
+			  struct dwarf2_cu *cu)
+{
+  const char *grandparent_scope;
+  struct partial_die_info *parent, *real_pdi;
+
+  /* We need to look at our parent DIE; if we have a DW_AT_specification,
+     then this means the parent of the specification DIE.  */
+
+  real_pdi = pdi;
+  while (real_pdi->has_specification)
+    {
+      auto res = find_partial_die (real_pdi->spec_offset,
+				   real_pdi->spec_is_dwz, cu);
+      real_pdi = res.pdi;
+      cu = res.cu;
+    }
+
+  parent = real_pdi->die_parent;
+  if (parent == NULL)
+    return NULL;
+
+  if (parent->scope_set)
+    return parent->scope;
+
+  parent->fixup (cu);
+
+  grandparent_scope = partial_die_parent_scope (parent, cu);
+
+  /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
+     DW_TAG_namespace DIEs with a name of "::" for the global namespace.
+     Work around this problem here.  */
+  if (cu->per_cu->lang == language_cplus
+      && parent->tag == DW_TAG_namespace
+      && strcmp (parent->name (cu), "::") == 0
+      && grandparent_scope == NULL)
+    {
+      parent->scope = NULL;
+      parent->scope_set = 1;
+      return NULL;
+    }
+
+  /* Nested subroutines in Fortran get a prefix.  */
+  if (pdi->tag == DW_TAG_enumerator)
+    /* Enumerators should not get the name of the enumeration as a prefix.  */
+    parent->scope = grandparent_scope;
+  else if (parent->tag == DW_TAG_namespace
+      || parent->tag == DW_TAG_module
+      || parent->tag == DW_TAG_structure_type
+      || parent->tag == DW_TAG_class_type
+      || parent->tag == DW_TAG_interface_type
+      || parent->tag == DW_TAG_union_type
+      || parent->tag == DW_TAG_enumeration_type
+      || (cu->per_cu->lang == language_fortran
+	  && parent->tag == DW_TAG_subprogram
+	  && pdi->tag == DW_TAG_subprogram))
+    {
+      if (grandparent_scope == NULL)
+	parent->scope = parent->name (cu);
+      else
+	parent->scope = typename_concat (&cu->comp_unit_obstack,
+					 grandparent_scope,
+					 parent->name (cu), 0, cu);
+    }
+  else
+    {
+      /* FIXME drow/2004-04-01: What should we be doing with
+	 function-local names?  For partial symbols, we should probably be
+	 ignoring them.  */
+      complaint (_("unhandled containing DIE tag %s for DIE at %s"),
+		 dwarf_tag_name (parent->tag),
+		 sect_offset_str (pdi->sect_off));
+      parent->scope = grandparent_scope;
+    }
+
+  parent->scope_set = 1;
+  return parent->scope;
+}
+
+/* Return the fully scoped name associated with PDI, from compilation unit
+   CU.  The result will be allocated with malloc.  */
+
+static gdb::unique_xmalloc_ptr<char>
+partial_die_full_name (struct partial_die_info *pdi,
+		       struct dwarf2_cu *cu)
+{
+  const char *parent_scope;
+
+  /* If this is a template instantiation, we can not work out the
+     template arguments from partial DIEs.  So, unfortunately, we have
+     to go through the full DIEs.  At least any work we do building
+     types here will be reused if full symbols are loaded later.  */
+  if (pdi->has_template_arguments)
+    {
+      pdi->fixup (cu);
+
+      if (pdi->name (cu) != NULL && strchr (pdi->name (cu), '<') == NULL)
+	{
+	  struct die_info *die;
+	  struct attribute attr;
+	  struct dwarf2_cu *ref_cu = cu;
+
+	  /* DW_FORM_ref_addr is using section offset.  */
+	  attr.name = (enum dwarf_attribute) 0;
+	  attr.form = DW_FORM_ref_addr;
+	  attr.u.unsnd = to_underlying (pdi->sect_off);
+	  die = follow_die_ref (NULL, &attr, &ref_cu);
+
+	  return make_unique_xstrdup (dwarf2_full_name (NULL, die, ref_cu));
+	}
+    }
+
+  parent_scope = partial_die_parent_scope (pdi, cu);
+  if (parent_scope == NULL)
+    return NULL;
+  else
+    return gdb::unique_xmalloc_ptr<char> (typename_concat (NULL, parent_scope,
+							   pdi->name (cu),
+							   0, cu));
+}
+
+static void
+add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  CORE_ADDR addr = 0;
+  const char *actual_name = NULL;
+  CORE_ADDR baseaddr;
+
+  baseaddr = objfile->text_section_offset ();
+
+  gdb::unique_xmalloc_ptr<char> built_actual_name
+    = partial_die_full_name (pdi, cu);
+  if (built_actual_name != NULL)
+    actual_name = built_actual_name.get ();
+
+  if (actual_name == NULL)
+    actual_name = pdi->name (cu);
+
+  partial_symbol psymbol;
+  memset (&psymbol, 0, sizeof (psymbol));
+  psymbol.ginfo.set_language (cu->per_cu->lang,
+			      &objfile->objfile_obstack);
+  psymbol.ginfo.set_section_index (-1);
+
+  /* The code below indicates that the psymbol should be installed by
+     setting this.  */
+  gdb::optional<psymbol_placement> where;
+
+  switch (pdi->tag)
+    {
+    case DW_TAG_inlined_subroutine:
+    case DW_TAG_subprogram:
+      addr = (gdbarch_adjust_dwarf2_addr (gdbarch, pdi->lowpc + baseaddr)
+	      - baseaddr);
+      if (pdi->is_external
+	  || cu->per_cu->lang == language_ada
+	  || (cu->per_cu->lang == language_fortran
+	      && pdi->die_parent != NULL
+	      && pdi->die_parent->tag == DW_TAG_subprogram))
+	{
+	  /* Normally, only "external" DIEs are part of the global scope.
+	     But in Ada and Fortran, we want to be able to access nested
+	     procedures globally.  So all Ada and Fortran subprograms are
+	     stored in the global scope.  */
+	  where = psymbol_placement::GLOBAL;
+	}
+      else
+	where = psymbol_placement::STATIC;
+
+      psymbol.domain = VAR_DOMAIN;
+      psymbol.aclass = LOC_BLOCK;
+      psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile));
+      psymbol.ginfo.value.address = addr;
+
+      if (pdi->main_subprogram && actual_name != NULL)
+	set_objfile_main_name (objfile, actual_name, cu->per_cu->lang);
+      break;
+    case DW_TAG_constant:
+      psymbol.domain = VAR_DOMAIN;
+      psymbol.aclass = LOC_STATIC;
+      where = (pdi->is_external
+	       ? psymbol_placement::GLOBAL
+	       : psymbol_placement::STATIC);
+      break;
+    case DW_TAG_variable:
+      if (pdi->d.locdesc)
+	addr = decode_locdesc (pdi->d.locdesc, cu);
+
+      if (pdi->d.locdesc
+	  && addr == 0
+	  && !per_objfile->per_bfd->has_section_at_zero)
+	{
+	  /* A global or static variable may also have been stripped
+	     out by the linker if unused, in which case its address
+	     will be nullified; do not add such variables into partial
+	     symbol table then.  */
+	}
+      else if (pdi->is_external)
+	{
+	  /* Global Variable.
+	     Don't enter into the minimal symbol tables as there is
+	     a minimal symbol table entry from the ELF symbols already.
+	     Enter into partial symbol table if it has a location
+	     descriptor or a type.
+	     If the location descriptor is missing, new_symbol will create
+	     a LOC_UNRESOLVED symbol, the address of the variable will then
+	     be determined from the minimal symbol table whenever the variable
+	     is referenced.
+	     The address for the partial symbol table entry is not
+	     used by GDB, but it comes in handy for debugging partial symbol
+	     table building.  */
+
+	  if (pdi->d.locdesc || pdi->has_type)
+	    {
+	      psymbol.domain = VAR_DOMAIN;
+	      psymbol.aclass = LOC_STATIC;
+	      psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile));
+	      psymbol.ginfo.value.address = addr;
+	      where = psymbol_placement::GLOBAL;
+	    }
+	}
+      else
+	{
+	  int has_loc = pdi->d.locdesc != NULL;
+
+	  /* Static Variable.  Skip symbols whose value we cannot know (those
+	     without location descriptors or constant values).  */
+	  if (!has_loc && !pdi->has_const_value)
+	    return;
+
+	  psymbol.domain = VAR_DOMAIN;
+	  psymbol.aclass = LOC_STATIC;
+	  psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile));
+	  if (has_loc)
+	    psymbol.ginfo.value.address = addr;
+	  where = psymbol_placement::STATIC;
+	}
+      break;
+    case DW_TAG_array_type:
+    case DW_TAG_typedef:
+    case DW_TAG_base_type:
+    case DW_TAG_subrange_type:
+      psymbol.domain = VAR_DOMAIN;
+      psymbol.aclass = LOC_TYPEDEF;
+      where = psymbol_placement::STATIC;
+      break;
+    case DW_TAG_imported_declaration:
+    case DW_TAG_namespace:
+      psymbol.domain = VAR_DOMAIN;
+      psymbol.aclass = LOC_TYPEDEF;
+      where = psymbol_placement::GLOBAL;
+      break;
+    case DW_TAG_module:
+      /* With Fortran 77 there might be a "BLOCK DATA" module
+	 available without any name.  If so, we skip the module as it
+	 doesn't bring any value.  */
+      if (actual_name != nullptr)
+	{
+	  psymbol.domain = MODULE_DOMAIN;
+	  psymbol.aclass = LOC_TYPEDEF;
+	  where = psymbol_placement::GLOBAL;
+	}
+      break;
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+    case DW_TAG_enumeration_type:
+      /* Skip external references.  The DWARF standard says in the section
+	 about "Structure, Union, and Class Type Entries": "An incomplete
+	 structure, union or class type is represented by a structure,
+	 union or class entry that does not have a byte size attribute
+	 and that has a DW_AT_declaration attribute."  */
+      if (!pdi->has_byte_size && pdi->is_declaration)
+	return;
+
+      /* NOTE: carlton/2003-10-07: See comment in new_symbol about
+	 static vs. global.  */
+      psymbol.domain = STRUCT_DOMAIN;
+      psymbol.aclass = LOC_TYPEDEF;
+      where = (cu->per_cu->lang == language_cplus
+	       ? psymbol_placement::GLOBAL
+	       : psymbol_placement::STATIC);
+      break;
+    case DW_TAG_enumerator:
+      psymbol.domain = VAR_DOMAIN;
+      psymbol.aclass = LOC_CONST;
+      where = (cu->per_cu->lang == language_cplus
+	       ? psymbol_placement::GLOBAL
+	       : psymbol_placement::STATIC);
+      break;
+    default:
+      break;
+    }
+
+  if (where.has_value ())
+    {
+      if (built_actual_name != nullptr)
+	actual_name = objfile->intern (actual_name);
+      if (pdi->linkage_name == nullptr
+	  || cu->per_cu->lang == language_ada)
+	psymbol.ginfo.set_linkage_name (actual_name);
+      else
+	{
+	  psymbol.ginfo.set_demangled_name (actual_name,
+					    &objfile->objfile_obstack);
+	  psymbol.ginfo.set_linkage_name (pdi->linkage_name);
+	}
+      cu->per_cu->v.psymtab->add_psymbol
+	(psymbol, *where, per_objfile->per_bfd->partial_symtabs.get (),
+	 objfile);
+    }
+}
+
+/* Read a partial die corresponding to a namespace; also, add a symbol
+   corresponding to that namespace to the symbol table.  NAMESPACE is
+   the name of the enclosing namespace.  */
+
+static void
+add_partial_namespace (struct partial_die_info *pdi,
+		       CORE_ADDR *lowpc, CORE_ADDR *highpc,
+		       int set_addrmap, struct dwarf2_cu *cu)
+{
+  /* Add a symbol for the namespace.  */
+
+  add_partial_symbol (pdi, cu);
+
+  /* Now scan partial symbols in that namespace.  */
+
+  if (pdi->has_children)
+    scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu);
+}
+
+/* Read a partial die corresponding to a Fortran module.  */
+
+static void
+add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc,
+		    CORE_ADDR *highpc, int set_addrmap, struct dwarf2_cu *cu)
+{
+  /* Add a symbol for the namespace.  */
+
+  add_partial_symbol (pdi, cu);
+
+  /* Now scan partial symbols in that module.  */
+
+  if (pdi->has_children)
+    scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu);
+}
+
+/* Read a partial die corresponding to a subprogram or an inlined
+   subprogram and create a partial symbol for that subprogram.
+   When the CU language allows it, this routine also defines a partial
+   symbol for each nested subprogram that this subprogram contains.
+   If SET_ADDRMAP is true, record the covered ranges in the addrmap.
+   Set *LOWPC and *HIGHPC to the lowest and highest PC values found in PDI.
+
+   PDI may also be a lexical block, in which case we simply search
+   recursively for subprograms defined inside that lexical block.
+   Again, this is only performed when the CU language allows this
+   type of definitions.  */
+
+static void
+add_partial_subprogram (struct partial_die_info *pdi,
+			CORE_ADDR *lowpc, CORE_ADDR *highpc,
+			int set_addrmap, struct dwarf2_cu *cu)
+{
+  if (pdi->tag == DW_TAG_subprogram || pdi->tag == DW_TAG_inlined_subroutine)
+    {
+      if (pdi->has_pc_info)
+	{
+	  if (pdi->lowpc < *lowpc)
+	    *lowpc = pdi->lowpc;
+	  if (pdi->highpc > *highpc)
+	    *highpc = pdi->highpc;
+	  if (set_addrmap)
+	    {
+	      struct objfile *objfile = cu->per_objfile->objfile;
+	      dwarf2_per_bfd *per_bfd = cu->per_objfile->per_bfd;
+	      struct gdbarch *gdbarch = objfile->arch ();
+	      CORE_ADDR baseaddr;
+	      CORE_ADDR this_highpc;
+	      CORE_ADDR this_lowpc;
+
+	      baseaddr = objfile->text_section_offset ();
+	      this_lowpc
+		= (gdbarch_adjust_dwarf2_addr (gdbarch,
+					       pdi->lowpc + baseaddr)
+		   - baseaddr);
+	      this_highpc
+		= (gdbarch_adjust_dwarf2_addr (gdbarch,
+					       pdi->highpc + baseaddr)
+		   - baseaddr);
+	      addrmap_set_empty (per_bfd->partial_symtabs->psymtabs_addrmap,
+				 this_lowpc, this_highpc - 1,
+				 cu->per_cu->v.psymtab);
+	    }
+	}
+
+      if (pdi->has_pc_info || (!pdi->is_external && pdi->may_be_inlined))
+	{
+	  if (!pdi->is_declaration)
+	    /* Ignore subprogram DIEs that do not have a name, they are
+	       illegal.  Do not emit a complaint at this point, we will
+	       do so when we convert this psymtab into a symtab.  */
+	    if (pdi->name (cu))
+	      add_partial_symbol (pdi, cu);
+	}
+    }
+
+  if (! pdi->has_children)
+    return;
+
+  if (cu->per_cu->lang == language_ada
+      || cu->per_cu->lang == language_fortran)
+    {
+      pdi = pdi->die_child;
+      while (pdi != NULL)
+	{
+	  pdi->fixup (cu);
+	  if (pdi->tag == DW_TAG_subprogram
+	      || pdi->tag == DW_TAG_inlined_subroutine
+	      || pdi->tag == DW_TAG_lexical_block)
+	    add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu);
+	  pdi = pdi->die_sibling;
+	}
+    }
+}
+
+/* Read a partial die corresponding to an enumeration type.  */
+
+static void
+add_partial_enumeration (struct partial_die_info *enum_pdi,
+			 struct dwarf2_cu *cu)
+{
+  struct partial_die_info *pdi;
+
+  if (enum_pdi->name (cu) != NULL)
+    add_partial_symbol (enum_pdi, cu);
+
+  pdi = enum_pdi->die_child;
+  while (pdi)
+    {
+      if (pdi->tag != DW_TAG_enumerator || pdi->raw_name == NULL)
+	complaint (_("malformed enumerator DIE ignored"));
+      else
+	add_partial_symbol (pdi, cu);
+      pdi = pdi->die_sibling;
+    }
+}
+
+/* Return the initial uleb128 in the die at INFO_PTR.  */
+
+static unsigned int
+peek_abbrev_code (bfd *abfd, const gdb_byte *info_ptr)
+{
+  unsigned int bytes_read;
+
+  return read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+}
+
+/* Read the initial uleb128 in the die at INFO_PTR in compilation unit
+   READER::CU.  Use READER::ABBREV_TABLE to lookup any abbreviation.
+
+   Return the corresponding abbrev, or NULL if the number is zero (indicating
+   an empty DIE).  In either case *BYTES_READ will be set to the length of
+   the initial number.  */
+
+static const struct abbrev_info *
+peek_die_abbrev (const die_reader_specs &reader,
+		 const gdb_byte *info_ptr, unsigned int *bytes_read)
+{
+  dwarf2_cu *cu = reader.cu;
+  bfd *abfd = reader.abfd;
+  unsigned int abbrev_number
+    = read_unsigned_leb128 (abfd, info_ptr, bytes_read);
+
+  if (abbrev_number == 0)
+    return NULL;
+
+  const abbrev_info *abbrev
+    = reader.abbrev_table->lookup_abbrev (abbrev_number);
+  if (!abbrev)
+    {
+      error (_("Dwarf Error: Could not find abbrev number %d in %s"
+	       " at offset %s [in module %s]"),
+	     abbrev_number, cu->per_cu->is_debug_types ? "TU" : "CU",
+	     sect_offset_str (cu->header.sect_off), bfd_get_filename (abfd));
+    }
+
+  return abbrev;
+}
+
+/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER.
+   Returns a pointer to the end of a series of DIEs, terminated by an empty
+   DIE.  Any children of the skipped DIEs will also be skipped.  */
+
+static const gdb_byte *
+skip_children (const struct die_reader_specs *reader, const gdb_byte *info_ptr)
+{
+  while (1)
+    {
+      unsigned int bytes_read;
+      const abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr,
+						   &bytes_read);
+
+      if (abbrev == NULL)
+	return info_ptr + bytes_read;
+      else
+	info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
+    }
+}
+
+/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER.
+   INFO_PTR should point just after the initial uleb128 of a DIE, and the
+   abbrev corresponding to that skipped uleb128 should be passed in
+   ABBREV.  Returns a pointer to this DIE's sibling, skipping any
+   children.  */
+
+static const gdb_byte *
+skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr,
+	      const struct abbrev_info *abbrev)
+{
+  unsigned int bytes_read;
+  struct attribute attr;
+  bfd *abfd = reader->abfd;
+  struct dwarf2_cu *cu = reader->cu;
+  const gdb_byte *buffer = reader->buffer;
+  const gdb_byte *buffer_end = reader->buffer_end;
+  unsigned int form, i;
+
+  for (i = 0; i < abbrev->num_attrs; i++)
+    {
+      /* The only abbrev we care about is DW_AT_sibling.  */
+      if (abbrev->attrs[i].name == DW_AT_sibling)
+	{
+	  read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
+	  if (attr.form == DW_FORM_ref_addr)
+	    complaint (_("ignoring absolute DW_AT_sibling"));
+	  else
+	    {
+	      sect_offset off = attr.get_ref_die_offset ();
+	      const gdb_byte *sibling_ptr = buffer + to_underlying (off);
+
+	      if (sibling_ptr < info_ptr)
+		complaint (_("DW_AT_sibling points backwards"));
+	      else if (sibling_ptr > reader->buffer_end)
+		reader->die_section->overflow_complaint ();
+	      else
+		return sibling_ptr;
+	    }
+	}
+
+      /* If it isn't DW_AT_sibling, skip this attribute.  */
+      form = abbrev->attrs[i].form;
+    skip_attribute:
+      switch (form)
+	{
+	case DW_FORM_ref_addr:
+	  /* In DWARF 2, DW_FORM_ref_addr is address sized; in DWARF 3
+	     and later it is offset sized.  */
+	  if (cu->header.version == 2)
+	    info_ptr += cu->header.addr_size;
+	  else
+	    info_ptr += cu->header.offset_size;
+	  break;
+	case DW_FORM_GNU_ref_alt:
+	  info_ptr += cu->header.offset_size;
+	  break;
+	case DW_FORM_addr:
+	  info_ptr += cu->header.addr_size;
+	  break;
+	case DW_FORM_data1:
+	case DW_FORM_ref1:
+	case DW_FORM_flag:
+	case DW_FORM_strx1:
+	  info_ptr += 1;
+	  break;
+	case DW_FORM_flag_present:
+	case DW_FORM_implicit_const:
+	  break;
+	case DW_FORM_data2:
+	case DW_FORM_ref2:
+	case DW_FORM_strx2:
+	  info_ptr += 2;
+	  break;
+	case DW_FORM_strx3:
+	  info_ptr += 3;
+	  break;
+	case DW_FORM_data4:
+	case DW_FORM_ref4:
+	case DW_FORM_strx4:
+	  info_ptr += 4;
+	  break;
+	case DW_FORM_data8:
+	case DW_FORM_ref8:
+	case DW_FORM_ref_sig8:
+	  info_ptr += 8;
+	  break;
+	case DW_FORM_data16:
+	  info_ptr += 16;
+	  break;
+	case DW_FORM_string:
+	  read_direct_string (abfd, info_ptr, &bytes_read);
+	  info_ptr += bytes_read;
+	  break;
+	case DW_FORM_sec_offset:
+	case DW_FORM_strp:
+	case DW_FORM_GNU_strp_alt:
+	  info_ptr += cu->header.offset_size;
+	  break;
+	case DW_FORM_exprloc:
+	case DW_FORM_block:
+	  info_ptr += read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+	  info_ptr += bytes_read;
+	  break;
+	case DW_FORM_block1:
+	  info_ptr += 1 + read_1_byte (abfd, info_ptr);
+	  break;
+	case DW_FORM_block2:
+	  info_ptr += 2 + read_2_bytes (abfd, info_ptr);
+	  break;
+	case DW_FORM_block4:
+	  info_ptr += 4 + read_4_bytes (abfd, info_ptr);
+	  break;
+	case DW_FORM_addrx:
+	case DW_FORM_strx:
+	case DW_FORM_sdata:
+	case DW_FORM_udata:
+	case DW_FORM_ref_udata:
+	case DW_FORM_GNU_addr_index:
+	case DW_FORM_GNU_str_index:
+	case DW_FORM_rnglistx:
+	case DW_FORM_loclistx:
+	  info_ptr = safe_skip_leb128 (info_ptr, buffer_end);
+	  break;
+	case DW_FORM_indirect:
+	  form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+	  info_ptr += bytes_read;
+	  /* We need to continue parsing from here, so just go back to
+	     the top.  */
+	  goto skip_attribute;
+
+	default:
+	  error (_("Dwarf Error: Cannot handle %s "
+		   "in DWARF reader [in module %s]"),
+		 dwarf_form_name (form),
+		 bfd_get_filename (abfd));
+	}
+    }
+
+  if (abbrev->has_children)
+    return skip_children (reader, info_ptr);
+  else
+    return info_ptr;
+}
+
+/* Locate ORIG_PDI's sibling.
+   INFO_PTR should point to the start of the next DIE after ORIG_PDI.  */
+
+static const gdb_byte *
+locate_pdi_sibling (const struct die_reader_specs *reader,
+		    struct partial_die_info *orig_pdi,
+		    const gdb_byte *info_ptr)
+{
+  /* Do we know the sibling already?  */
+
+  if (orig_pdi->sibling)
+    return orig_pdi->sibling;
+
+  /* Are there any children to deal with?  */
+
+  if (!orig_pdi->has_children)
+    return info_ptr;
+
+  /* Skip the children the long way.  */
+
+  return skip_children (reader, info_ptr);
+}
+
+/* Expand this partial symbol table into a full symbol table.  SELF is
+   not NULL.  */
+
+void
+dwarf2_psymtab::read_symtab (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+
+  gdb_assert (!per_objfile->symtab_set_p (per_cu_data));
+
+  /* If this psymtab is constructed from a debug-only objfile, the
+     has_section_at_zero flag will not necessarily be correct.  We
+     can get the correct value for this flag by looking at the data
+     associated with the (presumably stripped) associated objfile.  */
+  if (objfile->separate_debug_objfile_backlink)
+    {
+      dwarf2_per_objfile *per_objfile_backlink
+	= get_dwarf2_per_objfile (objfile->separate_debug_objfile_backlink);
+
+      per_objfile->per_bfd->has_section_at_zero
+	= per_objfile_backlink->per_bfd->has_section_at_zero;
+    }
+
+  expand_psymtab (objfile);
+
+  process_cu_includes (per_objfile);
+}
+
+/* Reading in full CUs.  */
+
+/* Add PER_CU to the queue.  */
+
+static void
+queue_comp_unit (dwarf2_per_cu_data *per_cu,
+		 dwarf2_per_objfile *per_objfile,
+		 enum language pretend_language)
+{
+  per_cu->queued = 1;
+
+  gdb_assert (per_objfile->per_bfd->queue.has_value ());
+  per_cu->per_bfd->queue->emplace (per_cu, per_objfile, pretend_language);
+}
+
+/* If PER_CU is not yet expanded of queued for expansion, add it to the queue.
+
+   If DEPENDENT_CU is non-NULL, it has a reference to PER_CU so add a
+   dependency.
+
+   Return true if maybe_queue_comp_unit requires the caller to load the CU's
+   DIEs, false otherwise.
+
+   Explanation: there is an invariant that if a CU is queued for expansion
+   (present in `dwarf2_per_bfd::queue`), then its DIEs are loaded
+   (a dwarf2_cu object exists for this CU, and `dwarf2_per_objfile::get_cu`
+   returns non-nullptr).  If the CU gets enqueued by this function but its DIEs
+   are not yet loaded, the the caller must load the CU's DIEs to ensure the
+   invariant is respected.
+
+   The caller is therefore not required to load the CU's DIEs (we return false)
+   if:
+
+     - the CU is already expanded, and therefore does not get enqueued
+     - the CU gets enqueued for expansion, but its DIEs are already loaded
+
+   Note that the caller should not use this function's return value as an
+   indicator of whether the CU's DIEs are loaded right now, it should check
+   that by calling `dwarf2_per_objfile::get_cu` instead.  */
+
+static int
+maybe_queue_comp_unit (struct dwarf2_cu *dependent_cu,
+		       dwarf2_per_cu_data *per_cu,
+		       dwarf2_per_objfile *per_objfile,
+		       enum language pretend_language)
+{
+  /* We may arrive here during partial symbol reading, if we need full
+     DIEs to process an unusual case (e.g. template arguments).  Do
+     not queue PER_CU, just tell our caller to load its DIEs.  */
+  if (per_cu->per_bfd->reading_partial_symbols)
+    {
+      dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+
+      if (cu == NULL || cu->dies == NULL)
+	return 1;
+      return 0;
+    }
+
+  /* Mark the dependence relation so that we don't flush PER_CU
+     too early.  */
+  if (dependent_cu != NULL)
+    dependent_cu->add_dependence (per_cu);
+
+  /* If it's already on the queue, we have nothing to do.  */
+  if (per_cu->queued)
+    {
+      /* Verify the invariant that if a CU is queued for expansion, its DIEs are
+	 loaded.  */
+      gdb_assert (per_objfile->get_cu (per_cu) != nullptr);
+
+      /* If the CU is queued for expansion, it should not already be
+	 expanded.  */
+      gdb_assert (!per_objfile->symtab_set_p (per_cu));
+
+      /* The DIEs are already loaded, the caller doesn't need to do it.  */
+      return 0;
+    }
+
+  bool queued = false;
+  if (!per_objfile->symtab_set_p (per_cu))
+    {
+      /* Add it to the queue.  */
+      queue_comp_unit (per_cu, per_objfile,  pretend_language);
+      queued = true;
+    }
+
+  /* If the compilation unit is already loaded, just mark it as
+     used.  */
+  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+  if (cu != nullptr)
+    cu->last_used = 0;
+
+  /* Ask the caller to load the CU's DIEs if the CU got enqueued for expansion
+     and the DIEs are not already loaded.  */
+  return queued && cu == nullptr;
+}
+
+/* Process the queue.  */
+
+static void
+process_queue (dwarf2_per_objfile *per_objfile)
+{
+  dwarf_read_debug_printf ("Expanding one or more symtabs of objfile %s ...",
+			   objfile_name (per_objfile->objfile));
+
+  /* The queue starts out with one item, but following a DIE reference
+     may load a new CU, adding it to the end of the queue.  */
+  while (!per_objfile->per_bfd->queue->empty ())
+    {
+      dwarf2_queue_item &item = per_objfile->per_bfd->queue->front ();
+      dwarf2_per_cu_data *per_cu = item.per_cu;
+
+      if (!per_objfile->symtab_set_p (per_cu))
+	{
+	  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+
+	  /* Skip dummy CUs.  */
+	  if (cu != nullptr)
+	    {
+	      unsigned int debug_print_threshold;
+	      char buf[100];
+
+	      if (per_cu->is_debug_types)
+		{
+		  struct signatured_type *sig_type =
+		    (struct signatured_type *) per_cu;
+
+		  sprintf (buf, "TU %s at offset %s",
+			   hex_string (sig_type->signature),
+			   sect_offset_str (per_cu->sect_off));
+		  /* There can be 100s of TUs.
+		     Only print them in verbose mode.  */
+		  debug_print_threshold = 2;
+		}
+	      else
+		{
+		  sprintf (buf, "CU at offset %s",
+			   sect_offset_str (per_cu->sect_off));
+		  debug_print_threshold = 1;
+		}
+
+	      if (dwarf_read_debug >= debug_print_threshold)
+		dwarf_read_debug_printf ("Expanding symtab of %s", buf);
+
+	      if (per_cu->is_debug_types)
+		process_full_type_unit (cu, item.pretend_language);
+	      else
+		process_full_comp_unit (cu, item.pretend_language);
+
+	      if (dwarf_read_debug >= debug_print_threshold)
+		dwarf_read_debug_printf ("Done expanding %s", buf);
+	    }
+	}
+
+      per_cu->queued = 0;
+      per_objfile->per_bfd->queue->pop ();
+    }
+
+  dwarf_read_debug_printf ("Done expanding symtabs of %s.",
+			   objfile_name (per_objfile->objfile));
+}
+
+/* Read in full symbols for PST, and anything it depends on.  */
+
+void
+dwarf2_psymtab::expand_psymtab (struct objfile *objfile)
+{
+  gdb_assert (!readin_p (objfile));
+
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  free_cached_comp_units freer (per_objfile);
+  expand_dependencies (objfile);
+
+  dw2_do_instantiate_symtab (per_cu_data, per_objfile, false);
+  gdb_assert (get_compunit_symtab (objfile) != nullptr);
+}
+
+/* See psympriv.h.  */
+
+bool
+dwarf2_psymtab::readin_p (struct objfile *objfile) const
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  return per_objfile->symtab_set_p (per_cu_data);
+}
+
+/* See psympriv.h.  */
+
+compunit_symtab *
+dwarf2_psymtab::get_compunit_symtab (struct objfile *objfile) const
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  return per_objfile->get_symtab (per_cu_data);
+}
+
+/* Trivial hash function for die_info: the hash value of a DIE
+   is its offset in .debug_info for this objfile.  */
+
+static hashval_t
+die_hash (const void *item)
+{
+  const struct die_info *die = (const struct die_info *) item;
+
+  return to_underlying (die->sect_off);
+}
+
+/* Trivial comparison function for die_info structures: two DIEs
+   are equal if they have the same offset.  */
+
+static int
+die_eq (const void *item_lhs, const void *item_rhs)
+{
+  const struct die_info *die_lhs = (const struct die_info *) item_lhs;
+  const struct die_info *die_rhs = (const struct die_info *) item_rhs;
+
+  return die_lhs->sect_off == die_rhs->sect_off;
+}
+
+/* Load the DIEs associated with PER_CU into memory.
+
+   In some cases, the caller, while reading partial symbols, will need to load
+   the full symbols for the CU for some reason.  It will already have a
+   dwarf2_cu object for THIS_CU and pass it as EXISTING_CU, so it can be re-used
+   rather than creating a new one.  */
+
+static void
+load_full_comp_unit (dwarf2_per_cu_data *this_cu,
+		     dwarf2_per_objfile *per_objfile,
+		     dwarf2_cu *existing_cu,
+		     bool skip_partial,
+		     enum language pretend_language)
+{
+  gdb_assert (! this_cu->is_debug_types);
+
+  cutu_reader reader (this_cu, per_objfile, NULL, existing_cu, skip_partial);
+  if (reader.dummy_p)
+    return;
+
+  struct dwarf2_cu *cu = reader.cu;
+  const gdb_byte *info_ptr = reader.info_ptr;
+
+  gdb_assert (cu->die_hash == NULL);
+  cu->die_hash =
+    htab_create_alloc_ex (cu->header.length / 12,
+			  die_hash,
+			  die_eq,
+			  NULL,
+			  &cu->comp_unit_obstack,
+			  hashtab_obstack_allocate,
+			  dummy_obstack_deallocate);
+
+  if (reader.comp_unit_die->has_children)
+    reader.comp_unit_die->child
+      = read_die_and_siblings (&reader, reader.info_ptr,
+			       &info_ptr, reader.comp_unit_die);
+  cu->dies = reader.comp_unit_die;
+  /* comp_unit_die is not stored in die_hash, no need.  */
+
+  /* We try not to read any attributes in this function, because not
+     all CUs needed for references have been loaded yet, and symbol
+     table processing isn't initialized.  But we have to set the CU language,
+     or we won't be able to build types correctly.
+     Similarly, if we do not read the producer, we can not apply
+     producer-specific interpretation.  */
+  prepare_one_comp_unit (cu, cu->dies, pretend_language);
+
+  reader.keep ();
+}
+
+/* Add a DIE to the delayed physname list.  */
+
+static void
+add_to_method_list (struct type *type, int fnfield_index, int index,
+		    const char *name, struct die_info *die,
+		    struct dwarf2_cu *cu)
+{
+  struct delayed_method_info mi;
+  mi.type = type;
+  mi.fnfield_index = fnfield_index;
+  mi.index = index;
+  mi.name = name;
+  mi.die = die;
+  cu->method_list.push_back (mi);
+}
+
+/* Check whether [PHYSNAME, PHYSNAME+LEN) ends with a modifier like
+   "const" / "volatile".  If so, decrements LEN by the length of the
+   modifier and return true.  Otherwise return false.  */
+
+template<size_t N>
+static bool
+check_modifier (const char *physname, size_t &len, const char (&mod)[N])
+{
+  size_t mod_len = sizeof (mod) - 1;
+  if (len > mod_len && startswith (physname + (len - mod_len), mod))
+    {
+      len -= mod_len;
+      return true;
+    }
+  return false;
+}
+
+/* Compute the physnames of any methods on the CU's method list.
+
+   The computation of method physnames is delayed in order to avoid the
+   (bad) condition that one of the method's formal parameters is of an as yet
+   incomplete type.  */
+
+static void
+compute_delayed_physnames (struct dwarf2_cu *cu)
+{
+  /* Only C++ delays computing physnames.  */
+  if (cu->method_list.empty ())
+    return;
+  gdb_assert (cu->per_cu->lang == language_cplus);
+
+  for (const delayed_method_info &mi : cu->method_list)
+    {
+      const char *physname;
+      struct fn_fieldlist *fn_flp
+	= &TYPE_FN_FIELDLIST (mi.type, mi.fnfield_index);
+      physname = dwarf2_physname (mi.name, mi.die, cu);
+      TYPE_FN_FIELD_PHYSNAME (fn_flp->fn_fields, mi.index)
+	= physname ? physname : "";
+
+      /* Since there's no tag to indicate whether a method is a
+	 const/volatile overload, extract that information out of the
+	 demangled name.  */
+      if (physname != NULL)
+	{
+	  size_t len = strlen (physname);
+
+	  while (1)
+	    {
+	      if (physname[len] == ')') /* shortcut */
+		break;
+	      else if (check_modifier (physname, len, " const"))
+		TYPE_FN_FIELD_CONST (fn_flp->fn_fields, mi.index) = 1;
+	      else if (check_modifier (physname, len, " volatile"))
+		TYPE_FN_FIELD_VOLATILE (fn_flp->fn_fields, mi.index) = 1;
+	      else
+		break;
+	    }
+	}
+    }
+
+  /* The list is no longer needed.  */
+  cu->method_list.clear ();
+}
+
+/* Go objects should be embedded in a DW_TAG_module DIE,
+   and it's not clear if/how imported objects will appear.
+   To keep Go support simple until that's worked out,
+   go back through what we've read and create something usable.
+   We could do this while processing each DIE, and feels kinda cleaner,
+   but that way is more invasive.
+   This is to, for example, allow the user to type "p var" or "b main"
+   without having to specify the package name, and allow lookups
+   of module.object to work in contexts that use the expression
+   parser.  */
+
+static void
+fixup_go_packaging (struct dwarf2_cu *cu)
+{
+  gdb::unique_xmalloc_ptr<char> package_name;
+  struct pending *list;
+  int i;
+
+  for (list = *cu->get_builder ()->get_global_symbols ();
+       list != NULL;
+       list = list->next)
+    {
+      for (i = 0; i < list->nsyms; ++i)
+	{
+	  struct symbol *sym = list->symbol[i];
+
+	  if (sym->language () == language_go
+	      && SYMBOL_CLASS (sym) == LOC_BLOCK)
+	    {
+	      gdb::unique_xmalloc_ptr<char> this_package_name
+		(go_symbol_package_name (sym));
+
+	      if (this_package_name == NULL)
+		continue;
+	      if (package_name == NULL)
+		package_name = std::move (this_package_name);
+	      else
+		{
+		  struct objfile *objfile = cu->per_objfile->objfile;
+		  if (strcmp (package_name.get (), this_package_name.get ()) != 0)
+		    complaint (_("Symtab %s has objects from two different Go packages: %s and %s"),
+			       (symbol_symtab (sym) != NULL
+				? symtab_to_filename_for_display
+				    (symbol_symtab (sym))
+				: objfile_name (objfile)),
+			       this_package_name.get (), package_name.get ());
+		}
+	    }
+	}
+    }
+
+  if (package_name != NULL)
+    {
+      struct objfile *objfile = cu->per_objfile->objfile;
+      const char *saved_package_name = objfile->intern (package_name.get ());
+      struct type *type = init_type (objfile, TYPE_CODE_MODULE, 0,
+				     saved_package_name);
+      struct symbol *sym;
+
+      sym = new (&objfile->objfile_obstack) symbol;
+      sym->set_language (language_go, &objfile->objfile_obstack);
+      sym->compute_and_set_names (saved_package_name, false, objfile->per_bfd);
+      /* This is not VAR_DOMAIN because we want a way to ensure a lookup of,
+	 e.g., "main" finds the "main" module and not C's main().  */
+      SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+      SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+      SYMBOL_TYPE (sym) = type;
+
+      add_symbol_to_list (sym, cu->get_builder ()->get_global_symbols ());
+    }
+}
+
+/* Allocate a fully-qualified name consisting of the two parts on the
+   obstack.  */
+
+static const char *
+rust_fully_qualify (struct obstack *obstack, const char *p1, const char *p2)
+{
+  return obconcat (obstack, p1, "::", p2, (char *) NULL);
+}
+
+/* A helper that allocates a variant part to attach to a Rust enum
+   type.  OBSTACK is where the results should be allocated.  TYPE is
+   the type we're processing.  DISCRIMINANT_INDEX is the index of the
+   discriminant.  It must be the index of one of the fields of TYPE,
+   or -1 to mean there is no discriminant (univariant enum).
+   DEFAULT_INDEX is the index of the default field; or -1 if there is
+   no default.  RANGES is indexed by "effective" field number (the
+   field index, but omitting the discriminant and default fields) and
+   must hold the discriminant values used by the variants.  Note that
+   RANGES must have a lifetime at least as long as OBSTACK -- either
+   already allocated on it, or static.  */
+
+static void
+alloc_rust_variant (struct obstack *obstack, struct type *type,
+		    int discriminant_index, int default_index,
+		    gdb::array_view<discriminant_range> ranges)
+{
+  /* When DISCRIMINANT_INDEX == -1, we have a univariant enum.  */
+  gdb_assert (discriminant_index == -1
+	      || (discriminant_index >= 0
+		  && discriminant_index < type->num_fields ()));
+  gdb_assert (default_index == -1
+	      || (default_index >= 0 && default_index < type->num_fields ()));
+
+  /* We have one variant for each non-discriminant field.  */
+  int n_variants = type->num_fields ();
+  if (discriminant_index != -1)
+    --n_variants;
+
+  variant *variants = new (obstack) variant[n_variants];
+  int var_idx = 0;
+  int range_idx = 0;
+  for (int i = 0; i < type->num_fields (); ++i)
+    {
+      if (i == discriminant_index)
+	continue;
+
+      variants[var_idx].first_field = i;
+      variants[var_idx].last_field = i + 1;
+
+      /* The default field does not need a range, but other fields do.
+	 We skipped the discriminant above.  */
+      if (i != default_index)
+	{
+	  variants[var_idx].discriminants = ranges.slice (range_idx, 1);
+	  ++range_idx;
+	}
+
+      ++var_idx;
+    }
+
+  gdb_assert (range_idx == ranges.size ());
+  gdb_assert (var_idx == n_variants);
+
+  variant_part *part = new (obstack) variant_part;
+  part->discriminant_index = discriminant_index;
+  /* If there is no discriminant, then whether it is signed is of no
+     consequence.  */
+  part->is_unsigned
+    = (discriminant_index == -1
+       ? false
+       : type->field (discriminant_index).type ()->is_unsigned ());
+  part->variants = gdb::array_view<variant> (variants, n_variants);
+
+  void *storage = obstack_alloc (obstack, sizeof (gdb::array_view<variant_part>));
+  gdb::array_view<variant_part> *prop_value
+    = new (storage) gdb::array_view<variant_part> (part, 1);
+
+  struct dynamic_prop prop;
+  prop.set_variant_parts (prop_value);
+
+  type->add_dyn_prop (DYN_PROP_VARIANT_PARTS, prop);
+}
+
+/* Some versions of rustc emitted enums in an unusual way.
+
+   Ordinary enums were emitted as unions.  The first element of each
+   structure in the union was named "RUST$ENUM$DISR".  This element
+   held the discriminant.
+
+   These versions of Rust also implemented the "non-zero"
+   optimization.  When the enum had two values, and one is empty and
+   the other holds a pointer that cannot be zero, the pointer is used
+   as the discriminant, with a zero value meaning the empty variant.
+   Here, the union's first member is of the form
+   RUST$ENCODED$ENUM$<fieldno>$<fieldno>$...$<variantname>
+   where the fieldnos are the indices of the fields that should be
+   traversed in order to find the field (which may be several fields deep)
+   and the variantname is the name of the variant of the case when the
+   field is zero.
+
+   This function recognizes whether TYPE is of one of these forms,
+   and, if so, smashes it to be a variant type.  */
+
+static void
+quirk_rust_enum (struct type *type, struct objfile *objfile)
+{
+  gdb_assert (type->code () == TYPE_CODE_UNION);
+
+  /* We don't need to deal with empty enums.  */
+  if (type->num_fields () == 0)
+    return;
+
+#define RUST_ENUM_PREFIX "RUST$ENCODED$ENUM$"
+  if (type->num_fields () == 1
+      && startswith (TYPE_FIELD_NAME (type, 0), RUST_ENUM_PREFIX))
+    {
+      const char *name = TYPE_FIELD_NAME (type, 0) + strlen (RUST_ENUM_PREFIX);
+
+      /* Decode the field name to find the offset of the
+	 discriminant.  */
+      ULONGEST bit_offset = 0;
+      struct type *field_type = type->field (0).type ();
+      while (name[0] >= '0' && name[0] <= '9')
+	{
+	  char *tail;
+	  unsigned long index = strtoul (name, &tail, 10);
+	  name = tail;
+	  if (*name != '$'
+	      || index >= field_type->num_fields ()
+	      || (TYPE_FIELD_LOC_KIND (field_type, index)
+		  != FIELD_LOC_KIND_BITPOS))
+	    {
+	      complaint (_("Could not parse Rust enum encoding string \"%s\""
+			   "[in module %s]"),
+			 TYPE_FIELD_NAME (type, 0),
+			 objfile_name (objfile));
+	      return;
+	    }
+	  ++name;
+
+	  bit_offset += TYPE_FIELD_BITPOS (field_type, index);
+	  field_type = field_type->field (index).type ();
+	}
+
+      /* Smash this type to be a structure type.  We have to do this
+	 because the type has already been recorded.  */
+      type->set_code (TYPE_CODE_STRUCT);
+      type->set_num_fields (3);
+      /* Save the field we care about.  */
+      struct field saved_field = type->field (0);
+      type->set_fields
+	((struct field *) TYPE_ZALLOC (type, 3 * sizeof (struct field)));
+
+      /* Put the discriminant at index 0.  */
+      type->field (0).set_type (field_type);
+      TYPE_FIELD_ARTIFICIAL (type, 0) = 1;
+      TYPE_FIELD_NAME (type, 0) = "<<discriminant>>";
+      SET_FIELD_BITPOS (type->field (0), bit_offset);
+
+      /* The order of fields doesn't really matter, so put the real
+	 field at index 1 and the data-less field at index 2.  */
+      type->field (1) = saved_field;
+      TYPE_FIELD_NAME (type, 1)
+	= rust_last_path_segment (type->field (1).type ()->name ());
+      type->field (1).type ()->set_name
+	(rust_fully_qualify (&objfile->objfile_obstack, type->name (),
+			     TYPE_FIELD_NAME (type, 1)));
+
+      const char *dataless_name
+	= rust_fully_qualify (&objfile->objfile_obstack, type->name (),
+			      name);
+      struct type *dataless_type = init_type (objfile, TYPE_CODE_VOID, 0,
+					      dataless_name);
+      type->field (2).set_type (dataless_type);
+      /* NAME points into the original discriminant name, which
+	 already has the correct lifetime.  */
+      TYPE_FIELD_NAME (type, 2) = name;
+      SET_FIELD_BITPOS (type->field (2), 0);
+
+      /* Indicate that this is a variant type.  */
+      static discriminant_range ranges[1] = { { 0, 0 } };
+      alloc_rust_variant (&objfile->objfile_obstack, type, 0, 1, ranges);
+    }
+  /* A union with a single anonymous field is probably an old-style
+     univariant enum.  */
+  else if (type->num_fields () == 1 && streq (TYPE_FIELD_NAME (type, 0), ""))
+    {
+      /* Smash this type to be a structure type.  We have to do this
+	 because the type has already been recorded.  */
+      type->set_code (TYPE_CODE_STRUCT);
+
+      struct type *field_type = type->field (0).type ();
+      const char *variant_name
+	= rust_last_path_segment (field_type->name ());
+      TYPE_FIELD_NAME (type, 0) = variant_name;
+      field_type->set_name
+	(rust_fully_qualify (&objfile->objfile_obstack,
+			     type->name (), variant_name));
+
+      alloc_rust_variant (&objfile->objfile_obstack, type, -1, 0, {});
+    }
+  else
+    {
+      struct type *disr_type = nullptr;
+      for (int i = 0; i < type->num_fields (); ++i)
+	{
+	  disr_type = type->field (i).type ();
+
+	  if (disr_type->code () != TYPE_CODE_STRUCT)
+	    {
+	      /* All fields of a true enum will be structs.  */
+	      return;
+	    }
+	  else if (disr_type->num_fields () == 0)
+	    {
+	      /* Could be data-less variant, so keep going.  */
+	      disr_type = nullptr;
+	    }
+	  else if (strcmp (TYPE_FIELD_NAME (disr_type, 0),
+			   "RUST$ENUM$DISR") != 0)
+	    {
+	      /* Not a Rust enum.  */
+	      return;
+	    }
+	  else
+	    {
+	      /* Found one.  */
+	      break;
+	    }
+	}
+
+      /* If we got here without a discriminant, then it's probably
+	 just a union.  */
+      if (disr_type == nullptr)
+	return;
+
+      /* Smash this type to be a structure type.  We have to do this
+	 because the type has already been recorded.  */
+      type->set_code (TYPE_CODE_STRUCT);
+
+      /* Make space for the discriminant field.  */
+      struct field *disr_field = &disr_type->field (0);
+      field *new_fields
+	= (struct field *) TYPE_ZALLOC (type, ((type->num_fields () + 1)
+					       * sizeof (struct field)));
+      memcpy (new_fields + 1, type->fields (),
+	      type->num_fields () * sizeof (struct field));
+      type->set_fields (new_fields);
+      type->set_num_fields (type->num_fields () + 1);
+
+      /* Install the discriminant at index 0 in the union.  */
+      type->field (0) = *disr_field;
+      TYPE_FIELD_ARTIFICIAL (type, 0) = 1;
+      TYPE_FIELD_NAME (type, 0) = "<<discriminant>>";
+
+      /* We need a way to find the correct discriminant given a
+	 variant name.  For convenience we build a map here.  */
+      struct type *enum_type = disr_field->type ();
+      std::unordered_map<std::string, ULONGEST> discriminant_map;
+      for (int i = 0; i < enum_type->num_fields (); ++i)
+	{
+	  if (TYPE_FIELD_LOC_KIND (enum_type, i) == FIELD_LOC_KIND_ENUMVAL)
+	    {
+	      const char *name
+		= rust_last_path_segment (TYPE_FIELD_NAME (enum_type, i));
+	      discriminant_map[name] = TYPE_FIELD_ENUMVAL (enum_type, i);
+	    }
+	}
+
+      int n_fields = type->num_fields ();
+      /* We don't need a range entry for the discriminant, but we do
+	 need one for every other field, as there is no default
+	 variant.  */
+      discriminant_range *ranges = XOBNEWVEC (&objfile->objfile_obstack,
+					      discriminant_range,
+					      n_fields - 1);
+      /* Skip the discriminant here.  */
+      for (int i = 1; i < n_fields; ++i)
+	{
+	  /* Find the final word in the name of this variant's type.
+	     That name can be used to look up the correct
+	     discriminant.  */
+	  const char *variant_name
+	    = rust_last_path_segment (type->field (i).type ()->name ());
+
+	  auto iter = discriminant_map.find (variant_name);
+	  if (iter != discriminant_map.end ())
+	    {
+	      ranges[i - 1].low = iter->second;
+	      ranges[i - 1].high = iter->second;
+	    }
+
+	  /* In Rust, each element should have the size of the
+	     enclosing enum.  */
+	  TYPE_LENGTH (type->field (i).type ()) = TYPE_LENGTH (type);
+
+	  /* Remove the discriminant field, if it exists.  */
+	  struct type *sub_type = type->field (i).type ();
+	  if (sub_type->num_fields () > 0)
+	    {
+	      sub_type->set_num_fields (sub_type->num_fields () - 1);
+	      sub_type->set_fields (sub_type->fields () + 1);
+	    }
+	  TYPE_FIELD_NAME (type, i) = variant_name;
+	  sub_type->set_name
+	    (rust_fully_qualify (&objfile->objfile_obstack,
+				 type->name (), variant_name));
+	}
+
+      /* Indicate that this is a variant type.  */
+      alloc_rust_variant (&objfile->objfile_obstack, type, 0, -1,
+			  gdb::array_view<discriminant_range> (ranges,
+							       n_fields - 1));
+    }
+}
+
+/* Rewrite some Rust unions to be structures with variants parts.  */
+
+static void
+rust_union_quirks (struct dwarf2_cu *cu)
+{
+  gdb_assert (cu->per_cu->lang == language_rust);
+  for (type *type_ : cu->rust_unions)
+    quirk_rust_enum (type_, cu->per_objfile->objfile);
+  /* We don't need this any more.  */
+  cu->rust_unions.clear ();
+}
+
+/* See read.h.  */
+
+type_unit_group_unshareable *
+dwarf2_per_objfile::get_type_unit_group_unshareable (type_unit_group *tu_group)
+{
+  auto iter = this->m_type_units.find (tu_group);
+  if (iter != this->m_type_units.end ())
+    return iter->second.get ();
+
+  type_unit_group_unshareable_up uniq (new type_unit_group_unshareable);
+  type_unit_group_unshareable *result = uniq.get ();
+  this->m_type_units[tu_group] = std::move (uniq);
+  return result;
+}
+
+struct type *
+dwarf2_per_objfile::get_type_for_signatured_type
+  (signatured_type *sig_type) const
+{
+  auto iter = this->m_type_map.find (sig_type);
+  if (iter == this->m_type_map.end ())
+    return nullptr;
+
+  return iter->second;
+}
+
+void dwarf2_per_objfile::set_type_for_signatured_type
+  (signatured_type *sig_type, struct type *type)
+{
+  gdb_assert (this->m_type_map.find (sig_type) == this->m_type_map.end ());
+
+  this->m_type_map[sig_type] = type;
+}
+
+/* A helper function for computing the list of all symbol tables
+   included by PER_CU.  */
+
+static void
+recursively_compute_inclusions (std::vector<compunit_symtab *> *result,
+				htab_t all_children, htab_t all_type_symtabs,
+				dwarf2_per_cu_data *per_cu,
+				dwarf2_per_objfile *per_objfile,
+				struct compunit_symtab *immediate_parent)
+{
+  void **slot = htab_find_slot (all_children, per_cu, INSERT);
+  if (*slot != NULL)
+    {
+      /* This inclusion and its children have been processed.  */
+      return;
+    }
+
+  *slot = per_cu;
+
+  /* Only add a CU if it has a symbol table.  */
+  compunit_symtab *cust = per_objfile->get_symtab (per_cu);
+  if (cust != NULL)
+    {
+      /* If this is a type unit only add its symbol table if we haven't
+	 seen it yet (type unit per_cu's can share symtabs).  */
+      if (per_cu->is_debug_types)
+	{
+	  slot = htab_find_slot (all_type_symtabs, cust, INSERT);
+	  if (*slot == NULL)
+	    {
+	      *slot = cust;
+	      result->push_back (cust);
+	      if (cust->user == NULL)
+		cust->user = immediate_parent;
+	    }
+	}
+      else
+	{
+	  result->push_back (cust);
+	  if (cust->user == NULL)
+	    cust->user = immediate_parent;
+	}
+    }
+
+  if (!per_cu->imported_symtabs_empty ())
+    for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs)
+      {
+	recursively_compute_inclusions (result, all_children,
+					all_type_symtabs, ptr, per_objfile,
+					cust);
+      }
+}
+
+/* Compute the compunit_symtab 'includes' fields for the compunit_symtab of
+   PER_CU.  */
+
+static void
+compute_compunit_symtab_includes (dwarf2_per_cu_data *per_cu,
+				  dwarf2_per_objfile *per_objfile)
+{
+  gdb_assert (! per_cu->is_debug_types);
+
+  if (!per_cu->imported_symtabs_empty ())
+    {
+      int len;
+      std::vector<compunit_symtab *> result_symtabs;
+      compunit_symtab *cust = per_objfile->get_symtab (per_cu);
+
+      /* If we don't have a symtab, we can just skip this case.  */
+      if (cust == NULL)
+	return;
+
+      htab_up all_children (htab_create_alloc (1, htab_hash_pointer,
+					       htab_eq_pointer,
+					       NULL, xcalloc, xfree));
+      htab_up all_type_symtabs (htab_create_alloc (1, htab_hash_pointer,
+						   htab_eq_pointer,
+						   NULL, xcalloc, xfree));
+
+      for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs)
+	{
+	  recursively_compute_inclusions (&result_symtabs, all_children.get (),
+					  all_type_symtabs.get (), ptr,
+					  per_objfile, cust);
+	}
+
+      /* Now we have a transitive closure of all the included symtabs.  */
+      len = result_symtabs.size ();
+      cust->includes
+	= XOBNEWVEC (&per_objfile->objfile->objfile_obstack,
+		     struct compunit_symtab *, len + 1);
+      memcpy (cust->includes, result_symtabs.data (),
+	      len * sizeof (compunit_symtab *));
+      cust->includes[len] = NULL;
+    }
+}
+
+/* Compute the 'includes' field for the symtabs of all the CUs we just
+   read.  */
+
+static void
+process_cu_includes (dwarf2_per_objfile *per_objfile)
+{
+  for (dwarf2_per_cu_data *iter : per_objfile->per_bfd->just_read_cus)
+    {
+      if (! iter->is_debug_types)
+	compute_compunit_symtab_includes (iter, per_objfile);
+    }
+
+  per_objfile->per_bfd->just_read_cus.clear ();
+}
+
+/* Generate full symbol information for CU, whose DIEs have
+   already been loaded into memory.  */
+
+static void
+process_full_comp_unit (dwarf2_cu *cu, enum language pretend_language)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  CORE_ADDR lowpc, highpc;
+  struct compunit_symtab *cust;
+  CORE_ADDR baseaddr;
+  struct block *static_block;
+  CORE_ADDR addr;
+
+  baseaddr = objfile->text_section_offset ();
+
+  /* Clear the list here in case something was left over.  */
+  cu->method_list.clear ();
+
+  dwarf2_find_base_address (cu->dies, cu);
+
+  /* Before we start reading the top-level DIE, ensure it has a valid tag
+     type.  */
+  switch (cu->dies->tag)
+    {
+    case DW_TAG_compile_unit:
+    case DW_TAG_partial_unit:
+    case DW_TAG_type_unit:
+      break;
+    default:
+      error (_("Dwarf Error: unexpected tag '%s' at offset %s [in module %s]"),
+	     dwarf_tag_name (cu->dies->tag),
+	     sect_offset_str (cu->per_cu->sect_off),
+	     objfile_name (per_objfile->objfile));
+    }
+
+  /* Do line number decoding in read_file_scope () */
+  process_die (cu->dies, cu);
+
+  /* For now fudge the Go package.  */
+  if (cu->per_cu->lang == language_go)
+    fixup_go_packaging (cu);
+
+  /* Now that we have processed all the DIEs in the CU, all the types
+     should be complete, and it should now be safe to compute all of the
+     physnames.  */
+  compute_delayed_physnames (cu);
+
+  if (cu->per_cu->lang == language_rust)
+    rust_union_quirks (cu);
+
+  /* Some compilers don't define a DW_AT_high_pc attribute for the
+     compilation unit.  If the DW_AT_high_pc is missing, synthesize
+     it, by scanning the DIE's below the compilation unit.  */
+  get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu);
+
+  addr = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
+  static_block = cu->get_builder ()->end_symtab_get_static_block (addr, 0, 1);
+
+  /* If the comp unit has DW_AT_ranges, it may have discontiguous ranges.
+     Also, DW_AT_ranges may record ranges not belonging to any child DIEs
+     (such as virtual method tables).  Record the ranges in STATIC_BLOCK's
+     addrmap to help ensure it has an accurate map of pc values belonging to
+     this comp unit.  */
+  dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu);
+
+  cust = cu->get_builder ()->end_symtab_from_static_block (static_block,
+						    SECT_OFF_TEXT (objfile),
+						    0);
+
+  if (cust != NULL)
+    {
+      int gcc_4_minor = producer_is_gcc_ge_4 (cu->producer);
+
+      /* Set symtab language to language from DW_AT_language.  If the
+	 compilation is from a C file generated by language preprocessors, do
+	 not set the language if it was already deduced by start_subfile.  */
+      if (!(cu->per_cu->lang == language_c
+	    && COMPUNIT_FILETABS (cust)->language != language_unknown))
+	COMPUNIT_FILETABS (cust)->language = cu->per_cu->lang;
+
+      /* GCC-4.0 has started to support -fvar-tracking.  GCC-3.x still can
+	 produce DW_AT_location with location lists but it can be possibly
+	 invalid without -fvar-tracking.  Still up to GCC-4.4.x incl. 4.4.0
+	 there were bugs in prologue debug info, fixed later in GCC-4.5
+	 by "unwind info for epilogues" patch (which is not directly related).
+
+	 For -gdwarf-4 type units LOCATIONS_VALID indication is fortunately not
+	 needed, it would be wrong due to missing DW_AT_producer there.
+
+	 Still one can confuse GDB by using non-standard GCC compilation
+	 options - this waits on GCC PR other/32998 (-frecord-gcc-switches).
+	 */
+      if (cu->has_loclist && gcc_4_minor >= 5)
+	cust->locations_valid = 1;
+
+      if (gcc_4_minor >= 5)
+	cust->epilogue_unwind_valid = 1;
+
+      cust->call_site_htab = cu->call_site_htab;
+    }
+
+  per_objfile->set_symtab (cu->per_cu, cust);
+
+  /* Push it for inclusion processing later.  */
+  per_objfile->per_bfd->just_read_cus.push_back (cu->per_cu);
+
+  /* Not needed any more.  */
+  cu->reset_builder ();
+}
+
+/* Generate full symbol information for type unit CU, whose DIEs have
+   already been loaded into memory.  */
+
+static void
+process_full_type_unit (dwarf2_cu *cu,
+			enum language pretend_language)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct compunit_symtab *cust;
+  struct signatured_type *sig_type;
+
+  gdb_assert (cu->per_cu->is_debug_types);
+  sig_type = (struct signatured_type *) cu->per_cu;
+
+  /* Clear the list here in case something was left over.  */
+  cu->method_list.clear ();
+
+  /* The symbol tables are set up in read_type_unit_scope.  */
+  process_die (cu->dies, cu);
+
+  /* For now fudge the Go package.  */
+  if (cu->per_cu->lang == language_go)
+    fixup_go_packaging (cu);
+
+  /* Now that we have processed all the DIEs in the CU, all the types
+     should be complete, and it should now be safe to compute all of the
+     physnames.  */
+  compute_delayed_physnames (cu);
+
+  if (cu->per_cu->lang == language_rust)
+    rust_union_quirks (cu);
+
+  /* TUs share symbol tables.
+     If this is the first TU to use this symtab, complete the construction
+     of it with end_expandable_symtab.  Otherwise, complete the addition of
+     this TU's symbols to the existing symtab.  */
+  type_unit_group_unshareable *tug_unshare =
+    per_objfile->get_type_unit_group_unshareable (sig_type->type_unit_group);
+  if (tug_unshare->compunit_symtab == NULL)
+    {
+      buildsym_compunit *builder = cu->get_builder ();
+      cust = builder->end_expandable_symtab (0, SECT_OFF_TEXT (objfile));
+      tug_unshare->compunit_symtab = cust;
+
+      if (cust != NULL)
+	{
+	  /* Set symtab language to language from DW_AT_language.  If the
+	     compilation is from a C file generated by language preprocessors,
+	     do not set the language if it was already deduced by
+	     start_subfile.  */
+	  if (!(cu->per_cu->lang == language_c
+		&& COMPUNIT_FILETABS (cust)->language != language_c))
+	    COMPUNIT_FILETABS (cust)->language = cu->per_cu->lang;
+	}
+    }
+  else
+    {
+      cu->get_builder ()->augment_type_symtab ();
+      cust = tug_unshare->compunit_symtab;
+    }
+
+  per_objfile->set_symtab (cu->per_cu, cust);
+
+  /* Not needed any more.  */
+  cu->reset_builder ();
+}
+
+/* Process an imported unit DIE.  */
+
+static void
+process_imported_unit_die (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  /* For now we don't handle imported units in type units.  */
+  if (cu->per_cu->is_debug_types)
+    {
+      error (_("Dwarf Error: DW_TAG_imported_unit is not"
+	       " supported in type units [in module %s]"),
+	     objfile_name (cu->per_objfile->objfile));
+    }
+
+  attr = dwarf2_attr (die, DW_AT_import, cu);
+  if (attr != NULL)
+    {
+      sect_offset sect_off = attr->get_ref_die_offset ();
+      bool is_dwz = (attr->form == DW_FORM_GNU_ref_alt || cu->per_cu->is_dwz);
+      dwarf2_per_objfile *per_objfile = cu->per_objfile;
+      dwarf2_per_cu_data *per_cu
+	= dwarf2_find_containing_comp_unit (sect_off, is_dwz, per_objfile);
+
+      /* We're importing a C++ compilation unit with tag DW_TAG_compile_unit
+	 into another compilation unit, at root level.  Regard this as a hint,
+	 and ignore it.  */
+      if (die->parent && die->parent->parent == NULL
+	  && per_cu->unit_type == DW_UT_compile
+	  && per_cu->lang == language_cplus)
+	return;
+
+      /* If necessary, add it to the queue and load its DIEs.  */
+      if (maybe_queue_comp_unit (cu, per_cu, per_objfile,
+				 cu->per_cu->lang))
+	load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu),
+			     false, cu->per_cu->lang);
+
+      cu->per_cu->imported_symtabs_push (per_cu);
+    }
+}
+
+/* RAII object that represents a process_die scope: i.e.,
+   starts/finishes processing a DIE.  */
+class process_die_scope
+{
+public:
+  process_die_scope (die_info *die, dwarf2_cu *cu)
+    : m_die (die), m_cu (cu)
+  {
+    /* We should only be processing DIEs not already in process.  */
+    gdb_assert (!m_die->in_process);
+    m_die->in_process = true;
+  }
+
+  ~process_die_scope ()
+  {
+    m_die->in_process = false;
+
+    /* If we're done processing the DIE for the CU that owns the line
+       header, we don't need the line header anymore.  */
+    if (m_cu->line_header_die_owner == m_die)
+      {
+	delete m_cu->line_header;
+	m_cu->line_header = NULL;
+	m_cu->line_header_die_owner = NULL;
+      }
+  }
+
+private:
+  die_info *m_die;
+  dwarf2_cu *m_cu;
+};
+
+/* Process a die and its children.  */
+
+static void
+process_die (struct die_info *die, struct dwarf2_cu *cu)
+{
+  process_die_scope scope (die, cu);
+
+  switch (die->tag)
+    {
+    case DW_TAG_padding:
+      break;
+    case DW_TAG_compile_unit:
+    case DW_TAG_partial_unit:
+      read_file_scope (die, cu);
+      break;
+    case DW_TAG_type_unit:
+      read_type_unit_scope (die, cu);
+      break;
+    case DW_TAG_subprogram:
+      /* Nested subprograms in Fortran get a prefix.  */
+      if (cu->per_cu->lang == language_fortran
+	  && die->parent != NULL
+	  && die->parent->tag == DW_TAG_subprogram)
+	cu->processing_has_namespace_info = true;
+      /* Fall through.  */
+    case DW_TAG_inlined_subroutine:
+      read_func_scope (die, cu);
+      break;
+    case DW_TAG_lexical_block:
+    case DW_TAG_try_block:
+    case DW_TAG_catch_block:
+      read_lexical_block_scope (die, cu);
+      break;
+    case DW_TAG_call_site:
+    case DW_TAG_GNU_call_site:
+      read_call_site_scope (die, cu);
+      break;
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+      process_structure_scope (die, cu);
+      break;
+    case DW_TAG_enumeration_type:
+      process_enumeration_scope (die, cu);
+      break;
+
+    /* These dies have a type, but processing them does not create
+       a symbol or recurse to process the children.  Therefore we can
+       read them on-demand through read_type_die.  */
+    case DW_TAG_subroutine_type:
+    case DW_TAG_set_type:
+    case DW_TAG_pointer_type:
+    case DW_TAG_ptr_to_member_type:
+    case DW_TAG_reference_type:
+    case DW_TAG_rvalue_reference_type:
+    case DW_TAG_string_type:
+      break;
+
+    case DW_TAG_array_type:
+      /* We only need to handle this case for Ada -- in other
+	 languages, it's normal for the compiler to emit a typedef
+	 instead.  */
+      if (cu->per_cu->lang != language_ada)
+	break;
+      /* FALLTHROUGH */
+    case DW_TAG_base_type:
+    case DW_TAG_subrange_type:
+    case DW_TAG_typedef:
+      /* Add a typedef symbol for the type definition, if it has a
+	 DW_AT_name.  */
+      new_symbol (die, read_type_die (die, cu), cu);
+      break;
+    case DW_TAG_common_block:
+      read_common_block (die, cu);
+      break;
+    case DW_TAG_common_inclusion:
+      break;
+    case DW_TAG_namespace:
+      cu->processing_has_namespace_info = true;
+      read_namespace (die, cu);
+      break;
+    case DW_TAG_module:
+      cu->processing_has_namespace_info = true;
+      read_module (die, cu);
+      break;
+    case DW_TAG_imported_declaration:
+      cu->processing_has_namespace_info = true;
+      if (read_namespace_alias (die, cu))
+	break;
+      /* The declaration is not a global namespace alias.  */
+      /* Fall through.  */
+    case DW_TAG_imported_module:
+      cu->processing_has_namespace_info = true;
+      if (die->child != NULL && (die->tag == DW_TAG_imported_declaration
+				 || cu->per_cu->lang != language_fortran))
+	complaint (_("Tag '%s' has unexpected children"),
+		   dwarf_tag_name (die->tag));
+      read_import_statement (die, cu);
+      break;
+
+    case DW_TAG_imported_unit:
+      process_imported_unit_die (die, cu);
+      break;
+
+    case DW_TAG_variable:
+      read_variable (die, cu);
+      break;
+
+    default:
+      new_symbol (die, NULL, cu);
+      break;
+    }
+}
+
+/* DWARF name computation.  */
+
+/* A helper function for dwarf2_compute_name which determines whether DIE
+   needs to have the name of the scope prepended to the name listed in the
+   die.  */
+
+static int
+die_needs_namespace (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  switch (die->tag)
+    {
+    case DW_TAG_namespace:
+    case DW_TAG_typedef:
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+    case DW_TAG_enumeration_type:
+    case DW_TAG_enumerator:
+    case DW_TAG_subprogram:
+    case DW_TAG_inlined_subroutine:
+    case DW_TAG_member:
+    case DW_TAG_imported_declaration:
+      return 1;
+
+    case DW_TAG_variable:
+    case DW_TAG_constant:
+      /* We only need to prefix "globally" visible variables.  These include
+	 any variable marked with DW_AT_external or any variable that
+	 lives in a namespace.  [Variables in anonymous namespaces
+	 require prefixing, but they are not DW_AT_external.]  */
+
+      if (dwarf2_attr (die, DW_AT_specification, cu))
+	{
+	  struct dwarf2_cu *spec_cu = cu;
+
+	  return die_needs_namespace (die_specification (die, &spec_cu),
+				      spec_cu);
+	}
+
+      attr = dwarf2_attr (die, DW_AT_external, cu);
+      if (attr == NULL && die->parent->tag != DW_TAG_namespace
+	  && die->parent->tag != DW_TAG_module)
+	return 0;
+      /* A variable in a lexical block of some kind does not need a
+	 namespace, even though in C++ such variables may be external
+	 and have a mangled name.  */
+      if (die->parent->tag ==  DW_TAG_lexical_block
+	  || die->parent->tag ==  DW_TAG_try_block
+	  || die->parent->tag ==  DW_TAG_catch_block
+	  || die->parent->tag == DW_TAG_subprogram)
+	return 0;
+      return 1;
+
+    default:
+      return 0;
+    }
+}
+
+/* Return the DIE's linkage name attribute, either DW_AT_linkage_name
+   or DW_AT_MIPS_linkage_name.  Returns NULL if the attribute is not
+   defined for the given DIE.  */
+
+static struct attribute *
+dw2_linkage_name_attr (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_linkage_name, cu);
+  if (attr == NULL)
+    attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu);
+
+  return attr;
+}
+
+/* Return the DIE's linkage name as a string, either DW_AT_linkage_name
+   or DW_AT_MIPS_linkage_name.  Returns NULL if the attribute is not
+   defined for the given DIE.  */
+
+static const char *
+dw2_linkage_name (struct die_info *die, struct dwarf2_cu *cu)
+{
+  const char *linkage_name;
+
+  linkage_name = dwarf2_string_attr (die, DW_AT_linkage_name, cu);
+  if (linkage_name == NULL)
+    linkage_name = dwarf2_string_attr (die, DW_AT_MIPS_linkage_name, cu);
+
+  /* rustc emits invalid values for DW_AT_linkage_name.  Ignore these.
+     See https://github.com/rust-lang/rust/issues/32925.  */
+  if (cu->per_cu->lang == language_rust && linkage_name != NULL
+      && strchr (linkage_name, '{') != NULL)
+    linkage_name = NULL;
+
+  return linkage_name;
+}
+
+/* Compute the fully qualified name of DIE in CU.  If PHYSNAME is nonzero,
+   compute the physname for the object, which include a method's:
+   - formal parameters (C++),
+   - receiver type (Go),
+
+   The term "physname" is a bit confusing.
+   For C++, for example, it is the demangled name.
+   For Go, for example, it's the mangled name.
+
+   For Ada, return the DIE's linkage name rather than the fully qualified
+   name.  PHYSNAME is ignored..
+
+   The result is allocated on the objfile->per_bfd's obstack and
+   canonicalized.  */
+
+static const char *
+dwarf2_compute_name (const char *name,
+		     struct die_info *die, struct dwarf2_cu *cu,
+		     int physname)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+
+  if (name == NULL)
+    name = dwarf2_name (die, cu);
+
+  enum language lang = cu->per_cu->lang;
+
+  /* For Fortran GDB prefers DW_AT_*linkage_name for the physname if present
+     but otherwise compute it by typename_concat inside GDB.
+     FIXME: Actually this is not really true, or at least not always true.
+     It's all very confusing.  compute_and_set_names doesn't try to demangle
+     Fortran names because there is no mangling standard.  So new_symbol
+     will set the demangled name to the result of dwarf2_full_name, and it is
+     the demangled name that GDB uses if it exists.  */
+  if (lang == language_ada
+      || (lang == language_fortran && physname))
+    {
+      /* For Ada unit, we prefer the linkage name over the name, as
+	 the former contains the exported name, which the user expects
+	 to be able to reference.  Ideally, we want the user to be able
+	 to reference this entity using either natural or linkage name,
+	 but we haven't started looking at this enhancement yet.  */
+      const char *linkage_name = dw2_linkage_name (die, cu);
+
+      if (linkage_name != NULL)
+	return linkage_name;
+    }
+
+  /* These are the only languages we know how to qualify names in.  */
+  if (name != NULL
+      && (lang == language_cplus
+	  || lang == language_fortran || lang == language_d
+	  || lang == language_rust))
+    {
+      if (die_needs_namespace (die, cu))
+	{
+	  const char *prefix;
+	  const char *canonical_name = NULL;
+
+	  string_file buf;
+
+	  prefix = determine_prefix (die, cu);
+	  if (*prefix != '\0')
+	    {
+	      gdb::unique_xmalloc_ptr<char> prefixed_name
+		(typename_concat (NULL, prefix, name, physname, cu));
+
+	      buf.puts (prefixed_name.get ());
+	    }
+	  else
+	    buf.puts (name);
+
+	  /* Template parameters may be specified in the DIE's DW_AT_name, or
+	     as children with DW_TAG_template_type_param or
+	     DW_TAG_value_type_param.  If the latter, add them to the name
+	     here.  If the name already has template parameters, then
+	     skip this step; some versions of GCC emit both, and
+	     it is more efficient to use the pre-computed name.
+
+	     Something to keep in mind about this process: it is very
+	     unlikely, or in some cases downright impossible, to produce
+	     something that will match the mangled name of a function.
+	     If the definition of the function has the same debug info,
+	     we should be able to match up with it anyway.  But fallbacks
+	     using the minimal symbol, for instance to find a method
+	     implemented in a stripped copy of libstdc++, will not work.
+	     If we do not have debug info for the definition, we will have to
+	     match them up some other way.
+
+	     When we do name matching there is a related problem with function
+	     templates; two instantiated function templates are allowed to
+	     differ only by their return types, which we do not add here.  */
+
+	  if (lang == language_cplus && strchr (name, '<') == NULL)
+	    {
+	      struct attribute *attr;
+	      struct die_info *child;
+	      int first = 1;
+
+	      die->building_fullname = 1;
+
+	      for (child = die->child; child != NULL; child = child->sibling)
+		{
+		  struct type *type;
+		  LONGEST value;
+		  const gdb_byte *bytes;
+		  struct dwarf2_locexpr_baton *baton;
+		  struct value *v;
+
+		  if (child->tag != DW_TAG_template_type_param
+		      && child->tag != DW_TAG_template_value_param)
+		    continue;
+
+		  if (first)
+		    {
+		      buf.puts ("<");
+		      first = 0;
+		    }
+		  else
+		    buf.puts (", ");
+
+		  attr = dwarf2_attr (child, DW_AT_type, cu);
+		  if (attr == NULL)
+		    {
+		      complaint (_("template parameter missing DW_AT_type"));
+		      buf.puts ("UNKNOWN_TYPE");
+		      continue;
+		    }
+		  type = die_type (child, cu);
+
+		  if (child->tag == DW_TAG_template_type_param)
+		    {
+		      cu->language_defn->print_type (type, "", &buf, -1, 0,
+						     &type_print_raw_options);
+		      continue;
+		    }
+
+		  attr = dwarf2_attr (child, DW_AT_const_value, cu);
+		  if (attr == NULL)
+		    {
+		      complaint (_("template parameter missing "
+				   "DW_AT_const_value"));
+		      buf.puts ("UNKNOWN_VALUE");
+		      continue;
+		    }
+
+		  dwarf2_const_value_attr (attr, type, name,
+					   &cu->comp_unit_obstack, cu,
+					   &value, &bytes, &baton);
+
+		  if (type->has_no_signedness ())
+		    /* GDB prints characters as NUMBER 'CHAR'.  If that's
+		       changed, this can use value_print instead.  */
+		    cu->language_defn->printchar (value, type, &buf);
+		  else
+		    {
+		      struct value_print_options opts;
+
+		      if (baton != NULL)
+			v = dwarf2_evaluate_loc_desc (type, NULL,
+						      baton->data,
+						      baton->size,
+						      baton->per_cu,
+						      baton->per_objfile);
+		      else if (bytes != NULL)
+			{
+			  v = allocate_value (type);
+			  memcpy (value_contents_writeable (v), bytes,
+				  TYPE_LENGTH (type));
+			}
+		      else
+			v = value_from_longest (type, value);
+
+		      /* Specify decimal so that we do not depend on
+			 the radix.  */
+		      get_formatted_print_options (&opts, 'd');
+		      opts.raw = 1;
+		      value_print (v, &buf, &opts);
+		      release_value (v);
+		    }
+		}
+
+	      die->building_fullname = 0;
+
+	      if (!first)
+		{
+		  /* Close the argument list, with a space if necessary
+		     (nested templates).  */
+		  if (!buf.empty () && buf.string ().back () == '>')
+		    buf.puts (" >");
+		  else
+		    buf.puts (">");
+		}
+	    }
+
+	  /* For C++ methods, append formal parameter type
+	     information, if PHYSNAME.  */
+
+	  if (physname && die->tag == DW_TAG_subprogram
+	      && lang == language_cplus)
+	    {
+	      struct type *type = read_type_die (die, cu);
+
+	      c_type_print_args (type, &buf, 1, lang,
+				 &type_print_raw_options);
+
+	      if (lang == language_cplus)
+		{
+		  /* Assume that an artificial first parameter is
+		     "this", but do not crash if it is not.  RealView
+		     marks unnamed (and thus unused) parameters as
+		     artificial; there is no way to differentiate
+		     the two cases.  */
+		  if (type->num_fields () > 0
+		      && TYPE_FIELD_ARTIFICIAL (type, 0)
+		      && type->field (0).type ()->code () == TYPE_CODE_PTR
+		      && TYPE_CONST (TYPE_TARGET_TYPE (type->field (0).type ())))
+		    buf.puts (" const");
+		}
+	    }
+
+	  const std::string &intermediate_name = buf.string ();
+
+	  if (lang == language_cplus)
+	    canonical_name
+	      = dwarf2_canonicalize_name (intermediate_name.c_str (), cu,
+					  objfile);
+
+	  /* If we only computed INTERMEDIATE_NAME, or if
+	     INTERMEDIATE_NAME is already canonical, then we need to
+	     intern it.  */
+	  if (canonical_name == NULL || canonical_name == intermediate_name.c_str ())
+	    name = objfile->intern (intermediate_name);
+	  else
+	    name = canonical_name;
+	}
+    }
+
+  return name;
+}
+
+/* Return the fully qualified name of DIE, based on its DW_AT_name.
+   If scope qualifiers are appropriate they will be added.  The result
+   will be allocated on the storage_obstack, or NULL if the DIE does
+   not have a name.  NAME may either be from a previous call to
+   dwarf2_name or NULL.
+
+   The output string will be canonicalized (if C++).  */
+
+static const char *
+dwarf2_full_name (const char *name, struct die_info *die, struct dwarf2_cu *cu)
+{
+  return dwarf2_compute_name (name, die, cu, 0);
+}
+
+/* Construct a physname for the given DIE in CU.  NAME may either be
+   from a previous call to dwarf2_name or NULL.  The result will be
+   allocated on the objfile_objstack or NULL if the DIE does not have a
+   name.
+
+   The output string will be canonicalized (if C++).  */
+
+static const char *
+dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  const char *retval, *mangled = NULL, *canon = NULL;
+  int need_copy = 1;
+
+  /* In this case dwarf2_compute_name is just a shortcut not building anything
+     on its own.  */
+  if (!die_needs_namespace (die, cu))
+    return dwarf2_compute_name (name, die, cu, 1);
+
+  if (cu->per_cu->lang != language_rust)
+    mangled = dw2_linkage_name (die, cu);
+
+  /* DW_AT_linkage_name is missing in some cases - depend on what GDB
+     has computed.  */
+  gdb::unique_xmalloc_ptr<char> demangled;
+  if (mangled != NULL)
+    {
+      if (cu->language_defn->store_sym_names_in_linkage_form_p ())
+	{
+	  /* Do nothing (do not demangle the symbol name).  */
+	}
+      else
+	{
+	  /* Use DMGL_RET_DROP for C++ template functions to suppress
+	     their return type.  It is easier for GDB users to search
+	     for such functions as `name(params)' than `long name(params)'.
+	     In such case the minimal symbol names do not match the full
+	     symbol names but for template functions there is never a need
+	     to look up their definition from their declaration so
+	     the only disadvantage remains the minimal symbol variant
+	     `long name(params)' does not have the proper inferior type.  */
+	  demangled.reset (gdb_demangle (mangled,
+					 (DMGL_PARAMS | DMGL_ANSI
+					  | DMGL_RET_DROP)));
+	}
+      if (demangled)
+	canon = demangled.get ();
+      else
+	{
+	  canon = mangled;
+	  need_copy = 0;
+	}
+    }
+
+  if (canon == NULL || check_physname)
+    {
+      const char *physname = dwarf2_compute_name (name, die, cu, 1);
+
+      if (canon != NULL && strcmp (physname, canon) != 0)
+	{
+	  /* It may not mean a bug in GDB.  The compiler could also
+	     compute DW_AT_linkage_name incorrectly.  But in such case
+	     GDB would need to be bug-to-bug compatible.  */
+
+	  complaint (_("Computed physname <%s> does not match demangled <%s> "
+		       "(from linkage <%s>) - DIE at %s [in module %s]"),
+		     physname, canon, mangled, sect_offset_str (die->sect_off),
+		     objfile_name (objfile));
+
+	  /* Prefer DW_AT_linkage_name (in the CANON form) - when it
+	     is available here - over computed PHYSNAME.  It is safer
+	     against both buggy GDB and buggy compilers.  */
+
+	  retval = canon;
+	}
+      else
+	{
+	  retval = physname;
+	  need_copy = 0;
+	}
+    }
+  else
+    retval = canon;
+
+  if (need_copy)
+    retval = objfile->intern (retval);
+
+  return retval;
+}
+
+/* Inspect DIE in CU for a namespace alias.  If one exists, record
+   a new symbol for it.
+
+   Returns 1 if a namespace alias was recorded, 0 otherwise.  */
+
+static int
+read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  /* If the die does not have a name, this is not a namespace
+     alias.  */
+  attr = dwarf2_attr (die, DW_AT_name, cu);
+  if (attr != NULL)
+    {
+      int num;
+      struct die_info *d = die;
+      struct dwarf2_cu *imported_cu = cu;
+
+      /* If the compiler has nested DW_AT_imported_declaration DIEs,
+	 keep inspecting DIEs until we hit the underlying import.  */
+#define MAX_NESTED_IMPORTED_DECLARATIONS 100
+      for (num = 0; num  < MAX_NESTED_IMPORTED_DECLARATIONS; ++num)
+	{
+	  attr = dwarf2_attr (d, DW_AT_import, cu);
+	  if (attr == NULL)
+	    break;
+
+	  d = follow_die_ref (d, attr, &imported_cu);
+	  if (d->tag != DW_TAG_imported_declaration)
+	    break;
+	}
+
+      if (num == MAX_NESTED_IMPORTED_DECLARATIONS)
+	{
+	  complaint (_("DIE at %s has too many recursively imported "
+		       "declarations"), sect_offset_str (d->sect_off));
+	  return 0;
+	}
+
+      if (attr != NULL)
+	{
+	  struct type *type;
+	  sect_offset sect_off = attr->get_ref_die_offset ();
+
+	  type = get_die_type_at_offset (sect_off, cu->per_cu, cu->per_objfile);
+	  if (type != NULL && type->code () == TYPE_CODE_NAMESPACE)
+	    {
+	      /* This declaration is a global namespace alias.  Add
+		 a symbol for it whose type is the aliased namespace.  */
+	      new_symbol (die, type, cu);
+	      return 1;
+	    }
+	}
+    }
+
+  return 0;
+}
+
+/* Return the using directives repository (global or local?) to use in the
+   current context for CU.
+
+   For Ada, imported declarations can materialize renamings, which *may* be
+   global.  However it is impossible (for now?) in DWARF to distinguish
+   "external" imported declarations and "static" ones.  As all imported
+   declarations seem to be static in all other languages, make them all CU-wide
+   global only in Ada.  */
+
+static struct using_direct **
+using_directives (struct dwarf2_cu *cu)
+{
+  if (cu->per_cu->lang == language_ada
+      && cu->get_builder ()->outermost_context_p ())
+    return cu->get_builder ()->get_global_using_directives ();
+  else
+    return cu->get_builder ()->get_local_using_directives ();
+}
+
+/* Read the import statement specified by the given die and record it.  */
+
+static void
+read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct attribute *import_attr;
+  struct die_info *imported_die, *child_die;
+  struct dwarf2_cu *imported_cu;
+  const char *imported_name;
+  const char *imported_name_prefix;
+  const char *canonical_name;
+  const char *import_alias;
+  const char *imported_declaration = NULL;
+  const char *import_prefix;
+  std::vector<const char *> excludes;
+
+  import_attr = dwarf2_attr (die, DW_AT_import, cu);
+  if (import_attr == NULL)
+    {
+      complaint (_("Tag '%s' has no DW_AT_import"),
+		 dwarf_tag_name (die->tag));
+      return;
+    }
+
+  imported_cu = cu;
+  imported_die = follow_die_ref_or_sig (die, import_attr, &imported_cu);
+  imported_name = dwarf2_name (imported_die, imported_cu);
+  if (imported_name == NULL)
+    {
+      /* GCC bug: https://bugzilla.redhat.com/show_bug.cgi?id=506524
+
+	The import in the following code:
+	namespace A
+	  {
+	    typedef int B;
+	  }
+
+	int main ()
+	  {
+	    using A::B;
+	    B b;
+	    return b;
+	  }
+
+	...
+	 <2><51>: Abbrev Number: 3 (DW_TAG_imported_declaration)
+	    <52>   DW_AT_decl_file   : 1
+	    <53>   DW_AT_decl_line   : 6
+	    <54>   DW_AT_import      : <0x75>
+	 <2><58>: Abbrev Number: 4 (DW_TAG_typedef)
+	    <59>   DW_AT_name        : B
+	    <5b>   DW_AT_decl_file   : 1
+	    <5c>   DW_AT_decl_line   : 2
+	    <5d>   DW_AT_type        : <0x6e>
+	...
+	 <1><75>: Abbrev Number: 7 (DW_TAG_base_type)
+	    <76>   DW_AT_byte_size   : 4
+	    <77>   DW_AT_encoding    : 5        (signed)
+
+	imports the wrong die ( 0x75 instead of 0x58 ).
+	This case will be ignored until the gcc bug is fixed.  */
+      return;
+    }
+
+  /* Figure out the local name after import.  */
+  import_alias = dwarf2_name (die, cu);
+
+  /* Figure out where the statement is being imported to.  */
+  import_prefix = determine_prefix (die, cu);
+
+  /* Figure out what the scope of the imported die is and prepend it
+     to the name of the imported die.  */
+  imported_name_prefix = determine_prefix (imported_die, imported_cu);
+
+  if (imported_die->tag != DW_TAG_namespace
+      && imported_die->tag != DW_TAG_module)
+    {
+      imported_declaration = imported_name;
+      canonical_name = imported_name_prefix;
+    }
+  else if (strlen (imported_name_prefix) > 0)
+    canonical_name = obconcat (&objfile->objfile_obstack,
+			       imported_name_prefix,
+			       (cu->per_cu->lang == language_d
+				? "."
+				: "::"),
+			       imported_name, (char *) NULL);
+  else
+    canonical_name = imported_name;
+
+  if (die->tag == DW_TAG_imported_module
+      && cu->per_cu->lang == language_fortran)
+    for (child_die = die->child; child_die && child_die->tag;
+	 child_die = child_die->sibling)
+      {
+	/* DWARF-4: A Fortran use statement with a â€œrename listâ€� may be
+	   represented by an imported module entry with an import attribute
+	   referring to the module and owned entries corresponding to those
+	   entities that are renamed as part of being imported.  */
+
+	if (child_die->tag != DW_TAG_imported_declaration)
+	  {
+	    complaint (_("child DW_TAG_imported_declaration expected "
+			 "- DIE at %s [in module %s]"),
+		       sect_offset_str (child_die->sect_off),
+		       objfile_name (objfile));
+	    continue;
+	  }
+
+	import_attr = dwarf2_attr (child_die, DW_AT_import, cu);
+	if (import_attr == NULL)
+	  {
+	    complaint (_("Tag '%s' has no DW_AT_import"),
+		       dwarf_tag_name (child_die->tag));
+	    continue;
+	  }
+
+	imported_cu = cu;
+	imported_die = follow_die_ref_or_sig (child_die, import_attr,
+					      &imported_cu);
+	imported_name = dwarf2_name (imported_die, imported_cu);
+	if (imported_name == NULL)
+	  {
+	    complaint (_("child DW_TAG_imported_declaration has unknown "
+			 "imported name - DIE at %s [in module %s]"),
+		       sect_offset_str (child_die->sect_off),
+		       objfile_name (objfile));
+	    continue;
+	  }
+
+	excludes.push_back (imported_name);
+
+	process_die (child_die, cu);
+      }
+
+  add_using_directive (using_directives (cu),
+		       import_prefix,
+		       canonical_name,
+		       import_alias,
+		       imported_declaration,
+		       excludes,
+		       0,
+		       &objfile->objfile_obstack);
+}
+
+/* ICC<14 does not output the required DW_AT_declaration on incomplete
+   types, but gives them a size of zero.  Starting with version 14,
+   ICC is compatible with GCC.  */
+
+static bool
+producer_is_icc_lt_14 (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_icc_lt_14;
+}
+
+/* ICC generates a DW_AT_type for C void functions.  This was observed on
+   ICC 14.0.5.212, and appears to be against the DWARF spec (V5 3.3.2)
+   which says that void functions should not have a DW_AT_type.  */
+
+static bool
+producer_is_icc (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_icc;
+}
+
+/* Check for possibly missing DW_AT_comp_dir with relative .debug_line
+   directory paths.  GCC SVN r127613 (new option -fdebug-prefix-map) fixed
+   this, it was first present in GCC release 4.3.0.  */
+
+static bool
+producer_is_gcc_lt_4_3 (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_gcc_lt_4_3;
+}
+
+static file_and_directory
+find_file_and_directory (struct die_info *die, struct dwarf2_cu *cu)
+{
+  file_and_directory res;
+
+  /* Find the filename.  Do not use dwarf2_name here, since the filename
+     is not a source language identifier.  */
+  res.name = dwarf2_string_attr (die, DW_AT_name, cu);
+  res.comp_dir = dwarf2_string_attr (die, DW_AT_comp_dir, cu);
+
+  if (res.comp_dir == NULL
+      && producer_is_gcc_lt_4_3 (cu) && res.name != NULL
+      && IS_ABSOLUTE_PATH (res.name))
+    {
+      res.comp_dir_storage = ldirname (res.name);
+      if (!res.comp_dir_storage.empty ())
+	res.comp_dir = res.comp_dir_storage.c_str ();
+    }
+  if (res.comp_dir != NULL)
+    {
+      /* Irix 6.2 native cc prepends <machine>.: to the compilation
+	 directory, get rid of it.  */
+      const char *cp = strchr (res.comp_dir, ':');
+
+      if (cp && cp != res.comp_dir && cp[-1] == '.' && cp[1] == '/')
+	res.comp_dir = cp + 1;
+    }
+
+  if (res.name == NULL)
+    res.name = "<unknown>";
+
+  return res;
+}
+
+/* Handle DW_AT_stmt_list for a compilation unit.
+   DIE is the DW_TAG_compile_unit die for CU.
+   COMP_DIR is the compilation directory.  LOWPC is passed to
+   dwarf_decode_lines.  See dwarf_decode_lines comments about it.  */
+
+static void
+handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
+			const char *comp_dir, CORE_ADDR lowpc) /* ARI: editCase function */
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct attribute *attr;
+  struct line_header line_header_local;
+  hashval_t line_header_local_hash;
+  void **slot;
+  int decode_mapping;
+
+  gdb_assert (! cu->per_cu->is_debug_types);
+
+  attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
+  if (attr == NULL || !attr->form_is_unsigned ())
+    return;
+
+  sect_offset line_offset = (sect_offset) attr->as_unsigned ();
+
+  /* The line header hash table is only created if needed (it exists to
+     prevent redundant reading of the line table for partial_units).
+     If we're given a partial_unit, we'll need it.  If we're given a
+     compile_unit, then use the line header hash table if it's already
+     created, but don't create one just yet.  */
+
+  if (per_objfile->line_header_hash == NULL
+      && die->tag == DW_TAG_partial_unit)
+    {
+      per_objfile->line_header_hash
+	.reset (htab_create_alloc (127, line_header_hash_voidp,
+				   line_header_eq_voidp,
+				   htab_delete_entry<line_header>,
+				   xcalloc, xfree));
+    }
+
+  line_header_local.sect_off = line_offset;
+  line_header_local.offset_in_dwz = cu->per_cu->is_dwz;
+  line_header_local_hash = line_header_hash (&line_header_local);
+  if (per_objfile->line_header_hash != NULL)
+    {
+      slot = htab_find_slot_with_hash (per_objfile->line_header_hash.get (),
+				       &line_header_local,
+				       line_header_local_hash, NO_INSERT);
+
+      /* For DW_TAG_compile_unit we need info like symtab::linetable which
+	 is not present in *SLOT (since if there is something in *SLOT then
+	 it will be for a partial_unit).  */
+      if (die->tag == DW_TAG_partial_unit && slot != NULL)
+	{
+	  gdb_assert (*slot != NULL);
+	  cu->line_header = (struct line_header *) *slot;
+	  return;
+	}
+    }
+
+  /* dwarf_decode_line_header does not yet provide sufficient information.
+     We always have to call also dwarf_decode_lines for it.  */
+  line_header_up lh = dwarf_decode_line_header (line_offset, cu);
+  if (lh == NULL)
+    return;
+
+  cu->line_header = lh.release ();
+  cu->line_header_die_owner = die;
+
+  if (per_objfile->line_header_hash == NULL)
+    slot = NULL;
+  else
+    {
+      slot = htab_find_slot_with_hash (per_objfile->line_header_hash.get (),
+				       &line_header_local,
+				       line_header_local_hash, INSERT);
+      gdb_assert (slot != NULL);
+    }
+  if (slot != NULL && *slot == NULL)
+    {
+      /* This newly decoded line number information unit will be owned
+	 by line_header_hash hash table.  */
+      *slot = cu->line_header;
+      cu->line_header_die_owner = NULL;
+    }
+  else
+    {
+      /* We cannot free any current entry in (*slot) as that struct line_header
+	 may be already used by multiple CUs.  Create only temporary decoded
+	 line_header for this CU - it may happen at most once for each line
+	 number information unit.  And if we're not using line_header_hash
+	 then this is what we want as well.  */
+      gdb_assert (die->tag != DW_TAG_partial_unit);
+    }
+  decode_mapping = (die->tag != DW_TAG_partial_unit);
+  dwarf_decode_lines (cu->line_header, comp_dir, cu, NULL, lowpc,
+		      decode_mapping);
+
+}
+
+/* Process DW_TAG_compile_unit or DW_TAG_partial_unit.  */
+
+static void
+read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  CORE_ADDR lowpc = ((CORE_ADDR) -1);
+  CORE_ADDR highpc = ((CORE_ADDR) 0);
+  struct attribute *attr;
+  struct die_info *child_die;
+  CORE_ADDR baseaddr;
+
+  prepare_one_comp_unit (cu, die, cu->per_cu->lang);
+  baseaddr = objfile->text_section_offset ();
+
+  get_scope_pc_bounds (die, &lowpc, &highpc, cu);
+
+  /* If we didn't find a lowpc, set it to highpc to avoid complaints
+     from finish_block.  */
+  if (lowpc == ((CORE_ADDR) -1))
+    lowpc = highpc;
+  lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
+
+  file_and_directory fnd = find_file_and_directory (die, cu);
+
+  cu->start_symtab (fnd.name, fnd.comp_dir, lowpc);
+
+  gdb_assert (per_objfile->sym_cu == nullptr);
+  scoped_restore restore_sym_cu
+    = make_scoped_restore (&per_objfile->sym_cu, cu);
+
+  /* Decode line number information if present.  We do this before
+     processing child DIEs, so that the line header table is available
+     for DW_AT_decl_file.  */
+  handle_DW_AT_stmt_list (die, cu, fnd.comp_dir, lowpc);
+
+  /* Process all dies in compilation unit.  */
+  if (die->child != NULL)
+    {
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  process_die (child_die, cu);
+	  child_die = child_die->sibling;
+	}
+    }
+  per_objfile->sym_cu = nullptr;
+
+  /* Decode macro information, if present.  Dwarf 2 macro information
+     refers to information in the line number info statement program
+     header, so we can only read it if we've read the header
+     successfully.  */
+  attr = dwarf2_attr (die, DW_AT_macros, cu);
+  if (attr == NULL)
+    attr = dwarf2_attr (die, DW_AT_GNU_macros, cu);
+  if (attr != nullptr && attr->form_is_unsigned () && cu->line_header)
+    {
+      if (dwarf2_attr (die, DW_AT_macro_info, cu))
+	complaint (_("CU refers to both DW_AT_macros and DW_AT_macro_info"));
+
+      dwarf_decode_macros (cu, attr->as_unsigned (), 1);
+    }
+  else
+    {
+      attr = dwarf2_attr (die, DW_AT_macro_info, cu);
+      if (attr != nullptr && attr->form_is_unsigned () && cu->line_header)
+	{
+	  unsigned int macro_offset = attr->as_unsigned ();
+
+	  dwarf_decode_macros (cu, macro_offset, 0);
+	}
+    }
+}
+
+void
+dwarf2_cu::setup_type_unit_groups (struct die_info *die)
+{
+  struct type_unit_group *tu_group;
+  int first_time;
+  struct attribute *attr;
+  unsigned int i;
+  struct signatured_type *sig_type;
+
+  gdb_assert (per_cu->is_debug_types);
+  sig_type = (struct signatured_type *) per_cu;
+
+  attr = dwarf2_attr (die, DW_AT_stmt_list, this);
+
+  /* If we're using .gdb_index (includes -readnow) then
+     per_cu->type_unit_group may not have been set up yet.  */
+  if (sig_type->type_unit_group == NULL)
+    sig_type->type_unit_group = get_type_unit_group (this, attr);
+  tu_group = sig_type->type_unit_group;
+
+  /* If we've already processed this stmt_list there's no real need to
+     do it again, we could fake it and just recreate the part we need
+     (file name,index -> symtab mapping).  If data shows this optimization
+     is useful we can do it then.  */
+  type_unit_group_unshareable *tug_unshare
+    = per_objfile->get_type_unit_group_unshareable (tu_group);
+  first_time = tug_unshare->compunit_symtab == NULL;
+
+  /* We have to handle the case of both a missing DW_AT_stmt_list or bad
+     debug info.  */
+  line_header_up lh;
+  if (attr != NULL && attr->form_is_unsigned ())
+    {
+      sect_offset line_offset = (sect_offset) attr->as_unsigned ();
+      lh = dwarf_decode_line_header (line_offset, this);
+    }
+  if (lh == NULL)
+    {
+      if (first_time)
+	start_symtab ("", NULL, 0);
+      else
+	{
+	  gdb_assert (tug_unshare->symtabs == NULL);
+	  gdb_assert (m_builder == nullptr);
+	  struct compunit_symtab *cust = tug_unshare->compunit_symtab;
+	  m_builder.reset (new struct buildsym_compunit
+			   (COMPUNIT_OBJFILE (cust), "",
+			    COMPUNIT_DIRNAME (cust),
+			    compunit_language (cust),
+			    0, cust));
+	  list_in_scope = get_builder ()->get_file_symbols ();
+	}
+      return;
+    }
+
+  line_header = lh.release ();
+  line_header_die_owner = die;
+
+  if (first_time)
+    {
+      struct compunit_symtab *cust = start_symtab ("", NULL, 0);
+
+      /* Note: We don't assign tu_group->compunit_symtab yet because we're
+	 still initializing it, and our caller (a few levels up)
+	 process_full_type_unit still needs to know if this is the first
+	 time.  */
+
+      tug_unshare->symtabs
+	= XOBNEWVEC (&COMPUNIT_OBJFILE (cust)->objfile_obstack,
+		     struct symtab *, line_header->file_names_size ());
+
+      auto &file_names = line_header->file_names ();
+      for (i = 0; i < file_names.size (); ++i)
+	{
+	  file_entry &fe = file_names[i];
+	  dwarf2_start_subfile (this, fe.name,
+				fe.include_dir (line_header));
+	  buildsym_compunit *b = get_builder ();
+	  if (b->get_current_subfile ()->symtab == NULL)
+	    {
+	      /* NOTE: start_subfile will recognize when it's been
+		 passed a file it has already seen.  So we can't
+		 assume there's a simple mapping from
+		 cu->line_header->file_names to subfiles, plus
+		 cu->line_header->file_names may contain dups.  */
+	      b->get_current_subfile ()->symtab
+		= allocate_symtab (cust, b->get_current_subfile ()->name);
+	    }
+
+	  fe.symtab = b->get_current_subfile ()->symtab;
+	  tug_unshare->symtabs[i] = fe.symtab;
+	}
+    }
+  else
+    {
+      gdb_assert (m_builder == nullptr);
+      struct compunit_symtab *cust = tug_unshare->compunit_symtab;
+      m_builder.reset (new struct buildsym_compunit
+		       (COMPUNIT_OBJFILE (cust), "",
+			COMPUNIT_DIRNAME (cust),
+			compunit_language (cust),
+			0, cust));
+      list_in_scope = get_builder ()->get_file_symbols ();
+
+      auto &file_names = line_header->file_names ();
+      for (i = 0; i < file_names.size (); ++i)
+	{
+	  file_entry &fe = file_names[i];
+	  fe.symtab = tug_unshare->symtabs[i];
+	}
+    }
+
+  /* The main symtab is allocated last.  Type units don't have DW_AT_name
+     so they don't have a "real" (so to speak) symtab anyway.
+     There is later code that will assign the main symtab to all symbols
+     that don't have one.  We need to handle the case of a symbol with a
+     missing symtab (DW_AT_decl_file) anyway.  */
+}
+
+/* Process DW_TAG_type_unit.
+   For TUs we want to skip the first top level sibling if it's not the
+   actual type being defined by this TU.  In this case the first top
+   level sibling is there to provide context only.  */
+
+static void
+read_type_unit_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct die_info *child_die;
+
+  prepare_one_comp_unit (cu, die, language_minimal);
+
+  /* Initialize (or reinitialize) the machinery for building symtabs.
+     We do this before processing child DIEs, so that the line header table
+     is available for DW_AT_decl_file.  */
+  cu->setup_type_unit_groups (die);
+
+  if (die->child != NULL)
+    {
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  process_die (child_die, cu);
+	  child_die = child_die->sibling;
+	}
+    }
+}
+
+/* DWO/DWP files.
+
+   http://gcc.gnu.org/wiki/DebugFission
+   http://gcc.gnu.org/wiki/DebugFissionDWP
+
+   To simplify handling of both DWO files ("object" files with the DWARF info)
+   and DWP files (a file with the DWOs packaged up into one file), we treat
+   DWP files as having a collection of virtual DWO files.  */
+
+static hashval_t
+hash_dwo_file (const void *item)
+{
+  const struct dwo_file *dwo_file = (const struct dwo_file *) item;
+  hashval_t hash;
+
+  hash = htab_hash_string (dwo_file->dwo_name);
+  if (dwo_file->comp_dir != NULL)
+    hash += htab_hash_string (dwo_file->comp_dir);
+  return hash;
+}
+
+static int
+eq_dwo_file (const void *item_lhs, const void *item_rhs)
+{
+  const struct dwo_file *lhs = (const struct dwo_file *) item_lhs;
+  const struct dwo_file *rhs = (const struct dwo_file *) item_rhs;
+
+  if (strcmp (lhs->dwo_name, rhs->dwo_name) != 0)
+    return 0;
+  if (lhs->comp_dir == NULL || rhs->comp_dir == NULL)
+    return lhs->comp_dir == rhs->comp_dir;
+  return strcmp (lhs->comp_dir, rhs->comp_dir) == 0;
+}
+
+/* Allocate a hash table for DWO files.  */
+
+static htab_up
+allocate_dwo_file_hash_table ()
+{
+  return htab_up (htab_create_alloc (41,
+				     hash_dwo_file,
+				     eq_dwo_file,
+				     htab_delete_entry<dwo_file>,
+				     xcalloc, xfree));
+}
+
+/* Lookup DWO file DWO_NAME.  */
+
+static void **
+lookup_dwo_file_slot (dwarf2_per_objfile *per_objfile,
+		      const char *dwo_name,
+		      const char *comp_dir)
+{
+  struct dwo_file find_entry;
+  void **slot;
+
+  if (per_objfile->per_bfd->dwo_files == NULL)
+    per_objfile->per_bfd->dwo_files = allocate_dwo_file_hash_table ();
+
+  find_entry.dwo_name = dwo_name;
+  find_entry.comp_dir = comp_dir;
+  slot = htab_find_slot (per_objfile->per_bfd->dwo_files.get (), &find_entry,
+			 INSERT);
+
+  return slot;
+}
+
+static hashval_t
+hash_dwo_unit (const void *item)
+{
+  const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item;
+
+  /* This drops the top 32 bits of the id, but is ok for a hash.  */
+  return dwo_unit->signature;
+}
+
+static int
+eq_dwo_unit (const void *item_lhs, const void *item_rhs)
+{
+  const struct dwo_unit *lhs = (const struct dwo_unit *) item_lhs;
+  const struct dwo_unit *rhs = (const struct dwo_unit *) item_rhs;
+
+  /* The signature is assumed to be unique within the DWO file.
+     So while object file CU dwo_id's always have the value zero,
+     that's OK, assuming each object file DWO file has only one CU,
+     and that's the rule for now.  */
+  return lhs->signature == rhs->signature;
+}
+
+/* Allocate a hash table for DWO CUs,TUs.
+   There is one of these tables for each of CUs,TUs for each DWO file.  */
+
+static htab_up
+allocate_dwo_unit_table ()
+{
+  /* Start out with a pretty small number.
+     Generally DWO files contain only one CU and maybe some TUs.  */
+  return htab_up (htab_create_alloc (3,
+				     hash_dwo_unit,
+				     eq_dwo_unit,
+				     NULL, xcalloc, xfree));
+}
+
+/* die_reader_func for create_dwo_cu.  */
+
+static void
+create_dwo_cu_reader (const struct die_reader_specs *reader,
+		      const gdb_byte *info_ptr,
+		      struct die_info *comp_unit_die,
+		      struct dwo_file *dwo_file,
+		      struct dwo_unit *dwo_unit)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  sect_offset sect_off = cu->per_cu->sect_off;
+  struct dwarf2_section_info *section = cu->per_cu->section;
+
+  gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die);
+  if (!signature.has_value ())
+    {
+      complaint (_("Dwarf Error: debug entry at offset %s is missing"
+		   " its dwo_id [in module %s]"),
+		 sect_offset_str (sect_off), dwo_file->dwo_name);
+      return;
+    }
+
+  dwo_unit->dwo_file = dwo_file;
+  dwo_unit->signature = *signature;
+  dwo_unit->section = section;
+  dwo_unit->sect_off = sect_off;
+  dwo_unit->length = cu->per_cu->length;
+
+  dwarf_read_debug_printf ("  offset %s, dwo_id %s",
+			   sect_offset_str (sect_off),
+			   hex_string (dwo_unit->signature));
+}
+
+/* Create the dwo_units for the CUs in a DWO_FILE.
+   Note: This function processes DWO files only, not DWP files.  */
+
+static void
+create_cus_hash_table (dwarf2_per_objfile *per_objfile,
+		       dwarf2_cu *cu, struct dwo_file &dwo_file,
+		       dwarf2_section_info &section, htab_up &cus_htab)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  dwarf2_per_bfd *per_bfd = per_objfile->per_bfd;
+  const gdb_byte *info_ptr, *end_ptr;
+
+  section.read (objfile);
+  info_ptr = section.buffer;
+
+  if (info_ptr == NULL)
+    return;
+
+  dwarf_read_debug_printf ("Reading %s for %s:",
+			   section.get_name (),
+			   section.get_file_name ());
+
+  end_ptr = info_ptr + section.size;
+  while (info_ptr < end_ptr)
+    {
+      struct dwarf2_per_cu_data per_cu;
+      struct dwo_unit read_unit {};
+      struct dwo_unit *dwo_unit;
+      void **slot;
+      sect_offset sect_off = (sect_offset) (info_ptr - section.buffer);
+
+      per_cu.per_bfd = per_bfd;
+      per_cu.is_debug_types = 0;
+      per_cu.sect_off = sect_offset (info_ptr - section.buffer);
+      per_cu.section = &section;
+
+      cutu_reader reader (&per_cu, per_objfile, cu, &dwo_file);
+      if (!reader.dummy_p)
+	create_dwo_cu_reader (&reader, reader.info_ptr, reader.comp_unit_die,
+			      &dwo_file, &read_unit);
+      info_ptr += per_cu.length;
+
+      // If the unit could not be parsed, skip it.
+      if (read_unit.dwo_file == NULL)
+	continue;
+
+      if (cus_htab == NULL)
+	cus_htab = allocate_dwo_unit_table ();
+
+      dwo_unit = OBSTACK_ZALLOC (&per_bfd->obstack,
+				 struct dwo_unit);
+      *dwo_unit = read_unit;
+      slot = htab_find_slot (cus_htab.get (), dwo_unit, INSERT);
+      gdb_assert (slot != NULL);
+      if (*slot != NULL)
+	{
+	  const struct dwo_unit *dup_cu = (const struct dwo_unit *)*slot;
+	  sect_offset dup_sect_off = dup_cu->sect_off;
+
+	  complaint (_("debug cu entry at offset %s is duplicate to"
+		       " the entry at offset %s, signature %s"),
+		     sect_offset_str (sect_off), sect_offset_str (dup_sect_off),
+		     hex_string (dwo_unit->signature));
+	}
+      *slot = (void *)dwo_unit;
+    }
+}
+
+/* DWP file .debug_{cu,tu}_index section format:
+   [ref: http://gcc.gnu.org/wiki/DebugFissionDWP]
+   [ref: http://dwarfstd.org/doc/DWARF5.pdf, sect 7.3.5 "DWARF Package Files"]
+
+   DWP Versions 1 & 2 are older, pre-standard format versions.  The first
+   officially standard DWP format was published with DWARF v5 and is called
+   Version 5.  There are no versions 3 or 4.
+
+   DWP Version 1:
+
+   Both index sections have the same format, and serve to map a 64-bit
+   signature to a set of section numbers.  Each section begins with a header,
+   followed by a hash table of 64-bit signatures, a parallel table of 32-bit
+   indexes, and a pool of 32-bit section numbers.  The index sections will be
+   aligned at 8-byte boundaries in the file.
+
+   The index section header consists of:
+
+    V, 32 bit version number
+    -, 32 bits unused
+    N, 32 bit number of compilation units or type units in the index
+    M, 32 bit number of slots in the hash table
+
+   Numbers are recorded using the byte order of the application binary.
+
+   The hash table begins at offset 16 in the section, and consists of an array
+   of M 64-bit slots.  Each slot contains a 64-bit signature (using the byte
+   order of the application binary).  Unused slots in the hash table are 0.
+   (We rely on the extreme unlikeliness of a signature being exactly 0.)
+
+   The parallel table begins immediately after the hash table
+   (at offset 16 + 8 * M from the beginning of the section), and consists of an
+   array of 32-bit indexes (using the byte order of the application binary),
+   corresponding 1-1 with slots in the hash table.  Each entry in the parallel
+   table contains a 32-bit index into the pool of section numbers.  For unused
+   hash table slots, the corresponding entry in the parallel table will be 0.
+
+   The pool of section numbers begins immediately following the hash table
+   (at offset 16 + 12 * M from the beginning of the section).  The pool of
+   section numbers consists of an array of 32-bit words (using the byte order
+   of the application binary).  Each item in the array is indexed starting
+   from 0.  The hash table entry provides the index of the first section
+   number in the set.  Additional section numbers in the set follow, and the
+   set is terminated by a 0 entry (section number 0 is not used in ELF).
+
+   In each set of section numbers, the .debug_info.dwo or .debug_types.dwo
+   section must be the first entry in the set, and the .debug_abbrev.dwo must
+   be the second entry. Other members of the set may follow in any order.
+
+   ---
+
+   DWP Versions 2 and 5:
+
+   DWP Versions 2 and 5 combine all the .debug_info, etc. sections into one,
+   and the entries in the index tables are now offsets into these sections.
+   CU offsets begin at 0.  TU offsets begin at the size of the .debug_info
+   section.
+
+   Index Section Contents:
+    Header
+    Hash Table of Signatures   dwp_hash_table.hash_table
+    Parallel Table of Indices  dwp_hash_table.unit_table
+    Table of Section Offsets   dwp_hash_table.{v2|v5}.{section_ids,offsets}
+    Table of Section Sizes     dwp_hash_table.{v2|v5}.sizes
+
+   The index section header consists of:
+
+    V, 32 bit version number
+    L, 32 bit number of columns in the table of section offsets
+    N, 32 bit number of compilation units or type units in the index
+    M, 32 bit number of slots in the hash table
+
+   Numbers are recorded using the byte order of the application binary.
+
+   The hash table has the same format as version 1.
+   The parallel table of indices has the same format as version 1,
+   except that the entries are origin-1 indices into the table of sections
+   offsets and the table of section sizes.
+
+   The table of offsets begins immediately following the parallel table
+   (at offset 16 + 12 * M from the beginning of the section).  The table is
+   a two-dimensional array of 32-bit words (using the byte order of the
+   application binary), with L columns and N+1 rows, in row-major order.
+   Each row in the array is indexed starting from 0.  The first row provides
+   a key to the remaining rows: each column in this row provides an identifier
+   for a debug section, and the offsets in the same column of subsequent rows
+   refer to that section.  The section identifiers for Version 2 are:
+
+    DW_SECT_INFO         1  .debug_info.dwo
+    DW_SECT_TYPES        2  .debug_types.dwo
+    DW_SECT_ABBREV       3  .debug_abbrev.dwo
+    DW_SECT_LINE         4  .debug_line.dwo
+    DW_SECT_LOC          5  .debug_loc.dwo
+    DW_SECT_STR_OFFSETS  6  .debug_str_offsets.dwo
+    DW_SECT_MACINFO      7  .debug_macinfo.dwo
+    DW_SECT_MACRO        8  .debug_macro.dwo
+
+   The section identifiers for Version 5 are:
+
+    DW_SECT_INFO_V5         1  .debug_info.dwo
+    DW_SECT_RESERVED_V5     2  --
+    DW_SECT_ABBREV_V5       3  .debug_abbrev.dwo
+    DW_SECT_LINE_V5         4  .debug_line.dwo
+    DW_SECT_LOCLISTS_V5     5  .debug_loclists.dwo
+    DW_SECT_STR_OFFSETS_V5  6  .debug_str_offsets.dwo
+    DW_SECT_MACRO_V5        7  .debug_macro.dwo
+    DW_SECT_RNGLISTS_V5     8  .debug_rnglists.dwo
+
+   The offsets provided by the CU and TU index sections are the base offsets
+   for the contributions made by each CU or TU to the corresponding section
+   in the package file.  Each CU and TU header contains an abbrev_offset
+   field, used to find the abbreviations table for that CU or TU within the
+   contribution to the .debug_abbrev.dwo section for that CU or TU, and should
+   be interpreted as relative to the base offset given in the index section.
+   Likewise, offsets into .debug_line.dwo from DW_AT_stmt_list attributes
+   should be interpreted as relative to the base offset for .debug_line.dwo,
+   and offsets into other debug sections obtained from DWARF attributes should
+   also be interpreted as relative to the corresponding base offset.
+
+   The table of sizes begins immediately following the table of offsets.
+   Like the table of offsets, it is a two-dimensional array of 32-bit words,
+   with L columns and N rows, in row-major order.  Each row in the array is
+   indexed starting from 1 (row 0 is shared by the two tables).
+
+   ---
+
+   Hash table lookup is handled the same in version 1 and 2:
+
+   We assume that N and M will not exceed 2^32 - 1.
+   The size of the hash table, M, must be 2^k such that 2^k > 3*N/2.
+
+   Given a 64-bit compilation unit signature or a type signature S, an entry
+   in the hash table is located as follows:
+
+   1) Calculate a primary hash H = S & MASK(k), where MASK(k) is a mask with
+      the low-order k bits all set to 1.
+
+   2) Calculate a secondary hash H' = (((S >> 32) & MASK(k)) | 1).
+
+   3) If the hash table entry at index H matches the signature, use that
+      entry.  If the hash table entry at index H is unused (all zeroes),
+      terminate the search: the signature is not present in the table.
+
+   4) Let H = (H + H') modulo M. Repeat at Step 3.
+
+   Because M > N and H' and M are relatively prime, the search is guaranteed
+   to stop at an unused slot or find the match.  */
+
+/* Create a hash table to map DWO IDs to their CU/TU entry in
+   .debug_{info,types}.dwo in DWP_FILE.
+   Returns NULL if there isn't one.
+   Note: This function processes DWP files only, not DWO files.  */
+
+static struct dwp_hash_table *
+create_dwp_hash_table (dwarf2_per_objfile *per_objfile,
+		       struct dwp_file *dwp_file, int is_debug_types)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *dbfd = dwp_file->dbfd.get ();
+  const gdb_byte *index_ptr, *index_end;
+  struct dwarf2_section_info *index;
+  uint32_t version, nr_columns, nr_units, nr_slots;
+  struct dwp_hash_table *htab;
+
+  if (is_debug_types)
+    index = &dwp_file->sections.tu_index;
+  else
+    index = &dwp_file->sections.cu_index;
+
+  if (index->empty ())
+    return NULL;
+  index->read (objfile);
+
+  index_ptr = index->buffer;
+  index_end = index_ptr + index->size;
+
+  /* For Version 5, the version is really 2 bytes of data & 2 bytes of padding.
+     For now it's safe to just read 4 bytes (particularly as it's difficult to
+     tell if you're dealing with Version 5 before you've read the version).   */
+  version = read_4_bytes (dbfd, index_ptr);
+  index_ptr += 4;
+  if (version == 2 || version == 5)
+    nr_columns = read_4_bytes (dbfd, index_ptr);
+  else
+    nr_columns = 0;
+  index_ptr += 4;
+  nr_units = read_4_bytes (dbfd, index_ptr);
+  index_ptr += 4;
+  nr_slots = read_4_bytes (dbfd, index_ptr);
+  index_ptr += 4;
+
+  if (version != 1 && version != 2 && version != 5)
+    {
+      error (_("Dwarf Error: unsupported DWP file version (%s)"
+	       " [in module %s]"),
+	     pulongest (version), dwp_file->name);
+    }
+  if (nr_slots != (nr_slots & -nr_slots))
+    {
+      error (_("Dwarf Error: number of slots in DWP hash table (%s)"
+	       " is not power of 2 [in module %s]"),
+	     pulongest (nr_slots), dwp_file->name);
+    }
+
+  htab = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwp_hash_table);
+  htab->version = version;
+  htab->nr_columns = nr_columns;
+  htab->nr_units = nr_units;
+  htab->nr_slots = nr_slots;
+  htab->hash_table = index_ptr;
+  htab->unit_table = htab->hash_table + sizeof (uint64_t) * nr_slots;
+
+  /* Exit early if the table is empty.  */
+  if (nr_slots == 0 || nr_units == 0
+      || (version == 2 && nr_columns == 0)
+      || (version == 5 && nr_columns == 0))
+    {
+      /* All must be zero.  */
+      if (nr_slots != 0 || nr_units != 0
+	  || (version == 2 && nr_columns != 0)
+	  || (version == 5 && nr_columns != 0))
+	{
+	  complaint (_("Empty DWP but nr_slots,nr_units,nr_columns not"
+		       " all zero [in modules %s]"),
+		     dwp_file->name);
+	}
+      return htab;
+    }
+
+  if (version == 1)
+    {
+      htab->section_pool.v1.indices =
+	htab->unit_table + sizeof (uint32_t) * nr_slots;
+      /* It's harder to decide whether the section is too small in v1.
+	 V1 is deprecated anyway so we punt.  */
+    }
+  else if (version == 2)
+    {
+      const gdb_byte *ids_ptr = htab->unit_table + sizeof (uint32_t) * nr_slots;
+      int *ids = htab->section_pool.v2.section_ids;
+      size_t sizeof_ids = sizeof (htab->section_pool.v2.section_ids);
+      /* Reverse map for error checking.  */
+      int ids_seen[DW_SECT_MAX + 1];
+      int i;
+
+      if (nr_columns < 2)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, too few columns"
+		   " in section table [in module %s]"),
+		 dwp_file->name);
+	}
+      if (nr_columns > MAX_NR_V2_DWO_SECTIONS)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, too many columns"
+		   " in section table [in module %s]"),
+		 dwp_file->name);
+	}
+      memset (ids, 255, sizeof_ids);
+      memset (ids_seen, 255, sizeof (ids_seen));
+      for (i = 0; i < nr_columns; ++i)
+	{
+	  int id = read_4_bytes (dbfd, ids_ptr + i * sizeof (uint32_t));
+
+	  if (id < DW_SECT_MIN || id > DW_SECT_MAX)
+	    {
+	      error (_("Dwarf Error: bad DWP hash table, bad section id %d"
+		       " in section table [in module %s]"),
+		     id, dwp_file->name);
+	    }
+	  if (ids_seen[id] != -1)
+	    {
+	      error (_("Dwarf Error: bad DWP hash table, duplicate section"
+		       " id %d in section table [in module %s]"),
+		     id, dwp_file->name);
+	    }
+	  ids_seen[id] = i;
+	  ids[i] = id;
+	}
+      /* Must have exactly one info or types section.  */
+      if (((ids_seen[DW_SECT_INFO] != -1)
+	   + (ids_seen[DW_SECT_TYPES] != -1))
+	  != 1)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, missing/duplicate"
+		   " DWO info/types section [in module %s]"),
+		 dwp_file->name);
+	}
+      /* Must have an abbrev section.  */
+      if (ids_seen[DW_SECT_ABBREV] == -1)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, missing DWO abbrev"
+		   " section [in module %s]"),
+		 dwp_file->name);
+	}
+      htab->section_pool.v2.offsets = ids_ptr + sizeof (uint32_t) * nr_columns;
+      htab->section_pool.v2.sizes =
+	htab->section_pool.v2.offsets + (sizeof (uint32_t)
+					 * nr_units * nr_columns);
+      if ((htab->section_pool.v2.sizes + (sizeof (uint32_t)
+					  * nr_units * nr_columns))
+	  > index_end)
+	{
+	  error (_("Dwarf Error: DWP index section is corrupt (too small)"
+		   " [in module %s]"),
+		 dwp_file->name);
+	}
+    }
+  else /* version == 5  */
+    {
+      const gdb_byte *ids_ptr = htab->unit_table + sizeof (uint32_t) * nr_slots;
+      int *ids = htab->section_pool.v5.section_ids;
+      size_t sizeof_ids = sizeof (htab->section_pool.v5.section_ids);
+      /* Reverse map for error checking.  */
+      int ids_seen[DW_SECT_MAX_V5 + 1];
+
+      if (nr_columns < 2)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, too few columns"
+		   " in section table [in module %s]"),
+		 dwp_file->name);
+	}
+      if (nr_columns > MAX_NR_V5_DWO_SECTIONS)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, too many columns"
+		   " in section table [in module %s]"),
+		 dwp_file->name);
+	}
+      memset (ids, 255, sizeof_ids);
+      memset (ids_seen, 255, sizeof (ids_seen));
+      for (int i = 0; i < nr_columns; ++i)
+	{
+	  int id = read_4_bytes (dbfd, ids_ptr + i * sizeof (uint32_t));
+
+	  if (id < DW_SECT_MIN || id > DW_SECT_MAX_V5)
+	    {
+	      error (_("Dwarf Error: bad DWP hash table, bad section id %d"
+		       " in section table [in module %s]"),
+		     id, dwp_file->name);
+	    }
+	  if (ids_seen[id] != -1)
+	    {
+	      error (_("Dwarf Error: bad DWP hash table, duplicate section"
+		       " id %d in section table [in module %s]"),
+		     id, dwp_file->name);
+	    }
+	  ids_seen[id] = i;
+	  ids[i] = id;
+	}
+      /* Must have seen an info section.  */
+      if (ids_seen[DW_SECT_INFO_V5] == -1)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, missing/duplicate"
+		   " DWO info/types section [in module %s]"),
+		 dwp_file->name);
+	}
+      /* Must have an abbrev section.  */
+      if (ids_seen[DW_SECT_ABBREV_V5] == -1)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, missing DWO abbrev"
+		   " section [in module %s]"),
+		 dwp_file->name);
+	}
+      htab->section_pool.v5.offsets = ids_ptr + sizeof (uint32_t) * nr_columns;
+      htab->section_pool.v5.sizes
+	= htab->section_pool.v5.offsets + (sizeof (uint32_t)
+					 * nr_units * nr_columns);
+      if ((htab->section_pool.v5.sizes + (sizeof (uint32_t)
+					  * nr_units * nr_columns))
+	  > index_end)
+	{
+	  error (_("Dwarf Error: DWP index section is corrupt (too small)"
+		   " [in module %s]"),
+		 dwp_file->name);
+	}
+    }
+
+  return htab;
+}
+
+/* Update SECTIONS with the data from SECTP.
+
+   This function is like the other "locate" section routines, but in
+   this context the sections to read comes from the DWP V1 hash table,
+   not the full ELF section table.
+
+   The result is non-zero for success, or zero if an error was found.  */
+
+static int
+locate_v1_virtual_dwo_sections (asection *sectp,
+				struct virtual_v1_dwo_sections *sections)
+{
+  const struct dwop_section_names *names = &dwop_section_names;
+
+  if (names->abbrev_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->abbrev.s.section != NULL)
+	return 0;
+      sections->abbrev.s.section = sectp;
+      sections->abbrev.size = bfd_section_size (sectp);
+    }
+  else if (names->info_dwo.matches (sectp->name)
+	   || names->types_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->info_or_types.s.section != NULL)
+	return 0;
+      sections->info_or_types.s.section = sectp;
+      sections->info_or_types.size = bfd_section_size (sectp);
+    }
+  else if (names->line_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->line.s.section != NULL)
+	return 0;
+      sections->line.s.section = sectp;
+      sections->line.size = bfd_section_size (sectp);
+    }
+  else if (names->loc_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->loc.s.section != NULL)
+	return 0;
+      sections->loc.s.section = sectp;
+      sections->loc.size = bfd_section_size (sectp);
+    }
+  else if (names->macinfo_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->macinfo.s.section != NULL)
+	return 0;
+      sections->macinfo.s.section = sectp;
+      sections->macinfo.size = bfd_section_size (sectp);
+    }
+  else if (names->macro_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->macro.s.section != NULL)
+	return 0;
+      sections->macro.s.section = sectp;
+      sections->macro.size = bfd_section_size (sectp);
+    }
+  else if (names->str_offsets_dwo.matches (sectp->name))
+    {
+      /* There can be only one.  */
+      if (sections->str_offsets.s.section != NULL)
+	return 0;
+      sections->str_offsets.s.section = sectp;
+      sections->str_offsets.size = bfd_section_size (sectp);
+    }
+  else
+    {
+      /* No other kind of section is valid.  */
+      return 0;
+    }
+
+  return 1;
+}
+
+/* Create a dwo_unit object for the DWO unit with signature SIGNATURE.
+   UNIT_INDEX is the index of the DWO unit in the DWP hash table.
+   COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU.
+   This is for DWP version 1 files.  */
+
+static struct dwo_unit *
+create_dwo_unit_in_dwp_v1 (dwarf2_per_objfile *per_objfile,
+			   struct dwp_file *dwp_file,
+			   uint32_t unit_index,
+			   const char *comp_dir,
+			   ULONGEST signature, int is_debug_types)
+{
+  const struct dwp_hash_table *dwp_htab =
+    is_debug_types ? dwp_file->tus : dwp_file->cus;
+  bfd *dbfd = dwp_file->dbfd.get ();
+  const char *kind = is_debug_types ? "TU" : "CU";
+  struct dwo_file *dwo_file;
+  struct dwo_unit *dwo_unit;
+  struct virtual_v1_dwo_sections sections;
+  void **dwo_file_slot;
+  int i;
+
+  gdb_assert (dwp_file->version == 1);
+
+  dwarf_read_debug_printf ("Reading %s %s/%s in DWP V1 file: %s",
+			   kind, pulongest (unit_index), hex_string (signature),
+			   dwp_file->name);
+
+  /* Fetch the sections of this DWO unit.
+     Put a limit on the number of sections we look for so that bad data
+     doesn't cause us to loop forever.  */
+
+#define MAX_NR_V1_DWO_SECTIONS \
+  (1 /* .debug_info or .debug_types */ \
+   + 1 /* .debug_abbrev */ \
+   + 1 /* .debug_line */ \
+   + 1 /* .debug_loc */ \
+   + 1 /* .debug_str_offsets */ \
+   + 1 /* .debug_macro or .debug_macinfo */ \
+   + 1 /* trailing zero */)
+
+  memset (&sections, 0, sizeof (sections));
+
+  for (i = 0; i < MAX_NR_V1_DWO_SECTIONS; ++i)
+    {
+      asection *sectp;
+      uint32_t section_nr =
+	read_4_bytes (dbfd,
+		      dwp_htab->section_pool.v1.indices
+		      + (unit_index + i) * sizeof (uint32_t));
+
+      if (section_nr == 0)
+	break;
+      if (section_nr >= dwp_file->num_sections)
+	{
+	  error (_("Dwarf Error: bad DWP hash table, section number too large"
+		   " [in module %s]"),
+		 dwp_file->name);
+	}
+
+      sectp = dwp_file->elf_sections[section_nr];
+      if (! locate_v1_virtual_dwo_sections (sectp, &sections))
+	{
+	  error (_("Dwarf Error: bad DWP hash table, invalid section found"
+		   " [in module %s]"),
+		 dwp_file->name);
+	}
+    }
+
+  if (i < 2
+      || sections.info_or_types.empty ()
+      || sections.abbrev.empty ())
+    {
+      error (_("Dwarf Error: bad DWP hash table, missing DWO sections"
+	       " [in module %s]"),
+	     dwp_file->name);
+    }
+  if (i == MAX_NR_V1_DWO_SECTIONS)
+    {
+      error (_("Dwarf Error: bad DWP hash table, too many DWO sections"
+	       " [in module %s]"),
+	     dwp_file->name);
+    }
+
+  /* It's easier for the rest of the code if we fake a struct dwo_file and
+     have dwo_unit "live" in that.  At least for now.
+
+     The DWP file can be made up of a random collection of CUs and TUs.
+     However, for each CU + set of TUs that came from the same original DWO
+     file, we can combine them back into a virtual DWO file to save space
+     (fewer struct dwo_file objects to allocate).  Remember that for really
+     large apps there can be on the order of 8K CUs and 200K TUs, or more.  */
+
+  std::string virtual_dwo_name =
+    string_printf ("virtual-dwo/%d-%d-%d-%d",
+		   sections.abbrev.get_id (),
+		   sections.line.get_id (),
+		   sections.loc.get_id (),
+		   sections.str_offsets.get_id ());
+  /* Can we use an existing virtual DWO file?  */
+  dwo_file_slot = lookup_dwo_file_slot (per_objfile, virtual_dwo_name.c_str (),
+					comp_dir);
+  /* Create one if necessary.  */
+  if (*dwo_file_slot == NULL)
+    {
+      dwarf_read_debug_printf ("Creating virtual DWO: %s",
+			       virtual_dwo_name.c_str ());
+
+      dwo_file = new struct dwo_file;
+      dwo_file->dwo_name = per_objfile->objfile->intern (virtual_dwo_name);
+      dwo_file->comp_dir = comp_dir;
+      dwo_file->sections.abbrev = sections.abbrev;
+      dwo_file->sections.line = sections.line;
+      dwo_file->sections.loc = sections.loc;
+      dwo_file->sections.macinfo = sections.macinfo;
+      dwo_file->sections.macro = sections.macro;
+      dwo_file->sections.str_offsets = sections.str_offsets;
+      /* The "str" section is global to the entire DWP file.  */
+      dwo_file->sections.str = dwp_file->sections.str;
+      /* The info or types section is assigned below to dwo_unit,
+	 there's no need to record it in dwo_file.
+	 Also, we can't simply record type sections in dwo_file because
+	 we record a pointer into the vector in dwo_unit.  As we collect more
+	 types we'll grow the vector and eventually have to reallocate space
+	 for it, invalidating all copies of pointers into the previous
+	 contents.  */
+      *dwo_file_slot = dwo_file;
+    }
+  else
+    {
+      dwarf_read_debug_printf ("Using existing virtual DWO: %s",
+			       virtual_dwo_name.c_str ());
+
+      dwo_file = (struct dwo_file *) *dwo_file_slot;
+    }
+
+  dwo_unit = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwo_unit);
+  dwo_unit->dwo_file = dwo_file;
+  dwo_unit->signature = signature;
+  dwo_unit->section =
+    XOBNEW (&per_objfile->per_bfd->obstack, struct dwarf2_section_info);
+  *dwo_unit->section = sections.info_or_types;
+  /* dwo_unit->{offset,length,type_offset_in_tu} are set later.  */
+
+  return dwo_unit;
+}
+
+/* Subroutine of create_dwo_unit_in_dwp_v2 and create_dwo_unit_in_dwp_v5 to
+   simplify them.  Given a pointer to the containing section SECTION, and
+   OFFSET,SIZE of the piece within that section used by a TU/CU, return a
+   virtual section of just that piece.  */
+
+static struct dwarf2_section_info
+create_dwp_v2_or_v5_section (dwarf2_per_objfile *per_objfile,
+			     struct dwarf2_section_info *section,
+			     bfd_size_type offset, bfd_size_type size)
+{
+  struct dwarf2_section_info result;
+  asection *sectp;
+
+  gdb_assert (section != NULL);
+  gdb_assert (!section->is_virtual);
+
+  memset (&result, 0, sizeof (result));
+  result.s.containing_section = section;
+  result.is_virtual = true;
+
+  if (size == 0)
+    return result;
+
+  sectp = section->get_bfd_section ();
+
+  /* Flag an error if the piece denoted by OFFSET,SIZE is outside the
+     bounds of the real section.  This is a pretty-rare event, so just
+     flag an error (easier) instead of a warning and trying to cope.  */
+  if (sectp == NULL
+      || offset + size > bfd_section_size (sectp))
+    {
+      error (_("Dwarf Error: Bad DWP V2 or V5 section info, doesn't fit"
+	       " in section %s [in module %s]"),
+	     sectp ? bfd_section_name (sectp) : "<unknown>",
+	     objfile_name (per_objfile->objfile));
+    }
+
+  result.virtual_offset = offset;
+  result.size = size;
+  return result;
+}
+
+/* Create a dwo_unit object for the DWO unit with signature SIGNATURE.
+   UNIT_INDEX is the index of the DWO unit in the DWP hash table.
+   COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU.
+   This is for DWP version 2 files.  */
+
+static struct dwo_unit *
+create_dwo_unit_in_dwp_v2 (dwarf2_per_objfile *per_objfile,
+			   struct dwp_file *dwp_file,
+			   uint32_t unit_index,
+			   const char *comp_dir,
+			   ULONGEST signature, int is_debug_types)
+{
+  const struct dwp_hash_table *dwp_htab =
+    is_debug_types ? dwp_file->tus : dwp_file->cus;
+  bfd *dbfd = dwp_file->dbfd.get ();
+  const char *kind = is_debug_types ? "TU" : "CU";
+  struct dwo_file *dwo_file;
+  struct dwo_unit *dwo_unit;
+  struct virtual_v2_or_v5_dwo_sections sections;
+  void **dwo_file_slot;
+  int i;
+
+  gdb_assert (dwp_file->version == 2);
+
+  dwarf_read_debug_printf ("Reading %s %s/%s in DWP V2 file: %s",
+			   kind, pulongest (unit_index), hex_string (signature),
+			   dwp_file->name);
+
+  /* Fetch the section offsets of this DWO unit.  */
+
+  memset (&sections, 0, sizeof (sections));
+
+  for (i = 0; i < dwp_htab->nr_columns; ++i)
+    {
+      uint32_t offset = read_4_bytes (dbfd,
+				      dwp_htab->section_pool.v2.offsets
+				      + (((unit_index - 1) * dwp_htab->nr_columns
+					  + i)
+					 * sizeof (uint32_t)));
+      uint32_t size = read_4_bytes (dbfd,
+				    dwp_htab->section_pool.v2.sizes
+				    + (((unit_index - 1) * dwp_htab->nr_columns
+					+ i)
+				       * sizeof (uint32_t)));
+
+      switch (dwp_htab->section_pool.v2.section_ids[i])
+	{
+	case DW_SECT_INFO:
+	case DW_SECT_TYPES:
+	  sections.info_or_types_offset = offset;
+	  sections.info_or_types_size = size;
+	  break;
+	case DW_SECT_ABBREV:
+	  sections.abbrev_offset = offset;
+	  sections.abbrev_size = size;
+	  break;
+	case DW_SECT_LINE:
+	  sections.line_offset = offset;
+	  sections.line_size = size;
+	  break;
+	case DW_SECT_LOC:
+	  sections.loc_offset = offset;
+	  sections.loc_size = size;
+	  break;
+	case DW_SECT_STR_OFFSETS:
+	  sections.str_offsets_offset = offset;
+	  sections.str_offsets_size = size;
+	  break;
+	case DW_SECT_MACINFO:
+	  sections.macinfo_offset = offset;
+	  sections.macinfo_size = size;
+	  break;
+	case DW_SECT_MACRO:
+	  sections.macro_offset = offset;
+	  sections.macro_size = size;
+	  break;
+	}
+    }
+
+  /* It's easier for the rest of the code if we fake a struct dwo_file and
+     have dwo_unit "live" in that.  At least for now.
+
+     The DWP file can be made up of a random collection of CUs and TUs.
+     However, for each CU + set of TUs that came from the same original DWO
+     file, we can combine them back into a virtual DWO file to save space
+     (fewer struct dwo_file objects to allocate).  Remember that for really
+     large apps there can be on the order of 8K CUs and 200K TUs, or more.  */
+
+  std::string virtual_dwo_name =
+    string_printf ("virtual-dwo/%ld-%ld-%ld-%ld",
+		   (long) (sections.abbrev_size ? sections.abbrev_offset : 0),
+		   (long) (sections.line_size ? sections.line_offset : 0),
+		   (long) (sections.loc_size ? sections.loc_offset : 0),
+		   (long) (sections.str_offsets_size
+			   ? sections.str_offsets_offset : 0));
+  /* Can we use an existing virtual DWO file?  */
+  dwo_file_slot = lookup_dwo_file_slot (per_objfile, virtual_dwo_name.c_str (),
+					comp_dir);
+  /* Create one if necessary.  */
+  if (*dwo_file_slot == NULL)
+    {
+      dwarf_read_debug_printf ("Creating virtual DWO: %s",
+			       virtual_dwo_name.c_str ());
+
+      dwo_file = new struct dwo_file;
+      dwo_file->dwo_name = per_objfile->objfile->intern (virtual_dwo_name);
+      dwo_file->comp_dir = comp_dir;
+      dwo_file->sections.abbrev =
+	create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.abbrev,
+				     sections.abbrev_offset,
+				     sections.abbrev_size);
+      dwo_file->sections.line =
+	create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.line,
+				     sections.line_offset,
+				     sections.line_size);
+      dwo_file->sections.loc =
+	create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.loc,
+				     sections.loc_offset, sections.loc_size);
+      dwo_file->sections.macinfo =
+	create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.macinfo,
+				     sections.macinfo_offset,
+				     sections.macinfo_size);
+      dwo_file->sections.macro =
+	create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.macro,
+				     sections.macro_offset,
+				     sections.macro_size);
+      dwo_file->sections.str_offsets =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.str_offsets,
+				     sections.str_offsets_offset,
+				     sections.str_offsets_size);
+      /* The "str" section is global to the entire DWP file.  */
+      dwo_file->sections.str = dwp_file->sections.str;
+      /* The info or types section is assigned below to dwo_unit,
+	 there's no need to record it in dwo_file.
+	 Also, we can't simply record type sections in dwo_file because
+	 we record a pointer into the vector in dwo_unit.  As we collect more
+	 types we'll grow the vector and eventually have to reallocate space
+	 for it, invalidating all copies of pointers into the previous
+	 contents.  */
+      *dwo_file_slot = dwo_file;
+    }
+  else
+    {
+      dwarf_read_debug_printf ("Using existing virtual DWO: %s",
+			       virtual_dwo_name.c_str ());
+
+      dwo_file = (struct dwo_file *) *dwo_file_slot;
+    }
+
+  dwo_unit = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwo_unit);
+  dwo_unit->dwo_file = dwo_file;
+  dwo_unit->signature = signature;
+  dwo_unit->section =
+    XOBNEW (&per_objfile->per_bfd->obstack, struct dwarf2_section_info);
+  *dwo_unit->section = create_dwp_v2_or_v5_section
+			 (per_objfile,
+			  is_debug_types
+			  ? &dwp_file->sections.types
+			  : &dwp_file->sections.info,
+			  sections.info_or_types_offset,
+			  sections.info_or_types_size);
+  /* dwo_unit->{offset,length,type_offset_in_tu} are set later.  */
+
+  return dwo_unit;
+}
+
+/* Create a dwo_unit object for the DWO unit with signature SIGNATURE.
+   UNIT_INDEX is the index of the DWO unit in the DWP hash table.
+   COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU.
+   This is for DWP version 5 files.  */
+
+static struct dwo_unit *
+create_dwo_unit_in_dwp_v5 (dwarf2_per_objfile *per_objfile,
+			   struct dwp_file *dwp_file,
+			   uint32_t unit_index,
+			   const char *comp_dir,
+			   ULONGEST signature, int is_debug_types)
+{
+  const struct dwp_hash_table *dwp_htab
+    = is_debug_types ? dwp_file->tus : dwp_file->cus;
+  bfd *dbfd = dwp_file->dbfd.get ();
+  const char *kind = is_debug_types ? "TU" : "CU";
+  struct dwo_file *dwo_file;
+  struct dwo_unit *dwo_unit;
+  struct virtual_v2_or_v5_dwo_sections sections {};
+  void **dwo_file_slot;
+
+  gdb_assert (dwp_file->version == 5);
+
+  dwarf_read_debug_printf ("Reading %s %s/%s in DWP V5 file: %s",
+			   kind, pulongest (unit_index), hex_string (signature),
+			   dwp_file->name);
+
+  /* Fetch the section offsets of this DWO unit.  */
+
+  /*  memset (&sections, 0, sizeof (sections)); */
+
+  for (int i = 0; i < dwp_htab->nr_columns; ++i)
+    {
+      uint32_t offset = read_4_bytes (dbfd,
+				      dwp_htab->section_pool.v5.offsets
+				      + (((unit_index - 1)
+					  * dwp_htab->nr_columns
+					  + i)
+					 * sizeof (uint32_t)));
+      uint32_t size = read_4_bytes (dbfd,
+				    dwp_htab->section_pool.v5.sizes
+				    + (((unit_index - 1) * dwp_htab->nr_columns
+					+ i)
+				       * sizeof (uint32_t)));
+
+      switch (dwp_htab->section_pool.v5.section_ids[i])
+	{
+	  case DW_SECT_ABBREV_V5:
+	    sections.abbrev_offset = offset;
+	    sections.abbrev_size = size;
+	    break;
+	  case DW_SECT_INFO_V5:
+	    sections.info_or_types_offset = offset;
+	    sections.info_or_types_size = size;
+	    break;
+	  case DW_SECT_LINE_V5:
+	    sections.line_offset = offset;
+	    sections.line_size = size;
+	    break;
+	  case DW_SECT_LOCLISTS_V5:
+	    sections.loclists_offset = offset;
+	    sections.loclists_size = size;
+	    break;
+	  case DW_SECT_MACRO_V5:
+	    sections.macro_offset = offset;
+	    sections.macro_size = size;
+	    break;
+	  case DW_SECT_RNGLISTS_V5:
+	    sections.rnglists_offset = offset;
+	    sections.rnglists_size = size;
+	    break;
+	  case DW_SECT_STR_OFFSETS_V5:
+	    sections.str_offsets_offset = offset;
+	    sections.str_offsets_size = size;
+	    break;
+	  case DW_SECT_RESERVED_V5:
+	  default:
+	    break;
+	}
+    }
+
+  /* It's easier for the rest of the code if we fake a struct dwo_file and
+     have dwo_unit "live" in that.  At least for now.
+
+     The DWP file can be made up of a random collection of CUs and TUs.
+     However, for each CU + set of TUs that came from the same original DWO
+     file, we can combine them back into a virtual DWO file to save space
+     (fewer struct dwo_file objects to allocate).  Remember that for really
+     large apps there can be on the order of 8K CUs and 200K TUs, or more.  */
+
+  std::string virtual_dwo_name =
+    string_printf ("virtual-dwo/%ld-%ld-%ld-%ld-%ld-%ld",
+		 (long) (sections.abbrev_size ? sections.abbrev_offset : 0),
+		 (long) (sections.line_size ? sections.line_offset : 0),
+		 (long) (sections.loclists_size ? sections.loclists_offset : 0),
+		 (long) (sections.str_offsets_size
+			    ? sections.str_offsets_offset : 0),
+		 (long) (sections.macro_size ? sections.macro_offset : 0),
+		 (long) (sections.rnglists_size ? sections.rnglists_offset: 0));
+  /* Can we use an existing virtual DWO file?  */
+  dwo_file_slot = lookup_dwo_file_slot (per_objfile,
+					virtual_dwo_name.c_str (),
+					comp_dir);
+  /* Create one if necessary.  */
+  if (*dwo_file_slot == NULL)
+    {
+      dwarf_read_debug_printf ("Creating virtual DWO: %s",
+			       virtual_dwo_name.c_str ());
+
+      dwo_file = new struct dwo_file;
+      dwo_file->dwo_name = per_objfile->objfile->intern (virtual_dwo_name);
+      dwo_file->comp_dir = comp_dir;
+      dwo_file->sections.abbrev =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.abbrev,
+				     sections.abbrev_offset,
+				     sections.abbrev_size);
+      dwo_file->sections.line =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.line,
+				     sections.line_offset, sections.line_size);
+      dwo_file->sections.macro =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.macro,
+				     sections.macro_offset,
+				     sections.macro_size);
+      dwo_file->sections.loclists =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.loclists,
+				     sections.loclists_offset,
+				     sections.loclists_size);
+      dwo_file->sections.rnglists =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.rnglists,
+				     sections.rnglists_offset,
+				     sections.rnglists_size);
+      dwo_file->sections.str_offsets =
+	create_dwp_v2_or_v5_section (per_objfile,
+				     &dwp_file->sections.str_offsets,
+				     sections.str_offsets_offset,
+				     sections.str_offsets_size);
+      /* The "str" section is global to the entire DWP file.  */
+      dwo_file->sections.str = dwp_file->sections.str;
+      /* The info or types section is assigned below to dwo_unit,
+	 there's no need to record it in dwo_file.
+	 Also, we can't simply record type sections in dwo_file because
+	 we record a pointer into the vector in dwo_unit.  As we collect more
+	 types we'll grow the vector and eventually have to reallocate space
+	 for it, invalidating all copies of pointers into the previous
+	 contents.  */
+      *dwo_file_slot = dwo_file;
+    }
+  else
+    {
+      dwarf_read_debug_printf ("Using existing virtual DWO: %s",
+			       virtual_dwo_name.c_str ());
+
+      dwo_file = (struct dwo_file *) *dwo_file_slot;
+    }
+
+  dwo_unit = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwo_unit);
+  dwo_unit->dwo_file = dwo_file;
+  dwo_unit->signature = signature;
+  dwo_unit->section
+    = XOBNEW (&per_objfile->per_bfd->obstack, struct dwarf2_section_info);
+  *dwo_unit->section = create_dwp_v2_or_v5_section (per_objfile,
+					      &dwp_file->sections.info,
+					      sections.info_or_types_offset,
+					      sections.info_or_types_size);
+  /* dwo_unit->{offset,length,type_offset_in_tu} are set later.  */
+
+  return dwo_unit;
+}
+
+/* Lookup the DWO unit with SIGNATURE in DWP_FILE.
+   Returns NULL if the signature isn't found.  */
+
+static struct dwo_unit *
+lookup_dwo_unit_in_dwp (dwarf2_per_objfile *per_objfile,
+			struct dwp_file *dwp_file, const char *comp_dir,
+			ULONGEST signature, int is_debug_types)
+{
+  const struct dwp_hash_table *dwp_htab =
+    is_debug_types ? dwp_file->tus : dwp_file->cus;
+  bfd *dbfd = dwp_file->dbfd.get ();
+  uint32_t mask = dwp_htab->nr_slots - 1;
+  uint32_t hash = signature & mask;
+  uint32_t hash2 = ((signature >> 32) & mask) | 1;
+  unsigned int i;
+  void **slot;
+  struct dwo_unit find_dwo_cu;
+
+  memset (&find_dwo_cu, 0, sizeof (find_dwo_cu));
+  find_dwo_cu.signature = signature;
+  slot = htab_find_slot (is_debug_types
+			 ? dwp_file->loaded_tus.get ()
+			 : dwp_file->loaded_cus.get (),
+			 &find_dwo_cu, INSERT);
+
+  if (*slot != NULL)
+    return (struct dwo_unit *) *slot;
+
+  /* Use a for loop so that we don't loop forever on bad debug info.  */
+  for (i = 0; i < dwp_htab->nr_slots; ++i)
+    {
+      ULONGEST signature_in_table;
+
+      signature_in_table =
+	read_8_bytes (dbfd, dwp_htab->hash_table + hash * sizeof (uint64_t));
+      if (signature_in_table == signature)
+	{
+	  uint32_t unit_index =
+	    read_4_bytes (dbfd,
+			  dwp_htab->unit_table + hash * sizeof (uint32_t));
+
+	  if (dwp_file->version == 1)
+	    {
+	      *slot = create_dwo_unit_in_dwp_v1 (per_objfile, dwp_file,
+						 unit_index, comp_dir,
+						 signature, is_debug_types);
+	    }
+	  else if (dwp_file->version == 2)
+	    {
+	      *slot = create_dwo_unit_in_dwp_v2 (per_objfile, dwp_file,
+						 unit_index, comp_dir,
+						 signature, is_debug_types);
+	    }
+	  else /* version == 5  */
+	    {
+	      *slot = create_dwo_unit_in_dwp_v5 (per_objfile, dwp_file,
+						 unit_index, comp_dir,
+						 signature, is_debug_types);
+	    }
+	  return (struct dwo_unit *) *slot;
+	}
+      if (signature_in_table == 0)
+	return NULL;
+      hash = (hash + hash2) & mask;
+    }
+
+  error (_("Dwarf Error: bad DWP hash table, lookup didn't terminate"
+	   " [in module %s]"),
+	 dwp_file->name);
+}
+
+/* Subroutine of open_dwo_file,open_dwp_file to simplify them.
+   Open the file specified by FILE_NAME and hand it off to BFD for
+   preliminary analysis.  Return a newly initialized bfd *, which
+   includes a canonicalized copy of FILE_NAME.
+   If IS_DWP is TRUE, we're opening a DWP file, otherwise a DWO file.
+   SEARCH_CWD is true if the current directory is to be searched.
+   It will be searched before debug-file-directory.
+   If successful, the file is added to the bfd include table of the
+   objfile's bfd (see gdb_bfd_record_inclusion).
+   If unable to find/open the file, return NULL.
+   NOTE: This function is derived from symfile_bfd_open.  */
+
+static gdb_bfd_ref_ptr
+try_open_dwop_file (dwarf2_per_objfile *per_objfile,
+		    const char *file_name, int is_dwp, int search_cwd)
+{
+  int desc;
+  /* Blech.  OPF_TRY_CWD_FIRST also disables searching the path list if
+     FILE_NAME contains a '/'.  So we can't use it.  Instead prepend "."
+     to debug_file_directory.  */
+  const char *search_path;
+  static const char dirname_separator_string[] = { DIRNAME_SEPARATOR, '\0' };
+
+  gdb::unique_xmalloc_ptr<char> search_path_holder;
+  if (search_cwd)
+    {
+      if (*debug_file_directory != '\0')
+	{
+	  search_path_holder.reset (concat (".", dirname_separator_string,
+					    debug_file_directory,
+					    (char *) NULL));
+	  search_path = search_path_holder.get ();
+	}
+      else
+	search_path = ".";
+    }
+  else
+    search_path = debug_file_directory;
+
+  /* Add the path for the executable binary to the list of search paths.  */
+  std::string objfile_dir = ldirname (objfile_name (per_objfile->objfile));
+  search_path_holder.reset (concat (objfile_dir.c_str (),
+				    dirname_separator_string,
+				    search_path, nullptr));
+  search_path = search_path_holder.get ();
+
+  openp_flags flags = OPF_RETURN_REALPATH;
+  if (is_dwp)
+    flags |= OPF_SEARCH_IN_PATH;
+
+  gdb::unique_xmalloc_ptr<char> absolute_name;
+  desc = openp (search_path, flags, file_name,
+		O_RDONLY | O_BINARY, &absolute_name);
+  if (desc < 0)
+    return NULL;
+
+  gdb_bfd_ref_ptr sym_bfd (gdb_bfd_open (absolute_name.get (),
+					 gnutarget, desc));
+  if (sym_bfd == NULL)
+    return NULL;
+  bfd_set_cacheable (sym_bfd.get (), 1);
+
+  if (!bfd_check_format (sym_bfd.get (), bfd_object))
+    return NULL;
+
+  /* Success.  Record the bfd as having been included by the objfile's bfd.
+     This is important because things like demangled_names_hash lives in the
+     objfile's per_bfd space and may have references to things like symbol
+     names that live in the DWO/DWP file's per_bfd space.  PR 16426.  */
+  gdb_bfd_record_inclusion (per_objfile->objfile->obfd, sym_bfd.get ());
+
+  return sym_bfd;
+}
+
+/* Try to open DWO file FILE_NAME.
+   COMP_DIR is the DW_AT_comp_dir attribute.
+   The result is the bfd handle of the file.
+   If there is a problem finding or opening the file, return NULL.
+   Upon success, the canonicalized path of the file is stored in the bfd,
+   same as symfile_bfd_open.  */
+
+static gdb_bfd_ref_ptr
+open_dwo_file (dwarf2_per_objfile *per_objfile,
+	       const char *file_name, const char *comp_dir)
+{
+  if (IS_ABSOLUTE_PATH (file_name))
+    return try_open_dwop_file (per_objfile, file_name,
+			       0 /*is_dwp*/, 0 /*search_cwd*/);
+
+  /* Before trying the search path, try DWO_NAME in COMP_DIR.  */
+
+  if (comp_dir != NULL)
+    {
+      gdb::unique_xmalloc_ptr<char> path_to_try
+	(concat (comp_dir, SLASH_STRING, file_name, (char *) NULL));
+
+      /* NOTE: If comp_dir is a relative path, this will also try the
+	 search path, which seems useful.  */
+      gdb_bfd_ref_ptr abfd (try_open_dwop_file (per_objfile, path_to_try.get (),
+						0 /*is_dwp*/,
+						1 /*search_cwd*/));
+      if (abfd != NULL)
+	return abfd;
+    }
+
+  /* That didn't work, try debug-file-directory, which, despite its name,
+     is a list of paths.  */
+
+  if (*debug_file_directory == '\0')
+    return NULL;
+
+  return try_open_dwop_file (per_objfile, file_name,
+			     0 /*is_dwp*/, 1 /*search_cwd*/);
+}
+
+/* This function is mapped across the sections and remembers the offset and
+   size of each of the DWO debugging sections we are interested in.  */
+
+static void
+dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp,
+			    dwo_sections *dwo_sections)
+{
+  const struct dwop_section_names *names = &dwop_section_names;
+
+  if (names->abbrev_dwo.matches (sectp->name))
+    {
+      dwo_sections->abbrev.s.section = sectp;
+      dwo_sections->abbrev.size = bfd_section_size (sectp);
+    }
+  else if (names->info_dwo.matches (sectp->name))
+    {
+      dwo_sections->info.s.section = sectp;
+      dwo_sections->info.size = bfd_section_size (sectp);
+    }
+  else if (names->line_dwo.matches (sectp->name))
+    {
+      dwo_sections->line.s.section = sectp;
+      dwo_sections->line.size = bfd_section_size (sectp);
+    }
+  else if (names->loc_dwo.matches (sectp->name))
+    {
+      dwo_sections->loc.s.section = sectp;
+      dwo_sections->loc.size = bfd_section_size (sectp);
+    }
+  else if (names->loclists_dwo.matches (sectp->name))
+    {
+      dwo_sections->loclists.s.section = sectp;
+      dwo_sections->loclists.size = bfd_section_size (sectp);
+    }
+  else if (names->macinfo_dwo.matches (sectp->name))
+    {
+      dwo_sections->macinfo.s.section = sectp;
+      dwo_sections->macinfo.size = bfd_section_size (sectp);
+    }
+  else if (names->macro_dwo.matches (sectp->name))
+    {
+      dwo_sections->macro.s.section = sectp;
+      dwo_sections->macro.size = bfd_section_size (sectp);
+    }
+  else if (names->rnglists_dwo.matches (sectp->name))
+    {
+      dwo_sections->rnglists.s.section = sectp;
+      dwo_sections->rnglists.size = bfd_section_size (sectp);
+    }
+  else if (names->str_dwo.matches (sectp->name))
+    {
+      dwo_sections->str.s.section = sectp;
+      dwo_sections->str.size = bfd_section_size (sectp);
+    }
+  else if (names->str_offsets_dwo.matches (sectp->name))
+    {
+      dwo_sections->str_offsets.s.section = sectp;
+      dwo_sections->str_offsets.size = bfd_section_size (sectp);
+    }
+  else if (names->types_dwo.matches (sectp->name))
+    {
+      struct dwarf2_section_info type_section;
+
+      memset (&type_section, 0, sizeof (type_section));
+      type_section.s.section = sectp;
+      type_section.size = bfd_section_size (sectp);
+      dwo_sections->types.push_back (type_section);
+    }
+}
+
+/* Initialize the use of the DWO file specified by DWO_NAME and referenced
+   by PER_CU.  This is for the non-DWP case.
+   The result is NULL if DWO_NAME can't be found.  */
+
+static struct dwo_file *
+open_and_init_dwo_file (dwarf2_cu *cu, const char *dwo_name,
+			const char *comp_dir)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+  gdb_bfd_ref_ptr dbfd = open_dwo_file (per_objfile, dwo_name, comp_dir);
+  if (dbfd == NULL)
+    {
+      dwarf_read_debug_printf ("DWO file not found: %s", dwo_name);
+
+      return NULL;
+    }
+
+  dwo_file_up dwo_file (new struct dwo_file);
+  dwo_file->dwo_name = dwo_name;
+  dwo_file->comp_dir = comp_dir;
+  dwo_file->dbfd = std::move (dbfd);
+
+  for (asection *sec : gdb_bfd_sections (dwo_file->dbfd))
+    dwarf2_locate_dwo_sections (dwo_file->dbfd.get (), sec,
+				&dwo_file->sections);
+
+  create_cus_hash_table (per_objfile, cu, *dwo_file, dwo_file->sections.info,
+			 dwo_file->cus);
+
+  if (cu->per_cu->dwarf_version < 5)
+    {
+      create_debug_types_hash_table (per_objfile, dwo_file.get (),
+				     dwo_file->sections.types, dwo_file->tus);
+    }
+  else
+    {
+      create_debug_type_hash_table (per_objfile, dwo_file.get (),
+				    &dwo_file->sections.info, dwo_file->tus,
+				    rcuh_kind::COMPILE);
+    }
+
+  dwarf_read_debug_printf ("DWO file found: %s", dwo_name);
+
+  return dwo_file.release ();
+}
+
+/* This function is mapped across the sections and remembers the offset and
+   size of each of the DWP debugging sections common to version 1 and 2 that
+   we are interested in.  */
+
+static void
+dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp,
+				   dwp_file *dwp_file)
+{
+  const struct dwop_section_names *names = &dwop_section_names;
+  unsigned int elf_section_nr = elf_section_data (sectp)->this_idx;
+
+  /* Record the ELF section number for later lookup: this is what the
+     .debug_cu_index,.debug_tu_index tables use in DWP V1.  */
+  gdb_assert (elf_section_nr < dwp_file->num_sections);
+  dwp_file->elf_sections[elf_section_nr] = sectp;
+
+  /* Look for specific sections that we need.  */
+  if (names->str_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.str.s.section = sectp;
+      dwp_file->sections.str.size = bfd_section_size (sectp);
+    }
+  else if (names->cu_index.matches (sectp->name))
+    {
+      dwp_file->sections.cu_index.s.section = sectp;
+      dwp_file->sections.cu_index.size = bfd_section_size (sectp);
+    }
+  else if (names->tu_index.matches (sectp->name))
+    {
+      dwp_file->sections.tu_index.s.section = sectp;
+      dwp_file->sections.tu_index.size = bfd_section_size (sectp);
+    }
+}
+
+/* This function is mapped across the sections and remembers the offset and
+   size of each of the DWP version 2 debugging sections that we are interested
+   in.  This is split into a separate function because we don't know if we
+   have version 1 or 2 or 5 until we parse the cu_index/tu_index sections.  */
+
+static void
+dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
+{
+  struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr;
+  const struct dwop_section_names *names = &dwop_section_names;
+  unsigned int elf_section_nr = elf_section_data (sectp)->this_idx;
+
+  /* Record the ELF section number for later lookup: this is what the
+     .debug_cu_index,.debug_tu_index tables use in DWP V1.  */
+  gdb_assert (elf_section_nr < dwp_file->num_sections);
+  dwp_file->elf_sections[elf_section_nr] = sectp;
+
+  /* Look for specific sections that we need.  */
+  if (names->abbrev_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.abbrev.s.section = sectp;
+      dwp_file->sections.abbrev.size = bfd_section_size (sectp);
+    }
+  else if (names->info_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.info.s.section = sectp;
+      dwp_file->sections.info.size = bfd_section_size (sectp);
+    }
+  else if (names->line_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.line.s.section = sectp;
+      dwp_file->sections.line.size = bfd_section_size (sectp);
+    }
+  else if (names->loc_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.loc.s.section = sectp;
+      dwp_file->sections.loc.size = bfd_section_size (sectp);
+    }
+  else if (names->macinfo_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.macinfo.s.section = sectp;
+      dwp_file->sections.macinfo.size = bfd_section_size (sectp);
+    }
+  else if (names->macro_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.macro.s.section = sectp;
+      dwp_file->sections.macro.size = bfd_section_size (sectp);
+    }
+  else if (names->str_offsets_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.str_offsets.s.section = sectp;
+      dwp_file->sections.str_offsets.size = bfd_section_size (sectp);
+    }
+  else if (names->types_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.types.s.section = sectp;
+      dwp_file->sections.types.size = bfd_section_size (sectp);
+    }
+}
+
+/* This function is mapped across the sections and remembers the offset and
+   size of each of the DWP version 5 debugging sections that we are interested
+   in.  This is split into a separate function because we don't know if we
+   have version 1 or 2 or 5 until we parse the cu_index/tu_index sections.  */
+
+static void
+dwarf2_locate_v5_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
+{
+  struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr;
+  const struct dwop_section_names *names = &dwop_section_names;
+  unsigned int elf_section_nr = elf_section_data (sectp)->this_idx;
+
+  /* Record the ELF section number for later lookup: this is what the
+     .debug_cu_index,.debug_tu_index tables use in DWP V1.  */
+  gdb_assert (elf_section_nr < dwp_file->num_sections);
+  dwp_file->elf_sections[elf_section_nr] = sectp;
+
+  /* Look for specific sections that we need.  */
+  if (names->abbrev_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.abbrev.s.section = sectp;
+      dwp_file->sections.abbrev.size = bfd_section_size (sectp);
+    }
+  else if (names->info_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.info.s.section = sectp;
+      dwp_file->sections.info.size = bfd_section_size (sectp);
+    }
+  else if (names->line_dwo.matches (sectp->name))
+   {
+     dwp_file->sections.line.s.section = sectp;
+     dwp_file->sections.line.size = bfd_section_size (sectp);
+    }
+  else if (names->loclists_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.loclists.s.section = sectp;
+      dwp_file->sections.loclists.size = bfd_section_size (sectp);
+    }
+  else if (names->macro_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.macro.s.section = sectp;
+      dwp_file->sections.macro.size = bfd_section_size (sectp);
+    }
+  else if (names->rnglists_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.rnglists.s.section = sectp;
+      dwp_file->sections.rnglists.size = bfd_section_size (sectp);
+    }
+  else if (names->str_offsets_dwo.matches (sectp->name))
+    {
+      dwp_file->sections.str_offsets.s.section = sectp;
+      dwp_file->sections.str_offsets.size = bfd_section_size (sectp);
+    }
+}
+
+/* Hash function for dwp_file loaded CUs/TUs.  */
+
+static hashval_t
+hash_dwp_loaded_cutus (const void *item)
+{
+  const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item;
+
+  /* This drops the top 32 bits of the signature, but is ok for a hash.  */
+  return dwo_unit->signature;
+}
+
+/* Equality function for dwp_file loaded CUs/TUs.  */
+
+static int
+eq_dwp_loaded_cutus (const void *a, const void *b)
+{
+  const struct dwo_unit *dua = (const struct dwo_unit *) a;
+  const struct dwo_unit *dub = (const struct dwo_unit *) b;
+
+  return dua->signature == dub->signature;
+}
+
+/* Allocate a hash table for dwp_file loaded CUs/TUs.  */
+
+static htab_up
+allocate_dwp_loaded_cutus_table ()
+{
+  return htab_up (htab_create_alloc (3,
+				     hash_dwp_loaded_cutus,
+				     eq_dwp_loaded_cutus,
+				     NULL, xcalloc, xfree));
+}
+
+/* Try to open DWP file FILE_NAME.
+   The result is the bfd handle of the file.
+   If there is a problem finding or opening the file, return NULL.
+   Upon success, the canonicalized path of the file is stored in the bfd,
+   same as symfile_bfd_open.  */
+
+static gdb_bfd_ref_ptr
+open_dwp_file (dwarf2_per_objfile *per_objfile, const char *file_name)
+{
+  gdb_bfd_ref_ptr abfd (try_open_dwop_file (per_objfile, file_name,
+					    1 /*is_dwp*/,
+					    1 /*search_cwd*/));
+  if (abfd != NULL)
+    return abfd;
+
+  /* Work around upstream bug 15652.
+     http://sourceware.org/bugzilla/show_bug.cgi?id=15652
+     [Whether that's a "bug" is debatable, but it is getting in our way.]
+     We have no real idea where the dwp file is, because gdb's realpath-ing
+     of the executable's path may have discarded the needed info.
+     [IWBN if the dwp file name was recorded in the executable, akin to
+     .gnu_debuglink, but that doesn't exist yet.]
+     Strip the directory from FILE_NAME and search again.  */
+  if (*debug_file_directory != '\0')
+    {
+      /* Don't implicitly search the current directory here.
+	 If the user wants to search "." to handle this case,
+	 it must be added to debug-file-directory.  */
+      return try_open_dwop_file (per_objfile, lbasename (file_name),
+				 1 /*is_dwp*/,
+				 0 /*search_cwd*/);
+    }
+
+  return NULL;
+}
+
+/* Initialize the use of the DWP file for the current objfile.
+   By convention the name of the DWP file is ${objfile}.dwp.
+   The result is NULL if it can't be found.  */
+
+static std::unique_ptr<struct dwp_file>
+open_and_init_dwp_file (dwarf2_per_objfile *per_objfile)
+{
+  struct objfile *objfile = per_objfile->objfile;
+
+  /* Try to find first .dwp for the binary file before any symbolic links
+     resolving.  */
+
+  /* If the objfile is a debug file, find the name of the real binary
+     file and get the name of dwp file from there.  */
+  std::string dwp_name;
+  if (objfile->separate_debug_objfile_backlink != NULL)
+    {
+      struct objfile *backlink = objfile->separate_debug_objfile_backlink;
+      const char *backlink_basename = lbasename (backlink->original_name);
+
+      dwp_name = ldirname (objfile->original_name) + SLASH_STRING + backlink_basename;
+    }
+  else
+    dwp_name = objfile->original_name;
+
+  dwp_name += ".dwp";
+
+  gdb_bfd_ref_ptr dbfd (open_dwp_file (per_objfile, dwp_name.c_str ()));
+  if (dbfd == NULL
+      && strcmp (objfile->original_name, objfile_name (objfile)) != 0)
+    {
+      /* Try to find .dwp for the binary file after gdb_realpath resolving.  */
+      dwp_name = objfile_name (objfile);
+      dwp_name += ".dwp";
+      dbfd = open_dwp_file (per_objfile, dwp_name.c_str ());
+    }
+
+  if (dbfd == NULL)
+    {
+      dwarf_read_debug_printf ("DWP file not found: %s", dwp_name.c_str ());
+
+      return std::unique_ptr<dwp_file> ();
+    }
+
+  const char *name = bfd_get_filename (dbfd.get ());
+  std::unique_ptr<struct dwp_file> dwp_file
+    (new struct dwp_file (name, std::move (dbfd)));
+
+  dwp_file->num_sections = elf_numsections (dwp_file->dbfd);
+  dwp_file->elf_sections =
+    OBSTACK_CALLOC (&per_objfile->per_bfd->obstack,
+		    dwp_file->num_sections, asection *);
+
+  for (asection *sec : gdb_bfd_sections (dwp_file->dbfd))
+    dwarf2_locate_common_dwp_sections (dwp_file->dbfd.get (), sec,
+				       dwp_file.get ());
+
+  dwp_file->cus = create_dwp_hash_table (per_objfile, dwp_file.get (), 0);
+
+  dwp_file->tus = create_dwp_hash_table (per_objfile, dwp_file.get (), 1);
+
+  /* The DWP file version is stored in the hash table.  Oh well.  */
+  if (dwp_file->cus && dwp_file->tus
+      && dwp_file->cus->version != dwp_file->tus->version)
+    {
+      /* Technically speaking, we should try to limp along, but this is
+	 pretty bizarre.  We use pulongest here because that's the established
+	 portability solution (e.g, we cannot use %u for uint32_t).  */
+      error (_("Dwarf Error: DWP file CU version %s doesn't match"
+	       " TU version %s [in DWP file %s]"),
+	     pulongest (dwp_file->cus->version),
+	     pulongest (dwp_file->tus->version), dwp_name.c_str ());
+    }
+
+  if (dwp_file->cus)
+    dwp_file->version = dwp_file->cus->version;
+  else if (dwp_file->tus)
+    dwp_file->version = dwp_file->tus->version;
+  else
+    dwp_file->version = 2;
+
+  for (asection *sec : gdb_bfd_sections (dwp_file->dbfd))
+    {
+      if (dwp_file->version == 2)
+	dwarf2_locate_v2_dwp_sections (dwp_file->dbfd.get (), sec,
+				       dwp_file.get ());
+      else
+	dwarf2_locate_v5_dwp_sections (dwp_file->dbfd.get (), sec,
+				       dwp_file.get ());
+    }
+
+  dwp_file->loaded_cus = allocate_dwp_loaded_cutus_table ();
+  dwp_file->loaded_tus = allocate_dwp_loaded_cutus_table ();
+
+  dwarf_read_debug_printf ("DWP file found: %s", dwp_file->name);
+  dwarf_read_debug_printf ("    %s CUs, %s TUs",
+			   pulongest (dwp_file->cus ? dwp_file->cus->nr_units : 0),
+			   pulongest (dwp_file->tus ? dwp_file->tus->nr_units : 0));
+
+  return dwp_file;
+}
+
+/* Wrapper around open_and_init_dwp_file, only open it once.  */
+
+static struct dwp_file *
+get_dwp_file (dwarf2_per_objfile *per_objfile)
+{
+  if (!per_objfile->per_bfd->dwp_checked)
+    {
+      per_objfile->per_bfd->dwp_file = open_and_init_dwp_file (per_objfile);
+      per_objfile->per_bfd->dwp_checked = 1;
+    }
+  return per_objfile->per_bfd->dwp_file.get ();
+}
+
+/* Subroutine of lookup_dwo_comp_unit, lookup_dwo_type_unit.
+   Look up the CU/TU with signature SIGNATURE, either in DWO file DWO_NAME
+   or in the DWP file for the objfile, referenced by THIS_UNIT.
+   If non-NULL, comp_dir is the DW_AT_comp_dir attribute.
+   IS_DEBUG_TYPES is non-zero if reading a TU, otherwise read a CU.
+
+   This is called, for example, when wanting to read a variable with a
+   complex location.  Therefore we don't want to do file i/o for every call.
+   Therefore we don't want to look for a DWO file on every call.
+   Therefore we first see if we've already seen SIGNATURE in a DWP file,
+   then we check if we've already seen DWO_NAME, and only THEN do we check
+   for a DWO file.
+
+   The result is a pointer to the dwo_unit object or NULL if we didn't find it
+   (dwo_id mismatch or couldn't find the DWO/DWP file).  */
+
+static struct dwo_unit *
+lookup_dwo_cutu (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir,
+		 ULONGEST signature, int is_debug_types)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  const char *kind = is_debug_types ? "TU" : "CU";
+  void **dwo_file_slot;
+  struct dwo_file *dwo_file;
+  struct dwp_file *dwp_file;
+
+  /* First see if there's a DWP file.
+     If we have a DWP file but didn't find the DWO inside it, don't
+     look for the original DWO file.  It makes gdb behave differently
+     depending on whether one is debugging in the build tree.  */
+
+  dwp_file = get_dwp_file (per_objfile);
+  if (dwp_file != NULL)
+    {
+      const struct dwp_hash_table *dwp_htab =
+	is_debug_types ? dwp_file->tus : dwp_file->cus;
+
+      if (dwp_htab != NULL)
+	{
+	  struct dwo_unit *dwo_cutu =
+	    lookup_dwo_unit_in_dwp (per_objfile, dwp_file, comp_dir, signature,
+				    is_debug_types);
+
+	  if (dwo_cutu != NULL)
+	    {
+	      dwarf_read_debug_printf ("Virtual DWO %s %s found: @%s",
+				       kind, hex_string (signature),
+				       host_address_to_string (dwo_cutu));
+
+	      return dwo_cutu;
+	    }
+	}
+    }
+  else
+    {
+      /* No DWP file, look for the DWO file.  */
+
+      dwo_file_slot = lookup_dwo_file_slot (per_objfile, dwo_name, comp_dir);
+      if (*dwo_file_slot == NULL)
+	{
+	  /* Read in the file and build a table of the CUs/TUs it contains.  */
+	  *dwo_file_slot = open_and_init_dwo_file (cu, dwo_name, comp_dir);
+	}
+      /* NOTE: This will be NULL if unable to open the file.  */
+      dwo_file = (struct dwo_file *) *dwo_file_slot;
+
+      if (dwo_file != NULL)
+	{
+	  struct dwo_unit *dwo_cutu = NULL;
+
+	  if (is_debug_types && dwo_file->tus)
+	    {
+	      struct dwo_unit find_dwo_cutu;
+
+	      memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu));
+	      find_dwo_cutu.signature = signature;
+	      dwo_cutu
+		= (struct dwo_unit *) htab_find (dwo_file->tus.get (),
+						 &find_dwo_cutu);
+	    }
+	  else if (!is_debug_types && dwo_file->cus)
+	    {
+	      struct dwo_unit find_dwo_cutu;
+
+	      memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu));
+	      find_dwo_cutu.signature = signature;
+	      dwo_cutu = (struct dwo_unit *)htab_find (dwo_file->cus.get (),
+						       &find_dwo_cutu);
+	    }
+
+	  if (dwo_cutu != NULL)
+	    {
+	      dwarf_read_debug_printf ("DWO %s %s(%s) found: @%s",
+				       kind, dwo_name, hex_string (signature),
+				       host_address_to_string (dwo_cutu));
+
+	      return dwo_cutu;
+	    }
+	}
+    }
+
+  /* We didn't find it.  This could mean a dwo_id mismatch, or
+     someone deleted the DWO/DWP file, or the search path isn't set up
+     correctly to find the file.  */
+
+  dwarf_read_debug_printf ("DWO %s %s(%s) not found",
+			   kind, dwo_name, hex_string (signature));
+
+  /* This is a warning and not a complaint because it can be caused by
+     pilot error (e.g., user accidentally deleting the DWO).  */
+  {
+    /* Print the name of the DWP file if we looked there, helps the user
+       better diagnose the problem.  */
+    std::string dwp_text;
+
+    if (dwp_file != NULL)
+      dwp_text = string_printf (" [in DWP file %s]",
+				lbasename (dwp_file->name));
+
+    warning (_("Could not find DWO %s %s(%s)%s referenced by %s at offset %s"
+	       " [in module %s]"),
+	     kind, dwo_name, hex_string (signature), dwp_text.c_str (), kind,
+	     sect_offset_str (cu->per_cu->sect_off), objfile_name (objfile));
+  }
+  return NULL;
+}
+
+/* Lookup the DWO CU DWO_NAME/SIGNATURE referenced from THIS_CU.
+   See lookup_dwo_cutu_unit for details.  */
+
+static struct dwo_unit *
+lookup_dwo_comp_unit (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir,
+		      ULONGEST signature)
+{
+  gdb_assert (!cu->per_cu->is_debug_types);
+
+  return lookup_dwo_cutu (cu, dwo_name, comp_dir, signature, 0);
+}
+
+/* Lookup the DWO TU DWO_NAME/SIGNATURE referenced from THIS_TU.
+   See lookup_dwo_cutu_unit for details.  */
+
+static struct dwo_unit *
+lookup_dwo_type_unit (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir)
+{
+  gdb_assert (cu->per_cu->is_debug_types);
+
+  signatured_type *sig_type = (signatured_type *) cu->per_cu;
+
+  return lookup_dwo_cutu (cu, dwo_name, comp_dir, sig_type->signature, 1);
+}
+
+/* Traversal function for queue_and_load_all_dwo_tus.  */
+
+static int
+queue_and_load_dwo_tu (void **slot, void *info)
+{
+  struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot;
+  dwarf2_cu *cu = (dwarf2_cu *) info;
+  ULONGEST signature = dwo_unit->signature;
+  signatured_type *sig_type = lookup_dwo_signatured_type (cu, signature);
+
+  if (sig_type != NULL)
+    {
+      /* We pass NULL for DEPENDENT_CU because we don't yet know if there's
+	 a real dependency of PER_CU on SIG_TYPE.  That is detected later
+	 while processing PER_CU.  */
+      if (maybe_queue_comp_unit (NULL, sig_type, cu->per_objfile,
+				 cu->per_cu->lang))
+	load_full_type_unit (sig_type, cu->per_objfile);
+      cu->per_cu->imported_symtabs_push (sig_type);
+    }
+
+  return 1;
+}
+
+/* Queue all TUs contained in the DWO of CU to be read in.
+   The DWO may have the only definition of the type, though it may not be
+   referenced anywhere in PER_CU.  Thus we have to load *all* its TUs.
+   http://sourceware.org/bugzilla/show_bug.cgi?id=15021  */
+
+static void
+queue_and_load_all_dwo_tus (dwarf2_cu *cu)
+{
+  struct dwo_unit *dwo_unit;
+  struct dwo_file *dwo_file;
+
+  gdb_assert (cu != nullptr);
+  gdb_assert (!cu->per_cu->is_debug_types);
+  gdb_assert (get_dwp_file (cu->per_objfile) == nullptr);
+
+  dwo_unit = cu->dwo_unit;
+  gdb_assert (dwo_unit != NULL);
+
+  dwo_file = dwo_unit->dwo_file;
+  if (dwo_file->tus != NULL)
+    htab_traverse_noresize (dwo_file->tus.get (), queue_and_load_dwo_tu, cu);
+}
+
+/* Read in various DIEs.  */
+
+/* DW_AT_abstract_origin inherits whole DIEs (not just their attributes).
+   Inherit only the children of the DW_AT_abstract_origin DIE not being
+   already referenced by DW_AT_abstract_origin from the children of the
+   current DIE.  */
+
+static void
+inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct die_info *child_die;
+  sect_offset *offsetp;
+  /* Parent of DIE - referenced by DW_AT_abstract_origin.  */
+  struct die_info *origin_die;
+  /* Iterator of the ORIGIN_DIE children.  */
+  struct die_info *origin_child_die;
+  struct attribute *attr;
+  struct dwarf2_cu *origin_cu;
+  struct pending **origin_previous_list_in_scope;
+
+  attr = dwarf2_attr (die, DW_AT_abstract_origin, cu);
+  if (!attr)
+    return;
+
+  /* Note that following die references may follow to a die in a
+     different cu.  */
+
+  origin_cu = cu;
+  origin_die = follow_die_ref (die, attr, &origin_cu);
+
+  /* We're inheriting ORIGIN's children into the scope we'd put DIE's
+     symbols in.  */
+  origin_previous_list_in_scope = origin_cu->list_in_scope;
+  origin_cu->list_in_scope = cu->list_in_scope;
+
+  if (die->tag != origin_die->tag
+      && !(die->tag == DW_TAG_inlined_subroutine
+	   && origin_die->tag == DW_TAG_subprogram))
+    complaint (_("DIE %s and its abstract origin %s have different tags"),
+	       sect_offset_str (die->sect_off),
+	       sect_offset_str (origin_die->sect_off));
+
+  /* Find if the concrete and abstract trees are structurally the
+     same.  This is a shallow traversal and it is not bullet-proof;
+     the compiler can trick the debugger into believing that the trees
+     are isomorphic, whereas they actually are not.  However, the
+     likelyhood of this happening is pretty low, and a full-fledged
+     check would be an overkill.  */
+  bool are_isomorphic = true;
+  die_info *concrete_child = die->child;
+  die_info *abstract_child = origin_die->child;
+  while (concrete_child != nullptr || abstract_child != nullptr)
+    {
+      if (concrete_child == nullptr
+	  || abstract_child == nullptr
+	  || concrete_child->tag != abstract_child->tag)
+	{
+	  are_isomorphic = false;
+	  break;
+	}
+
+      concrete_child = concrete_child->sibling;
+      abstract_child = abstract_child->sibling;
+    }
+
+  /* Walk the origin's children in parallel to the concrete children.
+     This helps match an origin child in case the debug info misses
+     DW_AT_abstract_origin attributes.  Keep in mind that the abstract
+     origin tree may not have the same tree structure as the concrete
+     DIE, though.  */
+  die_info *corresponding_abstract_child
+    = are_isomorphic ? origin_die->child : nullptr;
+
+  std::vector<sect_offset> offsets;
+
+  for (child_die = die->child;
+       child_die && child_die->tag;
+       child_die = child_die->sibling)
+    {
+      struct die_info *child_origin_die;
+      struct dwarf2_cu *child_origin_cu;
+
+      /* We are trying to process concrete instance entries:
+	 DW_TAG_call_site DIEs indeed have a DW_AT_abstract_origin tag, but
+	 it's not relevant to our analysis here. i.e. detecting DIEs that are
+	 present in the abstract instance but not referenced in the concrete
+	 one.  */
+      if (child_die->tag == DW_TAG_call_site
+	  || child_die->tag == DW_TAG_GNU_call_site)
+	{
+	  if (are_isomorphic)
+	    corresponding_abstract_child
+	      = corresponding_abstract_child->sibling;
+	  continue;
+	}
+
+      /* For each CHILD_DIE, find the corresponding child of
+	 ORIGIN_DIE.  If there is more than one layer of
+	 DW_AT_abstract_origin, follow them all; there shouldn't be,
+	 but GCC versions at least through 4.4 generate this (GCC PR
+	 40573).  */
+      child_origin_die = child_die;
+      child_origin_cu = cu;
+      while (1)
+	{
+	  attr = dwarf2_attr (child_origin_die, DW_AT_abstract_origin,
+			      child_origin_cu);
+	  if (attr == NULL)
+	    break;
+	  child_origin_die = follow_die_ref (child_origin_die, attr,
+					     &child_origin_cu);
+	}
+
+      /* If missing DW_AT_abstract_origin, try the corresponding child
+	 of the origin.  Clang emits such lexical scopes.  */
+      if (child_origin_die == child_die
+	  && dwarf2_attr (child_die, DW_AT_abstract_origin, cu) == nullptr
+	  && are_isomorphic
+	  && child_die->tag == DW_TAG_lexical_block)
+	child_origin_die = corresponding_abstract_child;
+
+      /* According to DWARF3 3.3.8.2 #3 new entries without their abstract
+	 counterpart may exist.  */
+      if (child_origin_die != child_die)
+	{
+	  if (child_die->tag != child_origin_die->tag
+	      && !(child_die->tag == DW_TAG_inlined_subroutine
+		   && child_origin_die->tag == DW_TAG_subprogram))
+	    complaint (_("Child DIE %s and its abstract origin %s have "
+			 "different tags"),
+		       sect_offset_str (child_die->sect_off),
+		       sect_offset_str (child_origin_die->sect_off));
+	  if (child_origin_die->parent != origin_die)
+	    complaint (_("Child DIE %s and its abstract origin %s have "
+			 "different parents"),
+		       sect_offset_str (child_die->sect_off),
+		       sect_offset_str (child_origin_die->sect_off));
+	  else
+	    offsets.push_back (child_origin_die->sect_off);
+	}
+
+      if (are_isomorphic)
+	corresponding_abstract_child = corresponding_abstract_child->sibling;
+    }
+  std::sort (offsets.begin (), offsets.end ());
+  sect_offset *offsets_end = offsets.data () + offsets.size ();
+  for (offsetp = offsets.data () + 1; offsetp < offsets_end; offsetp++)
+    if (offsetp[-1] == *offsetp)
+      complaint (_("Multiple children of DIE %s refer "
+		   "to DIE %s as their abstract origin"),
+		 sect_offset_str (die->sect_off), sect_offset_str (*offsetp));
+
+  offsetp = offsets.data ();
+  origin_child_die = origin_die->child;
+  while (origin_child_die && origin_child_die->tag)
+    {
+      /* Is ORIGIN_CHILD_DIE referenced by any of the DIE children?  */
+      while (offsetp < offsets_end
+	     && *offsetp < origin_child_die->sect_off)
+	offsetp++;
+      if (offsetp >= offsets_end
+	  || *offsetp > origin_child_die->sect_off)
+	{
+	  /* Found that ORIGIN_CHILD_DIE is really not referenced.
+	     Check whether we're already processing ORIGIN_CHILD_DIE.
+	     This can happen with mutually referenced abstract_origins.
+	     PR 16581.  */
+	  if (!origin_child_die->in_process)
+	    process_die (origin_child_die, origin_cu);
+	}
+      origin_child_die = origin_child_die->sibling;
+    }
+  origin_cu->list_in_scope = origin_previous_list_in_scope;
+
+  if (cu != origin_cu)
+    compute_delayed_physnames (origin_cu);
+}
+
+static void
+read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct context_stack *newobj;
+  CORE_ADDR lowpc;
+  CORE_ADDR highpc;
+  struct die_info *child_die;
+  struct attribute *attr, *call_line, *call_file;
+  const char *name;
+  CORE_ADDR baseaddr;
+  struct block *block;
+  int inlined_func = (die->tag == DW_TAG_inlined_subroutine);
+  std::vector<struct symbol *> template_args;
+  struct template_symbol *templ_func = NULL;
+
+  if (inlined_func)
+    {
+      /* If we do not have call site information, we can't show the
+	 caller of this inlined function.  That's too confusing, so
+	 only use the scope for local variables.  */
+      call_line = dwarf2_attr (die, DW_AT_call_line, cu);
+      call_file = dwarf2_attr (die, DW_AT_call_file, cu);
+      if (call_line == NULL || call_file == NULL)
+	{
+	  read_lexical_block_scope (die, cu);
+	  return;
+	}
+    }
+
+  baseaddr = objfile->text_section_offset ();
+
+  name = dwarf2_name (die, cu);
+
+  /* Ignore functions with missing or empty names.  These are actually
+     illegal according to the DWARF standard.  */
+  if (name == NULL)
+    {
+      complaint (_("missing name for subprogram DIE at %s"),
+		 sect_offset_str (die->sect_off));
+      return;
+    }
+
+  /* Ignore functions with missing or invalid low and high pc attributes.  */
+  if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)
+      <= PC_BOUNDS_INVALID)
+    {
+      attr = dwarf2_attr (die, DW_AT_external, cu);
+      if (attr == nullptr || !attr->as_boolean ())
+	complaint (_("cannot get low and high bounds "
+		     "for subprogram DIE at %s"),
+		   sect_offset_str (die->sect_off));
+      return;
+    }
+
+  lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
+  highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
+
+  /* If we have any template arguments, then we must allocate a
+     different sort of symbol.  */
+  for (child_die = die->child; child_die; child_die = child_die->sibling)
+    {
+      if (child_die->tag == DW_TAG_template_type_param
+	  || child_die->tag == DW_TAG_template_value_param)
+	{
+	  templ_func = new (&objfile->objfile_obstack) template_symbol;
+	  templ_func->subclass = SYMBOL_TEMPLATE;
+	  break;
+	}
+    }
+
+  gdb_assert (cu->get_builder () != nullptr);
+  newobj = cu->get_builder ()->push_context (0, lowpc);
+  newobj->name = new_symbol (die, read_type_die (die, cu), cu,
+			     (struct symbol *) templ_func);
+
+  if (dwarf2_flag_true_p (die, DW_AT_main_subprogram, cu))
+    set_objfile_main_name (objfile, newobj->name->linkage_name (),
+			   cu->per_cu->lang);
+
+  /* If there is a location expression for DW_AT_frame_base, record
+     it.  */
+  attr = dwarf2_attr (die, DW_AT_frame_base, cu);
+  if (attr != nullptr)
+    dwarf2_symbol_mark_computed (attr, newobj->name, cu, 1);
+
+  /* If there is a location for the static link, record it.  */
+  newobj->static_link = NULL;
+  attr = dwarf2_attr (die, DW_AT_static_link, cu);
+  if (attr != nullptr)
+    {
+      newobj->static_link
+	= XOBNEW (&objfile->objfile_obstack, struct dynamic_prop);
+      attr_to_dynamic_prop (attr, die, cu, newobj->static_link,
+			    cu->addr_type ());
+    }
+
+  cu->list_in_scope = cu->get_builder ()->get_local_symbols ();
+
+  if (die->child != NULL)
+    {
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  if (child_die->tag == DW_TAG_template_type_param
+	      || child_die->tag == DW_TAG_template_value_param)
+	    {
+	      struct symbol *arg = new_symbol (child_die, NULL, cu);
+
+	      if (arg != NULL)
+		template_args.push_back (arg);
+	    }
+	  else
+	    process_die (child_die, cu);
+	  child_die = child_die->sibling;
+	}
+    }
+
+  inherit_abstract_dies (die, cu);
+
+  /* If we have a DW_AT_specification, we might need to import using
+     directives from the context of the specification DIE.  See the
+     comment in determine_prefix.  */
+  if (cu->per_cu->lang == language_cplus
+      && dwarf2_attr (die, DW_AT_specification, cu))
+    {
+      struct dwarf2_cu *spec_cu = cu;
+      struct die_info *spec_die = die_specification (die, &spec_cu);
+
+      while (spec_die)
+	{
+	  child_die = spec_die->child;
+	  while (child_die && child_die->tag)
+	    {
+	      if (child_die->tag == DW_TAG_imported_module)
+		process_die (child_die, spec_cu);
+	      child_die = child_die->sibling;
+	    }
+
+	  /* In some cases, GCC generates specification DIEs that
+	     themselves contain DW_AT_specification attributes.  */
+	  spec_die = die_specification (spec_die, &spec_cu);
+	}
+    }
+
+  struct context_stack cstk = cu->get_builder ()->pop_context ();
+  /* Make a block for the local symbols within.  */
+  block = cu->get_builder ()->finish_block (cstk.name, cstk.old_blocks,
+				     cstk.static_link, lowpc, highpc);
+
+  /* For C++, set the block's scope.  */
+  if ((cu->per_cu->lang == language_cplus
+       || cu->per_cu->lang == language_fortran
+       || cu->per_cu->lang == language_d
+       || cu->per_cu->lang == language_rust)
+      && cu->processing_has_namespace_info)
+    block_set_scope (block, determine_prefix (die, cu),
+		     &objfile->objfile_obstack);
+
+  /* If we have address ranges, record them.  */
+  dwarf2_record_block_ranges (die, block, baseaddr, cu);
+
+  gdbarch_make_symbol_special (gdbarch, cstk.name, objfile);
+
+  /* Attach template arguments to function.  */
+  if (!template_args.empty ())
+    {
+      gdb_assert (templ_func != NULL);
+
+      templ_func->n_template_arguments = template_args.size ();
+      templ_func->template_arguments
+	= XOBNEWVEC (&objfile->objfile_obstack, struct symbol *,
+		     templ_func->n_template_arguments);
+      memcpy (templ_func->template_arguments,
+	      template_args.data (),
+	      (templ_func->n_template_arguments * sizeof (struct symbol *)));
+
+      /* Make sure that the symtab is set on the new symbols.  Even
+	 though they don't appear in this symtab directly, other parts
+	 of gdb assume that symbols do, and this is reasonably
+	 true.  */
+      for (symbol *sym : template_args)
+	symbol_set_symtab (sym, symbol_symtab (templ_func));
+    }
+
+  /* In C++, we can have functions nested inside functions (e.g., when
+     a function declares a class that has methods).  This means that
+     when we finish processing a function scope, we may need to go
+     back to building a containing block's symbol lists.  */
+  *cu->get_builder ()->get_local_symbols () = cstk.locals;
+  cu->get_builder ()->set_local_using_directives (cstk.local_using_directives);
+
+  /* If we've finished processing a top-level function, subsequent
+     symbols go in the file symbol list.  */
+  if (cu->get_builder ()->outermost_context_p ())
+    cu->list_in_scope = cu->get_builder ()->get_file_symbols ();
+}
+
+/* Process all the DIES contained within a lexical block scope.  Start
+   a new scope, process the dies, and then close the scope.  */
+
+static void
+read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  CORE_ADDR lowpc, highpc;
+  struct die_info *child_die;
+  CORE_ADDR baseaddr;
+
+  baseaddr = objfile->text_section_offset ();
+
+  /* Ignore blocks with missing or invalid low and high pc attributes.  */
+  /* ??? Perhaps consider discontiguous blocks defined by DW_AT_ranges
+     as multiple lexical blocks?  Handling children in a sane way would
+     be nasty.  Might be easier to properly extend generic blocks to
+     describe ranges.  */
+  switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL))
+    {
+    case PC_BOUNDS_NOT_PRESENT:
+      /* DW_TAG_lexical_block has no attributes, process its children as if
+	 there was no wrapping by that DW_TAG_lexical_block.
+	 GCC does no longer produces such DWARF since GCC r224161.  */
+      for (child_die = die->child;
+	   child_die != NULL && child_die->tag;
+	   child_die = child_die->sibling)
+	{
+	  /* We might already be processing this DIE.  This can happen
+	     in an unusual circumstance -- where a subroutine A
+	     appears lexically in another subroutine B, but A actually
+	     inlines B.  The recursion is broken here, rather than in
+	     inherit_abstract_dies, because it seems better to simply
+	     drop concrete children here.  */
+	  if (!child_die->in_process)
+	    process_die (child_die, cu);
+	}
+      return;
+    case PC_BOUNDS_INVALID:
+      return;
+    }
+  lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
+  highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
+
+  cu->get_builder ()->push_context (0, lowpc);
+  if (die->child != NULL)
+    {
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  process_die (child_die, cu);
+	  child_die = child_die->sibling;
+	}
+    }
+  inherit_abstract_dies (die, cu);
+  struct context_stack cstk = cu->get_builder ()->pop_context ();
+
+  if (*cu->get_builder ()->get_local_symbols () != NULL
+      || (*cu->get_builder ()->get_local_using_directives ()) != NULL)
+    {
+      struct block *block
+	= cu->get_builder ()->finish_block (0, cstk.old_blocks, NULL,
+				     cstk.start_addr, highpc);
+
+      /* Note that recording ranges after traversing children, as we
+	 do here, means that recording a parent's ranges entails
+	 walking across all its children's ranges as they appear in
+	 the address map, which is quadratic behavior.
+
+	 It would be nicer to record the parent's ranges before
+	 traversing its children, simply overriding whatever you find
+	 there.  But since we don't even decide whether to create a
+	 block until after we've traversed its children, that's hard
+	 to do.  */
+      dwarf2_record_block_ranges (die, block, baseaddr, cu);
+    }
+  *cu->get_builder ()->get_local_symbols () = cstk.locals;
+  cu->get_builder ()->set_local_using_directives (cstk.local_using_directives);
+}
+
+/* Read in DW_TAG_call_site and insert it to CU->call_site_htab.  */
+
+static void
+read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  CORE_ADDR pc, baseaddr;
+  struct attribute *attr;
+  struct call_site *call_site, call_site_local;
+  void **slot;
+  int nparams;
+  struct die_info *child_die;
+
+  baseaddr = objfile->text_section_offset ();
+
+  attr = dwarf2_attr (die, DW_AT_call_return_pc, cu);
+  if (attr == NULL)
+    {
+      /* This was a pre-DWARF-5 GNU extension alias
+	 for DW_AT_call_return_pc.  */
+      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+    }
+  if (!attr)
+    {
+      complaint (_("missing DW_AT_call_return_pc for DW_TAG_call_site "
+		   "DIE %s [in module %s]"),
+		 sect_offset_str (die->sect_off), objfile_name (objfile));
+      return;
+    }
+  pc = attr->as_address () + baseaddr;
+  pc = gdbarch_adjust_dwarf2_addr (gdbarch, pc);
+
+  if (cu->call_site_htab == NULL)
+    cu->call_site_htab = htab_create_alloc_ex (16, core_addr_hash, core_addr_eq,
+					       NULL, &objfile->objfile_obstack,
+					       hashtab_obstack_allocate, NULL);
+  call_site_local.pc = pc;
+  slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT);
+  if (*slot != NULL)
+    {
+      complaint (_("Duplicate PC %s for DW_TAG_call_site "
+		   "DIE %s [in module %s]"),
+		 paddress (gdbarch, pc), sect_offset_str (die->sect_off),
+		 objfile_name (objfile));
+      return;
+    }
+
+  /* Count parameters at the caller.  */
+
+  nparams = 0;
+  for (child_die = die->child; child_die && child_die->tag;
+       child_die = child_die->sibling)
+    {
+      if (child_die->tag != DW_TAG_call_site_parameter
+	  && child_die->tag != DW_TAG_GNU_call_site_parameter)
+	{
+	  complaint (_("Tag %d is not DW_TAG_call_site_parameter in "
+		       "DW_TAG_call_site child DIE %s [in module %s]"),
+		     child_die->tag, sect_offset_str (child_die->sect_off),
+		     objfile_name (objfile));
+	  continue;
+	}
+
+      nparams++;
+    }
+
+  call_site
+    = ((struct call_site *)
+       obstack_alloc (&objfile->objfile_obstack,
+		      sizeof (*call_site)
+		      + (sizeof (*call_site->parameter) * (nparams - 1))));
+  *slot = call_site;
+  memset (call_site, 0, sizeof (*call_site) - sizeof (*call_site->parameter));
+  call_site->pc = pc;
+
+  if (dwarf2_flag_true_p (die, DW_AT_call_tail_call, cu)
+      || dwarf2_flag_true_p (die, DW_AT_GNU_tail_call, cu))
+    {
+      struct die_info *func_die;
+
+      /* Skip also over DW_TAG_inlined_subroutine.  */
+      for (func_die = die->parent;
+	   func_die && func_die->tag != DW_TAG_subprogram
+	   && func_die->tag != DW_TAG_subroutine_type;
+	   func_die = func_die->parent);
+
+      /* DW_AT_call_all_calls is a superset
+	 of DW_AT_call_all_tail_calls.  */
+      if (func_die
+	  && !dwarf2_flag_true_p (func_die, DW_AT_call_all_calls, cu)
+	  && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_call_sites, cu)
+	  && !dwarf2_flag_true_p (func_die, DW_AT_call_all_tail_calls, cu)
+	  && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_tail_call_sites, cu))
+	{
+	  /* TYPE_TAIL_CALL_LIST is not interesting in functions where it is
+	     not complete.  But keep CALL_SITE for look ups via call_site_htab,
+	     both the initial caller containing the real return address PC and
+	     the final callee containing the current PC of a chain of tail
+	     calls do not need to have the tail call list complete.  But any
+	     function candidate for a virtual tail call frame searched via
+	     TYPE_TAIL_CALL_LIST must have the tail call list complete to be
+	     determined unambiguously.  */
+	}
+      else
+	{
+	  struct type *func_type = NULL;
+
+	  if (func_die)
+	    func_type = get_die_type (func_die, cu);
+	  if (func_type != NULL)
+	    {
+	      gdb_assert (func_type->code () == TYPE_CODE_FUNC);
+
+	      /* Enlist this call site to the function.  */
+	      call_site->tail_call_next = TYPE_TAIL_CALL_LIST (func_type);
+	      TYPE_TAIL_CALL_LIST (func_type) = call_site;
+	    }
+	  else
+	    complaint (_("Cannot find function owning DW_TAG_call_site "
+			 "DIE %s [in module %s]"),
+		       sect_offset_str (die->sect_off), objfile_name (objfile));
+	}
+    }
+
+  attr = dwarf2_attr (die, DW_AT_call_target, cu);
+  if (attr == NULL)
+    attr = dwarf2_attr (die, DW_AT_GNU_call_site_target, cu);
+  if (attr == NULL)
+    attr = dwarf2_attr (die, DW_AT_call_origin, cu);
+  if (attr == NULL)
+    {
+      /* This was a pre-DWARF-5 GNU extension alias for DW_AT_call_origin.  */
+      attr = dwarf2_attr (die, DW_AT_abstract_origin, cu);
+    }
+  SET_FIELD_DWARF_BLOCK (call_site->target, NULL);
+  if (!attr || (attr->form_is_block () && attr->as_block ()->size == 0))
+    /* Keep NULL DWARF_BLOCK.  */;
+  else if (attr->form_is_block ())
+    {
+      struct dwarf2_locexpr_baton *dlbaton;
+      struct dwarf_block *block = attr->as_block ();
+
+      dlbaton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton);
+      dlbaton->data = block->data;
+      dlbaton->size = block->size;
+      dlbaton->per_objfile = per_objfile;
+      dlbaton->per_cu = cu->per_cu;
+
+      SET_FIELD_DWARF_BLOCK (call_site->target, dlbaton);
+    }
+  else if (attr->form_is_ref ())
+    {
+      struct dwarf2_cu *target_cu = cu;
+      struct die_info *target_die;
+
+      target_die = follow_die_ref (die, attr, &target_cu);
+      gdb_assert (target_cu->per_objfile->objfile == objfile);
+      if (die_is_declaration (target_die, target_cu))
+	{
+	  const char *target_physname;
+
+	  /* Prefer the mangled name; otherwise compute the demangled one.  */
+	  target_physname = dw2_linkage_name (target_die, target_cu);
+	  if (target_physname == NULL)
+	    target_physname = dwarf2_physname (NULL, target_die, target_cu);
+	  if (target_physname == NULL)
+	    complaint (_("DW_AT_call_target target DIE has invalid "
+			 "physname, for referencing DIE %s [in module %s]"),
+		       sect_offset_str (die->sect_off), objfile_name (objfile));
+	  else
+	    SET_FIELD_PHYSNAME (call_site->target, target_physname);
+	}
+      else
+	{
+	  CORE_ADDR lowpc;
+
+	  /* DW_AT_entry_pc should be preferred.  */
+	  if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL)
+	      <= PC_BOUNDS_INVALID)
+	    complaint (_("DW_AT_call_target target DIE has invalid "
+			 "low pc, for referencing DIE %s [in module %s]"),
+		       sect_offset_str (die->sect_off), objfile_name (objfile));
+	  else
+	    {
+	      lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
+	      SET_FIELD_PHYSADDR (call_site->target, lowpc);
+	    }
+	}
+    }
+  else
+    complaint (_("DW_TAG_call_site DW_AT_call_target is neither "
+		 "block nor reference, for DIE %s [in module %s]"),
+	       sect_offset_str (die->sect_off), objfile_name (objfile));
+
+  call_site->per_cu = cu->per_cu;
+  call_site->per_objfile = per_objfile;
+
+  for (child_die = die->child;
+       child_die && child_die->tag;
+       child_die = child_die->sibling)
+    {
+      struct call_site_parameter *parameter;
+      struct attribute *loc, *origin;
+
+      if (child_die->tag != DW_TAG_call_site_parameter
+	  && child_die->tag != DW_TAG_GNU_call_site_parameter)
+	{
+	  /* Already printed the complaint above.  */
+	  continue;
+	}
+
+      gdb_assert (call_site->parameter_count < nparams);
+      parameter = &call_site->parameter[call_site->parameter_count];
+
+      /* DW_AT_location specifies the register number or DW_AT_abstract_origin
+	 specifies DW_TAG_formal_parameter.  Value of the data assumed for the
+	 register is contained in DW_AT_call_value.  */
+
+      loc = dwarf2_attr (child_die, DW_AT_location, cu);
+      origin = dwarf2_attr (child_die, DW_AT_call_parameter, cu);
+      if (origin == NULL)
+	{
+	  /* This was a pre-DWARF-5 GNU extension alias
+	     for DW_AT_call_parameter.  */
+	  origin = dwarf2_attr (child_die, DW_AT_abstract_origin, cu);
+	}
+      if (loc == NULL && origin != NULL && origin->form_is_ref ())
+	{
+	  parameter->kind = CALL_SITE_PARAMETER_PARAM_OFFSET;
+
+	  sect_offset sect_off = origin->get_ref_die_offset ();
+	  if (!cu->header.offset_in_cu_p (sect_off))
+	    {
+	      /* As DW_OP_GNU_parameter_ref uses CU-relative offset this
+		 binding can be done only inside one CU.  Such referenced DIE
+		 therefore cannot be even moved to DW_TAG_partial_unit.  */
+	      complaint (_("DW_AT_call_parameter offset is not in CU for "
+			   "DW_TAG_call_site child DIE %s [in module %s]"),
+			 sect_offset_str (child_die->sect_off),
+			 objfile_name (objfile));
+	      continue;
+	    }
+	  parameter->u.param_cu_off
+	    = (cu_offset) (sect_off - cu->header.sect_off);
+	}
+      else if (loc == NULL || origin != NULL || !loc->form_is_block ())
+	{
+	  complaint (_("No DW_FORM_block* DW_AT_location for "
+		       "DW_TAG_call_site child DIE %s [in module %s]"),
+		     sect_offset_str (child_die->sect_off), objfile_name (objfile));
+	  continue;
+	}
+      else
+	{
+	  struct dwarf_block *block = loc->as_block ();
+
+	  parameter->u.dwarf_reg = dwarf_block_to_dwarf_reg
+	    (block->data, &block->data[block->size]);
+	  if (parameter->u.dwarf_reg != -1)
+	    parameter->kind = CALL_SITE_PARAMETER_DWARF_REG;
+	  else if (dwarf_block_to_sp_offset (gdbarch, block->data,
+				    &block->data[block->size],
+					     &parameter->u.fb_offset))
+	    parameter->kind = CALL_SITE_PARAMETER_FB_OFFSET;
+	  else
+	    {
+	      complaint (_("Only single DW_OP_reg or DW_OP_fbreg is supported "
+			   "for DW_FORM_block* DW_AT_location is supported for "
+			   "DW_TAG_call_site child DIE %s "
+			   "[in module %s]"),
+			 sect_offset_str (child_die->sect_off),
+			 objfile_name (objfile));
+	      continue;
+	    }
+	}
+
+      attr = dwarf2_attr (child_die, DW_AT_call_value, cu);
+      if (attr == NULL)
+	attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_value, cu);
+      if (attr == NULL || !attr->form_is_block ())
+	{
+	  complaint (_("No DW_FORM_block* DW_AT_call_value for "
+		       "DW_TAG_call_site child DIE %s [in module %s]"),
+		     sect_offset_str (child_die->sect_off),
+		     objfile_name (objfile));
+	  continue;
+	}
+
+      struct dwarf_block *block = attr->as_block ();
+      parameter->value = block->data;
+      parameter->value_size = block->size;
+
+      /* Parameters are not pre-cleared by memset above.  */
+      parameter->data_value = NULL;
+      parameter->data_value_size = 0;
+      call_site->parameter_count++;
+
+      attr = dwarf2_attr (child_die, DW_AT_call_data_value, cu);
+      if (attr == NULL)
+	attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_data_value, cu);
+      if (attr != nullptr)
+	{
+	  if (!attr->form_is_block ())
+	    complaint (_("No DW_FORM_block* DW_AT_call_data_value for "
+			 "DW_TAG_call_site child DIE %s [in module %s]"),
+		       sect_offset_str (child_die->sect_off),
+		       objfile_name (objfile));
+	  else
+	    {
+	      block = attr->as_block ();
+	      parameter->data_value = block->data;
+	      parameter->data_value_size = block->size;
+	    }
+	}
+    }
+}
+
+/* Helper function for read_variable.  If DIE represents a virtual
+   table, then return the type of the concrete object that is
+   associated with the virtual table.  Otherwise, return NULL.  */
+
+static struct type *
+rust_containing_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr = dwarf2_attr (die, DW_AT_type, cu);
+  if (attr == NULL)
+    return NULL;
+
+  /* Find the type DIE.  */
+  struct die_info *type_die = NULL;
+  struct dwarf2_cu *type_cu = cu;
+
+  if (attr->form_is_ref ())
+    type_die = follow_die_ref (die, attr, &type_cu);
+  if (type_die == NULL)
+    return NULL;
+
+  if (dwarf2_attr (type_die, DW_AT_containing_type, type_cu) == NULL)
+    return NULL;
+  return die_containing_type (type_die, type_cu);
+}
+
+/* Read a variable (DW_TAG_variable) DIE and create a new symbol.  */
+
+static void
+read_variable (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct rust_vtable_symbol *storage = NULL;
+
+  if (cu->per_cu->lang == language_rust)
+    {
+      struct type *containing_type = rust_containing_type (die, cu);
+
+      if (containing_type != NULL)
+	{
+	  struct objfile *objfile = cu->per_objfile->objfile;
+
+	  storage = new (&objfile->objfile_obstack) rust_vtable_symbol;
+	  storage->concrete_type = containing_type;
+	  storage->subclass = SYMBOL_RUST_VTABLE;
+	}
+    }
+
+  struct symbol *res = new_symbol (die, NULL, cu, storage);
+  struct attribute *abstract_origin
+    = dwarf2_attr (die, DW_AT_abstract_origin, cu);
+  struct attribute *loc = dwarf2_attr (die, DW_AT_location, cu);
+  if (res == NULL && loc && abstract_origin)
+    {
+      /* We have a variable without a name, but with a location and an abstract
+	 origin.  This may be a concrete instance of an abstract variable
+	 referenced from an DW_OP_GNU_variable_value, so save it to find it back
+	 later.  */
+      struct dwarf2_cu *origin_cu = cu;
+      struct die_info *origin_die
+	= follow_die_ref (die, abstract_origin, &origin_cu);
+      dwarf2_per_objfile *per_objfile = cu->per_objfile;
+      per_objfile->per_bfd->abstract_to_concrete
+	[origin_die->sect_off].push_back (die->sect_off);
+    }
+}
+
+/* Call CALLBACK from DW_AT_ranges attribute value OFFSET
+   reading .debug_rnglists.
+   Callback's type should be:
+    void (CORE_ADDR range_beginning, CORE_ADDR range_end)
+   Return true if the attributes are present and valid, otherwise,
+   return false.  */
+
+template <typename Callback>
+static bool
+dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu,
+			 dwarf_tag tag, Callback &&callback)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *obfd = objfile->obfd;
+  /* Base address selection entry.  */
+  gdb::optional<CORE_ADDR> base;
+  const gdb_byte *buffer;
+  bool overflow = false;
+  ULONGEST addr_index;
+  struct dwarf2_section_info *rnglists_section;
+
+  base = cu->base_address;
+  rnglists_section = cu_debug_rnglists_section (cu, tag);
+  rnglists_section->read (objfile);
+
+  if (offset >= rnglists_section->size)
+    {
+      complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"),
+		 offset);
+      return false;
+    }
+  buffer = rnglists_section->buffer + offset;
+
+  while (1)
+    {
+      /* Initialize it due to a false compiler warning.  */
+      CORE_ADDR range_beginning = 0, range_end = 0;
+      const gdb_byte *buf_end = (rnglists_section->buffer
+				 + rnglists_section->size);
+      unsigned int bytes_read;
+
+      if (buffer == buf_end)
+	{
+	  overflow = true;
+	  break;
+	}
+      const auto rlet = static_cast<enum dwarf_range_list_entry>(*buffer++);
+      switch (rlet)
+	{
+	case DW_RLE_end_of_list:
+	  break;
+	case DW_RLE_base_address:
+	  if (buffer + cu->header.addr_size > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  base = cu->header.read_address (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  break;
+	case DW_RLE_base_addressx:
+	  addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  base = read_addr_index (cu, addr_index);
+	  break;
+	case DW_RLE_start_length:
+	  if (buffer + cu->header.addr_size > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  range_beginning = cu->header.read_address (obfd, buffer,
+						     &bytes_read);
+	  buffer += bytes_read;
+	  range_end = (range_beginning
+		       + read_unsigned_leb128 (obfd, buffer, &bytes_read));
+	  buffer += bytes_read;
+	  if (buffer > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  break;
+	case DW_RLE_startx_length:
+	  addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  range_beginning = read_addr_index (cu, addr_index);
+	  if (buffer > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  range_end = (range_beginning
+		       + read_unsigned_leb128 (obfd, buffer, &bytes_read));
+	  buffer += bytes_read;
+	  break;
+	case DW_RLE_offset_pair:
+	  range_beginning = read_unsigned_leb128 (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  if (buffer > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  range_end = read_unsigned_leb128 (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  if (buffer > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  break;
+	case DW_RLE_start_end:
+	  if (buffer + 2 * cu->header.addr_size > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  range_beginning = cu->header.read_address (obfd, buffer,
+						     &bytes_read);
+	  buffer += bytes_read;
+	  range_end = cu->header.read_address (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  break;
+	case DW_RLE_startx_endx:
+	  addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  range_beginning = read_addr_index (cu, addr_index);
+	  if (buffer > buf_end)
+	    {
+	      overflow = true;
+	      break;
+	    }
+	  addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read);
+	  buffer += bytes_read;
+	  range_end = read_addr_index (cu, addr_index);
+	  break;
+	default:
+	  complaint (_("Invalid .debug_rnglists data (no base address)"));
+	  return false;
+	}
+      if (rlet == DW_RLE_end_of_list || overflow)
+	break;
+      if (rlet == DW_RLE_base_address)
+	continue;
+
+      if (range_beginning > range_end)
+	{
+	  /* Inverted range entries are invalid.  */
+	  complaint (_("Invalid .debug_rnglists data (inverted range)"));
+	  return false;
+	}
+
+      /* Empty range entries have no effect.  */
+      if (range_beginning == range_end)
+	continue;
+
+      /* Only DW_RLE_offset_pair needs the base address added.  */
+      if (rlet == DW_RLE_offset_pair)
+	{
+	  if (!base.has_value ())
+	    {
+	      /* We have no valid base address for the DW_RLE_offset_pair.  */
+	      complaint (_("Invalid .debug_rnglists data (no base address for "
+			   "DW_RLE_offset_pair)"));
+	      return false;
+	    }
+
+	  range_beginning += *base;
+	  range_end += *base;
+	}
+
+      /* A not-uncommon case of bad debug info.
+	 Don't pollute the addrmap with bad data.  */
+      if (range_beginning == 0
+	  && !per_objfile->per_bfd->has_section_at_zero)
+	{
+	  complaint (_(".debug_rnglists entry has start address of zero"
+		       " [in module %s]"), objfile_name (objfile));
+	  continue;
+	}
+
+      callback (range_beginning, range_end);
+    }
+
+  if (overflow)
+    {
+      complaint (_("Offset %d is not terminated "
+		   "for DW_AT_ranges attribute"),
+		 offset);
+      return false;
+    }
+
+  return true;
+}
+
+/* Call CALLBACK from DW_AT_ranges attribute value OFFSET reading .debug_ranges.
+   Callback's type should be:
+    void (CORE_ADDR range_beginning, CORE_ADDR range_end)
+   Return 1 if the attributes are present and valid, otherwise, return 0.  */
+
+template <typename Callback>
+static int
+dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu, dwarf_tag tag,
+		       Callback &&callback)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct comp_unit_head *cu_header = &cu->header;
+  bfd *obfd = objfile->obfd;
+  unsigned int addr_size = cu_header->addr_size;
+  CORE_ADDR mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
+  /* Base address selection entry.  */
+  gdb::optional<CORE_ADDR> base;
+  unsigned int dummy;
+  const gdb_byte *buffer;
+
+  if (cu_header->version >= 5)
+    return dwarf2_rnglists_process (offset, cu, tag, callback);
+
+  base = cu->base_address;
+
+  per_objfile->per_bfd->ranges.read (objfile);
+  if (offset >= per_objfile->per_bfd->ranges.size)
+    {
+      complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"),
+		 offset);
+      return 0;
+    }
+  buffer = per_objfile->per_bfd->ranges.buffer + offset;
+
+  while (1)
+    {
+      CORE_ADDR range_beginning, range_end;
+
+      range_beginning = cu->header.read_address (obfd, buffer, &dummy);
+      buffer += addr_size;
+      range_end = cu->header.read_address (obfd, buffer, &dummy);
+      buffer += addr_size;
+      offset += 2 * addr_size;
+
+      /* An end of list marker is a pair of zero addresses.  */
+      if (range_beginning == 0 && range_end == 0)
+	/* Found the end of list entry.  */
+	break;
+
+      /* Each base address selection entry is a pair of 2 values.
+	 The first is the largest possible address, the second is
+	 the base address.  Check for a base address here.  */
+      if ((range_beginning & mask) == mask)
+	{
+	  /* If we found the largest possible address, then we already
+	     have the base address in range_end.  */
+	  base = range_end;
+	  continue;
+	}
+
+      if (!base.has_value ())
+	{
+	  /* We have no valid base address for the ranges
+	     data.  */
+	  complaint (_("Invalid .debug_ranges data (no base address)"));
+	  return 0;
+	}
+
+      if (range_beginning > range_end)
+	{
+	  /* Inverted range entries are invalid.  */
+	  complaint (_("Invalid .debug_ranges data (inverted range)"));
+	  return 0;
+	}
+
+      /* Empty range entries have no effect.  */
+      if (range_beginning == range_end)
+	continue;
+
+      range_beginning += *base;
+      range_end += *base;
+
+      /* A not-uncommon case of bad debug info.
+	 Don't pollute the addrmap with bad data.  */
+      if (range_beginning == 0
+	  && !per_objfile->per_bfd->has_section_at_zero)
+	{
+	  complaint (_(".debug_ranges entry has start address of zero"
+		       " [in module %s]"), objfile_name (objfile));
+	  continue;
+	}
+
+      callback (range_beginning, range_end);
+    }
+
+  return 1;
+}
+
+/* Get low and high pc attributes from DW_AT_ranges attribute value OFFSET.
+   Return 1 if the attributes are present and valid, otherwise, return 0.
+   If RANGES_PST is not NULL we should set up the `psymtabs_addrmap'.  */
+
+static int
+dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
+		    CORE_ADDR *high_return, struct dwarf2_cu *cu,
+		    dwarf2_psymtab *ranges_pst, dwarf_tag tag)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  dwarf2_per_bfd *per_bfd = cu->per_objfile->per_bfd;
+  struct gdbarch *gdbarch = objfile->arch ();
+  const CORE_ADDR baseaddr = objfile->text_section_offset ();
+  int low_set = 0;
+  CORE_ADDR low = 0;
+  CORE_ADDR high = 0;
+  int retval;
+
+  retval = dwarf2_ranges_process (offset, cu, tag,
+    [&] (CORE_ADDR range_beginning, CORE_ADDR range_end)
+    {
+      if (ranges_pst != NULL)
+	{
+	  CORE_ADDR lowpc;
+	  CORE_ADDR highpc;
+
+	  lowpc = (gdbarch_adjust_dwarf2_addr (gdbarch,
+					       range_beginning + baseaddr)
+		   - baseaddr);
+	  highpc = (gdbarch_adjust_dwarf2_addr (gdbarch,
+						range_end + baseaddr)
+		    - baseaddr);
+	  addrmap_set_empty (per_bfd->partial_symtabs->psymtabs_addrmap,
+			     lowpc, highpc - 1, ranges_pst);
+	}
+
+      /* FIXME: This is recording everything as a low-high
+	 segment of consecutive addresses.  We should have a
+	 data structure for discontiguous block ranges
+	 instead.  */
+      if (! low_set)
+	{
+	  low = range_beginning;
+	  high = range_end;
+	  low_set = 1;
+	}
+      else
+	{
+	  if (range_beginning < low)
+	    low = range_beginning;
+	  if (range_end > high)
+	    high = range_end;
+	}
+    });
+  if (!retval)
+    return 0;
+
+  if (! low_set)
+    /* If the first entry is an end-of-list marker, the range
+       describes an empty scope, i.e. no instructions.  */
+    return 0;
+
+  if (low_return)
+    *low_return = low;
+  if (high_return)
+    *high_return = high;
+  return 1;
+}
+
+/* Get low and high pc attributes from a die.  See enum pc_bounds_kind
+   definition for the return value.  *LOWPC and *HIGHPC are set iff
+   neither PC_BOUNDS_NOT_PRESENT nor PC_BOUNDS_INVALID are returned.  */
+
+static enum pc_bounds_kind
+dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
+		      CORE_ADDR *highpc, struct dwarf2_cu *cu,
+		      dwarf2_psymtab *pst)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct attribute *attr;
+  struct attribute *attr_high;
+  CORE_ADDR low = 0;
+  CORE_ADDR high = 0;
+  enum pc_bounds_kind ret;
+
+  attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
+  if (attr_high)
+    {
+      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+      if (attr != nullptr)
+	{
+	  low = attr->as_address ();
+	  high = attr_high->as_address ();
+	  if (cu->header.version >= 4 && attr_high->form_is_constant ())
+	    high += low;
+	}
+      else
+	/* Found high w/o low attribute.  */
+	return PC_BOUNDS_INVALID;
+
+      /* Found consecutive range of addresses.  */
+      ret = PC_BOUNDS_HIGH_LOW;
+    }
+  else
+    {
+      attr = dwarf2_attr (die, DW_AT_ranges, cu);
+      if (attr != nullptr && attr->form_is_unsigned ())
+	{
+	  /* Offset in the .debug_ranges or .debug_rnglist section (depending
+	     on DWARF version).  */
+	  ULONGEST ranges_offset = attr->as_unsigned ();
+
+	  /* See dwarf2_cu::gnu_ranges_base's doc for why we might want to add
+	     this value.  */
+	  if (die->tag != DW_TAG_compile_unit)
+	    ranges_offset += cu->gnu_ranges_base;
+
+	  /* Value of the DW_AT_ranges attribute is the offset in the
+	     .debug_ranges section.  */
+	  if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst,
+				   die->tag))
+	    return PC_BOUNDS_INVALID;
+	  /* Found discontinuous range of addresses.  */
+	  ret = PC_BOUNDS_RANGES;
+	}
+      else
+	return PC_BOUNDS_NOT_PRESENT;
+    }
+
+  /* partial_die_info::read has also the strict LOW < HIGH requirement.  */
+  if (high <= low)
+    return PC_BOUNDS_INVALID;
+
+  /* When using the GNU linker, .gnu.linkonce. sections are used to
+     eliminate duplicate copies of functions and vtables and such.
+     The linker will arbitrarily choose one and discard the others.
+     The AT_*_pc values for such functions refer to local labels in
+     these sections.  If the section from that file was discarded, the
+     labels are not in the output, so the relocs get a value of 0.
+     If this is a discarded function, mark the pc bounds as invalid,
+     so that GDB will ignore it.  */
+  if (low == 0 && !per_objfile->per_bfd->has_section_at_zero)
+    return PC_BOUNDS_INVALID;
+
+  *lowpc = low;
+  if (highpc)
+    *highpc = high;
+  return ret;
+}
+
+/* Assuming that DIE represents a subprogram DIE or a lexical block, get
+   its low and high PC addresses.  Do nothing if these addresses could not
+   be determined.  Otherwise, set LOWPC to the low address if it is smaller,
+   and HIGHPC to the high address if greater than HIGHPC.  */
+
+static void
+dwarf2_get_subprogram_pc_bounds (struct die_info *die,
+				 CORE_ADDR *lowpc, CORE_ADDR *highpc,
+				 struct dwarf2_cu *cu)
+{
+  CORE_ADDR low, high;
+  struct die_info *child = die->child;
+
+  if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) >= PC_BOUNDS_RANGES)
+    {
+      *lowpc = std::min (*lowpc, low);
+      *highpc = std::max (*highpc, high);
+    }
+
+  /* If the language does not allow nested subprograms (either inside
+     subprograms or lexical blocks), we're done.  */
+  if (cu->per_cu->lang != language_ada)
+    return;
+
+  /* Check all the children of the given DIE.  If it contains nested
+     subprograms, then check their pc bounds.  Likewise, we need to
+     check lexical blocks as well, as they may also contain subprogram
+     definitions.  */
+  while (child && child->tag)
+    {
+      if (child->tag == DW_TAG_subprogram
+	  || child->tag == DW_TAG_lexical_block)
+	dwarf2_get_subprogram_pc_bounds (child, lowpc, highpc, cu);
+      child = child->sibling;
+    }
+}
+
+/* Get the low and high pc's represented by the scope DIE, and store
+   them in *LOWPC and *HIGHPC.  If the correct values can't be
+   determined, set *LOWPC to -1 and *HIGHPC to 0.  */
+
+static void
+get_scope_pc_bounds (struct die_info *die,
+		     CORE_ADDR *lowpc, CORE_ADDR *highpc,
+		     struct dwarf2_cu *cu)
+{
+  CORE_ADDR best_low = (CORE_ADDR) -1;
+  CORE_ADDR best_high = (CORE_ADDR) 0;
+  CORE_ADDR current_low, current_high;
+
+  if (dwarf2_get_pc_bounds (die, &current_low, &current_high, cu, NULL)
+      >= PC_BOUNDS_RANGES)
+    {
+      best_low = current_low;
+      best_high = current_high;
+    }
+  else
+    {
+      struct die_info *child = die->child;
+
+      while (child && child->tag)
+	{
+	  switch (child->tag) {
+	  case DW_TAG_subprogram:
+	    dwarf2_get_subprogram_pc_bounds (child, &best_low, &best_high, cu);
+	    break;
+	  case DW_TAG_namespace:
+	  case DW_TAG_module:
+	    /* FIXME: carlton/2004-01-16: Should we do this for
+	       DW_TAG_class_type/DW_TAG_structure_type, too?  I think
+	       that current GCC's always emit the DIEs corresponding
+	       to definitions of methods of classes as children of a
+	       DW_TAG_compile_unit or DW_TAG_namespace (as opposed to
+	       the DIEs giving the declarations, which could be
+	       anywhere).  But I don't see any reason why the
+	       standards says that they have to be there.  */
+	    get_scope_pc_bounds (child, &current_low, &current_high, cu);
+
+	    if (current_low != ((CORE_ADDR) -1))
+	      {
+		best_low = std::min (best_low, current_low);
+		best_high = std::max (best_high, current_high);
+	      }
+	    break;
+	  default:
+	    /* Ignore.  */
+	    break;
+	  }
+
+	  child = child->sibling;
+	}
+    }
+
+  *lowpc = best_low;
+  *highpc = best_high;
+}
+
+/* Record the address ranges for BLOCK, offset by BASEADDR, as given
+   in DIE.  */
+
+static void
+dwarf2_record_block_ranges (struct die_info *die, struct block *block,
+			    CORE_ADDR baseaddr, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct attribute *attr;
+  struct attribute *attr_high;
+
+  attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
+  if (attr_high)
+    {
+      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+      if (attr != nullptr)
+	{
+	  CORE_ADDR low = attr->as_address ();
+	  CORE_ADDR high = attr_high->as_address ();
+
+	  if (cu->header.version >= 4 && attr_high->form_is_constant ())
+	    high += low;
+
+	  low = gdbarch_adjust_dwarf2_addr (gdbarch, low + baseaddr);
+	  high = gdbarch_adjust_dwarf2_addr (gdbarch, high + baseaddr);
+	  cu->get_builder ()->record_block_range (block, low, high - 1);
+	}
+    }
+
+  attr = dwarf2_attr (die, DW_AT_ranges, cu);
+  if (attr != nullptr && attr->form_is_unsigned ())
+    {
+      /* Offset in the .debug_ranges or .debug_rnglist section (depending
+	 on DWARF version).  */
+      ULONGEST ranges_offset = attr->as_unsigned ();
+
+      /* See dwarf2_cu::gnu_ranges_base's doc for why we might want to add
+	 this value.  */
+      if (die->tag != DW_TAG_compile_unit)
+	ranges_offset += cu->gnu_ranges_base;
+
+      std::vector<blockrange> blockvec;
+      dwarf2_ranges_process (ranges_offset, cu, die->tag,
+	[&] (CORE_ADDR start, CORE_ADDR end)
+	{
+	  start += baseaddr;
+	  end += baseaddr;
+	  start = gdbarch_adjust_dwarf2_addr (gdbarch, start);
+	  end = gdbarch_adjust_dwarf2_addr (gdbarch, end);
+	  cu->get_builder ()->record_block_range (block, start, end - 1);
+	  blockvec.emplace_back (start, end);
+	});
+
+      BLOCK_RANGES(block) = make_blockranges (objfile, blockvec);
+    }
+}
+
+/* Check whether the producer field indicates either of GCC < 4.6, or the
+   Intel C/C++ compiler, and cache the result in CU.  */
+
+static void
+check_producer (struct dwarf2_cu *cu)
+{
+  int major, minor;
+
+  if (cu->producer == NULL)
+    {
+      /* For unknown compilers expect their behavior is DWARF version
+	 compliant.
+
+	 GCC started to support .debug_types sections by -gdwarf-4 since
+	 gcc-4.5.x.  As the .debug_types sections are missing DW_AT_producer
+	 for their space efficiency GDB cannot workaround gcc-4.5.x -gdwarf-4
+	 combination.  gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility
+	 interpreted incorrectly by GDB now - GCC PR debug/48229.  */
+    }
+  else if (producer_is_gcc (cu->producer, &major, &minor))
+    {
+      cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
+      cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3);
+    }
+  else if (producer_is_icc (cu->producer, &major, &minor))
+    {
+      cu->producer_is_icc = true;
+      cu->producer_is_icc_lt_14 = major < 14;
+    }
+  else if (startswith (cu->producer, "CodeWarrior S12/L-ISA"))
+    cu->producer_is_codewarrior = true;
+  else
+    {
+      /* For other non-GCC compilers, expect their behavior is DWARF version
+	 compliant.  */
+    }
+
+  cu->checked_producer = true;
+}
+
+/* Check for GCC PR debug/45124 fix which is not present in any G++ version up
+   to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed
+   during 4.6.0 experimental.  */
+
+static bool
+producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_gxx_lt_4_6;
+}
+
+
+/* Codewarrior (at least as of version 5.0.40) generates dwarf line information
+   with incorrect is_stmt attributes.  */
+
+static bool
+producer_is_codewarrior (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_codewarrior;
+}
+
+/* Return the accessibility of DIE, as given by DW_AT_accessibility.
+   If that attribute is not available, return the appropriate
+   default.  */
+
+static enum dwarf_access_attribute
+dwarf2_access_attribute (struct die_info *die, struct dwarf2_cu *cu)
+{
+  attribute *attr = dwarf2_attr (die, DW_AT_accessibility, cu);
+  if (attr != nullptr)
+    {
+      LONGEST value = attr->constant_value (-1);
+      if (value == DW_ACCESS_public
+	  || value == DW_ACCESS_protected
+	  || value == DW_ACCESS_private)
+	return (dwarf_access_attribute) value;
+      complaint (_("Unhandled DW_AT_accessibility value (%s)"),
+		 plongest (value));
+    }
+
+  if (cu->header.version < 3 || producer_is_gxx_lt_4_6 (cu))
+    {
+      /* The default DWARF 2 accessibility for members is public, the default
+	 accessibility for inheritance is private.  */
+
+      if (die->tag != DW_TAG_inheritance)
+	return DW_ACCESS_public;
+      else
+	return DW_ACCESS_private;
+    }
+  else
+    {
+      /* DWARF 3+ defines the default accessibility a different way.  The same
+	 rules apply now for DW_TAG_inheritance as for the members and it only
+	 depends on the container kind.  */
+
+      if (die->parent->tag == DW_TAG_class_type)
+	return DW_ACCESS_private;
+      else
+	return DW_ACCESS_public;
+    }
+}
+
+/* Look for DW_AT_data_member_location.  Set *OFFSET to the byte
+   offset.  If the attribute was not found return 0, otherwise return
+   1.  If it was found but could not properly be handled, set *OFFSET
+   to 0.  */
+
+static int
+handle_data_member_location (struct die_info *die, struct dwarf2_cu *cu,
+			     LONGEST *offset)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_data_member_location, cu);
+  if (attr != NULL)
+    {
+      *offset = 0;
+
+      /* Note that we do not check for a section offset first here.
+	 This is because DW_AT_data_member_location is new in DWARF 4,
+	 so if we see it, we can assume that a constant form is really
+	 a constant and not a section offset.  */
+      if (attr->form_is_constant ())
+	*offset = attr->constant_value (0);
+      else if (attr->form_is_section_offset ())
+	dwarf2_complex_location_expr_complaint ();
+      else if (attr->form_is_block ())
+	*offset = decode_locdesc (attr->as_block (), cu);
+      else
+	dwarf2_complex_location_expr_complaint ();
+
+      return 1;
+    }
+
+  return 0;
+}
+
+/* Look for DW_AT_data_member_location and store the results in FIELD.  */
+
+static void
+handle_data_member_location (struct die_info *die, struct dwarf2_cu *cu,
+			     struct field *field)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_data_member_location, cu);
+  if (attr != NULL)
+    {
+      if (attr->form_is_constant ())
+	{
+	  LONGEST offset = attr->constant_value (0);
+	  SET_FIELD_BITPOS (*field, offset * bits_per_byte);
+	}
+      else if (attr->form_is_section_offset ())
+	dwarf2_complex_location_expr_complaint ();
+      else if (attr->form_is_block ())
+	{
+	  bool handled;
+	  CORE_ADDR offset = decode_locdesc (attr->as_block (), cu, &handled);
+	  if (handled)
+	    SET_FIELD_BITPOS (*field, offset * bits_per_byte);
+	  else
+	    {
+	      dwarf2_per_objfile *per_objfile = cu->per_objfile;
+	      struct objfile *objfile = per_objfile->objfile;
+	      struct dwarf2_locexpr_baton *dlbaton
+		= XOBNEW (&objfile->objfile_obstack,
+			  struct dwarf2_locexpr_baton);
+	      dlbaton->data = attr->as_block ()->data;
+	      dlbaton->size = attr->as_block ()->size;
+	      /* When using this baton, we want to compute the address
+		 of the field, not the value.  This is why
+		 is_reference is set to false here.  */
+	      dlbaton->is_reference = false;
+	      dlbaton->per_objfile = per_objfile;
+	      dlbaton->per_cu = cu->per_cu;
+
+	      SET_FIELD_DWARF_BLOCK (*field, dlbaton);
+	    }
+	}
+      else
+	dwarf2_complex_location_expr_complaint ();
+    }
+}
+
+/* Add an aggregate field to the field list.  */
+
+static void
+dwarf2_add_field (struct field_info *fip, struct die_info *die,
+		  struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct nextfield *new_field;
+  struct attribute *attr;
+  struct field *fp;
+  const char *fieldname = "";
+
+  if (die->tag == DW_TAG_inheritance)
+    {
+      fip->baseclasses.emplace_back ();
+      new_field = &fip->baseclasses.back ();
+    }
+  else
+    {
+      fip->fields.emplace_back ();
+      new_field = &fip->fields.back ();
+    }
+
+  new_field->offset = die->sect_off;
+
+  new_field->accessibility = dwarf2_access_attribute (die, cu);
+  if (new_field->accessibility != DW_ACCESS_public)
+    fip->non_public_fields = true;
+
+  attr = dwarf2_attr (die, DW_AT_virtuality, cu);
+  if (attr != nullptr)
+    new_field->virtuality = attr->as_virtuality ();
+  else
+    new_field->virtuality = DW_VIRTUALITY_none;
+
+  fp = &new_field->field;
+
+  if (die->tag == DW_TAG_member && ! die_is_declaration (die, cu))
+    {
+      /* Data member other than a C++ static data member.  */
+
+      /* Get type of field.  */
+      fp->set_type (die_type (die, cu));
+
+      SET_FIELD_BITPOS (*fp, 0);
+
+      /* Get bit size of field (zero if none).  */
+      attr = dwarf2_attr (die, DW_AT_bit_size, cu);
+      if (attr != nullptr)
+	{
+	  FIELD_BITSIZE (*fp) = attr->constant_value (0);
+	}
+      else
+	{
+	  FIELD_BITSIZE (*fp) = 0;
+	}
+
+      /* Get bit offset of field.  */
+      handle_data_member_location (die, cu, fp);
+      attr = dwarf2_attr (die, DW_AT_bit_offset, cu);
+      if (attr != nullptr && attr->form_is_constant ())
+	{
+	  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+	    {
+	      /* For big endian bits, the DW_AT_bit_offset gives the
+		 additional bit offset from the MSB of the containing
+		 anonymous object to the MSB of the field.  We don't
+		 have to do anything special since we don't need to
+		 know the size of the anonymous object.  */
+	      SET_FIELD_BITPOS (*fp, (FIELD_BITPOS (*fp)
+				      + attr->constant_value (0)));
+	    }
+	  else
+	    {
+	      /* For little endian bits, compute the bit offset to the
+		 MSB of the anonymous object, subtract off the number of
+		 bits from the MSB of the field to the MSB of the
+		 object, and then subtract off the number of bits of
+		 the field itself.  The result is the bit offset of
+		 the LSB of the field.  */
+	      int anonymous_size;
+	      int bit_offset = attr->constant_value (0);
+
+	      attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+	      if (attr != nullptr && attr->form_is_constant ())
+		{
+		  /* The size of the anonymous object containing
+		     the bit field is explicit, so use the
+		     indicated size (in bytes).  */
+		  anonymous_size = attr->constant_value (0);
+		}
+	      else
+		{
+		  /* The size of the anonymous object containing
+		     the bit field must be inferred from the type
+		     attribute of the data member containing the
+		     bit field.  */
+		  anonymous_size = TYPE_LENGTH (fp->type ());
+		}
+	      SET_FIELD_BITPOS (*fp,
+				(FIELD_BITPOS (*fp)
+				 + anonymous_size * bits_per_byte
+				 - bit_offset - FIELD_BITSIZE (*fp)));
+	    }
+	}
+      attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu);
+      if (attr != NULL)
+	SET_FIELD_BITPOS (*fp, (FIELD_BITPOS (*fp)
+				+ attr->constant_value (0)));
+
+      /* Get name of field.  */
+      fieldname = dwarf2_name (die, cu);
+      if (fieldname == NULL)
+	fieldname = "";
+
+      /* The name is already allocated along with this objfile, so we don't
+	 need to duplicate it for the type.  */
+      fp->name = fieldname;
+
+      /* Change accessibility for artificial fields (e.g. virtual table
+	 pointer or virtual base class pointer) to private.  */
+      if (dwarf2_attr (die, DW_AT_artificial, cu))
+	{
+	  FIELD_ARTIFICIAL (*fp) = 1;
+	  new_field->accessibility = DW_ACCESS_private;
+	  fip->non_public_fields = true;
+	}
+    }
+  else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable)
+    {
+      /* C++ static member.  */
+
+      /* NOTE: carlton/2002-11-05: It should be a DW_TAG_member that
+	 is a declaration, but all versions of G++ as of this writing
+	 (so through at least 3.2.1) incorrectly generate
+	 DW_TAG_variable tags.  */
+
+      const char *physname;
+
+      /* Get name of field.  */
+      fieldname = dwarf2_name (die, cu);
+      if (fieldname == NULL)
+	return;
+
+      attr = dwarf2_attr (die, DW_AT_const_value, cu);
+      if (attr
+	  /* Only create a symbol if this is an external value.
+	     new_symbol checks this and puts the value in the global symbol
+	     table, which we want.  If it is not external, new_symbol
+	     will try to put the value in cu->list_in_scope which is wrong.  */
+	  && dwarf2_flag_true_p (die, DW_AT_external, cu))
+	{
+	  /* A static const member, not much different than an enum as far as
+	     we're concerned, except that we can support more types.  */
+	  new_symbol (die, NULL, cu);
+	}
+
+      /* Get physical name.  */
+      physname = dwarf2_physname (fieldname, die, cu);
+
+      /* The name is already allocated along with this objfile, so we don't
+	 need to duplicate it for the type.  */
+      SET_FIELD_PHYSNAME (*fp, physname ? physname : "");
+      fp->set_type (die_type (die, cu));
+      FIELD_NAME (*fp) = fieldname;
+    }
+  else if (die->tag == DW_TAG_inheritance)
+    {
+      /* C++ base class field.  */
+      handle_data_member_location (die, cu, fp);
+      FIELD_BITSIZE (*fp) = 0;
+      fp->set_type (die_type (die, cu));
+      FIELD_NAME (*fp) = fp->type ()->name ();
+    }
+  else
+    gdb_assert_not_reached ("missing case in dwarf2_add_field");
+}
+
+/* Can the type given by DIE define another type?  */
+
+static bool
+type_can_define_types (const struct die_info *die)
+{
+  switch (die->tag)
+    {
+    case DW_TAG_typedef:
+    case DW_TAG_class_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+    case DW_TAG_enumeration_type:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+/* Add a type definition defined in the scope of the FIP's class.  */
+
+static void
+dwarf2_add_type_defn (struct field_info *fip, struct die_info *die,
+		      struct dwarf2_cu *cu)
+{
+  struct decl_field fp;
+  memset (&fp, 0, sizeof (fp));
+
+  gdb_assert (type_can_define_types (die));
+
+  /* Get name of field.  NULL is okay here, meaning an anonymous type.  */
+  fp.name = dwarf2_name (die, cu);
+  fp.type = read_type_die (die, cu);
+
+  /* Save accessibility.  */
+  dwarf_access_attribute accessibility = dwarf2_access_attribute (die, cu);
+  switch (accessibility)
+    {
+    case DW_ACCESS_public:
+      /* The assumed value if neither private nor protected.  */
+      break;
+    case DW_ACCESS_private:
+      fp.is_private = 1;
+      break;
+    case DW_ACCESS_protected:
+      fp.is_protected = 1;
+      break;
+    }
+
+  if (die->tag == DW_TAG_typedef)
+    fip->typedef_field_list.push_back (fp);
+  else
+    fip->nested_types_list.push_back (fp);
+}
+
+/* A convenience typedef that's used when finding the discriminant
+   field for a variant part.  */
+typedef std::unordered_map<sect_offset, int, gdb::hash_enum<sect_offset>>
+  offset_map_type;
+
+/* Compute the discriminant range for a given variant.  OBSTACK is
+   where the results will be stored.  VARIANT is the variant to
+   process.  IS_UNSIGNED indicates whether the discriminant is signed
+   or unsigned.  */
+
+static const gdb::array_view<discriminant_range>
+convert_variant_range (struct obstack *obstack, const variant_field &variant,
+		       bool is_unsigned)
+{
+  std::vector<discriminant_range> ranges;
+
+  if (variant.default_branch)
+    return {};
+
+  if (variant.discr_list_data == nullptr)
+    {
+      discriminant_range r
+	= {variant.discriminant_value, variant.discriminant_value};
+      ranges.push_back (r);
+    }
+  else
+    {
+      gdb::array_view<const gdb_byte> data (variant.discr_list_data->data,
+					    variant.discr_list_data->size);
+      while (!data.empty ())
+	{
+	  if (data[0] != DW_DSC_range && data[0] != DW_DSC_label)
+	    {
+	      complaint (_("invalid discriminant marker: %d"), data[0]);
+	      break;
+	    }
+	  bool is_range = data[0] == DW_DSC_range;
+	  data = data.slice (1);
+
+	  ULONGEST low, high;
+	  unsigned int bytes_read;
+
+	  if (data.empty ())
+	    {
+	      complaint (_("DW_AT_discr_list missing low value"));
+	      break;
+	    }
+	  if (is_unsigned)
+	    low = read_unsigned_leb128 (nullptr, data.data (), &bytes_read);
+	  else
+	    low = (ULONGEST) read_signed_leb128 (nullptr, data.data (),
+						 &bytes_read);
+	  data = data.slice (bytes_read);
+
+	  if (is_range)
+	    {
+	      if (data.empty ())
+		{
+		  complaint (_("DW_AT_discr_list missing high value"));
+		  break;
+		}
+	      if (is_unsigned)
+		high = read_unsigned_leb128 (nullptr, data.data (),
+					     &bytes_read);
+	      else
+		high = (LONGEST) read_signed_leb128 (nullptr, data.data (),
+						     &bytes_read);
+	      data = data.slice (bytes_read);
+	    }
+	  else
+	    high = low;
+
+	  ranges.push_back ({ low, high });
+	}
+    }
+
+  discriminant_range *result = XOBNEWVEC (obstack, discriminant_range,
+					  ranges.size ());
+  std::copy (ranges.begin (), ranges.end (), result);
+  return gdb::array_view<discriminant_range> (result, ranges.size ());
+}
+
+static const gdb::array_view<variant_part> create_variant_parts
+  (struct obstack *obstack,
+   const offset_map_type &offset_map,
+   struct field_info *fi,
+   const std::vector<variant_part_builder> &variant_parts);
+
+/* Fill in a "struct variant" for a given variant field.  RESULT is
+   the variant to fill in.  OBSTACK is where any needed allocations
+   will be done.  OFFSET_MAP holds the mapping from section offsets to
+   fields for the type.  FI describes the fields of the type we're
+   processing.  FIELD is the variant field we're converting.  */
+
+static void
+create_one_variant (variant &result, struct obstack *obstack,
+		    const offset_map_type &offset_map,
+		    struct field_info *fi, const variant_field &field)
+{
+  result.discriminants = convert_variant_range (obstack, field, false);
+  result.first_field = field.first_field + fi->baseclasses.size ();
+  result.last_field = field.last_field + fi->baseclasses.size ();
+  result.parts = create_variant_parts (obstack, offset_map, fi,
+				       field.variant_parts);
+}
+
+/* Fill in a "struct variant_part" for a given variant part.  RESULT
+   is the variant part to fill in.  OBSTACK is where any needed
+   allocations will be done.  OFFSET_MAP holds the mapping from
+   section offsets to fields for the type.  FI describes the fields of
+   the type we're processing.  BUILDER is the variant part to be
+   converted.  */
+
+static void
+create_one_variant_part (variant_part &result,
+			 struct obstack *obstack,
+			 const offset_map_type &offset_map,
+			 struct field_info *fi,
+			 const variant_part_builder &builder)
+{
+  auto iter = offset_map.find (builder.discriminant_offset);
+  if (iter == offset_map.end ())
+    {
+      result.discriminant_index = -1;
+      /* Doesn't matter.  */
+      result.is_unsigned = false;
+    }
+  else
+    {
+      result.discriminant_index = iter->second;
+      result.is_unsigned
+	= fi->fields[result.discriminant_index].field.type ()->is_unsigned ();
+    }
+
+  size_t n = builder.variants.size ();
+  variant *output = new (obstack) variant[n];
+  for (size_t i = 0; i < n; ++i)
+    create_one_variant (output[i], obstack, offset_map, fi,
+			builder.variants[i]);
+
+  result.variants = gdb::array_view<variant> (output, n);
+}
+
+/* Create a vector of variant parts that can be attached to a type.
+   OBSTACK is where any needed allocations will be done.  OFFSET_MAP
+   holds the mapping from section offsets to fields for the type.  FI
+   describes the fields of the type we're processing.  VARIANT_PARTS
+   is the vector to convert.  */
+
+static const gdb::array_view<variant_part>
+create_variant_parts (struct obstack *obstack,
+		      const offset_map_type &offset_map,
+		      struct field_info *fi,
+		      const std::vector<variant_part_builder> &variant_parts)
+{
+  if (variant_parts.empty ())
+    return {};
+
+  size_t n = variant_parts.size ();
+  variant_part *result = new (obstack) variant_part[n];
+  for (size_t i = 0; i < n; ++i)
+    create_one_variant_part (result[i], obstack, offset_map, fi,
+			     variant_parts[i]);
+
+  return gdb::array_view<variant_part> (result, n);
+}
+
+/* Compute the variant part vector for FIP, attaching it to TYPE when
+   done.  */
+
+static void
+add_variant_property (struct field_info *fip, struct type *type,
+		      struct dwarf2_cu *cu)
+{
+  /* Map section offsets of fields to their field index.  Note the
+     field index here does not take the number of baseclasses into
+     account.  */
+  offset_map_type offset_map;
+  for (int i = 0; i < fip->fields.size (); ++i)
+    offset_map[fip->fields[i].offset] = i;
+
+  struct objfile *objfile = cu->per_objfile->objfile;
+  gdb::array_view<variant_part> parts
+    = create_variant_parts (&objfile->objfile_obstack, offset_map, fip,
+			    fip->variant_parts);
+
+  struct dynamic_prop prop;
+  prop.set_variant_parts ((gdb::array_view<variant_part> *)
+			  obstack_copy (&objfile->objfile_obstack, &parts,
+					sizeof (parts)));
+
+  type->add_dyn_prop (DYN_PROP_VARIANT_PARTS, prop);
+}
+
+/* Create the vector of fields, and attach it to the type.  */
+
+static void
+dwarf2_attach_fields_to_type (struct field_info *fip, struct type *type,
+			      struct dwarf2_cu *cu)
+{
+  int nfields = fip->nfields ();
+
+  /* Record the field count, allocate space for the array of fields,
+     and create blank accessibility bitfields if necessary.  */
+  type->set_num_fields (nfields);
+  type->set_fields
+    ((struct field *) TYPE_ZALLOC (type, sizeof (struct field) * nfields));
+
+  if (fip->non_public_fields && cu->per_cu->lang != language_ada)
+    {
+      ALLOCATE_CPLUS_STRUCT_TYPE (type);
+
+      TYPE_FIELD_PRIVATE_BITS (type) =
+	(B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
+      B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
+
+      TYPE_FIELD_PROTECTED_BITS (type) =
+	(B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
+      B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
+
+      TYPE_FIELD_IGNORE_BITS (type) =
+	(B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
+      B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
+    }
+
+  /* If the type has baseclasses, allocate and clear a bit vector for
+     TYPE_FIELD_VIRTUAL_BITS.  */
+  if (!fip->baseclasses.empty () && cu->per_cu->lang != language_ada)
+    {
+      int num_bytes = B_BYTES (fip->baseclasses.size ());
+      unsigned char *pointer;
+
+      ALLOCATE_CPLUS_STRUCT_TYPE (type);
+      pointer = (unsigned char *) TYPE_ALLOC (type, num_bytes);
+      TYPE_FIELD_VIRTUAL_BITS (type) = pointer;
+      B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), fip->baseclasses.size ());
+      TYPE_N_BASECLASSES (type) = fip->baseclasses.size ();
+    }
+
+  if (!fip->variant_parts.empty ())
+    add_variant_property (fip, type, cu);
+
+  /* Copy the saved-up fields into the field vector.  */
+  for (int i = 0; i < nfields; ++i)
+    {
+      struct nextfield &field
+	= ((i < fip->baseclasses.size ()) ? fip->baseclasses[i]
+	   : fip->fields[i - fip->baseclasses.size ()]);
+
+      type->field (i) = field.field;
+      switch (field.accessibility)
+	{
+	case DW_ACCESS_private:
+	  if (cu->per_cu->lang != language_ada)
+	    SET_TYPE_FIELD_PRIVATE (type, i);
+	  break;
+
+	case DW_ACCESS_protected:
+	  if (cu->per_cu->lang != language_ada)
+	    SET_TYPE_FIELD_PROTECTED (type, i);
+	  break;
+
+	case DW_ACCESS_public:
+	  break;
+
+	default:
+	  /* Unknown accessibility.  Complain and treat it as public.  */
+	  {
+	    complaint (_("unsupported accessibility %d"),
+		       field.accessibility);
+	  }
+	  break;
+	}
+      if (i < fip->baseclasses.size ())
+	{
+	  switch (field.virtuality)
+	    {
+	    case DW_VIRTUALITY_virtual:
+	    case DW_VIRTUALITY_pure_virtual:
+	      if (cu->per_cu->lang == language_ada)
+		error (_("unexpected virtuality in component of Ada type"));
+	      SET_TYPE_FIELD_VIRTUAL (type, i);
+	      break;
+	    }
+	}
+    }
+}
+
+/* Return true if this member function is a constructor, false
+   otherwise.  */
+
+static int
+dwarf2_is_constructor (struct die_info *die, struct dwarf2_cu *cu)
+{
+  const char *fieldname;
+  const char *type_name;
+  int len;
+
+  if (die->parent == NULL)
+    return 0;
+
+  if (die->parent->tag != DW_TAG_structure_type
+      && die->parent->tag != DW_TAG_union_type
+      && die->parent->tag != DW_TAG_class_type)
+    return 0;
+
+  fieldname = dwarf2_name (die, cu);
+  type_name = dwarf2_name (die->parent, cu);
+  if (fieldname == NULL || type_name == NULL)
+    return 0;
+
+  len = strlen (fieldname);
+  return (strncmp (fieldname, type_name, len) == 0
+	  && (type_name[len] == '\0' || type_name[len] == '<'));
+}
+
+/* Add a member function to the proper fieldlist.  */
+
+static void
+dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
+		      struct type *type, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct attribute *attr;
+  int i;
+  struct fnfieldlist *flp = nullptr;
+  struct fn_field *fnp;
+  const char *fieldname;
+  struct type *this_type;
+
+  if (cu->per_cu->lang == language_ada)
+    error (_("unexpected member function in Ada type"));
+
+  /* Get name of member function.  */
+  fieldname = dwarf2_name (die, cu);
+  if (fieldname == NULL)
+    return;
+
+  /* Look up member function name in fieldlist.  */
+  for (i = 0; i < fip->fnfieldlists.size (); i++)
+    {
+      if (strcmp (fip->fnfieldlists[i].name, fieldname) == 0)
+	{
+	  flp = &fip->fnfieldlists[i];
+	  break;
+	}
+    }
+
+  /* Create a new fnfieldlist if necessary.  */
+  if (flp == nullptr)
+    {
+      fip->fnfieldlists.emplace_back ();
+      flp = &fip->fnfieldlists.back ();
+      flp->name = fieldname;
+      i = fip->fnfieldlists.size () - 1;
+    }
+
+  /* Create a new member function field and add it to the vector of
+     fnfieldlists.  */
+  flp->fnfields.emplace_back ();
+  fnp = &flp->fnfields.back ();
+
+  /* Delay processing of the physname until later.  */
+  if (cu->per_cu->lang == language_cplus)
+    add_to_method_list (type, i, flp->fnfields.size () - 1, fieldname,
+			die, cu);
+  else
+    {
+      const char *physname = dwarf2_physname (fieldname, die, cu);
+      fnp->physname = physname ? physname : "";
+    }
+
+  fnp->type = alloc_type (objfile);
+  this_type = read_type_die (die, cu);
+  if (this_type && this_type->code () == TYPE_CODE_FUNC)
+    {
+      int nparams = this_type->num_fields ();
+
+      /* TYPE is the domain of this method, and THIS_TYPE is the type
+	   of the method itself (TYPE_CODE_METHOD).  */
+      smash_to_method_type (fnp->type, type,
+			    TYPE_TARGET_TYPE (this_type),
+			    this_type->fields (),
+			    this_type->num_fields (),
+			    this_type->has_varargs ());
+
+      /* Handle static member functions.
+	 Dwarf2 has no clean way to discern C++ static and non-static
+	 member functions.  G++ helps GDB by marking the first
+	 parameter for non-static member functions (which is the this
+	 pointer) as artificial.  We obtain this information from
+	 read_subroutine_type via TYPE_FIELD_ARTIFICIAL.  */
+      if (nparams == 0 || TYPE_FIELD_ARTIFICIAL (this_type, 0) == 0)
+	fnp->voffset = VOFFSET_STATIC;
+    }
+  else
+    complaint (_("member function type missing for '%s'"),
+	       dwarf2_full_name (fieldname, die, cu));
+
+  /* Get fcontext from DW_AT_containing_type if present.  */
+  if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
+    fnp->fcontext = die_containing_type (die, cu);
+
+  /* dwarf2 doesn't have stubbed physical names, so the setting of is_const and
+     is_volatile is irrelevant, as it is needed by gdb_mangle_name only.  */
+
+  /* Get accessibility.  */
+  dwarf_access_attribute accessibility = dwarf2_access_attribute (die, cu);
+  switch (accessibility)
+    {
+    case DW_ACCESS_private:
+      fnp->is_private = 1;
+      break;
+    case DW_ACCESS_protected:
+      fnp->is_protected = 1;
+      break;
+    }
+
+  /* Check for artificial methods.  */
+  attr = dwarf2_attr (die, DW_AT_artificial, cu);
+  if (attr && attr->as_boolean ())
+    fnp->is_artificial = 1;
+
+  /* Check for defaulted methods.  */
+  attr = dwarf2_attr (die, DW_AT_defaulted, cu);
+  if (attr != nullptr)
+    fnp->defaulted = attr->defaulted ();
+
+  /* Check for deleted methods.  */
+  attr = dwarf2_attr (die, DW_AT_deleted, cu);
+  if (attr != nullptr && attr->as_boolean ())
+    fnp->is_deleted = 1;
+
+  fnp->is_constructor = dwarf2_is_constructor (die, cu);
+
+  /* Get index in virtual function table if it is a virtual member
+     function.  For older versions of GCC, this is an offset in the
+     appropriate virtual table, as specified by DW_AT_containing_type.
+     For everyone else, it is an expression to be evaluated relative
+     to the object address.  */
+
+  attr = dwarf2_attr (die, DW_AT_vtable_elem_location, cu);
+  if (attr != nullptr)
+    {
+      if (attr->form_is_block () && attr->as_block ()->size > 0)
+	{
+	  struct dwarf_block *block = attr->as_block ();
+
+	  if (block->data[0] == DW_OP_constu)
+	    {
+	      /* Old-style GCC.  */
+	      fnp->voffset = decode_locdesc (block, cu) + 2;
+	    }
+	  else if (block->data[0] == DW_OP_deref
+		   || (block->size > 1
+		       && block->data[0] == DW_OP_deref_size
+		       && block->data[1] == cu->header.addr_size))
+	    {
+	      fnp->voffset = decode_locdesc (block, cu);
+	      if ((fnp->voffset % cu->header.addr_size) != 0)
+		dwarf2_complex_location_expr_complaint ();
+	      else
+		fnp->voffset /= cu->header.addr_size;
+	      fnp->voffset += 2;
+	    }
+	  else
+	    dwarf2_complex_location_expr_complaint ();
+
+	  if (!fnp->fcontext)
+	    {
+	      /* If there is no `this' field and no DW_AT_containing_type,
+		 we cannot actually find a base class context for the
+		 vtable!  */
+	      if (this_type->num_fields () == 0
+		  || !TYPE_FIELD_ARTIFICIAL (this_type, 0))
+		{
+		  complaint (_("cannot determine context for virtual member "
+			       "function \"%s\" (offset %s)"),
+			     fieldname, sect_offset_str (die->sect_off));
+		}
+	      else
+		{
+		  fnp->fcontext
+		    = TYPE_TARGET_TYPE (this_type->field (0).type ());
+		}
+	    }
+	}
+      else if (attr->form_is_section_offset ())
+	{
+	  dwarf2_complex_location_expr_complaint ();
+	}
+      else
+	{
+	  dwarf2_invalid_attrib_class_complaint ("DW_AT_vtable_elem_location",
+						 fieldname);
+	}
+    }
+  else
+    {
+      attr = dwarf2_attr (die, DW_AT_virtuality, cu);
+      if (attr != nullptr && attr->as_virtuality () != DW_VIRTUALITY_none)
+	{
+	  /* GCC does this, as of 2008-08-25; PR debug/37237.  */
+	  complaint (_("Member function \"%s\" (offset %s) is virtual "
+		       "but the vtable offset is not specified"),
+		     fieldname, sect_offset_str (die->sect_off));
+	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
+	  TYPE_CPLUS_DYNAMIC (type) = 1;
+	}
+    }
+}
+
+/* Create the vector of member function fields, and attach it to the type.  */
+
+static void
+dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type,
+				 struct dwarf2_cu *cu)
+{
+  if (cu->per_cu->lang == language_ada)
+    error (_("unexpected member functions in Ada type"));
+
+  ALLOCATE_CPLUS_STRUCT_TYPE (type);
+  TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
+    TYPE_ALLOC (type,
+		sizeof (struct fn_fieldlist) * fip->fnfieldlists.size ());
+
+  for (int i = 0; i < fip->fnfieldlists.size (); i++)
+    {
+      struct fnfieldlist &nf = fip->fnfieldlists[i];
+      struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i);
+
+      TYPE_FN_FIELDLIST_NAME (type, i) = nf.name;
+      TYPE_FN_FIELDLIST_LENGTH (type, i) = nf.fnfields.size ();
+      fn_flp->fn_fields = (struct fn_field *)
+	TYPE_ALLOC (type, sizeof (struct fn_field) * nf.fnfields.size ());
+
+      for (int k = 0; k < nf.fnfields.size (); ++k)
+	fn_flp->fn_fields[k] = nf.fnfields[k];
+    }
+
+  TYPE_NFN_FIELDS (type) = fip->fnfieldlists.size ();
+}
+
+/* Returns non-zero if NAME is the name of a vtable member in CU's
+   language, zero otherwise.  */
+static int
+is_vtable_name (const char *name, struct dwarf2_cu *cu)
+{
+  static const char vptr[] = "_vptr";
+
+  /* Look for the C++ form of the vtable.  */
+  if (startswith (name, vptr) && is_cplus_marker (name[sizeof (vptr) - 1]))
+    return 1;
+
+  return 0;
+}
+
+/* GCC outputs unnamed structures that are really pointers to member
+   functions, with the ABI-specified layout.  If TYPE describes
+   such a structure, smash it into a member function type.
+
+   GCC shouldn't do this; it should just output pointer to member DIEs.
+   This is GCC PR debug/28767.  */
+
+static void
+quirk_gcc_member_function_pointer (struct type *type, struct objfile *objfile)
+{
+  struct type *pfn_type, *self_type, *new_type;
+
+  /* Check for a structure with no name and two children.  */
+  if (type->code () != TYPE_CODE_STRUCT || type->num_fields () != 2)
+    return;
+
+  /* Check for __pfn and __delta members.  */
+  if (TYPE_FIELD_NAME (type, 0) == NULL
+      || strcmp (TYPE_FIELD_NAME (type, 0), "__pfn") != 0
+      || TYPE_FIELD_NAME (type, 1) == NULL
+      || strcmp (TYPE_FIELD_NAME (type, 1), "__delta") != 0)
+    return;
+
+  /* Find the type of the method.  */
+  pfn_type = type->field (0).type ();
+  if (pfn_type == NULL
+      || pfn_type->code () != TYPE_CODE_PTR
+      || TYPE_TARGET_TYPE (pfn_type)->code () != TYPE_CODE_FUNC)
+    return;
+
+  /* Look for the "this" argument.  */
+  pfn_type = TYPE_TARGET_TYPE (pfn_type);
+  if (pfn_type->num_fields () == 0
+      /* || pfn_type->field (0).type () == NULL */
+      || pfn_type->field (0).type ()->code () != TYPE_CODE_PTR)
+    return;
+
+  self_type = TYPE_TARGET_TYPE (pfn_type->field (0).type ());
+  new_type = alloc_type (objfile);
+  smash_to_method_type (new_type, self_type, TYPE_TARGET_TYPE (pfn_type),
+			pfn_type->fields (), pfn_type->num_fields (),
+			pfn_type->has_varargs ());
+  smash_to_methodptr_type (type, new_type);
+}
+
+/* Helper for quirk_ada_thick_pointer.  If TYPE is an array type that
+   requires rewriting, then copy it and return the updated copy.
+   Otherwise return nullptr.  */
+
+static struct type *
+rewrite_array_type (struct type *type)
+{
+  if (type->code () != TYPE_CODE_ARRAY)
+    return nullptr;
+
+  struct type *index_type = type->index_type ();
+  range_bounds *current_bounds = index_type->bounds ();
+
+  /* Handle multi-dimensional arrays.  */
+  struct type *new_target = rewrite_array_type (TYPE_TARGET_TYPE (type));
+  if (new_target == nullptr)
+    {
+      /* Maybe we don't need to rewrite this array.  */
+      if (current_bounds->low.kind () == PROP_CONST
+	  && current_bounds->high.kind () == PROP_CONST)
+	return nullptr;
+    }
+
+  /* Either the target type was rewritten, or the bounds have to be
+     updated.  Either way we want to copy the type and update
+     everything.  */
+  struct type *copy = copy_type (type);
+  int nfields = copy->num_fields ();
+  field *new_fields
+    = ((struct field *) TYPE_ZALLOC (copy,
+				     nfields * sizeof (struct field)));
+  memcpy (new_fields, copy->fields (), nfields * sizeof (struct field));
+  copy->set_fields (new_fields);
+  if (new_target != nullptr)
+    TYPE_TARGET_TYPE (copy) = new_target;
+
+  struct type *index_copy = copy_type (index_type);
+  range_bounds *bounds
+    = (struct range_bounds *) TYPE_ZALLOC (index_copy,
+					   sizeof (range_bounds));
+  *bounds = *current_bounds;
+  bounds->low.set_const_val (1);
+  bounds->high.set_const_val (0);
+  index_copy->set_bounds (bounds);
+  copy->set_index_type (index_copy);
+
+  return copy;
+}
+
+/* While some versions of GCC will generate complicated DWARF for an
+   array (see quirk_ada_thick_pointer), more recent versions were
+   modified to emit an explicit thick pointer structure.  However, in
+   this case, the array still has DWARF expressions for its ranges,
+   and these must be ignored.  */
+
+static void
+quirk_ada_thick_pointer_struct (struct die_info *die, struct dwarf2_cu *cu,
+				struct type *type)
+{
+  gdb_assert (cu->per_cu->lang == language_ada);
+
+  /* Check for a structure with two children.  */
+  if (type->code () != TYPE_CODE_STRUCT || type->num_fields () != 2)
+    return;
+
+  /* Check for P_ARRAY and P_BOUNDS members.  */
+  if (TYPE_FIELD_NAME (type, 0) == NULL
+      || strcmp (TYPE_FIELD_NAME (type, 0), "P_ARRAY") != 0
+      || TYPE_FIELD_NAME (type, 1) == NULL
+      || strcmp (TYPE_FIELD_NAME (type, 1), "P_BOUNDS") != 0)
+    return;
+
+  /* Make sure we're looking at a pointer to an array.  */
+  if (type->field (0).type ()->code () != TYPE_CODE_PTR)
+    return;
+
+  /* The Ada code already knows how to handle these types, so all that
+     we need to do is turn the bounds into static bounds.  However, we
+     don't want to rewrite existing array or index types in-place,
+     because those may be referenced in other contexts where this
+     rewriting is undesirable.  */
+  struct type *new_ary_type
+    = rewrite_array_type (TYPE_TARGET_TYPE (type->field (0).type ()));
+  if (new_ary_type != nullptr)
+    type->field (0).set_type (lookup_pointer_type (new_ary_type));
+}
+
+/* If the DIE has a DW_AT_alignment attribute, return its value, doing
+   appropriate error checking and issuing complaints if there is a
+   problem.  */
+
+static ULONGEST
+get_alignment (struct dwarf2_cu *cu, struct die_info *die)
+{
+  struct attribute *attr = dwarf2_attr (die, DW_AT_alignment, cu);
+
+  if (attr == nullptr)
+    return 0;
+
+  if (!attr->form_is_constant ())
+    {
+      complaint (_("DW_AT_alignment must have constant form"
+		   " - DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return 0;
+    }
+
+  LONGEST val = attr->constant_value (0);
+  if (val < 0)
+    {
+      complaint (_("DW_AT_alignment value must not be negative"
+		   " - DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return 0;
+    }
+  ULONGEST align = val;
+
+  if (align == 0)
+    {
+      complaint (_("DW_AT_alignment value must not be zero"
+		   " - DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return 0;
+    }
+  if ((align & (align - 1)) != 0)
+    {
+      complaint (_("DW_AT_alignment value must be a power of 2"
+		   " - DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return 0;
+    }
+
+  return align;
+}
+
+/* If the DIE has a DW_AT_alignment attribute, use its value to set
+   the alignment for TYPE.  */
+
+static void
+maybe_set_alignment (struct dwarf2_cu *cu, struct die_info *die,
+		     struct type *type)
+{
+  if (!set_type_align (type, get_alignment (cu, die)))
+    complaint (_("DW_AT_alignment value too large"
+		 " - DIE at %s [in module %s]"),
+	       sect_offset_str (die->sect_off),
+	       objfile_name (cu->per_objfile->objfile));
+}
+
+/* Check if the given VALUE is a valid enum dwarf_calling_convention
+   constant for a type, according to DWARF5 spec, Table 5.5.  */
+
+static bool
+is_valid_DW_AT_calling_convention_for_type (ULONGEST value)
+{
+  switch (value)
+    {
+    case DW_CC_normal:
+    case DW_CC_pass_by_reference:
+    case DW_CC_pass_by_value:
+      return true;
+
+    default:
+      complaint (_("unrecognized DW_AT_calling_convention value "
+		   "(%s) for a type"), pulongest (value));
+      return false;
+    }
+}
+
+/* Check if the given VALUE is a valid enum dwarf_calling_convention
+   constant for a subroutine, according to DWARF5 spec, Table 3.3, and
+   also according to GNU-specific values (see include/dwarf2.h).  */
+
+static bool
+is_valid_DW_AT_calling_convention_for_subroutine (ULONGEST value)
+{
+  switch (value)
+    {
+    case DW_CC_normal:
+    case DW_CC_program:
+    case DW_CC_nocall:
+      return true;
+
+    case DW_CC_GNU_renesas_sh:
+    case DW_CC_GNU_borland_fastcall_i386:
+    case DW_CC_GDB_IBM_OpenCL:
+      return true;
+
+    default:
+      complaint (_("unrecognized DW_AT_calling_convention value "
+		   "(%s) for a subroutine"), pulongest (value));
+      return false;
+    }
+}
+
+/* Called when we find the DIE that starts a structure or union scope
+   (definition) to create a type for the structure or union.  Fill in
+   the type's name and general properties; the members will not be
+   processed until process_structure_scope.  A symbol table entry for
+   the type will also not be done until process_structure_scope (assuming
+   the type has a name).
+
+   NOTE: we need to call these functions regardless of whether or not the
+   DIE has a DW_AT_name attribute, since it might be an anonymous
+   structure or union.  This gets the type entered into our set of
+   user defined types.  */
+
+static struct type *
+read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct type *type;
+  struct attribute *attr;
+  const char *name;
+
+  /* If the definition of this type lives in .debug_types, read that type.
+     Don't follow DW_AT_specification though, that will take us back up
+     the chain and we want to go down.  */
+  attr = die->attr (DW_AT_signature);
+  if (attr != nullptr)
+    {
+      type = get_DW_AT_signature_type (die, attr, cu);
+
+      /* The type's CU may not be the same as CU.
+	 Ensure TYPE is recorded with CU in die_type_hash.  */
+      return set_die_type (die, type, cu);
+    }
+
+  type = alloc_type (objfile);
+  INIT_CPLUS_SPECIFIC (type);
+
+  name = dwarf2_name (die, cu);
+  if (name != NULL)
+    {
+      if (cu->per_cu->lang == language_cplus
+	  || cu->per_cu->lang == language_d
+	  || cu->per_cu->lang == language_rust)
+	{
+	  const char *full_name = dwarf2_full_name (name, die, cu);
+
+	  /* dwarf2_full_name might have already finished building the DIE's
+	     type.  If so, there is no need to continue.  */
+	  if (get_die_type (die, cu) != NULL)
+	    return get_die_type (die, cu);
+
+	  type->set_name (full_name);
+	}
+      else
+	{
+	  /* The name is already allocated along with this objfile, so
+	     we don't need to duplicate it for the type.  */
+	  type->set_name (name);
+	}
+    }
+
+  if (die->tag == DW_TAG_structure_type)
+    {
+      type->set_code (TYPE_CODE_STRUCT);
+    }
+  else if (die->tag == DW_TAG_union_type)
+    {
+      type->set_code (TYPE_CODE_UNION);
+    }
+  else
+    {
+      type->set_code (TYPE_CODE_STRUCT);
+    }
+
+  if (cu->per_cu->lang == language_cplus && die->tag == DW_TAG_class_type)
+    type->set_is_declared_class (true);
+
+  /* Store the calling convention in the type if it's available in
+     the die.  Otherwise the calling convention remains set to
+     the default value DW_CC_normal.  */
+  attr = dwarf2_attr (die, DW_AT_calling_convention, cu);
+  if (attr != nullptr
+      && is_valid_DW_AT_calling_convention_for_type (attr->constant_value (0)))
+    {
+      ALLOCATE_CPLUS_STRUCT_TYPE (type);
+      TYPE_CPLUS_CALLING_CONVENTION (type)
+	= (enum dwarf_calling_convention) (attr->constant_value (0));
+    }
+
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr)
+    {
+      if (attr->form_is_constant ())
+	TYPE_LENGTH (type) = attr->constant_value (0);
+      else
+	{
+	  struct dynamic_prop prop;
+	  if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type ()))
+	    type->add_dyn_prop (DYN_PROP_BYTE_SIZE, prop);
+	  TYPE_LENGTH (type) = 0;
+	}
+    }
+  else
+    {
+      TYPE_LENGTH (type) = 0;
+    }
+
+  maybe_set_alignment (cu, die, type);
+
+  if (producer_is_icc_lt_14 (cu) && (TYPE_LENGTH (type) == 0))
+    {
+      /* ICC<14 does not output the required DW_AT_declaration on
+	 incomplete types, but gives them a size of zero.  */
+      type->set_is_stub (true);
+    }
+  else
+    type->set_stub_is_supported (true);
+
+  if (die_is_declaration (die, cu))
+    type->set_is_stub (true);
+  else if (attr == NULL && die->child == NULL
+	   && producer_is_realview (cu->producer))
+    /* RealView does not output the required DW_AT_declaration
+       on incomplete types.  */
+    type->set_is_stub (true);
+
+  /* We need to add the type field to the die immediately so we don't
+     infinitely recurse when dealing with pointers to the structure
+     type within the structure itself.  */
+  set_die_type (die, type, cu);
+
+  /* set_die_type should be already done.  */
+  set_descriptive_type (type, die, cu);
+
+  return type;
+}
+
+static void handle_struct_member_die
+  (struct die_info *child_die,
+   struct type *type,
+   struct field_info *fi,
+   std::vector<struct symbol *> *template_args,
+   struct dwarf2_cu *cu);
+
+/* A helper for handle_struct_member_die that handles
+   DW_TAG_variant_part.  */
+
+static void
+handle_variant_part (struct die_info *die, struct type *type,
+		     struct field_info *fi,
+		     std::vector<struct symbol *> *template_args,
+		     struct dwarf2_cu *cu)
+{
+  variant_part_builder *new_part;
+  if (fi->current_variant_part == nullptr)
+    {
+      fi->variant_parts.emplace_back ();
+      new_part = &fi->variant_parts.back ();
+    }
+  else if (!fi->current_variant_part->processing_variant)
+    {
+      complaint (_("nested DW_TAG_variant_part seen "
+		   "- DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return;
+    }
+  else
+    {
+      variant_field &current = fi->current_variant_part->variants.back ();
+      current.variant_parts.emplace_back ();
+      new_part = &current.variant_parts.back ();
+    }
+
+  /* When we recurse, we want callees to add to this new variant
+     part.  */
+  scoped_restore save_current_variant_part
+    = make_scoped_restore (&fi->current_variant_part, new_part);
+
+  struct attribute *discr = dwarf2_attr (die, DW_AT_discr, cu);
+  if (discr == NULL)
+    {
+      /* It's a univariant form, an extension we support.  */
+    }
+  else if (discr->form_is_ref ())
+    {
+      struct dwarf2_cu *target_cu = cu;
+      struct die_info *target_die = follow_die_ref (die, discr, &target_cu);
+
+      new_part->discriminant_offset = target_die->sect_off;
+    }
+  else
+    {
+      complaint (_("DW_AT_discr does not have DIE reference form"
+		   " - DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+    }
+
+  for (die_info *child_die = die->child;
+       child_die != NULL;
+       child_die = child_die->sibling)
+    handle_struct_member_die (child_die, type, fi, template_args, cu);
+}
+
+/* A helper for handle_struct_member_die that handles
+   DW_TAG_variant.  */
+
+static void
+handle_variant (struct die_info *die, struct type *type,
+		struct field_info *fi,
+		std::vector<struct symbol *> *template_args,
+		struct dwarf2_cu *cu)
+{
+  if (fi->current_variant_part == nullptr)
+    {
+      complaint (_("saw DW_TAG_variant outside DW_TAG_variant_part "
+		   "- DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return;
+    }
+  if (fi->current_variant_part->processing_variant)
+    {
+      complaint (_("nested DW_TAG_variant seen "
+		   "- DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return;
+    }
+
+  scoped_restore save_processing_variant
+    = make_scoped_restore (&fi->current_variant_part->processing_variant,
+			   true);
+
+  fi->current_variant_part->variants.emplace_back ();
+  variant_field &variant = fi->current_variant_part->variants.back ();
+  variant.first_field = fi->fields.size ();
+
+  /* In a variant we want to get the discriminant and also add a
+     field for our sole member child.  */
+  struct attribute *discr = dwarf2_attr (die, DW_AT_discr_value, cu);
+  if (discr == nullptr || !discr->form_is_constant ())
+    {
+      discr = dwarf2_attr (die, DW_AT_discr_list, cu);
+      if (discr == nullptr || discr->as_block ()->size == 0)
+	variant.default_branch = true;
+      else
+	variant.discr_list_data = discr->as_block ();
+    }
+  else
+    variant.discriminant_value = discr->constant_value (0);
+
+  for (die_info *variant_child = die->child;
+       variant_child != NULL;
+       variant_child = variant_child->sibling)
+    handle_struct_member_die (variant_child, type, fi, template_args, cu);
+
+  variant.last_field = fi->fields.size ();
+}
+
+/* A helper for process_structure_scope that handles a single member
+   DIE.  */
+
+static void
+handle_struct_member_die (struct die_info *child_die, struct type *type,
+			  struct field_info *fi,
+			  std::vector<struct symbol *> *template_args,
+			  struct dwarf2_cu *cu)
+{
+  if (child_die->tag == DW_TAG_member
+      || child_die->tag == DW_TAG_variable)
+    {
+      /* NOTE: carlton/2002-11-05: A C++ static data member
+	 should be a DW_TAG_member that is a declaration, but
+	 all versions of G++ as of this writing (so through at
+	 least 3.2.1) incorrectly generate DW_TAG_variable
+	 tags for them instead.  */
+      dwarf2_add_field (fi, child_die, cu);
+    }
+  else if (child_die->tag == DW_TAG_subprogram)
+    {
+      /* Rust doesn't have member functions in the C++ sense.
+	 However, it does emit ordinary functions as children
+	 of a struct DIE.  */
+      if (cu->per_cu->lang == language_rust)
+	read_func_scope (child_die, cu);
+      else
+	{
+	  /* C++ member function.  */
+	  dwarf2_add_member_fn (fi, child_die, type, cu);
+	}
+    }
+  else if (child_die->tag == DW_TAG_inheritance)
+    {
+      /* C++ base class field.  */
+      dwarf2_add_field (fi, child_die, cu);
+    }
+  else if (type_can_define_types (child_die))
+    dwarf2_add_type_defn (fi, child_die, cu);
+  else if (child_die->tag == DW_TAG_template_type_param
+	   || child_die->tag == DW_TAG_template_value_param)
+    {
+      struct symbol *arg = new_symbol (child_die, NULL, cu);
+
+      if (arg != NULL)
+	template_args->push_back (arg);
+    }
+  else if (child_die->tag == DW_TAG_variant_part)
+    handle_variant_part (child_die, type, fi, template_args, cu);
+  else if (child_die->tag == DW_TAG_variant)
+    handle_variant (child_die, type, fi, template_args, cu);
+}
+
+/* Finish creating a structure or union type, including filling in
+   its members and creating a symbol for it.  */
+
+static void
+process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct die_info *child_die;
+  struct type *type;
+
+  type = get_die_type (die, cu);
+  if (type == NULL)
+    type = read_structure_type (die, cu);
+
+  bool has_template_parameters = false;
+  if (die->child != NULL && ! die_is_declaration (die, cu))
+    {
+      struct field_info fi;
+      std::vector<struct symbol *> template_args;
+
+      child_die = die->child;
+
+      while (child_die && child_die->tag)
+	{
+	  handle_struct_member_die (child_die, type, &fi, &template_args, cu);
+	  child_die = child_die->sibling;
+	}
+
+      /* Attach template arguments to type.  */
+      if (!template_args.empty ())
+	{
+	  has_template_parameters = true;
+	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
+	  TYPE_N_TEMPLATE_ARGUMENTS (type) = template_args.size ();
+	  TYPE_TEMPLATE_ARGUMENTS (type)
+	    = XOBNEWVEC (&objfile->objfile_obstack,
+			 struct symbol *,
+			 TYPE_N_TEMPLATE_ARGUMENTS (type));
+	  memcpy (TYPE_TEMPLATE_ARGUMENTS (type),
+		  template_args.data (),
+		  (TYPE_N_TEMPLATE_ARGUMENTS (type)
+		   * sizeof (struct symbol *)));
+	}
+
+      /* Attach fields and member functions to the type.  */
+      if (fi.nfields () > 0)
+	dwarf2_attach_fields_to_type (&fi, type, cu);
+      if (!fi.fnfieldlists.empty ())
+	{
+	  dwarf2_attach_fn_fields_to_type (&fi, type, cu);
+
+	  /* Get the type which refers to the base class (possibly this
+	     class itself) which contains the vtable pointer for the current
+	     class from the DW_AT_containing_type attribute.  This use of
+	     DW_AT_containing_type is a GNU extension.  */
+
+	  if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
+	    {
+	      struct type *t = die_containing_type (die, cu);
+
+	      set_type_vptr_basetype (type, t);
+	      if (type == t)
+		{
+		  int i;
+
+		  /* Our own class provides vtbl ptr.  */
+		  for (i = t->num_fields () - 1;
+		       i >= TYPE_N_BASECLASSES (t);
+		       --i)
+		    {
+		      const char *fieldname = TYPE_FIELD_NAME (t, i);
+
+		      if (is_vtable_name (fieldname, cu))
+			{
+			  set_type_vptr_fieldno (type, i);
+			  break;
+			}
+		    }
+
+		  /* Complain if virtual function table field not found.  */
+		  if (i < TYPE_N_BASECLASSES (t))
+		    complaint (_("virtual function table pointer "
+				 "not found when defining class '%s'"),
+			       type->name () ? type->name () : "");
+		}
+	      else
+		{
+		  set_type_vptr_fieldno (type, TYPE_VPTR_FIELDNO (t));
+		}
+	    }
+	  else if (cu->producer
+		   && startswith (cu->producer, "IBM(R) XL C/C++ Advanced Edition"))
+	    {
+	      /* The IBM XLC compiler does not provide direct indication
+		 of the containing type, but the vtable pointer is
+		 always named __vfp.  */
+
+	      int i;
+
+	      for (i = type->num_fields () - 1;
+		   i >= TYPE_N_BASECLASSES (type);
+		   --i)
+		{
+		  if (strcmp (TYPE_FIELD_NAME (type, i), "__vfp") == 0)
+		    {
+		      set_type_vptr_fieldno (type, i);
+		      set_type_vptr_basetype (type, type);
+		      break;
+		    }
+		}
+	    }
+	}
+
+      /* Copy fi.typedef_field_list linked list elements content into the
+	 allocated array TYPE_TYPEDEF_FIELD_ARRAY (type).  */
+      if (!fi.typedef_field_list.empty ())
+	{
+	  int count = fi.typedef_field_list.size ();
+
+	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
+	  TYPE_TYPEDEF_FIELD_ARRAY (type)
+	    = ((struct decl_field *)
+	       TYPE_ALLOC (type,
+			   sizeof (TYPE_TYPEDEF_FIELD (type, 0)) * count));
+	  TYPE_TYPEDEF_FIELD_COUNT (type) = count;
+
+	  for (int i = 0; i < fi.typedef_field_list.size (); ++i)
+	    TYPE_TYPEDEF_FIELD (type, i) = fi.typedef_field_list[i];
+	}
+
+      /* Copy fi.nested_types_list linked list elements content into the
+	 allocated array TYPE_NESTED_TYPES_ARRAY (type).  */
+      if (!fi.nested_types_list.empty ()
+	  && cu->per_cu->lang != language_ada)
+	{
+	  int count = fi.nested_types_list.size ();
+
+	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
+	  TYPE_NESTED_TYPES_ARRAY (type)
+	    = ((struct decl_field *)
+	       TYPE_ALLOC (type, sizeof (struct decl_field) * count));
+	  TYPE_NESTED_TYPES_COUNT (type) = count;
+
+	  for (int i = 0; i < fi.nested_types_list.size (); ++i)
+	    TYPE_NESTED_TYPES_FIELD (type, i) = fi.nested_types_list[i];
+	}
+    }
+
+  quirk_gcc_member_function_pointer (type, objfile);
+  if (cu->per_cu->lang == language_rust && die->tag == DW_TAG_union_type)
+    cu->rust_unions.push_back (type);
+  else if (cu->per_cu->lang == language_ada)
+    quirk_ada_thick_pointer_struct (die, cu, type);
+
+  /* NOTE: carlton/2004-03-16: GCC 3.4 (or at least one of its
+     snapshots) has been known to create a die giving a declaration
+     for a class that has, as a child, a die giving a definition for a
+     nested class.  So we have to process our children even if the
+     current die is a declaration.  Normally, of course, a declaration
+     won't have any children at all.  */
+
+  child_die = die->child;
+
+  while (child_die != NULL && child_die->tag)
+    {
+      if (child_die->tag == DW_TAG_member
+	  || child_die->tag == DW_TAG_variable
+	  || child_die->tag == DW_TAG_inheritance
+	  || child_die->tag == DW_TAG_template_value_param
+	  || child_die->tag == DW_TAG_template_type_param)
+	{
+	  /* Do nothing.  */
+	}
+      else
+	process_die (child_die, cu);
+
+      child_die = child_die->sibling;
+    }
+
+  /* Do not consider external references.  According to the DWARF standard,
+     these DIEs are identified by the fact that they have no byte_size
+     attribute, and a declaration attribute.  */
+  if (dwarf2_attr (die, DW_AT_byte_size, cu) != NULL
+      || !die_is_declaration (die, cu)
+      || dwarf2_attr (die, DW_AT_signature, cu) != NULL)
+    {
+      struct symbol *sym = new_symbol (die, type, cu);
+
+      if (has_template_parameters)
+	{
+	  struct symtab *symtab;
+	  if (sym != nullptr)
+	    symtab = symbol_symtab (sym);
+	  else if (cu->line_header != nullptr)
+	    {
+	      /* Any related symtab will do.  */
+	      symtab
+		= cu->line_header->file_names ()[0].symtab;
+	    }
+	  else
+	    {
+	      symtab = nullptr;
+	      complaint (_("could not find suitable "
+			   "symtab for template parameter"
+			   " - DIE at %s [in module %s]"),
+			 sect_offset_str (die->sect_off),
+			 objfile_name (objfile));
+	    }
+
+	  if (symtab != nullptr)
+	    {
+	      /* Make sure that the symtab is set on the new symbols.
+		 Even though they don't appear in this symtab directly,
+		 other parts of gdb assume that symbols do, and this is
+		 reasonably true.  */
+	      for (int i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i)
+		symbol_set_symtab (TYPE_TEMPLATE_ARGUMENT (type, i), symtab);
+	    }
+	}
+    }
+}
+
+/* Assuming DIE is an enumeration type, and TYPE is its associated
+   type, update TYPE using some information only available in DIE's
+   children.  In particular, the fields are computed.  */
+
+static void
+update_enumeration_type_from_children (struct die_info *die,
+				       struct type *type,
+				       struct dwarf2_cu *cu)
+{
+  struct die_info *child_die;
+  int unsigned_enum = 1;
+  int flag_enum = 1;
+
+  auto_obstack obstack;
+  std::vector<struct field> fields;
+
+  for (child_die = die->child;
+       child_die != NULL && child_die->tag;
+       child_die = child_die->sibling)
+    {
+      struct attribute *attr;
+      LONGEST value;
+      const gdb_byte *bytes;
+      struct dwarf2_locexpr_baton *baton;
+      const char *name;
+
+      if (child_die->tag != DW_TAG_enumerator)
+	continue;
+
+      attr = dwarf2_attr (child_die, DW_AT_const_value, cu);
+      if (attr == NULL)
+	continue;
+
+      name = dwarf2_name (child_die, cu);
+      if (name == NULL)
+	name = "<anonymous enumerator>";
+
+      dwarf2_const_value_attr (attr, type, name, &obstack, cu,
+			       &value, &bytes, &baton);
+      if (value < 0)
+	{
+	  unsigned_enum = 0;
+	  flag_enum = 0;
+	}
+      else
+	{
+	  if (count_one_bits_ll (value) >= 2)
+	    flag_enum = 0;
+	}
+
+      fields.emplace_back ();
+      struct field &field = fields.back ();
+      FIELD_NAME (field) = dwarf2_physname (name, child_die, cu);
+      SET_FIELD_ENUMVAL (field, value);
+    }
+
+  if (!fields.empty ())
+    {
+      type->set_num_fields (fields.size ());
+      type->set_fields
+	((struct field *)
+	 TYPE_ALLOC (type, sizeof (struct field) * fields.size ()));
+      memcpy (type->fields (), fields.data (),
+	      sizeof (struct field) * fields.size ());
+    }
+
+  if (unsigned_enum)
+    type->set_is_unsigned (true);
+
+  if (flag_enum)
+    type->set_is_flag_enum (true);
+}
+
+/* Given a DW_AT_enumeration_type die, set its type.  We do not
+   complete the type's fields yet, or create any symbols.  */
+
+static struct type *
+read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct type *type;
+  struct attribute *attr;
+  const char *name;
+
+  /* If the definition of this type lives in .debug_types, read that type.
+     Don't follow DW_AT_specification though, that will take us back up
+     the chain and we want to go down.  */
+  attr = die->attr (DW_AT_signature);
+  if (attr != nullptr)
+    {
+      type = get_DW_AT_signature_type (die, attr, cu);
+
+      /* The type's CU may not be the same as CU.
+	 Ensure TYPE is recorded with CU in die_type_hash.  */
+      return set_die_type (die, type, cu);
+    }
+
+  type = alloc_type (objfile);
+
+  type->set_code (TYPE_CODE_ENUM);
+  name = dwarf2_full_name (NULL, die, cu);
+  if (name != NULL)
+    type->set_name (name);
+
+  attr = dwarf2_attr (die, DW_AT_type, cu);
+  if (attr != NULL)
+    {
+      struct type *underlying_type = die_type (die, cu);
+
+      TYPE_TARGET_TYPE (type) = underlying_type;
+    }
+
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr)
+    {
+      TYPE_LENGTH (type) = attr->constant_value (0);
+    }
+  else
+    {
+      TYPE_LENGTH (type) = 0;
+    }
+
+  maybe_set_alignment (cu, die, type);
+
+  /* The enumeration DIE can be incomplete.  In Ada, any type can be
+     declared as private in the package spec, and then defined only
+     inside the package body.  Such types are known as Taft Amendment
+     Types.  When another package uses such a type, an incomplete DIE
+     may be generated by the compiler.  */
+  if (die_is_declaration (die, cu))
+    type->set_is_stub (true);
+
+  /* If this type has an underlying type that is not a stub, then we
+     may use its attributes.  We always use the "unsigned" attribute
+     in this situation, because ordinarily we guess whether the type
+     is unsigned -- but the guess can be wrong and the underlying type
+     can tell us the reality.  However, we defer to a local size
+     attribute if one exists, because this lets the compiler override
+     the underlying type if needed.  */
+  if (TYPE_TARGET_TYPE (type) != NULL && !TYPE_TARGET_TYPE (type)->is_stub ())
+    {
+      struct type *underlying_type = TYPE_TARGET_TYPE (type);
+      underlying_type = check_typedef (underlying_type);
+
+      type->set_is_unsigned (underlying_type->is_unsigned ());
+
+      if (TYPE_LENGTH (type) == 0)
+	TYPE_LENGTH (type) = TYPE_LENGTH (underlying_type);
+
+      if (TYPE_RAW_ALIGN (type) == 0
+	  && TYPE_RAW_ALIGN (underlying_type) != 0)
+	set_type_align (type, TYPE_RAW_ALIGN (underlying_type));
+    }
+
+  type->set_is_declared_class (dwarf2_flag_true_p (die, DW_AT_enum_class, cu));
+
+  set_die_type (die, type, cu);
+
+  /* Finish the creation of this type by using the enum's children.
+     Note that, as usual, this must come after set_die_type to avoid
+     infinite recursion when trying to compute the names of the
+     enumerators.  */
+  update_enumeration_type_from_children (die, type, cu);
+
+  return type;
+}
+
+/* Given a pointer to a die which begins an enumeration, process all
+   the dies that define the members of the enumeration, and create the
+   symbol for the enumeration type.
+
+   NOTE: We reverse the order of the element list.  */
+
+static void
+process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *this_type;
+
+  this_type = get_die_type (die, cu);
+  if (this_type == NULL)
+    this_type = read_enumeration_type (die, cu);
+
+  if (die->child != NULL)
+    {
+      struct die_info *child_die;
+      const char *name;
+
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  if (child_die->tag != DW_TAG_enumerator)
+	    {
+	      process_die (child_die, cu);
+	    }
+	  else
+	    {
+	      name = dwarf2_name (child_die, cu);
+	      if (name)
+		new_symbol (child_die, this_type, cu);
+	    }
+
+	  child_die = child_die->sibling;
+	}
+    }
+
+  /* If we are reading an enum from a .debug_types unit, and the enum
+     is a declaration, and the enum is not the signatured type in the
+     unit, then we do not want to add a symbol for it.  Adding a
+     symbol would in some cases obscure the true definition of the
+     enum, giving users an incomplete type when the definition is
+     actually available.  Note that we do not want to do this for all
+     enums which are just declarations, because C++0x allows forward
+     enum declarations.  */
+  if (cu->per_cu->is_debug_types
+      && die_is_declaration (die, cu))
+    {
+      struct signatured_type *sig_type;
+
+      sig_type = (struct signatured_type *) cu->per_cu;
+      gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0);
+      if (sig_type->type_offset_in_section != die->sect_off)
+	return;
+    }
+
+  new_symbol (die, this_type, cu);
+}
+
+/* Helper function for quirk_ada_thick_pointer that examines a bounds
+   expression for an index type and finds the corresponding field
+   offset in the hidden "P_BOUNDS" structure.  Returns true on success
+   and updates *FIELD, false if it fails to recognize an
+   expression.  */
+
+static bool
+recognize_bound_expression (struct die_info *die, enum dwarf_attribute name,
+			    int *bounds_offset, struct field *field,
+			    struct dwarf2_cu *cu)
+{
+  struct attribute *attr = dwarf2_attr (die, name, cu);
+  if (attr == nullptr || !attr->form_is_block ())
+    return false;
+
+  const struct dwarf_block *block = attr->as_block ();
+  const gdb_byte *start = block->data;
+  const gdb_byte *end = block->data + block->size;
+
+  /* The expression to recognize generally looks like:
+
+     (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref;
+     DW_OP_plus_uconst: 4; DW_OP_deref_size: 4)
+
+     However, the second "plus_uconst" may be missing:
+
+     (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref;
+     DW_OP_deref_size: 4)
+
+     This happens when the field is at the start of the structure.
+
+     Also, the final deref may not be sized:
+
+     (DW_OP_push_object_address; DW_OP_plus_uconst: 4; DW_OP_deref;
+     DW_OP_deref)
+
+     This happens when the size of the index type happens to be the
+     same as the architecture's word size.  This can occur with or
+     without the second plus_uconst.  */
+
+  if (end - start < 2)
+    return false;
+  if (*start++ != DW_OP_push_object_address)
+    return false;
+  if (*start++ != DW_OP_plus_uconst)
+    return false;
+
+  uint64_t this_bound_off;
+  start = gdb_read_uleb128 (start, end, &this_bound_off);
+  if (start == nullptr || (int) this_bound_off != this_bound_off)
+    return false;
+  /* Update *BOUNDS_OFFSET if needed, or alternatively verify that it
+     is consistent among all bounds.  */
+  if (*bounds_offset == -1)
+    *bounds_offset = this_bound_off;
+  else if (*bounds_offset != this_bound_off)
+    return false;
+
+  if (start == end || *start++ != DW_OP_deref)
+    return false;
+
+  int offset = 0;
+  if (start ==end)
+    return false;
+  else if (*start == DW_OP_deref_size || *start == DW_OP_deref)
+    {
+      /* This means an offset of 0.  */
+    }
+  else if (*start++ != DW_OP_plus_uconst)
+    return false;
+  else
+    {
+      /* The size is the parameter to DW_OP_plus_uconst.  */
+      uint64_t val;
+      start = gdb_read_uleb128 (start, end, &val);
+      if (start == nullptr)
+	return false;
+      if ((int) val != val)
+	return false;
+      offset = val;
+    }
+
+  if (start == end)
+    return false;
+
+  uint64_t size;
+  if (*start == DW_OP_deref_size)
+    {
+      start = gdb_read_uleb128 (start + 1, end, &size);
+      if (start == nullptr)
+	return false;
+    }
+  else if (*start == DW_OP_deref)
+    {
+      size = cu->header.addr_size;
+      ++start;
+    }
+  else
+    return false;
+
+  SET_FIELD_BITPOS (*field, 8 * offset);
+  if (size != TYPE_LENGTH (field->type ()))
+    FIELD_BITSIZE (*field) = 8 * size;
+
+  return true;
+}
+
+/* With -fgnat-encodings=minimal, gcc will emit some unusual DWARF for
+   some kinds of Ada arrays:
+
+   <1><11db>: Abbrev Number: 7 (DW_TAG_array_type)
+      <11dc>   DW_AT_name        : (indirect string, offset: 0x1bb8): string
+      <11e0>   DW_AT_data_location: 2 byte block: 97 6
+	  (DW_OP_push_object_address; DW_OP_deref)
+      <11e3>   DW_AT_type        : <0x1173>
+      <11e7>   DW_AT_sibling     : <0x1201>
+   <2><11eb>: Abbrev Number: 8 (DW_TAG_subrange_type)
+      <11ec>   DW_AT_type        : <0x1206>
+      <11f0>   DW_AT_lower_bound : 6 byte block: 97 23 8 6 94 4
+	  (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref;
+	   DW_OP_deref_size: 4)
+      <11f7>   DW_AT_upper_bound : 8 byte block: 97 23 8 6 23 4 94 4
+	  (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref;
+	   DW_OP_plus_uconst: 4; DW_OP_deref_size: 4)
+
+   This actually represents a "thick pointer", which is a structure
+   with two elements: one that is a pointer to the array data, and one
+   that is a pointer to another structure; this second structure holds
+   the array bounds.
+
+   This returns a new type on success, or nullptr if this didn't
+   recognize the type.  */
+
+static struct type *
+quirk_ada_thick_pointer (struct die_info *die, struct dwarf2_cu *cu,
+			 struct type *type)
+{
+  struct attribute *attr = dwarf2_attr (die, DW_AT_data_location, cu);
+  /* So far we've only seen this with block form.  */
+  if (attr == nullptr || !attr->form_is_block ())
+    return nullptr;
+
+  /* Note that this will fail if the structure layout is changed by
+     the compiler.  However, we have no good way to recognize some
+     other layout, because we don't know what expression the compiler
+     might choose to emit should this happen.  */
+  struct dwarf_block *blk = attr->as_block ();
+  if (blk->size != 2
+      || blk->data[0] != DW_OP_push_object_address
+      || blk->data[1] != DW_OP_deref)
+    return nullptr;
+
+  int bounds_offset = -1;
+  int max_align = -1;
+  std::vector<struct field> range_fields;
+  for (struct die_info *child_die = die->child;
+       child_die;
+       child_die = child_die->sibling)
+    {
+      if (child_die->tag == DW_TAG_subrange_type)
+	{
+	  struct type *underlying = read_subrange_index_type (child_die, cu);
+
+	  int this_align = type_align (underlying);
+	  if (this_align > max_align)
+	    max_align = this_align;
+
+	  range_fields.emplace_back ();
+	  range_fields.emplace_back ();
+
+	  struct field &lower = range_fields[range_fields.size () - 2];
+	  struct field &upper = range_fields[range_fields.size () - 1];
+
+	  lower.set_type (underlying);
+	  FIELD_ARTIFICIAL (lower) = 1;
+
+	  upper.set_type (underlying);
+	  FIELD_ARTIFICIAL (upper) = 1;
+
+	  if (!recognize_bound_expression (child_die, DW_AT_lower_bound,
+					   &bounds_offset, &lower, cu)
+	      || !recognize_bound_expression (child_die, DW_AT_upper_bound,
+					      &bounds_offset, &upper, cu))
+	    return nullptr;
+	}
+    }
+
+  /* This shouldn't really happen, but double-check that we found
+     where the bounds are stored.  */
+  if (bounds_offset == -1)
+    return nullptr;
+
+  struct objfile *objfile = cu->per_objfile->objfile;
+  for (int i = 0; i < range_fields.size (); i += 2)
+    {
+      char name[20];
+
+      /* Set the name of each field in the bounds.  */
+      xsnprintf (name, sizeof (name), "LB%d", i / 2);
+      FIELD_NAME (range_fields[i]) = objfile->intern (name);
+      xsnprintf (name, sizeof (name), "UB%d", i / 2);
+      FIELD_NAME (range_fields[i + 1]) = objfile->intern (name);
+    }
+
+  struct type *bounds = alloc_type (objfile);
+  bounds->set_code (TYPE_CODE_STRUCT);
+
+  bounds->set_num_fields (range_fields.size ());
+  bounds->set_fields
+    ((struct field *) TYPE_ALLOC (bounds, (bounds->num_fields ()
+					   * sizeof (struct field))));
+  memcpy (bounds->fields (), range_fields.data (),
+	  bounds->num_fields () * sizeof (struct field));
+
+  int last_fieldno = range_fields.size () - 1;
+  int bounds_size = (TYPE_FIELD_BITPOS (bounds, last_fieldno) / 8
+		     + TYPE_LENGTH (bounds->field (last_fieldno).type ()));
+  TYPE_LENGTH (bounds) = align_up (bounds_size, max_align);
+
+  /* Rewrite the existing array type in place.  Specifically, we
+     remove any dynamic properties we might have read, and we replace
+     the index types.  */
+  struct type *iter = type;
+  for (int i = 0; i < range_fields.size (); i += 2)
+    {
+      gdb_assert (iter->code () == TYPE_CODE_ARRAY);
+      iter->main_type->dyn_prop_list = nullptr;
+      iter->set_index_type
+	(create_static_range_type (NULL, bounds->field (i).type (), 1, 0));
+      iter = TYPE_TARGET_TYPE (iter);
+    }
+
+  struct type *result = alloc_type (objfile);
+  result->set_code (TYPE_CODE_STRUCT);
+
+  result->set_num_fields (2);
+  result->set_fields
+    ((struct field *) TYPE_ZALLOC (result, (result->num_fields ()
+					    * sizeof (struct field))));
+
+  /* The names are chosen to coincide with what the compiler does with
+     -fgnat-encodings=all, which the Ada code in gdb already
+     understands.  */
+  TYPE_FIELD_NAME (result, 0) = "P_ARRAY";
+  result->field (0).set_type (lookup_pointer_type (type));
+
+  TYPE_FIELD_NAME (result, 1) = "P_BOUNDS";
+  result->field (1).set_type (lookup_pointer_type (bounds));
+  SET_FIELD_BITPOS (result->field (1), 8 * bounds_offset);
+
+  result->set_name (type->name ());
+  TYPE_LENGTH (result) = (TYPE_LENGTH (result->field (0).type ())
+			  + TYPE_LENGTH (result->field (1).type ()));
+
+  return result;
+}
+
+/* Extract all information from a DW_TAG_array_type DIE and put it in
+   the DIE's type field.  For now, this only handles one dimensional
+   arrays.  */
+
+static struct type *
+read_array_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct die_info *child_die;
+  struct type *type;
+  struct type *element_type, *range_type, *index_type;
+  struct attribute *attr;
+  const char *name;
+  struct dynamic_prop *byte_stride_prop = NULL;
+  unsigned int bit_stride = 0;
+
+  element_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  type = get_die_type (die, cu);
+  if (type)
+    return type;
+
+  attr = dwarf2_attr (die, DW_AT_byte_stride, cu);
+  if (attr != NULL)
+    {
+      int stride_ok;
+      struct type *prop_type = cu->addr_sized_int_type (false);
+
+      byte_stride_prop
+	= (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop));
+      stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop,
+					prop_type);
+      if (!stride_ok)
+	{
+	  complaint (_("unable to read array DW_AT_byte_stride "
+		       " - DIE at %s [in module %s]"),
+		     sect_offset_str (die->sect_off),
+		     objfile_name (cu->per_objfile->objfile));
+	  /* Ignore this attribute.  We will likely not be able to print
+	     arrays of this type correctly, but there is little we can do
+	     to help if we cannot read the attribute's value.  */
+	  byte_stride_prop = NULL;
+	}
+    }
+
+  attr = dwarf2_attr (die, DW_AT_bit_stride, cu);
+  if (attr != NULL)
+    bit_stride = attr->constant_value (0);
+
+  /* Irix 6.2 native cc creates array types without children for
+     arrays with unspecified length.  */
+  if (die->child == NULL)
+    {
+      index_type = objfile_type (objfile)->builtin_int;
+      range_type = create_static_range_type (NULL, index_type, 0, -1);
+      type = create_array_type_with_stride (NULL, element_type, range_type,
+					    byte_stride_prop, bit_stride);
+      return set_die_type (die, type, cu);
+    }
+
+  std::vector<struct type *> range_types;
+  child_die = die->child;
+  while (child_die && child_die->tag)
+    {
+      if (child_die->tag == DW_TAG_subrange_type)
+	{
+	  struct type *child_type = read_type_die (child_die, cu);
+
+	  if (child_type != NULL)
+	    {
+	      /* The range type was succesfully read.  Save it for the
+		 array type creation.  */
+	      range_types.push_back (child_type);
+	    }
+	}
+      child_die = child_die->sibling;
+    }
+
+  if (range_types.empty ())
+    {
+      complaint (_("unable to find array range - DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off),
+		 objfile_name (cu->per_objfile->objfile));
+      return NULL;
+    }
+
+  /* Dwarf2 dimensions are output from left to right, create the
+     necessary array types in backwards order.  */
+
+  type = element_type;
+
+  if (read_array_order (die, cu) == DW_ORD_col_major)
+    {
+      int i = 0;
+
+      while (i < range_types.size ())
+	{
+	  type = create_array_type_with_stride (NULL, type, range_types[i++],
+						byte_stride_prop, bit_stride);
+	  bit_stride = 0;
+	  byte_stride_prop = nullptr;
+	}
+    }
+  else
+    {
+      size_t ndim = range_types.size ();
+      while (ndim-- > 0)
+	{
+	  type = create_array_type_with_stride (NULL, type, range_types[ndim],
+						byte_stride_prop, bit_stride);
+	  bit_stride = 0;
+	  byte_stride_prop = nullptr;
+	}
+    }
+
+  gdb_assert (type != element_type);
+
+  /* Understand Dwarf2 support for vector types (like they occur on
+     the PowerPC w/ AltiVec).  Gcc just adds another attribute to the
+     array type.  This is not part of the Dwarf2/3 standard yet, but a
+     custom vendor extension.  The main difference between a regular
+     array and the vector variant is that vectors are passed by value
+     to functions.  */
+  attr = dwarf2_attr (die, DW_AT_GNU_vector, cu);
+  if (attr != nullptr)
+    make_vector_type (type);
+
+  /* The DIE may have DW_AT_byte_size set.  For example an OpenCL
+     implementation may choose to implement triple vectors using this
+     attribute.  */
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr && attr->form_is_unsigned ())
+    {
+      if (attr->as_unsigned () >= TYPE_LENGTH (type))
+	TYPE_LENGTH (type) = attr->as_unsigned ();
+      else
+	complaint (_("DW_AT_byte_size for array type smaller "
+		     "than the total size of elements"));
+    }
+
+  name = dwarf2_name (die, cu);
+  if (name)
+    type->set_name (name);
+
+  maybe_set_alignment (cu, die, type);
+
+  struct type *replacement_type = nullptr;
+  if (cu->per_cu->lang == language_ada)
+    {
+      replacement_type = quirk_ada_thick_pointer (die, cu, type);
+      if (replacement_type != nullptr)
+	type = replacement_type;
+    }
+
+  /* Install the type in the die.  */
+  set_die_type (die, type, cu, replacement_type != nullptr);
+
+  /* set_die_type should be already done.  */
+  set_descriptive_type (type, die, cu);
+
+  return type;
+}
+
+static enum dwarf_array_dim_ordering
+read_array_order (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_ordering, cu);
+
+  if (attr != nullptr)
+    {
+      LONGEST val = attr->constant_value (-1);
+      if (val == DW_ORD_row_major || val == DW_ORD_col_major)
+	return (enum dwarf_array_dim_ordering) val;
+    }
+
+  /* GNU F77 is a special case, as at 08/2004 array type info is the
+     opposite order to the dwarf2 specification, but data is still
+     laid out as per normal fortran.
+
+     FIXME: dsl/2004-8-20: If G77 is ever fixed, this will also need
+     version checking.  */
+
+  if (cu->per_cu->lang == language_fortran
+      && cu->producer && strstr (cu->producer, "GNU F77"))
+    {
+      return DW_ORD_row_major;
+    }
+
+  switch (cu->language_defn->array_ordering ())
+    {
+    case array_column_major:
+      return DW_ORD_col_major;
+    case array_row_major:
+    default:
+      return DW_ORD_row_major;
+    };
+}
+
+/* Extract all information from a DW_TAG_set_type DIE and put it in
+   the DIE's type field.  */
+
+static struct type *
+read_set_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *domain_type, *set_type;
+  struct attribute *attr;
+
+  domain_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  set_type = get_die_type (die, cu);
+  if (set_type)
+    return set_type;
+
+  set_type = create_set_type (NULL, domain_type);
+
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr && attr->form_is_unsigned ())
+    TYPE_LENGTH (set_type) = attr->as_unsigned ();
+
+  maybe_set_alignment (cu, die, set_type);
+
+  return set_die_type (die, set_type, cu);
+}
+
+/* A helper for read_common_block that creates a locexpr baton.
+   SYM is the symbol which we are marking as computed.
+   COMMON_DIE is the DIE for the common block.
+   COMMON_LOC is the location expression attribute for the common
+   block itself.
+   MEMBER_LOC is the location expression attribute for the particular
+   member of the common block that we are processing.
+   CU is the CU from which the above come.  */
+
+static void
+mark_common_block_symbol_computed (struct symbol *sym,
+				   struct die_info *common_die,
+				   struct attribute *common_loc,
+				   struct attribute *member_loc,
+				   struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct dwarf2_locexpr_baton *baton;
+  gdb_byte *ptr;
+  unsigned int cu_off;
+  enum bfd_endian byte_order = gdbarch_byte_order (objfile->arch ());
+  LONGEST offset = 0;
+
+  gdb_assert (common_loc && member_loc);
+  gdb_assert (common_loc->form_is_block ());
+  gdb_assert (member_loc->form_is_block ()
+	      || member_loc->form_is_constant ());
+
+  baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton);
+  baton->per_objfile = per_objfile;
+  baton->per_cu = cu->per_cu;
+  gdb_assert (baton->per_cu);
+
+  baton->size = 5 /* DW_OP_call4 */ + 1 /* DW_OP_plus */;
+
+  if (member_loc->form_is_constant ())
+    {
+      offset = member_loc->constant_value (0);
+      baton->size += 1 /* DW_OP_addr */ + cu->header.addr_size;
+    }
+  else
+    baton->size += member_loc->as_block ()->size;
+
+  ptr = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, baton->size);
+  baton->data = ptr;
+
+  *ptr++ = DW_OP_call4;
+  cu_off = common_die->sect_off - cu->per_cu->sect_off;
+  store_unsigned_integer (ptr, 4, byte_order, cu_off);
+  ptr += 4;
+
+  if (member_loc->form_is_constant ())
+    {
+      *ptr++ = DW_OP_addr;
+      store_unsigned_integer (ptr, cu->header.addr_size, byte_order, offset);
+      ptr += cu->header.addr_size;
+    }
+  else
+    {
+      /* We have to copy the data here, because DW_OP_call4 will only
+	 use a DW_AT_location attribute.  */
+      struct dwarf_block *block = member_loc->as_block ();
+      memcpy (ptr, block->data, block->size);
+      ptr += block->size;
+    }
+
+  *ptr++ = DW_OP_plus;
+  gdb_assert (ptr - baton->data == baton->size);
+
+  SYMBOL_LOCATION_BATON (sym) = baton;
+  SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index;
+}
+
+/* Create appropriate locally-scoped variables for all the
+   DW_TAG_common_block entries.  Also create a struct common_block
+   listing all such variables for `info common'.  COMMON_BLOCK_DOMAIN
+   is used to separate the common blocks name namespace from regular
+   variable names.  */
+
+static void
+read_common_block (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_location, cu);
+  if (attr != nullptr)
+    {
+      /* Support the .debug_loc offsets.  */
+      if (attr->form_is_block ())
+	{
+	  /* Ok.  */
+	}
+      else if (attr->form_is_section_offset ())
+	{
+	  dwarf2_complex_location_expr_complaint ();
+	  attr = NULL;
+	}
+      else
+	{
+	  dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
+						 "common block member");
+	  attr = NULL;
+	}
+    }
+
+  if (die->child != NULL)
+    {
+      struct objfile *objfile = cu->per_objfile->objfile;
+      struct die_info *child_die;
+      size_t n_entries = 0, size;
+      struct common_block *common_block;
+      struct symbol *sym;
+
+      for (child_die = die->child;
+	   child_die && child_die->tag;
+	   child_die = child_die->sibling)
+	++n_entries;
+
+      size = (sizeof (struct common_block)
+	      + (n_entries - 1) * sizeof (struct symbol *));
+      common_block
+	= (struct common_block *) obstack_alloc (&objfile->objfile_obstack,
+						 size);
+      memset (common_block->contents, 0, n_entries * sizeof (struct symbol *));
+      common_block->n_entries = 0;
+
+      for (child_die = die->child;
+	   child_die && child_die->tag;
+	   child_die = child_die->sibling)
+	{
+	  /* Create the symbol in the DW_TAG_common_block block in the current
+	     symbol scope.  */
+	  sym = new_symbol (child_die, NULL, cu);
+	  if (sym != NULL)
+	    {
+	      struct attribute *member_loc;
+
+	      common_block->contents[common_block->n_entries++] = sym;
+
+	      member_loc = dwarf2_attr (child_die, DW_AT_data_member_location,
+					cu);
+	      if (member_loc)
+		{
+		  /* GDB has handled this for a long time, but it is
+		     not specified by DWARF.  It seems to have been
+		     emitted by gfortran at least as recently as:
+		     http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057.  */
+		  complaint (_("Variable in common block has "
+			       "DW_AT_data_member_location "
+			       "- DIE at %s [in module %s]"),
+			       sect_offset_str (child_die->sect_off),
+			     objfile_name (objfile));
+
+		  if (member_loc->form_is_section_offset ())
+		    dwarf2_complex_location_expr_complaint ();
+		  else if (member_loc->form_is_constant ()
+			   || member_loc->form_is_block ())
+		    {
+		      if (attr != nullptr)
+			mark_common_block_symbol_computed (sym, die, attr,
+							   member_loc, cu);
+		    }
+		  else
+		    dwarf2_complex_location_expr_complaint ();
+		}
+	    }
+	}
+
+      sym = new_symbol (die, objfile_type (objfile)->builtin_void, cu);
+      SYMBOL_VALUE_COMMON_BLOCK (sym) = common_block;
+    }
+}
+
+/* Create a type for a C++ namespace.  */
+
+static struct type *
+read_namespace_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  const char *previous_prefix, *name;
+  int is_anonymous;
+  struct type *type;
+
+  /* For extensions, reuse the type of the original namespace.  */
+  if (dwarf2_attr (die, DW_AT_extension, cu) != NULL)
+    {
+      struct die_info *ext_die;
+      struct dwarf2_cu *ext_cu = cu;
+
+      ext_die = dwarf2_extension (die, &ext_cu);
+      type = read_type_die (ext_die, ext_cu);
+
+      /* EXT_CU may not be the same as CU.
+	 Ensure TYPE is recorded with CU in die_type_hash.  */
+      return set_die_type (die, type, cu);
+    }
+
+  name = namespace_name (die, &is_anonymous, cu);
+
+  /* Now build the name of the current namespace.  */
+
+  previous_prefix = determine_prefix (die, cu);
+  if (previous_prefix[0] != '\0')
+    name = typename_concat (&objfile->objfile_obstack,
+			    previous_prefix, name, 0, cu);
+
+  /* Create the type.  */
+  type = init_type (objfile, TYPE_CODE_NAMESPACE, 0, name);
+
+  return set_die_type (die, type, cu);
+}
+
+/* Read a namespace scope.  */
+
+static void
+read_namespace (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  int is_anonymous;
+
+  /* Add a symbol associated to this if we haven't seen the namespace
+     before.  Also, add a using directive if it's an anonymous
+     namespace.  */
+
+  if (dwarf2_attr (die, DW_AT_extension, cu) == NULL)
+    {
+      struct type *type;
+
+      type = read_type_die (die, cu);
+      new_symbol (die, type, cu);
+
+      namespace_name (die, &is_anonymous, cu);
+      if (is_anonymous)
+	{
+	  const char *previous_prefix = determine_prefix (die, cu);
+
+	  std::vector<const char *> excludes;
+	  add_using_directive (using_directives (cu),
+			       previous_prefix, type->name (), NULL,
+			       NULL, excludes, 0, &objfile->objfile_obstack);
+	}
+    }
+
+  if (die->child != NULL)
+    {
+      struct die_info *child_die = die->child;
+
+      while (child_die && child_die->tag)
+	{
+	  process_die (child_die, cu);
+	  child_die = child_die->sibling;
+	}
+    }
+}
+
+/* Read a Fortran module as type.  This DIE can be only a declaration used for
+   imported module.  Still we need that type as local Fortran "use ... only"
+   declaration imports depend on the created type in determine_prefix.  */
+
+static struct type *
+read_module_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  const char *module_name;
+  struct type *type;
+
+  module_name = dwarf2_name (die, cu);
+  type = init_type (objfile, TYPE_CODE_MODULE, 0, module_name);
+
+  return set_die_type (die, type, cu);
+}
+
+/* Read a Fortran module.  */
+
+static void
+read_module (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct die_info *child_die = die->child;
+  struct type *type;
+
+  type = read_type_die (die, cu);
+  new_symbol (die, type, cu);
+
+  while (child_die && child_die->tag)
+    {
+      process_die (child_die, cu);
+      child_die = child_die->sibling;
+    }
+}
+
+/* Return the name of the namespace represented by DIE.  Set
+   *IS_ANONYMOUS to tell whether or not the namespace is an anonymous
+   namespace.  */
+
+static const char *
+namespace_name (struct die_info *die, int *is_anonymous, struct dwarf2_cu *cu)
+{
+  struct die_info *current_die;
+  const char *name = NULL;
+
+  /* Loop through the extensions until we find a name.  */
+
+  for (current_die = die;
+       current_die != NULL;
+       current_die = dwarf2_extension (die, &cu))
+    {
+      /* We don't use dwarf2_name here so that we can detect the absence
+	 of a name -> anonymous namespace.  */
+      name = dwarf2_string_attr (die, DW_AT_name, cu);
+
+      if (name != NULL)
+	break;
+    }
+
+  /* Is it an anonymous namespace?  */
+
+  *is_anonymous = (name == NULL);
+  if (*is_anonymous)
+    name = CP_ANONYMOUS_NAMESPACE_STR;
+
+  return name;
+}
+
+/* Extract all information from a DW_TAG_pointer_type DIE and add to
+   the user defined type vector.  */
+
+static struct type *
+read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct gdbarch *gdbarch = cu->per_objfile->objfile->arch ();
+  struct comp_unit_head *cu_header = &cu->header;
+  struct type *type;
+  struct attribute *attr_byte_size;
+  struct attribute *attr_address_class;
+  int byte_size, addr_class;
+  struct type *target_type;
+
+  target_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  type = get_die_type (die, cu);
+  if (type)
+    return type;
+
+  type = lookup_pointer_type (target_type);
+
+  attr_byte_size = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr_byte_size)
+    byte_size = attr_byte_size->constant_value (cu_header->addr_size);
+  else
+    byte_size = cu_header->addr_size;
+
+  attr_address_class = dwarf2_attr (die, DW_AT_address_class, cu);
+  if (attr_address_class)
+    addr_class = attr_address_class->constant_value (DW_ADDR_none);
+  else
+    addr_class = DW_ADDR_none;
+
+  ULONGEST alignment = get_alignment (cu, die);
+
+  /* If the pointer size, alignment, or address class is different
+     than the default, create a type variant marked as such and set
+     the length accordingly.  */
+  if (TYPE_LENGTH (type) != byte_size
+      || (alignment != 0 && TYPE_RAW_ALIGN (type) != 0
+	  && alignment != TYPE_RAW_ALIGN (type))
+      || addr_class != DW_ADDR_none)
+    {
+      if (gdbarch_address_class_type_flags_p (gdbarch))
+	{
+	  type_instance_flags type_flags
+	    = gdbarch_address_class_type_flags (gdbarch, byte_size,
+						addr_class);
+	  gdb_assert ((type_flags & ~TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
+		      == 0);
+	  type = make_type_with_address_space (type, type_flags);
+	}
+      else if (TYPE_LENGTH (type) != byte_size)
+	{
+	  complaint (_("invalid pointer size %d"), byte_size);
+	}
+      else if (TYPE_RAW_ALIGN (type) != alignment)
+	{
+	  complaint (_("Invalid DW_AT_alignment"
+		       " - DIE at %s [in module %s]"),
+		     sect_offset_str (die->sect_off),
+		     objfile_name (cu->per_objfile->objfile));
+	}
+      else
+	{
+	  /* Should we also complain about unhandled address classes?  */
+	}
+    }
+
+  TYPE_LENGTH (type) = byte_size;
+  set_type_align (type, alignment);
+  return set_die_type (die, type, cu);
+}
+
+/* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to
+   the user defined type vector.  */
+
+static struct type *
+read_tag_ptr_to_member_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *type;
+  struct type *to_type;
+  struct type *domain;
+
+  to_type = die_type (die, cu);
+  domain = die_containing_type (die, cu);
+
+  /* The calls above may have already set the type for this DIE.  */
+  type = get_die_type (die, cu);
+  if (type)
+    return type;
+
+  if (check_typedef (to_type)->code () == TYPE_CODE_METHOD)
+    type = lookup_methodptr_type (to_type);
+  else if (check_typedef (to_type)->code () == TYPE_CODE_FUNC)
+    {
+      struct type *new_type = alloc_type (cu->per_objfile->objfile);
+
+      smash_to_method_type (new_type, domain, TYPE_TARGET_TYPE (to_type),
+			    to_type->fields (), to_type->num_fields (),
+			    to_type->has_varargs ());
+      type = lookup_methodptr_type (new_type);
+    }
+  else
+    type = lookup_memberptr_type (to_type, domain);
+
+  return set_die_type (die, type, cu);
+}
+
+/* Extract all information from a DW_TAG_{rvalue_,}reference_type DIE and add to
+   the user defined type vector.  */
+
+static struct type *
+read_tag_reference_type (struct die_info *die, struct dwarf2_cu *cu,
+			  enum type_code refcode)
+{
+  struct comp_unit_head *cu_header = &cu->header;
+  struct type *type, *target_type;
+  struct attribute *attr;
+
+  gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF);
+
+  target_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  type = get_die_type (die, cu);
+  if (type)
+    return type;
+
+  type = lookup_reference_type (target_type, refcode);
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr)
+    {
+      TYPE_LENGTH (type) = attr->constant_value (cu_header->addr_size);
+    }
+  else
+    {
+      TYPE_LENGTH (type) = cu_header->addr_size;
+    }
+  maybe_set_alignment (cu, die, type);
+  return set_die_type (die, type, cu);
+}
+
+/* Add the given cv-qualifiers to the element type of the array.  GCC
+   outputs DWARF type qualifiers that apply to an array, not the
+   element type.  But GDB relies on the array element type to carry
+   the cv-qualifiers.  This mimics section 6.7.3 of the C99
+   specification.  */
+
+static struct type *
+add_array_cv_type (struct die_info *die, struct dwarf2_cu *cu,
+		   struct type *base_type, int cnst, int voltl)
+{
+  struct type *el_type, *inner_array;
+
+  base_type = copy_type (base_type);
+  inner_array = base_type;
+
+  while (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY)
+    {
+      TYPE_TARGET_TYPE (inner_array) =
+	copy_type (TYPE_TARGET_TYPE (inner_array));
+      inner_array = TYPE_TARGET_TYPE (inner_array);
+    }
+
+  el_type = TYPE_TARGET_TYPE (inner_array);
+  cnst |= TYPE_CONST (el_type);
+  voltl |= TYPE_VOLATILE (el_type);
+  TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, NULL);
+
+  return set_die_type (die, base_type, cu);
+}
+
+static struct type *
+read_tag_const_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *base_type, *cv_type;
+
+  base_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  cv_type = get_die_type (die, cu);
+  if (cv_type)
+    return cv_type;
+
+  /* In case the const qualifier is applied to an array type, the element type
+     is so qualified, not the array type (section 6.7.3 of C99).  */
+  if (base_type->code () == TYPE_CODE_ARRAY)
+    return add_array_cv_type (die, cu, base_type, 1, 0);
+
+  cv_type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0);
+  return set_die_type (die, cv_type, cu);
+}
+
+static struct type *
+read_tag_volatile_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *base_type, *cv_type;
+
+  base_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  cv_type = get_die_type (die, cu);
+  if (cv_type)
+    return cv_type;
+
+  /* In case the volatile qualifier is applied to an array type, the
+     element type is so qualified, not the array type (section 6.7.3
+     of C99).  */
+  if (base_type->code () == TYPE_CODE_ARRAY)
+    return add_array_cv_type (die, cu, base_type, 0, 1);
+
+  cv_type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0);
+  return set_die_type (die, cv_type, cu);
+}
+
+/* Handle DW_TAG_restrict_type.  */
+
+static struct type *
+read_tag_restrict_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *base_type, *cv_type;
+
+  base_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  cv_type = get_die_type (die, cu);
+  if (cv_type)
+    return cv_type;
+
+  cv_type = make_restrict_type (base_type);
+  return set_die_type (die, cv_type, cu);
+}
+
+/* Handle DW_TAG_atomic_type.  */
+
+static struct type *
+read_tag_atomic_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *base_type, *cv_type;
+
+  base_type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  cv_type = get_die_type (die, cu);
+  if (cv_type)
+    return cv_type;
+
+  cv_type = make_atomic_type (base_type);
+  return set_die_type (die, cv_type, cu);
+}
+
+/* Extract all information from a DW_TAG_string_type DIE and add to
+   the user defined type vector.  It isn't really a user defined type,
+   but it behaves like one, with other DIE's using an AT_user_def_type
+   attribute to reference it.  */
+
+static struct type *
+read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct type *type, *range_type, *index_type, *char_type;
+  struct attribute *attr;
+  struct dynamic_prop prop;
+  bool length_is_constant = true;
+  LONGEST length;
+
+  /* There are a couple of places where bit sizes might be made use of
+     when parsing a DW_TAG_string_type, however, no producer that we know
+     of make use of these.  Handling bit sizes that are a multiple of the
+     byte size is easy enough, but what about other bit sizes?  Lets deal
+     with that problem when we have to.  Warn about these attributes being
+     unsupported, then parse the type and ignore them like we always
+     have.  */
+  if (dwarf2_attr (die, DW_AT_bit_size, cu) != nullptr
+      || dwarf2_attr (die, DW_AT_string_length_bit_size, cu) != nullptr)
+    {
+      static bool warning_printed = false;
+      if (!warning_printed)
+	{
+	  warning (_("DW_AT_bit_size and DW_AT_string_length_bit_size not "
+		     "currently supported on DW_TAG_string_type."));
+	  warning_printed = true;
+	}
+    }
+
+  attr = dwarf2_attr (die, DW_AT_string_length, cu);
+  if (attr != nullptr && !attr->form_is_constant ())
+    {
+      /* The string length describes the location at which the length of
+	 the string can be found.  The size of the length field can be
+	 specified with one of the attributes below.  */
+      struct type *prop_type;
+      struct attribute *len
+	= dwarf2_attr (die, DW_AT_string_length_byte_size, cu);
+      if (len == nullptr)
+	len = dwarf2_attr (die, DW_AT_byte_size, cu);
+      if (len != nullptr && len->form_is_constant ())
+	{
+	  /* Pass 0 as the default as we know this attribute is constant
+	     and the default value will not be returned.  */
+	  LONGEST sz = len->constant_value (0);
+	  prop_type = cu->per_objfile->int_type (sz, true);
+	}
+      else
+	{
+	  /* If the size is not specified then we assume it is the size of
+	     an address on this target.  */
+	  prop_type = cu->addr_sized_int_type (true);
+	}
+
+      /* Convert the attribute into a dynamic property.  */
+      if (!attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
+	length = 1;
+      else
+	length_is_constant = false;
+    }
+  else if (attr != nullptr)
+    {
+      /* This DW_AT_string_length just contains the length with no
+	 indirection.  There's no need to create a dynamic property in this
+	 case.  Pass 0 for the default value as we know it will not be
+	 returned in this case.  */
+      length = attr->constant_value (0);
+    }
+  else if ((attr = dwarf2_attr (die, DW_AT_byte_size, cu)) != nullptr)
+    {
+      /* We don't currently support non-constant byte sizes for strings.  */
+      length = attr->constant_value (1);
+    }
+  else
+    {
+      /* Use 1 as a fallback length if we have nothing else.  */
+      length = 1;
+    }
+
+  index_type = objfile_type (objfile)->builtin_int;
+  if (length_is_constant)
+    range_type = create_static_range_type (NULL, index_type, 1, length);
+  else
+    {
+      struct dynamic_prop low_bound;
+
+      low_bound.set_const_val (1);
+      range_type = create_range_type (NULL, index_type, &low_bound, &prop, 0);
+    }
+  char_type = language_string_char_type (cu->language_defn, gdbarch);
+  type = create_string_type (NULL, char_type, range_type);
+
+  return set_die_type (die, type, cu);
+}
+
+/* Assuming that DIE corresponds to a function, returns nonzero
+   if the function is prototyped.  */
+
+static int
+prototyped_function_p (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_prototyped, cu);
+  if (attr && attr->as_boolean ())
+    return 1;
+
+  /* The DWARF standard implies that the DW_AT_prototyped attribute
+     is only meaningful for C, but the concept also extends to other
+     languages that allow unprototyped functions (Eg: Objective C).
+     For all other languages, assume that functions are always
+     prototyped.  */
+  if (cu->per_cu->lang != language_c
+      && cu->per_cu->lang != language_objc
+      && cu->per_cu->lang != language_opencl)
+    return 1;
+
+  /* RealView does not emit DW_AT_prototyped.  We can not distinguish
+     prototyped and unprototyped functions; default to prototyped,
+     since that is more common in modern code (and RealView warns
+     about unprototyped functions).  */
+  if (producer_is_realview (cu->producer))
+    return 1;
+
+  return 0;
+}
+
+/* Handle DIES due to C code like:
+
+   struct foo
+   {
+   int (*funcp)(int a, long l);
+   int b;
+   };
+
+   ('funcp' generates a DW_TAG_subroutine_type DIE).  */
+
+static struct type *
+read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct type *type;		/* Type that this function returns.  */
+  struct type *ftype;		/* Function that returns above type.  */
+  struct attribute *attr;
+
+  type = die_type (die, cu);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  ftype = get_die_type (die, cu);
+  if (ftype)
+    return ftype;
+
+  ftype = lookup_function_type (type);
+
+  if (prototyped_function_p (die, cu))
+    ftype->set_is_prototyped (true);
+
+  /* Store the calling convention in the type if it's available in
+     the subroutine die.  Otherwise set the calling convention to
+     the default value DW_CC_normal.  */
+  attr = dwarf2_attr (die, DW_AT_calling_convention, cu);
+  if (attr != nullptr
+      && is_valid_DW_AT_calling_convention_for_subroutine (attr->constant_value (0)))
+    TYPE_CALLING_CONVENTION (ftype)
+      = (enum dwarf_calling_convention) attr->constant_value (0);
+  else if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL"))
+    TYPE_CALLING_CONVENTION (ftype) = DW_CC_GDB_IBM_OpenCL;
+  else
+    TYPE_CALLING_CONVENTION (ftype) = DW_CC_normal;
+
+  /* Record whether the function returns normally to its caller or not
+     if the DWARF producer set that information.  */
+  attr = dwarf2_attr (die, DW_AT_noreturn, cu);
+  if (attr && attr->as_boolean ())
+    TYPE_NO_RETURN (ftype) = 1;
+
+  /* We need to add the subroutine type to the die immediately so
+     we don't infinitely recurse when dealing with parameters
+     declared as the same subroutine type.  */
+  set_die_type (die, ftype, cu);
+
+  if (die->child != NULL)
+    {
+      struct type *void_type = objfile_type (objfile)->builtin_void;
+      struct die_info *child_die;
+      int nparams, iparams;
+
+      /* Count the number of parameters.
+	 FIXME: GDB currently ignores vararg functions, but knows about
+	 vararg member functions.  */
+      nparams = 0;
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  if (child_die->tag == DW_TAG_formal_parameter)
+	    nparams++;
+	  else if (child_die->tag == DW_TAG_unspecified_parameters)
+	    ftype->set_has_varargs (true);
+
+	  child_die = child_die->sibling;
+	}
+
+      /* Allocate storage for parameters and fill them in.  */
+      ftype->set_num_fields (nparams);
+      ftype->set_fields
+	((struct field *) TYPE_ZALLOC (ftype, nparams * sizeof (struct field)));
+
+      /* TYPE_FIELD_TYPE must never be NULL.  Pre-fill the array to ensure it
+	 even if we error out during the parameters reading below.  */
+      for (iparams = 0; iparams < nparams; iparams++)
+	ftype->field (iparams).set_type (void_type);
+
+      iparams = 0;
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  if (child_die->tag == DW_TAG_formal_parameter)
+	    {
+	      struct type *arg_type;
+
+	      /* DWARF version 2 has no clean way to discern C++
+		 static and non-static member functions.  G++ helps
+		 GDB by marking the first parameter for non-static
+		 member functions (which is the this pointer) as
+		 artificial.  We pass this information to
+		 dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL.
+
+		 DWARF version 3 added DW_AT_object_pointer, which GCC
+		 4.5 does not yet generate.  */
+	      attr = dwarf2_attr (child_die, DW_AT_artificial, cu);
+	      if (attr != nullptr)
+		TYPE_FIELD_ARTIFICIAL (ftype, iparams) = attr->as_boolean ();
+	      else
+		TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
+	      arg_type = die_type (child_die, cu);
+
+	      /* RealView does not mark THIS as const, which the testsuite
+		 expects.  GCC marks THIS as const in method definitions,
+		 but not in the class specifications (GCC PR 43053).  */
+	      if (cu->per_cu->lang == language_cplus
+		  && !TYPE_CONST (arg_type)
+		  && TYPE_FIELD_ARTIFICIAL (ftype, iparams))
+		{
+		  int is_this = 0;
+		  struct dwarf2_cu *arg_cu = cu;
+		  const char *name = dwarf2_name (child_die, cu);
+
+		  attr = dwarf2_attr (die, DW_AT_object_pointer, cu);
+		  if (attr != nullptr)
+		    {
+		      /* If the compiler emits this, use it.  */
+		      if (follow_die_ref (die, attr, &arg_cu) == child_die)
+			is_this = 1;
+		    }
+		  else if (name && strcmp (name, "this") == 0)
+		    /* Function definitions will have the argument names.  */
+		    is_this = 1;
+		  else if (name == NULL && iparams == 0)
+		    /* Declarations may not have the names, so like
+		       elsewhere in GDB, assume an artificial first
+		       argument is "this".  */
+		    is_this = 1;
+
+		  if (is_this)
+		    arg_type = make_cv_type (1, TYPE_VOLATILE (arg_type),
+					     arg_type, 0);
+		}
+
+	      ftype->field (iparams).set_type (arg_type);
+	      iparams++;
+	    }
+	  child_die = child_die->sibling;
+	}
+    }
+
+  return ftype;
+}
+
+static struct type *
+read_typedef (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  const char *name = NULL;
+  struct type *this_type, *target_type;
+
+  name = dwarf2_full_name (NULL, die, cu);
+  this_type = init_type (objfile, TYPE_CODE_TYPEDEF, 0, name);
+  this_type->set_target_is_stub (true);
+  set_die_type (die, this_type, cu);
+  target_type = die_type (die, cu);
+  if (target_type != this_type)
+    TYPE_TARGET_TYPE (this_type) = target_type;
+  else
+    {
+      /* Self-referential typedefs are, it seems, not allowed by the DWARF
+	 spec and cause infinite loops in GDB.  */
+      complaint (_("Self-referential DW_TAG_typedef "
+		   "- DIE at %s [in module %s]"),
+		 sect_offset_str (die->sect_off), objfile_name (objfile));
+      TYPE_TARGET_TYPE (this_type) = NULL;
+    }
+  if (name == NULL)
+    {
+      /* Gcc-7 and before supports -feliminate-dwarf2-dups, which generates
+	 anonymous typedefs, which is, strictly speaking, invalid DWARF.
+	 Handle these by just returning the target type, rather than
+	 constructing an anonymous typedef type and trying to handle this
+	 elsewhere.  */
+      set_die_type (die, target_type, cu);
+      return target_type;
+    }
+  return this_type;
+}
+
+/* Helper for get_dwarf2_rational_constant that computes the value of
+   a given gmp_mpz given an attribute.  */
+
+static void
+get_mpz (struct dwarf2_cu *cu, gdb_mpz *value, struct attribute *attr)
+{
+  /* GCC will sometimes emit a 16-byte constant value as a DWARF
+     location expression that pushes an implicit value.  */
+  if (attr->form == DW_FORM_exprloc)
+    {
+      dwarf_block *blk = attr->as_block ();
+      if (blk->size > 0 && blk->data[0] == DW_OP_implicit_value)
+	{
+	  uint64_t len;
+	  const gdb_byte *ptr = safe_read_uleb128 (blk->data + 1,
+						   blk->data + blk->size,
+						   &len);
+	  if (ptr - blk->data + len <= blk->size)
+	    {
+	      mpz_import (value->val, len,
+			  bfd_big_endian (cu->per_objfile->objfile->obfd) ? 1 : -1,
+			  1, 0, 0, ptr);
+	      return;
+	    }
+	}
+
+      /* On failure set it to 1.  */
+      *value = gdb_mpz (1);
+    }
+  else if (attr->form_is_block ())
+    {
+      dwarf_block *blk = attr->as_block ();
+      mpz_import (value->val, blk->size,
+		  bfd_big_endian (cu->per_objfile->objfile->obfd) ? 1 : -1,
+		  1, 0, 0, blk->data);
+    }
+  else
+    *value = gdb_mpz (attr->constant_value (1));
+}
+
+/* Assuming DIE is a rational DW_TAG_constant, read the DIE's
+   numerator and denominator into NUMERATOR and DENOMINATOR (resp).
+
+   If the numerator and/or numerator attribute is missing,
+   a complaint is filed, and NUMERATOR and DENOMINATOR are left
+   untouched.  */
+
+static void
+get_dwarf2_rational_constant (struct die_info *die, struct dwarf2_cu *cu,
+			      gdb_mpz *numerator, gdb_mpz *denominator)
+{
+  struct attribute *num_attr, *denom_attr;
+
+  num_attr = dwarf2_attr (die, DW_AT_GNU_numerator, cu);
+  if (num_attr == nullptr)
+    complaint (_("DW_AT_GNU_numerator missing in %s DIE at %s"),
+	       dwarf_tag_name (die->tag), sect_offset_str (die->sect_off));
+
+  denom_attr = dwarf2_attr (die, DW_AT_GNU_denominator, cu);
+  if (denom_attr == nullptr)
+    complaint (_("DW_AT_GNU_denominator missing in %s DIE at %s"),
+	       dwarf_tag_name (die->tag), sect_offset_str (die->sect_off));
+
+  if (num_attr == nullptr || denom_attr == nullptr)
+    return;
+
+  get_mpz (cu, numerator, num_attr);
+  get_mpz (cu, denominator, denom_attr);
+}
+
+/* Same as get_dwarf2_rational_constant, but extracting an unsigned
+   rational constant, rather than a signed one.
+
+   If the rational constant has a negative value, a complaint
+   is filed, and NUMERATOR and DENOMINATOR are left untouched.  */
+
+static void
+get_dwarf2_unsigned_rational_constant (struct die_info *die,
+				       struct dwarf2_cu *cu,
+				       gdb_mpz *numerator,
+				       gdb_mpz *denominator)
+{
+  gdb_mpz num (1);
+  gdb_mpz denom (1);
+
+  get_dwarf2_rational_constant (die, cu, &num, &denom);
+  if (mpz_sgn (num.val) == -1 && mpz_sgn (denom.val) == -1)
+    {
+      mpz_neg (num.val, num.val);
+      mpz_neg (denom.val, denom.val);
+    }
+  else if (mpz_sgn (num.val) == -1)
+    {
+      complaint (_("unexpected negative value for DW_AT_GNU_numerator"
+		   " in DIE at %s"),
+		 sect_offset_str (die->sect_off));
+      return;
+    }
+  else if (mpz_sgn (denom.val) == -1)
+    {
+      complaint (_("unexpected negative value for DW_AT_GNU_denominator"
+		   " in DIE at %s"),
+		 sect_offset_str (die->sect_off));
+      return;
+    }
+
+  *numerator = std::move (num);
+  *denominator = std::move (denom);
+}
+
+/* Assuming that ENCODING is a string whose contents starting at the
+   K'th character is "_nn" where "nn" is a decimal number, scan that
+   number and set RESULT to the value. K is updated to point to the
+   character immediately following the number.
+
+   If the string does not conform to the format described above, false
+   is returned, and K may or may not be changed.  */
+
+static bool
+ada_get_gnat_encoded_number (const char *encoding, int &k, gdb_mpz *result)
+{
+  /* The next character should be an underscore ('_') followed
+     by a digit.  */
+  if (encoding[k] != '_' || !isdigit (encoding[k + 1]))
+    return false;
+
+  /* Skip the underscore.  */
+  k++;
+  int start = k;
+
+  /* Determine the number of digits for our number.  */
+  while (isdigit (encoding[k]))
+    k++;
+  if (k == start)
+    return false;
+
+  std::string copy (&encoding[start], k - start);
+  if (mpz_set_str (result->val, copy.c_str (), 10) == -1)
+    return false;
+
+  return true;
+}
+
+/* Scan two numbers from ENCODING at OFFSET, assuming the string is of
+   the form _NN_DD, where NN and DD are decimal numbers.  Set NUM and
+   DENOM, update OFFSET, and return true on success.  Return false on
+   failure.  */
+
+static bool
+ada_get_gnat_encoded_ratio (const char *encoding, int &offset,
+			    gdb_mpz *num, gdb_mpz *denom)
+{
+  if (!ada_get_gnat_encoded_number (encoding, offset, num))
+    return false;
+  return ada_get_gnat_encoded_number (encoding, offset, denom);
+}
+
+/* Assuming DIE corresponds to a fixed point type, finish the creation
+   of the corresponding TYPE by setting its type-specific data.  CU is
+   the DIE's CU.  SUFFIX is the "XF" type name suffix coming from GNAT
+   encodings.  It is nullptr if the GNAT encoding should be
+   ignored.  */
+
+static void
+finish_fixed_point_type (struct type *type, const char *suffix,
+			 struct die_info *die, struct dwarf2_cu *cu)
+{
+  gdb_assert (type->code () == TYPE_CODE_FIXED_POINT
+	      && TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FIXED_POINT);
+
+  /* If GNAT encodings are preferred, don't examine the
+     attributes.  */
+  struct attribute *attr = nullptr;
+  if (suffix == nullptr)
+    {
+      attr = dwarf2_attr (die, DW_AT_binary_scale, cu);
+      if (attr == nullptr)
+	attr = dwarf2_attr (die, DW_AT_decimal_scale, cu);
+      if (attr == nullptr)
+	attr = dwarf2_attr (die, DW_AT_small, cu);
+    }
+
+  /* Numerator and denominator of our fixed-point type's scaling factor.
+     The default is a scaling factor of 1, which we use as a fallback
+     when we are not able to decode it (problem with the debugging info,
+     unsupported forms, bug in GDB, etc...).  Using that as the default
+     allows us to at least print the unscaled value, which might still
+     be useful to a user.  */
+  gdb_mpz scale_num (1);
+  gdb_mpz scale_denom (1);
+
+  if (attr == nullptr)
+    {
+      int offset = 0;
+      if (suffix != nullptr
+	  && ada_get_gnat_encoded_ratio (suffix, offset, &scale_num,
+					 &scale_denom)
+	  /* The number might be encoded as _nn_dd_nn_dd, where the
+	     second ratio is the 'small value.  In this situation, we
+	     want the second value.  */
+	  && (suffix[offset] != '_'
+	      || ada_get_gnat_encoded_ratio (suffix, offset, &scale_num,
+					     &scale_denom)))
+	{
+	  /* Found it.  */
+	}
+      else
+	{
+	  /* Scaling factor not found.  Assume a scaling factor of 1,
+	     and hope for the best.  At least the user will be able to
+	     see the encoded value.  */
+	  scale_num = 1;
+	  scale_denom = 1;
+	  complaint (_("no scale found for fixed-point type (DIE at %s)"),
+		     sect_offset_str (die->sect_off));
+	}
+    }
+  else if (attr->name == DW_AT_binary_scale)
+    {
+      LONGEST scale_exp = attr->constant_value (0);
+      gdb_mpz *num_or_denom = scale_exp > 0 ? &scale_num : &scale_denom;
+
+      mpz_mul_2exp (num_or_denom->val, num_or_denom->val, std::abs (scale_exp));
+    }
+  else if (attr->name == DW_AT_decimal_scale)
+    {
+      LONGEST scale_exp = attr->constant_value (0);
+      gdb_mpz *num_or_denom = scale_exp > 0 ? &scale_num : &scale_denom;
+
+      mpz_ui_pow_ui (num_or_denom->val, 10, std::abs (scale_exp));
+    }
+  else if (attr->name == DW_AT_small)
+    {
+      struct die_info *scale_die;
+      struct dwarf2_cu *scale_cu = cu;
+
+      scale_die = follow_die_ref (die, attr, &scale_cu);
+      if (scale_die->tag == DW_TAG_constant)
+	get_dwarf2_unsigned_rational_constant (scale_die, scale_cu,
+					       &scale_num, &scale_denom);
+      else
+	complaint (_("%s DIE not supported as target of DW_AT_small attribute"
+		     " (DIE at %s)"),
+		   dwarf_tag_name (die->tag), sect_offset_str (die->sect_off));
+    }
+  else
+    {
+      complaint (_("unsupported scale attribute %s for fixed-point type"
+		   " (DIE at %s)"),
+		 dwarf_attr_name (attr->name),
+		 sect_offset_str (die->sect_off));
+    }
+
+  gdb_mpq &scaling_factor = type->fixed_point_info ().scaling_factor;
+  mpz_set (mpq_numref (scaling_factor.val), scale_num.val);
+  mpz_set (mpq_denref (scaling_factor.val), scale_denom.val);
+  mpq_canonicalize (scaling_factor.val);
+}
+
+/* The gnat-encoding suffix for fixed point.  */
+
+#define GNAT_FIXED_POINT_SUFFIX "___XF_"
+
+/* If NAME encodes an Ada fixed-point type, return a pointer to the
+   "XF" suffix of the name.  The text after this is what encodes the
+   'small and 'delta information.  Otherwise, return nullptr.  */
+
+static const char *
+gnat_encoded_fixed_point_type_info (const char *name)
+{
+  return strstr (name, GNAT_FIXED_POINT_SUFFIX);
+}
+
+/* Allocate a floating-point type of size BITS and name NAME.  Pass NAME_HINT
+   (which may be different from NAME) to the architecture back-end to allow
+   it to guess the correct format if necessary.  */
+
+static struct type *
+dwarf2_init_float_type (struct objfile *objfile, int bits, const char *name,
+			const char *name_hint, enum bfd_endian byte_order)
+{
+  struct gdbarch *gdbarch = objfile->arch ();
+  const struct floatformat **format;
+  struct type *type;
+
+  format = gdbarch_floatformat_for_type (gdbarch, name_hint, bits);
+  if (format)
+    type = init_float_type (objfile, bits, name, format, byte_order);
+  else
+    type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
+
+  return type;
+}
+
+/* Allocate an integer type of size BITS and name NAME.  */
+
+static struct type *
+dwarf2_init_integer_type (struct dwarf2_cu *cu, struct objfile *objfile,
+			  int bits, int unsigned_p, const char *name)
+{
+  struct type *type;
+
+  /* Versions of Intel's C Compiler generate an integer type called "void"
+     instead of using DW_TAG_unspecified_type.  This has been seen on
+     at least versions 14, 17, and 18.  */
+  if (bits == 0 && producer_is_icc (cu) && name != nullptr
+      && strcmp (name, "void") == 0)
+    type = objfile_type (objfile)->builtin_void;
+  else
+    type = init_integer_type (objfile, bits, unsigned_p, name);
+
+  return type;
+}
+
+/* Return true if DIE has a DW_AT_small attribute whose value is
+   a constant rational, where both the numerator and denominator
+   are equal to zero.
+
+   CU is the DIE's Compilation Unit.  */
+
+static bool
+has_zero_over_zero_small_attribute (struct die_info *die,
+				    struct dwarf2_cu *cu)
+{
+  struct attribute *attr = dwarf2_attr (die, DW_AT_small, cu);
+  if (attr == nullptr)
+    return false;
+
+  struct dwarf2_cu *scale_cu = cu;
+  struct die_info *scale_die
+    = follow_die_ref (die, attr, &scale_cu);
+
+  if (scale_die->tag != DW_TAG_constant)
+    return false;
+
+  gdb_mpz num (1), denom (1);
+  get_dwarf2_rational_constant (scale_die, cu, &num, &denom);
+  return mpz_sgn (num.val) == 0 && mpz_sgn (denom.val) == 0;
+}
+
+/* Initialise and return a floating point type of size BITS suitable for
+   use as a component of a complex number.  The NAME_HINT is passed through
+   when initialising the floating point type and is the name of the complex
+   type.
+
+   As DWARF doesn't currently provide an explicit name for the components
+   of a complex number, but it can be helpful to have these components
+   named, we try to select a suitable name based on the size of the
+   component.  */
+static struct type *
+dwarf2_init_complex_target_type (struct dwarf2_cu *cu,
+				 struct objfile *objfile,
+				 int bits, const char *name_hint,
+				 enum bfd_endian byte_order)
+{
+  gdbarch *gdbarch = objfile->arch ();
+  struct type *tt = nullptr;
+
+  /* Try to find a suitable floating point builtin type of size BITS.
+     We're going to use the name of this type as the name for the complex
+     target type that we are about to create.  */
+  switch (cu->per_cu->lang)
+    {
+    case language_fortran:
+      switch (bits)
+	{
+	case 32:
+	  tt = builtin_f_type (gdbarch)->builtin_real;
+	  break;
+	case 64:
+	  tt = builtin_f_type (gdbarch)->builtin_real_s8;
+	  break;
+	case 96:	/* The x86-32 ABI specifies 96-bit long double.  */
+	case 128:
+	  tt = builtin_f_type (gdbarch)->builtin_real_s16;
+	  break;
+	}
+      break;
+    default:
+      switch (bits)
+	{
+	case 32:
+	  tt = builtin_type (gdbarch)->builtin_float;
+	  break;
+	case 64:
+	  tt = builtin_type (gdbarch)->builtin_double;
+	  break;
+	case 96:	/* The x86-32 ABI specifies 96-bit long double.  */
+	case 128:
+	  tt = builtin_type (gdbarch)->builtin_long_double;
+	  break;
+	}
+      break;
+    }
+
+  /* If the type we found doesn't match the size we were looking for, then
+     pretend we didn't find a type at all, the complex target type we
+     create will then be nameless.  */
+  if (tt != nullptr && TYPE_LENGTH (tt) * TARGET_CHAR_BIT != bits)
+    tt = nullptr;
+
+  const char *name = (tt == nullptr) ? nullptr : tt->name ();
+  return dwarf2_init_float_type (objfile, bits, name, name_hint, byte_order);
+}
+
+/* Find a representation of a given base type and install
+   it in the TYPE field of the die.  */
+
+static struct type *
+read_base_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct type *type;
+  struct attribute *attr;
+  int encoding = 0, bits = 0;
+  const char *name;
+  gdbarch *arch;
+
+  attr = dwarf2_attr (die, DW_AT_encoding, cu);
+  if (attr != nullptr && attr->form_is_constant ())
+    encoding = attr->constant_value (0);
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr)
+    bits = attr->constant_value (0) * TARGET_CHAR_BIT;
+  name = dwarf2_name (die, cu);
+  if (!name)
+    complaint (_("DW_AT_name missing from DW_TAG_base_type"));
+
+  arch = objfile->arch ();
+  enum bfd_endian byte_order = gdbarch_byte_order (arch);
+
+  attr = dwarf2_attr (die, DW_AT_endianity, cu);
+  if (attr != nullptr && attr->form_is_constant ())
+    {
+      int endianity = attr->constant_value (0);
+
+      switch (endianity)
+	{
+	case DW_END_big:
+	  byte_order = BFD_ENDIAN_BIG;
+	  break;
+	case DW_END_little:
+	  byte_order = BFD_ENDIAN_LITTLE;
+	  break;
+	default:
+	  complaint (_("DW_AT_endianity has unrecognized value %d"), endianity);
+	  break;
+	}
+    }
+
+  if ((encoding == DW_ATE_signed_fixed || encoding == DW_ATE_unsigned_fixed)
+      && cu->per_cu->lang == language_ada
+      && has_zero_over_zero_small_attribute (die, cu))
+    {
+      /* brobecker/2018-02-24: This is a fixed point type for which
+	 the scaling factor is represented as fraction whose value
+	 does not make sense (zero divided by zero), so we should
+	 normally never see these.  However, there is a small category
+	 of fixed point types for which GNAT is unable to provide
+	 the scaling factor via the standard DWARF mechanisms, and
+	 for which the info is provided via the GNAT encodings instead.
+	 This is likely what this DIE is about.  */
+      encoding = (encoding == DW_ATE_signed_fixed
+		  ? DW_ATE_signed
+		  : DW_ATE_unsigned);
+    }
+
+  /* With GNAT encodings, fixed-point information will be encoded in
+     the type name.  Note that this can also occur with the above
+     zero-over-zero case, which is why this is a separate "if" rather
+     than an "else if".  */
+  const char *gnat_encoding_suffix = nullptr;
+  if ((encoding == DW_ATE_signed || encoding == DW_ATE_unsigned)
+      && cu->per_cu->lang == language_ada
+      && name != nullptr)
+    {
+      gnat_encoding_suffix = gnat_encoded_fixed_point_type_info (name);
+      if (gnat_encoding_suffix != nullptr)
+	{
+	  gdb_assert (startswith (gnat_encoding_suffix,
+				  GNAT_FIXED_POINT_SUFFIX));
+	  name = obstack_strndup (&cu->per_objfile->objfile->objfile_obstack,
+				  name, gnat_encoding_suffix - name);
+	  /* Use -1 here so that SUFFIX points at the "_" after the
+	     "XF".  */
+	  gnat_encoding_suffix += strlen (GNAT_FIXED_POINT_SUFFIX) - 1;
+
+	  encoding = (encoding == DW_ATE_signed
+		      ? DW_ATE_signed_fixed
+		      : DW_ATE_unsigned_fixed);
+	}
+    }
+
+  switch (encoding)
+    {
+      case DW_ATE_address:
+	/* Turn DW_ATE_address into a void * pointer.  */
+	type = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, NULL);
+	type = init_pointer_type (objfile, bits, name, type);
+	break;
+      case DW_ATE_boolean:
+	type = init_boolean_type (objfile, bits, 1, name);
+	break;
+      case DW_ATE_complex_float:
+	type = dwarf2_init_complex_target_type (cu, objfile, bits / 2, name,
+						byte_order);
+	if (type->code () == TYPE_CODE_ERROR)
+	  {
+	    if (name == nullptr)
+	      {
+		struct obstack *obstack
+		  = &cu->per_objfile->objfile->objfile_obstack;
+		name = obconcat (obstack, "_Complex ", type->name (),
+				 nullptr);
+	      }
+	    type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
+	  }
+	else
+	  type = init_complex_type (name, type);
+	break;
+      case DW_ATE_decimal_float:
+	type = init_decfloat_type (objfile, bits, name);
+	break;
+      case DW_ATE_float:
+	type = dwarf2_init_float_type (objfile, bits, name, name, byte_order);
+	break;
+      case DW_ATE_signed:
+	type = dwarf2_init_integer_type (cu, objfile, bits, 0, name);
+	break;
+      case DW_ATE_unsigned:
+	if (cu->per_cu->lang == language_fortran
+	    && name
+	    && startswith (name, "character("))
+	  type = init_character_type (objfile, bits, 1, name);
+	else
+	  type = dwarf2_init_integer_type (cu, objfile, bits, 1, name);
+	break;
+      case DW_ATE_signed_char:
+	if (cu->per_cu->lang == language_ada
+	    || cu->per_cu->lang == language_m2
+	    || cu->per_cu->lang == language_pascal
+	    || cu->per_cu->lang == language_fortran)
+	  type = init_character_type (objfile, bits, 0, name);
+	else
+	  type = dwarf2_init_integer_type (cu, objfile, bits, 0, name);
+	break;
+      case DW_ATE_unsigned_char:
+	if (cu->per_cu->lang == language_ada
+	    || cu->per_cu->lang == language_m2
+	    || cu->per_cu->lang == language_pascal
+	    || cu->per_cu->lang == language_fortran
+	    || cu->per_cu->lang == language_rust)
+	  type = init_character_type (objfile, bits, 1, name);
+	else
+	  type = dwarf2_init_integer_type (cu, objfile, bits, 1, name);
+	break;
+      case DW_ATE_UTF:
+	{
+	  type = init_character_type (objfile, bits, 1, name);
+	  return set_die_type (die, type, cu);
+	}
+	break;
+      case DW_ATE_signed_fixed:
+	type = init_fixed_point_type (objfile, bits, 0, name);
+	finish_fixed_point_type (type, gnat_encoding_suffix, die, cu);
+	break;
+      case DW_ATE_unsigned_fixed:
+	type = init_fixed_point_type (objfile, bits, 1, name);
+	finish_fixed_point_type (type, gnat_encoding_suffix, die, cu);
+	break;
+
+      default:
+	complaint (_("unsupported DW_AT_encoding: '%s'"),
+		   dwarf_type_encoding_name (encoding));
+	type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
+	break;
+    }
+
+  if (type->code () == TYPE_CODE_INT
+      && name != nullptr
+      && strcmp (name, "char") == 0)
+    type->set_has_no_signedness (true);
+
+  maybe_set_alignment (cu, die, type);
+
+  type->set_endianity_is_not_default (gdbarch_byte_order (arch) != byte_order);
+
+  if (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_INT)
+    {
+      attr = dwarf2_attr (die, DW_AT_bit_size, cu);
+      if (attr != nullptr && attr->as_unsigned () <= 8 * TYPE_LENGTH (type))
+	{
+	  unsigned real_bit_size = attr->as_unsigned ();
+	  attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu);
+	  /* Only use the attributes if they make sense together.  */
+	  if (attr == nullptr
+	      || (attr->as_unsigned () + real_bit_size
+		  <= 8 * TYPE_LENGTH (type)))
+	    {
+	      TYPE_MAIN_TYPE (type)->type_specific.int_stuff.bit_size
+		= real_bit_size;
+	      if (attr != nullptr)
+		TYPE_MAIN_TYPE (type)->type_specific.int_stuff.bit_offset
+		  = attr->as_unsigned ();
+	    }
+	}
+    }
+
+  return set_die_type (die, type, cu);
+}
+
+/* A helper function that returns the name of DIE, if it refers to a
+   variable declaration.  */
+
+static const char *
+var_decl_name (struct die_info *die, struct dwarf2_cu *cu)
+{
+  if (die->tag != DW_TAG_variable)
+    return nullptr;
+
+  attribute *attr = dwarf2_attr (die, DW_AT_declaration, cu);
+  if (attr == nullptr || !attr->as_boolean ())
+    return nullptr;
+
+  attr = dwarf2_attr (die, DW_AT_name, cu);
+  if (attr == nullptr)
+    return nullptr;
+  return attr->as_string ();
+}
+
+/* Parse dwarf attribute if it's a block, reference or constant and put the
+   resulting value of the attribute into struct bound_prop.
+   Returns 1 if ATTR could be resolved into PROP, 0 otherwise.  */
+
+static int
+attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
+		      struct dwarf2_cu *cu, struct dynamic_prop *prop,
+		      struct type *default_type)
+{
+  struct dwarf2_property_baton *baton;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct obstack *obstack = &objfile->objfile_obstack;
+
+  gdb_assert (default_type != NULL);
+
+  if (attr == NULL || prop == NULL)
+    return 0;
+
+  if (attr->form_is_block ())
+    {
+      baton = XOBNEW (obstack, struct dwarf2_property_baton);
+      baton->property_type = default_type;
+      baton->locexpr.per_cu = cu->per_cu;
+      baton->locexpr.per_objfile = per_objfile;
+
+      struct dwarf_block *block;
+      if (attr->form == DW_FORM_data16)
+	{
+	  size_t data_size = 16;
+	  block = XOBNEW (obstack, struct dwarf_block);
+	  block->size = (data_size
+			 + 2 /* Extra bytes for DW_OP and arg.  */);
+	  gdb_byte *data = XOBNEWVEC (obstack, gdb_byte, block->size);
+	  data[0] = DW_OP_implicit_value;
+	  data[1] = data_size;
+	  memcpy (&data[2], attr->as_block ()->data, data_size);
+	  block->data = data;
+	}
+      else
+	block = attr->as_block ();
+
+      baton->locexpr.size = block->size;
+      baton->locexpr.data = block->data;
+      switch (attr->name)
+	{
+	case DW_AT_string_length:
+	  baton->locexpr.is_reference = true;
+	  break;
+	default:
+	  baton->locexpr.is_reference = false;
+	  break;
+	}
+
+      prop->set_locexpr (baton);
+      gdb_assert (prop->baton () != NULL);
+    }
+  else if (attr->form_is_ref ())
+    {
+      struct dwarf2_cu *target_cu = cu;
+      struct die_info *target_die;
+      struct attribute *target_attr;
+
+      target_die = follow_die_ref (die, attr, &target_cu);
+      target_attr = dwarf2_attr (target_die, DW_AT_location, target_cu);
+      if (target_attr == NULL)
+	target_attr = dwarf2_attr (target_die, DW_AT_data_member_location,
+				   target_cu);
+      if (target_attr == NULL)
+	{
+	  const char *name = var_decl_name (target_die, target_cu);
+	  if (name != nullptr)
+	    {
+	      prop->set_variable_name (name);
+	      return 1;
+	    }
+	  return 0;
+	}
+
+      switch (target_attr->name)
+	{
+	  case DW_AT_location:
+	    if (target_attr->form_is_section_offset ())
+	      {
+		baton = XOBNEW (obstack, struct dwarf2_property_baton);
+		baton->property_type = die_type (target_die, target_cu);
+		fill_in_loclist_baton (cu, &baton->loclist, target_attr);
+		prop->set_loclist (baton);
+		gdb_assert (prop->baton () != NULL);
+	      }
+	    else if (target_attr->form_is_block ())
+	      {
+		baton = XOBNEW (obstack, struct dwarf2_property_baton);
+		baton->property_type = die_type (target_die, target_cu);
+		baton->locexpr.per_cu = cu->per_cu;
+		baton->locexpr.per_objfile = per_objfile;
+		struct dwarf_block *block = target_attr->as_block ();
+		baton->locexpr.size = block->size;
+		baton->locexpr.data = block->data;
+		baton->locexpr.is_reference = true;
+		prop->set_locexpr (baton);
+		gdb_assert (prop->baton () != NULL);
+	      }
+	    else
+	      {
+		dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
+						       "dynamic property");
+		return 0;
+	      }
+	    break;
+	  case DW_AT_data_member_location:
+	    {
+	      LONGEST offset;
+
+	      if (!handle_data_member_location (target_die, target_cu,
+						&offset))
+		return 0;
+
+	      baton = XOBNEW (obstack, struct dwarf2_property_baton);
+	      baton->property_type = read_type_die (target_die->parent,
+						      target_cu);
+	      baton->offset_info.offset = offset;
+	      baton->offset_info.type = die_type (target_die, target_cu);
+	      prop->set_addr_offset (baton);
+	      break;
+	    }
+	}
+    }
+  else if (attr->form_is_constant ())
+    prop->set_const_val (attr->constant_value (0));
+  else
+    {
+      dwarf2_invalid_attrib_class_complaint (dwarf_form_name (attr->form),
+					     dwarf2_name (die, cu));
+      return 0;
+    }
+
+  return 1;
+}
+
+/* See read.h.  */
+
+struct type *
+dwarf2_per_objfile::int_type (int size_in_bytes, bool unsigned_p) const
+{
+  struct type *int_type;
+
+  /* Helper macro to examine the various builtin types.  */
+#define TRY_TYPE(F)							\
+  int_type = (unsigned_p						\
+	      ? objfile_type (objfile)->builtin_unsigned_ ## F		\
+	      : objfile_type (objfile)->builtin_ ## F);			\
+  if (int_type != NULL && TYPE_LENGTH (int_type) == size_in_bytes)	\
+    return int_type
+
+  TRY_TYPE (char);
+  TRY_TYPE (short);
+  TRY_TYPE (int);
+  TRY_TYPE (long);
+  TRY_TYPE (long_long);
+
+#undef TRY_TYPE
+
+  gdb_assert_not_reached ("unable to find suitable integer type");
+}
+
+/* Read the DW_AT_type attribute for a sub-range.  If this attribute is not
+   present (which is valid) then compute the default type based on the
+   compilation units address size.  */
+
+static struct type *
+read_subrange_index_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *index_type = die_type (die, cu);
+
+  /* Dwarf-2 specifications explicitly allows to create subrange types
+     without specifying a base type.
+     In that case, the base type must be set to the type of
+     the lower bound, upper bound or count, in that order, if any of these
+     three attributes references an object that has a type.
+     If no base type is found, the Dwarf-2 specifications say that
+     a signed integer type of size equal to the size of an address should
+     be used.
+     For the following C code: `extern char gdb_int [];'
+     GCC produces an empty range DIE.
+     FIXME: muller/2010-05-28: Possible references to object for low bound,
+     high bound or count are not yet handled by this code.  */
+  if (index_type->code () == TYPE_CODE_VOID)
+    index_type = cu->addr_sized_int_type (false);
+
+  return index_type;
+}
+
+/* Read the given DW_AT_subrange DIE.  */
+
+static struct type *
+read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *base_type, *orig_base_type;
+  struct type *range_type;
+  struct attribute *attr;
+  struct dynamic_prop low, high;
+  int low_default_is_valid;
+  int high_bound_is_count = 0;
+  const char *name;
+  ULONGEST negative_mask;
+
+  orig_base_type = read_subrange_index_type (die, cu);
+
+  /* If ORIG_BASE_TYPE is a typedef, it will not be TYPE_UNSIGNED,
+     whereas the real type might be.  So, we use ORIG_BASE_TYPE when
+     creating the range type, but we use the result of check_typedef
+     when examining properties of the type.  */
+  base_type = check_typedef (orig_base_type);
+
+  /* The die_type call above may have already set the type for this DIE.  */
+  range_type = get_die_type (die, cu);
+  if (range_type)
+    return range_type;
+
+  high.set_const_val (0);
+
+  /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow
+     omitting DW_AT_lower_bound.  */
+  switch (cu->per_cu->lang)
+    {
+    case language_c:
+    case language_cplus:
+      low.set_const_val (0);
+      low_default_is_valid = 1;
+      break;
+    case language_fortran:
+      low.set_const_val (1);
+      low_default_is_valid = 1;
+      break;
+    case language_d:
+    case language_objc:
+    case language_rust:
+      low.set_const_val (0);
+      low_default_is_valid = (cu->header.version >= 4);
+      break;
+    case language_ada:
+    case language_m2:
+    case language_pascal:
+      low.set_const_val (1);
+      low_default_is_valid = (cu->header.version >= 4);
+      break;
+    default:
+      low.set_const_val (0);
+      low_default_is_valid = 0;
+      break;
+    }
+
+  attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
+  if (attr != nullptr)
+    attr_to_dynamic_prop (attr, die, cu, &low, base_type);
+  else if (!low_default_is_valid)
+    complaint (_("Missing DW_AT_lower_bound "
+				      "- DIE at %s [in module %s]"),
+	       sect_offset_str (die->sect_off),
+	       objfile_name (cu->per_objfile->objfile));
+
+  struct attribute *attr_ub, *attr_count;
+  attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu);
+  if (!attr_to_dynamic_prop (attr, die, cu, &high, base_type))
+    {
+      attr = attr_count = dwarf2_attr (die, DW_AT_count, cu);
+      if (attr_to_dynamic_prop (attr, die, cu, &high, base_type))
+	{
+	  /* If bounds are constant do the final calculation here.  */
+	  if (low.kind () == PROP_CONST && high.kind () == PROP_CONST)
+	    high.set_const_val (low.const_val () + high.const_val () - 1);
+	  else
+	    high_bound_is_count = 1;
+	}
+      else
+	{
+	  if (attr_ub != NULL)
+	    complaint (_("Unresolved DW_AT_upper_bound "
+			 "- DIE at %s [in module %s]"),
+		       sect_offset_str (die->sect_off),
+		       objfile_name (cu->per_objfile->objfile));
+	  if (attr_count != NULL)
+	    complaint (_("Unresolved DW_AT_count "
+			 "- DIE at %s [in module %s]"),
+		       sect_offset_str (die->sect_off),
+		       objfile_name (cu->per_objfile->objfile));
+	}
+    }
+
+  LONGEST bias = 0;
+  struct attribute *bias_attr = dwarf2_attr (die, DW_AT_GNU_bias, cu);
+  if (bias_attr != nullptr && bias_attr->form_is_constant ())
+    bias = bias_attr->constant_value (0);
+
+  /* Normally, the DWARF producers are expected to use a signed
+     constant form (Eg. DW_FORM_sdata) to express negative bounds.
+     But this is unfortunately not always the case, as witnessed
+     with GCC, for instance, where the ambiguous DW_FORM_dataN form
+     is used instead.  To work around that ambiguity, we treat
+     the bounds as signed, and thus sign-extend their values, when
+     the base type is signed.  */
+  negative_mask =
+    -((ULONGEST) 1 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1));
+  if (low.kind () == PROP_CONST
+      && !base_type->is_unsigned () && (low.const_val () & negative_mask))
+    low.set_const_val (low.const_val () | negative_mask);
+  if (high.kind () == PROP_CONST
+      && !base_type->is_unsigned () && (high.const_val () & negative_mask))
+    high.set_const_val (high.const_val () | negative_mask);
+
+  /* Check for bit and byte strides.  */
+  struct dynamic_prop byte_stride_prop;
+  attribute *attr_byte_stride = dwarf2_attr (die, DW_AT_byte_stride, cu);
+  if (attr_byte_stride != nullptr)
+    {
+      struct type *prop_type = cu->addr_sized_int_type (false);
+      attr_to_dynamic_prop (attr_byte_stride, die, cu, &byte_stride_prop,
+			    prop_type);
+    }
+
+  struct dynamic_prop bit_stride_prop;
+  attribute *attr_bit_stride = dwarf2_attr (die, DW_AT_bit_stride, cu);
+  if (attr_bit_stride != nullptr)
+    {
+      /* It only makes sense to have either a bit or byte stride.  */
+      if (attr_byte_stride != nullptr)
+	{
+	  complaint (_("Found DW_AT_bit_stride and DW_AT_byte_stride "
+		       "- DIE at %s [in module %s]"),
+		     sect_offset_str (die->sect_off),
+		     objfile_name (cu->per_objfile->objfile));
+	  attr_bit_stride = nullptr;
+	}
+      else
+	{
+	  struct type *prop_type = cu->addr_sized_int_type (false);
+	  attr_to_dynamic_prop (attr_bit_stride, die, cu, &bit_stride_prop,
+				prop_type);
+	}
+    }
+
+  if (attr_byte_stride != nullptr
+      || attr_bit_stride != nullptr)
+    {
+      bool byte_stride_p = (attr_byte_stride != nullptr);
+      struct dynamic_prop *stride
+	= byte_stride_p ? &byte_stride_prop : &bit_stride_prop;
+
+      range_type
+	= create_range_type_with_stride (NULL, orig_base_type, &low,
+					 &high, bias, stride, byte_stride_p);
+    }
+  else
+    range_type = create_range_type (NULL, orig_base_type, &low, &high, bias);
+
+  if (high_bound_is_count)
+    range_type->bounds ()->flag_upper_bound_is_count = 1;
+
+  /* Ada expects an empty array on no boundary attributes.  */
+  if (attr == NULL && cu->per_cu->lang != language_ada)
+    range_type->bounds ()->high.set_undefined ();
+
+  name = dwarf2_name (die, cu);
+  if (name)
+    range_type->set_name (name);
+
+  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+  if (attr != nullptr)
+    TYPE_LENGTH (range_type) = attr->constant_value (0);
+
+  maybe_set_alignment (cu, die, range_type);
+
+  set_die_type (die, range_type, cu);
+
+  /* set_die_type should be already done.  */
+  set_descriptive_type (range_type, die, cu);
+
+  return range_type;
+}
+
+static struct type *
+read_unspecified_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *type;
+
+  type = init_type (cu->per_objfile->objfile, TYPE_CODE_VOID, 0, NULL);
+  type->set_name (dwarf2_name (die, cu));
+
+  /* In Ada, an unspecified type is typically used when the description
+     of the type is deferred to a different unit.  When encountering
+     such a type, we treat it as a stub, and try to resolve it later on,
+     when needed.  */
+  if (cu->per_cu->lang == language_ada)
+    type->set_is_stub (true);
+
+  return set_die_type (die, type, cu);
+}
+
+/* Read a single die and all its descendents.  Set the die's sibling
+   field to NULL; set other fields in the die correctly, and set all
+   of the descendents' fields correctly.  Set *NEW_INFO_PTR to the
+   location of the info_ptr after reading all of those dies.  PARENT
+   is the parent of the die in question.  */
+
+static struct die_info *
+read_die_and_children (const struct die_reader_specs *reader,
+		       const gdb_byte *info_ptr,
+		       const gdb_byte **new_info_ptr,
+		       struct die_info *parent)
+{
+  struct die_info *die;
+  const gdb_byte *cur_ptr;
+
+  cur_ptr = read_full_die_1 (reader, &die, info_ptr, 0);
+  if (die == NULL)
+    {
+      *new_info_ptr = cur_ptr;
+      return NULL;
+    }
+  store_in_ref_table (die, reader->cu);
+
+  if (die->has_children)
+    die->child = read_die_and_siblings_1 (reader, cur_ptr, new_info_ptr, die);
+  else
+    {
+      die->child = NULL;
+      *new_info_ptr = cur_ptr;
+    }
+
+  die->sibling = NULL;
+  die->parent = parent;
+  return die;
+}
+
+/* Read a die, all of its descendents, and all of its siblings; set
+   all of the fields of all of the dies correctly.  Arguments are as
+   in read_die_and_children.  */
+
+static struct die_info *
+read_die_and_siblings_1 (const struct die_reader_specs *reader,
+			 const gdb_byte *info_ptr,
+			 const gdb_byte **new_info_ptr,
+			 struct die_info *parent)
+{
+  struct die_info *first_die, *last_sibling;
+  const gdb_byte *cur_ptr;
+
+  cur_ptr = info_ptr;
+  first_die = last_sibling = NULL;
+
+  while (1)
+    {
+      struct die_info *die
+	= read_die_and_children (reader, cur_ptr, &cur_ptr, parent);
+
+      if (die == NULL)
+	{
+	  *new_info_ptr = cur_ptr;
+	  return first_die;
+	}
+
+      if (!first_die)
+	first_die = die;
+      else
+	last_sibling->sibling = die;
+
+      last_sibling = die;
+    }
+}
+
+/* Read a die, all of its descendents, and all of its siblings; set
+   all of the fields of all of the dies correctly.  Arguments are as
+   in read_die_and_children.
+   This the main entry point for reading a DIE and all its children.  */
+
+static struct die_info *
+read_die_and_siblings (const struct die_reader_specs *reader,
+		       const gdb_byte *info_ptr,
+		       const gdb_byte **new_info_ptr,
+		       struct die_info *parent)
+{
+  struct die_info *die = read_die_and_siblings_1 (reader, info_ptr,
+						  new_info_ptr, parent);
+
+  if (dwarf_die_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Read die from %s@0x%x of %s:\n",
+			  reader->die_section->get_name (),
+			  (unsigned) (info_ptr - reader->die_section->buffer),
+			  bfd_get_filename (reader->abfd));
+      dump_die (die, dwarf_die_debug);
+    }
+
+  return die;
+}
+
+/* Read a die and all its attributes, leave space for NUM_EXTRA_ATTRS
+   attributes.
+   The caller is responsible for filling in the extra attributes
+   and updating (*DIEP)->num_attrs.
+   Set DIEP to point to a newly allocated die with its information,
+   except for its child, sibling, and parent fields.  */
+
+static const gdb_byte *
+read_full_die_1 (const struct die_reader_specs *reader,
+		 struct die_info **diep, const gdb_byte *info_ptr,
+		 int num_extra_attrs)
+{
+  unsigned int abbrev_number, bytes_read, i;
+  const struct abbrev_info *abbrev;
+  struct die_info *die;
+  struct dwarf2_cu *cu = reader->cu;
+  bfd *abfd = reader->abfd;
+
+  sect_offset sect_off = (sect_offset) (info_ptr - reader->buffer);
+  abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+  info_ptr += bytes_read;
+  if (!abbrev_number)
+    {
+      *diep = NULL;
+      return info_ptr;
+    }
+
+  abbrev = reader->abbrev_table->lookup_abbrev (abbrev_number);
+  if (!abbrev)
+    error (_("Dwarf Error: could not find abbrev number %d [in module %s]"),
+	   abbrev_number,
+	   bfd_get_filename (abfd));
+
+  die = dwarf_alloc_die (cu, abbrev->num_attrs + num_extra_attrs);
+  die->sect_off = sect_off;
+  die->tag = abbrev->tag;
+  die->abbrev = abbrev_number;
+  die->has_children = abbrev->has_children;
+
+  /* Make the result usable.
+     The caller needs to update num_attrs after adding the extra
+     attributes.  */
+  die->num_attrs = abbrev->num_attrs;
+
+  bool any_need_reprocess = false;
+  for (i = 0; i < abbrev->num_attrs; ++i)
+    {
+      info_ptr = read_attribute (reader, &die->attrs[i], &abbrev->attrs[i],
+				 info_ptr);
+      if (die->attrs[i].requires_reprocessing_p ())
+	any_need_reprocess = true;
+    }
+
+  struct attribute *attr = die->attr (DW_AT_str_offsets_base);
+  if (attr != nullptr && attr->form_is_unsigned ())
+    cu->str_offsets_base = attr->as_unsigned ();
+
+  attr = die->attr (DW_AT_loclists_base);
+  if (attr != nullptr)
+    cu->loclist_base = attr->as_unsigned ();
+
+  auto maybe_addr_base = die->addr_base ();
+  if (maybe_addr_base.has_value ())
+    cu->addr_base = *maybe_addr_base;
+
+  attr = die->attr (DW_AT_rnglists_base);
+  if (attr != nullptr)
+    cu->rnglists_base = attr->as_unsigned ();
+
+  if (any_need_reprocess)
+    {
+      for (i = 0; i < abbrev->num_attrs; ++i)
+	{
+	  if (die->attrs[i].requires_reprocessing_p ())
+	    read_attribute_reprocess (reader, &die->attrs[i], die->tag);
+	}
+    }
+  *diep = die;
+  return info_ptr;
+}
+
+/* Read a die and all its attributes.
+   Set DIEP to point to a newly allocated die with its information,
+   except for its child, sibling, and parent fields.  */
+
+static const gdb_byte *
+read_full_die (const struct die_reader_specs *reader,
+	       struct die_info **diep, const gdb_byte *info_ptr)
+{
+  const gdb_byte *result;
+
+  result = read_full_die_1 (reader, diep, info_ptr, 0);
+
+  if (dwarf_die_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Read die from %s@0x%x of %s:\n",
+			  reader->die_section->get_name (),
+			  (unsigned) (info_ptr - reader->die_section->buffer),
+			  bfd_get_filename (reader->abfd));
+      dump_die (*diep, dwarf_die_debug);
+    }
+
+  return result;
+}
+
+
+/* Returns nonzero if TAG represents a type that we might generate a partial
+   symbol for.  */
+
+static int
+is_type_tag_for_partial (int tag, enum language lang)
+{
+  switch (tag)
+    {
+#if 0
+    /* Some types that would be reasonable to generate partial symbols for,
+       that we don't at present.  Note that normally this does not
+       matter, mainly because C compilers don't give names to these
+       types, but instead emit DW_TAG_typedef.  */
+    case DW_TAG_file_type:
+    case DW_TAG_ptr_to_member_type:
+    case DW_TAG_set_type:
+    case DW_TAG_string_type:
+    case DW_TAG_subroutine_type:
+#endif
+
+      /* GNAT may emit an array with a name, but no typedef, so we
+	 need to make a symbol in this case.  */
+    case DW_TAG_array_type:
+      return lang == language_ada;
+
+    case DW_TAG_base_type:
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_enumeration_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_subrange_type:
+    case DW_TAG_typedef:
+    case DW_TAG_union_type:
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+/* Load all DIEs that are interesting for partial symbols into memory.  */
+
+static struct partial_die_info *
+load_partial_dies (const struct die_reader_specs *reader,
+		   const gdb_byte *info_ptr, int building_psymtab)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct partial_die_info *parent_die, *last_die, *first_die = NULL;
+  unsigned int bytes_read;
+  unsigned int load_all = 0;
+  int nesting_level = 1;
+
+  parent_die = NULL;
+  last_die = NULL;
+
+  gdb_assert (cu->per_cu != NULL);
+  if (cu->load_all_dies)
+    load_all = 1;
+
+  cu->partial_dies
+    = htab_create_alloc_ex (cu->header.length / 12,
+			    partial_die_hash,
+			    partial_die_eq,
+			    NULL,
+			    &cu->comp_unit_obstack,
+			    hashtab_obstack_allocate,
+			    dummy_obstack_deallocate);
+
+  while (1)
+    {
+      const abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr,
+						   &bytes_read);
+
+      /* A NULL abbrev means the end of a series of children.  */
+      if (abbrev == NULL)
+	{
+	  if (--nesting_level == 0)
+	    return first_die;
+
+	  info_ptr += bytes_read;
+	  last_die = parent_die;
+	  parent_die = parent_die->die_parent;
+	  continue;
+	}
+
+      /* Check for template arguments.  We never save these; if
+	 they're seen, we just mark the parent, and go on our way.  */
+      if (parent_die != NULL
+	  && cu->per_cu->lang == language_cplus
+	  && (abbrev->tag == DW_TAG_template_type_param
+	      || abbrev->tag == DW_TAG_template_value_param))
+	{
+	  parent_die->has_template_arguments = 1;
+
+	  if (!load_all)
+	    {
+	      /* We don't need a partial DIE for the template argument.  */
+	      info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
+	      continue;
+	    }
+	}
+
+      /* We only recurse into c++ subprograms looking for template arguments.
+	 Skip their other children.  */
+      if (!load_all
+	  && cu->per_cu->lang == language_cplus
+	  && parent_die != NULL
+	  && parent_die->tag == DW_TAG_subprogram
+	  && abbrev->tag != DW_TAG_inlined_subroutine)
+	{
+	  info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
+	  continue;
+	}
+
+      /* Check whether this DIE is interesting enough to save.  Normally
+	 we would not be interested in members here, but there may be
+	 later variables referencing them via DW_AT_specification (for
+	 static members).  */
+      if (!load_all
+	  && !is_type_tag_for_partial (abbrev->tag, cu->per_cu->lang)
+	  && abbrev->tag != DW_TAG_constant
+	  && abbrev->tag != DW_TAG_enumerator
+	  && abbrev->tag != DW_TAG_subprogram
+	  && abbrev->tag != DW_TAG_inlined_subroutine
+	  && abbrev->tag != DW_TAG_lexical_block
+	  && abbrev->tag != DW_TAG_variable
+	  && abbrev->tag != DW_TAG_namespace
+	  && abbrev->tag != DW_TAG_module
+	  && abbrev->tag != DW_TAG_member
+	  && abbrev->tag != DW_TAG_imported_unit
+	  && abbrev->tag != DW_TAG_imported_declaration)
+	{
+	  /* Otherwise we skip to the next sibling, if any.  */
+	  info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
+	  continue;
+	}
+
+      struct partial_die_info pdi ((sect_offset) (info_ptr - reader->buffer),
+				   abbrev);
+
+      info_ptr = pdi.read (reader, *abbrev, info_ptr + bytes_read);
+
+      /* This two-pass algorithm for processing partial symbols has a
+	 high cost in cache pressure.  Thus, handle some simple cases
+	 here which cover the majority of C partial symbols.  DIEs
+	 which neither have specification tags in them, nor could have
+	 specification tags elsewhere pointing at them, can simply be
+	 processed and discarded.
+
+	 This segment is also optional; scan_partial_symbols and
+	 add_partial_symbol will handle these DIEs if we chain
+	 them in normally.  When compilers which do not emit large
+	 quantities of duplicate debug information are more common,
+	 this code can probably be removed.  */
+
+      /* Any complete simple types at the top level (pretty much all
+	 of them, for a language without namespaces), can be processed
+	 directly.  */
+      if (parent_die == NULL
+	  && pdi.has_specification == 0
+	  && pdi.is_declaration == 0
+	  && ((pdi.tag == DW_TAG_typedef && !pdi.has_children)
+	      || pdi.tag == DW_TAG_base_type
+	      || pdi.tag == DW_TAG_array_type
+	      || pdi.tag == DW_TAG_subrange_type))
+	{
+	  if (building_psymtab && pdi.raw_name != NULL)
+	    add_partial_symbol (&pdi, cu);
+
+	  info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
+	  continue;
+	}
+
+      /* The exception for DW_TAG_typedef with has_children above is
+	 a workaround of GCC PR debug/47510.  In the case of this complaint
+	 type_name_or_error will error on such types later.
+
+	 GDB skipped children of DW_TAG_typedef by the shortcut above and then
+	 it could not find the child DIEs referenced later, this is checked
+	 above.  In correct DWARF DW_TAG_typedef should have no children.  */
+
+      if (pdi.tag == DW_TAG_typedef && pdi.has_children)
+	complaint (_("DW_TAG_typedef has childen - GCC PR debug/47510 bug "
+		     "- DIE at %s [in module %s]"),
+		   sect_offset_str (pdi.sect_off), objfile_name (objfile));
+
+      /* If we're at the second level, and we're an enumerator, and
+	 our parent has no specification (meaning possibly lives in a
+	 namespace elsewhere), then we can add the partial symbol now
+	 instead of queueing it.  */
+      if (pdi.tag == DW_TAG_enumerator
+	  && parent_die != NULL
+	  && parent_die->die_parent == NULL
+	  && parent_die->tag == DW_TAG_enumeration_type
+	  && parent_die->has_specification == 0)
+	{
+	  if (pdi.raw_name == NULL)
+	    complaint (_("malformed enumerator DIE ignored"));
+	  else if (building_psymtab)
+	    add_partial_symbol (&pdi, cu);
+
+	  info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
+	  continue;
+	}
+
+      struct partial_die_info *part_die
+	= new (&cu->comp_unit_obstack) partial_die_info (pdi);
+
+      /* We'll save this DIE so link it in.  */
+      part_die->die_parent = parent_die;
+      part_die->die_sibling = NULL;
+      part_die->die_child = NULL;
+
+      if (last_die && last_die == parent_die)
+	last_die->die_child = part_die;
+      else if (last_die)
+	last_die->die_sibling = part_die;
+
+      last_die = part_die;
+
+      if (first_die == NULL)
+	first_die = part_die;
+
+      /* Maybe add the DIE to the hash table.  Not all DIEs that we
+	 find interesting need to be in the hash table, because we
+	 also have the parent/sibling/child chains; only those that we
+	 might refer to by offset later during partial symbol reading.
+
+	 For now this means things that might have be the target of a
+	 DW_AT_specification, DW_AT_abstract_origin, or
+	 DW_AT_extension.  DW_AT_extension will refer only to
+	 namespaces; DW_AT_abstract_origin refers to functions (and
+	 many things under the function DIE, but we do not recurse
+	 into function DIEs during partial symbol reading) and
+	 possibly variables as well; DW_AT_specification refers to
+	 declarations.  Declarations ought to have the DW_AT_declaration
+	 flag.  It happens that GCC forgets to put it in sometimes, but
+	 only for functions, not for types.
+
+	 Adding more things than necessary to the hash table is harmless
+	 except for the performance cost.  Adding too few will result in
+	 wasted time in find_partial_die, when we reread the compilation
+	 unit with load_all_dies set.  */
+
+      if (load_all
+	  || abbrev->tag == DW_TAG_constant
+	  || abbrev->tag == DW_TAG_subprogram
+	  || abbrev->tag == DW_TAG_variable
+	  || abbrev->tag == DW_TAG_namespace
+	  || part_die->is_declaration)
+	{
+	  void **slot;
+
+	  slot = htab_find_slot_with_hash (cu->partial_dies, part_die,
+					   to_underlying (part_die->sect_off),
+					   INSERT);
+	  *slot = part_die;
+	}
+
+      /* For some DIEs we want to follow their children (if any).  For C
+	 we have no reason to follow the children of structures; for other
+	 languages we have to, so that we can get at method physnames
+	 to infer fully qualified class names, for DW_AT_specification,
+	 and for C++ template arguments.  For C++, we also look one level
+	 inside functions to find template arguments (if the name of the
+	 function does not already contain the template arguments).
+
+	 For Ada and Fortran, we need to scan the children of subprograms
+	 and lexical blocks as well because these languages allow the
+	 definition of nested entities that could be interesting for the
+	 debugger, such as nested subprograms for instance.  */
+      if (last_die->has_children
+	  && (load_all
+	      || last_die->tag == DW_TAG_namespace
+	      || last_die->tag == DW_TAG_module
+	      || last_die->tag == DW_TAG_enumeration_type
+	      || (cu->per_cu->lang == language_cplus
+		  && last_die->tag == DW_TAG_subprogram
+		  && (last_die->raw_name == NULL
+		      || strchr (last_die->raw_name, '<') == NULL))
+	      || (cu->per_cu->lang != language_c
+		  && (last_die->tag == DW_TAG_class_type
+		      || last_die->tag == DW_TAG_interface_type
+		      || last_die->tag == DW_TAG_structure_type
+		      || last_die->tag == DW_TAG_union_type))
+	      || ((cu->per_cu->lang == language_ada
+		   || cu->per_cu->lang == language_fortran)
+		  && (last_die->tag == DW_TAG_subprogram
+		      || last_die->tag == DW_TAG_lexical_block))))
+	{
+	  nesting_level++;
+	  parent_die = last_die;
+	  continue;
+	}
+
+      /* Otherwise we skip to the next sibling, if any.  */
+      info_ptr = locate_pdi_sibling (reader, last_die, info_ptr);
+
+      /* Back to the top, do it again.  */
+    }
+}
+
+partial_die_info::partial_die_info (sect_offset sect_off_,
+				    const struct abbrev_info *abbrev)
+  : partial_die_info (sect_off_, abbrev->tag, abbrev->has_children)
+{
+}
+
+/* See class definition.  */
+
+const char *
+partial_die_info::name (dwarf2_cu *cu)
+{
+  if (!canonical_name && raw_name != nullptr)
+    {
+      struct objfile *objfile = cu->per_objfile->objfile;
+      raw_name = dwarf2_canonicalize_name (raw_name, cu, objfile);
+      canonical_name = 1;
+    }
+
+  return raw_name;
+}
+
+/* Read a minimal amount of information into the minimal die structure.
+   INFO_PTR should point just after the initial uleb128 of a DIE.  */
+
+const gdb_byte *
+partial_die_info::read (const struct die_reader_specs *reader,
+			const struct abbrev_info &abbrev, const gdb_byte *info_ptr)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  unsigned int i;
+  int has_low_pc_attr = 0;
+  int has_high_pc_attr = 0;
+  int high_pc_relative = 0;
+
+  for (i = 0; i < abbrev.num_attrs; ++i)
+    {
+      attribute attr;
+      info_ptr = read_attribute (reader, &attr, &abbrev.attrs[i], info_ptr);
+      /* String and address offsets that need to do the reprocessing have
+	 already been read at this point, so there is no need to wait until
+	 the loop terminates to do the reprocessing.  */
+      if (attr.requires_reprocessing_p ())
+	read_attribute_reprocess (reader, &attr, tag);
+      /* Store the data if it is of an attribute we want to keep in a
+	 partial symbol table.  */
+      switch (attr.name)
+	{
+	case DW_AT_name:
+	  switch (tag)
+	    {
+	    case DW_TAG_compile_unit:
+	    case DW_TAG_partial_unit:
+	    case DW_TAG_type_unit:
+	      /* Compilation units have a DW_AT_name that is a filename, not
+		 a source language identifier.  */
+	    case DW_TAG_enumeration_type:
+	    case DW_TAG_enumerator:
+	      /* These tags always have simple identifiers already; no need
+		 to canonicalize them.  */
+	      canonical_name = 1;
+	      raw_name = attr.as_string ();
+	      break;
+	    default:
+	      canonical_name = 0;
+	      raw_name = attr.as_string ();
+	      break;
+	    }
+	  break;
+	case DW_AT_linkage_name:
+	case DW_AT_MIPS_linkage_name:
+	  /* Note that both forms of linkage name might appear.  We
+	     assume they will be the same, and we only store the last
+	     one we see.  */
+	  linkage_name = attr.as_string ();
+	  break;
+	case DW_AT_low_pc:
+	  has_low_pc_attr = 1;
+	  lowpc = attr.as_address ();
+	  break;
+	case DW_AT_high_pc:
+	  has_high_pc_attr = 1;
+	  highpc = attr.as_address ();
+	  if (cu->header.version >= 4 && attr.form_is_constant ())
+		high_pc_relative = 1;
+	  break;
+	case DW_AT_location:
+	  /* Support the .debug_loc offsets.  */
+	  if (attr.form_is_block ())
+	    {
+	      d.locdesc = attr.as_block ();
+	    }
+	  else if (attr.form_is_section_offset ())
+	    {
+	      dwarf2_complex_location_expr_complaint ();
+	    }
+	  else
+	    {
+	      dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
+						     "partial symbol information");
+	    }
+	  break;
+	case DW_AT_external:
+	  is_external = attr.as_boolean ();
+	  break;
+	case DW_AT_declaration:
+	  is_declaration = attr.as_boolean ();
+	  break;
+	case DW_AT_type:
+	  has_type = 1;
+	  break;
+	case DW_AT_abstract_origin:
+	case DW_AT_specification:
+	case DW_AT_extension:
+	  has_specification = 1;
+	  spec_offset = attr.get_ref_die_offset ();
+	  spec_is_dwz = (attr.form == DW_FORM_GNU_ref_alt
+				   || cu->per_cu->is_dwz);
+	  break;
+	case DW_AT_sibling:
+	  /* Ignore absolute siblings, they might point outside of
+	     the current compile unit.  */
+	  if (attr.form == DW_FORM_ref_addr)
+	    complaint (_("ignoring absolute DW_AT_sibling"));
+	  else
+	    {
+	      const gdb_byte *buffer = reader->buffer;
+	      sect_offset off = attr.get_ref_die_offset ();
+	      const gdb_byte *sibling_ptr = buffer + to_underlying (off);
+
+	      if (sibling_ptr < info_ptr)
+		complaint (_("DW_AT_sibling points backwards"));
+	      else if (sibling_ptr > reader->buffer_end)
+		reader->die_section->overflow_complaint ();
+	      else
+		sibling = sibling_ptr;
+	    }
+	  break;
+	case DW_AT_byte_size:
+	  has_byte_size = 1;
+	  break;
+	case DW_AT_const_value:
+	  has_const_value = 1;
+	  break;
+	case DW_AT_calling_convention:
+	  /* DWARF doesn't provide a way to identify a program's source-level
+	     entry point.  DW_AT_calling_convention attributes are only meant
+	     to describe functions' calling conventions.
+
+	     However, because it's a necessary piece of information in
+	     Fortran, and before DWARF 4 DW_CC_program was the only
+	     piece of debugging information whose definition refers to
+	     a 'main program' at all, several compilers marked Fortran
+	     main programs with DW_CC_program --- even when those
+	     functions use the standard calling conventions.
+
+	     Although DWARF now specifies a way to provide this
+	     information, we support this practice for backward
+	     compatibility.  */
+	  if (attr.constant_value (0) == DW_CC_program
+	      && cu->per_cu->lang == language_fortran)
+	    main_subprogram = 1;
+	  break;
+	case DW_AT_inline:
+	  {
+	    LONGEST value = attr.constant_value (-1);
+	    if (value == DW_INL_inlined
+		|| value == DW_INL_declared_inlined)
+	      may_be_inlined = 1;
+	  }
+	  break;
+
+	case DW_AT_import:
+	  if (tag == DW_TAG_imported_unit)
+	    {
+	      d.sect_off = attr.get_ref_die_offset ();
+	      is_dwz = (attr.form == DW_FORM_GNU_ref_alt
+				  || cu->per_cu->is_dwz);
+	    }
+	  break;
+
+	case DW_AT_main_subprogram:
+	  main_subprogram = attr.as_boolean ();
+	  break;
+
+	case DW_AT_ranges:
+	  {
+	    /* Offset in the .debug_ranges or .debug_rnglist section (depending
+	       on DWARF version).  */
+	    ULONGEST ranges_offset = attr.as_unsigned ();
+
+	    /* See dwarf2_cu::gnu_ranges_base's doc for why we might want to add
+	       this value.  */
+	    if (tag != DW_TAG_compile_unit)
+	      ranges_offset += cu->gnu_ranges_base;
+
+	    if (dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, cu,
+				    nullptr, tag))
+	      has_pc_info = 1;
+	  }
+	  break;
+
+	default:
+	  break;
+	}
+    }
+
+  /* For Ada, if both the name and the linkage name appear, we prefer
+     the latter.  This lets "catch exception" work better, regardless
+     of the order in which the name and linkage name were emitted.
+     Really, though, this is just a workaround for the fact that gdb
+     doesn't store both the name and the linkage name.  */
+  if (cu->per_cu->lang == language_ada && linkage_name != nullptr)
+    raw_name = linkage_name;
+
+  if (high_pc_relative)
+    highpc += lowpc;
+
+  if (has_low_pc_attr && has_high_pc_attr)
+    {
+      /* When using the GNU linker, .gnu.linkonce. sections are used to
+	 eliminate duplicate copies of functions and vtables and such.
+	 The linker will arbitrarily choose one and discard the others.
+	 The AT_*_pc values for such functions refer to local labels in
+	 these sections.  If the section from that file was discarded, the
+	 labels are not in the output, so the relocs get a value of 0.
+	 If this is a discarded function, mark the pc bounds as invalid,
+	 so that GDB will ignore it.  */
+      if (lowpc == 0 && !per_objfile->per_bfd->has_section_at_zero)
+	{
+	  struct objfile *objfile = per_objfile->objfile;
+	  struct gdbarch *gdbarch = objfile->arch ();
+
+	  complaint (_("DW_AT_low_pc %s is zero "
+		       "for DIE at %s [in module %s]"),
+		     paddress (gdbarch, lowpc),
+		     sect_offset_str (sect_off),
+		     objfile_name (objfile));
+	}
+      /* dwarf2_get_pc_bounds has also the strict low < high requirement.  */
+      else if (lowpc >= highpc)
+	{
+	  struct objfile *objfile = per_objfile->objfile;
+	  struct gdbarch *gdbarch = objfile->arch ();
+
+	  complaint (_("DW_AT_low_pc %s is not < DW_AT_high_pc %s "
+		       "for DIE at %s [in module %s]"),
+		     paddress (gdbarch, lowpc),
+		     paddress (gdbarch, highpc),
+		     sect_offset_str (sect_off),
+		     objfile_name (objfile));
+	}
+      else
+	has_pc_info = 1;
+    }
+
+  return info_ptr;
+}
+
+/* Find a cached partial DIE at OFFSET in CU.  */
+
+struct partial_die_info *
+dwarf2_cu::find_partial_die (sect_offset sect_off)
+{
+  struct partial_die_info *lookup_die = NULL;
+  struct partial_die_info part_die (sect_off);
+
+  lookup_die = ((struct partial_die_info *)
+		htab_find_with_hash (partial_dies, &part_die,
+				     to_underlying (sect_off)));
+
+  return lookup_die;
+}
+
+/* Find a partial DIE at OFFSET, which may or may not be in CU,
+   except in the case of .debug_types DIEs which do not reference
+   outside their CU (they do however referencing other types via
+   DW_FORM_ref_sig8).  */
+
+static const struct cu_partial_die_info
+find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct partial_die_info *pd = NULL;
+
+  if (offset_in_dwz == cu->per_cu->is_dwz
+      && cu->header.offset_in_cu_p (sect_off))
+    {
+      pd = cu->find_partial_die (sect_off);
+      if (pd != NULL)
+	return { cu, pd };
+      /* We missed recording what we needed.
+	 Load all dies and try again.  */
+    }
+  else
+    {
+      /* TUs don't reference other CUs/TUs (except via type signatures).  */
+      if (cu->per_cu->is_debug_types)
+	{
+	  error (_("Dwarf Error: Type Unit at offset %s contains"
+		   " external reference to offset %s [in module %s].\n"),
+		 sect_offset_str (cu->header.sect_off), sect_offset_str (sect_off),
+		 bfd_get_filename (objfile->obfd));
+	}
+      dwarf2_per_cu_data *per_cu
+	= dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz,
+					    per_objfile);
+
+      cu = per_objfile->get_cu (per_cu);
+      if (cu == NULL || cu->partial_dies == NULL)
+	load_partial_comp_unit (per_cu, per_objfile, nullptr);
+
+      cu = per_objfile->get_cu (per_cu);
+
+      cu->last_used = 0;
+      pd = cu->find_partial_die (sect_off);
+    }
+
+  /* If we didn't find it, and not all dies have been loaded,
+     load them all and try again.  */
+
+  if (pd == NULL && cu->load_all_dies == 0)
+    {
+      cu->load_all_dies = 1;
+
+      /* This is nasty.  When we reread the DIEs, somewhere up the call chain
+	 THIS_CU->cu may already be in use.  So we can't just free it and
+	 replace its DIEs with the ones we read in.  Instead, we leave those
+	 DIEs alone (which can still be in use, e.g. in scan_partial_symbols),
+	 and clobber THIS_CU->cu->partial_dies with the hash table for the new
+	 set.  */
+      load_partial_comp_unit (cu->per_cu, per_objfile, cu);
+
+      pd = cu->find_partial_die (sect_off);
+    }
+
+  if (pd == NULL)
+    error (_("Dwarf Error: Cannot find DIE at %s [from module %s]\n"),
+		    sect_offset_str (sect_off), bfd_get_filename (objfile->obfd));
+  return { cu, pd };
+}
+
+/* See if we can figure out if the class lives in a namespace.  We do
+   this by looking for a member function; its demangled name will
+   contain namespace info, if there is any.  */
+
+static void
+guess_partial_die_structure_name (struct partial_die_info *struct_pdi,
+				  struct dwarf2_cu *cu)
+{
+  /* NOTE: carlton/2003-10-07: Getting the info this way changes
+     what template types look like, because the demangler
+     frequently doesn't give the same name as the debug info.  We
+     could fix this by only using the demangled name to get the
+     prefix (but see comment in read_structure_type).  */
+
+  struct partial_die_info *real_pdi;
+  struct partial_die_info *child_pdi;
+
+  /* If this DIE (this DIE's specification, if any) has a parent, then
+     we should not do this.  We'll prepend the parent's fully qualified
+     name when we create the partial symbol.  */
+
+  real_pdi = struct_pdi;
+  while (real_pdi->has_specification)
+    {
+      auto res = find_partial_die (real_pdi->spec_offset,
+				   real_pdi->spec_is_dwz, cu);
+      real_pdi = res.pdi;
+      cu = res.cu;
+    }
+
+  if (real_pdi->die_parent != NULL)
+    return;
+
+  for (child_pdi = struct_pdi->die_child;
+       child_pdi != NULL;
+       child_pdi = child_pdi->die_sibling)
+    {
+      if (child_pdi->tag == DW_TAG_subprogram
+	  && child_pdi->linkage_name != NULL)
+	{
+	  gdb::unique_xmalloc_ptr<char> actual_class_name
+	    (cu->language_defn->class_name_from_physname
+	     (child_pdi->linkage_name));
+	  if (actual_class_name != NULL)
+	    {
+	      struct objfile *objfile = cu->per_objfile->objfile;
+	      struct_pdi->raw_name = objfile->intern (actual_class_name.get ());
+	      struct_pdi->canonical_name = 1;
+	    }
+	  break;
+	}
+    }
+}
+
+/* Return true if a DIE with TAG may have the DW_AT_const_value
+   attribute.  */
+
+static bool
+can_have_DW_AT_const_value_p (enum dwarf_tag tag)
+{
+  switch (tag)
+    {
+    case DW_TAG_constant:
+    case DW_TAG_enumerator:
+    case DW_TAG_formal_parameter:
+    case DW_TAG_template_value_param:
+    case DW_TAG_variable:
+      return true;
+    }
+
+  return false;
+}
+
+void
+partial_die_info::fixup (struct dwarf2_cu *cu)
+{
+  /* Once we've fixed up a die, there's no point in doing so again.
+     This also avoids a memory leak if we were to call
+     guess_partial_die_structure_name multiple times.  */
+  if (fixup_called)
+    return;
+
+  /* If we found a reference attribute and the DIE has no name, try
+     to find a name in the referred to DIE.  */
+
+  if (raw_name == NULL && has_specification)
+    {
+      struct partial_die_info *spec_die;
+
+      auto res = find_partial_die (spec_offset, spec_is_dwz, cu);
+      spec_die = res.pdi;
+      cu = res.cu;
+
+      spec_die->fixup (cu);
+
+      if (spec_die->raw_name)
+	{
+	  raw_name = spec_die->raw_name;
+	  canonical_name = spec_die->canonical_name;
+
+	  /* Copy DW_AT_external attribute if it is set.  */
+	  if (spec_die->is_external)
+	    is_external = spec_die->is_external;
+	}
+    }
+
+  if (!has_const_value && has_specification
+      && can_have_DW_AT_const_value_p (tag))
+    {
+      struct partial_die_info *spec_die;
+
+      auto res = find_partial_die (spec_offset, spec_is_dwz, cu);
+      spec_die = res.pdi;
+      cu = res.cu;
+
+      spec_die->fixup (cu);
+
+      if (spec_die->has_const_value)
+	{
+	  /* Copy DW_AT_const_value attribute if it is set.  */
+	  has_const_value = spec_die->has_const_value;
+	}
+    }
+
+  /* Set default names for some unnamed DIEs.  */
+
+  if (raw_name == NULL && tag == DW_TAG_namespace)
+    {
+      raw_name = CP_ANONYMOUS_NAMESPACE_STR;
+      canonical_name = 1;
+    }
+
+  /* If there is no parent die to provide a namespace, and there are
+     children, see if we can determine the namespace from their linkage
+     name.  */
+  if (cu->per_cu->lang == language_cplus
+      && !cu->per_objfile->per_bfd->types.empty ()
+      && die_parent == NULL
+      && has_children
+      && (tag == DW_TAG_class_type
+	  || tag == DW_TAG_structure_type
+	  || tag == DW_TAG_union_type))
+    guess_partial_die_structure_name (this, cu);
+
+  /* GCC might emit a nameless struct or union that has a linkage
+     name.  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510.  */
+  if (raw_name == NULL
+      && (tag == DW_TAG_class_type
+	  || tag == DW_TAG_interface_type
+	  || tag == DW_TAG_structure_type
+	  || tag == DW_TAG_union_type)
+      && linkage_name != NULL)
+    {
+      gdb::unique_xmalloc_ptr<char> demangled
+	(gdb_demangle (linkage_name, DMGL_TYPES));
+      if (demangled != nullptr)
+	{
+	  const char *base;
+
+	  /* Strip any leading namespaces/classes, keep only the base name.
+	     DW_AT_name for named DIEs does not contain the prefixes.  */
+	  base = strrchr (demangled.get (), ':');
+	  if (base && base > demangled.get () && base[-1] == ':')
+	    base++;
+	  else
+	    base = demangled.get ();
+
+	  struct objfile *objfile = cu->per_objfile->objfile;
+	  raw_name = objfile->intern (base);
+	  canonical_name = 1;
+	}
+    }
+
+  fixup_called = 1;
+}
+
+/* Read the .debug_loclists or .debug_rnglists header (they are the same format)
+   contents from the given SECTION in the HEADER.
+
+   HEADER_OFFSET is the offset of the header in the section.  */
+static void
+read_loclists_rnglists_header (struct loclists_rnglists_header *header,
+			       struct dwarf2_section_info *section,
+			       sect_offset header_offset)
+{
+  unsigned int bytes_read;
+  bfd *abfd = section->get_bfd_owner ();
+  const gdb_byte *info_ptr = section->buffer + to_underlying (header_offset);
+
+  header->length = read_initial_length (abfd, info_ptr, &bytes_read);
+  info_ptr += bytes_read;
+
+  header->version = read_2_bytes (abfd, info_ptr);
+  info_ptr += 2;
+
+  header->addr_size = read_1_byte (abfd, info_ptr);
+  info_ptr += 1;
+
+  header->segment_collector_size = read_1_byte (abfd, info_ptr);
+  info_ptr += 1;
+
+  header->offset_entry_count = read_4_bytes (abfd, info_ptr);
+}
+
+/* Return the DW_AT_loclists_base value for the CU.  */
+static ULONGEST
+lookup_loclist_base (struct dwarf2_cu *cu)
+{
+  /* For the .dwo unit, the loclist_base points to the first offset following
+     the header. The header consists of the following entities-
+     1. Unit Length (4 bytes for 32 bit DWARF format, and 12 bytes for the 64
+	 bit format)
+     2. version (2 bytes)
+     3. address size (1 byte)
+     4. segment selector size (1 byte)
+     5. offset entry count (4 bytes)
+     These sizes are derived as per the DWARFv5 standard.  */
+  if (cu->dwo_unit != nullptr)
+    {
+      if (cu->header.initial_length_size == 4)
+	 return LOCLIST_HEADER_SIZE32;
+      return LOCLIST_HEADER_SIZE64;
+    }
+  return cu->loclist_base;
+}
+
+/* Given a DW_FORM_loclistx value LOCLIST_INDEX, fetch the offset from the
+   array of offsets in the .debug_loclists section.  */
+
+static sect_offset
+read_loclist_index (struct dwarf2_cu *cu, ULONGEST loclist_index)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *abfd = objfile->obfd;
+  ULONGEST loclist_header_size =
+    (cu->header.initial_length_size == 4 ? LOCLIST_HEADER_SIZE32
+     : LOCLIST_HEADER_SIZE64);
+  ULONGEST loclist_base = lookup_loclist_base (cu);
+
+  /* Offset in .debug_loclists of the offset for LOCLIST_INDEX.  */
+  ULONGEST start_offset =
+    loclist_base + loclist_index * cu->header.offset_size;
+
+  /* Get loclists section.  */
+  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
+
+  /* Read the loclists section content.  */
+  section->read (objfile);
+  if (section->buffer == NULL)
+    error (_("DW_FORM_loclistx used without .debug_loclists "
+	     "section [in module %s]"), objfile_name (objfile));
+
+  /* DW_AT_loclists_base points after the .debug_loclists contribution header,
+     so if loclist_base is smaller than the header size, we have a problem.  */
+  if (loclist_base < loclist_header_size)
+    error (_("DW_AT_loclists_base is smaller than header size [in module %s]"),
+	   objfile_name (objfile));
+
+  /* Read the header of the loclists contribution.  */
+  struct loclists_rnglists_header header;
+  read_loclists_rnglists_header (&header, section,
+				 (sect_offset) (loclist_base - loclist_header_size));
+
+  /* Verify the loclist index is valid.  */
+  if (loclist_index >= header.offset_entry_count)
+    error (_("DW_FORM_loclistx pointing outside of "
+	     ".debug_loclists offset array [in module %s]"),
+	   objfile_name (objfile));
+
+  /* Validate that reading won't go beyond the end of the section.  */
+  if (start_offset + cu->header.offset_size > section->size)
+    error (_("Reading DW_FORM_loclistx index beyond end of"
+	     ".debug_loclists section [in module %s]"),
+	   objfile_name (objfile));
+
+  const gdb_byte *info_ptr = section->buffer + start_offset;
+
+  if (cu->header.offset_size == 4)
+    return (sect_offset) (bfd_get_32 (abfd, info_ptr) + loclist_base);
+  else
+    return (sect_offset) (bfd_get_64 (abfd, info_ptr) + loclist_base);
+}
+
+/* Given a DW_FORM_rnglistx value RNGLIST_INDEX, fetch the offset from the
+   array of offsets in the .debug_rnglists section.  */
+
+static sect_offset
+read_rnglist_index (struct dwarf2_cu *cu, ULONGEST rnglist_index,
+		    dwarf_tag tag)
+{
+  struct dwarf2_per_objfile *dwarf2_per_objfile = cu->per_objfile;
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  bfd *abfd = objfile->obfd;
+  ULONGEST rnglist_header_size =
+    (cu->header.initial_length_size == 4 ? RNGLIST_HEADER_SIZE32
+     : RNGLIST_HEADER_SIZE64);
+
+  /* When reading a DW_FORM_rnglistx from a DWO, we read from the DWO's
+     .debug_rnglists.dwo section.  The rnglists base given in the skeleton
+     doesn't apply.  */
+  ULONGEST rnglist_base =
+      (cu->dwo_unit != nullptr) ? rnglist_header_size : cu->rnglists_base;
+
+  /* Offset in .debug_rnglists of the offset for RNGLIST_INDEX.  */
+  ULONGEST start_offset =
+    rnglist_base + rnglist_index * cu->header.offset_size;
+
+  /* Get rnglists section.  */
+  struct dwarf2_section_info *section = cu_debug_rnglists_section (cu, tag);
+
+  /* Read the rnglists section content.  */
+  section->read (objfile);
+  if (section->buffer == nullptr)
+    error (_("DW_FORM_rnglistx used without .debug_rnglists section "
+	     "[in module %s]"),
+	   objfile_name (objfile));
+
+  /* DW_AT_rnglists_base points after the .debug_rnglists contribution header,
+     so if rnglist_base is smaller than the header size, we have a problem.  */
+  if (rnglist_base < rnglist_header_size)
+    error (_("DW_AT_rnglists_base is smaller than header size [in module %s]"),
+	   objfile_name (objfile));
+
+  /* Read the header of the rnglists contribution.  */
+  struct loclists_rnglists_header header;
+  read_loclists_rnglists_header (&header, section,
+				 (sect_offset) (rnglist_base - rnglist_header_size));
+
+  /* Verify the rnglist index is valid.  */
+  if (rnglist_index >= header.offset_entry_count)
+    error (_("DW_FORM_rnglistx index pointing outside of "
+	     ".debug_rnglists offset array [in module %s]"),
+	   objfile_name (objfile));
+
+  /* Validate that reading won't go beyond the end of the section.  */
+  if (start_offset + cu->header.offset_size > section->size)
+    error (_("Reading DW_FORM_rnglistx index beyond end of"
+	     ".debug_rnglists section [in module %s]"),
+	   objfile_name (objfile));
+
+  const gdb_byte *info_ptr = section->buffer + start_offset;
+
+  if (cu->header.offset_size == 4)
+    return (sect_offset) (read_4_bytes (abfd, info_ptr) + rnglist_base);
+  else
+    return (sect_offset) (read_8_bytes (abfd, info_ptr) + rnglist_base);
+}
+
+/* Process the attributes that had to be skipped in the first round. These
+   attributes are the ones that need str_offsets_base or addr_base attributes.
+   They could not have been processed in the first round, because at the time
+   the values of str_offsets_base or addr_base may not have been known.  */
+static void
+read_attribute_reprocess (const struct die_reader_specs *reader,
+			  struct attribute *attr, dwarf_tag tag)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  switch (attr->form)
+    {
+      case DW_FORM_addrx:
+      case DW_FORM_GNU_addr_index:
+	attr->set_address (read_addr_index (cu,
+					    attr->as_unsigned_reprocess ()));
+	break;
+      case DW_FORM_loclistx:
+	{
+	  sect_offset loclists_sect_off
+	    = read_loclist_index (cu, attr->as_unsigned_reprocess ());
+
+	  attr->set_unsigned (to_underlying (loclists_sect_off));
+	}
+	break;
+      case DW_FORM_rnglistx:
+	{
+	  sect_offset rnglists_sect_off
+	    = read_rnglist_index (cu, attr->as_unsigned_reprocess (), tag);
+
+	  attr->set_unsigned (to_underlying (rnglists_sect_off));
+	}
+	break;
+      case DW_FORM_strx:
+      case DW_FORM_strx1:
+      case DW_FORM_strx2:
+      case DW_FORM_strx3:
+      case DW_FORM_strx4:
+      case DW_FORM_GNU_str_index:
+	{
+	  unsigned int str_index = attr->as_unsigned_reprocess ();
+	  gdb_assert (!attr->canonical_string_p ());
+	  if (reader->dwo_file != NULL)
+	    attr->set_string_noncanonical (read_dwo_str_index (reader,
+							       str_index));
+	  else
+	    attr->set_string_noncanonical (read_stub_str_index (cu,
+								str_index));
+	  break;
+	}
+      default:
+	gdb_assert_not_reached (_("Unexpected DWARF form."));
+    }
+}
+
+/* Read an attribute value described by an attribute form.  */
+
+static const gdb_byte *
+read_attribute_value (const struct die_reader_specs *reader,
+		      struct attribute *attr, unsigned form,
+		      LONGEST implicit_const, const gdb_byte *info_ptr)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *abfd = reader->abfd;
+  struct comp_unit_head *cu_header = &cu->header;
+  unsigned int bytes_read;
+  struct dwarf_block *blk;
+
+  attr->form = (enum dwarf_form) form;
+  switch (form)
+    {
+    case DW_FORM_ref_addr:
+      if (cu_header->version == 2)
+	attr->set_unsigned (cu_header->read_address (abfd, info_ptr,
+						     &bytes_read));
+      else
+	attr->set_unsigned (cu_header->read_offset (abfd, info_ptr,
+						    &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_GNU_ref_alt:
+      attr->set_unsigned (cu_header->read_offset (abfd, info_ptr,
+						  &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_addr:
+      {
+	struct gdbarch *gdbarch = objfile->arch ();
+	CORE_ADDR addr = cu_header->read_address (abfd, info_ptr, &bytes_read);
+	addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr);
+	attr->set_address (addr);
+	info_ptr += bytes_read;
+      }
+      break;
+    case DW_FORM_block2:
+      blk = dwarf_alloc_block (cu);
+      blk->size = read_2_bytes (abfd, info_ptr);
+      info_ptr += 2;
+      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
+      info_ptr += blk->size;
+      attr->set_block (blk);
+      break;
+    case DW_FORM_block4:
+      blk = dwarf_alloc_block (cu);
+      blk->size = read_4_bytes (abfd, info_ptr);
+      info_ptr += 4;
+      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
+      info_ptr += blk->size;
+      attr->set_block (blk);
+      break;
+    case DW_FORM_data2:
+      attr->set_unsigned (read_2_bytes (abfd, info_ptr));
+      info_ptr += 2;
+      break;
+    case DW_FORM_data4:
+      attr->set_unsigned (read_4_bytes (abfd, info_ptr));
+      info_ptr += 4;
+      break;
+    case DW_FORM_data8:
+      attr->set_unsigned (read_8_bytes (abfd, info_ptr));
+      info_ptr += 8;
+      break;
+    case DW_FORM_data16:
+      blk = dwarf_alloc_block (cu);
+      blk->size = 16;
+      blk->data = read_n_bytes (abfd, info_ptr, 16);
+      info_ptr += 16;
+      attr->set_block (blk);
+      break;
+    case DW_FORM_sec_offset:
+      attr->set_unsigned (cu_header->read_offset (abfd, info_ptr,
+						  &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_loclistx:
+      {
+	attr->set_unsigned_reprocess (read_unsigned_leb128 (abfd, info_ptr,
+							    &bytes_read));
+	info_ptr += bytes_read;
+      }
+      break;
+    case DW_FORM_string:
+      attr->set_string_noncanonical (read_direct_string (abfd, info_ptr,
+							 &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_strp:
+      if (!cu->per_cu->is_dwz)
+	{
+	  attr->set_string_noncanonical
+	    (read_indirect_string (per_objfile,
+				   abfd, info_ptr, cu_header,
+				   &bytes_read));
+	  info_ptr += bytes_read;
+	  break;
+	}
+      /* FALLTHROUGH */
+    case DW_FORM_line_strp:
+      if (!cu->per_cu->is_dwz)
+	{
+	  attr->set_string_noncanonical
+	    (per_objfile->read_line_string (info_ptr, cu_header,
+					    &bytes_read));
+	  info_ptr += bytes_read;
+	  break;
+	}
+      /* FALLTHROUGH */
+    case DW_FORM_GNU_strp_alt:
+      {
+	dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd, true);
+	LONGEST str_offset = cu_header->read_offset (abfd, info_ptr,
+						     &bytes_read);
+
+	attr->set_string_noncanonical
+	  (dwz->read_string (objfile, str_offset));
+	info_ptr += bytes_read;
+      }
+      break;
+    case DW_FORM_exprloc:
+    case DW_FORM_block:
+      blk = dwarf_alloc_block (cu);
+      blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+      info_ptr += bytes_read;
+      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
+      info_ptr += blk->size;
+      attr->set_block (blk);
+      break;
+    case DW_FORM_block1:
+      blk = dwarf_alloc_block (cu);
+      blk->size = read_1_byte (abfd, info_ptr);
+      info_ptr += 1;
+      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
+      info_ptr += blk->size;
+      attr->set_block (blk);
+      break;
+    case DW_FORM_data1:
+    case DW_FORM_flag:
+      attr->set_unsigned (read_1_byte (abfd, info_ptr));
+      info_ptr += 1;
+      break;
+    case DW_FORM_flag_present:
+      attr->set_unsigned (1);
+      break;
+    case DW_FORM_sdata:
+      attr->set_signed (read_signed_leb128 (abfd, info_ptr, &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_rnglistx:
+      {
+	attr->set_unsigned_reprocess (read_unsigned_leb128 (abfd, info_ptr,
+							    &bytes_read));
+	info_ptr += bytes_read;
+      }
+      break;
+    case DW_FORM_udata:
+      attr->set_unsigned (read_unsigned_leb128 (abfd, info_ptr, &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_ref1:
+      attr->set_unsigned ((to_underlying (cu_header->sect_off)
+			   + read_1_byte (abfd, info_ptr)));
+      info_ptr += 1;
+      break;
+    case DW_FORM_ref2:
+      attr->set_unsigned ((to_underlying (cu_header->sect_off)
+			   + read_2_bytes (abfd, info_ptr)));
+      info_ptr += 2;
+      break;
+    case DW_FORM_ref4:
+      attr->set_unsigned ((to_underlying (cu_header->sect_off)
+			   + read_4_bytes (abfd, info_ptr)));
+      info_ptr += 4;
+      break;
+    case DW_FORM_ref8:
+      attr->set_unsigned ((to_underlying (cu_header->sect_off)
+			   + read_8_bytes (abfd, info_ptr)));
+      info_ptr += 8;
+      break;
+    case DW_FORM_ref_sig8:
+      attr->set_signature (read_8_bytes (abfd, info_ptr));
+      info_ptr += 8;
+      break;
+    case DW_FORM_ref_udata:
+      attr->set_unsigned ((to_underlying (cu_header->sect_off)
+			   + read_unsigned_leb128 (abfd, info_ptr,
+						   &bytes_read)));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_indirect:
+      form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+      info_ptr += bytes_read;
+      if (form == DW_FORM_implicit_const)
+	{
+	  implicit_const = read_signed_leb128 (abfd, info_ptr, &bytes_read);
+	  info_ptr += bytes_read;
+	}
+      info_ptr = read_attribute_value (reader, attr, form, implicit_const,
+				       info_ptr);
+      break;
+    case DW_FORM_implicit_const:
+      attr->set_signed (implicit_const);
+      break;
+    case DW_FORM_addrx:
+    case DW_FORM_GNU_addr_index:
+      attr->set_unsigned_reprocess (read_unsigned_leb128 (abfd, info_ptr,
+							  &bytes_read));
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_strx:
+    case DW_FORM_strx1:
+    case DW_FORM_strx2:
+    case DW_FORM_strx3:
+    case DW_FORM_strx4:
+    case DW_FORM_GNU_str_index:
+      {
+	ULONGEST str_index;
+	if (form == DW_FORM_strx1)
+	  {
+	    str_index = read_1_byte (abfd, info_ptr);
+	    info_ptr += 1;
+	  }
+	else if (form == DW_FORM_strx2)
+	  {
+	    str_index = read_2_bytes (abfd, info_ptr);
+	    info_ptr += 2;
+	  }
+	else if (form == DW_FORM_strx3)
+	  {
+	    str_index = read_3_bytes (abfd, info_ptr);
+	    info_ptr += 3;
+	  }
+	else if (form == DW_FORM_strx4)
+	  {
+	    str_index = read_4_bytes (abfd, info_ptr);
+	    info_ptr += 4;
+	  }
+	else
+	  {
+	    str_index = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+	    info_ptr += bytes_read;
+	  }
+	attr->set_unsigned_reprocess (str_index);
+      }
+      break;
+    default:
+      error (_("Dwarf Error: Cannot handle %s in DWARF reader [in module %s]"),
+	     dwarf_form_name (form),
+	     bfd_get_filename (abfd));
+    }
+
+  /* Super hack.  */
+  if (cu->per_cu->is_dwz && attr->form_is_ref ())
+    attr->form = DW_FORM_GNU_ref_alt;
+
+  /* We have seen instances where the compiler tried to emit a byte
+     size attribute of -1 which ended up being encoded as an unsigned
+     0xffffffff.  Although 0xffffffff is technically a valid size value,
+     an object of this size seems pretty unlikely so we can relatively
+     safely treat these cases as if the size attribute was invalid and
+     treat them as zero by default.  */
+  if (attr->name == DW_AT_byte_size
+      && form == DW_FORM_data4
+      && attr->as_unsigned () >= 0xffffffff)
+    {
+      complaint
+	(_("Suspicious DW_AT_byte_size value treated as zero instead of %s"),
+	 hex_string (attr->as_unsigned ()));
+      attr->set_unsigned (0);
+    }
+
+  return info_ptr;
+}
+
+/* Read an attribute described by an abbreviated attribute.  */
+
+static const gdb_byte *
+read_attribute (const struct die_reader_specs *reader,
+		struct attribute *attr, const struct attr_abbrev *abbrev,
+		const gdb_byte *info_ptr)
+{
+  attr->name = abbrev->name;
+  attr->string_is_canonical = 0;
+  attr->requires_reprocessing = 0;
+  return read_attribute_value (reader, attr, abbrev->form,
+			       abbrev->implicit_const, info_ptr);
+}
+
+/* Return pointer to string at .debug_str offset STR_OFFSET.  */
+
+static const char *
+read_indirect_string_at_offset (dwarf2_per_objfile *per_objfile,
+				LONGEST str_offset)
+{
+  return per_objfile->per_bfd->str.read_string (per_objfile->objfile,
+						str_offset, "DW_FORM_strp");
+}
+
+/* Return pointer to string at .debug_str offset as read from BUF.
+   BUF is assumed to be in a compilation unit described by CU_HEADER.
+   Return *BYTES_READ_PTR count of bytes read from BUF.  */
+
+static const char *
+read_indirect_string (dwarf2_per_objfile *per_objfile, bfd *abfd,
+		      const gdb_byte *buf,
+		      const struct comp_unit_head *cu_header,
+		      unsigned int *bytes_read_ptr)
+{
+  LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr);
+
+  return read_indirect_string_at_offset (per_objfile, str_offset);
+}
+
+/* See read.h.  */
+
+const char *
+dwarf2_per_objfile::read_line_string (const gdb_byte *buf,
+				      const struct comp_unit_head *cu_header,
+				      unsigned int *bytes_read_ptr)
+{
+  bfd *abfd = objfile->obfd;
+  LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr);
+
+  return per_bfd->line_str.read_string (objfile, str_offset, "DW_FORM_line_strp");
+}
+
+/* Given index ADDR_INDEX in .debug_addr, fetch the value.
+   ADDR_BASE is the DW_AT_addr_base (DW_AT_GNU_addr_base) attribute or zero.
+   ADDR_SIZE is the size of addresses from the CU header.  */
+
+static CORE_ADDR
+read_addr_index_1 (dwarf2_per_objfile *per_objfile, unsigned int addr_index,
+		   gdb::optional<ULONGEST> addr_base, int addr_size)
+{
+  struct objfile *objfile = per_objfile->objfile;
+  bfd *abfd = objfile->obfd;
+  const gdb_byte *info_ptr;
+  ULONGEST addr_base_or_zero = addr_base.has_value () ? *addr_base : 0;
+
+  per_objfile->per_bfd->addr.read (objfile);
+  if (per_objfile->per_bfd->addr.buffer == NULL)
+    error (_("DW_FORM_addr_index used without .debug_addr section [in module %s]"),
+	   objfile_name (objfile));
+  if (addr_base_or_zero + addr_index * addr_size
+      >= per_objfile->per_bfd->addr.size)
+    error (_("DW_FORM_addr_index pointing outside of "
+	     ".debug_addr section [in module %s]"),
+	   objfile_name (objfile));
+  info_ptr = (per_objfile->per_bfd->addr.buffer + addr_base_or_zero
+	      + addr_index * addr_size);
+  if (addr_size == 4)
+    return bfd_get_32 (abfd, info_ptr);
+  else
+    return bfd_get_64 (abfd, info_ptr);
+}
+
+/* Given index ADDR_INDEX in .debug_addr, fetch the value.  */
+
+static CORE_ADDR
+read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index)
+{
+  return read_addr_index_1 (cu->per_objfile, addr_index,
+			    cu->addr_base, cu->header.addr_size);
+}
+
+/* Given a pointer to an leb128 value, fetch the value from .debug_addr.  */
+
+static CORE_ADDR
+read_addr_index_from_leb128 (struct dwarf2_cu *cu, const gdb_byte *info_ptr,
+			     unsigned int *bytes_read)
+{
+  bfd *abfd = cu->per_objfile->objfile->obfd;
+  unsigned int addr_index = read_unsigned_leb128 (abfd, info_ptr, bytes_read);
+
+  return read_addr_index (cu, addr_index);
+}
+
+/* See read.h.  */
+
+CORE_ADDR
+dwarf2_read_addr_index (dwarf2_per_cu_data *per_cu,
+			dwarf2_per_objfile *per_objfile,
+			unsigned int addr_index)
+{
+  struct dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+  gdb::optional<ULONGEST> addr_base;
+  int addr_size;
+
+  /* We need addr_base and addr_size.
+     If we don't have PER_CU->cu, we have to get it.
+     Nasty, but the alternative is storing the needed info in PER_CU,
+     which at this point doesn't seem justified: it's not clear how frequently
+     it would get used and it would increase the size of every PER_CU.
+     Entry points like dwarf2_per_cu_addr_size do a similar thing
+     so we're not in uncharted territory here.
+     Alas we need to be a bit more complicated as addr_base is contained
+     in the DIE.
+
+     We don't need to read the entire CU(/TU).
+     We just need the header and top level die.
+
+     IWBN to use the aging mechanism to let us lazily later discard the CU.
+     For now we skip this optimization.  */
+
+  if (cu != NULL)
+    {
+      addr_base = cu->addr_base;
+      addr_size = cu->header.addr_size;
+    }
+  else
+    {
+      cutu_reader reader (per_cu, per_objfile, nullptr, nullptr, false);
+      addr_base = reader.cu->addr_base;
+      addr_size = reader.cu->header.addr_size;
+    }
+
+  return read_addr_index_1 (per_objfile, addr_index, addr_base, addr_size);
+}
+
+/* Given a DW_FORM_GNU_str_index value STR_INDEX, fetch the string.
+   STR_SECTION, STR_OFFSETS_SECTION can be from a Fission stub or a
+   DWO file.  */
+
+static const char *
+read_str_index (struct dwarf2_cu *cu,
+		struct dwarf2_section_info *str_section,
+		struct dwarf2_section_info *str_offsets_section,
+		ULONGEST str_offsets_base, ULONGEST str_index)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  const char *objf_name = objfile_name (objfile);
+  bfd *abfd = objfile->obfd;
+  const gdb_byte *info_ptr;
+  ULONGEST str_offset;
+  static const char form_name[] = "DW_FORM_GNU_str_index or DW_FORM_strx";
+
+  str_section->read (objfile);
+  str_offsets_section->read (objfile);
+  if (str_section->buffer == NULL)
+    error (_("%s used without %s section"
+	     " in CU at offset %s [in module %s]"),
+	   form_name, str_section->get_name (),
+	   sect_offset_str (cu->header.sect_off), objf_name);
+  if (str_offsets_section->buffer == NULL)
+    error (_("%s used without %s section"
+	     " in CU at offset %s [in module %s]"),
+	   form_name, str_section->get_name (),
+	   sect_offset_str (cu->header.sect_off), objf_name);
+  info_ptr = (str_offsets_section->buffer
+	      + str_offsets_base
+	      + str_index * cu->header.offset_size);
+  if (cu->header.offset_size == 4)
+    str_offset = bfd_get_32 (abfd, info_ptr);
+  else
+    str_offset = bfd_get_64 (abfd, info_ptr);
+  if (str_offset >= str_section->size)
+    error (_("Offset from %s pointing outside of"
+	     " .debug_str.dwo section in CU at offset %s [in module %s]"),
+	   form_name, sect_offset_str (cu->header.sect_off), objf_name);
+  return (const char *) (str_section->buffer + str_offset);
+}
+
+/* Given a DW_FORM_GNU_str_index from a DWO file, fetch the string.  */
+
+static const char *
+read_dwo_str_index (const struct die_reader_specs *reader, ULONGEST str_index)
+{
+  ULONGEST str_offsets_base = reader->cu->header.version >= 5
+			      ? reader->cu->header.addr_size : 0;
+  return read_str_index (reader->cu,
+			 &reader->dwo_file->sections.str,
+			 &reader->dwo_file->sections.str_offsets,
+			 str_offsets_base, str_index);
+}
+
+/* Given a DW_FORM_GNU_str_index from a Fission stub, fetch the string.  */
+
+static const char *
+read_stub_str_index (struct dwarf2_cu *cu, ULONGEST str_index)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  const char *objf_name = objfile_name (objfile);
+  static const char form_name[] = "DW_FORM_GNU_str_index";
+  static const char str_offsets_attr_name[] = "DW_AT_str_offsets";
+
+  if (!cu->str_offsets_base.has_value ())
+    error (_("%s used in Fission stub without %s"
+	     " in CU at offset 0x%lx [in module %s]"),
+	   form_name, str_offsets_attr_name,
+	   (long) cu->header.offset_size, objf_name);
+
+  return read_str_index (cu,
+			 &cu->per_objfile->per_bfd->str,
+			 &cu->per_objfile->per_bfd->str_offsets,
+			 *cu->str_offsets_base, str_index);
+}
+
+/* Return the length of an LEB128 number in BUF.  */
+
+static int
+leb128_size (const gdb_byte *buf)
+{
+  const gdb_byte *begin = buf;
+  gdb_byte byte;
+
+  while (1)
+    {
+      byte = *buf++;
+      if ((byte & 128) == 0)
+	return buf - begin;
+    }
+}
+
+static enum language
+dwarf_lang_to_enum_language (unsigned int lang)
+{
+  enum language language;
+
+  switch (lang)
+    {
+    case DW_LANG_C89:
+    case DW_LANG_C99:
+    case DW_LANG_C11:
+    case DW_LANG_C:
+    case DW_LANG_UPC:
+      language = language_c;
+      break;
+    case DW_LANG_Java:
+    case DW_LANG_C_plus_plus:
+    case DW_LANG_C_plus_plus_11:
+    case DW_LANG_C_plus_plus_14:
+      language = language_cplus;
+      break;
+    case DW_LANG_D:
+      language = language_d;
+      break;
+    case DW_LANG_Fortran77:
+    case DW_LANG_Fortran90:
+    case DW_LANG_Fortran95:
+    case DW_LANG_Fortran03:
+    case DW_LANG_Fortran08:
+      language = language_fortran;
+      break;
+    case DW_LANG_Go:
+      language = language_go;
+      break;
+    case DW_LANG_Mips_Assembler:
+      language = language_asm;
+      break;
+    case DW_LANG_Ada83:
+    case DW_LANG_Ada95:
+      language = language_ada;
+      break;
+    case DW_LANG_Modula2:
+      language = language_m2;
+      break;
+    case DW_LANG_Pascal83:
+      language = language_pascal;
+      break;
+    case DW_LANG_ObjC:
+      language = language_objc;
+      break;
+    case DW_LANG_Rust:
+    case DW_LANG_Rust_old:
+      language = language_rust;
+      break;
+    case DW_LANG_OpenCL:
+      language = language_opencl;
+      break;
+    case DW_LANG_Cobol74:
+    case DW_LANG_Cobol85:
+    default:
+      language = language_minimal;
+      break;
+    }
+
+  return language;
+}
+
+/* Return the named attribute or NULL if not there.  */
+
+static struct attribute *
+dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
+{
+  for (;;)
+    {
+      unsigned int i;
+      struct attribute *spec = NULL;
+
+      for (i = 0; i < die->num_attrs; ++i)
+	{
+	  if (die->attrs[i].name == name)
+	    return &die->attrs[i];
+	  if (die->attrs[i].name == DW_AT_specification
+	      || die->attrs[i].name == DW_AT_abstract_origin)
+	    spec = &die->attrs[i];
+	}
+
+      if (!spec)
+	break;
+
+      die = follow_die_ref (die, spec, &cu);
+    }
+
+  return NULL;
+}
+
+/* Return the string associated with a string-typed attribute, or NULL if it
+   is either not found or is of an incorrect type.  */
+
+static const char *
+dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+  const char *str = NULL;
+
+  attr = dwarf2_attr (die, name, cu);
+
+  if (attr != NULL)
+    {
+      str = attr->as_string ();
+      if (str == nullptr)
+	complaint (_("string type expected for attribute %s for "
+		     "DIE at %s in module %s"),
+		   dwarf_attr_name (name), sect_offset_str (die->sect_off),
+		   objfile_name (cu->per_objfile->objfile));
+    }
+
+  return str;
+}
+
+/* Return the dwo name or NULL if not present. If present, it is in either
+   DW_AT_GNU_dwo_name or DW_AT_dwo_name attribute.  */
+static const char *
+dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu)
+{
+  const char *dwo_name = dwarf2_string_attr (die, DW_AT_GNU_dwo_name, cu);
+  if (dwo_name == nullptr)
+    dwo_name = dwarf2_string_attr (die, DW_AT_dwo_name, cu);
+  return dwo_name;
+}
+
+/* Return non-zero iff the attribute NAME is defined for the given DIE,
+   and holds a non-zero value.  This function should only be used for
+   DW_FORM_flag or DW_FORM_flag_present attributes.  */
+
+static int
+dwarf2_flag_true_p (struct die_info *die, unsigned name, struct dwarf2_cu *cu)
+{
+  struct attribute *attr = dwarf2_attr (die, name, cu);
+
+  return attr != nullptr && attr->as_boolean ();
+}
+
+static int
+die_is_declaration (struct die_info *die, struct dwarf2_cu *cu)
+{
+  /* A DIE is a declaration if it has a DW_AT_declaration attribute
+     which value is non-zero.  However, we have to be careful with
+     DIEs having a DW_AT_specification attribute, because dwarf2_attr()
+     (via dwarf2_flag_true_p) follows this attribute.  So we may
+     end up accidently finding a declaration attribute that belongs
+     to a different DIE referenced by the specification attribute,
+     even though the given DIE does not have a declaration attribute.  */
+  return (dwarf2_flag_true_p (die, DW_AT_declaration, cu)
+	  && dwarf2_attr (die, DW_AT_specification, cu) == NULL);
+}
+
+/* Return the die giving the specification for DIE, if there is
+   one.  *SPEC_CU is the CU containing DIE on input, and the CU
+   containing the return value on output.  If there is no
+   specification, but there is an abstract origin, that is
+   returned.  */
+
+static struct die_info *
+die_specification (struct die_info *die, struct dwarf2_cu **spec_cu)
+{
+  struct attribute *spec_attr = dwarf2_attr (die, DW_AT_specification,
+					     *spec_cu);
+
+  if (spec_attr == NULL)
+    spec_attr = dwarf2_attr (die, DW_AT_abstract_origin, *spec_cu);
+
+  if (spec_attr == NULL)
+    return NULL;
+  else
+    return follow_die_ref (die, spec_attr, spec_cu);
+}
+
+/* A convenience function to find the proper .debug_line section for a CU.  */
+
+static struct dwarf2_section_info *
+get_debug_line_section (struct dwarf2_cu *cu)
+{
+  struct dwarf2_section_info *section;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+  /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the
+     DWO file.  */
+  if (cu->dwo_unit && cu->per_cu->is_debug_types)
+    section = &cu->dwo_unit->dwo_file->sections.line;
+  else if (cu->per_cu->is_dwz)
+    {
+      dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd, true);
+
+      section = &dwz->line;
+    }
+  else
+    section = &per_objfile->per_bfd->line;
+
+  return section;
+}
+
+/* Read the statement program header starting at OFFSET in
+   .debug_line, or .debug_line.dwo.  Return a pointer
+   to a struct line_header, allocated using xmalloc.
+   Returns NULL if there is a problem reading the header, e.g., if it
+   has a version we don't understand.
+
+   NOTE: the strings in the include directory and file name tables of
+   the returned object point into the dwarf line section buffer,
+   and must not be freed.  */
+
+static line_header_up
+dwarf_decode_line_header (sect_offset sect_off, struct dwarf2_cu *cu)
+{
+  struct dwarf2_section_info *section;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+  section = get_debug_line_section (cu);
+  section->read (per_objfile->objfile);
+  if (section->buffer == NULL)
+    {
+      if (cu->dwo_unit && cu->per_cu->is_debug_types)
+	complaint (_("missing .debug_line.dwo section"));
+      else
+	complaint (_("missing .debug_line section"));
+      return 0;
+    }
+
+  return dwarf_decode_line_header (sect_off, cu->per_cu->is_dwz,
+				   per_objfile, section, &cu->header);
+}
+
+/* Subroutine of dwarf_decode_lines to simplify it.
+   Return the file name of the psymtab for the given file_entry.
+   COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown.
+   If space for the result is malloc'd, *NAME_HOLDER will be set.
+   Returns NULL if FILE_INDEX should be ignored, i.e., it is pst->filename.  */
+
+static const char *
+psymtab_include_file_name (const struct line_header *lh, const file_entry &fe,
+			   const dwarf2_psymtab *pst,
+			   const char *comp_dir,
+			   gdb::unique_xmalloc_ptr<char> *name_holder)
+{
+  const char *include_name = fe.name;
+  const char *include_name_to_compare = include_name;
+  const char *pst_filename;
+  int file_is_pst;
+
+  const char *dir_name = fe.include_dir (lh);
+
+  gdb::unique_xmalloc_ptr<char> hold_compare;
+  if (!IS_ABSOLUTE_PATH (include_name)
+      && (dir_name != NULL || comp_dir != NULL))
+    {
+      /* Avoid creating a duplicate psymtab for PST.
+	 We do this by comparing INCLUDE_NAME and PST_FILENAME.
+	 Before we do the comparison, however, we need to account
+	 for DIR_NAME and COMP_DIR.
+	 First prepend dir_name (if non-NULL).  If we still don't
+	 have an absolute path prepend comp_dir (if non-NULL).
+	 However, the directory we record in the include-file's
+	 psymtab does not contain COMP_DIR (to match the
+	 corresponding symtab(s)).
+
+	 Example:
+
+	 bash$ cd /tmp
+	 bash$ gcc -g ./hello.c
+	 include_name = "hello.c"
+	 dir_name = "."
+	 DW_AT_comp_dir = comp_dir = "/tmp"
+	 DW_AT_name = "./hello.c"
+
+      */
+
+      if (dir_name != NULL)
+	{
+	  name_holder->reset (concat (dir_name, SLASH_STRING,
+				      include_name, (char *) NULL));
+	  include_name = name_holder->get ();
+	  include_name_to_compare = include_name;
+	}
+      if (!IS_ABSOLUTE_PATH (include_name) && comp_dir != NULL)
+	{
+	  hold_compare.reset (concat (comp_dir, SLASH_STRING,
+				      include_name, (char *) NULL));
+	  include_name_to_compare = hold_compare.get ();
+	}
+    }
+
+  pst_filename = pst->filename;
+  gdb::unique_xmalloc_ptr<char> copied_name;
+  if (!IS_ABSOLUTE_PATH (pst_filename) && pst->dirname != NULL)
+    {
+      copied_name.reset (concat (pst->dirname, SLASH_STRING,
+				 pst_filename, (char *) NULL));
+      pst_filename = copied_name.get ();
+    }
+
+  file_is_pst = FILENAME_CMP (include_name_to_compare, pst_filename) == 0;
+
+  if (file_is_pst)
+    return NULL;
+  return include_name;
+}
+
+/* State machine to track the state of the line number program.  */
+
+class lnp_state_machine
+{
+public:
+  /* Initialize a machine state for the start of a line number
+     program.  */
+  lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, line_header *lh,
+		     bool record_lines_p);
+
+  file_entry *current_file ()
+  {
+    /* lh->file_names is 0-based, but the file name numbers in the
+       statement program are 1-based.  */
+    return m_line_header->file_name_at (m_file);
+  }
+
+  /* Record the line in the state machine.  END_SEQUENCE is true if
+     we're processing the end of a sequence.  */
+  void record_line (bool end_sequence);
+
+  /* Check ADDRESS is -1, or zero and less than UNRELOCATED_LOWPC, and if true
+     nop-out rest of the lines in this sequence.  */
+  void check_line_address (struct dwarf2_cu *cu,
+			   const gdb_byte *line_ptr,
+			   CORE_ADDR unrelocated_lowpc, CORE_ADDR address);
+
+  void handle_set_discriminator (unsigned int discriminator)
+  {
+    m_discriminator = discriminator;
+    m_line_has_non_zero_discriminator |= discriminator != 0;
+  }
+
+  /* Handle DW_LNE_set_address.  */
+  void handle_set_address (CORE_ADDR baseaddr, CORE_ADDR address)
+  {
+    m_op_index = 0;
+    address += baseaddr;
+    m_address = gdbarch_adjust_dwarf2_line (m_gdbarch, address, false);
+  }
+
+  /* Handle DW_LNS_advance_pc.  */
+  void handle_advance_pc (CORE_ADDR adjust);
+
+  /* Handle a special opcode.  */
+  void handle_special_opcode (unsigned char op_code);
+
+  /* Handle DW_LNS_advance_line.  */
+  void handle_advance_line (int line_delta)
+  {
+    advance_line (line_delta);
+  }
+
+  /* Handle DW_LNS_set_file.  */
+  void handle_set_file (file_name_index file);
+
+  /* Handle DW_LNS_negate_stmt.  */
+  void handle_negate_stmt ()
+  {
+    m_is_stmt = !m_is_stmt;
+  }
+
+  /* Handle DW_LNS_const_add_pc.  */
+  void handle_const_add_pc ();
+
+  /* Handle DW_LNS_fixed_advance_pc.  */
+  void handle_fixed_advance_pc (CORE_ADDR addr_adj)
+  {
+    m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
+    m_op_index = 0;
+  }
+
+  /* Handle DW_LNS_copy.  */
+  void handle_copy ()
+  {
+    record_line (false);
+    m_discriminator = 0;
+  }
+
+  /* Handle DW_LNE_end_sequence.  */
+  void handle_end_sequence ()
+  {
+    m_currently_recording_lines = true;
+  }
+
+private:
+  /* Advance the line by LINE_DELTA.  */
+  void advance_line (int line_delta)
+  {
+    m_line += line_delta;
+
+    if (line_delta != 0)
+      m_line_has_non_zero_discriminator = m_discriminator != 0;
+  }
+
+  struct dwarf2_cu *m_cu;
+
+  gdbarch *m_gdbarch;
+
+  /* True if we're recording lines.
+     Otherwise we're building partial symtabs and are just interested in
+     finding include files mentioned by the line number program.  */
+  bool m_record_lines_p;
+
+  /* The line number header.  */
+  line_header *m_line_header;
+
+  /* These are part of the standard DWARF line number state machine,
+     and initialized according to the DWARF spec.  */
+
+  unsigned char m_op_index = 0;
+  /* The line table index of the current file.  */
+  file_name_index m_file = 1;
+  unsigned int m_line = 1;
+
+  /* These are initialized in the constructor.  */
+
+  CORE_ADDR m_address;
+  bool m_is_stmt;
+  unsigned int m_discriminator;
+
+  /* Additional bits of state we need to track.  */
+
+  /* The last file that we called dwarf2_start_subfile for.
+     This is only used for TLLs.  */
+  unsigned int m_last_file = 0;
+  /* The last file a line number was recorded for.  */
+  struct subfile *m_last_subfile = NULL;
+
+  /* The address of the last line entry.  */
+  CORE_ADDR m_last_address;
+
+  /* Set to true when a previous line at the same address (using
+     m_last_address) had m_is_stmt true.  This is reset to false when a
+     line entry at a new address (m_address different to m_last_address) is
+     processed.  */
+  bool m_stmt_at_address = false;
+
+  /* When true, record the lines we decode.  */
+  bool m_currently_recording_lines = false;
+
+  /* The last line number that was recorded, used to coalesce
+     consecutive entries for the same line.  This can happen, for
+     example, when discriminators are present.  PR 17276.  */
+  unsigned int m_last_line = 0;
+  bool m_line_has_non_zero_discriminator = false;
+};
+
+void
+lnp_state_machine::handle_advance_pc (CORE_ADDR adjust)
+{
+  CORE_ADDR addr_adj = (((m_op_index + adjust)
+			 / m_line_header->maximum_ops_per_instruction)
+			* m_line_header->minimum_instruction_length);
+  m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
+  m_op_index = ((m_op_index + adjust)
+		% m_line_header->maximum_ops_per_instruction);
+}
+
+void
+lnp_state_machine::handle_special_opcode (unsigned char op_code)
+{
+  unsigned char adj_opcode = op_code - m_line_header->opcode_base;
+  unsigned char adj_opcode_d = adj_opcode / m_line_header->line_range;
+  unsigned char adj_opcode_r = adj_opcode % m_line_header->line_range;
+  CORE_ADDR addr_adj = (((m_op_index + adj_opcode_d)
+			 / m_line_header->maximum_ops_per_instruction)
+			* m_line_header->minimum_instruction_length);
+  m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
+  m_op_index = ((m_op_index + adj_opcode_d)
+		% m_line_header->maximum_ops_per_instruction);
+
+  int line_delta = m_line_header->line_base + adj_opcode_r;
+  advance_line (line_delta);
+  record_line (false);
+  m_discriminator = 0;
+}
+
+void
+lnp_state_machine::handle_set_file (file_name_index file)
+{
+  m_file = file;
+
+  const file_entry *fe = current_file ();
+  if (fe == NULL)
+    dwarf2_debug_line_missing_file_complaint ();
+  else if (m_record_lines_p)
+    {
+      const char *dir = fe->include_dir (m_line_header);
+
+      m_last_subfile = m_cu->get_builder ()->get_current_subfile ();
+      m_line_has_non_zero_discriminator = m_discriminator != 0;
+      dwarf2_start_subfile (m_cu, fe->name, dir);
+    }
+}
+
+void
+lnp_state_machine::handle_const_add_pc ()
+{
+  CORE_ADDR adjust
+    = (255 - m_line_header->opcode_base) / m_line_header->line_range;
+
+  CORE_ADDR addr_adj
+    = (((m_op_index + adjust)
+	/ m_line_header->maximum_ops_per_instruction)
+       * m_line_header->minimum_instruction_length);
+
+  m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
+  m_op_index = ((m_op_index + adjust)
+		% m_line_header->maximum_ops_per_instruction);
+}
+
+/* Return non-zero if we should add LINE to the line number table.
+   LINE is the line to add, LAST_LINE is the last line that was added,
+   LAST_SUBFILE is the subfile for LAST_LINE.
+   LINE_HAS_NON_ZERO_DISCRIMINATOR is non-zero if LINE has ever
+   had a non-zero discriminator.
+
+   We have to be careful in the presence of discriminators.
+   E.g., for this line:
+
+     for (i = 0; i < 100000; i++);
+
+   clang can emit four line number entries for that one line,
+   each with a different discriminator.
+   See gdb.dwarf2/dw2-single-line-discriminators.exp for an example.
+
+   However, we want gdb to coalesce all four entries into one.
+   Otherwise the user could stepi into the middle of the line and
+   gdb would get confused about whether the pc really was in the
+   middle of the line.
+
+   Things are further complicated by the fact that two consecutive
+   line number entries for the same line is a heuristic used by gcc
+   to denote the end of the prologue.  So we can't just discard duplicate
+   entries, we have to be selective about it.  The heuristic we use is
+   that we only collapse consecutive entries for the same line if at least
+   one of those entries has a non-zero discriminator.  PR 17276.
+
+   Note: Addresses in the line number state machine can never go backwards
+   within one sequence, thus this coalescing is ok.  */
+
+static int
+dwarf_record_line_p (struct dwarf2_cu *cu,
+		     unsigned int line, unsigned int last_line,
+		     int line_has_non_zero_discriminator,
+		     struct subfile *last_subfile)
+{
+  if (cu->get_builder ()->get_current_subfile () != last_subfile)
+    return 1;
+  if (line != last_line)
+    return 1;
+  /* Same line for the same file that we've seen already.
+     As a last check, for pr 17276, only record the line if the line
+     has never had a non-zero discriminator.  */
+  if (!line_has_non_zero_discriminator)
+    return 1;
+  return 0;
+}
+
+/* Use the CU's builder to record line number LINE beginning at
+   address ADDRESS in the line table of subfile SUBFILE.  */
+
+static void
+dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile,
+		     unsigned int line, CORE_ADDR address, bool is_stmt,
+		     struct dwarf2_cu *cu)
+{
+  CORE_ADDR addr = gdbarch_addr_bits_remove (gdbarch, address);
+
+  if (dwarf_line_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Recording line %u, file %s, address %s\n",
+			  line, lbasename (subfile->name),
+			  paddress (gdbarch, address));
+    }
+
+  if (cu != nullptr)
+    cu->get_builder ()->record_line (subfile, line, addr, is_stmt);
+}
+
+/* Subroutine of dwarf_decode_lines_1 to simplify it.
+   Mark the end of a set of line number records.
+   The arguments are the same as for dwarf_record_line_1.
+   If SUBFILE is NULL the request is ignored.  */
+
+static void
+dwarf_finish_line (struct gdbarch *gdbarch, struct subfile *subfile,
+		   CORE_ADDR address, struct dwarf2_cu *cu)
+{
+  if (subfile == NULL)
+    return;
+
+  if (dwarf_line_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Finishing current line, file %s, address %s\n",
+			  lbasename (subfile->name),
+			  paddress (gdbarch, address));
+    }
+
+  dwarf_record_line_1 (gdbarch, subfile, 0, address, true, cu);
+}
+
+void
+lnp_state_machine::record_line (bool end_sequence)
+{
+  if (dwarf_line_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Processing actual line %u: file %u,"
+			  " address %s, is_stmt %u, discrim %u%s\n",
+			  m_line, m_file,
+			  paddress (m_gdbarch, m_address),
+			  m_is_stmt, m_discriminator,
+			  (end_sequence ? "\t(end sequence)" : ""));
+    }
+
+  file_entry *fe = current_file ();
+
+  if (fe == NULL)
+    dwarf2_debug_line_missing_file_complaint ();
+  /* For now we ignore lines not starting on an instruction boundary.
+     But not when processing end_sequence for compatibility with the
+     previous version of the code.  */
+  else if (m_op_index == 0 || end_sequence)
+    {
+      fe->included_p = 1;
+      if (m_record_lines_p)
+	{
+	  /* When we switch files we insert an end maker in the first file,
+	     switch to the second file and add a new line entry.  The
+	     problem is that the end marker inserted in the first file will
+	     discard any previous line entries at the same address.  If the
+	     line entries in the first file are marked as is-stmt, while
+	     the new line in the second file is non-stmt, then this means
+	     the end marker will discard is-stmt lines so we can have a
+	     non-stmt line.  This means that there are less addresses at
+	     which the user can insert a breakpoint.
+
+	     To improve this we track the last address in m_last_address,
+	     and whether we have seen an is-stmt at this address.  Then
+	     when switching files, if we have seen a stmt at the current
+	     address, and we are switching to create a non-stmt line, then
+	     discard the new line.  */
+	  bool file_changed
+	    = m_last_subfile != m_cu->get_builder ()->get_current_subfile ();
+	  bool ignore_this_line
+	   = ((file_changed && !end_sequence && m_last_address == m_address
+	       && !m_is_stmt && m_stmt_at_address)
+	      || (!end_sequence && m_line == 0));
+
+	  if ((file_changed && !ignore_this_line) || end_sequence)
+	    {
+	      dwarf_finish_line (m_gdbarch, m_last_subfile, m_address,
+				 m_currently_recording_lines ? m_cu : nullptr);
+	    }
+
+	  if (!end_sequence && !ignore_this_line)
+	    {
+	      bool is_stmt = producer_is_codewarrior (m_cu) || m_is_stmt;
+
+	      if (dwarf_record_line_p (m_cu, m_line, m_last_line,
+				       m_line_has_non_zero_discriminator,
+				       m_last_subfile))
+		{
+		  buildsym_compunit *builder = m_cu->get_builder ();
+		  dwarf_record_line_1 (m_gdbarch,
+				       builder->get_current_subfile (),
+				       m_line, m_address, is_stmt,
+				       m_currently_recording_lines ? m_cu : nullptr);
+		}
+	      m_last_subfile = m_cu->get_builder ()->get_current_subfile ();
+	      m_last_line = m_line;
+	    }
+	}
+    }
+
+  /* Track whether we have seen any m_is_stmt true at m_address in case we
+     have multiple line table entries all at m_address.  */
+  if (m_last_address != m_address)
+    {
+      m_stmt_at_address = false;
+      m_last_address = m_address;
+    }
+  m_stmt_at_address |= m_is_stmt;
+}
+
+lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch,
+				      line_header *lh, bool record_lines_p)
+{
+  m_cu = cu;
+  m_gdbarch = arch;
+  m_record_lines_p = record_lines_p;
+  m_line_header = lh;
+
+  m_currently_recording_lines = true;
+
+  /* Call `gdbarch_adjust_dwarf2_line' on the initial 0 address as if there
+     was a line entry for it so that the backend has a chance to adjust it
+     and also record it in case it needs it.  This is currently used by MIPS
+     code, cf. `mips_adjust_dwarf2_line'.  */
+  m_address = gdbarch_adjust_dwarf2_line (arch, 0, 0);
+  m_is_stmt = lh->default_is_stmt;
+  m_discriminator = 0;
+
+  m_last_address = m_address;
+  m_stmt_at_address = false;
+}
+
+void
+lnp_state_machine::check_line_address (struct dwarf2_cu *cu,
+				       const gdb_byte *line_ptr,
+				       CORE_ADDR unrelocated_lowpc, CORE_ADDR address)
+{
+  /* Linkers resolve a symbolic relocation referencing a GC'd function to 0 or
+     -1.  If ADDRESS is 0, ignoring the opcode will err if the text section is
+     located at 0x0.  In this case, additionally check that if
+     ADDRESS < UNRELOCATED_LOWPC.  */
+
+  if ((address == 0 && address < unrelocated_lowpc)
+      || address == (CORE_ADDR) -1)
+    {
+      /* This line table is for a function which has been
+	 GCd by the linker.  Ignore it.  PR gdb/12528 */
+
+      struct objfile *objfile = cu->per_objfile->objfile;
+      long line_offset = line_ptr - get_debug_line_section (cu)->buffer;
+
+      complaint (_(".debug_line address at offset 0x%lx is 0 [in module %s]"),
+		 line_offset, objfile_name (objfile));
+      m_currently_recording_lines = false;
+      /* Note: m_currently_recording_lines is left as false until we see
+	 DW_LNE_end_sequence.  */
+    }
+}
+
+/* Subroutine of dwarf_decode_lines to simplify it.
+   Process the line number information in LH.
+   If DECODE_FOR_PST_P is non-zero, all we do is process the line number
+   program in order to set included_p for every referenced header.  */
+
+static void
+dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
+		      const int decode_for_pst_p, CORE_ADDR lowpc)
+{
+  const gdb_byte *line_ptr, *extended_end;
+  const gdb_byte *line_end;
+  unsigned int bytes_read, extended_len;
+  unsigned char op_code, extended_op;
+  CORE_ADDR baseaddr;
+  struct objfile *objfile = cu->per_objfile->objfile;
+  bfd *abfd = objfile->obfd;
+  struct gdbarch *gdbarch = objfile->arch ();
+  /* True if we're recording line info (as opposed to building partial
+     symtabs and just interested in finding include files mentioned by
+     the line number program).  */
+  bool record_lines_p = !decode_for_pst_p;
+
+  baseaddr = objfile->text_section_offset ();
+
+  line_ptr = lh->statement_program_start;
+  line_end = lh->statement_program_end;
+
+  /* Read the statement sequences until there's nothing left.  */
+  while (line_ptr < line_end)
+    {
+      /* The DWARF line number program state machine.  Reset the state
+	 machine at the start of each sequence.  */
+      lnp_state_machine state_machine (cu, gdbarch, lh, record_lines_p);
+      bool end_sequence = false;
+
+      if (record_lines_p)
+	{
+	  /* Start a subfile for the current file of the state
+	     machine.  */
+	  const file_entry *fe = state_machine.current_file ();
+
+	  if (fe != NULL)
+	    dwarf2_start_subfile (cu, fe->name, fe->include_dir (lh));
+	}
+
+      /* Decode the table.  */
+      while (line_ptr < line_end && !end_sequence)
+	{
+	  op_code = read_1_byte (abfd, line_ptr);
+	  line_ptr += 1;
+
+	  if (op_code >= lh->opcode_base)
+	    {
+	      /* Special opcode.  */
+	      state_machine.handle_special_opcode (op_code);
+	    }
+	  else switch (op_code)
+	    {
+	    case DW_LNS_extended_op:
+	      extended_len = read_unsigned_leb128 (abfd, line_ptr,
+						   &bytes_read);
+	      line_ptr += bytes_read;
+	      extended_end = line_ptr + extended_len;
+	      extended_op = read_1_byte (abfd, line_ptr);
+	      line_ptr += 1;
+	      if (DW_LNE_lo_user <= extended_op
+		  && extended_op <= DW_LNE_hi_user)
+		{
+		  /* Vendor extension, ignore.  */
+		  line_ptr = extended_end;
+		  break;
+		}
+	      switch (extended_op)
+		{
+		case DW_LNE_end_sequence:
+		  state_machine.handle_end_sequence ();
+		  end_sequence = true;
+		  break;
+		case DW_LNE_set_address:
+		  {
+		    CORE_ADDR address
+		      = cu->header.read_address (abfd, line_ptr, &bytes_read);
+		    line_ptr += bytes_read;
+
+		    state_machine.check_line_address (cu, line_ptr,
+						      lowpc - baseaddr, address);
+		    state_machine.handle_set_address (baseaddr, address);
+		  }
+		  break;
+		case DW_LNE_define_file:
+		  {
+		    const char *cur_file;
+		    unsigned int mod_time, length;
+		    dir_index dindex;
+
+		    cur_file = read_direct_string (abfd, line_ptr,
+						   &bytes_read);
+		    line_ptr += bytes_read;
+		    dindex = (dir_index)
+		      read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+		    line_ptr += bytes_read;
+		    mod_time =
+		      read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+		    line_ptr += bytes_read;
+		    length =
+		      read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+		    line_ptr += bytes_read;
+		    lh->add_file_name (cur_file, dindex, mod_time, length);
+		  }
+		  break;
+		case DW_LNE_set_discriminator:
+		  {
+		    /* The discriminator is not interesting to the
+		       debugger; just ignore it.  We still need to
+		       check its value though:
+		       if there are consecutive entries for the same
+		       (non-prologue) line we want to coalesce them.
+		       PR 17276.  */
+		    unsigned int discr
+		      = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+		    line_ptr += bytes_read;
+
+		    state_machine.handle_set_discriminator (discr);
+		  }
+		  break;
+		default:
+		  complaint (_("mangled .debug_line section"));
+		  return;
+		}
+	      /* Make sure that we parsed the extended op correctly.  If e.g.
+		 we expected a different address size than the producer used,
+		 we may have read the wrong number of bytes.  */
+	      if (line_ptr != extended_end)
+		{
+		  complaint (_("mangled .debug_line section"));
+		  return;
+		}
+	      break;
+	    case DW_LNS_copy:
+	      state_machine.handle_copy ();
+	      break;
+	    case DW_LNS_advance_pc:
+	      {
+		CORE_ADDR adjust
+		  = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+		line_ptr += bytes_read;
+
+		state_machine.handle_advance_pc (adjust);
+	      }
+	      break;
+	    case DW_LNS_advance_line:
+	      {
+		int line_delta
+		  = read_signed_leb128 (abfd, line_ptr, &bytes_read);
+		line_ptr += bytes_read;
+
+		state_machine.handle_advance_line (line_delta);
+	      }
+	      break;
+	    case DW_LNS_set_file:
+	      {
+		file_name_index file
+		  = (file_name_index) read_unsigned_leb128 (abfd, line_ptr,
+							    &bytes_read);
+		line_ptr += bytes_read;
+
+		state_machine.handle_set_file (file);
+	      }
+	      break;
+	    case DW_LNS_set_column:
+	      (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+	      line_ptr += bytes_read;
+	      break;
+	    case DW_LNS_negate_stmt:
+	      state_machine.handle_negate_stmt ();
+	      break;
+	    case DW_LNS_set_basic_block:
+	      break;
+	    /* Add to the address register of the state machine the
+	       address increment value corresponding to special opcode
+	       255.  I.e., this value is scaled by the minimum
+	       instruction length since special opcode 255 would have
+	       scaled the increment.  */
+	    case DW_LNS_const_add_pc:
+	      state_machine.handle_const_add_pc ();
+	      break;
+	    case DW_LNS_fixed_advance_pc:
+	      {
+		CORE_ADDR addr_adj = read_2_bytes (abfd, line_ptr);
+		line_ptr += 2;
+
+		state_machine.handle_fixed_advance_pc (addr_adj);
+	      }
+	      break;
+	    default:
+	      {
+		/* Unknown standard opcode, ignore it.  */
+		int i;
+
+		for (i = 0; i < lh->standard_opcode_lengths[op_code]; i++)
+		  {
+		    (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+		    line_ptr += bytes_read;
+		  }
+	      }
+	    }
+	}
+
+      if (!end_sequence)
+	dwarf2_debug_line_missing_end_sequence_complaint ();
+
+      /* We got a DW_LNE_end_sequence (or we ran off the end of the buffer,
+	 in which case we still finish recording the last line).  */
+      state_machine.record_line (true);
+    }
+}
+
+/* Decode the Line Number Program (LNP) for the given line_header
+   structure and CU.  The actual information extracted and the type
+   of structures created from the LNP depends on the value of PST.
+
+   1. If PST is NULL, then this procedure uses the data from the program
+      to create all necessary symbol tables, and their linetables.
+
+   2. If PST is not NULL, this procedure reads the program to determine
+      the list of files included by the unit represented by PST, and
+      builds all the associated partial symbol tables.
+
+   COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown.
+   It is used for relative paths in the line table.
+   NOTE: When processing partial symtabs (pst != NULL),
+   comp_dir == pst->dirname.
+
+   NOTE: It is important that psymtabs have the same file name (via strcmp)
+   as the corresponding symtab.  Since COMP_DIR is not used in the name of the
+   symtab we don't use it in the name of the psymtabs we create.
+   E.g. expand_line_sal requires this when finding psymtabs to expand.
+   A good testcase for this is mb-inline.exp.
+
+   LOWPC is the lowest address in CU (or 0 if not known).
+
+   Boolean DECODE_MAPPING specifies we need to fully decode .debug_line
+   for its PC<->lines mapping information.  Otherwise only the filename
+   table is read in.  */
+
+static void
+dwarf_decode_lines (struct line_header *lh, const char *comp_dir,
+		    struct dwarf2_cu *cu, dwarf2_psymtab *pst,
+		    CORE_ADDR lowpc, int decode_mapping)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  const int decode_for_pst_p = (pst != NULL);
+
+  if (decode_mapping)
+    dwarf_decode_lines_1 (lh, cu, decode_for_pst_p, lowpc);
+
+  if (decode_for_pst_p)
+    {
+      /* Now that we're done scanning the Line Header Program, we can
+	 create the psymtab of each included file.  */
+      for (auto &file_entry : lh->file_names ())
+	if (file_entry.included_p == 1)
+	  {
+	    gdb::unique_xmalloc_ptr<char> name_holder;
+	    const char *include_name =
+	      psymtab_include_file_name (lh, file_entry, pst,
+					 comp_dir, &name_holder);
+	    if (include_name != NULL)
+	      dwarf2_create_include_psymtab
+		(cu->per_objfile->per_bfd, include_name, pst,
+		 cu->per_objfile->per_bfd->partial_symtabs.get (),
+		 objfile->per_bfd);
+	  }
+    }
+  else
+    {
+      /* Make sure a symtab is created for every file, even files
+	 which contain only variables (i.e. no code with associated
+	 line numbers).  */
+      buildsym_compunit *builder = cu->get_builder ();
+      struct compunit_symtab *cust = builder->get_compunit_symtab ();
+
+      for (auto &fe : lh->file_names ())
+	{
+	  dwarf2_start_subfile (cu, fe.name, fe.include_dir (lh));
+	  if (builder->get_current_subfile ()->symtab == NULL)
+	    {
+	      builder->get_current_subfile ()->symtab
+		= allocate_symtab (cust,
+				   builder->get_current_subfile ()->name);
+	    }
+	  fe.symtab = builder->get_current_subfile ()->symtab;
+	}
+    }
+}
+
+/* Start a subfile for DWARF.  FILENAME is the name of the file and
+   DIRNAME the name of the source directory which contains FILENAME
+   or NULL if not known.
+   This routine tries to keep line numbers from identical absolute and
+   relative file names in a common subfile.
+
+   Using the `list' example from the GDB testsuite, which resides in
+   /srcdir and compiling it with Irix6.2 cc in /compdir using a filename
+   of /srcdir/list0.c yields the following debugging information for list0.c:
+
+   DW_AT_name:          /srcdir/list0.c
+   DW_AT_comp_dir:      /compdir
+   files.files[0].name: list0.h
+   files.files[0].dir:  /srcdir
+   files.files[1].name: list0.c
+   files.files[1].dir:  /srcdir
+
+   The line number information for list0.c has to end up in a single
+   subfile, so that `break /srcdir/list0.c:1' works as expected.
+   start_subfile will ensure that this happens provided that we pass the
+   concatenation of files.files[1].dir and files.files[1].name as the
+   subfile's name.  */
+
+static void
+dwarf2_start_subfile (struct dwarf2_cu *cu, const char *filename,
+		      const char *dirname)
+{
+  gdb::unique_xmalloc_ptr<char> copy;
+
+  /* In order not to lose the line information directory,
+     we concatenate it to the filename when it makes sense.
+     Note that the Dwarf3 standard says (speaking of filenames in line
+     information): ``The directory index is ignored for file names
+     that represent full path names''.  Thus ignoring dirname in the
+     `else' branch below isn't an issue.  */
+
+  if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL)
+    {
+      copy.reset (concat (dirname, SLASH_STRING, filename, (char *) NULL));
+      filename = copy.get ();
+    }
+
+  cu->get_builder ()->start_subfile (filename);
+}
+
+static void
+var_decode_location (struct attribute *attr, struct symbol *sym,
+		     struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  struct comp_unit_head *cu_header = &cu->header;
+
+  /* NOTE drow/2003-01-30: There used to be a comment and some special
+     code here to turn a symbol with DW_AT_external and a
+     SYMBOL_VALUE_ADDRESS of 0 into a LOC_UNRESOLVED symbol.  This was
+     necessary for platforms (maybe Alpha, certainly PowerPC GNU/Linux
+     with some versions of binutils) where shared libraries could have
+     relocations against symbols in their debug information - the
+     minimal symbol would have the right address, but the debug info
+     would not.  It's no longer necessary, because we will explicitly
+     apply relocations when we read in the debug information now.  */
+
+  /* A DW_AT_location attribute with no contents indicates that a
+     variable has been optimized away.  */
+  if (attr->form_is_block () && attr->as_block ()->size == 0)
+    {
+      SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+      return;
+    }
+
+  /* Handle one degenerate form of location expression specially, to
+     preserve GDB's previous behavior when section offsets are
+     specified.  If this is just a DW_OP_addr, DW_OP_addrx, or
+     DW_OP_GNU_addr_index then mark this symbol as LOC_STATIC.  */
+
+  if (attr->form_is_block ())
+    {
+      struct dwarf_block *block = attr->as_block ();
+
+      if ((block->data[0] == DW_OP_addr
+	   && block->size == 1 + cu_header->addr_size)
+	  || ((block->data[0] == DW_OP_GNU_addr_index
+	       || block->data[0] == DW_OP_addrx)
+	      && (block->size
+		  == 1 + leb128_size (&block->data[1]))))
+	{
+	  unsigned int dummy;
+
+	  if (block->data[0] == DW_OP_addr)
+	    SET_SYMBOL_VALUE_ADDRESS
+	      (sym, cu->header.read_address (objfile->obfd,
+					     block->data + 1,
+					     &dummy));
+	  else
+	    SET_SYMBOL_VALUE_ADDRESS
+	      (sym, read_addr_index_from_leb128 (cu, block->data + 1,
+						 &dummy));
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
+	  fixup_symbol_section (sym, objfile);
+	  SET_SYMBOL_VALUE_ADDRESS
+	    (sym,
+	     SYMBOL_VALUE_ADDRESS (sym)
+	     + objfile->section_offsets[sym->section_index ()]);
+	  return;
+	}
+    }
+
+  /* NOTE drow/2002-01-30: It might be worthwhile to have a static
+     expression evaluator, and use LOC_COMPUTED only when necessary
+     (i.e. when the value of a register or memory location is
+     referenced, or a thread-local block, etc.).  Then again, it might
+     not be worthwhile.  I'm assuming that it isn't unless performance
+     or memory numbers show me otherwise.  */
+
+  dwarf2_symbol_mark_computed (attr, sym, cu, 0);
+
+  if (SYMBOL_COMPUTED_OPS (sym)->location_has_loclist)
+    cu->has_loclist = true;
+}
+
+/* Given a pointer to a DWARF information entry, figure out if we need
+   to make a symbol table entry for it, and if so, create a new entry
+   and return a pointer to it.
+   If TYPE is NULL, determine symbol type from the die, otherwise
+   used the passed type.
+   If SPACE is not NULL, use it to hold the new symbol.  If it is
+   NULL, allocate a new symbol on the objfile's obstack.  */
+
+static struct symbol *
+new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
+	    struct symbol *space)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct gdbarch *gdbarch = objfile->arch ();
+  struct symbol *sym = NULL;
+  const char *name;
+  struct attribute *attr = NULL;
+  struct attribute *attr2 = NULL;
+  CORE_ADDR baseaddr;
+  struct pending **list_to_add = NULL;
+
+  int inlined_func = (die->tag == DW_TAG_inlined_subroutine);
+
+  baseaddr = objfile->text_section_offset ();
+
+  name = dwarf2_name (die, cu);
+  if (name)
+    {
+      int suppress_add = 0;
+
+      if (space)
+	sym = space;
+      else
+	sym = new (&objfile->objfile_obstack) symbol;
+      OBJSTAT (objfile, n_syms++);
+
+      /* Cache this symbol's name and the name's demangled form (if any).  */
+      sym->set_language (cu->per_cu->lang, &objfile->objfile_obstack);
+      /* Fortran does not have mangling standard and the mangling does differ
+	 between gfortran, iFort etc.  */
+      const char *physname
+	= (cu->per_cu->lang == language_fortran
+	   ? dwarf2_full_name (name, die, cu)
+	   : dwarf2_physname (name, die, cu));
+      const char *linkagename = dw2_linkage_name (die, cu);
+
+      if (linkagename == nullptr || cu->per_cu->lang == language_ada)
+	sym->set_linkage_name (physname);
+      else
+	{
+	  sym->set_demangled_name (physname, &objfile->objfile_obstack);
+	  sym->set_linkage_name (linkagename);
+	}
+
+      /* Default assumptions.
+	 Use the passed type or decode it from the die.  */
+      SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+      SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+      if (type != NULL)
+	SYMBOL_TYPE (sym) = type;
+      else
+	SYMBOL_TYPE (sym) = die_type (die, cu);
+      attr = dwarf2_attr (die,
+			  inlined_func ? DW_AT_call_line : DW_AT_decl_line,
+			  cu);
+      if (attr != nullptr)
+	SYMBOL_LINE (sym) = attr->constant_value (0);
+
+      attr = dwarf2_attr (die,
+			  inlined_func ? DW_AT_call_file : DW_AT_decl_file,
+			  cu);
+      if (attr != nullptr && attr->is_nonnegative ())
+	{
+	  file_name_index file_index
+	    = (file_name_index) attr->as_nonnegative ();
+	  struct file_entry *fe;
+
+	  if (cu->line_header != NULL)
+	    fe = cu->line_header->file_name_at (file_index);
+	  else
+	    fe = NULL;
+
+	  if (fe == NULL)
+	    complaint (_("file index out of range"));
+	  else
+	    symbol_set_symtab (sym, fe->symtab);
+	}
+
+      switch (die->tag)
+	{
+	case DW_TAG_label:
+	  attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+	  if (attr != nullptr)
+	    {
+	      CORE_ADDR addr;
+
+	      addr = attr->as_address ();
+	      addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr);
+	      SET_SYMBOL_VALUE_ADDRESS (sym, addr);
+	      SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
+	    }
+	  else
+	    SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
+	  SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr;
+	  SYMBOL_DOMAIN (sym) = LABEL_DOMAIN;
+	  add_symbol_to_list (sym, cu->list_in_scope);
+	  break;
+	case DW_TAG_subprogram:
+	  /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
+	     finish_block.  */
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+	  attr2 = dwarf2_attr (die, DW_AT_external, cu);
+	  if ((attr2 != nullptr && attr2->as_boolean ())
+	      || cu->per_cu->lang == language_ada
+	      || cu->per_cu->lang == language_fortran)
+	    {
+	      /* Subprograms marked external are stored as a global symbol.
+		 Ada and Fortran subprograms, whether marked external or
+		 not, are always stored as a global symbol, because we want
+		 to be able to access them globally.  For instance, we want
+		 to be able to break on a nested subprogram without having
+		 to specify the context.  */
+	      list_to_add = cu->get_builder ()->get_global_symbols ();
+	    }
+	  else
+	    {
+	      list_to_add = cu->list_in_scope;
+	    }
+	  break;
+	case DW_TAG_inlined_subroutine:
+	  /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
+	     finish_block.  */
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
+	  SYMBOL_INLINED (sym) = 1;
+	  list_to_add = cu->list_in_scope;
+	  break;
+	case DW_TAG_template_value_param:
+	  suppress_add = 1;
+	  /* Fall through.  */
+	case DW_TAG_constant:
+	case DW_TAG_variable:
+	case DW_TAG_member:
+	  /* Compilation with minimal debug info may result in
+	     variables with missing type entries.  Change the
+	     misleading `void' type to something sensible.  */
+	  if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_VOID)
+	    SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int;
+
+	  attr = dwarf2_attr (die, DW_AT_const_value, cu);
+	  /* In the case of DW_TAG_member, we should only be called for
+	     static const members.  */
+	  if (die->tag == DW_TAG_member)
+	    {
+	      /* dwarf2_add_field uses die_is_declaration,
+		 so we do the same.  */
+	      gdb_assert (die_is_declaration (die, cu));
+	      gdb_assert (attr);
+	    }
+	  if (attr != nullptr)
+	    {
+	      dwarf2_const_value (attr, sym, cu);
+	      attr2 = dwarf2_attr (die, DW_AT_external, cu);
+	      if (!suppress_add)
+		{
+		  if (attr2 != nullptr && attr2->as_boolean ())
+		    list_to_add = cu->get_builder ()->get_global_symbols ();
+		  else
+		    list_to_add = cu->list_in_scope;
+		}
+	      break;
+	    }
+	  attr = dwarf2_attr (die, DW_AT_location, cu);
+	  if (attr != nullptr)
+	    {
+	      var_decode_location (attr, sym, cu);
+	      attr2 = dwarf2_attr (die, DW_AT_external, cu);
+
+	      /* Fortran explicitly imports any global symbols to the local
+		 scope by DW_TAG_common_block.  */
+	      if (cu->per_cu->lang == language_fortran && die->parent
+		  && die->parent->tag == DW_TAG_common_block)
+		attr2 = NULL;
+
+	      if (SYMBOL_CLASS (sym) == LOC_STATIC
+		  && SYMBOL_VALUE_ADDRESS (sym) == 0
+		  && !per_objfile->per_bfd->has_section_at_zero)
+		{
+		  /* When a static variable is eliminated by the linker,
+		     the corresponding debug information is not stripped
+		     out, but the variable address is set to null;
+		     do not add such variables into symbol table.  */
+		}
+	      else if (attr2 != nullptr && attr2->as_boolean ())
+		{
+		  if (SYMBOL_CLASS (sym) == LOC_STATIC
+		      && (objfile->flags & OBJF_MAINLINE) == 0
+		      && per_objfile->per_bfd->can_copy)
+		    {
+		      /* A global static variable might be subject to
+			 copy relocation.  We first check for a local
+			 minsym, though, because maybe the symbol was
+			 marked hidden, in which case this would not
+			 apply.  */
+		      bound_minimal_symbol found
+			= (lookup_minimal_symbol_linkage
+			   (sym->linkage_name (), objfile));
+		      if (found.minsym != nullptr)
+			sym->maybe_copied = 1;
+		    }
+
+		  /* A variable with DW_AT_external is never static,
+		     but it may be block-scoped.  */
+		  list_to_add
+		    = ((cu->list_in_scope
+			== cu->get_builder ()->get_file_symbols ())
+		       ? cu->get_builder ()->get_global_symbols ()
+		       : cu->list_in_scope);
+		}
+	      else
+		list_to_add = cu->list_in_scope;
+	    }
+	  else
+	    {
+	      /* We do not know the address of this symbol.
+		 If it is an external symbol and we have type information
+		 for it, enter the symbol as a LOC_UNRESOLVED symbol.
+		 The address of the variable will then be determined from
+		 the minimal symbol table whenever the variable is
+		 referenced.  */
+	      attr2 = dwarf2_attr (die, DW_AT_external, cu);
+
+	      /* Fortran explicitly imports any global symbols to the local
+		 scope by DW_TAG_common_block.  */
+	      if (cu->per_cu->lang == language_fortran && die->parent
+		  && die->parent->tag == DW_TAG_common_block)
+		{
+		  /* SYMBOL_CLASS doesn't matter here because
+		     read_common_block is going to reset it.  */
+		  if (!suppress_add)
+		    list_to_add = cu->list_in_scope;
+		}
+	      else if (attr2 != nullptr && attr2->as_boolean ()
+		       && dwarf2_attr (die, DW_AT_type, cu) != NULL)
+		{
+		  /* A variable with DW_AT_external is never static, but it
+		     may be block-scoped.  */
+		  list_to_add
+		    = ((cu->list_in_scope
+			== cu->get_builder ()->get_file_symbols ())
+		       ? cu->get_builder ()->get_global_symbols ()
+		       : cu->list_in_scope);
+
+		  SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED;
+		}
+	      else if (!die_is_declaration (die, cu))
+		{
+		  /* Use the default LOC_OPTIMIZED_OUT class.  */
+		  gdb_assert (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT);
+		  if (!suppress_add)
+		    list_to_add = cu->list_in_scope;
+		}
+	    }
+	  break;
+	case DW_TAG_formal_parameter:
+	  {
+	    /* If we are inside a function, mark this as an argument.  If
+	       not, we might be looking at an argument to an inlined function
+	       when we do not have enough information to show inlined frames;
+	       pretend it's a local variable in that case so that the user can
+	       still see it.  */
+	    struct context_stack *curr
+	      = cu->get_builder ()->get_current_context_stack ();
+	    if (curr != nullptr && curr->name != nullptr)
+	      SYMBOL_IS_ARGUMENT (sym) = 1;
+	    attr = dwarf2_attr (die, DW_AT_location, cu);
+	    if (attr != nullptr)
+	      {
+		var_decode_location (attr, sym, cu);
+	      }
+	    attr = dwarf2_attr (die, DW_AT_const_value, cu);
+	    if (attr != nullptr)
+	      {
+		dwarf2_const_value (attr, sym, cu);
+	      }
+
+	    list_to_add = cu->list_in_scope;
+	  }
+	  break;
+	case DW_TAG_unspecified_parameters:
+	  /* From varargs functions; gdb doesn't seem to have any
+	     interest in this information, so just ignore it for now.
+	     (FIXME?) */
+	  break;
+	case DW_TAG_template_type_param:
+	  suppress_add = 1;
+	  /* Fall through.  */
+	case DW_TAG_class_type:
+	case DW_TAG_interface_type:
+	case DW_TAG_structure_type:
+	case DW_TAG_union_type:
+	case DW_TAG_set_type:
+	case DW_TAG_enumeration_type:
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+	  SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+
+	  {
+	    /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't
+	       really ever be static objects: otherwise, if you try
+	       to, say, break of a class's method and you're in a file
+	       which doesn't mention that class, it won't work unless
+	       the check for all static symbols in lookup_symbol_aux
+	       saves you.  See the OtherFileClass tests in
+	       gdb.c++/namespace.exp.  */
+
+	    if (!suppress_add)
+	      {
+		buildsym_compunit *builder = cu->get_builder ();
+		list_to_add
+		  = (cu->list_in_scope == builder->get_file_symbols ()
+		     && cu->per_cu->lang == language_cplus
+		     ? builder->get_global_symbols ()
+		     : cu->list_in_scope);
+
+		/* The semantics of C++ state that "struct foo {
+		   ... }" also defines a typedef for "foo".  */
+		if (cu->per_cu->lang == language_cplus
+		    || cu->per_cu->lang == language_ada
+		    || cu->per_cu->lang == language_d
+		    || cu->per_cu->lang == language_rust)
+		  {
+		    /* The symbol's name is already allocated along
+		       with this objfile, so we don't need to
+		       duplicate it for the type.  */
+		    if (SYMBOL_TYPE (sym)->name () == 0)
+		      SYMBOL_TYPE (sym)->set_name (sym->search_name ());
+		  }
+	      }
+	  }
+	  break;
+	case DW_TAG_typedef:
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+	  list_to_add = cu->list_in_scope;
+	  break;
+	case DW_TAG_array_type:
+	case DW_TAG_base_type:
+	case DW_TAG_subrange_type:
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+	  list_to_add = cu->list_in_scope;
+	  break;
+	case DW_TAG_enumerator:
+	  attr = dwarf2_attr (die, DW_AT_const_value, cu);
+	  if (attr != nullptr)
+	    {
+	      dwarf2_const_value (attr, sym, cu);
+	    }
+	  {
+	    /* NOTE: carlton/2003-11-10: See comment above in the
+	       DW_TAG_class_type, etc. block.  */
+
+	    list_to_add
+	      = (cu->list_in_scope == cu->get_builder ()->get_file_symbols ()
+		 && cu->per_cu->lang == language_cplus
+		 ? cu->get_builder ()->get_global_symbols ()
+		 : cu->list_in_scope);
+	  }
+	  break;
+	case DW_TAG_imported_declaration:
+	case DW_TAG_namespace:
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+	  list_to_add = cu->get_builder ()->get_global_symbols ();
+	  break;
+	case DW_TAG_module:
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+	  SYMBOL_DOMAIN (sym) = MODULE_DOMAIN;
+	  list_to_add = cu->get_builder ()->get_global_symbols ();
+	  break;
+	case DW_TAG_common_block:
+	  SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK;
+	  SYMBOL_DOMAIN (sym) = COMMON_BLOCK_DOMAIN;
+	  add_symbol_to_list (sym, cu->list_in_scope);
+	  break;
+	default:
+	  /* Not a tag we recognize.  Hopefully we aren't processing
+	     trash data, but since we must specifically ignore things
+	     we don't recognize, there is nothing else we should do at
+	     this point.  */
+	  complaint (_("unsupported tag: '%s'"),
+		     dwarf_tag_name (die->tag));
+	  break;
+	}
+
+      if (suppress_add)
+	{
+	  sym->hash_next = objfile->template_symbols;
+	  objfile->template_symbols = sym;
+	  list_to_add = NULL;
+	}
+
+      if (list_to_add != NULL)
+	add_symbol_to_list (sym, list_to_add);
+
+      /* For the benefit of old versions of GCC, check for anonymous
+	 namespaces based on the demangled name.  */
+      if (!cu->processing_has_namespace_info
+	  && cu->per_cu->lang == language_cplus)
+	cp_scan_for_anonymous_namespaces (cu->get_builder (), sym, objfile);
+    }
+  return (sym);
+}
+
+/* Given an attr with a DW_FORM_dataN value in host byte order,
+   zero-extend it as appropriate for the symbol's type.  The DWARF
+   standard (v4) is not entirely clear about the meaning of using
+   DW_FORM_dataN for a constant with a signed type, where the type is
+   wider than the data.  The conclusion of a discussion on the DWARF
+   list was that this is unspecified.  We choose to always zero-extend
+   because that is the interpretation long in use by GCC.  */
+
+static gdb_byte *
+dwarf2_const_value_data (const struct attribute *attr, struct obstack *obstack,
+			 struct dwarf2_cu *cu, LONGEST *value, int bits)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  enum bfd_endian byte_order = bfd_big_endian (objfile->obfd) ?
+				BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
+  LONGEST l = attr->constant_value (0);
+
+  if (bits < sizeof (*value) * 8)
+    {
+      l &= ((LONGEST) 1 << bits) - 1;
+      *value = l;
+    }
+  else if (bits == sizeof (*value) * 8)
+    *value = l;
+  else
+    {
+      gdb_byte *bytes = (gdb_byte *) obstack_alloc (obstack, bits / 8);
+      store_unsigned_integer (bytes, bits / 8, byte_order, l);
+      return bytes;
+    }
+
+  return NULL;
+}
+
+/* Read a constant value from an attribute.  Either set *VALUE, or if
+   the value does not fit in *VALUE, set *BYTES - either already
+   allocated on the objfile obstack, or newly allocated on OBSTACK,
+   or, set *BATON, if we translated the constant to a location
+   expression.  */
+
+static void
+dwarf2_const_value_attr (const struct attribute *attr, struct type *type,
+			 const char *name, struct obstack *obstack,
+			 struct dwarf2_cu *cu,
+			 LONGEST *value, const gdb_byte **bytes,
+			 struct dwarf2_locexpr_baton **baton)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct comp_unit_head *cu_header = &cu->header;
+  struct dwarf_block *blk;
+  enum bfd_endian byte_order = (bfd_big_endian (objfile->obfd) ?
+				BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE);
+
+  *value = 0;
+  *bytes = NULL;
+  *baton = NULL;
+
+  switch (attr->form)
+    {
+    case DW_FORM_addr:
+    case DW_FORM_addrx:
+    case DW_FORM_GNU_addr_index:
+      {
+	gdb_byte *data;
+
+	if (TYPE_LENGTH (type) != cu_header->addr_size)
+	  dwarf2_const_value_length_mismatch_complaint (name,
+							cu_header->addr_size,
+							TYPE_LENGTH (type));
+	/* Symbols of this form are reasonably rare, so we just
+	   piggyback on the existing location code rather than writing
+	   a new implementation of symbol_computed_ops.  */
+	*baton = XOBNEW (obstack, struct dwarf2_locexpr_baton);
+	(*baton)->per_objfile = per_objfile;
+	(*baton)->per_cu = cu->per_cu;
+	gdb_assert ((*baton)->per_cu);
+
+	(*baton)->size = 2 + cu_header->addr_size;
+	data = (gdb_byte *) obstack_alloc (obstack, (*baton)->size);
+	(*baton)->data = data;
+
+	data[0] = DW_OP_addr;
+	store_unsigned_integer (&data[1], cu_header->addr_size,
+				byte_order, attr->as_address ());
+	data[cu_header->addr_size + 1] = DW_OP_stack_value;
+      }
+      break;
+    case DW_FORM_string:
+    case DW_FORM_strp:
+    case DW_FORM_strx:
+    case DW_FORM_GNU_str_index:
+    case DW_FORM_GNU_strp_alt:
+      /* The string is already allocated on the objfile obstack, point
+	 directly to it.  */
+      *bytes = (const gdb_byte *) attr->as_string ();
+      break;
+    case DW_FORM_block1:
+    case DW_FORM_block2:
+    case DW_FORM_block4:
+    case DW_FORM_block:
+    case DW_FORM_exprloc:
+    case DW_FORM_data16:
+      blk = attr->as_block ();
+      if (TYPE_LENGTH (type) != blk->size)
+	dwarf2_const_value_length_mismatch_complaint (name, blk->size,
+						      TYPE_LENGTH (type));
+      *bytes = blk->data;
+      break;
+
+      /* The DW_AT_const_value attributes are supposed to carry the
+	 symbol's value "represented as it would be on the target
+	 architecture."  By the time we get here, it's already been
+	 converted to host endianness, so we just need to sign- or
+	 zero-extend it as appropriate.  */
+    case DW_FORM_data1:
+      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 8);
+      break;
+    case DW_FORM_data2:
+      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 16);
+      break;
+    case DW_FORM_data4:
+      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 32);
+      break;
+    case DW_FORM_data8:
+      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 64);
+      break;
+
+    case DW_FORM_sdata:
+    case DW_FORM_implicit_const:
+      *value = attr->as_signed ();
+      break;
+
+    case DW_FORM_udata:
+      *value = attr->as_unsigned ();
+      break;
+
+    default:
+      complaint (_("unsupported const value attribute form: '%s'"),
+		 dwarf_form_name (attr->form));
+      *value = 0;
+      break;
+    }
+}
+
+
+/* Copy constant value from an attribute to a symbol.  */
+
+static void
+dwarf2_const_value (const struct attribute *attr, struct symbol *sym,
+		    struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  LONGEST value;
+  const gdb_byte *bytes;
+  struct dwarf2_locexpr_baton *baton;
+
+  dwarf2_const_value_attr (attr, SYMBOL_TYPE (sym),
+			   sym->print_name (),
+			   &objfile->objfile_obstack, cu,
+			   &value, &bytes, &baton);
+
+  if (baton != NULL)
+    {
+      SYMBOL_LOCATION_BATON (sym) = baton;
+      SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index;
+    }
+  else if (bytes != NULL)
+     {
+      SYMBOL_VALUE_BYTES (sym) = bytes;
+      SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES;
+    }
+  else
+    {
+      SYMBOL_VALUE (sym) = value;
+      SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
+    }
+}
+
+/* Return the type of the die in question using its DW_AT_type attribute.  */
+
+static struct type *
+die_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *type_attr;
+
+  type_attr = dwarf2_attr (die, DW_AT_type, cu);
+  if (!type_attr)
+    {
+      struct objfile *objfile = cu->per_objfile->objfile;
+      /* A missing DW_AT_type represents a void type.  */
+      return objfile_type (objfile)->builtin_void;
+    }
+
+  return lookup_die_type (die, type_attr, cu);
+}
+
+/* True iff CU's producer generates GNAT Ada auxiliary information
+   that allows to find parallel types through that information instead
+   of having to do expensive parallel lookups by type name.  */
+
+static int
+need_gnat_info (struct dwarf2_cu *cu)
+{
+  /* Assume that the Ada compiler was GNAT, which always produces
+     the auxiliary information.  */
+  return (cu->per_cu->lang == language_ada);
+}
+
+/* Return the auxiliary type of the die in question using its
+   DW_AT_GNAT_descriptive_type attribute.  Returns NULL if the
+   attribute is not present.  */
+
+static struct type *
+die_descriptive_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *type_attr;
+
+  type_attr = dwarf2_attr (die, DW_AT_GNAT_descriptive_type, cu);
+  if (!type_attr)
+    return NULL;
+
+  return lookup_die_type (die, type_attr, cu);
+}
+
+/* If DIE has a descriptive_type attribute, then set the TYPE's
+   descriptive type accordingly.  */
+
+static void
+set_descriptive_type (struct type *type, struct die_info *die,
+		      struct dwarf2_cu *cu)
+{
+  struct type *descriptive_type = die_descriptive_type (die, cu);
+
+  if (descriptive_type)
+    {
+      ALLOCATE_GNAT_AUX_TYPE (type);
+      TYPE_DESCRIPTIVE_TYPE (type) = descriptive_type;
+    }
+}
+
+/* Return the containing type of the die in question using its
+   DW_AT_containing_type attribute.  */
+
+static struct type *
+die_containing_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *type_attr;
+  struct objfile *objfile = cu->per_objfile->objfile;
+
+  type_attr = dwarf2_attr (die, DW_AT_containing_type, cu);
+  if (!type_attr)
+    error (_("Dwarf Error: Problem turning containing type into gdb type "
+	     "[in module %s]"), objfile_name (objfile));
+
+  return lookup_die_type (die, type_attr, cu);
+}
+
+/* Return an error marker type to use for the ill formed type in DIE/CU.  */
+
+static struct type *
+build_error_marker_type (struct dwarf2_cu *cu, struct die_info *die)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  char *saved;
+
+  std::string message
+    = string_printf (_("<unknown type in %s, CU %s, DIE %s>"),
+		     objfile_name (objfile),
+		     sect_offset_str (cu->header.sect_off),
+		     sect_offset_str (die->sect_off));
+  saved = obstack_strdup (&objfile->objfile_obstack, message);
+
+  return init_type (objfile, TYPE_CODE_ERROR, 0, saved);
+}
+
+/* Look up the type of DIE in CU using its type attribute ATTR.
+   ATTR must be one of: DW_AT_type, DW_AT_GNAT_descriptive_type,
+   DW_AT_containing_type.
+   If there is no type substitute an error marker.  */
+
+static struct type *
+lookup_die_type (struct die_info *die, const struct attribute *attr,
+		 struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct type *this_type;
+
+  gdb_assert (attr->name == DW_AT_type
+	      || attr->name == DW_AT_GNAT_descriptive_type
+	      || attr->name == DW_AT_containing_type);
+
+  /* First see if we have it cached.  */
+
+  if (attr->form == DW_FORM_GNU_ref_alt)
+    {
+      struct dwarf2_per_cu_data *per_cu;
+      sect_offset sect_off = attr->get_ref_die_offset ();
+
+      per_cu = dwarf2_find_containing_comp_unit (sect_off, 1, per_objfile);
+      this_type = get_die_type_at_offset (sect_off, per_cu, per_objfile);
+    }
+  else if (attr->form_is_ref ())
+    {
+      sect_offset sect_off = attr->get_ref_die_offset ();
+
+      this_type = get_die_type_at_offset (sect_off, cu->per_cu, per_objfile);
+    }
+  else if (attr->form == DW_FORM_ref_sig8)
+    {
+      ULONGEST signature = attr->as_signature ();
+
+      return get_signatured_type (die, signature, cu);
+    }
+  else
+    {
+      complaint (_("Dwarf Error: Bad type attribute %s in DIE"
+		   " at %s [in module %s]"),
+		 dwarf_attr_name (attr->name), sect_offset_str (die->sect_off),
+		 objfile_name (objfile));
+      return build_error_marker_type (cu, die);
+    }
+
+  /* If not cached we need to read it in.  */
+
+  if (this_type == NULL)
+    {
+      struct die_info *type_die = NULL;
+      struct dwarf2_cu *type_cu = cu;
+
+      if (attr->form_is_ref ())
+	type_die = follow_die_ref (die, attr, &type_cu);
+      if (type_die == NULL)
+	return build_error_marker_type (cu, die);
+      /* If we find the type now, it's probably because the type came
+	 from an inter-CU reference and the type's CU got expanded before
+	 ours.  */
+      this_type = read_type_die (type_die, type_cu);
+    }
+
+  /* If we still don't have a type use an error marker.  */
+
+  if (this_type == NULL)
+    return build_error_marker_type (cu, die);
+
+  return this_type;
+}
+
+/* Return the type in DIE, CU.
+   Returns NULL for invalid types.
+
+   This first does a lookup in die_type_hash,
+   and only reads the die in if necessary.
+
+   NOTE: This can be called when reading in partial or full symbols.  */
+
+static struct type *
+read_type_die (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *this_type;
+
+  this_type = get_die_type (die, cu);
+  if (this_type)
+    return this_type;
+
+  return read_type_die_1 (die, cu);
+}
+
+/* Read the type in DIE, CU.
+   Returns NULL for invalid types.  */
+
+static struct type *
+read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct type *this_type = NULL;
+
+  switch (die->tag)
+    {
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+      this_type = read_structure_type (die, cu);
+      break;
+    case DW_TAG_enumeration_type:
+      this_type = read_enumeration_type (die, cu);
+      break;
+    case DW_TAG_subprogram:
+    case DW_TAG_subroutine_type:
+    case DW_TAG_inlined_subroutine:
+      this_type = read_subroutine_type (die, cu);
+      break;
+    case DW_TAG_array_type:
+      this_type = read_array_type (die, cu);
+      break;
+    case DW_TAG_set_type:
+      this_type = read_set_type (die, cu);
+      break;
+    case DW_TAG_pointer_type:
+      this_type = read_tag_pointer_type (die, cu);
+      break;
+    case DW_TAG_ptr_to_member_type:
+      this_type = read_tag_ptr_to_member_type (die, cu);
+      break;
+    case DW_TAG_reference_type:
+      this_type = read_tag_reference_type (die, cu, TYPE_CODE_REF);
+      break;
+    case DW_TAG_rvalue_reference_type:
+      this_type = read_tag_reference_type (die, cu, TYPE_CODE_RVALUE_REF);
+      break;
+    case DW_TAG_const_type:
+      this_type = read_tag_const_type (die, cu);
+      break;
+    case DW_TAG_volatile_type:
+      this_type = read_tag_volatile_type (die, cu);
+      break;
+    case DW_TAG_restrict_type:
+      this_type = read_tag_restrict_type (die, cu);
+      break;
+    case DW_TAG_string_type:
+      this_type = read_tag_string_type (die, cu);
+      break;
+    case DW_TAG_typedef:
+      this_type = read_typedef (die, cu);
+      break;
+    case DW_TAG_subrange_type:
+      this_type = read_subrange_type (die, cu);
+      break;
+    case DW_TAG_base_type:
+      this_type = read_base_type (die, cu);
+      break;
+    case DW_TAG_unspecified_type:
+      this_type = read_unspecified_type (die, cu);
+      break;
+    case DW_TAG_namespace:
+      this_type = read_namespace_type (die, cu);
+      break;
+    case DW_TAG_module:
+      this_type = read_module_type (die, cu);
+      break;
+    case DW_TAG_atomic_type:
+      this_type = read_tag_atomic_type (die, cu);
+      break;
+    default:
+      complaint (_("unexpected tag in read_type_die: '%s'"),
+		 dwarf_tag_name (die->tag));
+      break;
+    }
+
+  return this_type;
+}
+
+/* See if we can figure out if the class lives in a namespace.  We do
+   this by looking for a member function; its demangled name will
+   contain namespace info, if there is any.
+   Return the computed name or NULL.
+   Space for the result is allocated on the objfile's obstack.
+   This is the full-die version of guess_partial_die_structure_name.
+   In this case we know DIE has no useful parent.  */
+
+static const char *
+guess_full_die_structure_name (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct die_info *spec_die;
+  struct dwarf2_cu *spec_cu;
+  struct die_info *child;
+  struct objfile *objfile = cu->per_objfile->objfile;
+
+  spec_cu = cu;
+  spec_die = die_specification (die, &spec_cu);
+  if (spec_die != NULL)
+    {
+      die = spec_die;
+      cu = spec_cu;
+    }
+
+  for (child = die->child;
+       child != NULL;
+       child = child->sibling)
+    {
+      if (child->tag == DW_TAG_subprogram)
+	{
+	  const char *linkage_name = dw2_linkage_name (child, cu);
+
+	  if (linkage_name != NULL)
+	    {
+	      gdb::unique_xmalloc_ptr<char> actual_name
+		(cu->language_defn->class_name_from_physname (linkage_name));
+	      const char *name = NULL;
+
+	      if (actual_name != NULL)
+		{
+		  const char *die_name = dwarf2_name (die, cu);
+
+		  if (die_name != NULL
+		      && strcmp (die_name, actual_name.get ()) != 0)
+		    {
+		      /* Strip off the class name from the full name.
+			 We want the prefix.  */
+		      int die_name_len = strlen (die_name);
+		      int actual_name_len = strlen (actual_name.get ());
+		      const char *ptr = actual_name.get ();
+
+		      /* Test for '::' as a sanity check.  */
+		      if (actual_name_len > die_name_len + 2
+			  && ptr[actual_name_len - die_name_len - 1] == ':')
+			name = obstack_strndup (
+			  &objfile->per_bfd->storage_obstack,
+			  ptr, actual_name_len - die_name_len - 2);
+		    }
+		}
+	      return name;
+	    }
+	}
+    }
+
+  return NULL;
+}
+
+/* GCC might emit a nameless typedef that has a linkage name.  Determine the
+   prefix part in such case.  See
+   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510.  */
+
+static const char *
+anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+  const char *base;
+
+  if (die->tag != DW_TAG_class_type && die->tag != DW_TAG_interface_type
+      && die->tag != DW_TAG_structure_type && die->tag != DW_TAG_union_type)
+    return NULL;
+
+  if (dwarf2_string_attr (die, DW_AT_name, cu) != NULL)
+    return NULL;
+
+  attr = dw2_linkage_name_attr (die, cu);
+  const char *attr_name = attr->as_string ();
+  if (attr == NULL || attr_name == NULL)
+    return NULL;
+
+  /* dwarf2_name had to be already called.  */
+  gdb_assert (attr->canonical_string_p ());
+
+  /* Strip the base name, keep any leading namespaces/classes.  */
+  base = strrchr (attr_name, ':');
+  if (base == NULL || base == attr_name || base[-1] != ':')
+    return "";
+
+  struct objfile *objfile = cu->per_objfile->objfile;
+  return obstack_strndup (&objfile->per_bfd->storage_obstack,
+			  attr_name,
+			  &base[-1] - attr_name);
+}
+
+/* Return the name of the namespace/class that DIE is defined within,
+   or "" if we can't tell.  The caller should not xfree the result.
+
+   For example, if we're within the method foo() in the following
+   code:
+
+   namespace N {
+     class C {
+       void foo () {
+       }
+     };
+   }
+
+   then determine_prefix on foo's die will return "N::C".  */
+
+static const char *
+determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct die_info *parent, *spec_die;
+  struct dwarf2_cu *spec_cu;
+  struct type *parent_type;
+  const char *retval;
+
+  if (cu->per_cu->lang != language_cplus
+      && cu->per_cu->lang != language_fortran
+      && cu->per_cu->lang != language_d
+      && cu->per_cu->lang != language_rust)
+    return "";
+
+  retval = anonymous_struct_prefix (die, cu);
+  if (retval)
+    return retval;
+
+  /* We have to be careful in the presence of DW_AT_specification.
+     For example, with GCC 3.4, given the code
+
+     namespace N {
+       void foo() {
+	 // Definition of N::foo.
+       }
+     }
+
+     then we'll have a tree of DIEs like this:
+
+     1: DW_TAG_compile_unit
+       2: DW_TAG_namespace        // N
+	 3: DW_TAG_subprogram     // declaration of N::foo
+       4: DW_TAG_subprogram       // definition of N::foo
+	    DW_AT_specification   // refers to die #3
+
+     Thus, when processing die #4, we have to pretend that we're in
+     the context of its DW_AT_specification, namely the contex of die
+     #3.  */
+  spec_cu = cu;
+  spec_die = die_specification (die, &spec_cu);
+  if (spec_die == NULL)
+    parent = die->parent;
+  else
+    {
+      parent = spec_die->parent;
+      cu = spec_cu;
+    }
+
+  if (parent == NULL)
+    return "";
+  else if (parent->building_fullname)
+    {
+      const char *name;
+      const char *parent_name;
+
+      /* It has been seen on RealView 2.2 built binaries,
+	 DW_TAG_template_type_param types actually _defined_ as
+	 children of the parent class:
+
+	 enum E {};
+	 template class <class Enum> Class{};
+	 Class<enum E> class_e;
+
+	 1: DW_TAG_class_type (Class)
+	   2: DW_TAG_enumeration_type (E)
+	     3: DW_TAG_enumerator (enum1:0)
+	     3: DW_TAG_enumerator (enum2:1)
+	     ...
+	   2: DW_TAG_template_type_param
+	      DW_AT_type  DW_FORM_ref_udata (E)
+
+	 Besides being broken debug info, it can put GDB into an
+	 infinite loop.  Consider:
+
+	 When we're building the full name for Class<E>, we'll start
+	 at Class, and go look over its template type parameters,
+	 finding E.  We'll then try to build the full name of E, and
+	 reach here.  We're now trying to build the full name of E,
+	 and look over the parent DIE for containing scope.  In the
+	 broken case, if we followed the parent DIE of E, we'd again
+	 find Class, and once again go look at its template type
+	 arguments, etc., etc.  Simply don't consider such parent die
+	 as source-level parent of this die (it can't be, the language
+	 doesn't allow it), and break the loop here.  */
+      name = dwarf2_name (die, cu);
+      parent_name = dwarf2_name (parent, cu);
+      complaint (_("template param type '%s' defined within parent '%s'"),
+		 name ? name : "<unknown>",
+		 parent_name ? parent_name : "<unknown>");
+      return "";
+    }
+  else
+    switch (parent->tag)
+      {
+      case DW_TAG_namespace:
+	parent_type = read_type_die (parent, cu);
+	/* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
+	   DW_TAG_namespace DIEs with a name of "::" for the global namespace.
+	   Work around this problem here.  */
+	if (cu->per_cu->lang == language_cplus
+	    && strcmp (parent_type->name (), "::") == 0)
+	  return "";
+	/* We give a name to even anonymous namespaces.  */
+	return parent_type->name ();
+      case DW_TAG_class_type:
+      case DW_TAG_interface_type:
+      case DW_TAG_structure_type:
+      case DW_TAG_union_type:
+      case DW_TAG_module:
+	parent_type = read_type_die (parent, cu);
+	if (parent_type->name () != NULL)
+	  return parent_type->name ();
+	else
+	  /* An anonymous structure is only allowed non-static data
+	     members; no typedefs, no member functions, et cetera.
+	     So it does not need a prefix.  */
+	  return "";
+      case DW_TAG_compile_unit:
+      case DW_TAG_partial_unit:
+	/* gcc-4.5 -gdwarf-4 can drop the enclosing namespace.  Cope.  */
+	if (cu->per_cu->lang == language_cplus
+	    && !per_objfile->per_bfd->types.empty ()
+	    && die->child != NULL
+	    && (die->tag == DW_TAG_class_type
+		|| die->tag == DW_TAG_structure_type
+		|| die->tag == DW_TAG_union_type))
+	  {
+	    const char *name = guess_full_die_structure_name (die, cu);
+	    if (name != NULL)
+	      return name;
+	  }
+	return "";
+      case DW_TAG_subprogram:
+	/* Nested subroutines in Fortran get a prefix with the name
+	   of the parent's subroutine.  */
+	if (cu->per_cu->lang == language_fortran)
+	  {
+	    if ((die->tag ==  DW_TAG_subprogram)
+		&& (dwarf2_name (parent, cu) != NULL))
+	      return dwarf2_name (parent, cu);
+	  }
+	return determine_prefix (parent, cu);
+      case DW_TAG_enumeration_type:
+	parent_type = read_type_die (parent, cu);
+	if (parent_type->is_declared_class ())
+	  {
+	    if (parent_type->name () != NULL)
+	      return parent_type->name ();
+	    return "";
+	  }
+	/* Fall through.  */
+      default:
+	return determine_prefix (parent, cu);
+      }
+}
+
+/* Return a newly-allocated string formed by concatenating PREFIX and SUFFIX
+   with appropriate separator.  If PREFIX or SUFFIX is NULL or empty, then
+   simply copy the SUFFIX or PREFIX, respectively.  If OBS is non-null, perform
+   an obconcat, otherwise allocate storage for the result.  The CU argument is
+   used to determine the language and hence, the appropriate separator.  */
+
+#define MAX_SEP_LEN 7  /* strlen ("__") + strlen ("_MOD_")  */
+
+static char *
+typename_concat (struct obstack *obs, const char *prefix, const char *suffix,
+		 int physname, struct dwarf2_cu *cu)
+{
+  const char *lead = "";
+  const char *sep;
+
+  if (suffix == NULL || suffix[0] == '\0'
+      || prefix == NULL || prefix[0] == '\0')
+    sep = "";
+  else if (cu->per_cu->lang == language_d)
+    {
+      /* For D, the 'main' function could be defined in any module, but it
+	 should never be prefixed.  */
+      if (strcmp (suffix, "D main") == 0)
+	{
+	  prefix = "";
+	  sep = "";
+	}
+      else
+	sep = ".";
+    }
+  else if (cu->per_cu->lang == language_fortran && physname)
+    {
+      /* This is gfortran specific mangling.  Normally DW_AT_linkage_name or
+	 DW_AT_MIPS_linkage_name is preferred and used instead.  */
+
+      lead = "__";
+      sep = "_MOD_";
+    }
+  else
+    sep = "::";
+
+  if (prefix == NULL)
+    prefix = "";
+  if (suffix == NULL)
+    suffix = "";
+
+  if (obs == NULL)
+    {
+      char *retval
+	= ((char *)
+	   xmalloc (strlen (prefix) + MAX_SEP_LEN + strlen (suffix) + 1));
+
+      strcpy (retval, lead);
+      strcat (retval, prefix);
+      strcat (retval, sep);
+      strcat (retval, suffix);
+      return retval;
+    }
+  else
+    {
+      /* We have an obstack.  */
+      return obconcat (obs, lead, prefix, sep, suffix, (char *) NULL);
+    }
+}
+
+/* Get name of a die, return NULL if not found.  */
+
+static const char *
+dwarf2_canonicalize_name (const char *name, struct dwarf2_cu *cu,
+			  struct objfile *objfile)
+{
+  if (name && cu->per_cu->lang == language_cplus)
+    {
+      gdb::unique_xmalloc_ptr<char> canon_name
+	= cp_canonicalize_string (name);
+
+      if (canon_name != nullptr)
+	name = objfile->intern (canon_name.get ());
+    }
+
+  return name;
+}
+
+/* Get name of a die, return NULL if not found.
+   Anonymous namespaces are converted to their magic string.  */
+
+static const char *
+dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+  struct objfile *objfile = cu->per_objfile->objfile;
+
+  attr = dwarf2_attr (die, DW_AT_name, cu);
+  const char *attr_name = attr == nullptr ? nullptr : attr->as_string ();
+  if (attr_name == nullptr
+      && die->tag != DW_TAG_namespace
+      && die->tag != DW_TAG_class_type
+      && die->tag != DW_TAG_interface_type
+      && die->tag != DW_TAG_structure_type
+      && die->tag != DW_TAG_union_type)
+    return NULL;
+
+  switch (die->tag)
+    {
+    case DW_TAG_compile_unit:
+    case DW_TAG_partial_unit:
+      /* Compilation units have a DW_AT_name that is a filename, not
+	 a source language identifier.  */
+    case DW_TAG_enumeration_type:
+    case DW_TAG_enumerator:
+      /* These tags always have simple identifiers already; no need
+	 to canonicalize them.  */
+      return attr_name;
+
+    case DW_TAG_namespace:
+      if (attr_name != nullptr)
+	return attr_name;
+      return CP_ANONYMOUS_NAMESPACE_STR;
+
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+      /* Some GCC versions emit spurious DW_AT_name attributes for unnamed
+	 structures or unions.  These were of the form "._%d" in GCC 4.1,
+	 or simply "<anonymous struct>" or "<anonymous union>" in GCC 4.3
+	 and GCC 4.4.  We work around this problem by ignoring these.  */
+      if (attr_name != nullptr
+	  && (startswith (attr_name, "._")
+	      || startswith (attr_name, "<anonymous")))
+	return NULL;
+
+      /* GCC might emit a nameless typedef that has a linkage name.  See
+	 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510.  */
+      if (!attr || attr_name == NULL)
+	{
+	  attr = dw2_linkage_name_attr (die, cu);
+	  attr_name = attr == nullptr ? nullptr : attr->as_string ();
+	  if (attr == NULL || attr_name == NULL)
+	    return NULL;
+
+	  /* Avoid demangling attr_name the second time on a second
+	     call for the same DIE.  */
+	  if (!attr->canonical_string_p ())
+	    {
+	      gdb::unique_xmalloc_ptr<char> demangled
+		(gdb_demangle (attr_name, DMGL_TYPES));
+	      if (demangled == nullptr)
+		return nullptr;
+
+	      attr->set_string_canonical (objfile->intern (demangled.get ()));
+	      attr_name = attr->as_string ();
+	    }
+
+	  /* Strip any leading namespaces/classes, keep only the
+	     base name.  DW_AT_name for named DIEs does not
+	     contain the prefixes.  */
+	  const char *base = strrchr (attr_name, ':');
+	  if (base && base > attr_name && base[-1] == ':')
+	    return &base[1];
+	  else
+	    return attr_name;
+	}
+      break;
+
+    default:
+      break;
+    }
+
+  if (!attr->canonical_string_p ())
+    attr->set_string_canonical (dwarf2_canonicalize_name (attr_name, cu,
+							  objfile));
+  return attr->as_string ();
+}
+
+/* Return the die that this die in an extension of, or NULL if there
+   is none.  *EXT_CU is the CU containing DIE on input, and the CU
+   containing the return value on output.  */
+
+static struct die_info *
+dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu)
+{
+  struct attribute *attr;
+
+  attr = dwarf2_attr (die, DW_AT_extension, *ext_cu);
+  if (attr == NULL)
+    return NULL;
+
+  return follow_die_ref (die, attr, ext_cu);
+}
+
+static void
+dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
+{
+  unsigned int i;
+
+  print_spaces (indent, f);
+  fprintf_unfiltered (f, "Die: %s (abbrev %d, offset %s)\n",
+		      dwarf_tag_name (die->tag), die->abbrev,
+		      sect_offset_str (die->sect_off));
+
+  if (die->parent != NULL)
+    {
+      print_spaces (indent, f);
+      fprintf_unfiltered (f, "  parent at offset: %s\n",
+			  sect_offset_str (die->parent->sect_off));
+    }
+
+  print_spaces (indent, f);
+  fprintf_unfiltered (f, "  has children: %s\n",
+	   dwarf_bool_name (die->child != NULL));
+
+  print_spaces (indent, f);
+  fprintf_unfiltered (f, "  attributes:\n");
+
+  for (i = 0; i < die->num_attrs; ++i)
+    {
+      print_spaces (indent, f);
+      fprintf_unfiltered (f, "    %s (%s) ",
+	       dwarf_attr_name (die->attrs[i].name),
+	       dwarf_form_name (die->attrs[i].form));
+
+      switch (die->attrs[i].form)
+	{
+	case DW_FORM_addr:
+	case DW_FORM_addrx:
+	case DW_FORM_GNU_addr_index:
+	  fprintf_unfiltered (f, "address: ");
+	  fputs_filtered (hex_string (die->attrs[i].as_address ()), f);
+	  break;
+	case DW_FORM_block2:
+	case DW_FORM_block4:
+	case DW_FORM_block:
+	case DW_FORM_block1:
+	  fprintf_unfiltered (f, "block: size %s",
+			      pulongest (die->attrs[i].as_block ()->size));
+	  break;
+	case DW_FORM_exprloc:
+	  fprintf_unfiltered (f, "expression: size %s",
+			      pulongest (die->attrs[i].as_block ()->size));
+	  break;
+	case DW_FORM_data16:
+	  fprintf_unfiltered (f, "constant of 16 bytes");
+	  break;
+	case DW_FORM_ref_addr:
+	  fprintf_unfiltered (f, "ref address: ");
+	  fputs_filtered (hex_string (die->attrs[i].as_unsigned ()), f);
+	  break;
+	case DW_FORM_GNU_ref_alt:
+	  fprintf_unfiltered (f, "alt ref address: ");
+	  fputs_filtered (hex_string (die->attrs[i].as_unsigned ()), f);
+	  break;
+	case DW_FORM_ref1:
+	case DW_FORM_ref2:
+	case DW_FORM_ref4:
+	case DW_FORM_ref8:
+	case DW_FORM_ref_udata:
+	  fprintf_unfiltered (f, "constant ref: 0x%lx (adjusted)",
+			      (long) (die->attrs[i].as_unsigned ()));
+	  break;
+	case DW_FORM_data1:
+	case DW_FORM_data2:
+	case DW_FORM_data4:
+	case DW_FORM_data8:
+	case DW_FORM_udata:
+	  fprintf_unfiltered (f, "constant: %s",
+			      pulongest (die->attrs[i].as_unsigned ()));
+	  break;
+	case DW_FORM_sec_offset:
+	  fprintf_unfiltered (f, "section offset: %s",
+			      pulongest (die->attrs[i].as_unsigned ()));
+	  break;
+	case DW_FORM_ref_sig8:
+	  fprintf_unfiltered (f, "signature: %s",
+			      hex_string (die->attrs[i].as_signature ()));
+	  break;
+	case DW_FORM_string:
+	case DW_FORM_strp:
+	case DW_FORM_line_strp:
+	case DW_FORM_strx:
+	case DW_FORM_GNU_str_index:
+	case DW_FORM_GNU_strp_alt:
+	  fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)",
+			      die->attrs[i].as_string ()
+			      ? die->attrs[i].as_string () : "",
+			      die->attrs[i].canonical_string_p () ? "is" : "not");
+	  break;
+	case DW_FORM_flag:
+	  if (die->attrs[i].as_boolean ())
+	    fprintf_unfiltered (f, "flag: TRUE");
+	  else
+	    fprintf_unfiltered (f, "flag: FALSE");
+	  break;
+	case DW_FORM_flag_present:
+	  fprintf_unfiltered (f, "flag: TRUE");
+	  break;
+	case DW_FORM_indirect:
+	  /* The reader will have reduced the indirect form to
+	     the "base form" so this form should not occur.  */
+	  fprintf_unfiltered (f,
+			      "unexpected attribute form: DW_FORM_indirect");
+	  break;
+	case DW_FORM_sdata:
+	case DW_FORM_implicit_const:
+	  fprintf_unfiltered (f, "constant: %s",
+			      plongest (die->attrs[i].as_signed ()));
+	  break;
+	default:
+	  fprintf_unfiltered (f, "unsupported attribute form: %d.",
+		   die->attrs[i].form);
+	  break;
+	}
+      fprintf_unfiltered (f, "\n");
+    }
+}
+
+static void
+dump_die_for_error (struct die_info *die)
+{
+  dump_die_shallow (gdb_stderr, 0, die);
+}
+
+static void
+dump_die_1 (struct ui_file *f, int level, int max_level, struct die_info *die)
+{
+  int indent = level * 4;
+
+  gdb_assert (die != NULL);
+
+  if (level >= max_level)
+    return;
+
+  dump_die_shallow (f, indent, die);
+
+  if (die->child != NULL)
+    {
+      print_spaces (indent, f);
+      fprintf_unfiltered (f, "  Children:");
+      if (level + 1 < max_level)
+	{
+	  fprintf_unfiltered (f, "\n");
+	  dump_die_1 (f, level + 1, max_level, die->child);
+	}
+      else
+	{
+	  fprintf_unfiltered (f,
+			      " [not printed, max nesting level reached]\n");
+	}
+    }
+
+  if (die->sibling != NULL && level > 0)
+    {
+      dump_die_1 (f, level, max_level, die->sibling);
+    }
+}
+
+/* This is called from the pdie macro in gdbinit.in.
+   It's not static so gcc will keep a copy callable from gdb.  */
+
+void
+dump_die (struct die_info *die, int max_level)
+{
+  dump_die_1 (gdb_stdlog, 0, max_level, die);
+}
+
+static void
+store_in_ref_table (struct die_info *die, struct dwarf2_cu *cu)
+{
+  void **slot;
+
+  slot = htab_find_slot_with_hash (cu->die_hash, die,
+				   to_underlying (die->sect_off),
+				   INSERT);
+
+  *slot = die;
+}
+
+/* Follow reference or signature attribute ATTR of SRC_DIE.
+   On entry *REF_CU is the CU of SRC_DIE.
+   On exit *REF_CU is the CU of the result.  */
+
+static struct die_info *
+follow_die_ref_or_sig (struct die_info *src_die, const struct attribute *attr,
+		       struct dwarf2_cu **ref_cu)
+{
+  struct die_info *die;
+
+  if (attr->form_is_ref ())
+    die = follow_die_ref (src_die, attr, ref_cu);
+  else if (attr->form == DW_FORM_ref_sig8)
+    die = follow_die_sig (src_die, attr, ref_cu);
+  else
+    {
+      dump_die_for_error (src_die);
+      error (_("Dwarf Error: Expected reference attribute [in module %s]"),
+	     objfile_name ((*ref_cu)->per_objfile->objfile));
+    }
+
+  return die;
+}
+
+/* Follow reference OFFSET.
+   On entry *REF_CU is the CU of the source die referencing OFFSET.
+   On exit *REF_CU is the CU of the result.
+   Returns NULL if OFFSET is invalid.  */
+
+static struct die_info *
+follow_die_offset (sect_offset sect_off, int offset_in_dwz,
+		   struct dwarf2_cu **ref_cu)
+{
+  struct die_info temp_die;
+  struct dwarf2_cu *target_cu, *cu = *ref_cu;
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+  gdb_assert (cu->per_cu != NULL);
+
+  target_cu = cu;
+
+  dwarf_read_debug_printf_v ("source CU offset: %s, target offset: %s, "
+			     "source CU contains target offset: %d",
+			     sect_offset_str (cu->per_cu->sect_off),
+			     sect_offset_str (sect_off),
+			     cu->header.offset_in_cu_p (sect_off));
+
+  if (cu->per_cu->is_debug_types)
+    {
+      /* .debug_types CUs cannot reference anything outside their CU.
+	 If they need to, they have to reference a signatured type via
+	 DW_FORM_ref_sig8.  */
+      if (!cu->header.offset_in_cu_p (sect_off))
+	return NULL;
+    }
+  else if (offset_in_dwz != cu->per_cu->is_dwz
+	   || !cu->header.offset_in_cu_p (sect_off))
+    {
+      struct dwarf2_per_cu_data *per_cu;
+
+      per_cu = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz,
+						 per_objfile);
+
+      dwarf_read_debug_printf_v ("target CU offset: %s, "
+				 "target CU DIEs loaded: %d",
+				 sect_offset_str (per_cu->sect_off),
+				 per_objfile->get_cu (per_cu) != nullptr);
+
+      /* If necessary, add it to the queue and load its DIEs.
+
+	 Even if maybe_queue_comp_unit doesn't require us to load the CU's DIEs,
+	 it doesn't mean they are currently loaded.  Since we require them
+	 to be loaded, we must check for ourselves.  */
+      if (maybe_queue_comp_unit (cu, per_cu, per_objfile, cu->per_cu->lang)
+	  || per_objfile->get_cu (per_cu) == nullptr)
+	load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu),
+			     false, cu->per_cu->lang);
+
+      target_cu = per_objfile->get_cu (per_cu);
+      gdb_assert (target_cu != nullptr);
+    }
+  else if (cu->dies == NULL)
+    {
+      /* We're loading full DIEs during partial symbol reading.  */
+      gdb_assert (per_objfile->per_bfd->reading_partial_symbols);
+      load_full_comp_unit (cu->per_cu, per_objfile, cu, false,
+			   language_minimal);
+    }
+
+  *ref_cu = target_cu;
+  temp_die.sect_off = sect_off;
+
+  return (struct die_info *) htab_find_with_hash (target_cu->die_hash,
+						  &temp_die,
+						  to_underlying (sect_off));
+}
+
+/* Follow reference attribute ATTR of SRC_DIE.
+   On entry *REF_CU is the CU of SRC_DIE.
+   On exit *REF_CU is the CU of the result.  */
+
+static struct die_info *
+follow_die_ref (struct die_info *src_die, const struct attribute *attr,
+		struct dwarf2_cu **ref_cu)
+{
+  sect_offset sect_off = attr->get_ref_die_offset ();
+  struct dwarf2_cu *cu = *ref_cu;
+  struct die_info *die;
+
+  die = follow_die_offset (sect_off,
+			   (attr->form == DW_FORM_GNU_ref_alt
+			    || cu->per_cu->is_dwz),
+			   ref_cu);
+  if (!die)
+    error (_("Dwarf Error: Cannot find DIE at %s referenced from DIE "
+	   "at %s [in module %s]"),
+	   sect_offset_str (sect_off), sect_offset_str (src_die->sect_off),
+	   objfile_name (cu->per_objfile->objfile));
+
+  return die;
+}
+
+/* See read.h.  */
+
+struct dwarf2_locexpr_baton
+dwarf2_fetch_die_loc_sect_off (sect_offset sect_off,
+			       dwarf2_per_cu_data *per_cu,
+			       dwarf2_per_objfile *per_objfile,
+			       gdb::function_view<CORE_ADDR ()> get_frame_pc,
+			       bool resolve_abstract_p)
+{
+  struct die_info *die;
+  struct attribute *attr;
+  struct dwarf2_locexpr_baton retval;
+  struct objfile *objfile = per_objfile->objfile;
+
+  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+  if (cu == nullptr)
+    cu = load_cu (per_cu, per_objfile, false);
+
+  if (cu == nullptr)
+    {
+      /* We shouldn't get here for a dummy CU, but don't crash on the user.
+	 Instead just throw an error, not much else we can do.  */
+      error (_("Dwarf Error: Dummy CU at %s referenced in module %s"),
+	     sect_offset_str (sect_off), objfile_name (objfile));
+    }
+
+  die = follow_die_offset (sect_off, per_cu->is_dwz, &cu);
+  if (!die)
+    error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"),
+	   sect_offset_str (sect_off), objfile_name (objfile));
+
+  attr = dwarf2_attr (die, DW_AT_location, cu);
+  if (!attr && resolve_abstract_p
+      && (per_objfile->per_bfd->abstract_to_concrete.find (die->sect_off)
+	  != per_objfile->per_bfd->abstract_to_concrete.end ()))
+    {
+      CORE_ADDR pc = get_frame_pc ();
+      CORE_ADDR baseaddr = objfile->text_section_offset ();
+      struct gdbarch *gdbarch = objfile->arch ();
+
+      for (const auto &cand_off
+	     : per_objfile->per_bfd->abstract_to_concrete[die->sect_off])
+	{
+	  struct dwarf2_cu *cand_cu = cu;
+	  struct die_info *cand
+	    = follow_die_offset (cand_off, per_cu->is_dwz, &cand_cu);
+	  if (!cand
+	      || !cand->parent
+	      || cand->parent->tag != DW_TAG_subprogram)
+	    continue;
+
+	  CORE_ADDR pc_low, pc_high;
+	  get_scope_pc_bounds (cand->parent, &pc_low, &pc_high, cu);
+	  if (pc_low == ((CORE_ADDR) -1))
+	    continue;
+	  pc_low = gdbarch_adjust_dwarf2_addr (gdbarch, pc_low + baseaddr);
+	  pc_high = gdbarch_adjust_dwarf2_addr (gdbarch, pc_high + baseaddr);
+	  if (!(pc_low <= pc && pc < pc_high))
+	    continue;
+
+	  die = cand;
+	  attr = dwarf2_attr (die, DW_AT_location, cu);
+	  break;
+	}
+    }
+
+  if (!attr)
+    {
+      /* DWARF: "If there is no such attribute, then there is no effect.".
+	 DATA is ignored if SIZE is 0.  */
+
+      retval.data = NULL;
+      retval.size = 0;
+    }
+  else if (attr->form_is_section_offset ())
+    {
+      struct dwarf2_loclist_baton loclist_baton;
+      CORE_ADDR pc = get_frame_pc ();
+      size_t size;
+
+      fill_in_loclist_baton (cu, &loclist_baton, attr);
+
+      retval.data = dwarf2_find_location_expression (&loclist_baton,
+						     &size, pc);
+      retval.size = size;
+    }
+  else
+    {
+      if (!attr->form_is_block ())
+	error (_("Dwarf Error: DIE at %s referenced in module %s "
+		 "is neither DW_FORM_block* nor DW_FORM_exprloc"),
+	       sect_offset_str (sect_off), objfile_name (objfile));
+
+      struct dwarf_block *block = attr->as_block ();
+      retval.data = block->data;
+      retval.size = block->size;
+    }
+  retval.per_objfile = per_objfile;
+  retval.per_cu = cu->per_cu;
+
+  per_objfile->age_comp_units ();
+
+  return retval;
+}
+
+/* See read.h.  */
+
+struct dwarf2_locexpr_baton
+dwarf2_fetch_die_loc_cu_off (cu_offset offset_in_cu,
+			     dwarf2_per_cu_data *per_cu,
+			     dwarf2_per_objfile *per_objfile,
+			     gdb::function_view<CORE_ADDR ()> get_frame_pc)
+{
+  sect_offset sect_off = per_cu->sect_off + to_underlying (offset_in_cu);
+
+  return dwarf2_fetch_die_loc_sect_off (sect_off, per_cu, per_objfile,
+					get_frame_pc);
+}
+
+/* Write a constant of a given type as target-ordered bytes into
+   OBSTACK.  */
+
+static const gdb_byte *
+write_constant_as_bytes (struct obstack *obstack,
+			 enum bfd_endian byte_order,
+			 struct type *type,
+			 ULONGEST value,
+			 LONGEST *len)
+{
+  gdb_byte *result;
+
+  *len = TYPE_LENGTH (type);
+  result = (gdb_byte *) obstack_alloc (obstack, *len);
+  store_unsigned_integer (result, *len, byte_order, value);
+
+  return result;
+}
+
+/* See read.h.  */
+
+const gdb_byte *
+dwarf2_fetch_constant_bytes (sect_offset sect_off,
+			     dwarf2_per_cu_data *per_cu,
+			     dwarf2_per_objfile *per_objfile,
+			     obstack *obstack,
+			     LONGEST *len)
+{
+  struct die_info *die;
+  struct attribute *attr;
+  const gdb_byte *result = NULL;
+  struct type *type;
+  LONGEST value;
+  enum bfd_endian byte_order;
+  struct objfile *objfile = per_objfile->objfile;
+
+  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+  if (cu == nullptr)
+    cu = load_cu (per_cu, per_objfile, false);
+
+  if (cu == nullptr)
+    {
+      /* We shouldn't get here for a dummy CU, but don't crash on the user.
+	 Instead just throw an error, not much else we can do.  */
+      error (_("Dwarf Error: Dummy CU at %s referenced in module %s"),
+	     sect_offset_str (sect_off), objfile_name (objfile));
+    }
+
+  die = follow_die_offset (sect_off, per_cu->is_dwz, &cu);
+  if (!die)
+    error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"),
+	   sect_offset_str (sect_off), objfile_name (objfile));
+
+  attr = dwarf2_attr (die, DW_AT_const_value, cu);
+  if (attr == NULL)
+    return NULL;
+
+  byte_order = (bfd_big_endian (objfile->obfd)
+		? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE);
+
+  switch (attr->form)
+    {
+    case DW_FORM_addr:
+    case DW_FORM_addrx:
+    case DW_FORM_GNU_addr_index:
+      {
+	gdb_byte *tem;
+
+	*len = cu->header.addr_size;
+	tem = (gdb_byte *) obstack_alloc (obstack, *len);
+	store_unsigned_integer (tem, *len, byte_order, attr->as_address ());
+	result = tem;
+      }
+      break;
+    case DW_FORM_string:
+    case DW_FORM_strp:
+    case DW_FORM_strx:
+    case DW_FORM_GNU_str_index:
+    case DW_FORM_GNU_strp_alt:
+      /* The string is already allocated on the objfile obstack, point
+	 directly to it.  */
+      {
+	const char *attr_name = attr->as_string ();
+	result = (const gdb_byte *) attr_name;
+	*len = strlen (attr_name);
+      }
+      break;
+    case DW_FORM_block1:
+    case DW_FORM_block2:
+    case DW_FORM_block4:
+    case DW_FORM_block:
+    case DW_FORM_exprloc:
+    case DW_FORM_data16:
+      {
+	struct dwarf_block *block = attr->as_block ();
+	result = block->data;
+	*len = block->size;
+      }
+      break;
+
+      /* The DW_AT_const_value attributes are supposed to carry the
+	 symbol's value "represented as it would be on the target
+	 architecture."  By the time we get here, it's already been
+	 converted to host endianness, so we just need to sign- or
+	 zero-extend it as appropriate.  */
+    case DW_FORM_data1:
+      type = die_type (die, cu);
+      result = dwarf2_const_value_data (attr, obstack, cu, &value, 8);
+      if (result == NULL)
+	result = write_constant_as_bytes (obstack, byte_order,
+					  type, value, len);
+      break;
+    case DW_FORM_data2:
+      type = die_type (die, cu);
+      result = dwarf2_const_value_data (attr, obstack, cu, &value, 16);
+      if (result == NULL)
+	result = write_constant_as_bytes (obstack, byte_order,
+					  type, value, len);
+      break;
+    case DW_FORM_data4:
+      type = die_type (die, cu);
+      result = dwarf2_const_value_data (attr, obstack, cu, &value, 32);
+      if (result == NULL)
+	result = write_constant_as_bytes (obstack, byte_order,
+					  type, value, len);
+      break;
+    case DW_FORM_data8:
+      type = die_type (die, cu);
+      result = dwarf2_const_value_data (attr, obstack, cu, &value, 64);
+      if (result == NULL)
+	result = write_constant_as_bytes (obstack, byte_order,
+					  type, value, len);
+      break;
+
+    case DW_FORM_sdata:
+    case DW_FORM_implicit_const:
+      type = die_type (die, cu);
+      result = write_constant_as_bytes (obstack, byte_order,
+					type, attr->as_signed (), len);
+      break;
+
+    case DW_FORM_udata:
+      type = die_type (die, cu);
+      result = write_constant_as_bytes (obstack, byte_order,
+					type, attr->as_unsigned (), len);
+      break;
+
+    default:
+      complaint (_("unsupported const value attribute form: '%s'"),
+		 dwarf_form_name (attr->form));
+      break;
+    }
+
+  return result;
+}
+
+/* See read.h.  */
+
+struct type *
+dwarf2_fetch_die_type_sect_off (sect_offset sect_off,
+				dwarf2_per_cu_data *per_cu,
+				dwarf2_per_objfile *per_objfile,
+				const char **var_name)
+{
+  struct die_info *die;
+
+  dwarf2_cu *cu = per_objfile->get_cu (per_cu);
+  if (cu == nullptr)
+    cu = load_cu (per_cu, per_objfile, false);
+
+  if (cu == nullptr)
+    return nullptr;
+
+  die = follow_die_offset (sect_off, per_cu->is_dwz, &cu);
+  if (!die)
+    return NULL;
+
+  if (var_name != nullptr)
+    *var_name = var_decl_name (die, cu);
+  return die_type (die, cu);
+}
+
+/* See read.h.  */
+
+struct type *
+dwarf2_get_die_type (cu_offset die_offset,
+		     dwarf2_per_cu_data *per_cu,
+		     dwarf2_per_objfile *per_objfile)
+{
+  sect_offset die_offset_sect = per_cu->sect_off + to_underlying (die_offset);
+  return get_die_type_at_offset (die_offset_sect, per_cu, per_objfile);
+}
+
+/* Follow type unit SIG_TYPE referenced by SRC_DIE.
+   On entry *REF_CU is the CU of SRC_DIE.
+   On exit *REF_CU is the CU of the result.
+   Returns NULL if the referenced DIE isn't found.  */
+
+static struct die_info *
+follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type,
+		  struct dwarf2_cu **ref_cu)
+{
+  struct die_info temp_die;
+  struct dwarf2_cu *sig_cu;
+  struct die_info *die;
+  dwarf2_per_objfile *per_objfile = (*ref_cu)->per_objfile;
+
+
+  /* While it might be nice to assert sig_type->type == NULL here,
+     we can get here for DW_AT_imported_declaration where we need
+     the DIE not the type.  */
+
+  /* If necessary, add it to the queue and load its DIEs.
+
+     Even if maybe_queue_comp_unit doesn't require us to load the CU's DIEs,
+     it doesn't mean they are currently loaded.  Since we require them
+     to be loaded, we must check for ourselves.  */
+  if (maybe_queue_comp_unit (*ref_cu, sig_type, per_objfile,
+			     language_minimal)
+      || per_objfile->get_cu (sig_type) == nullptr)
+    read_signatured_type (sig_type, per_objfile);
+
+  sig_cu = per_objfile->get_cu (sig_type);
+  gdb_assert (sig_cu != NULL);
+  gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0);
+  temp_die.sect_off = sig_type->type_offset_in_section;
+  die = (struct die_info *) htab_find_with_hash (sig_cu->die_hash, &temp_die,
+						 to_underlying (temp_die.sect_off));
+  if (die)
+    {
+      /* For .gdb_index version 7 keep track of included TUs.
+	 http://sourceware.org/bugzilla/show_bug.cgi?id=15021.  */
+      if (per_objfile->per_bfd->index_table != NULL
+	  && per_objfile->per_bfd->index_table->version <= 7)
+	{
+	  (*ref_cu)->per_cu->imported_symtabs_push (sig_cu->per_cu);
+	}
+
+      *ref_cu = sig_cu;
+      return die;
+    }
+
+  return NULL;
+}
+
+/* Follow signatured type referenced by ATTR in SRC_DIE.
+   On entry *REF_CU is the CU of SRC_DIE.
+   On exit *REF_CU is the CU of the result.
+   The result is the DIE of the type.
+   If the referenced type cannot be found an error is thrown.  */
+
+static struct die_info *
+follow_die_sig (struct die_info *src_die, const struct attribute *attr,
+		struct dwarf2_cu **ref_cu)
+{
+  ULONGEST signature = attr->as_signature ();
+  struct signatured_type *sig_type;
+  struct die_info *die;
+
+  gdb_assert (attr->form == DW_FORM_ref_sig8);
+
+  sig_type = lookup_signatured_type (*ref_cu, signature);
+  /* sig_type will be NULL if the signatured type is missing from
+     the debug info.  */
+  if (sig_type == NULL)
+    {
+      error (_("Dwarf Error: Cannot find signatured DIE %s referenced"
+	       " from DIE at %s [in module %s]"),
+	     hex_string (signature), sect_offset_str (src_die->sect_off),
+	     objfile_name ((*ref_cu)->per_objfile->objfile));
+    }
+
+  die = follow_die_sig_1 (src_die, sig_type, ref_cu);
+  if (die == NULL)
+    {
+      dump_die_for_error (src_die);
+      error (_("Dwarf Error: Problem reading signatured DIE %s referenced"
+	       " from DIE at %s [in module %s]"),
+	     hex_string (signature), sect_offset_str (src_die->sect_off),
+	     objfile_name ((*ref_cu)->per_objfile->objfile));
+    }
+
+  return die;
+}
+
+/* Get the type specified by SIGNATURE referenced in DIE/CU,
+   reading in and processing the type unit if necessary.  */
+
+static struct type *
+get_signatured_type (struct die_info *die, ULONGEST signature,
+		     struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct signatured_type *sig_type;
+  struct dwarf2_cu *type_cu;
+  struct die_info *type_die;
+  struct type *type;
+
+  sig_type = lookup_signatured_type (cu, signature);
+  /* sig_type will be NULL if the signatured type is missing from
+     the debug info.  */
+  if (sig_type == NULL)
+    {
+      complaint (_("Dwarf Error: Cannot find signatured DIE %s referenced"
+		   " from DIE at %s [in module %s]"),
+		 hex_string (signature), sect_offset_str (die->sect_off),
+		 objfile_name (per_objfile->objfile));
+      return build_error_marker_type (cu, die);
+    }
+
+  /* If we already know the type we're done.  */
+  type = per_objfile->get_type_for_signatured_type (sig_type);
+  if (type != nullptr)
+    return type;
+
+  type_cu = cu;
+  type_die = follow_die_sig_1 (die, sig_type, &type_cu);
+  if (type_die != NULL)
+    {
+      /* N.B. We need to call get_die_type to ensure only one type for this DIE
+	 is created.  This is important, for example, because for c++ classes
+	 we need TYPE_NAME set which is only done by new_symbol.  Blech.  */
+      type = read_type_die (type_die, type_cu);
+      if (type == NULL)
+	{
+	  complaint (_("Dwarf Error: Cannot build signatured type %s"
+		       " referenced from DIE at %s [in module %s]"),
+		     hex_string (signature), sect_offset_str (die->sect_off),
+		     objfile_name (per_objfile->objfile));
+	  type = build_error_marker_type (cu, die);
+	}
+    }
+  else
+    {
+      complaint (_("Dwarf Error: Problem reading signatured DIE %s referenced"
+		   " from DIE at %s [in module %s]"),
+		 hex_string (signature), sect_offset_str (die->sect_off),
+		 objfile_name (per_objfile->objfile));
+      type = build_error_marker_type (cu, die);
+    }
+
+  per_objfile->set_type_for_signatured_type (sig_type, type);
+
+  return type;
+}
+
+/* Get the type specified by the DW_AT_signature ATTR in DIE/CU,
+   reading in and processing the type unit if necessary.  */
+
+static struct type *
+get_DW_AT_signature_type (struct die_info *die, const struct attribute *attr,
+			  struct dwarf2_cu *cu) /* ARI: editCase function */
+{
+  /* Yes, DW_AT_signature can use a non-ref_sig8 reference.  */
+  if (attr->form_is_ref ())
+    {
+      struct dwarf2_cu *type_cu = cu;
+      struct die_info *type_die = follow_die_ref (die, attr, &type_cu);
+
+      return read_type_die (type_die, type_cu);
+    }
+  else if (attr->form == DW_FORM_ref_sig8)
+    {
+      return get_signatured_type (die, attr->as_signature (), cu);
+    }
+  else
+    {
+      dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+      complaint (_("Dwarf Error: DW_AT_signature has bad form %s in DIE"
+		   " at %s [in module %s]"),
+		 dwarf_form_name (attr->form), sect_offset_str (die->sect_off),
+		 objfile_name (per_objfile->objfile));
+      return build_error_marker_type (cu, die);
+    }
+}
+
+/* Load the DIEs associated with type unit PER_CU into memory.  */
+
+static void
+load_full_type_unit (dwarf2_per_cu_data *per_cu,
+		     dwarf2_per_objfile *per_objfile)
+{
+  struct signatured_type *sig_type;
+
+  /* Caller is responsible for ensuring type_unit_groups don't get here.  */
+  gdb_assert (! per_cu->type_unit_group_p ());
+
+  /* We have the per_cu, but we need the signatured_type.
+     Fortunately this is an easy translation.  */
+  gdb_assert (per_cu->is_debug_types);
+  sig_type = (struct signatured_type *) per_cu;
+
+  gdb_assert (per_objfile->get_cu (per_cu) == nullptr);
+
+  read_signatured_type (sig_type, per_objfile);
+
+  gdb_assert (per_objfile->get_cu (per_cu) != nullptr);
+}
+
+/* Read in a signatured type and build its CU and DIEs.
+   If the type is a stub for the real type in a DWO file,
+   read in the real type from the DWO file as well.  */
+
+static void
+read_signatured_type (signatured_type *sig_type,
+		      dwarf2_per_objfile *per_objfile)
+{
+  gdb_assert (sig_type->is_debug_types);
+  gdb_assert (per_objfile->get_cu (sig_type) == nullptr);
+
+  cutu_reader reader (sig_type, per_objfile, nullptr, nullptr, false);
+
+  if (!reader.dummy_p)
+    {
+      struct dwarf2_cu *cu = reader.cu;
+      const gdb_byte *info_ptr = reader.info_ptr;
+
+      gdb_assert (cu->die_hash == NULL);
+      cu->die_hash =
+	htab_create_alloc_ex (cu->header.length / 12,
+			      die_hash,
+			      die_eq,
+			      NULL,
+			      &cu->comp_unit_obstack,
+			      hashtab_obstack_allocate,
+			      dummy_obstack_deallocate);
+
+      if (reader.comp_unit_die->has_children)
+	reader.comp_unit_die->child
+	  = read_die_and_siblings (&reader, info_ptr, &info_ptr,
+				   reader.comp_unit_die);
+      cu->dies = reader.comp_unit_die;
+      /* comp_unit_die is not stored in die_hash, no need.  */
+
+      /* We try not to read any attributes in this function, because
+	 not all CUs needed for references have been loaded yet, and
+	 symbol table processing isn't initialized.  But we have to
+	 set the CU language, or we won't be able to build types
+	 correctly.  Similarly, if we do not read the producer, we can
+	 not apply producer-specific interpretation.  */
+      prepare_one_comp_unit (cu, cu->dies, language_minimal);
+
+      reader.keep ();
+    }
+
+  sig_type->tu_read = 1;
+}
+
+/* Decode simple location descriptions.
+   Given a pointer to a dwarf block that defines a location, compute
+   the location and return the value.  If COMPUTED is non-null, it is
+   set to true to indicate that decoding was successful, and false
+   otherwise.  If COMPUTED is null, then this function may emit a
+   complaint.  */
+
+static CORE_ADDR
+decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu, bool *computed)
+{
+  struct objfile *objfile = cu->per_objfile->objfile;
+  size_t i;
+  size_t size = blk->size;
+  const gdb_byte *data = blk->data;
+  CORE_ADDR stack[64];
+  int stacki;
+  unsigned int bytes_read, unsnd;
+  gdb_byte op;
+
+  if (computed != nullptr)
+    *computed = false;
+
+  i = 0;
+  stacki = 0;
+  stack[stacki] = 0;
+  stack[++stacki] = 0;
+
+  while (i < size)
+    {
+      op = data[i++];
+      switch (op)
+	{
+	case DW_OP_lit0:
+	case DW_OP_lit1:
+	case DW_OP_lit2:
+	case DW_OP_lit3:
+	case DW_OP_lit4:
+	case DW_OP_lit5:
+	case DW_OP_lit6:
+	case DW_OP_lit7:
+	case DW_OP_lit8:
+	case DW_OP_lit9:
+	case DW_OP_lit10:
+	case DW_OP_lit11:
+	case DW_OP_lit12:
+	case DW_OP_lit13:
+	case DW_OP_lit14:
+	case DW_OP_lit15:
+	case DW_OP_lit16:
+	case DW_OP_lit17:
+	case DW_OP_lit18:
+	case DW_OP_lit19:
+	case DW_OP_lit20:
+	case DW_OP_lit21:
+	case DW_OP_lit22:
+	case DW_OP_lit23:
+	case DW_OP_lit24:
+	case DW_OP_lit25:
+	case DW_OP_lit26:
+	case DW_OP_lit27:
+	case DW_OP_lit28:
+	case DW_OP_lit29:
+	case DW_OP_lit30:
+	case DW_OP_lit31:
+	  stack[++stacki] = op - DW_OP_lit0;
+	  break;
+
+	case DW_OP_reg0:
+	case DW_OP_reg1:
+	case DW_OP_reg2:
+	case DW_OP_reg3:
+	case DW_OP_reg4:
+	case DW_OP_reg5:
+	case DW_OP_reg6:
+	case DW_OP_reg7:
+	case DW_OP_reg8:
+	case DW_OP_reg9:
+	case DW_OP_reg10:
+	case DW_OP_reg11:
+	case DW_OP_reg12:
+	case DW_OP_reg13:
+	case DW_OP_reg14:
+	case DW_OP_reg15:
+	case DW_OP_reg16:
+	case DW_OP_reg17:
+	case DW_OP_reg18:
+	case DW_OP_reg19:
+	case DW_OP_reg20:
+	case DW_OP_reg21:
+	case DW_OP_reg22:
+	case DW_OP_reg23:
+	case DW_OP_reg24:
+	case DW_OP_reg25:
+	case DW_OP_reg26:
+	case DW_OP_reg27:
+	case DW_OP_reg28:
+	case DW_OP_reg29:
+	case DW_OP_reg30:
+	case DW_OP_reg31:
+	  stack[++stacki] = op - DW_OP_reg0;
+	  if (i < size)
+	    {
+	      if (computed == nullptr)
+		dwarf2_complex_location_expr_complaint ();
+	      else
+		return 0;
+	    }
+	  break;
+
+	case DW_OP_regx:
+	  unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
+	  i += bytes_read;
+	  stack[++stacki] = unsnd;
+	  if (i < size)
+	    {
+	      if (computed == nullptr)
+		dwarf2_complex_location_expr_complaint ();
+	      else
+		return 0;
+	    }
+	  break;
+
+	case DW_OP_addr:
+	  stack[++stacki] = cu->header.read_address (objfile->obfd, &data[i],
+						     &bytes_read);
+	  i += bytes_read;
+	  break;
+
+	case DW_OP_const1u:
+	  stack[++stacki] = read_1_byte (objfile->obfd, &data[i]);
+	  i += 1;
+	  break;
+
+	case DW_OP_const1s:
+	  stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]);
+	  i += 1;
+	  break;
+
+	case DW_OP_const2u:
+	  stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]);
+	  i += 2;
+	  break;
+
+	case DW_OP_const2s:
+	  stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]);
+	  i += 2;
+	  break;
+
+	case DW_OP_const4u:
+	  stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]);
+	  i += 4;
+	  break;
+
+	case DW_OP_const4s:
+	  stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]);
+	  i += 4;
+	  break;
+
+	case DW_OP_const8u:
+	  stack[++stacki] = read_8_bytes (objfile->obfd, &data[i]);
+	  i += 8;
+	  break;
+
+	case DW_OP_constu:
+	  stack[++stacki] = read_unsigned_leb128 (NULL, (data + i),
+						  &bytes_read);
+	  i += bytes_read;
+	  break;
+
+	case DW_OP_consts:
+	  stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
+	  i += bytes_read;
+	  break;
+
+	case DW_OP_dup:
+	  stack[stacki + 1] = stack[stacki];
+	  stacki++;
+	  break;
+
+	case DW_OP_plus:
+	  stack[stacki - 1] += stack[stacki];
+	  stacki--;
+	  break;
+
+	case DW_OP_plus_uconst:
+	  stack[stacki] += read_unsigned_leb128 (NULL, (data + i),
+						 &bytes_read);
+	  i += bytes_read;
+	  break;
+
+	case DW_OP_minus:
+	  stack[stacki - 1] -= stack[stacki];
+	  stacki--;
+	  break;
+
+	case DW_OP_deref:
+	  /* If we're not the last op, then we definitely can't encode
+	     this using GDB's address_class enum.  This is valid for partial
+	     global symbols, although the variable's address will be bogus
+	     in the psymtab.  */
+	  if (i < size)
+	    {
+	      if (computed == nullptr)
+		dwarf2_complex_location_expr_complaint ();
+	      else
+		return 0;
+	    }
+	  break;
+
+	case DW_OP_GNU_push_tls_address:
+	case DW_OP_form_tls_address:
+	  /* The top of the stack has the offset from the beginning
+	     of the thread control block at which the variable is located.  */
+	  /* Nothing should follow this operator, so the top of stack would
+	     be returned.  */
+	  /* This is valid for partial global symbols, but the variable's
+	     address will be bogus in the psymtab.  Make it always at least
+	     non-zero to not look as a variable garbage collected by linker
+	     which have DW_OP_addr 0.  */
+	  if (i < size)
+	    {
+	      if (computed == nullptr)
+		dwarf2_complex_location_expr_complaint ();
+	      else
+		return 0;
+	    }
+	  stack[stacki]++;
+	  break;
+
+	case DW_OP_GNU_uninit:
+	  if (computed != nullptr)
+	    return 0;
+	  break;
+
+	case DW_OP_addrx:
+	case DW_OP_GNU_addr_index:
+	case DW_OP_GNU_const_index:
+	  stack[++stacki] = read_addr_index_from_leb128 (cu, &data[i],
+							 &bytes_read);
+	  i += bytes_read;
+	  break;
+
+	default:
+	  if (computed == nullptr)
+	    {
+	      const char *name = get_DW_OP_name (op);
+
+	      if (name)
+		complaint (_("unsupported stack op: '%s'"),
+			   name);
+	      else
+		complaint (_("unsupported stack op: '%02x'"),
+			   op);
+	    }
+
+	  return (stack[stacki]);
+	}
+
+      /* Enforce maximum stack depth of SIZE-1 to avoid writing
+	 outside of the allocated space.  Also enforce minimum>0.  */
+      if (stacki >= ARRAY_SIZE (stack) - 1)
+	{
+	  if (computed == nullptr)
+	    complaint (_("location description stack overflow"));
+	  return 0;
+	}
+
+      if (stacki <= 0)
+	{
+	  if (computed == nullptr)
+	    complaint (_("location description stack underflow"));
+	  return 0;
+	}
+    }
+
+  if (computed != nullptr)
+    *computed = true;
+  return (stack[stacki]);
+}
+
+/* memory allocation interface */
+
+static struct dwarf_block *
+dwarf_alloc_block (struct dwarf2_cu *cu)
+{
+  return XOBNEW (&cu->comp_unit_obstack, struct dwarf_block);
+}
+
+static struct die_info *
+dwarf_alloc_die (struct dwarf2_cu *cu, int num_attrs)
+{
+  struct die_info *die;
+  size_t size = sizeof (struct die_info);
+
+  if (num_attrs > 1)
+    size += (num_attrs - 1) * sizeof (struct attribute);
+
+  die = (struct die_info *) obstack_alloc (&cu->comp_unit_obstack, size);
+  memset (die, 0, sizeof (struct die_info));
+  return (die);
+}
+
+
+
+/* Macro support.  */
+
+/* An overload of dwarf_decode_macros that finds the correct section
+   and ensures it is read in before calling the other overload.  */
+
+static void
+dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
+		     int section_is_gnu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  const struct line_header *lh = cu->line_header;
+  unsigned int offset_size = cu->header.offset_size;
+  struct dwarf2_section_info *section;
+  const char *section_name;
+
+  if (cu->dwo_unit != nullptr)
+    {
+      if (section_is_gnu)
+	{
+	  section = &cu->dwo_unit->dwo_file->sections.macro;
+	  section_name = ".debug_macro.dwo";
+	}
+      else
+	{
+	  section = &cu->dwo_unit->dwo_file->sections.macinfo;
+	  section_name = ".debug_macinfo.dwo";
+	}
+    }
+  else
+    {
+      if (section_is_gnu)
+	{
+	  section = &per_objfile->per_bfd->macro;
+	  section_name = ".debug_macro";
+	}
+      else
+	{
+	  section = &per_objfile->per_bfd->macinfo;
+	  section_name = ".debug_macinfo";
+	}
+    }
+
+  section->read (objfile);
+  if (section->buffer == nullptr)
+    {
+      complaint (_("missing %s section"), section_name);
+      return;
+    }
+
+  buildsym_compunit *builder = cu->get_builder ();
+
+  struct dwarf2_section_info *str_offsets_section;
+  struct dwarf2_section_info *str_section;
+  ULONGEST str_offsets_base;
+
+  if (cu->dwo_unit != nullptr)
+    {
+      str_offsets_section = &cu->dwo_unit->dwo_file
+			       ->sections.str_offsets;
+      str_section = &cu->dwo_unit->dwo_file->sections.str;
+      str_offsets_base = cu->header.addr_size;
+    }
+  else
+    {
+      str_offsets_section = &per_objfile->per_bfd->str_offsets;
+      str_section = &per_objfile->per_bfd->str;
+      str_offsets_base = *cu->str_offsets_base;
+    }
+
+  dwarf_decode_macros (per_objfile, builder, section, lh,
+		       offset_size, offset, str_section, str_offsets_section,
+		       str_offsets_base, section_is_gnu);
+}
+
+/* Return the .debug_loc section to use for CU.
+   For DWO files use .debug_loc.dwo.  */
+
+static struct dwarf2_section_info *
+cu_debug_loc_section (struct dwarf2_cu *cu)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+
+  if (cu->dwo_unit)
+    {
+      struct dwo_sections *sections = &cu->dwo_unit->dwo_file->sections;
+
+      return cu->header.version >= 5 ? &sections->loclists : &sections->loc;
+    }
+  return (cu->header.version >= 5 ? &per_objfile->per_bfd->loclists
+				  : &per_objfile->per_bfd->loc);
+}
+
+/* Return the .debug_rnglists section to use for CU.  */
+static struct dwarf2_section_info *
+cu_debug_rnglists_section (struct dwarf2_cu *cu, dwarf_tag tag)
+{
+  if (cu->header.version < 5)
+    error (_(".debug_rnglists section cannot be used in DWARF %d"),
+	   cu->header.version);
+  struct dwarf2_per_objfile *dwarf2_per_objfile = cu->per_objfile;
+
+  /* Make sure we read the .debug_rnglists section from the file that
+     contains the DW_AT_ranges attribute we are reading.  Normally that
+     would be the .dwo file, if there is one.  However for DW_TAG_compile_unit
+     or DW_TAG_skeleton unit, we always want to read from objfile/linked
+     program.  */
+  if (cu->dwo_unit != nullptr
+      && tag != DW_TAG_compile_unit
+      && tag != DW_TAG_skeleton_unit)
+    {
+      struct dwo_sections *sections = &cu->dwo_unit->dwo_file->sections;
+
+      if (sections->rnglists.size > 0)
+	return &sections->rnglists;
+      else
+	error (_(".debug_rnglists section is missing from .dwo file."));
+    }
+  return &dwarf2_per_objfile->per_bfd->rnglists;
+}
+
+/* A helper function that fills in a dwarf2_loclist_baton.  */
+
+static void
+fill_in_loclist_baton (struct dwarf2_cu *cu,
+		       struct dwarf2_loclist_baton *baton,
+		       const struct attribute *attr)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
+
+  section->read (per_objfile->objfile);
+
+  baton->per_objfile = per_objfile;
+  baton->per_cu = cu->per_cu;
+  gdb_assert (baton->per_cu);
+  /* We don't know how long the location list is, but make sure we
+     don't run off the edge of the section.  */
+  baton->size = section->size - attr->as_unsigned ();
+  baton->data = section->buffer + attr->as_unsigned ();
+  if (cu->base_address.has_value ())
+    baton->base_address = *cu->base_address;
+  else
+    baton->base_address = 0;
+  baton->from_dwo = cu->dwo_unit != NULL;
+}
+
+static void
+dwarf2_symbol_mark_computed (const struct attribute *attr, struct symbol *sym,
+			     struct dwarf2_cu *cu, int is_block)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct objfile *objfile = per_objfile->objfile;
+  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
+
+  if (attr->form_is_section_offset ()
+      /* .debug_loc{,.dwo} may not exist at all, or the offset may be outside
+	 the section.  If so, fall through to the complaint in the
+	 other branch.  */
+      && attr->as_unsigned () < section->get_size (objfile))
+    {
+      struct dwarf2_loclist_baton *baton;
+
+      baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_loclist_baton);
+
+      fill_in_loclist_baton (cu, baton, attr);
+
+      if (!cu->base_address.has_value ())
+	complaint (_("Location list used without "
+		     "specifying the CU base address."));
+
+      SYMBOL_ACLASS_INDEX (sym) = (is_block
+				   ? dwarf2_loclist_block_index
+				   : dwarf2_loclist_index);
+      SYMBOL_LOCATION_BATON (sym) = baton;
+    }
+  else
+    {
+      struct dwarf2_locexpr_baton *baton;
+
+      baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton);
+      baton->per_objfile = per_objfile;
+      baton->per_cu = cu->per_cu;
+      gdb_assert (baton->per_cu);
+
+      if (attr->form_is_block ())
+	{
+	  /* Note that we're just copying the block's data pointer
+	     here, not the actual data.  We're still pointing into the
+	     info_buffer for SYM's objfile; right now we never release
+	     that buffer, but when we do clean up properly this may
+	     need to change.  */
+	  struct dwarf_block *block = attr->as_block ();
+	  baton->size = block->size;
+	  baton->data = block->data;
+	}
+      else
+	{
+	  dwarf2_invalid_attrib_class_complaint ("location description",
+						 sym->natural_name ());
+	  baton->size = 0;
+	}
+
+      SYMBOL_ACLASS_INDEX (sym) = (is_block
+				   ? dwarf2_locexpr_block_index
+				   : dwarf2_locexpr_index);
+      SYMBOL_LOCATION_BATON (sym) = baton;
+    }
+}
+
+/* See read.h.  */
+
+const comp_unit_head *
+dwarf2_per_cu_data::get_header () const
+{
+  if (!m_header_read_in)
+    {
+      const gdb_byte *info_ptr
+	= this->section->buffer + to_underlying (this->sect_off);
+
+      memset (&m_header, 0, sizeof (m_header));
+
+      read_comp_unit_head (&m_header, info_ptr, this->section,
+			   rcuh_kind::COMPILE);
+
+      m_header_read_in = true;
+    }
+
+  return &m_header;
+}
+
+/* See read.h.  */
+
+int
+dwarf2_per_cu_data::addr_size () const
+{
+  return this->get_header ()->addr_size;
+}
+
+/* See read.h.  */
+
+int
+dwarf2_per_cu_data::offset_size () const
+{
+  return this->get_header ()->offset_size;
+}
+
+/* See read.h.  */
+
+int
+dwarf2_per_cu_data::ref_addr_size () const
+{
+  const comp_unit_head *header = this->get_header ();
+
+  if (header->version == 2)
+    return header->addr_size;
+  else
+    return header->offset_size;
+}
+
+/* A helper function for dwarf2_find_containing_comp_unit that returns
+   the index of the result, and that searches a vector.  It will
+   return a result even if the offset in question does not actually
+   occur in any CU.  This is separate so that it can be unit
+   tested.  */
+
+static int
+dwarf2_find_containing_comp_unit
+  (sect_offset sect_off,
+   unsigned int offset_in_dwz,
+   const std::vector<dwarf2_per_cu_data_up> &all_comp_units)
+{
+  int low, high;
+
+  low = 0;
+  high = all_comp_units.size () - 1;
+  while (high > low)
+    {
+      struct dwarf2_per_cu_data *mid_cu;
+      int mid = low + (high - low) / 2;
+
+      mid_cu = all_comp_units[mid].get ();
+      if (mid_cu->is_dwz > offset_in_dwz
+	  || (mid_cu->is_dwz == offset_in_dwz
+	      && mid_cu->sect_off + mid_cu->length > sect_off))
+	high = mid;
+      else
+	low = mid + 1;
+    }
+  gdb_assert (low == high);
+  return low;
+}
+
+/* Locate the .debug_info compilation unit from CU's objfile which contains
+   the DIE at OFFSET.  Raises an error on failure.  */
+
+static struct dwarf2_per_cu_data *
+dwarf2_find_containing_comp_unit (sect_offset sect_off,
+				  unsigned int offset_in_dwz,
+				  dwarf2_per_objfile *per_objfile)
+{
+  int low = dwarf2_find_containing_comp_unit
+    (sect_off, offset_in_dwz, per_objfile->per_bfd->all_comp_units);
+  dwarf2_per_cu_data *this_cu
+    = per_objfile->per_bfd->all_comp_units[low].get ();
+
+  if (this_cu->is_dwz != offset_in_dwz || this_cu->sect_off > sect_off)
+    {
+      if (low == 0 || this_cu->is_dwz != offset_in_dwz)
+	error (_("Dwarf Error: could not find partial DIE containing "
+	       "offset %s [in module %s]"),
+	       sect_offset_str (sect_off),
+	       bfd_get_filename (per_objfile->objfile->obfd));
+
+      gdb_assert (per_objfile->per_bfd->all_comp_units[low-1]->sect_off
+		  <= sect_off);
+      return per_objfile->per_bfd->all_comp_units[low - 1].get ();
+    }
+  else
+    {
+      if (low == per_objfile->per_bfd->all_comp_units.size () - 1
+	  && sect_off >= this_cu->sect_off + this_cu->length)
+	error (_("invalid dwarf2 offset %s"), sect_offset_str (sect_off));
+      gdb_assert (sect_off < this_cu->sect_off + this_cu->length);
+      return this_cu;
+    }
+}
+
+#if GDB_SELF_TEST
+
+namespace selftests {
+namespace find_containing_comp_unit {
+
+static void
+run_test ()
+{
+  dwarf2_per_cu_data_up one (new dwarf2_per_cu_data);
+  dwarf2_per_cu_data *one_ptr = one.get ();
+  dwarf2_per_cu_data_up two (new dwarf2_per_cu_data);
+  dwarf2_per_cu_data *two_ptr = two.get ();
+  dwarf2_per_cu_data_up three (new dwarf2_per_cu_data);
+  dwarf2_per_cu_data *three_ptr = three.get ();
+  dwarf2_per_cu_data_up four (new dwarf2_per_cu_data);
+  dwarf2_per_cu_data *four_ptr = four.get ();
+
+  one->length = 5;
+  two->sect_off = sect_offset (one->length);
+  two->length = 7;
+
+  three->length = 5;
+  three->is_dwz = 1;
+  four->sect_off = sect_offset (three->length);
+  four->length = 7;
+  four->is_dwz = 1;
+
+  std::vector<dwarf2_per_cu_data_up> units;
+  units.push_back (std::move (one));
+  units.push_back (std::move (two));
+  units.push_back (std::move (three));
+  units.push_back (std::move (four));
+
+  int result;
+
+  result = dwarf2_find_containing_comp_unit (sect_offset (0), 0, units);
+  SELF_CHECK (units[result].get () == one_ptr);
+  result = dwarf2_find_containing_comp_unit (sect_offset (3), 0, units);
+  SELF_CHECK (units[result].get () == one_ptr);
+  result = dwarf2_find_containing_comp_unit (sect_offset (5), 0, units);
+  SELF_CHECK (units[result].get () == two_ptr);
+
+  result = dwarf2_find_containing_comp_unit (sect_offset (0), 1, units);
+  SELF_CHECK (units[result].get () == three_ptr);
+  result = dwarf2_find_containing_comp_unit (sect_offset (3), 1, units);
+  SELF_CHECK (units[result].get () == three_ptr);
+  result = dwarf2_find_containing_comp_unit (sect_offset (5), 1, units);
+  SELF_CHECK (units[result].get () == four_ptr);
+}
+
+}
+}
+
+#endif /* GDB_SELF_TEST */
+
+/* Initialize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE.  */
+
+static void
+prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die,
+		       enum language pretend_language)
+{
+  struct attribute *attr;
+
+  cu->producer = dwarf2_string_attr (comp_unit_die, DW_AT_producer, cu);
+
+  /* Set the language we're debugging.  */
+  attr = dwarf2_attr (comp_unit_die, DW_AT_language, cu);
+  if (cu->producer != nullptr
+      && strstr (cu->producer, "IBM XL C for OpenCL") != NULL)
+    {
+      /* The XLCL doesn't generate DW_LANG_OpenCL because this
+	 attribute is not standardised yet.  As a workaround for the
+	 language detection we fall back to the DW_AT_producer
+	 string.  */
+      cu->per_cu->lang = language_opencl;
+    }
+  else if (cu->producer != nullptr
+	   && strstr (cu->producer, "GNU Go ") != NULL)
+    {
+      /* Similar hack for Go.  */
+      cu->per_cu->lang = language_go;
+    }
+  else if (attr != nullptr)
+    cu->per_cu->lang = dwarf_lang_to_enum_language (attr->constant_value (0));
+  else
+    cu->per_cu->lang = pretend_language;
+  cu->language_defn = language_def (cu->per_cu->lang);
+}
+
+/* See read.h.  */
+
+dwarf2_cu *
+dwarf2_per_objfile::get_cu (dwarf2_per_cu_data *per_cu)
+{
+  auto it = m_dwarf2_cus.find (per_cu);
+  if (it == m_dwarf2_cus.end ())
+    return nullptr;
+
+  return it->second;
+}
+
+/* See read.h.  */
+
+void
+dwarf2_per_objfile::set_cu (dwarf2_per_cu_data *per_cu, dwarf2_cu *cu)
+{
+  gdb_assert (this->get_cu (per_cu) == nullptr);
+
+  m_dwarf2_cus[per_cu] = cu;
+}
+
+/* See read.h.  */
+
+void
+dwarf2_per_objfile::age_comp_units ()
+{
+  dwarf_read_debug_printf_v ("running");
+
+  /* This is not expected to be called in the middle of CU expansion.  There is
+     an invariant that if a CU is in the CUs-to-expand queue, its DIEs are
+     loaded in memory.  Calling age_comp_units while the queue is in use could
+     make us free the DIEs for a CU that is in the queue and therefore break
+     that invariant.  */
+  gdb_assert (!this->per_bfd->queue.has_value ());
+
+  /* Start by clearing all marks.  */
+  for (auto pair : m_dwarf2_cus)
+    pair.second->clear_mark ();
+
+  /* Traverse all CUs, mark them and their dependencies if used recently
+     enough.  */
+  for (auto pair : m_dwarf2_cus)
+    {
+      dwarf2_cu *cu = pair.second;
+
+      cu->last_used++;
+      if (cu->last_used <= dwarf_max_cache_age)
+	cu->mark ();
+    }
+
+  /* Delete all CUs still not marked.  */
+  for (auto it = m_dwarf2_cus.begin (); it != m_dwarf2_cus.end ();)
+    {
+      dwarf2_cu *cu = it->second;
+
+      if (!cu->is_marked ())
+	{
+	  dwarf_read_debug_printf_v ("deleting old CU %s",
+				     sect_offset_str (cu->per_cu->sect_off));
+	  delete cu;
+	  it = m_dwarf2_cus.erase (it);
+	}
+      else
+	it++;
+    }
+}
+
+/* See read.h.  */
+
+void
+dwarf2_per_objfile::remove_cu (dwarf2_per_cu_data *per_cu)
+{
+  auto it = m_dwarf2_cus.find (per_cu);
+  if (it == m_dwarf2_cus.end ())
+    return;
+
+  delete it->second;
+
+  m_dwarf2_cus.erase (it);
+}
+
+dwarf2_per_objfile::~dwarf2_per_objfile ()
+{
+  remove_all_cus ();
+}
+
+/* A set of CU "per_cu" pointer, DIE offset, and GDB type pointer.
+   We store these in a hash table separate from the DIEs, and preserve them
+   when the DIEs are flushed out of cache.
+
+   The CU "per_cu" pointer is needed because offset alone is not enough to
+   uniquely identify the type.  A file may have multiple .debug_types sections,
+   or the type may come from a DWO file.  Furthermore, while it's more logical
+   to use per_cu->section+offset, with Fission the section with the data is in
+   the DWO file but we don't know that section at the point we need it.
+   We have to use something in dwarf2_per_cu_data (or the pointer to it)
+   because we can enter the lookup routine, get_die_type_at_offset, from
+   outside this file, and thus won't necessarily have PER_CU->cu.
+   Fortunately, PER_CU is stable for the life of the objfile.  */
+
+struct dwarf2_per_cu_offset_and_type
+{
+  const struct dwarf2_per_cu_data *per_cu;
+  sect_offset sect_off;
+  struct type *type;
+};
+
+/* Hash function for a dwarf2_per_cu_offset_and_type.  */
+
+static hashval_t
+per_cu_offset_and_type_hash (const void *item)
+{
+  const struct dwarf2_per_cu_offset_and_type *ofs
+    = (const struct dwarf2_per_cu_offset_and_type *) item;
+
+  return (uintptr_t) ofs->per_cu + to_underlying (ofs->sect_off);
+}
+
+/* Equality function for a dwarf2_per_cu_offset_and_type.  */
+
+static int
+per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs)
+{
+  const struct dwarf2_per_cu_offset_and_type *ofs_lhs
+    = (const struct dwarf2_per_cu_offset_and_type *) item_lhs;
+  const struct dwarf2_per_cu_offset_and_type *ofs_rhs
+    = (const struct dwarf2_per_cu_offset_and_type *) item_rhs;
+
+  return (ofs_lhs->per_cu == ofs_rhs->per_cu
+	  && ofs_lhs->sect_off == ofs_rhs->sect_off);
+}
+
+/* Set the type associated with DIE to TYPE.  Save it in CU's hash
+   table if necessary.  For convenience, return TYPE.
+
+   The DIEs reading must have careful ordering to:
+    * Not cause infinite loops trying to read in DIEs as a prerequisite for
+      reading current DIE.
+    * Not trying to dereference contents of still incompletely read in types
+      while reading in other DIEs.
+    * Enable referencing still incompletely read in types just by a pointer to
+      the type without accessing its fields.
+
+   Therefore caller should follow these rules:
+     * Try to fetch any prerequisite types we may need to build this DIE type
+       before building the type and calling set_die_type.
+     * After building type call set_die_type for current DIE as soon as
+       possible before fetching more types to complete the current type.
+     * Make the type as complete as possible before fetching more types.  */
+
+static struct type *
+set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
+	      bool skip_data_location)
+{
+  dwarf2_per_objfile *per_objfile = cu->per_objfile;
+  struct dwarf2_per_cu_offset_and_type **slot, ofs;
+  struct objfile *objfile = per_objfile->objfile;
+  struct attribute *attr;
+  struct dynamic_prop prop;
+
+  /* For Ada types, make sure that the gnat-specific data is always
+     initialized (if not already set).  There are a few types where
+     we should not be doing so, because the type-specific area is
+     already used to hold some other piece of info (eg: TYPE_CODE_FLT
+     where the type-specific area is used to store the floatformat).
+     But this is not a problem, because the gnat-specific information
+     is actually not needed for these types.  */
+  if (need_gnat_info (cu)
+      && type->code () != TYPE_CODE_FUNC
+      && type->code () != TYPE_CODE_FLT
+      && type->code () != TYPE_CODE_METHODPTR
+      && type->code () != TYPE_CODE_MEMBERPTR
+      && type->code () != TYPE_CODE_METHOD
+      && type->code () != TYPE_CODE_FIXED_POINT
+      && !HAVE_GNAT_AUX_INFO (type))
+    INIT_GNAT_SPECIFIC (type);
+
+  /* Read DW_AT_allocated and set in type.  */
+  attr = dwarf2_attr (die, DW_AT_allocated, cu);
+  if (attr != NULL)
+    {
+      struct type *prop_type = cu->addr_sized_int_type (false);
+      if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
+	type->add_dyn_prop (DYN_PROP_ALLOCATED, prop);
+    }
+
+  /* Read DW_AT_associated and set in type.  */
+  attr = dwarf2_attr (die, DW_AT_associated, cu);
+  if (attr != NULL)
+    {
+      struct type *prop_type = cu->addr_sized_int_type (false);
+      if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
+	type->add_dyn_prop (DYN_PROP_ASSOCIATED, prop);
+    }
+
+  /* Read DW_AT_data_location and set in type.  */
+  if (!skip_data_location)
+    {
+      attr = dwarf2_attr (die, DW_AT_data_location, cu);
+      if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type ()))
+	type->add_dyn_prop (DYN_PROP_DATA_LOCATION, prop);
+    }
+
+  if (per_objfile->die_type_hash == NULL)
+    per_objfile->die_type_hash
+      = htab_up (htab_create_alloc (127,
+				    per_cu_offset_and_type_hash,
+				    per_cu_offset_and_type_eq,
+				    NULL, xcalloc, xfree));
+
+  ofs.per_cu = cu->per_cu;
+  ofs.sect_off = die->sect_off;
+  ofs.type = type;
+  slot = (struct dwarf2_per_cu_offset_and_type **)
+    htab_find_slot (per_objfile->die_type_hash.get (), &ofs, INSERT);
+  if (*slot)
+    complaint (_("A problem internal to GDB: DIE %s has type already set"),
+	       sect_offset_str (die->sect_off));
+  *slot = XOBNEW (&objfile->objfile_obstack,
+		  struct dwarf2_per_cu_offset_and_type);
+  **slot = ofs;
+  return type;
+}
+
+/* Look up the type for the die at SECT_OFF in PER_CU in die_type_hash,
+   or return NULL if the die does not have a saved type.  */
+
+static struct type *
+get_die_type_at_offset (sect_offset sect_off,
+			dwarf2_per_cu_data *per_cu,
+			dwarf2_per_objfile *per_objfile)
+{
+  struct dwarf2_per_cu_offset_and_type *slot, ofs;
+
+  if (per_objfile->die_type_hash == NULL)
+    return NULL;
+
+  ofs.per_cu = per_cu;
+  ofs.sect_off = sect_off;
+  slot = ((struct dwarf2_per_cu_offset_and_type *)
+	  htab_find (per_objfile->die_type_hash.get (), &ofs));
+  if (slot)
+    return slot->type;
+  else
+    return NULL;
+}
+
+/* Look up the type for DIE in CU in die_type_hash,
+   or return NULL if DIE does not have a saved type.  */
+
+static struct type *
+get_die_type (struct die_info *die, struct dwarf2_cu *cu)
+{
+  return get_die_type_at_offset (die->sect_off, cu->per_cu, cu->per_objfile);
+}
+
+/* Trivial hash function for partial_die_info: the hash value of a DIE
+   is its offset in .debug_info for this objfile.  */
+
+static hashval_t
+partial_die_hash (const void *item)
+{
+  const struct partial_die_info *part_die
+    = (const struct partial_die_info *) item;
+
+  return to_underlying (part_die->sect_off);
+}
+
+/* Trivial comparison function for partial_die_info structures: two DIEs
+   are equal if they have the same offset.  */
+
+static int
+partial_die_eq (const void *item_lhs, const void *item_rhs)
+{
+  const struct partial_die_info *part_die_lhs
+    = (const struct partial_die_info *) item_lhs;
+  const struct partial_die_info *part_die_rhs
+    = (const struct partial_die_info *) item_rhs;
+
+  return part_die_lhs->sect_off == part_die_rhs->sect_off;
+}
+
+struct cmd_list_element *set_dwarf_cmdlist;
+struct cmd_list_element *show_dwarf_cmdlist;
+
+static void
+show_check_physname (struct ui_file *file, int from_tty,
+		     struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("Whether to check \"physname\" is %s.\n"),
+		    value);
+}
+
+void _initialize_dwarf2_read ();
+void
+_initialize_dwarf2_read ()
+{
+  add_basic_prefix_cmd ("dwarf", class_maintenance, _("\
+Set DWARF specific variables.\n\
+Configure DWARF variables such as the cache size."),
+			&set_dwarf_cmdlist,
+			0/*allow-unknown*/, &maintenance_set_cmdlist);
+
+  add_show_prefix_cmd ("dwarf", class_maintenance, _("\
+Show DWARF specific variables.\n\
+Show DWARF variables such as the cache size."),
+		       &show_dwarf_cmdlist,
+		       0/*allow-unknown*/, &maintenance_show_cmdlist);
+
+  add_setshow_zinteger_cmd ("max-cache-age", class_obscure,
+			    &dwarf_max_cache_age, _("\
+Set the upper bound on the age of cached DWARF compilation units."), _("\
+Show the upper bound on the age of cached DWARF compilation units."), _("\
+A higher limit means that cached compilation units will be stored\n\
+in memory longer, and more total memory will be used.  Zero disables\n\
+caching, which can slow down startup."),
+			    NULL,
+			    show_dwarf_max_cache_age,
+			    &set_dwarf_cmdlist,
+			    &show_dwarf_cmdlist);
+
+  add_setshow_zuinteger_cmd ("dwarf-read", no_class, &dwarf_read_debug, _("\
+Set debugging of the DWARF reader."), _("\
+Show debugging of the DWARF reader."), _("\
+When enabled (non-zero), debugging messages are printed during DWARF\n\
+reading and symtab expansion.  A value of 1 (one) provides basic\n\
+information.  A value greater than 1 provides more verbose information."),
+			    NULL,
+			    NULL,
+			    &setdebuglist, &showdebuglist);
+
+  add_setshow_zuinteger_cmd ("dwarf-die", no_class, &dwarf_die_debug, _("\
+Set debugging of the DWARF DIE reader."), _("\
+Show debugging of the DWARF DIE reader."), _("\
+When enabled (non-zero), DIEs are dumped after they are read in.\n\
+The value is the maximum depth to print."),
+			     NULL,
+			     NULL,
+			     &setdebuglist, &showdebuglist);
+
+  add_setshow_zuinteger_cmd ("dwarf-line", no_class, &dwarf_line_debug, _("\
+Set debugging of the dwarf line reader."), _("\
+Show debugging of the dwarf line reader."), _("\
+When enabled (non-zero), line number entries are dumped as they are read in.\n\
+A value of 1 (one) provides basic information.\n\
+A value greater than 1 provides more verbose information."),
+			     NULL,
+			     NULL,
+			     &setdebuglist, &showdebuglist);
+
+  add_setshow_boolean_cmd ("check-physname", no_class, &check_physname, _("\
+Set cross-checking of \"physname\" code against demangler."), _("\
+Show cross-checking of \"physname\" code against demangler."), _("\
+When enabled, GDB's internal \"physname\" code is checked against\n\
+the demangler."),
+			   NULL, show_check_physname,
+			   &setdebuglist, &showdebuglist);
+
+  add_setshow_boolean_cmd ("use-deprecated-index-sections",
+			   no_class, &use_deprecated_index_sections, _("\
+Set whether to use deprecated gdb_index sections."), _("\
+Show whether to use deprecated gdb_index sections."), _("\
+When enabled, deprecated .gdb_index sections are used anyway.\n\
+Normally they are ignored either because of a missing feature or\n\
+performance issue.\n\
+Warning: This option must be enabled before gdb reads the file."),
+			   NULL,
+			   NULL,
+			   &setlist, &showlist);
+
+  dwarf2_locexpr_index = register_symbol_computed_impl (LOC_COMPUTED,
+							&dwarf2_locexpr_funcs);
+  dwarf2_loclist_index = register_symbol_computed_impl (LOC_COMPUTED,
+							&dwarf2_loclist_funcs);
+
+  dwarf2_locexpr_block_index = register_symbol_block_impl (LOC_BLOCK,
+					&dwarf2_block_frame_base_locexpr_funcs);
+  dwarf2_loclist_block_index = register_symbol_block_impl (LOC_BLOCK,
+					&dwarf2_block_frame_base_loclist_funcs);
+
+#if GDB_SELF_TEST
+  selftests::register_test ("dw2_expand_symtabs_matching",
+			    selftests::dw2_expand_symtabs_matching::run_test);
+  selftests::register_test ("dwarf2_find_containing_comp_unit",
+			    selftests::find_containing_comp_unit::run_test);
+#endif
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/read.h ./gdb/dwarf2/read.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/read.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/read.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,690 @@
+/* DWARF 2 debugging format support for GDB.
+
+   Copyright (C) 1994-2021 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 DWARF2READ_H
+#define DWARF2READ_H
+
+#include <queue>
+#include <unordered_map>
+#include "dwarf2/comp-unit-head.h"
+#include "dwarf2/index-cache.h"
+#include "dwarf2/section.h"
+#include "filename-seen-cache.h"
+#include "gdb_obstack.h"
+#include "gdbsupport/hash_enum.h"
+#include "gdbsupport/function-view.h"
+#include "psympriv.h"
+
+/* Hold 'maintenance (set|show) dwarf' commands.  */
+extern struct cmd_list_element *set_dwarf_cmdlist;
+extern struct cmd_list_element *show_dwarf_cmdlist;
+
+struct tu_stats
+{
+  int nr_uniq_abbrev_tables;
+  int nr_symtabs;
+  int nr_symtab_sharers;
+  int nr_stmt_less_type_units;
+  int nr_all_type_units_reallocs;
+  int nr_tus;
+};
+
+struct dwarf2_cu;
+struct dwarf2_debug_sections;
+struct dwarf2_per_bfd;
+struct dwarf2_per_cu_data;
+struct dwarf2_psymtab;
+struct mapped_index;
+struct mapped_debug_names;
+struct signatured_type;
+struct type_unit_group;
+
+/* One item on the queue of compilation units to read in full symbols
+   for.  */
+struct dwarf2_queue_item
+{
+  dwarf2_queue_item (dwarf2_per_cu_data *cu, dwarf2_per_objfile *per_objfile,
+		     enum language lang)
+    : per_cu (cu),
+      per_objfile (per_objfile),
+      pretend_language (lang)
+  {
+  }
+
+  ~dwarf2_queue_item ();
+
+  DISABLE_COPY_AND_ASSIGN (dwarf2_queue_item);
+
+  dwarf2_per_cu_data *per_cu;
+  dwarf2_per_objfile *per_objfile;
+  enum language pretend_language;
+};
+
+/* A deleter for dwarf2_per_cu_data that knows to downcast to
+   signatured_type as appropriate.  This approach lets us avoid a
+   virtual destructor, which saves a bit of space.  */
+
+struct dwarf2_per_cu_data_deleter
+{
+  void operator() (dwarf2_per_cu_data *data);
+};
+
+/* A specialization of unique_ptr for dwarf2_per_cu_data and
+   subclasses.  */
+typedef std::unique_ptr<dwarf2_per_cu_data, dwarf2_per_cu_data_deleter>
+    dwarf2_per_cu_data_up;
+
+/* Persistent data held for a compilation unit, even when not
+   processing it.  We put a pointer to this structure in the
+   psymtab.  */
+
+struct dwarf2_per_cu_data
+{
+  dwarf2_per_cu_data ()
+    : queued (false),
+      is_debug_types (false),
+      is_dwz (false),
+      reading_dwo_directly (false),
+      tu_read (false),
+      m_header_read_in (false),
+      unit_type {},
+      lang (language_unknown)
+  {
+  }
+
+  /* The start offset and length of this compilation unit.
+     NOTE: Unlike comp_unit_head.length, this length includes
+     initial_length_size.
+     If the DIE refers to a DWO file, this is always of the original die,
+     not the DWO file.  */
+  sect_offset sect_off {};
+  unsigned int length = 0;
+
+  /* DWARF standard version this data has been read from (such as 4 or 5).  */
+  unsigned char dwarf_version = 0;
+
+  /* Flag indicating this compilation unit will be read in before
+     any of the current compilation units are processed.  */
+  unsigned int queued : 1;
+
+  /* Non-zero if this CU is from .debug_types.
+     Struct dwarf2_per_cu_data is contained in struct signatured_type iff
+     this is non-zero.  */
+  unsigned int is_debug_types : 1;
+
+  /* Non-zero if this CU is from the .dwz file.  */
+  unsigned int is_dwz : 1;
+
+  /* Non-zero if reading a TU directly from a DWO file, bypassing the stub.
+     This flag is only valid if is_debug_types is true.
+     We can't read a CU directly from a DWO file: There are required
+     attributes in the stub.  */
+  unsigned int reading_dwo_directly : 1;
+
+  /* Non-zero if the TU has been read.
+     This is used to assist the "Stay in DWO Optimization" for Fission:
+     When reading a DWO, it's faster to read TUs from the DWO instead of
+     fetching them from random other DWOs (due to comdat folding).
+     If the TU has already been read, the optimization is unnecessary
+     (and unwise - we don't want to change where gdb thinks the TU lives
+     "midflight").
+     This flag is only valid if is_debug_types is true.  */
+  unsigned int tu_read : 1;
+
+  /* True if HEADER has been read in.
+
+     Don't access this field directly.  It should be private, but we can't make
+     it private at the moment.  */
+  mutable bool m_header_read_in : 1;
+
+  /* The unit type of this CU.  */
+  ENUM_BITFIELD (dwarf_unit_type) unit_type : 8;
+
+  /* The language of this CU.  */
+  ENUM_BITFIELD (language) lang : LANGUAGE_BITS;
+
+  /* Our index in the unshared "symtabs" vector.  */
+  unsigned index = 0;
+
+  /* The section this CU/TU lives in.
+     If the DIE refers to a DWO file, this is always the original die,
+     not the DWO file.  */
+  struct dwarf2_section_info *section = nullptr;
+
+  /* Backlink to the owner of this.  */
+  dwarf2_per_bfd *per_bfd = nullptr;
+
+  /* DWARF header of this CU.  Note that dwarf2_cu reads its own version of the
+     header, which may differ from this one, since it may pass rcuh_kind::TYPE
+     to read_comp_unit_head, whereas for dwarf2_per_cu_data we always pass
+     rcuh_kind::COMPILE.
+
+     Don't access this field directly, use the get_header method instead.  It
+     should be private, but we can't make it private at the moment.  */
+  mutable comp_unit_head m_header {};
+
+  /* When dwarf2_per_bfd::using_index is true, the 'quick' field
+     is active.  Otherwise, the 'psymtab' field is active.  */
+  union
+  {
+    /* The partial symbol table associated with this compilation unit,
+       or NULL for unread partial units.  */
+    dwarf2_psymtab *psymtab;
+
+    /* Data needed by the "quick" functions.  */
+    struct dwarf2_per_cu_quick_data *quick;
+  } v {};
+
+  /* The CUs we import using DW_TAG_imported_unit.  This is filled in
+     while reading psymtabs, used to compute the psymtab dependencies,
+     and then cleared.  Then it is filled in again while reading full
+     symbols, and only deleted when the objfile is destroyed.
+
+     This is also used to work around a difference between the way gold
+     generates .gdb_index version <=7 and the way gdb does.  Arguably this
+     is a gold bug.  For symbols coming from TUs, gold records in the index
+     the CU that includes the TU instead of the TU itself.  This breaks
+     dw2_lookup_symbol: It assumes that if the index says symbol X lives
+     in CU/TU Y, then one need only expand Y and a subsequent lookup in Y
+     will find X.  Alas TUs live in their own symtab, so after expanding CU Y
+     we need to look in TU Z to find X.  Fortunately, this is akin to
+     DW_TAG_imported_unit, so we just use the same mechanism: For
+     .gdb_index version <=7 this also records the TUs that the CU referred
+     to.  Concurrently with this change gdb was modified to emit version 8
+     indices so we only pay a price for gold generated indices.
+     http://sourceware.org/bugzilla/show_bug.cgi?id=15021.
+
+     This currently needs to be a public member due to how
+     dwarf2_per_cu_data is allocated and used.  Ideally in future things
+     could be refactored to make this private.  Until then please try to
+     avoid direct access to this member, and instead use the helper
+     functions above.  */
+  std::vector <dwarf2_per_cu_data *> *imported_symtabs = nullptr;
+
+  /* Return true of IMPORTED_SYMTABS is empty or not yet allocated.  */
+  bool imported_symtabs_empty () const
+  {
+    return (imported_symtabs == nullptr || imported_symtabs->empty ());
+  }
+
+  /* Push P to the back of IMPORTED_SYMTABS, allocated IMPORTED_SYMTABS
+     first if required.  */
+  void imported_symtabs_push (dwarf2_per_cu_data *p)
+  {
+    if (imported_symtabs == nullptr)
+      imported_symtabs = new std::vector <dwarf2_per_cu_data *>;
+    imported_symtabs->push_back (p);
+  }
+
+  /* Return the size of IMPORTED_SYMTABS if it is allocated, otherwise
+     return 0.  */
+  size_t imported_symtabs_size () const
+  {
+    if (imported_symtabs == nullptr)
+      return 0;
+    return imported_symtabs->size ();
+  }
+
+  /* Delete IMPORTED_SYMTABS and set the pointer back to nullptr.  */
+  void imported_symtabs_free ()
+  {
+    delete imported_symtabs;
+    imported_symtabs = nullptr;
+  }
+
+  /* Get the header of this per_cu, reading it if necessary.  */
+  const comp_unit_head *get_header () const;
+
+  /* Return the address size given in the compilation unit header for
+     this CU.  */
+  int addr_size () const;
+
+  /* Return the offset size given in the compilation unit header for
+     this CU.  */
+  int offset_size () const;
+
+  /* Return the DW_FORM_ref_addr size given in the compilation unit
+     header for this CU.  */
+  int ref_addr_size () const;
+
+  /* Return DWARF version number of this CU.  */
+  short version () const
+  {
+    return dwarf_version;
+  }
+
+  /* A type unit group has a per_cu object that is recognized by
+     having no section.  */
+  bool type_unit_group_p () const
+  {
+    return section == nullptr;
+  }
+};
+
+/* Entry in the signatured_types hash table.  */
+
+struct signatured_type : public dwarf2_per_cu_data
+{
+  signatured_type (ULONGEST signature)
+    : signature (signature)
+  {}
+
+  /* The type's signature.  */
+  ULONGEST signature;
+
+  /* Offset in the TU of the type's DIE, as read from the TU header.
+     If this TU is a DWO stub and the definition lives in a DWO file
+     (specified by DW_AT_GNU_dwo_name), this value is unusable.  */
+  cu_offset type_offset_in_tu {};
+
+  /* Offset in the section of the type's DIE.
+     If the definition lives in a DWO file, this is the offset in the
+     .debug_types.dwo section.
+     The value is zero until the actual value is known.
+     Zero is otherwise not a valid section offset.  */
+  sect_offset type_offset_in_section {};
+
+  /* Type units are grouped by their DW_AT_stmt_list entry so that they
+     can share them.  This points to the containing symtab.  */
+  struct type_unit_group *type_unit_group = nullptr;
+
+  /* Containing DWO unit.
+     This field is valid iff per_cu.reading_dwo_directly.  */
+  struct dwo_unit *dwo_unit = nullptr;
+};
+
+using signatured_type_up = std::unique_ptr<signatured_type>;
+
+/* Some DWARF data can be shared across objfiles who share the same BFD,
+   this data is stored in this object.
+
+   Two dwarf2_per_objfile objects representing objfiles sharing the same BFD
+   will point to the same instance of dwarf2_per_bfd, unless the BFD requires
+   relocation.  */
+
+struct dwarf2_per_bfd
+{
+  /* Construct a dwarf2_per_bfd for OBFD.  NAMES points to the
+     dwarf2 section names, or is NULL if the standard ELF names are
+     used.  CAN_COPY is true for formats where symbol
+     interposition is possible and so symbol values must follow copy
+     relocation rules.  */
+  dwarf2_per_bfd (bfd *obfd, const dwarf2_debug_sections *names, bool can_copy);
+
+  ~dwarf2_per_bfd ();
+
+  DISABLE_COPY_AND_ASSIGN (dwarf2_per_bfd);
+
+  /* Return the CU given its index.  */
+  dwarf2_per_cu_data *get_cu (int index) const
+  {
+    return this->all_comp_units[index].get ();
+  }
+
+  /* A convenience function to allocate a dwarf2_per_cu_data.  The
+     returned object has its "index" field set properly.  The object
+     is allocated on the dwarf2_per_bfd obstack.  */
+  dwarf2_per_cu_data_up allocate_per_cu ();
+
+  /* A convenience function to allocate a signatured_type.  The
+     returned object has its "index" field set properly.  The object
+     is allocated on the dwarf2_per_bfd obstack.  */
+  signatured_type_up allocate_signatured_type (ULONGEST signature);
+
+private:
+  /* This function is mapped across the sections and remembers the
+     offset and size of each of the debugging sections we are
+     interested in.  */
+  void locate_sections (bfd *abfd, asection *sectp,
+			const dwarf2_debug_sections &names);
+
+public:
+  /* The corresponding BFD.  */
+  bfd *obfd;
+
+  /* Objects that can be shared across objfiles are stored in this
+     obstack or on the psymtab obstack, while objects that are
+     objfile-specific are stored on the objfile obstack.  */
+  auto_obstack obstack;
+
+  dwarf2_section_info info {};
+  dwarf2_section_info abbrev {};
+  dwarf2_section_info line {};
+  dwarf2_section_info loc {};
+  dwarf2_section_info loclists {};
+  dwarf2_section_info macinfo {};
+  dwarf2_section_info macro {};
+  dwarf2_section_info str {};
+  dwarf2_section_info str_offsets {};
+  dwarf2_section_info line_str {};
+  dwarf2_section_info ranges {};
+  dwarf2_section_info rnglists {};
+  dwarf2_section_info addr {};
+  dwarf2_section_info frame {};
+  dwarf2_section_info eh_frame {};
+  dwarf2_section_info gdb_index {};
+  dwarf2_section_info debug_names {};
+  dwarf2_section_info debug_aranges {};
+
+  std::vector<dwarf2_section_info> types;
+
+  /* Table of all the compilation units.  This is used to locate
+     the target compilation unit of a particular reference.  */
+  std::vector<dwarf2_per_cu_data_up> all_comp_units;
+
+  /* Table of struct type_unit_group objects.
+     The hash key is the DW_AT_stmt_list value.  */
+  htab_up type_unit_groups;
+
+  /* A table mapping .debug_types signatures to its signatured_type entry.
+     This is NULL if the .debug_types section hasn't been read in yet.  */
+  htab_up signatured_types;
+
+  /* Type unit statistics, to see how well the scaling improvements
+     are doing.  */
+  struct tu_stats tu_stats {};
+
+  /* A table mapping DW_AT_dwo_name values to struct dwo_file objects.
+     This is NULL if the table hasn't been allocated yet.  */
+  htab_up dwo_files;
+
+  /* True if we've checked for whether there is a DWP file.  */
+  bool dwp_checked = false;
+
+  /* The DWP file if there is one, or NULL.  */
+  std::unique_ptr<struct dwp_file> dwp_file;
+
+  /* The shared '.dwz' file, if one exists.  This is used when the
+     original data was compressed using 'dwz -m'.  */
+  std::unique_ptr<struct dwz_file> dwz_file;
+
+  /* Whether copy relocations are supported by this object format.  */
+  bool can_copy;
+
+  /* A flag indicating whether this objfile has a section loaded at a
+     VMA of 0.  */
+  bool has_section_at_zero = false;
+
+  /* True if we are using the mapped index,
+     or we are faking it for OBJF_READNOW's sake.  */
+  bool using_index = false;
+
+  /* The mapped index, or NULL if .gdb_index is missing or not being used.  */
+  std::unique_ptr<mapped_index> index_table;
+
+  /* The mapped index, or NULL if .debug_names is missing or not being used.  */
+  std::unique_ptr<mapped_debug_names> debug_names_table;
+
+  /* When using index_table, this keeps track of all quick_file_names entries.
+     TUs typically share line table entries with a CU, so we maintain a
+     separate table of all line table entries to support the sharing.
+     Note that while there can be way more TUs than CUs, we've already
+     sorted all the TUs into "type unit groups", grouped by their
+     DW_AT_stmt_list value.  Therefore the only sharing done here is with a
+     CU and its associated TU group if there is one.  */
+  htab_up quick_file_names_table;
+
+  /* Set during partial symbol reading, to prevent queueing of full
+     symbols.  */
+  bool reading_partial_symbols = false;
+
+  /* The CUs we recently read.  */
+  std::vector<dwarf2_per_cu_data *> just_read_cus;
+
+  /* If we loaded the index from an external file, this contains the
+     resources associated to the open file, memory mapping, etc.  */
+  std::unique_ptr<index_cache_resource> index_cache_res;
+
+  /* Mapping from abstract origin DIE to concrete DIEs that reference it as
+     DW_AT_abstract_origin.  */
+  std::unordered_map<sect_offset, std::vector<sect_offset>,
+		     gdb::hash_enum<sect_offset>>
+    abstract_to_concrete;
+
+  /* CUs that are queued to be read.  */
+  gdb::optional<std::queue<dwarf2_queue_item>> queue;
+
+  /* We keep a separate reference to the partial symtabs, in case we
+     are sharing them between objfiles.  This is only set after
+     partial symbols have been read the first time.  */
+  std::shared_ptr<psymtab_storage> partial_symtabs;
+
+  /* The address map that is used by the DWARF index code.  */
+  struct addrmap *index_addrmap = nullptr;
+};
+
+/* This is the per-objfile data associated with a type_unit_group.  */
+
+struct type_unit_group_unshareable
+{
+  /* The compunit symtab.
+     Type units in a group needn't all be defined in the same source file,
+     so we create an essentially anonymous symtab as the compunit symtab.  */
+  struct compunit_symtab *compunit_symtab = nullptr;
+
+  /* The number of symtabs from the line header.
+     The value here must match line_header.num_file_names.  */
+  unsigned int num_symtabs = 0;
+
+  /* The symbol tables for this TU (obtained from the files listed in
+     DW_AT_stmt_list).
+     WARNING: The order of entries here must match the order of entries
+     in the line header.  After the first TU using this type_unit_group, the
+     line header for the subsequent TUs is recreated from this.  This is done
+     because we need to use the same symtabs for each TU using the same
+     DW_AT_stmt_list value.  Also note that symtabs may be repeated here,
+     there's no guarantee the line header doesn't have duplicate entries.  */
+  struct symtab **symtabs = nullptr;
+};
+
+/* Collection of data recorded per objfile.
+   This hangs off of dwarf2_objfile_data_key.
+
+   Some DWARF data cannot (currently) be shared across objfiles.  Such
+   data is stored in this object.  */
+
+struct dwarf2_per_objfile
+{
+  dwarf2_per_objfile (struct objfile *objfile, dwarf2_per_bfd *per_bfd)
+    : objfile (objfile), per_bfd (per_bfd)
+  {}
+
+  ~dwarf2_per_objfile ();
+
+  /* Return pointer to string at .debug_line_str offset as read from BUF.
+     BUF is assumed to be in a compilation unit described by CU_HEADER.
+     Return *BYTES_READ_PTR count of bytes read from BUF.  */
+  const char *read_line_string (const gdb_byte *buf,
+				const struct comp_unit_head *cu_header,
+				unsigned int *bytes_read_ptr);
+
+  /* Return true if the symtab corresponding to PER_CU has been set,
+     false otherwise.  */
+  bool symtab_set_p (const dwarf2_per_cu_data *per_cu) const;
+
+  /* Return the compunit_symtab associated to PER_CU, if it has been created.  */
+  compunit_symtab *get_symtab (const dwarf2_per_cu_data *per_cu) const;
+
+  /* Set the compunit_symtab associated to PER_CU.  */
+  void set_symtab (const dwarf2_per_cu_data *per_cu, compunit_symtab *symtab);
+
+  /* Get the type_unit_group_unshareable corresponding to TU_GROUP.  If one
+     does not exist, create it.  */
+  type_unit_group_unshareable *get_type_unit_group_unshareable
+    (type_unit_group *tu_group);
+
+  struct type *get_type_for_signatured_type (signatured_type *sig_type) const;
+
+  void set_type_for_signatured_type (signatured_type *sig_type,
+				     struct type *type);
+
+  /* Find an integer type SIZE_IN_BYTES bytes in size and return it.
+     UNSIGNED_P controls if the integer is unsigned or not.  */
+  struct type *int_type (int size_in_bytes, bool unsigned_p) const;
+
+  /* Get the dwarf2_cu matching PER_CU for this objfile.  */
+  dwarf2_cu *get_cu (dwarf2_per_cu_data *per_cu);
+
+  /* Set the dwarf2_cu matching PER_CU for this objfile.  */
+  void set_cu (dwarf2_per_cu_data *per_cu, dwarf2_cu *cu);
+
+  /* Remove/free the dwarf2_cu matching PER_CU for this objfile.  */
+  void remove_cu (dwarf2_per_cu_data *per_cu);
+
+  /* Free all cached compilation units.  */
+  void remove_all_cus ();
+
+  /* Increase the age counter on each CU compilation unit and free
+     any that are too old.  */
+  void age_comp_units ();
+
+  /* Back link.  */
+  struct objfile *objfile;
+
+  /* Pointer to the data that is (possibly) shared between this objfile and
+     other objfiles backed by the same BFD.  */
+  struct dwarf2_per_bfd *per_bfd;
+
+  /* Table mapping type DIEs to their struct type *.
+     This is nullptr if not allocated yet.
+     The mapping is done via (CU/TU + DIE offset) -> type.  */
+  htab_up die_type_hash;
+
+  /* Table containing line_header indexed by offset and offset_in_dwz.  */
+  htab_up line_header_hash;
+
+  /* The CU containing the m_builder in scope.  */
+  dwarf2_cu *sym_cu = nullptr;
+
+private:
+  /* Hold the corresponding compunit_symtab for each CU or TU.  This
+     is indexed by dwarf2_per_cu_data::index.  A NULL value means
+     that the CU/TU has not been expanded yet.  */
+  std::vector<compunit_symtab *> m_symtabs;
+
+  /* Map from a type unit group to the corresponding unshared
+     structure.  */
+  typedef std::unique_ptr<type_unit_group_unshareable>
+    type_unit_group_unshareable_up;
+
+  std::unordered_map<type_unit_group *, type_unit_group_unshareable_up>
+    m_type_units;
+
+  /* Map from signatured types to the corresponding struct type.  */
+  std::unordered_map<signatured_type *, struct type *> m_type_map;
+
+  /* Map from the objfile-independent dwarf2_per_cu_data instances to the
+     corresponding objfile-dependent dwarf2_cu instances.  */
+  std::unordered_map<dwarf2_per_cu_data *, dwarf2_cu *> m_dwarf2_cus;
+};
+
+/* Get the dwarf2_per_objfile associated to OBJFILE.  */
+
+dwarf2_per_objfile *get_dwarf2_per_objfile (struct objfile *objfile);
+
+/* A partial symtab specialized for DWARF.  */
+struct dwarf2_psymtab : public partial_symtab
+{
+  dwarf2_psymtab (const char *filename,
+		  psymtab_storage *partial_symtabs,
+		  objfile_per_bfd_storage *objfile_per_bfd,
+		  dwarf2_per_cu_data *per_cu)
+    : partial_symtab (filename, partial_symtabs, objfile_per_bfd, 0),
+      per_cu_data (per_cu)
+  {
+  }
+
+  void read_symtab (struct objfile *) override;
+  void expand_psymtab (struct objfile *) override;
+  bool readin_p (struct objfile *) const override;
+  compunit_symtab *get_compunit_symtab (struct objfile *) const override;
+
+  struct dwarf2_per_cu_data *per_cu_data;
+};
+
+/* Return the type of the DIE at DIE_OFFSET in the CU named by
+   PER_CU.  */
+
+struct type *dwarf2_get_die_type (cu_offset die_offset,
+				  dwarf2_per_cu_data *per_cu,
+				  dwarf2_per_objfile *per_objfile);
+
+/* Given an index in .debug_addr, fetch the value.
+   NOTE: This can be called during dwarf expression evaluation,
+   long after the debug information has been read, and thus per_cu->cu
+   may no longer exist.  */
+
+CORE_ADDR dwarf2_read_addr_index (dwarf2_per_cu_data *per_cu,
+				  dwarf2_per_objfile *per_objfile,
+				  unsigned int addr_index);
+
+/* Return DWARF block referenced by DW_AT_location of DIE at SECT_OFF at PER_CU.
+   Returned value is intended for DW_OP_call*.  Returned
+   dwarf2_locexpr_baton->data has lifetime of
+   PER_CU->DWARF2_PER_OBJFILE->OBJFILE.  */
+
+struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_sect_off
+  (sect_offset sect_off, dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile,
+   gdb::function_view<CORE_ADDR ()> get_frame_pc,
+   bool resolve_abstract_p = false);
+
+/* Like dwarf2_fetch_die_loc_sect_off, but take a CU
+   offset.  */
+
+struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_cu_off
+  (cu_offset offset_in_cu, dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile,
+   gdb::function_view<CORE_ADDR ()> get_frame_pc);
+
+/* If the DIE at SECT_OFF in PER_CU has a DW_AT_const_value, return a
+   pointer to the constant bytes and set LEN to the length of the
+   data.  If memory is needed, allocate it on OBSTACK.  If the DIE
+   does not have a DW_AT_const_value, return NULL.  */
+
+extern const gdb_byte *dwarf2_fetch_constant_bytes
+  (sect_offset sect_off, dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile, obstack *obstack,
+   LONGEST *len);
+
+/* Return the type of the die at SECT_OFF in PER_CU.  Return NULL if no
+   valid type for this die is found.  If VAR_NAME is non-null, and if
+   the DIE in question is a variable declaration (definitions are
+   excluded), then *VAR_NAME is set to the variable's name.  */
+
+struct type *dwarf2_fetch_die_type_sect_off
+  (sect_offset sect_off, dwarf2_per_cu_data *per_cu,
+   dwarf2_per_objfile *per_objfile,
+   const char **var_name = nullptr);
+
+/* When non-zero, dump line number entries as they are read in.  */
+extern unsigned int dwarf_line_debug;
+
+/* Dwarf2 sections that can be accessed by dwarf2_get_section_info.  */
+enum dwarf2_section_enum {
+  DWARF2_DEBUG_FRAME,
+  DWARF2_EH_FRAME
+};
+
+extern void dwarf2_get_section_info (struct objfile *,
+                                     enum dwarf2_section_enum,
+				     asection **, const gdb_byte **,
+				     bfd_size_type *);
+
+#endif /* DWARF2READ_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/section.c ./gdb/dwarf2/section.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/section.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/section.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,214 @@
+/* DWARF 2 low-level section code
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2/section.h"
+#include "gdb_bfd.h"
+#include "objfiles.h"
+#include "complaints.h"
+
+void
+dwarf2_section_info::overflow_complaint () const
+{
+  complaint (_("debug info runs off end of %s section"
+	       " [in module %s]"),
+	     get_name (), get_file_name ());
+}
+
+struct dwarf2_section_info *
+dwarf2_section_info::get_containing_section () const
+{
+  gdb_assert (is_virtual);
+  return s.containing_section;
+}
+
+struct bfd *
+dwarf2_section_info::get_bfd_owner () const
+{
+  const dwarf2_section_info *section = this;
+  if (is_virtual)
+    {
+      section = get_containing_section ();
+      gdb_assert (!section->is_virtual);
+    }
+  gdb_assert (section->s.section != nullptr);
+  return section->s.section->owner;
+}
+
+asection *
+dwarf2_section_info::get_bfd_section () const
+{
+  const dwarf2_section_info *section = this;
+  if (section->is_virtual)
+    {
+      section = get_containing_section ();
+      gdb_assert (!section->is_virtual);
+    }
+  return section->s.section;
+}
+
+const char *
+dwarf2_section_info::get_name () const
+{
+  asection *sectp = get_bfd_section ();
+
+  gdb_assert (sectp != NULL);
+  return bfd_section_name (sectp);
+}
+
+const char *
+dwarf2_section_info::get_file_name () const
+{
+  bfd *abfd = get_bfd_owner ();
+
+  gdb_assert (abfd != nullptr);
+  return bfd_get_filename (abfd);
+}
+
+int
+dwarf2_section_info::get_id () const
+{
+  asection *sectp = get_bfd_section ();
+
+  if (sectp == NULL)
+    return 0;
+  return sectp->id;
+}
+
+int
+dwarf2_section_info::get_flags () const
+{
+  asection *sectp = get_bfd_section ();
+
+  gdb_assert (sectp != NULL);
+  return bfd_section_flags (sectp);
+}
+
+bool
+dwarf2_section_info::empty () const
+{
+  if (is_virtual)
+    return size == 0;
+  return s.section == NULL || size == 0;
+}
+
+void
+dwarf2_section_info::read (struct objfile *objfile)
+{
+  asection *sectp;
+  bfd *abfd;
+  gdb_byte *buf, *retbuf;
+
+  if (readin)
+    return;
+  buffer = NULL;
+  readin = true;
+
+  if (empty ())
+    return;
+
+  sectp = get_bfd_section ();
+
+  /* If this is a virtual section we need to read in the real one first.  */
+  if (is_virtual)
+    {
+      struct dwarf2_section_info *containing_section =
+	get_containing_section ();
+
+      gdb_assert (sectp != NULL);
+      if ((sectp->flags & SEC_RELOC) != 0)
+	{
+	  error (_("Dwarf Error: DWP format V2 with relocations is not"
+		   " supported in section %s [in module %s]"),
+		 get_name (), get_file_name ());
+	}
+      containing_section->read (objfile);
+      /* Other code should have already caught virtual sections that don't
+	 fit.  */
+      gdb_assert (virtual_offset + size <= containing_section->size);
+      /* If the real section is empty or there was a problem reading the
+	 section we shouldn't get here.  */
+      gdb_assert (containing_section->buffer != NULL);
+      buffer = containing_section->buffer + virtual_offset;
+      return;
+    }
+
+  /* If the section has relocations, we must read it ourselves.
+     Otherwise we attach it to the BFD.  */
+  if ((sectp->flags & SEC_RELOC) == 0)
+    {
+      buffer = gdb_bfd_map_section (sectp, &size);
+      return;
+    }
+
+  buf = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, size);
+  buffer = buf;
+
+  /* When debugging .o files, we may need to apply relocations; see
+     http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html .
+     We never compress sections in .o files, so we only need to
+     try this when the section is not compressed.  */
+  retbuf = symfile_relocate_debug_section (objfile, sectp, buf);
+  if (retbuf != NULL)
+    {
+      buffer = retbuf;
+      return;
+    }
+
+  abfd = get_bfd_owner ();
+  gdb_assert (abfd != NULL);
+
+  if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0
+      || bfd_bread (buf, size, abfd) != size)
+    {
+      error (_("Dwarf Error: Can't read DWARF data"
+	       " in section %s [in module %s]"),
+	     bfd_section_name (sectp), bfd_get_filename (abfd));
+    }
+}
+
+const char *
+dwarf2_section_info::read_string (struct objfile *objfile, LONGEST str_offset,
+				  const char *form_name)
+{
+  read (objfile);
+  if (buffer == NULL)
+    {
+      if (get_bfd_section () == nullptr)
+	error (_("Dwarf Error: %s used without required section"),
+	       form_name);
+      else
+	error (_("Dwarf Error: %s used without %s section [in module %s]"),
+	       form_name, get_name (), get_file_name ());
+    }
+  if (str_offset >= size)
+    error (_("%s pointing outside of %s section [in module %s]"),
+	   form_name, get_name (), get_file_name ());
+  gdb_assert (HOST_CHAR_BIT == 8);
+  if (buffer[str_offset] == '\0')
+    return NULL;
+  return (const char *) (buffer + str_offset);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/section.h ./gdb/dwarf2/section.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/section.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/section.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,128 @@
+/* DWARF 2 low-level section code
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 GDB_DWARF2_SECTION_H
+#define GDB_DWARF2_SECTION_H
+
+/* A descriptor for dwarf sections.
+
+   S.ASECTION, SIZE are typically initialized when the objfile is first
+   scanned.  BUFFER, READIN are filled in later when the section is read.
+   If the section contained compressed data then SIZE is updated to record
+   the uncompressed size of the section.
+
+   DWP file format V2 introduces a wrinkle that is easiest to handle by
+   creating the concept of virtual sections contained within a real section.
+   In DWP V2 the sections of the input DWO files are concatenated together
+   into one section, but section offsets are kept relative to the original
+   input section.
+   If this is a virtual dwp-v2 section, S.CONTAINING_SECTION is a backlink to
+   the real section this "virtual" section is contained in, and BUFFER,SIZE
+   describe the virtual section.  */
+
+struct dwarf2_section_info
+{
+  /* Return the name of this section.  */
+  const char *get_name () const;
+
+  /* Return the containing section of this section, which must be a
+     virtual section.  */
+  struct dwarf2_section_info *get_containing_section () const;
+
+  /* Return the bfd owner of this section.  */
+  struct bfd *get_bfd_owner () const;
+
+  /* Return the bfd section of this section.
+     Returns NULL if the section is not present.  */
+  asection *get_bfd_section () const;
+
+  /* Return the name of the file this section is in.  */
+  const char *get_file_name () const;
+
+  /* Return the id of this section.
+     Returns 0 if this section doesn't exist.  */
+  int get_id () const;
+
+  /* Return the flags of this section.  This section (or containing
+     section if this is a virtual section) must exist.  */
+  int get_flags () const;
+
+  /* Return true if this section does not exist or if it has no
+     contents. */
+  bool empty () const;
+
+  /* Read the contents of this section.
+     OBJFILE is the main object file, but not necessarily the file where
+     the section comes from.  E.g., for DWO files the bfd of INFO is the bfd
+     of the DWO file.
+     If the section is compressed, uncompress it before returning.  */
+  void read (struct objfile *objfile);
+
+  /* A helper function that returns the size of a section in a safe way.
+     If you are positive that the section has been read before using the
+     size, then it is safe to refer to the dwarf2_section_info object's
+     "size" field directly.  In other cases, you must call this
+     function, because for compressed sections the size field is not set
+     correctly until the section has been read.  */
+  bfd_size_type get_size (struct objfile *objfile)
+  {
+    if (!readin)
+      read (objfile);
+    return size;
+  }
+
+  /* Issue a complaint that something was outside the bounds of this
+     buffer.  */
+  void overflow_complaint () const;
+
+  /* Return pointer to string in this section at offset STR_OFFSET
+     with error reporting string FORM_NAME.  */
+  const char *read_string (struct objfile *objfile, LONGEST str_offset,
+			   const char *form_name);
+
+  union
+  {
+    /* If this is a real section, the bfd section.  */
+    asection *section;
+    /* If this is a virtual section, pointer to the containing ("real")
+       section.  */
+    struct dwarf2_section_info *containing_section;
+  } s;
+  /* Pointer to section data, only valid if readin.  */
+  const gdb_byte *buffer;
+  /* The size of the section, real or virtual.  */
+  bfd_size_type size;
+  /* If this is a virtual section, the offset in the real section.
+     Only valid if is_virtual.  */
+  bfd_size_type virtual_offset;
+  /* True if we have tried to read this section.  */
+  bool readin;
+  /* True if this is a virtual section, False otherwise.
+     This specifies which of s.section and s.containing_section to use.  */
+  bool is_virtual;
+};
+
+#endif /* GDB_DWARF2_SECTION_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/sect-names.h ./gdb/dwarf2/sect-names.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/sect-names.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/sect-names.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,78 @@
+/* DWARF 2 section names.
+
+   Copyright (C) 1990-2021 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 GDB_DWARF2_SECT_NAMES_H
+#define GDB_DWARF2_SECT_NAMES_H
+
+/* Names for a dwarf2 debugging section.  The field NORMAL is the normal
+   section name (usually from the DWARF standard), while the field COMPRESSED
+   is the name of compressed sections.  If your object file format doesn't
+   support compressed sections, the field COMPRESSED can be NULL.  Likewise,
+   the debugging section is not supported, the field NORMAL can be NULL too.
+   It doesn't make sense to have a NULL NORMAL field but a non-NULL COMPRESSED
+   field.  */
+
+struct dwarf2_section_names {
+  const char *normal;
+  const char *compressed;
+
+  /* Return true if NAME matches either of this section's names.  */
+  bool matches (const char *name) const
+  {
+    return ((normal != nullptr && strcmp (name, normal) == 0)
+	    || (compressed != nullptr && strcmp (name, compressed) == 0));
+  }
+};
+
+/* List of names for dward2 debugging sections.  Also most object file formats
+   use the standardized (ie ELF) names, some (eg XCOFF) have customized names
+   due to restrictions.
+   The table for the standard names is defined in dwarf2read.c.  Please
+   update all instances of dwarf2_debug_sections if you add a field to this
+   structure.  It is always safe to use { NULL, NULL } in this case.  */
+
+struct dwarf2_debug_sections {
+  struct dwarf2_section_names info;
+  struct dwarf2_section_names abbrev;
+  struct dwarf2_section_names line;
+  struct dwarf2_section_names loc;
+  struct dwarf2_section_names loclists;
+  struct dwarf2_section_names macinfo;
+  struct dwarf2_section_names macro;
+  struct dwarf2_section_names str;
+  struct dwarf2_section_names str_offsets;
+  struct dwarf2_section_names line_str;
+  struct dwarf2_section_names ranges;
+  struct dwarf2_section_names rnglists;
+  struct dwarf2_section_names types;
+  struct dwarf2_section_names addr;
+  struct dwarf2_section_names frame;
+  struct dwarf2_section_names eh_frame;
+  struct dwarf2_section_names gdb_index;
+  struct dwarf2_section_names debug_names;
+  struct dwarf2_section_names debug_aranges;
+  /* This field has no meaning, but exists solely to catch changes to
+     this structure which are not reflected in some instance.  */
+  int sentinel;
+};
+
+/* Section names for ELF.  */
+extern const struct dwarf2_debug_sections dwarf2_elf_names;
+
+#endif /* GDB_DWARF2_SECT_NAMES_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/stringify.c ./gdb/dwarf2/stringify.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/stringify.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/stringify.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,127 @@
+/* DWARF stringify code
+
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+   Inc.  with support from Florida State University (under contract
+   with the Ada Joint Program Office), and Silicon Graphics, Inc.
+   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+   support.
+
+   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 "dwarf2.h"
+#include "dwarf2/stringify.h"
+
+/* A convenience function that returns an "unknown" DWARF name,
+   including the value of V.  STR is the name of the entity being
+   printed, e.g., "TAG".  */
+
+static const char *
+dwarf_unknown (const char *str, unsigned v)
+{
+  char *cell = get_print_cell ();
+  xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v);
+  return cell;
+}
+
+/* See stringify.h.  */
+
+const char *
+dwarf_tag_name (unsigned tag)
+{
+  const char *name = get_DW_TAG_name (tag);
+
+  if (name == NULL)
+    return dwarf_unknown ("TAG", tag);
+
+  return name;
+}
+
+/* See stringify.h.  */
+
+const char *
+dwarf_attr_name (unsigned attr)
+{
+  const char *name;
+
+#ifdef MIPS /* collides with DW_AT_HP_block_index */
+  if (attr == DW_AT_MIPS_fde)
+    return "DW_AT_MIPS_fde";
+#else
+  if (attr == DW_AT_HP_block_index)
+    return "DW_AT_HP_block_index";
+#endif
+
+  name = get_DW_AT_name (attr);
+
+  if (name == NULL)
+    return dwarf_unknown ("AT", attr);
+
+  return name;
+}
+
+/* See stringify.h.  */
+
+const char *
+dwarf_form_name (unsigned form)
+{
+  const char *name = get_DW_FORM_name (form);
+
+  if (name == NULL)
+    return dwarf_unknown ("FORM", form);
+
+  return name;
+}
+
+/* See stringify.h.  */
+
+const char *
+dwarf_bool_name (unsigned mybool)
+{
+  if (mybool)
+    return "TRUE";
+  else
+    return "FALSE";
+}
+
+/* See stringify.h.  */
+
+const char *
+dwarf_type_encoding_name (unsigned enc)
+{
+  const char *name = get_DW_ATE_name (enc);
+
+  if (name == NULL)
+    return dwarf_unknown ("ATE", enc);
+
+  return name;
+}
+
+/* See stringify.h.  */
+
+const char *
+dwarf_unit_type_name (int unit_type)
+{
+  const char *name = get_DW_UT_name (unit_type);
+
+  if (name == nullptr)
+    return dwarf_unknown ("UT", unit_type);
+
+  return name;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/stringify.h ./gdb/dwarf2/stringify.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2/stringify.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/dwarf2/stringify.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,41 @@
+/* DWARF stringify code
+
+   Copyright (C) 2003-2021 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 GDB_DWARF2_STRINGIFY_H
+#define GDB_DWARF2_STRINGIFY_H
+
+/* Convert a DIE tag into its string name.  */
+extern const char *dwarf_tag_name (unsigned tag);
+
+/* Convert a DWARF attribute code into its string name.  */
+extern const char *dwarf_attr_name (unsigned attr);
+
+/* Convert a DWARF value form code into its string name.  */
+extern const char *dwarf_form_name (unsigned form);
+
+/* Convert a boolean to a string form.  */
+extern const char *dwarf_bool_name (unsigned mybool);
+
+/* Convert a DWARF type code into its string name.  */
+extern const char *dwarf_type_encoding_name (unsigned enc);
+
+/* Convert a DWARF unit type into its string name.  */
+extern const char *dwarf_unit_type_name (int unit_type);
+
+#endif /* GDB_DWARF2_STRINGIFY_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2expr.c ./gdb/dwarf2expr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2expr.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2expr.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1427 +0,0 @@
-/* DWARF 2 Expression Evaluator.
-
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
-
-   Contributed by Daniel Berlin (dan@dberlin.org)
-
-   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 "symtab.h"
-#include "gdbtypes.h"
-#include "value.h"
-#include "gdbcore.h"
-#include "dwarf2.h"
-#include "dwarf2expr.h"
-#include "dwarf2loc.h"
-#include "gdbsupport/underlying.h"
-#include "gdbarch.h"
-
-/* Cookie for gdbarch data.  */
-
-static struct gdbarch_data *dwarf_arch_cookie;
-
-/* This holds gdbarch-specific types used by the DWARF expression
-   evaluator.  See comments in execute_stack_op.  */
-
-struct dwarf_gdbarch_types
-{
-  struct type *dw_types[3];
-};
-
-/* Allocate and fill in dwarf_gdbarch_types for an arch.  */
-
-static void *
-dwarf_gdbarch_types_init (struct gdbarch *gdbarch)
-{
-  struct dwarf_gdbarch_types *types
-    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct dwarf_gdbarch_types);
-
-  /* The types themselves are lazily initialized.  */
-
-  return types;
-}
-
-/* Return the type used for DWARF operations where the type is
-   unspecified in the DWARF spec.  Only certain sizes are
-   supported.  */
-
-struct type *
-dwarf_expr_context::address_type () const
-{
-  struct dwarf_gdbarch_types *types
-    = (struct dwarf_gdbarch_types *) gdbarch_data (this->gdbarch,
-						   dwarf_arch_cookie);
-  int ndx;
-
-  if (this->addr_size == 2)
-    ndx = 0;
-  else if (this->addr_size == 4)
-    ndx = 1;
-  else if (this->addr_size == 8)
-    ndx = 2;
-  else
-    error (_("Unsupported address size in DWARF expressions: %d bits"),
-	   8 * this->addr_size);
-
-  if (types->dw_types[ndx] == NULL)
-    types->dw_types[ndx]
-      = arch_integer_type (this->gdbarch,
-			   8 * this->addr_size,
-			   0, "<signed DWARF address type>");
-
-  return types->dw_types[ndx];
-}
-
-/* Create a new context for the expression evaluator.  */
-
-dwarf_expr_context::dwarf_expr_context ()
-: gdbarch (NULL),
-  addr_size (0),
-  ref_addr_size (0),
-  offset (0),
-  recursion_depth (0),
-  max_recursion_depth (0x100),
-  location (DWARF_VALUE_MEMORY),
-  len (0),
-  data (NULL),
-  initialized (0)
-{
-}
-
-/* Push VALUE onto the stack.  */
-
-void
-dwarf_expr_context::push (struct value *value, bool in_stack_memory)
-{
-  stack.emplace_back (value, in_stack_memory);
-}
-
-/* Push VALUE onto the stack.  */
-
-void
-dwarf_expr_context::push_address (CORE_ADDR value, bool in_stack_memory)
-{
-  push (value_from_ulongest (address_type (), value), in_stack_memory);
-}
-
-/* Pop the top item off of the stack.  */
-
-void
-dwarf_expr_context::pop ()
-{
-  if (stack.empty ())
-    error (_("dwarf expression stack underflow"));
-
-  stack.pop_back ();
-}
-
-/* Retrieve the N'th item on the stack.  */
-
-struct value *
-dwarf_expr_context::fetch (int n)
-{
-  if (stack.size () <= n)
-     error (_("Asked for position %d of stack, "
-	      "stack only has %zu elements on it."),
-	    n, stack.size ());
-  return stack[stack.size () - (1 + n)].value;
-}
-
-/* Require that TYPE be an integral type; throw an exception if not.  */
-
-static void
-dwarf_require_integral (struct type *type)
-{
-  if (TYPE_CODE (type) != TYPE_CODE_INT
-      && TYPE_CODE (type) != TYPE_CODE_CHAR
-      && TYPE_CODE (type) != TYPE_CODE_BOOL)
-    error (_("integral type expected in DWARF expression"));
-}
-
-/* Return the unsigned form of TYPE.  TYPE is necessarily an integral
-   type.  */
-
-static struct type *
-get_unsigned_type (struct gdbarch *gdbarch, struct type *type)
-{
-  switch (TYPE_LENGTH (type))
-    {
-    case 1:
-      return builtin_type (gdbarch)->builtin_uint8;
-    case 2:
-      return builtin_type (gdbarch)->builtin_uint16;
-    case 4:
-      return builtin_type (gdbarch)->builtin_uint32;
-    case 8:
-      return builtin_type (gdbarch)->builtin_uint64;
-    default:
-      error (_("no unsigned variant found for type, while evaluating "
-	       "DWARF expression"));
-    }
-}
-
-/* Return the signed form of TYPE.  TYPE is necessarily an integral
-   type.  */
-
-static struct type *
-get_signed_type (struct gdbarch *gdbarch, struct type *type)
-{
-  switch (TYPE_LENGTH (type))
-    {
-    case 1:
-      return builtin_type (gdbarch)->builtin_int8;
-    case 2:
-      return builtin_type (gdbarch)->builtin_int16;
-    case 4:
-      return builtin_type (gdbarch)->builtin_int32;
-    case 8:
-      return builtin_type (gdbarch)->builtin_int64;
-    default:
-      error (_("no signed variant found for type, while evaluating "
-	       "DWARF expression"));
-    }
-}
-
-/* Retrieve the N'th item on the stack, converted to an address.  */
-
-CORE_ADDR
-dwarf_expr_context::fetch_address (int n)
-{
-  struct value *result_val = fetch (n);
-  enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
-  ULONGEST result;
-
-  dwarf_require_integral (value_type (result_val));
-  result = extract_unsigned_integer (value_contents (result_val),
-				     TYPE_LENGTH (value_type (result_val)),
-				     byte_order);
-
-  /* For most architectures, calling extract_unsigned_integer() alone
-     is sufficient for extracting an address.  However, some
-     architectures (e.g. MIPS) use signed addresses and using
-     extract_unsigned_integer() will not produce a correct
-     result.  Make sure we invoke gdbarch_integer_to_address()
-     for those architectures which require it.  */
-  if (gdbarch_integer_to_address_p (this->gdbarch))
-    {
-      gdb_byte *buf = (gdb_byte *) alloca (this->addr_size);
-      struct type *int_type = get_unsigned_type (this->gdbarch,
-						 value_type (result_val));
-
-      store_unsigned_integer (buf, this->addr_size, byte_order, result);
-      return gdbarch_integer_to_address (this->gdbarch, int_type, buf);
-    }
-
-  return (CORE_ADDR) result;
-}
-
-/* Retrieve the in_stack_memory flag of the N'th item on the stack.  */
-
-bool
-dwarf_expr_context::fetch_in_stack_memory (int n)
-{
-  if (stack.size () <= n)
-     error (_("Asked for position %d of stack, "
-	      "stack only has %zu elements on it."),
-	    n, stack.size ());
-  return stack[stack.size () - (1 + n)].in_stack_memory;
-}
-
-/* Return true if the expression stack is empty.  */
-
-bool
-dwarf_expr_context::stack_empty_p () const
-{
-  return stack.empty ();
-}
-
-/* Add a new piece to the dwarf_expr_context's piece list.  */
-void
-dwarf_expr_context::add_piece (ULONGEST size, ULONGEST offset)
-{
-  this->pieces.emplace_back ();
-  dwarf_expr_piece &p = this->pieces.back ();
-
-  p.location = this->location;
-  p.size = size;
-  p.offset = offset;
-
-  if (p.location == DWARF_VALUE_LITERAL)
-    {
-      p.v.literal.data = this->data;
-      p.v.literal.length = this->len;
-    }
-  else if (stack_empty_p ())
-    {
-      p.location = DWARF_VALUE_OPTIMIZED_OUT;
-      /* Also reset the context's location, for our callers.  This is
-	 a somewhat strange approach, but this lets us avoid setting
-	 the location to DWARF_VALUE_MEMORY in all the individual
-	 cases in the evaluator.  */
-      this->location = DWARF_VALUE_OPTIMIZED_OUT;
-    }
-  else if (p.location == DWARF_VALUE_MEMORY)
-    {
-      p.v.mem.addr = fetch_address (0);
-      p.v.mem.in_stack_memory = fetch_in_stack_memory (0);
-    }
-  else if (p.location == DWARF_VALUE_IMPLICIT_POINTER)
-    {
-      p.v.ptr.die_sect_off = (sect_offset) this->len;
-      p.v.ptr.offset = value_as_long (fetch (0));
-    }
-  else if (p.location == DWARF_VALUE_REGISTER)
-    p.v.regno = value_as_long (fetch (0));
-  else
-    {
-      p.v.value = fetch (0);
-    }
-}
-
-/* Evaluate the expression at ADDR (LEN bytes long).  */
-
-void
-dwarf_expr_context::eval (const gdb_byte *addr, size_t len)
-{
-  int old_recursion_depth = this->recursion_depth;
-
-  execute_stack_op (addr, addr + len);
-
-  /* RECURSION_DEPTH becomes invalid if an exception was thrown here.  */
-
-  gdb_assert (this->recursion_depth == old_recursion_depth);
-}
-
-/* Helper to read a uleb128 value or throw an error.  */
-
-const gdb_byte *
-safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
-		   uint64_t *r)
-{
-  buf = gdb_read_uleb128 (buf, buf_end, r);
-  if (buf == NULL)
-    error (_("DWARF expression error: ran off end of buffer reading uleb128 value"));
-  return buf;
-}
-
-/* Helper to read a sleb128 value or throw an error.  */
-
-const gdb_byte *
-safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
-		   int64_t *r)
-{
-  buf = gdb_read_sleb128 (buf, buf_end, r);
-  if (buf == NULL)
-    error (_("DWARF expression error: ran off end of buffer reading sleb128 value"));
-  return buf;
-}
-
-const gdb_byte *
-safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
-{
-  buf = gdb_skip_leb128 (buf, buf_end);
-  if (buf == NULL)
-    error (_("DWARF expression error: ran off end of buffer reading leb128 value"));
-  return buf;
-}
-
-
-/* Check that the current operator is either at the end of an
-   expression, or that it is followed by a composition operator or by
-   DW_OP_GNU_uninit (which should terminate the expression).  */
-
-void
-dwarf_expr_require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end,
-				const char *op_name)
-{
-  if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece
-      && *op_ptr != DW_OP_GNU_uninit)
-    error (_("DWARF-2 expression error: `%s' operations must be "
-	     "used either alone or in conjunction with DW_OP_piece "
-	     "or DW_OP_bit_piece."),
-	   op_name);
-}
-
-/* Return true iff the types T1 and T2 are "the same".  This only does
-   checks that might reasonably be needed to compare DWARF base
-   types.  */
-
-static int
-base_types_equal_p (struct type *t1, struct type *t2)
-{
-  if (TYPE_CODE (t1) != TYPE_CODE (t2))
-    return 0;
-  if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2))
-    return 0;
-  return TYPE_LENGTH (t1) == TYPE_LENGTH (t2);
-}
-
-/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_reg* return the
-   DWARF register number.  Otherwise return -1.  */
-
-int
-dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end)
-{
-  uint64_t dwarf_reg;
-
-  if (buf_end <= buf)
-    return -1;
-  if (*buf >= DW_OP_reg0 && *buf <= DW_OP_reg31)
-    {
-      if (buf_end - buf != 1)
-	return -1;
-      return *buf - DW_OP_reg0;
-    }
-
-  if (*buf == DW_OP_regval_type || *buf == DW_OP_GNU_regval_type)
-    {
-      buf++;
-      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
-      if (buf == NULL)
-	return -1;
-      buf = gdb_skip_leb128 (buf, buf_end);
-      if (buf == NULL)
-	return -1;
-    }
-  else if (*buf == DW_OP_regx)
-    {
-      buf++;
-      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
-      if (buf == NULL)
-	return -1;
-    }
-  else
-    return -1;
-  if (buf != buf_end || (int) dwarf_reg != dwarf_reg)
-    return -1;
-  return dwarf_reg;
-}
-
-/* If <BUF..BUF_END] contains DW_FORM_block* with just DW_OP_breg*(0) and
-   DW_OP_deref* return the DWARF register number.  Otherwise return -1.
-   DEREF_SIZE_RETURN contains -1 for DW_OP_deref; otherwise it contains the
-   size from DW_OP_deref_size.  */
-
-int
-dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end,
-				CORE_ADDR *deref_size_return)
-{
-  uint64_t dwarf_reg;
-  int64_t offset;
-
-  if (buf_end <= buf)
-    return -1;
-
-  if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
-    {
-      dwarf_reg = *buf - DW_OP_breg0;
-      buf++;
-      if (buf >= buf_end)
-	return -1;
-    }
-  else if (*buf == DW_OP_bregx)
-    {
-      buf++;
-      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
-      if (buf == NULL)
-	return -1;
-      if ((int) dwarf_reg != dwarf_reg)
-       return -1;
-    }
-  else
-    return -1;
-
-  buf = gdb_read_sleb128 (buf, buf_end, &offset);
-  if (buf == NULL)
-    return -1;
-  if (offset != 0)
-    return -1;
-
-  if (*buf == DW_OP_deref)
-    {
-      buf++;
-      *deref_size_return = -1;
-    }
-  else if (*buf == DW_OP_deref_size)
-    {
-      buf++;
-      if (buf >= buf_end)
-       return -1;
-      *deref_size_return = *buf++;
-    }
-  else
-    return -1;
-
-  if (buf != buf_end)
-    return -1;
-
-  return dwarf_reg;
-}
-
-/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_fbreg(X) fill
-   in FB_OFFSET_RETURN with the X offset and return 1.  Otherwise return 0.  */
-
-int
-dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
-			  CORE_ADDR *fb_offset_return)
-{
-  int64_t fb_offset;
-
-  if (buf_end <= buf)
-    return 0;
-
-  if (*buf != DW_OP_fbreg)
-    return 0;
-  buf++;
-
-  buf = gdb_read_sleb128 (buf, buf_end, &fb_offset);
-  if (buf == NULL)
-    return 0;
-  *fb_offset_return = fb_offset;
-  if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return)
-    return 0;
-
-  return 1;
-}
-
-/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_bregSP(X) fill
-   in SP_OFFSET_RETURN with the X offset and return 1.  Otherwise return 0.
-   The matched SP register number depends on GDBARCH.  */
-
-int
-dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
-			  const gdb_byte *buf_end, CORE_ADDR *sp_offset_return)
-{
-  uint64_t dwarf_reg;
-  int64_t sp_offset;
-
-  if (buf_end <= buf)
-    return 0;
-  if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
-    {
-      dwarf_reg = *buf - DW_OP_breg0;
-      buf++;
-    }
-  else
-    {
-      if (*buf != DW_OP_bregx)
-       return 0;
-      buf++;
-      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
-      if (buf == NULL)
-	return 0;
-    }
-
-  if (dwarf_reg_to_regnum (gdbarch, dwarf_reg)
-      != gdbarch_sp_regnum (gdbarch))
-    return 0;
-
-  buf = gdb_read_sleb128 (buf, buf_end, &sp_offset);
-  if (buf == NULL)
-    return 0;
-  *sp_offset_return = sp_offset;
-  if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return)
-    return 0;
-
-  return 1;
-}
-
-/* The engine for the expression evaluator.  Using the context in this
-   object, evaluate the expression between OP_PTR and OP_END.  */
-
-void
-dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
-				      const gdb_byte *op_end)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch);
-  /* Old-style "untyped" DWARF values need special treatment in a
-     couple of places, specifically DW_OP_mod and DW_OP_shr.  We need
-     a special type for these values so we can distinguish them from
-     values that have an explicit type, because explicitly-typed
-     values do not need special treatment.  This special type must be
-     different (in the `==' sense) from any base type coming from the
-     CU.  */
-  struct type *address_type = this->address_type ();
-
-  this->location = DWARF_VALUE_MEMORY;
-  this->initialized = 1;  /* Default is initialized.  */
-
-  if (this->recursion_depth > this->max_recursion_depth)
-    error (_("DWARF-2 expression error: Loop detected (%d)."),
-	   this->recursion_depth);
-  this->recursion_depth++;
-
-  while (op_ptr < op_end)
-    {
-      enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr++;
-      ULONGEST result;
-      /* Assume the value is not in stack memory.
-	 Code that knows otherwise sets this to true.
-	 Some arithmetic on stack addresses can probably be assumed to still
-	 be a stack address, but we skip this complication for now.
-	 This is just an optimization, so it's always ok to punt
-	 and leave this as false.  */
-      bool in_stack_memory = false;
-      uint64_t uoffset, reg;
-      int64_t offset;
-      struct value *result_val = NULL;
-
-      /* The DWARF expression might have a bug causing an infinite
-	 loop.  In that case, quitting is the only way out.  */
-      QUIT;
-
-      switch (op)
-	{
-	case DW_OP_lit0:
-	case DW_OP_lit1:
-	case DW_OP_lit2:
-	case DW_OP_lit3:
-	case DW_OP_lit4:
-	case DW_OP_lit5:
-	case DW_OP_lit6:
-	case DW_OP_lit7:
-	case DW_OP_lit8:
-	case DW_OP_lit9:
-	case DW_OP_lit10:
-	case DW_OP_lit11:
-	case DW_OP_lit12:
-	case DW_OP_lit13:
-	case DW_OP_lit14:
-	case DW_OP_lit15:
-	case DW_OP_lit16:
-	case DW_OP_lit17:
-	case DW_OP_lit18:
-	case DW_OP_lit19:
-	case DW_OP_lit20:
-	case DW_OP_lit21:
-	case DW_OP_lit22:
-	case DW_OP_lit23:
-	case DW_OP_lit24:
-	case DW_OP_lit25:
-	case DW_OP_lit26:
-	case DW_OP_lit27:
-	case DW_OP_lit28:
-	case DW_OP_lit29:
-	case DW_OP_lit30:
-	case DW_OP_lit31:
-	  result = op - DW_OP_lit0;
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-
-	case DW_OP_addr:
-	  result = extract_unsigned_integer (op_ptr,
-					     this->addr_size, byte_order);
-	  op_ptr += this->addr_size;
-	  /* Some versions of GCC emit DW_OP_addr before
-	     DW_OP_GNU_push_tls_address.  In this case the value is an
-	     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)
-	    result += this->offset;
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-
-	case DW_OP_addrx:
-	case DW_OP_GNU_addr_index:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	  result = this->get_addr_index (uoffset);
-	  result += this->offset;
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-	case DW_OP_GNU_const_index:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	  result = this->get_addr_index (uoffset);
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-
-	case DW_OP_const1u:
-	  result = extract_unsigned_integer (op_ptr, 1, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 1;
-	  break;
-	case DW_OP_const1s:
-	  result = extract_signed_integer (op_ptr, 1, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 1;
-	  break;
-	case DW_OP_const2u:
-	  result = extract_unsigned_integer (op_ptr, 2, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 2;
-	  break;
-	case DW_OP_const2s:
-	  result = extract_signed_integer (op_ptr, 2, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 2;
-	  break;
-	case DW_OP_const4u:
-	  result = extract_unsigned_integer (op_ptr, 4, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 4;
-	  break;
-	case DW_OP_const4s:
-	  result = extract_signed_integer (op_ptr, 4, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 4;
-	  break;
-	case DW_OP_const8u:
-	  result = extract_unsigned_integer (op_ptr, 8, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 8;
-	  break;
-	case DW_OP_const8s:
-	  result = extract_signed_integer (op_ptr, 8, byte_order);
-	  result_val = value_from_ulongest (address_type, result);
-	  op_ptr += 8;
-	  break;
-	case DW_OP_constu:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	  result = uoffset;
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-	case DW_OP_consts:
-	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	  result = offset;
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-
-	/* The DW_OP_reg operations are required to occur alone in
-	   location expressions.  */
-	case DW_OP_reg0:
-	case DW_OP_reg1:
-	case DW_OP_reg2:
-	case DW_OP_reg3:
-	case DW_OP_reg4:
-	case DW_OP_reg5:
-	case DW_OP_reg6:
-	case DW_OP_reg7:
-	case DW_OP_reg8:
-	case DW_OP_reg9:
-	case DW_OP_reg10:
-	case DW_OP_reg11:
-	case DW_OP_reg12:
-	case DW_OP_reg13:
-	case DW_OP_reg14:
-	case DW_OP_reg15:
-	case DW_OP_reg16:
-	case DW_OP_reg17:
-	case DW_OP_reg18:
-	case DW_OP_reg19:
-	case DW_OP_reg20:
-	case DW_OP_reg21:
-	case DW_OP_reg22:
-	case DW_OP_reg23:
-	case DW_OP_reg24:
-	case DW_OP_reg25:
-	case DW_OP_reg26:
-	case DW_OP_reg27:
-	case DW_OP_reg28:
-	case DW_OP_reg29:
-	case DW_OP_reg30:
-	case DW_OP_reg31:
-	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg");
-
-	  result = op - DW_OP_reg0;
-	  result_val = value_from_ulongest (address_type, result);
-	  this->location = DWARF_VALUE_REGISTER;
-	  break;
-
-	case DW_OP_regx:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
-
-	  result = reg;
-	  result_val = value_from_ulongest (address_type, result);
-	  this->location = DWARF_VALUE_REGISTER;
-	  break;
-
-	case DW_OP_implicit_value:
-	  {
-	    uint64_t len;
-
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
-	    if (op_ptr + len > op_end)
-	      error (_("DW_OP_implicit_value: too few bytes available."));
-	    this->len = len;
-	    this->data = op_ptr;
-	    this->location = DWARF_VALUE_LITERAL;
-	    op_ptr += len;
-	    dwarf_expr_require_composition (op_ptr, op_end,
-					    "DW_OP_implicit_value");
-	  }
-	  goto no_push;
-
-	case DW_OP_stack_value:
-	  this->location = DWARF_VALUE_STACK;
-	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
-	  goto no_push;
-
-	case DW_OP_implicit_pointer:
-	case DW_OP_GNU_implicit_pointer:
-	  {
-	    int64_t len;
-
-	    if (this->ref_addr_size == -1)
-	      error (_("DWARF-2 expression error: DW_OP_implicit_pointer "
-		       "is not allowed in frame context"));
-
-	    /* The referred-to DIE of sect_offset kind.  */
-	    this->len = extract_unsigned_integer (op_ptr, this->ref_addr_size,
-						 byte_order);
-	    op_ptr += this->ref_addr_size;
-
-	    /* The byte offset into the data.  */
-	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &len);
-	    result = (ULONGEST) len;
-	    result_val = value_from_ulongest (address_type, result);
-
-	    this->location = DWARF_VALUE_IMPLICIT_POINTER;
-	    dwarf_expr_require_composition (op_ptr, op_end,
-					    "DW_OP_implicit_pointer");
-	  }
-	  break;
-
-	case DW_OP_breg0:
-	case DW_OP_breg1:
-	case DW_OP_breg2:
-	case DW_OP_breg3:
-	case DW_OP_breg4:
-	case DW_OP_breg5:
-	case DW_OP_breg6:
-	case DW_OP_breg7:
-	case DW_OP_breg8:
-	case DW_OP_breg9:
-	case DW_OP_breg10:
-	case DW_OP_breg11:
-	case DW_OP_breg12:
-	case DW_OP_breg13:
-	case DW_OP_breg14:
-	case DW_OP_breg15:
-	case DW_OP_breg16:
-	case DW_OP_breg17:
-	case DW_OP_breg18:
-	case DW_OP_breg19:
-	case DW_OP_breg20:
-	case DW_OP_breg21:
-	case DW_OP_breg22:
-	case DW_OP_breg23:
-	case DW_OP_breg24:
-	case DW_OP_breg25:
-	case DW_OP_breg26:
-	case DW_OP_breg27:
-	case DW_OP_breg28:
-	case DW_OP_breg29:
-	case DW_OP_breg30:
-	case DW_OP_breg31:
-	  {
-	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	    result = this->read_addr_from_reg (op - DW_OP_breg0);
-	    result += offset;
-	    result_val = value_from_ulongest (address_type, result);
-	  }
-	  break;
-	case DW_OP_bregx:
-	  {
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	    result = this->read_addr_from_reg (reg);
-	    result += offset;
-	    result_val = value_from_ulongest (address_type, result);
-	  }
-	  break;
-	case DW_OP_fbreg:
-	  {
-	    const gdb_byte *datastart;
-	    size_t datalen;
-
-	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-
-	    /* Rather than create a whole new context, we simply
-	       backup the current stack locally and install a new empty stack,
-	       then reset it afterwards, effectively erasing whatever the
-	       recursive call put there.  */
-	    std::vector<dwarf_stack_value> saved_stack = std::move (stack);
-	    stack.clear ();
-
-	    /* FIXME: cagney/2003-03-26: This code should be using
-               get_frame_base_address(), and then implement a dwarf2
-               specific this_base method.  */
-	    this->get_frame_base (&datastart, &datalen);
-	    eval (datastart, datalen);
-	    if (this->location == DWARF_VALUE_MEMORY)
-	      result = fetch_address (0);
-	    else if (this->location == DWARF_VALUE_REGISTER)
-	      result = this->read_addr_from_reg (value_as_long (fetch (0)));
-	    else
-	      error (_("Not implemented: computing frame "
-		       "base using explicit value operator"));
-	    result = result + offset;
-	    result_val = value_from_ulongest (address_type, result);
-	    in_stack_memory = true;
-
-	    /* Restore the content of the original stack.  */
-	    stack = std::move (saved_stack);
-
-	    this->location = DWARF_VALUE_MEMORY;
-	  }
-	  break;
-
-	case DW_OP_dup:
-	  result_val = fetch (0);
-	  in_stack_memory = fetch_in_stack_memory (0);
-	  break;
-
-	case DW_OP_drop:
-	  pop ();
-	  goto no_push;
-
-	case DW_OP_pick:
-	  offset = *op_ptr++;
-	  result_val = fetch (offset);
-	  in_stack_memory = fetch_in_stack_memory (offset);
-	  break;
-	  
-	case DW_OP_swap:
-	  {
-	    if (stack.size () < 2)
-	       error (_("Not enough elements for "
-			"DW_OP_swap.  Need 2, have %zu."),
-		      stack.size ());
-
-	    dwarf_stack_value &t1 = stack[stack.size () - 1];
-	    dwarf_stack_value &t2 = stack[stack.size () - 2];
-	    std::swap (t1, t2);
-	    goto no_push;
-	  }
-
-	case DW_OP_over:
-	  result_val = fetch (1);
-	  in_stack_memory = fetch_in_stack_memory (1);
-	  break;
-
-	case DW_OP_rot:
-	  {
-	    if (stack.size () < 3)
-	       error (_("Not enough elements for "
-			"DW_OP_rot.  Need 3, have %zu."),
-		      stack.size ());
-
-	    dwarf_stack_value temp = stack[stack.size () - 1];
-	    stack[stack.size () - 1] = stack[stack.size () - 2];
-	    stack[stack.size () - 2] = stack[stack.size () - 3];
-	    stack[stack.size () - 3] = temp;
-	    goto no_push;
-	  }
-
-	case DW_OP_deref:
-	case DW_OP_deref_size:
-	case DW_OP_deref_type:
-	case DW_OP_GNU_deref_type:
-	  {
-	    int addr_size = (op == DW_OP_deref ? this->addr_size : *op_ptr++);
-	    gdb_byte *buf = (gdb_byte *) alloca (addr_size);
-	    CORE_ADDR addr = fetch_address (0);
-	    struct type *type;
-
-	    pop ();
-
-	    if (op == DW_OP_deref_type || op == DW_OP_GNU_deref_type)
-	      {
-		op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-		cu_offset type_die_cu_off = (cu_offset) uoffset;
-		type = get_base_type (type_die_cu_off, 0);
-	      }
-	    else
-	      type = address_type;
-
-	    this->read_mem (buf, addr, addr_size);
-
-	    /* If the size of the object read from memory is different
-	       from the type length, we need to zero-extend it.  */
-	    if (TYPE_LENGTH (type) != addr_size)
-	      {
-		ULONGEST datum =
-		  extract_unsigned_integer (buf, addr_size, byte_order);
-
-		buf = (gdb_byte *) alloca (TYPE_LENGTH (type));
-		store_unsigned_integer (buf, TYPE_LENGTH (type),
-					byte_order, datum);
-	      }
-
-	    result_val = value_from_contents_and_address (type, buf, addr);
-	    break;
-	  }
-
-	case DW_OP_abs:
-	case DW_OP_neg:
-	case DW_OP_not:
-	case DW_OP_plus_uconst:
-	  {
-	    /* Unary operations.  */
-	    result_val = fetch (0);
-	    pop ();
-
-	    switch (op)
-	      {
-	      case DW_OP_abs:
-		if (value_less (result_val,
-				value_zero (value_type (result_val), not_lval)))
-		  result_val = value_neg (result_val);
-		break;
-	      case DW_OP_neg:
-		result_val = value_neg (result_val);
-		break;
-	      case DW_OP_not:
-		dwarf_require_integral (value_type (result_val));
-		result_val = value_complement (result_val);
-		break;
-	      case DW_OP_plus_uconst:
-		dwarf_require_integral (value_type (result_val));
-		result = value_as_long (result_val);
-		op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-		result += reg;
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      }
-	  }
-	  break;
-
-	case DW_OP_and:
-	case DW_OP_div:
-	case DW_OP_minus:
-	case DW_OP_mod:
-	case DW_OP_mul:
-	case DW_OP_or:
-	case DW_OP_plus:
-	case DW_OP_shl:
-	case DW_OP_shr:
-	case DW_OP_shra:
-	case DW_OP_xor:
-	case DW_OP_le:
-	case DW_OP_ge:
-	case DW_OP_eq:
-	case DW_OP_lt:
-	case DW_OP_gt:
-	case DW_OP_ne:
-	  {
-	    /* Binary operations.  */
-	    struct value *first, *second;
-
-	    second = fetch (0);
-	    pop ();
-
-	    first = fetch (0);
-	    pop ();
-
-	    if (! base_types_equal_p (value_type (first), value_type (second)))
-	      error (_("Incompatible types on DWARF stack"));
-
-	    switch (op)
-	      {
-	      case DW_OP_and:
-		dwarf_require_integral (value_type (first));
-		dwarf_require_integral (value_type (second));
-		result_val = value_binop (first, second, BINOP_BITWISE_AND);
-		break;
-	      case DW_OP_div:
-		result_val = value_binop (first, second, BINOP_DIV);
-                break;
-	      case DW_OP_minus:
-		result_val = value_binop (first, second, BINOP_SUB);
-		break;
-	      case DW_OP_mod:
-		{
-		  int cast_back = 0;
-		  struct type *orig_type = value_type (first);
-
-		  /* We have to special-case "old-style" untyped values
-		     -- these must have mod computed using unsigned
-		     math.  */
-		  if (orig_type == address_type)
-		    {
-		      struct type *utype
-			= get_unsigned_type (this->gdbarch, orig_type);
-
-		      cast_back = 1;
-		      first = value_cast (utype, first);
-		      second = value_cast (utype, second);
-		    }
-		  /* Note that value_binop doesn't handle float or
-		     decimal float here.  This seems unimportant.  */
-		  result_val = value_binop (first, second, BINOP_MOD);
-		  if (cast_back)
-		    result_val = value_cast (orig_type, result_val);
-		}
-		break;
-	      case DW_OP_mul:
-		result_val = value_binop (first, second, BINOP_MUL);
-		break;
-	      case DW_OP_or:
-		dwarf_require_integral (value_type (first));
-		dwarf_require_integral (value_type (second));
-		result_val = value_binop (first, second, BINOP_BITWISE_IOR);
-		break;
-	      case DW_OP_plus:
-		result_val = value_binop (first, second, BINOP_ADD);
-		break;
-	      case DW_OP_shl:
-		dwarf_require_integral (value_type (first));
-		dwarf_require_integral (value_type (second));
-		result_val = value_binop (first, second, BINOP_LSH);
-		break;
-	      case DW_OP_shr:
-		dwarf_require_integral (value_type (first));
-		dwarf_require_integral (value_type (second));
-		if (!TYPE_UNSIGNED (value_type (first)))
-		  {
-		    struct type *utype
-		      = get_unsigned_type (this->gdbarch, value_type (first));
-
-		    first = value_cast (utype, first);
-		  }
-
-		result_val = value_binop (first, second, BINOP_RSH);
-		/* Make sure we wind up with the same type we started
-		   with.  */
-		if (value_type (result_val) != value_type (second))
-		  result_val = value_cast (value_type (second), result_val);
-                break;
-	      case DW_OP_shra:
-		dwarf_require_integral (value_type (first));
-		dwarf_require_integral (value_type (second));
-		if (TYPE_UNSIGNED (value_type (first)))
-		  {
-		    struct type *stype
-		      = get_signed_type (this->gdbarch, value_type (first));
-
-		    first = value_cast (stype, first);
-		  }
-
-		result_val = value_binop (first, second, BINOP_RSH);
-		/* Make sure we wind up with the same type we started
-		   with.  */
-		if (value_type (result_val) != value_type (second))
-		  result_val = value_cast (value_type (second), result_val);
-		break;
-	      case DW_OP_xor:
-		dwarf_require_integral (value_type (first));
-		dwarf_require_integral (value_type (second));
-		result_val = value_binop (first, second, BINOP_BITWISE_XOR);
-		break;
-	      case DW_OP_le:
-		/* A <= B is !(B < A).  */
-		result = ! value_less (second, first);
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      case DW_OP_ge:
-		/* A >= B is !(A < B).  */
-		result = ! value_less (first, second);
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      case DW_OP_eq:
-		result = value_equal (first, second);
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      case DW_OP_lt:
-		result = value_less (first, second);
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      case DW_OP_gt:
-		/* A > B is B < A.  */
-		result = value_less (second, first);
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      case DW_OP_ne:
-		result = ! value_equal (first, second);
-		result_val = value_from_ulongest (address_type, result);
-		break;
-	      default:
-		internal_error (__FILE__, __LINE__,
-				_("Can't be reached."));
-	      }
-	  }
-	  break;
-
-	case DW_OP_call_frame_cfa:
-	  result = this->get_frame_cfa ();
-	  result_val = value_from_ulongest (address_type, result);
-	  in_stack_memory = true;
-	  break;
-
-	case DW_OP_GNU_push_tls_address:
-	case DW_OP_form_tls_address:
-	  /* Variable is at a constant offset in the thread-local
-	  storage block into the objfile for the current thread and
-	  the dynamic linker module containing this expression.  Here
-	  we return returns the offset from that base.  The top of the
-	  stack has the offset from the beginning of the thread
-	  control block at which the variable is located.  Nothing
-	  should follow this operator, so the top of stack would be
-	  returned.  */
-	  result = value_as_long (fetch (0));
-	  pop ();
-	  result = this->get_tls_address (result);
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-
-	case DW_OP_skip:
-	  offset = extract_signed_integer (op_ptr, 2, byte_order);
-	  op_ptr += 2;
-	  op_ptr += offset;
-	  goto no_push;
-
-	case DW_OP_bra:
-	  {
-	    struct value *val;
-
-	    offset = extract_signed_integer (op_ptr, 2, byte_order);
-	    op_ptr += 2;
-	    val = fetch (0);
-	    dwarf_require_integral (value_type (val));
-	    if (value_as_long (val) != 0)
-	      op_ptr += offset;
-	    pop ();
-	  }
-	  goto no_push;
-
-	case DW_OP_nop:
-	  goto no_push;
-
-        case DW_OP_piece:
-          {
-            uint64_t size;
-
-            /* Record the piece.  */
-            op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
-	    add_piece (8 * size, 0);
-
-            /* Pop off the address/regnum, and reset the location
-	       type.  */
-	    if (this->location != DWARF_VALUE_LITERAL
-		&& this->location != DWARF_VALUE_OPTIMIZED_OUT)
-	      pop ();
-            this->location = DWARF_VALUE_MEMORY;
-          }
-          goto no_push;
-
-	case DW_OP_bit_piece:
-	  {
-	    uint64_t size, uleb_offset;
-
-            /* Record the piece.  */
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uleb_offset);
-	    add_piece (size, uleb_offset);
-
-            /* Pop off the address/regnum, and reset the location
-	       type.  */
-	    if (this->location != DWARF_VALUE_LITERAL
-		&& this->location != DWARF_VALUE_OPTIMIZED_OUT)
-	      pop ();
-            this->location = DWARF_VALUE_MEMORY;
-	  }
-	  goto no_push;
-
-	case DW_OP_GNU_uninit:
-	  if (op_ptr != op_end)
-	    error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always "
-		   "be the very last op."));
-
-	  this->initialized = 0;
-	  goto no_push;
-
-	case DW_OP_call2:
-	  {
-	    cu_offset cu_off
-	      = (cu_offset) extract_unsigned_integer (op_ptr, 2, byte_order);
-	    op_ptr += 2;
-	    this->dwarf_call (cu_off);
-	  }
-	  goto no_push;
-
-	case DW_OP_call4:
-	  {
-	    cu_offset cu_off
-	      = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order);
-	    op_ptr += 4;
-	    this->dwarf_call (cu_off);
-	  }
-	  goto no_push;
-
-	case DW_OP_GNU_variable_value:
-	  {
-	    sect_offset sect_off
-	      = (sect_offset) extract_unsigned_integer (op_ptr,
-	                                                this->ref_addr_size,
-							byte_order);
-	    op_ptr += this->ref_addr_size;
-	    result_val = this->dwarf_variable_value (sect_off);
-	  }
-	  break;
-	
-	case DW_OP_entry_value:
-	case DW_OP_GNU_entry_value:
-	  {
-	    uint64_t len;
-	    CORE_ADDR deref_size;
-	    union call_site_parameter_u kind_u;
-
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
-	    if (op_ptr + len > op_end)
-	      error (_("DW_OP_entry_value: too few bytes available."));
-
-	    kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len);
-	    if (kind_u.dwarf_reg != -1)
-	      {
-		op_ptr += len;
-		this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
-						  kind_u,
-						  -1 /* deref_size */);
-		goto no_push;
-	      }
-
-	    kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr,
-							       op_ptr + len,
-							       &deref_size);
-	    if (kind_u.dwarf_reg != -1)
-	      {
-		if (deref_size == -1)
-		  deref_size = this->addr_size;
-		op_ptr += len;
-		this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG,
-						  kind_u, deref_size);
-		goto no_push;
-	      }
-
-	    error (_("DWARF-2 expression error: DW_OP_entry_value is "
-		     "supported only for single DW_OP_reg* "
-		     "or for DW_OP_breg*(0)+DW_OP_deref*"));
-	  }
-
-	case DW_OP_GNU_parameter_ref:
-	  {
-	    union call_site_parameter_u kind_u;
-
-	    kind_u.param_cu_off
-	      = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order);
-	    op_ptr += 4;
-	    this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_PARAM_OFFSET,
-					      kind_u,
-					      -1 /* deref_size */);
-	  }
-	  goto no_push;
-
-	case DW_OP_const_type:
-	case DW_OP_GNU_const_type:
-	  {
-	    int n;
-	    const gdb_byte *data;
-	    struct type *type;
-
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	    cu_offset type_die_cu_off = (cu_offset) uoffset;
-
-	    n = *op_ptr++;
-	    data = op_ptr;
-	    op_ptr += n;
-
-	    type = get_base_type (type_die_cu_off, n);
-	    result_val = value_from_contents (type, data);
-	  }
-	  break;
-
-	case DW_OP_regval_type:
-	case DW_OP_GNU_regval_type:
-	  {
-	    struct type *type;
-
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	    cu_offset type_die_cu_off = (cu_offset) uoffset;
-
-	    type = get_base_type (type_die_cu_off, 0);
-	    result_val = this->get_reg_value (type, reg);
-	  }
-	  break;
-
-	case DW_OP_convert:
-	case DW_OP_GNU_convert:
-	case DW_OP_reinterpret:
-	case DW_OP_GNU_reinterpret:
-	  {
-	    struct type *type;
-
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	    cu_offset type_die_cu_off = (cu_offset) uoffset;
-
-	    if (to_underlying (type_die_cu_off) == 0)
-	      type = address_type;
-	    else
-	      type = get_base_type (type_die_cu_off, 0);
-
-	    result_val = fetch (0);
-	    pop ();
-
-	    if (op == DW_OP_convert || op == DW_OP_GNU_convert)
-	      result_val = value_cast (type, result_val);
-	    else if (type == value_type (result_val))
-	      {
-		/* Nothing.  */
-	      }
-	    else if (TYPE_LENGTH (type)
-		     != TYPE_LENGTH (value_type (result_val)))
-	      error (_("DW_OP_reinterpret has wrong size"));
-	    else
-	      result_val
-		= value_from_contents (type,
-				       value_contents_all (result_val));
-	  }
-	  break;
-
-	case DW_OP_push_object_address:
-	  /* Return the address of the object we are currently observing.  */
-	  result = this->get_object_address ();
-	  result_val = value_from_ulongest (address_type, result);
-	  break;
-
-	default:
-	  error (_("Unhandled dwarf expression opcode 0x%x"), op);
-	}
-
-      /* Most things push a result value.  */
-      gdb_assert (result_val != NULL);
-      push (result_val, in_stack_memory);
-    no_push:
-      ;
-    }
-
-  /* To simplify our main caller, if the result is an implicit
-     pointer, then make a pieced value.  This is ok because we can't
-     have implicit pointers in contexts where pieces are invalid.  */
-  if (this->location == DWARF_VALUE_IMPLICIT_POINTER)
-    add_piece (8 * this->addr_size, 0);
-
-  this->recursion_depth--;
-  gdb_assert (this->recursion_depth >= 0);
-}
-
-void
-_initialize_dwarf2expr (void)
-{
-  dwarf_arch_cookie
-    = gdbarch_data_register_post_init (dwarf_gdbarch_types_init);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2expr.h ./gdb/dwarf2expr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2expr.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2expr.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,325 +0,0 @@
-/* DWARF 2 Expression Evaluator.
-
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
-
-   Contributed by Daniel Berlin <dan@dberlin.org>.
-
-   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/>.  */
-
-#if !defined (DWARF2EXPR_H)
-#define DWARF2EXPR_H
-
-#include "leb128.h"
-#include "gdbtypes.h"
-
-/* The location of a value.  */
-enum dwarf_value_location
-{
-  /* The piece is in memory.
-     The value on the dwarf stack is its address.  */
-  DWARF_VALUE_MEMORY,
-
-  /* The piece is in a register.
-     The value on the dwarf stack is the register number.  */
-  DWARF_VALUE_REGISTER,
-
-  /* The piece is on the dwarf stack.  */
-  DWARF_VALUE_STACK,
-
-  /* The piece is a literal.  */
-  DWARF_VALUE_LITERAL,
-
-  /* The piece was optimized out.  */
-  DWARF_VALUE_OPTIMIZED_OUT,
-
-  /* The piece is an implicit pointer.  */
-  DWARF_VALUE_IMPLICIT_POINTER
-};
-
-/* A piece of an object, as recorded by DW_OP_piece or DW_OP_bit_piece.  */
-struct dwarf_expr_piece
-{
-  enum dwarf_value_location location;
-
-  union
-  {
-    struct
-    {
-      /* This piece's address, for DWARF_VALUE_MEMORY pieces.  */
-      CORE_ADDR addr;
-      /* Non-zero if the piece is known to be in memory and on
-	 the program's stack.  */
-      bool in_stack_memory;
-    } mem;
-
-    /* The piece's register number, for DWARF_VALUE_REGISTER pieces.  */
-    int regno;
-
-    /* The piece's literal value, for DWARF_VALUE_STACK pieces.  */
-    struct value *value;
-
-    struct
-    {
-      /* A pointer to the data making up this piece,
-	 for DWARF_VALUE_LITERAL pieces.  */
-      const gdb_byte *data;
-      /* The length of the available data.  */
-      ULONGEST length;
-    } literal;
-
-    /* Used for DWARF_VALUE_IMPLICIT_POINTER.  */
-    struct
-    {
-      /* The referent DIE from DW_OP_implicit_pointer.  */
-      sect_offset die_sect_off;
-      /* The byte offset into the resulting data.  */
-      LONGEST offset;
-    } ptr;
-  } v;
-
-  /* The length of the piece, in bits.  */
-  ULONGEST size;
-  /* The piece offset, in bits.  */
-  ULONGEST offset;
-};
-
-/* The dwarf expression stack.  */
-
-struct dwarf_stack_value
-{
-  dwarf_stack_value (struct value *value_, int in_stack_memory_)
-  : value (value_), in_stack_memory (in_stack_memory_)
-  {}
-
-  struct value *value;
-
-  /* True if the piece is in memory and is known to be on the program's stack.
-     It is always ok to set this to zero.  This is used, for example, to
-     optimize memory access from the target.  It can vastly speed up backtraces
-     on long latency connections when "set stack-cache on".  */
-  bool in_stack_memory;
-};
-
-/* The expression evaluator works with a dwarf_expr_context, describing
-   its current state and its callbacks.  */
-struct dwarf_expr_context
-{
-  dwarf_expr_context ();
-  virtual ~dwarf_expr_context () = default;
-
-  void push_address (CORE_ADDR value, bool in_stack_memory);
-  void eval (const gdb_byte *addr, size_t len);
-  struct value *fetch (int n);
-  CORE_ADDR fetch_address (int n);
-  bool fetch_in_stack_memory (int n);
-
-  /* The stack of values.  */
-  std::vector<dwarf_stack_value> stack;
-
-  /* Target architecture to use for address operations.  */
-  struct gdbarch *gdbarch;
-
-  /* Target address size in bytes.  */
-  int addr_size;
-
-  /* DW_FORM_ref_addr size in bytes.  If -1 DWARF is executed from a frame
-     context and operations depending on DW_FORM_ref_addr are not allowed.  */
-  int ref_addr_size;
-
-  /* Offset used to relocate DW_OP_addr, DW_OP_addrx, and
-     DW_OP_GNU_addr_index arguments.  */
-  CORE_ADDR offset;
-
-  /* The current depth of dwarf expression recursion, via DW_OP_call*,
-     DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum
-     depth we'll tolerate before raising an error.  */
-  int recursion_depth, max_recursion_depth;
-
-  /* Location of the value.  */
-  enum dwarf_value_location location;
-
-  /* For DWARF_VALUE_LITERAL, the current literal value's length and
-     data.  For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the
-     target DIE of sect_offset kind.  */
-  ULONGEST len;
-  const gdb_byte *data;
-
-  /* Initialization status of variable: Non-zero if variable has been
-     initialized; zero otherwise.  */
-  int initialized;
-
-  /* A vector of pieces.
-
-     Each time DW_OP_piece is executed, we add a new element to the
-     end of this array, recording the current top of the stack, the
-     current location, and the size given as the operand to
-     DW_OP_piece.  We then pop the top value from the stack, reset the
-     location, and resume evaluation.
-
-     The Dwarf spec doesn't say whether DW_OP_piece pops the top value
-     from the stack.  We do, ensuring that clients of this interface
-     expecting to see a value left on the top of the stack (say, code
-     evaluating frame base expressions or CFA's specified with
-     DW_CFA_def_cfa_expression) will get an error if the expression
-     actually marks all the values it computes as pieces.
-
-     If an expression never uses DW_OP_piece, num_pieces will be zero.
-     (It would be nice to present these cases as expressions yielding
-     a single piece, so that callers need not distinguish between the
-     no-DW_OP_piece and one-DW_OP_piece cases.  But expressions with
-     no DW_OP_piece operations have no value to place in a piece's
-     'size' field; the size comes from the surrounding data.  So the
-     two cases need to be handled separately.)  */
-  std::vector<dwarf_expr_piece> pieces;
-
-  /* Return the value of register number REGNUM (a DWARF register number),
-     read as an address.  */
-  virtual CORE_ADDR read_addr_from_reg (int regnum) = 0;
-
-  /* Return a value of type TYPE, stored in register number REGNUM
-     of the frame associated to the given BATON.
-
-     REGNUM is a DWARF register number.  */
-  virtual struct value *get_reg_value (struct type *type, int regnum) = 0;
-
-  /* Read LENGTH bytes at ADDR into BUF.  */
-  virtual void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) = 0;
-
-  /* Return the location expression for the frame base attribute, in
-     START and LENGTH.  The result must be live until the current
-     expression evaluation is complete.  */
-  virtual void get_frame_base (const gdb_byte **start, size_t *length) = 0;
-
-  /* Return the CFA for the frame.  */
-  virtual CORE_ADDR get_frame_cfa () = 0;
-
-  /* Return the PC for the frame.  */
-  virtual CORE_ADDR get_frame_pc ()
-  {
-    error (_("%s is invalid in this context"), "DW_OP_implicit_pointer");
-  }
-
-  /* Return the thread-local storage address for
-     DW_OP_GNU_push_tls_address or DW_OP_form_tls_address.  */
-  virtual CORE_ADDR get_tls_address (CORE_ADDR offset) = 0;
-
-  /* Execute DW_AT_location expression for the DWARF expression
-     subroutine in the DIE at DIE_CU_OFF in the CU.  Do not touch
-     STACK while it being passed to and returned from the called DWARF
-     subroutine.  */
-  virtual void dwarf_call (cu_offset die_cu_off) = 0;
-
-  /* Execute "variable value" operation on the DIE at SECT_OFF.  */
-  virtual struct value *dwarf_variable_value (sect_offset sect_off) = 0;
-
-  /* Return the base type given by the indicated DIE at DIE_CU_OFF.
-     This can throw an exception if the DIE is invalid or does not
-     represent a base type.  SIZE is non-zero if this function should
-     verify that the resulting type has the correct size.  */
-  virtual struct type *get_base_type (cu_offset die_cu_off, int size)
-  {
-    /* Anything will do.  */
-    return builtin_type (this->gdbarch)->builtin_int;
-  }
-
-  /* Push on DWARF stack an entry evaluated for DW_TAG_call_site's
-     parameter matching KIND and KIND_U at the caller of specified BATON.
-     If DEREF_SIZE is not -1 then use DW_AT_call_data_value instead of
-     DW_AT_call_value.  */
-  virtual void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
-					   union call_site_parameter_u kind_u,
-					   int deref_size) = 0;
-
-  /* Return the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index.
-     This can throw an exception if the index is out of range.  */
-  virtual CORE_ADDR get_addr_index (unsigned int index) = 0;
-
-  /* Return the `object address' for DW_OP_push_object_address.  */
-  virtual CORE_ADDR get_object_address () = 0;
-
-private:
-
-  struct type *address_type () const;
-  void push (struct value *value, bool in_stack_memory);
-  bool stack_empty_p () const;
-  void add_piece (ULONGEST size, ULONGEST offset);
-  void execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end);
-  void pop ();
-};
-
-void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *,
-				     const char *);
-
-int dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end);
-
-int dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf,
-				    const gdb_byte *buf_end,
-				    CORE_ADDR *deref_size_return);
-
-int dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
-			      CORE_ADDR *fb_offset_return);
-
-int dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
-			      const gdb_byte *buf_end,
-			      CORE_ADDR *sp_offset_return);
-
-/* Wrappers around the leb128 reader routines to simplify them for our
-   purposes.  */
-
-static inline const gdb_byte *
-gdb_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
-		  uint64_t *r)
-{
-  size_t bytes_read = read_uleb128_to_uint64 (buf, buf_end, r);
-
-  if (bytes_read == 0)
-    return NULL;
-  return buf + bytes_read;
-}
-
-static inline const gdb_byte *
-gdb_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
-		  int64_t *r)
-{
-  size_t bytes_read = read_sleb128_to_int64 (buf, buf_end, r);
-
-  if (bytes_read == 0)
-    return NULL;
-  return buf + bytes_read;
-}
-
-static inline const gdb_byte *
-gdb_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
-{
-  size_t bytes_read = skip_leb128 (buf, buf_end);
-
-  if (bytes_read == 0)
-    return NULL;
-  return buf + bytes_read;
-}
-
-extern const gdb_byte *safe_read_uleb128 (const gdb_byte *buf,
-					  const gdb_byte *buf_end,
-					  uint64_t *r);
-
-extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf,
-					  const gdb_byte *buf_end,
-					  int64_t *r);
-
-extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf,
-					 const gdb_byte *buf_end);
-
-#endif /* dwarf2expr.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame.c ./gdb/dwarf2-frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2-frame.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,2379 +0,0 @@
-/* Frame unwinder for frames with DWARF Call Frame Information.
-
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
-
-   Contributed by Mark Kettenis.
-
-   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 "dwarf2expr.h"
-#include "dwarf2.h"
-#include "frame.h"
-#include "frame-base.h"
-#include "frame-unwind.h"
-#include "gdbcore.h"
-#include "gdbtypes.h"
-#include "symtab.h"
-#include "objfiles.h"
-#include "regcache.h"
-#include "value.h"
-#include "record.h"
-
-#include "complaints.h"
-#include "dwarf2-frame.h"
-#include "dwarf2read.h"
-#include "ax.h"
-#include "dwarf2loc.h"
-#include "dwarf2-frame-tailcall.h"
-#include "gdbsupport/gdb_binary_search.h"
-#if GDB_SELF_TEST
-#include "gdbsupport/selftest.h"
-#include "selftest-arch.h"
-#endif
-#include <unordered_map>
-
-#include <algorithm>
-
-struct comp_unit;
-
-/* Call Frame Information (CFI).  */
-
-/* Common Information Entry (CIE).  */
-
-struct dwarf2_cie
-{
-  /* Computation Unit for this CIE.  */
-  struct comp_unit *unit;
-
-  /* Offset into the .debug_frame section where this CIE was found.
-     Used to identify this CIE.  */
-  ULONGEST cie_pointer;
-
-  /* Constant that is factored out of all advance location
-     instructions.  */
-  ULONGEST code_alignment_factor;
-
-  /* Constants that is factored out of all offset instructions.  */
-  LONGEST data_alignment_factor;
-
-  /* Return address column.  */
-  ULONGEST return_address_register;
-
-  /* Instruction sequence to initialize a register set.  */
-  const gdb_byte *initial_instructions;
-  const gdb_byte *end;
-
-  /* Saved augmentation, in case it's needed later.  */
-  char *augmentation;
-
-  /* Encoding of addresses.  */
-  gdb_byte encoding;
-
-  /* Target address size in bytes.  */
-  int addr_size;
-
-  /* Target pointer size in bytes.  */
-  int ptr_size;
-
-  /* True if a 'z' augmentation existed.  */
-  unsigned char saw_z_augmentation;
-
-  /* True if an 'S' augmentation existed.  */
-  unsigned char signal_frame;
-
-  /* The version recorded in the CIE.  */
-  unsigned char version;
-
-  /* The segment size.  */
-  unsigned char segment_size;
-};
-
-/* The CIE table is used to find CIEs during parsing, but then
-   discarded.  It maps from the CIE's offset to the CIE.  */
-typedef std::unordered_map<ULONGEST, dwarf2_cie *> dwarf2_cie_table;
-
-/* Frame Description Entry (FDE).  */
-
-struct dwarf2_fde
-{
-  /* CIE for this FDE.  */
-  struct dwarf2_cie *cie;
-
-  /* First location associated with this FDE.  */
-  CORE_ADDR initial_location;
-
-  /* Number of bytes of program instructions described by this FDE.  */
-  CORE_ADDR address_range;
-
-  /* Instruction sequence.  */
-  const gdb_byte *instructions;
-  const gdb_byte *end;
-
-  /* True if this FDE is read from a .eh_frame instead of a .debug_frame
-     section.  */
-  unsigned char eh_frame_p;
-};
-
-struct dwarf2_fde_table
-{
-  int num_entries;
-  struct dwarf2_fde **entries;
-};
-
-/* A minimal decoding of DWARF2 compilation units.  We only decode
-   what's needed to get to the call frame information.  */
-
-struct comp_unit
-{
-  /* Keep the bfd convenient.  */
-  bfd *abfd;
-
-  struct objfile *objfile;
-
-  /* Pointer to the .debug_frame section loaded into memory.  */
-  const gdb_byte *dwarf_frame_buffer;
-
-  /* Length of the loaded .debug_frame section.  */
-  bfd_size_type dwarf_frame_size;
-
-  /* Pointer to the .debug_frame section.  */
-  asection *dwarf_frame_section;
-
-  /* Base for DW_EH_PE_datarel encodings.  */
-  bfd_vma dbase;
-
-  /* Base for DW_EH_PE_textrel encodings.  */
-  bfd_vma tbase;
-};
-
-static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc,
-						 CORE_ADDR *out_offset);
-
-static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum,
-				       int eh_frame_p);
-
-static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
-				     int ptr_len, const gdb_byte *buf,
-				     unsigned int *bytes_read_ptr,
-				     CORE_ADDR func_base);
-
-
-/* See dwarf2-frame.h.  */
-bool dwarf2_frame_unwinders_enabled_p = true;
-
-/* Store the length the expression for the CFA in the `cfa_reg' field,
-   which is unused in that case.  */
-#define cfa_exp_len cfa_reg
-
-dwarf2_frame_state::dwarf2_frame_state (CORE_ADDR pc_, struct dwarf2_cie *cie)
-  : pc (pc_), data_align (cie->data_alignment_factor),
-    code_align (cie->code_alignment_factor),
-    retaddr_column (cie->return_address_register)
-{
-}
-
-
-/* Helper functions for execute_stack_op.  */
-
-static CORE_ADDR
-read_addr_from_reg (struct frame_info *this_frame, int reg)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg);
-
-  return address_from_register (regnum, this_frame);
-}
-
-/* Execute the required actions for both the DW_CFA_restore and
-DW_CFA_restore_extended instructions.  */
-static void
-dwarf2_restore_rule (struct gdbarch *gdbarch, ULONGEST reg_num,
-		     struct dwarf2_frame_state *fs, int eh_frame_p)
-{
-  ULONGEST reg;
-
-  reg = dwarf2_frame_adjust_regnum (gdbarch, reg_num, eh_frame_p);
-  fs->regs.alloc_regs (reg + 1);
-
-  /* Check if this register was explicitly initialized in the
-  CIE initial instructions.  If not, default the rule to
-  UNSPECIFIED.  */
-  if (reg < fs->initial.reg.size ())
-    fs->regs.reg[reg] = fs->initial.reg[reg];
-  else
-    fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED;
-
-  if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED)
-    {
-      int regnum = dwarf_reg_to_regnum (gdbarch, reg);
-
-      complaint (_("\
-incomplete CFI data; DW_CFA_restore unspecified\n\
-register %s (#%d) at %s"),
-		 gdbarch_register_name (gdbarch, regnum), regnum,
-		 paddress (gdbarch, fs->pc));
-    }
-}
-
-class dwarf_expr_executor : public dwarf_expr_context
-{
- public:
-
-  struct frame_info *this_frame;
-
-  CORE_ADDR read_addr_from_reg (int reg) override
-  {
-    return ::read_addr_from_reg (this_frame, reg);
-  }
-
-  struct value *get_reg_value (struct type *type, int reg) override
-  {
-    struct gdbarch *gdbarch = get_frame_arch (this_frame);
-    int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg);
-
-    return value_from_register (type, regnum, this_frame);
-  }
-
-  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
-  {
-    read_memory (addr, buf, len);
-  }
-
-  void get_frame_base (const gdb_byte **start, size_t *length) override
-  {
-    invalid ("DW_OP_fbreg");
-  }
-
-  void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
-				   union call_site_parameter_u kind_u,
-				   int deref_size) override
-  {
-    invalid ("DW_OP_entry_value");
-  }
-
-  CORE_ADDR get_object_address () override
-  {
-    invalid ("DW_OP_push_object_address");
-  }
-
-  CORE_ADDR get_frame_cfa () override
-  {
-    invalid ("DW_OP_call_frame_cfa");
-  }
-
-  CORE_ADDR get_tls_address (CORE_ADDR offset) override
-  {
-    invalid ("DW_OP_form_tls_address");
-  }
-
-  void dwarf_call (cu_offset die_offset) override
-  {
-    invalid ("DW_OP_call*");
-  }
-
-  struct value *dwarf_variable_value (sect_offset sect_off) override
-  {
-    invalid ("DW_OP_GNU_variable_value");
-  }
-
-  CORE_ADDR get_addr_index (unsigned int index) override
-  {
-    invalid ("DW_OP_addrx or DW_OP_GNU_addr_index");
-  }
-
- private:
-
-  void invalid (const char *op) ATTRIBUTE_NORETURN
-  {
-    error (_("%s is invalid in this context"), op);
-  }
-};
-
-static CORE_ADDR
-execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size,
-		  CORE_ADDR offset, struct frame_info *this_frame,
-		  CORE_ADDR initial, int initial_in_stack_memory)
-{
-  CORE_ADDR result;
-
-  dwarf_expr_executor ctx;
-  scoped_value_mark free_values;
-
-  ctx.this_frame = this_frame;
-  ctx.gdbarch = get_frame_arch (this_frame);
-  ctx.addr_size = addr_size;
-  ctx.ref_addr_size = -1;
-  ctx.offset = offset;
-
-  ctx.push_address (initial, initial_in_stack_memory);
-  ctx.eval (exp, len);
-
-  if (ctx.location == DWARF_VALUE_MEMORY)
-    result = ctx.fetch_address (0);
-  else if (ctx.location == DWARF_VALUE_REGISTER)
-    result = ctx.read_addr_from_reg (value_as_long (ctx.fetch (0)));
-  else
-    {
-      /* This is actually invalid DWARF, but if we ever do run across
-	 it somehow, we might as well support it.  So, instead, report
-	 it as unimplemented.  */
-      error (_("\
-Not implemented: computing unwound register using explicit value operator"));
-    }
-
-  return result;
-}
-
-
-/* Execute FDE program from INSN_PTR possibly up to INSN_END or up to inferior
-   PC.  Modify FS state accordingly.  Return current INSN_PTR where the
-   execution has stopped, one can resume it on the next call.  */
-
-static const gdb_byte *
-execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
-		     const gdb_byte *insn_end, struct gdbarch *gdbarch,
-		     CORE_ADDR pc, struct dwarf2_frame_state *fs)
-{
-  int eh_frame_p = fde->eh_frame_p;
-  unsigned int bytes_read;
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-
-  while (insn_ptr < insn_end && fs->pc <= pc)
-    {
-      gdb_byte insn = *insn_ptr++;
-      uint64_t utmp, reg;
-      int64_t offset;
-
-      if ((insn & 0xc0) == DW_CFA_advance_loc)
-	fs->pc += (insn & 0x3f) * fs->code_align;
-      else if ((insn & 0xc0) == DW_CFA_offset)
-	{
-	  reg = insn & 0x3f;
-	  reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	  insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	  offset = utmp * fs->data_align;
-	  fs->regs.alloc_regs (reg + 1);
-	  fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
-	  fs->regs.reg[reg].loc.offset = offset;
-	}
-      else if ((insn & 0xc0) == DW_CFA_restore)
-	{
-	  reg = insn & 0x3f;
-	  dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
-	}
-      else
-	{
-	  switch (insn)
-	    {
-	    case DW_CFA_set_loc:
-	      fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding,
-					   fde->cie->ptr_size, insn_ptr,
-					   &bytes_read, fde->initial_location);
-	      /* Apply the objfile offset for relocatable objects.  */
-	      fs->pc += ANOFFSET (fde->cie->unit->objfile->section_offsets,
-				  SECT_OFF_TEXT (fde->cie->unit->objfile));
-	      insn_ptr += bytes_read;
-	      break;
-
-	    case DW_CFA_advance_loc1:
-	      utmp = extract_unsigned_integer (insn_ptr, 1, byte_order);
-	      fs->pc += utmp * fs->code_align;
-	      insn_ptr++;
-	      break;
-	    case DW_CFA_advance_loc2:
-	      utmp = extract_unsigned_integer (insn_ptr, 2, byte_order);
-	      fs->pc += utmp * fs->code_align;
-	      insn_ptr += 2;
-	      break;
-	    case DW_CFA_advance_loc4:
-	      utmp = extract_unsigned_integer (insn_ptr, 4, byte_order);
-	      fs->pc += utmp * fs->code_align;
-	      insn_ptr += 4;
-	      break;
-
-	    case DW_CFA_offset_extended:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      offset = utmp * fs->data_align;
-	      fs->regs.alloc_regs (reg + 1);
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
-	      fs->regs.reg[reg].loc.offset = offset;
-	      break;
-
-	    case DW_CFA_restore_extended:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
-	      break;
-
-	    case DW_CFA_undefined:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      fs->regs.alloc_regs (reg + 1);
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
-	      break;
-
-	    case DW_CFA_same_value:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      fs->regs.alloc_regs (reg + 1);
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
-	      break;
-
-	    case DW_CFA_register:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p);
-	      fs->regs.alloc_regs (reg + 1);
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
-	      fs->regs.reg[reg].loc.reg = utmp;
-	      break;
-
-	    case DW_CFA_remember_state:
-	      {
-		struct dwarf2_frame_state_reg_info *new_rs;
-
-		new_rs = new dwarf2_frame_state_reg_info (fs->regs);
-		fs->regs.prev = new_rs;
-	      }
-	      break;
-
-	    case DW_CFA_restore_state:
-	      {
-		struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev;
-
-		if (old_rs == NULL)
-		  {
-		    complaint (_("\
-bad CFI data; mismatched DW_CFA_restore_state at %s"),
-			       paddress (gdbarch, fs->pc));
-		  }
-		else
-		  fs->regs = std::move (*old_rs);
-	      }
-	      break;
-
-	    case DW_CFA_def_cfa:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      fs->regs.cfa_reg = reg;
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-
-	      if (fs->armcc_cfa_offsets_sf)
-		utmp *= fs->data_align;
-
-	      fs->regs.cfa_offset = utmp;
-	      fs->regs.cfa_how = CFA_REG_OFFSET;
-	      break;
-
-	    case DW_CFA_def_cfa_register:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg,
-                                                             eh_frame_p);
-	      fs->regs.cfa_how = CFA_REG_OFFSET;
-	      break;
-
-	    case DW_CFA_def_cfa_offset:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-
-	      if (fs->armcc_cfa_offsets_sf)
-		utmp *= fs->data_align;
-
-	      fs->regs.cfa_offset = utmp;
-	      /* cfa_how deliberately not set.  */
-	      break;
-
-	    case DW_CFA_nop:
-	      break;
-
-	    case DW_CFA_def_cfa_expression:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      fs->regs.cfa_exp_len = utmp;
-	      fs->regs.cfa_exp = insn_ptr;
-	      fs->regs.cfa_how = CFA_EXP;
-	      insn_ptr += fs->regs.cfa_exp_len;
-	      break;
-
-	    case DW_CFA_expression:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      fs->regs.alloc_regs (reg + 1);
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      fs->regs.reg[reg].loc.exp.start = insn_ptr;
-	      fs->regs.reg[reg].loc.exp.len = utmp;
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP;
-	      insn_ptr += utmp;
-	      break;
-
-	    case DW_CFA_offset_extended_sf:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
-	      offset *= fs->data_align;
-	      fs->regs.alloc_regs (reg + 1);
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
-	      fs->regs.reg[reg].loc.offset = offset;
-	      break;
-
-	    case DW_CFA_val_offset:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      fs->regs.alloc_regs (reg + 1);
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      offset = utmp * fs->data_align;
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
-	      fs->regs.reg[reg].loc.offset = offset;
-	      break;
-
-	    case DW_CFA_val_offset_sf:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      fs->regs.alloc_regs (reg + 1);
-	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
-	      offset *= fs->data_align;
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
-	      fs->regs.reg[reg].loc.offset = offset;
-	      break;
-
-	    case DW_CFA_val_expression:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      fs->regs.alloc_regs (reg + 1);
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      fs->regs.reg[reg].loc.exp.start = insn_ptr;
-	      fs->regs.reg[reg].loc.exp.len = utmp;
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
-	      insn_ptr += utmp;
-	      break;
-
-	    case DW_CFA_def_cfa_sf:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg,
-                                                             eh_frame_p);
-	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
-	      fs->regs.cfa_offset = offset * fs->data_align;
-	      fs->regs.cfa_how = CFA_REG_OFFSET;
-	      break;
-
-	    case DW_CFA_def_cfa_offset_sf:
-	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
-	      fs->regs.cfa_offset = offset * fs->data_align;
-	      /* cfa_how deliberately not set.  */
-	      break;
-
-	    case DW_CFA_GNU_args_size:
-	      /* Ignored.  */
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      break;
-
-	    case DW_CFA_GNU_negative_offset_extended:
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
-	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
-	      offset = utmp * fs->data_align;
-	      fs->regs.alloc_regs (reg + 1);
-	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
-	      fs->regs.reg[reg].loc.offset = -offset;
-	      break;
-
-	    default:
-	      if (insn >= DW_CFA_lo_user && insn <= DW_CFA_hi_user)
-		{
-		  /* Handle vendor-specific CFI for different architectures.  */
-		  if (!gdbarch_execute_dwarf_cfa_vendor_op (gdbarch, insn, fs))
-		    error (_("Call Frame Instruction op %d in vendor extension "
-			     "space is not handled on this architecture."),
-			   insn);
-		}
-	      else
-		internal_error (__FILE__, __LINE__,
-				_("Unknown CFI encountered."));
-	    }
-	}
-    }
-
-  if (fs->initial.reg.empty ())
-    {
-      /* Don't allow remember/restore between CIE and FDE programs.  */
-      delete fs->regs.prev;
-      fs->regs.prev = NULL;
-    }
-
-  return insn_ptr;
-}
-
-#if GDB_SELF_TEST
-
-namespace selftests {
-
-/* Unit test to function execute_cfa_program.  */
-
-static void
-execute_cfa_program_test (struct gdbarch *gdbarch)
-{
-  struct dwarf2_fde fde;
-  struct dwarf2_cie cie;
-
-  memset (&fde, 0, sizeof fde);
-  memset (&cie, 0, sizeof cie);
-
-  cie.data_alignment_factor = -4;
-  cie.code_alignment_factor = 2;
-  fde.cie = &cie;
-
-  dwarf2_frame_state fs (0, fde.cie);
-
-  gdb_byte insns[] =
-    {
-      DW_CFA_def_cfa, 1, 4,  /* DW_CFA_def_cfa: r1 ofs 4 */
-      DW_CFA_offset | 0x2, 1,  /* DW_CFA_offset: r2 at cfa-4 */
-      DW_CFA_remember_state,
-      DW_CFA_restore_state,
-    };
-
-  const gdb_byte *insn_end = insns + sizeof (insns);
-  const gdb_byte *out = execute_cfa_program (&fde, insns, insn_end, gdbarch,
-					     0, &fs);
-
-  SELF_CHECK (out == insn_end);
-  SELF_CHECK (fs.pc == 0);
-
-  /* The instructions above only use r1 and r2, but the register numbers
-     used are adjusted by dwarf2_frame_adjust_regnum.  */
-  auto r1 = dwarf2_frame_adjust_regnum (gdbarch, 1, fde.eh_frame_p);
-  auto r2 = dwarf2_frame_adjust_regnum (gdbarch, 2, fde.eh_frame_p);
-
-  SELF_CHECK (fs.regs.reg.size () == (std::max (r1, r2) + 1));
-
-  SELF_CHECK (fs.regs.reg[r2].how == DWARF2_FRAME_REG_SAVED_OFFSET);
-  SELF_CHECK (fs.regs.reg[r2].loc.offset == -4);
-
-  for (auto i = 0; i < fs.regs.reg.size (); i++)
-    if (i != r2)
-      SELF_CHECK (fs.regs.reg[i].how == DWARF2_FRAME_REG_UNSPECIFIED);
-
-  SELF_CHECK (fs.regs.cfa_reg == 1);
-  SELF_CHECK (fs.regs.cfa_offset == 4);
-  SELF_CHECK (fs.regs.cfa_how == CFA_REG_OFFSET);
-  SELF_CHECK (fs.regs.cfa_exp == NULL);
-  SELF_CHECK (fs.regs.prev == NULL);
-}
-
-} // namespace selftests
-#endif /* GDB_SELF_TEST */
-
-
-
-/* Architecture-specific operations.  */
-
-/* Per-architecture data key.  */
-static struct gdbarch_data *dwarf2_frame_data;
-
-struct dwarf2_frame_ops
-{
-  /* Pre-initialize the register state REG for register REGNUM.  */
-  void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *,
-		    struct frame_info *);
-
-  /* Check whether the THIS_FRAME is a signal trampoline.  */
-  int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
-
-  /* Convert .eh_frame register number to DWARF register number, or
-     adjust .debug_frame register number.  */
-  int (*adjust_regnum) (struct gdbarch *, int, int);
-};
-
-/* Default architecture-specific register state initialization
-   function.  */
-
-static void
-dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum,
-			       struct dwarf2_frame_state_reg *reg,
-			       struct frame_info *this_frame)
-{
-  /* If we have a register that acts as a program counter, mark it as
-     a destination for the return address.  If we have a register that
-     serves as the stack pointer, arrange for it to be filled with the
-     call frame address (CFA).  The other registers are marked as
-     unspecified.
-
-     We copy the return address to the program counter, since many
-     parts in GDB assume that it is possible to get the return address
-     by unwinding the program counter register.  However, on ISA's
-     with a dedicated return address register, the CFI usually only
-     contains information to unwind that return address register.
-
-     The reason we're treating the stack pointer special here is
-     because in many cases GCC doesn't emit CFI for the stack pointer
-     and implicitly assumes that it is equal to the CFA.  This makes
-     some sense since the DWARF specification (version 3, draft 8,
-     p. 102) says that:
-
-     "Typically, the CFA is defined to be the value of the stack
-     pointer at the call site in the previous frame (which may be
-     different from its value on entry to the current frame)."
-
-     However, this isn't true for all platforms supported by GCC
-     (e.g. IBM S/390 and zSeries).  Those architectures should provide
-     their own architecture-specific initialization function.  */
-
-  if (regnum == gdbarch_pc_regnum (gdbarch))
-    reg->how = DWARF2_FRAME_REG_RA;
-  else if (regnum == gdbarch_sp_regnum (gdbarch))
-    reg->how = DWARF2_FRAME_REG_CFA;
-}
-
-/* Return a default for the architecture-specific operations.  */
-
-static void *
-dwarf2_frame_init (struct obstack *obstack)
-{
-  struct dwarf2_frame_ops *ops;
-  
-  ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops);
-  ops->init_reg = dwarf2_frame_default_init_reg;
-  return ops;
-}
-
-/* Set the architecture-specific register state initialization
-   function for GDBARCH to INIT_REG.  */
-
-void
-dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
-			   void (*init_reg) (struct gdbarch *, int,
-					     struct dwarf2_frame_state_reg *,
-					     struct frame_info *))
-{
-  struct dwarf2_frame_ops *ops
-    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
-
-  ops->init_reg = init_reg;
-}
-
-/* Pre-initialize the register state REG for register REGNUM.  */
-
-static void
-dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
-		       struct dwarf2_frame_state_reg *reg,
-		       struct frame_info *this_frame)
-{
-  struct dwarf2_frame_ops *ops
-    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
-
-  ops->init_reg (gdbarch, regnum, reg, this_frame);
-}
-
-/* Set the architecture-specific signal trampoline recognition
-   function for GDBARCH to SIGNAL_FRAME_P.  */
-
-void
-dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
-				 int (*signal_frame_p) (struct gdbarch *,
-							struct frame_info *))
-{
-  struct dwarf2_frame_ops *ops
-    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
-
-  ops->signal_frame_p = signal_frame_p;
-}
-
-/* Query the architecture-specific signal frame recognizer for
-   THIS_FRAME.  */
-
-static int
-dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
-			     struct frame_info *this_frame)
-{
-  struct dwarf2_frame_ops *ops
-    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
-
-  if (ops->signal_frame_p == NULL)
-    return 0;
-  return ops->signal_frame_p (gdbarch, this_frame);
-}
-
-/* Set the architecture-specific adjustment of .eh_frame and .debug_frame
-   register numbers.  */
-
-void
-dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
-				int (*adjust_regnum) (struct gdbarch *,
-						      int, int))
-{
-  struct dwarf2_frame_ops *ops
-    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
-
-  ops->adjust_regnum = adjust_regnum;
-}
-
-/* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame
-   register.  */
-
-static int
-dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch,
-			    int regnum, int eh_frame_p)
-{
-  struct dwarf2_frame_ops *ops
-    = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data);
-
-  if (ops->adjust_regnum == NULL)
-    return regnum;
-  return ops->adjust_regnum (gdbarch, regnum, eh_frame_p);
-}
-
-static void
-dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs,
-			  struct dwarf2_fde *fde)
-{
-  struct compunit_symtab *cust;
-
-  cust = find_pc_compunit_symtab (fs->pc);
-  if (cust == NULL)
-    return;
-
-  if (producer_is_realview (COMPUNIT_PRODUCER (cust)))
-    {
-      if (fde->cie->version == 1)
-	fs->armcc_cfa_offsets_sf = 1;
-
-      if (fde->cie->version == 1)
-	fs->armcc_cfa_offsets_reversed = 1;
-
-      /* The reversed offset problem is present in some compilers
-	 using DWARF3, but it was eventually fixed.  Check the ARM
-	 defined augmentations, which are in the format "armcc" followed
-	 by a list of one-character options.  The "+" option means
-	 this problem is fixed (no quirk needed).  If the armcc
-	 augmentation is missing, the quirk is needed.  */
-      if (fde->cie->version == 3
-	  && (!startswith (fde->cie->augmentation, "armcc")
-	      || strchr (fde->cie->augmentation + 5, '+') == NULL))
-	fs->armcc_cfa_offsets_reversed = 1;
-
-      return;
-    }
-}
-
-
-/* See dwarf2-frame.h.  */
-
-int
-dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc,
-		       struct dwarf2_per_cu_data *data,
-		       int *regnum_out, LONGEST *offset_out,
-		       CORE_ADDR *text_offset_out,
-		       const gdb_byte **cfa_start_out,
-		       const gdb_byte **cfa_end_out)
-{
-  struct dwarf2_fde *fde;
-  CORE_ADDR text_offset;
-  CORE_ADDR pc1 = pc;
-
-  /* Find the correct FDE.  */
-  fde = dwarf2_frame_find_fde (&pc1, &text_offset);
-  if (fde == NULL)
-    error (_("Could not compute CFA; needed to translate this expression"));
-
-  dwarf2_frame_state fs (pc1, fde->cie);
-
-  /* Check for "quirks" - known bugs in producers.  */
-  dwarf2_frame_find_quirks (&fs, fde);
-
-  /* First decode all the insns in the CIE.  */
-  execute_cfa_program (fde, fde->cie->initial_instructions,
-		       fde->cie->end, gdbarch, pc, &fs);
-
-  /* Save the initialized register set.  */
-  fs.initial = fs.regs;
-
-  /* Then decode the insns in the FDE up to our target PC.  */
-  execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs);
-
-  /* Calculate the CFA.  */
-  switch (fs.regs.cfa_how)
-    {
-    case CFA_REG_OFFSET:
-      {
-	int regnum = dwarf_reg_to_regnum_or_error (gdbarch, fs.regs.cfa_reg);
-
-	*regnum_out = regnum;
-	if (fs.armcc_cfa_offsets_reversed)
-	  *offset_out = -fs.regs.cfa_offset;
-	else
-	  *offset_out = fs.regs.cfa_offset;
-	return 1;
-      }
-
-    case CFA_EXP:
-      *text_offset_out = text_offset;
-      *cfa_start_out = fs.regs.cfa_exp;
-      *cfa_end_out = fs.regs.cfa_exp + fs.regs.cfa_exp_len;
-      return 0;
-
-    default:
-      internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
-    }
-}
-
-
-struct dwarf2_frame_cache
-{
-  /* DWARF Call Frame Address.  */
-  CORE_ADDR cfa;
-
-  /* Set if the return address column was marked as unavailable
-     (required non-collected memory or registers to compute).  */
-  int unavailable_retaddr;
-
-  /* Set if the return address column was marked as undefined.  */
-  int undefined_retaddr;
-
-  /* Saved registers, indexed by GDB register number, not by DWARF
-     register number.  */
-  struct dwarf2_frame_state_reg *reg;
-
-  /* Return address register.  */
-  struct dwarf2_frame_state_reg retaddr_reg;
-
-  /* Target address size in bytes.  */
-  int addr_size;
-
-  /* The .text offset.  */
-  CORE_ADDR text_offset;
-
-  /* True if we already checked whether this frame is the bottom frame
-     of a virtual tail call frame chain.  */
-  int checked_tailcall_bottom;
-
-  /* If not NULL then this frame is the bottom frame of a TAILCALL_FRAME
-     sequence.  If NULL then it is a normal case with no TAILCALL_FRAME
-     involved.  Non-bottom frames of a virtual tail call frames chain use
-     dwarf2_tailcall_frame_unwind unwinder so this field does not apply for
-     them.  */
-  void *tailcall_cache;
-
-  /* The number of bytes to subtract from TAILCALL_FRAME frames frame
-     base to get the SP, to simulate the return address pushed on the
-     stack.  */
-  LONGEST entry_cfa_sp_offset;
-  int entry_cfa_sp_offset_p;
-};
-
-static struct dwarf2_frame_cache *
-dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  const int num_regs = gdbarch_num_cooked_regs (gdbarch);
-  struct dwarf2_frame_cache *cache;
-  struct dwarf2_fde *fde;
-  CORE_ADDR entry_pc;
-  const gdb_byte *instr;
-
-  if (*this_cache)
-    return (struct dwarf2_frame_cache *) *this_cache;
-
-  /* Allocate a new cache.  */
-  cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
-  cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
-  *this_cache = cache;
-
-  /* Unwind the PC.
-
-     Note that if the next frame is never supposed to return (i.e. a call
-     to abort), the compiler might optimize away the instruction at
-     its return address.  As a result the return address will
-     point at some random instruction, and the CFI for that
-     instruction is probably worthless to us.  GCC's unwinder solves
-     this problem by substracting 1 from the return address to get an
-     address in the middle of a presumed call instruction (or the
-     instruction in the associated delay slot).  This should only be
-     done for "normal" frames and not for resume-type frames (signal
-     handlers, sentinel frames, dummy frames).  The function
-     get_frame_address_in_block does just this.  It's not clear how
-     reliable the method is though; there is the potential for the
-     register state pre-call being different to that on return.  */
-  CORE_ADDR pc1 = get_frame_address_in_block (this_frame);
-
-  /* Find the correct FDE.  */
-  fde = dwarf2_frame_find_fde (&pc1, &cache->text_offset);
-  gdb_assert (fde != NULL);
-
-  /* Allocate and initialize the frame state.  */
-  struct dwarf2_frame_state fs (pc1, fde->cie);
-
-  cache->addr_size = fde->cie->addr_size;
-
-  /* Check for "quirks" - known bugs in producers.  */
-  dwarf2_frame_find_quirks (&fs, fde);
-
-  /* First decode all the insns in the CIE.  */
-  execute_cfa_program (fde, fde->cie->initial_instructions,
-		       fde->cie->end, gdbarch,
-		       get_frame_address_in_block (this_frame), &fs);
-
-  /* Save the initialized register set.  */
-  fs.initial = fs.regs;
-
-  /* Fetching the entry pc for THIS_FRAME won't necessarily result
-     in an address that's within the range of FDE locations.  This
-     is due to the possibility of the function occupying non-contiguous
-     ranges.  */
-  if (get_frame_func_if_available (this_frame, &entry_pc)
-      && fde->initial_location <= entry_pc
-      && entry_pc < fde->initial_location + fde->address_range)
-    {
-      /* Decode the insns in the FDE up to the entry PC.  */
-      instr = execute_cfa_program (fde, fde->instructions, fde->end, gdbarch,
-				   entry_pc, &fs);
-
-      if (fs.regs.cfa_how == CFA_REG_OFFSET
-	  && (dwarf_reg_to_regnum (gdbarch, fs.regs.cfa_reg)
-	      == gdbarch_sp_regnum (gdbarch)))
-	{
-	  cache->entry_cfa_sp_offset = fs.regs.cfa_offset;
-	  cache->entry_cfa_sp_offset_p = 1;
-	}
-    }
-  else
-    instr = fde->instructions;
-
-  /* Then decode the insns in the FDE up to our target PC.  */
-  execute_cfa_program (fde, instr, fde->end, gdbarch,
-		       get_frame_address_in_block (this_frame), &fs);
-
-  try
-    {
-      /* Calculate the CFA.  */
-      switch (fs.regs.cfa_how)
-	{
-	case CFA_REG_OFFSET:
-	  cache->cfa = read_addr_from_reg (this_frame, fs.regs.cfa_reg);
-	  if (fs.armcc_cfa_offsets_reversed)
-	    cache->cfa -= fs.regs.cfa_offset;
-	  else
-	    cache->cfa += fs.regs.cfa_offset;
-	  break;
-
-	case CFA_EXP:
-	  cache->cfa =
-	    execute_stack_op (fs.regs.cfa_exp, fs.regs.cfa_exp_len,
-			      cache->addr_size, cache->text_offset,
-			      this_frame, 0, 0);
-	  break;
-
-	default:
-	  internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
-	}
-    }
-  catch (const gdb_exception_error &ex)
-    {
-      if (ex.error == NOT_AVAILABLE_ERROR)
-	{
-	  cache->unavailable_retaddr = 1;
-	  return cache;
-	}
-
-      throw;
-    }
-
-  /* Initialize the register state.  */
-  {
-    int regnum;
-
-    for (regnum = 0; regnum < num_regs; regnum++)
-      dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], this_frame);
-  }
-
-  /* Go through the DWARF2 CFI generated table and save its register
-     location information in the cache.  Note that we don't skip the
-     return address column; it's perfectly all right for it to
-     correspond to a real register.  */
-  {
-    int column;		/* CFI speak for "register number".  */
-
-    for (column = 0; column < fs.regs.reg.size (); column++)
-      {
-	/* Use the GDB register number as the destination index.  */
-	int regnum = dwarf_reg_to_regnum (gdbarch, column);
-
-	/* Protect against a target returning a bad register.  */
-	if (regnum < 0 || regnum >= num_regs)
-	  continue;
-
-	/* NOTE: cagney/2003-09-05: CFI should specify the disposition
-	   of all debug info registers.  If it doesn't, complain (but
-	   not too loudly).  It turns out that GCC assumes that an
-	   unspecified register implies "same value" when CFI (draft
-	   7) specifies nothing at all.  Such a register could equally
-	   be interpreted as "undefined".  Also note that this check
-	   isn't sufficient; it only checks that all registers in the
-	   range [0 .. max column] are specified, and won't detect
-	   problems when a debug info register falls outside of the
-	   table.  We need a way of iterating through all the valid
-	   DWARF2 register numbers.  */
-	if (fs.regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
-	  {
-	    if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED)
-	      complaint (_("\
-incomplete CFI data; unspecified registers (e.g., %s) at %s"),
-			 gdbarch_register_name (gdbarch, regnum),
-			 paddress (gdbarch, fs.pc));
-	  }
-	else
-	  cache->reg[regnum] = fs.regs.reg[column];
-      }
-  }
-
-  /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information
-     we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules.  */
-  {
-    int regnum;
-
-    for (regnum = 0; regnum < num_regs; regnum++)
-      {
-	if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA
-	    || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET)
-	  {
-	    const std::vector<struct dwarf2_frame_state_reg> &regs
-	      = fs.regs.reg;
-	    ULONGEST retaddr_column = fs.retaddr_column;
-
-	    /* It seems rather bizarre to specify an "empty" column as
-               the return adress column.  However, this is exactly
-               what GCC does on some targets.  It turns out that GCC
-               assumes that the return address can be found in the
-               register corresponding to the return address column.
-               Incidentally, that's how we should treat a return
-               address column specifying "same value" too.  */
-	    if (fs.retaddr_column < fs.regs.reg.size ()
-		&& regs[retaddr_column].how != DWARF2_FRAME_REG_UNSPECIFIED
-		&& regs[retaddr_column].how != DWARF2_FRAME_REG_SAME_VALUE)
-	      {
-		if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
-		  cache->reg[regnum] = regs[retaddr_column];
-		else
-		  cache->retaddr_reg = regs[retaddr_column];
-	      }
-	    else
-	      {
-		if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
-		  {
-		    cache->reg[regnum].loc.reg = fs.retaddr_column;
-		    cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG;
-		  }
-		else
-		  {
-		    cache->retaddr_reg.loc.reg = fs.retaddr_column;
-		    cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG;
-		  }
-	      }
-	  }
-      }
-  }
-
-  if (fs.retaddr_column < fs.regs.reg.size ()
-      && fs.regs.reg[fs.retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
-    cache->undefined_retaddr = 1;
-
-  return cache;
-}
-
-static enum unwind_stop_reason
-dwarf2_frame_unwind_stop_reason (struct frame_info *this_frame,
-				 void **this_cache)
-{
-  struct dwarf2_frame_cache *cache
-    = dwarf2_frame_cache (this_frame, this_cache);
-
-  if (cache->unavailable_retaddr)
-    return UNWIND_UNAVAILABLE;
-
-  if (cache->undefined_retaddr)
-    return UNWIND_OUTERMOST;
-
-  return UNWIND_NO_REASON;
-}
-
-static void
-dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache,
-		      struct frame_id *this_id)
-{
-  struct dwarf2_frame_cache *cache =
-    dwarf2_frame_cache (this_frame, this_cache);
-
-  if (cache->unavailable_retaddr)
-    (*this_id) = frame_id_build_unavailable_stack (get_frame_func (this_frame));
-  else if (cache->undefined_retaddr)
-    return;
-  else
-    (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame));
-}
-
-static struct value *
-dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache,
-			    int regnum)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct dwarf2_frame_cache *cache =
-    dwarf2_frame_cache (this_frame, this_cache);
-  CORE_ADDR addr;
-  int realnum;
-
-  /* Check whether THIS_FRAME is the bottom frame of a virtual tail
-     call frame chain.  */
-  if (!cache->checked_tailcall_bottom)
-    {
-      cache->checked_tailcall_bottom = 1;
-      dwarf2_tailcall_sniffer_first (this_frame, &cache->tailcall_cache,
-				     (cache->entry_cfa_sp_offset_p
-				      ? &cache->entry_cfa_sp_offset : NULL));
-    }
-
-  /* Non-bottom frames of a virtual tail call frames chain use
-     dwarf2_tailcall_frame_unwind unwinder so this code does not apply for
-     them.  If dwarf2_tailcall_prev_register_first does not have specific value
-     unwind the register, tail call frames are assumed to have the register set
-     of the top caller.  */
-  if (cache->tailcall_cache)
-    {
-      struct value *val;
-      
-      val = dwarf2_tailcall_prev_register_first (this_frame,
-						 &cache->tailcall_cache,
-						 regnum);
-      if (val)
-	return val;
-    }
-
-  switch (cache->reg[regnum].how)
-    {
-    case DWARF2_FRAME_REG_UNDEFINED:
-      /* If CFI explicitly specified that the value isn't defined,
-	 mark it as optimized away; the value isn't available.  */
-      return frame_unwind_got_optimized (this_frame, regnum);
-
-    case DWARF2_FRAME_REG_SAVED_OFFSET:
-      addr = cache->cfa + cache->reg[regnum].loc.offset;
-      return frame_unwind_got_memory (this_frame, regnum, addr);
-
-    case DWARF2_FRAME_REG_SAVED_REG:
-      realnum = dwarf_reg_to_regnum_or_error
-	(gdbarch, cache->reg[regnum].loc.reg);
-      return frame_unwind_got_register (this_frame, regnum, realnum);
-
-    case DWARF2_FRAME_REG_SAVED_EXP:
-      addr = execute_stack_op (cache->reg[regnum].loc.exp.start,
-			       cache->reg[regnum].loc.exp.len,
-			       cache->addr_size, cache->text_offset,
-			       this_frame, cache->cfa, 1);
-      return frame_unwind_got_memory (this_frame, regnum, addr);
-
-    case DWARF2_FRAME_REG_SAVED_VAL_OFFSET:
-      addr = cache->cfa + cache->reg[regnum].loc.offset;
-      return frame_unwind_got_constant (this_frame, regnum, addr);
-
-    case DWARF2_FRAME_REG_SAVED_VAL_EXP:
-      addr = execute_stack_op (cache->reg[regnum].loc.exp.start,
-			       cache->reg[regnum].loc.exp.len,
-			       cache->addr_size, cache->text_offset,
-			       this_frame, cache->cfa, 1);
-      return frame_unwind_got_constant (this_frame, regnum, addr);
-
-    case DWARF2_FRAME_REG_UNSPECIFIED:
-      /* GCC, in its infinite wisdom decided to not provide unwind
-	 information for registers that are "same value".  Since
-	 DWARF2 (3 draft 7) doesn't define such behavior, said
-	 registers are actually undefined (which is different to CFI
-	 "undefined").  Code above issues a complaint about this.
-	 Here just fudge the books, assume GCC, and that the value is
-	 more inner on the stack.  */
-      return frame_unwind_got_register (this_frame, regnum, regnum);
-
-    case DWARF2_FRAME_REG_SAME_VALUE:
-      return frame_unwind_got_register (this_frame, regnum, regnum);
-
-    case DWARF2_FRAME_REG_CFA:
-      return frame_unwind_got_address (this_frame, regnum, cache->cfa);
-
-    case DWARF2_FRAME_REG_CFA_OFFSET:
-      addr = cache->cfa + cache->reg[regnum].loc.offset;
-      return frame_unwind_got_address (this_frame, regnum, addr);
-
-    case DWARF2_FRAME_REG_RA_OFFSET:
-      addr = cache->reg[regnum].loc.offset;
-      regnum = dwarf_reg_to_regnum_or_error
-	(gdbarch, cache->retaddr_reg.loc.reg);
-      addr += get_frame_register_unsigned (this_frame, regnum);
-      return frame_unwind_got_address (this_frame, regnum, addr);
-
-    case DWARF2_FRAME_REG_FN:
-      return cache->reg[regnum].loc.fn (this_frame, this_cache, regnum);
-
-    default:
-      internal_error (__FILE__, __LINE__, _("Unknown register rule."));
-    }
-}
-
-/* Proxy for tailcall_frame_dealloc_cache for bottom frame of a virtual tail
-   call frames chain.  */
-
-static void
-dwarf2_frame_dealloc_cache (struct frame_info *self, void *this_cache)
-{
-  struct dwarf2_frame_cache *cache = dwarf2_frame_cache (self, &this_cache);
-
-  if (cache->tailcall_cache)
-    dwarf2_tailcall_frame_unwind.dealloc_cache (self, cache->tailcall_cache);
-}
-
-static int
-dwarf2_frame_sniffer (const struct frame_unwind *self,
-		      struct frame_info *this_frame, void **this_cache)
-{
-  if (!dwarf2_frame_unwinders_enabled_p)
-    return 0;
-
-  /* Grab an address that is guaranteed to reside somewhere within the
-     function.  get_frame_pc(), with a no-return next function, can
-     end up returning something past the end of this function's body.
-     If the frame we're sniffing for is a signal frame whose start
-     address is placed on the stack by the OS, its FDE must
-     extend one byte before its start address or we could potentially
-     select the FDE of the previous function.  */
-  CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
-  struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr, NULL);
-
-  if (!fde)
-    return 0;
-
-  /* On some targets, signal trampolines may have unwind information.
-     We need to recognize them so that we set the frame type
-     correctly.  */
-
-  if (fde->cie->signal_frame
-      || dwarf2_frame_signal_frame_p (get_frame_arch (this_frame),
-				      this_frame))
-    return self->type == SIGTRAMP_FRAME;
-
-  if (self->type != NORMAL_FRAME)
-    return 0;
-
-  return 1;
-}
-
-static const struct frame_unwind dwarf2_frame_unwind =
-{
-  NORMAL_FRAME,
-  dwarf2_frame_unwind_stop_reason,
-  dwarf2_frame_this_id,
-  dwarf2_frame_prev_register,
-  NULL,
-  dwarf2_frame_sniffer,
-  dwarf2_frame_dealloc_cache
-};
-
-static const struct frame_unwind dwarf2_signal_frame_unwind =
-{
-  SIGTRAMP_FRAME,
-  dwarf2_frame_unwind_stop_reason,
-  dwarf2_frame_this_id,
-  dwarf2_frame_prev_register,
-  NULL,
-  dwarf2_frame_sniffer,
-
-  /* TAILCALL_CACHE can never be in such frame to need dealloc_cache.  */
-  NULL
-};
-
-/* Append the DWARF-2 frame unwinders to GDBARCH's list.  */
-
-void
-dwarf2_append_unwinders (struct gdbarch *gdbarch)
-{
-  /* TAILCALL_FRAME must be first to find the record by
-     dwarf2_tailcall_sniffer_first.  */
-  frame_unwind_append_unwinder (gdbarch, &dwarf2_tailcall_frame_unwind);
-
-  frame_unwind_append_unwinder (gdbarch, &dwarf2_frame_unwind);
-  frame_unwind_append_unwinder (gdbarch, &dwarf2_signal_frame_unwind);
-}
-
-
-/* There is no explicitly defined relationship between the CFA and the
-   location of frame's local variables and arguments/parameters.
-   Therefore, frame base methods on this page should probably only be
-   used as a last resort, just to avoid printing total garbage as a
-   response to the "info frame" command.  */
-
-static CORE_ADDR
-dwarf2_frame_base_address (struct frame_info *this_frame, void **this_cache)
-{
-  struct dwarf2_frame_cache *cache =
-    dwarf2_frame_cache (this_frame, this_cache);
-
-  return cache->cfa;
-}
-
-static const struct frame_base dwarf2_frame_base =
-{
-  &dwarf2_frame_unwind,
-  dwarf2_frame_base_address,
-  dwarf2_frame_base_address,
-  dwarf2_frame_base_address
-};
-
-const struct frame_base *
-dwarf2_frame_base_sniffer (struct frame_info *this_frame)
-{
-  CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
-
-  if (dwarf2_frame_find_fde (&block_addr, NULL))
-    return &dwarf2_frame_base;
-
-  return NULL;
-}
-
-/* Compute the CFA for THIS_FRAME, but only if THIS_FRAME came from
-   the DWARF unwinder.  This is used to implement
-   DW_OP_call_frame_cfa.  */
-
-CORE_ADDR
-dwarf2_frame_cfa (struct frame_info *this_frame)
-{
-  if (frame_unwinder_is (this_frame, &record_btrace_tailcall_frame_unwind)
-      || frame_unwinder_is (this_frame, &record_btrace_frame_unwind))
-    throw_error (NOT_AVAILABLE_ERROR,
-		 _("cfa not available for record btrace target"));
-
-  while (get_frame_type (this_frame) == INLINE_FRAME)
-    this_frame = get_prev_frame (this_frame);
-  if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE)
-    throw_error (NOT_AVAILABLE_ERROR,
-                _("can't compute CFA for this frame: "
-                  "required registers or memory are unavailable"));
-
-  if (get_frame_id (this_frame).stack_status != FID_STACK_VALID)
-    throw_error (NOT_AVAILABLE_ERROR,
-                _("can't compute CFA for this frame: "
-                  "frame base not available"));
-
-  return get_frame_base (this_frame);
-}
-
-const struct objfile_key<dwarf2_fde_table,
-			 gdb::noop_deleter<dwarf2_fde_table>>
-  dwarf2_frame_objfile_data;
-
-static unsigned int
-read_1_byte (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_8 (abfd, buf);
-}
-
-static unsigned int
-read_4_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_32 (abfd, buf);
-}
-
-static ULONGEST
-read_8_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_64 (abfd, buf);
-}
-
-static ULONGEST
-read_initial_length (bfd *abfd, const gdb_byte *buf,
-		     unsigned int *bytes_read_ptr)
-{
-  ULONGEST result;
-
-  result = bfd_get_32 (abfd, buf);
-  if (result == 0xffffffff)
-    {
-      result = bfd_get_64 (abfd, buf + 4);
-      *bytes_read_ptr = 12;
-    }
-  else
-    *bytes_read_ptr = 4;
-
-  return result;
-}
-
-
-/* Pointer encoding helper functions.  */
-
-/* GCC supports exception handling based on DWARF2 CFI.  However, for
-   technical reasons, it encodes addresses in its FDE's in a different
-   way.  Several "pointer encodings" are supported.  The encoding
-   that's used for a particular FDE is determined by the 'R'
-   augmentation in the associated CIE.  The argument of this
-   augmentation is a single byte.  
-
-   The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
-   LEB128.  This is encoded in bits 0, 1 and 2.  Bit 3 encodes whether
-   the address is signed or unsigned.  Bits 4, 5 and 6 encode how the
-   address should be interpreted (absolute, relative to the current
-   position in the FDE, ...).  Bit 7, indicates that the address
-   should be dereferenced.  */
-
-static gdb_byte
-encoding_for_size (unsigned int size)
-{
-  switch (size)
-    {
-    case 2:
-      return DW_EH_PE_udata2;
-    case 4:
-      return DW_EH_PE_udata4;
-    case 8:
-      return DW_EH_PE_udata8;
-    default:
-      internal_error (__FILE__, __LINE__, _("Unsupported address size"));
-    }
-}
-
-static CORE_ADDR
-read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
-		    int ptr_len, const gdb_byte *buf,
-		    unsigned int *bytes_read_ptr,
-		    CORE_ADDR func_base)
-{
-  ptrdiff_t offset;
-  CORE_ADDR base;
-
-  /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
-     FDE's.  */
-  if (encoding & DW_EH_PE_indirect)
-    internal_error (__FILE__, __LINE__, 
-		    _("Unsupported encoding: DW_EH_PE_indirect"));
-
-  *bytes_read_ptr = 0;
-
-  switch (encoding & 0x70)
-    {
-    case DW_EH_PE_absptr:
-      base = 0;
-      break;
-    case DW_EH_PE_pcrel:
-      base = bfd_section_vma (unit->dwarf_frame_section);
-      base += (buf - unit->dwarf_frame_buffer);
-      break;
-    case DW_EH_PE_datarel:
-      base = unit->dbase;
-      break;
-    case DW_EH_PE_textrel:
-      base = unit->tbase;
-      break;
-    case DW_EH_PE_funcrel:
-      base = func_base;
-      break;
-    case DW_EH_PE_aligned:
-      base = 0;
-      offset = buf - unit->dwarf_frame_buffer;
-      if ((offset % ptr_len) != 0)
-	{
-	  *bytes_read_ptr = ptr_len - (offset % ptr_len);
-	  buf += *bytes_read_ptr;
-	}
-      break;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid or unsupported encoding"));
-    }
-
-  if ((encoding & 0x07) == 0x00)
-    {
-      encoding |= encoding_for_size (ptr_len);
-      if (bfd_get_sign_extend_vma (unit->abfd))
-	encoding |= DW_EH_PE_signed;
-    }
-
-  switch (encoding & 0x0f)
-    {
-    case DW_EH_PE_uleb128:
-      {
-	uint64_t value;
-	const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
-
-	*bytes_read_ptr += safe_read_uleb128 (buf, end_buf, &value) - buf;
-	return base + value;
-      }
-    case DW_EH_PE_udata2:
-      *bytes_read_ptr += 2;
-      return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
-    case DW_EH_PE_udata4:
-      *bytes_read_ptr += 4;
-      return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
-    case DW_EH_PE_udata8:
-      *bytes_read_ptr += 8;
-      return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
-    case DW_EH_PE_sleb128:
-      {
-	int64_t value;
-	const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
-
-	*bytes_read_ptr += safe_read_sleb128 (buf, end_buf, &value) - buf;
-	return base + value;
-      }
-    case DW_EH_PE_sdata2:
-      *bytes_read_ptr += 2;
-      return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
-    case DW_EH_PE_sdata4:
-      *bytes_read_ptr += 4;
-      return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
-    case DW_EH_PE_sdata8:
-      *bytes_read_ptr += 8;
-      return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid or unsupported encoding"));
-    }
-}
-
-
-/* Find CIE with the given CIE_POINTER in CIE_TABLE.  */
-static struct dwarf2_cie *
-find_cie (const dwarf2_cie_table &cie_table, ULONGEST cie_pointer)
-{
-  auto iter = cie_table.find (cie_pointer);
-  if (iter != cie_table.end ())
-    return iter->second;
-  return NULL;
-}
-
-static inline int
-bsearch_fde_cmp (const dwarf2_fde *fde, CORE_ADDR seek_pc)
-{
-  if (fde->initial_location + fde->address_range <= seek_pc)
-    return -1;
-  if (fde->initial_location <= seek_pc)
-    return 0;
-  return 1;
-}
-
-/* Find the FDE for *PC.  Return a pointer to the FDE, and store the
-   initial location associated with it into *PC.  */
-
-static struct dwarf2_fde *
-dwarf2_frame_find_fde (CORE_ADDR *pc, CORE_ADDR *out_offset)
-{
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      struct dwarf2_fde_table *fde_table;
-      CORE_ADDR offset;
-      CORE_ADDR seek_pc;
-
-      fde_table = dwarf2_frame_objfile_data.get (objfile);
-      if (fde_table == NULL)
-	{
-	  dwarf2_build_frame_info (objfile);
-	  fde_table = dwarf2_frame_objfile_data.get (objfile);
-	}
-      gdb_assert (fde_table != NULL);
-
-      if (fde_table->num_entries == 0)
-	continue;
-
-      gdb_assert (objfile->section_offsets);
-      offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-      gdb_assert (fde_table->num_entries > 0);
-      if (*pc < offset + fde_table->entries[0]->initial_location)
-        continue;
-
-      seek_pc = *pc - offset;
-      auto end = fde_table->entries + fde_table->num_entries;
-      auto it = gdb::binary_search (fde_table->entries, end, seek_pc, bsearch_fde_cmp);
-      if (it != end)
-        {
-          *pc = (*it)->initial_location + offset;
-	  if (out_offset)
-	    *out_offset = offset;
-          return *it;
-        }
-    }
-  return NULL;
-}
-
-/* Add a pointer to new FDE to the FDE_TABLE, allocating space for it.  */
-static void
-add_fde (struct dwarf2_fde_table *fde_table, struct dwarf2_fde *fde)
-{
-  if (fde->address_range == 0)
-    /* Discard useless FDEs.  */
-    return;
-
-  fde_table->num_entries += 1;
-  fde_table->entries = XRESIZEVEC (struct dwarf2_fde *, fde_table->entries,
-				   fde_table->num_entries);
-  fde_table->entries[fde_table->num_entries - 1] = fde;
-}
-
-#define DW64_CIE_ID 0xffffffffffffffffULL
-
-/* Defines the type of eh_frames that are expected to be decoded: CIE, FDE
-   or any of them.  */
-
-enum eh_frame_type
-{
-  EH_CIE_TYPE_ID = 1 << 0,
-  EH_FDE_TYPE_ID = 1 << 1,
-  EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID
-};
-
-static const gdb_byte *decode_frame_entry (struct comp_unit *unit,
-					   const gdb_byte *start,
-					   int eh_frame_p,
-					   dwarf2_cie_table &cie_table,
-					   struct dwarf2_fde_table *fde_table,
-					   enum eh_frame_type entry_type);
-
-/* Decode the next CIE or FDE, entry_type specifies the expected type.
-   Return NULL if invalid input, otherwise the next byte to be processed.  */
-
-static const gdb_byte *
-decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
-		      int eh_frame_p,
-                      dwarf2_cie_table &cie_table,
-                      struct dwarf2_fde_table *fde_table,
-                      enum eh_frame_type entry_type)
-{
-  struct gdbarch *gdbarch = get_objfile_arch (unit->objfile);
-  const gdb_byte *buf, *end;
-  ULONGEST length;
-  unsigned int bytes_read;
-  int dwarf64_p;
-  ULONGEST cie_id;
-  ULONGEST cie_pointer;
-  int64_t sleb128;
-  uint64_t uleb128;
-
-  buf = start;
-  length = read_initial_length (unit->abfd, buf, &bytes_read);
-  buf += bytes_read;
-  end = buf + (size_t) length;
-
-  if (length == 0)
-    return end;
-
-  /* Are we still within the section?  */
-  if (end <= buf || end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
-    return NULL;
-
-  /* Distinguish between 32 and 64-bit encoded frame info.  */
-  dwarf64_p = (bytes_read == 12);
-
-  /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs.  */
-  if (eh_frame_p)
-    cie_id = 0;
-  else if (dwarf64_p)
-    cie_id = DW64_CIE_ID;
-  else
-    cie_id = DW_CIE_ID;
-
-  if (dwarf64_p)
-    {
-      cie_pointer = read_8_bytes (unit->abfd, buf);
-      buf += 8;
-    }
-  else
-    {
-      cie_pointer = read_4_bytes (unit->abfd, buf);
-      buf += 4;
-    }
-
-  if (cie_pointer == cie_id)
-    {
-      /* This is a CIE.  */
-      struct dwarf2_cie *cie;
-      char *augmentation;
-      unsigned int cie_version;
-
-      /* Check that a CIE was expected.  */
-      if ((entry_type & EH_CIE_TYPE_ID) == 0)
-	error (_("Found a CIE when not expecting it."));
-
-      /* Record the offset into the .debug_frame section of this CIE.  */
-      cie_pointer = start - unit->dwarf_frame_buffer;
-
-      /* Check whether we've already read it.  */
-      if (find_cie (cie_table, cie_pointer))
-	return end;
-
-      cie = XOBNEW (&unit->objfile->objfile_obstack, struct dwarf2_cie);
-      cie->initial_instructions = NULL;
-      cie->cie_pointer = cie_pointer;
-
-      /* The encoding for FDE's in a normal .debug_frame section
-         depends on the target address size.  */
-      cie->encoding = DW_EH_PE_absptr;
-
-      /* We'll determine the final value later, but we need to
-	 initialize it conservatively.  */
-      cie->signal_frame = 0;
-
-      /* Check version number.  */
-      cie_version = read_1_byte (unit->abfd, buf);
-      if (cie_version != 1 && cie_version != 3 && cie_version != 4)
-	return NULL;
-      cie->version = cie_version;
-      buf += 1;
-
-      /* Interpret the interesting bits of the augmentation.  */
-      cie->augmentation = augmentation = (char *) buf;
-      buf += (strlen (augmentation) + 1);
-
-      /* Ignore armcc augmentations.  We only use them for quirks,
-	 and that doesn't happen until later.  */
-      if (startswith (augmentation, "armcc"))
-	augmentation += strlen (augmentation);
-
-      /* The GCC 2.x "eh" augmentation has a pointer immediately
-         following the augmentation string, so it must be handled
-         first.  */
-      if (augmentation[0] == 'e' && augmentation[1] == 'h')
-	{
-	  /* Skip.  */
-	  buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
-	  augmentation += 2;
-	}
-
-      if (cie->version >= 4)
-	{
-	  /* FIXME: check that this is the same as from the CU header.  */
-	  cie->addr_size = read_1_byte (unit->abfd, buf);
-	  ++buf;
-	  cie->segment_size = read_1_byte (unit->abfd, buf);
-	  ++buf;
-	}
-      else
-	{
-	  cie->addr_size = gdbarch_dwarf2_addr_size (gdbarch);
-	  cie->segment_size = 0;
-	}
-      /* Address values in .eh_frame sections are defined to have the
-	 target's pointer size.  Watchout: This breaks frame info for
-	 targets with pointer size < address size, unless a .debug_frame
-	 section exists as well.  */
-      if (eh_frame_p)
-	cie->ptr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
-      else
-	cie->ptr_size = cie->addr_size;
-
-      buf = gdb_read_uleb128 (buf, end, &uleb128);
-      if (buf == NULL)
-	return NULL;
-      cie->code_alignment_factor = uleb128;
-
-      buf = gdb_read_sleb128 (buf, end, &sleb128);
-      if (buf == NULL)
-	return NULL;
-      cie->data_alignment_factor = sleb128;
-
-      if (cie_version == 1)
-	{
-	  cie->return_address_register = read_1_byte (unit->abfd, buf);
-	  ++buf;
-	}
-      else
-	{
-	  buf = gdb_read_uleb128 (buf, end, &uleb128);
-	  if (buf == NULL)
-	    return NULL;
-	  cie->return_address_register = uleb128;
-	}
-
-      cie->return_address_register
-	= dwarf2_frame_adjust_regnum (gdbarch,
-				      cie->return_address_register,
-				      eh_frame_p);
-
-      cie->saw_z_augmentation = (*augmentation == 'z');
-      if (cie->saw_z_augmentation)
-	{
-	  uint64_t uleb_length;
-
-	  buf = gdb_read_uleb128 (buf, end, &uleb_length);
-	  if (buf == NULL)
-	    return NULL;
-	  cie->initial_instructions = buf + uleb_length;
-	  augmentation++;
-	}
-
-      while (*augmentation)
-	{
-	  /* "L" indicates a byte showing how the LSDA pointer is encoded.  */
-	  if (*augmentation == 'L')
-	    {
-	      /* Skip.  */
-	      buf++;
-	      augmentation++;
-	    }
-
-	  /* "R" indicates a byte indicating how FDE addresses are encoded.  */
-	  else if (*augmentation == 'R')
-	    {
-	      cie->encoding = *buf++;
-	      augmentation++;
-	    }
-
-	  /* "P" indicates a personality routine in the CIE augmentation.  */
-	  else if (*augmentation == 'P')
-	    {
-	      /* Skip.  Avoid indirection since we throw away the result.  */
-	      gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
-	      read_encoded_value (unit, encoding, cie->ptr_size,
-				  buf, &bytes_read, 0);
-	      buf += bytes_read;
-	      augmentation++;
-	    }
-
-	  /* "S" indicates a signal frame, such that the return
-	     address must not be decremented to locate the call frame
-	     info for the previous frame; it might even be the first
-	     instruction of a function, so decrementing it would take
-	     us to a different function.  */
-	  else if (*augmentation == 'S')
-	    {
-	      cie->signal_frame = 1;
-	      augmentation++;
-	    }
-
-	  /* Otherwise we have an unknown augmentation.  Assume that either
-	     there is no augmentation data, or we saw a 'z' prefix.  */
-	  else
-	    {
-	      if (cie->initial_instructions)
-		buf = cie->initial_instructions;
-	      break;
-	    }
-	}
-
-      cie->initial_instructions = buf;
-      cie->end = end;
-      cie->unit = unit;
-
-      cie_table[cie->cie_pointer] = cie;
-    }
-  else
-    {
-      /* This is a FDE.  */
-      struct dwarf2_fde *fde;
-      CORE_ADDR addr;
-
-      /* Check that an FDE was expected.  */
-      if ((entry_type & EH_FDE_TYPE_ID) == 0)
-	error (_("Found an FDE when not expecting it."));
-
-      /* In an .eh_frame section, the CIE pointer is the delta between the
-	 address within the FDE where the CIE pointer is stored and the
-	 address of the CIE.  Convert it to an offset into the .eh_frame
-	 section.  */
-      if (eh_frame_p)
-	{
-	  cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
-	  cie_pointer -= (dwarf64_p ? 8 : 4);
-	}
-
-      /* In either case, validate the result is still within the section.  */
-      if (cie_pointer >= unit->dwarf_frame_size)
-	return NULL;
-
-      fde = XOBNEW (&unit->objfile->objfile_obstack, struct dwarf2_fde);
-      fde->cie = find_cie (cie_table, cie_pointer);
-      if (fde->cie == NULL)
-	{
-	  decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
-			      eh_frame_p, cie_table, fde_table,
-			      EH_CIE_TYPE_ID);
-	  fde->cie = find_cie (cie_table, cie_pointer);
-	}
-
-      gdb_assert (fde->cie != NULL);
-
-      addr = read_encoded_value (unit, fde->cie->encoding, fde->cie->ptr_size,
-				 buf, &bytes_read, 0);
-      fde->initial_location = gdbarch_adjust_dwarf2_addr (gdbarch, addr);
-      buf += bytes_read;
-
-      fde->address_range =
-	read_encoded_value (unit, fde->cie->encoding & 0x0f,
-			    fde->cie->ptr_size, buf, &bytes_read, 0);
-      addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + fde->address_range);
-      fde->address_range = addr - fde->initial_location;
-      buf += bytes_read;
-
-      /* A 'z' augmentation in the CIE implies the presence of an
-	 augmentation field in the FDE as well.  The only thing known
-	 to be in here at present is the LSDA entry for EH.  So we
-	 can skip the whole thing.  */
-      if (fde->cie->saw_z_augmentation)
-	{
-	  uint64_t uleb_length;
-
-	  buf = gdb_read_uleb128 (buf, end, &uleb_length);
-	  if (buf == NULL)
-	    return NULL;
-	  buf += uleb_length;
-	  if (buf > end)
-	    return NULL;
-	}
-
-      fde->instructions = buf;
-      fde->end = end;
-
-      fde->eh_frame_p = eh_frame_p;
-
-      add_fde (fde_table, fde);
-    }
-
-  return end;
-}
-
-/* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we
-   expect an FDE or a CIE.  */
-
-static const gdb_byte *
-decode_frame_entry (struct comp_unit *unit, const gdb_byte *start,
-		    int eh_frame_p,
-		    dwarf2_cie_table &cie_table,
-                    struct dwarf2_fde_table *fde_table,
-                    enum eh_frame_type entry_type)
-{
-  enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
-  const gdb_byte *ret;
-  ptrdiff_t start_offset;
-
-  while (1)
-    {
-      ret = decode_frame_entry_1 (unit, start, eh_frame_p,
-				  cie_table, fde_table, entry_type);
-      if (ret != NULL)
-	break;
-
-      /* We have corrupt input data of some form.  */
-
-      /* ??? Try, weakly, to work around compiler/assembler/linker bugs
-	 and mismatches wrt padding and alignment of debug sections.  */
-      /* Note that there is no requirement in the standard for any
-	 alignment at all in the frame unwind sections.  Testing for
-	 alignment before trying to interpret data would be incorrect.
-
-	 However, GCC traditionally arranged for frame sections to be
-	 sized such that the FDE length and CIE fields happen to be
-	 aligned (in theory, for performance).  This, unfortunately,
-	 was done with .align directives, which had the side effect of
-	 forcing the section to be aligned by the linker.
-
-	 This becomes a problem when you have some other producer that
-	 creates frame sections that are not as strictly aligned.  That
-	 produces a hole in the frame info that gets filled by the 
-	 linker with zeros.
-
-	 The GCC behaviour is arguably a bug, but it's effectively now
-	 part of the ABI, so we're now stuck with it, at least at the
-	 object file level.  A smart linker may decide, in the process
-	 of compressing duplicate CIE information, that it can rewrite
-	 the entire output section without this extra padding.  */
-
-      start_offset = start - unit->dwarf_frame_buffer;
-      if (workaround < ALIGN4 && (start_offset & 3) != 0)
-	{
-	  start += 4 - (start_offset & 3);
-	  workaround = ALIGN4;
-	  continue;
-	}
-      if (workaround < ALIGN8 && (start_offset & 7) != 0)
-	{
-	  start += 8 - (start_offset & 7);
-	  workaround = ALIGN8;
-	  continue;
-	}
-
-      /* Nothing left to try.  Arrange to return as if we've consumed
-	 the entire input section.  Hopefully we'll get valid info from
-	 the other of .debug_frame/.eh_frame.  */
-      workaround = FAIL;
-      ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
-      break;
-    }
-
-  switch (workaround)
-    {
-    case NONE:
-      break;
-
-    case ALIGN4:
-      complaint (_("\
-Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
-		 unit->dwarf_frame_section->owner->filename,
-		 unit->dwarf_frame_section->name);
-      break;
-
-    case ALIGN8:
-      complaint (_("\
-Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
-		 unit->dwarf_frame_section->owner->filename,
-		 unit->dwarf_frame_section->name);
-      break;
-
-    default:
-      complaint (_("Corrupt data in %s:%s"),
-		 unit->dwarf_frame_section->owner->filename,
-		 unit->dwarf_frame_section->name);
-      break;
-    }
-
-  return ret;
-}
-
-static bool
-fde_is_less_than (const dwarf2_fde *aa, const dwarf2_fde *bb)
-{
-  if (aa->initial_location == bb->initial_location)
-    {
-      if (aa->address_range != bb->address_range
-          && aa->eh_frame_p == 0 && bb->eh_frame_p == 0)
-        /* Linker bug, e.g. gold/10400.
-           Work around it by keeping stable sort order.  */
-        return aa < bb;
-      else
-        /* Put eh_frame entries after debug_frame ones.  */
-        return aa->eh_frame_p < bb->eh_frame_p;
-    }
-
-  return aa->initial_location < bb->initial_location;
-}
-
-void
-dwarf2_build_frame_info (struct objfile *objfile)
-{
-  struct comp_unit *unit;
-  const gdb_byte *frame_ptr;
-  dwarf2_cie_table cie_table;
-  struct dwarf2_fde_table fde_table;
-  struct dwarf2_fde_table *fde_table2;
-
-  fde_table.num_entries = 0;
-  fde_table.entries = NULL;
-
-  /* Build a minimal decoding of the DWARF2 compilation unit.  */
-  unit = XOBNEW (&objfile->objfile_obstack, comp_unit);
-  unit->abfd = objfile->obfd;
-  unit->objfile = objfile;
-  unit->dbase = 0;
-  unit->tbase = 0;
-
-  if (objfile->separate_debug_objfile_backlink == NULL)
-    {
-      /* Do not read .eh_frame from separate file as they must be also
-         present in the main file.  */
-      dwarf2_get_section_info (objfile, DWARF2_EH_FRAME,
-                               &unit->dwarf_frame_section,
-                               &unit->dwarf_frame_buffer,
-                               &unit->dwarf_frame_size);
-      if (unit->dwarf_frame_size)
-        {
-          asection *got, *txt;
-
-          /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
-             that is used for the i386/amd64 target, which currently is
-             the only target in GCC that supports/uses the
-             DW_EH_PE_datarel encoding.  */
-          got = bfd_get_section_by_name (unit->abfd, ".got");
-          if (got)
-            unit->dbase = got->vma;
-
-          /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
-             so far.  */
-          txt = bfd_get_section_by_name (unit->abfd, ".text");
-          if (txt)
-            unit->tbase = txt->vma;
-
-	  try
-	    {
-	      frame_ptr = unit->dwarf_frame_buffer;
-	      while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
-		frame_ptr = decode_frame_entry (unit, frame_ptr, 1,
-						cie_table, &fde_table,
-						EH_CIE_OR_FDE_TYPE_ID);
-	    }
-
-	  catch (const gdb_exception_error &e)
-	    {
-	      warning (_("skipping .eh_frame info of %s: %s"),
-		       objfile_name (objfile), e.what ());
-
-	      if (fde_table.num_entries != 0)
-		{
-                  xfree (fde_table.entries);
-		  fde_table.entries = NULL;
-		  fde_table.num_entries = 0;
-		}
-	      /* The cie_table is discarded below.  */
-	    }
-
-	  cie_table.clear ();
-        }
-    }
-
-  dwarf2_get_section_info (objfile, DWARF2_DEBUG_FRAME,
-                           &unit->dwarf_frame_section,
-                           &unit->dwarf_frame_buffer,
-                           &unit->dwarf_frame_size);
-  if (unit->dwarf_frame_size)
-    {
-      int num_old_fde_entries = fde_table.num_entries;
-
-      try
-	{
-	  frame_ptr = unit->dwarf_frame_buffer;
-	  while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
-	    frame_ptr = decode_frame_entry (unit, frame_ptr, 0,
-					    cie_table, &fde_table,
-					    EH_CIE_OR_FDE_TYPE_ID);
-	}
-      catch (const gdb_exception_error &e)
-	{
-	  warning (_("skipping .debug_frame info of %s: %s"),
-		   objfile_name (objfile), e.what ());
-
-	  if (fde_table.num_entries != 0)
-	    {
-	      fde_table.num_entries = num_old_fde_entries;
-	      if (num_old_fde_entries == 0)
-		{
-		  xfree (fde_table.entries);
-		  fde_table.entries = NULL;
-		}
-	      else
-		{
-		  fde_table.entries
-		    = XRESIZEVEC (struct dwarf2_fde *, fde_table.entries,
-				  fde_table.num_entries);
-		}
-	    }
-	  fde_table.num_entries = num_old_fde_entries;
-	}
-    }
-
-  /* Copy fde_table to obstack: it is needed at runtime.  */
-  fde_table2 = XOBNEW (&objfile->objfile_obstack, struct dwarf2_fde_table);
-
-  if (fde_table.num_entries == 0)
-    {
-      fde_table2->entries = NULL;
-      fde_table2->num_entries = 0;
-    }
-  else
-    {
-      struct dwarf2_fde *fde_prev = NULL;
-      struct dwarf2_fde *first_non_zero_fde = NULL;
-      int i;
-
-      /* Prepare FDE table for lookups.  */
-      std::sort (fde_table.entries, fde_table.entries + fde_table.num_entries,
-		 fde_is_less_than);
-
-      /* Check for leftovers from --gc-sections.  The GNU linker sets
-	 the relevant symbols to zero, but doesn't zero the FDE *end*
-	 ranges because there's no relocation there.  It's (offset,
-	 length), not (start, end).  On targets where address zero is
-	 just another valid address this can be a problem, since the
-	 FDEs appear to be non-empty in the output --- we could pick
-	 out the wrong FDE.  To work around this, when overlaps are
-	 detected, we prefer FDEs that do not start at zero.
-
-	 Start by finding the first FDE with non-zero start.  Below
-	 we'll discard all FDEs that start at zero and overlap this
-	 one.  */
-      for (i = 0; i < fde_table.num_entries; i++)
-	{
-	  struct dwarf2_fde *fde = fde_table.entries[i];
-
-	  if (fde->initial_location != 0)
-	    {
-	      first_non_zero_fde = fde;
-	      break;
-	    }
-	}
-
-      /* Since we'll be doing bsearch, squeeze out identical (except
-	 for eh_frame_p) fde entries so bsearch result is predictable.
-	 Also discard leftovers from --gc-sections.  */
-      fde_table2->num_entries = 0;
-      for (i = 0; i < fde_table.num_entries; i++)
-	{
-	  struct dwarf2_fde *fde = fde_table.entries[i];
-
-	  if (fde->initial_location == 0
-	      && first_non_zero_fde != NULL
-	      && (first_non_zero_fde->initial_location
-		  < fde->initial_location + fde->address_range))
-	    continue;
-
-	  if (fde_prev != NULL
-	      && fde_prev->initial_location == fde->initial_location)
-	    continue;
-
-	  obstack_grow (&objfile->objfile_obstack, &fde_table.entries[i],
-			sizeof (fde_table.entries[0]));
-	  ++fde_table2->num_entries;
-	  fde_prev = fde;
-	}
-      fde_table2->entries
-	= (struct dwarf2_fde **) obstack_finish (&objfile->objfile_obstack);
-
-      /* Discard the original fde_table.  */
-      xfree (fde_table.entries);
-    }
-
-  dwarf2_frame_objfile_data.set (objfile, fde_table2);
-}
-
-/* Handle 'maintenance show dwarf unwinders'.  */
-
-static void
-show_dwarf_unwinders_enabled_p (struct ui_file *file, int from_tty,
-				struct cmd_list_element *c,
-				const char *value)
-{
-  fprintf_filtered (file,
-		    _("The DWARF stack unwinders are currently %s.\n"),
-		    value);
-}
-
-void
-_initialize_dwarf2_frame (void)
-{
-  dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
-
-  add_setshow_boolean_cmd ("unwinders", class_obscure,
-			   &dwarf2_frame_unwinders_enabled_p , _("\
-Set whether the DWARF stack frame unwinders are used."), _("\
-Show whether the DWARF stack frame unwinders are used."), _("\
-When enabled the DWARF stack frame unwinders can be used for architectures\n\
-that support the DWARF unwinders.  Enabling the DWARF unwinders for an\n\
-architecture that doesn't support them will have no effect."),
-			   NULL,
-			   show_dwarf_unwinders_enabled_p,
-			   &set_dwarf_cmdlist,
-			   &show_dwarf_cmdlist);
-
-#if GDB_SELF_TEST
-  selftests::register_test_foreach_arch ("execute_cfa_program",
-					 selftests::execute_cfa_program_test);
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame.h ./gdb/dwarf2-frame.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2-frame.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,266 +0,0 @@
-/* Frame unwinder for frames with DWARF Call Frame Information.
-
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
-
-   Contributed by Mark Kettenis.
-
-   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 DWARF2_FRAME_H
-#define DWARF2_FRAME_H 1
-
-struct gdbarch;
-struct objfile;
-struct frame_info;
-struct dwarf2_per_cu_data;
-struct agent_expr;
-struct axs_value;
-
-/* Register rule.  */
-
-enum dwarf2_frame_reg_rule
-{
-  /* Make certain that 0 maps onto the correct enum value; the
-     corresponding structure is being initialized using memset zero.
-     This indicates that CFI didn't provide any information at all
-     about a register, leaving how to obtain its value totally
-     unspecified.  */
-  DWARF2_FRAME_REG_UNSPECIFIED = 0,
-
-  /* The term "undefined" comes from the DWARF2 CFI spec which this
-     code is modeling; it indicates that the register's value is
-     "undefined".  GCC uses the less formal term "unsaved".  Its
-     definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED.
-     The failure to differentiate the two helps explain a few problems
-     with the CFI generated by GCC.  */
-  DWARF2_FRAME_REG_UNDEFINED,
-  DWARF2_FRAME_REG_SAVED_OFFSET,
-  DWARF2_FRAME_REG_SAVED_REG,
-  DWARF2_FRAME_REG_SAVED_EXP,
-  DWARF2_FRAME_REG_SAME_VALUE,
-
-  /* These are defined in Dwarf3.  */
-  DWARF2_FRAME_REG_SAVED_VAL_OFFSET,
-  DWARF2_FRAME_REG_SAVED_VAL_EXP,
-
-  /* These aren't defined by the DWARF2 CFI specification, but are
-     used internally by GDB.  */
-  DWARF2_FRAME_REG_FN,		/* Call a registered function.  */
-  DWARF2_FRAME_REG_RA,		/* Return Address.  */
-  DWARF2_FRAME_REG_RA_OFFSET,	/* Return Address with offset.  */
-  DWARF2_FRAME_REG_CFA,		/* Call Frame Address.  */
-  DWARF2_FRAME_REG_CFA_OFFSET	/* Call Frame Address with offset.  */
-};
-
-/* Register state.  */
-
-struct dwarf2_frame_state_reg
-{
-  /* Each register save state can be described in terms of a CFA slot,
-     another register, or a location expression.  */
-  union {
-    LONGEST offset;
-    ULONGEST reg;
-    struct
-    {
-      const gdb_byte *start;
-      ULONGEST len;
-    } exp;
-    struct value *(*fn) (struct frame_info *this_frame, void **this_cache,
-			 int regnum);
-  } loc;
-  enum dwarf2_frame_reg_rule how;
-};
-
-enum cfa_how_kind
-{
-  CFA_UNSET,
-  CFA_REG_OFFSET,
-  CFA_EXP
-};
-
-struct dwarf2_frame_state_reg_info
-{
-  dwarf2_frame_state_reg_info () = default;
-  ~dwarf2_frame_state_reg_info ()
-  {
-    delete prev;
-  }
-
-  /* Copy constructor.  */
-  dwarf2_frame_state_reg_info (const dwarf2_frame_state_reg_info &src)
-    : reg (src.reg), cfa_offset (src.cfa_offset),
-      cfa_reg (src.cfa_reg), cfa_how (src.cfa_how), cfa_exp (src.cfa_exp),
-      prev (src.prev)
-  {
-  }
-
-  /* Assignment operator for both move-assignment and copy-assignment.  */
-  dwarf2_frame_state_reg_info&
-  operator= (dwarf2_frame_state_reg_info rhs)
-  {
-    swap (*this, rhs);
-    return *this;
-  }
-
-  /* Move constructor.  */
-  dwarf2_frame_state_reg_info (dwarf2_frame_state_reg_info &&rhs) noexcept
-    : reg (std::move (rhs.reg)), cfa_offset (rhs.cfa_offset),
-      cfa_reg (rhs.cfa_reg), cfa_how (rhs.cfa_how), cfa_exp (rhs.cfa_exp),
-      prev (rhs.prev)
-  {
-    rhs.prev = nullptr;
-  }
-
-  /* If necessary, enlarge the register set to hold NUM_REGS_REQUESTED
-     registers.  */
-  void alloc_regs (int num_regs_requested)
-  {
-    gdb_assert (num_regs_requested > 0);
-
-    if (num_regs_requested <= reg.size ())
-      return;
-
-    reg.resize (num_regs_requested);
-  }
-
-  std::vector<struct dwarf2_frame_state_reg> reg;
-
-  LONGEST cfa_offset = 0;
-  ULONGEST cfa_reg = 0;
-  enum cfa_how_kind cfa_how = CFA_UNSET;
-  const gdb_byte *cfa_exp = NULL;
-
-  /* Used to implement DW_CFA_remember_state.  */
-  struct dwarf2_frame_state_reg_info *prev = NULL;
-
-private:
-  friend void swap (dwarf2_frame_state_reg_info& lhs,
-		    dwarf2_frame_state_reg_info& rhs)
-  {
-    using std::swap;
-
-    swap (lhs.reg, rhs.reg);
-    swap (lhs.cfa_offset, rhs.cfa_offset);
-    swap (lhs.cfa_reg, rhs.cfa_reg);
-    swap (lhs.cfa_how, rhs.cfa_how);
-    swap (lhs.cfa_exp, rhs.cfa_exp);
-    swap (lhs.prev, rhs.prev);
-  }
-};
-
-struct dwarf2_cie;
-
-/* Structure describing a frame state.  */
-
-struct dwarf2_frame_state
-{
-  dwarf2_frame_state (CORE_ADDR pc, struct dwarf2_cie *cie);
-
-  /* Each register save state can be described in terms of a CFA slot,
-     another register, or a location expression.  */
-  struct dwarf2_frame_state_reg_info regs {};
-
-  /* The PC described by the current frame state.  */
-  CORE_ADDR pc;
-
-  /* Initial register set from the CIE.
-     Used to implement DW_CFA_restore.  */
-  struct dwarf2_frame_state_reg_info initial {};
-
-  /* The information we care about from the CIE.  */
-  const LONGEST data_align;
-  const ULONGEST code_align;
-  const ULONGEST retaddr_column;
-
-  /* Flags for known producer quirks.  */
-
-  /* The ARM compilers, in DWARF2 mode, assume that DW_CFA_def_cfa
-     and DW_CFA_def_cfa_offset takes a factored offset.  */
-  bool armcc_cfa_offsets_sf = false;
-
-  /* The ARM compilers, in DWARF2 or DWARF3 mode, may assume that
-     the CFA is defined as REG - OFFSET rather than REG + OFFSET.  */
-  bool armcc_cfa_offsets_reversed = false;
-};
-
-/* When this is true the DWARF frame unwinders can be used if they are
-   registered with the gdbarch.  Not all architectures can or do use the
-   DWARF unwinders.  Setting this to true on a target that does not
-   otherwise support the DWARF unwinders has no effect.  */
-extern bool dwarf2_frame_unwinders_enabled_p;
-
-/* Set the architecture-specific register state initialization
-   function for GDBARCH to INIT_REG.  */
-
-extern void dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
-				       void (*init_reg) (struct gdbarch *, int,
-					     struct dwarf2_frame_state_reg *,
-					     struct frame_info *));
-
-/* Set the architecture-specific signal trampoline recognition
-   function for GDBARCH to SIGNAL_FRAME_P.  */
-
-extern void
-  dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
-				   int (*signal_frame_p) (struct gdbarch *,
-							  struct frame_info *));
-
-/* Set the architecture-specific adjustment of .eh_frame and .debug_frame
-   register numbers.  */
-
-extern void
-  dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
-				  int (*adjust_regnum) (struct gdbarch *,
-							int, int));
-
-/* Append the DWARF-2 frame unwinders to GDBARCH's list.  */
-
-void dwarf2_append_unwinders (struct gdbarch *gdbarch);
-
-/* Return the frame base methods for the function that contains PC, or
-   NULL if it can't be handled by the DWARF CFI frame unwinder.  */
-
-extern const struct frame_base *
-  dwarf2_frame_base_sniffer (struct frame_info *this_frame);
-
-/* Compute the DWARF CFA for a frame.  */
-
-CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame);
-
-/* Find the CFA information for PC.
-
-   Return 1 if a register is used for the CFA, or 0 if another
-   expression is used.  Throw an exception on error.
-
-   GDBARCH is the architecture to use.
-   DATA is the per-CU data.
-
-   REGNUM_OUT is an out parameter that is set to the register number.
-   OFFSET_OUT is the offset to use from this register.
-   These are only filled in when 1 is returned.
-
-   TEXT_OFFSET_OUT, CFA_START_OUT, and CFA_END_OUT describe the CFA
-   in other cases.  These are only used when 0 is returned.  */
-
-extern int dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc,
-				  struct dwarf2_per_cu_data *data,
-				  int *regnum_out, LONGEST *offset_out,
-				  CORE_ADDR *text_offset_out,
-				  const gdb_byte **cfa_start_out,
-				  const gdb_byte **cfa_end_out);
-
-#endif /* dwarf2-frame.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame-tailcall.c ./gdb/dwarf2-frame-tailcall.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame-tailcall.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2-frame-tailcall.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,475 +0,0 @@
-/* Virtual tail call frames unwinder for GDB.
-
-   Copyright (C) 2010-2020 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 "dwarf2-frame-tailcall.h"
-#include "dwarf2loc.h"
-#include "frame-unwind.h"
-#include "block.h"
-#include "hashtab.h"
-#include "gdbtypes.h"
-#include "regcache.h"
-#include "value.h"
-#include "dwarf2-frame.h"
-#include "gdbarch.h"
-
-/* Contains struct tailcall_cache indexed by next_bottom_frame.  */
-static htab_t cache_htab;
-
-/* Associate structure of the unwinder to call_site_chain.  Lifetime of this
-   structure is maintained by REFC decremented by dealloc_cache, all of them
-   get deleted during reinit_frame_cache.  */
-struct tailcall_cache
-{
-  /* It must be the first one of this struct.  It is the furthest callee.  */
-  struct frame_info *next_bottom_frame;
-
-  /* Reference count.  The whole chain of virtual tail call frames shares one
-     tailcall_cache.  */
-  int refc;
-
-  /* Associated found virtual tail call frames chain, it is never NULL.  */
-  struct call_site_chain *chain;
-
-  /* Cached pretended_chain_levels result.  */
-  int chain_levels;
-
-  /* Unwound PC from the top (caller) frame, as it is not contained
-     in CHAIN.  */
-  CORE_ADDR prev_pc;
-
-  /* Compensate SP in caller frames appropriately.  prev_sp and
-     entry_cfa_sp_offset are valid only if PREV_SP_P.  PREV_SP is SP at the top
-     (caller) frame.  ENTRY_CFA_SP_OFFSET is shift of SP in tail call frames
-     against next_bottom_frame SP.  */
-  unsigned prev_sp_p : 1;
-  CORE_ADDR prev_sp;
-  LONGEST entry_cfa_sp_offset;
-};
-
-/* hash_f for htab_create_alloc of cache_htab.  */
-
-static hashval_t
-cache_hash (const void *arg)
-{
-  const struct tailcall_cache *cache = (const struct tailcall_cache *) arg;
-
-  return htab_hash_pointer (cache->next_bottom_frame);
-}
-
-/* eq_f for htab_create_alloc of cache_htab.  */
-
-static int
-cache_eq (const void *arg1, const void *arg2)
-{
-  const struct tailcall_cache *cache1 = (const struct tailcall_cache *) arg1;
-  const struct tailcall_cache *cache2 = (const struct tailcall_cache *) arg2;
-
-  return cache1->next_bottom_frame == cache2->next_bottom_frame;
-}
-
-/* Create new tailcall_cache for NEXT_BOTTOM_FRAME, NEXT_BOTTOM_FRAME must not
-   yet have been indexed by cache_htab.  Caller holds one reference of the new
-   tailcall_cache.  */
-
-static struct tailcall_cache *
-cache_new_ref1 (struct frame_info *next_bottom_frame)
-{
-  struct tailcall_cache *cache = XCNEW (struct tailcall_cache);
-  void **slot;
-
-  cache->next_bottom_frame = next_bottom_frame;
-  cache->refc = 1;
-
-  slot = htab_find_slot (cache_htab, cache, INSERT);
-  gdb_assert (*slot == NULL);
-  *slot = cache;
-
-  return cache;
-}
-
-/* Create new reference to CACHE.  */
-
-static void
-cache_ref (struct tailcall_cache *cache)
-{
-  gdb_assert (cache->refc > 0);
-
-  cache->refc++;
-}
-
-/* Drop reference to CACHE, possibly fully freeing it and unregistering it from
-   cache_htab.  */
-
-static void
-cache_unref (struct tailcall_cache *cache)
-{
-  gdb_assert (cache->refc > 0);
-
-  if (!--cache->refc)
-    {
-      gdb_assert (htab_find_slot (cache_htab, cache, NO_INSERT) != NULL);
-      htab_remove_elt (cache_htab, cache);
-
-      xfree (cache->chain);
-      xfree (cache);
-    }
-}
-
-/* Return 1 if FI is a non-bottom (not the callee) tail call frame.  Otherwise
-   return 0.  */
-
-static int
-frame_is_tailcall (struct frame_info *fi)
-{
-  return frame_unwinder_is (fi, &dwarf2_tailcall_frame_unwind);
-}
-
-/* Try to find tailcall_cache in cache_htab if FI is a part of its virtual tail
-   call chain.  Otherwise return NULL.  No new reference is created.  */
-
-static struct tailcall_cache *
-cache_find (struct frame_info *fi)
-{
-  struct tailcall_cache *cache;
-  void **slot;
-
-  while (frame_is_tailcall (fi))
-    {
-      fi = get_next_frame (fi);
-      gdb_assert (fi != NULL);
-    }
-
-  slot = htab_find_slot (cache_htab, &fi, NO_INSERT);
-  if (slot == NULL)
-    return NULL;
-
-  cache = (struct tailcall_cache *) *slot;
-  gdb_assert (cache != NULL);
-  return cache;
-}
-
-/* Number of virtual frames between THIS_FRAME and CACHE->NEXT_BOTTOM_FRAME.
-   If THIS_FRAME is CACHE-> NEXT_BOTTOM_FRAME return -1.  */
-
-static int
-existing_next_levels (struct frame_info *this_frame,
-		      struct tailcall_cache *cache)
-{
-  int retval = (frame_relative_level (this_frame)
-		- frame_relative_level (cache->next_bottom_frame) - 1);
-
-  gdb_assert (retval >= -1);
-
-  return retval;
-}
-
-/* The number of virtual tail call frames in CHAIN.  With no virtual tail call
-   frames the function would return 0 (but CHAIN does not exist in such
-   case).  */
-
-static int
-pretended_chain_levels (struct call_site_chain *chain)
-{
-  int chain_levels;
-
-  gdb_assert (chain != NULL);
-
-  if (chain->callers == chain->length && chain->callees == chain->length)
-    return chain->length;
-
-  chain_levels = chain->callers + chain->callees;
-  gdb_assert (chain_levels <= chain->length);
-
-  return chain_levels;
-}
-
-/* Implementation of frame_this_id_ftype.  THIS_CACHE must be already
-   initialized with tailcall_cache, THIS_FRAME must be a part of THIS_CACHE.
-
-   Specific virtual tail call frames are tracked by INLINE_DEPTH.  */
-
-static void
-tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache,
-			struct frame_id *this_id)
-{
-  struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache;
-  struct frame_info *next_frame;
-
-  /* Tail call does not make sense for a sentinel frame.  */
-  next_frame = get_next_frame (this_frame);
-  gdb_assert (next_frame != NULL);
-
-  *this_id = get_frame_id (next_frame);
-  (*this_id).code_addr = get_frame_pc (this_frame);
-  (*this_id).code_addr_p = 1;
-  (*this_id).artificial_depth = (cache->chain_levels
-				 - existing_next_levels (this_frame, cache));
-  gdb_assert ((*this_id).artificial_depth > 0);
-}
-
-/* Find PC to be unwound from THIS_FRAME.  THIS_FRAME must be a part of
-   CACHE.  */
-
-static CORE_ADDR
-pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache)
-{
-  int next_levels = existing_next_levels (this_frame, cache);
-  struct call_site_chain *chain = cache->chain;
-
-  gdb_assert (chain != NULL);
-
-  next_levels++;
-  gdb_assert (next_levels >= 0);
-
-  if (next_levels < chain->callees)
-    return chain->call_site[chain->length - next_levels - 1]->pc;
-  next_levels -= chain->callees;
-
-  /* Otherwise CHAIN->CALLEES are already covered by CHAIN->CALLERS.  */
-  if (chain->callees != chain->length)
-    {
-      if (next_levels < chain->callers)
-	return chain->call_site[chain->callers - next_levels - 1]->pc;
-      next_levels -= chain->callers;
-    }
-
-  gdb_assert (next_levels == 0);
-  return cache->prev_pc;
-}
-
-/* Implementation of frame_prev_register_ftype.  If no specific register
-   override is supplied NULL is returned (this is incompatible with
-   frame_prev_register_ftype semantics).  next_bottom_frame and tail call
-   frames unwind the NULL case differently.  */
-
-struct value *
-dwarf2_tailcall_prev_register_first (struct frame_info *this_frame,
-				     void **tailcall_cachep, int regnum)
-{
-  struct gdbarch *this_gdbarch = get_frame_arch (this_frame);
-  struct tailcall_cache *cache = (struct tailcall_cache *) *tailcall_cachep;
-  CORE_ADDR addr;
-
-  if (regnum == gdbarch_pc_regnum (this_gdbarch))
-    addr = pretend_pc (this_frame, cache);
-  else if (cache->prev_sp_p && regnum == gdbarch_sp_regnum (this_gdbarch))
-    {
-      int next_levels = existing_next_levels (this_frame, cache);
-
-      if (next_levels == cache->chain_levels - 1)
-	addr = cache->prev_sp;
-      else
-	addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset;
-    }
-  else
-    return NULL;
-
-  return frame_unwind_got_address (this_frame, regnum, addr);
-}
-
-/* Implementation of frame_prev_register_ftype for tail call frames.  Register
-   set of virtual tail call frames is assumed to be the one of the top (caller)
-   frame - assume unchanged register value for NULL from
-   dwarf2_tailcall_prev_register_first.  */
-
-static struct value *
-tailcall_frame_prev_register (struct frame_info *this_frame,
-			       void **this_cache, int regnum)
-{
-  struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache;
-  struct value *val;
-
-  gdb_assert (this_frame != cache->next_bottom_frame);
-
-  val = dwarf2_tailcall_prev_register_first (this_frame, this_cache, regnum);
-  if (val)
-    return val;
-
-  return frame_unwind_got_register (this_frame, regnum, regnum);
-}
-
-/* Implementation of frame_sniffer_ftype.  It will never find a new chain, use
-   dwarf2_tailcall_sniffer_first for the bottom (callee) frame.  It will find
-   all the predecessing virtual tail call frames, it will return false when
-   there exist no more tail call frames in this chain.  */
-
-static int
-tailcall_frame_sniffer (const struct frame_unwind *self,
-			 struct frame_info *this_frame, void **this_cache)
-{
-  struct frame_info *next_frame;
-  int next_levels;
-  struct tailcall_cache *cache;
-
-  if (!dwarf2_frame_unwinders_enabled_p)
-    return 0;
-
-  /* Inner tail call element does not make sense for a sentinel frame.  */
-  next_frame = get_next_frame (this_frame);
-  if (next_frame == NULL)
-    return 0;
-
-  cache = cache_find (next_frame);
-  if (cache == NULL)
-    return 0;
-
-  cache_ref (cache);
-
-  next_levels = existing_next_levels (this_frame, cache);
-
-  /* NEXT_LEVELS is -1 only in dwarf2_tailcall_sniffer_first.  */
-  gdb_assert (next_levels >= 0);
-  gdb_assert (next_levels <= cache->chain_levels);
-
-  if (next_levels == cache->chain_levels)
-    {
-      cache_unref (cache);
-      return 0;
-    }
-
-  *this_cache = cache;
-  return 1;
-}
-
-/* The initial "sniffer" whether THIS_FRAME is a bottom (callee) frame of a new
-   chain to create.  Keep TAILCALL_CACHEP NULL if it did not find any chain,
-   initialize it otherwise.  No tail call chain is created if there are no
-   unambiguous virtual tail call frames to report.
-   
-   ENTRY_CFA_SP_OFFSETP is NULL if no special SP handling is possible,
-   otherwise *ENTRY_CFA_SP_OFFSETP is the number of bytes to subtract from tail
-   call frames frame base to get the SP value there - to simulate return
-   address pushed on the stack.  */
-
-void
-dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
-			       void **tailcall_cachep,
-			       const LONGEST *entry_cfa_sp_offsetp)
-{
-  CORE_ADDR prev_pc = 0, prev_sp = 0;	/* GCC warning.  */
-  int prev_sp_p = 0;
-  CORE_ADDR this_pc;
-  struct gdbarch *prev_gdbarch;
-  struct call_site_chain *chain = NULL;
-  struct tailcall_cache *cache;
-
-  gdb_assert (*tailcall_cachep == NULL);
-
-  /* PC may be after the function if THIS_FRAME calls noreturn function,
-     get_frame_address_in_block will decrease it by 1 in such case.  */
-  this_pc = get_frame_address_in_block (this_frame);
-
-  /* Catch any unwinding errors.  */
-  try
-    {
-      int sp_regnum;
-
-      prev_gdbarch = frame_unwind_arch (this_frame);
-
-      /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p.  */
-      prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame);
-
-      /* call_site_find_chain can throw an exception.  */
-      chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc);
-
-      if (entry_cfa_sp_offsetp != NULL)
-	{
-	  sp_regnum = gdbarch_sp_regnum (prev_gdbarch);
-	  if (sp_regnum != -1)
-	    {
-	      prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum);
-	      prev_sp_p = 1;
-	    }
-	}
-    }
-  catch (const gdb_exception_error &except)
-    {
-      if (entry_values_debug)
-	exception_print (gdb_stdout, except);
-      return;
-    }
-
-  /* Ambiguous unwind or unambiguous unwind verified as matching.  */
-  if (chain == NULL || chain->length == 0)
-    {
-      xfree (chain);
-      return;
-    }
-
-  cache = cache_new_ref1 (this_frame);
-  *tailcall_cachep = cache;
-  cache->chain = chain;
-  cache->prev_pc = prev_pc;
-  cache->chain_levels = pretended_chain_levels (chain);
-  cache->prev_sp_p = prev_sp_p;
-  if (cache->prev_sp_p)
-    {
-      cache->prev_sp = prev_sp;
-      cache->entry_cfa_sp_offset = *entry_cfa_sp_offsetp;
-    }
-  gdb_assert (cache->chain_levels > 0);
-}
-
-/* Implementation of frame_dealloc_cache_ftype.  It can be called even for the
-   bottom chain frame from dwarf2_frame_dealloc_cache which is not a real
-   TAILCALL_FRAME.  */
-
-static void
-tailcall_frame_dealloc_cache (struct frame_info *self, void *this_cache)
-{
-  struct tailcall_cache *cache = (struct tailcall_cache *) this_cache;
-
-  cache_unref (cache);
-}
-
-/* Implementation of frame_prev_arch_ftype.  We assume all the virtual tail
-   call frames have gdbarch of the bottom (callee) frame.  */
-
-static struct gdbarch *
-tailcall_frame_prev_arch (struct frame_info *this_frame,
-			  void **this_prologue_cache)
-{
-  struct tailcall_cache *cache = (struct tailcall_cache *) *this_prologue_cache;
-
-  return get_frame_arch (cache->next_bottom_frame);
-}
-
-/* Virtual tail call frame unwinder if dwarf2_tailcall_sniffer_first finds
-   a chain to create.  */
-
-const struct frame_unwind dwarf2_tailcall_frame_unwind =
-{
-  TAILCALL_FRAME,
-  default_frame_unwind_stop_reason,
-  tailcall_frame_this_id,
-  tailcall_frame_prev_register,
-  NULL,
-  tailcall_frame_sniffer,
-  tailcall_frame_dealloc_cache,
-  tailcall_frame_prev_arch
-};
-
-void
-_initialize_tailcall_frame (void)
-{
-  cache_htab = htab_create_alloc (50, cache_hash, cache_eq, NULL, xcalloc,
-				  xfree);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame-tailcall.h ./gdb/dwarf2-frame-tailcall.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2-frame-tailcall.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2-frame-tailcall.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-/* Definitions for virtual tail call frames unwinder for GDB.
-
-   Copyright (C) 2010-2020 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 DWARF2_FRAME_TAILCALL_H
-#define DWARF2_FRAME_TAILCALL_H 1
-
-struct frame_info;
-struct frame_unwind;
-
-/* The tail call frame unwinder.  */
-
-extern void
-  dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
-				 void **tailcall_cachep,
-				 const LONGEST *entry_cfa_sp_offsetp);
-
-extern struct value *
-  dwarf2_tailcall_prev_register_first (struct frame_info *this_frame,
-				       void **tailcall_cachep, int regnum);
-
-extern const struct frame_unwind dwarf2_tailcall_frame_unwind;
-
-#endif /* !DWARF2_FRAME_TAILCALL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2loc.c ./gdb/dwarf2loc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2loc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2loc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,4532 +0,0 @@
-/* DWARF 2 location expression support for GDB.
-
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
-
-   Contributed by Daniel Jacobowitz, MontaVista Software, 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 "ui-out.h"
-#include "value.h"
-#include "frame.h"
-#include "gdbcore.h"
-#include "target.h"
-#include "inferior.h"
-#include "ax.h"
-#include "ax-gdb.h"
-#include "regcache.h"
-#include "objfiles.h"
-#include "block.h"
-#include "gdbcmd.h"
-#include "complaints.h"
-#include "dwarf2.h"
-#include "dwarf2expr.h"
-#include "dwarf2loc.h"
-#include "dwarf2read.h"
-#include "dwarf2-frame.h"
-#include "compile/compile.h"
-#include "gdbsupport/selftest.h"
-#include <algorithm>
-#include <vector>
-#include <unordered_set>
-#include "gdbsupport/underlying.h"
-#include "gdbsupport/byte-vector.h"
-
-static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
-						    struct frame_info *frame,
-						    const gdb_byte *data,
-						    size_t size,
-						    struct dwarf2_per_cu_data *per_cu,
-						    struct type *subobj_type,
-						    LONGEST subobj_byte_offset);
-
-static struct call_site_parameter *dwarf_expr_reg_to_entry_parameter
-    (struct frame_info *frame,
-     enum call_site_parameter_kind kind,
-     union call_site_parameter_u kind_u,
-     struct dwarf2_per_cu_data **per_cu_return);
-
-static struct value *indirect_synthetic_pointer
-  (sect_offset die, LONGEST byte_offset,
-   struct dwarf2_per_cu_data *per_cu,
-   struct frame_info *frame,
-   struct type *type, bool resolve_abstract_p = false);
-
-/* Until these have formal names, we define these here.
-   ref: http://gcc.gnu.org/wiki/DebugFission
-   Each entry in .debug_loc.dwo begins with a byte that describes the entry,
-   and is then followed by data specific to that entry.  */
-
-enum debug_loc_kind
-{
-  /* Indicates the end of the list of entries.  */
-  DEBUG_LOC_END_OF_LIST = 0,
-
-  /* This is followed by an unsigned LEB128 number that is an index into
-     .debug_addr and specifies the base address for all following entries.  */
-  DEBUG_LOC_BASE_ADDRESS = 1,
-
-  /* This is followed by two unsigned LEB128 numbers that are indices into
-     .debug_addr and specify the beginning and ending addresses, and then
-     a normal location expression as in .debug_loc.  */
-  DEBUG_LOC_START_END = 2,
-
-  /* This is followed by an unsigned LEB128 number that is an index into
-     .debug_addr and specifies the beginning address, and a 4 byte unsigned
-     number that specifies the length, and then a normal location expression
-     as in .debug_loc.  */
-  DEBUG_LOC_START_LENGTH = 3,
-
-  /* An internal value indicating there is insufficient data.  */
-  DEBUG_LOC_BUFFER_OVERFLOW = -1,
-
-  /* An internal value indicating an invalid kind of entry was found.  */
-  DEBUG_LOC_INVALID_ENTRY = -2
-};
-
-/* Helper function which throws an error if a synthetic pointer is
-   invalid.  */
-
-static void
-invalid_synthetic_pointer (void)
-{
-  error (_("access outside bounds of object "
-	   "referenced via synthetic pointer"));
-}
-
-/* Decode the addresses in a non-dwo .debug_loc entry.
-   A pointer to the next byte to examine is returned in *NEW_PTR.
-   The encoded low,high addresses are return in *LOW,*HIGH.
-   The result indicates the kind of entry found.  */
-
-static enum debug_loc_kind
-decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end,
-			    const gdb_byte **new_ptr,
-			    CORE_ADDR *low, CORE_ADDR *high,
-			    enum bfd_endian byte_order,
-			    unsigned int addr_size,
-			    int signed_addr_p)
-{
-  CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
-
-  if (buf_end - loc_ptr < 2 * addr_size)
-    return DEBUG_LOC_BUFFER_OVERFLOW;
-
-  if (signed_addr_p)
-    *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
-  else
-    *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-  loc_ptr += addr_size;
-
-  if (signed_addr_p)
-    *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
-  else
-    *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-  loc_ptr += addr_size;
-
-  *new_ptr = loc_ptr;
-
-  /* A base-address-selection entry.  */
-  if ((*low & base_mask) == base_mask)
-    return DEBUG_LOC_BASE_ADDRESS;
-
-  /* An end-of-list entry.  */
-  if (*low == 0 && *high == 0)
-    return DEBUG_LOC_END_OF_LIST;
-
-  return DEBUG_LOC_START_END;
-}
-
-/* Decode the addresses in .debug_loclists entry.
-   A pointer to the next byte to examine is returned in *NEW_PTR.
-   The encoded low,high addresses are return in *LOW,*HIGH.
-   The result indicates the kind of entry found.  */
-
-static enum debug_loc_kind
-decode_debug_loclists_addresses (struct dwarf2_per_cu_data *per_cu,
-				 const gdb_byte *loc_ptr,
-				 const gdb_byte *buf_end,
-				 const gdb_byte **new_ptr,
-				 CORE_ADDR *low, CORE_ADDR *high,
-				 enum bfd_endian byte_order,
-				 unsigned int addr_size,
-				 int signed_addr_p)
-{
-  uint64_t u64;
-
-  if (loc_ptr == buf_end)
-    return DEBUG_LOC_BUFFER_OVERFLOW;
-
-  switch (*loc_ptr++)
-    {
-    case DW_LLE_end_of_list:
-      *new_ptr = loc_ptr;
-      return DEBUG_LOC_END_OF_LIST;
-    case DW_LLE_base_address:
-      if (loc_ptr + addr_size > buf_end)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      if (signed_addr_p)
-	*high = extract_signed_integer (loc_ptr, addr_size, byte_order);
-      else
-	*high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-      loc_ptr += addr_size;
-      *new_ptr = loc_ptr;
-      return DEBUG_LOC_BASE_ADDRESS;
-    case DW_LLE_offset_pair:
-      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
-      if (loc_ptr == NULL)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *low = u64;
-      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
-      if (loc_ptr == NULL)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *high = u64;
-      *new_ptr = loc_ptr;
-      return DEBUG_LOC_START_END;
-    default:
-      return DEBUG_LOC_INVALID_ENTRY;
-    }
-}
-
-/* Decode the addresses in .debug_loc.dwo entry.
-   A pointer to the next byte to examine is returned in *NEW_PTR.
-   The encoded low,high addresses are return in *LOW,*HIGH.
-   The result indicates the kind of entry found.  */
-
-static enum debug_loc_kind
-decode_debug_loc_dwo_addresses (struct dwarf2_per_cu_data *per_cu,
-				const gdb_byte *loc_ptr,
-				const gdb_byte *buf_end,
-				const gdb_byte **new_ptr,
-				CORE_ADDR *low, CORE_ADDR *high,
-				enum bfd_endian byte_order)
-{
-  uint64_t low_index, high_index;
-
-  if (loc_ptr == buf_end)
-    return DEBUG_LOC_BUFFER_OVERFLOW;
-
-  switch (*loc_ptr++)
-    {
-    case DW_LLE_GNU_end_of_list_entry:
-      *new_ptr = loc_ptr;
-      return DEBUG_LOC_END_OF_LIST;
-    case DW_LLE_GNU_base_address_selection_entry:
-      *low = 0;
-      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
-      if (loc_ptr == NULL)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *high = dwarf2_read_addr_index (per_cu, high_index);
-      *new_ptr = loc_ptr;
-      return DEBUG_LOC_BASE_ADDRESS;
-    case DW_LLE_GNU_start_end_entry:
-      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
-      if (loc_ptr == NULL)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *low = dwarf2_read_addr_index (per_cu, low_index);
-      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
-      if (loc_ptr == NULL)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *high = dwarf2_read_addr_index (per_cu, high_index);
-      *new_ptr = loc_ptr;
-      return DEBUG_LOC_START_END;
-    case DW_LLE_GNU_start_length_entry:
-      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
-      if (loc_ptr == NULL)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *low = dwarf2_read_addr_index (per_cu, low_index);
-      if (loc_ptr + 4 > buf_end)
-	return DEBUG_LOC_BUFFER_OVERFLOW;
-      *high = *low;
-      *high += extract_unsigned_integer (loc_ptr, 4, byte_order);
-      *new_ptr = loc_ptr + 4;
-      return DEBUG_LOC_START_LENGTH;
-    default:
-      return DEBUG_LOC_INVALID_ENTRY;
-    }
-}
-
-/* A function for dealing with location lists.  Given a
-   symbol baton (BATON) and a pc value (PC), find the appropriate
-   location expression, set *LOCEXPR_LENGTH, and return a pointer
-   to the beginning of the expression.  Returns NULL on failure.
-
-   For now, only return the first matching location expression; there
-   can be more than one in the list.  */
-
-const gdb_byte *
-dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
-				 size_t *locexpr_length, CORE_ADDR pc)
-{
-  struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
-  int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
-  /* Adjust base_address for relocatable objects.  */
-  CORE_ADDR base_offset = dwarf2_per_cu_text_offset (baton->per_cu);
-  CORE_ADDR base_address = baton->base_address + base_offset;
-  const gdb_byte *loc_ptr, *buf_end;
-
-  loc_ptr = baton->data;
-  buf_end = baton->data + baton->size;
-
-  while (1)
-    {
-      CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
-      int length;
-      enum debug_loc_kind kind;
-      const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
-
-      if (baton->from_dwo)
-	kind = decode_debug_loc_dwo_addresses (baton->per_cu,
-					       loc_ptr, buf_end, &new_ptr,
-					       &low, &high, byte_order);
-      else if (dwarf2_version (baton->per_cu) < 5)
-	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
-					   &low, &high,
-					   byte_order, addr_size,
-					   signed_addr_p);
-      else
-	kind = decode_debug_loclists_addresses (baton->per_cu,
-						loc_ptr, buf_end, &new_ptr,
-						&low, &high, byte_order,
-						addr_size, signed_addr_p);
-
-      loc_ptr = new_ptr;
-      switch (kind)
-	{
-	case DEBUG_LOC_END_OF_LIST:
-	  *locexpr_length = 0;
-	  return NULL;
-	case DEBUG_LOC_BASE_ADDRESS:
-	  base_address = high + base_offset;
-	  continue;
-	case DEBUG_LOC_START_END:
-	case DEBUG_LOC_START_LENGTH:
-	  break;
-	case DEBUG_LOC_BUFFER_OVERFLOW:
-	case DEBUG_LOC_INVALID_ENTRY:
-	  error (_("dwarf2_find_location_expression: "
-		   "Corrupted DWARF expression."));
-	default:
-	  gdb_assert_not_reached ("bad debug_loc_kind");
-	}
-
-      /* Otherwise, a location expression entry.
-	 If the entry is from a DWO, don't add base address: the entry is from
-	 .debug_addr which already has the DWARF "base address".  We still add
-	 base_offset in case we're debugging a PIE executable.  */
-      if (baton->from_dwo)
-	{
-	  low += base_offset;
-	  high += base_offset;
-	}
-      else
-	{
-	  low += base_address;
-	  high += base_address;
-	}
-
-      if (dwarf2_version (baton->per_cu) < 5)
-	{
-	  length = extract_unsigned_integer (loc_ptr, 2, byte_order);
-	  loc_ptr += 2;
-	}
-      else
-	{
-	  unsigned int bytes_read;
-
-	  length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
-	  loc_ptr += bytes_read;
-	}
-
-      if (low == high && pc == low)
-	{
-	  /* This is entry PC record present only at entry point
-	     of a function.  Verify it is really the function entry point.  */
-
-	  const struct block *pc_block = block_for_pc (pc);
-	  struct symbol *pc_func = NULL;
-
-	  if (pc_block)
-	    pc_func = block_linkage_function (pc_block);
-
-	  if (pc_func && pc == BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (pc_func)))
-	    {
-	      *locexpr_length = length;
-	      return loc_ptr;
-	    }
-	}
-
-      if (pc >= low && pc < high)
-	{
-	  *locexpr_length = length;
-	  return loc_ptr;
-	}
-
-      loc_ptr += length;
-    }
-}
-
-/* This is the baton used when performing dwarf2 expression
-   evaluation.  */
-struct dwarf_expr_baton
-{
-  struct frame_info *frame;
-  struct dwarf2_per_cu_data *per_cu;
-  CORE_ADDR obj_address;
-};
-
-/* Implement find_frame_base_location method for LOC_BLOCK functions using
-   DWARF expression for its DW_AT_frame_base.  */
-
-static void
-locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
-				  const gdb_byte **start, size_t *length)
-{
-  struct dwarf2_locexpr_baton *symbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
-
-  *length = symbaton->size;
-  *start = symbaton->data;
-}
-
-/* Implement the struct symbol_block_ops::get_frame_base method for
-   LOC_BLOCK functions using a DWARF expression as its DW_AT_frame_base.  */
-
-static CORE_ADDR
-locexpr_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
-{
-  struct gdbarch *gdbarch;
-  struct type *type;
-  struct dwarf2_locexpr_baton *dlbaton;
-  const gdb_byte *start;
-  size_t length;
-  struct value *result;
-
-  /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
-     Thus, it's supposed to provide the find_frame_base_location method as
-     well.  */
-  gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
-
-  gdbarch = get_frame_arch (frame);
-  type = builtin_type (gdbarch)->builtin_data_ptr;
-  dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
-
-  SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
-    (framefunc, get_frame_pc (frame), &start, &length);
-  result = dwarf2_evaluate_loc_desc (type, frame, start, length,
-				     dlbaton->per_cu);
-
-  /* The DW_AT_frame_base attribute contains a location description which
-     computes the base address itself.  However, the call to
-     dwarf2_evaluate_loc_desc returns a value representing a variable at
-     that address.  The frame base address is thus this variable's
-     address.  */
-  return value_address (result);
-}
-
-/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
-   function uses DWARF expression for its DW_AT_frame_base.  */
-
-const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs =
-{
-  locexpr_find_frame_base_location,
-  locexpr_get_frame_base
-};
-
-/* Implement find_frame_base_location method for LOC_BLOCK functions using
-   DWARF location list for its DW_AT_frame_base.  */
-
-static void
-loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
-				  const gdb_byte **start, size_t *length)
-{
-  struct dwarf2_loclist_baton *symbaton
-    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
-
-  *start = dwarf2_find_location_expression (symbaton, length, pc);
-}
-
-/* Implement the struct symbol_block_ops::get_frame_base method for
-   LOC_BLOCK functions using a DWARF location list as its DW_AT_frame_base.  */
-
-static CORE_ADDR
-loclist_get_frame_base (struct symbol *framefunc, struct frame_info *frame)
-{
-  struct gdbarch *gdbarch;
-  struct type *type;
-  struct dwarf2_loclist_baton *dlbaton;
-  const gdb_byte *start;
-  size_t length;
-  struct value *result;
-
-  /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
-     Thus, it's supposed to provide the find_frame_base_location method as
-     well.  */
-  gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
-
-  gdbarch = get_frame_arch (frame);
-  type = builtin_type (gdbarch)->builtin_data_ptr;
-  dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
-
-  SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
-    (framefunc, get_frame_pc (frame), &start, &length);
-  result = dwarf2_evaluate_loc_desc (type, frame, start, length,
-				     dlbaton->per_cu);
-
-  /* The DW_AT_frame_base attribute contains a location description which
-     computes the base address itself.  However, the call to
-     dwarf2_evaluate_loc_desc returns a value representing a variable at
-     that address.  The frame base address is thus this variable's
-     address.  */
-  return value_address (result);
-}
-
-/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
-   function uses DWARF location list for its DW_AT_frame_base.  */
-
-const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
-{
-  loclist_find_frame_base_location,
-  loclist_get_frame_base
-};
-
-/* See dwarf2loc.h.  */
-
-void
-func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc,
-				 const gdb_byte **start, size_t *length)
-{
-  if (SYMBOL_BLOCK_OPS (framefunc) != NULL)
-    {
-      const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc);
-
-      ops_block->find_frame_base_location (framefunc, pc, start, length);
-    }
-  else
-    *length = 0;
-
-  if (*length == 0)
-    error (_("Could not find the frame base for \"%s\"."),
-	   framefunc->natural_name ());
-}
-
-static CORE_ADDR
-get_frame_pc_for_per_cu_dwarf_call (void *baton)
-{
-  dwarf_expr_context *ctx = (dwarf_expr_context *) baton;
-
-  return ctx->get_frame_pc ();
-}
-
-static void
-per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset,
-		   struct dwarf2_per_cu_data *per_cu)
-{
-  struct dwarf2_locexpr_baton block;
-
-  block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu,
-				       get_frame_pc_for_per_cu_dwarf_call,
-				       ctx);
-
-  /* DW_OP_call_ref is currently not supported.  */
-  gdb_assert (block.per_cu == per_cu);
-
-  ctx->eval (block.data, block.size);
-}
-
-/* Given context CTX, section offset SECT_OFF, and compilation unit
-   data PER_CU, execute the "variable value" operation on the DIE
-   found at SECT_OFF.  */
-
-static struct value *
-sect_variable_value (struct dwarf_expr_context *ctx, sect_offset sect_off,
-		     struct dwarf2_per_cu_data *per_cu)
-{
-  struct type *die_type = dwarf2_fetch_die_type_sect_off (sect_off, per_cu);
-
-  if (die_type == NULL)
-    error (_("Bad DW_OP_GNU_variable_value DIE."));
-
-  /* Note: Things still work when the following test is removed.  This
-     test and error is here to conform to the proposed specification.  */
-  if (TYPE_CODE (die_type) != TYPE_CODE_INT
-      && TYPE_CODE (die_type) != TYPE_CODE_PTR)
-    error (_("Type of DW_OP_GNU_variable_value DIE must be an integer or pointer."));
-
-  struct type *type = lookup_pointer_type (die_type);
-  struct frame_info *frame = get_selected_frame (_("No frame selected."));
-  return indirect_synthetic_pointer (sect_off, 0, per_cu, frame, type, true);
-}
-
-class dwarf_evaluate_loc_desc : public dwarf_expr_context
-{
- public:
-
-  struct frame_info *frame;
-  struct dwarf2_per_cu_data *per_cu;
-  CORE_ADDR obj_address;
-
-  /* Helper function for dwarf2_evaluate_loc_desc.  Computes the CFA for
-     the frame in BATON.  */
-
-  CORE_ADDR get_frame_cfa () override
-  {
-    return dwarf2_frame_cfa (frame);
-  }
-
-  /* Helper function for dwarf2_evaluate_loc_desc.  Computes the PC for
-     the frame in BATON.  */
-
-  CORE_ADDR get_frame_pc () override
-  {
-    return get_frame_address_in_block (frame);
-  }
-
-  /* Using the objfile specified in BATON, find the address for the
-     current thread's thread-local storage with offset OFFSET.  */
-  CORE_ADDR get_tls_address (CORE_ADDR offset) override
-  {
-    struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
-
-    return target_translate_tls_address (objfile, offset);
-  }
-
-  /* Helper interface of per_cu_dwarf_call for
-     dwarf2_evaluate_loc_desc.  */
-
-  void dwarf_call (cu_offset die_offset) override
-  {
-    per_cu_dwarf_call (this, die_offset, per_cu);
-  }
-
-  /* Helper interface of sect_variable_value for
-     dwarf2_evaluate_loc_desc.  */
-
-  struct value *dwarf_variable_value (sect_offset sect_off) override
-  {
-    return sect_variable_value (this, sect_off, per_cu);
-  }
-
-  struct type *get_base_type (cu_offset die_offset, int size) override
-  {
-    struct type *result = dwarf2_get_die_type (die_offset, per_cu);
-    if (result == NULL)
-      error (_("Could not find type for DW_OP_const_type"));
-    if (size != 0 && TYPE_LENGTH (result) != size)
-      error (_("DW_OP_const_type has different sizes for type and data"));
-    return result;
-  }
-
-  /* Callback function for dwarf2_evaluate_loc_desc.
-     Fetch the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index.  */
-
-  CORE_ADDR get_addr_index (unsigned int index) override
-  {
-    return dwarf2_read_addr_index (per_cu, index);
-  }
-
-  /* Callback function for get_object_address. Return the address of the VLA
-     object.  */
-
-  CORE_ADDR get_object_address () override
-  {
-    if (obj_address == 0)
-      error (_("Location address is not set."));
-    return obj_address;
-  }
-
-  /* Execute DWARF block of call_site_parameter which matches KIND and
-     KIND_U.  Choose DEREF_SIZE value of that parameter.  Search
-     caller of this objects's frame.
-
-     The caller can be from a different CU - per_cu_dwarf_call
-     implementation can be more simple as it does not support cross-CU
-     DWARF executions.  */
-
-  void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
-				   union call_site_parameter_u kind_u,
-				   int deref_size) override
-  {
-    struct frame_info *caller_frame;
-    struct dwarf2_per_cu_data *caller_per_cu;
-    struct call_site_parameter *parameter;
-    const gdb_byte *data_src;
-    size_t size;
-
-    caller_frame = get_prev_frame (frame);
-
-    parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
-						   &caller_per_cu);
-    data_src = deref_size == -1 ? parameter->value : parameter->data_value;
-    size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
-
-    /* DEREF_SIZE size is not verified here.  */
-    if (data_src == NULL)
-      throw_error (NO_ENTRY_VALUE_ERROR,
-		   _("Cannot resolve DW_AT_call_data_value"));
-
-    scoped_restore save_frame = make_scoped_restore (&this->frame,
-						     caller_frame);
-    scoped_restore save_per_cu = make_scoped_restore (&this->per_cu,
-						      caller_per_cu);
-    scoped_restore save_obj_addr = make_scoped_restore (&this->obj_address,
-							(CORE_ADDR) 0);
-
-    scoped_restore save_arch = make_scoped_restore (&this->gdbarch);
-    this->gdbarch
-      = get_objfile_arch (dwarf2_per_cu_objfile (per_cu));
-    scoped_restore save_addr_size = make_scoped_restore (&this->addr_size);
-    this->addr_size = dwarf2_per_cu_addr_size (per_cu);
-    scoped_restore save_offset = make_scoped_restore (&this->offset);
-    this->offset = dwarf2_per_cu_text_offset (per_cu);
-
-    this->eval (data_src, size);
-  }
-
-  /* Using the frame specified in BATON, find the location expression
-     describing the frame base.  Return a pointer to it in START and
-     its length in LENGTH.  */
-  void get_frame_base (const gdb_byte **start, size_t * length) override
-  {
-    /* FIXME: cagney/2003-03-26: This code should be using
-       get_frame_base_address(), and then implement a dwarf2 specific
-       this_base method.  */
-    struct symbol *framefunc;
-    const struct block *bl = get_frame_block (frame, NULL);
-
-    if (bl == NULL)
-      error (_("frame address is not available."));
-
-    /* Use block_linkage_function, which returns a real (not inlined)
-       function, instead of get_frame_function, which may return an
-       inlined function.  */
-    framefunc = block_linkage_function (bl);
-
-    /* If we found a frame-relative symbol then it was certainly within
-       some function associated with a frame. If we can't find the frame,
-       something has gone wrong.  */
-    gdb_assert (framefunc != NULL);
-
-    func_get_frame_base_dwarf_block (framefunc,
-				     get_frame_address_in_block (frame),
-				     start, length);
-  }
-
-  /* Read memory at ADDR (length LEN) into BUF.  */
-
-  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
-  {
-    read_memory (addr, buf, len);
-  }
-
-  /* Using the frame specified in BATON, return the value of register
-     REGNUM, treated as a pointer.  */
-  CORE_ADDR read_addr_from_reg (int dwarf_regnum) override
-  {
-    struct gdbarch *gdbarch = get_frame_arch (frame);
-    int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum);
-
-    return address_from_register (regnum, frame);
-  }
-
-  /* Implement "get_reg_value" callback.  */
-
-  struct value *get_reg_value (struct type *type, int dwarf_regnum) override
-  {
-    struct gdbarch *gdbarch = get_frame_arch (frame);
-    int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum);
-
-    return value_from_register (type, regnum, frame);
-  }
-};
-
-/* See dwarf2loc.h.  */
-
-unsigned int entry_values_debug = 0;
-
-/* Helper to set entry_values_debug.  */
-
-static void
-show_entry_values_debug (struct ui_file *file, int from_tty,
-			 struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file,
-		    _("Entry values and tail call frames debugging is %s.\n"),
-		    value);
-}
-
-/* Find DW_TAG_call_site's DW_AT_call_target address.
-   CALLER_FRAME (for registers) can be NULL if it is not known.  This function
-   always returns valid address or it throws NO_ENTRY_VALUE_ERROR.  */
-
-static CORE_ADDR
-call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
-			  struct call_site *call_site,
-			  struct frame_info *caller_frame)
-{
-  switch (FIELD_LOC_KIND (call_site->target))
-    {
-    case FIELD_LOC_KIND_DWARF_BLOCK:
-      {
-	struct dwarf2_locexpr_baton *dwarf_block;
-	struct value *val;
-	struct type *caller_core_addr_type;
-	struct gdbarch *caller_arch;
-
-	dwarf_block = FIELD_DWARF_BLOCK (call_site->target);
-	if (dwarf_block == NULL)
-	  {
-	    struct bound_minimal_symbol msym;
-	    
-	    msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
-	    throw_error (NO_ENTRY_VALUE_ERROR,
-			 _("DW_AT_call_target is not specified at %s in %s"),
-			 paddress (call_site_gdbarch, call_site->pc),
-			 (msym.minsym == NULL ? "???"
-			  : msym.minsym->print_name ()));
-			
-	  }
-	if (caller_frame == NULL)
-	  {
-	    struct bound_minimal_symbol msym;
-	    
-	    msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
-	    throw_error (NO_ENTRY_VALUE_ERROR,
-			 _("DW_AT_call_target DWARF block resolving "
-			   "requires known frame which is currently not "
-			   "available at %s in %s"),
-			 paddress (call_site_gdbarch, call_site->pc),
-			 (msym.minsym == NULL ? "???"
-			  : msym.minsym->print_name ()));
-			
-	  }
-	caller_arch = get_frame_arch (caller_frame);
-	caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr;
-	val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame,
-					dwarf_block->data, dwarf_block->size,
-					dwarf_block->per_cu);
-	/* DW_AT_call_target is a DWARF expression, not a DWARF location.  */
-	if (VALUE_LVAL (val) == lval_memory)
-	  return value_address (val);
-	else
-	  return value_as_address (val);
-      }
-
-    case FIELD_LOC_KIND_PHYSNAME:
-      {
-	const char *physname;
-	struct bound_minimal_symbol msym;
-
-	physname = FIELD_STATIC_PHYSNAME (call_site->target);
-
-	/* Handle both the mangled and demangled PHYSNAME.  */
-	msym = lookup_minimal_symbol (physname, NULL, NULL);
-	if (msym.minsym == NULL)
-	  {
-	    msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
-	    throw_error (NO_ENTRY_VALUE_ERROR,
-			 _("Cannot find function \"%s\" for a call site target "
-			   "at %s in %s"),
-			 physname, paddress (call_site_gdbarch, call_site->pc),
-			 (msym.minsym == NULL ? "???"
-			  : msym.minsym->print_name ()));
-			
-	  }
-	return BMSYMBOL_VALUE_ADDRESS (msym);
-      }
-
-    case FIELD_LOC_KIND_PHYSADDR:
-      return FIELD_STATIC_PHYSADDR (call_site->target);
-
-    default:
-      internal_error (__FILE__, __LINE__, _("invalid call site target kind"));
-    }
-}
-
-/* Convert function entry point exact address ADDR to the function which is
-   compliant with TAIL_CALL_LIST_COMPLETE condition.  Throw
-   NO_ENTRY_VALUE_ERROR otherwise.  */
-
-static struct symbol *
-func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
-{
-  struct symbol *sym = find_pc_function (addr);
-  struct type *type;
-
-  if (sym == NULL || BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) != addr)
-    throw_error (NO_ENTRY_VALUE_ERROR,
-		 _("DW_TAG_call_site resolving failed to find function "
-		   "name for address %s"),
-		 paddress (gdbarch, addr));
-
-  type = SYMBOL_TYPE (sym);
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_FUNC);
-  gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
-
-  return sym;
-}
-
-/* Verify function with entry point exact address ADDR can never call itself
-   via its tail calls (incl. transitively).  Throw NO_ENTRY_VALUE_ERROR if it
-   can call itself via tail calls.
-
-   If a funtion can tail call itself its entry value based parameters are
-   unreliable.  There is no verification whether the value of some/all
-   parameters is unchanged through the self tail call, we expect if there is
-   a self tail call all the parameters can be modified.  */
-
-static void
-func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
-{
-  CORE_ADDR addr;
-
-  /* The verification is completely unordered.  Track here function addresses
-     which still need to be iterated.  */
-  std::vector<CORE_ADDR> todo;
-
-  /* Track here CORE_ADDRs which were already visited.  */
-  std::unordered_set<CORE_ADDR> addr_hash;
-
-  todo.push_back (verify_addr);
-  while (!todo.empty ())
-    {
-      struct symbol *func_sym;
-      struct call_site *call_site;
-
-      addr = todo.back ();
-      todo.pop_back ();
-
-      func_sym = func_addr_to_tail_call_list (gdbarch, addr);
-
-      for (call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym));
-	   call_site; call_site = call_site->tail_call_next)
-	{
-	  CORE_ADDR target_addr;
-
-	  /* CALLER_FRAME with registers is not available for tail-call jumped
-	     frames.  */
-	  target_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
-
-	  if (target_addr == verify_addr)
-	    {
-	      struct bound_minimal_symbol msym;
-	      
-	      msym = lookup_minimal_symbol_by_pc (verify_addr);
-	      throw_error (NO_ENTRY_VALUE_ERROR,
-			   _("DW_OP_entry_value resolving has found "
-			     "function \"%s\" at %s can call itself via tail "
-			     "calls"),
-			   (msym.minsym == NULL ? "???"
-			    : msym.minsym->print_name ()),
-			   paddress (gdbarch, verify_addr));
-	    }
-
-	  if (addr_hash.insert (target_addr).second)
-	    todo.push_back (target_addr);
-	}
-    }
-}
-
-/* Print user readable form of CALL_SITE->PC to gdb_stdlog.  Used only for
-   ENTRY_VALUES_DEBUG.  */
-
-static void
-tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
-{
-  CORE_ADDR addr = call_site->pc;
-  struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
-
-  fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
-		      (msym.minsym == NULL ? "???"
-		       : msym.minsym->print_name ()));
-
-}
-
-/* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP
-   only top callers and bottom callees which are present in both.  GDBARCH is
-   used only for ENTRY_VALUES_DEBUG.  RESULTP is NULL after return if there are
-   no remaining possibilities to provide unambiguous non-trivial result.
-   RESULTP should point to NULL on the first (initialization) call.  Caller is
-   responsible for xfree of any RESULTP data.  */
-
-static void
-chain_candidate (struct gdbarch *gdbarch,
-		 gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
-		 std::vector<struct call_site *> *chain)
-{
-  long length = chain->size ();
-  int callers, callees, idx;
-
-  if (*resultp == NULL)
-    {
-      /* Create the initial chain containing all the passed PCs.  */
-
-      struct call_site_chain *result
-	= ((struct call_site_chain *)
-	   xmalloc (sizeof (*result)
-		    + sizeof (*result->call_site) * (length - 1)));
-      result->length = length;
-      result->callers = result->callees = length;
-      if (!chain->empty ())
-	memcpy (result->call_site, chain->data (),
-		sizeof (*result->call_site) * length);
-      resultp->reset (result);
-
-      if (entry_values_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "tailcall: initial:");
-	  for (idx = 0; idx < length; idx++)
-	    tailcall_dump (gdbarch, result->call_site[idx]);
-	  fputc_unfiltered ('\n', gdb_stdlog);
-	}
-
-      return;
-    }
-
-  if (entry_values_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "tailcall: compare:");
-      for (idx = 0; idx < length; idx++)
-	tailcall_dump (gdbarch, chain->at (idx));
-      fputc_unfiltered ('\n', gdb_stdlog);
-    }
-
-  /* Intersect callers.  */
-
-  callers = std::min ((long) (*resultp)->callers, length);
-  for (idx = 0; idx < callers; idx++)
-    if ((*resultp)->call_site[idx] != chain->at (idx))
-      {
-	(*resultp)->callers = idx;
-	break;
-      }
-
-  /* Intersect callees.  */
-
-  callees = std::min ((long) (*resultp)->callees, length);
-  for (idx = 0; idx < callees; idx++)
-    if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
-	!= chain->at (length - 1 - idx))
-      {
-	(*resultp)->callees = idx;
-	break;
-      }
-
-  if (entry_values_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:");
-      for (idx = 0; idx < (*resultp)->callers; idx++)
-	tailcall_dump (gdbarch, (*resultp)->call_site[idx]);
-      fputs_unfiltered (" |", gdb_stdlog);
-      for (idx = 0; idx < (*resultp)->callees; idx++)
-	tailcall_dump (gdbarch,
-		       (*resultp)->call_site[(*resultp)->length
-					     - (*resultp)->callees + idx]);
-      fputc_unfiltered ('\n', gdb_stdlog);
-    }
-
-  if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
-    {
-      /* There are no common callers or callees.  It could be also a direct
-	 call (which has length 0) with ambiguous possibility of an indirect
-	 call - CALLERS == CALLEES == 0 is valid during the first allocation
-	 but any subsequence processing of such entry means ambiguity.  */
-      resultp->reset (NULL);
-      return;
-    }
-
-  /* See call_site_find_chain_1 why there is no way to reach the bottom callee
-     PC again.  In such case there must be two different code paths to reach
-     it.  CALLERS + CALLEES equal to LENGTH in the case of self tail-call.  */
-  gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
-}
-
-/* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
-   assumed frames between them use GDBARCH.  Use depth first search so we can
-   keep single CHAIN of call_site's back to CALLER_PC.  Function recursion
-   would have needless GDB stack overhead.  Caller is responsible for xfree of
-   the returned result.  Any unreliability results in thrown
-   NO_ENTRY_VALUE_ERROR.  */
-
-static struct call_site_chain *
-call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
-			CORE_ADDR callee_pc)
-{
-  CORE_ADDR save_callee_pc = callee_pc;
-  gdb::unique_xmalloc_ptr<struct call_site_chain> retval;
-  struct call_site *call_site;
-
-  /* CHAIN contains only the intermediate CALL_SITEs.  Neither CALLER_PC's
-     call_site nor any possible call_site at CALLEE_PC's function is there.
-     Any CALL_SITE in CHAIN will be iterated to its siblings - via
-     TAIL_CALL_NEXT.  This is inappropriate for CALLER_PC's call_site.  */
-  std::vector<struct call_site *> chain;
-
-  /* We are not interested in the specific PC inside the callee function.  */
-  callee_pc = get_pc_function_start (callee_pc);
-  if (callee_pc == 0)
-    throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"),
-		 paddress (gdbarch, save_callee_pc));
-
-  /* Mark CALL_SITEs so we do not visit the same ones twice.  */
-  std::unordered_set<CORE_ADDR> addr_hash;
-
-  /* Do not push CALL_SITE to CHAIN.  Push there only the first tail call site
-     at the target's function.  All the possible tail call sites in the
-     target's function will get iterated as already pushed into CHAIN via their
-     TAIL_CALL_NEXT.  */
-  call_site = call_site_for_pc (gdbarch, caller_pc);
-
-  while (call_site)
-    {
-      CORE_ADDR target_func_addr;
-      struct call_site *target_call_site;
-
-      /* CALLER_FRAME with registers is not available for tail-call jumped
-	 frames.  */
-      target_func_addr = call_site_to_target_addr (gdbarch, call_site, NULL);
-
-      if (target_func_addr == callee_pc)
-	{
-	  chain_candidate (gdbarch, &retval, &chain);
-	  if (retval == NULL)
-	    break;
-
-	  /* There is no way to reach CALLEE_PC again as we would prevent
-	     entering it twice as being already marked in ADDR_HASH.  */
-	  target_call_site = NULL;
-	}
-      else
-	{
-	  struct symbol *target_func;
-
-	  target_func = func_addr_to_tail_call_list (gdbarch, target_func_addr);
-	  target_call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func));
-	}
-
-      do
-	{
-	  /* Attempt to visit TARGET_CALL_SITE.  */
-
-	  if (target_call_site)
-	    {
-	      if (addr_hash.insert (target_call_site->pc).second)
-		{
-		  /* Successfully entered TARGET_CALL_SITE.  */
-
-		  chain.push_back (target_call_site);
-		  break;
-		}
-	    }
-
-	  /* Backtrack (without revisiting the originating call_site).  Try the
-	     callers's sibling; if there isn't any try the callers's callers's
-	     sibling etc.  */
-
-	  target_call_site = NULL;
-	  while (!chain.empty ())
-	    {
-	      call_site = chain.back ();
-	      chain.pop_back ();
-
-	      size_t removed = addr_hash.erase (call_site->pc);
-	      gdb_assert (removed == 1);
-
-	      target_call_site = call_site->tail_call_next;
-	      if (target_call_site)
-		break;
-	    }
-	}
-      while (target_call_site);
-
-      if (chain.empty ())
-	call_site = NULL;
-      else
-	call_site = chain.back ();
-    }
-
-  if (retval == NULL)
-    {
-      struct bound_minimal_symbol msym_caller, msym_callee;
-      
-      msym_caller = lookup_minimal_symbol_by_pc (caller_pc);
-      msym_callee = lookup_minimal_symbol_by_pc (callee_pc);
-      throw_error (NO_ENTRY_VALUE_ERROR,
-		   _("There are no unambiguously determinable intermediate "
-		     "callers or callees between caller function \"%s\" at %s "
-		     "and callee function \"%s\" at %s"),
-		   (msym_caller.minsym == NULL
-		    ? "???" : msym_caller.minsym->print_name ()),
-		   paddress (gdbarch, caller_pc),
-		   (msym_callee.minsym == NULL
-		    ? "???" : msym_callee.minsym->print_name ()),
-		   paddress (gdbarch, callee_pc));
-    }
-
-  return retval.release ();
-}
-
-/* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
-   assumed frames between them use GDBARCH.  If valid call_site_chain cannot be
-   constructed return NULL.  Caller is responsible for xfree of the returned
-   result.  */
-
-struct call_site_chain *
-call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
-		      CORE_ADDR callee_pc)
-{
-  struct call_site_chain *retval = NULL;
-
-  try
-    {
-      retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc);
-    }
-  catch (const gdb_exception_error &e)
-    {
-      if (e.error == NO_ENTRY_VALUE_ERROR)
-	{
-	  if (entry_values_debug)
-	    exception_print (gdb_stdout, e);
-
-	  return NULL;
-	}
-      else
-	throw;
-    }
-
-  return retval;
-}
-
-/* Return 1 if KIND and KIND_U match PARAMETER.  Return 0 otherwise.  */
-
-static int
-call_site_parameter_matches (struct call_site_parameter *parameter,
-			     enum call_site_parameter_kind kind,
-			     union call_site_parameter_u kind_u)
-{
-  if (kind == parameter->kind)
-    switch (kind)
-      {
-      case CALL_SITE_PARAMETER_DWARF_REG:
-	return kind_u.dwarf_reg == parameter->u.dwarf_reg;
-      case CALL_SITE_PARAMETER_FB_OFFSET:
-	return kind_u.fb_offset == parameter->u.fb_offset;
-      case CALL_SITE_PARAMETER_PARAM_OFFSET:
-	return kind_u.param_cu_off == parameter->u.param_cu_off;
-      }
-  return 0;
-}
-
-/* Fetch call_site_parameter from caller matching KIND and KIND_U.
-   FRAME is for callee.
-
-   Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
-   otherwise.  */
-
-static struct call_site_parameter *
-dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
-				   enum call_site_parameter_kind kind,
-				   union call_site_parameter_u kind_u,
-				   struct dwarf2_per_cu_data **per_cu_return)
-{
-  CORE_ADDR func_addr, caller_pc;
-  struct gdbarch *gdbarch;
-  struct frame_info *caller_frame;
-  struct call_site *call_site;
-  int iparams;
-  /* Initialize it just to avoid a GCC false warning.  */
-  struct call_site_parameter *parameter = NULL;
-  CORE_ADDR target_addr;
-
-  while (get_frame_type (frame) == INLINE_FRAME)
-    {
-      frame = get_prev_frame (frame);
-      gdb_assert (frame != NULL);
-    }
-
-  func_addr = get_frame_func (frame);
-  gdbarch = get_frame_arch (frame);
-  caller_frame = get_prev_frame (frame);
-  if (gdbarch != frame_unwind_arch (frame))
-    {
-      struct bound_minimal_symbol msym
-	= lookup_minimal_symbol_by_pc (func_addr);
-      struct gdbarch *caller_gdbarch = frame_unwind_arch (frame);
-
-      throw_error (NO_ENTRY_VALUE_ERROR,
-		   _("DW_OP_entry_value resolving callee gdbarch %s "
-		     "(of %s (%s)) does not match caller gdbarch %s"),
-		   gdbarch_bfd_arch_info (gdbarch)->printable_name,
-		   paddress (gdbarch, func_addr),
-		   (msym.minsym == NULL ? "???"
-		    : msym.minsym->print_name ()),
-		   gdbarch_bfd_arch_info (caller_gdbarch)->printable_name);
-    }
-
-  if (caller_frame == NULL)
-    {
-      struct bound_minimal_symbol msym
-	= lookup_minimal_symbol_by_pc (func_addr);
-
-      throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving "
-					   "requires caller of %s (%s)"),
-		   paddress (gdbarch, func_addr),
-		   (msym.minsym == NULL ? "???"
-		    : msym.minsym->print_name ()));
-    }
-  caller_pc = get_frame_pc (caller_frame);
-  call_site = call_site_for_pc (gdbarch, caller_pc);
-
-  target_addr = call_site_to_target_addr (gdbarch, call_site, caller_frame);
-  if (target_addr != func_addr)
-    {
-      struct minimal_symbol *target_msym, *func_msym;
-
-      target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
-      func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
-      throw_error (NO_ENTRY_VALUE_ERROR,
-		   _("DW_OP_entry_value resolving expects callee %s at %s "
-		     "but the called frame is for %s at %s"),
-		   (target_msym == NULL ? "???"
-					: target_msym->print_name ()),
-		   paddress (gdbarch, target_addr),
-		   func_msym == NULL ? "???" : func_msym->print_name (),
-		   paddress (gdbarch, func_addr));
-    }
-
-  /* No entry value based parameters would be reliable if this function can
-     call itself via tail calls.  */
-  func_verify_no_selftailcall (gdbarch, func_addr);
-
-  for (iparams = 0; iparams < call_site->parameter_count; iparams++)
-    {
-      parameter = &call_site->parameter[iparams];
-      if (call_site_parameter_matches (parameter, kind, kind_u))
-	break;
-    }
-  if (iparams == call_site->parameter_count)
-    {
-      struct minimal_symbol *msym
-	= lookup_minimal_symbol_by_pc (caller_pc).minsym;
-
-      /* DW_TAG_call_site_parameter will be missing just if GCC could not
-	 determine its value.  */
-      throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter "
-					   "at DW_TAG_call_site %s at %s"),
-		   paddress (gdbarch, caller_pc),
-		   msym == NULL ? "???" : msym->print_name ()); 
-    }
-
-  *per_cu_return = call_site->per_cu;
-  return parameter;
-}
-
-/* Return value for PARAMETER matching DEREF_SIZE.  If DEREF_SIZE is -1, return
-   the normal DW_AT_call_value block.  Otherwise return the
-   DW_AT_call_data_value (dereferenced) block.
-
-   TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned
-   struct value.
-
-   Function always returns non-NULL, non-optimized out value.  It throws
-   NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason.  */
-
-static struct value *
-dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
-				CORE_ADDR deref_size, struct type *type,
-				struct frame_info *caller_frame,
-				struct dwarf2_per_cu_data *per_cu)
-{
-  const gdb_byte *data_src;
-  gdb_byte *data;
-  size_t size;
-
-  data_src = deref_size == -1 ? parameter->value : parameter->data_value;
-  size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
-
-  /* DEREF_SIZE size is not verified here.  */
-  if (data_src == NULL)
-    throw_error (NO_ENTRY_VALUE_ERROR,
-		 _("Cannot resolve DW_AT_call_data_value"));
-
-  /* DW_AT_call_value is a DWARF expression, not a DWARF
-     location.  Postprocessing of DWARF_VALUE_MEMORY would lose the type from
-     DWARF block.  */
-  data = (gdb_byte *) alloca (size + 1);
-  memcpy (data, data_src, size);
-  data[size] = DW_OP_stack_value;
-
-  return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu);
-}
-
-/* VALUE must be of type lval_computed with entry_data_value_funcs.  Perform
-   the indirect method on it, that is use its stored target value, the sole
-   purpose of entry_data_value_funcs..  */
-
-static struct value *
-entry_data_value_coerce_ref (const struct value *value)
-{
-  struct type *checked_type = check_typedef (value_type (value));
-  struct value *target_val;
-
-  if (!TYPE_IS_REFERENCE (checked_type))
-    return NULL;
-
-  target_val = (struct value *) value_computed_closure (value);
-  value_incref (target_val);
-  return target_val;
-}
-
-/* Implement copy_closure.  */
-
-static void *
-entry_data_value_copy_closure (const struct value *v)
-{
-  struct value *target_val = (struct value *) value_computed_closure (v);
-
-  value_incref (target_val);
-  return target_val;
-}
-
-/* Implement free_closure.  */
-
-static void
-entry_data_value_free_closure (struct value *v)
-{
-  struct value *target_val = (struct value *) value_computed_closure (v);
-
-  value_decref (target_val);
-}
-
-/* Vector for methods for an entry value reference where the referenced value
-   is stored in the caller.  On the first dereference use
-   DW_AT_call_data_value in the caller.  */
-
-static const struct lval_funcs entry_data_value_funcs =
-{
-  NULL,	/* read */
-  NULL,	/* write */
-  NULL,	/* indirect */
-  entry_data_value_coerce_ref,
-  NULL,	/* check_synthetic_pointer */
-  entry_data_value_copy_closure,
-  entry_data_value_free_closure
-};
-
-/* Read parameter of TYPE at (callee) FRAME's function entry.  KIND and KIND_U
-   are used to match DW_AT_location at the caller's
-   DW_TAG_call_site_parameter.
-
-   Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
-   cannot resolve the parameter for any reason.  */
-
-static struct value *
-value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
-			  enum call_site_parameter_kind kind,
-			  union call_site_parameter_u kind_u)
-{
-  struct type *checked_type = check_typedef (type);
-  struct type *target_type = TYPE_TARGET_TYPE (checked_type);
-  struct frame_info *caller_frame = get_prev_frame (frame);
-  struct value *outer_val, *target_val, *val;
-  struct call_site_parameter *parameter;
-  struct dwarf2_per_cu_data *caller_per_cu;
-
-  parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
-						 &caller_per_cu);
-
-  outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
-					      type, caller_frame,
-					      caller_per_cu);
-
-  /* Check if DW_AT_call_data_value cannot be used.  If it should be
-     used and it is not available do not fall back to OUTER_VAL - dereferencing
-     TYPE_CODE_REF with non-entry data value would give current value - not the
-     entry value.  */
-
-  if (!TYPE_IS_REFERENCE (checked_type)
-      || TYPE_TARGET_TYPE (checked_type) == NULL)
-    return outer_val;
-
-  target_val = dwarf_entry_parameter_to_value (parameter,
-					       TYPE_LENGTH (target_type),
-					       target_type, caller_frame,
-					       caller_per_cu);
-
-  val = allocate_computed_value (type, &entry_data_value_funcs,
-				 release_value (target_val).release ());
-
-  /* Copy the referencing pointer to the new computed value.  */
-  memcpy (value_contents_raw (val), value_contents_raw (outer_val),
-	  TYPE_LENGTH (checked_type));
-  set_value_lazy (val, 0);
-
-  return val;
-}
-
-/* Read parameter of TYPE at (callee) FRAME's function entry.  DATA and
-   SIZE are DWARF block used to match DW_AT_location at the caller's
-   DW_TAG_call_site_parameter.
-
-   Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
-   cannot resolve the parameter for any reason.  */
-
-static struct value *
-value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
-			    const gdb_byte *block, size_t block_len)
-{
-  union call_site_parameter_u kind_u;
-
-  kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
-  if (kind_u.dwarf_reg != -1)
-    return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
-				     kind_u);
-
-  if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
-    return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
-                                     kind_u);
-
-  /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
-     suppressed during normal operation.  The expression can be arbitrary if
-     there is no caller-callee entry value binding expected.  */
-  throw_error (NO_ENTRY_VALUE_ERROR,
-	       _("DWARF-2 expression error: DW_OP_entry_value is supported "
-		 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
-}
-
-struct piece_closure
-{
-  /* Reference count.  */
-  int refc = 0;
-
-  /* The CU from which this closure's expression came.  */
-  struct dwarf2_per_cu_data *per_cu = NULL;
-
-  /* The pieces describing this variable.  */
-  std::vector<dwarf_expr_piece> pieces;
-
-  /* Frame ID of frame to which a register value is relative, used
-     only by DWARF_VALUE_REGISTER.  */
-  struct frame_id frame_id;
-};
-
-/* Allocate a closure for a value formed from separately-described
-   PIECES.  */
-
-static struct piece_closure *
-allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
-			std::vector<dwarf_expr_piece> &&pieces,
-			struct frame_info *frame)
-{
-  struct piece_closure *c = new piece_closure;
-
-  c->refc = 1;
-  c->per_cu = per_cu;
-  c->pieces = std::move (pieces);
-  if (frame == NULL)
-    c->frame_id = null_frame_id;
-  else
-    c->frame_id = get_frame_id (frame);
-
-  for (dwarf_expr_piece &piece : c->pieces)
-    if (piece.location == DWARF_VALUE_STACK)
-      value_incref (piece.v.value);
-
-  return c;
-}
-
-/* Return the number of bytes overlapping a contiguous chunk of N_BITS
-   bits whose first bit is located at bit offset START.  */
-
-static size_t
-bits_to_bytes (ULONGEST start, ULONGEST n_bits)
-{
-  return (start % 8 + n_bits + 7) / 8;
-}
-
-/* Read or write a pieced value V.  If FROM != NULL, operate in "write
-   mode": copy FROM into the pieces comprising V.  If FROM == NULL,
-   operate in "read mode": fetch the contents of the (lazy) value V by
-   composing it from its pieces.  */
-
-static void
-rw_pieced_value (struct value *v, struct value *from)
-{
-  int i;
-  LONGEST offset = 0, max_offset;
-  ULONGEST bits_to_skip;
-  gdb_byte *v_contents;
-  const gdb_byte *from_contents;
-  struct piece_closure *c
-    = (struct piece_closure *) value_computed_closure (v);
-  gdb::byte_vector buffer;
-  bool bits_big_endian = type_byte_order (value_type (v)) == BFD_ENDIAN_BIG;
-
-  if (from != NULL)
-    {
-      from_contents = value_contents (from);
-      v_contents = NULL;
-    }
-  else
-    {
-      if (value_type (v) != value_enclosing_type (v))
-	internal_error (__FILE__, __LINE__,
-			_("Should not be able to create a lazy value with "
-			  "an enclosing type"));
-      v_contents = value_contents_raw (v);
-      from_contents = NULL;
-    }
-
-  bits_to_skip = 8 * value_offset (v);
-  if (value_bitsize (v))
-    {
-      bits_to_skip += (8 * value_offset (value_parent (v))
-		       + value_bitpos (v));
-      if (from != NULL
-	  && (type_byte_order (value_type (from))
-	      == BFD_ENDIAN_BIG))
-	{
-	  /* Use the least significant bits of FROM.  */
-	  max_offset = 8 * TYPE_LENGTH (value_type (from));
-	  offset = max_offset - value_bitsize (v);
-	}
-      else
-	max_offset = value_bitsize (v);
-    }
-  else
-    max_offset = 8 * TYPE_LENGTH (value_type (v));
-
-  /* Advance to the first non-skipped piece.  */
-  for (i = 0; i < c->pieces.size () && bits_to_skip >= c->pieces[i].size; i++)
-    bits_to_skip -= c->pieces[i].size;
-
-  for (; i < c->pieces.size () && offset < max_offset; i++)
-    {
-      struct dwarf_expr_piece *p = &c->pieces[i];
-      size_t this_size_bits, this_size;
-
-      this_size_bits = p->size - bits_to_skip;
-      if (this_size_bits > max_offset - offset)
-	this_size_bits = max_offset - offset;
-
-      switch (p->location)
-	{
-	case DWARF_VALUE_REGISTER:
-	  {
-	    struct frame_info *frame = frame_find_by_id (c->frame_id);
-	    struct gdbarch *arch = get_frame_arch (frame);
-	    int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno);
-	    ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum);
-	    int optim, unavail;
-
-	    if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
-		&& p->offset + p->size < reg_bits)
-	      {
-		/* Big-endian, and we want less than full size.  */
-		bits_to_skip += reg_bits - (p->offset + p->size);
-	      }
-	    else
-	      bits_to_skip += p->offset;
-
-	    this_size = bits_to_bytes (bits_to_skip, this_size_bits);
-	    buffer.resize (this_size);
-
-	    if (from == NULL)
-	      {
-		/* Read mode.  */
-		if (!get_frame_register_bytes (frame, gdb_regnum,
-					       bits_to_skip / 8,
-					       this_size, buffer.data (),
-					       &optim, &unavail))
-		  {
-		    if (optim)
-		      mark_value_bits_optimized_out (v, offset,
-						     this_size_bits);
-		    if (unavail)
-		      mark_value_bits_unavailable (v, offset,
-						   this_size_bits);
-		    break;
-		  }
-
-		copy_bitwise (v_contents, offset,
-			      buffer.data (), bits_to_skip % 8,
-			      this_size_bits, bits_big_endian);
-	      }
-	    else
-	      {
-		/* Write mode.  */
-		if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0)
-		  {
-		    /* Data is copied non-byte-aligned into the register.
-		       Need some bits from original register value.  */
-		    get_frame_register_bytes (frame, gdb_regnum,
-					      bits_to_skip / 8,
-					      this_size, buffer.data (),
-					      &optim, &unavail);
-		    if (optim)
-		      throw_error (OPTIMIZED_OUT_ERROR,
-				   _("Can't do read-modify-write to "
-				     "update bitfield; containing word "
-				     "has been optimized out"));
-		    if (unavail)
-		      throw_error (NOT_AVAILABLE_ERROR,
-				   _("Can't do read-modify-write to "
-				     "update bitfield; containing word "
-				     "is unavailable"));
-		  }
-
-		copy_bitwise (buffer.data (), bits_to_skip % 8,
-			      from_contents, offset,
-			      this_size_bits, bits_big_endian);
-		put_frame_register_bytes (frame, gdb_regnum,
-					  bits_to_skip / 8,
-					  this_size, buffer.data ());
-	      }
-	  }
-	  break;
-
-	case DWARF_VALUE_MEMORY:
-	  {
-	    bits_to_skip += p->offset;
-
-	    CORE_ADDR start_addr = p->v.mem.addr + bits_to_skip / 8;
-
-	    if (bits_to_skip % 8 == 0 && this_size_bits % 8 == 0
-		&& offset % 8 == 0)
-	      {
-		/* Everything is byte-aligned; no buffer needed.  */
-		if (from != NULL)
-		  write_memory_with_notification (start_addr,
-						  (from_contents
-						   + offset / 8),
-						  this_size_bits / 8);
-		else
-		  read_value_memory (v, offset,
-				     p->v.mem.in_stack_memory,
-				     p->v.mem.addr + bits_to_skip / 8,
-				     v_contents + offset / 8,
-				     this_size_bits / 8);
-		break;
-	      }
-
-	    this_size = bits_to_bytes (bits_to_skip, this_size_bits);
-	    buffer.resize (this_size);
-
-	    if (from == NULL)
-	      {
-		/* Read mode.  */
-		read_value_memory (v, offset,
-				   p->v.mem.in_stack_memory,
-				   p->v.mem.addr + bits_to_skip / 8,
-				   buffer.data (), this_size);
-		copy_bitwise (v_contents, offset,
-			      buffer.data (), bits_to_skip % 8,
-			      this_size_bits, bits_big_endian);
-	      }
-	    else
-	      {
-		/* Write mode.  */
-		if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0)
-		  {
-		    if (this_size <= 8)
-		      {
-			/* Perform a single read for small sizes.  */
-			read_memory (start_addr, buffer.data (),
-				     this_size);
-		      }
-		    else
-		      {
-			/* Only the first and last bytes can possibly have
-			   any bits reused.  */
-			read_memory (start_addr, buffer.data (), 1);
-			read_memory (start_addr + this_size - 1,
-				     &buffer[this_size - 1], 1);
-		      }
-		  }
-
-		copy_bitwise (buffer.data (), bits_to_skip % 8,
-			      from_contents, offset,
-			      this_size_bits, bits_big_endian);
-		write_memory_with_notification (start_addr,
-						buffer.data (),
-						this_size);
-	      }
-	  }
-	  break;
-
-	case DWARF_VALUE_STACK:
-	  {
-	    if (from != NULL)
-	      {
-		mark_value_bits_optimized_out (v, offset, this_size_bits);
-		break;
-	      }
-
-	    struct objfile *objfile = dwarf2_per_cu_objfile (c->per_cu);
-	    struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
-	    ULONGEST stack_value_size_bits
-	      = 8 * TYPE_LENGTH (value_type (p->v.value));
-
-	    /* Use zeroes if piece reaches beyond stack value.  */
-	    if (p->offset + p->size > stack_value_size_bits)
-	      break;
-
-	    /* Piece is anchored at least significant bit end.  */
-	    if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
-	      bits_to_skip += stack_value_size_bits - p->offset - p->size;
-	    else
-	      bits_to_skip += p->offset;
-
-	    copy_bitwise (v_contents, offset,
-			  value_contents_all (p->v.value),
-			  bits_to_skip,
-			  this_size_bits, bits_big_endian);
-	  }
-	  break;
-
-	case DWARF_VALUE_LITERAL:
-	  {
-	    if (from != NULL)
-	      {
-		mark_value_bits_optimized_out (v, offset, this_size_bits);
-		break;
-	      }
-
-	    ULONGEST literal_size_bits = 8 * p->v.literal.length;
-	    size_t n = this_size_bits;
-
-	    /* Cut off at the end of the implicit value.  */
-	    bits_to_skip += p->offset;
-	    if (bits_to_skip >= literal_size_bits)
-	      break;
-	    if (n > literal_size_bits - bits_to_skip)
-	      n = literal_size_bits - bits_to_skip;
-
-	    copy_bitwise (v_contents, offset,
-			  p->v.literal.data, bits_to_skip,
-			  n, bits_big_endian);
-	  }
-	  break;
-
-	case DWARF_VALUE_IMPLICIT_POINTER:
-	    if (from != NULL)
-	      {
-		mark_value_bits_optimized_out (v, offset, this_size_bits);
-		break;
-	      }
-
-	  /* These bits show up as zeros -- but do not cause the value to
-	     be considered optimized-out.  */
-	  break;
-
-	case DWARF_VALUE_OPTIMIZED_OUT:
-	  mark_value_bits_optimized_out (v, offset, this_size_bits);
-	  break;
-
-	default:
-	  internal_error (__FILE__, __LINE__, _("invalid location type"));
-	}
-
-      offset += this_size_bits;
-      bits_to_skip = 0;
-    }
-}
-
-
-static void
-read_pieced_value (struct value *v)
-{
-  rw_pieced_value (v, NULL);
-}
-
-static void
-write_pieced_value (struct value *to, struct value *from)
-{
-  rw_pieced_value (to, from);
-}
-
-/* An implementation of an lval_funcs method to see whether a value is
-   a synthetic pointer.  */
-
-static int
-check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset,
-				int bit_length)
-{
-  struct piece_closure *c
-    = (struct piece_closure *) value_computed_closure (value);
-  int i;
-
-  bit_offset += 8 * value_offset (value);
-  if (value_bitsize (value))
-    bit_offset += value_bitpos (value);
-
-  for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
-    {
-      struct dwarf_expr_piece *p = &c->pieces[i];
-      size_t this_size_bits = p->size;
-
-      if (bit_offset > 0)
-	{
-	  if (bit_offset >= this_size_bits)
-	    {
-	      bit_offset -= this_size_bits;
-	      continue;
-	    }
-
-	  bit_length -= this_size_bits - bit_offset;
-	  bit_offset = 0;
-	}
-      else
-	bit_length -= this_size_bits;
-
-      if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
-	return 0;
-    }
-
-  return 1;
-}
-
-/* A wrapper function for get_frame_address_in_block.  */
-
-static CORE_ADDR
-get_frame_address_in_block_wrapper (void *baton)
-{
-  return get_frame_address_in_block ((struct frame_info *) baton);
-}
-
-/* Fetch a DW_AT_const_value through a synthetic pointer.  */
-
-static struct value *
-fetch_const_value_from_synthetic_pointer (sect_offset die, LONGEST byte_offset,
-					  struct dwarf2_per_cu_data *per_cu,
-					  struct type *type)
-{
-  struct value *result = NULL;
-  const gdb_byte *bytes;
-  LONGEST len;
-
-  auto_obstack temp_obstack;
-  bytes = dwarf2_fetch_constant_bytes (die, per_cu, &temp_obstack, &len);
-
-  if (bytes != NULL)
-    {
-      if (byte_offset >= 0
-	  && byte_offset + TYPE_LENGTH (TYPE_TARGET_TYPE (type)) <= len)
-	{
-	  bytes += byte_offset;
-	  result = value_from_contents (TYPE_TARGET_TYPE (type), bytes);
-	}
-      else
-	invalid_synthetic_pointer ();
-    }
-  else
-    result = allocate_optimized_out_value (TYPE_TARGET_TYPE (type));
-
-  return result;
-}
-
-/* Fetch the value pointed to by a synthetic pointer.  */
-
-static struct value *
-indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset,
-			    struct dwarf2_per_cu_data *per_cu,
-			    struct frame_info *frame, struct type *type,
-			    bool resolve_abstract_p)
-{
-  /* Fetch the location expression of the DIE we're pointing to.  */
-  struct dwarf2_locexpr_baton baton
-    = dwarf2_fetch_die_loc_sect_off (die, per_cu,
-				     get_frame_address_in_block_wrapper, frame,
-				     resolve_abstract_p);
-
-  /* Get type of pointed-to DIE.  */
-  struct type *orig_type = dwarf2_fetch_die_type_sect_off (die, per_cu);
-  if (orig_type == NULL)
-    invalid_synthetic_pointer ();
-
-  /* If pointed-to DIE has a DW_AT_location, evaluate it and return the
-     resulting value.  Otherwise, it may have a DW_AT_const_value instead,
-     or it may've been optimized out.  */
-  if (baton.data != NULL)
-    return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data,
-					  baton.size, baton.per_cu,
-					  TYPE_TARGET_TYPE (type),
-					  byte_offset);
-  else
-    return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu,
-						     type);
-}
-
-/* An implementation of an lval_funcs method to indirect through a
-   pointer.  This handles the synthetic pointer case when needed.  */
-
-static struct value *
-indirect_pieced_value (struct value *value)
-{
-  struct piece_closure *c
-    = (struct piece_closure *) value_computed_closure (value);
-  struct type *type;
-  struct frame_info *frame;
-  int i, bit_length;
-  LONGEST bit_offset;
-  struct dwarf_expr_piece *piece = NULL;
-  LONGEST byte_offset;
-  enum bfd_endian byte_order;
-
-  type = check_typedef (value_type (value));
-  if (TYPE_CODE (type) != TYPE_CODE_PTR)
-    return NULL;
-
-  bit_length = 8 * TYPE_LENGTH (type);
-  bit_offset = 8 * value_offset (value);
-  if (value_bitsize (value))
-    bit_offset += value_bitpos (value);
-
-  for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
-    {
-      struct dwarf_expr_piece *p = &c->pieces[i];
-      size_t this_size_bits = p->size;
-
-      if (bit_offset > 0)
-	{
-	  if (bit_offset >= this_size_bits)
-	    {
-	      bit_offset -= this_size_bits;
-	      continue;
-	    }
-
-	  bit_length -= this_size_bits - bit_offset;
-	  bit_offset = 0;
-	}
-      else
-	bit_length -= this_size_bits;
-
-      if (p->location != DWARF_VALUE_IMPLICIT_POINTER)
-	return NULL;
-
-      if (bit_length != 0)
-	error (_("Invalid use of DW_OP_implicit_pointer"));
-
-      piece = p;
-      break;
-    }
-
-  gdb_assert (piece != NULL);
-  frame = get_selected_frame (_("No frame selected."));
-
-  /* This is an offset requested by GDB, such as value subscripts.
-     However, due to how synthetic pointers are implemented, this is
-     always presented to us as a pointer type.  This means we have to
-     sign-extend it manually as appropriate.  Use raw
-     extract_signed_integer directly rather than value_as_address and
-     sign extend afterwards on architectures that would need it
-     (mostly everywhere except MIPS, which has signed addresses) as
-     the later would go through gdbarch_pointer_to_address and thus
-     return a CORE_ADDR with high bits set on architectures that
-     encode address spaces and other things in CORE_ADDR.  */
-  byte_order = gdbarch_byte_order (get_frame_arch (frame));
-  byte_offset = extract_signed_integer (value_contents (value),
-					TYPE_LENGTH (type), byte_order);
-  byte_offset += piece->v.ptr.offset;
-
-  return indirect_synthetic_pointer (piece->v.ptr.die_sect_off,
-				     byte_offset, c->per_cu,
-				     frame, type);
-}
-
-/* Implementation of the coerce_ref method of lval_funcs for synthetic C++
-   references.  */
-
-static struct value *
-coerce_pieced_ref (const struct value *value)
-{
-  struct type *type = check_typedef (value_type (value));
-
-  if (value_bits_synthetic_pointer (value, value_embedded_offset (value),
-				    TARGET_CHAR_BIT * TYPE_LENGTH (type)))
-    {
-      const struct piece_closure *closure
-	= (struct piece_closure *) value_computed_closure (value);
-      struct frame_info *frame
-	= get_selected_frame (_("No frame selected."));
-
-      /* gdb represents synthetic pointers as pieced values with a single
-	 piece.  */
-      gdb_assert (closure != NULL);
-      gdb_assert (closure->pieces.size () == 1);
-
-      return indirect_synthetic_pointer
-	(closure->pieces[0].v.ptr.die_sect_off,
-	 closure->pieces[0].v.ptr.offset,
-	 closure->per_cu, frame, type);
-    }
-  else
-    {
-      /* Else: not a synthetic reference; do nothing.  */
-      return NULL;
-    }
-}
-
-static void *
-copy_pieced_value_closure (const struct value *v)
-{
-  struct piece_closure *c
-    = (struct piece_closure *) value_computed_closure (v);
-  
-  ++c->refc;
-  return c;
-}
-
-static void
-free_pieced_value_closure (struct value *v)
-{
-  struct piece_closure *c
-    = (struct piece_closure *) value_computed_closure (v);
-
-  --c->refc;
-  if (c->refc == 0)
-    {
-      for (dwarf_expr_piece &p : c->pieces)
-	if (p.location == DWARF_VALUE_STACK)
-	  value_decref (p.v.value);
-
-      delete c;
-    }
-}
-
-/* Functions for accessing a variable described by DW_OP_piece.  */
-static const struct lval_funcs pieced_value_funcs = {
-  read_pieced_value,
-  write_pieced_value,
-  indirect_pieced_value,
-  coerce_pieced_ref,
-  check_pieced_synthetic_pointer,
-  copy_pieced_value_closure,
-  free_pieced_value_closure
-};
-
-/* Evaluate a location description, starting at DATA and with length
-   SIZE, to find the current location of variable of TYPE in the
-   context of FRAME.  If SUBOBJ_TYPE is non-NULL, return instead the
-   location of the subobject of type SUBOBJ_TYPE at byte offset
-   SUBOBJ_BYTE_OFFSET within the variable of type TYPE.  */
-
-static struct value *
-dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
-			       const gdb_byte *data, size_t size,
-			       struct dwarf2_per_cu_data *per_cu,
-			       struct type *subobj_type,
-			       LONGEST subobj_byte_offset)
-{
-  struct value *retval;
-  struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
-
-  if (subobj_type == NULL)
-    {
-      subobj_type = type;
-      subobj_byte_offset = 0;
-    }
-  else if (subobj_byte_offset < 0)
-    invalid_synthetic_pointer ();
-
-  if (size == 0)
-    return allocate_optimized_out_value (subobj_type);
-
-  dwarf_evaluate_loc_desc ctx;
-  ctx.frame = frame;
-  ctx.per_cu = per_cu;
-  ctx.obj_address = 0;
-
-  scoped_value_mark free_values;
-
-  ctx.gdbarch = get_objfile_arch (objfile);
-  ctx.addr_size = dwarf2_per_cu_addr_size (per_cu);
-  ctx.ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
-  ctx.offset = dwarf2_per_cu_text_offset (per_cu);
-
-  try
-    {
-      ctx.eval (data, size);
-    }
-  catch (const gdb_exception_error &ex)
-    {
-      if (ex.error == NOT_AVAILABLE_ERROR)
-	{
-	  free_values.free_to_mark ();
-	  retval = allocate_value (subobj_type);
-	  mark_value_bytes_unavailable (retval, 0,
-					TYPE_LENGTH (subobj_type));
-	  return retval;
-	}
-      else if (ex.error == NO_ENTRY_VALUE_ERROR)
-	{
-	  if (entry_values_debug)
-	    exception_print (gdb_stdout, ex);
-	  free_values.free_to_mark ();
-	  return allocate_optimized_out_value (subobj_type);
-	}
-      else
-	throw;
-    }
-
-  if (ctx.pieces.size () > 0)
-    {
-      struct piece_closure *c;
-      ULONGEST bit_size = 0;
-
-      for (dwarf_expr_piece &piece : ctx.pieces)
-	bit_size += piece.size;
-      /* Complain if the expression is larger than the size of the
-	 outer type.  */
-      if (bit_size > 8 * TYPE_LENGTH (type))
-	invalid_synthetic_pointer ();
-
-      c = allocate_piece_closure (per_cu, std::move (ctx.pieces), frame);
-      /* We must clean up the value chain after creating the piece
-	 closure but before allocating the result.  */
-      free_values.free_to_mark ();
-      retval = allocate_computed_value (subobj_type,
-					&pieced_value_funcs, c);
-      set_value_offset (retval, subobj_byte_offset);
-    }
-  else
-    {
-      switch (ctx.location)
-	{
-	case DWARF_VALUE_REGISTER:
-	  {
-	    struct gdbarch *arch = get_frame_arch (frame);
-	    int dwarf_regnum
-	      = longest_to_int (value_as_long (ctx.fetch (0)));
-	    int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, dwarf_regnum);
-
-	    if (subobj_byte_offset != 0)
-	      error (_("cannot use offset on synthetic pointer to register"));
-	    free_values.free_to_mark ();
-	    retval = value_from_register (subobj_type, gdb_regnum, frame);
-	    if (value_optimized_out (retval))
-	      {
-		struct value *tmp;
-
-		/* This means the register has undefined value / was
-		   not saved.  As we're computing the location of some
-		   variable etc. in the program, not a value for
-		   inspecting a register ($pc, $sp, etc.), return a
-		   generic optimized out value instead, so that we show
-		   <optimized out> instead of <not saved>.  */
-		tmp = allocate_value (subobj_type);
-		value_contents_copy (tmp, 0, retval, 0,
-				     TYPE_LENGTH (subobj_type));
-		retval = tmp;
-	      }
-	  }
-	  break;
-
-	case DWARF_VALUE_MEMORY:
-	  {
-	    struct type *ptr_type;
-	    CORE_ADDR address = ctx.fetch_address (0);
-	    bool in_stack_memory = ctx.fetch_in_stack_memory (0);
-
-	    /* DW_OP_deref_size (and possibly other operations too) may
-	       create a pointer instead of an address.  Ideally, the
-	       pointer to address conversion would be performed as part
-	       of those operations, but the type of the object to
-	       which the address refers is not known at the time of
-	       the operation.  Therefore, we do the conversion here
-	       since the type is readily available.  */
-
-	    switch (TYPE_CODE (subobj_type))
-	      {
-		case TYPE_CODE_FUNC:
-		case TYPE_CODE_METHOD:
-		  ptr_type = builtin_type (ctx.gdbarch)->builtin_func_ptr;
-		  break;
-		default:
-		  ptr_type = builtin_type (ctx.gdbarch)->builtin_data_ptr;
-		  break;
-	      }
-	    address = value_as_address (value_from_pointer (ptr_type, address));
-
-	    free_values.free_to_mark ();
-	    retval = value_at_lazy (subobj_type,
-				    address + subobj_byte_offset);
-	    if (in_stack_memory)
-	      set_value_stack (retval, 1);
-	  }
-	  break;
-
-	case DWARF_VALUE_STACK:
-	  {
-	    struct value *value = ctx.fetch (0);
-	    size_t n = TYPE_LENGTH (value_type (value));
-	    size_t len = TYPE_LENGTH (subobj_type);
-	    size_t max = TYPE_LENGTH (type);
-	    struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
-
-	    if (subobj_byte_offset + len > max)
-	      invalid_synthetic_pointer ();
-
-	    /* Preserve VALUE because we are going to free values back
-	       to the mark, but we still need the value contents
-	       below.  */
-	    value_ref_ptr value_holder = value_ref_ptr::new_reference (value);
-	    free_values.free_to_mark ();
-
-	    retval = allocate_value (subobj_type);
-
-	    /* The given offset is relative to the actual object.  */
-	    if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
-	      subobj_byte_offset += n - max;
-
-	    memcpy (value_contents_raw (retval),
-		    value_contents_all (value) + subobj_byte_offset, len);
-	  }
-	  break;
-
-	case DWARF_VALUE_LITERAL:
-	  {
-	    bfd_byte *contents;
-	    size_t n = TYPE_LENGTH (subobj_type);
-
-	    if (subobj_byte_offset + n > ctx.len)
-	      invalid_synthetic_pointer ();
-
-	    free_values.free_to_mark ();
-	    retval = allocate_value (subobj_type);
-	    contents = value_contents_raw (retval);
-	    memcpy (contents, ctx.data + subobj_byte_offset, n);
-	  }
-	  break;
-
-	case DWARF_VALUE_OPTIMIZED_OUT:
-	  free_values.free_to_mark ();
-	  retval = allocate_optimized_out_value (subobj_type);
-	  break;
-
-	  /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced
-	     operation by execute_stack_op.  */
-	case DWARF_VALUE_IMPLICIT_POINTER:
-	  /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context --
-	     it can only be encountered when making a piece.  */
-	default:
-	  internal_error (__FILE__, __LINE__, _("invalid location type"));
-	}
-    }
-
-  set_value_initialized (retval, ctx.initialized);
-
-  return retval;
-}
-
-/* The exported interface to dwarf2_evaluate_loc_desc_full; it always
-   passes 0 as the byte_offset.  */
-
-struct value *
-dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame,
-			  const gdb_byte *data, size_t size,
-			  struct dwarf2_per_cu_data *per_cu)
-{
-  return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu,
-					NULL, 0);
-}
-
-/* Evaluates a dwarf expression and stores the result in VAL, expecting
-   that the dwarf expression only produces a single CORE_ADDR.  FRAME is the
-   frame in which the expression is evaluated.  ADDR is a context (location of
-   a variable) and might be needed to evaluate the location expression.
-   Returns 1 on success, 0 otherwise.   */
-
-static int
-dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
-			   struct frame_info *frame,
-			   CORE_ADDR addr,
-			   CORE_ADDR *valp)
-{
-  struct objfile *objfile;
-
-  if (dlbaton == NULL || dlbaton->size == 0)
-    return 0;
-
-  dwarf_evaluate_loc_desc ctx;
-
-  ctx.frame = frame;
-  ctx.per_cu = dlbaton->per_cu;
-  ctx.obj_address = addr;
-
-  objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
-
-  ctx.gdbarch = get_objfile_arch (objfile);
-  ctx.addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-  ctx.ref_addr_size = dwarf2_per_cu_ref_addr_size (dlbaton->per_cu);
-  ctx.offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
-
-  try
-    {
-      ctx.eval (dlbaton->data, dlbaton->size);
-    }
-  catch (const gdb_exception_error &ex)
-    {
-      if (ex.error == NOT_AVAILABLE_ERROR)
-	{
-	  return 0;
-	}
-      else if (ex.error == NO_ENTRY_VALUE_ERROR)
-	{
-	  if (entry_values_debug)
-	    exception_print (gdb_stdout, ex);
-	  return 0;
-	}
-      else
-	throw;
-    }
-
-  switch (ctx.location)
-    {
-    case DWARF_VALUE_REGISTER:
-    case DWARF_VALUE_MEMORY:
-    case DWARF_VALUE_STACK:
-      *valp = ctx.fetch_address (0);
-      if (ctx.location == DWARF_VALUE_REGISTER)
-	*valp = ctx.read_addr_from_reg (*valp);
-      return 1;
-    case DWARF_VALUE_LITERAL:
-      *valp = extract_signed_integer (ctx.data, ctx.len,
-				      gdbarch_byte_order (ctx.gdbarch));
-      return 1;
-      /* Unsupported dwarf values.  */
-    case DWARF_VALUE_OPTIMIZED_OUT:
-    case DWARF_VALUE_IMPLICIT_POINTER:
-      break;
-    }
-
-  return 0;
-}
-
-/* See dwarf2loc.h.  */
-
-bool
-dwarf2_evaluate_property (const struct dynamic_prop *prop,
-			  struct frame_info *frame,
-			  struct property_addr_info *addr_stack,
-			  CORE_ADDR *value)
-{
-  if (prop == NULL)
-    return false;
-
-  if (frame == NULL && has_stack_frames ())
-    frame = get_selected_frame (NULL);
-
-  switch (prop->kind)
-    {
-    case PROP_LOCEXPR:
-      {
-	const struct dwarf2_property_baton *baton
-	  = (const struct dwarf2_property_baton *) prop->data.baton;
-	gdb_assert (baton->property_type != NULL);
-
-	if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame,
-				       addr_stack ? addr_stack->addr : 0,
-				       value))
-	  {
-	    if (baton->locexpr.is_reference)
-	      {
-		struct value *val = value_at (baton->property_type, *value);
-		*value = value_as_address (val);
-	      }
-	    else
-	      {
-		gdb_assert (baton->property_type != NULL);
-
-		struct type *type = check_typedef (baton->property_type);
-		if (TYPE_LENGTH (type) < sizeof (CORE_ADDR)
-		    && !TYPE_UNSIGNED (type))
-		  {
-		    /* If we have a valid return candidate and it's value
-		       is signed, we have to sign-extend the value because
-		       CORE_ADDR on 64bit machine has 8 bytes but address
-		       size of an 32bit application is bytes.  */
-		    const int addr_size
-		      = (dwarf2_per_cu_addr_size (baton->locexpr.per_cu)
-			 * TARGET_CHAR_BIT);
-		    const CORE_ADDR neg_mask
-		      = (~((CORE_ADDR) 0) <<  (addr_size - 1));
-
-		    /* Check if signed bit is set and sign-extend values.  */
-		    if (*value & neg_mask)
-		      *value |= neg_mask;
-		  }
-	      }
-	    return true;
-	  }
-      }
-      break;
-
-    case PROP_LOCLIST:
-      {
-	struct dwarf2_property_baton *baton
-	  = (struct dwarf2_property_baton *) prop->data.baton;
-	CORE_ADDR pc = get_frame_address_in_block (frame);
-	const gdb_byte *data;
-	struct value *val;
-	size_t size;
-
-	data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
-	if (data != NULL)
-	  {
-	    val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
-					    size, baton->loclist.per_cu);
-	    if (!value_optimized_out (val))
-	      {
-		*value = value_as_address (val);
-		return true;
-	      }
-	  }
-      }
-      break;
-
-    case PROP_CONST:
-      *value = prop->data.const_val;
-      return true;
-
-    case PROP_ADDR_OFFSET:
-      {
-	struct dwarf2_property_baton *baton
-	  = (struct dwarf2_property_baton *) prop->data.baton;
-	struct property_addr_info *pinfo;
-	struct value *val;
-
-	for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
-	  {
-	    /* This approach lets us avoid checking the qualifiers.  */
-	    if (TYPE_MAIN_TYPE (pinfo->type)
-		== TYPE_MAIN_TYPE (baton->property_type))
-	      break;
-	  }
-	if (pinfo == NULL)
-	  error (_("cannot find reference address for offset property"));
-	if (pinfo->valaddr != NULL)
-	  val = value_from_contents
-		  (baton->offset_info.type,
-		   pinfo->valaddr + baton->offset_info.offset);
-	else
-	  val = value_at (baton->offset_info.type,
-			  pinfo->addr + baton->offset_info.offset);
-	*value = value_as_address (val);
-	return true;
-      }
-    }
-
-  return false;
-}
-
-/* See dwarf2loc.h.  */
-
-void
-dwarf2_compile_property_to_c (string_file *stream,
-			      const char *result_name,
-			      struct gdbarch *gdbarch,
-			      unsigned char *registers_used,
-			      const struct dynamic_prop *prop,
-			      CORE_ADDR pc,
-			      struct symbol *sym)
-{
-  struct dwarf2_property_baton *baton
-    = (struct dwarf2_property_baton *) prop->data.baton;
-  const gdb_byte *data;
-  size_t size;
-  struct dwarf2_per_cu_data *per_cu;
-
-  if (prop->kind == PROP_LOCEXPR)
-    {
-      data = baton->locexpr.data;
-      size = baton->locexpr.size;
-      per_cu = baton->locexpr.per_cu;
-    }
-  else
-    {
-      gdb_assert (prop->kind == PROP_LOCLIST);
-
-      data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
-      per_cu = baton->loclist.per_cu;
-    }
-
-  compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
-			     gdbarch, registers_used,
-			     dwarf2_per_cu_addr_size (per_cu),
-			     data, data + size, per_cu);
-}
-
-
-/* Helper functions and baton for dwarf2_loc_desc_get_symbol_read_needs.  */
-
-class symbol_needs_eval_context : public dwarf_expr_context
-{
- public:
-
-  enum symbol_needs_kind needs;
-  struct dwarf2_per_cu_data *per_cu;
-
-  /* Reads from registers do require a frame.  */
-  CORE_ADDR read_addr_from_reg (int regnum) override
-  {
-    needs = SYMBOL_NEEDS_FRAME;
-    return 1;
-  }
-
-  /* "get_reg_value" callback: Reads from registers do require a
-     frame.  */
-
-  struct value *get_reg_value (struct type *type, int regnum) override
-  {
-    needs = SYMBOL_NEEDS_FRAME;
-    return value_zero (type, not_lval);
-  }
-
-  /* Reads from memory do not require a frame.  */
-  void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override
-  {
-    memset (buf, 0, len);
-  }
-
-  /* Frame-relative accesses do require a frame.  */
-  void get_frame_base (const gdb_byte **start, size_t *length) override
-  {
-    static gdb_byte lit0 = DW_OP_lit0;
-
-    *start = &lit0;
-    *length = 1;
-
-    needs = SYMBOL_NEEDS_FRAME;
-  }
-
-  /* CFA accesses require a frame.  */
-  CORE_ADDR get_frame_cfa () override
-  {
-    needs = SYMBOL_NEEDS_FRAME;
-    return 1;
-  }
-
-  CORE_ADDR get_frame_pc () override
-  {
-    needs = SYMBOL_NEEDS_FRAME;
-    return 1;
-  }
-
-  /* Thread-local accesses require registers, but not a frame.  */
-  CORE_ADDR get_tls_address (CORE_ADDR offset) override
-  {
-    if (needs <= SYMBOL_NEEDS_REGISTERS)
-      needs = SYMBOL_NEEDS_REGISTERS;
-    return 1;
-  }
-
-  /* Helper interface of per_cu_dwarf_call for
-     dwarf2_loc_desc_get_symbol_read_needs.  */
-
-  void dwarf_call (cu_offset die_offset) override
-  {
-    per_cu_dwarf_call (this, die_offset, per_cu);
-  }
-
-  /* Helper interface of sect_variable_value for
-     dwarf2_loc_desc_get_symbol_read_needs.  */
-
-  struct value *dwarf_variable_value (sect_offset sect_off) override
-  {
-    return sect_variable_value (this, sect_off, per_cu);
-  }
-
-  /* DW_OP_entry_value accesses require a caller, therefore a
-     frame.  */
-
-  void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
-				   union call_site_parameter_u kind_u,
-				   int deref_size) override
-  {
-    needs = SYMBOL_NEEDS_FRAME;
-
-    /* The expression may require some stub values on DWARF stack.  */
-    push_address (0, 0);
-  }
-
-  /* DW_OP_addrx and DW_OP_GNU_addr_index doesn't require a frame.  */
-
-   CORE_ADDR get_addr_index (unsigned int index) override
-   {
-     /* Nothing to do.  */
-     return 1;
-   }
-
-   /* DW_OP_push_object_address has a frame already passed through.  */
-
-   CORE_ADDR get_object_address () override
-   {
-     /* Nothing to do.  */
-     return 1;
-   }
-};
-
-/* Compute the correct symbol_needs_kind value for the location
-   expression at DATA (length SIZE).  */
-
-static enum symbol_needs_kind
-dwarf2_loc_desc_get_symbol_read_needs (const gdb_byte *data, size_t size,
-				       struct dwarf2_per_cu_data *per_cu)
-{
-  int in_reg;
-  struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
-
-  scoped_value_mark free_values;
-
-  symbol_needs_eval_context ctx;
-
-  ctx.needs = SYMBOL_NEEDS_NONE;
-  ctx.per_cu = per_cu;
-  ctx.gdbarch = get_objfile_arch (objfile);
-  ctx.addr_size = dwarf2_per_cu_addr_size (per_cu);
-  ctx.ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu);
-  ctx.offset = dwarf2_per_cu_text_offset (per_cu);
-
-  ctx.eval (data, size);
-
-  in_reg = ctx.location == DWARF_VALUE_REGISTER;
-
-  /* If the location has several pieces, and any of them are in
-     registers, then we will need a frame to fetch them from.  */
-  for (dwarf_expr_piece &p : ctx.pieces)
-    if (p.location == DWARF_VALUE_REGISTER)
-      in_reg = 1;
-
-  if (in_reg)
-    ctx.needs = SYMBOL_NEEDS_FRAME;
-  return ctx.needs;
-}
-
-/* A helper function that throws an unimplemented error mentioning a
-   given DWARF operator.  */
-
-static void ATTRIBUTE_NORETURN
-unimplemented (unsigned int op)
-{
-  const char *name = get_DW_OP_name (op);
-
-  if (name)
-    error (_("DWARF operator %s cannot be translated to an agent expression"),
-	   name);
-  else
-    error (_("Unknown DWARF operator 0x%02x cannot be translated "
-	     "to an agent expression"),
-	   op);
-}
-
-/* See dwarf2loc.h.
-
-   This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
-   can issue a complaint, which is better than having every target's
-   implementation of dwarf2_reg_to_regnum do it.  */
-
-int
-dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg)
-{
-  int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
-
-  if (reg == -1)
-    {
-      complaint (_("bad DWARF register number %d"), dwarf_reg);
-    }
-  return reg;
-}
-
-/* Subroutine of dwarf_reg_to_regnum_or_error to simplify it.
-   Throw an error because DWARF_REG is bad.  */
-
-static void
-throw_bad_regnum_error (ULONGEST dwarf_reg)
-{
-  /* Still want to print -1 as "-1".
-     We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error
-     but that's overkill for now.  */
-  if ((int) dwarf_reg == dwarf_reg)
-    error (_("Unable to access DWARF register number %d"), (int) dwarf_reg);
-  error (_("Unable to access DWARF register number %s"),
-	 pulongest (dwarf_reg));
-}
-
-/* See dwarf2loc.h.  */
-
-int
-dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
-{
-  int reg;
-
-  if (dwarf_reg > INT_MAX)
-    throw_bad_regnum_error (dwarf_reg);
-  /* Yes, we will end up issuing a complaint and an error if DWARF_REG is
-     bad, but that's ok.  */
-  reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg);
-  if (reg == -1)
-    throw_bad_regnum_error (dwarf_reg);
-  return reg;
-}
-
-/* A helper function that emits an access to memory.  ARCH is the
-   target architecture.  EXPR is the expression which we are building.
-   NBITS is the number of bits we want to read.  This emits the
-   opcodes needed to read the memory and then extract the desired
-   bits.  */
-
-static void
-access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
-{
-  ULONGEST nbytes = (nbits + 7) / 8;
-
-  gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
-
-  if (expr->tracing)
-    ax_trace_quick (expr, nbytes);
-
-  if (nbits <= 8)
-    ax_simple (expr, aop_ref8);
-  else if (nbits <= 16)
-    ax_simple (expr, aop_ref16);
-  else if (nbits <= 32)
-    ax_simple (expr, aop_ref32);
-  else
-    ax_simple (expr, aop_ref64);
-
-  /* If we read exactly the number of bytes we wanted, we're done.  */
-  if (8 * nbytes == nbits)
-    return;
-
-  if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
-    {
-      /* On a bits-big-endian machine, we want the high-order
-	 NBITS.  */
-      ax_const_l (expr, 8 * nbytes - nbits);
-      ax_simple (expr, aop_rsh_unsigned);
-    }
-  else
-    {
-      /* On a bits-little-endian box, we want the low-order NBITS.  */
-      ax_zero_ext (expr, nbits);
-    }
-}
-
-/* A helper function to return the frame's PC.  */
-
-static CORE_ADDR
-get_ax_pc (void *baton)
-{
-  struct agent_expr *expr = (struct agent_expr *) baton;
-
-  return expr->scope;
-}
-
-/* Compile a DWARF location expression to an agent expression.
-   
-   EXPR is the agent expression we are building.
-   LOC is the agent value we modify.
-   ARCH is the architecture.
-   ADDR_SIZE is the size of addresses, in bytes.
-   OP_PTR is the start of the location expression.
-   OP_END is one past the last byte of the location expression.
-   
-   This will throw an exception for various kinds of errors -- for
-   example, if the expression cannot be compiled, or if the expression
-   is invalid.  */
-
-void
-dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
-			   unsigned int addr_size, const gdb_byte *op_ptr,
-			   const gdb_byte *op_end,
-			   struct dwarf2_per_cu_data *per_cu)
-{
-  gdbarch *arch = expr->gdbarch;
-  std::vector<int> dw_labels, patches;
-  const gdb_byte * const base = op_ptr;
-  const gdb_byte *previous_piece = op_ptr;
-  enum bfd_endian byte_order = gdbarch_byte_order (arch);
-  ULONGEST bits_collected = 0;
-  unsigned int addr_size_bits = 8 * addr_size;
-  bool bits_big_endian = byte_order == BFD_ENDIAN_BIG;
-
-  std::vector<int> offsets (op_end - op_ptr, -1);
-
-  /* By default we are making an address.  */
-  loc->kind = axs_lvalue_memory;
-
-  while (op_ptr < op_end)
-    {
-      enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
-      uint64_t uoffset, reg;
-      int64_t offset;
-      int i;
-
-      offsets[op_ptr - base] = expr->len;
-      ++op_ptr;
-
-      /* Our basic approach to code generation is to map DWARF
-	 operations directly to AX operations.  However, there are
-	 some differences.
-
-	 First, DWARF works on address-sized units, but AX always uses
-	 LONGEST.  For most operations we simply ignore this
-	 difference; instead we generate sign extensions as needed
-	 before division and comparison operations.  It would be nice
-	 to omit the sign extensions, but there is no way to determine
-	 the size of the target's LONGEST.  (This code uses the size
-	 of the host LONGEST in some cases -- that is a bug but it is
-	 difficult to fix.)
-
-	 Second, some DWARF operations cannot be translated to AX.
-	 For these we simply fail.  See
-	 http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
-      switch (op)
-	{
-	case DW_OP_lit0:
-	case DW_OP_lit1:
-	case DW_OP_lit2:
-	case DW_OP_lit3:
-	case DW_OP_lit4:
-	case DW_OP_lit5:
-	case DW_OP_lit6:
-	case DW_OP_lit7:
-	case DW_OP_lit8:
-	case DW_OP_lit9:
-	case DW_OP_lit10:
-	case DW_OP_lit11:
-	case DW_OP_lit12:
-	case DW_OP_lit13:
-	case DW_OP_lit14:
-	case DW_OP_lit15:
-	case DW_OP_lit16:
-	case DW_OP_lit17:
-	case DW_OP_lit18:
-	case DW_OP_lit19:
-	case DW_OP_lit20:
-	case DW_OP_lit21:
-	case DW_OP_lit22:
-	case DW_OP_lit23:
-	case DW_OP_lit24:
-	case DW_OP_lit25:
-	case DW_OP_lit26:
-	case DW_OP_lit27:
-	case DW_OP_lit28:
-	case DW_OP_lit29:
-	case DW_OP_lit30:
-	case DW_OP_lit31:
-	  ax_const_l (expr, op - DW_OP_lit0);
-	  break;
-
-	case DW_OP_addr:
-	  uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
-	  op_ptr += addr_size;
-	  /* Some versions of GCC emit DW_OP_addr before
-	     DW_OP_GNU_push_tls_address.  In this case the value is an
-	     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);
-	  ax_const_l (expr, uoffset);
-	  break;
-
-	case DW_OP_const1u:
-	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
-	  op_ptr += 1;
-	  break;
-	case DW_OP_const1s:
-	  ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
-	  op_ptr += 1;
-	  break;
-	case DW_OP_const2u:
-	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
-	  op_ptr += 2;
-	  break;
-	case DW_OP_const2s:
-	  ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
-	  op_ptr += 2;
-	  break;
-	case DW_OP_const4u:
-	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
-	  op_ptr += 4;
-	  break;
-	case DW_OP_const4s:
-	  ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
-	  op_ptr += 4;
-	  break;
-	case DW_OP_const8u:
-	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
-	  op_ptr += 8;
-	  break;
-	case DW_OP_const8s:
-	  ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
-	  op_ptr += 8;
-	  break;
-	case DW_OP_constu:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-	  ax_const_l (expr, uoffset);
-	  break;
-	case DW_OP_consts:
-	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	  ax_const_l (expr, offset);
-	  break;
-
-	case DW_OP_reg0:
-	case DW_OP_reg1:
-	case DW_OP_reg2:
-	case DW_OP_reg3:
-	case DW_OP_reg4:
-	case DW_OP_reg5:
-	case DW_OP_reg6:
-	case DW_OP_reg7:
-	case DW_OP_reg8:
-	case DW_OP_reg9:
-	case DW_OP_reg10:
-	case DW_OP_reg11:
-	case DW_OP_reg12:
-	case DW_OP_reg13:
-	case DW_OP_reg14:
-	case DW_OP_reg15:
-	case DW_OP_reg16:
-	case DW_OP_reg17:
-	case DW_OP_reg18:
-	case DW_OP_reg19:
-	case DW_OP_reg20:
-	case DW_OP_reg21:
-	case DW_OP_reg22:
-	case DW_OP_reg23:
-	case DW_OP_reg24:
-	case DW_OP_reg25:
-	case DW_OP_reg26:
-	case DW_OP_reg27:
-	case DW_OP_reg28:
-	case DW_OP_reg29:
-	case DW_OP_reg30:
-	case DW_OP_reg31:
-	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
-	  loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0);
-	  loc->kind = axs_lvalue_register;
-	  break;
-
-	case DW_OP_regx:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
-	  loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg);
-	  loc->kind = axs_lvalue_register;
-	  break;
-
-	case DW_OP_implicit_value:
-	  {
-	    uint64_t len;
-
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
-	    if (op_ptr + len > op_end)
-	      error (_("DW_OP_implicit_value: too few bytes available."));
-	    if (len > sizeof (ULONGEST))
-	      error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
-		     (int) len);
-
-	    ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
-							byte_order));
-	    op_ptr += len;
-	    dwarf_expr_require_composition (op_ptr, op_end,
-					    "DW_OP_implicit_value");
-
-	    loc->kind = axs_rvalue;
-	  }
-	  break;
-
-	case DW_OP_stack_value:
-	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
-	  loc->kind = axs_rvalue;
-	  break;
-
-	case DW_OP_breg0:
-	case DW_OP_breg1:
-	case DW_OP_breg2:
-	case DW_OP_breg3:
-	case DW_OP_breg4:
-	case DW_OP_breg5:
-	case DW_OP_breg6:
-	case DW_OP_breg7:
-	case DW_OP_breg8:
-	case DW_OP_breg9:
-	case DW_OP_breg10:
-	case DW_OP_breg11:
-	case DW_OP_breg12:
-	case DW_OP_breg13:
-	case DW_OP_breg14:
-	case DW_OP_breg15:
-	case DW_OP_breg16:
-	case DW_OP_breg17:
-	case DW_OP_breg18:
-	case DW_OP_breg19:
-	case DW_OP_breg20:
-	case DW_OP_breg21:
-	case DW_OP_breg22:
-	case DW_OP_breg23:
-	case DW_OP_breg24:
-	case DW_OP_breg25:
-	case DW_OP_breg26:
-	case DW_OP_breg27:
-	case DW_OP_breg28:
-	case DW_OP_breg29:
-	case DW_OP_breg30:
-	case DW_OP_breg31:
-	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	  i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0);
-	  ax_reg (expr, i);
-	  if (offset != 0)
-	    {
-	      ax_const_l (expr, offset);
-	      ax_simple (expr, aop_add);
-	    }
-	  break;
-	case DW_OP_bregx:
-	  {
-	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	    i = dwarf_reg_to_regnum_or_error (arch, reg);
-	    ax_reg (expr, i);
-	    if (offset != 0)
-	      {
-		ax_const_l (expr, offset);
-		ax_simple (expr, aop_add);
-	      }
-	  }
-	  break;
-	case DW_OP_fbreg:
-	  {
-	    const gdb_byte *datastart;
-	    size_t datalen;
-	    const struct block *b;
-	    struct symbol *framefunc;
-
-	    b = block_for_pc (expr->scope);
-
-	    if (!b)
-	      error (_("No block found for address"));
-
-	    framefunc = block_linkage_function (b);
-
-	    if (!framefunc)
-	      error (_("No function found for block"));
-
-	    func_get_frame_base_dwarf_block (framefunc, expr->scope,
-					     &datastart, &datalen);
-
-	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
-	    dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
-				       datastart + datalen, per_cu);
-	    if (loc->kind == axs_lvalue_register)
-	      require_rvalue (expr, loc);
-
-	    if (offset != 0)
-	      {
-		ax_const_l (expr, offset);
-		ax_simple (expr, aop_add);
-	      }
-
-	    loc->kind = axs_lvalue_memory;
-	  }
-	  break;
-
-	case DW_OP_dup:
-	  ax_simple (expr, aop_dup);
-	  break;
-
-	case DW_OP_drop:
-	  ax_simple (expr, aop_pop);
-	  break;
-
-	case DW_OP_pick:
-	  offset = *op_ptr++;
-	  ax_pick (expr, offset);
-	  break;
-	  
-	case DW_OP_swap:
-	  ax_simple (expr, aop_swap);
-	  break;
-
-	case DW_OP_over:
-	  ax_pick (expr, 1);
-	  break;
-
-	case DW_OP_rot:
-	  ax_simple (expr, aop_rot);
-	  break;
-
-	case DW_OP_deref:
-	case DW_OP_deref_size:
-	  {
-	    int size;
-
-	    if (op == DW_OP_deref_size)
-	      size = *op_ptr++;
-	    else
-	      size = addr_size;
-
-	    if (size != 1 && size != 2 && size != 4 && size != 8)
-	      error (_("Unsupported size %d in %s"),
-		     size, get_DW_OP_name (op));
-	    access_memory (arch, expr, size * TARGET_CHAR_BIT);
-	  }
-	  break;
-
-	case DW_OP_abs:
-	  /* Sign extend the operand.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_dup);
-	  ax_const_l (expr, 0);
-	  ax_simple (expr, aop_less_signed);
-	  ax_simple (expr, aop_log_not);
-	  i = ax_goto (expr, aop_if_goto);
-	  /* We have to emit 0 - X.  */
-	  ax_const_l (expr, 0);
-	  ax_simple (expr, aop_swap);
-	  ax_simple (expr, aop_sub);
-	  ax_label (expr, i, expr->len);
-	  break;
-
-	case DW_OP_neg:
-	  /* No need to sign extend here.  */
-	  ax_const_l (expr, 0);
-	  ax_simple (expr, aop_swap);
-	  ax_simple (expr, aop_sub);
-	  break;
-
-	case DW_OP_not:
-	  /* Sign extend the operand.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_bit_not);
-	  break;
-
-	case DW_OP_plus_uconst:
-	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
-	  /* It would be really weird to emit `DW_OP_plus_uconst 0',
-	     but we micro-optimize anyhow.  */
-	  if (reg != 0)
-	    {
-	      ax_const_l (expr, reg);
-	      ax_simple (expr, aop_add);
-	    }
-	  break;
-
-	case DW_OP_and:
-	  ax_simple (expr, aop_bit_and);
-	  break;
-
-	case DW_OP_div:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_simple (expr, aop_div_signed);
-	  break;
-
-	case DW_OP_minus:
-	  ax_simple (expr, aop_sub);
-	  break;
-
-	case DW_OP_mod:
-	  ax_simple (expr, aop_rem_unsigned);
-	  break;
-
-	case DW_OP_mul:
-	  ax_simple (expr, aop_mul);
-	  break;
-
-	case DW_OP_or:
-	  ax_simple (expr, aop_bit_or);
-	  break;
-
-	case DW_OP_plus:
-	  ax_simple (expr, aop_add);
-	  break;
-
-	case DW_OP_shl:
-	  ax_simple (expr, aop_lsh);
-	  break;
-
-	case DW_OP_shr:
-	  ax_simple (expr, aop_rsh_unsigned);
-	  break;
-
-	case DW_OP_shra:
-	  ax_simple (expr, aop_rsh_signed);
-	  break;
-
-	case DW_OP_xor:
-	  ax_simple (expr, aop_bit_xor);
-	  break;
-
-	case DW_OP_le:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  /* Note no swap here: A <= B is !(B < A).  */
-	  ax_simple (expr, aop_less_signed);
-	  ax_simple (expr, aop_log_not);
-	  break;
-
-	case DW_OP_ge:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  /* A >= B is !(A < B).  */
-	  ax_simple (expr, aop_less_signed);
-	  ax_simple (expr, aop_log_not);
-	  break;
-
-	case DW_OP_eq:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  /* No need for a second swap here.  */
-	  ax_simple (expr, aop_equal);
-	  break;
-
-	case DW_OP_lt:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_simple (expr, aop_less_signed);
-	  break;
-
-	case DW_OP_gt:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  /* Note no swap here: A > B is B < A.  */
-	  ax_simple (expr, aop_less_signed);
-	  break;
-
-	case DW_OP_ne:
-	  /* Sign extend the operands.  */
-	  ax_ext (expr, addr_size_bits);
-	  ax_simple (expr, aop_swap);
-	  ax_ext (expr, addr_size_bits);
-	  /* No need for a swap here.  */
-	  ax_simple (expr, aop_equal);
-	  ax_simple (expr, aop_log_not);
-	  break;
-
-	case DW_OP_call_frame_cfa:
-	  {
-	    int regnum;
-	    CORE_ADDR text_offset;
-	    LONGEST off;
-	    const gdb_byte *cfa_start, *cfa_end;
-
-	    if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu,
-				       &regnum, &off,
-				       &text_offset, &cfa_start, &cfa_end))
-	      {
-		/* Register.  */
-		ax_reg (expr, regnum);
-		if (off != 0)
-		  {
-		    ax_const_l (expr, off);
-		    ax_simple (expr, aop_add);
-		  }
-	      }
-	    else
-	      {
-		/* Another expression.  */
-		ax_const_l (expr, text_offset);
-		dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
-					   cfa_end, per_cu);
-	      }
-
-	    loc->kind = axs_lvalue_memory;
-	  }
-	  break;
-
-	case DW_OP_GNU_push_tls_address:
-	case DW_OP_form_tls_address:
-	  unimplemented (op);
-	  break;
-
-	case DW_OP_push_object_address:
-	  unimplemented (op);
-	  break;
-
-	case DW_OP_skip:
-	  offset = extract_signed_integer (op_ptr, 2, byte_order);
-	  op_ptr += 2;
-	  i = ax_goto (expr, aop_goto);
-	  dw_labels.push_back (op_ptr + offset - base);
-	  patches.push_back (i);
-	  break;
-
-	case DW_OP_bra:
-	  offset = extract_signed_integer (op_ptr, 2, byte_order);
-	  op_ptr += 2;
-	  /* Zero extend the operand.  */
-	  ax_zero_ext (expr, addr_size_bits);
-	  i = ax_goto (expr, aop_if_goto);
-	  dw_labels.push_back (op_ptr + offset - base);
-	  patches.push_back (i);
-	  break;
-
-	case DW_OP_nop:
-	  break;
-
-        case DW_OP_piece:
-	case DW_OP_bit_piece:
-	  {
-	    uint64_t size;
-
-	    if (op_ptr - 1 == previous_piece)
-	      error (_("Cannot translate empty pieces to agent expressions"));
-	    previous_piece = op_ptr - 1;
-
-            op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
-	    if (op == DW_OP_piece)
-	      {
-		size *= 8;
-		uoffset = 0;
-	      }
-	    else
-	      op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
-
-	    if (bits_collected + size > 8 * sizeof (LONGEST))
-	      error (_("Expression pieces exceed word size"));
-
-	    /* Access the bits.  */
-	    switch (loc->kind)
-	      {
-	      case axs_lvalue_register:
-		ax_reg (expr, loc->u.reg);
-		break;
-
-	      case axs_lvalue_memory:
-		/* Offset the pointer, if needed.  */
-		if (uoffset > 8)
-		  {
-		    ax_const_l (expr, uoffset / 8);
-		    ax_simple (expr, aop_add);
-		    uoffset %= 8;
-		  }
-		access_memory (arch, expr, size);
-		break;
-	      }
-
-	    /* For a bits-big-endian target, shift up what we already
-	       have.  For a bits-little-endian target, shift up the
-	       new data.  Note that there is a potential bug here if
-	       the DWARF expression leaves multiple values on the
-	       stack.  */
-	    if (bits_collected > 0)
-	      {
-		if (bits_big_endian)
-		  {
-		    ax_simple (expr, aop_swap);
-		    ax_const_l (expr, size);
-		    ax_simple (expr, aop_lsh);
-		    /* We don't need a second swap here, because
-		       aop_bit_or is symmetric.  */
-		  }
-		else
-		  {
-		    ax_const_l (expr, size);
-		    ax_simple (expr, aop_lsh);
-		  }
-		ax_simple (expr, aop_bit_or);
-	      }
-
-	    bits_collected += size;
-	    loc->kind = axs_rvalue;
-	  }
-	  break;
-
-	case DW_OP_GNU_uninit:
-	  unimplemented (op);
-
-	case DW_OP_call2:
-	case DW_OP_call4:
-	  {
-	    struct dwarf2_locexpr_baton block;
-	    int size = (op == DW_OP_call2 ? 2 : 4);
-
-	    uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
-	    op_ptr += size;
-
-	    cu_offset cuoffset = (cu_offset) uoffset;
-	    block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu,
-						 get_ax_pc, expr);
-
-	    /* DW_OP_call_ref is currently not supported.  */
-	    gdb_assert (block.per_cu == per_cu);
-
-	    dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
-				       block.data + block.size, per_cu);
-	  }
-	  break;
-
-	case DW_OP_call_ref:
-	  unimplemented (op);
-
-	case DW_OP_GNU_variable_value:
-	  unimplemented (op);
-
-	default:
-	  unimplemented (op);
-	}
-    }
-
-  /* Patch all the branches we emitted.  */
-  for (int i = 0; i < patches.size (); ++i)
-    {
-      int targ = offsets[dw_labels[i]];
-      if (targ == -1)
-	internal_error (__FILE__, __LINE__, _("invalid label"));
-      ax_label (expr, patches[i], targ);
-    }
-}
-
-
-/* Return the value of SYMBOL in FRAME using the DWARF-2 expression
-   evaluator to calculate the location.  */
-static struct value *
-locexpr_read_variable (struct symbol *symbol, struct frame_info *frame)
-{
-  struct dwarf2_locexpr_baton *dlbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
-  struct value *val;
-
-  val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
-				  dlbaton->size, dlbaton->per_cu);
-
-  return val;
-}
-
-/* Return the value of SYMBOL in FRAME at (callee) FRAME's function
-   entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
-   will be thrown.  */
-
-static struct value *
-locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
-{
-  struct dwarf2_locexpr_baton *dlbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
-
-  return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data,
-				     dlbaton->size);
-}
-
-/* Implementation of get_symbol_read_needs from
-   symbol_computed_ops.  */
-
-static enum symbol_needs_kind
-locexpr_get_symbol_read_needs (struct symbol *symbol)
-{
-  struct dwarf2_locexpr_baton *dlbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
-
-  return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size,
-						dlbaton->per_cu);
-}
-
-/* Return true if DATA points to the end of a piece.  END is one past
-   the last byte in the expression.  */
-
-static int
-piece_end_p (const gdb_byte *data, const gdb_byte *end)
-{
-  return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
-}
-
-/* Helper for locexpr_describe_location_piece that finds the name of a
-   DWARF register.  */
-
-static const char *
-locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
-{
-  int regnum;
-
-  /* This doesn't use dwarf_reg_to_regnum_or_error on purpose.
-     We'd rather print *something* here than throw an error.  */
-  regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum);
-  /* gdbarch_register_name may just return "", return something more
-     descriptive for bad register numbers.  */
-  if (regnum == -1)
-    {
-      /* The text is output as "$bad_register_number".
-	 That is why we use the underscores.  */
-      return _("bad_register_number");
-    }
-  return gdbarch_register_name (gdbarch, regnum);
-}
-
-/* Nicely describe a single piece of a location, returning an updated
-   position in the bytecode sequence.  This function cannot recognize
-   all locations; if a location is not recognized, it simply returns
-   DATA.  If there is an error during reading, e.g. we run off the end
-   of the buffer, an error is thrown.  */
-
-static const gdb_byte *
-locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
-				 CORE_ADDR addr, struct objfile *objfile,
-				 struct dwarf2_per_cu_data *per_cu,
-				 const gdb_byte *data, const gdb_byte *end,
-				 unsigned int addr_size)
-{
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  size_t leb128_size;
-
-  if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
-    {
-      fprintf_filtered (stream, _("a variable in $%s"),
-			locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
-      data += 1;
-    }
-  else if (data[0] == DW_OP_regx)
-    {
-      uint64_t reg;
-
-      data = safe_read_uleb128 (data + 1, end, &reg);
-      fprintf_filtered (stream, _("a variable in $%s"),
-			locexpr_regname (gdbarch, reg));
-    }
-  else if (data[0] == DW_OP_fbreg)
-    {
-      const struct block *b;
-      struct symbol *framefunc;
-      int frame_reg = 0;
-      int64_t frame_offset;
-      const gdb_byte *base_data, *new_data, *save_data = data;
-      size_t base_size;
-      int64_t base_offset = 0;
-
-      new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
-      if (!piece_end_p (new_data, end))
-	return data;
-      data = new_data;
-
-      b = block_for_pc (addr);
-
-      if (!b)
-	error (_("No block found for address for symbol \"%s\"."),
-	       symbol->print_name ());
-
-      framefunc = block_linkage_function (b);
-
-      if (!framefunc)
-	error (_("No function found for block for symbol \"%s\"."),
-	       symbol->print_name ());
-
-      func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size);
-
-      if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
-	{
-	  const gdb_byte *buf_end;
-	  
-	  frame_reg = base_data[0] - DW_OP_breg0;
-	  buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
-				       &base_offset);
-	  if (buf_end != base_data + base_size)
-	    error (_("Unexpected opcode after "
-		     "DW_OP_breg%u for symbol \"%s\"."),
-		   frame_reg, symbol->print_name ());
-	}
-      else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
-	{
-	  /* The frame base is just the register, with no offset.  */
-	  frame_reg = base_data[0] - DW_OP_reg0;
-	  base_offset = 0;
-	}
-      else
-	{
-	  /* We don't know what to do with the frame base expression,
-	     so we can't trace this variable; give up.  */
-	  return save_data;
-	}
-
-      fprintf_filtered (stream,
-			_("a variable at frame base reg $%s offset %s+%s"),
-			locexpr_regname (gdbarch, frame_reg),
-			plongest (base_offset), plongest (frame_offset));
-    }
-  else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
-	   && piece_end_p (data, end))
-    {
-      int64_t offset;
-
-      data = safe_read_sleb128 (data + 1, end, &offset);
-
-      fprintf_filtered (stream,
-			_("a variable at offset %s from base reg $%s"),
-			plongest (offset),
-			locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
-    }
-
-  /* The location expression for a TLS variable looks like this (on a
-     64-bit LE machine):
-
-     DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
-                        (DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
-
-     0x3 is the encoding for DW_OP_addr, which has an operand as long
-     as the size of an address on the target machine (here is 8
-     bytes).  Note that more recent version of GCC emit DW_OP_const4u
-     or DW_OP_const8u, depending on address size, rather than
-     DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
-     The operand represents the offset at which the variable is within
-     the thread local storage.  */
-
-  else if (data + 1 + addr_size < end
-	   && (data[0] == DW_OP_addr
-	       || (addr_size == 4 && data[0] == DW_OP_const4u)
-	       || (addr_size == 8 && data[0] == DW_OP_const8u))
-	   && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
-	       || data[1 + addr_size] == DW_OP_form_tls_address)
-	   && piece_end_p (data + 2 + addr_size, end))
-    {
-      ULONGEST offset;
-      offset = extract_unsigned_integer (data + 1, addr_size,
-					 gdbarch_byte_order (gdbarch));
-
-      fprintf_filtered (stream, 
-			_("a thread-local variable at offset 0x%s "
-			  "in the thread-local storage for `%s'"),
-			phex_nz (offset, addr_size), objfile_name (objfile));
-
-      data += 1 + addr_size + 1;
-    }
-
-  /* With -gsplit-dwarf a TLS variable can also look like this:
-     DW_AT_location    : 3 byte block: fc 4 e0
-                        (DW_OP_GNU_const_index: 4;
-			 DW_OP_GNU_push_tls_address)  */
-  else if (data + 3 <= end
-	   && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
-	   && data[0] == DW_OP_GNU_const_index
-	   && leb128_size > 0
-	   && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
-	       || data[1 + leb128_size] == DW_OP_form_tls_address)
-	   && piece_end_p (data + 2 + leb128_size, end))
-    {
-      uint64_t offset;
-
-      data = safe_read_uleb128 (data + 1, end, &offset);
-      offset = dwarf2_read_addr_index (per_cu, offset);
-      fprintf_filtered (stream, 
-			_("a thread-local variable at offset 0x%s "
-			  "in the thread-local storage for `%s'"),
-			phex_nz (offset, addr_size), objfile_name (objfile));
-      ++data;
-    }
-
-  else if (data[0] >= DW_OP_lit0
-	   && data[0] <= DW_OP_lit31
-	   && data + 1 < end
-	   && data[1] == DW_OP_stack_value)
-    {
-      fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0);
-      data += 2;
-    }
-
-  return data;
-}
-
-/* Disassemble an expression, stopping at the end of a piece or at the
-   end of the expression.  Returns a pointer to the next unread byte
-   in the input expression.  If ALL is nonzero, then this function
-   will keep going until it reaches the end of the expression.
-   If there is an error during reading, e.g. we run off the end
-   of the buffer, an error is thrown.  */
-
-static const gdb_byte *
-disassemble_dwarf_expression (struct ui_file *stream,
-			      struct gdbarch *arch, unsigned int addr_size,
-			      int offset_size, const gdb_byte *start,
-			      const gdb_byte *data, const gdb_byte *end,
-			      int indent, int all,
-			      struct dwarf2_per_cu_data *per_cu)
-{
-  while (data < end
-	 && (all
-	     || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
-    {
-      enum dwarf_location_atom op = (enum dwarf_location_atom) *data++;
-      uint64_t ul;
-      int64_t l;
-      const char *name;
-
-      name = get_DW_OP_name (op);
-
-      if (!name)
-	error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
-	       op, (long) (data - 1 - start));
-      fprintf_filtered (stream, "  %*ld: %s", indent + 4,
-			(long) (data - 1 - start), name);
-
-      switch (op)
-	{
-	case DW_OP_addr:
-	  ul = extract_unsigned_integer (data, addr_size,
-					 gdbarch_byte_order (arch));
-	  data += addr_size;
-	  fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
-	  break;
-
-	case DW_OP_const1u:
-	  ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
-	  data += 1;
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-	case DW_OP_const1s:
-	  l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
-	  data += 1;
-	  fprintf_filtered (stream, " %s", plongest (l));
-	  break;
-	case DW_OP_const2u:
-	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
-	  data += 2;
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-	case DW_OP_const2s:
-	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
-	  data += 2;
-	  fprintf_filtered (stream, " %s", plongest (l));
-	  break;
-	case DW_OP_const4u:
-	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
-	  data += 4;
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-	case DW_OP_const4s:
-	  l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
-	  data += 4;
-	  fprintf_filtered (stream, " %s", plongest (l));
-	  break;
-	case DW_OP_const8u:
-	  ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
-	  data += 8;
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-	case DW_OP_const8s:
-	  l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
-	  data += 8;
-	  fprintf_filtered (stream, " %s", plongest (l));
-	  break;
-	case DW_OP_constu:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-	case DW_OP_consts:
-	  data = safe_read_sleb128 (data, end, &l);
-	  fprintf_filtered (stream, " %s", plongest (l));
-	  break;
-
-	case DW_OP_reg0:
-	case DW_OP_reg1:
-	case DW_OP_reg2:
-	case DW_OP_reg3:
-	case DW_OP_reg4:
-	case DW_OP_reg5:
-	case DW_OP_reg6:
-	case DW_OP_reg7:
-	case DW_OP_reg8:
-	case DW_OP_reg9:
-	case DW_OP_reg10:
-	case DW_OP_reg11:
-	case DW_OP_reg12:
-	case DW_OP_reg13:
-	case DW_OP_reg14:
-	case DW_OP_reg15:
-	case DW_OP_reg16:
-	case DW_OP_reg17:
-	case DW_OP_reg18:
-	case DW_OP_reg19:
-	case DW_OP_reg20:
-	case DW_OP_reg21:
-	case DW_OP_reg22:
-	case DW_OP_reg23:
-	case DW_OP_reg24:
-	case DW_OP_reg25:
-	case DW_OP_reg26:
-	case DW_OP_reg27:
-	case DW_OP_reg28:
-	case DW_OP_reg29:
-	case DW_OP_reg30:
-	case DW_OP_reg31:
-	  fprintf_filtered (stream, " [$%s]",
-			    locexpr_regname (arch, op - DW_OP_reg0));
-	  break;
-
-	case DW_OP_regx:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
-			    locexpr_regname (arch, (int) ul));
-	  break;
-
-	case DW_OP_implicit_value:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  data += ul;
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-
-	case DW_OP_breg0:
-	case DW_OP_breg1:
-	case DW_OP_breg2:
-	case DW_OP_breg3:
-	case DW_OP_breg4:
-	case DW_OP_breg5:
-	case DW_OP_breg6:
-	case DW_OP_breg7:
-	case DW_OP_breg8:
-	case DW_OP_breg9:
-	case DW_OP_breg10:
-	case DW_OP_breg11:
-	case DW_OP_breg12:
-	case DW_OP_breg13:
-	case DW_OP_breg14:
-	case DW_OP_breg15:
-	case DW_OP_breg16:
-	case DW_OP_breg17:
-	case DW_OP_breg18:
-	case DW_OP_breg19:
-	case DW_OP_breg20:
-	case DW_OP_breg21:
-	case DW_OP_breg22:
-	case DW_OP_breg23:
-	case DW_OP_breg24:
-	case DW_OP_breg25:
-	case DW_OP_breg26:
-	case DW_OP_breg27:
-	case DW_OP_breg28:
-	case DW_OP_breg29:
-	case DW_OP_breg30:
-	case DW_OP_breg31:
-	  data = safe_read_sleb128 (data, end, &l);
-	  fprintf_filtered (stream, " %s [$%s]", plongest (l),
-			    locexpr_regname (arch, op - DW_OP_breg0));
-	  break;
-
-	case DW_OP_bregx:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  data = safe_read_sleb128 (data, end, &l);
-	  fprintf_filtered (stream, " register %s [$%s] offset %s",
-			    pulongest (ul),
-			    locexpr_regname (arch, (int) ul),
-			    plongest (l));
-	  break;
-
-	case DW_OP_fbreg:
-	  data = safe_read_sleb128 (data, end, &l);
-	  fprintf_filtered (stream, " %s", plongest (l));
-	  break;
-
-	case DW_OP_xderef_size:
-	case DW_OP_deref_size:
-	case DW_OP_pick:
-	  fprintf_filtered (stream, " %d", *data);
-	  ++data;
-	  break;
-
-	case DW_OP_plus_uconst:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-
-	case DW_OP_skip:
-	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
-	  data += 2;
-	  fprintf_filtered (stream, " to %ld",
-			    (long) (data + l - start));
-	  break;
-
-	case DW_OP_bra:
-	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
-	  data += 2;
-	  fprintf_filtered (stream, " %ld",
-			    (long) (data + l - start));
-	  break;
-
-	case DW_OP_call2:
-	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
-	  data += 2;
-	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 2));
-	  break;
-
-	case DW_OP_call4:
-	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
-	  data += 4;
-	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
-	  break;
-
-	case DW_OP_call_ref:
-	  ul = extract_unsigned_integer (data, offset_size,
-					 gdbarch_byte_order (arch));
-	  data += offset_size;
-	  fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
-	  break;
-
-        case DW_OP_piece:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
-	  break;
-
-	case DW_OP_bit_piece:
-	  {
-	    uint64_t offset;
-
-	    data = safe_read_uleb128 (data, end, &ul);
-	    data = safe_read_uleb128 (data, end, &offset);
-	    fprintf_filtered (stream, " size %s offset %s (bits)",
-			      pulongest (ul), pulongest (offset));
-	  }
-	  break;
-
-	case DW_OP_implicit_pointer:
-	case DW_OP_GNU_implicit_pointer:
-	  {
-	    ul = extract_unsigned_integer (data, offset_size,
-					   gdbarch_byte_order (arch));
-	    data += offset_size;
-
-	    data = safe_read_sleb128 (data, end, &l);
-
-	    fprintf_filtered (stream, " DIE %s offset %s",
-			      phex_nz (ul, offset_size),
-			      plongest (l));
-	  }
-	  break;
-
-	case DW_OP_deref_type:
-	case DW_OP_GNU_deref_type:
-	  {
-	    int deref_addr_size = *data++;
-	    struct type *type;
-
-	    data = safe_read_uleb128 (data, end, &ul);
-	    cu_offset offset = (cu_offset) ul;
-	    type = dwarf2_get_die_type (offset, per_cu);
-	    fprintf_filtered (stream, "<");
-	    type_print (type, "", stream, -1);
-	    fprintf_filtered (stream, " [0x%s]> %d",
-			      phex_nz (to_underlying (offset), 0),
-			      deref_addr_size);
-	  }
-	  break;
-
-	case DW_OP_const_type:
-	case DW_OP_GNU_const_type:
-	  {
-	    struct type *type;
-
-	    data = safe_read_uleb128 (data, end, &ul);
-	    cu_offset type_die = (cu_offset) ul;
-	    type = dwarf2_get_die_type (type_die, per_cu);
-	    fprintf_filtered (stream, "<");
-	    type_print (type, "", stream, -1);
-	    fprintf_filtered (stream, " [0x%s]>",
-			      phex_nz (to_underlying (type_die), 0));
-	  }
-	  break;
-
-	case DW_OP_regval_type:
-	case DW_OP_GNU_regval_type:
-	  {
-	    uint64_t reg;
-	    struct type *type;
-
-	    data = safe_read_uleb128 (data, end, &reg);
-	    data = safe_read_uleb128 (data, end, &ul);
-	    cu_offset type_die = (cu_offset) ul;
-
-	    type = dwarf2_get_die_type (type_die, per_cu);
-	    fprintf_filtered (stream, "<");
-	    type_print (type, "", stream, -1);
-	    fprintf_filtered (stream, " [0x%s]> [$%s]",
-			      phex_nz (to_underlying (type_die), 0),
-			      locexpr_regname (arch, reg));
-	  }
-	  break;
-
-	case DW_OP_convert:
-	case DW_OP_GNU_convert:
-	case DW_OP_reinterpret:
-	case DW_OP_GNU_reinterpret:
-	  {
-	    data = safe_read_uleb128 (data, end, &ul);
-	    cu_offset type_die = (cu_offset) ul;
-
-	    if (to_underlying (type_die) == 0)
-	      fprintf_filtered (stream, "<0>");
-	    else
-	      {
-		struct type *type;
-
-		type = dwarf2_get_die_type (type_die, per_cu);
-		fprintf_filtered (stream, "<");
-		type_print (type, "", stream, -1);
-		fprintf_filtered (stream, " [0x%s]>",
-				  phex_nz (to_underlying (type_die), 0));
-	      }
-	  }
-	  break;
-
-	case DW_OP_entry_value:
-	case DW_OP_GNU_entry_value:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  fputc_filtered ('\n', stream);
-	  disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
-					start, data, data + ul, indent + 2,
-					all, per_cu);
-	  data += ul;
-	  continue;
-
-	case DW_OP_GNU_parameter_ref:
-	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
-	  data += 4;
-	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
-	  break;
-
-	case DW_OP_addrx:
-	case DW_OP_GNU_addr_index:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  ul = dwarf2_read_addr_index (per_cu, ul);
-	  fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
-	  break;
-	case DW_OP_GNU_const_index:
-	  data = safe_read_uleb128 (data, end, &ul);
-	  ul = dwarf2_read_addr_index (per_cu, ul);
-	  fprintf_filtered (stream, " %s", pulongest (ul));
-	  break;
-
-	case DW_OP_GNU_variable_value:
-	  ul = extract_unsigned_integer (data, offset_size,
-					 gdbarch_byte_order (arch));
-	  data += offset_size;
-	  fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size));
-	  break;
-	}
-
-      fprintf_filtered (stream, "\n");
-    }
-
-  return data;
-}
-
-/* Describe a single location, which may in turn consist of multiple
-   pieces.  */
-
-static void
-locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
-			     struct ui_file *stream,
-			     const gdb_byte *data, size_t size,
-			     struct objfile *objfile, unsigned int addr_size,
-			     int offset_size, struct dwarf2_per_cu_data *per_cu)
-{
-  const gdb_byte *end = data + size;
-  int first_piece = 1, bad = 0;
-
-  while (data < end)
-    {
-      const gdb_byte *here = data;
-      int disassemble = 1;
-
-      if (first_piece)
-	first_piece = 0;
-      else
-	fprintf_filtered (stream, _(", and "));
-
-      if (!dwarf_always_disassemble)
-	{
-	  data = locexpr_describe_location_piece (symbol, stream,
-						  addr, objfile, per_cu,
-						  data, end, addr_size);
-	  /* If we printed anything, or if we have an empty piece,
-	     then don't disassemble.  */
-	  if (data != here
-	      || data[0] == DW_OP_piece
-	      || data[0] == DW_OP_bit_piece)
-	    disassemble = 0;
-	}
-      if (disassemble)
-	{
-	  fprintf_filtered (stream, _("a complex DWARF expression:\n"));
-	  data = disassemble_dwarf_expression (stream,
-					       get_objfile_arch (objfile),
-					       addr_size, offset_size, data,
-					       data, end, 0,
-					       dwarf_always_disassemble,
-					       per_cu);
-	}
-
-      if (data < end)
-	{
-	  int empty = data == here;
-	      
-	  if (disassemble)
-	    fprintf_filtered (stream, "   ");
-	  if (data[0] == DW_OP_piece)
-	    {
-	      uint64_t bytes;
-
-	      data = safe_read_uleb128 (data + 1, end, &bytes);
-
-	      if (empty)
-		fprintf_filtered (stream, _("an empty %s-byte piece"),
-				  pulongest (bytes));
-	      else
-		fprintf_filtered (stream, _(" [%s-byte piece]"),
-				  pulongest (bytes));
-	    }
-	  else if (data[0] == DW_OP_bit_piece)
-	    {
-	      uint64_t bits, offset;
-
-	      data = safe_read_uleb128 (data + 1, end, &bits);
-	      data = safe_read_uleb128 (data, end, &offset);
-
-	      if (empty)
-		fprintf_filtered (stream,
-				  _("an empty %s-bit piece"),
-				  pulongest (bits));
-	      else
-		fprintf_filtered (stream,
-				  _(" [%s-bit piece, offset %s bits]"),
-				  pulongest (bits), pulongest (offset));
-	    }
-	  else
-	    {
-	      bad = 1;
-	      break;
-	    }
-	}
-    }
-
-  if (bad || data > end)
-    error (_("Corrupted DWARF2 expression for \"%s\"."),
-	   symbol->print_name ());
-}
-
-/* Print a natural-language description of SYMBOL to STREAM.  This
-   version is for a symbol with a single location.  */
-
-static void
-locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
-			   struct ui_file *stream)
-{
-  struct dwarf2_locexpr_baton *dlbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
-  struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
-  unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-  int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
-
-  locexpr_describe_location_1 (symbol, addr, stream,
-			       dlbaton->data, dlbaton->size,
-			       objfile, addr_size, offset_size,
-			       dlbaton->per_cu);
-}
-
-/* Describe the location of SYMBOL as an agent value in VALUE, generating
-   any necessary bytecode in AX.  */
-
-static void
-locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
-			    struct axs_value *value)
-{
-  struct dwarf2_locexpr_baton *dlbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
-  unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-
-  if (dlbaton->size == 0)
-    value->optimized_out = 1;
-  else
-    dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
-			       dlbaton->data + dlbaton->size, dlbaton->per_cu);
-}
-
-/* symbol_computed_ops 'generate_c_location' method.  */
-
-static void
-locexpr_generate_c_location (struct symbol *sym, string_file *stream,
-			     struct gdbarch *gdbarch,
-			     unsigned char *registers_used,
-			     CORE_ADDR pc, const char *result_name)
-{
-  struct dwarf2_locexpr_baton *dlbaton
-    = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
-  unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-
-  if (dlbaton->size == 0)
-    error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
-
-  compile_dwarf_expr_to_c (stream, result_name,
-			   sym, pc, gdbarch, registers_used, addr_size,
-			   dlbaton->data, dlbaton->data + dlbaton->size,
-			   dlbaton->per_cu);
-}
-
-/* The set of location functions used with the DWARF-2 expression
-   evaluator.  */
-const struct symbol_computed_ops dwarf2_locexpr_funcs = {
-  locexpr_read_variable,
-  locexpr_read_variable_at_entry,
-  locexpr_get_symbol_read_needs,
-  locexpr_describe_location,
-  0,	/* location_has_loclist */
-  locexpr_tracepoint_var_ref,
-  locexpr_generate_c_location
-};
-
-
-/* Wrapper functions for location lists.  These generally find
-   the appropriate location expression and call something above.  */
-
-/* Return the value of SYMBOL in FRAME using the DWARF-2 expression
-   evaluator to calculate the location.  */
-static struct value *
-loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
-{
-  struct dwarf2_loclist_baton *dlbaton
-    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
-  struct value *val;
-  const gdb_byte *data;
-  size_t size;
-  CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
-
-  data = dwarf2_find_location_expression (dlbaton, &size, pc);
-  val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size,
-				  dlbaton->per_cu);
-
-  return val;
-}
-
-/* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
-   entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
-   will be thrown.
-
-   Function always returns non-NULL value, it may be marked optimized out if
-   inferior frame information is not available.  It throws NO_ENTRY_VALUE_ERROR
-   if it cannot resolve the parameter for any reason.  */
-
-static struct value *
-loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame)
-{
-  struct dwarf2_loclist_baton *dlbaton
-    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
-  const gdb_byte *data;
-  size_t size;
-  CORE_ADDR pc;
-
-  if (frame == NULL || !get_frame_func_if_available (frame, &pc))
-    return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
-
-  data = dwarf2_find_location_expression (dlbaton, &size, pc);
-  if (data == NULL)
-    return allocate_optimized_out_value (SYMBOL_TYPE (symbol));
-
-  return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size);
-}
-
-/* Implementation of get_symbol_read_needs from
-   symbol_computed_ops.  */
-
-static enum symbol_needs_kind
-loclist_symbol_needs (struct symbol *symbol)
-{
-  /* If there's a location list, then assume we need to have a frame
-     to choose the appropriate location expression.  With tracking of
-     global variables this is not necessarily true, but such tracking
-     is disabled in GCC at the moment until we figure out how to
-     represent it.  */
-
-  return SYMBOL_NEEDS_FRAME;
-}
-
-/* Print a natural-language description of SYMBOL to STREAM.  This
-   version applies when there is a list of different locations, each
-   with a specified address range.  */
-
-static void
-loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
-			   struct ui_file *stream)
-{
-  struct dwarf2_loclist_baton *dlbaton
-    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
-  const gdb_byte *loc_ptr, *buf_end;
-  struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-  int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
-  int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
-  /* Adjust base_address for relocatable objects.  */
-  CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
-  CORE_ADDR base_address = dlbaton->base_address + base_offset;
-  int done = 0;
-
-  loc_ptr = dlbaton->data;
-  buf_end = dlbaton->data + dlbaton->size;
-
-  fprintf_filtered (stream, _("multi-location:\n"));
-
-  /* Iterate through locations until we run out.  */
-  while (!done)
-    {
-      CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
-      int length;
-      enum debug_loc_kind kind;
-      const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
-
-      if (dlbaton->from_dwo)
-	kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
-					       loc_ptr, buf_end, &new_ptr,
-					       &low, &high, byte_order);
-      else
-	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
-					   &low, &high,
-					   byte_order, addr_size,
-					   signed_addr_p);
-      loc_ptr = new_ptr;
-      switch (kind)
-	{
-	case DEBUG_LOC_END_OF_LIST:
-	  done = 1;
-	  continue;
-	case DEBUG_LOC_BASE_ADDRESS:
-	  base_address = high + base_offset;
-	  fprintf_filtered (stream, _("  Base address %s"),
-			    paddress (gdbarch, base_address));
-	  continue;
-	case DEBUG_LOC_START_END:
-	case DEBUG_LOC_START_LENGTH:
-	  break;
-	case DEBUG_LOC_BUFFER_OVERFLOW:
-	case DEBUG_LOC_INVALID_ENTRY:
-	  error (_("Corrupted DWARF expression for symbol \"%s\"."),
-		 symbol->print_name ());
-	default:
-	  gdb_assert_not_reached ("bad debug_loc_kind");
-	}
-
-      /* Otherwise, a location expression entry.  */
-      low += base_address;
-      high += base_address;
-
-      low = gdbarch_adjust_dwarf2_addr (gdbarch, low);
-      high = gdbarch_adjust_dwarf2_addr (gdbarch, high);
-
-      length = extract_unsigned_integer (loc_ptr, 2, byte_order);
-      loc_ptr += 2;
-
-      /* (It would improve readability to print only the minimum
-	 necessary digits of the second number of the range.)  */
-      fprintf_filtered (stream, _("  Range %s-%s: "),
-			paddress (gdbarch, low), paddress (gdbarch, high));
-
-      /* Now describe this particular location.  */
-      locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
-				   objfile, addr_size, offset_size,
-				   dlbaton->per_cu);
-
-      fprintf_filtered (stream, "\n");
-
-      loc_ptr += length;
-    }
-}
-
-/* Describe the location of SYMBOL as an agent value in VALUE, generating
-   any necessary bytecode in AX.  */
-static void
-loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
-			    struct axs_value *value)
-{
-  struct dwarf2_loclist_baton *dlbaton
-    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
-  const gdb_byte *data;
-  size_t size;
-  unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-
-  data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
-  if (size == 0)
-    value->optimized_out = 1;
-  else
-    dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
-			       dlbaton->per_cu);
-}
-
-/* symbol_computed_ops 'generate_c_location' method.  */
-
-static void
-loclist_generate_c_location (struct symbol *sym, string_file *stream,
-			     struct gdbarch *gdbarch,
-			     unsigned char *registers_used,
-			     CORE_ADDR pc, const char *result_name)
-{
-  struct dwarf2_loclist_baton *dlbaton
-    = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
-  unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
-  const gdb_byte *data;
-  size_t size;
-
-  data = dwarf2_find_location_expression (dlbaton, &size, pc);
-  if (size == 0)
-    error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
-
-  compile_dwarf_expr_to_c (stream, result_name,
-			   sym, pc, gdbarch, registers_used, addr_size,
-			   data, data + size,
-			   dlbaton->per_cu);
-}
-
-/* The set of location functions used with the DWARF-2 expression
-   evaluator and location lists.  */
-const struct symbol_computed_ops dwarf2_loclist_funcs = {
-  loclist_read_variable,
-  loclist_read_variable_at_entry,
-  loclist_symbol_needs,
-  loclist_describe_location,
-  1,	/* location_has_loclist */
-  loclist_tracepoint_var_ref,
-  loclist_generate_c_location
-};
-
-void
-_initialize_dwarf2loc (void)
-{
-  add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
-			     &entry_values_debug,
-			     _("Set entry values and tail call frames "
-			       "debugging."),
-			     _("Show entry values and tail call frames "
-			       "debugging."),
-			     _("When non-zero, the process of determining "
-			       "parameter values from function entry point "
-			       "and tail call frames will be printed."),
-			     NULL,
-			     show_entry_values_debug,
-			     &setdebuglist, &showdebuglist);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2loc.h ./gdb/dwarf2loc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2loc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2loc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,324 +0,0 @@
-/* DWARF 2 location expression support for GDB.
-
-   Copyright (C) 2003-2020 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/>.  */
-
-#if !defined (DWARF2LOC_H)
-#define DWARF2LOC_H
-
-#include "dwarf2expr.h"
-
-struct symbol_computed_ops;
-struct objfile;
-struct dwarf2_per_cu_data;
-struct dwarf2_loclist_baton;
-struct agent_expr;
-struct axs_value;
-
-/* This header is private to the DWARF-2 reader.  It is shared between
-   dwarf2read.c and dwarf2loc.c.  */
-
-/* `set debug entry-values' setting.  */
-extern unsigned int entry_values_debug;
-
-/* Return the OBJFILE associated with the compilation unit CU.  If CU
-   came from a separate debuginfo file, then the master objfile is
-   returned.  */
-struct objfile *dwarf2_per_cu_objfile (struct dwarf2_per_cu_data *cu);
-
-/* Return the address size given in the compilation unit header for CU.  */
-int dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *cu);
-
-/* Return the DW_FORM_ref_addr size given in the compilation unit header for
-   CU.  */
-int dwarf2_per_cu_ref_addr_size (struct dwarf2_per_cu_data *cu);
-
-/* Return the offset size given in the compilation unit header for CU.  */
-int dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *cu);
-
-/* Return the text offset of the CU.  The returned offset comes from
-   this CU's objfile.  If this objfile came from a separate debuginfo
-   file, then the offset may be different from the corresponding
-   offset in the parent objfile.  */
-CORE_ADDR dwarf2_per_cu_text_offset (struct dwarf2_per_cu_data *cu);
-
-short dwarf2_version (struct dwarf2_per_cu_data *per_cu);
-
-/* Find a particular location expression from a location list.  */
-const gdb_byte *dwarf2_find_location_expression
-  (struct dwarf2_loclist_baton *baton,
-   size_t *locexpr_length,
-   CORE_ADDR pc);
-
-struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_sect_off
-  (sect_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu,
-   CORE_ADDR (*get_frame_pc) (void *baton),
-   void *baton, bool resolve_abstract_p = false);
-
-struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_cu_off
-  (cu_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu,
-   CORE_ADDR (*get_frame_pc) (void *baton),
-   void *baton);
-
-extern const gdb_byte *dwarf2_fetch_constant_bytes (sect_offset,
-						    struct dwarf2_per_cu_data *,
-						    struct obstack *,
-						    LONGEST *);
-
-struct type *dwarf2_fetch_die_type_sect_off (sect_offset,
-					     struct dwarf2_per_cu_data *);
-
-struct type *dwarf2_get_die_type (cu_offset die_offset,
-				  struct dwarf2_per_cu_data *per_cu);
-
-/* Find the frame base information for FRAMEFUNC at PC.  START is an
-   out parameter which is set to point to the DWARF expression to
-   compute.  LENGTH is an out parameter which is set to the length of
-   the DWARF expression.  This throws an exception on error or if an
-   expression is not found; the returned length will never be
-   zero.  */
-
-extern void func_get_frame_base_dwarf_block (struct symbol *framefunc,
-					     CORE_ADDR pc,
-					     const gdb_byte **start,
-					     size_t *length);
-
-/* Evaluate a location description, starting at DATA and with length
-   SIZE, to find the current location of variable of TYPE in the context
-   of FRAME.  */
-
-struct value *dwarf2_evaluate_loc_desc (struct type *type,
-					struct frame_info *frame,
-					const gdb_byte *data,
-					size_t size,
-					struct dwarf2_per_cu_data *per_cu);
-
-/* A chain of addresses that might be needed to resolve a dynamic
-   property.  */
-
-struct property_addr_info
-{
-  /* The type of the object whose dynamic properties, if any, are
-     being resolved.  */
-  struct type *type;
-
-  /* If not NULL, a buffer containing the object's value.  */
-  const gdb_byte *valaddr;
-
-  /* The address of that object.  */
-  CORE_ADDR addr;
-
-  /* If not NULL, a pointer to the info for the object containing
-     the object described by this node.  */
-  struct property_addr_info *next;
-};
-
-/* Converts a dynamic property into a static one.  FRAME is the frame in which
-   the property is evaluated; if NULL, the selected frame (if any) is used
-   instead.
-
-   ADDR_STACK is the stack of addresses that might be needed to evaluate the
-   property. When evaluating a property that is not related to a type, it can
-   be NULL.
-
-   Returns true if PROP could be converted and the static value is passed
-   back into VALUE, otherwise returns false.  */
-
-bool dwarf2_evaluate_property (const struct dynamic_prop *prop,
-			       struct frame_info *frame,
-			       struct property_addr_info *addr_stack,
-			       CORE_ADDR *value);
-
-/* A helper for the compiler interface that compiles a single dynamic
-   property to C code.
-
-   STREAM is where the C code is to be written.
-   RESULT_NAME is the name of the generated variable.
-   GDBARCH is the architecture to use.
-   REGISTERS_USED is a bit-vector that is filled to note which
-   registers are required by the generated expression.
-   PROP is the property for which code is generated.
-   ADDRESS is the address at which the property is considered to be
-   evaluated.
-   SYM the originating symbol, used for error reporting.  */
-
-void dwarf2_compile_property_to_c (string_file *stream,
-				   const char *result_name,
-				   struct gdbarch *gdbarch,
-				   unsigned char *registers_used,
-				   const struct dynamic_prop *prop,
-				   CORE_ADDR address,
-				   struct symbol *sym);
-
-CORE_ADDR dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu,
-				  unsigned int addr_index);
-
-/* The symbol location baton types used by the DWARF-2 reader (i.e.
-   SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol).  "struct
-   dwarf2_locexpr_baton" is for a symbol with a single location
-   expression; "struct dwarf2_loclist_baton" is for a symbol with a
-   location list.  */
-
-struct dwarf2_locexpr_baton
-{
-  /* Pointer to the start of the location expression.  Valid only if SIZE is
-     not zero.  */
-  const gdb_byte *data;
-
-  /* Length of the location expression.  For optimized out expressions it is
-     zero.  */
-  size_t size;
-
-  /* When true this location expression is a reference and actually
-     describes the address at which the value of the attribute can be
-     found.  When false the expression provides the value of the attribute
-     directly.  */
-  bool is_reference;
-
-  /* The compilation unit containing the symbol whose location
-     we're computing.  */
-  struct dwarf2_per_cu_data *per_cu;
-};
-
-struct dwarf2_loclist_baton
-{
-  /* The initial base address for the location list, based on the compilation
-     unit.  */
-  CORE_ADDR base_address;
-
-  /* Pointer to the start of the location list.  */
-  const gdb_byte *data;
-
-  /* Length of the location list.  */
-  size_t size;
-
-  /* The compilation unit containing the symbol whose location
-     we're computing.  */
-  struct dwarf2_per_cu_data *per_cu;
-
-  /* Non-zero if the location list lives in .debug_loc.dwo.
-     The format of entries in this section are different.  */
-  unsigned char from_dwo;
-};
-
-/* The baton used when a dynamic property is an offset to a parent
-   type.  This can be used, for instance, then the bound of an array
-   inside a record is determined by the value of another field inside
-   that record.  */
-
-struct dwarf2_offset_baton
-{
-  /* The offset from the parent type where the value of the property
-     is stored.  In the example provided above, this would be the offset
-     of the field being used as the array bound.  */
-  LONGEST offset;
-
-  /* The type of the object whose property is dynamic.  In the example
-     provided above, this would the array's index type.  */
-  struct type *type;
-};
-
-/* A dynamic property is either expressed as a single location expression
-   or a location list.  If the property is an indirection, pointing to
-   another die, keep track of the targeted type in PROPERTY_TYPE.
-   Alternatively, if the property location gives the property value
-   directly then it will have PROPERTY_TYPE.  */
-
-struct dwarf2_property_baton
-{
-  /* If the property is an indirection, we need to evaluate the location
-     in the context of the type PROPERTY_TYPE.  If the property is supplied
-     by value then it will be of PROPERTY_TYPE.  This field should never be
-     NULL.  */
-  struct type *property_type;
-  union
-  {
-    /* Location expression either evaluated in the context of
-       PROPERTY_TYPE, or a value of type PROPERTY_TYPE.  */
-    struct dwarf2_locexpr_baton locexpr;
-
-    /* Location list to be evaluated in the context of PROPERTY_TYPE.  */
-    struct dwarf2_loclist_baton loclist;
-
-    /* The location is an offset to PROPERTY_TYPE.  */
-    struct dwarf2_offset_baton offset_info;
-  };
-};
-
-extern const struct symbol_computed_ops dwarf2_locexpr_funcs;
-extern const struct symbol_computed_ops dwarf2_loclist_funcs;
-
-extern const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs;
-extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs;
-
-/* Compile a DWARF location expression to an agent expression.
-   
-   EXPR is the agent expression we are building.
-   LOC is the agent value we modify.
-   ARCH is the architecture.
-   ADDR_SIZE is the size of addresses, in bytes.
-   OP_PTR is the start of the location expression.
-   OP_END is one past the last byte of the location expression.
-   
-   This will throw an exception for various kinds of errors -- for
-   example, if the expression cannot be compiled, or if the expression
-   is invalid.  */
-
-extern void dwarf2_compile_expr_to_ax (struct agent_expr *expr,
-				       struct axs_value *loc,
-				       unsigned int addr_size,
-				       const gdb_byte *op_ptr,
-				       const gdb_byte *op_end,
-				       struct dwarf2_per_cu_data *per_cu);
-
-/* Determined tail calls for constructing virtual tail call frames.  */
-
-struct call_site_chain
-  {
-    /* Initially CALLERS == CALLEES == LENGTH.  For partially ambiguous result
-       CALLERS + CALLEES < LENGTH.  */
-    int callers, callees, length;
-
-    /* Variably sized array with LENGTH elements.  Later [0..CALLERS-1] contain
-       top (GDB "prev") sites and [LENGTH-CALLEES..LENGTH-1] contain bottom
-       (GDB "next") sites.  One is interested primarily in the PC field.  */
-    struct call_site *call_site[1];
-  };
-
-struct call_site_stuff;
-extern struct call_site_chain *call_site_find_chain (struct gdbarch *gdbarch,
-						     CORE_ADDR caller_pc,
-						     CORE_ADDR callee_pc);
-
-/* A helper function to convert a DWARF register to an arch register.
-   ARCH is the architecture.
-   DWARF_REG is the register.
-   If DWARF_REG is bad then a complaint is issued and -1 is returned.
-   Note: Some targets get this wrong.  */
-
-extern int dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg);
-
-/* A wrapper on dwarf_reg_to_regnum to throw an exception if the
-   DWARF register cannot be translated to an architecture register.
-   This takes a ULONGEST instead of an int because some callers actually have
-   a ULONGEST.  Negative values passed as ints will still be flagged as
-   invalid.  */
-
-extern int dwarf_reg_to_regnum_or_error (struct gdbarch *arch,
-					 ULONGEST dwarf_reg);
-
-#endif /* dwarf2loc.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2read.c ./gdb/dwarf2read.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2read.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2read.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,26207 +0,0 @@
-/* DWARF 2 debugging format support for GDB.
-
-   Copyright (C) 1994-2020 Free Software Foundation, Inc.
-
-   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
-   Inc.  with support from Florida State University (under contract
-   with the Ada Joint Program Office), and Silicon Graphics, Inc.
-   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
-   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
-   support.
-
-   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/>.  */
-
-/* FIXME: Various die-reading functions need to be more careful with
-   reading off the end of the section.
-   E.g., load_partial_dies, read_partial_die.  */
-
-#include "defs.h"
-#include "dwarf2read.h"
-#include "dwarf-index-cache.h"
-#include "dwarf-index-common.h"
-#include "bfd.h"
-#include "elf-bfd.h"
-#include "symtab.h"
-#include "gdbtypes.h"
-#include "objfiles.h"
-#include "dwarf2.h"
-#include "buildsym.h"
-#include "demangle.h"
-#include "gdb-demangle.h"
-#include "filenames.h"	/* for DOSish file names */
-#include "macrotab.h"
-#include "language.h"
-#include "complaints.h"
-#include "dwarf2expr.h"
-#include "dwarf2loc.h"
-#include "cp-support.h"
-#include "hashtab.h"
-#include "command.h"
-#include "gdbcmd.h"
-#include "block.h"
-#include "addrmap.h"
-#include "typeprint.h"
-#include "psympriv.h"
-#include "c-lang.h"
-#include "go-lang.h"
-#include "valprint.h"
-#include "gdbcore.h" /* for gnutarget */
-#include "gdb/gdb-index.h"
-#include "gdb_bfd.h"
-#include "f-lang.h"
-#include "source.h"
-#include "build-id.h"
-#include "namespace.h"
-#include "gdbsupport/function-view.h"
-#include "gdbsupport/gdb_optional.h"
-#include "gdbsupport/underlying.h"
-#include "gdbsupport/hash_enum.h"
-#include "filename-seen-cache.h"
-#include "producer.h"
-#include <fcntl.h>
-#include <algorithm>
-#include <unordered_map>
-#include "gdbsupport/selftest.h"
-#include "rust-lang.h"
-#include "gdbsupport/pathstuff.h"
-
-/* When == 1, print basic high level tracing messages.
-   When > 1, be more verbose.
-   This is in contrast to the low level DIE reading of dwarf_die_debug.  */
-static unsigned int dwarf_read_debug = 0;
-
-/* When non-zero, dump DIEs after they are read in.  */
-static unsigned int dwarf_die_debug = 0;
-
-/* When non-zero, dump line number entries as they are read in.  */
-static unsigned int dwarf_line_debug = 0;
-
-/* When true, cross-check physname against demangler.  */
-static bool check_physname = false;
-
-/* When true, do not reject deprecated .gdb_index sections.  */
-static bool use_deprecated_index_sections = false;
-
-static const struct objfile_key<dwarf2_per_objfile> dwarf2_objfile_data_key;
-
-/* The "aclass" indices for various kinds of computed DWARF symbols.  */
-
-static int dwarf2_locexpr_index;
-static int dwarf2_loclist_index;
-static int dwarf2_locexpr_block_index;
-static int dwarf2_loclist_block_index;
-
-/* An index into a (C++) symbol name component in a symbol name as
-   recorded in the mapped_index's symbol table.  For each C++ symbol
-   in the symbol table, we record one entry for the start of each
-   component in the symbol in a table of name components, and then
-   sort the table, in order to be able to binary search symbol names,
-   ignoring leading namespaces, both completion and regular look up.
-   For example, for symbol "A::B::C", we'll have an entry that points
-   to "A::B::C", another that points to "B::C", and another for "C".
-   Note that function symbols in GDB index have no parameter
-   information, just the function/method names.  You can convert a
-   name_component to a "const char *" using the
-   'mapped_index::symbol_name_at(offset_type)' method.  */
-
-struct name_component
-{
-  /* Offset in the symbol name where the component starts.  Stored as
-     a (32-bit) offset instead of a pointer to save memory and improve
-     locality on 64-bit architectures.  */
-  offset_type name_offset;
-
-  /* The symbol's index in the symbol and constant pool tables of a
-     mapped_index.  */
-  offset_type idx;
-};
-
-/* Base class containing bits shared by both .gdb_index and
-   .debug_name indexes.  */
-
-struct mapped_index_base
-{
-  mapped_index_base () = default;
-  DISABLE_COPY_AND_ASSIGN (mapped_index_base);
-
-  /* The name_component table (a sorted vector).  See name_component's
-     description above.  */
-  std::vector<name_component> name_components;
-
-  /* How NAME_COMPONENTS is sorted.  */
-  enum case_sensitivity name_components_casing;
-
-  /* Return the number of names in the symbol table.  */
-  virtual size_t symbol_name_count () const = 0;
-
-  /* Get the name of the symbol at IDX in the symbol table.  */
-  virtual const char *symbol_name_at (offset_type idx) const = 0;
-
-  /* Return whether the name at IDX in the symbol table should be
-     ignored.  */
-  virtual bool symbol_name_slot_invalid (offset_type idx) const
-  {
-    return false;
-  }
-
-  /* Build the symbol name component sorted vector, if we haven't
-     yet.  */
-  void build_name_components ();
-
-  /* Returns the lower (inclusive) and upper (exclusive) bounds of the
-     possible matches for LN_NO_PARAMS in the name component
-     vector.  */
-  std::pair<std::vector<name_component>::const_iterator,
-	    std::vector<name_component>::const_iterator>
-    find_name_components_bounds (const lookup_name_info &ln_no_params,
-				 enum language lang) const;
-
-  /* Prevent deleting/destroying via a base class pointer.  */
-protected:
-  ~mapped_index_base() = default;
-};
-
-/* A description of the mapped index.  The file format is described in
-   a comment by the code that writes the index.  */
-struct mapped_index final : public mapped_index_base
-{
-  /* A slot/bucket in the symbol table hash.  */
-  struct symbol_table_slot
-  {
-    const offset_type name;
-    const offset_type vec;
-  };
-
-  /* Index data format version.  */
-  int version = 0;
-
-  /* The address table data.  */
-  gdb::array_view<const gdb_byte> address_table;
-
-  /* The symbol table, implemented as a hash table.  */
-  gdb::array_view<symbol_table_slot> symbol_table;
-
-  /* A pointer to the constant pool.  */
-  const char *constant_pool = nullptr;
-
-  bool symbol_name_slot_invalid (offset_type idx) const override
-  {
-    const auto &bucket = this->symbol_table[idx];
-    return bucket.name == 0 && bucket.vec == 0;
-  }
-
-  /* Convenience method to get at the name of the symbol at IDX in the
-     symbol table.  */
-  const char *symbol_name_at (offset_type idx) const override
-  { return this->constant_pool + MAYBE_SWAP (this->symbol_table[idx].name); }
-
-  size_t symbol_name_count () const override
-  { return this->symbol_table.size (); }
-};
-
-/* A description of the mapped .debug_names.
-   Uninitialized map has CU_COUNT 0.  */
-struct mapped_debug_names final : public mapped_index_base
-{
-  mapped_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile_)
-  : dwarf2_per_objfile (dwarf2_per_objfile_)
-  {}
-
-  struct dwarf2_per_objfile *dwarf2_per_objfile;
-  bfd_endian dwarf5_byte_order;
-  bool dwarf5_is_dwarf64;
-  bool augmentation_is_gdb;
-  uint8_t offset_size;
-  uint32_t cu_count = 0;
-  uint32_t tu_count, bucket_count, name_count;
-  const gdb_byte *cu_table_reordered, *tu_table_reordered;
-  const uint32_t *bucket_table_reordered, *hash_table_reordered;
-  const gdb_byte *name_table_string_offs_reordered;
-  const gdb_byte *name_table_entry_offs_reordered;
-  const gdb_byte *entry_pool;
-
-  struct index_val
-  {
-    ULONGEST dwarf_tag;
-    struct attr
-    {
-      /* Attribute name DW_IDX_*.  */
-      ULONGEST dw_idx;
-
-      /* Attribute form DW_FORM_*.  */
-      ULONGEST form;
-
-      /* Value if FORM is DW_FORM_implicit_const.  */
-      LONGEST implicit_const;
-    };
-    std::vector<attr> attr_vec;
-  };
-
-  std::unordered_map<ULONGEST, index_val> abbrev_map;
-
-  const char *namei_to_name (uint32_t namei) const;
-
-  /* Implementation of the mapped_index_base virtual interface, for
-     the name_components cache.  */
-
-  const char *symbol_name_at (offset_type idx) const override
-  { return namei_to_name (idx); }
-
-  size_t symbol_name_count () const override
-  { return this->name_count; }
-};
-
-/* See dwarf2read.h.  */
-
-dwarf2_per_objfile *
-get_dwarf2_per_objfile (struct objfile *objfile)
-{
-  return dwarf2_objfile_data_key.get (objfile);
-}
-
-/* Default names of the debugging sections.  */
-
-/* Note that if the debugging section has been compressed, it might
-   have a name like .zdebug_info.  */
-
-static const struct dwarf2_debug_sections dwarf2_elf_names =
-{
-  { ".debug_info", ".zdebug_info" },
-  { ".debug_abbrev", ".zdebug_abbrev" },
-  { ".debug_line", ".zdebug_line" },
-  { ".debug_loc", ".zdebug_loc" },
-  { ".debug_loclists", ".zdebug_loclists" },
-  { ".debug_macinfo", ".zdebug_macinfo" },
-  { ".debug_macro", ".zdebug_macro" },
-  { ".debug_str", ".zdebug_str" },
-  { ".debug_line_str", ".zdebug_line_str" },
-  { ".debug_ranges", ".zdebug_ranges" },
-  { ".debug_rnglists", ".zdebug_rnglists" },
-  { ".debug_types", ".zdebug_types" },
-  { ".debug_addr", ".zdebug_addr" },
-  { ".debug_frame", ".zdebug_frame" },
-  { ".eh_frame", NULL },
-  { ".gdb_index", ".zgdb_index" },
-  { ".debug_names", ".zdebug_names" },
-  { ".debug_aranges", ".zdebug_aranges" },
-  23
-};
-
-/* List of DWO/DWP sections.  */
-
-static const struct dwop_section_names
-{
-  struct dwarf2_section_names abbrev_dwo;
-  struct dwarf2_section_names info_dwo;
-  struct dwarf2_section_names line_dwo;
-  struct dwarf2_section_names loc_dwo;
-  struct dwarf2_section_names loclists_dwo;
-  struct dwarf2_section_names macinfo_dwo;
-  struct dwarf2_section_names macro_dwo;
-  struct dwarf2_section_names str_dwo;
-  struct dwarf2_section_names str_offsets_dwo;
-  struct dwarf2_section_names types_dwo;
-  struct dwarf2_section_names cu_index;
-  struct dwarf2_section_names tu_index;
-}
-dwop_section_names =
-{
-  { ".debug_abbrev.dwo", ".zdebug_abbrev.dwo" },
-  { ".debug_info.dwo", ".zdebug_info.dwo" },
-  { ".debug_line.dwo", ".zdebug_line.dwo" },
-  { ".debug_loc.dwo", ".zdebug_loc.dwo" },
-  { ".debug_loclists.dwo", ".zdebug_loclists.dwo" },
-  { ".debug_macinfo.dwo", ".zdebug_macinfo.dwo" },
-  { ".debug_macro.dwo", ".zdebug_macro.dwo" },
-  { ".debug_str.dwo", ".zdebug_str.dwo" },
-  { ".debug_str_offsets.dwo", ".zdebug_str_offsets.dwo" },
-  { ".debug_types.dwo", ".zdebug_types.dwo" },
-  { ".debug_cu_index", ".zdebug_cu_index" },
-  { ".debug_tu_index", ".zdebug_tu_index" },
-};
-
-/* local data types */
-
-/* The data in a compilation unit header, after target2host
-   translation, looks like this.  */
-struct comp_unit_head
-{
-  unsigned int length;
-  short version;
-  unsigned char addr_size;
-  unsigned char signed_addr_p;
-  sect_offset abbrev_sect_off;
-
-  /* Size of file offsets; either 4 or 8.  */
-  unsigned int offset_size;
-
-  /* Size of the length field; either 4 or 12.  */
-  unsigned int initial_length_size;
-
-  enum dwarf_unit_type unit_type;
-
-  /* Offset to the first byte of this compilation unit header in the
-     .debug_info section, for resolving relative reference dies.  */
-  sect_offset sect_off;
-
-  /* Offset to first die in this cu from the start of the cu.
-     This will be the first byte following the compilation unit header.  */
-  cu_offset first_die_cu_offset;
-
-
-  /* 64-bit signature of this unit. For type units, it denotes the signature of
-     the type (DW_UT_type in DWARF 4, additionally DW_UT_split_type in DWARF 5).
-     Also used in DWARF 5, to denote the dwo id when the unit type is
-     DW_UT_skeleton or DW_UT_split_compile.  */
-  ULONGEST signature;
-
-  /* For types, offset in the type's DIE of the type defined by this TU.  */
-  cu_offset type_cu_offset_in_tu;
-};
-
-/* Type used for delaying computation of method physnames.
-   See comments for compute_delayed_physnames.  */
-struct delayed_method_info
-{
-  /* The type to which the method is attached, i.e., its parent class.  */
-  struct type *type;
-
-  /* The index of the method in the type's function fieldlists.  */
-  int fnfield_index;
-
-  /* The index of the method in the fieldlist.  */
-  int index;
-
-  /* The name of the DIE.  */
-  const char *name;
-
-  /*  The DIE associated with this method.  */
-  struct die_info *die;
-};
-
-/* Internal state when decoding a particular compilation unit.  */
-struct dwarf2_cu
-{
-  explicit dwarf2_cu (struct dwarf2_per_cu_data *per_cu);
-  ~dwarf2_cu ();
-
-  DISABLE_COPY_AND_ASSIGN (dwarf2_cu);
-
-  /* TU version of handle_DW_AT_stmt_list for read_type_unit_scope.
-     Create the set of symtabs used by this TU, or if this TU is sharing
-     symtabs with another TU and the symtabs have already been created
-     then restore those symtabs in the line header.
-     We don't need the pc/line-number mapping for type units.  */
-  void setup_type_unit_groups (struct die_info *die);
-
-  /* Start a symtab for DWARF.  NAME, COMP_DIR, LOW_PC are passed to the
-     buildsym_compunit constructor.  */
-  struct compunit_symtab *start_symtab (const char *name,
-					const char *comp_dir,
-					CORE_ADDR low_pc);
-
-  /* Reset the builder.  */
-  void reset_builder () { m_builder.reset (); }
-
-  /* The header of the compilation unit.  */
-  struct comp_unit_head header {};
-
-  /* Base address of this compilation unit.  */
-  CORE_ADDR base_address = 0;
-
-  /* Non-zero if base_address has been set.  */
-  int base_known = 0;
-
-  /* The language we are debugging.  */
-  enum language language = language_unknown;
-  const struct language_defn *language_defn = nullptr;
-
-  const char *producer = nullptr;
-
-private:
-  /* The symtab builder for this CU.  This is only non-NULL when full
-     symbols are being read.  */
-  std::unique_ptr<buildsym_compunit> m_builder;
-
-public:
-  /* The generic symbol table building routines have separate lists for
-     file scope symbols and all all other scopes (local scopes).  So
-     we need to select the right one to pass to add_symbol_to_list().
-     We do it by keeping a pointer to the correct list in list_in_scope.
-
-     FIXME: The original dwarf code just treated the file scope as the
-     first local scope, and all other local scopes as nested local
-     scopes, and worked fine.  Check to see if we really need to
-     distinguish these in buildsym.c.  */
-  struct pending **list_in_scope = nullptr;
-
-  /* Hash table holding all the loaded partial DIEs
-     with partial_die->offset.SECT_OFF as hash.  */
-  htab_t partial_dies = nullptr;
-
-  /* Storage for things with the same lifetime as this read-in compilation
-     unit, including partial DIEs.  */
-  auto_obstack comp_unit_obstack;
-
-  /* When multiple dwarf2_cu structures are living in memory, this field
-     chains them all together, so that they can be released efficiently.
-     We will probably also want a generation counter so that most-recently-used
-     compilation units are cached...  */
-  struct dwarf2_per_cu_data *read_in_chain = nullptr;
-
-  /* Backlink to our per_cu entry.  */
-  struct dwarf2_per_cu_data *per_cu;
-
-  /* How many compilation units ago was this CU last referenced?  */
-  int last_used = 0;
-
-  /* A hash table of DIE cu_offset for following references with
-     die_info->offset.sect_off as hash.  */
-  htab_t die_hash = nullptr;
-
-  /* Full DIEs if read in.  */
-  struct die_info *dies = nullptr;
-
-  /* A set of pointers to dwarf2_per_cu_data objects for compilation
-     units referenced by this one.  Only set during full symbol processing;
-     partial symbol tables do not have dependencies.  */
-  htab_t dependencies = nullptr;
-
-  /* Header data from the line table, during full symbol processing.  */
-  struct line_header *line_header = nullptr;
-  /* Non-NULL if LINE_HEADER is owned by this DWARF_CU.  Otherwise,
-     it's owned by dwarf2_per_objfile::line_header_hash.  If non-NULL,
-     this is the DW_TAG_compile_unit die for this CU.  We'll hold on
-     to the line header as long as this DIE is being processed.  See
-     process_die_scope.  */
-  die_info *line_header_die_owner = nullptr;
-
-  /* A list of methods which need to have physnames computed
-     after all type information has been read.  */
-  std::vector<delayed_method_info> method_list;
-
-  /* To be copied to symtab->call_site_htab.  */
-  htab_t call_site_htab = nullptr;
-
-  /* Non-NULL if this CU came from a DWO file.
-     There is an invariant here that is important to remember:
-     Except for attributes copied from the top level DIE in the "main"
-     (or "stub") file in preparation for reading the DWO file
-     (e.g., DW_AT_GNU_addr_base), we KISS: there is only *one* CU.
-     Either there isn't a DWO file (in which case this is NULL and the point
-     is moot), or there is and either we're not going to read it (in which
-     case this is NULL) or there is and we are reading it (in which case this
-     is non-NULL).  */
-  struct dwo_unit *dwo_unit = nullptr;
-
-  /* The DW_AT_addr_base attribute if present, zero otherwise
-     (zero is a valid value though).
-     Note this value comes from the Fission stub CU/TU's DIE.  */
-  ULONGEST addr_base = 0;
-
-  /* The DW_AT_ranges_base attribute if present, zero otherwise
-     (zero is a valid value though).
-     Note this value comes from the Fission stub CU/TU's DIE.
-     Also note that the value is zero in the non-DWO case so this value can
-     be used without needing to know whether DWO files are in use or not.
-     N.B. This does not apply to DW_AT_ranges appearing in
-     DW_TAG_compile_unit dies.  This is a bit of a wart, consider if ever
-     DW_AT_ranges appeared in the DW_TAG_compile_unit of DWO DIEs: then
-     DW_AT_ranges_base *would* have to be applied, and we'd have to care
-     whether the DW_AT_ranges attribute came from the skeleton or DWO.  */
-  ULONGEST ranges_base = 0;
-
-  /* When reading debug info generated by older versions of rustc, we
-     have to rewrite some union types to be struct types with a
-     variant part.  This rewriting must be done after the CU is fully
-     read in, because otherwise at the point of rewriting some struct
-     type might not have been fully processed.  So, we keep a list of
-     all such types here and process them after expansion.  */
-  std::vector<struct type *> rust_unions;
-
-  /* Mark used when releasing cached dies.  */
-  bool mark : 1;
-
-  /* This CU references .debug_loc.  See the symtab->locations_valid field.
-     This test is imperfect as there may exist optimized debug code not using
-     any location list and still facing inlining issues if handled as
-     unoptimized code.  For a future better test see GCC PR other/32998.  */
-  bool has_loclist : 1;
-
-  /* These cache the results for producer_is_* fields.  CHECKED_PRODUCER is true
-     if all the producer_is_* fields are valid.  This information is cached
-     because profiling CU expansion showed excessive time spent in
-     producer_is_gxx_lt_4_6.  */
-  bool checked_producer : 1;
-  bool producer_is_gxx_lt_4_6 : 1;
-  bool producer_is_gcc_lt_4_3 : 1;
-  bool producer_is_icc : 1;
-  bool producer_is_icc_lt_14 : 1;
-  bool producer_is_codewarrior : 1;
-
-  /* When true, the file that we're processing is known to have
-     debugging info for C++ namespaces.  GCC 3.3.x did not produce
-     this information, but later versions do.  */
-
-  bool processing_has_namespace_info : 1;
-
-  struct partial_die_info *find_partial_die (sect_offset sect_off);
-
-  /* If this CU was inherited by another CU (via specification,
-     abstract_origin, etc), this is the ancestor CU.  */
-  dwarf2_cu *ancestor;
-
-  /* Get the buildsym_compunit for this CU.  */
-  buildsym_compunit *get_builder ()
-  {
-    /* If this CU has a builder associated with it, use that.  */
-    if (m_builder != nullptr)
-      return m_builder.get ();
-
-    /* Otherwise, search ancestors for a valid builder.  */
-    if (ancestor != nullptr)
-      return ancestor->get_builder ();
-
-    return nullptr;
-  }
-};
-
-/* A struct that can be used as a hash key for tables based on DW_AT_stmt_list.
-   This includes type_unit_group and quick_file_names.  */
-
-struct stmt_list_hash
-{
-  /* The DWO unit this table is from or NULL if there is none.  */
-  struct dwo_unit *dwo_unit;
-
-  /* Offset in .debug_line or .debug_line.dwo.  */
-  sect_offset line_sect_off;
-};
-
-/* Each element of dwarf2_per_objfile->type_unit_groups is a pointer to
-   an object of this type.  */
-
-struct type_unit_group
-{
-  /* dwarf2read.c's main "handle" on a TU symtab.
-     To simplify things we create an artificial CU that "includes" all the
-     type units using this stmt_list so that the rest of the code still has
-     a "per_cu" handle on the symtab.
-     This PER_CU is recognized by having no section.  */
-#define IS_TYPE_UNIT_GROUP(per_cu) ((per_cu)->section == NULL)
-  struct dwarf2_per_cu_data per_cu;
-
-  /* The TUs that share this DW_AT_stmt_list entry.
-     This is added to while parsing type units to build partial symtabs,
-     and is deleted afterwards and not used again.  */
-  std::vector<signatured_type *> *tus;
-
-  /* The compunit symtab.
-     Type units in a group needn't all be defined in the same source file,
-     so we create an essentially anonymous symtab as the compunit symtab.  */
-  struct compunit_symtab *compunit_symtab;
-
-  /* The data used to construct the hash key.  */
-  struct stmt_list_hash hash;
-
-  /* The number of symtabs from the line header.
-     The value here must match line_header.num_file_names.  */
-  unsigned int num_symtabs;
-
-  /* The symbol tables for this TU (obtained from the files listed in
-     DW_AT_stmt_list).
-     WARNING: The order of entries here must match the order of entries
-     in the line header.  After the first TU using this type_unit_group, the
-     line header for the subsequent TUs is recreated from this.  This is done
-     because we need to use the same symtabs for each TU using the same
-     DW_AT_stmt_list value.  Also note that symtabs may be repeated here,
-     there's no guarantee the line header doesn't have duplicate entries.  */
-  struct symtab **symtabs;
-};
-
-/* These sections are what may appear in a (real or virtual) DWO file.  */
-
-struct dwo_sections
-{
-  struct dwarf2_section_info abbrev;
-  struct dwarf2_section_info line;
-  struct dwarf2_section_info loc;
-  struct dwarf2_section_info loclists;
-  struct dwarf2_section_info macinfo;
-  struct dwarf2_section_info macro;
-  struct dwarf2_section_info str;
-  struct dwarf2_section_info str_offsets;
-  /* In the case of a virtual DWO file, these two are unused.  */
-  struct dwarf2_section_info info;
-  std::vector<dwarf2_section_info> types;
-};
-
-/* CUs/TUs in DWP/DWO files.  */
-
-struct dwo_unit
-{
-  /* Backlink to the containing struct dwo_file.  */
-  struct dwo_file *dwo_file;
-
-  /* The "id" that distinguishes this CU/TU.
-     .debug_info calls this "dwo_id", .debug_types calls this "signature".
-     Since signatures came first, we stick with it for consistency.  */
-  ULONGEST signature;
-
-  /* The section this CU/TU lives in, in the DWO file.  */
-  struct dwarf2_section_info *section;
-
-  /* Same as dwarf2_per_cu_data:{sect_off,length} but in the DWO section.  */
-  sect_offset sect_off;
-  unsigned int length;
-
-  /* For types, offset in the type's DIE of the type defined by this TU.  */
-  cu_offset type_offset_in_tu;
-};
-
-/* include/dwarf2.h defines the DWP section codes.
-   It defines a max value but it doesn't define a min value, which we
-   use for error checking, so provide one.  */
-
-enum dwp_v2_section_ids
-{
-  DW_SECT_MIN = 1
-};
-
-/* Data for one DWO file.
-
-   This includes virtual DWO files (a virtual DWO file is a DWO file as it
-   appears in a DWP file).  DWP files don't really have DWO files per se -
-   comdat folding of types "loses" the DWO file they came from, and from
-   a high level view DWP files appear to contain a mass of random types.
-   However, to maintain consistency with the non-DWP case we pretend DWP
-   files contain virtual DWO files, and we assign each TU with one virtual
-   DWO file (generally based on the line and abbrev section offsets -
-   a heuristic that seems to work in practice).  */
-
-struct dwo_file
-{
-  dwo_file () = default;
-  DISABLE_COPY_AND_ASSIGN (dwo_file);
-
-  /* The DW_AT_GNU_dwo_name attribute.
-     For virtual DWO files the name is constructed from the section offsets
-     of abbrev,line,loc,str_offsets so that we combine virtual DWO files
-     from related CU+TUs.  */
-  const char *dwo_name = nullptr;
-
-  /* The DW_AT_comp_dir attribute.  */
-  const char *comp_dir = nullptr;
-
-  /* The bfd, when the file is open.  Otherwise this is NULL.
-     This is unused(NULL) for virtual DWO files where we use dwp_file.dbfd.  */
-  gdb_bfd_ref_ptr dbfd;
-
-  /* The sections that make up this DWO file.
-     Remember that for virtual DWO files in DWP V2, these are virtual
-     sections (for lack of a better name).  */
-  struct dwo_sections sections {};
-
-  /* The CUs in the file.
-     Each element is a struct dwo_unit. Multiple CUs per DWO are supported as
-     an extension to handle LLVM's Link Time Optimization output (where
-     multiple source files may be compiled into a single object/dwo pair). */
-  htab_t cus {};
-
-  /* Table of TUs in the file.
-     Each element is a struct dwo_unit.  */
-  htab_t tus {};
-};
-
-/* These sections are what may appear in a DWP file.  */
-
-struct dwp_sections
-{
-  /* These are used by both DWP version 1 and 2.  */
-  struct dwarf2_section_info str;
-  struct dwarf2_section_info cu_index;
-  struct dwarf2_section_info tu_index;
-
-  /* These are only used by DWP version 2 files.
-     In DWP version 1 the .debug_info.dwo, .debug_types.dwo, and other
-     sections are referenced by section number, and are not recorded here.
-     In DWP version 2 there is at most one copy of all these sections, each
-     section being (effectively) comprised of the concatenation of all of the
-     individual sections that exist in the version 1 format.
-     To keep the code simple we treat each of these concatenated pieces as a
-     section itself (a virtual section?).  */
-  struct dwarf2_section_info abbrev;
-  struct dwarf2_section_info info;
-  struct dwarf2_section_info line;
-  struct dwarf2_section_info loc;
-  struct dwarf2_section_info macinfo;
-  struct dwarf2_section_info macro;
-  struct dwarf2_section_info str_offsets;
-  struct dwarf2_section_info types;
-};
-
-/* These sections are what may appear in a virtual DWO file in DWP version 1.
-   A virtual DWO file is a DWO file as it appears in a DWP file.  */
-
-struct virtual_v1_dwo_sections
-{
-  struct dwarf2_section_info abbrev;
-  struct dwarf2_section_info line;
-  struct dwarf2_section_info loc;
-  struct dwarf2_section_info macinfo;
-  struct dwarf2_section_info macro;
-  struct dwarf2_section_info str_offsets;
-  /* Each DWP hash table entry records one CU or one TU.
-     That is recorded here, and copied to dwo_unit.section.  */
-  struct dwarf2_section_info info_or_types;
-};
-
-/* Similar to virtual_v1_dwo_sections, but for DWP version 2.
-   In version 2, the sections of the DWO files are concatenated together
-   and stored in one section of that name.  Thus each ELF section contains
-   several "virtual" sections.  */
-
-struct virtual_v2_dwo_sections
-{
-  bfd_size_type abbrev_offset;
-  bfd_size_type abbrev_size;
-
-  bfd_size_type line_offset;
-  bfd_size_type line_size;
-
-  bfd_size_type loc_offset;
-  bfd_size_type loc_size;
-
-  bfd_size_type macinfo_offset;
-  bfd_size_type macinfo_size;
-
-  bfd_size_type macro_offset;
-  bfd_size_type macro_size;
-
-  bfd_size_type str_offsets_offset;
-  bfd_size_type str_offsets_size;
-
-  /* Each DWP hash table entry records one CU or one TU.
-     That is recorded here, and copied to dwo_unit.section.  */
-  bfd_size_type info_or_types_offset;
-  bfd_size_type info_or_types_size;
-};
-
-/* Contents of DWP hash tables.  */
-
-struct dwp_hash_table
-{
-  uint32_t version, nr_columns;
-  uint32_t nr_units, nr_slots;
-  const gdb_byte *hash_table, *unit_table;
-  union
-  {
-    struct
-    {
-      const gdb_byte *indices;
-    } v1;
-    struct
-    {
-      /* This is indexed by column number and gives the id of the section
-	 in that column.  */
-#define MAX_NR_V2_DWO_SECTIONS \
-  (1 /* .debug_info or .debug_types */ \
-   + 1 /* .debug_abbrev */ \
-   + 1 /* .debug_line */ \
-   + 1 /* .debug_loc */ \
-   + 1 /* .debug_str_offsets */ \
-   + 1 /* .debug_macro or .debug_macinfo */)
-      int section_ids[MAX_NR_V2_DWO_SECTIONS];
-      const gdb_byte *offsets;
-      const gdb_byte *sizes;
-    } v2;
-  } section_pool;
-};
-
-/* Data for one DWP file.  */
-
-struct dwp_file
-{
-  dwp_file (const char *name_, gdb_bfd_ref_ptr &&abfd)
-    : name (name_),
-      dbfd (std::move (abfd))
-  {
-  }
-
-  /* Name of the file.  */
-  const char *name;
-
-  /* File format version.  */
-  int version = 0;
-
-  /* The bfd.  */
-  gdb_bfd_ref_ptr dbfd;
-
-  /* Section info for this file.  */
-  struct dwp_sections sections {};
-
-  /* Table of CUs in the file.  */
-  const struct dwp_hash_table *cus = nullptr;
-
-  /* Table of TUs in the file.  */
-  const struct dwp_hash_table *tus = nullptr;
-
-  /* Tables of loaded CUs/TUs.  Each entry is a struct dwo_unit *.  */
-  htab_t loaded_cus {};
-  htab_t loaded_tus {};
-
-  /* Table to map ELF section numbers to their sections.
-     This is only needed for the DWP V1 file format.  */
-  unsigned int num_sections = 0;
-  asection **elf_sections = nullptr;
-};
-
-/* Struct used to pass misc. parameters to read_die_and_children, et
-   al.  which are used for both .debug_info and .debug_types dies.
-   All parameters here are unchanging for the life of the call.  This
-   struct exists to abstract away the constant parameters of die reading.  */
-
-struct die_reader_specs
-{
-  /* The bfd of die_section.  */
-  bfd* abfd;
-
-  /* The CU of the DIE we are parsing.  */
-  struct dwarf2_cu *cu;
-
-  /* Non-NULL if reading a DWO file (including one packaged into a DWP).  */
-  struct dwo_file *dwo_file;
-
-  /* The section the die comes from.
-     This is either .debug_info or .debug_types, or the .dwo variants.  */
-  struct dwarf2_section_info *die_section;
-
-  /* die_section->buffer.  */
-  const gdb_byte *buffer;
-
-  /* The end of the buffer.  */
-  const gdb_byte *buffer_end;
-
-  /* The value of the DW_AT_comp_dir attribute.  */
-  const char *comp_dir;
-
-  /* The abbreviation table to use when reading the DIEs.  */
-  struct abbrev_table *abbrev_table;
-};
-
-/* Type of function passed to init_cutu_and_read_dies, et.al.  */
-typedef void (die_reader_func_ftype) (const struct die_reader_specs *reader,
-				      const gdb_byte *info_ptr,
-				      struct die_info *comp_unit_die,
-				      int has_children,
-				      void *data);
-
-/* dir_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5 and
-   later.  */
-typedef int dir_index;
-
-/* file_name_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5
-   and later.  */
-typedef int file_name_index;
-
-struct file_entry
-{
-  file_entry () = default;
-
-  file_entry (const char *name_, dir_index d_index_,
-	      unsigned int mod_time_, unsigned int length_)
-    : name (name_),
-      d_index (d_index_),
-      mod_time (mod_time_),
-      length (length_)
-  {}
-
-  /* Return the include directory at D_INDEX stored in LH.  Returns
-     NULL if D_INDEX is out of bounds.  */
-  const char *include_dir (const line_header *lh) const;
-
-  /* The file name.  Note this is an observing pointer.  The memory is
-     owned by debug_line_buffer.  */
-  const char *name {};
-
-  /* The directory index (1-based).  */
-  dir_index d_index {};
-
-  unsigned int mod_time {};
-
-  unsigned int length {};
-
-  /* True if referenced by the Line Number Program.  */
-  bool included_p {};
-
-  /* The associated symbol table, if any.  */
-  struct symtab *symtab {};
-};
-
-/* The line number information for a compilation unit (found in the
-   .debug_line section) begins with a "statement program header",
-   which contains the following information.  */
-struct line_header
-{
-  line_header ()
-    : offset_in_dwz {}
-  {}
-
-  /* Add an entry to the include directory table.  */
-  void add_include_dir (const char *include_dir);
-
-  /* Add an entry to the file name table.  */
-  void add_file_name (const char *name, dir_index d_index,
-		      unsigned int mod_time, unsigned int length);
-
-  /* Return the include dir at INDEX (0-based in DWARF 5 and 1-based before).
-     Returns NULL if INDEX is out of bounds.  */
-  const char *include_dir_at (dir_index index) const
-  {
-    int vec_index;
-    if (version >= 5)
-      vec_index = index;
-    else
-      vec_index = index - 1;
-    if (vec_index < 0 || vec_index >= m_include_dirs.size ())
-      return NULL;
-    return m_include_dirs[vec_index];
-  }
-
-  bool is_valid_file_index (int file_index)
-  {
-    if (version >= 5)
-      return 0 <= file_index && file_index < file_names_size ();
-    return 1 <= file_index && file_index <= file_names_size ();
-  }
-
-  /* Return the file name at INDEX (0-based in DWARF 5 and 1-based before).
-     Returns NULL if INDEX is out of bounds.  */
-  file_entry *file_name_at (file_name_index index)
-  {
-    int vec_index;
-    if (version >= 5)
-      vec_index = index;
-    else
-      vec_index = index - 1;
-    if (vec_index < 0 || vec_index >= m_file_names.size ())
-      return NULL;
-    return &m_file_names[vec_index];
-  }
-
-  /* The indexes are 0-based in DWARF 5 and 1-based in DWARF 4. Therefore,
-     this method should only be used to iterate through all file entries in an
-     index-agnostic manner.  */
-  std::vector<file_entry> &file_names ()
-  { return m_file_names; }
-
-  /* Offset of line number information in .debug_line section.  */
-  sect_offset sect_off {};
-
-  /* OFFSET is for struct dwz_file associated with dwarf2_per_objfile.  */
-  unsigned offset_in_dwz : 1; /* Can't initialize bitfields in-class.  */
-
-  unsigned int total_length {};
-  unsigned short version {};
-  unsigned int header_length {};
-  unsigned char minimum_instruction_length {};
-  unsigned char maximum_ops_per_instruction {};
-  unsigned char default_is_stmt {};
-  int line_base {};
-  unsigned char line_range {};
-  unsigned char opcode_base {};
-
-  /* standard_opcode_lengths[i] is the number of operands for the
-     standard opcode whose value is i.  This means that
-     standard_opcode_lengths[0] is unused, and the last meaningful
-     element is standard_opcode_lengths[opcode_base - 1].  */
-  std::unique_ptr<unsigned char[]> standard_opcode_lengths;
-
-  int file_names_size ()
-  { return m_file_names.size(); }
-
-  /* The start and end of the statement program following this
-     header.  These point into dwarf2_per_objfile->line_buffer.  */
-  const gdb_byte *statement_program_start {}, *statement_program_end {};
-
- private:
-  /* The include_directories table.  Note these are observing
-     pointers.  The memory is owned by debug_line_buffer.  */
-  std::vector<const char *> m_include_dirs;
-
-  /* The file_names table. This is private because the meaning of indexes
-     differs among DWARF versions (The first valid index is 1 in DWARF 4 and
-     before, and is 0 in DWARF 5 and later).  So the client should use
-     file_name_at method for access.  */
-  std::vector<file_entry> m_file_names;
-};
-
-typedef std::unique_ptr<line_header> line_header_up;
-
-const char *
-file_entry::include_dir (const line_header *lh) const
-{
-  return lh->include_dir_at (d_index);
-}
-
-/* When we construct a partial symbol table entry we only
-   need this much information.  */
-struct partial_die_info : public allocate_on_obstack
-  {
-    partial_die_info (sect_offset sect_off, struct abbrev_info *abbrev);
-
-    /* Disable assign but still keep copy ctor, which is needed
-       load_partial_dies.   */
-    partial_die_info& operator=(const partial_die_info& rhs) = delete;
-
-    /* Adjust the partial die before generating a symbol for it.  This
-       function may set the is_external flag or change the DIE's
-       name.  */
-    void fixup (struct dwarf2_cu *cu);
-
-    /* Read a minimal amount of information into the minimal die
-       structure.  */
-    const gdb_byte *read (const struct die_reader_specs *reader,
-			  const struct abbrev_info &abbrev,
-			  const gdb_byte *info_ptr);
-
-    /* Offset of this DIE.  */
-    const sect_offset sect_off;
-
-    /* DWARF-2 tag for this DIE.  */
-    const ENUM_BITFIELD(dwarf_tag) tag : 16;
-
-    /* Assorted flags describing the data found in this DIE.  */
-    const unsigned int has_children : 1;
-
-    unsigned int is_external : 1;
-    unsigned int is_declaration : 1;
-    unsigned int has_type : 1;
-    unsigned int has_specification : 1;
-    unsigned int has_pc_info : 1;
-    unsigned int may_be_inlined : 1;
-
-    /* This DIE has been marked DW_AT_main_subprogram.  */
-    unsigned int main_subprogram : 1;
-
-    /* Flag set if the SCOPE field of this structure has been
-       computed.  */
-    unsigned int scope_set : 1;
-
-    /* Flag set if the DIE has a byte_size attribute.  */
-    unsigned int has_byte_size : 1;
-
-    /* Flag set if the DIE has a DW_AT_const_value attribute.  */
-    unsigned int has_const_value : 1;
-
-    /* Flag set if any of the DIE's children are template arguments.  */
-    unsigned int has_template_arguments : 1;
-
-    /* Flag set if fixup has been called on this die.  */
-    unsigned int fixup_called : 1;
-
-    /* Flag set if DW_TAG_imported_unit uses DW_FORM_GNU_ref_alt.  */
-    unsigned int is_dwz : 1;
-
-    /* Flag set if spec_offset uses DW_FORM_GNU_ref_alt.  */
-    unsigned int spec_is_dwz : 1;
-
-    /* The name of this DIE.  Normally the value of DW_AT_name, but
-       sometimes a default name for unnamed DIEs.  */
-    const char *name = nullptr;
-
-    /* The linkage name, if present.  */
-    const char *linkage_name = nullptr;
-
-    /* The scope to prepend to our children.  This is generally
-       allocated on the comp_unit_obstack, so will disappear
-       when this compilation unit leaves the cache.  */
-    const char *scope = nullptr;
-
-    /* Some data associated with the partial DIE.  The tag determines
-       which field is live.  */
-    union
-    {
-      /* The location description associated with this DIE, if any.  */
-      struct dwarf_block *locdesc;
-      /* The offset of an import, for DW_TAG_imported_unit.  */
-      sect_offset sect_off;
-    } d {};
-
-    /* If HAS_PC_INFO, the PC range associated with this DIE.  */
-    CORE_ADDR lowpc = 0;
-    CORE_ADDR highpc = 0;
-
-    /* Pointer into the info_buffer (or types_buffer) pointing at the target of
-       DW_AT_sibling, if any.  */
-    /* NOTE: This member isn't strictly necessary, partial_die_info::read
-       could return DW_AT_sibling values to its caller load_partial_dies.  */
-    const gdb_byte *sibling = nullptr;
-
-    /* If HAS_SPECIFICATION, the offset of the DIE referred to by
-       DW_AT_specification (or DW_AT_abstract_origin or
-       DW_AT_extension).  */
-    sect_offset spec_offset {};
-
-    /* Pointers to this DIE's parent, first child, and next sibling,
-       if any.  */
-    struct partial_die_info *die_parent = nullptr;
-    struct partial_die_info *die_child = nullptr;
-    struct partial_die_info *die_sibling = nullptr;
-
-    friend struct partial_die_info *
-    dwarf2_cu::find_partial_die (sect_offset sect_off);
-
-  private:
-    /* Only need to do look up in dwarf2_cu::find_partial_die.  */
-    partial_die_info (sect_offset sect_off)
-      : partial_die_info (sect_off, DW_TAG_padding, 0)
-    {
-    }
-
-    partial_die_info (sect_offset sect_off_, enum dwarf_tag tag_,
-		      int has_children_)
-      : sect_off (sect_off_), tag (tag_), has_children (has_children_)
-    {
-      is_external = 0;
-      is_declaration = 0;
-      has_type = 0;
-      has_specification = 0;
-      has_pc_info = 0;
-      may_be_inlined = 0;
-      main_subprogram = 0;
-      scope_set = 0;
-      has_byte_size = 0;
-      has_const_value = 0;
-      has_template_arguments = 0;
-      fixup_called = 0;
-      is_dwz = 0;
-      spec_is_dwz = 0;
-    }
-  };
-
-/* This data structure holds the information of an abbrev.  */
-struct abbrev_info
-  {
-    unsigned int number;	/* number identifying abbrev */
-    enum dwarf_tag tag;		/* dwarf tag */
-    unsigned short has_children;		/* boolean */
-    unsigned short num_attrs;	/* number of attributes */
-    struct attr_abbrev *attrs;	/* an array of attribute descriptions */
-    struct abbrev_info *next;	/* next in chain */
-  };
-
-struct attr_abbrev
-  {
-    ENUM_BITFIELD(dwarf_attribute) name : 16;
-    ENUM_BITFIELD(dwarf_form) form : 16;
-
-    /* It is valid only if FORM is DW_FORM_implicit_const.  */
-    LONGEST implicit_const;
-  };
-
-/* Size of abbrev_table.abbrev_hash_table.  */
-#define ABBREV_HASH_SIZE 121
-
-/* Top level data structure to contain an abbreviation table.  */
-
-struct abbrev_table
-{
-  explicit abbrev_table (sect_offset off)
-    : sect_off (off)
-  {
-    m_abbrevs =
-      XOBNEWVEC (&abbrev_obstack, struct abbrev_info *, ABBREV_HASH_SIZE);
-    memset (m_abbrevs, 0, ABBREV_HASH_SIZE * sizeof (struct abbrev_info *));
-  }
-
-  DISABLE_COPY_AND_ASSIGN (abbrev_table);
-
-  /* Allocate space for a struct abbrev_info object in
-     ABBREV_TABLE.  */
-  struct abbrev_info *alloc_abbrev ();
-
-  /* Add an abbreviation to the table.  */
-  void add_abbrev (unsigned int abbrev_number, struct abbrev_info *abbrev);
-
-  /* Look up an abbrev in the table.
-     Returns NULL if the abbrev is not found.  */
-
-  struct abbrev_info *lookup_abbrev (unsigned int abbrev_number);
-
-
-  /* Where the abbrev table came from.
-     This is used as a sanity check when the table is used.  */
-  const sect_offset sect_off;
-
-  /* Storage for the abbrev table.  */
-  auto_obstack abbrev_obstack;
-
-private:
-
-  /* Hash table of abbrevs.
-     This is an array of size ABBREV_HASH_SIZE allocated in abbrev_obstack.
-     It could be statically allocated, but the previous code didn't so we
-     don't either.  */
-  struct abbrev_info **m_abbrevs;
-};
-
-typedef std::unique_ptr<struct abbrev_table> abbrev_table_up;
-
-/* Attributes have a name and a value.  */
-struct attribute
-  {
-    ENUM_BITFIELD(dwarf_attribute) name : 16;
-    ENUM_BITFIELD(dwarf_form) form : 15;
-
-    /* Has DW_STRING already been updated by dwarf2_canonicalize_name?  This
-       field should be in u.str (existing only for DW_STRING) but it is kept
-       here for better struct attribute alignment.  */
-    unsigned int string_is_canonical : 1;
-
-    union
-      {
-	const char *str;
-	struct dwarf_block *blk;
-	ULONGEST unsnd;
-	LONGEST snd;
-	CORE_ADDR addr;
-	ULONGEST signature;
-      }
-    u;
-  };
-
-/* This data structure holds a complete die structure.  */
-struct die_info
-  {
-    /* DWARF-2 tag for this DIE.  */
-    ENUM_BITFIELD(dwarf_tag) tag : 16;
-
-    /* Number of attributes */
-    unsigned char num_attrs;
-
-    /* True if we're presently building the full type name for the
-       type derived from this DIE.  */
-    unsigned char building_fullname : 1;
-
-    /* True if this die is in process.  PR 16581.  */
-    unsigned char in_process : 1;
-
-    /* Abbrev number */
-    unsigned int abbrev;
-
-    /* Offset in .debug_info or .debug_types section.  */
-    sect_offset sect_off;
-
-    /* The dies in a compilation unit form an n-ary tree.  PARENT
-       points to this die's parent; CHILD points to the first child of
-       this node; and all the children of a given node are chained
-       together via their SIBLING fields.  */
-    struct die_info *child;	/* Its first child, if any.  */
-    struct die_info *sibling;	/* Its next sibling, if any.  */
-    struct die_info *parent;	/* Its parent, if any.  */
-
-    /* An array of attributes, with NUM_ATTRS elements.  There may be
-       zero, but it's not common and zero-sized arrays are not
-       sufficiently portable C.  */
-    struct attribute attrs[1];
-  };
-
-/* Get at parts of an attribute structure.  */
-
-#define DW_STRING(attr)    ((attr)->u.str)
-#define DW_STRING_IS_CANONICAL(attr) ((attr)->string_is_canonical)
-#define DW_UNSND(attr)     ((attr)->u.unsnd)
-#define DW_BLOCK(attr)     ((attr)->u.blk)
-#define DW_SND(attr)       ((attr)->u.snd)
-#define DW_ADDR(attr)	   ((attr)->u.addr)
-#define DW_SIGNATURE(attr) ((attr)->u.signature)
-
-/* Blocks are a bunch of untyped bytes.  */
-struct dwarf_block
-  {
-    size_t size;
-
-    /* Valid only if SIZE is not zero.  */
-    const gdb_byte *data;
-  };
-
-#ifndef ATTR_ALLOC_CHUNK
-#define ATTR_ALLOC_CHUNK 4
-#endif
-
-/* Allocate fields for structs, unions and enums in this size.  */
-#ifndef DW_FIELD_ALLOC_CHUNK
-#define DW_FIELD_ALLOC_CHUNK 4
-#endif
-
-/* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte,
-   but this would require a corresponding change in unpack_field_as_long
-   and friends.  */
-static int bits_per_byte = 8;
-
-/* When reading a variant or variant part, we track a bit more
-   information about the field, and store it in an object of this
-   type.  */
-
-struct variant_field
-{
-  /* If we see a DW_TAG_variant, then this will be the discriminant
-     value.  */
-  ULONGEST discriminant_value;
-  /* If we see a DW_TAG_variant, then this will be set if this is the
-     default branch.  */
-  bool default_branch;
-  /* While reading a DW_TAG_variant_part, this will be set if this
-     field is the discriminant.  */
-  bool is_discriminant;
-};
-
-struct nextfield
-{
-  int accessibility = 0;
-  int virtuality = 0;
-  /* Extra information to describe a variant or variant part.  */
-  struct variant_field variant {};
-  struct field field {};
-};
-
-struct fnfieldlist
-{
-  const char *name = nullptr;
-  std::vector<struct fn_field> fnfields;
-};
-
-/* The routines that read and process dies for a C struct or C++ class
-   pass lists of data member fields and lists of member function fields
-   in an instance of a field_info structure, as defined below.  */
-struct field_info
-  {
-    /* List of data member and baseclasses fields.  */
-    std::vector<struct nextfield> fields;
-    std::vector<struct nextfield> baseclasses;
-
-    /* Number of fields (including baseclasses).  */
-    int nfields = 0;
-
-    /* Set if the accessibility of one of the fields is not public.  */
-    int non_public_fields = 0;
-
-    /* Member function fieldlist array, contains name of possibly overloaded
-       member function, number of overloaded member functions and a pointer
-       to the head of the member function field chain.  */
-    std::vector<struct fnfieldlist> fnfieldlists;
-
-    /* typedefs defined inside this class.  TYPEDEF_FIELD_LIST contains head of
-       a NULL terminated list of TYPEDEF_FIELD_LIST_COUNT elements.  */
-    std::vector<struct decl_field> typedef_field_list;
-
-    /* Nested types defined by this class and the number of elements in this
-       list.  */
-    std::vector<struct decl_field> nested_types_list;
-  };
-
-/* One item on the queue of compilation units to read in full symbols
-   for.  */
-struct dwarf2_queue_item
-{
-  struct dwarf2_per_cu_data *per_cu;
-  enum language pretend_language;
-  struct dwarf2_queue_item *next;
-};
-
-/* The current queue.  */
-static struct dwarf2_queue_item *dwarf2_queue, *dwarf2_queue_tail;
-
-/* Loaded secondary compilation units are kept in memory until they
-   have not been referenced for the processing of this many
-   compilation units.  Set this to zero to disable caching.  Cache
-   sizes of up to at least twenty will improve startup time for
-   typical inter-CU-reference binaries, at an obvious memory cost.  */
-static int dwarf_max_cache_age = 5;
-static void
-show_dwarf_max_cache_age (struct ui_file *file, int from_tty,
-			  struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file, _("The upper bound on the age of cached "
-			    "DWARF compilation units is %s.\n"),
-		    value);
-}
-
-/* local function prototypes */
-
-static const char *get_section_name (const struct dwarf2_section_info *);
-
-static const char *get_section_file_name (const struct dwarf2_section_info *);
-
-static void dwarf2_find_base_address (struct die_info *die,
-				      struct dwarf2_cu *cu);
-
-static struct partial_symtab *create_partial_symtab
-  (struct dwarf2_per_cu_data *per_cu, const char *name);
-
-static void build_type_psymtabs_reader (const struct die_reader_specs *reader,
-					const gdb_byte *info_ptr,
-					struct die_info *type_unit_die,
-					int has_children, void *data);
-
-static void dwarf2_build_psymtabs_hard
-  (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static void scan_partial_symbols (struct partial_die_info *,
-				  CORE_ADDR *, CORE_ADDR *,
-				  int, struct dwarf2_cu *);
-
-static void add_partial_symbol (struct partial_die_info *,
-				struct dwarf2_cu *);
-
-static void add_partial_namespace (struct partial_die_info *pdi,
-				   CORE_ADDR *lowpc, CORE_ADDR *highpc,
-				   int set_addrmap, struct dwarf2_cu *cu);
-
-static void add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc,
-				CORE_ADDR *highpc, int set_addrmap,
-				struct dwarf2_cu *cu);
-
-static void add_partial_enumeration (struct partial_die_info *enum_pdi,
-				     struct dwarf2_cu *cu);
-
-static void add_partial_subprogram (struct partial_die_info *pdi,
-				    CORE_ADDR *lowpc, CORE_ADDR *highpc,
-				    int need_pc, struct dwarf2_cu *cu);
-
-static void dwarf2_read_symtab (struct partial_symtab *,
-				struct objfile *);
-
-static void psymtab_to_symtab_1 (struct partial_symtab *);
-
-static abbrev_table_up abbrev_table_read_table
-  (struct dwarf2_per_objfile *dwarf2_per_objfile, struct dwarf2_section_info *,
-   sect_offset);
-
-static unsigned int peek_abbrev_code (bfd *, const gdb_byte *);
-
-static struct partial_die_info *load_partial_dies
-  (const struct die_reader_specs *, const gdb_byte *, int);
-
-/* A pair of partial_die_info and compilation unit.  */
-struct cu_partial_die_info
-{
-  /* The compilation unit of the partial_die_info.  */
-  struct dwarf2_cu *cu;
-  /* A partial_die_info.  */
-  struct partial_die_info *pdi;
-
-  cu_partial_die_info (struct dwarf2_cu *cu, struct partial_die_info *pdi)
-    : cu (cu),
-      pdi (pdi)
-  { /* Nothing.  */ }
-
-private:
-  cu_partial_die_info () = delete;
-};
-
-static const struct cu_partial_die_info find_partial_die (sect_offset, int,
-							  struct dwarf2_cu *);
-
-static const gdb_byte *read_attribute (const struct die_reader_specs *,
-				       struct attribute *, struct attr_abbrev *,
-				       const gdb_byte *);
-
-static unsigned int read_1_byte (bfd *, const gdb_byte *);
-
-static int read_1_signed_byte (bfd *, const gdb_byte *);
-
-static unsigned int read_2_bytes (bfd *, const gdb_byte *);
-
-/* Read the next three bytes (little-endian order) as an unsigned integer.  */
-static unsigned int read_3_bytes (bfd *, const gdb_byte *);
-
-static unsigned int read_4_bytes (bfd *, const gdb_byte *);
-
-static ULONGEST read_8_bytes (bfd *, const gdb_byte *);
-
-static CORE_ADDR read_address (bfd *, const gdb_byte *ptr, struct dwarf2_cu *,
-			       unsigned int *);
-
-static LONGEST read_initial_length (bfd *, const gdb_byte *, unsigned int *);
-
-static LONGEST read_checked_initial_length_and_offset
-  (bfd *, const gdb_byte *, const struct comp_unit_head *,
-   unsigned int *, unsigned int *);
-
-static LONGEST read_offset (bfd *, const gdb_byte *,
-			    const struct comp_unit_head *,
-			    unsigned int *);
-
-static LONGEST read_offset_1 (bfd *, const gdb_byte *, unsigned int);
-
-static sect_offset read_abbrev_offset
-  (struct dwarf2_per_objfile *dwarf2_per_objfile,
-   struct dwarf2_section_info *, sect_offset);
-
-static const gdb_byte *read_n_bytes (bfd *, const gdb_byte *, unsigned int);
-
-static const char *read_direct_string (bfd *, const gdb_byte *, unsigned int *);
-
-static const char *read_indirect_string
-  (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *, const gdb_byte *,
-   const struct comp_unit_head *, unsigned int *);
-
-static const char *read_indirect_line_string
-  (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *, const gdb_byte *,
-   const struct comp_unit_head *, unsigned int *);
-
-static const char *read_indirect_string_at_offset
-  (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd,
-   LONGEST str_offset);
-
-static const char *read_indirect_string_from_dwz
-  (struct objfile *objfile, struct dwz_file *, LONGEST);
-
-static LONGEST read_signed_leb128 (bfd *, const gdb_byte *, unsigned int *);
-
-static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *,
-					      const gdb_byte *,
-					      unsigned int *);
-
-static const char *read_str_index (const struct die_reader_specs *reader,
-				   ULONGEST str_index);
-
-static void set_cu_language (unsigned int, struct dwarf2_cu *);
-
-static struct attribute *dwarf2_attr (struct die_info *, unsigned int,
-				      struct dwarf2_cu *);
-
-static struct attribute *dwarf2_attr_no_follow (struct die_info *,
-						unsigned int);
-
-static const char *dwarf2_string_attr (struct die_info *die, unsigned int name,
-                                       struct dwarf2_cu *cu);
-
-static const char *dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu);
-
-static int dwarf2_flag_true_p (struct die_info *die, unsigned name,
-                               struct dwarf2_cu *cu);
-
-static int die_is_declaration (struct die_info *, struct dwarf2_cu *cu);
-
-static struct die_info *die_specification (struct die_info *die,
-					   struct dwarf2_cu **);
-
-static line_header_up dwarf_decode_line_header (sect_offset sect_off,
-						struct dwarf2_cu *cu);
-
-static void dwarf_decode_lines (struct line_header *, const char *,
-				struct dwarf2_cu *, struct partial_symtab *,
-				CORE_ADDR, int decode_mapping);
-
-static void dwarf2_start_subfile (struct dwarf2_cu *, const char *,
-				  const char *);
-
-static struct symbol *new_symbol (struct die_info *, struct type *,
-				  struct dwarf2_cu *, struct symbol * = NULL);
-
-static void dwarf2_const_value (const struct attribute *, struct symbol *,
-				struct dwarf2_cu *);
-
-static void dwarf2_const_value_attr (const struct attribute *attr,
-				     struct type *type,
-				     const char *name,
-				     struct obstack *obstack,
-				     struct dwarf2_cu *cu, LONGEST *value,
-				     const gdb_byte **bytes,
-				     struct dwarf2_locexpr_baton **baton);
-
-static struct type *die_type (struct die_info *, struct dwarf2_cu *);
-
-static int need_gnat_info (struct dwarf2_cu *);
-
-static struct type *die_descriptive_type (struct die_info *,
-					  struct dwarf2_cu *);
-
-static void set_descriptive_type (struct type *, struct die_info *,
-				  struct dwarf2_cu *);
-
-static struct type *die_containing_type (struct die_info *,
-					 struct dwarf2_cu *);
-
-static struct type *lookup_die_type (struct die_info *, const struct attribute *,
-				     struct dwarf2_cu *);
-
-static struct type *read_type_die (struct die_info *, struct dwarf2_cu *);
-
-static struct type *read_type_die_1 (struct die_info *, struct dwarf2_cu *);
-
-static const char *determine_prefix (struct die_info *die, struct dwarf2_cu *);
-
-static char *typename_concat (struct obstack *obs, const char *prefix,
-			      const char *suffix, int physname,
-			      struct dwarf2_cu *cu);
-
-static void read_file_scope (struct die_info *, struct dwarf2_cu *);
-
-static void read_type_unit_scope (struct die_info *, struct dwarf2_cu *);
-
-static void read_func_scope (struct die_info *, struct dwarf2_cu *);
-
-static void read_lexical_block_scope (struct die_info *, struct dwarf2_cu *);
-
-static void read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu);
-
-static void read_variable (struct die_info *die, struct dwarf2_cu *cu);
-
-static int dwarf2_ranges_read (unsigned, CORE_ADDR *, CORE_ADDR *,
-			       struct dwarf2_cu *, struct partial_symtab *);
-
-/* How dwarf2_get_pc_bounds constructed its *LOWPC and *HIGHPC return
-   values.  Keep the items ordered with increasing constraints compliance.  */
-enum pc_bounds_kind
-{
-  /* No attribute DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges was found.  */
-  PC_BOUNDS_NOT_PRESENT,
-
-  /* Some of the attributes DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges
-     were present but they do not form a valid range of PC addresses.  */
-  PC_BOUNDS_INVALID,
-
-  /* Discontiguous range was found - that is DW_AT_ranges was found.  */
-  PC_BOUNDS_RANGES,
-
-  /* Contiguous range was found - DW_AT_low_pc and DW_AT_high_pc were found.  */
-  PC_BOUNDS_HIGH_LOW,
-};
-
-static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *,
-						 CORE_ADDR *, CORE_ADDR *,
-						 struct dwarf2_cu *,
-						 struct partial_symtab *);
-
-static void get_scope_pc_bounds (struct die_info *,
-				 CORE_ADDR *, CORE_ADDR *,
-				 struct dwarf2_cu *);
-
-static void dwarf2_record_block_ranges (struct die_info *, struct block *,
-                                        CORE_ADDR, struct dwarf2_cu *);
-
-static void dwarf2_add_field (struct field_info *, struct die_info *,
-			      struct dwarf2_cu *);
-
-static void dwarf2_attach_fields_to_type (struct field_info *,
-					  struct type *, struct dwarf2_cu *);
-
-static void dwarf2_add_member_fn (struct field_info *,
-				  struct die_info *, struct type *,
-				  struct dwarf2_cu *);
-
-static void dwarf2_attach_fn_fields_to_type (struct field_info *,
-					     struct type *,
-					     struct dwarf2_cu *);
-
-static void process_structure_scope (struct die_info *, struct dwarf2_cu *);
-
-static void read_common_block (struct die_info *, struct dwarf2_cu *);
-
-static void read_namespace (struct die_info *die, struct dwarf2_cu *);
-
-static void read_module (struct die_info *die, struct dwarf2_cu *cu);
-
-static struct using_direct **using_directives (struct dwarf2_cu *cu);
-
-static void read_import_statement (struct die_info *die, struct dwarf2_cu *);
-
-static int read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu);
-
-static struct type *read_module_type (struct die_info *die,
-				      struct dwarf2_cu *cu);
-
-static const char *namespace_name (struct die_info *die,
-				   int *is_anonymous, struct dwarf2_cu *);
-
-static void process_enumeration_scope (struct die_info *, struct dwarf2_cu *);
-
-static CORE_ADDR decode_locdesc (struct dwarf_block *, struct dwarf2_cu *);
-
-static enum dwarf_array_dim_ordering read_array_order (struct die_info *,
-						       struct dwarf2_cu *);
-
-static struct die_info *read_die_and_siblings_1
-  (const struct die_reader_specs *, const gdb_byte *, const gdb_byte **,
-   struct die_info *);
-
-static struct die_info *read_die_and_siblings (const struct die_reader_specs *,
-					       const gdb_byte *info_ptr,
-					       const gdb_byte **new_info_ptr,
-					       struct die_info *parent);
-
-static const gdb_byte *read_full_die_1 (const struct die_reader_specs *,
-					struct die_info **, const gdb_byte *,
-					int *, int);
-
-static const gdb_byte *read_full_die (const struct die_reader_specs *,
-				      struct die_info **, const gdb_byte *,
-				      int *);
-
-static void process_die (struct die_info *, struct dwarf2_cu *);
-
-static const char *dwarf2_canonicalize_name (const char *, struct dwarf2_cu *,
-					     struct obstack *);
-
-static const char *dwarf2_name (struct die_info *die, struct dwarf2_cu *);
-
-static const char *dwarf2_full_name (const char *name,
-				     struct die_info *die,
-				     struct dwarf2_cu *cu);
-
-static const char *dwarf2_physname (const char *name, struct die_info *die,
-				    struct dwarf2_cu *cu);
-
-static struct die_info *dwarf2_extension (struct die_info *die,
-					  struct dwarf2_cu **);
-
-static const char *dwarf_tag_name (unsigned int);
-
-static const char *dwarf_attr_name (unsigned int);
-
-static const char *dwarf_unit_type_name (int unit_type);
-
-static const char *dwarf_form_name (unsigned int);
-
-static const char *dwarf_bool_name (unsigned int);
-
-static const char *dwarf_type_encoding_name (unsigned int);
-
-static struct die_info *sibling_die (struct die_info *);
-
-static void dump_die_shallow (struct ui_file *, int indent, struct die_info *);
-
-static void dump_die_for_error (struct die_info *);
-
-static void dump_die_1 (struct ui_file *, int level, int max_level,
-			struct die_info *);
-
-/*static*/ void dump_die (struct die_info *, int max_level);
-
-static void store_in_ref_table (struct die_info *,
-				struct dwarf2_cu *);
-
-static sect_offset dwarf2_get_ref_die_offset (const struct attribute *);
-
-static LONGEST dwarf2_get_attr_constant_value (const struct attribute *, int);
-
-static struct die_info *follow_die_ref_or_sig (struct die_info *,
-					       const struct attribute *,
-					       struct dwarf2_cu **);
-
-static struct die_info *follow_die_ref (struct die_info *,
-					const struct attribute *,
-					struct dwarf2_cu **);
-
-static struct die_info *follow_die_sig (struct die_info *,
-					const struct attribute *,
-					struct dwarf2_cu **);
-
-static struct type *get_signatured_type (struct die_info *, ULONGEST,
-					 struct dwarf2_cu *);
-
-static struct type *get_DW_AT_signature_type (struct die_info *,
-					      const struct attribute *,
-					      struct dwarf2_cu *);
-
-static void load_full_type_unit (struct dwarf2_per_cu_data *per_cu);
-
-static void read_signatured_type (struct signatured_type *);
-
-static int attr_to_dynamic_prop (const struct attribute *attr,
-				 struct die_info *die, struct dwarf2_cu *cu,
-				 struct dynamic_prop *prop, struct type *type);
-
-/* memory allocation interface */
-
-static struct dwarf_block *dwarf_alloc_block (struct dwarf2_cu *);
-
-static struct die_info *dwarf_alloc_die (struct dwarf2_cu *, int);
-
-static void dwarf_decode_macros (struct dwarf2_cu *, unsigned int, int);
-
-static int attr_form_is_block (const struct attribute *);
-
-static int attr_form_is_section_offset (const struct attribute *);
-
-static int attr_form_is_constant (const struct attribute *);
-
-static int attr_form_is_ref (const struct attribute *);
-
-static void fill_in_loclist_baton (struct dwarf2_cu *cu,
-				   struct dwarf2_loclist_baton *baton,
-				   const struct attribute *attr);
-
-static void dwarf2_symbol_mark_computed (const struct attribute *attr,
-					 struct symbol *sym,
-					 struct dwarf2_cu *cu,
-					 int is_block);
-
-static const gdb_byte *skip_one_die (const struct die_reader_specs *reader,
-				     const gdb_byte *info_ptr,
-				     struct abbrev_info *abbrev);
-
-static hashval_t partial_die_hash (const void *item);
-
-static int partial_die_eq (const void *item_lhs, const void *item_rhs);
-
-static struct dwarf2_per_cu_data *dwarf2_find_containing_comp_unit
-  (sect_offset sect_off, unsigned int offset_in_dwz,
-   struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static void prepare_one_comp_unit (struct dwarf2_cu *cu,
-				   struct die_info *comp_unit_die,
-				   enum language pretend_language);
-
-static void age_cached_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static void free_one_cached_comp_unit (struct dwarf2_per_cu_data *);
-
-static struct type *set_die_type (struct die_info *, struct type *,
-				  struct dwarf2_cu *);
-
-static void create_all_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static int create_all_type_units (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static void load_full_comp_unit (struct dwarf2_per_cu_data *, bool,
-				 enum language);
-
-static void process_full_comp_unit (struct dwarf2_per_cu_data *,
-				    enum language);
-
-static void process_full_type_unit (struct dwarf2_per_cu_data *,
-				    enum language);
-
-static void dwarf2_add_dependence (struct dwarf2_cu *,
-				   struct dwarf2_per_cu_data *);
-
-static void dwarf2_mark (struct dwarf2_cu *);
-
-static void dwarf2_clear_marks (struct dwarf2_per_cu_data *);
-
-static struct type *get_die_type_at_offset (sect_offset,
-					    struct dwarf2_per_cu_data *);
-
-static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu);
-
-static void queue_comp_unit (struct dwarf2_per_cu_data *per_cu,
-			     enum language pretend_language);
-
-static void process_queue (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static struct type *dwarf2_per_cu_addr_type (struct dwarf2_per_cu_data *per_cu);
-static struct type *dwarf2_per_cu_addr_sized_int_type
-	(struct dwarf2_per_cu_data *per_cu, bool unsigned_p);
-static struct type *dwarf2_per_cu_int_type
-	(struct dwarf2_per_cu_data *per_cu, int size_in_bytes,
-	 bool unsigned_p);
-
-/* Class, the destructor of which frees all allocated queue entries.  This
-   will only have work to do if an error was thrown while processing the
-   dwarf.  If no error was thrown then the queue entries should have all
-   been processed, and freed, as we went along.  */
-
-class dwarf2_queue_guard
-{
-public:
-  dwarf2_queue_guard () = default;
-
-  /* Free any entries remaining on the queue.  There should only be
-     entries left if we hit an error while processing the dwarf.  */
-  ~dwarf2_queue_guard ()
-  {
-    struct dwarf2_queue_item *item, *last;
-
-    item = dwarf2_queue;
-    while (item)
-      {
-	/* Anything still marked queued is likely to be in an
-	   inconsistent state, so discard it.  */
-	if (item->per_cu->queued)
-	  {
-	    if (item->per_cu->cu != NULL)
-	      free_one_cached_comp_unit (item->per_cu);
-	    item->per_cu->queued = 0;
-	  }
-
-	last = item;
-	item = item->next;
-	xfree (last);
-      }
-
-    dwarf2_queue = dwarf2_queue_tail = NULL;
-  }
-};
-
-/* The return type of find_file_and_directory.  Note, the enclosed
-   string pointers are only valid while this object is valid.  */
-
-struct file_and_directory
-{
-  /* The filename.  This is never NULL.  */
-  const char *name;
-
-  /* The compilation directory.  NULL if not known.  If we needed to
-     compute a new string, this points to COMP_DIR_STORAGE, otherwise,
-     points directly to the DW_AT_comp_dir string attribute owned by
-     the obstack that owns the DIE.  */
-  const char *comp_dir;
-
-  /* If we needed to build a new string for comp_dir, this is what
-     owns the storage.  */
-  std::string comp_dir_storage;
-};
-
-static file_and_directory find_file_and_directory (struct die_info *die,
-						   struct dwarf2_cu *cu);
-
-static char *file_full_name (int file, struct line_header *lh,
-			     const char *comp_dir);
-
-/* Expected enum dwarf_unit_type for read_comp_unit_head.  */
-enum class rcuh_kind { COMPILE, TYPE };
-
-static const gdb_byte *read_and_check_comp_unit_head
-  (struct dwarf2_per_objfile* dwarf2_per_objfile,
-   struct comp_unit_head *header,
-   struct dwarf2_section_info *section,
-   struct dwarf2_section_info *abbrev_section, const gdb_byte *info_ptr,
-   rcuh_kind section_kind);
-
-static void init_cutu_and_read_dies
-  (struct dwarf2_per_cu_data *this_cu, struct abbrev_table *abbrev_table,
-   int use_existing_cu, int keep, bool skip_partial,
-   die_reader_func_ftype *die_reader_func, void *data);
-
-static void init_cutu_and_read_dies_simple
-  (struct dwarf2_per_cu_data *this_cu,
-   die_reader_func_ftype *die_reader_func, void *data);
-
-static htab_t allocate_signatured_type_table (struct objfile *objfile);
-
-static htab_t allocate_dwo_unit_table (struct objfile *objfile);
-
-static struct dwo_unit *lookup_dwo_unit_in_dwp
-  (struct dwarf2_per_objfile *dwarf2_per_objfile,
-   struct dwp_file *dwp_file, const char *comp_dir,
-   ULONGEST signature, int is_debug_types);
-
-static struct dwp_file *get_dwp_file
-  (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static struct dwo_unit *lookup_dwo_comp_unit
-  (struct dwarf2_per_cu_data *, const char *, const char *, ULONGEST);
-
-static struct dwo_unit *lookup_dwo_type_unit
-  (struct signatured_type *, const char *, const char *);
-
-static void queue_and_load_all_dwo_tus (struct dwarf2_per_cu_data *);
-
-/* A unique pointer to a dwo_file.  */
-
-typedef std::unique_ptr<struct dwo_file> dwo_file_up;
-
-static void process_cu_includes (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-static void check_producer (struct dwarf2_cu *cu);
-
-static void free_line_header_voidp (void *arg);
-
-/* Various complaints about symbol reading that don't abort the process.  */
-
-static void
-dwarf2_statement_list_fits_in_line_number_section_complaint (void)
-{
-  complaint (_("statement list doesn't fit in .debug_line section"));
-}
-
-static void
-dwarf2_debug_line_missing_file_complaint (void)
-{
-  complaint (_(".debug_line section has line data without a file"));
-}
-
-static void
-dwarf2_debug_line_missing_end_sequence_complaint (void)
-{
-  complaint (_(".debug_line section has line "
-	       "program sequence without an end"));
-}
-
-static void
-dwarf2_complex_location_expr_complaint (void)
-{
-  complaint (_("location expression too complex"));
-}
-
-static void
-dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2,
-					      int arg3)
-{
-  complaint (_("const value length mismatch for '%s', got %d, expected %d"),
-	     arg1, arg2, arg3);
-}
-
-static void
-dwarf2_section_buffer_overflow_complaint (struct dwarf2_section_info *section)
-{
-  complaint (_("debug info runs off end of %s section"
-	       " [in module %s]"),
-	     get_section_name (section),
-	     get_section_file_name (section));
-}
-
-static void
-dwarf2_macro_malformed_definition_complaint (const char *arg1)
-{
-  complaint (_("macro debug info contains a "
-	       "malformed macro definition:\n`%s'"),
-	     arg1);
-}
-
-static void
-dwarf2_invalid_attrib_class_complaint (const char *arg1, const char *arg2)
-{
-  complaint (_("invalid attribute class or form for '%s' in '%s'"),
-	     arg1, arg2);
-}
-
-/* Hash function for line_header_hash.  */
-
-static hashval_t
-line_header_hash (const struct line_header *ofs)
-{
-  return to_underlying (ofs->sect_off) ^ ofs->offset_in_dwz;
-}
-
-/* Hash function for htab_create_alloc_ex for line_header_hash.  */
-
-static hashval_t
-line_header_hash_voidp (const void *item)
-{
-  const struct line_header *ofs = (const struct line_header *) item;
-
-  return line_header_hash (ofs);
-}
-
-/* Equality function for line_header_hash.  */
-
-static int
-line_header_eq_voidp (const void *item_lhs, const void *item_rhs)
-{
-  const struct line_header *ofs_lhs = (const struct line_header *) item_lhs;
-  const struct line_header *ofs_rhs = (const struct line_header *) item_rhs;
-
-  return (ofs_lhs->sect_off == ofs_rhs->sect_off
-	  && ofs_lhs->offset_in_dwz == ofs_rhs->offset_in_dwz);
-}
-
-
-
-/* Read the given attribute value as an address, taking the attribute's
-   form into account.  */
-
-static CORE_ADDR
-attr_value_as_address (struct attribute *attr)
-{
-  CORE_ADDR addr;
-
-  if (attr->form != DW_FORM_addr && attr->form != DW_FORM_addrx
-      && attr->form != DW_FORM_GNU_addr_index)
-    {
-      /* Aside from a few clearly defined exceptions, attributes that
-	 contain an address must always be in DW_FORM_addr form.
-	 Unfortunately, some compilers happen to be violating this
-	 requirement by encoding addresses using other forms, such
-	 as DW_FORM_data4 for example.  For those broken compilers,
-	 we try to do our best, without any guarantee of success,
-	 to interpret the address correctly.  It would also be nice
-	 to generate a complaint, but that would require us to maintain
-	 a list of legitimate cases where a non-address form is allowed,
-	 as well as update callers to pass in at least the CU's DWARF
-	 version.  This is more overhead than what we're willing to
-	 expand for a pretty rare case.  */
-      addr = DW_UNSND (attr);
-    }
-  else
-    addr = DW_ADDR (attr);
-
-  return addr;
-}
-
-/* See declaration.  */
-
-dwarf2_per_objfile::dwarf2_per_objfile (struct objfile *objfile_,
-					const dwarf2_debug_sections *names,
-					bool can_copy_)
-  : objfile (objfile_),
-    can_copy (can_copy_)
-{
-  if (names == NULL)
-    names = &dwarf2_elf_names;
-
-  bfd *obfd = objfile->obfd;
-
-  for (asection *sec = obfd->sections; sec != NULL; sec = sec->next)
-    locate_sections (obfd, sec, *names);
-}
-
-dwarf2_per_objfile::~dwarf2_per_objfile ()
-{
-  /* Cached DIE trees use xmalloc and the comp_unit_obstack.  */
-  free_cached_comp_units ();
-
-  if (quick_file_names_table)
-    htab_delete (quick_file_names_table);
-
-  if (line_header_hash)
-    htab_delete (line_header_hash);
-
-  for (dwarf2_per_cu_data *per_cu : all_comp_units)
-    per_cu->imported_symtabs_free ();
-
-  for (signatured_type *sig_type : all_type_units)
-    sig_type->per_cu.imported_symtabs_free ();
-
-  /* Everything else should be on the objfile obstack.  */
-}
-
-/* See declaration.  */
-
-void
-dwarf2_per_objfile::free_cached_comp_units ()
-{
-  dwarf2_per_cu_data *per_cu = read_in_chain;
-  dwarf2_per_cu_data **last_chain = &read_in_chain;
-  while (per_cu != NULL)
-    {
-      dwarf2_per_cu_data *next_cu = per_cu->cu->read_in_chain;
-
-      delete per_cu->cu;
-      *last_chain = next_cu;
-      per_cu = next_cu;
-    }
-}
-
-/* A helper class that calls free_cached_comp_units on
-   destruction.  */
-
-class free_cached_comp_units
-{
-public:
-
-  explicit free_cached_comp_units (dwarf2_per_objfile *per_objfile)
-    : m_per_objfile (per_objfile)
-  {
-  }
-
-  ~free_cached_comp_units ()
-  {
-    m_per_objfile->free_cached_comp_units ();
-  }
-
-  DISABLE_COPY_AND_ASSIGN (free_cached_comp_units);
-
-private:
-
-  dwarf2_per_objfile *m_per_objfile;
-};
-
-/* Try to locate the sections we need for DWARF 2 debugging
-   information and return true if we have enough to do something.
-   NAMES points to the dwarf2 section names, or is NULL if the standard
-   ELF names are used.  CAN_COPY is true for formats where symbol
-   interposition is possible and so symbol values must follow copy
-   relocation rules.  */
-
-int
-dwarf2_has_info (struct objfile *objfile,
-                 const struct dwarf2_debug_sections *names,
-		 bool can_copy)
-{
-  if (objfile->flags & OBJF_READNEVER)
-    return 0;
-
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  if (dwarf2_per_objfile == NULL)
-    dwarf2_per_objfile = dwarf2_objfile_data_key.emplace (objfile, objfile,
-							  names,
-							  can_copy);
-
-  return (!dwarf2_per_objfile->info.is_virtual
-	  && dwarf2_per_objfile->info.s.section != NULL
-	  && !dwarf2_per_objfile->abbrev.is_virtual
-	  && dwarf2_per_objfile->abbrev.s.section != NULL);
-}
-
-/* Return the containing section of virtual section SECTION.  */
-
-static struct dwarf2_section_info *
-get_containing_section (const struct dwarf2_section_info *section)
-{
-  gdb_assert (section->is_virtual);
-  return section->s.containing_section;
-}
-
-/* Return the bfd owner of SECTION.  */
-
-static struct bfd *
-get_section_bfd_owner (const struct dwarf2_section_info *section)
-{
-  if (section->is_virtual)
-    {
-      section = get_containing_section (section);
-      gdb_assert (!section->is_virtual);
-    }
-  return section->s.section->owner;
-}
-
-/* Return the bfd section of SECTION.
-   Returns NULL if the section is not present.  */
-
-static asection *
-get_section_bfd_section (const struct dwarf2_section_info *section)
-{
-  if (section->is_virtual)
-    {
-      section = get_containing_section (section);
-      gdb_assert (!section->is_virtual);
-    }
-  return section->s.section;
-}
-
-/* Return the name of SECTION.  */
-
-static const char *
-get_section_name (const struct dwarf2_section_info *section)
-{
-  asection *sectp = get_section_bfd_section (section);
-
-  gdb_assert (sectp != NULL);
-  return bfd_section_name (sectp);
-}
-
-/* Return the name of the file SECTION is in.  */
-
-static const char *
-get_section_file_name (const struct dwarf2_section_info *section)
-{
-  bfd *abfd = get_section_bfd_owner (section);
-
-  return bfd_get_filename (abfd);
-}
-
-/* Return the id of SECTION.
-   Returns 0 if SECTION doesn't exist.  */
-
-static int
-get_section_id (const struct dwarf2_section_info *section)
-{
-  asection *sectp = get_section_bfd_section (section);
-
-  if (sectp == NULL)
-    return 0;
-  return sectp->id;
-}
-
-/* Return the flags of SECTION.
-   SECTION (or containing section if this is a virtual section) must exist.  */
-
-static int
-get_section_flags (const struct dwarf2_section_info *section)
-{
-  asection *sectp = get_section_bfd_section (section);
-
-  gdb_assert (sectp != NULL);
-  return bfd_section_flags (sectp);
-}
-
-/* When loading sections, we look either for uncompressed section or for
-   compressed section names.  */
-
-static int
-section_is_p (const char *section_name,
-              const struct dwarf2_section_names *names)
-{
-  if (names->normal != NULL
-      && strcmp (section_name, names->normal) == 0)
-    return 1;
-  if (names->compressed != NULL
-      && strcmp (section_name, names->compressed) == 0)
-    return 1;
-  return 0;
-}
-
-/* See declaration.  */
-
-void
-dwarf2_per_objfile::locate_sections (bfd *abfd, asection *sectp,
-				     const dwarf2_debug_sections &names)
-{
-  flagword aflag = bfd_section_flags (sectp);
-
-  if ((aflag & SEC_HAS_CONTENTS) == 0)
-    {
-    }
-  else if (elf_section_data (sectp)->this_hdr.sh_size
-	   > bfd_get_file_size (abfd))
-    {
-      bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size;
-      warning (_("Discarding section %s which has a section size (%s"
-		 ") larger than the file size [in module %s]"),
-	       bfd_section_name (sectp), phex_nz (size, sizeof (size)),
-	       bfd_get_filename (abfd));
-    }
-  else if (section_is_p (sectp->name, &names.info))
-    {
-      this->info.s.section = sectp;
-      this->info.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.abbrev))
-    {
-      this->abbrev.s.section = sectp;
-      this->abbrev.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.line))
-    {
-      this->line.s.section = sectp;
-      this->line.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.loc))
-    {
-      this->loc.s.section = sectp;
-      this->loc.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.loclists))
-    {
-      this->loclists.s.section = sectp;
-      this->loclists.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.macinfo))
-    {
-      this->macinfo.s.section = sectp;
-      this->macinfo.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.macro))
-    {
-      this->macro.s.section = sectp;
-      this->macro.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.str))
-    {
-      this->str.s.section = sectp;
-      this->str.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.line_str))
-    {
-      this->line_str.s.section = sectp;
-      this->line_str.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.addr))
-    {
-      this->addr.s.section = sectp;
-      this->addr.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.frame))
-    {
-      this->frame.s.section = sectp;
-      this->frame.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.eh_frame))
-    {
-      this->eh_frame.s.section = sectp;
-      this->eh_frame.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.ranges))
-    {
-      this->ranges.s.section = sectp;
-      this->ranges.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.rnglists))
-    {
-      this->rnglists.s.section = sectp;
-      this->rnglists.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.types))
-    {
-      struct dwarf2_section_info type_section;
-
-      memset (&type_section, 0, sizeof (type_section));
-      type_section.s.section = sectp;
-      type_section.size = bfd_section_size (sectp);
-
-      this->types.push_back (type_section);
-    }
-  else if (section_is_p (sectp->name, &names.gdb_index))
-    {
-      this->gdb_index.s.section = sectp;
-      this->gdb_index.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.debug_names))
-    {
-      this->debug_names.s.section = sectp;
-      this->debug_names.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names.debug_aranges))
-    {
-      this->debug_aranges.s.section = sectp;
-      this->debug_aranges.size = bfd_section_size (sectp);
-    }
-
-  if ((bfd_section_flags (sectp) & (SEC_LOAD | SEC_ALLOC))
-      && bfd_section_vma (sectp) == 0)
-    this->has_section_at_zero = true;
-}
-
-/* A helper function that decides whether a section is empty,
-   or not present.  */
-
-static int
-dwarf2_section_empty_p (const struct dwarf2_section_info *section)
-{
-  if (section->is_virtual)
-    return section->size == 0;
-  return section->s.section == NULL || section->size == 0;
-}
-
-/* See dwarf2read.h.  */
-
-void
-dwarf2_read_section (struct objfile *objfile, dwarf2_section_info *info)
-{
-  asection *sectp;
-  bfd *abfd;
-  gdb_byte *buf, *retbuf;
-
-  if (info->readin)
-    return;
-  info->buffer = NULL;
-  info->readin = true;
-
-  if (dwarf2_section_empty_p (info))
-    return;
-
-  sectp = get_section_bfd_section (info);
-
-  /* If this is a virtual section we need to read in the real one first.  */
-  if (info->is_virtual)
-    {
-      struct dwarf2_section_info *containing_section =
-	get_containing_section (info);
-
-      gdb_assert (sectp != NULL);
-      if ((sectp->flags & SEC_RELOC) != 0)
-	{
-	  error (_("Dwarf Error: DWP format V2 with relocations is not"
-		   " supported in section %s [in module %s]"),
-		 get_section_name (info), get_section_file_name (info));
-	}
-      dwarf2_read_section (objfile, containing_section);
-      /* Other code should have already caught virtual sections that don't
-	 fit.  */
-      gdb_assert (info->virtual_offset + info->size
-		  <= containing_section->size);
-      /* If the real section is empty or there was a problem reading the
-	 section we shouldn't get here.  */
-      gdb_assert (containing_section->buffer != NULL);
-      info->buffer = containing_section->buffer + info->virtual_offset;
-      return;
-    }
-
-  /* If the section has relocations, we must read it ourselves.
-     Otherwise we attach it to the BFD.  */
-  if ((sectp->flags & SEC_RELOC) == 0)
-    {
-      info->buffer = gdb_bfd_map_section (sectp, &info->size);
-      return;
-    }
-
-  buf = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, info->size);
-  info->buffer = buf;
-
-  /* When debugging .o files, we may need to apply relocations; see
-     http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html .
-     We never compress sections in .o files, so we only need to
-     try this when the section is not compressed.  */
-  retbuf = symfile_relocate_debug_section (objfile, sectp, buf);
-  if (retbuf != NULL)
-    {
-      info->buffer = retbuf;
-      return;
-    }
-
-  abfd = get_section_bfd_owner (info);
-  gdb_assert (abfd != NULL);
-
-  if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0
-      || bfd_bread (buf, info->size, abfd) != info->size)
-    {
-      error (_("Dwarf Error: Can't read DWARF data"
-	       " in section %s [in module %s]"),
-	     bfd_section_name (sectp), bfd_get_filename (abfd));
-    }
-}
-
-/* A helper function that returns the size of a section in a safe way.
-   If you are positive that the section has been read before using the
-   size, then it is safe to refer to the dwarf2_section_info object's
-   "size" field directly.  In other cases, you must call this
-   function, because for compressed sections the size field is not set
-   correctly until the section has been read.  */
-
-static bfd_size_type
-dwarf2_section_size (struct objfile *objfile,
-		     struct dwarf2_section_info *info)
-{
-  if (!info->readin)
-    dwarf2_read_section (objfile, info);
-  return info->size;
-}
-
-/* Fill in SECTP, BUFP and SIZEP with section info, given OBJFILE and
-   SECTION_NAME.  */
-
-void
-dwarf2_get_section_info (struct objfile *objfile,
-                         enum dwarf2_section_enum sect,
-                         asection **sectp, const gdb_byte **bufp,
-                         bfd_size_type *sizep)
-{
-  struct dwarf2_per_objfile *data = dwarf2_objfile_data_key.get (objfile);
-  struct dwarf2_section_info *info;
-
-  /* We may see an objfile without any DWARF, in which case we just
-     return nothing.  */
-  if (data == NULL)
-    {
-      *sectp = NULL;
-      *bufp = NULL;
-      *sizep = 0;
-      return;
-    }
-  switch (sect)
-    {
-    case DWARF2_DEBUG_FRAME:
-      info = &data->frame;
-      break;
-    case DWARF2_EH_FRAME:
-      info = &data->eh_frame;
-      break;
-    default:
-      gdb_assert_not_reached ("unexpected section");
-    }
-
-  dwarf2_read_section (objfile, info);
-
-  *sectp = get_section_bfd_section (info);
-  *bufp = info->buffer;
-  *sizep = info->size;
-}
-
-/* A helper function to find the sections for a .dwz file.  */
-
-static void
-locate_dwz_sections (bfd *abfd, asection *sectp, void *arg)
-{
-  struct dwz_file *dwz_file = (struct dwz_file *) arg;
-
-  /* Note that we only support the standard ELF names, because .dwz
-     is ELF-only (at the time of writing).  */
-  if (section_is_p (sectp->name, &dwarf2_elf_names.abbrev))
-    {
-      dwz_file->abbrev.s.section = sectp;
-      dwz_file->abbrev.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &dwarf2_elf_names.info))
-    {
-      dwz_file->info.s.section = sectp;
-      dwz_file->info.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &dwarf2_elf_names.str))
-    {
-      dwz_file->str.s.section = sectp;
-      dwz_file->str.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &dwarf2_elf_names.line))
-    {
-      dwz_file->line.s.section = sectp;
-      dwz_file->line.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &dwarf2_elf_names.macro))
-    {
-      dwz_file->macro.s.section = sectp;
-      dwz_file->macro.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &dwarf2_elf_names.gdb_index))
-    {
-      dwz_file->gdb_index.s.section = sectp;
-      dwz_file->gdb_index.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &dwarf2_elf_names.debug_names))
-    {
-      dwz_file->debug_names.s.section = sectp;
-      dwz_file->debug_names.size = bfd_section_size (sectp);
-    }
-}
-
-/* See dwarf2read.h.  */
-
-struct dwz_file *
-dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  const char *filename;
-  bfd_size_type buildid_len_arg;
-  size_t buildid_len;
-  bfd_byte *buildid;
-
-  if (dwarf2_per_objfile->dwz_file != NULL)
-    return dwarf2_per_objfile->dwz_file.get ();
-
-  bfd_set_error (bfd_error_no_error);
-  gdb::unique_xmalloc_ptr<char> data
-    (bfd_get_alt_debug_link_info (dwarf2_per_objfile->objfile->obfd,
-				  &buildid_len_arg, &buildid));
-  if (data == NULL)
-    {
-      if (bfd_get_error () == bfd_error_no_error)
-	return NULL;
-      error (_("could not read '.gnu_debugaltlink' section: %s"),
-	     bfd_errmsg (bfd_get_error ()));
-    }
-
-  gdb::unique_xmalloc_ptr<bfd_byte> buildid_holder (buildid);
-
-  buildid_len = (size_t) buildid_len_arg;
-
-  filename = data.get ();
-
-  std::string abs_storage;
-  if (!IS_ABSOLUTE_PATH (filename))
-    {
-      gdb::unique_xmalloc_ptr<char> abs
-	= gdb_realpath (objfile_name (dwarf2_per_objfile->objfile));
-
-      abs_storage = ldirname (abs.get ()) + SLASH_STRING + filename;
-      filename = abs_storage.c_str ();
-    }
-
-  /* First try the file name given in the section.  If that doesn't
-     work, try to use the build-id instead.  */
-  gdb_bfd_ref_ptr dwz_bfd (gdb_bfd_open (filename, gnutarget, -1));
-  if (dwz_bfd != NULL)
-    {
-      if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid))
-	dwz_bfd.reset (nullptr);
-    }
-
-  if (dwz_bfd == NULL)
-    dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid);
-
-  if (dwz_bfd == NULL)
-    error (_("could not find '.gnu_debugaltlink' file for %s"),
-	   objfile_name (dwarf2_per_objfile->objfile));
-
-  std::unique_ptr<struct dwz_file> result
-    (new struct dwz_file (std::move (dwz_bfd)));
-
-  bfd_map_over_sections (result->dwz_bfd.get (), locate_dwz_sections,
-			 result.get ());
-
-  gdb_bfd_record_inclusion (dwarf2_per_objfile->objfile->obfd,
-			    result->dwz_bfd.get ());
-  dwarf2_per_objfile->dwz_file = std::move (result);
-  return dwarf2_per_objfile->dwz_file.get ();
-}
-
-/* DWARF quick_symbols_functions support.  */
-
-/* TUs can share .debug_line entries, and there can be a lot more TUs than
-   unique line tables, so we maintain a separate table of all .debug_line
-   derived entries to support the sharing.
-   All the quick functions need is the list of file names.  We discard the
-   line_header when we're done and don't need to record it here.  */
-struct quick_file_names
-{
-  /* The data used to construct the hash key.  */
-  struct stmt_list_hash hash;
-
-  /* The number of entries in file_names, real_names.  */
-  unsigned int num_file_names;
-
-  /* The file names from the line table, after being run through
-     file_full_name.  */
-  const char **file_names;
-
-  /* The file names from the line table after being run through
-     gdb_realpath.  These are computed lazily.  */
-  const char **real_names;
-};
-
-/* When using the index (and thus not using psymtabs), each CU has an
-   object of this type.  This is used to hold information needed by
-   the various "quick" methods.  */
-struct dwarf2_per_cu_quick_data
-{
-  /* The file table.  This can be NULL if there was no file table
-     or it's currently not read in.
-     NOTE: This points into dwarf2_per_objfile->quick_file_names_table.  */
-  struct quick_file_names *file_names;
-
-  /* The corresponding symbol table.  This is NULL if symbols for this
-     CU have not yet been read.  */
-  struct compunit_symtab *compunit_symtab;
-
-  /* A temporary mark bit used when iterating over all CUs in
-     expand_symtabs_matching.  */
-  unsigned int mark : 1;
-
-  /* True if we've tried to read the file table and found there isn't one.
-     There will be no point in trying to read it again next time.  */
-  unsigned int no_file_data : 1;
-};
-
-/* Utility hash function for a stmt_list_hash.  */
-
-static hashval_t
-hash_stmt_list_entry (const struct stmt_list_hash *stmt_list_hash)
-{
-  hashval_t v = 0;
-
-  if (stmt_list_hash->dwo_unit != NULL)
-    v += (uintptr_t) stmt_list_hash->dwo_unit->dwo_file;
-  v += to_underlying (stmt_list_hash->line_sect_off);
-  return v;
-}
-
-/* Utility equality function for a stmt_list_hash.  */
-
-static int
-eq_stmt_list_entry (const struct stmt_list_hash *lhs,
-		    const struct stmt_list_hash *rhs)
-{
-  if ((lhs->dwo_unit != NULL) != (rhs->dwo_unit != NULL))
-    return 0;
-  if (lhs->dwo_unit != NULL
-      && lhs->dwo_unit->dwo_file != rhs->dwo_unit->dwo_file)
-    return 0;
-
-  return lhs->line_sect_off == rhs->line_sect_off;
-}
-
-/* Hash function for a quick_file_names.  */
-
-static hashval_t
-hash_file_name_entry (const void *e)
-{
-  const struct quick_file_names *file_data
-    = (const struct quick_file_names *) e;
-
-  return hash_stmt_list_entry (&file_data->hash);
-}
-
-/* Equality function for a quick_file_names.  */
-
-static int
-eq_file_name_entry (const void *a, const void *b)
-{
-  const struct quick_file_names *ea = (const struct quick_file_names *) a;
-  const struct quick_file_names *eb = (const struct quick_file_names *) b;
-
-  return eq_stmt_list_entry (&ea->hash, &eb->hash);
-}
-
-/* Delete function for a quick_file_names.  */
-
-static void
-delete_file_name_entry (void *e)
-{
-  struct quick_file_names *file_data = (struct quick_file_names *) e;
-  int i;
-
-  for (i = 0; i < file_data->num_file_names; ++i)
-    {
-      xfree ((void*) file_data->file_names[i]);
-      if (file_data->real_names)
-	xfree ((void*) file_data->real_names[i]);
-    }
-
-  /* The space for the struct itself lives on objfile_obstack,
-     so we don't free it here.  */
-}
-
-/* Create a quick_file_names hash table.  */
-
-static htab_t
-create_quick_file_names_table (unsigned int nr_initial_entries)
-{
-  return htab_create_alloc (nr_initial_entries,
-			    hash_file_name_entry, eq_file_name_entry,
-			    delete_file_name_entry, xcalloc, xfree);
-}
-
-/* Read in PER_CU->CU.  This function is unrelated to symtabs, symtab would
-   have to be created afterwards.  You should call age_cached_comp_units after
-   processing PER_CU->CU.  dw2_setup must have been already called.  */
-
-static void
-load_cu (struct dwarf2_per_cu_data *per_cu, bool skip_partial)
-{
-  if (per_cu->is_debug_types)
-    load_full_type_unit (per_cu);
-  else
-    load_full_comp_unit (per_cu, skip_partial, language_minimal);
-
-  if (per_cu->cu == NULL)
-    return;  /* Dummy CU.  */
-
-  dwarf2_find_base_address (per_cu->cu->dies, per_cu->cu);
-}
-
-/* Read in the symbols for PER_CU.  */
-
-static void
-dw2_do_instantiate_symtab (struct dwarf2_per_cu_data *per_cu, bool skip_partial)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-
-  /* Skip type_unit_groups, reading the type units they contain
-     is handled elsewhere.  */
-  if (IS_TYPE_UNIT_GROUP (per_cu))
-    return;
-
-  /* The destructor of dwarf2_queue_guard frees any entries left on
-     the queue.  After this point we're guaranteed to leave this function
-     with the dwarf queue empty.  */
-  dwarf2_queue_guard q_guard;
-
-  if (dwarf2_per_objfile->using_index
-      ? per_cu->v.quick->compunit_symtab == NULL
-      : (per_cu->v.psymtab == NULL || !per_cu->v.psymtab->readin))
-    {
-      queue_comp_unit (per_cu, language_minimal);
-      load_cu (per_cu, skip_partial);
-
-      /* If we just loaded a CU from a DWO, and we're working with an index
-	 that may badly handle TUs, load all the TUs in that DWO as well.
-	 http://sourceware.org/bugzilla/show_bug.cgi?id=15021  */
-      if (!per_cu->is_debug_types
-	  && per_cu->cu != NULL
-	  && per_cu->cu->dwo_unit != NULL
-	  && dwarf2_per_objfile->index_table != NULL
-	  && dwarf2_per_objfile->index_table->version <= 7
-	  /* DWP files aren't supported yet.  */
-	  && get_dwp_file (dwarf2_per_objfile) == NULL)
-	queue_and_load_all_dwo_tus (per_cu);
-    }
-
-  process_queue (dwarf2_per_objfile);
-
-  /* Age the cache, releasing compilation units that have not
-     been used recently.  */
-  age_cached_comp_units (dwarf2_per_objfile);
-}
-
-/* Ensure that the symbols for PER_CU have been read in.  OBJFILE is
-   the objfile from which this CU came.  Returns the resulting symbol
-   table.  */
-
-static struct compunit_symtab *
-dw2_instantiate_symtab (struct dwarf2_per_cu_data *per_cu, bool skip_partial)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-
-  gdb_assert (dwarf2_per_objfile->using_index);
-  if (!per_cu->v.quick->compunit_symtab)
-    {
-      free_cached_comp_units freer (dwarf2_per_objfile);
-      scoped_restore decrementer = increment_reading_symtab ();
-      dw2_do_instantiate_symtab (per_cu, skip_partial);
-      process_cu_includes (dwarf2_per_objfile);
-    }
-
-  return per_cu->v.quick->compunit_symtab;
-}
-
-/* See declaration.  */
-
-dwarf2_per_cu_data *
-dwarf2_per_objfile::get_cutu (int index)
-{
-  if (index >= this->all_comp_units.size ())
-    {
-      index -= this->all_comp_units.size ();
-      gdb_assert (index < this->all_type_units.size ());
-      return &this->all_type_units[index]->per_cu;
-    }
-
-  return this->all_comp_units[index];
-}
-
-/* See declaration.  */
-
-dwarf2_per_cu_data *
-dwarf2_per_objfile::get_cu (int index)
-{
-  gdb_assert (index >= 0 && index < this->all_comp_units.size ());
-
-  return this->all_comp_units[index];
-}
-
-/* See declaration.  */
-
-signatured_type *
-dwarf2_per_objfile::get_tu (int index)
-{
-  gdb_assert (index >= 0 && index < this->all_type_units.size ());
-
-  return this->all_type_units[index];
-}
-
-/* Return a new dwarf2_per_cu_data allocated on OBJFILE's
-   objfile_obstack, and constructed with the specified field
-   values.  */
-
-static dwarf2_per_cu_data *
-create_cu_from_index_list (struct dwarf2_per_objfile *dwarf2_per_objfile,
-                          struct dwarf2_section_info *section,
-                          int is_dwz,
-                          sect_offset sect_off, ULONGEST length)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  dwarf2_per_cu_data *the_cu
-    = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-                     struct dwarf2_per_cu_data);
-  the_cu->sect_off = sect_off;
-  the_cu->length = length;
-  the_cu->dwarf2_per_objfile = dwarf2_per_objfile;
-  the_cu->section = section;
-  the_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-                                   struct dwarf2_per_cu_quick_data);
-  the_cu->is_dwz = is_dwz;
-  return the_cu;
-}
-
-/* A helper for create_cus_from_index that handles a given list of
-   CUs.  */
-
-static void
-create_cus_from_index_list (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			    const gdb_byte *cu_list, offset_type n_elements,
-			    struct dwarf2_section_info *section,
-			    int is_dwz)
-{
-  for (offset_type i = 0; i < n_elements; i += 2)
-    {
-      gdb_static_assert (sizeof (ULONGEST) >= 8);
-
-      sect_offset sect_off
-	= (sect_offset) extract_unsigned_integer (cu_list, 8, BFD_ENDIAN_LITTLE);
-      ULONGEST length = extract_unsigned_integer (cu_list + 8, 8, BFD_ENDIAN_LITTLE);
-      cu_list += 2 * 8;
-
-      dwarf2_per_cu_data *per_cu
-	= create_cu_from_index_list (dwarf2_per_objfile, section, is_dwz,
-				     sect_off, length);
-      dwarf2_per_objfile->all_comp_units.push_back (per_cu);
-    }
-}
-
-/* Read the CU list from the mapped index, and use it to create all
-   the CU objects for this objfile.  */
-
-static void
-create_cus_from_index (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		       const gdb_byte *cu_list, offset_type cu_list_elements,
-		       const gdb_byte *dwz_list, offset_type dwz_elements)
-{
-  gdb_assert (dwarf2_per_objfile->all_comp_units.empty ());
-  dwarf2_per_objfile->all_comp_units.reserve
-    ((cu_list_elements + dwz_elements) / 2);
-
-  create_cus_from_index_list (dwarf2_per_objfile, cu_list, cu_list_elements,
-			      &dwarf2_per_objfile->info, 0);
-
-  if (dwz_elements == 0)
-    return;
-
-  dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-  create_cus_from_index_list (dwarf2_per_objfile, dwz_list, dwz_elements,
-			      &dwz->info, 1);
-}
-
-/* Create the signatured type hash table from the index.  */
-
-static void
-create_signatured_type_table_from_index
-  (struct dwarf2_per_objfile *dwarf2_per_objfile,
-   struct dwarf2_section_info *section,
-   const gdb_byte *bytes,
-   offset_type elements)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  gdb_assert (dwarf2_per_objfile->all_type_units.empty ());
-  dwarf2_per_objfile->all_type_units.reserve (elements / 3);
-
-  htab_t sig_types_hash = allocate_signatured_type_table (objfile);
-
-  for (offset_type i = 0; i < elements; i += 3)
-    {
-      struct signatured_type *sig_type;
-      ULONGEST signature;
-      void **slot;
-      cu_offset type_offset_in_tu;
-
-      gdb_static_assert (sizeof (ULONGEST) >= 8);
-      sect_offset sect_off
-	= (sect_offset) extract_unsigned_integer (bytes, 8, BFD_ENDIAN_LITTLE);
-      type_offset_in_tu
-	= (cu_offset) extract_unsigned_integer (bytes + 8, 8,
-						BFD_ENDIAN_LITTLE);
-      signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE);
-      bytes += 3 * 8;
-
-      sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-				 struct signatured_type);
-      sig_type->signature = signature;
-      sig_type->type_offset_in_tu = type_offset_in_tu;
-      sig_type->per_cu.is_debug_types = 1;
-      sig_type->per_cu.section = section;
-      sig_type->per_cu.sect_off = sect_off;
-      sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile;
-      sig_type->per_cu.v.quick
-	= OBSTACK_ZALLOC (&objfile->objfile_obstack,
-			  struct dwarf2_per_cu_quick_data);
-
-      slot = htab_find_slot (sig_types_hash, sig_type, INSERT);
-      *slot = sig_type;
-
-      dwarf2_per_objfile->all_type_units.push_back (sig_type);
-    }
-
-  dwarf2_per_objfile->signatured_types = sig_types_hash;
-}
-
-/* Create the signatured type hash table from .debug_names.  */
-
-static void
-create_signatured_type_table_from_debug_names
-  (struct dwarf2_per_objfile *dwarf2_per_objfile,
-   const mapped_debug_names &map,
-   struct dwarf2_section_info *section,
-   struct dwarf2_section_info *abbrev_section)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  dwarf2_read_section (objfile, section);
-  dwarf2_read_section (objfile, abbrev_section);
-
-  gdb_assert (dwarf2_per_objfile->all_type_units.empty ());
-  dwarf2_per_objfile->all_type_units.reserve (map.tu_count);
-
-  htab_t sig_types_hash = allocate_signatured_type_table (objfile);
-
-  for (uint32_t i = 0; i < map.tu_count; ++i)
-    {
-      struct signatured_type *sig_type;
-      void **slot;
-
-      sect_offset sect_off
-	= (sect_offset) (extract_unsigned_integer
-			 (map.tu_table_reordered + i * map.offset_size,
-			  map.offset_size,
-			  map.dwarf5_byte_order));
-
-      comp_unit_head cu_header;
-      read_and_check_comp_unit_head (dwarf2_per_objfile, &cu_header, section,
-				     abbrev_section,
-				     section->buffer + to_underlying (sect_off),
-				     rcuh_kind::TYPE);
-
-      sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-				 struct signatured_type);
-      sig_type->signature = cu_header.signature;
-      sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
-      sig_type->per_cu.is_debug_types = 1;
-      sig_type->per_cu.section = section;
-      sig_type->per_cu.sect_off = sect_off;
-      sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile;
-      sig_type->per_cu.v.quick
-	= OBSTACK_ZALLOC (&objfile->objfile_obstack,
-			  struct dwarf2_per_cu_quick_data);
-
-      slot = htab_find_slot (sig_types_hash, sig_type, INSERT);
-      *slot = sig_type;
-
-      dwarf2_per_objfile->all_type_units.push_back (sig_type);
-    }
-
-  dwarf2_per_objfile->signatured_types = sig_types_hash;
-}
-
-/* Read the address map data from the mapped index, and use it to
-   populate the objfile's psymtabs_addrmap.  */
-
-static void
-create_addrmap_from_index (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			   struct mapped_index *index)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  const gdb_byte *iter, *end;
-  struct addrmap *mutable_map;
-  CORE_ADDR baseaddr;
-
-  auto_obstack temp_obstack;
-
-  mutable_map = addrmap_create_mutable (&temp_obstack);
-
-  iter = index->address_table.data ();
-  end = iter + index->address_table.size ();
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  while (iter < end)
-    {
-      ULONGEST hi, lo, cu_index;
-      lo = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE);
-      iter += 8;
-      hi = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE);
-      iter += 8;
-      cu_index = extract_unsigned_integer (iter, 4, BFD_ENDIAN_LITTLE);
-      iter += 4;
-
-      if (lo > hi)
-	{
-	  complaint (_(".gdb_index address table has invalid range (%s - %s)"),
-		     hex_string (lo), hex_string (hi));
-	  continue;
-	}
-
-      if (cu_index >= dwarf2_per_objfile->all_comp_units.size ())
-	{
-	  complaint (_(".gdb_index address table has invalid CU number %u"),
-		     (unsigned) cu_index);
-	  continue;
-	}
-
-      lo = gdbarch_adjust_dwarf2_addr (gdbarch, lo + baseaddr) - baseaddr;
-      hi = gdbarch_adjust_dwarf2_addr (gdbarch, hi + baseaddr) - baseaddr;
-      addrmap_set_empty (mutable_map, lo, hi - 1,
-			 dwarf2_per_objfile->get_cu (cu_index));
-    }
-
-  objfile->partial_symtabs->psymtabs_addrmap
-    = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ());
-}
-
-/* Read the address map data from DWARF-5 .debug_aranges, and use it to
-   populate the objfile's psymtabs_addrmap.  */
-
-static void
-create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			     struct dwarf2_section_info *section)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  bfd *abfd = objfile->obfd;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  const CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets,
-				       SECT_OFF_TEXT (objfile));
-
-  auto_obstack temp_obstack;
-  addrmap *mutable_map = addrmap_create_mutable (&temp_obstack);
-
-  std::unordered_map<sect_offset,
-		     dwarf2_per_cu_data *,
-		     gdb::hash_enum<sect_offset>>
-    debug_info_offset_to_per_cu;
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      const auto insertpair
-	= debug_info_offset_to_per_cu.emplace (per_cu->sect_off, per_cu);
-      if (!insertpair.second)
-	{
-	  warning (_("Section .debug_aranges in %s has duplicate "
-		     "debug_info_offset %s, ignoring .debug_aranges."),
-		   objfile_name (objfile), sect_offset_str (per_cu->sect_off));
-	  return;
-	}
-    }
-
-  dwarf2_read_section (objfile, section);
-
-  const bfd_endian dwarf5_byte_order = gdbarch_byte_order (gdbarch);
-
-  const gdb_byte *addr = section->buffer;
-
-  while (addr < section->buffer + section->size)
-    {
-      const gdb_byte *const entry_addr = addr;
-      unsigned int bytes_read;
-
-      const LONGEST entry_length = read_initial_length (abfd, addr,
-							&bytes_read);
-      addr += bytes_read;
-
-      const gdb_byte *const entry_end = addr + entry_length;
-      const bool dwarf5_is_dwarf64 = bytes_read != 4;
-      const uint8_t offset_size = dwarf5_is_dwarf64 ? 8 : 4;
-      if (addr + entry_length > section->buffer + section->size)
-	{
-	  warning (_("Section .debug_aranges in %s entry at offset %s "
-	             "length %s exceeds section length %s, "
-		     "ignoring .debug_aranges."),
-		   objfile_name (objfile),
-		   plongest (entry_addr - section->buffer),
-		   plongest (bytes_read + entry_length),
-		   pulongest (section->size));
-	  return;
-	}
-
-      /* The version number.  */
-      const uint16_t version = read_2_bytes (abfd, addr);
-      addr += 2;
-      if (version != 2)
-	{
-	  warning (_("Section .debug_aranges in %s entry at offset %s "
-		     "has unsupported version %d, ignoring .debug_aranges."),
-		   objfile_name (objfile),
-		   plongest (entry_addr - section->buffer), version);
-	  return;
-	}
-
-      const uint64_t debug_info_offset
-	= extract_unsigned_integer (addr, offset_size, dwarf5_byte_order);
-      addr += offset_size;
-      const auto per_cu_it
-	= debug_info_offset_to_per_cu.find (sect_offset (debug_info_offset));
-      if (per_cu_it == debug_info_offset_to_per_cu.cend ())
-	{
-	  warning (_("Section .debug_aranges in %s entry at offset %s "
-		     "debug_info_offset %s does not exists, "
-		     "ignoring .debug_aranges."),
-		   objfile_name (objfile),
-		   plongest (entry_addr - section->buffer),
-		   pulongest (debug_info_offset));
-	  return;
-	}
-      dwarf2_per_cu_data *const per_cu = per_cu_it->second;
-
-      const uint8_t address_size = *addr++;
-      if (address_size < 1 || address_size > 8)
-	{
-	  warning (_("Section .debug_aranges in %s entry at offset %s "
-		     "address_size %u is invalid, ignoring .debug_aranges."),
-		   objfile_name (objfile),
-		   plongest (entry_addr - section->buffer), address_size);
-	  return;
-	}
-
-      const uint8_t segment_selector_size = *addr++;
-      if (segment_selector_size != 0)
-	{
-	  warning (_("Section .debug_aranges in %s entry at offset %s "
-		     "segment_selector_size %u is not supported, "
-		     "ignoring .debug_aranges."),
-		   objfile_name (objfile),
-		   plongest (entry_addr - section->buffer),
-		   segment_selector_size);
-	  return;
-	}
-
-      /* Must pad to an alignment boundary that is twice the address
-         size.  It is undocumented by the DWARF standard but GCC does
-         use it.  */
-      for (size_t padding = ((-(addr - section->buffer))
-			     & (2 * address_size - 1));
-           padding > 0; padding--)
-	if (*addr++ != 0)
-	  {
-	    warning (_("Section .debug_aranges in %s entry at offset %s "
-		       "padding is not zero, ignoring .debug_aranges."),
-		     objfile_name (objfile),
-		     plongest (entry_addr - section->buffer));
-	    return;
-	  }
-
-      for (;;)
-	{
-	  if (addr + 2 * address_size > entry_end)
-	    {
-	      warning (_("Section .debug_aranges in %s entry at offset %s "
-			 "address list is not properly terminated, "
-			 "ignoring .debug_aranges."),
-		       objfile_name (objfile),
-		       plongest (entry_addr - section->buffer));
-	      return;
-	    }
-	  ULONGEST start = extract_unsigned_integer (addr, address_size,
-						     dwarf5_byte_order);
-	  addr += address_size;
-	  ULONGEST length = extract_unsigned_integer (addr, address_size,
-						      dwarf5_byte_order);
-	  addr += address_size;
-	  if (start == 0 && length == 0)
-	    break;
-	  if (start == 0 && !dwarf2_per_objfile->has_section_at_zero)
-	    {
-	      /* Symbol was eliminated due to a COMDAT group.  */
-	      continue;
-	    }
-	  ULONGEST end = start + length;
-	  start = (gdbarch_adjust_dwarf2_addr (gdbarch, start + baseaddr)
-		   - baseaddr);
-	  end = (gdbarch_adjust_dwarf2_addr (gdbarch, end + baseaddr)
-		 - baseaddr);
-	  addrmap_set_empty (mutable_map, start, end - 1, per_cu);
-	}
-    }
-
-  objfile->partial_symtabs->psymtabs_addrmap
-    = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ());
-}
-
-/* Find a slot in the mapped index INDEX for the object named NAME.
-   If NAME is found, set *VEC_OUT to point to the CU vector in the
-   constant pool and return true.  If NAME cannot be found, return
-   false.  */
-
-static bool
-find_slot_in_mapped_hash (struct mapped_index *index, const char *name,
-			  offset_type **vec_out)
-{
-  offset_type hash;
-  offset_type slot, step;
-  int (*cmp) (const char *, const char *);
-
-  gdb::unique_xmalloc_ptr<char> without_params;
-  if (current_language->la_language == language_cplus
-      || current_language->la_language == language_fortran
-      || current_language->la_language == language_d)
-    {
-      /* NAME is already canonical.  Drop any qualifiers as .gdb_index does
-	 not contain any.  */
-
-      if (strchr (name, '(') != NULL)
-	{
-	  without_params = cp_remove_params (name);
-
-	  if (without_params != NULL)
-	    name = without_params.get ();
-	}
-    }
-
-  /* Index version 4 did not support case insensitive searches.  But the
-     indices for case insensitive languages are built in lowercase, therefore
-     simulate our NAME being searched is also lowercased.  */
-  hash = mapped_index_string_hash ((index->version == 4
-                                    && case_sensitivity == case_sensitive_off
-				    ? 5 : index->version),
-				   name);
-
-  slot = hash & (index->symbol_table.size () - 1);
-  step = ((hash * 17) & (index->symbol_table.size () - 1)) | 1;
-  cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp);
-
-  for (;;)
-    {
-      const char *str;
-
-      const auto &bucket = index->symbol_table[slot];
-      if (bucket.name == 0 && bucket.vec == 0)
-	return false;
-
-      str = index->constant_pool + MAYBE_SWAP (bucket.name);
-      if (!cmp (name, str))
-	{
-	  *vec_out = (offset_type *) (index->constant_pool
-				      + MAYBE_SWAP (bucket.vec));
-	  return true;
-	}
-
-      slot = (slot + step) & (index->symbol_table.size () - 1);
-    }
-}
-
-/* A helper function that reads the .gdb_index from BUFFER and fills
-   in MAP.  FILENAME is the name of the file containing the data;
-   it is used for error reporting.  DEPRECATED_OK is true if it is
-   ok to use deprecated sections.
-
-   CU_LIST, CU_LIST_ELEMENTS, TYPES_LIST, and TYPES_LIST_ELEMENTS are
-   out parameters that are filled in with information about the CU and
-   TU lists in the section.
-
-   Returns true if all went well, false otherwise.  */
-
-static bool
-read_gdb_index_from_buffer (struct objfile *objfile,
-			    const char *filename,
-			    bool deprecated_ok,
-			    gdb::array_view<const gdb_byte> buffer,
-			    struct mapped_index *map,
-			    const gdb_byte **cu_list,
-			    offset_type *cu_list_elements,
-			    const gdb_byte **types_list,
-			    offset_type *types_list_elements)
-{
-  const gdb_byte *addr = &buffer[0];
-
-  /* Version check.  */
-  offset_type version = MAYBE_SWAP (*(offset_type *) addr);
-  /* Versions earlier than 3 emitted every copy of a psymbol.  This
-     causes the index to behave very poorly for certain requests.  Version 3
-     contained incomplete addrmap.  So, it seems better to just ignore such
-     indices.  */
-  if (version < 4)
-    {
-      static int warning_printed = 0;
-      if (!warning_printed)
-	{
-	  warning (_("Skipping obsolete .gdb_index section in %s."),
-		   filename);
-	  warning_printed = 1;
-	}
-      return 0;
-    }
-  /* Index version 4 uses a different hash function than index version
-     5 and later.
-
-     Versions earlier than 6 did not emit psymbols for inlined
-     functions.  Using these files will cause GDB not to be able to
-     set breakpoints on inlined functions by name, so we ignore these
-     indices unless the user has done
-     "set use-deprecated-index-sections on".  */
-  if (version < 6 && !deprecated_ok)
-    {
-      static int warning_printed = 0;
-      if (!warning_printed)
-	{
-	  warning (_("\
-Skipping deprecated .gdb_index section in %s.\n\
-Do \"set use-deprecated-index-sections on\" before the file is read\n\
-to use the section anyway."),
-		   filename);
-	  warning_printed = 1;
-	}
-      return 0;
-    }
-  /* Version 7 indices generated by gold refer to the CU for a symbol instead
-     of the TU (for symbols coming from TUs),
-     http://sourceware.org/bugzilla/show_bug.cgi?id=15021.
-     Plus gold-generated indices can have duplicate entries for global symbols,
-     http://sourceware.org/bugzilla/show_bug.cgi?id=15646.
-     These are just performance bugs, and we can't distinguish gdb-generated
-     indices from gold-generated ones, so issue no warning here.  */
-
-  /* Indexes with higher version than the one supported by GDB may be no
-     longer backward compatible.  */
-  if (version > 8)
-    return 0;
-
-  map->version = version;
-
-  offset_type *metadata = (offset_type *) (addr + sizeof (offset_type));
-
-  int i = 0;
-  *cu_list = addr + MAYBE_SWAP (metadata[i]);
-  *cu_list_elements = ((MAYBE_SWAP (metadata[i + 1]) - MAYBE_SWAP (metadata[i]))
-		       / 8);
-  ++i;
-
-  *types_list = addr + MAYBE_SWAP (metadata[i]);
-  *types_list_elements = ((MAYBE_SWAP (metadata[i + 1])
-			   - MAYBE_SWAP (metadata[i]))
-			  / 8);
-  ++i;
-
-  const gdb_byte *address_table = addr + MAYBE_SWAP (metadata[i]);
-  const gdb_byte *address_table_end = addr + MAYBE_SWAP (metadata[i + 1]);
-  map->address_table
-    = gdb::array_view<const gdb_byte> (address_table, address_table_end);
-  ++i;
-
-  const gdb_byte *symbol_table = addr + MAYBE_SWAP (metadata[i]);
-  const gdb_byte *symbol_table_end = addr + MAYBE_SWAP (metadata[i + 1]);
-  map->symbol_table
-    = gdb::array_view<mapped_index::symbol_table_slot>
-       ((mapped_index::symbol_table_slot *) symbol_table,
-	(mapped_index::symbol_table_slot *) symbol_table_end);
-
-  ++i;
-  map->constant_pool = (char *) (addr + MAYBE_SWAP (metadata[i]));
-
-  return 1;
-}
-
-/* Callback types for dwarf2_read_gdb_index.  */
-
-typedef gdb::function_view
-    <gdb::array_view<const gdb_byte>(objfile *, dwarf2_per_objfile *)>
-    get_gdb_index_contents_ftype;
-typedef gdb::function_view
-    <gdb::array_view<const gdb_byte>(objfile *, dwz_file *)>
-    get_gdb_index_contents_dwz_ftype;
-
-/* Read .gdb_index.  If everything went ok, initialize the "quick"
-   elements of all the CUs and return 1.  Otherwise, return 0.  */
-
-static int
-dwarf2_read_gdb_index
-  (struct dwarf2_per_objfile *dwarf2_per_objfile,
-   get_gdb_index_contents_ftype get_gdb_index_contents,
-   get_gdb_index_contents_dwz_ftype get_gdb_index_contents_dwz)
-{
-  const gdb_byte *cu_list, *types_list, *dwz_list = NULL;
-  offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0;
-  struct dwz_file *dwz;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  gdb::array_view<const gdb_byte> main_index_contents
-    = get_gdb_index_contents (objfile, dwarf2_per_objfile);
-
-  if (main_index_contents.empty ())
-    return 0;
-
-  std::unique_ptr<struct mapped_index> map (new struct mapped_index);
-  if (!read_gdb_index_from_buffer (objfile, objfile_name (objfile),
-				   use_deprecated_index_sections,
-				   main_index_contents, map.get (), &cu_list,
-				   &cu_list_elements, &types_list,
-				   &types_list_elements))
-    return 0;
-
-  /* Don't use the index if it's empty.  */
-  if (map->symbol_table.empty ())
-    return 0;
-
-  /* If there is a .dwz file, read it so we can get its CU list as
-     well.  */
-  dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-  if (dwz != NULL)
-    {
-      struct mapped_index dwz_map;
-      const gdb_byte *dwz_types_ignore;
-      offset_type dwz_types_elements_ignore;
-
-      gdb::array_view<const gdb_byte> dwz_index_content
-	= get_gdb_index_contents_dwz (objfile, dwz);
-
-      if (dwz_index_content.empty ())
-	return 0;
-
-      if (!read_gdb_index_from_buffer (objfile,
-				       bfd_get_filename (dwz->dwz_bfd.get ()),
-				       1, dwz_index_content, &dwz_map,
-				       &dwz_list, &dwz_list_elements,
-				       &dwz_types_ignore,
-				       &dwz_types_elements_ignore))
-	{
-	  warning (_("could not read '.gdb_index' section from %s; skipping"),
-		   bfd_get_filename (dwz->dwz_bfd.get ()));
-	  return 0;
-	}
-    }
-
-  create_cus_from_index (dwarf2_per_objfile, cu_list, cu_list_elements,
-			 dwz_list, dwz_list_elements);
-
-  if (types_list_elements)
-    {
-      /* We can only handle a single .debug_types when we have an
-	 index.  */
-      if (dwarf2_per_objfile->types.size () != 1)
-	return 0;
-
-      dwarf2_section_info *section = &dwarf2_per_objfile->types[0];
-
-      create_signatured_type_table_from_index (dwarf2_per_objfile, section,
-					       types_list, types_list_elements);
-    }
-
-  create_addrmap_from_index (dwarf2_per_objfile, map.get ());
-
-  dwarf2_per_objfile->index_table = std::move (map);
-  dwarf2_per_objfile->using_index = 1;
-  dwarf2_per_objfile->quick_file_names_table =
-    create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ());
-
-  return 1;
-}
-
-/* die_reader_func for dw2_get_file_names.  */
-
-static void
-dw2_get_file_names_reader (const struct die_reader_specs *reader,
-			   const gdb_byte *info_ptr,
-			   struct die_info *comp_unit_die,
-			   int has_children,
-			   void *data)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct dwarf2_per_cu_data *this_cu = cu->per_cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_per_cu_data *lh_cu;
-  struct attribute *attr;
-  void **slot;
-  struct quick_file_names *qfn;
-
-  gdb_assert (! this_cu->is_debug_types);
-
-  /* Our callers never want to match partial units -- instead they
-     will match the enclosing full CU.  */
-  if (comp_unit_die->tag == DW_TAG_partial_unit)
-    {
-      this_cu->v.quick->no_file_data = 1;
-      return;
-    }
-
-  lh_cu = this_cu;
-  slot = NULL;
-
-  line_header_up lh;
-  sect_offset line_offset {};
-
-  attr = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, cu);
-  if (attr != nullptr)
-    {
-      struct quick_file_names find_entry;
-
-      line_offset = (sect_offset) DW_UNSND (attr);
-
-      /* We may have already read in this line header (TU line header sharing).
-	 If we have we're done.  */
-      find_entry.hash.dwo_unit = cu->dwo_unit;
-      find_entry.hash.line_sect_off = line_offset;
-      slot = htab_find_slot (dwarf2_per_objfile->quick_file_names_table,
-			     &find_entry, INSERT);
-      if (*slot != NULL)
-	{
-	  lh_cu->v.quick->file_names = (struct quick_file_names *) *slot;
-	  return;
-	}
-
-      lh = dwarf_decode_line_header (line_offset, cu);
-    }
-  if (lh == NULL)
-    {
-      lh_cu->v.quick->no_file_data = 1;
-      return;
-    }
-
-  qfn = XOBNEW (&objfile->objfile_obstack, struct quick_file_names);
-  qfn->hash.dwo_unit = cu->dwo_unit;
-  qfn->hash.line_sect_off = line_offset;
-  gdb_assert (slot != NULL);
-  *slot = qfn;
-
-  file_and_directory fnd = find_file_and_directory (comp_unit_die, cu);
-
-  int offset = 0;
-  if (strcmp (fnd.name, "<unknown>") != 0)
-    ++offset;
-
-  qfn->num_file_names = offset + lh->file_names_size ();
-  qfn->file_names =
-    XOBNEWVEC (&objfile->objfile_obstack, const char *, qfn->num_file_names);
-  if (offset != 0)
-    qfn->file_names[0] = xstrdup (fnd.name);
-  for (int i = 0; i < lh->file_names_size (); ++i)
-    qfn->file_names[i + offset] = file_full_name (i + 1, lh.get (), fnd.comp_dir);
-  qfn->real_names = NULL;
-
-  lh_cu->v.quick->file_names = qfn;
-}
-
-/* A helper for the "quick" functions which attempts to read the line
-   table for THIS_CU.  */
-
-static struct quick_file_names *
-dw2_get_file_names (struct dwarf2_per_cu_data *this_cu)
-{
-  /* This should never be called for TUs.  */
-  gdb_assert (! this_cu->is_debug_types);
-  /* Nor type unit groups.  */
-  gdb_assert (! IS_TYPE_UNIT_GROUP (this_cu));
-
-  if (this_cu->v.quick->file_names != NULL)
-    return this_cu->v.quick->file_names;
-  /* If we know there is no line data, no point in looking again.  */
-  if (this_cu->v.quick->no_file_data)
-    return NULL;
-
-  init_cutu_and_read_dies_simple (this_cu, dw2_get_file_names_reader, NULL);
-
-  if (this_cu->v.quick->no_file_data)
-    return NULL;
-  return this_cu->v.quick->file_names;
-}
-
-/* A helper for the "quick" functions which computes and caches the
-   real path for a given file name from the line table.  */
-
-static const char *
-dw2_get_real_path (struct objfile *objfile,
-		   struct quick_file_names *qfn, int index)
-{
-  if (qfn->real_names == NULL)
-    qfn->real_names = OBSTACK_CALLOC (&objfile->objfile_obstack,
-				      qfn->num_file_names, const char *);
-
-  if (qfn->real_names[index] == NULL)
-    qfn->real_names[index] = gdb_realpath (qfn->file_names[index]).release ();
-
-  return qfn->real_names[index];
-}
-
-static struct symtab *
-dw2_find_last_source_symtab (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-  dwarf2_per_cu_data *dwarf_cu = dwarf2_per_objfile->all_comp_units.back ();
-  compunit_symtab *cust = dw2_instantiate_symtab (dwarf_cu, false);
-
-  if (cust == NULL)
-    return NULL;
-
-  return compunit_primary_filetab (cust);
-}
-
-/* Traversal function for dw2_forget_cached_source_info.  */
-
-static int
-dw2_free_cached_file_names (void **slot, void *info)
-{
-  struct quick_file_names *file_data = (struct quick_file_names *) *slot;
-
-  if (file_data->real_names)
-    {
-      int i;
-
-      for (i = 0; i < file_data->num_file_names; ++i)
-	{
-	  xfree ((void*) file_data->real_names[i]);
-	  file_data->real_names[i] = NULL;
-	}
-    }
-
-  return 1;
-}
-
-static void
-dw2_forget_cached_source_info (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  htab_traverse_noresize (dwarf2_per_objfile->quick_file_names_table,
-			  dw2_free_cached_file_names, NULL);
-}
-
-/* Helper function for dw2_map_symtabs_matching_filename that expands
-   the symtabs and calls the iterator.  */
-
-static int
-dw2_map_expand_apply (struct objfile *objfile,
-		      struct dwarf2_per_cu_data *per_cu,
-		      const char *name, const char *real_path,
-		      gdb::function_view<bool (symtab *)> callback)
-{
-  struct compunit_symtab *last_made = objfile->compunit_symtabs;
-
-  /* Don't visit already-expanded CUs.  */
-  if (per_cu->v.quick->compunit_symtab)
-    return 0;
-
-  /* This may expand more than one symtab, and we want to iterate over
-     all of them.  */
-  dw2_instantiate_symtab (per_cu, false);
-
-  return iterate_over_some_symtabs (name, real_path, objfile->compunit_symtabs,
-				    last_made, callback);
-}
-
-/* Implementation of the map_symtabs_matching_filename method.  */
-
-static bool
-dw2_map_symtabs_matching_filename
-  (struct objfile *objfile, const char *name, const char *real_path,
-   gdb::function_view<bool (symtab *)> callback)
-{
-  const char *name_basename = lbasename (name);
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* The rule is CUs specify all the files, including those used by
-     any TU, so there's no need to scan TUs here.  */
-
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      /* We only need to look at symtabs not already expanded.  */
-      if (per_cu->v.quick->compunit_symtab)
-	continue;
-
-      quick_file_names *file_data = dw2_get_file_names (per_cu);
-      if (file_data == NULL)
-	continue;
-
-      for (int j = 0; j < file_data->num_file_names; ++j)
-	{
-	  const char *this_name = file_data->file_names[j];
-	  const char *this_real_name;
-
-	  if (compare_filenames_for_search (this_name, name))
-	    {
-	      if (dw2_map_expand_apply (objfile, per_cu, name, real_path,
-					callback))
-		return true;
-	      continue;
-	    }
-
-	  /* Before we invoke realpath, which can get expensive when many
-	     files are involved, do a quick comparison of the basenames.  */
-	  if (! basenames_may_differ
-	      && FILENAME_CMP (lbasename (this_name), name_basename) != 0)
-	    continue;
-
-	  this_real_name = dw2_get_real_path (objfile, file_data, j);
-	  if (compare_filenames_for_search (this_real_name, name))
-	    {
-	      if (dw2_map_expand_apply (objfile, per_cu, name, real_path,
-					callback))
-		return true;
-	      continue;
-	    }
-
-	  if (real_path != NULL)
-	    {
-	      gdb_assert (IS_ABSOLUTE_PATH (real_path));
-	      gdb_assert (IS_ABSOLUTE_PATH (name));
-	      if (this_real_name != NULL
-		  && FILENAME_CMP (real_path, this_real_name) == 0)
-		{
-		  if (dw2_map_expand_apply (objfile, per_cu, name, real_path,
-					    callback))
-		    return true;
-		  continue;
-		}
-	    }
-	}
-    }
-
-  return false;
-}
-
-/* Struct used to manage iterating over all CUs looking for a symbol.  */
-
-struct dw2_symtab_iterator
-{
-  /* The dwarf2_per_objfile owning the CUs we are iterating on.  */
-  struct dwarf2_per_objfile *dwarf2_per_objfile;
-  /* If set, only look for symbols that match that block.  Valid values are
-     GLOBAL_BLOCK and STATIC_BLOCK.  */
-  gdb::optional<block_enum> block_index;
-  /* The kind of symbol we're looking for.  */
-  domain_enum domain;
-  /* The list of CUs from the index entry of the symbol,
-     or NULL if not found.  */
-  offset_type *vec;
-  /* The next element in VEC to look at.  */
-  int next;
-  /* The number of elements in VEC, or zero if there is no match.  */
-  int length;
-  /* Have we seen a global version of the symbol?
-     If so we can ignore all further global instances.
-     This is to work around gold/15646, inefficient gold-generated
-     indices.  */
-  int global_seen;
-};
-
-/* Initialize the index symtab iterator ITER.  */
-
-static void
-dw2_symtab_iter_init (struct dw2_symtab_iterator *iter,
-		      struct dwarf2_per_objfile *dwarf2_per_objfile,
-		      gdb::optional<block_enum> block_index,
-		      domain_enum domain,
-		      const char *name)
-{
-  iter->dwarf2_per_objfile = dwarf2_per_objfile;
-  iter->block_index = block_index;
-  iter->domain = domain;
-  iter->next = 0;
-  iter->global_seen = 0;
-
-  mapped_index *index = dwarf2_per_objfile->index_table.get ();
-
-  /* index is NULL if OBJF_READNOW.  */
-  if (index != NULL && find_slot_in_mapped_hash (index, name, &iter->vec))
-    iter->length = MAYBE_SWAP (*iter->vec);
-  else
-    {
-      iter->vec = NULL;
-      iter->length = 0;
-    }
-}
-
-/* Return the next matching CU or NULL if there are no more.  */
-
-static struct dwarf2_per_cu_data *
-dw2_symtab_iter_next (struct dw2_symtab_iterator *iter)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = iter->dwarf2_per_objfile;
-
-  for ( ; iter->next < iter->length; ++iter->next)
-    {
-      offset_type cu_index_and_attrs =
-	MAYBE_SWAP (iter->vec[iter->next + 1]);
-      offset_type cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs);
-      gdb_index_symbol_kind symbol_kind =
-	GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs);
-      /* Only check the symbol attributes if they're present.
-	 Indices prior to version 7 don't record them,
-	 and indices >= 7 may elide them for certain symbols
-	 (gold does this).  */
-      int attrs_valid =
-	(dwarf2_per_objfile->index_table->version >= 7
-	 && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE);
-
-      /* Don't crash on bad data.  */
-      if (cu_index >= (dwarf2_per_objfile->all_comp_units.size ()
-		       + dwarf2_per_objfile->all_type_units.size ()))
-	{
-	  complaint (_(".gdb_index entry has bad CU index"
-		       " [in module %s]"),
-		     objfile_name (dwarf2_per_objfile->objfile));
-	  continue;
-	}
-
-      dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (cu_index);
-
-      /* Skip if already read in.  */
-      if (per_cu->v.quick->compunit_symtab)
-	continue;
-
-      /* Check static vs global.  */
-      if (attrs_valid)
-	{
-	  bool is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs);
-
-	  if (iter->block_index.has_value ())
-	    {
-	      bool want_static = *iter->block_index == STATIC_BLOCK;
-
-	      if (is_static != want_static)
-		continue;
-	    }
-
-	  /* Work around gold/15646.  */
-	  if (!is_static && iter->global_seen)
-	    continue;
-	  if (!is_static)
-	    iter->global_seen = 1;
-	}
-
-      /* Only check the symbol's kind if it has one.  */
-      if (attrs_valid)
-	{
-	  switch (iter->domain)
-	    {
-	    case VAR_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE
-		  && symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION
-		  /* Some types are also in VAR_DOMAIN.  */
-		  && symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
-		continue;
-	      break;
-	    case STRUCT_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
-		continue;
-	      break;
-	    case LABEL_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
-		continue;
-	      break;
-	    case MODULE_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
-		continue;
-	      break;
-	    default:
-	      break;
-	    }
-	}
-
-      ++iter->next;
-      return per_cu;
-    }
-
-  return NULL;
-}
-
-static struct compunit_symtab *
-dw2_lookup_symbol (struct objfile *objfile, block_enum block_index,
-		   const char *name, domain_enum domain)
-{
-  struct compunit_symtab *stab_best = NULL;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
-
-  struct dw2_symtab_iterator iter;
-  struct dwarf2_per_cu_data *per_cu;
-
-  dw2_symtab_iter_init (&iter, dwarf2_per_objfile, block_index, domain, name);
-
-  while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL)
-    {
-      struct symbol *sym, *with_opaque = NULL;
-      struct compunit_symtab *stab = dw2_instantiate_symtab (per_cu, false);
-      const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
-      const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
-      sym = block_find_symbol (block, name, domain,
-			       block_find_non_opaque_type_preferred,
-			       &with_opaque);
-
-      /* Some caution must be observed with overloaded functions
-	 and methods, since the index will not contain any overload
-	 information (but NAME might contain it).  */
-
-      if (sym != NULL
-	  && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name))
-	return stab;
-      if (with_opaque != NULL
-	  && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name))
-	stab_best = stab;
-
-      /* Keep looking through other CUs.  */
-    }
-
-  return stab_best;
-}
-
-static void
-dw2_print_stats (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-  int total = (dwarf2_per_objfile->all_comp_units.size ()
-	       + dwarf2_per_objfile->all_type_units.size ());
-  int count = 0;
-
-  for (int i = 0; i < total; ++i)
-    {
-      dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i);
-
-      if (!per_cu->v.quick->compunit_symtab)
-	++count;
-    }
-  printf_filtered (_("  Number of read CUs: %d\n"), total - count);
-  printf_filtered (_("  Number of unread CUs: %d\n"), count);
-}
-
-/* This dumps minimal information about the index.
-   It is called via "mt print objfiles".
-   One use is to verify .gdb_index has been loaded by the
-   gdb.dwarf2/gdb-index.exp testcase.  */
-
-static void
-dw2_dump (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  gdb_assert (dwarf2_per_objfile->using_index);
-  printf_filtered (".gdb_index:");
-  if (dwarf2_per_objfile->index_table != NULL)
-    {
-      printf_filtered (" version %d\n",
-		       dwarf2_per_objfile->index_table->version);
-    }
-  else
-    printf_filtered (" faked for \"readnow\"\n");
-  printf_filtered ("\n");
-}
-
-static void
-dw2_expand_symtabs_for_function (struct objfile *objfile,
-				 const char *func_name)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  struct dw2_symtab_iterator iter;
-  struct dwarf2_per_cu_data *per_cu;
-
-  dw2_symtab_iter_init (&iter, dwarf2_per_objfile, {}, VAR_DOMAIN, func_name);
-
-  while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL)
-    dw2_instantiate_symtab (per_cu, false);
-
-}
-
-static void
-dw2_expand_all_symtabs (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-  int total_units = (dwarf2_per_objfile->all_comp_units.size ()
-		     + dwarf2_per_objfile->all_type_units.size ());
-
-  for (int i = 0; i < total_units; ++i)
-    {
-      dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i);
-
-      /* We don't want to directly expand a partial CU, because if we
-	 read it with the wrong language, then assertion failures can
-	 be triggered later on.  See PR symtab/23010.  So, tell
-	 dw2_instantiate_symtab to skip partial CUs -- any important
-	 partial CU will be read via DW_TAG_imported_unit anyway.  */
-      dw2_instantiate_symtab (per_cu, true);
-    }
-}
-
-static void
-dw2_expand_symtabs_with_fullname (struct objfile *objfile,
-				  const char *fullname)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* We don't need to consider type units here.
-     This is only called for examining code, e.g. expand_line_sal.
-     There can be an order of magnitude (or more) more type units
-     than comp units, and we avoid them if we can.  */
-
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      /* We only need to look at symtabs not already expanded.  */
-      if (per_cu->v.quick->compunit_symtab)
-	continue;
-
-      quick_file_names *file_data = dw2_get_file_names (per_cu);
-      if (file_data == NULL)
-	continue;
-
-      for (int j = 0; j < file_data->num_file_names; ++j)
-	{
-	  const char *this_fullname = file_data->file_names[j];
-
-	  if (filename_cmp (this_fullname, fullname) == 0)
-	    {
-	      dw2_instantiate_symtab (per_cu, false);
-	      break;
-	    }
-	}
-    }
-}
-
-static void
-dw2_map_matching_symbols
-  (struct objfile *objfile,
-   const lookup_name_info &name, domain_enum domain,
-   int global,
-   gdb::function_view<symbol_found_callback_ftype> callback,
-   symbol_compare_ftype *ordered_compare)
-{
-  /* Currently unimplemented; used for Ada.  The function can be called if the
-     current language is Ada for a non-Ada objfile using GNU index.  As Ada
-     does not look for non-Ada symbols this function should just return.  */
-}
-
-/* Starting from a search name, return the string that finds the upper
-   bound of all strings that start with SEARCH_NAME in a sorted name
-   list.  Returns the empty string to indicate that the upper bound is
-   the end of the list.  */
-
-static std::string
-make_sort_after_prefix_name (const char *search_name)
-{
-  /* When looking to complete "func", we find the upper bound of all
-     symbols that start with "func" by looking for where we'd insert
-     the closest string that would follow "func" in lexicographical
-     order.  Usually, that's "func"-with-last-character-incremented,
-     i.e. "fund".  Mind non-ASCII characters, though.  Usually those
-     will be UTF-8 multi-byte sequences, but we can't be certain.
-     Especially mind the 0xff character, which is a valid character in
-     non-UTF-8 source character sets (e.g. Latin1 'Ã¿'), and we can't
-     rule out compilers allowing it in identifiers.  Note that
-     conveniently, strcmp/strcasecmp are specified to compare
-     characters interpreted as unsigned char.  So what we do is treat
-     the whole string as a base 256 number composed of a sequence of
-     base 256 "digits" and add 1 to it.  I.e., adding 1 to 0xff wraps
-     to 0, and carries 1 to the following more-significant position.
-     If the very first character in SEARCH_NAME ends up incremented
-     and carries/overflows, then the upper bound is the end of the
-     list.  The string after the empty string is also the empty
-     string.
-
-     Some examples of this operation:
-
-       SEARCH_NAME  => "+1" RESULT
-
-       "abc"              => "abd"
-       "ab\xff"           => "ac"
-       "\xff" "a" "\xff"  => "\xff" "b"
-       "\xff"             => ""
-       "\xff\xff"         => ""
-       ""                 => ""
-
-     Then, with these symbols for example:
-
-      func
-      func1
-      fund
-
-     completing "func" looks for symbols between "func" and
-     "func"-with-last-character-incremented, i.e. "fund" (exclusive),
-     which finds "func" and "func1", but not "fund".
-
-     And with:
-
-      funcÃ¿     (Latin1 'Ã¿' [0xff])
-      funcÃ¿1
-      fund
-
-     completing "funcÃ¿" looks for symbols between "funcÃ¿" and "fund"
-     (exclusive), which finds "funcÃ¿" and "funcÃ¿1", but not "fund".
-
-     And with:
-
-      Ã¿Ã¿        (Latin1 'Ã¿' [0xff])
-      Ã¿Ã¿1
-
-     completing "Ã¿" or "Ã¿Ã¿" looks for symbols between between "Ã¿Ã¿" and
-     the end of the list.
-  */
-  std::string after = search_name;
-  while (!after.empty () && (unsigned char) after.back () == 0xff)
-    after.pop_back ();
-  if (!after.empty ())
-    after.back () = (unsigned char) after.back () + 1;
-  return after;
-}
-
-/* See declaration.  */
-
-std::pair<std::vector<name_component>::const_iterator,
-	  std::vector<name_component>::const_iterator>
-mapped_index_base::find_name_components_bounds
-  (const lookup_name_info &lookup_name_without_params, language lang) const
-{
-  auto *name_cmp
-    = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp;
-
-  const char *lang_name
-    = lookup_name_without_params.language_lookup_name (lang).c_str ();
-
-  /* Comparison function object for lower_bound that matches against a
-     given symbol name.  */
-  auto lookup_compare_lower = [&] (const name_component &elem,
-				   const char *name)
-    {
-      const char *elem_qualified = this->symbol_name_at (elem.idx);
-      const char *elem_name = elem_qualified + elem.name_offset;
-      return name_cmp (elem_name, name) < 0;
-    };
-
-  /* Comparison function object for upper_bound that matches against a
-     given symbol name.  */
-  auto lookup_compare_upper = [&] (const char *name,
-				   const name_component &elem)
-    {
-      const char *elem_qualified = this->symbol_name_at (elem.idx);
-      const char *elem_name = elem_qualified + elem.name_offset;
-      return name_cmp (name, elem_name) < 0;
-    };
-
-  auto begin = this->name_components.begin ();
-  auto end = this->name_components.end ();
-
-  /* Find the lower bound.  */
-  auto lower = [&] ()
-    {
-      if (lookup_name_without_params.completion_mode () && lang_name[0] == '\0')
-	return begin;
-      else
-	return std::lower_bound (begin, end, lang_name, lookup_compare_lower);
-    } ();
-
-  /* Find the upper bound.  */
-  auto upper = [&] ()
-    {
-      if (lookup_name_without_params.completion_mode ())
-	{
-	  /* In completion mode, we want UPPER to point past all
-	     symbols names that have the same prefix.  I.e., with
-	     these symbols, and completing "func":
-
-	      function        << lower bound
-	      function1
-	      other_function  << upper bound
-
-	     We find the upper bound by looking for the insertion
-	     point of "func"-with-last-character-incremented,
-	     i.e. "fund".  */
-	  std::string after = make_sort_after_prefix_name (lang_name);
-	  if (after.empty ())
-	    return end;
-	  return std::lower_bound (lower, end, after.c_str (),
-				   lookup_compare_lower);
-	}
-      else
-	return std::upper_bound (lower, end, lang_name, lookup_compare_upper);
-    } ();
-
-  return {lower, upper};
-}
-
-/* See declaration.  */
-
-void
-mapped_index_base::build_name_components ()
-{
-  if (!this->name_components.empty ())
-    return;
-
-  this->name_components_casing = case_sensitivity;
-  auto *name_cmp
-    = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp;
-
-  /* The code below only knows how to break apart components of C++
-     symbol names (and other languages that use '::' as
-     namespace/module separator) and Ada symbol names.  */
-  auto count = this->symbol_name_count ();
-  for (offset_type idx = 0; idx < count; idx++)
-    {
-      if (this->symbol_name_slot_invalid (idx))
-	continue;
-
-      const char *name = this->symbol_name_at (idx);
-
-      /* Add each name component to the name component table.  */
-      unsigned int previous_len = 0;
-
-      if (strstr (name, "::") != nullptr)
-	{
-	  for (unsigned int current_len = cp_find_first_component (name);
-	       name[current_len] != '\0';
-	       current_len += cp_find_first_component (name + current_len))
-	    {
-	      gdb_assert (name[current_len] == ':');
-	      this->name_components.push_back ({previous_len, idx});
-	      /* Skip the '::'.  */
-	      current_len += 2;
-	      previous_len = current_len;
-	    }
-	}
-      else
-	{
-	  /* Handle the Ada encoded (aka mangled) form here.  */
-	  for (const char *iter = strstr (name, "__");
-	       iter != nullptr;
-	       iter = strstr (iter, "__"))
-	    {
-	      this->name_components.push_back ({previous_len, idx});
-	      iter += 2;
-	      previous_len = iter - name;
-	    }
-	}
-
-      this->name_components.push_back ({previous_len, idx});
-    }
-
-  /* Sort name_components elements by name.  */
-  auto name_comp_compare = [&] (const name_component &left,
-				const name_component &right)
-    {
-      const char *left_qualified = this->symbol_name_at (left.idx);
-      const char *right_qualified = this->symbol_name_at (right.idx);
-
-      const char *left_name = left_qualified + left.name_offset;
-      const char *right_name = right_qualified + right.name_offset;
-
-      return name_cmp (left_name, right_name) < 0;
-    };
-
-  std::sort (this->name_components.begin (),
-	     this->name_components.end (),
-	     name_comp_compare);
-}
-
-/* Helper for dw2_expand_symtabs_matching that works with a
-   mapped_index_base instead of the containing objfile.  This is split
-   to a separate function in order to be able to unit test the
-   name_components matching using a mock mapped_index_base.  For each
-   symbol name that matches, calls MATCH_CALLBACK, passing it the
-   symbol's index in the mapped_index_base symbol table.  */
-
-static void
-dw2_expand_symtabs_matching_symbol
-  (mapped_index_base &index,
-   const lookup_name_info &lookup_name_in,
-   gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
-   enum search_domain kind,
-   gdb::function_view<bool (offset_type)> match_callback)
-{
-  lookup_name_info lookup_name_without_params
-    = lookup_name_in.make_ignore_params ();
-
-  /* Build the symbol name component sorted vector, if we haven't
-     yet.  */
-  index.build_name_components ();
-
-  /* The same symbol may appear more than once in the range though.
-     E.g., if we're looking for symbols that complete "w", and we have
-     a symbol named "w1::w2", we'll find the two name components for
-     that same symbol in the range.  To be sure we only call the
-     callback once per symbol, we first collect the symbol name
-     indexes that matched in a temporary vector and ignore
-     duplicates.  */
-  std::vector<offset_type> matches;
-
-  struct name_and_matcher
-  {
-    symbol_name_matcher_ftype *matcher;
-    const std::string &name;
-
-    bool operator== (const name_and_matcher &other) const
-    {
-      return matcher == other.matcher && name == other.name;
-    }
-  };
-
-  /* A vector holding all the different symbol name matchers, for all
-     languages.  */
-  std::vector<name_and_matcher> matchers;
-
-  for (int i = 0; i < nr_languages; i++)
-    {
-      enum language lang_e = (enum language) i;
-
-      const language_defn *lang = language_def (lang_e);
-      symbol_name_matcher_ftype *name_matcher
-	= get_symbol_name_matcher (lang, lookup_name_without_params);
-
-      name_and_matcher key {
-         name_matcher,
-	 lookup_name_without_params.language_lookup_name (lang_e)
-      };
-
-      /* Don't insert the same comparison routine more than once.
-	 Note that we do this linear walk.  This is not a problem in
-	 practice because the number of supported languages is
-	 low.  */
-      if (std::find (matchers.begin (), matchers.end (), key)
-	  != matchers.end ())
-	continue;
-      matchers.push_back (std::move (key));
-
-      auto bounds
-	= index.find_name_components_bounds (lookup_name_without_params,
-					     lang_e);
-
-      /* Now for each symbol name in range, check to see if we have a name
-	 match, and if so, call the MATCH_CALLBACK callback.  */
-
-      for (; bounds.first != bounds.second; ++bounds.first)
-	{
-	  const char *qualified = index.symbol_name_at (bounds.first->idx);
-
-	  if (!name_matcher (qualified, lookup_name_without_params, NULL)
-	      || (symbol_matcher != NULL && !symbol_matcher (qualified)))
-	    continue;
-
-	  matches.push_back (bounds.first->idx);
-	}
-    }
-
-  std::sort (matches.begin (), matches.end ());
-
-  /* Finally call the callback, once per match.  */
-  ULONGEST prev = -1;
-  for (offset_type idx : matches)
-    {
-      if (prev != idx)
-	{
-	  if (!match_callback (idx))
-	    break;
-	  prev = idx;
-	}
-    }
-
-  /* Above we use a type wider than idx's for 'prev', since 0 and
-     (offset_type)-1 are both possible values.  */
-  static_assert (sizeof (prev) > sizeof (offset_type), "");
-}
-
-#if GDB_SELF_TEST
-
-namespace selftests { namespace dw2_expand_symtabs_matching {
-
-/* A mock .gdb_index/.debug_names-like name index table, enough to
-   exercise dw2_expand_symtabs_matching_symbol, which works with the
-   mapped_index_base interface.  Builds an index from the symbol list
-   passed as parameter to the constructor.  */
-class mock_mapped_index : public mapped_index_base
-{
-public:
-  mock_mapped_index (gdb::array_view<const char *> symbols)
-    : m_symbol_table (symbols)
-  {}
-
-  DISABLE_COPY_AND_ASSIGN (mock_mapped_index);
-
-  /* Return the number of names in the symbol table.  */
-  size_t symbol_name_count () const override
-  {
-    return m_symbol_table.size ();
-  }
-
-  /* Get the name of the symbol at IDX in the symbol table.  */
-  const char *symbol_name_at (offset_type idx) const override
-  {
-    return m_symbol_table[idx];
-  }
-
-private:
-  gdb::array_view<const char *> m_symbol_table;
-};
-
-/* Convenience function that converts a NULL pointer to a "<null>"
-   string, to pass to print routines.  */
-
-static const char *
-string_or_null (const char *str)
-{
-  return str != NULL ? str : "<null>";
-}
-
-/* Check if a lookup_name_info built from
-   NAME/MATCH_TYPE/COMPLETION_MODE matches the symbols in the mock
-   index.  EXPECTED_LIST is the list of expected matches, in expected
-   matching order.  If no match expected, then an empty list is
-   specified.  Returns true on success.  On failure prints a warning
-   indicating the file:line that failed, and returns false.  */
-
-static bool
-check_match (const char *file, int line,
-	     mock_mapped_index &mock_index,
-	     const char *name, symbol_name_match_type match_type,
-	     bool completion_mode,
-	     std::initializer_list<const char *> expected_list)
-{
-  lookup_name_info lookup_name (name, match_type, completion_mode);
-
-  bool matched = true;
-
-  auto mismatch = [&] (const char *expected_str,
-		       const char *got)
-  {
-    warning (_("%s:%d: match_type=%s, looking-for=\"%s\", "
-	       "expected=\"%s\", got=\"%s\"\n"),
-	     file, line,
-	     (match_type == symbol_name_match_type::FULL
-	      ? "FULL" : "WILD"),
-	     name, string_or_null (expected_str), string_or_null (got));
-    matched = false;
-  };
-
-  auto expected_it = expected_list.begin ();
-  auto expected_end = expected_list.end ();
-
-  dw2_expand_symtabs_matching_symbol (mock_index, lookup_name,
-				      NULL, ALL_DOMAIN,
-				      [&] (offset_type idx)
-  {
-    const char *matched_name = mock_index.symbol_name_at (idx);
-    const char *expected_str
-      = expected_it == expected_end ? NULL : *expected_it++;
-
-    if (expected_str == NULL || strcmp (expected_str, matched_name) != 0)
-      mismatch (expected_str, matched_name);
-    return true;
-  });
-
-  const char *expected_str
-  = expected_it == expected_end ? NULL : *expected_it++;
-  if (expected_str != NULL)
-    mismatch (expected_str, NULL);
-
-  return matched;
-}
-
-/* The symbols added to the mock mapped_index for testing (in
-   canonical form).  */
-static const char *test_symbols[] = {
-  "function",
-  "std::bar",
-  "std::zfunction",
-  "std::zfunction2",
-  "w1::w2",
-  "ns::foo<char*>",
-  "ns::foo<int>",
-  "ns::foo<long>",
-  "ns2::tmpl<int>::foo2",
-  "(anonymous namespace)::A::B::C",
-
-  /* These are used to check that the increment-last-char in the
-     matching algorithm for completion doesn't match "t1_fund" when
-     completing "t1_func".  */
-  "t1_func",
-  "t1_func1",
-  "t1_fund",
-  "t1_fund1",
-
-  /* A UTF-8 name with multi-byte sequences to make sure that
-     cp-name-parser understands this as a single identifier ("funÃ§Ã£o"
-     is "function" in PT).  */
-  u8"u8funÃ§Ã£o",
-
-  /* \377 (0xff) is Latin1 'Ã¿'.  */
-  "yfunc\377",
-
-  /* \377 (0xff) is Latin1 'Ã¿'.  */
-  "\377",
-  "\377\377123",
-
-  /* A name with all sorts of complications.  Starts with "z" to make
-     it easier for the completion tests below.  */
-#define Z_SYM_NAME \
-  "z::std::tuple<(anonymous namespace)::ui*, std::bar<(anonymous namespace)::ui> >" \
-    "::tuple<(anonymous namespace)::ui*, " \
-    "std::default_delete<(anonymous namespace)::ui>, void>"
-
-  Z_SYM_NAME
-};
-
-/* Returns true if the mapped_index_base::find_name_component_bounds
-   method finds EXPECTED_SYMS in INDEX when looking for SEARCH_NAME,
-   in completion mode.  */
-
-static bool
-check_find_bounds_finds (mapped_index_base &index,
-			 const char *search_name,
-			 gdb::array_view<const char *> expected_syms)
-{
-  lookup_name_info lookup_name (search_name,
-				symbol_name_match_type::FULL, true);
-
-  auto bounds = index.find_name_components_bounds (lookup_name,
-						   language_cplus);
-
-  size_t distance = std::distance (bounds.first, bounds.second);
-  if (distance != expected_syms.size ())
-    return false;
-
-  for (size_t exp_elem = 0; exp_elem < distance; exp_elem++)
-    {
-      auto nc_elem = bounds.first + exp_elem;
-      const char *qualified = index.symbol_name_at (nc_elem->idx);
-      if (strcmp (qualified, expected_syms[exp_elem]) != 0)
-	return false;
-    }
-
-  return true;
-}
-
-/* Test the lower-level mapped_index::find_name_component_bounds
-   method.  */
-
-static void
-test_mapped_index_find_name_component_bounds ()
-{
-  mock_mapped_index mock_index (test_symbols);
-
-  mock_index.build_name_components ();
-
-  /* Test the lower-level mapped_index::find_name_component_bounds
-     method in completion mode.  */
-  {
-    static const char *expected_syms[] = {
-      "t1_func",
-      "t1_func1",
-    };
-
-    SELF_CHECK (check_find_bounds_finds (mock_index,
-					 "t1_func", expected_syms));
-  }
-
-  /* Check that the increment-last-char in the name matching algorithm
-     for completion doesn't get confused with Ansi1 'Ã¿' / 0xff.  */
-  {
-    static const char *expected_syms1[] = {
-      "\377",
-      "\377\377123",
-    };
-    SELF_CHECK (check_find_bounds_finds (mock_index,
-					 "\377", expected_syms1));
-
-    static const char *expected_syms2[] = {
-      "\377\377123",
-    };
-    SELF_CHECK (check_find_bounds_finds (mock_index,
-					 "\377\377", expected_syms2));
-  }
-}
-
-/* Test dw2_expand_symtabs_matching_symbol.  */
-
-static void
-test_dw2_expand_symtabs_matching_symbol ()
-{
-  mock_mapped_index mock_index (test_symbols);
-
-  /* We let all tests run until the end even if some fails, for debug
-     convenience.  */
-  bool any_mismatch = false;
-
-  /* Create the expected symbols list (an initializer_list).  Needed
-     because lists have commas, and we need to pass them to CHECK,
-     which is a macro.  */
-#define EXPECT(...) { __VA_ARGS__ }
-
-  /* Wrapper for check_match that passes down the current
-     __FILE__/__LINE__.  */
-#define CHECK_MATCH(NAME, MATCH_TYPE, COMPLETION_MODE, EXPECTED_LIST)	\
-  any_mismatch |= !check_match (__FILE__, __LINE__,			\
-				mock_index,				\
-				NAME, MATCH_TYPE, COMPLETION_MODE,	\
-				EXPECTED_LIST)
-
-  /* Identity checks.  */
-  for (const char *sym : test_symbols)
-    {
-      /* Should be able to match all existing symbols.  */
-      CHECK_MATCH (sym, symbol_name_match_type::FULL, false,
-		   EXPECT (sym));
-
-      /* Should be able to match all existing symbols with
-	 parameters.  */
-      std::string with_params = std::string (sym) + "(int)";
-      CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false,
-		   EXPECT (sym));
-
-      /* Should be able to match all existing symbols with
-	 parameters and qualifiers.  */
-      with_params = std::string (sym) + " ( int ) const";
-      CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false,
-		   EXPECT (sym));
-
-      /* This should really find sym, but cp-name-parser.y doesn't
-	 know about lvalue/rvalue qualifiers yet.  */
-      with_params = std::string (sym) + " ( int ) &&";
-      CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false,
-		   {});
-    }
-
-  /* Check that the name matching algorithm for completion doesn't get
-     confused with Latin1 'Ã¿' / 0xff.  */
-  {
-    static const char str[] = "\377";
-    CHECK_MATCH (str, symbol_name_match_type::FULL, true,
-		 EXPECT ("\377", "\377\377123"));
-  }
-
-  /* Check that the increment-last-char in the matching algorithm for
-     completion doesn't match "t1_fund" when completing "t1_func".  */
-  {
-    static const char str[] = "t1_func";
-    CHECK_MATCH (str, symbol_name_match_type::FULL, true,
-		 EXPECT ("t1_func", "t1_func1"));
-  }
-
-  /* Check that completion mode works at each prefix of the expected
-     symbol name.  */
-  {
-    static const char str[] = "function(int)";
-    size_t len = strlen (str);
-    std::string lookup;
-
-    for (size_t i = 1; i < len; i++)
-      {
-	lookup.assign (str, i);
-	CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true,
-		     EXPECT ("function"));
-      }
-  }
-
-  /* While "w" is a prefix of both components, the match function
-     should still only be called once.  */
-  {
-    CHECK_MATCH ("w", symbol_name_match_type::FULL, true,
-		 EXPECT ("w1::w2"));
-    CHECK_MATCH ("w", symbol_name_match_type::WILD, true,
-		 EXPECT ("w1::w2"));
-  }
-
-  /* Same, with a "complicated" symbol.  */
-  {
-    static const char str[] = Z_SYM_NAME;
-    size_t len = strlen (str);
-    std::string lookup;
-
-    for (size_t i = 1; i < len; i++)
-      {
-	lookup.assign (str, i);
-	CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true,
-		     EXPECT (Z_SYM_NAME));
-      }
-  }
-
-  /* In FULL mode, an incomplete symbol doesn't match.  */
-  {
-    CHECK_MATCH ("std::zfunction(int", symbol_name_match_type::FULL, false,
-		 {});
-  }
-
-  /* A complete symbol with parameters matches any overload, since the
-     index has no overload info.  */
-  {
-    CHECK_MATCH ("std::zfunction(int)", symbol_name_match_type::FULL, true,
-		 EXPECT ("std::zfunction", "std::zfunction2"));
-    CHECK_MATCH ("zfunction(int)", symbol_name_match_type::WILD, true,
-		 EXPECT ("std::zfunction", "std::zfunction2"));
-    CHECK_MATCH ("zfunc", symbol_name_match_type::WILD, true,
-		 EXPECT ("std::zfunction", "std::zfunction2"));
-  }
-
-  /* Check that whitespace is ignored appropriately.  A symbol with a
-     template argument list. */
-  {
-    static const char expected[] = "ns::foo<int>";
-    CHECK_MATCH ("ns :: foo < int > ", symbol_name_match_type::FULL, false,
-		 EXPECT (expected));
-    CHECK_MATCH ("foo < int > ", symbol_name_match_type::WILD, false,
-		 EXPECT (expected));
-  }
-
-  /* Check that whitespace is ignored appropriately.  A symbol with a
-     template argument list that includes a pointer.  */
-  {
-    static const char expected[] = "ns::foo<char*>";
-    /* Try both completion and non-completion modes.  */
-    static const bool completion_mode[2] = {false, true};
-    for (size_t i = 0; i < 2; i++)
-      {
-	CHECK_MATCH ("ns :: foo < char * >", symbol_name_match_type::FULL,
-		     completion_mode[i], EXPECT (expected));
-	CHECK_MATCH ("foo < char * >", symbol_name_match_type::WILD,
-		     completion_mode[i], EXPECT (expected));
-
-	CHECK_MATCH ("ns :: foo < char * > (int)", symbol_name_match_type::FULL,
-		     completion_mode[i], EXPECT (expected));
-	CHECK_MATCH ("foo < char * > (int)", symbol_name_match_type::WILD,
-		     completion_mode[i], EXPECT (expected));
-      }
-  }
-
-  {
-    /* Check method qualifiers are ignored.  */
-    static const char expected[] = "ns::foo<char*>";
-    CHECK_MATCH ("ns :: foo < char * >  ( int ) const",
-		 symbol_name_match_type::FULL, true, EXPECT (expected));
-    CHECK_MATCH ("ns :: foo < char * >  ( int ) &&",
-		 symbol_name_match_type::FULL, true, EXPECT (expected));
-    CHECK_MATCH ("foo < char * >  ( int ) const",
-		 symbol_name_match_type::WILD, true, EXPECT (expected));
-    CHECK_MATCH ("foo < char * >  ( int ) &&",
-		 symbol_name_match_type::WILD, true, EXPECT (expected));
-  }
-
-  /* Test lookup names that don't match anything.  */
-  {
-    CHECK_MATCH ("bar2", symbol_name_match_type::WILD, false,
-		 {});
-
-    CHECK_MATCH ("doesntexist", symbol_name_match_type::FULL, false,
-		 {});
-  }
-
-  /* Some wild matching tests, exercising "(anonymous namespace)",
-     which should not be confused with a parameter list.  */
-  {
-    static const char *syms[] = {
-      "A::B::C",
-      "B::C",
-      "C",
-      "A :: B :: C ( int )",
-      "B :: C ( int )",
-      "C ( int )",
-    };
-
-    for (const char *s : syms)
-      {
-	CHECK_MATCH (s, symbol_name_match_type::WILD, false,
-		     EXPECT ("(anonymous namespace)::A::B::C"));
-      }
-  }
-
-  {
-    static const char expected[] = "ns2::tmpl<int>::foo2";
-    CHECK_MATCH ("tmp", symbol_name_match_type::WILD, true,
-		 EXPECT (expected));
-    CHECK_MATCH ("tmpl<", symbol_name_match_type::WILD, true,
-		 EXPECT (expected));
-  }
-
-  SELF_CHECK (!any_mismatch);
-
-#undef EXPECT
-#undef CHECK_MATCH
-}
-
-static void
-run_test ()
-{
-  test_mapped_index_find_name_component_bounds ();
-  test_dw2_expand_symtabs_matching_symbol ();
-}
-
-}} // namespace selftests::dw2_expand_symtabs_matching
-
-#endif /* GDB_SELF_TEST */
-
-/* If FILE_MATCHER is NULL or if PER_CU has
-   dwarf2_per_cu_quick_data::MARK set (see
-   dw_expand_symtabs_matching_file_matcher), expand the CU and call
-   EXPANSION_NOTIFY on it.  */
-
-static void
-dw2_expand_symtabs_matching_one
-  (struct dwarf2_per_cu_data *per_cu,
-   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
-   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify)
-{
-  if (file_matcher == NULL || per_cu->v.quick->mark)
-    {
-      bool symtab_was_null
-	= (per_cu->v.quick->compunit_symtab == NULL);
-
-      dw2_instantiate_symtab (per_cu, false);
-
-      if (expansion_notify != NULL
-	  && symtab_was_null
-	  && per_cu->v.quick->compunit_symtab != NULL)
-	expansion_notify (per_cu->v.quick->compunit_symtab);
-    }
-}
-
-/* Helper for dw2_expand_matching symtabs.  Called on each symbol
-   matched, to expand corresponding CUs that were marked.  IDX is the
-   index of the symbol name that matched.  */
-
-static void
-dw2_expand_marked_cus
-  (struct dwarf2_per_objfile *dwarf2_per_objfile, offset_type idx,
-   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
-   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
-   search_domain kind)
-{
-  offset_type *vec, vec_len, vec_idx;
-  bool global_seen = false;
-  mapped_index &index = *dwarf2_per_objfile->index_table;
-
-  vec = (offset_type *) (index.constant_pool
-			 + MAYBE_SWAP (index.symbol_table[idx].vec));
-  vec_len = MAYBE_SWAP (vec[0]);
-  for (vec_idx = 0; vec_idx < vec_len; ++vec_idx)
-    {
-      offset_type cu_index_and_attrs = MAYBE_SWAP (vec[vec_idx + 1]);
-      /* This value is only valid for index versions >= 7.  */
-      int is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs);
-      gdb_index_symbol_kind symbol_kind =
-	GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs);
-      int cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs);
-      /* Only check the symbol attributes if they're present.
-	 Indices prior to version 7 don't record them,
-	 and indices >= 7 may elide them for certain symbols
-	 (gold does this).  */
-      int attrs_valid =
-	(index.version >= 7
-	 && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE);
-
-      /* Work around gold/15646.  */
-      if (attrs_valid)
-	{
-	  if (!is_static && global_seen)
-	    continue;
-	  if (!is_static)
-	    global_seen = true;
-	}
-
-      /* Only check the symbol's kind if it has one.  */
-      if (attrs_valid)
-	{
-	  switch (kind)
-	    {
-	    case VARIABLES_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE)
-		continue;
-	      break;
-	    case FUNCTIONS_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION)
-		continue;
-	      break;
-	    case TYPES_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
-		continue;
-	      break;
-	    case MODULES_DOMAIN:
-	      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
-		continue;
-	      break;
-	    default:
-	      break;
-	    }
-	}
-
-      /* Don't crash on bad data.  */
-      if (cu_index >= (dwarf2_per_objfile->all_comp_units.size ()
-		       + dwarf2_per_objfile->all_type_units.size ()))
-	{
-	  complaint (_(".gdb_index entry has bad CU index"
-		       " [in module %s]"),
-		       objfile_name (dwarf2_per_objfile->objfile));
-	  continue;
-	}
-
-      dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (cu_index);
-      dw2_expand_symtabs_matching_one (per_cu, file_matcher,
-				       expansion_notify);
-    }
-}
-
-/* If FILE_MATCHER is non-NULL, set all the
-   dwarf2_per_cu_quick_data::MARK of the current DWARF2_PER_OBJFILE
-   that match FILE_MATCHER.  */
-
-static void
-dw_expand_symtabs_matching_file_matcher
-  (struct dwarf2_per_objfile *dwarf2_per_objfile,
-   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher)
-{
-  if (file_matcher == NULL)
-    return;
-
-  objfile *const objfile = dwarf2_per_objfile->objfile;
-
-  htab_up visited_found (htab_create_alloc (10, htab_hash_pointer,
-					    htab_eq_pointer,
-					    NULL, xcalloc, xfree));
-  htab_up visited_not_found (htab_create_alloc (10, htab_hash_pointer,
-						htab_eq_pointer,
-						NULL, xcalloc, xfree));
-
-  /* The rule is CUs specify all the files, including those used by
-     any TU, so there's no need to scan TUs here.  */
-
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      QUIT;
-
-      per_cu->v.quick->mark = 0;
-
-      /* We only need to look at symtabs not already expanded.  */
-      if (per_cu->v.quick->compunit_symtab)
-	continue;
-
-      quick_file_names *file_data = dw2_get_file_names (per_cu);
-      if (file_data == NULL)
-	continue;
-
-      if (htab_find (visited_not_found.get (), file_data) != NULL)
-	continue;
-      else if (htab_find (visited_found.get (), file_data) != NULL)
-	{
-	  per_cu->v.quick->mark = 1;
-	  continue;
-	}
-
-      for (int j = 0; j < file_data->num_file_names; ++j)
-	{
-	  const char *this_real_name;
-
-	  if (file_matcher (file_data->file_names[j], false))
-	    {
-	      per_cu->v.quick->mark = 1;
-	      break;
-	    }
-
-	  /* Before we invoke realpath, which can get expensive when many
-	     files are involved, do a quick comparison of the basenames.  */
-	  if (!basenames_may_differ
-	      && !file_matcher (lbasename (file_data->file_names[j]),
-				true))
-	    continue;
-
-	  this_real_name = dw2_get_real_path (objfile, file_data, j);
-	  if (file_matcher (this_real_name, false))
-	    {
-	      per_cu->v.quick->mark = 1;
-	      break;
-	    }
-	}
-
-      void **slot = htab_find_slot (per_cu->v.quick->mark
-				    ? visited_found.get ()
-				    : visited_not_found.get (),
-				    file_data, INSERT);
-      *slot = file_data;
-    }
-}
-
-static void
-dw2_expand_symtabs_matching
-  (struct objfile *objfile,
-   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
-   const lookup_name_info &lookup_name,
-   gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
-   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
-   enum search_domain kind)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* index_table is NULL if OBJF_READNOW.  */
-  if (!dwarf2_per_objfile->index_table)
-    return;
-
-  dw_expand_symtabs_matching_file_matcher (dwarf2_per_objfile, file_matcher);
-
-  mapped_index &index = *dwarf2_per_objfile->index_table;
-
-  dw2_expand_symtabs_matching_symbol (index, lookup_name,
-				      symbol_matcher,
-				      kind, [&] (offset_type idx)
-    {
-      dw2_expand_marked_cus (dwarf2_per_objfile, idx, file_matcher,
-			     expansion_notify, kind);
-      return true;
-    });
-}
-
-/* A helper for dw2_find_pc_sect_compunit_symtab which finds the most specific
-   symtab.  */
-
-static struct compunit_symtab *
-recursively_find_pc_sect_compunit_symtab (struct compunit_symtab *cust,
-					  CORE_ADDR pc)
-{
-  int i;
-
-  if (COMPUNIT_BLOCKVECTOR (cust) != NULL
-      && blockvector_contains_pc (COMPUNIT_BLOCKVECTOR (cust), pc))
-    return cust;
-
-  if (cust->includes == NULL)
-    return NULL;
-
-  for (i = 0; cust->includes[i]; ++i)
-    {
-      struct compunit_symtab *s = cust->includes[i];
-
-      s = recursively_find_pc_sect_compunit_symtab (s, pc);
-      if (s != NULL)
-	return s;
-    }
-
-  return NULL;
-}
-
-static struct compunit_symtab *
-dw2_find_pc_sect_compunit_symtab (struct objfile *objfile,
-				  struct bound_minimal_symbol msymbol,
-				  CORE_ADDR pc,
-				  struct obj_section *section,
-				  int warn_if_readin)
-{
-  struct dwarf2_per_cu_data *data;
-  struct compunit_symtab *result;
-
-  if (!objfile->partial_symtabs->psymtabs_addrmap)
-    return NULL;
-
-  CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets,
-				 SECT_OFF_TEXT (objfile));
-  data = (struct dwarf2_per_cu_data *) addrmap_find
-    (objfile->partial_symtabs->psymtabs_addrmap, pc - baseaddr);
-  if (!data)
-    return NULL;
-
-  if (warn_if_readin && data->v.quick->compunit_symtab)
-    warning (_("(Internal error: pc %s in read in CU, but not in symtab.)"),
-	     paddress (get_objfile_arch (objfile), pc));
-
-  result
-    = recursively_find_pc_sect_compunit_symtab (dw2_instantiate_symtab (data,
-									false),
-						pc);
-  gdb_assert (result != NULL);
-  return result;
-}
-
-static void
-dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun,
-			  void *data, int need_fullname)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  if (!dwarf2_per_objfile->filenames_cache)
-    {
-      dwarf2_per_objfile->filenames_cache.emplace ();
-
-      htab_up visited (htab_create_alloc (10,
-					  htab_hash_pointer, htab_eq_pointer,
-					  NULL, xcalloc, xfree));
-
-      /* The rule is CUs specify all the files, including those used
-	 by any TU, so there's no need to scan TUs here.  We can
-	 ignore file names coming from already-expanded CUs.  */
-
-      for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-	{
-	  if (per_cu->v.quick->compunit_symtab)
-	    {
-	      void **slot = htab_find_slot (visited.get (),
-					    per_cu->v.quick->file_names,
-					    INSERT);
-
-	      *slot = per_cu->v.quick->file_names;
-	    }
-	}
-
-      for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-	{
-	  /* We only need to look at symtabs not already expanded.  */
-	  if (per_cu->v.quick->compunit_symtab)
-	    continue;
-
-	  quick_file_names *file_data = dw2_get_file_names (per_cu);
-	  if (file_data == NULL)
-	    continue;
-
-	  void **slot = htab_find_slot (visited.get (), file_data, INSERT);
-	  if (*slot)
-	    {
-	      /* Already visited.  */
-	      continue;
-	    }
-	  *slot = file_data;
-
-	  for (int j = 0; j < file_data->num_file_names; ++j)
-	    {
-	      const char *filename = file_data->file_names[j];
-	      dwarf2_per_objfile->filenames_cache->seen (filename);
-	    }
-	}
-    }
-
-  dwarf2_per_objfile->filenames_cache->traverse ([&] (const char *filename)
-    {
-      gdb::unique_xmalloc_ptr<char> this_real_name;
-
-      if (need_fullname)
-	this_real_name = gdb_realpath (filename);
-      (*fun) (filename, this_real_name.get (), data);
-    });
-}
-
-static int
-dw2_has_symbols (struct objfile *objfile)
-{
-  return 1;
-}
-
-const struct quick_symbol_functions dwarf2_gdb_index_functions =
-{
-  dw2_has_symbols,
-  dw2_find_last_source_symtab,
-  dw2_forget_cached_source_info,
-  dw2_map_symtabs_matching_filename,
-  dw2_lookup_symbol,
-  dw2_print_stats,
-  dw2_dump,
-  dw2_expand_symtabs_for_function,
-  dw2_expand_all_symtabs,
-  dw2_expand_symtabs_with_fullname,
-  dw2_map_matching_symbols,
-  dw2_expand_symtabs_matching,
-  dw2_find_pc_sect_compunit_symtab,
-  NULL,
-  dw2_map_symbol_filenames
-};
-
-/* DWARF-5 debug_names reader.  */
-
-/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension.  */
-static const gdb_byte dwarf5_augmentation[] = { 'G', 'D', 'B', 0 };
-
-/* A helper function that reads the .debug_names section in SECTION
-   and fills in MAP.  FILENAME is the name of the file containing the
-   section; it is used for error reporting.
-
-   Returns true if all went well, false otherwise.  */
-
-static bool
-read_debug_names_from_section (struct objfile *objfile,
-			       const char *filename,
-			       struct dwarf2_section_info *section,
-			       mapped_debug_names &map)
-{
-  if (dwarf2_section_empty_p (section))
-    return false;
-
-  /* Older elfutils strip versions could keep the section in the main
-     executable while splitting it for the separate debug info file.  */
-  if ((get_section_flags (section) & SEC_HAS_CONTENTS) == 0)
-    return false;
-
-  dwarf2_read_section (objfile, section);
-
-  map.dwarf5_byte_order = gdbarch_byte_order (get_objfile_arch (objfile));
-
-  const gdb_byte *addr = section->buffer;
-
-  bfd *const abfd = get_section_bfd_owner (section);
-
-  unsigned int bytes_read;
-  LONGEST length = read_initial_length (abfd, addr, &bytes_read);
-  addr += bytes_read;
-
-  map.dwarf5_is_dwarf64 = bytes_read != 4;
-  map.offset_size = map.dwarf5_is_dwarf64 ? 8 : 4;
-  if (bytes_read + length != section->size)
-    {
-      /* There may be multiple per-CU indices.  */
-      warning (_("Section .debug_names in %s length %s does not match "
-		 "section length %s, ignoring .debug_names."),
-	       filename, plongest (bytes_read + length),
-	       pulongest (section->size));
-      return false;
-    }
-
-  /* The version number.  */
-  uint16_t version = read_2_bytes (abfd, addr);
-  addr += 2;
-  if (version != 5)
-    {
-      warning (_("Section .debug_names in %s has unsupported version %d, "
-		 "ignoring .debug_names."),
-	       filename, version);
-      return false;
-    }
-
-  /* Padding.  */
-  uint16_t padding = read_2_bytes (abfd, addr);
-  addr += 2;
-  if (padding != 0)
-    {
-      warning (_("Section .debug_names in %s has unsupported padding %d, "
-		 "ignoring .debug_names."),
-	       filename, padding);
-      return false;
-    }
-
-  /* comp_unit_count - The number of CUs in the CU list.  */
-  map.cu_count = read_4_bytes (abfd, addr);
-  addr += 4;
-
-  /* local_type_unit_count - The number of TUs in the local TU
-     list.  */
-  map.tu_count = read_4_bytes (abfd, addr);
-  addr += 4;
-
-  /* foreign_type_unit_count - The number of TUs in the foreign TU
-     list.  */
-  uint32_t foreign_tu_count = read_4_bytes (abfd, addr);
-  addr += 4;
-  if (foreign_tu_count != 0)
-    {
-      warning (_("Section .debug_names in %s has unsupported %lu foreign TUs, "
-		 "ignoring .debug_names."),
-	       filename, static_cast<unsigned long> (foreign_tu_count));
-      return false;
-    }
-
-  /* bucket_count - The number of hash buckets in the hash lookup
-     table.  */
-  map.bucket_count = read_4_bytes (abfd, addr);
-  addr += 4;
-
-  /* name_count - The number of unique names in the index.  */
-  map.name_count = read_4_bytes (abfd, addr);
-  addr += 4;
-
-  /* abbrev_table_size - The size in bytes of the abbreviations
-     table.  */
-  uint32_t abbrev_table_size = read_4_bytes (abfd, addr);
-  addr += 4;
-
-  /* augmentation_string_size - The size in bytes of the augmentation
-     string.  This value is rounded up to a multiple of 4.  */
-  uint32_t augmentation_string_size = read_4_bytes (abfd, addr);
-  addr += 4;
-  map.augmentation_is_gdb = ((augmentation_string_size
-			      == sizeof (dwarf5_augmentation))
-			     && memcmp (addr, dwarf5_augmentation,
-					sizeof (dwarf5_augmentation)) == 0);
-  augmentation_string_size += (-augmentation_string_size) & 3;
-  addr += augmentation_string_size;
-
-  /* List of CUs */
-  map.cu_table_reordered = addr;
-  addr += map.cu_count * map.offset_size;
-
-  /* List of Local TUs */
-  map.tu_table_reordered = addr;
-  addr += map.tu_count * map.offset_size;
-
-  /* Hash Lookup Table */
-  map.bucket_table_reordered = reinterpret_cast<const uint32_t *> (addr);
-  addr += map.bucket_count * 4;
-  map.hash_table_reordered = reinterpret_cast<const uint32_t *> (addr);
-  addr += map.name_count * 4;
-
-  /* Name Table */
-  map.name_table_string_offs_reordered = addr;
-  addr += map.name_count * map.offset_size;
-  map.name_table_entry_offs_reordered = addr;
-  addr += map.name_count * map.offset_size;
-
-  const gdb_byte *abbrev_table_start = addr;
-  for (;;)
-    {
-      const ULONGEST index_num = read_unsigned_leb128 (abfd, addr, &bytes_read);
-      addr += bytes_read;
-      if (index_num == 0)
-	break;
-
-      const auto insertpair
-	= map.abbrev_map.emplace (index_num, mapped_debug_names::index_val ());
-      if (!insertpair.second)
-	{
-	  warning (_("Section .debug_names in %s has duplicate index %s, "
-		     "ignoring .debug_names."),
-		   filename, pulongest (index_num));
-	  return false;
-	}
-      mapped_debug_names::index_val &indexval = insertpair.first->second;
-      indexval.dwarf_tag = read_unsigned_leb128 (abfd, addr, &bytes_read);
-      addr += bytes_read;
-
-      for (;;)
-	{
-	  mapped_debug_names::index_val::attr attr;
-	  attr.dw_idx = read_unsigned_leb128 (abfd, addr, &bytes_read);
-	  addr += bytes_read;
-	  attr.form = read_unsigned_leb128 (abfd, addr, &bytes_read);
-	  addr += bytes_read;
-	  if (attr.form == DW_FORM_implicit_const)
-	    {
-	      attr.implicit_const = read_signed_leb128 (abfd, addr,
-							&bytes_read);
-	      addr += bytes_read;
-	    }
-	  if (attr.dw_idx == 0 && attr.form == 0)
-	    break;
-	  indexval.attr_vec.push_back (std::move (attr));
-	}
-    }
-  if (addr != abbrev_table_start + abbrev_table_size)
-    {
-      warning (_("Section .debug_names in %s has abbreviation_table "
-		 "of size %s vs. written as %u, ignoring .debug_names."),
-	       filename, plongest (addr - abbrev_table_start),
-	       abbrev_table_size);
-      return false;
-    }
-  map.entry_pool = addr;
-
-  return true;
-}
-
-/* A helper for create_cus_from_debug_names that handles the MAP's CU
-   list.  */
-
-static void
-create_cus_from_debug_names_list (struct dwarf2_per_objfile *dwarf2_per_objfile,
-				  const mapped_debug_names &map,
-				  dwarf2_section_info &section,
-				  bool is_dwz)
-{
-  sect_offset sect_off_prev;
-  for (uint32_t i = 0; i <= map.cu_count; ++i)
-    {
-      sect_offset sect_off_next;
-      if (i < map.cu_count)
-	{
-	  sect_off_next
-	    = (sect_offset) (extract_unsigned_integer
-			     (map.cu_table_reordered + i * map.offset_size,
-			      map.offset_size,
-			      map.dwarf5_byte_order));
-	}
-      else
-	sect_off_next = (sect_offset) section.size;
-      if (i >= 1)
-	{
-	  const ULONGEST length = sect_off_next - sect_off_prev;
-	  dwarf2_per_cu_data *per_cu
-	    = create_cu_from_index_list (dwarf2_per_objfile, &section, is_dwz,
-					 sect_off_prev, length);
-	  dwarf2_per_objfile->all_comp_units.push_back (per_cu);
-	}
-      sect_off_prev = sect_off_next;
-    }
-}
-
-/* Read the CU list from the mapped index, and use it to create all
-   the CU objects for this dwarf2_per_objfile.  */
-
-static void
-create_cus_from_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			     const mapped_debug_names &map,
-			     const mapped_debug_names &dwz_map)
-{
-  gdb_assert (dwarf2_per_objfile->all_comp_units.empty ());
-  dwarf2_per_objfile->all_comp_units.reserve (map.cu_count + dwz_map.cu_count);
-
-  create_cus_from_debug_names_list (dwarf2_per_objfile, map,
-				    dwarf2_per_objfile->info,
-				    false /* is_dwz */);
-
-  if (dwz_map.cu_count == 0)
-    return;
-
-  dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-  create_cus_from_debug_names_list (dwarf2_per_objfile, dwz_map, dwz->info,
-				    true /* is_dwz */);
-}
-
-/* Read .debug_names.  If everything went ok, initialize the "quick"
-   elements of all the CUs and return true.  Otherwise, return false.  */
-
-static bool
-dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  std::unique_ptr<mapped_debug_names> map
-    (new mapped_debug_names (dwarf2_per_objfile));
-  mapped_debug_names dwz_map (dwarf2_per_objfile);
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  if (!read_debug_names_from_section (objfile, objfile_name (objfile),
-				      &dwarf2_per_objfile->debug_names,
-				      *map))
-    return false;
-
-  /* Don't use the index if it's empty.  */
-  if (map->name_count == 0)
-    return false;
-
-  /* If there is a .dwz file, read it so we can get its CU list as
-     well.  */
-  dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-  if (dwz != NULL)
-    {
-      if (!read_debug_names_from_section (objfile,
-					  bfd_get_filename (dwz->dwz_bfd.get ()),
-					  &dwz->debug_names, dwz_map))
-	{
-	  warning (_("could not read '.debug_names' section from %s; skipping"),
-		   bfd_get_filename (dwz->dwz_bfd.get ()));
-	  return false;
-	}
-    }
-
-  create_cus_from_debug_names (dwarf2_per_objfile, *map, dwz_map);
-
-  if (map->tu_count != 0)
-    {
-      /* We can only handle a single .debug_types when we have an
-	 index.  */
-      if (dwarf2_per_objfile->types.size () != 1)
-	return false;
-
-      dwarf2_section_info *section = &dwarf2_per_objfile->types[0];
-
-      create_signatured_type_table_from_debug_names
-	(dwarf2_per_objfile, *map, section, &dwarf2_per_objfile->abbrev);
-    }
-
-  create_addrmap_from_aranges (dwarf2_per_objfile,
-			       &dwarf2_per_objfile->debug_aranges);
-
-  dwarf2_per_objfile->debug_names_table = std::move (map);
-  dwarf2_per_objfile->using_index = 1;
-  dwarf2_per_objfile->quick_file_names_table =
-    create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ());
-
-  return true;
-}
-
-/* Type used to manage iterating over all CUs looking for a symbol for
-   .debug_names.  */
-
-class dw2_debug_names_iterator
-{
-public:
-  dw2_debug_names_iterator (const mapped_debug_names &map,
-			    gdb::optional<block_enum> block_index,
-			    domain_enum domain,
-			    const char *name)
-    : m_map (map), m_block_index (block_index), m_domain (domain),
-      m_addr (find_vec_in_debug_names (map, name))
-  {}
-
-  dw2_debug_names_iterator (const mapped_debug_names &map,
-			    search_domain search, uint32_t namei)
-    : m_map (map),
-      m_search (search),
-      m_addr (find_vec_in_debug_names (map, namei))
-  {}
-
-  dw2_debug_names_iterator (const mapped_debug_names &map,
-			    block_enum block_index, domain_enum domain,
-			    uint32_t namei)
-    : m_map (map), m_block_index (block_index), m_domain (domain),
-      m_addr (find_vec_in_debug_names (map, namei))
-  {}
-
-  /* Return the next matching CU or NULL if there are no more.  */
-  dwarf2_per_cu_data *next ();
-
-private:
-  static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map,
-						  const char *name);
-  static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map,
-						  uint32_t namei);
-
-  /* The internalized form of .debug_names.  */
-  const mapped_debug_names &m_map;
-
-  /* If set, only look for symbols that match that block.  Valid values are
-     GLOBAL_BLOCK and STATIC_BLOCK.  */
-  const gdb::optional<block_enum> m_block_index;
-
-  /* The kind of symbol we're looking for.  */
-  const domain_enum m_domain = UNDEF_DOMAIN;
-  const search_domain m_search = ALL_DOMAIN;
-
-  /* The list of CUs from the index entry of the symbol, or NULL if
-     not found.  */
-  const gdb_byte *m_addr;
-};
-
-const char *
-mapped_debug_names::namei_to_name (uint32_t namei) const
-{
-  const ULONGEST namei_string_offs
-    = extract_unsigned_integer ((name_table_string_offs_reordered
-				 + namei * offset_size),
-				offset_size,
-				dwarf5_byte_order);
-  return read_indirect_string_at_offset
-    (dwarf2_per_objfile, dwarf2_per_objfile->objfile->obfd, namei_string_offs);
-}
-
-/* Find a slot in .debug_names for the object named NAME.  If NAME is
-   found, return pointer to its pool data.  If NAME cannot be found,
-   return NULL.  */
-
-const gdb_byte *
-dw2_debug_names_iterator::find_vec_in_debug_names
-  (const mapped_debug_names &map, const char *name)
-{
-  int (*cmp) (const char *, const char *);
-
-  gdb::unique_xmalloc_ptr<char> without_params;
-  if (current_language->la_language == language_cplus
-      || current_language->la_language == language_fortran
-      || current_language->la_language == language_d)
-    {
-      /* NAME is already canonical.  Drop any qualifiers as
-	 .debug_names does not contain any.  */
-
-      if (strchr (name, '(') != NULL)
-	{
-	  without_params = cp_remove_params (name);
-	  if (without_params != NULL)
-	    name = without_params.get ();
-	}
-    }
-
-  cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp);
-
-  const uint32_t full_hash = dwarf5_djb_hash (name);
-  uint32_t namei
-    = extract_unsigned_integer (reinterpret_cast<const gdb_byte *>
-				(map.bucket_table_reordered
-				 + (full_hash % map.bucket_count)), 4,
-				map.dwarf5_byte_order);
-  if (namei == 0)
-    return NULL;
-  --namei;
-  if (namei >= map.name_count)
-    {
-      complaint (_("Wrong .debug_names with name index %u but name_count=%u "
-		   "[in module %s]"),
-		 namei, map.name_count,
-		 objfile_name (map.dwarf2_per_objfile->objfile));
-      return NULL;
-    }
-
-  for (;;)
-    {
-      const uint32_t namei_full_hash
-	= extract_unsigned_integer (reinterpret_cast<const gdb_byte *>
-				    (map.hash_table_reordered + namei), 4,
-				    map.dwarf5_byte_order);
-      if (full_hash % map.bucket_count != namei_full_hash % map.bucket_count)
-	return NULL;
-
-      if (full_hash == namei_full_hash)
-	{
-	  const char *const namei_string = map.namei_to_name (namei);
-
-#if 0 /* An expensive sanity check.  */
-	  if (namei_full_hash != dwarf5_djb_hash (namei_string))
-	    {
-	      complaint (_("Wrong .debug_names hash for string at index %u "
-			   "[in module %s]"),
-			 namei, objfile_name (dwarf2_per_objfile->objfile));
-	      return NULL;
-	    }
-#endif
-
-	  if (cmp (namei_string, name) == 0)
-	    {
-	      const ULONGEST namei_entry_offs
-		= extract_unsigned_integer ((map.name_table_entry_offs_reordered
-					     + namei * map.offset_size),
-					    map.offset_size, map.dwarf5_byte_order);
-	      return map.entry_pool + namei_entry_offs;
-	    }
-	}
-
-      ++namei;
-      if (namei >= map.name_count)
-	return NULL;
-    }
-}
-
-const gdb_byte *
-dw2_debug_names_iterator::find_vec_in_debug_names
-  (const mapped_debug_names &map, uint32_t namei)
-{
-  if (namei >= map.name_count)
-    {
-      complaint (_("Wrong .debug_names with name index %u but name_count=%u "
-		   "[in module %s]"),
-		 namei, map.name_count,
-		 objfile_name (map.dwarf2_per_objfile->objfile));
-      return NULL;
-    }
-
-  const ULONGEST namei_entry_offs
-    = extract_unsigned_integer ((map.name_table_entry_offs_reordered
-				 + namei * map.offset_size),
-				map.offset_size, map.dwarf5_byte_order);
-  return map.entry_pool + namei_entry_offs;
-}
-
-/* See dw2_debug_names_iterator.  */
-
-dwarf2_per_cu_data *
-dw2_debug_names_iterator::next ()
-{
-  if (m_addr == NULL)
-    return NULL;
-
-  struct dwarf2_per_objfile *dwarf2_per_objfile = m_map.dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  bfd *const abfd = objfile->obfd;
-
- again:
-
-  unsigned int bytes_read;
-  const ULONGEST abbrev = read_unsigned_leb128 (abfd, m_addr, &bytes_read);
-  m_addr += bytes_read;
-  if (abbrev == 0)
-    return NULL;
-
-  const auto indexval_it = m_map.abbrev_map.find (abbrev);
-  if (indexval_it == m_map.abbrev_map.cend ())
-    {
-      complaint (_("Wrong .debug_names undefined abbrev code %s "
-		   "[in module %s]"),
-		 pulongest (abbrev), objfile_name (objfile));
-      return NULL;
-    }
-  const mapped_debug_names::index_val &indexval = indexval_it->second;
-  enum class symbol_linkage {
-    unknown,
-    static_,
-    extern_,
-  } symbol_linkage_ = symbol_linkage::unknown;
-  dwarf2_per_cu_data *per_cu = NULL;
-  for (const mapped_debug_names::index_val::attr &attr : indexval.attr_vec)
-    {
-      ULONGEST ull;
-      switch (attr.form)
-	{
-	case DW_FORM_implicit_const:
-	  ull = attr.implicit_const;
-	  break;
-	case DW_FORM_flag_present:
-	  ull = 1;
-	  break;
-	case DW_FORM_udata:
-	  ull = read_unsigned_leb128 (abfd, m_addr, &bytes_read);
-	  m_addr += bytes_read;
-	  break;
-	default:
-	  complaint (_("Unsupported .debug_names form %s [in module %s]"),
-		     dwarf_form_name (attr.form),
-		     objfile_name (objfile));
-	  return NULL;
-	}
-      switch (attr.dw_idx)
-	{
-	case DW_IDX_compile_unit:
-	  /* Don't crash on bad data.  */
-	  if (ull >= dwarf2_per_objfile->all_comp_units.size ())
-	    {
-	      complaint (_(".debug_names entry has bad CU index %s"
-			   " [in module %s]"),
-			 pulongest (ull),
-			 objfile_name (dwarf2_per_objfile->objfile));
-	      continue;
-	    }
-	  per_cu = dwarf2_per_objfile->get_cutu (ull);
-	  break;
-	case DW_IDX_type_unit:
-	  /* Don't crash on bad data.  */
-	  if (ull >= dwarf2_per_objfile->all_type_units.size ())
-	    {
-	      complaint (_(".debug_names entry has bad TU index %s"
-			   " [in module %s]"),
-			 pulongest (ull),
-			 objfile_name (dwarf2_per_objfile->objfile));
-	      continue;
-	    }
-	  per_cu = &dwarf2_per_objfile->get_tu (ull)->per_cu;
-	  break;
-	case DW_IDX_GNU_internal:
-	  if (!m_map.augmentation_is_gdb)
-	    break;
-	  symbol_linkage_ = symbol_linkage::static_;
-	  break;
-	case DW_IDX_GNU_external:
-	  if (!m_map.augmentation_is_gdb)
-	    break;
-	  symbol_linkage_ = symbol_linkage::extern_;
-	  break;
-	}
-    }
-
-  /* Skip if already read in.  */
-  if (per_cu->v.quick->compunit_symtab)
-    goto again;
-
-  /* Check static vs global.  */
-  if (symbol_linkage_ != symbol_linkage::unknown && m_block_index.has_value ())
-    {
-	const bool want_static = *m_block_index == STATIC_BLOCK;
-	const bool symbol_is_static =
-	  symbol_linkage_ == symbol_linkage::static_;
-	if (want_static != symbol_is_static)
-	  goto again;
-    }
-
-  /* Match dw2_symtab_iter_next, symbol_kind
-     and debug_names::psymbol_tag.  */
-  switch (m_domain)
-    {
-    case VAR_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_variable:
-	case DW_TAG_subprogram:
-	/* Some types are also in VAR_DOMAIN.  */
-	case DW_TAG_typedef:
-	case DW_TAG_structure_type:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    case STRUCT_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_typedef:
-	case DW_TAG_structure_type:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    case LABEL_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case 0:
-	case DW_TAG_variable:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    case MODULE_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_module:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    default:
-      break;
-    }
-
-  /* Match dw2_expand_symtabs_matching, symbol_kind and
-     debug_names::psymbol_tag.  */
-  switch (m_search)
-    {
-    case VARIABLES_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_variable:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    case FUNCTIONS_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_subprogram:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    case TYPES_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_typedef:
-	case DW_TAG_structure_type:
-	  break;
-	default:
-	  goto again;
-	}
-      break;
-    case MODULES_DOMAIN:
-      switch (indexval.dwarf_tag)
-	{
-	case DW_TAG_module:
-	  break;
-	default:
-	  goto again;
-	}
-    default:
-      break;
-    }
-
-  return per_cu;
-}
-
-static struct compunit_symtab *
-dw2_debug_names_lookup_symbol (struct objfile *objfile, block_enum block_index,
-			       const char *name, domain_enum domain)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  const auto &mapp = dwarf2_per_objfile->debug_names_table;
-  if (!mapp)
-    {
-      /* index is NULL if OBJF_READNOW.  */
-      return NULL;
-    }
-  const auto &map = *mapp;
-
-  dw2_debug_names_iterator iter (map, block_index, domain, name);
-
-  struct compunit_symtab *stab_best = NULL;
-  struct dwarf2_per_cu_data *per_cu;
-  while ((per_cu = iter.next ()) != NULL)
-    {
-      struct symbol *sym, *with_opaque = NULL;
-      struct compunit_symtab *stab = dw2_instantiate_symtab (per_cu, false);
-      const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
-      const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
-      sym = block_find_symbol (block, name, domain,
-			       block_find_non_opaque_type_preferred,
-			       &with_opaque);
-
-      /* Some caution must be observed with overloaded functions and
-	 methods, since the index will not contain any overload
-	 information (but NAME might contain it).  */
-
-      if (sym != NULL
-	  && strcmp_iw (sym->search_name (), name) == 0)
-	return stab;
-      if (with_opaque != NULL
-	  && strcmp_iw (with_opaque->search_name (), name) == 0)
-	stab_best = stab;
-
-      /* Keep looking through other CUs.  */
-    }
-
-  return stab_best;
-}
-
-/* This dumps minimal information about .debug_names.  It is called
-   via "mt print objfiles".  The gdb.dwarf2/gdb-index.exp testcase
-   uses this to verify that .debug_names has been loaded.  */
-
-static void
-dw2_debug_names_dump (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  gdb_assert (dwarf2_per_objfile->using_index);
-  printf_filtered (".debug_names:");
-  if (dwarf2_per_objfile->debug_names_table)
-    printf_filtered (" exists\n");
-  else
-    printf_filtered (" faked for \"readnow\"\n");
-  printf_filtered ("\n");
-}
-
-static void
-dw2_debug_names_expand_symtabs_for_function (struct objfile *objfile,
-					     const char *func_name)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* dwarf2_per_objfile->debug_names_table is NULL if OBJF_READNOW.  */
-  if (dwarf2_per_objfile->debug_names_table)
-    {
-      const mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table;
-
-      dw2_debug_names_iterator iter (map, {}, VAR_DOMAIN, func_name);
-
-      struct dwarf2_per_cu_data *per_cu;
-      while ((per_cu = iter.next ()) != NULL)
-	dw2_instantiate_symtab (per_cu, false);
-    }
-}
-
-static void
-dw2_debug_names_map_matching_symbols
-  (struct objfile *objfile,
-   const lookup_name_info &name, domain_enum domain,
-   int global,
-   gdb::function_view<symbol_found_callback_ftype> callback,
-   symbol_compare_ftype *ordered_compare)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* debug_names_table is NULL if OBJF_READNOW.  */
-  if (!dwarf2_per_objfile->debug_names_table)
-    return;
-
-  mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table;
-  const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
-
-  const char *match_name = name.ada ().lookup_name ().c_str ();
-  auto matcher = [&] (const char *symname)
-    {
-      if (ordered_compare == nullptr)
-	return true;
-      return ordered_compare (symname, match_name) == 0;
-    };
-
-  dw2_expand_symtabs_matching_symbol (map, name, matcher, ALL_DOMAIN,
-				      [&] (offset_type namei)
-    {
-      /* The name was matched, now expand corresponding CUs that were
-	 marked.  */
-      dw2_debug_names_iterator iter (map, block_kind, domain, namei);
-
-      struct dwarf2_per_cu_data *per_cu;
-      while ((per_cu = iter.next ()) != NULL)
-	dw2_expand_symtabs_matching_one (per_cu, nullptr, nullptr);
-      return true;
-    });
-
-  /* It's a shame we couldn't do this inside the
-     dw2_expand_symtabs_matching_symbol callback, but that skips CUs
-     that have already been expanded.  Instead, this loop matches what
-     the psymtab code does.  */
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      struct compunit_symtab *cust = per_cu->v.quick->compunit_symtab;
-      if (cust != nullptr)
-	{
-	  const struct block *block
-	    = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind);
-	  if (!iterate_over_symbols_terminated (block, name,
-						domain, callback))
-	    break;
-	}
-    }
-}
-
-static void
-dw2_debug_names_expand_symtabs_matching
-  (struct objfile *objfile,
-   gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
-   const lookup_name_info &lookup_name,
-   gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
-   gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
-   enum search_domain kind)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* debug_names_table is NULL if OBJF_READNOW.  */
-  if (!dwarf2_per_objfile->debug_names_table)
-    return;
-
-  dw_expand_symtabs_matching_file_matcher (dwarf2_per_objfile, file_matcher);
-
-  mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table;
-
-  dw2_expand_symtabs_matching_symbol (map, lookup_name,
-				      symbol_matcher,
-				      kind, [&] (offset_type namei)
-    {
-      /* The name was matched, now expand corresponding CUs that were
-	 marked.  */
-      dw2_debug_names_iterator iter (map, kind, namei);
-
-      struct dwarf2_per_cu_data *per_cu;
-      while ((per_cu = iter.next ()) != NULL)
-	dw2_expand_symtabs_matching_one (per_cu, file_matcher,
-					 expansion_notify);
-      return true;
-    });
-}
-
-const struct quick_symbol_functions dwarf2_debug_names_functions =
-{
-  dw2_has_symbols,
-  dw2_find_last_source_symtab,
-  dw2_forget_cached_source_info,
-  dw2_map_symtabs_matching_filename,
-  dw2_debug_names_lookup_symbol,
-  dw2_print_stats,
-  dw2_debug_names_dump,
-  dw2_debug_names_expand_symtabs_for_function,
-  dw2_expand_all_symtabs,
-  dw2_expand_symtabs_with_fullname,
-  dw2_debug_names_map_matching_symbols,
-  dw2_debug_names_expand_symtabs_matching,
-  dw2_find_pc_sect_compunit_symtab,
-  NULL,
-  dw2_map_symbol_filenames
-};
-
-/* Get the content of the .gdb_index section of OBJ.  SECTION_OWNER should point
-   to either a dwarf2_per_objfile or dwz_file object.  */
-
-template <typename T>
-static gdb::array_view<const gdb_byte>
-get_gdb_index_contents_from_section (objfile *obj, T *section_owner)
-{
-  dwarf2_section_info *section = &section_owner->gdb_index;
-
-  if (dwarf2_section_empty_p (section))
-    return {};
-
-  /* Older elfutils strip versions could keep the section in the main
-     executable while splitting it for the separate debug info file.  */
-  if ((get_section_flags (section) & SEC_HAS_CONTENTS) == 0)
-    return {};
-
-  dwarf2_read_section (obj, section);
-
-  /* dwarf2_section_info::size is a bfd_size_type, while
-     gdb::array_view works with size_t.  On 32-bit hosts, with
-     --enable-64-bit-bfd, bfd_size_type is a 64-bit type, while size_t
-     is 32-bit.  So we need an explicit narrowing conversion here.
-     This is fine, because it's impossible to allocate or mmap an
-     array/buffer larger than what size_t can represent.  */
-  return gdb::make_array_view (section->buffer, section->size);
-}
-
-/* Lookup the index cache for the contents of the index associated to
-   DWARF2_OBJ.  */
-
-static gdb::array_view<const gdb_byte>
-get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_objfile *dwarf2_obj)
-{
-  const bfd_build_id *build_id = build_id_bfd_get (obj->obfd);
-  if (build_id == nullptr)
-    return {};
-
-  return global_index_cache.lookup_gdb_index (build_id,
-					      &dwarf2_obj->index_cache_res);
-}
-
-/* Same as the above, but for DWZ.  */
-
-static gdb::array_view<const gdb_byte>
-get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz)
-{
-  const bfd_build_id *build_id = build_id_bfd_get (dwz->dwz_bfd.get ());
-  if (build_id == nullptr)
-    return {};
-
-  return global_index_cache.lookup_gdb_index (build_id, &dwz->index_cache_res);
-}
-
-/* See symfile.h.  */
-
-bool
-dwarf2_initialize_objfile (struct objfile *objfile, dw_index_kind *index_kind)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  /* If we're about to read full symbols, don't bother with the
-     indices.  In this case we also don't care if some other debug
-     format is making psymtabs, because they are all about to be
-     expanded anyway.  */
-  if ((objfile->flags & OBJF_READNOW))
-    {
-      dwarf2_per_objfile->using_index = 1;
-      create_all_comp_units (dwarf2_per_objfile);
-      create_all_type_units (dwarf2_per_objfile);
-      dwarf2_per_objfile->quick_file_names_table
-	= create_quick_file_names_table
-	    (dwarf2_per_objfile->all_comp_units.size ());
-
-      for (int i = 0; i < (dwarf2_per_objfile->all_comp_units.size ()
-			   + dwarf2_per_objfile->all_type_units.size ()); ++i)
-	{
-	  dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i);
-
-	  per_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-					    struct dwarf2_per_cu_quick_data);
-	}
-
-      /* Return 1 so that gdb sees the "quick" functions.  However,
-	 these functions will be no-ops because we will have expanded
-	 all symtabs.  */
-      *index_kind = dw_index_kind::GDB_INDEX;
-      return true;
-    }
-
-  if (dwarf2_read_debug_names (dwarf2_per_objfile))
-    {
-      *index_kind = dw_index_kind::DEBUG_NAMES;
-      return true;
-    }
-
-  if (dwarf2_read_gdb_index (dwarf2_per_objfile,
-			     get_gdb_index_contents_from_section<struct dwarf2_per_objfile>,
-			     get_gdb_index_contents_from_section<dwz_file>))
-    {
-      *index_kind = dw_index_kind::GDB_INDEX;
-      return true;
-    }
-
-  /* ... otherwise, try to find the index in the index cache.  */
-  if (dwarf2_read_gdb_index (dwarf2_per_objfile,
-			     get_gdb_index_contents_from_cache,
-			     get_gdb_index_contents_from_cache_dwz))
-    {
-      global_index_cache.hit ();
-      *index_kind = dw_index_kind::GDB_INDEX;
-      return true;
-    }
-
-  global_index_cache.miss ();
-  return false;
-}
-
-
-
-/* Build a partial symbol table.  */
-
-void
-dwarf2_build_psymtabs (struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  init_psymbol_list (objfile, 1024);
-
-  try
-    {
-      /* This isn't really ideal: all the data we allocate on the
-	 objfile's obstack is still uselessly kept around.  However,
-	 freeing it seems unsafe.  */
-      psymtab_discarder psymtabs (objfile);
-      dwarf2_build_psymtabs_hard (dwarf2_per_objfile);
-      psymtabs.keep ();
-
-      /* (maybe) store an index in the cache.  */
-      global_index_cache.store (dwarf2_per_objfile);
-    }
-  catch (const gdb_exception_error &except)
-    {
-      exception_print (gdb_stderr, except);
-    }
-}
-
-/* Return the total length of the CU described by HEADER.  */
-
-static unsigned int
-get_cu_length (const struct comp_unit_head *header)
-{
-  return header->initial_length_size + header->length;
-}
-
-/* Return TRUE if SECT_OFF is within CU_HEADER.  */
-
-static inline bool
-offset_in_cu_p (const comp_unit_head *cu_header, sect_offset sect_off)
-{
-  sect_offset bottom = cu_header->sect_off;
-  sect_offset top = cu_header->sect_off + get_cu_length (cu_header);
-
-  return sect_off >= bottom && sect_off < top;
-}
-
-/* Find the base address of the compilation unit for range lists and
-   location lists.  It will normally be specified by DW_AT_low_pc.
-   In DWARF-3 draft 4, the base address could be overridden by
-   DW_AT_entry_pc.  It's been removed, but GCC still uses this for
-   compilation units with discontinuous ranges.  */
-
-static void
-dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  cu->base_known = 0;
-  cu->base_address = 0;
-
-  attr = dwarf2_attr (die, DW_AT_entry_pc, cu);
-  if (attr != nullptr)
-    {
-      cu->base_address = attr_value_as_address (attr);
-      cu->base_known = 1;
-    }
-  else
-    {
-      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
-      if (attr != nullptr)
-	{
-	  cu->base_address = attr_value_as_address (attr);
-	  cu->base_known = 1;
-	}
-    }
-}
-
-/* Read in the comp unit header information from the debug_info at info_ptr.
-   Use rcuh_kind::COMPILE as the default type if not known by the caller.
-   NOTE: This leaves members offset, first_die_offset to be filled in
-   by the caller.  */
-
-static const gdb_byte *
-read_comp_unit_head (struct comp_unit_head *cu_header,
-		     const gdb_byte *info_ptr,
-		     struct dwarf2_section_info *section,
-		     rcuh_kind section_kind)
-{
-  int signed_addr;
-  unsigned int bytes_read;
-  const char *filename = get_section_file_name (section);
-  bfd *abfd = get_section_bfd_owner (section);
-
-  cu_header->length = read_initial_length (abfd, info_ptr, &bytes_read);
-  cu_header->initial_length_size = bytes_read;
-  cu_header->offset_size = (bytes_read == 4) ? 4 : 8;
-  info_ptr += bytes_read;
-  cu_header->version = read_2_bytes (abfd, info_ptr);
-  if (cu_header->version < 2 || cu_header->version > 5)
-    error (_("Dwarf Error: wrong version in compilation unit header "
-	   "(is %d, should be 2, 3, 4 or 5) [in module %s]"),
-	   cu_header->version, filename);
-  info_ptr += 2;
-  if (cu_header->version < 5)
-    switch (section_kind)
-      {
-      case rcuh_kind::COMPILE:
-	cu_header->unit_type = DW_UT_compile;
-	break;
-      case rcuh_kind::TYPE:
-	cu_header->unit_type = DW_UT_type;
-	break;
-      default:
-	internal_error (__FILE__, __LINE__,
-			_("read_comp_unit_head: invalid section_kind"));
-      }
-  else
-    {
-      cu_header->unit_type = static_cast<enum dwarf_unit_type>
-						 (read_1_byte (abfd, info_ptr));
-      info_ptr += 1;
-      switch (cu_header->unit_type)
-	{
-	case DW_UT_compile:
-	case DW_UT_partial:
-	case DW_UT_skeleton:
-	case DW_UT_split_compile:
-	  if (section_kind != rcuh_kind::COMPILE)
-	    error (_("Dwarf Error: wrong unit_type in compilation unit header "
-		   "(is %s, should be %s) [in module %s]"),
-		   dwarf_unit_type_name (cu_header->unit_type),
-		   dwarf_unit_type_name (DW_UT_type), filename);
-	  break;
-	case DW_UT_type:
-	case DW_UT_split_type:
-	  section_kind = rcuh_kind::TYPE;
-	  break;
-	default:
-	  error (_("Dwarf Error: wrong unit_type in compilation unit header "
-		 "(is %#04x, should be one of: %s, %s, %s, %s or %s) "
-		 "[in module %s]"), cu_header->unit_type,
-		 dwarf_unit_type_name (DW_UT_compile),
-		 dwarf_unit_type_name (DW_UT_skeleton),
-		 dwarf_unit_type_name (DW_UT_split_compile),
-		 dwarf_unit_type_name (DW_UT_type),
-		 dwarf_unit_type_name (DW_UT_split_type), filename);
-	}
-
-      cu_header->addr_size = read_1_byte (abfd, info_ptr);
-      info_ptr += 1;
-    }
-  cu_header->abbrev_sect_off = (sect_offset) read_offset (abfd, info_ptr,
-							  cu_header,
-							  &bytes_read);
-  info_ptr += bytes_read;
-  if (cu_header->version < 5)
-    {
-      cu_header->addr_size = read_1_byte (abfd, info_ptr);
-      info_ptr += 1;
-    }
-  signed_addr = bfd_get_sign_extend_vma (abfd);
-  if (signed_addr < 0)
-    internal_error (__FILE__, __LINE__,
-		    _("read_comp_unit_head: dwarf from non elf file"));
-  cu_header->signed_addr_p = signed_addr;
-
-  bool header_has_signature = section_kind == rcuh_kind::TYPE
-    || cu_header->unit_type == DW_UT_skeleton
-    || cu_header->unit_type == DW_UT_split_compile;
-
-  if (header_has_signature)
-    {
-      cu_header->signature = read_8_bytes (abfd, info_ptr);
-      info_ptr += 8;
-    }
-
-  if (section_kind == rcuh_kind::TYPE)
-    {
-      LONGEST type_offset;
-      type_offset = read_offset (abfd, info_ptr, cu_header, &bytes_read);
-      info_ptr += bytes_read;
-      cu_header->type_cu_offset_in_tu = (cu_offset) type_offset;
-      if (to_underlying (cu_header->type_cu_offset_in_tu) != type_offset)
-	error (_("Dwarf Error: Too big type_offset in compilation unit "
-	       "header (is %s) [in module %s]"), plongest (type_offset),
-	       filename);
-    }
-
-  return info_ptr;
-}
-
-/* Helper function that returns the proper abbrev section for
-   THIS_CU.  */
-
-static struct dwarf2_section_info *
-get_abbrev_section_for_cu (struct dwarf2_per_cu_data *this_cu)
-{
-  struct dwarf2_section_info *abbrev;
-  struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile;
-
-  if (this_cu->is_dwz)
-    abbrev = &dwarf2_get_dwz_file (dwarf2_per_objfile)->abbrev;
-  else
-    abbrev = &dwarf2_per_objfile->abbrev;
-
-  return abbrev;
-}
-
-/* Subroutine of read_and_check_comp_unit_head and
-   read_and_check_type_unit_head to simplify them.
-   Perform various error checking on the header.  */
-
-static void
-error_check_comp_unit_head (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			    struct comp_unit_head *header,
-			    struct dwarf2_section_info *section,
-			    struct dwarf2_section_info *abbrev_section)
-{
-  const char *filename = get_section_file_name (section);
-
-  if (to_underlying (header->abbrev_sect_off)
-      >= dwarf2_section_size (dwarf2_per_objfile->objfile, abbrev_section))
-    error (_("Dwarf Error: bad offset (%s) in compilation unit header "
-	   "(offset %s + 6) [in module %s]"),
-	   sect_offset_str (header->abbrev_sect_off),
-	   sect_offset_str (header->sect_off),
-	   filename);
-
-  /* Cast to ULONGEST to use 64-bit arithmetic when possible to
-     avoid potential 32-bit overflow.  */
-  if (((ULONGEST) header->sect_off + get_cu_length (header))
-      > section->size)
-    error (_("Dwarf Error: bad length (0x%x) in compilation unit header "
-	   "(offset %s + 0) [in module %s]"),
-	   header->length, sect_offset_str (header->sect_off),
-	   filename);
-}
-
-/* Read in a CU/TU header and perform some basic error checking.
-   The contents of the header are stored in HEADER.
-   The result is a pointer to the start of the first DIE.  */
-
-static const gdb_byte *
-read_and_check_comp_unit_head (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			       struct comp_unit_head *header,
-			       struct dwarf2_section_info *section,
-			       struct dwarf2_section_info *abbrev_section,
-			       const gdb_byte *info_ptr,
-			       rcuh_kind section_kind)
-{
-  const gdb_byte *beg_of_comp_unit = info_ptr;
-
-  header->sect_off = (sect_offset) (beg_of_comp_unit - section->buffer);
-
-  info_ptr = read_comp_unit_head (header, info_ptr, section, section_kind);
-
-  header->first_die_cu_offset = (cu_offset) (info_ptr - beg_of_comp_unit);
-
-  error_check_comp_unit_head (dwarf2_per_objfile, header, section,
-			      abbrev_section);
-
-  return info_ptr;
-}
-
-/* Fetch the abbreviation table offset from a comp or type unit header.  */
-
-static sect_offset
-read_abbrev_offset (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		    struct dwarf2_section_info *section,
-		    sect_offset sect_off)
-{
-  bfd *abfd = get_section_bfd_owner (section);
-  const gdb_byte *info_ptr;
-  unsigned int initial_length_size, offset_size;
-  uint16_t version;
-
-  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
-  info_ptr = section->buffer + to_underlying (sect_off);
-  read_initial_length (abfd, info_ptr, &initial_length_size);
-  offset_size = initial_length_size == 4 ? 4 : 8;
-  info_ptr += initial_length_size;
-
-  version = read_2_bytes (abfd, info_ptr);
-  info_ptr += 2;
-  if (version >= 5)
-    {
-      /* Skip unit type and address size.  */
-      info_ptr += 2;
-    }
-
-  return (sect_offset) read_offset_1 (abfd, info_ptr, offset_size);
-}
-
-/* Allocate a new partial symtab for file named NAME and mark this new
-   partial symtab as being an include of PST.  */
-
-static void
-dwarf2_create_include_psymtab (const char *name, struct partial_symtab *pst,
-                               struct objfile *objfile)
-{
-  struct partial_symtab *subpst = allocate_psymtab (name, objfile);
-
-  if (!IS_ABSOLUTE_PATH (subpst->filename))
-    {
-      /* It shares objfile->objfile_obstack.  */
-      subpst->dirname = pst->dirname;
-    }
-
-  subpst->dependencies = objfile->partial_symtabs->allocate_dependencies (1);
-  subpst->dependencies[0] = pst;
-  subpst->number_of_dependencies = 1;
-
-  subpst->read_symtab = pst->read_symtab;
-
-  /* No private part is necessary for include psymtabs.  This property
-     can be used to differentiate between such include psymtabs and
-     the regular ones.  */
-  subpst->read_symtab_private = NULL;
-}
-
-/* Read the Line Number Program data and extract the list of files
-   included by the source file represented by PST.  Build an include
-   partial symtab for each of these included files.  */
-
-static void
-dwarf2_build_include_psymtabs (struct dwarf2_cu *cu,
-			       struct die_info *die,
-			       struct partial_symtab *pst)
-{
-  line_header_up lh;
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
-  if (attr != nullptr)
-    lh = dwarf_decode_line_header ((sect_offset) DW_UNSND (attr), cu);
-  if (lh == NULL)
-    return;  /* No linetable, so no includes.  */
-
-  /* NOTE: pst->dirname is DW_AT_comp_dir (if present).  Also note
-     that we pass in the raw text_low here; that is ok because we're
-     only decoding the line table to make include partial symtabs, and
-     so the addresses aren't really used.  */
-  dwarf_decode_lines (lh.get (), pst->dirname, cu, pst,
-		      pst->raw_text_low (), 1);
-}
-
-static hashval_t
-hash_signatured_type (const void *item)
-{
-  const struct signatured_type *sig_type
-    = (const struct signatured_type *) item;
-
-  /* This drops the top 32 bits of the signature, but is ok for a hash.  */
-  return sig_type->signature;
-}
-
-static int
-eq_signatured_type (const void *item_lhs, const void *item_rhs)
-{
-  const struct signatured_type *lhs = (const struct signatured_type *) item_lhs;
-  const struct signatured_type *rhs = (const struct signatured_type *) item_rhs;
-
-  return lhs->signature == rhs->signature;
-}
-
-/* Allocate a hash table for signatured types.  */
-
-static htab_t
-allocate_signatured_type_table (struct objfile *objfile)
-{
-  return htab_create_alloc_ex (41,
-			       hash_signatured_type,
-			       eq_signatured_type,
-			       NULL,
-			       &objfile->objfile_obstack,
-			       hashtab_obstack_allocate,
-			       dummy_obstack_deallocate);
-}
-
-/* A helper function to add a signatured type CU to a table.  */
-
-static int
-add_signatured_type_cu_to_table (void **slot, void *datum)
-{
-  struct signatured_type *sigt = (struct signatured_type *) *slot;
-  std::vector<signatured_type *> *all_type_units
-    = (std::vector<signatured_type *> *) datum;
-
-  all_type_units->push_back (sigt);
-
-  return 1;
-}
-
-/* A helper for create_debug_types_hash_table.  Read types from SECTION
-   and fill them into TYPES_HTAB.  It will process only type units,
-   therefore DW_UT_type.  */
-
-static void
-create_debug_type_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			      struct dwo_file *dwo_file,
-			      dwarf2_section_info *section, htab_t &types_htab,
-			      rcuh_kind section_kind)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_section_info *abbrev_section;
-  bfd *abfd;
-  const gdb_byte *info_ptr, *end_ptr;
-
-  abbrev_section = (dwo_file != NULL
-		    ? &dwo_file->sections.abbrev
-		    : &dwarf2_per_objfile->abbrev);
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog, "Reading %s for %s:\n",
-			get_section_name (section),
-			get_section_file_name (abbrev_section));
-
-  dwarf2_read_section (objfile, section);
-  info_ptr = section->buffer;
-
-  if (info_ptr == NULL)
-    return;
-
-  /* We can't set abfd until now because the section may be empty or
-     not present, in which case the bfd is unknown.  */
-  abfd = get_section_bfd_owner (section);
-
-  /* We don't use init_cutu_and_read_dies_simple, or some such, here
-     because we don't need to read any dies: the signature is in the
-     header.  */
-
-  end_ptr = info_ptr + section->size;
-  while (info_ptr < end_ptr)
-    {
-      struct signatured_type *sig_type;
-      struct dwo_unit *dwo_tu;
-      void **slot;
-      const gdb_byte *ptr = info_ptr;
-      struct comp_unit_head header;
-      unsigned int length;
-
-      sect_offset sect_off = (sect_offset) (ptr - section->buffer);
-
-      /* Initialize it due to a false compiler warning.  */
-      header.signature = -1;
-      header.type_cu_offset_in_tu = (cu_offset) -1;
-
-      /* We need to read the type's signature in order to build the hash
-	 table, but we don't need anything else just yet.  */
-
-      ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, &header, section,
-					   abbrev_section, ptr, section_kind);
-
-      length = get_cu_length (&header);
-
-      /* Skip dummy type units.  */
-      if (ptr >= info_ptr + length
-	  || peek_abbrev_code (abfd, ptr) == 0
-	  || header.unit_type != DW_UT_type)
-	{
-	  info_ptr += length;
-	  continue;
-	}
-
-      if (types_htab == NULL)
-	{
-	  if (dwo_file)
-	    types_htab = allocate_dwo_unit_table (objfile);
-	  else
-	    types_htab = allocate_signatured_type_table (objfile);
-	}
-
-      if (dwo_file)
-	{
-	  sig_type = NULL;
-	  dwo_tu = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-				   struct dwo_unit);
-	  dwo_tu->dwo_file = dwo_file;
-	  dwo_tu->signature = header.signature;
-	  dwo_tu->type_offset_in_tu = header.type_cu_offset_in_tu;
-	  dwo_tu->section = section;
-	  dwo_tu->sect_off = sect_off;
-	  dwo_tu->length = length;
-	}
-      else
-	{
-	  /* N.B.: type_offset is not usable if this type uses a DWO file.
-	     The real type_offset is in the DWO file.  */
-	  dwo_tu = NULL;
-	  sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-				     struct signatured_type);
-	  sig_type->signature = header.signature;
-	  sig_type->type_offset_in_tu = header.type_cu_offset_in_tu;
-	  sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile;
-	  sig_type->per_cu.is_debug_types = 1;
-	  sig_type->per_cu.section = section;
-	  sig_type->per_cu.sect_off = sect_off;
-	  sig_type->per_cu.length = length;
-	}
-
-      slot = htab_find_slot (types_htab,
-			     dwo_file ? (void*) dwo_tu : (void *) sig_type,
-			     INSERT);
-      gdb_assert (slot != NULL);
-      if (*slot != NULL)
-	{
-	  sect_offset dup_sect_off;
-
-	  if (dwo_file)
-	    {
-	      const struct dwo_unit *dup_tu
-		= (const struct dwo_unit *) *slot;
-
-	      dup_sect_off = dup_tu->sect_off;
-	    }
-	  else
-	    {
-	      const struct signatured_type *dup_tu
-		= (const struct signatured_type *) *slot;
-
-	      dup_sect_off = dup_tu->per_cu.sect_off;
-	    }
-
-	  complaint (_("debug type entry at offset %s is duplicate to"
-		       " the entry at offset %s, signature %s"),
-		     sect_offset_str (sect_off), sect_offset_str (dup_sect_off),
-		     hex_string (header.signature));
-	}
-      *slot = dwo_file ? (void *) dwo_tu : (void *) sig_type;
-
-      if (dwarf_read_debug > 1)
-	fprintf_unfiltered (gdb_stdlog, "  offset %s, signature %s\n",
-			    sect_offset_str (sect_off),
-			    hex_string (header.signature));
-
-      info_ptr += length;
-    }
-}
-
-/* Create the hash table of all entries in the .debug_types
-   (or .debug_types.dwo) section(s).
-   If reading a DWO file, then DWO_FILE is a pointer to the DWO file object,
-   otherwise it is NULL.
-
-   The result is a pointer to the hash table or NULL if there are no types.
-
-   Note: This function processes DWO files only, not DWP files.  */
-
-static void
-create_debug_types_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			       struct dwo_file *dwo_file,
-			       gdb::array_view<dwarf2_section_info> type_sections,
-			       htab_t &types_htab)
-{
-  for (dwarf2_section_info &section : type_sections)
-    create_debug_type_hash_table (dwarf2_per_objfile, dwo_file, &section,
-				  types_htab, rcuh_kind::TYPE);
-}
-
-/* Create the hash table of all entries in the .debug_types section,
-   and initialize all_type_units.
-   The result is zero if there is an error (e.g. missing .debug_types section),
-   otherwise non-zero.	*/
-
-static int
-create_all_type_units (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  htab_t types_htab = NULL;
-
-  create_debug_type_hash_table (dwarf2_per_objfile, NULL,
-				&dwarf2_per_objfile->info, types_htab,
-				rcuh_kind::COMPILE);
-  create_debug_types_hash_table (dwarf2_per_objfile, NULL,
-				 dwarf2_per_objfile->types, types_htab);
-  if (types_htab == NULL)
-    {
-      dwarf2_per_objfile->signatured_types = NULL;
-      return 0;
-    }
-
-  dwarf2_per_objfile->signatured_types = types_htab;
-
-  gdb_assert (dwarf2_per_objfile->all_type_units.empty ());
-  dwarf2_per_objfile->all_type_units.reserve (htab_elements (types_htab));
-
-  htab_traverse_noresize (types_htab, add_signatured_type_cu_to_table,
-			  &dwarf2_per_objfile->all_type_units);
-
-  return 1;
-}
-
-/* Add an entry for signature SIG to dwarf2_per_objfile->signatured_types.
-   If SLOT is non-NULL, it is the entry to use in the hash table.
-   Otherwise we find one.  */
-
-static struct signatured_type *
-add_type_unit (struct dwarf2_per_objfile *dwarf2_per_objfile, ULONGEST sig,
-	       void **slot)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  if (dwarf2_per_objfile->all_type_units.size ()
-      == dwarf2_per_objfile->all_type_units.capacity ())
-    ++dwarf2_per_objfile->tu_stats.nr_all_type_units_reallocs;
-
-  signatured_type *sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-					      struct signatured_type);
-
-  dwarf2_per_objfile->all_type_units.push_back (sig_type);
-  sig_type->signature = sig;
-  sig_type->per_cu.is_debug_types = 1;
-  if (dwarf2_per_objfile->using_index)
-    {
-      sig_type->per_cu.v.quick =
-	OBSTACK_ZALLOC (&objfile->objfile_obstack,
-			struct dwarf2_per_cu_quick_data);
-    }
-
-  if (slot == NULL)
-    {
-      slot = htab_find_slot (dwarf2_per_objfile->signatured_types,
-			     sig_type, INSERT);
-    }
-  gdb_assert (*slot == NULL);
-  *slot = sig_type;
-  /* The rest of sig_type must be filled in by the caller.  */
-  return sig_type;
-}
-
-/* Subroutine of lookup_dwo_signatured_type and lookup_dwp_signatured_type.
-   Fill in SIG_ENTRY with DWO_ENTRY.  */
-
-static void
-fill_in_sig_entry_from_dwo_entry (struct dwarf2_per_objfile *dwarf2_per_objfile,
-				  struct signatured_type *sig_entry,
-				  struct dwo_unit *dwo_entry)
-{
-  /* Make sure we're not clobbering something we don't expect to.  */
-  gdb_assert (! sig_entry->per_cu.queued);
-  gdb_assert (sig_entry->per_cu.cu == NULL);
-  if (dwarf2_per_objfile->using_index)
-    {
-      gdb_assert (sig_entry->per_cu.v.quick != NULL);
-      gdb_assert (sig_entry->per_cu.v.quick->compunit_symtab == NULL);
-    }
-  else
-      gdb_assert (sig_entry->per_cu.v.psymtab == NULL);
-  gdb_assert (sig_entry->signature == dwo_entry->signature);
-  gdb_assert (to_underlying (sig_entry->type_offset_in_section) == 0);
-  gdb_assert (sig_entry->type_unit_group == NULL);
-  gdb_assert (sig_entry->dwo_unit == NULL);
-
-  sig_entry->per_cu.section = dwo_entry->section;
-  sig_entry->per_cu.sect_off = dwo_entry->sect_off;
-  sig_entry->per_cu.length = dwo_entry->length;
-  sig_entry->per_cu.reading_dwo_directly = 1;
-  sig_entry->per_cu.dwarf2_per_objfile = dwarf2_per_objfile;
-  sig_entry->type_offset_in_tu = dwo_entry->type_offset_in_tu;
-  sig_entry->dwo_unit = dwo_entry;
-}
-
-/* Subroutine of lookup_signatured_type.
-   If we haven't read the TU yet, create the signatured_type data structure
-   for a TU to be read in directly from a DWO file, bypassing the stub.
-   This is the "Stay in DWO Optimization": When there is no DWP file and we're
-   using .gdb_index, then when reading a CU we want to stay in the DWO file
-   containing that CU.  Otherwise we could end up reading several other DWO
-   files (due to comdat folding) to process the transitive closure of all the
-   mentioned TUs, and that can be slow.  The current DWO file will have every
-   type signature that it needs.
-   We only do this for .gdb_index because in the psymtab case we already have
-   to read all the DWOs to build the type unit groups.  */
-
-static struct signatured_type *
-lookup_dwo_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwo_file *dwo_file;
-  struct dwo_unit find_dwo_entry, *dwo_entry;
-  struct signatured_type find_sig_entry, *sig_entry;
-  void **slot;
-
-  gdb_assert (cu->dwo_unit && dwarf2_per_objfile->using_index);
-
-  /* If TU skeletons have been removed then we may not have read in any
-     TUs yet.  */
-  if (dwarf2_per_objfile->signatured_types == NULL)
-    {
-      dwarf2_per_objfile->signatured_types
-	= allocate_signatured_type_table (objfile);
-    }
-
-  /* We only ever need to read in one copy of a signatured type.
-     Use the global signatured_types array to do our own comdat-folding
-     of types.  If this is the first time we're reading this TU, and
-     the TU has an entry in .gdb_index, replace the recorded data from
-     .gdb_index with this TU.  */
-
-  find_sig_entry.signature = sig;
-  slot = htab_find_slot (dwarf2_per_objfile->signatured_types,
-			 &find_sig_entry, INSERT);
-  sig_entry = (struct signatured_type *) *slot;
-
-  /* We can get here with the TU already read, *or* in the process of being
-     read.  Don't reassign the global entry to point to this DWO if that's
-     the case.  Also note that if the TU is already being read, it may not
-     have come from a DWO, the program may be a mix of Fission-compiled
-     code and non-Fission-compiled code.  */
-
-  /* Have we already tried to read this TU?
-     Note: sig_entry can be NULL if the skeleton TU was removed (thus it
-     needn't exist in the global table yet).  */
-  if (sig_entry != NULL && sig_entry->per_cu.tu_read)
-    return sig_entry;
-
-  /* Note: cu->dwo_unit is the dwo_unit that references this TU, not the
-     dwo_unit of the TU itself.  */
-  dwo_file = cu->dwo_unit->dwo_file;
-
-  /* Ok, this is the first time we're reading this TU.  */
-  if (dwo_file->tus == NULL)
-    return NULL;
-  find_dwo_entry.signature = sig;
-  dwo_entry = (struct dwo_unit *) htab_find (dwo_file->tus, &find_dwo_entry);
-  if (dwo_entry == NULL)
-    return NULL;
-
-  /* If the global table doesn't have an entry for this TU, add one.  */
-  if (sig_entry == NULL)
-    sig_entry = add_type_unit (dwarf2_per_objfile, sig, slot);
-
-  fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile, sig_entry, dwo_entry);
-  sig_entry->per_cu.tu_read = 1;
-  return sig_entry;
-}
-
-/* Subroutine of lookup_signatured_type.
-   Look up the type for signature SIG, and if we can't find SIG in .gdb_index
-   then try the DWP file.  If the TU stub (skeleton) has been removed then
-   it won't be in .gdb_index.  */
-
-static struct signatured_type *
-lookup_dwp_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwp_file *dwp_file = get_dwp_file (dwarf2_per_objfile);
-  struct dwo_unit *dwo_entry;
-  struct signatured_type find_sig_entry, *sig_entry;
-  void **slot;
-
-  gdb_assert (cu->dwo_unit && dwarf2_per_objfile->using_index);
-  gdb_assert (dwp_file != NULL);
-
-  /* If TU skeletons have been removed then we may not have read in any
-     TUs yet.  */
-  if (dwarf2_per_objfile->signatured_types == NULL)
-    {
-      dwarf2_per_objfile->signatured_types
-	= allocate_signatured_type_table (objfile);
-    }
-
-  find_sig_entry.signature = sig;
-  slot = htab_find_slot (dwarf2_per_objfile->signatured_types,
-			 &find_sig_entry, INSERT);
-  sig_entry = (struct signatured_type *) *slot;
-
-  /* Have we already tried to read this TU?
-     Note: sig_entry can be NULL if the skeleton TU was removed (thus it
-     needn't exist in the global table yet).  */
-  if (sig_entry != NULL)
-    return sig_entry;
-
-  if (dwp_file->tus == NULL)
-    return NULL;
-  dwo_entry = lookup_dwo_unit_in_dwp (dwarf2_per_objfile, dwp_file, NULL,
-				      sig, 1 /* is_debug_types */);
-  if (dwo_entry == NULL)
-    return NULL;
-
-  sig_entry = add_type_unit (dwarf2_per_objfile, sig, slot);
-  fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile, sig_entry, dwo_entry);
-
-  return sig_entry;
-}
-
-/* Lookup a signature based type for DW_FORM_ref_sig8.
-   Returns NULL if signature SIG is not present in the table.
-   It is up to the caller to complain about this.  */
-
-static struct signatured_type *
-lookup_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-
-  if (cu->dwo_unit
-      && dwarf2_per_objfile->using_index)
-    {
-      /* We're in a DWO/DWP file, and we're using .gdb_index.
-	 These cases require special processing.  */
-      if (get_dwp_file (dwarf2_per_objfile) == NULL)
-	return lookup_dwo_signatured_type (cu, sig);
-      else
-	return lookup_dwp_signatured_type (cu, sig);
-    }
-  else
-    {
-      struct signatured_type find_entry, *entry;
-
-      if (dwarf2_per_objfile->signatured_types == NULL)
-	return NULL;
-      find_entry.signature = sig;
-      entry = ((struct signatured_type *)
-	       htab_find (dwarf2_per_objfile->signatured_types, &find_entry));
-      return entry;
-    }
-}
-
-/* Low level DIE reading support.  */
-
-/* Initialize a die_reader_specs struct from a dwarf2_cu struct.  */
-
-static void
-init_cu_die_reader (struct die_reader_specs *reader,
-		    struct dwarf2_cu *cu,
-		    struct dwarf2_section_info *section,
-		    struct dwo_file *dwo_file,
-		    struct abbrev_table *abbrev_table)
-{
-  gdb_assert (section->readin && section->buffer != NULL);
-  reader->abfd = get_section_bfd_owner (section);
-  reader->cu = cu;
-  reader->dwo_file = dwo_file;
-  reader->die_section = section;
-  reader->buffer = section->buffer;
-  reader->buffer_end = section->buffer + section->size;
-  reader->comp_dir = NULL;
-  reader->abbrev_table = abbrev_table;
-}
-
-/* Subroutine of init_cutu_and_read_dies to simplify it.
-   Read in the rest of a CU/TU top level DIE from DWO_UNIT.
-   There's just a lot of work to do, and init_cutu_and_read_dies is big enough
-   already.
-
-   STUB_COMP_UNIT_DIE is for the stub DIE, we copy over certain attributes
-   from it to the DIE in the DWO.  If NULL we are skipping the stub.
-   STUB_COMP_DIR is similar to STUB_COMP_UNIT_DIE: When reading a TU directly
-   from the DWO file, bypassing the stub, it contains the DW_AT_comp_dir
-   attribute of the referencing CU.  At most one of STUB_COMP_UNIT_DIE and
-   STUB_COMP_DIR may be non-NULL.
-   *RESULT_READER,*RESULT_INFO_PTR,*RESULT_COMP_UNIT_DIE,*RESULT_HAS_CHILDREN
-   are filled in with the info of the DIE from the DWO file.
-   *RESULT_DWO_ABBREV_TABLE will be filled in with the abbrev table allocated
-   from the dwo.  Since *RESULT_READER references this abbrev table, it must be
-   kept around for at least as long as *RESULT_READER.
-
-   The result is non-zero if a valid (non-dummy) DIE was found.  */
-
-static int
-read_cutu_die_from_dwo (struct dwarf2_per_cu_data *this_cu,
-			struct dwo_unit *dwo_unit,
-			struct die_info *stub_comp_unit_die,
-			const char *stub_comp_dir,
-			struct die_reader_specs *result_reader,
-			const gdb_byte **result_info_ptr,
-			struct die_info **result_comp_unit_die,
-			int *result_has_children,
-			abbrev_table_up *result_dwo_abbrev_table)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_cu *cu = this_cu->cu;
-  bfd *abfd;
-  const gdb_byte *begin_info_ptr, *info_ptr;
-  struct attribute *comp_dir, *stmt_list, *low_pc, *high_pc, *ranges;
-  int i,num_extra_attrs;
-  struct dwarf2_section_info *dwo_abbrev_section;
-  struct attribute *attr;
-  struct die_info *comp_unit_die;
-
-  /* At most one of these may be provided.  */
-  gdb_assert ((stub_comp_unit_die != NULL) + (stub_comp_dir != NULL) <= 1);
-
-  /* These attributes aren't processed until later:
-     DW_AT_stmt_list, DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges.
-     DW_AT_comp_dir is used now, to find the DWO file, but it is also
-     referenced later.  However, these attributes are found in the stub
-     which we won't have later.  In order to not impose this complication
-     on the rest of the code, we read them here and copy them to the
-     DWO CU/TU die.  */
-
-  stmt_list = NULL;
-  low_pc = NULL;
-  high_pc = NULL;
-  ranges = NULL;
-  comp_dir = NULL;
-
-  if (stub_comp_unit_die != NULL)
-    {
-      /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the
-	 DWO file.  */
-      if (! this_cu->is_debug_types)
-	stmt_list = dwarf2_attr (stub_comp_unit_die, DW_AT_stmt_list, cu);
-      low_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_low_pc, cu);
-      high_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_high_pc, cu);
-      ranges = dwarf2_attr (stub_comp_unit_die, DW_AT_ranges, cu);
-      comp_dir = dwarf2_attr (stub_comp_unit_die, DW_AT_comp_dir, cu);
-
-      /* There should be a DW_AT_addr_base attribute here (if needed).
-	 We need the value before we can process DW_FORM_GNU_addr_index
-         or DW_FORM_addrx.  */
-      cu->addr_base = 0;
-      attr = dwarf2_attr (stub_comp_unit_die, DW_AT_GNU_addr_base, cu);
-      if (attr != nullptr)
-	cu->addr_base = DW_UNSND (attr);
-
-      /* There should be a DW_AT_ranges_base attribute here (if needed).
-	 We need the value before we can process DW_AT_ranges.  */
-      cu->ranges_base = 0;
-      attr = dwarf2_attr (stub_comp_unit_die, DW_AT_GNU_ranges_base, cu);
-      if (attr != nullptr)
-	cu->ranges_base = DW_UNSND (attr);
-    }
-  else if (stub_comp_dir != NULL)
-    {
-      /* Reconstruct the comp_dir attribute to simplify the code below.  */
-      comp_dir = XOBNEW (&cu->comp_unit_obstack, struct attribute);
-      comp_dir->name = DW_AT_comp_dir;
-      comp_dir->form = DW_FORM_string;
-      DW_STRING_IS_CANONICAL (comp_dir) = 0;
-      DW_STRING (comp_dir) = stub_comp_dir;
-    }
-
-  /* Set up for reading the DWO CU/TU.  */
-  cu->dwo_unit = dwo_unit;
-  dwarf2_section_info *section = dwo_unit->section;
-  dwarf2_read_section (objfile, section);
-  abfd = get_section_bfd_owner (section);
-  begin_info_ptr = info_ptr = (section->buffer
-			       + to_underlying (dwo_unit->sect_off));
-  dwo_abbrev_section = &dwo_unit->dwo_file->sections.abbrev;
-
-  if (this_cu->is_debug_types)
-    {
-      struct signatured_type *sig_type = (struct signatured_type *) this_cu;
-
-      info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile,
-						&cu->header, section,
-						dwo_abbrev_section,
-						info_ptr, rcuh_kind::TYPE);
-      /* This is not an assert because it can be caused by bad debug info.  */
-      if (sig_type->signature != cu->header.signature)
-	{
-	  error (_("Dwarf Error: signature mismatch %s vs %s while reading"
-		   " TU at offset %s [in module %s]"),
-		 hex_string (sig_type->signature),
-		 hex_string (cu->header.signature),
-		 sect_offset_str (dwo_unit->sect_off),
-		 bfd_get_filename (abfd));
-	}
-      gdb_assert (dwo_unit->sect_off == cu->header.sect_off);
-      /* For DWOs coming from DWP files, we don't know the CU length
-	 nor the type's offset in the TU until now.  */
-      dwo_unit->length = get_cu_length (&cu->header);
-      dwo_unit->type_offset_in_tu = cu->header.type_cu_offset_in_tu;
-
-      /* Establish the type offset that can be used to lookup the type.
-	 For DWO files, we don't know it until now.  */
-      sig_type->type_offset_in_section
-	= dwo_unit->sect_off + to_underlying (dwo_unit->type_offset_in_tu);
-    }
-  else
-    {
-      info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile,
-						&cu->header, section,
-						dwo_abbrev_section,
-						info_ptr, rcuh_kind::COMPILE);
-      gdb_assert (dwo_unit->sect_off == cu->header.sect_off);
-      /* For DWOs coming from DWP files, we don't know the CU length
-	 until now.  */
-      dwo_unit->length = get_cu_length (&cu->header);
-    }
-
-  *result_dwo_abbrev_table
-    = abbrev_table_read_table (dwarf2_per_objfile, dwo_abbrev_section,
-			       cu->header.abbrev_sect_off);
-  init_cu_die_reader (result_reader, cu, section, dwo_unit->dwo_file,
-		      result_dwo_abbrev_table->get ());
-
-  /* Read in the die, but leave space to copy over the attributes
-     from the stub.  This has the benefit of simplifying the rest of
-     the code - all the work to maintain the illusion of a single
-     DW_TAG_{compile,type}_unit DIE is done here.  */
-  num_extra_attrs = ((stmt_list != NULL)
-		     + (low_pc != NULL)
-		     + (high_pc != NULL)
-		     + (ranges != NULL)
-		     + (comp_dir != NULL));
-  info_ptr = read_full_die_1 (result_reader, result_comp_unit_die, info_ptr,
-			      result_has_children, num_extra_attrs);
-
-  /* Copy over the attributes from the stub to the DIE we just read in.  */
-  comp_unit_die = *result_comp_unit_die;
-  i = comp_unit_die->num_attrs;
-  if (stmt_list != NULL)
-    comp_unit_die->attrs[i++] = *stmt_list;
-  if (low_pc != NULL)
-    comp_unit_die->attrs[i++] = *low_pc;
-  if (high_pc != NULL)
-    comp_unit_die->attrs[i++] = *high_pc;
-  if (ranges != NULL)
-    comp_unit_die->attrs[i++] = *ranges;
-  if (comp_dir != NULL)
-    comp_unit_die->attrs[i++] = *comp_dir;
-  comp_unit_die->num_attrs += num_extra_attrs;
-
-  if (dwarf_die_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Read die from %s@0x%x of %s:\n",
-			  get_section_name (section),
-			  (unsigned) (begin_info_ptr - section->buffer),
-			  bfd_get_filename (abfd));
-      dump_die (comp_unit_die, dwarf_die_debug);
-    }
-
-  /* Save the comp_dir attribute.  If there is no DWP file then we'll read
-     TUs by skipping the stub and going directly to the entry in the DWO file.
-     However, skipping the stub means we won't get DW_AT_comp_dir, so we have
-     to get it via circuitous means.  Blech.  */
-  if (comp_dir != NULL)
-    result_reader->comp_dir = DW_STRING (comp_dir);
-
-  /* Skip dummy compilation units.  */
-  if (info_ptr >= begin_info_ptr + dwo_unit->length
-      || peek_abbrev_code (abfd, info_ptr) == 0)
-    return 0;
-
-  *result_info_ptr = info_ptr;
-  return 1;
-}
-
-/* Return the signature of the compile unit, if found. In DWARF 4 and before,
-   the signature is in the DW_AT_GNU_dwo_id attribute. In DWARF 5 and later, the
-   signature is part of the header.  */
-static gdb::optional<ULONGEST>
-lookup_dwo_id (struct dwarf2_cu *cu, struct die_info* comp_unit_die)
-{
-  if (cu->header.version >= 5)
-    return cu->header.signature;
-  struct attribute *attr;
-  attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_id, cu);
-  if (attr == nullptr)
-    return gdb::optional<ULONGEST> ();
-  return DW_UNSND (attr);
-}
-
-/* Subroutine of init_cutu_and_read_dies to simplify it.
-   Look up the DWO unit specified by COMP_UNIT_DIE of THIS_CU.
-   Returns NULL if the specified DWO unit cannot be found.  */
-
-static struct dwo_unit *
-lookup_dwo_unit (struct dwarf2_per_cu_data *this_cu,
-		 struct die_info *comp_unit_die)
-{
-  struct dwarf2_cu *cu = this_cu->cu;
-  struct dwo_unit *dwo_unit;
-  const char *comp_dir, *dwo_name;
-
-  gdb_assert (cu != NULL);
-
-  /* Yeah, we look dwo_name up again, but it simplifies the code.  */
-  dwo_name = dwarf2_dwo_name (comp_unit_die, cu);
-  comp_dir = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu);
-
-  if (this_cu->is_debug_types)
-    {
-      struct signatured_type *sig_type;
-
-      /* Since this_cu is the first member of struct signatured_type,
-	 we can go from a pointer to one to a pointer to the other.  */
-      sig_type = (struct signatured_type *) this_cu;
-      dwo_unit = lookup_dwo_type_unit (sig_type, dwo_name, comp_dir);
-    }
-  else
-    {
-      gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die);
-      if (!signature.has_value ())
-	error (_("Dwarf Error: missing dwo_id for dwo_name %s"
-		 " [in module %s]"),
-	       dwo_name, objfile_name (this_cu->dwarf2_per_objfile->objfile));
-      dwo_unit = lookup_dwo_comp_unit (this_cu, dwo_name, comp_dir,
-				       *signature);
-    }
-
-  return dwo_unit;
-}
-
-/* Subroutine of init_cutu_and_read_dies to simplify it.
-   See it for a description of the parameters.
-   Read a TU directly from a DWO file, bypassing the stub.  */
-
-static void
-init_tu_and_read_dwo_dies (struct dwarf2_per_cu_data *this_cu,
-			   int use_existing_cu, int keep,
-			   die_reader_func_ftype *die_reader_func,
-			   void *data)
-{
-  std::unique_ptr<dwarf2_cu> new_cu;
-  struct signatured_type *sig_type;
-  struct die_reader_specs reader;
-  const gdb_byte *info_ptr;
-  struct die_info *comp_unit_die;
-  int has_children;
-  struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile;
-
-  /* Verify we can do the following downcast, and that we have the
-     data we need.  */
-  gdb_assert (this_cu->is_debug_types && this_cu->reading_dwo_directly);
-  sig_type = (struct signatured_type *) this_cu;
-  gdb_assert (sig_type->dwo_unit != NULL);
-
-  if (use_existing_cu && this_cu->cu != NULL)
-    {
-      gdb_assert (this_cu->cu->dwo_unit == sig_type->dwo_unit);
-      /* There's no need to do the rereading_dwo_cu handling that
-	 init_cutu_and_read_dies does since we don't read the stub.  */
-    }
-  else
-    {
-      /* If !use_existing_cu, this_cu->cu must be NULL.  */
-      gdb_assert (this_cu->cu == NULL);
-      new_cu.reset (new dwarf2_cu (this_cu));
-    }
-
-  /* A future optimization, if needed, would be to use an existing
-     abbrev table.  When reading DWOs with skeletonless TUs, all the TUs
-     could share abbrev tables.  */
-
-  /* The abbreviation table used by READER, this must live at least as long as
-     READER.  */
-  abbrev_table_up dwo_abbrev_table;
-
-  if (read_cutu_die_from_dwo (this_cu, sig_type->dwo_unit,
-			      NULL /* stub_comp_unit_die */,
-			      sig_type->dwo_unit->dwo_file->comp_dir,
-			      &reader, &info_ptr,
-			      &comp_unit_die, &has_children,
-			      &dwo_abbrev_table) == 0)
-    {
-      /* Dummy die.  */
-      return;
-    }
-
-  /* All the "real" work is done here.  */
-  die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data);
-
-  /* This duplicates the code in init_cutu_and_read_dies,
-     but the alternative is making the latter more complex.
-     This function is only for the special case of using DWO files directly:
-     no point in overly complicating the general case just to handle this.  */
-  if (new_cu != NULL && keep)
-    {
-      /* Link this CU into read_in_chain.  */
-      this_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain;
-      dwarf2_per_objfile->read_in_chain = this_cu;
-      /* The chain owns it now.  */
-      new_cu.release ();
-    }
-}
-
-/* Initialize a CU (or TU) and read its DIEs.
-   If the CU defers to a DWO file, read the DWO file as well.
-
-   ABBREV_TABLE, if non-NULL, is the abbreviation table to use.
-   Otherwise the table specified in the comp unit header is read in and used.
-   This is an optimization for when we already have the abbrev table.
-
-   If USE_EXISTING_CU is non-zero, and THIS_CU->cu is non-NULL, then use it.
-   Otherwise, a new CU is allocated with xmalloc.
-
-   If KEEP is non-zero, then if we allocated a dwarf2_cu we add it to
-   read_in_chain.  Otherwise the dwarf2_cu data is freed at the end.
-
-   WARNING: If THIS_CU is a "dummy CU" (used as filler by the incremental
-   linker) then DIE_READER_FUNC will not get called.  */
-
-static void
-init_cutu_and_read_dies (struct dwarf2_per_cu_data *this_cu,
-			 struct abbrev_table *abbrev_table,
-			 int use_existing_cu, int keep,
-			 bool skip_partial,
-			 die_reader_func_ftype *die_reader_func,
-			 void *data)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_section_info *section = this_cu->section;
-  bfd *abfd = get_section_bfd_owner (section);
-  struct dwarf2_cu *cu;
-  const gdb_byte *begin_info_ptr, *info_ptr;
-  struct die_reader_specs reader;
-  struct die_info *comp_unit_die;
-  int has_children;
-  struct signatured_type *sig_type = NULL;
-  struct dwarf2_section_info *abbrev_section;
-  /* Non-zero if CU currently points to a DWO file and we need to
-     reread it.  When this happens we need to reread the skeleton die
-     before we can reread the DWO file (this only applies to CUs, not TUs).  */
-  int rereading_dwo_cu = 0;
-
-  if (dwarf_die_debug)
-    fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n",
-			this_cu->is_debug_types ? "type" : "comp",
-			sect_offset_str (this_cu->sect_off));
-
-  if (use_existing_cu)
-    gdb_assert (keep);
-
-  /* If we're reading a TU directly from a DWO file, including a virtual DWO
-     file (instead of going through the stub), short-circuit all of this.  */
-  if (this_cu->reading_dwo_directly)
-    {
-      /* Narrow down the scope of possibilities to have to understand.  */
-      gdb_assert (this_cu->is_debug_types);
-      gdb_assert (abbrev_table == NULL);
-      init_tu_and_read_dwo_dies (this_cu, use_existing_cu, keep,
-				 die_reader_func, data);
-      return;
-    }
-
-  /* This is cheap if the section is already read in.  */
-  dwarf2_read_section (objfile, section);
-
-  begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off);
-
-  abbrev_section = get_abbrev_section_for_cu (this_cu);
-
-  std::unique_ptr<dwarf2_cu> new_cu;
-  if (use_existing_cu && this_cu->cu != NULL)
-    {
-      cu = this_cu->cu;
-      /* If this CU is from a DWO file we need to start over, we need to
-	 refetch the attributes from the skeleton CU.
-	 This could be optimized by retrieving those attributes from when we
-	 were here the first time: the previous comp_unit_die was stored in
-	 comp_unit_obstack.  But there's no data yet that we need this
-	 optimization.  */
-      if (cu->dwo_unit != NULL)
-	rereading_dwo_cu = 1;
-    }
-  else
-    {
-      /* If !use_existing_cu, this_cu->cu must be NULL.  */
-      gdb_assert (this_cu->cu == NULL);
-      new_cu.reset (new dwarf2_cu (this_cu));
-      cu = new_cu.get ();
-    }
-
-  /* Get the header.  */
-  if (to_underlying (cu->header.first_die_cu_offset) != 0 && !rereading_dwo_cu)
-    {
-      /* We already have the header, there's no need to read it in again.  */
-      info_ptr += to_underlying (cu->header.first_die_cu_offset);
-    }
-  else
-    {
-      if (this_cu->is_debug_types)
-	{
-	  info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile,
-						    &cu->header, section,
-						    abbrev_section, info_ptr,
-						    rcuh_kind::TYPE);
-
-	  /* Since per_cu is the first member of struct signatured_type,
-	     we can go from a pointer to one to a pointer to the other.  */
-	  sig_type = (struct signatured_type *) this_cu;
-	  gdb_assert (sig_type->signature == cu->header.signature);
-	  gdb_assert (sig_type->type_offset_in_tu
-		      == cu->header.type_cu_offset_in_tu);
-	  gdb_assert (this_cu->sect_off == cu->header.sect_off);
-
-	  /* LENGTH has not been set yet for type units if we're
-	     using .gdb_index.  */
-	  this_cu->length = get_cu_length (&cu->header);
-
-	  /* Establish the type offset that can be used to lookup the type.  */
-	  sig_type->type_offset_in_section =
-	    this_cu->sect_off + to_underlying (sig_type->type_offset_in_tu);
-
-	  this_cu->dwarf_version = cu->header.version;
-	}
-      else
-	{
-	  info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile,
-						    &cu->header, section,
-						    abbrev_section,
-						    info_ptr,
-						    rcuh_kind::COMPILE);
-
-	  gdb_assert (this_cu->sect_off == cu->header.sect_off);
-	  gdb_assert (this_cu->length == get_cu_length (&cu->header));
-	  this_cu->dwarf_version = cu->header.version;
-	}
-    }
-
-  /* Skip dummy compilation units.  */
-  if (info_ptr >= begin_info_ptr + this_cu->length
-      || peek_abbrev_code (abfd, info_ptr) == 0)
-    return;
-
-  /* If we don't have them yet, read the abbrevs for this compilation unit.
-     And if we need to read them now, make sure they're freed when we're
-     done (own the table through ABBREV_TABLE_HOLDER).  */
-  abbrev_table_up abbrev_table_holder;
-  if (abbrev_table != NULL)
-    gdb_assert (cu->header.abbrev_sect_off == abbrev_table->sect_off);
-  else
-    {
-      abbrev_table_holder
-	= abbrev_table_read_table (dwarf2_per_objfile, abbrev_section,
-				   cu->header.abbrev_sect_off);
-      abbrev_table = abbrev_table_holder.get ();
-    }
-
-  /* Read the top level CU/TU die.  */
-  init_cu_die_reader (&reader, cu, section, NULL, abbrev_table);
-  info_ptr = read_full_die (&reader, &comp_unit_die, info_ptr, &has_children);
-
-  if (skip_partial && comp_unit_die->tag == DW_TAG_partial_unit)
-    return;
-
-  /* If we are in a DWO stub, process it and then read in the "real" CU/TU
-     from the DWO file.  read_cutu_die_from_dwo will allocate the abbreviation
-     table from the DWO file and pass the ownership over to us.  It will be
-     referenced from READER, so we must make sure to free it after we're done
-     with READER.
-
-     Note that if USE_EXISTING_OK != 0, and THIS_CU->cu already contains a
-     DWO CU, that this test will fail (the attribute will not be present).  */
-  const char *dwo_name = dwarf2_dwo_name (comp_unit_die, cu);
-  abbrev_table_up dwo_abbrev_table;
-  if (dwo_name != nullptr)
-    {
-      struct dwo_unit *dwo_unit;
-      struct die_info *dwo_comp_unit_die;
-
-      if (has_children)
-	{
-	  complaint (_("compilation unit with DW_AT_GNU_dwo_name"
-		       " has children (offset %s) [in module %s]"),
-		     sect_offset_str (this_cu->sect_off),
-		     bfd_get_filename (abfd));
-	}
-      dwo_unit = lookup_dwo_unit (this_cu, comp_unit_die);
-      if (dwo_unit != NULL)
-	{
-	  if (read_cutu_die_from_dwo (this_cu, dwo_unit,
-				      comp_unit_die, NULL,
-				      &reader, &info_ptr,
-				      &dwo_comp_unit_die, &has_children,
-				      &dwo_abbrev_table) == 0)
-	    {
-	      /* Dummy die.  */
-	      return;
-	    }
-	  comp_unit_die = dwo_comp_unit_die;
-	}
-      else
-	{
-	  /* Yikes, we couldn't find the rest of the DIE, we only have
-	     the stub.  A complaint has already been logged.  There's
-	     not much more we can do except pass on the stub DIE to
-	     die_reader_func.  We don't want to throw an error on bad
-	     debug info.  */
-	}
-    }
-
-  /* All of the above is setup for this call.  Yikes.  */
-  die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data);
-
-  /* Done, clean up.  */
-  if (new_cu != NULL && keep)
-    {
-      /* Link this CU into read_in_chain.  */
-      this_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain;
-      dwarf2_per_objfile->read_in_chain = this_cu;
-      /* The chain owns it now.  */
-      new_cu.release ();
-    }
-}
-
-/* Read CU/TU THIS_CU but do not follow DW_AT_GNU_dwo_name if present.
-   DWO_FILE, if non-NULL, is the DWO file to read (the caller is assumed
-   to have already done the lookup to find the DWO file).
-
-   The caller is required to fill in THIS_CU->section, THIS_CU->offset, and
-   THIS_CU->is_debug_types, but nothing else.
-
-   We fill in THIS_CU->length.
-
-   WARNING: If THIS_CU is a "dummy CU" (used as filler by the incremental
-   linker) then DIE_READER_FUNC will not get called.
-
-   THIS_CU->cu is always freed when done.
-   This is done in order to not leave THIS_CU->cu in a state where we have
-   to care whether it refers to the "main" CU or the DWO CU.  */
-
-static void
-init_cutu_and_read_dies_no_follow (struct dwarf2_per_cu_data *this_cu,
-				   struct dwo_file *dwo_file,
-				   die_reader_func_ftype *die_reader_func,
-				   void *data)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_section_info *section = this_cu->section;
-  bfd *abfd = get_section_bfd_owner (section);
-  struct dwarf2_section_info *abbrev_section;
-  const gdb_byte *begin_info_ptr, *info_ptr;
-  struct die_reader_specs reader;
-  struct die_info *comp_unit_die;
-  int has_children;
-
-  if (dwarf_die_debug)
-    fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n",
-			this_cu->is_debug_types ? "type" : "comp",
-			sect_offset_str (this_cu->sect_off));
-
-  gdb_assert (this_cu->cu == NULL);
-
-  abbrev_section = (dwo_file != NULL
-		    ? &dwo_file->sections.abbrev
-		    : get_abbrev_section_for_cu (this_cu));
-
-  /* This is cheap if the section is already read in.  */
-  dwarf2_read_section (objfile, section);
-
-  struct dwarf2_cu cu (this_cu);
-
-  begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off);
-  info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile,
-					    &cu.header, section,
-					    abbrev_section, info_ptr,
-					    (this_cu->is_debug_types
-					     ? rcuh_kind::TYPE
-					     : rcuh_kind::COMPILE));
-
-  this_cu->length = get_cu_length (&cu.header);
-
-  /* Skip dummy compilation units.  */
-  if (info_ptr >= begin_info_ptr + this_cu->length
-      || peek_abbrev_code (abfd, info_ptr) == 0)
-    return;
-
-  abbrev_table_up abbrev_table
-    = abbrev_table_read_table (dwarf2_per_objfile, abbrev_section,
-			       cu.header.abbrev_sect_off);
-
-  init_cu_die_reader (&reader, &cu, section, dwo_file, abbrev_table.get ());
-  info_ptr = read_full_die (&reader, &comp_unit_die, info_ptr, &has_children);
-
-  die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data);
-}
-
-/* Read a CU/TU, except that this does not look for DW_AT_GNU_dwo_name and
-   does not lookup the specified DWO file.
-   This cannot be used to read DWO files.
-
-   THIS_CU->cu is always freed when done.
-   This is done in order to not leave THIS_CU->cu in a state where we have
-   to care whether it refers to the "main" CU or the DWO CU.
-   We can revisit this if the data shows there's a performance issue.  */
-
-static void
-init_cutu_and_read_dies_simple (struct dwarf2_per_cu_data *this_cu,
-				die_reader_func_ftype *die_reader_func,
-				void *data)
-{
-  init_cutu_and_read_dies_no_follow (this_cu, NULL, die_reader_func, data);
-}
-
-/* Type Unit Groups.
-
-   Type Unit Groups are a way to collapse the set of all TUs (type units) into
-   a more manageable set.  The grouping is done by DW_AT_stmt_list entry
-   so that all types coming from the same compilation (.o file) are grouped
-   together.  A future step could be to put the types in the same symtab as
-   the CU the types ultimately came from.  */
-
-static hashval_t
-hash_type_unit_group (const void *item)
-{
-  const struct type_unit_group *tu_group
-    = (const struct type_unit_group *) item;
-
-  return hash_stmt_list_entry (&tu_group->hash);
-}
-
-static int
-eq_type_unit_group (const void *item_lhs, const void *item_rhs)
-{
-  const struct type_unit_group *lhs = (const struct type_unit_group *) item_lhs;
-  const struct type_unit_group *rhs = (const struct type_unit_group *) item_rhs;
-
-  return eq_stmt_list_entry (&lhs->hash, &rhs->hash);
-}
-
-/* Allocate a hash table for type unit groups.  */
-
-static htab_t
-allocate_type_unit_groups_table (struct objfile *objfile)
-{
-  return htab_create_alloc_ex (3,
-			       hash_type_unit_group,
-			       eq_type_unit_group,
-			       NULL,
-			       &objfile->objfile_obstack,
-			       hashtab_obstack_allocate,
-			       dummy_obstack_deallocate);
-}
-
-/* Type units that don't have DW_AT_stmt_list are grouped into their own
-   partial symtabs.  We combine several TUs per psymtab to not let the size
-   of any one psymtab grow too big.  */
-#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB (1 << 31)
-#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE 10
-
-/* Helper routine for get_type_unit_group.
-   Create the type_unit_group object used to hold one or more TUs.  */
-
-static struct type_unit_group *
-create_type_unit_group (struct dwarf2_cu *cu, sect_offset line_offset_struct)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_per_cu_data *per_cu;
-  struct type_unit_group *tu_group;
-
-  tu_group = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-			     struct type_unit_group);
-  per_cu = &tu_group->per_cu;
-  per_cu->dwarf2_per_objfile = dwarf2_per_objfile;
-
-  if (dwarf2_per_objfile->using_index)
-    {
-      per_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack,
-					struct dwarf2_per_cu_quick_data);
-    }
-  else
-    {
-      unsigned int line_offset = to_underlying (line_offset_struct);
-      struct partial_symtab *pst;
-      std::string name;
-
-      /* Give the symtab a useful name for debug purposes.  */
-      if ((line_offset & NO_STMT_LIST_TYPE_UNIT_PSYMTAB) != 0)
-	name = string_printf ("<type_units_%d>",
-			      (line_offset & ~NO_STMT_LIST_TYPE_UNIT_PSYMTAB));
-      else
-	name = string_printf ("<type_units_at_0x%x>", line_offset);
-
-      pst = create_partial_symtab (per_cu, name.c_str ());
-      pst->anonymous = 1;
-    }
-
-  tu_group->hash.dwo_unit = cu->dwo_unit;
-  tu_group->hash.line_sect_off = line_offset_struct;
-
-  return tu_group;
-}
-
-/* Look up the type_unit_group for type unit CU, and create it if necessary.
-   STMT_LIST is a DW_AT_stmt_list attribute.  */
-
-static struct type_unit_group *
-get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats;
-  struct type_unit_group *tu_group;
-  void **slot;
-  unsigned int line_offset;
-  struct type_unit_group type_unit_group_for_lookup;
-
-  if (dwarf2_per_objfile->type_unit_groups == NULL)
-    {
-      dwarf2_per_objfile->type_unit_groups =
-	allocate_type_unit_groups_table (dwarf2_per_objfile->objfile);
-    }
-
-  /* Do we need to create a new group, or can we use an existing one?  */
-
-  if (stmt_list)
-    {
-      line_offset = DW_UNSND (stmt_list);
-      ++tu_stats->nr_symtab_sharers;
-    }
-  else
-    {
-      /* Ugh, no stmt_list.  Rare, but we have to handle it.
-	 We can do various things here like create one group per TU or
-	 spread them over multiple groups to split up the expansion work.
-	 To avoid worst case scenarios (too many groups or too large groups)
-	 we, umm, group them in bunches.  */
-      line_offset = (NO_STMT_LIST_TYPE_UNIT_PSYMTAB
-		     | (tu_stats->nr_stmt_less_type_units
-			/ NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE));
-      ++tu_stats->nr_stmt_less_type_units;
-    }
-
-  type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit;
-  type_unit_group_for_lookup.hash.line_sect_off = (sect_offset) line_offset;
-  slot = htab_find_slot (dwarf2_per_objfile->type_unit_groups,
-			 &type_unit_group_for_lookup, INSERT);
-  if (*slot != NULL)
-    {
-      tu_group = (struct type_unit_group *) *slot;
-      gdb_assert (tu_group != NULL);
-    }
-  else
-    {
-      sect_offset line_offset_struct = (sect_offset) line_offset;
-      tu_group = create_type_unit_group (cu, line_offset_struct);
-      *slot = tu_group;
-      ++tu_stats->nr_symtabs;
-    }
-
-  return tu_group;
-}
-
-/* Partial symbol tables.  */
-
-/* Create a psymtab named NAME and assign it to PER_CU.
-
-   The caller must fill in the following details:
-   dirname, textlow, texthigh.  */
-
-static struct partial_symtab *
-create_partial_symtab (struct dwarf2_per_cu_data *per_cu, const char *name)
-{
-  struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile;
-  struct partial_symtab *pst;
-
-  pst = start_psymtab_common (objfile, name, 0);
-
-  pst->psymtabs_addrmap_supported = 1;
-
-  /* This is the glue that links PST into GDB's symbol API.  */
-  pst->read_symtab_private = per_cu;
-  pst->read_symtab = dwarf2_read_symtab;
-  per_cu->v.psymtab = pst;
-
-  return pst;
-}
-
-/* The DATA object passed to process_psymtab_comp_unit_reader has this
-   type.  */
-
-struct process_psymtab_comp_unit_data
-{
-  /* True if we are reading a DW_TAG_partial_unit.  */
-
-  int want_partial_unit;
-
-  /* The "pretend" language that is used if the CU doesn't declare a
-     language.  */
-
-  enum language pretend_language;
-};
-
-/* die_reader_func for process_psymtab_comp_unit.  */
-
-static void
-process_psymtab_comp_unit_reader (const struct die_reader_specs *reader,
-				  const gdb_byte *info_ptr,
-				  struct die_info *comp_unit_die,
-				  int has_children,
-				  void *data)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
-  CORE_ADDR baseaddr;
-  CORE_ADDR best_lowpc = 0, best_highpc = 0;
-  struct partial_symtab *pst;
-  enum pc_bounds_kind cu_bounds_kind;
-  const char *filename;
-  struct process_psymtab_comp_unit_data *info
-    = (struct process_psymtab_comp_unit_data *) data;
-
-  if (comp_unit_die->tag == DW_TAG_partial_unit && !info->want_partial_unit)
-    return;
-
-  gdb_assert (! per_cu->is_debug_types);
-
-  prepare_one_comp_unit (cu, comp_unit_die, info->pretend_language);
-
-  /* Allocate a new partial symbol table structure.  */
-  filename = dwarf2_string_attr (comp_unit_die, DW_AT_name, cu);
-  if (filename == NULL)
-    filename = "";
-
-  pst = create_partial_symtab (per_cu, filename);
-
-  /* This must be done before calling dwarf2_build_include_psymtabs.  */
-  pst->dirname = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu);
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  dwarf2_find_base_address (comp_unit_die, cu);
-
-  /* Possibly set the default values of LOWPC and HIGHPC from
-     `DW_AT_ranges'.  */
-  cu_bounds_kind = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc,
-					 &best_highpc, cu, pst);
-  if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc)
-    {
-      CORE_ADDR low
-	= (gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr)
-	   - baseaddr);
-      CORE_ADDR high
-	= (gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr)
-	   - baseaddr - 1);
-      /* Store the contiguous range if it is not empty; it can be
-	 empty for CUs with no code.  */
-      addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap,
-			 low, high, pst);
-    }
-
-  /* Check if comp unit has_children.
-     If so, read the rest of the partial symbols from this comp unit.
-     If not, there's no more debug_info for this comp unit.  */
-  if (has_children)
-    {
-      struct partial_die_info *first_die;
-      CORE_ADDR lowpc, highpc;
-
-      lowpc = ((CORE_ADDR) -1);
-      highpc = ((CORE_ADDR) 0);
-
-      first_die = load_partial_dies (reader, info_ptr, 1);
-
-      scan_partial_symbols (first_die, &lowpc, &highpc,
-			    cu_bounds_kind <= PC_BOUNDS_INVALID, cu);
-
-      /* If we didn't find a lowpc, set it to highpc to avoid
-	 complaints from `maint check'.	 */
-      if (lowpc == ((CORE_ADDR) -1))
-	lowpc = highpc;
-
-      /* If the compilation unit didn't have an explicit address range,
-	 then use the information extracted from its child dies.  */
-      if (cu_bounds_kind <= PC_BOUNDS_INVALID)
-	{
-	  best_lowpc = lowpc;
-	  best_highpc = highpc;
-	}
-    }
-  pst->set_text_low (gdbarch_adjust_dwarf2_addr (gdbarch,
-						 best_lowpc + baseaddr)
-		     - baseaddr);
-  pst->set_text_high (gdbarch_adjust_dwarf2_addr (gdbarch,
-						  best_highpc + baseaddr)
-		      - baseaddr);
-
-  end_psymtab_common (objfile, pst);
-
-  if (!cu->per_cu->imported_symtabs_empty ())
-    {
-      int i;
-      int len = cu->per_cu->imported_symtabs_size ();
-
-      /* Fill in 'dependencies' here; we fill in 'users' in a
-	 post-pass.  */
-      pst->number_of_dependencies = len;
-      pst->dependencies
-	= objfile->partial_symtabs->allocate_dependencies (len);
-      for (i = 0; i < len; ++i)
-	{
-	  pst->dependencies[i]
-	    = cu->per_cu->imported_symtabs->at (i)->v.psymtab;
-	}
-
-      cu->per_cu->imported_symtabs_free ();
-    }
-
-  /* Get the list of files included in the current compilation unit,
-     and build a psymtab for each of them.  */
-  dwarf2_build_include_psymtabs (cu, comp_unit_die, pst);
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"Psymtab for %s unit @%s: %s - %s"
-			", %d global, %d static syms\n",
-			per_cu->is_debug_types ? "type" : "comp",
-			sect_offset_str (per_cu->sect_off),
-			paddress (gdbarch, pst->text_low (objfile)),
-			paddress (gdbarch, pst->text_high (objfile)),
-			pst->n_global_syms, pst->n_static_syms);
-}
-
-/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
-   Process compilation unit THIS_CU for a psymtab.  */
-
-static void
-process_psymtab_comp_unit (struct dwarf2_per_cu_data *this_cu,
-			   int want_partial_unit,
-			   enum language pretend_language)
-{
-  /* If this compilation unit was already read in, free the
-     cached copy in order to read it in again.	This is
-     necessary because we skipped some symbols when we first
-     read in the compilation unit (see load_partial_dies).
-     This problem could be avoided, but the benefit is unclear.  */
-  if (this_cu->cu != NULL)
-    free_one_cached_comp_unit (this_cu);
-
-  if (this_cu->is_debug_types)
-    init_cutu_and_read_dies (this_cu, NULL, 0, 0, false,
-			     build_type_psymtabs_reader, NULL);
-  else
-    {
-      process_psymtab_comp_unit_data info;
-      info.want_partial_unit = want_partial_unit;
-      info.pretend_language = pretend_language;
-      init_cutu_and_read_dies (this_cu, NULL, 0, 0, false,
-			       process_psymtab_comp_unit_reader, &info);
-    }
-
-  /* Age out any secondary CUs.  */
-  age_cached_comp_units (this_cu->dwarf2_per_objfile);
-}
-
-/* Reader function for build_type_psymtabs.  */
-
-static void
-build_type_psymtabs_reader (const struct die_reader_specs *reader,
-			    const gdb_byte *info_ptr,
-			    struct die_info *type_unit_die,
-			    int has_children,
-			    void *data)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = reader->cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_cu *cu = reader->cu;
-  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
-  struct signatured_type *sig_type;
-  struct type_unit_group *tu_group;
-  struct attribute *attr;
-  struct partial_die_info *first_die;
-  CORE_ADDR lowpc, highpc;
-  struct partial_symtab *pst;
-
-  gdb_assert (data == NULL);
-  gdb_assert (per_cu->is_debug_types);
-  sig_type = (struct signatured_type *) per_cu;
-
-  if (! has_children)
-    return;
-
-  attr = dwarf2_attr_no_follow (type_unit_die, DW_AT_stmt_list);
-  tu_group = get_type_unit_group (cu, attr);
-
-  if (tu_group->tus == nullptr)
-    tu_group->tus = new std::vector<signatured_type *>;
-  tu_group->tus->push_back (sig_type);
-
-  prepare_one_comp_unit (cu, type_unit_die, language_minimal);
-  pst = create_partial_symtab (per_cu, "");
-  pst->anonymous = 1;
-
-  first_die = load_partial_dies (reader, info_ptr, 1);
-
-  lowpc = (CORE_ADDR) -1;
-  highpc = (CORE_ADDR) 0;
-  scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu);
-
-  end_psymtab_common (objfile, pst);
-}
-
-/* Struct used to sort TUs by their abbreviation table offset.  */
-
-struct tu_abbrev_offset
-{
-  tu_abbrev_offset (signatured_type *sig_type_, sect_offset abbrev_offset_)
-  : sig_type (sig_type_), abbrev_offset (abbrev_offset_)
-  {}
-
-  signatured_type *sig_type;
-  sect_offset abbrev_offset;
-};
-
-/* Helper routine for build_type_psymtabs_1, passed to std::sort.  */
-
-static bool
-sort_tu_by_abbrev_offset (const struct tu_abbrev_offset &a,
-			  const struct tu_abbrev_offset &b)
-{
-  return a.abbrev_offset < b.abbrev_offset;
-}
-
-/* Efficiently read all the type units.
-   This does the bulk of the work for build_type_psymtabs.
-
-   The efficiency is because we sort TUs by the abbrev table they use and
-   only read each abbrev table once.  In one program there are 200K TUs
-   sharing 8K abbrev tables.
-
-   The main purpose of this function is to support building the
-   dwarf2_per_objfile->type_unit_groups table.
-   TUs typically share the DW_AT_stmt_list of the CU they came from, so we
-   can collapse the search space by grouping them by stmt_list.
-   The savings can be significant, in the same program from above the 200K TUs
-   share 8K stmt_list tables.
-
-   FUNC is expected to call get_type_unit_group, which will create the
-   struct type_unit_group if necessary and add it to
-   dwarf2_per_objfile->type_unit_groups.  */
-
-static void
-build_type_psymtabs_1 (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats;
-  abbrev_table_up abbrev_table;
-  sect_offset abbrev_offset;
-
-  /* It's up to the caller to not call us multiple times.  */
-  gdb_assert (dwarf2_per_objfile->type_unit_groups == NULL);
-
-  if (dwarf2_per_objfile->all_type_units.empty ())
-    return;
-
-  /* TUs typically share abbrev tables, and there can be way more TUs than
-     abbrev tables.  Sort by abbrev table to reduce the number of times we
-     read each abbrev table in.
-     Alternatives are to punt or to maintain a cache of abbrev tables.
-     This is simpler and efficient enough for now.
-
-     Later we group TUs by their DW_AT_stmt_list value (as this defines the
-     symtab to use).  Typically TUs with the same abbrev offset have the same
-     stmt_list value too so in practice this should work well.
-
-     The basic algorithm here is:
-
-      sort TUs by abbrev table
-      for each TU with same abbrev table:
-	read abbrev table if first user
-	read TU top level DIE
-	  [IWBN if DWO skeletons had DW_AT_stmt_list]
-	call FUNC  */
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog, "Building type unit groups ...\n");
-
-  /* Sort in a separate table to maintain the order of all_type_units
-     for .gdb_index: TU indices directly index all_type_units.  */
-  std::vector<tu_abbrev_offset> sorted_by_abbrev;
-  sorted_by_abbrev.reserve (dwarf2_per_objfile->all_type_units.size ());
-
-  for (signatured_type *sig_type : dwarf2_per_objfile->all_type_units)
-    sorted_by_abbrev.emplace_back
-      (sig_type, read_abbrev_offset (dwarf2_per_objfile,
-				     sig_type->per_cu.section,
-				     sig_type->per_cu.sect_off));
-
-  std::sort (sorted_by_abbrev.begin (), sorted_by_abbrev.end (),
-	     sort_tu_by_abbrev_offset);
-
-  abbrev_offset = (sect_offset) ~(unsigned) 0;
-
-  for (const tu_abbrev_offset &tu : sorted_by_abbrev)
-    {
-      /* Switch to the next abbrev table if necessary.  */
-      if (abbrev_table == NULL
-	  || tu.abbrev_offset != abbrev_offset)
-	{
-	  abbrev_offset = tu.abbrev_offset;
-	  abbrev_table =
-	    abbrev_table_read_table (dwarf2_per_objfile,
-				     &dwarf2_per_objfile->abbrev,
-				     abbrev_offset);
-	  ++tu_stats->nr_uniq_abbrev_tables;
-	}
-
-      init_cutu_and_read_dies (&tu.sig_type->per_cu, abbrev_table.get (),
-			       0, 0, false, build_type_psymtabs_reader, NULL);
-    }
-}
-
-/* Print collected type unit statistics.  */
-
-static void
-print_tu_stats (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats;
-
-  fprintf_unfiltered (gdb_stdlog, "Type unit statistics:\n");
-  fprintf_unfiltered (gdb_stdlog, "  %zu TUs\n",
-		      dwarf2_per_objfile->all_type_units.size ());
-  fprintf_unfiltered (gdb_stdlog, "  %d uniq abbrev tables\n",
-		      tu_stats->nr_uniq_abbrev_tables);
-  fprintf_unfiltered (gdb_stdlog, "  %d symtabs from stmt_list entries\n",
-		      tu_stats->nr_symtabs);
-  fprintf_unfiltered (gdb_stdlog, "  %d symtab sharers\n",
-		      tu_stats->nr_symtab_sharers);
-  fprintf_unfiltered (gdb_stdlog, "  %d type units without a stmt_list\n",
-		      tu_stats->nr_stmt_less_type_units);
-  fprintf_unfiltered (gdb_stdlog, "  %d all_type_units reallocs\n",
-		      tu_stats->nr_all_type_units_reallocs);
-}
-
-/* Traversal function for build_type_psymtabs.  */
-
-static int
-build_type_psymtab_dependencies (void **slot, void *info)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = (struct dwarf2_per_objfile *) info;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct type_unit_group *tu_group = (struct type_unit_group *) *slot;
-  struct dwarf2_per_cu_data *per_cu = &tu_group->per_cu;
-  struct partial_symtab *pst = per_cu->v.psymtab;
-  int len = (tu_group->tus == nullptr) ? 0 : tu_group->tus->size ();
-  int i;
-
-  gdb_assert (len > 0);
-  gdb_assert (IS_TYPE_UNIT_GROUP (per_cu));
-
-  pst->number_of_dependencies = len;
-  pst->dependencies = objfile->partial_symtabs->allocate_dependencies (len);
-  for (i = 0; i < len; ++i)
-    {
-      struct signatured_type *iter = tu_group->tus->at (i);
-      gdb_assert (iter->per_cu.is_debug_types);
-      pst->dependencies[i] = iter->per_cu.v.psymtab;
-      iter->type_unit_group = tu_group;
-    }
-
-  delete tu_group->tus;
-  tu_group->tus = nullptr;
-
-  return 1;
-}
-
-/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
-   Build partial symbol tables for the .debug_types comp-units.  */
-
-static void
-build_type_psymtabs (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  if (! create_all_type_units (dwarf2_per_objfile))
-    return;
-
-  build_type_psymtabs_1 (dwarf2_per_objfile);
-}
-
-/* Traversal function for process_skeletonless_type_unit.
-   Read a TU in a DWO file and build partial symbols for it.  */
-
-static int
-process_skeletonless_type_unit (void **slot, void *info)
-{
-  struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = (struct dwarf2_per_objfile *) info;
-  struct signatured_type find_entry, *entry;
-
-  /* If this TU doesn't exist in the global table, add it and read it in.  */
-
-  if (dwarf2_per_objfile->signatured_types == NULL)
-    {
-      dwarf2_per_objfile->signatured_types
-	= allocate_signatured_type_table (dwarf2_per_objfile->objfile);
-    }
-
-  find_entry.signature = dwo_unit->signature;
-  slot = htab_find_slot (dwarf2_per_objfile->signatured_types, &find_entry,
-			 INSERT);
-  /* If we've already seen this type there's nothing to do.  What's happening
-     is we're doing our own version of comdat-folding here.  */
-  if (*slot != NULL)
-    return 1;
-
-  /* This does the job that create_all_type_units would have done for
-     this TU.  */
-  entry = add_type_unit (dwarf2_per_objfile, dwo_unit->signature, slot);
-  fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile, entry, dwo_unit);
-  *slot = entry;
-
-  /* This does the job that build_type_psymtabs_1 would have done.  */
-  init_cutu_and_read_dies (&entry->per_cu, NULL, 0, 0, false,
-			   build_type_psymtabs_reader, NULL);
-
-  return 1;
-}
-
-/* Traversal function for process_skeletonless_type_units.  */
-
-static int
-process_dwo_file_for_skeletonless_type_units (void **slot, void *info)
-{
-  struct dwo_file *dwo_file = (struct dwo_file *) *slot;
-
-  if (dwo_file->tus != NULL)
-    {
-      htab_traverse_noresize (dwo_file->tus,
-			      process_skeletonless_type_unit, info);
-    }
-
-  return 1;
-}
-
-/* Scan all TUs of DWO files, verifying we've processed them.
-   This is needed in case a TU was emitted without its skeleton.
-   Note: This can't be done until we know what all the DWO files are.  */
-
-static void
-process_skeletonless_type_units (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  /* Skeletonless TUs in DWP files without .gdb_index is not supported yet.  */
-  if (get_dwp_file (dwarf2_per_objfile) == NULL
-      && dwarf2_per_objfile->dwo_files != NULL)
-    {
-      htab_traverse_noresize (dwarf2_per_objfile->dwo_files.get (),
-			      process_dwo_file_for_skeletonless_type_units,
-			      dwarf2_per_objfile);
-    }
-}
-
-/* Compute the 'user' field for each psymtab in DWARF2_PER_OBJFILE.  */
-
-static void
-set_partial_user (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      struct partial_symtab *pst = per_cu->v.psymtab;
-
-      if (pst == NULL)
-	continue;
-
-      for (int j = 0; j < pst->number_of_dependencies; ++j)
-	{
-	  /* Set the 'user' field only if it is not already set.  */
-	  if (pst->dependencies[j]->user == NULL)
-	    pst->dependencies[j]->user = pst;
-	}
-    }
-}
-
-/* Build the partial symbol table by doing a quick pass through the
-   .debug_info and .debug_abbrev sections.  */
-
-static void
-dwarf2_build_psymtabs_hard (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "Building psymtabs of objfile %s ...\n",
-			  objfile_name (objfile));
-    }
-
-  dwarf2_per_objfile->reading_partial_symbols = 1;
-
-  dwarf2_read_section (objfile, &dwarf2_per_objfile->info);
-
-  /* Any cached compilation units will be linked by the per-objfile
-     read_in_chain.  Make sure to free them when we're done.  */
-  free_cached_comp_units freer (dwarf2_per_objfile);
-
-  build_type_psymtabs (dwarf2_per_objfile);
-
-  create_all_comp_units (dwarf2_per_objfile);
-
-  /* Create a temporary address map on a temporary obstack.  We later
-     copy this to the final obstack.  */
-  auto_obstack temp_obstack;
-
-  scoped_restore save_psymtabs_addrmap
-    = make_scoped_restore (&objfile->partial_symtabs->psymtabs_addrmap,
-			   addrmap_create_mutable (&temp_obstack));
-
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    process_psymtab_comp_unit (per_cu, 0, language_minimal);
-
-  /* This has to wait until we read the CUs, we need the list of DWOs.  */
-  process_skeletonless_type_units (dwarf2_per_objfile);
-
-  /* Now that all TUs have been processed we can fill in the dependencies.  */
-  if (dwarf2_per_objfile->type_unit_groups != NULL)
-    {
-      htab_traverse_noresize (dwarf2_per_objfile->type_unit_groups,
-			      build_type_psymtab_dependencies, dwarf2_per_objfile);
-    }
-
-  if (dwarf_read_debug)
-    print_tu_stats (dwarf2_per_objfile);
-
-  set_partial_user (dwarf2_per_objfile);
-
-  objfile->partial_symtabs->psymtabs_addrmap
-    = addrmap_create_fixed (objfile->partial_symtabs->psymtabs_addrmap,
-			    objfile->partial_symtabs->obstack ());
-  /* At this point we want to keep the address map.  */
-  save_psymtabs_addrmap.release ();
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog, "Done building psymtabs of %s\n",
-			objfile_name (objfile));
-}
-
-/* die_reader_func for load_partial_comp_unit.  */
-
-static void
-load_partial_comp_unit_reader (const struct die_reader_specs *reader,
-			       const gdb_byte *info_ptr,
-			       struct die_info *comp_unit_die,
-			       int has_children,
-			       void *data)
-{
-  struct dwarf2_cu *cu = reader->cu;
-
-  prepare_one_comp_unit (cu, comp_unit_die, language_minimal);
-
-  /* Check if comp unit has_children.
-     If so, read the rest of the partial symbols from this comp unit.
-     If not, there's no more debug_info for this comp unit.  */
-  if (has_children)
-    load_partial_dies (reader, info_ptr, 0);
-}
-
-/* Load the partial DIEs for a secondary CU into memory.
-   This is also used when rereading a primary CU with load_all_dies.  */
-
-static void
-load_partial_comp_unit (struct dwarf2_per_cu_data *this_cu)
-{
-  init_cutu_and_read_dies (this_cu, NULL, 1, 1, false,
-			   load_partial_comp_unit_reader, NULL);
-}
-
-static void
-read_comp_units_from_section (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			      struct dwarf2_section_info *section,
-			      struct dwarf2_section_info *abbrev_section,
-			      unsigned int is_dwz)
-{
-  const gdb_byte *info_ptr;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog, "Reading %s for %s\n",
-			get_section_name (section),
-			get_section_file_name (section));
-
-  dwarf2_read_section (objfile, section);
-
-  info_ptr = section->buffer;
-
-  while (info_ptr < section->buffer + section->size)
-    {
-      struct dwarf2_per_cu_data *this_cu;
-
-      sect_offset sect_off = (sect_offset) (info_ptr - section->buffer);
-
-      comp_unit_head cu_header;
-      read_and_check_comp_unit_head (dwarf2_per_objfile, &cu_header, section,
-				     abbrev_section, info_ptr,
-				     rcuh_kind::COMPILE);
-
-      /* Save the compilation unit for later lookup.  */
-      if (cu_header.unit_type != DW_UT_type)
-	{
-	  this_cu = XOBNEW (&objfile->objfile_obstack,
-			    struct dwarf2_per_cu_data);
-	  memset (this_cu, 0, sizeof (*this_cu));
-	}
-      else
-	{
-	  auto sig_type = XOBNEW (&objfile->objfile_obstack,
-				  struct signatured_type);
-	  memset (sig_type, 0, sizeof (*sig_type));
-	  sig_type->signature = cu_header.signature;
-	  sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
-	  this_cu = &sig_type->per_cu;
-	}
-      this_cu->is_debug_types = (cu_header.unit_type == DW_UT_type);
-      this_cu->sect_off = sect_off;
-      this_cu->length = cu_header.length + cu_header.initial_length_size;
-      this_cu->is_dwz = is_dwz;
-      this_cu->dwarf2_per_objfile = dwarf2_per_objfile;
-      this_cu->section = section;
-
-      dwarf2_per_objfile->all_comp_units.push_back (this_cu);
-
-      info_ptr = info_ptr + this_cu->length;
-    }
-}
-
-/* Create a list of all compilation units in OBJFILE.
-   This is only done for -readnow and building partial symtabs.  */
-
-static void
-create_all_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  gdb_assert (dwarf2_per_objfile->all_comp_units.empty ());
-  read_comp_units_from_section (dwarf2_per_objfile, &dwarf2_per_objfile->info,
-				&dwarf2_per_objfile->abbrev, 0);
-
-  dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-  if (dwz != NULL)
-    read_comp_units_from_section (dwarf2_per_objfile, &dwz->info, &dwz->abbrev,
-				  1);
-}
-
-/* Process all loaded DIEs for compilation unit CU, starting at
-   FIRST_DIE.  The caller should pass SET_ADDRMAP == 1 if the compilation
-   unit DIE did not have PC info (DW_AT_low_pc and DW_AT_high_pc, or
-   DW_AT_ranges).  See the comments of add_partial_subprogram on how
-   SET_ADDRMAP is used and how *LOWPC and *HIGHPC are updated.  */
-
-static void
-scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
-		      CORE_ADDR *highpc, int set_addrmap,
-		      struct dwarf2_cu *cu)
-{
-  struct partial_die_info *pdi;
-
-  /* Now, march along the PDI's, descending into ones which have
-     interesting children but skipping the children of the other ones,
-     until we reach the end of the compilation unit.  */
-
-  pdi = first_die;
-
-  while (pdi != NULL)
-    {
-      pdi->fixup (cu);
-
-      /* Anonymous namespaces or modules have no name but have interesting
-	 children, so we need to look at them.  Ditto for anonymous
-	 enums.  */
-
-      if (pdi->name != NULL || pdi->tag == DW_TAG_namespace
-	  || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type
-	  || pdi->tag == DW_TAG_imported_unit
-	  || pdi->tag == DW_TAG_inlined_subroutine)
-	{
-	  switch (pdi->tag)
-	    {
-	    case DW_TAG_subprogram:
-	    case DW_TAG_inlined_subroutine:
-	      add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu);
-	      break;
-	    case DW_TAG_constant:
-	    case DW_TAG_variable:
-	    case DW_TAG_typedef:
-	    case DW_TAG_union_type:
-	      if (!pdi->is_declaration)
-		{
-		  add_partial_symbol (pdi, cu);
-		}
-	      break;
-	    case DW_TAG_class_type:
-	    case DW_TAG_interface_type:
-	    case DW_TAG_structure_type:
-	      if (!pdi->is_declaration)
-		{
-		  add_partial_symbol (pdi, cu);
-		}
-	      if ((cu->language == language_rust
-		   || cu->language == language_cplus) && pdi->has_children)
-		scan_partial_symbols (pdi->die_child, lowpc, highpc,
-				      set_addrmap, cu);
-	      break;
-	    case DW_TAG_enumeration_type:
-	      if (!pdi->is_declaration)
-		add_partial_enumeration (pdi, cu);
-	      break;
-	    case DW_TAG_base_type:
-            case DW_TAG_subrange_type:
-	      /* File scope base type definitions are added to the partial
-	         symbol table.  */
-	      add_partial_symbol (pdi, cu);
-	      break;
-	    case DW_TAG_namespace:
-	      add_partial_namespace (pdi, lowpc, highpc, set_addrmap, cu);
-	      break;
-	    case DW_TAG_module:
-	      if (!pdi->is_declaration)
-		add_partial_module (pdi, lowpc, highpc, set_addrmap, cu);
-	      break;
-	    case DW_TAG_imported_unit:
-	      {
-		struct dwarf2_per_cu_data *per_cu;
-
-		/* For now we don't handle imported units in type units.  */
-		if (cu->per_cu->is_debug_types)
-		  {
-		    error (_("Dwarf Error: DW_TAG_imported_unit is not"
-			     " supported in type units [in module %s]"),
-			   objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-		  }
-
-		per_cu = dwarf2_find_containing_comp_unit
-			   (pdi->d.sect_off, pdi->is_dwz,
-			    cu->per_cu->dwarf2_per_objfile);
-
-		/* Go read the partial unit, if needed.  */
-		if (per_cu->v.psymtab == NULL)
-		  process_psymtab_comp_unit (per_cu, 1, cu->language);
-
-		cu->per_cu->imported_symtabs_push (per_cu);
-	      }
-	      break;
-	    case DW_TAG_imported_declaration:
-	      add_partial_symbol (pdi, cu);
-	      break;
-	    default:
-	      break;
-	    }
-	}
-
-      /* If the die has a sibling, skip to the sibling.  */
-
-      pdi = pdi->die_sibling;
-    }
-}
-
-/* Functions used to compute the fully scoped name of a partial DIE.
-
-   Normally, this is simple.  For C++, the parent DIE's fully scoped
-   name is concatenated with "::" and the partial DIE's name.
-   Enumerators are an exception; they use the scope of their parent
-   enumeration type, i.e. the name of the enumeration type is not
-   prepended to the enumerator.
-
-   There are two complexities.  One is DW_AT_specification; in this
-   case "parent" means the parent of the target of the specification,
-   instead of the direct parent of the DIE.  The other is compilers
-   which do not emit DW_TAG_namespace; in this case we try to guess
-   the fully qualified name of structure types from their members'
-   linkage names.  This must be done using the DIE's children rather
-   than the children of any DW_AT_specification target.  We only need
-   to do this for structures at the top level, i.e. if the target of
-   any DW_AT_specification (if any; otherwise the DIE itself) does not
-   have a parent.  */
-
-/* Compute the scope prefix associated with PDI's parent, in
-   compilation unit CU.  The result will be allocated on CU's
-   comp_unit_obstack, or a copy of the already allocated PDI->NAME
-   field.  NULL is returned if no prefix is necessary.  */
-static const char *
-partial_die_parent_scope (struct partial_die_info *pdi,
-			  struct dwarf2_cu *cu)
-{
-  const char *grandparent_scope;
-  struct partial_die_info *parent, *real_pdi;
-
-  /* We need to look at our parent DIE; if we have a DW_AT_specification,
-     then this means the parent of the specification DIE.  */
-
-  real_pdi = pdi;
-  while (real_pdi->has_specification)
-    {
-      auto res = find_partial_die (real_pdi->spec_offset,
-				   real_pdi->spec_is_dwz, cu);
-      real_pdi = res.pdi;
-      cu = res.cu;
-    }
-
-  parent = real_pdi->die_parent;
-  if (parent == NULL)
-    return NULL;
-
-  if (parent->scope_set)
-    return parent->scope;
-
-  parent->fixup (cu);
-
-  grandparent_scope = partial_die_parent_scope (parent, cu);
-
-  /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
-     DW_TAG_namespace DIEs with a name of "::" for the global namespace.
-     Work around this problem here.  */
-  if (cu->language == language_cplus
-      && parent->tag == DW_TAG_namespace
-      && strcmp (parent->name, "::") == 0
-      && grandparent_scope == NULL)
-    {
-      parent->scope = NULL;
-      parent->scope_set = 1;
-      return NULL;
-    }
-
-  /* Nested subroutines in Fortran get a prefix.  */
-  if (pdi->tag == DW_TAG_enumerator)
-    /* Enumerators should not get the name of the enumeration as a prefix.  */
-    parent->scope = grandparent_scope;
-  else if (parent->tag == DW_TAG_namespace
-      || parent->tag == DW_TAG_module
-      || parent->tag == DW_TAG_structure_type
-      || parent->tag == DW_TAG_class_type
-      || parent->tag == DW_TAG_interface_type
-      || parent->tag == DW_TAG_union_type
-      || parent->tag == DW_TAG_enumeration_type
-      || (cu->language == language_fortran
-	  && parent->tag == DW_TAG_subprogram
-	  && pdi->tag == DW_TAG_subprogram))
-    {
-      if (grandparent_scope == NULL)
-	parent->scope = parent->name;
-      else
-	parent->scope = typename_concat (&cu->comp_unit_obstack,
-					 grandparent_scope,
-					 parent->name, 0, cu);
-    }
-  else
-    {
-      /* FIXME drow/2004-04-01: What should we be doing with
-	 function-local names?  For partial symbols, we should probably be
-	 ignoring them.  */
-      complaint (_("unhandled containing DIE tag %s for DIE at %s"),
-		 dwarf_tag_name (parent->tag),
-		 sect_offset_str (pdi->sect_off));
-      parent->scope = grandparent_scope;
-    }
-
-  parent->scope_set = 1;
-  return parent->scope;
-}
-
-/* Return the fully scoped name associated with PDI, from compilation unit
-   CU.  The result will be allocated with malloc.  */
-
-static char *
-partial_die_full_name (struct partial_die_info *pdi,
-		       struct dwarf2_cu *cu)
-{
-  const char *parent_scope;
-
-  /* If this is a template instantiation, we can not work out the
-     template arguments from partial DIEs.  So, unfortunately, we have
-     to go through the full DIEs.  At least any work we do building
-     types here will be reused if full symbols are loaded later.  */
-  if (pdi->has_template_arguments)
-    {
-      pdi->fixup (cu);
-
-      if (pdi->name != NULL && strchr (pdi->name, '<') == NULL)
-	{
-	  struct die_info *die;
-	  struct attribute attr;
-	  struct dwarf2_cu *ref_cu = cu;
-
-	  /* DW_FORM_ref_addr is using section offset.  */
-	  attr.name = (enum dwarf_attribute) 0;
-	  attr.form = DW_FORM_ref_addr;
-	  attr.u.unsnd = to_underlying (pdi->sect_off);
-	  die = follow_die_ref (NULL, &attr, &ref_cu);
-
-	  return xstrdup (dwarf2_full_name (NULL, die, ref_cu));
-	}
-    }
-
-  parent_scope = partial_die_parent_scope (pdi, cu);
-  if (parent_scope == NULL)
-    return NULL;
-  else
-    return typename_concat (NULL, parent_scope, pdi->name, 0, cu);
-}
-
-static void
-add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  CORE_ADDR addr = 0;
-  const char *actual_name = NULL;
-  CORE_ADDR baseaddr;
-  char *built_actual_name;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  built_actual_name = partial_die_full_name (pdi, cu);
-  if (built_actual_name != NULL)
-    actual_name = built_actual_name;
-
-  if (actual_name == NULL)
-    actual_name = pdi->name;
-
-  switch (pdi->tag)
-    {
-    case DW_TAG_inlined_subroutine:
-    case DW_TAG_subprogram:
-      addr = (gdbarch_adjust_dwarf2_addr (gdbarch, pdi->lowpc + baseaddr)
-	      - baseaddr);
-      if (pdi->is_external
-	  || cu->language == language_ada
-	  || (cu->language == language_fortran
-	      && pdi->die_parent != NULL
-	      && pdi->die_parent->tag == DW_TAG_subprogram))
-	{
-          /* Normally, only "external" DIEs are part of the global scope.
-             But in Ada and Fortran, we want to be able to access nested
-             procedures globally.  So all Ada and Fortran subprograms are
-             stored in the global scope.  */
-	  add_psymbol_to_list (actual_name,
-			       built_actual_name != NULL,
-			       VAR_DOMAIN, LOC_BLOCK,
-			       SECT_OFF_TEXT (objfile),
-			       psymbol_placement::GLOBAL,
-			       addr,
-			       cu->language, objfile);
-	}
-      else
-	{
-	  add_psymbol_to_list (actual_name,
-			       built_actual_name != NULL,
-			       VAR_DOMAIN, LOC_BLOCK,
-			       SECT_OFF_TEXT (objfile),
-			       psymbol_placement::STATIC,
-			       addr, cu->language, objfile);
-	}
-
-      if (pdi->main_subprogram && actual_name != NULL)
-	set_objfile_main_name (objfile, actual_name, cu->language);
-      break;
-    case DW_TAG_constant:
-      add_psymbol_to_list (actual_name,
-			   built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC,
-			   -1, (pdi->is_external
-				? psymbol_placement::GLOBAL
-				: psymbol_placement::STATIC),
-			   0, cu->language, objfile);
-      break;
-    case DW_TAG_variable:
-      if (pdi->d.locdesc)
-	addr = decode_locdesc (pdi->d.locdesc, cu);
-
-      if (pdi->d.locdesc
-	  && addr == 0
-	  && !dwarf2_per_objfile->has_section_at_zero)
-	{
-	  /* A global or static variable may also have been stripped
-	     out by the linker if unused, in which case its address
-	     will be nullified; do not add such variables into partial
-	     symbol table then.  */
-	}
-      else if (pdi->is_external)
-	{
-	  /* Global Variable.
-	     Don't enter into the minimal symbol tables as there is
-	     a minimal symbol table entry from the ELF symbols already.
-	     Enter into partial symbol table if it has a location
-	     descriptor or a type.
-	     If the location descriptor is missing, new_symbol will create
-	     a LOC_UNRESOLVED symbol, the address of the variable will then
-	     be determined from the minimal symbol table whenever the variable
-	     is referenced.
-	     The address for the partial symbol table entry is not
-	     used by GDB, but it comes in handy for debugging partial symbol
-	     table building.  */
-
-	  if (pdi->d.locdesc || pdi->has_type)
-	    add_psymbol_to_list (actual_name,
-				 built_actual_name != NULL,
-				 VAR_DOMAIN, LOC_STATIC,
-				 SECT_OFF_TEXT (objfile),
-				 psymbol_placement::GLOBAL,
-				 addr, cu->language, objfile);
-	}
-      else
-	{
-	  int has_loc = pdi->d.locdesc != NULL;
-
-	  /* Static Variable.  Skip symbols whose value we cannot know (those
-	     without location descriptors or constant values).  */
-	  if (!has_loc && !pdi->has_const_value)
-	    {
-	      xfree (built_actual_name);
-	      return;
-	    }
-
-	  add_psymbol_to_list (actual_name,
-			       built_actual_name != NULL,
-			       VAR_DOMAIN, LOC_STATIC,
-			       SECT_OFF_TEXT (objfile),
-			       psymbol_placement::STATIC,
-			       has_loc ? addr : 0,
-			       cu->language, objfile);
-	}
-      break;
-    case DW_TAG_typedef:
-    case DW_TAG_base_type:
-    case DW_TAG_subrange_type:
-      add_psymbol_to_list (actual_name,
-			   built_actual_name != NULL,
-			   VAR_DOMAIN, LOC_TYPEDEF, -1,
-			   psymbol_placement::STATIC,
-			   0, cu->language, objfile);
-      break;
-    case DW_TAG_imported_declaration:
-    case DW_TAG_namespace:
-      add_psymbol_to_list (actual_name,
-			   built_actual_name != NULL,
-			   VAR_DOMAIN, LOC_TYPEDEF, -1,
-			   psymbol_placement::GLOBAL,
-			   0, cu->language, objfile);
-      break;
-    case DW_TAG_module:
-      /* With Fortran 77 there might be a "BLOCK DATA" module
-         available without any name.  If so, we skip the module as it
-         doesn't bring any value.  */
-      if (actual_name != nullptr)
-	add_psymbol_to_list (actual_name,
-			     built_actual_name != NULL,
-			     MODULE_DOMAIN, LOC_TYPEDEF, -1,
-			     psymbol_placement::GLOBAL,
-			     0, cu->language, objfile);
-      break;
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-    case DW_TAG_enumeration_type:
-      /* Skip external references.  The DWARF standard says in the section
-         about "Structure, Union, and Class Type Entries": "An incomplete
-         structure, union or class type is represented by a structure,
-         union or class entry that does not have a byte size attribute
-         and that has a DW_AT_declaration attribute."  */
-      if (!pdi->has_byte_size && pdi->is_declaration)
-	{
-	  xfree (built_actual_name);
-	  return;
-	}
-
-      /* NOTE: carlton/2003-10-07: See comment in new_symbol about
-	 static vs. global.  */
-      add_psymbol_to_list (actual_name,
-			   built_actual_name != NULL,
-			   STRUCT_DOMAIN, LOC_TYPEDEF, -1,
-			   cu->language == language_cplus
-			   ? psymbol_placement::GLOBAL
-			   : psymbol_placement::STATIC,
-			   0, cu->language, objfile);
-
-      break;
-    case DW_TAG_enumerator:
-      add_psymbol_to_list (actual_name,
-			   built_actual_name != NULL,
-			   VAR_DOMAIN, LOC_CONST, -1,
-			   cu->language == language_cplus
-			   ? psymbol_placement::GLOBAL
-			   : psymbol_placement::STATIC,
-			   0, cu->language, objfile);
-      break;
-    default:
-      break;
-    }
-
-  xfree (built_actual_name);
-}
-
-/* Read a partial die corresponding to a namespace; also, add a symbol
-   corresponding to that namespace to the symbol table.  NAMESPACE is
-   the name of the enclosing namespace.  */
-
-static void
-add_partial_namespace (struct partial_die_info *pdi,
-		       CORE_ADDR *lowpc, CORE_ADDR *highpc,
-		       int set_addrmap, struct dwarf2_cu *cu)
-{
-  /* Add a symbol for the namespace.  */
-
-  add_partial_symbol (pdi, cu);
-
-  /* Now scan partial symbols in that namespace.  */
-
-  if (pdi->has_children)
-    scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu);
-}
-
-/* Read a partial die corresponding to a Fortran module.  */
-
-static void
-add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc,
-		    CORE_ADDR *highpc, int set_addrmap, struct dwarf2_cu *cu)
-{
-  /* Add a symbol for the namespace.  */
-
-  add_partial_symbol (pdi, cu);
-
-  /* Now scan partial symbols in that module.  */
-
-  if (pdi->has_children)
-    scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu);
-}
-
-/* Read a partial die corresponding to a subprogram or an inlined
-   subprogram and create a partial symbol for that subprogram.
-   When the CU language allows it, this routine also defines a partial
-   symbol for each nested subprogram that this subprogram contains.
-   If SET_ADDRMAP is true, record the covered ranges in the addrmap.
-   Set *LOWPC and *HIGHPC to the lowest and highest PC values found in PDI.
-
-   PDI may also be a lexical block, in which case we simply search
-   recursively for subprograms defined inside that lexical block.
-   Again, this is only performed when the CU language allows this
-   type of definitions.  */
-
-static void
-add_partial_subprogram (struct partial_die_info *pdi,
-			CORE_ADDR *lowpc, CORE_ADDR *highpc,
-			int set_addrmap, struct dwarf2_cu *cu)
-{
-  if (pdi->tag == DW_TAG_subprogram || pdi->tag == DW_TAG_inlined_subroutine)
-    {
-      if (pdi->has_pc_info)
-        {
-          if (pdi->lowpc < *lowpc)
-            *lowpc = pdi->lowpc;
-          if (pdi->highpc > *highpc)
-            *highpc = pdi->highpc;
-	  if (set_addrmap)
-	    {
-	      struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-	      struct gdbarch *gdbarch = get_objfile_arch (objfile);
-	      CORE_ADDR baseaddr;
-	      CORE_ADDR this_highpc;
-	      CORE_ADDR this_lowpc;
-
-	      baseaddr = ANOFFSET (objfile->section_offsets,
-				   SECT_OFF_TEXT (objfile));
-	      this_lowpc
-		= (gdbarch_adjust_dwarf2_addr (gdbarch,
-					       pdi->lowpc + baseaddr)
-		   - baseaddr);
-	      this_highpc
-		= (gdbarch_adjust_dwarf2_addr (gdbarch,
-					       pdi->highpc + baseaddr)
-		   - baseaddr);
-	      addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap,
-				 this_lowpc, this_highpc - 1,
-				 cu->per_cu->v.psymtab);
-	    }
-        }
-
-      if (pdi->has_pc_info || (!pdi->is_external && pdi->may_be_inlined))
-	{
-          if (!pdi->is_declaration)
-	    /* Ignore subprogram DIEs that do not have a name, they are
-	       illegal.  Do not emit a complaint at this point, we will
-	       do so when we convert this psymtab into a symtab.  */
-	    if (pdi->name)
-	      add_partial_symbol (pdi, cu);
-        }
-    }
-
-  if (! pdi->has_children)
-    return;
-
-  if (cu->language == language_ada || cu->language == language_fortran)
-    {
-      pdi = pdi->die_child;
-      while (pdi != NULL)
-	{
-	  pdi->fixup (cu);
-	  if (pdi->tag == DW_TAG_subprogram
-	      || pdi->tag == DW_TAG_inlined_subroutine
-	      || pdi->tag == DW_TAG_lexical_block)
-	    add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu);
-	  pdi = pdi->die_sibling;
-	}
-    }
-}
-
-/* Read a partial die corresponding to an enumeration type.  */
-
-static void
-add_partial_enumeration (struct partial_die_info *enum_pdi,
-			 struct dwarf2_cu *cu)
-{
-  struct partial_die_info *pdi;
-
-  if (enum_pdi->name != NULL)
-    add_partial_symbol (enum_pdi, cu);
-
-  pdi = enum_pdi->die_child;
-  while (pdi)
-    {
-      if (pdi->tag != DW_TAG_enumerator || pdi->name == NULL)
-	complaint (_("malformed enumerator DIE ignored"));
-      else
-	add_partial_symbol (pdi, cu);
-      pdi = pdi->die_sibling;
-    }
-}
-
-/* Return the initial uleb128 in the die at INFO_PTR.  */
-
-static unsigned int
-peek_abbrev_code (bfd *abfd, const gdb_byte *info_ptr)
-{
-  unsigned int bytes_read;
-
-  return read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-}
-
-/* Read the initial uleb128 in the die at INFO_PTR in compilation unit
-   READER::CU.  Use READER::ABBREV_TABLE to lookup any abbreviation.
-
-   Return the corresponding abbrev, or NULL if the number is zero (indicating
-   an empty DIE).  In either case *BYTES_READ will be set to the length of
-   the initial number.  */
-
-static struct abbrev_info *
-peek_die_abbrev (const die_reader_specs &reader,
-		 const gdb_byte *info_ptr, unsigned int *bytes_read)
-{
-  dwarf2_cu *cu = reader.cu;
-  bfd *abfd = cu->per_cu->dwarf2_per_objfile->objfile->obfd;
-  unsigned int abbrev_number
-    = read_unsigned_leb128 (abfd, info_ptr, bytes_read);
-
-  if (abbrev_number == 0)
-    return NULL;
-
-  abbrev_info *abbrev = reader.abbrev_table->lookup_abbrev (abbrev_number);
-  if (!abbrev)
-    {
-      error (_("Dwarf Error: Could not find abbrev number %d in %s"
-	       " at offset %s [in module %s]"),
-	     abbrev_number, cu->per_cu->is_debug_types ? "TU" : "CU",
-	     sect_offset_str (cu->header.sect_off), bfd_get_filename (abfd));
-    }
-
-  return abbrev;
-}
-
-/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER.
-   Returns a pointer to the end of a series of DIEs, terminated by an empty
-   DIE.  Any children of the skipped DIEs will also be skipped.  */
-
-static const gdb_byte *
-skip_children (const struct die_reader_specs *reader, const gdb_byte *info_ptr)
-{
-  while (1)
-    {
-      unsigned int bytes_read;
-      abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr, &bytes_read);
-
-      if (abbrev == NULL)
-	return info_ptr + bytes_read;
-      else
-	info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
-    }
-}
-
-/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER.
-   INFO_PTR should point just after the initial uleb128 of a DIE, and the
-   abbrev corresponding to that skipped uleb128 should be passed in
-   ABBREV.  Returns a pointer to this DIE's sibling, skipping any
-   children.  */
-
-static const gdb_byte *
-skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr,
-	      struct abbrev_info *abbrev)
-{
-  unsigned int bytes_read;
-  struct attribute attr;
-  bfd *abfd = reader->abfd;
-  struct dwarf2_cu *cu = reader->cu;
-  const gdb_byte *buffer = reader->buffer;
-  const gdb_byte *buffer_end = reader->buffer_end;
-  unsigned int form, i;
-
-  for (i = 0; i < abbrev->num_attrs; i++)
-    {
-      /* The only abbrev we care about is DW_AT_sibling.  */
-      if (abbrev->attrs[i].name == DW_AT_sibling)
-	{
-	  read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
-	  if (attr.form == DW_FORM_ref_addr)
-	    complaint (_("ignoring absolute DW_AT_sibling"));
-	  else
-	    {
-	      sect_offset off = dwarf2_get_ref_die_offset (&attr);
-	      const gdb_byte *sibling_ptr = buffer + to_underlying (off);
-
-	      if (sibling_ptr < info_ptr)
-		complaint (_("DW_AT_sibling points backwards"));
-	      else if (sibling_ptr > reader->buffer_end)
-		dwarf2_section_buffer_overflow_complaint (reader->die_section);
-	      else
-		return sibling_ptr;
-	    }
-	}
-
-      /* If it isn't DW_AT_sibling, skip this attribute.  */
-      form = abbrev->attrs[i].form;
-    skip_attribute:
-      switch (form)
-	{
-	case DW_FORM_ref_addr:
-	  /* In DWARF 2, DW_FORM_ref_addr is address sized; in DWARF 3
-	     and later it is offset sized.  */
-	  if (cu->header.version == 2)
-	    info_ptr += cu->header.addr_size;
-	  else
-	    info_ptr += cu->header.offset_size;
-	  break;
-	case DW_FORM_GNU_ref_alt:
-	  info_ptr += cu->header.offset_size;
-	  break;
-	case DW_FORM_addr:
-	  info_ptr += cu->header.addr_size;
-	  break;
-	case DW_FORM_data1:
-	case DW_FORM_ref1:
-	case DW_FORM_flag:
-	case DW_FORM_strx1:
-	  info_ptr += 1;
-	  break;
-	case DW_FORM_flag_present:
-	case DW_FORM_implicit_const:
-	  break;
-	case DW_FORM_data2:
-	case DW_FORM_ref2:
-	case DW_FORM_strx2:
-	  info_ptr += 2;
-	  break;
-	case DW_FORM_strx3:
-	  info_ptr += 3;
-	  break;
-	case DW_FORM_data4:
-	case DW_FORM_ref4:
-	case DW_FORM_strx4:
-	  info_ptr += 4;
-	  break;
-	case DW_FORM_data8:
-	case DW_FORM_ref8:
-	case DW_FORM_ref_sig8:
-	  info_ptr += 8;
-	  break;
-	case DW_FORM_data16:
-	  info_ptr += 16;
-	  break;
-	case DW_FORM_string:
-	  read_direct_string (abfd, info_ptr, &bytes_read);
-	  info_ptr += bytes_read;
-	  break;
-	case DW_FORM_sec_offset:
-	case DW_FORM_strp:
-	case DW_FORM_GNU_strp_alt:
-	  info_ptr += cu->header.offset_size;
-	  break;
-	case DW_FORM_exprloc:
-	case DW_FORM_block:
-	  info_ptr += read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-	  info_ptr += bytes_read;
-	  break;
-	case DW_FORM_block1:
-	  info_ptr += 1 + read_1_byte (abfd, info_ptr);
-	  break;
-	case DW_FORM_block2:
-	  info_ptr += 2 + read_2_bytes (abfd, info_ptr);
-	  break;
-	case DW_FORM_block4:
-	  info_ptr += 4 + read_4_bytes (abfd, info_ptr);
-	  break;
-	case DW_FORM_addrx:
-	case DW_FORM_strx:
-	case DW_FORM_sdata:
-	case DW_FORM_udata:
-	case DW_FORM_ref_udata:
-	case DW_FORM_GNU_addr_index:
-	case DW_FORM_GNU_str_index:
-	  info_ptr = safe_skip_leb128 (info_ptr, buffer_end);
-	  break;
-	case DW_FORM_indirect:
-	  form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-	  info_ptr += bytes_read;
-	  /* We need to continue parsing from here, so just go back to
-	     the top.  */
-	  goto skip_attribute;
-
-	default:
-	  error (_("Dwarf Error: Cannot handle %s "
-		   "in DWARF reader [in module %s]"),
-		 dwarf_form_name (form),
-		 bfd_get_filename (abfd));
-	}
-    }
-
-  if (abbrev->has_children)
-    return skip_children (reader, info_ptr);
-  else
-    return info_ptr;
-}
-
-/* Locate ORIG_PDI's sibling.
-   INFO_PTR should point to the start of the next DIE after ORIG_PDI.  */
-
-static const gdb_byte *
-locate_pdi_sibling (const struct die_reader_specs *reader,
-		    struct partial_die_info *orig_pdi,
-		    const gdb_byte *info_ptr)
-{
-  /* Do we know the sibling already?  */
-
-  if (orig_pdi->sibling)
-    return orig_pdi->sibling;
-
-  /* Are there any children to deal with?  */
-
-  if (!orig_pdi->has_children)
-    return info_ptr;
-
-  /* Skip the children the long way.  */
-
-  return skip_children (reader, info_ptr);
-}
-
-/* Expand this partial symbol table into a full symbol table.  SELF is
-   not NULL.  */
-
-static void
-dwarf2_read_symtab (struct partial_symtab *self,
-		    struct objfile *objfile)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = get_dwarf2_per_objfile (objfile);
-
-  if (self->readin)
-    {
-      warning (_("bug: psymtab for %s is already read in."),
-	       self->filename);
-    }
-  else
-    {
-      if (info_verbose)
-	{
-	  printf_filtered (_("Reading in symbols for %s..."),
-			   self->filename);
-	  gdb_flush (gdb_stdout);
-	}
-
-      /* If this psymtab is constructed from a debug-only objfile, the
-	 has_section_at_zero flag will not necessarily be correct.  We
-	 can get the correct value for this flag by looking at the data
-	 associated with the (presumably stripped) associated objfile.  */
-      if (objfile->separate_debug_objfile_backlink)
-	{
-	  struct dwarf2_per_objfile *dpo_backlink
-	    = get_dwarf2_per_objfile (objfile->separate_debug_objfile_backlink);
-
-	  dwarf2_per_objfile->has_section_at_zero
-	    = dpo_backlink->has_section_at_zero;
-	}
-
-      dwarf2_per_objfile->reading_partial_symbols = 0;
-
-      psymtab_to_symtab_1 (self);
-
-      /* Finish up the debug error message.  */
-      if (info_verbose)
-	printf_filtered (_("done.\n"));
-    }
-
-  process_cu_includes (dwarf2_per_objfile);
-}
-
-/* Reading in full CUs.  */
-
-/* Add PER_CU to the queue.  */
-
-static void
-queue_comp_unit (struct dwarf2_per_cu_data *per_cu,
-		 enum language pretend_language)
-{
-  struct dwarf2_queue_item *item;
-
-  per_cu->queued = 1;
-  item = XNEW (struct dwarf2_queue_item);
-  item->per_cu = per_cu;
-  item->pretend_language = pretend_language;
-  item->next = NULL;
-
-  if (dwarf2_queue == NULL)
-    dwarf2_queue = item;
-  else
-    dwarf2_queue_tail->next = item;
-
-  dwarf2_queue_tail = item;
-}
-
-/* If PER_CU is not yet queued, add it to the queue.
-   If DEPENDENT_CU is non-NULL, it has a reference to PER_CU so add a
-   dependency.
-   The result is non-zero if PER_CU was queued, otherwise the result is zero
-   meaning either PER_CU is already queued or it is already loaded.
-
-   N.B. There is an invariant here that if a CU is queued then it is loaded.
-   The caller is required to load PER_CU if we return non-zero.  */
-
-static int
-maybe_queue_comp_unit (struct dwarf2_cu *dependent_cu,
-		       struct dwarf2_per_cu_data *per_cu,
-		       enum language pretend_language)
-{
-  /* We may arrive here during partial symbol reading, if we need full
-     DIEs to process an unusual case (e.g. template arguments).  Do
-     not queue PER_CU, just tell our caller to load its DIEs.  */
-  if (per_cu->dwarf2_per_objfile->reading_partial_symbols)
-    {
-      if (per_cu->cu == NULL || per_cu->cu->dies == NULL)
-	return 1;
-      return 0;
-    }
-
-  /* Mark the dependence relation so that we don't flush PER_CU
-     too early.  */
-  if (dependent_cu != NULL)
-    dwarf2_add_dependence (dependent_cu, per_cu);
-
-  /* If it's already on the queue, we have nothing to do.  */
-  if (per_cu->queued)
-    return 0;
-
-  /* If the compilation unit is already loaded, just mark it as
-     used.  */
-  if (per_cu->cu != NULL)
-    {
-      per_cu->cu->last_used = 0;
-      return 0;
-    }
-
-  /* Add it to the queue.  */
-  queue_comp_unit (per_cu, pretend_language);
-
-  return 1;
-}
-
-/* Process the queue.  */
-
-static void
-process_queue (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct dwarf2_queue_item *item, *next_item;
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Expanding one or more symtabs of objfile %s ...\n",
-			  objfile_name (dwarf2_per_objfile->objfile));
-    }
-
-  /* The queue starts out with one item, but following a DIE reference
-     may load a new CU, adding it to the end of the queue.  */
-  for (item = dwarf2_queue; item != NULL; dwarf2_queue = item = next_item)
-    {
-      if ((dwarf2_per_objfile->using_index
-	   ? !item->per_cu->v.quick->compunit_symtab
-	   : (item->per_cu->v.psymtab && !item->per_cu->v.psymtab->readin))
-	  /* Skip dummy CUs.  */
-	  && item->per_cu->cu != NULL)
-	{
-	  struct dwarf2_per_cu_data *per_cu = item->per_cu;
-	  unsigned int debug_print_threshold;
-	  char buf[100];
-
-	  if (per_cu->is_debug_types)
-	    {
-	      struct signatured_type *sig_type =
-		(struct signatured_type *) per_cu;
-
-	      sprintf (buf, "TU %s at offset %s",
-		       hex_string (sig_type->signature),
-		       sect_offset_str (per_cu->sect_off));
-	      /* There can be 100s of TUs.
-		 Only print them in verbose mode.  */
-	      debug_print_threshold = 2;
-	    }
-	  else
-	    {
-	      sprintf (buf, "CU at offset %s",
-		       sect_offset_str (per_cu->sect_off));
-	      debug_print_threshold = 1;
-	    }
-
-	  if (dwarf_read_debug >= debug_print_threshold)
-	    fprintf_unfiltered (gdb_stdlog, "Expanding symtab of %s\n", buf);
-
-	  if (per_cu->is_debug_types)
-	    process_full_type_unit (per_cu, item->pretend_language);
-	  else
-	    process_full_comp_unit (per_cu, item->pretend_language);
-
-	  if (dwarf_read_debug >= debug_print_threshold)
-	    fprintf_unfiltered (gdb_stdlog, "Done expanding %s\n", buf);
-	}
-
-      item->per_cu->queued = 0;
-      next_item = item->next;
-      xfree (item);
-    }
-
-  dwarf2_queue_tail = NULL;
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "Done expanding symtabs of %s.\n",
-			  objfile_name (dwarf2_per_objfile->objfile));
-    }
-}
-
-/* Read in full symbols for PST, and anything it depends on.  */
-
-static void
-psymtab_to_symtab_1 (struct partial_symtab *pst)
-{
-  struct dwarf2_per_cu_data *per_cu;
-  int i;
-
-  if (pst->readin)
-    return;
-
-  for (i = 0; i < pst->number_of_dependencies; i++)
-    if (!pst->dependencies[i]->readin
-	&& pst->dependencies[i]->user == NULL)
-      {
-        /* Inform about additional files that need to be read in.  */
-        if (info_verbose)
-          {
-	    /* FIXME: i18n: Need to make this a single string.  */
-            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);
-          }
-        psymtab_to_symtab_1 (pst->dependencies[i]);
-      }
-
-  per_cu = (struct dwarf2_per_cu_data *) pst->read_symtab_private;
-
-  if (per_cu == NULL)
-    {
-      /* It's an include file, no symbols to read for it.
-         Everything is in the parent symtab.  */
-      pst->readin = 1;
-      return;
-    }
-
-  dw2_do_instantiate_symtab (per_cu, false);
-}
-
-/* Trivial hash function for die_info: the hash value of a DIE
-   is its offset in .debug_info for this objfile.  */
-
-static hashval_t
-die_hash (const void *item)
-{
-  const struct die_info *die = (const struct die_info *) item;
-
-  return to_underlying (die->sect_off);
-}
-
-/* Trivial comparison function for die_info structures: two DIEs
-   are equal if they have the same offset.  */
-
-static int
-die_eq (const void *item_lhs, const void *item_rhs)
-{
-  const struct die_info *die_lhs = (const struct die_info *) item_lhs;
-  const struct die_info *die_rhs = (const struct die_info *) item_rhs;
-
-  return die_lhs->sect_off == die_rhs->sect_off;
-}
-
-/* die_reader_func for load_full_comp_unit.
-   This is identical to read_signatured_type_reader,
-   but is kept separate for now.  */
-
-static void
-load_full_comp_unit_reader (const struct die_reader_specs *reader,
-			    const gdb_byte *info_ptr,
-			    struct die_info *comp_unit_die,
-			    int has_children,
-			    void *data)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  enum language *language_ptr = (enum language *) data;
-
-  gdb_assert (cu->die_hash == NULL);
-  cu->die_hash =
-    htab_create_alloc_ex (cu->header.length / 12,
-			  die_hash,
-			  die_eq,
-			  NULL,
-			  &cu->comp_unit_obstack,
-			  hashtab_obstack_allocate,
-			  dummy_obstack_deallocate);
-
-  if (has_children)
-    comp_unit_die->child = read_die_and_siblings (reader, info_ptr,
-						  &info_ptr, comp_unit_die);
-  cu->dies = comp_unit_die;
-  /* comp_unit_die is not stored in die_hash, no need.  */
-
-  /* We try not to read any attributes in this function, because not
-     all CUs needed for references have been loaded yet, and symbol
-     table processing isn't initialized.  But we have to set the CU language,
-     or we won't be able to build types correctly.
-     Similarly, if we do not read the producer, we can not apply
-     producer-specific interpretation.  */
-  prepare_one_comp_unit (cu, cu->dies, *language_ptr);
-}
-
-/* Load the DIEs associated with PER_CU into memory.  */
-
-static void
-load_full_comp_unit (struct dwarf2_per_cu_data *this_cu,
-		     bool skip_partial,
-		     enum language pretend_language)
-{
-  gdb_assert (! this_cu->is_debug_types);
-
-  init_cutu_and_read_dies (this_cu, NULL, 1, 1, skip_partial,
-			   load_full_comp_unit_reader, &pretend_language);
-}
-
-/* Add a DIE to the delayed physname list.  */
-
-static void
-add_to_method_list (struct type *type, int fnfield_index, int index,
-		    const char *name, struct die_info *die,
-		    struct dwarf2_cu *cu)
-{
-  struct delayed_method_info mi;
-  mi.type = type;
-  mi.fnfield_index = fnfield_index;
-  mi.index = index;
-  mi.name = name;
-  mi.die = die;
-  cu->method_list.push_back (mi);
-}
-
-/* Check whether [PHYSNAME, PHYSNAME+LEN) ends with a modifier like
-   "const" / "volatile".  If so, decrements LEN by the length of the
-   modifier and return true.  Otherwise return false.  */
-
-template<size_t N>
-static bool
-check_modifier (const char *physname, size_t &len, const char (&mod)[N])
-{
-  size_t mod_len = sizeof (mod) - 1;
-  if (len > mod_len && startswith (physname + (len - mod_len), mod))
-    {
-      len -= mod_len;
-      return true;
-    }
-  return false;
-}
-
-/* Compute the physnames of any methods on the CU's method list.
-
-   The computation of method physnames is delayed in order to avoid the
-   (bad) condition that one of the method's formal parameters is of an as yet
-   incomplete type.  */
-
-static void
-compute_delayed_physnames (struct dwarf2_cu *cu)
-{
-  /* Only C++ delays computing physnames.  */
-  if (cu->method_list.empty ())
-    return;
-  gdb_assert (cu->language == language_cplus);
-
-  for (const delayed_method_info &mi : cu->method_list)
-    {
-      const char *physname;
-      struct fn_fieldlist *fn_flp
-	= &TYPE_FN_FIELDLIST (mi.type, mi.fnfield_index);
-      physname = dwarf2_physname (mi.name, mi.die, cu);
-      TYPE_FN_FIELD_PHYSNAME (fn_flp->fn_fields, mi.index)
-	= physname ? physname : "";
-
-      /* Since there's no tag to indicate whether a method is a
-	 const/volatile overload, extract that information out of the
-	 demangled name.  */
-      if (physname != NULL)
-	{
-	  size_t len = strlen (physname);
-
-	  while (1)
-	    {
-	      if (physname[len] == ')') /* shortcut */
-		break;
-	      else if (check_modifier (physname, len, " const"))
-		TYPE_FN_FIELD_CONST (fn_flp->fn_fields, mi.index) = 1;
-	      else if (check_modifier (physname, len, " volatile"))
-		TYPE_FN_FIELD_VOLATILE (fn_flp->fn_fields, mi.index) = 1;
-	      else
-		break;
-	    }
-	}
-    }
-
-  /* The list is no longer needed.  */
-  cu->method_list.clear ();
-}
-
-/* Go objects should be embedded in a DW_TAG_module DIE,
-   and it's not clear if/how imported objects will appear.
-   To keep Go support simple until that's worked out,
-   go back through what we've read and create something usable.
-   We could do this while processing each DIE, and feels kinda cleaner,
-   but that way is more invasive.
-   This is to, for example, allow the user to type "p var" or "b main"
-   without having to specify the package name, and allow lookups
-   of module.object to work in contexts that use the expression
-   parser.  */
-
-static void
-fixup_go_packaging (struct dwarf2_cu *cu)
-{
-  char *package_name = NULL;
-  struct pending *list;
-  int i;
-
-  for (list = *cu->get_builder ()->get_global_symbols ();
-       list != NULL;
-       list = list->next)
-    {
-      for (i = 0; i < list->nsyms; ++i)
-	{
-	  struct symbol *sym = list->symbol[i];
-
-	  if (SYMBOL_LANGUAGE (sym) == language_go
-	      && SYMBOL_CLASS (sym) == LOC_BLOCK)
-	    {
-	      char *this_package_name = go_symbol_package_name (sym);
-
-	      if (this_package_name == NULL)
-		continue;
-	      if (package_name == NULL)
-		package_name = this_package_name;
-	      else
-		{
-		  struct objfile *objfile
-		    = cu->per_cu->dwarf2_per_objfile->objfile;
-		  if (strcmp (package_name, this_package_name) != 0)
-		    complaint (_("Symtab %s has objects from two different Go packages: %s and %s"),
-			       (symbol_symtab (sym) != NULL
-				? symtab_to_filename_for_display
-				    (symbol_symtab (sym))
-				: objfile_name (objfile)),
-			       this_package_name, package_name);
-		  xfree (this_package_name);
-		}
-	    }
-	}
-    }
-
-  if (package_name != NULL)
-    {
-      struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-      const char *saved_package_name
-	= obstack_strdup (&objfile->per_bfd->storage_obstack, package_name);
-      struct type *type = init_type (objfile, TYPE_CODE_MODULE, 0,
-				     saved_package_name);
-      struct symbol *sym;
-
-      sym = allocate_symbol (objfile);
-      SYMBOL_SET_LANGUAGE (sym, language_go, &objfile->objfile_obstack);
-      SYMBOL_SET_NAMES (sym, saved_package_name, false, objfile);
-      /* This is not VAR_DOMAIN because we want a way to ensure a lookup of,
-	 e.g., "main" finds the "main" module and not C's main().  */
-      SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
-      SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-      SYMBOL_TYPE (sym) = type;
-
-      add_symbol_to_list (sym, cu->get_builder ()->get_global_symbols ());
-
-      xfree (package_name);
-    }
-}
-
-/* Allocate a fully-qualified name consisting of the two parts on the
-   obstack.  */
-
-static const char *
-rust_fully_qualify (struct obstack *obstack, const char *p1, const char *p2)
-{
-  return obconcat (obstack, p1, "::", p2, (char *) NULL);
-}
-
-/* A helper that allocates a struct discriminant_info to attach to a
-   union type.  */
-
-static struct discriminant_info *
-alloc_discriminant_info (struct type *type, int discriminant_index,
-			 int default_index)
-{
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
-  gdb_assert (discriminant_index == -1
-	      || (discriminant_index >= 0
-		  && discriminant_index < TYPE_NFIELDS (type)));
-  gdb_assert (default_index == -1
-	      || (default_index >= 0 && default_index < TYPE_NFIELDS (type)));
-
-  TYPE_FLAG_DISCRIMINATED_UNION (type) = 1;
-
-  struct discriminant_info *disc
-    = ((struct discriminant_info *)
-       TYPE_ZALLOC (type,
-		    offsetof (struct discriminant_info, discriminants)
-		    + TYPE_NFIELDS (type) * sizeof (disc->discriminants[0])));
-  disc->default_index = default_index;
-  disc->discriminant_index = discriminant_index;
-
-  struct dynamic_prop prop;
-  prop.kind = PROP_UNDEFINED;
-  prop.data.baton = disc;
-
-  add_dyn_prop (DYN_PROP_DISCRIMINATED, prop, type);
-
-  return disc;
-}
-
-/* Some versions of rustc emitted enums in an unusual way.
-
-   Ordinary enums were emitted as unions.  The first element of each
-   structure in the union was named "RUST$ENUM$DISR".  This element
-   held the discriminant.
-
-   These versions of Rust also implemented the "non-zero"
-   optimization.  When the enum had two values, and one is empty and
-   the other holds a pointer that cannot be zero, the pointer is used
-   as the discriminant, with a zero value meaning the empty variant.
-   Here, the union's first member is of the form
-   RUST$ENCODED$ENUM$<fieldno>$<fieldno>$...$<variantname>
-   where the fieldnos are the indices of the fields that should be
-   traversed in order to find the field (which may be several fields deep)
-   and the variantname is the name of the variant of the case when the
-   field is zero.
-
-   This function recognizes whether TYPE is of one of these forms,
-   and, if so, smashes it to be a variant type.  */
-
-static void
-quirk_rust_enum (struct type *type, struct objfile *objfile)
-{
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
-
-  /* We don't need to deal with empty enums.  */
-  if (TYPE_NFIELDS (type) == 0)
-    return;
-
-#define RUST_ENUM_PREFIX "RUST$ENCODED$ENUM$"
-  if (TYPE_NFIELDS (type) == 1
-      && startswith (TYPE_FIELD_NAME (type, 0), RUST_ENUM_PREFIX))
-    {
-      const char *name = TYPE_FIELD_NAME (type, 0) + strlen (RUST_ENUM_PREFIX);
-
-      /* Decode the field name to find the offset of the
-	 discriminant.  */
-      ULONGEST bit_offset = 0;
-      struct type *field_type = TYPE_FIELD_TYPE (type, 0);
-      while (name[0] >= '0' && name[0] <= '9')
-	{
-	  char *tail;
-	  unsigned long index = strtoul (name, &tail, 10);
-	  name = tail;
-	  if (*name != '$'
-	      || index >= TYPE_NFIELDS (field_type)
-	      || (TYPE_FIELD_LOC_KIND (field_type, index)
-		  != FIELD_LOC_KIND_BITPOS))
-	    {
-	      complaint (_("Could not parse Rust enum encoding string \"%s\""
-			   "[in module %s]"),
-			 TYPE_FIELD_NAME (type, 0),
-			 objfile_name (objfile));
-	      return;
-	    }
-	  ++name;
-
-	  bit_offset += TYPE_FIELD_BITPOS (field_type, index);
-	  field_type = TYPE_FIELD_TYPE (field_type, index);
-	}
-
-      /* Make a union to hold the variants.  */
-      struct type *union_type = alloc_type (objfile);
-      TYPE_CODE (union_type) = TYPE_CODE_UNION;
-      TYPE_NFIELDS (union_type) = 3;
-      TYPE_FIELDS (union_type)
-	= (struct field *) TYPE_ZALLOC (type, 3 * sizeof (struct field));
-      TYPE_LENGTH (union_type) = TYPE_LENGTH (type);
-      set_type_align (union_type, TYPE_RAW_ALIGN (type));
-
-      /* Put the discriminant must at index 0.  */
-      TYPE_FIELD_TYPE (union_type, 0) = field_type;
-      TYPE_FIELD_ARTIFICIAL (union_type, 0) = 1;
-      TYPE_FIELD_NAME (union_type, 0) = "<<discriminant>>";
-      SET_FIELD_BITPOS (TYPE_FIELD (union_type, 0), bit_offset);
-
-      /* The order of fields doesn't really matter, so put the real
-	 field at index 1 and the data-less field at index 2.  */
-      struct discriminant_info *disc
-	= alloc_discriminant_info (union_type, 0, 1);
-      TYPE_FIELD (union_type, 1) = TYPE_FIELD (type, 0);
-      TYPE_FIELD_NAME (union_type, 1)
-	= rust_last_path_segment (TYPE_NAME (TYPE_FIELD_TYPE (union_type, 1)));
-      TYPE_NAME (TYPE_FIELD_TYPE (union_type, 1))
-	= rust_fully_qualify (&objfile->objfile_obstack, TYPE_NAME (type),
-			      TYPE_FIELD_NAME (union_type, 1));
-
-      const char *dataless_name
-	= rust_fully_qualify (&objfile->objfile_obstack, TYPE_NAME (type),
-			      name);
-      struct type *dataless_type = init_type (objfile, TYPE_CODE_VOID, 0,
-					      dataless_name);
-      TYPE_FIELD_TYPE (union_type, 2) = dataless_type;
-      /* NAME points into the original discriminant name, which
-	 already has the correct lifetime.  */
-      TYPE_FIELD_NAME (union_type, 2) = name;
-      SET_FIELD_BITPOS (TYPE_FIELD (union_type, 2), 0);
-      disc->discriminants[2] = 0;
-
-      /* Smash this type to be a structure type.  We have to do this
-	 because the type has already been recorded.  */
-      TYPE_CODE (type) = TYPE_CODE_STRUCT;
-      TYPE_NFIELDS (type) = 1;
-      TYPE_FIELDS (type)
-	= (struct field *) TYPE_ZALLOC (type, sizeof (struct field));
-
-      /* Install the variant part.  */
-      TYPE_FIELD_TYPE (type, 0) = union_type;
-      SET_FIELD_BITPOS (TYPE_FIELD (type, 0), 0);
-      TYPE_FIELD_NAME (type, 0) = "<<variants>>";
-    }
-  /* A union with a single anonymous field is probably an old-style
-     univariant enum.  */
-  else if (TYPE_NFIELDS (type) == 1 && streq (TYPE_FIELD_NAME (type, 0), ""))
-    {
-      /* Smash this type to be a structure type.  We have to do this
-	 because the type has already been recorded.  */
-      TYPE_CODE (type) = TYPE_CODE_STRUCT;
-
-      /* Make a union to hold the variants.  */
-      struct type *union_type = alloc_type (objfile);
-      TYPE_CODE (union_type) = TYPE_CODE_UNION;
-      TYPE_NFIELDS (union_type) = TYPE_NFIELDS (type);
-      TYPE_LENGTH (union_type) = TYPE_LENGTH (type);
-      set_type_align (union_type, TYPE_RAW_ALIGN (type));
-      TYPE_FIELDS (union_type) = TYPE_FIELDS (type);
-
-      struct type *field_type = TYPE_FIELD_TYPE (union_type, 0);
-      const char *variant_name
-	= rust_last_path_segment (TYPE_NAME (field_type));
-      TYPE_FIELD_NAME (union_type, 0) = variant_name;
-      TYPE_NAME (field_type)
-	= rust_fully_qualify (&objfile->objfile_obstack,
-			      TYPE_NAME (type), variant_name);
-
-      /* Install the union in the outer struct type.  */
-      TYPE_NFIELDS (type) = 1;
-      TYPE_FIELDS (type)
-	= (struct field *) TYPE_ZALLOC (union_type, sizeof (struct field));
-      TYPE_FIELD_TYPE (type, 0) = union_type;
-      TYPE_FIELD_NAME (type, 0) = "<<variants>>";
-      SET_FIELD_BITPOS (TYPE_FIELD (type, 0), 0);
-
-      alloc_discriminant_info (union_type, -1, 0);
-    }
-  else
-    {
-      struct type *disr_type = nullptr;
-      for (int i = 0; i < TYPE_NFIELDS (type); ++i)
-	{
-	  disr_type = TYPE_FIELD_TYPE (type, i);
-
-	  if (TYPE_CODE (disr_type) != TYPE_CODE_STRUCT)
-	    {
-	      /* All fields of a true enum will be structs.  */
-	      return;
-	    }
-	  else if (TYPE_NFIELDS (disr_type) == 0)
-	    {
-	      /* Could be data-less variant, so keep going.  */
-	      disr_type = nullptr;
-	    }
-	  else if (strcmp (TYPE_FIELD_NAME (disr_type, 0),
-			   "RUST$ENUM$DISR") != 0)
-	    {
-	      /* Not a Rust enum.  */
-	      return;
-	    }
-	  else
-	    {
-	      /* Found one.  */
-	      break;
-	    }
-	}
-
-      /* If we got here without a discriminant, then it's probably
-	 just a union.  */
-      if (disr_type == nullptr)
-	return;
-
-      /* Smash this type to be a structure type.  We have to do this
-	 because the type has already been recorded.  */
-      TYPE_CODE (type) = TYPE_CODE_STRUCT;
-
-      /* Make a union to hold the variants.  */
-      struct field *disr_field = &TYPE_FIELD (disr_type, 0);
-      struct type *union_type = alloc_type (objfile);
-      TYPE_CODE (union_type) = TYPE_CODE_UNION;
-      TYPE_NFIELDS (union_type) = 1 + TYPE_NFIELDS (type);
-      TYPE_LENGTH (union_type) = TYPE_LENGTH (type);
-      set_type_align (union_type, TYPE_RAW_ALIGN (type));
-      TYPE_FIELDS (union_type)
-	= (struct field *) TYPE_ZALLOC (union_type,
-					(TYPE_NFIELDS (union_type)
-					 * sizeof (struct field)));
-
-      memcpy (TYPE_FIELDS (union_type) + 1, TYPE_FIELDS (type),
-	      TYPE_NFIELDS (type) * sizeof (struct field));
-
-      /* Install the discriminant at index 0 in the union.  */
-      TYPE_FIELD (union_type, 0) = *disr_field;
-      TYPE_FIELD_ARTIFICIAL (union_type, 0) = 1;
-      TYPE_FIELD_NAME (union_type, 0) = "<<discriminant>>";
-
-      /* Install the union in the outer struct type.  */
-      TYPE_FIELD_TYPE (type, 0) = union_type;
-      TYPE_FIELD_NAME (type, 0) = "<<variants>>";
-      TYPE_NFIELDS (type) = 1;
-
-      /* Set the size and offset of the union type.  */
-      SET_FIELD_BITPOS (TYPE_FIELD (type, 0), 0);
-
-      /* We need a way to find the correct discriminant given a
-	 variant name.  For convenience we build a map here.  */
-      struct type *enum_type = FIELD_TYPE (*disr_field);
-      std::unordered_map<std::string, ULONGEST> discriminant_map;
-      for (int i = 0; i < TYPE_NFIELDS (enum_type); ++i)
-	{
-	  if (TYPE_FIELD_LOC_KIND (enum_type, i) == FIELD_LOC_KIND_ENUMVAL)
-	    {
-	      const char *name
-		= rust_last_path_segment (TYPE_FIELD_NAME (enum_type, i));
-	      discriminant_map[name] = TYPE_FIELD_ENUMVAL (enum_type, i);
-	    }
-	}
-
-      int n_fields = TYPE_NFIELDS (union_type);
-      struct discriminant_info *disc
-	= alloc_discriminant_info (union_type, 0, -1);
-      /* Skip the discriminant here.  */
-      for (int i = 1; i < n_fields; ++i)
-	{
-	  /* Find the final word in the name of this variant's type.
-	     That name can be used to look up the correct
-	     discriminant.  */
-	  const char *variant_name
-	    = rust_last_path_segment (TYPE_NAME (TYPE_FIELD_TYPE (union_type,
-								  i)));
-
-	  auto iter = discriminant_map.find (variant_name);
-	  if (iter != discriminant_map.end ())
-	    disc->discriminants[i] = iter->second;
-
-	  /* Remove the discriminant field, if it exists.  */
-	  struct type *sub_type = TYPE_FIELD_TYPE (union_type, i);
-	  if (TYPE_NFIELDS (sub_type) > 0)
-	    {
-	      --TYPE_NFIELDS (sub_type);
-	      ++TYPE_FIELDS (sub_type);
-	    }
-	  TYPE_FIELD_NAME (union_type, i) = variant_name;
-	  TYPE_NAME (sub_type)
-	    = rust_fully_qualify (&objfile->objfile_obstack,
-				  TYPE_NAME (type), variant_name);
-	}
-    }
-}
-
-/* Rewrite some Rust unions to be structures with variants parts.  */
-
-static void
-rust_union_quirks (struct dwarf2_cu *cu)
-{
-  gdb_assert (cu->language == language_rust);
-  for (type *type_ : cu->rust_unions)
-    quirk_rust_enum (type_, cu->per_cu->dwarf2_per_objfile->objfile);
-  /* We don't need this any more.  */
-  cu->rust_unions.clear ();
-}
-
-/* Return the symtab for PER_CU.  This works properly regardless of
-   whether we're using the index or psymtabs.  */
-
-static struct compunit_symtab *
-get_compunit_symtab (struct dwarf2_per_cu_data *per_cu)
-{
-  return (per_cu->dwarf2_per_objfile->using_index
-	  ? per_cu->v.quick->compunit_symtab
-	  : per_cu->v.psymtab->compunit_symtab);
-}
-
-/* A helper function for computing the list of all symbol tables
-   included by PER_CU.  */
-
-static void
-recursively_compute_inclusions (std::vector<compunit_symtab *> *result,
-				htab_t all_children, htab_t all_type_symtabs,
-				struct dwarf2_per_cu_data *per_cu,
-				struct compunit_symtab *immediate_parent)
-{
-  void **slot;
-  struct compunit_symtab *cust;
-
-  slot = htab_find_slot (all_children, per_cu, INSERT);
-  if (*slot != NULL)
-    {
-      /* This inclusion and its children have been processed.  */
-      return;
-    }
-
-  *slot = per_cu;
-  /* Only add a CU if it has a symbol table.  */
-  cust = get_compunit_symtab (per_cu);
-  if (cust != NULL)
-    {
-      /* If this is a type unit only add its symbol table if we haven't
-	 seen it yet (type unit per_cu's can share symtabs).  */
-      if (per_cu->is_debug_types)
-	{
-	  slot = htab_find_slot (all_type_symtabs, cust, INSERT);
-	  if (*slot == NULL)
-	    {
-	      *slot = cust;
-	      result->push_back (cust);
-	      if (cust->user == NULL)
-		cust->user = immediate_parent;
-	    }
-	}
-      else
-	{
-	  result->push_back (cust);
-	  if (cust->user == NULL)
-	    cust->user = immediate_parent;
-	}
-    }
-
-  if (!per_cu->imported_symtabs_empty ())
-    for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs)
-      {
-	recursively_compute_inclusions (result, all_children,
-					all_type_symtabs, ptr, cust);
-      }
-}
-
-/* Compute the compunit_symtab 'includes' fields for the compunit_symtab of
-   PER_CU.  */
-
-static void
-compute_compunit_symtab_includes (struct dwarf2_per_cu_data *per_cu)
-{
-  gdb_assert (! per_cu->is_debug_types);
-
-  if (!per_cu->imported_symtabs_empty ())
-    {
-      int len;
-      std::vector<compunit_symtab *> result_symtabs;
-      htab_t all_children, all_type_symtabs;
-      struct compunit_symtab *cust = get_compunit_symtab (per_cu);
-
-      /* If we don't have a symtab, we can just skip this case.  */
-      if (cust == NULL)
-	return;
-
-      all_children = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer,
-					NULL, xcalloc, xfree);
-      all_type_symtabs = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer,
-					    NULL, xcalloc, xfree);
-
-      for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs)
-	{
-	  recursively_compute_inclusions (&result_symtabs, all_children,
-					  all_type_symtabs, ptr, cust);
-	}
-
-      /* Now we have a transitive closure of all the included symtabs.  */
-      len = result_symtabs.size ();
-      cust->includes
-	= XOBNEWVEC (&per_cu->dwarf2_per_objfile->objfile->objfile_obstack,
-		     struct compunit_symtab *, len + 1);
-      memcpy (cust->includes, result_symtabs.data (),
-	      len * sizeof (compunit_symtab *));
-      cust->includes[len] = NULL;
-
-      htab_delete (all_children);
-      htab_delete (all_type_symtabs);
-    }
-}
-
-/* Compute the 'includes' field for the symtabs of all the CUs we just
-   read.  */
-
-static void
-process_cu_includes (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  for (dwarf2_per_cu_data *iter : dwarf2_per_objfile->just_read_cus)
-    {
-      if (! iter->is_debug_types)
-	compute_compunit_symtab_includes (iter);
-    }
-
-  dwarf2_per_objfile->just_read_cus.clear ();
-}
-
-/* Generate full symbol information for PER_CU, whose DIEs have
-   already been loaded into memory.  */
-
-static void
-process_full_comp_unit (struct dwarf2_per_cu_data *per_cu,
-			enum language pretend_language)
-{
-  struct dwarf2_cu *cu = per_cu->cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  CORE_ADDR lowpc, highpc;
-  struct compunit_symtab *cust;
-  CORE_ADDR baseaddr;
-  struct block *static_block;
-  CORE_ADDR addr;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  /* Clear the list here in case something was left over.  */
-  cu->method_list.clear ();
-
-  cu->language = pretend_language;
-  cu->language_defn = language_def (cu->language);
-
-  /* Do line number decoding in read_file_scope () */
-  process_die (cu->dies, cu);
-
-  /* For now fudge the Go package.  */
-  if (cu->language == language_go)
-    fixup_go_packaging (cu);
-
-  /* Now that we have processed all the DIEs in the CU, all the types
-     should be complete, and it should now be safe to compute all of the
-     physnames.  */
-  compute_delayed_physnames (cu);
-
-  if (cu->language == language_rust)
-    rust_union_quirks (cu);
-
-  /* Some compilers don't define a DW_AT_high_pc attribute for the
-     compilation unit.  If the DW_AT_high_pc is missing, synthesize
-     it, by scanning the DIE's below the compilation unit.  */
-  get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu);
-
-  addr = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
-  static_block = cu->get_builder ()->end_symtab_get_static_block (addr, 0, 1);
-
-  /* If the comp unit has DW_AT_ranges, it may have discontiguous ranges.
-     Also, DW_AT_ranges may record ranges not belonging to any child DIEs
-     (such as virtual method tables).  Record the ranges in STATIC_BLOCK's
-     addrmap to help ensure it has an accurate map of pc values belonging to
-     this comp unit.  */
-  dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu);
-
-  cust = cu->get_builder ()->end_symtab_from_static_block (static_block,
-						    SECT_OFF_TEXT (objfile),
-						    0);
-
-  if (cust != NULL)
-    {
-      int gcc_4_minor = producer_is_gcc_ge_4 (cu->producer);
-
-      /* Set symtab language to language from DW_AT_language.  If the
-	 compilation is from a C file generated by language preprocessors, do
-	 not set the language if it was already deduced by start_subfile.  */
-      if (!(cu->language == language_c
-	    && COMPUNIT_FILETABS (cust)->language != language_unknown))
-	COMPUNIT_FILETABS (cust)->language = cu->language;
-
-      /* GCC-4.0 has started to support -fvar-tracking.  GCC-3.x still can
-	 produce DW_AT_location with location lists but it can be possibly
-	 invalid without -fvar-tracking.  Still up to GCC-4.4.x incl. 4.4.0
-	 there were bugs in prologue debug info, fixed later in GCC-4.5
-	 by "unwind info for epilogues" patch (which is not directly related).
-
-	 For -gdwarf-4 type units LOCATIONS_VALID indication is fortunately not
-	 needed, it would be wrong due to missing DW_AT_producer there.
-
-	 Still one can confuse GDB by using non-standard GCC compilation
-	 options - this waits on GCC PR other/32998 (-frecord-gcc-switches).
-	 */
-      if (cu->has_loclist && gcc_4_minor >= 5)
-	cust->locations_valid = 1;
-
-      if (gcc_4_minor >= 5)
-	cust->epilogue_unwind_valid = 1;
-
-      cust->call_site_htab = cu->call_site_htab;
-    }
-
-  if (dwarf2_per_objfile->using_index)
-    per_cu->v.quick->compunit_symtab = cust;
-  else
-    {
-      struct partial_symtab *pst = per_cu->v.psymtab;
-      pst->compunit_symtab = cust;
-      pst->readin = 1;
-    }
-
-  /* Push it for inclusion processing later.  */
-  dwarf2_per_objfile->just_read_cus.push_back (per_cu);
-
-  /* Not needed any more.  */
-  cu->reset_builder ();
-}
-
-/* Generate full symbol information for type unit PER_CU, whose DIEs have
-   already been loaded into memory.  */
-
-static void
-process_full_type_unit (struct dwarf2_per_cu_data *per_cu,
-			enum language pretend_language)
-{
-  struct dwarf2_cu *cu = per_cu->cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct compunit_symtab *cust;
-  struct signatured_type *sig_type;
-
-  gdb_assert (per_cu->is_debug_types);
-  sig_type = (struct signatured_type *) per_cu;
-
-  /* Clear the list here in case something was left over.  */
-  cu->method_list.clear ();
-
-  cu->language = pretend_language;
-  cu->language_defn = language_def (cu->language);
-
-  /* The symbol tables are set up in read_type_unit_scope.  */
-  process_die (cu->dies, cu);
-
-  /* For now fudge the Go package.  */
-  if (cu->language == language_go)
-    fixup_go_packaging (cu);
-
-  /* Now that we have processed all the DIEs in the CU, all the types
-     should be complete, and it should now be safe to compute all of the
-     physnames.  */
-  compute_delayed_physnames (cu);
-
-  if (cu->language == language_rust)
-    rust_union_quirks (cu);
-
-  /* TUs share symbol tables.
-     If this is the first TU to use this symtab, complete the construction
-     of it with end_expandable_symtab.  Otherwise, complete the addition of
-     this TU's symbols to the existing symtab.  */
-  if (sig_type->type_unit_group->compunit_symtab == NULL)
-    {
-      buildsym_compunit *builder = cu->get_builder ();
-      cust = builder->end_expandable_symtab (0, SECT_OFF_TEXT (objfile));
-      sig_type->type_unit_group->compunit_symtab = cust;
-
-      if (cust != NULL)
-	{
-	  /* Set symtab language to language from DW_AT_language.  If the
-	     compilation is from a C file generated by language preprocessors,
-	     do not set the language if it was already deduced by
-	     start_subfile.  */
-	  if (!(cu->language == language_c
-		&& COMPUNIT_FILETABS (cust)->language != language_c))
-	    COMPUNIT_FILETABS (cust)->language = cu->language;
-	}
-    }
-  else
-    {
-      cu->get_builder ()->augment_type_symtab ();
-      cust = sig_type->type_unit_group->compunit_symtab;
-    }
-
-  if (dwarf2_per_objfile->using_index)
-    per_cu->v.quick->compunit_symtab = cust;
-  else
-    {
-      struct partial_symtab *pst = per_cu->v.psymtab;
-      pst->compunit_symtab = cust;
-      pst->readin = 1;
-    }
-
-  /* Not needed any more.  */
-  cu->reset_builder ();
-}
-
-/* Process an imported unit DIE.  */
-
-static void
-process_imported_unit_die (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  /* For now we don't handle imported units in type units.  */
-  if (cu->per_cu->is_debug_types)
-    {
-      error (_("Dwarf Error: DW_TAG_imported_unit is not"
-	       " supported in type units [in module %s]"),
-	     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-    }
-
-  attr = dwarf2_attr (die, DW_AT_import, cu);
-  if (attr != NULL)
-    {
-      sect_offset sect_off = dwarf2_get_ref_die_offset (attr);
-      bool is_dwz = (attr->form == DW_FORM_GNU_ref_alt || cu->per_cu->is_dwz);
-      dwarf2_per_cu_data *per_cu
-	= dwarf2_find_containing_comp_unit (sect_off, is_dwz,
-					    cu->per_cu->dwarf2_per_objfile);
-
-      /* If necessary, add it to the queue and load its DIEs.  */
-      if (maybe_queue_comp_unit (cu, per_cu, cu->language))
-	load_full_comp_unit (per_cu, false, cu->language);
-
-      cu->per_cu->imported_symtabs_push (per_cu);
-    }
-}
-
-/* RAII object that represents a process_die scope: i.e.,
-   starts/finishes processing a DIE.  */
-class process_die_scope
-{
-public:
-  process_die_scope (die_info *die, dwarf2_cu *cu)
-    : m_die (die), m_cu (cu)
-  {
-    /* We should only be processing DIEs not already in process.  */
-    gdb_assert (!m_die->in_process);
-    m_die->in_process = true;
-  }
-
-  ~process_die_scope ()
-  {
-    m_die->in_process = false;
-
-    /* If we're done processing the DIE for the CU that owns the line
-       header, we don't need the line header anymore.  */
-    if (m_cu->line_header_die_owner == m_die)
-      {
-	delete m_cu->line_header;
-	m_cu->line_header = NULL;
-	m_cu->line_header_die_owner = NULL;
-      }
-  }
-
-private:
-  die_info *m_die;
-  dwarf2_cu *m_cu;
-};
-
-/* Process a die and its children.  */
-
-static void
-process_die (struct die_info *die, struct dwarf2_cu *cu)
-{
-  process_die_scope scope (die, cu);
-
-  switch (die->tag)
-    {
-    case DW_TAG_padding:
-      break;
-    case DW_TAG_compile_unit:
-    case DW_TAG_partial_unit:
-      read_file_scope (die, cu);
-      break;
-    case DW_TAG_type_unit:
-      read_type_unit_scope (die, cu);
-      break;
-    case DW_TAG_subprogram:
-      /* Nested subprograms in Fortran get a prefix.  */
-      if (cu->language == language_fortran
-	  && die->parent != NULL
-	  && die->parent->tag == DW_TAG_subprogram)
-	cu->processing_has_namespace_info = true;
-      /* Fall through.  */
-    case DW_TAG_inlined_subroutine:
-      read_func_scope (die, cu);
-      break;
-    case DW_TAG_lexical_block:
-    case DW_TAG_try_block:
-    case DW_TAG_catch_block:
-      read_lexical_block_scope (die, cu);
-      break;
-    case DW_TAG_call_site:
-    case DW_TAG_GNU_call_site:
-      read_call_site_scope (die, cu);
-      break;
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-      process_structure_scope (die, cu);
-      break;
-    case DW_TAG_enumeration_type:
-      process_enumeration_scope (die, cu);
-      break;
-
-    /* These dies have a type, but processing them does not create
-       a symbol or recurse to process the children.  Therefore we can
-       read them on-demand through read_type_die.  */
-    case DW_TAG_subroutine_type:
-    case DW_TAG_set_type:
-    case DW_TAG_array_type:
-    case DW_TAG_pointer_type:
-    case DW_TAG_ptr_to_member_type:
-    case DW_TAG_reference_type:
-    case DW_TAG_rvalue_reference_type:
-    case DW_TAG_string_type:
-      break;
-
-    case DW_TAG_base_type:
-    case DW_TAG_subrange_type:
-    case DW_TAG_typedef:
-      /* Add a typedef symbol for the type definition, if it has a
-         DW_AT_name.  */
-      new_symbol (die, read_type_die (die, cu), cu);
-      break;
-    case DW_TAG_common_block:
-      read_common_block (die, cu);
-      break;
-    case DW_TAG_common_inclusion:
-      break;
-    case DW_TAG_namespace:
-      cu->processing_has_namespace_info = true;
-      read_namespace (die, cu);
-      break;
-    case DW_TAG_module:
-      cu->processing_has_namespace_info = true;
-      read_module (die, cu);
-      break;
-    case DW_TAG_imported_declaration:
-      cu->processing_has_namespace_info = true;
-      if (read_namespace_alias (die, cu))
-	break;
-      /* The declaration is not a global namespace alias.  */
-      /* Fall through.  */
-    case DW_TAG_imported_module:
-      cu->processing_has_namespace_info = true;
-      if (die->child != NULL && (die->tag == DW_TAG_imported_declaration
-				 || cu->language != language_fortran))
-	complaint (_("Tag '%s' has unexpected children"),
-		   dwarf_tag_name (die->tag));
-      read_import_statement (die, cu);
-      break;
-
-    case DW_TAG_imported_unit:
-      process_imported_unit_die (die, cu);
-      break;
-
-    case DW_TAG_variable:
-      read_variable (die, cu);
-      break;
-
-    default:
-      new_symbol (die, NULL, cu);
-      break;
-    }
-}
-
-/* DWARF name computation.  */
-
-/* A helper function for dwarf2_compute_name which determines whether DIE
-   needs to have the name of the scope prepended to the name listed in the
-   die.  */
-
-static int
-die_needs_namespace (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  switch (die->tag)
-    {
-    case DW_TAG_namespace:
-    case DW_TAG_typedef:
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-    case DW_TAG_enumeration_type:
-    case DW_TAG_enumerator:
-    case DW_TAG_subprogram:
-    case DW_TAG_inlined_subroutine:
-    case DW_TAG_member:
-    case DW_TAG_imported_declaration:
-      return 1;
-
-    case DW_TAG_variable:
-    case DW_TAG_constant:
-      /* We only need to prefix "globally" visible variables.  These include
-	 any variable marked with DW_AT_external or any variable that
-	 lives in a namespace.  [Variables in anonymous namespaces
-	 require prefixing, but they are not DW_AT_external.]  */
-
-      if (dwarf2_attr (die, DW_AT_specification, cu))
-	{
-	  struct dwarf2_cu *spec_cu = cu;
-
-	  return die_needs_namespace (die_specification (die, &spec_cu),
-				      spec_cu);
-	}
-
-      attr = dwarf2_attr (die, DW_AT_external, cu);
-      if (attr == NULL && die->parent->tag != DW_TAG_namespace
-	  && die->parent->tag != DW_TAG_module)
-	return 0;
-      /* A variable in a lexical block of some kind does not need a
-	 namespace, even though in C++ such variables may be external
-	 and have a mangled name.  */
-      if (die->parent->tag ==  DW_TAG_lexical_block
-	  || die->parent->tag ==  DW_TAG_try_block
-	  || die->parent->tag ==  DW_TAG_catch_block
-	  || die->parent->tag == DW_TAG_subprogram)
-	return 0;
-      return 1;
-
-    default:
-      return 0;
-    }
-}
-
-/* Return the DIE's linkage name attribute, either DW_AT_linkage_name
-   or DW_AT_MIPS_linkage_name.  Returns NULL if the attribute is not
-   defined for the given DIE.  */
-
-static struct attribute *
-dw2_linkage_name_attr (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_linkage_name, cu);
-  if (attr == NULL)
-    attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu);
-
-  return attr;
-}
-
-/* Return the DIE's linkage name as a string, either DW_AT_linkage_name
-   or DW_AT_MIPS_linkage_name.  Returns NULL if the attribute is not
-   defined for the given DIE.  */
-
-static const char *
-dw2_linkage_name (struct die_info *die, struct dwarf2_cu *cu)
-{
-  const char *linkage_name;
-
-  linkage_name = dwarf2_string_attr (die, DW_AT_linkage_name, cu);
-  if (linkage_name == NULL)
-    linkage_name = dwarf2_string_attr (die, DW_AT_MIPS_linkage_name, cu);
-
-  return linkage_name;
-}
-
-/* Compute the fully qualified name of DIE in CU.  If PHYSNAME is nonzero,
-   compute the physname for the object, which include a method's:
-   - formal parameters (C++),
-   - receiver type (Go),
-
-   The term "physname" is a bit confusing.
-   For C++, for example, it is the demangled name.
-   For Go, for example, it's the mangled name.
-
-   For Ada, return the DIE's linkage name rather than the fully qualified
-   name.  PHYSNAME is ignored..
-
-   The result is allocated on the objfile_obstack and canonicalized.  */
-
-static const char *
-dwarf2_compute_name (const char *name,
-		     struct die_info *die, struct dwarf2_cu *cu,
-		     int physname)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-
-  if (name == NULL)
-    name = dwarf2_name (die, cu);
-
-  /* For Fortran GDB prefers DW_AT_*linkage_name for the physname if present
-     but otherwise compute it by typename_concat inside GDB.
-     FIXME: Actually this is not really true, or at least not always true.
-     It's all very confusing.  SYMBOL_SET_NAMES doesn't try to demangle
-     Fortran names because there is no mangling standard.  So new_symbol
-     will set the demangled name to the result of dwarf2_full_name, and it is
-     the demangled name that GDB uses if it exists.  */
-  if (cu->language == language_ada
-      || (cu->language == language_fortran && physname))
-    {
-      /* For Ada unit, we prefer the linkage name over the name, as
-	 the former contains the exported name, which the user expects
-	 to be able to reference.  Ideally, we want the user to be able
-	 to reference this entity using either natural or linkage name,
-	 but we haven't started looking at this enhancement yet.  */
-      const char *linkage_name = dw2_linkage_name (die, cu);
-
-      if (linkage_name != NULL)
-	return linkage_name;
-    }
-
-  /* These are the only languages we know how to qualify names in.  */
-  if (name != NULL
-      && (cu->language == language_cplus
-	  || cu->language == language_fortran || cu->language == language_d
-	  || cu->language == language_rust))
-    {
-      if (die_needs_namespace (die, cu))
-	{
-	  const char *prefix;
-	  const char *canonical_name = NULL;
-
-	  string_file buf;
-
-	  prefix = determine_prefix (die, cu);
-	  if (*prefix != '\0')
-	    {
-	      char *prefixed_name = typename_concat (NULL, prefix, name,
-						     physname, cu);
-
-	      buf.puts (prefixed_name);
-	      xfree (prefixed_name);
-	    }
-	  else
-	    buf.puts (name);
-
-	  /* Template parameters may be specified in the DIE's DW_AT_name, or
-	     as children with DW_TAG_template_type_param or
-	     DW_TAG_value_type_param.  If the latter, add them to the name
-	     here.  If the name already has template parameters, then
-	     skip this step; some versions of GCC emit both, and
-	     it is more efficient to use the pre-computed name.
-
-	     Something to keep in mind about this process: it is very
-	     unlikely, or in some cases downright impossible, to produce
-	     something that will match the mangled name of a function.
-	     If the definition of the function has the same debug info,
-	     we should be able to match up with it anyway.  But fallbacks
-	     using the minimal symbol, for instance to find a method
-	     implemented in a stripped copy of libstdc++, will not work.
-	     If we do not have debug info for the definition, we will have to
-	     match them up some other way.
-
-	     When we do name matching there is a related problem with function
-	     templates; two instantiated function templates are allowed to
-	     differ only by their return types, which we do not add here.  */
-
-	  if (cu->language == language_cplus && strchr (name, '<') == NULL)
-	    {
-	      struct attribute *attr;
-	      struct die_info *child;
-	      int first = 1;
-
-	      die->building_fullname = 1;
-
-	      for (child = die->child; child != NULL; child = child->sibling)
-		{
-		  struct type *type;
-		  LONGEST value;
-		  const gdb_byte *bytes;
-		  struct dwarf2_locexpr_baton *baton;
-		  struct value *v;
-
-		  if (child->tag != DW_TAG_template_type_param
-		      && child->tag != DW_TAG_template_value_param)
-		    continue;
-
-		  if (first)
-		    {
-		      buf.puts ("<");
-		      first = 0;
-		    }
-		  else
-		    buf.puts (", ");
-
-		  attr = dwarf2_attr (child, DW_AT_type, cu);
-		  if (attr == NULL)
-		    {
-		      complaint (_("template parameter missing DW_AT_type"));
-		      buf.puts ("UNKNOWN_TYPE");
-		      continue;
-		    }
-		  type = die_type (child, cu);
-
-		  if (child->tag == DW_TAG_template_type_param)
-		    {
-		      c_print_type (type, "", &buf, -1, 0, cu->language,
-				    &type_print_raw_options);
-		      continue;
-		    }
-
-		  attr = dwarf2_attr (child, DW_AT_const_value, cu);
-		  if (attr == NULL)
-		    {
-		      complaint (_("template parameter missing "
-				   "DW_AT_const_value"));
-		      buf.puts ("UNKNOWN_VALUE");
-		      continue;
-		    }
-
-		  dwarf2_const_value_attr (attr, type, name,
-					   &cu->comp_unit_obstack, cu,
-					   &value, &bytes, &baton);
-
-		  if (TYPE_NOSIGN (type))
-		    /* GDB prints characters as NUMBER 'CHAR'.  If that's
-		       changed, this can use value_print instead.  */
-		    c_printchar (value, type, &buf);
-		  else
-		    {
-		      struct value_print_options opts;
-
-		      if (baton != NULL)
-			v = dwarf2_evaluate_loc_desc (type, NULL,
-						      baton->data,
-						      baton->size,
-						      baton->per_cu);
-		      else if (bytes != NULL)
-			{
-			  v = allocate_value (type);
-			  memcpy (value_contents_writeable (v), bytes,
-				  TYPE_LENGTH (type));
-			}
-		      else
-			v = value_from_longest (type, value);
-
-		      /* Specify decimal so that we do not depend on
-			 the radix.  */
-		      get_formatted_print_options (&opts, 'd');
-		      opts.raw = 1;
-		      value_print (v, &buf, &opts);
-		      release_value (v);
-		    }
-		}
-
-	      die->building_fullname = 0;
-
-	      if (!first)
-		{
-		  /* Close the argument list, with a space if necessary
-		     (nested templates).  */
-		  if (!buf.empty () && buf.string ().back () == '>')
-		    buf.puts (" >");
-		  else
-		    buf.puts (">");
-		}
-	    }
-
-	  /* For C++ methods, append formal parameter type
-	     information, if PHYSNAME.  */
-
-	  if (physname && die->tag == DW_TAG_subprogram
-	      && cu->language == language_cplus)
-	    {
-	      struct type *type = read_type_die (die, cu);
-
-	      c_type_print_args (type, &buf, 1, cu->language,
-				 &type_print_raw_options);
-
-	      if (cu->language == language_cplus)
-		{
-		  /* Assume that an artificial first parameter is
-		     "this", but do not crash if it is not.  RealView
-		     marks unnamed (and thus unused) parameters as
-		     artificial; there is no way to differentiate
-		     the two cases.  */
-		  if (TYPE_NFIELDS (type) > 0
-		      && TYPE_FIELD_ARTIFICIAL (type, 0)
-		      && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_PTR
-		      && TYPE_CONST (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type,
-									0))))
-		    buf.puts (" const");
-		}
-	    }
-
-	  const std::string &intermediate_name = buf.string ();
-
-	  if (cu->language == language_cplus)
-	    canonical_name
-	      = dwarf2_canonicalize_name (intermediate_name.c_str (), cu,
-					  &objfile->per_bfd->storage_obstack);
-
-	  /* If we only computed INTERMEDIATE_NAME, or if
-	     INTERMEDIATE_NAME is already canonical, then we need to
-	     copy it to the appropriate obstack.  */
-	  if (canonical_name == NULL || canonical_name == intermediate_name.c_str ())
-	    name = obstack_strdup (&objfile->per_bfd->storage_obstack,
-				   intermediate_name);
-	  else
-	    name = canonical_name;
-	}
-    }
-
-  return name;
-}
-
-/* Return the fully qualified name of DIE, based on its DW_AT_name.
-   If scope qualifiers are appropriate they will be added.  The result
-   will be allocated on the storage_obstack, or NULL if the DIE does
-   not have a name.  NAME may either be from a previous call to
-   dwarf2_name or NULL.
-
-   The output string will be canonicalized (if C++).  */
-
-static const char *
-dwarf2_full_name (const char *name, struct die_info *die, struct dwarf2_cu *cu)
-{
-  return dwarf2_compute_name (name, die, cu, 0);
-}
-
-/* Construct a physname for the given DIE in CU.  NAME may either be
-   from a previous call to dwarf2_name or NULL.  The result will be
-   allocated on the objfile_objstack or NULL if the DIE does not have a
-   name.
-
-   The output string will be canonicalized (if C++).  */
-
-static const char *
-dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  const char *retval, *mangled = NULL, *canon = NULL;
-  int need_copy = 1;
-
-  /* In this case dwarf2_compute_name is just a shortcut not building anything
-     on its own.  */
-  if (!die_needs_namespace (die, cu))
-    return dwarf2_compute_name (name, die, cu, 1);
-
-  mangled = dw2_linkage_name (die, cu);
-
-  /* rustc emits invalid values for DW_AT_linkage_name.  Ignore these.
-     See https://github.com/rust-lang/rust/issues/32925.  */
-  if (cu->language == language_rust && mangled != NULL
-      && strchr (mangled, '{') != NULL)
-    mangled = NULL;
-
-  /* DW_AT_linkage_name is missing in some cases - depend on what GDB
-     has computed.  */
-  gdb::unique_xmalloc_ptr<char> demangled;
-  if (mangled != NULL)
-    {
-
-      if (language_def (cu->language)->la_store_sym_names_in_linkage_form_p)
-	{
-	  /* Do nothing (do not demangle the symbol name).  */
-	}
-      else if (cu->language == language_go)
-	{
-	  /* This is a lie, but we already lie to the caller new_symbol.
-	     new_symbol assumes we return the mangled name.
-	     This just undoes that lie until things are cleaned up.  */
-	}
-      else
-	{
-	  /* Use DMGL_RET_DROP for C++ template functions to suppress
-	     their return type.  It is easier for GDB users to search
-	     for such functions as `name(params)' than `long name(params)'.
-	     In such case the minimal symbol names do not match the full
-	     symbol names but for template functions there is never a need
-	     to look up their definition from their declaration so
-	     the only disadvantage remains the minimal symbol variant
-	     `long name(params)' does not have the proper inferior type.  */
-	  demangled.reset (gdb_demangle (mangled,
-					 (DMGL_PARAMS | DMGL_ANSI
-					  | DMGL_RET_DROP)));
-	}
-      if (demangled)
-	canon = demangled.get ();
-      else
-	{
-	  canon = mangled;
-	  need_copy = 0;
-	}
-    }
-
-  if (canon == NULL || check_physname)
-    {
-      const char *physname = dwarf2_compute_name (name, die, cu, 1);
-
-      if (canon != NULL && strcmp (physname, canon) != 0)
-	{
-	  /* It may not mean a bug in GDB.  The compiler could also
-	     compute DW_AT_linkage_name incorrectly.  But in such case
-	     GDB would need to be bug-to-bug compatible.  */
-
-	  complaint (_("Computed physname <%s> does not match demangled <%s> "
-		       "(from linkage <%s>) - DIE at %s [in module %s]"),
-		     physname, canon, mangled, sect_offset_str (die->sect_off),
-		     objfile_name (objfile));
-
-	  /* Prefer DW_AT_linkage_name (in the CANON form) - when it
-	     is available here - over computed PHYSNAME.  It is safer
-	     against both buggy GDB and buggy compilers.  */
-
-	  retval = canon;
-	}
-      else
-	{
-	  retval = physname;
-	  need_copy = 0;
-	}
-    }
-  else
-    retval = canon;
-
-  if (need_copy)
-    retval = obstack_strdup (&objfile->per_bfd->storage_obstack, retval);
-
-  return retval;
-}
-
-/* Inspect DIE in CU for a namespace alias.  If one exists, record
-   a new symbol for it.
-
-   Returns 1 if a namespace alias was recorded, 0 otherwise.  */
-
-static int
-read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  /* If the die does not have a name, this is not a namespace
-     alias.  */
-  attr = dwarf2_attr (die, DW_AT_name, cu);
-  if (attr != NULL)
-    {
-      int num;
-      struct die_info *d = die;
-      struct dwarf2_cu *imported_cu = cu;
-
-      /* If the compiler has nested DW_AT_imported_declaration DIEs,
-	 keep inspecting DIEs until we hit the underlying import.  */
-#define MAX_NESTED_IMPORTED_DECLARATIONS 100
-      for (num = 0; num  < MAX_NESTED_IMPORTED_DECLARATIONS; ++num)
-	{
-	  attr = dwarf2_attr (d, DW_AT_import, cu);
-	  if (attr == NULL)
-	    break;
-
-	  d = follow_die_ref (d, attr, &imported_cu);
-	  if (d->tag != DW_TAG_imported_declaration)
-	    break;
-	}
-
-      if (num == MAX_NESTED_IMPORTED_DECLARATIONS)
-	{
-	  complaint (_("DIE at %s has too many recursively imported "
-		       "declarations"), sect_offset_str (d->sect_off));
-	  return 0;
-	}
-
-      if (attr != NULL)
-	{
-	  struct type *type;
-	  sect_offset sect_off = dwarf2_get_ref_die_offset (attr);
-
-	  type = get_die_type_at_offset (sect_off, cu->per_cu);
-	  if (type != NULL && TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
-	    {
-	      /* This declaration is a global namespace alias.  Add
-		 a symbol for it whose type is the aliased namespace.  */
-	      new_symbol (die, type, cu);
-	      return 1;
-	    }
-	}
-    }
-
-  return 0;
-}
-
-/* Return the using directives repository (global or local?) to use in the
-   current context for CU.
-
-   For Ada, imported declarations can materialize renamings, which *may* be
-   global.  However it is impossible (for now?) in DWARF to distinguish
-   "external" imported declarations and "static" ones.  As all imported
-   declarations seem to be static in all other languages, make them all CU-wide
-   global only in Ada.  */
-
-static struct using_direct **
-using_directives (struct dwarf2_cu *cu)
-{
-  if (cu->language == language_ada
-      && cu->get_builder ()->outermost_context_p ())
-    return cu->get_builder ()->get_global_using_directives ();
-  else
-    return cu->get_builder ()->get_local_using_directives ();
-}
-
-/* Read the import statement specified by the given die and record it.  */
-
-static void
-read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct attribute *import_attr;
-  struct die_info *imported_die, *child_die;
-  struct dwarf2_cu *imported_cu;
-  const char *imported_name;
-  const char *imported_name_prefix;
-  const char *canonical_name;
-  const char *import_alias;
-  const char *imported_declaration = NULL;
-  const char *import_prefix;
-  std::vector<const char *> excludes;
-
-  import_attr = dwarf2_attr (die, DW_AT_import, cu);
-  if (import_attr == NULL)
-    {
-      complaint (_("Tag '%s' has no DW_AT_import"),
-		 dwarf_tag_name (die->tag));
-      return;
-    }
-
-  imported_cu = cu;
-  imported_die = follow_die_ref_or_sig (die, import_attr, &imported_cu);
-  imported_name = dwarf2_name (imported_die, imported_cu);
-  if (imported_name == NULL)
-    {
-      /* GCC bug: https://bugzilla.redhat.com/show_bug.cgi?id=506524
-
-        The import in the following code:
-        namespace A
-          {
-            typedef int B;
-          }
-
-        int main ()
-          {
-            using A::B;
-            B b;
-            return b;
-          }
-
-        ...
-         <2><51>: Abbrev Number: 3 (DW_TAG_imported_declaration)
-            <52>   DW_AT_decl_file   : 1
-            <53>   DW_AT_decl_line   : 6
-            <54>   DW_AT_import      : <0x75>
-         <2><58>: Abbrev Number: 4 (DW_TAG_typedef)
-            <59>   DW_AT_name        : B
-            <5b>   DW_AT_decl_file   : 1
-            <5c>   DW_AT_decl_line   : 2
-            <5d>   DW_AT_type        : <0x6e>
-        ...
-         <1><75>: Abbrev Number: 7 (DW_TAG_base_type)
-            <76>   DW_AT_byte_size   : 4
-            <77>   DW_AT_encoding    : 5        (signed)
-
-        imports the wrong die ( 0x75 instead of 0x58 ).
-        This case will be ignored until the gcc bug is fixed.  */
-      return;
-    }
-
-  /* Figure out the local name after import.  */
-  import_alias = dwarf2_name (die, cu);
-
-  /* Figure out where the statement is being imported to.  */
-  import_prefix = determine_prefix (die, cu);
-
-  /* Figure out what the scope of the imported die is and prepend it
-     to the name of the imported die.  */
-  imported_name_prefix = determine_prefix (imported_die, imported_cu);
-
-  if (imported_die->tag != DW_TAG_namespace
-      && imported_die->tag != DW_TAG_module)
-    {
-      imported_declaration = imported_name;
-      canonical_name = imported_name_prefix;
-    }
-  else if (strlen (imported_name_prefix) > 0)
-    canonical_name = obconcat (&objfile->objfile_obstack,
-			       imported_name_prefix,
-			       (cu->language == language_d ? "." : "::"),
-			       imported_name, (char *) NULL);
-  else
-    canonical_name = imported_name;
-
-  if (die->tag == DW_TAG_imported_module && cu->language == language_fortran)
-    for (child_die = die->child; child_die && child_die->tag;
-	 child_die = sibling_die (child_die))
-      {
-	/* DWARF-4: A Fortran use statement with a â€œrename listâ€� may be
-	   represented by an imported module entry with an import attribute
-	   referring to the module and owned entries corresponding to those
-	   entities that are renamed as part of being imported.  */
-
-	if (child_die->tag != DW_TAG_imported_declaration)
-	  {
-	    complaint (_("child DW_TAG_imported_declaration expected "
-			 "- DIE at %s [in module %s]"),
-		       sect_offset_str (child_die->sect_off),
-		       objfile_name (objfile));
-	    continue;
-	  }
-
-	import_attr = dwarf2_attr (child_die, DW_AT_import, cu);
-	if (import_attr == NULL)
-	  {
-	    complaint (_("Tag '%s' has no DW_AT_import"),
-		       dwarf_tag_name (child_die->tag));
-	    continue;
-	  }
-
-	imported_cu = cu;
-	imported_die = follow_die_ref_or_sig (child_die, import_attr,
-					      &imported_cu);
-	imported_name = dwarf2_name (imported_die, imported_cu);
-	if (imported_name == NULL)
-	  {
-	    complaint (_("child DW_TAG_imported_declaration has unknown "
-			 "imported name - DIE at %s [in module %s]"),
-		       sect_offset_str (child_die->sect_off),
-		       objfile_name (objfile));
-	    continue;
-	  }
-
-	excludes.push_back (imported_name);
-
-	process_die (child_die, cu);
-      }
-
-  add_using_directive (using_directives (cu),
-		       import_prefix,
-		       canonical_name,
-		       import_alias,
-		       imported_declaration,
-		       excludes,
-		       0,
-		       &objfile->objfile_obstack);
-}
-
-/* ICC<14 does not output the required DW_AT_declaration on incomplete
-   types, but gives them a size of zero.  Starting with version 14,
-   ICC is compatible with GCC.  */
-
-static bool
-producer_is_icc_lt_14 (struct dwarf2_cu *cu)
-{
-  if (!cu->checked_producer)
-    check_producer (cu);
-
-  return cu->producer_is_icc_lt_14;
-}
-
-/* ICC generates a DW_AT_type for C void functions.  This was observed on
-   ICC 14.0.5.212, and appears to be against the DWARF spec (V5 3.3.2)
-   which says that void functions should not have a DW_AT_type.  */
-
-static bool
-producer_is_icc (struct dwarf2_cu *cu)
-{
-  if (!cu->checked_producer)
-    check_producer (cu);
-
-  return cu->producer_is_icc;
-}
-
-/* Check for possibly missing DW_AT_comp_dir with relative .debug_line
-   directory paths.  GCC SVN r127613 (new option -fdebug-prefix-map) fixed
-   this, it was first present in GCC release 4.3.0.  */
-
-static bool
-producer_is_gcc_lt_4_3 (struct dwarf2_cu *cu)
-{
-  if (!cu->checked_producer)
-    check_producer (cu);
-
-  return cu->producer_is_gcc_lt_4_3;
-}
-
-static file_and_directory
-find_file_and_directory (struct die_info *die, struct dwarf2_cu *cu)
-{
-  file_and_directory res;
-
-  /* Find the filename.  Do not use dwarf2_name here, since the filename
-     is not a source language identifier.  */
-  res.name = dwarf2_string_attr (die, DW_AT_name, cu);
-  res.comp_dir = dwarf2_string_attr (die, DW_AT_comp_dir, cu);
-
-  if (res.comp_dir == NULL
-      && producer_is_gcc_lt_4_3 (cu) && res.name != NULL
-      && IS_ABSOLUTE_PATH (res.name))
-    {
-      res.comp_dir_storage = ldirname (res.name);
-      if (!res.comp_dir_storage.empty ())
-	res.comp_dir = res.comp_dir_storage.c_str ();
-    }
-  if (res.comp_dir != NULL)
-    {
-      /* Irix 6.2 native cc prepends <machine>.: to the compilation
-	 directory, get rid of it.  */
-      const char *cp = strchr (res.comp_dir, ':');
-
-      if (cp && cp != res.comp_dir && cp[-1] == '.' && cp[1] == '/')
-	res.comp_dir = cp + 1;
-    }
-
-  if (res.name == NULL)
-    res.name = "<unknown>";
-
-  return res;
-}
-
-/* Handle DW_AT_stmt_list for a compilation unit.
-   DIE is the DW_TAG_compile_unit die for CU.
-   COMP_DIR is the compilation directory.  LOWPC is passed to
-   dwarf_decode_lines.  See dwarf_decode_lines comments about it.  */
-
-static void
-handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
-			const char *comp_dir, CORE_ADDR lowpc) /* ARI: editCase function */
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct attribute *attr;
-  struct line_header line_header_local;
-  hashval_t line_header_local_hash;
-  void **slot;
-  int decode_mapping;
-
-  gdb_assert (! cu->per_cu->is_debug_types);
-
-  attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
-  if (attr == NULL)
-    return;
-
-  sect_offset line_offset = (sect_offset) DW_UNSND (attr);
-
-  /* The line header hash table is only created if needed (it exists to
-     prevent redundant reading of the line table for partial_units).
-     If we're given a partial_unit, we'll need it.  If we're given a
-     compile_unit, then use the line header hash table if it's already
-     created, but don't create one just yet.  */
-
-  if (dwarf2_per_objfile->line_header_hash == NULL
-      && die->tag == DW_TAG_partial_unit)
-    {
-      dwarf2_per_objfile->line_header_hash
-	= htab_create_alloc_ex (127, line_header_hash_voidp,
-				line_header_eq_voidp,
-				free_line_header_voidp,
-				&objfile->objfile_obstack,
-				hashtab_obstack_allocate,
-				dummy_obstack_deallocate);
-    }
-
-  line_header_local.sect_off = line_offset;
-  line_header_local.offset_in_dwz = cu->per_cu->is_dwz;
-  line_header_local_hash = line_header_hash (&line_header_local);
-  if (dwarf2_per_objfile->line_header_hash != NULL)
-    {
-      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash,
-				       &line_header_local,
-				       line_header_local_hash, NO_INSERT);
-
-      /* For DW_TAG_compile_unit we need info like symtab::linetable which
-	 is not present in *SLOT (since if there is something in *SLOT then
-	 it will be for a partial_unit).  */
-      if (die->tag == DW_TAG_partial_unit && slot != NULL)
-	{
-	  gdb_assert (*slot != NULL);
-	  cu->line_header = (struct line_header *) *slot;
-	  return;
-	}
-    }
-
-  /* dwarf_decode_line_header does not yet provide sufficient information.
-     We always have to call also dwarf_decode_lines for it.  */
-  line_header_up lh = dwarf_decode_line_header (line_offset, cu);
-  if (lh == NULL)
-    return;
-
-  cu->line_header = lh.release ();
-  cu->line_header_die_owner = die;
-
-  if (dwarf2_per_objfile->line_header_hash == NULL)
-    slot = NULL;
-  else
-    {
-      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash,
-				       &line_header_local,
-				       line_header_local_hash, INSERT);
-      gdb_assert (slot != NULL);
-    }
-  if (slot != NULL && *slot == NULL)
-    {
-      /* This newly decoded line number information unit will be owned
-	 by line_header_hash hash table.  */
-      *slot = cu->line_header;
-      cu->line_header_die_owner = NULL;
-    }
-  else
-    {
-      /* We cannot free any current entry in (*slot) as that struct line_header
-         may be already used by multiple CUs.  Create only temporary decoded
-	 line_header for this CU - it may happen at most once for each line
-	 number information unit.  And if we're not using line_header_hash
-	 then this is what we want as well.  */
-      gdb_assert (die->tag != DW_TAG_partial_unit);
-    }
-  decode_mapping = (die->tag != DW_TAG_partial_unit);
-  dwarf_decode_lines (cu->line_header, comp_dir, cu, NULL, lowpc,
-		      decode_mapping);
-
-}
-
-/* Process DW_TAG_compile_unit or DW_TAG_partial_unit.  */
-
-static void
-read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  CORE_ADDR lowpc = ((CORE_ADDR) -1);
-  CORE_ADDR highpc = ((CORE_ADDR) 0);
-  struct attribute *attr;
-  struct die_info *child_die;
-  CORE_ADDR baseaddr;
-
-  prepare_one_comp_unit (cu, die, cu->language);
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  get_scope_pc_bounds (die, &lowpc, &highpc, cu);
-
-  /* If we didn't find a lowpc, set it to highpc to avoid complaints
-     from finish_block.  */
-  if (lowpc == ((CORE_ADDR) -1))
-    lowpc = highpc;
-  lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
-
-  file_and_directory fnd = find_file_and_directory (die, cu);
-
-  /* The XLCL doesn't generate DW_LANG_OpenCL because this attribute is not
-     standardised yet.  As a workaround for the language detection we fall
-     back to the DW_AT_producer string.  */
-  if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL") != NULL)
-    cu->language = language_opencl;
-
-  /* Similar hack for Go.  */
-  if (cu->producer && strstr (cu->producer, "GNU Go ") != NULL)
-    set_cu_language (DW_LANG_Go, cu);
-
-  cu->start_symtab (fnd.name, fnd.comp_dir, lowpc);
-
-  /* Decode line number information if present.  We do this before
-     processing child DIEs, so that the line header table is available
-     for DW_AT_decl_file.  */
-  handle_DW_AT_stmt_list (die, cu, fnd.comp_dir, lowpc);
-
-  /* Process all dies in compilation unit.  */
-  if (die->child != NULL)
-    {
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  process_die (child_die, cu);
-	  child_die = sibling_die (child_die);
-	}
-    }
-
-  /* Decode macro information, if present.  Dwarf 2 macro information
-     refers to information in the line number info statement program
-     header, so we can only read it if we've read the header
-     successfully.  */
-  attr = dwarf2_attr (die, DW_AT_macros, cu);
-  if (attr == NULL)
-    attr = dwarf2_attr (die, DW_AT_GNU_macros, cu);
-  if (attr && cu->line_header)
-    {
-      if (dwarf2_attr (die, DW_AT_macro_info, cu))
-	complaint (_("CU refers to both DW_AT_macros and DW_AT_macro_info"));
-
-      dwarf_decode_macros (cu, DW_UNSND (attr), 1);
-    }
-  else
-    {
-      attr = dwarf2_attr (die, DW_AT_macro_info, cu);
-      if (attr && cu->line_header)
-	{
-	  unsigned int macro_offset = DW_UNSND (attr);
-
-	  dwarf_decode_macros (cu, macro_offset, 0);
-	}
-    }
-}
-
-void
-dwarf2_cu::setup_type_unit_groups (struct die_info *die)
-{
-  struct type_unit_group *tu_group;
-  int first_time;
-  struct attribute *attr;
-  unsigned int i;
-  struct signatured_type *sig_type;
-
-  gdb_assert (per_cu->is_debug_types);
-  sig_type = (struct signatured_type *) per_cu;
-
-  attr = dwarf2_attr (die, DW_AT_stmt_list, this);
-
-  /* If we're using .gdb_index (includes -readnow) then
-     per_cu->type_unit_group may not have been set up yet.  */
-  if (sig_type->type_unit_group == NULL)
-    sig_type->type_unit_group = get_type_unit_group (this, attr);
-  tu_group = sig_type->type_unit_group;
-
-  /* If we've already processed this stmt_list there's no real need to
-     do it again, we could fake it and just recreate the part we need
-     (file name,index -> symtab mapping).  If data shows this optimization
-     is useful we can do it then.  */
-  first_time = tu_group->compunit_symtab == NULL;
-
-  /* We have to handle the case of both a missing DW_AT_stmt_list or bad
-     debug info.  */
-  line_header_up lh;
-  if (attr != NULL)
-    {
-      sect_offset line_offset = (sect_offset) DW_UNSND (attr);
-      lh = dwarf_decode_line_header (line_offset, this);
-    }
-  if (lh == NULL)
-    {
-      if (first_time)
-	start_symtab ("", NULL, 0);
-      else
-	{
-	  gdb_assert (tu_group->symtabs == NULL);
-	  gdb_assert (m_builder == nullptr);
-	  struct compunit_symtab *cust = tu_group->compunit_symtab;
-	  m_builder.reset (new struct buildsym_compunit
-			   (COMPUNIT_OBJFILE (cust), "",
-			    COMPUNIT_DIRNAME (cust),
-			    compunit_language (cust),
-			    0, cust));
-	}
-      return;
-    }
-
-  line_header = lh.release ();
-  line_header_die_owner = die;
-
-  if (first_time)
-    {
-      struct compunit_symtab *cust = start_symtab ("", NULL, 0);
-
-      /* Note: We don't assign tu_group->compunit_symtab yet because we're
-	 still initializing it, and our caller (a few levels up)
-	 process_full_type_unit still needs to know if this is the first
-	 time.  */
-
-      tu_group->num_symtabs = line_header->file_names_size ();
-      tu_group->symtabs = XNEWVEC (struct symtab *,
-				   line_header->file_names_size ());
-
-      auto &file_names = line_header->file_names ();
-      for (i = 0; i < file_names.size (); ++i)
-	{
-	  file_entry &fe = file_names[i];
-	  dwarf2_start_subfile (this, fe.name,
-				fe.include_dir (line_header));
-	  buildsym_compunit *b = get_builder ();
-	  if (b->get_current_subfile ()->symtab == NULL)
-	    {
-	      /* NOTE: start_subfile will recognize when it's been
-		 passed a file it has already seen.  So we can't
-		 assume there's a simple mapping from
-		 cu->line_header->file_names to subfiles, plus
-		 cu->line_header->file_names may contain dups.  */
-	      b->get_current_subfile ()->symtab
-		= allocate_symtab (cust, b->get_current_subfile ()->name);
-	    }
-
-	  fe.symtab = b->get_current_subfile ()->symtab;
-	  tu_group->symtabs[i] = fe.symtab;
-	}
-    }
-  else
-    {
-      gdb_assert (m_builder == nullptr);
-      struct compunit_symtab *cust = tu_group->compunit_symtab;
-      m_builder.reset (new struct buildsym_compunit
-		       (COMPUNIT_OBJFILE (cust), "",
-			COMPUNIT_DIRNAME (cust),
-			compunit_language (cust),
-			0, cust));
-
-      auto &file_names = line_header->file_names ();
-      for (i = 0; i < file_names.size (); ++i)
-	{
-	  file_entry &fe = file_names[i];
-	  fe.symtab = tu_group->symtabs[i];
-	}
-    }
-
-  /* The main symtab is allocated last.  Type units don't have DW_AT_name
-     so they don't have a "real" (so to speak) symtab anyway.
-     There is later code that will assign the main symtab to all symbols
-     that don't have one.  We need to handle the case of a symbol with a
-     missing symtab (DW_AT_decl_file) anyway.  */
-}
-
-/* Process DW_TAG_type_unit.
-   For TUs we want to skip the first top level sibling if it's not the
-   actual type being defined by this TU.  In this case the first top
-   level sibling is there to provide context only.  */
-
-static void
-read_type_unit_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct die_info *child_die;
-
-  prepare_one_comp_unit (cu, die, language_minimal);
-
-  /* Initialize (or reinitialize) the machinery for building symtabs.
-     We do this before processing child DIEs, so that the line header table
-     is available for DW_AT_decl_file.  */
-  cu->setup_type_unit_groups (die);
-
-  if (die->child != NULL)
-    {
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  process_die (child_die, cu);
-	  child_die = sibling_die (child_die);
-	}
-    }
-}
-
-/* DWO/DWP files.
-
-   http://gcc.gnu.org/wiki/DebugFission
-   http://gcc.gnu.org/wiki/DebugFissionDWP
-
-   To simplify handling of both DWO files ("object" files with the DWARF info)
-   and DWP files (a file with the DWOs packaged up into one file), we treat
-   DWP files as having a collection of virtual DWO files.  */
-
-static hashval_t
-hash_dwo_file (const void *item)
-{
-  const struct dwo_file *dwo_file = (const struct dwo_file *) item;
-  hashval_t hash;
-
-  hash = htab_hash_string (dwo_file->dwo_name);
-  if (dwo_file->comp_dir != NULL)
-    hash += htab_hash_string (dwo_file->comp_dir);
-  return hash;
-}
-
-static int
-eq_dwo_file (const void *item_lhs, const void *item_rhs)
-{
-  const struct dwo_file *lhs = (const struct dwo_file *) item_lhs;
-  const struct dwo_file *rhs = (const struct dwo_file *) item_rhs;
-
-  if (strcmp (lhs->dwo_name, rhs->dwo_name) != 0)
-    return 0;
-  if (lhs->comp_dir == NULL || rhs->comp_dir == NULL)
-    return lhs->comp_dir == rhs->comp_dir;
-  return strcmp (lhs->comp_dir, rhs->comp_dir) == 0;
-}
-
-/* Allocate a hash table for DWO files.  */
-
-static htab_up
-allocate_dwo_file_hash_table (struct objfile *objfile)
-{
-  auto delete_dwo_file = [] (void *item)
-    {
-      struct dwo_file *dwo_file = (struct dwo_file *) item;
-
-      delete dwo_file;
-    };
-
-  return htab_up (htab_create_alloc_ex (41,
-					hash_dwo_file,
-					eq_dwo_file,
-					delete_dwo_file,
-					&objfile->objfile_obstack,
-					hashtab_obstack_allocate,
-					dummy_obstack_deallocate));
-}
-
-/* Lookup DWO file DWO_NAME.  */
-
-static void **
-lookup_dwo_file_slot (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		      const char *dwo_name,
-		      const char *comp_dir)
-{
-  struct dwo_file find_entry;
-  void **slot;
-
-  if (dwarf2_per_objfile->dwo_files == NULL)
-    dwarf2_per_objfile->dwo_files
-      = allocate_dwo_file_hash_table (dwarf2_per_objfile->objfile);
-
-  find_entry.dwo_name = dwo_name;
-  find_entry.comp_dir = comp_dir;
-  slot = htab_find_slot (dwarf2_per_objfile->dwo_files.get (), &find_entry,
-			 INSERT);
-
-  return slot;
-}
-
-static hashval_t
-hash_dwo_unit (const void *item)
-{
-  const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item;
-
-  /* This drops the top 32 bits of the id, but is ok for a hash.  */
-  return dwo_unit->signature;
-}
-
-static int
-eq_dwo_unit (const void *item_lhs, const void *item_rhs)
-{
-  const struct dwo_unit *lhs = (const struct dwo_unit *) item_lhs;
-  const struct dwo_unit *rhs = (const struct dwo_unit *) item_rhs;
-
-  /* The signature is assumed to be unique within the DWO file.
-     So while object file CU dwo_id's always have the value zero,
-     that's OK, assuming each object file DWO file has only one CU,
-     and that's the rule for now.  */
-  return lhs->signature == rhs->signature;
-}
-
-/* Allocate a hash table for DWO CUs,TUs.
-   There is one of these tables for each of CUs,TUs for each DWO file.  */
-
-static htab_t
-allocate_dwo_unit_table (struct objfile *objfile)
-{
-  /* Start out with a pretty small number.
-     Generally DWO files contain only one CU and maybe some TUs.  */
-  return htab_create_alloc_ex (3,
-			       hash_dwo_unit,
-			       eq_dwo_unit,
-			       NULL,
-			       &objfile->objfile_obstack,
-			       hashtab_obstack_allocate,
-			       dummy_obstack_deallocate);
-}
-
-/* Structure used to pass data to create_dwo_debug_info_hash_table_reader.  */
-
-struct create_dwo_cu_data
-{
-  struct dwo_file *dwo_file;
-  struct dwo_unit dwo_unit;
-};
-
-/* die_reader_func for create_dwo_cu.  */
-
-static void
-create_dwo_cu_reader (const struct die_reader_specs *reader,
-		      const gdb_byte *info_ptr,
-		      struct die_info *comp_unit_die,
-		      int has_children,
-		      void *datap)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  sect_offset sect_off = cu->per_cu->sect_off;
-  struct dwarf2_section_info *section = cu->per_cu->section;
-  struct create_dwo_cu_data *data = (struct create_dwo_cu_data *) datap;
-  struct dwo_file *dwo_file = data->dwo_file;
-  struct dwo_unit *dwo_unit = &data->dwo_unit;
-
-  gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die);
-  if (!signature.has_value ())
-    {
-      complaint (_("Dwarf Error: debug entry at offset %s is missing"
-		   " its dwo_id [in module %s]"),
-		 sect_offset_str (sect_off), dwo_file->dwo_name);
-      return;
-    }
-
-  dwo_unit->dwo_file = dwo_file;
-  dwo_unit->signature = *signature;
-  dwo_unit->section = section;
-  dwo_unit->sect_off = sect_off;
-  dwo_unit->length = cu->per_cu->length;
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog, "  offset %s, dwo_id %s\n",
-			sect_offset_str (sect_off),
-			hex_string (dwo_unit->signature));
-}
-
-/* Create the dwo_units for the CUs in a DWO_FILE.
-   Note: This function processes DWO files only, not DWP files.  */
-
-static void
-create_cus_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		       struct dwo_file &dwo_file, dwarf2_section_info &section,
-		       htab_t &cus_htab)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  const gdb_byte *info_ptr, *end_ptr;
-
-  dwarf2_read_section (objfile, &section);
-  info_ptr = section.buffer;
-
-  if (info_ptr == NULL)
-    return;
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "Reading %s for %s:\n",
-			  get_section_name (&section),
-			  get_section_file_name (&section));
-    }
-
-  end_ptr = info_ptr + section.size;
-  while (info_ptr < end_ptr)
-    {
-      struct dwarf2_per_cu_data per_cu;
-      struct create_dwo_cu_data create_dwo_cu_data;
-      struct dwo_unit *dwo_unit;
-      void **slot;
-      sect_offset sect_off = (sect_offset) (info_ptr - section.buffer);
-
-      memset (&create_dwo_cu_data.dwo_unit, 0,
-	      sizeof (create_dwo_cu_data.dwo_unit));
-      memset (&per_cu, 0, sizeof (per_cu));
-      per_cu.dwarf2_per_objfile = dwarf2_per_objfile;
-      per_cu.is_debug_types = 0;
-      per_cu.sect_off = sect_offset (info_ptr - section.buffer);
-      per_cu.section = &section;
-      create_dwo_cu_data.dwo_file = &dwo_file;
-
-      init_cutu_and_read_dies_no_follow (
-	  &per_cu, &dwo_file, create_dwo_cu_reader, &create_dwo_cu_data);
-      info_ptr += per_cu.length;
-
-      // If the unit could not be parsed, skip it.
-      if (create_dwo_cu_data.dwo_unit.dwo_file == NULL)
-	continue;
-
-      if (cus_htab == NULL)
-	cus_htab = allocate_dwo_unit_table (objfile);
-
-      dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit);
-      *dwo_unit = create_dwo_cu_data.dwo_unit;
-      slot = htab_find_slot (cus_htab, dwo_unit, INSERT);
-      gdb_assert (slot != NULL);
-      if (*slot != NULL)
-	{
-	  const struct dwo_unit *dup_cu = (const struct dwo_unit *)*slot;
-	  sect_offset dup_sect_off = dup_cu->sect_off;
-
-	  complaint (_("debug cu entry at offset %s is duplicate to"
-		       " the entry at offset %s, signature %s"),
-		     sect_offset_str (sect_off), sect_offset_str (dup_sect_off),
-		     hex_string (dwo_unit->signature));
-	}
-      *slot = (void *)dwo_unit;
-    }
-}
-
-/* DWP file .debug_{cu,tu}_index section format:
-   [ref: http://gcc.gnu.org/wiki/DebugFissionDWP]
-
-   DWP Version 1:
-
-   Both index sections have the same format, and serve to map a 64-bit
-   signature to a set of section numbers.  Each section begins with a header,
-   followed by a hash table of 64-bit signatures, a parallel table of 32-bit
-   indexes, and a pool of 32-bit section numbers.  The index sections will be
-   aligned at 8-byte boundaries in the file.
-
-   The index section header consists of:
-
-    V, 32 bit version number
-    -, 32 bits unused
-    N, 32 bit number of compilation units or type units in the index
-    M, 32 bit number of slots in the hash table
-
-   Numbers are recorded using the byte order of the application binary.
-
-   The hash table begins at offset 16 in the section, and consists of an array
-   of M 64-bit slots.  Each slot contains a 64-bit signature (using the byte
-   order of the application binary).  Unused slots in the hash table are 0.
-   (We rely on the extreme unlikeliness of a signature being exactly 0.)
-
-   The parallel table begins immediately after the hash table
-   (at offset 16 + 8 * M from the beginning of the section), and consists of an
-   array of 32-bit indexes (using the byte order of the application binary),
-   corresponding 1-1 with slots in the hash table.  Each entry in the parallel
-   table contains a 32-bit index into the pool of section numbers.  For unused
-   hash table slots, the corresponding entry in the parallel table will be 0.
-
-   The pool of section numbers begins immediately following the hash table
-   (at offset 16 + 12 * M from the beginning of the section).  The pool of
-   section numbers consists of an array of 32-bit words (using the byte order
-   of the application binary).  Each item in the array is indexed starting
-   from 0.  The hash table entry provides the index of the first section
-   number in the set.  Additional section numbers in the set follow, and the
-   set is terminated by a 0 entry (section number 0 is not used in ELF).
-
-   In each set of section numbers, the .debug_info.dwo or .debug_types.dwo
-   section must be the first entry in the set, and the .debug_abbrev.dwo must
-   be the second entry. Other members of the set may follow in any order.
-
-   ---
-
-   DWP Version 2:
-
-   DWP Version 2 combines all the .debug_info, etc. sections into one,
-   and the entries in the index tables are now offsets into these sections.
-   CU offsets begin at 0.  TU offsets begin at the size of the .debug_info
-   section.
-
-   Index Section Contents:
-    Header
-    Hash Table of Signatures   dwp_hash_table.hash_table
-    Parallel Table of Indices  dwp_hash_table.unit_table
-    Table of Section Offsets   dwp_hash_table.v2.{section_ids,offsets}
-    Table of Section Sizes     dwp_hash_table.v2.sizes
-
-   The index section header consists of:
-
-    V, 32 bit version number
-    L, 32 bit number of columns in the table of section offsets
-    N, 32 bit number of compilation units or type units in the index
-    M, 32 bit number of slots in the hash table
-
-   Numbers are recorded using the byte order of the application binary.
-
-   The hash table has the same format as version 1.
-   The parallel table of indices has the same format as version 1,
-   except that the entries are origin-1 indices into the table of sections
-   offsets and the table of section sizes.
-
-   The table of offsets begins immediately following the parallel table
-   (at offset 16 + 12 * M from the beginning of the section).  The table is
-   a two-dimensional array of 32-bit words (using the byte order of the
-   application binary), with L columns and N+1 rows, in row-major order.
-   Each row in the array is indexed starting from 0.  The first row provides
-   a key to the remaining rows: each column in this row provides an identifier
-   for a debug section, and the offsets in the same column of subsequent rows
-   refer to that section.  The section identifiers are:
-
-    DW_SECT_INFO         1  .debug_info.dwo
-    DW_SECT_TYPES        2  .debug_types.dwo
-    DW_SECT_ABBREV       3  .debug_abbrev.dwo
-    DW_SECT_LINE         4  .debug_line.dwo
-    DW_SECT_LOC          5  .debug_loc.dwo
-    DW_SECT_STR_OFFSETS  6  .debug_str_offsets.dwo
-    DW_SECT_MACINFO      7  .debug_macinfo.dwo
-    DW_SECT_MACRO        8  .debug_macro.dwo
-
-   The offsets provided by the CU and TU index sections are the base offsets
-   for the contributions made by each CU or TU to the corresponding section
-   in the package file.  Each CU and TU header contains an abbrev_offset
-   field, used to find the abbreviations table for that CU or TU within the
-   contribution to the .debug_abbrev.dwo section for that CU or TU, and should
-   be interpreted as relative to the base offset given in the index section.
-   Likewise, offsets into .debug_line.dwo from DW_AT_stmt_list attributes
-   should be interpreted as relative to the base offset for .debug_line.dwo,
-   and offsets into other debug sections obtained from DWARF attributes should
-   also be interpreted as relative to the corresponding base offset.
-
-   The table of sizes begins immediately following the table of offsets.
-   Like the table of offsets, it is a two-dimensional array of 32-bit words,
-   with L columns and N rows, in row-major order.  Each row in the array is
-   indexed starting from 1 (row 0 is shared by the two tables).
-
-   ---
-
-   Hash table lookup is handled the same in version 1 and 2:
-
-   We assume that N and M will not exceed 2^32 - 1.
-   The size of the hash table, M, must be 2^k such that 2^k > 3*N/2.
-
-   Given a 64-bit compilation unit signature or a type signature S, an entry
-   in the hash table is located as follows:
-
-   1) Calculate a primary hash H = S & MASK(k), where MASK(k) is a mask with
-      the low-order k bits all set to 1.
-
-   2) Calculate a secondary hash H' = (((S >> 32) & MASK(k)) | 1).
-
-   3) If the hash table entry at index H matches the signature, use that
-      entry.  If the hash table entry at index H is unused (all zeroes),
-      terminate the search: the signature is not present in the table.
-
-   4) Let H = (H + H') modulo M. Repeat at Step 3.
-
-   Because M > N and H' and M are relatively prime, the search is guaranteed
-   to stop at an unused slot or find the match.  */
-
-/* Create a hash table to map DWO IDs to their CU/TU entry in
-   .debug_{info,types}.dwo in DWP_FILE.
-   Returns NULL if there isn't one.
-   Note: This function processes DWP files only, not DWO files.  */
-
-static struct dwp_hash_table *
-create_dwp_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		       struct dwp_file *dwp_file, int is_debug_types)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  bfd *dbfd = dwp_file->dbfd.get ();
-  const gdb_byte *index_ptr, *index_end;
-  struct dwarf2_section_info *index;
-  uint32_t version, nr_columns, nr_units, nr_slots;
-  struct dwp_hash_table *htab;
-
-  if (is_debug_types)
-    index = &dwp_file->sections.tu_index;
-  else
-    index = &dwp_file->sections.cu_index;
-
-  if (dwarf2_section_empty_p (index))
-    return NULL;
-  dwarf2_read_section (objfile, index);
-
-  index_ptr = index->buffer;
-  index_end = index_ptr + index->size;
-
-  version = read_4_bytes (dbfd, index_ptr);
-  index_ptr += 4;
-  if (version == 2)
-    nr_columns = read_4_bytes (dbfd, index_ptr);
-  else
-    nr_columns = 0;
-  index_ptr += 4;
-  nr_units = read_4_bytes (dbfd, index_ptr);
-  index_ptr += 4;
-  nr_slots = read_4_bytes (dbfd, index_ptr);
-  index_ptr += 4;
-
-  if (version != 1 && version != 2)
-    {
-      error (_("Dwarf Error: unsupported DWP file version (%s)"
-	       " [in module %s]"),
-	     pulongest (version), dwp_file->name);
-    }
-  if (nr_slots != (nr_slots & -nr_slots))
-    {
-      error (_("Dwarf Error: number of slots in DWP hash table (%s)"
-	       " is not power of 2 [in module %s]"),
-	     pulongest (nr_slots), dwp_file->name);
-    }
-
-  htab = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwp_hash_table);
-  htab->version = version;
-  htab->nr_columns = nr_columns;
-  htab->nr_units = nr_units;
-  htab->nr_slots = nr_slots;
-  htab->hash_table = index_ptr;
-  htab->unit_table = htab->hash_table + sizeof (uint64_t) * nr_slots;
-
-  /* Exit early if the table is empty.  */
-  if (nr_slots == 0 || nr_units == 0
-      || (version == 2 && nr_columns == 0))
-    {
-      /* All must be zero.  */
-      if (nr_slots != 0 || nr_units != 0
-	  || (version == 2 && nr_columns != 0))
-	{
-	  complaint (_("Empty DWP but nr_slots,nr_units,nr_columns not"
-		       " all zero [in modules %s]"),
-		     dwp_file->name);
-	}
-      return htab;
-    }
-
-  if (version == 1)
-    {
-      htab->section_pool.v1.indices =
-	htab->unit_table + sizeof (uint32_t) * nr_slots;
-      /* It's harder to decide whether the section is too small in v1.
-	 V1 is deprecated anyway so we punt.  */
-    }
-  else
-    {
-      const gdb_byte *ids_ptr = htab->unit_table + sizeof (uint32_t) * nr_slots;
-      int *ids = htab->section_pool.v2.section_ids;
-      size_t sizeof_ids = sizeof (htab->section_pool.v2.section_ids);
-      /* Reverse map for error checking.  */
-      int ids_seen[DW_SECT_MAX + 1];
-      int i;
-
-      if (nr_columns < 2)
-	{
-	  error (_("Dwarf Error: bad DWP hash table, too few columns"
-		   " in section table [in module %s]"),
-		 dwp_file->name);
-	}
-      if (nr_columns > MAX_NR_V2_DWO_SECTIONS)
-	{
-	  error (_("Dwarf Error: bad DWP hash table, too many columns"
-		   " in section table [in module %s]"),
-		 dwp_file->name);
-	}
-      memset (ids, 255, sizeof_ids);
-      memset (ids_seen, 255, sizeof (ids_seen));
-      for (i = 0; i < nr_columns; ++i)
-	{
-	  int id = read_4_bytes (dbfd, ids_ptr + i * sizeof (uint32_t));
-
-	  if (id < DW_SECT_MIN || id > DW_SECT_MAX)
-	    {
-	      error (_("Dwarf Error: bad DWP hash table, bad section id %d"
-		       " in section table [in module %s]"),
-		     id, dwp_file->name);
-	    }
-	  if (ids_seen[id] != -1)
-	    {
-	      error (_("Dwarf Error: bad DWP hash table, duplicate section"
-		       " id %d in section table [in module %s]"),
-		     id, dwp_file->name);
-	    }
-	  ids_seen[id] = i;
-	  ids[i] = id;
-	}
-      /* Must have exactly one info or types section.  */
-      if (((ids_seen[DW_SECT_INFO] != -1)
-	   + (ids_seen[DW_SECT_TYPES] != -1))
-	  != 1)
-	{
-	  error (_("Dwarf Error: bad DWP hash table, missing/duplicate"
-		   " DWO info/types section [in module %s]"),
-		 dwp_file->name);
-	}
-      /* Must have an abbrev section.  */
-      if (ids_seen[DW_SECT_ABBREV] == -1)
-	{
-	  error (_("Dwarf Error: bad DWP hash table, missing DWO abbrev"
-		   " section [in module %s]"),
-		 dwp_file->name);
-	}
-      htab->section_pool.v2.offsets = ids_ptr + sizeof (uint32_t) * nr_columns;
-      htab->section_pool.v2.sizes =
-	htab->section_pool.v2.offsets + (sizeof (uint32_t)
-					 * nr_units * nr_columns);
-      if ((htab->section_pool.v2.sizes + (sizeof (uint32_t)
-					  * nr_units * nr_columns))
-	  > index_end)
-	{
-	  error (_("Dwarf Error: DWP index section is corrupt (too small)"
-		   " [in module %s]"),
-		 dwp_file->name);
-	}
-    }
-
-  return htab;
-}
-
-/* Update SECTIONS with the data from SECTP.
-
-   This function is like the other "locate" section routines that are
-   passed to bfd_map_over_sections, but in this context the sections to
-   read comes from the DWP V1 hash table, not the full ELF section table.
-
-   The result is non-zero for success, or zero if an error was found.  */
-
-static int
-locate_v1_virtual_dwo_sections (asection *sectp,
-				struct virtual_v1_dwo_sections *sections)
-{
-  const struct dwop_section_names *names = &dwop_section_names;
-
-  if (section_is_p (sectp->name, &names->abbrev_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->abbrev.s.section != NULL)
-	return 0;
-      sections->abbrev.s.section = sectp;
-      sections->abbrev.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->info_dwo)
-	   || section_is_p (sectp->name, &names->types_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->info_or_types.s.section != NULL)
-	return 0;
-      sections->info_or_types.s.section = sectp;
-      sections->info_or_types.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->line_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->line.s.section != NULL)
-	return 0;
-      sections->line.s.section = sectp;
-      sections->line.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->loc_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->loc.s.section != NULL)
-	return 0;
-      sections->loc.s.section = sectp;
-      sections->loc.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->macinfo_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->macinfo.s.section != NULL)
-	return 0;
-      sections->macinfo.s.section = sectp;
-      sections->macinfo.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->macro_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->macro.s.section != NULL)
-	return 0;
-      sections->macro.s.section = sectp;
-      sections->macro.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->str_offsets_dwo))
-    {
-      /* There can be only one.  */
-      if (sections->str_offsets.s.section != NULL)
-	return 0;
-      sections->str_offsets.s.section = sectp;
-      sections->str_offsets.size = bfd_section_size (sectp);
-    }
-  else
-    {
-      /* No other kind of section is valid.  */
-      return 0;
-    }
-
-  return 1;
-}
-
-/* Create a dwo_unit object for the DWO unit with signature SIGNATURE.
-   UNIT_INDEX is the index of the DWO unit in the DWP hash table.
-   COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU.
-   This is for DWP version 1 files.  */
-
-static struct dwo_unit *
-create_dwo_unit_in_dwp_v1 (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			   struct dwp_file *dwp_file,
-			   uint32_t unit_index,
-			   const char *comp_dir,
-			   ULONGEST signature, int is_debug_types)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  const struct dwp_hash_table *dwp_htab =
-    is_debug_types ? dwp_file->tus : dwp_file->cus;
-  bfd *dbfd = dwp_file->dbfd.get ();
-  const char *kind = is_debug_types ? "TU" : "CU";
-  struct dwo_file *dwo_file;
-  struct dwo_unit *dwo_unit;
-  struct virtual_v1_dwo_sections sections;
-  void **dwo_file_slot;
-  int i;
-
-  gdb_assert (dwp_file->version == 1);
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V1 file: %s\n",
-			  kind,
-			  pulongest (unit_index), hex_string (signature),
-			  dwp_file->name);
-    }
-
-  /* Fetch the sections of this DWO unit.
-     Put a limit on the number of sections we look for so that bad data
-     doesn't cause us to loop forever.  */
-
-#define MAX_NR_V1_DWO_SECTIONS \
-  (1 /* .debug_info or .debug_types */ \
-   + 1 /* .debug_abbrev */ \
-   + 1 /* .debug_line */ \
-   + 1 /* .debug_loc */ \
-   + 1 /* .debug_str_offsets */ \
-   + 1 /* .debug_macro or .debug_macinfo */ \
-   + 1 /* trailing zero */)
-
-  memset (&sections, 0, sizeof (sections));
-
-  for (i = 0; i < MAX_NR_V1_DWO_SECTIONS; ++i)
-    {
-      asection *sectp;
-      uint32_t section_nr =
-	read_4_bytes (dbfd,
-		      dwp_htab->section_pool.v1.indices
-		      + (unit_index + i) * sizeof (uint32_t));
-
-      if (section_nr == 0)
-	break;
-      if (section_nr >= dwp_file->num_sections)
-	{
-	  error (_("Dwarf Error: bad DWP hash table, section number too large"
-		   " [in module %s]"),
-		 dwp_file->name);
-	}
-
-      sectp = dwp_file->elf_sections[section_nr];
-      if (! locate_v1_virtual_dwo_sections (sectp, &sections))
-	{
-	  error (_("Dwarf Error: bad DWP hash table, invalid section found"
-		   " [in module %s]"),
-		 dwp_file->name);
-	}
-    }
-
-  if (i < 2
-      || dwarf2_section_empty_p (&sections.info_or_types)
-      || dwarf2_section_empty_p (&sections.abbrev))
-    {
-      error (_("Dwarf Error: bad DWP hash table, missing DWO sections"
-	       " [in module %s]"),
-	     dwp_file->name);
-    }
-  if (i == MAX_NR_V1_DWO_SECTIONS)
-    {
-      error (_("Dwarf Error: bad DWP hash table, too many DWO sections"
-	       " [in module %s]"),
-	     dwp_file->name);
-    }
-
-  /* It's easier for the rest of the code if we fake a struct dwo_file and
-     have dwo_unit "live" in that.  At least for now.
-
-     The DWP file can be made up of a random collection of CUs and TUs.
-     However, for each CU + set of TUs that came from the same original DWO
-     file, we can combine them back into a virtual DWO file to save space
-     (fewer struct dwo_file objects to allocate).  Remember that for really
-     large apps there can be on the order of 8K CUs and 200K TUs, or more.  */
-
-  std::string virtual_dwo_name =
-    string_printf ("virtual-dwo/%d-%d-%d-%d",
-		   get_section_id (&sections.abbrev),
-		   get_section_id (&sections.line),
-		   get_section_id (&sections.loc),
-		   get_section_id (&sections.str_offsets));
-  /* Can we use an existing virtual DWO file?  */
-  dwo_file_slot = lookup_dwo_file_slot (dwarf2_per_objfile,
-					virtual_dwo_name.c_str (),
-					comp_dir);
-  /* Create one if necessary.  */
-  if (*dwo_file_slot == NULL)
-    {
-      if (dwarf_read_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n",
-			      virtual_dwo_name.c_str ());
-	}
-      dwo_file = new struct dwo_file;
-      dwo_file->dwo_name = obstack_strdup (&objfile->objfile_obstack,
-					   virtual_dwo_name);
-      dwo_file->comp_dir = comp_dir;
-      dwo_file->sections.abbrev = sections.abbrev;
-      dwo_file->sections.line = sections.line;
-      dwo_file->sections.loc = sections.loc;
-      dwo_file->sections.macinfo = sections.macinfo;
-      dwo_file->sections.macro = sections.macro;
-      dwo_file->sections.str_offsets = sections.str_offsets;
-      /* The "str" section is global to the entire DWP file.  */
-      dwo_file->sections.str = dwp_file->sections.str;
-      /* The info or types section is assigned below to dwo_unit,
-	 there's no need to record it in dwo_file.
-	 Also, we can't simply record type sections in dwo_file because
-	 we record a pointer into the vector in dwo_unit.  As we collect more
-	 types we'll grow the vector and eventually have to reallocate space
-	 for it, invalidating all copies of pointers into the previous
-	 contents.  */
-      *dwo_file_slot = dwo_file;
-    }
-  else
-    {
-      if (dwarf_read_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n",
-			      virtual_dwo_name.c_str ());
-	}
-      dwo_file = (struct dwo_file *) *dwo_file_slot;
-    }
-
-  dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit);
-  dwo_unit->dwo_file = dwo_file;
-  dwo_unit->signature = signature;
-  dwo_unit->section =
-    XOBNEW (&objfile->objfile_obstack, struct dwarf2_section_info);
-  *dwo_unit->section = sections.info_or_types;
-  /* dwo_unit->{offset,length,type_offset_in_tu} are set later.  */
-
-  return dwo_unit;
-}
-
-/* Subroutine of create_dwo_unit_in_dwp_v2 to simplify it.
-   Given a pointer to the containing section SECTION, and OFFSET,SIZE of the
-   piece within that section used by a TU/CU, return a virtual section
-   of just that piece.  */
-
-static struct dwarf2_section_info
-create_dwp_v2_section (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		       struct dwarf2_section_info *section,
-		       bfd_size_type offset, bfd_size_type size)
-{
-  struct dwarf2_section_info result;
-  asection *sectp;
-
-  gdb_assert (section != NULL);
-  gdb_assert (!section->is_virtual);
-
-  memset (&result, 0, sizeof (result));
-  result.s.containing_section = section;
-  result.is_virtual = true;
-
-  if (size == 0)
-    return result;
-
-  sectp = get_section_bfd_section (section);
-
-  /* Flag an error if the piece denoted by OFFSET,SIZE is outside the
-     bounds of the real section.  This is a pretty-rare event, so just
-     flag an error (easier) instead of a warning and trying to cope.  */
-  if (sectp == NULL
-      || offset + size > bfd_section_size (sectp))
-    {
-      error (_("Dwarf Error: Bad DWP V2 section info, doesn't fit"
-	       " in section %s [in module %s]"),
-	     sectp ? bfd_section_name (sectp) : "<unknown>",
-	     objfile_name (dwarf2_per_objfile->objfile));
-    }
-
-  result.virtual_offset = offset;
-  result.size = size;
-  return result;
-}
-
-/* Create a dwo_unit object for the DWO unit with signature SIGNATURE.
-   UNIT_INDEX is the index of the DWO unit in the DWP hash table.
-   COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU.
-   This is for DWP version 2 files.  */
-
-static struct dwo_unit *
-create_dwo_unit_in_dwp_v2 (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			   struct dwp_file *dwp_file,
-			   uint32_t unit_index,
-			   const char *comp_dir,
-			   ULONGEST signature, int is_debug_types)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  const struct dwp_hash_table *dwp_htab =
-    is_debug_types ? dwp_file->tus : dwp_file->cus;
-  bfd *dbfd = dwp_file->dbfd.get ();
-  const char *kind = is_debug_types ? "TU" : "CU";
-  struct dwo_file *dwo_file;
-  struct dwo_unit *dwo_unit;
-  struct virtual_v2_dwo_sections sections;
-  void **dwo_file_slot;
-  int i;
-
-  gdb_assert (dwp_file->version == 2);
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V2 file: %s\n",
-			  kind,
-			  pulongest (unit_index), hex_string (signature),
-			  dwp_file->name);
-    }
-
-  /* Fetch the section offsets of this DWO unit.  */
-
-  memset (&sections, 0, sizeof (sections));
-
-  for (i = 0; i < dwp_htab->nr_columns; ++i)
-    {
-      uint32_t offset = read_4_bytes (dbfd,
-				      dwp_htab->section_pool.v2.offsets
-				      + (((unit_index - 1) * dwp_htab->nr_columns
-					  + i)
-					 * sizeof (uint32_t)));
-      uint32_t size = read_4_bytes (dbfd,
-				    dwp_htab->section_pool.v2.sizes
-				    + (((unit_index - 1) * dwp_htab->nr_columns
-					+ i)
-				       * sizeof (uint32_t)));
-
-      switch (dwp_htab->section_pool.v2.section_ids[i])
-	{
-	case DW_SECT_INFO:
-	case DW_SECT_TYPES:
-	  sections.info_or_types_offset = offset;
-	  sections.info_or_types_size = size;
-	  break;
-	case DW_SECT_ABBREV:
-	  sections.abbrev_offset = offset;
-	  sections.abbrev_size = size;
-	  break;
-	case DW_SECT_LINE:
-	  sections.line_offset = offset;
-	  sections.line_size = size;
-	  break;
-	case DW_SECT_LOC:
-	  sections.loc_offset = offset;
-	  sections.loc_size = size;
-	  break;
-	case DW_SECT_STR_OFFSETS:
-	  sections.str_offsets_offset = offset;
-	  sections.str_offsets_size = size;
-	  break;
-	case DW_SECT_MACINFO:
-	  sections.macinfo_offset = offset;
-	  sections.macinfo_size = size;
-	  break;
-	case DW_SECT_MACRO:
-	  sections.macro_offset = offset;
-	  sections.macro_size = size;
-	  break;
-	}
-    }
-
-  /* It's easier for the rest of the code if we fake a struct dwo_file and
-     have dwo_unit "live" in that.  At least for now.
-
-     The DWP file can be made up of a random collection of CUs and TUs.
-     However, for each CU + set of TUs that came from the same original DWO
-     file, we can combine them back into a virtual DWO file to save space
-     (fewer struct dwo_file objects to allocate).  Remember that for really
-     large apps there can be on the order of 8K CUs and 200K TUs, or more.  */
-
-  std::string virtual_dwo_name =
-    string_printf ("virtual-dwo/%ld-%ld-%ld-%ld",
-		   (long) (sections.abbrev_size ? sections.abbrev_offset : 0),
-		   (long) (sections.line_size ? sections.line_offset : 0),
-		   (long) (sections.loc_size ? sections.loc_offset : 0),
-		   (long) (sections.str_offsets_size
-			   ? sections.str_offsets_offset : 0));
-  /* Can we use an existing virtual DWO file?  */
-  dwo_file_slot = lookup_dwo_file_slot (dwarf2_per_objfile,
-					virtual_dwo_name.c_str (),
-					comp_dir);
-  /* Create one if necessary.  */
-  if (*dwo_file_slot == NULL)
-    {
-      if (dwarf_read_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n",
-			      virtual_dwo_name.c_str ());
-	}
-      dwo_file = new struct dwo_file;
-      dwo_file->dwo_name = obstack_strdup (&objfile->objfile_obstack,
-					   virtual_dwo_name);
-      dwo_file->comp_dir = comp_dir;
-      dwo_file->sections.abbrev =
-	create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.abbrev,
-			       sections.abbrev_offset, sections.abbrev_size);
-      dwo_file->sections.line =
-	create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.line,
-			       sections.line_offset, sections.line_size);
-      dwo_file->sections.loc =
-	create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.loc,
-			       sections.loc_offset, sections.loc_size);
-      dwo_file->sections.macinfo =
-	create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.macinfo,
-			       sections.macinfo_offset, sections.macinfo_size);
-      dwo_file->sections.macro =
-	create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.macro,
-			       sections.macro_offset, sections.macro_size);
-      dwo_file->sections.str_offsets =
-	create_dwp_v2_section (dwarf2_per_objfile,
-			       &dwp_file->sections.str_offsets,
-			       sections.str_offsets_offset,
-			       sections.str_offsets_size);
-      /* The "str" section is global to the entire DWP file.  */
-      dwo_file->sections.str = dwp_file->sections.str;
-      /* The info or types section is assigned below to dwo_unit,
-	 there's no need to record it in dwo_file.
-	 Also, we can't simply record type sections in dwo_file because
-	 we record a pointer into the vector in dwo_unit.  As we collect more
-	 types we'll grow the vector and eventually have to reallocate space
-	 for it, invalidating all copies of pointers into the previous
-	 contents.  */
-      *dwo_file_slot = dwo_file;
-    }
-  else
-    {
-      if (dwarf_read_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n",
-			      virtual_dwo_name.c_str ());
-	}
-      dwo_file = (struct dwo_file *) *dwo_file_slot;
-    }
-
-  dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit);
-  dwo_unit->dwo_file = dwo_file;
-  dwo_unit->signature = signature;
-  dwo_unit->section =
-    XOBNEW (&objfile->objfile_obstack, struct dwarf2_section_info);
-  *dwo_unit->section = create_dwp_v2_section (dwarf2_per_objfile,
-					      is_debug_types
-					      ? &dwp_file->sections.types
-					      : &dwp_file->sections.info,
-					      sections.info_or_types_offset,
-					      sections.info_or_types_size);
-  /* dwo_unit->{offset,length,type_offset_in_tu} are set later.  */
-
-  return dwo_unit;
-}
-
-/* Lookup the DWO unit with SIGNATURE in DWP_FILE.
-   Returns NULL if the signature isn't found.  */
-
-static struct dwo_unit *
-lookup_dwo_unit_in_dwp (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			struct dwp_file *dwp_file, const char *comp_dir,
-			ULONGEST signature, int is_debug_types)
-{
-  const struct dwp_hash_table *dwp_htab =
-    is_debug_types ? dwp_file->tus : dwp_file->cus;
-  bfd *dbfd = dwp_file->dbfd.get ();
-  uint32_t mask = dwp_htab->nr_slots - 1;
-  uint32_t hash = signature & mask;
-  uint32_t hash2 = ((signature >> 32) & mask) | 1;
-  unsigned int i;
-  void **slot;
-  struct dwo_unit find_dwo_cu;
-
-  memset (&find_dwo_cu, 0, sizeof (find_dwo_cu));
-  find_dwo_cu.signature = signature;
-  slot = htab_find_slot (is_debug_types
-			 ? dwp_file->loaded_tus
-			 : dwp_file->loaded_cus,
-			 &find_dwo_cu, INSERT);
-
-  if (*slot != NULL)
-    return (struct dwo_unit *) *slot;
-
-  /* Use a for loop so that we don't loop forever on bad debug info.  */
-  for (i = 0; i < dwp_htab->nr_slots; ++i)
-    {
-      ULONGEST signature_in_table;
-
-      signature_in_table =
-	read_8_bytes (dbfd, dwp_htab->hash_table + hash * sizeof (uint64_t));
-      if (signature_in_table == signature)
-	{
-	  uint32_t unit_index =
-	    read_4_bytes (dbfd,
-			  dwp_htab->unit_table + hash * sizeof (uint32_t));
-
-	  if (dwp_file->version == 1)
-	    {
-	      *slot = create_dwo_unit_in_dwp_v1 (dwarf2_per_objfile,
-						 dwp_file, unit_index,
-						 comp_dir, signature,
-						 is_debug_types);
-	    }
-	  else
-	    {
-	      *slot = create_dwo_unit_in_dwp_v2 (dwarf2_per_objfile,
-						 dwp_file, unit_index,
-						 comp_dir, signature,
-						 is_debug_types);
-	    }
-	  return (struct dwo_unit *) *slot;
-	}
-      if (signature_in_table == 0)
-	return NULL;
-      hash = (hash + hash2) & mask;
-    }
-
-  error (_("Dwarf Error: bad DWP hash table, lookup didn't terminate"
-	   " [in module %s]"),
-	 dwp_file->name);
-}
-
-/* Subroutine of open_dwo_file,open_dwp_file to simplify them.
-   Open the file specified by FILE_NAME and hand it off to BFD for
-   preliminary analysis.  Return a newly initialized bfd *, which
-   includes a canonicalized copy of FILE_NAME.
-   If IS_DWP is TRUE, we're opening a DWP file, otherwise a DWO file.
-   SEARCH_CWD is true if the current directory is to be searched.
-   It will be searched before debug-file-directory.
-   If successful, the file is added to the bfd include table of the
-   objfile's bfd (see gdb_bfd_record_inclusion).
-   If unable to find/open the file, return NULL.
-   NOTE: This function is derived from symfile_bfd_open.  */
-
-static gdb_bfd_ref_ptr
-try_open_dwop_file (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		    const char *file_name, int is_dwp, int search_cwd)
-{
-  int desc;
-  /* Blech.  OPF_TRY_CWD_FIRST also disables searching the path list if
-     FILE_NAME contains a '/'.  So we can't use it.  Instead prepend "."
-     to debug_file_directory.  */
-  const char *search_path;
-  static const char dirname_separator_string[] = { DIRNAME_SEPARATOR, '\0' };
-
-  gdb::unique_xmalloc_ptr<char> search_path_holder;
-  if (search_cwd)
-    {
-      if (*debug_file_directory != '\0')
-	{
-	  search_path_holder.reset (concat (".", dirname_separator_string,
-					    debug_file_directory,
-					    (char *) NULL));
-	  search_path = search_path_holder.get ();
-	}
-      else
-	search_path = ".";
-    }
-  else
-    search_path = debug_file_directory;
-
-  openp_flags flags = OPF_RETURN_REALPATH;
-  if (is_dwp)
-    flags |= OPF_SEARCH_IN_PATH;
-
-  gdb::unique_xmalloc_ptr<char> absolute_name;
-  desc = openp (search_path, flags, file_name,
-		O_RDONLY | O_BINARY, &absolute_name);
-  if (desc < 0)
-    return NULL;
-
-  gdb_bfd_ref_ptr sym_bfd (gdb_bfd_open (absolute_name.get (),
-					 gnutarget, desc));
-  if (sym_bfd == NULL)
-    return NULL;
-  bfd_set_cacheable (sym_bfd.get (), 1);
-
-  if (!bfd_check_format (sym_bfd.get (), bfd_object))
-    return NULL;
-
-  /* Success.  Record the bfd as having been included by the objfile's bfd.
-     This is important because things like demangled_names_hash lives in the
-     objfile's per_bfd space and may have references to things like symbol
-     names that live in the DWO/DWP file's per_bfd space.  PR 16426.  */
-  gdb_bfd_record_inclusion (dwarf2_per_objfile->objfile->obfd, sym_bfd.get ());
-
-  return sym_bfd;
-}
-
-/* Try to open DWO file FILE_NAME.
-   COMP_DIR is the DW_AT_comp_dir attribute.
-   The result is the bfd handle of the file.
-   If there is a problem finding or opening the file, return NULL.
-   Upon success, the canonicalized path of the file is stored in the bfd,
-   same as symfile_bfd_open.  */
-
-static gdb_bfd_ref_ptr
-open_dwo_file (struct dwarf2_per_objfile *dwarf2_per_objfile,
-	       const char *file_name, const char *comp_dir)
-{
-  if (IS_ABSOLUTE_PATH (file_name))
-    return try_open_dwop_file (dwarf2_per_objfile, file_name,
-			       0 /*is_dwp*/, 0 /*search_cwd*/);
-
-  /* Before trying the search path, try DWO_NAME in COMP_DIR.  */
-
-  if (comp_dir != NULL)
-    {
-      char *path_to_try = concat (comp_dir, SLASH_STRING,
-				  file_name, (char *) NULL);
-
-      /* NOTE: If comp_dir is a relative path, this will also try the
-	 search path, which seems useful.  */
-      gdb_bfd_ref_ptr abfd (try_open_dwop_file (dwarf2_per_objfile,
-						path_to_try,
-						0 /*is_dwp*/,
-						1 /*search_cwd*/));
-      xfree (path_to_try);
-      if (abfd != NULL)
-	return abfd;
-    }
-
-  /* That didn't work, try debug-file-directory, which, despite its name,
-     is a list of paths.  */
-
-  if (*debug_file_directory == '\0')
-    return NULL;
-
-  return try_open_dwop_file (dwarf2_per_objfile, file_name,
-			     0 /*is_dwp*/, 1 /*search_cwd*/);
-}
-
-/* This function is mapped across the sections and remembers the offset and
-   size of each of the DWO debugging sections we are interested in.  */
-
-static void
-dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp, void *dwo_sections_ptr)
-{
-  struct dwo_sections *dwo_sections = (struct dwo_sections *) dwo_sections_ptr;
-  const struct dwop_section_names *names = &dwop_section_names;
-
-  if (section_is_p (sectp->name, &names->abbrev_dwo))
-    {
-      dwo_sections->abbrev.s.section = sectp;
-      dwo_sections->abbrev.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->info_dwo))
-    {
-      dwo_sections->info.s.section = sectp;
-      dwo_sections->info.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->line_dwo))
-    {
-      dwo_sections->line.s.section = sectp;
-      dwo_sections->line.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->loc_dwo))
-    {
-      dwo_sections->loc.s.section = sectp;
-      dwo_sections->loc.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->macinfo_dwo))
-    {
-      dwo_sections->macinfo.s.section = sectp;
-      dwo_sections->macinfo.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->macro_dwo))
-    {
-      dwo_sections->macro.s.section = sectp;
-      dwo_sections->macro.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->str_dwo))
-    {
-      dwo_sections->str.s.section = sectp;
-      dwo_sections->str.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->str_offsets_dwo))
-    {
-      dwo_sections->str_offsets.s.section = sectp;
-      dwo_sections->str_offsets.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->types_dwo))
-    {
-      struct dwarf2_section_info type_section;
-
-      memset (&type_section, 0, sizeof (type_section));
-      type_section.s.section = sectp;
-      type_section.size = bfd_section_size (sectp);
-      dwo_sections->types.push_back (type_section);
-    }
-}
-
-/* Initialize the use of the DWO file specified by DWO_NAME and referenced
-   by PER_CU.  This is for the non-DWP case.
-   The result is NULL if DWO_NAME can't be found.  */
-
-static struct dwo_file *
-open_and_init_dwo_file (struct dwarf2_per_cu_data *per_cu,
-			const char *dwo_name, const char *comp_dir)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-
-  gdb_bfd_ref_ptr dbfd = open_dwo_file (dwarf2_per_objfile, dwo_name, comp_dir);
-  if (dbfd == NULL)
-    {
-      if (dwarf_read_debug)
-	fprintf_unfiltered (gdb_stdlog, "DWO file not found: %s\n", dwo_name);
-      return NULL;
-    }
-
-  dwo_file_up dwo_file (new struct dwo_file);
-  dwo_file->dwo_name = dwo_name;
-  dwo_file->comp_dir = comp_dir;
-  dwo_file->dbfd = std::move (dbfd);
-
-  bfd_map_over_sections (dwo_file->dbfd.get (), dwarf2_locate_dwo_sections,
-			 &dwo_file->sections);
-
-  create_cus_hash_table (dwarf2_per_objfile, *dwo_file, dwo_file->sections.info,
-			 dwo_file->cus);
-
-  create_debug_types_hash_table (dwarf2_per_objfile, dwo_file.get (),
-				 dwo_file->sections.types, dwo_file->tus);
-
-  if (dwarf_read_debug)
-    fprintf_unfiltered (gdb_stdlog, "DWO file found: %s\n", dwo_name);
-
-  return dwo_file.release ();
-}
-
-/* This function is mapped across the sections and remembers the offset and
-   size of each of the DWP debugging sections common to version 1 and 2 that
-   we are interested in.  */
-
-static void
-dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp,
-				   void *dwp_file_ptr)
-{
-  struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr;
-  const struct dwop_section_names *names = &dwop_section_names;
-  unsigned int elf_section_nr = elf_section_data (sectp)->this_idx;
-
-  /* Record the ELF section number for later lookup: this is what the
-     .debug_cu_index,.debug_tu_index tables use in DWP V1.  */
-  gdb_assert (elf_section_nr < dwp_file->num_sections);
-  dwp_file->elf_sections[elf_section_nr] = sectp;
-
-  /* Look for specific sections that we need.  */
-  if (section_is_p (sectp->name, &names->str_dwo))
-    {
-      dwp_file->sections.str.s.section = sectp;
-      dwp_file->sections.str.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->cu_index))
-    {
-      dwp_file->sections.cu_index.s.section = sectp;
-      dwp_file->sections.cu_index.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->tu_index))
-    {
-      dwp_file->sections.tu_index.s.section = sectp;
-      dwp_file->sections.tu_index.size = bfd_section_size (sectp);
-    }
-}
-
-/* This function is mapped across the sections and remembers the offset and
-   size of each of the DWP version 2 debugging sections that we are interested
-   in.  This is split into a separate function because we don't know if we
-   have version 1 or 2 until we parse the cu_index/tu_index sections.  */
-
-static void
-dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr)
-{
-  struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr;
-  const struct dwop_section_names *names = &dwop_section_names;
-  unsigned int elf_section_nr = elf_section_data (sectp)->this_idx;
-
-  /* Record the ELF section number for later lookup: this is what the
-     .debug_cu_index,.debug_tu_index tables use in DWP V1.  */
-  gdb_assert (elf_section_nr < dwp_file->num_sections);
-  dwp_file->elf_sections[elf_section_nr] = sectp;
-
-  /* Look for specific sections that we need.  */
-  if (section_is_p (sectp->name, &names->abbrev_dwo))
-    {
-      dwp_file->sections.abbrev.s.section = sectp;
-      dwp_file->sections.abbrev.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->info_dwo))
-    {
-      dwp_file->sections.info.s.section = sectp;
-      dwp_file->sections.info.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->line_dwo))
-    {
-      dwp_file->sections.line.s.section = sectp;
-      dwp_file->sections.line.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->loc_dwo))
-    {
-      dwp_file->sections.loc.s.section = sectp;
-      dwp_file->sections.loc.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->macinfo_dwo))
-    {
-      dwp_file->sections.macinfo.s.section = sectp;
-      dwp_file->sections.macinfo.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->macro_dwo))
-    {
-      dwp_file->sections.macro.s.section = sectp;
-      dwp_file->sections.macro.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->str_offsets_dwo))
-    {
-      dwp_file->sections.str_offsets.s.section = sectp;
-      dwp_file->sections.str_offsets.size = bfd_section_size (sectp);
-    }
-  else if (section_is_p (sectp->name, &names->types_dwo))
-    {
-      dwp_file->sections.types.s.section = sectp;
-      dwp_file->sections.types.size = bfd_section_size (sectp);
-    }
-}
-
-/* Hash function for dwp_file loaded CUs/TUs.  */
-
-static hashval_t
-hash_dwp_loaded_cutus (const void *item)
-{
-  const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item;
-
-  /* This drops the top 32 bits of the signature, but is ok for a hash.  */
-  return dwo_unit->signature;
-}
-
-/* Equality function for dwp_file loaded CUs/TUs.  */
-
-static int
-eq_dwp_loaded_cutus (const void *a, const void *b)
-{
-  const struct dwo_unit *dua = (const struct dwo_unit *) a;
-  const struct dwo_unit *dub = (const struct dwo_unit *) b;
-
-  return dua->signature == dub->signature;
-}
-
-/* Allocate a hash table for dwp_file loaded CUs/TUs.  */
-
-static htab_t
-allocate_dwp_loaded_cutus_table (struct objfile *objfile)
-{
-  return htab_create_alloc_ex (3,
-			       hash_dwp_loaded_cutus,
-			       eq_dwp_loaded_cutus,
-			       NULL,
-			       &objfile->objfile_obstack,
-			       hashtab_obstack_allocate,
-			       dummy_obstack_deallocate);
-}
-
-/* Try to open DWP file FILE_NAME.
-   The result is the bfd handle of the file.
-   If there is a problem finding or opening the file, return NULL.
-   Upon success, the canonicalized path of the file is stored in the bfd,
-   same as symfile_bfd_open.  */
-
-static gdb_bfd_ref_ptr
-open_dwp_file (struct dwarf2_per_objfile *dwarf2_per_objfile,
-	       const char *file_name)
-{
-  gdb_bfd_ref_ptr abfd (try_open_dwop_file (dwarf2_per_objfile, file_name,
-					    1 /*is_dwp*/,
-					    1 /*search_cwd*/));
-  if (abfd != NULL)
-    return abfd;
-
-  /* Work around upstream bug 15652.
-     http://sourceware.org/bugzilla/show_bug.cgi?id=15652
-     [Whether that's a "bug" is debatable, but it is getting in our way.]
-     We have no real idea where the dwp file is, because gdb's realpath-ing
-     of the executable's path may have discarded the needed info.
-     [IWBN if the dwp file name was recorded in the executable, akin to
-     .gnu_debuglink, but that doesn't exist yet.]
-     Strip the directory from FILE_NAME and search again.  */
-  if (*debug_file_directory != '\0')
-    {
-      /* Don't implicitly search the current directory here.
-	 If the user wants to search "." to handle this case,
-	 it must be added to debug-file-directory.  */
-      return try_open_dwop_file (dwarf2_per_objfile,
-				 lbasename (file_name), 1 /*is_dwp*/,
-				 0 /*search_cwd*/);
-    }
-
-  return NULL;
-}
-
-/* Initialize the use of the DWP file for the current objfile.
-   By convention the name of the DWP file is ${objfile}.dwp.
-   The result is NULL if it can't be found.  */
-
-static std::unique_ptr<struct dwp_file>
-open_and_init_dwp_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  /* Try to find first .dwp for the binary file before any symbolic links
-     resolving.  */
-
-  /* If the objfile is a debug file, find the name of the real binary
-     file and get the name of dwp file from there.  */
-  std::string dwp_name;
-  if (objfile->separate_debug_objfile_backlink != NULL)
-    {
-      struct objfile *backlink = objfile->separate_debug_objfile_backlink;
-      const char *backlink_basename = lbasename (backlink->original_name);
-
-      dwp_name = ldirname (objfile->original_name) + SLASH_STRING + backlink_basename;
-    }
-  else
-    dwp_name = objfile->original_name;
-
-  dwp_name += ".dwp";
-
-  gdb_bfd_ref_ptr dbfd (open_dwp_file (dwarf2_per_objfile, dwp_name.c_str ()));
-  if (dbfd == NULL
-      && strcmp (objfile->original_name, objfile_name (objfile)) != 0)
-    {
-      /* Try to find .dwp for the binary file after gdb_realpath resolving.  */
-      dwp_name = objfile_name (objfile);
-      dwp_name += ".dwp";
-      dbfd = open_dwp_file (dwarf2_per_objfile, dwp_name.c_str ());
-    }
-
-  if (dbfd == NULL)
-    {
-      if (dwarf_read_debug)
-	fprintf_unfiltered (gdb_stdlog, "DWP file not found: %s\n", dwp_name.c_str ());
-      return std::unique_ptr<dwp_file> ();
-    }
-
-  const char *name = bfd_get_filename (dbfd.get ());
-  std::unique_ptr<struct dwp_file> dwp_file
-    (new struct dwp_file (name, std::move (dbfd)));
-
-  dwp_file->num_sections = elf_numsections (dwp_file->dbfd);
-  dwp_file->elf_sections =
-    OBSTACK_CALLOC (&objfile->objfile_obstack,
-		    dwp_file->num_sections, asection *);
-
-  bfd_map_over_sections (dwp_file->dbfd.get (),
-			 dwarf2_locate_common_dwp_sections,
-			 dwp_file.get ());
-
-  dwp_file->cus = create_dwp_hash_table (dwarf2_per_objfile, dwp_file.get (),
-					 0);
-
-  dwp_file->tus = create_dwp_hash_table (dwarf2_per_objfile, dwp_file.get (),
-					 1);
-
-  /* The DWP file version is stored in the hash table.  Oh well.  */
-  if (dwp_file->cus && dwp_file->tus
-      && dwp_file->cus->version != dwp_file->tus->version)
-    {
-      /* Technically speaking, we should try to limp along, but this is
-	 pretty bizarre.  We use pulongest here because that's the established
-	 portability solution (e.g, we cannot use %u for uint32_t).  */
-      error (_("Dwarf Error: DWP file CU version %s doesn't match"
-	       " TU version %s [in DWP file %s]"),
-	     pulongest (dwp_file->cus->version),
-	     pulongest (dwp_file->tus->version), dwp_name.c_str ());
-    }
-
-  if (dwp_file->cus)
-    dwp_file->version = dwp_file->cus->version;
-  else if (dwp_file->tus)
-    dwp_file->version = dwp_file->tus->version;
-  else
-    dwp_file->version = 2;
-
-  if (dwp_file->version == 2)
-    bfd_map_over_sections (dwp_file->dbfd.get (),
-			   dwarf2_locate_v2_dwp_sections,
-			   dwp_file.get ());
-
-  dwp_file->loaded_cus = allocate_dwp_loaded_cutus_table (objfile);
-  dwp_file->loaded_tus = allocate_dwp_loaded_cutus_table (objfile);
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "DWP file found: %s\n", dwp_file->name);
-      fprintf_unfiltered (gdb_stdlog,
-			  "    %s CUs, %s TUs\n",
-			  pulongest (dwp_file->cus ? dwp_file->cus->nr_units : 0),
-			  pulongest (dwp_file->tus ? dwp_file->tus->nr_units : 0));
-    }
-
-  return dwp_file;
-}
-
-/* Wrapper around open_and_init_dwp_file, only open it once.  */
-
-static struct dwp_file *
-get_dwp_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  if (! dwarf2_per_objfile->dwp_checked)
-    {
-      dwarf2_per_objfile->dwp_file
-	= open_and_init_dwp_file (dwarf2_per_objfile);
-      dwarf2_per_objfile->dwp_checked = 1;
-    }
-  return dwarf2_per_objfile->dwp_file.get ();
-}
-
-/* Subroutine of lookup_dwo_comp_unit, lookup_dwo_type_unit.
-   Look up the CU/TU with signature SIGNATURE, either in DWO file DWO_NAME
-   or in the DWP file for the objfile, referenced by THIS_UNIT.
-   If non-NULL, comp_dir is the DW_AT_comp_dir attribute.
-   IS_DEBUG_TYPES is non-zero if reading a TU, otherwise read a CU.
-
-   This is called, for example, when wanting to read a variable with a
-   complex location.  Therefore we don't want to do file i/o for every call.
-   Therefore we don't want to look for a DWO file on every call.
-   Therefore we first see if we've already seen SIGNATURE in a DWP file,
-   then we check if we've already seen DWO_NAME, and only THEN do we check
-   for a DWO file.
-
-   The result is a pointer to the dwo_unit object or NULL if we didn't find it
-   (dwo_id mismatch or couldn't find the DWO/DWP file).  */
-
-static struct dwo_unit *
-lookup_dwo_cutu (struct dwarf2_per_cu_data *this_unit,
-		 const char *dwo_name, const char *comp_dir,
-		 ULONGEST signature, int is_debug_types)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = this_unit->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  const char *kind = is_debug_types ? "TU" : "CU";
-  void **dwo_file_slot;
-  struct dwo_file *dwo_file;
-  struct dwp_file *dwp_file;
-
-  /* First see if there's a DWP file.
-     If we have a DWP file but didn't find the DWO inside it, don't
-     look for the original DWO file.  It makes gdb behave differently
-     depending on whether one is debugging in the build tree.  */
-
-  dwp_file = get_dwp_file (dwarf2_per_objfile);
-  if (dwp_file != NULL)
-    {
-      const struct dwp_hash_table *dwp_htab =
-	is_debug_types ? dwp_file->tus : dwp_file->cus;
-
-      if (dwp_htab != NULL)
-	{
-	  struct dwo_unit *dwo_cutu =
-	    lookup_dwo_unit_in_dwp (dwarf2_per_objfile, dwp_file, comp_dir,
-				    signature, is_debug_types);
-
-	  if (dwo_cutu != NULL)
-	    {
-	      if (dwarf_read_debug)
-		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "Virtual DWO %s %s found: @%s\n",
-				      kind, hex_string (signature),
-				      host_address_to_string (dwo_cutu));
-		}
-	      return dwo_cutu;
-	    }
-	}
-    }
-  else
-    {
-      /* No DWP file, look for the DWO file.  */
-
-      dwo_file_slot = lookup_dwo_file_slot (dwarf2_per_objfile,
-					    dwo_name, comp_dir);
-      if (*dwo_file_slot == NULL)
-	{
-	  /* Read in the file and build a table of the CUs/TUs it contains.  */
-	  *dwo_file_slot = open_and_init_dwo_file (this_unit, dwo_name, comp_dir);
-	}
-      /* NOTE: This will be NULL if unable to open the file.  */
-      dwo_file = (struct dwo_file *) *dwo_file_slot;
-
-      if (dwo_file != NULL)
-	{
-	  struct dwo_unit *dwo_cutu = NULL;
-
-	  if (is_debug_types && dwo_file->tus)
-	    {
-	      struct dwo_unit find_dwo_cutu;
-
-	      memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu));
-	      find_dwo_cutu.signature = signature;
-	      dwo_cutu
-		= (struct dwo_unit *) htab_find (dwo_file->tus, &find_dwo_cutu);
-	    }
-	  else if (!is_debug_types && dwo_file->cus)
-	    {
-	      struct dwo_unit find_dwo_cutu;
-
-	      memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu));
-	      find_dwo_cutu.signature = signature;
-	      dwo_cutu = (struct dwo_unit *)htab_find (dwo_file->cus,
-						       &find_dwo_cutu);
-	    }
-
-	  if (dwo_cutu != NULL)
-	    {
-	      if (dwarf_read_debug)
-		{
-		  fprintf_unfiltered (gdb_stdlog, "DWO %s %s(%s) found: @%s\n",
-				      kind, dwo_name, hex_string (signature),
-				      host_address_to_string (dwo_cutu));
-		}
-	      return dwo_cutu;
-	    }
-	}
-    }
-
-  /* We didn't find it.  This could mean a dwo_id mismatch, or
-     someone deleted the DWO/DWP file, or the search path isn't set up
-     correctly to find the file.  */
-
-  if (dwarf_read_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "DWO %s %s(%s) not found\n",
-			  kind, dwo_name, hex_string (signature));
-    }
-
-  /* This is a warning and not a complaint because it can be caused by
-     pilot error (e.g., user accidentally deleting the DWO).  */
-  {
-    /* Print the name of the DWP file if we looked there, helps the user
-       better diagnose the problem.  */
-    std::string dwp_text;
-
-    if (dwp_file != NULL)
-      dwp_text = string_printf (" [in DWP file %s]",
-				lbasename (dwp_file->name));
-
-    warning (_("Could not find DWO %s %s(%s)%s referenced by %s at offset %s"
-	       " [in module %s]"),
-	     kind, dwo_name, hex_string (signature),
-	     dwp_text.c_str (),
-	     this_unit->is_debug_types ? "TU" : "CU",
-	     sect_offset_str (this_unit->sect_off), objfile_name (objfile));
-  }
-  return NULL;
-}
-
-/* Lookup the DWO CU DWO_NAME/SIGNATURE referenced from THIS_CU.
-   See lookup_dwo_cutu_unit for details.  */
-
-static struct dwo_unit *
-lookup_dwo_comp_unit (struct dwarf2_per_cu_data *this_cu,
-		      const char *dwo_name, const char *comp_dir,
-		      ULONGEST signature)
-{
-  return lookup_dwo_cutu (this_cu, dwo_name, comp_dir, signature, 0);
-}
-
-/* Lookup the DWO TU DWO_NAME/SIGNATURE referenced from THIS_TU.
-   See lookup_dwo_cutu_unit for details.  */
-
-static struct dwo_unit *
-lookup_dwo_type_unit (struct signatured_type *this_tu,
-		      const char *dwo_name, const char *comp_dir)
-{
-  return lookup_dwo_cutu (&this_tu->per_cu, dwo_name, comp_dir, this_tu->signature, 1);
-}
-
-/* Traversal function for queue_and_load_all_dwo_tus.  */
-
-static int
-queue_and_load_dwo_tu (void **slot, void *info)
-{
-  struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot;
-  struct dwarf2_per_cu_data *per_cu = (struct dwarf2_per_cu_data *) info;
-  ULONGEST signature = dwo_unit->signature;
-  struct signatured_type *sig_type =
-    lookup_dwo_signatured_type (per_cu->cu, signature);
-
-  if (sig_type != NULL)
-    {
-      struct dwarf2_per_cu_data *sig_cu = &sig_type->per_cu;
-
-      /* We pass NULL for DEPENDENT_CU because we don't yet know if there's
-	 a real dependency of PER_CU on SIG_TYPE.  That is detected later
-	 while processing PER_CU.  */
-      if (maybe_queue_comp_unit (NULL, sig_cu, per_cu->cu->language))
-	load_full_type_unit (sig_cu);
-      per_cu->imported_symtabs_push (sig_cu);
-    }
-
-  return 1;
-}
-
-/* Queue all TUs contained in the DWO of PER_CU to be read in.
-   The DWO may have the only definition of the type, though it may not be
-   referenced anywhere in PER_CU.  Thus we have to load *all* its TUs.
-   http://sourceware.org/bugzilla/show_bug.cgi?id=15021  */
-
-static void
-queue_and_load_all_dwo_tus (struct dwarf2_per_cu_data *per_cu)
-{
-  struct dwo_unit *dwo_unit;
-  struct dwo_file *dwo_file;
-
-  gdb_assert (!per_cu->is_debug_types);
-  gdb_assert (get_dwp_file (per_cu->dwarf2_per_objfile) == NULL);
-  gdb_assert (per_cu->cu != NULL);
-
-  dwo_unit = per_cu->cu->dwo_unit;
-  gdb_assert (dwo_unit != NULL);
-
-  dwo_file = dwo_unit->dwo_file;
-  if (dwo_file->tus != NULL)
-    htab_traverse_noresize (dwo_file->tus, queue_and_load_dwo_tu, per_cu);
-}
-
-/* Read in various DIEs.  */
-
-/* DW_AT_abstract_origin inherits whole DIEs (not just their attributes).
-   Inherit only the children of the DW_AT_abstract_origin DIE not being
-   already referenced by DW_AT_abstract_origin from the children of the
-   current DIE.  */
-
-static void
-inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct die_info *child_die;
-  sect_offset *offsetp;
-  /* Parent of DIE - referenced by DW_AT_abstract_origin.  */
-  struct die_info *origin_die;
-  /* Iterator of the ORIGIN_DIE children.  */
-  struct die_info *origin_child_die;
-  struct attribute *attr;
-  struct dwarf2_cu *origin_cu;
-  struct pending **origin_previous_list_in_scope;
-
-  attr = dwarf2_attr (die, DW_AT_abstract_origin, cu);
-  if (!attr)
-    return;
-
-  /* Note that following die references may follow to a die in a
-     different cu.  */
-
-  origin_cu = cu;
-  origin_die = follow_die_ref (die, attr, &origin_cu);
-
-  /* We're inheriting ORIGIN's children into the scope we'd put DIE's
-     symbols in.  */
-  origin_previous_list_in_scope = origin_cu->list_in_scope;
-  origin_cu->list_in_scope = cu->list_in_scope;
-
-  if (die->tag != origin_die->tag
-      && !(die->tag == DW_TAG_inlined_subroutine
-	   && origin_die->tag == DW_TAG_subprogram))
-    complaint (_("DIE %s and its abstract origin %s have different tags"),
-	       sect_offset_str (die->sect_off),
-	       sect_offset_str (origin_die->sect_off));
-
-  std::vector<sect_offset> offsets;
-
-  for (child_die = die->child;
-       child_die && child_die->tag;
-       child_die = sibling_die (child_die))
-    {
-      struct die_info *child_origin_die;
-      struct dwarf2_cu *child_origin_cu;
-
-      /* We are trying to process concrete instance entries:
-	 DW_TAG_call_site DIEs indeed have a DW_AT_abstract_origin tag, but
-	 it's not relevant to our analysis here. i.e. detecting DIEs that are
-	 present in the abstract instance but not referenced in the concrete
-	 one.  */
-      if (child_die->tag == DW_TAG_call_site
-          || child_die->tag == DW_TAG_GNU_call_site)
-	continue;
-
-      /* For each CHILD_DIE, find the corresponding child of
-	 ORIGIN_DIE.  If there is more than one layer of
-	 DW_AT_abstract_origin, follow them all; there shouldn't be,
-	 but GCC versions at least through 4.4 generate this (GCC PR
-	 40573).  */
-      child_origin_die = child_die;
-      child_origin_cu = cu;
-      while (1)
-	{
-	  attr = dwarf2_attr (child_origin_die, DW_AT_abstract_origin,
-			      child_origin_cu);
-	  if (attr == NULL)
-	    break;
-	  child_origin_die = follow_die_ref (child_origin_die, attr,
-					     &child_origin_cu);
-	}
-
-      /* According to DWARF3 3.3.8.2 #3 new entries without their abstract
-	 counterpart may exist.  */
-      if (child_origin_die != child_die)
-	{
-	  if (child_die->tag != child_origin_die->tag
-	      && !(child_die->tag == DW_TAG_inlined_subroutine
-		   && child_origin_die->tag == DW_TAG_subprogram))
-	    complaint (_("Child DIE %s and its abstract origin %s have "
-			 "different tags"),
-		       sect_offset_str (child_die->sect_off),
-		       sect_offset_str (child_origin_die->sect_off));
-	  if (child_origin_die->parent != origin_die)
-	    complaint (_("Child DIE %s and its abstract origin %s have "
-			 "different parents"),
-		       sect_offset_str (child_die->sect_off),
-		       sect_offset_str (child_origin_die->sect_off));
-	  else
-	    offsets.push_back (child_origin_die->sect_off);
-	}
-    }
-  std::sort (offsets.begin (), offsets.end ());
-  sect_offset *offsets_end = offsets.data () + offsets.size ();
-  for (offsetp = offsets.data () + 1; offsetp < offsets_end; offsetp++)
-    if (offsetp[-1] == *offsetp)
-      complaint (_("Multiple children of DIE %s refer "
-		   "to DIE %s as their abstract origin"),
-		 sect_offset_str (die->sect_off), sect_offset_str (*offsetp));
-
-  offsetp = offsets.data ();
-  origin_child_die = origin_die->child;
-  while (origin_child_die && origin_child_die->tag)
-    {
-      /* Is ORIGIN_CHILD_DIE referenced by any of the DIE children?  */
-      while (offsetp < offsets_end
-	     && *offsetp < origin_child_die->sect_off)
-	offsetp++;
-      if (offsetp >= offsets_end
-	  || *offsetp > origin_child_die->sect_off)
-	{
-	  /* Found that ORIGIN_CHILD_DIE is really not referenced.
-	     Check whether we're already processing ORIGIN_CHILD_DIE.
-	     This can happen with mutually referenced abstract_origins.
-	     PR 16581.  */
-	  if (!origin_child_die->in_process)
-	    process_die (origin_child_die, origin_cu);
-	}
-      origin_child_die = sibling_die (origin_child_die);
-    }
-  origin_cu->list_in_scope = origin_previous_list_in_scope;
-
-  if (cu != origin_cu)
-    compute_delayed_physnames (origin_cu);
-}
-
-static void
-read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct context_stack *newobj;
-  CORE_ADDR lowpc;
-  CORE_ADDR highpc;
-  struct die_info *child_die;
-  struct attribute *attr, *call_line, *call_file;
-  const char *name;
-  CORE_ADDR baseaddr;
-  struct block *block;
-  int inlined_func = (die->tag == DW_TAG_inlined_subroutine);
-  std::vector<struct symbol *> template_args;
-  struct template_symbol *templ_func = NULL;
-
-  if (inlined_func)
-    {
-      /* If we do not have call site information, we can't show the
-	 caller of this inlined function.  That's too confusing, so
-	 only use the scope for local variables.  */
-      call_line = dwarf2_attr (die, DW_AT_call_line, cu);
-      call_file = dwarf2_attr (die, DW_AT_call_file, cu);
-      if (call_line == NULL || call_file == NULL)
-	{
-	  read_lexical_block_scope (die, cu);
-	  return;
-	}
-    }
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  name = dwarf2_name (die, cu);
-
-  /* Ignore functions with missing or empty names.  These are actually
-     illegal according to the DWARF standard.  */
-  if (name == NULL)
-    {
-      complaint (_("missing name for subprogram DIE at %s"),
-		 sect_offset_str (die->sect_off));
-      return;
-    }
-
-  /* Ignore functions with missing or invalid low and high pc attributes.  */
-  if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)
-      <= PC_BOUNDS_INVALID)
-    {
-      attr = dwarf2_attr (die, DW_AT_external, cu);
-      if (!attr || !DW_UNSND (attr))
-	complaint (_("cannot get low and high bounds "
-		     "for subprogram DIE at %s"),
-		   sect_offset_str (die->sect_off));
-      return;
-    }
-
-  lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
-  highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
-
-  /* If we have any template arguments, then we must allocate a
-     different sort of symbol.  */
-  for (child_die = die->child; child_die; child_die = sibling_die (child_die))
-    {
-      if (child_die->tag == DW_TAG_template_type_param
-	  || child_die->tag == DW_TAG_template_value_param)
-	{
-	  templ_func = allocate_template_symbol (objfile);
-	  templ_func->subclass = SYMBOL_TEMPLATE;
-	  break;
-	}
-    }
-
-  newobj = cu->get_builder ()->push_context (0, lowpc);
-  newobj->name = new_symbol (die, read_type_die (die, cu), cu,
-			     (struct symbol *) templ_func);
-
-  if (dwarf2_flag_true_p (die, DW_AT_main_subprogram, cu))
-    set_objfile_main_name (objfile, newobj->name->linkage_name (),
-			   cu->language);
-
-  /* If there is a location expression for DW_AT_frame_base, record
-     it.  */
-  attr = dwarf2_attr (die, DW_AT_frame_base, cu);
-  if (attr != nullptr)
-    dwarf2_symbol_mark_computed (attr, newobj->name, cu, 1);
-
-  /* If there is a location for the static link, record it.  */
-  newobj->static_link = NULL;
-  attr = dwarf2_attr (die, DW_AT_static_link, cu);
-  if (attr != nullptr)
-    {
-      newobj->static_link
-	= XOBNEW (&objfile->objfile_obstack, struct dynamic_prop);
-      attr_to_dynamic_prop (attr, die, cu, newobj->static_link,
-			    dwarf2_per_cu_addr_type (cu->per_cu));
-    }
-
-  cu->list_in_scope = cu->get_builder ()->get_local_symbols ();
-
-  if (die->child != NULL)
-    {
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  if (child_die->tag == DW_TAG_template_type_param
-	      || child_die->tag == DW_TAG_template_value_param)
-	    {
-	      struct symbol *arg = new_symbol (child_die, NULL, cu);
-
-	      if (arg != NULL)
-		template_args.push_back (arg);
-	    }
-	  else
-	    process_die (child_die, cu);
-	  child_die = sibling_die (child_die);
-	}
-    }
-
-  inherit_abstract_dies (die, cu);
-
-  /* If we have a DW_AT_specification, we might need to import using
-     directives from the context of the specification DIE.  See the
-     comment in determine_prefix.  */
-  if (cu->language == language_cplus
-      && dwarf2_attr (die, DW_AT_specification, cu))
-    {
-      struct dwarf2_cu *spec_cu = cu;
-      struct die_info *spec_die = die_specification (die, &spec_cu);
-
-      while (spec_die)
-	{
-	  child_die = spec_die->child;
-	  while (child_die && child_die->tag)
-	    {
-	      if (child_die->tag == DW_TAG_imported_module)
-		process_die (child_die, spec_cu);
-	      child_die = sibling_die (child_die);
-	    }
-
-	  /* In some cases, GCC generates specification DIEs that
-	     themselves contain DW_AT_specification attributes.  */
-	  spec_die = die_specification (spec_die, &spec_cu);
-	}
-    }
-
-  struct context_stack cstk = cu->get_builder ()->pop_context ();
-  /* Make a block for the local symbols within.  */
-  block = cu->get_builder ()->finish_block (cstk.name, cstk.old_blocks,
-				     cstk.static_link, lowpc, highpc);
-
-  /* For C++, set the block's scope.  */
-  if ((cu->language == language_cplus
-       || cu->language == language_fortran
-       || cu->language == language_d
-       || cu->language == language_rust)
-      && cu->processing_has_namespace_info)
-    block_set_scope (block, determine_prefix (die, cu),
-		     &objfile->objfile_obstack);
-
-  /* If we have address ranges, record them.  */
-  dwarf2_record_block_ranges (die, block, baseaddr, cu);
-
-  gdbarch_make_symbol_special (gdbarch, cstk.name, objfile);
-
-  /* Attach template arguments to function.  */
-  if (!template_args.empty ())
-    {
-      gdb_assert (templ_func != NULL);
-
-      templ_func->n_template_arguments = template_args.size ();
-      templ_func->template_arguments
-        = XOBNEWVEC (&objfile->objfile_obstack, struct symbol *,
-		     templ_func->n_template_arguments);
-      memcpy (templ_func->template_arguments,
-	      template_args.data (),
-	      (templ_func->n_template_arguments * sizeof (struct symbol *)));
-
-      /* Make sure that the symtab is set on the new symbols.  Even
-	 though they don't appear in this symtab directly, other parts
-	 of gdb assume that symbols do, and this is reasonably
-	 true.  */
-      for (symbol *sym : template_args)
-	symbol_set_symtab (sym, symbol_symtab (templ_func));
-    }
-
-  /* In C++, we can have functions nested inside functions (e.g., when
-     a function declares a class that has methods).  This means that
-     when we finish processing a function scope, we may need to go
-     back to building a containing block's symbol lists.  */
-  *cu->get_builder ()->get_local_symbols () = cstk.locals;
-  cu->get_builder ()->set_local_using_directives (cstk.local_using_directives);
-
-  /* If we've finished processing a top-level function, subsequent
-     symbols go in the file symbol list.  */
-  if (cu->get_builder ()->outermost_context_p ())
-    cu->list_in_scope = cu->get_builder ()->get_file_symbols ();
-}
-
-/* Process all the DIES contained within a lexical block scope.  Start
-   a new scope, process the dies, and then close the scope.  */
-
-static void
-read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  CORE_ADDR lowpc, highpc;
-  struct die_info *child_die;
-  CORE_ADDR baseaddr;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  /* Ignore blocks with missing or invalid low and high pc attributes.  */
-  /* ??? Perhaps consider discontiguous blocks defined by DW_AT_ranges
-     as multiple lexical blocks?  Handling children in a sane way would
-     be nasty.  Might be easier to properly extend generic blocks to
-     describe ranges.  */
-  switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL))
-    {
-    case PC_BOUNDS_NOT_PRESENT:
-      /* DW_TAG_lexical_block has no attributes, process its children as if
-	 there was no wrapping by that DW_TAG_lexical_block.
-	 GCC does no longer produces such DWARF since GCC r224161.  */
-      for (child_die = die->child;
-	   child_die != NULL && child_die->tag;
-	   child_die = sibling_die (child_die))
-	process_die (child_die, cu);
-      return;
-    case PC_BOUNDS_INVALID:
-      return;
-    }
-  lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
-  highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr);
-
-  cu->get_builder ()->push_context (0, lowpc);
-  if (die->child != NULL)
-    {
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  process_die (child_die, cu);
-	  child_die = sibling_die (child_die);
-	}
-    }
-  inherit_abstract_dies (die, cu);
-  struct context_stack cstk = cu->get_builder ()->pop_context ();
-
-  if (*cu->get_builder ()->get_local_symbols () != NULL
-      || (*cu->get_builder ()->get_local_using_directives ()) != NULL)
-    {
-      struct block *block
-        = cu->get_builder ()->finish_block (0, cstk.old_blocks, NULL,
-				     cstk.start_addr, highpc);
-
-      /* Note that recording ranges after traversing children, as we
-         do here, means that recording a parent's ranges entails
-         walking across all its children's ranges as they appear in
-         the address map, which is quadratic behavior.
-
-         It would be nicer to record the parent's ranges before
-         traversing its children, simply overriding whatever you find
-         there.  But since we don't even decide whether to create a
-         block until after we've traversed its children, that's hard
-         to do.  */
-      dwarf2_record_block_ranges (die, block, baseaddr, cu);
-    }
-  *cu->get_builder ()->get_local_symbols () = cstk.locals;
-  cu->get_builder ()->set_local_using_directives (cstk.local_using_directives);
-}
-
-/* Read in DW_TAG_call_site and insert it to CU->call_site_htab.  */
-
-static void
-read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  CORE_ADDR pc, baseaddr;
-  struct attribute *attr;
-  struct call_site *call_site, call_site_local;
-  void **slot;
-  int nparams;
-  struct die_info *child_die;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  attr = dwarf2_attr (die, DW_AT_call_return_pc, cu);
-  if (attr == NULL)
-    {
-      /* This was a pre-DWARF-5 GNU extension alias
-	 for DW_AT_call_return_pc.  */
-      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
-    }
-  if (!attr)
-    {
-      complaint (_("missing DW_AT_call_return_pc for DW_TAG_call_site "
-		   "DIE %s [in module %s]"),
-		 sect_offset_str (die->sect_off), objfile_name (objfile));
-      return;
-    }
-  pc = attr_value_as_address (attr) + baseaddr;
-  pc = gdbarch_adjust_dwarf2_addr (gdbarch, pc);
-
-  if (cu->call_site_htab == NULL)
-    cu->call_site_htab = htab_create_alloc_ex (16, core_addr_hash, core_addr_eq,
-					       NULL, &objfile->objfile_obstack,
-					       hashtab_obstack_allocate, NULL);
-  call_site_local.pc = pc;
-  slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT);
-  if (*slot != NULL)
-    {
-      complaint (_("Duplicate PC %s for DW_TAG_call_site "
-		   "DIE %s [in module %s]"),
-		 paddress (gdbarch, pc), sect_offset_str (die->sect_off),
-		 objfile_name (objfile));
-      return;
-    }
-
-  /* Count parameters at the caller.  */
-
-  nparams = 0;
-  for (child_die = die->child; child_die && child_die->tag;
-       child_die = sibling_die (child_die))
-    {
-      if (child_die->tag != DW_TAG_call_site_parameter
-          && child_die->tag != DW_TAG_GNU_call_site_parameter)
-	{
-	  complaint (_("Tag %d is not DW_TAG_call_site_parameter in "
-		       "DW_TAG_call_site child DIE %s [in module %s]"),
-		     child_die->tag, sect_offset_str (child_die->sect_off),
-		     objfile_name (objfile));
-	  continue;
-	}
-
-      nparams++;
-    }
-
-  call_site
-    = ((struct call_site *)
-       obstack_alloc (&objfile->objfile_obstack,
-		      sizeof (*call_site)
-		      + (sizeof (*call_site->parameter) * (nparams - 1))));
-  *slot = call_site;
-  memset (call_site, 0, sizeof (*call_site) - sizeof (*call_site->parameter));
-  call_site->pc = pc;
-
-  if (dwarf2_flag_true_p (die, DW_AT_call_tail_call, cu)
-      || dwarf2_flag_true_p (die, DW_AT_GNU_tail_call, cu))
-    {
-      struct die_info *func_die;
-
-      /* Skip also over DW_TAG_inlined_subroutine.  */
-      for (func_die = die->parent;
-	   func_die && func_die->tag != DW_TAG_subprogram
-	   && func_die->tag != DW_TAG_subroutine_type;
-	   func_die = func_die->parent);
-
-      /* DW_AT_call_all_calls is a superset
-	 of DW_AT_call_all_tail_calls.  */
-      if (func_die
-          && !dwarf2_flag_true_p (func_die, DW_AT_call_all_calls, cu)
-          && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_call_sites, cu)
-	  && !dwarf2_flag_true_p (func_die, DW_AT_call_all_tail_calls, cu)
-	  && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_tail_call_sites, cu))
-	{
-	  /* TYPE_TAIL_CALL_LIST is not interesting in functions where it is
-	     not complete.  But keep CALL_SITE for look ups via call_site_htab,
-	     both the initial caller containing the real return address PC and
-	     the final callee containing the current PC of a chain of tail
-	     calls do not need to have the tail call list complete.  But any
-	     function candidate for a virtual tail call frame searched via
-	     TYPE_TAIL_CALL_LIST must have the tail call list complete to be
-	     determined unambiguously.  */
-	}
-      else
-	{
-	  struct type *func_type = NULL;
-
-	  if (func_die)
-	    func_type = get_die_type (func_die, cu);
-	  if (func_type != NULL)
-	    {
-	      gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC);
-
-	      /* Enlist this call site to the function.  */
-	      call_site->tail_call_next = TYPE_TAIL_CALL_LIST (func_type);
-	      TYPE_TAIL_CALL_LIST (func_type) = call_site;
-	    }
-	  else
-	    complaint (_("Cannot find function owning DW_TAG_call_site "
-			 "DIE %s [in module %s]"),
-		       sect_offset_str (die->sect_off), objfile_name (objfile));
-	}
-    }
-
-  attr = dwarf2_attr (die, DW_AT_call_target, cu);
-  if (attr == NULL)
-    attr = dwarf2_attr (die, DW_AT_GNU_call_site_target, cu);
-  if (attr == NULL)
-    attr = dwarf2_attr (die, DW_AT_call_origin, cu);
-  if (attr == NULL)
-    {
-      /* This was a pre-DWARF-5 GNU extension alias for DW_AT_call_origin.  */
-      attr = dwarf2_attr (die, DW_AT_abstract_origin, cu);
-    }
-  SET_FIELD_DWARF_BLOCK (call_site->target, NULL);
-  if (!attr || (attr_form_is_block (attr) && DW_BLOCK (attr)->size == 0))
-    /* Keep NULL DWARF_BLOCK.  */;
-  else if (attr_form_is_block (attr))
-    {
-      struct dwarf2_locexpr_baton *dlbaton;
-
-      dlbaton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton);
-      dlbaton->data = DW_BLOCK (attr)->data;
-      dlbaton->size = DW_BLOCK (attr)->size;
-      dlbaton->per_cu = cu->per_cu;
-
-      SET_FIELD_DWARF_BLOCK (call_site->target, dlbaton);
-    }
-  else if (attr_form_is_ref (attr))
-    {
-      struct dwarf2_cu *target_cu = cu;
-      struct die_info *target_die;
-
-      target_die = follow_die_ref (die, attr, &target_cu);
-      gdb_assert (target_cu->per_cu->dwarf2_per_objfile->objfile == objfile);
-      if (die_is_declaration (target_die, target_cu))
-	{
-	  const char *target_physname;
-
-	  /* Prefer the mangled name; otherwise compute the demangled one.  */
-	  target_physname = dw2_linkage_name (target_die, target_cu);
-	  if (target_physname == NULL)
-	    target_physname = dwarf2_physname (NULL, target_die, target_cu);
-	  if (target_physname == NULL)
-	    complaint (_("DW_AT_call_target target DIE has invalid "
-		         "physname, for referencing DIE %s [in module %s]"),
-		       sect_offset_str (die->sect_off), objfile_name (objfile));
-	  else
-	    SET_FIELD_PHYSNAME (call_site->target, target_physname);
-	}
-      else
-	{
-	  CORE_ADDR lowpc;
-
-	  /* DW_AT_entry_pc should be preferred.  */
-	  if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL)
-	      <= PC_BOUNDS_INVALID)
-	    complaint (_("DW_AT_call_target target DIE has invalid "
-		         "low pc, for referencing DIE %s [in module %s]"),
-		       sect_offset_str (die->sect_off), objfile_name (objfile));
-	  else
-	    {
-	      lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr);
-	      SET_FIELD_PHYSADDR (call_site->target, lowpc);
-	    }
-	}
-    }
-  else
-    complaint (_("DW_TAG_call_site DW_AT_call_target is neither "
-		 "block nor reference, for DIE %s [in module %s]"),
-	       sect_offset_str (die->sect_off), objfile_name (objfile));
-
-  call_site->per_cu = cu->per_cu;
-
-  for (child_die = die->child;
-       child_die && child_die->tag;
-       child_die = sibling_die (child_die))
-    {
-      struct call_site_parameter *parameter;
-      struct attribute *loc, *origin;
-
-      if (child_die->tag != DW_TAG_call_site_parameter
-          && child_die->tag != DW_TAG_GNU_call_site_parameter)
-	{
-	  /* Already printed the complaint above.  */
-	  continue;
-	}
-
-      gdb_assert (call_site->parameter_count < nparams);
-      parameter = &call_site->parameter[call_site->parameter_count];
-
-      /* DW_AT_location specifies the register number or DW_AT_abstract_origin
-	 specifies DW_TAG_formal_parameter.  Value of the data assumed for the
-	 register is contained in DW_AT_call_value.  */
-
-      loc = dwarf2_attr (child_die, DW_AT_location, cu);
-      origin = dwarf2_attr (child_die, DW_AT_call_parameter, cu);
-      if (origin == NULL)
-	{
-	  /* This was a pre-DWARF-5 GNU extension alias
-	     for DW_AT_call_parameter.  */
-	  origin = dwarf2_attr (child_die, DW_AT_abstract_origin, cu);
-	}
-      if (loc == NULL && origin != NULL && attr_form_is_ref (origin))
-	{
-	  parameter->kind = CALL_SITE_PARAMETER_PARAM_OFFSET;
-
-	  sect_offset sect_off
-	    = (sect_offset) dwarf2_get_ref_die_offset (origin);
-	  if (!offset_in_cu_p (&cu->header, sect_off))
-	    {
-	      /* As DW_OP_GNU_parameter_ref uses CU-relative offset this
-		 binding can be done only inside one CU.  Such referenced DIE
-		 therefore cannot be even moved to DW_TAG_partial_unit.  */
-	      complaint (_("DW_AT_call_parameter offset is not in CU for "
-			   "DW_TAG_call_site child DIE %s [in module %s]"),
-			 sect_offset_str (child_die->sect_off),
-			 objfile_name (objfile));
-	      continue;
-	    }
-	  parameter->u.param_cu_off
-	    = (cu_offset) (sect_off - cu->header.sect_off);
-	}
-      else if (loc == NULL || origin != NULL || !attr_form_is_block (loc))
-	{
-	  complaint (_("No DW_FORM_block* DW_AT_location for "
-		       "DW_TAG_call_site child DIE %s [in module %s]"),
-		     sect_offset_str (child_die->sect_off), objfile_name (objfile));
-	  continue;
-	}
-      else
-	{
-	  parameter->u.dwarf_reg = dwarf_block_to_dwarf_reg
-	    (DW_BLOCK (loc)->data, &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size]);
-	  if (parameter->u.dwarf_reg != -1)
-	    parameter->kind = CALL_SITE_PARAMETER_DWARF_REG;
-	  else if (dwarf_block_to_sp_offset (gdbarch, DW_BLOCK (loc)->data,
-				    &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size],
-					     &parameter->u.fb_offset))
-	    parameter->kind = CALL_SITE_PARAMETER_FB_OFFSET;
-	  else
-	    {
-	      complaint (_("Only single DW_OP_reg or DW_OP_fbreg is supported "
-			   "for DW_FORM_block* DW_AT_location is supported for "
-			   "DW_TAG_call_site child DIE %s "
-			   "[in module %s]"),
-			 sect_offset_str (child_die->sect_off),
-			 objfile_name (objfile));
-	      continue;
-	    }
-	}
-
-      attr = dwarf2_attr (child_die, DW_AT_call_value, cu);
-      if (attr == NULL)
-	attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_value, cu);
-      if (!attr_form_is_block (attr))
-	{
-	  complaint (_("No DW_FORM_block* DW_AT_call_value for "
-		       "DW_TAG_call_site child DIE %s [in module %s]"),
-		     sect_offset_str (child_die->sect_off),
-		     objfile_name (objfile));
-	  continue;
-	}
-      parameter->value = DW_BLOCK (attr)->data;
-      parameter->value_size = DW_BLOCK (attr)->size;
-
-      /* Parameters are not pre-cleared by memset above.  */
-      parameter->data_value = NULL;
-      parameter->data_value_size = 0;
-      call_site->parameter_count++;
-
-      attr = dwarf2_attr (child_die, DW_AT_call_data_value, cu);
-      if (attr == NULL)
-	attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_data_value, cu);
-      if (attr != nullptr)
-	{
-	  if (!attr_form_is_block (attr))
-	    complaint (_("No DW_FORM_block* DW_AT_call_data_value for "
-			 "DW_TAG_call_site child DIE %s [in module %s]"),
-		       sect_offset_str (child_die->sect_off),
-		       objfile_name (objfile));
-	  else
-	    {
-	      parameter->data_value = DW_BLOCK (attr)->data;
-	      parameter->data_value_size = DW_BLOCK (attr)->size;
-	    }
-	}
-    }
-}
-
-/* Helper function for read_variable.  If DIE represents a virtual
-   table, then return the type of the concrete object that is
-   associated with the virtual table.  Otherwise, return NULL.  */
-
-static struct type *
-rust_containing_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr = dwarf2_attr (die, DW_AT_type, cu);
-  if (attr == NULL)
-    return NULL;
-
-  /* Find the type DIE.  */
-  struct die_info *type_die = NULL;
-  struct dwarf2_cu *type_cu = cu;
-
-  if (attr_form_is_ref (attr))
-    type_die = follow_die_ref (die, attr, &type_cu);
-  if (type_die == NULL)
-    return NULL;
-
-  if (dwarf2_attr (type_die, DW_AT_containing_type, type_cu) == NULL)
-    return NULL;
-  return die_containing_type (type_die, type_cu);
-}
-
-/* Read a variable (DW_TAG_variable) DIE and create a new symbol.  */
-
-static void
-read_variable (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct rust_vtable_symbol *storage = NULL;
-
-  if (cu->language == language_rust)
-    {
-      struct type *containing_type = rust_containing_type (die, cu);
-
-      if (containing_type != NULL)
-	{
-	  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-
-	  storage = new (&objfile->objfile_obstack) rust_vtable_symbol ();
-	  initialize_objfile_symbol (storage);
-	  storage->concrete_type = containing_type;
-	  storage->subclass = SYMBOL_RUST_VTABLE;
-	}
-    }
-
-  struct symbol *res = new_symbol (die, NULL, cu, storage);
-  struct attribute *abstract_origin
-    = dwarf2_attr (die, DW_AT_abstract_origin, cu);
-  struct attribute *loc = dwarf2_attr (die, DW_AT_location, cu);
-  if (res == NULL && loc && abstract_origin)
-    {
-      /* We have a variable without a name, but with a location and an abstract
-	 origin.  This may be a concrete instance of an abstract variable
-	 referenced from an DW_OP_GNU_variable_value, so save it to find it back
-	 later.  */
-      struct dwarf2_cu *origin_cu = cu;
-      struct die_info *origin_die
-	= follow_die_ref (die, abstract_origin, &origin_cu);
-      dwarf2_per_objfile *dpo = cu->per_cu->dwarf2_per_objfile;
-      dpo->abstract_to_concrete[origin_die->sect_off].push_back (die->sect_off);
-    }
-}
-
-/* Call CALLBACK from DW_AT_ranges attribute value OFFSET
-   reading .debug_rnglists.
-   Callback's type should be:
-    void (CORE_ADDR range_beginning, CORE_ADDR range_end)
-   Return true if the attributes are present and valid, otherwise,
-   return false.  */
-
-template <typename Callback>
-static bool
-dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu,
-			 Callback &&callback)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  bfd *obfd = objfile->obfd;
-  /* Base address selection entry.  */
-  CORE_ADDR base;
-  int found_base;
-  const gdb_byte *buffer;
-  CORE_ADDR baseaddr;
-  bool overflow = false;
-
-  found_base = cu->base_known;
-  base = cu->base_address;
-
-  dwarf2_read_section (objfile, &dwarf2_per_objfile->rnglists);
-  if (offset >= dwarf2_per_objfile->rnglists.size)
-    {
-      complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"),
-		 offset);
-      return false;
-    }
-  buffer = dwarf2_per_objfile->rnglists.buffer + offset;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  while (1)
-    {
-      /* Initialize it due to a false compiler warning.  */
-      CORE_ADDR range_beginning = 0, range_end = 0;
-      const gdb_byte *buf_end = (dwarf2_per_objfile->rnglists.buffer
-				 + dwarf2_per_objfile->rnglists.size);
-      unsigned int bytes_read;
-
-      if (buffer == buf_end)
-	{
-	  overflow = true;
-	  break;
-	}
-      const auto rlet = static_cast<enum dwarf_range_list_entry>(*buffer++);
-      switch (rlet)
-	{
-	case DW_RLE_end_of_list:
-	  break;
-	case DW_RLE_base_address:
-	  if (buffer + cu->header.addr_size > buf_end)
-	    {
-	      overflow = true;
-	      break;
-	    }
-	  base = read_address (obfd, buffer, cu, &bytes_read);
-	  found_base = 1;
-	  buffer += bytes_read;
-	  break;
-	case DW_RLE_start_length:
-	  if (buffer + cu->header.addr_size > buf_end)
-	    {
-	      overflow = true;
-	      break;
-	    }
-	  range_beginning = read_address (obfd, buffer, cu, &bytes_read);
-	  buffer += bytes_read;
-	  range_end = (range_beginning
-		       + read_unsigned_leb128 (obfd, buffer, &bytes_read));
-	  buffer += bytes_read;
-	  if (buffer > buf_end)
-	    {
-	      overflow = true;
-	      break;
-	    }
-	  break;
-	case DW_RLE_offset_pair:
-	  range_beginning = read_unsigned_leb128 (obfd, buffer, &bytes_read);
-	  buffer += bytes_read;
-	  if (buffer > buf_end)
-	    {
-	      overflow = true;
-	      break;
-	    }
-	  range_end = read_unsigned_leb128 (obfd, buffer, &bytes_read);
-	  buffer += bytes_read;
-	  if (buffer > buf_end)
-	    {
-	      overflow = true;
-	      break;
-	    }
-	  break;
-	case DW_RLE_start_end:
-	  if (buffer + 2 * cu->header.addr_size > buf_end)
-	    {
-	      overflow = true;
-	      break;
-	    }
-	  range_beginning = read_address (obfd, buffer, cu, &bytes_read);
-	  buffer += bytes_read;
-	  range_end = read_address (obfd, buffer, cu, &bytes_read);
-	  buffer += bytes_read;
-	  break;
-	default:
-	  complaint (_("Invalid .debug_rnglists data (no base address)"));
-	  return false;
-	}
-      if (rlet == DW_RLE_end_of_list || overflow)
-	break;
-      if (rlet == DW_RLE_base_address)
-	continue;
-
-      if (!found_base)
-	{
-	  /* We have no valid base address for the ranges
-	     data.  */
-	  complaint (_("Invalid .debug_rnglists data (no base address)"));
-	  return false;
-	}
-
-      if (range_beginning > range_end)
-	{
-	  /* Inverted range entries are invalid.  */
-	  complaint (_("Invalid .debug_rnglists data (inverted range)"));
-	  return false;
-	}
-
-      /* Empty range entries have no effect.  */
-      if (range_beginning == range_end)
-	continue;
-
-      range_beginning += base;
-      range_end += base;
-
-      /* A not-uncommon case of bad debug info.
-	 Don't pollute the addrmap with bad data.  */
-      if (range_beginning + baseaddr == 0
-	  && !dwarf2_per_objfile->has_section_at_zero)
-	{
-	  complaint (_(".debug_rnglists entry has start address of zero"
-		       " [in module %s]"), objfile_name (objfile));
-	  continue;
-	}
-
-      callback (range_beginning, range_end);
-    }
-
-  if (overflow)
-    {
-      complaint (_("Offset %d is not terminated "
-		   "for DW_AT_ranges attribute"),
-		 offset);
-      return false;
-    }
-
-  return true;
-}
-
-/* Call CALLBACK from DW_AT_ranges attribute value OFFSET reading .debug_ranges.
-   Callback's type should be:
-    void (CORE_ADDR range_beginning, CORE_ADDR range_end)
-   Return 1 if the attributes are present and valid, otherwise, return 0.  */
-
-template <typename Callback>
-static int
-dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu,
-		       Callback &&callback)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-      = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct comp_unit_head *cu_header = &cu->header;
-  bfd *obfd = objfile->obfd;
-  unsigned int addr_size = cu_header->addr_size;
-  CORE_ADDR mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
-  /* Base address selection entry.  */
-  CORE_ADDR base;
-  int found_base;
-  unsigned int dummy;
-  const gdb_byte *buffer;
-  CORE_ADDR baseaddr;
-
-  if (cu_header->version >= 5)
-    return dwarf2_rnglists_process (offset, cu, callback);
-
-  found_base = cu->base_known;
-  base = cu->base_address;
-
-  dwarf2_read_section (objfile, &dwarf2_per_objfile->ranges);
-  if (offset >= dwarf2_per_objfile->ranges.size)
-    {
-      complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"),
-		 offset);
-      return 0;
-    }
-  buffer = dwarf2_per_objfile->ranges.buffer + offset;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  while (1)
-    {
-      CORE_ADDR range_beginning, range_end;
-
-      range_beginning = read_address (obfd, buffer, cu, &dummy);
-      buffer += addr_size;
-      range_end = read_address (obfd, buffer, cu, &dummy);
-      buffer += addr_size;
-      offset += 2 * addr_size;
-
-      /* An end of list marker is a pair of zero addresses.  */
-      if (range_beginning == 0 && range_end == 0)
-	/* Found the end of list entry.  */
-	break;
-
-      /* Each base address selection entry is a pair of 2 values.
-	 The first is the largest possible address, the second is
-	 the base address.  Check for a base address here.  */
-      if ((range_beginning & mask) == mask)
-	{
-	  /* If we found the largest possible address, then we already
-	     have the base address in range_end.  */
-	  base = range_end;
-	  found_base = 1;
-	  continue;
-	}
-
-      if (!found_base)
-	{
-	  /* We have no valid base address for the ranges
-	     data.  */
-	  complaint (_("Invalid .debug_ranges data (no base address)"));
-	  return 0;
-	}
-
-      if (range_beginning > range_end)
-	{
-	  /* Inverted range entries are invalid.  */
-	  complaint (_("Invalid .debug_ranges data (inverted range)"));
-	  return 0;
-	}
-
-      /* Empty range entries have no effect.  */
-      if (range_beginning == range_end)
-	continue;
-
-      range_beginning += base;
-      range_end += base;
-
-      /* A not-uncommon case of bad debug info.
-	 Don't pollute the addrmap with bad data.  */
-      if (range_beginning + baseaddr == 0
-	  && !dwarf2_per_objfile->has_section_at_zero)
-	{
-	  complaint (_(".debug_ranges entry has start address of zero"
-		       " [in module %s]"), objfile_name (objfile));
-	  continue;
-	}
-
-      callback (range_beginning, range_end);
-    }
-
-  return 1;
-}
-
-/* Get low and high pc attributes from DW_AT_ranges attribute value OFFSET.
-   Return 1 if the attributes are present and valid, otherwise, return 0.
-   If RANGES_PST is not NULL we should setup `objfile->psymtabs_addrmap'.  */
-
-static int
-dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
-		    CORE_ADDR *high_return, struct dwarf2_cu *cu,
-		    struct partial_symtab *ranges_pst)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  const CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets,
-				       SECT_OFF_TEXT (objfile));
-  int low_set = 0;
-  CORE_ADDR low = 0;
-  CORE_ADDR high = 0;
-  int retval;
-
-  retval = dwarf2_ranges_process (offset, cu,
-    [&] (CORE_ADDR range_beginning, CORE_ADDR range_end)
-    {
-      if (ranges_pst != NULL)
-	{
-	  CORE_ADDR lowpc;
-	  CORE_ADDR highpc;
-
-	  lowpc = (gdbarch_adjust_dwarf2_addr (gdbarch,
-					       range_beginning + baseaddr)
-		   - baseaddr);
-	  highpc = (gdbarch_adjust_dwarf2_addr (gdbarch,
-						range_end + baseaddr)
-		    - baseaddr);
-	  addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap,
-			     lowpc, highpc - 1, ranges_pst);
-	}
-
-      /* FIXME: This is recording everything as a low-high
-	 segment of consecutive addresses.  We should have a
-	 data structure for discontiguous block ranges
-	 instead.  */
-      if (! low_set)
-	{
-	  low = range_beginning;
-	  high = range_end;
-	  low_set = 1;
-	}
-      else
-	{
-	  if (range_beginning < low)
-	    low = range_beginning;
-	  if (range_end > high)
-	    high = range_end;
-	}
-    });
-  if (!retval)
-    return 0;
-
-  if (! low_set)
-    /* If the first entry is an end-of-list marker, the range
-       describes an empty scope, i.e. no instructions.  */
-    return 0;
-
-  if (low_return)
-    *low_return = low;
-  if (high_return)
-    *high_return = high;
-  return 1;
-}
-
-/* Get low and high pc attributes from a die.  See enum pc_bounds_kind
-   definition for the return value.  *LOWPC and *HIGHPC are set iff
-   neither PC_BOUNDS_NOT_PRESENT nor PC_BOUNDS_INVALID are returned.  */
-
-static enum pc_bounds_kind
-dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
-		      CORE_ADDR *highpc, struct dwarf2_cu *cu,
-		      struct partial_symtab *pst)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct attribute *attr;
-  struct attribute *attr_high;
-  CORE_ADDR low = 0;
-  CORE_ADDR high = 0;
-  enum pc_bounds_kind ret;
-
-  attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
-  if (attr_high)
-    {
-      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
-      if (attr != nullptr)
-        {
-	  low = attr_value_as_address (attr);
-	  high = attr_value_as_address (attr_high);
-	  if (cu->header.version >= 4 && attr_form_is_constant (attr_high))
-	    high += low;
-	}
-      else
-	/* Found high w/o low attribute.  */
-	return PC_BOUNDS_INVALID;
-
-      /* Found consecutive range of addresses.  */
-      ret = PC_BOUNDS_HIGH_LOW;
-    }
-  else
-    {
-      attr = dwarf2_attr (die, DW_AT_ranges, cu);
-      if (attr != NULL)
-	{
-	  /* DW_AT_ranges_base does not apply to DIEs from the DWO skeleton.
-	     We take advantage of the fact that DW_AT_ranges does not appear
-	     in DW_TAG_compile_unit of DWO files.  */
-	  int need_ranges_base = die->tag != DW_TAG_compile_unit;
-	  unsigned int ranges_offset = (DW_UNSND (attr)
-					+ (need_ranges_base
-					   ? cu->ranges_base
-					   : 0));
-
-	  /* Value of the DW_AT_ranges attribute is the offset in the
-	     .debug_ranges section.  */
-	  if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst))
-	    return PC_BOUNDS_INVALID;
-	  /* Found discontinuous range of addresses.  */
-	  ret = PC_BOUNDS_RANGES;
-	}
-      else
-	return PC_BOUNDS_NOT_PRESENT;
-    }
-
-  /* partial_die_info::read has also the strict LOW < HIGH requirement.  */
-  if (high <= low)
-    return PC_BOUNDS_INVALID;
-
-  /* When using the GNU linker, .gnu.linkonce. sections are used to
-     eliminate duplicate copies of functions and vtables and such.
-     The linker will arbitrarily choose one and discard the others.
-     The AT_*_pc values for such functions refer to local labels in
-     these sections.  If the section from that file was discarded, the
-     labels are not in the output, so the relocs get a value of 0.
-     If this is a discarded function, mark the pc bounds as invalid,
-     so that GDB will ignore it.  */
-  if (low == 0 && !dwarf2_per_objfile->has_section_at_zero)
-    return PC_BOUNDS_INVALID;
-
-  *lowpc = low;
-  if (highpc)
-    *highpc = high;
-  return ret;
-}
-
-/* Assuming that DIE represents a subprogram DIE or a lexical block, get
-   its low and high PC addresses.  Do nothing if these addresses could not
-   be determined.  Otherwise, set LOWPC to the low address if it is smaller,
-   and HIGHPC to the high address if greater than HIGHPC.  */
-
-static void
-dwarf2_get_subprogram_pc_bounds (struct die_info *die,
-                                 CORE_ADDR *lowpc, CORE_ADDR *highpc,
-                                 struct dwarf2_cu *cu)
-{
-  CORE_ADDR low, high;
-  struct die_info *child = die->child;
-
-  if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) >= PC_BOUNDS_RANGES)
-    {
-      *lowpc = std::min (*lowpc, low);
-      *highpc = std::max (*highpc, high);
-    }
-
-  /* If the language does not allow nested subprograms (either inside
-     subprograms or lexical blocks), we're done.  */
-  if (cu->language != language_ada)
-    return;
-
-  /* Check all the children of the given DIE.  If it contains nested
-     subprograms, then check their pc bounds.  Likewise, we need to
-     check lexical blocks as well, as they may also contain subprogram
-     definitions.  */
-  while (child && child->tag)
-    {
-      if (child->tag == DW_TAG_subprogram
-          || child->tag == DW_TAG_lexical_block)
-        dwarf2_get_subprogram_pc_bounds (child, lowpc, highpc, cu);
-      child = sibling_die (child);
-    }
-}
-
-/* Get the low and high pc's represented by the scope DIE, and store
-   them in *LOWPC and *HIGHPC.  If the correct values can't be
-   determined, set *LOWPC to -1 and *HIGHPC to 0.  */
-
-static void
-get_scope_pc_bounds (struct die_info *die,
-		     CORE_ADDR *lowpc, CORE_ADDR *highpc,
-		     struct dwarf2_cu *cu)
-{
-  CORE_ADDR best_low = (CORE_ADDR) -1;
-  CORE_ADDR best_high = (CORE_ADDR) 0;
-  CORE_ADDR current_low, current_high;
-
-  if (dwarf2_get_pc_bounds (die, &current_low, &current_high, cu, NULL)
-      >= PC_BOUNDS_RANGES)
-    {
-      best_low = current_low;
-      best_high = current_high;
-    }
-  else
-    {
-      struct die_info *child = die->child;
-
-      while (child && child->tag)
-	{
-	  switch (child->tag) {
-	  case DW_TAG_subprogram:
-            dwarf2_get_subprogram_pc_bounds (child, &best_low, &best_high, cu);
-	    break;
-	  case DW_TAG_namespace:
-	  case DW_TAG_module:
-	    /* FIXME: carlton/2004-01-16: Should we do this for
-	       DW_TAG_class_type/DW_TAG_structure_type, too?  I think
-	       that current GCC's always emit the DIEs corresponding
-	       to definitions of methods of classes as children of a
-	       DW_TAG_compile_unit or DW_TAG_namespace (as opposed to
-	       the DIEs giving the declarations, which could be
-	       anywhere).  But I don't see any reason why the
-	       standards says that they have to be there.  */
-	    get_scope_pc_bounds (child, &current_low, &current_high, cu);
-
-	    if (current_low != ((CORE_ADDR) -1))
-	      {
-		best_low = std::min (best_low, current_low);
-		best_high = std::max (best_high, current_high);
-	      }
-	    break;
-	  default:
-	    /* Ignore.  */
-	    break;
-	  }
-
-	  child = sibling_die (child);
-	}
-    }
-
-  *lowpc = best_low;
-  *highpc = best_high;
-}
-
-/* Record the address ranges for BLOCK, offset by BASEADDR, as given
-   in DIE.  */
-
-static void
-dwarf2_record_block_ranges (struct die_info *die, struct block *block,
-                            CORE_ADDR baseaddr, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct attribute *attr;
-  struct attribute *attr_high;
-
-  attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
-  if (attr_high)
-    {
-      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
-      if (attr != nullptr)
-        {
-          CORE_ADDR low = attr_value_as_address (attr);
-	  CORE_ADDR high = attr_value_as_address (attr_high);
-
-	  if (cu->header.version >= 4 && attr_form_is_constant (attr_high))
-	    high += low;
-
-	  low = gdbarch_adjust_dwarf2_addr (gdbarch, low + baseaddr);
-	  high = gdbarch_adjust_dwarf2_addr (gdbarch, high + baseaddr);
-	  cu->get_builder ()->record_block_range (block, low, high - 1);
-        }
-    }
-
-  attr = dwarf2_attr (die, DW_AT_ranges, cu);
-  if (attr != nullptr)
-    {
-      /* DW_AT_ranges_base does not apply to DIEs from the DWO skeleton.
-	 We take advantage of the fact that DW_AT_ranges does not appear
-	 in DW_TAG_compile_unit of DWO files.  */
-      int need_ranges_base = die->tag != DW_TAG_compile_unit;
-
-      /* The value of the DW_AT_ranges attribute is the offset of the
-         address range list in the .debug_ranges section.  */
-      unsigned long offset = (DW_UNSND (attr)
-			      + (need_ranges_base ? cu->ranges_base : 0));
-
-      std::vector<blockrange> blockvec;
-      dwarf2_ranges_process (offset, cu,
-	[&] (CORE_ADDR start, CORE_ADDR end)
-	{
-	  start += baseaddr;
-	  end += baseaddr;
-	  start = gdbarch_adjust_dwarf2_addr (gdbarch, start);
-	  end = gdbarch_adjust_dwarf2_addr (gdbarch, end);
-	  cu->get_builder ()->record_block_range (block, start, end - 1);
-	  blockvec.emplace_back (start, end);
-	});
-
-      BLOCK_RANGES(block) = make_blockranges (objfile, blockvec);
-    }
-}
-
-/* Check whether the producer field indicates either of GCC < 4.6, or the
-   Intel C/C++ compiler, and cache the result in CU.  */
-
-static void
-check_producer (struct dwarf2_cu *cu)
-{
-  int major, minor;
-
-  if (cu->producer == NULL)
-    {
-      /* For unknown compilers expect their behavior is DWARF version
-	 compliant.
-
-	 GCC started to support .debug_types sections by -gdwarf-4 since
-	 gcc-4.5.x.  As the .debug_types sections are missing DW_AT_producer
-	 for their space efficiency GDB cannot workaround gcc-4.5.x -gdwarf-4
-	 combination.  gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility
-	 interpreted incorrectly by GDB now - GCC PR debug/48229.  */
-    }
-  else if (producer_is_gcc (cu->producer, &major, &minor))
-    {
-      cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
-      cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3);
-    }
-  else if (producer_is_icc (cu->producer, &major, &minor))
-    {
-      cu->producer_is_icc = true;
-      cu->producer_is_icc_lt_14 = major < 14;
-    }
-  else if (startswith (cu->producer, "CodeWarrior S12/L-ISA"))
-    cu->producer_is_codewarrior = true;
-  else
-    {
-      /* For other non-GCC compilers, expect their behavior is DWARF version
-	 compliant.  */
-    }
-
-  cu->checked_producer = true;
-}
-
-/* Check for GCC PR debug/45124 fix which is not present in any G++ version up
-   to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed
-   during 4.6.0 experimental.  */
-
-static bool
-producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu)
-{
-  if (!cu->checked_producer)
-    check_producer (cu);
-
-  return cu->producer_is_gxx_lt_4_6;
-}
-
-
-/* Codewarrior (at least as of version 5.0.40) generates dwarf line information
-   with incorrect is_stmt attributes.  */
-
-static bool
-producer_is_codewarrior (struct dwarf2_cu *cu)
-{
-  if (!cu->checked_producer)
-    check_producer (cu);
-
-  return cu->producer_is_codewarrior;
-}
-
-/* Return the default accessibility type if it is not overridden by
-   DW_AT_accessibility.  */
-
-static enum dwarf_access_attribute
-dwarf2_default_access_attribute (struct die_info *die, struct dwarf2_cu *cu)
-{
-  if (cu->header.version < 3 || producer_is_gxx_lt_4_6 (cu))
-    {
-      /* The default DWARF 2 accessibility for members is public, the default
-	 accessibility for inheritance is private.  */
-
-      if (die->tag != DW_TAG_inheritance)
-	return DW_ACCESS_public;
-      else
-	return DW_ACCESS_private;
-    }
-  else
-    {
-      /* DWARF 3+ defines the default accessibility a different way.  The same
-	 rules apply now for DW_TAG_inheritance as for the members and it only
-	 depends on the container kind.  */
-
-      if (die->parent->tag == DW_TAG_class_type)
-	return DW_ACCESS_private;
-      else
-	return DW_ACCESS_public;
-    }
-}
-
-/* Look for DW_AT_data_member_location.  Set *OFFSET to the byte
-   offset.  If the attribute was not found return 0, otherwise return
-   1.  If it was found but could not properly be handled, set *OFFSET
-   to 0.  */
-
-static int
-handle_data_member_location (struct die_info *die, struct dwarf2_cu *cu,
-			     LONGEST *offset)
-{
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_data_member_location, cu);
-  if (attr != NULL)
-    {
-      *offset = 0;
-
-      /* Note that we do not check for a section offset first here.
-	 This is because DW_AT_data_member_location is new in DWARF 4,
-	 so if we see it, we can assume that a constant form is really
-	 a constant and not a section offset.  */
-      if (attr_form_is_constant (attr))
-	*offset = dwarf2_get_attr_constant_value (attr, 0);
-      else if (attr_form_is_section_offset (attr))
-	dwarf2_complex_location_expr_complaint ();
-      else if (attr_form_is_block (attr))
-	*offset = decode_locdesc (DW_BLOCK (attr), cu);
-      else
-	dwarf2_complex_location_expr_complaint ();
-
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Add an aggregate field to the field list.  */
-
-static void
-dwarf2_add_field (struct field_info *fip, struct die_info *die,
-		  struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct nextfield *new_field;
-  struct attribute *attr;
-  struct field *fp;
-  const char *fieldname = "";
-
-  if (die->tag == DW_TAG_inheritance)
-    {
-      fip->baseclasses.emplace_back ();
-      new_field = &fip->baseclasses.back ();
-    }
-  else
-    {
-      fip->fields.emplace_back ();
-      new_field = &fip->fields.back ();
-    }
-
-  fip->nfields++;
-
-  attr = dwarf2_attr (die, DW_AT_accessibility, cu);
-  if (attr != nullptr)
-    new_field->accessibility = DW_UNSND (attr);
-  else
-    new_field->accessibility = dwarf2_default_access_attribute (die, cu);
-  if (new_field->accessibility != DW_ACCESS_public)
-    fip->non_public_fields = 1;
-
-  attr = dwarf2_attr (die, DW_AT_virtuality, cu);
-  if (attr != nullptr)
-    new_field->virtuality = DW_UNSND (attr);
-  else
-    new_field->virtuality = DW_VIRTUALITY_none;
-
-  fp = &new_field->field;
-
-  if (die->tag == DW_TAG_member && ! die_is_declaration (die, cu))
-    {
-      LONGEST offset;
-
-      /* Data member other than a C++ static data member.  */
-
-      /* Get type of field.  */
-      fp->type = die_type (die, cu);
-
-      SET_FIELD_BITPOS (*fp, 0);
-
-      /* Get bit size of field (zero if none).  */
-      attr = dwarf2_attr (die, DW_AT_bit_size, cu);
-      if (attr != nullptr)
-	{
-	  FIELD_BITSIZE (*fp) = DW_UNSND (attr);
-	}
-      else
-	{
-	  FIELD_BITSIZE (*fp) = 0;
-	}
-
-      /* Get bit offset of field.  */
-      if (handle_data_member_location (die, cu, &offset))
-	SET_FIELD_BITPOS (*fp, offset * bits_per_byte);
-      attr = dwarf2_attr (die, DW_AT_bit_offset, cu);
-      if (attr != nullptr)
-	{
-	  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-	    {
-	      /* For big endian bits, the DW_AT_bit_offset gives the
-	         additional bit offset from the MSB of the containing
-	         anonymous object to the MSB of the field.  We don't
-	         have to do anything special since we don't need to
-	         know the size of the anonymous object.  */
-	      SET_FIELD_BITPOS (*fp, FIELD_BITPOS (*fp) + DW_UNSND (attr));
-	    }
-	  else
-	    {
-	      /* For little endian bits, compute the bit offset to the
-	         MSB of the anonymous object, subtract off the number of
-	         bits from the MSB of the field to the MSB of the
-	         object, and then subtract off the number of bits of
-	         the field itself.  The result is the bit offset of
-	         the LSB of the field.  */
-	      int anonymous_size;
-	      int bit_offset = DW_UNSND (attr);
-
-	      attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-	      if (attr != nullptr)
-		{
-		  /* The size of the anonymous object containing
-		     the bit field is explicit, so use the
-		     indicated size (in bytes).  */
-		  anonymous_size = DW_UNSND (attr);
-		}
-	      else
-		{
-		  /* The size of the anonymous object containing
-		     the bit field must be inferred from the type
-		     attribute of the data member containing the
-		     bit field.  */
-		  anonymous_size = TYPE_LENGTH (fp->type);
-		}
-	      SET_FIELD_BITPOS (*fp,
-				(FIELD_BITPOS (*fp)
-				 + anonymous_size * bits_per_byte
-				 - bit_offset - FIELD_BITSIZE (*fp)));
-	    }
-	}
-      attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu);
-      if (attr != NULL)
-	SET_FIELD_BITPOS (*fp, (FIELD_BITPOS (*fp)
-				+ dwarf2_get_attr_constant_value (attr, 0)));
-
-      /* Get name of field.  */
-      fieldname = dwarf2_name (die, cu);
-      if (fieldname == NULL)
-	fieldname = "";
-
-      /* The name is already allocated along with this objfile, so we don't
-	 need to duplicate it for the type.  */
-      fp->name = fieldname;
-
-      /* Change accessibility for artificial fields (e.g. virtual table
-         pointer or virtual base class pointer) to private.  */
-      if (dwarf2_attr (die, DW_AT_artificial, cu))
-	{
-	  FIELD_ARTIFICIAL (*fp) = 1;
-	  new_field->accessibility = DW_ACCESS_private;
-	  fip->non_public_fields = 1;
-	}
-    }
-  else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable)
-    {
-      /* C++ static member.  */
-
-      /* NOTE: carlton/2002-11-05: It should be a DW_TAG_member that
-	 is a declaration, but all versions of G++ as of this writing
-	 (so through at least 3.2.1) incorrectly generate
-	 DW_TAG_variable tags.  */
-
-      const char *physname;
-
-      /* Get name of field.  */
-      fieldname = dwarf2_name (die, cu);
-      if (fieldname == NULL)
-	return;
-
-      attr = dwarf2_attr (die, DW_AT_const_value, cu);
-      if (attr
-	  /* Only create a symbol if this is an external value.
-	     new_symbol checks this and puts the value in the global symbol
-	     table, which we want.  If it is not external, new_symbol
-	     will try to put the value in cu->list_in_scope which is wrong.  */
-	  && dwarf2_flag_true_p (die, DW_AT_external, cu))
-	{
-	  /* A static const member, not much different than an enum as far as
-	     we're concerned, except that we can support more types.  */
-	  new_symbol (die, NULL, cu);
-	}
-
-      /* Get physical name.  */
-      physname = dwarf2_physname (fieldname, die, cu);
-
-      /* The name is already allocated along with this objfile, so we don't
-	 need to duplicate it for the type.  */
-      SET_FIELD_PHYSNAME (*fp, physname ? physname : "");
-      FIELD_TYPE (*fp) = die_type (die, cu);
-      FIELD_NAME (*fp) = fieldname;
-    }
-  else if (die->tag == DW_TAG_inheritance)
-    {
-      LONGEST offset;
-
-      /* C++ base class field.  */
-      if (handle_data_member_location (die, cu, &offset))
-	SET_FIELD_BITPOS (*fp, offset * bits_per_byte);
-      FIELD_BITSIZE (*fp) = 0;
-      FIELD_TYPE (*fp) = die_type (die, cu);
-      FIELD_NAME (*fp) = TYPE_NAME (fp->type);
-    }
-  else if (die->tag == DW_TAG_variant_part)
-    {
-      /* process_structure_scope will treat this DIE as a union.  */
-      process_structure_scope (die, cu);
-
-      /* The variant part is relative to the start of the enclosing
-	 structure.  */
-      SET_FIELD_BITPOS (*fp, 0);
-      fp->type = get_die_type (die, cu);
-      fp->artificial = 1;
-      fp->name = "<<variant>>";
-
-      /* Normally a DW_TAG_variant_part won't have a size, but our
-	 representation requires one, so set it to the maximum of the
-	 child sizes, being sure to account for the offset at which
-	 each child is seen.  */
-      if (TYPE_LENGTH (fp->type) == 0)
-	{
-	  unsigned max = 0;
-	  for (int i = 0; i < TYPE_NFIELDS (fp->type); ++i)
-	    {
-	      unsigned len = ((TYPE_FIELD_BITPOS (fp->type, i) + 7) / 8
-			      + TYPE_LENGTH (TYPE_FIELD_TYPE (fp->type, i)));
-	      if (len > max)
-		max = len;
-	    }
-	  TYPE_LENGTH (fp->type) = max;
-	}
-    }
-  else
-    gdb_assert_not_reached ("missing case in dwarf2_add_field");
-}
-
-/* Can the type given by DIE define another type?  */
-
-static bool
-type_can_define_types (const struct die_info *die)
-{
-  switch (die->tag)
-    {
-    case DW_TAG_typedef:
-    case DW_TAG_class_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-    case DW_TAG_enumeration_type:
-      return true;
-
-    default:
-      return false;
-    }
-}
-
-/* Add a type definition defined in the scope of the FIP's class.  */
-
-static void
-dwarf2_add_type_defn (struct field_info *fip, struct die_info *die,
-		      struct dwarf2_cu *cu)
-{
-  struct decl_field fp;
-  memset (&fp, 0, sizeof (fp));
-
-  gdb_assert (type_can_define_types (die));
-
-  /* Get name of field.  NULL is okay here, meaning an anonymous type.  */
-  fp.name = dwarf2_name (die, cu);
-  fp.type = read_type_die (die, cu);
-
-  /* Save accessibility.  */
-  enum dwarf_access_attribute accessibility;
-  struct attribute *attr = dwarf2_attr (die, DW_AT_accessibility, cu);
-  if (attr != NULL)
-    accessibility = (enum dwarf_access_attribute) DW_UNSND (attr);
-  else
-    accessibility = dwarf2_default_access_attribute (die, cu);
-  switch (accessibility)
-    {
-    case DW_ACCESS_public:
-      /* The assumed value if neither private nor protected.  */
-      break;
-    case DW_ACCESS_private:
-      fp.is_private = 1;
-      break;
-    case DW_ACCESS_protected:
-      fp.is_protected = 1;
-      break;
-    default:
-      complaint (_("Unhandled DW_AT_accessibility value (%x)"), accessibility);
-    }
-
-  if (die->tag == DW_TAG_typedef)
-    fip->typedef_field_list.push_back (fp);
-  else
-    fip->nested_types_list.push_back (fp);
-}
-
-/* Create the vector of fields, and attach it to the type.  */
-
-static void
-dwarf2_attach_fields_to_type (struct field_info *fip, struct type *type,
-			      struct dwarf2_cu *cu)
-{
-  int nfields = fip->nfields;
-
-  /* Record the field count, allocate space for the array of fields,
-     and create blank accessibility bitfields if necessary.  */
-  TYPE_NFIELDS (type) = nfields;
-  TYPE_FIELDS (type) = (struct field *)
-    TYPE_ZALLOC (type, sizeof (struct field) * nfields);
-
-  if (fip->non_public_fields && cu->language != language_ada)
-    {
-      ALLOCATE_CPLUS_STRUCT_TYPE (type);
-
-      TYPE_FIELD_PRIVATE_BITS (type) =
-	(B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
-      B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
-
-      TYPE_FIELD_PROTECTED_BITS (type) =
-	(B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
-      B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
-
-      TYPE_FIELD_IGNORE_BITS (type) =
-	(B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
-      B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
-    }
-
-  /* If the type has baseclasses, allocate and clear a bit vector for
-     TYPE_FIELD_VIRTUAL_BITS.  */
-  if (!fip->baseclasses.empty () && cu->language != language_ada)
-    {
-      int num_bytes = B_BYTES (fip->baseclasses.size ());
-      unsigned char *pointer;
-
-      ALLOCATE_CPLUS_STRUCT_TYPE (type);
-      pointer = (unsigned char *) TYPE_ALLOC (type, num_bytes);
-      TYPE_FIELD_VIRTUAL_BITS (type) = pointer;
-      B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), fip->baseclasses.size ());
-      TYPE_N_BASECLASSES (type) = fip->baseclasses.size ();
-    }
-
-  if (TYPE_FLAG_DISCRIMINATED_UNION (type))
-    {
-      struct discriminant_info *di = alloc_discriminant_info (type, -1, -1);
-
-      for (int index = 0; index < nfields; ++index)
-	{
-	  struct nextfield &field = fip->fields[index];
-
-	  if (field.variant.is_discriminant)
-	    di->discriminant_index = index;
-	  else if (field.variant.default_branch)
-	    di->default_index = index;
-	  else
-	    di->discriminants[index] = field.variant.discriminant_value;
-	}
-    }
-
-  /* Copy the saved-up fields into the field vector.  */
-  for (int i = 0; i < nfields; ++i)
-    {
-      struct nextfield &field
-	= ((i < fip->baseclasses.size ()) ? fip->baseclasses[i]
-	   : fip->fields[i - fip->baseclasses.size ()]);
-
-      TYPE_FIELD (type, i) = field.field;
-      switch (field.accessibility)
-	{
-	case DW_ACCESS_private:
-	  if (cu->language != language_ada)
-	    SET_TYPE_FIELD_PRIVATE (type, i);
-	  break;
-
-	case DW_ACCESS_protected:
-	  if (cu->language != language_ada)
-	    SET_TYPE_FIELD_PROTECTED (type, i);
-	  break;
-
-	case DW_ACCESS_public:
-	  break;
-
-	default:
-	  /* Unknown accessibility.  Complain and treat it as public.  */
-	  {
-	    complaint (_("unsupported accessibility %d"),
-		       field.accessibility);
-	  }
-	  break;
-	}
-      if (i < fip->baseclasses.size ())
-	{
-	  switch (field.virtuality)
-	    {
-	    case DW_VIRTUALITY_virtual:
-	    case DW_VIRTUALITY_pure_virtual:
-	      if (cu->language == language_ada)
-		error (_("unexpected virtuality in component of Ada type"));
-	      SET_TYPE_FIELD_VIRTUAL (type, i);
-	      break;
-	    }
-	}
-    }
-}
-
-/* Return true if this member function is a constructor, false
-   otherwise.  */
-
-static int
-dwarf2_is_constructor (struct die_info *die, struct dwarf2_cu *cu)
-{
-  const char *fieldname;
-  const char *type_name;
-  int len;
-
-  if (die->parent == NULL)
-    return 0;
-
-  if (die->parent->tag != DW_TAG_structure_type
-      && die->parent->tag != DW_TAG_union_type
-      && die->parent->tag != DW_TAG_class_type)
-    return 0;
-
-  fieldname = dwarf2_name (die, cu);
-  type_name = dwarf2_name (die->parent, cu);
-  if (fieldname == NULL || type_name == NULL)
-    return 0;
-
-  len = strlen (fieldname);
-  return (strncmp (fieldname, type_name, len) == 0
-	  && (type_name[len] == '\0' || type_name[len] == '<'));
-}
-
-/* Add a member function to the proper fieldlist.  */
-
-static void
-dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
-		      struct type *type, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct attribute *attr;
-  int i;
-  struct fnfieldlist *flp = nullptr;
-  struct fn_field *fnp;
-  const char *fieldname;
-  struct type *this_type;
-  enum dwarf_access_attribute accessibility;
-
-  if (cu->language == language_ada)
-    error (_("unexpected member function in Ada type"));
-
-  /* Get name of member function.  */
-  fieldname = dwarf2_name (die, cu);
-  if (fieldname == NULL)
-    return;
-
-  /* Look up member function name in fieldlist.  */
-  for (i = 0; i < fip->fnfieldlists.size (); i++)
-    {
-      if (strcmp (fip->fnfieldlists[i].name, fieldname) == 0)
-	{
-	  flp = &fip->fnfieldlists[i];
-	  break;
-	}
-    }
-
-  /* Create a new fnfieldlist if necessary.  */
-  if (flp == nullptr)
-    {
-      fip->fnfieldlists.emplace_back ();
-      flp = &fip->fnfieldlists.back ();
-      flp->name = fieldname;
-      i = fip->fnfieldlists.size () - 1;
-    }
-
-  /* Create a new member function field and add it to the vector of
-     fnfieldlists.  */
-  flp->fnfields.emplace_back ();
-  fnp = &flp->fnfields.back ();
-
-  /* Delay processing of the physname until later.  */
-  if (cu->language == language_cplus)
-    add_to_method_list (type, i, flp->fnfields.size () - 1, fieldname,
-			die, cu);
-  else
-    {
-      const char *physname = dwarf2_physname (fieldname, die, cu);
-      fnp->physname = physname ? physname : "";
-    }
-
-  fnp->type = alloc_type (objfile);
-  this_type = read_type_die (die, cu);
-  if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC)
-    {
-      int nparams = TYPE_NFIELDS (this_type);
-
-      /* TYPE is the domain of this method, and THIS_TYPE is the type
-	   of the method itself (TYPE_CODE_METHOD).  */
-      smash_to_method_type (fnp->type, type,
-			    TYPE_TARGET_TYPE (this_type),
-			    TYPE_FIELDS (this_type),
-			    TYPE_NFIELDS (this_type),
-			    TYPE_VARARGS (this_type));
-
-      /* Handle static member functions.
-         Dwarf2 has no clean way to discern C++ static and non-static
-         member functions.  G++ helps GDB by marking the first
-         parameter for non-static member functions (which is the this
-         pointer) as artificial.  We obtain this information from
-         read_subroutine_type via TYPE_FIELD_ARTIFICIAL.  */
-      if (nparams == 0 || TYPE_FIELD_ARTIFICIAL (this_type, 0) == 0)
-	fnp->voffset = VOFFSET_STATIC;
-    }
-  else
-    complaint (_("member function type missing for '%s'"),
-	       dwarf2_full_name (fieldname, die, cu));
-
-  /* Get fcontext from DW_AT_containing_type if present.  */
-  if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
-    fnp->fcontext = die_containing_type (die, cu);
-
-  /* dwarf2 doesn't have stubbed physical names, so the setting of is_const and
-     is_volatile is irrelevant, as it is needed by gdb_mangle_name only.  */
-
-  /* Get accessibility.  */
-  attr = dwarf2_attr (die, DW_AT_accessibility, cu);
-  if (attr != nullptr)
-    accessibility = (enum dwarf_access_attribute) DW_UNSND (attr);
-  else
-    accessibility = dwarf2_default_access_attribute (die, cu);
-  switch (accessibility)
-    {
-    case DW_ACCESS_private:
-      fnp->is_private = 1;
-      break;
-    case DW_ACCESS_protected:
-      fnp->is_protected = 1;
-      break;
-    }
-
-  /* Check for artificial methods.  */
-  attr = dwarf2_attr (die, DW_AT_artificial, cu);
-  if (attr && DW_UNSND (attr) != 0)
-    fnp->is_artificial = 1;
-
-  fnp->is_constructor = dwarf2_is_constructor (die, cu);
-
-  /* Get index in virtual function table if it is a virtual member
-     function.  For older versions of GCC, this is an offset in the
-     appropriate virtual table, as specified by DW_AT_containing_type.
-     For everyone else, it is an expression to be evaluated relative
-     to the object address.  */
-
-  attr = dwarf2_attr (die, DW_AT_vtable_elem_location, cu);
-  if (attr != nullptr)
-    {
-      if (attr_form_is_block (attr) && DW_BLOCK (attr)->size > 0)
-        {
-	  if (DW_BLOCK (attr)->data[0] == DW_OP_constu)
-	    {
-	      /* Old-style GCC.  */
-	      fnp->voffset = decode_locdesc (DW_BLOCK (attr), cu) + 2;
-	    }
-	  else if (DW_BLOCK (attr)->data[0] == DW_OP_deref
-		   || (DW_BLOCK (attr)->size > 1
-		       && DW_BLOCK (attr)->data[0] == DW_OP_deref_size
-		       && DW_BLOCK (attr)->data[1] == cu->header.addr_size))
-	    {
-	      fnp->voffset = decode_locdesc (DW_BLOCK (attr), cu);
-	      if ((fnp->voffset % cu->header.addr_size) != 0)
-		dwarf2_complex_location_expr_complaint ();
-	      else
-		fnp->voffset /= cu->header.addr_size;
-	      fnp->voffset += 2;
-	    }
-	  else
-	    dwarf2_complex_location_expr_complaint ();
-
-	  if (!fnp->fcontext)
-	    {
-	      /* If there is no `this' field and no DW_AT_containing_type,
-		 we cannot actually find a base class context for the
-		 vtable!  */
-	      if (TYPE_NFIELDS (this_type) == 0
-		  || !TYPE_FIELD_ARTIFICIAL (this_type, 0))
-		{
-		  complaint (_("cannot determine context for virtual member "
-			       "function \"%s\" (offset %s)"),
-			     fieldname, sect_offset_str (die->sect_off));
-		}
-	      else
-		{
-		  fnp->fcontext
-		    = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (this_type, 0));
-		}
-	    }
-	}
-      else if (attr_form_is_section_offset (attr))
-        {
-	  dwarf2_complex_location_expr_complaint ();
-        }
-      else
-        {
-	  dwarf2_invalid_attrib_class_complaint ("DW_AT_vtable_elem_location",
-						 fieldname);
-        }
-    }
-  else
-    {
-      attr = dwarf2_attr (die, DW_AT_virtuality, cu);
-      if (attr && DW_UNSND (attr))
-	{
-	  /* GCC does this, as of 2008-08-25; PR debug/37237.  */
-	  complaint (_("Member function \"%s\" (offset %s) is virtual "
-		       "but the vtable offset is not specified"),
-		     fieldname, sect_offset_str (die->sect_off));
-	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
-	  TYPE_CPLUS_DYNAMIC (type) = 1;
-	}
-    }
-}
-
-/* Create the vector of member function fields, and attach it to the type.  */
-
-static void
-dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type,
-				 struct dwarf2_cu *cu)
-{
-  if (cu->language == language_ada)
-    error (_("unexpected member functions in Ada type"));
-
-  ALLOCATE_CPLUS_STRUCT_TYPE (type);
-  TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
-    TYPE_ALLOC (type,
-		sizeof (struct fn_fieldlist) * fip->fnfieldlists.size ());
-
-  for (int i = 0; i < fip->fnfieldlists.size (); i++)
-    {
-      struct fnfieldlist &nf = fip->fnfieldlists[i];
-      struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i);
-
-      TYPE_FN_FIELDLIST_NAME (type, i) = nf.name;
-      TYPE_FN_FIELDLIST_LENGTH (type, i) = nf.fnfields.size ();
-      fn_flp->fn_fields = (struct fn_field *)
-	TYPE_ALLOC (type, sizeof (struct fn_field) * nf.fnfields.size ());
-
-      for (int k = 0; k < nf.fnfields.size (); ++k)
-	fn_flp->fn_fields[k] = nf.fnfields[k];
-    }
-
-  TYPE_NFN_FIELDS (type) = fip->fnfieldlists.size ();
-}
-
-/* Returns non-zero if NAME is the name of a vtable member in CU's
-   language, zero otherwise.  */
-static int
-is_vtable_name (const char *name, struct dwarf2_cu *cu)
-{
-  static const char vptr[] = "_vptr";
-
-  /* Look for the C++ form of the vtable.  */
-  if (startswith (name, vptr) && is_cplus_marker (name[sizeof (vptr) - 1]))
-    return 1;
-
-  return 0;
-}
-
-/* GCC outputs unnamed structures that are really pointers to member
-   functions, with the ABI-specified layout.  If TYPE describes
-   such a structure, smash it into a member function type.
-
-   GCC shouldn't do this; it should just output pointer to member DIEs.
-   This is GCC PR debug/28767.  */
-
-static void
-quirk_gcc_member_function_pointer (struct type *type, struct objfile *objfile)
-{
-  struct type *pfn_type, *self_type, *new_type;
-
-  /* Check for a structure with no name and two children.  */
-  if (TYPE_CODE (type) != TYPE_CODE_STRUCT || TYPE_NFIELDS (type) != 2)
-    return;
-
-  /* Check for __pfn and __delta members.  */
-  if (TYPE_FIELD_NAME (type, 0) == NULL
-      || strcmp (TYPE_FIELD_NAME (type, 0), "__pfn") != 0
-      || TYPE_FIELD_NAME (type, 1) == NULL
-      || strcmp (TYPE_FIELD_NAME (type, 1), "__delta") != 0)
-    return;
-
-  /* Find the type of the method.  */
-  pfn_type = TYPE_FIELD_TYPE (type, 0);
-  if (pfn_type == NULL
-      || TYPE_CODE (pfn_type) != TYPE_CODE_PTR
-      || TYPE_CODE (TYPE_TARGET_TYPE (pfn_type)) != TYPE_CODE_FUNC)
-    return;
-
-  /* Look for the "this" argument.  */
-  pfn_type = TYPE_TARGET_TYPE (pfn_type);
-  if (TYPE_NFIELDS (pfn_type) == 0
-      /* || TYPE_FIELD_TYPE (pfn_type, 0) == NULL */
-      || TYPE_CODE (TYPE_FIELD_TYPE (pfn_type, 0)) != TYPE_CODE_PTR)
-    return;
-
-  self_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (pfn_type, 0));
-  new_type = alloc_type (objfile);
-  smash_to_method_type (new_type, self_type, TYPE_TARGET_TYPE (pfn_type),
-			TYPE_FIELDS (pfn_type), TYPE_NFIELDS (pfn_type),
-			TYPE_VARARGS (pfn_type));
-  smash_to_methodptr_type (type, new_type);
-}
-
-/* If the DIE has a DW_AT_alignment attribute, return its value, doing
-   appropriate error checking and issuing complaints if there is a
-   problem.  */
-
-static ULONGEST
-get_alignment (struct dwarf2_cu *cu, struct die_info *die)
-{
-  struct attribute *attr = dwarf2_attr (die, DW_AT_alignment, cu);
-
-  if (attr == nullptr)
-    return 0;
-
-  if (!attr_form_is_constant (attr))
-    {
-      complaint (_("DW_AT_alignment must have constant form"
-		   " - DIE at %s [in module %s]"),
-		 sect_offset_str (die->sect_off),
-		 objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-      return 0;
-    }
-
-  ULONGEST align;
-  if (attr->form == DW_FORM_sdata)
-    {
-      LONGEST val = DW_SND (attr);
-      if (val < 0)
-	{
-	  complaint (_("DW_AT_alignment value must not be negative"
-		       " - DIE at %s [in module %s]"),
-		     sect_offset_str (die->sect_off),
-		     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	  return 0;
-	}
-      align = val;
-    }
-  else
-    align = DW_UNSND (attr);
-
-  if (align == 0)
-    {
-      complaint (_("DW_AT_alignment value must not be zero"
-		   " - DIE at %s [in module %s]"),
-		 sect_offset_str (die->sect_off),
-		 objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-      return 0;
-    }
-  if ((align & (align - 1)) != 0)
-    {
-      complaint (_("DW_AT_alignment value must be a power of 2"
-		   " - DIE at %s [in module %s]"),
-		 sect_offset_str (die->sect_off),
-		 objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-      return 0;
-    }
-
-  return align;
-}
-
-/* If the DIE has a DW_AT_alignment attribute, use its value to set
-   the alignment for TYPE.  */
-
-static void
-maybe_set_alignment (struct dwarf2_cu *cu, struct die_info *die,
-		     struct type *type)
-{
-  if (!set_type_align (type, get_alignment (cu, die)))
-    complaint (_("DW_AT_alignment value too large"
-		 " - DIE at %s [in module %s]"),
-	       sect_offset_str (die->sect_off),
-	       objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-}
-
-/* Called when we find the DIE that starts a structure or union scope
-   (definition) to create a type for the structure or union.  Fill in
-   the type's name and general properties; the members will not be
-   processed until process_structure_scope.  A symbol table entry for
-   the type will also not be done until process_structure_scope (assuming
-   the type has a name).
-
-   NOTE: we need to call these functions regardless of whether or not the
-   DIE has a DW_AT_name attribute, since it might be an anonymous
-   structure or union.  This gets the type entered into our set of
-   user defined types.  */
-
-static struct type *
-read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct type *type;
-  struct attribute *attr;
-  const char *name;
-
-  /* If the definition of this type lives in .debug_types, read that type.
-     Don't follow DW_AT_specification though, that will take us back up
-     the chain and we want to go down.  */
-  attr = dwarf2_attr_no_follow (die, DW_AT_signature);
-  if (attr != nullptr)
-    {
-      type = get_DW_AT_signature_type (die, attr, cu);
-
-      /* The type's CU may not be the same as CU.
-	 Ensure TYPE is recorded with CU in die_type_hash.  */
-      return set_die_type (die, type, cu);
-    }
-
-  type = alloc_type (objfile);
-  INIT_CPLUS_SPECIFIC (type);
-
-  name = dwarf2_name (die, cu);
-  if (name != NULL)
-    {
-      if (cu->language == language_cplus
-	  || cu->language == language_d
-	  || cu->language == language_rust)
-	{
-	  const char *full_name = dwarf2_full_name (name, die, cu);
-
-	  /* dwarf2_full_name might have already finished building the DIE's
-	     type.  If so, there is no need to continue.  */
-	  if (get_die_type (die, cu) != NULL)
-	    return get_die_type (die, cu);
-
-	  TYPE_NAME (type) = full_name;
-	}
-      else
-	{
-	  /* The name is already allocated along with this objfile, so
-	     we don't need to duplicate it for the type.  */
-	  TYPE_NAME (type) = name;
-	}
-    }
-
-  if (die->tag == DW_TAG_structure_type)
-    {
-      TYPE_CODE (type) = TYPE_CODE_STRUCT;
-    }
-  else if (die->tag == DW_TAG_union_type)
-    {
-      TYPE_CODE (type) = TYPE_CODE_UNION;
-    }
-  else if (die->tag == DW_TAG_variant_part)
-    {
-      TYPE_CODE (type) = TYPE_CODE_UNION;
-      TYPE_FLAG_DISCRIMINATED_UNION (type) = 1;
-    }
-  else
-    {
-      TYPE_CODE (type) = TYPE_CODE_STRUCT;
-    }
-
-  if (cu->language == language_cplus && die->tag == DW_TAG_class_type)
-    TYPE_DECLARED_CLASS (type) = 1;
-
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    {
-      if (attr_form_is_constant (attr))
-        TYPE_LENGTH (type) = DW_UNSND (attr);
-      else
-	{
-	  /* For the moment, dynamic type sizes are not supported
-	     by GDB's struct type.  The actual size is determined
-	     on-demand when resolving the type of a given object,
-	     so set the type's length to zero for now.  Otherwise,
-	     we record an expression as the length, and that expression
-	     could lead to a very large value, which could eventually
-	     lead to us trying to allocate that much memory when creating
-	     a value of that type.  */
-          TYPE_LENGTH (type) = 0;
-	}
-    }
-  else
-    {
-      TYPE_LENGTH (type) = 0;
-    }
-
-  maybe_set_alignment (cu, die, type);
-
-  if (producer_is_icc_lt_14 (cu) && (TYPE_LENGTH (type) == 0))
-    {
-      /* ICC<14 does not output the required DW_AT_declaration on
-	 incomplete types, but gives them a size of zero.  */
-      TYPE_STUB (type) = 1;
-    }
-  else
-    TYPE_STUB_SUPPORTED (type) = 1;
-
-  if (die_is_declaration (die, cu))
-    TYPE_STUB (type) = 1;
-  else if (attr == NULL && die->child == NULL
-	   && producer_is_realview (cu->producer))
-    /* RealView does not output the required DW_AT_declaration
-       on incomplete types.  */
-    TYPE_STUB (type) = 1;
-
-  /* We need to add the type field to the die immediately so we don't
-     infinitely recurse when dealing with pointers to the structure
-     type within the structure itself.  */
-  set_die_type (die, type, cu);
-
-  /* set_die_type should be already done.  */
-  set_descriptive_type (type, die, cu);
-
-  return type;
-}
-
-/* A helper for process_structure_scope that handles a single member
-   DIE.  */
-
-static void
-handle_struct_member_die (struct die_info *child_die, struct type *type,
-			  struct field_info *fi,
-			  std::vector<struct symbol *> *template_args,
-			  struct dwarf2_cu *cu)
-{
-  if (child_die->tag == DW_TAG_member
-      || child_die->tag == DW_TAG_variable
-      || child_die->tag == DW_TAG_variant_part)
-    {
-      /* NOTE: carlton/2002-11-05: A C++ static data member
-	 should be a DW_TAG_member that is a declaration, but
-	 all versions of G++ as of this writing (so through at
-	 least 3.2.1) incorrectly generate DW_TAG_variable
-	 tags for them instead.  */
-      dwarf2_add_field (fi, child_die, cu);
-    }
-  else if (child_die->tag == DW_TAG_subprogram)
-    {
-      /* Rust doesn't have member functions in the C++ sense.
-	 However, it does emit ordinary functions as children
-	 of a struct DIE.  */
-      if (cu->language == language_rust)
-	read_func_scope (child_die, cu);
-      else
-	{
-	  /* C++ member function.  */
-	  dwarf2_add_member_fn (fi, child_die, type, cu);
-	}
-    }
-  else if (child_die->tag == DW_TAG_inheritance)
-    {
-      /* C++ base class field.  */
-      dwarf2_add_field (fi, child_die, cu);
-    }
-  else if (type_can_define_types (child_die))
-    dwarf2_add_type_defn (fi, child_die, cu);
-  else if (child_die->tag == DW_TAG_template_type_param
-	   || child_die->tag == DW_TAG_template_value_param)
-    {
-      struct symbol *arg = new_symbol (child_die, NULL, cu);
-
-      if (arg != NULL)
-	template_args->push_back (arg);
-    }
-  else if (child_die->tag == DW_TAG_variant)
-    {
-      /* In a variant we want to get the discriminant and also add a
-	 field for our sole member child.  */
-      struct attribute *discr = dwarf2_attr (child_die, DW_AT_discr_value, cu);
-
-      for (die_info *variant_child = child_die->child;
-	   variant_child != NULL;
-	   variant_child = sibling_die (variant_child))
-	{
-	  if (variant_child->tag == DW_TAG_member)
-	    {
-	      handle_struct_member_die (variant_child, type, fi,
-					template_args, cu);
-	      /* Only handle the one.  */
-	      break;
-	    }
-	}
-
-      /* We don't handle this but we might as well report it if we see
-	 it.  */
-      if (dwarf2_attr (child_die, DW_AT_discr_list, cu) != nullptr)
-	  complaint (_("DW_AT_discr_list is not supported yet"
-		       " - DIE at %s [in module %s]"),
-		     sect_offset_str (child_die->sect_off),
-		     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-
-      /* The first field was just added, so we can stash the
-	 discriminant there.  */
-      gdb_assert (!fi->fields.empty ());
-      if (discr == NULL)
-	fi->fields.back ().variant.default_branch = true;
-      else
-	fi->fields.back ().variant.discriminant_value = DW_UNSND (discr);
-    }
-}
-
-/* Finish creating a structure or union type, including filling in
-   its members and creating a symbol for it.  */
-
-static void
-process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct die_info *child_die;
-  struct type *type;
-
-  type = get_die_type (die, cu);
-  if (type == NULL)
-    type = read_structure_type (die, cu);
-
-  /* When reading a DW_TAG_variant_part, we need to notice when we
-     read the discriminant member, so we can record it later in the
-     discriminant_info.  */
-  bool is_variant_part = TYPE_FLAG_DISCRIMINATED_UNION (type);
-  sect_offset discr_offset {};
-  bool has_template_parameters = false;
-
-  if (is_variant_part)
-    {
-      struct attribute *discr = dwarf2_attr (die, DW_AT_discr, cu);
-      if (discr == NULL)
-	{
-	  /* Maybe it's a univariant form, an extension we support.
-	     In this case arrange not to check the offset.  */
-	  is_variant_part = false;
-	}
-      else if (attr_form_is_ref (discr))
-	{
-	  struct dwarf2_cu *target_cu = cu;
-	  struct die_info *target_die = follow_die_ref (die, discr, &target_cu);
-
-	  discr_offset = target_die->sect_off;
-	}
-      else
-	{
-	  complaint (_("DW_AT_discr does not have DIE reference form"
-		       " - DIE at %s [in module %s]"),
-		     sect_offset_str (die->sect_off),
-		     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	  is_variant_part = false;
-	}
-    }
-
-  if (die->child != NULL && ! die_is_declaration (die, cu))
-    {
-      struct field_info fi;
-      std::vector<struct symbol *> template_args;
-
-      child_die = die->child;
-
-      while (child_die && child_die->tag)
-	{
-	  handle_struct_member_die (child_die, type, &fi, &template_args, cu);
-
-	  if (is_variant_part && discr_offset == child_die->sect_off)
-	    fi.fields.back ().variant.is_discriminant = true;
-
-	  child_die = sibling_die (child_die);
-	}
-
-      /* Attach template arguments to type.  */
-      if (!template_args.empty ())
-	{
-	  has_template_parameters = true;
-	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
-	  TYPE_N_TEMPLATE_ARGUMENTS (type) = template_args.size ();
-	  TYPE_TEMPLATE_ARGUMENTS (type)
-	    = XOBNEWVEC (&objfile->objfile_obstack,
-			 struct symbol *,
-			 TYPE_N_TEMPLATE_ARGUMENTS (type));
-	  memcpy (TYPE_TEMPLATE_ARGUMENTS (type),
-		  template_args.data (),
-		  (TYPE_N_TEMPLATE_ARGUMENTS (type)
-		   * sizeof (struct symbol *)));
-	}
-
-      /* Attach fields and member functions to the type.  */
-      if (fi.nfields)
-	dwarf2_attach_fields_to_type (&fi, type, cu);
-      if (!fi.fnfieldlists.empty ())
-	{
-	  dwarf2_attach_fn_fields_to_type (&fi, type, cu);
-
-	  /* Get the type which refers to the base class (possibly this
-	     class itself) which contains the vtable pointer for the current
-	     class from the DW_AT_containing_type attribute.  This use of
-	     DW_AT_containing_type is a GNU extension.  */
-
-	  if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
-	    {
-	      struct type *t = die_containing_type (die, cu);
-
-	      set_type_vptr_basetype (type, t);
-	      if (type == t)
-		{
-		  int i;
-
-		  /* Our own class provides vtbl ptr.  */
-		  for (i = TYPE_NFIELDS (t) - 1;
-		       i >= TYPE_N_BASECLASSES (t);
-		       --i)
-		    {
-		      const char *fieldname = TYPE_FIELD_NAME (t, i);
-
-                      if (is_vtable_name (fieldname, cu))
-			{
-			  set_type_vptr_fieldno (type, i);
-			  break;
-			}
-		    }
-
-		  /* Complain if virtual function table field not found.  */
-		  if (i < TYPE_N_BASECLASSES (t))
-		    complaint (_("virtual function table pointer "
-				 "not found when defining class '%s'"),
-			       TYPE_NAME (type) ? TYPE_NAME (type) : "");
-		}
-	      else
-		{
-		  set_type_vptr_fieldno (type, TYPE_VPTR_FIELDNO (t));
-		}
-	    }
-	  else if (cu->producer
-		   && startswith (cu->producer, "IBM(R) XL C/C++ Advanced Edition"))
-	    {
-	      /* The IBM XLC compiler does not provide direct indication
-	         of the containing type, but the vtable pointer is
-	         always named __vfp.  */
-
-	      int i;
-
-	      for (i = TYPE_NFIELDS (type) - 1;
-		   i >= TYPE_N_BASECLASSES (type);
-		   --i)
-		{
-		  if (strcmp (TYPE_FIELD_NAME (type, i), "__vfp") == 0)
-		    {
-		      set_type_vptr_fieldno (type, i);
-		      set_type_vptr_basetype (type, type);
-		      break;
-		    }
-		}
-	    }
-	}
-
-      /* Copy fi.typedef_field_list linked list elements content into the
-	 allocated array TYPE_TYPEDEF_FIELD_ARRAY (type).  */
-      if (!fi.typedef_field_list.empty ())
-	{
-	  int count = fi.typedef_field_list.size ();
-
-	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
-	  TYPE_TYPEDEF_FIELD_ARRAY (type)
-	    = ((struct decl_field *)
-	       TYPE_ALLOC (type,
-			   sizeof (TYPE_TYPEDEF_FIELD (type, 0)) * count));
-	  TYPE_TYPEDEF_FIELD_COUNT (type) = count;
-
-	  for (int i = 0; i < fi.typedef_field_list.size (); ++i)
-	    TYPE_TYPEDEF_FIELD (type, i) = fi.typedef_field_list[i];
-	}
-
-      /* Copy fi.nested_types_list linked list elements content into the
-	 allocated array TYPE_NESTED_TYPES_ARRAY (type).  */
-      if (!fi.nested_types_list.empty () && cu->language != language_ada)
-	{
-	  int count = fi.nested_types_list.size ();
-
-	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
-	  TYPE_NESTED_TYPES_ARRAY (type)
-	    = ((struct decl_field *)
-	       TYPE_ALLOC (type, sizeof (struct decl_field) * count));
-	  TYPE_NESTED_TYPES_COUNT (type) = count;
-
-	  for (int i = 0; i < fi.nested_types_list.size (); ++i)
-	    TYPE_NESTED_TYPES_FIELD (type, i) = fi.nested_types_list[i];
-	}
-    }
-
-  quirk_gcc_member_function_pointer (type, objfile);
-  if (cu->language == language_rust && die->tag == DW_TAG_union_type)
-    cu->rust_unions.push_back (type);
-
-  /* NOTE: carlton/2004-03-16: GCC 3.4 (or at least one of its
-     snapshots) has been known to create a die giving a declaration
-     for a class that has, as a child, a die giving a definition for a
-     nested class.  So we have to process our children even if the
-     current die is a declaration.  Normally, of course, a declaration
-     won't have any children at all.  */
-
-  child_die = die->child;
-
-  while (child_die != NULL && child_die->tag)
-    {
-      if (child_die->tag == DW_TAG_member
-	  || child_die->tag == DW_TAG_variable
-	  || child_die->tag == DW_TAG_inheritance
-	  || child_die->tag == DW_TAG_template_value_param
-	  || child_die->tag == DW_TAG_template_type_param)
-	{
-	  /* Do nothing.  */
-	}
-      else
-	process_die (child_die, cu);
-
-      child_die = sibling_die (child_die);
-    }
-
-  /* Do not consider external references.  According to the DWARF standard,
-     these DIEs are identified by the fact that they have no byte_size
-     attribute, and a declaration attribute.  */
-  if (dwarf2_attr (die, DW_AT_byte_size, cu) != NULL
-      || !die_is_declaration (die, cu))
-    {
-      struct symbol *sym = new_symbol (die, type, cu);
-
-      if (has_template_parameters)
-	{
-	  struct symtab *symtab;
-	  if (sym != nullptr)
-	    symtab = symbol_symtab (sym);
-	  else if (cu->line_header != nullptr)
-	    {
-	      /* Any related symtab will do.  */
-	      symtab
-		= cu->line_header->file_names ()[0].symtab;
-	    }
-	  else
-	    {
-	      symtab = nullptr;
-	      complaint (_("could not find suitable "
-			   "symtab for template parameter"
-			   " - DIE at %s [in module %s]"),
-			 sect_offset_str (die->sect_off),
-			 objfile_name (objfile));
-	    }
-
-	  if (symtab != nullptr)
-	    {
-	      /* Make sure that the symtab is set on the new symbols.
-		 Even though they don't appear in this symtab directly,
-		 other parts of gdb assume that symbols do, and this is
-		 reasonably true.  */
-	      for (int i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i)
-		symbol_set_symtab (TYPE_TEMPLATE_ARGUMENT (type, i), symtab);
-	    }
-	}
-    }
-}
-
-/* Assuming DIE is an enumeration type, and TYPE is its associated type,
-   update TYPE using some information only available in DIE's children.  */
-
-static void
-update_enumeration_type_from_children (struct die_info *die,
-				       struct type *type,
-				       struct dwarf2_cu *cu)
-{
-  struct die_info *child_die;
-  int unsigned_enum = 1;
-  int flag_enum = 1;
-  ULONGEST mask = 0;
-
-  auto_obstack obstack;
-
-  for (child_die = die->child;
-       child_die != NULL && child_die->tag;
-       child_die = sibling_die (child_die))
-    {
-      struct attribute *attr;
-      LONGEST value;
-      const gdb_byte *bytes;
-      struct dwarf2_locexpr_baton *baton;
-      const char *name;
-
-      if (child_die->tag != DW_TAG_enumerator)
-	continue;
-
-      attr = dwarf2_attr (child_die, DW_AT_const_value, cu);
-      if (attr == NULL)
-	continue;
-
-      name = dwarf2_name (child_die, cu);
-      if (name == NULL)
-	name = "<anonymous enumerator>";
-
-      dwarf2_const_value_attr (attr, type, name, &obstack, cu,
-			       &value, &bytes, &baton);
-      if (value < 0)
-	{
-	  unsigned_enum = 0;
-	  flag_enum = 0;
-	}
-      else if ((mask & value) != 0)
-	flag_enum = 0;
-      else
-	mask |= value;
-
-      /* If we already know that the enum type is neither unsigned, nor
-	 a flag type, no need to look at the rest of the enumerates.  */
-      if (!unsigned_enum && !flag_enum)
-	break;
-    }
-
-  if (unsigned_enum)
-    TYPE_UNSIGNED (type) = 1;
-  if (flag_enum)
-    TYPE_FLAG_ENUM (type) = 1;
-}
-
-/* Given a DW_AT_enumeration_type die, set its type.  We do not
-   complete the type's fields yet, or create any symbols.  */
-
-static struct type *
-read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct type *type;
-  struct attribute *attr;
-  const char *name;
-
-  /* If the definition of this type lives in .debug_types, read that type.
-     Don't follow DW_AT_specification though, that will take us back up
-     the chain and we want to go down.  */
-  attr = dwarf2_attr_no_follow (die, DW_AT_signature);
-  if (attr != nullptr)
-    {
-      type = get_DW_AT_signature_type (die, attr, cu);
-
-      /* The type's CU may not be the same as CU.
-	 Ensure TYPE is recorded with CU in die_type_hash.  */
-      return set_die_type (die, type, cu);
-    }
-
-  type = alloc_type (objfile);
-
-  TYPE_CODE (type) = TYPE_CODE_ENUM;
-  name = dwarf2_full_name (NULL, die, cu);
-  if (name != NULL)
-    TYPE_NAME (type) = name;
-
-  attr = dwarf2_attr (die, DW_AT_type, cu);
-  if (attr != NULL)
-    {
-      struct type *underlying_type = die_type (die, cu);
-
-      TYPE_TARGET_TYPE (type) = underlying_type;
-    }
-
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    {
-      TYPE_LENGTH (type) = DW_UNSND (attr);
-    }
-  else
-    {
-      TYPE_LENGTH (type) = 0;
-    }
-
-  maybe_set_alignment (cu, die, type);
-
-  /* The enumeration DIE can be incomplete.  In Ada, any type can be
-     declared as private in the package spec, and then defined only
-     inside the package body.  Such types are known as Taft Amendment
-     Types.  When another package uses such a type, an incomplete DIE
-     may be generated by the compiler.  */
-  if (die_is_declaration (die, cu))
-    TYPE_STUB (type) = 1;
-
-  /* Finish the creation of this type by using the enum's children.
-     We must call this even when the underlying type has been provided
-     so that we can determine if we're looking at a "flag" enum.  */
-  update_enumeration_type_from_children (die, type, cu);
-
-  /* If this type has an underlying type that is not a stub, then we
-     may use its attributes.  We always use the "unsigned" attribute
-     in this situation, because ordinarily we guess whether the type
-     is unsigned -- but the guess can be wrong and the underlying type
-     can tell us the reality.  However, we defer to a local size
-     attribute if one exists, because this lets the compiler override
-     the underlying type if needed.  */
-  if (TYPE_TARGET_TYPE (type) != NULL && !TYPE_STUB (TYPE_TARGET_TYPE (type)))
-    {
-      TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TYPE_TARGET_TYPE (type));
-      if (TYPE_LENGTH (type) == 0)
-	TYPE_LENGTH (type) = TYPE_LENGTH (TYPE_TARGET_TYPE (type));
-      if (TYPE_RAW_ALIGN (type) == 0
-	  && TYPE_RAW_ALIGN (TYPE_TARGET_TYPE (type)) != 0)
-	set_type_align (type, TYPE_RAW_ALIGN (TYPE_TARGET_TYPE (type)));
-    }
-
-  TYPE_DECLARED_CLASS (type) = dwarf2_flag_true_p (die, DW_AT_enum_class, cu);
-
-  return set_die_type (die, type, cu);
-}
-
-/* Given a pointer to a die which begins an enumeration, process all
-   the dies that define the members of the enumeration, and create the
-   symbol for the enumeration type.
-
-   NOTE: We reverse the order of the element list.  */
-
-static void
-process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *this_type;
-
-  this_type = get_die_type (die, cu);
-  if (this_type == NULL)
-    this_type = read_enumeration_type (die, cu);
-
-  if (die->child != NULL)
-    {
-      struct die_info *child_die;
-      struct symbol *sym;
-      struct field *fields = NULL;
-      int num_fields = 0;
-      const char *name;
-
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  if (child_die->tag != DW_TAG_enumerator)
-	    {
-	      process_die (child_die, cu);
-	    }
-	  else
-	    {
-	      name = dwarf2_name (child_die, cu);
-	      if (name)
-		{
-		  sym = new_symbol (child_die, this_type, cu);
-
-		  if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
-		    {
-		      fields = (struct field *)
-			xrealloc (fields,
-				  (num_fields + DW_FIELD_ALLOC_CHUNK)
-				  * sizeof (struct field));
-		    }
-
-		  FIELD_NAME (fields[num_fields]) = sym->linkage_name ();
-		  FIELD_TYPE (fields[num_fields]) = NULL;
-		  SET_FIELD_ENUMVAL (fields[num_fields], SYMBOL_VALUE (sym));
-		  FIELD_BITSIZE (fields[num_fields]) = 0;
-
-		  num_fields++;
-		}
-	    }
-
-	  child_die = sibling_die (child_die);
-	}
-
-      if (num_fields)
-	{
-	  TYPE_NFIELDS (this_type) = num_fields;
-	  TYPE_FIELDS (this_type) = (struct field *)
-	    TYPE_ALLOC (this_type, sizeof (struct field) * num_fields);
-	  memcpy (TYPE_FIELDS (this_type), fields,
-		  sizeof (struct field) * num_fields);
-	  xfree (fields);
-	}
-    }
-
-  /* If we are reading an enum from a .debug_types unit, and the enum
-     is a declaration, and the enum is not the signatured type in the
-     unit, then we do not want to add a symbol for it.  Adding a
-     symbol would in some cases obscure the true definition of the
-     enum, giving users an incomplete type when the definition is
-     actually available.  Note that we do not want to do this for all
-     enums which are just declarations, because C++0x allows forward
-     enum declarations.  */
-  if (cu->per_cu->is_debug_types
-      && die_is_declaration (die, cu))
-    {
-      struct signatured_type *sig_type;
-
-      sig_type = (struct signatured_type *) cu->per_cu;
-      gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0);
-      if (sig_type->type_offset_in_section != die->sect_off)
-	return;
-    }
-
-  new_symbol (die, this_type, cu);
-}
-
-/* Extract all information from a DW_TAG_array_type DIE and put it in
-   the DIE's type field.  For now, this only handles one dimensional
-   arrays.  */
-
-static struct type *
-read_array_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct die_info *child_die;
-  struct type *type;
-  struct type *element_type, *range_type, *index_type;
-  struct attribute *attr;
-  const char *name;
-  struct dynamic_prop *byte_stride_prop = NULL;
-  unsigned int bit_stride = 0;
-
-  element_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  type = get_die_type (die, cu);
-  if (type)
-    return type;
-
-  attr = dwarf2_attr (die, DW_AT_byte_stride, cu);
-  if (attr != NULL)
-    {
-      int stride_ok;
-      struct type *prop_type
-	= dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
-
-      byte_stride_prop
-	= (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop));
-      stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop,
-					prop_type);
-      if (!stride_ok)
-	{
-	  complaint (_("unable to read array DW_AT_byte_stride "
-		       " - DIE at %s [in module %s]"),
-		     sect_offset_str (die->sect_off),
-		     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	  /* Ignore this attribute.  We will likely not be able to print
-	     arrays of this type correctly, but there is little we can do
-	     to help if we cannot read the attribute's value.  */
-	  byte_stride_prop = NULL;
-	}
-    }
-
-  attr = dwarf2_attr (die, DW_AT_bit_stride, cu);
-  if (attr != NULL)
-    bit_stride = DW_UNSND (attr);
-
-  /* Irix 6.2 native cc creates array types without children for
-     arrays with unspecified length.  */
-  if (die->child == NULL)
-    {
-      index_type = objfile_type (objfile)->builtin_int;
-      range_type = create_static_range_type (NULL, index_type, 0, -1);
-      type = create_array_type_with_stride (NULL, element_type, range_type,
-					    byte_stride_prop, bit_stride);
-      return set_die_type (die, type, cu);
-    }
-
-  std::vector<struct type *> range_types;
-  child_die = die->child;
-  while (child_die && child_die->tag)
-    {
-      if (child_die->tag == DW_TAG_subrange_type)
-	{
-	  struct type *child_type = read_type_die (child_die, cu);
-
-          if (child_type != NULL)
-            {
-	      /* The range type was succesfully read.  Save it for the
-                 array type creation.  */
-	      range_types.push_back (child_type);
-            }
-	}
-      child_die = sibling_die (child_die);
-    }
-
-  /* Dwarf2 dimensions are output from left to right, create the
-     necessary array types in backwards order.  */
-
-  type = element_type;
-
-  if (read_array_order (die, cu) == DW_ORD_col_major)
-    {
-      int i = 0;
-
-      while (i < range_types.size ())
-	type = create_array_type_with_stride (NULL, type, range_types[i++],
-					      byte_stride_prop, bit_stride);
-    }
-  else
-    {
-      size_t ndim = range_types.size ();
-      while (ndim-- > 0)
-	type = create_array_type_with_stride (NULL, type, range_types[ndim],
-					      byte_stride_prop, bit_stride);
-    }
-
-  /* Understand Dwarf2 support for vector types (like they occur on
-     the PowerPC w/ AltiVec).  Gcc just adds another attribute to the
-     array type.  This is not part of the Dwarf2/3 standard yet, but a
-     custom vendor extension.  The main difference between a regular
-     array and the vector variant is that vectors are passed by value
-     to functions.  */
-  attr = dwarf2_attr (die, DW_AT_GNU_vector, cu);
-  if (attr != nullptr)
-    make_vector_type (type);
-
-  /* The DIE may have DW_AT_byte_size set.  For example an OpenCL
-     implementation may choose to implement triple vectors using this
-     attribute.  */
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    {
-      if (DW_UNSND (attr) >= TYPE_LENGTH (type))
-	TYPE_LENGTH (type) = DW_UNSND (attr);
-      else
-	complaint (_("DW_AT_byte_size for array type smaller "
-		     "than the total size of elements"));
-    }
-
-  name = dwarf2_name (die, cu);
-  if (name)
-    TYPE_NAME (type) = name;
-
-  maybe_set_alignment (cu, die, type);
-
-  /* Install the type in the die.  */
-  set_die_type (die, type, cu);
-
-  /* set_die_type should be already done.  */
-  set_descriptive_type (type, die, cu);
-
-  return type;
-}
-
-static enum dwarf_array_dim_ordering
-read_array_order (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_ordering, cu);
-
-  if (attr != nullptr)
-    return (enum dwarf_array_dim_ordering) DW_SND (attr);
-
-  /* GNU F77 is a special case, as at 08/2004 array type info is the
-     opposite order to the dwarf2 specification, but data is still
-     laid out as per normal fortran.
-
-     FIXME: dsl/2004-8-20: If G77 is ever fixed, this will also need
-     version checking.  */
-
-  if (cu->language == language_fortran
-      && cu->producer && strstr (cu->producer, "GNU F77"))
-    {
-      return DW_ORD_row_major;
-    }
-
-  switch (cu->language_defn->la_array_ordering)
-    {
-    case array_column_major:
-      return DW_ORD_col_major;
-    case array_row_major:
-    default:
-      return DW_ORD_row_major;
-    };
-}
-
-/* Extract all information from a DW_TAG_set_type DIE and put it in
-   the DIE's type field.  */
-
-static struct type *
-read_set_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *domain_type, *set_type;
-  struct attribute *attr;
-
-  domain_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  set_type = get_die_type (die, cu);
-  if (set_type)
-    return set_type;
-
-  set_type = create_set_type (NULL, domain_type);
-
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    TYPE_LENGTH (set_type) = DW_UNSND (attr);
-
-  maybe_set_alignment (cu, die, set_type);
-
-  return set_die_type (die, set_type, cu);
-}
-
-/* A helper for read_common_block that creates a locexpr baton.
-   SYM is the symbol which we are marking as computed.
-   COMMON_DIE is the DIE for the common block.
-   COMMON_LOC is the location expression attribute for the common
-   block itself.
-   MEMBER_LOC is the location expression attribute for the particular
-   member of the common block that we are processing.
-   CU is the CU from which the above come.  */
-
-static void
-mark_common_block_symbol_computed (struct symbol *sym,
-				   struct die_info *common_die,
-				   struct attribute *common_loc,
-				   struct attribute *member_loc,
-				   struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_locexpr_baton *baton;
-  gdb_byte *ptr;
-  unsigned int cu_off;
-  enum bfd_endian byte_order = gdbarch_byte_order (get_objfile_arch (objfile));
-  LONGEST offset = 0;
-
-  gdb_assert (common_loc && member_loc);
-  gdb_assert (attr_form_is_block (common_loc));
-  gdb_assert (attr_form_is_block (member_loc)
-	      || attr_form_is_constant (member_loc));
-
-  baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton);
-  baton->per_cu = cu->per_cu;
-  gdb_assert (baton->per_cu);
-
-  baton->size = 5 /* DW_OP_call4 */ + 1 /* DW_OP_plus */;
-
-  if (attr_form_is_constant (member_loc))
-    {
-      offset = dwarf2_get_attr_constant_value (member_loc, 0);
-      baton->size += 1 /* DW_OP_addr */ + cu->header.addr_size;
-    }
-  else
-    baton->size += DW_BLOCK (member_loc)->size;
-
-  ptr = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, baton->size);
-  baton->data = ptr;
-
-  *ptr++ = DW_OP_call4;
-  cu_off = common_die->sect_off - cu->per_cu->sect_off;
-  store_unsigned_integer (ptr, 4, byte_order, cu_off);
-  ptr += 4;
-
-  if (attr_form_is_constant (member_loc))
-    {
-      *ptr++ = DW_OP_addr;
-      store_unsigned_integer (ptr, cu->header.addr_size, byte_order, offset);
-      ptr += cu->header.addr_size;
-    }
-  else
-    {
-      /* We have to copy the data here, because DW_OP_call4 will only
-	 use a DW_AT_location attribute.  */
-      memcpy (ptr, DW_BLOCK (member_loc)->data, DW_BLOCK (member_loc)->size);
-      ptr += DW_BLOCK (member_loc)->size;
-    }
-
-  *ptr++ = DW_OP_plus;
-  gdb_assert (ptr - baton->data == baton->size);
-
-  SYMBOL_LOCATION_BATON (sym) = baton;
-  SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index;
-}
-
-/* Create appropriate locally-scoped variables for all the
-   DW_TAG_common_block entries.  Also create a struct common_block
-   listing all such variables for `info common'.  COMMON_BLOCK_DOMAIN
-   is used to separate the common blocks name namespace from regular
-   variable names.  */
-
-static void
-read_common_block (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_location, cu);
-  if (attr != nullptr)
-    {
-      /* Support the .debug_loc offsets.  */
-      if (attr_form_is_block (attr))
-        {
-	  /* Ok.  */
-        }
-      else if (attr_form_is_section_offset (attr))
-        {
-	  dwarf2_complex_location_expr_complaint ();
-	  attr = NULL;
-        }
-      else
-        {
-	  dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
-						 "common block member");
-	  attr = NULL;
-        }
-    }
-
-  if (die->child != NULL)
-    {
-      struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-      struct die_info *child_die;
-      size_t n_entries = 0, size;
-      struct common_block *common_block;
-      struct symbol *sym;
-
-      for (child_die = die->child;
-	   child_die && child_die->tag;
-	   child_die = sibling_die (child_die))
-	++n_entries;
-
-      size = (sizeof (struct common_block)
-	      + (n_entries - 1) * sizeof (struct symbol *));
-      common_block
-	= (struct common_block *) obstack_alloc (&objfile->objfile_obstack,
-						 size);
-      memset (common_block->contents, 0, n_entries * sizeof (struct symbol *));
-      common_block->n_entries = 0;
-
-      for (child_die = die->child;
-	   child_die && child_die->tag;
-	   child_die = sibling_die (child_die))
-	{
-	  /* Create the symbol in the DW_TAG_common_block block in the current
-	     symbol scope.  */
-	  sym = new_symbol (child_die, NULL, cu);
-	  if (sym != NULL)
-	    {
-	      struct attribute *member_loc;
-
-	      common_block->contents[common_block->n_entries++] = sym;
-
-	      member_loc = dwarf2_attr (child_die, DW_AT_data_member_location,
-					cu);
-	      if (member_loc)
-		{
-		  /* GDB has handled this for a long time, but it is
-		     not specified by DWARF.  It seems to have been
-		     emitted by gfortran at least as recently as:
-		     http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057.  */
-		  complaint (_("Variable in common block has "
-			       "DW_AT_data_member_location "
-			       "- DIE at %s [in module %s]"),
-			       sect_offset_str (child_die->sect_off),
-			     objfile_name (objfile));
-
-		  if (attr_form_is_section_offset (member_loc))
-		    dwarf2_complex_location_expr_complaint ();
-		  else if (attr_form_is_constant (member_loc)
-			   || attr_form_is_block (member_loc))
-		    {
-		      if (attr != nullptr)
-			mark_common_block_symbol_computed (sym, die, attr,
-							   member_loc, cu);
-		    }
-		  else
-		    dwarf2_complex_location_expr_complaint ();
-		}
-	    }
-	}
-
-      sym = new_symbol (die, objfile_type (objfile)->builtin_void, cu);
-      SYMBOL_VALUE_COMMON_BLOCK (sym) = common_block;
-    }
-}
-
-/* Create a type for a C++ namespace.  */
-
-static struct type *
-read_namespace_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  const char *previous_prefix, *name;
-  int is_anonymous;
-  struct type *type;
-
-  /* For extensions, reuse the type of the original namespace.  */
-  if (dwarf2_attr (die, DW_AT_extension, cu) != NULL)
-    {
-      struct die_info *ext_die;
-      struct dwarf2_cu *ext_cu = cu;
-
-      ext_die = dwarf2_extension (die, &ext_cu);
-      type = read_type_die (ext_die, ext_cu);
-
-      /* EXT_CU may not be the same as CU.
-	 Ensure TYPE is recorded with CU in die_type_hash.  */
-      return set_die_type (die, type, cu);
-    }
-
-  name = namespace_name (die, &is_anonymous, cu);
-
-  /* Now build the name of the current namespace.  */
-
-  previous_prefix = determine_prefix (die, cu);
-  if (previous_prefix[0] != '\0')
-    name = typename_concat (&objfile->objfile_obstack,
-			    previous_prefix, name, 0, cu);
-
-  /* Create the type.  */
-  type = init_type (objfile, TYPE_CODE_NAMESPACE, 0, name);
-
-  return set_die_type (die, type, cu);
-}
-
-/* Read a namespace scope.  */
-
-static void
-read_namespace (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  int is_anonymous;
-
-  /* Add a symbol associated to this if we haven't seen the namespace
-     before.  Also, add a using directive if it's an anonymous
-     namespace.  */
-
-  if (dwarf2_attr (die, DW_AT_extension, cu) == NULL)
-    {
-      struct type *type;
-
-      type = read_type_die (die, cu);
-      new_symbol (die, type, cu);
-
-      namespace_name (die, &is_anonymous, cu);
-      if (is_anonymous)
-	{
-	  const char *previous_prefix = determine_prefix (die, cu);
-
-	  std::vector<const char *> excludes;
-	  add_using_directive (using_directives (cu),
-			       previous_prefix, TYPE_NAME (type), NULL,
-			       NULL, excludes, 0, &objfile->objfile_obstack);
-	}
-    }
-
-  if (die->child != NULL)
-    {
-      struct die_info *child_die = die->child;
-
-      while (child_die && child_die->tag)
-	{
-	  process_die (child_die, cu);
-	  child_die = sibling_die (child_die);
-	}
-    }
-}
-
-/* Read a Fortran module as type.  This DIE can be only a declaration used for
-   imported module.  Still we need that type as local Fortran "use ... only"
-   declaration imports depend on the created type in determine_prefix.  */
-
-static struct type *
-read_module_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  const char *module_name;
-  struct type *type;
-
-  module_name = dwarf2_name (die, cu);
-  type = init_type (objfile, TYPE_CODE_MODULE, 0, module_name);
-
-  return set_die_type (die, type, cu);
-}
-
-/* Read a Fortran module.  */
-
-static void
-read_module (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct die_info *child_die = die->child;
-  struct type *type;
-
-  type = read_type_die (die, cu);
-  new_symbol (die, type, cu);
-
-  while (child_die && child_die->tag)
-    {
-      process_die (child_die, cu);
-      child_die = sibling_die (child_die);
-    }
-}
-
-/* Return the name of the namespace represented by DIE.  Set
-   *IS_ANONYMOUS to tell whether or not the namespace is an anonymous
-   namespace.  */
-
-static const char *
-namespace_name (struct die_info *die, int *is_anonymous, struct dwarf2_cu *cu)
-{
-  struct die_info *current_die;
-  const char *name = NULL;
-
-  /* Loop through the extensions until we find a name.  */
-
-  for (current_die = die;
-       current_die != NULL;
-       current_die = dwarf2_extension (die, &cu))
-    {
-      /* We don't use dwarf2_name here so that we can detect the absence
-	 of a name -> anonymous namespace.  */
-      name = dwarf2_string_attr (die, DW_AT_name, cu);
-
-      if (name != NULL)
-	break;
-    }
-
-  /* Is it an anonymous namespace?  */
-
-  *is_anonymous = (name == NULL);
-  if (*is_anonymous)
-    name = CP_ANONYMOUS_NAMESPACE_STR;
-
-  return name;
-}
-
-/* Extract all information from a DW_TAG_pointer_type DIE and add to
-   the user defined type vector.  */
-
-static struct type *
-read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct gdbarch *gdbarch
-    = get_objfile_arch (cu->per_cu->dwarf2_per_objfile->objfile);
-  struct comp_unit_head *cu_header = &cu->header;
-  struct type *type;
-  struct attribute *attr_byte_size;
-  struct attribute *attr_address_class;
-  int byte_size, addr_class;
-  struct type *target_type;
-
-  target_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  type = get_die_type (die, cu);
-  if (type)
-    return type;
-
-  type = lookup_pointer_type (target_type);
-
-  attr_byte_size = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr_byte_size)
-    byte_size = DW_UNSND (attr_byte_size);
-  else
-    byte_size = cu_header->addr_size;
-
-  attr_address_class = dwarf2_attr (die, DW_AT_address_class, cu);
-  if (attr_address_class)
-    addr_class = DW_UNSND (attr_address_class);
-  else
-    addr_class = DW_ADDR_none;
-
-  ULONGEST alignment = get_alignment (cu, die);
-
-  /* If the pointer size, alignment, or address class is different
-     than the default, create a type variant marked as such and set
-     the length accordingly.  */
-  if (TYPE_LENGTH (type) != byte_size
-      || (alignment != 0 && TYPE_RAW_ALIGN (type) != 0
-	  && alignment != TYPE_RAW_ALIGN (type))
-      || addr_class != DW_ADDR_none)
-    {
-      if (gdbarch_address_class_type_flags_p (gdbarch))
-	{
-	  int type_flags;
-
-	  type_flags = gdbarch_address_class_type_flags
-			 (gdbarch, byte_size, addr_class);
-	  gdb_assert ((type_flags & ~TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
-		      == 0);
-	  type = make_type_with_address_space (type, type_flags);
-	}
-      else if (TYPE_LENGTH (type) != byte_size)
-	{
-	  complaint (_("invalid pointer size %d"), byte_size);
-	}
-      else if (TYPE_RAW_ALIGN (type) != alignment)
-	{
-	  complaint (_("Invalid DW_AT_alignment"
-		       " - DIE at %s [in module %s]"),
-		     sect_offset_str (die->sect_off),
-		     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	}
-      else
-	{
-	  /* Should we also complain about unhandled address classes?  */
-	}
-    }
-
-  TYPE_LENGTH (type) = byte_size;
-  set_type_align (type, alignment);
-  return set_die_type (die, type, cu);
-}
-
-/* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to
-   the user defined type vector.  */
-
-static struct type *
-read_tag_ptr_to_member_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *type;
-  struct type *to_type;
-  struct type *domain;
-
-  to_type = die_type (die, cu);
-  domain = die_containing_type (die, cu);
-
-  /* The calls above may have already set the type for this DIE.  */
-  type = get_die_type (die, cu);
-  if (type)
-    return type;
-
-  if (TYPE_CODE (check_typedef (to_type)) == TYPE_CODE_METHOD)
-    type = lookup_methodptr_type (to_type);
-  else if (TYPE_CODE (check_typedef (to_type)) == TYPE_CODE_FUNC)
-    {
-      struct type *new_type
-	= alloc_type (cu->per_cu->dwarf2_per_objfile->objfile);
-
-      smash_to_method_type (new_type, domain, TYPE_TARGET_TYPE (to_type),
-			    TYPE_FIELDS (to_type), TYPE_NFIELDS (to_type),
-			    TYPE_VARARGS (to_type));
-      type = lookup_methodptr_type (new_type);
-    }
-  else
-    type = lookup_memberptr_type (to_type, domain);
-
-  return set_die_type (die, type, cu);
-}
-
-/* Extract all information from a DW_TAG_{rvalue_,}reference_type DIE and add to
-   the user defined type vector.  */
-
-static struct type *
-read_tag_reference_type (struct die_info *die, struct dwarf2_cu *cu,
-                          enum type_code refcode)
-{
-  struct comp_unit_head *cu_header = &cu->header;
-  struct type *type, *target_type;
-  struct attribute *attr;
-
-  gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF);
-
-  target_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  type = get_die_type (die, cu);
-  if (type)
-    return type;
-
-  type = lookup_reference_type (target_type, refcode);
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    {
-      TYPE_LENGTH (type) = DW_UNSND (attr);
-    }
-  else
-    {
-      TYPE_LENGTH (type) = cu_header->addr_size;
-    }
-  maybe_set_alignment (cu, die, type);
-  return set_die_type (die, type, cu);
-}
-
-/* Add the given cv-qualifiers to the element type of the array.  GCC
-   outputs DWARF type qualifiers that apply to an array, not the
-   element type.  But GDB relies on the array element type to carry
-   the cv-qualifiers.  This mimics section 6.7.3 of the C99
-   specification.  */
-
-static struct type *
-add_array_cv_type (struct die_info *die, struct dwarf2_cu *cu,
-		   struct type *base_type, int cnst, int voltl)
-{
-  struct type *el_type, *inner_array;
-
-  base_type = copy_type (base_type);
-  inner_array = base_type;
-
-  while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY)
-    {
-      TYPE_TARGET_TYPE (inner_array) =
-	copy_type (TYPE_TARGET_TYPE (inner_array));
-      inner_array = TYPE_TARGET_TYPE (inner_array);
-    }
-
-  el_type = TYPE_TARGET_TYPE (inner_array);
-  cnst |= TYPE_CONST (el_type);
-  voltl |= TYPE_VOLATILE (el_type);
-  TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, NULL);
-
-  return set_die_type (die, base_type, cu);
-}
-
-static struct type *
-read_tag_const_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *base_type, *cv_type;
-
-  base_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  cv_type = get_die_type (die, cu);
-  if (cv_type)
-    return cv_type;
-
-  /* In case the const qualifier is applied to an array type, the element type
-     is so qualified, not the array type (section 6.7.3 of C99).  */
-  if (TYPE_CODE (base_type) == TYPE_CODE_ARRAY)
-    return add_array_cv_type (die, cu, base_type, 1, 0);
-
-  cv_type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0);
-  return set_die_type (die, cv_type, cu);
-}
-
-static struct type *
-read_tag_volatile_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *base_type, *cv_type;
-
-  base_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  cv_type = get_die_type (die, cu);
-  if (cv_type)
-    return cv_type;
-
-  /* In case the volatile qualifier is applied to an array type, the
-     element type is so qualified, not the array type (section 6.7.3
-     of C99).  */
-  if (TYPE_CODE (base_type) == TYPE_CODE_ARRAY)
-    return add_array_cv_type (die, cu, base_type, 0, 1);
-
-  cv_type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0);
-  return set_die_type (die, cv_type, cu);
-}
-
-/* Handle DW_TAG_restrict_type.  */
-
-static struct type *
-read_tag_restrict_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *base_type, *cv_type;
-
-  base_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  cv_type = get_die_type (die, cu);
-  if (cv_type)
-    return cv_type;
-
-  cv_type = make_restrict_type (base_type);
-  return set_die_type (die, cv_type, cu);
-}
-
-/* Handle DW_TAG_atomic_type.  */
-
-static struct type *
-read_tag_atomic_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *base_type, *cv_type;
-
-  base_type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  cv_type = get_die_type (die, cu);
-  if (cv_type)
-    return cv_type;
-
-  cv_type = make_atomic_type (base_type);
-  return set_die_type (die, cv_type, cu);
-}
-
-/* Extract all information from a DW_TAG_string_type DIE and add to
-   the user defined type vector.  It isn't really a user defined type,
-   but it behaves like one, with other DIE's using an AT_user_def_type
-   attribute to reference it.  */
-
-static struct type *
-read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct type *type, *range_type, *index_type, *char_type;
-  struct attribute *attr;
-  struct dynamic_prop prop;
-  bool length_is_constant = true;
-  LONGEST length;
-
-  /* There are a couple of places where bit sizes might be made use of
-     when parsing a DW_TAG_string_type, however, no producer that we know
-     of make use of these.  Handling bit sizes that are a multiple of the
-     byte size is easy enough, but what about other bit sizes?  Lets deal
-     with that problem when we have to.  Warn about these attributes being
-     unsupported, then parse the type and ignore them like we always
-     have.  */
-  if (dwarf2_attr (die, DW_AT_bit_size, cu) != nullptr
-      || dwarf2_attr (die, DW_AT_string_length_bit_size, cu) != nullptr)
-    {
-      static bool warning_printed = false;
-      if (!warning_printed)
-	{
-	  warning (_("DW_AT_bit_size and DW_AT_string_length_bit_size not "
-		     "currently supported on DW_TAG_string_type."));
-	  warning_printed = true;
-	}
-    }
-
-  attr = dwarf2_attr (die, DW_AT_string_length, cu);
-  if (attr != nullptr && !attr_form_is_constant (attr))
-    {
-      /* The string length describes the location at which the length of
-	 the string can be found.  The size of the length field can be
-	 specified with one of the attributes below.  */
-      struct type *prop_type;
-      struct attribute *len
-	= dwarf2_attr (die, DW_AT_string_length_byte_size, cu);
-      if (len == nullptr)
-	len = dwarf2_attr (die, DW_AT_byte_size, cu);
-      if (len != nullptr && attr_form_is_constant (len))
-	{
-	  /* Pass 0 as the default as we know this attribute is constant
-	     and the default value will not be returned.  */
-	  LONGEST sz = dwarf2_get_attr_constant_value (len, 0);
-	  prop_type = dwarf2_per_cu_int_type (cu->per_cu, sz, true);
-	}
-      else
-	{
-	  /* If the size is not specified then we assume it is the size of
-	     an address on this target.  */
-	  prop_type = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, true);
-	}
-
-      /* Convert the attribute into a dynamic property.  */
-      if (!attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
-	length = 1;
-      else
-	length_is_constant = false;
-    }
-  else if (attr != nullptr)
-    {
-      /* This DW_AT_string_length just contains the length with no
-	 indirection.  There's no need to create a dynamic property in this
-	 case.  Pass 0 for the default value as we know it will not be
-	 returned in this case.  */
-      length = dwarf2_get_attr_constant_value (attr, 0);
-    }
-  else if ((attr = dwarf2_attr (die, DW_AT_byte_size, cu)) != nullptr)
-    {
-      /* We don't currently support non-constant byte sizes for strings.  */
-      length = dwarf2_get_attr_constant_value (attr, 1);
-    }
-  else
-    {
-      /* Use 1 as a fallback length if we have nothing else.  */
-      length = 1;
-    }
-
-  index_type = objfile_type (objfile)->builtin_int;
-  if (length_is_constant)
-    range_type = create_static_range_type (NULL, index_type, 1, length);
-  else
-    {
-      struct dynamic_prop low_bound;
-
-      low_bound.kind = PROP_CONST;
-      low_bound.data.const_val = 1;
-      range_type = create_range_type (NULL, index_type, &low_bound, &prop, 0);
-    }
-  char_type = language_string_char_type (cu->language_defn, gdbarch);
-  type = create_string_type (NULL, char_type, range_type);
-
-  return set_die_type (die, type, cu);
-}
-
-/* Assuming that DIE corresponds to a function, returns nonzero
-   if the function is prototyped.  */
-
-static int
-prototyped_function_p (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_prototyped, cu);
-  if (attr && (DW_UNSND (attr) != 0))
-    return 1;
-
-  /* The DWARF standard implies that the DW_AT_prototyped attribute
-     is only meaningful for C, but the concept also extends to other
-     languages that allow unprototyped functions (Eg: Objective C).
-     For all other languages, assume that functions are always
-     prototyped.  */
-  if (cu->language != language_c
-      && cu->language != language_objc
-      && cu->language != language_opencl)
-    return 1;
-
-  /* RealView does not emit DW_AT_prototyped.  We can not distinguish
-     prototyped and unprototyped functions; default to prototyped,
-     since that is more common in modern code (and RealView warns
-     about unprototyped functions).  */
-  if (producer_is_realview (cu->producer))
-    return 1;
-
-  return 0;
-}
-
-/* Handle DIES due to C code like:
-
-   struct foo
-   {
-   int (*funcp)(int a, long l);
-   int b;
-   };
-
-   ('funcp' generates a DW_TAG_subroutine_type DIE).  */
-
-static struct type *
-read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct type *type;		/* Type that this function returns.  */
-  struct type *ftype;		/* Function that returns above type.  */
-  struct attribute *attr;
-
-  type = die_type (die, cu);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  ftype = get_die_type (die, cu);
-  if (ftype)
-    return ftype;
-
-  ftype = lookup_function_type (type);
-
-  if (prototyped_function_p (die, cu))
-    TYPE_PROTOTYPED (ftype) = 1;
-
-  /* Store the calling convention in the type if it's available in
-     the subroutine die.  Otherwise set the calling convention to
-     the default value DW_CC_normal.  */
-  attr = dwarf2_attr (die, DW_AT_calling_convention, cu);
-  if (attr != nullptr)
-    TYPE_CALLING_CONVENTION (ftype) = DW_UNSND (attr);
-  else if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL"))
-    TYPE_CALLING_CONVENTION (ftype) = DW_CC_GDB_IBM_OpenCL;
-  else
-    TYPE_CALLING_CONVENTION (ftype) = DW_CC_normal;
-
-  /* Record whether the function returns normally to its caller or not
-     if the DWARF producer set that information.  */
-  attr = dwarf2_attr (die, DW_AT_noreturn, cu);
-  if (attr && (DW_UNSND (attr) != 0))
-    TYPE_NO_RETURN (ftype) = 1;
-
-  /* We need to add the subroutine type to the die immediately so
-     we don't infinitely recurse when dealing with parameters
-     declared as the same subroutine type.  */
-  set_die_type (die, ftype, cu);
-
-  if (die->child != NULL)
-    {
-      struct type *void_type = objfile_type (objfile)->builtin_void;
-      struct die_info *child_die;
-      int nparams, iparams;
-
-      /* Count the number of parameters.
-         FIXME: GDB currently ignores vararg functions, but knows about
-         vararg member functions.  */
-      nparams = 0;
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  if (child_die->tag == DW_TAG_formal_parameter)
-	    nparams++;
-	  else if (child_die->tag == DW_TAG_unspecified_parameters)
-	    TYPE_VARARGS (ftype) = 1;
-	  child_die = sibling_die (child_die);
-	}
-
-      /* Allocate storage for parameters and fill them in.  */
-      TYPE_NFIELDS (ftype) = nparams;
-      TYPE_FIELDS (ftype) = (struct field *)
-	TYPE_ZALLOC (ftype, nparams * sizeof (struct field));
-
-      /* TYPE_FIELD_TYPE must never be NULL.  Pre-fill the array to ensure it
-	 even if we error out during the parameters reading below.  */
-      for (iparams = 0; iparams < nparams; iparams++)
-	TYPE_FIELD_TYPE (ftype, iparams) = void_type;
-
-      iparams = 0;
-      child_die = die->child;
-      while (child_die && child_die->tag)
-	{
-	  if (child_die->tag == DW_TAG_formal_parameter)
-	    {
-	      struct type *arg_type;
-
-	      /* DWARF version 2 has no clean way to discern C++
-		 static and non-static member functions.  G++ helps
-		 GDB by marking the first parameter for non-static
-		 member functions (which is the this pointer) as
-		 artificial.  We pass this information to
-		 dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL.
-
-		 DWARF version 3 added DW_AT_object_pointer, which GCC
-		 4.5 does not yet generate.  */
-	      attr = dwarf2_attr (child_die, DW_AT_artificial, cu);
-	      if (attr != nullptr)
-		TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr);
-	      else
-		TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
-	      arg_type = die_type (child_die, cu);
-
-	      /* RealView does not mark THIS as const, which the testsuite
-		 expects.  GCC marks THIS as const in method definitions,
-		 but not in the class specifications (GCC PR 43053).  */
-	      if (cu->language == language_cplus && !TYPE_CONST (arg_type)
-		  && TYPE_FIELD_ARTIFICIAL (ftype, iparams))
-		{
-		  int is_this = 0;
-		  struct dwarf2_cu *arg_cu = cu;
-		  const char *name = dwarf2_name (child_die, cu);
-
-		  attr = dwarf2_attr (die, DW_AT_object_pointer, cu);
-		  if (attr != nullptr)
-		    {
-		      /* If the compiler emits this, use it.  */
-		      if (follow_die_ref (die, attr, &arg_cu) == child_die)
-			is_this = 1;
-		    }
-		  else if (name && strcmp (name, "this") == 0)
-		    /* Function definitions will have the argument names.  */
-		    is_this = 1;
-		  else if (name == NULL && iparams == 0)
-		    /* Declarations may not have the names, so like
-		       elsewhere in GDB, assume an artificial first
-		       argument is "this".  */
-		    is_this = 1;
-
-		  if (is_this)
-		    arg_type = make_cv_type (1, TYPE_VOLATILE (arg_type),
-					     arg_type, 0);
-		}
-
-	      TYPE_FIELD_TYPE (ftype, iparams) = arg_type;
-	      iparams++;
-	    }
-	  child_die = sibling_die (child_die);
-	}
-    }
-
-  return ftype;
-}
-
-static struct type *
-read_typedef (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  const char *name = NULL;
-  struct type *this_type, *target_type;
-
-  name = dwarf2_full_name (NULL, die, cu);
-  this_type = init_type (objfile, TYPE_CODE_TYPEDEF, 0, name);
-  TYPE_TARGET_STUB (this_type) = 1;
-  set_die_type (die, this_type, cu);
-  target_type = die_type (die, cu);
-  if (target_type != this_type)
-    TYPE_TARGET_TYPE (this_type) = target_type;
-  else
-    {
-      /* Self-referential typedefs are, it seems, not allowed by the DWARF
-	 spec and cause infinite loops in GDB.  */
-      complaint (_("Self-referential DW_TAG_typedef "
-		   "- DIE at %s [in module %s]"),
-		 sect_offset_str (die->sect_off), objfile_name (objfile));
-      TYPE_TARGET_TYPE (this_type) = NULL;
-    }
-  return this_type;
-}
-
-/* Allocate a floating-point type of size BITS and name NAME.  Pass NAME_HINT
-   (which may be different from NAME) to the architecture back-end to allow
-   it to guess the correct format if necessary.  */
-
-static struct type *
-dwarf2_init_float_type (struct objfile *objfile, int bits, const char *name,
-			const char *name_hint, enum bfd_endian byte_order)
-{
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  const struct floatformat **format;
-  struct type *type;
-
-  format = gdbarch_floatformat_for_type (gdbarch, name_hint, bits);
-  if (format)
-    type = init_float_type (objfile, bits, name, format, byte_order);
-  else
-    type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
-
-  return type;
-}
-
-/* Allocate an integer type of size BITS and name NAME.  */
-
-static struct type *
-dwarf2_init_integer_type (struct dwarf2_cu *cu, struct objfile *objfile,
-			  int bits, int unsigned_p, const char *name)
-{
-  struct type *type;
-
-  /* Versions of Intel's C Compiler generate an integer type called "void"
-     instead of using DW_TAG_unspecified_type.  This has been seen on
-     at least versions 14, 17, and 18.  */
-  if (bits == 0 && producer_is_icc (cu) && name != nullptr
-      && strcmp (name, "void") == 0)
-    type = objfile_type (objfile)->builtin_void;
-  else
-    type = init_integer_type (objfile, bits, unsigned_p, name);
-
-  return type;
-}
-
-/* Initialise and return a floating point type of size BITS suitable for
-   use as a component of a complex number.  The NAME_HINT is passed through
-   when initialising the floating point type and is the name of the complex
-   type.
-
-   As DWARF doesn't currently provide an explicit name for the components
-   of a complex number, but it can be helpful to have these components
-   named, we try to select a suitable name based on the size of the
-   component.  */
-static struct type *
-dwarf2_init_complex_target_type (struct dwarf2_cu *cu,
-				 struct objfile *objfile,
-				 int bits, const char *name_hint,
-				 enum bfd_endian byte_order)
-{
-  gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct type *tt = nullptr;
-
-  /* Try to find a suitable floating point builtin type of size BITS.
-     We're going to use the name of this type as the name for the complex
-     target type that we are about to create.  */
-  switch (cu->language)
-    {
-    case language_fortran:
-      switch (bits)
-	{
-	case 32:
-	  tt = builtin_f_type (gdbarch)->builtin_real;
-	  break;
-	case 64:
-	  tt = builtin_f_type (gdbarch)->builtin_real_s8;
-	  break;
-	case 96:	/* The x86-32 ABI specifies 96-bit long double.  */
-	case 128:
-	  tt = builtin_f_type (gdbarch)->builtin_real_s16;
-	  break;
-	}
-      break;
-    default:
-      switch (bits)
-	{
-	case 32:
-	  tt = builtin_type (gdbarch)->builtin_float;
-	  break;
-	case 64:
-	  tt = builtin_type (gdbarch)->builtin_double;
-	  break;
-	case 96:	/* The x86-32 ABI specifies 96-bit long double.  */
-	case 128:
-	  tt = builtin_type (gdbarch)->builtin_long_double;
-	  break;
-	}
-      break;
-    }
-
-  /* If the type we found doesn't match the size we were looking for, then
-     pretend we didn't find a type at all, the complex target type we
-     create will then be nameless.  */
-  if (tt != nullptr && TYPE_LENGTH (tt) * TARGET_CHAR_BIT != bits)
-    tt = nullptr;
-
-  const char *name = (tt == nullptr) ? nullptr : TYPE_NAME (tt);
-  return dwarf2_init_float_type (objfile, bits, name, name_hint, byte_order);
-}
-
-/* Find a representation of a given base type and install
-   it in the TYPE field of the die.  */
-
-static struct type *
-read_base_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct type *type;
-  struct attribute *attr;
-  int encoding = 0, bits = 0;
-  const char *name;
-  gdbarch *arch;
-
-  attr = dwarf2_attr (die, DW_AT_encoding, cu);
-  if (attr != nullptr)
-    encoding = DW_UNSND (attr);
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    bits = DW_UNSND (attr) * TARGET_CHAR_BIT;
-  name = dwarf2_name (die, cu);
-  if (!name)
-    complaint (_("DW_AT_name missing from DW_TAG_base_type"));
-
-  arch = get_objfile_arch (objfile);
-  enum bfd_endian byte_order = gdbarch_byte_order (arch);
-
-  attr = dwarf2_attr (die, DW_AT_endianity, cu);
-  if (attr)
-    {
-      int endianity = DW_UNSND (attr);
-
-      switch (endianity)
-	{
-	case DW_END_big:
-	  byte_order = BFD_ENDIAN_BIG;
-	  break;
-	case DW_END_little:
-	  byte_order = BFD_ENDIAN_LITTLE;
-	  break;
-	default:
-	  complaint (_("DW_AT_endianity has unrecognized value %d"), endianity);
-	  break;
-	}
-    }
-
-  switch (encoding)
-    {
-      case DW_ATE_address:
-	/* Turn DW_ATE_address into a void * pointer.  */
-	type = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, NULL);
-	type = init_pointer_type (objfile, bits, name, type);
-	break;
-      case DW_ATE_boolean:
-	type = init_boolean_type (objfile, bits, 1, name);
-	break;
-      case DW_ATE_complex_float:
-	type = dwarf2_init_complex_target_type (cu, objfile, bits / 2, name,
-						byte_order);
-	type = init_complex_type (objfile, name, type);
-	break;
-      case DW_ATE_decimal_float:
-	type = init_decfloat_type (objfile, bits, name);
-	break;
-      case DW_ATE_float:
-	type = dwarf2_init_float_type (objfile, bits, name, name, byte_order);
-	break;
-      case DW_ATE_signed:
-	type = dwarf2_init_integer_type (cu, objfile, bits, 0, name);
-	break;
-      case DW_ATE_unsigned:
-	if (cu->language == language_fortran
-	    && name
-	    && startswith (name, "character("))
-	  type = init_character_type (objfile, bits, 1, name);
-	else
-	  type = dwarf2_init_integer_type (cu, objfile, bits, 1, name);
-	break;
-      case DW_ATE_signed_char:
-	if (cu->language == language_ada || cu->language == language_m2
-	    || cu->language == language_pascal
-	    || cu->language == language_fortran)
-	  type = init_character_type (objfile, bits, 0, name);
-	else
-	  type = dwarf2_init_integer_type (cu, objfile, bits, 0, name);
-	break;
-      case DW_ATE_unsigned_char:
-	if (cu->language == language_ada || cu->language == language_m2
-	    || cu->language == language_pascal
-	    || cu->language == language_fortran
-	    || cu->language == language_rust)
-	  type = init_character_type (objfile, bits, 1, name);
-	else
-	  type = dwarf2_init_integer_type (cu, objfile, bits, 1, name);
-	break;
-      case DW_ATE_UTF:
-	{
-	  if (bits == 16)
-	    type = builtin_type (arch)->builtin_char16;
-	  else if (bits == 32)
-	    type = builtin_type (arch)->builtin_char32;
-	  else
-	    {
-	      complaint (_("unsupported DW_ATE_UTF bit size: '%d'"),
-			 bits);
-	      type = dwarf2_init_integer_type (cu, objfile, bits, 1, name);
-	    }
-	  return set_die_type (die, type, cu);
-	}
-	break;
-
-      default:
-	complaint (_("unsupported DW_AT_encoding: '%s'"),
-		   dwarf_type_encoding_name (encoding));
-	type = init_type (objfile, TYPE_CODE_ERROR, bits, name);
-	break;
-    }
-
-  if (name && strcmp (name, "char") == 0)
-    TYPE_NOSIGN (type) = 1;
-
-  maybe_set_alignment (cu, die, type);
-
-  TYPE_ENDIANITY_NOT_DEFAULT (type) = gdbarch_byte_order (arch) != byte_order;
-
-  return set_die_type (die, type, cu);
-}
-
-/* Parse dwarf attribute if it's a block, reference or constant and put the
-   resulting value of the attribute into struct bound_prop.
-   Returns 1 if ATTR could be resolved into PROP, 0 otherwise.  */
-
-static int
-attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
-		      struct dwarf2_cu *cu, struct dynamic_prop *prop,
-		      struct type *default_type)
-{
-  struct dwarf2_property_baton *baton;
-  struct obstack *obstack
-    = &cu->per_cu->dwarf2_per_objfile->objfile->objfile_obstack;
-
-  gdb_assert (default_type != NULL);
-
-  if (attr == NULL || prop == NULL)
-    return 0;
-
-  if (attr_form_is_block (attr))
-    {
-      baton = XOBNEW (obstack, struct dwarf2_property_baton);
-      baton->property_type = default_type;
-      baton->locexpr.per_cu = cu->per_cu;
-      baton->locexpr.size = DW_BLOCK (attr)->size;
-      baton->locexpr.data = DW_BLOCK (attr)->data;
-      switch (attr->name)
-	{
-	case DW_AT_string_length:
-	  baton->locexpr.is_reference = true;
-	  break;
-	default:
-	  baton->locexpr.is_reference = false;
-	  break;
-	}
-      prop->data.baton = baton;
-      prop->kind = PROP_LOCEXPR;
-      gdb_assert (prop->data.baton != NULL);
-    }
-  else if (attr_form_is_ref (attr))
-    {
-      struct dwarf2_cu *target_cu = cu;
-      struct die_info *target_die;
-      struct attribute *target_attr;
-
-      target_die = follow_die_ref (die, attr, &target_cu);
-      target_attr = dwarf2_attr (target_die, DW_AT_location, target_cu);
-      if (target_attr == NULL)
-	target_attr = dwarf2_attr (target_die, DW_AT_data_member_location,
-				   target_cu);
-      if (target_attr == NULL)
-	return 0;
-
-      switch (target_attr->name)
-	{
-	  case DW_AT_location:
-	    if (attr_form_is_section_offset (target_attr))
-	      {
-		baton = XOBNEW (obstack, struct dwarf2_property_baton);
-		baton->property_type = die_type (target_die, target_cu);
-		fill_in_loclist_baton (cu, &baton->loclist, target_attr);
-		prop->data.baton = baton;
-		prop->kind = PROP_LOCLIST;
-		gdb_assert (prop->data.baton != NULL);
-	      }
-	    else if (attr_form_is_block (target_attr))
-	      {
-		baton = XOBNEW (obstack, struct dwarf2_property_baton);
-		baton->property_type = die_type (target_die, target_cu);
-		baton->locexpr.per_cu = cu->per_cu;
-		baton->locexpr.size = DW_BLOCK (target_attr)->size;
-		baton->locexpr.data = DW_BLOCK (target_attr)->data;
-		baton->locexpr.is_reference = true;
-		prop->data.baton = baton;
-		prop->kind = PROP_LOCEXPR;
-		gdb_assert (prop->data.baton != NULL);
-	      }
-	    else
-	      {
-		dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
-						       "dynamic property");
-		return 0;
-	      }
-	    break;
-	  case DW_AT_data_member_location:
-	    {
-	      LONGEST offset;
-
-	      if (!handle_data_member_location (target_die, target_cu,
-						&offset))
-		return 0;
-
-	      baton = XOBNEW (obstack, struct dwarf2_property_baton);
-	      baton->property_type = read_type_die (target_die->parent,
-						      target_cu);
-	      baton->offset_info.offset = offset;
-	      baton->offset_info.type = die_type (target_die, target_cu);
-	      prop->data.baton = baton;
-	      prop->kind = PROP_ADDR_OFFSET;
-	      break;
-	    }
-	}
-    }
-  else if (attr_form_is_constant (attr))
-    {
-      prop->data.const_val = dwarf2_get_attr_constant_value (attr, 0);
-      prop->kind = PROP_CONST;
-    }
-  else
-    {
-      dwarf2_invalid_attrib_class_complaint (dwarf_form_name (attr->form),
-					     dwarf2_name (die, cu));
-      return 0;
-    }
-
-  return 1;
-}
-
-/* Find an integer type SIZE_IN_BYTES bytes in size and return it.
-   UNSIGNED_P controls if the integer is unsigned or not.  */
-
-static struct type *
-dwarf2_per_cu_int_type (struct dwarf2_per_cu_data *per_cu,
-			int size_in_bytes, bool unsigned_p)
-{
-  struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile;
-  struct type *int_type;
-
-  /* Helper macro to examine the various builtin types.  */
-#define TRY_TYPE(F)							\
-  int_type = (unsigned_p						\
-	      ? objfile_type (objfile)->builtin_unsigned_ ## F		\
-	      : objfile_type (objfile)->builtin_ ## F);			\
-  if (int_type != NULL && TYPE_LENGTH (int_type) == size_in_bytes)	\
-    return int_type
-
-  TRY_TYPE (char);
-  TRY_TYPE (short);
-  TRY_TYPE (int);
-  TRY_TYPE (long);
-  TRY_TYPE (long_long);
-
-#undef TRY_TYPE
-
-  gdb_assert_not_reached ("unable to find suitable integer type");
-}
-
-/* Find an integer type the same size as the address size given in the
-   compilation unit header for PER_CU.  UNSIGNED_P controls if the integer
-   is unsigned or not.  */
-
-static struct type *
-dwarf2_per_cu_addr_sized_int_type (struct dwarf2_per_cu_data *per_cu,
-				   bool unsigned_p)
-{
-  int addr_size = dwarf2_per_cu_addr_size (per_cu);
-  return dwarf2_per_cu_int_type (per_cu, addr_size, unsigned_p);
-}
-
-/* Read the DW_AT_type attribute for a sub-range.  If this attribute is not
-   present (which is valid) then compute the default type based on the
-   compilation units address size.  */
-
-static struct type *
-read_subrange_index_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *index_type = die_type (die, cu);
-
-  /* Dwarf-2 specifications explicitly allows to create subrange types
-     without specifying a base type.
-     In that case, the base type must be set to the type of
-     the lower bound, upper bound or count, in that order, if any of these
-     three attributes references an object that has a type.
-     If no base type is found, the Dwarf-2 specifications say that
-     a signed integer type of size equal to the size of an address should
-     be used.
-     For the following C code: `extern char gdb_int [];'
-     GCC produces an empty range DIE.
-     FIXME: muller/2010-05-28: Possible references to object for low bound,
-     high bound or count are not yet handled by this code.  */
-  if (TYPE_CODE (index_type) == TYPE_CODE_VOID)
-    index_type = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
-
-  return index_type;
-}
-
-/* Read the given DW_AT_subrange DIE.  */
-
-static struct type *
-read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *base_type, *orig_base_type;
-  struct type *range_type;
-  struct attribute *attr;
-  struct dynamic_prop low, high;
-  int low_default_is_valid;
-  int high_bound_is_count = 0;
-  const char *name;
-  ULONGEST negative_mask;
-
-  orig_base_type = read_subrange_index_type (die, cu);
-
-  /* If ORIG_BASE_TYPE is a typedef, it will not be TYPE_UNSIGNED,
-     whereas the real type might be.  So, we use ORIG_BASE_TYPE when
-     creating the range type, but we use the result of check_typedef
-     when examining properties of the type.  */
-  base_type = check_typedef (orig_base_type);
-
-  /* The die_type call above may have already set the type for this DIE.  */
-  range_type = get_die_type (die, cu);
-  if (range_type)
-    return range_type;
-
-  low.kind = PROP_CONST;
-  high.kind = PROP_CONST;
-  high.data.const_val = 0;
-
-  /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow
-     omitting DW_AT_lower_bound.  */
-  switch (cu->language)
-    {
-    case language_c:
-    case language_cplus:
-      low.data.const_val = 0;
-      low_default_is_valid = 1;
-      break;
-    case language_fortran:
-      low.data.const_val = 1;
-      low_default_is_valid = 1;
-      break;
-    case language_d:
-    case language_objc:
-    case language_rust:
-      low.data.const_val = 0;
-      low_default_is_valid = (cu->header.version >= 4);
-      break;
-    case language_ada:
-    case language_m2:
-    case language_pascal:
-      low.data.const_val = 1;
-      low_default_is_valid = (cu->header.version >= 4);
-      break;
-    default:
-      low.data.const_val = 0;
-      low_default_is_valid = 0;
-      break;
-    }
-
-  attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
-  if (attr != nullptr)
-    attr_to_dynamic_prop (attr, die, cu, &low, base_type);
-  else if (!low_default_is_valid)
-    complaint (_("Missing DW_AT_lower_bound "
-				      "- DIE at %s [in module %s]"),
-	       sect_offset_str (die->sect_off),
-	       objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-
-  struct attribute *attr_ub, *attr_count;
-  attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu);
-  if (!attr_to_dynamic_prop (attr, die, cu, &high, base_type))
-    {
-      attr = attr_count = dwarf2_attr (die, DW_AT_count, cu);
-      if (attr_to_dynamic_prop (attr, die, cu, &high, base_type))
-	{
-	  /* If bounds are constant do the final calculation here.  */
-	  if (low.kind == PROP_CONST && high.kind == PROP_CONST)
-	    high.data.const_val = low.data.const_val + high.data.const_val - 1;
-	  else
-	    high_bound_is_count = 1;
-	}
-      else
-	{
-	  if (attr_ub != NULL)
-	    complaint (_("Unresolved DW_AT_upper_bound "
-			 "- DIE at %s [in module %s]"),
-		       sect_offset_str (die->sect_off),
-		       objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	  if (attr_count != NULL)
-	    complaint (_("Unresolved DW_AT_count "
-			 "- DIE at %s [in module %s]"),
-		       sect_offset_str (die->sect_off),
-		       objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	}
-    }
-
-  LONGEST bias = 0;
-  struct attribute *bias_attr = dwarf2_attr (die, DW_AT_GNU_bias, cu);
-  if (bias_attr != nullptr && attr_form_is_constant (bias_attr))
-    bias = dwarf2_get_attr_constant_value (bias_attr, 0);
-
-  /* Normally, the DWARF producers are expected to use a signed
-     constant form (Eg. DW_FORM_sdata) to express negative bounds.
-     But this is unfortunately not always the case, as witnessed
-     with GCC, for instance, where the ambiguous DW_FORM_dataN form
-     is used instead.  To work around that ambiguity, we treat
-     the bounds as signed, and thus sign-extend their values, when
-     the base type is signed.  */
-  negative_mask =
-    -((ULONGEST) 1 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1));
-  if (low.kind == PROP_CONST
-      && !TYPE_UNSIGNED (base_type) && (low.data.const_val & negative_mask))
-    low.data.const_val |= negative_mask;
-  if (high.kind == PROP_CONST
-      && !TYPE_UNSIGNED (base_type) && (high.data.const_val & negative_mask))
-    high.data.const_val |= negative_mask;
-
-  /* Check for bit and byte strides.  */
-  struct dynamic_prop byte_stride_prop;
-  attribute *attr_byte_stride = dwarf2_attr (die, DW_AT_byte_stride, cu);
-  if (attr_byte_stride != nullptr)
-    {
-      struct type *prop_type
-	= dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
-      attr_to_dynamic_prop (attr_byte_stride, die, cu, &byte_stride_prop,
-			    prop_type);
-    }
-
-  struct dynamic_prop bit_stride_prop;
-  attribute *attr_bit_stride = dwarf2_attr (die, DW_AT_bit_stride, cu);
-  if (attr_bit_stride != nullptr)
-    {
-      /* It only makes sense to have either a bit or byte stride.  */
-      if (attr_byte_stride != nullptr)
-	{
-	  complaint (_("Found DW_AT_bit_stride and DW_AT_byte_stride "
-		       "- DIE at %s [in module %s]"),
-		     sect_offset_str (die->sect_off),
-		     objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-	  attr_bit_stride = nullptr;
-	}
-      else
-	{
-	  struct type *prop_type
-	    = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
-	  attr_to_dynamic_prop (attr_bit_stride, die, cu, &bit_stride_prop,
-				prop_type);
-	}
-    }
-
-  if (attr_byte_stride != nullptr
-      || attr_bit_stride != nullptr)
-    {
-      bool byte_stride_p = (attr_byte_stride != nullptr);
-      struct dynamic_prop *stride
-	= byte_stride_p ? &byte_stride_prop : &bit_stride_prop;
-
-      range_type
-	= create_range_type_with_stride (NULL, orig_base_type, &low,
-					 &high, bias, stride, byte_stride_p);
-    }
-  else
-    range_type = create_range_type (NULL, orig_base_type, &low, &high, bias);
-
-  if (high_bound_is_count)
-    TYPE_RANGE_DATA (range_type)->flag_upper_bound_is_count = 1;
-
-  /* Ada expects an empty array on no boundary attributes.  */
-  if (attr == NULL && cu->language != language_ada)
-    TYPE_HIGH_BOUND_KIND (range_type) = PROP_UNDEFINED;
-
-  name = dwarf2_name (die, cu);
-  if (name)
-    TYPE_NAME (range_type) = name;
-
-  attr = dwarf2_attr (die, DW_AT_byte_size, cu);
-  if (attr != nullptr)
-    TYPE_LENGTH (range_type) = DW_UNSND (attr);
-
-  maybe_set_alignment (cu, die, range_type);
-
-  set_die_type (die, range_type, cu);
-
-  /* set_die_type should be already done.  */
-  set_descriptive_type (range_type, die, cu);
-
-  return range_type;
-}
-
-static struct type *
-read_unspecified_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *type;
-
-  type = init_type (cu->per_cu->dwarf2_per_objfile->objfile, TYPE_CODE_VOID,0,
-		    NULL);
-  TYPE_NAME (type) = dwarf2_name (die, cu);
-
-  /* In Ada, an unspecified type is typically used when the description
-     of the type is deferred to a different unit.  When encountering
-     such a type, we treat it as a stub, and try to resolve it later on,
-     when needed.  */
-  if (cu->language == language_ada)
-    TYPE_STUB (type) = 1;
-
-  return set_die_type (die, type, cu);
-}
-
-/* Read a single die and all its descendents.  Set the die's sibling
-   field to NULL; set other fields in the die correctly, and set all
-   of the descendents' fields correctly.  Set *NEW_INFO_PTR to the
-   location of the info_ptr after reading all of those dies.  PARENT
-   is the parent of the die in question.  */
-
-static struct die_info *
-read_die_and_children (const struct die_reader_specs *reader,
-		       const gdb_byte *info_ptr,
-		       const gdb_byte **new_info_ptr,
-		       struct die_info *parent)
-{
-  struct die_info *die;
-  const gdb_byte *cur_ptr;
-  int has_children;
-
-  cur_ptr = read_full_die_1 (reader, &die, info_ptr, &has_children, 0);
-  if (die == NULL)
-    {
-      *new_info_ptr = cur_ptr;
-      return NULL;
-    }
-  store_in_ref_table (die, reader->cu);
-
-  if (has_children)
-    die->child = read_die_and_siblings_1 (reader, cur_ptr, new_info_ptr, die);
-  else
-    {
-      die->child = NULL;
-      *new_info_ptr = cur_ptr;
-    }
-
-  die->sibling = NULL;
-  die->parent = parent;
-  return die;
-}
-
-/* Read a die, all of its descendents, and all of its siblings; set
-   all of the fields of all of the dies correctly.  Arguments are as
-   in read_die_and_children.  */
-
-static struct die_info *
-read_die_and_siblings_1 (const struct die_reader_specs *reader,
-			 const gdb_byte *info_ptr,
-			 const gdb_byte **new_info_ptr,
-			 struct die_info *parent)
-{
-  struct die_info *first_die, *last_sibling;
-  const gdb_byte *cur_ptr;
-
-  cur_ptr = info_ptr;
-  first_die = last_sibling = NULL;
-
-  while (1)
-    {
-      struct die_info *die
-	= read_die_and_children (reader, cur_ptr, &cur_ptr, parent);
-
-      if (die == NULL)
-	{
-	  *new_info_ptr = cur_ptr;
-	  return first_die;
-	}
-
-      if (!first_die)
-	first_die = die;
-      else
-	last_sibling->sibling = die;
-
-      last_sibling = die;
-    }
-}
-
-/* Read a die, all of its descendents, and all of its siblings; set
-   all of the fields of all of the dies correctly.  Arguments are as
-   in read_die_and_children.
-   This the main entry point for reading a DIE and all its children.  */
-
-static struct die_info *
-read_die_and_siblings (const struct die_reader_specs *reader,
-		       const gdb_byte *info_ptr,
-		       const gdb_byte **new_info_ptr,
-		       struct die_info *parent)
-{
-  struct die_info *die = read_die_and_siblings_1 (reader, info_ptr,
-						  new_info_ptr, parent);
-
-  if (dwarf_die_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Read die from %s@0x%x of %s:\n",
-			  get_section_name (reader->die_section),
-			  (unsigned) (info_ptr - reader->die_section->buffer),
-			  bfd_get_filename (reader->abfd));
-      dump_die (die, dwarf_die_debug);
-    }
-
-  return die;
-}
-
-/* Read a die and all its attributes, leave space for NUM_EXTRA_ATTRS
-   attributes.
-   The caller is responsible for filling in the extra attributes
-   and updating (*DIEP)->num_attrs.
-   Set DIEP to point to a newly allocated die with its information,
-   except for its child, sibling, and parent fields.
-   Set HAS_CHILDREN to tell whether the die has children or not.  */
-
-static const gdb_byte *
-read_full_die_1 (const struct die_reader_specs *reader,
-		 struct die_info **diep, const gdb_byte *info_ptr,
-		 int *has_children, int num_extra_attrs)
-{
-  unsigned int abbrev_number, bytes_read, i;
-  struct abbrev_info *abbrev;
-  struct die_info *die;
-  struct dwarf2_cu *cu = reader->cu;
-  bfd *abfd = reader->abfd;
-
-  sect_offset sect_off = (sect_offset) (info_ptr - reader->buffer);
-  abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-  info_ptr += bytes_read;
-  if (!abbrev_number)
-    {
-      *diep = NULL;
-      *has_children = 0;
-      return info_ptr;
-    }
-
-  abbrev = reader->abbrev_table->lookup_abbrev (abbrev_number);
-  if (!abbrev)
-    error (_("Dwarf Error: could not find abbrev number %d [in module %s]"),
-	   abbrev_number,
-	   bfd_get_filename (abfd));
-
-  die = dwarf_alloc_die (cu, abbrev->num_attrs + num_extra_attrs);
-  die->sect_off = sect_off;
-  die->tag = abbrev->tag;
-  die->abbrev = abbrev_number;
-
-  /* Make the result usable.
-     The caller needs to update num_attrs after adding the extra
-     attributes.  */
-  die->num_attrs = abbrev->num_attrs;
-
-  for (i = 0; i < abbrev->num_attrs; ++i)
-    info_ptr = read_attribute (reader, &die->attrs[i], &abbrev->attrs[i],
-			       info_ptr);
-
-  *diep = die;
-  *has_children = abbrev->has_children;
-  return info_ptr;
-}
-
-/* Read a die and all its attributes.
-   Set DIEP to point to a newly allocated die with its information,
-   except for its child, sibling, and parent fields.
-   Set HAS_CHILDREN to tell whether the die has children or not.  */
-
-static const gdb_byte *
-read_full_die (const struct die_reader_specs *reader,
-	       struct die_info **diep, const gdb_byte *info_ptr,
-	       int *has_children)
-{
-  const gdb_byte *result;
-
-  result = read_full_die_1 (reader, diep, info_ptr, has_children, 0);
-
-  if (dwarf_die_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Read die from %s@0x%x of %s:\n",
-			  get_section_name (reader->die_section),
-			  (unsigned) (info_ptr - reader->die_section->buffer),
-			  bfd_get_filename (reader->abfd));
-      dump_die (*diep, dwarf_die_debug);
-    }
-
-  return result;
-}
-
-/* Abbreviation tables.
-
-   In DWARF version 2, the description of the debugging information is
-   stored in a separate .debug_abbrev section.  Before we read any
-   dies from a section we read in all abbreviations and install them
-   in a hash table.  */
-
-/* Allocate space for a struct abbrev_info object in ABBREV_TABLE.  */
-
-struct abbrev_info *
-abbrev_table::alloc_abbrev ()
-{
-  struct abbrev_info *abbrev;
-
-  abbrev = XOBNEW (&abbrev_obstack, struct abbrev_info);
-  memset (abbrev, 0, sizeof (struct abbrev_info));
-
-  return abbrev;
-}
-
-/* Add an abbreviation to the table.  */
-
-void
-abbrev_table::add_abbrev (unsigned int abbrev_number,
-			  struct abbrev_info *abbrev)
-{
-  unsigned int hash_number;
-
-  hash_number = abbrev_number % ABBREV_HASH_SIZE;
-  abbrev->next = m_abbrevs[hash_number];
-  m_abbrevs[hash_number] = abbrev;
-}
-
-/* Look up an abbrev in the table.
-   Returns NULL if the abbrev is not found.  */
-
-struct abbrev_info *
-abbrev_table::lookup_abbrev (unsigned int abbrev_number)
-{
-  unsigned int hash_number;
-  struct abbrev_info *abbrev;
-
-  hash_number = abbrev_number % ABBREV_HASH_SIZE;
-  abbrev = m_abbrevs[hash_number];
-
-  while (abbrev)
-    {
-      if (abbrev->number == abbrev_number)
-	return abbrev;
-      abbrev = abbrev->next;
-    }
-  return NULL;
-}
-
-/* Read in an abbrev table.  */
-
-static abbrev_table_up
-abbrev_table_read_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			 struct dwarf2_section_info *section,
-			 sect_offset sect_off)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  bfd *abfd = get_section_bfd_owner (section);
-  const gdb_byte *abbrev_ptr;
-  struct abbrev_info *cur_abbrev;
-  unsigned int abbrev_number, bytes_read, abbrev_name;
-  unsigned int abbrev_form;
-  struct attr_abbrev *cur_attrs;
-  unsigned int allocated_attrs;
-
-  abbrev_table_up abbrev_table (new struct abbrev_table (sect_off));
-
-  dwarf2_read_section (objfile, section);
-  abbrev_ptr = section->buffer + to_underlying (sect_off);
-  abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-  abbrev_ptr += bytes_read;
-
-  allocated_attrs = ATTR_ALLOC_CHUNK;
-  cur_attrs = XNEWVEC (struct attr_abbrev, allocated_attrs);
-
-  /* Loop until we reach an abbrev number of 0.  */
-  while (abbrev_number)
-    {
-      cur_abbrev = abbrev_table->alloc_abbrev ();
-
-      /* read in abbrev header */
-      cur_abbrev->number = abbrev_number;
-      cur_abbrev->tag
-	= (enum dwarf_tag) read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-      abbrev_ptr += bytes_read;
-      cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
-      abbrev_ptr += 1;
-
-      /* now read in declarations */
-      for (;;)
-	{
-	  LONGEST implicit_const;
-
-	  abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-	  abbrev_ptr += bytes_read;
-	  abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-	  abbrev_ptr += bytes_read;
-	  if (abbrev_form == DW_FORM_implicit_const)
-	    {
-	      implicit_const = read_signed_leb128 (abfd, abbrev_ptr,
-						   &bytes_read);
-	      abbrev_ptr += bytes_read;
-	    }
-	  else
-	    {
-	      /* Initialize it due to a false compiler warning.  */
-	      implicit_const = -1;
-	    }
-
-	  if (abbrev_name == 0)
-	    break;
-
-	  if (cur_abbrev->num_attrs == allocated_attrs)
-	    {
-	      allocated_attrs += ATTR_ALLOC_CHUNK;
-	      cur_attrs
-		= XRESIZEVEC (struct attr_abbrev, cur_attrs, allocated_attrs);
-	    }
-
-	  cur_attrs[cur_abbrev->num_attrs].name
-	    = (enum dwarf_attribute) abbrev_name;
-	  cur_attrs[cur_abbrev->num_attrs].form
-	    = (enum dwarf_form) abbrev_form;
-	  cur_attrs[cur_abbrev->num_attrs].implicit_const = implicit_const;
-	  ++cur_abbrev->num_attrs;
-	}
-
-      cur_abbrev->attrs =
-	XOBNEWVEC (&abbrev_table->abbrev_obstack, struct attr_abbrev,
-		   cur_abbrev->num_attrs);
-      memcpy (cur_abbrev->attrs, cur_attrs,
-	      cur_abbrev->num_attrs * sizeof (struct attr_abbrev));
-
-      abbrev_table->add_abbrev (abbrev_number, cur_abbrev);
-
-      /* Get next abbreviation.
-         Under Irix6 the abbreviations for a compilation unit are not
-         always properly terminated with an abbrev number of 0.
-         Exit loop if we encounter an abbreviation which we have
-         already read (which means we are about to read the abbreviations
-         for the next compile unit) or if the end of the abbreviation
-         table is reached.  */
-      if ((unsigned int) (abbrev_ptr - section->buffer) >= section->size)
-	break;
-      abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-      abbrev_ptr += bytes_read;
-      if (abbrev_table->lookup_abbrev (abbrev_number) != NULL)
-	break;
-    }
-
-  xfree (cur_attrs);
-  return abbrev_table;
-}
-
-/* Returns nonzero if TAG represents a type that we might generate a partial
-   symbol for.  */
-
-static int
-is_type_tag_for_partial (int tag)
-{
-  switch (tag)
-    {
-#if 0
-    /* Some types that would be reasonable to generate partial symbols for,
-       that we don't at present.  */
-    case DW_TAG_array_type:
-    case DW_TAG_file_type:
-    case DW_TAG_ptr_to_member_type:
-    case DW_TAG_set_type:
-    case DW_TAG_string_type:
-    case DW_TAG_subroutine_type:
-#endif
-    case DW_TAG_base_type:
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_enumeration_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_subrange_type:
-    case DW_TAG_typedef:
-    case DW_TAG_union_type:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-/* Load all DIEs that are interesting for partial symbols into memory.  */
-
-static struct partial_die_info *
-load_partial_dies (const struct die_reader_specs *reader,
-		   const gdb_byte *info_ptr, int building_psymtab)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct partial_die_info *parent_die, *last_die, *first_die = NULL;
-  unsigned int bytes_read;
-  unsigned int load_all = 0;
-  int nesting_level = 1;
-
-  parent_die = NULL;
-  last_die = NULL;
-
-  gdb_assert (cu->per_cu != NULL);
-  if (cu->per_cu->load_all_dies)
-    load_all = 1;
-
-  cu->partial_dies
-    = htab_create_alloc_ex (cu->header.length / 12,
-			    partial_die_hash,
-			    partial_die_eq,
-			    NULL,
-			    &cu->comp_unit_obstack,
-			    hashtab_obstack_allocate,
-			    dummy_obstack_deallocate);
-
-  while (1)
-    {
-      abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr, &bytes_read);
-
-      /* A NULL abbrev means the end of a series of children.  */
-      if (abbrev == NULL)
-	{
-	  if (--nesting_level == 0)
-	    return first_die;
-
-	  info_ptr += bytes_read;
-	  last_die = parent_die;
-	  parent_die = parent_die->die_parent;
-	  continue;
-	}
-
-      /* Check for template arguments.  We never save these; if
-	 they're seen, we just mark the parent, and go on our way.  */
-      if (parent_die != NULL
-	  && cu->language == language_cplus
-	  && (abbrev->tag == DW_TAG_template_type_param
-	      || abbrev->tag == DW_TAG_template_value_param))
-	{
-	  parent_die->has_template_arguments = 1;
-
-	  if (!load_all)
-	    {
-	      /* We don't need a partial DIE for the template argument.  */
-	      info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
-	      continue;
-	    }
-	}
-
-      /* We only recurse into c++ subprograms looking for template arguments.
-	 Skip their other children.  */
-      if (!load_all
-	  && cu->language == language_cplus
-	  && parent_die != NULL
-	  && parent_die->tag == DW_TAG_subprogram)
-	{
-	  info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
-	  continue;
-	}
-
-      /* Check whether this DIE is interesting enough to save.  Normally
-	 we would not be interested in members here, but there may be
-	 later variables referencing them via DW_AT_specification (for
-	 static members).  */
-      if (!load_all
-	  && !is_type_tag_for_partial (abbrev->tag)
-	  && abbrev->tag != DW_TAG_constant
-	  && abbrev->tag != DW_TAG_enumerator
-	  && abbrev->tag != DW_TAG_subprogram
-	  && abbrev->tag != DW_TAG_inlined_subroutine
-	  && abbrev->tag != DW_TAG_lexical_block
-	  && abbrev->tag != DW_TAG_variable
-	  && abbrev->tag != DW_TAG_namespace
-	  && abbrev->tag != DW_TAG_module
-	  && abbrev->tag != DW_TAG_member
-	  && abbrev->tag != DW_TAG_imported_unit
-	  && abbrev->tag != DW_TAG_imported_declaration)
-	{
-	  /* Otherwise we skip to the next sibling, if any.  */
-	  info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
-	  continue;
-	}
-
-      struct partial_die_info pdi ((sect_offset) (info_ptr - reader->buffer),
-				   abbrev);
-
-      info_ptr = pdi.read (reader, *abbrev, info_ptr + bytes_read);
-
-      /* This two-pass algorithm for processing partial symbols has a
-	 high cost in cache pressure.  Thus, handle some simple cases
-	 here which cover the majority of C partial symbols.  DIEs
-	 which neither have specification tags in them, nor could have
-	 specification tags elsewhere pointing at them, can simply be
-	 processed and discarded.
-
-	 This segment is also optional; scan_partial_symbols and
-	 add_partial_symbol will handle these DIEs if we chain
-	 them in normally.  When compilers which do not emit large
-	 quantities of duplicate debug information are more common,
-	 this code can probably be removed.  */
-
-      /* Any complete simple types at the top level (pretty much all
-	 of them, for a language without namespaces), can be processed
-	 directly.  */
-      if (parent_die == NULL
-	  && pdi.has_specification == 0
-	  && pdi.is_declaration == 0
-	  && ((pdi.tag == DW_TAG_typedef && !pdi.has_children)
-	      || pdi.tag == DW_TAG_base_type
-	      || pdi.tag == DW_TAG_subrange_type))
-	{
-	  if (building_psymtab && pdi.name != NULL)
-	    add_psymbol_to_list (pdi.name, false,
-				 VAR_DOMAIN, LOC_TYPEDEF, -1,
-				 psymbol_placement::STATIC,
-				 0, cu->language, objfile);
-	  info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
-	  continue;
-	}
-
-      /* The exception for DW_TAG_typedef with has_children above is
-	 a workaround of GCC PR debug/47510.  In the case of this complaint
-	 type_name_or_error will error on such types later.
-
-	 GDB skipped children of DW_TAG_typedef by the shortcut above and then
-	 it could not find the child DIEs referenced later, this is checked
-	 above.  In correct DWARF DW_TAG_typedef should have no children.  */
-
-      if (pdi.tag == DW_TAG_typedef && pdi.has_children)
-	complaint (_("DW_TAG_typedef has childen - GCC PR debug/47510 bug "
-		     "- DIE at %s [in module %s]"),
-		   sect_offset_str (pdi.sect_off), objfile_name (objfile));
-
-      /* If we're at the second level, and we're an enumerator, and
-	 our parent has no specification (meaning possibly lives in a
-	 namespace elsewhere), then we can add the partial symbol now
-	 instead of queueing it.  */
-      if (pdi.tag == DW_TAG_enumerator
-	  && parent_die != NULL
-	  && parent_die->die_parent == NULL
-	  && parent_die->tag == DW_TAG_enumeration_type
-	  && parent_die->has_specification == 0)
-	{
-	  if (pdi.name == NULL)
-	    complaint (_("malformed enumerator DIE ignored"));
-	  else if (building_psymtab)
-	    add_psymbol_to_list (pdi.name, false,
-				 VAR_DOMAIN, LOC_CONST, -1,
-				 cu->language == language_cplus
-				 ? psymbol_placement::GLOBAL
-				 : psymbol_placement::STATIC,
-				 0, cu->language, objfile);
-
-	  info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
-	  continue;
-	}
-
-      struct partial_die_info *part_die
-	= new (&cu->comp_unit_obstack) partial_die_info (pdi);
-
-      /* We'll save this DIE so link it in.  */
-      part_die->die_parent = parent_die;
-      part_die->die_sibling = NULL;
-      part_die->die_child = NULL;
-
-      if (last_die && last_die == parent_die)
-	last_die->die_child = part_die;
-      else if (last_die)
-	last_die->die_sibling = part_die;
-
-      last_die = part_die;
-
-      if (first_die == NULL)
-	first_die = part_die;
-
-      /* Maybe add the DIE to the hash table.  Not all DIEs that we
-	 find interesting need to be in the hash table, because we
-	 also have the parent/sibling/child chains; only those that we
-	 might refer to by offset later during partial symbol reading.
-
-	 For now this means things that might have be the target of a
-	 DW_AT_specification, DW_AT_abstract_origin, or
-	 DW_AT_extension.  DW_AT_extension will refer only to
-	 namespaces; DW_AT_abstract_origin refers to functions (and
-	 many things under the function DIE, but we do not recurse
-	 into function DIEs during partial symbol reading) and
-	 possibly variables as well; DW_AT_specification refers to
-	 declarations.  Declarations ought to have the DW_AT_declaration
-	 flag.  It happens that GCC forgets to put it in sometimes, but
-	 only for functions, not for types.
-
-	 Adding more things than necessary to the hash table is harmless
-	 except for the performance cost.  Adding too few will result in
-	 wasted time in find_partial_die, when we reread the compilation
-	 unit with load_all_dies set.  */
-
-      if (load_all
-	  || abbrev->tag == DW_TAG_constant
-	  || abbrev->tag == DW_TAG_subprogram
-	  || abbrev->tag == DW_TAG_variable
-	  || abbrev->tag == DW_TAG_namespace
-	  || part_die->is_declaration)
-	{
-	  void **slot;
-
-	  slot = htab_find_slot_with_hash (cu->partial_dies, part_die,
-					   to_underlying (part_die->sect_off),
-					   INSERT);
-	  *slot = part_die;
-	}
-
-      /* For some DIEs we want to follow their children (if any).  For C
-	 we have no reason to follow the children of structures; for other
-	 languages we have to, so that we can get at method physnames
-	 to infer fully qualified class names, for DW_AT_specification,
-	 and for C++ template arguments.  For C++, we also look one level
-	 inside functions to find template arguments (if the name of the
-	 function does not already contain the template arguments).
-
-	 For Ada and Fortran, we need to scan the children of subprograms
-	 and lexical blocks as well because these languages allow the
-	 definition of nested entities that could be interesting for the
-	 debugger, such as nested subprograms for instance.  */
-      if (last_die->has_children
-	  && (load_all
-	      || last_die->tag == DW_TAG_namespace
-	      || last_die->tag == DW_TAG_module
-	      || last_die->tag == DW_TAG_enumeration_type
-	      || (cu->language == language_cplus
-		  && last_die->tag == DW_TAG_subprogram
-		  && (last_die->name == NULL
-		      || strchr (last_die->name, '<') == NULL))
-	      || (cu->language != language_c
-		  && (last_die->tag == DW_TAG_class_type
-		      || last_die->tag == DW_TAG_interface_type
-		      || last_die->tag == DW_TAG_structure_type
-		      || last_die->tag == DW_TAG_union_type))
-	      || ((cu->language == language_ada
-		   || cu->language == language_fortran)
-		  && (last_die->tag == DW_TAG_subprogram
-		      || last_die->tag == DW_TAG_lexical_block))))
-	{
-	  nesting_level++;
-	  parent_die = last_die;
-	  continue;
-	}
-
-      /* Otherwise we skip to the next sibling, if any.  */
-      info_ptr = locate_pdi_sibling (reader, last_die, info_ptr);
-
-      /* Back to the top, do it again.  */
-    }
-}
-
-partial_die_info::partial_die_info (sect_offset sect_off_,
-				    struct abbrev_info *abbrev)
-  : partial_die_info (sect_off_, abbrev->tag, abbrev->has_children)
-{
-}
-
-/* Read a minimal amount of information into the minimal die structure.
-   INFO_PTR should point just after the initial uleb128 of a DIE.  */
-
-const gdb_byte *
-partial_die_info::read (const struct die_reader_specs *reader,
-			const struct abbrev_info &abbrev, const gdb_byte *info_ptr)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  unsigned int i;
-  int has_low_pc_attr = 0;
-  int has_high_pc_attr = 0;
-  int high_pc_relative = 0;
-
-  for (i = 0; i < abbrev.num_attrs; ++i)
-    {
-      struct attribute attr;
-
-      info_ptr = read_attribute (reader, &attr, &abbrev.attrs[i], info_ptr);
-
-      /* Store the data if it is of an attribute we want to keep in a
-         partial symbol table.  */
-      switch (attr.name)
-	{
-	case DW_AT_name:
-	  switch (tag)
-	    {
-	    case DW_TAG_compile_unit:
-	    case DW_TAG_partial_unit:
-	    case DW_TAG_type_unit:
-	      /* Compilation units have a DW_AT_name that is a filename, not
-		 a source language identifier.  */
-	    case DW_TAG_enumeration_type:
-	    case DW_TAG_enumerator:
-	      /* These tags always have simple identifiers already; no need
-		 to canonicalize them.  */
-	      name = DW_STRING (&attr);
-	      break;
-	    default:
-	      {
-		struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-		name
-		  = dwarf2_canonicalize_name (DW_STRING (&attr), cu,
-					      &objfile->per_bfd->storage_obstack);
-	      }
-	      break;
-	    }
-	  break;
-	case DW_AT_linkage_name:
-	case DW_AT_MIPS_linkage_name:
-	  /* Note that both forms of linkage name might appear.  We
-	     assume they will be the same, and we only store the last
-	     one we see.  */
-	  linkage_name = DW_STRING (&attr);
-	  break;
-	case DW_AT_low_pc:
-	  has_low_pc_attr = 1;
-	  lowpc = attr_value_as_address (&attr);
-	  break;
-	case DW_AT_high_pc:
-	  has_high_pc_attr = 1;
-	  highpc = attr_value_as_address (&attr);
-	  if (cu->header.version >= 4 && attr_form_is_constant (&attr))
-		high_pc_relative = 1;
-	  break;
-	case DW_AT_location:
-          /* Support the .debug_loc offsets.  */
-          if (attr_form_is_block (&attr))
-            {
-	       d.locdesc = DW_BLOCK (&attr);
-            }
-          else if (attr_form_is_section_offset (&attr))
-            {
-	      dwarf2_complex_location_expr_complaint ();
-            }
-          else
-            {
-	      dwarf2_invalid_attrib_class_complaint ("DW_AT_location",
-						     "partial symbol information");
-            }
-	  break;
-	case DW_AT_external:
-	  is_external = DW_UNSND (&attr);
-	  break;
-	case DW_AT_declaration:
-	  is_declaration = DW_UNSND (&attr);
-	  break;
-	case DW_AT_type:
-	  has_type = 1;
-	  break;
-	case DW_AT_abstract_origin:
-	case DW_AT_specification:
-	case DW_AT_extension:
-	  has_specification = 1;
-	  spec_offset = dwarf2_get_ref_die_offset (&attr);
-	  spec_is_dwz = (attr.form == DW_FORM_GNU_ref_alt
-				   || cu->per_cu->is_dwz);
-	  break;
-	case DW_AT_sibling:
-	  /* Ignore absolute siblings, they might point outside of
-	     the current compile unit.  */
-	  if (attr.form == DW_FORM_ref_addr)
-	    complaint (_("ignoring absolute DW_AT_sibling"));
-	  else
-	    {
-	      const gdb_byte *buffer = reader->buffer;
-	      sect_offset off = dwarf2_get_ref_die_offset (&attr);
-	      const gdb_byte *sibling_ptr = buffer + to_underlying (off);
-
-	      if (sibling_ptr < info_ptr)
-		complaint (_("DW_AT_sibling points backwards"));
-	      else if (sibling_ptr > reader->buffer_end)
-		dwarf2_section_buffer_overflow_complaint (reader->die_section);
-	      else
-		sibling = sibling_ptr;
-	    }
-	  break;
-        case DW_AT_byte_size:
-          has_byte_size = 1;
-          break;
-        case DW_AT_const_value:
-          has_const_value = 1;
-          break;
-	case DW_AT_calling_convention:
-	  /* DWARF doesn't provide a way to identify a program's source-level
-	     entry point.  DW_AT_calling_convention attributes are only meant
-	     to describe functions' calling conventions.
-
-	     However, because it's a necessary piece of information in
-	     Fortran, and before DWARF 4 DW_CC_program was the only
-	     piece of debugging information whose definition refers to
-	     a 'main program' at all, several compilers marked Fortran
-	     main programs with DW_CC_program --- even when those
-	     functions use the standard calling conventions.
-
-	     Although DWARF now specifies a way to provide this
-	     information, we support this practice for backward
-	     compatibility.  */
-	  if (DW_UNSND (&attr) == DW_CC_program
-	      && cu->language == language_fortran)
-	    main_subprogram = 1;
-	  break;
-	case DW_AT_inline:
-	  if (DW_UNSND (&attr) == DW_INL_inlined
-	      || DW_UNSND (&attr) == DW_INL_declared_inlined)
-	    may_be_inlined = 1;
-	  break;
-
-	case DW_AT_import:
-	  if (tag == DW_TAG_imported_unit)
-	    {
-	      d.sect_off = dwarf2_get_ref_die_offset (&attr);
-	      is_dwz = (attr.form == DW_FORM_GNU_ref_alt
-				  || cu->per_cu->is_dwz);
-	    }
-	  break;
-
-	case DW_AT_main_subprogram:
-	  main_subprogram = DW_UNSND (&attr);
-	  break;
-
-	case DW_AT_ranges:
-	  {
-	    /* It would be nice to reuse dwarf2_get_pc_bounds here,
-	       but that requires a full DIE, so instead we just
-	       reimplement it.  */
-	    int need_ranges_base = tag != DW_TAG_compile_unit;
-	    unsigned int ranges_offset = (DW_UNSND (&attr)
-					  + (need_ranges_base
-					     ? cu->ranges_base
-					     : 0));
-
-	    /* Value of the DW_AT_ranges attribute is the offset in the
-	       .debug_ranges section.  */
-	    if (dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, cu,
-				    nullptr))
-	      has_pc_info = 1;
-	  }
-	  break;
-
-	default:
-	  break;
-	}
-    }
-
-  /* For Ada, if both the name and the linkage name appear, we prefer
-     the latter.  This lets "catch exception" work better, regardless
-     of the order in which the name and linkage name were emitted.
-     Really, though, this is just a workaround for the fact that gdb
-     doesn't store both the name and the linkage name.  */
-  if (cu->language == language_ada && linkage_name != nullptr)
-    name = linkage_name;
-
-  if (high_pc_relative)
-    highpc += lowpc;
-
-  if (has_low_pc_attr && has_high_pc_attr)
-    {
-      /* When using the GNU linker, .gnu.linkonce. sections are used to
-	 eliminate duplicate copies of functions and vtables and such.
-	 The linker will arbitrarily choose one and discard the others.
-	 The AT_*_pc values for such functions refer to local labels in
-	 these sections.  If the section from that file was discarded, the
-	 labels are not in the output, so the relocs get a value of 0.
-	 If this is a discarded function, mark the pc bounds as invalid,
-	 so that GDB will ignore it.  */
-      if (lowpc == 0 && !dwarf2_per_objfile->has_section_at_zero)
-	{
-	  struct objfile *objfile = dwarf2_per_objfile->objfile;
-	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-
-	  complaint (_("DW_AT_low_pc %s is zero "
-		       "for DIE at %s [in module %s]"),
-		     paddress (gdbarch, lowpc),
-		     sect_offset_str (sect_off),
-		     objfile_name (objfile));
-	}
-      /* dwarf2_get_pc_bounds has also the strict low < high requirement.  */
-      else if (lowpc >= highpc)
-	{
-	  struct objfile *objfile = dwarf2_per_objfile->objfile;
-	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-
-	  complaint (_("DW_AT_low_pc %s is not < DW_AT_high_pc %s "
-		       "for DIE at %s [in module %s]"),
-		     paddress (gdbarch, lowpc),
-		     paddress (gdbarch, highpc),
-		     sect_offset_str (sect_off),
-		     objfile_name (objfile));
-	}
-      else
-	has_pc_info = 1;
-    }
-
-  return info_ptr;
-}
-
-/* Find a cached partial DIE at OFFSET in CU.  */
-
-struct partial_die_info *
-dwarf2_cu::find_partial_die (sect_offset sect_off)
-{
-  struct partial_die_info *lookup_die = NULL;
-  struct partial_die_info part_die (sect_off);
-
-  lookup_die = ((struct partial_die_info *)
-		htab_find_with_hash (partial_dies, &part_die,
-				     to_underlying (sect_off)));
-
-  return lookup_die;
-}
-
-/* Find a partial DIE at OFFSET, which may or may not be in CU,
-   except in the case of .debug_types DIEs which do not reference
-   outside their CU (they do however referencing other types via
-   DW_FORM_ref_sig8).  */
-
-static const struct cu_partial_die_info
-find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_per_cu_data *per_cu = NULL;
-  struct partial_die_info *pd = NULL;
-
-  if (offset_in_dwz == cu->per_cu->is_dwz
-      && offset_in_cu_p (&cu->header, sect_off))
-    {
-      pd = cu->find_partial_die (sect_off);
-      if (pd != NULL)
-	return { cu, pd };
-      /* We missed recording what we needed.
-	 Load all dies and try again.  */
-      per_cu = cu->per_cu;
-    }
-  else
-    {
-      /* TUs don't reference other CUs/TUs (except via type signatures).  */
-      if (cu->per_cu->is_debug_types)
-	{
-	  error (_("Dwarf Error: Type Unit at offset %s contains"
-		   " external reference to offset %s [in module %s].\n"),
-		 sect_offset_str (cu->header.sect_off), sect_offset_str (sect_off),
-		 bfd_get_filename (objfile->obfd));
-	}
-      per_cu = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz,
-						 dwarf2_per_objfile);
-
-      if (per_cu->cu == NULL || per_cu->cu->partial_dies == NULL)
-	load_partial_comp_unit (per_cu);
-
-      per_cu->cu->last_used = 0;
-      pd = per_cu->cu->find_partial_die (sect_off);
-    }
-
-  /* If we didn't find it, and not all dies have been loaded,
-     load them all and try again.  */
-
-  if (pd == NULL && per_cu->load_all_dies == 0)
-    {
-      per_cu->load_all_dies = 1;
-
-      /* This is nasty.  When we reread the DIEs, somewhere up the call chain
-	 THIS_CU->cu may already be in use.  So we can't just free it and
-	 replace its DIEs with the ones we read in.  Instead, we leave those
-	 DIEs alone (which can still be in use, e.g. in scan_partial_symbols),
-	 and clobber THIS_CU->cu->partial_dies with the hash table for the new
-	 set.  */
-      load_partial_comp_unit (per_cu);
-
-      pd = per_cu->cu->find_partial_die (sect_off);
-    }
-
-  if (pd == NULL)
-    internal_error (__FILE__, __LINE__,
-		    _("could not find partial DIE %s "
-		      "in cache [from module %s]\n"),
-		    sect_offset_str (sect_off), bfd_get_filename (objfile->obfd));
-  return { per_cu->cu, pd };
-}
-
-/* See if we can figure out if the class lives in a namespace.  We do
-   this by looking for a member function; its demangled name will
-   contain namespace info, if there is any.  */
-
-static void
-guess_partial_die_structure_name (struct partial_die_info *struct_pdi,
-				  struct dwarf2_cu *cu)
-{
-  /* NOTE: carlton/2003-10-07: Getting the info this way changes
-     what template types look like, because the demangler
-     frequently doesn't give the same name as the debug info.  We
-     could fix this by only using the demangled name to get the
-     prefix (but see comment in read_structure_type).  */
-
-  struct partial_die_info *real_pdi;
-  struct partial_die_info *child_pdi;
-
-  /* If this DIE (this DIE's specification, if any) has a parent, then
-     we should not do this.  We'll prepend the parent's fully qualified
-     name when we create the partial symbol.  */
-
-  real_pdi = struct_pdi;
-  while (real_pdi->has_specification)
-    {
-      auto res = find_partial_die (real_pdi->spec_offset,
-				   real_pdi->spec_is_dwz, cu);
-      real_pdi = res.pdi;
-      cu = res.cu;
-    }
-
-  if (real_pdi->die_parent != NULL)
-    return;
-
-  for (child_pdi = struct_pdi->die_child;
-       child_pdi != NULL;
-       child_pdi = child_pdi->die_sibling)
-    {
-      if (child_pdi->tag == DW_TAG_subprogram
-	  && child_pdi->linkage_name != NULL)
-	{
-	  char *actual_class_name
-	    = language_class_name_from_physname (cu->language_defn,
-						 child_pdi->linkage_name);
-	  if (actual_class_name != NULL)
-	    {
-	      struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-	      struct_pdi->name
-		= obstack_strdup (&objfile->per_bfd->storage_obstack,
-				  actual_class_name);
-	      xfree (actual_class_name);
-	    }
-	  break;
-	}
-    }
-}
-
-void
-partial_die_info::fixup (struct dwarf2_cu *cu)
-{
-  /* Once we've fixed up a die, there's no point in doing so again.
-     This also avoids a memory leak if we were to call
-     guess_partial_die_structure_name multiple times.  */
-  if (fixup_called)
-    return;
-
-  /* If we found a reference attribute and the DIE has no name, try
-     to find a name in the referred to DIE.  */
-
-  if (name == NULL && has_specification)
-    {
-      struct partial_die_info *spec_die;
-
-      auto res = find_partial_die (spec_offset, spec_is_dwz, cu);
-      spec_die = res.pdi;
-      cu = res.cu;
-
-      spec_die->fixup (cu);
-
-      if (spec_die->name)
-	{
-	  name = spec_die->name;
-
-	  /* Copy DW_AT_external attribute if it is set.  */
-	  if (spec_die->is_external)
-	    is_external = spec_die->is_external;
-	}
-    }
-
-  /* Set default names for some unnamed DIEs.  */
-
-  if (name == NULL && tag == DW_TAG_namespace)
-    name = CP_ANONYMOUS_NAMESPACE_STR;
-
-  /* If there is no parent die to provide a namespace, and there are
-     children, see if we can determine the namespace from their linkage
-     name.  */
-  if (cu->language == language_cplus
-      && !cu->per_cu->dwarf2_per_objfile->types.empty ()
-      && die_parent == NULL
-      && has_children
-      && (tag == DW_TAG_class_type
-	  || tag == DW_TAG_structure_type
-	  || tag == DW_TAG_union_type))
-    guess_partial_die_structure_name (this, cu);
-
-  /* GCC might emit a nameless struct or union that has a linkage
-     name.  See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510.  */
-  if (name == NULL
-      && (tag == DW_TAG_class_type
-	  || tag == DW_TAG_interface_type
-	  || tag == DW_TAG_structure_type
-	  || tag == DW_TAG_union_type)
-      && linkage_name != NULL)
-    {
-      char *demangled;
-
-      demangled = gdb_demangle (linkage_name, DMGL_TYPES);
-      if (demangled)
-	{
-	  const char *base;
-
-	  /* Strip any leading namespaces/classes, keep only the base name.
-	     DW_AT_name for named DIEs does not contain the prefixes.  */
-	  base = strrchr (demangled, ':');
-	  if (base && base > demangled && base[-1] == ':')
-	    base++;
-	  else
-	    base = demangled;
-
-	  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-	  name = obstack_strdup (&objfile->per_bfd->storage_obstack, base);
-	  xfree (demangled);
-	}
-    }
-
-  fixup_called = 1;
-}
-
-/* Read an attribute value described by an attribute form.  */
-
-static const gdb_byte *
-read_attribute_value (const struct die_reader_specs *reader,
-		      struct attribute *attr, unsigned form,
-		      LONGEST implicit_const, const gdb_byte *info_ptr)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  bfd *abfd = reader->abfd;
-  struct comp_unit_head *cu_header = &cu->header;
-  unsigned int bytes_read;
-  struct dwarf_block *blk;
-
-  attr->form = (enum dwarf_form) form;
-  switch (form)
-    {
-    case DW_FORM_ref_addr:
-      if (cu->header.version == 2)
-	DW_UNSND (attr) = read_address (abfd, info_ptr, cu, &bytes_read);
-      else
-	DW_UNSND (attr) = read_offset (abfd, info_ptr,
-				       &cu->header, &bytes_read);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_GNU_ref_alt:
-      DW_UNSND (attr) = read_offset (abfd, info_ptr, &cu->header, &bytes_read);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_addr:
-      DW_ADDR (attr) = read_address (abfd, info_ptr, cu, &bytes_read);
-      DW_ADDR (attr) = gdbarch_adjust_dwarf2_addr (gdbarch, DW_ADDR (attr));
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_block2:
-      blk = dwarf_alloc_block (cu);
-      blk->size = read_2_bytes (abfd, info_ptr);
-      info_ptr += 2;
-      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
-      info_ptr += blk->size;
-      DW_BLOCK (attr) = blk;
-      break;
-    case DW_FORM_block4:
-      blk = dwarf_alloc_block (cu);
-      blk->size = read_4_bytes (abfd, info_ptr);
-      info_ptr += 4;
-      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
-      info_ptr += blk->size;
-      DW_BLOCK (attr) = blk;
-      break;
-    case DW_FORM_data2:
-      DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
-      info_ptr += 2;
-      break;
-    case DW_FORM_data4:
-      DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
-      info_ptr += 4;
-      break;
-    case DW_FORM_data8:
-      DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
-      info_ptr += 8;
-      break;
-    case DW_FORM_data16:
-      blk = dwarf_alloc_block (cu);
-      blk->size = 16;
-      blk->data = read_n_bytes (abfd, info_ptr, 16);
-      info_ptr += 16;
-      DW_BLOCK (attr) = blk;
-      break;
-    case DW_FORM_sec_offset:
-      DW_UNSND (attr) = read_offset (abfd, info_ptr, &cu->header, &bytes_read);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_string:
-      DW_STRING (attr) = read_direct_string (abfd, info_ptr, &bytes_read);
-      DW_STRING_IS_CANONICAL (attr) = 0;
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_strp:
-      if (!cu->per_cu->is_dwz)
-	{
-	  DW_STRING (attr) = read_indirect_string (dwarf2_per_objfile,
-						   abfd, info_ptr, cu_header,
-						   &bytes_read);
-	  DW_STRING_IS_CANONICAL (attr) = 0;
-	  info_ptr += bytes_read;
-	  break;
-	}
-      /* FALLTHROUGH */
-    case DW_FORM_line_strp:
-      if (!cu->per_cu->is_dwz)
-	{
-	  DW_STRING (attr) = read_indirect_line_string (dwarf2_per_objfile,
-							abfd, info_ptr,
-							cu_header, &bytes_read);
-	  DW_STRING_IS_CANONICAL (attr) = 0;
-	  info_ptr += bytes_read;
-	  break;
-	}
-      /* FALLTHROUGH */
-    case DW_FORM_GNU_strp_alt:
-      {
-	struct dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-	LONGEST str_offset = read_offset (abfd, info_ptr, cu_header,
-					  &bytes_read);
-
-	DW_STRING (attr) = read_indirect_string_from_dwz (objfile,
-							  dwz, str_offset);
-	DW_STRING_IS_CANONICAL (attr) = 0;
-	info_ptr += bytes_read;
-      }
-      break;
-    case DW_FORM_exprloc:
-    case DW_FORM_block:
-      blk = dwarf_alloc_block (cu);
-      blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-      info_ptr += bytes_read;
-      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
-      info_ptr += blk->size;
-      DW_BLOCK (attr) = blk;
-      break;
-    case DW_FORM_block1:
-      blk = dwarf_alloc_block (cu);
-      blk->size = read_1_byte (abfd, info_ptr);
-      info_ptr += 1;
-      blk->data = read_n_bytes (abfd, info_ptr, blk->size);
-      info_ptr += blk->size;
-      DW_BLOCK (attr) = blk;
-      break;
-    case DW_FORM_data1:
-      DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
-      info_ptr += 1;
-      break;
-    case DW_FORM_flag:
-      DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
-      info_ptr += 1;
-      break;
-    case DW_FORM_flag_present:
-      DW_UNSND (attr) = 1;
-      break;
-    case DW_FORM_sdata:
-      DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_udata:
-      DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_ref1:
-      DW_UNSND (attr) = (to_underlying (cu->header.sect_off)
-			 + read_1_byte (abfd, info_ptr));
-      info_ptr += 1;
-      break;
-    case DW_FORM_ref2:
-      DW_UNSND (attr) = (to_underlying (cu->header.sect_off)
-			 + read_2_bytes (abfd, info_ptr));
-      info_ptr += 2;
-      break;
-    case DW_FORM_ref4:
-      DW_UNSND (attr) = (to_underlying (cu->header.sect_off)
-			 + read_4_bytes (abfd, info_ptr));
-      info_ptr += 4;
-      break;
-    case DW_FORM_ref8:
-      DW_UNSND (attr) = (to_underlying (cu->header.sect_off)
-			 + read_8_bytes (abfd, info_ptr));
-      info_ptr += 8;
-      break;
-    case DW_FORM_ref_sig8:
-      DW_SIGNATURE (attr) = read_8_bytes (abfd, info_ptr);
-      info_ptr += 8;
-      break;
-    case DW_FORM_ref_udata:
-      DW_UNSND (attr) = (to_underlying (cu->header.sect_off)
-			 + read_unsigned_leb128 (abfd, info_ptr, &bytes_read));
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_indirect:
-      form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-      info_ptr += bytes_read;
-      if (form == DW_FORM_implicit_const)
-	{
-	  implicit_const = read_signed_leb128 (abfd, info_ptr, &bytes_read);
-	  info_ptr += bytes_read;
-	}
-      info_ptr = read_attribute_value (reader, attr, form, implicit_const,
-				       info_ptr);
-      break;
-    case DW_FORM_implicit_const:
-      DW_SND (attr) = implicit_const;
-      break;
-    case DW_FORM_addrx:
-    case DW_FORM_GNU_addr_index:
-      if (reader->dwo_file == NULL)
-	{
-	  /* For now flag a hard error.
-	     Later we can turn this into a complaint.  */
-	  error (_("Dwarf Error: %s found in non-DWO CU [in module %s]"),
-		 dwarf_form_name (form),
-		 bfd_get_filename (abfd));
-	}
-      DW_ADDR (attr) = read_addr_index_from_leb128 (cu, info_ptr, &bytes_read);
-      info_ptr += bytes_read;
-      break;
-    case DW_FORM_strx:
-    case DW_FORM_strx1:
-    case DW_FORM_strx2:
-    case DW_FORM_strx3:
-    case DW_FORM_strx4:
-    case DW_FORM_GNU_str_index:
-      if (reader->dwo_file == NULL)
-	{
-	  /* For now flag a hard error.
-	     Later we can turn this into a complaint if warranted.  */
-	  error (_("Dwarf Error: %s found in non-DWO CU [in module %s]"),
-		 dwarf_form_name (form),
-		 bfd_get_filename (abfd));
-	}
-      {
-	ULONGEST str_index;
-	if (form == DW_FORM_strx1)
-	  {
-	    str_index = read_1_byte (abfd, info_ptr);
-	    info_ptr += 1;
-	  }
-	else if (form == DW_FORM_strx2)
-	  {
-	    str_index = read_2_bytes (abfd, info_ptr);
-	    info_ptr += 2;
-	  }
-	else if (form == DW_FORM_strx3)
-	  {
-	    str_index = read_3_bytes (abfd, info_ptr);
-	    info_ptr += 3;
-	  }
-	else if (form == DW_FORM_strx4)
-	  {
-	    str_index = read_4_bytes (abfd, info_ptr);
-	    info_ptr += 4;
-	  }
-	else
-	  {
-	    str_index = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
-	    info_ptr += bytes_read;
-	  }
-	DW_STRING (attr) = read_str_index (reader, str_index);
-	DW_STRING_IS_CANONICAL (attr) = 0;
-      }
-      break;
-    default:
-      error (_("Dwarf Error: Cannot handle %s in DWARF reader [in module %s]"),
-	     dwarf_form_name (form),
-	     bfd_get_filename (abfd));
-    }
-
-  /* Super hack.  */
-  if (cu->per_cu->is_dwz && attr_form_is_ref (attr))
-    attr->form = DW_FORM_GNU_ref_alt;
-
-  /* We have seen instances where the compiler tried to emit a byte
-     size attribute of -1 which ended up being encoded as an unsigned
-     0xffffffff.  Although 0xffffffff is technically a valid size value,
-     an object of this size seems pretty unlikely so we can relatively
-     safely treat these cases as if the size attribute was invalid and
-     treat them as zero by default.  */
-  if (attr->name == DW_AT_byte_size
-      && form == DW_FORM_data4
-      && DW_UNSND (attr) >= 0xffffffff)
-    {
-      complaint
-        (_("Suspicious DW_AT_byte_size value treated as zero instead of %s"),
-         hex_string (DW_UNSND (attr)));
-      DW_UNSND (attr) = 0;
-    }
-
-  return info_ptr;
-}
-
-/* Read an attribute described by an abbreviated attribute.  */
-
-static const gdb_byte *
-read_attribute (const struct die_reader_specs *reader,
-		struct attribute *attr, struct attr_abbrev *abbrev,
-		const gdb_byte *info_ptr)
-{
-  attr->name = abbrev->name;
-  return read_attribute_value (reader, attr, abbrev->form,
-			       abbrev->implicit_const, info_ptr);
-}
-
-/* Read dwarf information from a buffer.  */
-
-static unsigned int
-read_1_byte (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_8 (abfd, buf);
-}
-
-static int
-read_1_signed_byte (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_signed_8 (abfd, buf);
-}
-
-static unsigned int
-read_2_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_16 (abfd, buf);
-}
-
-static int
-read_2_signed_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_signed_16 (abfd, buf);
-}
-
-static unsigned int
-read_3_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  unsigned int result = 0;
-  for (int i = 0; i < 3; ++i)
-    {
-      unsigned char byte = bfd_get_8 (abfd, buf);
-      buf++;
-      result |= ((unsigned int) byte << (i * 8));
-    }
-  return result;
-}
-
-static unsigned int
-read_4_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_32 (abfd, buf);
-}
-
-static int
-read_4_signed_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_signed_32 (abfd, buf);
-}
-
-static ULONGEST
-read_8_bytes (bfd *abfd, const gdb_byte *buf)
-{
-  return bfd_get_64 (abfd, buf);
-}
-
-static CORE_ADDR
-read_address (bfd *abfd, const gdb_byte *buf, struct dwarf2_cu *cu,
-	      unsigned int *bytes_read)
-{
-  struct comp_unit_head *cu_header = &cu->header;
-  CORE_ADDR retval = 0;
-
-  if (cu_header->signed_addr_p)
-    {
-      switch (cu_header->addr_size)
-	{
-	case 2:
-	  retval = bfd_get_signed_16 (abfd, buf);
-	  break;
-	case 4:
-	  retval = bfd_get_signed_32 (abfd, buf);
-	  break;
-	case 8:
-	  retval = bfd_get_signed_64 (abfd, buf);
-	  break;
-	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("read_address: bad switch, signed [in module %s]"),
-			  bfd_get_filename (abfd));
-	}
-    }
-  else
-    {
-      switch (cu_header->addr_size)
-	{
-	case 2:
-	  retval = bfd_get_16 (abfd, buf);
-	  break;
-	case 4:
-	  retval = bfd_get_32 (abfd, buf);
-	  break;
-	case 8:
-	  retval = bfd_get_64 (abfd, buf);
-	  break;
-	default:
-	  internal_error (__FILE__, __LINE__,
-			  _("read_address: bad switch, "
-			    "unsigned [in module %s]"),
-			  bfd_get_filename (abfd));
-	}
-    }
-
-  *bytes_read = cu_header->addr_size;
-  return retval;
-}
-
-/* Read the initial length from a section.  The (draft) DWARF 3
-   specification allows the initial length to take up either 4 bytes
-   or 12 bytes.  If the first 4 bytes are 0xffffffff, then the next 8
-   bytes describe the length and all offsets will be 8 bytes in length
-   instead of 4.
-
-   An older, non-standard 64-bit format is also handled by this
-   function.  The older format in question stores the initial length
-   as an 8-byte quantity without an escape value.  Lengths greater
-   than 2^32 aren't very common which means that the initial 4 bytes
-   is almost always zero.  Since a length value of zero doesn't make
-   sense for the 32-bit format, this initial zero can be considered to
-   be an escape value which indicates the presence of the older 64-bit
-   format.  As written, the code can't detect (old format) lengths
-   greater than 4GB.  If it becomes necessary to handle lengths
-   somewhat larger than 4GB, we could allow other small values (such
-   as the non-sensical values of 1, 2, and 3) to also be used as
-   escape values indicating the presence of the old format.
-
-   The value returned via bytes_read should be used to increment the
-   relevant pointer after calling read_initial_length().
-
-   [ Note:  read_initial_length() and read_offset() are based on the
-     document entitled "DWARF Debugging Information Format", revision
-     3, draft 8, dated November 19, 2001.  This document was obtained
-     from:
-
-	http://reality.sgiweb.org/davea/dwarf3-draft8-011125.pdf
-
-     This document is only a draft and is subject to change.  (So beware.)
-
-     Details regarding the older, non-standard 64-bit format were
-     determined empirically by examining 64-bit ELF files produced by
-     the SGI toolchain on an IRIX 6.5 machine.
-
-     - Kevin, July 16, 2002
-   ] */
-
-static LONGEST
-read_initial_length (bfd *abfd, const gdb_byte *buf, unsigned int *bytes_read)
-{
-  LONGEST length = bfd_get_32 (abfd, buf);
-
-  if (length == 0xffffffff)
-    {
-      length = bfd_get_64 (abfd, buf + 4);
-      *bytes_read = 12;
-    }
-  else if (length == 0)
-    {
-      /* Handle the (non-standard) 64-bit DWARF2 format used by IRIX.  */
-      length = bfd_get_64 (abfd, buf);
-      *bytes_read = 8;
-    }
-  else
-    {
-      *bytes_read = 4;
-    }
-
-  return length;
-}
-
-/* Cover function for read_initial_length.
-   Returns the length of the object at BUF, and stores the size of the
-   initial length in *BYTES_READ and stores the size that offsets will be in
-   *OFFSET_SIZE.
-   If the initial length size is not equivalent to that specified in
-   CU_HEADER then issue a complaint.
-   This is useful when reading non-comp-unit headers.  */
-
-static LONGEST
-read_checked_initial_length_and_offset (bfd *abfd, const gdb_byte *buf,
-					const struct comp_unit_head *cu_header,
-					unsigned int *bytes_read,
-					unsigned int *offset_size)
-{
-  LONGEST length = read_initial_length (abfd, buf, bytes_read);
-
-  gdb_assert (cu_header->initial_length_size == 4
-	      || cu_header->initial_length_size == 8
-	      || cu_header->initial_length_size == 12);
-
-  if (cu_header->initial_length_size != *bytes_read)
-    complaint (_("intermixed 32-bit and 64-bit DWARF sections"));
-
-  *offset_size = (*bytes_read == 4) ? 4 : 8;
-  return length;
-}
-
-/* Read an offset from the data stream.  The size of the offset is
-   given by cu_header->offset_size.  */
-
-static LONGEST
-read_offset (bfd *abfd, const gdb_byte *buf,
-	     const struct comp_unit_head *cu_header,
-             unsigned int *bytes_read)
-{
-  LONGEST offset = read_offset_1 (abfd, buf, cu_header->offset_size);
-
-  *bytes_read = cu_header->offset_size;
-  return offset;
-}
-
-/* Read an offset from the data stream.  */
-
-static LONGEST
-read_offset_1 (bfd *abfd, const gdb_byte *buf, unsigned int offset_size)
-{
-  LONGEST retval = 0;
-
-  switch (offset_size)
-    {
-    case 4:
-      retval = bfd_get_32 (abfd, buf);
-      break;
-    case 8:
-      retval = bfd_get_64 (abfd, buf);
-      break;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("read_offset_1: bad switch [in module %s]"),
-		      bfd_get_filename (abfd));
-    }
-
-  return retval;
-}
-
-static const gdb_byte *
-read_n_bytes (bfd *abfd, const gdb_byte *buf, unsigned int size)
-{
-  /* If the size of a host char is 8 bits, we can return a pointer
-     to the buffer, otherwise we have to copy the data to a buffer
-     allocated on the temporary obstack.  */
-  gdb_assert (HOST_CHAR_BIT == 8);
-  return buf;
-}
-
-static const char *
-read_direct_string (bfd *abfd, const gdb_byte *buf,
-		    unsigned int *bytes_read_ptr)
-{
-  /* If the size of a host char is 8 bits, we can return a pointer
-     to the string, otherwise we have to copy the string to a buffer
-     allocated on the temporary obstack.  */
-  gdb_assert (HOST_CHAR_BIT == 8);
-  if (*buf == '\0')
-    {
-      *bytes_read_ptr = 1;
-      return NULL;
-    }
-  *bytes_read_ptr = strlen ((const char *) buf) + 1;
-  return (const char *) buf;
-}
-
-/* Return pointer to string at section SECT offset STR_OFFSET with error
-   reporting strings FORM_NAME and SECT_NAME.  */
-
-static const char *
-read_indirect_string_at_offset_from (struct objfile *objfile,
-				     bfd *abfd, LONGEST str_offset,
-				     struct dwarf2_section_info *sect,
-				     const char *form_name,
-				     const char *sect_name)
-{
-  dwarf2_read_section (objfile, sect);
-  if (sect->buffer == NULL)
-    error (_("%s used without %s section [in module %s]"),
-	   form_name, sect_name, bfd_get_filename (abfd));
-  if (str_offset >= sect->size)
-    error (_("%s pointing outside of %s section [in module %s]"),
-	   form_name, sect_name, bfd_get_filename (abfd));
-  gdb_assert (HOST_CHAR_BIT == 8);
-  if (sect->buffer[str_offset] == '\0')
-    return NULL;
-  return (const char *) (sect->buffer + str_offset);
-}
-
-/* Return pointer to string at .debug_str offset STR_OFFSET.  */
-
-static const char *
-read_indirect_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile,
-				bfd *abfd, LONGEST str_offset)
-{
-  return read_indirect_string_at_offset_from (dwarf2_per_objfile->objfile,
-					      abfd, str_offset,
-					      &dwarf2_per_objfile->str,
-					      "DW_FORM_strp", ".debug_str");
-}
-
-/* Return pointer to string at .debug_line_str offset STR_OFFSET.  */
-
-static const char *
-read_indirect_line_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile,
-				     bfd *abfd, LONGEST str_offset)
-{
-  return read_indirect_string_at_offset_from (dwarf2_per_objfile->objfile,
-					      abfd, str_offset,
-					      &dwarf2_per_objfile->line_str,
-					      "DW_FORM_line_strp",
-					      ".debug_line_str");
-}
-
-/* Read a string at offset STR_OFFSET in the .debug_str section from
-   the .dwz file DWZ.  Throw an error if the offset is too large.  If
-   the string consists of a single NUL byte, return NULL; otherwise
-   return a pointer to the string.  */
-
-static const char *
-read_indirect_string_from_dwz (struct objfile *objfile, struct dwz_file *dwz,
-			       LONGEST str_offset)
-{
-  dwarf2_read_section (objfile, &dwz->str);
-
-  if (dwz->str.buffer == NULL)
-    error (_("DW_FORM_GNU_strp_alt used without .debug_str "
-	     "section [in module %s]"),
-	   bfd_get_filename (dwz->dwz_bfd.get ()));
-  if (str_offset >= dwz->str.size)
-    error (_("DW_FORM_GNU_strp_alt pointing outside of "
-	     ".debug_str section [in module %s]"),
-	   bfd_get_filename (dwz->dwz_bfd.get ()));
-  gdb_assert (HOST_CHAR_BIT == 8);
-  if (dwz->str.buffer[str_offset] == '\0')
-    return NULL;
-  return (const char *) (dwz->str.buffer + str_offset);
-}
-
-/* Return pointer to string at .debug_str offset as read from BUF.
-   BUF is assumed to be in a compilation unit described by CU_HEADER.
-   Return *BYTES_READ_PTR count of bytes read from BUF.  */
-
-static const char *
-read_indirect_string (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd,
-		      const gdb_byte *buf,
-		      const struct comp_unit_head *cu_header,
-		      unsigned int *bytes_read_ptr)
-{
-  LONGEST str_offset = read_offset (abfd, buf, cu_header, bytes_read_ptr);
-
-  return read_indirect_string_at_offset (dwarf2_per_objfile, abfd, str_offset);
-}
-
-/* Return pointer to string at .debug_line_str offset as read from BUF.
-   BUF is assumed to be in a compilation unit described by CU_HEADER.
-   Return *BYTES_READ_PTR count of bytes read from BUF.  */
-
-static const char *
-read_indirect_line_string (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			   bfd *abfd, const gdb_byte *buf,
-			   const struct comp_unit_head *cu_header,
-			   unsigned int *bytes_read_ptr)
-{
-  LONGEST str_offset = read_offset (abfd, buf, cu_header, bytes_read_ptr);
-
-  return read_indirect_line_string_at_offset (dwarf2_per_objfile, abfd,
-					      str_offset);
-}
-
-ULONGEST
-read_unsigned_leb128 (bfd *abfd, const gdb_byte *buf,
-			  unsigned int *bytes_read_ptr)
-{
-  ULONGEST result;
-  unsigned int num_read;
-  int shift;
-  unsigned char byte;
-
-  result = 0;
-  shift = 0;
-  num_read = 0;
-  while (1)
-    {
-      byte = bfd_get_8 (abfd, buf);
-      buf++;
-      num_read++;
-      result |= ((ULONGEST) (byte & 127) << shift);
-      if ((byte & 128) == 0)
-	{
-	  break;
-	}
-      shift += 7;
-    }
-  *bytes_read_ptr = num_read;
-  return result;
-}
-
-static LONGEST
-read_signed_leb128 (bfd *abfd, const gdb_byte *buf,
-		    unsigned int *bytes_read_ptr)
-{
-  ULONGEST result;
-  int shift, num_read;
-  unsigned char byte;
-
-  result = 0;
-  shift = 0;
-  num_read = 0;
-  while (1)
-    {
-      byte = bfd_get_8 (abfd, buf);
-      buf++;
-      num_read++;
-      result |= ((ULONGEST) (byte & 127) << shift);
-      shift += 7;
-      if ((byte & 128) == 0)
-	{
-	  break;
-	}
-    }
-  if ((shift < 8 * sizeof (result)) && (byte & 0x40))
-    result |= -(((ULONGEST) 1) << shift);
-  *bytes_read_ptr = num_read;
-  return result;
-}
-
-/* Given index ADDR_INDEX in .debug_addr, fetch the value.
-   ADDR_BASE is the DW_AT_GNU_addr_base attribute or zero.
-   ADDR_SIZE is the size of addresses from the CU header.  */
-
-static CORE_ADDR
-read_addr_index_1 (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		   unsigned int addr_index, ULONGEST addr_base, int addr_size)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  bfd *abfd = objfile->obfd;
-  const gdb_byte *info_ptr;
-
-  dwarf2_read_section (objfile, &dwarf2_per_objfile->addr);
-  if (dwarf2_per_objfile->addr.buffer == NULL)
-    error (_("DW_FORM_addr_index used without .debug_addr section [in module %s]"),
-	   objfile_name (objfile));
-  if (addr_base + addr_index * addr_size >= dwarf2_per_objfile->addr.size)
-    error (_("DW_FORM_addr_index pointing outside of "
-	     ".debug_addr section [in module %s]"),
-	   objfile_name (objfile));
-  info_ptr = (dwarf2_per_objfile->addr.buffer
-	      + addr_base + addr_index * addr_size);
-  if (addr_size == 4)
-    return bfd_get_32 (abfd, info_ptr);
-  else
-    return bfd_get_64 (abfd, info_ptr);
-}
-
-/* Given index ADDR_INDEX in .debug_addr, fetch the value.  */
-
-static CORE_ADDR
-read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index)
-{
-  return read_addr_index_1 (cu->per_cu->dwarf2_per_objfile, addr_index,
-			    cu->addr_base, cu->header.addr_size);
-}
-
-/* Given a pointer to an leb128 value, fetch the value from .debug_addr.  */
-
-static CORE_ADDR
-read_addr_index_from_leb128 (struct dwarf2_cu *cu, const gdb_byte *info_ptr,
-			     unsigned int *bytes_read)
-{
-  bfd *abfd = cu->per_cu->dwarf2_per_objfile->objfile->obfd;
-  unsigned int addr_index = read_unsigned_leb128 (abfd, info_ptr, bytes_read);
-
-  return read_addr_index (cu, addr_index);
-}
-
-/* Data structure to pass results from dwarf2_read_addr_index_reader
-   back to dwarf2_read_addr_index.  */
-
-struct dwarf2_read_addr_index_data
-{
-  ULONGEST addr_base;
-  int addr_size;
-};
-
-/* die_reader_func for dwarf2_read_addr_index.  */
-
-static void
-dwarf2_read_addr_index_reader (const struct die_reader_specs *reader,
-			       const gdb_byte *info_ptr,
-			       struct die_info *comp_unit_die,
-			       int has_children,
-			       void *data)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct dwarf2_read_addr_index_data *aidata =
-    (struct dwarf2_read_addr_index_data *) data;
-
-  aidata->addr_base = cu->addr_base;
-  aidata->addr_size = cu->header.addr_size;
-}
-
-/* Given an index in .debug_addr, fetch the value.
-   NOTE: This can be called during dwarf expression evaluation,
-   long after the debug information has been read, and thus per_cu->cu
-   may no longer exist.  */
-
-CORE_ADDR
-dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu,
-			unsigned int addr_index)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-  struct dwarf2_cu *cu = per_cu->cu;
-  ULONGEST addr_base;
-  int addr_size;
-
-  /* We need addr_base and addr_size.
-     If we don't have PER_CU->cu, we have to get it.
-     Nasty, but the alternative is storing the needed info in PER_CU,
-     which at this point doesn't seem justified: it's not clear how frequently
-     it would get used and it would increase the size of every PER_CU.
-     Entry points like dwarf2_per_cu_addr_size do a similar thing
-     so we're not in uncharted territory here.
-     Alas we need to be a bit more complicated as addr_base is contained
-     in the DIE.
-
-     We don't need to read the entire CU(/TU).
-     We just need the header and top level die.
-
-     IWBN to use the aging mechanism to let us lazily later discard the CU.
-     For now we skip this optimization.  */
-
-  if (cu != NULL)
-    {
-      addr_base = cu->addr_base;
-      addr_size = cu->header.addr_size;
-    }
-  else
-    {
-      struct dwarf2_read_addr_index_data aidata;
-
-      /* Note: We can't use init_cutu_and_read_dies_simple here,
-	 we need addr_base.  */
-      init_cutu_and_read_dies (per_cu, NULL, 0, 0, false,
-			       dwarf2_read_addr_index_reader, &aidata);
-      addr_base = aidata.addr_base;
-      addr_size = aidata.addr_size;
-    }
-
-  return read_addr_index_1 (dwarf2_per_objfile, addr_index, addr_base,
-			    addr_size);
-}
-
-/* Given a DW_FORM_GNU_str_index or DW_FORM_strx, fetch the string.
-   This is only used by the Fission support.  */
-
-static const char *
-read_str_index (const struct die_reader_specs *reader, ULONGEST str_index)
-{
-  struct dwarf2_cu *cu = reader->cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  const char *objf_name = objfile_name (objfile);
-  bfd *abfd = objfile->obfd;
-  struct dwarf2_section_info *str_section = &reader->dwo_file->sections.str;
-  struct dwarf2_section_info *str_offsets_section =
-    &reader->dwo_file->sections.str_offsets;
-  const gdb_byte *info_ptr;
-  ULONGEST str_offset;
-  static const char form_name[] = "DW_FORM_GNU_str_index or DW_FORM_strx";
-
-  dwarf2_read_section (objfile, str_section);
-  dwarf2_read_section (objfile, str_offsets_section);
-  if (str_section->buffer == NULL)
-    error (_("%s used without .debug_str.dwo section"
-	     " in CU at offset %s [in module %s]"),
-	   form_name, sect_offset_str (cu->header.sect_off), objf_name);
-  if (str_offsets_section->buffer == NULL)
-    error (_("%s used without .debug_str_offsets.dwo section"
-	     " in CU at offset %s [in module %s]"),
-	   form_name, sect_offset_str (cu->header.sect_off), objf_name);
-  if (str_index * cu->header.offset_size >= str_offsets_section->size)
-    error (_("%s pointing outside of .debug_str_offsets.dwo"
-	     " section in CU at offset %s [in module %s]"),
-	   form_name, sect_offset_str (cu->header.sect_off), objf_name);
-  info_ptr = (str_offsets_section->buffer
-	      + str_index * cu->header.offset_size);
-  if (cu->header.offset_size == 4)
-    str_offset = bfd_get_32 (abfd, info_ptr);
-  else
-    str_offset = bfd_get_64 (abfd, info_ptr);
-  if (str_offset >= str_section->size)
-    error (_("Offset from %s pointing outside of"
-	     " .debug_str.dwo section in CU at offset %s [in module %s]"),
-	   form_name, sect_offset_str (cu->header.sect_off), objf_name);
-  return (const char *) (str_section->buffer + str_offset);
-}
-
-/* Return the length of an LEB128 number in BUF.  */
-
-static int
-leb128_size (const gdb_byte *buf)
-{
-  const gdb_byte *begin = buf;
-  gdb_byte byte;
-
-  while (1)
-    {
-      byte = *buf++;
-      if ((byte & 128) == 0)
-	return buf - begin;
-    }
-}
-
-static void
-set_cu_language (unsigned int lang, struct dwarf2_cu *cu)
-{
-  switch (lang)
-    {
-    case DW_LANG_C89:
-    case DW_LANG_C99:
-    case DW_LANG_C11:
-    case DW_LANG_C:
-    case DW_LANG_UPC:
-      cu->language = language_c;
-      break;
-    case DW_LANG_Java:
-    case DW_LANG_C_plus_plus:
-    case DW_LANG_C_plus_plus_11:
-    case DW_LANG_C_plus_plus_14:
-      cu->language = language_cplus;
-      break;
-    case DW_LANG_D:
-      cu->language = language_d;
-      break;
-    case DW_LANG_Fortran77:
-    case DW_LANG_Fortran90:
-    case DW_LANG_Fortran95:
-    case DW_LANG_Fortran03:
-    case DW_LANG_Fortran08:
-      cu->language = language_fortran;
-      break;
-    case DW_LANG_Go:
-      cu->language = language_go;
-      break;
-    case DW_LANG_Mips_Assembler:
-      cu->language = language_asm;
-      break;
-    case DW_LANG_Ada83:
-    case DW_LANG_Ada95:
-      cu->language = language_ada;
-      break;
-    case DW_LANG_Modula2:
-      cu->language = language_m2;
-      break;
-    case DW_LANG_Pascal83:
-      cu->language = language_pascal;
-      break;
-    case DW_LANG_ObjC:
-      cu->language = language_objc;
-      break;
-    case DW_LANG_Rust:
-    case DW_LANG_Rust_old:
-      cu->language = language_rust;
-      break;
-    case DW_LANG_Cobol74:
-    case DW_LANG_Cobol85:
-    default:
-      cu->language = language_minimal;
-      break;
-    }
-  cu->language_defn = language_def (cu->language);
-}
-
-/* Return the named attribute or NULL if not there.  */
-
-static struct attribute *
-dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
-{
-  for (;;)
-    {
-      unsigned int i;
-      struct attribute *spec = NULL;
-
-      for (i = 0; i < die->num_attrs; ++i)
-	{
-	  if (die->attrs[i].name == name)
-	    return &die->attrs[i];
-	  if (die->attrs[i].name == DW_AT_specification
-	      || die->attrs[i].name == DW_AT_abstract_origin)
-	    spec = &die->attrs[i];
-	}
-
-      if (!spec)
-	break;
-
-      die = follow_die_ref (die, spec, &cu);
-    }
-
-  return NULL;
-}
-
-/* Return the named attribute or NULL if not there,
-   but do not follow DW_AT_specification, etc.
-   This is for use in contexts where we're reading .debug_types dies.
-   Following DW_AT_specification, DW_AT_abstract_origin will take us
-   back up the chain, and we want to go down.  */
-
-static struct attribute *
-dwarf2_attr_no_follow (struct die_info *die, unsigned int name)
-{
-  unsigned int i;
-
-  for (i = 0; i < die->num_attrs; ++i)
-    if (die->attrs[i].name == name)
-      return &die->attrs[i];
-
-  return NULL;
-}
-
-/* Return the string associated with a string-typed attribute, or NULL if it
-   is either not found or is of an incorrect type.  */
-
-static const char *
-dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-  const char *str = NULL;
-
-  attr = dwarf2_attr (die, name, cu);
-
-  if (attr != NULL)
-    {
-      if (attr->form == DW_FORM_strp || attr->form == DW_FORM_line_strp
-	  || attr->form == DW_FORM_string
-	  || attr->form == DW_FORM_strx
-	  || attr->form == DW_FORM_strx1
-	  || attr->form == DW_FORM_strx2
-	  || attr->form == DW_FORM_strx3
-	  || attr->form == DW_FORM_strx4
-	  || attr->form == DW_FORM_GNU_str_index
-	  || attr->form == DW_FORM_GNU_strp_alt)
-	str = DW_STRING (attr);
-      else
-        complaint (_("string type expected for attribute %s for "
-		     "DIE at %s in module %s"),
-		   dwarf_attr_name (name), sect_offset_str (die->sect_off),
-		   objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-    }
-
-  return str;
-}
-
-/* Return the dwo name or NULL if not present. If present, it is in either
-   DW_AT_GNU_dwo_name or DW_AT_dwo_name attribute.  */
-static const char *
-dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu)
-{
-  const char *dwo_name = dwarf2_string_attr (die, DW_AT_GNU_dwo_name, cu);
-  if (dwo_name == nullptr)
-    dwo_name = dwarf2_string_attr (die, DW_AT_dwo_name, cu);
-  return dwo_name;
-}
-
-/* Return non-zero iff the attribute NAME is defined for the given DIE,
-   and holds a non-zero value.  This function should only be used for
-   DW_FORM_flag or DW_FORM_flag_present attributes.  */
-
-static int
-dwarf2_flag_true_p (struct die_info *die, unsigned name, struct dwarf2_cu *cu)
-{
-  struct attribute *attr = dwarf2_attr (die, name, cu);
-
-  return (attr && DW_UNSND (attr));
-}
-
-static int
-die_is_declaration (struct die_info *die, struct dwarf2_cu *cu)
-{
-  /* A DIE is a declaration if it has a DW_AT_declaration attribute
-     which value is non-zero.  However, we have to be careful with
-     DIEs having a DW_AT_specification attribute, because dwarf2_attr()
-     (via dwarf2_flag_true_p) follows this attribute.  So we may
-     end up accidently finding a declaration attribute that belongs
-     to a different DIE referenced by the specification attribute,
-     even though the given DIE does not have a declaration attribute.  */
-  return (dwarf2_flag_true_p (die, DW_AT_declaration, cu)
-	  && dwarf2_attr (die, DW_AT_specification, cu) == NULL);
-}
-
-/* Return the die giving the specification for DIE, if there is
-   one.  *SPEC_CU is the CU containing DIE on input, and the CU
-   containing the return value on output.  If there is no
-   specification, but there is an abstract origin, that is
-   returned.  */
-
-static struct die_info *
-die_specification (struct die_info *die, struct dwarf2_cu **spec_cu)
-{
-  struct attribute *spec_attr = dwarf2_attr (die, DW_AT_specification,
-					     *spec_cu);
-
-  if (spec_attr == NULL)
-    spec_attr = dwarf2_attr (die, DW_AT_abstract_origin, *spec_cu);
-
-  if (spec_attr == NULL)
-    return NULL;
-  else
-    return follow_die_ref (die, spec_attr, spec_cu);
-}
-
-/* Stub for free_line_header to match void * callback types.  */
-
-static void
-free_line_header_voidp (void *arg)
-{
-  struct line_header *lh = (struct line_header *) arg;
-
-  delete lh;
-}
-
-void
-line_header::add_include_dir (const char *include_dir)
-{
-  if (dwarf_line_debug >= 2)
-    {
-      size_t new_size;
-      if (version >= 5)
-        new_size = m_include_dirs.size ();
-      else
-        new_size = m_include_dirs.size () + 1;
-      fprintf_unfiltered (gdb_stdlog, "Adding dir %zu: %s\n",
-			  new_size, include_dir);
-    }
-  m_include_dirs.push_back (include_dir);
-}
-
-void
-line_header::add_file_name (const char *name,
-			    dir_index d_index,
-			    unsigned int mod_time,
-			    unsigned int length)
-{
-  if (dwarf_line_debug >= 2)
-    {
-      size_t new_size;
-      if (version >= 5)
-        new_size = file_names_size ();
-      else
-        new_size = file_names_size () + 1;
-      fprintf_unfiltered (gdb_stdlog, "Adding file %zu: %s\n",
-			  new_size, name);
-    }
-  m_file_names.emplace_back (name, d_index, mod_time, length);
-}
-
-/* A convenience function to find the proper .debug_line section for a CU.  */
-
-static struct dwarf2_section_info *
-get_debug_line_section (struct dwarf2_cu *cu)
-{
-  struct dwarf2_section_info *section;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-
-  /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the
-     DWO file.  */
-  if (cu->dwo_unit && cu->per_cu->is_debug_types)
-    section = &cu->dwo_unit->dwo_file->sections.line;
-  else if (cu->per_cu->is_dwz)
-    {
-      struct dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-
-      section = &dwz->line;
-    }
-  else
-    section = &dwarf2_per_objfile->line;
-
-  return section;
-}
-
-/* Read directory or file name entry format, starting with byte of
-   format count entries, ULEB128 pairs of entry formats, ULEB128 of
-   entries count and the entries themselves in the described entry
-   format.  */
-
-static void
-read_formatted_entries (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			bfd *abfd, const gdb_byte **bufp,
-			struct line_header *lh,
-			const struct comp_unit_head *cu_header,
-			void (*callback) (struct line_header *lh,
-					  const char *name,
-					  dir_index d_index,
-					  unsigned int mod_time,
-					  unsigned int length))
-{
-  gdb_byte format_count, formati;
-  ULONGEST data_count, datai;
-  const gdb_byte *buf = *bufp;
-  const gdb_byte *format_header_data;
-  unsigned int bytes_read;
-
-  format_count = read_1_byte (abfd, buf);
-  buf += 1;
-  format_header_data = buf;
-  for (formati = 0; formati < format_count; formati++)
-    {
-      read_unsigned_leb128 (abfd, buf, &bytes_read);
-      buf += bytes_read;
-      read_unsigned_leb128 (abfd, buf, &bytes_read);
-      buf += bytes_read;
-    }
-
-  data_count = read_unsigned_leb128 (abfd, buf, &bytes_read);
-  buf += bytes_read;
-  for (datai = 0; datai < data_count; datai++)
-    {
-      const gdb_byte *format = format_header_data;
-      struct file_entry fe;
-
-      for (formati = 0; formati < format_count; formati++)
-	{
-	  ULONGEST content_type = read_unsigned_leb128 (abfd, format, &bytes_read);
-	  format += bytes_read;
-
-	  ULONGEST form  = read_unsigned_leb128 (abfd, format, &bytes_read);
-	  format += bytes_read;
-
-	  gdb::optional<const char *> string;
-	  gdb::optional<unsigned int> uint;
-
-	  switch (form)
-	    {
-	    case DW_FORM_string:
-	      string.emplace (read_direct_string (abfd, buf, &bytes_read));
-	      buf += bytes_read;
-	      break;
-
-	    case DW_FORM_line_strp:
-	      string.emplace (read_indirect_line_string (dwarf2_per_objfile,
-							 abfd, buf,
-							 cu_header,
-							 &bytes_read));
-	      buf += bytes_read;
-	      break;
-
-	    case DW_FORM_data1:
-	      uint.emplace (read_1_byte (abfd, buf));
-	      buf += 1;
-	      break;
-
-	    case DW_FORM_data2:
-	      uint.emplace (read_2_bytes (abfd, buf));
-	      buf += 2;
-	      break;
-
-	    case DW_FORM_data4:
-	      uint.emplace (read_4_bytes (abfd, buf));
-	      buf += 4;
-	      break;
-
-	    case DW_FORM_data8:
-	      uint.emplace (read_8_bytes (abfd, buf));
-	      buf += 8;
-	      break;
-
-	    case DW_FORM_data16:
-	      /*  This is used for MD5, but file_entry does not record MD5s. */
-	      buf += 16;
-	      break;
-
-	    case DW_FORM_udata:
-	      uint.emplace (read_unsigned_leb128 (abfd, buf, &bytes_read));
-	      buf += bytes_read;
-	      break;
-
-	    case DW_FORM_block:
-	      /* It is valid only for DW_LNCT_timestamp which is ignored by
-		 current GDB.  */
-	      break;
-	    }
-
-	  switch (content_type)
-	    {
-	    case DW_LNCT_path:
-	      if (string.has_value ())
-		fe.name = *string;
-	      break;
-	    case DW_LNCT_directory_index:
-	      if (uint.has_value ())
-		fe.d_index = (dir_index) *uint;
-	      break;
-	    case DW_LNCT_timestamp:
-	      if (uint.has_value ())
-		fe.mod_time = *uint;
-	      break;
-	    case DW_LNCT_size:
-	      if (uint.has_value ())
-		fe.length = *uint;
-	      break;
-	    case DW_LNCT_MD5:
-	      break;
-	    default:
-	      complaint (_("Unknown format content type %s"),
-			 pulongest (content_type));
-	    }
-	}
-
-      callback (lh, fe.name, fe.d_index, fe.mod_time, fe.length);
-    }
-
-  *bufp = buf;
-}
-
-/* Read the statement program header starting at OFFSET in
-   .debug_line, or .debug_line.dwo.  Return a pointer
-   to a struct line_header, allocated using xmalloc.
-   Returns NULL if there is a problem reading the header, e.g., if it
-   has a version we don't understand.
-
-   NOTE: the strings in the include directory and file name tables of
-   the returned object point into the dwarf line section buffer,
-   and must not be freed.  */
-
-static line_header_up
-dwarf_decode_line_header (sect_offset sect_off, struct dwarf2_cu *cu)
-{
-  const gdb_byte *line_ptr;
-  unsigned int bytes_read, offset_size;
-  int i;
-  const char *cur_dir, *cur_file;
-  struct dwarf2_section_info *section;
-  bfd *abfd;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-
-  section = get_debug_line_section (cu);
-  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
-  if (section->buffer == NULL)
-    {
-      if (cu->dwo_unit && cu->per_cu->is_debug_types)
-	complaint (_("missing .debug_line.dwo section"));
-      else
-	complaint (_("missing .debug_line section"));
-      return 0;
-    }
-
-  /* We can't do this until we know the section is non-empty.
-     Only then do we know we have such a section.  */
-  abfd = get_section_bfd_owner (section);
-
-  /* Make sure that at least there's room for the total_length field.
-     That could be 12 bytes long, but we're just going to fudge that.  */
-  if (to_underlying (sect_off) + 4 >= section->size)
-    {
-      dwarf2_statement_list_fits_in_line_number_section_complaint ();
-      return 0;
-    }
-
-  line_header_up lh (new line_header ());
-
-  lh->sect_off = sect_off;
-  lh->offset_in_dwz = cu->per_cu->is_dwz;
-
-  line_ptr = section->buffer + to_underlying (sect_off);
-
-  /* Read in the header.  */
-  lh->total_length =
-    read_checked_initial_length_and_offset (abfd, line_ptr, &cu->header,
-					    &bytes_read, &offset_size);
-  line_ptr += bytes_read;
-
-  const gdb_byte *start_here = line_ptr;
-
-  if (line_ptr + lh->total_length > (section->buffer + section->size))
-    {
-      dwarf2_statement_list_fits_in_line_number_section_complaint ();
-      return 0;
-    }
-  lh->statement_program_end = start_here + lh->total_length;
-  lh->version = read_2_bytes (abfd, line_ptr);
-  line_ptr += 2;
-  if (lh->version > 5)
-    {
-      /* This is a version we don't understand.  The format could have
-	 changed in ways we don't handle properly so just punt.  */
-      complaint (_("unsupported version in .debug_line section"));
-      return NULL;
-    }
-  if (lh->version >= 5)
-    {
-      gdb_byte segment_selector_size;
-
-      /* Skip address size.  */
-      read_1_byte (abfd, line_ptr);
-      line_ptr += 1;
-
-      segment_selector_size = read_1_byte (abfd, line_ptr);
-      line_ptr += 1;
-      if (segment_selector_size != 0)
-	{
-	  complaint (_("unsupported segment selector size %u "
-		       "in .debug_line section"),
-		     segment_selector_size);
-	  return NULL;
-	}
-    }
-  lh->header_length = read_offset_1 (abfd, line_ptr, offset_size);
-  line_ptr += offset_size;
-  lh->statement_program_start = line_ptr + lh->header_length;
-  lh->minimum_instruction_length = read_1_byte (abfd, line_ptr);
-  line_ptr += 1;
-  if (lh->version >= 4)
-    {
-      lh->maximum_ops_per_instruction = read_1_byte (abfd, line_ptr);
-      line_ptr += 1;
-    }
-  else
-    lh->maximum_ops_per_instruction = 1;
-
-  if (lh->maximum_ops_per_instruction == 0)
-    {
-      lh->maximum_ops_per_instruction = 1;
-      complaint (_("invalid maximum_ops_per_instruction "
-		   "in `.debug_line' section"));
-    }
-
-  lh->default_is_stmt = read_1_byte (abfd, line_ptr);
-  line_ptr += 1;
-  lh->line_base = read_1_signed_byte (abfd, line_ptr);
-  line_ptr += 1;
-  lh->line_range = read_1_byte (abfd, line_ptr);
-  line_ptr += 1;
-  lh->opcode_base = read_1_byte (abfd, line_ptr);
-  line_ptr += 1;
-  lh->standard_opcode_lengths.reset (new unsigned char[lh->opcode_base]);
-
-  lh->standard_opcode_lengths[0] = 1;  /* This should never be used anyway.  */
-  for (i = 1; i < lh->opcode_base; ++i)
-    {
-      lh->standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
-      line_ptr += 1;
-    }
-
-  if (lh->version >= 5)
-    {
-      /* Read directory table.  */
-      read_formatted_entries (dwarf2_per_objfile, abfd, &line_ptr, lh.get (),
-			      &cu->header,
-			      [] (struct line_header *header, const char *name,
-				  dir_index d_index, unsigned int mod_time,
-				  unsigned int length)
-	{
-	  header->add_include_dir (name);
-	});
-
-      /* Read file name table.  */
-      read_formatted_entries (dwarf2_per_objfile, abfd, &line_ptr, lh.get (),
-			      &cu->header,
-			      [] (struct line_header *header, const char *name,
-				  dir_index d_index, unsigned int mod_time,
-				  unsigned int length)
-	{
-	  header->add_file_name (name, d_index, mod_time, length);
-	});
-    }
-  else
-    {
-      /* Read directory table.  */
-      while ((cur_dir = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL)
-	{
-	  line_ptr += bytes_read;
-	  lh->add_include_dir (cur_dir);
-	}
-      line_ptr += bytes_read;
-
-      /* Read file name table.  */
-      while ((cur_file = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL)
-	{
-	  unsigned int mod_time, length;
-	  dir_index d_index;
-
-	  line_ptr += bytes_read;
-	  d_index = (dir_index) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-	  line_ptr += bytes_read;
-	  mod_time = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-	  line_ptr += bytes_read;
-	  length = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-	  line_ptr += bytes_read;
-
-	  lh->add_file_name (cur_file, d_index, mod_time, length);
-	}
-      line_ptr += bytes_read;
-    }
-
-  if (line_ptr > (section->buffer + section->size))
-    complaint (_("line number info header doesn't "
-		 "fit in `.debug_line' section"));
-
-  return lh;
-}
-
-/* Subroutine of dwarf_decode_lines to simplify it.
-   Return the file name of the psymtab for the given file_entry.
-   COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown.
-   If space for the result is malloc'd, *NAME_HOLDER will be set.
-   Returns NULL if FILE_INDEX should be ignored, i.e., it is pst->filename.  */
-
-static const char *
-psymtab_include_file_name (const struct line_header *lh, const file_entry &fe,
-			   const struct partial_symtab *pst,
-			   const char *comp_dir,
-			   gdb::unique_xmalloc_ptr<char> *name_holder)
-{
-  const char *include_name = fe.name;
-  const char *include_name_to_compare = include_name;
-  const char *pst_filename;
-  int file_is_pst;
-
-  const char *dir_name = fe.include_dir (lh);
-
-  gdb::unique_xmalloc_ptr<char> hold_compare;
-  if (!IS_ABSOLUTE_PATH (include_name)
-      && (dir_name != NULL || comp_dir != NULL))
-    {
-      /* Avoid creating a duplicate psymtab for PST.
-	 We do this by comparing INCLUDE_NAME and PST_FILENAME.
-	 Before we do the comparison, however, we need to account
-	 for DIR_NAME and COMP_DIR.
-	 First prepend dir_name (if non-NULL).  If we still don't
-	 have an absolute path prepend comp_dir (if non-NULL).
-	 However, the directory we record in the include-file's
-	 psymtab does not contain COMP_DIR (to match the
-	 corresponding symtab(s)).
-
-	 Example:
-
-	 bash$ cd /tmp
-	 bash$ gcc -g ./hello.c
-	 include_name = "hello.c"
-	 dir_name = "."
-	 DW_AT_comp_dir = comp_dir = "/tmp"
-	 DW_AT_name = "./hello.c"
-
-      */
-
-      if (dir_name != NULL)
-	{
-	  name_holder->reset (concat (dir_name, SLASH_STRING,
-				      include_name, (char *) NULL));
-	  include_name = name_holder->get ();
-	  include_name_to_compare = include_name;
-	}
-      if (!IS_ABSOLUTE_PATH (include_name) && comp_dir != NULL)
-	{
-	  hold_compare.reset (concat (comp_dir, SLASH_STRING,
-				      include_name, (char *) NULL));
-	  include_name_to_compare = hold_compare.get ();
-	}
-    }
-
-  pst_filename = pst->filename;
-  gdb::unique_xmalloc_ptr<char> copied_name;
-  if (!IS_ABSOLUTE_PATH (pst_filename) && pst->dirname != NULL)
-    {
-      copied_name.reset (concat (pst->dirname, SLASH_STRING,
-				 pst_filename, (char *) NULL));
-      pst_filename = copied_name.get ();
-    }
-
-  file_is_pst = FILENAME_CMP (include_name_to_compare, pst_filename) == 0;
-
-  if (file_is_pst)
-    return NULL;
-  return include_name;
-}
-
-/* State machine to track the state of the line number program.  */
-
-class lnp_state_machine
-{
-public:
-  /* Initialize a machine state for the start of a line number
-     program.  */
-  lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, line_header *lh,
-		     bool record_lines_p);
-
-  file_entry *current_file ()
-  {
-    /* lh->file_names is 0-based, but the file name numbers in the
-       statement program are 1-based.  */
-    return m_line_header->file_name_at (m_file);
-  }
-
-  /* Record the line in the state machine.  END_SEQUENCE is true if
-     we're processing the end of a sequence.  */
-  void record_line (bool end_sequence);
-
-  /* Check ADDRESS is zero and less than UNRELOCATED_LOWPC and if true
-     nop-out rest of the lines in this sequence.  */
-  void check_line_address (struct dwarf2_cu *cu,
-			   const gdb_byte *line_ptr,
-			   CORE_ADDR unrelocated_lowpc, CORE_ADDR address);
-
-  void handle_set_discriminator (unsigned int discriminator)
-  {
-    m_discriminator = discriminator;
-    m_line_has_non_zero_discriminator |= discriminator != 0;
-  }
-
-  /* Handle DW_LNE_set_address.  */
-  void handle_set_address (CORE_ADDR baseaddr, CORE_ADDR address)
-  {
-    m_op_index = 0;
-    address += baseaddr;
-    m_address = gdbarch_adjust_dwarf2_line (m_gdbarch, address, false);
-  }
-
-  /* Handle DW_LNS_advance_pc.  */
-  void handle_advance_pc (CORE_ADDR adjust);
-
-  /* Handle a special opcode.  */
-  void handle_special_opcode (unsigned char op_code);
-
-  /* Handle DW_LNS_advance_line.  */
-  void handle_advance_line (int line_delta)
-  {
-    advance_line (line_delta);
-  }
-
-  /* Handle DW_LNS_set_file.  */
-  void handle_set_file (file_name_index file);
-
-  /* Handle DW_LNS_negate_stmt.  */
-  void handle_negate_stmt ()
-  {
-    m_is_stmt = !m_is_stmt;
-  }
-
-  /* Handle DW_LNS_const_add_pc.  */
-  void handle_const_add_pc ();
-
-  /* Handle DW_LNS_fixed_advance_pc.  */
-  void handle_fixed_advance_pc (CORE_ADDR addr_adj)
-  {
-    m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
-    m_op_index = 0;
-  }
-
-  /* Handle DW_LNS_copy.  */
-  void handle_copy ()
-  {
-    record_line (false);
-    m_discriminator = 0;
-  }
-
-  /* Handle DW_LNE_end_sequence.  */
-  void handle_end_sequence ()
-  {
-    m_currently_recording_lines = true;
-  }
-
-private:
-  /* Advance the line by LINE_DELTA.  */
-  void advance_line (int line_delta)
-  {
-    m_line += line_delta;
-
-    if (line_delta != 0)
-      m_line_has_non_zero_discriminator = m_discriminator != 0;
-  }
-
-  struct dwarf2_cu *m_cu;
-
-  gdbarch *m_gdbarch;
-
-  /* True if we're recording lines.
-     Otherwise we're building partial symtabs and are just interested in
-     finding include files mentioned by the line number program.  */
-  bool m_record_lines_p;
-
-  /* The line number header.  */
-  line_header *m_line_header;
-
-  /* These are part of the standard DWARF line number state machine,
-     and initialized according to the DWARF spec.  */
-
-  unsigned char m_op_index = 0;
-  /* The line table index of the current file.  */
-  file_name_index m_file = 1;
-  unsigned int m_line = 1;
-
-  /* These are initialized in the constructor.  */
-
-  CORE_ADDR m_address;
-  bool m_is_stmt;
-  unsigned int m_discriminator;
-
-  /* Additional bits of state we need to track.  */
-
-  /* The last file that we called dwarf2_start_subfile for.
-     This is only used for TLLs.  */
-  unsigned int m_last_file = 0;
-  /* The last file a line number was recorded for.  */
-  struct subfile *m_last_subfile = NULL;
-
-  /* When true, record the lines we decode.  */
-  bool m_currently_recording_lines = false;
-
-  /* The last line number that was recorded, used to coalesce
-     consecutive entries for the same line.  This can happen, for
-     example, when discriminators are present.  PR 17276.  */
-  unsigned int m_last_line = 0;
-  bool m_line_has_non_zero_discriminator = false;
-};
-
-void
-lnp_state_machine::handle_advance_pc (CORE_ADDR adjust)
-{
-  CORE_ADDR addr_adj = (((m_op_index + adjust)
-			 / m_line_header->maximum_ops_per_instruction)
-			* m_line_header->minimum_instruction_length);
-  m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
-  m_op_index = ((m_op_index + adjust)
-		% m_line_header->maximum_ops_per_instruction);
-}
-
-void
-lnp_state_machine::handle_special_opcode (unsigned char op_code)
-{
-  unsigned char adj_opcode = op_code - m_line_header->opcode_base;
-  CORE_ADDR addr_adj = (((m_op_index
-			  + (adj_opcode / m_line_header->line_range))
-			 / m_line_header->maximum_ops_per_instruction)
-			* m_line_header->minimum_instruction_length);
-  m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
-  m_op_index = ((m_op_index + (adj_opcode / m_line_header->line_range))
-		% m_line_header->maximum_ops_per_instruction);
-
-  int line_delta = (m_line_header->line_base
-		    + (adj_opcode % m_line_header->line_range));
-  advance_line (line_delta);
-  record_line (false);
-  m_discriminator = 0;
-}
-
-void
-lnp_state_machine::handle_set_file (file_name_index file)
-{
-  m_file = file;
-
-  const file_entry *fe = current_file ();
-  if (fe == NULL)
-    dwarf2_debug_line_missing_file_complaint ();
-  else if (m_record_lines_p)
-    {
-      const char *dir = fe->include_dir (m_line_header);
-
-      m_last_subfile = m_cu->get_builder ()->get_current_subfile ();
-      m_line_has_non_zero_discriminator = m_discriminator != 0;
-      dwarf2_start_subfile (m_cu, fe->name, dir);
-    }
-}
-
-void
-lnp_state_machine::handle_const_add_pc ()
-{
-  CORE_ADDR adjust
-    = (255 - m_line_header->opcode_base) / m_line_header->line_range;
-
-  CORE_ADDR addr_adj
-    = (((m_op_index + adjust)
-	/ m_line_header->maximum_ops_per_instruction)
-       * m_line_header->minimum_instruction_length);
-
-  m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true);
-  m_op_index = ((m_op_index + adjust)
-		% m_line_header->maximum_ops_per_instruction);
-}
-
-/* Return non-zero if we should add LINE to the line number table.
-   LINE is the line to add, LAST_LINE is the last line that was added,
-   LAST_SUBFILE is the subfile for LAST_LINE.
-   LINE_HAS_NON_ZERO_DISCRIMINATOR is non-zero if LINE has ever
-   had a non-zero discriminator.
-
-   We have to be careful in the presence of discriminators.
-   E.g., for this line:
-
-     for (i = 0; i < 100000; i++);
-
-   clang can emit four line number entries for that one line,
-   each with a different discriminator.
-   See gdb.dwarf2/dw2-single-line-discriminators.exp for an example.
-
-   However, we want gdb to coalesce all four entries into one.
-   Otherwise the user could stepi into the middle of the line and
-   gdb would get confused about whether the pc really was in the
-   middle of the line.
-
-   Things are further complicated by the fact that two consecutive
-   line number entries for the same line is a heuristic used by gcc
-   to denote the end of the prologue.  So we can't just discard duplicate
-   entries, we have to be selective about it.  The heuristic we use is
-   that we only collapse consecutive entries for the same line if at least
-   one of those entries has a non-zero discriminator.  PR 17276.
-
-   Note: Addresses in the line number state machine can never go backwards
-   within one sequence, thus this coalescing is ok.  */
-
-static int
-dwarf_record_line_p (struct dwarf2_cu *cu,
-		     unsigned int line, unsigned int last_line,
-		     int line_has_non_zero_discriminator,
-		     struct subfile *last_subfile)
-{
-  if (cu->get_builder ()->get_current_subfile () != last_subfile)
-    return 1;
-  if (line != last_line)
-    return 1;
-  /* Same line for the same file that we've seen already.
-     As a last check, for pr 17276, only record the line if the line
-     has never had a non-zero discriminator.  */
-  if (!line_has_non_zero_discriminator)
-    return 1;
-  return 0;
-}
-
-/* Use the CU's builder to record line number LINE beginning at
-   address ADDRESS in the line table of subfile SUBFILE.  */
-
-static void
-dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile,
-		     unsigned int line, CORE_ADDR address,
-		     struct dwarf2_cu *cu)
-{
-  CORE_ADDR addr = gdbarch_addr_bits_remove (gdbarch, address);
-
-  if (dwarf_line_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Recording line %u, file %s, address %s\n",
-			  line, lbasename (subfile->name),
-			  paddress (gdbarch, address));
-    }
-
-  if (cu != nullptr)
-    cu->get_builder ()->record_line (subfile, line, addr);
-}
-
-/* Subroutine of dwarf_decode_lines_1 to simplify it.
-   Mark the end of a set of line number records.
-   The arguments are the same as for dwarf_record_line_1.
-   If SUBFILE is NULL the request is ignored.  */
-
-static void
-dwarf_finish_line (struct gdbarch *gdbarch, struct subfile *subfile,
-		   CORE_ADDR address, struct dwarf2_cu *cu)
-{
-  if (subfile == NULL)
-    return;
-
-  if (dwarf_line_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Finishing current line, file %s, address %s\n",
-			  lbasename (subfile->name),
-			  paddress (gdbarch, address));
-    }
-
-  dwarf_record_line_1 (gdbarch, subfile, 0, address, cu);
-}
-
-void
-lnp_state_machine::record_line (bool end_sequence)
-{
-  if (dwarf_line_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "Processing actual line %u: file %u,"
-			  " address %s, is_stmt %u, discrim %u\n",
-			  m_line, m_file,
-			  paddress (m_gdbarch, m_address),
-			  m_is_stmt, m_discriminator);
-    }
-
-  file_entry *fe = current_file ();
-
-  if (fe == NULL)
-    dwarf2_debug_line_missing_file_complaint ();
-  /* For now we ignore lines not starting on an instruction boundary.
-     But not when processing end_sequence for compatibility with the
-     previous version of the code.  */
-  else if (m_op_index == 0 || end_sequence)
-    {
-      fe->included_p = 1;
-      if (m_record_lines_p && (producer_is_codewarrior (m_cu) || m_is_stmt))
-	{
-	  if (m_last_subfile != m_cu->get_builder ()->get_current_subfile ()
-	      || end_sequence)
-	    {
-	      dwarf_finish_line (m_gdbarch, m_last_subfile, m_address,
-				 m_currently_recording_lines ? m_cu : nullptr);
-	    }
-
-	  if (!end_sequence)
-	    {
-	      if (dwarf_record_line_p (m_cu, m_line, m_last_line,
-				       m_line_has_non_zero_discriminator,
-				       m_last_subfile))
-		{
-		  buildsym_compunit *builder = m_cu->get_builder ();
-		  dwarf_record_line_1 (m_gdbarch,
-				       builder->get_current_subfile (),
-				       m_line, m_address,
-				       m_currently_recording_lines ? m_cu : nullptr);
-		}
-	      m_last_subfile = m_cu->get_builder ()->get_current_subfile ();
-	      m_last_line = m_line;
-	    }
-	}
-    }
-}
-
-lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch,
-				      line_header *lh, bool record_lines_p)
-{
-  m_cu = cu;
-  m_gdbarch = arch;
-  m_record_lines_p = record_lines_p;
-  m_line_header = lh;
-
-  m_currently_recording_lines = true;
-
-  /* Call `gdbarch_adjust_dwarf2_line' on the initial 0 address as if there
-     was a line entry for it so that the backend has a chance to adjust it
-     and also record it in case it needs it.  This is currently used by MIPS
-     code, cf. `mips_adjust_dwarf2_line'.  */
-  m_address = gdbarch_adjust_dwarf2_line (arch, 0, 0);
-  m_is_stmt = lh->default_is_stmt;
-  m_discriminator = 0;
-}
-
-void
-lnp_state_machine::check_line_address (struct dwarf2_cu *cu,
-				       const gdb_byte *line_ptr,
-				       CORE_ADDR unrelocated_lowpc, CORE_ADDR address)
-{
-  /* If ADDRESS < UNRELOCATED_LOWPC then it's not a usable value, it's outside
-     the pc range of the CU.  However, we restrict the test to only ADDRESS
-     values of zero to preserve GDB's previous behaviour which is to handle
-     the specific case of a function being GC'd by the linker.  */
-
-  if (address == 0 && address < unrelocated_lowpc)
-    {
-      /* This line table is for a function which has been
-	 GCd by the linker.  Ignore it.  PR gdb/12528 */
-
-      struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-      long line_offset = line_ptr - get_debug_line_section (cu)->buffer;
-
-      complaint (_(".debug_line address at offset 0x%lx is 0 [in module %s]"),
-		 line_offset, objfile_name (objfile));
-      m_currently_recording_lines = false;
-      /* Note: m_currently_recording_lines is left as false until we see
-	 DW_LNE_end_sequence.  */
-    }
-}
-
-/* Subroutine of dwarf_decode_lines to simplify it.
-   Process the line number information in LH.
-   If DECODE_FOR_PST_P is non-zero, all we do is process the line number
-   program in order to set included_p for every referenced header.  */
-
-static void
-dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu,
-		      const int decode_for_pst_p, CORE_ADDR lowpc)
-{
-  const gdb_byte *line_ptr, *extended_end;
-  const gdb_byte *line_end;
-  unsigned int bytes_read, extended_len;
-  unsigned char op_code, extended_op;
-  CORE_ADDR baseaddr;
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  bfd *abfd = objfile->obfd;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  /* True if we're recording line info (as opposed to building partial
-     symtabs and just interested in finding include files mentioned by
-     the line number program).  */
-  bool record_lines_p = !decode_for_pst_p;
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  line_ptr = lh->statement_program_start;
-  line_end = lh->statement_program_end;
-
-  /* Read the statement sequences until there's nothing left.  */
-  while (line_ptr < line_end)
-    {
-      /* The DWARF line number program state machine.  Reset the state
-	 machine at the start of each sequence.  */
-      lnp_state_machine state_machine (cu, gdbarch, lh, record_lines_p);
-      bool end_sequence = false;
-
-      if (record_lines_p)
-	{
-	  /* Start a subfile for the current file of the state
-	     machine.  */
-	  const file_entry *fe = state_machine.current_file ();
-
-	  if (fe != NULL)
-	    dwarf2_start_subfile (cu, fe->name, fe->include_dir (lh));
-	}
-
-      /* Decode the table.  */
-      while (line_ptr < line_end && !end_sequence)
-	{
-	  op_code = read_1_byte (abfd, line_ptr);
-	  line_ptr += 1;
-
-	  if (op_code >= lh->opcode_base)
-	    {
-	      /* Special opcode.  */
-	      state_machine.handle_special_opcode (op_code);
-	    }
-	  else switch (op_code)
-	    {
-	    case DW_LNS_extended_op:
-	      extended_len = read_unsigned_leb128 (abfd, line_ptr,
-						   &bytes_read);
-	      line_ptr += bytes_read;
-	      extended_end = line_ptr + extended_len;
-	      extended_op = read_1_byte (abfd, line_ptr);
-	      line_ptr += 1;
-	      switch (extended_op)
-		{
-		case DW_LNE_end_sequence:
-		  state_machine.handle_end_sequence ();
-		  end_sequence = true;
-		  break;
-		case DW_LNE_set_address:
-		  {
-		    CORE_ADDR address
-		      = read_address (abfd, line_ptr, cu, &bytes_read);
-		    line_ptr += bytes_read;
-
-		    state_machine.check_line_address (cu, line_ptr,
-						      lowpc - baseaddr, address);
-		    state_machine.handle_set_address (baseaddr, address);
-		  }
-		  break;
-		case DW_LNE_define_file:
-                  {
-                    const char *cur_file;
-		    unsigned int mod_time, length;
-		    dir_index dindex;
-
-                    cur_file = read_direct_string (abfd, line_ptr,
-						   &bytes_read);
-                    line_ptr += bytes_read;
-                    dindex = (dir_index)
-                      read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-                    line_ptr += bytes_read;
-                    mod_time =
-                      read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-                    line_ptr += bytes_read;
-                    length =
-                      read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-                    line_ptr += bytes_read;
-                    lh->add_file_name (cur_file, dindex, mod_time, length);
-                  }
-		  break;
-		case DW_LNE_set_discriminator:
-		  {
-		    /* The discriminator is not interesting to the
-		       debugger; just ignore it.  We still need to
-		       check its value though:
-		       if there are consecutive entries for the same
-		       (non-prologue) line we want to coalesce them.
-		       PR 17276.  */
-		    unsigned int discr
-		      = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-		    line_ptr += bytes_read;
-
-		    state_machine.handle_set_discriminator (discr);
-		  }
-		  break;
-		default:
-		  complaint (_("mangled .debug_line section"));
-		  return;
-		}
-	      /* Make sure that we parsed the extended op correctly.  If e.g.
-		 we expected a different address size than the producer used,
-		 we may have read the wrong number of bytes.  */
-	      if (line_ptr != extended_end)
-		{
-		  complaint (_("mangled .debug_line section"));
-		  return;
-		}
-	      break;
-	    case DW_LNS_copy:
-	      state_machine.handle_copy ();
-	      break;
-	    case DW_LNS_advance_pc:
-	      {
-		CORE_ADDR adjust
-		  = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-		line_ptr += bytes_read;
-
-		state_machine.handle_advance_pc (adjust);
-	      }
-	      break;
-	    case DW_LNS_advance_line:
-	      {
-		int line_delta
-		  = read_signed_leb128 (abfd, line_ptr, &bytes_read);
-		line_ptr += bytes_read;
-
-		state_machine.handle_advance_line (line_delta);
-	      }
-	      break;
-	    case DW_LNS_set_file:
-	      {
-		file_name_index file
-		  = (file_name_index) read_unsigned_leb128 (abfd, line_ptr,
-							    &bytes_read);
-		line_ptr += bytes_read;
-
-		state_machine.handle_set_file (file);
-	      }
-	      break;
-	    case DW_LNS_set_column:
-	      (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-	      line_ptr += bytes_read;
-	      break;
-	    case DW_LNS_negate_stmt:
-	      state_machine.handle_negate_stmt ();
-	      break;
-	    case DW_LNS_set_basic_block:
-	      break;
-	    /* Add to the address register of the state machine the
-	       address increment value corresponding to special opcode
-	       255.  I.e., this value is scaled by the minimum
-	       instruction length since special opcode 255 would have
-	       scaled the increment.  */
-	    case DW_LNS_const_add_pc:
-	      state_machine.handle_const_add_pc ();
-	      break;
-	    case DW_LNS_fixed_advance_pc:
-	      {
-		CORE_ADDR addr_adj = read_2_bytes (abfd, line_ptr);
-		line_ptr += 2;
-
-		state_machine.handle_fixed_advance_pc (addr_adj);
-	      }
-	      break;
-	    default:
-	      {
-		/* Unknown standard opcode, ignore it.  */
-		int i;
-
-		for (i = 0; i < lh->standard_opcode_lengths[op_code]; i++)
-		  {
-		    (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
-		    line_ptr += bytes_read;
-		  }
-	      }
-	    }
-	}
-
-      if (!end_sequence)
-	dwarf2_debug_line_missing_end_sequence_complaint ();
-
-      /* We got a DW_LNE_end_sequence (or we ran off the end of the buffer,
-	 in which case we still finish recording the last line).  */
-      state_machine.record_line (true);
-    }
-}
-
-/* Decode the Line Number Program (LNP) for the given line_header
-   structure and CU.  The actual information extracted and the type
-   of structures created from the LNP depends on the value of PST.
-
-   1. If PST is NULL, then this procedure uses the data from the program
-      to create all necessary symbol tables, and their linetables.
-
-   2. If PST is not NULL, this procedure reads the program to determine
-      the list of files included by the unit represented by PST, and
-      builds all the associated partial symbol tables.
-
-   COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown.
-   It is used for relative paths in the line table.
-   NOTE: When processing partial symtabs (pst != NULL),
-   comp_dir == pst->dirname.
-
-   NOTE: It is important that psymtabs have the same file name (via strcmp)
-   as the corresponding symtab.  Since COMP_DIR is not used in the name of the
-   symtab we don't use it in the name of the psymtabs we create.
-   E.g. expand_line_sal requires this when finding psymtabs to expand.
-   A good testcase for this is mb-inline.exp.
-
-   LOWPC is the lowest address in CU (or 0 if not known).
-
-   Boolean DECODE_MAPPING specifies we need to fully decode .debug_line
-   for its PC<->lines mapping information.  Otherwise only the filename
-   table is read in.  */
-
-static void
-dwarf_decode_lines (struct line_header *lh, const char *comp_dir,
-		    struct dwarf2_cu *cu, struct partial_symtab *pst,
-		    CORE_ADDR lowpc, int decode_mapping)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  const int decode_for_pst_p = (pst != NULL);
-
-  if (decode_mapping)
-    dwarf_decode_lines_1 (lh, cu, decode_for_pst_p, lowpc);
-
-  if (decode_for_pst_p)
-    {
-      /* Now that we're done scanning the Line Header Program, we can
-         create the psymtab of each included file.  */
-      for (auto &file_entry : lh->file_names ())
-        if (file_entry.included_p == 1)
-          {
-	    gdb::unique_xmalloc_ptr<char> name_holder;
-	    const char *include_name =
-	      psymtab_include_file_name (lh, file_entry, pst,
-					 comp_dir, &name_holder);
-	    if (include_name != NULL)
-              dwarf2_create_include_psymtab (include_name, pst, objfile);
-          }
-    }
-  else
-    {
-      /* Make sure a symtab is created for every file, even files
-	 which contain only variables (i.e. no code with associated
-	 line numbers).  */
-      buildsym_compunit *builder = cu->get_builder ();
-      struct compunit_symtab *cust = builder->get_compunit_symtab ();
-
-      for (auto &fe : lh->file_names ())
-	{
-	  dwarf2_start_subfile (cu, fe.name, fe.include_dir (lh));
-	  if (builder->get_current_subfile ()->symtab == NULL)
-	    {
-	      builder->get_current_subfile ()->symtab
-		= allocate_symtab (cust,
-				   builder->get_current_subfile ()->name);
-	    }
-	  fe.symtab = builder->get_current_subfile ()->symtab;
-	}
-    }
-}
-
-/* Start a subfile for DWARF.  FILENAME is the name of the file and
-   DIRNAME the name of the source directory which contains FILENAME
-   or NULL if not known.
-   This routine tries to keep line numbers from identical absolute and
-   relative file names in a common subfile.
-
-   Using the `list' example from the GDB testsuite, which resides in
-   /srcdir and compiling it with Irix6.2 cc in /compdir using a filename
-   of /srcdir/list0.c yields the following debugging information for list0.c:
-
-   DW_AT_name:          /srcdir/list0.c
-   DW_AT_comp_dir:      /compdir
-   files.files[0].name: list0.h
-   files.files[0].dir:  /srcdir
-   files.files[1].name: list0.c
-   files.files[1].dir:  /srcdir
-
-   The line number information for list0.c has to end up in a single
-   subfile, so that `break /srcdir/list0.c:1' works as expected.
-   start_subfile will ensure that this happens provided that we pass the
-   concatenation of files.files[1].dir and files.files[1].name as the
-   subfile's name.  */
-
-static void
-dwarf2_start_subfile (struct dwarf2_cu *cu, const char *filename,
-		      const char *dirname)
-{
-  char *copy = NULL;
-
-  /* In order not to lose the line information directory,
-     we concatenate it to the filename when it makes sense.
-     Note that the Dwarf3 standard says (speaking of filenames in line
-     information): ``The directory index is ignored for file names
-     that represent full path names''.  Thus ignoring dirname in the
-     `else' branch below isn't an issue.  */
-
-  if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL)
-    {
-      copy = concat (dirname, SLASH_STRING, filename, (char *)NULL);
-      filename = copy;
-    }
-
-  cu->get_builder ()->start_subfile (filename);
-
-  if (copy != NULL)
-    xfree (copy);
-}
-
-/* Start a symtab for DWARF.  NAME, COMP_DIR, LOW_PC are passed to the
-   buildsym_compunit constructor.  */
-
-struct compunit_symtab *
-dwarf2_cu::start_symtab (const char *name, const char *comp_dir,
-			 CORE_ADDR low_pc)
-{
-  gdb_assert (m_builder == nullptr);
-
-  m_builder.reset (new struct buildsym_compunit
-		   (per_cu->dwarf2_per_objfile->objfile,
-		    name, comp_dir, language, low_pc));
-
-  list_in_scope = get_builder ()->get_file_symbols ();
-
-  get_builder ()->record_debugformat ("DWARF 2");
-  get_builder ()->record_producer (producer);
-
-  processing_has_namespace_info = false;
-
-  return get_builder ()->get_compunit_symtab ();
-}
-
-static void
-var_decode_location (struct attribute *attr, struct symbol *sym,
-		     struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct comp_unit_head *cu_header = &cu->header;
-
-  /* NOTE drow/2003-01-30: There used to be a comment and some special
-     code here to turn a symbol with DW_AT_external and a
-     SYMBOL_VALUE_ADDRESS of 0 into a LOC_UNRESOLVED symbol.  This was
-     necessary for platforms (maybe Alpha, certainly PowerPC GNU/Linux
-     with some versions of binutils) where shared libraries could have
-     relocations against symbols in their debug information - the
-     minimal symbol would have the right address, but the debug info
-     would not.  It's no longer necessary, because we will explicitly
-     apply relocations when we read in the debug information now.  */
-
-  /* A DW_AT_location attribute with no contents indicates that a
-     variable has been optimized away.  */
-  if (attr_form_is_block (attr) && DW_BLOCK (attr)->size == 0)
-    {
-      SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
-      return;
-    }
-
-  /* Handle one degenerate form of location expression specially, to
-     preserve GDB's previous behavior when section offsets are
-     specified.  If this is just a DW_OP_addr, DW_OP_addrx, or
-     DW_OP_GNU_addr_index then mark this symbol as LOC_STATIC.  */
-
-  if (attr_form_is_block (attr)
-      && ((DW_BLOCK (attr)->data[0] == DW_OP_addr
-	   && DW_BLOCK (attr)->size == 1 + cu_header->addr_size)
-	  || ((DW_BLOCK (attr)->data[0] == DW_OP_GNU_addr_index
-               || DW_BLOCK (attr)->data[0] == DW_OP_addrx)
-	      && (DW_BLOCK (attr)->size
-		  == 1 + leb128_size (&DW_BLOCK (attr)->data[1])))))
-    {
-      unsigned int dummy;
-
-      if (DW_BLOCK (attr)->data[0] == DW_OP_addr)
-	SET_SYMBOL_VALUE_ADDRESS (sym,
-				  read_address (objfile->obfd,
-						DW_BLOCK (attr)->data + 1,
-						cu, &dummy));
-      else
-	SET_SYMBOL_VALUE_ADDRESS
-	  (sym, read_addr_index_from_leb128 (cu, DW_BLOCK (attr)->data + 1,
-					     &dummy));
-      SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
-      fixup_symbol_section (sym, objfile);
-      SET_SYMBOL_VALUE_ADDRESS (sym,
-				SYMBOL_VALUE_ADDRESS (sym)
-				+ ANOFFSET (objfile->section_offsets,
-					    SYMBOL_SECTION (sym)));
-      return;
-    }
-
-  /* NOTE drow/2002-01-30: It might be worthwhile to have a static
-     expression evaluator, and use LOC_COMPUTED only when necessary
-     (i.e. when the value of a register or memory location is
-     referenced, or a thread-local block, etc.).  Then again, it might
-     not be worthwhile.  I'm assuming that it isn't unless performance
-     or memory numbers show me otherwise.  */
-
-  dwarf2_symbol_mark_computed (attr, sym, cu, 0);
-
-  if (SYMBOL_COMPUTED_OPS (sym)->location_has_loclist)
-    cu->has_loclist = true;
-}
-
-/* Given a pointer to a DWARF information entry, figure out if we need
-   to make a symbol table entry for it, and if so, create a new entry
-   and return a pointer to it.
-   If TYPE is NULL, determine symbol type from the die, otherwise
-   used the passed type.
-   If SPACE is not NULL, use it to hold the new symbol.  If it is
-   NULL, allocate a new symbol on the objfile's obstack.  */
-
-static struct symbol *
-new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
-	    struct symbol *space)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct symbol *sym = NULL;
-  const char *name;
-  struct attribute *attr = NULL;
-  struct attribute *attr2 = NULL;
-  CORE_ADDR baseaddr;
-  struct pending **list_to_add = NULL;
-
-  int inlined_func = (die->tag == DW_TAG_inlined_subroutine);
-
-  baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-
-  name = dwarf2_name (die, cu);
-  if (name)
-    {
-      const char *linkagename;
-      int suppress_add = 0;
-
-      if (space)
-	sym = space;
-      else
-	sym = allocate_symbol (objfile);
-      OBJSTAT (objfile, n_syms++);
-
-      /* Cache this symbol's name and the name's demangled form (if any).  */
-      SYMBOL_SET_LANGUAGE (sym, cu->language, &objfile->objfile_obstack);
-      linkagename = dwarf2_physname (name, die, cu);
-      SYMBOL_SET_NAMES (sym, linkagename, false, objfile);
-
-      /* Fortran does not have mangling standard and the mangling does differ
-	 between gfortran, iFort etc.  */
-      if (cu->language == language_fortran
-          && symbol_get_demangled_name (sym) == NULL)
-	symbol_set_demangled_name (sym,
-				   dwarf2_full_name (name, die, cu),
-	                           NULL);
-
-      /* Default assumptions.
-         Use the passed type or decode it from the die.  */
-      SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT;
-      if (type != NULL)
-	SYMBOL_TYPE (sym) = type;
-      else
-	SYMBOL_TYPE (sym) = die_type (die, cu);
-      attr = dwarf2_attr (die,
-			  inlined_func ? DW_AT_call_line : DW_AT_decl_line,
-			  cu);
-      if (attr != nullptr)
-	{
-	  SYMBOL_LINE (sym) = DW_UNSND (attr);
-	}
-
-      attr = dwarf2_attr (die,
-			  inlined_func ? DW_AT_call_file : DW_AT_decl_file,
-			  cu);
-      if (attr != nullptr)
-	{
-	  file_name_index file_index = (file_name_index) DW_UNSND (attr);
-	  struct file_entry *fe;
-
-	  if (cu->line_header != NULL)
-	    fe = cu->line_header->file_name_at (file_index);
-	  else
-	    fe = NULL;
-
-	  if (fe == NULL)
-	    complaint (_("file index out of range"));
-	  else
-	    symbol_set_symtab (sym, fe->symtab);
-	}
-
-      switch (die->tag)
-	{
-	case DW_TAG_label:
-	  attr = dwarf2_attr (die, DW_AT_low_pc, cu);
-	  if (attr != nullptr)
-	    {
-	      CORE_ADDR addr;
-
-	      addr = attr_value_as_address (attr);
-	      addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr);
-	      SET_SYMBOL_VALUE_ADDRESS (sym, addr);
-	    }
-	  SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr;
-	  SYMBOL_DOMAIN (sym) = LABEL_DOMAIN;
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
-	  add_symbol_to_list (sym, cu->list_in_scope);
-	  break;
-	case DW_TAG_subprogram:
-	  /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
-	     finish_block.  */
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
-	  attr2 = dwarf2_attr (die, DW_AT_external, cu);
-	  if ((attr2 && (DW_UNSND (attr2) != 0))
-	      || cu->language == language_ada
-	      || cu->language == language_fortran)
-	    {
-              /* Subprograms marked external are stored as a global symbol.
-                 Ada and Fortran subprograms, whether marked external or
-                 not, are always stored as a global symbol, because we want
-                 to be able to access them globally.  For instance, we want
-                 to be able to break on a nested subprogram without having
-                 to specify the context.  */
-	      list_to_add = cu->get_builder ()->get_global_symbols ();
-	    }
-	  else
-	    {
-	      list_to_add = cu->list_in_scope;
-	    }
-	  break;
-	case DW_TAG_inlined_subroutine:
-	  /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
-	     finish_block.  */
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
-	  SYMBOL_INLINED (sym) = 1;
-	  list_to_add = cu->list_in_scope;
-	  break;
-	case DW_TAG_template_value_param:
-	  suppress_add = 1;
-	  /* Fall through.  */
-	case DW_TAG_constant:
-	case DW_TAG_variable:
-	case DW_TAG_member:
-	  /* Compilation with minimal debug info may result in
-	     variables with missing type entries.  Change the
-	     misleading `void' type to something sensible.  */
-	  if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID)
-	    SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int;
-
-	  attr = dwarf2_attr (die, DW_AT_const_value, cu);
-	  /* In the case of DW_TAG_member, we should only be called for
-	     static const members.  */
-	  if (die->tag == DW_TAG_member)
-	    {
-	      /* dwarf2_add_field uses die_is_declaration,
-		 so we do the same.  */
-	      gdb_assert (die_is_declaration (die, cu));
-	      gdb_assert (attr);
-	    }
-	  if (attr != nullptr)
-	    {
-	      dwarf2_const_value (attr, sym, cu);
-	      attr2 = dwarf2_attr (die, DW_AT_external, cu);
-	      if (!suppress_add)
-		{
-		  if (attr2 && (DW_UNSND (attr2) != 0))
-		    list_to_add = cu->get_builder ()->get_global_symbols ();
-		  else
-		    list_to_add = cu->list_in_scope;
-		}
-	      break;
-	    }
-	  attr = dwarf2_attr (die, DW_AT_location, cu);
-	  if (attr != nullptr)
-	    {
-	      var_decode_location (attr, sym, cu);
-	      attr2 = dwarf2_attr (die, DW_AT_external, cu);
-
-	      /* Fortran explicitly imports any global symbols to the local
-		 scope by DW_TAG_common_block.  */
-	      if (cu->language == language_fortran && die->parent
-		  && die->parent->tag == DW_TAG_common_block)
-		attr2 = NULL;
-
-	      if (SYMBOL_CLASS (sym) == LOC_STATIC
-		  && SYMBOL_VALUE_ADDRESS (sym) == 0
-		  && !dwarf2_per_objfile->has_section_at_zero)
-		{
-		  /* When a static variable is eliminated by the linker,
-		     the corresponding debug information is not stripped
-		     out, but the variable address is set to null;
-		     do not add such variables into symbol table.  */
-		}
-	      else if (attr2 && (DW_UNSND (attr2) != 0))
-		{
-		  if (SYMBOL_CLASS (sym) == LOC_STATIC
-		      && (objfile->flags & OBJF_MAINLINE) == 0
-		      && dwarf2_per_objfile->can_copy)
-		    {
-		      /* A global static variable might be subject to
-			 copy relocation.  We first check for a local
-			 minsym, though, because maybe the symbol was
-			 marked hidden, in which case this would not
-			 apply.  */
-		      bound_minimal_symbol found
-			= (lookup_minimal_symbol_linkage
-			   (sym->linkage_name (), objfile));
-		      if (found.minsym != nullptr)
-			sym->maybe_copied = 1;
-		    }
-
-		  /* A variable with DW_AT_external is never static,
-		     but it may be block-scoped.  */
-		  list_to_add
-		    = ((cu->list_in_scope
-			== cu->get_builder ()->get_file_symbols ())
-		       ? cu->get_builder ()->get_global_symbols ()
-		       : cu->list_in_scope);
-		}
-	      else
-		list_to_add = cu->list_in_scope;
-	    }
-	  else
-	    {
-	      /* We do not know the address of this symbol.
-	         If it is an external symbol and we have type information
-	         for it, enter the symbol as a LOC_UNRESOLVED symbol.
-	         The address of the variable will then be determined from
-	         the minimal symbol table whenever the variable is
-	         referenced.  */
-	      attr2 = dwarf2_attr (die, DW_AT_external, cu);
-
-	      /* Fortran explicitly imports any global symbols to the local
-		 scope by DW_TAG_common_block.  */
-	      if (cu->language == language_fortran && die->parent
-		  && die->parent->tag == DW_TAG_common_block)
-		{
-		  /* SYMBOL_CLASS doesn't matter here because
-		     read_common_block is going to reset it.  */
-		  if (!suppress_add)
-		    list_to_add = cu->list_in_scope;
-		}
-	      else if (attr2 && (DW_UNSND (attr2) != 0)
-		       && dwarf2_attr (die, DW_AT_type, cu) != NULL)
-		{
-		  /* A variable with DW_AT_external is never static, but it
-		     may be block-scoped.  */
-		  list_to_add
-		    = ((cu->list_in_scope
-			== cu->get_builder ()->get_file_symbols ())
-		       ? cu->get_builder ()->get_global_symbols ()
-		       : cu->list_in_scope);
-
-		  SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED;
-		}
-	      else if (!die_is_declaration (die, cu))
-		{
-		  /* Use the default LOC_OPTIMIZED_OUT class.  */
-		  gdb_assert (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT);
-		  if (!suppress_add)
-		    list_to_add = cu->list_in_scope;
-		}
-	    }
-	  break;
-	case DW_TAG_formal_parameter:
-	  {
-	    /* If we are inside a function, mark this as an argument.  If
-	       not, we might be looking at an argument to an inlined function
-	       when we do not have enough information to show inlined frames;
-	       pretend it's a local variable in that case so that the user can
-	       still see it.  */
-	    struct context_stack *curr
-	      = cu->get_builder ()->get_current_context_stack ();
-	    if (curr != nullptr && curr->name != nullptr)
-	      SYMBOL_IS_ARGUMENT (sym) = 1;
-	    attr = dwarf2_attr (die, DW_AT_location, cu);
-	    if (attr != nullptr)
-	      {
-		var_decode_location (attr, sym, cu);
-	      }
-	    attr = dwarf2_attr (die, DW_AT_const_value, cu);
-	    if (attr != nullptr)
-	      {
-		dwarf2_const_value (attr, sym, cu);
-	      }
-
-	    list_to_add = cu->list_in_scope;
-	  }
-	  break;
-	case DW_TAG_unspecified_parameters:
-	  /* From varargs functions; gdb doesn't seem to have any
-	     interest in this information, so just ignore it for now.
-	     (FIXME?) */
-	  break;
-	case DW_TAG_template_type_param:
-	  suppress_add = 1;
-	  /* Fall through.  */
-	case DW_TAG_class_type:
-	case DW_TAG_interface_type:
-	case DW_TAG_structure_type:
-	case DW_TAG_union_type:
-	case DW_TAG_set_type:
-	case DW_TAG_enumeration_type:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
-
-	  {
-	    /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't
-	       really ever be static objects: otherwise, if you try
-	       to, say, break of a class's method and you're in a file
-	       which doesn't mention that class, it won't work unless
-	       the check for all static symbols in lookup_symbol_aux
-	       saves you.  See the OtherFileClass tests in
-	       gdb.c++/namespace.exp.  */
-
-	    if (!suppress_add)
-	      {
-		buildsym_compunit *builder = cu->get_builder ();
-		list_to_add
-		  = (cu->list_in_scope == builder->get_file_symbols ()
-		     && cu->language == language_cplus
-		     ? builder->get_global_symbols ()
-		     : cu->list_in_scope);
-
-		/* The semantics of C++ state that "struct foo {
-		   ... }" also defines a typedef for "foo".  */
-		if (cu->language == language_cplus
-		    || cu->language == language_ada
-		    || cu->language == language_d
-		    || cu->language == language_rust)
-		  {
-		    /* The symbol's name is already allocated along
-		       with this objfile, so we don't need to
-		       duplicate it for the type.  */
-		    if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
-		      TYPE_NAME (SYMBOL_TYPE (sym)) = sym->search_name ();
-		  }
-	      }
-	  }
-	  break;
-	case DW_TAG_typedef:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-	  list_to_add = cu->list_in_scope;
-	  break;
-	case DW_TAG_base_type:
-        case DW_TAG_subrange_type:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-	  list_to_add = cu->list_in_scope;
-	  break;
-	case DW_TAG_enumerator:
-	  attr = dwarf2_attr (die, DW_AT_const_value, cu);
-	  if (attr != nullptr)
-	    {
-	      dwarf2_const_value (attr, sym, cu);
-	    }
-	  {
-	    /* NOTE: carlton/2003-11-10: See comment above in the
-	       DW_TAG_class_type, etc. block.  */
-
-	    list_to_add
-	      = (cu->list_in_scope == cu->get_builder ()->get_file_symbols ()
-		 && cu->language == language_cplus
-		 ? cu->get_builder ()->get_global_symbols ()
-		 : cu->list_in_scope);
-	  }
-	  break;
-	case DW_TAG_imported_declaration:
-	case DW_TAG_namespace:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  list_to_add = cu->get_builder ()->get_global_symbols ();
-	  break;
-	case DW_TAG_module:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-	  SYMBOL_DOMAIN (sym) = MODULE_DOMAIN;
-	  list_to_add = cu->get_builder ()->get_global_symbols ();
-	  break;
-	case DW_TAG_common_block:
-	  SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK;
-	  SYMBOL_DOMAIN (sym) = COMMON_BLOCK_DOMAIN;
-	  add_symbol_to_list (sym, cu->list_in_scope);
-	  break;
-	default:
-	  /* Not a tag we recognize.  Hopefully we aren't processing
-	     trash data, but since we must specifically ignore things
-	     we don't recognize, there is nothing else we should do at
-	     this point.  */
-	  complaint (_("unsupported tag: '%s'"),
-		     dwarf_tag_name (die->tag));
-	  break;
-	}
-
-      if (suppress_add)
-	{
-	  sym->hash_next = objfile->template_symbols;
-	  objfile->template_symbols = sym;
-	  list_to_add = NULL;
-	}
-
-      if (list_to_add != NULL)
-	add_symbol_to_list (sym, list_to_add);
-
-      /* For the benefit of old versions of GCC, check for anonymous
-	 namespaces based on the demangled name.  */
-      if (!cu->processing_has_namespace_info
-	  && cu->language == language_cplus)
-	cp_scan_for_anonymous_namespaces (cu->get_builder (), sym, objfile);
-    }
-  return (sym);
-}
-
-/* Given an attr with a DW_FORM_dataN value in host byte order,
-   zero-extend it as appropriate for the symbol's type.  The DWARF
-   standard (v4) is not entirely clear about the meaning of using
-   DW_FORM_dataN for a constant with a signed type, where the type is
-   wider than the data.  The conclusion of a discussion on the DWARF
-   list was that this is unspecified.  We choose to always zero-extend
-   because that is the interpretation long in use by GCC.  */
-
-static gdb_byte *
-dwarf2_const_value_data (const struct attribute *attr, struct obstack *obstack,
-			 struct dwarf2_cu *cu, LONGEST *value, int bits)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  enum bfd_endian byte_order = bfd_big_endian (objfile->obfd) ?
-				BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
-  LONGEST l = DW_UNSND (attr);
-
-  if (bits < sizeof (*value) * 8)
-    {
-      l &= ((LONGEST) 1 << bits) - 1;
-      *value = l;
-    }
-  else if (bits == sizeof (*value) * 8)
-    *value = l;
-  else
-    {
-      gdb_byte *bytes = (gdb_byte *) obstack_alloc (obstack, bits / 8);
-      store_unsigned_integer (bytes, bits / 8, byte_order, l);
-      return bytes;
-    }
-
-  return NULL;
-}
-
-/* Read a constant value from an attribute.  Either set *VALUE, or if
-   the value does not fit in *VALUE, set *BYTES - either already
-   allocated on the objfile obstack, or newly allocated on OBSTACK,
-   or, set *BATON, if we translated the constant to a location
-   expression.  */
-
-static void
-dwarf2_const_value_attr (const struct attribute *attr, struct type *type,
-			 const char *name, struct obstack *obstack,
-			 struct dwarf2_cu *cu,
-			 LONGEST *value, const gdb_byte **bytes,
-			 struct dwarf2_locexpr_baton **baton)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  struct comp_unit_head *cu_header = &cu->header;
-  struct dwarf_block *blk;
-  enum bfd_endian byte_order = (bfd_big_endian (objfile->obfd) ?
-				BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE);
-
-  *value = 0;
-  *bytes = NULL;
-  *baton = NULL;
-
-  switch (attr->form)
-    {
-    case DW_FORM_addr:
-    case DW_FORM_addrx:
-    case DW_FORM_GNU_addr_index:
-      {
-	gdb_byte *data;
-
-	if (TYPE_LENGTH (type) != cu_header->addr_size)
-	  dwarf2_const_value_length_mismatch_complaint (name,
-							cu_header->addr_size,
-							TYPE_LENGTH (type));
-	/* Symbols of this form are reasonably rare, so we just
-	   piggyback on the existing location code rather than writing
-	   a new implementation of symbol_computed_ops.  */
-	*baton = XOBNEW (obstack, struct dwarf2_locexpr_baton);
-	(*baton)->per_cu = cu->per_cu;
-	gdb_assert ((*baton)->per_cu);
-
-	(*baton)->size = 2 + cu_header->addr_size;
-	data = (gdb_byte *) obstack_alloc (obstack, (*baton)->size);
-	(*baton)->data = data;
-
-	data[0] = DW_OP_addr;
-	store_unsigned_integer (&data[1], cu_header->addr_size,
-				byte_order, DW_ADDR (attr));
-	data[cu_header->addr_size + 1] = DW_OP_stack_value;
-      }
-      break;
-    case DW_FORM_string:
-    case DW_FORM_strp:
-    case DW_FORM_strx:
-    case DW_FORM_GNU_str_index:
-    case DW_FORM_GNU_strp_alt:
-      /* DW_STRING is already allocated on the objfile obstack, point
-	 directly to it.  */
-      *bytes = (const gdb_byte *) DW_STRING (attr);
-      break;
-    case DW_FORM_block1:
-    case DW_FORM_block2:
-    case DW_FORM_block4:
-    case DW_FORM_block:
-    case DW_FORM_exprloc:
-    case DW_FORM_data16:
-      blk = DW_BLOCK (attr);
-      if (TYPE_LENGTH (type) != blk->size)
-	dwarf2_const_value_length_mismatch_complaint (name, blk->size,
-						      TYPE_LENGTH (type));
-      *bytes = blk->data;
-      break;
-
-      /* The DW_AT_const_value attributes are supposed to carry the
-	 symbol's value "represented as it would be on the target
-	 architecture."  By the time we get here, it's already been
-	 converted to host endianness, so we just need to sign- or
-	 zero-extend it as appropriate.  */
-    case DW_FORM_data1:
-      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 8);
-      break;
-    case DW_FORM_data2:
-      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 16);
-      break;
-    case DW_FORM_data4:
-      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 32);
-      break;
-    case DW_FORM_data8:
-      *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 64);
-      break;
-
-    case DW_FORM_sdata:
-    case DW_FORM_implicit_const:
-      *value = DW_SND (attr);
-      break;
-
-    case DW_FORM_udata:
-      *value = DW_UNSND (attr);
-      break;
-
-    default:
-      complaint (_("unsupported const value attribute form: '%s'"),
-		 dwarf_form_name (attr->form));
-      *value = 0;
-      break;
-    }
-}
-
-
-/* Copy constant value from an attribute to a symbol.  */
-
-static void
-dwarf2_const_value (const struct attribute *attr, struct symbol *sym,
-		    struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  LONGEST value;
-  const gdb_byte *bytes;
-  struct dwarf2_locexpr_baton *baton;
-
-  dwarf2_const_value_attr (attr, SYMBOL_TYPE (sym),
-			   sym->print_name (),
-			   &objfile->objfile_obstack, cu,
-			   &value, &bytes, &baton);
-
-  if (baton != NULL)
-    {
-      SYMBOL_LOCATION_BATON (sym) = baton;
-      SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index;
-    }
-  else if (bytes != NULL)
-     {
-      SYMBOL_VALUE_BYTES (sym) = bytes;
-      SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES;
-    }
-  else
-    {
-      SYMBOL_VALUE (sym) = value;
-      SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
-    }
-}
-
-/* Return the type of the die in question using its DW_AT_type attribute.  */
-
-static struct type *
-die_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *type_attr;
-
-  type_attr = dwarf2_attr (die, DW_AT_type, cu);
-  if (!type_attr)
-    {
-      struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-      /* A missing DW_AT_type represents a void type.  */
-      return objfile_type (objfile)->builtin_void;
-    }
-
-  return lookup_die_type (die, type_attr, cu);
-}
-
-/* True iff CU's producer generates GNAT Ada auxiliary information
-   that allows to find parallel types through that information instead
-   of having to do expensive parallel lookups by type name.  */
-
-static int
-need_gnat_info (struct dwarf2_cu *cu)
-{
-  /* Assume that the Ada compiler was GNAT, which always produces
-     the auxiliary information.  */
-  return (cu->language == language_ada);
-}
-
-/* Return the auxiliary type of the die in question using its
-   DW_AT_GNAT_descriptive_type attribute.  Returns NULL if the
-   attribute is not present.  */
-
-static struct type *
-die_descriptive_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *type_attr;
-
-  type_attr = dwarf2_attr (die, DW_AT_GNAT_descriptive_type, cu);
-  if (!type_attr)
-    return NULL;
-
-  return lookup_die_type (die, type_attr, cu);
-}
-
-/* If DIE has a descriptive_type attribute, then set the TYPE's
-   descriptive type accordingly.  */
-
-static void
-set_descriptive_type (struct type *type, struct die_info *die,
-		      struct dwarf2_cu *cu)
-{
-  struct type *descriptive_type = die_descriptive_type (die, cu);
-
-  if (descriptive_type)
-    {
-      ALLOCATE_GNAT_AUX_TYPE (type);
-      TYPE_DESCRIPTIVE_TYPE (type) = descriptive_type;
-    }
-}
-
-/* Return the containing type of the die in question using its
-   DW_AT_containing_type attribute.  */
-
-static struct type *
-die_containing_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *type_attr;
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-
-  type_attr = dwarf2_attr (die, DW_AT_containing_type, cu);
-  if (!type_attr)
-    error (_("Dwarf Error: Problem turning containing type into gdb type "
-	     "[in module %s]"), objfile_name (objfile));
-
-  return lookup_die_type (die, type_attr, cu);
-}
-
-/* Return an error marker type to use for the ill formed type in DIE/CU.  */
-
-static struct type *
-build_error_marker_type (struct dwarf2_cu *cu, struct die_info *die)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  char *saved;
-
-  std::string message
-    = string_printf (_("<unknown type in %s, CU %s, DIE %s>"),
-		     objfile_name (objfile),
-		     sect_offset_str (cu->header.sect_off),
-		     sect_offset_str (die->sect_off));
-  saved = obstack_strdup (&objfile->objfile_obstack, message);
-
-  return init_type (objfile, TYPE_CODE_ERROR, 0, saved);
-}
-
-/* Look up the type of DIE in CU using its type attribute ATTR.
-   ATTR must be one of: DW_AT_type, DW_AT_GNAT_descriptive_type,
-   DW_AT_containing_type.
-   If there is no type substitute an error marker.  */
-
-static struct type *
-lookup_die_type (struct die_info *die, const struct attribute *attr,
-		 struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct type *this_type;
-
-  gdb_assert (attr->name == DW_AT_type
-	      || attr->name == DW_AT_GNAT_descriptive_type
-	      || attr->name == DW_AT_containing_type);
-
-  /* First see if we have it cached.  */
-
-  if (attr->form == DW_FORM_GNU_ref_alt)
-    {
-      struct dwarf2_per_cu_data *per_cu;
-      sect_offset sect_off = dwarf2_get_ref_die_offset (attr);
-
-      per_cu = dwarf2_find_containing_comp_unit (sect_off, 1,
-						 dwarf2_per_objfile);
-      this_type = get_die_type_at_offset (sect_off, per_cu);
-    }
-  else if (attr_form_is_ref (attr))
-    {
-      sect_offset sect_off = dwarf2_get_ref_die_offset (attr);
-
-      this_type = get_die_type_at_offset (sect_off, cu->per_cu);
-    }
-  else if (attr->form == DW_FORM_ref_sig8)
-    {
-      ULONGEST signature = DW_SIGNATURE (attr);
-
-      return get_signatured_type (die, signature, cu);
-    }
-  else
-    {
-      complaint (_("Dwarf Error: Bad type attribute %s in DIE"
-		   " at %s [in module %s]"),
-		 dwarf_attr_name (attr->name), sect_offset_str (die->sect_off),
-		 objfile_name (objfile));
-      return build_error_marker_type (cu, die);
-    }
-
-  /* If not cached we need to read it in.  */
-
-  if (this_type == NULL)
-    {
-      struct die_info *type_die = NULL;
-      struct dwarf2_cu *type_cu = cu;
-
-      if (attr_form_is_ref (attr))
-	type_die = follow_die_ref (die, attr, &type_cu);
-      if (type_die == NULL)
-	return build_error_marker_type (cu, die);
-      /* If we find the type now, it's probably because the type came
-	 from an inter-CU reference and the type's CU got expanded before
-	 ours.  */
-      this_type = read_type_die (type_die, type_cu);
-    }
-
-  /* If we still don't have a type use an error marker.  */
-
-  if (this_type == NULL)
-    return build_error_marker_type (cu, die);
-
-  return this_type;
-}
-
-/* Return the type in DIE, CU.
-   Returns NULL for invalid types.
-
-   This first does a lookup in die_type_hash,
-   and only reads the die in if necessary.
-
-   NOTE: This can be called when reading in partial or full symbols.  */
-
-static struct type *
-read_type_die (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *this_type;
-
-  this_type = get_die_type (die, cu);
-  if (this_type)
-    return this_type;
-
-  return read_type_die_1 (die, cu);
-}
-
-/* Read the type in DIE, CU.
-   Returns NULL for invalid types.  */
-
-static struct type *
-read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct type *this_type = NULL;
-
-  switch (die->tag)
-    {
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-      this_type = read_structure_type (die, cu);
-      break;
-    case DW_TAG_enumeration_type:
-      this_type = read_enumeration_type (die, cu);
-      break;
-    case DW_TAG_subprogram:
-    case DW_TAG_subroutine_type:
-    case DW_TAG_inlined_subroutine:
-      this_type = read_subroutine_type (die, cu);
-      break;
-    case DW_TAG_array_type:
-      this_type = read_array_type (die, cu);
-      break;
-    case DW_TAG_set_type:
-      this_type = read_set_type (die, cu);
-      break;
-    case DW_TAG_pointer_type:
-      this_type = read_tag_pointer_type (die, cu);
-      break;
-    case DW_TAG_ptr_to_member_type:
-      this_type = read_tag_ptr_to_member_type (die, cu);
-      break;
-    case DW_TAG_reference_type:
-      this_type = read_tag_reference_type (die, cu, TYPE_CODE_REF);
-      break;
-    case DW_TAG_rvalue_reference_type:
-      this_type = read_tag_reference_type (die, cu, TYPE_CODE_RVALUE_REF);
-      break;
-    case DW_TAG_const_type:
-      this_type = read_tag_const_type (die, cu);
-      break;
-    case DW_TAG_volatile_type:
-      this_type = read_tag_volatile_type (die, cu);
-      break;
-    case DW_TAG_restrict_type:
-      this_type = read_tag_restrict_type (die, cu);
-      break;
-    case DW_TAG_string_type:
-      this_type = read_tag_string_type (die, cu);
-      break;
-    case DW_TAG_typedef:
-      this_type = read_typedef (die, cu);
-      break;
-    case DW_TAG_subrange_type:
-      this_type = read_subrange_type (die, cu);
-      break;
-    case DW_TAG_base_type:
-      this_type = read_base_type (die, cu);
-      break;
-    case DW_TAG_unspecified_type:
-      this_type = read_unspecified_type (die, cu);
-      break;
-    case DW_TAG_namespace:
-      this_type = read_namespace_type (die, cu);
-      break;
-    case DW_TAG_module:
-      this_type = read_module_type (die, cu);
-      break;
-    case DW_TAG_atomic_type:
-      this_type = read_tag_atomic_type (die, cu);
-      break;
-    default:
-      complaint (_("unexpected tag in read_type_die: '%s'"),
-		 dwarf_tag_name (die->tag));
-      break;
-    }
-
-  return this_type;
-}
-
-/* See if we can figure out if the class lives in a namespace.  We do
-   this by looking for a member function; its demangled name will
-   contain namespace info, if there is any.
-   Return the computed name or NULL.
-   Space for the result is allocated on the objfile's obstack.
-   This is the full-die version of guess_partial_die_structure_name.
-   In this case we know DIE has no useful parent.  */
-
-static char *
-guess_full_die_structure_name (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct die_info *spec_die;
-  struct dwarf2_cu *spec_cu;
-  struct die_info *child;
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-
-  spec_cu = cu;
-  spec_die = die_specification (die, &spec_cu);
-  if (spec_die != NULL)
-    {
-      die = spec_die;
-      cu = spec_cu;
-    }
-
-  for (child = die->child;
-       child != NULL;
-       child = child->sibling)
-    {
-      if (child->tag == DW_TAG_subprogram)
-	{
-	  const char *linkage_name = dw2_linkage_name (child, cu);
-
-	  if (linkage_name != NULL)
-	    {
-	      char *actual_name
-		= language_class_name_from_physname (cu->language_defn,
-						     linkage_name);
-	      char *name = NULL;
-
-	      if (actual_name != NULL)
-		{
-		  const char *die_name = dwarf2_name (die, cu);
-
-		  if (die_name != NULL
-		      && strcmp (die_name, actual_name) != 0)
-		    {
-		      /* Strip off the class name from the full name.
-			 We want the prefix.  */
-		      int die_name_len = strlen (die_name);
-		      int actual_name_len = strlen (actual_name);
-
-		      /* Test for '::' as a sanity check.  */
-		      if (actual_name_len > die_name_len + 2
-			  && actual_name[actual_name_len
-					 - die_name_len - 1] == ':')
-			name = obstack_strndup (
-			  &objfile->per_bfd->storage_obstack,
-			  actual_name, actual_name_len - die_name_len - 2);
-		    }
-		}
-	      xfree (actual_name);
-	      return name;
-	    }
-	}
-    }
-
-  return NULL;
-}
-
-/* GCC might emit a nameless typedef that has a linkage name.  Determine the
-   prefix part in such case.  See
-   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510.  */
-
-static const char *
-anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-  const char *base;
-
-  if (die->tag != DW_TAG_class_type && die->tag != DW_TAG_interface_type
-      && die->tag != DW_TAG_structure_type && die->tag != DW_TAG_union_type)
-    return NULL;
-
-  if (dwarf2_string_attr (die, DW_AT_name, cu) != NULL)
-    return NULL;
-
-  attr = dw2_linkage_name_attr (die, cu);
-  if (attr == NULL || DW_STRING (attr) == NULL)
-    return NULL;
-
-  /* dwarf2_name had to be already called.  */
-  gdb_assert (DW_STRING_IS_CANONICAL (attr));
-
-  /* Strip the base name, keep any leading namespaces/classes.  */
-  base = strrchr (DW_STRING (attr), ':');
-  if (base == NULL || base == DW_STRING (attr) || base[-1] != ':')
-    return "";
-
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  return obstack_strndup (&objfile->per_bfd->storage_obstack,
-			  DW_STRING (attr),
-			  &base[-1] - DW_STRING (attr));
-}
-
-/* Return the name of the namespace/class that DIE is defined within,
-   or "" if we can't tell.  The caller should not xfree the result.
-
-   For example, if we're within the method foo() in the following
-   code:
-
-   namespace N {
-     class C {
-       void foo () {
-       }
-     };
-   }
-
-   then determine_prefix on foo's die will return "N::C".  */
-
-static const char *
-determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct die_info *parent, *spec_die;
-  struct dwarf2_cu *spec_cu;
-  struct type *parent_type;
-  const char *retval;
-
-  if (cu->language != language_cplus
-      && cu->language != language_fortran && cu->language != language_d
-      && cu->language != language_rust)
-    return "";
-
-  retval = anonymous_struct_prefix (die, cu);
-  if (retval)
-    return retval;
-
-  /* We have to be careful in the presence of DW_AT_specification.
-     For example, with GCC 3.4, given the code
-
-     namespace N {
-       void foo() {
-	 // Definition of N::foo.
-       }
-     }
-
-     then we'll have a tree of DIEs like this:
-
-     1: DW_TAG_compile_unit
-       2: DW_TAG_namespace        // N
-	 3: DW_TAG_subprogram     // declaration of N::foo
-       4: DW_TAG_subprogram       // definition of N::foo
-	    DW_AT_specification   // refers to die #3
-
-     Thus, when processing die #4, we have to pretend that we're in
-     the context of its DW_AT_specification, namely the contex of die
-     #3.  */
-  spec_cu = cu;
-  spec_die = die_specification (die, &spec_cu);
-  if (spec_die == NULL)
-    parent = die->parent;
-  else
-    {
-      parent = spec_die->parent;
-      cu = spec_cu;
-    }
-
-  if (parent == NULL)
-    return "";
-  else if (parent->building_fullname)
-    {
-      const char *name;
-      const char *parent_name;
-
-      /* It has been seen on RealView 2.2 built binaries,
-	 DW_TAG_template_type_param types actually _defined_ as
-	 children of the parent class:
-
-	 enum E {};
-	 template class <class Enum> Class{};
-	 Class<enum E> class_e;
-
-         1: DW_TAG_class_type (Class)
-           2: DW_TAG_enumeration_type (E)
-             3: DW_TAG_enumerator (enum1:0)
-             3: DW_TAG_enumerator (enum2:1)
-             ...
-           2: DW_TAG_template_type_param
-              DW_AT_type  DW_FORM_ref_udata (E)
-
-	 Besides being broken debug info, it can put GDB into an
-	 infinite loop.  Consider:
-
-	 When we're building the full name for Class<E>, we'll start
-	 at Class, and go look over its template type parameters,
-	 finding E.  We'll then try to build the full name of E, and
-	 reach here.  We're now trying to build the full name of E,
-	 and look over the parent DIE for containing scope.  In the
-	 broken case, if we followed the parent DIE of E, we'd again
-	 find Class, and once again go look at its template type
-	 arguments, etc., etc.  Simply don't consider such parent die
-	 as source-level parent of this die (it can't be, the language
-	 doesn't allow it), and break the loop here.  */
-      name = dwarf2_name (die, cu);
-      parent_name = dwarf2_name (parent, cu);
-      complaint (_("template param type '%s' defined within parent '%s'"),
-		 name ? name : "<unknown>",
-		 parent_name ? parent_name : "<unknown>");
-      return "";
-    }
-  else
-    switch (parent->tag)
-      {
-      case DW_TAG_namespace:
-	parent_type = read_type_die (parent, cu);
-	/* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
-	   DW_TAG_namespace DIEs with a name of "::" for the global namespace.
-	   Work around this problem here.  */
-	if (cu->language == language_cplus
-	    && strcmp (TYPE_NAME (parent_type), "::") == 0)
-	  return "";
-	/* We give a name to even anonymous namespaces.  */
-	return TYPE_NAME (parent_type);
-      case DW_TAG_class_type:
-      case DW_TAG_interface_type:
-      case DW_TAG_structure_type:
-      case DW_TAG_union_type:
-      case DW_TAG_module:
-	parent_type = read_type_die (parent, cu);
-	if (TYPE_NAME (parent_type) != NULL)
-	  return TYPE_NAME (parent_type);
-	else
-	  /* An anonymous structure is only allowed non-static data
-	     members; no typedefs, no member functions, et cetera.
-	     So it does not need a prefix.  */
-	  return "";
-      case DW_TAG_compile_unit:
-      case DW_TAG_partial_unit:
-	/* gcc-4.5 -gdwarf-4 can drop the enclosing namespace.  Cope.  */
-	if (cu->language == language_cplus
-	    && !dwarf2_per_objfile->types.empty ()
-	    && die->child != NULL
-	    && (die->tag == DW_TAG_class_type
-		|| die->tag == DW_TAG_structure_type
-		|| die->tag == DW_TAG_union_type))
-	  {
-	    char *name = guess_full_die_structure_name (die, cu);
-	    if (name != NULL)
-	      return name;
-	  }
-	return "";
-      case DW_TAG_subprogram:
-	/* Nested subroutines in Fortran get a prefix with the name
-	   of the parent's subroutine.  */
-	if (cu->language == language_fortran)
-	  {
-	    if ((die->tag ==  DW_TAG_subprogram)
-		&& (dwarf2_name (parent, cu) != NULL))
-	      return dwarf2_name (parent, cu);
-	  }
-	return determine_prefix (parent, cu);
-      case DW_TAG_enumeration_type:
-	parent_type = read_type_die (parent, cu);
-	if (TYPE_DECLARED_CLASS (parent_type))
-	  {
-	    if (TYPE_NAME (parent_type) != NULL)
-	      return TYPE_NAME (parent_type);
-	    return "";
-	  }
-	/* Fall through.  */
-      default:
-	return determine_prefix (parent, cu);
-      }
-}
-
-/* Return a newly-allocated string formed by concatenating PREFIX and SUFFIX
-   with appropriate separator.  If PREFIX or SUFFIX is NULL or empty, then
-   simply copy the SUFFIX or PREFIX, respectively.  If OBS is non-null, perform
-   an obconcat, otherwise allocate storage for the result.  The CU argument is
-   used to determine the language and hence, the appropriate separator.  */
-
-#define MAX_SEP_LEN 7  /* strlen ("__") + strlen ("_MOD_")  */
-
-static char *
-typename_concat (struct obstack *obs, const char *prefix, const char *suffix,
-                 int physname, struct dwarf2_cu *cu)
-{
-  const char *lead = "";
-  const char *sep;
-
-  if (suffix == NULL || suffix[0] == '\0'
-      || prefix == NULL || prefix[0] == '\0')
-    sep = "";
-  else if (cu->language == language_d)
-    {
-      /* For D, the 'main' function could be defined in any module, but it
-	 should never be prefixed.  */
-      if (strcmp (suffix, "D main") == 0)
-	{
-	  prefix = "";
-	  sep = "";
-	}
-      else
-	sep = ".";
-    }
-  else if (cu->language == language_fortran && physname)
-    {
-      /* This is gfortran specific mangling.  Normally DW_AT_linkage_name or
-	 DW_AT_MIPS_linkage_name is preferred and used instead.  */
-
-      lead = "__";
-      sep = "_MOD_";
-    }
-  else
-    sep = "::";
-
-  if (prefix == NULL)
-    prefix = "";
-  if (suffix == NULL)
-    suffix = "";
-
-  if (obs == NULL)
-    {
-      char *retval
-	= ((char *)
-	   xmalloc (strlen (prefix) + MAX_SEP_LEN + strlen (suffix) + 1));
-
-      strcpy (retval, lead);
-      strcat (retval, prefix);
-      strcat (retval, sep);
-      strcat (retval, suffix);
-      return retval;
-    }
-  else
-    {
-      /* We have an obstack.  */
-      return obconcat (obs, lead, prefix, sep, suffix, (char *) NULL);
-    }
-}
-
-/* Return sibling of die, NULL if no sibling.  */
-
-static struct die_info *
-sibling_die (struct die_info *die)
-{
-  return die->sibling;
-}
-
-/* Get name of a die, return NULL if not found.  */
-
-static const char *
-dwarf2_canonicalize_name (const char *name, struct dwarf2_cu *cu,
-			  struct obstack *obstack)
-{
-  if (name && cu->language == language_cplus)
-    {
-      std::string canon_name = cp_canonicalize_string (name);
-
-      if (!canon_name.empty ())
-	{
-	  if (canon_name != name)
-	    name = obstack_strdup (obstack, canon_name);
-	}
-    }
-
-  return name;
-}
-
-/* Get name of a die, return NULL if not found.
-   Anonymous namespaces are converted to their magic string.  */
-
-static const char *
-dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-
-  attr = dwarf2_attr (die, DW_AT_name, cu);
-  if ((!attr || !DW_STRING (attr))
-      && die->tag != DW_TAG_namespace
-      && die->tag != DW_TAG_class_type
-      && die->tag != DW_TAG_interface_type
-      && die->tag != DW_TAG_structure_type
-      && die->tag != DW_TAG_union_type)
-    return NULL;
-
-  switch (die->tag)
-    {
-    case DW_TAG_compile_unit:
-    case DW_TAG_partial_unit:
-      /* Compilation units have a DW_AT_name that is a filename, not
-	 a source language identifier.  */
-    case DW_TAG_enumeration_type:
-    case DW_TAG_enumerator:
-      /* These tags always have simple identifiers already; no need
-	 to canonicalize them.  */
-      return DW_STRING (attr);
-
-    case DW_TAG_namespace:
-      if (attr != NULL && DW_STRING (attr) != NULL)
-	return DW_STRING (attr);
-      return CP_ANONYMOUS_NAMESPACE_STR;
-
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-      /* Some GCC versions emit spurious DW_AT_name attributes for unnamed
-	 structures or unions.  These were of the form "._%d" in GCC 4.1,
-	 or simply "<anonymous struct>" or "<anonymous union>" in GCC 4.3
-	 and GCC 4.4.  We work around this problem by ignoring these.  */
-      if (attr && DW_STRING (attr)
-	  && (startswith (DW_STRING (attr), "._")
-	      || startswith (DW_STRING (attr), "<anonymous")))
-	return NULL;
-
-      /* GCC might emit a nameless typedef that has a linkage name.  See
-	 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510.  */
-      if (!attr || DW_STRING (attr) == NULL)
-	{
-	  char *demangled = NULL;
-
-	  attr = dw2_linkage_name_attr (die, cu);
-	  if (attr == NULL || DW_STRING (attr) == NULL)
-	    return NULL;
-
-	  /* Avoid demangling DW_STRING (attr) the second time on a second
-	     call for the same DIE.  */
-	  if (!DW_STRING_IS_CANONICAL (attr))
-	    demangled = gdb_demangle (DW_STRING (attr), DMGL_TYPES);
-
-	  if (demangled)
-	    {
-	      const char *base;
-
-	      /* FIXME: we already did this for the partial symbol... */
-	      DW_STRING (attr)
-		= obstack_strdup (&objfile->per_bfd->storage_obstack,
-				  demangled);
-	      DW_STRING_IS_CANONICAL (attr) = 1;
-	      xfree (demangled);
-
-	      /* Strip any leading namespaces/classes, keep only the base name.
-		 DW_AT_name for named DIEs does not contain the prefixes.  */
-	      base = strrchr (DW_STRING (attr), ':');
-	      if (base && base > DW_STRING (attr) && base[-1] == ':')
-		return &base[1];
-	      else
-		return DW_STRING (attr);
-	    }
-	}
-      break;
-
-    default:
-      break;
-    }
-
-  if (!DW_STRING_IS_CANONICAL (attr))
-    {
-      DW_STRING (attr)
-	= dwarf2_canonicalize_name (DW_STRING (attr), cu,
-				    &objfile->per_bfd->storage_obstack);
-      DW_STRING_IS_CANONICAL (attr) = 1;
-    }
-  return DW_STRING (attr);
-}
-
-/* Return the die that this die in an extension of, or NULL if there
-   is none.  *EXT_CU is the CU containing DIE on input, and the CU
-   containing the return value on output.  */
-
-static struct die_info *
-dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu)
-{
-  struct attribute *attr;
-
-  attr = dwarf2_attr (die, DW_AT_extension, *ext_cu);
-  if (attr == NULL)
-    return NULL;
-
-  return follow_die_ref (die, attr, ext_cu);
-}
-
-/* A convenience function that returns an "unknown" DWARF name,
-   including the value of V.  STR is the name of the entity being
-   printed, e.g., "TAG".  */
-
-static const char *
-dwarf_unknown (const char *str, unsigned v)
-{
-  char *cell = get_print_cell ();
-  xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v);
-  return cell;
-}
-
-/* Convert a DIE tag into its string name.  */
-
-static const char *
-dwarf_tag_name (unsigned tag)
-{
-  const char *name = get_DW_TAG_name (tag);
-
-  if (name == NULL)
-    return dwarf_unknown ("TAG", tag);
-
-  return name;
-}
-
-/* Convert a DWARF attribute code into its string name.  */
-
-static const char *
-dwarf_attr_name (unsigned attr)
-{
-  const char *name;
-
-#ifdef MIPS /* collides with DW_AT_HP_block_index */
-  if (attr == DW_AT_MIPS_fde)
-    return "DW_AT_MIPS_fde";
-#else
-  if (attr == DW_AT_HP_block_index)
-    return "DW_AT_HP_block_index";
-#endif
-
-  name = get_DW_AT_name (attr);
-
-  if (name == NULL)
-    return dwarf_unknown ("AT", attr);
-
-  return name;
-}
-
-/* Convert a unit type to corresponding DW_UT name.  */
-
-static const char *
-dwarf_unit_type_name (int unit_type) {
-  switch (unit_type)
-    {
-      case 0x01:
-	return "DW_UT_compile (0x01)";
-      case 0x02:
-	return "DW_UT_type (0x02)";
-      case 0x03:
-	return "DW_UT_partial (0x03)";
-      case 0x04:
-	return "DW_UT_skeleton (0x04)";
-      case 0x05:
-	return "DW_UT_split_compile (0x05)";
-      case 0x06:
-	return "DW_UT_split_type (0x06)";
-      case 0x80:
-	return "DW_UT_lo_user (0x80)";
-      case 0xff:
-	return "DW_UT_hi_user (0xff)";
-      default:
-	return nullptr;
-    }
-}
-
-/* Convert a DWARF value form code into its string name.  */
-
-static const char *
-dwarf_form_name (unsigned form)
-{
-  const char *name = get_DW_FORM_name (form);
-
-  if (name == NULL)
-    return dwarf_unknown ("FORM", form);
-
-  return name;
-}
-
-static const char *
-dwarf_bool_name (unsigned mybool)
-{
-  if (mybool)
-    return "TRUE";
-  else
-    return "FALSE";
-}
-
-/* Convert a DWARF type code into its string name.  */
-
-static const char *
-dwarf_type_encoding_name (unsigned enc)
-{
-  const char *name = get_DW_ATE_name (enc);
-
-  if (name == NULL)
-    return dwarf_unknown ("ATE", enc);
-
-  return name;
-}
-
-static void
-dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
-{
-  unsigned int i;
-
-  print_spaces (indent, f);
-  fprintf_unfiltered (f, "Die: %s (abbrev %d, offset %s)\n",
-		      dwarf_tag_name (die->tag), die->abbrev,
-		      sect_offset_str (die->sect_off));
-
-  if (die->parent != NULL)
-    {
-      print_spaces (indent, f);
-      fprintf_unfiltered (f, "  parent at offset: %s\n",
-			  sect_offset_str (die->parent->sect_off));
-    }
-
-  print_spaces (indent, f);
-  fprintf_unfiltered (f, "  has children: %s\n",
-	   dwarf_bool_name (die->child != NULL));
-
-  print_spaces (indent, f);
-  fprintf_unfiltered (f, "  attributes:\n");
-
-  for (i = 0; i < die->num_attrs; ++i)
-    {
-      print_spaces (indent, f);
-      fprintf_unfiltered (f, "    %s (%s) ",
-	       dwarf_attr_name (die->attrs[i].name),
-	       dwarf_form_name (die->attrs[i].form));
-
-      switch (die->attrs[i].form)
-	{
-	case DW_FORM_addr:
-	case DW_FORM_addrx:
-	case DW_FORM_GNU_addr_index:
-	  fprintf_unfiltered (f, "address: ");
-	  fputs_filtered (hex_string (DW_ADDR (&die->attrs[i])), f);
-	  break;
-	case DW_FORM_block2:
-	case DW_FORM_block4:
-	case DW_FORM_block:
-	case DW_FORM_block1:
-	  fprintf_unfiltered (f, "block: size %s",
-			      pulongest (DW_BLOCK (&die->attrs[i])->size));
-	  break;
-	case DW_FORM_exprloc:
-	  fprintf_unfiltered (f, "expression: size %s",
-			      pulongest (DW_BLOCK (&die->attrs[i])->size));
-	  break;
-	case DW_FORM_data16:
-	  fprintf_unfiltered (f, "constant of 16 bytes");
-	  break;
-	case DW_FORM_ref_addr:
-	  fprintf_unfiltered (f, "ref address: ");
-	  fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f);
-	  break;
-	case DW_FORM_GNU_ref_alt:
-	  fprintf_unfiltered (f, "alt ref address: ");
-	  fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f);
-	  break;
-	case DW_FORM_ref1:
-	case DW_FORM_ref2:
-	case DW_FORM_ref4:
-	case DW_FORM_ref8:
-	case DW_FORM_ref_udata:
-	  fprintf_unfiltered (f, "constant ref: 0x%lx (adjusted)",
-			      (long) (DW_UNSND (&die->attrs[i])));
-	  break;
-	case DW_FORM_data1:
-	case DW_FORM_data2:
-	case DW_FORM_data4:
-	case DW_FORM_data8:
-	case DW_FORM_udata:
-	case DW_FORM_sdata:
-	  fprintf_unfiltered (f, "constant: %s",
-			      pulongest (DW_UNSND (&die->attrs[i])));
-	  break;
-	case DW_FORM_sec_offset:
-	  fprintf_unfiltered (f, "section offset: %s",
-			      pulongest (DW_UNSND (&die->attrs[i])));
-	  break;
-	case DW_FORM_ref_sig8:
-	  fprintf_unfiltered (f, "signature: %s",
-			      hex_string (DW_SIGNATURE (&die->attrs[i])));
-	  break;
-	case DW_FORM_string:
-	case DW_FORM_strp:
-	case DW_FORM_line_strp:
-	case DW_FORM_strx:
-	case DW_FORM_GNU_str_index:
-	case DW_FORM_GNU_strp_alt:
-	  fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)",
-		   DW_STRING (&die->attrs[i])
-		   ? DW_STRING (&die->attrs[i]) : "",
-		   DW_STRING_IS_CANONICAL (&die->attrs[i]) ? "is" : "not");
-	  break;
-	case DW_FORM_flag:
-	  if (DW_UNSND (&die->attrs[i]))
-	    fprintf_unfiltered (f, "flag: TRUE");
-	  else
-	    fprintf_unfiltered (f, "flag: FALSE");
-	  break;
-	case DW_FORM_flag_present:
-	  fprintf_unfiltered (f, "flag: TRUE");
-	  break;
-	case DW_FORM_indirect:
-	  /* The reader will have reduced the indirect form to
-	     the "base form" so this form should not occur.  */
-	  fprintf_unfiltered (f,
-			      "unexpected attribute form: DW_FORM_indirect");
-	  break;
-	case DW_FORM_implicit_const:
-	  fprintf_unfiltered (f, "constant: %s",
-			      plongest (DW_SND (&die->attrs[i])));
-	  break;
-	default:
-	  fprintf_unfiltered (f, "unsupported attribute form: %d.",
-		   die->attrs[i].form);
-	  break;
-	}
-      fprintf_unfiltered (f, "\n");
-    }
-}
-
-static void
-dump_die_for_error (struct die_info *die)
-{
-  dump_die_shallow (gdb_stderr, 0, die);
-}
-
-static void
-dump_die_1 (struct ui_file *f, int level, int max_level, struct die_info *die)
-{
-  int indent = level * 4;
-
-  gdb_assert (die != NULL);
-
-  if (level >= max_level)
-    return;
-
-  dump_die_shallow (f, indent, die);
-
-  if (die->child != NULL)
-    {
-      print_spaces (indent, f);
-      fprintf_unfiltered (f, "  Children:");
-      if (level + 1 < max_level)
-	{
-	  fprintf_unfiltered (f, "\n");
-	  dump_die_1 (f, level + 1, max_level, die->child);
-	}
-      else
-	{
-	  fprintf_unfiltered (f,
-			      " [not printed, max nesting level reached]\n");
-	}
-    }
-
-  if (die->sibling != NULL && level > 0)
-    {
-      dump_die_1 (f, level, max_level, die->sibling);
-    }
-}
-
-/* This is called from the pdie macro in gdbinit.in.
-   It's not static so gcc will keep a copy callable from gdb.  */
-
-void
-dump_die (struct die_info *die, int max_level)
-{
-  dump_die_1 (gdb_stdlog, 0, max_level, die);
-}
-
-static void
-store_in_ref_table (struct die_info *die, struct dwarf2_cu *cu)
-{
-  void **slot;
-
-  slot = htab_find_slot_with_hash (cu->die_hash, die,
-				   to_underlying (die->sect_off),
-				   INSERT);
-
-  *slot = die;
-}
-
-/* Return DIE offset of ATTR.  Return 0 with complaint if ATTR is not of the
-   required kind.  */
-
-static sect_offset
-dwarf2_get_ref_die_offset (const struct attribute *attr)
-{
-  if (attr_form_is_ref (attr))
-    return (sect_offset) DW_UNSND (attr);
-
-  complaint (_("unsupported die ref attribute form: '%s'"),
-	     dwarf_form_name (attr->form));
-  return {};
-}
-
-/* Return the constant value held by ATTR.  Return DEFAULT_VALUE if
- * the value held by the attribute is not constant.  */
-
-static LONGEST
-dwarf2_get_attr_constant_value (const struct attribute *attr, int default_value)
-{
-  if (attr->form == DW_FORM_sdata || attr->form == DW_FORM_implicit_const)
-    return DW_SND (attr);
-  else if (attr->form == DW_FORM_udata
-           || attr->form == DW_FORM_data1
-           || attr->form == DW_FORM_data2
-           || attr->form == DW_FORM_data4
-           || attr->form == DW_FORM_data8)
-    return DW_UNSND (attr);
-  else
-    {
-      /* For DW_FORM_data16 see attr_form_is_constant.  */
-      complaint (_("Attribute value is not a constant (%s)"),
-                 dwarf_form_name (attr->form));
-      return default_value;
-    }
-}
-
-/* Follow reference or signature attribute ATTR of SRC_DIE.
-   On entry *REF_CU is the CU of SRC_DIE.
-   On exit *REF_CU is the CU of the result.  */
-
-static struct die_info *
-follow_die_ref_or_sig (struct die_info *src_die, const struct attribute *attr,
-		       struct dwarf2_cu **ref_cu)
-{
-  struct die_info *die;
-
-  if (attr_form_is_ref (attr))
-    die = follow_die_ref (src_die, attr, ref_cu);
-  else if (attr->form == DW_FORM_ref_sig8)
-    die = follow_die_sig (src_die, attr, ref_cu);
-  else
-    {
-      dump_die_for_error (src_die);
-      error (_("Dwarf Error: Expected reference attribute [in module %s]"),
-	     objfile_name ((*ref_cu)->per_cu->dwarf2_per_objfile->objfile));
-    }
-
-  return die;
-}
-
-/* Follow reference OFFSET.
-   On entry *REF_CU is the CU of the source die referencing OFFSET.
-   On exit *REF_CU is the CU of the result.
-   Returns NULL if OFFSET is invalid.  */
-
-static struct die_info *
-follow_die_offset (sect_offset sect_off, int offset_in_dwz,
-		   struct dwarf2_cu **ref_cu)
-{
-  struct die_info temp_die;
-  struct dwarf2_cu *target_cu, *cu = *ref_cu;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-
-  gdb_assert (cu->per_cu != NULL);
-
-  target_cu = cu;
-
-  if (cu->per_cu->is_debug_types)
-    {
-      /* .debug_types CUs cannot reference anything outside their CU.
-	 If they need to, they have to reference a signatured type via
-	 DW_FORM_ref_sig8.  */
-      if (!offset_in_cu_p (&cu->header, sect_off))
-	return NULL;
-    }
-  else if (offset_in_dwz != cu->per_cu->is_dwz
-	   || !offset_in_cu_p (&cu->header, sect_off))
-    {
-      struct dwarf2_per_cu_data *per_cu;
-
-      per_cu = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz,
-						 dwarf2_per_objfile);
-
-      /* If necessary, add it to the queue and load its DIEs.  */
-      if (maybe_queue_comp_unit (cu, per_cu, cu->language))
-	load_full_comp_unit (per_cu, false, cu->language);
-
-      target_cu = per_cu->cu;
-    }
-  else if (cu->dies == NULL)
-    {
-      /* We're loading full DIEs during partial symbol reading.  */
-      gdb_assert (dwarf2_per_objfile->reading_partial_symbols);
-      load_full_comp_unit (cu->per_cu, false, language_minimal);
-    }
-
-  *ref_cu = target_cu;
-  temp_die.sect_off = sect_off;
-
-  if (target_cu != cu)
-    target_cu->ancestor = cu;
-
-  return (struct die_info *) htab_find_with_hash (target_cu->die_hash,
-						  &temp_die,
-						  to_underlying (sect_off));
-}
-
-/* Follow reference attribute ATTR of SRC_DIE.
-   On entry *REF_CU is the CU of SRC_DIE.
-   On exit *REF_CU is the CU of the result.  */
-
-static struct die_info *
-follow_die_ref (struct die_info *src_die, const struct attribute *attr,
-		struct dwarf2_cu **ref_cu)
-{
-  sect_offset sect_off = dwarf2_get_ref_die_offset (attr);
-  struct dwarf2_cu *cu = *ref_cu;
-  struct die_info *die;
-
-  die = follow_die_offset (sect_off,
-			   (attr->form == DW_FORM_GNU_ref_alt
-			    || cu->per_cu->is_dwz),
-			   ref_cu);
-  if (!die)
-    error (_("Dwarf Error: Cannot find DIE at %s referenced from DIE "
-	   "at %s [in module %s]"),
-	   sect_offset_str (sect_off), sect_offset_str (src_die->sect_off),
-	   objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
-
-  return die;
-}
-
-/* Return DWARF block referenced by DW_AT_location of DIE at SECT_OFF at PER_CU.
-   Returned value is intended for DW_OP_call*.  Returned
-   dwarf2_locexpr_baton->data has lifetime of
-   PER_CU->DWARF2_PER_OBJFILE->OBJFILE.  */
-
-struct dwarf2_locexpr_baton
-dwarf2_fetch_die_loc_sect_off (sect_offset sect_off,
-			       struct dwarf2_per_cu_data *per_cu,
-			       CORE_ADDR (*get_frame_pc) (void *baton),
-			       void *baton, bool resolve_abstract_p)
-{
-  struct dwarf2_cu *cu;
-  struct die_info *die;
-  struct attribute *attr;
-  struct dwarf2_locexpr_baton retval;
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  if (per_cu->cu == NULL)
-    load_cu (per_cu, false);
-  cu = per_cu->cu;
-  if (cu == NULL)
-    {
-      /* We shouldn't get here for a dummy CU, but don't crash on the user.
-	 Instead just throw an error, not much else we can do.  */
-      error (_("Dwarf Error: Dummy CU at %s referenced in module %s"),
-	     sect_offset_str (sect_off), objfile_name (objfile));
-    }
-
-  die = follow_die_offset (sect_off, per_cu->is_dwz, &cu);
-  if (!die)
-    error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"),
-	   sect_offset_str (sect_off), objfile_name (objfile));
-
-  attr = dwarf2_attr (die, DW_AT_location, cu);
-  if (!attr && resolve_abstract_p
-      && (dwarf2_per_objfile->abstract_to_concrete.find (die->sect_off)
-	  != dwarf2_per_objfile->abstract_to_concrete.end ()))
-    {
-      CORE_ADDR pc = (*get_frame_pc) (baton);
-      CORE_ADDR baseaddr
-	= ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-      struct gdbarch *gdbarch = get_objfile_arch (objfile);
-
-      for (const auto &cand_off
-	     : dwarf2_per_objfile->abstract_to_concrete[die->sect_off])
-	{
-	  struct dwarf2_cu *cand_cu = cu;
-	  struct die_info *cand
-	    = follow_die_offset (cand_off, per_cu->is_dwz, &cand_cu);
-	  if (!cand
-	      || !cand->parent
-	      || cand->parent->tag != DW_TAG_subprogram)
-	    continue;
-
-	  CORE_ADDR pc_low, pc_high;
-	  get_scope_pc_bounds (cand->parent, &pc_low, &pc_high, cu);
-	  if (pc_low == ((CORE_ADDR) -1))
-	    continue;
-	  pc_low = gdbarch_adjust_dwarf2_addr (gdbarch, pc_low + baseaddr);
-	  pc_high = gdbarch_adjust_dwarf2_addr (gdbarch, pc_high + baseaddr);
-	  if (!(pc_low <= pc && pc < pc_high))
-	    continue;
-
-	  die = cand;
-	  attr = dwarf2_attr (die, DW_AT_location, cu);
-	  break;
-	}
-    }
-
-  if (!attr)
-    {
-      /* DWARF: "If there is no such attribute, then there is no effect.".
-	 DATA is ignored if SIZE is 0.  */
-
-      retval.data = NULL;
-      retval.size = 0;
-    }
-  else if (attr_form_is_section_offset (attr))
-    {
-      struct dwarf2_loclist_baton loclist_baton;
-      CORE_ADDR pc = (*get_frame_pc) (baton);
-      size_t size;
-
-      fill_in_loclist_baton (cu, &loclist_baton, attr);
-
-      retval.data = dwarf2_find_location_expression (&loclist_baton,
-						     &size, pc);
-      retval.size = size;
-    }
-  else
-    {
-      if (!attr_form_is_block (attr))
-	error (_("Dwarf Error: DIE at %s referenced in module %s "
-		 "is neither DW_FORM_block* nor DW_FORM_exprloc"),
-	       sect_offset_str (sect_off), objfile_name (objfile));
-
-      retval.data = DW_BLOCK (attr)->data;
-      retval.size = DW_BLOCK (attr)->size;
-    }
-  retval.per_cu = cu->per_cu;
-
-  age_cached_comp_units (dwarf2_per_objfile);
-
-  return retval;
-}
-
-/* Like dwarf2_fetch_die_loc_sect_off, but take a CU
-   offset.  */
-
-struct dwarf2_locexpr_baton
-dwarf2_fetch_die_loc_cu_off (cu_offset offset_in_cu,
-			     struct dwarf2_per_cu_data *per_cu,
-			     CORE_ADDR (*get_frame_pc) (void *baton),
-			     void *baton)
-{
-  sect_offset sect_off = per_cu->sect_off + to_underlying (offset_in_cu);
-
-  return dwarf2_fetch_die_loc_sect_off (sect_off, per_cu, get_frame_pc, baton);
-}
-
-/* Write a constant of a given type as target-ordered bytes into
-   OBSTACK.  */
-
-static const gdb_byte *
-write_constant_as_bytes (struct obstack *obstack,
-			 enum bfd_endian byte_order,
-			 struct type *type,
-			 ULONGEST value,
-			 LONGEST *len)
-{
-  gdb_byte *result;
-
-  *len = TYPE_LENGTH (type);
-  result = (gdb_byte *) obstack_alloc (obstack, *len);
-  store_unsigned_integer (result, *len, byte_order, value);
-
-  return result;
-}
-
-/* If the DIE at OFFSET in PER_CU has a DW_AT_const_value, return a
-   pointer to the constant bytes and set LEN to the length of the
-   data.  If memory is needed, allocate it on OBSTACK.  If the DIE
-   does not have a DW_AT_const_value, return NULL.  */
-
-const gdb_byte *
-dwarf2_fetch_constant_bytes (sect_offset sect_off,
-			     struct dwarf2_per_cu_data *per_cu,
-			     struct obstack *obstack,
-			     LONGEST *len)
-{
-  struct dwarf2_cu *cu;
-  struct die_info *die;
-  struct attribute *attr;
-  const gdb_byte *result = NULL;
-  struct type *type;
-  LONGEST value;
-  enum bfd_endian byte_order;
-  struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile;
-
-  if (per_cu->cu == NULL)
-    load_cu (per_cu, false);
-  cu = per_cu->cu;
-  if (cu == NULL)
-    {
-      /* We shouldn't get here for a dummy CU, but don't crash on the user.
-	 Instead just throw an error, not much else we can do.  */
-      error (_("Dwarf Error: Dummy CU at %s referenced in module %s"),
-	     sect_offset_str (sect_off), objfile_name (objfile));
-    }
-
-  die = follow_die_offset (sect_off, per_cu->is_dwz, &cu);
-  if (!die)
-    error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"),
-	   sect_offset_str (sect_off), objfile_name (objfile));
-
-  attr = dwarf2_attr (die, DW_AT_const_value, cu);
-  if (attr == NULL)
-    return NULL;
-
-  byte_order = (bfd_big_endian (objfile->obfd)
-		? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE);
-
-  switch (attr->form)
-    {
-    case DW_FORM_addr:
-    case DW_FORM_addrx:
-    case DW_FORM_GNU_addr_index:
-      {
-	gdb_byte *tem;
-
-	*len = cu->header.addr_size;
-	tem = (gdb_byte *) obstack_alloc (obstack, *len);
-	store_unsigned_integer (tem, *len, byte_order, DW_ADDR (attr));
-	result = tem;
-      }
-      break;
-    case DW_FORM_string:
-    case DW_FORM_strp:
-    case DW_FORM_strx:
-    case DW_FORM_GNU_str_index:
-    case DW_FORM_GNU_strp_alt:
-      /* DW_STRING is already allocated on the objfile obstack, point
-	 directly to it.  */
-      result = (const gdb_byte *) DW_STRING (attr);
-      *len = strlen (DW_STRING (attr));
-      break;
-    case DW_FORM_block1:
-    case DW_FORM_block2:
-    case DW_FORM_block4:
-    case DW_FORM_block:
-    case DW_FORM_exprloc:
-    case DW_FORM_data16:
-      result = DW_BLOCK (attr)->data;
-      *len = DW_BLOCK (attr)->size;
-      break;
-
-      /* The DW_AT_const_value attributes are supposed to carry the
-	 symbol's value "represented as it would be on the target
-	 architecture."  By the time we get here, it's already been
-	 converted to host endianness, so we just need to sign- or
-	 zero-extend it as appropriate.  */
-    case DW_FORM_data1:
-      type = die_type (die, cu);
-      result = dwarf2_const_value_data (attr, obstack, cu, &value, 8);
-      if (result == NULL)
-	result = write_constant_as_bytes (obstack, byte_order,
-					  type, value, len);
-      break;
-    case DW_FORM_data2:
-      type = die_type (die, cu);
-      result = dwarf2_const_value_data (attr, obstack, cu, &value, 16);
-      if (result == NULL)
-	result = write_constant_as_bytes (obstack, byte_order,
-					  type, value, len);
-      break;
-    case DW_FORM_data4:
-      type = die_type (die, cu);
-      result = dwarf2_const_value_data (attr, obstack, cu, &value, 32);
-      if (result == NULL)
-	result = write_constant_as_bytes (obstack, byte_order,
-					  type, value, len);
-      break;
-    case DW_FORM_data8:
-      type = die_type (die, cu);
-      result = dwarf2_const_value_data (attr, obstack, cu, &value, 64);
-      if (result == NULL)
-	result = write_constant_as_bytes (obstack, byte_order,
-					  type, value, len);
-      break;
-
-    case DW_FORM_sdata:
-    case DW_FORM_implicit_const:
-      type = die_type (die, cu);
-      result = write_constant_as_bytes (obstack, byte_order,
-					type, DW_SND (attr), len);
-      break;
-
-    case DW_FORM_udata:
-      type = die_type (die, cu);
-      result = write_constant_as_bytes (obstack, byte_order,
-					type, DW_UNSND (attr), len);
-      break;
-
-    default:
-      complaint (_("unsupported const value attribute form: '%s'"),
-		 dwarf_form_name (attr->form));
-      break;
-    }
-
-  return result;
-}
-
-/* Return the type of the die at OFFSET in PER_CU.  Return NULL if no
-   valid type for this die is found.  */
-
-struct type *
-dwarf2_fetch_die_type_sect_off (sect_offset sect_off,
-				struct dwarf2_per_cu_data *per_cu)
-{
-  struct dwarf2_cu *cu;
-  struct die_info *die;
-
-  if (per_cu->cu == NULL)
-    load_cu (per_cu, false);
-  cu = per_cu->cu;
-  if (!cu)
-    return NULL;
-
-  die = follow_die_offset (sect_off, per_cu->is_dwz, &cu);
-  if (!die)
-    return NULL;
-
-  return die_type (die, cu);
-}
-
-/* Return the type of the DIE at DIE_OFFSET in the CU named by
-   PER_CU.  */
-
-struct type *
-dwarf2_get_die_type (cu_offset die_offset,
-		     struct dwarf2_per_cu_data *per_cu)
-{
-  sect_offset die_offset_sect = per_cu->sect_off + to_underlying (die_offset);
-  return get_die_type_at_offset (die_offset_sect, per_cu);
-}
-
-/* Follow type unit SIG_TYPE referenced by SRC_DIE.
-   On entry *REF_CU is the CU of SRC_DIE.
-   On exit *REF_CU is the CU of the result.
-   Returns NULL if the referenced DIE isn't found.  */
-
-static struct die_info *
-follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type,
-		  struct dwarf2_cu **ref_cu)
-{
-  struct die_info temp_die;
-  struct dwarf2_cu *sig_cu, *cu = *ref_cu;
-  struct die_info *die;
-
-  /* While it might be nice to assert sig_type->type == NULL here,
-     we can get here for DW_AT_imported_declaration where we need
-     the DIE not the type.  */
-
-  /* If necessary, add it to the queue and load its DIEs.  */
-
-  if (maybe_queue_comp_unit (*ref_cu, &sig_type->per_cu, language_minimal))
-    read_signatured_type (sig_type);
-
-  sig_cu = sig_type->per_cu.cu;
-  gdb_assert (sig_cu != NULL);
-  gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0);
-  temp_die.sect_off = sig_type->type_offset_in_section;
-  die = (struct die_info *) htab_find_with_hash (sig_cu->die_hash, &temp_die,
-						 to_underlying (temp_die.sect_off));
-  if (die)
-    {
-      struct dwarf2_per_objfile *dwarf2_per_objfile
-	= (*ref_cu)->per_cu->dwarf2_per_objfile;
-
-      /* For .gdb_index version 7 keep track of included TUs.
-	 http://sourceware.org/bugzilla/show_bug.cgi?id=15021.  */
-      if (dwarf2_per_objfile->index_table != NULL
-	  && dwarf2_per_objfile->index_table->version <= 7)
-	{
-	  (*ref_cu)->per_cu->imported_symtabs_push (sig_cu->per_cu);
-	}
-
-      *ref_cu = sig_cu;
-      if (sig_cu != cu)
-	sig_cu->ancestor = cu;
-
-      return die;
-    }
-
-  return NULL;
-}
-
-/* Follow signatured type referenced by ATTR in SRC_DIE.
-   On entry *REF_CU is the CU of SRC_DIE.
-   On exit *REF_CU is the CU of the result.
-   The result is the DIE of the type.
-   If the referenced type cannot be found an error is thrown.  */
-
-static struct die_info *
-follow_die_sig (struct die_info *src_die, const struct attribute *attr,
-		struct dwarf2_cu **ref_cu)
-{
-  ULONGEST signature = DW_SIGNATURE (attr);
-  struct signatured_type *sig_type;
-  struct die_info *die;
-
-  gdb_assert (attr->form == DW_FORM_ref_sig8);
-
-  sig_type = lookup_signatured_type (*ref_cu, signature);
-  /* sig_type will be NULL if the signatured type is missing from
-     the debug info.  */
-  if (sig_type == NULL)
-    {
-      error (_("Dwarf Error: Cannot find signatured DIE %s referenced"
-               " from DIE at %s [in module %s]"),
-             hex_string (signature), sect_offset_str (src_die->sect_off),
-	     objfile_name ((*ref_cu)->per_cu->dwarf2_per_objfile->objfile));
-    }
-
-  die = follow_die_sig_1 (src_die, sig_type, ref_cu);
-  if (die == NULL)
-    {
-      dump_die_for_error (src_die);
-      error (_("Dwarf Error: Problem reading signatured DIE %s referenced"
-	       " from DIE at %s [in module %s]"),
-	     hex_string (signature), sect_offset_str (src_die->sect_off),
-	     objfile_name ((*ref_cu)->per_cu->dwarf2_per_objfile->objfile));
-    }
-
-  return die;
-}
-
-/* Get the type specified by SIGNATURE referenced in DIE/CU,
-   reading in and processing the type unit if necessary.  */
-
-static struct type *
-get_signatured_type (struct die_info *die, ULONGEST signature,
-		     struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct signatured_type *sig_type;
-  struct dwarf2_cu *type_cu;
-  struct die_info *type_die;
-  struct type *type;
-
-  sig_type = lookup_signatured_type (cu, signature);
-  /* sig_type will be NULL if the signatured type is missing from
-     the debug info.  */
-  if (sig_type == NULL)
-    {
-      complaint (_("Dwarf Error: Cannot find signatured DIE %s referenced"
-		   " from DIE at %s [in module %s]"),
-		 hex_string (signature), sect_offset_str (die->sect_off),
-		 objfile_name (dwarf2_per_objfile->objfile));
-      return build_error_marker_type (cu, die);
-    }
-
-  /* If we already know the type we're done.  */
-  if (sig_type->type != NULL)
-    return sig_type->type;
-
-  type_cu = cu;
-  type_die = follow_die_sig_1 (die, sig_type, &type_cu);
-  if (type_die != NULL)
-    {
-      /* N.B. We need to call get_die_type to ensure only one type for this DIE
-	 is created.  This is important, for example, because for c++ classes
-	 we need TYPE_NAME set which is only done by new_symbol.  Blech.  */
-      type = read_type_die (type_die, type_cu);
-      if (type == NULL)
-	{
-	  complaint (_("Dwarf Error: Cannot build signatured type %s"
-		       " referenced from DIE at %s [in module %s]"),
-		     hex_string (signature), sect_offset_str (die->sect_off),
-		     objfile_name (dwarf2_per_objfile->objfile));
-	  type = build_error_marker_type (cu, die);
-	}
-    }
-  else
-    {
-      complaint (_("Dwarf Error: Problem reading signatured DIE %s referenced"
-		   " from DIE at %s [in module %s]"),
-		 hex_string (signature), sect_offset_str (die->sect_off),
-		 objfile_name (dwarf2_per_objfile->objfile));
-      type = build_error_marker_type (cu, die);
-    }
-  sig_type->type = type;
-
-  return type;
-}
-
-/* Get the type specified by the DW_AT_signature ATTR in DIE/CU,
-   reading in and processing the type unit if necessary.  */
-
-static struct type *
-get_DW_AT_signature_type (struct die_info *die, const struct attribute *attr,
-			  struct dwarf2_cu *cu) /* ARI: editCase function */
-{
-  /* Yes, DW_AT_signature can use a non-ref_sig8 reference.  */
-  if (attr_form_is_ref (attr))
-    {
-      struct dwarf2_cu *type_cu = cu;
-      struct die_info *type_die = follow_die_ref (die, attr, &type_cu);
-
-      return read_type_die (type_die, type_cu);
-    }
-  else if (attr->form == DW_FORM_ref_sig8)
-    {
-      return get_signatured_type (die, DW_SIGNATURE (attr), cu);
-    }
-  else
-    {
-      struct dwarf2_per_objfile *dwarf2_per_objfile
-	= cu->per_cu->dwarf2_per_objfile;
-
-      complaint (_("Dwarf Error: DW_AT_signature has bad form %s in DIE"
-		   " at %s [in module %s]"),
-		 dwarf_form_name (attr->form), sect_offset_str (die->sect_off),
-		 objfile_name (dwarf2_per_objfile->objfile));
-      return build_error_marker_type (cu, die);
-    }
-}
-
-/* Load the DIEs associated with type unit PER_CU into memory.  */
-
-static void
-load_full_type_unit (struct dwarf2_per_cu_data *per_cu)
-{
-  struct signatured_type *sig_type;
-
-  /* Caller is responsible for ensuring type_unit_groups don't get here.  */
-  gdb_assert (! IS_TYPE_UNIT_GROUP (per_cu));
-
-  /* We have the per_cu, but we need the signatured_type.
-     Fortunately this is an easy translation.  */
-  gdb_assert (per_cu->is_debug_types);
-  sig_type = (struct signatured_type *) per_cu;
-
-  gdb_assert (per_cu->cu == NULL);
-
-  read_signatured_type (sig_type);
-
-  gdb_assert (per_cu->cu != NULL);
-}
-
-/* die_reader_func for read_signatured_type.
-   This is identical to load_full_comp_unit_reader,
-   but is kept separate for now.  */
-
-static void
-read_signatured_type_reader (const struct die_reader_specs *reader,
-			     const gdb_byte *info_ptr,
-			     struct die_info *comp_unit_die,
-			     int has_children,
-			     void *data)
-{
-  struct dwarf2_cu *cu = reader->cu;
-
-  gdb_assert (cu->die_hash == NULL);
-  cu->die_hash =
-    htab_create_alloc_ex (cu->header.length / 12,
-			  die_hash,
-			  die_eq,
-			  NULL,
-			  &cu->comp_unit_obstack,
-			  hashtab_obstack_allocate,
-			  dummy_obstack_deallocate);
-
-  if (has_children)
-    comp_unit_die->child = read_die_and_siblings (reader, info_ptr,
-						  &info_ptr, comp_unit_die);
-  cu->dies = comp_unit_die;
-  /* comp_unit_die is not stored in die_hash, no need.  */
-
-  /* We try not to read any attributes in this function, because not
-     all CUs needed for references have been loaded yet, and symbol
-     table processing isn't initialized.  But we have to set the CU language,
-     or we won't be able to build types correctly.
-     Similarly, if we do not read the producer, we can not apply
-     producer-specific interpretation.  */
-  prepare_one_comp_unit (cu, cu->dies, language_minimal);
-}
-
-/* Read in a signatured type and build its CU and DIEs.
-   If the type is a stub for the real type in a DWO file,
-   read in the real type from the DWO file as well.  */
-
-static void
-read_signatured_type (struct signatured_type *sig_type)
-{
-  struct dwarf2_per_cu_data *per_cu = &sig_type->per_cu;
-
-  gdb_assert (per_cu->is_debug_types);
-  gdb_assert (per_cu->cu == NULL);
-
-  init_cutu_and_read_dies (per_cu, NULL, 0, 1, false,
-			   read_signatured_type_reader, NULL);
-  sig_type->per_cu.tu_read = 1;
-}
-
-/* Decode simple location descriptions.
-   Given a pointer to a dwarf block that defines a location, compute
-   the location and return the value.
-
-   NOTE drow/2003-11-18: This function is called in two situations
-   now: for the address of static or global variables (partial symbols
-   only) and for offsets into structures which are expected to be
-   (more or less) constant.  The partial symbol case should go away,
-   and only the constant case should remain.  That will let this
-   function complain more accurately.  A few special modes are allowed
-   without complaint for global variables (for instance, global
-   register values and thread-local values).
-
-   A location description containing no operations indicates that the
-   object is optimized out.  The return value is 0 for that case.
-   FIXME drow/2003-11-16: No callers check for this case any more; soon all
-   callers will only want a very basic result and this can become a
-   complaint.
-
-   Note that stack[0] is unused except as a default error return.  */
-
-static CORE_ADDR
-decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
-{
-  struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile;
-  size_t i;
-  size_t size = blk->size;
-  const gdb_byte *data = blk->data;
-  CORE_ADDR stack[64];
-  int stacki;
-  unsigned int bytes_read, unsnd;
-  gdb_byte op;
-
-  i = 0;
-  stacki = 0;
-  stack[stacki] = 0;
-  stack[++stacki] = 0;
-
-  while (i < size)
-    {
-      op = data[i++];
-      switch (op)
-	{
-	case DW_OP_lit0:
-	case DW_OP_lit1:
-	case DW_OP_lit2:
-	case DW_OP_lit3:
-	case DW_OP_lit4:
-	case DW_OP_lit5:
-	case DW_OP_lit6:
-	case DW_OP_lit7:
-	case DW_OP_lit8:
-	case DW_OP_lit9:
-	case DW_OP_lit10:
-	case DW_OP_lit11:
-	case DW_OP_lit12:
-	case DW_OP_lit13:
-	case DW_OP_lit14:
-	case DW_OP_lit15:
-	case DW_OP_lit16:
-	case DW_OP_lit17:
-	case DW_OP_lit18:
-	case DW_OP_lit19:
-	case DW_OP_lit20:
-	case DW_OP_lit21:
-	case DW_OP_lit22:
-	case DW_OP_lit23:
-	case DW_OP_lit24:
-	case DW_OP_lit25:
-	case DW_OP_lit26:
-	case DW_OP_lit27:
-	case DW_OP_lit28:
-	case DW_OP_lit29:
-	case DW_OP_lit30:
-	case DW_OP_lit31:
-	  stack[++stacki] = op - DW_OP_lit0;
-	  break;
-
-	case DW_OP_reg0:
-	case DW_OP_reg1:
-	case DW_OP_reg2:
-	case DW_OP_reg3:
-	case DW_OP_reg4:
-	case DW_OP_reg5:
-	case DW_OP_reg6:
-	case DW_OP_reg7:
-	case DW_OP_reg8:
-	case DW_OP_reg9:
-	case DW_OP_reg10:
-	case DW_OP_reg11:
-	case DW_OP_reg12:
-	case DW_OP_reg13:
-	case DW_OP_reg14:
-	case DW_OP_reg15:
-	case DW_OP_reg16:
-	case DW_OP_reg17:
-	case DW_OP_reg18:
-	case DW_OP_reg19:
-	case DW_OP_reg20:
-	case DW_OP_reg21:
-	case DW_OP_reg22:
-	case DW_OP_reg23:
-	case DW_OP_reg24:
-	case DW_OP_reg25:
-	case DW_OP_reg26:
-	case DW_OP_reg27:
-	case DW_OP_reg28:
-	case DW_OP_reg29:
-	case DW_OP_reg30:
-	case DW_OP_reg31:
-	  stack[++stacki] = op - DW_OP_reg0;
-	  if (i < size)
-	    dwarf2_complex_location_expr_complaint ();
-	  break;
-
-	case DW_OP_regx:
-	  unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
-	  i += bytes_read;
-	  stack[++stacki] = unsnd;
-	  if (i < size)
-	    dwarf2_complex_location_expr_complaint ();
-	  break;
-
-	case DW_OP_addr:
-	  stack[++stacki] = read_address (objfile->obfd, &data[i],
-					  cu, &bytes_read);
-	  i += bytes_read;
-	  break;
-
-	case DW_OP_const1u:
-	  stack[++stacki] = read_1_byte (objfile->obfd, &data[i]);
-	  i += 1;
-	  break;
-
-	case DW_OP_const1s:
-	  stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]);
-	  i += 1;
-	  break;
-
-	case DW_OP_const2u:
-	  stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]);
-	  i += 2;
-	  break;
-
-	case DW_OP_const2s:
-	  stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]);
-	  i += 2;
-	  break;
-
-	case DW_OP_const4u:
-	  stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]);
-	  i += 4;
-	  break;
-
-	case DW_OP_const4s:
-	  stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]);
-	  i += 4;
-	  break;
-
-	case DW_OP_const8u:
-	  stack[++stacki] = read_8_bytes (objfile->obfd, &data[i]);
-	  i += 8;
-	  break;
-
-	case DW_OP_constu:
-	  stack[++stacki] = read_unsigned_leb128 (NULL, (data + i),
-						  &bytes_read);
-	  i += bytes_read;
-	  break;
-
-	case DW_OP_consts:
-	  stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
-	  i += bytes_read;
-	  break;
-
-	case DW_OP_dup:
-	  stack[stacki + 1] = stack[stacki];
-	  stacki++;
-	  break;
-
-	case DW_OP_plus:
-	  stack[stacki - 1] += stack[stacki];
-	  stacki--;
-	  break;
-
-	case DW_OP_plus_uconst:
-	  stack[stacki] += read_unsigned_leb128 (NULL, (data + i),
-						 &bytes_read);
-	  i += bytes_read;
-	  break;
-
-	case DW_OP_minus:
-	  stack[stacki - 1] -= stack[stacki];
-	  stacki--;
-	  break;
-
-	case DW_OP_deref:
-	  /* If we're not the last op, then we definitely can't encode
-	     this using GDB's address_class enum.  This is valid for partial
-	     global symbols, although the variable's address will be bogus
-	     in the psymtab.  */
-	  if (i < size)
-	    dwarf2_complex_location_expr_complaint ();
-	  break;
-
-        case DW_OP_GNU_push_tls_address:
-	case DW_OP_form_tls_address:
-	  /* The top of the stack has the offset from the beginning
-	     of the thread control block at which the variable is located.  */
-	  /* Nothing should follow this operator, so the top of stack would
-	     be returned.  */
-	  /* This is valid for partial global symbols, but the variable's
-	     address will be bogus in the psymtab.  Make it always at least
-	     non-zero to not look as a variable garbage collected by linker
-	     which have DW_OP_addr 0.  */
-	  if (i < size)
-	    dwarf2_complex_location_expr_complaint ();
-	  stack[stacki]++;
-          break;
-
-	case DW_OP_GNU_uninit:
-	  break;
-
-	case DW_OP_addrx:
-	case DW_OP_GNU_addr_index:
-	case DW_OP_GNU_const_index:
-	  stack[++stacki] = read_addr_index_from_leb128 (cu, &data[i],
-							 &bytes_read);
-	  i += bytes_read;
-	  break;
-
-	default:
-	  {
-	    const char *name = get_DW_OP_name (op);
-
-	    if (name)
-	      complaint (_("unsupported stack op: '%s'"),
-			 name);
-	    else
-	      complaint (_("unsupported stack op: '%02x'"),
-			 op);
-	  }
-
-	  return (stack[stacki]);
-	}
-
-      /* Enforce maximum stack depth of SIZE-1 to avoid writing
-         outside of the allocated space.  Also enforce minimum>0.  */
-      if (stacki >= ARRAY_SIZE (stack) - 1)
-	{
-	  complaint (_("location description stack overflow"));
-	  return 0;
-	}
-
-      if (stacki <= 0)
-	{
-	  complaint (_("location description stack underflow"));
-	  return 0;
-	}
-    }
-  return (stack[stacki]);
-}
-
-/* memory allocation interface */
-
-static struct dwarf_block *
-dwarf_alloc_block (struct dwarf2_cu *cu)
-{
-  return XOBNEW (&cu->comp_unit_obstack, struct dwarf_block);
-}
-
-static struct die_info *
-dwarf_alloc_die (struct dwarf2_cu *cu, int num_attrs)
-{
-  struct die_info *die;
-  size_t size = sizeof (struct die_info);
-
-  if (num_attrs > 1)
-    size += (num_attrs - 1) * sizeof (struct attribute);
-
-  die = (struct die_info *) obstack_alloc (&cu->comp_unit_obstack, size);
-  memset (die, 0, sizeof (struct die_info));
-  return (die);
-}
-
-
-/* Macro support.  */
-
-/* Return file name relative to the compilation directory of file number I in
-   *LH's file name table.  The result is allocated using xmalloc; the caller is
-   responsible for freeing it.  */
-
-static char *
-file_file_name (int file, struct line_header *lh)
-{
-  /* Is the file number a valid index into the line header's file name
-     table?  Remember that file numbers start with one, not zero.  */
-  if (lh->is_valid_file_index (file))
-    {
-      const file_entry *fe = lh->file_name_at (file);
-
-      if (!IS_ABSOLUTE_PATH (fe->name))
-	{
-	  const char *dir = fe->include_dir (lh);
-	  if (dir != NULL)
-	    return concat (dir, SLASH_STRING, fe->name, (char *) NULL);
-	}
-      return xstrdup (fe->name);
-    }
-  else
-    {
-      /* The compiler produced a bogus file number.  We can at least
-         record the macro definitions made in the file, even if we
-         won't be able to find the file by name.  */
-      char fake_name[80];
-
-      xsnprintf (fake_name, sizeof (fake_name),
-		 "<bad macro file number %d>", file);
-
-      complaint (_("bad file number in macro information (%d)"),
-                 file);
-
-      return xstrdup (fake_name);
-    }
-}
-
-/* Return the full name of file number I in *LH's file name table.
-   Use COMP_DIR as the name of the current directory of the
-   compilation.  The result is allocated using xmalloc; the caller is
-   responsible for freeing it.  */
-static char *
-file_full_name (int file, struct line_header *lh, const char *comp_dir)
-{
-  /* Is the file number a valid index into the line header's file name
-     table?  Remember that file numbers start with one, not zero.  */
-  if (lh->is_valid_file_index (file))
-    {
-      char *relative = file_file_name (file, lh);
-
-      if (IS_ABSOLUTE_PATH (relative) || comp_dir == NULL)
-	return relative;
-      return reconcat (relative, comp_dir, SLASH_STRING,
-		       relative, (char *) NULL);
-    }
-  else
-    return file_file_name (file, lh);
-}
-
-
-static struct macro_source_file *
-macro_start_file (struct dwarf2_cu *cu,
-		  int file, int line,
-                  struct macro_source_file *current_file,
-                  struct line_header *lh)
-{
-  /* File name relative to the compilation directory of this source file.  */
-  char *file_name = file_file_name (file, lh);
-
-  if (! current_file)
-    {
-      /* Note: We don't create a macro table for this compilation unit
-	 at all until we actually get a filename.  */
-      struct macro_table *macro_table = cu->get_builder ()->get_macro_table ();
-
-      /* If we have no current file, then this must be the start_file
-	 directive for the compilation unit's main source file.  */
-      current_file = macro_set_main (macro_table, file_name);
-      macro_define_special (macro_table);
-    }
-  else
-    current_file = macro_include (current_file, line, file_name);
-
-  xfree (file_name);
-
-  return current_file;
-}
-
-static const char *
-consume_improper_spaces (const char *p, const char *body)
-{
-  if (*p == ' ')
-    {
-      complaint (_("macro definition contains spaces "
-		   "in formal argument list:\n`%s'"),
-		 body);
-
-      while (*p == ' ')
-        p++;
-    }
-
-  return p;
-}
-
-
-static void
-parse_macro_definition (struct macro_source_file *file, int line,
-                        const char *body)
-{
-  const char *p;
-
-  /* The body string takes one of two forms.  For object-like macro
-     definitions, it should be:
-
-        <macro name> " " <definition>
-
-     For function-like macro definitions, it should be:
-
-        <macro name> "() " <definition>
-     or
-        <macro name> "(" <arg name> ( "," <arg name> ) * ") " <definition>
-
-     Spaces may appear only where explicitly indicated, and in the
-     <definition>.
-
-     The Dwarf 2 spec says that an object-like macro's name is always
-     followed by a space, but versions of GCC around March 2002 omit
-     the space when the macro's definition is the empty string.
-
-     The Dwarf 2 spec says that there should be no spaces between the
-     formal arguments in a function-like macro's formal argument list,
-     but versions of GCC around March 2002 include spaces after the
-     commas.  */
-
-
-  /* Find the extent of the macro name.  The macro name is terminated
-     by either a space or null character (for an object-like macro) or
-     an opening paren (for a function-like macro).  */
-  for (p = body; *p; p++)
-    if (*p == ' ' || *p == '(')
-      break;
-
-  if (*p == ' ' || *p == '\0')
-    {
-      /* It's an object-like macro.  */
-      int name_len = p - body;
-      char *name = savestring (body, name_len);
-      const char *replacement;
-
-      if (*p == ' ')
-        replacement = body + name_len + 1;
-      else
-        {
-	  dwarf2_macro_malformed_definition_complaint (body);
-          replacement = body + name_len;
-        }
-
-      macro_define_object (file, line, name, replacement);
-
-      xfree (name);
-    }
-  else if (*p == '(')
-    {
-      /* It's a function-like macro.  */
-      char *name = savestring (body, p - body);
-      int argc = 0;
-      int argv_size = 1;
-      char **argv = XNEWVEC (char *, argv_size);
-
-      p++;
-
-      p = consume_improper_spaces (p, body);
-
-      /* Parse the formal argument list.  */
-      while (*p && *p != ')')
-        {
-          /* Find the extent of the current argument name.  */
-          const char *arg_start = p;
-
-          while (*p && *p != ',' && *p != ')' && *p != ' ')
-            p++;
-
-          if (! *p || p == arg_start)
-	    dwarf2_macro_malformed_definition_complaint (body);
-          else
-            {
-              /* Make sure argv has room for the new argument.  */
-              if (argc >= argv_size)
-                {
-                  argv_size *= 2;
-                  argv = XRESIZEVEC (char *, argv, argv_size);
-                }
-
-              argv[argc++] = savestring (arg_start, p - arg_start);
-            }
-
-          p = consume_improper_spaces (p, body);
-
-          /* Consume the comma, if present.  */
-          if (*p == ',')
-            {
-              p++;
-
-              p = consume_improper_spaces (p, body);
-            }
-        }
-
-      if (*p == ')')
-        {
-          p++;
-
-          if (*p == ' ')
-            /* Perfectly formed definition, no complaints.  */
-            macro_define_function (file, line, name,
-                                   argc, (const char **) argv,
-                                   p + 1);
-          else if (*p == '\0')
-            {
-              /* Complain, but do define it.  */
-	      dwarf2_macro_malformed_definition_complaint (body);
-              macro_define_function (file, line, name,
-                                     argc, (const char **) argv,
-                                     p);
-            }
-          else
-            /* Just complain.  */
-	    dwarf2_macro_malformed_definition_complaint (body);
-        }
-      else
-        /* Just complain.  */
-	dwarf2_macro_malformed_definition_complaint (body);
-
-      xfree (name);
-      {
-        int i;
-
-        for (i = 0; i < argc; i++)
-          xfree (argv[i]);
-      }
-      xfree (argv);
-    }
-  else
-    dwarf2_macro_malformed_definition_complaint (body);
-}
-
-/* Skip some bytes from BYTES according to the form given in FORM.
-   Returns the new pointer.  */
-
-static const gdb_byte *
-skip_form_bytes (bfd *abfd, const gdb_byte *bytes, const gdb_byte *buffer_end,
-		 enum dwarf_form form,
-		 unsigned int offset_size,
-		 struct dwarf2_section_info *section)
-{
-  unsigned int bytes_read;
-
-  switch (form)
-    {
-    case DW_FORM_data1:
-    case DW_FORM_flag:
-      ++bytes;
-      break;
-
-    case DW_FORM_data2:
-      bytes += 2;
-      break;
-
-    case DW_FORM_data4:
-      bytes += 4;
-      break;
-
-    case DW_FORM_data8:
-      bytes += 8;
-      break;
-
-    case DW_FORM_data16:
-      bytes += 16;
-      break;
-
-    case DW_FORM_string:
-      read_direct_string (abfd, bytes, &bytes_read);
-      bytes += bytes_read;
-      break;
-
-    case DW_FORM_sec_offset:
-    case DW_FORM_strp:
-    case DW_FORM_GNU_strp_alt:
-      bytes += offset_size;
-      break;
-
-    case DW_FORM_block:
-      bytes += read_unsigned_leb128 (abfd, bytes, &bytes_read);
-      bytes += bytes_read;
-      break;
-
-    case DW_FORM_block1:
-      bytes += 1 + read_1_byte (abfd, bytes);
-      break;
-    case DW_FORM_block2:
-      bytes += 2 + read_2_bytes (abfd, bytes);
-      break;
-    case DW_FORM_block4:
-      bytes += 4 + read_4_bytes (abfd, bytes);
-      break;
-
-    case DW_FORM_addrx:
-    case DW_FORM_sdata:
-    case DW_FORM_strx:
-    case DW_FORM_udata:
-    case DW_FORM_GNU_addr_index:
-    case DW_FORM_GNU_str_index:
-      bytes = gdb_skip_leb128 (bytes, buffer_end);
-      if (bytes == NULL)
-	{
-	  dwarf2_section_buffer_overflow_complaint (section);
-	  return NULL;
-	}
-      break;
-
-    case DW_FORM_implicit_const:
-      break;
-
-    default:
-      {
-	complaint (_("invalid form 0x%x in `%s'"),
-		   form, get_section_name (section));
-	return NULL;
-      }
-    }
-
-  return bytes;
-}
-
-/* A helper for dwarf_decode_macros that handles skipping an unknown
-   opcode.  Returns an updated pointer to the macro data buffer; or,
-   on error, issues a complaint and returns NULL.  */
-
-static const gdb_byte *
-skip_unknown_opcode (unsigned int opcode,
-		     const gdb_byte **opcode_definitions,
-		     const gdb_byte *mac_ptr, const gdb_byte *mac_end,
-		     bfd *abfd,
-		     unsigned int offset_size,
-		     struct dwarf2_section_info *section)
-{
-  unsigned int bytes_read, i;
-  unsigned long arg;
-  const gdb_byte *defn;
-
-  if (opcode_definitions[opcode] == NULL)
-    {
-      complaint (_("unrecognized DW_MACFINO opcode 0x%x"),
-		 opcode);
-      return NULL;
-    }
-
-  defn = opcode_definitions[opcode];
-  arg = read_unsigned_leb128 (abfd, defn, &bytes_read);
-  defn += bytes_read;
-
-  for (i = 0; i < arg; ++i)
-    {
-      mac_ptr = skip_form_bytes (abfd, mac_ptr, mac_end,
-				 (enum dwarf_form) defn[i], offset_size,
-				 section);
-      if (mac_ptr == NULL)
-	{
-	  /* skip_form_bytes already issued the complaint.  */
-	  return NULL;
-	}
-    }
-
-  return mac_ptr;
-}
-
-/* A helper function which parses the header of a macro section.
-   If the macro section is the extended (for now called "GNU") type,
-   then this updates *OFFSET_SIZE.  Returns a pointer to just after
-   the header, or issues a complaint and returns NULL on error.  */
-
-static const gdb_byte *
-dwarf_parse_macro_header (const gdb_byte **opcode_definitions,
-			  bfd *abfd,
-			  const gdb_byte *mac_ptr,
-			  unsigned int *offset_size,
-			  int section_is_gnu)
-{
-  memset (opcode_definitions, 0, 256 * sizeof (gdb_byte *));
-
-  if (section_is_gnu)
-    {
-      unsigned int version, flags;
-
-      version = read_2_bytes (abfd, mac_ptr);
-      if (version != 4 && version != 5)
-	{
-	  complaint (_("unrecognized version `%d' in .debug_macro section"),
-		     version);
-	  return NULL;
-	}
-      mac_ptr += 2;
-
-      flags = read_1_byte (abfd, mac_ptr);
-      ++mac_ptr;
-      *offset_size = (flags & 1) ? 8 : 4;
-
-      if ((flags & 2) != 0)
-	/* We don't need the line table offset.  */
-	mac_ptr += *offset_size;
-
-      /* Vendor opcode descriptions.  */
-      if ((flags & 4) != 0)
-	{
-	  unsigned int i, count;
-
-	  count = read_1_byte (abfd, mac_ptr);
-	  ++mac_ptr;
-	  for (i = 0; i < count; ++i)
-	    {
-	      unsigned int opcode, bytes_read;
-	      unsigned long arg;
-
-	      opcode = read_1_byte (abfd, mac_ptr);
-	      ++mac_ptr;
-	      opcode_definitions[opcode] = mac_ptr;
-	      arg = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	      mac_ptr += bytes_read;
-	      mac_ptr += arg;
-	    }
-	}
-    }
-
-  return mac_ptr;
-}
-
-/* A helper for dwarf_decode_macros that handles the GNU extensions,
-   including DW_MACRO_import.  */
-
-static void
-dwarf_decode_macro_bytes (struct dwarf2_cu *cu,
-			  bfd *abfd,
-			  const gdb_byte *mac_ptr, const gdb_byte *mac_end,
-			  struct macro_source_file *current_file,
-			  struct line_header *lh,
-			  struct dwarf2_section_info *section,
-			  int section_is_gnu, int section_is_dwz,
-			  unsigned int offset_size,
-			  htab_t include_hash)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  enum dwarf_macro_record_type macinfo_type;
-  int at_commandline;
-  const gdb_byte *opcode_definitions[256];
-
-  mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr,
-				      &offset_size, section_is_gnu);
-  if (mac_ptr == NULL)
-    {
-      /* We already issued a complaint.  */
-      return;
-    }
-
-  /* Determines if GDB is still before first DW_MACINFO_start_file.  If true
-     GDB is still reading the definitions from command line.  First
-     DW_MACINFO_start_file will need to be ignored as it was already executed
-     to create CURRENT_FILE for the main source holding also the command line
-     definitions.  On first met DW_MACINFO_start_file this flag is reset to
-     normally execute all the remaining DW_MACINFO_start_file macinfos.  */
-
-  at_commandline = 1;
-
-  do
-    {
-      /* Do we at least have room for a macinfo type byte?  */
-      if (mac_ptr >= mac_end)
-	{
-	  dwarf2_section_buffer_overflow_complaint (section);
-	  break;
-	}
-
-      macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr);
-      mac_ptr++;
-
-      /* Note that we rely on the fact that the corresponding GNU and
-	 DWARF constants are the same.  */
-      DIAGNOSTIC_PUSH
-      DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
-      switch (macinfo_type)
-	{
-	  /* A zero macinfo type indicates the end of the macro
-	     information.  */
-	case 0:
-	  break;
-
-        case DW_MACRO_define:
-        case DW_MACRO_undef:
-	case DW_MACRO_define_strp:
-	case DW_MACRO_undef_strp:
-	case DW_MACRO_define_sup:
-	case DW_MACRO_undef_sup:
-          {
-            unsigned int bytes_read;
-            int line;
-            const char *body;
-	    int is_define;
-
-	    line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	    mac_ptr += bytes_read;
-
-	    if (macinfo_type == DW_MACRO_define
-		|| macinfo_type == DW_MACRO_undef)
-	      {
-		body = read_direct_string (abfd, mac_ptr, &bytes_read);
-		mac_ptr += bytes_read;
-	      }
-	    else
-	      {
-		LONGEST str_offset;
-
-		str_offset = read_offset_1 (abfd, mac_ptr, offset_size);
-		mac_ptr += offset_size;
-
-		if (macinfo_type == DW_MACRO_define_sup
-		    || macinfo_type == DW_MACRO_undef_sup
-		    || section_is_dwz)
-		  {
-		    struct dwz_file *dwz
-		      = dwarf2_get_dwz_file (dwarf2_per_objfile);
-
-		    body = read_indirect_string_from_dwz (objfile,
-							  dwz, str_offset);
-		  }
-		else
-		  body = read_indirect_string_at_offset (dwarf2_per_objfile,
-							 abfd, str_offset);
-	      }
-
-	    is_define = (macinfo_type == DW_MACRO_define
-			 || macinfo_type == DW_MACRO_define_strp
-			 || macinfo_type == DW_MACRO_define_sup);
-            if (! current_file)
-	      {
-		/* DWARF violation as no main source is present.  */
-		complaint (_("debug info with no main source gives macro %s "
-			     "on line %d: %s"),
-			   is_define ? _("definition") : _("undefinition"),
-			   line, body);
-		break;
-	      }
-	    if ((line == 0 && !at_commandline)
-		|| (line != 0 && at_commandline))
-	      complaint (_("debug info gives %s macro %s with %s line %d: %s"),
-			 at_commandline ? _("command-line") : _("in-file"),
-			 is_define ? _("definition") : _("undefinition"),
-			 line == 0 ? _("zero") : _("non-zero"), line, body);
-
-	    if (body == NULL)
-	      {
-		/* Fedora's rpm-build's "debugedit" binary
-		   corrupted .debug_macro sections.
-
-		   For more info, see
-		   https://bugzilla.redhat.com/show_bug.cgi?id=1708786 */
-		complaint (_("debug info gives %s invalid macro %s "
-			     "without body (corrupted?) at line %d "
-			     "on file %s"),
-			   at_commandline ? _("command-line") : _("in-file"),
-			   is_define ? _("definition") : _("undefinition"),
-			   line, current_file->filename);
-	      }
-	    else if (is_define)
-	      parse_macro_definition (current_file, line, body);
-	    else
-	      {
-		gdb_assert (macinfo_type == DW_MACRO_undef
-			    || macinfo_type == DW_MACRO_undef_strp
-			    || macinfo_type == DW_MACRO_undef_sup);
-		macro_undef (current_file, line, body);
-	      }
-          }
-          break;
-
-        case DW_MACRO_start_file:
-          {
-            unsigned int bytes_read;
-            int line, file;
-
-            line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-            mac_ptr += bytes_read;
-            file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-            mac_ptr += bytes_read;
-
-	    if ((line == 0 && !at_commandline)
-		|| (line != 0 && at_commandline))
-	      complaint (_("debug info gives source %d included "
-			   "from %s at %s line %d"),
-			 file, at_commandline ? _("command-line") : _("file"),
-			 line == 0 ? _("zero") : _("non-zero"), line);
-
-	    if (at_commandline)
-	      {
-		/* This DW_MACRO_start_file was executed in the
-		   pass one.  */
-		at_commandline = 0;
-	      }
-	    else
-	      current_file = macro_start_file (cu, file, line, current_file,
-					       lh);
-          }
-          break;
-
-        case DW_MACRO_end_file:
-          if (! current_file)
-	    complaint (_("macro debug info has an unmatched "
-			 "`close_file' directive"));
-          else
-            {
-              current_file = current_file->included_by;
-              if (! current_file)
-                {
-                  enum dwarf_macro_record_type next_type;
-
-                  /* GCC circa March 2002 doesn't produce the zero
-                     type byte marking the end of the compilation
-                     unit.  Complain if it's not there, but exit no
-                     matter what.  */
-
-                  /* Do we at least have room for a macinfo type byte?  */
-                  if (mac_ptr >= mac_end)
-                    {
-		      dwarf2_section_buffer_overflow_complaint (section);
-                      return;
-                    }
-
-                  /* We don't increment mac_ptr here, so this is just
-                     a look-ahead.  */
-                  next_type
-		    = (enum dwarf_macro_record_type) read_1_byte (abfd,
-								  mac_ptr);
-                  if (next_type != 0)
-		    complaint (_("no terminating 0-type entry for "
-				 "macros in `.debug_macinfo' section"));
-
-                  return;
-                }
-            }
-          break;
-
-	case DW_MACRO_import:
-	case DW_MACRO_import_sup:
-	  {
-	    LONGEST offset;
-	    void **slot;
-	    bfd *include_bfd = abfd;
-	    struct dwarf2_section_info *include_section = section;
-	    const gdb_byte *include_mac_end = mac_end;
-	    int is_dwz = section_is_dwz;
-	    const gdb_byte *new_mac_ptr;
-
-	    offset = read_offset_1 (abfd, mac_ptr, offset_size);
-	    mac_ptr += offset_size;
-
-	    if (macinfo_type == DW_MACRO_import_sup)
-	      {
-		struct dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-
-		dwarf2_read_section (objfile, &dwz->macro);
-
-		include_section = &dwz->macro;
-		include_bfd = get_section_bfd_owner (include_section);
-		include_mac_end = dwz->macro.buffer + dwz->macro.size;
-		is_dwz = 1;
-	      }
-
-	    new_mac_ptr = include_section->buffer + offset;
-	    slot = htab_find_slot (include_hash, new_mac_ptr, INSERT);
-
-	    if (*slot != NULL)
-	      {
-		/* This has actually happened; see
-		   http://sourceware.org/bugzilla/show_bug.cgi?id=13568.  */
-		complaint (_("recursive DW_MACRO_import in "
-			     ".debug_macro section"));
-	      }
-	    else
-	      {
-		*slot = (void *) new_mac_ptr;
-
-		dwarf_decode_macro_bytes (cu, include_bfd, new_mac_ptr,
-					  include_mac_end, current_file, lh,
-					  section, section_is_gnu, is_dwz,
-					  offset_size, include_hash);
-
-		htab_remove_elt (include_hash, (void *) new_mac_ptr);
-	      }
-	  }
-	  break;
-
-        case DW_MACINFO_vendor_ext:
-	  if (!section_is_gnu)
-	    {
-	      unsigned int bytes_read;
-
-	      /* This reads the constant, but since we don't recognize
-		 any vendor extensions, we ignore it.  */
-	      read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	      mac_ptr += bytes_read;
-	      read_direct_string (abfd, mac_ptr, &bytes_read);
-	      mac_ptr += bytes_read;
-
-	      /* We don't recognize any vendor extensions.  */
-	      break;
-	    }
-	  /* FALLTHROUGH */
-
-	default:
-	  mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
-					 mac_ptr, mac_end, abfd, offset_size,
-					 section);
-	  if (mac_ptr == NULL)
-	    return;
-	  break;
-        }
-      DIAGNOSTIC_POP
-    } while (macinfo_type != 0);
-}
-
-static void
-dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
-                     int section_is_gnu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct line_header *lh = cu->line_header;
-  bfd *abfd;
-  const gdb_byte *mac_ptr, *mac_end;
-  struct macro_source_file *current_file = 0;
-  enum dwarf_macro_record_type macinfo_type;
-  unsigned int offset_size = cu->header.offset_size;
-  const gdb_byte *opcode_definitions[256];
-  void **slot;
-  struct dwarf2_section_info *section;
-  const char *section_name;
-
-  if (cu->dwo_unit != NULL)
-    {
-      if (section_is_gnu)
-	{
-	  section = &cu->dwo_unit->dwo_file->sections.macro;
-	  section_name = ".debug_macro.dwo";
-	}
-      else
-	{
-	  section = &cu->dwo_unit->dwo_file->sections.macinfo;
-	  section_name = ".debug_macinfo.dwo";
-	}
-    }
-  else
-    {
-      if (section_is_gnu)
-	{
-	  section = &dwarf2_per_objfile->macro;
-	  section_name = ".debug_macro";
-	}
-      else
-	{
-	  section = &dwarf2_per_objfile->macinfo;
-	  section_name = ".debug_macinfo";
-	}
-    }
-
-  dwarf2_read_section (objfile, section);
-  if (section->buffer == NULL)
-    {
-      complaint (_("missing %s section"), section_name);
-      return;
-    }
-  abfd = get_section_bfd_owner (section);
-
-  /* First pass: Find the name of the base filename.
-     This filename is needed in order to process all macros whose definition
-     (or undefinition) comes from the command line.  These macros are defined
-     before the first DW_MACINFO_start_file entry, and yet still need to be
-     associated to the base file.
-
-     To determine the base file name, we scan the macro definitions until we
-     reach the first DW_MACINFO_start_file entry.  We then initialize
-     CURRENT_FILE accordingly so that any macro definition found before the
-     first DW_MACINFO_start_file can still be associated to the base file.  */
-
-  mac_ptr = section->buffer + offset;
-  mac_end = section->buffer + section->size;
-
-  mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr,
-				      &offset_size, section_is_gnu);
-  if (mac_ptr == NULL)
-    {
-      /* We already issued a complaint.  */
-      return;
-    }
-
-  do
-    {
-      /* Do we at least have room for a macinfo type byte?  */
-      if (mac_ptr >= mac_end)
-        {
-	  /* Complaint is printed during the second pass as GDB will probably
-	     stop the first pass earlier upon finding
-	     DW_MACINFO_start_file.  */
-	  break;
-        }
-
-      macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr);
-      mac_ptr++;
-
-      /* Note that we rely on the fact that the corresponding GNU and
-	 DWARF constants are the same.  */
-      DIAGNOSTIC_PUSH
-      DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
-      switch (macinfo_type)
-        {
-          /* A zero macinfo type indicates the end of the macro
-             information.  */
-        case 0:
-	  break;
-
-	case DW_MACRO_define:
-	case DW_MACRO_undef:
-	  /* Only skip the data by MAC_PTR.  */
-	  {
-	    unsigned int bytes_read;
-
-	    read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	    mac_ptr += bytes_read;
-	    read_direct_string (abfd, mac_ptr, &bytes_read);
-	    mac_ptr += bytes_read;
-	  }
-	  break;
-
-	case DW_MACRO_start_file:
-	  {
-	    unsigned int bytes_read;
-	    int line, file;
-
-	    line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	    mac_ptr += bytes_read;
-	    file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	    mac_ptr += bytes_read;
-
-	    current_file = macro_start_file (cu, file, line, current_file, lh);
-	  }
-	  break;
-
-	case DW_MACRO_end_file:
-	  /* No data to skip by MAC_PTR.  */
-	  break;
-
-	case DW_MACRO_define_strp:
-	case DW_MACRO_undef_strp:
-	case DW_MACRO_define_sup:
-	case DW_MACRO_undef_sup:
-	  {
-	    unsigned int bytes_read;
-
-	    read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	    mac_ptr += bytes_read;
-	    mac_ptr += offset_size;
-	  }
-	  break;
-
-	case DW_MACRO_import:
-	case DW_MACRO_import_sup:
-	  /* Note that, according to the spec, a transparent include
-	     chain cannot call DW_MACRO_start_file.  So, we can just
-	     skip this opcode.  */
-	  mac_ptr += offset_size;
-	  break;
-
-	case DW_MACINFO_vendor_ext:
-	  /* Only skip the data by MAC_PTR.  */
-	  if (!section_is_gnu)
-	    {
-	      unsigned int bytes_read;
-
-	      read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
-	      mac_ptr += bytes_read;
-	      read_direct_string (abfd, mac_ptr, &bytes_read);
-	      mac_ptr += bytes_read;
-	    }
-	  /* FALLTHROUGH */
-
-	default:
-	  mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
-					 mac_ptr, mac_end, abfd, offset_size,
-					 section);
-	  if (mac_ptr == NULL)
-	    return;
-	  break;
-	}
-      DIAGNOSTIC_POP
-    } while (macinfo_type != 0 && current_file == NULL);
-
-  /* Second pass: Process all entries.
-
-     Use the AT_COMMAND_LINE flag to determine whether we are still processing
-     command-line macro definitions/undefinitions.  This flag is unset when we
-     reach the first DW_MACINFO_start_file entry.  */
-
-  htab_up include_hash (htab_create_alloc (1, htab_hash_pointer,
-					   htab_eq_pointer,
-					   NULL, xcalloc, xfree));
-  mac_ptr = section->buffer + offset;
-  slot = htab_find_slot (include_hash.get (), mac_ptr, INSERT);
-  *slot = (void *) mac_ptr;
-  dwarf_decode_macro_bytes (cu, abfd, mac_ptr, mac_end,
-			    current_file, lh, section,
-			    section_is_gnu, 0, offset_size,
-			    include_hash.get ());
-}
-
-/* Check if the attribute's form is a DW_FORM_block*
-   if so return true else false.  */
-
-static int
-attr_form_is_block (const struct attribute *attr)
-{
-  return (attr == NULL ? 0 :
-      attr->form == DW_FORM_block1
-      || attr->form == DW_FORM_block2
-      || attr->form == DW_FORM_block4
-      || attr->form == DW_FORM_block
-      || attr->form == DW_FORM_exprloc);
-}
-
-/* Return non-zero if ATTR's value is a section offset --- classes
-   lineptr, loclistptr, macptr or rangelistptr --- or zero, otherwise.
-   You may use DW_UNSND (attr) to retrieve such offsets.
-
-   Section 7.5.4, "Attribute Encodings", explains that no attribute
-   may have a value that belongs to more than one of these classes; it
-   would be ambiguous if we did, because we use the same forms for all
-   of them.  */
-
-static int
-attr_form_is_section_offset (const struct attribute *attr)
-{
-  return (attr->form == DW_FORM_data4
-          || attr->form == DW_FORM_data8
-	  || attr->form == DW_FORM_sec_offset);
-}
-
-/* Return non-zero if ATTR's value falls in the 'constant' class, or
-   zero otherwise.  When this function returns true, you can apply
-   dwarf2_get_attr_constant_value to it.
-
-   However, note that for some attributes you must check
-   attr_form_is_section_offset before using this test.  DW_FORM_data4
-   and DW_FORM_data8 are members of both the constant class, and of
-   the classes that contain offsets into other debug sections
-   (lineptr, loclistptr, macptr or rangelistptr).  The DWARF spec says
-   that, if an attribute's can be either a constant or one of the
-   section offset classes, DW_FORM_data4 and DW_FORM_data8 should be
-   taken as section offsets, not constants.
-
-   DW_FORM_data16 is not considered as dwarf2_get_attr_constant_value
-   cannot handle that.  */
-
-static int
-attr_form_is_constant (const struct attribute *attr)
-{
-  switch (attr->form)
-    {
-    case DW_FORM_sdata:
-    case DW_FORM_udata:
-    case DW_FORM_data1:
-    case DW_FORM_data2:
-    case DW_FORM_data4:
-    case DW_FORM_data8:
-    case DW_FORM_implicit_const:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-
-/* DW_ADDR is always stored already as sect_offset; despite for the forms
-   besides DW_FORM_ref_addr it is stored as cu_offset in the DWARF file.  */
-
-static int
-attr_form_is_ref (const struct attribute *attr)
-{
-  switch (attr->form)
-    {
-    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_GNU_ref_alt:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-/* Return the .debug_loc section to use for CU.
-   For DWO files use .debug_loc.dwo.  */
-
-static struct dwarf2_section_info *
-cu_debug_loc_section (struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-
-  if (cu->dwo_unit)
-    {
-      struct dwo_sections *sections = &cu->dwo_unit->dwo_file->sections;
-
-      return cu->header.version >= 5 ? &sections->loclists : &sections->loc;
-    }
-  return (cu->header.version >= 5 ? &dwarf2_per_objfile->loclists
-				  : &dwarf2_per_objfile->loc);
-}
-
-/* A helper function that fills in a dwarf2_loclist_baton.  */
-
-static void
-fill_in_loclist_baton (struct dwarf2_cu *cu,
-		       struct dwarf2_loclist_baton *baton,
-		       const struct attribute *attr)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
-
-  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
-
-  baton->per_cu = cu->per_cu;
-  gdb_assert (baton->per_cu);
-  /* We don't know how long the location list is, but make sure we
-     don't run off the edge of the section.  */
-  baton->size = section->size - DW_UNSND (attr);
-  baton->data = section->buffer + DW_UNSND (attr);
-  baton->base_address = cu->base_address;
-  baton->from_dwo = cu->dwo_unit != NULL;
-}
-
-static void
-dwarf2_symbol_mark_computed (const struct attribute *attr, struct symbol *sym,
-			     struct dwarf2_cu *cu, int is_block)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
-
-  if (attr_form_is_section_offset (attr)
-      /* .debug_loc{,.dwo} may not exist at all, or the offset may be outside
-	 the section.  If so, fall through to the complaint in the
-	 other branch.  */
-      && DW_UNSND (attr) < dwarf2_section_size (objfile, section))
-    {
-      struct dwarf2_loclist_baton *baton;
-
-      baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_loclist_baton);
-
-      fill_in_loclist_baton (cu, baton, attr);
-
-      if (cu->base_known == 0)
-	complaint (_("Location list used without "
-		     "specifying the CU base address."));
-
-      SYMBOL_ACLASS_INDEX (sym) = (is_block
-				   ? dwarf2_loclist_block_index
-				   : dwarf2_loclist_index);
-      SYMBOL_LOCATION_BATON (sym) = baton;
-    }
-  else
-    {
-      struct dwarf2_locexpr_baton *baton;
-
-      baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton);
-      baton->per_cu = cu->per_cu;
-      gdb_assert (baton->per_cu);
-
-      if (attr_form_is_block (attr))
-	{
-	  /* Note that we're just copying the block's data pointer
-	     here, not the actual data.  We're still pointing into the
-	     info_buffer for SYM's objfile; right now we never release
-	     that buffer, but when we do clean up properly this may
-	     need to change.  */
-	  baton->size = DW_BLOCK (attr)->size;
-	  baton->data = DW_BLOCK (attr)->data;
-	}
-      else
-	{
-	  dwarf2_invalid_attrib_class_complaint ("location description",
-						 sym->natural_name ());
-	  baton->size = 0;
-	}
-
-      SYMBOL_ACLASS_INDEX (sym) = (is_block
-				   ? dwarf2_locexpr_block_index
-				   : dwarf2_locexpr_index);
-      SYMBOL_LOCATION_BATON (sym) = baton;
-    }
-}
-
-/* Return the OBJFILE associated with the compilation unit CU.  If CU
-   came from a separate debuginfo file, then the master objfile is
-   returned.  */
-
-struct objfile *
-dwarf2_per_cu_objfile (struct dwarf2_per_cu_data *per_cu)
-{
-  struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile;
-
-  /* Return the master objfile, so that we can report and look up the
-     correct file containing this variable.  */
-  if (objfile->separate_debug_objfile_backlink)
-    objfile = objfile->separate_debug_objfile_backlink;
-
-  return objfile;
-}
-
-/* Return comp_unit_head for PER_CU, either already available in PER_CU->CU
-   (CU_HEADERP is unused in such case) or prepare a temporary copy at
-   CU_HEADERP first.  */
-
-static const struct comp_unit_head *
-per_cu_header_read_in (struct comp_unit_head *cu_headerp,
-		       struct dwarf2_per_cu_data *per_cu)
-{
-  const gdb_byte *info_ptr;
-
-  if (per_cu->cu)
-    return &per_cu->cu->header;
-
-  info_ptr = per_cu->section->buffer + to_underlying (per_cu->sect_off);
-
-  memset (cu_headerp, 0, sizeof (*cu_headerp));
-  read_comp_unit_head (cu_headerp, info_ptr, per_cu->section,
-		       rcuh_kind::COMPILE);
-
-  return cu_headerp;
-}
-
-/* Return the address size given in the compilation unit header for CU.  */
-
-int
-dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *per_cu)
-{
-  struct comp_unit_head cu_header_local;
-  const struct comp_unit_head *cu_headerp;
-
-  cu_headerp = per_cu_header_read_in (&cu_header_local, per_cu);
-
-  return cu_headerp->addr_size;
-}
-
-/* Return the offset size given in the compilation unit header for CU.  */
-
-int
-dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *per_cu)
-{
-  struct comp_unit_head cu_header_local;
-  const struct comp_unit_head *cu_headerp;
-
-  cu_headerp = per_cu_header_read_in (&cu_header_local, per_cu);
-
-  return cu_headerp->offset_size;
-}
-
-/* See its dwarf2loc.h declaration.  */
-
-int
-dwarf2_per_cu_ref_addr_size (struct dwarf2_per_cu_data *per_cu)
-{
-  struct comp_unit_head cu_header_local;
-  const struct comp_unit_head *cu_headerp;
-
-  cu_headerp = per_cu_header_read_in (&cu_header_local, per_cu);
-
-  if (cu_headerp->version == 2)
-    return cu_headerp->addr_size;
-  else
-    return cu_headerp->offset_size;
-}
-
-/* Return the text offset of the CU.  The returned offset comes from
-   this CU's objfile.  If this objfile came from a separate debuginfo
-   file, then the offset may be different from the corresponding
-   offset in the parent objfile.  */
-
-CORE_ADDR
-dwarf2_per_cu_text_offset (struct dwarf2_per_cu_data *per_cu)
-{
-  struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile;
-
-  return ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
-}
-
-/* Return a type that is a generic pointer type, the size of which matches
-   the address size given in the compilation unit header for PER_CU.  */
-static struct type *
-dwarf2_per_cu_addr_type (struct dwarf2_per_cu_data *per_cu)
-{
-  struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile;
-  struct type *void_type = objfile_type (objfile)->builtin_void;
-  struct type *addr_type = lookup_pointer_type (void_type);
-  int addr_size = dwarf2_per_cu_addr_size (per_cu);
-
-  if (TYPE_LENGTH (addr_type) == addr_size)
-    return addr_type;
-
-  addr_type
-    = dwarf2_per_cu_addr_sized_int_type (per_cu, TYPE_UNSIGNED (addr_type));
-  return addr_type;
-}
-
-/* Return DWARF version number of PER_CU.  */
-
-short
-dwarf2_version (struct dwarf2_per_cu_data *per_cu)
-{
-  return per_cu->dwarf_version;
-}
-
-/* Locate the .debug_info compilation unit from CU's objfile which contains
-   the DIE at OFFSET.  Raises an error on failure.  */
-
-static struct dwarf2_per_cu_data *
-dwarf2_find_containing_comp_unit (sect_offset sect_off,
-				  unsigned int offset_in_dwz,
-				  struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct dwarf2_per_cu_data *this_cu;
-  int low, high;
-
-  low = 0;
-  high = dwarf2_per_objfile->all_comp_units.size () - 1;
-  while (high > low)
-    {
-      struct dwarf2_per_cu_data *mid_cu;
-      int mid = low + (high - low) / 2;
-
-      mid_cu = dwarf2_per_objfile->all_comp_units[mid];
-      if (mid_cu->is_dwz > offset_in_dwz
-	  || (mid_cu->is_dwz == offset_in_dwz
-	      && mid_cu->sect_off + mid_cu->length >= sect_off))
-	high = mid;
-      else
-	low = mid + 1;
-    }
-  gdb_assert (low == high);
-  this_cu = dwarf2_per_objfile->all_comp_units[low];
-  if (this_cu->is_dwz != offset_in_dwz || this_cu->sect_off > sect_off)
-    {
-      if (low == 0 || this_cu->is_dwz != offset_in_dwz)
-	error (_("Dwarf Error: could not find partial DIE containing "
-	       "offset %s [in module %s]"),
-	       sect_offset_str (sect_off),
-	       bfd_get_filename (dwarf2_per_objfile->objfile->obfd));
-
-      gdb_assert (dwarf2_per_objfile->all_comp_units[low-1]->sect_off
-		  <= sect_off);
-      return dwarf2_per_objfile->all_comp_units[low-1];
-    }
-  else
-    {
-      if (low == dwarf2_per_objfile->all_comp_units.size () - 1
-	  && sect_off >= this_cu->sect_off + this_cu->length)
-	error (_("invalid dwarf2 offset %s"), sect_offset_str (sect_off));
-      gdb_assert (sect_off < this_cu->sect_off + this_cu->length);
-      return this_cu;
-    }
-}
-
-/* Initialize dwarf2_cu CU, owned by PER_CU.  */
-
-dwarf2_cu::dwarf2_cu (struct dwarf2_per_cu_data *per_cu_)
-  : per_cu (per_cu_),
-    mark (false),
-    has_loclist (false),
-    checked_producer (false),
-    producer_is_gxx_lt_4_6 (false),
-    producer_is_gcc_lt_4_3 (false),
-    producer_is_icc (false),
-    producer_is_icc_lt_14 (false),
-    producer_is_codewarrior (false),
-    processing_has_namespace_info (false)
-{
-  per_cu->cu = this;
-}
-
-/* Destroy a dwarf2_cu.  */
-
-dwarf2_cu::~dwarf2_cu ()
-{
-  per_cu->cu = NULL;
-}
-
-/* Initialize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE.  */
-
-static void
-prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die,
-		       enum language pretend_language)
-{
-  struct attribute *attr;
-
-  /* Set the language we're debugging.  */
-  attr = dwarf2_attr (comp_unit_die, DW_AT_language, cu);
-  if (attr != nullptr)
-    set_cu_language (DW_UNSND (attr), cu);
-  else
-    {
-      cu->language = pretend_language;
-      cu->language_defn = language_def (cu->language);
-    }
-
-  cu->producer = dwarf2_string_attr (comp_unit_die, DW_AT_producer, cu);
-}
-
-/* Increase the age counter on each cached compilation unit, and free
-   any that are too old.  */
-
-static void
-age_cached_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  struct dwarf2_per_cu_data *per_cu, **last_chain;
-
-  dwarf2_clear_marks (dwarf2_per_objfile->read_in_chain);
-  per_cu = dwarf2_per_objfile->read_in_chain;
-  while (per_cu != NULL)
-    {
-      per_cu->cu->last_used ++;
-      if (per_cu->cu->last_used <= dwarf_max_cache_age)
-	dwarf2_mark (per_cu->cu);
-      per_cu = per_cu->cu->read_in_chain;
-    }
-
-  per_cu = dwarf2_per_objfile->read_in_chain;
-  last_chain = &dwarf2_per_objfile->read_in_chain;
-  while (per_cu != NULL)
-    {
-      struct dwarf2_per_cu_data *next_cu;
-
-      next_cu = per_cu->cu->read_in_chain;
-
-      if (!per_cu->cu->mark)
-	{
-	  delete per_cu->cu;
-	  *last_chain = next_cu;
-	}
-      else
-	last_chain = &per_cu->cu->read_in_chain;
-
-      per_cu = next_cu;
-    }
-}
-
-/* Remove a single compilation unit from the cache.  */
-
-static void
-free_one_cached_comp_unit (struct dwarf2_per_cu_data *target_per_cu)
-{
-  struct dwarf2_per_cu_data *per_cu, **last_chain;
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = target_per_cu->dwarf2_per_objfile;
-
-  per_cu = dwarf2_per_objfile->read_in_chain;
-  last_chain = &dwarf2_per_objfile->read_in_chain;
-  while (per_cu != NULL)
-    {
-      struct dwarf2_per_cu_data *next_cu;
-
-      next_cu = per_cu->cu->read_in_chain;
-
-      if (per_cu == target_per_cu)
-	{
-	  delete per_cu->cu;
-	  per_cu->cu = NULL;
-	  *last_chain = next_cu;
-	  break;
-	}
-      else
-	last_chain = &per_cu->cu->read_in_chain;
-
-      per_cu = next_cu;
-    }
-}
-
-/* A set of CU "per_cu" pointer, DIE offset, and GDB type pointer.
-   We store these in a hash table separate from the DIEs, and preserve them
-   when the DIEs are flushed out of cache.
-
-   The CU "per_cu" pointer is needed because offset alone is not enough to
-   uniquely identify the type.  A file may have multiple .debug_types sections,
-   or the type may come from a DWO file.  Furthermore, while it's more logical
-   to use per_cu->section+offset, with Fission the section with the data is in
-   the DWO file but we don't know that section at the point we need it.
-   We have to use something in dwarf2_per_cu_data (or the pointer to it)
-   because we can enter the lookup routine, get_die_type_at_offset, from
-   outside this file, and thus won't necessarily have PER_CU->cu.
-   Fortunately, PER_CU is stable for the life of the objfile.  */
-
-struct dwarf2_per_cu_offset_and_type
-{
-  const struct dwarf2_per_cu_data *per_cu;
-  sect_offset sect_off;
-  struct type *type;
-};
-
-/* Hash function for a dwarf2_per_cu_offset_and_type.  */
-
-static hashval_t
-per_cu_offset_and_type_hash (const void *item)
-{
-  const struct dwarf2_per_cu_offset_and_type *ofs
-    = (const struct dwarf2_per_cu_offset_and_type *) item;
-
-  return (uintptr_t) ofs->per_cu + to_underlying (ofs->sect_off);
-}
-
-/* Equality function for a dwarf2_per_cu_offset_and_type.  */
-
-static int
-per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs)
-{
-  const struct dwarf2_per_cu_offset_and_type *ofs_lhs
-    = (const struct dwarf2_per_cu_offset_and_type *) item_lhs;
-  const struct dwarf2_per_cu_offset_and_type *ofs_rhs
-    = (const struct dwarf2_per_cu_offset_and_type *) item_rhs;
-
-  return (ofs_lhs->per_cu == ofs_rhs->per_cu
-	  && ofs_lhs->sect_off == ofs_rhs->sect_off);
-}
-
-/* Set the type associated with DIE to TYPE.  Save it in CU's hash
-   table if necessary.  For convenience, return TYPE.
-
-   The DIEs reading must have careful ordering to:
-    * Not cause infinite loops trying to read in DIEs as a prerequisite for
-      reading current DIE.
-    * Not trying to dereference contents of still incompletely read in types
-      while reading in other DIEs.
-    * Enable referencing still incompletely read in types just by a pointer to
-      the type without accessing its fields.
-
-   Therefore caller should follow these rules:
-     * Try to fetch any prerequisite types we may need to build this DIE type
-       before building the type and calling set_die_type.
-     * After building type call set_die_type for current DIE as soon as
-       possible before fetching more types to complete the current type.
-     * Make the type as complete as possible before fetching more types.  */
-
-static struct type *
-set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
-{
-  struct dwarf2_per_objfile *dwarf2_per_objfile
-    = cu->per_cu->dwarf2_per_objfile;
-  struct dwarf2_per_cu_offset_and_type **slot, ofs;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  struct attribute *attr;
-  struct dynamic_prop prop;
-
-  /* For Ada types, make sure that the gnat-specific data is always
-     initialized (if not already set).  There are a few types where
-     we should not be doing so, because the type-specific area is
-     already used to hold some other piece of info (eg: TYPE_CODE_FLT
-     where the type-specific area is used to store the floatformat).
-     But this is not a problem, because the gnat-specific information
-     is actually not needed for these types.  */
-  if (need_gnat_info (cu)
-      && TYPE_CODE (type) != TYPE_CODE_FUNC
-      && TYPE_CODE (type) != TYPE_CODE_FLT
-      && TYPE_CODE (type) != TYPE_CODE_METHODPTR
-      && TYPE_CODE (type) != TYPE_CODE_MEMBERPTR
-      && TYPE_CODE (type) != TYPE_CODE_METHOD
-      && !HAVE_GNAT_AUX_INFO (type))
-    INIT_GNAT_SPECIFIC (type);
-
-  /* Read DW_AT_allocated and set in type.  */
-  attr = dwarf2_attr (die, DW_AT_allocated, cu);
-  if (attr_form_is_block (attr))
-    {
-      struct type *prop_type
-	= dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
-      if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
-        add_dyn_prop (DYN_PROP_ALLOCATED, prop, type);
-    }
-  else if (attr != NULL)
-    {
-      complaint (_("DW_AT_allocated has the wrong form (%s) at DIE %s"),
-		 (attr != NULL ? dwarf_form_name (attr->form) : "n/a"),
-		 sect_offset_str (die->sect_off));
-    }
-
-  /* Read DW_AT_associated and set in type.  */
-  attr = dwarf2_attr (die, DW_AT_associated, cu);
-  if (attr_form_is_block (attr))
-    {
-      struct type *prop_type
-	= dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
-      if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
-        add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type);
-    }
-  else if (attr != NULL)
-    {
-      complaint (_("DW_AT_associated has the wrong form (%s) at DIE %s"),
-		 (attr != NULL ? dwarf_form_name (attr->form) : "n/a"),
-		 sect_offset_str (die->sect_off));
-    }
-
-  /* Read DW_AT_data_location and set in type.  */
-  attr = dwarf2_attr (die, DW_AT_data_location, cu);
-  if (attr_to_dynamic_prop (attr, die, cu, &prop,
-			    dwarf2_per_cu_addr_type (cu->per_cu)))
-    add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type);
-
-  if (dwarf2_per_objfile->die_type_hash == NULL)
-    {
-      dwarf2_per_objfile->die_type_hash =
-	htab_create_alloc_ex (127,
-			      per_cu_offset_and_type_hash,
-			      per_cu_offset_and_type_eq,
-			      NULL,
-			      &objfile->objfile_obstack,
-			      hashtab_obstack_allocate,
-			      dummy_obstack_deallocate);
-    }
-
-  ofs.per_cu = cu->per_cu;
-  ofs.sect_off = die->sect_off;
-  ofs.type = type;
-  slot = (struct dwarf2_per_cu_offset_and_type **)
-    htab_find_slot (dwarf2_per_objfile->die_type_hash, &ofs, INSERT);
-  if (*slot)
-    complaint (_("A problem internal to GDB: DIE %s has type already set"),
-	       sect_offset_str (die->sect_off));
-  *slot = XOBNEW (&objfile->objfile_obstack,
-		  struct dwarf2_per_cu_offset_and_type);
-  **slot = ofs;
-  return type;
-}
-
-/* Look up the type for the die at SECT_OFF in PER_CU in die_type_hash,
-   or return NULL if the die does not have a saved type.  */
-
-static struct type *
-get_die_type_at_offset (sect_offset sect_off,
-			struct dwarf2_per_cu_data *per_cu)
-{
-  struct dwarf2_per_cu_offset_and_type *slot, ofs;
-  struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
-
-  if (dwarf2_per_objfile->die_type_hash == NULL)
-    return NULL;
-
-  ofs.per_cu = per_cu;
-  ofs.sect_off = sect_off;
-  slot = ((struct dwarf2_per_cu_offset_and_type *)
-	  htab_find (dwarf2_per_objfile->die_type_hash, &ofs));
-  if (slot)
-    return slot->type;
-  else
-    return NULL;
-}
-
-/* Look up the type for DIE in CU in die_type_hash,
-   or return NULL if DIE does not have a saved type.  */
-
-static struct type *
-get_die_type (struct die_info *die, struct dwarf2_cu *cu)
-{
-  return get_die_type_at_offset (die->sect_off, cu->per_cu);
-}
-
-/* Add a dependence relationship from CU to REF_PER_CU.  */
-
-static void
-dwarf2_add_dependence (struct dwarf2_cu *cu,
-		       struct dwarf2_per_cu_data *ref_per_cu)
-{
-  void **slot;
-
-  if (cu->dependencies == NULL)
-    cu->dependencies
-      = htab_create_alloc_ex (5, htab_hash_pointer, htab_eq_pointer,
-			      NULL, &cu->comp_unit_obstack,
-			      hashtab_obstack_allocate,
-			      dummy_obstack_deallocate);
-
-  slot = htab_find_slot (cu->dependencies, ref_per_cu, INSERT);
-  if (*slot == NULL)
-    *slot = ref_per_cu;
-}
-
-/* Subroutine of dwarf2_mark to pass to htab_traverse.
-   Set the mark field in every compilation unit in the
-   cache that we must keep because we are keeping CU.  */
-
-static int
-dwarf2_mark_helper (void **slot, void *data)
-{
-  struct dwarf2_per_cu_data *per_cu;
-
-  per_cu = (struct dwarf2_per_cu_data *) *slot;
-
-  /* cu->dependencies references may not yet have been ever read if QUIT aborts
-     reading of the chain.  As such dependencies remain valid it is not much
-     useful to track and undo them during QUIT cleanups.  */
-  if (per_cu->cu == NULL)
-    return 1;
-
-  if (per_cu->cu->mark)
-    return 1;
-  per_cu->cu->mark = true;
-
-  if (per_cu->cu->dependencies != NULL)
-    htab_traverse (per_cu->cu->dependencies, dwarf2_mark_helper, NULL);
-
-  return 1;
-}
-
-/* Set the mark field in CU and in every other compilation unit in the
-   cache that we must keep because we are keeping CU.  */
-
-static void
-dwarf2_mark (struct dwarf2_cu *cu)
-{
-  if (cu->mark)
-    return;
-  cu->mark = true;
-  if (cu->dependencies != NULL)
-    htab_traverse (cu->dependencies, dwarf2_mark_helper, NULL);
-}
-
-static void
-dwarf2_clear_marks (struct dwarf2_per_cu_data *per_cu)
-{
-  while (per_cu)
-    {
-      per_cu->cu->mark = false;
-      per_cu = per_cu->cu->read_in_chain;
-    }
-}
-
-/* Trivial hash function for partial_die_info: the hash value of a DIE
-   is its offset in .debug_info for this objfile.  */
-
-static hashval_t
-partial_die_hash (const void *item)
-{
-  const struct partial_die_info *part_die
-    = (const struct partial_die_info *) item;
-
-  return to_underlying (part_die->sect_off);
-}
-
-/* Trivial comparison function for partial_die_info structures: two DIEs
-   are equal if they have the same offset.  */
-
-static int
-partial_die_eq (const void *item_lhs, const void *item_rhs)
-{
-  const struct partial_die_info *part_die_lhs
-    = (const struct partial_die_info *) item_lhs;
-  const struct partial_die_info *part_die_rhs
-    = (const struct partial_die_info *) item_rhs;
-
-  return part_die_lhs->sect_off == part_die_rhs->sect_off;
-}
-
-struct cmd_list_element *set_dwarf_cmdlist;
-struct cmd_list_element *show_dwarf_cmdlist;
-
-static void
-set_dwarf_cmd (const char *args, int from_tty)
-{
-  help_list (set_dwarf_cmdlist, "maintenance set dwarf ", all_commands,
-	     gdb_stdout);
-}
-
-static void
-show_dwarf_cmd (const char *args, int from_tty)
-{
-  cmd_show_list (show_dwarf_cmdlist, from_tty, "");
-}
-
-bool dwarf_always_disassemble;
-
-static void
-show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
-			       struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file,
-		    _("Whether to always disassemble "
-		      "DWARF expressions is %s.\n"),
-		    value);
-}
-
-static void
-show_check_physname (struct ui_file *file, int from_tty,
-		     struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file,
-		    _("Whether to check \"physname\" is %s.\n"),
-		    value);
-}
-
-void
-_initialize_dwarf2_read (void)
-{
-  add_prefix_cmd ("dwarf", class_maintenance, set_dwarf_cmd, _("\
-Set DWARF specific variables.\n\
-Configure DWARF variables such as the cache size."),
-                  &set_dwarf_cmdlist, "maintenance set dwarf ",
-                  0/*allow-unknown*/, &maintenance_set_cmdlist);
-
-  add_prefix_cmd ("dwarf", class_maintenance, show_dwarf_cmd, _("\
-Show DWARF specific variables.\n\
-Show DWARF variables such as the cache size."),
-                  &show_dwarf_cmdlist, "maintenance show dwarf ",
-                  0/*allow-unknown*/, &maintenance_show_cmdlist);
-
-  add_setshow_zinteger_cmd ("max-cache-age", class_obscure,
-			    &dwarf_max_cache_age, _("\
-Set the upper bound on the age of cached DWARF compilation units."), _("\
-Show the upper bound on the age of cached DWARF compilation units."), _("\
-A higher limit means that cached compilation units will be stored\n\
-in memory longer, and more total memory will be used.  Zero disables\n\
-caching, which can slow down startup."),
-			    NULL,
-			    show_dwarf_max_cache_age,
-			    &set_dwarf_cmdlist,
-			    &show_dwarf_cmdlist);
-
-  add_setshow_boolean_cmd ("always-disassemble", class_obscure,
-			   &dwarf_always_disassemble, _("\
-Set whether `info address' always disassembles DWARF expressions."), _("\
-Show whether `info address' always disassembles DWARF expressions."), _("\
-When enabled, DWARF expressions are always printed in an assembly-like\n\
-syntax.  When disabled, expressions will be printed in a more\n\
-conversational style, when possible."),
-			   NULL,
-			   show_dwarf_always_disassemble,
-			   &set_dwarf_cmdlist,
-			   &show_dwarf_cmdlist);
-
-  add_setshow_zuinteger_cmd ("dwarf-read", no_class, &dwarf_read_debug, _("\
-Set debugging of the DWARF reader."), _("\
-Show debugging of the DWARF reader."), _("\
-When enabled (non-zero), debugging messages are printed during DWARF\n\
-reading and symtab expansion.  A value of 1 (one) provides basic\n\
-information.  A value greater than 1 provides more verbose information."),
-			    NULL,
-			    NULL,
-			    &setdebuglist, &showdebuglist);
-
-  add_setshow_zuinteger_cmd ("dwarf-die", no_class, &dwarf_die_debug, _("\
-Set debugging of the DWARF DIE reader."), _("\
-Show debugging of the DWARF DIE reader."), _("\
-When enabled (non-zero), DIEs are dumped after they are read in.\n\
-The value is the maximum depth to print."),
-			     NULL,
-			     NULL,
-			     &setdebuglist, &showdebuglist);
-
-  add_setshow_zuinteger_cmd ("dwarf-line", no_class, &dwarf_line_debug, _("\
-Set debugging of the dwarf line reader."), _("\
-Show debugging of the dwarf line reader."), _("\
-When enabled (non-zero), line number entries are dumped as they are read in.\n\
-A value of 1 (one) provides basic information.\n\
-A value greater than 1 provides more verbose information."),
-			     NULL,
-			     NULL,
-			     &setdebuglist, &showdebuglist);
-
-  add_setshow_boolean_cmd ("check-physname", no_class, &check_physname, _("\
-Set cross-checking of \"physname\" code against demangler."), _("\
-Show cross-checking of \"physname\" code against demangler."), _("\
-When enabled, GDB's internal \"physname\" code is checked against\n\
-the demangler."),
-			   NULL, show_check_physname,
-			   &setdebuglist, &showdebuglist);
-
-  add_setshow_boolean_cmd ("use-deprecated-index-sections",
-			   no_class, &use_deprecated_index_sections, _("\
-Set whether to use deprecated gdb_index sections."), _("\
-Show whether to use deprecated gdb_index sections."), _("\
-When enabled, deprecated .gdb_index sections are used anyway.\n\
-Normally they are ignored either because of a missing feature or\n\
-performance issue.\n\
-Warning: This option must be enabled before gdb reads the file."),
-			   NULL,
-			   NULL,
-			   &setlist, &showlist);
-
-  dwarf2_locexpr_index = register_symbol_computed_impl (LOC_COMPUTED,
-							&dwarf2_locexpr_funcs);
-  dwarf2_loclist_index = register_symbol_computed_impl (LOC_COMPUTED,
-							&dwarf2_loclist_funcs);
-
-  dwarf2_locexpr_block_index = register_symbol_block_impl (LOC_BLOCK,
-					&dwarf2_block_frame_base_locexpr_funcs);
-  dwarf2_loclist_block_index = register_symbol_block_impl (LOC_BLOCK,
-					&dwarf2_block_frame_base_loclist_funcs);
-
-#if GDB_SELF_TEST
-  selftests::register_test ("dw2_expand_symtabs_matching",
-			    selftests::dw2_expand_symtabs_matching::run_test);
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2read.h ./gdb/dwarf2read.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf2read.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf2read.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,484 +0,0 @@
-/* DWARF 2 debugging format support for GDB.
-
-   Copyright (C) 1994-2020 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 DWARF2READ_H
-#define DWARF2READ_H
-
-#include <unordered_map>
-#include "dwarf-index-cache.h"
-#include "filename-seen-cache.h"
-#include "gdb_obstack.h"
-#include "gdbsupport/hash_enum.h"
-
-/* Hold 'maintenance (set|show) dwarf' commands.  */
-extern struct cmd_list_element *set_dwarf_cmdlist;
-extern struct cmd_list_element *show_dwarf_cmdlist;
-
-extern bool dwarf_always_disassemble;
-
-/* A descriptor for dwarf sections.
-
-   S.ASECTION, SIZE are typically initialized when the objfile is first
-   scanned.  BUFFER, READIN are filled in later when the section is read.
-   If the section contained compressed data then SIZE is updated to record
-   the uncompressed size of the section.
-
-   DWP file format V2 introduces a wrinkle that is easiest to handle by
-   creating the concept of virtual sections contained within a real section.
-   In DWP V2 the sections of the input DWO files are concatenated together
-   into one section, but section offsets are kept relative to the original
-   input section.
-   If this is a virtual dwp-v2 section, S.CONTAINING_SECTION is a backlink to
-   the real section this "virtual" section is contained in, and BUFFER,SIZE
-   describe the virtual section.  */
-
-struct dwarf2_section_info
-{
-  union
-  {
-    /* If this is a real section, the bfd section.  */
-    asection *section;
-    /* If this is a virtual section, pointer to the containing ("real")
-       section.  */
-    struct dwarf2_section_info *containing_section;
-  } s;
-  /* Pointer to section data, only valid if readin.  */
-  const gdb_byte *buffer;
-  /* The size of the section, real or virtual.  */
-  bfd_size_type size;
-  /* If this is a virtual section, the offset in the real section.
-     Only valid if is_virtual.  */
-  bfd_size_type virtual_offset;
-  /* True if we have tried to read this section.  */
-  bool readin;
-  /* True if this is a virtual section, False otherwise.
-     This specifies which of s.section and s.containing_section to use.  */
-  bool is_virtual;
-};
-
-/* Read the contents of the section INFO.
-   OBJFILE is the main object file, but not necessarily the file where
-   the section comes from.  E.g., for DWO files the bfd of INFO is the bfd
-   of the DWO file.
-   If the section is compressed, uncompress it before returning.  */
-
-void dwarf2_read_section (struct objfile *objfile, dwarf2_section_info *info);
-
-struct tu_stats
-{
-  int nr_uniq_abbrev_tables;
-  int nr_symtabs;
-  int nr_symtab_sharers;
-  int nr_stmt_less_type_units;
-  int nr_all_type_units_reallocs;
-};
-
-struct dwarf2_debug_sections;
-struct mapped_index;
-struct mapped_debug_names;
-struct signatured_type;
-struct die_info;
-typedef struct die_info *die_info_ptr;
-
-/* Collection of data recorded per objfile.
-   This hangs off of dwarf2_objfile_data_key.  */
-
-struct dwarf2_per_objfile
-{
-  /* Construct a dwarf2_per_objfile for OBJFILE.  NAMES points to the
-     dwarf2 section names, or is NULL if the standard ELF names are
-     used.  CAN_COPY is true for formats where symbol
-     interposition is possible and so symbol values must follow copy
-     relocation rules.  */
-  dwarf2_per_objfile (struct objfile *objfile,
-		      const dwarf2_debug_sections *names,
-		      bool can_copy);
-
-  ~dwarf2_per_objfile ();
-
-  DISABLE_COPY_AND_ASSIGN (dwarf2_per_objfile);
-
-  /* Return the CU/TU given its index.
-
-     This is intended for loops like:
-
-     for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		      + dwarf2_per_objfile->n_type_units); ++i)
-       {
-         dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i);
-
-         ...;
-       }
-  */
-  dwarf2_per_cu_data *get_cutu (int index);
-
-  /* Return the CU given its index.
-     This differs from get_cutu in that it's for when you know INDEX refers to a
-     CU.  */
-  dwarf2_per_cu_data *get_cu (int index);
-
-  /* Return the TU given its index.
-     This differs from get_cutu in that it's for when you know INDEX refers to a
-     TU.  */
-  signatured_type *get_tu (int index);
-
-  /* Free all cached compilation units.  */
-  void free_cached_comp_units ();
-private:
-  /* This function is mapped across the sections and remembers the
-     offset and size of each of the debugging sections we are
-     interested in.  */
-  void locate_sections (bfd *abfd, asection *sectp,
-			const dwarf2_debug_sections &names);
-
-public:
-  dwarf2_section_info info {};
-  dwarf2_section_info abbrev {};
-  dwarf2_section_info line {};
-  dwarf2_section_info loc {};
-  dwarf2_section_info loclists {};
-  dwarf2_section_info macinfo {};
-  dwarf2_section_info macro {};
-  dwarf2_section_info str {};
-  dwarf2_section_info line_str {};
-  dwarf2_section_info ranges {};
-  dwarf2_section_info rnglists {};
-  dwarf2_section_info addr {};
-  dwarf2_section_info frame {};
-  dwarf2_section_info eh_frame {};
-  dwarf2_section_info gdb_index {};
-  dwarf2_section_info debug_names {};
-  dwarf2_section_info debug_aranges {};
-
-  std::vector<dwarf2_section_info> types;
-
-  /* Back link.  */
-  struct objfile *objfile = NULL;
-
-  /* Table of all the compilation units.  This is used to locate
-     the target compilation unit of a particular reference.  */
-  std::vector<dwarf2_per_cu_data *> all_comp_units;
-
-  /* The .debug_types-related CUs (TUs).  */
-  std::vector<signatured_type *> all_type_units;
-
-  /* Table of struct type_unit_group objects.
-     The hash key is the DW_AT_stmt_list value.  */
-  htab_t type_unit_groups {};
-
-  /* A table mapping .debug_types signatures to its signatured_type entry.
-     This is NULL if the .debug_types section hasn't been read in yet.  */
-  htab_t signatured_types {};
-
-  /* Type unit statistics, to see how well the scaling improvements
-     are doing.  */
-  struct tu_stats tu_stats {};
-
-  /* A chain of compilation units that are currently read in, so that
-     they can be freed later.  */
-  dwarf2_per_cu_data *read_in_chain = NULL;
-
-  /* A table mapping DW_AT_dwo_name values to struct dwo_file objects.
-     This is NULL if the table hasn't been allocated yet.  */
-  htab_up dwo_files;
-
-  /* True if we've checked for whether there is a DWP file.  */
-  bool dwp_checked = false;
-
-  /* The DWP file if there is one, or NULL.  */
-  std::unique_ptr<struct dwp_file> dwp_file;
-
-  /* The shared '.dwz' file, if one exists.  This is used when the
-     original data was compressed using 'dwz -m'.  */
-  std::unique_ptr<struct dwz_file> dwz_file;
-
-  /* Whether copy relocations are supported by this object format.  */
-  bool can_copy;
-
-  /* A flag indicating whether this objfile has a section loaded at a
-     VMA of 0.  */
-  bool has_section_at_zero = false;
-
-  /* True if we are using the mapped index,
-     or we are faking it for OBJF_READNOW's sake.  */
-  bool using_index = false;
-
-  /* The mapped index, or NULL if .gdb_index is missing or not being used.  */
-  std::unique_ptr<mapped_index> index_table;
-
-  /* The mapped index, or NULL if .debug_names is missing or not being used.  */
-  std::unique_ptr<mapped_debug_names> debug_names_table;
-
-  /* When using index_table, this keeps track of all quick_file_names entries.
-     TUs typically share line table entries with a CU, so we maintain a
-     separate table of all line table entries to support the sharing.
-     Note that while there can be way more TUs than CUs, we've already
-     sorted all the TUs into "type unit groups", grouped by their
-     DW_AT_stmt_list value.  Therefore the only sharing done here is with a
-     CU and its associated TU group if there is one.  */
-  htab_t quick_file_names_table {};
-
-  /* Set during partial symbol reading, to prevent queueing of full
-     symbols.  */
-  bool reading_partial_symbols = false;
-
-  /* Table mapping type DIEs to their struct type *.
-     This is NULL if not allocated yet.
-     The mapping is done via (CU/TU + DIE offset) -> type.  */
-  htab_t die_type_hash {};
-
-  /* The CUs we recently read.  */
-  std::vector<dwarf2_per_cu_data *> just_read_cus;
-
-  /* Table containing line_header indexed by offset and offset_in_dwz.  */
-  htab_t line_header_hash {};
-
-  /* Table containing all filenames.  This is an optional because the
-     table is lazily constructed on first access.  */
-  gdb::optional<filename_seen_cache> filenames_cache;
-
-  /* If we loaded the index from an external file, this contains the
-     resources associated to the open file, memory mapping, etc.  */
-  std::unique_ptr<index_cache_resource> index_cache_res;
-
-  /* Mapping from abstract origin DIE to concrete DIEs that reference it as
-     DW_AT_abstract_origin.  */
-  std::unordered_map<sect_offset, std::vector<sect_offset>,
-		     gdb::hash_enum<sect_offset>>
-    abstract_to_concrete;
-};
-
-/* Get the dwarf2_per_objfile associated to OBJFILE.  */
-
-dwarf2_per_objfile *get_dwarf2_per_objfile (struct objfile *objfile);
-
-/* Persistent data held for a compilation unit, even when not
-   processing it.  We put a pointer to this structure in the
-   read_symtab_private field of the psymtab.  */
-
-struct dwarf2_per_cu_data
-{
-  /* The start offset and length of this compilation unit.
-     NOTE: Unlike comp_unit_head.length, this length includes
-     initial_length_size.
-     If the DIE refers to a DWO file, this is always of the original die,
-     not the DWO file.  */
-  sect_offset sect_off;
-  unsigned int length;
-
-  /* DWARF standard version this data has been read from (such as 4 or 5).  */
-  short dwarf_version;
-
-  /* Flag indicating this compilation unit will be read in before
-     any of the current compilation units are processed.  */
-  unsigned int queued : 1;
-
-  /* This flag will be set when reading partial DIEs if we need to load
-     absolutely all DIEs for this compilation unit, instead of just the ones
-     we think are interesting.  It gets set if we look for a DIE in the
-     hash table and don't find it.  */
-  unsigned int load_all_dies : 1;
-
-  /* Non-zero if this CU is from .debug_types.
-     Struct dwarf2_per_cu_data is contained in struct signatured_type iff
-     this is non-zero.  */
-  unsigned int is_debug_types : 1;
-
-  /* Non-zero if this CU is from the .dwz file.  */
-  unsigned int is_dwz : 1;
-
-  /* Non-zero if reading a TU directly from a DWO file, bypassing the stub.
-     This flag is only valid if is_debug_types is true.
-     We can't read a CU directly from a DWO file: There are required
-     attributes in the stub.  */
-  unsigned int reading_dwo_directly : 1;
-
-  /* Non-zero if the TU has been read.
-     This is used to assist the "Stay in DWO Optimization" for Fission:
-     When reading a DWO, it's faster to read TUs from the DWO instead of
-     fetching them from random other DWOs (due to comdat folding).
-     If the TU has already been read, the optimization is unnecessary
-     (and unwise - we don't want to change where gdb thinks the TU lives
-     "midflight").
-     This flag is only valid if is_debug_types is true.  */
-  unsigned int tu_read : 1;
-
-  /* The section this CU/TU lives in.
-     If the DIE refers to a DWO file, this is always the original die,
-     not the DWO file.  */
-  struct dwarf2_section_info *section;
-
-  /* Set to non-NULL iff this CU is currently loaded.  When it gets freed out
-     of the CU cache it gets reset to NULL again.  This is left as NULL for
-     dummy CUs (a CU header, but nothing else).  */
-  struct dwarf2_cu *cu;
-
-  /* The corresponding dwarf2_per_objfile.  */
-  struct dwarf2_per_objfile *dwarf2_per_objfile;
-
-  /* When dwarf2_per_objfile->using_index is true, the 'quick' field
-     is active.  Otherwise, the 'psymtab' field is active.  */
-  union
-  {
-    /* The partial symbol table associated with this compilation unit,
-       or NULL for unread partial units.  */
-    struct partial_symtab *psymtab;
-
-    /* Data needed by the "quick" functions.  */
-    struct dwarf2_per_cu_quick_data *quick;
-  } v;
-
-  /* Return true of IMPORTED_SYMTABS is empty or not yet allocated.  */
-  bool imported_symtabs_empty () const
-  {
-    return (imported_symtabs == nullptr || imported_symtabs->empty ());
-  }
-
-  /* Push P to the back of IMPORTED_SYMTABS, allocated IMPORTED_SYMTABS
-     first if required.  */
-  void imported_symtabs_push (dwarf2_per_cu_data *p)
-  {
-    if (imported_symtabs == nullptr)
-      imported_symtabs = new std::vector <dwarf2_per_cu_data *>;
-    imported_symtabs->push_back (p);
-  }
-
-  /* Return the size of IMPORTED_SYMTABS if it is allocated, otherwise
-     return 0.  */
-  size_t imported_symtabs_size () const
-  {
-    if (imported_symtabs == nullptr)
-      return 0;
-    return imported_symtabs->size ();
-  }
-
-  /* Delete IMPORTED_SYMTABS and set the pointer back to nullptr.  */
-  void imported_symtabs_free ()
-  {
-    delete imported_symtabs;
-    imported_symtabs = nullptr;
-  }
-
-  /* The CUs we import using DW_TAG_imported_unit.  This is filled in
-     while reading psymtabs, used to compute the psymtab dependencies,
-     and then cleared.  Then it is filled in again while reading full
-     symbols, and only deleted when the objfile is destroyed.
-
-     This is also used to work around a difference between the way gold
-     generates .gdb_index version <=7 and the way gdb does.  Arguably this
-     is a gold bug.  For symbols coming from TUs, gold records in the index
-     the CU that includes the TU instead of the TU itself.  This breaks
-     dw2_lookup_symbol: It assumes that if the index says symbol X lives
-     in CU/TU Y, then one need only expand Y and a subsequent lookup in Y
-     will find X.  Alas TUs live in their own symtab, so after expanding CU Y
-     we need to look in TU Z to find X.  Fortunately, this is akin to
-     DW_TAG_imported_unit, so we just use the same mechanism: For
-     .gdb_index version <=7 this also records the TUs that the CU referred
-     to.  Concurrently with this change gdb was modified to emit version 8
-     indices so we only pay a price for gold generated indices.
-     http://sourceware.org/bugzilla/show_bug.cgi?id=15021.
-
-     This currently needs to be a public member due to how
-     dwarf2_per_cu_data is allocated and used.  Ideally in future things
-     could be refactored to make this private.  Until then please try to
-     avoid direct access to this member, and instead use the helper
-     functions above.  */
-  std::vector <dwarf2_per_cu_data *> *imported_symtabs;
-};
-
-/* Entry in the signatured_types hash table.  */
-
-struct signatured_type
-{
-  /* The "per_cu" object of this type.
-     This struct is used iff per_cu.is_debug_types.
-     N.B.: This is the first member so that it's easy to convert pointers
-     between them.  */
-  struct dwarf2_per_cu_data per_cu;
-
-  /* The type's signature.  */
-  ULONGEST signature;
-
-  /* Offset in the TU of the type's DIE, as read from the TU header.
-     If this TU is a DWO stub and the definition lives in a DWO file
-     (specified by DW_AT_GNU_dwo_name), this value is unusable.  */
-  cu_offset type_offset_in_tu;
-
-  /* Offset in the section of the type's DIE.
-     If the definition lives in a DWO file, this is the offset in the
-     .debug_types.dwo section.
-     The value is zero until the actual value is known.
-     Zero is otherwise not a valid section offset.  */
-  sect_offset type_offset_in_section;
-
-  /* Type units are grouped by their DW_AT_stmt_list entry so that they
-     can share them.  This points to the containing symtab.  */
-  struct type_unit_group *type_unit_group;
-
-  /* The type.
-     The first time we encounter this type we fully read it in and install it
-     in the symbol tables.  Subsequent times we only need the type.  */
-  struct type *type;
-
-  /* Containing DWO unit.
-     This field is valid iff per_cu.reading_dwo_directly.  */
-  struct dwo_unit *dwo_unit;
-};
-
-ULONGEST read_unsigned_leb128 (bfd *, const gdb_byte *, unsigned int *);
-
-/* This represents a '.dwz' file.  */
-
-struct dwz_file
-{
-  dwz_file (gdb_bfd_ref_ptr &&bfd)
-    : dwz_bfd (std::move (bfd))
-  {
-  }
-
-  const char *filename () const
-  {
-    return bfd_get_filename (this->dwz_bfd.get ());
-  }
-
-  /* A dwz file can only contain a few sections.  */
-  struct dwarf2_section_info abbrev {};
-  struct dwarf2_section_info info {};
-  struct dwarf2_section_info str {};
-  struct dwarf2_section_info line {};
-  struct dwarf2_section_info macro {};
-  struct dwarf2_section_info gdb_index {};
-  struct dwarf2_section_info debug_names {};
-
-  /* The dwz's BFD.  */
-  gdb_bfd_ref_ptr dwz_bfd;
-
-  /* If we loaded the index from an external file, this contains the
-     resources associated to the open file, memory mapping, etc.  */
-  std::unique_ptr<index_cache_resource> index_cache_res;
-};
-
-/* Open the separate '.dwz' debug file, if needed.  Return NULL if
-   there is no .gnu_debugaltlink section in the file.  Error if there
-   is such a section but the file cannot be found.  */
-
-extern struct dwz_file *dwarf2_get_dwz_file
-    (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-#endif /* DWARF2READ_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-cache.c ./gdb/dwarf-index-cache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-cache.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf-index-cache.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,382 +0,0 @@
-/* Caching of GDB/DWARF index files.
-
-   Copyright (C) 1994-2020 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 "dwarf-index-cache.h"
-
-#include "build-id.h"
-#include "cli/cli-cmds.h"
-#include "command.h"
-#include "gdbsupport/scoped_mmap.h"
-#include "gdbsupport/pathstuff.h"
-#include "dwarf-index-write.h"
-#include "dwarf2read.h"
-#include "objfiles.h"
-#include "gdbsupport/selftest.h"
-#include <string>
-#include <stdlib.h>
-
-/* When set to true, show debug messages about the index cache.  */
-static bool debug_index_cache = false;
-
-/* The index cache directory, used for "set/show index-cache directory".  */
-static char *index_cache_directory = NULL;
-
-/* See dwarf-index.cache.h.  */
-index_cache global_index_cache;
-
-/* set/show index-cache commands.  */
-static cmd_list_element *set_index_cache_prefix_list;
-static cmd_list_element *show_index_cache_prefix_list;
-
-/* Default destructor of index_cache_resource.  */
-index_cache_resource::~index_cache_resource () = default;
-
-/* See dwarf-index-cache.h.  */
-
-void
-index_cache::set_directory (std::string dir)
-{
-  gdb_assert (!dir.empty ());
-
-  m_dir = std::move (dir);
-
-  if (debug_index_cache)
-    printf_unfiltered ("index cache: now using directory %s\n", m_dir.c_str ());
-}
-
-/* See dwarf-index-cache.h.  */
-
-void
-index_cache::enable ()
-{
-  if (debug_index_cache)
-    printf_unfiltered ("index cache: enabling (%s)\n", m_dir.c_str ());
-
-  m_enabled = true;
-}
-
-/* See dwarf-index-cache.h.  */
-
-void
-index_cache::disable ()
-{
-  if (debug_index_cache)
-    printf_unfiltered ("index cache: disabling\n");
-
-  m_enabled = false;
-}
-
-/* See dwarf-index-cache.h.  */
-
-void
-index_cache::store (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  objfile *obj = dwarf2_per_objfile->objfile;
-
-  if (!enabled ())
-    return;
-
-  /* Get build id of objfile.  */
-  const bfd_build_id *build_id = build_id_bfd_get (obj->obfd);
-  if (build_id == nullptr)
-    {
-      if (debug_index_cache)
-	printf_unfiltered ("index cache: objfile %s has no build id\n",
-			   objfile_name (obj));
-      return;
-    }
-
-  std::string build_id_str = build_id_to_string (build_id);
-
-  /* Get build id of dwz file, if present.  */
-  gdb::optional<std::string> dwz_build_id_str;
-  const dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-  const char *dwz_build_id_ptr = NULL;
-
-  if (dwz != nullptr)
-    {
-      const bfd_build_id *dwz_build_id = build_id_bfd_get (dwz->dwz_bfd.get ());
-
-      if (dwz_build_id == nullptr)
-	{
-	  if (debug_index_cache)
-	    printf_unfiltered ("index cache: dwz objfile %s has no build id\n",
-			       dwz->filename ());
-	  return;
-	}
-
-      dwz_build_id_str = build_id_to_string (dwz_build_id);
-      dwz_build_id_ptr = dwz_build_id_str->c_str ();
-    }
-
-  if (m_dir.empty ())
-    {
-      warning (_("The index cache directory name is empty, skipping store."));
-      return;
-    }
-
-  try
-    {
-      /* Try to create the containing directory.  */
-      if (!mkdir_recursive (m_dir.c_str ()))
-	{
-	  warning (_("index cache: could not make cache directory: %s"),
-		   safe_strerror (errno));
-	  return;
-	}
-
-      if (debug_index_cache)
-        printf_unfiltered ("index cache: writing index cache for objfile %s\n",
-			   objfile_name (obj));
-
-      /* Write the index itself to the directory, using the build id as the
-         filename.  */
-      write_psymtabs_to_index (dwarf2_per_objfile, m_dir.c_str (),
-			       build_id_str.c_str (), dwz_build_id_ptr,
-			       dw_index_kind::GDB_INDEX);
-    }
-  catch (const gdb_exception_error &except)
-    {
-      if (debug_index_cache)
-	printf_unfiltered ("index cache: couldn't store index cache for objfile "
-			   "%s: %s", objfile_name (obj), except.what ());
-    }
-}
-
-#if HAVE_SYS_MMAN_H
-
-/* Hold the resources for an mmapped index file.  */
-
-struct index_cache_resource_mmap final : public index_cache_resource
-{
-  /* Try to mmap FILENAME.  Throw an exception on failure, including if the
-     file doesn't exist. */
-  index_cache_resource_mmap (const char *filename)
-    : mapping (mmap_file (filename))
-  {}
-
-  scoped_mmap mapping;
-};
-
-/* See dwarf-index-cache.h.  */
-
-gdb::array_view<const gdb_byte>
-index_cache::lookup_gdb_index (const bfd_build_id *build_id,
-			       std::unique_ptr<index_cache_resource> *resource)
-{
-  if (!enabled ())
-    return {};
-
-  if (m_dir.empty ())
-    {
-      warning (_("The index cache directory name is empty, skipping cache "
-		 "lookup."));
-      return {};
-    }
-
-  /* Compute where we would expect a gdb index file for this build id to be.  */
-  std::string filename = make_index_filename (build_id, INDEX4_SUFFIX);
-
-  try
-    {
-      if (debug_index_cache)
-        printf_unfiltered ("index cache: trying to read %s\n",
-			   filename.c_str ());
-
-      /* Try to map that file.  */
-      index_cache_resource_mmap *mmap_resource
-	= new index_cache_resource_mmap (filename.c_str ());
-
-      /* Yay, it worked!  Hand the resource to the caller.  */
-      resource->reset (mmap_resource);
-
-      return gdb::array_view<const gdb_byte>
-	  ((const gdb_byte *) mmap_resource->mapping.get (),
-	   mmap_resource->mapping.size ());
-    }
-  catch (const gdb_exception_error &except)
-    {
-      if (debug_index_cache)
-	printf_unfiltered ("index cache: couldn't read %s: %s\n",
-			   filename.c_str (), except.what ());
-    }
-
-  return {};
-}
-
-#else /* !HAVE_SYS_MMAN_H */
-
-/* See dwarf-index-cache.h.  This is a no-op on unsupported systems.  */
-
-gdb::array_view<const gdb_byte>
-index_cache::lookup_gdb_index (const bfd_build_id *build_id,
-			       std::unique_ptr<index_cache_resource> *resource)
-{
-  return {};
-}
-
-#endif
-
-/* See dwarf-index-cache.h.  */
-
-std::string
-index_cache::make_index_filename (const bfd_build_id *build_id,
-				  const char *suffix) const
-{
-  std::string build_id_str = build_id_to_string (build_id);
-
-  return m_dir + SLASH_STRING + build_id_str + suffix;
-}
-
-/* "set index-cache" handler.  */
-
-static void
-set_index_cache_command (const char *arg, int from_tty)
-{
-  printf_unfiltered (_("\
-Missing arguments.  See \"help set index-cache\" for help.\n"));
-}
-
-/* True when we are executing "show index-cache".  This is used to improve the
-   printout a little bit.  */
-static bool in_show_index_cache_command = false;
-
-/* "show index-cache" handler.  */
-
-static void
-show_index_cache_command (const char *arg, int from_tty)
-{
-  /* Note that we are executing "show index-cache".  */
-  auto restore_flag = make_scoped_restore (&in_show_index_cache_command, true);
-
-  /* Call all "show index-cache" subcommands.  */
-  cmd_show_list (show_index_cache_prefix_list, from_tty, "");
-
-  printf_unfiltered ("\n");
-  printf_unfiltered
-    (_("The index cache is currently %s.\n"),
-     global_index_cache.enabled () ? _("enabled") : _("disabled"));
-}
-
-/* "set index-cache on" handler.  */
-
-static void
-set_index_cache_on_command (const char *arg, int from_tty)
-{
-  global_index_cache.enable ();
-}
-
-/* "set index-cache off" handler.  */
-
-static void
-set_index_cache_off_command (const char *arg, int from_tty)
-{
-  global_index_cache.disable ();
-}
-
-/* "set index-cache directory" handler.  */
-
-static void
-set_index_cache_directory_command (const char *arg, int from_tty,
-				   cmd_list_element *element)
-{
-  /* Make sure the index cache directory is absolute and tilde-expanded.  */
-  gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (index_cache_directory));
-  xfree (index_cache_directory);
-  index_cache_directory = abs.release ();
-  global_index_cache.set_directory (index_cache_directory);
-}
-
-/* "show index-cache stats" handler.  */
-
-static void
-show_index_cache_stats_command (const char *arg, int from_tty)
-{
-  const char *indent = "";
-
-  /* If this command is invoked through "show index-cache", make the display a
-     bit nicer.  */
-  if (in_show_index_cache_command)
-    {
-      indent = "  ";
-      printf_unfiltered ("\n");
-    }
-
-  printf_unfiltered (_("%s  Cache hits (this session): %u\n"),
-		     indent, global_index_cache.n_hits ());
-  printf_unfiltered (_("%sCache misses (this session): %u\n"),
-		     indent, global_index_cache.n_misses ());
-}
-
-void
-_initialize_index_cache ()
-{
-  /* Set the default index cache directory.  */
-  std::string cache_dir = get_standard_cache_dir ();
-  if (!cache_dir.empty ())
-    {
-      index_cache_directory = xstrdup (cache_dir.c_str ());
-      global_index_cache.set_directory (std::move (cache_dir));
-    }
-  else
-    warning (_("Couldn't determine a path for the index cache directory."));
-
-  /* set index-cache */
-  add_prefix_cmd ("index-cache", class_files, set_index_cache_command,
-		  _("Set index-cache options."), &set_index_cache_prefix_list,
-		  "set index-cache ", false, &setlist);
-
-  /* show index-cache */
-  add_prefix_cmd ("index-cache", class_files, show_index_cache_command,
-		  _("Show index-cache options."), &show_index_cache_prefix_list,
-		  "show index-cache ", false, &showlist);
-
-  /* set index-cache on */
-  add_cmd ("on", class_files, set_index_cache_on_command,
-	   _("Enable the index cache."), &set_index_cache_prefix_list);
-
-  /* set index-cache off */
-  add_cmd ("off", class_files, set_index_cache_off_command,
-	   _("Disable the index cache."), &set_index_cache_prefix_list);
-
-  /* set index-cache directory */
-  add_setshow_filename_cmd ("directory", class_files, &index_cache_directory,
-			    _("Set the directory of the index cache."),
-			    _("Show the directory of the index cache."),
-			    NULL,
-			    set_index_cache_directory_command, NULL,
-			    &set_index_cache_prefix_list,
-			    &show_index_cache_prefix_list);
-
-  /* show index-cache stats */
-  add_cmd ("stats", class_files, show_index_cache_stats_command,
-	   _("Show some stats about the index cache."),
-	   &show_index_cache_prefix_list);
-
-  /* set debug index-cache */
-  add_setshow_boolean_cmd ("index-cache", class_maintenance,
-			   &debug_index_cache,
-			   _("Set display of index-cache debug messages."),
-			   _("Show display of index-cache debug messages."),
-			   _("\
-When non-zero, debugging output for the index cache is displayed."),
-			    NULL, NULL,
-			    &setdebuglist, &showdebuglist);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-cache.h ./gdb/dwarf-index-cache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-cache.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf-index-cache.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,112 +0,0 @@
-/* Caching of GDB/DWARF index files.
-
-   Copyright (C) 2018-2020 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 DWARF_INDEX_CACHE_H
-#define DWARF_INDEX_CACHE_H
-
-#include "dwarf-index-common.h"
-#include "gdbsupport/array-view.h"
-#include "symfile.h"
-
-/* Base of the classes used to hold the resources of the indices loaded from
-   the cache (e.g. mmapped files).  */
-
-struct index_cache_resource
-{
-  virtual ~index_cache_resource () = 0;
-};
-
-/* Class to manage the access to the DWARF index cache.  */
-
-class index_cache
-{
-public:
-  /* Change the directory used to save/load index files.  */
-  void set_directory (std::string dir);
-
-  /* Return true if the usage of the cache is enabled.  */
-  bool enabled () const
-  {
-    return m_enabled;
-  }
-
-  /* Enable the cache.  */
-  void enable ();
-
-  /* Disable the cache.  */
-  void disable ();
-
-  /* Store an index for the specified object file in the cache.  */
-  void store (struct dwarf2_per_objfile *dwarf2_per_objfile);
-
-  /* Look for an index file matching BUILD_ID.  If found, return the contents
-     as an array_view and store the underlying resources (allocated memory,
-     mapped file, etc) in RESOURCE.  The returned array_view is valid as long
-     as RESOURCE is not destroyed.
-
-     If no matching index file is found, return an empty array view.  */
-  gdb::array_view<const gdb_byte>
-  lookup_gdb_index (const bfd_build_id *build_id,
-		    std::unique_ptr<index_cache_resource> *resource);
-
-  /* Return the number of cache hits.  */
-  unsigned int n_hits () const
-  { return m_n_hits; }
-
-  /* Record a cache hit.  */
-  void hit ()
-  {
-    if (enabled ())
-      m_n_hits++;
-  }
-
-  /* Return the number of cache misses.  */
-  unsigned int n_misses () const
-  { return m_n_misses; }
-
-  /* Record a cache miss.  */
-  void miss ()
-  {
-    if (enabled ())
-      m_n_misses++;
-  }
-
-private:
-
-  /* Compute the absolute filename where the index of the objfile with build
-     id BUILD_ID will be stored.  SUFFIX is appended at the end of the
-     filename.  */
-  std::string make_index_filename (const bfd_build_id *build_id,
-				   const char *suffix) const;
-
-  /* The base directory where we are storing and looking up index files.  */
-  std::string m_dir;
-
-  /* Whether the cache is enabled.  */
-  bool m_enabled = false;
-
-  /* Number of cache hits and misses during this GDB session.  */
-  unsigned int m_n_hits = 0;
-  unsigned int m_n_misses = 0;
-};
-
-/* The global instance of the index cache.  */
-extern index_cache global_index_cache;
-
-#endif /* DWARF_INDEX_CACHE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-common.c ./gdb/dwarf-index-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-common.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf-index-common.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,56 +0,0 @@
-/* Things needed for both reading and writing DWARF indices.
-
-   Copyright (C) 1994-2020 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 "dwarf-index-common.h"
-
-/* See dwarf-index-common.h.  */
-
-hashval_t
-mapped_index_string_hash (int index_version, const void *p)
-{
-  const unsigned char *str = (const unsigned char *) p;
-  hashval_t r = 0;
-  unsigned char c;
-
-  while ((c = *str++) != 0)
-    {
-      if (index_version >= 5)
-	c = tolower (c);
-      r = r * 67 + c - 113;
-    }
-
-  return r;
-}
-
-/* See dwarf-index-common.h.  */
-
-uint32_t
-dwarf5_djb_hash (const char *str_)
-{
-  const unsigned char *str = (const unsigned char *) str_;
-
-  /* Note: tolower here ignores UTF-8, which isn't fully compliant.
-     See http://dwarfstd.org/ShowIssue.php?issue=161027.1.  */
-
-  uint32_t hash = 5381;
-  while (int c = *str++)
-    hash = hash * 33 + tolower (c);
-  return hash;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-common.h ./gdb/dwarf-index-common.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-common.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf-index-common.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,68 +0,0 @@
-/* Things needed for both reading and writing DWARF indices.
-
-   Copyright (C) 1994-2020 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 DWARF_INDEX_COMMON_H
-#define DWARF_INDEX_COMMON_H
-
-/* The suffix for an index file.  */
-#define INDEX4_SUFFIX ".gdb-index"
-#define INDEX5_SUFFIX ".debug_names"
-#define DEBUG_STR_SUFFIX ".debug_str"
-
-/* All offsets in the index are of this type.  It must be
-   architecture-independent.  */
-typedef uint32_t offset_type;
-
-#if WORDS_BIGENDIAN
-
-/* Convert VALUE between big- and little-endian.  */
-
-static inline offset_type
-byte_swap (offset_type value)
-{
-  offset_type result;
-
-  result = (value & 0xff) << 24;
-  result |= (value & 0xff00) << 8;
-  result |= (value & 0xff0000) >> 8;
-  result |= (value & 0xff000000) >> 24;
-  return result;
-}
-
-#define MAYBE_SWAP(V)  byte_swap (V)
-
-#else
-#define MAYBE_SWAP(V) static_cast<offset_type> (V)
-#endif /* WORDS_BIGENDIAN */
-
-/* The hash function for strings in the mapped index.  This is the same as
-   SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the
-   implementation.  This is necessary because the hash function is tied to the
-   format of the mapped index file.  The hash values do not have to match with
-   SYMBOL_HASH_NEXT.
-
-   Use INT_MAX for INDEX_VERSION if you generate the current index format.  */
-
-hashval_t mapped_index_string_hash (int index_version, const void *p);
-
-/* Symbol name hashing function as specified by DWARF-5.  */
-
-uint32_t dwarf5_djb_hash (const char *str_);
-
-#endif /* DWARF_INDEX_COMMON_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-write.c ./gdb/dwarf-index-write.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-write.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf-index-write.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1797 +0,0 @@
-/* DWARF index writing support for GDB.
-
-   Copyright (C) 1994-2020 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 "dwarf-index-write.h"
-
-#include "addrmap.h"
-#include "cli/cli-decode.h"
-#include "gdbsupport/byte-vector.h"
-#include "gdbsupport/filestuff.h"
-#include "gdbsupport/gdb_unlinker.h"
-#include "gdbsupport/pathstuff.h"
-#include "gdbsupport/scoped_fd.h"
-#include "complaints.h"
-#include "dwarf-index-common.h"
-#include "dwarf2.h"
-#include "dwarf2read.h"
-#include "gdb/gdb-index.h"
-#include "gdbcmd.h"
-#include "objfiles.h"
-#include "psympriv.h"
-#include "ada-lang.h"
-
-#include <algorithm>
-#include <cmath>
-#include <set>
-#include <unordered_map>
-#include <unordered_set>
-
-/* Ensure only legit values are used.  */
-#define DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \
-  do { \
-    gdb_assert ((unsigned int) (value) <= 1); \
-    GDB_INDEX_SYMBOL_STATIC_SET_VALUE((cu_index), (value)); \
-  } while (0)
-
-/* Ensure only legit values are used.  */
-#define DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \
-  do { \
-    gdb_assert ((value) >= GDB_INDEX_SYMBOL_KIND_TYPE \
-                && (value) <= GDB_INDEX_SYMBOL_KIND_OTHER); \
-    GDB_INDEX_SYMBOL_KIND_SET_VALUE((cu_index), (value)); \
-  } while (0)
-
-/* Ensure we don't use more than the allotted number of bits for the CU.  */
-#define DW2_GDB_INDEX_CU_SET_VALUE(cu_index, value) \
-  do { \
-    gdb_assert (((value) & ~GDB_INDEX_CU_MASK) == 0); \
-    GDB_INDEX_CU_SET_VALUE((cu_index), (value)); \
-  } while (0)
-
-/* The "save gdb-index" command.  */
-
-/* Write SIZE bytes from the buffer pointed to by DATA to FILE, with
-   error checking.  */
-
-static void
-file_write (FILE *file, const void *data, size_t size)
-{
-  if (fwrite (data, 1, size, file) != size)
-    error (_("couldn't data write to file"));
-}
-
-/* Write the contents of VEC to FILE, with error checking.  */
-
-template<typename Elem, typename Alloc>
-static void
-file_write (FILE *file, const std::vector<Elem, Alloc> &vec)
-{
-  if (!vec.empty ())
-    file_write (file, vec.data (), vec.size () * sizeof (vec[0]));
-}
-
-/* In-memory buffer to prepare data to be written later to a file.  */
-class data_buf
-{
-public:
-  /* Copy DATA to the end of the buffer.  */
-  template<typename T>
-  void append_data (const T &data)
-  {
-    std::copy (reinterpret_cast<const gdb_byte *> (&data),
-	       reinterpret_cast<const gdb_byte *> (&data + 1),
-	       grow (sizeof (data)));
-  }
-
-  /* Copy CSTR (a zero-terminated string) to the end of buffer.  The
-     terminating zero is appended too.  */
-  void append_cstr0 (const char *cstr)
-  {
-    const size_t size = strlen (cstr) + 1;
-    std::copy (cstr, cstr + size, grow (size));
-  }
-
-  /* Store INPUT as ULEB128 to the end of buffer.  */
-  void append_unsigned_leb128 (ULONGEST input)
-  {
-    for (;;)
-      {
-	gdb_byte output = input & 0x7f;
-	input >>= 7;
-	if (input)
-	  output |= 0x80;
-	append_data (output);
-	if (input == 0)
-	  break;
-      }
-  }
-
-  /* Accept a host-format integer in VAL and append it to the buffer
-     as a target-format integer which is LEN bytes long.  */
-  void append_uint (size_t len, bfd_endian byte_order, ULONGEST val)
-  {
-    ::store_unsigned_integer (grow (len), len, byte_order, val);
-  }
-
-  /* Return the size of the buffer.  */
-  size_t size () const
-  {
-    return m_vec.size ();
-  }
-
-  /* Return true iff the buffer is empty.  */
-  bool empty () const
-  {
-    return m_vec.empty ();
-  }
-
-  /* Write the buffer to FILE.  */
-  void file_write (FILE *file) const
-  {
-    ::file_write (file, m_vec);
-  }
-
-private:
-  /* Grow SIZE bytes at the end of the buffer.  Returns a pointer to
-     the start of the new block.  */
-  gdb_byte *grow (size_t size)
-  {
-    m_vec.resize (m_vec.size () + size);
-    return &*(m_vec.end () - size);
-  }
-
-  gdb::byte_vector m_vec;
-};
-
-/* An entry in the symbol table.  */
-struct symtab_index_entry
-{
-  /* The name of the symbol.  */
-  const char *name;
-  /* The offset of the name in the constant pool.  */
-  offset_type index_offset;
-  /* A sorted vector of the indices of all the CUs that hold an object
-     of this name.  */
-  std::vector<offset_type> cu_indices;
-};
-
-/* The symbol table.  This is a power-of-2-sized hash table.  */
-struct mapped_symtab
-{
-  mapped_symtab ()
-  {
-    data.resize (1024);
-  }
-
-  offset_type n_elements = 0;
-  std::vector<symtab_index_entry> data;
-};
-
-/* Find a slot in SYMTAB for the symbol NAME.  Returns a reference to
-   the slot.
-
-   Function is used only during write_hash_table so no index format backward
-   compatibility is needed.  */
-
-static symtab_index_entry &
-find_slot (struct mapped_symtab *symtab, const char *name)
-{
-  offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name);
-
-  index = hash & (symtab->data.size () - 1);
-  step = ((hash * 17) & (symtab->data.size () - 1)) | 1;
-
-  for (;;)
-    {
-      if (symtab->data[index].name == NULL
-	  || strcmp (name, symtab->data[index].name) == 0)
-	return symtab->data[index];
-      index = (index + step) & (symtab->data.size () - 1);
-    }
-}
-
-/* Expand SYMTAB's hash table.  */
-
-static void
-hash_expand (struct mapped_symtab *symtab)
-{
-  auto old_entries = std::move (symtab->data);
-
-  symtab->data.clear ();
-  symtab->data.resize (old_entries.size () * 2);
-
-  for (auto &it : old_entries)
-    if (it.name != NULL)
-      {
-	auto &ref = find_slot (symtab, it.name);
-	ref = std::move (it);
-      }
-}
-
-/* Add an entry to SYMTAB.  NAME is the name of the symbol.
-   CU_INDEX is the index of the CU in which the symbol appears.
-   IS_STATIC is one if the symbol is static, otherwise zero (global).  */
-
-static void
-add_index_entry (struct mapped_symtab *symtab, const char *name,
-		 int is_static, gdb_index_symbol_kind kind,
-		 offset_type cu_index)
-{
-  offset_type cu_index_and_attrs;
-
-  ++symtab->n_elements;
-  if (4 * symtab->n_elements / 3 >= symtab->data.size ())
-    hash_expand (symtab);
-
-  symtab_index_entry &slot = find_slot (symtab, name);
-  if (slot.name == NULL)
-    {
-      slot.name = name;
-      /* index_offset is set later.  */
-    }
-
-  cu_index_and_attrs = 0;
-  DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index);
-  DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static);
-  DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind);
-
-  /* We don't want to record an index value twice as we want to avoid the
-     duplication.
-     We process all global symbols and then all static symbols
-     (which would allow us to avoid the duplication by only having to check
-     the last entry pushed), but a symbol could have multiple kinds in one CU.
-     To keep things simple we don't worry about the duplication here and
-     sort and uniquify the list after we've processed all symbols.  */
-  slot.cu_indices.push_back (cu_index_and_attrs);
-}
-
-/* Sort and remove duplicates of all symbols' cu_indices lists.  */
-
-static void
-uniquify_cu_indices (struct mapped_symtab *symtab)
-{
-  for (auto &entry : symtab->data)
-    {
-      if (entry.name != NULL && !entry.cu_indices.empty ())
-	{
-	  auto &cu_indices = entry.cu_indices;
-	  std::sort (cu_indices.begin (), cu_indices.end ());
-	  auto from = std::unique (cu_indices.begin (), cu_indices.end ());
-	  cu_indices.erase (from, cu_indices.end ());
-	}
-    }
-}
-
-/* A form of 'const char *' suitable for container keys.  Only the
-   pointer is stored.  The strings themselves are compared, not the
-   pointers.  */
-class c_str_view
-{
-public:
-  c_str_view (const char *cstr)
-    : m_cstr (cstr)
-  {}
-
-  bool operator== (const c_str_view &other) const
-  {
-    return strcmp (m_cstr, other.m_cstr) == 0;
-  }
-
-  /* Return the underlying C string.  Note, the returned string is
-     only a reference with lifetime of this object.  */
-  const char *c_str () const
-  {
-    return m_cstr;
-  }
-
-private:
-  friend class c_str_view_hasher;
-  const char *const m_cstr;
-};
-
-/* A std::unordered_map::hasher for c_str_view that uses the right
-   hash function for strings in a mapped index.  */
-class c_str_view_hasher
-{
-public:
-  size_t operator () (const c_str_view &x) const
-  {
-    return mapped_index_string_hash (INT_MAX, x.m_cstr);
-  }
-};
-
-/* A std::unordered_map::hasher for std::vector<>.  */
-template<typename T>
-class vector_hasher
-{
-public:
-  size_t operator () (const std::vector<T> &key) const
-  {
-    return iterative_hash (key.data (),
-			   sizeof (key.front ()) * key.size (), 0);
-  }
-};
-
-/* Write the mapped hash table SYMTAB to the data buffer OUTPUT, with
-   constant pool entries going into the data buffer CPOOL.  */
-
-static void
-write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool)
-{
-  {
-    /* Elements are sorted vectors of the indices of all the CUs that
-       hold an object of this name.  */
-    std::unordered_map<std::vector<offset_type>, offset_type,
-		       vector_hasher<offset_type>>
-      symbol_hash_table;
-
-    /* We add all the index vectors to the constant pool first, to
-       ensure alignment is ok.  */
-    for (symtab_index_entry &entry : symtab->data)
-      {
-	if (entry.name == NULL)
-	  continue;
-	gdb_assert (entry.index_offset == 0);
-
-	/* Finding before inserting is faster than always trying to
-	   insert, because inserting always allocates a node, does the
-	   lookup, and then destroys the new node if another node
-	   already had the same key.  C++17 try_emplace will avoid
-	   this.  */
-	const auto found
-	  = symbol_hash_table.find (entry.cu_indices);
-	if (found != symbol_hash_table.end ())
-	  {
-	    entry.index_offset = found->second;
-	    continue;
-	  }
-
-	symbol_hash_table.emplace (entry.cu_indices, cpool.size ());
-	entry.index_offset = cpool.size ();
-	cpool.append_data (MAYBE_SWAP (entry.cu_indices.size ()));
-	for (const auto index : entry.cu_indices)
-	  cpool.append_data (MAYBE_SWAP (index));
-      }
-  }
-
-  /* Now write out the hash table.  */
-  std::unordered_map<c_str_view, offset_type, c_str_view_hasher> str_table;
-  for (const auto &entry : symtab->data)
-    {
-      offset_type str_off, vec_off;
-
-      if (entry.name != NULL)
-	{
-	  const auto insertpair = str_table.emplace (entry.name, cpool.size ());
-	  if (insertpair.second)
-	    cpool.append_cstr0 (entry.name);
-	  str_off = insertpair.first->second;
-	  vec_off = entry.index_offset;
-	}
-      else
-	{
-	  /* While 0 is a valid constant pool index, it is not valid
-	     to have 0 for both offsets.  */
-	  str_off = 0;
-	  vec_off = 0;
-	}
-
-      output.append_data (MAYBE_SWAP (str_off));
-      output.append_data (MAYBE_SWAP (vec_off));
-    }
-}
-
-typedef std::unordered_map<partial_symtab *, unsigned int> psym_index_map;
-
-/* Helper struct for building the address table.  */
-struct addrmap_index_data
-{
-  addrmap_index_data (data_buf &addr_vec_, psym_index_map &cu_index_htab_)
-    : addr_vec (addr_vec_), cu_index_htab (cu_index_htab_)
-  {}
-
-  struct objfile *objfile;
-  data_buf &addr_vec;
-  psym_index_map &cu_index_htab;
-
-  /* Non-zero if the previous_* fields are valid.
-     We can't write an entry until we see the next entry (since it is only then
-     that we know the end of the entry).  */
-  int previous_valid;
-  /* Index of the CU in the table of all CUs in the index file.  */
-  unsigned int previous_cu_index;
-  /* Start address of the CU.  */
-  CORE_ADDR previous_cu_start;
-};
-
-/* Write an address entry to ADDR_VEC.  */
-
-static void
-add_address_entry (struct objfile *objfile, data_buf &addr_vec,
-		   CORE_ADDR start, CORE_ADDR end, unsigned int cu_index)
-{
-  addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, start);
-  addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, end);
-  addr_vec.append_data (MAYBE_SWAP (cu_index));
-}
-
-/* Worker function for traversing an addrmap to build the address table.  */
-
-static int
-add_address_entry_worker (void *datap, CORE_ADDR start_addr, void *obj)
-{
-  struct addrmap_index_data *data = (struct addrmap_index_data *) datap;
-  struct partial_symtab *pst = (struct partial_symtab *) obj;
-
-  if (data->previous_valid)
-    add_address_entry (data->objfile, data->addr_vec,
-		       data->previous_cu_start, start_addr,
-		       data->previous_cu_index);
-
-  data->previous_cu_start = start_addr;
-  if (pst != NULL)
-    {
-      const auto it = data->cu_index_htab.find (pst);
-      gdb_assert (it != data->cu_index_htab.cend ());
-      data->previous_cu_index = it->second;
-      data->previous_valid = 1;
-    }
-  else
-    data->previous_valid = 0;
-
-  return 0;
-}
-
-/* Write OBJFILE's address map to ADDR_VEC.
-   CU_INDEX_HTAB is used to map addrmap entries to their CU indices
-   in the index file.  */
-
-static void
-write_address_map (struct objfile *objfile, data_buf &addr_vec,
-		   psym_index_map &cu_index_htab)
-{
-  struct addrmap_index_data addrmap_index_data (addr_vec, cu_index_htab);
-
-  /* When writing the address table, we have to cope with the fact that
-     the addrmap iterator only provides the start of a region; we have to
-     wait until the next invocation to get the start of the next region.  */
-
-  addrmap_index_data.objfile = objfile;
-  addrmap_index_data.previous_valid = 0;
-
-  addrmap_foreach (objfile->partial_symtabs->psymtabs_addrmap,
-		   add_address_entry_worker, &addrmap_index_data);
-
-  /* It's highly unlikely the last entry (end address = 0xff...ff)
-     is valid, but we should still handle it.
-     The end address is recorded as the start of the next region, but that
-     doesn't work here.  To cope we pass 0xff...ff, this is a rare situation
-     anyway.  */
-  if (addrmap_index_data.previous_valid)
-    add_address_entry (objfile, addr_vec,
-		       addrmap_index_data.previous_cu_start, (CORE_ADDR) -1,
-		       addrmap_index_data.previous_cu_index);
-}
-
-/* Return the symbol kind of PSYM.  */
-
-static gdb_index_symbol_kind
-symbol_kind (struct partial_symbol *psym)
-{
-  domain_enum domain = psym->domain;
-  enum address_class aclass = psym->aclass;
-
-  switch (domain)
-    {
-    case VAR_DOMAIN:
-      switch (aclass)
-	{
-	case LOC_BLOCK:
-	  return GDB_INDEX_SYMBOL_KIND_FUNCTION;
-	case LOC_TYPEDEF:
-	  return GDB_INDEX_SYMBOL_KIND_TYPE;
-	case LOC_COMPUTED:
-	case LOC_CONST_BYTES:
-	case LOC_OPTIMIZED_OUT:
-	case LOC_STATIC:
-	  return GDB_INDEX_SYMBOL_KIND_VARIABLE;
-	case LOC_CONST:
-	  /* Note: It's currently impossible to recognize psyms as enum values
-	     short of reading the type info.  For now punt.  */
-	  return GDB_INDEX_SYMBOL_KIND_VARIABLE;
-	default:
-	  /* There are other LOC_FOO values that one might want to classify
-	     as variables, but dwarf2read.c doesn't currently use them.  */
-	  return GDB_INDEX_SYMBOL_KIND_OTHER;
-	}
-    case STRUCT_DOMAIN:
-      return GDB_INDEX_SYMBOL_KIND_TYPE;
-    default:
-      return GDB_INDEX_SYMBOL_KIND_OTHER;
-    }
-}
-
-/* Add a list of partial symbols to SYMTAB.  */
-
-static void
-write_psymbols (struct mapped_symtab *symtab,
-		std::unordered_set<partial_symbol *> &psyms_seen,
-		struct partial_symbol **psymp,
-		int count,
-		offset_type cu_index,
-		int is_static)
-{
-  for (; count-- > 0; ++psymp)
-    {
-      struct partial_symbol *psym = *psymp;
-
-      if (psym->ginfo.language == language_ada)
-	error (_("Ada is not currently supported by the index; "
-		 "use the DWARF 5 index instead"));
-
-      /* Only add a given psymbol once.  */
-      if (psyms_seen.insert (psym).second)
-	{
-	  gdb_index_symbol_kind kind = symbol_kind (psym);
-
-	  add_index_entry (symtab, psym->ginfo.search_name (),
-			   is_static, kind, cu_index);
-	}
-    }
-}
-
-/* A helper struct used when iterating over debug_types.  */
-struct signatured_type_index_data
-{
-  signatured_type_index_data (data_buf &types_list_,
-                              std::unordered_set<partial_symbol *> &psyms_seen_)
-    : types_list (types_list_), psyms_seen (psyms_seen_)
-  {}
-
-  struct objfile *objfile;
-  struct mapped_symtab *symtab;
-  data_buf &types_list;
-  std::unordered_set<partial_symbol *> &psyms_seen;
-  int cu_index;
-};
-
-/* A helper function that writes a single signatured_type to an
-   obstack.  */
-
-static int
-write_one_signatured_type (void **slot, void *d)
-{
-  struct signatured_type_index_data *info
-    = (struct signatured_type_index_data *) d;
-  struct signatured_type *entry = (struct signatured_type *) *slot;
-  struct partial_symtab *psymtab = entry->per_cu.v.psymtab;
-
-  write_psymbols (info->symtab,
-		  info->psyms_seen,
-		  (info->objfile->partial_symtabs->global_psymbols.data ()
-		   + psymtab->globals_offset),
-		  psymtab->n_global_syms, info->cu_index,
-		  0);
-  write_psymbols (info->symtab,
-		  info->psyms_seen,
-		  (info->objfile->partial_symtabs->static_psymbols.data ()
-		   + psymtab->statics_offset),
-		  psymtab->n_static_syms, info->cu_index,
-		  1);
-
-  info->types_list.append_uint (8, BFD_ENDIAN_LITTLE,
-				to_underlying (entry->per_cu.sect_off));
-  info->types_list.append_uint (8, BFD_ENDIAN_LITTLE,
-				to_underlying (entry->type_offset_in_tu));
-  info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, entry->signature);
-
-  ++info->cu_index;
-
-  return 1;
-}
-
-/* Recurse into all "included" dependencies and count their symbols as
-   if they appeared in this psymtab.  */
-
-static void
-recursively_count_psymbols (struct partial_symtab *psymtab,
-			    size_t &psyms_seen)
-{
-  for (int i = 0; i < psymtab->number_of_dependencies; ++i)
-    if (psymtab->dependencies[i]->user != NULL)
-      recursively_count_psymbols (psymtab->dependencies[i],
-				  psyms_seen);
-
-  psyms_seen += psymtab->n_global_syms;
-  psyms_seen += psymtab->n_static_syms;
-}
-
-/* Recurse into all "included" dependencies and write their symbols as
-   if they appeared in this psymtab.  */
-
-static void
-recursively_write_psymbols (struct objfile *objfile,
-			    struct partial_symtab *psymtab,
-			    struct mapped_symtab *symtab,
-			    std::unordered_set<partial_symbol *> &psyms_seen,
-			    offset_type cu_index)
-{
-  int i;
-
-  for (i = 0; i < psymtab->number_of_dependencies; ++i)
-    if (psymtab->dependencies[i]->user != NULL)
-      recursively_write_psymbols (objfile, psymtab->dependencies[i],
-				  symtab, psyms_seen, cu_index);
-
-  write_psymbols (symtab,
-		  psyms_seen,
-		  (objfile->partial_symtabs->global_psymbols.data ()
-		   + psymtab->globals_offset),
-		  psymtab->n_global_syms, cu_index,
-		  0);
-  write_psymbols (symtab,
-		  psyms_seen,
-		  (objfile->partial_symtabs->static_psymbols.data ()
-		   + psymtab->statics_offset),
-		  psymtab->n_static_syms, cu_index,
-		  1);
-}
-
-/* DWARF-5 .debug_names builder.  */
-class debug_names
-{
-public:
-  debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile, bool is_dwarf64,
-	       bfd_endian dwarf5_byte_order)
-    : m_dwarf5_byte_order (dwarf5_byte_order),
-      m_dwarf32 (dwarf5_byte_order),
-      m_dwarf64 (dwarf5_byte_order),
-      m_dwarf (is_dwarf64
-	       ? static_cast<dwarf &> (m_dwarf64)
-	       : static_cast<dwarf &> (m_dwarf32)),
-      m_name_table_string_offs (m_dwarf.name_table_string_offs),
-      m_name_table_entry_offs (m_dwarf.name_table_entry_offs),
-      m_debugstrlookup (dwarf2_per_objfile)
-  {}
-
-  int dwarf5_offset_size () const
-  {
-    const bool dwarf5_is_dwarf64 = &m_dwarf == &m_dwarf64;
-    return dwarf5_is_dwarf64 ? 8 : 4;
-  }
-
-  /* Is this symbol from DW_TAG_compile_unit or DW_TAG_type_unit?  */
-  enum class unit_kind { cu, tu };
-
-  /* Insert one symbol.  */
-  void insert (const partial_symbol *psym, int cu_index, bool is_static,
-	       unit_kind kind)
-  {
-    const int dwarf_tag = psymbol_tag (psym);
-    if (dwarf_tag == 0)
-      return;
-    const char *name = psym->ginfo.search_name ();
-
-    if (psym->ginfo.language == language_ada)
-      {
-	/* We want to ensure that the Ada main function's name appears
-	   verbatim in the index.  However, this name will be of the
-	   form "_ada_mumble", and will be rewritten by ada_decode.
-	   So, recognize it specially here and add it to the index by
-	   hand.  */
-	if (strcmp (main_name (), name) == 0)
-	  {
-	    const auto insertpair
-	      = m_name_to_value_set.emplace (c_str_view (name),
-					     std::set<symbol_value> ());
-	    std::set<symbol_value> &value_set = insertpair.first->second;
-	    value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static,
-					     kind));
-	  }
-
-	/* In order for the index to work when read back into gdb, it
-	   has to supply a funny form of the name: it should be the
-	   encoded name, with any suffixes stripped.  Using the
-	   ordinary encoded name will not work properly with the
-	   searching logic in find_name_components_bounds; nor will
-	   using the decoded name.  Furthermore, an Ada "verbatim"
-	   name (of the form "<MumBle>") must be entered without the
-	   angle brackets.  Note that the current index is unusual,
-	   see PR symtab/24820 for details.  */
-	std::string decoded = ada_decode (name);
-	if (decoded[0] == '<')
-	  name = (char *) obstack_copy0 (&m_string_obstack,
-					 decoded.c_str () + 1,
-					 decoded.length () - 2);
-	else
-	  name = obstack_strdup (&m_string_obstack,
-				 ada_encode (decoded.c_str ()));
-      }
-
-    const auto insertpair
-      = m_name_to_value_set.emplace (c_str_view (name),
-				     std::set<symbol_value> ());
-    std::set<symbol_value> &value_set = insertpair.first->second;
-    value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind));
-  }
-
-  /* Build all the tables.  All symbols must be already inserted.
-     This function does not call file_write, caller has to do it
-     afterwards.  */
-  void build ()
-  {
-    /* Verify the build method has not be called twice.  */
-    gdb_assert (m_abbrev_table.empty ());
-    const size_t name_count = m_name_to_value_set.size ();
-    m_bucket_table.resize
-      (std::pow (2, std::ceil (std::log2 (name_count * 4 / 3))));
-    m_hash_table.reserve (name_count);
-    m_name_table_string_offs.reserve (name_count);
-    m_name_table_entry_offs.reserve (name_count);
-
-    /* Map each hash of symbol to its name and value.  */
-    struct hash_it_pair
-    {
-      uint32_t hash;
-      decltype (m_name_to_value_set)::const_iterator it;
-    };
-    std::vector<std::forward_list<hash_it_pair>> bucket_hash;
-    bucket_hash.resize (m_bucket_table.size ());
-    for (decltype (m_name_to_value_set)::const_iterator it
-	   = m_name_to_value_set.cbegin ();
-	 it != m_name_to_value_set.cend ();
-	 ++it)
-      {
-	const char *const name = it->first.c_str ();
-	const uint32_t hash = dwarf5_djb_hash (name);
-	hash_it_pair hashitpair;
-	hashitpair.hash = hash;
-	hashitpair.it = it;
-	auto &slot = bucket_hash[hash % bucket_hash.size()];
-	slot.push_front (std::move (hashitpair));
-      }
-    for (size_t bucket_ix = 0; bucket_ix < bucket_hash.size (); ++bucket_ix)
-      {
-	const std::forward_list<hash_it_pair> &hashitlist
-	  = bucket_hash[bucket_ix];
-	if (hashitlist.empty ())
-	  continue;
-	uint32_t &bucket_slot = m_bucket_table[bucket_ix];
-	/* The hashes array is indexed starting at 1.  */
-	store_unsigned_integer (reinterpret_cast<gdb_byte *> (&bucket_slot),
-				sizeof (bucket_slot), m_dwarf5_byte_order,
-				m_hash_table.size () + 1);
-	for (const hash_it_pair &hashitpair : hashitlist)
-	  {
-	    m_hash_table.push_back (0);
-	    store_unsigned_integer (reinterpret_cast<gdb_byte *>
-							(&m_hash_table.back ()),
-				    sizeof (m_hash_table.back ()),
-				    m_dwarf5_byte_order, hashitpair.hash);
-	    const c_str_view &name = hashitpair.it->first;
-	    const std::set<symbol_value> &value_set = hashitpair.it->second;
-	    m_name_table_string_offs.push_back_reorder
-	      (m_debugstrlookup.lookup (name.c_str ()));
-	    m_name_table_entry_offs.push_back_reorder (m_entry_pool.size ());
-	    gdb_assert (!value_set.empty ());
-	    for (const symbol_value &value : value_set)
-	      {
-		int &idx = m_indexkey_to_idx[index_key (value.dwarf_tag,
-							value.is_static,
-							value.kind)];
-		if (idx == 0)
-		  {
-		    idx = m_idx_next++;
-		    m_abbrev_table.append_unsigned_leb128 (idx);
-		    m_abbrev_table.append_unsigned_leb128 (value.dwarf_tag);
-		    m_abbrev_table.append_unsigned_leb128
-			      (value.kind == unit_kind::cu ? DW_IDX_compile_unit
-							   : DW_IDX_type_unit);
-		    m_abbrev_table.append_unsigned_leb128 (DW_FORM_udata);
-		    m_abbrev_table.append_unsigned_leb128 (value.is_static
-							   ? DW_IDX_GNU_internal
-							   : DW_IDX_GNU_external);
-		    m_abbrev_table.append_unsigned_leb128 (DW_FORM_flag_present);
-
-		    /* Terminate attributes list.  */
-		    m_abbrev_table.append_unsigned_leb128 (0);
-		    m_abbrev_table.append_unsigned_leb128 (0);
-		  }
-
-		m_entry_pool.append_unsigned_leb128 (idx);
-		m_entry_pool.append_unsigned_leb128 (value.cu_index);
-	      }
-
-	    /* Terminate the list of CUs.  */
-	    m_entry_pool.append_unsigned_leb128 (0);
-	  }
-      }
-    gdb_assert (m_hash_table.size () == name_count);
-
-    /* Terminate tags list.  */
-    m_abbrev_table.append_unsigned_leb128 (0);
-  }
-
-  /* Return .debug_names bucket count.  This must be called only after
-     calling the build method.  */
-  uint32_t bucket_count () const
-  {
-    /* Verify the build method has been already called.  */
-    gdb_assert (!m_abbrev_table.empty ());
-    const uint32_t retval = m_bucket_table.size ();
-
-    /* Check for overflow.  */
-    gdb_assert (retval == m_bucket_table.size ());
-    return retval;
-  }
-
-  /* Return .debug_names names count.  This must be called only after
-     calling the build method.  */
-  uint32_t name_count () const
-  {
-    /* Verify the build method has been already called.  */
-    gdb_assert (!m_abbrev_table.empty ());
-    const uint32_t retval = m_hash_table.size ();
-
-    /* Check for overflow.  */
-    gdb_assert (retval == m_hash_table.size ());
-    return retval;
-  }
-
-  /* Return number of bytes of .debug_names abbreviation table.  This
-     must be called only after calling the build method.  */
-  uint32_t abbrev_table_bytes () const
-  {
-    gdb_assert (!m_abbrev_table.empty ());
-    return m_abbrev_table.size ();
-  }
-
-  /* Recurse into all "included" dependencies and store their symbols
-     as if they appeared in this psymtab.  */
-  void recursively_write_psymbols
-    (struct objfile *objfile,
-     struct partial_symtab *psymtab,
-     std::unordered_set<partial_symbol *> &psyms_seen,
-     int cu_index)
-  {
-    for (int i = 0; i < psymtab->number_of_dependencies; ++i)
-      if (psymtab->dependencies[i]->user != NULL)
-	recursively_write_psymbols (objfile, psymtab->dependencies[i],
-				    psyms_seen, cu_index);
-
-    write_psymbols (psyms_seen,
-		    (objfile->partial_symtabs->global_psymbols.data ()
-		     + psymtab->globals_offset),
-		    psymtab->n_global_syms, cu_index, false, unit_kind::cu);
-    write_psymbols (psyms_seen,
-		    (objfile->partial_symtabs->static_psymbols.data ()
-		     + psymtab->statics_offset),
-		    psymtab->n_static_syms, cu_index, true, unit_kind::cu);
-  }
-
-  /* Return number of bytes the .debug_names section will have.  This
-     must be called only after calling the build method.  */
-  size_t bytes () const
-  {
-    /* Verify the build method has been already called.  */
-    gdb_assert (!m_abbrev_table.empty ());
-    size_t expected_bytes = 0;
-    expected_bytes += m_bucket_table.size () * sizeof (m_bucket_table[0]);
-    expected_bytes += m_hash_table.size () * sizeof (m_hash_table[0]);
-    expected_bytes += m_name_table_string_offs.bytes ();
-    expected_bytes += m_name_table_entry_offs.bytes ();
-    expected_bytes += m_abbrev_table.size ();
-    expected_bytes += m_entry_pool.size ();
-    return expected_bytes;
-  }
-
-  /* Write .debug_names to FILE_NAMES and .debug_str addition to
-     FILE_STR.  This must be called only after calling the build
-     method.  */
-  void file_write (FILE *file_names, FILE *file_str) const
-  {
-    /* Verify the build method has been already called.  */
-    gdb_assert (!m_abbrev_table.empty ());
-    ::file_write (file_names, m_bucket_table);
-    ::file_write (file_names, m_hash_table);
-    m_name_table_string_offs.file_write (file_names);
-    m_name_table_entry_offs.file_write (file_names);
-    m_abbrev_table.file_write (file_names);
-    m_entry_pool.file_write (file_names);
-    m_debugstrlookup.file_write (file_str);
-  }
-
-  /* A helper user data for write_one_signatured_type.  */
-  class write_one_signatured_type_data
-  {
-  public:
-    write_one_signatured_type_data (debug_names &nametable_,
-                                    signatured_type_index_data &&info_)
-    : nametable (nametable_), info (std::move (info_))
-    {}
-    debug_names &nametable;
-    struct signatured_type_index_data info;
-  };
-
-  /* A helper function to pass write_one_signatured_type to
-     htab_traverse_noresize.  */
-  static int
-  write_one_signatured_type (void **slot, void *d)
-  {
-    write_one_signatured_type_data *data = (write_one_signatured_type_data *) d;
-    struct signatured_type_index_data *info = &data->info;
-    struct signatured_type *entry = (struct signatured_type *) *slot;
-
-    data->nametable.write_one_signatured_type (entry, info);
-
-    return 1;
-  }
-
-private:
-
-  /* Storage for symbol names mapping them to their .debug_str section
-     offsets.  */
-  class debug_str_lookup
-  {
-  public:
-
-    /* Object constructor to be called for current DWARF2_PER_OBJFILE.
-       All .debug_str section strings are automatically stored.  */
-    debug_str_lookup (struct dwarf2_per_objfile *dwarf2_per_objfile)
-      : m_abfd (dwarf2_per_objfile->objfile->obfd),
-	m_dwarf2_per_objfile (dwarf2_per_objfile)
-    {
-      dwarf2_read_section (dwarf2_per_objfile->objfile,
-			   &dwarf2_per_objfile->str);
-      if (dwarf2_per_objfile->str.buffer == NULL)
-	return;
-      for (const gdb_byte *data = dwarf2_per_objfile->str.buffer;
-	   data < (dwarf2_per_objfile->str.buffer
-		   + dwarf2_per_objfile->str.size);)
-	{
-	  const char *const s = reinterpret_cast<const char *> (data);
-	  const auto insertpair
-	    = m_str_table.emplace (c_str_view (s),
-				   data - dwarf2_per_objfile->str.buffer);
-	  if (!insertpair.second)
-	    complaint (_("Duplicate string \"%s\" in "
-			 ".debug_str section [in module %s]"),
-		       s, bfd_get_filename (m_abfd));
-	  data += strlen (s) + 1;
-	}
-    }
-
-    /* Return offset of symbol name S in the .debug_str section.  Add
-       such symbol to the section's end if it does not exist there
-       yet.  */
-    size_t lookup (const char *s)
-    {
-      const auto it = m_str_table.find (c_str_view (s));
-      if (it != m_str_table.end ())
-	return it->second;
-      const size_t offset = (m_dwarf2_per_objfile->str.size
-			     + m_str_add_buf.size ());
-      m_str_table.emplace (c_str_view (s), offset);
-      m_str_add_buf.append_cstr0 (s);
-      return offset;
-    }
-
-    /* Append the end of the .debug_str section to FILE.  */
-    void file_write (FILE *file) const
-    {
-      m_str_add_buf.file_write (file);
-    }
-
-  private:
-    std::unordered_map<c_str_view, size_t, c_str_view_hasher> m_str_table;
-    bfd *const m_abfd;
-    struct dwarf2_per_objfile *m_dwarf2_per_objfile;
-
-    /* Data to add at the end of .debug_str for new needed symbol names.  */
-    data_buf m_str_add_buf;
-  };
-
-  /* Container to map used DWARF tags to their .debug_names abbreviation
-     tags.  */
-  class index_key
-  {
-  public:
-    index_key (int dwarf_tag_, bool is_static_, unit_kind kind_)
-      : dwarf_tag (dwarf_tag_), is_static (is_static_), kind (kind_)
-    {
-    }
-
-    bool
-    operator== (const index_key &other) const
-    {
-      return (dwarf_tag == other.dwarf_tag && is_static == other.is_static
-	      && kind == other.kind);
-    }
-
-    const int dwarf_tag;
-    const bool is_static;
-    const unit_kind kind;
-  };
-
-  /* Provide std::unordered_map::hasher for index_key.  */
-  class index_key_hasher
-  {
-  public:
-    size_t
-    operator () (const index_key &key) const
-    {
-      return (std::hash<int>() (key.dwarf_tag) << 1) | key.is_static;
-    }
-  };
-
-  /* Parameters of one symbol entry.  */
-  class symbol_value
-  {
-  public:
-    const int dwarf_tag, cu_index;
-    const bool is_static;
-    const unit_kind kind;
-
-    symbol_value (int dwarf_tag_, int cu_index_, bool is_static_,
-		  unit_kind kind_)
-      : dwarf_tag (dwarf_tag_), cu_index (cu_index_), is_static (is_static_),
-        kind (kind_)
-    {}
-
-    bool
-    operator< (const symbol_value &other) const
-    {
-#define X(n) \
-  do \
-    { \
-      if (n < other.n) \
-	return true; \
-      if (n > other.n) \
-	return false; \
-    } \
-  while (0)
-      X (dwarf_tag);
-      X (is_static);
-      X (kind);
-      X (cu_index);
-#undef X
-      return false;
-    }
-  };
-
-  /* Abstract base class to unify DWARF-32 and DWARF-64 name table
-     output.  */
-  class offset_vec
-  {
-  protected:
-    const bfd_endian dwarf5_byte_order;
-  public:
-    explicit offset_vec (bfd_endian dwarf5_byte_order_)
-      : dwarf5_byte_order (dwarf5_byte_order_)
-    {}
-
-    /* Call std::vector::reserve for NELEM elements.  */
-    virtual void reserve (size_t nelem) = 0;
-
-    /* Call std::vector::push_back with store_unsigned_integer byte
-       reordering for ELEM.  */
-    virtual void push_back_reorder (size_t elem) = 0;
-
-    /* Return expected output size in bytes.  */
-    virtual size_t bytes () const = 0;
-
-    /* Write name table to FILE.  */
-    virtual void file_write (FILE *file) const = 0;
-  };
-
-  /* Template to unify DWARF-32 and DWARF-64 output.  */
-  template<typename OffsetSize>
-  class offset_vec_tmpl : public offset_vec
-  {
-  public:
-    explicit offset_vec_tmpl (bfd_endian dwarf5_byte_order_)
-      : offset_vec (dwarf5_byte_order_)
-    {}
-
-    /* Implement offset_vec::reserve.  */
-    void reserve (size_t nelem) override
-    {
-      m_vec.reserve (nelem);
-    }
-
-    /* Implement offset_vec::push_back_reorder.  */
-    void push_back_reorder (size_t elem) override
-    {
-      m_vec.push_back (elem);
-      /* Check for overflow.  */
-      gdb_assert (m_vec.back () == elem);
-      store_unsigned_integer (reinterpret_cast<gdb_byte *> (&m_vec.back ()),
-			      sizeof (m_vec.back ()), dwarf5_byte_order, elem);
-    }
-
-    /* Implement offset_vec::bytes.  */
-    size_t bytes () const override
-    {
-      return m_vec.size () * sizeof (m_vec[0]);
-    }
-
-    /* Implement offset_vec::file_write.  */
-    void file_write (FILE *file) const override
-    {
-      ::file_write (file, m_vec);
-    }
-
-  private:
-    std::vector<OffsetSize> m_vec;
-  };
-
-  /* Base class to unify DWARF-32 and DWARF-64 .debug_names output
-     respecting name table width.  */
-  class dwarf
-  {
-  public:
-    offset_vec &name_table_string_offs, &name_table_entry_offs;
-
-    dwarf (offset_vec &name_table_string_offs_,
-	   offset_vec &name_table_entry_offs_)
-      : name_table_string_offs (name_table_string_offs_),
-	name_table_entry_offs (name_table_entry_offs_)
-    {
-    }
-  };
-
-  /* Template to unify DWARF-32 and DWARF-64 .debug_names output
-     respecting name table width.  */
-  template<typename OffsetSize>
-  class dwarf_tmpl : public dwarf
-  {
-  public:
-    explicit dwarf_tmpl (bfd_endian dwarf5_byte_order_)
-      : dwarf (m_name_table_string_offs, m_name_table_entry_offs),
-	m_name_table_string_offs (dwarf5_byte_order_),
-	m_name_table_entry_offs (dwarf5_byte_order_)
-    {}
-
-  private:
-    offset_vec_tmpl<OffsetSize> m_name_table_string_offs;
-    offset_vec_tmpl<OffsetSize> m_name_table_entry_offs;
-  };
-
-  /* Try to reconstruct original DWARF tag for given partial_symbol.
-     This function is not DWARF-5 compliant but it is sufficient for
-     GDB as a DWARF-5 index consumer.  */
-  static int psymbol_tag (const struct partial_symbol *psym)
-  {
-    domain_enum domain = psym->domain;
-    enum address_class aclass = psym->aclass;
-
-    switch (domain)
-      {
-      case VAR_DOMAIN:
-	switch (aclass)
-	  {
-	  case LOC_BLOCK:
-	    return DW_TAG_subprogram;
-	  case LOC_TYPEDEF:
-	    return DW_TAG_typedef;
-	  case LOC_COMPUTED:
-	  case LOC_CONST_BYTES:
-	  case LOC_OPTIMIZED_OUT:
-	  case LOC_STATIC:
-	    return DW_TAG_variable;
-	  case LOC_CONST:
-	    /* Note: It's currently impossible to recognize psyms as enum values
-	       short of reading the type info.  For now punt.  */
-	    return DW_TAG_variable;
-	  default:
-	    /* There are other LOC_FOO values that one might want to classify
-	       as variables, but dwarf2read.c doesn't currently use them.  */
-	    return DW_TAG_variable;
-	  }
-      case STRUCT_DOMAIN:
-	return DW_TAG_structure_type;
-      default:
-	return 0;
-      }
-  }
-
-  /* Call insert for all partial symbols and mark them in PSYMS_SEEN.  */
-  void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen,
-		       struct partial_symbol **psymp, int count, int cu_index,
-		       bool is_static, unit_kind kind)
-  {
-    for (; count-- > 0; ++psymp)
-      {
-	struct partial_symbol *psym = *psymp;
-
-	/* Only add a given psymbol once.  */
-	if (psyms_seen.insert (psym).second)
-	  insert (psym, cu_index, is_static, kind);
-      }
-  }
-
-  /* A helper function that writes a single signatured_type
-     to a debug_names.  */
-  void
-  write_one_signatured_type (struct signatured_type *entry,
-			     struct signatured_type_index_data *info)
-  {
-    struct partial_symtab *psymtab = entry->per_cu.v.psymtab;
-
-    write_psymbols (info->psyms_seen,
-		    (info->objfile->partial_symtabs->global_psymbols.data ()
-		     + psymtab->globals_offset),
-		    psymtab->n_global_syms, info->cu_index, false,
-		    unit_kind::tu);
-    write_psymbols (info->psyms_seen,
-		    (info->objfile->partial_symtabs->static_psymbols.data ()
-		     + psymtab->statics_offset),
-		    psymtab->n_static_syms, info->cu_index, true,
-		    unit_kind::tu);
-
-    info->types_list.append_uint (dwarf5_offset_size (), m_dwarf5_byte_order,
-				  to_underlying (entry->per_cu.sect_off));
-
-    ++info->cu_index;
-  }
-
-  /* Store value of each symbol.  */
-  std::unordered_map<c_str_view, std::set<symbol_value>, c_str_view_hasher>
-    m_name_to_value_set;
-
-  /* Tables of DWARF-5 .debug_names.  They are in object file byte
-     order.  */
-  std::vector<uint32_t> m_bucket_table;
-  std::vector<uint32_t> m_hash_table;
-
-  const bfd_endian m_dwarf5_byte_order;
-  dwarf_tmpl<uint32_t> m_dwarf32;
-  dwarf_tmpl<uint64_t> m_dwarf64;
-  dwarf &m_dwarf;
-  offset_vec &m_name_table_string_offs, &m_name_table_entry_offs;
-  debug_str_lookup m_debugstrlookup;
-
-  /* Map each used .debug_names abbreviation tag parameter to its
-     index value.  */
-  std::unordered_map<index_key, int, index_key_hasher> m_indexkey_to_idx;
-
-  /* Next unused .debug_names abbreviation tag for
-     m_indexkey_to_idx.  */
-  int m_idx_next = 1;
-
-  /* .debug_names abbreviation table.  */
-  data_buf m_abbrev_table;
-
-  /* .debug_names entry pool.  */
-  data_buf m_entry_pool;
-
-  /* Temporary storage for Ada names.  */
-  auto_obstack m_string_obstack;
-};
-
-/* Return iff any of the needed offsets does not fit into 32-bit
-   .debug_names section.  */
-
-static bool
-check_dwarf64_offsets (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      if (to_underlying (per_cu->sect_off) >= (static_cast<uint64_t> (1) << 32))
-	return true;
-    }
-  for (const signatured_type *sigtype : dwarf2_per_objfile->all_type_units)
-    {
-      const dwarf2_per_cu_data &per_cu = sigtype->per_cu;
-
-      if (to_underlying (per_cu.sect_off) >= (static_cast<uint64_t> (1) << 32))
-	return true;
-    }
-  return false;
-}
-
-/* The psyms_seen set is potentially going to be largish (~40k
-   elements when indexing a -g3 build of GDB itself).  Estimate the
-   number of elements in order to avoid too many rehashes, which
-   require rebuilding buckets and thus many trips to
-   malloc/free.  */
-
-static size_t
-psyms_seen_size (struct dwarf2_per_objfile *dwarf2_per_objfile)
-{
-  size_t psyms_count = 0;
-  for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
-    {
-      struct partial_symtab *psymtab = per_cu->v.psymtab;
-
-      if (psymtab != NULL && psymtab->user == NULL)
-	recursively_count_psymbols (psymtab, psyms_count);
-    }
-  /* Generating an index for gdb itself shows a ratio of
-     TOTAL_SEEN_SYMS/UNIQUE_SYMS or ~5.  4 seems like a good bet.  */
-  return psyms_count / 4;
-}
-
-/* Assert that FILE's size is EXPECTED_SIZE.  Assumes file's seek
-   position is at the end of the file.  */
-
-static void
-assert_file_size (FILE *file, size_t expected_size)
-{
-  const auto file_size = ftell (file);
-  if (file_size == -1)
-    perror_with_name (("ftell"));
-  gdb_assert (file_size == expected_size);
-}
-
-/* Write a gdb index file to OUT_FILE from all the sections passed as
-   arguments.  */
-
-static void
-write_gdbindex_1 (FILE *out_file,
-		  const data_buf &cu_list,
-		  const data_buf &types_cu_list,
-		  const data_buf &addr_vec,
-		  const data_buf &symtab_vec,
-		  const data_buf &constant_pool)
-{
-  data_buf contents;
-  const offset_type size_of_header = 6 * sizeof (offset_type);
-  offset_type total_len = size_of_header;
-
-  /* The version number.  */
-  contents.append_data (MAYBE_SWAP (8));
-
-  /* The offset of the CU list from the start of the file.  */
-  contents.append_data (MAYBE_SWAP (total_len));
-  total_len += cu_list.size ();
-
-  /* The offset of the types CU list from the start of the file.  */
-  contents.append_data (MAYBE_SWAP (total_len));
-  total_len += types_cu_list.size ();
-
-  /* The offset of the address table from the start of the file.  */
-  contents.append_data (MAYBE_SWAP (total_len));
-  total_len += addr_vec.size ();
-
-  /* The offset of the symbol table from the start of the file.  */
-  contents.append_data (MAYBE_SWAP (total_len));
-  total_len += symtab_vec.size ();
-
-  /* The offset of the constant pool from the start of the file.  */
-  contents.append_data (MAYBE_SWAP (total_len));
-  total_len += constant_pool.size ();
-
-  gdb_assert (contents.size () == size_of_header);
-
-  contents.file_write (out_file);
-  cu_list.file_write (out_file);
-  types_cu_list.file_write (out_file);
-  addr_vec.file_write (out_file);
-  symtab_vec.file_write (out_file);
-  constant_pool.file_write (out_file);
-
-  assert_file_size (out_file, total_len);
-}
-
-/* Write contents of a .gdb_index section for OBJFILE into OUT_FILE.
-   If OBJFILE has an associated dwz file, write contents of a .gdb_index
-   section for that dwz file into DWZ_OUT_FILE.  If OBJFILE does not have an
-   associated dwz file, DWZ_OUT_FILE must be NULL.  */
-
-static void
-write_gdbindex (struct dwarf2_per_objfile *dwarf2_per_objfile, FILE *out_file,
-		FILE *dwz_out_file)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  mapped_symtab symtab;
-  data_buf objfile_cu_list;
-  data_buf dwz_cu_list;
-
-  /* While we're scanning CU's create a table that maps a psymtab pointer
-     (which is what addrmap records) to its index (which is what is recorded
-     in the index file).  This will later be needed to write the address
-     table.  */
-  psym_index_map cu_index_htab;
-  cu_index_htab.reserve (dwarf2_per_objfile->all_comp_units.size ());
-
-  /* The CU list is already sorted, so we don't need to do additional
-     work here.  Also, the debug_types entries do not appear in
-     all_comp_units, but only in their own hash table.  */
-
-  std::unordered_set<partial_symbol *> psyms_seen
-    (psyms_seen_size (dwarf2_per_objfile));
-  for (int i = 0; i < dwarf2_per_objfile->all_comp_units.size (); ++i)
-    {
-      struct dwarf2_per_cu_data *per_cu
-	= dwarf2_per_objfile->all_comp_units[i];
-      struct partial_symtab *psymtab = per_cu->v.psymtab;
-
-      /* CU of a shared file from 'dwz -m' may be unused by this main file.
-	 It may be referenced from a local scope but in such case it does not
-	 need to be present in .gdb_index.  */
-      if (psymtab == NULL)
-	continue;
-
-      if (psymtab->user == NULL)
-	recursively_write_psymbols (objfile, psymtab, &symtab,
-				    psyms_seen, i);
-
-      const auto insertpair = cu_index_htab.emplace (psymtab, i);
-      gdb_assert (insertpair.second);
-
-      /* The all_comp_units list contains CUs read from the objfile as well as
-	 from the eventual dwz file.  We need to place the entry in the
-	 corresponding index.  */
-      data_buf &cu_list = per_cu->is_dwz ? dwz_cu_list : objfile_cu_list;
-      cu_list.append_uint (8, BFD_ENDIAN_LITTLE,
-			   to_underlying (per_cu->sect_off));
-      cu_list.append_uint (8, BFD_ENDIAN_LITTLE, per_cu->length);
-    }
-
-  /* Dump the address map.  */
-  data_buf addr_vec;
-  write_address_map (objfile, addr_vec, cu_index_htab);
-
-  /* Write out the .debug_type entries, if any.  */
-  data_buf types_cu_list;
-  if (dwarf2_per_objfile->signatured_types)
-    {
-      signatured_type_index_data sig_data (types_cu_list,
-					   psyms_seen);
-
-      sig_data.objfile = objfile;
-      sig_data.symtab = &symtab;
-      sig_data.cu_index = dwarf2_per_objfile->all_comp_units.size ();
-      htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
-			      write_one_signatured_type, &sig_data);
-    }
-
-  /* Now that we've processed all symbols we can shrink their cu_indices
-     lists.  */
-  uniquify_cu_indices (&symtab);
-
-  data_buf symtab_vec, constant_pool;
-  write_hash_table (&symtab, symtab_vec, constant_pool);
-
-  write_gdbindex_1(out_file, objfile_cu_list, types_cu_list, addr_vec,
-		   symtab_vec, constant_pool);
-
-  if (dwz_out_file != NULL)
-    write_gdbindex_1 (dwz_out_file, dwz_cu_list, {}, {}, {}, {});
-  else
-    gdb_assert (dwz_cu_list.empty ());
-}
-
-/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension.  */
-static const gdb_byte dwarf5_gdb_augmentation[] = { 'G', 'D', 'B', 0 };
-
-/* Write a new .debug_names section for OBJFILE into OUT_FILE, write
-   needed addition to .debug_str section to OUT_FILE_STR.  Return how
-   many bytes were expected to be written into OUT_FILE.  */
-
-static void
-write_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile,
-		   FILE *out_file, FILE *out_file_str)
-{
-  const bool dwarf5_is_dwarf64 = check_dwarf64_offsets (dwarf2_per_objfile);
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-  const enum bfd_endian dwarf5_byte_order
-    = gdbarch_byte_order (get_objfile_arch (objfile));
-
-  /* The CU list is already sorted, so we don't need to do additional
-     work here.  Also, the debug_types entries do not appear in
-     all_comp_units, but only in their own hash table.  */
-  data_buf cu_list;
-  debug_names nametable (dwarf2_per_objfile, dwarf5_is_dwarf64,
-			 dwarf5_byte_order);
-  std::unordered_set<partial_symbol *>
-    psyms_seen (psyms_seen_size (dwarf2_per_objfile));
-  for (int i = 0; i < dwarf2_per_objfile->all_comp_units.size (); ++i)
-    {
-      const dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->all_comp_units[i];
-      partial_symtab *psymtab = per_cu->v.psymtab;
-
-      /* CU of a shared file from 'dwz -m' may be unused by this main
-	 file.  It may be referenced from a local scope but in such
-	 case it does not need to be present in .debug_names.  */
-      if (psymtab == NULL)
-	continue;
-
-      if (psymtab->user == NULL)
-	nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen, i);
-
-      cu_list.append_uint (nametable.dwarf5_offset_size (), dwarf5_byte_order,
-			   to_underlying (per_cu->sect_off));
-    }
-
-  /* Write out the .debug_type entries, if any.  */
-  data_buf types_cu_list;
-  if (dwarf2_per_objfile->signatured_types)
-    {
-      debug_names::write_one_signatured_type_data sig_data (nametable,
-			signatured_type_index_data (types_cu_list, psyms_seen));
-
-      sig_data.info.objfile = objfile;
-      /* It is used only for gdb_index.  */
-      sig_data.info.symtab = nullptr;
-      sig_data.info.cu_index = 0;
-      htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
-			      debug_names::write_one_signatured_type,
-			      &sig_data);
-    }
-
-  nametable.build ();
-
-  /* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC.  */
-
-  const offset_type bytes_of_header
-    = ((dwarf5_is_dwarf64 ? 12 : 4)
-       + 2 + 2 + 7 * 4
-       + sizeof (dwarf5_gdb_augmentation));
-  size_t expected_bytes = 0;
-  expected_bytes += bytes_of_header;
-  expected_bytes += cu_list.size ();
-  expected_bytes += types_cu_list.size ();
-  expected_bytes += nametable.bytes ();
-  data_buf header;
-
-  if (!dwarf5_is_dwarf64)
-    {
-      const uint64_t size64 = expected_bytes - 4;
-      gdb_assert (size64 < 0xfffffff0);
-      header.append_uint (4, dwarf5_byte_order, size64);
-    }
-  else
-    {
-      header.append_uint (4, dwarf5_byte_order, 0xffffffff);
-      header.append_uint (8, dwarf5_byte_order, expected_bytes - 12);
-    }
-
-  /* The version number.  */
-  header.append_uint (2, dwarf5_byte_order, 5);
-
-  /* Padding.  */
-  header.append_uint (2, dwarf5_byte_order, 0);
-
-  /* comp_unit_count - The number of CUs in the CU list.  */
-  header.append_uint (4, dwarf5_byte_order,
-		      dwarf2_per_objfile->all_comp_units.size ());
-
-  /* local_type_unit_count - The number of TUs in the local TU
-     list.  */
-  header.append_uint (4, dwarf5_byte_order,
-		      dwarf2_per_objfile->all_type_units.size ());
-
-  /* foreign_type_unit_count - The number of TUs in the foreign TU
-     list.  */
-  header.append_uint (4, dwarf5_byte_order, 0);
-
-  /* bucket_count - The number of hash buckets in the hash lookup
-     table.  */
-  header.append_uint (4, dwarf5_byte_order, nametable.bucket_count ());
-
-  /* name_count - The number of unique names in the index.  */
-  header.append_uint (4, dwarf5_byte_order, nametable.name_count ());
-
-  /* abbrev_table_size - The size in bytes of the abbreviations
-     table.  */
-  header.append_uint (4, dwarf5_byte_order, nametable.abbrev_table_bytes ());
-
-  /* augmentation_string_size - The size in bytes of the augmentation
-     string.  This value is rounded up to a multiple of 4.  */
-  static_assert (sizeof (dwarf5_gdb_augmentation) % 4 == 0, "");
-  header.append_uint (4, dwarf5_byte_order, sizeof (dwarf5_gdb_augmentation));
-  header.append_data (dwarf5_gdb_augmentation);
-
-  gdb_assert (header.size () == bytes_of_header);
-
-  header.file_write (out_file);
-  cu_list.file_write (out_file);
-  types_cu_list.file_write (out_file);
-  nametable.file_write (out_file, out_file_str);
-
-  assert_file_size (out_file, expected_bytes);
-}
-
-/* This represents an index file being written (work-in-progress).
-
-   The data is initially written to a temporary file.  When the finalize method
-   is called, the file is closed and moved to its final location.
-
-   On failure (if this object is being destroyed with having called finalize),
-   the temporary file is closed and deleted.  */
-
-struct index_wip_file
-{
-  index_wip_file (const char *dir, const char *basename,
-		  const char *suffix)
-  {
-    filename = (std::string (dir) + SLASH_STRING + basename
-    		+ suffix);
-
-    filename_temp = make_temp_filename (filename);
-
-    scoped_fd out_file_fd (gdb_mkostemp_cloexec (filename_temp.data (),
-						 O_BINARY));
-    if (out_file_fd.get () == -1)
-      perror_with_name (("mkstemp"));
-
-    out_file = out_file_fd.to_file ("wb");
-
-    if (out_file == nullptr)
-      error (_("Can't open `%s' for writing"), filename_temp.data ());
-
-    unlink_file.emplace (filename_temp.data ());
-  }
-
-  void finalize ()
-  {
-    /* We want to keep the file.  */
-    unlink_file->keep ();
-
-    /* Close and move the str file in place.  */
-    unlink_file.reset ();
-    if (rename (filename_temp.data (), filename.c_str ()) != 0)
-      perror_with_name (("rename"));
-  }
-
-  std::string filename;
-  gdb::char_vector filename_temp;
-
-  /* Order matters here; we want FILE to be closed before
-     FILENAME_TEMP is unlinked, because on MS-Windows one cannot
-     delete a file that is still open.  So, we wrap the unlinker in an
-     optional and emplace it once we know the file name.  */
-  gdb::optional<gdb::unlinker> unlink_file;
-
-  gdb_file_up out_file;
-};
-
-/* See dwarf-index-write.h.  */
-
-void
-write_psymtabs_to_index (struct dwarf2_per_objfile *dwarf2_per_objfile,
-			 const char *dir, const char *basename,
-			 const char *dwz_basename,
-			 dw_index_kind index_kind)
-{
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
-
-  if (dwarf2_per_objfile->using_index)
-    error (_("Cannot use an index to create the index"));
-
-  if (dwarf2_per_objfile->types.size () > 1)
-    error (_("Cannot make an index when the file has multiple .debug_types sections"));
-
-  if (!objfile->partial_symtabs->psymtabs
-      || !objfile->partial_symtabs->psymtabs_addrmap)
-    return;
-
-  struct stat st;
-  if (stat (objfile_name (objfile), &st) < 0)
-    perror_with_name (objfile_name (objfile));
-
-  const char *index_suffix = (index_kind == dw_index_kind::DEBUG_NAMES
-			      ? INDEX5_SUFFIX : INDEX4_SUFFIX);
-
-  index_wip_file objfile_index_wip (dir, basename, index_suffix);
-  gdb::optional<index_wip_file> dwz_index_wip;
-
-  if (dwz_basename != NULL)
-      dwz_index_wip.emplace (dir, dwz_basename, index_suffix);
-
-  if (index_kind == dw_index_kind::DEBUG_NAMES)
-    {
-      index_wip_file str_wip_file (dir, basename, DEBUG_STR_SUFFIX);
-
-      write_debug_names (dwarf2_per_objfile, objfile_index_wip.out_file.get (),
-			 str_wip_file.out_file.get ());
-
-      str_wip_file.finalize ();
-    }
-  else
-    write_gdbindex (dwarf2_per_objfile, objfile_index_wip.out_file.get (),
-		    (dwz_index_wip.has_value ()
-		     ? dwz_index_wip->out_file.get () : NULL));
-
-  objfile_index_wip.finalize ();
-
-  if (dwz_index_wip.has_value ())
-    dwz_index_wip->finalize ();
-}
-
-/* Implementation of the `save gdb-index' command.
-
-   Note that the .gdb_index file format used by this command is
-   documented in the GDB manual.  Any changes here must be documented
-   there.  */
-
-static void
-save_gdb_index_command (const char *arg, int from_tty)
-{
-  const char dwarf5space[] = "-dwarf-5 ";
-  dw_index_kind index_kind = dw_index_kind::GDB_INDEX;
-
-  if (!arg)
-    arg = "";
-
-  arg = skip_spaces (arg);
-  if (strncmp (arg, dwarf5space, strlen (dwarf5space)) == 0)
-    {
-      index_kind = dw_index_kind::DEBUG_NAMES;
-      arg += strlen (dwarf5space);
-      arg = skip_spaces (arg);
-    }
-
-  if (!*arg)
-    error (_("usage: save gdb-index [-dwarf-5] DIRECTORY"));
-
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      struct stat st;
-
-      /* If the objfile does not correspond to an actual file, skip it.  */
-      if (stat (objfile_name (objfile), &st) < 0)
-	continue;
-
-      struct dwarf2_per_objfile *dwarf2_per_objfile
-	= get_dwarf2_per_objfile (objfile);
-
-      if (dwarf2_per_objfile != NULL)
-	{
-	  try
-	    {
-	      const char *basename = lbasename (objfile_name (objfile));
-	      const dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile);
-	      const char *dwz_basename = NULL;
-
-	      if (dwz != NULL)
-		dwz_basename = lbasename (dwz->filename ());
-
-	      write_psymtabs_to_index (dwarf2_per_objfile, arg, basename,
-				       dwz_basename, index_kind);
-	    }
-	  catch (const gdb_exception_error &except)
-	    {
-	      exception_fprintf (gdb_stderr, except,
-				 _("Error while writing index for `%s': "),
-				 objfile_name (objfile));
-	    }
-	    }
-
-    }
-}
-
-void
-_initialize_dwarf_index_write ()
-{
-  cmd_list_element *c = add_cmd ("gdb-index", class_files,
-				 save_gdb_index_command, _("\
-Save a gdb-index file.\n\
-Usage: save gdb-index [-dwarf-5] DIRECTORY\n\
-\n\
-No options create one file with .gdb-index extension for pre-DWARF-5\n\
-compatible .gdb_index section.  With -dwarf-5 creates two files with\n\
-extension .debug_names and .debug_str for DWARF-5 .debug_names section."),
-	       &save_cmdlist);
-  set_cmd_completer (c, filename_completer);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-write.h ./gdb/dwarf-index-write.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/dwarf-index-write.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/dwarf-index-write.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-/* DWARF index writing support for GDB.
-
-   Copyright (C) 2018-2020 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 DWARF_INDEX_WRITE_H
-#define DWARF_INDEX_WRITE_H
-
-#include "symfile.h"
-#include "dwarf2read.h"
-
-/* Create index files for OBJFILE in the directory DIR.
-
-   An index file is created for OBJFILE itself, and is created for its
-   associated dwz file, if it has one.
-
-   BASENAME is the desired filename base for OBJFILE's index.  An extension
-   derived from INDEX_KIND is added to this base name.  DWZ_BASENAME is the
-   same, but for the dwz file's index.  */
-
-extern void write_psymtabs_to_index
-  (struct dwarf2_per_objfile *dwarf2_per_objfile, const char *dir,
-   const char *basename, const char *dwz_basename, dw_index_kind index_kind);
-
-#endif /* DWARF_INDEX_WRITE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/elf-none-tdep.c ./gdb/elf-none-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/elf-none-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/elf-none-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,126 @@
+/* Common code for targets with the none ABI (bare-metal), but where the
+   BFD library is build with ELF support.
+
+   Copyright (C) 2020-2021 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 "elf-none-tdep.h"
+#include "regset.h"
+#include "elf-bfd.h"            /* for elfcore_write_* */
+#include "inferior.h"
+#include "regcache.h"
+#include "gdbarch.h"
+#include "gcore.h"
+#include "gcore-elf.h"
+
+/* Build the note section for a corefile, and return it in a malloc
+   buffer.  Currently this just dumps all available registers for each
+   thread.  */
+
+static gdb::unique_xmalloc_ptr<char>
+elf_none_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd,
+			      int *note_size)
+{
+  gdb::unique_xmalloc_ptr<char> note_data;
+
+  /* Add note information about the executable and its arguments.  */
+  std::string fname;
+  std::string psargs;
+  static const size_t fname_len = 16;
+  static const size_t psargs_len = 80;
+  if (get_exec_file (0))
+    {
+      const char *exe = get_exec_file (0);
+      fname = lbasename (exe);
+      psargs = std::string (exe);
+
+      const char *infargs = get_inferior_args ();
+      if (infargs != nullptr)
+	psargs += " " + std::string (infargs);
+
+      /* All existing targets that handle writing out prpsinfo expect the
+	 fname and psargs strings to be at least 16 and 80 characters long
+	 respectively, including a null terminator at the end.  Resize to
+	 the expected length minus one to ensure there is a null within the
+	 required length.  */
+      fname.resize (fname_len - 1);
+      psargs.resize (psargs_len - 1);
+    }
+
+  /* Resize the buffers up to their required lengths.  This will fill any
+     remaining space with the null character.  */
+  fname.resize (fname_len);
+  psargs.resize (psargs_len);
+
+  /* Now write out the prpsinfo structure.  */
+  note_data.reset (elfcore_write_prpsinfo (obfd, note_data.release (),
+					   note_size, fname.c_str (),
+					   psargs.c_str ()));
+  if (note_data == nullptr)
+    return nullptr;
+
+  /* Thread register information.  */
+  try
+    {
+      update_thread_list ();
+    }
+  catch (const gdb_exception_error &e)
+    {
+      exception_print (gdb_stderr, e);
+    }
+
+  /* Like the Linux kernel, prefer dumping the signalled thread first.
+     "First thread" is what tools use to infer the signalled thread.  */
+  thread_info *signalled_thr = gcore_find_signalled_thread ();
+
+  /* All threads are reported as having been stopped by the same signal
+     that stopped SIGNALLED_THR.  */
+  gdb_signal stop_signal;
+  if (signalled_thr != nullptr)
+    stop_signal = signalled_thr->suspend.stop_signal;
+  else
+    stop_signal = GDB_SIGNAL_0;
+
+  if (signalled_thr != nullptr)
+    gcore_elf_build_thread_register_notes (gdbarch, signalled_thr,
+					   stop_signal, obfd, &note_data,
+					   note_size);
+  for (thread_info *thr : current_inferior ()->non_exited_threads ())
+    {
+      if (thr == signalled_thr)
+	continue;
+
+      gcore_elf_build_thread_register_notes (gdbarch, thr, stop_signal, obfd,
+					     &note_data, note_size);
+    }
+
+
+  /* Target description.  */
+  gcore_elf_make_tdesc_note (obfd, &note_data, note_size);
+
+  return note_data;
+}
+
+/* See none-tdep.h.  */
+
+void
+elf_none_init_abi (struct gdbarch *gdbarch)
+{
+  /* Default core file support.  */
+  set_gdbarch_make_corefile_notes (gdbarch, elf_none_make_corefile_notes);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/elf-none-tdep.h ./gdb/elf-none-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/elf-none-tdep.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/elf-none-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,30 @@
+/* Architecture independent code for ABI 'none' (bare-metal).
+
+   Copyright (C) 2021 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 NONE_TDEP_H
+#define NONE_TDEP_H
+
+struct gdbarch;
+
+/* Initialize support for cross-architecture features applicable for the
+   GDB_OSABI_NONE ABI, that is bare-metal targets.  */
+
+void elf_none_init_abi (struct gdbarch *gdbarch);
+
+#endif /* NONE_TDEP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/elfread.c ./gdb/elfread.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/elfread.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/elfread.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Read ELF (Executable and Linking Format) object files for GDB.
 
-   Copyright (C) 1991-2020 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    Written by Fred Fish at Cygnus Support.
 
@@ -49,11 +49,9 @@
 #include "mdebugread.h"
 #include "ctfread.h"
 #include "gdbsupport/gdb_string_view.h"
-
-/* Forward declarations.  */
-extern const struct sym_fns elf_sym_fns_gdb_index;
-extern const struct sym_fns elf_sym_fns_debug_names;
-extern const struct sym_fns elf_sym_fns_lazy_psyms;
+#include "gdbsupport/scoped_fd.h"
+#include "debuginfod-support.h"
+#include "dwarf2/public.h"
 
 /* The struct elfinfo is available only during ELF symbol table and
    psymtab reading.  It is destroyed at the completion of psymtab-reading.
@@ -83,14 +81,13 @@ static const struct bfd_key<elfread_data
 
 /* Locate the segments in ABFD.  */
 
-static struct symfile_segment_data *
+static symfile_segment_data_up
 elf_symfile_segments (bfd *abfd)
 {
   Elf_Internal_Phdr *phdrs, **segments;
   long phdrs_size;
   int num_phdrs, num_segments, num_sections, i;
   asection *sect;
-  struct symfile_segment_data *data;
 
   phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
   if (phdrs_size == -1)
@@ -110,19 +107,16 @@ elf_symfile_segments (bfd *abfd)
   if (num_segments == 0)
     return NULL;
 
-  data = XCNEW (struct symfile_segment_data);
-  data->num_segments = num_segments;
-  data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments);
-  data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments);
+  symfile_segment_data_up data (new symfile_segment_data);
+  data->segments.reserve (num_segments);
 
   for (i = 0; i < num_segments; i++)
-    {
-      data->segment_bases[i] = segments[i]->p_vaddr;
-      data->segment_sizes[i] = segments[i]->p_memsz;
-    }
+    data->segments.emplace_back (segments[i]->p_vaddr, segments[i]->p_memsz);
 
   num_sections = bfd_count_sections (abfd);
-  data->segment_info = XCNEWVEC (int, num_sections);
+
+  /* All elements are initialized to 0 (map to no segment).  */
+  data->segment_info.resize (num_sections);
 
   for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
     {
@@ -149,10 +143,15 @@ elf_symfile_segments (bfd *abfd)
 	 RealView) use SHT_NOBITS for uninitialized data.  Since it is
 	 uninitialized, it doesn't need a program header.  Such
 	 binaries are not relocatable.  */
-      if (bfd_section_size (sect) > 0 && j == num_segments
+
+      /* Exclude debuginfo files from this warning, too, since those
+	 are often not strictly compliant with the standard. See, e.g.,
+	 ld/24717 for more discussion.  */
+      if (!is_debuginfo_file (abfd)
+	  && bfd_section_size (sect) > 0 && j == num_segments
 	  && (bfd_section_flags (sect) & SEC_LOAD) != 0)
-	warning (_("Loadable section \"%s\" outside of ELF segments"),
-		 bfd_section_name (sect));
+	warning (_("Loadable section \"%s\" outside of ELF segments\n  in %s"),
+		 bfd_section_name (sect), bfd_get_filename (abfd));
     }
 
   return data;
@@ -178,11 +177,8 @@ elf_symfile_segments (bfd *abfd)
    -kingdon).  */
 
 static void
-elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
+elf_locate_sections (asection *sectp, struct elfinfo *ei)
 {
-  struct elfinfo *ei;
-
-  ei = (struct elfinfo *) eip;
   if (strcmp (sectp->name, ".stab") == 0)
     {
       ei->stabsect = sectp;
@@ -204,17 +200,22 @@ record_minimal_symbol (minimal_symbol_re
 		       enum minimal_symbol_type ms_type,
 		       asection *bfd_section, struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
 
   if (ms_type == mst_text || ms_type == mst_file_text
       || ms_type == mst_text_gnu_ifunc)
     address = gdbarch_addr_bits_remove (gdbarch, address);
 
+  /* We only setup section information for allocatable sections.  Usually
+     we'd only expect to find msymbols for allocatable sections, but if the
+     ELF is malformed then this might not be the case.  In that case don't
+     create an msymbol that references an uninitialised section object.  */
+  int section_index = 0;
+  if ((bfd_section_flags (bfd_section) & SEC_ALLOC) == SEC_ALLOC)
+    section_index = gdb_bfd_section_index (objfile->obfd, bfd_section);
+
   struct minimal_symbol *result
-    = reader.record_full (name, copy_name, address,
-			  ms_type,
-			  gdb_bfd_section_index (objfile->obfd,
-						 bfd_section));
+    = reader.record_full (name, copy_name, address, ms_type, section_index);
   if ((objfile->flags & OBJF_MAINLINE) == 0
       && (ms_type == mst_data || ms_type == mst_bss))
     result->maybe_copied = 1;
@@ -244,7 +245,7 @@ elf_symtab_read (minimal_symbol_reader &
 		 long number_of_symbols, asymbol **symbol_table,
 		 bool copy_names)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   asymbol *sym;
   long i;
   CORE_ADDR symaddr;
@@ -348,11 +349,7 @@ elf_symtab_read (minimal_symbol_reader &
       if (type == ST_DYNAMIC && !stripped)
 	continue;
       if (sym->flags & BSF_FILE)
-	{
-	  filesymname
-	    = ((const char *) objfile->per_bfd->filename_cache.insert
-	       (sym->name, strlen (sym->name) + 1));
-	}
+	filesymname = objfile->intern (sym->name);
       else if (sym->flags & BSF_SECTION_SYM)
 	continue;
       else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
@@ -556,7 +553,7 @@ elf_rel_plt_read (minimal_symbol_reader
   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
   asection *relplt, *got_plt;
   bfd_size_type reloc_count, reloc;
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
   size_t ptr_size = TYPE_LENGTH (ptr_type);
 
@@ -744,7 +741,7 @@ elf_gnu_ifunc_record_cache (const char *
     {
       struct elf_gnu_ifunc_cache *entry_found_p
 	= (struct elf_gnu_ifunc_cache *) *slot;
-      struct gdbarch *gdbarch = get_objfile_arch (objfile);
+      struct gdbarch *gdbarch = objfile->arch ();
 
       if (entry_found_p->addr != addr)
 	{
@@ -822,7 +819,7 @@ elf_gnu_ifunc_resolve_by_got (const char
   for (objfile *objfile : current_program_space->objfiles ())
     {
       bfd *obfd = objfile->obfd;
-      struct gdbarch *gdbarch = get_objfile_arch (objfile);
+      struct gdbarch *gdbarch = objfile->arch ();
       struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
       size_t ptr_size = TYPE_LENGTH (ptr_type);
       CORE_ADDR pointer_address, addr;
@@ -846,8 +843,8 @@ elf_gnu_ifunc_resolve_by_got (const char
       if (target_read_memory (pointer_address, buf, ptr_size) != 0)
 	continue;
       addr = extract_typed_address (buf, ptr_type);
-      addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
-						 current_top_target ());
+      addr = gdbarch_convert_from_func_ptr_addr
+	(gdbarch, addr, current_inferior ()->top_target ());
       addr = gdbarch_addr_bits_remove (gdbarch, addr);
 
       if (elf_gnu_ifunc_record_cache (name, addr))
@@ -914,12 +911,13 @@ elf_gnu_ifunc_resolve_addr (struct gdbar
      parameter.  FUNCTION is the function entry address.  ADDRESS may be a
      function descriptor.  */
 
-  target_auxv_search (current_top_target (), AT_HWCAP, &hwcap);
+  target_auxv_search (current_inferior ()->top_target (), AT_HWCAP, &hwcap);
   hwcap_val = value_from_longest (builtin_type (gdbarch)
 				  ->builtin_unsigned_long, hwcap);
   address_val = call_function_by_hand (function, NULL, hwcap_val);
   address = value_as_address (address_val);
-  address = gdbarch_convert_from_func_ptr_addr (gdbarch, address, current_top_target ());
+  address = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, address, current_inferior ()->top_target ());
   address = gdbarch_addr_bits_remove (gdbarch, address);
 
   if (name_at_pc)
@@ -1025,9 +1023,8 @@ elf_gnu_ifunc_resolver_return_stop (stru
   gdbarch_return_value (gdbarch, func_func, value_type, regcache,
 			value_contents_raw (value), NULL);
   resolved_address = value_as_address (value);
-  resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
-						    resolved_address,
-						    current_top_target ());
+  resolved_pc = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, resolved_address, current_inferior ()->top_target ());
   resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
 
   gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
@@ -1212,7 +1209,10 @@ elf_symfile_read (struct objfile *objfil
 
   memset ((char *) &ei, 0, sizeof (ei));
   if (!(objfile->flags & OBJF_READNEVER))
-    bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
+    {
+      for (asection *sect : gdb_bfd_sections (abfd))
+	elf_locate_sections (sect, &ei);
+    }
 
   elf_read_minimal_symbols (objfile, symfile_flags, &ei);
 
@@ -1233,7 +1233,7 @@ elf_symfile_read (struct objfile *objfil
       const struct ecoff_debug_swap *swap;
 
       /* .mdebug section, presumably holding ECOFF debugging
-         information.  */
+	 information.  */
       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
       if (swap)
 	elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
@@ -1243,7 +1243,7 @@ elf_symfile_read (struct objfile *objfil
       asection *str_sect;
 
       /* Stab sections have an associated string table that looks like
-         a separate section.  */
+	 a separate section.  */
       str_sect = bfd_get_section_by_name (abfd, ".stabstr");
 
       /* FIXME should probably warn about a stab section without a stabstr.  */
@@ -1255,47 +1255,20 @@ elf_symfile_read (struct objfile *objfil
     }
 
   if (dwarf2_has_info (objfile, NULL, true))
-    {
-      dw_index_kind index_kind;
-
-      /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF
-	 debug information present in OBJFILE.  If there is such debug
-	 info present never use an index.  */
-      if (!objfile_has_partial_symbols (objfile)
-	  && dwarf2_initialize_objfile (objfile, &index_kind))
-	{
-	  switch (index_kind)
-	    {
-	    case dw_index_kind::GDB_INDEX:
-	      objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
-	      break;
-	    case dw_index_kind::DEBUG_NAMES:
-	      objfile_set_sym_fns (objfile, &elf_sym_fns_debug_names);
-	      break;
-	    }
-	}
-      else
-	{
-	  /* It is ok to do this even if the stabs reader made some
-	     partial symbols, because OBJF_PSYMTABS_READ has not been
-	     set, and so our lazy reader function will still be called
-	     when needed.  */
-	  objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
-	}
-    }
+    dwarf2_initialize_objfile (objfile);
   /* If the file has its own symbol tables it has no separate debug
      info.  `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
      SYMTABS/PSYMTABS.  `.gnu_debuglink' may no longer be present with
      `.note.gnu.build-id'.
 
-     .gnu_debugdata is !objfile_has_partial_symbols because it contains only
+     .gnu_debugdata is !objfile::has_partial_symbols because it contains only
      .symtab, not .debug_* section.  But if we already added .gnu_debugdata as
      an objfile via find_separate_debug_file_in_section there was no separate
      debug info available.  Therefore do not attempt to search for another one,
      objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
      be NULL and we would possibly violate it.  */
 
-  else if (!objfile_has_partial_symbols (objfile)
+  else if (!objfile->has_partial_symbols ()
 	   && objfile->separate_debug_objfile == NULL
 	   && objfile->separate_debug_objfile_backlink == NULL)
     {
@@ -1311,8 +1284,36 @@ elf_symfile_read (struct objfile *objfil
 	  symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
 				    symfile_flags, objfile);
 	}
-	else
+      else
+	{
 	  has_dwarf2 = false;
+	  const struct bfd_build_id *build_id = build_id_bfd_get (objfile->obfd);
+
+	  if (build_id != nullptr)
+	    {
+	      gdb::unique_xmalloc_ptr<char> symfile_path;
+	      scoped_fd fd (debuginfod_debuginfo_query (build_id->data,
+							build_id->size,
+							objfile->original_name,
+							&symfile_path));
+
+	      if (fd.get () >= 0)
+		{
+		  /* File successfully retrieved from server.  */
+		  gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (symfile_path.get ()));
+
+		  if (debug_bfd == nullptr)
+		    warning (_("File \"%s\" from debuginfod cannot be opened as bfd"),
+			     objfile->original_name);
+		  else if (build_id_verify (debug_bfd.get (), build_id->size, build_id->data))
+		    {
+		      symbol_file_add_separate (debug_bfd.get (), symfile_path.get (),
+						symfile_flags, objfile);
+		      has_dwarf2 = true;
+		    }
+		}
+	    }
+	}
     }
 
   /* Read the CTF section only if there is no DWARF info.  */
@@ -1322,15 +1323,6 @@ elf_symfile_read (struct objfile *objfil
     }
 }
 
-/* Callback to lazily read psymtabs.  */
-
-static void
-read_psyms (struct objfile *objfile)
-{
-  if (dwarf2_has_info (objfile, NULL))
-    dwarf2_build_psymtabs (objfile);
-}
-
 /* Initialize anything that needs initializing when a completely new symbol
    file is specified (not just adding some symbols from another file, e.g. a
    shared library).  */
@@ -1397,66 +1389,12 @@ static const struct sym_fns elf_sym_fns
   elf_new_init,			/* init anything gbl to entire symtab */
   elf_symfile_init,		/* read initial info, setup for sym_read() */
   elf_symfile_read,		/* read a symbol file into symtab */
-  NULL,				/* sym_read_psymbols */
-  elf_symfile_finish,		/* finished with file, cleanup */
-  default_symfile_offsets,	/* Translate ext. to int. relocation */
-  elf_symfile_segments,		/* Get segment information from a file.  */
-  NULL,
-  default_symfile_relocate,	/* Relocate a debug section.  */
-  &elf_probe_fns,		/* sym_probe_fns */
-  &psym_functions
-};
-
-/* The same as elf_sym_fns, but not registered and lazily reads
-   psymbols.  */
-
-const struct sym_fns elf_sym_fns_lazy_psyms =
-{
-  elf_new_init,			/* init anything gbl to entire symtab */
-  elf_symfile_init,		/* read initial info, setup for sym_read() */
-  elf_symfile_read,		/* read a symbol file into symtab */
-  read_psyms,			/* sym_read_psymbols */
-  elf_symfile_finish,		/* finished with file, cleanup */
-  default_symfile_offsets,	/* Translate ext. to int. relocation */
-  elf_symfile_segments,		/* Get segment information from a file.  */
-  NULL,
-  default_symfile_relocate,	/* Relocate a debug section.  */
-  &elf_probe_fns,		/* sym_probe_fns */
-  &psym_functions
-};
-
-/* The same as elf_sym_fns, but not registered and uses the
-   DWARF-specific GNU index rather than psymtab.  */
-const struct sym_fns elf_sym_fns_gdb_index =
-{
-  elf_new_init,			/* init anything gbl to entire symab */
-  elf_symfile_init,		/* read initial info, setup for sym_red() */
-  elf_symfile_read,		/* read a symbol file into symtab */
-  NULL,				/* sym_read_psymbols */
-  elf_symfile_finish,		/* finished with file, cleanup */
-  default_symfile_offsets,	/* Translate ext. to int. relocation */
-  elf_symfile_segments,		/* Get segment information from a file.  */
-  NULL,
-  default_symfile_relocate,	/* Relocate a debug section.  */
-  &elf_probe_fns,		/* sym_probe_fns */
-  &dwarf2_gdb_index_functions
-};
-
-/* The same as elf_sym_fns, but not registered and uses the
-   DWARF-specific .debug_names index rather than psymtab.  */
-const struct sym_fns elf_sym_fns_debug_names =
-{
-  elf_new_init,			/* init anything gbl to entire symab */
-  elf_symfile_init,		/* read initial info, setup for sym_red() */
-  elf_symfile_read,		/* read a symbol file into symtab */
-  NULL,				/* sym_read_psymbols */
   elf_symfile_finish,		/* finished with file, cleanup */
   default_symfile_offsets,	/* Translate ext. to int. relocation */
   elf_symfile_segments,		/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
   &elf_probe_fns,		/* sym_probe_fns */
-  &dwarf2_debug_names_functions
 };
 
 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p.  */
@@ -1469,8 +1407,9 @@ static const struct gnu_ifunc_fns elf_gn
   elf_gnu_ifunc_resolver_return_stop
 };
 
+void _initialize_elfread ();
 void
-_initialize_elfread (void)
+_initialize_elfread ()
 {
   add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/eval.c ./gdb/eval.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/eval.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/eval.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Evaluate expressions for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,7 +26,6 @@
 #include "frame.h"
 #include "gdbthread.h"
 #include "language.h"		/* For CAST_IS_CONVERSION.  */
-#include "f-lang.h"		/* For array bound stuff.  */
 #include "cp-abi.h"
 #include "infcall.h"
 #include "objc-lang.h"
@@ -41,48 +40,10 @@
 #include "objfiles.h"
 #include "typeprint.h"
 #include <ctype.h>
+#include "expop.h"
+#include "c-exp.h"
+#include "inferior.h"
 
-/* Prototypes for local functions.  */
-
-static struct value *evaluate_subexp_for_sizeof (struct expression *, int *,
-						 enum noside);
-
-static struct value *evaluate_subexp_for_address (struct expression *,
-						  int *, enum noside);
-
-static value *evaluate_subexp_for_cast (expression *exp, int *pos,
-					enum noside noside,
-					struct type *type);
-
-static struct value *evaluate_struct_tuple (struct value *,
-					    struct expression *, int *,
-					    enum noside, int);
-
-static LONGEST init_array_element (struct value *, struct value *,
-				   struct expression *, int *, enum noside,
-				   LONGEST, LONGEST);
-
-struct value *
-evaluate_subexp (struct type *expect_type, struct expression *exp,
-		 int *pos, enum noside noside)
-{
-  struct value *retval;
-
-  gdb::optional<enable_thread_stack_temporaries> stack_temporaries;
-  if (*pos == 0 && target_has_execution
-      && exp->language_defn->la_language == language_cplus
-      && !thread_stack_temporaries_enabled_p (inferior_thread ()))
-    stack_temporaries.emplace (inferior_thread ());
-
-  retval = (*exp->language_defn->la_exp_desc->evaluate_exp)
-    (expect_type, exp, pos, noside);
-
-  if (stack_temporaries.has_value ()
-      && value_in_thread_stack_temporaries (retval, inferior_thread ()))
-    retval = value_non_lval (retval);
-
-  return retval;
-}
 
 /* Parse the string EXP as a C expression, evaluate it,
    and return the result as a number.  */
@@ -125,37 +86,42 @@ parse_to_comma_and_eval (const char **ex
   return evaluate_expression (expr.get ());
 }
 
-/* Evaluate an expression in internal prefix form
-   such as is constructed by parse.y.
 
-   See expression.h for info on the format of an expression.  */
+/* See expression.h.  */
 
 struct value *
-evaluate_expression (struct expression *exp)
+expression::evaluate (struct type *expect_type, enum noside noside)
 {
-  int pc = 0;
+  gdb::optional<enable_thread_stack_temporaries> stack_temporaries;
+  if (target_has_execution () && inferior_ptid != null_ptid
+      && language_defn->la_language == language_cplus
+      && !thread_stack_temporaries_enabled_p (inferior_thread ()))
+    stack_temporaries.emplace (inferior_thread ());
 
-  return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL);
+  struct value *retval = op->evaluate (expect_type, this, noside);
+
+  if (stack_temporaries.has_value ()
+      && value_in_thread_stack_temporaries (retval, inferior_thread ()))
+    retval = value_non_lval (retval);
+
+  return retval;
 }
 
-/* Evaluate an expression, avoiding all memory references
-   and getting a value whose type alone is correct.  */
+/* See value.h.  */
 
 struct value *
-evaluate_type (struct expression *exp)
+evaluate_expression (struct expression *exp, struct type *expect_type)
 {
-  int pc = 0;
-
-  return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS);
+  return exp->evaluate (expect_type, EVAL_NORMAL);
 }
 
-/* Evaluate a subexpression, avoiding all memory references and
-   getting a value whose type alone is correct.  */
+/* Evaluate an expression, avoiding all memory references
+   and getting a value whose type alone is correct.  */
 
 struct value *
-evaluate_subexpression_type (struct expression *exp, int subexp)
+evaluate_type (struct expression *exp)
 {
-  return evaluate_subexp (NULL_TYPE, exp, &subexp, EVAL_AVOID_SIDE_EFFECTS);
+  return exp->evaluate (nullptr, EVAL_AVOID_SIDE_EFFECTS);
 }
 
 /* Find the current value of a watchpoint on EXP.  Return the value in
@@ -181,10 +147,11 @@ evaluate_subexpression_type (struct expr
    values will be left on the value chain.  */
 
 void
-fetch_subexp_value (struct expression *exp, int *pc, struct value **valp,
-		    struct value **resultp,
+fetch_subexp_value (struct expression *exp,
+		    expr::operation *op,
+		    struct value **valp, struct value **resultp,
 		    std::vector<value_ref_ptr> *val_chain,
-		    int preserve_errors)
+		    bool preserve_errors)
 {
   struct value *mark, *new_mark, *result;
 
@@ -200,7 +167,7 @@ fetch_subexp_value (struct expression *e
 
   try
     {
-      result = evaluate_subexp (NULL_TYPE, exp, pc, EVAL_NORMAL);
+      result = op->evaluate (nullptr, exp, EVAL_NORMAL);
     }
   catch (const gdb_exception &ex)
     {
@@ -253,151 +220,6 @@ fetch_subexp_value (struct expression *e
     }
 }
 
-/* Extract a field operation from an expression.  If the subexpression
-   of EXP starting at *SUBEXP is not a structure dereference
-   operation, return NULL.  Otherwise, return the name of the
-   dereferenced field, and advance *SUBEXP to point to the
-   subexpression of the left-hand-side of the dereference.  This is
-   used when completing field names.  */
-
-const char *
-extract_field_op (struct expression *exp, int *subexp)
-{
-  int tem;
-  char *result;
-
-  if (exp->elts[*subexp].opcode != STRUCTOP_STRUCT
-      && exp->elts[*subexp].opcode != STRUCTOP_PTR)
-    return NULL;
-  tem = longest_to_int (exp->elts[*subexp + 1].longconst);
-  result = &exp->elts[*subexp + 2].string;
-  (*subexp) += 1 + 3 + BYTES_TO_EXP_ELEM (tem + 1);
-  return result;
-}
-
-/* This function evaluates brace-initializers (in C/C++) for
-   structure types.  */
-
-static struct value *
-evaluate_struct_tuple (struct value *struct_val,
-		       struct expression *exp,
-		       int *pos, enum noside noside, int nargs)
-{
-  struct type *struct_type = check_typedef (value_type (struct_val));
-  struct type *field_type;
-  int fieldno = -1;
-
-  while (--nargs >= 0)
-    {
-      struct value *val = NULL;
-      int bitpos, bitsize;
-      bfd_byte *addr;
-
-      fieldno++;
-      /* Skip static fields.  */
-      while (fieldno < TYPE_NFIELDS (struct_type)
-	     && field_is_static (&TYPE_FIELD (struct_type,
-					      fieldno)))
-	fieldno++;
-      if (fieldno >= TYPE_NFIELDS (struct_type))
-	error (_("too many initializers"));
-      field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
-      if (TYPE_CODE (field_type) == TYPE_CODE_UNION
-	  && TYPE_FIELD_NAME (struct_type, fieldno)[0] == '0')
-	error (_("don't know which variant you want to set"));
-
-      /* Here, struct_type is the type of the inner struct,
-	 while substruct_type is the type of the inner struct.
-	 These are the same for normal structures, but a variant struct
-	 contains anonymous union fields that contain substruct fields.
-	 The value fieldno is the index of the top-level (normal or
-	 anonymous union) field in struct_field, while the value
-	 subfieldno is the index of the actual real (named inner) field
-	 in substruct_type.  */
-
-      field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
-      if (val == 0)
-	val = evaluate_subexp (field_type, exp, pos, noside);
-
-      /* Now actually set the field in struct_val.  */
-
-      /* Assign val to field fieldno.  */
-      if (value_type (val) != field_type)
-	val = value_cast (field_type, val);
-
-      bitsize = TYPE_FIELD_BITSIZE (struct_type, fieldno);
-      bitpos = TYPE_FIELD_BITPOS (struct_type, fieldno);
-      addr = value_contents_writeable (struct_val) + bitpos / 8;
-      if (bitsize)
-	modify_field (struct_type, addr,
-		      value_as_long (val), bitpos % 8, bitsize);
-      else
-	memcpy (addr, value_contents (val),
-		TYPE_LENGTH (value_type (val)));
-
-    }
-  return struct_val;
-}
-
-/* Recursive helper function for setting elements of array tuples.
-   The target is ARRAY (which has bounds LOW_BOUND to HIGH_BOUND); the
-   element value is ELEMENT; EXP, POS and NOSIDE are as usual.
-   Evaluates index expressions and sets the specified element(s) of
-   ARRAY to ELEMENT.  Returns last index value.  */
-
-static LONGEST
-init_array_element (struct value *array, struct value *element,
-		    struct expression *exp, int *pos,
-		    enum noside noside, LONGEST low_bound, LONGEST high_bound)
-{
-  LONGEST index;
-  int element_size = TYPE_LENGTH (value_type (element));
-
-  if (exp->elts[*pos].opcode == BINOP_COMMA)
-    {
-      (*pos)++;
-      init_array_element (array, element, exp, pos, noside,
-			  low_bound, high_bound);
-      return init_array_element (array, element,
-				 exp, pos, noside, low_bound, high_bound);
-    }
-  else
-    {
-      index = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
-      if (index < low_bound || index > high_bound)
-	error (_("tuple index out of range"));
-      memcpy (value_contents_raw (array) + (index - low_bound) * element_size,
-	      value_contents (element), element_size);
-    }
-  return index;
-}
-
-static struct value *
-value_f90_subarray (struct value *array,
-		    struct expression *exp, int *pos, enum noside noside)
-{
-  int pc = (*pos) + 1;
-  LONGEST low_bound, high_bound;
-  struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array)));
-  enum range_type range_type
-    = (enum range_type) longest_to_int (exp->elts[pc].longconst);
- 
-  *pos += 3;
-
-  if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
-    low_bound = TYPE_LOW_BOUND (range);
-  else
-    low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
-
-  if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
-    high_bound = TYPE_HIGH_BOUND (range);
-  else
-    high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
-
-  return value_slice (array, low_bound, high_bound - low_bound + 1);
-}
-
-
 /* Promote value ARG1 as appropriate before performing a unary operation
    on this argument.
    If the result is not appropriate for any particular language then it
@@ -450,21 +272,24 @@ binop_promote (const struct language_def
   type1 = check_typedef (value_type (*arg1));
   type2 = check_typedef (value_type (*arg2));
 
-  if ((TYPE_CODE (type1) != TYPE_CODE_FLT
-       && TYPE_CODE (type1) != TYPE_CODE_DECFLOAT
+  if ((type1->code () != TYPE_CODE_FLT
+       && type1->code () != TYPE_CODE_DECFLOAT
        && !is_integral_type (type1))
-      || (TYPE_CODE (type2) != TYPE_CODE_FLT
-	  && TYPE_CODE (type2) != TYPE_CODE_DECFLOAT
+      || (type2->code () != TYPE_CODE_FLT
+	  && type2->code () != TYPE_CODE_DECFLOAT
 	  && !is_integral_type (type2)))
     return;
 
-  if (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT
-      || TYPE_CODE (type2) == TYPE_CODE_DECFLOAT)
+  if (is_fixed_point_type (type1) || is_fixed_point_type (type2))
+        return;
+
+  if (type1->code () == TYPE_CODE_DECFLOAT
+      || type2->code () == TYPE_CODE_DECFLOAT)
     {
       /* No promotion required.  */
     }
-  else if (TYPE_CODE (type1) == TYPE_CODE_FLT
-	   || TYPE_CODE (type2) == TYPE_CODE_FLT)
+  else if (type1->code () == TYPE_CODE_FLT
+	   || type2->code () == TYPE_CODE_FLT)
     {
       switch (language->la_language)
 	{
@@ -489,8 +314,8 @@ binop_promote (const struct language_def
 	  break;
 	}
     }
-  else if (TYPE_CODE (type1) == TYPE_CODE_BOOL
-	   && TYPE_CODE (type2) == TYPE_CODE_BOOL)
+  else if (type1->code () == TYPE_CODE_BOOL
+	   && type2->code () == TYPE_CODE_BOOL)
     {
       /* No promotion required.  */
     }
@@ -501,13 +326,13 @@ binop_promote (const struct language_def
       const struct builtin_type *builtin = builtin_type (gdbarch);
       unsigned int promoted_len1 = TYPE_LENGTH (type1);
       unsigned int promoted_len2 = TYPE_LENGTH (type2);
-      int is_unsigned1 = TYPE_UNSIGNED (type1);
-      int is_unsigned2 = TYPE_UNSIGNED (type2);
+      int is_unsigned1 = type1->is_unsigned ();
+      int is_unsigned2 = type2->is_unsigned ();
       unsigned int result_len;
       int unsigned_operation;
 
       /* Determine type length and signedness after promotion for
-         both operands.  */
+	 both operands.  */
       if (promoted_len1 < TYPE_LENGTH (builtin->builtin_int))
 	{
 	  is_unsigned1 = 0;
@@ -616,14 +441,14 @@ ptrmath_type_p (const struct language_de
   if (TYPE_IS_REFERENCE (type))
     type = TYPE_TARGET_TYPE (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_FUNC:
       return 1;
 
     case TYPE_CODE_ARRAY:
-      return TYPE_VECTOR (type) ? 0 : lang->c_style_arrays;
+      return type->is_vector () ? 0 : lang->c_style_arrays_p ();
 
     default:
       return 0;
@@ -658,23 +483,23 @@ fake_method::fake_method (type_instance_
 
   TYPE_MAIN_TYPE (type) = &m_main_type;
   TYPE_LENGTH (type) = 1;
-  TYPE_CODE (type) = TYPE_CODE_METHOD;
+  type->set_code (TYPE_CODE_METHOD);
   TYPE_CHAIN (type) = type;
-  TYPE_INSTANCE_FLAGS (type) = flags;
+  type->set_instance_flags (flags);
   if (num_types > 0)
     {
       if (param_types[num_types - 1] == NULL)
 	{
 	  --num_types;
-	  TYPE_VARARGS (type) = 1;
+	  type->set_has_varargs (true);
 	}
-      else if (TYPE_CODE (check_typedef (param_types[num_types - 1]))
+      else if (check_typedef (param_types[num_types - 1])->code ()
 	       == TYPE_CODE_VOID)
 	{
 	  --num_types;
 	  /* Caller should have ensured this.  */
 	  gdb_assert (num_types == 0);
-	  TYPE_PROTOTYPED (type) = 1;
+	  type->set_is_prototyped (true);
 	}
     }
 
@@ -682,17 +507,35 @@ fake_method::fake_method (type_instance_
      neither an objfile nor a gdbarch.  As a result we must manually
      allocate memory for auxiliary fields, and free the memory ourselves
      when we are done with it.  */
-  TYPE_NFIELDS (type) = num_types;
-  TYPE_FIELDS (type) = (struct field *)
-    xzalloc (sizeof (struct field) * num_types);
+  type->set_num_fields (num_types);
+  type->set_fields
+    ((struct field *) xzalloc (sizeof (struct field) * num_types));
 
   while (num_types-- > 0)
-    TYPE_FIELD_TYPE (type, num_types) = param_types[num_types];
+    type->field (num_types).set_type (param_types[num_types]);
 }
 
 fake_method::~fake_method ()
 {
-  xfree (TYPE_FIELDS (&m_type));
+  xfree (m_type.fields ());
+}
+
+namespace expr
+{
+
+value *
+type_instance_operation::evaluate (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside)
+{
+  type_instance_flags flags = std::get<0> (m_storage);
+  std::vector<type *> &types = std::get<1> (m_storage);
+
+  fake_method fake_expect_type (flags, types.size (), types.data ());
+  return std::get<2> (m_storage)->evaluate (fake_expect_type.type (),
+					    exp, noside);
+}
+
 }
 
 /* Helper for evaluating an OP_VAR_VALUE.  */
@@ -727,6 +570,23 @@ evaluate_var_value (enum noside noside,
   return ret;
 }
 
+namespace expr
+
+{
+
+value *
+var_value_operation::evaluate (struct type *expect_type,
+			       struct expression *exp,
+			       enum noside noside)
+{
+  symbol *var = std::get<0> (m_storage).symbol;
+  if (SYMBOL_TYPE (var)->code () == TYPE_CODE_ERROR)
+    error_unknown_type (var->print_name ());
+  return evaluate_var_value (noside, std::get<0> (m_storage).block, var);
+}
+
+} /* namespace expr */
+
 /* Helper for evaluating an OP_VAR_MSYM_VALUE.  */
 
 value *
@@ -736,33 +596,22 @@ evaluate_var_msym_value (enum noside nos
   CORE_ADDR address;
   type *the_type = find_minsym_type_and_address (msymbol, objfile, &address);
 
-  if (noside == EVAL_AVOID_SIDE_EFFECTS && !TYPE_GNU_IFUNC (the_type))
+  if (noside == EVAL_AVOID_SIDE_EFFECTS && !the_type->is_gnu_ifunc ())
     return value_zero (the_type, not_lval);
   else
     return value_at_lazy (the_type, address);
 }
 
-/* Helper for returning a value when handling EVAL_SKIP.  */
+/* See expression.h.  */
 
 value *
-eval_skip_value (expression *exp)
-{
-  return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
-}
-
-/* Evaluate a function call.  The function to be called is in
-   ARGVEC[0] and the arguments passed to the function are in
-   ARGVEC[1..NARGS].  FUNCTION_NAME is the name of the function, if
-   known.  DEFAULT_RETURN_TYPE is used as the function's return type
-   if the return type is unknown.  */
-
-static value *
-eval_call (expression *exp, enum noside noside,
-	   int nargs, value **argvec,
-	   const char *function_name,
-	   type *default_return_type)
+evaluate_subexp_do_call (expression *exp, enum noside noside,
+			 value *callee,
+			 gdb::array_view<value *> argvec,
+			 const char *function_name,
+			 type *default_return_type)
 {
-  if (argvec[0] == NULL)
+  if (callee == NULL)
     error (_("Cannot evaluate function -- may be inlined"));
   if (noside == EVAL_AVOID_SIDE_EFFECTS)
     {
@@ -770,9 +619,9 @@ eval_call (expression *exp, enum noside
 	 call an error.  This can happen if somebody tries to turn
 	 a variable into a function call.  */
 
-      type *ftype = value_type (argvec[0]);
+      type *ftype = value_type (callee);
 
-      if (TYPE_CODE (ftype) == TYPE_CODE_INTERNAL_FUNCTION)
+      if (ftype->code () == TYPE_CODE_INTERNAL_FUNCTION)
 	{
 	  /* We don't know anything about what the internal
 	     function might return, but we have to return
@@ -780,23 +629,20 @@ eval_call (expression *exp, enum noside
 	  return value_zero (builtin_type (exp->gdbarch)->builtin_int,
 			     not_lval);
 	}
-      else if (TYPE_CODE (ftype) == TYPE_CODE_XMETHOD)
+      else if (ftype->code () == TYPE_CODE_XMETHOD)
 	{
-	  type *return_type
-	    = result_type_of_xmethod (argvec[0],
-				      gdb::make_array_view (argvec + 1,
-							    nargs));
+	  type *return_type = result_type_of_xmethod (callee, argvec);
 
 	  if (return_type == NULL)
 	    error (_("Xmethod is missing return type."));
 	  return value_zero (return_type, not_lval);
 	}
-      else if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
-	       || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
+      else if (ftype->code () == TYPE_CODE_FUNC
+	       || ftype->code () == TYPE_CODE_METHOD)
 	{
-	  if (TYPE_GNU_IFUNC (ftype))
+	  if (ftype->is_gnu_ifunc ())
 	    {
-	      CORE_ADDR address = value_address (argvec[0]);
+	      CORE_ADDR address = value_address (callee);
 	      type *resolved_type = find_gnu_ifunc_target_type (address);
 
 	      if (resolved_type != NULL)
@@ -817,2450 +663,1972 @@ eval_call (expression *exp, enum noside
 	error (_("Expression of type other than "
 		 "\"Function returning ...\" used as function"));
     }
-  switch (TYPE_CODE (value_type (argvec[0])))
+  switch (value_type (callee)->code ())
     {
     case TYPE_CODE_INTERNAL_FUNCTION:
       return call_internal_function (exp->gdbarch, exp->language_defn,
-				     argvec[0], nargs, argvec + 1);
+				     callee, argvec.size (), argvec.data ());
     case TYPE_CODE_XMETHOD:
-      return call_xmethod (argvec[0], gdb::make_array_view (argvec + 1, nargs));
+      return call_xmethod (callee, argvec);
     default:
-      return call_function_by_hand (argvec[0], default_return_type,
-				    gdb::make_array_view (argvec + 1, nargs));
+      return call_function_by_hand (callee, default_return_type, argvec);
     }
 }
 
-/* Helper for evaluating an OP_FUNCALL.  */
-
-static value *
-evaluate_funcall (type *expect_type, expression *exp, int *pos,
-		  enum noside noside)
+namespace expr
 {
-  int tem;
-  int pc2 = 0;
-  value *arg1 = NULL;
-  value *arg2 = NULL;
-  int save_pos1;
-  symbol *function = NULL;
-  char *function_name = NULL;
-  const char *var_func_name = NULL;
-
-  int pc = (*pos);
-  (*pos) += 2;
 
-  exp_opcode op = exp->elts[*pos].opcode;
-  int nargs = longest_to_int (exp->elts[pc].longconst);
-  /* Allocate arg vector, including space for the function to be
-     called in argvec[0], a potential `this', and a terminating
-     NULL.  */
-  value **argvec = (value **) alloca (sizeof (value *) * (nargs + 3));
-  if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
+value *
+operation::evaluate_funcall (struct type *expect_type,
+			     struct expression *exp,
+			     enum noside noside,
+			     const char *function_name,
+			     const std::vector<operation_up> &args)
+{
+  std::vector<value *> vals (args.size ());
+
+  value *callee = evaluate_with_coercion (exp, noside);
+  struct type *type = value_type (callee);
+  if (type->code () == TYPE_CODE_PTR)
+    type = TYPE_TARGET_TYPE (type);
+  for (int i = 0; i < args.size (); ++i)
     {
-      /* First, evaluate the structure into arg2.  */
-      pc2 = (*pos)++;
-
-      if (op == STRUCTOP_MEMBER)
-	{
-	  arg2 = evaluate_subexp_for_address (exp, pos, noside);
-	}
+      if (i < type->num_fields ())
+	vals[i] = args[i]->evaluate (type->field (i).type (), exp, noside);
       else
-	{
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	}
-
-      /* If the function is a virtual function, then the aggregate
-	 value (providing the structure) plays its part by providing
-	 the vtable.  Otherwise, it is just along for the ride: call
-	 the function directly.  */
-
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+	vals[i] = args[i]->evaluate_with_coercion (exp, noside);
+    }
 
-      type *a1_type = check_typedef (value_type (arg1));
-      if (noside == EVAL_SKIP)
-	tem = 1;  /* Set it to the right arg index so that all
-		     arguments can also be skipped.  */
-      else if (TYPE_CODE (a1_type) == TYPE_CODE_METHODPTR)
-	{
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    arg1 = value_zero (TYPE_TARGET_TYPE (a1_type), not_lval);
-	  else
-	    arg1 = cplus_method_ptr_to_value (&arg2, arg1);
+  return evaluate_subexp_do_call (exp, noside, callee, vals,
+				  function_name, expect_type);
+}
 
-	  /* Now, say which argument to start evaluating from.  */
-	  nargs++;
-	  tem = 2;
-	  argvec[1] = arg2;
-	}
-      else if (TYPE_CODE (a1_type) == TYPE_CODE_MEMBERPTR)
-	{
-	  struct type *type_ptr
-	    = lookup_pointer_type (TYPE_SELF_TYPE (a1_type));
-	  struct type *target_type_ptr
-	    = lookup_pointer_type (TYPE_TARGET_TYPE (a1_type));
+value *
+var_value_operation::evaluate_funcall (struct type *expect_type,
+				       struct expression *exp,
+				       enum noside noside,
+				       const std::vector<operation_up> &args)
+{
+  if (!overload_resolution
+      || exp->language_defn->la_language != language_cplus)
+    return operation::evaluate_funcall (expect_type, exp, noside, args);
+
+  std::vector<value *> argvec (args.size ());
+  for (int i = 0; i < args.size (); ++i)
+    argvec[i] = args[i]->evaluate_with_coercion (exp, noside);
+
+  struct symbol *symp;
+  find_overload_match (argvec, NULL, NON_METHOD,
+		       NULL, std::get<0> (m_storage).symbol,
+		       NULL, &symp, NULL, 0, noside);
+
+  if (SYMBOL_TYPE (symp)->code () == TYPE_CODE_ERROR)
+    error_unknown_type (symp->print_name ());
+  value *callee = evaluate_var_value (noside, std::get<0> (m_storage).block,
+				      symp);
 
-	  /* Now, convert these values to an address.  */
-	  arg2 = value_cast (type_ptr, arg2);
+  return evaluate_subexp_do_call (exp, noside, callee, argvec,
+				  nullptr, expect_type);
+}
 
-	  long mem_offset = value_as_long (arg1);
+value *
+scope_operation::evaluate_funcall (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside,
+				   const std::vector<operation_up> &args)
+{
+  if (!overload_resolution
+      || exp->language_defn->la_language != language_cplus)
+    return operation::evaluate_funcall (expect_type, exp, noside, args);
+
+  /* Unpack it locally so we can properly handle overload
+     resolution.  */
+  const std::string &name = std::get<1> (m_storage);
+  struct type *type = std::get<0> (m_storage);
 
-	  arg1 = value_from_pointer (target_type_ptr,
-				     value_as_long (arg2) + mem_offset);
-	  arg1 = value_ind (arg1);
-	  tem = 1;
-	}
-      else
-	error (_("Non-pointer-to-member value used in pointer-to-member "
-		 "construct"));
+  symbol *function = NULL;
+  const char *function_name = NULL;
+  std::vector<value *> argvec (1 + args.size ());
+  if (type->code () == TYPE_CODE_NAMESPACE)
+    {
+      function = cp_lookup_symbol_namespace (type->name (),
+					     name.c_str (),
+					     get_selected_block (0),
+					     VAR_DOMAIN).symbol;
+      if (function == NULL)
+	error (_("No symbol \"%s\" in namespace \"%s\"."),
+	       name.c_str (), type->name ());
     }
-  else if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
+  else
     {
-      /* Hair for method invocations.  */
-      int tem2;
-
-      nargs++;
-      /* First, evaluate the structure into arg2.  */
-      pc2 = (*pos)++;
-      tem2 = longest_to_int (exp->elts[pc2 + 1].longconst);
-      *pos += 3 + BYTES_TO_EXP_ELEM (tem2 + 1);
-
-      if (op == STRUCTOP_STRUCT)
-	{
-	  /* If v is a variable in a register, and the user types
-	     v.method (), this will produce an error, because v has no
-	     address.
-
-	     A possible way around this would be to allocate a copy of
-	     the variable on the stack, copy in the contents, call the
-	     function, and copy out the contents.  I.e. convert this
-	     from call by reference to call by copy-return (or
-	     whatever it's called).  However, this does not work
-	     because it is not the same: the method being called could
-	     stash a copy of the address, and then future uses through
-	     that address (after the method returns) would be expected
-	     to use the variable itself, not some copy of it.  */
-	  arg2 = evaluate_subexp_for_address (exp, pos, noside);
-	}
-      else
-	{
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+      gdb_assert (type->code () == TYPE_CODE_STRUCT
+		  || type->code () == TYPE_CODE_UNION);
+      function_name = name.c_str ();
 
-	  /* Check to see if the operator '->' has been overloaded.
-	     If the operator has been overloaded replace arg2 with the
-	     value returned by the custom operator and continue
-	     evaluation.  */
-	  while (unop_user_defined_p (op, arg2))
-	    {
-	      struct value *value = NULL;
-	      try
-		{
-		  value = value_x_unop (arg2, op, noside);
-		}
+      /* We need a properly typed value for method lookup.  */
+      argvec[0] = value_zero (type, lval_memory);
+    }
 
-	      catch (const gdb_exception_error &except)
-		{
-		  if (except.error == NOT_FOUND_ERROR)
-		    break;
-		  else
-		    throw;
-		}
+  for (int i = 0; i < args.size (); ++i)
+    argvec[i + 1] = args[i]->evaluate_with_coercion (exp, noside);
+  gdb::array_view<value *> arg_view = argvec;
 
-		arg2 = value;
-	    }
-	}
-      /* Now, say which argument to start evaluating from.  */
-      tem = 2;
-    }
-  else if (op == OP_SCOPE
-	   && overload_resolution
-	   && (exp->language_defn->la_language == language_cplus))
-    {
-      /* Unpack it locally so we can properly handle overload
-	 resolution.  */
-      char *name;
-      int local_tem;
-
-      pc2 = (*pos)++;
-      local_tem = longest_to_int (exp->elts[pc2 + 2].longconst);
-      (*pos) += 4 + BYTES_TO_EXP_ELEM (local_tem + 1);
-      struct type *type = exp->elts[pc2 + 1].type;
-      name = &exp->elts[pc2 + 3].string;
-
-      function = NULL;
-      function_name = NULL;
-      if (TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
-	{
-	  function = cp_lookup_symbol_namespace (TYPE_NAME (type),
-						 name,
-						 get_selected_block (0),
-						 VAR_DOMAIN).symbol;
-	  if (function == NULL)
-	    error (_("No symbol \"%s\" in namespace \"%s\"."),
-		   name, TYPE_NAME (type));
+  value *callee = nullptr;
+  if (function_name != nullptr)
+    {
+      int static_memfuncp;
 
-	  tem = 1;
-	  /* arg2 is left as NULL on purpose.  */
+      find_overload_match (arg_view, function_name, METHOD,
+			   &argvec[0], nullptr, &callee, nullptr,
+			   &static_memfuncp, 0, noside);
+      if (!static_memfuncp)
+	{
+	  /* For the time being, we don't handle this.  */
+	  error (_("Call to overloaded function %s requires "
+		   "`this' pointer"),
+		 function_name);
 	}
-      else
-	{
-	  gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
-		      || TYPE_CODE (type) == TYPE_CODE_UNION);
-	  function_name = name;
 
-	  /* We need a properly typed value for method lookup.  For
-	     static methods arg2 is otherwise unused.  */
-	  arg2 = value_zero (type, lval_memory);
-	  ++nargs;
-	  tem = 2;
-	}
+      arg_view = arg_view.slice (1);
     }
-  else if (op == OP_ADL_FUNC)
+  else
     {
-      /* Save the function position and move pos so that the arguments
-	 can be evaluated.  */
-      int func_name_len;
+      symbol *symp;
+      arg_view = arg_view.slice (1);
+      find_overload_match (arg_view, nullptr,
+			   NON_METHOD, nullptr, function,
+			   nullptr, &symp, nullptr, 1, noside);
+      callee = value_of_variable (symp, get_selected_block (0));
+    }
 
-      save_pos1 = *pos;
-      tem = 1;
+  return evaluate_subexp_do_call (exp, noside, callee, arg_view,
+				  nullptr, expect_type);
+}
 
-      func_name_len = longest_to_int (exp->elts[save_pos1 + 3].longconst);
-      (*pos) += 6 + BYTES_TO_EXP_ELEM (func_name_len + 1);
-    }
+value *
+structop_member_base::evaluate_funcall (struct type *expect_type,
+					struct expression *exp,
+					enum noside noside,
+					const std::vector<operation_up> &args)
+{
+  /* First, evaluate the structure into lhs.  */
+  value *lhs;
+  if (opcode () == STRUCTOP_MEMBER)
+    lhs = std::get<0> (m_storage)->evaluate_for_address (exp, noside);
   else
-    {
-      /* Non-method function call.  */
-      save_pos1 = *pos;
-      tem = 1;
+    lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
 
-      /* If this is a C++ function wait until overload resolution.  */
-      if (op == OP_VAR_VALUE
-	  && overload_resolution
-	  && (exp->language_defn->la_language == language_cplus))
-	{
-	  (*pos) += 4; /* Skip the evaluation of the symbol.  */
-	  argvec[0] = NULL;
-	}
+  std::vector<value *> vals (args.size () + 1);
+  gdb::array_view<value *> val_view = vals;
+  /* If the function is a virtual function, then the aggregate
+     value (providing the structure) plays its part by providing
+     the vtable.  Otherwise, it is just along for the ride: call
+     the function directly.  */
+  value *rhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  value *callee;
+
+  type *a1_type = check_typedef (value_type (rhs));
+  if (a1_type->code () == TYPE_CODE_METHODPTR)
+    {
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	callee = value_zero (TYPE_TARGET_TYPE (a1_type), not_lval);
       else
-	{
-	  if (op == OP_VAR_MSYM_VALUE)
-	    {
-	      minimal_symbol *msym = exp->elts[*pos + 2].msymbol;
-	      var_func_name = msym->print_name ();
-	    }
-	  else if (op == OP_VAR_VALUE)
-	    {
-	      symbol *sym = exp->elts[*pos + 2].symbol;
-	      var_func_name = sym->print_name ();
-	    }
+	callee = cplus_method_ptr_to_value (&lhs, rhs);
 
-	  argvec[0] = evaluate_subexp_with_coercion (exp, pos, noside);
-	  type *type = value_type (argvec[0]);
-	  if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
-	    type = TYPE_TARGET_TYPE (type);
-	  if (type && TYPE_CODE (type) == TYPE_CODE_FUNC)
-	    {
-	      for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
-		{
-		  argvec[tem] = evaluate_subexp (TYPE_FIELD_TYPE (type,
-								  tem - 1),
-						 exp, pos, noside);
-		}
-	    }
-	}
+      vals[0] = lhs;
     }
-
-  /* Evaluate arguments (if not already done, e.g., namespace::func()
-     and overload-resolution is off).  */
-  for (; tem <= nargs; tem++)
+  else if (a1_type->code () == TYPE_CODE_MEMBERPTR)
     {
-      /* Ensure that array expressions are coerced into pointer
-	 objects.  */
-      argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
-    }
-
-  /* Signal end of arglist.  */
-  argvec[tem] = 0;
+      struct type *type_ptr
+	= lookup_pointer_type (TYPE_SELF_TYPE (a1_type));
+      struct type *target_type_ptr
+	= lookup_pointer_type (TYPE_TARGET_TYPE (a1_type));
 
-  if (noside == EVAL_SKIP)
-    return eval_skip_value (exp);
-
-  if (op == OP_ADL_FUNC)
-    {
-      struct symbol *symp;
-      char *func_name;
-      int  name_len;
-      int string_pc = save_pos1 + 3;
+      /* Now, convert this value to an address.  */
+      lhs = value_cast (type_ptr, lhs);
 
-      /* Extract the function name.  */
-      name_len = longest_to_int (exp->elts[string_pc].longconst);
-      func_name = (char *) alloca (name_len + 1);
-      strcpy (func_name, &exp->elts[string_pc + 1].string);
+      long mem_offset = value_as_long (rhs);
 
-      find_overload_match (gdb::make_array_view (&argvec[1], nargs),
-			   func_name,
-			   NON_METHOD, /* not method */
-			   NULL, NULL, /* pass NULL symbol since
-					  symbol is unknown */
-			   NULL, &symp, NULL, 0, noside);
+      callee = value_from_pointer (target_type_ptr,
+				   value_as_long (lhs) + mem_offset);
+      callee = value_ind (callee);
 
-      /* Now fix the expression being evaluated.  */
-      exp->elts[save_pos1 + 2].symbol = symp;
-      argvec[0] = evaluate_subexp_with_coercion (exp, &save_pos1, noside);
+      val_view = val_view.slice (1);
     }
+  else
+    error (_("Non-pointer-to-member value used in pointer-to-member "
+	     "construct"));
 
-  if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR
-      || (op == OP_SCOPE && function_name != NULL))
-    {
-      int static_memfuncp;
-      char *tstr;
+  for (int i = 0; i < args.size (); ++i)
+    vals[i + 1] = args[i]->evaluate_with_coercion (exp, noside);
 
-      /* Method invocation: stuff "this" as first parameter.  If the
-	 method turns out to be static we undo this below.  */
-      argvec[1] = arg2;
+  return evaluate_subexp_do_call (exp, noside, callee, val_view,
+				  nullptr, expect_type);
 
-      if (op != OP_SCOPE)
-	{
-	  /* Name of method from expression.  */
-	  tstr = &exp->elts[pc2 + 2].string;
-	}
-      else
-	tstr = function_name;
+}
 
-      if (overload_resolution && (exp->language_defn->la_language
-				  == language_cplus))
+value *
+structop_base_operation::evaluate_funcall
+     (struct type *expect_type, struct expression *exp, enum noside noside,
+      const std::vector<operation_up> &args)
+{
+  /* Allocate space for the function call arguments, Including space for a
+     `this' pointer at the start.  */
+  std::vector<value *> vals (args.size () + 1);
+  /* First, evaluate the structure into vals[0].  */
+  enum exp_opcode op = opcode ();
+  if (op == STRUCTOP_STRUCT)
+    {
+      /* If v is a variable in a register, and the user types
+	 v.method (), this will produce an error, because v has no
+	 address.
+
+	 A possible way around this would be to allocate a copy of
+	 the variable on the stack, copy in the contents, call the
+	 function, and copy out the contents.  I.e. convert this
+	 from call by reference to call by copy-return (or
+	 whatever it's called).  However, this does not work
+	 because it is not the same: the method being called could
+	 stash a copy of the address, and then future uses through
+	 that address (after the method returns) would be expected
+	 to use the variable itself, not some copy of it.  */
+      vals[0] = std::get<0> (m_storage)->evaluate_for_address (exp, noside);
+    }
+  else
+    {
+      vals[0] = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+      /* Check to see if the operator '->' has been overloaded.
+	 If the operator has been overloaded replace vals[0] with the
+	 value returned by the custom operator and continue
+	 evaluation.  */
+      while (unop_user_defined_p (op, vals[0]))
 	{
-	  /* Language is C++, do some overload resolution before
-	     evaluation.  */
-	  struct value *valp = NULL;
-
-	  (void) find_overload_match (gdb::make_array_view (&argvec[1], nargs),
-				      tstr,
-				      METHOD, /* method */
-				      &arg2,  /* the object */
-				      NULL, &valp, NULL,
-				      &static_memfuncp, 0, noside);
-
-	  if (op == OP_SCOPE && !static_memfuncp)
+	  struct value *value = nullptr;
+	  try
 	    {
-	      /* For the time being, we don't handle this.  */
-	      error (_("Call to overloaded function %s requires "
-		       "`this' pointer"),
-		     function_name);
+	      value = value_x_unop (vals[0], op, noside);
+	    }
+	  catch (const gdb_exception_error &except)
+	    {
+	      if (except.error == NOT_FOUND_ERROR)
+		break;
+	      else
+		throw;
 	    }
-	  argvec[1] = arg2;	/* the ``this'' pointer */
-	  argvec[0] = valp;	/* Use the method found after overload
-				   resolution.  */
-	}
-      else
-	/* Non-C++ case -- or no overload resolution.  */
-	{
-	  struct value *temp = arg2;
 
-	  argvec[0] = value_struct_elt (&temp, argvec + 1, tstr,
-					&static_memfuncp,
-					op == STRUCTOP_STRUCT
-					? "structure" : "structure pointer");
-	  /* value_struct_elt updates temp with the correct value of
-	     the ``this'' pointer if necessary, so modify argvec[1] to
-	     reflect any ``this'' changes.  */
-	  arg2
-	    = value_from_longest (lookup_pointer_type(value_type (temp)),
-				  value_address (temp)
-				  + value_embedded_offset (temp));
-	  argvec[1] = arg2;	/* the ``this'' pointer */
+	  vals[0] = value;
 	}
+    }
 
-      /* Take out `this' if needed.  */
-      if (static_memfuncp)
-	{
-	  argvec[1] = argvec[0];
-	  nargs--;
-	  argvec++;
-	}
+  /* Evaluate the arguments.  The '+ 1' here is to allow for the `this'
+     pointer we placed into vals[0].  */
+  for (int i = 0; i < args.size (); ++i)
+    vals[i + 1] = args[i]->evaluate_with_coercion (exp, noside);
+
+  /* The array view includes the `this' pointer.  */
+  gdb::array_view<value *> arg_view (vals);
+
+  int static_memfuncp;
+  value *callee;
+  const char *tstr = std::get<1> (m_storage).c_str ();
+  if (overload_resolution
+      && exp->language_defn->la_language == language_cplus)
+    {
+      /* Language is C++, do some overload resolution before
+	 evaluation.  */
+      value *val0 = vals[0];
+      find_overload_match (arg_view, tstr, METHOD,
+			   &val0, nullptr, &callee, nullptr,
+			   &static_memfuncp, 0, noside);
+      vals[0] = val0;
     }
-  else if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
+  else
+    /* Non-C++ case -- or no overload resolution.  */
     {
-      /* Pointer to member.  argvec[1] is already set up.  */
-      argvec[0] = arg1;
+      struct value *temp = vals[0];
+
+      callee = value_struct_elt (&temp, arg_view, tstr,
+				 &static_memfuncp,
+				 op == STRUCTOP_STRUCT
+				 ? "structure" : "structure pointer");
+      /* value_struct_elt updates temp with the correct value of the
+	 ``this'' pointer if necessary, so modify it to reflect any
+	 ``this'' changes.  */
+      vals[0] = value_from_longest (lookup_pointer_type (value_type (temp)),
+				    value_address (temp)
+				    + value_embedded_offset (temp));
     }
-  else if (op == OP_VAR_VALUE || (op == OP_SCOPE && function != NULL))
-    {
-      /* Non-member function being called.  */
-      /* fn: This can only be done for C++ functions.  A C-style
-	 function in a C++ program, for instance, does not have the
-	 fields that are expected here.  */
 
-      if (overload_resolution && (exp->language_defn->la_language
-				  == language_cplus))
-	{
-	  /* Language is C++, do some overload resolution before
-	     evaluation.  */
-	  struct symbol *symp;
-	  int no_adl = 0;
+  /* Take out `this' if needed.  */
+  if (static_memfuncp)
+    arg_view = arg_view.slice (1);
 
-	  /* If a scope has been specified disable ADL.  */
-	  if (op == OP_SCOPE)
-	    no_adl = 1;
+  return evaluate_subexp_do_call (exp, noside, callee, arg_view,
+				  nullptr, expect_type);
+}
 
-	  if (op == OP_VAR_VALUE)
-	    function = exp->elts[save_pos1+2].symbol;
 
-	  (void) find_overload_match (gdb::make_array_view (&argvec[1], nargs),
-				      NULL,        /* no need for name */
-				      NON_METHOD,  /* not method */
-				      NULL, function, /* the function */
-				      NULL, &symp, NULL, no_adl, noside);
+} /* namespace expr */
 
-	  if (op == OP_VAR_VALUE)
-	    {
-	      /* Now fix the expression being evaluated.  */
-	      exp->elts[save_pos1+2].symbol = symp;
-	      argvec[0] = evaluate_subexp_with_coercion (exp, &save_pos1,
-							 noside);
-	    }
-	  else
-	    argvec[0] = value_of_variable (symp, get_selected_block (0));
-	}
-      else
-	{
-	  /* Not C++, or no overload resolution allowed.  */
-	  /* Nothing to be done; argvec already correctly set up.  */
-	}
-    }
-  else
-    {
-      /* It is probably a C-style function.  */
-      /* Nothing to be done; argvec already correctly set up.  */
-    }
+/* Return true if type is integral or reference to integral */
 
-  return eval_call (exp, noside, nargs, argvec, var_func_name, expect_type);
+static bool
+is_integral_or_integral_reference (struct type *type)
+{
+  if (is_integral_type (type))
+    return true;
+
+  type = check_typedef (type);
+  return (type != nullptr
+	  && TYPE_IS_REFERENCE (type)
+	  && is_integral_type (TYPE_TARGET_TYPE (type)));
 }
 
-/* Helper for skipping all the arguments in an undetermined argument list.
-   This function was designed for use in the OP_F77_UNDETERMINED_ARGLIST
-   case of evaluate_subexp_standard as multiple, but not all, code paths
-   require a generic skip.  */
+/* Helper function that implements the body of OP_SCOPE.  */
 
-static void
-skip_undetermined_arglist (int nargs, struct expression *exp, int *pos,
-			   enum noside noside)
-{
-  for (int i = 0; i < nargs; ++i)
-    evaluate_subexp (NULL_TYPE, exp, pos, noside);
+struct value *
+eval_op_scope (struct type *expect_type, struct expression *exp,
+	       enum noside noside,
+	       struct type *type, const char *string)
+{
+  struct value *arg1 = value_aggregate_elt (type, string, expect_type,
+					    0, noside);
+  if (arg1 == NULL)
+    error (_("There is no field named %s"), string);
+  return arg1;
 }
 
+/* Helper function that implements the body of OP_VAR_ENTRY_VALUE.  */
+
 struct value *
-evaluate_subexp_standard (struct type *expect_type,
-			  struct expression *exp, int *pos,
-			  enum noside noside)
+eval_op_var_entry_value (struct type *expect_type, struct expression *exp,
+			 enum noside noside, symbol *sym)
 {
-  enum exp_opcode op;
-  int tem, tem2, tem3;
-  int pc, oldpos;
-  struct value *arg1 = NULL;
-  struct value *arg2 = NULL;
-  struct value *arg3;
-  struct type *type;
-  int nargs;
-  struct value **argvec;
-  int code;
-  int ix;
-  long mem_offset;
-  struct type **arg_types;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value_zero (SYMBOL_TYPE (sym), not_lval);
 
-  pc = (*pos)++;
-  op = exp->elts[pc].opcode;
+  if (SYMBOL_COMPUTED_OPS (sym) == NULL
+      || SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
+    error (_("Symbol \"%s\" does not have any specific entry value"),
+	   sym->print_name ());
 
-  switch (op)
-    {
-    case OP_SCOPE:
-      tem = longest_to_int (exp->elts[pc + 2].longconst);
-      (*pos) += 4 + BYTES_TO_EXP_ELEM (tem + 1);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      arg1 = value_aggregate_elt (exp->elts[pc + 1].type,
-				  &exp->elts[pc + 3].string,
-				  expect_type, 0, noside);
-      if (arg1 == NULL)
-	error (_("There is no field named %s"), &exp->elts[pc + 3].string);
-      return arg1;
-
-    case OP_LONG:
-      (*pos) += 3;
-      return value_from_longest (exp->elts[pc + 1].type,
-				 exp->elts[pc + 2].longconst);
-
-    case OP_FLOAT:
-      (*pos) += 3;
-      return value_from_contents (exp->elts[pc + 1].type,
-				  exp->elts[pc + 2].floatconst);
+  struct frame_info *frame = get_selected_frame (NULL);
+  return SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry (sym, frame);
+}
 
-    case OP_ADL_FUNC:
-    case OP_VAR_VALUE:
-      {
-	(*pos) += 3;
-	symbol *var = exp->elts[pc + 2].symbol;
-	if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_ERROR)
-	  error_unknown_type (var->print_name ());
-	if (noside != EVAL_SKIP)
-	    return evaluate_var_value (noside, exp->elts[pc + 1].block, var);
-	else
-	  {
-	    /* Return a dummy value of the correct type when skipping, so
-	       that parent functions know what is to be skipped.  */
-	    return allocate_value (SYMBOL_TYPE (var));
-	  }
-      }
+/* Helper function that implements the body of OP_VAR_MSYM_VALUE.  */
 
-    case OP_VAR_MSYM_VALUE:
-      {
-	(*pos) += 3;
+struct value *
+eval_op_var_msym_value (struct type *expect_type, struct expression *exp,
+			enum noside noside, bool outermost_p,
+			bound_minimal_symbol msymbol)
+{
+  value *val = evaluate_var_msym_value (noside, msymbol.objfile,
+					msymbol.minsym);
 
-	minimal_symbol *msymbol = exp->elts[pc + 2].msymbol;
-	value *val = evaluate_var_msym_value (noside,
-					      exp->elts[pc + 1].objfile,
-					      msymbol);
-
-	type = value_type (val);
-	if (TYPE_CODE (type) == TYPE_CODE_ERROR
-	    && (noside != EVAL_AVOID_SIDE_EFFECTS || pc != 0))
-	  error_unknown_type (msymbol->print_name ());
-	return val;
-      }
+  struct type *type = value_type (val);
+  if (type->code () == TYPE_CODE_ERROR
+      && (noside != EVAL_AVOID_SIDE_EFFECTS || !outermost_p))
+    error_unknown_type (msymbol.minsym->print_name ());
+  return val;
+}
 
-    case OP_VAR_ENTRY_VALUE:
-      (*pos) += 2;
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
+/* Helper function that implements the body of OP_FUNC_STATIC_VAR.  */
 
-      {
-	struct symbol *sym = exp->elts[pc + 1].symbol;
-	struct frame_info *frame;
+struct value *
+eval_op_func_static_var (struct type *expect_type, struct expression *exp,
+			 enum noside noside,
+			 value *func, const char *var)
+{
+  CORE_ADDR addr = value_address (func);
+  const block *blk = block_for_pc (addr);
+  struct block_symbol sym = lookup_symbol (var, blk, VAR_DOMAIN, NULL);
+  if (sym.symbol == NULL)
+    error (_("No symbol \"%s\" in specified context."), var);
+  return evaluate_var_value (noside, sym.block, sym.symbol);
+}
 
-	if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	  return value_zero (SYMBOL_TYPE (sym), not_lval);
+/* Helper function that implements the body of OP_REGISTER.  */
 
-	if (SYMBOL_COMPUTED_OPS (sym) == NULL
-	    || SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
-	  error (_("Symbol \"%s\" does not have any specific entry value"),
-		 sym->print_name ());
+struct value *
+eval_op_register (struct type *expect_type, struct expression *exp,
+		  enum noside noside, const char *name)
+{
+  int regno;
+  struct value *val;
 
-	frame = get_selected_frame (NULL);
-	return SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry (sym, frame);
-      }
+  regno = user_reg_map_name_to_regnum (exp->gdbarch,
+				       name, strlen (name));
+  if (regno == -1)
+    error (_("Register $%s not available."), name);
+
+  /* In EVAL_AVOID_SIDE_EFFECTS mode, we only need to return
+     a value with the appropriate register type.  Unfortunately,
+     we don't have easy access to the type of user registers.
+     So for these registers, we fetch the register value regardless
+     of the evaluation mode.  */
+  if (noside == EVAL_AVOID_SIDE_EFFECTS
+      && regno < gdbarch_num_cooked_regs (exp->gdbarch))
+    val = value_zero (register_type (exp->gdbarch, regno), not_lval);
+  else
+    val = value_of_register (regno, get_selected_frame (NULL));
+  if (val == NULL)
+    error (_("Value of register %s not available."), name);
+  else
+    return val;
+}
 
-    case OP_FUNC_STATIC_VAR:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
+/* Helper function that implements the body of OP_STRING.  */
 
-      {
-	value *func = evaluate_subexp_standard (NULL, exp, pos, noside);
-	CORE_ADDR addr = value_address (func);
+struct value *
+eval_op_string (struct type *expect_type, struct expression *exp,
+		enum noside noside, int len, const char *string)
+{
+  struct type *type = language_string_char_type (exp->language_defn,
+						 exp->gdbarch);
+  return value_string (string, len, type);
+}
 
-	const block *blk = block_for_pc (addr);
-	const char *var = &exp->elts[pc + 2].string;
+/* Helper function that implements the body of OP_OBJC_SELECTOR.  */
 
-	struct block_symbol sym = lookup_symbol (var, blk, VAR_DOMAIN, NULL);
+struct value *
+eval_op_objc_selector (struct type *expect_type, struct expression *exp,
+		       enum noside noside,
+		       const char *sel)
+{
+  struct type *selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
+  return value_from_longest (selector_type,
+			     lookup_child_selector (exp->gdbarch, sel));
+}
 
-	if (sym.symbol == NULL)
-	  error (_("No symbol \"%s\" in specified context."), var);
+/* Helper function that implements the body of BINOP_CONCAT.  */
 
-	return evaluate_var_value (noside, sym.block, sym.symbol);
-      }
+struct value *
+eval_op_concat (struct type *expect_type, struct expression *exp,
+		enum noside noside, struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (BINOP_CONCAT, arg1, arg2))
+    return value_x_binop (arg1, arg2, BINOP_CONCAT, OP_NULL, noside);
+  else
+    return value_concat (arg1, arg2);
+}
 
-    case OP_LAST:
-      (*pos) += 2;
-      return
-	access_value_history (longest_to_int (exp->elts[pc + 1].longconst));
+/* A helper function for TERNOP_SLICE.  */
 
-    case OP_REGISTER:
-      {
-	const char *name = &exp->elts[pc + 2].string;
-	int regno;
-	struct value *val;
-
-	(*pos) += 3 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
-	regno = user_reg_map_name_to_regnum (exp->gdbarch,
-					     name, strlen (name));
-	if (regno == -1)
-	  error (_("Register $%s not available."), name);
-
-        /* In EVAL_AVOID_SIDE_EFFECTS mode, we only need to return
-           a value with the appropriate register type.  Unfortunately,
-           we don't have easy access to the type of user registers.
-           So for these registers, we fetch the register value regardless
-           of the evaluation mode.  */
-	if (noside == EVAL_AVOID_SIDE_EFFECTS
-	    && regno < gdbarch_num_cooked_regs (exp->gdbarch))
-	  val = value_zero (register_type (exp->gdbarch, regno), not_lval);
-	else
-	  val = value_of_register (regno, get_selected_frame (NULL));
-	if (val == NULL)
-	  error (_("Value of register %s not available."), name);
-	else
-	  return val;
-      }
-    case OP_BOOL:
-      (*pos) += 2;
-      type = language_bool_type (exp->language_defn, exp->gdbarch);
-      return value_from_longest (type, exp->elts[pc + 1].longconst);
-
-    case OP_INTERNALVAR:
-      (*pos) += 2;
-      return value_of_internalvar (exp->gdbarch,
-				   exp->elts[pc + 1].internalvar);
-
-    case OP_STRING:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      type = language_string_char_type (exp->language_defn, exp->gdbarch);
-      return value_string (&exp->elts[pc + 2].string, tem, type);
-
-    case OP_OBJC_NSSTRING:		/* Objective C Foundation Class
-					   NSString constant.  */
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      return value_nsstring (exp->gdbarch, &exp->elts[pc + 2].string, tem + 1);
-
-    case OP_ARRAY:
-      (*pos) += 3;
-      tem2 = longest_to_int (exp->elts[pc + 1].longconst);
-      tem3 = longest_to_int (exp->elts[pc + 2].longconst);
-      nargs = tem3 - tem2 + 1;
-      type = expect_type ? check_typedef (expect_type) : NULL_TYPE;
-
-      if (expect_type != NULL_TYPE && noside != EVAL_SKIP
-	  && TYPE_CODE (type) == TYPE_CODE_STRUCT)
-	{
-	  struct value *rec = allocate_value (expect_type);
-
-	  memset (value_contents_raw (rec), '\0', TYPE_LENGTH (type));
-	  return evaluate_struct_tuple (rec, exp, pos, noside, nargs);
-	}
-
-      if (expect_type != NULL_TYPE && noside != EVAL_SKIP
-	  && TYPE_CODE (type) == TYPE_CODE_ARRAY)
-	{
-	  struct type *range_type = TYPE_INDEX_TYPE (type);
-	  struct type *element_type = TYPE_TARGET_TYPE (type);
-	  struct value *array = allocate_value (expect_type);
-	  int element_size = TYPE_LENGTH (check_typedef (element_type));
-	  LONGEST low_bound, high_bound, index;
+struct value *
+eval_op_ternop (struct type *expect_type, struct expression *exp,
+		enum noside noside,
+		struct value *array, struct value *low, struct value *upper)
+{
+  int lowbound = value_as_long (low);
+  int upperbound = value_as_long (upper);
+  return value_slice (array, lowbound, upperbound - lowbound + 1);
+}
 
-	  if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
-	    {
-	      low_bound = 0;
-	      high_bound = (TYPE_LENGTH (type) / element_size) - 1;
-	    }
-	  index = low_bound;
-	  memset (value_contents_raw (array), 0, TYPE_LENGTH (expect_type));
-	  for (tem = nargs; --nargs >= 0;)
-	    {
-	      struct value *element;
-	      int index_pc = 0;
+/* A helper function for STRUCTOP_STRUCT.  */
 
-	      element = evaluate_subexp (element_type, exp, pos, noside);
-	      if (value_type (element) != element_type)
-		element = value_cast (element_type, element);
-	      if (index_pc)
-		{
-		  int continue_pc = *pos;
+struct value *
+eval_op_structop_struct (struct type *expect_type, struct expression *exp,
+			 enum noside noside,
+			 struct value *arg1, const char *string)
+{
+  struct value *arg3 = value_struct_elt (&arg1, {}, string,
+					 NULL, "structure");
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    arg3 = value_zero (value_type (arg3), VALUE_LVAL (arg3));
+  return arg3;
+}
 
-		  *pos = index_pc;
-		  index = init_array_element (array, element, exp, pos, noside,
-					      low_bound, high_bound);
-		  *pos = continue_pc;
-		}
-	      else
-		{
-		  if (index > high_bound)
-		    /* To avoid memory corruption.  */
-		    error (_("Too many array elements"));
-		  memcpy (value_contents_raw (array)
-			  + (index - low_bound) * element_size,
-			  value_contents (element),
-			  element_size);
-		}
-	      index++;
-	    }
-	  return array;
-	}
+/* A helper function for STRUCTOP_PTR.  */
 
-      if (expect_type != NULL_TYPE && noside != EVAL_SKIP
-	  && TYPE_CODE (type) == TYPE_CODE_SET)
+struct value *
+eval_op_structop_ptr (struct type *expect_type, struct expression *exp,
+		      enum noside noside,
+		      struct value *arg1, const char *string)
+{
+  /* Check to see if operator '->' has been overloaded.  If so replace
+     arg1 with the value returned by evaluating operator->().  */
+  while (unop_user_defined_p (STRUCTOP_PTR, arg1))
+    {
+      struct value *value = NULL;
+      try
 	{
-	  struct value *set = allocate_value (expect_type);
-	  gdb_byte *valaddr = value_contents_raw (set);
-	  struct type *element_type = TYPE_INDEX_TYPE (type);
-	  struct type *check_type = element_type;
-	  LONGEST low_bound, high_bound;
-
-	  /* Get targettype of elementtype.  */
-	  while (TYPE_CODE (check_type) == TYPE_CODE_RANGE
-		 || TYPE_CODE (check_type) == TYPE_CODE_TYPEDEF)
-	    check_type = TYPE_TARGET_TYPE (check_type);
-
-	  if (get_discrete_bounds (element_type, &low_bound, &high_bound) < 0)
-	    error (_("(power)set type with unknown size"));
-	  memset (valaddr, '\0', TYPE_LENGTH (type));
-	  for (tem = 0; tem < nargs; tem++)
-	    {
-	      LONGEST range_low, range_high;
-	      struct type *range_low_type, *range_high_type;
-	      struct value *elem_val;
-
-	      elem_val = evaluate_subexp (element_type, exp, pos, noside);
-	      range_low_type = range_high_type = value_type (elem_val);
-	      range_low = range_high = value_as_long (elem_val);
-
-	      /* Check types of elements to avoid mixture of elements from
-	         different types. Also check if type of element is "compatible"
-	         with element type of powerset.  */
-	      if (TYPE_CODE (range_low_type) == TYPE_CODE_RANGE)
-		range_low_type = TYPE_TARGET_TYPE (range_low_type);
-	      if (TYPE_CODE (range_high_type) == TYPE_CODE_RANGE)
-		range_high_type = TYPE_TARGET_TYPE (range_high_type);
-	      if ((TYPE_CODE (range_low_type) != TYPE_CODE (range_high_type))
-		  || (TYPE_CODE (range_low_type) == TYPE_CODE_ENUM
-		      && (range_low_type != range_high_type)))
-		/* different element modes.  */
-		error (_("POWERSET tuple elements of different mode"));
-	      if ((TYPE_CODE (check_type) != TYPE_CODE (range_low_type))
-		  || (TYPE_CODE (check_type) == TYPE_CODE_ENUM
-		      && range_low_type != check_type))
-		error (_("incompatible POWERSET tuple elements"));
-	      if (range_low > range_high)
-		{
-		  warning (_("empty POWERSET tuple range"));
-		  continue;
-		}
-	      if (range_low < low_bound || range_high > high_bound)
-		error (_("POWERSET tuple element out of range"));
-	      range_low -= low_bound;
-	      range_high -= low_bound;
-	      for (; range_low <= range_high; range_low++)
-		{
-		  int bit_index = (unsigned) range_low % TARGET_CHAR_BIT;
-
-		  if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
-		    bit_index = TARGET_CHAR_BIT - 1 - bit_index;
-		  valaddr[(unsigned) range_low / TARGET_CHAR_BIT]
-		    |= 1 << bit_index;
-		}
-	    }
-	  return set;
+	  value = value_x_unop (arg1, STRUCTOP_PTR, noside);
 	}
 
-      argvec = XALLOCAVEC (struct value *, nargs);
-      for (tem = 0; tem < nargs; tem++)
+      catch (const gdb_exception_error &except)
 	{
-	  /* Ensure that array expressions are coerced into pointer
-	     objects.  */
-	  argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
-	}
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      return value_array (tem2, tem3, argvec);
+	  if (except.error == NOT_FOUND_ERROR)
+	    break;
+	  else
+	    throw;
+	}
+
+      arg1 = value;
+    }
+
+  /* JYG: if print object is on we need to replace the base type
+     with rtti type in order to continue on with successful
+     lookup of member / method only available in the rtti type.  */
+  {
+    struct type *arg_type = value_type (arg1);
+    struct type *real_type;
+    int full, using_enc;
+    LONGEST top;
+    struct value_print_options opts;
 
-    case TERNOP_SLICE:
+    get_user_print_options (&opts);
+    if (opts.objectprint && TYPE_TARGET_TYPE (arg_type)
+	&& (TYPE_TARGET_TYPE (arg_type)->code () == TYPE_CODE_STRUCT))
       {
-	struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	int lowbound
-	  = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
-	int upper
-	  = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
-
-	if (noside == EVAL_SKIP)
-	  return eval_skip_value (exp);
-	return value_slice (array, lowbound, upper - lowbound + 1);
+	real_type = value_rtti_indirect_type (arg1, &full, &top,
+					      &using_enc);
+	if (real_type)
+	  arg1 = value_cast (real_type, arg1);
       }
+  }
 
-    case TERNOP_COND:
-      /* Skip third and second args to evaluate the first one.  */
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (value_logical_not (arg1))
-	{
-	  evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-	  return evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	}
+  struct value *arg3 = value_struct_elt (&arg1, {}, string,
+					 NULL, "structure pointer");
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    arg3 = value_zero (value_type (arg3), VALUE_LVAL (arg3));
+  return arg3;
+}
+
+/* A helper function for STRUCTOP_MEMBER.  */
+
+struct value *
+eval_op_member (struct type *expect_type, struct expression *exp,
+		enum noside noside,
+		struct value *arg1, struct value *arg2)
+{
+  long mem_offset;
+
+  struct value *arg3;
+  struct type *type = check_typedef (value_type (arg2));
+  switch (type->code ())
+    {
+    case TYPE_CODE_METHODPTR:
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	return value_zero (TYPE_TARGET_TYPE (type), not_lval);
       else
 	{
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	  evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-	  return arg2;
-	}
-
-    case OP_OBJC_SELECTOR:
-      {				/* Objective C @selector operator.  */
-	char *sel = &exp->elts[pc + 2].string;
-	int len = longest_to_int (exp->elts[pc + 1].longconst);
-	struct type *selector_type;
-
-	(*pos) += 3 + BYTES_TO_EXP_ELEM (len + 1);
-	if (noside == EVAL_SKIP)
-	  return eval_skip_value (exp);
-
-	if (sel[len] != 0)
-	  sel[len] = 0;		/* Make sure it's terminated.  */
-
-	selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
-	return value_from_longest (selector_type,
-				   lookup_child_selector (exp->gdbarch, sel));
-      }
+	  arg2 = cplus_method_ptr_to_value (&arg1, arg2);
+	  gdb_assert (value_type (arg2)->code () == TYPE_CODE_PTR);
+	  return value_ind (arg2);
+	}
 
-    case OP_OBJC_MSGCALL:
-      {				/* Objective C message (method) call.  */
+    case TYPE_CODE_MEMBERPTR:
+      /* Now, convert these values to an address.  */
+      arg1 = value_cast_pointers (lookup_pointer_type (TYPE_SELF_TYPE (type)),
+				  arg1, 1);
 
-	CORE_ADDR responds_selector = 0;
-	CORE_ADDR method_selector = 0;
+      mem_offset = value_as_long (arg2);
 
-	CORE_ADDR selector = 0;
+      arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
+				 value_as_long (arg1) + mem_offset);
+      return value_ind (arg3);
 
-	int struct_return = 0;
-	enum noside sub_no_side = EVAL_NORMAL;
-
-	struct value *msg_send = NULL;
-	struct value *msg_send_stret = NULL;
-	int gnu_runtime = 0;
-
-	struct value *target = NULL;
-	struct value *method = NULL;
-	struct value *called_method = NULL; 
-
-	struct type *selector_type = NULL;
-	struct type *long_type;
-
-	struct value *ret = NULL;
-	CORE_ADDR addr = 0;
-
-	selector = exp->elts[pc + 1].longconst;
-	nargs = exp->elts[pc + 2].longconst;
-	argvec = XALLOCAVEC (struct value *, nargs + 5);
-
-	(*pos) += 3;
-
-	long_type = builtin_type (exp->gdbarch)->builtin_long;
-	selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
-
-	if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	  sub_no_side = EVAL_NORMAL;
-	else
-	  sub_no_side = noside;
-
-	target = evaluate_subexp (selector_type, exp, pos, sub_no_side);
-
-	if (value_as_long (target) == 0)
- 	  return value_from_longest (long_type, 0);
-	
-	if (lookup_minimal_symbol ("objc_msg_lookup", 0, 0).minsym)
-	  gnu_runtime = 1;
-	
-	/* Find the method dispatch (Apple runtime) or method lookup
-	   (GNU runtime) function for Objective-C.  These will be used
-	   to lookup the symbol information for the method.  If we
-	   can't find any symbol information, then we'll use these to
-	   call the method, otherwise we can call the method
-	   directly.  The msg_send_stret function is used in the special
-	   case of a method that returns a structure (Apple runtime 
-	   only).  */
-	if (gnu_runtime)
-	  {
-	    type = selector_type;
+    default:
+      error (_("non-pointer-to-member value used "
+	       "in pointer-to-member construct"));
+    }
+}
 
-	    type = lookup_function_type (type);
-	    type = lookup_pointer_type (type);
-	    type = lookup_function_type (type);
-	    type = lookup_pointer_type (type);
-
-	    msg_send = find_function_in_inferior ("objc_msg_lookup", NULL);
-	    msg_send_stret
-	      = find_function_in_inferior ("objc_msg_lookup", NULL);
-
-	    msg_send = value_from_pointer (type, value_as_address (msg_send));
-	    msg_send_stret = value_from_pointer (type, 
-					value_as_address (msg_send_stret));
-	  }
-	else
-	  {
-	    msg_send = find_function_in_inferior ("objc_msgSend", NULL);
-	    /* Special dispatcher for methods returning structs.  */
-	    msg_send_stret
-	      = find_function_in_inferior ("objc_msgSend_stret", NULL);
-	  }
+/* A helper function for BINOP_ADD.  */
 
-	/* Verify the target object responds to this method.  The
-	   standard top-level 'Object' class uses a different name for
-	   the verification method than the non-standard, but more
-	   often used, 'NSObject' class.  Make sure we check for both.  */
-
-	responds_selector
-	  = lookup_child_selector (exp->gdbarch, "respondsToSelector:");
-	if (responds_selector == 0)
-	  responds_selector
-	    = lookup_child_selector (exp->gdbarch, "respondsTo:");
-	
-	if (responds_selector == 0)
-	  error (_("no 'respondsTo:' or 'respondsToSelector:' method"));
-	
-	method_selector
-	  = lookup_child_selector (exp->gdbarch, "methodForSelector:");
-	if (method_selector == 0)
-	  method_selector
-	    = lookup_child_selector (exp->gdbarch, "methodFor:");
-	
-	if (method_selector == 0)
-	  error (_("no 'methodFor:' or 'methodForSelector:' method"));
-
-	/* Call the verification method, to make sure that the target
-	 class implements the desired method.  */
-
-	argvec[0] = msg_send;
-	argvec[1] = target;
-	argvec[2] = value_from_longest (long_type, responds_selector);
-	argvec[3] = value_from_longest (long_type, selector);
-	argvec[4] = 0;
+struct value *
+eval_op_add (struct type *expect_type, struct expression *exp,
+	     enum noside noside,
+	     struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (BINOP_ADD, arg1, arg2))
+    return value_x_binop (arg1, arg2, BINOP_ADD, OP_NULL, noside);
+  else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
+	   && is_integral_or_integral_reference (value_type (arg2)))
+    return value_ptradd (arg1, value_as_long (arg2));
+  else if (ptrmath_type_p (exp->language_defn, value_type (arg2))
+	   && is_integral_or_integral_reference (value_type (arg1)))
+    return value_ptradd (arg2, value_as_long (arg1));
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      return value_binop (arg1, arg2, BINOP_ADD);
+    }
+}
 
-	ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
-	if (gnu_runtime)
-	  {
-	    /* Function objc_msg_lookup returns a pointer.  */
-	    argvec[0] = ret;
-	    ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
-	  }
-	if (value_as_long (ret) == 0)
-	  error (_("Target does not respond to this message selector."));
+/* A helper function for BINOP_SUB.  */
 
-	/* Call "methodForSelector:" method, to get the address of a
-	   function method that implements this selector for this
-	   class.  If we can find a symbol at that address, then we
-	   know the return type, parameter types etc.  (that's a good
-	   thing).  */
-
-	argvec[0] = msg_send;
-	argvec[1] = target;
-	argvec[2] = value_from_longest (long_type, method_selector);
-	argvec[3] = value_from_longest (long_type, selector);
-	argvec[4] = 0;
+struct value *
+eval_op_sub (struct type *expect_type, struct expression *exp,
+	     enum noside noside,
+	     struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (BINOP_SUB, arg1, arg2))
+    return value_x_binop (arg1, arg2, BINOP_SUB, OP_NULL, noside);
+  else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
+	   && ptrmath_type_p (exp->language_defn, value_type (arg2)))
+    {
+      /* FIXME -- should be ptrdiff_t */
+      struct type *type = builtin_type (exp->gdbarch)->builtin_long;
+      return value_from_longest (type, value_ptrdiff (arg1, arg2));
+    }
+  else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
+	   && is_integral_or_integral_reference (value_type (arg2)))
+    return value_ptradd (arg1, - value_as_long (arg2));
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      return value_binop (arg1, arg2, BINOP_SUB);
+    }
+}
 
-	ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
-	if (gnu_runtime)
-	  {
-	    argvec[0] = ret;
-	    ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
-	  }
+/* Helper function for several different binary operations.  */
 
-	/* ret should now be the selector.  */
+struct value *
+eval_op_binary (struct type *expect_type, struct expression *exp,
+		enum noside noside, enum exp_opcode op,
+		struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+  else
+    {
+      /* If EVAL_AVOID_SIDE_EFFECTS and we're dividing by zero,
+	 fudge arg2 to avoid division-by-zero, the caller is
+	 (theoretically) only looking for the type of the result.  */
+      if (noside == EVAL_AVOID_SIDE_EFFECTS
+	  /* ??? Do we really want to test for BINOP_MOD here?
+	     The implementation of value_binop gives it a well-defined
+	     value.  */
+	  && (op == BINOP_DIV
+	      || op == BINOP_INTDIV
+	      || op == BINOP_REM
+	      || op == BINOP_MOD)
+	  && value_logical_not (arg2))
+	{
+	  struct value *v_one;
+
+	  v_one = value_one (value_type (arg2));
+	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &v_one);
+	  return value_binop (arg1, v_one, op);
+	}
+      else
+	{
+	  /* For shift and integer exponentiation operations,
+	     only promote the first argument.  */
+	  if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
+	      && is_integral_type (value_type (arg2)))
+	    unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+	  else
+	    binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
 
-	addr = value_as_long (ret);
-	if (addr)
-	  {
-	    struct symbol *sym = NULL;
+	  return value_binop (arg1, arg2, op);
+	}
+    }
+}
 
-	    /* The address might point to a function descriptor;
-	       resolve it to the actual code address instead.  */
-	    addr = gdbarch_convert_from_func_ptr_addr (exp->gdbarch, addr,
-						       current_top_target ());
-
-	    /* Is it a high_level symbol?  */
-	    sym = find_pc_function (addr);
-	    if (sym != NULL) 
-	      method = value_of_variable (sym, 0);
-	  }
+/* A helper function for BINOP_SUBSCRIPT.  */
 
-	/* If we found a method with symbol information, check to see
-           if it returns a struct.  Otherwise assume it doesn't.  */
+struct value *
+eval_op_subscript (struct type *expect_type, struct expression *exp,
+		   enum noside noside, enum exp_opcode op,
+		   struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+  else
+    {
+      /* If the user attempts to subscript something that is not an
+	 array or pointer type (like a plain int variable for example),
+	 then report this as an error.  */
+
+      arg1 = coerce_ref (arg1);
+      struct type *type = check_typedef (value_type (arg1));
+      if (type->code () != TYPE_CODE_ARRAY
+	  && type->code () != TYPE_CODE_PTR)
+	{
+	  if (type->name ())
+	    error (_("cannot subscript something of type `%s'"),
+		   type->name ());
+	  else
+	    error (_("cannot subscript requested type"));
+	}
 
-	if (method)
-	  {
-	    CORE_ADDR funaddr;
-	    struct type *val_type;
+      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
+      else
+	return value_subscript (arg1, value_as_long (arg2));
+    }
+}
 
-	    funaddr = find_function_addr (method, &val_type);
+/* A helper function for BINOP_EQUAL.  */
 
-	    block_for_pc (funaddr);
+struct value *
+eval_op_equal (struct type *expect_type, struct expression *exp,
+	       enum noside noside, enum exp_opcode op,
+	       struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    {
+      return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      int tem = value_equal (arg1, arg2);
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) tem);
+    }
+}
 
-	    val_type = check_typedef (val_type);
-	  
-	    if ((val_type == NULL) 
-		|| (TYPE_CODE(val_type) == TYPE_CODE_ERROR))
-	      {
-		if (expect_type != NULL)
-		  val_type = expect_type;
-	      }
+/* A helper function for BINOP_NOTEQUAL.  */
 
-	    struct_return = using_struct_return (exp->gdbarch, method,
-						 val_type);
-	  }
-	else if (expect_type != NULL)
-	  {
-	    struct_return = using_struct_return (exp->gdbarch, NULL,
-						 check_typedef (expect_type));
-	  }
-	
-	/* Found a function symbol.  Now we will substitute its
-	   value in place of the message dispatcher (obj_msgSend),
-	   so that we call the method directly instead of thru
-	   the dispatcher.  The main reason for doing this is that
-	   we can now evaluate the return value and parameter values
-	   according to their known data types, in case we need to
-	   do things like promotion, dereferencing, special handling
-	   of structs and doubles, etc.
-	  
-	   We want to use the type signature of 'method', but still
-	   jump to objc_msgSend() or objc_msgSend_stret() to better
-	   mimic the behavior of the runtime.  */
-	
-	if (method)
-	  {
-	    if (TYPE_CODE (value_type (method)) != TYPE_CODE_FUNC)
-	      error (_("method address has symbol information "
-		       "with non-function type; skipping"));
-
-	    /* Create a function pointer of the appropriate type, and
-	       replace its value with the value of msg_send or
-	       msg_send_stret.  We must use a pointer here, as
-	       msg_send and msg_send_stret are of pointer type, and
-	       the representation may be different on systems that use
-	       function descriptors.  */
-	    if (struct_return)
-	      called_method
-		= value_from_pointer (lookup_pointer_type (value_type (method)),
-				      value_as_address (msg_send_stret));
-	    else
-	      called_method
-		= value_from_pointer (lookup_pointer_type (value_type (method)),
-				      value_as_address (msg_send));
-	  }
-	else
-	  {
-	    if (struct_return)
-	      called_method = msg_send_stret;
-	    else
-	      called_method = msg_send;
-	  }
+struct value *
+eval_op_notequal (struct type *expect_type, struct expression *exp,
+		  enum noside noside, enum exp_opcode op,
+		  struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    {
+      return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      int tem = value_equal (arg1, arg2);
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) ! tem);
+    }
+}
 
-	if (noside == EVAL_SKIP)
-	  return eval_skip_value (exp);
+/* A helper function for BINOP_LESS.  */
 
-	if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	  {
-	    /* If the return type doesn't look like a function type,
-	       call an error.  This can happen if somebody tries to
-	       turn a variable into a function call.  This is here
-	       because people often want to call, eg, strcmp, which
-	       gdb doesn't know is a function.  If gdb isn't asked for
-	       it's opinion (ie. through "whatis"), it won't offer
-	       it.  */
-
-	    struct type *callee_type = value_type (called_method);
-
-	    if (callee_type && TYPE_CODE (callee_type) == TYPE_CODE_PTR)
-	      callee_type = TYPE_TARGET_TYPE (callee_type);
-	    callee_type = TYPE_TARGET_TYPE (callee_type);
+struct value *
+eval_op_less (struct type *expect_type, struct expression *exp,
+	      enum noside noside, enum exp_opcode op,
+	      struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    {
+      return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      int tem = value_less (arg1, arg2);
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) tem);
+    }
+}
 
-	    if (callee_type)
-	    {
-	      if ((TYPE_CODE (callee_type) == TYPE_CODE_ERROR) && expect_type)
-		return allocate_value (expect_type);
-	      else
-		return allocate_value (callee_type);
-	    }
-	    else
-	      error (_("Expression of type other than "
-		       "\"method returning ...\" used as a method"));
-	  }
+/* A helper function for BINOP_GTR.  */
 
-	/* Now depending on whether we found a symbol for the method,
-	   we will either call the runtime dispatcher or the method
-	   directly.  */
-
-	argvec[0] = called_method;
-	argvec[1] = target;
-	argvec[2] = value_from_longest (long_type, selector);
-	/* User-supplied arguments.  */
-	for (tem = 0; tem < nargs; tem++)
-	  argvec[tem + 3] = evaluate_subexp_with_coercion (exp, pos, noside);
-	argvec[tem + 3] = 0;
+struct value *
+eval_op_gtr (struct type *expect_type, struct expression *exp,
+	     enum noside noside, enum exp_opcode op,
+	     struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    {
+      return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      int tem = value_less (arg2, arg1);
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) tem);
+    }
+}
 
-	auto call_args = gdb::make_array_view (argvec + 1, nargs + 2);
+/* A helper function for BINOP_GEQ.  */
 
-	if (gnu_runtime && (method != NULL))
-	  {
-	    /* Function objc_msg_lookup returns a pointer.  */
-	    deprecated_set_value_type (argvec[0],
-				       lookup_pointer_type (lookup_function_type (value_type (argvec[0]))));
-	    argvec[0] = call_function_by_hand (argvec[0], NULL, call_args);
-	  }
+struct value *
+eval_op_geq (struct type *expect_type, struct expression *exp,
+	     enum noside noside, enum exp_opcode op,
+	     struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    {
+      return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      int tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) tem);
+    }
+}
 
-	return call_function_by_hand (argvec[0], NULL, call_args);
-      }
-      break;
+/* A helper function for BINOP_LEQ.  */
 
-    case OP_FUNCALL:
-      return evaluate_funcall (expect_type, exp, pos, noside);
+struct value *
+eval_op_leq (struct type *expect_type, struct expression *exp,
+	     enum noside noside, enum exp_opcode op,
+	     struct value *arg1, struct value *arg2)
+{
+  if (binop_user_defined_p (op, arg1, arg2))
+    {
+      return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+    }
+  else
+    {
+      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+      int tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) tem);
+    }
+}
 
-    case OP_F77_UNDETERMINED_ARGLIST:
+/* A helper function for BINOP_REPEAT.  */
 
-      /* Remember that in F77, functions, substring ops and 
-         array subscript operations cannot be disambiguated 
-         at parse time.  We have made all array subscript operations, 
-         substring operations as well as function calls  come here 
-         and we now have to discover what the heck this thing actually was.
-         If it is a function, we process just as if we got an OP_FUNCALL.  */
+struct value *
+eval_op_repeat (struct type *expect_type, struct expression *exp,
+		enum noside noside, enum exp_opcode op,
+		struct value *arg1, struct value *arg2)
+{
+  struct type *type = check_typedef (value_type (arg2));
+  if (type->code () != TYPE_CODE_INT
+      && type->code () != TYPE_CODE_ENUM)
+    error (_("Non-integral right operand for \"@\" operator."));
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      return allocate_repeat_value (value_type (arg1),
+				    longest_to_int (value_as_long (arg2)));
+    }
+  else
+    return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
+}
 
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 2;
+/* A helper function for UNOP_PLUS.  */
 
-      /* First determine the type code we are dealing with.  */
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      type = check_typedef (value_type (arg1));
-      code = TYPE_CODE (type);
+struct value *
+eval_op_plus (struct type *expect_type, struct expression *exp,
+	      enum noside noside, enum exp_opcode op,
+	      struct value *arg1)
+{
+  if (unop_user_defined_p (op, arg1))
+    return value_x_unop (arg1, op, noside);
+  else
+    {
+      unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+      return value_pos (arg1);
+    }
+}
 
-      if (code == TYPE_CODE_PTR)
-	{
-	  /* Fortran always passes variable to subroutines as pointer.
-	     So we need to look into its target type to see if it is
-	     array, string or function.  If it is, we need to switch
-	     to the target value the original one points to.  */ 
-	  struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
-
-	  if (TYPE_CODE (target_type) == TYPE_CODE_ARRAY
-	      || TYPE_CODE (target_type) == TYPE_CODE_STRING
-	      || TYPE_CODE (target_type) == TYPE_CODE_FUNC)
-	    {
-	      arg1 = value_ind (arg1);
-	      type = check_typedef (value_type (arg1));
-	      code = TYPE_CODE (type);
-	    }
-	} 
+/* A helper function for UNOP_NEG.  */
 
-      switch (code)
-	{
-	case TYPE_CODE_ARRAY:
-	  if (exp->elts[*pos].opcode == OP_RANGE)
-	    return value_f90_subarray (arg1, exp, pos, noside);
-	  else
-	    {
-	      if (noside == EVAL_SKIP)
-		{
-		  skip_undetermined_arglist (nargs, exp, pos, noside);
-		  /* Return the dummy value with the correct type.  */
-		  return arg1;
-		}
-	      goto multi_f77_subscript;
-	    }
+struct value *
+eval_op_neg (struct type *expect_type, struct expression *exp,
+	     enum noside noside, enum exp_opcode op,
+	     struct value *arg1)
+{
+  if (unop_user_defined_p (op, arg1))
+    return value_x_unop (arg1, op, noside);
+  else
+    {
+      unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+      return value_neg (arg1);
+    }
+}
 
-	case TYPE_CODE_STRING:
-	  if (exp->elts[*pos].opcode == OP_RANGE)
-	    return value_f90_subarray (arg1, exp, pos, noside);
-	  else
-	    {
-	      if (noside == EVAL_SKIP)
-		{
-		  skip_undetermined_arglist (nargs, exp, pos, noside);
-		  /* Return the dummy value with the correct type.  */
-		  return arg1;
-		}
-	      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-	      return value_subscript (arg1, value_as_long (arg2));
-	    }
+/* A helper function for UNOP_COMPLEMENT.  */
 
-	case TYPE_CODE_PTR:
-	case TYPE_CODE_FUNC:
-	case TYPE_CODE_INTERNAL_FUNCTION:
-	  /* It's a function call.  */
-	  /* Allocate arg vector, including space for the function to be
-	     called in argvec[0] and a terminating NULL.  */
-	  argvec = (struct value **)
-	    alloca (sizeof (struct value *) * (nargs + 2));
-	  argvec[0] = arg1;
-	  tem = 1;
-	  for (; tem <= nargs; tem++)
-	    {
-	      argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
-	      /* Arguments in Fortran are passed by address.  Coerce the
-		 arguments here rather than in value_arg_coerce as otherwise
-		 the call to malloc to place the non-lvalue parameters in
-		 target memory is hit by this Fortran specific logic.  This
-		 results in malloc being called with a pointer to an integer
-		 followed by an attempt to malloc the arguments to malloc in
-		 target memory.  Infinite recursion ensues.  */
-	      if (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC)
-		{
-		  bool is_artificial
-		    = TYPE_FIELD_ARTIFICIAL (value_type (arg1), tem - 1);
-		  argvec[tem] = fortran_argument_convert (argvec[tem],
-							  is_artificial);
-		}
-	    }
-	  argvec[tem] = 0;	/* signal end of arglist */
-	  if (noside == EVAL_SKIP)
-	    return eval_skip_value (exp);
-	  return eval_call (exp, noside, nargs, argvec, NULL, expect_type);
+struct value *
+eval_op_complement (struct type *expect_type, struct expression *exp,
+		    enum noside noside, enum exp_opcode op,
+		    struct value *arg1)
+{
+  if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
+    return value_x_unop (arg1, UNOP_COMPLEMENT, noside);
+  else
+    {
+      unop_promote (exp->language_defn, exp->gdbarch, &arg1);
+      return value_complement (arg1);
+    }
+}
 
-	default:
-	  error (_("Cannot perform substring on this type"));
-	}
+/* A helper function for UNOP_LOGICAL_NOT.  */
 
-    case OP_COMPLEX:
-      /* We have a complex number, There should be 2 floating 
-         point numbers that compose it.  */
-      (*pos) += 2;
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-
-      return value_literal_complex (arg1, arg2, exp->elts[pc + 1].type);
-
-    case STRUCTOP_STRUCT:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      arg3 = value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string,
-			       NULL, "structure");
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	arg3 = value_zero (value_type (arg3), VALUE_LVAL (arg3));
-      return arg3;
+struct value *
+eval_op_lognot (struct type *expect_type, struct expression *exp,
+		enum noside noside, enum exp_opcode op,
+		struct value *arg1)
+{
+  if (unop_user_defined_p (op, arg1))
+    return value_x_unop (arg1, op, noside);
+  else
+    {
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, (LONGEST) value_logical_not (arg1));
+    }
+}
 
-    case STRUCTOP_PTR:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-
-      /* Check to see if operator '->' has been overloaded.  If so replace
-         arg1 with the value returned by evaluating operator->().  */
-      while (unop_user_defined_p (op, arg1))
-	{
-	  struct value *value = NULL;
-	  try
-	    {
-	      value = value_x_unop (arg1, op, noside);
-	    }
+/* A helper function for UNOP_IND.  */
 
-	  catch (const gdb_exception_error &except)
-	    {
-	      if (except.error == NOT_FOUND_ERROR)
-		break;
-	      else
-		throw;
-	    }
+struct value *
+eval_op_ind (struct type *expect_type, struct expression *exp,
+	     enum noside noside,
+	     struct value *arg1)
+{
+  struct type *type = check_typedef (value_type (arg1));
+  if (type->code () == TYPE_CODE_METHODPTR
+      || type->code () == TYPE_CODE_MEMBERPTR)
+    error (_("Attempt to dereference pointer "
+	     "to member without an object"));
+  if (unop_user_defined_p (UNOP_IND, arg1))
+    return value_x_unop (arg1, UNOP_IND, noside);
+  else if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      type = check_typedef (value_type (arg1));
 
-	  arg1 = value;
+      /* If the type pointed to is dynamic then in order to resolve the
+	 dynamic properties we must actually dereference the pointer.
+	 There is a risk that this dereference will have side-effects
+	 in the inferior, but being able to print accurate type
+	 information seems worth the risk. */
+      if ((type->code () != TYPE_CODE_PTR
+	   && !TYPE_IS_REFERENCE (type))
+	  || !is_dynamic_type (TYPE_TARGET_TYPE (type)))
+	{
+	  if (type->code () == TYPE_CODE_PTR
+	      || TYPE_IS_REFERENCE (type)
+	      /* In C you can dereference an array to get the 1st elt.  */
+	      || type->code () == TYPE_CODE_ARRAY)
+	    return value_zero (TYPE_TARGET_TYPE (type),
+			       lval_memory);
+	  else if (type->code () == TYPE_CODE_INT)
+	    /* GDB allows dereferencing an int.  */
+	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
+			       lval_memory);
+	  else
+	    error (_("Attempt to take contents of a non-pointer value."));
 	}
+    }
 
-      /* JYG: if print object is on we need to replace the base type
-	 with rtti type in order to continue on with successful
-	 lookup of member / method only available in the rtti type.  */
-      {
-        struct type *arg_type = value_type (arg1);
-        struct type *real_type;
-        int full, using_enc;
-        LONGEST top;
-	struct value_print_options opts;
-
-	get_user_print_options (&opts);
-        if (opts.objectprint && TYPE_TARGET_TYPE (arg_type)
-            && (TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_STRUCT))
-          {
-            real_type = value_rtti_indirect_type (arg1, &full, &top,
-						  &using_enc);
-            if (real_type)
-                arg1 = value_cast (real_type, arg1);
-          }
-      }
+  /* Allow * on an integer so we can cast it to whatever we want.
+     This returns an int, which seems like the most C-like thing to
+     do.  "long long" variables are rare enough that
+     BUILTIN_TYPE_LONGEST would seem to be a mistake.  */
+  if (type->code () == TYPE_CODE_INT)
+    return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
+			  (CORE_ADDR) value_as_address (arg1));
+  return value_ind (arg1);
+}
 
-      arg3 = value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string,
-			       NULL, "structure pointer");
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	arg3 = value_zero (value_type (arg3), VALUE_LVAL (arg3));
-      return arg3;
+/* A helper function for UNOP_ALIGNOF.  */
 
-    case STRUCTOP_MEMBER:
-    case STRUCTOP_MPTR:
-      if (op == STRUCTOP_MEMBER)
-	arg1 = evaluate_subexp_for_address (exp, pos, noside);
-      else
-	arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+struct value *
+eval_op_alignof (struct type *expect_type, struct expression *exp,
+		 enum noside noside,
+		 struct value *arg1)
+{
+  struct type *type = value_type (arg1);
+  /* FIXME: This should be size_t.  */
+  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
+  ULONGEST align = type_align (type);
+  if (align == 0)
+    error (_("could not determine alignment of type"));
+  return value_from_longest (size_type, align);
+}
 
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+/* A helper function for UNOP_MEMVAL.  */
 
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
+struct value *
+eval_op_memval (struct type *expect_type, struct expression *exp,
+		enum noside noside,
+		struct value *arg1, struct type *type)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value_zero (type, lval_memory);
+  else
+    return value_at_lazy (type, value_as_address (arg1));
+}
 
-      type = check_typedef (value_type (arg2));
-      switch (TYPE_CODE (type))
-	{
-	case TYPE_CODE_METHODPTR:
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    return value_zero (TYPE_TARGET_TYPE (type), not_lval);
-	  else
-	    {
-	      arg2 = cplus_method_ptr_to_value (&arg1, arg2);
-	      gdb_assert (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR);
-	      return value_ind (arg2);
-	    }
+/* A helper function for UNOP_PREINCREMENT.  */
 
-	case TYPE_CODE_MEMBERPTR:
-	  /* Now, convert these values to an address.  */
-	  arg1 = value_cast_pointers (lookup_pointer_type (TYPE_SELF_TYPE (type)),
-				      arg1, 1);
-
-	  mem_offset = value_as_long (arg2);
-
-	  arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
-				     value_as_long (arg1) + mem_offset);
-	  return value_ind (arg3);
+struct value *
+eval_op_preinc (struct type *expect_type, struct expression *exp,
+		enum noside noside, enum exp_opcode op,
+		struct value *arg1)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  else if (unop_user_defined_p (op, arg1))
+    {
+      return value_x_unop (arg1, op, noside);
+    }
+  else
+    {
+      struct value *arg2;
+      if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
+	arg2 = value_ptradd (arg1, 1);
+      else
+	{
+	  struct value *tmp = arg1;
 
-	default:
-	  error (_("non-pointer-to-member value used "
-		   "in pointer-to-member construct"));
+	  arg2 = value_one (value_type (arg1));
+	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
+	  arg2 = value_binop (tmp, arg2, BINOP_ADD);
 	}
 
-    case TYPE_INSTANCE:
-      {
-	type_instance_flags flags
-	  = (type_instance_flag_value) longest_to_int (exp->elts[pc + 1].longconst);
-	nargs = longest_to_int (exp->elts[pc + 2].longconst);
-	arg_types = (struct type **) alloca (nargs * sizeof (struct type *));
-	for (ix = 0; ix < nargs; ++ix)
-	  arg_types[ix] = exp->elts[pc + 2 + ix + 1].type;
-
-	fake_method fake_expect_type (flags, nargs, arg_types);
-	*(pos) += 4 + nargs;
-	return evaluate_subexp_standard (fake_expect_type.type (), exp, pos,
-					 noside);
-      }
-
-    case BINOP_CONCAT:
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-      else
-	return value_concat (arg1, arg2);
+      return value_assign (arg1, arg2);
+    }
+}
 
-    case BINOP_ASSIGN:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      /* Special-case assignments where the left-hand-side is a
-	 convenience variable -- in these, don't bother setting an
-	 expected type.  This avoids a weird case where re-assigning a
-	 string or array to an internal variable could error with "Too
-	 many array elements".  */
-      arg2 = evaluate_subexp (VALUE_LVAL (arg1) == lval_internalvar
-			      ? NULL_TYPE : value_type (arg1),
-			      exp, pos, noside);
-
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-      else
-	return value_assign (arg1, arg2);
+/* A helper function for UNOP_PREDECREMENT.  */
 
-    case BINOP_ASSIGN_MODIFY:
-      (*pos) += 2;
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      op = exp->elts[pc + 1].opcode;
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op, noside);
-      else if (op == BINOP_ADD && ptrmath_type_p (exp->language_defn,
-						  value_type (arg1))
-	       && is_integral_type (value_type (arg2)))
-	arg2 = value_ptradd (arg1, value_as_long (arg2));
-      else if (op == BINOP_SUB && ptrmath_type_p (exp->language_defn,
-						  value_type (arg1))
-	       && is_integral_type (value_type (arg2)))
-	arg2 = value_ptradd (arg1, - value_as_long (arg2));
+struct value *
+eval_op_predec (struct type *expect_type, struct expression *exp,
+		enum noside noside, enum exp_opcode op,
+		struct value *arg1)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  else if (unop_user_defined_p (op, arg1))
+    {
+      return value_x_unop (arg1, op, noside);
+    }
+  else
+    {
+      struct value *arg2;
+      if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
+	arg2 = value_ptradd (arg1, -1);
       else
 	{
 	  struct value *tmp = arg1;
 
-	  /* For shift and integer exponentiation operations,
-	     only promote the first argument.  */
-	  if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
-	      && is_integral_type (value_type (arg2)))
-	    unop_promote (exp->language_defn, exp->gdbarch, &tmp);
-	  else
-	    binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
-
-	  arg2 = value_binop (tmp, arg2, op);
+	  arg2 = value_one (value_type (arg1));
+	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
+	  arg2 = value_binop (tmp, arg2, BINOP_SUB);
 	}
+
       return value_assign (arg1, arg2);
+    }
+}
 
-    case BINOP_ADD:
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-      else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
-	       && is_integral_type (value_type (arg2)))
-	return value_ptradd (arg1, value_as_long (arg2));
-      else if (ptrmath_type_p (exp->language_defn, value_type (arg2))
-	       && is_integral_type (value_type (arg1)))
-	return value_ptradd (arg2, value_as_long (arg1));
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  return value_binop (arg1, arg2, BINOP_ADD);
-	}
+/* A helper function for UNOP_POSTINCREMENT.  */
 
-    case BINOP_SUB:
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-      else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
-	       && ptrmath_type_p (exp->language_defn, value_type (arg2)))
-	{
-	  /* FIXME -- should be ptrdiff_t */
-	  type = builtin_type (exp->gdbarch)->builtin_long;
-	  return value_from_longest (type, value_ptrdiff (arg1, arg2));
-	}
-      else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
-	       && is_integral_type (value_type (arg2)))
-	return value_ptradd (arg1, - value_as_long (arg2));
+struct value *
+eval_op_postinc (struct type *expect_type, struct expression *exp,
+		 enum noside noside, enum exp_opcode op,
+		 struct value *arg1)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  else if (unop_user_defined_p (op, arg1))
+    {
+      return value_x_unop (arg1, op, noside);
+    }
+  else
+    {
+      struct value *arg3 = value_non_lval (arg1);
+      struct value *arg2;
+
+      if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
+	arg2 = value_ptradd (arg1, 1);
       else
 	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  return value_binop (arg1, arg2, BINOP_SUB);
+	  struct value *tmp = arg1;
+
+	  arg2 = value_one (value_type (arg1));
+	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
+	  arg2 = value_binop (tmp, arg2, BINOP_ADD);
 	}
 
-    case BINOP_EXP:
-    case BINOP_MUL:
-    case BINOP_DIV:
-    case BINOP_INTDIV:
-    case BINOP_REM:
-    case BINOP_MOD:
-    case BINOP_LSH:
-    case BINOP_RSH:
-    case BINOP_BITWISE_AND:
-    case BINOP_BITWISE_IOR:
-    case BINOP_BITWISE_XOR:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-      else
-	{
-	  /* If EVAL_AVOID_SIDE_EFFECTS and we're dividing by zero,
-	     fudge arg2 to avoid division-by-zero, the caller is
-	     (theoretically) only looking for the type of the result.  */
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS
-	      /* ??? Do we really want to test for BINOP_MOD here?
-		 The implementation of value_binop gives it a well-defined
-		 value.  */
-	      && (op == BINOP_DIV
-		  || op == BINOP_INTDIV
-		  || op == BINOP_REM
-		  || op == BINOP_MOD)
-	      && value_logical_not (arg2))
-	    {
-	      struct value *v_one, *retval;
+      value_assign (arg1, arg2);
+      return arg3;
+    }
+}
 
-	      v_one = value_one (value_type (arg2));
-	      binop_promote (exp->language_defn, exp->gdbarch, &arg1, &v_one);
-	      retval = value_binop (arg1, v_one, op);
-	      return retval;
-	    }
-	  else
-	    {
-	      /* For shift and integer exponentiation operations,
-		 only promote the first argument.  */
-	      if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
-		  && is_integral_type (value_type (arg2)))
-		unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-	      else
-		binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
+/* A helper function for UNOP_POSTDECREMENT.  */
 
-	      return value_binop (arg1, arg2, op);
-	    }
-	}
+struct value *
+eval_op_postdec (struct type *expect_type, struct expression *exp,
+		 enum noside noside, enum exp_opcode op,
+		 struct value *arg1)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  else if (unop_user_defined_p (op, arg1))
+    {
+      return value_x_unop (arg1, op, noside);
+    }
+  else
+    {
+      struct value *arg3 = value_non_lval (arg1);
+      struct value *arg2;
 
-    case BINOP_SUBSCRIPT:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	return value_x_binop (arg1, arg2, op, OP_NULL, noside);
+      if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
+	arg2 = value_ptradd (arg1, -1);
       else
 	{
-	  /* If the user attempts to subscript something that is not an
-	     array or pointer type (like a plain int variable for example),
-	     then report this as an error.  */
-
-	  arg1 = coerce_ref (arg1);
-	  type = check_typedef (value_type (arg1));
-	  if (TYPE_CODE (type) != TYPE_CODE_ARRAY
-	      && TYPE_CODE (type) != TYPE_CODE_PTR)
-	    {
-	      if (TYPE_NAME (type))
-		error (_("cannot subscript something of type `%s'"),
-		       TYPE_NAME (type));
-	      else
-		error (_("cannot subscript requested type"));
-	    }
+	  struct value *tmp = arg1;
 
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
-	  else
-	    return value_subscript (arg1, value_as_long (arg2));
+	  arg2 = value_one (value_type (arg1));
+	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
+	  arg2 = value_binop (tmp, arg2, BINOP_SUB);
 	}
-    case MULTI_SUBSCRIPT:
-      (*pos) += 2;
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      while (nargs-- > 0)
-	{
-	  arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-	  /* FIXME:  EVAL_SKIP handling may not be correct.  */
-	  if (noside == EVAL_SKIP)
-	    {
-	      if (nargs > 0)
-		continue;
-	      return eval_skip_value (exp);
-	    }
-	  /* FIXME:  EVAL_AVOID_SIDE_EFFECTS handling may not be correct.  */
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    {
-	      /* If the user attempts to subscript something that has no target
-	         type (like a plain int variable for example), then report this
-	         as an error.  */
 
-	      type = TYPE_TARGET_TYPE (check_typedef (value_type (arg1)));
-	      if (type != NULL)
-		{
-		  arg1 = value_zero (type, VALUE_LVAL (arg1));
-		  noside = EVAL_SKIP;
-		  continue;
-		}
-	      else
-		{
-		  error (_("cannot subscript something of type `%s'"),
-			 TYPE_NAME (value_type (arg1)));
-		}
-	    }
+      value_assign (arg1, arg2);
+      return arg3;
+    }
+}
 
-	  if (binop_user_defined_p (op, arg1, arg2))
-	    {
-	      arg1 = value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	    }
-	  else
-	    {
-	      arg1 = coerce_ref (arg1);
-	      type = check_typedef (value_type (arg1));
+/* A helper function for OP_TYPE.  */
 
-	      switch (TYPE_CODE (type))
-		{
-		case TYPE_CODE_PTR:
-		case TYPE_CODE_ARRAY:
-		case TYPE_CODE_STRING:
-		  arg1 = value_subscript (arg1, value_as_long (arg2));
-		  break;
-
-		default:
-		  if (TYPE_NAME (type))
-		    error (_("cannot subscript something of type `%s'"),
-			   TYPE_NAME (type));
-		  else
-		    error (_("cannot subscript requested type"));
-		}
-	    }
-	}
-      return (arg1);
+struct value *
+eval_op_type (struct type *expect_type, struct expression *exp,
+	      enum noside noside, struct type *type)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return allocate_value (type);
+  else
+    error (_("Attempt to use a type name as an expression"));
+}
 
-    multi_f77_subscript:
-      {
-	LONGEST subscript_array[MAX_FORTRAN_DIMS];
-	int ndimensions = 1, i;
-	struct value *array = arg1;
+/* A helper function for BINOP_ASSIGN_MODIFY.  */
 
-	if (nargs > MAX_FORTRAN_DIMS)
-	  error (_("Too many subscripts for F77 (%d Max)"), MAX_FORTRAN_DIMS);
+struct value *
+eval_binop_assign_modify (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 arg1;
+  if (binop_user_defined_p (op, arg1, arg2))
+    return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op, noside);
+  else if (op == BINOP_ADD && ptrmath_type_p (exp->language_defn,
+					      value_type (arg1))
+	   && is_integral_type (value_type (arg2)))
+    arg2 = value_ptradd (arg1, value_as_long (arg2));
+  else if (op == BINOP_SUB && ptrmath_type_p (exp->language_defn,
+					      value_type (arg1))
+	   && is_integral_type (value_type (arg2)))
+    arg2 = value_ptradd (arg1, - value_as_long (arg2));
+  else
+    {
+      struct value *tmp = arg1;
 
-	ndimensions = calc_f77_array_dims (type);
+      /* For shift and integer exponentiation operations,
+	 only promote the first argument.  */
+      if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
+	  && is_integral_type (value_type (arg2)))
+	unop_promote (exp->language_defn, exp->gdbarch, &tmp);
+      else
+	binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
 
-	if (nargs != ndimensions)
-	  error (_("Wrong number of subscripts"));
+      arg2 = value_binop (tmp, arg2, op);
+    }
+  return value_assign (arg1, arg2);
+}
 
-	gdb_assert (nargs > 0);
+/* Note that ARGS needs 2 empty slots up front and must end with a
+   null pointer.  */
+static struct value *
+eval_op_objc_msgcall (struct type *expect_type, struct expression *exp,
+		      enum noside noside, CORE_ADDR selector,
+		      value *target, gdb::array_view<value *> args)
+{
+  CORE_ADDR responds_selector = 0;
+  CORE_ADDR method_selector = 0;
 
-	/* Now that we know we have a legal array subscript expression 
-	   let us actually find out where this element exists in the array.  */
+  int struct_return = 0;
 
-	/* Take array indices left to right.  */
-	for (i = 0; i < nargs; i++)
-	  {
-	    /* Evaluate each subscript; it must be a legal integer in F77.  */
-	    arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
+  struct value *msg_send = NULL;
+  struct value *msg_send_stret = NULL;
+  int gnu_runtime = 0;
 
-	    /* Fill in the subscript array.  */
+  struct value *method = NULL;
+  struct value *called_method = NULL;
 
-	    subscript_array[i] = value_as_long (arg2);
-	  }
+  struct type *selector_type = NULL;
+  struct type *long_type;
+  struct type *type;
 
-	/* Internal type of array is arranged right to left.  */
-	for (i = nargs; i > 0; i--)
-	  {
-	    struct type *array_type = check_typedef (value_type (array));
-	    LONGEST index = subscript_array[i - 1];
+  struct value *ret = NULL;
+  CORE_ADDR addr = 0;
 
-	    array = value_subscripted_rvalue (array, index,
-					      f77_get_lowerbound (array_type));
-	  }
+  value *argvec[5];
 
-	return array;
-      }
+  long_type = builtin_type (exp->gdbarch)->builtin_long;
+  selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
 
-    case BINOP_LOGICAL_AND:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	{
-	  evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	  return eval_skip_value (exp);
-	}
+  if (value_as_long (target) == 0)
+    return value_from_longest (long_type, 0);
+
+  if (lookup_minimal_symbol ("objc_msg_lookup", 0, 0).minsym)
+    gnu_runtime = 1;
+
+  /* Find the method dispatch (Apple runtime) or method lookup
+     (GNU runtime) function for Objective-C.  These will be used
+     to lookup the symbol information for the method.  If we
+     can't find any symbol information, then we'll use these to
+     call the method, otherwise we can call the method
+     directly.  The msg_send_stret function is used in the special
+     case of a method that returns a structure (Apple runtime
+     only).  */
+  if (gnu_runtime)
+    {
+      type = selector_type;
+
+      type = lookup_function_type (type);
+      type = lookup_pointer_type (type);
+      type = lookup_function_type (type);
+      type = lookup_pointer_type (type);
+
+      msg_send = find_function_in_inferior ("objc_msg_lookup", NULL);
+      msg_send_stret
+	= find_function_in_inferior ("objc_msg_lookup", NULL);
+
+      msg_send = value_from_pointer (type, value_as_address (msg_send));
+      msg_send_stret = value_from_pointer (type,
+					   value_as_address (msg_send_stret));
+    }
+  else
+    {
+      msg_send = find_function_in_inferior ("objc_msgSend", NULL);
+      /* Special dispatcher for methods returning structs.  */
+      msg_send_stret
+	= find_function_in_inferior ("objc_msgSend_stret", NULL);
+    }
 
-      oldpos = *pos;
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      *pos = oldpos;
+  /* Verify the target object responds to this method.  The
+     standard top-level 'Object' class uses a different name for
+     the verification method than the non-standard, but more
+     often used, 'NSObject' class.  Make sure we check for both.  */
 
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  tem = value_logical_not (arg1);
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
-				  (tem ? EVAL_SKIP : noside));
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type,
-			     (LONGEST) (!tem && !value_logical_not (arg2)));
-	}
+  responds_selector
+    = lookup_child_selector (exp->gdbarch, "respondsToSelector:");
+  if (responds_selector == 0)
+    responds_selector
+      = lookup_child_selector (exp->gdbarch, "respondsTo:");
 
-    case BINOP_LOGICAL_OR:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	{
-	  evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	  return eval_skip_value (exp);
-	}
+  if (responds_selector == 0)
+    error (_("no 'respondsTo:' or 'respondsToSelector:' method"));
 
-      oldpos = *pos;
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      *pos = oldpos;
+  method_selector
+    = lookup_child_selector (exp->gdbarch, "methodForSelector:");
+  if (method_selector == 0)
+    method_selector
+      = lookup_child_selector (exp->gdbarch, "methodFor:");
 
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  tem = value_logical_not (arg1);
-	  arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
-				  (!tem ? EVAL_SKIP : noside));
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type,
-			     (LONGEST) (!tem || !value_logical_not (arg2)));
-	}
-
-    case BINOP_EQUAL:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = value_equal (arg1, arg2);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) tem);
-	}
+  if (method_selector == 0)
+    error (_("no 'methodFor:' or 'methodForSelector:' method"));
 
-    case BINOP_NOTEQUAL:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = value_equal (arg1, arg2);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) ! tem);
-	}
+  /* Call the verification method, to make sure that the target
+     class implements the desired method.  */
 
-    case BINOP_LESS:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = value_less (arg1, arg2);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) tem);
-	}
+  argvec[0] = msg_send;
+  argvec[1] = target;
+  argvec[2] = value_from_longest (long_type, responds_selector);
+  argvec[3] = value_from_longest (long_type, selector);
+  argvec[4] = 0;
 
-    case BINOP_GTR:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = value_less (arg2, arg1);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) tem);
-	}
+  ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
+  if (gnu_runtime)
+    {
+      /* Function objc_msg_lookup returns a pointer.  */
+      argvec[0] = ret;
+      ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
+    }
+  if (value_as_long (ret) == 0)
+    error (_("Target does not respond to this message selector."));
 
-    case BINOP_GEQ:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) tem);
-	}
+  /* Call "methodForSelector:" method, to get the address of a
+     function method that implements this selector for this
+     class.  If we can find a symbol at that address, then we
+     know the return type, parameter types etc.  (that's a good
+     thing).  */
 
-    case BINOP_LEQ:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (binop_user_defined_p (op, arg1, arg2))
-	{
-	  return value_x_binop (arg1, arg2, op, OP_NULL, noside);
-	}
-      else
-	{
-	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
-	  tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) tem);
-	}
+  argvec[0] = msg_send;
+  argvec[1] = target;
+  argvec[2] = value_from_longest (long_type, method_selector);
+  argvec[3] = value_from_longest (long_type, selector);
+  argvec[4] = 0;
 
-    case BINOP_REPEAT:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      type = check_typedef (value_type (arg2));
-      if (TYPE_CODE (type) != TYPE_CODE_INT
-          && TYPE_CODE (type) != TYPE_CODE_ENUM)
-	error (_("Non-integral right operand for \"@\" operator."));
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	{
-	  return allocate_repeat_value (value_type (arg1),
-				     longest_to_int (value_as_long (arg2)));
-	}
-      else
-	return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
+  ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
+  if (gnu_runtime)
+    {
+      argvec[0] = ret;
+      ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
+    }
 
-    case BINOP_COMMA:
-      evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      return evaluate_subexp (NULL_TYPE, exp, pos, noside);
-
-    case UNOP_PLUS:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (unop_user_defined_p (op, arg1))
-	return value_x_unop (arg1, op, noside);
-      else
-	{
-	  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-	  return value_pos (arg1);
-	}
-      
-    case UNOP_NEG:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (unop_user_defined_p (op, arg1))
-	return value_x_unop (arg1, op, noside);
-      else
-	{
-	  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-	  return value_neg (arg1);
-	}
+  /* ret should now be the selector.  */
 
-    case UNOP_COMPLEMENT:
-      /* C++: check for and handle destructor names.  */
+  addr = value_as_long (ret);
+  if (addr)
+    {
+      struct symbol *sym = NULL;
 
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
-	return value_x_unop (arg1, UNOP_COMPLEMENT, noside);
-      else
-	{
-	  unop_promote (exp->language_defn, exp->gdbarch, &arg1);
-	  return value_complement (arg1);
-	}
+      /* The address might point to a function descriptor;
+	 resolve it to the actual code address instead.  */
+      addr = gdbarch_convert_from_func_ptr_addr
+	(exp->gdbarch, addr, current_inferior ()->top_target ());
 
-    case UNOP_LOGICAL_NOT:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (unop_user_defined_p (op, arg1))
-	return value_x_unop (arg1, op, noside);
-      else
-	{
-	  type = language_bool_type (exp->language_defn, exp->gdbarch);
-	  return value_from_longest (type, (LONGEST) value_logical_not (arg1));
-	}
+      /* Is it a high_level symbol?  */
+      sym = find_pc_function (addr);
+      if (sym != NULL)
+	method = value_of_variable (sym, 0);
+    }
 
-    case UNOP_IND:
-      if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
-	expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      type = check_typedef (value_type (arg1));
-      if (TYPE_CODE (type) == TYPE_CODE_METHODPTR
-	  || TYPE_CODE (type) == TYPE_CODE_MEMBERPTR)
-	error (_("Attempt to dereference pointer "
-		 "to member without an object"));
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (unop_user_defined_p (op, arg1))
-	return value_x_unop (arg1, op, noside);
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	{
-	  type = check_typedef (value_type (arg1));
-	  if (TYPE_CODE (type) == TYPE_CODE_PTR
-	      || TYPE_IS_REFERENCE (type)
-	  /* In C you can dereference an array to get the 1st elt.  */
-	      || TYPE_CODE (type) == TYPE_CODE_ARRAY
-	    )
-	    return value_zero (TYPE_TARGET_TYPE (type),
-			       lval_memory);
-	  else if (TYPE_CODE (type) == TYPE_CODE_INT)
-	    /* GDB allows dereferencing an int.  */
-	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
-			       lval_memory);
-	  else
-	    error (_("Attempt to take contents of a non-pointer value."));
-	}
+  /* If we found a method with symbol information, check to see
+     if it returns a struct.  Otherwise assume it doesn't.  */
 
-      /* Allow * on an integer so we can cast it to whatever we want.
-	 This returns an int, which seems like the most C-like thing to
-	 do.  "long long" variables are rare enough that
-	 BUILTIN_TYPE_LONGEST would seem to be a mistake.  */
-      if (TYPE_CODE (type) == TYPE_CODE_INT)
-	return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
-			      (CORE_ADDR) value_as_address (arg1));
-      return value_ind (arg1);
+  if (method)
+    {
+      CORE_ADDR funaddr;
+      struct type *val_type;
 
-    case UNOP_ADDR:
-      /* C++: check for and handle pointer to members.  */
+      funaddr = find_function_addr (method, &val_type);
 
-      if (noside == EVAL_SKIP)
-	{
-	  evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-	  return eval_skip_value (exp);
-	}
-      else
-	{
-	  struct value *retvalp = evaluate_subexp_for_address (exp, pos,
-							       noside);
+      block_for_pc (funaddr);
 
-	  return retvalp;
-	}
+      val_type = check_typedef (val_type);
 
-    case UNOP_SIZEOF:
-      if (noside == EVAL_SKIP)
+      if ((val_type == NULL)
+	  || (val_type->code () == TYPE_CODE_ERROR))
 	{
-	  evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-	  return eval_skip_value (exp);
+	  if (expect_type != NULL)
+	    val_type = expect_type;
 	}
-      return evaluate_subexp_for_sizeof (exp, pos, noside);
 
-    case UNOP_ALIGNOF:
-      {
-	type = value_type (evaluate_subexp (NULL_TYPE, exp, pos,
-					    EVAL_AVOID_SIDE_EFFECTS));
-	/* FIXME: This should be size_t.  */
-	struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
-	ULONGEST align = type_align (type);
-	if (align == 0)
-	  error (_("could not determine alignment of type"));
-	return value_from_longest (size_type, align);
-      }
+      struct_return = using_struct_return (exp->gdbarch, method,
+					   val_type);
+    }
+  else if (expect_type != NULL)
+    {
+      struct_return = using_struct_return (exp->gdbarch, NULL,
+					   check_typedef (expect_type));
+    }
 
-    case UNOP_CAST:
-      (*pos) += 2;
-      type = exp->elts[pc + 1].type;
-      return evaluate_subexp_for_cast (exp, pos, noside, type);
-
-    case UNOP_CAST_TYPE:
-      arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (arg1);
-      return evaluate_subexp_for_cast (exp, pos, noside, type);
-
-    case UNOP_DYNAMIC_CAST:
-      arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (arg1);
-      arg1 = evaluate_subexp (type, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      return value_dynamic_cast (type, arg1);
-
-    case UNOP_REINTERPRET_CAST:
-      arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (arg1);
-      arg1 = evaluate_subexp (type, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      return value_reinterpret_cast (type, arg1);
-
-    case UNOP_MEMVAL:
-      (*pos) += 2;
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	return value_zero (exp->elts[pc + 1].type, lval_memory);
-      else
-	return value_at_lazy (exp->elts[pc + 1].type,
-			      value_as_address (arg1));
+  /* Found a function symbol.  Now we will substitute its
+     value in place of the message dispatcher (obj_msgSend),
+     so that we call the method directly instead of thru
+     the dispatcher.  The main reason for doing this is that
+     we can now evaluate the return value and parameter values
+     according to their known data types, in case we need to
+     do things like promotion, dereferencing, special handling
+     of structs and doubles, etc.
 
-    case UNOP_MEMVAL_TYPE:
-      arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (arg1);
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	return value_zero (type, lval_memory);
-      else
-	return value_at_lazy (type, value_as_address (arg1));
+     We want to use the type signature of 'method', but still
+     jump to objc_msgSend() or objc_msgSend_stret() to better
+     mimic the behavior of the runtime.  */
 
-    case UNOP_PREINCREMENT:
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      else if (unop_user_defined_p (op, arg1))
-	{
-	  return value_x_unop (arg1, op, noside);
-	}
+  if (method)
+    {
+      if (value_type (method)->code () != TYPE_CODE_FUNC)
+	error (_("method address has symbol information "
+		 "with non-function type; skipping"));
+
+      /* Create a function pointer of the appropriate type, and
+	 replace its value with the value of msg_send or
+	 msg_send_stret.  We must use a pointer here, as
+	 msg_send and msg_send_stret are of pointer type, and
+	 the representation may be different on systems that use
+	 function descriptors.  */
+      if (struct_return)
+	called_method
+	  = value_from_pointer (lookup_pointer_type (value_type (method)),
+				value_as_address (msg_send_stret));
       else
-	{
-	  if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
-	    arg2 = value_ptradd (arg1, 1);
-	  else
-	    {
-	      struct value *tmp = arg1;
+	called_method
+	  = value_from_pointer (lookup_pointer_type (value_type (method)),
+				value_as_address (msg_send));
+    }
+  else
+    {
+      if (struct_return)
+	called_method = msg_send_stret;
+      else
+	called_method = msg_send;
+    }
 
-	      arg2 = value_one (value_type (arg1));
-	      binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
-	      arg2 = value_binop (tmp, arg2, BINOP_ADD);
-	    }
 
-	  return value_assign (arg1, arg2);
-	}
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      /* If the return type doesn't look like a function type,
+	 call an error.  This can happen if somebody tries to
+	 turn a variable into a function call.  This is here
+	 because people often want to call, eg, strcmp, which
+	 gdb doesn't know is a function.  If gdb isn't asked for
+	 it's opinion (ie. through "whatis"), it won't offer
+	 it.  */
+
+      struct type *callee_type = value_type (called_method);
+
+      if (callee_type && callee_type->code () == TYPE_CODE_PTR)
+	callee_type = TYPE_TARGET_TYPE (callee_type);
+      callee_type = TYPE_TARGET_TYPE (callee_type);
 
-    case UNOP_PREDECREMENT:
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      else if (unop_user_defined_p (op, arg1))
+      if (callee_type)
 	{
-	  return value_x_unop (arg1, op, noside);
+	  if ((callee_type->code () == TYPE_CODE_ERROR) && expect_type)
+	    return allocate_value (expect_type);
+	  else
+	    return allocate_value (callee_type);
 	}
       else
-	{
-	  if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
-	    arg2 = value_ptradd (arg1, -1);
-	  else
-	    {
-	      struct value *tmp = arg1;
-
-	      arg2 = value_one (value_type (arg1));
-	      binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
-	      arg2 = value_binop (tmp, arg2, BINOP_SUB);
-	    }
+	error (_("Expression of type other than "
+		 "\"method returning ...\" used as a method"));
+    }
 
-	  return value_assign (arg1, arg2);
-	}
+  /* Now depending on whether we found a symbol for the method,
+     we will either call the runtime dispatcher or the method
+     directly.  */
 
-    case UNOP_POSTINCREMENT:
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      else if (unop_user_defined_p (op, arg1))
-	{
-	  return value_x_unop (arg1, op, noside);
-	}
-      else
-	{
-	  arg3 = value_non_lval (arg1);
+  args[0] = target;
+  args[1] = value_from_longest (long_type, selector);
 
-	  if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
-	    arg2 = value_ptradd (arg1, 1);
-	  else
-	    {
-	      struct value *tmp = arg1;
+  if (gnu_runtime && (method != NULL))
+    {
+      /* Function objc_msg_lookup returns a pointer.  */
+      struct type *tem_type = value_type (called_method);
+      tem_type = lookup_pointer_type (lookup_function_type (tem_type));
+      deprecated_set_value_type (called_method, tem_type);
+      called_method = call_function_by_hand (called_method, NULL, args);
+    }
 
-	      arg2 = value_one (value_type (arg1));
-	      binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
-	      arg2 = value_binop (tmp, arg2, BINOP_ADD);
-	    }
+  return call_function_by_hand (called_method, NULL, args);
+}
 
-	  value_assign (arg1, arg2);
-	  return arg3;
-	}
+/* Helper function for MULTI_SUBSCRIPT.  */
 
-    case UNOP_POSTDECREMENT:
-      arg1 = evaluate_subexp (expect_type, exp, pos, noside);
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      else if (unop_user_defined_p (op, arg1))
+static struct value *
+eval_multi_subscript (struct type *expect_type, struct expression *exp,
+		      enum noside noside, value *arg1,
+		      gdb::array_view<value *> args)
+{
+  for (value *arg2 : args)
+    {
+      if (binop_user_defined_p (MULTI_SUBSCRIPT, arg1, arg2))
 	{
-	  return value_x_unop (arg1, op, noside);
+	  arg1 = value_x_binop (arg1, arg2, MULTI_SUBSCRIPT, OP_NULL, noside);
 	}
       else
 	{
-	  arg3 = value_non_lval (arg1);
+	  arg1 = coerce_ref (arg1);
+	  struct type *type = check_typedef (value_type (arg1));
 
-	  if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
-	    arg2 = value_ptradd (arg1, -1);
-	  else
+	  switch (type->code ())
 	    {
-	      struct value *tmp = arg1;
+	    case TYPE_CODE_PTR:
+	    case TYPE_CODE_ARRAY:
+	    case TYPE_CODE_STRING:
+	      arg1 = value_subscript (arg1, value_as_long (arg2));
+	      break;
 
-	      arg2 = value_one (value_type (arg1));
-	      binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
-	      arg2 = value_binop (tmp, arg2, BINOP_SUB);
+	    default:
+	      if (type->name ())
+		error (_("cannot subscript something of type `%s'"),
+		       type->name ());
+	      else
+		error (_("cannot subscript requested type"));
 	    }
-
-	  value_assign (arg1, arg2);
-	  return arg3;
 	}
+    }
+  return (arg1);
+}
 
-    case OP_THIS:
-      (*pos) += 1;
-      return value_of_this (exp->language_defn);
-
-    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)
-	return eval_skip_value (exp);
-      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"));
+namespace expr
+{
 
-    case OP_TYPEOF:
-    case OP_DECLTYPE:
-      if (noside == EVAL_SKIP)
-	{
-	  evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
-	  return eval_skip_value (exp);
-	}
-      else if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	{
-	  enum exp_opcode sub_op = exp->elts[*pos].opcode;
-	  struct value *result;
-
-	  result = evaluate_subexp (NULL_TYPE, exp, pos,
-				    EVAL_AVOID_SIDE_EFFECTS);
-
-	  /* 'decltype' has special semantics for lvalues.  */
-	  if (op == OP_DECLTYPE
-	      && (sub_op == BINOP_SUBSCRIPT
-		  || sub_op == STRUCTOP_MEMBER
-		  || sub_op == STRUCTOP_MPTR
-		  || sub_op == UNOP_IND
-		  || sub_op == STRUCTOP_STRUCT
-		  || sub_op == STRUCTOP_PTR
-		  || sub_op == OP_SCOPE))
-	    {
-	      type = value_type (result);
+value *
+objc_msgcall_operation::evaluate (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside)
+{
+  enum noside sub_no_side = EVAL_NORMAL;
+  struct type *selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
 
-	      if (!TYPE_IS_REFERENCE (type))
-		{
-		  type = lookup_lvalue_reference_type (type);
-		  result = allocate_value (type);
-		}
-	    }
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    sub_no_side = EVAL_NORMAL;
+  else
+    sub_no_side = noside;
+  value *target
+    = std::get<1> (m_storage)->evaluate (selector_type, exp, sub_no_side);
 
-	  return result;
-	}
-      else
-        error (_("Attempt to use a type as an expression"));
+  if (value_as_long (target) == 0)
+    sub_no_side = EVAL_AVOID_SIDE_EFFECTS;
+  else
+    sub_no_side = noside;
+  std::vector<operation_up> &args = std::get<2> (m_storage);
+  value **argvec = XALLOCAVEC (struct value *, args.size () + 3);
+  argvec[0] = nullptr;
+  argvec[1] = nullptr;
+  for (int i = 0; i < args.size (); ++i)
+    argvec[i + 2] = args[i]->evaluate_with_coercion (exp, sub_no_side);
+  argvec[args.size () + 2] = nullptr;
+
+  return eval_op_objc_msgcall (expect_type, exp, noside, std::
+			       get<0> (m_storage), target,
+			       gdb::make_array_view (argvec,
+						     args.size () + 3));
+}
 
-    case OP_TYPEID:
-      {
-	struct value *result;
-	enum exp_opcode sub_op = exp->elts[*pos].opcode;
+value *
+multi_subscript_operation::evaluate (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside)
+{
+  value *arg1 = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside);
+  std::vector<operation_up> &values = std::get<1> (m_storage);
+  value **argvec = XALLOCAVEC (struct value *, values.size ());
+  for (int ix = 0; ix < values.size (); ++ix)
+    argvec[ix] = values[ix]->evaluate_with_coercion (exp, noside);
+  return eval_multi_subscript (expect_type, exp, noside, arg1,
+			       gdb::make_array_view (argvec, values.size ()));
+}
 
-	if (sub_op == OP_TYPE || sub_op == OP_DECLTYPE || sub_op == OP_TYPEOF)
-	  result = evaluate_subexp (NULL_TYPE, exp, pos,
-				    EVAL_AVOID_SIDE_EFFECTS);
-	else
-	  result = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+value *
+logical_and_operation::evaluate (struct type *expect_type,
+				 struct expression *exp,
+				 enum noside noside)
+{
+  value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
 
-	if (noside != EVAL_NORMAL)
-	  return allocate_value (cplus_typeid_type (exp->gdbarch));
+  value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp,
+						   EVAL_AVOID_SIDE_EFFECTS);
 
-	return cplus_typeid (result);
-      }
+  if (binop_user_defined_p (BINOP_LOGICAL_AND, arg1, arg2))
+    {
+      arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+      return value_x_binop (arg1, arg2, BINOP_LOGICAL_AND, OP_NULL, noside);
+    }
+  else
+    {
+      int tem = value_logical_not (arg1);
+      if (!tem)
+	{
+	  arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+	  tem = value_logical_not (arg2);
+	}
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, !tem);
+    }
+}
 
-    default:
-      /* Removing this case and compiling with gcc -Wall reveals that
-         a lot of cases are hitting this case.  Some of these should
-         probably be removed from expression.h; others are legitimate
-         expressions which are (apparently) not fully implemented.
+value *
+logical_or_operation::evaluate (struct type *expect_type,
+				struct expression *exp,
+				enum noside noside)
+{
+  value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
 
-         If there are any cases landing here which mean a user error,
-         then they should be separate cases, with more descriptive
-         error messages.  */
+  value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp,
+						   EVAL_AVOID_SIDE_EFFECTS);
 
-      error (_("GDB does not (yet) know how to "
-	       "evaluate that kind of expression"));
+  if (binop_user_defined_p (BINOP_LOGICAL_OR, arg1, arg2))
+    {
+      arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+      return value_x_binop (arg1, arg2, BINOP_LOGICAL_OR, OP_NULL, noside);
     }
+  else
+    {
+      int tem = value_logical_not (arg1);
+      if (tem)
+	{
+	  arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+	  tem = value_logical_not (arg2);
+	}
 
-  gdb_assert_not_reached ("missed return?");
+      struct type *type = language_bool_type (exp->language_defn,
+					      exp->gdbarch);
+      return value_from_longest (type, !tem);
+    }
 }
-
-/* Evaluate a subexpression of EXP, at index *POS,
-   and return the address of that subexpression.
-   Advance *POS over the subexpression.
-   If the subexpression isn't an lvalue, get an error.
-   NOSIDE may be EVAL_AVOID_SIDE_EFFECTS;
-   then only the type of the result need be correct.  */
 
-static struct value *
-evaluate_subexp_for_address (struct expression *exp, int *pos,
-			     enum noside noside)
-{
-  enum exp_opcode op;
-  int pc;
-  struct symbol *var;
-  struct value *x;
-  int tem;
+value *
+adl_func_operation::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  std::vector<operation_up> &arg_ops = std::get<2> (m_storage);
+  std::vector<value *> args (arg_ops.size ());
+  for (int i = 0; i < arg_ops.size (); ++i)
+    args[i] = arg_ops[i]->evaluate_with_coercion (exp, noside);
+
+  struct symbol *symp;
+  find_overload_match (args, std::get<0> (m_storage).c_str (),
+		       NON_METHOD,
+		       nullptr, nullptr,
+		       nullptr, &symp, nullptr, 0, noside);
+  if (SYMBOL_TYPE (symp)->code () == TYPE_CODE_ERROR)
+    error_unknown_type (symp->print_name ());
+  value *callee = evaluate_var_value (noside, std::get<1> (m_storage), symp);
+  return evaluate_subexp_do_call (exp, noside, callee, args,
+				  nullptr, expect_type);
 
-  pc = (*pos);
-  op = exp->elts[pc].opcode;
+}
 
-  switch (op)
+/* This function evaluates brace-initializers (in C/C++) for
+   structure types.  */
+
+struct value *
+array_operation::evaluate_struct_tuple (struct value *struct_val,
+					struct expression *exp,
+					enum noside noside, int nargs)
+{
+  const std::vector<operation_up> &in_args = std::get<2> (m_storage);
+  struct type *struct_type = check_typedef (value_type (struct_val));
+  struct type *field_type;
+  int fieldno = -1;
+
+  int idx = 0;
+  while (--nargs >= 0)
     {
-    case UNOP_IND:
-      (*pos)++;
-      x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+      struct value *val = NULL;
+      int bitpos, bitsize;
+      bfd_byte *addr;
 
-      /* We can't optimize out "&*" if there's a user-defined operator*.  */
-      if (unop_user_defined_p (op, x))
-	{
-	  x = value_x_unop (x, op, noside);
-	  goto default_case_after_eval;
-	}
+      fieldno++;
+      /* Skip static fields.  */
+      while (fieldno < struct_type->num_fields ()
+	     && field_is_static (&struct_type->field (fieldno)))
+	fieldno++;
+      if (fieldno >= struct_type->num_fields ())
+	error (_("too many initializers"));
+      field_type = struct_type->field (fieldno).type ();
+      if (field_type->code () == TYPE_CODE_UNION
+	  && TYPE_FIELD_NAME (struct_type, fieldno)[0] == '0')
+	error (_("don't know which variant you want to set"));
 
-      return coerce_array (x);
+      /* Here, struct_type is the type of the inner struct,
+	 while substruct_type is the type of the inner struct.
+	 These are the same for normal structures, but a variant struct
+	 contains anonymous union fields that contain substruct fields.
+	 The value fieldno is the index of the top-level (normal or
+	 anonymous union) field in struct_field, while the value
+	 subfieldno is the index of the actual real (named inner) field
+	 in substruct_type.  */
 
-    case UNOP_MEMVAL:
-      (*pos) += 3;
-      return value_cast (lookup_pointer_type (exp->elts[pc + 1].type),
-			 evaluate_subexp (NULL_TYPE, exp, pos, noside));
+      field_type = struct_type->field (fieldno).type ();
+      if (val == 0)
+	val = in_args[idx++]->evaluate (field_type, exp, noside);
 
-    case UNOP_MEMVAL_TYPE:
-      {
-	struct type *type;
+      /* Now actually set the field in struct_val.  */
 
-	(*pos) += 1;
-	x = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-	type = value_type (x);
-	return value_cast (lookup_pointer_type (type),
-			   evaluate_subexp (NULL_TYPE, exp, pos, noside));
-      }
+      /* Assign val to field fieldno.  */
+      if (value_type (val) != field_type)
+	val = value_cast (field_type, val);
 
-    case OP_VAR_VALUE:
-      var = exp->elts[pc + 2].symbol;
+      bitsize = TYPE_FIELD_BITSIZE (struct_type, fieldno);
+      bitpos = TYPE_FIELD_BITPOS (struct_type, fieldno);
+      addr = value_contents_writeable (struct_val) + bitpos / 8;
+      if (bitsize)
+	modify_field (struct_type, addr,
+		      value_as_long (val), bitpos % 8, bitsize);
+      else
+	memcpy (addr, value_contents (val),
+		TYPE_LENGTH (value_type (val)));
 
-      /* C++: The "address" of a reference should yield the address
-       * of the object pointed to.  Let value_addr() deal with it.  */
-      if (TYPE_IS_REFERENCE (SYMBOL_TYPE (var)))
-	goto default_case;
+    }
+  return struct_val;
+}
 
-      (*pos) += 4;
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
+value *
+array_operation::evaluate (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside)
+{
+  int tem;
+  int tem2 = std::get<0> (m_storage);
+  int tem3 = std::get<1> (m_storage);
+  const std::vector<operation_up> &in_args = std::get<2> (m_storage);
+  int nargs = tem3 - tem2 + 1;
+  struct type *type = expect_type ? check_typedef (expect_type) : nullptr;
+
+  if (expect_type != nullptr
+      && type->code () == TYPE_CODE_STRUCT)
+    {
+      struct value *rec = allocate_value (expect_type);
+
+      memset (value_contents_raw (rec), '\0', TYPE_LENGTH (type));
+      return evaluate_struct_tuple (rec, exp, noside, nargs);
+    }
+
+  if (expect_type != nullptr
+      && type->code () == TYPE_CODE_ARRAY)
+    {
+      struct type *range_type = type->index_type ();
+      struct type *element_type = TYPE_TARGET_TYPE (type);
+      struct value *array = allocate_value (expect_type);
+      int element_size = TYPE_LENGTH (check_typedef (element_type));
+      LONGEST low_bound, high_bound, index;
+
+      if (!get_discrete_bounds (range_type, &low_bound, &high_bound))
+	{
+	  low_bound = 0;
+	  high_bound = (TYPE_LENGTH (type) / element_size) - 1;
+	}
+      index = low_bound;
+      memset (value_contents_raw (array), 0, TYPE_LENGTH (expect_type));
+      for (tem = nargs; --nargs >= 0;)
+	{
+	  struct value *element;
+
+	  element = in_args[index - low_bound]->evaluate (element_type,
+							  exp, noside);
+	  if (value_type (element) != element_type)
+	    element = value_cast (element_type, element);
+	  if (index > high_bound)
+	    /* To avoid memory corruption.  */
+	    error (_("Too many array elements"));
+	  memcpy (value_contents_raw (array)
+		  + (index - low_bound) * element_size,
+		  value_contents (element),
+		  element_size);
+	  index++;
+	}
+      return array;
+    }
+
+  if (expect_type != nullptr
+      && type->code () == TYPE_CODE_SET)
+    {
+      struct value *set = allocate_value (expect_type);
+      gdb_byte *valaddr = value_contents_raw (set);
+      struct type *element_type = type->index_type ();
+      struct type *check_type = element_type;
+      LONGEST low_bound, high_bound;
+
+      /* Get targettype of elementtype.  */
+      while (check_type->code () == TYPE_CODE_RANGE
+	     || check_type->code () == TYPE_CODE_TYPEDEF)
+	check_type = TYPE_TARGET_TYPE (check_type);
+
+      if (!get_discrete_bounds (element_type, &low_bound, &high_bound))
+	error (_("(power)set type with unknown size"));
+      memset (valaddr, '\0', TYPE_LENGTH (type));
+      int idx = 0;
+      for (tem = 0; tem < nargs; tem++)
 	{
-	  struct type *type =
-	    lookup_pointer_type (SYMBOL_TYPE (var));
-	  enum address_class sym_class = SYMBOL_CLASS (var);
-
-	  if (sym_class == LOC_CONST
-	      || sym_class == LOC_CONST_BYTES
-	      || sym_class == LOC_REGISTER)
-	    error (_("Attempt to take address of register or constant."));
-
-	  return
-	    value_zero (type, not_lval);
+	  LONGEST range_low, range_high;
+	  struct type *range_low_type, *range_high_type;
+	  struct value *elem_val;
+
+	  elem_val = in_args[idx++]->evaluate (element_type, exp, noside);
+	  range_low_type = range_high_type = value_type (elem_val);
+	  range_low = range_high = value_as_long (elem_val);
+
+	  /* Check types of elements to avoid mixture of elements from
+	     different types. Also check if type of element is "compatible"
+	     with element type of powerset.  */
+	  if (range_low_type->code () == TYPE_CODE_RANGE)
+	    range_low_type = TYPE_TARGET_TYPE (range_low_type);
+	  if (range_high_type->code () == TYPE_CODE_RANGE)
+	    range_high_type = TYPE_TARGET_TYPE (range_high_type);
+	  if ((range_low_type->code () != range_high_type->code ())
+	      || (range_low_type->code () == TYPE_CODE_ENUM
+		  && (range_low_type != range_high_type)))
+	    /* different element modes.  */
+	    error (_("POWERSET tuple elements of different mode"));
+	  if ((check_type->code () != range_low_type->code ())
+	      || (check_type->code () == TYPE_CODE_ENUM
+		  && range_low_type != check_type))
+	    error (_("incompatible POWERSET tuple elements"));
+	  if (range_low > range_high)
+	    {
+	      warning (_("empty POWERSET tuple range"));
+	      continue;
+	    }
+	  if (range_low < low_bound || range_high > high_bound)
+	    error (_("POWERSET tuple element out of range"));
+	  range_low -= low_bound;
+	  range_high -= low_bound;
+	  for (; range_low <= range_high; range_low++)
+	    {
+	      int bit_index = (unsigned) range_low % TARGET_CHAR_BIT;
+
+	      if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
+		bit_index = TARGET_CHAR_BIT - 1 - bit_index;
+	      valaddr[(unsigned) range_low / TARGET_CHAR_BIT]
+		|= 1 << bit_index;
+	    }
 	}
-      else
-	return address_of_variable (var, exp->elts[pc + 1].block);
+      return set;
+    }
 
-    case OP_VAR_MSYM_VALUE:
-      {
-	(*pos) += 4;
+  value **argvec = XALLOCAVEC (struct value *, nargs);
+  for (tem = 0; tem < nargs; tem++)
+    {
+      /* Ensure that array expressions are coerced into pointer
+	 objects.  */
+      argvec[tem] = in_args[tem]->evaluate_with_coercion (exp, noside);
+    }
+  return value_array (tem2, tem3, argvec);
+}
 
-	value *val = evaluate_var_msym_value (noside,
-					      exp->elts[pc + 1].objfile,
-					      exp->elts[pc + 2].msymbol);
-	if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	  {
-	    struct type *type = lookup_pointer_type (value_type (val));
-	    return value_zero (type, not_lval);
-	  }
-	else
-	  return value_addr (val);
-      }
+}
 
-    case OP_SCOPE:
-      tem = longest_to_int (exp->elts[pc + 2].longconst);
-      (*pos) += 5 + BYTES_TO_EXP_ELEM (tem + 1);
-      x = value_aggregate_elt (exp->elts[pc + 1].type,
-			       &exp->elts[pc + 3].string,
-			       NULL, 1, noside);
-      if (x == NULL)
-	error (_("There is no field named %s"), &exp->elts[pc + 3].string);
-      return x;
+
+/* Helper for evaluate_subexp_for_address.  */
 
-    default:
-    default_case:
-      x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-    default_case_after_eval:
-      if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	{
-	  struct type *type = check_typedef (value_type (x));
+static value *
+evaluate_subexp_for_address_base (struct expression *exp, enum noside noside,
+				  value *x)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type = check_typedef (value_type (x));
 
-	  if (TYPE_IS_REFERENCE (type))
-	    return value_zero (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
-			       not_lval);
-	  else if (VALUE_LVAL (x) == lval_memory || value_must_coerce_to_target (x))
-	    return value_zero (lookup_pointer_type (value_type (x)),
-			       not_lval);
-	  else
-	    error (_("Attempt to take address of "
-		     "value not located in memory."));
-	}
-      return value_addr (x);
+      if (TYPE_IS_REFERENCE (type))
+	return value_zero (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
+			   not_lval);
+      else if (VALUE_LVAL (x) == lval_memory || value_must_coerce_to_target (x))
+	return value_zero (lookup_pointer_type (value_type (x)),
+			   not_lval);
+      else
+	error (_("Attempt to take address of "
+		 "value not located in memory."));
     }
+  return value_addr (x);
 }
 
-/* Evaluate like `evaluate_subexp' except coercing arrays to pointers.
-   When used in contexts where arrays will be coerced anyway, this is
-   equivalent to `evaluate_subexp' but much faster because it avoids
-   actually fetching array contents (perhaps obsolete now that we have
-   value_lazy()).
+namespace expr
+{
 
-   Note that we currently only do the coercion for C expressions, where
-   arrays are zero based and the coercion is correct.  For other languages,
-   with nonzero based arrays, coercion loses.  Use CAST_IS_CONVERSION
-   to decide if coercion is appropriate.  */
+value *
+operation::evaluate_for_cast (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  value *val = evaluate (expect_type, exp, noside);
+  return value_cast (expect_type, val);
+}
 
-struct value *
-evaluate_subexp_with_coercion (struct expression *exp,
-			       int *pos, enum noside noside)
+value *
+operation::evaluate_for_address (struct expression *exp, enum noside noside)
 {
-  enum exp_opcode op;
-  int pc;
-  struct value *val;
-  struct symbol *var;
-  struct type *type;
+  value *val = evaluate (nullptr, exp, noside);
+  return evaluate_subexp_for_address_base (exp, noside, val);
+}
 
-  pc = (*pos);
-  op = exp->elts[pc].opcode;
+value *
+scope_operation::evaluate_for_address (struct expression *exp,
+				       enum noside noside)
+{
+  value *x = value_aggregate_elt (std::get<0> (m_storage),
+				  std::get<1> (m_storage).c_str (),
+				  NULL, 1, noside);
+  if (x == NULL)
+    error (_("There is no field named %s"), std::get<1> (m_storage).c_str ());
+  return x;
+}
 
-  switch (op)
-    {
-    case OP_VAR_VALUE:
-      var = exp->elts[pc + 2].symbol;
-      type = check_typedef (SYMBOL_TYPE (var));
-      if (TYPE_CODE (type) == TYPE_CODE_ARRAY
-	  && !TYPE_VECTOR (type)
-	  && CAST_IS_CONVERSION (exp->language_defn))
-	{
-	  (*pos) += 4;
-	  val = address_of_variable (var, exp->elts[pc + 1].block);
-	  return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
-			     val);
-	}
-      /* FALLTHROUGH */
+value *
+unop_ind_base_operation::evaluate_for_address (struct expression *exp,
+					       enum noside noside)
+{
+  value *x = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
 
-    default:
-      return evaluate_subexp (NULL_TYPE, exp, pos, noside);
+  /* We can't optimize out "&*" if there's a user-defined operator*.  */
+  if (unop_user_defined_p (UNOP_IND, x))
+    {
+      x = value_x_unop (x, UNOP_IND, noside);
+      return evaluate_subexp_for_address_base (exp, noside, x);
     }
+
+  return coerce_array (x);
 }
 
-/* Evaluate a subexpression of EXP, at index *POS,
-   and return a value for the size of that subexpression.
-   Advance *POS over the subexpression.  If NOSIDE is EVAL_NORMAL
-   we allow side-effects on the operand if its type is a variable
-   length array.   */
+value *
+var_msym_value_operation::evaluate_for_address (struct expression *exp,
+						enum noside noside)
+{
+  const bound_minimal_symbol &b = std::get<0> (m_storage);
+  value *val = evaluate_var_msym_value (noside, b.objfile, b.minsym);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type = lookup_pointer_type (value_type (val));
+      return value_zero (type, not_lval);
+    }
+  else
+    return value_addr (val);
+}
 
-static struct value *
-evaluate_subexp_for_sizeof (struct expression *exp, int *pos,
-			    enum noside noside)
+value *
+unop_memval_operation::evaluate_for_address (struct expression *exp,
+					     enum noside noside)
 {
-  /* FIXME: This should be size_t.  */
-  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
-  enum exp_opcode op;
-  int pc;
-  struct type *type;
-  struct value *val;
+  return value_cast (lookup_pointer_type (std::get<1> (m_storage)),
+		     std::get<0> (m_storage)->evaluate (nullptr, exp, noside));
+}
 
-  pc = (*pos);
-  op = exp->elts[pc].opcode;
+value *
+unop_memval_type_operation::evaluate_for_address (struct expression *exp,
+						  enum noside noside)
+{
+  value *typeval = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						      EVAL_AVOID_SIDE_EFFECTS);
+  struct type *type = value_type (typeval);
+  return value_cast (lookup_pointer_type (type),
+		     std::get<1> (m_storage)->evaluate (nullptr, exp, noside));
+}
 
-  switch (op)
-    {
-      /* This case is handled specially
-         so that we avoid creating a value for the result type.
-         If the result type is very big, it's desirable not to
-         create a value unnecessarily.  */
-    case UNOP_IND:
-      (*pos)++;
-      val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = check_typedef (value_type (val));
-      if (TYPE_CODE (type) != TYPE_CODE_PTR
-	  && !TYPE_IS_REFERENCE (type)
-	  && TYPE_CODE (type) != TYPE_CODE_ARRAY)
-	error (_("Attempt to take contents of a non-pointer value."));
-      type = TYPE_TARGET_TYPE (type);
-      if (is_dynamic_type (type))
-	type = value_type (value_ind (val));
-      return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
-
-    case UNOP_MEMVAL:
-      (*pos) += 3;
-      type = exp->elts[pc + 1].type;
-      break;
-
-    case UNOP_MEMVAL_TYPE:
-      (*pos) += 1;
-      val = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (val);
-      break;
+value *
+var_value_operation::evaluate_for_address (struct expression *exp,
+					   enum noside noside)
+{
+  symbol *var = std::get<0> (m_storage).symbol;
 
-    case OP_VAR_VALUE:
-      type = SYMBOL_TYPE (exp->elts[pc + 2].symbol);
-      if (is_dynamic_type (type))
-	{
-	  val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
-	  type = value_type (val);
-	  if (TYPE_CODE (type) == TYPE_CODE_ARRAY
-              && is_dynamic_type (TYPE_INDEX_TYPE (type))
-              && TYPE_HIGH_BOUND_UNDEFINED (TYPE_INDEX_TYPE (type)))
-	    return allocate_optimized_out_value (size_type);
-	}
-      else
-	(*pos) += 4;
-      break;
+  /* C++: The "address" of a reference should yield the address
+   * of the object pointed to.  Let value_addr() deal with it.  */
+  if (TYPE_IS_REFERENCE (SYMBOL_TYPE (var)))
+    return operation::evaluate_for_address (exp, noside);
 
-    case OP_VAR_MSYM_VALUE:
-      {
-	(*pos) += 4;
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *type = lookup_pointer_type (SYMBOL_TYPE (var));
+      enum address_class sym_class = SYMBOL_CLASS (var);
 
-	minimal_symbol *msymbol = exp->elts[pc + 2].msymbol;
-	value *mval = evaluate_var_msym_value (noside,
-					       exp->elts[pc + 1].objfile,
-					       msymbol);
-
-	type = value_type (mval);
-	if (TYPE_CODE (type) == TYPE_CODE_ERROR)
-	  error_unknown_type (msymbol->print_name ());
+      if (sym_class == LOC_CONST
+	  || sym_class == LOC_CONST_BYTES
+	  || sym_class == LOC_REGISTER)
+	error (_("Attempt to take address of register or constant."));
 
-	return value_from_longest (size_type, TYPE_LENGTH (type));
-      }
-      break;
+      return value_zero (type, not_lval);
+    }
+  else
+    return address_of_variable (var, std::get<0> (m_storage).block);
+}
 
-      /* Deal with the special case if NOSIDE is EVAL_NORMAL and the resulting
-	 type of the subscript is a variable length array type. In this case we
-	 must re-evaluate the right hand side of the subscription to allow
-	 side-effects. */
-    case BINOP_SUBSCRIPT:
-      if (noside == EVAL_NORMAL)
-	{
-	  int npc = (*pos) + 1;
-
-	  val = evaluate_subexp (NULL_TYPE, exp, &npc, EVAL_AVOID_SIDE_EFFECTS);
-	  type = check_typedef (value_type (val));
-	  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
-	    {
-	      type = check_typedef (TYPE_TARGET_TYPE (type));
-	      if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
-		{
-		  type = TYPE_INDEX_TYPE (type);
-		  /* Only re-evaluate the right hand side if the resulting type
-		     is a variable length type.  */
-		  if (TYPE_RANGE_DATA (type)->flag_bound_evaluated)
-		    {
-		      val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
-		      return value_from_longest
-			(size_type, (LONGEST) TYPE_LENGTH (value_type (val)));
-		    }
-		}
-	    }
-	}
+value *
+var_value_operation::evaluate_with_coercion (struct expression *exp,
+					     enum noside noside)
+{
+  struct symbol *var = std::get<0> (m_storage).symbol;
+  struct type *type = check_typedef (SYMBOL_TYPE (var));
+  if (type->code () == TYPE_CODE_ARRAY
+      && !type->is_vector ()
+      && CAST_IS_CONVERSION (exp->language_defn))
+    {
+      struct value *val = address_of_variable (var,
+					       std::get<0> (m_storage).block);
+      return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)), val);
+    }
+  return evaluate (nullptr, exp, noside);
+}
 
-      /* Fall through.  */
+}
 
-    default:
-      val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (val);
-      break;
-    }
+/* Helper function for evaluating the size of a type.  */
 
+static value *
+evaluate_subexp_for_sizeof_base (struct expression *exp, struct type *type)
+{
+  /* FIXME: This should be size_t.  */
+  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
   /* $5.3.3/2 of the C++ Standard (n3290 draft) says of sizeof:
      "When applied to a reference or a reference type, the result is
      the size of the referenced type."  */
@@ -3271,65 +2639,174 @@ evaluate_subexp_for_sizeof (struct expre
   return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
 }
 
-/* Evaluate a subexpression of EXP, at index *POS, and return a value
-   for that subexpression cast to TO_TYPE.  Advance *POS over the
-   subexpression.  */
+namespace expr
+{
+
+value *
+operation::evaluate_for_sizeof (struct expression *exp, enum noside noside)
+{
+  value *val = evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS);
+  return evaluate_subexp_for_sizeof_base (exp, value_type (val));
+}
+
+value *
+var_msym_value_operation::evaluate_for_sizeof (struct expression *exp,
+					       enum noside noside)
 
-static value *
-evaluate_subexp_for_cast (expression *exp, int *pos,
-			  enum noside noside,
-			  struct type *to_type)
 {
-  int pc = *pos;
+  const bound_minimal_symbol &b = std::get<0> (m_storage);
+  value *mval = evaluate_var_msym_value (noside, b.objfile, b.minsym);
 
-  /* Don't let symbols be evaluated with evaluate_subexp because that
-     throws an "unknown type" error for no-debug data symbols.
-     Instead, we want the cast to reinterpret the symbol.  */
-  if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
-      || exp->elts[pc].opcode == OP_VAR_VALUE)
-    {
-      (*pos) += 4;
+  struct type *type = value_type (mval);
+  if (type->code () == TYPE_CODE_ERROR)
+    error_unknown_type (b.minsym->print_name ());
 
-      value *val;
-      if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
-	{
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    return value_zero (to_type, not_lval);
+  /* FIXME: This should be size_t.  */
+  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
+  return value_from_longest (size_type, TYPE_LENGTH (type));
+}
 
-	  val = evaluate_var_msym_value (noside,
-					 exp->elts[pc + 1].objfile,
-					 exp->elts[pc + 2].msymbol);
+value *
+subscript_operation::evaluate_for_sizeof (struct expression *exp,
+					  enum noside noside)
+{
+  if (noside == EVAL_NORMAL)
+    {
+      value *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						      EVAL_AVOID_SIDE_EFFECTS);
+      struct type *type = check_typedef (value_type (val));
+      if (type->code () == TYPE_CODE_ARRAY)
+	{
+	  type = check_typedef (TYPE_TARGET_TYPE (type));
+	  if (type->code () == TYPE_CODE_ARRAY)
+	    {
+	      type = type->index_type ();
+	      /* Only re-evaluate the right hand side if the resulting type
+		 is a variable length type.  */
+	      if (type->bounds ()->flag_bound_evaluated)
+		{
+		  val = evaluate (nullptr, exp, EVAL_NORMAL);
+		  /* FIXME: This should be size_t.  */
+		  struct type *size_type
+		    = builtin_type (exp->gdbarch)->builtin_int;
+		  return value_from_longest
+		    (size_type, (LONGEST) TYPE_LENGTH (value_type (val)));
+		}
+	    }
 	}
-      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);
+  return operation::evaluate_for_sizeof (exp, noside);
+}
 
-      val = value_cast (to_type, val);
+value *
+unop_ind_base_operation::evaluate_for_sizeof (struct expression *exp,
+					      enum noside noside)
+{
+  value *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						  EVAL_AVOID_SIDE_EFFECTS);
+  struct type *type = check_typedef (value_type (val));
+  if (type->code () != TYPE_CODE_PTR
+      && !TYPE_IS_REFERENCE (type)
+      && type->code () != TYPE_CODE_ARRAY)
+    error (_("Attempt to take contents of a non-pointer value."));
+  type = TYPE_TARGET_TYPE (type);
+  if (is_dynamic_type (type))
+    type = value_type (value_ind (val));
+  /* FIXME: This should be size_t.  */
+  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
+  return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
+}
+
+value *
+unop_memval_operation::evaluate_for_sizeof (struct expression *exp,
+					    enum noside noside)
+{
+  return evaluate_subexp_for_sizeof_base (exp, std::get<1> (m_storage));
+}
 
-      /* Don't allow e.g. '&(int)var_with_no_debug_info'.  */
-      if (VALUE_LVAL (val) == lval_memory)
+value *
+unop_memval_type_operation::evaluate_for_sizeof (struct expression *exp,
+						 enum noside noside)
+{
+  value *typeval = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						      EVAL_AVOID_SIDE_EFFECTS);
+  return evaluate_subexp_for_sizeof_base (exp, value_type (typeval));
+}
+
+value *
+var_value_operation::evaluate_for_sizeof (struct expression *exp,
+					  enum noside noside)
+{
+  struct type *type = SYMBOL_TYPE (std::get<0> (m_storage).symbol);
+  if (is_dynamic_type (type))
+    {
+      value *val = evaluate (nullptr, exp, EVAL_NORMAL);
+      type = value_type (val);
+      if (type->code () == TYPE_CODE_ARRAY)
 	{
-	  if (value_lazy (val))
-	    value_fetch_lazy (val);
-	  VALUE_LVAL (val) = not_lval;
+	  /* FIXME: This should be size_t.  */
+	  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
+	  if (type_not_allocated (type) || type_not_associated (type))
+	    return value_zero (size_type, not_lval);
+	  else if (is_dynamic_type (type->index_type ())
+		   && type->bounds ()->high.kind () == PROP_UNDEFINED)
+	    return allocate_optimized_out_value (size_type);
 	}
-      return val;
     }
+  return evaluate_subexp_for_sizeof_base (exp, type);
+}
+
+value *
+var_msym_value_operation::evaluate_for_cast (struct type *to_type,
+					     struct expression *exp,
+					     enum noside noside)
+{
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    return value_zero (to_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 = value_cast (to_type, val);
+
+  /* Don't allow e.g. '&(int)var_with_no_debug_info'.  */
+  if (VALUE_LVAL (val) == lval_memory)
+    {
+      if (value_lazy (val))
+	value_fetch_lazy (val);
+      VALUE_LVAL (val) = not_lval;
+    }
+  return val;
+}
+
+value *
+var_value_operation::evaluate_for_cast (struct type *to_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 = value_cast (to_type, val);
+
+  /* Don't allow e.g. '&(int)var_with_no_debug_info'.  */
+  if (VALUE_LVAL (val) == lval_memory)
+    {
+      if (value_lazy (val))
+	value_fetch_lazy (val);
+      VALUE_LVAL (val) = not_lval;
+    }
+  return val;
+}
 
-  value *val = evaluate_subexp (to_type, exp, pos, noside);
-  if (noside == EVAL_SKIP)
-    return eval_skip_value (exp);
-  return value_cast (to_type, val);
 }
 
 /* Parse a type expression in the string [P..P+LENGTH).  */
 
 struct type *
-parse_and_eval_type (char *p, int length)
+parse_and_eval_type (const char *p, int length)
 {
   char *tmp = (char *) alloca (length + 4);
 
@@ -3339,26 +2816,9 @@ parse_and_eval_type (char *p, int length
   tmp[length + 2] = '0';
   tmp[length + 3] = '\0';
   expression_up expr = parse_expression (tmp);
-  if (expr->elts[0].opcode != UNOP_CAST)
+  expr::unop_cast_operation *op
+    = dynamic_cast<expr::unop_cast_operation *> (expr->op.get ());
+  if (op == nullptr)
     error (_("Internal error in eval_type."));
-  return expr->elts[1].type;
-}
-
-int
-calc_f77_array_dims (struct type *array_type)
-{
-  int ndimen = 1;
-  struct type *tmp_type;
-
-  if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY))
-    error (_("Can't get dimensions for a non-array type"));
-
-  tmp_type = array_type;
-
-  while ((tmp_type = TYPE_TARGET_TYPE (tmp_type)))
-    {
-      if (TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY)
-	++ndimen;
-    }
-  return ndimen;
+  return op->get_type ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-loop.c ./gdb/event-loop.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-loop.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/event-loop.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1280 +0,0 @@
-/* Event loop machinery for GDB, the GNU debugger.
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
-   Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
-
-   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 "event-loop.h"
-#include "event-top.h"
-#include "ser-event.h"
-
-#ifdef HAVE_POLL
-#if defined (HAVE_POLL_H)
-#include <poll.h>
-#elif defined (HAVE_SYS_POLL_H)
-#include <sys/poll.h>
-#endif
-#endif
-
-#include <sys/types.h>
-#include "gdbsupport/gdb_sys_time.h"
-#include "gdb_select.h"
-#include "observable.h"
-#include "top.h"
-
-/* Tell create_file_handler what events we are interested in.
-   This is used by the select version of the event loop.  */
-
-#define GDB_READABLE	(1<<1)
-#define GDB_WRITABLE	(1<<2)
-#define GDB_EXCEPTION	(1<<3)
-
-/* Data point to pass to the event handler.  */
-typedef union event_data
-{
-  void *ptr;
-  int integer;
-} event_data;
-
-typedef struct gdb_event gdb_event;
-typedef void (event_handler_func) (event_data);
-
-/* Event for the GDB event system.  Events are queued by calling
-   async_queue_event and serviced later on by gdb_do_one_event.  An
-   event can be, for instance, a file descriptor becoming ready to be
-   read.  Servicing an event simply means that the procedure PROC will
-   be called.  We have 2 queues, one for file handlers that we listen
-   to in the event loop, and one for the file handlers+events that are
-   ready.  The procedure PROC associated with each event is dependant
-   of the event source.  In the case of monitored file descriptors, it
-   is always the same (handle_file_event).  Its duty is to invoke the
-   handler associated with the file descriptor whose state change
-   generated the event, plus doing other cleanups and such.  In the
-   case of async signal handlers, it is
-   invoke_async_signal_handler.  */
-
-typedef struct gdb_event
-  {
-    /* Procedure to call to service this event.  */
-    event_handler_func *proc;
-
-    /* Data to pass to the event handler.  */
-    event_data data;
-  } *gdb_event_p;
-
-/* Information about each file descriptor we register with the event
-   loop.  */
-
-typedef struct file_handler
-  {
-    int fd;			/* File descriptor.  */
-    int mask;			/* Events we want to monitor: POLLIN, etc.  */
-    int ready_mask;		/* Events that have been seen since
-				   the last time.  */
-    handler_func *proc;		/* Procedure to call when fd is ready.  */
-    gdb_client_data client_data;	/* Argument to pass to proc.  */
-    int error;			/* Was an error detected on this fd?  */
-    struct file_handler *next_file;	/* Next registered file descriptor.  */
-  }
-file_handler;
-
-/* 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.  */
-
-typedef struct async_signal_handler
-  {
-    int ready;			    /* If ready, call this handler
-				       from the main event loop, using
-				       invoke_async_handler.  */
-    struct async_signal_handler *next_handler;	/* Ptr to next handler.  */
-    sig_handler_func *proc;	    /* Function to call to do the work.  */
-    gdb_client_data client_data;    /* Argument to async_handler_func.  */
-  }
-async_signal_handler;
-
-/* 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.  */
-typedef struct async_event_handler
-  {
-    /* If ready, call this handler from the main event loop, using
-       invoke_event_handler.  */
-    int ready;
-
-    /* Point 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;
-  }
-async_event_handler;
-
-/* Gdb_notifier is just a list of file descriptors gdb is interested in.
-   These are the input file descriptor, and the target file
-   descriptor.  We have two flavors of the notifier, one for platforms
-   that have the POLL function, the other for those that don't, and
-   only support SELECT.  Each of the elements in the gdb_notifier list is
-   basically a description of what kind of events gdb is interested
-   in, for each fd.  */
-
-/* As of 1999-04-30 only the input file descriptor is registered with the
-   event loop.  */
-
-/* Do we use poll or select ? */
-#ifdef HAVE_POLL
-#define USE_POLL 1
-#else
-#define USE_POLL 0
-#endif /* HAVE_POLL */
-
-static unsigned char use_poll = USE_POLL;
-
-#ifdef USE_WIN32API
-#include <windows.h>
-#include <io.h>
-#endif
-
-static struct
-  {
-    /* Ptr to head of file handler list.  */
-    file_handler *first_file_handler;
-
-    /* Next file handler to handle, for the select variant.  To level
-       the fairness across event sources, we serve file handlers in a
-       round-robin-like fashion.  The number and order of the polled
-       file handlers may change between invocations, but this is good
-       enough.  */
-    file_handler *next_file_handler;
-
-#ifdef HAVE_POLL
-    /* Ptr to array of pollfd structures.  */
-    struct pollfd *poll_fds;
-
-    /* Next file descriptor to handle, for the poll variant.  To level
-       the fairness across event sources, we poll the file descriptors
-       in a round-robin-like fashion.  The number and order of the
-       polled file descriptors may change between invocations, but
-       this is good enough.  */
-    int next_poll_fds_index;
-
-    /* Timeout in milliseconds for calls to poll().  */
-    int poll_timeout;
-#endif
-
-    /* Masks to be used in the next call to select.
-       Bits are set in response to calls to create_file_handler.  */
-    fd_set check_masks[3];
-
-    /* What file descriptors were found ready by select.  */
-    fd_set ready_masks[3];
-
-    /* Number of file descriptors to monitor (for poll).  */
-    /* Number of valid bits (highest fd value + 1) (for select).  */
-    int num_fds;
-
-    /* Time structure for calls to select().  */
-    struct timeval select_timeout;
-
-    /* Flag to tell whether the timeout should be used.  */
-    int timeout_valid;
-  }
-gdb_notifier;
-
-/* Structure associated with a timer.  PROC will be executed at the
-   first occasion after WHEN.  */
-struct gdb_timer
-  {
-    std::chrono::steady_clock::time_point when;
-    int timer_id;
-    struct gdb_timer *next;
-    timer_handler_func *proc;	    /* Function to call to do the work.  */
-    gdb_client_data client_data;    /* Argument to async_handler_func.  */
-  };
-
-/* List of currently active timers.  It is sorted in order of
-   increasing timers.  */
-static struct
-  {
-    /* Pointer to first in timer list.  */
-    struct gdb_timer *first_timer;
-
-    /* Id of the last timer created.  */
-    int num_timers;
-  }
-timer_list;
-
-/* 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;
-
-static int invoke_async_signal_handlers (void);
-static void create_file_handler (int fd, int mask, handler_func *proc,
-				 gdb_client_data client_data);
-static int check_async_event_handlers (void);
-static int gdb_wait_for_event (int);
-static int update_wait_timeout (void);
-static int poll_timers (void);
-
-
-/* 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);
-}
-
-/* Process one high level event.  If nothing is ready at this time,
-   wait for something to happen (via gdb_wait_for_event), then process
-   it.  Returns >0 if something was done otherwise returns <0 (this
-   can happen if there are no event sources to wait for).  */
-
-int
-gdb_do_one_event (void)
-{
-  static int event_source_head = 0;
-  const int number_of_sources = 3;
-  int current = 0;
-
-  /* First let's see if there are any asynchronous signal handlers
-     that are ready.  These would be the result of invoking any of the
-     signal handlers.  */
-  if (invoke_async_signal_handlers ())
-    return 1;
-
-  /* To level the fairness across event sources, we poll them in a
-     round-robin fashion.  */
-  for (current = 0; current < number_of_sources; current++)
-    {
-      int res;
-
-      switch (event_source_head)
-	{
-	case 0:
-	  /* Are any timers that are ready?  */
-	  res = poll_timers ();
-	  break;
-	case 1:
-	  /* Are there events already waiting to be collected on the
-	     monitored file descriptors?  */
-	  res = gdb_wait_for_event (0);
-	  break;
-	case 2:
-	  /* Are there any asynchronous event handlers ready?  */
-	  res = check_async_event_handlers ();
-	  break;
-	default:
-	  internal_error (__FILE__, __LINE__,
-			  "unexpected event_source_head %d",
-			  event_source_head);
-	}
-
-      event_source_head++;
-      if (event_source_head == number_of_sources)
-	event_source_head = 0;
-
-      if (res > 0)
-	return 1;
-    }
-
-  /* Block waiting for a new event.  If gdb_wait_for_event returns -1,
-     we should get out because this means that there are no event
-     sources left.  This will make the event loop stop, and the
-     application exit.  */
-
-  if (gdb_wait_for_event (1) < 0)
-    return -1;
-
-  /* If gdb_wait_for_event has returned 1, it means that one event has
-     been handled.  We break out of the loop.  */
-  return 1;
-}
-
-/* Start up the event loop.  This is the entry point to the event loop
-   from the command loop.  */
-
-void
-start_event_loop (void)
-{
-  /* Loop until there is nothing to do.  This is the entry point to
-     the event loop engine.  gdb_do_one_event will process one event
-     for each invocation.  It blocks waiting for an event and then
-     processes it.  */
-  while (1)
-    {
-      int result = 0;
-
-      try
-	{
-	  result = gdb_do_one_event ();
-	}
-      catch (const gdb_exception &ex)
-	{
-	  exception_print (gdb_stderr, ex);
-
-	  /* If any exception escaped to here, we better enable
-	     stdin.  Otherwise, any command that calls async_disable_stdin,
-	     and then throws, will leave stdin inoperable.  */
-	  async_enable_stdin ();
-	  /* If we long-jumped out of do_one_event, we probably didn't
-	     get around to resetting the prompt, which leaves readline
-	     in a messed-up state.  Reset it here.  */
-	  current_ui->prompt_state = PROMPT_NEEDED;
-	  gdb::observers::command_error.notify ();
-	  /* This call looks bizarre, but it is required.  If the user
-	     entered a command that caused an error,
-	     after_char_processing_hook won't be called from
-	     rl_callback_read_char_wrapper.  Using a cleanup there
-	     won't work, since we want this function to be called
-	     after a new prompt is printed.  */
-	  if (after_char_processing_hook)
-	    (*after_char_processing_hook) ();
-	  /* Maybe better to set a flag to be checked somewhere as to
-	     whether display the prompt or not.  */
-	}
-
-      if (result < 0)
-	break;
-    }
-
-  /* We are done with the event loop.  There are no more event sources
-     to listen to.  So we exit GDB.  */
-  return;
-}
-
-
-/* Wrapper function for create_file_handler, so that the caller
-   doesn't have to know implementation details about the use of poll
-   vs. select.  */
-void
-add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
-{
-#ifdef HAVE_POLL
-  struct pollfd fds;
-#endif
-
-  if (use_poll)
-    {
-#ifdef HAVE_POLL
-      /* Check to see if poll () is usable.  If not, we'll switch to
-         use select.  This can happen on systems like
-         m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
-         On m68k-motorola-sysv, tty's are not stream-based and not
-         `poll'able.  */
-      fds.fd = fd;
-      fds.events = POLLIN;
-      if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
-	use_poll = 0;
-#else
-      internal_error (__FILE__, __LINE__,
-		      _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-    }
-  if (use_poll)
-    {
-#ifdef HAVE_POLL
-      create_file_handler (fd, POLLIN, proc, client_data);
-#else
-      internal_error (__FILE__, __LINE__,
-		      _("use_poll without HAVE_POLL"));
-#endif
-    }
-  else
-    create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, 
-			 proc, client_data);
-}
-
-/* Add a file handler/descriptor to the list of descriptors we are
-   interested in.
-
-   FD is the file descriptor for the file/stream to be listened to.
-
-   For the poll case, MASK is a combination (OR) of POLLIN,
-   POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM, POLLWRBAND:
-   these are the events we are interested in.  If any of them occurs,
-   proc should be called.
-
-   For the select case, MASK is a combination of READABLE, WRITABLE,
-   EXCEPTION.  PROC is the procedure that will be called when an event
-   occurs for FD.  CLIENT_DATA is the argument to pass to PROC.  */
-
-static void
-create_file_handler (int fd, int mask, handler_func * proc, 
-		     gdb_client_data client_data)
-{
-  file_handler *file_ptr;
-
-  /* Do we already have a file handler for this file?  (We may be
-     changing its associated procedure).  */
-  for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
-       file_ptr = file_ptr->next_file)
-    {
-      if (file_ptr->fd == fd)
-	break;
-    }
-
-  /* It is a new file descriptor.  Add it to the list.  Otherwise, just
-     change the data associated with it.  */
-  if (file_ptr == NULL)
-    {
-      file_ptr = XNEW (file_handler);
-      file_ptr->fd = fd;
-      file_ptr->ready_mask = 0;
-      file_ptr->next_file = gdb_notifier.first_file_handler;
-      gdb_notifier.first_file_handler = file_ptr;
-
-      if (use_poll)
-	{
-#ifdef HAVE_POLL
-	  gdb_notifier.num_fds++;
-	  if (gdb_notifier.poll_fds)
-	    gdb_notifier.poll_fds =
-	      (struct pollfd *) xrealloc (gdb_notifier.poll_fds,
-					  (gdb_notifier.num_fds
-					   * sizeof (struct pollfd)));
-	  else
-	    gdb_notifier.poll_fds =
-	      XNEW (struct pollfd);
-	  (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
-	  (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
-	  (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
-#else
-	  internal_error (__FILE__, __LINE__,
-			  _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-	}
-      else
-	{
-	  if (mask & GDB_READABLE)
-	    FD_SET (fd, &gdb_notifier.check_masks[0]);
-	  else
-	    FD_CLR (fd, &gdb_notifier.check_masks[0]);
-
-	  if (mask & GDB_WRITABLE)
-	    FD_SET (fd, &gdb_notifier.check_masks[1]);
-	  else
-	    FD_CLR (fd, &gdb_notifier.check_masks[1]);
-
-	  if (mask & GDB_EXCEPTION)
-	    FD_SET (fd, &gdb_notifier.check_masks[2]);
-	  else
-	    FD_CLR (fd, &gdb_notifier.check_masks[2]);
-
-	  if (gdb_notifier.num_fds <= fd)
-	    gdb_notifier.num_fds = fd + 1;
-	}
-    }
-
-  file_ptr->proc = proc;
-  file_ptr->client_data = client_data;
-  file_ptr->mask = mask;
-}
-
-/* Return the next file handler to handle, and advance to the next
-   file handler, wrapping around if the end of the list is
-   reached.  */
-
-static file_handler *
-get_next_file_handler_to_handle_and_advance (void)
-{
-  file_handler *curr_next;
-
-  /* The first time around, this is still NULL.  */
-  if (gdb_notifier.next_file_handler == NULL)
-    gdb_notifier.next_file_handler = gdb_notifier.first_file_handler;
-
-  curr_next = gdb_notifier.next_file_handler;
-  gdb_assert (curr_next != NULL);
-
-  /* Advance.  */
-  gdb_notifier.next_file_handler = curr_next->next_file;
-  /* Wrap around, if necessary.  */
-  if (gdb_notifier.next_file_handler == NULL)
-    gdb_notifier.next_file_handler = gdb_notifier.first_file_handler;
-
-  return curr_next;
-}
-
-/* Remove the file descriptor FD from the list of monitored fd's: 
-   i.e. we don't care anymore about events on the FD.  */
-void
-delete_file_handler (int fd)
-{
-  file_handler *file_ptr, *prev_ptr = NULL;
-  int i;
-#ifdef HAVE_POLL
-  int j;
-  struct pollfd *new_poll_fds;
-#endif
-
-  /* Find the entry for the given file.  */
-
-  for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
-       file_ptr = file_ptr->next_file)
-    {
-      if (file_ptr->fd == fd)
-	break;
-    }
-
-  if (file_ptr == NULL)
-    return;
-
-  if (use_poll)
-    {
-#ifdef HAVE_POLL
-      /* Create a new poll_fds array by copying every fd's information
-         but the one we want to get rid of.  */
-
-      new_poll_fds = (struct pollfd *) 
-	xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
-
-      for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
-	{
-	  if ((gdb_notifier.poll_fds + i)->fd != fd)
-	    {
-	      (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
-	      (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
-	      (new_poll_fds + j)->revents
-		= (gdb_notifier.poll_fds + i)->revents;
-	      j++;
-	    }
-	}
-      xfree (gdb_notifier.poll_fds);
-      gdb_notifier.poll_fds = new_poll_fds;
-      gdb_notifier.num_fds--;
-#else
-      internal_error (__FILE__, __LINE__,
-		      _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-    }
-  else
-    {
-      if (file_ptr->mask & GDB_READABLE)
-	FD_CLR (fd, &gdb_notifier.check_masks[0]);
-      if (file_ptr->mask & GDB_WRITABLE)
-	FD_CLR (fd, &gdb_notifier.check_masks[1]);
-      if (file_ptr->mask & GDB_EXCEPTION)
-	FD_CLR (fd, &gdb_notifier.check_masks[2]);
-
-      /* Find current max fd.  */
-
-      if ((fd + 1) == gdb_notifier.num_fds)
-	{
-	  gdb_notifier.num_fds--;
-	  for (i = gdb_notifier.num_fds; i; i--)
-	    {
-	      if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
-		  || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
-		  || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
-		break;
-	    }
-	  gdb_notifier.num_fds = i;
-	}
-    }
-
-  /* Deactivate the file descriptor, by clearing its mask, 
-     so that it will not fire again.  */
-
-  file_ptr->mask = 0;
-
-  /* If this file handler was going to be the next one to be handled,
-     advance to the next's next, if any.  */
-  if (gdb_notifier.next_file_handler == file_ptr)
-    {
-      if (file_ptr->next_file == NULL
-	  && file_ptr == gdb_notifier.first_file_handler)
-	gdb_notifier.next_file_handler = NULL;
-      else
-	get_next_file_handler_to_handle_and_advance ();
-    }
-
-  /* Get rid of the file handler in the file handler list.  */
-  if (file_ptr == gdb_notifier.first_file_handler)
-    gdb_notifier.first_file_handler = file_ptr->next_file;
-  else
-    {
-      for (prev_ptr = gdb_notifier.first_file_handler;
-	   prev_ptr->next_file != file_ptr;
-	   prev_ptr = prev_ptr->next_file)
-	;
-      prev_ptr->next_file = file_ptr->next_file;
-    }
-  xfree (file_ptr);
-}
-
-/* Handle the given event by calling the procedure associated to the
-   corresponding file handler.  */
-
-static void
-handle_file_event (file_handler *file_ptr, int ready_mask)
-{
-  int mask;
-#ifdef HAVE_POLL
-  int error_mask;
-#endif
-
-    {
-	{
-	  /* With poll, the ready_mask could have any of three events
-	     set to 1: POLLHUP, POLLERR, POLLNVAL.  These events
-	     cannot be used in the requested event mask (events), but
-	     they can be returned in the return mask (revents).  We
-	     need to check for those event too, and add them to the
-	     mask which will be passed to the handler.  */
-
-	  /* See if the desired events (mask) match the received
-	     events (ready_mask).  */
-
-	  if (use_poll)
-	    {
-#ifdef HAVE_POLL
-	      /* POLLHUP means EOF, but can be combined with POLLIN to
-		 signal more data to read.  */
-	      error_mask = POLLHUP | POLLERR | POLLNVAL;
-	      mask = ready_mask & (file_ptr->mask | error_mask);
-
-	      if ((mask & (POLLERR | POLLNVAL)) != 0)
-		{
-		  /* Work in progress.  We may need to tell somebody
-		     what kind of error we had.  */
-		  if (mask & POLLERR)
-		    printf_unfiltered (_("Error detected on fd %d\n"),
-				       file_ptr->fd);
-		  if (mask & POLLNVAL)
-		    printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"),
-				       file_ptr->fd);
-		  file_ptr->error = 1;
-		}
-	      else
-		file_ptr->error = 0;
-#else
-	      internal_error (__FILE__, __LINE__,
-			      _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-	    }
-	  else
-	    {
-	      if (ready_mask & GDB_EXCEPTION)
-		{
-		  printf_unfiltered (_("Exception condition detected "
-				       "on fd %d\n"), file_ptr->fd);
-		  file_ptr->error = 1;
-		}
-	      else
-		file_ptr->error = 0;
-	      mask = ready_mask & file_ptr->mask;
-	    }
-
-	  /* If there was a match, then call the handler.  */
-	  if (mask != 0)
-	    (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
-	}
-    }
-}
-
-/* Wait for new events on the monitored file descriptors.  Run the
-   event handler if the first descriptor that is detected by the poll.
-   If BLOCK and if there are no events, this function will block in
-   the call to poll.  Return 1 if an event was handled.  Return -1 if
-   there are no file descriptors to monitor.  Return 1 if an event was
-   handled, otherwise returns 0.  */
-
-static int
-gdb_wait_for_event (int block)
-{
-  file_handler *file_ptr;
-  int num_found = 0;
-
-  /* Make sure all output is done before getting another event.  */
-  ui_file_flush (gdb_stdout);
-  ui_file_flush (gdb_stderr);
-
-  if (gdb_notifier.num_fds == 0)
-    return -1;
-
-  if (block)
-    update_wait_timeout ();
-
-  if (use_poll)
-    {
-#ifdef HAVE_POLL
-      int timeout;
-
-      if (block)
-	timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1;
-      else
-	timeout = 0;
-
-      num_found = poll (gdb_notifier.poll_fds,
-			(unsigned long) gdb_notifier.num_fds, timeout);
-
-      /* Don't print anything if we get out of poll because of a
-	 signal.  */
-      if (num_found == -1 && errno != EINTR)
-	perror_with_name (("poll"));
-#else
-      internal_error (__FILE__, __LINE__,
-		      _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-    }
-  else
-    {
-      struct timeval select_timeout;
-      struct timeval *timeout_p;
-
-      if (block)
-	timeout_p = gdb_notifier.timeout_valid
-	  ? &gdb_notifier.select_timeout : NULL;
-      else
-	{
-	  memset (&select_timeout, 0, sizeof (select_timeout));
-	  timeout_p = &select_timeout;
-	}
-
-      gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
-      gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
-      gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
-      num_found = gdb_select (gdb_notifier.num_fds,
-			      &gdb_notifier.ready_masks[0],
-			      &gdb_notifier.ready_masks[1],
-			      &gdb_notifier.ready_masks[2],
-			      timeout_p);
-
-      /* Clear the masks after an error from select.  */
-      if (num_found == -1)
-	{
-	  FD_ZERO (&gdb_notifier.ready_masks[0]);
-	  FD_ZERO (&gdb_notifier.ready_masks[1]);
-	  FD_ZERO (&gdb_notifier.ready_masks[2]);
-
-	  /* Dont print anything if we got a signal, let gdb handle
-	     it.  */
-	  if (errno != EINTR)
-	    perror_with_name (("select"));
-	}
-    }
-
-  /* Avoid looking at poll_fds[i]->revents if no event fired.  */
-  if (num_found <= 0)
-    return 0;
-
-  /* Run event handlers.  We always run just one handler and go back
-     to polling, in case a handler changes the notifier list.  Since
-     events for sources we haven't consumed yet wake poll/select
-     immediately, no event is lost.  */
-
-  /* To level the fairness across event descriptors, we handle them in
-     a round-robin-like fashion.  The number and order of descriptors
-     may change between invocations, but this is good enough.  */
-  if (use_poll)
-    {
-#ifdef HAVE_POLL
-      int i;
-      int mask;
-
-      while (1)
-	{
-	  if (gdb_notifier.next_poll_fds_index >= gdb_notifier.num_fds)
-	    gdb_notifier.next_poll_fds_index = 0;
-	  i = gdb_notifier.next_poll_fds_index++;
-
-	  gdb_assert (i < gdb_notifier.num_fds);
-	  if ((gdb_notifier.poll_fds + i)->revents)
-	    break;
-	}
-
-      for (file_ptr = gdb_notifier.first_file_handler;
-	   file_ptr != NULL;
-	   file_ptr = file_ptr->next_file)
-	{
-	  if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
-	    break;
-	}
-      gdb_assert (file_ptr != NULL);
-
-      mask = (gdb_notifier.poll_fds + i)->revents;
-      handle_file_event (file_ptr, mask);
-      return 1;
-#else
-      internal_error (__FILE__, __LINE__,
-		      _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-    }
-  else
-    {
-      /* See comment about even source fairness above.  */
-      int mask = 0;
-
-      do
-	{
-	  file_ptr = get_next_file_handler_to_handle_and_advance ();
-
-	  if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
-	    mask |= GDB_READABLE;
-	  if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
-	    mask |= GDB_WRITABLE;
-	  if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
-	    mask |= GDB_EXCEPTION;
-	}
-      while (mask == 0);
-
-      handle_file_event (file_ptr, mask);
-      return 1;
-    }
-  return 0;
-}
-
-
-/* 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)
-{
-  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;
-  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)
-{
-  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)
-{
-  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.  */
-
-static 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;
-      (*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;
-}
-
-/* Create an asynchronous event handler, allocating memory for it.
-   Return a pointer to the newly created handler.  PROC is the
-   function to call with CLIENT_DATA argument whenever the handler is
-   invoked.  */
-async_event_handler *
-create_async_event_handler (async_event_handler_func *proc,
-			    gdb_client_data client_data)
-{
-  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;
-  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)
-{
-  async_handler_ptr->ready = 1;
-}
-
-/* See event-loop.h.  */
-
-void
-clear_async_event_handler (async_event_handler *async_handler_ptr)
-{
-  async_handler_ptr->ready = 0;
-}
-
-/* Check if asynchronous event handlers are ready, and call the
-   handler function for one that is.  */
-
-static int
-check_async_event_handlers (void)
-{
-  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)
-	{
-	  async_handler_ptr->ready = 0;
-	  (*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;
-}
-
-/* Create a timer that will expire in MS milliseconds from now.  When
-   the timer is ready, PROC will be executed.  At creation, the timer
-   is added to the timers queue.  This queue is kept sorted in order
-   of increasing timers.  Return a handle to the timer struct.  */
-
-int
-create_timer (int ms, timer_handler_func *proc,
-	      gdb_client_data client_data)
-{
-  using namespace std::chrono;
-  struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
-
-  steady_clock::time_point time_now = steady_clock::now ();
-
-  timer_ptr = new gdb_timer ();
-  timer_ptr->when = time_now + milliseconds (ms);
-  timer_ptr->proc = proc;
-  timer_ptr->client_data = client_data;
-  timer_list.num_timers++;
-  timer_ptr->timer_id = timer_list.num_timers;
-
-  /* Now add the timer to the timer queue, making sure it is sorted in
-     increasing order of expiration.  */
-
-  for (timer_index = timer_list.first_timer;
-       timer_index != NULL;
-       timer_index = timer_index->next)
-    {
-      if (timer_index->when > timer_ptr->when)
-	break;
-    }
-
-  if (timer_index == timer_list.first_timer)
-    {
-      timer_ptr->next = timer_list.first_timer;
-      timer_list.first_timer = timer_ptr;
-
-    }
-  else
-    {
-      for (prev_timer = timer_list.first_timer;
-	   prev_timer->next != timer_index;
-	   prev_timer = prev_timer->next)
-	;
-
-      prev_timer->next = timer_ptr;
-      timer_ptr->next = timer_index;
-    }
-
-  gdb_notifier.timeout_valid = 0;
-  return timer_ptr->timer_id;
-}
-
-/* There is a chance that the creator of the timer wants to get rid of
-   it before it expires.  */
-void
-delete_timer (int id)
-{
-  struct gdb_timer *timer_ptr, *prev_timer = NULL;
-
-  /* Find the entry for the given timer.  */
-
-  for (timer_ptr = timer_list.first_timer; timer_ptr != NULL;
-       timer_ptr = timer_ptr->next)
-    {
-      if (timer_ptr->timer_id == id)
-	break;
-    }
-
-  if (timer_ptr == NULL)
-    return;
-  /* Get rid of the timer in the timer list.  */
-  if (timer_ptr == timer_list.first_timer)
-    timer_list.first_timer = timer_ptr->next;
-  else
-    {
-      for (prev_timer = timer_list.first_timer;
-	   prev_timer->next != timer_ptr;
-	   prev_timer = prev_timer->next)
-	;
-      prev_timer->next = timer_ptr->next;
-    }
-  delete timer_ptr;
-
-  gdb_notifier.timeout_valid = 0;
-}
-
-/* Convert a std::chrono duration to a struct timeval.  */
-
-template<typename Duration>
-static struct timeval
-duration_cast_timeval (const Duration &d)
-{
-  using namespace std::chrono;
-  seconds sec = duration_cast<seconds> (d);
-  microseconds msec = duration_cast<microseconds> (d - sec);
-
-  struct timeval tv;
-  tv.tv_sec = sec.count ();
-  tv.tv_usec = msec.count ();
-  return tv;
-}
-
-/* Update the timeout for the select() or poll().  Returns true if the
-   timer has already expired, false otherwise.  */
-
-static int
-update_wait_timeout (void)
-{
-  if (timer_list.first_timer != NULL)
-    {
-      using namespace std::chrono;
-      steady_clock::time_point time_now = steady_clock::now ();
-      struct timeval timeout;
-
-      if (timer_list.first_timer->when < time_now)
-	{
-	  /* It expired already.  */
-	  timeout.tv_sec = 0;
-	  timeout.tv_usec = 0;
-	}
-      else
-	{
-	  steady_clock::duration d = timer_list.first_timer->when - time_now;
-	  timeout = duration_cast_timeval (d);
-	}
-
-      /* Update the timeout for select/ poll.  */
-      if (use_poll)
-	{
-#ifdef HAVE_POLL
-	  gdb_notifier.poll_timeout = timeout.tv_sec * 1000;
-#else
-	  internal_error (__FILE__, __LINE__,
-			  _("use_poll without HAVE_POLL"));
-#endif /* HAVE_POLL */
-	}
-      else
-	{
-	  gdb_notifier.select_timeout.tv_sec = timeout.tv_sec;
-	  gdb_notifier.select_timeout.tv_usec = timeout.tv_usec;
-	}
-      gdb_notifier.timeout_valid = 1;
-
-      if (timer_list.first_timer->when < time_now)
-	return 1;
-    }
-  else
-    gdb_notifier.timeout_valid = 0;
-
-  return 0;
-}
-
-/* Check whether a timer in the timers queue is ready.  If a timer is
-   ready, call its handler and return.  Update the timeout for the
-   select() or poll() as well.  Return 1 if an event was handled,
-   otherwise returns 0.*/
-
-static int
-poll_timers (void)
-{
-  if (update_wait_timeout ())
-    {
-      struct gdb_timer *timer_ptr = timer_list.first_timer;
-      timer_handler_func *proc = timer_ptr->proc;
-      gdb_client_data client_data = timer_ptr->client_data;
-
-      /* Get rid of the timer from the beginning of the list.  */
-      timer_list.first_timer = timer_ptr->next;
-
-      /* Delete the timer before calling the callback, not after, in
-	 case the callback itself decides to try deleting the timer
-	 too.  */
-      delete timer_ptr;
-
-      /* Call the procedure associated with that timer.  */
-      (proc) (client_data);
-
-      return 1;
-    }
-
-  return 0;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-loop.h ./gdb/event-loop.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-loop.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/event-loop.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,134 +0,0 @@
-/* Definitions used by the GDB event loop.
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
-   Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
-
-   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 EVENT_LOOP_H
-#define EVENT_LOOP_H
-
-/* An event loop listens for events from multiple event sources.  When
-   an event arrives, it is queued and processed by calling the
-   appropriate event handler.  The event loop then continues to listen
-   for more events.  An event loop completes when there are no event
-   sources to listen on.  External event sources can be plugged into
-   the loop.
-
-   There are 4 main components:
-   - a list of file descriptors to be monitored, GDB_NOTIFIER.
-   - a list of asynchronous event sources to be monitored,
-     ASYNC_EVENT_HANDLER_LIST.
-   - a list of events that have occurred, EVENT_QUEUE.
-   - a list of signal handling functions, SIGHANDLER_LIST.
-
-   GDB_NOTIFIER keeps track of the file descriptor based event
-   sources.  ASYNC_EVENT_HANDLER_LIST keeps track of asynchronous
-   event sources that are signalled by some component of gdb, usually
-   a target_ops instance.  Event sources for gdb are currently the UI
-   and the target.  Gdb communicates with the command line user
-   interface via the readline library and usually communicates with
-   remote targets via a serial port.  Serial ports are represented in
-   GDB as file descriptors and select/poll calls.  For native targets
-   instead, the communication varies across operating system debug
-   APIs, but usually consists of calls to ptrace and waits (via
-   signals) or calls to poll/select (via file descriptors).  In the
-   current gdb, the code handling events related to the target resides
-   in wait_for_inferior for synchronous targets; or, for asynchronous
-   capable targets, by having the target register either a target
-   controlled file descriptor and/or an asynchronous event source in
-   the event loop, with the fetch_inferior_event function as the event
-   callback.  In both the synchronous and asynchronous cases, usually
-   the target event is collected through the target_wait interface.
-   The target is free to install other event sources in the event loop
-   if it so requires.
-
-   EVENT_QUEUE keeps track of the events that have happened during the
-   last iteration of the event loop, and need to be processed.  An
-   event is represented by a procedure to be invoked in order to
-   process the event.  The queue is scanned head to tail.  If the
-   event of interest is a change of state in a file descriptor, then a
-   call to poll or select will be made to detect it.
-
-   If the events generate signals, they are also queued by special
-   functions that are invoked through traditional signal handlers.
-   The actions to be taken is response to such events will be executed
-   when the SIGHANDLER_LIST is scanned, the next time through the
-   infinite loop.
-
-   Corollary tasks are the creation and deletion of event sources.  */
-
-typedef void *gdb_client_data;
-struct async_signal_handler;
-struct async_event_handler;
-typedef void (handler_func) (int, gdb_client_data);
-typedef void (sig_handler_func) (gdb_client_data);
-typedef void (async_event_handler_func) (gdb_client_data);
-typedef void (timer_handler_func) (gdb_client_data);
-
-/* Exported functions from event-loop.c */
-
-extern void start_event_loop (void);
-extern int gdb_do_one_event (void);
-extern void delete_file_handler (int fd);
-extern void add_file_handler (int fd, handler_func *proc, 
-			      gdb_client_data client_data);
-extern struct async_signal_handler *
-  create_async_signal_handler (sig_handler_func *proc, 
-			       gdb_client_data client_data);
-extern void delete_async_signal_handler (struct async_signal_handler **);
-extern int create_timer (int milliseconds, 
-			 timer_handler_func *proc, 
-			 gdb_client_data client_data);
-extern void delete_timer (int id);
-
-/* 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.  */
-extern struct async_event_handler *
-  create_async_event_handler (async_event_handler_func *proc,
-			      gdb_client_data client_data);
-
-/* 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);
-
-/* 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 /* EVENT_LOOP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-top.c ./gdb/event-top.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-top.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/event-top.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Top level stuff for GDB, the GNU debugger.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
 
@@ -25,7 +25,7 @@
 #include "infrun.h"
 #include "target.h"
 #include "terminal.h"
-#include "event-loop.h"
+#include "gdbsupport/event-loop.h"
 #include "event-top.h"
 #include "interps.h"
 #include <signal.h>
@@ -33,14 +33,14 @@
 #include "main.h"
 #include "gdbthread.h"
 #include "observable.h"
-#include "continuations.h"
 #include "gdbcmd.h"		/* for dont_repeat() */
 #include "annotate.h"
 #include "maint.h"
 #include "gdbsupport/buffer.h"
 #include "ser-event.h"
-#include "gdb_select.h"
+#include "gdbsupport/gdb_select.h"
 #include "gdbsupport/gdb-sigmask.h"
+#include "async-event.h"
 
 /* readline include files.  */
 #include "readline/readline.h"
@@ -414,8 +414,8 @@ display_gdb_prompt (const char *new_prom
   else
     {
       /* Don't use a _filtered function here.  It causes the assumed
-         character position to be off, since the newline we read from
-         the user is not accounted for.  */
+	 character position to be off, since the newline we read from
+	 the user is not accounted for.  */
       fprintf_unfiltered (gdb_stdout, "%s", actual_gdb_prompt.c_str ());
       gdb_flush (gdb_stdout);
     }
@@ -523,7 +523,8 @@ stdin_event_handler (int error, gdb_clie
 void
 ui_register_input_event_handler (struct ui *ui)
 {
-  add_file_handler (ui->input_fd, stdin_event_handler, ui);
+  add_file_handler (ui->input_fd, stdin_event_handler, ui,
+		    string_printf ("ui-%d", ui->num), true);
 }
 
 /* See top.h.  */
@@ -674,8 +675,8 @@ handle_line_of_input (struct buffer *cmd
   if (server_command)
     {
       /* Note that we don't call `save_command_line'.  Between this
-         and the check in dont_repeat, this insures that repeating
-         will still do the right thing.  */
+	 and the check in dont_repeat, this insures that repeating
+	 will still do the right thing.  */
       return cmd + strlen (SERVER_COMMAND_PREFIX);
     }
 
@@ -814,7 +815,7 @@ gdb_readline_no_editing_callback (gdb_cl
   while (1)
     {
       /* Read from stdin if we are executing a user defined command.
-         This is the right thing for prompt_for_continue, at least.  */
+	 This is the right thing for prompt_for_continue, at least.  */
       c = fgetc (ui->instream != NULL ? ui->instream : ui->stdin_stream);
 
       if (c == EOF)
@@ -848,9 +849,17 @@ gdb_readline_no_editing_callback (gdb_cl
 }
 
 
-/* See event-top.h.  */
+/* The SIGSEGV handler for this thread, or NULL if there is none.  GDB
+   always installs a global SIGSEGV handler, and then lets threads
+   indicate their interest in handling the signal by setting this
+   thread-local variable.
+
+   This is a static variable instead of extern because on various platforms
+   (notably Cygwin) extern thread_local variables cause link errors.  So
+   instead, we have scoped_segv_handler_restore, which also makes it impossible
+   to accidentally forget to restore it to the original value.  */
 
-thread_local void (*thread_local_segv_handler) (int);
+static thread_local void (*thread_local_segv_handler) (int);
 
 static void handle_sigsegv (int sig);
 
@@ -881,7 +890,7 @@ handle_sigsegv (int sig)
   install_handle_sigsegv ();
 
   if (thread_local_segv_handler == nullptr)
-    abort ();
+    abort ();			/* ARI: abort */
   thread_local_segv_handler (sig);
 }
 
@@ -914,10 +923,10 @@ async_init_signals (void)
 
   signal (SIGINT, handle_sigint);
   sigint_token =
-    create_async_signal_handler (async_request_quit, NULL);
+    create_async_signal_handler (async_request_quit, NULL, "sigint");
   signal (SIGTERM, handle_sigterm);
   async_sigterm_token
-    = create_async_signal_handler (async_sigterm_handler, NULL);
+    = create_async_signal_handler (async_sigterm_handler, NULL, "sigterm");
 
   /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
      to the inferior and breakpoints will be ignored.  */
@@ -936,23 +945,23 @@ async_init_signals (void)
      to SIG_DFL for us.  */
   signal (SIGQUIT, handle_sigquit);
   sigquit_token =
-    create_async_signal_handler (async_do_nothing, NULL);
+    create_async_signal_handler (async_do_nothing, NULL, "sigquit");
 #endif
 #ifdef SIGHUP
   if (signal (SIGHUP, handle_sighup) != SIG_IGN)
     sighup_token =
-      create_async_signal_handler (async_disconnect, NULL);
+      create_async_signal_handler (async_disconnect, NULL, "sighup");
   else
     sighup_token =
-      create_async_signal_handler (async_do_nothing, NULL);
+      create_async_signal_handler (async_do_nothing, NULL, "sighup");
 #endif
   signal (SIGFPE, handle_sigfpe);
   sigfpe_token =
-    create_async_signal_handler (async_float_handler, NULL);
+    create_async_signal_handler (async_float_handler, NULL, "sigfpe");
 
 #ifdef SIGTSTP
   sigtstp_token =
-    create_async_signal_handler (async_sigtstp_handler, NULL);
+    create_async_signal_handler (async_sigtstp_handler, NULL, "sigtstp");
 #endif
 
   install_handle_sigsegv ();
@@ -1137,12 +1146,16 @@ async_disconnect (gdb_client_data arg)
       exception_print (gdb_stderr, exception);
     }
 
-  try
-    {
-      pop_all_targets ();
-    }
-  catch (const gdb_exception &exception)
+  for (inferior *inf : all_inferiors ())
     {
+      switch_to_inferior_no_thread (inf);
+      try
+	{
+	  pop_all_targets ();
+	}
+      catch (const gdb_exception &exception)
+	{
+	}
     }
 
   signal (SIGHUP, SIG_DFL);	/*FIXME: ???????????  */
@@ -1281,3 +1294,64 @@ gdb_disable_readline (void)
     gdb_rl_callback_handler_remove ();
   delete_file_handler (ui->input_fd);
 }
+
+scoped_segv_handler_restore::scoped_segv_handler_restore (segv_handler_t new_handler)
+{
+  m_old_handler = thread_local_segv_handler;
+  thread_local_segv_handler = new_handler;
+}
+
+scoped_segv_handler_restore::~scoped_segv_handler_restore()
+{
+  thread_local_segv_handler = m_old_handler;
+}
+
+static const char debug_event_loop_off[] = "off";
+static const char debug_event_loop_all_except_ui[] = "all-except-ui";
+static const char debug_event_loop_all[] = "all";
+
+static const char *debug_event_loop_enum[] = {
+  debug_event_loop_off,
+  debug_event_loop_all_except_ui,
+  debug_event_loop_all,
+  nullptr
+};
+
+static const char *debug_event_loop_value = debug_event_loop_off;
+
+static void
+set_debug_event_loop_command (const char *args, int from_tty,
+			      cmd_list_element *c)
+{
+  if (debug_event_loop_value == debug_event_loop_off)
+    debug_event_loop = debug_event_loop_kind::OFF;
+  else if (debug_event_loop_value == debug_event_loop_all_except_ui)
+    debug_event_loop = debug_event_loop_kind::ALL_EXCEPT_UI;
+  else if (debug_event_loop_value == debug_event_loop_all)
+    debug_event_loop = debug_event_loop_kind::ALL;
+  else
+    gdb_assert_not_reached ("Invalid debug event look kind value.");
+}
+
+static void
+show_debug_event_loop_command (struct ui_file *file, int from_tty,
+			       struct cmd_list_element *cmd, const char *value)
+{
+  fprintf_filtered (file, _("Event loop debugging is %s.\n"), value);
+}
+
+void _initialize_event_top ();
+void
+_initialize_event_top ()
+{
+  add_setshow_enum_cmd ("event-loop", class_maintenance,
+			debug_event_loop_enum,
+			&debug_event_loop_value,
+			_("Set event-loop debugging."),
+			_("Show event-loop debugging."),
+			_("\
+Control whether to show event loop-related debug messages."),
+			set_debug_event_loop_command,
+			show_debug_event_loop_command,
+			&setdebuglist, &showdebuglist);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-top.h ./gdb/event-top.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/event-top.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/event-top.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions used by event-top.c, for GDB, the GNU debugger.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
 
@@ -70,10 +70,19 @@ extern void gdb_rl_callback_handler_inst
    currently installed.  */
 extern void gdb_rl_callback_handler_reinstall (void);
 
-/* The SIGSEGV handler for this thread, or NULL if there is none.  GDB
-   always installs a global SIGSEGV handler, and then lets threads
-   indicate their interest in handling the signal by setting this
-   thread-local variable.  */
-extern thread_local void (*thread_local_segv_handler) (int);
+typedef void (*segv_handler_t) (int);
+
+/* On construction, replaces the current thread's SIGSEGV handler with
+   the provided one.  On destruction, restores the handler to the
+   original one.  */
+class scoped_segv_handler_restore
+{
+ public:
+  scoped_segv_handler_restore (segv_handler_t new_handler);
+  ~scoped_segv_handler_restore ();
+
+ private:
+  segv_handler_t m_old_handler;
+};
 
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exceptions.c ./gdb/exceptions.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exceptions.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/exceptions.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Exception (throw catch) mechanism, for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -39,11 +39,7 @@ print_flush (void)
     deprecated_error_begin_hook ();
 
   gdb::optional<target_terminal::scoped_restore_terminal_state> term_state;
-  /* While normally there's always something pushed on the target
-     stack, the NULL check is needed here because we can get here very
-     early during startup, before the target stack is first
-     initialized.  */
-  if (current_top_target () != NULL && target_supports_terminal_ours ())
+  if (target_supports_terminal_ours ())
     {
       term_state.emplace ();
       target_terminal::ours_for_output ();
@@ -89,7 +85,7 @@ print_exception (struct ui_file *file, c
       else
 	{
 	  end++;
-	  ui_file_write (file, start, end - start);
+	  file->write (start, end - start);
 	}
     }					    
   fprintf_filtered (file, "\n");
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exceptions.h ./gdb/exceptions.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exceptions.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/exceptions.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Exception (throw catch) mechanism, for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exec.c ./gdb/exec.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exec.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/exec.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Work with executable files, for GDB. 
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -33,9 +33,11 @@
 #include "arch-utils.h"
 #include "gdbthread.h"
 #include "progspace.h"
+#include "progspace-and-thread.h"
 #include "gdb_bfd.h"
 #include "gcore.h"
 #include "source.h"
+#include "build-id.h"
 
 #include <fcntl.h>
 #include "readline/tilde.h"
@@ -46,6 +48,7 @@
 #include "solist.h"
 #include <algorithm>
 #include "gdbsupport/pathstuff.h"
+#include "cli/cli-style.h"
 
 void (*deprecated_file_changed_hook) (const char *);
 
@@ -72,16 +75,59 @@ struct exec_target final : public target
 					const gdb_byte *writebuf,
 					ULONGEST offset, ULONGEST len,
 					ULONGEST *xfered_len) override;
-  struct target_section_table *get_section_table () override;
   void files_info () override;
 
   bool has_memory () override;
-  char *make_corefile_notes (bfd *, int *) override;
+  gdb::unique_xmalloc_ptr<char> make_corefile_notes (bfd *, int *) override;
   int find_memory_regions (find_memory_region_ftype func, void *data) override;
 };
 
 static exec_target exec_ops;
 
+/* How to handle a mismatch between the current exec file and the exec
+   file determined from target.  */
+
+static const char *const exec_file_mismatch_names[]
+  = {"ask", "warn", "off", NULL };
+enum exec_file_mismatch_mode
+  {
+    exec_file_mismatch_ask, exec_file_mismatch_warn, exec_file_mismatch_off
+  };
+static const char *exec_file_mismatch = exec_file_mismatch_names[0];
+static enum exec_file_mismatch_mode exec_file_mismatch_mode
+  = exec_file_mismatch_ask;
+
+/* Show command.  */
+static void
+show_exec_file_mismatch_command (struct ui_file *file, int from_tty,
+				 struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (gdb_stdout,
+		    _("exec-file-mismatch handling is currently \"%s\".\n"),
+		    exec_file_mismatch_names[exec_file_mismatch_mode]);
+}
+
+/* Set command.  Change the setting for range checking.  */
+static void
+set_exec_file_mismatch_command (const char *ignore,
+				int from_tty, struct cmd_list_element *c)
+{
+  for (enum exec_file_mismatch_mode mode = exec_file_mismatch_ask;
+       ;
+       mode = static_cast<enum exec_file_mismatch_mode>(1 + (int) mode))
+    {
+      if (strcmp (exec_file_mismatch, exec_file_mismatch_names[mode]) == 0)
+	{
+	  exec_file_mismatch_mode = mode;
+	  return;
+	}
+      if (mode == exec_file_mismatch_off)
+	internal_error (__FILE__, __LINE__,
+			_("Unrecognized exec-file-mismatch setting: \"%s\""),
+			exec_file_mismatch);
+    }
+}
+
 /* Whether to open exec and core files read-only or read-write.  */
 
 bool write_files = false;
@@ -101,44 +147,16 @@ exec_target_open (const char *args, int
   exec_file_attach (args, from_tty);
 }
 
-/* Close and clear exec_bfd.  If we end up with no target sections to
-   read memory from, this unpushes the exec_ops target.  */
-
-void
-exec_close (void)
-{
-  if (exec_bfd)
-    {
-      bfd *abfd = exec_bfd;
-
-      gdb_bfd_unref (abfd);
-
-      /* Removing target sections may close the exec_ops target.
-	 Clear exec_bfd before doing so to prevent recursion.  */
-      exec_bfd = NULL;
-      exec_bfd_mtime = 0;
-
-      remove_target_sections (&exec_bfd);
-
-      xfree (exec_filename);
-      exec_filename = NULL;
-    }
-}
-
 /* This is the target_close implementation.  Clears all target
    sections and closes all executable bfds from all program spaces.  */
 
 void
 exec_target::close ()
 {
-  struct program_space *ss;
-  scoped_restore_current_program_space restore_pspace;
-
-  ALL_PSPACES (ss)
+  for (struct program_space *ss : program_spaces)
     {
-      set_current_program_space (ss);
-      clear_section_table (current_target_sections);
-      exec_close ();
+      ss->clear_target_sections ();
+      ss->exec_close ();
     }
 }
 
@@ -192,6 +210,107 @@ try_open_exec_file (const char *exec_fil
 /* See gdbcore.h.  */
 
 void
+validate_exec_file (int from_tty)
+{
+  /* If user asked to ignore the mismatch, do nothing.  */
+  if (exec_file_mismatch_mode == exec_file_mismatch_off)
+    return;
+
+  const char *current_exec_file = get_exec_file (0);
+  struct inferior *inf = current_inferior ();
+  /* Try to determine a filename from the process itself.  */
+  const char *pid_exec_file = target_pid_to_exec_file (inf->pid);
+  bool build_id_mismatch = false;
+
+  /* If we cannot validate the exec file, return.  */
+  if (current_exec_file == NULL || pid_exec_file == NULL)
+    return;
+
+  /* Try validating via build-id, if available.  This is the most
+     reliable check.  */
+
+  /* In case current_exec_file was changed, reopen_exec_file ensures
+     an up to date build_id (will do nothing if the file timestamp
+     did not change).  If exec file changed, reopen_exec_file has
+     allocated another file name, so get_exec_file again.  */
+  reopen_exec_file ();
+  current_exec_file = get_exec_file (0);
+
+  const bfd_build_id *exec_file_build_id
+    = build_id_bfd_get (current_program_space->exec_bfd ());
+  if (exec_file_build_id != nullptr)
+    {
+      /* Prepend the target prefix, to force gdb_bfd_open to open the
+	 file on the remote file system (if indeed remote).  */
+      std::string target_pid_exec_file
+	= std::string (TARGET_SYSROOT_PREFIX) + pid_exec_file;
+
+      gdb_bfd_ref_ptr abfd (gdb_bfd_open (target_pid_exec_file.c_str (),
+					  gnutarget, -1, false));
+      if (abfd != nullptr)
+	{
+	  const bfd_build_id *target_exec_file_build_id
+	    = build_id_bfd_get (abfd.get ());
+
+	  if (target_exec_file_build_id != nullptr)
+	    {
+	      if (exec_file_build_id->size == target_exec_file_build_id->size
+		  && memcmp (exec_file_build_id->data,
+			     target_exec_file_build_id->data,
+			     exec_file_build_id->size) == 0)
+		{
+		  /* Match.  */
+		  return;
+		}
+	      else
+		build_id_mismatch = true;
+	    }
+	}
+    }
+
+  if (build_id_mismatch)
+    {
+      std::string exec_file_target (pid_exec_file);
+
+      /* In case the exec file is not local, exec_file_target has to point at
+	 the target file system.  */
+      if (is_target_filename (current_exec_file) && !target_filesystem_is_local ())
+	exec_file_target = TARGET_SYSROOT_PREFIX + exec_file_target;
+
+      warning
+	(_("Build ID mismatch between current exec-file %ps\n"
+	   "and automatically determined exec-file %ps\n"
+	   "exec-file-mismatch handling is currently \"%s\""),
+	 styled_string (file_name_style.style (), current_exec_file),
+	 styled_string (file_name_style.style (), exec_file_target.c_str ()),
+	 exec_file_mismatch_names[exec_file_mismatch_mode]);
+      if (exec_file_mismatch_mode == exec_file_mismatch_ask)
+	{
+	  symfile_add_flags add_flags = SYMFILE_MAINLINE;
+	  if (from_tty)
+	    {
+	      add_flags |= SYMFILE_VERBOSE;
+	      add_flags |= SYMFILE_ALWAYS_CONFIRM;
+	    }
+	  try
+	    {
+	      symbol_file_add_main (exec_file_target.c_str (), add_flags);
+	      exec_file_attach (exec_file_target.c_str (), from_tty);
+	    }
+	  catch (gdb_exception_error &err)
+	    {
+	      warning (_("loading %ps %s"),
+		       styled_string (file_name_style.style (),
+				      exec_file_target.c_str ()),
+		       err.message != NULL ? err.what () : "error");
+	    }
+	}
+    }
+}
+
+/* See gdbcore.h.  */
+
+void
 exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty)
 {
   char *exec_file_target;
@@ -245,20 +364,21 @@ exec_file_locate_attach (int pid, int de
 void
 exec_file_attach (const char *filename, int from_tty)
 {
-  /* First, acquire a reference to the current exec_bfd.  We release
+  /* First, acquire a reference to the exec_bfd.  We release
      this at the end of the function; but acquiring it now lets the
      BFD cache return it if this call refers to the same file.  */
-  gdb_bfd_ref_ptr exec_bfd_holder = gdb_bfd_ref_ptr::new_reference (exec_bfd);
+  gdb_bfd_ref_ptr exec_bfd_holder
+    = gdb_bfd_ref_ptr::new_reference (current_program_space->exec_bfd ());
 
   /* Remove any previous exec file.  */
-  exec_close ();
+  current_program_space->exec_close ();
 
   /* Now open and digest the file the user requested, if any.  */
 
   if (!filename)
     {
       if (from_tty)
-        printf_unfiltered (_("No executable file now.\n"));
+	printf_unfiltered (_("No executable file now.\n"));
 
       set_gdbarch_from_file (NULL);
     }
@@ -267,7 +387,6 @@ exec_file_attach (const char *filename,
       int load_via_target = 0;
       const char *scratch_pathname, *canonical_pathname;
       int scratch_chan;
-      struct target_section *sections = NULL, *sections_end = NULL;
       char **matching;
 
       if (is_target_filename (filename))
@@ -300,6 +419,7 @@ exec_file_attach (const char *filename,
 #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
 	  if (scratch_chan < 0)
 	    {
+	      int first_errno = errno;
 	      char *exename = (char *) alloca (strlen (filename) + 5);
 
 	      strcat (strcpy (exename, filename), ".exe");
@@ -308,6 +428,8 @@ exec_file_attach (const char *filename,
 				    O_RDWR | O_BINARY
 				    : O_RDONLY | O_BINARY,
 				    &scratch_storage);
+	      if (scratch_chan < 0)
+		errno = first_errno;
 	    }
 #endif
 	  if (scratch_chan < 0)
@@ -327,9 +449,9 @@ exec_file_attach (const char *filename,
 			      FOPEN_RUB, scratch_chan);
       else
 	temp = gdb_bfd_open (canonical_pathname, gnutarget, scratch_chan);
-      exec_bfd = temp.release ();
+      current_program_space->set_exec_bfd (std::move (temp));
 
-      if (!exec_bfd)
+      if (!current_program_space->exec_bfd ())
 	{
 	  error (_("\"%s\": could not open as an executable file: %s."),
 		 scratch_pathname, bfd_errmsg (bfd_get_error ()));
@@ -337,42 +459,40 @@ exec_file_attach (const char *filename,
 
       /* gdb_realpath_keepfile resolves symlinks on the local
 	 filesystem and so cannot be used for "target:" files.  */
-      gdb_assert (exec_filename == NULL);
+      gdb_assert (current_program_space->exec_filename == nullptr);
       if (load_via_target)
-	exec_filename = xstrdup (bfd_get_filename (exec_bfd));
+	current_program_space->exec_filename
+	  = (make_unique_xstrdup
+	     (bfd_get_filename (current_program_space->exec_bfd ())));
       else
-	exec_filename = gdb_realpath_keepfile (scratch_pathname).release ();
+	current_program_space->exec_filename
+	  = gdb_realpath_keepfile (scratch_pathname);
 
-      if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
+      if (!bfd_check_format_matches (current_program_space->exec_bfd (),
+				     bfd_object, &matching))
 	{
 	  /* Make sure to close exec_bfd, or else "run" might try to use
 	     it.  */
-	  exec_close ();
-	  error (_("\"%s\": not in executable format: %s"),
-		 scratch_pathname,
+	  current_program_space->exec_close ();
+	  error (_("\"%s\": not in executable format: %s"), scratch_pathname,
 		 gdb_bfd_errmsg (bfd_get_error (), matching).c_str ());
 	}
 
-      if (build_section_table (exec_bfd, &sections, &sections_end))
-	{
-	  /* Make sure to close exec_bfd, or else "run" might try to use
-	     it.  */
-	  exec_close ();
-	  error (_("\"%s\": can't find the file sections: %s"),
-		 scratch_pathname, bfd_errmsg (bfd_get_error ()));
-	}
+	  target_section_table sections
+	  = build_section_table (current_program_space->exec_bfd ());
 
-      exec_bfd_mtime = bfd_get_mtime (exec_bfd);
+      current_program_space->ebfd_mtime
+	= bfd_get_mtime (current_program_space->exec_bfd ());
 
       validate_files ();
 
-      set_gdbarch_from_file (exec_bfd);
+      set_gdbarch_from_file (current_program_space->exec_bfd ());
 
       /* Add the executable's sections to the current address spaces'
 	 list of sections.  This possibly pushes the exec_ops
 	 target.  */
-      add_target_sections (&exec_bfd, sections, sections_end);
-      xfree (sections);
+      current_program_space->add_target_sections (&current_program_space->ebfd,
+						  sections);
 
       /* Tell display code (if any) about the changed file name.  */
       if (deprecated_exec_file_display_hook)
@@ -394,7 +514,7 @@ exec_file_attach (const char *filename,
 static void
 exec_file_command (const char *args, int from_tty)
 {
-  if (from_tty && target_has_execution
+  if (from_tty && target_has_execution ()
       && !query (_("A program is being debugged already.\n"
 		   "Are you sure you want to change the file? ")))
     error (_("File not changed."));
@@ -402,16 +522,16 @@ exec_file_command (const char *args, int
   if (args)
     {
       /* Scan through the args and pick up the first non option arg
-         as the filename.  */
+	 as the filename.  */
 
       gdb_argv built_argv (args);
       char **argv = built_argv.get ();
 
       for (; (*argv != NULL) && (**argv == '-'); argv++)
-        {;
-        }
+	{;
+	}
       if (*argv == NULL)
-        error (_("No executable file name was specified"));
+	error (_("No executable file name was specified"));
 
       gdb::unique_xmalloc_ptr<char> filename (tilde_expand (*argv));
       exec_file_attach (filename.get (), from_tty);
@@ -436,166 +556,86 @@ file_command (const char *arg, int from_
 }
 
 
-/* Locate all mappable sections of a BFD file.
-   table_pp_char is a char * to get it through bfd_map_over_sections;
-   we cast it back to its proper type.  */
+/* Builds a section table, given args BFD, TABLE.  */
 
-static void
-add_to_section_table (bfd *abfd, struct bfd_section *asect,
-		      void *table_pp_char)
+target_section_table
+build_section_table (struct bfd *some_bfd)
 {
-  struct target_section **table_pp = (struct target_section **) table_pp_char;
-  flagword aflag;
-
-  gdb_assert (abfd == asect->owner);
-
-  /* Check the section flags, but do not discard zero-length sections, since
-     some symbols may still be attached to this section.  For instance, we
-     encountered on sparc-solaris 2.10 a shared library with an empty .bss
-     section to which a symbol named "_end" was attached.  The address
-     of this symbol still needs to be relocated.  */
-  aflag = bfd_section_flags (asect);
-  if (!(aflag & SEC_ALLOC))
-    return;
-
-  (*table_pp)->owner = NULL;
-  (*table_pp)->the_bfd_section = asect;
-  (*table_pp)->addr = bfd_section_vma (asect);
-  (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (asect);
-  (*table_pp)++;
-}
-
-/* See exec.h.  */
-
-void
-clear_section_table (struct target_section_table *table)
-{
-  xfree (table->sections);
-  table->sections = table->sections_end = NULL;
-}
-
-/* Resize section table TABLE by ADJUSTMENT.
-   ADJUSTMENT may be negative, in which case the caller must have already
-   removed the sections being deleted.
-   Returns the old size.  */
-
-static int
-resize_section_table (struct target_section_table *table, int adjustment)
-{
-  int old_count;
-  int new_count;
-
-  old_count = table->sections_end - table->sections;
-
-  new_count = adjustment + old_count;
+  target_section_table table;
 
-  if (new_count)
+  for (asection *asect : gdb_bfd_sections (some_bfd))
     {
-      table->sections = XRESIZEVEC (struct target_section, table->sections,
-				    new_count);
-      table->sections_end = table->sections + new_count;
-    }
-  else
-    clear_section_table (table);
+      flagword aflag;
 
-  return old_count;
-}
-
-/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
-   Returns 0 if OK, 1 on error.  */
+      /* Check the section flags, but do not discard zero-length
+	 sections, since some symbols may still be attached to this
+	 section.  For instance, we encountered on sparc-solaris 2.10
+	 a shared library with an empty .bss section to which a symbol
+	 named "_end" was attached.  The address of this symbol still
+	 needs to be relocated.  */
+      aflag = bfd_section_flags (asect);
+      if (!(aflag & SEC_ALLOC))
+	continue;
 
-int
-build_section_table (struct bfd *some_bfd, struct target_section **start,
-		     struct target_section **end)
-{
-  unsigned count;
+      table.emplace_back (bfd_section_vma (asect),
+			  bfd_section_vma (asect) + bfd_section_size (asect),
+			  asect);
+    }
 
-  count = bfd_count_sections (some_bfd);
-  if (*start)
-    xfree (* start);
-  *start = XNEWVEC (struct target_section, count);
-  *end = *start;
-  bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
-  if (*end > *start + count)
-    internal_error (__FILE__, __LINE__,
-		    _("failed internal consistency check"));
-  /* We could realloc the table, but it probably loses for most files.  */
-  return 0;
+  return table;
 }
 
 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
    current set of target sections.  */
 
 void
-add_target_sections (void *owner,
-		     struct target_section *sections,
-		     struct target_section *sections_end)
+program_space::add_target_sections (void *owner,
+				    const target_section_table &sections)
 {
-  int count;
-  struct target_section_table *table = current_target_sections;
-
-  count = sections_end - sections;
-
-  if (count > 0)
+  if (!sections.empty ())
     {
-      int space = resize_section_table (table, count);
-      int i;
-
-      for (i = 0; i < count; ++i)
+      for (const target_section &s : sections)
 	{
-	  table->sections[space + i] = sections[i];
-	  table->sections[space + i].owner = owner;
+	  m_target_sections.push_back (s);
+	  m_target_sections.back ().owner = owner;
 	}
 
+      scoped_restore_current_pspace_and_thread restore_pspace_thread;
+
       /* If these are the first file sections we can provide memory
-	 from, push the file_stratum target.  */
-      if (!target_is_pushed (&exec_ops))
-	push_target (&exec_ops);
+	 from, push the file_stratum target.  Must do this in all
+	 inferiors sharing the program space.  */
+      for (inferior *inf : all_inferiors ())
+	{
+	  if (inf->pspace != this)
+	    continue;
+
+	  if (inf->target_is_pushed (&exec_ops))
+	    continue;
+
+	  switch_to_inferior_no_thread (inf);
+	  inf->push_target (&exec_ops);
+	}
     }
 }
 
 /* Add the sections of OBJFILE to the current set of target sections.  */
 
 void
-add_target_sections_of_objfile (struct objfile *objfile)
+program_space::add_target_sections (struct objfile *objfile)
 {
-  struct target_section_table *table = current_target_sections;
   struct obj_section *osect;
-  int space;
-  unsigned count = 0;
-  struct target_section *ts;
 
-  if (objfile == NULL)
-    return;
+  gdb_assert (objfile != nullptr);
 
   /* Compute the number of sections to add.  */
   ALL_OBJFILE_OSECTIONS (objfile, osect)
     {
       if (bfd_section_size (osect->the_bfd_section) == 0)
 	continue;
-      count++;
-    }
-
-  if (count == 0)
-    return;
 
-  space = resize_section_table (table, count);
-
-  ts = table->sections + space;
-
-  ALL_OBJFILE_OSECTIONS (objfile, osect)
-    {
-      if (bfd_section_size (osect->the_bfd_section) == 0)
-	continue;
-
-      gdb_assert (ts < table->sections + space + count);
-
-      ts->addr = obj_section_addr (osect);
-      ts->endaddr = obj_section_endaddr (osect);
-      ts->the_bfd_section = osect->the_bfd_section;
-      ts->owner = (void *) objfile;
-
-      ts++;
+      m_target_sections.emplace_back (osect->addr (), osect->endaddr (),
+				      osect->the_bfd_section, (void *) objfile);
     }
 }
 
@@ -603,46 +643,45 @@ add_target_sections_of_objfile (struct o
    OWNER must be the same value passed to add_target_sections.  */
 
 void
-remove_target_sections (void *owner)
+program_space::remove_target_sections (void *owner)
 {
-  struct target_section *src, *dest;
-  struct target_section_table *table = current_target_sections;
-
   gdb_assert (owner != NULL);
 
-  dest = table->sections;
-  for (src = table->sections; src < table->sections_end; src++)
-    if (src->owner != owner)
-      {
-	/* Keep this section.  */
-	if (dest < src)
-	  *dest = *src;
-	dest++;
-      }
-
-  /* If we've dropped any sections, resize the section table.  */
-  if (dest < src)
-    {
-      int old_count;
-
-      old_count = resize_section_table (table, dest - src);
-
-      /* If we don't have any more sections to read memory from,
-	 remove the file_stratum target from the stack.  */
-      if (old_count + (dest - src) == 0)
-	{
-	  struct program_space *pspace;
+  auto it = std::remove_if (m_target_sections.begin (),
+			    m_target_sections.end (),
+			    [&] (target_section &sect)
+			    {
+			      return sect.owner == owner;
+			    });
+  m_target_sections.erase (it, m_target_sections.end ());
+
+  /* If we don't have any more sections to read memory from,
+     remove the file_stratum target from the stack of each
+     inferior sharing the program space.  */
+  if (m_target_sections.empty ())
+    {
+      scoped_restore_current_pspace_and_thread restore_pspace_thread;
 
-	  ALL_PSPACES (pspace)
-	    if (pspace->target_sections.sections
-		!= pspace->target_sections.sections_end)
-	      return;
+      for (inferior *inf : all_inferiors ())
+	{
+	  if (inf->pspace != this)
+	    continue;
 
-	  unpush_target (&exec_ops);
+	  switch_to_inferior_no_thread (inf);
+	  inf->unpush_target (&exec_ops);
 	}
     }
 }
 
+/* See exec.h.  */
+
+void
+exec_on_vfork ()
+{
+  if (!current_program_space->target_sections ().empty ())
+    current_inferior ()->push_target (&exec_ops);
+}
+
 
 
 enum target_xfer_status
@@ -652,13 +691,13 @@ exec_read_partial_read_only (gdb_byte *r
   /* It's unduly pedantic to refuse to look at the executable for
      read-only pieces; so do the equivalent of readonly regions aka
      QTro packet.  */
-  if (exec_bfd != NULL)
+  if (current_program_space->exec_bfd () != NULL)
     {
       asection *s;
       bfd_size_type size;
       bfd_vma vma;
 
-      for (s = exec_bfd->sections; s; s = s->next)
+      for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
 	{
 	  if ((s->flags & SEC_LOAD) == 0
 	      || (s->flags & SEC_READONLY) == 0)
@@ -674,7 +713,7 @@ exec_read_partial_read_only (gdb_byte *r
 	      if (amt > len)
 		amt = len;
 
-	      amt = bfd_get_section_contents (exec_bfd, s,
+	      amt = bfd_get_section_contents (current_program_space->exec_bfd (), s,
 					      readbuf, offset - vma, amt);
 
 	      if (amt == 0)
@@ -698,26 +737,25 @@ exec_read_partial_read_only (gdb_byte *r
 
 static std::vector<mem_range>
 section_table_available_memory (CORE_ADDR memaddr, ULONGEST len,
-				struct target_section *sections,
-				struct target_section *sections_end)
+				const target_section_table &sections)
 {
   std::vector<mem_range> memory;
 
-  for (target_section *p = sections; p < sections_end; p++)
+  for (const target_section &p : sections)
     {
-      if ((bfd_section_flags (p->the_bfd_section) & SEC_READONLY) == 0)
+      if ((bfd_section_flags (p.the_bfd_section) & SEC_READONLY) == 0)
 	continue;
 
       /* Copy the meta-data, adjusted.  */
-      if (mem_ranges_overlap (p->addr, p->endaddr - p->addr, memaddr, len))
+      if (mem_ranges_overlap (p.addr, p.endaddr - p.addr, memaddr, len))
 	{
 	  ULONGEST lo1, hi1, lo2, hi2;
 
 	  lo1 = memaddr;
 	  hi1 = memaddr + len;
 
-	  lo2 = p->addr;
-	  hi2 = p->endaddr;
+	  lo2 = p.addr;
+	  hi2 = p.endaddr;
 
 	  CORE_ADDR start = std::max (lo1, lo2);
 	  int length = std::min (hi1, hi2) - start;
@@ -733,10 +771,10 @@ enum target_xfer_status
 section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
 				     ULONGEST len, ULONGEST *xfered_len)
 {
-  target_section_table *table = target_get_section_table (&exec_ops);
+  const target_section_table *table
+    = target_get_section_table (current_inferior ()->top_target ());
   std::vector<mem_range> available_memory
-    = section_table_available_memory (offset, len,
-				      table->sections, table->sections_end);
+    = section_table_available_memory (offset, len, *table);
 
   normalize_mem_ranges (&available_memory);
 
@@ -773,38 +811,35 @@ enum target_xfer_status
 section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
 				   ULONGEST offset, ULONGEST len,
 				   ULONGEST *xfered_len,
-				   struct target_section *sections,
-				   struct target_section *sections_end,
-				   const char *section_name)
+				   const target_section_table &sections,
+				   gdb::function_view<bool
+				     (const struct target_section *)> match_cb)
 {
   int res;
-  struct target_section *p;
   ULONGEST memaddr = offset;
   ULONGEST memend = memaddr + len;
 
-  if (len == 0)
-    internal_error (__FILE__, __LINE__,
-		    _("failed internal consistency check"));
+  gdb_assert (len != 0);
 
-  for (p = sections; p < sections_end; p++)
+  for (const target_section &p : sections)
     {
-      struct bfd_section *asect = p->the_bfd_section;
+      struct bfd_section *asect = p.the_bfd_section;
       bfd *abfd = asect->owner;
 
-      if (section_name && strcmp (section_name, asect->name) != 0)
+      if (match_cb != nullptr && !match_cb (&p))
 	continue;		/* not the section we need.  */
-      if (memaddr >= p->addr)
-        {
-	  if (memend <= p->endaddr)
+      if (memaddr >= p.addr)
+	{
+	  if (memend <= p.endaddr)
 	    {
 	      /* Entire transfer is within this section.  */
 	      if (writebuf)
 		res = bfd_set_section_contents (abfd, asect,
-						writebuf, memaddr - p->addr,
+						writebuf, memaddr - p.addr,
 						len);
 	      else
 		res = bfd_get_section_contents (abfd, asect,
-						readbuf, memaddr - p->addr,
+						readbuf, memaddr - p.addr,
 						len);
 
 	      if (res != 0)
@@ -815,7 +850,7 @@ section_table_xfer_memory_partial (gdb_b
 	      else
 		return TARGET_XFER_EOF;
 	    }
-	  else if (memaddr >= p->endaddr)
+	  else if (memaddr >= p.endaddr)
 	    {
 	      /* This section ends before the transfer starts.  */
 	      continue;
@@ -823,14 +858,14 @@ section_table_xfer_memory_partial (gdb_b
 	  else
 	    {
 	      /* This section overlaps the transfer.  Just do half.  */
-	      len = p->endaddr - memaddr;
+	      len = p.endaddr - memaddr;
 	      if (writebuf)
 		res = bfd_set_section_contents (abfd, asect,
-						writebuf, memaddr - p->addr,
+						writebuf, memaddr - p.addr,
 						len);
 	      else
 		res = bfd_get_section_contents (abfd, asect,
-						readbuf, memaddr - p->addr,
+						readbuf, memaddr - p.addr,
 						len);
 	      if (res != 0)
 		{
@@ -840,58 +875,52 @@ section_table_xfer_memory_partial (gdb_b
 	      else
 		return TARGET_XFER_EOF;
 	    }
-        }
+	}
     }
 
   return TARGET_XFER_EOF;		/* We can't help.  */
 }
 
-struct target_section_table *
-exec_target::get_section_table ()
-{
-  return current_target_sections;
-}
-
 enum target_xfer_status
 exec_target::xfer_partial (enum target_object object,
 			   const char *annex, gdb_byte *readbuf,
 			   const gdb_byte *writebuf,
 			   ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
 {
-  struct target_section_table *table = get_section_table ();
+  const target_section_table *table = target_get_section_table (this);
 
   if (object == TARGET_OBJECT_MEMORY)
     return section_table_xfer_memory_partial (readbuf, writebuf,
 					      offset, len, xfered_len,
-					      table->sections,
-					      table->sections_end,
-					      NULL);
+					      *table);
   else
     return TARGET_XFER_E_IO;
 }
 
 
 void
-print_section_info (struct target_section_table *t, bfd *abfd)
+print_section_info (const target_section_table *t, bfd *abfd)
 {
   struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
-  struct target_section *p;
   /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64.  */
   int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
 
-  printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
+  printf_filtered ("\t`%ps', ",
+		   styled_string (file_name_style.style (),
+				  bfd_get_filename (abfd)));
   wrap_here ("        ");
   printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
-  if (abfd == exec_bfd)
+  if (abfd == current_program_space->exec_bfd ())
     {
       /* gcc-3.4 does not like the initialization in
 	 <p == t->sections_end>.  */
       bfd_vma displacement = 0;
       bfd_vma entry_point;
+      bool found = false;
 
-      for (p = t->sections; p < t->sections_end; p++)
+      for (const target_section &p : *t)
 	{
-	  struct bfd_section *psect = p->the_bfd_section;
+	  struct bfd_section *psect = p.the_bfd_section;
 
 	  if ((bfd_section_flags (psect) & (SEC_ALLOC | SEC_LOAD))
 	      != (SEC_ALLOC | SEC_LOAD))
@@ -901,13 +930,15 @@ print_section_info (struct target_sectio
 	      && abfd->start_address < (bfd_section_vma (psect)
 					+ bfd_section_size (psect)))
 	    {
-	      displacement = p->addr - bfd_section_vma (psect);
+	      displacement = p.addr - bfd_section_vma (psect);
+	      found = true;
 	      break;
 	    }
 	}
-      if (p == t->sections_end)
-	warning (_("Cannot find section for the entry point of %s."),
-		 bfd_get_filename (abfd));
+      if (!found)
+	warning (_("Cannot find section for the entry point of %ps."),
+		 styled_string (file_name_style.style (),
+				bfd_get_filename (abfd)));
 
       entry_point = gdbarch_addr_bits_remove (gdbarch, 
 					      bfd_get_start_address (abfd) 
@@ -915,13 +946,13 @@ print_section_info (struct target_sectio
       printf_filtered (_("\tEntry point: %s\n"),
 		       paddress (gdbarch, entry_point));
     }
-  for (p = t->sections; p < t->sections_end; p++)
+  for (const target_section &p : *t)
     {
-      struct bfd_section *psect = p->the_bfd_section;
+      struct bfd_section *psect = p.the_bfd_section;
       bfd *pbfd = psect->owner;
 
-      printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
-      printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
+      printf_filtered ("\t%s", hex_string_custom (p.addr, wid));
+      printf_filtered (" - %s", hex_string_custom (p.endaddr, wid));
 
       /* FIXME: A format of "08l" is not wide enough for file offsets
 	 larger than 4GB.  OTOH, making it "016l" isn't desirable either
@@ -934,7 +965,9 @@ print_section_info (struct target_sectio
 			 hex_string_custom (psect->filepos, 8));
       printf_filtered (" is %s", bfd_section_name (psect));
       if (pbfd != abfd)
-	printf_filtered (" in %s", bfd_get_filename (pbfd));
+	printf_filtered (" in %ps",
+			 styled_string (file_name_style.style (),
+					bfd_get_filename (pbfd)));
       printf_filtered ("\n");
     }
 }
@@ -942,8 +975,9 @@ print_section_info (struct target_sectio
 void
 exec_target::files_info ()
 {
-  if (exec_bfd)
-    print_section_info (current_target_sections, exec_bfd);
+  if (current_program_space->exec_bfd ())
+    print_section_info (&current_program_space->target_sections (),
+			current_program_space->exec_bfd ());
   else
     puts_filtered (_("\t<no file loaded>\n"));
 }
@@ -951,43 +985,34 @@ exec_target::files_info ()
 static void
 set_section_command (const char *args, int from_tty)
 {
-  struct target_section *p;
   const char *secname;
-  unsigned seclen;
-  unsigned long secaddr;
-  char secprint[100];
-  long offset;
-  struct target_section_table *table;
 
   if (args == 0)
     error (_("Must specify section name and its virtual address"));
 
   /* Parse out section name.  */
   for (secname = args; !isspace (*args); args++);
-  seclen = args - secname;
+  unsigned seclen = args - secname;
 
   /* Parse out new virtual address.  */
-  secaddr = parse_and_eval_address (args);
+  CORE_ADDR secaddr = parse_and_eval_address (args);
 
-  table = current_target_sections;
-  for (p = table->sections; p < table->sections_end; p++)
+  for (target_section &p : current_program_space->target_sections ())
     {
-      if (!strncmp (secname, bfd_section_name (p->the_bfd_section), seclen)
-	  && bfd_section_name (p->the_bfd_section)[seclen] == '\0')
+      if (!strncmp (secname, bfd_section_name (p.the_bfd_section), seclen)
+	  && bfd_section_name (p.the_bfd_section)[seclen] == '\0')
 	{
-	  offset = secaddr - p->addr;
-	  p->addr += offset;
-	  p->endaddr += offset;
+	  long offset = secaddr - p.addr;
+	  p.addr += offset;
+	  p.endaddr += offset;
 	  if (from_tty)
 	    exec_ops.files_info ();
 	  return;
 	}
     }
-  if (seclen >= sizeof (secprint))
-    seclen = sizeof (secprint) - 1;
-  strncpy (secprint, secname, seclen);
-  secprint[seclen] = '\0';
-  error (_("Section %s not found"), secprint);
+
+  std::string secprint (secname, seclen);
+  error (_("Section %s not found"), secprint.c_str ());
 }
 
 /* If we can find a section in FILENAME with BFD index INDEX, adjust
@@ -996,17 +1021,14 @@ set_section_command (const char *args, i
 void
 exec_set_section_address (const char *filename, int index, CORE_ADDR address)
 {
-  struct target_section *p;
-  struct target_section_table *table;
-
-  table = current_target_sections;
-  for (p = table->sections; p < table->sections_end; p++)
+  for (target_section &p : current_program_space->target_sections ())
     {
-      if (filename_cmp (filename, p->the_bfd_section->owner->filename) == 0
-	  && index == p->the_bfd_section->index)
+      if (filename_cmp (filename,
+			bfd_get_filename (p.the_bfd_section->owner)) == 0
+	  && index == p.the_bfd_section->index)
 	{
-	  p->endaddr += address - p->addr;
-	  p->addr = address;
+	  p.endaddr += address - p.addr;
+	  p.addr = address;
 	}
     }
 }
@@ -1016,11 +1038,10 @@ exec_target::has_memory ()
 {
   /* We can provide memory if we have any file/target sections to read
      from.  */
-  return (current_target_sections->sections
-	  != current_target_sections->sections_end);
+  return !current_program_space->target_sections ().empty ();
 }
 
-char *
+gdb::unique_xmalloc_ptr<char>
 exec_target::make_corefile_notes (bfd *obfd, int *note_size)
 {
   error (_("Can't create a corefile"));
@@ -1032,8 +1053,9 @@ exec_target::find_memory_regions (find_m
   return objfile_find_memory_regions (this, func, data);
 }
 
+void _initialize_exec ();
 void
-_initialize_exec (void)
+_initialize_exec ()
 {
   struct cmd_list_element *c;
 
@@ -1070,5 +1092,27 @@ Show writing into executable and core fi
 			   show_write_files,
 			   &setlist, &showlist);
 
+  add_setshow_enum_cmd ("exec-file-mismatch", class_support,
+			exec_file_mismatch_names,
+			&exec_file_mismatch,
+			_("\
+Set exec-file-mismatch handling (ask|warn|off)."),
+			_("\
+Show exec-file-mismatch handling (ask|warn|off)."),
+			_("\
+Specifies how to handle a mismatch between the current exec-file\n\
+loaded by GDB and the exec-file automatically determined when attaching\n\
+to a process:\n\n\
+ ask  - warn the user and ask whether to load the determined exec-file.\n\
+ warn - warn the user, but do not change the exec-file.\n\
+ off  - do not check for mismatch.\n\
+\n\
+GDB detects a mismatch by comparing the build IDs of the files.\n\
+If the user confirms loading the determined exec-file, then its symbols\n\
+will be loaded as well."),
+			set_exec_file_mismatch_command,
+			show_exec_file_mismatch_command,
+			&setlist, &showlist);
+
   add_target (exec_target_info, exec_target_open, filename_completer);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exec.h ./gdb/exec.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/exec.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/exec.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Work with executable files, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,19 +30,16 @@ struct target_ops;
 struct bfd;
 struct objfile;
 
-#define exec_bfd current_program_space->ebfd
-#define exec_bfd_mtime current_program_space->ebfd_mtime
-#define exec_filename current_program_space->pspace_exec_filename
+/* Builds a section table, given args BFD.  */
 
-/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
-   Returns 0 if OK, 1 on error.  */
+extern target_section_table build_section_table (struct bfd *);
 
-extern int build_section_table (struct bfd *, struct target_section **,
-				struct target_section **);
+/* The current inferior is a child vforked and its program space is
+   shared with its parent.  This pushes the exec target on the
+   current/child inferior's target stack if there are sections in the
+   program space's section table.  */
 
-/* Remove all entries from TABLE.  */
-
-extern void clear_section_table (struct target_section_table *table);
+extern void exec_on_vfork ();
 
 /* Read from mappable read-only sections of BFD executable files.
    Return TARGET_XFER_OK, if read is successful.  Return
@@ -58,8 +55,13 @@ extern enum target_xfer_status
    Request to transfer up to LEN 8-bit bytes of the target sections
    defined by SECTIONS and SECTIONS_END.  The OFFSET specifies the
    starting address.
-   If SECTION_NAME is not NULL, only access sections with that same
-   name.
+
+   The MATCH_CB predicate is optional; when provided it will be called
+   for each section under consideration.  When MATCH_CB evaluates as
+   true, the section remains under consideration; a false result
+   removes it from consideration for performing the memory transfers
+   noted above.  See memory_xfer_partial_1() in target.c for an
+   example.
 
    Return the number of bytes actually transfered, or zero when no
    data is available for the requested range.
@@ -74,9 +76,10 @@ extern enum target_xfer_status
   section_table_xfer_memory_partial (gdb_byte *,
 				     const gdb_byte *,
 				     ULONGEST, ULONGEST, ULONGEST *,
-				     struct target_section *,
-				     struct target_section *,
-				     const char *);
+				     const target_section_table &,
+				     gdb::function_view<bool
+				       (const struct target_section *)> match_cb
+					 = nullptr);
 
 /* Read from mappable read-only sections of BFD executable files.
    Similar to exec_read_partial_read_only, but return
@@ -89,31 +92,13 @@ extern enum target_xfer_status
 /* Set the loaded address of a section.  */
 extern void exec_set_section_address (const char *, int, CORE_ADDR);
 
-/* Remove all target sections owned by OWNER.  */
-
-extern void remove_target_sections (void *owner);
-
-/* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
-   current set of target sections.  */
-
-extern void add_target_sections (void *owner,
-				 struct target_section *sections,
-				 struct target_section *sections_end);
-
-/* Add the sections of OBJFILE to the current set of target sections.
- * OBJFILE owns the new target sections.  */
-
-extern void add_target_sections_of_objfile (struct objfile *objfile);
-
 /* Prints info about all sections defined in the TABLE.  ABFD is
    special cased --- it's filename is omitted; if it is the executable
    file, its entry point is printed.  */
 
-extern void print_section_info (struct target_section_table *table,
+extern void print_section_info (const target_section_table *table,
 				bfd *abfd);
 
-extern void exec_close (void);
-
 /* Helper function that attempts to open the symbol file at EXEC_FILE_HOST.
    If successful, it proceeds to add the symbol file as the main symbol file.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/expop.h ./gdb/expop.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/expop.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/expop.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,2188 @@
+/* Definitions for expressions in GDB
+
+   Copyright (C) 2020 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 EXPOP_H
+#define EXPOP_H
+
+#include "block.h"
+#include "c-lang.h"
+#include "cp-abi.h"
+#include "expression.h"
+#include "objfiles.h"
+#include "gdbsupport/traits.h"
+#include "gdbsupport/enum-flags.h"
+
+struct agent_expr;
+struct axs_value;
+
+extern 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);
+extern 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);
+extern void gen_expr_unop (struct expression *exp,
+			   enum exp_opcode op,
+			   expr::operation *lhs,
+			   struct agent_expr *ax, struct axs_value *value);
+
+extern struct value *eval_op_scope (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside,
+				    struct type *type, const char *string);
+extern struct value *eval_op_var_msym_value (struct type *expect_type,
+					     struct expression *exp,
+					     enum noside noside,
+					     bool outermost_p,
+					     bound_minimal_symbol msymbol);
+extern struct value *eval_op_var_entry_value (struct type *expect_type,
+					      struct expression *exp,
+					      enum noside noside, symbol *sym);
+extern struct value *eval_op_func_static_var (struct type *expect_type,
+					      struct expression *exp,
+					      enum noside noside,
+					      value *func, const char *var);
+extern struct value *eval_op_register (struct type *expect_type,
+				       struct expression *exp,
+				       enum noside noside, const char *name);
+extern struct value *eval_op_string (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside, int len,
+				     const char *string);
+extern struct value *eval_op_ternop (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     struct value *array, struct value *low,
+				     struct value *upper);
+extern struct value *eval_op_structop_struct (struct type *expect_type,
+					      struct expression *exp,
+					      enum noside noside,
+					      struct value *arg1,
+					      const char *string);
+extern struct value *eval_op_structop_ptr (struct type *expect_type,
+					   struct expression *exp,
+					   enum noside noside,
+					   struct value *arg1,
+					   const char *string);
+extern struct value *eval_op_member (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     struct value *arg1, struct value *arg2);
+extern struct value *eval_op_concat (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     struct value *arg1, struct value *arg2);
+extern struct value *eval_op_add (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside,
+				  struct value *arg1, struct value *arg2);
+extern struct value *eval_op_sub (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside,
+				  struct value *arg1, struct value *arg2);
+extern struct value *eval_op_binary (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside, enum exp_opcode op,
+				     struct value *arg1, struct value *arg2);
+extern struct value *eval_op_subscript (struct type *expect_type,
+					struct expression *exp,
+					enum noside noside, enum exp_opcode op,
+					struct value *arg1,
+					struct value *arg2);
+extern struct value *eval_op_equal (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside, enum exp_opcode op,
+				    struct value *arg1,
+				    struct value *arg2);
+extern struct value *eval_op_notequal (struct type *expect_type,
+				       struct expression *exp,
+				       enum noside noside, enum exp_opcode op,
+				       struct value *arg1,
+				       struct value *arg2);
+extern struct value *eval_op_less (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, enum exp_opcode op,
+				   struct value *arg1,
+				   struct value *arg2);
+extern struct value *eval_op_gtr (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside, enum exp_opcode op,
+				  struct value *arg1,
+				  struct value *arg2);
+extern struct value *eval_op_geq (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside, enum exp_opcode op,
+				  struct value *arg1,
+				  struct value *arg2);
+extern struct value *eval_op_leq (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside, enum exp_opcode op,
+				  struct value *arg1,
+				  struct value *arg2);
+extern struct value *eval_op_repeat (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside, enum exp_opcode op,
+				     struct value *arg1,
+				     struct value *arg2);
+extern struct value *eval_op_plus (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, enum exp_opcode op,
+				   struct value *arg1);
+extern struct value *eval_op_neg (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside, enum exp_opcode op,
+				  struct value *arg1);
+extern struct value *eval_op_complement (struct type *expect_type,
+					 struct expression *exp,
+					 enum noside noside,
+					 enum exp_opcode op,
+					 struct value *arg1);
+extern struct value *eval_op_lognot (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode op,
+				     struct value *arg1);
+extern struct value *eval_op_preinc (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode op,
+				     struct value *arg1);
+extern struct value *eval_op_predec (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode op,
+				     struct value *arg1);
+extern struct value *eval_op_postinc (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside,
+				      enum exp_opcode op,
+				      struct value *arg1);
+extern struct value *eval_op_postdec (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside,
+				      enum exp_opcode op,
+				      struct value *arg1);
+extern struct value *eval_op_ind (struct type *expect_type,
+				  struct expression *exp,
+				  enum noside noside,
+				  struct value *arg1);
+extern struct value *eval_op_type (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, struct type *type);
+extern struct value *eval_op_alignof (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside,
+				      struct value *arg1);
+extern struct value *eval_op_memval (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     struct value *arg1, struct type *type);
+extern struct value *eval_binop_assign_modify (struct type *expect_type,
+					       struct expression *exp,
+					       enum noside noside,
+					       enum exp_opcode op,
+					       struct value *arg1,
+					       struct value *arg2);
+
+namespace expr
+{
+
+class ada_component;
+
+/* The check_objfile overloads are used to check whether a particular
+   component of some operation references an objfile.  The passed-in
+   objfile will never be a debug objfile.  */
+
+/* See if EXP_OBJFILE matches OBJFILE.  */
+static inline bool
+check_objfile (struct objfile *exp_objfile, struct objfile *objfile)
+{
+  if (exp_objfile->separate_debug_objfile_backlink)
+    exp_objfile = exp_objfile->separate_debug_objfile_backlink;
+  return exp_objfile == objfile;
+}
+
+static inline bool
+check_objfile (struct type *type, struct objfile *objfile)
+{
+  struct objfile *ty_objfile = type->objfile_owner ();
+  if (ty_objfile != nullptr)
+    return check_objfile (ty_objfile, objfile);
+  return false;
+}
+
+static inline bool
+check_objfile (struct symbol *sym, struct objfile *objfile)
+{
+  return check_objfile (symbol_objfile (sym), objfile);
+}
+
+static inline bool
+check_objfile (const struct block *block, struct objfile *objfile)
+{
+  return check_objfile (block_objfile (block), objfile);
+}
+
+static inline bool
+check_objfile (const block_symbol &sym, struct objfile *objfile)
+{
+  return (check_objfile (sym.symbol, objfile)
+	  || check_objfile (sym.block, objfile));
+}
+
+static inline bool
+check_objfile (bound_minimal_symbol minsym, struct objfile *objfile)
+{
+  return check_objfile (minsym.objfile, objfile);
+}
+
+static inline bool
+check_objfile (internalvar *ivar, struct objfile *objfile)
+{
+  return false;
+}
+
+static inline bool
+check_objfile (const std::string &str, struct objfile *objfile)
+{
+  return false;
+}
+
+static inline bool
+check_objfile (const operation_up &op, struct objfile *objfile)
+{
+  return op->uses_objfile (objfile);
+}
+
+static inline bool
+check_objfile (enum exp_opcode val, struct objfile *objfile)
+{
+  return false;
+}
+
+static inline bool
+check_objfile (ULONGEST val, struct objfile *objfile)
+{
+  return false;
+}
+
+template<typename T>
+static inline bool
+check_objfile (enum_flags<T> val, struct objfile *objfile)
+{
+  return false;
+}
+
+template<typename T>
+static inline bool
+check_objfile (const std::vector<T> &collection, struct objfile *objfile)
+{
+  for (const auto &item : collection)
+    {
+      if (check_objfile (item, objfile))
+	return true;
+    }
+  return false;
+}
+
+template<typename S, typename T>
+static inline bool
+check_objfile (const std::pair<S, T> &item, struct objfile *objfile)
+{
+  return (check_objfile (item.first, objfile)
+	  || check_objfile (item.second, objfile));
+}
+
+extern bool check_objfile (const std::unique_ptr<ada_component> &comp,
+			   struct objfile *objfile);
+
+static inline void
+dump_for_expression (struct ui_file *stream, int depth,
+		     const operation_up &op)
+{
+  op->dump (stream, depth);
+}
+
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 enum exp_opcode op);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 const std::string &str);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 struct type *type);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 CORE_ADDR addr);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 internalvar *ivar);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 symbol *sym);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 const block_symbol &sym);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 bound_minimal_symbol msym);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 const block *bl);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 type_instance_flags flags);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 enum c_string_type_values flags);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 enum range_flag flags);
+extern void dump_for_expression (struct ui_file *stream, int depth,
+				 const std::unique_ptr<ada_component> &comp);
+
+template<typename T>
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     const std::vector<T> &vals)
+{
+  fprintf_filtered (stream, _("%*sVector:\n"), depth, "");
+  for (auto &item : vals)
+    dump_for_expression (stream, depth + 1, item);
+}
+
+template<typename X, typename Y>
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     const std::pair<X, Y> &vals)
+{
+  dump_for_expression (stream, depth, vals.first);
+  dump_for_expression (stream, depth, vals.second);
+}
+
+/* Base class for most concrete operations.  This class holds data,
+   specified via template parameters, and supplies generic
+   implementations of the 'dump' and 'uses_objfile' methods.  */
+template<typename... Arg>
+class tuple_holding_operation : public operation
+{
+public:
+
+  explicit tuple_holding_operation (Arg... args)
+    : m_storage (std::forward<Arg> (args)...)
+  {
+  }
+
+  DISABLE_COPY_AND_ASSIGN (tuple_holding_operation);
+
+  bool uses_objfile (struct objfile *objfile) const override
+  {
+    return do_check_objfile<0, Arg...> (objfile, m_storage);
+  }
+
+  void dump (struct ui_file *stream, int depth) const override
+  {
+    dump_for_expression (stream, depth, opcode ());
+    do_dump<0, Arg...> (stream, depth + 1, m_storage);
+  }
+
+protected:
+
+  /* Storage for the data.  */
+  std::tuple<Arg...> m_storage;
+
+private:
+
+  /* do_dump does the work of dumping the data.  */
+  template<int I, typename... T>
+  typename std::enable_if<I == sizeof... (T), void>::type
+  do_dump (struct ui_file *stream, int depth, const std::tuple<T...> &value)
+    const
+  {
+  }
+
+  template<int I, typename... T>
+  typename std::enable_if<I < sizeof... (T), void>::type
+  do_dump (struct ui_file *stream, int depth, const std::tuple<T...> &value)
+    const
+  {
+    dump_for_expression (stream, depth, std::get<I> (value));
+    do_dump<I + 1, T...> (stream, depth, value);
+  }
+
+  /* do_check_objfile does the work of checking whether this object
+     refers to OBJFILE.  */
+  template<int I, typename... T>
+  typename std::enable_if<I == sizeof... (T), bool>::type
+  do_check_objfile (struct objfile *objfile, const std::tuple<T...> &value)
+    const
+  {
+    return false;
+  }
+
+  template<int I, typename... T>
+  typename std::enable_if<I < sizeof... (T), bool>::type
+  do_check_objfile (struct objfile *objfile, const std::tuple<T...> &value)
+    const
+  {
+    if (check_objfile (std::get<I> (value), objfile))
+      return true;
+    return do_check_objfile<I + 1, T...> (objfile, value);
+  }
+};
+
+/* The check_constant overloads are used to decide whether a given
+   concrete operation is a constant.  This is done by checking the
+   operands.  */
+
+static inline bool
+check_constant (const operation_up &item)
+{
+  return item->constant_p ();
+}
+
+static inline bool
+check_constant (bound_minimal_symbol msym)
+{
+  return false;
+}
+
+static inline bool
+check_constant (struct type *type)
+{
+  return true;
+}
+
+static inline bool
+check_constant (const struct block *block)
+{
+  return true;
+}
+
+static inline bool
+check_constant (const std::string &str)
+{
+  return true;
+}
+
+static inline bool
+check_constant (ULONGEST cst)
+{
+  return true;
+}
+
+static inline bool
+check_constant (struct symbol *sym)
+{
+  enum address_class sc = SYMBOL_CLASS (sym);
+  return (sc == LOC_BLOCK
+	  || sc == LOC_CONST
+	  || sc == LOC_CONST_BYTES
+	  || sc == LOC_LABEL);
+}
+
+static inline bool
+check_constant (const block_symbol &sym)
+{
+  /* We know the block is constant, so we only need to check the
+     symbol.  */
+  return check_constant (sym.symbol);
+}
+
+template<typename T>
+static inline bool
+check_constant (const std::vector<T> &collection)
+{
+  for (const auto &item : collection)
+    if (!check_constant (item))
+      return false;
+  return true;
+}
+
+template<typename S, typename T>
+static inline bool
+check_constant (const std::pair<S, T> &item)
+{
+  return check_constant (item.first) && check_constant (item.second);
+}
+
+/* Base class for concrete operations.  This class supplies an
+   implementation of 'constant_p' that works by checking the
+   operands.  */
+template<typename... Arg>
+class maybe_constant_operation
+  : public tuple_holding_operation<Arg...>
+{
+public:
+
+  using tuple_holding_operation<Arg...>::tuple_holding_operation;
+
+  bool constant_p () const override
+  {
+    return do_check_constant<0, Arg...> (this->m_storage);
+  }
+
+private:
+
+  template<int I, typename... T>
+  typename std::enable_if<I == sizeof... (T), bool>::type
+  do_check_constant (const std::tuple<T...> &value) const
+  {
+    return true;
+  }
+
+  template<int I, typename... T>
+  typename std::enable_if<I < sizeof... (T), bool>::type
+  do_check_constant (const std::tuple<T...> &value) const
+  {
+    if (!check_constant (std::get<I> (value)))
+      return false;
+    return do_check_constant<I + 1, T...> (value);
+  }
+};
+
+/* A floating-point constant.  The constant is encoded in the target
+   format.  */
+
+typedef std::array<gdb_byte, 16> float_data;
+
+/* An operation that holds a floating-point constant of a given
+   type.
+
+   This does not need the facilities provided by
+   tuple_holding_operation, so it does not use it.  */
+class float_const_operation
+  : public operation
+{
+public:
+
+  float_const_operation (struct type *type, float_data data)
+    : m_type (type),
+      m_data (data)
+  {
+  }
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return value_from_contents (m_type, m_data.data ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_FLOAT; }
+
+  bool constant_p () const override
+  { return true; }
+
+  void dump (struct ui_file *stream, int depth) const override;
+
+private:
+
+  struct type *m_type;
+  float_data m_data;
+};
+
+class scope_operation
+  : public maybe_constant_operation<struct type *, std::string>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return eval_op_scope (expect_type, exp, noside,
+			  std::get<0> (m_storage),
+			  std::get<1> (m_storage).c_str ());
+  }
+
+  value *evaluate_for_address (struct expression *exp,
+			       enum noside noside) override;
+
+  value *evaluate_funcall (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside,
+			   const std::vector<operation_up> &args) override;
+
+  enum exp_opcode opcode () const override
+  { return OP_SCOPE; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Compute the value of a variable.  */
+class var_value_operation
+  : public maybe_constant_operation<block_symbol>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override;
+
+  value *evaluate_with_coercion (struct expression *exp,
+				 enum noside noside) override;
+
+  value *evaluate_for_sizeof (struct expression *exp, enum noside noside)
+    override;
+
+  value *evaluate_for_cast (struct type *expect_type,
+			    struct expression *exp,
+			    enum noside noside) override;
+
+  value *evaluate_for_address (struct expression *exp, enum noside noside)
+    override;
+
+  value *evaluate_funcall (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside,
+			   const std::vector<operation_up> &args) override;
+
+  enum exp_opcode opcode () const override
+  { return OP_VAR_VALUE; }
+
+  /* Return the symbol referenced by this object.  */
+  symbol *get_symbol () const
+  {
+    return std::get<0> (m_storage).symbol;
+  }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+class long_const_operation
+  : public tuple_holding_operation<struct type *, LONGEST>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return value_from_longest (std::get<0> (m_storage),
+			       std::get<1> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_LONG; }
+
+  bool constant_p () const override
+  { return true; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+class var_msym_value_operation
+  : public maybe_constant_operation<bound_minimal_symbol>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return eval_op_var_msym_value (expect_type, exp, noside, m_outermost,
+				   std::get<0> (m_storage));
+  }
+
+  value *evaluate_for_sizeof (struct expression *exp, enum noside noside)
+    override;
+
+  value *evaluate_for_address (struct expression *exp, enum noside noside)
+    override;
+
+  value *evaluate_for_cast (struct type *expect_type,
+			    struct expression *exp,
+			    enum noside noside) override;
+
+  value *evaluate_funcall (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside,
+			   const std::vector<operation_up> &args) override
+  {
+    const char *name = std::get<0> (m_storage).minsym->print_name ();
+    return operation::evaluate_funcall (expect_type, exp, noside, name, args);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_VAR_MSYM_VALUE; }
+
+  void set_outermost () override
+  {
+    m_outermost = true;
+  }
+
+protected:
+
+  /* True if this is the outermost operation in the expression.  */
+  bool m_outermost = false;
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+class var_entry_value_operation
+  : public tuple_holding_operation<symbol *>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return eval_op_var_entry_value (expect_type, exp, noside,
+				    std::get<0> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_VAR_ENTRY_VALUE; }
+};
+
+class func_static_var_operation
+  : public maybe_constant_operation<operation_up, std::string>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *func = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    return eval_op_func_static_var (expect_type, exp, noside, func,
+				    std::get<1> (m_storage).c_str ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_FUNC_STATIC_VAR; }
+};
+
+class last_operation
+  : public tuple_holding_operation<int>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return access_value_history (std::get<0> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_LAST; }
+};
+
+class register_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_register (expect_type, exp, noside,
+			     std::get<0> (m_storage).c_str ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_REGISTER; }
+
+  /* Return the name of the register.  */
+  const char *get_name () const
+  {
+    return std::get<0> (m_storage).c_str ();
+  }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+class bool_operation
+  : public tuple_holding_operation<bool>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
+    return value_from_longest (type, std::get<0> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_BOOL; }
+
+  bool constant_p () const override
+  { return true; }
+};
+
+class internalvar_operation
+  : public tuple_holding_operation<internalvar *>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return value_of_internalvar (exp->gdbarch,
+				 std::get<0> (m_storage));
+  }
+
+  internalvar *get_internalvar () const
+  {
+    return std::get<0> (m_storage);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_INTERNALVAR; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+class string_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 eval_op_string (expect_type, exp, noside,
+			   str.size (), str.c_str ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_STRING; }
+};
+
+class ternop_slice_operation
+  : public maybe_constant_operation<operation_up, 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
+  {
+    struct value *array
+      = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    struct value *low
+      = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    struct value *upper
+      = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+    return eval_op_ternop (expect_type, exp, noside, array, low, upper);
+  }
+
+  enum exp_opcode opcode () const override
+  { return TERNOP_SLICE; }
+};
+
+class ternop_cond_operation
+  : public maybe_constant_operation<operation_up, 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
+  {
+    struct value *val
+      = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+
+    if (value_logical_not (val))
+      return std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+    return std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return TERNOP_COND; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+class complex_operation
+  : public maybe_constant_operation<operation_up, operation_up, struct type *>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *real = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    value *imag = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    return value_literal_complex (real, imag,
+				  std::get<2> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_COMPLEX; }
+};
+
+class structop_base_operation
+  : public tuple_holding_operation<operation_up, std::string>
+{
+public:
+
+  /* Used for completion.  Return the field name.  */
+  const std::string &get_string () const
+  {
+    return std::get<1> (m_storage);
+  }
+
+  /* Used for completion.  Evaluate the LHS for type.  */
+  value *evaluate_lhs (struct expression *exp)
+  {
+    return std::get<0> (m_storage)->evaluate (nullptr, exp,
+					      EVAL_AVOID_SIDE_EFFECTS);
+  }
+
+  value *evaluate_funcall (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside,
+			   const std::vector<operation_up> &args) override;
+
+protected:
+
+  using tuple_holding_operation::tuple_holding_operation;
+};
+
+class 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
+  {
+    value *val =std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    return eval_op_structop_struct (expect_type, exp, noside, val,
+				    std::get<1> (m_storage).c_str ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return STRUCTOP_STRUCT; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_structop (exp, STRUCTOP_STRUCT,
+		       std::get<0> (this->m_storage).get (),
+		       std::get<1> (this->m_storage).c_str (),
+		       ax, value);
+  }
+};
+
+class structop_ptr_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
+  {
+    value *val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    return eval_op_structop_ptr (expect_type, exp, noside, val,
+				 std::get<1> (m_storage).c_str ());
+  }
+
+  enum exp_opcode opcode () const override
+  { return STRUCTOP_PTR; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_structop (exp, STRUCTOP_PTR,
+		       std::get<0> (this->m_storage).get (),
+		       std::get<1> (this->m_storage).c_str (),
+		       ax, value);
+  }
+};
+
+class structop_member_base
+  : public tuple_holding_operation<operation_up, operation_up>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate_funcall (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside,
+			   const std::vector<operation_up> &args) override;
+};
+
+class structop_member_operation
+  : public structop_member_base
+{
+public:
+
+  using structop_member_base::structop_member_base;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *lhs
+      = std::get<0> (m_storage)->evaluate_for_address (exp, noside);
+    value *rhs
+      = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    return eval_op_member (expect_type, exp, noside, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return STRUCTOP_MEMBER; }
+};
+
+class structop_mptr_operation
+  : public structop_member_base
+{
+public:
+
+  using structop_member_base::structop_member_base;
+
+  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);
+    return eval_op_member (expect_type, exp, noside, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return STRUCTOP_MPTR; }
+};
+
+class concat_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_with_coercion (exp, noside);
+    value *rhs
+      = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
+    return eval_op_concat (expect_type, exp, noside, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_CONCAT; }
+};
+
+class add_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_with_coercion (exp, noside);
+    value *rhs
+      = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
+    return eval_op_add (expect_type, exp, noside, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_ADD; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_binop (exp, BINOP_ADD,
+		    std::get<0> (this->m_storage).get (),
+		    std::get<1> (this->m_storage).get (),
+		    ax, value);
+  }
+};
+
+class sub_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_with_coercion (exp, noside);
+    value *rhs
+      = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
+    return eval_op_sub (expect_type, exp, noside, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_SUB; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_binop (exp, BINOP_SUB,
+		    std::get<0> (this->m_storage).get (),
+		    std::get<1> (this->m_storage).get (),
+		    ax, value);
+  }
+};
+
+typedef struct value *binary_ftype (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside, enum exp_opcode op,
+				    struct value *arg1, struct value *arg2);
+
+template<enum exp_opcode OP, binary_ftype FUNC>
+class binop_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);
+    return FUNC (expect_type, exp, noside, OP, lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP; }
+};
+
+template<enum exp_opcode OP, binary_ftype FUNC>
+class usual_ax_binop_operation
+  : public binop_operation<OP, FUNC>
+{
+public:
+
+  using binop_operation<OP, FUNC>::binop_operation;
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_binop (exp, OP,
+		    std::get<0> (this->m_storage).get (),
+		    std::get<1> (this->m_storage).get (),
+		    ax, value);
+  }
+};
+
+using exp_operation = binop_operation<BINOP_EXP, eval_op_binary>;
+using intdiv_operation = binop_operation<BINOP_INTDIV, eval_op_binary>;
+using mod_operation = binop_operation<BINOP_MOD, eval_op_binary>;
+
+using mul_operation = usual_ax_binop_operation<BINOP_MUL, eval_op_binary>;
+using div_operation = usual_ax_binop_operation<BINOP_DIV, eval_op_binary>;
+using rem_operation = usual_ax_binop_operation<BINOP_REM, eval_op_binary>;
+using lsh_operation = usual_ax_binop_operation<BINOP_LSH, eval_op_binary>;
+using rsh_operation = usual_ax_binop_operation<BINOP_RSH, eval_op_binary>;
+using bitwise_and_operation
+     = usual_ax_binop_operation<BINOP_BITWISE_AND, eval_op_binary>;
+using bitwise_ior_operation
+     = usual_ax_binop_operation<BINOP_BITWISE_IOR, eval_op_binary>;
+using bitwise_xor_operation
+     = usual_ax_binop_operation<BINOP_BITWISE_XOR, eval_op_binary>;
+
+class subscript_operation
+  : public usual_ax_binop_operation<BINOP_SUBSCRIPT, eval_op_subscript>
+{
+public:
+  using usual_ax_binop_operation<BINOP_SUBSCRIPT,
+				 eval_op_subscript>::usual_ax_binop_operation;
+
+  value *evaluate_for_sizeof (struct expression *exp,
+			      enum noside noside) override;
+};
+
+/* Implementation of comparison operations.  */
+template<enum exp_opcode OP, binary_ftype FUNC>
+class comparison_operation
+  : public usual_ax_binop_operation<OP, FUNC>
+{
+public:
+
+  using usual_ax_binop_operation<OP, FUNC>::usual_ax_binop_operation;
+
+  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 (value_type (lhs), exp,
+						 noside);
+    return FUNC (expect_type, exp, noside, OP, lhs, rhs);
+  }
+};
+
+class equal_operation
+  : public comparison_operation<BINOP_EQUAL, eval_op_equal>
+{
+public:
+
+  using comparison_operation::comparison_operation;
+
+  operation *get_lhs () const
+  {
+    return std::get<0> (m_storage).get ();
+  }
+
+  operation *get_rhs () const
+  {
+    return std::get<1> (m_storage).get ();
+  }
+};
+
+using notequal_operation
+     = comparison_operation<BINOP_NOTEQUAL, eval_op_notequal>;
+using less_operation = comparison_operation<BINOP_LESS, eval_op_less>;
+using gtr_operation = comparison_operation<BINOP_GTR, eval_op_gtr>;
+using geq_operation = comparison_operation<BINOP_GEQ, eval_op_geq>;
+using leq_operation = comparison_operation<BINOP_LEQ, eval_op_leq>;
+
+/* Implement the GDB '@' repeat operator.  */
+class repeat_operation
+  : public binop_operation<BINOP_REPEAT, eval_op_repeat>
+{
+  using binop_operation<BINOP_REPEAT, eval_op_repeat>::binop_operation;
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* C-style comma operator.  */
+class comma_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
+  {
+    /* The left-hand-side is only evaluated for side effects, so don't
+       bother in other modes.  */
+    if (noside == EVAL_NORMAL)
+      std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    return std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_COMMA; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+typedef struct value *unary_ftype (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside, enum exp_opcode op,
+				   struct value *arg1);
+
+/* Base class for unary operations.  */
+template<enum exp_opcode OP, unary_ftype FUNC>
+class unop_operation
+  : public maybe_constant_operation<operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_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 FUNC (expect_type, exp, noside, OP, val);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP; }
+};
+
+/* Unary operations that can also be turned into agent expressions in
+   the "usual" way.  */
+template<enum exp_opcode OP, unary_ftype FUNC>
+class usual_ax_unop_operation
+  : public unop_operation<OP, FUNC>
+{
+  using unop_operation<OP, FUNC>::unop_operation;
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_unop (exp, OP,
+		   std::get<0> (this->m_storage).get (),
+		   ax, value);
+  }
+};
+
+using unary_plus_operation = usual_ax_unop_operation<UNOP_PLUS, eval_op_plus>;
+using unary_neg_operation = usual_ax_unop_operation<UNOP_NEG, eval_op_neg>;
+using unary_complement_operation
+     = usual_ax_unop_operation<UNOP_COMPLEMENT, eval_op_complement>;
+using unary_logical_not_operation
+     = usual_ax_unop_operation<UNOP_LOGICAL_NOT, eval_op_lognot>;
+
+/* Handle pre- and post- increment and -decrement.  */
+template<enum exp_opcode OP, unary_ftype FUNC>
+class unop_incr_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
+  {
+    value *val = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
+    return FUNC (expect_type, exp, noside, OP, val);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP; }
+};
+
+using preinc_operation
+     = unop_incr_operation<UNOP_PREINCREMENT, eval_op_preinc>;
+using predec_operation
+     = unop_incr_operation<UNOP_PREDECREMENT, eval_op_predec>;
+using postinc_operation
+     = unop_incr_operation<UNOP_POSTINCREMENT, eval_op_postinc>;
+using postdec_operation
+     = unop_incr_operation<UNOP_POSTDECREMENT, eval_op_postdec>;
+
+/* Base class for implementations of UNOP_IND.  */
+class unop_ind_base_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
+  {
+    if (expect_type != nullptr && expect_type->code () == TYPE_CODE_PTR)
+      expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
+    value *val = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
+    return eval_op_ind (expect_type, exp, noside, val);
+  }
+
+  value *evaluate_for_address (struct expression *exp,
+			       enum noside noside) override;
+
+  value *evaluate_for_sizeof (struct expression *exp,
+			      enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return UNOP_IND; }
+};
+
+/* Ordinary UNOP_IND implementation.  */
+class unop_ind_operation
+  : public unop_ind_base_operation
+{
+public:
+
+  using unop_ind_base_operation::unop_ind_base_operation;
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_unop (exp, UNOP_IND,
+		   std::get<0> (this->m_storage).get (),
+		   ax, value);
+  }
+};
+
+/* Implement OP_TYPE.  */
+class type_operation
+  : public tuple_holding_operation<struct type *>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return eval_op_type (expect_type, exp, noside, std::get<0> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_TYPE; }
+
+  bool constant_p () const override
+  { return true; }
+};
+
+/* Implement the "typeof" operation.  */
+class typeof_operation
+  : public maybe_constant_operation<operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    if (noside == EVAL_AVOID_SIDE_EFFECTS)
+      return std::get<0> (m_storage)->evaluate (nullptr, exp,
+						EVAL_AVOID_SIDE_EFFECTS);
+    else
+      error (_("Attempt to use a type as an expression"));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_TYPEOF; }
+};
+
+/* Implement 'decltype'.  */
+class decltype_operation
+  : public maybe_constant_operation<operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    if (noside == EVAL_AVOID_SIDE_EFFECTS)
+      {
+	value *result
+	  = std::get<0> (m_storage)->evaluate (nullptr, exp,
+					       EVAL_AVOID_SIDE_EFFECTS);
+	enum exp_opcode sub_op = std::get<0> (m_storage)->opcode ();
+	if (sub_op == BINOP_SUBSCRIPT
+	    || sub_op == STRUCTOP_MEMBER
+	    || sub_op == STRUCTOP_MPTR
+	    || sub_op == UNOP_IND
+	    || sub_op == STRUCTOP_STRUCT
+	    || sub_op == STRUCTOP_PTR
+	    || sub_op == OP_SCOPE)
+	  {
+	    struct type *type = value_type (result);
+
+	    if (!TYPE_IS_REFERENCE (type))
+	      {
+		type = lookup_lvalue_reference_type (type);
+		result = allocate_value (type);
+	      }
+	  }
+
+	return result;
+      }
+    else
+      error (_("Attempt to use a type as an expression"));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_DECLTYPE; }
+};
+
+/* Implement 'typeid'.  */
+class typeid_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 sub_op = std::get<0> (m_storage)->opcode ();
+    enum noside sub_noside
+      = ((sub_op == OP_TYPE || sub_op == OP_DECLTYPE || sub_op == OP_TYPEOF)
+	 ? EVAL_AVOID_SIDE_EFFECTS
+	 : noside);
+
+    value *result = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						       sub_noside);
+    if (noside != EVAL_NORMAL)
+      return allocate_value (cplus_typeid_type (exp->gdbarch));
+    return cplus_typeid (result);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_TYPEID; }
+};
+
+/* Implement the address-of operation.  */
+class unop_addr_operation
+  : public maybe_constant_operation<operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    /* C++: check for and handle pointer to members.  */
+    return std::get<0> (m_storage)->evaluate_for_address (exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return UNOP_ADDR; }
+
+  /* Return the subexpression.  */
+  const operation_up &get_expression () const
+  {
+    return std::get<0> (m_storage);
+  }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override
+  {
+    gen_expr_unop (exp, UNOP_ADDR,
+		   std::get<0> (this->m_storage).get (),
+		   ax, value);
+  }
+};
+
+/* Implement 'sizeof'.  */
+class unop_sizeof_operation
+  : public maybe_constant_operation<operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return std::get<0> (m_storage)->evaluate_for_sizeof (exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return UNOP_SIZEOF; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Implement 'alignof'.  */
+class unop_alignof_operation
+  : public maybe_constant_operation<operation_up>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    value *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						    EVAL_AVOID_SIDE_EFFECTS);
+    return eval_op_alignof (expect_type, exp, noside, val);
+  }
+
+  enum exp_opcode opcode () const override
+  { return UNOP_ALIGNOF; }
+};
+
+/* Implement UNOP_MEMVAL.  */
+class unop_memval_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 (expect_type, exp, noside);
+    return eval_op_memval (expect_type, exp, noside, val,
+			   std::get<1> (m_storage));
+  }
+
+  value *evaluate_for_sizeof (struct expression *exp,
+			      enum noside noside) override;
+
+  value *evaluate_for_address (struct expression *exp,
+			       enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return UNOP_MEMVAL; }
+
+  /* Return the type referenced by this object.  */
+  struct type *get_type () const
+  {
+    return std::get<1> (m_storage);
+  }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Implement UNOP_MEMVAL_TYPE.  */
+class unop_memval_type_operation
+  : public tuple_holding_operation<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 *typeval
+      = std::get<0> (m_storage)->evaluate (expect_type, exp,
+					   EVAL_AVOID_SIDE_EFFECTS);
+    struct type *type = value_type (typeval);
+    value *val = std::get<1> (m_storage)->evaluate (expect_type, exp, noside);
+    return eval_op_memval (expect_type, exp, noside, val, type);
+  }
+
+  value *evaluate_for_sizeof (struct expression *exp,
+			      enum noside noside) override;
+
+  value *evaluate_for_address (struct expression *exp,
+			       enum noside noside) override;
+
+  enum exp_opcode opcode () const override
+  { return UNOP_MEMVAL_TYPE; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Implement the 'this' expression.  */
+class op_this_operation
+  : public tuple_holding_operation<>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return value_of_this (exp->language_defn);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_THIS; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Implement the "type instance" operation.  */
+class type_instance_operation
+  : public tuple_holding_operation<type_instance_flags, std::vector<type *>,
+				   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 TYPE_INSTANCE; }
+};
+
+/* The assignment operator.  */
+class assign_operation
+  : public tuple_holding_operation<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 *lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+    /* Special-case assignments where the left-hand-side is a
+       convenience variable -- in these, don't bother setting an
+       expected type.  This avoids a weird case where re-assigning a
+       string or array to an internal variable could error with "Too
+       many array elements".  */
+    struct type *xtype = (VALUE_LVAL (lhs) == lval_internalvar
+			  ? nullptr
+			  : value_type (lhs));
+    value *rhs = std::get<1> (m_storage)->evaluate (xtype, exp, noside);
+
+    if (noside == EVAL_AVOID_SIDE_EFFECTS)
+      return lhs;
+    if (binop_user_defined_p (BINOP_ASSIGN, lhs, rhs))
+      return value_x_binop (lhs, rhs, BINOP_ASSIGN, OP_NULL, noside);
+    else
+      return value_assign (lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_ASSIGN; }
+
+  /* Return the left-hand-side of the assignment.  */
+  operation *get_lhs () const
+  {
+    return std::get<0> (m_storage).get ();
+  }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* Assignment with modification, like "+=".  */
+class assign_modify_operation
+  : public tuple_holding_operation<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 *lhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+    value *rhs = std::get<2> (m_storage)->evaluate (expect_type, exp, noside);
+    return eval_binop_assign_modify (expect_type, exp, noside,
+				     std::get<0> (m_storage), lhs, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_ASSIGN_MODIFY; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* A type cast.  */
+class unop_cast_operation
+  : public maybe_constant_operation<operation_up, struct type *>
+{
+public:
+
+  using maybe_constant_operation::maybe_constant_operation;
+
+  value *evaluate (struct type *expect_type,
+		   struct expression *exp,
+		   enum noside noside) override
+  {
+    return std::get<0> (m_storage)->evaluate_for_cast (std::get<1> (m_storage),
+						       exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return UNOP_CAST; }
+
+  /* Return the type referenced by this object.  */
+  struct type *get_type () const
+  {
+    return std::get<1> (m_storage);
+  }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* A cast, but the type comes from an expression, not a "struct
+   type".  */
+class unop_cast_type_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 *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						    EVAL_AVOID_SIDE_EFFECTS);
+    return std::get<1> (m_storage)->evaluate_for_cast (value_type (val),
+						       exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return UNOP_CAST_TYPE; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+typedef value *cxx_cast_ftype (struct type *, value *);
+
+/* This implements dynamic_cast and reinterpret_cast.  static_cast and
+   const_cast are handled by the ordinary case operations.  */
+template<exp_opcode OP, cxx_cast_ftype FUNC>
+class cxx_cast_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 *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
+						    EVAL_AVOID_SIDE_EFFECTS);
+    struct type *type = value_type (val);
+    value *rhs = std::get<1> (m_storage)->evaluate (type, exp, noside);
+    return FUNC (type, rhs);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP; }
+};
+
+using dynamic_cast_operation = cxx_cast_operation<UNOP_DYNAMIC_CAST,
+						  value_dynamic_cast>;
+using reinterpret_cast_operation = cxx_cast_operation<UNOP_REINTERPRET_CAST,
+						      value_reinterpret_cast>;
+
+/* Multi-dimensional subscripting.  */
+class multi_subscript_operation
+  : public tuple_holding_operation<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 MULTI_SUBSCRIPT; }
+};
+
+/* The "&&" operator.  */
+class logical_and_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;
+
+  enum exp_opcode opcode () const override
+  { return BINOP_LOGICAL_AND; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* The "||" operator.  */
+class logical_or_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;
+
+  enum exp_opcode opcode () const override
+  { return BINOP_LOGICAL_OR; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+		       struct agent_expr *ax,
+		       struct axs_value *value,
+		       struct type *cast_type)
+    override;
+};
+
+/* This class implements ADL (aka Koenig) function calls for C++.  It
+   holds the name of the function to call, the block in which the
+   lookup should be done, and a vector of arguments.  */
+class adl_func_operation
+  : public tuple_holding_operation<std::string, const block *,
+				   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_ADL_FUNC; }
+};
+
+/* The OP_ARRAY operation.  */
+class array_operation
+  : public tuple_holding_operation<int, int, 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_ARRAY; }
+
+private:
+
+  struct value *evaluate_struct_tuple (struct value *struct_val,
+				       struct expression *exp,
+				       enum noside noside, int nargs);
+};
+
+/* A function call.  This holds the callee operation and the
+   arguments.  */
+class funcall_operation
+  : public tuple_holding_operation<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
+  {
+    return std::get<0> (m_storage)->evaluate_funcall (expect_type, exp, noside,
+						      std::get<1> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_FUNCALL; }
+};
+
+} /* namespace expr */
+
+#endif /* EXPOP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/expprint.c ./gdb/expprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/expprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/expprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Print in infix form a struct expression.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,680 +30,17 @@
 #include "objfiles.h"
 #include "valprint.h"
 #include "cli/cli-style.h"
+#include "c-lang.h"
+#include "expop.h"
+#include "ada-exp.h"
 
 #include <ctype.h>
 
-void
-print_expression (struct expression *exp, struct ui_file *stream)
-{
-  int pc = 0;
-
-  print_subexp (exp, &pc, stream, PREC_NULL);
-}
-
-/* Print the subexpression of EXP that starts in position POS, on STREAM.
-   PREC is the precedence of the surrounding operator;
-   if the precedence of the main operator of this subexpression is less,
-   parentheses are needed here.  */
-
-void
-print_subexp (struct expression *exp, int *pos,
-	      struct ui_file *stream, enum precedence prec)
-{
-  exp->language_defn->la_exp_desc->print_subexp (exp, pos, stream, prec);
-}
-
-/* Standard implementation of print_subexp for use in language_defn
-   vectors.  */
-void
-print_subexp_standard (struct expression *exp, int *pos,
-		       struct ui_file *stream, enum precedence prec)
-{
-  unsigned tem;
-  const struct op_print *op_print_tab;
-  int pc;
-  unsigned nargs;
-  const char *op_str;
-  int assign_modify = 0;
-  enum exp_opcode opcode;
-  enum precedence myprec = PREC_NULL;
-  /* Set to 1 for a right-associative operator.  */
-  int assoc = 0;
-  struct value *val;
-  char *tempstr = NULL;
-
-  op_print_tab = exp->language_defn->la_op_print_tab;
-  pc = (*pos)++;
-  opcode = exp->elts[pc].opcode;
-  switch (opcode)
-    {
-      /* Common ops */
-
-    case OP_TYPE:
-      (*pos) += 2;
-      type_print (exp->elts[pc + 1].type, "", stream, 0);
-      return;
-
-    case OP_SCOPE:
-      myprec = PREC_PREFIX;
-      assoc = 0;
-      fputs_filtered (TYPE_NAME (exp->elts[pc + 1].type), stream);
-      fputs_filtered ("::", stream);
-      nargs = longest_to_int (exp->elts[pc + 2].longconst);
-      (*pos) += 4 + BYTES_TO_EXP_ELEM (nargs + 1);
-      fputs_filtered (&exp->elts[pc + 3].string, stream);
-      return;
-
-    case OP_LONG:
-      {
-	struct value_print_options opts;
-
-	get_no_prettyformat_print_options (&opts);
-	(*pos) += 3;
-	value_print (value_from_longest (exp->elts[pc + 1].type,
-					 exp->elts[pc + 2].longconst),
-		     stream, &opts);
-      }
-      return;
-
-    case OP_FLOAT:
-      {
-	struct value_print_options opts;
-
-	get_no_prettyformat_print_options (&opts);
-	(*pos) += 3;
-	value_print (value_from_contents (exp->elts[pc + 1].type,
-					  exp->elts[pc + 2].floatconst),
-		     stream, &opts);
-      }
-      return;
-
-    case OP_VAR_VALUE:
-      {
-	const struct block *b;
-
-	(*pos) += 3;
-	b = exp->elts[pc + 1].block;
-	if (b != NULL
-	    && BLOCK_FUNCTION (b) != NULL
-	    && BLOCK_FUNCTION (b)->print_name () != NULL)
-	  {
-	    fputs_filtered (BLOCK_FUNCTION (b)->print_name (), stream);
-	    fputs_filtered ("::", stream);
-	  }
-	fputs_filtered (exp->elts[pc + 2].symbol->print_name (), stream);
-      }
-      return;
-
-    case OP_VAR_MSYM_VALUE:
-      {
-	(*pos) += 3;
-	fputs_filtered (exp->elts[pc + 2].msymbol->print_name (), stream);
-      }
-      return;
-
-    case OP_FUNC_STATIC_VAR:
-      {
-	tem = longest_to_int (exp->elts[pc + 1].longconst);
-	(*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-	fputs_filtered (&exp->elts[pc + 1].string, stream);
-      }
-      return;
-
-    case OP_VAR_ENTRY_VALUE:
-      {
-	(*pos) += 2;
-	fprintf_filtered (stream, "%s@entry",
-			  exp->elts[pc + 1].symbol->print_name ());
-      }
-      return;
-
-    case OP_LAST:
-      (*pos) += 2;
-      fprintf_filtered (stream, "$%d",
-			longest_to_int (exp->elts[pc + 1].longconst));
-      return;
-
-    case OP_REGISTER:
-      {
-	const char *name = &exp->elts[pc + 2].string;
-
-	(*pos) += 3 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
-	fprintf_filtered (stream, "$%s", name);
-	return;
-      }
-
-    case OP_BOOL:
-      (*pos) += 2;
-      fprintf_filtered (stream, "%s",
-			longest_to_int (exp->elts[pc + 1].longconst)
-			? "TRUE" : "FALSE");
-      return;
-
-    case OP_INTERNALVAR:
-      (*pos) += 2;
-      fprintf_filtered (stream, "$%s",
-			internalvar_name (exp->elts[pc + 1].internalvar));
-      return;
-
-    case OP_FUNCALL:
-    case OP_F77_UNDETERMINED_ARGLIST:
-      (*pos) += 2;
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered (" (", stream);
-      for (tem = 0; tem < nargs; tem++)
-	{
-	  if (tem != 0)
-	    fputs_filtered (", ", stream);
-	  print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-	}
-      fputs_filtered (")", stream);
-      return;
-
-    case OP_NAME:
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
-      fputs_filtered (&exp->elts[pc + 2].string, stream);
-      return;
-
-    case OP_STRING:
-      {
-	struct value_print_options opts;
-
-	nargs = longest_to_int (exp->elts[pc + 1].longconst);
-	(*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
-	/* LA_PRINT_STRING will print using the current repeat count threshold.
-	   If necessary, we can temporarily set it to zero, or pass it as an
-	   additional parameter to LA_PRINT_STRING.  -fnf */
-	get_user_print_options (&opts);
-	LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char,
-			 (gdb_byte *) &exp->elts[pc + 2].string, nargs,
-			 NULL, 0, &opts);
-      }
-      return;
-
-    case OP_OBJC_NSSTRING:	/* Objective-C Foundation Class
-				   NSString constant.  */
-      {
-	struct value_print_options opts;
-
-	nargs = longest_to_int (exp->elts[pc + 1].longconst);
-	(*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
-	fputs_filtered ("@\"", stream);
-	get_user_print_options (&opts);
-	LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char,
-			 (gdb_byte *) &exp->elts[pc + 2].string, nargs,
-			 NULL, 0, &opts);
-	fputs_filtered ("\"", stream);
-      }
-      return;
-
-    case OP_OBJC_MSGCALL:
-      {			/* Objective C message (method) call.  */
-	gdb::unique_xmalloc_ptr<char> selector;
-
-	(*pos) += 3;
-	nargs = longest_to_int (exp->elts[pc + 2].longconst);
-	fprintf_unfiltered (stream, "[");
-	print_subexp (exp, pos, stream, PREC_SUFFIX);
-	if (0 == target_read_string (exp->elts[pc + 1].longconst,
-				     &selector, 1024, NULL))
-	  {
-	    error (_("bad selector"));
-	    return;
-	  }
-	if (nargs)
-	  {
-	    char *s, *nextS;
-
-	    s = selector.get ();
-	    for (tem = 0; tem < nargs; tem++)
-	      {
-		nextS = strchr (s, ':');
-		gdb_assert (nextS);	/* Make sure we found ':'.  */
-		*nextS = '\0';
-		fprintf_unfiltered (stream, " %s: ", s);
-		s = nextS + 1;
-		print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-	      }
-	  }
-	else
-	  {
-	    fprintf_unfiltered (stream, " %s", selector.get ());
-	  }
-	fprintf_unfiltered (stream, "]");
-	return;
-      }
-
-    case OP_ARRAY:
-      (*pos) += 3;
-      nargs = longest_to_int (exp->elts[pc + 2].longconst);
-      nargs -= longest_to_int (exp->elts[pc + 1].longconst);
-      nargs++;
-      tem = 0;
-      if (exp->elts[pc + 4].opcode == OP_LONG
-	  && exp->elts[pc + 5].type
-	     == builtin_type (exp->gdbarch)->builtin_char
-	  && exp->language_defn->la_language == language_c)
-	{
-	  /* Attempt to print C character arrays using string syntax.
-	     Walk through the args, picking up one character from each
-	     of the OP_LONG expression elements.  If any array element
-	     does not match our expection of what we should find for
-	     a simple string, revert back to array printing.  Note that
-	     the last expression element is an explicit null terminator
-	     byte, which doesn't get printed.  */
-	  tempstr = (char *) alloca (nargs);
-	  pc += 4;
-	  while (tem < nargs)
-	    {
-	      if (exp->elts[pc].opcode != OP_LONG
-		  || exp->elts[pc + 1].type
-		     != builtin_type (exp->gdbarch)->builtin_char)
-		{
-		  /* Not a simple array of char, use regular array
-		     printing.  */
-		  tem = 0;
-		  break;
-		}
-	      else
-		{
-		  tempstr[tem++] =
-		    longest_to_int (exp->elts[pc + 2].longconst);
-		  pc += 4;
-		}
-	    }
-	}
-      if (tem > 0)
-	{
-	  struct value_print_options opts;
-
-	  get_user_print_options (&opts);
-	  LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char,
-			   (gdb_byte *) tempstr, nargs - 1, NULL, 0, &opts);
-	  (*pos) = pc;
-	}
-      else
-	{
-	  fputs_filtered (" {", stream);
-	  for (tem = 0; tem < nargs; tem++)
-	    {
-	      if (tem != 0)
-		{
-		  fputs_filtered (", ", stream);
-		}
-	      print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-	    }
-	  fputs_filtered ("}", stream);
-	}
-      return;
-
-    case TERNOP_COND:
-      if ((int) prec > (int) PREC_COMMA)
-	fputs_filtered ("(", stream);
-      /* Print the subexpressions, forcing parentheses
-         around any binary operations within them.
-         This is more parentheses than are strictly necessary,
-         but it looks clearer.  */
-      print_subexp (exp, pos, stream, PREC_HYPER);
-      fputs_filtered (" ? ", stream);
-      print_subexp (exp, pos, stream, PREC_HYPER);
-      fputs_filtered (" : ", stream);
-      print_subexp (exp, pos, stream, PREC_HYPER);
-      if ((int) prec > (int) PREC_COMMA)
-	fputs_filtered (")", stream);
-      return;
-
-    case TERNOP_SLICE:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("(", stream);
-      print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-      fputs_filtered (opcode == TERNOP_SLICE ? " : " : " UP ", stream);
-      print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-      fputs_filtered (")", stream);
-      return;
-
-    case STRUCTOP_STRUCT:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered (".", stream);
-      fputs_filtered (&exp->elts[pc + 2].string, stream);
-      return;
-
-      /* Will not occur for Modula-2.  */
-    case STRUCTOP_PTR:
-      tem = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("->", stream);
-      fputs_filtered (&exp->elts[pc + 2].string, stream);
-      return;
-
-    case STRUCTOP_MEMBER:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered (".*", stream);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      return;
-
-    case STRUCTOP_MPTR:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("->*", stream);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      return;
-
-    case BINOP_SUBSCRIPT:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("[", stream);
-      print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-      fputs_filtered ("]", stream);
-      return;
-
-    case UNOP_POSTINCREMENT:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("++", stream);
-      return;
-
-    case UNOP_POSTDECREMENT:
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fputs_filtered ("--", stream);
-      return;
-
-    case UNOP_CAST:
-      (*pos) += 2;
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered ("(", stream);
-      fputs_filtered ("(", stream);
-      type_print (exp->elts[pc + 1].type, "", stream, 0);
-      fputs_filtered (") ", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered (")", stream);
-      return;
-
-    case UNOP_CAST_TYPE:
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered ("(", stream);
-      fputs_filtered ("(", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      fputs_filtered (") ", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered (")", stream);
-      return;
-
-    case UNOP_DYNAMIC_CAST:
-    case UNOP_REINTERPRET_CAST:
-      fputs_filtered (opcode == UNOP_DYNAMIC_CAST ? "dynamic_cast"
-		      : "reinterpret_cast", stream);
-      fputs_filtered ("<", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      fputs_filtered ("> (", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      fputs_filtered (")", stream);
-      return;
-
-    case UNOP_MEMVAL:
-      (*pos) += 2;
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered ("(", stream);
-      if (TYPE_CODE (exp->elts[pc + 1].type) == TYPE_CODE_FUNC
-	  && exp->elts[pc + 3].opcode == OP_LONG)
-	{
-	  struct value_print_options opts;
-
-	  /* We have a minimal symbol fn, probably.  It's encoded
-	     as a UNOP_MEMVAL (function-type) of an OP_LONG (int, address).
-	     Swallow the OP_LONG (including both its opcodes); ignore
-	     its type; print the value in the type of the MEMVAL.  */
-	  (*pos) += 4;
-	  val = value_at_lazy (exp->elts[pc + 1].type,
-			       (CORE_ADDR) exp->elts[pc + 5].longconst);
-	  get_no_prettyformat_print_options (&opts);
-	  value_print (val, stream, &opts);
-	}
-      else
-	{
-	  fputs_filtered ("{", stream);
-	  type_print (exp->elts[pc + 1].type, "", stream, 0);
-	  fputs_filtered ("} ", stream);
-	  print_subexp (exp, pos, stream, PREC_PREFIX);
-	}
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered (")", stream);
-      return;
-
-    case UNOP_MEMVAL_TYPE:
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered ("(", stream);
-      fputs_filtered ("{", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      fputs_filtered ("} ", stream);
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      if ((int) prec > (int) PREC_PREFIX)
-	fputs_filtered (")", stream);
-      return;
-
-    case BINOP_ASSIGN_MODIFY:
-      opcode = exp->elts[pc + 1].opcode;
-      (*pos) += 2;
-      myprec = PREC_ASSIGN;
-      assoc = 1;
-      assign_modify = 1;
-      op_str = "???";
-      for (tem = 0; op_print_tab[tem].opcode != OP_NULL; tem++)
-	if (op_print_tab[tem].opcode == opcode)
-	  {
-	    op_str = op_print_tab[tem].string;
-	    break;
-	  }
-      if (op_print_tab[tem].opcode != opcode)
-	/* Not found; don't try to keep going because we don't know how
-	   to interpret further elements.  */
-	error (_("Invalid expression"));
-      break;
-
-      /* C++ ops */
-
-    case OP_THIS:
-      ++(*pos);
-      if (exp->language_defn->la_name_of_this)
-	fputs_filtered (exp->language_defn->la_name_of_this, stream);
-      else
-	fprintf_styled (stream, metadata_style.style (),
-			_("<language %s has no 'this'>"),
-			exp->language_defn->la_name);
-      return;
-
-      /* Modula-2 ops */
-
-    case MULTI_SUBSCRIPT:
-      (*pos) += 2;
-      nargs = longest_to_int (exp->elts[pc + 1].longconst);
-      print_subexp (exp, pos, stream, PREC_SUFFIX);
-      fprintf_unfiltered (stream, " [");
-      for (tem = 0; tem < nargs; tem++)
-	{
-	  if (tem != 0)
-	    fprintf_unfiltered (stream, ", ");
-	  print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-	}
-      fprintf_unfiltered (stream, "]");
-      return;
-
-    case BINOP_VAL:
-      (*pos) += 2;
-      fprintf_unfiltered (stream, "VAL(");
-      type_print (exp->elts[pc + 1].type, "", stream, 0);
-      fprintf_unfiltered (stream, ",");
-      print_subexp (exp, pos, stream, PREC_PREFIX);
-      fprintf_unfiltered (stream, ")");
-      return;
-
-    case TYPE_INSTANCE:
-      {
-	type_instance_flags flags
-	  = (type_instance_flag_value) longest_to_int (exp->elts[pc + 1].longconst);
-	LONGEST count = exp->elts[pc + 2].longconst;
-
-	/* The FLAGS.  */
-	(*pos)++;
-	/* The COUNT.  */
-	(*pos)++;
-	fputs_unfiltered ("TypeInstance(", stream);
-	while (count-- > 0)
-	  {
-	    type_print (exp->elts[(*pos)++].type, "", stream, 0);
-	    if (count > 0)
-	      fputs_unfiltered (",", stream);
-	  }
-	fputs_unfiltered (",", stream);
-	/* Ending COUNT and ending TYPE_INSTANCE.  */
-	(*pos) += 2;
-	print_subexp (exp, pos, stream, PREC_PREFIX);
-
-	if (flags & TYPE_INSTANCE_FLAG_CONST)
-	  fputs_unfiltered (",const", stream);
-	if (flags & TYPE_INSTANCE_FLAG_VOLATILE)
-	  fputs_unfiltered (",volatile", stream);
-
-	fputs_unfiltered (")", stream);
-	return;
-      }
-
-    case OP_RANGE:
-      {
-	enum range_type range_type;
-
-	range_type = (enum range_type)
-	  longest_to_int (exp->elts[pc + 1].longconst);
-	*pos += 2;
-
-	if (range_type == NONE_BOUND_DEFAULT_EXCLUSIVE
-	    || range_type == LOW_BOUND_DEFAULT_EXCLUSIVE)
-	  fputs_filtered ("EXCLUSIVE_", stream);
-	fputs_filtered ("RANGE(", stream);
-	if (range_type == HIGH_BOUND_DEFAULT
-	    || range_type == NONE_BOUND_DEFAULT
-	    || range_type == NONE_BOUND_DEFAULT_EXCLUSIVE)
-	  print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-	fputs_filtered ("..", stream);
-	if (range_type == LOW_BOUND_DEFAULT
-	    || range_type == NONE_BOUND_DEFAULT)
-	  print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
-	fputs_filtered (")", stream);
-	return;
-      }
-
-      /* Default ops */
-
-    default:
-      op_str = "???";
-      for (tem = 0; op_print_tab[tem].opcode != OP_NULL; tem++)
-	if (op_print_tab[tem].opcode == opcode)
-	  {
-	    op_str = op_print_tab[tem].string;
-	    myprec = op_print_tab[tem].precedence;
-	    assoc = op_print_tab[tem].right_assoc;
-	    break;
-	  }
-      if (op_print_tab[tem].opcode != opcode)
-	/* Not found; don't try to keep going because we don't know how
-	   to interpret further elements.  For example, this happens
-	   if opcode is OP_TYPE.  */
-	error (_("Invalid expression"));
-    }
-
-  /* Note that PREC_BUILTIN will always emit parentheses.  */
-  if ((int) myprec < (int) prec)
-    fputs_filtered ("(", stream);
-  if ((int) opcode > (int) BINOP_END)
-    {
-      if (assoc)
-	{
-	  /* Unary postfix operator.  */
-	  print_subexp (exp, pos, stream, PREC_SUFFIX);
-	  fputs_filtered (op_str, stream);
-	}
-      else
-	{
-	  /* Unary prefix operator.  */
-	  fputs_filtered (op_str, stream);
-	  if (myprec == PREC_BUILTIN_FUNCTION)
-	    fputs_filtered ("(", stream);
-	  print_subexp (exp, pos, stream, PREC_PREFIX);
-	  if (myprec == PREC_BUILTIN_FUNCTION)
-	    fputs_filtered (")", stream);
-	}
-    }
-  else
-    {
-      /* Binary operator.  */
-      /* Print left operand.
-         If operator is right-associative,
-         increment precedence for this operand.  */
-      print_subexp (exp, pos, stream,
-		    (enum precedence) ((int) myprec + assoc));
-      /* Print the operator itself.  */
-      if (assign_modify)
-	fprintf_filtered (stream, " %s= ", op_str);
-      else if (op_str[0] == ',')
-	fprintf_filtered (stream, "%s ", op_str);
-      else
-	fprintf_filtered (stream, " %s ", op_str);
-      /* Print right operand.
-         If operator is left-associative,
-         increment precedence for this operand.  */
-      print_subexp (exp, pos, stream,
-		    (enum precedence) ((int) myprec + !assoc));
-    }
-
-  if ((int) myprec < (int) prec)
-    fputs_filtered (")", stream);
-}
-
-/* Return the operator corresponding to opcode OP as
-   a string.   NULL indicates that the opcode was not found in the
-   current language table.  */
-const char *
-op_string (enum exp_opcode op)
-{
-  int tem;
-  const struct op_print *op_print_tab;
-
-  op_print_tab = current_language->la_op_print_tab;
-  for (tem = 0; op_print_tab[tem].opcode != OP_NULL; tem++)
-    if (op_print_tab[tem].opcode == op)
-      return op_print_tab[tem].string;
-  return NULL;
-}
-
-/* Support for dumping the raw data from expressions in a human readable
-   form.  */
-
-static int dump_subexp_body (struct expression *exp, struct ui_file *, int);
-
-/* Name for OPCODE, when it appears in expression EXP.  */
-
-const char *
-op_name (struct expression *exp, enum exp_opcode opcode)
-{
-  if (opcode >= OP_UNUSED_LAST)
-    {
-      char *cell = get_print_cell ();
-      xsnprintf (cell, PRINT_CELL_SIZE, "unknown opcode: %u",
-		 unsigned (opcode));
-      return cell;
-    }
-  return exp->language_defn->la_exp_desc->op_name (opcode);
-}
-
 /* Default name for the standard operator OPCODE (i.e., one defined in
    the definition of enum exp_opcode).  */
 
 const char *
-op_name_standard (enum exp_opcode opcode)
+op_name (enum exp_opcode opcode)
 {
   switch (opcode)
     {
@@ -722,452 +59,148 @@ op_name_standard (enum exp_opcode opcode
     }
 }
 
-/* Print a raw dump of expression EXP to STREAM.
-   NOTE, if non-NULL, is printed as extra explanatory text.  */
-
 void
-dump_raw_expression (struct expression *exp, struct ui_file *stream,
-		     const char *note)
+dump_prefix_expression (struct expression *exp, struct ui_file *stream)
 {
-  int elt;
-  char *eltscan;
-  int eltsize;
-
-  fprintf_filtered (stream, "Dump of expression @ ");
-  gdb_print_host_address (exp, stream);
-  if (note)
-    fprintf_filtered (stream, ", %s:", note);
-  fprintf_filtered (stream, "\n\tLanguage %s, %d elements, %ld bytes each.\n",
-		    exp->language_defn->la_name, exp->nelts,
-		    (long) sizeof (union exp_element));
-  fprintf_filtered (stream, "\t%5s  %20s  %16s  %s\n", "Index", "Opcode",
-		    "Hex Value", "String Value");
-  for (elt = 0; elt < exp->nelts; elt++)
-    {
-      fprintf_filtered (stream, "\t%5d  ", elt);
-
-      const char *opcode_name = op_name (exp, exp->elts[elt].opcode);
-      fprintf_filtered (stream, "%20s  ", opcode_name);
+  exp->op->dump (stream, 0);
+}
 
-      print_longest (stream, 'd', 0, exp->elts[elt].longconst);
-      fprintf_filtered (stream, "  ");
+namespace expr
+{
 
-      for (eltscan = (char *) &exp->elts[elt],
-	   eltsize = sizeof (union exp_element);
-	   eltsize-- > 0;
-	   eltscan++)
-	{
-	  fprintf_filtered (stream, "%c",
-			    isprint (*eltscan) ? (*eltscan & 0xFF) : '.');
-	}
-      fprintf_filtered (stream, "\n");
-    }
+void
+dump_for_expression (struct ui_file *stream, int depth, enum exp_opcode op)
+{
+  fprintf_filtered (stream, _("%*sOperation: %s\n"), depth, "", op_name (op));
 }
 
-/* Dump the subexpression of prefix expression EXP whose operator is at
-   position ELT onto STREAM.  Returns the position of the next 
-   subexpression in EXP.  */
-
-int
-dump_subexp (struct expression *exp, struct ui_file *stream, int elt)
+void
+dump_for_expression (struct ui_file *stream, int depth, const std::string &str)
 {
-  static int indent = 0;
-  int i;
+  fprintf_filtered (stream, _("%*sString: %s\n"), depth, "", str.c_str ());
+}
 
+void
+dump_for_expression (struct ui_file *stream, int depth, struct type *type)
+{
+  fprintf_filtered (stream, _("%*sType: "), depth, "");
+  type_print (type, nullptr, stream, 0);
   fprintf_filtered (stream, "\n");
-  fprintf_filtered (stream, "\t%5d  ", elt);
-
-  for (i = 1; i <= indent; i++)
-    fprintf_filtered (stream, " ");
-  indent += 2;
-
-  fprintf_filtered (stream, "%-20s  ", op_name (exp, exp->elts[elt].opcode));
+}
 
-  elt = dump_subexp_body (exp, stream, elt);
+void
+dump_for_expression (struct ui_file *stream, int depth, CORE_ADDR addr)
+{
+  fprintf_filtered (stream, _("%*sConstant: %s\n"), depth, "",
+		     core_addr_to_string (addr));
+}
 
-  indent -= 2;
+void
+dump_for_expression (struct ui_file *stream, int depth, internalvar *ivar)
+{
+  fprintf_filtered (stream, _("%*sInternalvar: $%s\n"), depth, "",
+		     internalvar_name (ivar));
+}
 
-  return elt;
+void
+dump_for_expression (struct ui_file *stream, int depth, symbol *sym)
+{
+  fprintf_filtered (stream, _("%*sSymbol: %s\n"), depth, "",
+		     sym->print_name ());
 }
 
-/* Dump the operands of prefix expression EXP whose opcode is at
-   position ELT onto STREAM.  Returns the position of the next 
-   subexpression in EXP.  */
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     bound_minimal_symbol msym)
+{
+  fprintf_filtered (stream, _("%*sMinsym %s in objfile %s\n"), depth, "",
+		    msym.minsym->print_name (), objfile_name (msym.objfile));
+}
 
-static int
-dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
+void
+dump_for_expression (struct ui_file *stream, int depth, const block *bl)
 {
-  return exp->language_defn->la_exp_desc->dump_subexp_body (exp, stream, elt);
+  fprintf_filtered (stream, _("%*sBlock: %p\n"), depth, "", bl);
 }
 
-/* Default value for subexp_body in exp_descriptor vector.  */
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     const block_symbol &sym)
+{
+  fprintf_filtered (stream, _("%*sBlock symbol:\n"), depth, "");
+  dump_for_expression (stream, depth + 1, sym.symbol);
+  dump_for_expression (stream, depth + 1, sym.block);
+}
 
-int
-dump_subexp_body_standard (struct expression *exp, 
-			   struct ui_file *stream, int elt)
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     type_instance_flags flags)
 {
-  int opcode = exp->elts[elt++].opcode;
+  fprintf_filtered (stream, _("%*sType flags: "), depth, "");
+  if (flags & TYPE_INSTANCE_FLAG_CONST)
+    fputs_unfiltered ("const ", stream);
+  if (flags & TYPE_INSTANCE_FLAG_VOLATILE)
+    fputs_unfiltered ("volatile", stream);
+  fprintf_filtered (stream, "\n");
+}
 
-  switch (opcode)
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     enum c_string_type_values flags)
+{
+  fprintf_filtered (stream, _("%*sC string flags: "), depth, "");
+  switch (flags & ~C_CHAR)
     {
-    case TERNOP_COND:
-    case TERNOP_SLICE:
-      elt = dump_subexp (exp, stream, elt);
-      /* FALL THROUGH */
-    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_ASSIGN:
-    case BINOP_COMMA:
-    case BINOP_SUBSCRIPT:
-    case BINOP_EXP:
-    case BINOP_MIN:
-    case BINOP_MAX:
-    case BINOP_INTDIV:
-    case BINOP_ASSIGN_MODIFY:
-    case BINOP_VAL:
-    case BINOP_CONCAT:
-    case BINOP_END:
-    case STRUCTOP_MEMBER:
-    case STRUCTOP_MPTR:
-      elt = dump_subexp (exp, stream, elt);
-      /* FALL THROUGH */
-    case UNOP_NEG:
-    case UNOP_LOGICAL_NOT:
-    case UNOP_COMPLEMENT:
-    case UNOP_IND:
-    case UNOP_ADDR:
-    case UNOP_PREINCREMENT:
-    case UNOP_POSTINCREMENT:
-    case UNOP_PREDECREMENT:
-    case UNOP_POSTDECREMENT:
-    case UNOP_SIZEOF:
-    case UNOP_ALIGNOF:
-    case UNOP_PLUS:
-    case UNOP_CAP:
-    case UNOP_CHR:
-    case UNOP_ORD:
-    case UNOP_ABS:
-    case UNOP_FLOAT:
-    case UNOP_HIGH:
-    case UNOP_MAX:
-    case UNOP_MIN:
-    case UNOP_ODD:
-    case UNOP_TRUNC:
-      elt = dump_subexp (exp, stream, elt);
-      break;
-    case OP_LONG:
-      fprintf_filtered (stream, "Type @");
-      gdb_print_host_address (exp->elts[elt].type, stream);
-      fprintf_filtered (stream, " (");
-      type_print (exp->elts[elt].type, NULL, stream, 0);
-      fprintf_filtered (stream, "), value %ld (0x%lx)",
-			(long) exp->elts[elt + 1].longconst,
-			(long) exp->elts[elt + 1].longconst);
-      elt += 3;
-      break;
-    case OP_FLOAT:
-      fprintf_filtered (stream, "Type @");
-      gdb_print_host_address (exp->elts[elt].type, stream);
-      fprintf_filtered (stream, " (");
-      type_print (exp->elts[elt].type, NULL, stream, 0);
-      fprintf_filtered (stream, "), value ");
-      print_floating (exp->elts[elt + 1].floatconst,
-		      exp->elts[elt].type, stream);
-      elt += 3;
-      break;
-    case OP_VAR_VALUE:
-      fprintf_filtered (stream, "Block @");
-      gdb_print_host_address (exp->elts[elt].block, stream);
-      fprintf_filtered (stream, ", symbol @");
-      gdb_print_host_address (exp->elts[elt + 1].symbol, stream);
-      fprintf_filtered (stream, " (%s)",
-			exp->elts[elt + 1].symbol->print_name ());
-      elt += 3;
-      break;
-    case OP_VAR_MSYM_VALUE:
-      fprintf_filtered (stream, "Objfile @");
-      gdb_print_host_address (exp->elts[elt].objfile, stream);
-      fprintf_filtered (stream, ", msymbol @");
-      gdb_print_host_address (exp->elts[elt + 1].msymbol, stream);
-      fprintf_filtered (stream, " (%s)",
-			exp->elts[elt + 1].msymbol->print_name ());
-      elt += 3;
-      break;
-    case OP_VAR_ENTRY_VALUE:
-      fprintf_filtered (stream, "Entry value of symbol @");
-      gdb_print_host_address (exp->elts[elt].symbol, stream);
-      fprintf_filtered (stream, " (%s)",
-			exp->elts[elt].symbol->print_name ());
-      elt += 2;
-      break;
-    case OP_LAST:
-      fprintf_filtered (stream, "History element %ld",
-			(long) exp->elts[elt].longconst);
-      elt += 2;
-      break;
-    case OP_REGISTER:
-      fprintf_filtered (stream, "Register $%s", &exp->elts[elt + 1].string);
-      elt += 3 + BYTES_TO_EXP_ELEM (exp->elts[elt].longconst + 1);
-      break;
-    case OP_INTERNALVAR:
-      fprintf_filtered (stream, "Internal var @");
-      gdb_print_host_address (exp->elts[elt].internalvar, stream);
-      fprintf_filtered (stream, " (%s)",
-			internalvar_name (exp->elts[elt].internalvar));
-      elt += 2;
-      break;
-    case OP_FUNCALL:
-    case OP_F77_UNDETERMINED_ARGLIST:
-      {
-	int i, nargs;
-
-	nargs = longest_to_int (exp->elts[elt].longconst);
-
-	fprintf_filtered (stream, "Number of args: %d", nargs);
-	elt += 2;
-
-	for (i = 1; i <= nargs + 1; i++)
-	  elt = dump_subexp (exp, stream, elt);
-      }
-      break;
-    case OP_ARRAY:
-      {
-	int lower, upper;
-	int i;
-
-	lower = longest_to_int (exp->elts[elt].longconst);
-	upper = longest_to_int (exp->elts[elt + 1].longconst);
-
-	fprintf_filtered (stream, "Bounds [%d:%d]", lower, upper);
-	elt += 3;
-
-	for (i = 1; i <= upper - lower + 1; i++)
-	  elt = dump_subexp (exp, stream, elt);
-      }
-      break;
-    case UNOP_DYNAMIC_CAST:
-    case UNOP_REINTERPRET_CAST:
-    case UNOP_CAST_TYPE:
-    case UNOP_MEMVAL_TYPE:
-      fprintf_filtered (stream, " (");
-      elt = dump_subexp (exp, stream, elt);
-      fprintf_filtered (stream, ")");
-      elt = dump_subexp (exp, stream, elt);
-      break;
-    case UNOP_MEMVAL:
-    case UNOP_CAST:
-      fprintf_filtered (stream, "Type @");
-      gdb_print_host_address (exp->elts[elt].type, stream);
-      fprintf_filtered (stream, " (");
-      type_print (exp->elts[elt].type, NULL, stream, 0);
-      fprintf_filtered (stream, ")");
-      elt = dump_subexp (exp, stream, elt + 2);
+    case C_WIDE_STRING:
+      fputs_unfiltered (_("wide "), stream);
       break;
-    case OP_TYPE:
-      fprintf_filtered (stream, "Type @");
-      gdb_print_host_address (exp->elts[elt].type, stream);
-      fprintf_filtered (stream, " (");
-      type_print (exp->elts[elt].type, NULL, stream, 0);
-      fprintf_filtered (stream, ")");
-      elt += 2;
+    case C_STRING_16:
+      fputs_unfiltered (_("u16 "), stream);
       break;
-    case OP_TYPEOF:
-    case OP_DECLTYPE:
-      fprintf_filtered (stream, "Typeof (");
-      elt = dump_subexp (exp, stream, elt);
-      fprintf_filtered (stream, ")");
+    case C_STRING_32:
+      fputs_unfiltered (_("u32 "), stream);
       break;
-    case OP_TYPEID:
-      fprintf_filtered (stream, "typeid (");
-      elt = dump_subexp (exp, stream, elt);
-      fprintf_filtered (stream, ")");
-      break;
-    case STRUCTOP_STRUCT:
-    case STRUCTOP_PTR:
-      {
-	char *elem_name;
-	int len;
-
-	len = longest_to_int (exp->elts[elt].longconst);
-	elem_name = &exp->elts[elt + 1].string;
-
-	fprintf_filtered (stream, "Element name: `%.*s'", len, elem_name);
-	elt = dump_subexp (exp, stream, elt + 3 + BYTES_TO_EXP_ELEM (len + 1));
-      }
-      break;
-    case OP_SCOPE:
-      {
-	char *elem_name;
-	int len;
-
-	fprintf_filtered (stream, "Type @");
-	gdb_print_host_address (exp->elts[elt].type, stream);
-	fprintf_filtered (stream, " (");
-	type_print (exp->elts[elt].type, NULL, stream, 0);
-	fprintf_filtered (stream, ") ");
-
-	len = longest_to_int (exp->elts[elt + 1].longconst);
-	elem_name = &exp->elts[elt + 2].string;
-
-	fprintf_filtered (stream, "Field name: `%.*s'", len, elem_name);
-	elt += 4 + BYTES_TO_EXP_ELEM (len + 1);
-      }
-      break;
-
-    case OP_FUNC_STATIC_VAR:
-      {
-	int len = longest_to_int (exp->elts[elt].longconst);
-	const char *var_name = &exp->elts[elt + 1].string;
-	fprintf_filtered (stream, "Field name: `%.*s'", len, var_name);
-	elt += 3 + BYTES_TO_EXP_ELEM (len + 1);
-      }
-      break;
-
-    case TYPE_INSTANCE:
-      {
-	type_instance_flags flags
-	  = (type_instance_flag_value) longest_to_int (exp->elts[elt++].longconst);
-	LONGEST len = exp->elts[elt++].longconst;
-	fprintf_filtered (stream, "%s TypeInstance: ", plongest (len));
-	while (len-- > 0)
-	  {
-	    fprintf_filtered (stream, "Type @");
-	    gdb_print_host_address (exp->elts[elt].type, stream);
-	    fprintf_filtered (stream, " (");
-	    type_print (exp->elts[elt].type, NULL, stream, 0);
-	    fprintf_filtered (stream, ")");
-	    elt++;
-	    if (len > 0)
-	      fputs_filtered (", ", stream);
-	  }
-
-	fprintf_filtered (stream, " Flags: %s (", hex_string (flags));
-	bool space = false;
-	auto print_one = [&] (const char *mod)
-	  {
-	    if (space)
-	      fputs_filtered (" ", stream);
-	    space = true;
-	    fprintf_filtered (stream, "%s", mod);
-	  };
-	if (flags & TYPE_INSTANCE_FLAG_CONST)
-	  print_one ("const");
-	if (flags & TYPE_INSTANCE_FLAG_VOLATILE)
-	  print_one ("volatile");
-	fprintf_filtered (stream, ")");
-
-	/* Ending LEN and ending TYPE_INSTANCE.  */
-	elt += 2;
-	elt = dump_subexp (exp, stream, elt);
-      }
-      break;
-    case OP_STRING:
-      {
-	LONGEST len = exp->elts[elt].longconst;
-	LONGEST type = exp->elts[elt + 1].longconst;
-
-	fprintf_filtered (stream, "Language-specific string type: %s",
-			  plongest (type));
-
-	/* Skip length.  */
-	elt += 1;
-
-	/* Skip string content. */
-	elt += BYTES_TO_EXP_ELEM (len);
-
-	/* Skip length and ending OP_STRING. */
-	elt += 2;
-      }
-      break;
-    case OP_RANGE:
-      {
-	enum range_type range_type;
-
-	range_type = (enum range_type)
-	  longest_to_int (exp->elts[elt].longconst);
-	elt += 2;
-
-	switch (range_type)
-	  {
-	  case BOTH_BOUND_DEFAULT:
-	    fputs_filtered ("Range '..'", stream);
-	    break;
-	  case LOW_BOUND_DEFAULT:
-	    fputs_filtered ("Range '..EXP'", stream);
-	    break;
-	  case LOW_BOUND_DEFAULT_EXCLUSIVE:
-	    fputs_filtered ("ExclusiveRange '..EXP'", stream);
-	    break;
-	  case HIGH_BOUND_DEFAULT:
-	    fputs_filtered ("Range 'EXP..'", stream);
-	    break;
-	  case NONE_BOUND_DEFAULT:
-	    fputs_filtered ("Range 'EXP..EXP'", stream);
-	    break;
-	  case NONE_BOUND_DEFAULT_EXCLUSIVE:
-	    fputs_filtered ("ExclusiveRange 'EXP..EXP'", stream);
-	    break;
-	  default:
-	    fputs_filtered ("Invalid Range!", stream);
-	    break;
-	  }
-
-	if (range_type == HIGH_BOUND_DEFAULT
-	    || range_type == NONE_BOUND_DEFAULT)
-	  elt = dump_subexp (exp, stream, elt);
-	if (range_type == LOW_BOUND_DEFAULT
-	    || range_type == NONE_BOUND_DEFAULT)
-	  elt = dump_subexp (exp, stream, elt);
-      }
-      break;
-
     default:
-    case OP_NULL:
-    case MULTI_SUBSCRIPT:
-    case OP_COMPLEX:
-    case OP_BOOL:
-    case OP_M2_STRING:
-    case OP_THIS:
-    case OP_NAME:
-      fprintf_filtered (stream, "Unknown format");
+      fputs_unfiltered (_("ordinary "), stream);
+      break;
     }
 
-  return elt;
+  if ((flags & C_CHAR) != 0)
+    fputs_unfiltered (_("char"), stream);
+  else
+    fputs_unfiltered (_("string"), stream);
+  fputs_unfiltered ("\n", stream);
 }
 
 void
-dump_prefix_expression (struct expression *exp, struct ui_file *stream)
+dump_for_expression (struct ui_file *stream, int depth,
+		     enum range_flag flags)
+{
+  fprintf_filtered (stream, _("%*sRange:"), depth, "");
+  if ((flags & RANGE_LOW_BOUND_DEFAULT) != 0)
+    fputs_unfiltered (_("low-default "), stream);
+  if ((flags & RANGE_HIGH_BOUND_DEFAULT) != 0)
+    fputs_unfiltered (_("high-default "), stream);
+  if ((flags & RANGE_HIGH_BOUND_EXCLUSIVE) != 0)
+    fputs_unfiltered (_("high-exclusive "), stream);
+  if ((flags & RANGE_HAS_STRIDE) != 0)
+    fputs_unfiltered (_("has-stride"), stream);
+  fprintf_filtered (stream, "\n");
+}
+
+void
+dump_for_expression (struct ui_file *stream, int depth,
+		     const std::unique_ptr<ada_component> &comp)
 {
-  int elt;
+  comp->dump (stream, depth);
+}
 
-  fprintf_filtered (stream, "Dump of expression @ ");
-  gdb_print_host_address (exp, stream);
-  fputs_filtered (", after conversion to prefix form:\nExpression: `", stream);
-  print_expression (exp, stream);
-  fprintf_filtered (stream, "'\n\tLanguage %s, %d elements, %ld bytes each.\n",
-		    exp->language_defn->la_name, exp->nelts,
-		    (long) sizeof (union exp_element));
-  fputs_filtered ("\n", stream);
-
-  for (elt = 0; elt < exp->nelts;)
-    elt = dump_subexp (exp, stream, elt);
-  fputs_filtered ("\n", stream);
+void
+float_const_operation::dump (struct ui_file *stream, int depth) const
+{
+  fprintf_filtered (stream, _("%*sFloat: "), depth, "");
+  print_floating (m_data.data (), m_type, stream);
+  fprintf_filtered (stream, "\n");
 }
+
+} /* namespace expr */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/expression.h ./gdb/expression.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/expression.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/expression.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for expressions stored in reversed prefix form, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -40,82 +40,194 @@ enum innermost_block_tracker_type
 DEF_ENUM_FLAGS_TYPE (enum innermost_block_tracker_type,
 		     innermost_block_tracker_types);
 
-/* Definitions for saved C expressions.  */
-
-/* An expression is represented as a vector of union exp_element's.
-   Each exp_element is an opcode, except that some opcodes cause
-   the following exp_element to be treated as a long or double constant
-   or as a variable.  The opcodes are obeyed, using a stack for temporaries.
-   The value is left on the temporary stack at the end.  */
-
-/* When it is necessary to include a string,
-   it can occupy as many exp_elements as it needs.
-   We find the length of the string using strlen,
-   divide to find out how many exp_elements are used up,
-   and skip that many.  Strings, like numbers, are indicated
-   by the preceding opcode.  */
-
 enum exp_opcode : uint8_t
   {
 #define OP(name) name ,
 
 #include "std-operator.def"
 
-    /* First extension operator.  Individual language modules define extra
-       operators in *.def include files below with numbers higher than
-       OP_EXTENDED0.  */
-    OP (OP_EXTENDED0)
-
-/* Language specific operators.  */
-#include "ada-operator.def"
-#include "fortran-operator.def"
-
 #undef OP
-
-    /* Existing only to swallow the last comma (',') from last .inc file.  */
-    OP_UNUSED_LAST
   };
 
-union exp_element
+/* Values of NOSIDE argument to eval_subexp.  */
+
+enum noside
   {
-    enum exp_opcode opcode;
-    struct symbol *symbol;
-    struct minimal_symbol *msymbol;
-    LONGEST longconst;
-    gdb_byte floatconst[16];
-    /* Really sizeof (union exp_element) characters (or less for the last
-       element of a string).  */
-    char string;
-    struct type *type;
-    struct internalvar *internalvar;
-    const struct block *block;
-    struct objfile *objfile;
+    EVAL_NORMAL,
+    EVAL_AVOID_SIDE_EFFECTS	/* Don't modify any variables or
+				   call any functions.  The value
+				   returned will have the correct
+				   type, and will have an
+				   approximately correct lvalue
+				   type (inaccuracy: anything that is
+				   listed as being in a register in
+				   the function in which it was
+				   declared will be lval_register).
+				   Ideally this would not even read
+				   target memory, but currently it
+				   does in many situations.  */
   };
 
+struct expression;
+struct agent_expr;
+struct axs_value;
+struct type;
+struct ui_file;
+
+namespace expr
+{
+
+class operation;
+typedef std::unique_ptr<operation> operation_up;
+
+/* Base class for an operation.  An operation is a single component of
+   an expression.  */
+
+class operation
+{
+protected:
+
+  operation () = default;
+  DISABLE_COPY_AND_ASSIGN (operation);
+
+public:
+
+  virtual ~operation () = default;
+
+  /* Evaluate this operation.  */
+  virtual value *evaluate (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside) = 0;
+
+  /* Evaluate this operation in a context where C-like coercion is
+     needed.  */
+  virtual value *evaluate_with_coercion (struct expression *exp,
+					 enum noside noside)
+  {
+    return evaluate (nullptr, exp, noside);
+  }
+
+  /* Evaluate this expression in the context of a cast to
+     EXPECT_TYPE.  */
+  virtual value *evaluate_for_cast (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside);
+
+  /* Evaluate this expression in the context of a sizeof
+     operation.  */
+  virtual value *evaluate_for_sizeof (struct expression *exp,
+				      enum noside noside);
+
+  /* Evaluate this expression in the context of an address-of
+     operation.  Must return the address.  */
+  virtual value *evaluate_for_address (struct expression *exp,
+				       enum noside noside);
+
+  /* Evaluate a function call, with this object as the callee.
+     EXPECT_TYPE, EXP, and NOSIDE have the same meaning as in
+     'evaluate'.  ARGS holds the operations that should be evaluated
+     to get the arguments to the call.  */
+  virtual value *evaluate_funcall (struct type *expect_type,
+				   struct expression *exp,
+				   enum noside noside,
+				   const std::vector<operation_up> &args)
+  {
+    /* Defer to the helper overload.  */
+    return evaluate_funcall (expect_type, exp, noside, nullptr, args);
+  }
+
+  /* True if this is a constant expression.  */
+  virtual bool constant_p () const
+  { return false; }
+
+  /* Return true if this operation uses OBJFILE (and will become
+     dangling when OBJFILE is unloaded), otherwise return false.
+     OBJFILE must not be a separate debug info file.  */
+  virtual bool uses_objfile (struct objfile *objfile) const
+  { return false; }
+
+  /* Generate agent expression bytecodes for this operation.  */
+  void generate_ax (struct expression *exp, struct agent_expr *ax,
+		    struct axs_value *value,
+		    struct type *cast_type = nullptr);
+
+  /* Return the opcode that is implemented by this operation.  */
+  virtual enum exp_opcode opcode () const = 0;
+
+  /* Print this operation to STREAM.  */
+  virtual void dump (struct ui_file *stream, int depth) const = 0;
+
+  /* Call to indicate that this is the outermost operation in the
+     expression.  This should almost never be overridden.  */
+  virtual void set_outermost () { }
+
+protected:
+
+  /* A helper overload that wraps evaluate_subexp_do_call.  */
+  value *evaluate_funcall (struct type *expect_type,
+			   struct expression *exp,
+			   enum noside noside,
+			   const char *function_name,
+			   const std::vector<operation_up> &args);
+
+  /* Called by generate_ax to do the work for this particular
+     operation.  */
+  virtual void do_generate_ax (struct expression *exp,
+			       struct agent_expr *ax,
+			       struct axs_value *value,
+			       struct type *cast_type)
+  {
+    error (_("Cannot translate to agent expression"));
+  }
+};
+
+/* A helper function for creating an operation_up, given a type.  */
+template<typename T, typename... Arg>
+operation_up
+make_operation (Arg... args)
+{
+  return operation_up (new T (std::forward<Arg> (args)...));
+}
+
+}
+
 struct expression
+{
+  expression (const struct language_defn *lang, struct gdbarch *arch)
+    : language_defn (lang),
+      gdbarch (arch)
   {
-    const struct language_defn *language_defn;	/* language it was
-						   entered in.  */
-    struct gdbarch *gdbarch;  /* architecture it was parsed in.  */
-    int nelts;
-    union exp_element elts[1];
-  };
+  }
+
+  DISABLE_COPY_AND_ASSIGN (expression);
 
-typedef gdb::unique_xmalloc_ptr<expression> expression_up;
+  /* Return the opcode for the outermost sub-expression of this
+     expression.  */
+  enum exp_opcode first_opcode () const
+  {
+    return op->opcode ();
+  }
 
-/* Macros for converting between number of expression elements and bytes
-   to store that many expression elements.  */
+  /* Evaluate the expression.  EXPECT_TYPE is the context type of the
+     expression; normally this should be nullptr.  NOSIDE controls how
+     evaluation is performed.  */
+  struct value *evaluate (struct type *expect_type, enum noside noside);
+
+  /* Language it was entered in.  */
+  const struct language_defn *language_defn;
+  /* Architecture it was parsed in.  */
+  struct gdbarch *gdbarch;
+  expr::operation_up op;
+};
 
-#define EXP_ELEM_TO_BYTES(elements) \
-    ((elements) * sizeof (union exp_element))
-#define BYTES_TO_EXP_ELEM(bytes) \
-    (((bytes) + sizeof (union exp_element) - 1) / sizeof (union exp_element))
+typedef std::unique_ptr<expression> expression_up;
 
 /* From parse.c */
 
 class innermost_block_tracker;
 extern expression_up parse_expression (const char *,
-				       innermost_block_tracker * = nullptr);
+				       innermost_block_tracker * = nullptr,
+				       bool void_context_p = false);
 
 extern expression_up parse_expression_with_language (const char *string,
 						     enum language lang);
@@ -130,41 +242,23 @@ extern expression_up parse_exp_1 (const
 
 /* From eval.c */
 
-/* Values of NOSIDE argument to eval_subexp.  */
-
-enum noside
-  {
-    EVAL_NORMAL,
-    EVAL_SKIP,			/* Only effect is to increment pos.
-				   Return type information where
-				   possible.  */
-    EVAL_AVOID_SIDE_EFFECTS	/* Don't modify any variables or
-				   call any functions.  The value
-				   returned will have the correct
-				   type, and will have an
-				   approximately correct lvalue
-				   type (inaccuracy: anything that is
-				   listed as being in a register in
-				   the function in which it was
-				   declared will be lval_register).
-				   Ideally this would not even read
-				   target memory, but currently it
-				   does in many situations.  */
-  };
-
-extern struct value *evaluate_subexp_standard
-  (struct type *, struct expression *, int *, enum noside);
+/* Evaluate a function call.  The function to be called is in CALLEE and
+   the arguments passed to the function are in ARGVEC.
+   FUNCTION_NAME is the name of the function, if known.
+   DEFAULT_RETURN_TYPE is used as the function's return type if the return
+   type is unknown.  */
+
+extern struct value *evaluate_subexp_do_call (expression *exp,
+					      enum noside noside,
+					      value *callee,
+					      gdb::array_view<value *> argvec,
+					      const char *function_name,
+					      type *default_return_type);
 
 /* From expprint.c */
 
-extern void print_expression (struct expression *, struct ui_file *);
-
-extern const char *op_name (struct expression *exp, enum exp_opcode opcode);
+extern const char *op_name (enum exp_opcode opcode);
 
-extern const char *op_string (enum exp_opcode);
-
-extern void dump_raw_expression (struct expression *,
-				 struct ui_file *, const char *);
 extern void dump_prefix_expression (struct expression *, struct ui_file *);
 
 /* In an OP_RANGE expression, either bound could be empty, indicating
@@ -173,22 +267,25 @@ extern void dump_prefix_expression (stru
    or inclusive.  So we have six sorts of subrange.  This enumeration
    type is to identify this.  */
 
-enum range_type
+enum range_flag : unsigned
 {
-  /* Neither the low nor the high bound was given -- so this refers to
-     the entire available range.  */
-  BOTH_BOUND_DEFAULT,
-  /* The low bound was not given and the high bound is inclusive.  */
-  LOW_BOUND_DEFAULT,
-  /* The high bound was not given and the low bound in inclusive.  */
-  HIGH_BOUND_DEFAULT,
-  /* Both bounds were given and both are inclusive.  */
-  NONE_BOUND_DEFAULT,
-  /* The low bound was not given and the high bound is exclusive.  */
-  NONE_BOUND_DEFAULT_EXCLUSIVE,
-  /* Both bounds were given.  The low bound is inclusive and the high
-     bound is exclusive.  */
-  LOW_BOUND_DEFAULT_EXCLUSIVE,
+  /* This is a standard range.  Both the lower and upper bounds are
+     defined, and the bounds are inclusive.  */
+  RANGE_STANDARD = 0,
+
+  /* The low bound was not given.  */
+  RANGE_LOW_BOUND_DEFAULT = 1 << 0,
+
+  /* The high bound was not given.  */
+  RANGE_HIGH_BOUND_DEFAULT = 1 << 1,
+
+  /* The high bound of this range is exclusive.  */
+  RANGE_HIGH_BOUND_EXCLUSIVE = 1 << 2,
+
+  /* The range has a stride.  */
+  RANGE_HAS_STRIDE = 1 << 3,
 };
 
+DEF_ENUM_FLAGS_TYPE (enum range_flag, range_flags);
+
 #endif /* !defined (EXPRESSION_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/extension.c ./gdb/extension.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/extension.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/extension.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Interface between gdb and its extension languages.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,24 +32,7 @@
 #include "cli/cli-script.h"
 #include "python/python.h"
 #include "guile/guile.h"
-
-/* Iterate over all external extension languages, regardless of whether the
-   support has been compiled in or not.
-   This does not include GDB's own scripting language.  */
-
-#define ALL_EXTENSION_LANGUAGES(i, extlang) \
-  for (/*int*/ i = 0, extlang = extension_languages[0]; \
-       extlang != NULL; \
-       extlang = extension_languages[++i])
-
-/* Iterate over all external extension languages that are supported.
-   This does not include GDB's own scripting language.  */
-
-#define ALL_ENABLED_EXTENSION_LANGUAGES(i, extlang) \
-  for (/*int*/ i = 0, extlang = extension_languages[0]; \
-       extlang != NULL; \
-       extlang = extension_languages[++i]) \
-    if (extlang->ops != NULL)
+#include <array>
 
 static script_sourcer_func source_gdb_script;
 static objfile_script_sourcer_func source_gdb_objfile_script;
@@ -99,12 +82,11 @@ const struct extension_language_defn ext
    pretty-printed value is the one that is used.  This algorithm is employed
    throughout.  */
 
-static const struct extension_language_defn * const extension_languages[] =
+static const std::array<const extension_language_defn *, 2> extension_languages
 {
   /* To preserve existing behaviour, python should always appear first.  */
   &extension_language_python,
   &extension_language_guile,
-  NULL
 };
 
 /* Return a pointer to the struct extension_language_defn object of
@@ -115,15 +97,12 @@ static const struct extension_language_d
 const struct extension_language_defn *
 get_ext_lang_defn (enum extension_language lang)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
   gdb_assert (lang != EXT_LANG_NONE);
 
   if (lang == EXT_LANG_GDB)
     return &extension_language_gdb;
 
-  ALL_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       if (extlang->language == lang)
 	return extlang;
@@ -151,13 +130,10 @@ has_extension (const char *file, const c
 const struct extension_language_defn *
 get_ext_lang_of_file (const char *file)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
   if (has_extension (file, extension_language_gdb.suffix))
     return &extension_language_gdb;
 
-  ALL_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       if (has_extension (file, extlang->suffix))
 	return extlang;
@@ -306,14 +282,13 @@ ext_lang_objfile_script_executor
   return extlang->script_ops->objfile_script_executor;
 }
 
-/* Return non-zero if auto-loading of EXTLANG scripts is enabled.
-   Zero is returned if support for this language isn't compiled in.  */
+/* See extension.h.  */
 
-int
+bool
 ext_lang_auto_load_enabled (const struct extension_language_defn *extlang)
 {
   if (extlang->script_ops == NULL)
-    return 0;
+    return false;
 
   /* The extension language is required to implement this function.  */
   gdb_assert (extlang->script_ops->auto_load_enabled != NULL);
@@ -321,23 +296,47 @@ ext_lang_auto_load_enabled (const struct
   return extlang->script_ops->auto_load_enabled (extlang);
 }
 
+
+/* RAII class used to temporarily return SIG to its default handler.  */
+
+template<int SIG>
+struct scoped_default_signal
+{
+  scoped_default_signal ()
+  { m_old_sig_handler = signal (SIG, SIG_DFL); }
+
+  ~scoped_default_signal ()
+  { signal (SIG, m_old_sig_handler); }
+
+  DISABLE_COPY_AND_ASSIGN (scoped_default_signal);
+
+private:
+  /* The previous signal handler that needs to be restored.  */
+  sighandler_t m_old_sig_handler;
+};
+
+/* Class to temporarily return SIGINT to its default handler.  */
+
+using scoped_default_sigint = scoped_default_signal<SIGINT>;
+
 /* Functions that iterate over all extension languages.
    These only iterate over external extension languages, not including
    GDB's own extension/scripting language, unless otherwise indicated.  */
 
-/* Wrapper to call the extension_language_ops.finish_initialization "method"
-   for each compiled-in extension language.  */
+/* Wrapper to call the extension_language_ops.initialize "method" for each
+   compiled-in extension language.  */
 
 void
-finish_ext_lang_initialization (void)
+ext_lang_initialization (void)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (extlang->ops->finish_initialization != NULL)
-	extlang->ops->finish_initialization (extlang);
+      if (extlang->ops != nullptr
+	  && extlang->ops->initialize != NULL)
+	{
+	  scoped_default_sigint set_sigint_to_default_handler;
+	  extlang->ops->initialize (extlang);
+	}
     }
 }
 
@@ -355,10 +354,7 @@ finish_ext_lang_initialization (void)
 void
 eval_ext_lang_from_control_command (struct command_line *cmd)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       if (extlang->cli_control_type == cmd->control_type)
 	{
@@ -385,16 +381,14 @@ eval_ext_lang_from_control_command (stru
 void
 auto_load_ext_lang_scripts_for_objfile (struct objfile *objfile)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  extlang = &extension_language_gdb;
-  if (ext_lang_auto_load_enabled (extlang))
-    auto_load_objfile_script (objfile, extlang);
+  const struct extension_language_defn *gdb = &extension_language_gdb;
+  if (ext_lang_auto_load_enabled (gdb))
+    auto_load_objfile_script (objfile, gdb);
 
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (ext_lang_auto_load_enabled (extlang))
+      if (extlang->ops != nullptr
+	  && ext_lang_auto_load_enabled (extlang))
 	auto_load_objfile_script (objfile, extlang);
     }
 }
@@ -410,12 +404,10 @@ auto_load_ext_lang_scripts_for_objfile (
 
 ext_lang_type_printers::ext_lang_type_printers ()
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (extlang->ops->start_type_printers != NULL)
+      if (extlang->ops != nullptr
+	  && extlang->ops->start_type_printers != NULL)
 	extlang->ops->start_type_printers (extlang, this);
     }
 }
@@ -429,15 +421,13 @@ char *
 apply_ext_lang_type_printers (struct ext_lang_type_printers *printers,
 			      struct type *type)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       char *result = NULL;
       enum ext_lang_rc rc;
 
-      if (extlang->ops->apply_type_printers == NULL)
+      if (extlang->ops == nullptr
+	  || extlang->ops->apply_type_printers == NULL)
 	continue;
       rc = extlang->ops->apply_type_printers (extlang, printers, type,
 					      &result);
@@ -460,22 +450,17 @@ apply_ext_lang_type_printers (struct ext
 
 ext_lang_type_printers::~ext_lang_type_printers ()
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (extlang->ops->free_type_printers != NULL)
+      if (extlang->ops != nullptr
+	  && extlang->ops->free_type_printers != NULL)
 	extlang->ops->free_type_printers (extlang, this);
     }
 }
 
-/* Try to pretty-print a value of type TYPE located at VAL's contents
-   buffer + EMBEDDED_OFFSET, which came from the inferior at address
-   ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to
-   OPTIONS.
-   VAL is the whole object that came from ADDRESS.
-   Returns non-zero if the value was successfully pretty-printed.
+/* Try to pretty-print a value onto stdio stream STREAM according to
+   OPTIONS.  VAL is the object to print.  Returns non-zero if the
+   value was successfully pretty-printed.
 
    Extension languages are tried in the order specified by
    extension_languages.  The first one to provide a pretty-printed
@@ -488,26 +473,20 @@ ext_lang_type_printers::~ext_lang_type_p
    errors that trigger an exception in the extension language.  */
 
 int
-apply_ext_lang_val_pretty_printer (struct type *type,
-				   LONGEST embedded_offset, CORE_ADDR address,
+apply_ext_lang_val_pretty_printer (struct value *val,
 				   struct ui_file *stream, int recurse,
-				   struct value *val,
 				   const struct value_print_options *options,
 				   const struct language_defn *language)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       enum ext_lang_rc rc;
 
-      if (extlang->ops->apply_val_pretty_printer == NULL)
+      if (extlang->ops == nullptr
+	  || extlang->ops->apply_val_pretty_printer == NULL)
 	continue;
-      rc = extlang->ops->apply_val_pretty_printer (extlang, type,
-						   embedded_offset, address,
-						   stream, recurse, val,
-						   options, language);
+      rc = extlang->ops->apply_val_pretty_printer (extlang, val, stream,
+						   recurse, options, language);
       switch (rc)
 	{
 	case EXT_LANG_RC_OK:
@@ -551,14 +530,12 @@ apply_ext_lang_frame_filter (struct fram
 			     struct ui_out *out,
 			     int frame_low, int frame_high)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       enum ext_lang_bt_status status;
 
-      if (extlang->ops->apply_frame_filter == NULL)
+      if (extlang->ops == nullptr
+	  || extlang->ops->apply_frame_filter == NULL)
 	continue;
       status = extlang->ops->apply_frame_filter (extlang, frame, flags,
 					       args_type, out,
@@ -584,12 +561,10 @@ apply_ext_lang_frame_filter (struct fram
 void
 preserve_ext_lang_values (struct objfile *objfile, htab_t copied_types)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (extlang->ops->preserve_values != NULL)
+      if (extlang->ops != nullptr
+	  && extlang->ops->preserve_values != NULL)
 	extlang->ops->preserve_values (extlang, objfile, copied_types);
     }
 }
@@ -607,12 +582,10 @@ const struct extension_language_defn *
 get_breakpoint_cond_ext_lang (struct breakpoint *b,
 			      enum extension_language skip_lang)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (extlang->language != skip_lang
+      if (extlang->ops != nullptr
+	  && extlang->language != skip_lang
 	  && extlang->ops->breakpoint_has_cond != NULL
 	  && extlang->ops->breakpoint_has_cond (extlang, b))
 	return extlang;
@@ -627,18 +600,17 @@ get_breakpoint_cond_ext_lang (struct bre
 int
 breakpoint_ext_lang_cond_says_stop (struct breakpoint *b)
 {
-  int i;
-  const struct extension_language_defn *extlang;
   enum ext_lang_bp_stop stop = EXT_LANG_BP_STOP_UNSET;
 
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       /* There is a rule that a breakpoint can have at most one of any of a
 	 CLI or extension language condition.  However, Python hacks in "finish
 	 breakpoints" on top of the "stop" check, so we have to call this for
 	 every language, even if we could first determine whether a "stop"
 	 method exists.  */
-      if (extlang->ops->breakpoint_cond_says_stop != NULL)
+      if (extlang->ops != nullptr
+	  && extlang->ops->breakpoint_cond_says_stop != NULL)
 	{
 	  enum ext_lang_bp_stop this_stop
 	    = extlang->ops->breakpoint_cond_says_stop (extlang, b);
@@ -820,12 +792,12 @@ set_quit_flag (void)
 int
 check_quit_flag (void)
 {
-  int i, result = 0;
-  const struct extension_language_defn *extlang;
+  int result = 0;
 
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
-      if (extlang->ops->check_quit_flag != NULL)
+      if (extlang->ops != nullptr
+	  && extlang->ops->check_quit_flag != NULL)
 	if (extlang->ops->check_quit_flag (extlang) != 0)
 	  result = 1;
     }
@@ -850,16 +822,14 @@ void
 get_matching_xmethod_workers (struct type *type, const char *method_name,
 			      std::vector<xmethod_worker_up> *workers)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       enum ext_lang_rc rc;
 
       /* If an extension language does not support xmethods, ignore
 	 it.  */
-      if (extlang->ops->get_matching_xmethod_workers == NULL)
+      if (extlang->ops == nullptr
+	  || extlang->ops->get_matching_xmethod_workers == NULL)
 	continue;
 
       rc = extlang->ops->get_matching_xmethod_workers (extlang,
@@ -903,6 +873,26 @@ xmethod_worker::get_result_type (value *
   return result_type;
 }
 
+/* See extension.h.  */
+
+gdb::optional<std::string>
+ext_lang_colorize (const std::string &filename, const std::string &contents)
+{
+  gdb::optional<std::string> result;
+
+  for (const struct extension_language_defn *extlang : extension_languages)
+    {
+      if (extlang->ops == nullptr
+	  || extlang->ops->colorize == nullptr)
+	continue;
+      result = extlang->ops->colorize (filename, contents);
+      if (result.has_value ())
+	return result;
+    }
+
+  return result;
+}
+
 /* Called via an observer before gdb prints its prompt.
    Iterate over the extension languages giving them a chance to
    change the prompt.  The first one to change the prompt wins,
@@ -911,14 +901,12 @@ xmethod_worker::get_result_type (value *
 static void
 ext_lang_before_prompt (const char *current_gdb_prompt)
 {
-  int i;
-  const struct extension_language_defn *extlang;
-
-  ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+  for (const struct extension_language_defn *extlang : extension_languages)
     {
       enum ext_lang_rc rc;
 
-      if (extlang->ops->before_prompt == NULL)
+      if (extlang->ops == nullptr
+	  || extlang->ops->before_prompt == NULL)
 	continue;
       rc = extlang->ops->before_prompt (extlang, current_gdb_prompt);
       switch (rc)
@@ -934,8 +922,9 @@ ext_lang_before_prompt (const char *curr
     }
 }
 
+void _initialize_extension ();
 void
-_initialize_extension (void)
+_initialize_extension ()
 {
-  gdb::observers::before_prompt.attach (ext_lang_before_prompt);
+  gdb::observers::before_prompt.attach (ext_lang_before_prompt, "extension");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/extension.h ./gdb/extension.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/extension.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/extension.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Interface between gdb and its extension languages.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,6 +22,7 @@
 
 #include "mi/mi-cmds.h" /* For PRINT_NO_VALUES, etc.  */
 #include "gdbsupport/array-view.h"
+#include "gdbsupport/gdb_optional.h"
 
 struct breakpoint;
 struct command_line;
@@ -267,12 +268,15 @@ extern objfile_script_sourcer_func *ext_
 extern objfile_script_executor_func *ext_lang_objfile_script_executor
   (const struct extension_language_defn *);
 
-extern int ext_lang_auto_load_enabled (const struct extension_language_defn *);
+/* Return true if auto-loading of EXTLANG scripts is enabled.
+   False is returned if support for this language isn't compiled in.  */
+
+extern bool ext_lang_auto_load_enabled (const struct extension_language_defn *);
 
 /* Wrappers for each extension language API function that iterate over all
    extension languages.  */
 
-extern void finish_ext_lang_initialization (void);
+extern void ext_lang_initialization (void);
 
 extern void eval_ext_lang_from_control_command (struct command_line *cmd);
 
@@ -282,10 +286,8 @@ extern char *apply_ext_lang_type_printer
 					   struct type *);
 
 extern int apply_ext_lang_val_pretty_printer
-  (struct type *type,
-   LONGEST embedded_offset, CORE_ADDR address,
-   struct ui_file *stream, int recurse,
-   struct value *val, const struct value_print_options *options,
+  (struct value *value, struct ui_file *stream, int recurse,
+   const struct value_print_options *options,
    const struct language_defn *language);
 
 extern enum ext_lang_bt_status apply_ext_lang_frame_filter
@@ -309,4 +311,12 @@ extern void get_matching_xmethod_workers
   (struct type *type, const char *method_name,
    std::vector<xmethod_worker_up> *workers);
 
+/* Try to colorize some source code.  FILENAME is the name of the file
+   holding the code.  CONTENTS is the source code itself.  This will
+   either a colorized (using ANSI terminal escapes) version of the
+   source code, or an empty value if colorizing could not be done.  */
+
+extern gdb::optional<std::string> ext_lang_colorize
+  (const std::string &filename, const std::string &contents);
+
 #endif /* EXTENSION_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/extension-priv.h ./gdb/extension-priv.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/extension-priv.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/extension-priv.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Private implementation details of interface between gdb and its
    extension languages.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -92,7 +92,7 @@ struct extension_language_script_ops
 
   /* Return non-zero if auto-loading scripts in this extension language
      is enabled.  */
-  int (*auto_load_enabled) (const struct extension_language_defn *);
+  bool (*auto_load_enabled) (const struct extension_language_defn *);
 };
 
 /* The interface for making calls from GDB to an external extension
@@ -109,10 +109,11 @@ struct extension_language_script_ops
 
 struct extension_language_ops
 {
-  /* Called at the end of gdb initialization to give the extension language
-     an opportunity to finish up.  This is useful for things like adding
-     new commands where one has to wait until gdb itself is initialized.  */
-  void (*finish_initialization) (const struct extension_language_defn *);
+  /* Called after GDB has processed the early initialization settings
+     files.  This is when the extension language should be initialized.  By
+     the time this is called all of the earlier initialization functions
+     have already been called.  */
+  void (*initialize) (const struct extension_language_defn *);
 
   /* Return non-zero if the extension language successfully initialized.
      This method is required.  */
@@ -152,19 +153,14 @@ struct extension_language_ops
   void (*free_type_printers) (const struct extension_language_defn *,
 			      struct ext_lang_type_printers *);
 
-  /* Try to pretty-print a value of type TYPE located at VAL's contents
-     buffer + EMBEDDED_OFFSET, which came from the inferior at address
-     ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to
-     OPTIONS.
-     VAL is the whole object that came from ADDRESS.
-     Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the value
-     is not recognized, and EXT_LANG_RC_ERROR if an error was encountered.  */
+  /* Try to pretty-print a value, onto stdio stream STREAM according
+     to OPTIONS.  VAL is the object to print.  Returns EXT_LANG_RC_OK
+     upon success, EXT_LANG_RC_NOP if the value is not recognized, and
+     EXT_LANG_RC_ERROR if an error was encountered.  */
   enum ext_lang_rc (*apply_val_pretty_printer)
     (const struct extension_language_defn *,
-     struct type *type,
-     LONGEST embedded_offset, CORE_ADDR address,
-     struct ui_file *stream, int recurse,
-     struct value *val, const struct value_print_options *options,
+     struct value *val, struct ui_file *stream, int recurse,
+     const struct value_print_options *options,
      const struct language_defn *language);
 
   /* GDB access to the "frame filter" feature.
@@ -254,6 +250,13 @@ struct extension_language_ops
      struct type *obj_type,
      const char *method_name,
      std::vector<xmethod_worker_up> *dm_vec);
+
+  /* Colorize a source file.  NAME is the source file's name, and
+     CONTENTS is the contents of the file.  This should either return
+     colorized (using ANSI terminal escapes) version of the contents,
+     or an empty option.  */
+  gdb::optional<std::string> (*colorize) (const std::string &name,
+					  const std::string &contents);
 };
 
 /* State necessary to restore a signal handler to its previous value.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-array-walker.h ./gdb/f-array-walker.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-array-walker.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/f-array-walker.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,265 @@
+/* Copyright (C) 2020-2021 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 classes to wrap up the process of iterating over a
+   multi-dimensional Fortran array.  */
+
+#ifndef F_ARRAY_WALKER_H
+#define F_ARRAY_WALKER_H
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "f-lang.h"
+
+/* Class for calculating the byte offset for elements within a single
+   dimension of a Fortran array.  */
+class fortran_array_offset_calculator
+{
+public:
+  /* Create a new offset calculator for TYPE, which is either an array or a
+     string.  */
+  explicit fortran_array_offset_calculator (struct type *type)
+  {
+    /* Validate the type.  */
+    type = check_typedef (type);
+    if (type->code () != TYPE_CODE_ARRAY
+	&& (type->code () != TYPE_CODE_STRING))
+      error (_("can only compute offsets for arrays and strings"));
+
+    /* Get the range, and extract the bounds.  */
+    struct type *range_type = type->index_type ();
+    if (!get_discrete_bounds (range_type, &m_lowerbound, &m_upperbound))
+      error ("unable to read array bounds");
+
+    /* Figure out the stride for this array.  */
+    struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (type));
+    m_stride = type->index_type ()->bounds ()->bit_stride ();
+    if (m_stride == 0)
+      m_stride = type_length_units (elt_type);
+    else
+      {
+	int unit_size
+	  = gdbarch_addressable_memory_unit_size (elt_type->arch ());
+	m_stride /= (unit_size * 8);
+      }
+  };
+
+  /* Get the byte offset for element INDEX within the type we are working
+     on.  There is no bounds checking done on INDEX.  If the stride is
+     negative then we still assume that the base address (for the array
+     object) points to the element with the lowest memory address, we then
+     calculate an offset assuming that index 0 will be the element at the
+     highest address, index 1 the next highest, and so on.  This is not
+     quite how Fortran works in reality; in reality the base address of
+     the object would point at the element with the highest address, and
+     we would index backwards from there in the "normal" way, however,
+     GDB's current value contents model doesn't support having the base
+     address be near to the end of the value contents, so we currently
+     adjust the base address of Fortran arrays with negative strides so
+     their base address points at the lowest memory address.  This code
+     here is part of working around this weirdness.  */
+  LONGEST index_offset (LONGEST index)
+  {
+    LONGEST offset;
+    if (m_stride < 0)
+      offset = std::abs (m_stride) * (m_upperbound - index);
+    else
+      offset = std::abs (m_stride) * (index - m_lowerbound);
+    return offset;
+  }
+
+private:
+
+  /* The stride for the type we are working with.  */
+  LONGEST m_stride;
+
+  /* The upper bound for the type we are working with.  */
+  LONGEST m_upperbound;
+
+  /* The lower bound for the type we are working with.  */
+  LONGEST m_lowerbound;
+};
+
+/* A base class used by fortran_array_walker.  There's no virtual methods
+   here, sub-classes should just override the functions they want in order
+   to specialise the behaviour to their needs.  The functionality
+   provided in these default implementations will visit every array
+   element, but do nothing for each element.  */
+
+struct fortran_array_walker_base_impl
+{
+  /* Called when iterating between the lower and upper bounds of each
+     dimension of the array.  Return true if GDB should continue iterating,
+     otherwise, return false.
+
+     SHOULD_CONTINUE indicates if GDB is going to stop anyway, and should
+     be taken into consideration when deciding what to return.  If
+     SHOULD_CONTINUE is false then this function must also return false,
+     the function is still called though in case extra work needs to be
+     done as part of the stopping process.  */
+  bool continue_walking (bool should_continue)
+  { return should_continue; }
+
+  /* Called when GDB starts iterating over a dimension of the array.  The
+     argument INNER_P is true for the inner most dimension (the dimension
+     containing the actual elements of the array), and false for more outer
+     dimensions.  For a concrete example of how this function is called
+     see the comment on process_element below.  */
+  void start_dimension (bool inner_p)
+  { /* Nothing.  */ }
+
+  /* Called when GDB finishes iterating over a dimension of the array.  The
+     argument INNER_P is true for the inner most dimension (the dimension
+     containing the actual elements of the array), and false for more outer
+     dimensions.  LAST_P is true for the last call at a particular
+     dimension.  For a concrete example of how this function is called
+     see the comment on process_element below.  */
+  void finish_dimension (bool inner_p, bool last_p)
+  { /* Nothing.  */ }
+
+  /* Called when processing the inner most dimension of the array, for
+     every element in the array.  ELT_TYPE is the type of the element being
+     extracted, and ELT_OFF is the offset of the element from the start of
+     array being walked, and LAST_P is true only when this is the last
+     element that will be processed in this dimension.
+
+     Given this two dimensional array ((1, 2) (3, 4)), the calls to
+     start_dimension, process_element, and finish_dimension look like this:
+
+     start_dimension (false);
+       start_dimension (true);
+         process_element (TYPE, OFFSET, false);
+         process_element (TYPE, OFFSET, true);
+       finish_dimension (true, false);
+       start_dimension (true);
+         process_element (TYPE, OFFSET, false);
+         process_element (TYPE, OFFSET, true);
+       finish_dimension (true, true);
+     finish_dimension (false, true);  */
+  void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+  { /* Nothing.  */ }
+};
+
+/* A class to wrap up the process of iterating over a multi-dimensional
+   Fortran array.  IMPL is used to specialise what happens as we walk over
+   the array.  See class FORTRAN_ARRAY_WALKER_BASE_IMPL (above) for the
+   methods than can be used to customise the array walk.  */
+template<typename Impl>
+class fortran_array_walker
+{
+  /* Ensure that Impl is derived from the required base class.  This just
+     ensures that all of the required API methods are available and have a
+     sensible default implementation.  */
+  gdb_static_assert ((std::is_base_of<fortran_array_walker_base_impl,Impl>::value));
+
+public:
+  /* Create a new array walker.  TYPE is the type of the array being walked
+     over, and ADDRESS is the base address for the object of TYPE in
+     memory.  All other arguments are forwarded to the constructor of the
+     template parameter class IMPL.  */
+  template <typename ...Args>
+  fortran_array_walker (struct type *type, CORE_ADDR address,
+			Args... args)
+    : m_type (type),
+      m_address (address),
+      m_impl (type, address, args...)
+  {
+    m_ndimensions =  calc_f77_array_dims (m_type);
+  }
+
+  /* Walk the array.  */
+  void
+  walk ()
+  {
+    walk_1 (1, m_type, 0, false);
+  }
+
+private:
+  /* The core of the array walking algorithm.  NSS is the current
+     dimension number being processed, TYPE is the type of this dimension,
+     and OFFSET is the offset (in bytes) for the start of this dimension.  */
+  void
+  walk_1 (int nss, struct type *type, int offset, bool last_p)
+  {
+    /* Extract the range, and get lower and upper bounds.  */
+    struct type *range_type = check_typedef (type)->index_type ();
+    LONGEST lowerbound, upperbound;
+    if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
+      error ("failed to get range bounds");
+
+    /* CALC is used to calculate the offsets for each element in this
+       dimension.  */
+    fortran_array_offset_calculator calc (type);
+
+    m_impl.start_dimension (nss == m_ndimensions);
+
+    if (nss != m_ndimensions)
+      {
+	/* For dimensions other than the inner most, walk each element and
+	   recurse while peeling off one more dimension of the array.  */
+	for (LONGEST i = lowerbound;
+	     m_impl.continue_walking (i < upperbound + 1);
+	     i++)
+	  {
+	    /* Use the index and the stride to work out a new offset.  */
+	    LONGEST new_offset = offset + calc.index_offset (i);
+
+	    /* Now print the lower dimension.  */
+	    struct type *subarray_type
+	      = TYPE_TARGET_TYPE (check_typedef (type));
+	    walk_1 (nss + 1, subarray_type, new_offset, (i == upperbound));
+	  }
+      }
+    else
+      {
+	/* For the inner most dimension of the array, process each element
+	   within this dimension.  */
+	for (LONGEST i = lowerbound;
+	     m_impl.continue_walking (i < upperbound + 1);
+	     i++)
+	  {
+	    LONGEST elt_off = offset + calc.index_offset (i);
+
+	    struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (type));
+	    if (is_dynamic_type (elt_type))
+	      {
+		CORE_ADDR e_address = m_address + elt_off;
+		elt_type = resolve_dynamic_type (elt_type, {}, e_address);
+	      }
+
+	    m_impl.process_element (elt_type, elt_off, (i == upperbound));
+	  }
+      }
+
+    m_impl.finish_dimension (nss == m_ndimensions, last_p || nss == 1);
+  }
+
+  /* The array type being processed.  */
+  struct type *m_type;
+
+  /* The address in target memory for the object of M_TYPE being
+     processed.  This is required in order to resolve dynamic types.  */
+  CORE_ADDR m_address;
+
+  /* An instance of the template specialisation class.  */
+  Impl m_impl;
+
+  /* The total number of dimensions in M_TYPE.  */
+  int m_ndimensions;
+};
+
+#endif /* F_ARRAY_WALKER_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-nat.c ./gdb/fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/fbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,17 +29,15 @@
 #include "gdbsupport/gdb_wait.h"
 #include "inf-ptrace.h"
 #include <sys/types.h>
+#ifdef HAVE_SYS_PROCCTL_H
+#include <sys/procctl.h>
+#endif
 #include <sys/procfs.h>
 #include <sys/ptrace.h>
 #include <sys/signal.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
-#if defined(HAVE_KINFO_GETFILE) || defined(HAVE_KINFO_GETVMMAP)
 #include <libutil.h>
-#endif
-#if !defined(HAVE_KINFO_GETVMMAP)
-#include "gdbsupport/filestuff.h"
-#endif
 
 #include "elf-bfd.h"
 #include "fbsd-nat.h"
@@ -53,11 +51,7 @@
 char *
 fbsd_nat_target::pid_to_exec_file (int pid)
 {
-  ssize_t len;
   static char buf[PATH_MAX];
-  char name[PATH_MAX];
-
-#ifdef KERN_PROC_PATHNAME
   size_t buflen;
   int mib[4];
 
@@ -71,27 +65,17 @@ fbsd_nat_target::pid_to_exec_file (int p
        for processes without an associated executable such as kernel
        processes.  */
     return buflen == 0 ? NULL : buf;
-#endif
-
-  xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
-  len = readlink (name, buf, PATH_MAX - 1);
-  if (len != -1)
-    {
-      buf[len] = '\0';
-      return buf;
-    }
 
   return NULL;
 }
 
-#ifdef HAVE_KINFO_GETVMMAP
 /* Iterate over all the memory regions in the current inferior,
-   calling FUNC for each memory region.  OBFD is passed as the last
+   calling FUNC for each memory region.  DATA is passed as the last
    argument to FUNC.  */
 
 int
 fbsd_nat_target::find_memory_regions (find_memory_region_ftype func,
-				      void *obfd)
+				      void *data)
 {
   pid_t pid = inferior_ptid.pid ();
   struct kinfo_vmentry *kve;
@@ -133,81 +117,10 @@ fbsd_nat_target::find_memory_regions (fi
 	 Pass MODIFIED as true, we do not know the real modification state.  */
       func (kve->kve_start, size, kve->kve_protection & KVME_PROT_READ,
 	    kve->kve_protection & KVME_PROT_WRITE,
-	    kve->kve_protection & KVME_PROT_EXEC, 1, obfd);
-    }
-  return 0;
-}
-#else
-static int
-fbsd_read_mapping (FILE *mapfile, unsigned long *start, unsigned long *end,
-		   char *protection)
-{
-  /* FreeBSD 5.1-RELEASE uses a 256-byte buffer.  */
-  char buf[256];
-  int resident, privateresident;
-  unsigned long obj;
-  int ret = EOF;
-
-  /* As of FreeBSD 5.0-RELEASE, the layout is described in
-     /usr/src/sys/fs/procfs/procfs_map.c.  Somewhere in 5.1-CURRENT a
-     new column was added to the procfs map.  Therefore we can't use
-     fscanf since we need to support older releases too.  */
-  if (fgets (buf, sizeof buf, mapfile) != NULL)
-    ret = sscanf (buf, "%lx %lx %d %d %lx %s", start, end,
-		  &resident, &privateresident, &obj, protection);
-
-  return (ret != 0 && ret != EOF);
-}
-
-/* Iterate over all the memory regions in the current inferior,
-   calling FUNC for each memory region.  OBFD is passed as the last
-   argument to FUNC.  */
-
-int
-fbsd_nat_target::find_memory_regions (find_memory_region_ftype func,
-				      void *obfd)
-{
-  pid_t pid = inferior_ptid.pid ();
-  unsigned long start, end, size;
-  char protection[4];
-  int read, write, exec;
-
-  std::string mapfilename = string_printf ("/proc/%ld/map", (long) pid);
-  gdb_file_up mapfile (fopen (mapfilename.c_str (), "r"));
-  if (mapfile == NULL)
-    error (_("Couldn't open %s."), mapfilename.c_str ());
-
-  if (info_verbose)
-    fprintf_filtered (gdb_stdout, 
-		      "Reading memory regions from %s\n", mapfilename.c_str ());
-
-  /* Now iterate until end-of-file.  */
-  while (fbsd_read_mapping (mapfile.get (), &start, &end, &protection[0]))
-    {
-      size = end - start;
-
-      read = (strchr (protection, 'r') != 0);
-      write = (strchr (protection, 'w') != 0);
-      exec = (strchr (protection, 'x') != 0);
-
-      if (info_verbose)
-	{
-	  fprintf_filtered (gdb_stdout, 
-			    "Save segment, %ld bytes at %s (%c%c%c)\n",
-			    size, paddress (target_gdbarch (), start),
-			    read ? 'r' : '-',
-			    write ? 'w' : '-',
-			    exec ? 'x' : '-');
-	}
-
-      /* Invoke the callback function to create the corefile segment.
-	 Pass MODIFIED as true, we do not know the real modification state.  */
-      func (start, size, read, write, exec, 1, obfd);
+	    kve->kve_protection & KVME_PROT_EXEC, 1, data);
     }
-
   return 0;
 }
-#endif
 
 /* Fetch the command line for a running process.  */
 
@@ -264,21 +177,15 @@ fbsd_fetch_kinfo_proc (pid_t pid, struct
 bool
 fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
 {
-#ifdef HAVE_KINFO_GETFILE
   gdb::unique_xmalloc_ptr<struct kinfo_file> fdtbl;
   int nfd = 0;
-#endif
   struct kinfo_proc kp;
   pid_t pid;
   bool do_cmdline = false;
   bool do_cwd = false;
   bool do_exe = false;
-#ifdef HAVE_KINFO_GETFILE
   bool do_files = false;
-#endif
-#ifdef HAVE_KINFO_GETVMMAP
   bool do_mappings = false;
-#endif
   bool do_status = false;
 
   switch (what)
@@ -288,11 +195,9 @@ fbsd_nat_target::info_proc (const char *
       do_cwd = true;
       do_exe = true;
       break;
-#ifdef HAVE_KINFO_GETVMMAP
     case IP_MAPPINGS:
       do_mappings = true;
       break;
-#endif
     case IP_STATUS:
     case IP_STAT:
       do_status = true;
@@ -306,21 +211,15 @@ fbsd_nat_target::info_proc (const char *
     case IP_CWD:
       do_cwd = true;
       break;
-#ifdef HAVE_KINFO_GETFILE
     case IP_FILES:
       do_files = true;
       break;
-#endif
     case IP_ALL:
       do_cmdline = true;
       do_cwd = true;
       do_exe = true;
-#ifdef HAVE_KINFO_GETFILE
       do_files = true;
-#endif
-#ifdef HAVE_KINFO_GETVMMAP
       do_mappings = true;
-#endif
       do_status = true;
       break;
     default:
@@ -340,10 +239,8 @@ fbsd_nat_target::info_proc (const char *
     error (_("Invalid arguments."));
 
   printf_filtered (_("process %d\n"), pid);
-#ifdef HAVE_KINFO_GETFILE
   if (do_cwd || do_exe || do_files)
     fdtbl.reset (kinfo_getfile (pid, &nfd));
-#endif
 
   if (do_cmdline)
     {
@@ -356,7 +253,6 @@ fbsd_nat_target::info_proc (const char *
   if (do_cwd)
     {
       const char *cwd = NULL;
-#ifdef HAVE_KINFO_GETFILE
       struct kinfo_file *kf = fdtbl.get ();
       for (int i = 0; i < nfd; i++, kf++)
 	{
@@ -366,7 +262,6 @@ fbsd_nat_target::info_proc (const char *
 	      break;
 	    }
 	}
-#endif
       if (cwd != NULL)
 	printf_filtered ("cwd = '%s'\n", cwd);
       else
@@ -375,7 +270,6 @@ fbsd_nat_target::info_proc (const char *
   if (do_exe)
     {
       const char *exe = NULL;
-#ifdef HAVE_KINFO_GETFILE
       struct kinfo_file *kf = fdtbl.get ();
       for (int i = 0; i < nfd; i++, kf++)
 	{
@@ -385,7 +279,6 @@ fbsd_nat_target::info_proc (const char *
 	      break;
 	    }
 	}
-#endif
       if (exe == NULL)
 	exe = pid_to_exec_file (pid);
       if (exe != NULL)
@@ -393,7 +286,6 @@ fbsd_nat_target::info_proc (const char *
       else
 	warning (_("unable to fetch executable path name"));
     }
-#ifdef HAVE_KINFO_GETFILE
   if (do_files)
     {
       struct kinfo_file *kf = fdtbl.get ();
@@ -411,8 +303,6 @@ fbsd_nat_target::info_proc (const char *
       else
 	warning (_("unable to fetch list of open files"));
     }
-#endif
-#ifdef HAVE_KINFO_GETVMMAP
   if (do_mappings)
     {
       int nvment;
@@ -434,7 +324,6 @@ fbsd_nat_target::info_proc (const char *
       else
 	warning (_("unable to fetch virtual memory map"));
     }
-#endif
   if (do_status)
     {
       if (!fbsd_fetch_kinfo_proc (pid, &kp))
@@ -476,7 +365,7 @@ fbsd_nat_target::info_proc (const char *
 	  printf_filtered ("Parent process: %d\n", kp.ki_ppid);
 	  printf_filtered ("Process group: %d\n", kp.ki_pgid);
 	  printf_filtered ("Session id: %d\n", kp.ki_sid);
-	  printf_filtered ("TTY: %ju\n", (uintmax_t) kp.ki_tdev);
+	  printf_filtered ("TTY: %s\n", pulongest (kp.ki_tdev));
 	  printf_filtered ("TTY owner process group: %d\n", kp.ki_tpgid);
 	  printf_filtered ("User IDs (real, effective, saved): %d %d %d\n",
 			   kp.ki_ruid, kp.ki_uid, kp.ki_svuid);
@@ -494,34 +383,35 @@ fbsd_nat_target::info_proc (const char *
 			   kp.ki_rusage.ru_majflt);
 	  printf_filtered ("Major faults, children: %ld\n",
 			   kp.ki_rusage_ch.ru_majflt);
-	  printf_filtered ("utime: %jd.%06ld\n",
-			   (intmax_t) kp.ki_rusage.ru_utime.tv_sec,
+	  printf_filtered ("utime: %s.%06ld\n",
+			   plongest (kp.ki_rusage.ru_utime.tv_sec),
 			   kp.ki_rusage.ru_utime.tv_usec);
-	  printf_filtered ("stime: %jd.%06ld\n",
-			   (intmax_t) kp.ki_rusage.ru_stime.tv_sec,
+	  printf_filtered ("stime: %s.%06ld\n",
+			   plongest (kp.ki_rusage.ru_stime.tv_sec),
 			   kp.ki_rusage.ru_stime.tv_usec);
-	  printf_filtered ("utime, children: %jd.%06ld\n",
-			   (intmax_t) kp.ki_rusage_ch.ru_utime.tv_sec,
+	  printf_filtered ("utime, children: %s.%06ld\n",
+			   plongest (kp.ki_rusage_ch.ru_utime.tv_sec),
 			   kp.ki_rusage_ch.ru_utime.tv_usec);
-	  printf_filtered ("stime, children: %jd.%06ld\n",
-			   (intmax_t) kp.ki_rusage_ch.ru_stime.tv_sec,
+	  printf_filtered ("stime, children: %s.%06ld\n",
+			   plongest (kp.ki_rusage_ch.ru_stime.tv_sec),
 			   kp.ki_rusage_ch.ru_stime.tv_usec);
 	  printf_filtered ("'nice' value: %d\n", kp.ki_nice);
-	  printf_filtered ("Start time: %jd.%06ld\n", kp.ki_start.tv_sec,
+	  printf_filtered ("Start time: %s.%06ld\n",
+			   plongest (kp.ki_start.tv_sec),
 			   kp.ki_start.tv_usec);
 	  pgtok = getpagesize () / 1024;
-	  printf_filtered ("Virtual memory size: %ju kB\n",
-			   (uintmax_t) kp.ki_size / 1024);
-	  printf_filtered ("Data size: %ju kB\n",
-			   (uintmax_t) kp.ki_dsize * pgtok);
-	  printf_filtered ("Stack size: %ju kB\n",
-			   (uintmax_t) kp.ki_ssize * pgtok);
-	  printf_filtered ("Text size: %ju kB\n",
-			   (uintmax_t) kp.ki_tsize * pgtok);
-	  printf_filtered ("Resident set size: %ju kB\n",
-			   (uintmax_t) kp.ki_rssize * pgtok);
-	  printf_filtered ("Maximum RSS: %ju kB\n",
-			   (uintmax_t) kp.ki_rusage.ru_maxrss);
+	  printf_filtered ("Virtual memory size: %s kB\n",
+			   pulongest (kp.ki_size / 1024));
+	  printf_filtered ("Data size: %s kB\n",
+			   pulongest (kp.ki_dsize * pgtok));
+	  printf_filtered ("Stack size: %s kB\n",
+			   pulongest (kp.ki_ssize * pgtok));
+	  printf_filtered ("Text size: %s kB\n",
+			   pulongest (kp.ki_tsize * pgtok));
+	  printf_filtered ("Resident set size: %s kB\n",
+			   pulongest (kp.ki_rssize * pgtok));
+	  printf_filtered ("Maximum RSS: %s kB\n",
+			   pulongest (kp.ki_rusage.ru_maxrss));
 	  printf_filtered ("Pending Signals: ");
 	  for (int i = 0; i < _SIG_WORDS; i++)
 	    printf_filtered ("%08x ", kp.ki_siglist.__bits[i]);
@@ -540,17 +430,6 @@ fbsd_nat_target::info_proc (const char *
   return true;
 }
 
-/*
- * The current layout of siginfo_t on FreeBSD was adopted in SVN
- * revision 153154 which shipped in FreeBSD versions 7.0 and later.
- * Don't bother supporting the older layout on older kernels.  The
- * older format was also never used in core dump notes.
- */
-#if __FreeBSD_version >= 700009
-#define USE_SIGINFO
-#endif
-
-#ifdef USE_SIGINFO
 /* Return the size of siginfo for the current inferior.  */
 
 #ifdef __LP64__
@@ -677,7 +556,6 @@ fbsd_convert_siginfo (siginfo_t *si)
   memcpy(si, &si32, sizeof (si32));
 #endif
 }
-#endif
 
 /* Implement the "xfer_partial" target_ops method.  */
 
@@ -692,7 +570,6 @@ fbsd_nat_target::xfer_partial (enum targ
 
   switch (object)
     {
-#ifdef USE_SIGINFO
     case TARGET_OBJECT_SIGNAL_INFO:
       {
 	struct ptrace_lwpinfo pl;
@@ -723,7 +600,6 @@ fbsd_nat_target::xfer_partial (enum targ
 	*xfered_len = len;
 	return TARGET_XFER_OK;
       }
-#endif
 #ifdef KERN_PROC_AUXV
     case TARGET_OBJECT_AUXV:
       {
@@ -831,7 +707,6 @@ fbsd_nat_target::xfer_partial (enum targ
     }
 }
 
-#ifdef PT_LWPINFO
 static bool debug_fbsd_lwp;
 static bool debug_fbsd_nat;
 
@@ -850,6 +725,13 @@ show_fbsd_nat_debug (struct ui_file *fil
 		    value);
 }
 
+#define fbsd_lwp_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_fbsd_lwp, "fbsd-lwp", fmt, ##__VA_ARGS__)
+
+#define fbsd_nat_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_fbsd_nat, "fbsd-nat", fmt, ##__VA_ARGS__)
+
+
 /*
   FreeBSD's first thread support was via a "reentrant" version of libc
   (libc_r) that first shipped in 2.2.7.  This library multiplexed all
@@ -991,11 +873,11 @@ fbsd_enable_proc_events (pid_t pid)
    called to discover new threads each time the thread list is updated.  */
 
 static void
-fbsd_add_threads (pid_t pid)
+fbsd_add_threads (fbsd_nat_target *target, pid_t pid)
 {
   int i, nlwps;
 
-  gdb_assert (!in_thread_list (ptid_t (pid)));
+  gdb_assert (!in_thread_list (target, ptid_t (pid)));
   nlwps = ptrace (PT_GETNUMLWPS, pid, NULL, 0);
   if (nlwps == -1)
     perror_with_name (("ptrace"));
@@ -1010,7 +892,7 @@ fbsd_add_threads (pid_t pid)
     {
       ptid_t ptid = ptid_t (pid, lwps[i], 0);
 
-      if (!in_thread_list (ptid))
+      if (!in_thread_list (target, ptid))
 	{
 #ifdef PT_LWP_EVENTS
 	  struct ptrace_lwpinfo pl;
@@ -1022,11 +904,8 @@ fbsd_add_threads (pid_t pid)
 	  if (pl.pl_flags & PL_FLAG_EXITED)
 	    continue;
 #endif
-	  if (debug_fbsd_lwp)
-	    fprintf_unfiltered (gdb_stdlog,
-				"FLWP: adding thread for LWP %u\n",
-				lwps[i]);
-	  add_thread (ptid);
+	  fbsd_lwp_debug_printf ("adding thread for LWP %u", lwps[i]);
+	  add_thread (target, ptid);
 	}
     }
 }
@@ -1043,7 +922,7 @@ fbsd_nat_target::update_thread_list ()
 #else
   prune_threads ();
 
-  fbsd_add_threads (inferior_ptid.pid ());
+  fbsd_add_threads (this, inferior_ptid.pid ());
 #endif
 }
 
@@ -1166,18 +1045,15 @@ fbsd_nat_target::resume (ptid_t ptid, in
     return;
 #endif
 
-  if (debug_fbsd_lwp)
-    fprintf_unfiltered (gdb_stdlog,
-			"FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n",
-			ptid.pid (), ptid.lwp (),
-			ptid.tid ());
+  fbsd_lwp_debug_printf ("ptid (%d, %ld, %ld)", ptid.pid (), ptid.lwp (),
+			 ptid.tid ());
   if (ptid.lwp_p ())
     {
       /* If ptid is a specific LWP, suspend all other LWPs in the process.  */
-      inferior *inf = find_inferior_ptid (ptid);
+      inferior *inf = find_inferior_ptid (this, ptid);
 
       for (thread_info *tp : inf->non_exited_threads ())
-        {
+	{
 	  int request;
 
 	  if (tp->ptid.lwp () == ptid.lwp ())
@@ -1193,7 +1069,7 @@ fbsd_nat_target::resume (ptid_t ptid, in
     {
       /* If ptid is a wildcard, resume all matching threads (they won't run
 	 until the process is continued however).  */
-      for (thread_info *tp : all_non_exited_threads (ptid))
+      for (thread_info *tp : all_non_exited_threads (this, ptid))
 	if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1)
 	  perror_with_name (("ptrace"));
       ptid = inferior_ptid;
@@ -1239,7 +1115,8 @@ fbsd_nat_target::resume (ptid_t ptid, in
    core, return true.  */
 
 static bool
-fbsd_handle_debug_trap (ptid_t ptid, const struct ptrace_lwpinfo &pl)
+fbsd_handle_debug_trap (fbsd_nat_target *target, ptid_t ptid,
+			const struct ptrace_lwpinfo &pl)
 {
 
   /* Ignore traps without valid siginfo or for signals other than
@@ -1257,23 +1134,18 @@ fbsd_handle_debug_trap (ptid_t ptid, con
      breakpoint.  */
   if (pl.pl_siginfo.si_code == TRAP_TRACE)
     {
-      if (debug_fbsd_nat)
-	fprintf_unfiltered (gdb_stdlog,
-			    "FNAT: trace trap for LWP %ld\n", ptid.lwp ());
+      fbsd_nat_debug_printf ("trace trap for LWP %ld", ptid.lwp ());
       return true;
     }
 
   if (pl.pl_siginfo.si_code == TRAP_BRKPT)
     {
       /* Fixup PC for the software breakpoint.  */
-      struct regcache *regcache = get_thread_regcache (ptid);
+      struct regcache *regcache = get_thread_regcache (target, ptid);
       struct gdbarch *gdbarch = regcache->arch ();
       int decr_pc = gdbarch_decr_pc_after_break (gdbarch);
 
-      if (debug_fbsd_nat)
-	fprintf_unfiltered (gdb_stdlog,
-			    "FNAT: sw breakpoint trap for LWP %ld\n",
-			    ptid.lwp ());
+      fbsd_nat_debug_printf ("sw breakpoint trap for LWP %ld", ptid.lwp ());
       if (decr_pc != 0)
 	{
 	  CORE_ADDR pc;
@@ -1294,7 +1166,7 @@ fbsd_handle_debug_trap (ptid_t ptid, con
 
 ptid_t
 fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
-		       int target_options)
+		       target_wait_flags target_options)
 {
   ptid_t wptid;
 
@@ -1323,14 +1195,12 @@ fbsd_nat_target::wait (ptid_t ptid, stru
 
 	  if (debug_fbsd_nat)
 	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "FNAT: stop for LWP %u event %d flags %#x\n",
-				  pl.pl_lwpid, pl.pl_event, pl.pl_flags);
+	      fbsd_nat_debug_printf ("stop for LWP %u event %d flags %#x",
+				     pl.pl_lwpid, pl.pl_event, pl.pl_flags);
 	      if (pl.pl_flags & PL_FLAG_SI)
-		fprintf_unfiltered (gdb_stdlog,
-				    "FNAT: si_signo %u si_code %u\n",
-				    pl.pl_siginfo.si_signo,
-				    pl.pl_siginfo.si_code);
+		fbsd_nat_debug_printf ("si_signo %u si_code %u",
+				       pl.pl_siginfo.si_signo,
+				       pl.pl_siginfo.si_code);
 	    }
 
 #ifdef PT_LWP_EVENTS
@@ -1340,13 +1210,11 @@ fbsd_nat_target::wait (ptid_t ptid, stru
 		 threads might be skipped during post_attach that
 		 have not yet reported their PL_FLAG_EXITED event.
 		 Ignore EXITED events for an unknown LWP.  */
-	      thread_info *thr = find_thread_ptid (wptid);
+	      thread_info *thr = find_thread_ptid (this, wptid);
 	      if (thr != nullptr)
 		{
-		  if (debug_fbsd_lwp)
-		    fprintf_unfiltered (gdb_stdlog,
-					"FLWP: deleting thread for LWP %u\n",
-					pl.pl_lwpid);
+		  fbsd_lwp_debug_printf ("deleting thread for LWP %u",
+					 pl.pl_lwpid);
 		  if (print_thread_events)
 		    printf_unfiltered (_("[%s exited]\n"),
 				       target_pid_to_str (wptid).c_str ());
@@ -1364,13 +1232,11 @@ fbsd_nat_target::wait (ptid_t ptid, stru
 	     PL_FLAG_BORN in case the first stop reported after
 	     attaching to an existing process is a PL_FLAG_BORN
 	     event.  */
-	  if (in_thread_list (ptid_t (pid)))
+	  if (in_thread_list (this, ptid_t (pid)))
 	    {
-	      if (debug_fbsd_lwp)
-		fprintf_unfiltered (gdb_stdlog,
-				    "FLWP: using LWP %u for first thread\n",
-				    pl.pl_lwpid);
-	      thread_change_ptid (ptid_t (pid), wptid);
+	      fbsd_lwp_debug_printf ("using LWP %u for first thread",
+				     pl.pl_lwpid);
+	      thread_change_ptid (this, ptid_t (pid), wptid);
 	    }
 
 #ifdef PT_LWP_EVENTS
@@ -1380,13 +1246,11 @@ fbsd_nat_target::wait (ptid_t ptid, stru
 		 threads might be added by fbsd_add_threads that have
 		 not yet reported their PL_FLAG_BORN event.  Ignore
 		 BORN events for an already-known LWP.  */
-	      if (!in_thread_list (wptid))
+	      if (!in_thread_list (this, wptid))
 		{
-		  if (debug_fbsd_lwp)
-		    fprintf_unfiltered (gdb_stdlog,
-					"FLWP: adding thread for LWP %u\n",
-					pl.pl_lwpid);
-		  add_thread (wptid);
+		  fbsd_lwp_debug_printf ("adding thread for LWP %u",
+					 pl.pl_lwpid);
+		  add_thread (this, wptid);
 		}
 	      ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
 	      return wptid;
@@ -1463,7 +1327,6 @@ fbsd_nat_target::wait (ptid_t ptid, stru
 #endif
 #endif
 
-#ifdef PL_FLAG_EXEC
 	  if (pl.pl_flags & PL_FLAG_EXEC)
 	    {
 	      ourstatus->kind = TARGET_WAITKIND_EXECD;
@@ -1471,10 +1334,9 @@ fbsd_nat_target::wait (ptid_t ptid, stru
 		= xstrdup (pid_to_exec_file (pid));
 	      return wptid;
 	    }
-#endif
 
 #ifdef USE_SIGTRAP_SIGINFO
-	  if (fbsd_handle_debug_trap (wptid, pl))
+	  if (fbsd_handle_debug_trap (this, wptid, pl))
 	    return wptid;
 #endif
 
@@ -1543,12 +1405,74 @@ fbsd_nat_target::supports_stopped_by_sw_
 }
 #endif
 
+#ifdef PROC_ASLR_CTL
+class maybe_disable_address_space_randomization
+{
+public:
+  explicit maybe_disable_address_space_randomization (bool disable_randomization)
+  {
+    if (disable_randomization)
+      {
+	if (procctl (P_PID, getpid (), PROC_ASLR_STATUS, &m_aslr_ctl) == -1)
+	  {
+	    warning (_("Failed to fetch current address space randomization "
+		       "status: %s"), safe_strerror (errno));
+	    return;
+	  }
+
+	m_aslr_ctl &= ~PROC_ASLR_ACTIVE;
+	if (m_aslr_ctl == PROC_ASLR_FORCE_DISABLE)
+	  return;
+
+	int ctl = PROC_ASLR_FORCE_DISABLE;
+	if (procctl (P_PID, getpid (), PROC_ASLR_CTL, &ctl) == -1)
+	  {
+	    warning (_("Error disabling address space randomization: %s"),
+		     safe_strerror (errno));
+	    return;
+	  }
+
+	m_aslr_ctl_set = true;
+      }
+  }
+
+  ~maybe_disable_address_space_randomization ()
+  {
+    if (m_aslr_ctl_set)
+      {
+	if (procctl (P_PID, getpid (), PROC_ASLR_CTL, &m_aslr_ctl) == -1)
+	  warning (_("Error restoring address space randomization: %s"),
+		   safe_strerror (errno));
+      }
+  }
+
+  DISABLE_COPY_AND_ASSIGN (maybe_disable_address_space_randomization);
+
+private:
+  bool m_aslr_ctl_set = false;
+  int m_aslr_ctl = 0;
+};
+#endif
+
+void
+fbsd_nat_target::create_inferior (const char *exec_file,
+				  const std::string &allargs,
+				  char **env, int from_tty)
+{
+#ifdef PROC_ASLR_CTL
+  maybe_disable_address_space_randomization restore_aslr_ctl
+    (disable_randomization);
+#endif
+
+  inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
+}
+
 #ifdef TDP_RFPPWAIT
 /* Target hook for follow_fork.  On entry and at return inferior_ptid is
    the ptid of the followed inferior.  */
 
-int
-fbsd_nat_target::follow_fork (int follow_child, int detach_fork)
+void
+fbsd_nat_target::follow_fork (bool follow_child, bool detach_fork)
 {
   if (!follow_child && detach_fork)
     {
@@ -1590,8 +1514,6 @@ fbsd_nat_target::follow_fork (int follow
 	}
 #endif
     }
-
-  return 0;
 }
 
 int
@@ -1633,12 +1555,10 @@ void
 fbsd_nat_target::post_attach (int pid)
 {
   fbsd_enable_proc_events (pid);
-  fbsd_add_threads (pid);
+  fbsd_add_threads (this, pid);
 }
 
-#ifdef PL_FLAG_EXEC
-/* If the FreeBSD kernel supports PL_FLAG_EXEC, then traced processes
-   will always stop after exec.  */
+/* Traced processes always stop after exec.  */
 
 int
 fbsd_nat_target::insert_exec_catchpoint (int pid)
@@ -1651,7 +1571,6 @@ fbsd_nat_target::remove_exec_catchpoint
 {
   return 0;
 }
-#endif
 
 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
 int
@@ -1666,12 +1585,27 @@ fbsd_nat_target::set_syscall_catchpoint
   return 0;
 }
 #endif
+
+bool
+fbsd_nat_target::supports_multi_process ()
+{
+  return true;
+}
+
+bool
+fbsd_nat_target::supports_disable_randomization ()
+{
+#ifdef PROC_ASLR_CTL
+  return true;
+#else
+  return false;
 #endif
+}
 
+void _initialize_fbsd_nat ();
 void
-_initialize_fbsd_nat (void)
+_initialize_fbsd_nat ()
 {
-#ifdef PT_LWPINFO
   add_setshow_boolean_cmd ("fbsd-lwp", class_maintenance,
 			   &debug_fbsd_lwp, _("\
 Set debugging of FreeBSD lwp module."), _("\
@@ -1688,5 +1622,4 @@ Enables printf debugging output."),
 			   NULL,
 			   &show_fbsd_nat_debug,
 			   &setdebuglist, &showdebuglist);
-#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-nat.h ./gdb/fbsd-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/fbsd-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,11 +21,17 @@
 #define FBSD_NAT_H
 
 #include "inf-ptrace.h"
+#include <osreldate.h>
 #include <sys/proc.h>
 
-#ifdef TRAP_BRKPT
-/* MIPS does not set si_code for SIGTRAP.  sparc64 reports
-   non-standard values in si_code for SIGTRAP.  */
+/* FreeBSD kernels 11.3 and later report valid si_code values for
+   SIGTRAP on all architectures.  Older FreeBSD kernels that supported
+   TRAP_BRKPT did not report valid values for MIPS and sparc64.  Even
+   older kernels without TRAP_BRKPT support did not report valid
+   values on any architecture.  */
+#if (__FreeBSD_kernel_version >= 1102502) || (__FreeBSD_version >= 1102502)
+# define USE_SIGTRAP_SIGINFO
+#elif defined(TRAP_BRKPT)
 # if !defined(__mips__) && !defined(__sparc64__)
 #  define USE_SIGTRAP_SIGINFO
 # endif
@@ -49,7 +55,6 @@ public:
 					ULONGEST offset, ULONGEST len,
 					ULONGEST *xfered_len) override;
 
-#ifdef PT_LWPINFO
   bool thread_alive (ptid_t ptid) override;
   std::string pid_to_str (ptid_t) override;
 
@@ -62,9 +67,12 @@ public:
   thread_control_capabilities get_thread_control_capabilities () override
   { return tc_schedlock; }
 
+  void create_inferior (const char *, const std::string &,
+			char **, 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 post_startup_inferior (ptid_t) override;
   void post_attach (int) override;
@@ -75,7 +83,7 @@ public:
 #endif
 
 #ifdef TDP_RFPPWAIT
-  int follow_fork (int, int) override;
+  void follow_fork (bool, bool) override;
 
   int insert_fork_catchpoint (int) override;
   int remove_fork_catchpoint (int) override;
@@ -84,16 +92,17 @@ public:
   int remove_vfork_catchpoint (int) override;
 #endif
 
-#ifdef PL_FLAG_EXEC
   int insert_exec_catchpoint (int) override;
   int remove_exec_catchpoint (int) override;
-#endif
 
 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
   int set_syscall_catchpoint (int, bool, int, gdb::array_view<const int>)
     override;
 #endif
-#endif /* PT_LWPINFO */
+
+  bool supports_multi_process () override;
+
+  bool supports_disable_randomization () override;
 };
 
 #endif /* fbsd-nat.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-tdep.c ./gdb/fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/fbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD, architecture-independent.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,6 +21,7 @@
 #include "auxv.h"
 #include "gdbcore.h"
 #include "inferior.h"
+#include "objfiles.h"
 #include "regcache.h"
 #include "regset.h"
 #include "gdbthread.h"
@@ -31,6 +32,7 @@
 
 #include "elf-bfd.h"
 #include "fbsd-tdep.h"
+#include "gcore-elf.h"
 
 /* This enum is derived from FreeBSD's <sys/signal.h>.  */
 
@@ -73,6 +75,63 @@ enum
     FREEBSD_SIGRTMAX = 126,
   };
 
+/* Constants for values of si_code as defined in FreeBSD's
+   <sys/signal.h>.  */
+
+#define	FBSD_SI_USER		0x10001
+#define	FBSD_SI_QUEUE		0x10002
+#define	FBSD_SI_TIMER		0x10003
+#define	FBSD_SI_ASYNCIO		0x10004
+#define	FBSD_SI_MESGQ		0x10005
+#define	FBSD_SI_KERNEL		0x10006
+#define	FBSD_SI_LWP		0x10007
+
+#define	FBSD_ILL_ILLOPC		1
+#define	FBSD_ILL_ILLOPN		2
+#define	FBSD_ILL_ILLADR		3
+#define	FBSD_ILL_ILLTRP		4
+#define	FBSD_ILL_PRVOPC		5
+#define	FBSD_ILL_PRVREG		6
+#define	FBSD_ILL_COPROC		7
+#define	FBSD_ILL_BADSTK		8
+
+#define	FBSD_BUS_ADRALN		1
+#define	FBSD_BUS_ADRERR		2
+#define	FBSD_BUS_OBJERR		3
+#define	FBSD_BUS_OOMERR		100
+
+#define	FBSD_SEGV_MAPERR	1
+#define	FBSD_SEGV_ACCERR	2
+#define	FBSD_SEGV_PKUERR	100
+
+#define	FBSD_FPE_INTOVF		1
+#define	FBSD_FPE_INTDIV		2
+#define	FBSD_FPE_FLTDIV		3
+#define	FBSD_FPE_FLTOVF		4
+#define	FBSD_FPE_FLTUND		5
+#define	FBSD_FPE_FLTRES		6
+#define	FBSD_FPE_FLTINV		7
+#define	FBSD_FPE_FLTSUB		8
+
+#define	FBSD_TRAP_BRKPT		1
+#define	FBSD_TRAP_TRACE		2
+#define	FBSD_TRAP_DTRACE	3
+#define	FBSD_TRAP_CAP		4
+
+#define	FBSD_CLD_EXITED		1
+#define	FBSD_CLD_KILLED		2
+#define	FBSD_CLD_DUMPED		3
+#define	FBSD_CLD_TRAPPED	4
+#define	FBSD_CLD_STOPPED	5
+#define	FBSD_CLD_CONTINUED	6
+
+#define	FBSD_POLL_IN		1
+#define	FBSD_POLL_OUT		2
+#define	FBSD_POLL_MSG		3
+#define	FBSD_POLL_ERR		4
+#define	FBSD_POLL_PRI		5
+#define	FBSD_POLL_HUP		6
+
 /* FreeBSD kernels 12.0 and later include a copy of the
    'ptrace_lwpinfo' structure returned by the PT_LWPINFO ptrace
    operation in an ELF core note (NT_FREEBSD_PTLWPINFO) for each LWP.
@@ -582,106 +641,6 @@ find_signalled_thread (struct thread_inf
   return 0;
 }
 
-/* Structure for passing information from
-   fbsd_collect_thread_registers via an iterator to
-   fbsd_collect_regset_section_cb. */
-
-struct fbsd_collect_regset_section_cb_data
-{
-  const struct regcache *regcache;
-  bfd *obfd;
-  char *note_data;
-  int *note_size;
-  unsigned long lwp;
-  enum gdb_signal stop_signal;
-  int abort_iteration;
-};
-
-static void
-fbsd_collect_regset_section_cb (const char *sect_name, int supply_size,
-				int collect_size, const struct regset *regset,
-				const char *human_name, void *cb_data)
-{
-  char *buf;
-  struct fbsd_collect_regset_section_cb_data *data
-    = (struct fbsd_collect_regset_section_cb_data *) cb_data;
-
-  if (data->abort_iteration)
-    return;
-
-  gdb_assert (regset->collect_regset);
-
-  buf = (char *) xmalloc (collect_size);
-  regset->collect_regset (regset, data->regcache, -1, buf, collect_size);
-
-  /* PRSTATUS still needs to be treated specially.  */
-  if (strcmp (sect_name, ".reg") == 0)
-    data->note_data = (char *) elfcore_write_prstatus
-      (data->obfd, data->note_data, data->note_size, data->lwp,
-       gdb_signal_to_host (data->stop_signal), buf);
-  else
-    data->note_data = (char *) elfcore_write_register_note
-      (data->obfd, data->note_data, data->note_size,
-       sect_name, buf, collect_size);
-  xfree (buf);
-
-  if (data->note_data == NULL)
-    data->abort_iteration = 1;
-}
-
-/* Records the thread's register state for the corefile note
-   section.  */
-
-static char *
-fbsd_collect_thread_registers (const struct regcache *regcache,
-			       ptid_t ptid, bfd *obfd,
-			       char *note_data, int *note_size,
-			       enum gdb_signal stop_signal)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  struct fbsd_collect_regset_section_cb_data data;
-
-  data.regcache = regcache;
-  data.obfd = obfd;
-  data.note_data = note_data;
-  data.note_size = note_size;
-  data.stop_signal = stop_signal;
-  data.abort_iteration = 0;
-  data.lwp = ptid.lwp ();
-
-  gdbarch_iterate_over_regset_sections (gdbarch,
-					fbsd_collect_regset_section_cb,
-					&data, regcache);
-  return data.note_data;
-}
-
-struct fbsd_corefile_thread_data
-{
-  struct gdbarch *gdbarch;
-  bfd *obfd;
-  char *note_data;
-  int *note_size;
-  enum gdb_signal stop_signal;
-};
-
-/* Records the thread's register state for the corefile note
-   section.  */
-
-static void
-fbsd_corefile_thread (struct thread_info *info,
-		      struct fbsd_corefile_thread_data *args)
-{
-  struct regcache *regcache;
-
-  regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
-
-  target_fetch_registers (regcache, -1);
-
-  args->note_data = fbsd_collect_thread_registers
-    (regcache, info->ptid, args->obfd, args->note_data,
-     args->note_size, args->stop_signal);
-}
-
 /* Return a byte_vector containing the contents of a core dump note
    for the target object of type OBJECT.  If STRUCTSIZE is non-zero,
    the data is prefixed with a 32-bit integer size to match the format
@@ -691,7 +650,7 @@ static gdb::optional<gdb::byte_vector>
 fbsd_make_note_desc (enum target_object object, uint32_t structsize)
 {
   gdb::optional<gdb::byte_vector> buf =
-    target_read_alloc (current_top_target (), object, NULL);
+    target_read_alloc (current_inferior ()->top_target (), object, NULL);
   if (!buf || buf->empty ())
     return {};
 
@@ -707,11 +666,10 @@ fbsd_make_note_desc (enum target_object
 /* Create appropriate note sections for a corefile, returning them in
    allocated memory.  */
 
-static char *
+static gdb::unique_xmalloc_ptr<char>
 fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
 {
-  struct fbsd_corefile_thread_data thread_args;
-  char *note_data = NULL;
+  gdb::unique_xmalloc_ptr<char> note_data;
   Elf_Internal_Ehdr *i_ehdrp;
   struct thread_info *curr_thr, *signalled_thr;
 
@@ -724,14 +682,15 @@ fbsd_make_corefile_notes (struct gdbarch
   if (get_exec_file (0))
     {
       const char *fname = lbasename (get_exec_file (0));
-      char *psargs = xstrdup (fname);
-
-      if (get_inferior_args ())
-	psargs = reconcat (psargs, psargs, " ", get_inferior_args (),
-			   (char *) NULL);
+      std::string psargs = fname;
 
-      note_data = elfcore_write_prpsinfo (obfd, note_data, note_size,
-					  fname, psargs);
+      const char *infargs = get_inferior_args ();
+      if (infargs != NULL)
+	psargs = psargs + " " + infargs;
+
+      note_data.reset (elfcore_write_prpsinfo (obfd, note_data.release (),
+					       note_size, fname,
+					       psargs.c_str ()));
     }
 
   /* Thread register information.  */
@@ -758,32 +717,29 @@ fbsd_make_corefile_notes (struct gdbarch
 	signalled_thr = curr_thr;
     }
 
-  thread_args.gdbarch = gdbarch;
-  thread_args.obfd = obfd;
-  thread_args.note_data = note_data;
-  thread_args.note_size = note_size;
-  thread_args.stop_signal = signalled_thr->suspend.stop_signal;
-
-  fbsd_corefile_thread (signalled_thr, &thread_args);
+  enum gdb_signal stop_signal = signalled_thr->suspend.stop_signal;
+  gcore_elf_build_thread_register_notes (gdbarch, signalled_thr, stop_signal,
+					 obfd, &note_data, note_size);
   for (thread_info *thr : current_inferior ()->non_exited_threads ())
     {
       if (thr == signalled_thr)
 	continue;
 
-      fbsd_corefile_thread (thr, &thread_args);
+      gcore_elf_build_thread_register_notes (gdbarch, thr, stop_signal,
+					     obfd, &note_data, note_size);
     }
 
-  note_data = thread_args.note_data;
-
   /* Auxiliary vector.  */
   uint32_t structsize = gdbarch_ptr_bit (gdbarch) / 4; /* Elf_Auxinfo  */
   gdb::optional<gdb::byte_vector> note_desc =
     fbsd_make_note_desc (TARGET_OBJECT_AUXV, structsize);
   if (note_desc && !note_desc->empty ())
     {
-      note_data = elfcore_write_note (obfd, note_data, note_size, "FreeBSD",
-				      NT_FREEBSD_PROCSTAT_AUXV,
-				      note_desc->data (), note_desc->size ());
+      note_data.reset (elfcore_write_note (obfd, note_data.release (),
+					   note_size, "FreeBSD",
+					   NT_FREEBSD_PROCSTAT_AUXV,
+					   note_desc->data (),
+					   note_desc->size ()));
       if (!note_data)
 	return NULL;
     }
@@ -792,9 +748,11 @@ fbsd_make_corefile_notes (struct gdbarch
   note_desc = fbsd_make_note_desc (TARGET_OBJECT_FREEBSD_VMMAP, 0);
   if (note_desc && !note_desc->empty ())
     {
-      note_data = elfcore_write_note (obfd, note_data, note_size, "FreeBSD",
-				      NT_FREEBSD_PROCSTAT_VMMAP,
-				      note_desc->data (), note_desc->size ());
+      note_data.reset (elfcore_write_note (obfd, note_data.release (),
+					   note_size, "FreeBSD",
+					   NT_FREEBSD_PROCSTAT_VMMAP,
+					   note_desc->data (),
+					   note_desc->size ()));
       if (!note_data)
 	return NULL;
     }
@@ -802,13 +760,18 @@ fbsd_make_corefile_notes (struct gdbarch
   note_desc = fbsd_make_note_desc (TARGET_OBJECT_FREEBSD_PS_STRINGS, 0);
   if (note_desc && !note_desc->empty ())
     {
-      note_data = elfcore_write_note (obfd, note_data, note_size, "FreeBSD",
-				      NT_FREEBSD_PROCSTAT_PSSTRINGS,
-				      note_desc->data (), note_desc->size ());
+      note_data.reset (elfcore_write_note (obfd, note_data.release (),
+					   note_size, "FreeBSD",
+					   NT_FREEBSD_PROCSTAT_PSSTRINGS,
+					   note_desc->data (),
+					   note_desc->size ()));
       if (!note_data)
 	return NULL;
     }
 
+  /* Include the target description when possible.  */
+  gcore_elf_make_tdesc_note (obfd, &note_data, note_size);
+
   return note_data;
 }
 
@@ -1018,12 +981,12 @@ fbsd_info_proc_files_entry (int kf_type,
 
 	    /* For local sockets, print out the first non-nul path
 	       rather than both paths.  */
-	    const struct fbsd_sockaddr_un *sun
+	    const struct fbsd_sockaddr_un *saddr_un
 	      = reinterpret_cast<const struct fbsd_sockaddr_un *> (kf_sa_local);
-	    if (sun->sun_path[0] == 0)
-	      sun = reinterpret_cast<const struct fbsd_sockaddr_un *>
+	    if (saddr_un->sun_path[0] == 0)
+	      saddr_un = reinterpret_cast<const struct fbsd_sockaddr_un *>
 		(kf_sa_peer);
-	    printf_filtered ("%s", sun->sun_path);
+	    printf_filtered ("%s", saddr_un->sun_path);
 	    break;
 	  }
 	case FBSD_AF_INET:
@@ -1596,6 +1559,12 @@ fbsd_print_auxv_entry (struct gdbarch *g
       TAG (EHDRFLAGS, _("ELF header e_flags"), AUXV_FORMAT_HEX);
       TAG (HWCAP, _("Machine-dependent CPU capability hints"), AUXV_FORMAT_HEX);
       TAG (HWCAP2, _("Extension of AT_HWCAP"), AUXV_FORMAT_HEX);
+      TAG (BSDFLAGS, _("ELF BSD flags"), AUXV_FORMAT_HEX);
+      TAG (ARGC, _("Argument count"), AUXV_FORMAT_DEC);
+      TAG (ARGV, _("Argument vector"), AUXV_FORMAT_HEX);
+      TAG (ENVC, _("Environment count"), AUXV_FORMAT_DEC);
+      TAG (ENVV, _("Environment vector"), AUXV_FORMAT_HEX);
+      TAG (PS_STRINGS, _("Pointer to ps_strings"), AUXV_FORMAT_HEX);
     }
 
   fprint_auxv_entry (file, name, description, format, type, val);
@@ -1627,7 +1596,7 @@ fbsd_get_siginfo_type (struct gdbarch *g
 
   /* union sigval */
   sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
-  TYPE_NAME (sigval_type) = xstrdup ("sigval");
+  sigval_type->set_name (xstrdup ("sigval"));
   append_composite_type_field (sigval_type, "sival_int", int_type);
   append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
 
@@ -1635,14 +1604,14 @@ fbsd_get_siginfo_type (struct gdbarch *g
   pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
 			TYPE_LENGTH (int32_type) * TARGET_CHAR_BIT, "__pid_t");
   TYPE_TARGET_TYPE (pid_type) = int32_type;
-  TYPE_TARGET_STUB (pid_type) = 1;
+  pid_type->set_target_is_stub (true);
 
   /* __uid_t */
   uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
 			TYPE_LENGTH (uint32_type) * TARGET_CHAR_BIT,
 			"__uid_t");
   TYPE_TARGET_TYPE (uid_type) = uint32_type;
-  TYPE_TARGET_STUB (uid_type) = 1;
+  pid_type->set_target_is_stub (true);
 
   /* _reason */
   reason_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
@@ -1677,7 +1646,7 @@ fbsd_get_siginfo_type (struct gdbarch *g
 
   /* struct siginfo */
   siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
-  TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
+  siginfo_type->set_name (xstrdup ("siginfo"));
   append_composite_type_field (siginfo_type, "si_signo", int_type);
   append_composite_type_field (siginfo_type, "si_errno", int_type);
   append_composite_type_field (siginfo_type, "si_code", int_type);
@@ -1818,7 +1787,7 @@ fbsd_gdb_signal_from_target (struct gdba
 
 static int
 fbsd_gdb_signal_to_target (struct gdbarch *gdbarch,
-                enum gdb_signal signal)
+		enum gdb_signal signal)
 {
   switch (signal)
     {
@@ -1981,9 +1950,9 @@ fbsd_fetch_rtld_offsets (struct gdbarch
 				     language_c, NULL).symbol;
       if (obj_entry_sym == NULL)
 	error (_("Unable to find Struct_Obj_Entry symbol"));
-      data->off_linkmap = lookup_struct_elt (SYMBOL_TYPE(obj_entry_sym),
+      data->off_linkmap = lookup_struct_elt (SYMBOL_TYPE (obj_entry_sym),
 					     "linkmap", 0).offset / 8;
-      data->off_tlsindex = lookup_struct_elt (SYMBOL_TYPE(obj_entry_sym),
+      data->off_tlsindex = lookup_struct_elt (SYMBOL_TYPE (obj_entry_sym),
 					      "tlsindex", 0).offset / 8;
       data->rtld_offsets_valid = true;
       return;
@@ -2064,6 +2033,232 @@ fbsd_get_thread_local_address (struct gd
   return addr + offset;
 }
 
+/* See fbsd-tdep.h.  */
+
+CORE_ADDR
+fbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  struct bound_minimal_symbol msym = lookup_bound_minimal_symbol ("_rtld_bind");
+  if (msym.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
+    return frame_unwind_caller_pc (get_current_frame ());
+
+  return 0;
+}
+
+/* Return description of signal code or nullptr.  */
+
+static const char *
+fbsd_signal_cause (enum gdb_signal siggnal, int code)
+{
+  /* Signal-independent causes.  */
+  switch (code)
+    {
+    case FBSD_SI_USER:
+      return _("Sent by kill()");
+    case FBSD_SI_QUEUE:
+      return _("Sent by sigqueue()");
+    case FBSD_SI_TIMER:
+      return _("Timer expired");
+    case FBSD_SI_ASYNCIO:
+      return _("Asynchronous I/O request completed");
+    case FBSD_SI_MESGQ:
+      return _("Message arrived on empty message queue");
+    case FBSD_SI_KERNEL:
+      return _("Sent by kernel");
+    case FBSD_SI_LWP:
+      return _("Sent by thr_kill()");
+    }
+
+  switch (siggnal)
+    {
+    case GDB_SIGNAL_ILL:
+      switch (code)
+	{
+	case FBSD_ILL_ILLOPC:
+	  return _("Illegal opcode");
+	case FBSD_ILL_ILLOPN:
+	  return _("Illegal operand");
+	case FBSD_ILL_ILLADR:
+	  return _("Illegal addressing mode");
+	case FBSD_ILL_ILLTRP:
+	  return _("Illegal trap");
+	case FBSD_ILL_PRVOPC:
+	  return _("Privileged opcode");
+	case FBSD_ILL_PRVREG:
+	  return _("Privileged register");
+	case FBSD_ILL_COPROC:
+	  return _("Coprocessor error");
+	case FBSD_ILL_BADSTK:
+	  return _("Internal stack error");
+	}
+      break;
+    case GDB_SIGNAL_BUS:
+      switch (code)
+	{
+	case FBSD_BUS_ADRALN:
+	  return _("Invalid address alignment");
+	case FBSD_BUS_ADRERR:
+	  return _("Address not present");
+	case FBSD_BUS_OBJERR:
+	  return _("Object-specific hardware error");
+	case FBSD_BUS_OOMERR:
+	  return _("Out of memory");
+	}
+      break;
+    case GDB_SIGNAL_SEGV:
+      switch (code)
+	{
+	case FBSD_SEGV_MAPERR:
+	  return _("Address not mapped to object");
+	case FBSD_SEGV_ACCERR:
+	  return _("Invalid permissions for mapped object");
+	case FBSD_SEGV_PKUERR:
+	  return _("PKU violation");
+	}
+      break;
+    case GDB_SIGNAL_FPE:
+      switch (code)
+	{
+	case FBSD_FPE_INTOVF:
+	  return _("Integer overflow");
+	case FBSD_FPE_INTDIV:
+	  return _("Integer divide by zero");
+	case FBSD_FPE_FLTDIV:
+	  return _("Floating point divide by zero");
+	case FBSD_FPE_FLTOVF:
+	  return _("Floating point overflow");
+	case FBSD_FPE_FLTUND:
+	  return _("Floating point underflow");
+	case FBSD_FPE_FLTRES:
+	  return _("Floating point inexact result");
+	case FBSD_FPE_FLTINV:
+	  return _("Invalid floating point operation");
+	case FBSD_FPE_FLTSUB:
+	  return _("Subscript out of range");
+	}
+      break;
+    case GDB_SIGNAL_TRAP:
+      switch (code)
+	{
+	case FBSD_TRAP_BRKPT:
+	  return _("Breakpoint");
+	case FBSD_TRAP_TRACE:
+	  return _("Trace trap");
+	case FBSD_TRAP_DTRACE:
+	  return _("DTrace-induced trap");
+	case FBSD_TRAP_CAP:
+	  return _("Capability violation");
+	}
+      break;
+    case GDB_SIGNAL_CHLD:
+      switch (code)
+	{
+	case FBSD_CLD_EXITED:
+	  return _("Child has exited");
+	case FBSD_CLD_KILLED:
+	  return _("Child has terminated abnormally");
+	case FBSD_CLD_DUMPED:
+	  return _("Child has dumped core");
+	case FBSD_CLD_TRAPPED:
+	  return _("Traced child has trapped");
+	case FBSD_CLD_STOPPED:
+	  return _("Child has stopped");
+	case FBSD_CLD_CONTINUED:
+	  return _("Stopped child has continued");
+	}
+      break;
+    case GDB_SIGNAL_POLL:
+      switch (code)
+	{
+	case FBSD_POLL_IN:
+	  return _("Data input available");
+	case FBSD_POLL_OUT:
+	  return _("Output buffers available");
+	case FBSD_POLL_MSG:
+	  return _("Input message available");
+	case FBSD_POLL_ERR:
+	  return _("I/O error");
+	case FBSD_POLL_PRI:
+	  return _("High priority input available");
+	case FBSD_POLL_HUP:
+	  return _("Device disconnected");
+	}
+      break;
+    }
+
+  return nullptr;
+}
+
+/* Report additional details for a signal stop.  */
+
+static void
+fbsd_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout,
+			 enum gdb_signal siggnal)
+{
+  LONGEST code, mqd, pid, status, timerid, uid;
+
+  try
+    {
+      code = parse_and_eval_long ("$_siginfo.si_code");
+      pid = parse_and_eval_long ("$_siginfo.si_pid");
+      uid = parse_and_eval_long ("$_siginfo.si_uid");
+      status = parse_and_eval_long ("$_siginfo.si_status");
+      timerid = parse_and_eval_long ("$_siginfo._reason._timer.si_timerid");
+      mqd = parse_and_eval_long ("$_siginfo._reason._mesgq.si_mqd");
+    }
+  catch (const gdb_exception_error &e)
+    {
+      return;
+    }
+
+  const char *meaning = fbsd_signal_cause (siggnal, code);
+  if (meaning == nullptr)
+    return;
+
+  uiout->text (".\n");
+  uiout->field_string ("sigcode-meaning", meaning);
+
+  switch (code)
+    {
+    case FBSD_SI_USER:
+    case FBSD_SI_QUEUE:
+    case FBSD_SI_LWP:
+      uiout->text (" from pid ");
+      uiout->field_string ("sending-pid", plongest (pid));
+      uiout->text (" and user ");
+      uiout->field_string ("sending-uid", plongest (uid));
+      return;
+    case FBSD_SI_TIMER:
+      uiout->text (": timerid ");
+      uiout->field_string ("timerid", plongest (timerid));
+      return;
+    case FBSD_SI_MESGQ:
+      uiout->text (": message queue ");
+      uiout->field_string ("message-queue", plongest (mqd));
+      return;
+    case FBSD_SI_ASYNCIO:
+      return;
+    }
+
+  if (siggnal == GDB_SIGNAL_CHLD)
+    {
+      uiout->text (": pid ");
+      uiout->field_string ("child-pid", plongest (pid));
+      uiout->text (", uid ");
+      uiout->field_string ("child-uid", plongest (uid));
+      if (code == FBSD_CLD_EXITED)
+	{
+	  uiout->text (", exit status ");
+	  uiout->field_string ("exit-status", plongest (status));
+	}
+      else
+	{
+	  uiout->text (", signal ");
+	  uiout->field_string ("signal", plongest (status));
+	}
+    }
+}
+
 /* To be called from GDB_OSABI_FREEBSD handlers. */
 
 void
@@ -2078,14 +2273,17 @@ fbsd_init_abi (struct gdbarch_info info,
   set_gdbarch_get_siginfo_type (gdbarch, fbsd_get_siginfo_type);
   set_gdbarch_gdb_signal_from_target (gdbarch, fbsd_gdb_signal_from_target);
   set_gdbarch_gdb_signal_to_target (gdbarch, fbsd_gdb_signal_to_target);
+  set_gdbarch_report_signal_info (gdbarch, fbsd_report_signal_info);
+  set_gdbarch_skip_solib_resolver (gdbarch, fbsd_skip_solib_resolver);
 
   /* `catch syscall' */
   set_xml_syscall_file_name (gdbarch, "syscalls/freebsd.xml");
   set_gdbarch_get_syscall_number (gdbarch, fbsd_get_syscall_number);
 }
 
+void _initialize_fbsd_tdep ();
 void
-_initialize_fbsd_tdep (void)
+_initialize_fbsd_tdep ()
 {
   fbsd_gdbarch_data_handle =
     gdbarch_data_register_post_init (init_fbsd_gdbarch_data);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-tdep.h ./gdb/fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fbsd-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/fbsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD, architecture independent.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -71,4 +71,9 @@ extern CORE_ADDR fbsd_get_thread_local_a
 						CORE_ADDR lm_addr,
 						CORE_ADDR offset);
 
+/* Implement the "skip_solib_resolver" gdbarch method.  */
+
+extern CORE_ADDR fbsd_skip_solib_resolver (struct gdbarch *gdbarch,
+					   CORE_ADDR pc);
+
 #endif /* fbsd-tdep.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-core.xml ./gdb/features/aarch64-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/aarch64-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc.
      Contributed by ARM Ltd.
 
      Copying and distribution of this file, with or without modification,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-fpu.c ./gdb/features/aarch64-fpu.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-fpu.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/aarch64-fpu.c	2021-12-16 01:57:39.000000000 +0000
@@ -37,6 +37,9 @@ create_feature_aarch64_fpu (struct targe
   element_type = tdesc_named_type (feature, "int16");
   tdesc_create_vector (feature, "v8i", element_type, 8);
 
+  element_type = tdesc_named_type (feature, "bfloat16");
+  tdesc_create_vector (feature, "v8bf16", element_type, 8);
+
   element_type = tdesc_named_type (feature, "uint8");
   tdesc_create_vector (feature, "v16u", element_type, 16);
 
@@ -68,6 +71,8 @@ create_feature_aarch64_fpu (struct targe
   tdesc_add_field (type_with_fields, "s", field_type);
 
   type_with_fields = tdesc_create_union (feature, "vnh");
+  field_type = tdesc_named_type (feature, "v8bf16");
+  tdesc_add_field (type_with_fields, "bf", field_type);
   field_type = tdesc_named_type (feature, "v8f");
   tdesc_add_field (type_with_fields, "f", field_type);
   field_type = tdesc_named_type (feature, "v8u");
@@ -99,6 +104,35 @@ create_feature_aarch64_fpu (struct targe
   field_type = tdesc_named_type (feature, "vnq");
   tdesc_add_field (type_with_fields, "q", field_type);
 
+  type_with_fields = tdesc_create_flags (feature, "fpsr_flags", 4);
+  tdesc_add_flag (type_with_fields, 0, "IOC");
+  tdesc_add_flag (type_with_fields, 1, "DZC");
+  tdesc_add_flag (type_with_fields, 2, "OFC");
+  tdesc_add_flag (type_with_fields, 3, "UFC");
+  tdesc_add_flag (type_with_fields, 4, "IXC");
+  tdesc_add_flag (type_with_fields, 7, "IDC");
+  tdesc_add_flag (type_with_fields, 27, "QC");
+  tdesc_add_flag (type_with_fields, 28, "V");
+  tdesc_add_flag (type_with_fields, 29, "C");
+  tdesc_add_flag (type_with_fields, 30, "Z");
+  tdesc_add_flag (type_with_fields, 31, "N");
+
+  type_with_fields = tdesc_create_flags (feature, "fpcr_flags", 4);
+  tdesc_add_flag (type_with_fields, 0, "FIZ");
+  tdesc_add_flag (type_with_fields, 1, "AH");
+  tdesc_add_flag (type_with_fields, 2, "NEP");
+  tdesc_add_flag (type_with_fields, 8, "IOE");
+  tdesc_add_flag (type_with_fields, 9, "DZE");
+  tdesc_add_flag (type_with_fields, 10, "OFE");
+  tdesc_add_flag (type_with_fields, 11, "UFE");
+  tdesc_add_flag (type_with_fields, 12, "IXE");
+  tdesc_add_flag (type_with_fields, 15, "IDE");
+  tdesc_add_flag (type_with_fields, 19, "FZ16");
+  tdesc_add_bitfield (type_with_fields, "RMode", 22, 23);
+  tdesc_add_flag (type_with_fields, 24, "FZ");
+  tdesc_add_flag (type_with_fields, 25, "DN");
+  tdesc_add_flag (type_with_fields, 26, "AHP");
+
   regnum = 34;
   tdesc_create_reg (feature, "v0", regnum++, 1, NULL, 128, "aarch64v");
   tdesc_create_reg (feature, "v1", regnum++, 1, NULL, 128, "aarch64v");
@@ -132,7 +166,7 @@ create_feature_aarch64_fpu (struct targe
   tdesc_create_reg (feature, "v29", regnum++, 1, NULL, 128, "aarch64v");
   tdesc_create_reg (feature, "v30", regnum++, 1, NULL, 128, "aarch64v");
   tdesc_create_reg (feature, "v31", regnum++, 1, NULL, 128, "aarch64v");
-  tdesc_create_reg (feature, "fpsr", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "fpcr", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "fpsr", regnum++, 1, NULL, 32, "fpsr_flags");
+  tdesc_create_reg (feature, "fpcr", regnum++, 1, NULL, 32, "fpcr_flags");
   return regnum;
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-fpu.xml ./gdb/features/aarch64-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/aarch64-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc.
      Contributed by ARM Ltd.
 
      Copying and distribution of this file, with or without modification,
@@ -17,6 +17,7 @@
   <vector id="v8f" type="ieee_half" count="8"/>
   <vector id="v8u" type="uint16" count="8"/>
   <vector id="v8i" type="int16" count="8"/>
+  <vector id="v8bf16" type="bfloat16" count="8"/>
   <vector id="v16u" type="uint8" count="16"/>
   <vector id="v16i" type="int8" count="16"/>
   <vector id="v1u" type="uint128" count="1"/>
@@ -32,6 +33,7 @@
     <field name="s" type="v4i"/>
   </union>
   <union id="vnh">
+    <field name="bf" type="v8bf16"/>
     <field name="f" type="v8f"/>
     <field name="u" type="v8u"/>
     <field name="s" type="v8i"/>
@@ -83,6 +85,76 @@
   <reg name="v29" bitsize="128" type="aarch64v"/>
   <reg name="v30" bitsize="128" type="aarch64v"/>
   <reg name="v31" bitsize="128" type="aarch64v"/>
-  <reg name="fpsr" bitsize="32"/>
-  <reg name="fpcr" bitsize="32"/>
+
+  <flags id="fpsr_flags" size="4">
+    <!-- Invalid Operation cumulative floating-point exception bit.  -->
+    <field name="IOC" start="0" end="0"/>
+    <!-- Divide by Zero cumulative floating-point exception bit.  -->
+    <field name="DZC" start="1" end="1"/>
+    <!-- Overflow cumulative floating-point exception bit.  -->
+    <field name="OFC" start="2" end="2"/>
+    <!-- Underflow cumulative floating-point exception bit.  -->
+    <field name="UFC" start="3" end="3"/>
+    <!-- Inexact cumulative floating-point exception bit..  -->
+    <field name="IXC" start="4" end="4"/>
+    <!-- Input Denormal cumulative floating-point exception bit.  -->
+    <field name="IDC" start="7" end="7"/>
+    <!-- Cumulative saturation bit, Advanced SIMD only.  -->
+    <field name="QC" start="27" end="27"/>
+    <!-- When AArch32 is supported at any Exception level and AArch32
+         floating-point is implemented: Overflow condition flag for AArch32
+         floating-point comparison operations.  -->
+    <field name="V" start="28" end="28"/>
+    <!-- When AArch32 is supported at any Exception level and AArch32
+         floating-point is implemented:
+         Carry condition flag for AArch32 floating-point comparison operations.
+         -->
+    <field name="C" start="29" end="29"/>
+    <!-- When AArch32 is supported at any Exception level and AArch32
+         floating-point is implemented:
+         Zero condition flag for AArch32 floating-point comparison operations.
+         -->
+    <field name="Z" start="30" end="30"/>
+    <!-- When AArch32 is supported at any Exception level and AArch32
+         floating-point is implemented:
+         Negative condition flag for AArch32 floating-point comparison
+         operations.  -->
+    <field name="N" start="31" end="31"/>
+  </flags>
+  <reg name="fpsr" bitsize="32" type="fpsr_flags"/>
+
+  <flags id="fpcr_flags" size="4">
+    <!-- Flush Inputs to Zero (part of Armv8.7).  -->
+    <field name="FIZ" start="0" end="0"/>
+    <!-- Alternate Handling (part of Armv8.7).  -->
+    <field name="AH" start="1" end="1"/>
+    <!-- Controls how the output elements other than the lowest element of the
+         vector are determined for Advanced SIMD scalar instructions (part of
+         Armv8.7).  -->
+    <field name="NEP" start="2" end="2"/>
+    <!-- Invalid Operation floating-point exception trap enable.  -->
+    <field name="IOE" start="8" end="8"/>
+    <!-- Divide by Zero floating-point exception trap enable.  -->
+    <field name="DZE" start="9" end="9"/>
+    <!-- Overflow floating-point exception trap enable.  -->
+    <field name="OFE" start="10" end="10"/>
+    <!-- Underflow floating-point exception trap enable.  -->
+    <field name="UFE" start="11" end="11"/>
+    <!-- Inexact floating-point exception trap enable.  -->
+    <field name="IXE" start="12" end="12"/>
+    <!-- Input Denormal floating-point exception trap enable.  -->
+    <field name="IDE" start="15" end="15"/>
+    <!-- Flush-to-zero mode control bit on half-precision data-processing
+         instructions.  -->
+    <field name="FZ16" start="19" end="19"/>
+    <!-- Rounding Mode control field.  -->
+    <field name="RMode" start="22" end="23"/>
+    <!-- Flush-to-zero mode control bit.  -->
+    <field name="FZ" start="24" end="24"/>
+    <!-- Default NaN mode control bit.  -->
+    <field name="DN" start="25" end="25"/>
+    <!-- Alternative half-precision control bit.  -->
+    <field name="AHP" start="26" end="26"/>
+  </flags>
+  <reg name="fpcr" bitsize="32" type="fpcr_flags"/>
 </feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-mte.c ./gdb/features/aarch64-mte.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-mte.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/aarch64-mte.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,14 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: aarch64-mte.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_aarch64_mte (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.mte");
+  tdesc_create_reg (feature, "tag_ctl", regnum++, 0, "system", 64, "uint64");
+  return regnum;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-mte.xml ./gdb/features/aarch64-mte.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-mte.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/aarch64-mte.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2021 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.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.aarch64.mte">
+  <reg name="tag_ctl" bitsize="64" type="uint64" group="system" save-restore="no"/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-pauth.xml ./gdb/features/aarch64-pauth.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-pauth.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/aarch64-pauth.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-sve.c ./gdb/features/aarch64-sve.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/aarch64-sve.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/aarch64-sve.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-aux.c ./gdb/features/arc/v1-aux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-aux.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v1-aux.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,34 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: v1-aux.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arc_v1_aux (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux");
+  tdesc_type_with_fields *type_with_fields;
+  type_with_fields = tdesc_create_flags (feature, "status32_type", 4);
+  tdesc_add_flag (type_with_fields, 0, "H");
+  tdesc_add_bitfield (type_with_fields, "E", 1, 2);
+  tdesc_add_bitfield (type_with_fields, "A", 3, 4);
+  tdesc_add_flag (type_with_fields, 5, "AE");
+  tdesc_add_flag (type_with_fields, 6, "DE");
+  tdesc_add_flag (type_with_fields, 7, "U");
+  tdesc_add_flag (type_with_fields, 8, "V");
+  tdesc_add_flag (type_with_fields, 9, "C");
+  tdesc_add_flag (type_with_fields, 10, "N");
+  tdesc_add_flag (type_with_fields, 11, "Z");
+  tdesc_add_flag (type_with_fields, 12, "L");
+  tdesc_add_flag (type_with_fields, 13, "R");
+  tdesc_add_flag (type_with_fields, 14, "SE");
+
+  tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "status32", regnum++, 1, NULL, 32, "status32_type");
+  tdesc_create_reg (feature, "lp_start", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "lp_end", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "bta", regnum++, 1, NULL, 32, "code_ptr");
+  return regnum;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-aux.xml ./gdb/features/arc/v1-aux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-aux.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v1-aux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2021 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.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.aux">
+  <flags id="status32_type" size="4">
+      <field name="H"   start="0" end="0"/>
+      <field name="E"   start="1" end="2"/>
+      <field name="A"   start="3" end="4"/>
+      <field name="AE"  start="5" end="5"/>
+      <field name="DE"  start="6" end="6"/>
+      <field name="U"   start="7" end="7"/>
+      <field name="V"   start="8" end="8"/>
+      <field name="C"   start="9" end="9"/>
+      <field name="N"   start="10" end="10"/>
+      <field name="Z"   start="11" end="11"/>
+      <field name="L"   start="12" end="12"/>
+      <field name="R"   start="13" end="13"/>
+      <field name="SE"  start="14" end="14"/>
+  </flags>
+
+  <reg name="pc"       bitsize="32" type="code_ptr"/>
+  <reg name="status32" bitsize="32" type="status32_type"/>
+  <reg name="lp_start" bitsize="32" type="code_ptr"/>
+  <reg name="lp_end"   bitsize="32" type="code_ptr"/>
+  <reg name="bta"      bitsize="32" type="code_ptr"/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-core.c ./gdb/features/arc/v1-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-core.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v1-core.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,45 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: v1-core.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arc_v1_core (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core");
+  tdesc_create_reg (feature, "r0", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r1", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r2", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r3", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r4", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r5", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r6", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r7", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r16", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r17", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r18", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r19", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r20", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r21", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r22", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r23", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r24", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r25", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "blink", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "lp_count", regnum++, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "pcl", regnum++, 1, NULL, 32, "code_ptr");
+  return regnum;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-core.xml ./gdb/features/arc/v1-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v1-core.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v1-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2021 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.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.core">
+  <reg name="r0"  bitsize="32"/>
+  <reg name="r1"  bitsize="32"/>
+  <reg name="r2"  bitsize="32"/>
+  <reg name="r3"  bitsize="32"/>
+  <reg name="r4"  bitsize="32"/>
+  <reg name="r5"  bitsize="32"/>
+  <reg name="r6"  bitsize="32"/>
+  <reg name="r7"  bitsize="32"/>
+  <reg name="r8"  bitsize="32"/>
+  <reg name="r9"  bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+
+  <!-- ARC core data pointer registers.  -->
+  <reg name="gp"  bitsize="32" type="data_ptr"/>
+  <reg name="fp"  bitsize="32" type="data_ptr"/>
+  <reg name="sp"  bitsize="32" type="data_ptr"/>
+
+  <!-- Code pointers.  -->
+  <reg name="blink"  bitsize="32" type="code_ptr"/>
+
+  <!-- Here goes extension core registers: r32 - r59 -->
+
+  <!-- Loop counter.  -->
+  <reg name="lp_count" bitsize="32" type="uint32"/>
+
+  <!-- r61 is a reserved register address.  -->
+
+  <!-- r62 is a long immediate value, not a real register.  -->
+
+  <!-- 4-byte aligned read-only program counter.  -->
+  <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-aux.c ./gdb/features/arc/v2-aux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-aux.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v2-aux.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,38 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: v2-aux.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arc_v2_aux (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux");
+  tdesc_type_with_fields *type_with_fields;
+  type_with_fields = tdesc_create_flags (feature, "status32_type", 4);
+  tdesc_add_flag (type_with_fields, 0, "H");
+  tdesc_add_bitfield (type_with_fields, "E", 1, 4);
+  tdesc_add_flag (type_with_fields, 5, "AE");
+  tdesc_add_flag (type_with_fields, 6, "DE");
+  tdesc_add_flag (type_with_fields, 7, "U");
+  tdesc_add_flag (type_with_fields, 8, "V");
+  tdesc_add_flag (type_with_fields, 9, "C");
+  tdesc_add_flag (type_with_fields, 10, "N");
+  tdesc_add_flag (type_with_fields, 11, "Z");
+  tdesc_add_flag (type_with_fields, 12, "L");
+  tdesc_add_flag (type_with_fields, 13, "DZ");
+  tdesc_add_flag (type_with_fields, 14, "SC");
+  tdesc_add_flag (type_with_fields, 15, "ES");
+  tdesc_add_bitfield (type_with_fields, "RB", 16, 18);
+  tdesc_add_flag (type_with_fields, 19, "AD");
+  tdesc_add_flag (type_with_fields, 20, "US");
+  tdesc_add_flag (type_with_fields, 31, "IE");
+
+  tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "status32", regnum++, 1, NULL, 32, "status32_type");
+  tdesc_create_reg (feature, "lp_start", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "lp_end", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "bta", regnum++, 1, NULL, 32, "code_ptr");
+  return regnum;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-aux.xml ./gdb/features/arc/v2-aux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-aux.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v2-aux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2021 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.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.aux">
+  <flags id="status32_type" size="4">
+      <field name="H"   start="0" end="0"/>
+      <field name="E"   start="1" end="4"/>
+      <field name="AE"  start="5" end="5"/>
+      <field name="DE"  start="6" end="6"/>
+      <field name="U"   start="7" end="7"/>
+      <field name="V"   start="8" end="8"/>
+      <field name="C"   start="9" end="9"/>
+      <field name="N"   start="10" end="10"/>
+      <field name="Z"   start="11" end="11"/>
+      <field name="L"   start="12" end="12"/>
+      <field name="DZ"  start="13" end="13"/>
+      <field name="SC"  start="14" end="14"/>
+      <field name="ES"  start="15" end="15"/>
+      <field name="RB"  start="16" end="18"/>
+      <field name="AD"  start="19" end="19"/>
+      <field name="US"  start="20" end="20"/>
+      <field name="IE"  start="31" end="31"/>
+  </flags>
+
+  <reg name="pc"       bitsize="32" type="code_ptr"/>
+  <reg name="status32" bitsize="32" type="status32_type"/>
+  <reg name="lp_start" bitsize="32" type="code_ptr"/>
+  <reg name="lp_end"   bitsize="32" type="code_ptr"/>
+  <reg name="bta"      bitsize="32" type="code_ptr"/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-core.c ./gdb/features/arc/v2-core.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-core.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v2-core.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,46 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: v2-core.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_arc_v2_core (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core");
+  tdesc_create_reg (feature, "r0", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r1", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r2", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r3", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r4", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r5", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r6", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r7", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r16", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r17", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r18", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r19", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r20", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r21", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r22", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r23", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r24", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r25", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "r30", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "blink", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "lp_count", regnum++, 1, NULL, 32, "uint32");
+  tdesc_create_reg (feature, "pcl", regnum++, 1, NULL, 32, "code_ptr");
+  return regnum;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-core.xml ./gdb/features/arc/v2-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc/v2-core.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/arc/v2-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2021 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.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.core">
+  <reg name="r0"  bitsize="32"/>
+  <reg name="r1"  bitsize="32"/>
+  <reg name="r2"  bitsize="32"/>
+  <reg name="r3"  bitsize="32"/>
+  <reg name="r4"  bitsize="32"/>
+  <reg name="r5"  bitsize="32"/>
+  <reg name="r6"  bitsize="32"/>
+  <reg name="r7"  bitsize="32"/>
+  <reg name="r8"  bitsize="32"/>
+  <reg name="r9"  bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+
+  <!-- ARC core data pointer registers.  -->
+  <reg name="gp"  bitsize="32" type="data_ptr"/>
+  <reg name="fp"  bitsize="32" type="data_ptr"/>
+  <reg name="sp"  bitsize="32" type="data_ptr"/>
+
+  <!-- Code pointers.  R30 is general purpose, but it used to be ILINK2 in
+  ARCompact, thus its odd position in between of special purpose registers.
+  GCC does't use this register, so it isn't a member of a general group. -->
+  <reg name="r30"   bitsize="32" group=""/>
+  <reg name="blink" bitsize="32" type="code_ptr"/>
+
+  <!-- Extension core registers: r32 - r57.  -->
+  <!-- ACCL/ACCH registers: r58, r59.  -->
+
+  <!-- Loop counter.  -->
+  <reg name="lp_count" bitsize="32" type="uint32"/>
+
+  <!-- r61 is a reserved register address.  -->
+
+  <!-- r62 is a long immediate value, not a real register.  -->
+
+  <!-- 4-byte aligned read-only program counter.  -->
+  <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-arcompact.c ./gdb/features/arc-arcompact.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-arcompact.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arc-arcompact.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,74 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arc-arcompact.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_arc_arcompact;
-static void
-initialize_tdesc_arc_arcompact (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("ARC700"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.arcompact");
-  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "gp", 26, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ilink1", 29, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "ilink2", 30, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal");
-  tdesc_type_with_fields *type_with_fields;
-  type_with_fields = tdesc_create_flags (feature, "status32_type", 4);
-  tdesc_add_flag (type_with_fields, 0, "H");
-  tdesc_add_bitfield (type_with_fields, "E", 1, 2);
-  tdesc_add_bitfield (type_with_fields, "A", 3, 4);
-  tdesc_add_flag (type_with_fields, 5, "AE");
-  tdesc_add_flag (type_with_fields, 6, "DE");
-  tdesc_add_flag (type_with_fields, 7, "U");
-  tdesc_add_flag (type_with_fields, 8, "V");
-  tdesc_add_flag (type_with_fields, 9, "C");
-  tdesc_add_flag (type_with_fields, 10, "N");
-  tdesc_add_flag (type_with_fields, 11, "Z");
-  tdesc_add_flag (type_with_fields, 12, "L");
-  tdesc_add_flag (type_with_fields, 13, "R");
-  tdesc_add_flag (type_with_fields, 14, "SE");
-
-  tdesc_create_reg (feature, "pc", 34, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "status32", 35, 1, NULL, 32, "status32_type");
-
-  tdesc_arc_arcompact = result;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-arcompact.xml ./gdb/features/arc-arcompact.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-arcompact.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arc-arcompact.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,85 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2015-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.  -->
-
-<!DOCTYPE target SYSTEM "gdb-target.dtd">
-<target>
-  <architecture>arc:ARC700</architecture>
-  <!-- No OSABI for bare metal.  -->
-  <!-- No compatibility for ARC.  -->
-
-  <feature name="org.gnu.gdb.arc.core.arcompact">
-    <reg name="r0"  bitsize="32"/>
-    <reg name="r1"  bitsize="32"/>
-    <reg name="r2"  bitsize="32"/>
-    <reg name="r3"  bitsize="32"/>
-    <reg name="r4"  bitsize="32"/>
-    <reg name="r5"  bitsize="32"/>
-    <reg name="r6"  bitsize="32"/>
-    <reg name="r7"  bitsize="32"/>
-    <reg name="r8"  bitsize="32"/>
-    <reg name="r9"  bitsize="32"/>
-    <reg name="r10" bitsize="32"/>
-    <reg name="r11" bitsize="32"/>
-    <reg name="r12" bitsize="32"/>
-    <reg name="r13" bitsize="32"/>
-    <reg name="r14" bitsize="32"/>
-    <reg name="r15" bitsize="32"/>
-    <reg name="r16" bitsize="32"/>
-    <reg name="r17" bitsize="32"/>
-    <reg name="r18" bitsize="32"/>
-    <reg name="r19" bitsize="32"/>
-    <reg name="r20" bitsize="32"/>
-    <reg name="r21" bitsize="32"/>
-    <reg name="r22" bitsize="32"/>
-    <reg name="r23" bitsize="32"/>
-    <reg name="r24" bitsize="32"/>
-    <reg name="r25" bitsize="32"/>
-
-    <!-- ARC core data pointer registers.  -->
-    <reg name="gp"  bitsize="32" type="data_ptr"/>
-    <reg name="fp"  bitsize="32" type="data_ptr"/>
-    <reg name="sp"  bitsize="32" type="data_ptr"/>
-
-    <!-- Code pointers.  -->
-    <reg name="ilink1" bitsize="32" type="code_ptr"/>
-    <reg name="ilink2" bitsize="32" type="code_ptr"/>
-    <reg name="blink"  bitsize="32" type="code_ptr"/>
-
-    <!-- Here goes extension core registers: r32 - r59 -->
-
-    <!-- Loop counter.  -->
-    <reg name="lp_count" bitsize="32" type="uint32"/>
-
-    <!-- r61 is a reserved register address.  -->
-
-    <!-- r62 is a long immediate value, not a real register.  -->
-
-    <!-- 4-byte aligned read-only program counter.  -->
-    <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
-  </feature>
-
-  <feature name="org.gnu.gdb.arc.aux-minimal">
-    <flags id="status32_type" size="4">
-	<field name="H"   start="0" end="0"/>
-	<field name="E"   start="1" end="2"/>
-	<field name="A"   start="3" end="4"/>
-	<field name="AE"  start="5" end="5"/>
-	<field name="DE"  start="6" end="6"/>
-	<field name="U"   start="7" end="7"/>
-	<field name="V"   start="8" end="8"/>
-	<field name="C"   start="9" end="9"/>
-	<field name="N"   start="10" end="10"/>
-	<field name="Z"   start="11" end="11"/>
-	<field name="L"   start="12" end="12"/>
-	<field name="R"  start="13" end="13"/>
-	<field name="SE"  start="14" end="14"/>
-    </flags>
-
-    <reg name="pc"       bitsize="32" type="code_ptr"/>
-    <reg name="status32" bitsize="32" type="status32_type"/>
-  </feature>
-</target>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-v2.c ./gdb/features/arc-v2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-v2.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arc-v2.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,78 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arc-v2.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_arc_v2;
-static void
-initialize_tdesc_arc_v2 (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("ARCv2"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.v2");
-  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "gp", 26, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ilink", 29, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal");
-  tdesc_type_with_fields *type_with_fields;
-  type_with_fields = tdesc_create_flags (feature, "status32_type", 4);
-  tdesc_add_flag (type_with_fields, 0, "H");
-  tdesc_add_bitfield (type_with_fields, "E", 1, 4);
-  tdesc_add_flag (type_with_fields, 5, "AE");
-  tdesc_add_flag (type_with_fields, 6, "DE");
-  tdesc_add_flag (type_with_fields, 7, "U");
-  tdesc_add_flag (type_with_fields, 8, "V");
-  tdesc_add_flag (type_with_fields, 9, "C");
-  tdesc_add_flag (type_with_fields, 10, "N");
-  tdesc_add_flag (type_with_fields, 11, "Z");
-  tdesc_add_flag (type_with_fields, 12, "L");
-  tdesc_add_flag (type_with_fields, 13, "DZ");
-  tdesc_add_flag (type_with_fields, 14, "SC");
-  tdesc_add_flag (type_with_fields, 15, "ES");
-  tdesc_add_bitfield (type_with_fields, "RB", 16, 18);
-  tdesc_add_flag (type_with_fields, 19, "AD");
-  tdesc_add_flag (type_with_fields, 20, "US");
-  tdesc_add_flag (type_with_fields, 31, "IE");
-
-  tdesc_create_reg (feature, "pc", 34, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "status32", 35, 1, NULL, 32, "status32_type");
-
-  tdesc_arc_v2 = result;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-v2.xml ./gdb/features/arc-v2.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arc-v2.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arc-v2.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2015-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.  -->
-
-<!DOCTYPE target SYSTEM "gdb-target.dtd">
-<target>
-  <architecture>arc:ARCv2</architecture>
-  <!-- No OSABI for bare metal.  -->
-  <!-- No compatibility for ARC.  -->
-
-  <feature name="org.gnu.gdb.arc.core.v2">
-    <reg name="r0"  bitsize="32"/>
-    <reg name="r1"  bitsize="32"/>
-    <reg name="r2"  bitsize="32"/>
-    <reg name="r3"  bitsize="32"/>
-    <reg name="r4"  bitsize="32"/>
-    <reg name="r5"  bitsize="32"/>
-    <reg name="r6"  bitsize="32"/>
-    <reg name="r7"  bitsize="32"/>
-    <reg name="r8"  bitsize="32"/>
-    <reg name="r9"  bitsize="32"/>
-    <reg name="r10" bitsize="32"/>
-    <reg name="r11" bitsize="32"/>
-    <reg name="r12" bitsize="32"/>
-    <reg name="r13" bitsize="32"/>
-    <reg name="r14" bitsize="32"/>
-    <reg name="r15" bitsize="32"/>
-    <reg name="r16" bitsize="32"/>
-    <reg name="r17" bitsize="32"/>
-    <reg name="r18" bitsize="32"/>
-    <reg name="r19" bitsize="32"/>
-    <reg name="r20" bitsize="32"/>
-    <reg name="r21" bitsize="32"/>
-    <reg name="r22" bitsize="32"/>
-    <reg name="r23" bitsize="32"/>
-    <reg name="r24" bitsize="32"/>
-    <reg name="r25" bitsize="32"/>
-
-    <!-- ARC core data pointer registers.  -->
-    <reg name="gp"  bitsize="32" type="data_ptr"/>
-    <reg name="fp"  bitsize="32" type="data_ptr"/>
-    <reg name="sp"  bitsize="32" type="data_ptr"/>
-
-    <!-- Code pointers.  R30 is general purpose, but it used to be ILINK2 in
-    ARCompact, thus its odd position in between of special purpose registers.
-    GCC does't use this register, so it isn't a member of a general group. -->
-    <reg name="ilink" bitsize="32" type="code_ptr"/>
-    <reg name="r30"   bitsize="32" group=""/>
-    <reg name="blink" bitsize="32" type="code_ptr"/>
-
-    <!-- Here goes extension core registers: r32 - r57.  -->
-    <!-- Here goes ACCL/ACCH registers, r58, r59.  -->
-
-    <!-- Loop counter.  -->
-    <reg name="lp_count" bitsize="32" type="uint32"/>
-
-    <!-- r61 is a reserved register address.  -->
-
-    <!-- r62 is a long immediate value, not a real register.  -->
-
-    <!-- 4-byte aligned read-only program counter.  -->
-    <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
-  </feature>
-
-  <feature name="org.gnu.gdb.arc.aux-minimal">
-    <flags id="status32_type" size="4">
-	<field name="H"   start="0" end="0"/>
-	<field name="E"   start="1" end="4"/>
-	<field name="AE"  start="5" end="5"/>
-	<field name="DE"  start="6" end="6"/>
-	<field name="U"   start="7" end="7"/>
-	<field name="V"   start="8" end="8"/>
-	<field name="C"   start="9" end="9"/>
-	<field name="N"   start="10" end="10"/>
-	<field name="Z"   start="11" end="11"/>
-	<field name="L"   start="12" end="12"/>
-	<field name="DZ"  start="13" end="13"/>
-	<field name="SC"  start="14" end="14"/>
-	<field name="ES"  start="15" end="15"/>
-	<field name="RB"  start="16" end="18"/>
-	<field name="AD"  start="19" end="19"/>
-	<field name="US"  start="20" end="20"/>
-	<field name="IE"  start="31" end="31"/>
-    </flags>
-
-    <reg name="pc"       bitsize="32" type="code_ptr"/>
-    <reg name="status32" bitsize="32" type="status32_type"/>
-  </feature>
-</target>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-core.xml ./gdb/features/arm/arm-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/arm-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-fpa.xml ./gdb/features/arm/arm-fpa.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-fpa.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/arm-fpa.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-m-profile-with-fpa.xml ./gdb/features/arm/arm-m-profile-with-fpa.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-m-profile-with-fpa.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/arm-m-profile-with-fpa.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2019-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2019-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-m-profile.xml ./gdb/features/arm/arm-m-profile.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-m-profile.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/arm-m-profile.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-vfpv2.xml ./gdb/features/arm/arm-vfpv2.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-vfpv2.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/arm-vfpv2.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-vfpv3.xml ./gdb/features/arm/arm-vfpv3.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/arm-vfpv3.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/arm-vfpv3.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/xscale-iwmmxt.xml ./gdb/features/arm/xscale-iwmmxt.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/arm/xscale-iwmmxt.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/arm/xscale-iwmmxt.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/btrace-conf.dtd ./gdb/features/btrace-conf.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/btrace-conf.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/btrace-conf.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/btrace.dtd ./gdb/features/btrace.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/btrace.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/btrace.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/feature_to_c.sh ./gdb/features/feature_to_c.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/feature_to_c.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/feature_to_c.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # Convert text files to compilable C arrays.
 #
-# Copyright (C) 2007-2020 Free Software Foundation, Inc.
+# Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/gdb-target.dtd ./gdb/features/gdb-target.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/gdb-target.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/gdb-target.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-avx512.xml ./gdb/features/i386/32bit-avx512.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-avx512.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-avx512.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-avx.xml ./gdb/features/i386/32bit-avx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-avx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-avx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-core.xml ./gdb/features/i386/32bit-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-linux.xml ./gdb/features/i386/32bit-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-mpx.xml ./gdb/features/i386/32bit-mpx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-mpx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-mpx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-pkeys.xml ./gdb/features/i386/32bit-pkeys.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-pkeys.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-pkeys.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-segments.xml ./gdb/features/i386/32bit-segments.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-segments.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-segments.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-sse.xml ./gdb/features/i386/32bit-sse.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/32bit-sse.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/32bit-sse.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-avx512.c ./gdb/features/i386/64bit-avx512.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-avx512.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-avx512.c	2021-12-16 01:57:39.000000000 +0000
@@ -10,6 +10,9 @@ create_feature_i386_64bit_avx512 (struct
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
   tdesc_type *element_type;
+  element_type = tdesc_named_type (feature, "bfloat16");
+  tdesc_create_vector (feature, "v8bf16", element_type, 8);
+
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
 
@@ -31,6 +34,8 @@ create_feature_i386_64bit_avx512 (struct
   tdesc_type_with_fields *type_with_fields;
   type_with_fields = tdesc_create_union (feature, "vec128");
   tdesc_type *field_type;
+  field_type = tdesc_named_type (feature, "v8bf16");
+  tdesc_add_field (type_with_fields, "v8_bfloat16", field_type);
   field_type = tdesc_named_type (feature, "v4f");
   tdesc_add_field (type_with_fields, "v4_float", field_type);
   field_type = tdesc_named_type (feature, "v2d");
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-avx512.xml ./gdb/features/i386/64bit-avx512.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-avx512.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-avx512.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
      Copying and distribution of this file, with or without modification,
      are permitted in any medium without royalty provided the copyright
@@ -7,13 +7,15 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.i386.avx512">
-<vector id="v4f" type="ieee_single" count="4"/>
+  <vector id="v8bf16" type="bfloat16" count="8"/>
+  <vector id="v4f" type="ieee_single" count="4"/>
   <vector id="v2d" type="ieee_double" count="2"/>
   <vector id="v16i8" type="int8" count="16"/>
   <vector id="v8i16" type="int16" count="8"/>
   <vector id="v4i32" type="int32" count="4"/>
   <vector id="v2i64" type="int64" count="2"/>
   <union id="vec128">
+    <field name="v8_bfloat16" type="v8bf16"/>
     <field name="v4_float" type="v4f"/>
     <field name="v2_double" type="v2d"/>
     <field name="v16_int8" type="v16i8"/>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-avx.xml ./gdb/features/i386/64bit-avx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-avx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-avx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-core.xml ./gdb/features/i386/64bit-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-linux.xml ./gdb/features/i386/64bit-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-mpx.xml ./gdb/features/i386/64bit-mpx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-mpx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-mpx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-pkeys.xml ./gdb/features/i386/64bit-pkeys.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-pkeys.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-pkeys.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-segments.xml ./gdb/features/i386/64bit-segments.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-segments.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-segments.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-sse.c ./gdb/features/i386/64bit-sse.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-sse.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-sse.c	2021-12-16 01:57:39.000000000 +0000
@@ -10,6 +10,9 @@ create_feature_i386_64bit_sse (struct ta
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
   tdesc_type *element_type;
+  element_type = tdesc_named_type (feature, "bfloat16");
+  tdesc_create_vector (feature, "v8bf16", element_type, 8);
+
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
 
@@ -31,6 +34,8 @@ create_feature_i386_64bit_sse (struct ta
   tdesc_type_with_fields *type_with_fields;
   type_with_fields = tdesc_create_union (feature, "vec128");
   tdesc_type *field_type;
+  field_type = tdesc_named_type (feature, "v8bf16");
+  tdesc_add_field (type_with_fields, "v8_bfloat16", field_type);
   field_type = tdesc_named_type (feature, "v4f");
   tdesc_add_field (type_with_fields, "v4_float", field_type);
   field_type = tdesc_named_type (feature, "v2d");
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-sse.xml ./gdb/features/i386/64bit-sse.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/64bit-sse.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/64bit-sse.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
      Copying and distribution of this file, with or without modification,
      are permitted in any medium without royalty provided the copyright
@@ -7,6 +7,7 @@
 
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.i386.sse">
+  <vector id="v8bf16" type="bfloat16" count="8"/>
   <vector id="v4f" type="ieee_single" count="4"/>
   <vector id="v2d" type="ieee_double" count="2"/>
   <vector id="v16i8" type="int8" count="16"/>
@@ -14,6 +15,7 @@
   <vector id="v4i32" type="int32" count="4"/>
   <vector id="v2i64" type="int64" count="2"/>
   <union id="vec128">
+    <field name="v8_bfloat16" type="v8bf16"/>
     <field name="v4_float" type="v4f"/>
     <field name="v2_double" type="v2d"/>
     <field name="v16_int8" type="v16i8"/>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/x32-core.xml ./gdb/features/i386/x32-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/i386/x32-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/i386/x32-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/library-list-aix.dtd ./gdb/features/library-list-aix.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/library-list-aix.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/library-list-aix.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/library-list.dtd ./gdb/features/library-list.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/library-list.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/library-list.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/library-list-svr4.dtd ./gdb/features/library-list-svr4.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/library-list-svr4.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/library-list-svr4.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/Makefile ./gdb/features/Makefile
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/Makefile	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/Makefile	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020 Free Software Foundation, Inc.
+# Copyright (C) 2007-2021 Free Software Foundation, Inc.
 
 # This file is part of GDB.
 
@@ -44,9 +44,7 @@
 #   make GDB=/path/to/gdb XMLTOC="xml files" FEATURE_XMLFILES="xml files" cfiles
 
 # List of .dat files to create in ../regformats/
-WHICH = arm/arm-with-iwmmxt arm/arm-with-vfpv2 arm/arm-with-vfpv3 \
-	arm/arm-with-neon \
-	mips-linux mips-dsp-linux \
+WHICH = mips-linux mips-dsp-linux \
 	microblaze-with-stack-protect \
 	mips64-linux mips64-dsp-linux \
 	nios2-linux \
@@ -108,8 +106,6 @@ OUTPUTS = $(patsubst %,$(outdir)/%.dat,$
 # --enable-targets=all GDB.  You can override this by passing XMLTOC
 # to make on the command line.
 XMLTOC = \
-	arc-v2.xml \
-	arc-arcompact.xml \
 	microblaze-with-stack-protect.xml \
 	microblaze.xml \
 	mips-dsp-linux.xml \
@@ -174,7 +170,8 @@ XMLTOC = \
 	s390x-tevx-linux64.xml \
 	s390x-vx-linux64.xml \
 	s390-gs-linux64.xml \
-	s390x-gs-linux64.xml
+	s390x-gs-linux64.xml \
+	z80.xml
 
 TDESC_CFILES = $(patsubst %.xml,%.c,$(XMLTOC))
 GDB = false
@@ -206,6 +203,11 @@ all: $(OUTPUTS)
 FEATURE_XMLFILES = aarch64-core.xml \
 	aarch64-fpu.xml \
 	aarch64-pauth.xml \
+	aarch64-mte.xml \
+	arc/v1-core.xml \
+	arc/v1-aux.xml \
+	arc/v2-core.xml \
+	arc/v2-aux.xml \
 	arm/arm-core.xml \
 	arm/arm-fpa.xml \
 	arm/arm-m-profile.xml \
@@ -229,13 +231,11 @@ FEATURE_XMLFILES = aarch64-core.xml \
 	i386/64bit-pkeys.xml \
 	i386/64bit-sse.xml \
 	i386/x32-core.xml \
+	riscv/rv32e-xregs.xml \
 	riscv/32bit-cpu.xml \
-	riscv/32bit-csr.xml \
 	riscv/32bit-fpu.xml \
 	riscv/64bit-cpu.xml \
-	riscv/64bit-csr.xml \
 	riscv/64bit-fpu.xml \
-	rx.xml \
 	tic6x-c6xp.xml \
 	tic6x-core.xml \
 	tic6x-gp.xml
@@ -250,7 +250,7 @@ cfiles: $(TDESC_CFILES) $(FEATURE_CFILES
 
 $(FEATURE_CFILES): %.c: %.xml.tmp
 	$(GDB) -nx -q -batch \
-	  -ex 'maint print c-tdesc $<' > $@.tmp
+	  -ex 'maint print c-tdesc -single-feature $<' > $@.tmp
 	sh ../../move-if-change $@.tmp $@
 	rm $<
 
@@ -266,10 +266,6 @@ cfiles: $(TDESC_CFILES) $(FEATURE_CFILES
 	echo "</target>" >> $@.tmp
 	sh ../../move-if-change $@.tmp $@
 
-# Regenerate RISC-V CSR feature lists.
-riscv/32bit-csr.xml riscv/64bit-csr.xml: ../../include/opcode/riscv-opc.h
-	./riscv/rebuild-csr-xml.sh ../../include/opcode/riscv-opc.h ./riscv
-
 # 'all' doesn't build the C files, so don't delete them in 'clean'
 # either.
 clean-cfiles:
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze.c ./gdb/features/microblaze.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/microblaze.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_microblaze;
 static void
 initialize_tdesc_microblaze (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.microblaze.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "data_ptr");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -71,5 +71,5 @@ initialize_tdesc_microblaze (void)
   tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
 
-  tdesc_microblaze = result;
+  tdesc_microblaze = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-core.xml ./gdb/features/microblaze-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/microblaze-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-stack-protect.xml ./gdb/features/microblaze-stack-protect.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-stack-protect.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/microblaze-stack-protect.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-with-stack-protect.c ./gdb/features/microblaze-with-stack-protect.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-with-stack-protect.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/microblaze-with-stack-protect.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_microblaze_wit
 static void
 initialize_tdesc_microblaze_with_stack_protect (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.microblaze.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "data_ptr");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -71,9 +71,9 @@ initialize_tdesc_microblaze_with_stack_p
   tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.microblaze.stack-protect");
   tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int");
 
-  tdesc_microblaze_with_stack_protect = result;
+  tdesc_microblaze_with_stack_protect = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-with-stack-protect.xml ./gdb/features/microblaze-with-stack-protect.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze-with-stack-protect.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/microblaze-with-stack-protect.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze.xml ./gdb/features/microblaze.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/microblaze.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/microblaze.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-cp0.xml ./gdb/features/mips64-cp0.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-cp0.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-cp0.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-cpu.xml ./gdb/features/mips64-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-dsp-linux.c ./gdb/features/mips64-dsp-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-dsp-linux.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-dsp-linux.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_mips64_dsp_lin
 static void
 initialize_tdesc_mips64_dsp_linux (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("mips"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("mips"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cpu");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "int");
@@ -51,12 +51,12 @@ initialize_tdesc_mips64_dsp_linux (void)
   tdesc_create_reg (feature, "hi", 34, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "pc", 37, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cp0");
   tdesc_create_reg (feature, "status", 32, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "cause", 36, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.fpu");
   tdesc_create_reg (feature, "f0", 38, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 39, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 40, 1, NULL, 64, "ieee_double");
@@ -92,7 +92,7 @@ initialize_tdesc_mips64_dsp_linux (void)
   tdesc_create_reg (feature, "fcsr", 70, 1, "float", 64, "int");
   tdesc_create_reg (feature, "fir", 71, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.dsp");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.dsp");
   tdesc_create_reg (feature, "hi1", 72, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "lo1", 73, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "hi2", 74, 1, NULL, 64, "int");
@@ -101,8 +101,8 @@ initialize_tdesc_mips64_dsp_linux (void)
   tdesc_create_reg (feature, "lo3", 77, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "dspctl", 78, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.linux");
   tdesc_create_reg (feature, "restart", 79, 1, "system", 64, "int");
 
-  tdesc_mips64_dsp_linux = result;
+  tdesc_mips64_dsp_linux = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-dsp-linux.xml ./gdb/features/mips64-dsp-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-dsp-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-dsp-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-dsp.xml ./gdb/features/mips64-dsp.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-dsp.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-dsp.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-fpu.xml ./gdb/features/mips64-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-linux.c ./gdb/features/mips64-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-linux.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-linux.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_mips64_linux;
 static void
 initialize_tdesc_mips64_linux (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("mips"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("mips"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cpu");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "int");
@@ -51,12 +51,12 @@ initialize_tdesc_mips64_linux (void)
   tdesc_create_reg (feature, "hi", 34, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "pc", 37, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cp0");
   tdesc_create_reg (feature, "status", 32, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "cause", 36, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.fpu");
   tdesc_create_reg (feature, "f0", 38, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 39, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 40, 1, NULL, 64, "ieee_double");
@@ -92,8 +92,8 @@ initialize_tdesc_mips64_linux (void)
   tdesc_create_reg (feature, "fcsr", 70, 1, "float", 64, "int");
   tdesc_create_reg (feature, "fir", 71, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.linux");
   tdesc_create_reg (feature, "restart", 72, 1, "system", 64, "int");
 
-  tdesc_mips64_linux = result;
+  tdesc_mips64_linux = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-linux.xml ./gdb/features/mips64-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips64-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips64-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-cp0.xml ./gdb/features/mips-cp0.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-cp0.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-cp0.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-cpu.xml ./gdb/features/mips-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-dsp-linux.c ./gdb/features/mips-dsp-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-dsp-linux.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-dsp-linux.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,14 +9,14 @@ struct target_desc *tdesc_mips_dsp_linux
 static void
 initialize_tdesc_mips_dsp_linux (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("mips"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("mips"));
 
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+  set_tdesc_osabi (result.get (), osabi_from_tdesc_string ("GNU/Linux"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cpu");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -53,12 +53,12 @@ initialize_tdesc_mips_dsp_linux (void)
   tdesc_create_reg (feature, "hi", 34, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "pc", 37, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cp0");
   tdesc_create_reg (feature, "status", 32, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "cause", 36, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.fpu");
   tdesc_create_reg (feature, "f0", 38, 1, NULL, 32, "ieee_single");
   tdesc_create_reg (feature, "f1", 39, 1, NULL, 32, "ieee_single");
   tdesc_create_reg (feature, "f2", 40, 1, NULL, 32, "ieee_single");
@@ -94,7 +94,7 @@ initialize_tdesc_mips_dsp_linux (void)
   tdesc_create_reg (feature, "fcsr", 70, 1, "float", 32, "int");
   tdesc_create_reg (feature, "fir", 71, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.dsp");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.dsp");
   tdesc_create_reg (feature, "hi1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "lo1", 73, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "hi2", 74, 1, NULL, 32, "int");
@@ -103,8 +103,8 @@ initialize_tdesc_mips_dsp_linux (void)
   tdesc_create_reg (feature, "lo3", 77, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "dspctl", 78, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.linux");
   tdesc_create_reg (feature, "restart", 79, 1, "system", 32, "int");
 
-  tdesc_mips_dsp_linux = result;
+  tdesc_mips_dsp_linux = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-dsp-linux.xml ./gdb/features/mips-dsp-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-dsp-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-dsp-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-dsp.xml ./gdb/features/mips-dsp.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-dsp.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-dsp.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-fpu.xml ./gdb/features/mips-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-linux.c ./gdb/features/mips-linux.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-linux.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-linux.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,14 +9,14 @@ struct target_desc *tdesc_mips_linux;
 static void
 initialize_tdesc_mips_linux (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("mips"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("mips"));
 
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+  set_tdesc_osabi (result.get (), osabi_from_tdesc_string ("GNU/Linux"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cpu");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -53,12 +53,12 @@ initialize_tdesc_mips_linux (void)
   tdesc_create_reg (feature, "hi", 34, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "pc", 37, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.cp0");
   tdesc_create_reg (feature, "status", 32, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "cause", 36, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.fpu");
   tdesc_create_reg (feature, "f0", 38, 1, NULL, 32, "ieee_single");
   tdesc_create_reg (feature, "f1", 39, 1, NULL, 32, "ieee_single");
   tdesc_create_reg (feature, "f2", 40, 1, NULL, 32, "ieee_single");
@@ -94,8 +94,8 @@ initialize_tdesc_mips_linux (void)
   tdesc_create_reg (feature, "fcsr", 70, 1, "float", 32, "int");
   tdesc_create_reg (feature, "fir", 71, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.mips.linux");
   tdesc_create_reg (feature, "restart", 72, 1, "system", 32, "int");
 
-  tdesc_mips_linux = result;
+  tdesc_mips_linux = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-linux.xml ./gdb/features/mips-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/mips-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/mips-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32.c ./gdb/features/nds32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nds32.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_nds32;
 static void
 initialize_tdesc_nds32 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("n1h"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("n1h"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.nds32.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.nds32.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -49,7 +49,7 @@ initialize_tdesc_nds32 (void)
   tdesc_create_reg (feature, "sp", 31, 1, NULL, 32, "data_ptr");
   tdesc_create_reg (feature, "pc", 32, 1, NULL, 32, "code_ptr");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.nds32.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.nds32.fpu");
   tdesc_create_reg (feature, "fd0", 33, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "fd1", 34, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "fd2", 35, 1, "float", 64, "ieee_double");
@@ -83,10 +83,10 @@ initialize_tdesc_nds32 (void)
   tdesc_create_reg (feature, "fd30", 63, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "fd31", 64, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.nds32.system");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.nds32.system");
   tdesc_create_reg (feature, "ir0", 65, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "itb", 66, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ifc_lp", 67, 1, NULL, 32, "int");
 
-  tdesc_nds32 = result;
+  tdesc_nds32 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32-core.xml ./gdb/features/nds32-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nds32-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32-fpu.xml ./gdb/features/nds32-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nds32-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32-system.xml ./gdb/features/nds32-system.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32-system.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nds32-system.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32.xml ./gdb/features/nds32.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nds32.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nds32.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2.c ./gdb/features/nios2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nios2.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_nios2;
 static void
 initialize_tdesc_nios2 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("nios2"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("nios2"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.nios2.cpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.nios2.cpu");
   tdesc_create_reg (feature, "zero", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "at", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -65,5 +65,5 @@ initialize_tdesc_nios2 (void)
   tdesc_create_reg (feature, "mpubase", 47, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "mpuacc", 48, 1, NULL, 32, "uint32");
 
-  tdesc_nios2 = result;
+  tdesc_nios2 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2-cpu.xml ./gdb/features/nios2-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nios2-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2-linux.xml ./gdb/features/nios2-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nios2-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2012-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2.xml ./gdb/features/nios2.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/nios2.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/nios2.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/or1k.c ./gdb/features/or1k.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/or1k.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/or1k.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_or1k;
 static void
 initialize_tdesc_or1k (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("or1k"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("or1k"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.or1k.group0");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.or1k.group0");
   tdesc_type_with_fields *type_with_fields;
   type_with_fields = tdesc_create_flags (feature, "sr_flags", 4);
   tdesc_add_flag (type_with_fields, 0, "SM");
@@ -72,5 +72,5 @@ initialize_tdesc_or1k (void)
   tdesc_create_reg (feature, "npc", 33, 1, NULL, 32, "code_ptr");
   tdesc_create_reg (feature, "sr", 34, 1, NULL, 32, "sr_flags");
 
-  tdesc_or1k = result;
+  tdesc_or1k = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/or1k-core.xml ./gdb/features/or1k-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/or1k-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/or1k-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/or1k.xml ./gdb/features/or1k.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/or1k.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/or1k.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2016-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/osdata.dtd ./gdb/features/osdata.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/osdata.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/osdata.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-cpu.xml ./gdb/features/riscv/32bit-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/32bit-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-csr.c ./gdb/features/riscv/32bit-csr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-csr.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/32bit-csr.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,253 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: 32bit-csr.xml */
-
-#include "gdbsupport/tdesc.h"
-
-static int
-create_feature_riscv_32bit_csr (struct target_desc *result, long regnum)
-{
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.riscv.csr");
-  tdesc_create_reg (feature, "ustatus", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "uie", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "utvec", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "uscratch", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "uepc", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "ucause", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "utval", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "uip", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "fflags", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "frm", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "fcsr", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "cycle", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "time", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "instret", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter3", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter4", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter5", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter6", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter7", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter8", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter9", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter10", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter11", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter12", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter13", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter14", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter15", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter16", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter17", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter18", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter19", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter20", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter21", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter22", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter23", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter24", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter25", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter26", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter27", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter28", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter29", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter30", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter31", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "cycleh", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "timeh", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "instreth", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter3h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter4h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter5h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter6h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter7h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter8h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter9h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter10h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter11h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter12h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter13h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter14h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter15h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter16h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter17h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter18h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter19h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter20h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter21h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter22h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter23h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter24h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter25h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter26h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter27h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter28h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter29h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter30h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hpmcounter31h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sstatus", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sedeleg", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sideleg", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sie", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "stvec", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "scounteren", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sscratch", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sepc", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "scause", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "stval", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "sip", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "satp", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mvendorid", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "marchid", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mimpid", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhartid", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mstatus", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "misa", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "medeleg", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mideleg", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mie", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mtvec", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mcounteren", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mscratch", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mepc", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mcause", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mtval", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mip", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpcfg0", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpcfg1", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpcfg2", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpcfg3", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr0", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr1", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr2", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr3", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr4", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr5", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr6", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr7", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr8", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr9", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr10", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr11", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr12", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr13", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr14", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "pmpaddr15", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mcycle", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "minstret", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter3", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter4", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter5", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter6", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter7", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter8", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter9", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter10", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter11", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter12", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter13", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter14", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter15", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter16", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter17", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter18", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter19", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter20", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter21", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter22", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter23", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter24", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter25", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter26", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter27", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter28", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter29", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter30", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter31", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mcycleh", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "minstreth", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter3h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter4h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter5h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter6h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter7h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter8h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter9h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter10h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter11h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter12h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter13h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter14h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter15h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter16h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter17h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter18h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter19h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter20h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter21h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter22h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter23h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter24h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter25h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter26h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter27h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter28h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter29h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter30h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmcounter31h", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent3", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent4", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent5", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent6", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent7", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent8", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent9", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent10", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent11", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent12", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent13", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent14", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent15", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent16", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent17", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent18", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent19", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent20", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent21", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent22", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent23", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent24", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent25", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent26", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent27", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent28", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent29", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent30", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhpmevent31", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "tselect", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "tdata1", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "tdata2", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "tdata3", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "dcsr", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "dpc", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "dscratch", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hstatus", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hedeleg", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hideleg", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hie", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "htvec", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hscratch", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hepc", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hcause", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hbadaddr", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "hip", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mbase", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mbound", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mibase", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mibound", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mdbase", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mdbound", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mucounteren", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mscounteren", regnum++, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "mhcounteren", regnum++, 1, NULL, 32, "int");
-  return regnum;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-csr.xml ./gdb/features/riscv/32bit-csr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-csr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/32bit-csr.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,250 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2018-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.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-target.dtd">
-<feature name="org.gnu.gdb.riscv.csr">
-  <reg name="ustatus" bitsize="32"/>
-  <reg name="uie" bitsize="32"/>
-  <reg name="utvec" bitsize="32"/>
-  <reg name="uscratch" bitsize="32"/>
-  <reg name="uepc" bitsize="32"/>
-  <reg name="ucause" bitsize="32"/>
-  <reg name="utval" bitsize="32"/>
-  <reg name="uip" bitsize="32"/>
-  <reg name="fflags" bitsize="32"/>
-  <reg name="frm" bitsize="32"/>
-  <reg name="fcsr" bitsize="32"/>
-  <reg name="cycle" bitsize="32"/>
-  <reg name="time" bitsize="32"/>
-  <reg name="instret" bitsize="32"/>
-  <reg name="hpmcounter3" bitsize="32"/>
-  <reg name="hpmcounter4" bitsize="32"/>
-  <reg name="hpmcounter5" bitsize="32"/>
-  <reg name="hpmcounter6" bitsize="32"/>
-  <reg name="hpmcounter7" bitsize="32"/>
-  <reg name="hpmcounter8" bitsize="32"/>
-  <reg name="hpmcounter9" bitsize="32"/>
-  <reg name="hpmcounter10" bitsize="32"/>
-  <reg name="hpmcounter11" bitsize="32"/>
-  <reg name="hpmcounter12" bitsize="32"/>
-  <reg name="hpmcounter13" bitsize="32"/>
-  <reg name="hpmcounter14" bitsize="32"/>
-  <reg name="hpmcounter15" bitsize="32"/>
-  <reg name="hpmcounter16" bitsize="32"/>
-  <reg name="hpmcounter17" bitsize="32"/>
-  <reg name="hpmcounter18" bitsize="32"/>
-  <reg name="hpmcounter19" bitsize="32"/>
-  <reg name="hpmcounter20" bitsize="32"/>
-  <reg name="hpmcounter21" bitsize="32"/>
-  <reg name="hpmcounter22" bitsize="32"/>
-  <reg name="hpmcounter23" bitsize="32"/>
-  <reg name="hpmcounter24" bitsize="32"/>
-  <reg name="hpmcounter25" bitsize="32"/>
-  <reg name="hpmcounter26" bitsize="32"/>
-  <reg name="hpmcounter27" bitsize="32"/>
-  <reg name="hpmcounter28" bitsize="32"/>
-  <reg name="hpmcounter29" bitsize="32"/>
-  <reg name="hpmcounter30" bitsize="32"/>
-  <reg name="hpmcounter31" bitsize="32"/>
-  <reg name="cycleh" bitsize="32"/>
-  <reg name="timeh" bitsize="32"/>
-  <reg name="instreth" bitsize="32"/>
-  <reg name="hpmcounter3h" bitsize="32"/>
-  <reg name="hpmcounter4h" bitsize="32"/>
-  <reg name="hpmcounter5h" bitsize="32"/>
-  <reg name="hpmcounter6h" bitsize="32"/>
-  <reg name="hpmcounter7h" bitsize="32"/>
-  <reg name="hpmcounter8h" bitsize="32"/>
-  <reg name="hpmcounter9h" bitsize="32"/>
-  <reg name="hpmcounter10h" bitsize="32"/>
-  <reg name="hpmcounter11h" bitsize="32"/>
-  <reg name="hpmcounter12h" bitsize="32"/>
-  <reg name="hpmcounter13h" bitsize="32"/>
-  <reg name="hpmcounter14h" bitsize="32"/>
-  <reg name="hpmcounter15h" bitsize="32"/>
-  <reg name="hpmcounter16h" bitsize="32"/>
-  <reg name="hpmcounter17h" bitsize="32"/>
-  <reg name="hpmcounter18h" bitsize="32"/>
-  <reg name="hpmcounter19h" bitsize="32"/>
-  <reg name="hpmcounter20h" bitsize="32"/>
-  <reg name="hpmcounter21h" bitsize="32"/>
-  <reg name="hpmcounter22h" bitsize="32"/>
-  <reg name="hpmcounter23h" bitsize="32"/>
-  <reg name="hpmcounter24h" bitsize="32"/>
-  <reg name="hpmcounter25h" bitsize="32"/>
-  <reg name="hpmcounter26h" bitsize="32"/>
-  <reg name="hpmcounter27h" bitsize="32"/>
-  <reg name="hpmcounter28h" bitsize="32"/>
-  <reg name="hpmcounter29h" bitsize="32"/>
-  <reg name="hpmcounter30h" bitsize="32"/>
-  <reg name="hpmcounter31h" bitsize="32"/>
-  <reg name="sstatus" bitsize="32"/>
-  <reg name="sedeleg" bitsize="32"/>
-  <reg name="sideleg" bitsize="32"/>
-  <reg name="sie" bitsize="32"/>
-  <reg name="stvec" bitsize="32"/>
-  <reg name="scounteren" bitsize="32"/>
-  <reg name="sscratch" bitsize="32"/>
-  <reg name="sepc" bitsize="32"/>
-  <reg name="scause" bitsize="32"/>
-  <reg name="stval" bitsize="32"/>
-  <reg name="sip" bitsize="32"/>
-  <reg name="satp" bitsize="32"/>
-  <reg name="mvendorid" bitsize="32"/>
-  <reg name="marchid" bitsize="32"/>
-  <reg name="mimpid" bitsize="32"/>
-  <reg name="mhartid" bitsize="32"/>
-  <reg name="mstatus" bitsize="32"/>
-  <reg name="misa" bitsize="32"/>
-  <reg name="medeleg" bitsize="32"/>
-  <reg name="mideleg" bitsize="32"/>
-  <reg name="mie" bitsize="32"/>
-  <reg name="mtvec" bitsize="32"/>
-  <reg name="mcounteren" bitsize="32"/>
-  <reg name="mscratch" bitsize="32"/>
-  <reg name="mepc" bitsize="32"/>
-  <reg name="mcause" bitsize="32"/>
-  <reg name="mtval" bitsize="32"/>
-  <reg name="mip" bitsize="32"/>
-  <reg name="pmpcfg0" bitsize="32"/>
-  <reg name="pmpcfg1" bitsize="32"/>
-  <reg name="pmpcfg2" bitsize="32"/>
-  <reg name="pmpcfg3" bitsize="32"/>
-  <reg name="pmpaddr0" bitsize="32"/>
-  <reg name="pmpaddr1" bitsize="32"/>
-  <reg name="pmpaddr2" bitsize="32"/>
-  <reg name="pmpaddr3" bitsize="32"/>
-  <reg name="pmpaddr4" bitsize="32"/>
-  <reg name="pmpaddr5" bitsize="32"/>
-  <reg name="pmpaddr6" bitsize="32"/>
-  <reg name="pmpaddr7" bitsize="32"/>
-  <reg name="pmpaddr8" bitsize="32"/>
-  <reg name="pmpaddr9" bitsize="32"/>
-  <reg name="pmpaddr10" bitsize="32"/>
-  <reg name="pmpaddr11" bitsize="32"/>
-  <reg name="pmpaddr12" bitsize="32"/>
-  <reg name="pmpaddr13" bitsize="32"/>
-  <reg name="pmpaddr14" bitsize="32"/>
-  <reg name="pmpaddr15" bitsize="32"/>
-  <reg name="mcycle" bitsize="32"/>
-  <reg name="minstret" bitsize="32"/>
-  <reg name="mhpmcounter3" bitsize="32"/>
-  <reg name="mhpmcounter4" bitsize="32"/>
-  <reg name="mhpmcounter5" bitsize="32"/>
-  <reg name="mhpmcounter6" bitsize="32"/>
-  <reg name="mhpmcounter7" bitsize="32"/>
-  <reg name="mhpmcounter8" bitsize="32"/>
-  <reg name="mhpmcounter9" bitsize="32"/>
-  <reg name="mhpmcounter10" bitsize="32"/>
-  <reg name="mhpmcounter11" bitsize="32"/>
-  <reg name="mhpmcounter12" bitsize="32"/>
-  <reg name="mhpmcounter13" bitsize="32"/>
-  <reg name="mhpmcounter14" bitsize="32"/>
-  <reg name="mhpmcounter15" bitsize="32"/>
-  <reg name="mhpmcounter16" bitsize="32"/>
-  <reg name="mhpmcounter17" bitsize="32"/>
-  <reg name="mhpmcounter18" bitsize="32"/>
-  <reg name="mhpmcounter19" bitsize="32"/>
-  <reg name="mhpmcounter20" bitsize="32"/>
-  <reg name="mhpmcounter21" bitsize="32"/>
-  <reg name="mhpmcounter22" bitsize="32"/>
-  <reg name="mhpmcounter23" bitsize="32"/>
-  <reg name="mhpmcounter24" bitsize="32"/>
-  <reg name="mhpmcounter25" bitsize="32"/>
-  <reg name="mhpmcounter26" bitsize="32"/>
-  <reg name="mhpmcounter27" bitsize="32"/>
-  <reg name="mhpmcounter28" bitsize="32"/>
-  <reg name="mhpmcounter29" bitsize="32"/>
-  <reg name="mhpmcounter30" bitsize="32"/>
-  <reg name="mhpmcounter31" bitsize="32"/>
-  <reg name="mcycleh" bitsize="32"/>
-  <reg name="minstreth" bitsize="32"/>
-  <reg name="mhpmcounter3h" bitsize="32"/>
-  <reg name="mhpmcounter4h" bitsize="32"/>
-  <reg name="mhpmcounter5h" bitsize="32"/>
-  <reg name="mhpmcounter6h" bitsize="32"/>
-  <reg name="mhpmcounter7h" bitsize="32"/>
-  <reg name="mhpmcounter8h" bitsize="32"/>
-  <reg name="mhpmcounter9h" bitsize="32"/>
-  <reg name="mhpmcounter10h" bitsize="32"/>
-  <reg name="mhpmcounter11h" bitsize="32"/>
-  <reg name="mhpmcounter12h" bitsize="32"/>
-  <reg name="mhpmcounter13h" bitsize="32"/>
-  <reg name="mhpmcounter14h" bitsize="32"/>
-  <reg name="mhpmcounter15h" bitsize="32"/>
-  <reg name="mhpmcounter16h" bitsize="32"/>
-  <reg name="mhpmcounter17h" bitsize="32"/>
-  <reg name="mhpmcounter18h" bitsize="32"/>
-  <reg name="mhpmcounter19h" bitsize="32"/>
-  <reg name="mhpmcounter20h" bitsize="32"/>
-  <reg name="mhpmcounter21h" bitsize="32"/>
-  <reg name="mhpmcounter22h" bitsize="32"/>
-  <reg name="mhpmcounter23h" bitsize="32"/>
-  <reg name="mhpmcounter24h" bitsize="32"/>
-  <reg name="mhpmcounter25h" bitsize="32"/>
-  <reg name="mhpmcounter26h" bitsize="32"/>
-  <reg name="mhpmcounter27h" bitsize="32"/>
-  <reg name="mhpmcounter28h" bitsize="32"/>
-  <reg name="mhpmcounter29h" bitsize="32"/>
-  <reg name="mhpmcounter30h" bitsize="32"/>
-  <reg name="mhpmcounter31h" bitsize="32"/>
-  <reg name="mhpmevent3" bitsize="32"/>
-  <reg name="mhpmevent4" bitsize="32"/>
-  <reg name="mhpmevent5" bitsize="32"/>
-  <reg name="mhpmevent6" bitsize="32"/>
-  <reg name="mhpmevent7" bitsize="32"/>
-  <reg name="mhpmevent8" bitsize="32"/>
-  <reg name="mhpmevent9" bitsize="32"/>
-  <reg name="mhpmevent10" bitsize="32"/>
-  <reg name="mhpmevent11" bitsize="32"/>
-  <reg name="mhpmevent12" bitsize="32"/>
-  <reg name="mhpmevent13" bitsize="32"/>
-  <reg name="mhpmevent14" bitsize="32"/>
-  <reg name="mhpmevent15" bitsize="32"/>
-  <reg name="mhpmevent16" bitsize="32"/>
-  <reg name="mhpmevent17" bitsize="32"/>
-  <reg name="mhpmevent18" bitsize="32"/>
-  <reg name="mhpmevent19" bitsize="32"/>
-  <reg name="mhpmevent20" bitsize="32"/>
-  <reg name="mhpmevent21" bitsize="32"/>
-  <reg name="mhpmevent22" bitsize="32"/>
-  <reg name="mhpmevent23" bitsize="32"/>
-  <reg name="mhpmevent24" bitsize="32"/>
-  <reg name="mhpmevent25" bitsize="32"/>
-  <reg name="mhpmevent26" bitsize="32"/>
-  <reg name="mhpmevent27" bitsize="32"/>
-  <reg name="mhpmevent28" bitsize="32"/>
-  <reg name="mhpmevent29" bitsize="32"/>
-  <reg name="mhpmevent30" bitsize="32"/>
-  <reg name="mhpmevent31" bitsize="32"/>
-  <reg name="tselect" bitsize="32"/>
-  <reg name="tdata1" bitsize="32"/>
-  <reg name="tdata2" bitsize="32"/>
-  <reg name="tdata3" bitsize="32"/>
-  <reg name="dcsr" bitsize="32"/>
-  <reg name="dpc" bitsize="32"/>
-  <reg name="dscratch" bitsize="32"/>
-  <reg name="hstatus" bitsize="32"/>
-  <reg name="hedeleg" bitsize="32"/>
-  <reg name="hideleg" bitsize="32"/>
-  <reg name="hie" bitsize="32"/>
-  <reg name="htvec" bitsize="32"/>
-  <reg name="hscratch" bitsize="32"/>
-  <reg name="hepc" bitsize="32"/>
-  <reg name="hcause" bitsize="32"/>
-  <reg name="hbadaddr" bitsize="32"/>
-  <reg name="hip" bitsize="32"/>
-  <reg name="mbase" bitsize="32"/>
-  <reg name="mbound" bitsize="32"/>
-  <reg name="mibase" bitsize="32"/>
-  <reg name="mibound" bitsize="32"/>
-  <reg name="mdbase" bitsize="32"/>
-  <reg name="mdbound" bitsize="32"/>
-  <reg name="mucounteren" bitsize="32"/>
-  <reg name="mscounteren" bitsize="32"/>
-  <reg name="mhcounteren" bitsize="32"/>
-</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-fpu.xml ./gdb/features/riscv/32bit-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/32bit-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/32bit-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-cpu.xml ./gdb/features/riscv/64bit-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/64bit-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-csr.c ./gdb/features/riscv/64bit-csr.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-csr.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/64bit-csr.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,253 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: 64bit-csr.xml */
-
-#include "gdbsupport/tdesc.h"
-
-static int
-create_feature_riscv_64bit_csr (struct target_desc *result, long regnum)
-{
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.riscv.csr");
-  tdesc_create_reg (feature, "ustatus", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "uie", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "utvec", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "uscratch", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "uepc", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "ucause", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "utval", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "uip", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "fflags", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "frm", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "fcsr", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "cycle", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "time", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "instret", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter3", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter4", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter5", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter6", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter7", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter8", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter9", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter10", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter11", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter12", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter13", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter14", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter15", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter16", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter17", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter18", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter19", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter20", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter21", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter22", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter23", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter24", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter25", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter26", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter27", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter28", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter29", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter30", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter31", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "cycleh", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "timeh", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "instreth", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter3h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter4h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter5h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter6h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter7h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter8h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter9h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter10h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter11h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter12h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter13h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter14h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter15h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter16h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter17h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter18h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter19h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter20h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter21h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter22h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter23h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter24h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter25h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter26h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter27h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter28h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter29h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter30h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hpmcounter31h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sstatus", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sedeleg", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sideleg", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sie", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "stvec", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "scounteren", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sscratch", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sepc", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "scause", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "stval", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "sip", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "satp", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mvendorid", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "marchid", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mimpid", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhartid", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mstatus", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "misa", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "medeleg", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mideleg", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mie", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mtvec", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mcounteren", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mscratch", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mepc", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mcause", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mtval", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mip", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpcfg0", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpcfg1", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpcfg2", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpcfg3", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr0", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr1", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr2", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr3", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr4", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr5", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr6", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr7", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr8", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr9", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr10", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr11", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr12", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr13", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr14", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "pmpaddr15", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mcycle", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "minstret", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter3", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter4", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter5", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter6", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter7", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter8", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter9", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter10", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter11", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter12", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter13", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter14", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter15", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter16", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter17", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter18", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter19", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter20", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter21", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter22", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter23", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter24", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter25", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter26", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter27", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter28", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter29", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter30", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter31", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mcycleh", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "minstreth", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter3h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter4h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter5h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter6h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter7h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter8h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter9h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter10h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter11h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter12h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter13h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter14h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter15h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter16h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter17h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter18h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter19h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter20h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter21h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter22h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter23h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter24h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter25h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter26h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter27h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter28h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter29h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter30h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmcounter31h", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent3", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent4", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent5", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent6", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent7", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent8", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent9", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent10", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent11", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent12", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent13", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent14", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent15", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent16", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent17", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent18", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent19", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent20", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent21", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent22", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent23", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent24", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent25", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent26", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent27", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent28", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent29", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent30", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhpmevent31", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "tselect", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "tdata1", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "tdata2", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "tdata3", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "dcsr", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "dpc", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "dscratch", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hstatus", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hedeleg", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hideleg", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hie", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "htvec", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hscratch", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hepc", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hcause", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hbadaddr", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "hip", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mbase", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mbound", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mibase", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mibound", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mdbase", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mdbound", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mucounteren", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mscounteren", regnum++, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "mhcounteren", regnum++, 1, NULL, 64, "int");
-  return regnum;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-csr.xml ./gdb/features/riscv/64bit-csr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-csr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/64bit-csr.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,250 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2018-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.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-target.dtd">
-<feature name="org.gnu.gdb.riscv.csr">
-  <reg name="ustatus" bitsize="64"/>
-  <reg name="uie" bitsize="64"/>
-  <reg name="utvec" bitsize="64"/>
-  <reg name="uscratch" bitsize="64"/>
-  <reg name="uepc" bitsize="64"/>
-  <reg name="ucause" bitsize="64"/>
-  <reg name="utval" bitsize="64"/>
-  <reg name="uip" bitsize="64"/>
-  <reg name="fflags" bitsize="64"/>
-  <reg name="frm" bitsize="64"/>
-  <reg name="fcsr" bitsize="64"/>
-  <reg name="cycle" bitsize="64"/>
-  <reg name="time" bitsize="64"/>
-  <reg name="instret" bitsize="64"/>
-  <reg name="hpmcounter3" bitsize="64"/>
-  <reg name="hpmcounter4" bitsize="64"/>
-  <reg name="hpmcounter5" bitsize="64"/>
-  <reg name="hpmcounter6" bitsize="64"/>
-  <reg name="hpmcounter7" bitsize="64"/>
-  <reg name="hpmcounter8" bitsize="64"/>
-  <reg name="hpmcounter9" bitsize="64"/>
-  <reg name="hpmcounter10" bitsize="64"/>
-  <reg name="hpmcounter11" bitsize="64"/>
-  <reg name="hpmcounter12" bitsize="64"/>
-  <reg name="hpmcounter13" bitsize="64"/>
-  <reg name="hpmcounter14" bitsize="64"/>
-  <reg name="hpmcounter15" bitsize="64"/>
-  <reg name="hpmcounter16" bitsize="64"/>
-  <reg name="hpmcounter17" bitsize="64"/>
-  <reg name="hpmcounter18" bitsize="64"/>
-  <reg name="hpmcounter19" bitsize="64"/>
-  <reg name="hpmcounter20" bitsize="64"/>
-  <reg name="hpmcounter21" bitsize="64"/>
-  <reg name="hpmcounter22" bitsize="64"/>
-  <reg name="hpmcounter23" bitsize="64"/>
-  <reg name="hpmcounter24" bitsize="64"/>
-  <reg name="hpmcounter25" bitsize="64"/>
-  <reg name="hpmcounter26" bitsize="64"/>
-  <reg name="hpmcounter27" bitsize="64"/>
-  <reg name="hpmcounter28" bitsize="64"/>
-  <reg name="hpmcounter29" bitsize="64"/>
-  <reg name="hpmcounter30" bitsize="64"/>
-  <reg name="hpmcounter31" bitsize="64"/>
-  <reg name="cycleh" bitsize="64"/>
-  <reg name="timeh" bitsize="64"/>
-  <reg name="instreth" bitsize="64"/>
-  <reg name="hpmcounter3h" bitsize="64"/>
-  <reg name="hpmcounter4h" bitsize="64"/>
-  <reg name="hpmcounter5h" bitsize="64"/>
-  <reg name="hpmcounter6h" bitsize="64"/>
-  <reg name="hpmcounter7h" bitsize="64"/>
-  <reg name="hpmcounter8h" bitsize="64"/>
-  <reg name="hpmcounter9h" bitsize="64"/>
-  <reg name="hpmcounter10h" bitsize="64"/>
-  <reg name="hpmcounter11h" bitsize="64"/>
-  <reg name="hpmcounter12h" bitsize="64"/>
-  <reg name="hpmcounter13h" bitsize="64"/>
-  <reg name="hpmcounter14h" bitsize="64"/>
-  <reg name="hpmcounter15h" bitsize="64"/>
-  <reg name="hpmcounter16h" bitsize="64"/>
-  <reg name="hpmcounter17h" bitsize="64"/>
-  <reg name="hpmcounter18h" bitsize="64"/>
-  <reg name="hpmcounter19h" bitsize="64"/>
-  <reg name="hpmcounter20h" bitsize="64"/>
-  <reg name="hpmcounter21h" bitsize="64"/>
-  <reg name="hpmcounter22h" bitsize="64"/>
-  <reg name="hpmcounter23h" bitsize="64"/>
-  <reg name="hpmcounter24h" bitsize="64"/>
-  <reg name="hpmcounter25h" bitsize="64"/>
-  <reg name="hpmcounter26h" bitsize="64"/>
-  <reg name="hpmcounter27h" bitsize="64"/>
-  <reg name="hpmcounter28h" bitsize="64"/>
-  <reg name="hpmcounter29h" bitsize="64"/>
-  <reg name="hpmcounter30h" bitsize="64"/>
-  <reg name="hpmcounter31h" bitsize="64"/>
-  <reg name="sstatus" bitsize="64"/>
-  <reg name="sedeleg" bitsize="64"/>
-  <reg name="sideleg" bitsize="64"/>
-  <reg name="sie" bitsize="64"/>
-  <reg name="stvec" bitsize="64"/>
-  <reg name="scounteren" bitsize="64"/>
-  <reg name="sscratch" bitsize="64"/>
-  <reg name="sepc" bitsize="64"/>
-  <reg name="scause" bitsize="64"/>
-  <reg name="stval" bitsize="64"/>
-  <reg name="sip" bitsize="64"/>
-  <reg name="satp" bitsize="64"/>
-  <reg name="mvendorid" bitsize="64"/>
-  <reg name="marchid" bitsize="64"/>
-  <reg name="mimpid" bitsize="64"/>
-  <reg name="mhartid" bitsize="64"/>
-  <reg name="mstatus" bitsize="64"/>
-  <reg name="misa" bitsize="64"/>
-  <reg name="medeleg" bitsize="64"/>
-  <reg name="mideleg" bitsize="64"/>
-  <reg name="mie" bitsize="64"/>
-  <reg name="mtvec" bitsize="64"/>
-  <reg name="mcounteren" bitsize="64"/>
-  <reg name="mscratch" bitsize="64"/>
-  <reg name="mepc" bitsize="64"/>
-  <reg name="mcause" bitsize="64"/>
-  <reg name="mtval" bitsize="64"/>
-  <reg name="mip" bitsize="64"/>
-  <reg name="pmpcfg0" bitsize="64"/>
-  <reg name="pmpcfg1" bitsize="64"/>
-  <reg name="pmpcfg2" bitsize="64"/>
-  <reg name="pmpcfg3" bitsize="64"/>
-  <reg name="pmpaddr0" bitsize="64"/>
-  <reg name="pmpaddr1" bitsize="64"/>
-  <reg name="pmpaddr2" bitsize="64"/>
-  <reg name="pmpaddr3" bitsize="64"/>
-  <reg name="pmpaddr4" bitsize="64"/>
-  <reg name="pmpaddr5" bitsize="64"/>
-  <reg name="pmpaddr6" bitsize="64"/>
-  <reg name="pmpaddr7" bitsize="64"/>
-  <reg name="pmpaddr8" bitsize="64"/>
-  <reg name="pmpaddr9" bitsize="64"/>
-  <reg name="pmpaddr10" bitsize="64"/>
-  <reg name="pmpaddr11" bitsize="64"/>
-  <reg name="pmpaddr12" bitsize="64"/>
-  <reg name="pmpaddr13" bitsize="64"/>
-  <reg name="pmpaddr14" bitsize="64"/>
-  <reg name="pmpaddr15" bitsize="64"/>
-  <reg name="mcycle" bitsize="64"/>
-  <reg name="minstret" bitsize="64"/>
-  <reg name="mhpmcounter3" bitsize="64"/>
-  <reg name="mhpmcounter4" bitsize="64"/>
-  <reg name="mhpmcounter5" bitsize="64"/>
-  <reg name="mhpmcounter6" bitsize="64"/>
-  <reg name="mhpmcounter7" bitsize="64"/>
-  <reg name="mhpmcounter8" bitsize="64"/>
-  <reg name="mhpmcounter9" bitsize="64"/>
-  <reg name="mhpmcounter10" bitsize="64"/>
-  <reg name="mhpmcounter11" bitsize="64"/>
-  <reg name="mhpmcounter12" bitsize="64"/>
-  <reg name="mhpmcounter13" bitsize="64"/>
-  <reg name="mhpmcounter14" bitsize="64"/>
-  <reg name="mhpmcounter15" bitsize="64"/>
-  <reg name="mhpmcounter16" bitsize="64"/>
-  <reg name="mhpmcounter17" bitsize="64"/>
-  <reg name="mhpmcounter18" bitsize="64"/>
-  <reg name="mhpmcounter19" bitsize="64"/>
-  <reg name="mhpmcounter20" bitsize="64"/>
-  <reg name="mhpmcounter21" bitsize="64"/>
-  <reg name="mhpmcounter22" bitsize="64"/>
-  <reg name="mhpmcounter23" bitsize="64"/>
-  <reg name="mhpmcounter24" bitsize="64"/>
-  <reg name="mhpmcounter25" bitsize="64"/>
-  <reg name="mhpmcounter26" bitsize="64"/>
-  <reg name="mhpmcounter27" bitsize="64"/>
-  <reg name="mhpmcounter28" bitsize="64"/>
-  <reg name="mhpmcounter29" bitsize="64"/>
-  <reg name="mhpmcounter30" bitsize="64"/>
-  <reg name="mhpmcounter31" bitsize="64"/>
-  <reg name="mcycleh" bitsize="64"/>
-  <reg name="minstreth" bitsize="64"/>
-  <reg name="mhpmcounter3h" bitsize="64"/>
-  <reg name="mhpmcounter4h" bitsize="64"/>
-  <reg name="mhpmcounter5h" bitsize="64"/>
-  <reg name="mhpmcounter6h" bitsize="64"/>
-  <reg name="mhpmcounter7h" bitsize="64"/>
-  <reg name="mhpmcounter8h" bitsize="64"/>
-  <reg name="mhpmcounter9h" bitsize="64"/>
-  <reg name="mhpmcounter10h" bitsize="64"/>
-  <reg name="mhpmcounter11h" bitsize="64"/>
-  <reg name="mhpmcounter12h" bitsize="64"/>
-  <reg name="mhpmcounter13h" bitsize="64"/>
-  <reg name="mhpmcounter14h" bitsize="64"/>
-  <reg name="mhpmcounter15h" bitsize="64"/>
-  <reg name="mhpmcounter16h" bitsize="64"/>
-  <reg name="mhpmcounter17h" bitsize="64"/>
-  <reg name="mhpmcounter18h" bitsize="64"/>
-  <reg name="mhpmcounter19h" bitsize="64"/>
-  <reg name="mhpmcounter20h" bitsize="64"/>
-  <reg name="mhpmcounter21h" bitsize="64"/>
-  <reg name="mhpmcounter22h" bitsize="64"/>
-  <reg name="mhpmcounter23h" bitsize="64"/>
-  <reg name="mhpmcounter24h" bitsize="64"/>
-  <reg name="mhpmcounter25h" bitsize="64"/>
-  <reg name="mhpmcounter26h" bitsize="64"/>
-  <reg name="mhpmcounter27h" bitsize="64"/>
-  <reg name="mhpmcounter28h" bitsize="64"/>
-  <reg name="mhpmcounter29h" bitsize="64"/>
-  <reg name="mhpmcounter30h" bitsize="64"/>
-  <reg name="mhpmcounter31h" bitsize="64"/>
-  <reg name="mhpmevent3" bitsize="64"/>
-  <reg name="mhpmevent4" bitsize="64"/>
-  <reg name="mhpmevent5" bitsize="64"/>
-  <reg name="mhpmevent6" bitsize="64"/>
-  <reg name="mhpmevent7" bitsize="64"/>
-  <reg name="mhpmevent8" bitsize="64"/>
-  <reg name="mhpmevent9" bitsize="64"/>
-  <reg name="mhpmevent10" bitsize="64"/>
-  <reg name="mhpmevent11" bitsize="64"/>
-  <reg name="mhpmevent12" bitsize="64"/>
-  <reg name="mhpmevent13" bitsize="64"/>
-  <reg name="mhpmevent14" bitsize="64"/>
-  <reg name="mhpmevent15" bitsize="64"/>
-  <reg name="mhpmevent16" bitsize="64"/>
-  <reg name="mhpmevent17" bitsize="64"/>
-  <reg name="mhpmevent18" bitsize="64"/>
-  <reg name="mhpmevent19" bitsize="64"/>
-  <reg name="mhpmevent20" bitsize="64"/>
-  <reg name="mhpmevent21" bitsize="64"/>
-  <reg name="mhpmevent22" bitsize="64"/>
-  <reg name="mhpmevent23" bitsize="64"/>
-  <reg name="mhpmevent24" bitsize="64"/>
-  <reg name="mhpmevent25" bitsize="64"/>
-  <reg name="mhpmevent26" bitsize="64"/>
-  <reg name="mhpmevent27" bitsize="64"/>
-  <reg name="mhpmevent28" bitsize="64"/>
-  <reg name="mhpmevent29" bitsize="64"/>
-  <reg name="mhpmevent30" bitsize="64"/>
-  <reg name="mhpmevent31" bitsize="64"/>
-  <reg name="tselect" bitsize="64"/>
-  <reg name="tdata1" bitsize="64"/>
-  <reg name="tdata2" bitsize="64"/>
-  <reg name="tdata3" bitsize="64"/>
-  <reg name="dcsr" bitsize="64"/>
-  <reg name="dpc" bitsize="64"/>
-  <reg name="dscratch" bitsize="64"/>
-  <reg name="hstatus" bitsize="64"/>
-  <reg name="hedeleg" bitsize="64"/>
-  <reg name="hideleg" bitsize="64"/>
-  <reg name="hie" bitsize="64"/>
-  <reg name="htvec" bitsize="64"/>
-  <reg name="hscratch" bitsize="64"/>
-  <reg name="hepc" bitsize="64"/>
-  <reg name="hcause" bitsize="64"/>
-  <reg name="hbadaddr" bitsize="64"/>
-  <reg name="hip" bitsize="64"/>
-  <reg name="mbase" bitsize="64"/>
-  <reg name="mbound" bitsize="64"/>
-  <reg name="mibase" bitsize="64"/>
-  <reg name="mibound" bitsize="64"/>
-  <reg name="mdbase" bitsize="64"/>
-  <reg name="mdbound" bitsize="64"/>
-  <reg name="mucounteren" bitsize="64"/>
-  <reg name="mscounteren" bitsize="64"/>
-  <reg name="mhcounteren" bitsize="64"/>
-</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-fpu.xml ./gdb/features/riscv/64bit-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/64bit-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/64bit-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/rebuild-csr-xml.sh ./gdb/features/riscv/rebuild-csr-xml.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/rebuild-csr-xml.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/riscv/rebuild-csr-xml.sh	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-#! /bin/bash
-
-RISCV_OPC_FILE=$1
-RISCV_FEATURE_DIR=$2
-
-function gen_csr_xml ()
-{
-    bitsize=$1
-
-    cat <<EOF
-<?xml version="1.0"?>
-<!-- Copyright (C) 2018-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.  -->
-
-<!DOCTYPE feature SYSTEM "gdb-target.dtd">
-<feature name="org.gnu.gdb.riscv.csr">
-EOF
-
-    grep "^DECLARE_CSR(" ${RISCV_OPC_FILE} \
-        | sed -e "s!DECLARE_CSR(\(.*\), .*!  <reg name=\"\1\" bitsize=\"$bitsize\"/>!"
-
-    echo "</feature>"
-}
-
-gen_csr_xml 32 > ${RISCV_FEATURE_DIR}/32bit-csr.xml
-gen_csr_xml 64 > ${RISCV_FEATURE_DIR}/64bit-csr.xml
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/rv32e-xregs.c ./gdb/features/riscv/rv32e-xregs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/rv32e-xregs.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/riscv/rv32e-xregs.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,30 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: rv32e-xregs.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_riscv_rv32e_xregs (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.riscv.cpu");
+  tdesc_create_reg (feature, "zero", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "ra", regnum++, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "tp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "t0", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "t1", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "t2", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "s1", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "a0", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "a1", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "a2", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "a3", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "a4", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "a5", regnum++, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr");
+  return regnum;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/rv32e-xregs.xml ./gdb/features/riscv/rv32e-xregs.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/riscv/rv32e-xregs.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/riscv/rv32e-xregs.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2018-2021 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.  -->
+
+<!-- Register numbers are hard-coded in order to maintain backward
+     compatibility with older versions of tools that didn't use xml
+     register descriptions.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.riscv.cpu">
+  <reg name="zero" bitsize="32" type="int" regnum="0"/>
+  <reg name="ra" bitsize="32" type="code_ptr"/>
+  <reg name="sp" bitsize="32" type="data_ptr"/>
+  <reg name="gp" bitsize="32" type="data_ptr"/>
+  <reg name="tp" bitsize="32" type="data_ptr"/>
+  <reg name="t0" bitsize="32" type="int"/>
+  <reg name="t1" bitsize="32" type="int"/>
+  <reg name="t2" bitsize="32" type="int"/>
+  <reg name="fp" bitsize="32" type="data_ptr"/>
+  <reg name="s1" bitsize="32" type="int"/>
+  <reg name="a0" bitsize="32" type="int"/>
+  <reg name="a1" bitsize="32" type="int"/>
+  <reg name="a2" bitsize="32" type="int"/>
+  <reg name="a3" bitsize="32" type="int"/>
+  <reg name="a4" bitsize="32" type="int"/>
+  <reg name="a5" bitsize="32" type="int"/>
+  <reg name="pc" bitsize="32" type="code_ptr"/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power64-core.xml ./gdb/features/rs6000/power64-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power64-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power64-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power64-htm-core.xml ./gdb/features/rs6000/power64-htm-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power64-htm-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power64-htm-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power64-linux.xml ./gdb/features/rs6000/power64-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power64-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power64-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-altivec.xml ./gdb/features/rs6000/power-altivec.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-altivec.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-altivec.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-core.xml ./gdb/features/rs6000/power-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-dscr.xml ./gdb/features/rs6000/power-dscr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-dscr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-dscr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-ebb.xml ./gdb/features/rs6000/power-ebb.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-ebb.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-ebb.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-fpu-isa205.xml ./gdb/features/rs6000/power-fpu-isa205.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-fpu-isa205.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-fpu-isa205.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-fpu.xml ./gdb/features/rs6000/power-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-altivec.xml ./gdb/features/rs6000/power-htm-altivec.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-altivec.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-altivec.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-core.xml ./gdb/features/rs6000/power-htm-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-dscr.xml ./gdb/features/rs6000/power-htm-dscr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-dscr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-dscr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-fpu.xml ./gdb/features/rs6000/power-htm-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-ppr.xml ./gdb/features/rs6000/power-htm-ppr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-ppr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-ppr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-spr.xml ./gdb/features/rs6000/power-htm-spr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-spr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-spr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-tar.xml ./gdb/features/rs6000/power-htm-tar.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-tar.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-tar.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-vsx.xml ./gdb/features/rs6000/power-htm-vsx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-htm-vsx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-htm-vsx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-linux-pmu.xml ./gdb/features/rs6000/power-linux-pmu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-linux-pmu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-linux-pmu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-linux.xml ./gdb/features/rs6000/power-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-oea.xml ./gdb/features/rs6000/power-oea.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-oea.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-oea.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32.c ./gdb/features/rs6000/powerpc-32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-32.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_32;
 static void
 initialize_tdesc_powerpc_32 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_32 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,5 +89,5 @@ initialize_tdesc_powerpc_32 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  tdesc_powerpc_32 = result;
+  tdesc_powerpc_32 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32l.c ./gdb/features/rs6000/powerpc-32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_32l;
 static void
 initialize_tdesc_powerpc_32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_32l (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,9 +89,9 @@ initialize_tdesc_powerpc_32l (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  tdesc_powerpc_32l = result;
+  tdesc_powerpc_32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32l.xml ./gdb/features/rs6000/powerpc-32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32.xml ./gdb/features/rs6000/powerpc-32.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-32.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-32.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403.c ./gdb/features/rs6000/powerpc-403.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-403.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_403;
 static void
 initialize_tdesc_powerpc_403 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_403 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_403 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_403 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "403");
+  feature = tdesc_create_feature (result.get (), "403");
   tdesc_create_reg (feature, "icdbdr", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "esr", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "dear", 121, 1, NULL, 32, "int");
@@ -163,5 +163,5 @@ initialize_tdesc_powerpc_403 (void)
   tdesc_create_reg (feature, "pbl2", 141, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "pbu2", 142, 1, NULL, 32, "int");
 
-  tdesc_powerpc_403 = result;
+  tdesc_powerpc_403 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403gc.c ./gdb/features/rs6000/powerpc-403gc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403gc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-403gc.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_403gc;
 static void
 initialize_tdesc_powerpc_403gc (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_403gc (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_403gc (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_403gc (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "403GC");
+  feature = tdesc_create_feature (result.get (), "403GC");
   tdesc_create_reg (feature, "icdbdr", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "esr", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "dear", 121, 1, NULL, 32, "int");
@@ -169,5 +169,5 @@ initialize_tdesc_powerpc_403gc (void)
   tdesc_create_reg (feature, "tbhu", 147, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "tblu", 148, 1, NULL, 32, "int");
 
-  tdesc_powerpc_403gc = result;
+  tdesc_powerpc_403gc = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403gc.xml ./gdb/features/rs6000/powerpc-403gc.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403gc.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-403gc.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403.xml ./gdb/features/rs6000/powerpc-403.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-403.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-403.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-405.c ./gdb/features/rs6000/powerpc-405.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-405.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-405.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_405;
 static void
 initialize_tdesc_powerpc_405 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_405 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_405 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "405");
+  feature = tdesc_create_feature (result.get (), "405");
   tdesc_create_reg (feature, "pvr", 87, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sprg0", 108, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sprg1", 109, 1, NULL, 32, "int");
@@ -132,5 +132,5 @@ initialize_tdesc_powerpc_405 (void)
   tdesc_create_reg (feature, "su0r", 160, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "usprg0", 161, 1, NULL, 32, "int");
 
-  tdesc_powerpc_405 = result;
+  tdesc_powerpc_405 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-405.xml ./gdb/features/rs6000/powerpc-405.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-405.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-405.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-505.c ./gdb/features/rs6000/powerpc-505.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-505.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-505.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_505;
 static void
 initialize_tdesc_powerpc_505 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_505 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_505 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,10 +137,10 @@ initialize_tdesc_powerpc_505 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "505");
+  feature = tdesc_create_feature (result.get (), "505");
   tdesc_create_reg (feature, "eie", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "eid", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "nri", 121, 1, NULL, 32, "int");
 
-  tdesc_powerpc_505 = result;
+  tdesc_powerpc_505 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-505.xml ./gdb/features/rs6000/powerpc-505.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-505.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-505.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-601.c ./gdb/features/rs6000/powerpc-601.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-601.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-601.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_601;
 static void
 initialize_tdesc_powerpc_601 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -53,7 +53,7 @@ initialize_tdesc_powerpc_601 (void)
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "mq", 124, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -88,7 +88,7 @@ initialize_tdesc_powerpc_601 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -138,7 +138,7 @@ initialize_tdesc_powerpc_601 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "601");
+  feature = tdesc_create_feature (result.get (), "601");
   tdesc_create_reg (feature, "hid0", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "hid1", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "iabr", 121, 1, NULL, 32, "int");
@@ -146,5 +146,5 @@ initialize_tdesc_powerpc_601 (void)
   tdesc_create_reg (feature, "rtcu", 125, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "rtcl", 126, 1, NULL, 32, "int");
 
-  tdesc_powerpc_601 = result;
+  tdesc_powerpc_601 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-601.xml ./gdb/features/rs6000/powerpc-601.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-601.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-601.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-602.c ./gdb/features/rs6000/powerpc-602.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-602.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-602.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_602;
 static void
 initialize_tdesc_powerpc_602 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_602 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_602 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_602 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "602");
+  feature = tdesc_create_feature (result.get (), "602");
   tdesc_create_reg (feature, "hid0", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "hid1", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "iabr", 121, 1, NULL, 32, "int");
@@ -149,5 +149,5 @@ initialize_tdesc_powerpc_602 (void)
   tdesc_create_reg (feature, "sp", 129, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "lt", 130, 1, NULL, 32, "int");
 
-  tdesc_powerpc_602 = result;
+  tdesc_powerpc_602 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-602.xml ./gdb/features/rs6000/powerpc-602.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-602.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-602.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-603.c ./gdb/features/rs6000/powerpc-603.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-603.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-603.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_603;
 static void
 initialize_tdesc_powerpc_603 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_603 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_603 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_603 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "603");
+  feature = tdesc_create_feature (result.get (), "603");
   tdesc_create_reg (feature, "hid0", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "hid1", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "iabr", 121, 1, NULL, 32, "int");
@@ -149,5 +149,5 @@ initialize_tdesc_powerpc_603 (void)
   tdesc_create_reg (feature, "icmp", 129, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "rpa", 130, 1, NULL, 32, "int");
 
-  tdesc_powerpc_603 = result;
+  tdesc_powerpc_603 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-603.xml ./gdb/features/rs6000/powerpc-603.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-603.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-603.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-604.c ./gdb/features/rs6000/powerpc-604.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-604.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-604.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_604;
 static void
 initialize_tdesc_powerpc_604 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_604 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_604 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_604 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "604");
+  feature = tdesc_create_feature (result.get (), "604");
   tdesc_create_reg (feature, "hid0", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "hid1", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "iabr", 121, 1, NULL, 32, "int");
@@ -149,5 +149,5 @@ initialize_tdesc_powerpc_604 (void)
   tdesc_create_reg (feature, "sia", 127, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sda", 128, 1, NULL, 32, "int");
 
-  tdesc_powerpc_604 = result;
+  tdesc_powerpc_604 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-604.xml ./gdb/features/rs6000/powerpc-604.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-604.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-604.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64.c ./gdb/features/rs6000/powerpc-64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_64;
 static void
 initialize_tdesc_powerpc_64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_64 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,5 +89,5 @@ initialize_tdesc_powerpc_64 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  tdesc_powerpc_64 = result;
+  tdesc_powerpc_64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64l.c ./gdb/features/rs6000/powerpc-64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_64l;
 static void
 initialize_tdesc_powerpc_64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_64l (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,9 +89,9 @@ initialize_tdesc_powerpc_64l (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  tdesc_powerpc_64l = result;
+  tdesc_powerpc_64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64l.xml ./gdb/features/rs6000/powerpc-64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64.xml ./gdb/features/rs6000/powerpc-64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-7400.c ./gdb/features/rs6000/powerpc-7400.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-7400.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-7400.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_7400;
 static void
 initialize_tdesc_powerpc_7400 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_7400 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_7400 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_7400 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -200,5 +200,5 @@ initialize_tdesc_powerpc_7400 (void)
   tdesc_create_reg (feature, "vscr", 151, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 152, 1, "vector", 32, "int");
 
-  tdesc_powerpc_7400 = result;
+  tdesc_powerpc_7400 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-7400.xml ./gdb/features/rs6000/powerpc-7400.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-7400.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-7400.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-750.c ./gdb/features/rs6000/powerpc-750.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-750.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-750.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_750;
 static void
 initialize_tdesc_powerpc_750 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_750 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_750 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_750 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "750");
+  feature = tdesc_create_feature (result.get (), "750");
   tdesc_create_reg (feature, "hid0", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "hid1", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "iabr", 121, 1, NULL, 32, "int");
@@ -162,5 +162,5 @@ initialize_tdesc_powerpc_750 (void)
   tdesc_create_reg (feature, "thrm2", 141, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "thrm3", 142, 1, NULL, 32, "int");
 
-  tdesc_powerpc_750 = result;
+  tdesc_powerpc_750 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-750.xml ./gdb/features/rs6000/powerpc-750.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-750.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-750.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-860.c ./gdb/features/rs6000/powerpc-860.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-860.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-860.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,10 +9,10 @@ struct target_desc *tdesc_powerpc_860;
 static void
 initialize_tdesc_powerpc_860 (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_powerpc_860 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -87,7 +87,7 @@ initialize_tdesc_powerpc_860 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "OEA");
+  feature = tdesc_create_feature (result.get (), "OEA");
   tdesc_create_reg (feature, "sr0", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr1", 72, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "sr2", 73, 1, NULL, 32, "int");
@@ -137,7 +137,7 @@ initialize_tdesc_powerpc_860 (void)
   tdesc_create_reg (feature, "dabr", 117, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ear", 118, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "860");
+  feature = tdesc_create_feature (result.get (), "860");
   tdesc_create_reg (feature, "eie", 119, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "eid", 120, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "nri", 121, 1, NULL, 32, "int");
@@ -186,5 +186,5 @@ initialize_tdesc_powerpc_860 (void)
   tdesc_create_reg (feature, "md_dbram0", 164, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "md_dbram1", 165, 1, NULL, 32, "int");
 
-  tdesc_powerpc_860 = result;
+  tdesc_powerpc_860 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-860.xml ./gdb/features/rs6000/powerpc-860.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-860.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-860.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32.c ./gdb/features/rs6000/powerpc-altivec32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec32.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_altive
 static void
 initialize_tdesc_powerpc_altivec32 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_altivec32 (void
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,7 +89,7 @@ initialize_tdesc_powerpc_altivec32 (void
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -152,5 +152,5 @@ initialize_tdesc_powerpc_altivec32 (void
   tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
 
-  tdesc_powerpc_altivec32 = result;
+  tdesc_powerpc_altivec32 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32l.c ./gdb/features/rs6000/powerpc-altivec32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_altive
 static void
 initialize_tdesc_powerpc_altivec32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_altivec32l (voi
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_altivec32l (voi
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,5 +156,5 @@ initialize_tdesc_powerpc_altivec32l (voi
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  tdesc_powerpc_altivec32l = result;
+  tdesc_powerpc_altivec32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32l.xml ./gdb/features/rs6000/powerpc-altivec32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32.xml ./gdb/features/rs6000/powerpc-altivec32.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec32.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec32.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64.c ./gdb/features/rs6000/powerpc-altivec64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_altive
 static void
 initialize_tdesc_powerpc_altivec64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_altivec64 (void
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,7 +89,7 @@ initialize_tdesc_powerpc_altivec64 (void
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -152,5 +152,5 @@ initialize_tdesc_powerpc_altivec64 (void
   tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
 
-  tdesc_powerpc_altivec64 = result;
+  tdesc_powerpc_altivec64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64l.c ./gdb/features/rs6000/powerpc-altivec64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_altive
 static void
 initialize_tdesc_powerpc_altivec64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_altivec64l (voi
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_altivec64l (voi
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,5 +156,5 @@ initialize_tdesc_powerpc_altivec64l (voi
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  tdesc_powerpc_altivec64l = result;
+  tdesc_powerpc_altivec64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64l.xml ./gdb/features/rs6000/powerpc-altivec64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64.xml ./gdb/features/rs6000/powerpc-altivec64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-altivec64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-altivec64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500.c ./gdb/features/rs6000/powerpc-e500.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-e500.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_e500;
 static void
 initialize_tdesc_powerpc_e500 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:e500"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_e500 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.spe");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.spe");
   tdesc_create_reg (feature, "ev0h", 32, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ev1h", 33, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ev2h", 34, 1, NULL, 32, "int");
@@ -90,5 +90,5 @@ initialize_tdesc_powerpc_e500 (void)
   tdesc_create_reg (feature, "acc", 73, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "spefscr", 74, 1, NULL, 32, "int");
 
-  tdesc_powerpc_e500 = result;
+  tdesc_powerpc_e500 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500l.c ./gdb/features/rs6000/powerpc-e500l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-e500l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_e500l;
 static void
 initialize_tdesc_powerpc_e500l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:e500"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_e500l (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.spe");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.spe");
   tdesc_create_reg (feature, "ev0h", 32, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ev1h", 33, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "ev2h", 34, 1, NULL, 32, "int");
@@ -90,9 +90,9 @@ initialize_tdesc_powerpc_e500l (void)
   tdesc_create_reg (feature, "acc", 73, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "spefscr", 74, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  tdesc_powerpc_e500l = result;
+  tdesc_powerpc_e500l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500l.xml ./gdb/features/rs6000/powerpc-e500l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-e500l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500.xml ./gdb/features/rs6000/powerpc-e500.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-e500.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-e500.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-32l.c ./gdb/features/rs6000/powerpc-isa205-32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_32l (voi
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,9 +89,9 @@ initialize_tdesc_powerpc_isa205_32l (voi
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  tdesc_powerpc_isa205_32l = result;
+  tdesc_powerpc_isa205_32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-32l.xml ./gdb/features/rs6000/powerpc-isa205-32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-64l.c ./gdb/features/rs6000/powerpc-isa205-64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_64l (voi
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,9 +89,9 @@ initialize_tdesc_powerpc_isa205_64l (voi
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  tdesc_powerpc_isa205_64l = result;
+  tdesc_powerpc_isa205_64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-64l.xml ./gdb/features/rs6000/powerpc-isa205-64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec32l.c ./gdb/features/rs6000/powerpc-isa205-altivec32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-altivec32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_altivec32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_altivec3
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa205_altivec3
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,5 +156,5 @@ initialize_tdesc_powerpc_isa205_altivec3
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  tdesc_powerpc_isa205_altivec32l = result;
+  tdesc_powerpc_isa205_altivec32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec32l.xml ./gdb/features/rs6000/powerpc-isa205-altivec32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-altivec32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec64l.c ./gdb/features/rs6000/powerpc-isa205-altivec64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-altivec64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_altivec64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_altivec6
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa205_altivec6
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,5 +156,5 @@ initialize_tdesc_powerpc_isa205_altivec6
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  tdesc_powerpc_isa205_altivec64l = result;
+  tdesc_powerpc_isa205_altivec64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec64l.xml ./gdb/features/rs6000/powerpc-isa205-altivec64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-altivec64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-altivec64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_ppr_dscr_vsx32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,11 +190,11 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ppr");
   tdesc_create_reg (feature, "ppr", 139, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.dscr");
   tdesc_create_reg (feature, "dscr", 140, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa205_ppr_dscr_vsx32l = result;
+  tdesc_powerpc_isa205_ppr_dscr_vsx32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_ppr_dscr_vsx64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,11 +190,11 @@ initialize_tdesc_powerpc_isa205_ppr_dscr
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ppr");
   tdesc_create_reg (feature, "ppr", 139, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.dscr");
   tdesc_create_reg (feature, "dscr", 140, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa205_ppr_dscr_vsx64l = result;
+  tdesc_powerpc_isa205_ppr_dscr_vsx64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx32l.c ./gdb/features/rs6000/powerpc-isa205-vsx32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-vsx32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_vsx32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_vsx32l (
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa205_vsx32l (
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa205_vsx32l (
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,5 +190,5 @@ initialize_tdesc_powerpc_isa205_vsx32l (
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa205_vsx32l = result;
+  tdesc_powerpc_isa205_vsx32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx32l.xml ./gdb/features/rs6000/powerpc-isa205-vsx32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-vsx32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx64l.c ./gdb/features/rs6000/powerpc-isa205-vsx64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-vsx64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa205
 static void
 initialize_tdesc_powerpc_isa205_vsx64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa205_vsx64l (
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa205_vsx64l (
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa205_vsx64l (
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,5 +190,5 @@ initialize_tdesc_powerpc_isa205_vsx64l (
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa205_vsx64l = result;
+  tdesc_powerpc_isa205_vsx64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx64l.xml ./gdb/features/rs6000/powerpc-isa205-vsx64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa205-vsx64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa205-vsx64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c ./gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa207
 static void
 initialize_tdesc_powerpc_isa207_htm_vsx32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,33 +190,33 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ppr");
   tdesc_create_reg (feature, "ppr", 139, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.dscr");
   tdesc_create_reg (feature, "dscr", 140, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.tar");
   tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ebb");
   tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux.pmu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux.pmu");
   tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.spr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.spr");
   tdesc_create_reg (feature, "tfhar", 150, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "texasr", 151, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "tfiar", 152, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.core");
   tdesc_create_reg (feature, "cr0", 153, 0, NULL, 32, "uint32");
   tdesc_create_reg (feature, "cr1", 154, 0, NULL, 32, "uint32");
   tdesc_create_reg (feature, "cr2", 155, 0, NULL, 32, "uint32");
@@ -254,7 +254,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "clr", 187, 0, NULL, 32, "code_ptr");
   tdesc_create_reg (feature, "cctr", 188, 0, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.fpu");
   tdesc_create_reg (feature, "cf0", 189, 0, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "cf1", 190, 0, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "cf2", 191, 0, NULL, 64, "ieee_double");
@@ -289,7 +289,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "cf31", 220, 0, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "cfpscr", 221, 0, "float", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.altivec");
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
 
@@ -349,7 +349,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "cvscr", 254, 0, "vector", 32, "int");
   tdesc_create_reg (feature, "cvrsave", 255, 0, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.vsx");
   tdesc_create_reg (feature, "cvs0h", 256, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cvs1h", 257, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cvs2h", 258, 0, NULL, 64, "uint64");
@@ -383,14 +383,14 @@ initialize_tdesc_powerpc_isa207_htm_vsx3
   tdesc_create_reg (feature, "cvs30h", 286, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cvs31h", 287, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.ppr");
   tdesc_create_reg (feature, "cppr", 288, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.dscr");
   tdesc_create_reg (feature, "cdscr", 289, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.tar");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.tar");
   tdesc_create_reg (feature, "ctar", 290, 0, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa207_htm_vsx32l = result;
+  tdesc_powerpc_isa207_htm_vsx32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml ./gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c ./gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa207
 static void
 initialize_tdesc_powerpc_isa207_htm_vsx64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,33 +190,33 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ppr");
   tdesc_create_reg (feature, "ppr", 139, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.dscr");
   tdesc_create_reg (feature, "dscr", 140, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.tar");
   tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ebb");
   tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux.pmu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux.pmu");
   tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.spr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.spr");
   tdesc_create_reg (feature, "tfhar", 150, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "texasr", 151, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "tfiar", 152, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.core");
   tdesc_create_reg (feature, "cr0", 153, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cr1", 154, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cr2", 155, 0, NULL, 64, "uint64");
@@ -254,7 +254,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "clr", 187, 0, NULL, 64, "code_ptr");
   tdesc_create_reg (feature, "cctr", 188, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.fpu");
   tdesc_create_reg (feature, "cf0", 189, 0, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "cf1", 190, 0, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "cf2", 191, 0, NULL, 64, "ieee_double");
@@ -289,7 +289,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "cf31", 220, 0, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "cfpscr", 221, 0, "float", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.altivec");
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
 
@@ -349,7 +349,7 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "cvscr", 254, 0, "vector", 32, "int");
   tdesc_create_reg (feature, "cvrsave", 255, 0, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.vsx");
   tdesc_create_reg (feature, "cvs0h", 256, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cvs1h", 257, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cvs2h", 258, 0, NULL, 64, "uint64");
@@ -383,14 +383,14 @@ initialize_tdesc_powerpc_isa207_htm_vsx6
   tdesc_create_reg (feature, "cvs30h", 286, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "cvs31h", 287, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.ppr");
   tdesc_create_reg (feature, "cppr", 288, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.dscr");
   tdesc_create_reg (feature, "cdscr", 289, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.htm.tar");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.htm.tar");
   tdesc_create_reg (feature, "ctar", 290, 0, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa207_htm_vsx64l = result;
+  tdesc_powerpc_isa207_htm_vsx64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml ./gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx32l.c ./gdb/features/rs6000/powerpc-isa207-vsx32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-vsx32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa207
 static void
 initialize_tdesc_powerpc_isa207_vsx32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa207_vsx32l (
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa207_vsx32l (
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa207_vsx32l (
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,26 +190,26 @@ initialize_tdesc_powerpc_isa207_vsx32l (
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ppr");
   tdesc_create_reg (feature, "ppr", 139, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.dscr");
   tdesc_create_reg (feature, "dscr", 140, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.tar");
   tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ebb");
   tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux.pmu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux.pmu");
   tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa207_vsx32l = result;
+  tdesc_powerpc_isa207_vsx32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx32l.xml ./gdb/features/rs6000/powerpc-isa207-vsx32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-vsx32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx64l.c ./gdb/features/rs6000/powerpc-isa207-vsx64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-vsx64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_isa207
 static void
 initialize_tdesc_powerpc_isa207_vsx64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_isa207_vsx64l (
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_isa207_vsx64l (
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_isa207_vsx64l (
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,26 +190,26 @@ initialize_tdesc_powerpc_isa207_vsx64l (
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ppr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ppr");
   tdesc_create_reg (feature, "ppr", 139, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.dscr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.dscr");
   tdesc_create_reg (feature, "dscr", 140, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.tar");
   tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.ebb");
   tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux.pmu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux.pmu");
   tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
   tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
 
-  tdesc_powerpc_isa207_vsx64l = result;
+  tdesc_powerpc_isa207_vsx64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx64l.xml ./gdb/features/rs6000/powerpc-isa207-vsx64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-isa207-vsx64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-isa207-vsx64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32.c ./gdb/features/rs6000/powerpc-vsx32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx32.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_vsx32;
 static void
 initialize_tdesc_powerpc_vsx32 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_vsx32 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,7 +89,7 @@ initialize_tdesc_powerpc_vsx32 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -152,7 +152,7 @@ initialize_tdesc_powerpc_vsx32 (void)
   tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 105, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 106, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 107, 1, NULL, 64, "uint64");
@@ -186,5 +186,5 @@ initialize_tdesc_powerpc_vsx32 (void)
   tdesc_create_reg (feature, "vs30h", 135, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 136, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_vsx32 = result;
+  tdesc_powerpc_vsx32 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32l.c ./gdb/features/rs6000/powerpc-vsx32l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx32l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_vsx32l
 static void
 initialize_tdesc_powerpc_vsx32l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_vsx32l (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_vsx32l (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_vsx32l (void)
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,5 +190,5 @@ initialize_tdesc_powerpc_vsx32l (void)
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_vsx32l = result;
+  tdesc_powerpc_vsx32l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32l.xml ./gdb/features/rs6000/powerpc-vsx32l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx32l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32.xml ./gdb/features/rs6000/powerpc-vsx32.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx32.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx32.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64.c ./gdb/features/rs6000/powerpc-vsx64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_vsx64;
 static void
 initialize_tdesc_powerpc_vsx64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_vsx64 (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,7 +89,7 @@ initialize_tdesc_powerpc_vsx64 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -152,7 +152,7 @@ initialize_tdesc_powerpc_vsx64 (void)
   tdesc_create_reg (feature, "vscr", 103, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 104, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 105, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 106, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 107, 1, NULL, 64, "uint64");
@@ -186,5 +186,5 @@ initialize_tdesc_powerpc_vsx64 (void)
   tdesc_create_reg (feature, "vs30h", 135, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 136, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_vsx64 = result;
+  tdesc_powerpc_vsx64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64l.c ./gdb/features/rs6000/powerpc-vsx64l.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64l.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx64l.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_powerpc_vsx64l
 static void
 initialize_tdesc_powerpc_vsx64l (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("powerpc:common64"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
@@ -54,7 +54,7 @@ initialize_tdesc_powerpc_vsx64l (void)
   tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -89,11 +89,11 @@ initialize_tdesc_powerpc_vsx64l (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.linux");
   tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
   tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.altivec");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -156,7 +156,7 @@ initialize_tdesc_powerpc_vsx64l (void)
   tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.vsx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.vsx");
   tdesc_create_reg (feature, "vs0h", 107, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs1h", 108, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs2h", 109, 1, NULL, 64, "uint64");
@@ -190,5 +190,5 @@ initialize_tdesc_powerpc_vsx64l (void)
   tdesc_create_reg (feature, "vs30h", 137, 1, NULL, 64, "uint64");
   tdesc_create_reg (feature, "vs31h", 138, 1, NULL, 64, "uint64");
 
-  tdesc_powerpc_vsx64l = result;
+  tdesc_powerpc_vsx64l = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64l.xml ./gdb/features/rs6000/powerpc-vsx64l.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64l.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx64l.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64.xml ./gdb/features/rs6000/powerpc-vsx64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/powerpc-vsx64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/powerpc-vsx64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-ppr.xml ./gdb/features/rs6000/power-ppr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-ppr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-ppr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-spe.xml ./gdb/features/rs6000/power-spe.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-spe.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-spe.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-tar.xml ./gdb/features/rs6000/power-tar.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-tar.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-tar.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2018-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-vsx.xml ./gdb/features/rs6000/power-vsx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/power-vsx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/power-vsx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/rs6000.c ./gdb/features/rs6000/rs6000.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/rs6000.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/rs6000.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_rs6000;
 static void
 initialize_tdesc_rs6000 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("rs6000:6000"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("rs6000:6000"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
@@ -55,7 +55,7 @@ initialize_tdesc_rs6000 (void)
   tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "mq", 70, 1, NULL, 32, "int");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.power.fpu");
   tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
@@ -90,5 +90,5 @@ initialize_tdesc_rs6000 (void)
   tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 71, 1, "float", 32, "int");
 
-  tdesc_rs6000 = result;
+  tdesc_rs6000 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/rs6000.xml ./gdb/features/rs6000/rs6000.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rs6000/rs6000.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rs6000/rs6000.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rx.c ./gdb/features/rx.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rx.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rx.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: rx.xml.tmp */
+  Original: rx.xml */
 
 #include "defs.h"
 #include "osabi.h"
@@ -9,10 +9,10 @@ struct target_desc *tdesc_rx;
 static void
 initialize_tdesc_rx (void)
 {
-  struct target_desc *result = allocate_target_description ();
+  target_desc_up result = allocate_target_description ();
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.rx.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.rx.core");
   tdesc_type_with_fields *type_with_fields;
   type_with_fields = tdesc_create_flags (feature, "psw_flags", 4);
   tdesc_add_flag (type_with_fields, 0, "C");
@@ -76,5 +76,5 @@ initialize_tdesc_rx (void)
   tdesc_create_reg (feature, "fpsw", 24, 1, NULL, 32, "fpsw_flags");
   tdesc_create_reg (feature, "acc", 25, 1, NULL, 64, "uint64");
 
-  tdesc_rx = result;
+  tdesc_rx = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rx.xml ./gdb/features/rx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/rx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/rx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,74 +1,76 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2019-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2019-2021 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.  -->
 
-<!DOCTYPE feature SYSTEM "gdb-target.dtd">
-<feature name="org.gnu.gdb.rx.core">
-  <reg name="r0" bitsize="32" type="data_ptr"/>
-  <reg name="r1" bitsize="32" type="uint32"/>
-  <reg name="r2" bitsize="32" type="uint32"/>
-  <reg name="r3" bitsize="32" type="uint32"/>
-  <reg name="r4" bitsize="32" type="uint32"/>
-  <reg name="r5" bitsize="32" type="uint32"/>
-  <reg name="r6" bitsize="32" type="uint32"/>
-  <reg name="r7" bitsize="32" type="uint32"/>
-  <reg name="r8" bitsize="32" type="uint32"/>
-  <reg name="r9" bitsize="32" type="uint32"/>
-  <reg name="r10" bitsize="32" type="uint32"/>
-  <reg name="r11" bitsize="32" type="uint32"/>
-  <reg name="r12" bitsize="32" type="uint32"/>
-  <reg name="r13" bitsize="32" type="uint32"/>
-  <reg name="r14" bitsize="32" type="uint32"/>
-  <reg name="r15" bitsize="32" type="uint32"/>
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <feature name="org.gnu.gdb.rx.core">
+    <reg name="r0" bitsize="32" type="data_ptr"/>
+    <reg name="r1" bitsize="32" type="uint32"/>
+    <reg name="r2" bitsize="32" type="uint32"/>
+    <reg name="r3" bitsize="32" type="uint32"/>
+    <reg name="r4" bitsize="32" type="uint32"/>
+    <reg name="r5" bitsize="32" type="uint32"/>
+    <reg name="r6" bitsize="32" type="uint32"/>
+    <reg name="r7" bitsize="32" type="uint32"/>
+    <reg name="r8" bitsize="32" type="uint32"/>
+    <reg name="r9" bitsize="32" type="uint32"/>
+    <reg name="r10" bitsize="32" type="uint32"/>
+    <reg name="r11" bitsize="32" type="uint32"/>
+    <reg name="r12" bitsize="32" type="uint32"/>
+    <reg name="r13" bitsize="32" type="uint32"/>
+    <reg name="r14" bitsize="32" type="uint32"/>
+    <reg name="r15" bitsize="32" type="uint32"/>
 
-  <flags id="psw_flags" size="4">
-    <field name="C" start="0" end="0"/>
-    <field name="Z" start="1" end="1"/>
-    <field name="S" start="2" end="2"/>
-    <field name="O" start="3" end="3"/>
-    <field name="I" start="16" end="16"/>
-    <field name="U" start="17" end="17"/>
-    <field name="PM" start="20" end="20"/>
-    <field name="IPL0" start="24" end="24"/>
-    <field name="IPL1" start="25" end="25"/>
-    <field name="IPL2" start="26" end="26"/>
-    <field name="IPL3" start="27" end="27"/>
-  </flags>
+    <flags id="psw_flags" size="4">
+      <field name="C" start="0" end="0"/>
+      <field name="Z" start="1" end="1"/>
+      <field name="S" start="2" end="2"/>
+      <field name="O" start="3" end="3"/>
+      <field name="I" start="16" end="16"/>
+      <field name="U" start="17" end="17"/>
+      <field name="PM" start="20" end="20"/>
+      <field name="IPL0" start="24" end="24"/>
+      <field name="IPL1" start="25" end="25"/>
+      <field name="IPL2" start="26" end="26"/>
+      <field name="IPL3" start="27" end="27"/>
+    </flags>
 
-  <flags id="fpsw_flags" size="4">
-    <field name="RM0" start="0" end="0"/>
-    <field name="RM1" start="1" end="1"/>
-    <field name="CV" start="2" end="2"/>
-    <field name="CO" start="3" end="3"/>
-    <field name="CZ" start="4" end="4"/>
-    <field name="CU" start="5" end="5"/>
-    <field name="CX" start="6" end="6"/>
-    <field name="CE" start="7" end="7"/>
-    <field name="DN" start="8" end="8"/>
-    <field name="EV" start="10" end="10"/>
-    <field name="EO" start="11" end="11"/>
-    <field name="EZ" start="12" end="12"/>
-    <field name="EU" start="13" end="13"/>
-    <field name="EX" start="14" end="14"/>
-    <field name="FV" start="26" end="26"/>
-    <field name="FO" start="27" end="27"/>
-    <field name="FZ" start="28" end="28"/>
-    <field name="FU" start="29" end="29"/>
-    <field name="FX" start="30" end="30"/>
-    <field name="FS" start="31" end="31"/>
-  </flags>
+    <flags id="fpsw_flags" size="4">
+      <field name="RM0" start="0" end="0"/>
+      <field name="RM1" start="1" end="1"/>
+      <field name="CV" start="2" end="2"/>
+      <field name="CO" start="3" end="3"/>
+      <field name="CZ" start="4" end="4"/>
+      <field name="CU" start="5" end="5"/>
+      <field name="CX" start="6" end="6"/>
+      <field name="CE" start="7" end="7"/>
+      <field name="DN" start="8" end="8"/>
+      <field name="EV" start="10" end="10"/>
+      <field name="EO" start="11" end="11"/>
+      <field name="EZ" start="12" end="12"/>
+      <field name="EU" start="13" end="13"/>
+      <field name="EX" start="14" end="14"/>
+      <field name="FV" start="26" end="26"/>
+      <field name="FO" start="27" end="27"/>
+      <field name="FZ" start="28" end="28"/>
+      <field name="FU" start="29" end="29"/>
+      <field name="FX" start="30" end="30"/>
+      <field name="FS" start="31" end="31"/>
+    </flags>
 
-  <reg name="usp" bitsize="32" type="data_ptr"/>
-  <reg name="isp" bitsize="32" type="data_ptr"/>
-  <reg name="psw" bitsize="32" type="psw_flags"/>
-  <reg name="pc" bitsize="32" type="code_ptr"/>
-  <reg name="intb" bitsize="32" type="data_ptr"/>
-  <reg name="bpsw" bitsize="32" type="psw_flags"/>
-  <reg name="bpc" bitsize="32" type="code_ptr"/>
-  <reg name="fintv" bitsize="32" type="code_ptr"/>
-  <reg name="fpsw" bitsize="32" type="fpsw_flags"/>
-  <reg name="acc" bitsize="64" type="uint64"/>
-</feature>
+    <reg name="usp" bitsize="32" type="data_ptr"/>
+    <reg name="isp" bitsize="32" type="data_ptr"/>
+    <reg name="psw" bitsize="32" type="psw_flags"/>
+    <reg name="pc" bitsize="32" type="code_ptr"/>
+    <reg name="intb" bitsize="32" type="data_ptr"/>
+    <reg name="bpsw" bitsize="32" type="psw_flags"/>
+    <reg name="bpc" bitsize="32" type="code_ptr"/>
+    <reg name="fintv" bitsize="32" type="code_ptr"/>
+    <reg name="fpsw" bitsize="32" type="fpsw_flags"/>
+    <reg name="acc" bitsize="64" type="uint64"/>
+  </feature>
+</target>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-acr.xml ./gdb/features/s390-acr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-acr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-acr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-core32.xml ./gdb/features/s390-core32.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-core32.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-core32.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-core64.xml ./gdb/features/s390-core64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-core64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-core64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-fpr.xml ./gdb/features/s390-fpr.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-fpr.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-fpr.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gsbc.xml ./gdb/features/s390-gsbc.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gsbc.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-gsbc.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gs-linux64.c ./gdb/features/s390-gs-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gs-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-gs-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_gs_linux6
 static void
 initialize_tdesc_s390_gs_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_gs_linux64 (void)
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_gs_linux64 (void)
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,12 +87,12 @@ initialize_tdesc_s390_gs_linux64 (void)
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
   tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.tdb");
   tdesc_create_reg (feature, "tdb0", 70, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tac", 71, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tct", 72, 1, "tdb", 64, "uint64");
@@ -114,7 +114,7 @@ initialize_tdesc_s390_gs_linux64 (void)
   tdesc_create_reg (feature, "tr14", 88, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tr15", 89, 1, "tdb", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.vx");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -185,15 +185,15 @@ initialize_tdesc_s390_gs_linux64 (void)
   tdesc_create_reg (feature, "v30", 120, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "v31", 121, 1, NULL, 128, "vec128");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gs");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.gs");
   tdesc_create_reg (feature, "gsd", 122, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "gssm", 123, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "gsepla", 124, 1, "gs", 64, "data_ptr");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gsbc");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.gsbc");
   tdesc_create_reg (feature, "bc_gsd", 125, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "bc_gssm", 126, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "bc_gsepla", 127, 1, "gs", 64, "data_ptr");
 
-  tdesc_s390_gs_linux64 = result;
+  tdesc_s390_gs_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gs-linux64.xml ./gdb/features/s390-gs-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gs-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-gs-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gs.xml ./gdb/features/s390-gs.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-gs.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-gs.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32.c ./gdb/features/s390-linux32.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux32.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_linux32;
 static void
 initialize_tdesc_s390_linux32 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 32, "uint32");
@@ -34,7 +34,7 @@ initialize_tdesc_s390_linux32 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 32, "uint32");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390_linux32 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,8 +71,8 @@ initialize_tdesc_s390_linux32 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 32, "uint32");
 
-  tdesc_s390_linux32 = result;
+  tdesc_s390_linux32 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v1.c ./gdb/features/s390-linux32v1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v1.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux32v1.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_linux32v1
 static void
 initialize_tdesc_s390_linux32v1 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 32, "uint32");
@@ -34,7 +34,7 @@ initialize_tdesc_s390_linux32v1 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 32, "uint32");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390_linux32v1 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,9 +71,9 @@ initialize_tdesc_s390_linux32v1 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 32, "code_ptr");
 
-  tdesc_s390_linux32v1 = result;
+  tdesc_s390_linux32v1 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v1.xml ./gdb/features/s390-linux32v1.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v1.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux32v1.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v2.c ./gdb/features/s390-linux32v2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v2.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux32v2.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_linux32v2
 static void
 initialize_tdesc_s390_linux32v2 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 32, "uint32");
@@ -34,7 +34,7 @@ initialize_tdesc_s390_linux32v2 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 32, "uint32");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390_linux32v2 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,10 +71,10 @@ initialize_tdesc_s390_linux32v2 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 32, "code_ptr");
   tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
 
-  tdesc_s390_linux32v2 = result;
+  tdesc_s390_linux32v2 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v2.xml ./gdb/features/s390-linux32v2.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32v2.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux32v2.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32.xml ./gdb/features/s390-linux32.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux32.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux32.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64.c ./gdb/features/s390-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_linux64;
 static void
 initialize_tdesc_s390_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_linux64 (void)
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_linux64 (void)
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,8 +87,8 @@ initialize_tdesc_s390_linux64 (void)
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
 
-  tdesc_s390_linux64 = result;
+  tdesc_s390_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v1.c ./gdb/features/s390-linux64v1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v1.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux64v1.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_linux64v1
 static void
 initialize_tdesc_s390_linux64v1 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_linux64v1 (void)
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_linux64v1 (void)
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,9 +87,9 @@ initialize_tdesc_s390_linux64v1 (void)
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
 
-  tdesc_s390_linux64v1 = result;
+  tdesc_s390_linux64v1 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v1.xml ./gdb/features/s390-linux64v1.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v1.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux64v1.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v2.c ./gdb/features/s390-linux64v2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v2.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux64v2.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_linux64v2
 static void
 initialize_tdesc_s390_linux64v2 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_linux64v2 (void)
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_linux64v2 (void)
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,10 +87,10 @@ initialize_tdesc_s390_linux64v2 (void)
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
   tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32");
 
-  tdesc_s390_linux64v2 = result;
+  tdesc_s390_linux64v2 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v2.xml ./gdb/features/s390-linux64v2.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64v2.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux64v2.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64.xml ./gdb/features/s390-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-tdb.xml ./gdb/features/s390-tdb.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-tdb.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-tdb.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-te-linux64.c ./gdb/features/s390-te-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-te-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-te-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_te_linux6
 static void
 initialize_tdesc_s390_te_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_te_linux64 (void)
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_te_linux64 (void)
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,12 +87,12 @@ initialize_tdesc_s390_te_linux64 (void)
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
   tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.tdb");
   tdesc_create_reg (feature, "tdb0", 70, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tac", 71, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tct", 72, 1, "tdb", 64, "uint64");
@@ -114,5 +114,5 @@ initialize_tdesc_s390_te_linux64 (void)
   tdesc_create_reg (feature, "tr14", 88, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tr15", 89, 1, "tdb", 64, "uint64");
 
-  tdesc_s390_te_linux64 = result;
+  tdesc_s390_te_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-te-linux64.xml ./gdb/features/s390-te-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-te-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-te-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-tevx-linux64.c ./gdb/features/s390-tevx-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-tevx-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-tevx-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_tevx_linu
 static void
 initialize_tdesc_s390_tevx_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_tevx_linux64 (void
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_tevx_linux64 (void
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,12 +87,12 @@ initialize_tdesc_s390_tevx_linux64 (void
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
   tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.tdb");
   tdesc_create_reg (feature, "tdb0", 70, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tac", 71, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tct", 72, 1, "tdb", 64, "uint64");
@@ -114,7 +114,7 @@ initialize_tdesc_s390_tevx_linux64 (void
   tdesc_create_reg (feature, "tr14", 88, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tr15", 89, 1, "tdb", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.vx");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -185,5 +185,5 @@ initialize_tdesc_s390_tevx_linux64 (void
   tdesc_create_reg (feature, "v30", 120, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "v31", 121, 1, NULL, 128, "vec128");
 
-  tdesc_s390_tevx_linux64 = result;
+  tdesc_s390_tevx_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-tevx-linux64.xml ./gdb/features/s390-tevx-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-tevx-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-tevx-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-vx-linux64.c ./gdb/features/s390-vx-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-vx-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-vx-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390_vx_linux6
 static void
 initialize_tdesc_s390_vx_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:31-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
   tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
@@ -50,7 +50,7 @@ initialize_tdesc_s390_vx_linux64 (void)
   tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
   tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
@@ -68,7 +68,7 @@ initialize_tdesc_s390_vx_linux64 (void)
   tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
@@ -87,12 +87,12 @@ initialize_tdesc_s390_vx_linux64 (void)
   tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
   tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
   tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.vx");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -163,5 +163,5 @@ initialize_tdesc_s390_vx_linux64 (void)
   tdesc_create_reg (feature, "v30", 100, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "v31", 101, 1, NULL, 128, "vec128");
 
-  tdesc_s390_vx_linux64 = result;
+  tdesc_s390_vx_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-vx-linux64.xml ./gdb/features/s390-vx-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-vx-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-vx-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-vx.xml ./gdb/features/s390-vx.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390-vx.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390-vx.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-core64.xml ./gdb/features/s390x-core64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-core64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-core64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-gs-linux64.c ./gdb/features/s390x-gs-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-gs-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-gs-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_gs_linux
 static void
 initialize_tdesc_s390x_gs_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_gs_linux64 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_gs_linux64 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,12 +71,12 @@ initialize_tdesc_s390x_gs_linux64 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
   tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.tdb");
   tdesc_create_reg (feature, "tdb0", 54, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tac", 55, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tct", 56, 1, "tdb", 64, "uint64");
@@ -98,7 +98,7 @@ initialize_tdesc_s390x_gs_linux64 (void)
   tdesc_create_reg (feature, "tr14", 72, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tr15", 73, 1, "tdb", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.vx");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -169,15 +169,15 @@ initialize_tdesc_s390x_gs_linux64 (void)
   tdesc_create_reg (feature, "v30", 104, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "v31", 105, 1, NULL, 128, "vec128");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gs");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.gs");
   tdesc_create_reg (feature, "gsd", 106, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "gssm", 107, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "gsepla", 108, 1, "gs", 64, "data_ptr");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gsbc");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.gsbc");
   tdesc_create_reg (feature, "bc_gsd", 109, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "bc_gssm", 110, 1, "gs", 64, "uint64");
   tdesc_create_reg (feature, "bc_gsepla", 111, 1, "gs", 64, "data_ptr");
 
-  tdesc_s390x_gs_linux64 = result;
+  tdesc_s390x_gs_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-gs-linux64.xml ./gdb/features/s390x-gs-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-gs-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-gs-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2017-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64.c ./gdb/features/s390x-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_linux64;
 static void
 initialize_tdesc_s390x_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_linux64 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_linux64 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,8 +71,8 @@ initialize_tdesc_s390x_linux64 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
 
-  tdesc_s390x_linux64 = result;
+  tdesc_s390x_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v1.c ./gdb/features/s390x-linux64v1.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v1.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-linux64v1.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_linux64v
 static void
 initialize_tdesc_s390x_linux64v1 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_linux64v1 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_linux64v1 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,9 +71,9 @@ initialize_tdesc_s390x_linux64v1 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
 
-  tdesc_s390x_linux64v1 = result;
+  tdesc_s390x_linux64v1 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v1.xml ./gdb/features/s390x-linux64v1.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v1.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-linux64v1.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v2.c ./gdb/features/s390x-linux64v2.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v2.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-linux64v2.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_linux64v
 static void
 initialize_tdesc_s390x_linux64v2 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_linux64v2 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_linux64v2 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,10 +71,10 @@ initialize_tdesc_s390x_linux64v2 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
   tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
 
-  tdesc_s390x_linux64v2 = result;
+  tdesc_s390x_linux64v2 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v2.xml ./gdb/features/s390x-linux64v2.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64v2.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-linux64v2.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64.xml ./gdb/features/s390x-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-te-linux64.c ./gdb/features/s390x-te-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-te-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-te-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_te_linux
 static void
 initialize_tdesc_s390x_te_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_te_linux64 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_te_linux64 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,12 +71,12 @@ initialize_tdesc_s390x_te_linux64 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
   tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.tdb");
   tdesc_create_reg (feature, "tdb0", 54, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tac", 55, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tct", 56, 1, "tdb", 64, "uint64");
@@ -98,5 +98,5 @@ initialize_tdesc_s390x_te_linux64 (void)
   tdesc_create_reg (feature, "tr14", 72, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tr15", 73, 1, "tdb", 64, "uint64");
 
-  tdesc_s390x_te_linux64 = result;
+  tdesc_s390x_te_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-te-linux64.xml ./gdb/features/s390x-te-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-te-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-te-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-tevx-linux64.c ./gdb/features/s390x-tevx-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-tevx-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-tevx-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_tevx_lin
 static void
 initialize_tdesc_s390x_tevx_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_tevx_linux64 (voi
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_tevx_linux64 (voi
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,12 +71,12 @@ initialize_tdesc_s390x_tevx_linux64 (voi
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
   tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.tdb");
   tdesc_create_reg (feature, "tdb0", 54, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tac", 55, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tct", 56, 1, "tdb", 64, "uint64");
@@ -98,7 +98,7 @@ initialize_tdesc_s390x_tevx_linux64 (voi
   tdesc_create_reg (feature, "tr14", 72, 1, "tdb", 64, "uint64");
   tdesc_create_reg (feature, "tr15", 73, 1, "tdb", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.vx");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -169,5 +169,5 @@ initialize_tdesc_s390x_tevx_linux64 (voi
   tdesc_create_reg (feature, "v30", 104, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "v31", 105, 1, NULL, 128, "vec128");
 
-  tdesc_s390x_tevx_linux64 = result;
+  tdesc_s390x_tevx_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-tevx-linux64.xml ./gdb/features/s390x-tevx-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-tevx-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-tevx-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-vx-linux64.c ./gdb/features/s390x-vx-linux64.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-vx-linux64.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-vx-linux64.c	2021-12-16 01:57:39.000000000 +0000
@@ -9,12 +9,12 @@ struct target_desc *tdesc_s390x_vx_linux
 static void
 initialize_tdesc_s390x_vx_linux64 (void)
 {
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("s390:64-bit"));
 
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.core");
   tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
   tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
@@ -34,7 +34,7 @@ initialize_tdesc_s390x_vx_linux64 (void)
   tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
   tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.acr");
   tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
@@ -52,7 +52,7 @@ initialize_tdesc_s390x_vx_linux64 (void)
   tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
   tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.fpr");
   tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
   tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
@@ -71,12 +71,12 @@ initialize_tdesc_s390x_vx_linux64 (void)
   tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
   tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.linux");
   tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
   tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
   tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.s390.vx");
   tdesc_type *element_type;
   element_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", element_type, 4);
@@ -147,5 +147,5 @@ initialize_tdesc_s390x_vx_linux64 (void)
   tdesc_create_reg (feature, "v30", 84, 1, NULL, 128, "vec128");
   tdesc_create_reg (feature, "v31", 85, 1, NULL, 128, "vec128");
 
-  tdesc_s390x_vx_linux64 = result;
+  tdesc_s390x_vx_linux64 = result.release ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-vx-linux64.xml ./gdb/features/s390x-vx-linux64.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/s390x-vx-linux64.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/s390x-vx-linux64.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-cp0.xml ./gdb/features/sparc/sparc32-cp0.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-cp0.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc32-cp0.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-cpu.xml ./gdb/features/sparc/sparc32-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc32-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-fpu.xml ./gdb/features/sparc/sparc32-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc32-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-solaris.xml ./gdb/features/sparc/sparc32-solaris.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc32-solaris.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc32-solaris.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-cp0.xml ./gdb/features/sparc/sparc64-cp0.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-cp0.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc64-cp0.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-cpu.xml ./gdb/features/sparc/sparc64-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-cpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc64-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-fpu.xml ./gdb/features/sparc/sparc64-fpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-fpu.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc64-fpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-solaris.xml ./gdb/features/sparc/sparc64-solaris.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/sparc/sparc64-solaris.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/sparc/sparc64-solaris.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/threads.dtd ./gdb/features/threads.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/threads.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/threads.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c62x-linux.xml ./gdb/features/tic6x-c62x-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c62x-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/tic6x-c62x-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c64x-linux.xml ./gdb/features/tic6x-c64x-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c64x-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/tic6x-c64x-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c64xp-linux.xml ./gdb/features/tic6x-c64xp-linux.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c64xp-linux.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/tic6x-c64xp-linux.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c6xp.xml ./gdb/features/tic6x-c6xp.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-c6xp.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/tic6x-c6xp.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-core.xml ./gdb/features/tic6x-core.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-core.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/tic6x-core.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-gp.xml ./gdb/features/tic6x-gp.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/tic6x-gp.xml	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/tic6x-gp.xml	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/traceframe-info.dtd ./gdb/features/traceframe-info.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/traceframe-info.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/traceframe-info.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/xinclude.dtd ./gdb/features/xinclude.dtd
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/xinclude.dtd	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/features/xinclude.dtd	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc.
+<!-- Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/z80.c ./gdb/features/z80.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/z80.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/z80.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,44 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: z80.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_z80;
+static void
+initialize_tdesc_z80 (void)
+{
+  target_desc_up result = allocate_target_description ();
+  set_tdesc_architecture (result.get (), bfd_scan_arch ("z80"));
+
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result.get (), "org.gnu.gdb.z80.cpu");
+  tdesc_type_with_fields *type_with_fields;
+  type_with_fields = tdesc_create_flags (feature, "af_flags", 2);
+  tdesc_add_flag (type_with_fields, 0, "C");
+  tdesc_add_flag (type_with_fields, 1, "N");
+  tdesc_add_flag (type_with_fields, 2, "P/V");
+  tdesc_add_flag (type_with_fields, 3, "F3");
+  tdesc_add_flag (type_with_fields, 4, "H");
+  tdesc_add_flag (type_with_fields, 5, "F5");
+  tdesc_add_flag (type_with_fields, 6, "Z");
+  tdesc_add_flag (type_with_fields, 7, "S");
+
+  tdesc_create_reg (feature, "af", 0, 1, NULL, 16, "af_flags");
+  tdesc_create_reg (feature, "bc", 1, 1, NULL, 16, "uint16");
+  tdesc_create_reg (feature, "de", 2, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "hl", 3, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "sp", 4, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "pc", 5, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "ix", 6, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "iy", 7, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "af'", 8, 1, NULL, 16, "af_flags");
+  tdesc_create_reg (feature, "bc'", 9, 1, NULL, 16, "uint16");
+  tdesc_create_reg (feature, "de'", 10, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "hl'", 11, 1, NULL, 16, "data_ptr");
+  tdesc_create_reg (feature, "ir", 12, 1, NULL, 16, "uint16");
+
+  tdesc_z80 = result.release ();
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/z80-cpu.xml ./gdb/features/z80-cpu.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/z80-cpu.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/z80-cpu.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!-- 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.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.z80.cpu">
+  <flags id="af_flags" size="2">
+    <field name="C" start="0" end="0"/>
+    <field name="N" start="1" end="1"/>
+    <field name="P/V" start="2" end="2"/>
+    <field name="F3" start="3" end="3"/>
+    <field name="H" start="4" end="4"/>
+    <field name="F5" start="5" end="5"/>
+    <field name="Z" start="6" end="6"/>
+    <field name="S" start="7" end="7"/>
+  </flags>
+  <reg name="af" bitsize="16" type="af_flags"/>
+  <reg name="bc" bitsize="16" type="uint16"/>
+  <reg name="de" bitsize="16" type="data_ptr"/>
+  <reg name="hl" bitsize="16" type="data_ptr"/>
+  <reg name="sp" bitsize="16" type="data_ptr" />
+  <reg name="pc" bitsize="32" type="code_ptr" />
+  <reg name="ix" bitsize="16" type="data_ptr"/>
+  <reg name="iy" bitsize="16" type="data_ptr"/>
+  <reg name="af'" bitsize="16" type="af_flags"/>
+  <reg name="bc'" bitsize="16" type="uint16"/>
+  <reg name="de'" bitsize="16" type="data_ptr"/>
+  <reg name="hl'" bitsize="16" type="data_ptr"/>
+  <reg name="ir" bitsize="16" type="uint16"/>
+</feature>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/z80.xml ./gdb/features/z80.xml
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/features/z80.xml	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/features/z80.xml	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- 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.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>z80</architecture>
+  <xi:include href="z80-cpu.xml"/>
+</target>
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-exp.c ./gdb/f-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-exp.c	2020-03-07 02:11:13.000000000 +0000
+++ ./gdb/f-exp.c	2021-12-16 02:00:19.000000000 +0000
@@ -1,21 +1,20 @@
+/* A Bison parser, made by GNU Bison 3.6.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, 2018-2020 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,13 +27,17 @@
    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.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -46,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,14 +63,10 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
 
 
 
-/* Copy the first part of user declarations.  */
-
-/* Line 189 of yacc.c  */
+/* First part of user prologue.  */
 #line 43 "f-exp.y"
 
 
@@ -84,6 +83,7 @@
 #include <ctype.h>
 #include <algorithm>
 #include "type-stack.h"
+#include "f-exp.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 #define parse_f_type(ps) builtin_f_type (ps->gdbarch ())
@@ -118,139 +118,156 @@ static void push_kind_type (LONGEST val,
 
 static struct type *convert_to_kind_type (struct type *basetype, int kind);
 
+using namespace expr;
 
+#line 124 "f-exp.c.tmp"
 
-/* Line 189 of yacc.c  */
-#line 125 "f-exp.c.tmp"
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTRPTR nullptr
+#   else
+#    define YY_NULLPTRPTR 0
+#   endif
+#  else
+#   define YY_NULLPTRPTR ((void*)0)
+#  endif
+# endif
 
-/* Enabling traces.  */
+
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+#if YYDEBUG
+extern int yydebug;
 #endif
 
-
-/* Tokens.  */
+/* Token kinds.  */
 #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_LITERAL = 260,
-     BOOLEAN_LITERAL = 261,
-     NAME = 262,
-     TYPENAME = 263,
-     NAME_OR_INT = 264,
-     SIZEOF = 265,
-     KIND = 266,
-     ERROR = 267,
-     INT_KEYWORD = 268,
-     INT_S2_KEYWORD = 269,
-     LOGICAL_S1_KEYWORD = 270,
-     LOGICAL_S2_KEYWORD = 271,
-     LOGICAL_S8_KEYWORD = 272,
-     LOGICAL_KEYWORD = 273,
-     REAL_KEYWORD = 274,
-     REAL_S8_KEYWORD = 275,
-     REAL_S16_KEYWORD = 276,
-     COMPLEX_KEYWORD = 277,
-     COMPLEX_S8_KEYWORD = 278,
-     COMPLEX_S16_KEYWORD = 279,
-     COMPLEX_S32_KEYWORD = 280,
-     BOOL_AND = 281,
-     BOOL_OR = 282,
-     BOOL_NOT = 283,
-     SINGLE = 284,
-     DOUBLE = 285,
-     PRECISION = 286,
-     CHARACTER = 287,
-     DOLLAR_VARIABLE = 288,
-     ASSIGN_MODIFY = 289,
-     UNOP_INTRINSIC = 290,
-     BINOP_INTRINSIC = 291,
-     ABOVE_COMMA = 292,
-     NOTEQUAL = 293,
-     EQUAL = 294,
-     GEQ = 295,
-     LEQ = 296,
-     GREATERTHAN = 297,
-     LESSTHAN = 298,
-     RSH = 299,
-     LSH = 300,
-     STARSTAR = 301,
-     UNARY = 302
-   };
-#endif
-/* Tokens.  */
+  enum yytokentype
+  {
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    INT = 258,                     /* INT  */
+    FLOAT = 259,                   /* FLOAT  */
+    STRING_LITERAL = 260,          /* STRING_LITERAL  */
+    BOOLEAN_LITERAL = 261,         /* BOOLEAN_LITERAL  */
+    NAME = 262,                    /* NAME  */
+    TYPENAME = 263,                /* TYPENAME  */
+    COMPLETE = 264,                /* COMPLETE  */
+    NAME_OR_INT = 265,             /* NAME_OR_INT  */
+    SIZEOF = 266,                  /* SIZEOF  */
+    KIND = 267,                    /* KIND  */
+    ERROR = 268,                   /* ERROR  */
+    INT_KEYWORD = 269,             /* INT_KEYWORD  */
+    INT_S2_KEYWORD = 270,          /* INT_S2_KEYWORD  */
+    LOGICAL_S1_KEYWORD = 271,      /* LOGICAL_S1_KEYWORD  */
+    LOGICAL_S2_KEYWORD = 272,      /* LOGICAL_S2_KEYWORD  */
+    LOGICAL_S8_KEYWORD = 273,      /* LOGICAL_S8_KEYWORD  */
+    LOGICAL_KEYWORD = 274,         /* LOGICAL_KEYWORD  */
+    REAL_KEYWORD = 275,            /* REAL_KEYWORD  */
+    REAL_S8_KEYWORD = 276,         /* REAL_S8_KEYWORD  */
+    REAL_S16_KEYWORD = 277,        /* REAL_S16_KEYWORD  */
+    COMPLEX_KEYWORD = 278,         /* COMPLEX_KEYWORD  */
+    COMPLEX_S8_KEYWORD = 279,      /* COMPLEX_S8_KEYWORD  */
+    COMPLEX_S16_KEYWORD = 280,     /* COMPLEX_S16_KEYWORD  */
+    COMPLEX_S32_KEYWORD = 281,     /* COMPLEX_S32_KEYWORD  */
+    BOOL_AND = 282,                /* BOOL_AND  */
+    BOOL_OR = 283,                 /* BOOL_OR  */
+    BOOL_NOT = 284,                /* BOOL_NOT  */
+    SINGLE = 285,                  /* SINGLE  */
+    DOUBLE = 286,                  /* DOUBLE  */
+    PRECISION = 287,               /* PRECISION  */
+    CHARACTER = 288,               /* CHARACTER  */
+    DOLLAR_VARIABLE = 289,         /* DOLLAR_VARIABLE  */
+    ASSIGN_MODIFY = 290,           /* ASSIGN_MODIFY  */
+    UNOP_INTRINSIC = 291,          /* UNOP_INTRINSIC  */
+    BINOP_INTRINSIC = 292,         /* BINOP_INTRINSIC  */
+    UNOP_OR_BINOP_INTRINSIC = 293, /* UNOP_OR_BINOP_INTRINSIC  */
+    ABOVE_COMMA = 294,             /* ABOVE_COMMA  */
+    EQUAL = 295,                   /* EQUAL  */
+    NOTEQUAL = 296,                /* NOTEQUAL  */
+    LESSTHAN = 297,                /* LESSTHAN  */
+    GREATERTHAN = 298,             /* GREATERTHAN  */
+    LEQ = 299,                     /* LEQ  */
+    GEQ = 300,                     /* GEQ  */
+    LSH = 301,                     /* LSH  */
+    RSH = 302,                     /* RSH  */
+    STARSTAR = 303,                /* STARSTAR  */
+    UNARY = 304                    /* UNARY  */
+  };
+  typedef enum yytokentype yytoken_kind_t;
+#endif
+/* Token kinds.  */
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
 #define INT 258
 #define FLOAT 259
 #define STRING_LITERAL 260
 #define BOOLEAN_LITERAL 261
 #define NAME 262
 #define TYPENAME 263
-#define NAME_OR_INT 264
-#define SIZEOF 265
-#define KIND 266
-#define ERROR 267
-#define INT_KEYWORD 268
-#define INT_S2_KEYWORD 269
-#define LOGICAL_S1_KEYWORD 270
-#define LOGICAL_S2_KEYWORD 271
-#define LOGICAL_S8_KEYWORD 272
-#define LOGICAL_KEYWORD 273
-#define REAL_KEYWORD 274
-#define REAL_S8_KEYWORD 275
-#define REAL_S16_KEYWORD 276
-#define COMPLEX_KEYWORD 277
-#define COMPLEX_S8_KEYWORD 278
-#define COMPLEX_S16_KEYWORD 279
-#define COMPLEX_S32_KEYWORD 280
-#define BOOL_AND 281
-#define BOOL_OR 282
-#define BOOL_NOT 283
-#define SINGLE 284
-#define DOUBLE 285
-#define PRECISION 286
-#define CHARACTER 287
-#define DOLLAR_VARIABLE 288
-#define ASSIGN_MODIFY 289
-#define UNOP_INTRINSIC 290
-#define BINOP_INTRINSIC 291
-#define ABOVE_COMMA 292
-#define NOTEQUAL 293
-#define EQUAL 294
-#define GEQ 295
-#define LEQ 296
-#define GREATERTHAN 297
-#define LESSTHAN 298
-#define RSH 299
-#define LSH 300
-#define STARSTAR 301
-#define UNARY 302
-
-
-
+#define COMPLETE 264
+#define NAME_OR_INT 265
+#define SIZEOF 266
+#define KIND 267
+#define ERROR 268
+#define INT_KEYWORD 269
+#define INT_S2_KEYWORD 270
+#define LOGICAL_S1_KEYWORD 271
+#define LOGICAL_S2_KEYWORD 272
+#define LOGICAL_S8_KEYWORD 273
+#define LOGICAL_KEYWORD 274
+#define REAL_KEYWORD 275
+#define REAL_S8_KEYWORD 276
+#define REAL_S16_KEYWORD 277
+#define COMPLEX_KEYWORD 278
+#define COMPLEX_S8_KEYWORD 279
+#define COMPLEX_S16_KEYWORD 280
+#define COMPLEX_S32_KEYWORD 281
+#define BOOL_AND 282
+#define BOOL_OR 283
+#define BOOL_NOT 284
+#define SINGLE 285
+#define DOUBLE 286
+#define PRECISION 287
+#define CHARACTER 288
+#define DOLLAR_VARIABLE 289
+#define ASSIGN_MODIFY 290
+#define UNOP_INTRINSIC 291
+#define BINOP_INTRINSIC 292
+#define UNOP_OR_BINOP_INTRINSIC 293
+#define ABOVE_COMMA 294
+#define EQUAL 295
+#define NOTEQUAL 296
+#define LESSTHAN 297
+#define GREATERTHAN 298
+#define LEQ 299
+#define GEQ 300
+#define LSH 301
+#define RSH 302
+#define STARSTAR 303
+#define UNARY 304
 
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 99 "f-exp.y"
+#line 101 "f-exp.y"
 
     LONGEST lval;
     struct {
@@ -274,58 +291,197 @@ typedef union YYSTYPE
     int *ivec;
   
 
+#line 295 "f-exp.c.tmp"
 
-/* Line 214 of yacc.c  */
-#line 280 "f-exp.c.tmp"
-} YYSTYPE;
+};
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_INT = 3,                        /* INT  */
+  YYSYMBOL_FLOAT = 4,                      /* FLOAT  */
+  YYSYMBOL_STRING_LITERAL = 5,             /* STRING_LITERAL  */
+  YYSYMBOL_BOOLEAN_LITERAL = 6,            /* BOOLEAN_LITERAL  */
+  YYSYMBOL_NAME = 7,                       /* NAME  */
+  YYSYMBOL_TYPENAME = 8,                   /* TYPENAME  */
+  YYSYMBOL_COMPLETE = 9,                   /* COMPLETE  */
+  YYSYMBOL_NAME_OR_INT = 10,               /* NAME_OR_INT  */
+  YYSYMBOL_SIZEOF = 11,                    /* SIZEOF  */
+  YYSYMBOL_KIND = 12,                      /* KIND  */
+  YYSYMBOL_ERROR = 13,                     /* ERROR  */
+  YYSYMBOL_INT_KEYWORD = 14,               /* INT_KEYWORD  */
+  YYSYMBOL_INT_S2_KEYWORD = 15,            /* INT_S2_KEYWORD  */
+  YYSYMBOL_LOGICAL_S1_KEYWORD = 16,        /* LOGICAL_S1_KEYWORD  */
+  YYSYMBOL_LOGICAL_S2_KEYWORD = 17,        /* LOGICAL_S2_KEYWORD  */
+  YYSYMBOL_LOGICAL_S8_KEYWORD = 18,        /* LOGICAL_S8_KEYWORD  */
+  YYSYMBOL_LOGICAL_KEYWORD = 19,           /* LOGICAL_KEYWORD  */
+  YYSYMBOL_REAL_KEYWORD = 20,              /* REAL_KEYWORD  */
+  YYSYMBOL_REAL_S8_KEYWORD = 21,           /* REAL_S8_KEYWORD  */
+  YYSYMBOL_REAL_S16_KEYWORD = 22,          /* REAL_S16_KEYWORD  */
+  YYSYMBOL_COMPLEX_KEYWORD = 23,           /* COMPLEX_KEYWORD  */
+  YYSYMBOL_COMPLEX_S8_KEYWORD = 24,        /* COMPLEX_S8_KEYWORD  */
+  YYSYMBOL_COMPLEX_S16_KEYWORD = 25,       /* COMPLEX_S16_KEYWORD  */
+  YYSYMBOL_COMPLEX_S32_KEYWORD = 26,       /* COMPLEX_S32_KEYWORD  */
+  YYSYMBOL_BOOL_AND = 27,                  /* BOOL_AND  */
+  YYSYMBOL_BOOL_OR = 28,                   /* BOOL_OR  */
+  YYSYMBOL_BOOL_NOT = 29,                  /* BOOL_NOT  */
+  YYSYMBOL_SINGLE = 30,                    /* SINGLE  */
+  YYSYMBOL_DOUBLE = 31,                    /* DOUBLE  */
+  YYSYMBOL_PRECISION = 32,                 /* PRECISION  */
+  YYSYMBOL_CHARACTER = 33,                 /* CHARACTER  */
+  YYSYMBOL_DOLLAR_VARIABLE = 34,           /* DOLLAR_VARIABLE  */
+  YYSYMBOL_ASSIGN_MODIFY = 35,             /* ASSIGN_MODIFY  */
+  YYSYMBOL_UNOP_INTRINSIC = 36,            /* UNOP_INTRINSIC  */
+  YYSYMBOL_BINOP_INTRINSIC = 37,           /* BINOP_INTRINSIC  */
+  YYSYMBOL_UNOP_OR_BINOP_INTRINSIC = 38,   /* UNOP_OR_BINOP_INTRINSIC  */
+  YYSYMBOL_39_ = 39,                       /* ','  */
+  YYSYMBOL_ABOVE_COMMA = 40,               /* ABOVE_COMMA  */
+  YYSYMBOL_41_ = 41,                       /* '='  */
+  YYSYMBOL_42_ = 42,                       /* '?'  */
+  YYSYMBOL_43_ = 43,                       /* '|'  */
+  YYSYMBOL_44_ = 44,                       /* '^'  */
+  YYSYMBOL_45_ = 45,                       /* '&'  */
+  YYSYMBOL_EQUAL = 46,                     /* EQUAL  */
+  YYSYMBOL_NOTEQUAL = 47,                  /* NOTEQUAL  */
+  YYSYMBOL_LESSTHAN = 48,                  /* LESSTHAN  */
+  YYSYMBOL_GREATERTHAN = 49,               /* GREATERTHAN  */
+  YYSYMBOL_LEQ = 50,                       /* LEQ  */
+  YYSYMBOL_GEQ = 51,                       /* GEQ  */
+  YYSYMBOL_LSH = 52,                       /* LSH  */
+  YYSYMBOL_RSH = 53,                       /* RSH  */
+  YYSYMBOL_54_ = 54,                       /* '@'  */
+  YYSYMBOL_55_ = 55,                       /* '+'  */
+  YYSYMBOL_56_ = 56,                       /* '-'  */
+  YYSYMBOL_57_ = 57,                       /* '*'  */
+  YYSYMBOL_58_ = 58,                       /* '/'  */
+  YYSYMBOL_STARSTAR = 59,                  /* STARSTAR  */
+  YYSYMBOL_60_ = 60,                       /* '%'  */
+  YYSYMBOL_UNARY = 61,                     /* UNARY  */
+  YYSYMBOL_62_ = 62,                       /* '('  */
+  YYSYMBOL_63_ = 63,                       /* ')'  */
+  YYSYMBOL_64_ = 64,                       /* '~'  */
+  YYSYMBOL_65_ = 65,                       /* ':'  */
+  YYSYMBOL_YYACCEPT = 66,                  /* $accept  */
+  YYSYMBOL_start = 67,                     /* start  */
+  YYSYMBOL_type_exp = 68,                  /* type_exp  */
+  YYSYMBOL_exp = 69,                       /* exp  */
+  YYSYMBOL_70_1 = 70,                      /* $@1  */
+  YYSYMBOL_one_or_two_args = 71,           /* one_or_two_args  */
+  YYSYMBOL_72_2 = 72,                      /* $@2  */
+  YYSYMBOL_arglist = 73,                   /* arglist  */
+  YYSYMBOL_subrange = 74,                  /* subrange  */
+  YYSYMBOL_complexnum = 75,                /* complexnum  */
+  YYSYMBOL_variable = 76,                  /* variable  */
+  YYSYMBOL_type = 77,                      /* type  */
+  YYSYMBOL_ptype = 78,                     /* ptype  */
+  YYSYMBOL_abs_decl = 79,                  /* abs_decl  */
+  YYSYMBOL_direct_abs_decl = 80,           /* direct_abs_decl  */
+  YYSYMBOL_func_mod = 81,                  /* func_mod  */
+  YYSYMBOL_typebase = 82,                  /* typebase  */
+  YYSYMBOL_nonempty_typelist = 83,         /* nonempty_typelist  */
+  YYSYMBOL_name = 84,                      /* name  */
+  YYSYMBOL_name_not_typename = 85          /* name_not_typename  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
 
-/* Line 264 of yacc.c  */
-#line 122 "f-exp.y"
+/* Second part of user prologue.  */
+#line 124 "f-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (struct parser_state *, const char *, int,
 			 int, YYSTYPE *);
 
+#line 410 "f-exp.c.tmp"
 
-/* Line 264 of yacc.c  */
-#line 299 "f-exp.c.tmp"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -333,55 +489,100 @@ 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 __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_uint8 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #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_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
 # 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__ && ! defined __ICC && 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 __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
 #endif
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
 
@@ -397,11 +598,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
@@ -409,8 +610,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
@@ -424,125 +625,130 @@ 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
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   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 (YYSIZEOF (union 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) * (YYSIZEOF (yy_state_t) + YYSIZEOF (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                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*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, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYPTRDIFF_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  60
+#define YYFINAL  62
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   720
+#define YYLAST   940
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  64
+#define YYNTOKENS  66
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  18
+#define YYNNTS  20
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  96
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  157
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   302
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
+#define YYNRULES  107
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  176
+
+#define YYMAXUTOK   304
+
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
+static const yytype_int8 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,    58,    43,     2,
-      60,    61,    55,    53,    37,    54,     2,    56,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    63,     2,
-       2,    39,     2,    40,    52,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    60,    45,     2,
+      62,    63,    57,    55,    39,    56,     2,    58,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    65,     2,
+       2,    41,     2,    42,    54,     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,    42,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    44,     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,    41,     2,    62,     2,     2,     2,
+       2,     2,     2,     2,    43,     2,    64,     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,
@@ -559,476 +765,445 @@ 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,    36,    38,    44,    45,    46,    47,    48,    49,    50,
-      51,    57,    59
+      35,    36,    37,    38,    40,    46,    47,    48,    49,    50,
+      51,    52,    53,    59,    61
 };
 
 #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,    13,    16,    19,    22,
-      25,    28,    31,    36,    37,    43,    48,    55,    56,    58,
-      60,    64,    68,    71,    74,    76,    80,    84,    89,    93,
-      97,   101,   105,   109,   113,   117,   121,   125,   129,   133,
-     137,   141,   145,   149,   153,   157,   161,   165,   169,   173,
-     177,   179,   181,   183,   185,   187,   192,   194,   196,   198,
-     200,   202,   205,   207,   210,   212,   215,   217,   221,   227,
-     230,   233,   235,   238,   242,   244,   246,   248,   250,   252,
-     254,   256,   258,   260,   262,   264,   266,   268,   270,   272,
-     275,   278,   281,   284,   286,   290,   292
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      65,     0,    -1,    67,    -1,    66,    -1,    73,    -1,    60,
-      67,    61,    -1,    55,    67,    -1,    43,    67,    -1,    54,
-      67,    -1,    28,    67,    -1,    62,    67,    -1,    10,    67,
-      -1,    11,    60,    67,    61,    -1,    -1,    67,    60,    68,
-      69,    61,    -1,    35,    60,    67,    61,    -1,    36,    60,
-      67,    37,    67,    61,    -1,    -1,    67,    -1,    70,    -1,
-      69,    37,    67,    -1,    67,    63,    67,    -1,    67,    63,
-      -1,    63,    67,    -1,    63,    -1,    67,    37,    67,    -1,
-      60,    71,    61,    -1,    60,    73,    61,    67,    -1,    67,
-      58,    80,    -1,    67,    52,    67,    -1,    67,    57,    67,
-      -1,    67,    55,    67,    -1,    67,    56,    67,    -1,    67,
-      53,    67,    -1,    67,    54,    67,    -1,    67,    51,    67,
-      -1,    67,    50,    67,    -1,    67,    45,    67,    -1,    67,
-      44,    67,    -1,    67,    47,    67,    -1,    67,    46,    67,
-      -1,    67,    49,    67,    -1,    67,    48,    67,    -1,    67,
-      43,    67,    -1,    67,    42,    67,    -1,    67,    41,    67,
-      -1,    67,    26,    67,    -1,    67,    27,    67,    -1,    67,
-      39,    67,    -1,    67,    34,    67,    -1,     3,    -1,     9,
-      -1,     4,    -1,    72,    -1,    33,    -1,    10,    60,    73,
-      61,    -1,     6,    -1,     5,    -1,    81,    -1,    74,    -1,
-      78,    -1,    78,    75,    -1,    55,    -1,    55,    75,    -1,
-      43,    -1,    43,    75,    -1,    76,    -1,    60,    75,    61,
-      -1,    60,    11,    39,     3,    61,    -1,    55,     3,    -1,
-      76,    77,    -1,    77,    -1,    60,    61,    -1,    60,    79,
-      61,    -1,     8,    -1,    13,    -1,    14,    -1,    32,    -1,
-      17,    -1,    18,    -1,    16,    -1,    15,    -1,    19,    -1,
-      20,    -1,    21,    -1,    22,    -1,    23,    -1,    24,    -1,
-      25,    -1,    29,    31,    -1,    30,    31,    -1,    29,    22,
-      -1,    30,    22,    -1,    73,    -1,    79,    37,    73,    -1,
-       7,    -1,     7,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   205,   205,   206,   209,   215,   220,   224,   228,   232,
-     236,   240,   244,   254,   253,   264,   268,   272,   275,   279,
-     283,   289,   295,   301,   307,   313,   317,   325,   331,   339,
-     343,   347,   351,   355,   359,   363,   367,   371,   375,   379,
-     383,   387,   391,   395,   399,   403,   407,   412,   416,   420,
-     426,   433,   444,   451,   454,   457,   468,   475,   483,   515,
-     518,   519,   570,   572,   574,   576,   578,   581,   583,   585,
-     587,   589,   593,   595,   600,   602,   604,   606,   608,   610,
-     612,   614,   616,   618,   620,   622,   624,   626,   628,   630,
-     632,   634,   636,   641,   646,   653,   657
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 yyrline[] =
+{
+       0,   209,   209,   210,   213,   217,   222,   226,   230,   234,
+     238,   242,   246,   251,   250,   292,   294,   304,   303,   314,
+     345,   364,   367,   371,   375,   379,   385,   395,   404,   413,
+     424,   436,   448,   460,   472,   476,   486,   493,   500,   510,
+     522,   526,   530,   534,   538,   542,   546,   550,   554,   558,
+     562,   566,   570,   574,   578,   582,   586,   590,   595,   599,
+     603,   612,   619,   629,   638,   641,   645,   654,   658,   665,
+     673,   676,   677,   728,   730,   732,   734,   736,   739,   741,
+     743,   745,   747,   751,   753,   758,   760,   762,   764,   766,
+     768,   770,   772,   774,   776,   778,   780,   782,   784,   786,
+     788,   790,   792,   794,   799,   804,   811,   815
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* 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_LITERAL",
-  "BOOLEAN_LITERAL", "NAME", "TYPENAME", "NAME_OR_INT", "SIZEOF", "KIND",
-  "ERROR", "INT_KEYWORD", "INT_S2_KEYWORD", "LOGICAL_S1_KEYWORD",
-  "LOGICAL_S2_KEYWORD", "LOGICAL_S8_KEYWORD", "LOGICAL_KEYWORD",
-  "REAL_KEYWORD", "REAL_S8_KEYWORD", "REAL_S16_KEYWORD", "COMPLEX_KEYWORD",
+  "\"end of file\"", "error", "\"invalid token\"", "INT", "FLOAT",
+  "STRING_LITERAL", "BOOLEAN_LITERAL", "NAME", "TYPENAME", "COMPLETE",
+  "NAME_OR_INT", "SIZEOF", "KIND", "ERROR", "INT_KEYWORD",
+  "INT_S2_KEYWORD", "LOGICAL_S1_KEYWORD", "LOGICAL_S2_KEYWORD",
+  "LOGICAL_S8_KEYWORD", "LOGICAL_KEYWORD", "REAL_KEYWORD",
+  "REAL_S8_KEYWORD", "REAL_S16_KEYWORD", "COMPLEX_KEYWORD",
   "COMPLEX_S8_KEYWORD", "COMPLEX_S16_KEYWORD", "COMPLEX_S32_KEYWORD",
   "BOOL_AND", "BOOL_OR", "BOOL_NOT", "SINGLE", "DOUBLE", "PRECISION",
   "CHARACTER", "DOLLAR_VARIABLE", "ASSIGN_MODIFY", "UNOP_INTRINSIC",
-  "BINOP_INTRINSIC", "','", "ABOVE_COMMA", "'='", "'?'", "'|'", "'^'",
-  "'&'", "NOTEQUAL", "EQUAL", "GEQ", "LEQ", "GREATERTHAN", "LESSTHAN",
-  "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "STARSTAR", "'%'",
-  "UNARY", "'('", "')'", "'~'", "':'", "$accept", "start", "type_exp",
-  "exp", "$@1", "arglist", "subrange", "complexnum", "variable", "type",
-  "ptype", "abs_decl", "direct_abs_decl", "func_mod", "typebase",
-  "nonempty_typelist", "name", "name_not_typename", 0
+  "BINOP_INTRINSIC", "UNOP_OR_BINOP_INTRINSIC", "','", "ABOVE_COMMA",
+  "'='", "'?'", "'|'", "'^'", "'&'", "EQUAL", "NOTEQUAL", "LESSTHAN",
+  "GREATERTHAN", "LEQ", "GEQ", "LSH", "RSH", "'@'", "'+'", "'-'", "'*'",
+  "'/'", "STARSTAR", "'%'", "UNARY", "'('", "')'", "'~'", "':'", "$accept",
+  "start", "type_exp", "exp", "$@1", "one_or_two_args", "$@2", "arglist",
+  "subrange", "complexnum", "variable", "type", "ptype", "abs_decl",
+  "direct_abs_decl", "func_mod", "typebase", "nonempty_typelist", "name",
+  "name_not_typename", YY_NULLPTRPTR
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 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,    44,   292,    61,
-      63,   124,    94,    38,   293,   294,   295,   296,   297,   298,
-     299,   300,    64,    43,    45,    42,    47,   301,    37,   302,
-      40,    41,   126,    58
+     285,   286,   287,   288,   289,   290,   291,   292,   293,    44,
+     294,    61,    63,   124,    94,    38,   295,   296,   297,   298,
+     299,   300,   301,   302,    64,    43,    45,    42,    47,   303,
+      37,   304,    40,    41,   126,    58
 };
-# endif
+#endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    64,    65,    65,    66,    67,    67,    67,    67,    67,
-      67,    67,    67,    68,    67,    67,    67,    69,    69,    69,
-      69,    70,    70,    70,    70,    71,    67,    67,    67,    67,
-      67,    67,    67,    67,    67,    67,    67,    67,    67,    67,
-      67,    67,    67,    67,    67,    67,    67,    67,    67,    67,
-      67,    67,    67,    67,    67,    67,    67,    67,    72,    73,
-      74,    74,    75,    75,    75,    75,    75,    76,    76,    76,
-      76,    76,    77,    77,    78,    78,    78,    78,    78,    78,
-      78,    78,    78,    78,    78,    78,    78,    78,    78,    78,
-      78,    78,    78,    79,    79,    80,    81
-};
+#define YYPACT_NINF (-61)
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     1,     3,     2,     2,     2,     2,
-       2,     2,     4,     0,     5,     4,     6,     0,     1,     1,
-       3,     3,     2,     2,     1,     3,     3,     4,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       1,     1,     1,     1,     1,     4,     1,     1,     1,     1,
-       1,     2,     1,     2,     1,     2,     1,     3,     5,     2,
-       2,     1,     2,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     2,     1,     3,     1,     1
-};
-
-/* 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,    50,    52,    57,    56,    96,    74,    51,     0,     0,
-      75,    76,    81,    80,    78,    79,    82,    83,    84,    85,
-      86,    87,    88,     0,     0,     0,    77,    54,     0,     0,
-       0,     0,     0,     0,     0,     0,     3,     2,    53,     4,
-      59,    60,    58,     0,    11,     0,     9,    91,    89,    92,
-      90,     0,     0,     7,     8,     6,     0,     0,     0,    10,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    13,    64,    62,     0,    61,    66,    71,
-       0,     0,     0,     0,     0,     5,    26,     0,    46,    47,
-      49,    48,    45,    44,    43,    38,    37,    40,    39,    42,
-      41,    36,    35,    29,    33,    34,    31,    32,    30,    95,
-      28,    17,    65,    69,    63,     0,    72,    93,     0,     0,
-       0,    70,    55,    12,    15,     0,    25,    27,    24,    18,
-       0,    19,     0,    67,     0,    73,     0,    23,    22,     0,
-      14,     0,    94,    16,    21,    20,    68
-};
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,    35,    36,    56,   121,   140,   141,    57,    38,   127,
-      40,    87,    88,    89,    41,   129,   120,    42
-};
+#define YYTABLE_NINF (-1)
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -59
+#define yytable_value_is_error(Yyn) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     147,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   182,   -58,
-     -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,
-     -59,   -59,   -59,   217,    11,    16,   -59,   -59,   -54,   -53,
-     217,   217,   217,   147,   217,    22,   -59,   515,   -59,   -59,
-     -59,   -16,   -59,   147,   -25,   217,   -25,   -59,   -59,   -59,
-     -59,   217,   217,   -25,   -25,   -25,   336,   -24,   -21,   -25,
-     -59,   217,   217,   217,   217,   217,   217,   217,   217,   217,
-     217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
-     217,   217,    36,   -59,   -16,    -2,   278,   -59,   -11,   -59,
-      -1,   372,   408,   480,   217,   -59,   -59,   217,   591,   548,
-     515,   515,   610,   628,   645,   660,   660,    48,    48,    48,
-      48,    71,    71,   262,   139,   139,    35,    35,    35,   -59,
-     -59,    79,   -59,   -59,   -59,    20,   -59,   -59,    26,   -32,
-      -4,   -59,   252,   -59,   -59,   217,   515,   -25,   217,   301,
-     -13,   -59,    47,   -59,   599,   -59,   444,   515,   217,   217,
-     -59,    30,   -59,   -59,   515,   515,   -59
+     245,   -61,   -61,   -61,   -61,   -61,   -61,   -61,   281,   -60,
+     -61,   -61,   -61,   -61,   -61,   -61,   -61,   -61,   -61,   -61,
+     -61,   -61,   -61,   317,    13,    17,   -61,   -61,   -55,   -38,
+     -35,   317,   317,   317,   245,   317,    37,   -61,   731,   -61,
+     -61,   -61,   -23,   -61,   245,   -15,   317,   -15,   -61,   -61,
+     -61,   -61,   317,   317,   -61,   -15,   -15,   -15,   511,   -13,
+     -12,   -15,   -61,   317,   317,   317,   317,   317,   317,   317,
+     317,   317,   317,   317,   317,   317,   317,   317,   317,   317,
+     317,   317,   317,   317,    47,   -61,   -23,    -2,   380,   -61,
+      -3,   -61,    -6,   548,   585,   659,   317,   317,   -61,   -61,
+     317,   809,   765,   731,   731,   828,   846,   863,   878,   878,
+      32,    32,    32,    32,    72,    72,    46,    62,    62,   -18,
+     -18,   -18,   -61,   -61,    52,   106,   -61,   -61,   -61,    21,
+     -61,   -61,    30,   -34,    -5,   -61,   329,   -61,   -61,   317,
+     695,    35,   731,   -15,   -61,   172,   403,   -33,   -61,    92,
+     -61,   818,   -61,   622,   317,   -61,   317,   439,   182,   106,
+     -61,    36,   -61,   -61,   731,   731,   317,   317,   475,   403,
+     -61,   -61,   731,   731,   317,   731
+};
+
+  /* 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_int8 yydefact[] =
+{
+       0,    61,    63,    68,    67,   107,    85,    62,     0,     0,
+      86,    87,    92,    91,    89,    90,    93,    94,    95,    96,
+      97,    98,    99,     0,     0,     0,    88,    65,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     3,     2,    64,
+       4,    70,    71,    69,     0,    11,     0,     9,   102,   100,
+     103,   101,     0,     0,    13,     7,     8,     6,     0,     0,
+       0,    10,     1,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    17,    75,    73,     0,    72,
+      77,    82,     0,     0,     0,     0,     0,     0,     5,    35,
+       0,    57,    58,    60,    59,    56,    55,    54,    48,    49,
+      52,    53,    50,    51,    46,    47,    40,    44,    45,    42,
+      43,    41,   106,    39,    37,    21,    76,    80,    74,     0,
+      83,   104,     0,     0,     0,    81,    66,    12,    19,     0,
+      15,     0,    34,    36,    38,    29,    22,     0,    23,     0,
+      78,     0,    84,     0,     0,    14,     0,    28,    27,     0,
+      18,     0,   105,    20,    16,    33,     0,     0,    26,    24,
+      25,    79,    32,    31,     0,    30
 };
 
-/* YYPGOTO[NTERM-NUM].  */
+  /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -59,   -59,   -59,     0,   -59,   -59,   -59,   -59,   -59,     3,
-     -59,   -30,   -59,     8,   -59,   -59,   -59,   -59
+     -61,   -61,   -61,     0,   -61,   -61,   -61,   -61,   -52,   -61,
+     -61,     4,   -61,    60,   -61,    24,   -61,   -61,   -61,   -61
+};
+
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,    36,    37,    58,    96,   141,   125,   147,   148,    59,
+      39,   131,    41,    89,    90,    91,    42,   133,   124,    43
 };
 
-/* 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_uint8 yytable[] =
 {
-      37,   123,    45,    39,     6,   144,    51,    52,    44,    10,
+      38,   127,    46,     6,    40,   151,   159,    52,    45,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    86,    47,    53,    24,    25,    54,    26,   152,
+     160,    55,    56,    57,    87,    61,    48,    62,    60,    88,
+      50,    83,    84,    86,    85,    49,    93,    85,    92,    51,
+      99,   100,    94,    95,   122,    87,   123,   136,   130,   134,
+      88,   144,   149,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,   150,    85,   161,   140,   142,   155,   171,
+     143,    79,    80,    81,    82,    83,    84,   170,    85,     1,
+       2,     3,     4,     5,   135,     0,     7,     8,     9,    81,
+      82,    83,    84,     0,    85,   146,    78,    79,    80,    81,
+      82,    83,    84,     0,    85,    23,   143,     0,     0,   153,
+      27,     0,    28,    29,    30,   157,   126,   128,   132,     0,
+       0,    31,     0,     0,   164,   162,   165,     0,   168,   169,
+       0,     0,    32,    33,     0,     0,   172,   173,    34,     0,
+      35,   145,     0,     0,   175,     1,     2,     3,     4,     5,
+       0,     0,     7,     8,     9,     1,     2,     3,     4,     5,
+       0,     0,     7,     8,     9,     0,     0,     0,     0,     0,
+       0,    23,     0,     0,     0,     0,    27,     0,    28,    29,
+      30,    23,     0,     0,     0,     0,    27,    31,    28,    29,
+      30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
+       0,     0,     0,     0,    34,     0,    35,   156,    32,    33,
+       0,     0,     0,     0,    34,     0,    35,   167,     1,     2,
+       3,     4,     5,     6,     0,     7,     8,     9,     0,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    60,    46,   149,    24,    25,    84,    26,   145,
-      53,    54,    55,    47,    59,    83,    58,    96,    49,    85,
-      97,    84,    48,   119,    86,    91,    90,    50,   150,   130,
-     151,    92,    93,    85,   122,   124,   128,   126,    86,   142,
-     132,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,     1,     2,     3,     4,     5,   143,     7,     8,
-       9,   156,    81,    82,   136,    83,   131,   137,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    23,    83,     0,
-       0,     0,    27,     0,    28,    29,     0,     0,     0,     0,
-       0,   139,    30,    76,    77,    78,    79,    80,    81,    82,
-       0,    83,   137,    31,    32,   146,     0,     0,   147,    33,
-       0,    34,   138,     0,     0,     0,     0,   152,   154,   155,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,     0,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,    23,    24,    25,     0,    26,
-      27,     0,    28,    29,     0,     1,     2,     3,     4,     5,
-      30,     7,     8,     9,    79,    80,    81,    82,     0,    83,
-       0,    31,    32,     0,     0,     0,     0,    33,     0,    34,
-      23,     0,     0,     0,     0,    27,     0,    28,    29,     0,
-       1,     2,     3,     4,     5,    30,     7,     8,     9,     0,
-       0,     0,     0,     0,     0,     0,    31,    32,     0,     0,
-       0,     0,    43,     0,    34,    23,     0,     0,     0,     0,
-      27,     0,    28,    29,     0,     1,     2,     3,     4,     5,
-      30,     7,     8,     9,     0,     0,     0,     0,     0,     0,
-       0,    31,    32,     0,     0,     0,     0,    33,     0,    34,
-      23,     0,     0,     0,     0,    27,     6,    28,    29,   125,
-       0,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,     0,     0,     0,    24,    25,     0,
-      26,     0,    33,     0,    34,    77,    78,    79,    80,    81,
-      82,    84,    83,     0,     0,     0,     0,    61,    62,     0,
-       0,     0,     0,    85,     0,    63,     0,     0,    86,   126,
-      64,     0,    65,    66,    67,    68,    69,    70,    71,    72,
+      21,    22,     0,     0,    23,    24,    25,     0,    26,    27,
+       0,    28,    29,    30,     1,     2,     3,     4,     5,     0,
+      31,     7,     8,     9,     0,     0,     0,     0,     0,     0,
+       0,    32,    33,     0,     0,     0,     0,    34,     0,    35,
+      23,     0,     0,     0,     0,    27,     0,    28,    29,    30,
+       1,     2,     3,     4,     5,     0,    31,     7,     8,     9,
+       0,     0,     1,     2,     3,     4,     5,    32,    33,     7,
+       8,     9,     0,    44,     0,    35,    23,     0,     0,     0,
+       0,    27,     0,    28,    29,    30,     0,     0,    23,     0,
+       0,     0,    31,    27,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,    32,    33,     0,     0,     0,     0,    34,
+       0,    35,     0,     0,     0,     0,     0,     0,     6,     0,
+       0,    34,   129,    35,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+      24,    25,     0,    26,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    86,     0,     0,     0,     0,
+      63,    64,     0,     0,     0,     0,     0,    87,    65,     0,
+       0,     0,    88,   130,    66,     0,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,     0,    85,    63,    64,   158,     0,
+       0,     0,     0,     0,    65,     0,     0,     0,     0,     0,
+      66,     0,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+       0,    85,    63,    64,   166,     0,     0,     0,     0,     0,
+      65,     0,     0,     0,     0,     0,    66,     0,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,     0,    85,    63,    64,
+     174,     0,     0,     0,     0,     0,    65,     0,     0,     0,
+      97,     0,    66,     0,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-       0,    83,    61,    62,   148,     0,     0,     0,     0,     0,
-      63,     0,     0,    94,     0,    64,     0,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,     0,    83,    95,    61,    62,
-       0,     0,     0,     0,     0,     0,    63,     0,     0,     0,
-       0,    64,     0,    65,    66,    67,    68,    69,    70,    71,
+      83,    84,     0,    85,    98,    63,    64,     0,     0,     0,
+       0,     0,     0,    65,     0,     0,     0,     0,     0,    66,
+       0,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,     0,
+      85,   137,    63,    64,     0,     0,     0,     0,     0,     0,
+      65,     0,     0,     0,     0,     0,    66,     0,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,     0,    85,   138,    63,
+      64,     0,     0,     0,     0,     0,     0,    65,     0,     0,
+       0,     0,     0,    66,     0,    67,    68,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,     0,    83,   133,    61,    62,     0,     0,     0,     0,
-       0,     0,    63,     0,     0,     0,     0,    64,     0,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,     0,    83,   134,
-      61,    62,     0,     0,     0,     0,     0,     0,    63,     0,
-       0,     0,     0,    64,     0,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,     0,    83,   153,    61,    62,     0,     0,
-       0,     0,     0,     0,    63,     0,     0,   135,     0,    64,
-       0,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,     0,
-      83,    61,    62,     0,     0,     0,     0,     0,     0,    63,
-       0,     0,     0,     0,    64,     0,    65,    66,    67,    68,
+      82,    83,    84,     0,    85,   163,    63,    64,     0,     0,
+       0,     0,     0,     0,    65,     0,     0,     0,   139,     0,
+      66,     0,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+       0,    85,    63,    64,     0,     0,     0,     0,     0,     0,
+      65,     0,     0,     0,   154,     0,    66,     0,    67,    68,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    61,    83,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,     6,    83,     0,
-       0,     0,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,    24,    25,
-       0,    26,    65,    66,    67,    68,    69,    70,    71,    72,
+      79,    80,    81,    82,    83,    84,     0,    85,    63,    64,
+       0,     0,     0,     0,     0,     0,    65,     0,     0,     0,
+       0,     0,    66,     0,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-       0,    83,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,     0,
-      83,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,     0,    83,    68,
+      83,    84,    63,    85,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    67,    68,
       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,     0,    83,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,     0,
-      83
+      79,    80,    81,    82,    83,    84,     6,    85,     0,     0,
+       0,     0,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,     0,     0,     0,    24,    25,
+       0,    26,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+       0,    85,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,     0,
+      85,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,     0,    85,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,     0,    85,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,     0,
+      85
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     3,    60,     0,     8,    37,    60,    60,     8,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,    23,    37,    29,    30,    43,    32,    61,
-      30,    31,    32,    22,    34,    60,    33,    61,    22,    55,
-      61,    43,    31,     7,    60,    45,    43,    31,    61,    60,
-       3,    51,    52,    55,    84,    85,    86,    61,    60,    39,
-      61,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+       0,     3,    62,     8,     0,    39,    39,    62,     8,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    45,    23,    62,    30,    31,    62,    33,    63,
+      63,    31,    32,    33,    57,    35,    23,     0,    34,    62,
+      23,    59,    60,    45,    62,    32,    46,    62,    44,    32,
+      63,    63,    52,    53,     7,    57,     9,    63,    63,    62,
+      62,     9,    41,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,     3,     4,     5,     6,     7,    61,     9,    10,
-      11,    61,    57,    58,    94,    60,    88,    97,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    28,    60,    -1,
-      -1,    -1,    33,    -1,    35,    36,    -1,    -1,    -1,    -1,
-      -1,   121,    43,    52,    53,    54,    55,    56,    57,    58,
-      -1,    60,   132,    54,    55,   135,    -1,    -1,   138,    60,
-      -1,    62,    63,    -1,    -1,    -1,    -1,   144,   148,   149,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    -1,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    -1,    -1,    28,    29,    30,    -1,    32,
-      33,    -1,    35,    36,    -1,     3,     4,     5,     6,     7,
-      43,     9,    10,    11,    55,    56,    57,    58,    -1,    60,
-      -1,    54,    55,    -1,    -1,    -1,    -1,    60,    -1,    62,
-      28,    -1,    -1,    -1,    -1,    33,    -1,    35,    36,    -1,
-       3,     4,     5,     6,     7,    43,     9,    10,    11,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    -1,    -1,
-      -1,    -1,    60,    -1,    62,    28,    -1,    -1,    -1,    -1,
-      33,    -1,    35,    36,    -1,     3,     4,     5,     6,     7,
-      43,     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    55,    -1,    -1,    -1,    -1,    60,    -1,    62,
-      28,    -1,    -1,    -1,    -1,    33,     8,    35,    36,    11,
-      -1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    -1,    -1,    -1,    29,    30,    -1,
-      32,    -1,    60,    -1,    62,    53,    54,    55,    56,    57,
-      58,    43,    60,    -1,    -1,    -1,    -1,    26,    27,    -1,
-      -1,    -1,    -1,    55,    -1,    34,    -1,    -1,    60,    61,
-      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+      80,    81,    82,    83,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    63,    62,     3,    96,    97,    63,    63,
+     100,    55,    56,    57,    58,    59,    60,   159,    62,     3,
+       4,     5,     6,     7,    90,    -1,    10,    11,    12,    57,
+      58,    59,    60,    -1,    62,   125,    54,    55,    56,    57,
+      58,    59,    60,    -1,    62,    29,   136,    -1,    -1,   139,
+      34,    -1,    36,    37,    38,   145,    86,    87,    88,    -1,
+      -1,    45,    -1,    -1,   154,   151,   156,    -1,   158,   159,
+      -1,    -1,    56,    57,    -1,    -1,   166,   167,    62,    -1,
+      64,    65,    -1,    -1,   174,     3,     4,     5,     6,     7,
+      -1,    -1,    10,    11,    12,     3,     4,     5,     6,     7,
+      -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
+      -1,    29,    -1,    -1,    -1,    -1,    34,    -1,    36,    37,
+      38,    29,    -1,    -1,    -1,    -1,    34,    45,    36,    37,
+      38,    -1,    -1,    -1,    -1,    -1,    -1,    45,    56,    57,
+      -1,    -1,    -1,    -1,    62,    -1,    64,    65,    56,    57,
+      -1,    -1,    -1,    -1,    62,    -1,    64,    65,     3,     4,
+       5,     6,     7,     8,    -1,    10,    11,    12,    -1,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    29,    30,    31,    -1,    33,    34,
+      -1,    36,    37,    38,     3,     4,     5,     6,     7,    -1,
+      45,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    56,    57,    -1,    -1,    -1,    -1,    62,    -1,    64,
+      29,    -1,    -1,    -1,    -1,    34,    -1,    36,    37,    38,
+       3,     4,     5,     6,     7,    -1,    45,    10,    11,    12,
+      -1,    -1,     3,     4,     5,     6,     7,    56,    57,    10,
+      11,    12,    -1,    62,    -1,    64,    29,    -1,    -1,    -1,
+      -1,    34,    -1,    36,    37,    38,    -1,    -1,    29,    -1,
+      -1,    -1,    45,    34,    -1,    36,    37,    38,    -1,    -1,
+      -1,    -1,    -1,    56,    57,    -1,    -1,    -1,    -1,    62,
+      -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,     8,    -1,
+      -1,    62,    12,    64,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    -1,
+      30,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
+      27,    28,    -1,    -1,    -1,    -1,    -1,    57,    35,    -1,
+      -1,    -1,    62,    63,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    -1,    62,    27,    28,    65,    -1,
+      -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,    -1,    -1,
+      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      -1,    62,    27,    28,    65,    -1,    -1,    -1,    -1,    -1,
+      35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    -1,    62,    27,    28,
+      65,    -1,    -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,
+      39,    -1,    41,    -1,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      -1,    60,    26,    27,    63,    -1,    -1,    -1,    -1,    -1,
-      34,    -1,    -1,    37,    -1,    39,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    -1,    60,    61,    26,    27,
-      -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    41,    42,    43,    44,    45,    46,    47,
+      59,    60,    -1,    62,    63,    27,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    35,    -1,    -1,    -1,    -1,    -1,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
+      62,    63,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
+      35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    -1,    62,    63,    27,
+      28,    -1,    -1,    -1,    -1,    -1,    -1,    35,    -1,    -1,
+      -1,    -1,    -1,    41,    -1,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    -1,    60,    61,    26,    27,    -1,    -1,    -1,    -1,
-      -1,    -1,    34,    -1,    -1,    -1,    -1,    39,    -1,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    -1,    60,    61,
-      26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,
-      -1,    -1,    -1,    39,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    -1,    60,    61,    26,    27,    -1,    -1,
-      -1,    -1,    -1,    -1,    34,    -1,    -1,    37,    -1,    39,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    -1,
-      60,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    34,
-      -1,    -1,    -1,    -1,    39,    -1,    41,    42,    43,    44,
+      58,    59,    60,    -1,    62,    63,    27,    28,    -1,    -1,
+      -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,    39,    -1,
+      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      -1,    62,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
+      35,    -1,    -1,    -1,    39,    -1,    41,    -1,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    26,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,     8,    60,    -1,
-      -1,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    -1,    -1,    -1,    29,    30,
-      -1,    32,    41,    42,    43,    44,    45,    46,    47,    48,
+      55,    56,    57,    58,    59,    60,    -1,    62,    27,    28,
+      -1,    -1,    -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      -1,    60,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    -1,
-      60,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    -1,    60,    44,
+      59,    60,    27,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    -1,    60,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    -1,
-      60
-};
-
-/* 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,    11,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    28,    29,    30,    32,    33,    35,    36,
-      43,    54,    55,    60,    62,    65,    66,    67,    72,    73,
-      74,    78,    81,    60,    67,    60,    67,    22,    31,    22,
-      31,    60,    60,    67,    67,    67,    67,    71,    73,    67,
-       0,    26,    27,    34,    39,    41,    42,    43,    44,    45,
+      55,    56,    57,    58,    59,    60,     8,    62,    -1,    -1,
+      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
+      -1,    33,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      -1,    62,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
+      62,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    -1,    62,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    -1,    62,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
+      62
+};
+
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_int8 yystos[] =
+{
+       0,     3,     4,     5,     6,     7,     8,    10,    11,    12,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    29,    30,    31,    33,    34,    36,    37,
+      38,    45,    56,    57,    62,    64,    67,    68,    69,    76,
+      77,    78,    82,    85,    62,    69,    62,    69,    23,    32,
+      23,    32,    62,    62,    62,    69,    69,    69,    69,    75,
+      77,    69,     0,    27,    28,    35,    41,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    60,    43,    55,    60,    75,    76,    77,
-      73,    67,    67,    67,    37,    61,    61,    61,    67,    67,
-      67,    67,    67,    67,    67,    67,    67,    67,    67,    67,
-      67,    67,    67,    67,    67,    67,    67,    67,    67,     7,
-      80,    68,    75,     3,    75,    11,    61,    73,    75,    79,
-      60,    77,    61,    61,    61,    37,    67,    67,    63,    67,
-      69,    70,    39,    61,    37,    61,    67,    67,    63,    37,
-      61,     3,    73,    61,    67,    67,    61
-};
-
-#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
-
-
-/* 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.  */
+      56,    57,    58,    59,    60,    62,    45,    57,    62,    79,
+      80,    81,    77,    69,    69,    69,    70,    39,    63,    63,
+      63,    69,    69,    69,    69,    69,    69,    69,    69,    69,
+      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
+      69,    69,     7,     9,    84,    72,    79,     3,    79,    12,
+      63,    77,    79,    83,    62,    81,    63,    63,    63,    39,
+      69,    71,    69,    69,     9,    65,    69,    73,    74,    41,
+      63,    39,    63,    69,    39,    63,    65,    69,    65,    39,
+      63,     3,    77,    63,    69,    69,    65,    65,    69,    69,
+      74,    63,    69,    69,    65,    69
+};
+
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_int8 yyr1[] =
+{
+       0,    66,    67,    67,    68,    69,    69,    69,    69,    69,
+      69,    69,    69,    70,    69,    71,    71,    72,    69,    69,
+      69,    73,    73,    73,    73,    73,    74,    74,    74,    74,
+      74,    74,    74,    74,    75,    69,    69,    69,    69,    69,
+      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
+      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
+      69,    69,    69,    69,    69,    69,    69,    69,    69,    76,
+      77,    78,    78,    79,    79,    79,    79,    79,    80,    80,
+      80,    80,    80,    81,    81,    82,    82,    82,    82,    82,
+      82,    82,    82,    82,    82,    82,    82,    82,    82,    82,
+      82,    82,    82,    82,    83,    83,    84,    85
+};
 
-#define YYFAIL		goto yyerrlab
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_int8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     3,     2,     2,     2,     2,
+       2,     2,     4,     0,     5,     1,     3,     0,     5,     4,
+       6,     0,     1,     1,     3,     3,     3,     2,     2,     1,
+       5,     4,     4,     3,     3,     3,     4,     3,     4,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     1,     1,     1,     1,     1,     4,     1,     1,     1,
+       1,     1,     2,     1,     2,     1,     2,     1,     3,     5,
+       2,     2,     1,     2,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     1,     3,     1,     1
+};
 
-#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								\
-    {								\
-      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
+enum { YYENOMEM = -2 };
 
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
 
-/* 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
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#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 (0)
+
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1038,80 +1213,65 @@ 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))
-
-
-/*--------------------------------.
-| 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 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
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Kind, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#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 *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1119,16 +1279,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
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1139,63 +1291,56 @@ 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 (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule)
 {
+  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);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             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,
+                       YY_ACCESSING_SYMBOL (+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.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1210,342 +1355,82 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   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++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  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;
 
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
 
-  return yyd - 1;
-}
-#  endif
-# endif
 
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      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;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# 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)
-{
-  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;
-    }
-}
-#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,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  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;
-
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
 
-/*-------------------------.
-| 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)
+
+/*----------.
+| yyparse.  |
+`----------*/
+
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
-    int yystate;
+    yy_state_fast_t 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.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -1553,133 +1438,147 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
   yystacksize = YYINITDEPTH;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  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;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined 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);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+
+        /* 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 * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* 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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, 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 */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
   /* 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.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      YYDPRINTF ((stderr, "Reading a token\n"));
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -1694,8 +1593,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;
     }
@@ -1707,13 +1606,13 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -1728,14 +1627,14 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   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
@@ -1748,458 +1647,587 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 4:
-
-/* Line 1455 of yacc.c  */
-#line 210 "f-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); }
+  case 4:
+#line 214 "f-exp.y"
+                        { pstate->push_new<type_operation> ((yyvsp[0].tval)); }
+#line 1655 "f-exp.c.tmp"
     break;
 
   case 5:
-
-/* Line 1455 of yacc.c  */
-#line 216 "f-exp.y"
-    { }
+#line 218 "f-exp.y"
+                        { }
+#line 1661 "f-exp.c.tmp"
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
-#line 221 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 223 "f-exp.y"
+                        { pstate->wrap<unop_ind_operation> (); }
+#line 1667 "f-exp.c.tmp"
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
-#line 225 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 227 "f-exp.y"
+                        { pstate->wrap<unop_addr_operation> (); }
+#line 1673 "f-exp.c.tmp"
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 229 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 231 "f-exp.y"
+                        { pstate->wrap<unary_neg_operation> (); }
+#line 1679 "f-exp.c.tmp"
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 233 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 235 "f-exp.y"
+                        { pstate->wrap<unary_logical_not_operation> (); }
+#line 1685 "f-exp.c.tmp"
     break;
 
   case 10:
-
-/* Line 1455 of yacc.c  */
-#line 237 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+#line 239 "f-exp.y"
+                        { pstate->wrap<unary_complement_operation> (); }
+#line 1691 "f-exp.c.tmp"
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 241 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+#line 243 "f-exp.y"
+                        { pstate->wrap<unop_sizeof_operation> (); }
+#line 1697 "f-exp.c.tmp"
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 245 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_FORTRAN_KIND); }
+#line 247 "f-exp.y"
+                        { pstate->wrap<fortran_kind_operation> (); }
+#line 1703 "f-exp.c.tmp"
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 254 "f-exp.y"
-    { pstate->start_arglist (); }
+#line 251 "f-exp.y"
+                        { pstate->start_arglist (); }
+#line 1709 "f-exp.c.tmp"
     break;
 
   case 14:
-
-/* Line 1455 of yacc.c  */
-#line 256 "f-exp.y"
-    { write_exp_elt_opcode (pstate,
-						OP_F77_UNDETERMINED_ARGLIST);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate,
-					      OP_F77_UNDETERMINED_ARGLIST); }
+#line 253 "f-exp.y"
+                        {
+			  int n = pstate->end_arglist ();
+			  gdb_assert (n == 1 || n == 2);
+			  if ((yyvsp[-4].opcode) == FORTRAN_ASSOCIATED)
+			    {
+			      if (n == 1)
+				pstate->wrap<fortran_associated_1arg> ();
+			      else
+				pstate->wrap2<fortran_associated_2arg> ();
+			    }
+			  else if ((yyvsp[-4].opcode) == FORTRAN_ARRAY_SIZE)
+			    {
+			      if (n == 1)
+				pstate->wrap<fortran_array_size_1arg> ();
+			      else
+				pstate->wrap2<fortran_array_size_2arg> ();
+			    }
+			  else
+			    {
+			      std::vector<operation_up> args
+				= pstate->pop_vector (n);
+			      gdb_assert ((yyvsp[-4].opcode) == FORTRAN_LBOUND
+					  || (yyvsp[-4].opcode) == FORTRAN_UBOUND);
+			      operation_up op;
+			      if (n == 1)
+				op.reset
+				  (new fortran_bound_1arg ((yyvsp[-4].opcode),
+							   std::move (args[0])));
+			      else
+				op.reset
+				  (new fortran_bound_2arg ((yyvsp[-4].opcode),
+							   std::move (args[0]),
+							   std::move (args[1])));
+			      pstate->push (std::move (op));
+			    }
+			}
+#line 1750 "f-exp.c.tmp"
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 265 "f-exp.y"
-    { write_exp_elt_opcode (pstate, (yyvsp[(1) - (4)].opcode)); }
+#line 293 "f-exp.y"
+                        { pstate->arglist_len = 1; }
+#line 1756 "f-exp.c.tmp"
     break;
 
   case 16:
+#line 295 "f-exp.y"
+                        { pstate->arglist_len = 2; }
+#line 1762 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 269 "f-exp.y"
-    { write_exp_elt_opcode (pstate, (yyvsp[(1) - (6)].opcode)); }
+  case 17:
+#line 304 "f-exp.y"
+                        { pstate->start_arglist (); }
+#line 1768 "f-exp.c.tmp"
     break;
 
   case 18:
-
-/* Line 1455 of yacc.c  */
-#line 276 "f-exp.y"
-    { pstate->arglist_len = 1; }
+#line 306 "f-exp.y"
+                        {
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<fortran_undetermined>
+			    (pstate->pop (), std::move (args));
+			}
+#line 1779 "f-exp.c.tmp"
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 280 "f-exp.y"
-    { pstate->arglist_len = 1; }
+#line 315 "f-exp.y"
+                        {
+			  switch ((yyvsp[-3].opcode))
+			    {
+			    case UNOP_ABS:
+			      pstate->wrap<fortran_abs_operation> ();
+			      break;
+			    case UNOP_FORTRAN_FLOOR:
+			      pstate->wrap<fortran_floor_operation> ();
+			      break;
+			    case UNOP_FORTRAN_CEILING:
+			      pstate->wrap<fortran_ceil_operation> ();
+			      break;
+			    case UNOP_FORTRAN_ALLOCATED:
+			      pstate->wrap<fortran_allocated_operation> ();
+			      break;
+			    case UNOP_FORTRAN_RANK:
+			      pstate->wrap<fortran_rank_operation> ();
+			      break;
+			    case UNOP_FORTRAN_SHAPE:
+			      pstate->wrap<fortran_array_shape_operation> ();
+			      break;
+			    case UNOP_FORTRAN_LOC:
+			      pstate->wrap<fortran_loc_operation> ();
+			      break;
+			    default:
+			      gdb_assert_not_reached ("unhandled intrinsic");
+			    }
+			}
+#line 1812 "f-exp.c.tmp"
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 284 "f-exp.y"
-    { pstate->arglist_len++; }
-    break;
-
-  case 21:
-
-/* Line 1455 of yacc.c  */
-#line 290 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_RANGE); 
-			  write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+#line 346 "f-exp.y"
+                        {
+			  switch ((yyvsp[-5].opcode))
+			    {
+			    case BINOP_MOD:
+			      pstate->wrap2<fortran_mod_operation> ();
+			      break;
+			    case BINOP_FORTRAN_MODULO:
+			      pstate->wrap2<fortran_modulo_operation> ();
+			      break;
+			    case BINOP_FORTRAN_CMPLX:
+			      pstate->wrap2<fortran_cmplx_operation> ();
+			      break;
+			    default:
+			      gdb_assert_not_reached ("unhandled intrinsic");
+			    }
+			}
+#line 1833 "f-exp.c.tmp"
     break;
 
   case 22:
-
-/* Line 1455 of yacc.c  */
-#line 296 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_RANGE);
-			  write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+#line 368 "f-exp.y"
+                        { pstate->arglist_len = 1; }
+#line 1839 "f-exp.c.tmp"
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 302 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_RANGE);
-			  write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+#line 372 "f-exp.y"
+                        { pstate->arglist_len = 1; }
+#line 1845 "f-exp.c.tmp"
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
-#line 308 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_RANGE);
-			  write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+#line 376 "f-exp.y"
+                        { pstate->arglist_len++; }
+#line 1851 "f-exp.c.tmp"
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
-#line 314 "f-exp.y"
-    { }
+#line 380 "f-exp.y"
+                        { pstate->arglist_len++; }
+#line 1857 "f-exp.c.tmp"
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 318 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_COMPLEX);
-			  write_exp_elt_type (pstate,
-					      parse_f_type (pstate)
-					      ->builtin_complex_s16);
-			  write_exp_elt_opcode (pstate, OP_COMPLEX); }
+#line 386 "f-exp.y"
+                        {
+			  operation_up high = pstate->pop ();
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_STANDARD, std::move (low),
+			     std::move (high), operation_up ());
+			}
+#line 1869 "f-exp.c.tmp"
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 326 "f-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST);
-			  write_exp_elt_type (pstate, (yyvsp[(2) - (4)].tval));
-			  write_exp_elt_opcode (pstate, UNOP_CAST); }
+#line 396 "f-exp.y"
+                        {
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_HIGH_BOUND_DEFAULT, std::move (low),
+			     operation_up (), operation_up ());
+			}
+#line 1880 "f-exp.c.tmp"
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 332 "f-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 405 "f-exp.y"
+                        {
+			  operation_up high = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT, operation_up (),
+			     std::move (high), operation_up ());
+			}
+#line 1891 "f-exp.c.tmp"
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 340 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+#line 414 "f-exp.y"
+                        {
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT
+			     | RANGE_HIGH_BOUND_DEFAULT,
+			     operation_up (), operation_up (),
+			     operation_up ());
+			}
+#line 1903 "f-exp.c.tmp"
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 344 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EXP); }
+#line 425 "f-exp.y"
+                        {
+			  operation_up stride = pstate->pop ();
+			  operation_up high = pstate->pop ();
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_STANDARD | RANGE_HAS_STRIDE,
+			     std::move (low), std::move (high),
+			     std::move (stride));
+			}
+#line 1917 "f-exp.c.tmp"
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 348 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 437 "f-exp.y"
+                        {
+			  operation_up stride = pstate->pop ();
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_HIGH_BOUND_DEFAULT
+			     | RANGE_HAS_STRIDE,
+			     std::move (low), operation_up (),
+			     std::move (stride));
+			}
+#line 1931 "f-exp.c.tmp"
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 352 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 449 "f-exp.y"
+                        {
+			  operation_up stride = pstate->pop ();
+			  operation_up high = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT
+			     | RANGE_HAS_STRIDE,
+			     operation_up (), std::move (high),
+			     std::move (stride));
+			}
+#line 1945 "f-exp.c.tmp"
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 356 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 461 "f-exp.y"
+                        {
+			  operation_up stride = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT
+			     | RANGE_HIGH_BOUND_DEFAULT
+			     | RANGE_HAS_STRIDE,
+			     operation_up (), operation_up (),
+			     std::move (stride));
+			}
+#line 1959 "f-exp.c.tmp"
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
-#line 360 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 473 "f-exp.y"
+                        { }
+#line 1965 "f-exp.c.tmp"
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 364 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LSH); }
+#line 477 "f-exp.y"
+                        {
+			  operation_up rhs = pstate->pop ();
+			  operation_up lhs = pstate->pop ();
+			  pstate->push_new<complex_operation>
+			    (std::move (lhs), std::move (rhs),
+			     parse_f_type (pstate)->builtin_complex_s16);
+			}
+#line 1977 "f-exp.c.tmp"
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 368 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_RSH); }
+#line 487 "f-exp.y"
+                        {
+			  pstate->push_new<unop_cast_operation>
+			    (pstate->pop (), (yyvsp[-2].tval));
+			}
+#line 1986 "f-exp.c.tmp"
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 372 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 494 "f-exp.y"
+                        {
+			  pstate->push_new<fortran_structop_operation>
+			    (pstate->pop (), copy_name ((yyvsp[0].sval)));
+			}
+#line 1995 "f-exp.c.tmp"
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 376 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 501 "f-exp.y"
+                        {
+			  structop_base_operation *op
+			    = new fortran_structop_operation (pstate->pop (),
+							      copy_name ((yyvsp[-1].sval)));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2007 "f-exp.c.tmp"
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 380 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 511 "f-exp.y"
+                        {
+			  structop_base_operation *op
+			    = new fortran_structop_operation (pstate->pop (),
+							      "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 2019 "f-exp.c.tmp"
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 384 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 523 "f-exp.y"
+                        { pstate->wrap2<repeat_operation> (); }
+#line 2025 "f-exp.c.tmp"
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
-#line 388 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 527 "f-exp.y"
+                        { pstate->wrap2<exp_operation> (); }
+#line 2031 "f-exp.c.tmp"
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 392 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 531 "f-exp.y"
+                        { pstate->wrap2<mul_operation> (); }
+#line 2037 "f-exp.c.tmp"
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 396 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 535 "f-exp.y"
+                        { pstate->wrap2<div_operation> (); }
+#line 2043 "f-exp.c.tmp"
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 400 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 539 "f-exp.y"
+                        { pstate->wrap2<add_operation> (); }
+#line 2049 "f-exp.c.tmp"
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 404 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 543 "f-exp.y"
+                        { pstate->wrap2<sub_operation> (); }
+#line 2055 "f-exp.c.tmp"
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 408 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 547 "f-exp.y"
+                        { pstate->wrap2<lsh_operation> (); }
+#line 2061 "f-exp.c.tmp"
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
-#line 413 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 551 "f-exp.y"
+                        { pstate->wrap2<rsh_operation> (); }
+#line 2067 "f-exp.c.tmp"
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 417 "f-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 555 "f-exp.y"
+                        { pstate->wrap2<equal_operation> (); }
+#line 2073 "f-exp.c.tmp"
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 421 "f-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 559 "f-exp.y"
+                        { pstate->wrap2<notequal_operation> (); }
+#line 2079 "f-exp.c.tmp"
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 427 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (1)].typed_val).type);
-			  write_exp_elt_longcst (pstate, (LONGEST) ((yyvsp[(1) - (1)].typed_val).val));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+#line 563 "f-exp.y"
+                        { pstate->wrap2<leq_operation> (); }
+#line 2085 "f-exp.c.tmp"
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 434 "f-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.type);
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST)val.typed_val.val);
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+#line 567 "f-exp.y"
+                        { pstate->wrap2<geq_operation> (); }
+#line 2091 "f-exp.c.tmp"
     break;
 
   case 52:
+#line 571 "f-exp.y"
+                        { pstate->wrap2<less_operation> (); }
+#line 2097 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 445 "f-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); }
+  case 53:
+#line 575 "f-exp.y"
+                        { pstate->wrap2<gtr_operation> (); }
+#line 2103 "f-exp.c.tmp"
     break;
 
-  case 55:
+  case 54:
+#line 579 "f-exp.y"
+                        { pstate->wrap2<bitwise_and_operation> (); }
+#line 2109 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 458 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate,
-					      parse_f_type (pstate)
-					      ->builtin_integer);
-			  (yyvsp[(3) - (4)].tval) = check_typedef ((yyvsp[(3) - (4)].tval));
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST) TYPE_LENGTH ((yyvsp[(3) - (4)].tval)));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+  case 55:
+#line 583 "f-exp.y"
+                        { pstate->wrap2<bitwise_xor_operation> (); }
+#line 2115 "f-exp.c.tmp"
     break;
 
   case 56:
+#line 587 "f-exp.y"
+                        { pstate->wrap2<bitwise_ior_operation> (); }
+#line 2121 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 469 "f-exp.y"
-    { write_exp_elt_opcode (pstate, OP_BOOL);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(1) - (1)].lval));
-			  write_exp_elt_opcode (pstate, OP_BOOL);
+  case 57:
+#line 591 "f-exp.y"
+                        { pstate->wrap2<logical_and_operation> (); }
+#line 2127 "f-exp.c.tmp"
+    break;
+
+  case 58:
+#line 596 "f-exp.y"
+                        { pstate->wrap2<logical_or_operation> (); }
+#line 2133 "f-exp.c.tmp"
+    break;
+
+  case 59:
+#line 600 "f-exp.y"
+                        { pstate->wrap2<assign_operation> (); }
+#line 2139 "f-exp.c.tmp"
+    break;
+
+  case 60:
+#line 604 "f-exp.y"
+                        {
+			  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 2150 "f-exp.c.tmp"
     break;
 
-  case 57:
+  case 61:
+#line 613 "f-exp.y"
+                        {
+			  pstate->push_new<long_const_operation>
+			    ((yyvsp[0].typed_val).type, (yyvsp[0].typed_val).val);
+			}
+#line 2159 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 476 "f-exp.y"
-    {
-			  write_exp_elt_opcode (pstate, OP_STRING);
-			  write_exp_string (pstate, (yyvsp[(1) - (1)].sval));
-			  write_exp_elt_opcode (pstate, OP_STRING);
+  case 62:
+#line 620 "f-exp.y"
+                        { 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.type,
+			     val.typed_val.val);
 			}
+#line 2171 "f-exp.c.tmp"
     break;
 
-  case 58:
+  case 63:
+#line 630 "f-exp.y"
+                        {
+			  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 2182 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 484 "f-exp.y"
-    { struct block_symbol sym = (yyvsp[(1) - (1)].ssym).sym;
+  case 65:
+#line 642 "f-exp.y"
+                        { pstate->push_dollar ((yyvsp[0].sval)); }
+#line 2188 "f-exp.c.tmp"
+    break;
 
-			  if (sym.symbol)
-			    {
-			      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);
-			      break;
-			    }
-			  else
-			    {
-			      struct bound_minimal_symbol msymbol;
-			      std::string arg = copy_name ((yyvsp[(1) - (1)].ssym).stoken);
+  case 66:
+#line 646 "f-exp.y"
+                        {
+			  (yyvsp[-1].tval) = check_typedef ((yyvsp[-1].tval));
+			  pstate->push_new<long_const_operation>
+			    (parse_f_type (pstate)->builtin_integer,
+			     TYPE_LENGTH ((yyvsp[-1].tval)));
+			}
+#line 2199 "f-exp.c.tmp"
+    break;
 
-			      msymbol =
-				lookup_bound_minimal_symbol (arg.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."),
-				       arg.c_str ());
-			    }
+  case 67:
+#line 655 "f-exp.y"
+                        { pstate->push_new<bool_operation> ((yyvsp[0].lval)); }
+#line 2205 "f-exp.c.tmp"
+    break;
+
+  case 68:
+#line 659 "f-exp.y"
+                        {
+			  pstate->push_new<string_operation>
+			    (copy_name ((yyvsp[0].sval)));
 			}
+#line 2214 "f-exp.c.tmp"
     break;
 
-  case 61:
+  case 69:
+#line 666 "f-exp.y"
+                        { struct block_symbol sym = (yyvsp[0].ssym).sym;
+			  std::string name = copy_name ((yyvsp[0].ssym).stoken);
+			  pstate->push_symbol (name.c_str (), sym);
+			}
+#line 2223 "f-exp.c.tmp"
+    break;
 
-/* Line 1455 of yacc.c  */
-#line 520 "f-exp.y"
-    {
+  case 72:
+#line 678 "f-exp.y"
+                {
 		  /* This is where the interesting stuff happens.  */
 		  int done = 0;
 		  int array_size;
-		  struct type *follow_type = (yyvsp[(1) - (2)].tval);
+		  struct type *follow_type = (yyvsp[-1].tval);
 		  struct type *range_type;
 		  
 		  while (!done)
@@ -2243,338 +2271,281 @@ yyreduce:
 		      }
 		  (yyval.tval) = follow_type;
 		}
+#line 2276 "f-exp.c.tmp"
     break;
 
-  case 62:
-
-/* Line 1455 of yacc.c  */
-#line 571 "f-exp.y"
-    { type_stack->push (tp_pointer); (yyval.voidval) = 0; }
+  case 73:
+#line 729 "f-exp.y"
+                        { type_stack->push (tp_pointer); (yyval.voidval) = 0; }
+#line 2282 "f-exp.c.tmp"
     break;
 
-  case 63:
-
-/* Line 1455 of yacc.c  */
-#line 573 "f-exp.y"
-    { type_stack->push (tp_pointer); (yyval.voidval) = (yyvsp[(2) - (2)].voidval); }
+  case 74:
+#line 731 "f-exp.y"
+                        { type_stack->push (tp_pointer); (yyval.voidval) = (yyvsp[0].voidval); }
+#line 2288 "f-exp.c.tmp"
     break;
 
-  case 64:
-
-/* Line 1455 of yacc.c  */
-#line 575 "f-exp.y"
-    { type_stack->push (tp_reference); (yyval.voidval) = 0; }
+  case 75:
+#line 733 "f-exp.y"
+                        { type_stack->push (tp_reference); (yyval.voidval) = 0; }
+#line 2294 "f-exp.c.tmp"
     break;
 
-  case 65:
-
-/* Line 1455 of yacc.c  */
-#line 577 "f-exp.y"
-    { type_stack->push (tp_reference); (yyval.voidval) = (yyvsp[(2) - (2)].voidval); }
+  case 76:
+#line 735 "f-exp.y"
+                        { type_stack->push (tp_reference); (yyval.voidval) = (yyvsp[0].voidval); }
+#line 2300 "f-exp.c.tmp"
     break;
 
-  case 67:
-
-/* Line 1455 of yacc.c  */
-#line 582 "f-exp.y"
-    { (yyval.voidval) = (yyvsp[(2) - (3)].voidval); }
+  case 78:
+#line 740 "f-exp.y"
+                        { (yyval.voidval) = (yyvsp[-1].voidval); }
+#line 2306 "f-exp.c.tmp"
     break;
 
-  case 68:
-
-/* Line 1455 of yacc.c  */
-#line 584 "f-exp.y"
-    { push_kind_type ((yyvsp[(4) - (5)].typed_val).val, (yyvsp[(4) - (5)].typed_val).type); }
+  case 79:
+#line 742 "f-exp.y"
+                        { push_kind_type ((yyvsp[-1].typed_val).val, (yyvsp[-1].typed_val).type); }
+#line 2312 "f-exp.c.tmp"
     break;
 
-  case 69:
-
-/* Line 1455 of yacc.c  */
-#line 586 "f-exp.y"
-    { push_kind_type ((yyvsp[(2) - (2)].typed_val).val, (yyvsp[(2) - (2)].typed_val).type); }
+  case 80:
+#line 744 "f-exp.y"
+                        { push_kind_type ((yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); }
+#line 2318 "f-exp.c.tmp"
     break;
 
-  case 70:
-
-/* Line 1455 of yacc.c  */
-#line 588 "f-exp.y"
-    { type_stack->push (tp_function); }
+  case 81:
+#line 746 "f-exp.y"
+                        { type_stack->push (tp_function); }
+#line 2324 "f-exp.c.tmp"
     break;
 
-  case 71:
-
-/* Line 1455 of yacc.c  */
-#line 590 "f-exp.y"
-    { type_stack->push (tp_function); }
+  case 82:
+#line 748 "f-exp.y"
+                        { type_stack->push (tp_function); }
+#line 2330 "f-exp.c.tmp"
     break;
 
-  case 72:
-
-/* Line 1455 of yacc.c  */
-#line 594 "f-exp.y"
-    { (yyval.voidval) = 0; }
+  case 83:
+#line 752 "f-exp.y"
+                        { (yyval.voidval) = 0; }
+#line 2336 "f-exp.c.tmp"
     break;
 
-  case 73:
-
-/* Line 1455 of yacc.c  */
-#line 596 "f-exp.y"
-    { xfree ((yyvsp[(2) - (3)].tvec)); (yyval.voidval) = 0; }
+  case 84:
+#line 754 "f-exp.y"
+                        { xfree ((yyvsp[-1].tvec)); (yyval.voidval) = 0; }
+#line 2342 "f-exp.c.tmp"
     break;
 
-  case 74:
-
-/* Line 1455 of yacc.c  */
-#line 601 "f-exp.y"
-    { (yyval.tval) = (yyvsp[(1) - (1)].tsym).type; }
+  case 85:
+#line 759 "f-exp.y"
+                        { (yyval.tval) = (yyvsp[0].tsym).type; }
+#line 2348 "f-exp.c.tmp"
     break;
 
-  case 75:
-
-/* Line 1455 of yacc.c  */
-#line 603 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_integer; }
+  case 86:
+#line 761 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_integer; }
+#line 2354 "f-exp.c.tmp"
     break;
 
-  case 76:
-
-/* Line 1455 of yacc.c  */
-#line 605 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_integer_s2; }
+  case 87:
+#line 763 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_integer_s2; }
+#line 2360 "f-exp.c.tmp"
     break;
 
-  case 77:
-
-/* Line 1455 of yacc.c  */
-#line 607 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_character; }
+  case 88:
+#line 765 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_character; }
+#line 2366 "f-exp.c.tmp"
     break;
 
-  case 78:
-
-/* Line 1455 of yacc.c  */
-#line 609 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s8; }
+  case 89:
+#line 767 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s8; }
+#line 2372 "f-exp.c.tmp"
     break;
 
-  case 79:
-
-/* Line 1455 of yacc.c  */
-#line 611 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_logical; }
+  case 90:
+#line 769 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_logical; }
+#line 2378 "f-exp.c.tmp"
     break;
 
-  case 80:
-
-/* Line 1455 of yacc.c  */
-#line 613 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s2; }
+  case 91:
+#line 771 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s2; }
+#line 2384 "f-exp.c.tmp"
     break;
 
-  case 81:
-
-/* Line 1455 of yacc.c  */
-#line 615 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s1; }
+  case 92:
+#line 773 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s1; }
+#line 2390 "f-exp.c.tmp"
     break;
 
-  case 82:
-
-/* Line 1455 of yacc.c  */
-#line 617 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_real; }
+  case 93:
+#line 775 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_real; }
+#line 2396 "f-exp.c.tmp"
     break;
 
-  case 83:
-
-/* Line 1455 of yacc.c  */
-#line 619 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8; }
+  case 94:
+#line 777 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8; }
+#line 2402 "f-exp.c.tmp"
     break;
 
-  case 84:
-
-/* Line 1455 of yacc.c  */
-#line 621 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_real_s16; }
+  case 95:
+#line 779 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_real_s16; }
+#line 2408 "f-exp.c.tmp"
     break;
 
-  case 85:
-
-/* Line 1455 of yacc.c  */
-#line 623 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; }
+  case 96:
+#line 781 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; }
+#line 2414 "f-exp.c.tmp"
     break;
 
-  case 86:
-
-/* Line 1455 of yacc.c  */
-#line 625 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; }
+  case 97:
+#line 783 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; }
+#line 2420 "f-exp.c.tmp"
     break;
 
-  case 87:
-
-/* Line 1455 of yacc.c  */
-#line 627 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16; }
+  case 98:
+#line 785 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16; }
+#line 2426 "f-exp.c.tmp"
     break;
 
-  case 88:
-
-/* Line 1455 of yacc.c  */
-#line 629 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s32; }
+  case 99:
+#line 787 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s32; }
+#line 2432 "f-exp.c.tmp"
     break;
 
-  case 89:
-
-/* Line 1455 of yacc.c  */
-#line 631 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_real;}
+  case 100:
+#line 789 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_real;}
+#line 2438 "f-exp.c.tmp"
     break;
 
-  case 90:
-
-/* Line 1455 of yacc.c  */
-#line 633 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8;}
+  case 101:
+#line 791 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8;}
+#line 2444 "f-exp.c.tmp"
     break;
 
-  case 91:
-
-/* Line 1455 of yacc.c  */
-#line 635 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8;}
+  case 102:
+#line 793 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8;}
+#line 2450 "f-exp.c.tmp"
     break;
 
-  case 92:
-
-/* Line 1455 of yacc.c  */
-#line 637 "f-exp.y"
-    { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16;}
+  case 103:
+#line 795 "f-exp.y"
+                        { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16;}
+#line 2456 "f-exp.c.tmp"
     break;
 
-  case 93:
-
-/* Line 1455 of yacc.c  */
-#line 642 "f-exp.y"
-    { (yyval.tvec) = (struct type **) xmalloc (sizeof (struct type *) * 2);
+  case 104:
+#line 800 "f-exp.y"
+                { (yyval.tvec) = (struct type **) xmalloc (sizeof (struct type *) * 2);
 		  (yyval.ivec)[0] = 1;	/* Number of types in vector */
-		  (yyval.tvec)[1] = (yyvsp[(1) - (1)].tval);
+		  (yyval.tvec)[1] = (yyvsp[0].tval);
 		}
+#line 2465 "f-exp.c.tmp"
     break;
 
-  case 94:
-
-/* Line 1455 of yacc.c  */
-#line 647 "f-exp.y"
-    { int len = sizeof (struct type *) * (++((yyvsp[(1) - (3)].ivec)[0]) + 1);
-		  (yyval.tvec) = (struct type **) xrealloc ((char *) (yyvsp[(1) - (3)].tvec), len);
-		  (yyval.tvec)[(yyval.ivec)[0]] = (yyvsp[(3) - (3)].tval);
+  case 105:
+#line 805 "f-exp.y"
+                { int len = sizeof (struct type *) * (++((yyvsp[-2].ivec)[0]) + 1);
+		  (yyval.tvec) = (struct type **) xrealloc ((char *) (yyvsp[-2].tvec), len);
+		  (yyval.tvec)[(yyval.ivec)[0]] = (yyvsp[0].tval);
 		}
+#line 2474 "f-exp.c.tmp"
     break;
 
-  case 95:
-
-/* Line 1455 of yacc.c  */
-#line 654 "f-exp.y"
-    {  (yyval.sval) = (yyvsp[(1) - (1)].ssym).stoken; }
+  case 106:
+#line 812 "f-exp.y"
+                {  (yyval.sval) = (yyvsp[0].ssym).stoken; }
+#line 2480 "f-exp.c.tmp"
     break;
 
 
+#line 2484 "f-exp.c.tmp"
 
-/* Line 1455 of yacc.c  */
-#line 2490 "f-exp.c.tmp"
       default: break;
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  /* 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 ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   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 ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
-#else
-      {
-	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;
-	  }
-      }
-#endif
     }
 
-
-
   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
@@ -2586,14 +2557,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  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;
@@ -2606,39 +2575,42 @@ 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.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   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 += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+            {
+              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);
+                  YY_ACCESSING_SYMBOL (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.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -2651,6 +2623,7 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -2658,7 +2631,8 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2668,36 +2642,38 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 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);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
 
+  return yyresult;
+}
 
-/* Line 1675 of yacc.c  */
-#line 667 "f-exp.y"
+#line 825 "f-exp.y"
 
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2861,7 +2837,7 @@ push_kind_type (LONGEST val, struct type
 {
   int ival;
 
-  if (TYPE_UNSIGNED (type))
+  if (type->is_unsigned ())
     {
       ULONGEST uval = static_cast <ULONGEST> (val);
       if (uval > INT_MAX)
@@ -2955,19 +2931,29 @@ struct token
   bool case_sensitive;
 };
 
-static const struct token dot_ops[] =
+/* List of Fortran operators.  */
+
+static const struct token fortran_operators[] =
 {
-  { ".and.", BOOL_AND, BINOP_END, false },
-  { ".or.", BOOL_OR, BINOP_END, false },
-  { ".not.", BOOL_NOT, BINOP_END, false },
-  { ".eq.", EQUAL, BINOP_END, false },
-  { ".eqv.", EQUAL, BINOP_END, false },
-  { ".neqv.", NOTEQUAL, BINOP_END, false },
-  { ".ne.", NOTEQUAL, BINOP_END, false },
-  { ".le.", LEQ, BINOP_END, false },
-  { ".ge.", GEQ, BINOP_END, false },
-  { ".gt.", GREATERTHAN, BINOP_END, false },
-  { ".lt.", LESSTHAN, BINOP_END, false },
+  { ".and.", BOOL_AND, OP_NULL, false },
+  { ".or.", BOOL_OR, OP_NULL, false },
+  { ".not.", BOOL_NOT, OP_NULL, false },
+  { ".eq.", EQUAL, OP_NULL, false },
+  { ".eqv.", EQUAL, OP_NULL, false },
+  { ".neqv.", NOTEQUAL, OP_NULL, false },
+  { ".xor.", NOTEQUAL, OP_NULL, false },
+  { "==", EQUAL, OP_NULL, false },
+  { ".ne.", NOTEQUAL, OP_NULL, false },
+  { "/=", NOTEQUAL, OP_NULL, false },
+  { ".le.", LEQ, OP_NULL, false },
+  { "<=", LEQ, OP_NULL, false },
+  { ".ge.", GEQ, OP_NULL, false },
+  { ">=", GEQ, OP_NULL, false },
+  { ".gt.", GREATERTHAN, OP_NULL, false },
+  { ">", GREATERTHAN, OP_NULL, false },
+  { ".lt.", LESSTHAN, OP_NULL, false },
+  { "<", LESSTHAN, OP_NULL, false },
+  { "**", STARSTAR, BINOP_EXP, false },
 };
 
 /* Holds the Fortran representation of a boolean, and the integer value we
@@ -2991,33 +2977,41 @@ static const struct f77_boolean_val bool
 static const struct token f77_keywords[] =
 {
   /* Historically these have always been lowercase only in GDB.  */
-  { "complex_16", COMPLEX_S16_KEYWORD, BINOP_END, true },
-  { "complex_32", COMPLEX_S32_KEYWORD, BINOP_END, true },
-  { "character", CHARACTER, BINOP_END, true },
-  { "integer_2", INT_S2_KEYWORD, BINOP_END, true },
-  { "logical_1", LOGICAL_S1_KEYWORD, BINOP_END, true },
-  { "logical_2", LOGICAL_S2_KEYWORD, BINOP_END, true },
-  { "logical_8", LOGICAL_S8_KEYWORD, BINOP_END, true },
-  { "complex_8", COMPLEX_S8_KEYWORD, BINOP_END, true },
-  { "integer", INT_KEYWORD, BINOP_END, true },
-  { "logical", LOGICAL_KEYWORD, BINOP_END, true },
-  { "real_16", REAL_S16_KEYWORD, BINOP_END, true },
-  { "complex", COMPLEX_KEYWORD, BINOP_END, true },
-  { "sizeof", SIZEOF, BINOP_END, true },
-  { "real_8", REAL_S8_KEYWORD, BINOP_END, true },
-  { "real", REAL_KEYWORD, BINOP_END, true },
-  { "single", SINGLE, BINOP_END, true },
-  { "double", DOUBLE, BINOP_END, true },
-  { "precision", PRECISION, BINOP_END, true },
+  { "complex_16", COMPLEX_S16_KEYWORD, OP_NULL, true },
+  { "complex_32", COMPLEX_S32_KEYWORD, OP_NULL, true },
+  { "character", CHARACTER, OP_NULL, true },
+  { "integer_2", INT_S2_KEYWORD, OP_NULL, true },
+  { "logical_1", LOGICAL_S1_KEYWORD, OP_NULL, true },
+  { "logical_2", LOGICAL_S2_KEYWORD, OP_NULL, true },
+  { "logical_8", LOGICAL_S8_KEYWORD, OP_NULL, true },
+  { "complex_8", COMPLEX_S8_KEYWORD, OP_NULL, true },
+  { "integer", INT_KEYWORD, OP_NULL, true },
+  { "logical", LOGICAL_KEYWORD, OP_NULL, true },
+  { "real_16", REAL_S16_KEYWORD, OP_NULL, true },
+  { "complex", COMPLEX_KEYWORD, OP_NULL, true },
+  { "sizeof", SIZEOF, OP_NULL, true },
+  { "real_8", REAL_S8_KEYWORD, OP_NULL, true },
+  { "real", REAL_KEYWORD, OP_NULL, true },
+  { "single", SINGLE, OP_NULL, true },
+  { "double", DOUBLE, OP_NULL, true },
+  { "precision", PRECISION, OP_NULL, true },
   /* The following correspond to actual functions in Fortran and are case
      insensitive.  */
-  { "kind", KIND, BINOP_END, false },
+  { "kind", KIND, OP_NULL, false },
   { "abs", UNOP_INTRINSIC, UNOP_ABS, false },
   { "mod", BINOP_INTRINSIC, BINOP_MOD, false },
   { "floor", UNOP_INTRINSIC, UNOP_FORTRAN_FLOOR, false },
   { "ceiling", UNOP_INTRINSIC, UNOP_FORTRAN_CEILING, false },
   { "modulo", BINOP_INTRINSIC, BINOP_FORTRAN_MODULO, false },
   { "cmplx", BINOP_INTRINSIC, BINOP_FORTRAN_CMPLX, false },
+  { "lbound", UNOP_OR_BINOP_INTRINSIC, FORTRAN_LBOUND, false },
+  { "ubound", UNOP_OR_BINOP_INTRINSIC, FORTRAN_UBOUND, false },
+  { "allocated", UNOP_INTRINSIC, UNOP_FORTRAN_ALLOCATED, false },
+  { "associated", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ASSOCIATED, false },
+  { "rank", UNOP_INTRINSIC, UNOP_FORTRAN_RANK, false },
+  { "size", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ARRAY_SIZE, false },
+  { "shape", UNOP_INTRINSIC, UNOP_FORTRAN_SHAPE, false },
+  { "loc", UNOP_INTRINSIC, UNOP_FORTRAN_LOC, false },
 };
 
 /* Implementation of a dynamically expandable buffer for processing input
@@ -3094,6 +3088,15 @@ match_string_literal (void)
     }
 }
 
+/* This is set if a NAME token appeared at the very end of the input
+   string, with no whitespace separating the name from the EOF.  This
+   is used only when parsing to do field name completion.  */
+static bool saw_name_at_eof;
+
+/* This is set if the previously-returned token was a structure
+   operator '%'.  */
+static bool last_was_structop;
+
 /* Read one token, getting characters through lexptr.  */
 
 static int
@@ -3103,7 +3106,10 @@ yylex (void)
   int namelen;
   unsigned int token;
   const char *tokstart;
-  
+  bool saw_structop = last_was_structop;
+
+  last_was_structop = false;
+
  retry:
  
   pstate->prev_lexptr = pstate->lexptr;
@@ -3127,29 +3133,27 @@ yylex (void)
 	}
     }
 
-  /* See if it is a special .foo. operator.  */
-  for (int i = 0; i < ARRAY_SIZE (dot_ops); i++)
-    if (strncasecmp (tokstart, dot_ops[i].oper,
-		     strlen (dot_ops[i].oper)) == 0)
+  /* See if it is a Fortran operator.  */
+  for (int i = 0; i < ARRAY_SIZE (fortran_operators); i++)
+    if (strncasecmp (tokstart, fortran_operators[i].oper,
+		     strlen (fortran_operators[i].oper)) == 0)
       {
-	gdb_assert (!dot_ops[i].case_sensitive);
-	pstate->lexptr += strlen (dot_ops[i].oper);
-	yylval.opcode = dot_ops[i].opcode;
-	return dot_ops[i].token;
+	gdb_assert (!fortran_operators[i].case_sensitive);
+	pstate->lexptr += strlen (fortran_operators[i].oper);
+	yylval.opcode = fortran_operators[i].opcode;
+	return fortran_operators[i].token;
       }
 
-  /* See if it is an exponentiation operator.  */
-
-  if (strncmp (tokstart, "**", 2) == 0)
-    {
-      pstate->lexptr += 2;
-      yylval.opcode = BINOP_EXP;
-      return STARSTAR;
-    }
-
   switch (c = *tokstart)
     {
     case 0:
+      if (saw_name_at_eof)
+	{
+	  saw_name_at_eof = false;
+	  return COMPLETE;
+	}
+      else if (pstate->parse_completion && saw_structop)
+	return COMPLETE;
       return 0;
       
     case ' ':
@@ -3199,7 +3203,7 @@ yylex (void)
     case '8':
     case '9':
       {
-        /* It's a number.  */
+	/* It's a number.  */
 	int got_dot = 0, got_e = 0, got_d = 0, toktype;
 	const char *p = tokstart;
 	int hex = input_radix > 10;
@@ -3240,8 +3244,8 @@ yylex (void)
 	toktype = parse_number (pstate, tokstart, p - tokstart,
 				got_dot|got_e|got_d,
 				&yylval);
-        if (toktype == ERROR)
-          {
+	if (toktype == ERROR)
+	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 	    
 	    memcpy (err_copy, tokstart, p - tokstart);
@@ -3251,12 +3255,14 @@ yylex (void)
 	pstate->lexptr = p;
 	return toktype;
       }
-      
+
+    case '%':
+      last_was_structop = true;
+      /* Fall through.  */
     case '+':
     case '-':
     case '*':
     case '/':
-    case '%':
     case '|':
     case '&':
     case '^':
@@ -3313,11 +3319,8 @@ yylex (void)
   yylval.sval.length = namelen;
   
   if (*tokstart == '$')
-    {
-      write_dollar_variable (pstate, yylval.sval);
-      return DOLLAR_VARIABLE;
-    }
-  
+    return DOLLAR_VARIABLE;
+
   /* Use token-type TYPENAME for symbols that happen to be defined
      currently as names of types; NAME for other symbols.
      The caller is not constrained to care about the distinction.  */
@@ -3368,7 +3371,10 @@ yylex (void)
 	    return NAME_OR_INT;
 	  }
       }
-    
+
+    if (pstate->parse_completion && *pstate->lexptr == '\0')
+      saw_name_at_eof = true;
+
     /* Any other kind of symbol */
     yylval.ssym.sym = result;
     yylval.ssym.is_a_field_of_this = false;
@@ -3377,7 +3383,7 @@ yylex (void)
 }
 
 int
-f_parse (struct parser_state *par_state)
+f_language::parser (struct parser_state *par_state) const
 {
   /* Setting up the parser state.  */
   scoped_restore pstate_restore = make_scoped_restore (&pstate);
@@ -3385,13 +3391,18 @@ f_parse (struct parser_state *par_state)
 							parser_debug);
   gdb_assert (par_state != NULL);
   pstate = par_state;
+  last_was_structop = false;
+  saw_name_at_eof = false;
   paren_depth = 0;
 
   struct type_stack stack;
   scoped_restore restore_type_stack = make_scoped_restore (&type_stack,
 							   &stack);
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    pstate->set_operation (pstate->pop ());
+  return result;
 }
 
 static void
@@ -3402,4 +3413,3 @@ yyerror (const char *msg)
 
   error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
 }
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-exp.h ./gdb/f-exp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-exp.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/f-exp.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,294 @@
+/* Definitions for Fortran expressions
+
+   Copyright (C) 2020, 2021 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 FORTRAN_EXP_H
+#define FORTRAN_EXP_H
+
+#include "expop.h"
+
+extern struct value *eval_op_f_abs (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside,
+				    enum exp_opcode opcode,
+				    struct value *arg1);
+extern struct value *eval_op_f_mod (struct type *expect_type,
+				    struct expression *exp,
+				    enum noside noside,
+				    enum exp_opcode opcode,
+				    struct value *arg1, struct value *arg2);
+extern struct value *eval_op_f_ceil (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode opcode,
+				     struct value *arg1);
+extern struct value *eval_op_f_floor (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside,
+				      enum exp_opcode opcode,
+				      struct value *arg1);
+extern struct value *eval_op_f_modulo (struct type *expect_type,
+				       struct expression *exp,
+				       enum noside noside,
+				       enum exp_opcode opcode,
+				       struct value *arg1, struct value *arg2);
+extern struct value *eval_op_f_cmplx (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside,
+				      enum exp_opcode opcode,
+				      struct value *arg1, struct value *arg2);
+extern struct value *eval_op_f_kind (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode opcode,
+				     struct value *arg1);
+extern struct value *eval_op_f_associated (struct type *expect_type,
+					   struct expression *exp,
+					   enum noside noside,
+					   enum exp_opcode opcode,
+					   struct value *arg1);
+extern struct value *eval_op_f_associated (struct type *expect_type,
+					   struct expression *exp,
+					   enum noside noside,
+					   enum exp_opcode opcode,
+					   struct value *arg1,
+					   struct value *arg2);
+extern struct value * eval_op_f_allocated (struct type *expect_type,
+					   struct expression *exp,
+					   enum noside noside,
+					   enum exp_opcode op,
+					   struct value *arg1);
+extern struct value * eval_op_f_loc (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode op,
+				     struct value *arg1);
+
+/* Implement the evaluation of UNOP_FORTRAN_RANK.  EXPECTED_TYPE, EXP, and
+   NOSIDE are as for expression::evaluate (see expression.h).  OP will
+   always be UNOP_FORTRAN_RANK, and ARG1 is the argument being passed to
+   the expression.   */
+
+extern struct value *eval_op_f_rank (struct type *expect_type,
+				     struct expression *exp,
+				     enum noside noside,
+				     enum exp_opcode op,
+				     struct value *arg1);
+
+/* Implement expression evaluation for Fortran's SIZE keyword. For
+   EXPECT_TYPE, EXP, and NOSIDE see expression::evaluate (in
+   expression.h).  OP will always for FORTRAN_ARRAY_SIZE.  ARG1 is the
+   value passed to SIZE if it is only passed a single argument.  For the
+   two argument form see the overload of this function below.  */
+
+extern struct value *eval_op_f_array_size (struct type *expect_type,
+					   struct expression *exp,
+					   enum noside noside,
+					   enum exp_opcode opcode,
+					   struct value *arg1);
+
+/* An overload of EVAL_OP_F_ARRAY_SIZE above, this version takes two
+   arguments, representing the two values passed to Fortran's SIZE
+   keyword.  */
+
+extern struct value *eval_op_f_array_size (struct type *expect_type,
+					   struct expression *exp,
+					   enum noside noside,
+					   enum exp_opcode opcode,
+					   struct value *arg1,
+					   struct value *arg2);
+
+/* Implement the evaluation of Fortran's SHAPE keyword.  EXPECTED_TYPE,
+   EXP, and NOSIDE are as for expression::evaluate (see expression.h).  OP
+   will always be UNOP_FORTRAN_SHAPE, and ARG1 is the argument being passed
+   to the expression.  */
+
+extern struct value *eval_op_f_array_shape (struct type *expect_type,
+					    struct expression *exp,
+					    enum noside noside,
+					    enum exp_opcode op,
+					    struct value *arg1);
+
+namespace expr
+{
+
+using fortran_abs_operation = unop_operation<UNOP_ABS, eval_op_f_abs>;
+using fortran_ceil_operation = unop_operation<UNOP_FORTRAN_CEILING,
+					      eval_op_f_ceil>;
+using fortran_floor_operation = unop_operation<UNOP_FORTRAN_FLOOR,
+					       eval_op_f_floor>;
+using fortran_kind_operation = unop_operation<UNOP_FORTRAN_KIND,
+					      eval_op_f_kind>;
+using fortran_allocated_operation = unop_operation<UNOP_FORTRAN_ALLOCATED,
+						   eval_op_f_allocated>;
+using fortran_loc_operation = unop_operation<UNOP_FORTRAN_LOC,
+						   eval_op_f_loc>;
+
+using fortran_mod_operation = binop_operation<BINOP_MOD, eval_op_f_mod>;
+using fortran_modulo_operation = binop_operation<BINOP_FORTRAN_MODULO,
+						 eval_op_f_modulo>;
+using fortran_associated_1arg = unop_operation<FORTRAN_ASSOCIATED,
+					       eval_op_f_associated>;
+using fortran_associated_2arg = binop_operation<FORTRAN_ASSOCIATED,
+						eval_op_f_associated>;
+using fortran_rank_operation = unop_operation<UNOP_FORTRAN_RANK,
+					      eval_op_f_rank>;
+using fortran_array_size_1arg = unop_operation<FORTRAN_ARRAY_SIZE,
+					       eval_op_f_array_size>;
+using fortran_array_size_2arg = binop_operation<FORTRAN_ARRAY_SIZE,
+						eval_op_f_array_size>;
+using fortran_array_shape_operation = unop_operation<UNOP_FORTRAN_SHAPE,
+						     eval_op_f_array_shape>;
+
+/* The Fortran "complex" operation.  */
+class fortran_cmplx_operation
+  : public tuple_holding_operation<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<0> (m_storage)->evaluate (nullptr, exp, noside);
+    value *arg2 = std::get<1> (m_storage)->evaluate (value_type (arg1),
+						     exp, noside);
+    return eval_op_f_cmplx (expect_type, exp, noside, BINOP_FORTRAN_CMPLX,
+			    arg1, arg2);
+  }
+
+  enum exp_opcode opcode () const override
+  { return BINOP_FORTRAN_CMPLX; }
+};
+
+/* OP_RANGE for Fortran.  */
+class fortran_range_operation
+  : public tuple_holding_operation<enum range_flag, 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
+  {
+    error (_("ranges not allowed in this context"));
+  }
+
+  range_flag get_flags () const
+  {
+    return std::get<0> (m_storage);
+  }
+
+  value *evaluate0 (struct expression *exp, enum noside noside) const
+  {
+    return std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  }
+
+  value *evaluate1 (struct expression *exp, enum noside noside) const
+  {
+    return std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+  }
+
+  value *evaluate2 (struct expression *exp, enum noside noside) const
+  {
+    return std::get<3> (m_storage)->evaluate (nullptr, exp, noside);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_RANGE; }
+};
+
+/* In F77, functions, substring ops and array subscript operations
+   cannot be disambiguated at parse time.  This operation handles
+   both, deciding which do to at evaluation time.  */
+class fortran_undetermined
+  : public tuple_holding_operation<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_F77_UNDETERMINED_ARGLIST; }
+
+private:
+
+  value *value_subarray (value *array, struct expression *exp,
+			 enum noside noside);
+};
+
+/* Single-argument form of Fortran ubound/lbound intrinsics.  */
+class fortran_bound_1arg
+  : public tuple_holding_operation<exp_opcode, 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); }
+};
+
+/* Two-argument form of Fortran ubound/lbound intrinsics.  */
+class fortran_bound_2arg
+  : public tuple_holding_operation<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); }
+};
+
+/* Implement STRUCTOP_STRUCT for Fortran.  */
+class fortran_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; }
+};
+
+} /* namespace expr */
+
+#endif /* FORTRAN_EXP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-exp.y ./gdb/f-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-exp.y	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/f-exp.y	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 
 /* YACC parser for Fortran expressions, for GDB.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    Contributed by Motorola.  Adapted from the C parser by Farooq Butt
    (fmbutt@engage.sps.mot.com).
@@ -55,6 +55,7 @@
 #include <ctype.h>
 #include <algorithm>
 #include "type-stack.h"
+#include "f-exp.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 #define parse_f_type(ps) builtin_f_type (ps->gdbarch ())
@@ -89,6 +90,7 @@ static void push_kind_type (LONGEST val,
 
 static struct type *convert_to_kind_type (struct type *basetype, int kind);
 
+using namespace expr;
 %}
 
 /* Although the yacc "value" of an expression is not used,
@@ -149,6 +151,7 @@ static int parse_number (struct parser_s
 %token <lval> BOOLEAN_LITERAL
 %token <ssym> NAME 
 %token <tsym> TYPENAME
+%token <voidval> COMPLETE
 %type <sval> name
 %type <ssym> name_not_typename
 
@@ -173,10 +176,11 @@ static int parse_number (struct parser_s
 %token SINGLE DOUBLE PRECISION
 %token <lval> CHARACTER 
 
-%token <voidval> DOLLAR_VARIABLE
+%token <sval> DOLLAR_VARIABLE
 
 %token <opcode> ASSIGN_MODIFY
 %token <opcode> UNOP_INTRINSIC BINOP_INTRINSIC
+%token <opcode> UNOP_OR_BINOP_INTRINSIC
 
 %left ','
 %left ABOVE_COMMA
@@ -207,42 +211,88 @@ start   :	exp
 	;
 
 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); }
 	;
 
 exp     :       '(' exp ')'
-        		{ }
-        ;
+			{ }
+	;
 
 /* 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	:	BOOL_NOT exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+			{ pstate->wrap<unary_logical_not_operation> (); }
 	;
 
 exp	:	'~' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+			{ pstate->wrap<unary_complement_operation> (); }
 	;
 
 exp	:	SIZEOF exp       %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
+			{ pstate->wrap<unop_sizeof_operation> (); }
 	;
 
 exp	:	KIND '(' exp ')'       %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_FORTRAN_KIND); }
+			{ pstate->wrap<fortran_kind_operation> (); }
+	;
+
+exp	:	UNOP_OR_BINOP_INTRINSIC '('
+			{ pstate->start_arglist (); }
+		one_or_two_args ')'
+			{
+			  int n = pstate->end_arglist ();
+			  gdb_assert (n == 1 || n == 2);
+			  if ($1 == FORTRAN_ASSOCIATED)
+			    {
+			      if (n == 1)
+				pstate->wrap<fortran_associated_1arg> ();
+			      else
+				pstate->wrap2<fortran_associated_2arg> ();
+			    }
+			  else if ($1 == FORTRAN_ARRAY_SIZE)
+			    {
+			      if (n == 1)
+				pstate->wrap<fortran_array_size_1arg> ();
+			      else
+				pstate->wrap2<fortran_array_size_2arg> ();
+			    }
+			  else
+			    {
+			      std::vector<operation_up> args
+				= pstate->pop_vector (n);
+			      gdb_assert ($1 == FORTRAN_LBOUND
+					  || $1 == FORTRAN_UBOUND);
+			      operation_up op;
+			      if (n == 1)
+				op.reset
+				  (new fortran_bound_1arg ($1,
+							   std::move (args[0])));
+			      else
+				op.reset
+				  (new fortran_bound_2arg ($1,
+							   std::move (args[0]),
+							   std::move (args[1])));
+			      pstate->push (std::move (op));
+			    }
+			}
+	;
+
+one_or_two_args
+	:	exp
+			{ pstate->arglist_len = 1; }
+	|	exp ',' exp
+			{ pstate->arglist_len = 2; }
 	;
 
 /* No more explicit array operators, we treat everything in F77 as 
@@ -253,20 +303,62 @@ exp	:	KIND '(' exp ')'       %prec UNARY
 exp	:	exp '(' 
 			{ pstate->start_arglist (); }
 		arglist ')'	
-			{ write_exp_elt_opcode (pstate,
-						OP_F77_UNDETERMINED_ARGLIST);
-			  write_exp_elt_longcst (pstate,
-						 pstate->end_arglist ());
-			  write_exp_elt_opcode (pstate,
-					      OP_F77_UNDETERMINED_ARGLIST); }
+			{
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<fortran_undetermined>
+			    (pstate->pop (), std::move (args));
+			}
 	;
 
 exp	:	UNOP_INTRINSIC '(' exp ')'
-			{ write_exp_elt_opcode (pstate, $1); }
+			{
+			  switch ($1)
+			    {
+			    case UNOP_ABS:
+			      pstate->wrap<fortran_abs_operation> ();
+			      break;
+			    case UNOP_FORTRAN_FLOOR:
+			      pstate->wrap<fortran_floor_operation> ();
+			      break;
+			    case UNOP_FORTRAN_CEILING:
+			      pstate->wrap<fortran_ceil_operation> ();
+			      break;
+			    case UNOP_FORTRAN_ALLOCATED:
+			      pstate->wrap<fortran_allocated_operation> ();
+			      break;
+			    case UNOP_FORTRAN_RANK:
+			      pstate->wrap<fortran_rank_operation> ();
+			      break;
+			    case UNOP_FORTRAN_SHAPE:
+			      pstate->wrap<fortran_array_shape_operation> ();
+			      break;
+			    case UNOP_FORTRAN_LOC:
+			      pstate->wrap<fortran_loc_operation> ();
+			      break;
+			    default:
+			      gdb_assert_not_reached ("unhandled intrinsic");
+			    }
+			}
 	;
 
 exp	:	BINOP_INTRINSIC '(' exp ',' exp ')'
-			{ write_exp_elt_opcode (pstate, $1); }
+			{
+			  switch ($1)
+			    {
+			    case BINOP_MOD:
+			      pstate->wrap2<fortran_mod_operation> ();
+			      break;
+			    case BINOP_FORTRAN_MODULO:
+			      pstate->wrap2<fortran_modulo_operation> ();
+			      break;
+			    case BINOP_FORTRAN_CMPLX:
+			      pstate->wrap2<fortran_cmplx_operation> ();
+			      break;
+			    default:
+			      gdb_assert_not_reached ("unhandled intrinsic");
+			    }
+			}
 	;
 
 arglist	:
@@ -284,236 +376,302 @@ arglist	:	arglist ',' exp   %prec ABOVE_
 			{ pstate->arglist_len++; }
 	;
 
+arglist	:	arglist ',' subrange   %prec ABOVE_COMMA
+			{ pstate->arglist_len++; }
+	;
+
 /* There are four sorts of subrange types in F90.  */
 
 subrange:	exp ':' exp	%prec ABOVE_COMMA
-			{ write_exp_elt_opcode (pstate, OP_RANGE); 
-			  write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+			{
+			  operation_up high = pstate->pop ();
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_STANDARD, std::move (low),
+			     std::move (high), operation_up ());
+			}
 	;
 
 subrange:	exp ':'	%prec ABOVE_COMMA
-			{ write_exp_elt_opcode (pstate, OP_RANGE);
-			  write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+			{
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_HIGH_BOUND_DEFAULT, std::move (low),
+			     operation_up (), operation_up ());
+			}
 	;
 
 subrange:	':' exp	%prec ABOVE_COMMA
-			{ write_exp_elt_opcode (pstate, OP_RANGE);
-			  write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+			{
+			  operation_up high = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT, operation_up (),
+			     std::move (high), operation_up ());
+			}
 	;
 
 subrange:	':'	%prec ABOVE_COMMA
-			{ write_exp_elt_opcode (pstate, OP_RANGE);
-			  write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT);
-			  write_exp_elt_opcode (pstate, OP_RANGE); }
+			{
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT
+			     | RANGE_HIGH_BOUND_DEFAULT,
+			     operation_up (), operation_up (),
+			     operation_up ());
+			}
+	;
+
+/* And each of the four subrange types can also have a stride.  */
+subrange:	exp ':' exp ':' exp	%prec ABOVE_COMMA
+			{
+			  operation_up stride = pstate->pop ();
+			  operation_up high = pstate->pop ();
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_STANDARD | RANGE_HAS_STRIDE,
+			     std::move (low), std::move (high),
+			     std::move (stride));
+			}
+	;
+
+subrange:	exp ':' ':' exp	%prec ABOVE_COMMA
+			{
+			  operation_up stride = pstate->pop ();
+			  operation_up low = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_HIGH_BOUND_DEFAULT
+			     | RANGE_HAS_STRIDE,
+			     std::move (low), operation_up (),
+			     std::move (stride));
+			}
+	;
+
+subrange:	':' exp ':' exp	%prec ABOVE_COMMA
+			{
+			  operation_up stride = pstate->pop ();
+			  operation_up high = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT
+			     | RANGE_HAS_STRIDE,
+			     operation_up (), std::move (high),
+			     std::move (stride));
+			}
+	;
+
+subrange:	':' ':' exp	%prec ABOVE_COMMA
+			{
+			  operation_up stride = pstate->pop ();
+			  pstate->push_new<fortran_range_operation>
+			    (RANGE_LOW_BOUND_DEFAULT
+			     | RANGE_HIGH_BOUND_DEFAULT
+			     | RANGE_HAS_STRIDE,
+			     operation_up (), operation_up (),
+			     std::move (stride));
+			}
 	;
 
 complexnum:     exp ',' exp 
-                	{ }                          
-        ;
+			{ }                          
+	;
 
 exp	:	'(' complexnum ')'
-			{ write_exp_elt_opcode (pstate, OP_COMPLEX);
-			  write_exp_elt_type (pstate,
-					      parse_f_type (pstate)
-					      ->builtin_complex_s16);
-			  write_exp_elt_opcode (pstate, OP_COMPLEX); }
+			{
+			  operation_up rhs = pstate->pop ();
+			  operation_up lhs = pstate->pop ();
+			  pstate->push_new<complex_operation>
+			    (std::move (lhs), std::move (rhs),
+			     parse_f_type (pstate)->builtin_complex_s16);
+			}
 	;
 
 exp	:	'(' type ')' exp  %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_CAST);
-			  write_exp_elt_type (pstate, $2);
-			  write_exp_elt_opcode (pstate, UNOP_CAST); }
+			{
+			  pstate->push_new<unop_cast_operation>
+			    (pstate->pop (), $2);
+			}
 	;
 
 exp     :       exp '%' name
-                        { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-                          write_exp_string (pstate, $3);
-                          write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
-        ;
+			{
+			  pstate->push_new<fortran_structop_operation>
+			    (pstate->pop (), copy_name ($3));
+			}
+	;
+
+exp     :       exp '%' name COMPLETE
+			{
+			  structop_base_operation *op
+			    = new fortran_structop_operation (pstate->pop (),
+							      copy_name ($3));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+	;
+
+exp     :       exp '%' COMPLETE
+			{
+			  structop_base_operation *op
+			    = new fortran_structop_operation (pstate->pop (),
+							      "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+	;
 
 /* Binary operators in order of decreasing precedence.  */
 
 exp	:	exp '@' exp
-			{ write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+			{ pstate->wrap2<repeat_operation> (); }
 	;
 
 exp	:	exp STARSTAR exp
-			{ write_exp_elt_opcode (pstate, BINOP_EXP); }
+			{ pstate->wrap2<exp_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_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); }
+			{ pstate->wrap2<equal_operation> (); }
 	;
 
 exp	:	exp NOTEQUAL exp
-			{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+			{ pstate->wrap2<notequal_operation> (); }
 	;
 
 exp	:	exp LEQ exp
-			{ write_exp_elt_opcode (pstate, BINOP_LEQ); }
+			{ pstate->wrap2<leq_operation> (); }
 	;
 
 exp	:	exp GEQ exp
-			{ write_exp_elt_opcode (pstate, BINOP_GEQ); }
+			{ pstate->wrap2<geq_operation> (); }
 	;
 
 exp	:	exp LESSTHAN exp
-			{ write_exp_elt_opcode (pstate, BINOP_LESS); }
+			{ pstate->wrap2<less_operation> (); }
 	;
 
 exp	:	exp GREATERTHAN exp
-			{ write_exp_elt_opcode (pstate, BINOP_GTR); }
+			{ 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 BOOL_AND exp
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+			{ pstate->wrap2<logical_and_operation> (); }
 	;
 
 
 exp	:	exp BOOL_OR exp
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+			{ pstate->wrap2<logical_or_operation> (); }
 	;
 
 exp	:	exp '=' exp
-			{ write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+			{ 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	:	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.type);
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST)val.typed_val.val);
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+			  pstate->push_new<long_const_operation>
+			    (val.typed_val.type,
+			     val.typed_val.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	:	variable
 	;
 
 exp	:	DOLLAR_VARIABLE
+			{ pstate->push_dollar ($1); }
 	;
 
 exp	:	SIZEOF '(' type ')'	%prec UNARY
-			{ write_exp_elt_opcode (pstate, OP_LONG);
-			  write_exp_elt_type (pstate,
-					      parse_f_type (pstate)
-					      ->builtin_integer);
+			{
 			  $3 = check_typedef ($3);
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST) TYPE_LENGTH ($3));
-			  write_exp_elt_opcode (pstate, OP_LONG); }
+			  pstate->push_new<long_const_operation>
+			    (parse_f_type (pstate)->builtin_integer,
+			     TYPE_LENGTH ($3));
+			}
 	;
 
 exp     :       BOOLEAN_LITERAL
-			{ 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> ($1); }
+	;
 
 exp	:	STRING_LITERAL
 			{
-			  write_exp_elt_opcode (pstate, OP_STRING);
-			  write_exp_string (pstate, $1);
-			  write_exp_elt_opcode (pstate, OP_STRING);
+			  pstate->push_new<string_operation>
+			    (copy_name ($1));
 			}
 	;
 
 variable:	name_not_typename
 			{ struct block_symbol sym = $1.sym;
-
-			  if (sym.symbol)
-			    {
-			      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);
-			      break;
-			    }
-			  else
-			    {
-			      struct bound_minimal_symbol msymbol;
-			      std::string arg = copy_name ($1.stoken);
-
-			      msymbol =
-				lookup_bound_minimal_symbol (arg.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."),
-				       arg.c_str ());
-			    }
+			  std::string name = copy_name ($1.stoken);
+			  pstate->push_symbol (name.c_str (), sym);
 			}
 	;
 
 
 type    :       ptype
-        ;
+	;
 
 ptype	:	typebase
 	|	typebase abs_decl
@@ -827,7 +985,7 @@ push_kind_type (LONGEST val, struct type
 {
   int ival;
 
-  if (TYPE_UNSIGNED (type))
+  if (type->is_unsigned ())
     {
       ULONGEST uval = static_cast <ULONGEST> (val);
       if (uval > INT_MAX)
@@ -921,19 +1079,29 @@ struct token
   bool case_sensitive;
 };
 
-static const struct token dot_ops[] =
+/* List of Fortran operators.  */
+
+static const struct token fortran_operators[] =
 {
-  { ".and.", BOOL_AND, BINOP_END, false },
-  { ".or.", BOOL_OR, BINOP_END, false },
-  { ".not.", BOOL_NOT, BINOP_END, false },
-  { ".eq.", EQUAL, BINOP_END, false },
-  { ".eqv.", EQUAL, BINOP_END, false },
-  { ".neqv.", NOTEQUAL, BINOP_END, false },
-  { ".ne.", NOTEQUAL, BINOP_END, false },
-  { ".le.", LEQ, BINOP_END, false },
-  { ".ge.", GEQ, BINOP_END, false },
-  { ".gt.", GREATERTHAN, BINOP_END, false },
-  { ".lt.", LESSTHAN, BINOP_END, false },
+  { ".and.", BOOL_AND, OP_NULL, false },
+  { ".or.", BOOL_OR, OP_NULL, false },
+  { ".not.", BOOL_NOT, OP_NULL, false },
+  { ".eq.", EQUAL, OP_NULL, false },
+  { ".eqv.", EQUAL, OP_NULL, false },
+  { ".neqv.", NOTEQUAL, OP_NULL, false },
+  { ".xor.", NOTEQUAL, OP_NULL, false },
+  { "==", EQUAL, OP_NULL, false },
+  { ".ne.", NOTEQUAL, OP_NULL, false },
+  { "/=", NOTEQUAL, OP_NULL, false },
+  { ".le.", LEQ, OP_NULL, false },
+  { "<=", LEQ, OP_NULL, false },
+  { ".ge.", GEQ, OP_NULL, false },
+  { ">=", GEQ, OP_NULL, false },
+  { ".gt.", GREATERTHAN, OP_NULL, false },
+  { ">", GREATERTHAN, OP_NULL, false },
+  { ".lt.", LESSTHAN, OP_NULL, false },
+  { "<", LESSTHAN, OP_NULL, false },
+  { "**", STARSTAR, BINOP_EXP, false },
 };
 
 /* Holds the Fortran representation of a boolean, and the integer value we
@@ -957,33 +1125,41 @@ static const struct f77_boolean_val bool
 static const struct token f77_keywords[] =
 {
   /* Historically these have always been lowercase only in GDB.  */
-  { "complex_16", COMPLEX_S16_KEYWORD, BINOP_END, true },
-  { "complex_32", COMPLEX_S32_KEYWORD, BINOP_END, true },
-  { "character", CHARACTER, BINOP_END, true },
-  { "integer_2", INT_S2_KEYWORD, BINOP_END, true },
-  { "logical_1", LOGICAL_S1_KEYWORD, BINOP_END, true },
-  { "logical_2", LOGICAL_S2_KEYWORD, BINOP_END, true },
-  { "logical_8", LOGICAL_S8_KEYWORD, BINOP_END, true },
-  { "complex_8", COMPLEX_S8_KEYWORD, BINOP_END, true },
-  { "integer", INT_KEYWORD, BINOP_END, true },
-  { "logical", LOGICAL_KEYWORD, BINOP_END, true },
-  { "real_16", REAL_S16_KEYWORD, BINOP_END, true },
-  { "complex", COMPLEX_KEYWORD, BINOP_END, true },
-  { "sizeof", SIZEOF, BINOP_END, true },
-  { "real_8", REAL_S8_KEYWORD, BINOP_END, true },
-  { "real", REAL_KEYWORD, BINOP_END, true },
-  { "single", SINGLE, BINOP_END, true },
-  { "double", DOUBLE, BINOP_END, true },
-  { "precision", PRECISION, BINOP_END, true },
+  { "complex_16", COMPLEX_S16_KEYWORD, OP_NULL, true },
+  { "complex_32", COMPLEX_S32_KEYWORD, OP_NULL, true },
+  { "character", CHARACTER, OP_NULL, true },
+  { "integer_2", INT_S2_KEYWORD, OP_NULL, true },
+  { "logical_1", LOGICAL_S1_KEYWORD, OP_NULL, true },
+  { "logical_2", LOGICAL_S2_KEYWORD, OP_NULL, true },
+  { "logical_8", LOGICAL_S8_KEYWORD, OP_NULL, true },
+  { "complex_8", COMPLEX_S8_KEYWORD, OP_NULL, true },
+  { "integer", INT_KEYWORD, OP_NULL, true },
+  { "logical", LOGICAL_KEYWORD, OP_NULL, true },
+  { "real_16", REAL_S16_KEYWORD, OP_NULL, true },
+  { "complex", COMPLEX_KEYWORD, OP_NULL, true },
+  { "sizeof", SIZEOF, OP_NULL, true },
+  { "real_8", REAL_S8_KEYWORD, OP_NULL, true },
+  { "real", REAL_KEYWORD, OP_NULL, true },
+  { "single", SINGLE, OP_NULL, true },
+  { "double", DOUBLE, OP_NULL, true },
+  { "precision", PRECISION, OP_NULL, true },
   /* The following correspond to actual functions in Fortran and are case
      insensitive.  */
-  { "kind", KIND, BINOP_END, false },
+  { "kind", KIND, OP_NULL, false },
   { "abs", UNOP_INTRINSIC, UNOP_ABS, false },
   { "mod", BINOP_INTRINSIC, BINOP_MOD, false },
   { "floor", UNOP_INTRINSIC, UNOP_FORTRAN_FLOOR, false },
   { "ceiling", UNOP_INTRINSIC, UNOP_FORTRAN_CEILING, false },
   { "modulo", BINOP_INTRINSIC, BINOP_FORTRAN_MODULO, false },
   { "cmplx", BINOP_INTRINSIC, BINOP_FORTRAN_CMPLX, false },
+  { "lbound", UNOP_OR_BINOP_INTRINSIC, FORTRAN_LBOUND, false },
+  { "ubound", UNOP_OR_BINOP_INTRINSIC, FORTRAN_UBOUND, false },
+  { "allocated", UNOP_INTRINSIC, UNOP_FORTRAN_ALLOCATED, false },
+  { "associated", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ASSOCIATED, false },
+  { "rank", UNOP_INTRINSIC, UNOP_FORTRAN_RANK, false },
+  { "size", UNOP_OR_BINOP_INTRINSIC, FORTRAN_ARRAY_SIZE, false },
+  { "shape", UNOP_INTRINSIC, UNOP_FORTRAN_SHAPE, false },
+  { "loc", UNOP_INTRINSIC, UNOP_FORTRAN_LOC, false },
 };
 
 /* Implementation of a dynamically expandable buffer for processing input
@@ -1060,6 +1236,15 @@ match_string_literal (void)
     }
 }
 
+/* This is set if a NAME token appeared at the very end of the input
+   string, with no whitespace separating the name from the EOF.  This
+   is used only when parsing to do field name completion.  */
+static bool saw_name_at_eof;
+
+/* This is set if the previously-returned token was a structure
+   operator '%'.  */
+static bool last_was_structop;
+
 /* Read one token, getting characters through lexptr.  */
 
 static int
@@ -1069,7 +1254,10 @@ yylex (void)
   int namelen;
   unsigned int token;
   const char *tokstart;
-  
+  bool saw_structop = last_was_structop;
+
+  last_was_structop = false;
+
  retry:
  
   pstate->prev_lexptr = pstate->lexptr;
@@ -1093,29 +1281,27 @@ yylex (void)
 	}
     }
 
-  /* See if it is a special .foo. operator.  */
-  for (int i = 0; i < ARRAY_SIZE (dot_ops); i++)
-    if (strncasecmp (tokstart, dot_ops[i].oper,
-		     strlen (dot_ops[i].oper)) == 0)
+  /* See if it is a Fortran operator.  */
+  for (int i = 0; i < ARRAY_SIZE (fortran_operators); i++)
+    if (strncasecmp (tokstart, fortran_operators[i].oper,
+		     strlen (fortran_operators[i].oper)) == 0)
       {
-	gdb_assert (!dot_ops[i].case_sensitive);
-	pstate->lexptr += strlen (dot_ops[i].oper);
-	yylval.opcode = dot_ops[i].opcode;
-	return dot_ops[i].token;
+	gdb_assert (!fortran_operators[i].case_sensitive);
+	pstate->lexptr += strlen (fortran_operators[i].oper);
+	yylval.opcode = fortran_operators[i].opcode;
+	return fortran_operators[i].token;
       }
 
-  /* See if it is an exponentiation operator.  */
-
-  if (strncmp (tokstart, "**", 2) == 0)
-    {
-      pstate->lexptr += 2;
-      yylval.opcode = BINOP_EXP;
-      return STARSTAR;
-    }
-
   switch (c = *tokstart)
     {
     case 0:
+      if (saw_name_at_eof)
+	{
+	  saw_name_at_eof = false;
+	  return COMPLETE;
+	}
+      else if (pstate->parse_completion && saw_structop)
+	return COMPLETE;
       return 0;
       
     case ' ':
@@ -1165,7 +1351,7 @@ yylex (void)
     case '8':
     case '9':
       {
-        /* It's a number.  */
+	/* It's a number.  */
 	int got_dot = 0, got_e = 0, got_d = 0, toktype;
 	const char *p = tokstart;
 	int hex = input_radix > 10;
@@ -1206,8 +1392,8 @@ yylex (void)
 	toktype = parse_number (pstate, tokstart, p - tokstart,
 				got_dot|got_e|got_d,
 				&yylval);
-        if (toktype == ERROR)
-          {
+	if (toktype == ERROR)
+	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 	    
 	    memcpy (err_copy, tokstart, p - tokstart);
@@ -1217,12 +1403,14 @@ yylex (void)
 	pstate->lexptr = p;
 	return toktype;
       }
-      
+
+    case '%':
+      last_was_structop = true;
+      /* Fall through.  */
     case '+':
     case '-':
     case '*':
     case '/':
-    case '%':
     case '|':
     case '&':
     case '^':
@@ -1279,11 +1467,8 @@ yylex (void)
   yylval.sval.length = namelen;
   
   if (*tokstart == '$')
-    {
-      write_dollar_variable (pstate, yylval.sval);
-      return DOLLAR_VARIABLE;
-    }
-  
+    return DOLLAR_VARIABLE;
+
   /* Use token-type TYPENAME for symbols that happen to be defined
      currently as names of types; NAME for other symbols.
      The caller is not constrained to care about the distinction.  */
@@ -1334,7 +1519,10 @@ yylex (void)
 	    return NAME_OR_INT;
 	  }
       }
-    
+
+    if (pstate->parse_completion && *pstate->lexptr == '\0')
+      saw_name_at_eof = true;
+
     /* Any other kind of symbol */
     yylval.ssym.sym = result;
     yylval.ssym.is_a_field_of_this = false;
@@ -1343,7 +1531,7 @@ yylex (void)
 }
 
 int
-f_parse (struct parser_state *par_state)
+f_language::parser (struct parser_state *par_state) const
 {
   /* Setting up the parser state.  */
   scoped_restore pstate_restore = make_scoped_restore (&pstate);
@@ -1351,13 +1539,18 @@ f_parse (struct parser_state *par_state)
 							parser_debug);
   gdb_assert (par_state != NULL);
   pstate = par_state;
+  last_was_structop = false;
+  saw_name_at_eof = false;
   paren_depth = 0;
 
   struct type_stack stack;
   scoped_restore restore_type_stack = make_scoped_restore (&type_stack,
 							   &stack);
 
-  return yyparse ();
+  int result = yyparse ();
+  if (!result)
+    pstate->set_operation (pstate->pop ());
+  return result;
 }
 
 static void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filename-seen-cache.c ./gdb/filename-seen-cache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filename-seen-cache.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/filename-seen-cache.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Filename-seen cache for the GNU debugger, GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,10 +27,10 @@
 /* filename_seen_cache constructor.  */
 
 filename_seen_cache::filename_seen_cache ()
+  : m_tab (htab_create_alloc (INITIAL_FILENAME_SEEN_CACHE_SIZE,
+			      filename_hash, filename_eq,
+			      NULL, xcalloc, xfree))
 {
-  m_tab = htab_create_alloc (INITIAL_FILENAME_SEEN_CACHE_SIZE,
-			     filename_hash, filename_eq,
-			     NULL, xcalloc, xfree);
 }
 
 /* See filename-seen-cache.h.  */
@@ -38,14 +38,7 @@ filename_seen_cache::filename_seen_cache
 void
 filename_seen_cache::clear ()
 {
-  htab_empty (m_tab);
-}
-
-/* See filename-seen-cache.h.  */
-
-filename_seen_cache::~filename_seen_cache ()
-{
-  htab_delete (m_tab);
+  htab_empty (m_tab.get ());
 }
 
 /* See filename-seen-cache.h.  */
@@ -56,7 +49,7 @@ filename_seen_cache::seen (const char *f
   void **slot;
 
   /* Is FILE in tab?  */
-  slot = htab_find_slot (m_tab, file, INSERT);
+  slot = htab_find_slot (m_tab.get (), file, INSERT);
   if (*slot != NULL)
     return true;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filename-seen-cache.h ./gdb/filename-seen-cache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filename-seen-cache.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/filename-seen-cache.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Filename-seen cache for the GNU debugger, GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,6 @@ class filename_seen_cache
 {
 public:
   filename_seen_cache ();
-  ~filename_seen_cache ();
 
   DISABLE_COPY_AND_ASSIGN (filename_seen_cache);
 
@@ -55,12 +54,12 @@ public:
 	return 1;
       };
 
-    htab_traverse_noresize (m_tab, erased_cb, &callback);
+    htab_traverse_noresize (m_tab.get (), erased_cb, &callback);
   }
 
 private:
   /* Table of files seen so far.  */
-  htab_t m_tab;
+  htab_up m_tab;
 };
 
 #endif /* FILENAME_SEEN_CACHE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filesystem.c ./gdb/filesystem.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filesystem.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/filesystem.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Handle different target file systems for GDB, the GNU Debugger.
 
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -76,8 +76,9 @@ is \"%s\".\n"),
 		      value);
 }
 
+void _initialize_filesystem ();
 void
-_initialize_filesystem (void)
+_initialize_filesystem ()
 {
   add_setshow_enum_cmd ("target-file-system-kind",
 			class_files,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filesystem.h ./gdb/filesystem.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/filesystem.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/filesystem.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Handle different target file systems for GDB, the GNU Debugger.
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/findcmd.c ./gdb/findcmd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/findcmd.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/findcmd.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* The find command.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -280,8 +280,9 @@ find_command (const char *args, int from
 		     found_count > 1 ? "s" : "");
 }
 
+void _initialize_mem_search ();
 void
-_initialize_mem_search (void)
+_initialize_mem_search ()
 {
   add_cmd ("find", class_vars, find_command, _("\
 Search memory for a sequence of bytes.\n\
@@ -291,6 +292,7 @@ find [/SIZE-CHAR] [/MAX-COUNT] START-ADD
 SIZE-CHAR is one of b,h,w,g for 8,16,32,64 bit values respectively,\n\
 and if not specified the size is taken from the type of the expression\n\
 in the current language.\n\
+The two-address form specifies an inclusive range.\n\
 Note that this means for example that in the case of C-like languages\n\
 a search for an untyped 0x42 will search for \"(int) 0x42\"\n\
 which is typically four bytes, and a search for a string \"hello\" will\n\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/findvar.c ./gdb/findvar.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/findvar.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/findvar.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Find a variable's value in memory, for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,7 +31,7 @@
 #include "block.h"
 #include "objfiles.h"
 #include "language.h"
-#include "dwarf2loc.h"
+#include "dwarf2/loc.h"
 #include "gdbsupport/selftest.h"
 
 /* Basic byte-swapping routines.  All 'extract' functions return a
@@ -153,12 +153,12 @@ extract_long_unsigned_integer (const gdb
 CORE_ADDR
 extract_typed_address (const gdb_byte *buf, struct type *type)
 {
-  if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
+  if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
     internal_error (__FILE__, __LINE__,
 		    _("extract_typed_address: "
 		    "type is not a pointer or reference"));
 
-  return gdbarch_pointer_to_address (get_type_arch (type), type, buf);
+  return gdbarch_pointer_to_address (type->arch (), type, buf);
 }
 
 /* All 'store' functions accept a host-format integer and store a
@@ -206,12 +206,12 @@ template void store_integer (gdb_byte *a
 void
 store_typed_address (gdb_byte *buf, struct type *type, CORE_ADDR addr)
 {
-  if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
+  if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
     internal_error (__FILE__, __LINE__,
 		    _("store_typed_address: "
 		    "type is not a pointer or reference"));
 
-  gdbarch_address_to_pointer (get_type_arch (type), type, buf, addr);
+  gdbarch_address_to_pointer (type->arch (), type, buf, addr);
 }
 
 /* Copy a value from SOURCE of size SOURCE_SIZE bytes to DEST of size DEST_SIZE
@@ -257,7 +257,7 @@ copy_integer_to_size (gdb_byte *dest, in
 
 /* Return a `value' with the contents of (virtual or cooked) register
    REGNUM as found in the specified FRAME.  The register's type is
-   determined by register_type().  */
+   determined by register_type ().  */
 
 struct value *
 value_of_register (int regnum, struct frame_info *frame)
@@ -277,7 +277,7 @@ value_of_register (int regnum, struct fr
 
 /* Return a `value' with the contents of (virtual or cooked) register
    REGNUM as found in the specified FRAME.  The register's type is
-   determined by register_type().  The value is not fetched.  */
+   determined by register_type ().  The value is not fetched.  */
 
 struct value *
 value_of_register_lazy (struct frame_info *frame, int regnum)
@@ -292,6 +292,14 @@ value_of_register_lazy (struct frame_inf
 
   next_frame = get_next_frame_sentinel_okay (frame);
 
+  /* In some cases NEXT_FRAME may not have a valid frame-id yet.  This can
+     happen if we end up trying to unwind a register as part of the frame
+     sniffer.  The only time that we get here without a valid frame-id is
+     if NEXT_FRAME is an inline frame.  If this is the case then we can
+     avoid getting into trouble here by skipping past the inline frames.  */
+  while (get_frame_type (next_frame) == INLINE_FRAME)
+    next_frame = get_next_frame_sentinel_okay (next_frame);
+
   /* We should have a valid next frame.  */
   gdb_assert (frame_id_p (get_frame_id (next_frame)));
 
@@ -354,7 +362,7 @@ symbol_read_needs (struct symbol *sym)
   switch (SYMBOL_CLASS (sym))
     {
       /* All cases listed explicitly so that gcc -Wall will detect it if
-         we failed to consider one.  */
+	 we failed to consider one.  */
     case LOC_COMPUTED:
       gdb_assert_not_reached (_("LOC_COMPUTED variable missing a method"));
 
@@ -372,8 +380,8 @@ symbol_read_needs (struct symbol *sym)
 
     case LOC_LABEL:
       /* Getting the address of a label can be done independently of the block,
-         even if some *uses* of that address wouldn't work so well without
-         the right frame.  */
+	 even if some *uses* of that address wouldn't work so well without
+	 the right frame.  */
 
     case LOC_BLOCK:
     case LOC_CONST_BYTES:
@@ -578,12 +586,12 @@ get_hosting_frame (struct symbol *var, c
   return frame;
 }
 
-/* A default implementation for the "la_read_var_value" hook in
-   the language vector which should work in most situations.  */
+/* See language.h.  */
 
 struct value *
-default_read_var_value (struct symbol *var, const struct block *var_block,
-			struct frame_info *frame)
+language_defn::read_var_value (struct symbol *var,
+			       const struct block *var_block,
+			       struct frame_info *frame) const
 {
   struct value *v;
   struct type *type = SYMBOL_TYPE (var);
@@ -600,7 +608,7 @@ default_read_var_value (struct symbol *v
   sym_need = symbol_read_needs (var);
   if (sym_need == SYMBOL_NEEDS_FRAME)
     gdb_assert (frame != NULL);
-  else if (sym_need == SYMBOL_NEEDS_REGISTERS && !target_has_registers)
+  else if (sym_need == SYMBOL_NEEDS_REGISTERS && !target_has_registers ())
     error (_("Cannot read `%s' without registers"), var->print_name ());
 
   if (frame != NULL)
@@ -615,7 +623,7 @@ default_read_var_value (struct symbol *v
       if (is_dynamic_type (type))
 	{
 	  /* Value is a constant byte-sequence and needs no memory access.  */
-	  type = resolve_dynamic_type (type, NULL, /* Unused address.  */ 0);
+	  type = resolve_dynamic_type (type, {}, /* Unused address.  */ 0);
 	}
       /* Put the constant back in target format. */
       v = allocate_value (type);
@@ -630,11 +638,9 @@ default_read_var_value (struct symbol *v
       v = allocate_value (type);
       if (overlay_debugging)
 	{
-	  addr
-	    = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
-					SYMBOL_OBJ_SECTION (symbol_objfile (var),
-							    var));
-
+	  struct objfile *var_objfile = symbol_objfile (var);
+	  addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
+					   var->obj_section (var_objfile));
 	  store_typed_address (value_contents_raw (v), type, addr);
 	}
       else
@@ -647,7 +653,7 @@ default_read_var_value (struct symbol *v
       if (is_dynamic_type (type))
 	{
 	  /* Value is a constant byte-sequence and needs no memory access.  */
-	  type = resolve_dynamic_type (type, NULL, /* Unused address.  */ 0);
+	  type = resolve_dynamic_type (type, {}, /* Unused address.  */ 0);
 	}
       v = allocate_value (type);
       memcpy (value_contents_raw (v), SYMBOL_VALUE_BYTES (var),
@@ -657,9 +663,9 @@ default_read_var_value (struct symbol *v
 
     case LOC_STATIC:
       if (overlay_debugging)
-	addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
-					 SYMBOL_OBJ_SECTION (symbol_objfile (var),
-							     var));
+	addr
+	  = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
+				      var->obj_section (symbol_objfile (var)));
       else
 	addr = SYMBOL_VALUE_ADDRESS (var);
       break;
@@ -701,7 +707,7 @@ default_read_var_value (struct symbol *v
       if (overlay_debugging)
 	addr = symbol_overlayed_address
 	  (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var)),
-	   SYMBOL_OBJ_SECTION (symbol_objfile (var), var));
+	   var->obj_section (symbol_objfile (var)));
       else
 	addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var));
       break;
@@ -721,7 +727,7 @@ default_read_var_value (struct symbol *v
 
 	    if (regval == NULL)
 	      error (_("Value of register variable not available for `%s'."),
-	             var->print_name ());
+		     var->print_name ());
 
 	    addr = value_as_address (regval);
 	  }
@@ -731,7 +737,7 @@ default_read_var_value (struct symbol *v
 
 	    if (regval == NULL)
 	      error (_("Value of register variable not available for `%s'."),
-	             var->print_name ());
+		     var->print_name ());
 	    return regval;
 	  }
       }
@@ -769,7 +775,7 @@ default_read_var_value (struct symbol *v
 	    error (_("Missing %s symbol \"%s\"."),
 		   flavour_name, var->linkage_name ());
 	  }
-	obj_section = MSYMBOL_OBJ_SECTION (lookup_data.result.objfile, msym);
+	obj_section = msym->obj_section (lookup_data.result.objfile);
 	/* Relocate address, unless there is no section or the variable is
 	   a TLS variable. */
 	if (obj_section == NULL
@@ -788,7 +794,7 @@ default_read_var_value (struct symbol *v
 
     case LOC_OPTIMIZED_OUT:
       if (is_dynamic_type (type))
-	type = resolve_dynamic_type (type, NULL, /* Unused address.  */ 0);
+	type = resolve_dynamic_type (type, {}, /* Unused address.  */ 0);
       return allocate_optimized_out_value (type);
 
     default:
@@ -801,25 +807,24 @@ default_read_var_value (struct symbol *v
   return v;
 }
 
-/* Calls VAR's language la_read_var_value hook with the given arguments.  */
+/* Calls VAR's language read_var_value hook with the given arguments.  */
 
 struct value *
 read_var_value (struct symbol *var, const struct block *var_block,
 		struct frame_info *frame)
 {
-  const struct language_defn *lang = language_def (SYMBOL_LANGUAGE (var));
+  const struct language_defn *lang = language_def (var->language ());
 
   gdb_assert (lang != NULL);
-  gdb_assert (lang->la_read_var_value != NULL);
 
-  return lang->la_read_var_value (var, var_block, frame);
+  return lang->read_var_value (var, var_block, frame);
 }
 
 /* Install default attributes for register values.  */
 
 struct value *
 default_value_from_register (struct gdbarch *gdbarch, struct type *type,
-                             int regnum, struct frame_id frame_id)
+			     int regnum, struct frame_id frame_id)
 {
   int len = TYPE_LENGTH (type);
   struct value *value = allocate_value (type);
@@ -883,7 +888,7 @@ read_frame_register_value (struct value
       int reg_len = type_length_units (value_type (regval)) - reg_offset;
 
       /* If the register length is larger than the number of bytes
-         remaining to copy, then only copy the appropriate bytes.  */
+	 remaining to copy, then only copy the appropriate bytes.  */
       if (reg_len > len)
 	reg_len = len;
 
@@ -910,12 +915,12 @@ value_from_register (struct type *type,
       int optim, unavail, ok;
 
       /* The ISA/ABI need to something weird when obtaining the
-         specified value from this register.  It might need to
-         re-order non-adjacent, starting with REGNUM (see MIPS and
-         i386).  It might need to convert the [float] register into
-         the corresponding [integer] type (see Alpha).  The assumption
-         is that gdbarch_register_to_value populates the entire value
-         including the location.  */
+	 specified value from this register.  It might need to
+	 re-order non-adjacent, starting with REGNUM (see MIPS and
+	 i386).  It might need to convert the [float] register into
+	 the corresponding [integer] type (see Alpha).  The assumption
+	 is that gdbarch_register_to_value populates the entire value
+	 including the location.  */
       v = allocate_value (type);
       VALUE_LVAL (v) = lval_register;
       VALUE_NEXT_FRAME_ID (v) = get_frame_id (get_next_frame_sentinel_okay (frame));
@@ -1088,8 +1093,9 @@ copy_integer_to_size_test ()
 
 #endif
 
+void _initialize_findvar ();
 void
-_initialize_findvar (void)
+_initialize_findvar ()
 {
 #if GDB_SELF_TEST
   selftests::register_test
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/.flake8 ./gdb/.flake8
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/.flake8	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/.flake8	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,2 @@
+[flake8]
+ignore = E501, W503
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-lang.c ./gdb/f-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-lang.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/f-lang.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Fortran language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 1993-2020 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    Contributed by Motorola.  Adapted from the C parser by Farooq Butt
    (fmbutt@engage.sps.mot.com).
@@ -36,27 +36,56 @@
 #include "c-lang.h"
 #include "target-float.h"
 #include "gdbarch.h"
+#include "gdbcmd.h"
+#include "f-array-walker.h"
+#include "f-exp.h"
 
 #include <math.h>
 
+/* Whether GDB should repack array slices created by the user.  */
+static bool repack_array_slices = false;
+
+/* Implement 'show fortran repack-array-slices'.  */
+static void
+show_repack_array_slices (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Repacking of Fortran array slices is %s.\n"),
+		    value);
+}
+
+/* Debugging of Fortran's array slicing.  */
+static bool fortran_array_slicing_debug = false;
+
+/* Implement 'show debug fortran-array-slicing'.  */
+static void
+show_fortran_array_slicing_debug (struct ui_file *file, int from_tty,
+				  struct cmd_list_element *c,
+				  const char *value)
+{
+  fprintf_filtered (file, _("Debugging of Fortran array slicing is %s.\n"),
+		    value);
+}
+
 /* Local functions */
 
-static void f_printchar (int c, struct type *type, struct ui_file * stream);
-static void f_emit_char (int c, struct type *type,
-			 struct ui_file * stream, int quoter);
+static value *fortran_prepare_argument (struct expression *exp,
+					expr::operation *subexp,
+					int arg_num, bool is_internal_call_p,
+					struct type *func_type, enum noside noside);
 
 /* Return the encoding that should be used for the character type
    TYPE.  */
 
-static const char *
-f_get_encoding (struct type *type)
+const char *
+f_language::get_encoding (struct type *type)
 {
   const char *encoding;
 
   switch (TYPE_LENGTH (type))
     {
     case 1:
-      encoding = target_charset (get_type_arch (type));
+      encoding = target_charset (type->arch ());
       break;
     case 4:
       if (type_byte_order (type) == BFD_ENDIAN_BIG)
@@ -72,616 +101,1497 @@ f_get_encoding (struct type *type)
   return encoding;
 }
 
-/* Print the character C on STREAM as part of the contents of a literal
-   string whose delimiter is QUOTER.  Note that that format for printing
-   characters and strings is language specific.
-   FIXME:  This is a copy of the same function from c-exp.y.  It should
-   be replaced with a true F77 version.  */
+
+
+/* A helper function for the "bound" intrinsics that checks that TYPE
+   is an array.  LBOUND_P is true for lower bound; this is used for
+   the error message, if any.  */
 
 static void
-f_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
+fortran_require_array (struct type *type, bool lbound_p)
 {
-  const char *encoding = f_get_encoding (type);
-
-  generic_emit_char (c, type, stream, quoter, encoding);
+  type = check_typedef (type);
+  if (type->code () != TYPE_CODE_ARRAY)
+    {
+      if (lbound_p)
+	error (_("LBOUND can only be applied to arrays"));
+      else
+	error (_("UBOUND can only be applied to arrays"));
+    }
 }
 
-/* Implementation of la_printchar.  */
+/* Create an array containing the lower bounds (when LBOUND_P is true) or
+   the upper bounds (when LBOUND_P is false) of ARRAY (which must be of
+   array type).  GDBARCH is the current architecture.  */
 
-static void
-f_printchar (int c, struct type *type, struct ui_file *stream)
-{
-  fputs_filtered ("'", stream);
-  LA_EMIT_CHAR (c, type, stream, '\'');
-  fputs_filtered ("'", stream);
+static struct value *
+fortran_bounds_all_dims (bool lbound_p,
+			 struct gdbarch *gdbarch,
+			 struct value *array)
+{
+  type *array_type = check_typedef (value_type (array));
+  int ndimensions = calc_f77_array_dims (array_type);
+
+  /* Allocate a result value of the correct type.  */
+  struct type *range
+    = create_static_range_type (nullptr,
+				builtin_type (gdbarch)->builtin_int,
+				1, ndimensions);
+  struct type *elm_type = builtin_type (gdbarch)->builtin_long_long;
+  struct type *result_type = create_array_type (nullptr, elm_type, range);
+  struct value *result = allocate_value (result_type);
+
+  /* Walk the array dimensions backwards due to the way the array will be
+     laid out in memory, the first dimension will be the most inner.  */
+  LONGEST elm_len = TYPE_LENGTH (elm_type);
+  for (LONGEST dst_offset = elm_len * (ndimensions - 1);
+       dst_offset >= 0;
+       dst_offset -= elm_len)
+    {
+      LONGEST b;
+
+      /* Grab the required bound.  */
+      if (lbound_p)
+	b = f77_get_lowerbound (array_type);
+      else
+	b = f77_get_upperbound (array_type);
+
+      /* And copy the value into the result value.  */
+      struct value *v = value_from_longest (elm_type, b);
+      gdb_assert (dst_offset + TYPE_LENGTH (value_type (v))
+		  <= TYPE_LENGTH (value_type (result)));
+      gdb_assert (TYPE_LENGTH (value_type (v)) == elm_len);
+      value_contents_copy (result, dst_offset, v, 0, elm_len);
+
+      /* Peel another dimension of the array.  */
+      array_type = TYPE_TARGET_TYPE (array_type);
+    }
+
+  return result;
 }
 
-/* Print the character string STRING, printing at most LENGTH characters.
-   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 characters, or if FORCE_ELLIPSES.
-   FIXME:  This is a copy of the same function from c-exp.y.  It should
-   be replaced with a true F77 version.  */
+/* Return the lower bound (when LBOUND_P is true) or the upper bound (when
+   LBOUND_P is false) for dimension DIM_VAL (which must be an integer) of
+   ARRAY (which must be an array).  GDBARCH is the current architecture.  */
 
-static void
-f_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
-	    unsigned int length, const char *encoding, int force_ellipses,
-	    const struct value_print_options *options)
-{
-  const char *type_encoding = f_get_encoding (type);
+static struct value *
+fortran_bounds_for_dimension (bool lbound_p,
+			      struct gdbarch *gdbarch,
+			      struct value *array,
+			      struct value *dim_val)
+{
+  /* Check the requested dimension is valid for this array.  */
+  type *array_type = check_typedef (value_type (array));
+  int ndimensions = calc_f77_array_dims (array_type);
+  long dim = value_as_long (dim_val);
+  if (dim < 1 || dim > ndimensions)
+    {
+      if (lbound_p)
+	error (_("LBOUND dimension must be from 1 to %d"), ndimensions);
+      else
+	error (_("UBOUND dimension must be from 1 to %d"), ndimensions);
+    }
+
+  /* The type for the result.  */
+  struct type *bound_type = builtin_type (gdbarch)->builtin_long_long;
+
+  /* Walk the dimensions backwards, due to the ordering in which arrays are
+     laid out the first dimension is the most inner.  */
+  for (int i = ndimensions - 1; i >= 0; --i)
+    {
+      /* If this is the requested dimension then we're done.  Grab the
+	 bounds and return.  */
+      if (i == dim - 1)
+	{
+	  LONGEST b;
+
+	  if (lbound_p)
+	    b = f77_get_lowerbound (array_type);
+	  else
+	    b = f77_get_upperbound (array_type);
 
-  if (TYPE_LENGTH (type) == 4)
-    fputs_filtered ("4_", stream);
+	  return value_from_longest (bound_type, b);
+	}
 
-  if (!encoding || !*encoding)
-    encoding = type_encoding;
+      /* Peel off another dimension of the array.  */
+      array_type = TYPE_TARGET_TYPE (array_type);
+    }
 
-  generic_printstr (stream, type, string, length, encoding,
-		    force_ellipses, '\'', 0, options);
+  gdb_assert_not_reached ("failed to find matching dimension");
 }
 
 
-/* Table of operators and their precedences for printing expressions.  */
+/* Return the number of dimensions for a Fortran array or string.  */
 
-static const struct op_print f_op_print_tab[] =
+int
+calc_f77_array_dims (struct type *array_type)
 {
-  {"+", BINOP_ADD, PREC_ADD, 0},
-  {"+", UNOP_PLUS, PREC_PREFIX, 0},
-  {"-", BINOP_SUB, PREC_ADD, 0},
-  {"-", UNOP_NEG, PREC_PREFIX, 0},
-  {"*", BINOP_MUL, PREC_MUL, 0},
-  {"/", BINOP_DIV, PREC_MUL, 0},
-  {"DIV", BINOP_INTDIV, PREC_MUL, 0},
-  {"MOD", BINOP_REM, PREC_MUL, 0},
-  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
-  {".OR.", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
-  {".AND.", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
-  {".NOT.", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
-  {".EQ.", BINOP_EQUAL, PREC_EQUAL, 0},
-  {".NE.", BINOP_NOTEQUAL, PREC_EQUAL, 0},
-  {".LE.", BINOP_LEQ, PREC_ORDER, 0},
-  {".GE.", BINOP_GEQ, PREC_ORDER, 0},
-  {".GT.", BINOP_GTR, PREC_ORDER, 0},
-  {".LT.", BINOP_LESS, PREC_ORDER, 0},
-  {"**", UNOP_IND, PREC_PREFIX, 0},
-  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
-  {NULL, OP_NULL, PREC_REPEAT, 0}
+  int ndimen = 1;
+  struct type *tmp_type;
+
+  if ((array_type->code () == TYPE_CODE_STRING))
+    return 1;
+
+  if ((array_type->code () != TYPE_CODE_ARRAY))
+    error (_("Can't get dimensions for a non-array type"));
+
+  tmp_type = array_type;
+
+  while ((tmp_type = TYPE_TARGET_TYPE (tmp_type)))
+    {
+      if (tmp_type->code () == TYPE_CODE_ARRAY)
+	++ndimen;
+    }
+  return ndimen;
+}
+
+/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
+   slices.  This is a base class for two alternative repacking mechanisms,
+   one for when repacking from a lazy value, and one for repacking from a
+   non-lazy (already loaded) value.  */
+class fortran_array_repacker_base_impl
+  : public fortran_array_walker_base_impl
+{
+public:
+  /* Constructor, DEST is the value we are repacking into.  */
+  fortran_array_repacker_base_impl (struct value *dest)
+    : m_dest (dest),
+      m_dest_offset (0)
+  { /* Nothing.  */ }
+
+  /* When we start processing the inner most dimension, this is where we
+     will be creating values for each element as we load them and then copy
+     them into the M_DEST value.  Set a value mark so we can free these
+     temporary values.  */
+  void start_dimension (bool inner_p)
+  {
+    if (inner_p)
+      {
+	gdb_assert (m_mark == nullptr);
+	m_mark = value_mark ();
+      }
+  }
+
+  /* When we finish processing the inner most dimension free all temporary
+     value that were created.  */
+  void finish_dimension (bool inner_p, bool last_p)
+  {
+    if (inner_p)
+      {
+	gdb_assert (m_mark != nullptr);
+	value_free_to_mark (m_mark);
+	m_mark = nullptr;
+      }
+  }
+
+protected:
+  /* Copy the contents of array element ELT into M_DEST at the next
+     available offset.  */
+  void copy_element_to_dest (struct value *elt)
+  {
+    value_contents_copy (m_dest, m_dest_offset, elt, 0,
+			 TYPE_LENGTH (value_type (elt)));
+    m_dest_offset += TYPE_LENGTH (value_type (elt));
+  }
+
+  /* The value being written to.  */
+  struct value *m_dest;
+
+  /* The byte offset in M_DEST at which the next element should be
+     written.  */
+  LONGEST m_dest_offset;
+
+  /* Set with a call to VALUE_MARK, and then reset after calling
+     VALUE_FREE_TO_MARK.  */
+  struct value *m_mark = nullptr;
 };
-
-enum f_primitive_types {
-  f_primitive_type_character,
-  f_primitive_type_logical,
-  f_primitive_type_logical_s1,
-  f_primitive_type_logical_s2,
-  f_primitive_type_logical_s8,
-  f_primitive_type_integer,
-  f_primitive_type_integer_s2,
-  f_primitive_type_real,
-  f_primitive_type_real_s8,
-  f_primitive_type_real_s16,
-  f_primitive_type_complex_s8,
-  f_primitive_type_complex_s16,
-  f_primitive_type_void,
-  nr_f_primitive_types
+
+/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
+   slices.  This class is specialised for repacking an array slice from a
+   lazy array value, as such it does not require the parent array value to
+   be loaded into GDB's memory; the parent value could be huge, while the
+   slice could be tiny.  */
+class fortran_lazy_array_repacker_impl
+  : public fortran_array_repacker_base_impl
+{
+public:
+  /* Constructor.  TYPE is the type of the slice being loaded from the
+     parent value, so this type will correctly reflect the strides required
+     to find all of the elements from the parent value.  ADDRESS is the
+     address in target memory of value matching TYPE, and DEST is the value
+     we are repacking into.  */
+  explicit fortran_lazy_array_repacker_impl (struct type *type,
+					     CORE_ADDR address,
+					     struct value *dest)
+    : fortran_array_repacker_base_impl (dest),
+      m_addr (address)
+  { /* Nothing.  */ }
+
+  /* Create a lazy value in target memory representing a single element,
+     then load the element into GDB's memory and copy the contents into the
+     destination value.  */
+  void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+  {
+    copy_element_to_dest (value_at_lazy (elt_type, m_addr + elt_off));
+  }
+
+private:
+  /* The address in target memory where the parent value starts.  */
+  CORE_ADDR m_addr;
 };
 
-static void
-f_language_arch_info (struct gdbarch *gdbarch,
-		      struct language_arch_info *lai)
+/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
+   slices.  This class is specialised for repacking an array slice from a
+   previously loaded (non-lazy) array value, as such it fetches the
+   element values from the contents of the parent value.  */
+class fortran_array_repacker_impl
+  : public fortran_array_repacker_base_impl
+{
+public:
+  /* Constructor.  TYPE is the type for the array slice within the parent
+     value, as such it has stride values as required to find the elements
+     within the original parent value.  ADDRESS is the address in target
+     memory of the value matching TYPE.  BASE_OFFSET is the offset from
+     the start of VAL's content buffer to the start of the object of TYPE,
+     VAL is the parent object from which we are loading the value, and
+     DEST is the value into which we are repacking.  */
+  explicit fortran_array_repacker_impl (struct type *type, CORE_ADDR address,
+					LONGEST base_offset,
+					struct value *val, struct value *dest)
+    : fortran_array_repacker_base_impl (dest),
+      m_base_offset (base_offset),
+      m_val (val)
+  {
+    gdb_assert (!value_lazy (val));
+  }
+
+  /* Extract an element of ELT_TYPE at offset (M_BASE_OFFSET + ELT_OFF)
+     from the content buffer of M_VAL then copy this extracted value into
+     the repacked destination value.  */
+  void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+  {
+    struct value *elt
+      = value_from_component (m_val, elt_type, (elt_off + m_base_offset));
+    copy_element_to_dest (elt);
+  }
+
+private:
+  /* The offset into the content buffer of M_VAL to the start of the slice
+     being extracted.  */
+  LONGEST m_base_offset;
+
+  /* The parent value from which we are extracting a slice.  */
+  struct value *m_val;
+};
+
+
+/* Evaluate FORTRAN_ASSOCIATED expressions.  Both GDBARCH and LANG are
+   extracted from the expression being evaluated.  POINTER is the required
+   first argument to the 'associated' keyword, and TARGET is the optional
+   second argument, this will be nullptr if the user only passed one
+   argument to their use of 'associated'.  */
+
+static struct value *
+fortran_associated (struct gdbarch *gdbarch, const language_defn *lang,
+		    struct value *pointer, struct value *target = nullptr)
 {
-  const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
+  struct type *result_type = language_bool_type (lang, gdbarch);
+
+  /* All Fortran pointers should have the associated property, this is
+     how we know the pointer is pointing at something or not.  */
+  struct type *pointer_type = check_typedef (value_type (pointer));
+  if (TYPE_ASSOCIATED_PROP (pointer_type) == nullptr
+      && pointer_type->code () != TYPE_CODE_PTR)
+    error (_("ASSOCIATED can only be applied to pointers"));
+
+  /* Get an address from POINTER.  Fortran (or at least gfortran) models
+     array pointers as arrays with a dynamic data address, so we need to
+     use two approaches here, for real pointers we take the contents of the
+     pointer as an address.  For non-pointers we take the address of the
+     content.  */
+  CORE_ADDR pointer_addr;
+  if (pointer_type->code () == TYPE_CODE_PTR)
+    pointer_addr = value_as_address (pointer);
+  else
+    pointer_addr = value_address (pointer);
+
+  /* The single argument case, is POINTER associated with anything?  */
+  if (target == nullptr)
+    {
+      bool is_associated = false;
+
+      /* If POINTER is an actual pointer and doesn't have an associated
+	 property then we need to figure out whether this pointer is
+	 associated by looking at the value of the pointer itself.  We make
+	 the assumption that a non-associated pointer will be set to 0.
+	 This is probably true for most targets, but might not be true for
+	 everyone.  */
+      if (pointer_type->code () == TYPE_CODE_PTR
+	  && TYPE_ASSOCIATED_PROP (pointer_type) == nullptr)
+	is_associated = (pointer_addr != 0);
+      else
+	is_associated = !type_not_associated (pointer_type);
+      return value_from_longest (result_type, is_associated ? 1 : 0);
+    }
+
+  /* The two argument case, is POINTER associated with TARGET?  */
+
+  struct type *target_type = check_typedef (value_type (target));
+
+  struct type *pointer_target_type;
+  if (pointer_type->code () == TYPE_CODE_PTR)
+    pointer_target_type = TYPE_TARGET_TYPE (pointer_type);
+  else
+    pointer_target_type = pointer_type;
+
+  struct type *target_target_type;
+  if (target_type->code () == TYPE_CODE_PTR)
+    target_target_type = TYPE_TARGET_TYPE (target_type);
+  else
+    target_target_type = target_type;
+
+  if (pointer_target_type->code () != target_target_type->code ()
+      || (pointer_target_type->code () != TYPE_CODE_ARRAY
+	  && (TYPE_LENGTH (pointer_target_type)
+	      != TYPE_LENGTH (target_target_type))))
+    error (_("arguments to associated must be of same type and kind"));
+
+  /* If TARGET is not in memory, or the original pointer is specifically
+     known to be not associated with anything, then the answer is obviously
+     false.  Alternatively, if POINTER is an actual pointer and has no
+     associated property, then we have to check if its associated by
+     looking the value of the pointer itself.  We make the assumption that
+     a non-associated pointer will be set to 0.  This is probably true for
+     most targets, but might not be true for everyone.  */
+  if (value_lval_const (target) != lval_memory
+      || type_not_associated (pointer_type)
+      || (TYPE_ASSOCIATED_PROP (pointer_type) == nullptr
+	  && pointer_type->code () == TYPE_CODE_PTR
+	  && pointer_addr == 0))
+    return value_from_longest (result_type, 0);
+
+  /* See the comment for POINTER_ADDR above.  */
+  CORE_ADDR target_addr;
+  if (target_type->code () == TYPE_CODE_PTR)
+    target_addr = value_as_address (target);
+  else
+    target_addr = value_address (target);
+
+  /* Wrap the following checks inside a do { ... } while (false) loop so
+     that we can use `break' to jump out of the loop.  */
+  bool is_associated = false;
+  do
+    {
+      /* If the addresses are different then POINTER is definitely not
+	 pointing at TARGET.  */
+      if (pointer_addr != target_addr)
+	break;
+
+      /* If POINTER is a real pointer (i.e. not an array pointer, which are
+	 implemented as arrays with a dynamic content address), then this
+	 is all the checking that is needed.  */
+      if (pointer_type->code () == TYPE_CODE_PTR)
+	{
+	  is_associated = true;
+	  break;
+	}
+
+      /* We have an array pointer.  Check the number of dimensions.  */
+      int pointer_dims = calc_f77_array_dims (pointer_type);
+      int target_dims = calc_f77_array_dims (target_type);
+      if (pointer_dims != target_dims)
+	break;
+
+      /* Now check that every dimension has the same upper bound, lower
+	 bound, and stride value.  */
+      int dim = 0;
+      while (dim < pointer_dims)
+	{
+	  LONGEST pointer_lowerbound, pointer_upperbound, pointer_stride;
+	  LONGEST target_lowerbound, target_upperbound, target_stride;
+
+	  pointer_type = check_typedef (pointer_type);
+	  target_type = check_typedef (target_type);
 
-  lai->string_char_type = builtin->builtin_character;
-  lai->primitive_type_vector
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1,
-                              struct type *);
+	  struct type *pointer_range = pointer_type->index_type ();
+	  struct type *target_range = target_type->index_type ();
 
-  lai->primitive_type_vector [f_primitive_type_character]
-    = builtin->builtin_character;
-  lai->primitive_type_vector [f_primitive_type_logical]
-    = builtin->builtin_logical;
-  lai->primitive_type_vector [f_primitive_type_logical_s1]
-    = builtin->builtin_logical_s1;
-  lai->primitive_type_vector [f_primitive_type_logical_s2]
-    = builtin->builtin_logical_s2;
-  lai->primitive_type_vector [f_primitive_type_logical_s8]
-    = builtin->builtin_logical_s8;
-  lai->primitive_type_vector [f_primitive_type_real]
-    = builtin->builtin_real;
-  lai->primitive_type_vector [f_primitive_type_real_s8]
-    = builtin->builtin_real_s8;
-  lai->primitive_type_vector [f_primitive_type_real_s16]
-    = builtin->builtin_real_s16;
-  lai->primitive_type_vector [f_primitive_type_complex_s8]
-    = builtin->builtin_complex_s8;
-  lai->primitive_type_vector [f_primitive_type_complex_s16]
-    = builtin->builtin_complex_s16;
-  lai->primitive_type_vector [f_primitive_type_void]
-    = builtin->builtin_void;
+	  if (!get_discrete_bounds (pointer_range, &pointer_lowerbound,
+				    &pointer_upperbound))
+	    break;
+
+	  if (!get_discrete_bounds (target_range, &target_lowerbound,
+				    &target_upperbound))
+	    break;
+
+	  if (pointer_lowerbound != target_lowerbound
+	      || pointer_upperbound != target_upperbound)
+	    break;
+
+	  /* Figure out the stride (in bits) for both pointer and target.
+	     If either doesn't have a stride then we take the element size,
+	     but we need to convert to bits (hence the * 8).  */
+	  pointer_stride = pointer_range->bounds ()->bit_stride ();
+	  if (pointer_stride == 0)
+	    pointer_stride
+	      = type_length_units (check_typedef
+				     (TYPE_TARGET_TYPE (pointer_type))) * 8;
+	  target_stride = target_range->bounds ()->bit_stride ();
+	  if (target_stride == 0)
+	    target_stride
+	      = type_length_units (check_typedef
+				     (TYPE_TARGET_TYPE (target_type))) * 8;
+	  if (pointer_stride != target_stride)
+	    break;
 
-  lai->bool_type_symbol = "logical";
-  lai->bool_type_default = builtin->builtin_logical_s2;
+	  ++dim;
+	}
+
+      if (dim < pointer_dims)
+	break;
+
+      is_associated = true;
+    }
+  while (false);
+
+  return value_from_longest (result_type, is_associated ? 1 : 0);
+}
+
+struct value *
+eval_op_f_associated (struct type *expect_type,
+		      struct expression *exp,
+		      enum noside noside,
+		      enum exp_opcode opcode,
+		      struct value *arg1)
+{
+  return fortran_associated (exp->gdbarch, exp->language_defn, arg1);
 }
 
-/* Remove the modules separator :: from the default break list.  */
+struct value *
+eval_op_f_associated (struct type *expect_type,
+		      struct expression *exp,
+		      enum noside noside,
+		      enum exp_opcode opcode,
+		      struct value *arg1,
+		      struct value *arg2)
+{
+  return fortran_associated (exp->gdbarch, exp->language_defn, arg1, arg2);
+}
+
+/* Implement FORTRAN_ARRAY_SIZE expression, this corresponds to the 'SIZE'
+   keyword.  Both GDBARCH and LANG are extracted from the expression being
+   evaluated.  ARRAY is the value that should be an array, though this will
+   not have been checked before calling this function.  DIM is optional, if
+   present then it should be an integer identifying a dimension of the
+   array to ask about.  As with ARRAY the validity of DIM is not checked
+   before calling this function.
+
+   Return either the total number of elements in ARRAY (when DIM is
+   nullptr), or the number of elements in dimension DIM.  */
 
-static const char *
-f_word_break_characters (void)
+static struct value *
+fortran_array_size (struct gdbarch *gdbarch, const language_defn *lang,
+		    struct value *array, struct value *dim_val = nullptr)
 {
-  static char *retval;
+  /* Check that ARRAY is the correct type.  */
+  struct type *array_type = check_typedef (value_type (array));
+  if (array_type->code () != TYPE_CODE_ARRAY)
+    error (_("SIZE can only be applied to arrays"));
+  if (type_not_allocated (array_type) || type_not_associated (array_type))
+    error (_("SIZE can only be used on allocated/associated arrays"));
+
+  int ndimensions = calc_f77_array_dims (array_type);
+  int dim = -1;
+  LONGEST result = 0;
 
-  if (!retval)
+  if (dim_val != nullptr)
     {
-      char *s;
+      if (check_typedef (value_type (dim_val))->code () != TYPE_CODE_INT)
+	error (_("DIM argument to SIZE must be an integer"));
+      dim = (int) value_as_long (dim_val);
+
+      if (dim < 1 || dim > ndimensions)
+	error (_("DIM argument to SIZE must be between 1 and %d"),
+	       ndimensions);
+    }
 
-      retval = xstrdup (default_word_break_characters ());
-      s = strchr (retval, ':');
-      if (s)
+  /* Now walk over all the dimensions of the array totalling up the
+     elements in each dimension.  */
+  for (int i = ndimensions - 1; i >= 0; --i)
+    {
+      /* If this is the requested dimension then we're done.  Grab the
+	 bounds and return.  */
+      if (i == dim - 1 || dim == -1)
 	{
-	  char *last_char = &s[strlen (s) - 1];
+	  LONGEST lbound, ubound;
+	  struct type *range = array_type->index_type ();
 
-	  *s = *last_char;
-	  *last_char = 0;
+	  if (!get_discrete_bounds (range, &lbound, &ubound))
+	    error (_("failed to find array bounds"));
+
+	  LONGEST dim_size = (ubound - lbound + 1);
+	  if (result == 0)
+	    result = dim_size;
+	  else
+	    result *= dim_size;
+
+	  if (dim != -1)
+	    break;
 	}
+
+      /* Peel off another dimension of the array.  */
+      array_type = TYPE_TARGET_TYPE (array_type);
     }
-  return retval;
+
+  struct type *result_type
+    = builtin_f_type (gdbarch)->builtin_integer;
+  return value_from_longest (result_type, result);
 }
 
-/* Consider the modules separator :: as a valid symbol name character
-   class.  */
+/* See f-exp.h.  */
 
-static void
-f_collect_symbol_completion_matches (completion_tracker &tracker,
-				     complete_symbol_mode mode,
-				     symbol_name_match_type compare_name,
-				     const char *text, const char *word,
-				     enum type_code code)
-{
-  default_collect_symbol_completion_matches_break_on (tracker, mode,
-						      compare_name,
-						      text, word, ":", code);
+struct value *
+eval_op_f_array_size (struct type *expect_type,
+		      struct expression *exp,
+		      enum noside noside,
+		      enum exp_opcode opcode,
+		      struct value *arg1)
+{
+  gdb_assert (opcode == FORTRAN_ARRAY_SIZE);
+  return fortran_array_size (exp->gdbarch, exp->language_defn, arg1);
 }
 
-/* Special expression evaluation cases for Fortran.  */
+/* See f-exp.h.  */
+
+struct value *
+eval_op_f_array_size (struct type *expect_type,
+		      struct expression *exp,
+		      enum noside noside,
+		      enum exp_opcode opcode,
+		      struct value *arg1,
+		      struct value *arg2)
+{
+  gdb_assert (opcode == FORTRAN_ARRAY_SIZE);
+  return fortran_array_size (exp->gdbarch, exp->language_defn, arg1, arg2);
+}
+
+/* Implement UNOP_FORTRAN_SHAPE expression.  Both GDBARCH and LANG are
+   extracted from the expression being evaluated.  VAL is the value on
+   which 'shape' was used, this can be any type.
+
+   Return an array of integers.  If VAL is not an array then the returned
+   array should have zero elements.  If VAL is an array then the returned
+   array should have one element per dimension, with the element
+   containing the extent of that dimension from VAL.  */
 
 static struct value *
-evaluate_subexp_f (struct type *expect_type, struct expression *exp,
-		   int *pos, enum noside noside)
+fortran_array_shape (struct gdbarch *gdbarch, const language_defn *lang,
+		     struct value *val)
 {
-  struct value *arg1 = NULL, *arg2 = NULL;
-  enum exp_opcode op;
-  int pc;
-  struct type *type;
-
-  pc = *pos;
-  *pos += 1;
-  op = exp->elts[pc].opcode;
+  struct type *val_type = check_typedef (value_type (val));
 
-  switch (op)
+  /* If we are passed an array that is either not allocated, or not
+     associated, then this is explicitly not allowed according to the
+     Fortran specification.  */
+  if (val_type->code () == TYPE_CODE_ARRAY
+      && (type_not_associated (val_type) || type_not_allocated (val_type)))
+    error (_("The array passed to SHAPE must be allocated or associated"));
+
+  /* The Fortran specification allows non-array types to be passed to this
+     function, in which case we get back an empty array.
+
+     Calculate the number of dimensions for the resulting array.  */
+  int ndimensions = 0;
+  if (val_type->code () == TYPE_CODE_ARRAY)
+    ndimensions = calc_f77_array_dims (val_type);
+
+  /* Allocate a result value of the correct type.  */
+  struct type *range
+    = create_static_range_type (nullptr,
+				builtin_type (gdbarch)->builtin_int,
+				1, ndimensions);
+  struct type *elm_type = builtin_f_type (gdbarch)->builtin_integer;
+  struct type *result_type = create_array_type (nullptr, elm_type, range);
+  struct value *result = allocate_value (result_type);
+  LONGEST elm_len = TYPE_LENGTH (elm_type);
+
+  /* Walk the array dimensions backwards due to the way the array will be
+     laid out in memory, the first dimension will be the most inner.
+
+     If VAL was not an array then ndimensions will be 0, in which case we
+     will never go around this loop.  */
+  for (LONGEST dst_offset = elm_len * (ndimensions - 1);
+       dst_offset >= 0;
+       dst_offset -= elm_len)
     {
-    default:
-      *pos -= 1;
-      return evaluate_subexp_standard (expect_type, exp, pos, noside);
+      LONGEST lbound, ubound;
 
-    case UNOP_ABS:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      type = value_type (arg1);
-      switch (TYPE_CODE (type))
-	{
-	case TYPE_CODE_FLT:
-	  {
-	    double d
-	      = fabs (target_float_to_host_double (value_contents (arg1),
-						   value_type (arg1)));
-	    return value_from_host_double (type, d);
-	  }
-	case TYPE_CODE_INT:
-	  {
-	    LONGEST l = value_as_long (arg1);
-	    l = llabs (l);
-	    return value_from_longest (type, l);
-	  }
-	}
-      error (_("ABS of type %s not supported"), TYPE_SAFE_NAME (type));
-
-    case BINOP_MOD:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      type = value_type (arg1);
-      if (TYPE_CODE (type) != TYPE_CODE (value_type (arg2)))
-	error (_("non-matching types for parameters to MOD ()"));
-      switch (TYPE_CODE (type))
-	{
-	case TYPE_CODE_FLT:
-	  {
-	    double d1
-	      = target_float_to_host_double (value_contents (arg1),
-					     value_type (arg1));
-	    double d2
-	      = target_float_to_host_double (value_contents (arg2),
-					     value_type (arg2));
-	    double d3 = fmod (d1, d2);
-	    return value_from_host_double (type, d3);
-	  }
-	case TYPE_CODE_INT:
-	  {
-	    LONGEST v1 = value_as_long (arg1);
-	    LONGEST v2 = value_as_long (arg2);
-	    if (v2 == 0)
-	      error (_("calling MOD (N, 0) is undefined"));
-	    LONGEST v3 = v1 - (v1 / v2) * v2;
-	    return value_from_longest (value_type (arg1), v3);
-	  }
-	}
-      error (_("MOD of type %s not supported"), TYPE_SAFE_NAME (type));
+      if (!get_discrete_bounds (val_type->index_type (), &lbound, &ubound))
+	error (_("failed to find array bounds"));
+
+      LONGEST dim_size = (ubound - lbound + 1);
+
+      /* And copy the value into the result value.  */
+      struct value *v = value_from_longest (elm_type, dim_size);
+      gdb_assert (dst_offset + TYPE_LENGTH (value_type (v))
+		  <= TYPE_LENGTH (value_type (result)));
+      gdb_assert (TYPE_LENGTH (value_type (v)) == elm_len);
+      value_contents_copy (result, dst_offset, v, 0, elm_len);
+
+      /* Peel another dimension of the array.  */
+      val_type = TYPE_TARGET_TYPE (val_type);
+    }
+
+  return result;
+}
+
+/* See f-exp.h.  */
+
+struct value *
+eval_op_f_array_shape (struct type *expect_type, struct expression *exp,
+		       enum noside noside, enum exp_opcode opcode,
+		       struct value *arg1)
+{
+  gdb_assert (opcode == UNOP_FORTRAN_SHAPE);
+  return fortran_array_shape (exp->gdbarch, exp->language_defn, arg1);
+}
 
-    case UNOP_FORTRAN_CEILING:
+/* A helper function for UNOP_ABS.  */
+
+struct value *
+eval_op_f_abs (struct type *expect_type, struct expression *exp,
+	       enum noside noside,
+	       enum exp_opcode opcode,
+	       struct value *arg1)
+{
+  struct type *type = value_type (arg1);
+  switch (type->code ())
+    {
+    case TYPE_CODE_FLT:
       {
-	arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	if (noside == EVAL_SKIP)
-	  return eval_skip_value (exp);
-	type = value_type (arg1);
-	if (TYPE_CODE (type) != TYPE_CODE_FLT)
-	  error (_("argument to CEILING must be of type float"));
-	double val
-	  = target_float_to_host_double (value_contents (arg1),
-					 value_type (arg1));
-	val = ceil (val);
-	return value_from_host_double (type, val);
+	double d
+	  = fabs (target_float_to_host_double (value_contents (arg1),
+					       value_type (arg1)));
+	return value_from_host_double (type, d);
       }
+    case TYPE_CODE_INT:
+      {
+	LONGEST l = value_as_long (arg1);
+	l = llabs (l);
+	return value_from_longest (type, l);
+      }
+    }
+  error (_("ABS of type %s not supported"), TYPE_SAFE_NAME (type));
+}
+
+/* A helper function for BINOP_MOD.  */
 
-    case UNOP_FORTRAN_FLOOR:
+struct value *
+eval_op_f_mod (struct type *expect_type, struct expression *exp,
+	       enum noside noside,
+	       enum exp_opcode opcode,
+	       struct value *arg1, struct value *arg2)
+{
+  struct type *type = value_type (arg1);
+  if (type->code () != value_type (arg2)->code ())
+    error (_("non-matching types for parameters to MOD ()"));
+  switch (type->code ())
+    {
+    case TYPE_CODE_FLT:
       {
-	arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	if (noside == EVAL_SKIP)
-	  return eval_skip_value (exp);
-	type = value_type (arg1);
-	if (TYPE_CODE (type) != TYPE_CODE_FLT)
-	  error (_("argument to FLOOR must be of type float"));
-	double val
+	double d1
 	  = target_float_to_host_double (value_contents (arg1),
 					 value_type (arg1));
-	val = floor (val);
-	return value_from_host_double (type, val);
+	double d2
+	  = target_float_to_host_double (value_contents (arg2),
+					 value_type (arg2));
+	double d3 = fmod (d1, d2);
+	return value_from_host_double (type, d3);
       }
-
-    case BINOP_FORTRAN_MODULO:
+    case TYPE_CODE_INT:
       {
-	arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-	arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-	if (noside == EVAL_SKIP)
-	  return eval_skip_value (exp);
-	type = value_type (arg1);
-	if (TYPE_CODE (type) != TYPE_CODE (value_type (arg2)))
-	  error (_("non-matching types for parameters to MODULO ()"));
-        /* MODULO(A, P) = A - FLOOR (A / P) * P */
-	switch (TYPE_CODE (type))
-	  {
-	  case TYPE_CODE_INT:
-	    {
-	      LONGEST a = value_as_long (arg1);
-	      LONGEST p = value_as_long (arg2);
-	      LONGEST result = a - (a / p) * p;
-	      if (result != 0 && (a < 0) != (p < 0))
-		result += p;
-	      return value_from_longest (value_type (arg1), result);
-	    }
-	  case TYPE_CODE_FLT:
-	    {
-	      double a
-		= target_float_to_host_double (value_contents (arg1),
-					       value_type (arg1));
-	      double p
-		= target_float_to_host_double (value_contents (arg2),
-					       value_type (arg2));
-	      double result = fmod (a, p);
-	      if (result != 0 && (a < 0.0) != (p < 0.0))
-		result += p;
-	      return value_from_host_double (type, result);
-	    }
-	  }
-	error (_("MODULO of type %s not supported"), TYPE_SAFE_NAME (type));
+	LONGEST v1 = value_as_long (arg1);
+	LONGEST v2 = value_as_long (arg2);
+	if (v2 == 0)
+	  error (_("calling MOD (N, 0) is undefined"));
+	LONGEST v3 = v1 - (v1 / v2) * v2;
+	return value_from_longest (value_type (arg1), v3);
       }
-
-    case BINOP_FORTRAN_CMPLX:
-      arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
-      arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	return eval_skip_value (exp);
-      type = builtin_f_type(exp->gdbarch)->builtin_complex_s16;
-      return value_literal_complex (arg1, arg2, type);
-
-    case UNOP_FORTRAN_KIND:
-      arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
-      type = value_type (arg1);
-
-      switch (TYPE_CODE (type))
-        {
-          case TYPE_CODE_STRUCT:
-          case TYPE_CODE_UNION:
-          case TYPE_CODE_MODULE:
-          case TYPE_CODE_FUNC:
-            error (_("argument to kind must be an intrinsic type"));
-        }
-
-      if (!TYPE_TARGET_TYPE (type))
-        return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
-				   TYPE_LENGTH (type));
-      return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
-				 TYPE_LENGTH (TYPE_TARGET_TYPE(type)));
     }
+  error (_("MOD of type %s not supported"), TYPE_SAFE_NAME (type));
+}
+
+/* A helper function for UNOP_FORTRAN_CEILING.  */
 
-  /* Should be unreachable.  */
-  return nullptr;
+struct value *
+eval_op_f_ceil (struct type *expect_type, struct expression *exp,
+		enum noside noside,
+		enum exp_opcode opcode,
+		struct value *arg1)
+{
+  struct type *type = value_type (arg1);
+  if (type->code () != TYPE_CODE_FLT)
+    error (_("argument to CEILING must be of type float"));
+  double val
+    = target_float_to_host_double (value_contents (arg1),
+				   value_type (arg1));
+  val = ceil (val);
+  return value_from_host_double (type, val);
+}
+
+/* A helper function for UNOP_FORTRAN_FLOOR.  */
+
+struct value *
+eval_op_f_floor (struct type *expect_type, struct expression *exp,
+		 enum noside noside,
+		 enum exp_opcode opcode,
+		 struct value *arg1)
+{
+  struct type *type = value_type (arg1);
+  if (type->code () != TYPE_CODE_FLT)
+    error (_("argument to FLOOR must be of type float"));
+  double val
+    = target_float_to_host_double (value_contents (arg1),
+				   value_type (arg1));
+  val = floor (val);
+  return value_from_host_double (type, val);
 }
 
-/* Return true if TYPE is a string.  */
+/* A helper function for BINOP_FORTRAN_MODULO.  */
 
-static bool
-f_is_string_type_p (struct type *type)
+struct value *
+eval_op_f_modulo (struct type *expect_type, struct expression *exp,
+		  enum noside noside,
+		  enum exp_opcode opcode,
+		  struct value *arg1, struct value *arg2)
+{
+  struct type *type = value_type (arg1);
+  if (type->code () != value_type (arg2)->code ())
+    error (_("non-matching types for parameters to MODULO ()"));
+  /* MODULO(A, P) = A - FLOOR (A / P) * P */
+  switch (type->code ())
+    {
+    case TYPE_CODE_INT:
+      {
+	LONGEST a = value_as_long (arg1);
+	LONGEST p = value_as_long (arg2);
+	LONGEST result = a - (a / p) * p;
+	if (result != 0 && (a < 0) != (p < 0))
+	  result += p;
+	return value_from_longest (value_type (arg1), result);
+      }
+    case TYPE_CODE_FLT:
+      {
+	double a
+	  = target_float_to_host_double (value_contents (arg1),
+					 value_type (arg1));
+	double p
+	  = target_float_to_host_double (value_contents (arg2),
+					 value_type (arg2));
+	double result = fmod (a, p);
+	if (result != 0 && (a < 0.0) != (p < 0.0))
+	  result += p;
+	return value_from_host_double (type, result);
+      }
+    }
+  error (_("MODULO of type %s not supported"), TYPE_SAFE_NAME (type));
+}
+
+/* A helper function for BINOP_FORTRAN_CMPLX.  */
+
+struct value *
+eval_op_f_cmplx (struct type *expect_type, struct expression *exp,
+		 enum noside noside,
+		 enum exp_opcode opcode,
+		 struct value *arg1, struct value *arg2)
 {
-  type = check_typedef (type);
-  return (TYPE_CODE (type) == TYPE_CODE_STRING
-	  || (TYPE_CODE (type) == TYPE_CODE_ARRAY
-	      && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR));
+  struct type *type = builtin_f_type(exp->gdbarch)->builtin_complex_s16;
+  return value_literal_complex (arg1, arg2, type);
 }
 
-/* Special expression lengths for Fortran.  */
+/* A helper function for UNOP_FORTRAN_KIND.  */
 
-static void
-operator_length_f (const struct expression *exp, int pc, int *oplenp,
-		   int *argsp)
+struct value *
+eval_op_f_kind (struct type *expect_type, struct expression *exp,
+		enum noside noside,
+		enum exp_opcode opcode,
+		struct value *arg1)
 {
-  int oplen = 1;
-  int args = 0;
+  struct type *type = value_type (arg1);
 
-  switch (exp->elts[pc - 1].opcode)
+  switch (type->code ())
     {
-    default:
-      operator_length_standard (exp, pc, oplenp, argsp);
-      return;
+    case TYPE_CODE_STRUCT:
+    case TYPE_CODE_UNION:
+    case TYPE_CODE_MODULE:
+    case TYPE_CODE_FUNC:
+      error (_("argument to kind must be an intrinsic type"));
+    }
 
-    case UNOP_FORTRAN_KIND:
-    case UNOP_FORTRAN_FLOOR:
-    case UNOP_FORTRAN_CEILING:
-      oplen = 1;
-      args = 1;
-      break;
+  if (!TYPE_TARGET_TYPE (type))
+    return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
+			       TYPE_LENGTH (type));
+  return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
+			     TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
+}
 
-    case BINOP_FORTRAN_CMPLX:
-    case BINOP_FORTRAN_MODULO:
-      oplen = 1;
-      args = 2;
-      break;
-    }
+/* A helper function for UNOP_FORTRAN_ALLOCATED.  */
 
-  *oplenp = oplen;
-  *argsp = args;
+struct value *
+eval_op_f_allocated (struct type *expect_type, struct expression *exp,
+		     enum noside noside, enum exp_opcode op,
+		     struct value *arg1)
+{
+  struct type *type = check_typedef (value_type (arg1));
+  if (type->code () != TYPE_CODE_ARRAY)
+    error (_("ALLOCATED can only be applied to arrays"));
+  struct type *result_type
+    = builtin_f_type (exp->gdbarch)->builtin_logical;
+  LONGEST result_value = type_not_allocated (type) ? 0 : 1;
+  return value_from_longest (result_type, result_value);
 }
 
-/* Helper for PRINT_SUBEXP_F.  Arguments are as for PRINT_SUBEXP_F, except
-   the extra argument NAME which is the text that should be printed as the
-   name of this operation.  */
+/* See f-exp.h.  */
 
-static void
-print_unop_subexp_f (struct expression *exp, int *pos,
-		     struct ui_file *stream, enum precedence prec,
-		     const char *name)
-{
-  (*pos)++;
-  fprintf_filtered (stream, "%s(", name);
-  print_subexp (exp, pos, stream, PREC_SUFFIX);
-  fputs_filtered (")", stream);
+struct value *
+eval_op_f_rank (struct type *expect_type,
+		struct expression *exp,
+		enum noside noside,
+		enum exp_opcode op,
+		struct value *arg1)
+{
+  gdb_assert (op == UNOP_FORTRAN_RANK);
+
+  struct type *result_type
+    = builtin_f_type (exp->gdbarch)->builtin_integer;
+  struct type *type = check_typedef (value_type (arg1));
+  if (type->code () != TYPE_CODE_ARRAY)
+    return value_from_longest (result_type, 0);
+  LONGEST ndim = calc_f77_array_dims (type);
+  return value_from_longest (result_type, ndim);
 }
 
-/* Helper for PRINT_SUBEXP_F.  Arguments are as for PRINT_SUBEXP_F, except
-   the extra argument NAME which is the text that should be printed as the
-   name of this operation.  */
+/* A helper function for UNOP_FORTRAN_LOC.  */
 
-static void
-print_binop_subexp_f (struct expression *exp, int *pos,
-		      struct ui_file *stream, enum precedence prec,
-		      const char *name)
-{
-  (*pos)++;
-  fprintf_filtered (stream, "%s(", name);
-  print_subexp (exp, pos, stream, PREC_SUFFIX);
-  fputs_filtered (",", stream);
-  print_subexp (exp, pos, stream, PREC_SUFFIX);
-  fputs_filtered (")", stream);
+struct value *
+eval_op_f_loc (struct type *expect_type, struct expression *exp,
+		     enum noside noside, enum exp_opcode op,
+		     struct value *arg1)
+{
+  struct type *result_type;
+  if (gdbarch_ptr_bit (exp->gdbarch) == 16)
+    result_type = builtin_f_type (exp->gdbarch)->builtin_integer_s2;
+  else if (gdbarch_ptr_bit (exp->gdbarch) == 32)
+    result_type = builtin_f_type (exp->gdbarch)->builtin_integer;
+  else
+    result_type = builtin_f_type (exp->gdbarch)->builtin_integer_s8;
+
+  LONGEST result_value = value_address (arg1);
+  return value_from_longest (result_type, result_value);
 }
 
-/* Special expression printing for Fortran.  */
+namespace expr
+{
 
-static void
-print_subexp_f (struct expression *exp, int *pos,
-		struct ui_file *stream, enum precedence prec)
+/* Called from evaluate to perform array indexing, and sub-range
+   extraction, for Fortran.  As well as arrays this function also
+   handles strings as they can be treated like arrays of characters.
+   ARRAY is the array or string being accessed.  EXP and NOSIDE are as
+   for evaluate.  */
+
+value *
+fortran_undetermined::value_subarray (value *array,
+				      struct expression *exp,
+				      enum noside noside)
 {
-  int pc = *pos;
-  enum exp_opcode op = exp->elts[pc].opcode;
+  type *original_array_type = check_typedef (value_type (array));
+  bool is_string_p = original_array_type->code () == TYPE_CODE_STRING;
+  const std::vector<operation_up> &ops = std::get<1> (m_storage);
+  int nargs = ops.size ();
 
-  switch (op)
+  /* Perform checks for ARRAY not being available.  The somewhat overly
+     complex logic here is just to keep backward compatibility with the
+     errors that we used to get before FORTRAN_VALUE_SUBARRAY was
+     rewritten.  Maybe a future task would streamline the error messages we
+     get here, and update all the expected test results.  */
+  if (ops[0]->opcode () != OP_RANGE)
     {
-    default:
-      print_subexp_standard (exp, pos, stream, prec);
-      return;
+      if (type_not_associated (original_array_type))
+	error (_("no such vector element (vector not associated)"));
+      else if (type_not_allocated (original_array_type))
+	error (_("no such vector element (vector not allocated)"));
+    }
+  else
+    {
+      if (type_not_associated (original_array_type))
+	error (_("array not associated"));
+      else if (type_not_allocated (original_array_type))
+	error (_("array not allocated"));
+    }
+
+  /* First check that the number of dimensions in the type we are slicing
+     matches the number of arguments we were passed.  */
+  int ndimensions = calc_f77_array_dims (original_array_type);
+  if (nargs != ndimensions)
+    error (_("Wrong number of subscripts"));
+
+  /* This will be initialised below with the type of the elements held in
+     ARRAY.  */
+  struct type *inner_element_type;
+
+  /* Extract the types of each array dimension from the original array
+     type.  We need these available so we can fill in the default upper and
+     lower bounds if the user requested slice doesn't provide that
+     information.  Additionally unpacking the dimensions like this gives us
+     the inner element type.  */
+  std::vector<struct type *> dim_types;
+  {
+    dim_types.reserve (ndimensions);
+    struct type *type = original_array_type;
+    for (int i = 0; i < ndimensions; ++i)
+      {
+	dim_types.push_back (type);
+	type = TYPE_TARGET_TYPE (type);
+      }
+    /* TYPE is now the inner element type of the array, we start the new
+       array slice off as this type, then as we process the requested slice
+       (from the user) we wrap new types around this to build up the final
+       slice type.  */
+    inner_element_type = type;
+  }
+
+  /* As we analyse the new slice type we need to understand if the data
+     being referenced is contiguous.  Do decide this we must track the size
+     of an element at each dimension of the new slice array.  Initially the
+     elements of the inner most dimension of the array are the same inner
+     most elements as the original ARRAY.  */
+  LONGEST slice_element_size = TYPE_LENGTH (inner_element_type);
+
+  /* Start off assuming all data is contiguous, this will be set to false
+     if access to any dimension results in non-contiguous data.  */
+  bool is_all_contiguous = true;
+
+  /* The TOTAL_OFFSET is the distance in bytes from the start of the
+     original ARRAY to the start of the new slice.  This is calculated as
+     we process the information from the user.  */
+  LONGEST total_offset = 0;
+
+  /* A structure representing information about each dimension of the
+     resulting slice.  */
+  struct slice_dim
+  {
+    /* Constructor.  */
+    slice_dim (LONGEST l, LONGEST h, LONGEST s, struct type *idx)
+      : low (l),
+	high (h),
+	stride (s),
+	index (idx)
+    { /* Nothing.  */ }
+
+    /* The low bound for this dimension of the slice.  */
+    LONGEST low;
+
+    /* The high bound for this dimension of the slice.  */
+    LONGEST high;
+
+    /* The byte stride for this dimension of the slice.  */
+    LONGEST stride;
+
+    struct type *index;
+  };
+
+  /* The dimensions of the resulting slice.  */
+  std::vector<slice_dim> slice_dims;
+
+  /* Process the incoming arguments.   These arguments are in the reverse
+     order to the array dimensions, that is the first argument refers to
+     the last array dimension.  */
+  if (fortran_array_slicing_debug)
+    debug_printf ("Processing array access:\n");
+  for (int i = 0; i < nargs; ++i)
+    {
+      /* For each dimension of the array the user will have either provided
+	 a ranged access with optional lower bound, upper bound, and
+	 stride, or the user will have supplied a single index.  */
+      struct type *dim_type = dim_types[ndimensions - (i + 1)];
+      fortran_range_operation *range_op
+	= dynamic_cast<fortran_range_operation *> (ops[i].get ());
+      if (range_op != nullptr)
+	{
+	  enum range_flag range_flag = range_op->get_flags ();
 
-    case UNOP_FORTRAN_KIND:
-      print_unop_subexp_f (exp, pos, stream, prec, "KIND");
-      return;
+	  LONGEST low, high, stride;
+	  low = high = stride = 0;
 
-    case UNOP_FORTRAN_FLOOR:
-      print_unop_subexp_f (exp, pos, stream, prec, "FLOOR");
-      return;
+	  if ((range_flag & RANGE_LOW_BOUND_DEFAULT) == 0)
+	    low = value_as_long (range_op->evaluate0 (exp, noside));
+	  else
+	    low = f77_get_lowerbound (dim_type);
+	  if ((range_flag & RANGE_HIGH_BOUND_DEFAULT) == 0)
+	    high = value_as_long (range_op->evaluate1 (exp, noside));
+	  else
+	    high = f77_get_upperbound (dim_type);
+	  if ((range_flag & RANGE_HAS_STRIDE) == RANGE_HAS_STRIDE)
+	    stride = value_as_long (range_op->evaluate2 (exp, noside));
+	  else
+	    stride = 1;
+
+	  if (stride == 0)
+	    error (_("stride must not be 0"));
+
+	  /* Get information about this dimension in the original ARRAY.  */
+	  struct type *target_type = TYPE_TARGET_TYPE (dim_type);
+	  struct type *index_type = dim_type->index_type ();
+	  LONGEST lb = f77_get_lowerbound (dim_type);
+	  LONGEST ub = f77_get_upperbound (dim_type);
+	  LONGEST sd = index_type->bit_stride ();
+	  if (sd == 0)
+	    sd = TYPE_LENGTH (target_type) * 8;
 
-    case UNOP_FORTRAN_CEILING:
-      print_unop_subexp_f (exp, pos, stream, prec, "CEILING");
-      return;
+	  if (fortran_array_slicing_debug)
+	    {
+	      debug_printf ("|-> Range access\n");
+	      std::string str = type_to_string (dim_type);
+	      debug_printf ("|   |-> Type: %s\n", str.c_str ());
+	      debug_printf ("|   |-> Array:\n");
+	      debug_printf ("|   |   |-> Low bound: %s\n", plongest (lb));
+	      debug_printf ("|   |   |-> High bound: %s\n", plongest (ub));
+	      debug_printf ("|   |   |-> Bit stride: %s\n", plongest (sd));
+	      debug_printf ("|   |   |-> Byte stride: %s\n", plongest (sd / 8));
+	      debug_printf ("|   |   |-> Type size: %s\n",
+			    pulongest (TYPE_LENGTH (dim_type)));
+	      debug_printf ("|   |   '-> Target type size: %s\n",
+			    pulongest (TYPE_LENGTH (target_type)));
+	      debug_printf ("|   |-> Accessing:\n");
+	      debug_printf ("|   |   |-> Low bound: %s\n",
+			    plongest (low));
+	      debug_printf ("|   |   |-> High bound: %s\n",
+			    plongest (high));
+	      debug_printf ("|   |   '-> Element stride: %s\n",
+			    plongest (stride));
+	    }
+
+	  /* Check the user hasn't asked for something invalid.  */
+	  if (high > ub || low < lb)
+	    error (_("array subscript out of bounds"));
+
+	  /* Calculate what this dimension of the new slice array will look
+	     like.  OFFSET is the byte offset from the start of the
+	     previous (more outer) dimension to the start of this
+	     dimension.  E_COUNT is the number of elements in this
+	     dimension.  REMAINDER is the number of elements remaining
+	     between the last included element and the upper bound.  For
+	     example an access '1:6:2' will include elements 1, 3, 5 and
+	     have a remainder of 1 (element #6).  */
+	  LONGEST lowest = std::min (low, high);
+	  LONGEST offset = (sd / 8) * (lowest - lb);
+	  LONGEST e_count = std::abs (high - low) + 1;
+	  e_count = (e_count + (std::abs (stride) - 1)) / std::abs (stride);
+	  LONGEST new_low = 1;
+	  LONGEST new_high = new_low + e_count - 1;
+	  LONGEST new_stride = (sd * stride) / 8;
+	  LONGEST last_elem = low + ((e_count - 1) * stride);
+	  LONGEST remainder = high - last_elem;
+	  if (low > high)
+	    {
+	      offset += std::abs (remainder) * TYPE_LENGTH (target_type);
+	      if (stride > 0)
+		error (_("incorrect stride and boundary combination"));
+	    }
+	  else if (stride < 0)
+	    error (_("incorrect stride and boundary combination"));
+
+	  /* Is the data within this dimension contiguous?  It is if the
+	     newly computed stride is the same size as a single element of
+	     this dimension.  */
+	  bool is_dim_contiguous = (new_stride == slice_element_size);
+	  is_all_contiguous &= is_dim_contiguous;
+
+	  if (fortran_array_slicing_debug)
+	    {
+	      debug_printf ("|   '-> Results:\n");
+	      debug_printf ("|       |-> Offset = %s\n", plongest (offset));
+	      debug_printf ("|       |-> Elements = %s\n", plongest (e_count));
+	      debug_printf ("|       |-> Low bound = %s\n", plongest (new_low));
+	      debug_printf ("|       |-> High bound = %s\n",
+			    plongest (new_high));
+	      debug_printf ("|       |-> Byte stride = %s\n",
+			    plongest (new_stride));
+	      debug_printf ("|       |-> Last element = %s\n",
+			    plongest (last_elem));
+	      debug_printf ("|       |-> Remainder = %s\n",
+			    plongest (remainder));
+	      debug_printf ("|       '-> Contiguous = %s\n",
+			    (is_dim_contiguous ? "Yes" : "No"));
+	    }
+
+	  /* Figure out how big (in bytes) an element of this dimension of
+	     the new array slice will be.  */
+	  slice_element_size = std::abs (new_stride * e_count);
+
+	  slice_dims.emplace_back (new_low, new_high, new_stride,
+				   index_type);
+
+	  /* Update the total offset.  */
+	  total_offset += offset;
+	}
+      else
+	{
+	  /* There is a single index for this dimension.  */
+	  LONGEST index
+	    = value_as_long (ops[i]->evaluate_with_coercion (exp, noside));
+
+	  /* Get information about this dimension in the original ARRAY.  */
+	  struct type *target_type = TYPE_TARGET_TYPE (dim_type);
+	  struct type *index_type = dim_type->index_type ();
+	  LONGEST lb = f77_get_lowerbound (dim_type);
+	  LONGEST ub = f77_get_upperbound (dim_type);
+	  LONGEST sd = index_type->bit_stride () / 8;
+	  if (sd == 0)
+	    sd = TYPE_LENGTH (target_type);
+
+	  if (fortran_array_slicing_debug)
+	    {
+	      debug_printf ("|-> Index access\n");
+	      std::string str = type_to_string (dim_type);
+	      debug_printf ("|   |-> Type: %s\n", str.c_str ());
+	      debug_printf ("|   |-> Array:\n");
+	      debug_printf ("|   |   |-> Low bound: %s\n", plongest (lb));
+	      debug_printf ("|   |   |-> High bound: %s\n", plongest (ub));
+	      debug_printf ("|   |   |-> Byte stride: %s\n", plongest (sd));
+	      debug_printf ("|   |   |-> Type size: %s\n",
+			    pulongest (TYPE_LENGTH (dim_type)));
+	      debug_printf ("|   |   '-> Target type size: %s\n",
+			    pulongest (TYPE_LENGTH (target_type)));
+	      debug_printf ("|   '-> Accessing:\n");
+	      debug_printf ("|       '-> Index: %s\n",
+			    plongest (index));
+	    }
+
+	  /* If the array has actual content then check the index is in
+	     bounds.  An array without content (an unbound array) doesn't
+	     have a known upper bound, so don't error check in that
+	     situation.  */
+	  if (index < lb
+	      || (dim_type->index_type ()->bounds ()->high.kind () != PROP_UNDEFINED
+		  && index > ub)
+	      || (VALUE_LVAL (array) != lval_memory
+		  && dim_type->index_type ()->bounds ()->high.kind () == PROP_UNDEFINED))
+	    {
+	      if (type_not_associated (dim_type))
+		error (_("no such vector element (vector not associated)"));
+	      else if (type_not_allocated (dim_type))
+		error (_("no such vector element (vector not allocated)"));
+	      else
+		error (_("no such vector element"));
+	    }
+
+	  /* Calculate using the type stride, not the target type size.  */
+	  LONGEST offset = sd * (index - lb);
+	  total_offset += offset;
+	}
+    }
 
-    case BINOP_FORTRAN_CMPLX:
-      print_binop_subexp_f (exp, pos, stream, prec, "CMPLX");
-      return;
+  /* Build a type that represents the new array slice in the target memory
+     of the original ARRAY, this type makes use of strides to correctly
+     find only those elements that are part of the new slice.  */
+  struct type *array_slice_type = inner_element_type;
+  for (const auto &d : slice_dims)
+    {
+      /* Create the range.  */
+      dynamic_prop p_low, p_high, p_stride;
 
-    case BINOP_FORTRAN_MODULO:
-      print_binop_subexp_f (exp, pos, stream, prec, "MODULO");
-      return;
+      p_low.set_const_val (d.low);
+      p_high.set_const_val (d.high);
+      p_stride.set_const_val (d.stride);
+
+      struct type *new_range
+	= create_range_type_with_stride ((struct type *) NULL,
+					 TYPE_TARGET_TYPE (d.index),
+					 &p_low, &p_high, 0, &p_stride,
+					 true);
+      array_slice_type
+	= create_array_type (nullptr, array_slice_type, new_range);
     }
+
+  if (fortran_array_slicing_debug)
+    {
+      debug_printf ("'-> Final result:\n");
+      debug_printf ("    |-> Type: %s\n",
+		    type_to_string (array_slice_type).c_str ());
+      debug_printf ("    |-> Total offset: %s\n",
+		    plongest (total_offset));
+      debug_printf ("    |-> Base address: %s\n",
+		    core_addr_to_string (value_address (array)));
+      debug_printf ("    '-> Contiguous = %s\n",
+		    (is_all_contiguous ? "Yes" : "No"));
+    }
+
+  /* Should we repack this array slice?  */
+  if (!is_all_contiguous && (repack_array_slices || is_string_p))
+    {
+      /* Build a type for the repacked slice.  */
+      struct type *repacked_array_type = inner_element_type;
+      for (const auto &d : slice_dims)
+	{
+	  /* Create the range.  */
+	  dynamic_prop p_low, p_high, p_stride;
+
+	  p_low.set_const_val (d.low);
+	  p_high.set_const_val (d.high);
+	  p_stride.set_const_val (TYPE_LENGTH (repacked_array_type));
+
+	  struct type *new_range
+	    = create_range_type_with_stride ((struct type *) NULL,
+					     TYPE_TARGET_TYPE (d.index),
+					     &p_low, &p_high, 0, &p_stride,
+					     true);
+	  repacked_array_type
+	    = create_array_type (nullptr, repacked_array_type, new_range);
+	}
+
+      /* Now copy the elements from the original ARRAY into the packed
+	 array value DEST.  */
+      struct value *dest = allocate_value (repacked_array_type);
+      if (value_lazy (array)
+	  || (total_offset + TYPE_LENGTH (array_slice_type)
+	      > TYPE_LENGTH (check_typedef (value_type (array)))))
+	{
+	  fortran_array_walker<fortran_lazy_array_repacker_impl> p
+	    (array_slice_type, value_address (array) + total_offset, dest);
+	  p.walk ();
+	}
+      else
+	{
+	  fortran_array_walker<fortran_array_repacker_impl> p
+	    (array_slice_type, value_address (array) + total_offset,
+	     total_offset, array, dest);
+	  p.walk ();
+	}
+      array = dest;
+    }
+  else
+    {
+      if (VALUE_LVAL (array) == lval_memory)
+	{
+	  /* If the value we're taking a slice from is not yet loaded, or
+	     the requested slice is outside the values content range then
+	     just create a new lazy value pointing at the memory where the
+	     contents we're looking for exist.  */
+	  if (value_lazy (array)
+	      || (total_offset + TYPE_LENGTH (array_slice_type)
+		  > TYPE_LENGTH (check_typedef (value_type (array)))))
+	    array = value_at_lazy (array_slice_type,
+				   value_address (array) + total_offset);
+	  else
+	    array = value_from_contents_and_address (array_slice_type,
+						     (value_contents (array)
+						      + total_offset),
+						     (value_address (array)
+						      + total_offset));
+	}
+      else if (!value_lazy (array))
+	array = value_from_component (array, array_slice_type, total_offset);
+      else
+	error (_("cannot subscript arrays that are not in memory"));
+    }
+
+  return array;
 }
 
-/* Special expression names for Fortran.  */
+value *
+fortran_undetermined::evaluate (struct type *expect_type,
+				struct expression *exp,
+				enum noside noside)
+{
+  value *callee = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+  if (noside == EVAL_AVOID_SIDE_EFFECTS
+      && is_dynamic_type (value_type (callee)))
+    callee = std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_NORMAL);
+  struct type *type = check_typedef (value_type (callee));
+  enum type_code code = type->code ();
 
-static const char *
-op_name_f (enum exp_opcode opcode)
-{
-  switch (opcode)
+  if (code == TYPE_CODE_PTR)
     {
+      /* Fortran always passes variable to subroutines as pointer.
+	 So we need to look into its target type to see if it is
+	 array, string or function.  If it is, we need to switch
+	 to the target value the original one points to.  */
+      struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
+
+      if (target_type->code () == TYPE_CODE_ARRAY
+	  || target_type->code () == TYPE_CODE_STRING
+	  || target_type->code () == TYPE_CODE_FUNC)
+	{
+	  callee = value_ind (callee);
+	  type = check_typedef (value_type (callee));
+	  code = type->code ();
+	}
+    }
+
+  switch (code)
+    {
+    case TYPE_CODE_ARRAY:
+    case TYPE_CODE_STRING:
+      return value_subarray (callee, exp, noside);
+
+    case TYPE_CODE_PTR:
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_INTERNAL_FUNCTION:
+      {
+	/* It's a function call.  Allocate arg vector, including
+	   space for the function to be called in argvec[0] and a
+	   termination NULL.  */
+	const std::vector<operation_up> &actual (std::get<1> (m_storage));
+	std::vector<value *> argvec (actual.size ());
+	bool is_internal_func = (code == TYPE_CODE_INTERNAL_FUNCTION);
+	for (int tem = 0; tem < argvec.size (); tem++)
+	  argvec[tem] = fortran_prepare_argument (exp, actual[tem].get (),
+						  tem, is_internal_func,
+						  value_type (callee),
+						  noside);
+	return evaluate_subexp_do_call (exp, noside, callee, argvec,
+					nullptr, expect_type);
+      }
+
     default:
-      return op_name_standard (opcode);
+      error (_("Cannot perform substring on this type"));
+    }
+}
 
-#define OP(name)	\
-    case name:		\
-      return #name ;
-#include "fortran-operator.def"
-#undef OP
+value *
+fortran_bound_1arg::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  bool lbound_p = std::get<0> (m_storage) == FORTRAN_LBOUND;
+  value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  fortran_require_array (value_type (arg1), lbound_p);
+  return fortran_bounds_all_dims (lbound_p, exp->gdbarch, arg1);
+}
+
+value *
+fortran_bound_2arg::evaluate (struct type *expect_type,
+			      struct expression *exp,
+			      enum noside noside)
+{
+  bool lbound_p = std::get<0> (m_storage) == FORTRAN_LBOUND;
+  value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
+  fortran_require_array (value_type (arg1), lbound_p);
+
+  /* User asked for the bounds of a specific dimension of the array.  */
+  value *arg2 = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
+  struct type *type = check_typedef (value_type (arg2));
+  if (type->code () != TYPE_CODE_INT)
+    {
+      if (lbound_p)
+	error (_("LBOUND second argument should be an integer"));
+      else
+	error (_("UBOUND second argument should be an integer"));
     }
+
+  return fortran_bounds_for_dimension (lbound_p, exp->gdbarch, arg1, arg2);
 }
 
-/* Special expression dumping for Fortran.  */
+/* Implement STRUCTOP_STRUCT for Fortran.  See operation::evaluate in
+   expression.h for argument descriptions.  */
 
-static int
-dump_subexp_body_f (struct expression *exp,
-		    struct ui_file *stream, int elt)
+value *
+fortran_structop_operation::evaluate (struct type *expect_type,
+				      struct expression *exp,
+				      enum noside noside)
 {
-  int opcode = exp->elts[elt].opcode;
-  int oplen, nargs, i;
-
-  switch (opcode)
+  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)
     {
-    default:
-      return dump_subexp_body_standard (exp, stream, elt);
+      struct type *type = lookup_struct_elt_type (value_type (arg1), str, 1);
 
-    case UNOP_FORTRAN_KIND:
-    case UNOP_FORTRAN_FLOOR:
-    case UNOP_FORTRAN_CEILING:
-    case BINOP_FORTRAN_CMPLX:
-    case BINOP_FORTRAN_MODULO:
-      operator_length_f (exp, (elt + 1), &oplen, &nargs);
-      break;
+      if (type != nullptr && is_dynamic_type (type))
+	arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_NORMAL);
     }
 
-  elt += oplen;
-  for (i = 0; i < nargs; i += 1)
-    elt = dump_subexp (exp, stream, elt);
+  value *elt = value_struct_elt (&arg1, {}, str, NULL, "structure");
+
+  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+    {
+      struct type *elt_type = value_type (elt);
+      if (is_dynamic_type (elt_type))
+	{
+	  const gdb_byte *valaddr = value_contents_for_printing (elt);
+	  CORE_ADDR address = value_address (elt);
+	  gdb::array_view<const gdb_byte> view
+	    = gdb::make_array_view (valaddr, TYPE_LENGTH (elt_type));
+	  elt_type = resolve_dynamic_type (elt_type, view, address);
+	}
+      elt = value_zero (elt_type, VALUE_LVAL (elt));
+    }
 
   return elt;
 }
 
-/* Special expression checking for Fortran.  */
+} /* namespace expr */
 
-static int
-operator_check_f (struct expression *exp, int pos,
-		  int (*objfile_func) (struct objfile *objfile,
-				       void *data),
-		  void *data)
-{
-  const union exp_element *const elts = exp->elts;
-
-  switch (elts[pos].opcode)
-    {
-    case UNOP_FORTRAN_KIND:
-    case UNOP_FORTRAN_FLOOR:
-    case UNOP_FORTRAN_CEILING:
-    case BINOP_FORTRAN_CMPLX:
-    case BINOP_FORTRAN_MODULO:
-      /* Any references to objfiles are held in the arguments to this
-	 expression, not within the expression itself, so no additional
-	 checking is required here, the outer expression iteration code
-	 will take care of checking each argument.  */
-      break;
+/* See language.h.  */
 
-    default:
-      return operator_check_standard (exp, pos, objfile_func, data);
-    }
+void
+f_language::language_arch_info (struct gdbarch *gdbarch,
+				struct language_arch_info *lai) const
+{
+  const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
+
+  /* Helper function to allow shorter lines below.  */
+  auto add  = [&] (struct type * t)
+  {
+    lai->add_primitive_type (t);
+  };
 
-  return 0;
+  add (builtin->builtin_character);
+  add (builtin->builtin_logical);
+  add (builtin->builtin_logical_s1);
+  add (builtin->builtin_logical_s2);
+  add (builtin->builtin_logical_s8);
+  add (builtin->builtin_real);
+  add (builtin->builtin_real_s8);
+  add (builtin->builtin_real_s16);
+  add (builtin->builtin_complex_s8);
+  add (builtin->builtin_complex_s16);
+  add (builtin->builtin_void);
+
+  lai->set_string_char_type (builtin->builtin_character);
+  lai->set_bool_type (builtin->builtin_logical_s2, "logical");
 }
 
-static const char *f_extensions[] =
+/* See language.h.  */
+
+unsigned int
+f_language::search_name_hash (const char *name) const
 {
-  ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP",
-  ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08",
-  NULL
-};
+  return cp_search_name_hash (name);
+}
+
+/* See language.h.  */
 
-/* Expression processing for Fortran.  */
-static const struct exp_descriptor exp_descriptor_f =
+struct block_symbol
+f_language::lookup_symbol_nonlocal (const char *name,
+				    const struct block *block,
+				    const domain_enum domain) const
 {
-  print_subexp_f,
-  operator_length_f,
-  operator_check_f,
-  op_name_f,
-  dump_subexp_body_f,
-  evaluate_subexp_f
-};
+  return cp_lookup_symbol_nonlocal (this, name, block, domain);
+}
+
+/* See language.h.  */
 
-extern const struct language_defn f_language_defn =
+symbol_name_matcher_ftype *
+f_language::get_symbol_name_matcher_inner
+	(const lookup_name_info &lookup_name) const
 {
-  "fortran",
-  "Fortran",
-  language_fortran,
-  range_check_on,
-  case_sensitive_off,
-  array_column_major,
-  macro_expansion_no,
-  f_extensions,
-  &exp_descriptor_f,
-  f_parse,			/* parser */
-  null_post_parser,
-  f_printchar,			/* Print character constant */
-  f_printstr,			/* function to print string constant */
-  f_emit_char,			/* Function to print a single character */
-  f_print_type,			/* Print a type using appropriate syntax */
-  f_print_typedef,		/* Print a typedef using appropriate syntax */
-  f_val_print,			/* Print a value using appropriate syntax */
-  c_value_print,		/* FIXME */
-  default_read_var_value,	/* la_read_var_value */
-  NULL,				/* Language specific skip_trampoline */
-  NULL,                    	/* name_of_this */
-  false,			/* la_store_sym_names_in_linkage_form_p */
-  cp_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
-  basic_lookup_transparent_type,/* lookup_transparent_type */
-
-  /* We could support demangling here to provide module namespaces
-     also for inferiors with only minimal symbol table (ELF symbols).
-     Just the mangling standard is not standardized across compilers
-     and there is no DW_AT_producer available for inferiors with only
-     the ELF symbols to check the mangling kind.  */
-  NULL,				/* Language specific symbol demangler */
-  NULL,
-  NULL,				/* Language specific
-				   class_name_from_physname */
-  f_op_print_tab,		/* expression operators for printing */
-  0,				/* arrays are first-class (not c-style) */
-  1,				/* String lower bound */
-  f_word_break_characters,
-  f_collect_symbol_completion_matches,
-  f_language_arch_info,
-  default_print_array_index,
-  default_pass_by_reference,
-  c_watch_location_expression,
-  cp_get_symbol_name_matcher,	/* la_get_symbol_name_matcher */
-  iterate_over_symbols,
-  cp_search_name_hash,
-  &default_varobj_ops,
-  NULL,
-  NULL,
-  f_is_string_type_p,
-  "(...)"			/* la_struct_too_deep_ellipsis */
-};
+  return cp_get_symbol_name_matcher (lookup_name);
+}
+
+/* Single instance of the Fortran language class.  */
+
+static f_language f_language_defn;
 
 static void *
 build_fortran_types (struct gdbarch *gdbarch)
@@ -741,14 +1651,16 @@ build_fortran_types (struct gdbarch *gdb
       = arch_type (gdbarch, TYPE_CODE_ERROR, 128, "real*16");
 
   builtin_f_type->builtin_complex_s8
-    = arch_complex_type (gdbarch, "complex*8",
-			 builtin_f_type->builtin_real);
+    = init_complex_type ("complex*8", builtin_f_type->builtin_real);
   builtin_f_type->builtin_complex_s16
-    = arch_complex_type (gdbarch, "complex*16",
-			 builtin_f_type->builtin_real_s8);
-  builtin_f_type->builtin_complex_s32
-    = arch_complex_type (gdbarch, "complex*32",
-			 builtin_f_type->builtin_real_s16);
+    = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8);
+
+  if (builtin_f_type->builtin_real_s16->code () == TYPE_CODE_ERROR)
+    builtin_f_type->builtin_complex_s32
+      = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32");
+  else
+    builtin_f_type->builtin_complex_s32
+      = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
 
   return builtin_f_type;
 }
@@ -761,15 +1673,67 @@ builtin_f_type (struct gdbarch *gdbarch)
   return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data);
 }
 
+/* Command-list for the "set/show fortran" prefix command.  */
+static struct cmd_list_element *set_fortran_list;
+static struct cmd_list_element *show_fortran_list;
+
+void _initialize_f_language ();
 void
-_initialize_f_language (void)
+_initialize_f_language ()
 {
   f_type_data = gdbarch_data_register_post_init (build_fortran_types);
-}
 
-/* See f-lang.h.  */
+  add_basic_prefix_cmd ("fortran", no_class,
+			_("Prefix command for changing Fortran-specific settings."),
+			&set_fortran_list, 0, &setlist);
+
+  add_show_prefix_cmd ("fortran", no_class,
+		       _("Generic command for showing Fortran-specific settings."),
+		       &show_fortran_list, 0, &showlist);
+
+  add_setshow_boolean_cmd ("repack-array-slices", class_vars,
+			   &repack_array_slices, _("\
+Enable or disable repacking of non-contiguous array slices."), _("\
+Show whether non-contiguous array slices are repacked."), _("\
+When the user requests a slice of a Fortran array then we can either return\n\
+a descriptor that describes the array in place (using the original array data\n\
+in its existing location) or the original data can be repacked (copied) to a\n\
+new location.\n\
+\n\
+When the content of the array slice is contiguous within the original array\n\
+then the result will never be repacked, but when the data for the new array\n\
+is non-contiguous within the original array repacking will only be performed\n\
+when this setting is on."),
+			   NULL,
+			   show_repack_array_slices,
+			   &set_fortran_list, &show_fortran_list);
+
+  /* Debug Fortran's array slicing logic.  */
+  add_setshow_boolean_cmd ("fortran-array-slicing", class_maintenance,
+			   &fortran_array_slicing_debug, _("\
+Set debugging of Fortran array slicing."), _("\
+Show debugging of Fortran array slicing."), _("\
+When on, debugging of Fortran array slicing is enabled."),
+			    NULL,
+			    show_fortran_array_slicing_debug,
+			    &setdebuglist, &showdebuglist);
+}
+
+/* Ensures that function argument VALUE is in the appropriate form to
+   pass to a Fortran function.  Returns a possibly new value that should
+   be used instead of VALUE.
+
+   When IS_ARTIFICIAL is true this indicates an artificial argument,
+   e.g. hidden string lengths which the GNU Fortran argument passing
+   convention specifies as being passed by value.
+
+   When IS_ARTIFICIAL is false, the argument is passed by pointer.  If the
+   value is already in target memory then return a value that is a pointer
+   to VALUE.  If VALUE is not in memory (e.g. an integer literal), allocate
+   space in the target, copy VALUE in, and return a pointer to the in
+   memory copy.  */
 
-struct value *
+static struct value *
 fortran_argument_convert (struct value *value, bool is_artificial)
 {
   if (!is_artificial)
@@ -794,12 +1758,128 @@ fortran_argument_convert (struct value *
     return value;
 }
 
+/* Prepare (and return) an argument value ready for an inferior function
+   call to a Fortran function.  EXP and POS are the expressions describing
+   the argument to prepare.  ARG_NUM is the argument number being
+   prepared, with 0 being the first argument and so on.  FUNC_TYPE is the
+   type of the function being called.
+
+   IS_INTERNAL_CALL_P is true if this is a call to a function of type
+   TYPE_CODE_INTERNAL_FUNCTION, otherwise this parameter is false.
+
+   NOSIDE has its usual meaning for expression parsing (see eval.c).
+
+   Arguments in Fortran are normally passed by address, we coerce the
+   arguments here rather than in value_arg_coerce as otherwise the call to
+   malloc (to place the non-lvalue parameters in target memory) is hit by
+   this Fortran specific logic.  This results in malloc being called with a
+   pointer to an integer followed by an attempt to malloc the arguments to
+   malloc in target memory.  Infinite recursion ensues.  */
+
+static value *
+fortran_prepare_argument (struct expression *exp,
+			  expr::operation *subexp,
+			  int arg_num, bool is_internal_call_p,
+			  struct type *func_type, enum noside noside)
+{
+  if (is_internal_call_p)
+    return subexp->evaluate_with_coercion (exp, noside);
+
+  bool is_artificial = ((arg_num >= func_type->num_fields ())
+			? true
+			: TYPE_FIELD_ARTIFICIAL (func_type, arg_num));
+
+  /* If this is an artificial argument, then either, this is an argument
+     beyond the end of the known arguments, or possibly, there are no known
+     arguments (maybe missing debug info).
+
+     For these artificial arguments, if the user has prefixed it with '&'
+     (for address-of), then lets always allow this to succeed, even if the
+     argument is not actually in inferior memory.  This will allow the user
+     to pass arguments to a Fortran function even when there's no debug
+     information.
+
+     As we already pass the address of non-artificial arguments, all we
+     need to do if skip the UNOP_ADDR operator in the expression and mark
+     the argument as non-artificial.  */
+  if (is_artificial)
+    {
+      expr::unop_addr_operation *addrop
+	= dynamic_cast<expr::unop_addr_operation *> (subexp);
+      if (addrop != nullptr)
+	{
+	  subexp = addrop->get_expression ().get ();
+	  is_artificial = false;
+	}
+    }
+
+  struct value *arg_val = subexp->evaluate_with_coercion (exp, noside);
+  return fortran_argument_convert (arg_val, is_artificial);
+}
+
 /* See f-lang.h.  */
 
 struct type *
 fortran_preserve_arg_pointer (struct value *arg, struct type *type)
 {
-  if (TYPE_CODE (value_type (arg)) == TYPE_CODE_PTR)
+  if (value_type (arg)->code () == TYPE_CODE_PTR)
     return value_type (arg);
   return type;
 }
+
+/* See f-lang.h.  */
+
+CORE_ADDR
+fortran_adjust_dynamic_array_base_address_hack (struct type *type,
+						CORE_ADDR address)
+{
+  gdb_assert (type->code () == TYPE_CODE_ARRAY);
+
+  /* We can't adjust the base address for arrays that have no content.  */
+  if (type_not_allocated (type) || type_not_associated (type))
+    return address;
+
+  int ndimensions = calc_f77_array_dims (type);
+  LONGEST total_offset = 0;
+
+  /* Walk through each of the dimensions of this array type and figure out
+     if any of the dimensions are "backwards", that is the base address
+     for this dimension points to the element at the highest memory
+     address and the stride is negative.  */
+  struct type *tmp_type = type;
+  for (int i = 0 ; i < ndimensions; ++i)
+    {
+      /* Grab the range for this dimension and extract the lower and upper
+	 bounds.  */
+      tmp_type = check_typedef (tmp_type);
+      struct type *range_type = tmp_type->index_type ();
+      LONGEST lowerbound, upperbound, stride;
+      if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
+	error ("failed to get range bounds");
+
+      /* Figure out the stride for this dimension.  */
+      struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (tmp_type));
+      stride = tmp_type->index_type ()->bounds ()->bit_stride ();
+      if (stride == 0)
+	stride = type_length_units (elt_type);
+      else
+	{
+	  int unit_size
+	    = gdbarch_addressable_memory_unit_size (elt_type->arch ());
+	  stride /= (unit_size * 8);
+	}
+
+      /* If this dimension is "backward" then figure out the offset
+	 adjustment required to point to the element at the lowest memory
+	 address, and add this to the total offset.  */
+      LONGEST offset = 0;
+      if (stride < 0 && lowerbound < upperbound)
+	offset = (upperbound - lowerbound) * stride;
+      total_offset += offset;
+      tmp_type = TYPE_TARGET_TYPE (tmp_type);
+    }
+
+  /* Adjust the address of this object and return it.  */
+  address += total_offset;
+  return address;
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-lang.h ./gdb/f-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-lang.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/f-lang.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Fortran language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
    (fmbutt@engage.sps.mot.com).
@@ -23,23 +23,257 @@
 #ifndef F_LANG_H
 #define F_LANG_H
 
+#include "valprint.h"
+
 struct type_print_options;
 struct parser_state;
 
-extern int f_parse (struct parser_state *);
+/* Class representing the Fortran language.  */
+
+class f_language : public language_defn
+{
+public:
+  f_language ()
+    : language_defn (language_fortran)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "fortran"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "Fortran"; }
+
+  /* See language.h.  */
+
+  const std::vector<const char *> &filename_extensions () const override
+  {
+    static const std::vector<const char *> extensions = {
+      ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP",
+      ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08"
+    };
+    return extensions;
+  }
+
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override;
+
+  /* See language.h.  */
+  unsigned int search_name_hash (const char *name) const override;
+
+  /* See language.h.  */
+
+  char *demangle_symbol (const char *mangled, int options) const override
+  {
+      /* We could support demangling here to provide module namespaces
+	 also for inferiors with only minimal symbol table (ELF symbols).
+	 Just the mangling standard is not standardized across compilers
+	 and there is no DW_AT_producer available for inferiors with only
+	 the ELF symbols to check the mangling kind.  */
+    return nullptr;
+  }
+
+  /* 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;
+
+  /* See language.h.  This just returns default set of word break
+     characters but with the modules separator `::' removed.  */
+
+  const char *word_break_characters (void) const override
+  {
+    static char *retval;
+
+    if (!retval)
+      {
+	char *s;
+
+	retval = xstrdup (language_defn::word_break_characters ());
+	s = strchr (retval, ':');
+	if (s)
+	  {
+	    char *last_char = &s[strlen (s) - 1];
+
+	    *s = *last_char;
+	    *last_char = 0;
+	  }
+      }
+    return retval;
+  }
+
+
+  /* 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
+  {
+    /* Consider the modules separator :: as a valid symbol name character
+       class.  */
+    default_collect_symbol_completion_matches_break_on (tracker, mode,
+							name_match_type,
+							text, word, ":",
+							code);
+  }
+
+  /* See language.h.  */
+
+  void value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const override;
+
+  /* See language.h.  */
+
+  struct block_symbol lookup_symbol_nonlocal
+	(const char *name, const struct block *block,
+	 const domain_enum domain) const override;
+
+  /* See language.h.  */
+
+  int parser (struct parser_state *ps) const override;
+
+  /* See language.h.  */
+
+  void emitchar (int ch, struct type *chtype,
+		 struct ui_file *stream, int quoter) const override
+  {
+    const char *encoding = get_encoding (chtype);
+    generic_emit_char (ch, chtype, stream, quoter, encoding);
+  }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+		  struct ui_file *stream) const override
+  {
+    fputs_filtered ("'", stream);
+    emitchar (ch, chtype, stream, '\'');
+    fputs_filtered ("'", 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
+  {
+    const char *type_encoding = get_encoding (elttype);
 
-/* Implement the la_print_typedef language method for Fortran.  */
+    if (TYPE_LENGTH (elttype) == 4)
+      fputs_filtered ("4_", stream);
 
-extern void f_print_typedef (struct type *type, struct symbol *new_symbol,
-			     struct ui_file *stream);
+    if (!encoding || !*encoding)
+      encoding = type_encoding;
 
-extern void f_print_type (struct type *, const char *, struct ui_file *, int,
-			  int, const struct type_print_options *);
+    generic_printstr (stream, elttype, string, length, encoding,
+		      force_ellipses, '\'', 0, options);
+  }
 
-extern void f_val_print (struct type *, int, CORE_ADDR,
-			 struct ui_file *, int,
-			 struct value *,
-			 const struct value_print_options *);
+  /* See language.h.  */
+
+  void print_typedef (struct type *type, struct symbol *new_symbol,
+		      struct ui_file *stream) const override;
+
+  /* See language.h.  */
+
+  bool is_string_type_p (struct type *type) const override
+  {
+    type = check_typedef (type);
+    return (type->code () == TYPE_CODE_STRING
+	    || (type->code () == TYPE_CODE_ARRAY
+		&& TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR));
+  }
+
+  /* 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 range_checking_on_by_default () const override
+  { return true; }
+
+  /* See language.h.  */
+
+  enum case_sensitivity case_sensitivity () const override
+  { return case_sensitive_off; }
+
+  /* See language.h.  */
+
+  enum array_ordering array_ordering () const override
+  { return array_column_major; }
+
+protected:
+
+  /* See language.h.  */
+
+  symbol_name_matcher_ftype *get_symbol_name_matcher_inner
+	(const lookup_name_info &lookup_name) const override;
+
+private:
+  /* Return the encoding that should be used for the character type
+     TYPE.  */
+
+  static const char *get_encoding (struct type *type);
+
+  /* Print any asterisks or open-parentheses needed before the variable
+     name (to describe its type).
+
+     On outermost call, pass 0 for PASSED_A_PTR.
+     On outermost call, SHOW > 0 means should ignore
+     any typename for TYPE and show its details.
+     SHOW is always zero on recursive calls.  */
+
+  void f_type_print_varspec_prefix (struct type *type,
+				    struct ui_file * stream,
+				    int show, int passed_a_ptr) const;
+
+  /* Print any array sizes, function arguments or close parentheses needed
+     after the variable name (to describe its type).  Args work like
+     c_type_print_varspec_prefix.
+
+     PRINT_RANK_ONLY is true when TYPE is an array which should be printed
+     without the upper and lower bounds being specified, this will occur
+     when the array is not allocated or not associated and so there are no
+     known upper or lower bounds.  */
+
+  void f_type_print_varspec_suffix (struct type *type,
+				    struct ui_file *stream,
+				    int show, int passed_a_ptr,
+				    int demangled_args,
+				    int arrayprint_recurse_level,
+				    bool print_rank_only) const;
+
+  /* Print the name of the type (or the ultimate pointer target, function
+     value or array element), or the description of a structure or union.
+
+     SHOW nonzero means don't print this type as just its name;
+     show its real definition even if it has a name.
+     SHOW zero means print just typename or struct tag if there is one
+     SHOW negative means abbreviate structure elements.
+     SHOW is decremented for printing of structure elements.
+
+     LEVEL is the depth to indent by.  We increase it for some recursive
+     calls.  */
+
+  void f_type_print_base (struct type *type, struct ui_file *stream, int show,
+			  int level) const;
+};
 
 /* Language-specific data structures */
 
@@ -59,11 +293,8 @@ extern LONGEST f77_get_upperbound (struc
 
 extern LONGEST f77_get_lowerbound (struct type *);
 
-extern void f77_get_dynamic_array_length (struct type *);
-
 extern int calc_f77_array_dims (struct type *);
 
-
 /* Fortran (F77) types */
 
 struct builtin_f_type
@@ -88,23 +319,6 @@ struct builtin_f_type
 /* Return the Fortran type table for the specified architecture.  */
 extern const struct builtin_f_type *builtin_f_type (struct gdbarch *gdbarch);
 
-/* Ensures that function argument VALUE is in the appropriate form to
-   pass to a Fortran function.  Returns a possibly new value that should
-   be used instead of VALUE.
-
-   When IS_ARTIFICIAL is true this indicates an artificial argument,
-   e.g. hidden string lengths which the GNU Fortran argument passing
-   convention specifies as being passed by value.
-
-   When IS_ARTIFICIAL is false, the argument is passed by pointer.  If the
-   value is already in target memory then return a value that is a pointer
-   to VALUE.  If VALUE is not in memory (e.g. an integer literal), allocate
-   space in the target, copy VALUE in, and return a pointer to the in
-   memory copy.  */
-
-extern struct value *fortran_argument_convert (struct value *value,
-					       bool is_artificial);
-
 /* Ensures that function argument TYPE is appropriate to inform the debugger
    that ARG should be passed as a pointer.  Returns the potentially updated
    argument type.
@@ -121,4 +335,22 @@ extern struct value *fortran_argument_co
 extern struct type *fortran_preserve_arg_pointer (struct value *arg,
 						  struct type *type);
 
+/* Fortran arrays can have a negative stride.  When this happens it is
+   often the case that the base address for an object is not the lowest
+   address occupied by that object.  For example, an array slice (10:1:-1)
+   will be encoded with lower bound 1, upper bound 10, a stride of
+   -ELEMENT_SIZE, and have a base address pointer that points at the
+   element with the highest address in memory.
+
+   This really doesn't play well with our current model of value contents,
+   but could easily require a significant update in order to be supported
+   "correctly".
+
+   For now, we manually force the base address to be the lowest addressed
+   element here.  Yes, this will break some things, but it fixes other
+   things.  The hope is that it fixes more than it breaks.  */
+
+extern CORE_ADDR fortran_adjust_dynamic_array_base_address_hack
+	(struct type *type, CORE_ADDR address);
+
 #endif /* F_LANG_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fork-child.c ./gdb/fork-child.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fork-child.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/fork-child.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Fork a Unix child process, and set up to debug it, for GDB.
 
-   Copyright (C) 1990-2020 Free Software Foundation, Inc.
+   Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -61,8 +61,6 @@ static struct ui *saved_ui = NULL;
 void
 prefork_hook (const char *args)
 {
-  const char *inferior_io_terminal = get_inferior_io_terminal ();
-
   gdb_assert (saved_ui == NULL);
   /* Retain a copy of our UI, since the child will replace this value
      and if we're vforked, we have to restore it.  */
@@ -70,7 +68,7 @@ prefork_hook (const char *args)
 
   /* Tell the terminal handling subsystem what tty we plan to run on;
      it will just record the information for later.  */
-  new_tty_prefork (inferior_io_terminal);
+  new_tty_prefork (current_inferior ()->tty ());
 }
 
 /* See nat/fork-inferior.h.  */
@@ -82,9 +80,6 @@ postfork_hook (pid_t pid)
 
   inferior_appeared (inf, pid);
 
-  /* Needed for wait_for_inferior stuff.  */
-  inferior_ptid = ptid_t (pid);
-
   gdb_assert (saved_ui != NULL);
   current_ui = saved_ui;
   saved_ui = NULL;
@@ -128,10 +123,13 @@ postfork_child_hook ()
 ptid_t
 gdb_startup_inferior (pid_t pid, int num_traps)
 {
-  ptid_t ptid = startup_inferior (pid, num_traps, NULL, NULL);
+  inferior *inf = current_inferior ();
+  process_stratum_target *proc_target = inf->process_target ();
+
+  ptid_t ptid = startup_inferior (proc_target, pid, num_traps, NULL, NULL);
 
   /* Mark all threads non-executing.  */
-  set_executing (ptid, 0);
+  set_executing (proc_target, ptid, false);
 
   return ptid;
 }
@@ -154,8 +152,9 @@ show_startup_with_shell (struct ui_file
 		    value);
 }
 
+void _initialize_fork_child ();
 void
-_initialize_fork_child (void)
+_initialize_fork_child ()
 {
   add_setshow_filename_cmd ("exec-wrapper", class_run, &exec_wrapper, _("\
 Set a wrapper for running programs.\n\
@@ -166,8 +165,8 @@ Show the wrapper for running programs.")
 			    &setlist, &showlist);
 
   add_cmd ("exec-wrapper", class_run, unset_exec_wrapper_command,
-           _("Disable use of an execution wrapper."),
-           &unsetlist);
+	   _("Disable use of an execution wrapper."),
+	   &unsetlist);
 
   add_setshow_boolean_cmd ("startup-with-shell", class_support,
 			   &startup_with_shell, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fortran-operator.def ./gdb/fortran-operator.def
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/fortran-operator.def	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/fortran-operator.def	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-/* Fortran language operator definitions for GDB, the GNU debugger.
-
-   Copyright (C) 2019-2020 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/>.  */
-
-/* Single operand builtins.  */
-OP (UNOP_FORTRAN_KIND)
-OP (UNOP_FORTRAN_FLOOR)
-OP (UNOP_FORTRAN_CEILING)
-
-/* Two operand builtins.  */
-OP (BINOP_FORTRAN_CMPLX)
-OP (BINOP_FORTRAN_MODULO)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-base.c ./gdb/frame-base.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-base.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frame-base.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for frame address handler, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -121,8 +121,9 @@ frame_base_find_by_frame (struct frame_i
   return table->default_base;
 }
 
+void _initialize_frame_base ();
 void
-_initialize_frame_base (void)
+_initialize_frame_base ()
 {
   frame_base_data = gdbarch_data_register_pre_init (frame_base_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-base.h ./gdb/frame-base.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-base.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frame-base.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for a frame base, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame.c ./gdb/frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frame.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Cache and manage frames for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -53,6 +53,17 @@
 
 static struct frame_info *sentinel_frame;
 
+/* Number of calls to reinit_frame_cache.  */
+static unsigned int frame_cache_generation = 0;
+
+/* See frame.h.  */
+
+unsigned int
+get_frame_cache_generation ()
+{
+  return frame_cache_generation;
+}
+
 /* The values behind the global "set backtrace ..." settings.  */
 set_backtrace_options user_set_backtrace_options;
 
@@ -76,6 +87,18 @@ enum cached_copy_status
   CC_UNAVAILABLE
 };
 
+enum class frame_id_status
+{
+  /* Frame id is not computed.  */
+  NOT_COMPUTED = 0,
+
+  /* Frame id is being computed (compute_frame_id is active).  */
+  COMPUTING,
+
+  /* Frame id has been computed.  */
+  COMPUTED,
+};
+
 /* We keep a cache of stack frames, each of which is a "struct
    frame_info".  The innermost one gets allocated (in
    wait_for_inferior) each time the inferior stops; sentinel_frame
@@ -88,6 +111,9 @@ enum cached_copy_status
 
 struct frame_info
 {
+  /* Return a string representation of this frame.  */
+  std::string to_string () const;
+
   /* Level of this frame.  The inner-most (youngest) frame is at level
      0.  As you move towards the outer-most (oldest) frame, the level
      increases.  This is a cached value.  It could just as easily be
@@ -116,32 +142,32 @@ struct frame_info
   /* Cached copy of the previous frame's architecture.  */
   struct
   {
-    int p;
+    bool p;
     struct gdbarch *arch;
   } prev_arch;
 
   /* Cached copy of the previous frame's resume address.  */
   struct {
-    enum cached_copy_status status;
+    cached_copy_status status;
     /* Did VALUE require unmasking when being read.  */
     bool masked;
     CORE_ADDR value;
   } prev_pc;
-  
+
   /* Cached copy of the previous frame's function address.  */
   struct
   {
     CORE_ADDR addr;
-    int p;
+    cached_copy_status status;
   } prev_func;
-  
+
   /* This frame's ID.  */
   struct
   {
-    int p;
+    frame_id_status p;
     struct frame_id value;
   } this_id;
-  
+
   /* The frame's high-level base methods, and corresponding cache.
      The high level base methods are selected based on the frame's
      debug info.  */
@@ -151,7 +177,7 @@ struct frame_info
   /* Pointers to the next (down, inner, younger) and previous (up,
      outer, older) frame_info's in the frame cache.  */
   struct frame_info *next; /* down, inner, younger */
-  int prev_p;
+  bool prev_p;
   struct frame_info *prev; /* up, outer, older */
 
   /* The reason why we could not set PREV, or UNWIND_NO_REASON if we
@@ -246,27 +272,24 @@ frame_stash_create (void)
    Returns false if a frame with the same ID was already stashed, true
    otherwise.  */
 
-static int
-frame_stash_add (struct frame_info *frame)
+static bool
+frame_stash_add (frame_info *frame)
 {
-  struct frame_info **slot;
-
   /* Do not try to stash the sentinel frame.  */
   gdb_assert (frame->level >= 0);
 
-  slot = (struct frame_info **) htab_find_slot (frame_stash,
-						frame,
-						INSERT);
+  frame_info **slot = (struct frame_info **) htab_find_slot (frame_stash,
+							     frame, INSERT);
 
   /* If we already have a frame in the stack with the same id, we
      either have a stack cycle (corrupted stack?), or some bug
      elsewhere in GDB.  In any case, ignore the duplicate and return
      an indication to the caller.  */
-  if (*slot != NULL)
-    return 0;
+  if (*slot != nullptr)
+    return false;
 
   *slot = frame;
-  return 1;
+  return true;
 }
 
 /* Internal function to search the frame stash for an entry with the
@@ -297,22 +320,21 @@ frame_stash_invalidate (void)
 /* See frame.h  */
 scoped_restore_selected_frame::scoped_restore_selected_frame ()
 {
-  m_fid = get_frame_id (get_selected_frame (NULL));
+  m_lang = current_language->la_language;
+  save_selected_frame (&m_fid, &m_level);
 }
 
 /* See frame.h  */
 scoped_restore_selected_frame::~scoped_restore_selected_frame ()
 {
-  frame_info *frame = frame_find_by_id (m_fid);
-  if (frame == NULL)
-    warning (_("Unable to restore previously selected frame."));
-  else
-    select_frame (frame);
+  restore_selected_frame (m_fid, m_level);
+  set_language (m_lang);
 }
 
 /* Flag to control debugging.  */
 
-unsigned int frame_debug;
+bool frame_debug;
+
 static void
 show_frame_debug (struct ui_file *file, int from_tty,
 		  struct cmd_list_element *c, const char *value)
@@ -355,123 +377,125 @@ show_backtrace_limit (struct ui_file *fi
 		    value);
 }
 
+/* See frame.h.  */
 
-static void
-fprint_field (struct ui_file *file, const char *name, int p, CORE_ADDR addr)
+std::string
+frame_id::to_string () const
 {
-  if (p)
-    fprintf_unfiltered (file, "%s=%s", name, hex_string (addr));
-  else
-    fprintf_unfiltered (file, "!%s", name);
-}
+  const struct frame_id &id = *this;
 
-void
-fprint_frame_id (struct ui_file *file, struct frame_id id)
-{
-  fprintf_unfiltered (file, "{");
+  std::string res = "{";
 
   if (id.stack_status == FID_STACK_INVALID)
-    fprintf_unfiltered (file, "!stack");
+    res += "!stack";
   else if (id.stack_status == FID_STACK_UNAVAILABLE)
-    fprintf_unfiltered (file, "stack=<unavailable>");
+    res += "stack=<unavailable>";
   else if (id.stack_status == FID_STACK_SENTINEL)
-    fprintf_unfiltered (file, "stack=<sentinel>");
+    res += "stack=<sentinel>";
+  else if (id.stack_status == FID_STACK_OUTER)
+    res += "stack=<outer>";
   else
-    fprintf_unfiltered (file, "stack=%s", hex_string (id.stack_addr));
-  fprintf_unfiltered (file, ",");
-
-  fprint_field (file, "code", id.code_addr_p, id.code_addr);
-  fprintf_unfiltered (file, ",");
+    res += std::string ("stack=") + hex_string (id.stack_addr);
 
-  fprint_field (file, "special", id.special_addr_p, id.special_addr);
+  /* Helper function to format 'N=A' if P is true, otherwise '!N'.  */
+  auto field_to_string = [] (const char *n, bool p, CORE_ADDR a) -> std::string
+  {
+    if (p)
+      return std::string (n) + "=" + core_addr_to_string (a);
+    else
+      return std::string ("!") + std::string (n);
+  };
+
+  res += (std::string (",")
+	  + field_to_string ("code", id.code_addr_p, id.code_addr)
+	  + std::string (",")
+	  + field_to_string ("special", id.special_addr_p, id.special_addr));
 
   if (id.artificial_depth)
-    fprintf_unfiltered (file, ",artificial=%d", id.artificial_depth);
-
-  fprintf_unfiltered (file, "}");
+    res += ",artificial=" + std::to_string (id.artificial_depth);
+  res += "}";
+  return res;
 }
 
-static void
-fprint_frame_type (struct ui_file *file, enum frame_type type)
+/* Return a string representation of TYPE.  */
+
+static const char *
+frame_type_str (frame_type type)
 {
   switch (type)
     {
     case NORMAL_FRAME:
-      fprintf_unfiltered (file, "NORMAL_FRAME");
-      return;
+      return "NORMAL_FRAME";
+
     case DUMMY_FRAME:
-      fprintf_unfiltered (file, "DUMMY_FRAME");
-      return;
+      return "DUMMY_FRAME";
+
     case INLINE_FRAME:
-      fprintf_unfiltered (file, "INLINE_FRAME");
-      return;
+      return "INLINE_FRAME";
+
     case TAILCALL_FRAME:
-      fprintf_unfiltered (file, "TAILCALL_FRAME");
-      return;
+      return "TAILCALL_FRAME";
+
     case SIGTRAMP_FRAME:
-      fprintf_unfiltered (file, "SIGTRAMP_FRAME");
-      return;
+      return "SIGTRAMP_FRAME";
+
     case ARCH_FRAME:
-      fprintf_unfiltered (file, "ARCH_FRAME");
-      return;
+      return "ARCH_FRAME";
+
     case SENTINEL_FRAME:
-      fprintf_unfiltered (file, "SENTINEL_FRAME");
-      return;
+      return "SENTINEL_FRAME";
+
     default:
-      fprintf_unfiltered (file, "<unknown type>");
-      return;
+      return "<unknown type>";
     };
 }
 
-static void
-fprint_frame (struct ui_file *file, struct frame_info *fi)
+ /* See struct frame_info.  */
+
+std::string
+frame_info::to_string () const
 {
-  if (fi == NULL)
-    {
-      fprintf_unfiltered (file, "<NULL frame>");
-      return;
-    }
-  fprintf_unfiltered (file, "{");
-  fprintf_unfiltered (file, "level=%d", fi->level);
-  fprintf_unfiltered (file, ",");
-  fprintf_unfiltered (file, "type=");
+  const frame_info *fi = this;
+
+  std::string res;
+
+  res += string_printf ("{level=%d,", fi->level);
+
   if (fi->unwind != NULL)
-    fprint_frame_type (file, fi->unwind->type);
+    res += string_printf ("type=%s,", frame_type_str (fi->unwind->type));
   else
-    fprintf_unfiltered (file, "<unknown>");
-  fprintf_unfiltered (file, ",");
-  fprintf_unfiltered (file, "unwind=");
+    res += "type=<unknown>,";
+
   if (fi->unwind != NULL)
-    gdb_print_host_address (fi->unwind, file);
+    res += string_printf ("unwind=%p,", host_address_to_string (fi->unwind));
   else
-    fprintf_unfiltered (file, "<unknown>");
-  fprintf_unfiltered (file, ",");
-  fprintf_unfiltered (file, "pc=");
+    res += "unwind=<unknown>,";
+
   if (fi->next == NULL || fi->next->prev_pc.status == CC_UNKNOWN)
-    fprintf_unfiltered (file, "<unknown>");
+    res += "pc=<unknown>,";
   else if (fi->next->prev_pc.status == CC_VALUE)
-    {
-      fprintf_unfiltered (file, "%s", hex_string (fi->next->prev_pc.value));
-      if (fi->next->prev_pc.masked)
-	fprintf_unfiltered (file, "[PAC]");
-    }
+    res += string_printf ("pc=%s%s,", hex_string (fi->next->prev_pc.value),
+			  fi->next->prev_pc.masked ? "[PAC]" : "");
   else if (fi->next->prev_pc.status == CC_NOT_SAVED)
-    val_print_not_saved (file);
+    res += "pc=<not saved>,";
   else if (fi->next->prev_pc.status == CC_UNAVAILABLE)
-    val_print_unavailable (file);
-  fprintf_unfiltered (file, ",");
-  fprintf_unfiltered (file, "id=");
-  if (fi->this_id.p)
-    fprint_frame_id (file, fi->this_id.value);
+    res += "pc=<unavailable>,";
+
+  if (fi->this_id.p == frame_id_status::NOT_COMPUTED)
+    res += "id=<not computed>,";
+  else if (fi->this_id.p == frame_id_status::COMPUTING)
+    res += "id=<computing>,";
   else
-    fprintf_unfiltered (file, "<unknown>");
-  fprintf_unfiltered (file, ",");
-  fprintf_unfiltered (file, "func=");
-  if (fi->next != NULL && fi->next->prev_func.p)
-    fprintf_unfiltered (file, "%s", hex_string (fi->next->prev_func.addr));
+    res += string_printf ("id=%s,", fi->this_id.value.to_string ().c_str ());
+
+  if (fi->next != NULL && fi->next->prev_func.status == CC_VALUE)
+    res += string_printf ("func=%s", hex_string (fi->next->prev_func.addr));
   else
-    fprintf_unfiltered (file, "<unknown>");
-  fprintf_unfiltered (file, "}");
+    res += "func=<unknown>";
+
+  res += "}";
+
+  return res;
 }
 
 /* Given FRAME, return the enclosing frame as found in real frames read-in from
@@ -536,25 +560,43 @@ skip_tailcall_frames (struct frame_info
 static void
 compute_frame_id (struct frame_info *fi)
 {
-  gdb_assert (!fi->this_id.p);
+  FRAME_SCOPED_DEBUG_ENTER_EXIT;
 
-  if (frame_debug)
-    fprintf_unfiltered (gdb_stdlog, "{ compute_frame_id (fi=%d) ",
-			fi->level);
-  /* Find the unwinder.  */
-  if (fi->unwind == NULL)
-    frame_unwind_find_by_frame (fi, &fi->prologue_cache);
-  /* Find THIS frame's ID.  */
-  /* Default to outermost if no ID is found.  */
-  fi->this_id.value = outer_frame_id;
-  fi->unwind->this_id (fi, &fi->prologue_cache, &fi->this_id.value);
-  gdb_assert (frame_id_p (fi->this_id.value));
-  fi->this_id.p = 1;
-  if (frame_debug)
+  gdb_assert (fi->this_id.p == frame_id_status::NOT_COMPUTED);
+
+  unsigned int entry_generation = get_frame_cache_generation ();
+
+  try
+    {
+      /* Mark this frame's id as "being computed.  */
+      fi->this_id.p = frame_id_status::COMPUTING;
+
+      frame_debug_printf ("fi=%d", fi->level);
+
+      /* Find the unwinder.  */
+      if (fi->unwind == NULL)
+	frame_unwind_find_by_frame (fi, &fi->prologue_cache);
+
+      /* Find THIS frame's ID.  */
+      /* Default to outermost if no ID is found.  */
+      fi->this_id.value = outer_frame_id;
+      fi->unwind->this_id (fi, &fi->prologue_cache, &fi->this_id.value);
+      gdb_assert (frame_id_p (fi->this_id.value));
+
+      /* Mark this frame's id as "computed".  */
+      fi->this_id.p = frame_id_status::COMPUTED;
+
+      frame_debug_printf ("  -> %s", fi->this_id.value.to_string ().c_str ());
+    }
+  catch (const gdb_exception &ex)
     {
-      fprintf_unfiltered (gdb_stdlog, "-> ");
-      fprint_frame_id (gdb_stdlog, fi->this_id.value);
-      fprintf_unfiltered (gdb_stdlog, " }\n");
+      /* On error, revert the frame id status to not computed.  If the frame
+	 cache generation changed, the frame object doesn't exist anymore, so
+	 don't touch it.  */
+      if (get_frame_cache_generation () == entry_generation)
+	fi->this_id.p = frame_id_status::NOT_COMPUTED;
+
+      throw;
     }
 }
 
@@ -567,10 +609,12 @@ get_frame_id (struct frame_info *fi)
   if (fi == NULL)
     return null_frame_id;
 
-  if (!fi->this_id.p)
-    {
-      int stashed;
+  /* It's always invalid to try to get a frame's id while it is being
+     computed.  */
+  gdb_assert (fi->this_id.p != frame_id_status::COMPUTING);
 
+  if (fi->this_id.p == frame_id_status::NOT_COMPUTED)
+    {
       /* If we haven't computed the frame id yet, then it must be that
 	 this is the current frame.  Compute it now, and stash the
 	 result.  The IDs of other frames are computed as soon as
@@ -583,7 +627,7 @@ get_frame_id (struct frame_info *fi)
 
       /* Since this is the first frame in the chain, this should
 	 always succeed.  */
-      stashed = frame_stash_add (fi);
+      bool stashed = frame_stash_add (fi);
       gdb_assert (stashed);
     }
 
@@ -619,20 +663,20 @@ frame_unwind_caller_id (struct frame_inf
 
 const struct frame_id null_frame_id = { 0 }; /* All zeros.  */
 const struct frame_id sentinel_frame_id = { 0, 0, 0, FID_STACK_SENTINEL, 0, 1, 0 };
-const struct frame_id outer_frame_id = { 0, 0, 0, FID_STACK_INVALID, 0, 1, 0 };
+const struct frame_id outer_frame_id = { 0, 0, 0, FID_STACK_OUTER, 0, 1, 0 };
 
 struct frame_id
 frame_id_build_special (CORE_ADDR stack_addr, CORE_ADDR code_addr,
-                        CORE_ADDR special_addr)
+			CORE_ADDR special_addr)
 {
   struct frame_id id = null_frame_id;
 
   id.stack_addr = stack_addr;
   id.stack_status = FID_STACK_VALID;
   id.code_addr = code_addr;
-  id.code_addr_p = 1;
+  id.code_addr_p = true;
   id.special_addr = special_addr;
-  id.special_addr_p = 1;
+  id.special_addr_p = true;
   return id;
 }
 
@@ -645,7 +689,7 @@ frame_id_build_unavailable_stack (CORE_A
 
   id.stack_status = FID_STACK_UNAVAILABLE;
   id.code_addr = code_addr;
-  id.code_addr_p = 1;
+  id.code_addr_p = true;
   return id;
 }
 
@@ -659,9 +703,9 @@ frame_id_build_unavailable_stack_special
 
   id.stack_status = FID_STACK_UNAVAILABLE;
   id.code_addr = code_addr;
-  id.code_addr_p = 1;
+  id.code_addr_p = true;
   id.special_addr = special_addr;
-  id.special_addr_p = 1;
+  id.special_addr_p = true;
   return id;
 }
 
@@ -673,7 +717,7 @@ frame_id_build (CORE_ADDR stack_addr, CO
   id.stack_addr = stack_addr;
   id.stack_status = FID_STACK_VALID;
   id.code_addr = code_addr;
-  id.code_addr_p = 1;
+  id.code_addr_p = true;
   return id;
 }
 
@@ -687,79 +731,58 @@ frame_id_build_wild (CORE_ADDR stack_add
   return id;
 }
 
-int
-frame_id_p (struct frame_id l)
+bool
+frame_id_p (frame_id l)
 {
-  int p;
-
   /* The frame is valid iff it has a valid stack address.  */
-  p = l.stack_status != FID_STACK_INVALID;
-  /* outer_frame_id is also valid.  */
-  if (!p && memcmp (&l, &outer_frame_id, sizeof (l)) == 0)
-    p = 1;
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "{ frame_id_p (l=");
-      fprint_frame_id (gdb_stdlog, l);
-      fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", p);
-    }
+  bool p = l.stack_status != FID_STACK_INVALID;
+
+  frame_debug_printf ("l=%s -> %d", l.to_string ().c_str (), p);
+
   return p;
 }
 
-int
-frame_id_artificial_p (struct frame_id l)
+bool
+frame_id_artificial_p (frame_id l)
 {
   if (!frame_id_p (l))
-    return 0;
+    return false;
 
-  return (l.artificial_depth != 0);
+  return l.artificial_depth != 0;
 }
 
-int
-frame_id_eq (struct frame_id l, struct frame_id r)
+bool
+frame_id_eq (frame_id l, frame_id r)
 {
-  int eq;
+  bool eq;
 
-  if (l.stack_status == FID_STACK_INVALID && l.special_addr_p
-      && r.stack_status == FID_STACK_INVALID && r.special_addr_p)
-    /* The outermost frame marker is equal to itself.  This is the
-       dodgy thing about outer_frame_id, since between execution steps
-       we might step into another function - from which we can't
-       unwind either.  More thought required to get rid of
-       outer_frame_id.  */
-    eq = 1;
-  else if (l.stack_status == FID_STACK_INVALID
-	   || r.stack_status == FID_STACK_INVALID)
+  if (l.stack_status == FID_STACK_INVALID
+      || r.stack_status == FID_STACK_INVALID)
     /* Like a NaN, if either ID is invalid, the result is false.
        Note that a frame ID is invalid iff it is the null frame ID.  */
-    eq = 0;
+    eq = false;
   else if (l.stack_status != r.stack_status || l.stack_addr != r.stack_addr)
     /* If .stack addresses are different, the frames are different.  */
-    eq = 0;
+    eq = false;
   else if (l.code_addr_p && r.code_addr_p && l.code_addr != r.code_addr)
     /* An invalid code addr is a wild card.  If .code addresses are
        different, the frames are different.  */
-    eq = 0;
+    eq = false;
   else if (l.special_addr_p && r.special_addr_p
 	   && l.special_addr != r.special_addr)
     /* An invalid special addr is a wild card (or unused).  Otherwise
        if special addresses are different, the frames are different.  */
-    eq = 0;
+    eq = false;
   else if (l.artificial_depth != r.artificial_depth)
     /* If artificial depths are different, the frames must be different.  */
-    eq = 0;
+    eq = false;
   else
     /* Frames are equal.  */
-    eq = 1;
+    eq = true;
+
+  frame_debug_printf ("l=%s, r=%s -> %d",
+		      l.to_string ().c_str (), r.to_string ().c_str (), eq);
 
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "{ frame_id_eq (l=");
-      fprint_frame_id (gdb_stdlog, l);
-      fprintf_unfiltered (gdb_stdlog, ",r=");
-      fprint_frame_id (gdb_stdlog, r);
-      fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", eq);
-    }
   return eq;
 }
 
@@ -795,15 +818,15 @@ frame_id_eq (struct frame_id l, struct f
    a stack overflow strategy that cause the handler to be run on a
    different stack.  */
 
-static int
+static bool
 frame_id_inner (struct gdbarch *gdbarch, struct frame_id l, struct frame_id r)
 {
-  int inner;
+  bool inner;
 
   if (l.stack_status != FID_STACK_VALID || r.stack_status != FID_STACK_VALID)
     /* Like NaN, any operation involving an invalid ID always fails.
        Likewise if either ID has an unavailable stack address.  */
-    inner = 0;
+    inner = false;
   else if (l.artificial_depth > r.artificial_depth
 	   && l.stack_addr == r.stack_addr
 	   && l.code_addr_p == r.code_addr_p
@@ -820,7 +843,7 @@ frame_id_inner (struct gdbarch *gdbarch,
 
       if (lb == NULL || rb == NULL)
 	/* Something's gone wrong.  */
-	inner = 0;
+	inner = false;
       else
 	/* This will return true if LB and RB are the same block, or
 	   if the block with the smaller depth lexically encloses the
@@ -833,14 +856,11 @@ frame_id_inner (struct gdbarch *gdbarch,
        functions are not strictly inner than (same .stack but
        different .code and/or .special address).  */
     inner = gdbarch_inner_than (gdbarch, l.stack_addr, r.stack_addr);
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l=");
-      fprint_frame_id (gdb_stdlog, l);
-      fprintf_unfiltered (gdb_stdlog, ",r=");
-      fprint_frame_id (gdb_stdlog, r);
-      fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", inner);
-    }
+
+  frame_debug_printf ("is l=%s inner than r=%s? %d",
+		      l.to_string ().c_str (), r.to_string ().c_str (),
+		      inner);
+
   return inner;
 }
 
@@ -903,7 +923,7 @@ frame_unwind_pc (struct frame_info *this
     {
       struct gdbarch *prev_gdbarch;
       CORE_ADDR pc = 0;
-      int pc_p = 0;
+      bool pc_p = false;
 
       /* The right way.  The `pure' way.  The one true way.  This
 	 method depends solely on the register-unwind code to
@@ -926,7 +946,7 @@ frame_unwind_pc (struct frame_info *this
       try
 	{
 	  pc = gdbarch_unwind_pc (prev_gdbarch, this_frame);
-	  pc_p = 1;
+	  pc_p = true;
 	}
       catch (const gdb_exception_error &ex)
 	{
@@ -934,21 +954,15 @@ frame_unwind_pc (struct frame_info *this
 	    {
 	      this_frame->prev_pc.status = CC_UNAVAILABLE;
 
-	      if (frame_debug)
-		fprintf_unfiltered (gdb_stdlog,
-				    "{ frame_unwind_pc (this_frame=%d)"
-				    " -> <unavailable> }\n",
-				    this_frame->level);
+	      frame_debug_printf ("this_frame=%d -> <unavailable>",
+				  this_frame->level);
 	    }
 	  else if (ex.error == OPTIMIZED_OUT_ERROR)
 	    {
 	      this_frame->prev_pc.status = CC_NOT_SAVED;
 
-	      if (frame_debug)
-		fprintf_unfiltered (gdb_stdlog,
-				    "{ frame_unwind_pc (this_frame=%d)"
-				    " -> <not saved> }\n",
-				    this_frame->level);
+	      frame_debug_printf ("this_frame=%d -> <not saved>",
+				  this_frame->level);
 	    }
 	  else
 	    throw;
@@ -958,12 +972,10 @@ frame_unwind_pc (struct frame_info *this
 	{
 	  this_frame->prev_pc.value = pc;
 	  this_frame->prev_pc.status = CC_VALUE;
-	  if (frame_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"{ frame_unwind_pc (this_frame=%d) "
-				"-> %s }\n",
-				this_frame->level,
-				hex_string (this_frame->prev_pc.value));
+
+	  frame_debug_printf ("this_frame=%d -> %s",
+			      this_frame->level,
+			      hex_string (this_frame->prev_pc.value));
 	}
     }
 
@@ -992,47 +1004,46 @@ frame_unwind_caller_pc (struct frame_inf
   return frame_unwind_pc (this_frame);
 }
 
-int
-get_frame_func_if_available (struct frame_info *this_frame, CORE_ADDR *pc)
+bool
+get_frame_func_if_available (frame_info *this_frame, CORE_ADDR *pc)
 {
   struct frame_info *next_frame = this_frame->next;
 
-  if (!next_frame->prev_func.p)
+  if (next_frame->prev_func.status == CC_UNKNOWN)
     {
       CORE_ADDR addr_in_block;
 
       /* Make certain that this, and not the adjacent, function is
-         found.  */
+	 found.  */
       if (!get_frame_address_in_block_if_available (this_frame, &addr_in_block))
 	{
-	  next_frame->prev_func.p = -1;
-	  if (frame_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"{ get_frame_func (this_frame=%d)"
-				" -> unavailable }\n",
-				this_frame->level);
+	  next_frame->prev_func.status = CC_UNAVAILABLE;
+
+	  frame_debug_printf ("this_frame=%d -> unavailable",
+			      this_frame->level);
 	}
       else
 	{
-	  next_frame->prev_func.p = 1;
+	  next_frame->prev_func.status = CC_VALUE;
 	  next_frame->prev_func.addr = get_pc_function_start (addr_in_block);
-	  if (frame_debug)
-	    fprintf_unfiltered (gdb_stdlog,
-				"{ get_frame_func (this_frame=%d) -> %s }\n",
-				this_frame->level,
-				hex_string (next_frame->prev_func.addr));
+
+	  frame_debug_printf ("this_frame=%d -> %s",
+			      this_frame->level,
+			      hex_string (next_frame->prev_func.addr));
 	}
     }
 
-  if (next_frame->prev_func.p < 0)
+  if (next_frame->prev_func.status == CC_UNAVAILABLE)
     {
       *pc = -1;
-      return 0;
+      return false;
     }
   else
     {
+      gdb_assert (next_frame->prev_func.status == CC_VALUE);
+
       *pc = next_frame->prev_func.addr;
-      return 1;
+      return true;
     }
 }
 
@@ -1206,66 +1217,61 @@ get_frame_register (struct frame_info *f
 struct value *
 frame_unwind_register_value (frame_info *next_frame, int regnum)
 {
-  struct gdbarch *gdbarch;
-  struct value *value;
+  FRAME_SCOPED_DEBUG_ENTER_EXIT;
 
   gdb_assert (next_frame != NULL);
-  gdbarch = frame_unwind_arch (next_frame);
-
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "{ frame_unwind_register_value "
-			  "(frame=%d,regnum=%d(%s),...) ",
-			  next_frame->level, regnum,
-			  user_reg_map_regnum_to_name (gdbarch, regnum));
-    }
+  gdbarch *gdbarch = frame_unwind_arch (next_frame);
+  frame_debug_printf ("frame=%d, regnum=%d(%s)",
+		      next_frame->level, regnum,
+		      user_reg_map_regnum_to_name (gdbarch, regnum));
 
   /* Find the unwinder.  */
   if (next_frame->unwind == NULL)
     frame_unwind_find_by_frame (next_frame, &next_frame->prologue_cache);
 
   /* Ask this frame to unwind its register.  */
-  value = next_frame->unwind->prev_register (next_frame,
-					     &next_frame->prologue_cache,
-					     regnum);
+  value *value = next_frame->unwind->prev_register (next_frame,
+						    &next_frame->prologue_cache,
+						    regnum);
 
   if (frame_debug)
     {
-      fprintf_unfiltered (gdb_stdlog, "->");
+      string_file debug_file;
+
+      fprintf_unfiltered (&debug_file, "  ->");
       if (value_optimized_out (value))
 	{
-	  fprintf_unfiltered (gdb_stdlog, " ");
-	  val_print_optimized_out (value, gdb_stdlog);
+	  fprintf_unfiltered (&debug_file, " ");
+	  val_print_not_saved (&debug_file);
 	}
       else
 	{
 	  if (VALUE_LVAL (value) == lval_register)
-	    fprintf_unfiltered (gdb_stdlog, " register=%d",
+	    fprintf_unfiltered (&debug_file, " register=%d",
 				VALUE_REGNUM (value));
 	  else if (VALUE_LVAL (value) == lval_memory)
-	    fprintf_unfiltered (gdb_stdlog, " address=%s",
+	    fprintf_unfiltered (&debug_file, " address=%s",
 				paddress (gdbarch,
 					  value_address (value)));
 	  else
-	    fprintf_unfiltered (gdb_stdlog, " computed");
+	    fprintf_unfiltered (&debug_file, " computed");
 
 	  if (value_lazy (value))
-	    fprintf_unfiltered (gdb_stdlog, " lazy");
+	    fprintf_unfiltered (&debug_file, " lazy");
 	  else
 	    {
 	      int i;
 	      const gdb_byte *buf = value_contents (value);
 
-	      fprintf_unfiltered (gdb_stdlog, " bytes=");
-	      fprintf_unfiltered (gdb_stdlog, "[");
+	      fprintf_unfiltered (&debug_file, " bytes=");
+	      fprintf_unfiltered (&debug_file, "[");
 	      for (i = 0; i < register_size (gdbarch, regnum); i++)
-		fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
-	      fprintf_unfiltered (gdb_stdlog, "]");
+		fprintf_unfiltered (&debug_file, "%02x", buf[i]);
+	      fprintf_unfiltered (&debug_file, "]");
 	    }
 	}
 
-      fprintf_unfiltered (gdb_stdlog, " }\n");
+      frame_debug_printf ("%s", debug_file.c_str ());
     }
 
   return value;
@@ -1345,8 +1351,8 @@ get_frame_register_unsigned (struct fram
   return frame_unwind_register_unsigned (frame->next, regnum);
 }
 
-int
-read_frame_register_unsigned (struct frame_info *frame, int regnum,
+bool
+read_frame_register_unsigned (frame_info *frame, int regnum,
 			      ULONGEST *val)
 {
   struct value *regval = get_frame_register_value (frame, regnum);
@@ -1359,10 +1365,10 @@ read_frame_register_unsigned (struct fra
       int size = register_size (gdbarch, VALUE_REGNUM (regval));
 
       *val = extract_unsigned_integer (value_contents (regval), size, byte_order);
-      return 1;
+      return true;
     }
 
-  return 0;
+  return false;
 }
 
 void
@@ -1403,9 +1409,9 @@ put_frame_register (struct frame_info *f
 
    Returns 0 if the register value could not be found.  */
 
-int
-deprecated_frame_register_read (struct frame_info *frame, int regnum,
-		     gdb_byte *myaddr)
+bool
+deprecated_frame_register_read (frame_info *frame, int regnum,
+				gdb_byte *myaddr)
 {
   int optimized;
   int unavailable;
@@ -1419,9 +1425,10 @@ deprecated_frame_register_read (struct f
   return !optimized && !unavailable;
 }
 
-int
-get_frame_register_bytes (struct frame_info *frame, int regnum,
-			  CORE_ADDR offset, int len, gdb_byte *myaddr,
+bool
+get_frame_register_bytes (frame_info *frame, int regnum,
+			  CORE_ADDR offset,
+			  gdb::array_view<gdb_byte> buffer,
 			  int *optimizedp, int *unavailablep)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -1448,6 +1455,8 @@ get_frame_register_bytes (struct frame_i
 	break;	/* This register is not available on this architecture.  */
       maxsize += thissize;
     }
+
+  int len = buffer.size ();
   if (len > maxsize)
     error (_("Bad debug information detected: "
 	     "Attempt to read %d bytes from registers."), len);
@@ -1460,6 +1469,8 @@ get_frame_register_bytes (struct frame_i
       if (curr_len > len)
 	curr_len = len;
 
+      gdb_byte *myaddr = buffer.data ();
+
       if (curr_len == register_size (gdbarch, regnum))
 	{
 	  enum lval_type lval;
@@ -1469,7 +1480,7 @@ get_frame_register_bytes (struct frame_i
 	  frame_register (frame, regnum, optimizedp, unavailablep,
 			  &lval, &addr, &realnum, myaddr);
 	  if (*optimizedp || *unavailablep)
-	    return 0;
+	    return false;
 	}
       else
 	{
@@ -1482,8 +1493,9 @@ get_frame_register_bytes (struct frame_i
 	  if (*optimizedp || *unavailablep)
 	    {
 	      release_value (value);
-	      return 0;
+	      return false;
 	    }
+
 	  memcpy (myaddr, value_contents_all (value) + offset, curr_len);
 	  release_value (value);
 	}
@@ -1496,12 +1508,14 @@ get_frame_register_bytes (struct frame_i
 
   *optimizedp = 0;
   *unavailablep = 0;
-  return 1;
+
+  return true;
 }
 
 void
 put_frame_register_bytes (struct frame_info *frame, int regnum,
-			  CORE_ADDR offset, int len, const gdb_byte *myaddr)
+			  CORE_ADDR offset,
+			  gdb::array_view<const gdb_byte> buffer)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
 
@@ -1512,6 +1526,7 @@ put_frame_register_bytes (struct frame_i
       regnum++;
     }
 
+  int len = buffer.size ();
   /* Copy the data.  */
   while (len > 0)
     {
@@ -1520,6 +1535,7 @@ put_frame_register_bytes (struct frame_i
       if (curr_len > len)
 	curr_len = len;
 
+      const gdb_byte *myaddr = buffer.data ();
       if (curr_len == register_size (gdbarch, regnum))
 	{
 	  put_frame_register (frame, regnum, myaddr);
@@ -1563,14 +1579,11 @@ create_sentinel_frame (struct program_sp
      (the unwound PC is the same as the pc), so make it so.  */
   frame->next = frame;
   /* The sentinel frame has a special ID.  */
-  frame->this_id.p = 1;
+  frame->this_id.p = frame_id_status::COMPUTED;
   frame->this_id.value = sentinel_frame_id;
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "{ create_sentinel_frame (...) -> ");
-      fprint_frame (gdb_stdlog, frame);
-      fprintf_unfiltered (gdb_stdlog, " }\n");
-    }
+
+  frame_debug_printf ("  -> %s", frame->to_string ().c_str ());
+
   return frame;
 }
 
@@ -1601,11 +1614,11 @@ get_current_frame (void)
      have registers is very confusing.  Besides, "printcmd.exp"
      explicitly checks that ``print $pc'' with no registers prints "No
      registers".  */
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("No registers."));
-  if (!target_has_stack)
+  if (!target_has_stack ())
     error (_("No stack."));
-  if (!target_has_memory)
+  if (!target_has_memory ())
     error (_("No memory."));
   /* Traceframes are effectively a substitute for the live inferior.  */
   if (get_traceframe_number () < 0)
@@ -1633,39 +1646,157 @@ get_current_frame (void)
 }
 
 /* The "selected" stack frame is used by default for local and arg
-   access.  May be zero, for no selected frame.  */
+   access.
+
+   The "single source of truth" for the selected frame is the
+   SELECTED_FRAME_ID / SELECTED_FRAME_LEVEL pair.
 
+   Frame IDs can be saved/restored across reinitializing the frame
+   cache, while frame_info pointers can't (frame_info objects are
+   invalidated).  If we know the corresponding frame_info object, it
+   is cached in SELECTED_FRAME.
+
+   If SELECTED_FRAME_ID / SELECTED_FRAME_LEVEL are null_frame_id / -1,
+   and the target has stack and is stopped, the selected frame is the
+   current (innermost) frame.  This means that SELECTED_FRAME_LEVEL is
+   never 0 and SELECTED_FRAME_ID is never the ID of the innermost
+   frame.
+
+   If SELECTED_FRAME_ID / SELECTED_FRAME_LEVEL are null_frame_id / -1,
+   and the target has no stack or is executing, then there's no
+   selected frame.  */
+static frame_id selected_frame_id = null_frame_id;
+static int selected_frame_level = -1;
+
+/* The cached frame_info object pointing to the selected frame.
+   Looked up on demand by get_selected_frame.  */
 static struct frame_info *selected_frame;
 
-int
-has_stack_frames (void)
+/* See frame.h.  */
+
+void
+save_selected_frame (frame_id *frame_id, int *frame_level)
+  noexcept
 {
-  if (!target_has_registers || !target_has_stack || !target_has_memory)
-    return 0;
+  *frame_id = selected_frame_id;
+  *frame_level = selected_frame_level;
+}
+
+/* See frame.h.  */
+
+void
+restore_selected_frame (frame_id frame_id, int frame_level)
+  noexcept
+{
+  /* save_selected_frame never returns level == 0, so we shouldn't see
+     it here either.  */
+  gdb_assert (frame_level != 0);
+
+  /* FRAME_ID can be null_frame_id only IFF frame_level is -1.  */
+  gdb_assert ((frame_level == -1 && !frame_id_p (frame_id))
+	      || (frame_level != -1 && frame_id_p (frame_id)));
+
+  selected_frame_id = frame_id;
+  selected_frame_level = frame_level;
+
+  /* Will be looked up later by get_selected_frame.  */
+  selected_frame = nullptr;
+}
+
+/* See frame.h.  */
+
+void
+lookup_selected_frame (struct frame_id a_frame_id, int frame_level)
+{
+  struct frame_info *frame = NULL;
+  int count;
+
+  /* This either means there was no selected frame, or the selected
+     frame was the current frame.  In either case, select the current
+     frame.  */
+  if (frame_level == -1)
+    {
+      select_frame (get_current_frame ());
+      return;
+    }
+
+  /* select_frame never saves 0 in SELECTED_FRAME_LEVEL, so we
+     shouldn't see it here.  */
+  gdb_assert (frame_level > 0);
+
+  /* Restore by level first, check if the frame id is the same as
+     expected.  If that fails, try restoring by frame id.  If that
+     fails, nothing to do, just warn the user.  */
+
+  count = frame_level;
+  frame = find_relative_frame (get_current_frame (), &count);
+  if (count == 0
+      && frame != NULL
+      /* The frame ids must match - either both valid or both
+	 outer_frame_id.  The latter case is not failsafe, but since
+	 it's highly unlikely the search by level finds the wrong
+	 frame, it's 99.9(9)% of the time (for all practical purposes)
+	 safe.  */
+      && frame_id_eq (get_frame_id (frame), a_frame_id))
+    {
+      /* Cool, all is fine.  */
+      select_frame (frame);
+      return;
+    }
+
+  frame = frame_find_by_id (a_frame_id);
+  if (frame != NULL)
+    {
+      /* Cool, refound it.  */
+      select_frame (frame);
+      return;
+    }
+
+  /* Nothing else to do, the frame layout really changed.  Select the
+     innermost stack frame.  */
+  select_frame (get_current_frame ());
+
+  /* Warn the user.  */
+  if (frame_level > 0 && !current_uiout->is_mi_like_p ())
+    {
+      warning (_("Couldn't restore frame #%d in "
+		 "current thread.  Bottom (innermost) frame selected:"),
+	       frame_level);
+      /* For MI, we should probably have a notification about current
+	 frame change.  But this error is not very likely, so don't
+	 bother for now.  */
+      print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
+    }
+}
+
+bool
+has_stack_frames ()
+{
+  if (!target_has_registers () || !target_has_stack ()
+      || !target_has_memory ())
+    return false;
 
   /* Traceframes are effectively a substitute for the live inferior.  */
   if (get_traceframe_number () < 0)
     {
       /* No current inferior, no frame.  */
       if (inferior_ptid == null_ptid)
-	return 0;
+	return false;
 
       thread_info *tp = inferior_thread ();
       /* Don't try to read from a dead thread.  */
       if (tp->state == THREAD_EXITED)
-	return 0;
+	return false;
 
       /* ... or from a spinning thread.  */
       if (tp->executing)
-	return 0;
+	return false;
     }
 
-  return 1;
+  return true;
 }
 
-/* Return the selected frame.  Always non-NULL (unless there isn't an
-   inferior sufficient for creating a frame) in which case an error is
-   thrown.  */
+/* See frame.h.  */
 
 struct frame_info *
 get_selected_frame (const char *message)
@@ -1674,24 +1805,14 @@ get_selected_frame (const char *message)
     {
       if (message != NULL && !has_stack_frames ())
 	error (("%s"), message);
-      /* Hey!  Don't trust this.  It should really be re-finding the
-	 last selected frame of the currently selected thread.  This,
-	 though, is better than nothing.  */
-      select_frame (get_current_frame ());
+
+      lookup_selected_frame (selected_frame_id, selected_frame_level);
     }
   /* There is always a frame.  */
   gdb_assert (selected_frame != NULL);
   return selected_frame;
 }
 
-/* If there is a selected frame, return it.  Otherwise, return NULL.  */
-
-struct frame_info *
-get_selected_frame_if_set (void)
-{
-  return selected_frame;
-}
-
 /* This is a variant of get_selected_frame() which can be called when
    the inferior does not have a frame; in that case it will return
    NULL instead of calling error().  */
@@ -1704,12 +1825,42 @@ deprecated_safe_get_selected_frame (void
   return get_selected_frame (NULL);
 }
 
-/* Select frame FI (or NULL - to invalidate the current frame).  */
+/* Select frame FI (or NULL - to invalidate the selected frame).  */
 
 void
 select_frame (struct frame_info *fi)
 {
   selected_frame = fi;
+  selected_frame_level = frame_relative_level (fi);
+  if (selected_frame_level == 0)
+    {
+      /* Treat the current frame especially -- we want to always
+	 save/restore it without warning, even if the frame ID changes
+	 (see lookup_selected_frame).  E.g.:
+
+	  // The current frame is selected, the target had just stopped.
+	  {
+	    scoped_restore_selected_frame restore_frame;
+	    some_operation_that_changes_the_stack ();
+	  }
+	  // scoped_restore_selected_frame's dtor runs, but the
+	  // original frame_id can't be found.  No matter whether it
+	  // is found or not, we still end up with the now-current
+	  // frame selected.  Warning in lookup_selected_frame in this
+	  // case seems pointless.
+
+	 Also get_frame_id may access the target's registers/memory,
+	 and thus skipping get_frame_id optimizes the common case.
+
+	 Saving the selected frame this way makes get_selected_frame
+	 and restore_current_frame return/re-select whatever frame is
+	 the innermost (current) then.  */
+      selected_frame_level = -1;
+      selected_frame_id = null_frame_id;
+    }
+  else
+    selected_frame_id = get_frame_id (fi);
+
   /* NOTE: cagney/2002-05-04: FI can be NULL.  This occurs when the
      frame is being invalidated.  */
 
@@ -1756,12 +1907,7 @@ create_new_frame (CORE_ADDR addr, CORE_A
 {
   struct frame_info *fi;
 
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "{ create_new_frame (addr=%s, pc=%s) ",
-			  hex_string (addr), hex_string (pc));
-    }
+  frame_debug_printf ("addr=%s, pc=%s", hex_string (addr), hex_string (pc));
 
   fi = FRAME_OBSTACK_ZALLOC (struct frame_info);
 
@@ -1783,15 +1929,10 @@ create_new_frame (CORE_ADDR addr, CORE_A
      based on the PC.  */
   frame_unwind_find_by_frame (fi, &fi->prologue_cache);
 
-  fi->this_id.p = 1;
+  fi->this_id.p = frame_id_status::COMPUTED;
   fi->this_id.value = frame_id_build (addr, pc);
 
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "-> ");
-      fprint_frame (gdb_stdlog, fi);
-      fprintf_unfiltered (gdb_stdlog, " }\n");
-    }
+  frame_debug_printf ("  -> %s", fi->to_string ().c_str ());
 
   return fi;
 }
@@ -1843,6 +1984,8 @@ reinit_frame_cache (void)
 {
   struct frame_info *fi;
 
+  ++frame_cache_generation;
+
   /* Tear down all frame caches.  */
   for (fi = sentinel_frame; fi != NULL; fi = fi->prev)
     {
@@ -1862,8 +2005,8 @@ reinit_frame_cache (void)
   sentinel_frame = NULL;		/* Invalidate cache */
   select_frame (NULL);
   frame_stash_invalidate ();
-  if (frame_debug)
-    fprintf_unfiltered (gdb_stdlog, "{ reinit_frame_cache () }\n");
+
+  frame_debug_printf ("generation=%d", frame_cache_generation);
 }
 
 /* Find where a register is saved (in memory or another register).
@@ -1922,6 +2065,8 @@ get_prev_frame_if_no_cycle (struct frame
   if (prev_frame->level == 0)
     return prev_frame;
 
+  unsigned int entry_generation = get_frame_cache_generation ();
+
   try
     {
       compute_frame_id (prev_frame);
@@ -1929,12 +2074,8 @@ get_prev_frame_if_no_cycle (struct frame
 	{
 	  /* Another frame with the same id was already in the stash.  We just
 	     detected a cycle.  */
-	  if (frame_debug)
-	    {
-	      fprintf_unfiltered (gdb_stdlog, "-> ");
-	      fprint_frame (gdb_stdlog, NULL);
-	      fprintf_unfiltered (gdb_stdlog, " // this frame has same ID }\n");
-	    }
+	  frame_debug_printf ("  -> nullptr // this frame has same ID");
+
 	  this_frame->stop_reason = UNWIND_SAME_ID;
 	  /* Unlink.  */
 	  prev_frame->next = NULL;
@@ -1944,8 +2085,11 @@ get_prev_frame_if_no_cycle (struct frame
     }
   catch (const gdb_exception &ex)
     {
-      prev_frame->next = NULL;
-      this_frame->prev = NULL;
+      if (get_frame_cache_generation () == entry_generation)
+	{
+	  prev_frame->next = NULL;
+	  this_frame->prev = NULL;
+	}
 
       throw;
     }
@@ -1960,30 +2104,25 @@ get_prev_frame_if_no_cycle (struct frame
 static struct frame_info *
 get_prev_frame_always_1 (struct frame_info *this_frame)
 {
-  struct gdbarch *gdbarch;
+  FRAME_SCOPED_DEBUG_ENTER_EXIT;
 
   gdb_assert (this_frame != NULL);
-  gdbarch = get_frame_arch (this_frame);
 
   if (frame_debug)
     {
-      fprintf_unfiltered (gdb_stdlog, "{ get_prev_frame_always (this_frame=");
       if (this_frame != NULL)
-	fprintf_unfiltered (gdb_stdlog, "%d", this_frame->level);
+	frame_debug_printf ("this_frame=%d", this_frame->level);
       else
-	fprintf_unfiltered (gdb_stdlog, "<NULL>");
-      fprintf_unfiltered (gdb_stdlog, ") ");
+	frame_debug_printf ("this_frame=nullptr");
     }
 
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+
   /* Only try to do the unwind once.  */
   if (this_frame->prev_p)
     {
-      if (frame_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog, "-> ");
-	  fprint_frame (gdb_stdlog, this_frame->prev);
-	  fprintf_unfiltered (gdb_stdlog, " // cached \n");
-	}
+      frame_debug_printf ("  -> %s // cached",
+			  this_frame->prev->to_string ().c_str ());
       return this_frame->prev;
     }
 
@@ -1994,7 +2133,7 @@ get_prev_frame_always_1 (struct frame_in
   if (this_frame->unwind == NULL)
     frame_unwind_find_by_frame (this_frame, &this_frame->prologue_cache);
 
-  this_frame->prev_p = 1;
+  this_frame->prev_p = true;
   this_frame->stop_reason = UNWIND_NO_REASON;
 
   /* If we are unwinding from an inline frame, all of the below tests
@@ -2005,6 +2144,23 @@ get_prev_frame_always_1 (struct frame_in
   if (get_frame_type (this_frame) == INLINE_FRAME)
     return get_prev_frame_if_no_cycle (this_frame);
 
+  /* If this_frame is the current frame, then compute and stash its
+     frame id prior to fetching and computing the frame id of the
+     previous frame.  Otherwise, the cycle detection code in
+     get_prev_frame_if_no_cycle() will not work correctly.  When
+     get_frame_id() is called later on, an assertion error will be
+     triggered in the event of a cycle between the current frame and
+     its previous frame.
+
+     Note we do this after the INLINE_FRAME check above.  That is
+     because the inline frame's frame id computation needs to fetch
+     the frame id of its previous real stack frame.  I.e., we need to
+     avoid recursion in that case.  This is OK since we're sure the
+     inline frame won't create a cycle with the real stack frame.  See
+     inline_frame_this_id.  */
+  if (this_frame->level == 0)
+    get_frame_id (this_frame);
+
   /* Check that this frame is unwindable.  If it isn't, don't try to
      unwind to the prev frame.  */
   this_frame->stop_reason
@@ -2013,15 +2169,9 @@ get_prev_frame_always_1 (struct frame_in
 
   if (this_frame->stop_reason != UNWIND_NO_REASON)
     {
-      if (frame_debug)
-	{
-	  enum unwind_stop_reason reason = this_frame->stop_reason;
-
-	  fprintf_unfiltered (gdb_stdlog, "-> ");
-	  fprint_frame (gdb_stdlog, NULL);
-	  fprintf_unfiltered (gdb_stdlog, " // %s }\n",
-			      frame_stop_reason_symbol_string (reason));
-	}
+      frame_debug_printf
+	("  -> nullptr // %s",
+	 frame_stop_reason_symbol_string (this_frame->stop_reason));
       return NULL;
     }
 
@@ -2038,7 +2188,7 @@ get_prev_frame_always_1 (struct frame_in
       CORE_ADDR this_pc_in_block;
       struct minimal_symbol *morestack_msym;
       const char *morestack_name = NULL;
-      
+
       /* gcc -fsplit-stack __morestack can continue the stack anywhere.  */
       this_pc_in_block = get_frame_address_in_block (this_frame);
       morestack_msym = lookup_minimal_symbol_by_pc (this_pc_in_block).minsym;
@@ -2046,13 +2196,7 @@ get_prev_frame_always_1 (struct frame_in
 	morestack_name = morestack_msym->linkage_name ();
       if (!morestack_name || strcmp (morestack_name, "__morestack") != 0)
 	{
-	  if (frame_debug)
-	    {
-	      fprintf_unfiltered (gdb_stdlog, "-> ");
-	      fprint_frame (gdb_stdlog, NULL);
-	      fprintf_unfiltered (gdb_stdlog,
-				  " // this frame ID is inner }\n");
-	    }
+	  frame_debug_printf ("  -> nullptr // this frame ID is inner");
 	  this_frame->stop_reason = UNWIND_INNER_ID;
 	  return NULL;
 	}
@@ -2092,13 +2236,7 @@ get_prev_frame_always_1 (struct frame_in
       if ((lval == lval_memory && lval == nlval && addr == naddr)
 	  || (lval == lval_register && lval == nlval && realnum == nrealnum))
 	{
-	  if (frame_debug)
-	    {
-	      fprintf_unfiltered (gdb_stdlog, "-> ");
-	      fprint_frame (gdb_stdlog, NULL);
-	      fprintf_unfiltered (gdb_stdlog, " // no saved PC }\n");
-	    }
-
+	  frame_debug_printf ("  -> nullptr // no saved PC");
 	  this_frame->stop_reason = UNWIND_NO_SAVED_PC;
 	  this_frame->prev = NULL;
 	  return NULL;
@@ -2134,9 +2272,9 @@ get_prev_frame_always (struct frame_info
 	      size_t size;
 
 	      /* The error needs to live as long as the frame does.
-	         Allocate using stack local STOP_STRING then assign the
-	         pointer to the frame, this allows the STOP_STRING on the
-	         frame to be of type 'const char *'.  */
+		 Allocate using stack local STOP_STRING then assign the
+		 pointer to the frame, this allows the STOP_STRING on the
+		 frame to be of type 'const char *'.  */
 	      size = ex.message->size () + 1;
 	      stop_string = (char *) frame_obstack_zalloc (size);
 	      memcpy (stop_string, ex.what (), size);
@@ -2200,12 +2338,7 @@ get_prev_frame_raw (struct frame_info *t
   this_frame->prev = prev_frame;
   prev_frame->next = this_frame;
 
-  if (frame_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog, "-> ");
-      fprint_frame (gdb_stdlog, prev_frame);
-      fprintf_unfiltered (gdb_stdlog, " }\n");
-    }
+  frame_debug_printf ("  -> %s", prev_frame->to_string ().c_str ());
 
   return prev_frame;
 }
@@ -2218,45 +2351,59 @@ frame_debug_got_null_frame (struct frame
 {
   if (frame_debug)
     {
-      fprintf_unfiltered (gdb_stdlog, "{ get_prev_frame (this_frame=");
       if (this_frame != NULL)
-	fprintf_unfiltered (gdb_stdlog, "%d", this_frame->level);
+	frame_debug_printf ("this_frame=%d -> %s", this_frame->level, reason);
       else
-	fprintf_unfiltered (gdb_stdlog, "<NULL>");
-      fprintf_unfiltered (gdb_stdlog, ") -> // %s}\n", reason);
+	frame_debug_printf ("this_frame=nullptr -> %s", reason);
     }
 }
 
 /* Is this (non-sentinel) frame in the "main"() function?  */
 
-static int
-inside_main_func (struct frame_info *this_frame)
+static bool
+inside_main_func (frame_info *this_frame)
 {
-  struct bound_minimal_symbol msymbol;
-  CORE_ADDR maddr;
+  if (current_program_space->symfile_object_file == nullptr)
+    return false;
 
-  if (symfile_objfile == 0)
-    return 0;
-  msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile);
-  if (msymbol.minsym == NULL)
-    return 0;
-  /* Make certain that the code, and not descriptor, address is
-     returned.  */
-  maddr = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame),
-					      BMSYMBOL_VALUE_ADDRESS (msymbol),
-					      current_top_target ());
-  return maddr == get_frame_func (this_frame);
+  CORE_ADDR sym_addr;
+  const char *name = main_name ();
+  bound_minimal_symbol msymbol
+    = lookup_minimal_symbol (name, NULL,
+			     current_program_space->symfile_object_file);
+  if (msymbol.minsym == nullptr)
+    {
+      /* In some language (for example Fortran) there will be no minimal
+	 symbol with the name of the main function.  In this case we should
+	 search the full symbols to see if we can find a match.  */
+      struct block_symbol bs = lookup_symbol (name, NULL, VAR_DOMAIN, 0);
+      if (bs.symbol == nullptr)
+	return false;
+
+      const struct block *block = SYMBOL_BLOCK_VALUE (bs.symbol);
+      gdb_assert (block != nullptr);
+      sym_addr = BLOCK_START (block);
+    }
+  else
+    sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
+
+  /* Convert any function descriptor addresses into the actual function
+     code address.  */
+  sym_addr = gdbarch_convert_from_func_ptr_addr
+    (get_frame_arch (this_frame), sym_addr, current_inferior ()->top_target ());
+
+  return sym_addr == get_frame_func (this_frame);
 }
 
 /* Test whether THIS_FRAME is inside the process entry point function.  */
 
-static int
-inside_entry_func (struct frame_info *this_frame)
+static bool
+inside_entry_func (frame_info *this_frame)
 {
   CORE_ADDR entry_point;
 
   if (!entry_point_address_query (&entry_point))
-    return 0;
+    return false;
 
   return get_frame_func (this_frame) == entry_point;
 }
@@ -2273,6 +2420,8 @@ inside_entry_func (struct frame_info *th
 struct frame_info *
 get_prev_frame (struct frame_info *this_frame)
 {
+  FRAME_SCOPED_DEBUG_ENTER_EXIT;
+
   CORE_ADDR frame_pc;
   int frame_pc_p;
 
@@ -2280,16 +2429,6 @@ get_prev_frame (struct frame_info *this_
      something should be calling get_selected_frame() or
      get_current_frame().  */
   gdb_assert (this_frame != NULL);
-  
-  /* If this_frame is the current frame, then compute and stash
-     its frame id prior to fetching and computing the frame id of the
-     previous frame.  Otherwise, the cycle detection code in
-     get_prev_frame_if_no_cycle() will not work correctly.  When
-     get_frame_id() is called later on, an assertion error will
-     be triggered in the event of a cycle between the current
-     frame and its previous frame.  */
-  if (this_frame->level == 0)
-    get_frame_id (this_frame);
 
   frame_pc_p = get_frame_pc_if_available (this_frame, &frame_pc);
 
@@ -2299,9 +2438,9 @@ get_prev_frame (struct frame_info *this_
      pcsqh register (space register for the instruction at the head of the
      instruction queue) cannot be written directly; the only way to set it
      is to branch to code that is in the target space.  In order to implement
-     frame dummies on HPUX, the called function is made to jump back to where 
-     the inferior was when the user function was called.  If gdb was inside 
-     the main function when we created the dummy frame, the dummy frame will 
+     frame dummies on HPUX, the called function is made to jump back to where
+     the inferior was when the user function was called.  If gdb was inside
+     the main function when we created the dummy frame, the dummy frame will
      point inside the main function.  */
   if (this_frame->level >= 0
       && get_frame_type (this_frame) == NORMAL_FRAME
@@ -2346,7 +2485,7 @@ get_prev_frame (struct frame_info *this_
      That should provide a far better stopper than the current
      heuristics.  */
   /* NOTE: tausq/2004-10-09: this is needed if, for example, the compiler
-     applied tail-call optimizations to main so that a function called 
+     applied tail-call optimizations to main so that a function called
      from main returns directly to the caller of main.  Since we don't
      stop at main, we should at least stop at the entry point of the
      application.  */
@@ -2381,7 +2520,7 @@ get_prev_frame_id_by_id (struct frame_id
 {
   struct frame_id prev_id;
   struct frame_info *frame;
-  
+
   frame = frame_find_by_id (id);
 
   if (frame != NULL)
@@ -2399,8 +2538,8 @@ get_frame_pc (struct frame_info *frame)
   return frame_unwind_pc (frame->next);
 }
 
-int
-get_frame_pc_if_available (struct frame_info *frame, CORE_ADDR *pc)
+bool
+get_frame_pc_if_available (frame_info *frame, CORE_ADDR *pc)
 {
 
   gdb_assert (frame->next != NULL);
@@ -2412,12 +2551,12 @@ get_frame_pc_if_available (struct frame_
   catch (const gdb_exception_error &ex)
     {
       if (ex.error == NOT_AVAILABLE_ERROR)
-	return 0;
+	return false;
       else
 	throw;
     }
 
-  return 1;
+  return true;
 }
 
 /* Return an address that falls within THIS_FRAME's code block.  */
@@ -2482,8 +2621,8 @@ get_frame_address_in_block (struct frame
   return pc;
 }
 
-int
-get_frame_address_in_block_if_available (struct frame_info *this_frame,
+bool
+get_frame_address_in_block_if_available (frame_info *this_frame,
 					 CORE_ADDR *pc)
 {
 
@@ -2494,11 +2633,11 @@ get_frame_address_in_block_if_available
   catch (const gdb_exception_error &ex)
     {
       if (ex.error == NOT_AVAILABLE_ERROR)
-	return 0;
+	return false;
       throw;
     }
 
-  return 1;
+  return true;
 }
 
 symtab_and_line
@@ -2508,14 +2647,15 @@ find_frame_sal (frame_info *frame)
   int notcurrent;
   CORE_ADDR pc;
 
-  /* If the next frame represents an inlined function call, this frame's
-     sal is the "call site" of that inlined function, which can not
-     be inferred from get_frame_pc.  */
-  next_frame = get_next_frame (frame);
   if (frame_inlined_callees (frame) > 0)
     {
       struct symbol *sym;
 
+      /* If the current frame has some inlined callees, and we have a next
+	 frame, then that frame must be an inlined frame.  In this case
+	 this frame's sal is the "call site" of the next frame's inlined
+	 function, which can not be inferred from get_frame_pc.  */
+      next_frame = get_next_frame (frame);
       if (next_frame)
 	sym = get_frame_function (next_frame);
       else
@@ -2613,11 +2753,12 @@ get_frame_args_address (struct frame_inf
 /* Return true if the frame unwinder for frame FI is UNWINDER; false
    otherwise.  */
 
-int
-frame_unwinder_is (struct frame_info *fi, const struct frame_unwind *unwinder)
+bool
+frame_unwinder_is (frame_info *fi, const frame_unwind *unwinder)
 {
-  if (fi->unwind == NULL)
+  if (fi->unwind == nullptr)
     frame_unwind_find_by_frame (fi, &fi->prologue_cache);
+
   return fi->unwind == unwinder;
 }
 
@@ -2670,9 +2811,9 @@ get_frame_address_space (struct frame_in
 
 void
 get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr,
-		  gdb_byte *buf, int len)
+		  gdb::array_view<gdb_byte> buffer)
 {
-  read_memory (addr, buf, len);
+  read_memory (addr, buffer.data (), buffer.size ());
 }
 
 LONGEST
@@ -2695,12 +2836,12 @@ get_frame_memory_unsigned (struct frame_
   return read_memory_unsigned_integer (addr, len, byte_order);
 }
 
-int
+bool
 safe_frame_unwind_memory (struct frame_info *this_frame,
-			  CORE_ADDR addr, gdb_byte *buf, int len)
+			  CORE_ADDR addr, gdb::array_view<gdb_byte> buffer)
 {
   /* NOTE: target_read_memory returns zero on success!  */
-  return !target_read_memory (addr, buf, len);
+  return target_read_memory (addr, buffer.data (), buffer.size ()) == 0;
 }
 
 /* Architecture methods.  */
@@ -2728,12 +2869,10 @@ frame_unwind_arch (struct frame_info *ne
 	arch = get_frame_arch (next_frame);
 
       next_frame->prev_arch.arch = arch;
-      next_frame->prev_arch.p = 1;
-      if (frame_debug)
-	fprintf_unfiltered (gdb_stdlog,
-			    "{ frame_unwind_arch (next_frame=%d) -> %s }\n",
-			    next_frame->level,
-			    gdbarch_bfd_arch_info (arch)->printable_name);
+      next_frame->prev_arch.p = true;
+      frame_debug_printf ("next_frame=%d -> %s",
+			  next_frame->level,
+			  gdbarch_bfd_arch_info (arch)->printable_name);
     }
 
   return next_frame->prev_arch.arch;
@@ -2758,7 +2897,7 @@ enum language
 get_frame_language (struct frame_info *frame)
 {
   CORE_ADDR pc = 0;
-  int pc_p = 0;
+  bool pc_p = false;
 
   gdb_assert (frame!= NULL);
 
@@ -2774,7 +2913,7 @@ get_frame_language (struct frame_info *f
   try
     {
       pc = get_frame_address_in_block (frame);
-      pc_p = 1;
+      pc_p = true;
     }
   catch (const gdb_exception_error &ex)
     {
@@ -2883,13 +3022,13 @@ frame_cleanup_after_sniffer (struct fram
   gdb_assert (!frame->prev_p);
 
   /* The sniffer should not check the frame's ID; that's circular.  */
-  gdb_assert (!frame->this_id.p);
+  gdb_assert (frame->this_id.p != frame_id_status::COMPUTED);
 
   /* Clear cached fields dependent on the unwinder.
 
      The previous PC is independent of the unwinder, but the previous
      function is not (see get_frame_address_in_block).  */
-  frame->prev_func.p = 0;
+  frame->prev_func.status = CC_UNKNOWN;
   frame->prev_func.addr = 0;
 
   /* Discard the unwinder last, so that we can easily find it if an assertion
@@ -2912,26 +3051,11 @@ frame_prepare_for_sniffer (struct frame_
 static struct cmd_list_element *set_backtrace_cmdlist;
 static struct cmd_list_element *show_backtrace_cmdlist;
 
-static void
-set_backtrace_cmd (const char *args, int from_tty)
-{
-  help_list (set_backtrace_cmdlist, "set backtrace ", all_commands,
-	     gdb_stdout);
-}
-
-static void
-show_backtrace_cmd (const char *args, int from_tty)
-{
-  cmd_show_list (show_backtrace_cmdlist, from_tty, "");
-}
-
 /* Definition of the "set backtrace" settings that are exposed as
    "backtrace" command options.  */
 
 using boolean_option_def
   = gdb::option::boolean_option_def<set_backtrace_options>;
-using uinteger_option_def
-  = gdb::option::uinteger_option_def<set_backtrace_options>;
 
 const gdb::option::option_def set_backtrace_option_defs[] = {
 
@@ -2958,25 +3082,27 @@ the rest of the stack trace."),
   },
 };
 
+void _initialize_frame ();
 void
-_initialize_frame (void)
+_initialize_frame ()
 {
   obstack_init (&frame_cache_obstack);
 
   frame_stash_create ();
 
-  gdb::observers::target_changed.attach (frame_observer_target_changed);
+  gdb::observers::target_changed.attach (frame_observer_target_changed,
+					 "frame");
 
-  add_prefix_cmd ("backtrace", class_maintenance, set_backtrace_cmd, _("\
+  add_basic_prefix_cmd ("backtrace", class_maintenance, _("\
 Set backtrace specific variables.\n\
 Configure backtrace variables such as the backtrace limit"),
-		  &set_backtrace_cmdlist, "set backtrace ",
-		  0/*allow-unknown*/, &setlist);
-  add_prefix_cmd ("backtrace", class_maintenance, show_backtrace_cmd, _("\
+			&set_backtrace_cmdlist,
+			0/*allow-unknown*/, &setlist);
+  add_show_prefix_cmd ("backtrace", class_maintenance, _("\
 Show backtrace specific variables.\n\
 Show backtrace variables such as the backtrace limit."),
-		  &show_backtrace_cmdlist, "show backtrace ",
-		  0/*allow-unknown*/, &showlist);
+		       &show_backtrace_cmdlist,
+		       0/*allow-unknown*/, &showlist);
 
   add_setshow_uinteger_cmd ("limit", class_obscure,
 			    &user_set_backtrace_options.backtrace_limit, _("\
@@ -2994,11 +3120,11 @@ Literal \"unlimited\" or zero means no l
      set_backtrace_option_defs, &set_backtrace_cmdlist, &show_backtrace_cmdlist);
 
   /* Debug this files internals.  */
-  add_setshow_zuinteger_cmd ("frame", class_maintenance, &frame_debug,  _("\
+  add_setshow_boolean_cmd ("frame", class_maintenance, &frame_debug,  _("\
 Set frame debugging."), _("\
 Show frame debugging."), _("\
 When non-zero, frame specific internal debugging is enabled."),
-			     NULL,
-			     show_frame_debug,
-			     &setdebuglist, &showdebuglist);
+			   NULL,
+			   show_frame_debug,
+			   &setdebuglist, &showdebuglist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame.h ./gdb/frame.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frame.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for dealing with stack frames, for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -45,8 +45,8 @@
    strongly hinting at its unsafeness)
 
    safe_....(): Safer version of various functions, doesn't throw an
-   error (leave this for later?).  Returns non-zero / non-NULL if the
-   request succeeds, zero / NULL otherwize.
+   error (leave this for later?).  Returns true / non-NULL if the request
+   succeeds, false / NULL otherwise.
 
    Suffixes:
 
@@ -71,6 +71,7 @@
 
 #include "language.h"
 #include "cli/cli-option.h"
+#include "gdbsupport/common-debug.h"
 
 struct symtab_and_line;
 struct frame_unwind;
@@ -85,8 +86,7 @@ struct frame_print_options;
 
 enum frame_id_stack_status
 {
-  /* Stack address is invalid.  E.g., this frame is the outermost
-     (i.e., _start), and the stack hasn't been setup yet.  */
+  /* Stack address is invalid.  */
   FID_STACK_INVALID = 0,
 
   /* Stack address is valid, and is found in the stack_addr field.  */
@@ -95,6 +95,12 @@ enum frame_id_stack_status
   /* Sentinel frame.  */
   FID_STACK_SENTINEL = 2,
 
+  /* Outer frame.  Since a frame's stack address is typically defined as the
+     value the stack pointer had prior to the activation of the frame, an outer
+     frame doesn't have a stack address.  The frame ids of frames inlined in the
+     outer frame are also of this type.  */
+  FID_STACK_OUTER = 3,
+
   /* Stack address is unavailable.  I.e., there's a valid stack, but
      we don't know where it is (because memory or registers we'd
      compute it from were not collected).  */
@@ -144,8 +150,8 @@ struct frame_id
 
   /* The frame's special address.  This shall be constant through out the
      lifetime of the frame.  This is used for architectures that may have
-     frames that do not change the stack but are still distinct and have 
-     some form of distinct identifier (e.g. the ia64 which uses a 2nd 
+     frames that do not change the stack but are still distinct and have
+     some form of distinct identifier (e.g. the ia64 which uses a 2nd
      stack for registers).  This field is treated as unordered - i.e. will
      not be used in frame ordering comparisons.
 
@@ -164,6 +170,9 @@ struct frame_id
      Caller of inlined function will have it zero, each more inner called frame
      will have it increasingly one, two etc.  Similarly for TAILCALL_FRAME.  */
   int artificial_depth;
+
+  /* Return a string representation of this frame id.  */
+  std::string to_string () const;
 };
 
 /* Save and restore the currently selected frame.  */
@@ -181,8 +190,14 @@ public:
 
 private:
 
-  /* The ID of the previously selected frame.  */
+  /* The ID and level of the previously selected frame.  */
   struct frame_id m_fid;
+  int m_level;
+
+  /* Save/restore the language as well, because selecting a frame
+     changes the current language to the frame's language if "set
+     language auto".  */
+  enum language m_lang;
 };
 
 /* Methods for constructing and comparing Frame IDs.  */
@@ -200,7 +215,17 @@ extern const struct frame_id outer_frame
 
 /* Flag to control debugging.  */
 
-extern unsigned int frame_debug;
+extern bool frame_debug;
+
+/* Print a "frame" debug statement.  */
+
+#define frame_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (frame_debug, "frame", fmt, ##__VA_ARGS__)
+
+/* Print "frame" enter/exit debug statements.  */
+
+#define FRAME_SCOPED_DEBUG_ENTER_EXIT \
+  scoped_debug_enter_exit (frame_debug, "frame")
 
 /* Construct a frame ID.  The first parameter is the frame's constant
    stack address (typically the outer-bound), and the second the
@@ -236,24 +261,16 @@ extern struct frame_id
    as the special identifier address are set to indicate wild cards.  */
 extern struct frame_id frame_id_build_wild (CORE_ADDR stack_addr);
 
-/* Returns non-zero when L is a valid frame (a valid frame has a
-   non-zero .base).  The outermost frame is valid even without an
-   ID.  */
-extern int frame_id_p (struct frame_id l);
+/* Returns true when L is a valid frame.  */
+extern bool frame_id_p (frame_id l);
 
-/* Returns non-zero when L is a valid frame representing a frame made up by GDB
+/* Returns true when L is a valid frame representing a frame made up by GDB
    without stack data representation in inferior, such as INLINE_FRAME or
    TAILCALL_FRAME.  */
-extern int frame_id_artificial_p (struct frame_id l);
-
-/* Returns non-zero when L and R identify the same frame, or, if
-   either L or R have a zero .func, then the same frame base.  */
-extern int frame_id_eq (struct frame_id l, struct frame_id r);
-
-/* Write the internal representation of a frame ID on the specified
-   stream.  */
-extern void fprint_frame_id (struct ui_file *file, struct frame_id id);
+extern bool frame_id_artificial_p (frame_id l);
 
+/* Returns true when L and R identify the same frame.  */
+extern bool frame_id_eq (frame_id l, frame_id r);
 
 /* Frame types.  Some are real, some are signal trampolines, and some
    are completely artificial (dummy).  */
@@ -303,7 +320,7 @@ extern struct frame_info *get_current_fr
 /* Does the current target interface have enough state to be able to
    query the current inferior for frame info, and is the inferior in a
    state where that is possible?  */
-extern int has_stack_frames (void);
+extern bool has_stack_frames ();
 
 /* Invalidates the frame cache (this function should have been called
    invalidate_cached_frames).
@@ -314,24 +331,49 @@ extern int has_stack_frames (void);
    modifies the target invalidating the frame cache).  */
 extern void reinit_frame_cache (void);
 
-/* On demand, create the selected frame and then return it.  If the
-   selected frame can not be created, this function prints then throws
-   an error.  When MESSAGE is non-NULL, use it for the error message,
-   otherwize use a generic error message.  */
+/* Return the selected frame.  Always returns non-NULL.  If there
+   isn't an inferior sufficient for creating a frame, an error is
+   thrown.  When MESSAGE is non-NULL, use it for the error message,
+   otherwise use a generic error message.  */
 /* FIXME: cagney/2002-11-28: At present, when there is no selected
    frame, this function always returns the current (inner most) frame.
    It should instead, when a thread has previously had its frame
    selected (but not resumed) and the frame cache invalidated, find
    and then return that thread's previously selected frame.  */
-extern struct frame_info *get_selected_frame (const char *message);
-
-/* If there is a selected frame, return it.  Otherwise, return NULL.  */
-extern struct frame_info *get_selected_frame_if_set (void);
+extern struct frame_info *get_selected_frame (const char *message = nullptr);
 
-/* Select a specific frame.  NULL, apparently implies re-select the
-   inner most frame.  */
+/* Select a specific frame.  NULL implies re-select the inner most
+   frame.  */
 extern void select_frame (struct frame_info *);
 
+/* Save the frame ID and frame level of the selected frame in FRAME_ID
+   and FRAME_LEVEL, to be restored later with restore_selected_frame.
+
+   This is preferred over getting the same info out of
+   get_selected_frame directly because this function does not create
+   the selected-frame's frame_info object if it hasn't been created
+   yet, and thus is more efficient and doesn't throw.  */
+extern void save_selected_frame (frame_id *frame_id, int *frame_level)
+  noexcept;
+
+/* Restore selected frame as saved with save_selected_frame.
+
+   Does not try to find the corresponding frame_info object.  Instead
+   the next call to get_selected_frame will look it up and cache the
+   result.
+
+   This function does not throw.  It is designed to be safe to called
+   from the destructors of RAII types.  */
+extern void restore_selected_frame (frame_id frame_id, int frame_level)
+  noexcept;
+
+/* Lookup the frame_info object for the selected frame FRAME_ID /
+   FRAME_LEVEL and cache the result.
+
+   If FRAME_LEVEL > 0 and the originally selected frame isn't found,
+   warn and select the innermost (current) frame.  */
+extern void lookup_selected_frame (frame_id frame_id, int frame_level);
+
 /* Given a FRAME, return the next (more inner, younger) or previous
    (more outer, older) frame.  */
 extern struct frame_info *get_prev_frame (struct frame_info *);
@@ -367,8 +409,7 @@ extern CORE_ADDR get_frame_pc (struct fr
 /* Same as get_frame_pc, but return a boolean indication of whether
    the PC is actually available, instead of throwing an error.  */
 
-extern int get_frame_pc_if_available (struct frame_info *frame,
-				      CORE_ADDR *pc);
+extern bool get_frame_pc_if_available (frame_info *frame, CORE_ADDR *pc);
 
 /* An address (not necessarily aligned to an instruction boundary)
    that falls within THIS frame's code block.
@@ -390,9 +431,8 @@ extern CORE_ADDR get_frame_address_in_bl
    PC is unavailable, it will not be), instead of possibly throwing an
    error trying to read an unavailable PC.  */
 
-extern int
-  get_frame_address_in_block_if_available (struct frame_info *this_frame,
-					   CORE_ADDR *pc);
+extern bool get_frame_address_in_block_if_available (frame_info *this_frame,
+						     CORE_ADDR *pc);
 
 /* The frame's inner-most bound.  AKA the stack-pointer.  Confusingly
    known as top-of-stack.  */
@@ -409,7 +449,7 @@ extern CORE_ADDR get_frame_func (struct
    will not be), instead of possibly throwing an error trying to read
    an unavailable PC.  */
 
-extern int get_frame_func_if_available (struct frame_info *fi, CORE_ADDR *);
+extern bool get_frame_func_if_available (frame_info *fi, CORE_ADDR *);
 
 /* Closely related to the resume address, various symbol table
    attributes that are determined by the PC.  Note that for a normal
@@ -597,8 +637,8 @@ extern ULONGEST get_frame_register_unsig
    get_frame_register_value, that do not throw if the result is
    optimized out or unavailable.  */
 
-extern int read_frame_register_unsigned (struct frame_info *frame,
-					 int regnum, ULONGEST *val);
+extern bool read_frame_register_unsigned (frame_info *frame,
+					  int regnum, ULONGEST *val);
 
 /* Get the value of the register that belongs to this FRAME.  This
    function is a wrapper to the call sequence ``frame_register_unwind
@@ -621,16 +661,16 @@ extern void put_frame_register (struct f
    in frame FRAME, starting at OFFSET, into BUF.  If the register
    contents are optimized out or unavailable, set *OPTIMIZEDP,
    *UNAVAILABLEP accordingly.  */
-extern int get_frame_register_bytes (struct frame_info *frame, int regnum,
-				     CORE_ADDR offset, int len,
-				     gdb_byte *myaddr,
-				     int *optimizedp, int *unavailablep);
+extern bool get_frame_register_bytes (frame_info *frame, int regnum,
+				      CORE_ADDR offset,
+				      gdb::array_view<gdb_byte> buffer,
+				      int *optimizedp, int *unavailablep);
 
-/* Write LEN bytes to one or multiple registers starting with REGNUM
-   in frame FRAME, starting at OFFSET, into BUF.  */
+/* Write bytes from BUFFER to one or multiple registers starting with REGNUM
+   in frame FRAME, starting at OFFSET.  */
 extern void put_frame_register_bytes (struct frame_info *frame, int regnum,
-				      CORE_ADDR offset, int len,
-				      const gdb_byte *myaddr);
+				      CORE_ADDR offset,
+				      gdb::array_view<const gdb_byte> buffer);
 
 /* Unwind the PC.  Strictly speaking return the resume address of the
    calling frame.  For GDB, `pc' is the resume address and not a
@@ -656,16 +696,16 @@ extern void frame_pop (struct frame_info
    adaptor frames this should be ok.  */
 
 extern void get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr,
-			      gdb_byte *buf, int len);
+			      gdb::array_view<gdb_byte> buffer);
 extern LONGEST get_frame_memory_signed (struct frame_info *this_frame,
 					CORE_ADDR memaddr, int len);
 extern ULONGEST get_frame_memory_unsigned (struct frame_info *this_frame,
 					   CORE_ADDR memaddr, int len);
 
-/* Same as above, but return non-zero when the entire memory read
-   succeeds, zero otherwize.  */
-extern int safe_frame_unwind_memory (struct frame_info *this_frame,
-				     CORE_ADDR addr, gdb_byte *buf, int len);
+/* Same as above, but return true zero when the entire memory read
+   succeeds, false otherwise.  */
+extern bool safe_frame_unwind_memory (frame_info *this_frame, CORE_ADDR addr,
+				      gdb::array_view<gdb_byte> buffer);
 
 /* Return this frame's architecture.  */
 extern struct gdbarch *get_frame_arch (struct frame_info *this_frame);
@@ -772,8 +812,8 @@ extern void print_frame_info (const fram
 
 extern struct frame_info *block_innermost_frame (const struct block *);
 
-extern int deprecated_frame_register_read (struct frame_info *frame, int regnum,
-				gdb_byte *buf);
+extern bool deprecated_frame_register_read (frame_info *frame, int regnum,
+					    gdb_byte *buf);
 
 /* From stack.c.  */
 
@@ -907,8 +947,7 @@ extern struct frame_info *create_new_fra
 /* Return true if the frame unwinder for frame FI is UNWINDER; false
    otherwise.  */
 
-extern int frame_unwinder_is (struct frame_info *fi,
-			      const struct frame_unwind *unwinder);
+extern bool frame_unwinder_is (frame_info *fi, const frame_unwind *unwinder);
 
 /* Return the language of FRAME.  */
 
@@ -949,6 +988,10 @@ extern const gdb::option::option_def set
 /* The values behind the global "set backtrace ..." settings.  */
 extern set_backtrace_options user_set_backtrace_options;
 
+/* Get the number of calls to reinit_frame_cache.  */
+
+unsigned int get_frame_cache_generation ();
+
 /* Mark that the PC value is masked for the previous frame.  */
 
 extern void set_frame_previous_pc_masked (struct frame_info *frame);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-unwind.c ./gdb/frame-unwind.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-unwind.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frame-unwind.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for frame unwinder, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,6 +27,7 @@
 #include "gdb_obstack.h"
 #include "target.h"
 #include "gdbarch.h"
+#include "dwarf2/frame-tailcall.h"
 
 static struct gdbarch_data *frame_unwind_data;
 
@@ -43,6 +44,18 @@ struct frame_unwind_table
   struct frame_unwind_table_entry **osabi_head;
 };
 
+/* A helper function to add an unwinder to a list.  LINK says where to
+   install the new unwinder.  The new link is returned.  */
+
+static struct frame_unwind_table_entry **
+add_unwinder (struct obstack *obstack, const struct frame_unwind *unwinder,
+	      struct frame_unwind_table_entry **link)
+{
+  *link = OBSTACK_ZALLOC (obstack, struct frame_unwind_table_entry);
+  (*link)->unwinder = unwinder;
+  return &(*link)->next;
+}
+
 static void *
 frame_unwind_init (struct obstack *obstack)
 {
@@ -51,13 +64,21 @@ frame_unwind_init (struct obstack *obsta
 
   /* Start the table out with a few default sniffers.  OSABI code
      can't override this.  */
-  table->list = OBSTACK_ZALLOC (obstack, struct frame_unwind_table_entry);
-  table->list->unwinder = &dummy_frame_unwind;
-  table->list->next = OBSTACK_ZALLOC (obstack,
-				      struct frame_unwind_table_entry);
-  table->list->next->unwinder = &inline_frame_unwind;
+  struct frame_unwind_table_entry **link = &table->list;
+
+  link = add_unwinder (obstack, &dummy_frame_unwind, link);
+  /* The DWARF tailcall sniffer must come before the inline sniffer.
+     Otherwise, we can end up in a situation where a DWARF frame finds
+     tailcall information, but then the inline sniffer claims a frame
+     before the tailcall sniffer, resulting in confusion.  This is
+     safe to do always because the tailcall sniffer can only ever be
+     activated if the newer frame was created using the DWARF
+     unwinder, and it also found tailcall information.  */
+  link = add_unwinder (obstack, &dwarf2_tailcall_frame_unwind, link);
+  link = add_unwinder (obstack, &inline_frame_unwind, link);
+
   /* The insertion point for OSABI sniffers.  */
-  table->osabi_head = &table->list->next->next;
+  table->osabi_head = link;
   return table;
 }
 
@@ -96,22 +117,32 @@ frame_unwind_append_unwinder (struct gdb
 
 static int
 frame_unwind_try_unwinder (struct frame_info *this_frame, void **this_cache,
-                          const struct frame_unwind *unwinder)
+			  const struct frame_unwind *unwinder)
 {
   int res = 0;
 
+  unsigned int entry_generation = get_frame_cache_generation ();
+
   frame_prepare_for_sniffer (this_frame, unwinder);
 
   try
     {
+      frame_debug_printf ("trying unwinder \"%s\"", unwinder->name);
       res = unwinder->sniffer (unwinder, this_frame, this_cache);
     }
   catch (const gdb_exception &ex)
     {
+      frame_debug_printf ("caught exception: %s", ex.message->c_str ());
+
       /* Catch all exceptions, caused by either interrupt or error.
-	 Reset *THIS_CACHE.  */
-      *this_cache = NULL;
-      frame_cleanup_after_sniffer (this_frame);
+	 Reset *THIS_CACHE, unless something reinitialized the frame
+	 cache meanwhile, in which case THIS_FRAME/THIS_CACHE are now
+	 dangling.  */
+      if (get_frame_cache_generation () == entry_generation)
+	{
+	  *this_cache = NULL;
+	  frame_cleanup_after_sniffer (this_frame);
+	}
 
       if (ex.error == NOT_AVAILABLE_ERROR)
 	{
@@ -125,9 +156,13 @@ frame_unwind_try_unwinder (struct frame_
     }
 
   if (res)
-    return 1;
+    {
+      frame_debug_printf ("yes");
+      return 1;
+    }
   else
     {
+      frame_debug_printf ("no");
       /* Don't set *THIS_CACHE to NULL here, because sniffer has to do
 	 so.  */
       frame_cleanup_after_sniffer (this_frame);
@@ -143,6 +178,9 @@ frame_unwind_try_unwinder (struct frame_
 void
 frame_unwind_find_by_frame (struct frame_info *this_frame, void **this_cache)
 {
+  FRAME_SCOPED_DEBUG_ENTER_EXIT;
+  frame_debug_printf ("this_frame=%d", frame_relative_level (this_frame));
+
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   struct frame_unwind_table *table
     = (struct frame_unwind_table *) gdbarch_data (gdbarch, frame_unwind_data);
@@ -152,13 +190,13 @@ frame_unwind_find_by_frame (struct frame
   unwinder_from_target = target_get_unwinder ();
   if (unwinder_from_target != NULL
       && frame_unwind_try_unwinder (this_frame, this_cache,
-                                   unwinder_from_target))
+				   unwinder_from_target))
     return;
 
   unwinder_from_target = target_get_tailcall_unwinder ();
   if (unwinder_from_target != NULL
       && frame_unwind_try_unwinder (this_frame, this_cache,
-                                   unwinder_from_target))
+				   unwinder_from_target))
     return;
 
   for (entry = table->list; entry != NULL; entry = entry->next)
@@ -223,18 +261,8 @@ frame_unwind_got_optimized (struct frame
 {
   struct gdbarch *gdbarch = frame_unwind_arch (frame);
   struct type *type = register_type (gdbarch, regnum);
-  struct value *val;
 
-  /* Return an lval_register value, so that we print it as
-     "<not saved>".  */
-  val = allocate_value_lazy (type);
-  set_value_lazy (val, 0);
-  mark_value_bytes_optimized_out (val, 0, TYPE_LENGTH (type));
-  VALUE_LVAL (val) = lval_register;
-  VALUE_REGNUM (val) = regnum;
-  VALUE_NEXT_FRAME_ID (val)
-    = get_frame_id (get_next_frame_sentinel_okay (frame));
-  return val;
+  return allocate_optimized_out_value (type);
 }
 
 /* Return a value which indicates that FRAME copied REGNUM into
@@ -278,7 +306,7 @@ frame_unwind_got_constant (struct frame_
 }
 
 struct value *
-frame_unwind_got_bytes (struct frame_info *frame, int regnum, gdb_byte *buf)
+frame_unwind_got_bytes (struct frame_info *frame, int regnum, const gdb_byte *buf)
 {
   struct gdbarch *gdbarch = frame_unwind_arch (frame);
   struct value *reg_val;
@@ -305,8 +333,9 @@ frame_unwind_got_address (struct frame_i
   return reg_val;
 }
 
+void _initialize_frame_unwind ();
 void
-_initialize_frame_unwind (void)
+_initialize_frame_unwind ()
 {
   frame_unwind_data = gdbarch_data_register_pre_init (frame_unwind_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-unwind.h ./gdb/frame-unwind.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frame-unwind.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frame-unwind.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for a frame unwinder, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -133,6 +133,9 @@ typedef void (frame_this_id_ftype) (stru
    may be a lazy reference to memory, a lazy reference to the value of
    a register in THIS frame, or a non-lvalue.
 
+   If the previous frame's register was not saved by THIS_FRAME and is
+   therefore undefined, return a wholly optimized-out not_lval value.
+
    THIS_PROLOGUE_CACHE can be used to share any prolog analysis data
    with the other unwind methods.  Memory for that cache should be
    allocated using FRAME_OBSTACK_ZALLOC().  */
@@ -155,6 +158,7 @@ typedef struct gdbarch *(frame_prev_arch
 
 struct frame_unwind
 {
+  const char *name;
   /* The frame's type.  Should this instead be a collection of
      predicates that test the frame for various attributes?  */
   enum frame_type type;
@@ -223,7 +227,7 @@ struct value *frame_unwind_got_constant
    inside BUF.  */
 
 struct value *frame_unwind_got_bytes (struct frame_info *frame, int regnum,
-                                      gdb_byte *buf);
+				      const gdb_byte *buf);
 
 /* Return a value which indicates that FRAME's saved version of REGNUM
    has a known constant (computed) value of ADDR.  Convert the
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frv-linux-tdep.c ./gdb/frv-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frv-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frv-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Target-dependent code for GNU/Linux running on the Fujitsu FR-V,
    for GDB.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -169,7 +169,7 @@ frv_linux_pc_in_sigtramp (struct gdbarch
 
 static LONGEST
 frv_linux_sigcontext_reg_addr (struct frame_info *this_frame, int regno,
-                               CORE_ADDR *sc_addr_cache_ptr)
+			       CORE_ADDR *sc_addr_cache_ptr)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -200,19 +200,19 @@ frv_linux_sigcontext_reg_addr (struct fr
       else if (tramp_type == RT_SIGTRAMP)
 	{
 	  /* For a realtime sigtramp frame, SP + 12 contains a pointer
- 	     to a ucontext struct.  The ucontext struct contains a
- 	     sigcontext struct starting 24 bytes in.  (The offset of
- 	     uc_mcontext within struct ucontext is derived as follows: 
- 	     stack_t is a 12-byte struct and struct sigcontext is
- 	     8-byte aligned.  This gives an offset of 8 + 12 + 4 (for
- 	     padding) = 24.)  */
+	     to a ucontext struct.  The ucontext struct contains a
+	     sigcontext struct starting 24 bytes in.  (The offset of
+	     uc_mcontext within struct ucontext is derived as follows: 
+	     stack_t is a 12-byte struct and struct sigcontext is
+	     8-byte aligned.  This gives an offset of 8 + 12 + 4 (for
+	     padding) = 24.)  */
 	  if (target_read_memory (sp + 12, buf, sizeof buf) != 0)
 	    {
 	      warning (_("Can't read realtime sigtramp frame."));
 	      return 0;
 	    }
 	  sc_addr = extract_unsigned_integer (buf, sizeof buf, byte_order);
- 	  sc_addr += 24;
+	  sc_addr += 24;
 	}
       else
 	internal_error (__FILE__, __LINE__, _("not a signal trampoline"));
@@ -334,6 +334,7 @@ frv_linux_sigtramp_frame_sniffer (const
 
 static const struct frame_unwind frv_linux_sigtramp_frame_unwind =
 {
+  "frv linux sigtramp",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   frv_linux_sigtramp_frame_this_id,
@@ -410,7 +411,7 @@ static const struct regcache_map_entry f
 
 static void 
 frv_linux_supply_gregset (const struct regset *regset,
-                          struct regcache *regcache,
+			  struct regcache *regcache,
 			  int regnum, const void *gregs, size_t len)
 {
   int regi;
@@ -456,7 +457,7 @@ frv_linux_iterate_over_regset_sections (
 static void
 frv_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.  */
   frame_unwind_append_unwinder (gdbarch, &frv_linux_sigtramp_frame_unwind); 
@@ -481,8 +482,9 @@ frv_linux_elf_osabi_sniffer (bfd *abfd)
     return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_frv_linux_tdep ();
 void
-_initialize_frv_linux_tdep (void)
+_initialize_frv_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_frv, 0, GDB_OSABI_LINUX,
 			  frv_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frv-tdep.c ./gdb/frv-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frv-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frv-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -49,7 +49,7 @@ struct frv_unwind_cache		/* was struct f
     CORE_ADDR base;
 
     /* Table indicating the location of each and every register.  */
-    struct trad_frame_saved_reg *saved_regs;
+    trad_frame_saved_reg *saved_regs;
   };
 
 /* A structure describing a particular variant of the FRV.
@@ -100,7 +100,7 @@ frv_abi (struct gdbarch *gdbarch)
    not.  (E.g, -1 will be returned if the ABI isn't the FDPIC ABI.)  */
 int
 frv_fdpic_loadmap_addresses (struct gdbarch *gdbarch, CORE_ADDR *interp_addr,
-                             CORE_ADDR *exec_addr)
+			     CORE_ADDR *exec_addr)
 {
   if (frv_abi (gdbarch) != FRV_ABI_FDPIC)
     return -1;
@@ -296,7 +296,7 @@ frv_register_type (struct gdbarch *gdbar
 
 static enum register_status
 frv_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
-                          int reg, gdb_byte *buffer)
+			  int reg, gdb_byte *buffer)
 {
   enum register_status status;
 
@@ -309,7 +309,7 @@ frv_pseudo_register_read (struct gdbarch
   else if (accg0_regnum <= reg && reg <= accg7_regnum)
     {
       /* The accg raw registers have four values in each slot with the
-         lowest register number occupying the first byte.  */
+	 lowest register number occupying the first byte.  */
 
       int raw_regnum = accg0123_regnum + (reg - accg0_regnum) / 4;
       int byte_num = (reg - accg0_regnum) % 4;
@@ -333,7 +333,7 @@ frv_pseudo_register_read (struct gdbarch
 
 static void
 frv_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
-                          int reg, const gdb_byte *buffer)
+			  int reg, const gdb_byte *buffer)
 {
   if (reg == iacc0_regnum)
     {
@@ -343,7 +343,7 @@ frv_pseudo_register_write (struct gdbarc
   else if (accg0_regnum <= reg && reg <= accg7_regnum)
     {
       /* The accg raw registers have four values in each slot with the
-         lowest register number occupying the first byte.  */
+	 lowest register number occupying the first byte.  */
 
       int raw_regnum = accg0123_regnum + (reg - accg0_regnum) / 4;
       int byte_num = (reg - accg0_regnum) % 4;
@@ -409,7 +409,7 @@ frv_register_sim_regno (struct gdbarch *
   else if (pc_regnum == reg)
     return SIM_FRV_PC_REGNUM;
   else if (reg >= first_spr_regnum
-           && reg < first_spr_regnum + sizeof (spr_map) / sizeof (spr_map[0]))
+	   && reg < first_spr_regnum + sizeof (spr_map) / sizeof (spr_map[0]))
     {
       int spr_reg_offset = spr_map[reg - first_spr_regnum];
 
@@ -457,8 +457,8 @@ frv_adjust_breakpoint_address (struct gd
 	break;
 
       /* This is a big endian architecture, so byte zero will have most
-         significant byte.  The most significant bit of this byte is the
-         packing bit.  */
+	 significant byte.  The most significant bit of this byte is the
+	 packing bit.  */
       if (instr[0] & 0x80)
 	break;
 
@@ -478,8 +478,8 @@ static int
 is_caller_saves_reg (int reg)
 {
   return ((4 <= reg && reg <= 7)
-          || (14 <= reg && reg <= 15)
-          || (32 <= reg && reg <= 47));
+	  || (14 <= reg && reg <= 15)
+	  || (32 <= reg && reg <= 47));
 }
 
 
@@ -488,7 +488,7 @@ static int
 is_callee_saves_reg (int reg)
 {
   return ((16 <= reg && reg <= 31)
-          || (48 <= reg && reg <= 63));
+	  || (48 <= reg && reg <= 63));
 }
 
 
@@ -514,7 +514,7 @@ is_argument_reg (int reg)
 static CORE_ADDR
 frv_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
 		      struct frame_info *this_frame,
-                      struct frv_unwind_cache *info)
+		      struct frv_unwind_cache *info)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
@@ -638,7 +638,7 @@ frv_analyze_prologue (struct gdbarch *gd
 	 Media Trap
 	  X XXXX XX 0000100 XXXXXX XXXX 10 XXXXXX */
       if ((op & 0x01d80000) == 0x00180000 /* Conditional branches and Call */
-          || (op & 0x01f80000) == 0x00300000  /* Jump and Link */
+	  || (op & 0x01f80000) == 0x00300000  /* Jump and Link */
 	  || (op & 0x01f80000) == 0x00100000  /* Return from Trap, Trap */
 	  || (op & 0x01f80000) == 0x00700000) /* Trap immediate */
 	{
@@ -647,13 +647,13 @@ frv_analyze_prologue (struct gdbarch *gd
 	}
 
       /* Loading something from memory into fp probably means that
-         we're in the epilogue.  Stop scanning the prologue.
-         ld @(GRi, GRk), fp
+	 we're in the epilogue.  Stop scanning the prologue.
+	 ld @(GRi, GRk), fp
 	 X 000010 0000010 XXXXXX 000100 XXXXXX
 	 ldi @(GRi, d12), fp
 	 X 000010 0110010 XXXXXX XXXXXXXXXXXX */
       else if ((op & 0x7ffc0fc0) == 0x04080100
-               || (op & 0x7ffc0000) == 0x04c80000)
+	       || (op & 0x7ffc0000) == 0x04c80000)
 	{
 	  break;
 	}
@@ -662,7 +662,7 @@ frv_analyze_prologue (struct gdbarch *gd
 	 ori sp, 0, fp
 	 P 000010 0100010 000001 000000000000 = 0x04881000
 	 0 111111 1111111 111111 111111111111 = 0x7fffffff
-             .    .   .    .   .    .   .   .
+	     .    .   .    .   .    .   .   .
 	 We treat this as part of the prologue.  */
       else if ((op & 0x7fffffff) == 0x04881000)
 	{
@@ -672,25 +672,25 @@ frv_analyze_prologue (struct gdbarch *gd
 	}
 
       /* Move the link register to the scratch register grJ, before saving:
-         movsg lr, grJ
-         P 000100 0000011 010000 000111 JJJJJJ = 0x080d01c0
-         0 111111 1111111 111111 111111 000000 = 0x7fffffc0
-             .    .   .    .   .    .    .   .
+	 movsg lr, grJ
+	 P 000100 0000011 010000 000111 JJJJJJ = 0x080d01c0
+	 0 111111 1111111 111111 111111 000000 = 0x7fffffc0
+	     .    .   .    .   .    .    .   .
 	 We treat this as part of the prologue.  */
       else if ((op & 0x7fffffc0) == 0x080d01c0)
-        {
-          int gr_j = op & 0x3f;
+	{
+	  int gr_j = op & 0x3f;
 
-          /* If we're moving it to a scratch register, that's fine.  */
-          if (is_caller_saves_reg (gr_j))
+	  /* If we're moving it to a scratch register, that's fine.  */
+	  if (is_caller_saves_reg (gr_j))
 	    {
 	      lr_save_reg = gr_j;
 	      last_prologue_pc = next_pc;
 	    }
-        }
+	}
 
       /* To save multiple callee-saves registers on the stack, at
-         offset zero:
+	 offset zero:
 
 	 std grK,@(sp,gr0)
 	 P KKKKKK 0000011 000001 000011 000000 = 0x000c10c0
@@ -699,28 +699,28 @@ frv_analyze_prologue (struct gdbarch *gd
 	 stq grK,@(sp,gr0)
 	 P KKKKKK 0000011 000001 000100 000000 = 0x000c1100
 	 0 000000 1111111 111111 111111 111111 = 0x01ffffff
-             .    .   .    .   .    .    .   .
-         We treat this as part of the prologue, and record the register's
+	     .    .   .    .   .    .    .   .
+	 We treat this as part of the prologue, and record the register's
 	 saved address in the frame structure.  */
       else if ((op & 0x01ffffff) == 0x000c10c0
-            || (op & 0x01ffffff) == 0x000c1100)
+	    || (op & 0x01ffffff) == 0x000c1100)
 	{
 	  int gr_k = ((op >> 25) & 0x3f);
 	  int ope  = ((op >> 6)  & 0x3f);
-          int count;
+	  int count;
 	  int i;
 
-          /* Is it an std or an stq?  */
-          if (ope == 0x03)
-            count = 2;
-          else
-            count = 4;
+	  /* Is it an std or an stq?  */
+	  if (ope == 0x03)
+	    count = 2;
+	  else
+	    count = 4;
 
 	  /* Is it really a callee-saves register?  */
 	  if (is_callee_saves_reg (gr_k))
 	    {
 	      for (i = 0; i < count; i++)
-	        {
+		{
 		  gr_saved[gr_k + i] = 1;
 		  gr_sp_offset[gr_k + i] = 4 * i;
 		}
@@ -730,12 +730,12 @@ frv_analyze_prologue (struct gdbarch *gd
 
       /* Adjusting the stack pointer.  (The stack pointer is GR1.)
 	 addi sp, S, sp
-         P 000001 0010000 000001 SSSSSSSSSSSS = 0x02401000
-         0 111111 1111111 111111 000000000000 = 0x7ffff000
-             .    .   .    .   .    .   .   .
+	 P 000001 0010000 000001 SSSSSSSSSSSS = 0x02401000
+	 0 111111 1111111 111111 000000000000 = 0x7ffff000
+	     .    .   .    .   .    .   .   .
 	 We treat this as part of the prologue.  */
       else if ((op & 0x7ffff000) == 0x02401000)
-        {
+	{
 	  if (framesize == 0)
 	    {
 	      /* Sign-extend the twelve-bit field.
@@ -748,7 +748,7 @@ frv_analyze_prologue (struct gdbarch *gd
 	  else
 	    {
 	      /* If the prologue is being adjusted again, we've
-	         likely gone too far; i.e. we're probably in the
+		 likely gone too far; i.e. we're probably in the
 		 epilogue.  */
 	      break;
 	    }
@@ -756,9 +756,9 @@ frv_analyze_prologue (struct gdbarch *gd
 
       /* Setting the FP to a constant distance from the SP:
 	 addi sp, S, fp
-         P 000010 0010000 000001 SSSSSSSSSSSS = 0x04401000
-         0 111111 1111111 111111 000000000000 = 0x7ffff000
-             .    .   .    .   .    .   .   .
+	 P 000010 0010000 000001 SSSSSSSSSSSS = 0x04401000
+	 0 111111 1111111 111111 000000000000 = 0x7ffff000
+	     .    .   .    .   .    .   .   .
 	 We treat this as part of the prologue.  */
       else if ((op & 0x7ffff000) == 0x04401000)
 	{
@@ -786,7 +786,7 @@ frv_analyze_prologue (struct gdbarch *gd
 	{
 	  int gr_i = ((op >> 12) & 0x3f);
 
-          /* Make sure that the source is an arg register; if it is, we'll
+	  /* Make sure that the source is an arg register; if it is, we'll
 	     treat it as a prologue instruction.  */
 	  if (is_argument_reg (gr_i))
 	    last_prologue_pc = next_pc;
@@ -796,50 +796,50 @@ frv_analyze_prologue (struct gdbarch *gd
 	     sthi GRk, @(fp, s)
 	 P KKKKKK 1010001 000010 SSSSSSSSSSSS = 0x01442000
 	 0 000000 1111111 111111 000000000000 = 0x01fff000
-             .    .   .    .   .    .   .   . 
-         And for 8-bit values, we use STB instructions.
+	     .    .   .    .   .    .   .   . 
+	 And for 8-bit values, we use STB instructions.
 	     stbi GRk, @(fp, s)
 	 P KKKKKK 1010000 000010 SSSSSSSSSSSS = 0x01402000
 	 0 000000 1111111 111111 000000000000 = 0x01fff000
 	     .    .   .    .   .    .   .   .
-         We check that GRk is really an argument register, and treat
-         all such as part of the prologue.  */
+	 We check that GRk is really an argument register, and treat
+	 all such as part of the prologue.  */
       else if (   (op & 0x01fff000) == 0x01442000
 	       || (op & 0x01fff000) == 0x01402000)
 	{
 	  int gr_k = ((op >> 25) & 0x3f);
 
-          /* Make sure that GRk is really an argument register; treat
+	  /* Make sure that GRk is really an argument register; treat
 	     it as a prologue instruction if so.  */
 	  if (is_argument_reg (gr_k))
 	    last_prologue_pc = next_pc;
 	}
 
       /* To save multiple callee-saves register on the stack, at a
-         non-zero offset:
+	 non-zero offset:
 
 	 stdi GRk, @(sp, s)
 	 P KKKKKK 1010011 000001 SSSSSSSSSSSS = 0x014c1000
 	 0 000000 1111111 111111 000000000000 = 0x01fff000
-             .    .   .    .   .    .   .   .
+	     .    .   .    .   .    .   .   .
 	 stqi GRk, @(sp, s)
 	 P KKKKKK 1010100 000001 SSSSSSSSSSSS = 0x01501000
 	 0 000000 1111111 111111 000000000000 = 0x01fff000
 	     .    .   .    .   .    .   .   .
-         We treat this as part of the prologue, and record the register's
+	 We treat this as part of the prologue, and record the register's
 	 saved address in the frame structure.  */
       else if ((op & 0x01fff000) == 0x014c1000
-            || (op & 0x01fff000) == 0x01501000)
+	    || (op & 0x01fff000) == 0x01501000)
 	{
 	  int gr_k = ((op >> 25) & 0x3f);
-          int count;
+	  int count;
 	  int i;
 
-          /* Is it a stdi or a stqi?  */
-          if ((op & 0x01fff000) == 0x014c1000)
-            count = 2;
-          else
-            count = 4;
+	  /* Is it a stdi or a stqi?  */
+	  if ((op & 0x01fff000) == 0x014c1000)
+	    count = 2;
+	  else
+	    count = 4;
 
 	  /* Is it really a callee-saves register?  */
 	  if (is_callee_saves_reg (gr_k))
@@ -858,77 +858,77 @@ frv_analyze_prologue (struct gdbarch *gd
 	}
 
       /* Storing any kind of integer register at any constant offset
-         from any other register.
+	 from any other register.
 
 	 st GRk, @(GRi, gr0)
-         P KKKKKK 0000011 IIIIII 000010 000000 = 0x000c0080
-         0 000000 1111111 000000 111111 111111 = 0x01fc0fff
-             .    .   .    .   .    .    .   .
+	 P KKKKKK 0000011 IIIIII 000010 000000 = 0x000c0080
+	 0 000000 1111111 000000 111111 111111 = 0x01fc0fff
+	     .    .   .    .   .    .    .   .
 	 sti GRk, @(GRi, d12)
 	 P KKKKKK 1010010 IIIIII SSSSSSSSSSSS = 0x01480000
 	 0 000000 1111111 000000 000000000000 = 0x01fc0000
-             .    .   .    .   .    .   .   .
-         These could be almost anything, but a lot of prologue
-         instructions fall into this pattern, so let's decode the
-         instruction once, and then work at a higher level.  */
+	     .    .   .    .   .    .   .   .
+	 These could be almost anything, but a lot of prologue
+	 instructions fall into this pattern, so let's decode the
+	 instruction once, and then work at a higher level.  */
       else if (((op & 0x01fc0fff) == 0x000c0080)
-            || ((op & 0x01fc0000) == 0x01480000))
-        {
-          int gr_k = ((op >> 25) & 0x3f);
-          int gr_i = ((op >> 12) & 0x3f);
-          int offset;
-
-          /* Are we storing with gr0 as an offset, or using an
-             immediate value?  */
-          if ((op & 0x01fc0fff) == 0x000c0080)
-            offset = 0;
-          else
-            offset = (((op & 0xfff) - 0x800) & 0xfff) - 0x800;
-
-          /* If the address isn't relative to the SP or FP, it's not a
-             prologue instruction.  */
-          if (gr_i != sp_regnum && gr_i != fp_regnum)
+	    || ((op & 0x01fc0000) == 0x01480000))
+	{
+	  int gr_k = ((op >> 25) & 0x3f);
+	  int gr_i = ((op >> 12) & 0x3f);
+	  int offset;
+
+	  /* Are we storing with gr0 as an offset, or using an
+	     immediate value?  */
+	  if ((op & 0x01fc0fff) == 0x000c0080)
+	    offset = 0;
+	  else
+	    offset = (((op & 0xfff) - 0x800) & 0xfff) - 0x800;
+
+	  /* If the address isn't relative to the SP or FP, it's not a
+	     prologue instruction.  */
+	  if (gr_i != sp_regnum && gr_i != fp_regnum)
 	    {
 	      /* Do nothing; not a prologue instruction.  */
 	    }
 
-          /* Saving the old FP in the new frame (relative to the SP).  */
-          else if (gr_k == fp_regnum && gr_i == sp_regnum)
+	  /* Saving the old FP in the new frame (relative to the SP).  */
+	  else if (gr_k == fp_regnum && gr_i == sp_regnum)
 	    {
 	      gr_saved[fp_regnum] = 1;
-              gr_sp_offset[fp_regnum] = offset;
+	      gr_sp_offset[fp_regnum] = offset;
 	      last_prologue_pc = next_pc;
 	    }
 
-          /* Saving callee-saves register(s) on the stack, relative to
-             the SP.  */
-          else if (gr_i == sp_regnum
-                   && is_callee_saves_reg (gr_k))
-            {
-              gr_saved[gr_k] = 1;
+	  /* Saving callee-saves register(s) on the stack, relative to
+	     the SP.  */
+	  else if (gr_i == sp_regnum
+		   && is_callee_saves_reg (gr_k))
+	    {
+	      gr_saved[gr_k] = 1;
 	      if (gr_i == sp_regnum)
 		gr_sp_offset[gr_k] = offset;
 	      else
 		gr_sp_offset[gr_k] = offset + fp_offset;
 	      last_prologue_pc = next_pc;
-            }
+	    }
 
-          /* Saving the scratch register holding the return address.  */
-          else if (lr_save_reg != -1
-                   && gr_k == lr_save_reg)
+	  /* Saving the scratch register holding the return address.  */
+	  else if (lr_save_reg != -1
+		   && gr_k == lr_save_reg)
 	    {
 	      lr_saved_on_stack = 1;
 	      if (gr_i == sp_regnum)
 		lr_sp_offset = offset;
 	      else
-	        lr_sp_offset = offset + fp_offset;
+		lr_sp_offset = offset + fp_offset;
 	      last_prologue_pc = next_pc;
 	    }
 
-          /* Spilling int-sized arguments to the stack.  */
-          else if (is_argument_reg (gr_k))
+	  /* Spilling int-sized arguments to the stack.  */
+	  else if (is_argument_reg (gr_k))
 	    last_prologue_pc = next_pc;
-        }
+	}
       pc = next_pc;
     }
 
@@ -938,10 +938,10 @@ frv_analyze_prologue (struct gdbarch *gd
       ULONGEST this_base;
 
       /* If we know the relationship between the stack and frame
-         pointers, record the addresses of the registers we noticed.
-         Note that we have to do this as a separate step at the end,
-         because instructions may save relative to the SP, but we need
-         their addresses relative to the FP.  */
+	 pointers, record the addresses of the registers we noticed.
+	 Note that we have to do this as a separate step at the end,
+	 because instructions may save relative to the SP, but we need
+	 their addresses relative to the FP.  */
       if (fp_set)
 	this_base = get_frame_register_unsigned (this_frame, fp_regnum);
       else
@@ -949,15 +949,16 @@ frv_analyze_prologue (struct gdbarch *gd
 
       for (i = 0; i < 64; i++)
 	if (gr_saved[i])
-	  info->saved_regs[i].addr = this_base - fp_offset + gr_sp_offset[i];
+	  info->saved_regs[i].set_addr (this_base - fp_offset
+					+ gr_sp_offset[i]);
 
       info->prev_sp = this_base - fp_offset + framesize;
       info->base = this_base;
 
       /* If LR was saved on the stack, record its location.  */
       if (lr_saved_on_stack)
-	info->saved_regs[lr_regnum].addr
-	  = this_base - fp_offset + lr_sp_offset;
+	info->saved_regs[lr_regnum].set_addr (this_base - fp_offset
+					      + lr_sp_offset);
 
       /* The call instruction moves the caller's PC in the callee's LR.
 	 Since this is an unwind, do the reverse.  Copy the location of LR
@@ -966,7 +967,7 @@ frv_analyze_prologue (struct gdbarch *gd
       info->saved_regs[pc_regnum] = info->saved_regs[lr_regnum];
 
       /* Save the previous frame's computed SP value.  */
-      trad_frame_set_value (info->saved_regs, sp_regnum, info->prev_sp);
+      info->saved_regs[sp_regnum].set_value (info->prev_sp);
     }
 
   return last_prologue_pc;
@@ -1055,7 +1056,7 @@ frv_skip_main_prologue (struct gdbarch *
      call label24
      P HHHHHH 0001111 LLLLLLLLLLLLLLLLLL = 0x003c0000
      0 000000 1111111 000000000000000000 = 0x01fc0000
-         .    .   .    .   .   .   .   .
+	 .    .   .    .   .   .   .   .
 
      where label24 is constructed by concatenating the H bits with the
      L bits.  The call target is PC + (4 * sign_ext(label24)).  */
@@ -1074,7 +1075,7 @@ frv_skip_main_prologue (struct gdbarch *
       s = lookup_minimal_symbol_by_pc (call_dest);
 
       if (s.minsym != NULL
-          && s.minsym->linkage_name () != NULL
+	  && s.minsym->linkage_name () != NULL
 	  && strcmp (s.minsym->linkage_name (), "__main") == 0)
 	{
 	  pc += 4;
@@ -1108,7 +1109,7 @@ frv_frame_unwind_cache (struct frame_inf
 
 static void
 frv_extract_return_value (struct type *type, struct regcache *regcache,
-                          gdb_byte *valbuf)
+			  gdb_byte *valbuf)
 {
   struct gdbarch *gdbarch = regcache->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -1167,14 +1168,14 @@ find_func_descr (struct gdbarch *gdbarch
   store_unsigned_integer (valbuf, 4, byte_order, entry_point);
   write_memory (descr, valbuf, 4);
   store_unsigned_integer (valbuf, 4, byte_order,
-                          frv_fdpic_find_global_pointer (entry_point));
+			  frv_fdpic_find_global_pointer (entry_point));
   write_memory (descr + 4, valbuf, 4);
   return descr;
 }
 
 static CORE_ADDR
 frv_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
-                                struct target_ops *targ)
+				struct target_ops *targ)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR entry_point;
@@ -1191,8 +1192,8 @@ frv_convert_from_func_ptr_addr (struct g
 
 static CORE_ADDR
 frv_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)
 {
@@ -1233,14 +1234,14 @@ frv_push_dummy_call (struct gdbarch *gdb
 
   if (return_method == return_method_struct)
     regcache_cooked_write_unsigned (regcache, struct_return_regnum,
-                                    struct_addr);
+				    struct_addr);
 
   for (argnum = 0; argnum < nargs; ++argnum)
     {
       arg = args[argnum];
       arg_type = check_typedef (value_type (arg));
       len = TYPE_LENGTH (arg_type);
-      typecode = TYPE_CODE (arg_type);
+      typecode = arg_type->code ();
 
       if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
 	{
@@ -1252,8 +1253,8 @@ frv_push_dummy_call (struct gdbarch *gdb
 	}
       else if (abi == FRV_ABI_FDPIC
 	       && len == 4
-               && typecode == TYPE_CODE_PTR
-               && TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_FUNC)
+	       && typecode == TYPE_CODE_PTR
+	       && TYPE_TARGET_TYPE (arg_type)->code () == TYPE_CODE_FUNC)
 	{
 	  /* The FDPIC ABI requires function descriptors to be passed instead
 	     of entry points.  */
@@ -1308,7 +1309,7 @@ frv_push_dummy_call (struct gdbarch *gdb
       /* Set the GOT register for the FDPIC ABI.  */
       regcache_cooked_write_unsigned
 	(regcache, first_gpr_regnum + 15,
-         frv_fdpic_find_global_pointer (func_addr));
+	 frv_fdpic_find_global_pointer (func_addr));
     }
 
   /* Finally, update the SP register.  */
@@ -1319,7 +1320,7 @@ frv_push_dummy_call (struct gdbarch *gdb
 
 static void
 frv_store_return_value (struct type *type, struct regcache *regcache,
-                        const gdb_byte *valbuf)
+			const gdb_byte *valbuf)
 {
   int len = TYPE_LENGTH (type);
 
@@ -1337,7 +1338,7 @@ frv_store_return_value (struct type *typ
     }
   else
     internal_error (__FILE__, __LINE__,
-                    _("Don't know how to return a %d-byte value."), len);
+		    _("Don't know how to return a %d-byte value."), len);
 }
 
 static enum return_value_convention
@@ -1345,9 +1346,9 @@ frv_return_value (struct gdbarch *gdbarc
 		  struct type *valtype, struct regcache *regcache,
 		  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  int struct_return = TYPE_CODE (valtype) == TYPE_CODE_STRUCT
-		      || TYPE_CODE (valtype) == TYPE_CODE_UNION
-		      || TYPE_CODE (valtype) == TYPE_CODE_ARRAY;
+  int struct_return = valtype->code () == TYPE_CODE_STRUCT
+		      || valtype->code () == TYPE_CODE_UNION
+		      || valtype->code () == TYPE_CODE_ARRAY;
 
   if (writebuf != NULL)
     {
@@ -1410,6 +1411,7 @@ frv_frame_prev_register (struct frame_in
 }
 
 static const struct frame_unwind frv_frame_unwind = {
+  "frv prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   frv_frame_this_id,
@@ -1568,13 +1570,14 @@ frv_gdbarch_init (struct gdbarch_info in
 
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                             frv_fetch_objfile_link_map);
+					     frv_fetch_objfile_link_map);
 
   return gdbarch;
 }
 
+void _initialize_frv_tdep ();
 void
-_initialize_frv_tdep (void)
+_initialize_frv_tdep ()
 {
   register_gdbarch_init (bfd_arch_frv, frv_gdbarch_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frv-tdep.h ./gdb/frv-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/frv-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/frv-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Architecture-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger.
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -102,7 +102,7 @@ enum frv_abi frv_abi (struct gdbarch *gd
    library support) for the FDPIC ABI.  Return 0 if successful, -1 if
    not.  (E.g, -1 will be returned if the ABI isn't the FDPIC ABI.)  */
 int frv_fdpic_loadmap_addresses (struct gdbarch *gdbarch,
-                                 CORE_ADDR *interp_addr, CORE_ADDR *exec_addr);
+				 CORE_ADDR *interp_addr, CORE_ADDR *exec_addr);
 
 /* Given a function entry point, find and return the GOT address for the
    containing load module.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ft32-tdep.c ./gdb/ft32-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ft32-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ft32-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FT32.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -144,7 +144,7 @@ ft32_store_return_value (struct type *ty
 
 static ULONGEST
 ft32_fetch_instruction (CORE_ADDR a, int *isize,
-		        enum bfd_endian byte_order)
+			enum bfd_endian byte_order)
 {
   unsigned int sc[2];
   ULONGEST inst;
@@ -299,7 +299,7 @@ ft32_skip_prologue (struct gdbarch *gdba
 	  /* Found a function.  */
 	  sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol;
 	  /* Don't use line number debug info for assembly source files.  */
-	  if ((sym != NULL) && SYMBOL_LANGUAGE (sym) != language_asm)
+	  if ((sym != NULL) && sym->language () != language_asm)
 	    {
 	      sal = find_pc_line (func_addr, 0);
 	      if (sal.end && sal.end < func_end)
@@ -341,7 +341,7 @@ ft32_pointer_to_address (struct gdbarch
    This method maps DW_AT_address_class attributes to a
    type_instance_flag_value.  */
 
-static int
+static type_instance_flags
 ft32_address_class_type_flags (int byte_size, int dwarf2_addr_class)
 {
   /* The value 1 of the DW_AT_address_class attribute corresponds to the
@@ -357,7 +357,8 @@ ft32_address_class_type_flags (int byte_
    Convert a type_instance_flag_value to an address space qualifier.  */
 
 static const char*
-ft32_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
+ft32_address_class_type_flags_to_name (struct gdbarch *gdbarch,
+				       type_instance_flags type_flags)
 {
   if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
     return "flash";
@@ -369,18 +370,18 @@ ft32_address_class_type_flags_to_name (s
 
    Convert an address space qualifier to a type_instance_flag_value.  */
 
-static int
+static bool
 ft32_address_class_name_to_type_flags (struct gdbarch *gdbarch,
 				       const char* name,
-				       int *type_flags_ptr)
+				       type_instance_flags *type_flags_ptr)
 {
   if (strcmp (name, "flash") == 0)
     {
       *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
-      return 1;
+      return true;
     }
   else
-    return 0;
+    return false;
 }
 
 /* Given a return value in `regbuf' with a type `valtype',
@@ -524,6 +525,7 @@ ft32_frame_prev_register (struct frame_i
 
 static const struct frame_unwind ft32_frame_unwind =
 {
+  "ft32 prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   ft32_frame_this_id,
@@ -576,7 +578,8 @@ ft32_gdbarch_init (struct gdbarch_info i
   func_void_type = make_function_type (void_type, NULL);
   tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
 				     func_void_type);
-  TYPE_INSTANCE_FLAGS (tdep->pc_type) |= TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
+  tdep->pc_type->set_instance_flags (tdep->pc_type->instance_flags ()
+				     | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1);
 
   set_gdbarch_num_regs (gdbarch, FT32_NUM_REGS);
   set_gdbarch_sp_regnum (gdbarch, FT32_SP_REGNUM);
@@ -616,8 +619,9 @@ ft32_gdbarch_init (struct gdbarch_info i
 
 /* Register this machine's init routine.  */
 
+void _initialize_ft32_tdep ();
 void
-_initialize_ft32_tdep (void)
+_initialize_ft32_tdep ()
 {
   register_gdbarch_init (bfd_arch_ft32, ft32_gdbarch_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ft32-tdep.h ./gdb/ft32-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ft32-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ft32-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the FT32.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-typeprint.c ./gdb/f-typeprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-typeprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/f-typeprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing Fortran types for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    Contributed by Motorola.  Adapted from the C version by Farooq Butt
    (fmbutt@engage.sps.mot.com).
@@ -33,53 +33,41 @@
 #include "typeprint.h"
 #include "cli/cli-style.h"
 
-#if 0				/* Currently unused.  */
-static void f_type_print_args (struct type *, struct ui_file *);
-#endif
-
-static void f_type_print_varspec_suffix (struct type *, struct ui_file *, int,
-					 int, int, int, bool);
-
-void f_type_print_varspec_prefix (struct type *, struct ui_file *,
-				  int, int);
-
-void f_type_print_base (struct type *, struct ui_file *, int, int);
-
-
-/* See documentation in f-lang.h.  */
+/* See f-lang.h.  */
 
 void
-f_print_typedef (struct type *type, struct symbol *new_symbol,
-		 struct ui_file *stream)
+f_language::print_typedef (struct type *type, struct symbol *new_symbol,
+			   struct ui_file *stream) const
 {
   type = check_typedef (type);
-  f_print_type (type, "", stream, 0, 0, &type_print_raw_options);
+  print_type (type, "", stream, 0, 0, &type_print_raw_options);
 }
 
-/* LEVEL is the depth to indent lines by.  */
+/* See f-lang.h.  */
 
 void
-f_print_type (struct type *type, const char *varstring, struct ui_file *stream,
-	      int show, int level, const struct type_print_options *flags)
+f_language::print_type (struct type *type, const char *varstring,
+			struct ui_file *stream, int show, int level,
+			const struct type_print_options *flags) const
 {
   enum type_code code;
 
   f_type_print_base (type, stream, show, level);
-  code = TYPE_CODE (type);
+  code = type->code ();
   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)
-          && (code == TYPE_CODE_FUNC
+	   || type->name () == 0)
+	  && (code == TYPE_CODE_FUNC
 	      || code == TYPE_CODE_METHOD
 	      || code == TYPE_CODE_ARRAY
 	      || ((code == TYPE_CODE_PTR
 		   || code == TYPE_CODE_REF)
-		  && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
-		      || (TYPE_CODE (TYPE_TARGET_TYPE (type))
+		  && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC
+		      || (TYPE_TARGET_TYPE (type)->code ()
 			  == TYPE_CODE_METHOD)
-		      || (TYPE_CODE (TYPE_TARGET_TYPE (type))
+		      || (TYPE_TARGET_TYPE (type)->code ()
 			  == TYPE_CODE_ARRAY))))))
     fputs_filtered (" ", stream);
   f_type_print_varspec_prefix (type, stream, show, 0);
@@ -91,7 +79,7 @@ f_print_type (struct type *type, const c
       fputs_filtered (varstring, stream);
 
       /* For demangled function names, we have the arglist as part of the name,
-         so don't print an additional pair of ()'s.  */
+	 so don't print an additional pair of ()'s.  */
 
       demangled_args = (*varstring != '\0'
 			&& varstring[strlen (varstring) - 1] == ')');
@@ -99,27 +87,22 @@ f_print_type (struct type *type, const c
    }
 }
 
-/* Print any asterisks or open-parentheses needed before the
-   variable name (to describe its type).
-
-   On outermost call, pass 0 for PASSED_A_PTR.
-   On outermost call, SHOW > 0 means should ignore
-   any typename for TYPE and show its details.
-   SHOW is always zero on recursive calls.  */
+/* See f-lang.h.  */
 
 void
-f_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
-			     int show, int passed_a_ptr)
+f_language::f_type_print_varspec_prefix (struct type *type,
+					 struct ui_file *stream,
+					 int show, int passed_a_ptr) const
 {
   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:
       f_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
@@ -153,24 +136,20 @@ f_type_print_varspec_prefix (struct type
     case TYPE_CODE_COMPLEX:
     case TYPE_CODE_TYPEDEF:
       /* These types need no prefix.  They are listed here so that
-         gcc -Wall will reveal any types that haven't been handled.  */
+	 gcc -Wall will reveal any types that haven't been handled.  */
       break;
     }
 }
 
-/* Print any array sizes, function arguments or close parentheses
-   needed after the variable name (to describe its type).
-   Args work like c_type_print_varspec_prefix.
-
-   PRINT_RANK_ONLY is true when TYPE is an array which should be printed
-   without the upper and lower bounds being specified, this will occur
-   when the array is not allocated or not associated and so there are no
-   known upper or lower bounds.  */
-
-static void
-f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
-			     int show, int passed_a_ptr, int demangled_args,
-			     int arrayprint_recurse_level, bool print_rank_only)
+/* See f-lang.h.  */
+
+void
+f_language::f_type_print_varspec_suffix (struct type *type,
+					 struct ui_file *stream,
+					 int show, int passed_a_ptr,
+					 int demangled_args,
+					 int arrayprint_recurse_level,
+					 bool print_rank_only) const
 {
   /* No static variables are permitted as an error call may occur during
      execution of this function.  */
@@ -178,12 +157,12 @@ f_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:
       arrayprint_recurse_level++;
@@ -196,18 +175,18 @@ f_type_print_varspec_suffix (struct type
       else if (type_not_allocated (type))
 	print_rank_only = true;
       else if ((TYPE_ASSOCIATED_PROP (type)
-		&& PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ASSOCIATED_PROP (type)))
+		&& PROP_CONST != TYPE_ASSOCIATED_PROP (type)->kind ())
 	       || (TYPE_ALLOCATED_PROP (type)
-		   && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ALLOCATED_PROP (type)))
+		   && PROP_CONST != TYPE_ALLOCATED_PROP (type)->kind ())
 	       || (TYPE_DATA_LOCATION (type)
-		   && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_DATA_LOCATION (type))))
+		   && PROP_CONST != TYPE_DATA_LOCATION (type)->kind ()))
 	{
 	  /* This case exist when we ptype a typename which has the dynamic
 	     properties but cannot be resolved as there is no object.  */
 	  print_rank_only = true;
 	}
 
-      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
+      if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY)
 	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
 				     0, 0, arrayprint_recurse_level,
 				     print_rank_only);
@@ -218,22 +197,22 @@ f_type_print_varspec_suffix (struct type
 	{
 	  LONGEST lower_bound = f77_get_lowerbound (type);
 	  if (lower_bound != 1)	/* Not the default.  */
-            fprintf_filtered (stream, "%s:", plongest (lower_bound));
+	    fprintf_filtered (stream, "%s:", plongest (lower_bound));
 
 	  /* Make sure that, if we have an assumed size array, we
 	       print out a warning and print the upperbound as '*'.  */
 
-	  if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
+	  if (type->bounds ()->high.kind () == PROP_UNDEFINED)
 	    fprintf_filtered (stream, "*");
 	  else
 	    {
 	      LONGEST upper_bound = f77_get_upperbound (type);
 
-              fputs_filtered (plongest (upper_bound), stream);
+	      fputs_filtered (plongest (upper_bound), stream);
 	    }
 	}
 
-      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
+      if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_ARRAY)
 	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
 				     0, 0, arrayprint_recurse_level,
 				     print_rank_only);
@@ -254,7 +233,7 @@ f_type_print_varspec_suffix (struct type
 
     case TYPE_CODE_FUNC:
       {
-	int i, nfields = TYPE_NFIELDS (type);
+	int i, nfields = type->num_fields ();
 
 	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
 				     passed_a_ptr, 0,
@@ -262,9 +241,9 @@ f_type_print_varspec_suffix (struct type
 	if (passed_a_ptr)
 	  fprintf_filtered (stream, ") ");
 	fprintf_filtered (stream, "(");
-	if (nfields == 0 && TYPE_PROTOTYPED (type))
-	  f_print_type (builtin_f_type (get_type_arch (type))->builtin_void,
-			"", stream, -1, 0, 0);
+	if (nfields == 0 && type->is_prototyped ())
+	  print_type (builtin_f_type (type->arch ())->builtin_void,
+		      "", stream, -1, 0, 0);
 	else
 	  for (i = 0; i < nfields; i++)
 	    {
@@ -273,7 +252,7 @@ f_type_print_varspec_suffix (struct type
 		  fputs_filtered (", ", stream);
 		  wrap_here ("    ");
 		}
-	      f_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, 0);
+	      print_type (type->field (i).type (), "", stream, -1, 0, 0);
 	    }
 	fprintf_filtered (stream, ")");
       }
@@ -296,27 +275,16 @@ f_type_print_varspec_suffix (struct type
     case TYPE_CODE_COMPLEX:
     case TYPE_CODE_TYPEDEF:
       /* These types do not need a suffix.  They are listed so that
-         gcc -Wall will report types that may not have been considered.  */
+	 gcc -Wall will report types that may not have been considered.  */
       break;
     }
 }
 
-/* Print the name of the type (or the ultimate pointer target,
-   function value or array element), or the description of a
-   structure or union.
-
-   SHOW nonzero means don't print this type as just its name;
-   show its real definition even if it has a name.
-   SHOW zero means print just typename or struct tag if there is one
-   SHOW negative means abbreviate structure elements.
-   SHOW is decremented for printing of structure elements.
-
-   LEVEL is the depth to indent by.
-   We increase it for some recursive calls.  */
+/* See f-lang.h.  */
 
 void
-f_type_print_base (struct type *type, struct ui_file *stream, int show,
-		   int level)
+f_language::f_type_print_base (struct type *type, struct ui_file *stream,
+			       int show, int level) const
 {
   int index;
 
@@ -332,21 +300,21 @@ f_type_print_base (struct type *type, st
   /* When SHOW is zero or less, and there is a valid type name, then always
      just print the type name directly from the type.  */
 
-  if ((show <= 0) && (TYPE_NAME (type) != NULL))
+  if ((show <= 0) && (type->name () != NULL))
     {
       const char *prefix = "";
-      if (TYPE_CODE (type) == TYPE_CODE_UNION)
+      if (type->code () == TYPE_CODE_UNION)
 	prefix = "Type, C_Union :: ";
-      else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+      else if (type->code () == TYPE_CODE_STRUCT)
 	prefix = "Type ";
-      fprintfi_filtered (level, stream, "%s%s", prefix, TYPE_NAME (type));
+      fprintf_filtered (stream, "%*s%s%s", level, "", prefix, type->name ());
       return;
     }
 
-  if (TYPE_CODE (type) != TYPE_CODE_TYPEDEF)
+  if (type->code () != TYPE_CODE_TYPEDEF)
     type = check_typedef (type);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_TYPEDEF:
       f_type_print_base (TYPE_TARGET_TYPE (type), stream, 0, level);
@@ -363,102 +331,106 @@ f_type_print_base (struct type *type, st
       break;
 
     case TYPE_CODE_PTR:
-      fprintfi_filtered (level, stream, "PTR TO -> ( ");
+      fprintf_filtered (stream, "%*sPTR TO -> ( ", level, "");
       f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
       break;
 
     case TYPE_CODE_REF:
-      fprintfi_filtered (level, stream, "REF TO -> ( ");
+      fprintf_filtered (stream, "%*sREF TO -> ( ", level, "");
       f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
       break;
 
     case TYPE_CODE_VOID:
       {
-	gdbarch *gdbarch = get_type_arch (type);
-	struct type *void_type = builtin_f_type (gdbarch)->builtin_void;
-	fprintfi_filtered (level, stream, "%s", TYPE_NAME (void_type));
+	struct type *void_type = builtin_f_type (type->arch ())->builtin_void;
+	fprintf_filtered (stream, "%*s%s", level, "", void_type->name ());
       }
       break;
 
     case TYPE_CODE_UNDEF:
-      fprintfi_filtered (level, stream, "struct <unknown>");
+      fprintf_filtered (stream, "%*sstruct <unknown>", level, "");
       break;
 
     case TYPE_CODE_ERROR:
-      fprintfi_filtered (level, stream, "%s", TYPE_ERROR_NAME (type));
+      fprintf_filtered (stream, "%*s%s", level, "", TYPE_ERROR_NAME (type));
       break;
 
     case TYPE_CODE_RANGE:
       /* This should not occur.  */
-      fprintfi_filtered (level, stream, "<range type>");
+      fprintf_filtered (stream, "%*s<range type>", level, "");
       break;
 
     case TYPE_CODE_CHAR:
     case TYPE_CODE_INT:
       /* There may be some character types that attempt to come
-         through as TYPE_CODE_INT since dbxstclass.h is so
-         C-oriented, we must change these to "character" from "char".  */
+	 through as TYPE_CODE_INT since dbxstclass.h is so
+	 C-oriented, we must change these to "character" from "char".  */
 
-      if (strcmp (TYPE_NAME (type), "char") == 0)
-	fprintfi_filtered (level, stream, "character");
+      if (strcmp (type->name (), "char") == 0)
+	fprintf_filtered (stream, "%*scharacter", level, "");
       else
 	goto default_case;
       break;
 
     case TYPE_CODE_STRING:
-      /* Strings may have dynamic upperbounds (lengths) like arrays.  */
+      /* Strings may have dynamic upperbounds (lengths) like arrays.  We
+	 check specifically for the PROP_CONST case to indicate that the
+	 dynamic type has been resolved.  If we arrive here having been
+	 asked to print the type of a value with a dynamic type then the
+	 bounds will not have been resolved.  */
 
-      if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
-	fprintfi_filtered (level, stream, "character*(*)");
-      else
+      if (type->bounds ()->high.kind () == PROP_CONST)
 	{
 	  LONGEST upper_bound = f77_get_upperbound (type);
 
 	  fprintf_filtered (stream, "character*%s", pulongest (upper_bound));
 	}
+      else
+	fprintf_filtered (stream, "%*scharacter*(*)", level, "");
       break;
 
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
-      if (TYPE_CODE (type) == TYPE_CODE_UNION)
-	fprintfi_filtered (level, stream, "Type, C_Union :: ");
+      if (type->code () == TYPE_CODE_UNION)
+	fprintf_filtered (stream, "%*sType, C_Union :: ", level, "");
       else
-	fprintfi_filtered (level, stream, "Type ");
-      fputs_filtered (TYPE_NAME (type), stream);
+	fprintf_filtered (stream, "%*sType ", level, "");
+      fputs_filtered (type->name (), stream);
       /* According to the definition,
-         we only print structure elements in case show > 0.  */
+	 we only print structure elements in case show > 0.  */
       if (show > 0)
 	{
 	  fputs_filtered ("\n", stream);
-	  for (index = 0; index < TYPE_NFIELDS (type); index++)
+	  for (index = 0; index < type->num_fields (); index++)
 	    {
-	      f_type_print_base (TYPE_FIELD_TYPE (type, index), stream,
+	      f_type_print_base (type->field (index).type (), stream,
 				 show - 1, level + 4);
 	      fputs_filtered (" :: ", stream);
-	      fputs_filtered (TYPE_FIELD_NAME (type, index), stream);
-	      f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index),
+	      fputs_styled (TYPE_FIELD_NAME (type, index),
+			    variable_name_style.style (), stream);
+	      f_type_print_varspec_suffix (type->field (index).type (),
 					   stream, show - 1, 0, 0, 0, false);
 	      fputs_filtered ("\n", stream);
 	    }
-	  fprintfi_filtered (level, stream, "End Type ");
-	  fputs_filtered (TYPE_NAME (type), stream);
+	  fprintf_filtered (stream, "%*sEnd Type ", level, "");
+	  fputs_filtered (type->name (), stream);
 	}
       break;
 
     case TYPE_CODE_MODULE:
-      fprintfi_filtered (level, stream, "module %s", TYPE_NAME (type));
+      fprintf_filtered (stream, "%*smodule %s", level, "", type->name ());
       break;
 
     default_case:
     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)
-	fprintfi_filtered (level, stream, "%s", TYPE_NAME (type));
+	 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 () != NULL)
+	fprintf_filtered (stream, "%*s%s", level, "", type->name ());
       else
-	error (_("Invalid type code (%d) in symbol table."), TYPE_CODE (type));
+	error (_("Invalid type code (%d) in symbol table."), type->code ());
       break;
     }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-valprint.c ./gdb/f-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/f-valprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/f-valprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing Fortran values for GDB, the GNU debugger.
 
-   Copyright (C) 1993-2020 Free Software Foundation, Inc.
+   Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
    (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs.
@@ -35,27 +35,23 @@
 #include "dictionary.h"
 #include "cli/cli-style.h"
 #include "gdbarch.h"
+#include "f-array-walker.h"
 
 static void f77_get_dynamic_length_of_aggregate (struct type *);
 
-int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
-
-/* Array which holds offsets to be applied to get a row's elements
-   for a given array.  Array also holds the size of each subarray.  */
-
 LONGEST
 f77_get_lowerbound (struct type *type)
 {
-  if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
+  if (type->bounds ()->low.kind () == PROP_UNDEFINED)
     error (_("Lower bound may not be '*' in F77"));
 
-  return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
+  return type->bounds ()->low.const_val ();
 }
 
 LONGEST
 f77_get_upperbound (struct type *type)
 {
-  if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
+  if (type->bounds ()->high.kind () == PROP_UNDEFINED)
     {
       /* We have an assumed size array on our hands.  Assume that
 	 upper_bound == lower_bound so that we show at least 1 element.
@@ -65,7 +61,7 @@ f77_get_upperbound (struct type *type)
       return f77_get_lowerbound (type);
     }
 
-  return TYPE_ARRAY_UPPER_BOUND_VALUE (type);
+  return type->bounds ()->high.const_val ();
 }
 
 /* Obtain F77 adjustable array dimensions.  */
@@ -85,8 +81,8 @@ f77_get_dynamic_length_of_aggregate (str
      This function also works for strings which behave very 
      similarly to arrays.  */
 
-  if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY
-      || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRING)
+  if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY
+      || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRING)
     f77_get_dynamic_length_of_aggregate (TYPE_TARGET_TYPE (type));
 
   /* Recursion ends here, start setting up lengths.  */
@@ -100,100 +96,103 @@ f77_get_dynamic_length_of_aggregate (str
     * TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type)));
 }
 
-/* Actual function which prints out F77 arrays, Valaddr == address in 
-   the superior.  Address == the address in the inferior.  */
+/* A class used by FORTRAN_PRINT_ARRAY as a specialisation of the array
+   walking template.  This specialisation prints Fortran arrays.  */
 
-static void
-f77_print_array_1 (int nss, int ndimensions, struct type *type,
-		   const gdb_byte *valaddr,
-		   int embedded_offset, CORE_ADDR address,
-		   struct ui_file *stream, int recurse,
-		   const struct value *val,
-		   const struct value_print_options *options,
-		   int *elts)
+class fortran_array_printer_impl : public fortran_array_walker_base_impl
 {
-  struct type *range_type = TYPE_INDEX_TYPE (check_typedef (type));
-  CORE_ADDR addr = address + embedded_offset;
-  LONGEST lowerbound, upperbound;
-  int i;
-
-  get_discrete_bounds (range_type, &lowerbound, &upperbound);
-
-  if (nss != ndimensions)
-    {
-      struct gdbarch *gdbarch = get_type_arch (type);
-      size_t dim_size = type_length_units (TYPE_TARGET_TYPE (type));
-      int unit_size = gdbarch_addressable_memory_unit_size (gdbarch);
-      size_t byte_stride = TYPE_ARRAY_BIT_STRIDE (type) / (unit_size * 8);
-      if (byte_stride == 0)
-	byte_stride = dim_size;
-      size_t offs = 0;
-
-      for (i = lowerbound;
-	   (i < upperbound + 1 && (*elts) < options->print_max);
-	   i++)
-	{
-	  struct value *subarray = value_from_contents_and_address
-	    (TYPE_TARGET_TYPE (type), value_contents_for_printing_const (val)
-	     + offs, addr + offs);
-
-	  fprintf_filtered (stream, "( ");
-	  f77_print_array_1 (nss + 1, ndimensions, value_type (subarray),
-			     value_contents_for_printing (subarray),
-			     value_embedded_offset (subarray),
-			     value_address (subarray),
-			     stream, recurse, subarray, options, elts);
-	  offs += byte_stride;
-	  fprintf_filtered (stream, ") ");
-	}
-      if (*elts >= options->print_max && i < upperbound)
-	fprintf_filtered (stream, "...");
-    }
-  else
-    {
-      for (i = lowerbound; i < upperbound + 1 && (*elts) < options->print_max;
-	   i++, (*elts)++)
-	{
-	  struct value *elt = value_subscript ((struct value *)val, i);
-
-	  val_print (value_type (elt),
-		     value_embedded_offset (elt),
-		     value_address (elt), stream, recurse,
-		     elt, options, current_language);
-
-	  if (i != upperbound)
-	    fprintf_filtered (stream, ", ");
-
-	  if ((*elts == options->print_max - 1)
-	      && (i != upperbound))
-	    fprintf_filtered (stream, "...");
-	}
-    }
-}
+public:
+  /* Constructor.  TYPE is the array type being printed, ADDRESS is the
+     address in target memory for the object of TYPE being printed.  VAL is
+     the GDB value (of TYPE) being printed.  STREAM is where to print to,
+     RECOURSE is passed through (and prevents infinite recursion), and
+     OPTIONS are the printing control options.  */
+  explicit fortran_array_printer_impl (struct type *type,
+				       CORE_ADDR address,
+				       struct value *val,
+				       struct ui_file *stream,
+				       int recurse,
+				       const struct value_print_options *options)
+    : m_elts (0),
+      m_val (val),
+      m_stream (stream),
+      m_recurse (recurse),
+      m_options (options)
+  { /* Nothing.  */ }
+
+  /* Called while iterating over the array bounds.  When SHOULD_CONTINUE is
+     false then we must return false, as we have reached the end of the
+     array bounds for this dimension.  However, we also return false if we
+     have printed too many elements (after printing '...').  In all other
+     cases, return true.  */
+  bool continue_walking (bool should_continue)
+  {
+    bool cont = should_continue && (m_elts < m_options->print_max);
+    if (!cont && should_continue)
+      fputs_filtered ("...", m_stream);
+    return cont;
+  }
+
+  /* Called when we start iterating over a dimension.  If it's not the
+     inner most dimension then print an opening '(' character.  */
+  void start_dimension (bool inner_p)
+  {
+    fputs_filtered ("(", m_stream);
+  }
+
+  /* Called when we finish processing a batch of items within a dimension
+     of the array.  Depending on whether this is the inner most dimension
+     or not we print different things, but this is all about adding
+     separators between elements, and dimensions of the array.  */
+  void finish_dimension (bool inner_p, bool last_p)
+  {
+    fputs_filtered (")", m_stream);
+    if (!last_p)
+      fputs_filtered (" ", m_stream);
+  }
+
+  /* Called to process an element of ELT_TYPE at offset ELT_OFF from the
+     start of the parent object.  */
+  void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
+  {
+    /* Extract the element value from the parent value.  */
+    struct value *e_val
+      = value_from_component (m_val, elt_type, elt_off);
+    common_val_print (e_val, m_stream, m_recurse, m_options, current_language);
+    if (!last_p)
+      fputs_filtered (", ", m_stream);
+    ++m_elts;
+  }
+
+private:
+  /* The number of elements printed so far.  */
+  int m_elts;
+
+  /* The value from which we are printing elements.  */
+  struct value *m_val;
+
+  /* The stream we should print too.  */
+  struct ui_file *m_stream;
+
+  /* The recursion counter, passed through when we print each element.  */
+  int m_recurse;
+
+  /* The print control options.  Gives us the maximum number of elements to
+     print, and is passed through to each element that we print.  */
+  const struct value_print_options *m_options = nullptr;
+};
 
-/* This function gets called to print an F77 array, we set up some 
-   stuff and then immediately call f77_print_array_1().  */
+/* This function gets called to print a Fortran array.  */
 
 static void
-f77_print_array (struct type *type, const gdb_byte *valaddr,
-		 int embedded_offset,
-		 CORE_ADDR address, struct ui_file *stream,
-		 int recurse,
-		 const struct value *val,
-		 const struct value_print_options *options)
+fortran_print_array (struct type *type, CORE_ADDR address,
+		     struct ui_file *stream, int recurse,
+		     const struct value *val,
+		     const struct value_print_options *options)
 {
-  int ndimensions;
-  int elts = 0;
-
-  ndimensions = calc_f77_array_dims (type);
-
-  if (ndimensions > MAX_FORTRAN_DIMS || ndimensions < 0)
-    error (_("\
-Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"),
-	   ndimensions, MAX_FORTRAN_DIMS);
-
-  f77_print_array_1 (1, ndimensions, type, valaddr, embedded_offset,
-		     address, stream, recurse, val, options, &elts);
+  fortran_array_walker<fortran_array_printer_impl> p
+    (type, address, (struct value *) val, stream, recurse, options);
+  p.walk ();
 }
 
 
@@ -211,67 +210,58 @@ static const struct generic_val_print_de
   "}"
 };
 
-/* See val_print for a description of the various parameters of this
-   function; they are identical.  */
+/* See f-lang.h.  */
 
 void
-f_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)
+f_language::value_print_inner (struct value *val, struct ui_file *stream,
+			       int recurse,
+			       const struct value_print_options *options) const
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
+  struct type *type = check_typedef (value_type (val));
+  struct gdbarch *gdbarch = type->arch ();
   int printed_field = 0; /* Number of fields printed.  */
   struct type *elttype;
   CORE_ADDR addr;
   int index;
-  const gdb_byte *valaddr =value_contents_for_printing (original_value);
+  const gdb_byte *valaddr = value_contents_for_printing (val);
+  const CORE_ADDR address = value_address (val);
 
-  type = check_typedef (type);
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_STRING:
       f77_get_dynamic_length_of_aggregate (type);
-      LA_PRINT_STRING (stream, builtin_type (gdbarch)->builtin_char,
-		       valaddr + embedded_offset,
-		       TYPE_LENGTH (type), NULL, 0, options);
+      printstr (stream, builtin_type (gdbarch)->builtin_char, valaddr,
+		TYPE_LENGTH (type), NULL, 0, options);
       break;
 
     case TYPE_CODE_ARRAY:
-      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_CHAR)
-	{
-	  fprintf_filtered (stream, "(");
-	  f77_print_array (type, valaddr, embedded_offset,
-			   address, stream, recurse, original_value, options);
-	  fprintf_filtered (stream, ")");
-	}
+      if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_CHAR)
+	fortran_print_array (type, address, stream, recurse, val, options);
       else
 	{
 	  struct type *ch_type = TYPE_TARGET_TYPE (type);
 
 	  f77_get_dynamic_length_of_aggregate (type);
-	  LA_PRINT_STRING (stream, ch_type,
-			   valaddr + embedded_offset,
-			   TYPE_LENGTH (type) / TYPE_LENGTH (ch_type),
-			   NULL, 0, options);
+	  printstr (stream, ch_type, valaddr,
+		    TYPE_LENGTH (type) / TYPE_LENGTH (ch_type), NULL, 0,
+		    options);
 	}
       break;
 
     case TYPE_CODE_PTR:
       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);
 	  break;
 	}
       else
 	{
 	  int want_space = 0;
 
-	  addr = unpack_pointer (type, valaddr + embedded_offset);
+	  addr = unpack_pointer (type, valaddr);
 	  elttype = check_typedef (TYPE_TARGET_TYPE (type));
 
-	  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, addr, stream);
@@ -290,7 +280,7 @@ f_val_print (struct type *type, int embe
 	  /* For a pointer to char or unsigned char, also print the string
 	     pointed to, unless pointer is null.  */
 	  if (TYPE_LENGTH (elttype) == 1
-	      && TYPE_CODE (elttype) == TYPE_CODE_INT
+	      && elttype->code () == TYPE_CODE_INT
 	      && (options->format == 0 || options->format == 's')
 	      && addr != 0)
 	    {
@@ -303,35 +293,19 @@ f_val_print (struct type *type, int embe
 	}
       break;
 
-    case TYPE_CODE_INT:
-      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);
-	}
-      else
-	val_print_scalar_formatted (type, embedded_offset,
-				    original_value, options, 0, stream);
-      break;
-
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
       /* Starting from the Fortran 90 standard, Fortran supports derived
-         types.  */
+	 types.  */
       fprintf_filtered (stream, "( ");
-      for (index = 0; index < TYPE_NFIELDS (type); index++)
-        {
-	  struct value *field = value_field
-	    ((struct value *)original_value, index);
+      for (index = 0; index < type->num_fields (); index++)
+	{
+	  struct value *field = value_field (val, index);
 
-	  struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, index));
+	  struct type *field_type = check_typedef (type->field (index).type ());
 
 
-	  if (TYPE_CODE (field_type) != TYPE_CODE_FUNC)
+	  if (field_type->code () != TYPE_CODE_FUNC)
 	    {
 	      const char *field_name;
 
@@ -341,14 +315,13 @@ f_val_print (struct type *type, int embe
 	      field_name = TYPE_FIELD_NAME (type, index);
 	      if (field_name != NULL)
 		{
-		  fputs_filtered (field_name, stream);
+		  fputs_styled (field_name, variable_name_style.style (),
+				stream);
 		  fputs_filtered (" = ", stream);
 		}
 
-	      val_print (value_type (field),
-			 value_embedded_offset (field),
-			 value_address (field), stream, recurse + 1,
-			 field, options, current_language);
+	      common_val_print (field, stream, recurse + 1,
+				options, current_language);
 
 	      ++printed_field;
 	    }
@@ -356,6 +329,28 @@ f_val_print (struct type *type, int embe
       fprintf_filtered (stream, " )");
       break;     
 
+    case TYPE_CODE_BOOL:
+      if (options->format || options->output_format)
+	{
+	  struct value_print_options opts = *options;
+	  opts.format = (options->format ? options->format
+			 : options->output_format);
+	  value_print_scalar_formatted (val, &opts, 0, stream);
+	}
+      else
+	{
+	  LONGEST longval = value_as_long (val);
+	  /* The Fortran standard doesn't specify how logical types are
+	     represented.  Different compilers use different non zero
+	     values to represent logical true.  */
+	  if (longval == 0)
+	    fputs_filtered (f_decorations.false_name, stream);
+	  else
+	    fputs_filtered (f_decorations.true_name, stream);
+	}
+      break;
+
+    case TYPE_CODE_INT:
     case TYPE_CODE_REF:
     case TYPE_CODE_FUNC:
     case TYPE_CODE_FLAGS:
@@ -365,12 +360,9 @@ f_val_print (struct type *type, int embe
     case TYPE_CODE_RANGE:
     case TYPE_CODE_UNDEF:
     case TYPE_CODE_COMPLEX:
-    case TYPE_CODE_BOOL:
     case TYPE_CODE_CHAR:
     default:
-      generic_val_print (type, embedded_offset, address,
-			 stream, recurse, original_value, options,
-			 &f_decorations);
+      generic_value_print (val, stream, recurse, options, &f_decorations);
       break;
     }
 }
@@ -394,7 +386,7 @@ info_common_command_for_block (const str
 	gdb_assert (SYMBOL_CLASS (sym) == LOC_COMMON_BLOCK);
 
 	if (comname && (!sym->linkage_name ()
-	                || strcmp (comname, sym->linkage_name ()) != 0))
+			|| strcmp (comname, sym->linkage_name ()) != 0))
 	  continue;
 
 	if (*any_printed)
@@ -464,7 +456,7 @@ info_common_command (const char *comname
     {
       info_common_command_for_block (block, comname, &values_printed);
       /* After handling the function's top-level block, stop.  Don't
-         continue to its superblock, the block of per-file symbols.  */
+	 continue to its superblock, the block of per-file symbols.  */
       if (BLOCK_FUNCTION (block))
 	break;
       block = BLOCK_SUPERBLOCK (block);
@@ -479,8 +471,9 @@ info_common_command (const char *comname
     }
 }
 
+void _initialize_f_valprint ();
 void
-_initialize_f_valprint (void)
+_initialize_f_valprint ()
 {
   add_info ("common", info_common_command,
 	    _("Print out the values contained in a Fortran COMMON block."));
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore ./gdb/gcore
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore	2020-03-07 02:10:59.000000000 +0000
+++ ./gdb/gcore	2021-12-16 02:00:10.000000000 +0000
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-#   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+#   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore.c ./gdb/gcore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gcore.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Generate a core file for the inferior process.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,7 +46,6 @@
 
 static const char *default_gcore_target (void);
 static enum bfd_architecture default_gcore_arch (void);
-static unsigned long default_gcore_mach (void);
 static int gcore_memory_sections (bfd *);
 
 /* create_gcore_bfd -- helper for gcore_command (exported).
@@ -60,7 +59,7 @@ create_gcore_bfd (const char *filename)
   if (obfd == NULL)
     error (_("Failed to open '%s' for output."), filename);
   bfd_set_format (obfd.get (), bfd_core);
-  bfd_set_arch_mach (obfd.get (), default_gcore_arch (), default_gcore_mach ());
+  bfd_set_arch_mach (obfd.get (), default_gcore_arch (), 0);
   return obfd;
 }
 
@@ -78,10 +77,10 @@ write_gcore_file_1 (bfd *obfd)
      generation should be converted to gdbarch_make_corefile_notes; at that
      point, the target vector method can be removed.  */
   if (!gdbarch_make_corefile_notes_p (target_gdbarch ()))
-    note_data.reset (target_make_corefile_notes (obfd, &note_size));
+    note_data = target_make_corefile_notes (obfd, &note_size);
   else
-    note_data.reset (gdbarch_make_corefile_notes (target_gdbarch (), obfd,
-						  &note_size));
+    note_data = gdbarch_make_corefile_notes (target_gdbarch (), obfd,
+					     &note_size);
 
   if (note_data == NULL || note_size == 0)
     error (_("Target does not support core file generation."));
@@ -129,7 +128,7 @@ gcore_command (const char *args, int fro
   gdb::unique_xmalloc_ptr<char> corefilename;
 
   /* No use generating a corefile without a target process.  */
-  if (!target_has_execution)
+  if (!target_has_execution ())
     noprocess ();
 
   if (args && *args)
@@ -145,39 +144,26 @@ gcore_command (const char *args, int fro
 		      "Opening corefile '%s' for output.\n",
 		      corefilename.get ());
 
-  /* Open the output file.  */
-  gdb_bfd_ref_ptr obfd (create_gcore_bfd (corefilename.get ()));
+  if (target_supports_dumpcore ())
+    target_dumpcore (corefilename.get ());
+  else
+    {
+      /* Open the output file.  */
+      gdb_bfd_ref_ptr obfd (create_gcore_bfd (corefilename.get ()));
 
-  /* Arrange to unlink the file on failure.  */
-  gdb::unlinker unlink_file (corefilename.get ());
+      /* Arrange to unlink the file on failure.  */
+      gdb::unlinker unlink_file (corefilename.get ());
 
-  /* Call worker function.  */
-  write_gcore_file (obfd.get ());
+      /* Call worker function.  */
+      write_gcore_file (obfd.get ());
 
-  /* Succeeded.  */
-  unlink_file.keep ();
+      /* Succeeded.  */
+      unlink_file.keep ();
+    }
 
   fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename.get ());
 }
 
-static unsigned long
-default_gcore_mach (void)
-{
-#if 1	/* See if this even matters...  */
-  return 0;
-#else
-
-  const struct bfd_arch_info *bfdarch = gdbarch_bfd_arch_info (target_gdbarch ());
-
-  if (bfdarch != NULL)
-    return bfdarch->mach;
-  if (exec_bfd == NULL)
-    error (_("Can't find default bfd machine type (need execfile)."));
-
-  return bfd_get_mach (exec_bfd);
-#endif /* 1 */
-}
-
 static enum bfd_architecture
 default_gcore_arch (void)
 {
@@ -185,10 +171,10 @@ default_gcore_arch (void)
 
   if (bfdarch != NULL)
     return bfdarch->arch;
-  if (exec_bfd == NULL)
+  if (current_program_space->exec_bfd () == NULL)
     error (_("Can't find bfd architecture for corefile (need execfile)."));
 
-  return bfd_get_arch (exec_bfd);
+  return bfd_get_arch (current_program_space->exec_bfd ());
 }
 
 static const char *
@@ -198,12 +184,12 @@ default_gcore_target (void)
   if (gdbarch_gcore_bfd_target_p (target_gdbarch ()))
     return gdbarch_gcore_bfd_target (target_gdbarch ());
 
-  /* Otherwise, try to fall back to the exec_bfd target.  This will probably
+  /* Otherwise, try to fall back to the exec target.  This will probably
      not work for non-ELF targets.  */
-  if (exec_bfd == NULL)
+  if (current_program_space->exec_bfd () == NULL)
     return NULL;
   else
-    return bfd_get_target (exec_bfd);
+    return bfd_get_target (current_program_space->exec_bfd ());
 }
 
 /* Derive a reasonable stack segment by unwinding the target stack,
@@ -219,7 +205,7 @@ derive_stack_segment (bfd_vma *bottom, b
   gdb_assert (top);
 
   /* Can't succeed without stack and registers.  */
-  if (!target_has_stack || !target_has_registers)
+  if (!target_has_stack () || !target_has_registers ())
     return 0;
 
   /* Can't succeed without current frame.  */
@@ -282,7 +268,7 @@ call_target_sbrk (int sbrk_arg)
   else
     return (bfd_vma) 0;
 
-  gdbarch = get_objfile_arch (sbrk_objf);
+  gdbarch = sbrk_objf->arch ();
   target_sbrk_arg = value_from_longest (builtin_type (gdbarch)->builtin_int, 
 					sbrk_arg);
   gdb_assert (target_sbrk_arg);
@@ -316,7 +302,7 @@ derive_heap_segment (bfd *abfd, bfd_vma
 
   /* This function depends on being able to call a function in the
      inferior.  */
-  if (!target_has_execution)
+  if (!target_has_execution ())
     return 0;
 
   /* The following code assumes that the link map is arranged as
@@ -359,7 +345,7 @@ derive_heap_segment (bfd *abfd, bfd_vma
 }
 
 static void
-make_output_phdrs (bfd *obfd, asection *osec, void *ignored)
+make_output_phdrs (bfd *obfd, asection *osec)
 {
   int p_flags = 0;
   int p_type = 0;
@@ -398,10 +384,10 @@ gcore_create_callback (CORE_ADDR vaddr,
   if (read == 0 && write == 0 && exec == 0 && modified == 0)
     {
       if (info_verbose)
-        {
-          fprintf_filtered (gdb_stdout, "Ignore segment, %s bytes at %s\n",
-                            plongest (size), paddress (target_gdbarch (), vaddr));
-        }
+	{
+	  fprintf_filtered (gdb_stdout, "Ignore segment, %s bytes at %s\n",
+			    plongest (size), paddress (target_gdbarch (), vaddr));
+	}
 
       return 0;
     }
@@ -418,8 +404,8 @@ gcore_create_callback (CORE_ADDR vaddr,
 	    bfd *abfd = objfile->obfd;
 	    asection *asec = objsec->the_bfd_section;
 	    bfd_vma align = (bfd_vma) 1 << bfd_section_alignment (asec);
-	    bfd_vma start = obj_section_addr (objsec) & -align;
-	    bfd_vma end = (obj_section_endaddr (objsec) + align - 1) & -align;
+	    bfd_vma start = objsec->addr () & -align;
+	    bfd_vma end = (objsec->endaddr () + align - 1) & -align;
 
 	    /* Match if either the entire memory region lies inside the
 	       section (i.e. a mapping covering some pages of a large
@@ -493,7 +479,7 @@ objfile_find_memory_regions (struct targ
 	    int size = bfd_section_size (isec);
 	    int ret;
 
-	    ret = (*func) (obj_section_addr (objsec), size, 
+	    ret = (*func) (objsec->addr (), size,
 			   1, /* All sections will be readable.  */
 			   (flags & SEC_READONLY) == 0, /* Writable.  */
 			   (flags & SEC_CODE) != 0, /* Executable.  */
@@ -514,7 +500,8 @@ objfile_find_memory_regions (struct targ
 	     obfd);
 
   /* Make a heap segment.  */
-  if (derive_heap_segment (exec_bfd, &temp_bottom, &temp_top))
+  if (derive_heap_segment (current_program_space->exec_bfd (), &temp_bottom,
+			   &temp_top))
     (*func) (temp_bottom, temp_top - temp_bottom,
 	     1, /* Heap section will be readable.  */
 	     1, /* Heap section will be writable.  */
@@ -526,7 +513,7 @@ objfile_find_memory_regions (struct targ
 }
 
 static void
-gcore_copy_callback (bfd *obfd, asection *osec, void *ignored)
+gcore_copy_callback (bfd *obfd, asection *osec)
 {
   bfd_size_type size, total_size = bfd_section_size (osec);
   file_ptr offset = 0;
@@ -582,21 +569,46 @@ gcore_memory_sections (bfd *obfd)
     }
 
   /* Record phdrs for section-to-segment mapping.  */
-  bfd_map_over_sections (obfd, make_output_phdrs, NULL);
+  for (asection *sect : gdb_bfd_sections (obfd))
+    make_output_phdrs (obfd, sect);
 
   /* Copy memory region contents.  */
-  bfd_map_over_sections (obfd, gcore_copy_callback, NULL);
+  for (asection *sect : gdb_bfd_sections (obfd))
+    gcore_copy_callback (obfd, sect);
 
   return 1;
 }
 
+/* See gcore.h.  */
+
+thread_info *
+gcore_find_signalled_thread ()
+{
+  thread_info *curr_thr = inferior_thread ();
+  if (curr_thr->state != THREAD_EXITED
+      && curr_thr->suspend.stop_signal != GDB_SIGNAL_0)
+    return curr_thr;
+
+  for (thread_info *thr : current_inferior ()->non_exited_threads ())
+    if (thr->suspend.stop_signal != GDB_SIGNAL_0)
+      return thr;
+
+  /* Default to the current thread, unless it has exited.  */
+  if (curr_thr->state != THREAD_EXITED)
+    return curr_thr;
+
+  return nullptr;
+}
+
+void _initialize_gcore ();
 void
-_initialize_gcore (void)
+_initialize_gcore ()
 {
-  add_com ("generate-core-file", class_files, gcore_command, _("\
+  cmd_list_element *generate_core_file_cmd
+    = add_com ("generate-core-file", class_files, gcore_command, _("\
 Save a core file with the current state of the debugged process.\n\
 Usage: generate-core-file [FILENAME]\n\
 Argument is optional filename.  Default filename is 'core.PROCESS_ID'."));
 
-  add_com_alias ("gcore", "generate-core-file", class_files, 1);
+  add_com_alias ("gcore", generate_core_file_cmd, class_files, 1);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore-elf.c ./gdb/gcore-elf.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore-elf.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/gcore-elf.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,166 @@
+/* Copyright (C) 2021 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 "gcore-elf.h"
+#include "elf-bfd.h"
+#include "target.h"
+#include "regcache.h"
+#include "gdbarch.h"
+#include "gdbthread.h"
+#include "inferior.h"
+#include "regset.h"
+#include "gdbsupport/tdesc.h"
+
+/* Structure for passing information from GCORE_COLLECT_THREAD_REGISTERS
+   via an iterator to GCORE_COLLECT_REGSET_SECTION_CB. */
+
+struct gcore_elf_collect_regset_section_cb_data
+{
+  gcore_elf_collect_regset_section_cb_data
+	(struct gdbarch *gdbarch, const struct regcache *regcache,
+	 bfd *obfd, ptid_t ptid, gdb_signal stop_signal,
+	 gdb::unique_xmalloc_ptr<char> *note_data, int *note_size)
+    : gdbarch (gdbarch), regcache (regcache), obfd (obfd),
+      note_data (note_data), note_size (note_size),
+      stop_signal (stop_signal)
+  {
+    /* The LWP is often not available for bare metal target, in which case
+       use the tid instead.  */
+    if (ptid.lwp_p ())
+      lwp = ptid.lwp ();
+    else
+      lwp = ptid.tid ();
+  }
+
+  struct gdbarch *gdbarch;
+  const struct regcache *regcache;
+  bfd *obfd;
+  gdb::unique_xmalloc_ptr<char> *note_data;
+  int *note_size;
+  unsigned long lwp;
+  enum gdb_signal stop_signal;
+  bool abort_iteration = false;
+};
+
+/* Callback for ITERATE_OVER_REGSET_SECTIONS that records a single
+   regset in the core file note section.  */
+
+static void
+gcore_elf_collect_regset_section_cb (const char *sect_name,
+				     int supply_size, int collect_size,
+				     const struct regset *regset,
+				     const char *human_name, void *cb_data)
+{
+  struct gcore_elf_collect_regset_section_cb_data *data
+    = (struct gcore_elf_collect_regset_section_cb_data *) cb_data;
+  bool variable_size_section = (regset != nullptr
+				&& regset->flags & REGSET_VARIABLE_SIZE);
+
+  gdb_assert (variable_size_section || supply_size == collect_size);
+
+  if (data->abort_iteration)
+    return;
+
+  gdb_assert (regset != nullptr && regset->collect_regset != nullptr);
+
+  /* This is intentionally zero-initialized by using std::vector, so
+     that any padding bytes in the core file will show as 0.  */
+  std::vector<gdb_byte> buf (collect_size);
+
+  regset->collect_regset (regset, data->regcache, -1, buf.data (),
+			  collect_size);
+
+  /* PRSTATUS still needs to be treated specially.  */
+  if (strcmp (sect_name, ".reg") == 0)
+    data->note_data->reset (elfcore_write_prstatus
+			    (data->obfd, data->note_data->release (),
+			     data->note_size, data->lwp,
+			     gdb_signal_to_host (data->stop_signal),
+			     buf.data ()));
+  else
+    data->note_data->reset (elfcore_write_register_note
+			    (data->obfd, data->note_data->release (),
+			     data->note_size, sect_name, buf.data (),
+			     collect_size));
+
+  if (*data->note_data == nullptr)
+    data->abort_iteration = true;
+}
+
+/* Records the register state of thread PTID out of REGCACHE into the note
+   buffer represented by *NOTE_DATA and NOTE_SIZE.  OBFD is the bfd into
+   which the core file is being created, and STOP_SIGNAL is the signal that
+   cause thread PTID to stop.  */
+
+static void
+gcore_elf_collect_thread_registers
+	(const struct regcache *regcache, ptid_t ptid, bfd *obfd,
+	 gdb::unique_xmalloc_ptr<char> *note_data, int *note_size,
+	 enum gdb_signal stop_signal)
+{
+  struct gdbarch *gdbarch = regcache->arch ();
+  gcore_elf_collect_regset_section_cb_data data (gdbarch, regcache, obfd,
+						 ptid, stop_signal,
+						 note_data, note_size);
+  gdbarch_iterate_over_regset_sections
+    (gdbarch, gcore_elf_collect_regset_section_cb, &data, regcache);
+}
+
+/* See gcore-elf.h.  */
+
+void
+gcore_elf_build_thread_register_notes
+  (struct gdbarch *gdbarch, struct thread_info *info, gdb_signal stop_signal,
+   bfd *obfd, gdb::unique_xmalloc_ptr<char> *note_data, int *note_size)
+{
+  struct regcache *regcache
+    = get_thread_arch_regcache (info->inf->process_target (),
+				info->ptid, gdbarch);
+  target_fetch_registers (regcache, -1);
+  gcore_elf_collect_thread_registers (regcache, info->ptid, obfd,
+				      note_data, note_size, stop_signal);
+}
+
+/* See gcore-elf.h.  */
+
+void
+gcore_elf_make_tdesc_note (bfd *obfd,
+			   gdb::unique_xmalloc_ptr<char> *note_data,
+			   int *note_size)
+{
+  /* Append the target description to the core file.  */
+  const struct target_desc *tdesc = gdbarch_target_desc (target_gdbarch ());
+  const char *tdesc_xml
+    = tdesc == nullptr ? nullptr : tdesc_get_features_xml (tdesc);
+  if (tdesc_xml != nullptr && *tdesc_xml != '\0')
+    {
+      /* Skip the leading '@'.  */
+      if (*tdesc_xml == '@')
+	++tdesc_xml;
+
+      /* Include the null terminator in the length.  */
+      size_t tdesc_len = strlen (tdesc_xml) + 1;
+
+      /* Now add the target description into the core file.  */
+      note_data->reset (elfcore_write_register_note (obfd,
+						     note_data->release (),
+						     note_size,
+						     ".gdb-tdesc", tdesc_xml,
+						     tdesc_len));
+    }
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore-elf.h ./gdb/gcore-elf.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore-elf.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/gcore-elf.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,47 @@
+/* Copyright (C) 2021 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 file contains generic functions for writing ELF based core files.  */
+
+#if !defined (GCORE_ELF_H)
+#define GCORE_ELF_H 1
+
+#include "gdb_bfd.h"
+#include "gdbsupport/gdb_signals.h"
+#include "gcore.h"
+
+struct gdbarch;
+struct thread_info;
+
+/* Add content to *NOTE_DATA (and update *NOTE_SIZE) to describe the
+   registers of thread INFO.  Report the thread as having stopped with
+   STOP_SIGNAL.  The core file is being written to OBFD, and GDBARCH is the
+   architecture for which the core file is being generated.  */
+
+extern void gcore_elf_build_thread_register_notes
+  (struct gdbarch *gdbarch, struct thread_info *info, gdb_signal stop_signal,
+   bfd *obfd, gdb::unique_xmalloc_ptr<char> *note_data, int *note_size);
+
+/* Add content to *NOTE_DATA (and update *NOTE_SIZE) to include a note
+   containing the current targtet's target description.  The core file is
+   being written to OBFD.  If something goes wrong then *NOTE_DATA can be
+   set to nullptr.  */
+
+extern void gcore_elf_make_tdesc_note
+  (bfd *obfd, gdb::unique_xmalloc_ptr<char> *note_data, int *note_size);
+
+#endif /* GCORE_ELF_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore.h ./gdb/gcore.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gcore.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for reading/writing gcore files.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,11 +22,19 @@
 
 #include "gdb_bfd.h"
 
+struct thread_info;
+
 extern gdb_bfd_ref_ptr create_gcore_bfd (const char *filename);
 extern void write_gcore_file (bfd *obfd);
-extern bfd *load_corefile (char *filename, int from_tty);
 extern int objfile_find_memory_regions (struct target_ops *self,
 					find_memory_region_ftype func,
 					void *obfd);
 
+/* Find the signalled thread.  In case there's more than one signalled
+   thread, prefer the current thread, if it is signalled.  If no thread was
+   signalled, default to the current thread, unless it has exited, in which
+   case return NULL.  */
+
+extern thread_info *gcore_find_signalled_thread ();
+
 #endif /* GCORE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore.in ./gdb/gcore.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gcore.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gcore.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-#   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+#   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch.c ./gdb/gdbarch.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbarch.c	2021-12-16 01:57:39.000000000 +0000
@@ -3,7 +3,7 @@
 
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,17 +20,7 @@
    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 was created with the aid of ``gdbarch.sh''.
-
-   The Bourne shell script ``gdbarch.sh'' creates the files
-   ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them
-   against the existing ``gdbarch.[hc]''.  Any differences found
-   being reported.
-
-   If editing this file, please also run gdbarch.sh and merge any
-   changes into that script. Conversely, when making sweeping changes
-   to this file, modifying gdbarch.sh and using its output may prove
-   easier.  */
+/* This file was created with the aid of ``gdbarch.sh''.  */
 
 
 #include "defs.h"
@@ -63,7 +53,7 @@ static void alloc_gdbarch_data (struct g
 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)
+		    struct cmd_list_element *c, const char *value)
 {
   fprintf_filtered (file, _("Architecture debugging is %s.\n"), value);
 }
@@ -176,6 +166,8 @@ struct gdbarch
   int int_bit;
   int long_bit;
   int long_long_bit;
+  int bfloat16_bit;
+  const struct floatformat ** bfloat16_format;
   int half_bit;
   const struct floatformat ** half_format;
   int float_bit;
@@ -201,7 +193,7 @@ struct gdbarch
   int num_pseudo_regs;
   gdbarch_ax_pseudo_register_collect_ftype *ax_pseudo_register_collect;
   gdbarch_ax_pseudo_register_push_stack_ftype *ax_pseudo_register_push_stack;
-  gdbarch_handle_segmentation_fault_ftype *handle_segmentation_fault;
+  gdbarch_report_signal_info_ftype *report_signal_info;
   int sp_regnum;
   int pc_regnum;
   int ps_regnum;
@@ -261,6 +253,12 @@ struct gdbarch
   gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr;
   gdbarch_addr_bits_remove_ftype *addr_bits_remove;
   int significant_addr_bit;
+  gdbarch_memtag_to_string_ftype *memtag_to_string;
+  gdbarch_tagged_address_p_ftype *tagged_address_p;
+  gdbarch_memtag_matches_p_ftype *memtag_matches_p;
+  gdbarch_set_memtags_ftype *set_memtags;
+  gdbarch_get_memtag_ftype *get_memtag;
+  CORE_ADDR memtag_granule_size;
   gdbarch_software_single_step_ftype *software_single_step;
   gdbarch_single_step_through_delay_ftype *single_step_through_delay;
   gdbarch_print_insn_ftype *print_insn;
@@ -298,11 +296,13 @@ struct gdbarch
   gdbarch_displaced_step_copy_insn_ftype *displaced_step_copy_insn;
   gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep;
   gdbarch_displaced_step_fixup_ftype *displaced_step_fixup;
-  gdbarch_displaced_step_location_ftype *displaced_step_location;
+  gdbarch_displaced_step_prepare_ftype *displaced_step_prepare;
+  gdbarch_displaced_step_finish_ftype *displaced_step_finish;
+  gdbarch_displaced_step_copy_insn_closure_by_addr_ftype *displaced_step_copy_insn_closure_by_addr;
+  gdbarch_displaced_step_restore_all_in_ptid_ftype *displaced_step_restore_all_in_ptid;
   gdbarch_relocate_instruction_ftype *relocate_instruction;
   gdbarch_overlay_update_ftype *overlay_update;
   gdbarch_core_read_description_ftype *core_read_description;
-  gdbarch_static_transform_name_ftype *static_transform_name;
   int sofun_address_maybe_missing;
   gdbarch_process_record_ftype *process_record;
   gdbarch_process_record_signal_ftype *process_record_signal;
@@ -345,6 +345,7 @@ struct gdbarch
   gdbarch_insn_is_call_ftype *insn_is_call;
   gdbarch_insn_is_ret_ftype *insn_is_ret;
   gdbarch_insn_is_jump_ftype *insn_is_jump;
+  gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p;
   gdbarch_auxv_parse_ftype *auxv_parse;
   gdbarch_print_auxv_entry_ftype *print_auxv_entry;
   gdbarch_vsyscall_range_ftype *vsyscall_range;
@@ -358,6 +359,7 @@ struct gdbarch
   const disasm_options_and_args_t * valid_disassembler_options;
   gdbarch_type_align_ftype *type_align;
   gdbarch_get_pc_address_flags_ftype *get_pc_address_flags;
+  gdbarch_read_core_file_mappings_ftype *read_core_file_mappings;
 };
 
 /* Create a new ``struct gdbarch'' based on information provided by
@@ -365,7 +367,7 @@ struct gdbarch
 
 struct gdbarch *
 gdbarch_alloc (const struct gdbarch_info *info,
-               struct gdbarch_tdep *tdep)
+	       struct gdbarch_tdep *tdep)
 {
   struct gdbarch *gdbarch;
 
@@ -392,6 +394,7 @@ gdbarch_alloc (const struct gdbarch_info
   gdbarch->int_bit = 4*TARGET_CHAR_BIT;
   gdbarch->long_bit = 4*TARGET_CHAR_BIT;
   gdbarch->long_long_bit = 2*gdbarch->long_bit;
+  gdbarch->bfloat16_bit = 2*TARGET_CHAR_BIT;
   gdbarch->half_bit = 2*TARGET_CHAR_BIT;
   gdbarch->float_bit = 4*TARGET_CHAR_BIT;
   gdbarch->double_bit = 8*TARGET_CHAR_BIT;
@@ -436,6 +439,11 @@ gdbarch_alloc (const struct gdbarch_info
   gdbarch->stabs_argument_has_addr = default_stabs_argument_has_addr;
   gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
   gdbarch->addr_bits_remove = core_addr_identity;
+  gdbarch->memtag_to_string = default_memtag_to_string;
+  gdbarch->tagged_address_p = default_tagged_address_p;
+  gdbarch->memtag_matches_p = default_memtag_matches_p;
+  gdbarch->set_memtags = default_set_memtags;
+  gdbarch->get_memtag = default_get_memtag;
   gdbarch->print_insn = default_print_insn;
   gdbarch->skip_trampoline_code = generic_skip_trampoline_code;
   gdbarch->skip_solib_resolver = generic_skip_solib_resolver;
@@ -451,7 +459,7 @@ gdbarch_alloc (const struct gdbarch_info
   gdbarch->skip_permanent_breakpoint = default_skip_permanent_breakpoint;
   gdbarch->displaced_step_hw_singlestep = default_displaced_step_hw_singlestep;
   gdbarch->displaced_step_fixup = NULL;
-  gdbarch->displaced_step_location = NULL;
+  gdbarch->displaced_step_finish = NULL;
   gdbarch->relocate_instruction = NULL;
   gdbarch->has_shared_address_space = default_has_shared_address_space;
   gdbarch->fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
@@ -464,6 +472,7 @@ gdbarch_alloc (const struct gdbarch_info
   gdbarch->insn_is_call = default_insn_is_call;
   gdbarch->insn_is_ret = default_insn_is_ret;
   gdbarch->insn_is_jump = default_insn_is_jump;
+  gdbarch->program_breakpoint_here_p = default_program_breakpoint_here_p;
   gdbarch->print_auxv_entry = default_print_auxv_entry;
   gdbarch->vsyscall_range = default_vsyscall_range;
   gdbarch->infcall_mmap = default_infcall_mmap;
@@ -473,6 +482,7 @@ gdbarch_alloc (const struct gdbarch_info
   gdbarch->addressable_memory_unit_size = default_addressable_memory_unit_size;
   gdbarch->type_align = default_type_align;
   gdbarch->get_pc_address_flags = default_get_pc_address_flags;
+  gdbarch->read_core_file_mappings = default_read_core_file_mappings;
   /* gdbarch_alloc() */
 
   return gdbarch;
@@ -530,6 +540,9 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of int_bit, invalid_p == 0 */
   /* Skip verify of long_bit, invalid_p == 0 */
   /* Skip verify of long_long_bit, invalid_p == 0 */
+  /* Skip verify of bfloat16_bit, invalid_p == 0 */
+  if (gdbarch->bfloat16_format == 0)
+    gdbarch->bfloat16_format = floatformats_bfloat16;
   /* Skip verify of half_bit, invalid_p == 0 */
   if (gdbarch->half_format == 0)
     gdbarch->half_format = floatformats_ieee_half;
@@ -564,7 +577,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of num_pseudo_regs, invalid_p == 0 */
   /* Skip verify of ax_pseudo_register_collect, has predicate.  */
   /* Skip verify of ax_pseudo_register_push_stack, has predicate.  */
-  /* Skip verify of handle_segmentation_fault, has predicate.  */
+  /* Skip verify of report_signal_info, has predicate.  */
   /* Skip verify of sp_regnum, invalid_p == 0 */
   /* Skip verify of pc_regnum, invalid_p == 0 */
   /* Skip verify of ps_regnum, invalid_p == 0 */
@@ -624,6 +637,12 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of convert_from_func_ptr_addr, invalid_p == 0 */
   /* Skip verify of addr_bits_remove, invalid_p == 0 */
   /* Skip verify of significant_addr_bit, invalid_p == 0 */
+  /* Skip verify of memtag_to_string, invalid_p == 0 */
+  /* Skip verify of tagged_address_p, invalid_p == 0 */
+  /* Skip verify of memtag_matches_p, invalid_p == 0 */
+  /* Skip verify of set_memtags, invalid_p == 0 */
+  /* Skip verify of get_memtag, invalid_p == 0 */
+  /* Skip verify of memtag_granule_size, invalid_p == 0 */
   /* Skip verify of software_single_step, has predicate.  */
   /* Skip verify of single_step_through_delay, has predicate.  */
   /* Skip verify of print_insn, invalid_p == 0 */
@@ -661,12 +680,13 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of displaced_step_copy_insn, has predicate.  */
   /* Skip verify of displaced_step_hw_singlestep, invalid_p == 0 */
   /* Skip verify of displaced_step_fixup, has predicate.  */
-  if ((! gdbarch->displaced_step_location) != (! gdbarch->displaced_step_copy_insn))
-    log.puts ("\n\tdisplaced_step_location");
+  /* Skip verify of displaced_step_prepare, has predicate.  */
+  if ((! gdbarch->displaced_step_finish) != (! gdbarch->displaced_step_prepare))
+    log.puts ("\n\tdisplaced_step_finish");
+  /* Skip verify of displaced_step_copy_insn_closure_by_addr, has predicate.  */
   /* Skip verify of relocate_instruction, has predicate.  */
   /* Skip verify of overlay_update, has predicate.  */
   /* Skip verify of core_read_description, has predicate.  */
-  /* Skip verify of static_transform_name, has predicate.  */
   /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */
   /* Skip verify of process_record, has predicate.  */
   /* Skip verify of process_record_signal, has predicate.  */
@@ -708,6 +728,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of insn_is_call, invalid_p == 0 */
   /* Skip verify of insn_is_ret, invalid_p == 0 */
   /* Skip verify of insn_is_jump, invalid_p == 0 */
+  /* Skip verify of program_breakpoint_here_p, invalid_p == 0 */
   /* Skip verify of auxv_parse, has predicate.  */
   /* Skip verify of print_auxv_entry, invalid_p == 0 */
   /* Skip verify of vsyscall_range, invalid_p == 0 */
@@ -721,10 +742,11 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of valid_disassembler_options, invalid_p == 0 */
   /* Skip verify of type_align, invalid_p == 0 */
   /* Skip verify of get_pc_address_flags, invalid_p == 0 */
+  /* Skip verify of read_core_file_mappings, invalid_p == 0 */
   if (!log.empty ())
     internal_error (__FILE__, __LINE__,
-                    _("verify_gdbarch: the following are invalid ...%s"),
-                    log.c_str ());
+		    _("verify_gdbarch: the following are invalid ...%s"),
+		    log.c_str ());
 }
 
 
@@ -739,8 +761,8 @@ gdbarch_dump (struct gdbarch *gdbarch, s
   gdb_nm_file = GDB_NM_FILE;
 #endif
   fprintf_unfiltered (file,
-                      "gdbarch_dump: GDB_NM_FILE = %s\n",
-                      gdb_nm_file);
+		      "gdbarch_dump: GDB_NM_FILE = %s\n",
+		      gdb_nm_file);
   fprintf_unfiltered (file,
                       "gdbarch_dump: addr_bit = %s\n",
                       plongest (gdbarch->addr_bit));
@@ -814,6 +836,12 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: bfd_arch_info = %s\n",
                       gdbarch_bfd_arch_info (gdbarch)->printable_name);
   fprintf_unfiltered (file,
+                      "gdbarch_dump: bfloat16_bit = %s\n",
+                      plongest (gdbarch->bfloat16_bit));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: bfloat16_format = %s\n",
+                      pformat (gdbarch->bfloat16_format));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: breakpoint_from_pc = <%s>\n",
                       host_address_to_string (gdbarch->breakpoint_from_pc));
   fprintf_unfiltered (file,
@@ -919,6 +947,15 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: displaced_step_copy_insn = <%s>\n",
                       host_address_to_string (gdbarch->displaced_step_copy_insn));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_displaced_step_copy_insn_closure_by_addr_p() = %d\n",
+                      gdbarch_displaced_step_copy_insn_closure_by_addr_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: displaced_step_copy_insn_closure_by_addr = <%s>\n",
+                      host_address_to_string (gdbarch->displaced_step_copy_insn_closure_by_addr));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: displaced_step_finish = <%s>\n",
+                      host_address_to_string (gdbarch->displaced_step_finish));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_displaced_step_fixup_p() = %d\n",
                       gdbarch_displaced_step_fixup_p (gdbarch));
   fprintf_unfiltered (file,
@@ -928,8 +965,14 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: displaced_step_hw_singlestep = <%s>\n",
                       host_address_to_string (gdbarch->displaced_step_hw_singlestep));
   fprintf_unfiltered (file,
-                      "gdbarch_dump: displaced_step_location = <%s>\n",
-                      host_address_to_string (gdbarch->displaced_step_location));
+                      "gdbarch_dump: gdbarch_displaced_step_prepare_p() = %d\n",
+                      gdbarch_displaced_step_prepare_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: displaced_step_prepare = <%s>\n",
+                      host_address_to_string (gdbarch->displaced_step_prepare));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: displaced_step_restore_all_in_ptid = <%s>\n",
+                      host_address_to_string (gdbarch->displaced_step_restore_all_in_ptid));
   fprintf_unfiltered (file,
                       "gdbarch_dump: double_bit = %s\n",
                       plongest (gdbarch->double_bit));
@@ -1063,6 +1106,9 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: get_longjmp_target = <%s>\n",
                       host_address_to_string (gdbarch->get_longjmp_target));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: get_memtag = <%s>\n",
+                      host_address_to_string (gdbarch->get_memtag));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: get_pc_address_flags = <%s>\n",
                       host_address_to_string (gdbarch->get_pc_address_flags));
   fprintf_unfiltered (file,
@@ -1096,12 +1142,6 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: half_format = %s\n",
                       pformat (gdbarch->half_format));
   fprintf_unfiltered (file,
-                      "gdbarch_dump: gdbarch_handle_segmentation_fault_p() = %d\n",
-                      gdbarch_handle_segmentation_fault_p (gdbarch));
-  fprintf_unfiltered (file,
-                      "gdbarch_dump: handle_segmentation_fault = <%s>\n",
-                      host_address_to_string (gdbarch->handle_segmentation_fault));
-  fprintf_unfiltered (file,
                       "gdbarch_dump: has_dos_based_file_system = %s\n",
                       plongest (gdbarch->has_dos_based_file_system));
   fprintf_unfiltered (file,
@@ -1198,6 +1238,15 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: memory_remove_breakpoint = <%s>\n",
                       host_address_to_string (gdbarch->memory_remove_breakpoint));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: memtag_granule_size = %s\n",
+                      core_addr_to_string_nz (gdbarch->memtag_granule_size));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: memtag_matches_p = <%s>\n",
+                      host_address_to_string (gdbarch->memtag_matches_p));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: memtag_to_string = <%s>\n",
+                      host_address_to_string (gdbarch->memtag_to_string));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: num_pseudo_regs = %s\n",
                       plongest (gdbarch->num_pseudo_regs));
   fprintf_unfiltered (file,
@@ -1249,6 +1298,9 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: process_record_signal = <%s>\n",
                       host_address_to_string (gdbarch->process_record_signal));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: program_breakpoint_here_p = <%s>\n",
+                      host_address_to_string (gdbarch->program_breakpoint_here_p));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: ps_regnum = %s\n",
                       plongest (gdbarch->ps_regnum));
   fprintf_unfiltered (file,
@@ -1288,6 +1340,9 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: ravenscar_ops = %s\n",
                       host_address_to_string (gdbarch->ravenscar_ops));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: read_core_file_mappings = <%s>\n",
+                      host_address_to_string (gdbarch->read_core_file_mappings));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_read_pc_p() = %d\n",
                       gdbarch_read_pc_p (gdbarch));
   fprintf_unfiltered (file,
@@ -1327,6 +1382,12 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: remote_register_number = <%s>\n",
                       host_address_to_string (gdbarch->remote_register_number));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_report_signal_info_p() = %d\n",
+                      gdbarch_report_signal_info_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: report_signal_info = <%s>\n",
+                      host_address_to_string (gdbarch->report_signal_info));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: return_in_first_hidden_param_p = <%s>\n",
                       host_address_to_string (gdbarch->return_in_first_hidden_param_p));
   fprintf_unfiltered (file,
@@ -1339,6 +1400,9 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: sdb_reg_to_regnum = <%s>\n",
                       host_address_to_string (gdbarch->sdb_reg_to_regnum));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: set_memtags = <%s>\n",
+                      host_address_to_string (gdbarch->set_memtags));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: short_bit = %s\n",
                       plongest (gdbarch->short_bit));
   fprintf_unfiltered (file,
@@ -1441,18 +1505,15 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: stap_register_suffixes = %s\n",
                       pstring_list (gdbarch->stap_register_suffixes));
   fprintf_unfiltered (file,
-                      "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n",
-                      gdbarch_static_transform_name_p (gdbarch));
-  fprintf_unfiltered (file,
-                      "gdbarch_dump: static_transform_name = <%s>\n",
-                      host_address_to_string (gdbarch->static_transform_name));
-  fprintf_unfiltered (file,
                       "gdbarch_dump: sw_breakpoint_from_kind = <%s>\n",
                       host_address_to_string (gdbarch->sw_breakpoint_from_kind));
   fprintf_unfiltered (file,
                       "gdbarch_dump: syscalls_info = %s\n",
                       host_address_to_string (gdbarch->syscalls_info));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: tagged_address_p = <%s>\n",
+                      host_address_to_string (gdbarch->tagged_address_p));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: target_desc = %s\n",
                       host_address_to_string (gdbarch->target_desc));
   fprintf_unfiltered (file,
@@ -1627,6 +1688,39 @@ set_gdbarch_long_long_bit (struct gdbarc
 }
 
 int
+gdbarch_bfloat16_bit (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of bfloat16_bit, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_bfloat16_bit called\n");
+  return gdbarch->bfloat16_bit;
+}
+
+void
+set_gdbarch_bfloat16_bit (struct gdbarch *gdbarch,
+                          int bfloat16_bit)
+{
+  gdbarch->bfloat16_bit = bfloat16_bit;
+}
+
+const struct floatformat **
+gdbarch_bfloat16_format (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_bfloat16_format called\n");
+  return gdbarch->bfloat16_format;
+}
+
+void
+set_gdbarch_bfloat16_format (struct gdbarch *gdbarch,
+                             const struct floatformat ** bfloat16_format)
+{
+  gdbarch->bfloat16_format = bfloat16_format;
+}
+
+int
 gdbarch_half_bit (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -1881,7 +1975,7 @@ set_gdbarch_char_signed (struct gdbarch
   gdbarch->char_signed = char_signed;
 }
 
-int
+bool
 gdbarch_read_pc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -1905,7 +1999,7 @@ set_gdbarch_read_pc (struct gdbarch *gdb
   gdbarch->read_pc = read_pc;
 }
 
-int
+bool
 gdbarch_write_pc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -1946,7 +2040,7 @@ set_gdbarch_virtual_frame_pointer (struc
   gdbarch->virtual_frame_pointer = virtual_frame_pointer;
 }
 
-int
+bool
 gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -1970,7 +2064,7 @@ set_gdbarch_pseudo_register_read (struct
   gdbarch->pseudo_register_read = pseudo_register_read;
 }
 
-int
+bool
 gdbarch_pseudo_register_read_value_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -1994,7 +2088,7 @@ set_gdbarch_pseudo_register_read_value (
   gdbarch->pseudo_register_read_value = pseudo_register_read_value;
 }
 
-int
+bool
 gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2053,7 +2147,7 @@ set_gdbarch_num_pseudo_regs (struct gdba
   gdbarch->num_pseudo_regs = num_pseudo_regs;
 }
 
-int
+bool
 gdbarch_ax_pseudo_register_collect_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2077,7 +2171,7 @@ set_gdbarch_ax_pseudo_register_collect (
   gdbarch->ax_pseudo_register_collect = ax_pseudo_register_collect;
 }
 
-int
+bool
 gdbarch_ax_pseudo_register_push_stack_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2101,28 +2195,28 @@ set_gdbarch_ax_pseudo_register_push_stac
   gdbarch->ax_pseudo_register_push_stack = ax_pseudo_register_push_stack;
 }
 
-int
-gdbarch_handle_segmentation_fault_p (struct gdbarch *gdbarch)
+bool
+gdbarch_report_signal_info_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->handle_segmentation_fault != NULL;
+  return gdbarch->report_signal_info != NULL;
 }
 
 void
-gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, struct ui_out *uiout)
+gdbarch_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal)
 {
   gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->handle_segmentation_fault != NULL);
+  gdb_assert (gdbarch->report_signal_info != NULL);
   if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_handle_segmentation_fault called\n");
-  gdbarch->handle_segmentation_fault (gdbarch, uiout);
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_report_signal_info called\n");
+  gdbarch->report_signal_info (gdbarch, uiout, siggnal);
 }
 
 void
-set_gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch,
-                                       gdbarch_handle_segmentation_fault_ftype handle_segmentation_fault)
+set_gdbarch_report_signal_info (struct gdbarch *gdbarch,
+                                gdbarch_report_signal_info_ftype report_signal_info)
 {
-  gdbarch->handle_segmentation_fault = handle_segmentation_fault;
+  gdbarch->report_signal_info = report_signal_info;
 }
 
 int
@@ -2278,7 +2372,7 @@ set_gdbarch_register_name (struct gdbarc
   gdbarch->register_name = register_name;
 }
 
-int
+bool
 gdbarch_register_type_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2336,7 +2430,7 @@ set_gdbarch_deprecated_fp_regnum (struct
   gdbarch->deprecated_fp_regnum = deprecated_fp_regnum;
 }
 
-int
+bool
 gdbarch_push_dummy_call_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2377,7 +2471,7 @@ set_gdbarch_call_dummy_location (struct
   gdbarch->call_dummy_location = call_dummy_location;
 }
 
-int
+bool
 gdbarch_push_dummy_code_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2452,7 +2546,7 @@ set_gdbarch_print_float_info (struct gdb
   gdbarch->print_float_info = print_float_info;
 }
 
-int
+bool
 gdbarch_print_vector_info_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2527,7 +2621,7 @@ set_gdbarch_cannot_store_register (struc
   gdbarch->cannot_store_register = cannot_store_register;
 }
 
-int
+bool
 gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2669,7 +2763,7 @@ set_gdbarch_address_to_pointer (struct g
   gdbarch->address_to_pointer = address_to_pointer;
 }
 
-int
+bool
 gdbarch_integer_to_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2693,7 +2787,7 @@ set_gdbarch_integer_to_address (struct g
   gdbarch->integer_to_address = integer_to_address;
 }
 
-int
+bool
 gdbarch_return_value_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2751,7 +2845,7 @@ set_gdbarch_skip_prologue (struct gdbarc
   gdbarch->skip_prologue = skip_prologue;
 }
 
-int
+bool
 gdbarch_skip_main_prologue_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2775,7 +2869,7 @@ set_gdbarch_skip_main_prologue (struct g
   gdbarch->skip_main_prologue = skip_main_prologue;
 }
 
-int
+bool
 gdbarch_skip_entrypoint_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2884,7 +2978,7 @@ set_gdbarch_breakpoint_kind_from_current
   gdbarch->breakpoint_kind_from_current_state = breakpoint_kind_from_current_state;
 }
 
-int
+bool
 gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2993,7 +3087,7 @@ set_gdbarch_remote_register_number (stru
   gdbarch->remote_register_number = remote_register_number;
 }
 
-int
+bool
 gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3017,7 +3111,7 @@ set_gdbarch_fetch_tls_load_module_addres
   gdbarch->fetch_tls_load_module_address = fetch_tls_load_module_address;
 }
 
-int
+bool
 gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3092,7 +3186,7 @@ set_gdbarch_unwind_sp (struct gdbarch *g
   gdbarch->unwind_sp = unwind_sp;
 }
 
-int
+bool
 gdbarch_frame_num_args_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3116,7 +3210,7 @@ set_gdbarch_frame_num_args (struct gdbar
   gdbarch->frame_num_args = frame_num_args;
 }
 
-int
+bool
 gdbarch_frame_align_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3224,7 +3318,109 @@ set_gdbarch_significant_addr_bit (struct
   gdbarch->significant_addr_bit = significant_addr_bit;
 }
 
-int
+std::string
+gdbarch_memtag_to_string (struct gdbarch *gdbarch, struct value *tag)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->memtag_to_string != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_memtag_to_string called\n");
+  return gdbarch->memtag_to_string (gdbarch, tag);
+}
+
+void
+set_gdbarch_memtag_to_string (struct gdbarch *gdbarch,
+                              gdbarch_memtag_to_string_ftype memtag_to_string)
+{
+  gdbarch->memtag_to_string = memtag_to_string;
+}
+
+bool
+gdbarch_tagged_address_p (struct gdbarch *gdbarch, struct value *address)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->tagged_address_p != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_tagged_address_p called\n");
+  return gdbarch->tagged_address_p (gdbarch, address);
+}
+
+void
+set_gdbarch_tagged_address_p (struct gdbarch *gdbarch,
+                              gdbarch_tagged_address_p_ftype tagged_address_p)
+{
+  gdbarch->tagged_address_p = tagged_address_p;
+}
+
+bool
+gdbarch_memtag_matches_p (struct gdbarch *gdbarch, struct value *address)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->memtag_matches_p != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_memtag_matches_p called\n");
+  return gdbarch->memtag_matches_p (gdbarch, address);
+}
+
+void
+set_gdbarch_memtag_matches_p (struct gdbarch *gdbarch,
+                              gdbarch_memtag_matches_p_ftype memtag_matches_p)
+{
+  gdbarch->memtag_matches_p = memtag_matches_p;
+}
+
+bool
+gdbarch_set_memtags (struct gdbarch *gdbarch, struct value *address, size_t length, const gdb::byte_vector &tags, memtag_type tag_type)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->set_memtags != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_set_memtags called\n");
+  return gdbarch->set_memtags (gdbarch, address, length, tags, tag_type);
+}
+
+void
+set_gdbarch_set_memtags (struct gdbarch *gdbarch,
+                         gdbarch_set_memtags_ftype set_memtags)
+{
+  gdbarch->set_memtags = set_memtags;
+}
+
+struct value *
+gdbarch_get_memtag (struct gdbarch *gdbarch, struct value *address, memtag_type tag_type)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->get_memtag != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_get_memtag called\n");
+  return gdbarch->get_memtag (gdbarch, address, tag_type);
+}
+
+void
+set_gdbarch_get_memtag (struct gdbarch *gdbarch,
+                        gdbarch_get_memtag_ftype get_memtag)
+{
+  gdbarch->get_memtag = get_memtag;
+}
+
+CORE_ADDR
+gdbarch_memtag_granule_size (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of memtag_granule_size, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_memtag_granule_size called\n");
+  return gdbarch->memtag_granule_size;
+}
+
+void
+set_gdbarch_memtag_granule_size (struct gdbarch *gdbarch,
+                                 CORE_ADDR memtag_granule_size)
+{
+  gdbarch->memtag_granule_size = memtag_granule_size;
+}
+
+bool
 gdbarch_software_single_step_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3248,7 +3444,7 @@ set_gdbarch_software_single_step (struct
   gdbarch->software_single_step = software_single_step;
 }
 
-int
+bool
 gdbarch_single_step_through_delay_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3374,7 +3570,7 @@ set_gdbarch_stack_frame_destroyed_p (str
   gdbarch->stack_frame_destroyed_p = stack_frame_destroyed_p;
 }
 
-int
+bool
 gdbarch_elf_make_msymbol_special_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3500,14 +3696,14 @@ set_gdbarch_have_nonsteppable_watchpoint
   gdbarch->have_nonsteppable_watchpoint = have_nonsteppable_watchpoint;
 }
 
-int
+bool
 gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   return gdbarch->address_class_type_flags != NULL;
 }
 
-int
+type_instance_flags
 gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class)
 {
   gdb_assert (gdbarch != NULL);
@@ -3524,7 +3720,7 @@ set_gdbarch_address_class_type_flags (st
   gdbarch->address_class_type_flags = address_class_type_flags;
 }
 
-int
+bool
 gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3532,7 +3728,7 @@ gdbarch_address_class_type_flags_to_name
 }
 
 const char *
-gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
+gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_instance_flags type_flags)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->address_class_type_flags_to_name != NULL);
@@ -3565,15 +3761,15 @@ set_gdbarch_execute_dwarf_cfa_vendor_op
   gdbarch->execute_dwarf_cfa_vendor_op = execute_dwarf_cfa_vendor_op;
 }
 
-int
+bool
 gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   return gdbarch->address_class_name_to_type_flags != NULL;
 }
 
-int
-gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr)
+bool
+gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->address_class_name_to_type_flags != NULL);
@@ -3606,7 +3802,7 @@ set_gdbarch_register_reggroup_p (struct
   gdbarch->register_reggroup_p = register_reggroup_p;
 }
 
-int
+bool
 gdbarch_fetch_pointer_argument_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3630,7 +3826,7 @@ set_gdbarch_fetch_pointer_argument (stru
   gdbarch->fetch_pointer_argument = fetch_pointer_argument;
 }
 
-int
+bool
 gdbarch_iterate_over_regset_sections_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3654,14 +3850,14 @@ set_gdbarch_iterate_over_regset_sections
   gdbarch->iterate_over_regset_sections = iterate_over_regset_sections;
 }
 
-int
+bool
 gdbarch_make_corefile_notes_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   return gdbarch->make_corefile_notes != NULL;
 }
 
-char *
+gdb::unique_xmalloc_ptr<char>
 gdbarch_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
 {
   gdb_assert (gdbarch != NULL);
@@ -3678,7 +3874,7 @@ set_gdbarch_make_corefile_notes (struct
   gdbarch->make_corefile_notes = make_corefile_notes;
 }
 
-int
+bool
 gdbarch_find_memory_regions_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3702,7 +3898,7 @@ set_gdbarch_find_memory_regions (struct
   gdbarch->find_memory_regions = find_memory_regions;
 }
 
-int
+bool
 gdbarch_core_xfer_shared_libraries_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3726,7 +3922,7 @@ set_gdbarch_core_xfer_shared_libraries (
   gdbarch->core_xfer_shared_libraries = core_xfer_shared_libraries;
 }
 
-int
+bool
 gdbarch_core_xfer_shared_libraries_aix_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3750,7 +3946,7 @@ set_gdbarch_core_xfer_shared_libraries_a
   gdbarch->core_xfer_shared_libraries_aix = core_xfer_shared_libraries_aix;
 }
 
-int
+bool
 gdbarch_core_pid_to_str_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3774,7 +3970,7 @@ set_gdbarch_core_pid_to_str (struct gdba
   gdbarch->core_pid_to_str = core_pid_to_str;
 }
 
-int
+bool
 gdbarch_core_thread_name_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3798,7 +3994,7 @@ set_gdbarch_core_thread_name (struct gdb
   gdbarch->core_thread_name = core_thread_name;
 }
 
-int
+bool
 gdbarch_core_xfer_siginfo_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3822,7 +4018,7 @@ set_gdbarch_core_xfer_siginfo (struct gd
   gdbarch->core_xfer_siginfo = core_xfer_siginfo;
 }
 
-int
+bool
 gdbarch_gcore_bfd_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3898,7 +4094,7 @@ set_gdbarch_skip_permanent_breakpoint (s
   gdbarch->skip_permanent_breakpoint = skip_permanent_breakpoint;
 }
 
-int
+bool
 gdbarch_max_insn_length_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3923,14 +4119,14 @@ set_gdbarch_max_insn_length (struct gdba
   gdbarch->max_insn_length = max_insn_length;
 }
 
-int
+bool
 gdbarch_displaced_step_copy_insn_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   return gdbarch->displaced_step_copy_insn != NULL;
 }
 
-struct displaced_step_closure *
+displaced_step_copy_insn_closure_up
 gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
 {
   gdb_assert (gdbarch != NULL);
@@ -3947,14 +4143,14 @@ set_gdbarch_displaced_step_copy_insn (st
   gdbarch->displaced_step_copy_insn = displaced_step_copy_insn;
 }
 
-int
-gdbarch_displaced_step_hw_singlestep (struct gdbarch *gdbarch, struct displaced_step_closure *closure)
+bool
+gdbarch_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->displaced_step_hw_singlestep != NULL);
   if (gdbarch_debug >= 2)
     fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_hw_singlestep called\n");
-  return gdbarch->displaced_step_hw_singlestep (gdbarch, closure);
+  return gdbarch->displaced_step_hw_singlestep (gdbarch);
 }
 
 void
@@ -3964,7 +4160,7 @@ set_gdbarch_displaced_step_hw_singlestep
   gdbarch->displaced_step_hw_singlestep = displaced_step_hw_singlestep;
 }
 
-int
+bool
 gdbarch_displaced_step_fixup_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3972,7 +4168,7 @@ gdbarch_displaced_step_fixup_p (struct g
 }
 
 void
-gdbarch_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
+gdbarch_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_copy_insn_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->displaced_step_fixup != NULL);
@@ -3989,24 +4185,89 @@ set_gdbarch_displaced_step_fixup (struct
   gdbarch->displaced_step_fixup = displaced_step_fixup;
 }
 
-CORE_ADDR
-gdbarch_displaced_step_location (struct gdbarch *gdbarch)
+bool
+gdbarch_displaced_step_prepare_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->displaced_step_prepare != NULL;
+}
+
+displaced_step_prepare_status
+gdbarch_displaced_step_prepare (struct gdbarch *gdbarch, thread_info *thread, CORE_ADDR &displaced_pc)
 {
   gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->displaced_step_location != NULL);
+  gdb_assert (gdbarch->displaced_step_prepare != NULL);
   if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_location called\n");
-  return gdbarch->displaced_step_location (gdbarch);
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_prepare called\n");
+  return gdbarch->displaced_step_prepare (gdbarch, thread, displaced_pc);
 }
 
 void
-set_gdbarch_displaced_step_location (struct gdbarch *gdbarch,
-                                     gdbarch_displaced_step_location_ftype displaced_step_location)
+set_gdbarch_displaced_step_prepare (struct gdbarch *gdbarch,
+                                    gdbarch_displaced_step_prepare_ftype displaced_step_prepare)
 {
-  gdbarch->displaced_step_location = displaced_step_location;
+  gdbarch->displaced_step_prepare = displaced_step_prepare;
 }
 
-int
+displaced_step_finish_status
+gdbarch_displaced_step_finish (struct gdbarch *gdbarch, thread_info *thread, gdb_signal sig)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->displaced_step_finish != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_finish called\n");
+  return gdbarch->displaced_step_finish (gdbarch, thread, sig);
+}
+
+void
+set_gdbarch_displaced_step_finish (struct gdbarch *gdbarch,
+                                   gdbarch_displaced_step_finish_ftype displaced_step_finish)
+{
+  gdbarch->displaced_step_finish = displaced_step_finish;
+}
+
+bool
+gdbarch_displaced_step_copy_insn_closure_by_addr_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->displaced_step_copy_insn_closure_by_addr != NULL;
+}
+
+const displaced_step_copy_insn_closure *
+gdbarch_displaced_step_copy_insn_closure_by_addr (struct gdbarch *gdbarch, inferior *inf, CORE_ADDR addr)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->displaced_step_copy_insn_closure_by_addr != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_copy_insn_closure_by_addr called\n");
+  return gdbarch->displaced_step_copy_insn_closure_by_addr (inf, addr);
+}
+
+void
+set_gdbarch_displaced_step_copy_insn_closure_by_addr (struct gdbarch *gdbarch,
+                                                      gdbarch_displaced_step_copy_insn_closure_by_addr_ftype displaced_step_copy_insn_closure_by_addr)
+{
+  gdbarch->displaced_step_copy_insn_closure_by_addr = displaced_step_copy_insn_closure_by_addr;
+}
+
+void
+gdbarch_displaced_step_restore_all_in_ptid (struct gdbarch *gdbarch, inferior *parent_inf, ptid_t child_ptid)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->displaced_step_restore_all_in_ptid != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_displaced_step_restore_all_in_ptid called\n");
+  gdbarch->displaced_step_restore_all_in_ptid (parent_inf, child_ptid);
+}
+
+void
+set_gdbarch_displaced_step_restore_all_in_ptid (struct gdbarch *gdbarch,
+                                                gdbarch_displaced_step_restore_all_in_ptid_ftype displaced_step_restore_all_in_ptid)
+{
+  gdbarch->displaced_step_restore_all_in_ptid = displaced_step_restore_all_in_ptid;
+}
+
+bool
 gdbarch_relocate_instruction_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4031,7 +4292,7 @@ set_gdbarch_relocate_instruction (struct
   gdbarch->relocate_instruction = relocate_instruction;
 }
 
-int
+bool
 gdbarch_overlay_update_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4055,7 +4316,7 @@ set_gdbarch_overlay_update (struct gdbar
   gdbarch->overlay_update = overlay_update;
 }
 
-int
+bool
 gdbarch_core_read_description_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4080,30 +4341,6 @@ set_gdbarch_core_read_description (struc
 }
 
 int
-gdbarch_static_transform_name_p (struct gdbarch *gdbarch)
-{
-  gdb_assert (gdbarch != NULL);
-  return gdbarch->static_transform_name != NULL;
-}
-
-const char *
-gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name)
-{
-  gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->static_transform_name != NULL);
-  if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_static_transform_name called\n");
-  return gdbarch->static_transform_name (name);
-}
-
-void
-set_gdbarch_static_transform_name (struct gdbarch *gdbarch,
-                                   gdbarch_static_transform_name_ftype static_transform_name)
-{
-  gdbarch->static_transform_name = static_transform_name;
-}
-
-int
 gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4120,7 +4357,7 @@ set_gdbarch_sofun_address_maybe_missing
   gdbarch->sofun_address_maybe_missing = sofun_address_maybe_missing;
 }
 
-int
+bool
 gdbarch_process_record_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4144,7 +4381,7 @@ set_gdbarch_process_record (struct gdbar
   gdbarch->process_record = process_record;
 }
 
-int
+bool
 gdbarch_process_record_signal_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4168,7 +4405,7 @@ set_gdbarch_process_record_signal (struc
   gdbarch->process_record_signal = process_record_signal;
 }
 
-int
+bool
 gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4192,7 +4429,7 @@ set_gdbarch_gdb_signal_from_target (stru
   gdbarch->gdb_signal_from_target = gdb_signal_from_target;
 }
 
-int
+bool
 gdbarch_gdb_signal_to_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4216,7 +4453,7 @@ set_gdbarch_gdb_signal_to_target (struct
   gdbarch->gdb_signal_to_target = gdb_signal_to_target;
 }
 
-int
+bool
 gdbarch_get_siginfo_type_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4240,7 +4477,7 @@ set_gdbarch_get_siginfo_type (struct gdb
   gdbarch->get_siginfo_type = get_siginfo_type;
 }
 
-int
+bool
 gdbarch_record_special_symbol_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4264,7 +4501,7 @@ set_gdbarch_record_special_symbol (struc
   gdbarch->record_special_symbol = record_special_symbol;
 }
 
-int
+bool
 gdbarch_get_syscall_number_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4458,7 +4695,7 @@ set_gdbarch_stap_gdb_register_suffix (st
   gdbarch->stap_gdb_register_suffix = stap_gdb_register_suffix;
 }
 
-int
+bool
 gdbarch_stap_is_single_operand_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4482,14 +4719,14 @@ set_gdbarch_stap_is_single_operand (stru
   gdbarch->stap_is_single_operand = stap_is_single_operand;
 }
 
-int
+bool
 gdbarch_stap_parse_special_token_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   return gdbarch->stap_parse_special_token != NULL;
 }
 
-int
+expr::operation_up
 gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_info *p)
 {
   gdb_assert (gdbarch != NULL);
@@ -4506,7 +4743,7 @@ set_gdbarch_stap_parse_special_token (st
   gdbarch->stap_parse_special_token = stap_parse_special_token;
 }
 
-int
+bool
 gdbarch_stap_adjust_register_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4530,21 +4767,21 @@ set_gdbarch_stap_adjust_register (struct
   gdbarch->stap_adjust_register = stap_adjust_register;
 }
 
-int
+bool
 gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
   return gdbarch->dtrace_parse_probe_argument != NULL;
 }
 
-void
-gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct expr_builder *builder, int narg)
+expr::operation_up
+gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, int narg)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->dtrace_parse_probe_argument != NULL);
   if (gdbarch_debug >= 2)
     fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_parse_probe_argument called\n");
-  gdbarch->dtrace_parse_probe_argument (gdbarch, builder, narg);
+  return gdbarch->dtrace_parse_probe_argument (gdbarch, narg);
 }
 
 void
@@ -4554,7 +4791,7 @@ set_gdbarch_dtrace_parse_probe_argument
   gdbarch->dtrace_parse_probe_argument = dtrace_parse_probe_argument;
 }
 
-int
+bool
 gdbarch_dtrace_probe_is_enabled_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4578,7 +4815,7 @@ set_gdbarch_dtrace_probe_is_enabled (str
   gdbarch->dtrace_probe_is_enabled = dtrace_probe_is_enabled;
 }
 
-int
+bool
 gdbarch_dtrace_enable_probe_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4602,7 +4839,7 @@ set_gdbarch_dtrace_enable_probe (struct
   gdbarch->dtrace_enable_probe = dtrace_enable_probe;
 }
 
-int
+bool
 gdbarch_dtrace_disable_probe_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4795,7 +5032,7 @@ set_gdbarch_gen_return_address (struct g
   gdbarch->gen_return_address = gen_return_address;
 }
 
-int
+bool
 gdbarch_info_proc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4819,7 +5056,7 @@ set_gdbarch_info_proc (struct gdbarch *g
   gdbarch->info_proc = info_proc;
 }
 
-int
+bool
 gdbarch_core_info_proc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -4928,7 +5165,24 @@ set_gdbarch_insn_is_jump (struct gdbarch
   gdbarch->insn_is_jump = insn_is_jump;
 }
 
-int
+bool
+gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->program_breakpoint_here_p != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_program_breakpoint_here_p called\n");
+  return gdbarch->program_breakpoint_here_p (gdbarch, address);
+}
+
+void
+set_gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch,
+                                       gdbarch_program_breakpoint_here_p_ftype program_breakpoint_here_p)
+{
+  gdbarch->program_breakpoint_here_p = program_breakpoint_here_p;
+}
+
+bool
 gdbarch_auxv_parse_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -5156,6 +5410,23 @@ set_gdbarch_get_pc_address_flags (struct
   gdbarch->get_pc_address_flags = get_pc_address_flags;
 }
 
+void
+gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> loop_cb)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->read_core_file_mappings != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_read_core_file_mappings called\n");
+  gdbarch->read_core_file_mappings (gdbarch, cbfd, pre_loop_cb, loop_cb);
+}
+
+void
+set_gdbarch_read_core_file_mappings (struct gdbarch *gdbarch,
+                                     gdbarch_read_core_file_mappings_ftype read_core_file_mappings)
+{
+  gdbarch->read_core_file_mappings = read_core_file_mappings;
+}
+
 
 /* Keep a registry of per-architecture data-pointers required by GDB
    modules.  */
@@ -5180,7 +5451,7 @@ struct gdbarch_data_registry
   struct gdbarch_data_registration *registrations;
 };
 
-struct gdbarch_data_registry gdbarch_data_registry =
+static struct gdbarch_data_registry gdbarch_data_registry =
 {
   0, NULL,
 };
@@ -5227,20 +5498,6 @@ alloc_gdbarch_data (struct gdbarch *gdba
   gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
 }
 
-/* Initialize the current value of the specified per-architecture
-   data-pointer.  */
-
-void
-deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-			     struct gdbarch_data *data,
-			     void *pointer)
-{
-  gdb_assert (data->index < gdbarch->nr_data);
-  gdb_assert (gdbarch->data[data->index] == NULL);
-  gdb_assert (data->pre_init == NULL);
-  gdbarch->data[data->index] = pointer;
-}
-
 /* Return the current value of the specified per-architecture
    data-pointer.  */
 
@@ -5270,11 +5527,9 @@ gdbarch_data (struct gdbarch *gdbarch, s
 	  data->init_p = 1;
 	}
       else
-	/* The architecture initialization hasn't completed - punt -
-	 hope that the caller knows what they are doing.  Once
-	 deprecated_set_gdbarch_data has been initialized, this can be
-	 changed to an internal error.  */
-	return NULL;
+	internal_error (__FILE__, __LINE__,
+			_("gdbarch post-init data field can only be used "
+			  "after gdbarch is fully initialised"));
       gdb_assert (gdbarch->data[data->index] != NULL);
     }
   return gdbarch->data[data->index];
@@ -5318,13 +5573,13 @@ gdbarch_printable_names (void)
       const struct bfd_arch_info *ap;
       ap = bfd_lookup_arch (rego->bfd_architecture, 0);
       if (ap == NULL)
-        internal_error (__FILE__, __LINE__,
-                        _("gdbarch_architecture_names: multi-arch unknown"));
+	internal_error (__FILE__, __LINE__,
+			_("gdbarch_architecture_names: multi-arch unknown"));
       do
-        {
-          append_name (&arches, &nr_arches, ap->printable_name);
-          ap = ap->next;
-        }
+	{
+	  append_name (&arches, &nr_arches, ap->printable_name);
+	  ap = ap->next;
+	}
       while (ap != NULL);
     }
   append_name (&arches, &nr_arches, NULL);
@@ -5334,7 +5589,7 @@ gdbarch_printable_names (void)
 
 void
 gdbarch_register (enum bfd_architecture bfd_architecture,
-                  gdbarch_init_ftype *init,
+		  gdbarch_init_ftype *init,
 		  gdbarch_dump_tdep_ftype *dump_tdep)
 {
   struct gdbarch_registration **curr;
@@ -5345,9 +5600,9 @@ gdbarch_register (enum bfd_architecture
   if (bfd_arch_info == NULL)
     {
       internal_error (__FILE__, __LINE__,
-                      _("gdbarch: Attempt to register "
+		      _("gdbarch: Attempt to register "
 			"unknown architecture (%d)"),
-                      bfd_architecture);
+		      bfd_architecture);
     }
   /* Check that we haven't seen this architecture before.  */
   for (curr = &gdbarch_registry;
@@ -5356,9 +5611,9 @@ gdbarch_register (enum bfd_architecture
     {
       if (bfd_architecture == (*curr)->bfd_architecture)
 	internal_error (__FILE__, __LINE__,
-                        _("gdbarch: Duplicate registration "
+			_("gdbarch: Duplicate registration "
 			  "of architecture (%s)"),
-	                bfd_arch_info->printable_name);
+			bfd_arch_info->printable_name);
     }
   /* log it */
   if (gdbarch_debug)
@@ -5386,7 +5641,7 @@ register_gdbarch_init (enum bfd_architec
 
 struct gdbarch_list *
 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
-                             const struct gdbarch_info *info)
+			     const struct gdbarch_info *info)
 {
   for (; arches != NULL; arches = arches->next)
     {
@@ -5440,9 +5695,6 @@ gdbarch_find_by_info (struct gdbarch_inf
       fprintf_unfiltered (gdb_stdlog,
 			  "gdbarch_find_by_info: info.abfd %s\n",
 			  host_address_to_string (info.abfd));
-      fprintf_unfiltered (gdb_stdlog,
-			  "gdbarch_find_by_info: info.tdep_info %s\n",
-			  host_address_to_string (info.tdep_info));
     }
 
   /* Find the tdep code that knows about this architecture.  */
@@ -5548,14 +5800,15 @@ target_gdbarch (void)
   return current_inferior ()->gdbarch;
 }
 
+void _initialize_gdbarch ();
 void
-_initialize_gdbarch (void)
+_initialize_gdbarch ()
 {
   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);
+			    NULL,
+			    show_gdbarch_debug,
+			    &setdebuglist, &showdebuglist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch.h ./gdb/gdbarch.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbarch.h	2021-12-16 01:57:39.000000000 +0000
@@ -3,7 +3,7 @@
 
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,17 +20,7 @@
    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 was created with the aid of ``gdbarch.sh''.
-
-   The Bourne shell script ``gdbarch.sh'' creates the files
-   ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them
-   against the existing ``gdbarch.[hc]''.  Any differences found
-   being reported.
-
-   If editing this file, please also run gdbarch.sh and merge any
-   changes into that script. Conversely, when making sweeping changes
-   to this file, modifying gdbarch.sh and using its output may prove
-   easier.  */
+/* This file was created with the aid of ``gdbarch.sh''.  */
 
 #ifndef GDBARCH_H
 #define GDBARCH_H
@@ -39,6 +29,9 @@
 #include "frame.h"
 #include "dis-asm.h"
 #include "gdb_obstack.h"
+#include "infrun.h"
+#include "osabi.h"
+#include "displaced-stepping.h"
 
 struct floatformat;
 struct ui_file;
@@ -55,7 +48,6 @@ struct obstack;
 struct bp_target_info;
 struct target_desc;
 struct symbol;
-struct displaced_step_closure;
 struct syscall;
 struct agent_expr;
 struct axs_value;
@@ -66,6 +58,7 @@ struct mem_range;
 struct syscalls_info;
 struct thread_info;
 struct ui_out;
+struct inferior;
 
 #include "regcache.h"
 
@@ -124,6 +117,18 @@ enum function_call_return_method
   return_method_struct,
 };
 
+enum class memtag_type
+{
+  /* Logical tag, the tag that is stored in unused bits of a pointer to a
+     virtual address.  */
+  logical = 0,
+
+  /* Allocation tag, the tag that is associated with every granule of memory in
+     the physical address space.  Allocation tags are used to validate memory
+     accesses via pointers containing logical tags.  */
+  allocation,
+};
+
 
 
 /* The following are pre-initialized by GDBARCH.  */
@@ -167,12 +172,18 @@ extern void set_gdbarch_long_bit (struct
 extern int gdbarch_long_long_bit (struct gdbarch *gdbarch);
 extern void set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int long_long_bit);
 
-/* The ABI default bit-size and format for "half", "float", "double", and
+/* The ABI default bit-size and format for "bfloat16", "half", "float", "double", and
    "long double".  These bit/format pairs should eventually be combined
    into a single object.  For the moment, just initialize them as a pair.
    Each format describes both the big and little endian layouts (if
    useful). */
 
+extern int gdbarch_bfloat16_bit (struct gdbarch *gdbarch);
+extern void set_gdbarch_bfloat16_bit (struct gdbarch *gdbarch, int bfloat16_bit);
+
+extern const struct floatformat ** gdbarch_bfloat16_format (struct gdbarch *gdbarch);
+extern void set_gdbarch_bfloat16_format (struct gdbarch *gdbarch, const struct floatformat ** bfloat16_format);
+
 extern int gdbarch_half_bit (struct gdbarch *gdbarch);
 extern void set_gdbarch_half_bit (struct gdbarch *gdbarch, int half_bit);
 
@@ -257,13 +268,13 @@ extern void set_gdbarch_dwarf2_addr_size
 extern int gdbarch_char_signed (struct gdbarch *gdbarch);
 extern void set_gdbarch_char_signed (struct gdbarch *gdbarch, int char_signed);
 
-extern int gdbarch_read_pc_p (struct gdbarch *gdbarch);
+extern bool gdbarch_read_pc_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_read_pc_ftype) (readable_regcache *regcache);
 extern CORE_ADDR gdbarch_read_pc (struct gdbarch *gdbarch, readable_regcache *regcache);
 extern void set_gdbarch_read_pc (struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc);
 
-extern int gdbarch_write_pc_p (struct gdbarch *gdbarch);
+extern bool gdbarch_write_pc_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_write_pc_ftype) (struct regcache *regcache, CORE_ADDR val);
 extern void gdbarch_write_pc (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR val);
@@ -277,7 +288,7 @@ typedef void (gdbarch_virtual_frame_poin
 extern void gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
 extern void set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer);
 
-extern int gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch);
+extern bool gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch);
 
 typedef enum register_status (gdbarch_pseudo_register_read_ftype) (struct gdbarch *gdbarch, readable_regcache *regcache, int cookednum, gdb_byte *buf);
 extern enum register_status gdbarch_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache, int cookednum, gdb_byte *buf);
@@ -288,13 +299,13 @@ extern void set_gdbarch_pseudo_register_
    as appropriate.  If this is defined, then pseudo_register_read will
    never be called. */
 
-extern int gdbarch_pseudo_register_read_value_p (struct gdbarch *gdbarch);
+extern bool gdbarch_pseudo_register_read_value_p (struct gdbarch *gdbarch);
 
 typedef struct value * (gdbarch_pseudo_register_read_value_ftype) (struct gdbarch *gdbarch, readable_regcache *regcache, int cookednum);
 extern struct value * gdbarch_pseudo_register_read_value (struct gdbarch *gdbarch, readable_regcache *regcache, int cookednum);
 extern void set_gdbarch_pseudo_register_read_value (struct gdbarch *gdbarch, gdbarch_pseudo_register_read_value_ftype *pseudo_register_read_value);
 
-extern int gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch);
+extern bool gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_pseudo_register_write_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const gdb_byte *buf);
 extern void gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const gdb_byte *buf);
@@ -314,7 +325,7 @@ extern void set_gdbarch_num_pseudo_regs
 /* Assemble agent expression bytecode to collect pseudo-register REG.
    Return -1 if something goes wrong, 0 otherwise. */
 
-extern int gdbarch_ax_pseudo_register_collect_p (struct gdbarch *gdbarch);
+extern bool gdbarch_ax_pseudo_register_collect_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_ax_pseudo_register_collect_ftype) (struct gdbarch *gdbarch, struct agent_expr *ax, int reg);
 extern int gdbarch_ax_pseudo_register_collect (struct gdbarch *gdbarch, struct agent_expr *ax, int reg);
@@ -324,22 +335,21 @@ extern void set_gdbarch_ax_pseudo_regist
    REG on the interpreter stack.
    Return -1 if something goes wrong, 0 otherwise. */
 
-extern int gdbarch_ax_pseudo_register_push_stack_p (struct gdbarch *gdbarch);
+extern bool gdbarch_ax_pseudo_register_push_stack_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_ax_pseudo_register_push_stack_ftype) (struct gdbarch *gdbarch, struct agent_expr *ax, int reg);
 extern int gdbarch_ax_pseudo_register_push_stack (struct gdbarch *gdbarch, struct agent_expr *ax, int reg);
 extern void set_gdbarch_ax_pseudo_register_push_stack (struct gdbarch *gdbarch, gdbarch_ax_pseudo_register_push_stack_ftype *ax_pseudo_register_push_stack);
 
-/* Some targets/architectures can do extra processing/display of
-   segmentation faults.  E.g., Intel MPX boundary faults.
-   Call the architecture dependent function to handle the fault.
+/* Some architectures can display additional information for specific
+   signals.
    UIOUT is the output stream where the handler will place information. */
 
-extern int gdbarch_handle_segmentation_fault_p (struct gdbarch *gdbarch);
+extern bool gdbarch_report_signal_info_p (struct gdbarch *gdbarch);
 
-typedef void (gdbarch_handle_segmentation_fault_ftype) (struct gdbarch *gdbarch, struct ui_out *uiout);
-extern void gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, struct ui_out *uiout);
-extern void set_gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, gdbarch_handle_segmentation_fault_ftype *handle_segmentation_fault);
+typedef void (gdbarch_report_signal_info_ftype) (struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal);
+extern void gdbarch_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal);
+extern void set_gdbarch_report_signal_info (struct gdbarch *gdbarch, gdbarch_report_signal_info_ftype *report_signal_info);
 
 /* GDB's standard (or well known) register numbers.  These can map onto
    a real register or a pseudo (computed) register or not be defined at
@@ -391,7 +401,7 @@ extern void set_gdbarch_register_name (s
    the register cache should call this function directly; others should
    use "register_type". */
 
-extern int gdbarch_register_type_p (struct gdbarch *gdbarch);
+extern bool gdbarch_register_type_p (struct gdbarch *gdbarch);
 
 typedef struct type * (gdbarch_register_type_ftype) (struct gdbarch *gdbarch, int reg_nr);
 extern struct type * gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr);
@@ -416,7 +426,7 @@ extern void set_gdbarch_dummy_id (struct
 extern int gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch);
 extern void set_gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch, int deprecated_fp_regnum);
 
-extern int gdbarch_push_dummy_call_p (struct gdbarch *gdbarch);
+extern bool gdbarch_push_dummy_call_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_push_dummy_call_ftype) (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);
 extern CORE_ADDR gdbarch_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);
@@ -425,7 +435,7 @@ extern void set_gdbarch_push_dummy_call
 extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
 extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
 
-extern int gdbarch_push_dummy_code_p (struct gdbarch *gdbarch);
+extern bool gdbarch_push_dummy_code_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_push_dummy_code_ftype) (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, struct regcache *regcache);
 extern CORE_ADDR gdbarch_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, struct regcache *regcache);
@@ -445,7 +455,7 @@ typedef void (gdbarch_print_float_info_f
 extern void gdbarch_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
 extern void set_gdbarch_print_float_info (struct gdbarch *gdbarch, gdbarch_print_float_info_ftype *print_float_info);
 
-extern int gdbarch_print_vector_info_p (struct gdbarch *gdbarch);
+extern bool gdbarch_print_vector_info_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_print_vector_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
 extern void gdbarch_print_vector_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
@@ -471,7 +481,7 @@ extern void set_gdbarch_cannot_store_reg
   
    FRAME corresponds to the longjmp frame. */
 
-extern int gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch);
+extern bool gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_get_longjmp_target_ftype) (struct frame_info *frame, CORE_ADDR *pc);
 extern int gdbarch_get_longjmp_target (struct gdbarch *gdbarch, struct frame_info *frame, CORE_ADDR *pc);
@@ -509,7 +519,7 @@ typedef void (gdbarch_address_to_pointer
 extern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr);
 extern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
 
-extern int gdbarch_integer_to_address_p (struct gdbarch *gdbarch);
+extern bool gdbarch_integer_to_address_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_integer_to_address_ftype) (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
 extern CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
@@ -526,7 +536,7 @@ extern void set_gdbarch_integer_to_addre
    to force the value returned by a function (see the "return" command
    for instance). */
 
-extern int gdbarch_return_value_p (struct gdbarch *gdbarch);
+extern bool gdbarch_return_value_p (struct gdbarch *gdbarch);
 
 typedef enum return_value_convention (gdbarch_return_value_ftype) (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
 extern enum return_value_convention gdbarch_return_value (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
@@ -546,7 +556,7 @@ typedef CORE_ADDR (gdbarch_skip_prologue
 extern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
 extern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
 
-extern int gdbarch_skip_main_prologue_p (struct gdbarch *gdbarch);
+extern bool gdbarch_skip_main_prologue_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_skip_main_prologue_ftype) (struct gdbarch *gdbarch, CORE_ADDR ip);
 extern CORE_ADDR gdbarch_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
@@ -564,7 +574,7 @@ extern void set_gdbarch_skip_main_prolog
    by GDB common code even when debugging optimized code, where skip_prologue
    is not used. */
 
-extern int gdbarch_skip_entrypoint_p (struct gdbarch *gdbarch);
+extern bool gdbarch_skip_entrypoint_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_skip_entrypoint_ftype) (struct gdbarch *gdbarch, CORE_ADDR ip);
 extern CORE_ADDR gdbarch_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR ip);
@@ -600,7 +610,7 @@ typedef int (gdbarch_breakpoint_kind_fro
 extern int gdbarch_breakpoint_kind_from_current_state (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR *pcptr);
 extern void set_gdbarch_breakpoint_kind_from_current_state (struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_current_state_ftype *breakpoint_kind_from_current_state);
 
-extern int gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch);
+extern bool gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_adjust_breakpoint_address_ftype) (struct gdbarch *gdbarch, CORE_ADDR bpaddr);
 extern CORE_ADDR gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr);
@@ -637,7 +647,7 @@ extern void set_gdbarch_remote_register_
 
 /* Fetch the target specific address used to represent a load module. */
 
-extern int gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch);
+extern bool gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_fetch_tls_load_module_address_ftype) (struct objfile *objfile);
 extern CORE_ADDR gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *objfile);
@@ -649,7 +659,7 @@ extern void set_gdbarch_fetch_tls_load_m
    been allocated yet, this function may throw an error.  LM_ADDR may
    be zero for statically linked multithreaded inferiors. */
 
-extern int gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch);
+extern bool gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_get_thread_local_address_ftype) (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset);
 extern CORE_ADDR gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset);
@@ -669,13 +679,13 @@ extern void set_gdbarch_unwind_sp (struc
 /* DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame
    frame-base.  Enable frame-base before frame-unwind. */
 
-extern int gdbarch_frame_num_args_p (struct gdbarch *gdbarch);
+extern bool gdbarch_frame_num_args_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_frame_num_args_ftype) (struct frame_info *frame);
 extern int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame);
 extern void set_gdbarch_frame_num_args (struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args);
 
-extern int gdbarch_frame_align_p (struct gdbarch *gdbarch);
+extern bool gdbarch_frame_align_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_frame_align_ftype) (struct gdbarch *gdbarch, CORE_ADDR address);
 extern CORE_ADDR gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address);
@@ -714,6 +724,49 @@ extern void set_gdbarch_addr_bits_remove
 extern int gdbarch_significant_addr_bit (struct gdbarch *gdbarch);
 extern void set_gdbarch_significant_addr_bit (struct gdbarch *gdbarch, int significant_addr_bit);
 
+/* Return a string representation of the memory tag TAG. */
+
+typedef std::string (gdbarch_memtag_to_string_ftype) (struct gdbarch *gdbarch, struct value *tag);
+extern std::string gdbarch_memtag_to_string (struct gdbarch *gdbarch, struct value *tag);
+extern void set_gdbarch_memtag_to_string (struct gdbarch *gdbarch, gdbarch_memtag_to_string_ftype *memtag_to_string);
+
+/* Return true if ADDRESS contains a tag and false otherwise.  ADDRESS
+   must be either a pointer or a reference type. */
+
+typedef bool (gdbarch_tagged_address_p_ftype) (struct gdbarch *gdbarch, struct value *address);
+extern bool gdbarch_tagged_address_p (struct gdbarch *gdbarch, struct value *address);
+extern void set_gdbarch_tagged_address_p (struct gdbarch *gdbarch, gdbarch_tagged_address_p_ftype *tagged_address_p);
+
+/* Return true if the tag from ADDRESS matches the memory tag for that
+   particular address.  Return false otherwise. */
+
+typedef bool (gdbarch_memtag_matches_p_ftype) (struct gdbarch *gdbarch, struct value *address);
+extern bool gdbarch_memtag_matches_p (struct gdbarch *gdbarch, struct value *address);
+extern void set_gdbarch_memtag_matches_p (struct gdbarch *gdbarch, gdbarch_memtag_matches_p_ftype *memtag_matches_p);
+
+/* Set the tags of type TAG_TYPE, for the memory address range
+   [ADDRESS, ADDRESS + LENGTH) to TAGS.
+   Return true if successful and false otherwise. */
+
+typedef bool (gdbarch_set_memtags_ftype) (struct gdbarch *gdbarch, struct value *address, size_t length, const gdb::byte_vector &tags, memtag_type tag_type);
+extern bool gdbarch_set_memtags (struct gdbarch *gdbarch, struct value *address, size_t length, const gdb::byte_vector &tags, memtag_type tag_type);
+extern void set_gdbarch_set_memtags (struct gdbarch *gdbarch, gdbarch_set_memtags_ftype *set_memtags);
+
+/* Return the tag of type TAG_TYPE associated with the memory address ADDRESS,
+   assuming ADDRESS is tagged. */
+
+typedef struct value * (gdbarch_get_memtag_ftype) (struct gdbarch *gdbarch, struct value *address, memtag_type tag_type);
+extern struct value * gdbarch_get_memtag (struct gdbarch *gdbarch, struct value *address, memtag_type tag_type);
+extern void set_gdbarch_get_memtag (struct gdbarch *gdbarch, gdbarch_get_memtag_ftype *get_memtag);
+
+/* memtag_granule_size is the size of the allocation tag granule, for
+   architectures that support memory tagging.
+   This is 0 for architectures that do not support memory tagging.
+   For a non-zero value, this represents the number of bytes of memory per tag. */
+
+extern CORE_ADDR gdbarch_memtag_granule_size (struct gdbarch *gdbarch);
+extern void set_gdbarch_memtag_granule_size (struct gdbarch *gdbarch, CORE_ADDR memtag_granule_size);
+
 /* FIXME/cagney/2001-01-18: This should be split in two.  A target method that
    indicates if the target needs software single step.  An ISA method to
    implement it.
@@ -730,7 +783,7 @@ extern void set_gdbarch_significant_addr
    the condition is true, so that we ensure forward progress when stepping
    past a conditional branch to self. */
 
-extern int gdbarch_software_single_step_p (struct gdbarch *gdbarch);
+extern bool gdbarch_software_single_step_p (struct gdbarch *gdbarch);
 
 typedef std::vector<CORE_ADDR> (gdbarch_software_single_step_ftype) (struct regcache *regcache);
 extern std::vector<CORE_ADDR> gdbarch_software_single_step (struct gdbarch *gdbarch, struct regcache *regcache);
@@ -739,7 +792,7 @@ extern void set_gdbarch_software_single_
 /* Return non-zero if the processor is executing a delay slot and a
    further single-step is needed before the instruction finishes. */
 
-extern int gdbarch_single_step_through_delay_p (struct gdbarch *gdbarch);
+extern bool gdbarch_single_step_through_delay_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_single_step_through_delay_ftype) (struct gdbarch *gdbarch, struct frame_info *frame);
 extern int gdbarch_single_step_through_delay (struct gdbarch *gdbarch, struct frame_info *frame);
@@ -798,7 +851,7 @@ extern void set_gdbarch_stack_frame_dest
    that they can be treated in the appropriate manner in the processing of
    the main symbol table and DWARF-2 records. */
 
-extern int gdbarch_elf_make_msymbol_special_p (struct gdbarch *gdbarch);
+extern bool gdbarch_elf_make_msymbol_special_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_elf_make_msymbol_special_ftype) (asymbol *sym, struct minimal_symbol *msym);
 extern void gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym);
@@ -856,16 +909,16 @@ extern void set_gdbarch_cannot_step_brea
 extern int gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch);
 extern void set_gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch, int have_nonsteppable_watchpoint);
 
-extern int gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch);
+extern bool gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch);
 
-typedef int (gdbarch_address_class_type_flags_ftype) (int byte_size, int dwarf2_addr_class);
-extern int gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
+typedef type_instance_flags (gdbarch_address_class_type_flags_ftype) (int byte_size, int dwarf2_addr_class);
+extern type_instance_flags gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
 extern void set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_ftype *address_class_type_flags);
 
-extern int gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
+extern bool gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
 
-typedef const char * (gdbarch_address_class_type_flags_to_name_ftype) (struct gdbarch *gdbarch, int type_flags);
-extern const char * gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags);
+typedef const char * (gdbarch_address_class_type_flags_to_name_ftype) (struct gdbarch *gdbarch, type_instance_flags type_flags);
+extern const char * gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_instance_flags type_flags);
 extern void set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name);
 
 /* Execute vendor-specific DWARF Call Frame Instruction.  OP is the instruction.
@@ -876,13 +929,13 @@ extern bool gdbarch_execute_dwarf_cfa_ve
 extern void set_gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op);
 
 /* Return the appropriate type_flags for the supplied address class.
-   This function should return 1 if the address class was recognized and
-   type_flags was set, zero otherwise. */
+   This function should return true if the address class was recognized and
+   type_flags was set, false otherwise. */
 
-extern int gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch);
+extern bool gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch);
 
-typedef int (gdbarch_address_class_name_to_type_flags_ftype) (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
-extern int gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
+typedef bool (gdbarch_address_class_name_to_type_flags_ftype) (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr);
+extern bool gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr);
 extern void set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags);
 
 /* Is a register in a group */
@@ -893,7 +946,7 @@ extern void set_gdbarch_register_reggrou
 
 /* Fetch the pointer to the ith function argument. */
 
-extern int gdbarch_fetch_pointer_argument_p (struct gdbarch *gdbarch);
+extern bool gdbarch_fetch_pointer_argument_p (struct gdbarch *gdbarch);
 
 typedef CORE_ADDR (gdbarch_fetch_pointer_argument_ftype) (struct frame_info *frame, int argi, struct type *type);
 extern CORE_ADDR gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, struct frame_info *frame, int argi, struct type *type);
@@ -906,7 +959,7 @@ extern void set_gdbarch_fetch_pointer_ar
    values.  Otherwise it should enumerate all supported register note
    sections. */
 
-extern int gdbarch_iterate_over_regset_sections_p (struct gdbarch *gdbarch);
+extern bool gdbarch_iterate_over_regset_sections_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_iterate_over_regset_sections_ftype) (struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache);
 extern void gdbarch_iterate_over_regset_sections (struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache);
@@ -914,15 +967,15 @@ extern void set_gdbarch_iterate_over_reg
 
 /* Create core file notes */
 
-extern int gdbarch_make_corefile_notes_p (struct gdbarch *gdbarch);
+extern bool gdbarch_make_corefile_notes_p (struct gdbarch *gdbarch);
 
-typedef char * (gdbarch_make_corefile_notes_ftype) (struct gdbarch *gdbarch, bfd *obfd, int *note_size);
-extern char * gdbarch_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size);
+typedef gdb::unique_xmalloc_ptr<char> (gdbarch_make_corefile_notes_ftype) (struct gdbarch *gdbarch, bfd *obfd, int *note_size);
+extern gdb::unique_xmalloc_ptr<char> gdbarch_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size);
 extern void set_gdbarch_make_corefile_notes (struct gdbarch *gdbarch, gdbarch_make_corefile_notes_ftype *make_corefile_notes);
 
 /* Find core file memory regions */
 
-extern int gdbarch_find_memory_regions_p (struct gdbarch *gdbarch);
+extern bool gdbarch_find_memory_regions_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_find_memory_regions_ftype) (struct gdbarch *gdbarch, find_memory_region_ftype func, void *data);
 extern int gdbarch_find_memory_regions (struct gdbarch *gdbarch, find_memory_region_ftype func, void *data);
@@ -933,7 +986,7 @@ extern void set_gdbarch_find_memory_regi
    (zero indicates failure).
    failed, otherwise, return the red length of READBUF. */
 
-extern int gdbarch_core_xfer_shared_libraries_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_xfer_shared_libraries_p (struct gdbarch *gdbarch);
 
 typedef ULONGEST (gdbarch_core_xfer_shared_libraries_ftype) (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
 extern ULONGEST gdbarch_core_xfer_shared_libraries (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
@@ -943,7 +996,7 @@ extern void set_gdbarch_core_xfer_shared
    libraries list from core file into buffer READBUF with length LEN.
    Return the number of bytes read (zero indicates failure). */
 
-extern int gdbarch_core_xfer_shared_libraries_aix_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_xfer_shared_libraries_aix_p (struct gdbarch *gdbarch);
 
 typedef ULONGEST (gdbarch_core_xfer_shared_libraries_aix_ftype) (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
 extern ULONGEST gdbarch_core_xfer_shared_libraries_aix (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
@@ -951,7 +1004,7 @@ extern void set_gdbarch_core_xfer_shared
 
 /* How the core target converts a PTID from a core file to a string. */
 
-extern int gdbarch_core_pid_to_str_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_pid_to_str_p (struct gdbarch *gdbarch);
 
 typedef std::string (gdbarch_core_pid_to_str_ftype) (struct gdbarch *gdbarch, ptid_t ptid);
 extern std::string gdbarch_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid);
@@ -959,7 +1012,7 @@ extern void set_gdbarch_core_pid_to_str
 
 /* How the core target extracts the name of a thread from a core file. */
 
-extern int gdbarch_core_thread_name_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_thread_name_p (struct gdbarch *gdbarch);
 
 typedef const char * (gdbarch_core_thread_name_ftype) (struct gdbarch *gdbarch, struct thread_info *thr);
 extern const char * gdbarch_core_thread_name (struct gdbarch *gdbarch, struct thread_info *thr);
@@ -969,7 +1022,7 @@ extern void set_gdbarch_core_thread_name
    from core file into buffer READBUF with length LEN.  Return the number
    of bytes read (zero indicates EOF, a negative value indicates failure). */
 
-extern int gdbarch_core_xfer_siginfo_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_xfer_siginfo_p (struct gdbarch *gdbarch);
 
 typedef LONGEST (gdbarch_core_xfer_siginfo_ftype) (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
 extern LONGEST gdbarch_core_xfer_siginfo (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
@@ -977,7 +1030,7 @@ extern void set_gdbarch_core_xfer_siginf
 
 /* BFD target to use when generating a core file. */
 
-extern int gdbarch_gcore_bfd_target_p (struct gdbarch *gdbarch);
+extern bool gdbarch_gcore_bfd_target_p (struct gdbarch *gdbarch);
 
 extern const char * gdbarch_gcore_bfd_target (struct gdbarch *gdbarch);
 extern void set_gdbarch_gcore_bfd_target (struct gdbarch *gdbarch, const char * gcore_bfd_target);
@@ -1003,7 +1056,7 @@ extern void set_gdbarch_skip_permanent_b
 
 /* The maximum length of an instruction on this architecture in bytes. */
 
-extern int gdbarch_max_insn_length_p (struct gdbarch *gdbarch);
+extern bool gdbarch_max_insn_length_p (struct gdbarch *gdbarch);
 
 extern ULONGEST gdbarch_max_insn_length (struct gdbarch *gdbarch);
 extern void set_gdbarch_max_insn_length (struct gdbarch *gdbarch, ULONGEST max_insn_length);
@@ -1016,9 +1069,7 @@ extern void set_gdbarch_max_insn_length
    not the copy at TO.  The caller should update it to point at TO later.
   
    Return a pointer to data of the architecture's choice to be passed
-   to gdbarch_displaced_step_fixup.  Or, return NULL to indicate that
-   the instruction's effects have been completely simulated, with the
-   resulting state written back to REGS.
+   to gdbarch_displaced_step_fixup.
   
    For a general explanation of displaced stepping and how GDB uses it,
    see the comments in infrun.c.
@@ -1034,24 +1085,23 @@ extern void set_gdbarch_max_insn_length
    core falls back to stepping past the instruction in-line instead in
    that case. */
 
-extern int gdbarch_displaced_step_copy_insn_p (struct gdbarch *gdbarch);
+extern bool gdbarch_displaced_step_copy_insn_p (struct gdbarch *gdbarch);
 
-typedef struct displaced_step_closure * (gdbarch_displaced_step_copy_insn_ftype) (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
-extern struct displaced_step_closure * gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
+typedef displaced_step_copy_insn_closure_up (gdbarch_displaced_step_copy_insn_ftype) (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
+extern displaced_step_copy_insn_closure_up gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
 extern void set_gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype *displaced_step_copy_insn);
 
-/* Return true if GDB should use hardware single-stepping to execute
-   the displaced instruction identified by CLOSURE.  If false,
-   GDB will simply restart execution at the displaced instruction
-   location, and it is up to the target to ensure GDB will receive
-   control again (e.g. by placing a software breakpoint instruction
-   into the displaced instruction buffer).
+/* Return true if GDB should use hardware single-stepping to execute a displaced
+   step instruction.  If false, GDB will simply restart execution at the
+   displaced instruction location, and it is up to the target to ensure GDB will
+   receive control again (e.g. by placing a software breakpoint instruction into
+   the displaced instruction buffer).
   
-   The default implementation returns false on all targets that
-   provide a gdbarch_software_single_step routine, and true otherwise. */
+   The default implementation returns false on all targets that provide a
+   gdbarch_software_single_step routine, and true otherwise. */
 
-typedef int (gdbarch_displaced_step_hw_singlestep_ftype) (struct gdbarch *gdbarch, struct displaced_step_closure *closure);
-extern int gdbarch_displaced_step_hw_singlestep (struct gdbarch *gdbarch, struct displaced_step_closure *closure);
+typedef bool (gdbarch_displaced_step_hw_singlestep_ftype) (struct gdbarch *gdbarch);
+extern bool gdbarch_displaced_step_hw_singlestep (struct gdbarch *gdbarch);
 extern void set_gdbarch_displaced_step_hw_singlestep (struct gdbarch *gdbarch, gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep);
 
 /* Fix up the state resulting from successfully single-stepping a
@@ -1071,23 +1121,42 @@ extern void set_gdbarch_displaced_step_h
    For a general explanation of displaced stepping and how GDB uses it,
    see the comments in infrun.c. */
 
-extern int gdbarch_displaced_step_fixup_p (struct gdbarch *gdbarch);
+extern bool gdbarch_displaced_step_fixup_p (struct gdbarch *gdbarch);
 
-typedef void (gdbarch_displaced_step_fixup_ftype) (struct gdbarch *gdbarch, struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
-extern void gdbarch_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
+typedef void (gdbarch_displaced_step_fixup_ftype) (struct gdbarch *gdbarch, struct displaced_step_copy_insn_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
+extern void gdbarch_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_copy_insn_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs);
 extern void set_gdbarch_displaced_step_fixup (struct gdbarch *gdbarch, gdbarch_displaced_step_fixup_ftype *displaced_step_fixup);
 
-/* Return the address of an appropriate place to put displaced
-   instructions while we step over them.  There need only be one such
-   place, since we're only stepping one thread over a breakpoint at a
-   time.
+/* Prepare THREAD for it to displaced step the instruction at its current PC.
   
-   For a general explanation of displaced stepping and how GDB uses it,
-   see the comments in infrun.c. */
+   Throw an exception if any unexpected error happens. */
+
+extern bool gdbarch_displaced_step_prepare_p (struct gdbarch *gdbarch);
+
+typedef displaced_step_prepare_status (gdbarch_displaced_step_prepare_ftype) (struct gdbarch *gdbarch, thread_info *thread, CORE_ADDR &displaced_pc);
+extern displaced_step_prepare_status gdbarch_displaced_step_prepare (struct gdbarch *gdbarch, thread_info *thread, CORE_ADDR &displaced_pc);
+extern void set_gdbarch_displaced_step_prepare (struct gdbarch *gdbarch, gdbarch_displaced_step_prepare_ftype *displaced_step_prepare);
+
+/* Clean up after a displaced step of THREAD. */
+
+typedef displaced_step_finish_status (gdbarch_displaced_step_finish_ftype) (struct gdbarch *gdbarch, thread_info *thread, gdb_signal sig);
+extern displaced_step_finish_status gdbarch_displaced_step_finish (struct gdbarch *gdbarch, thread_info *thread, gdb_signal sig);
+extern void set_gdbarch_displaced_step_finish (struct gdbarch *gdbarch, gdbarch_displaced_step_finish_ftype *displaced_step_finish);
+
+/* Return the closure associated to the displaced step buffer that is at ADDR. */
+
+extern bool gdbarch_displaced_step_copy_insn_closure_by_addr_p (struct gdbarch *gdbarch);
+
+typedef const displaced_step_copy_insn_closure * (gdbarch_displaced_step_copy_insn_closure_by_addr_ftype) (inferior *inf, CORE_ADDR addr);
+extern const displaced_step_copy_insn_closure * gdbarch_displaced_step_copy_insn_closure_by_addr (struct gdbarch *gdbarch, inferior *inf, CORE_ADDR addr);
+extern void set_gdbarch_displaced_step_copy_insn_closure_by_addr (struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_closure_by_addr_ftype *displaced_step_copy_insn_closure_by_addr);
+
+/* PARENT_INF has forked and CHILD_PTID is the ptid of the child.  Restore the
+   contents of all displaced step buffers in the child's address space. */
 
-typedef CORE_ADDR (gdbarch_displaced_step_location_ftype) (struct gdbarch *gdbarch);
-extern CORE_ADDR gdbarch_displaced_step_location (struct gdbarch *gdbarch);
-extern void set_gdbarch_displaced_step_location (struct gdbarch *gdbarch, gdbarch_displaced_step_location_ftype *displaced_step_location);
+typedef void (gdbarch_displaced_step_restore_all_in_ptid_ftype) (inferior *parent_inf, ptid_t child_ptid);
+extern void gdbarch_displaced_step_restore_all_in_ptid (struct gdbarch *gdbarch, inferior *parent_inf, ptid_t child_ptid);
+extern void set_gdbarch_displaced_step_restore_all_in_ptid (struct gdbarch *gdbarch, gdbarch_displaced_step_restore_all_in_ptid_ftype *displaced_step_restore_all_in_ptid);
 
 /* Relocate an instruction to execute at a different address.  OLDLOC
    is the address in the inferior memory where the instruction to
@@ -1101,7 +1170,7 @@ extern void set_gdbarch_displaced_step_l
    relative branches, and other PC-relative instructions need the
    offset adjusted; etc. */
 
-extern int gdbarch_relocate_instruction_p (struct gdbarch *gdbarch);
+extern bool gdbarch_relocate_instruction_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_relocate_instruction_ftype) (struct gdbarch *gdbarch, CORE_ADDR *to, CORE_ADDR from);
 extern void gdbarch_relocate_instruction (struct gdbarch *gdbarch, CORE_ADDR *to, CORE_ADDR from);
@@ -1109,26 +1178,18 @@ extern void set_gdbarch_relocate_instruc
 
 /* Refresh overlay mapped state for section OSECT. */
 
-extern int gdbarch_overlay_update_p (struct gdbarch *gdbarch);
+extern bool gdbarch_overlay_update_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_overlay_update_ftype) (struct obj_section *osect);
 extern void gdbarch_overlay_update (struct gdbarch *gdbarch, struct obj_section *osect);
 extern void set_gdbarch_overlay_update (struct gdbarch *gdbarch, gdbarch_overlay_update_ftype *overlay_update);
 
-extern int gdbarch_core_read_description_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_read_description_p (struct gdbarch *gdbarch);
 
 typedef const struct target_desc * (gdbarch_core_read_description_ftype) (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd);
 extern const struct target_desc * gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd);
 extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description);
 
-/* Handle special encoding of static variables in stabs debug info. */
-
-extern int gdbarch_static_transform_name_p (struct gdbarch *gdbarch);
-
-typedef const char * (gdbarch_static_transform_name_ftype) (const char *name);
-extern const char * gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name);
-extern void set_gdbarch_static_transform_name (struct gdbarch *gdbarch, gdbarch_static_transform_name_ftype *static_transform_name);
-
 /* Set if the address in N_SO or N_FUN stabs may be zero. */
 
 extern int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch);
@@ -1139,7 +1200,7 @@ extern void set_gdbarch_sofun_address_ma
    the instruction executes, along with their current values.
    Return -1 if something goes wrong, 0 otherwise. */
 
-extern int gdbarch_process_record_p (struct gdbarch *gdbarch);
+extern bool gdbarch_process_record_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_process_record_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr);
 extern int gdbarch_process_record (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr);
@@ -1148,7 +1209,7 @@ extern void set_gdbarch_process_record (
 /* Save process state after a signal.
    Return -1 if something goes wrong, 0 otherwise. */
 
-extern int gdbarch_process_record_signal_p (struct gdbarch *gdbarch);
+extern bool gdbarch_process_record_signal_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_process_record_signal_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal);
 extern int gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal);
@@ -1162,7 +1223,7 @@ extern void set_gdbarch_process_record_s
    "Live" targets hide the translation behind the target interface
    (target_wait, target_resume, etc.). */
 
-extern int gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch);
+extern bool gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch);
 
 typedef enum gdb_signal (gdbarch_gdb_signal_from_target_ftype) (struct gdbarch *gdbarch, int signo);
 extern enum gdb_signal gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, int signo);
@@ -1176,7 +1237,7 @@ extern void set_gdbarch_gdb_signal_from_
    Return the target signal number if found, or -1 if the GDB internal
    signal number is invalid. */
 
-extern int gdbarch_gdb_signal_to_target_p (struct gdbarch *gdbarch);
+extern bool gdbarch_gdb_signal_to_target_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_gdb_signal_to_target_ftype) (struct gdbarch *gdbarch, enum gdb_signal signal);
 extern int gdbarch_gdb_signal_to_target (struct gdbarch *gdbarch, enum gdb_signal signal);
@@ -1186,7 +1247,7 @@ extern void set_gdbarch_gdb_signal_to_ta
   
    Return a type suitable to inspect extra signal information. */
 
-extern int gdbarch_get_siginfo_type_p (struct gdbarch *gdbarch);
+extern bool gdbarch_get_siginfo_type_p (struct gdbarch *gdbarch);
 
 typedef struct type * (gdbarch_get_siginfo_type_ftype) (struct gdbarch *gdbarch);
 extern struct type * gdbarch_get_siginfo_type (struct gdbarch *gdbarch);
@@ -1194,7 +1255,7 @@ extern void set_gdbarch_get_siginfo_type
 
 /* Record architecture-specific information from the symbol table. */
 
-extern int gdbarch_record_special_symbol_p (struct gdbarch *gdbarch);
+extern bool gdbarch_record_special_symbol_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_record_special_symbol_ftype) (struct gdbarch *gdbarch, struct objfile *objfile, asymbol *sym);
 extern void gdbarch_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile, asymbol *sym);
@@ -1203,7 +1264,7 @@ extern void set_gdbarch_record_special_s
 /* Function for the 'catch syscall' feature.
    Get architecture-specific system calls information from registers. */
 
-extern int gdbarch_get_syscall_number_p (struct gdbarch *gdbarch);
+extern bool gdbarch_get_syscall_number_p (struct gdbarch *gdbarch);
 
 typedef LONGEST (gdbarch_get_syscall_number_ftype) (struct gdbarch *gdbarch, thread_info *thread);
 extern LONGEST gdbarch_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread);
@@ -1310,7 +1371,7 @@ extern void set_gdbarch_stap_gdb_registe
    as much info as you can from the string, i.e., if you have to match
    something like `(%', do not match just the `('. */
 
-extern int gdbarch_stap_is_single_operand_p (struct gdbarch *gdbarch);
+extern bool gdbarch_stap_is_single_operand_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_stap_is_single_operand_ftype) (struct gdbarch *gdbarch, const char *s);
 extern int gdbarch_stap_is_single_operand (struct gdbarch *gdbarch, const char *s);
@@ -1338,10 +1399,10 @@ extern void set_gdbarch_stap_is_single_o
    zero means that the special parser is deferring the parsing to the generic
    parser), and should advance the buffer pointer (p->arg). */
 
-extern int gdbarch_stap_parse_special_token_p (struct gdbarch *gdbarch);
+extern bool gdbarch_stap_parse_special_token_p (struct gdbarch *gdbarch);
 
-typedef int (gdbarch_stap_parse_special_token_ftype) (struct gdbarch *gdbarch, struct stap_parse_info *p);
-extern int gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_info *p);
+typedef expr::operation_up (gdbarch_stap_parse_special_token_ftype) (struct gdbarch *gdbarch, struct stap_parse_info *p);
+extern expr::operation_up gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_info *p);
 extern void set_gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, gdbarch_stap_parse_special_token_ftype *stap_parse_special_token);
 
 /* Perform arch-dependent adjustments to a register name.
@@ -1368,7 +1429,7 @@ extern void set_gdbarch_stap_parse_speci
   
    The rationale for this can be found at PR breakpoints/24541. */
 
-extern int gdbarch_stap_adjust_register_p (struct gdbarch *gdbarch);
+extern bool gdbarch_stap_adjust_register_p (struct gdbarch *gdbarch);
 
 typedef std::string (gdbarch_stap_adjust_register_ftype) (struct gdbarch *gdbarch, struct stap_parse_info *p, const std::string &regname, int regnum);
 extern std::string gdbarch_stap_adjust_register (struct gdbarch *gdbarch, struct stap_parse_info *p, const std::string &regname, int regnum);
@@ -1378,16 +1439,16 @@ extern void set_gdbarch_stap_adjust_regi
    The expression to compute the NARTGth+1 argument to a DTrace USDT probe.
    NARG must be >= 0. */
 
-extern int gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch);
+extern bool gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch);
 
-typedef void (gdbarch_dtrace_parse_probe_argument_ftype) (struct gdbarch *gdbarch, struct expr_builder *builder, int narg);
-extern void gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct expr_builder *builder, int narg);
+typedef expr::operation_up (gdbarch_dtrace_parse_probe_argument_ftype) (struct gdbarch *gdbarch, int narg);
+extern expr::operation_up gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, int narg);
 extern void set_gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, gdbarch_dtrace_parse_probe_argument_ftype *dtrace_parse_probe_argument);
 
 /* True if the given ADDR does not contain the instruction sequence
    corresponding to a disabled DTrace is-enabled probe. */
 
-extern int gdbarch_dtrace_probe_is_enabled_p (struct gdbarch *gdbarch);
+extern bool gdbarch_dtrace_probe_is_enabled_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_dtrace_probe_is_enabled_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
 extern int gdbarch_dtrace_probe_is_enabled (struct gdbarch *gdbarch, CORE_ADDR addr);
@@ -1395,7 +1456,7 @@ extern void set_gdbarch_dtrace_probe_is_
 
 /* Enable a DTrace is-enabled probe at ADDR. */
 
-extern int gdbarch_dtrace_enable_probe_p (struct gdbarch *gdbarch);
+extern bool gdbarch_dtrace_enable_probe_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_dtrace_enable_probe_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
 extern void gdbarch_dtrace_enable_probe (struct gdbarch *gdbarch, CORE_ADDR addr);
@@ -1403,7 +1464,7 @@ extern void set_gdbarch_dtrace_enable_pr
 
 /* Disable a DTrace is-enabled probe at ADDR. */
 
-extern int gdbarch_dtrace_disable_probe_p (struct gdbarch *gdbarch);
+extern bool gdbarch_dtrace_disable_probe_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_dtrace_disable_probe_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
 extern void gdbarch_dtrace_disable_probe (struct gdbarch *gdbarch, CORE_ADDR addr);
@@ -1488,7 +1549,7 @@ extern void set_gdbarch_gen_return_addre
 
 /* Implement the "info proc" command. */
 
-extern int gdbarch_info_proc_p (struct gdbarch *gdbarch);
+extern bool gdbarch_info_proc_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_info_proc_ftype) (struct gdbarch *gdbarch, const char *args, enum info_proc_what what);
 extern void gdbarch_info_proc (struct gdbarch *gdbarch, const char *args, enum info_proc_what what);
@@ -1498,7 +1559,7 @@ extern void set_gdbarch_info_proc (struc
    are two "info_proc"-like methods on gdbarch -- one for core files,
    one for live targets. */
 
-extern int gdbarch_core_info_proc_p (struct gdbarch *gdbarch);
+extern bool gdbarch_core_info_proc_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_core_info_proc_ftype) (struct gdbarch *gdbarch, const char *args, enum info_proc_what what);
 extern void gdbarch_core_info_proc (struct gdbarch *gdbarch, const char *args, enum info_proc_what what);
@@ -1545,12 +1606,19 @@ typedef int (gdbarch_insn_is_jump_ftype)
 extern int gdbarch_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr);
 extern void set_gdbarch_insn_is_jump (struct gdbarch *gdbarch, gdbarch_insn_is_jump_ftype *insn_is_jump);
 
+/* Return true if there's a program/permanent breakpoint planted in
+   memory at ADDRESS, return false otherwise. */
+
+typedef bool (gdbarch_program_breakpoint_here_p_ftype) (struct gdbarch *gdbarch, CORE_ADDR address);
+extern bool gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address);
+extern void set_gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p);
+
 /* 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 gdbarch_auxv_parse_p (struct gdbarch *gdbarch);
+extern bool gdbarch_auxv_parse_p (struct gdbarch *gdbarch);
 
 typedef int (gdbarch_auxv_parse_ftype) (struct gdbarch *gdbarch, gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp);
 extern int gdbarch_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp);
@@ -1640,6 +1708,12 @@ typedef std::string (gdbarch_get_pc_addr
 extern std::string gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, frame_info *frame, CORE_ADDR pc);
 extern void set_gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, gdbarch_get_pc_address_flags_ftype *get_pc_address_flags);
 
+/* Read core file mappings */
+
+typedef void (gdbarch_read_core_file_mappings_ftype) (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> loop_cb);
+extern void gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> loop_cb);
+extern void set_gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, gdbarch_read_core_file_mappings_ftype *read_core_file_mappings);
+
 extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
 
 
@@ -1708,24 +1782,22 @@ struct gdbarch_list
 
 struct gdbarch_info
 {
-  /* Use default: NULL (ZERO).  */
-  const struct bfd_arch_info *bfd_arch_info;
+  gdbarch_info ()
+    /* Ensure the union is zero-initialized.  Relies on the fact that there's
+       no member larger than TDESC_DATA.  */
+    : tdesc_data ()
+  {}
 
-  /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO).  */
-  enum bfd_endian byte_order;
+  const struct bfd_arch_info *bfd_arch_info = nullptr;
 
-  enum bfd_endian byte_order_for_code;
+  enum bfd_endian byte_order = BFD_ENDIAN_UNKNOWN;
 
-  /* Use default: NULL (ZERO).  */
-  bfd *abfd;
+  enum bfd_endian byte_order_for_code = BFD_ENDIAN_UNKNOWN;
+
+  bfd *abfd = nullptr;
 
-  /* Use default: NULL (ZERO).  */
   union
     {
-      /* Architecture-specific information.  The generic form for targets
-	 that have extra requirements.  */
-      struct gdbarch_tdep_info *tdep_info;
-
       /* Architecture-specific target description data.  Numerous targets
 	 need only this, so give them an easy way to hold it.  */
       struct tdesc_arch_data *tdesc_data;
@@ -1736,11 +1808,9 @@ struct gdbarch_info
       int *id;
     };
 
-  /* Use default: GDB_OSABI_UNINITIALIZED (-1).  */
-  enum gdb_osabi osabi;
+  enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
 
-  /* Use default: NULL (ZERO).  */
-  const struct target_desc *target_desc;
+  const struct target_desc *target_desc = nullptr;
 };
 
 typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
@@ -1750,8 +1820,8 @@ typedef void (gdbarch_dump_tdep_ftype) (
 extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
 
 extern void gdbarch_register (enum bfd_architecture architecture,
-                              gdbarch_init_ftype *,
-                              gdbarch_dump_tdep_ftype *);
+			      gdbarch_init_ftype *,
+			      gdbarch_dump_tdep_ftype *);
 
 
 /* Return a freshly allocated, NULL terminated, array of the valid
@@ -1814,8 +1884,8 @@ extern int gdbarch_update_p (struct gdba
 
 /* Helper function.  Find an architecture matching info.
 
-   INFO should be initialized using gdbarch_info_init, relevant fields
-   set, and then finished using gdbarch_info_fill.
+   INFO should have relevant fields set, and then finished using
+   gdbarch_info_fill.
 
    Returns the corresponding architecture, or NULL if no matching
    architecture was found.  */
@@ -1851,9 +1921,6 @@ typedef void *(gdbarch_data_pre_init_fty
 extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
 typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
 extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
-extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-                                         struct gdbarch_data *data,
-			                 void *pointer);
 
 extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch-selftests.c ./gdb/gdbarch-selftests.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch-selftests.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbarch-selftests.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Self tests for gdbarch for GDB, the GNU debugger.
 
-   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,16 +18,14 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#if GDB_SELF_TEST
 #include "gdbsupport/selftest.h"
 #include "selftest-arch.h"
-#include "inferior.h"
-#include "gdbthread.h"
 #include "target.h"
 #include "test-target.h"
 #include "target-float.h"
 #include "gdbsupport/def-vector.h"
 #include "gdbarch.h"
+#include "scoped-mock-context.h"
 
 namespace selftests {
 
@@ -71,45 +69,7 @@ register_to_value_test (struct gdbarch *
       builtin->builtin_char32,
     };
 
-  /* Error out if debugging something, because we're going to push the
-     test target, which would pop any existing target.  */
-  if (current_top_target ()->stratum () >= process_stratum)
-   error (_("target already pushed"));
-
-  /* Create a mock environment.  An inferior with a thread, with a
-     process_stratum target pushed.  */
-
-  test_target_ops mock_target;
-  ptid_t mock_ptid (1, 1);
-  inferior mock_inferior (mock_ptid.pid ());
-  address_space mock_aspace {};
-  mock_inferior.gdbarch = gdbarch;
-  mock_inferior.aspace = &mock_aspace;
-  thread_info mock_thread (&mock_inferior, mock_ptid);
-
-  scoped_restore restore_thread_list
-    = make_scoped_restore (&mock_inferior.thread_list, &mock_thread);
-
-  /* Add the mock inferior to the inferior list so that look ups by
-     target+ptid can find it.  */
-  scoped_restore restore_inferior_list
-    = make_scoped_restore (&inferior_list);
-  inferior_list = &mock_inferior;
-
-  /* Switch to the mock inferior.  */
-  scoped_restore_current_inferior restore_current_inferior;
-  set_current_inferior (&mock_inferior);
-
-  /* Push the process_stratum target so we can mock accessing
-     registers.  */
-  push_target (&mock_target);
-
-  /* Pop it again on exit (return/exception).  */
-  SCOPE_EXIT { pop_all_targets_at_and_above (process_stratum); };
-
-  /* Switch to the mock thread.  */
-  scoped_restore restore_inferior_ptid
-    = make_scoped_restore (&inferior_ptid, mock_ptid);
+  scoped_mock_context<test_target_ops> mockctx (gdbarch);
 
   struct frame_info *frame = get_current_frame ();
   const int num_regs = gdbarch_num_cooked_regs (gdbarch);
@@ -124,7 +84,7 @@ register_to_value_test (struct gdbarch *
 	    {
 	      std::vector<gdb_byte> expected (TYPE_LENGTH (type), 0);
 
-	      if (TYPE_CODE (type) == TYPE_CODE_FLT)
+	      if (type->code () == TYPE_CODE_FLT)
 		{
 		  /* Generate valid float format.  */
 		  target_float_from_string (expected.data (), type, "1.25");
@@ -163,13 +123,11 @@ register_to_value_test (struct gdbarch *
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
+void _initialize_gdbarch_selftests ();
 void
-_initialize_gdbarch_selftests (void)
+_initialize_gdbarch_selftests ()
 {
-#if GDB_SELF_TEST
   selftests::register_test_foreach_arch ("register_to_value",
 					 selftests::register_to_value_test);
-#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch.sh ./gdb/gdbarch.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbarch.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbarch.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # Architecture commands for GDB, the GNU debugger.
 #
-# Copyright (C) 1998-2020 Free Software Foundation, Inc.
+# Copyright (C) 1998-2021 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -24,22 +24,6 @@
 LANG=C ; export LANG
 LC_ALL=C ; export LC_ALL
 
-
-compare_new ()
-{
-    file=$1
-    if test ! -r ${file}
-    then
-	echo "${file} missing? cp new-${file} ${file}" 1>&2
-    elif diff -u ${file} new-${file}
-    then
-	echo "${file} unchanged" 1>&2
-    else
-	echo "${file} has changed? cp new-${file} ${file}" 1>&2
-    fi
-}
-
-
 # Format of the input table
 read="class returntype function formal actual staticdefault predefault postdefault invalid_p print garbage_at_eol"
 
@@ -50,6 +34,7 @@ do_read ()
     # On some SH's, 'read' trims leading and trailing whitespace by
     # default (e.g., bash), while on others (e.g., dash), it doesn't.
     # Set IFS to empty to disable the trimming everywhere.
+    # shellcheck disable=SC2162
     while IFS='' read line
     do
 	if test "${line}" = ""
@@ -67,15 +52,15 @@ do_read ()
 	    # The semantics of IFS varies between different SH's.  Some
 	    # treat ``;;' as three fields while some treat it as just two.
 	    # Work around this by eliminating ``;;'' ....
-	    line="`echo "${line}" | sed -e 's/;;/; ;/g' -e 's/;;/; ;/g'`"
+	    line="$(echo "${line}" | sed -e 's/;;/; ;/g' -e 's/;;/; ;/g')"
 
 	    OFS="${IFS}" ; IFS="[;]"
-	    eval read ${read} <<EOF
+	    eval read "${read}" <<EOF
 ${line}
 EOF
 	    IFS="${OFS}"
 
-	    if test -n "${garbage_at_eol}"
+	    if test -n "${garbage_at_eol:-}"
 	    then
 		echo "Garbage at end-of-line in ${line}" 1>&2
 		kill $$
@@ -86,26 +71,26 @@ EOF
 	    # that ended up with just that space character.
 	    for r in ${read}
 	    do
-		if eval test \"\${${r}}\" = \"\ \"
+		if eval test "\"\${${r}}\" = ' '"
 		then
-		    eval ${r}=""
+		    eval "${r}="
 		fi
 	    done
 
 	    case "${class}" in
-		m ) staticdefault="${predefault}" ;;
+		m ) staticdefault="${predefault:-}" ;;
 		M ) staticdefault="0" ;;
 		* ) test "${staticdefault}" || staticdefault=0 ;;
 	    esac
 
 	    case "${class}" in
 	    F | V | M )
-		case "${invalid_p}" in
+		case "${invalid_p:-}" in
 		"" )
 		    if test -n "${predefault}"
 		    then
 			#invalid_p="gdbarch->${function} == ${predefault}"
-			predicate="gdbarch->${function} != ${predefault}"
+			predicate="gdbarch->${function:-} != ${predefault}"
 		    elif class_is_variable_p
 		    then
 			predicate="gdbarch->${function} != 0"
@@ -122,23 +107,6 @@ EOF
 		esac
 	    esac
 
-	    # PREDEFAULT is a valid fallback definition of MEMBER when
-	    # multi-arch is not enabled.  This ensures that the
-	    # default value, when multi-arch is the same as the
-	    # default value when not multi-arch.  POSTDEFAULT is
-	    # always a valid definition of MEMBER as this again
-	    # ensures consistency.
-
-	    if [ -n "${postdefault}" ]
-	    then
-		fallbackdefault="${postdefault}"
-	    elif [ -n "${predefault}" ]
-	    then
-		fallbackdefault="${predefault}"
-	    else
-		fallbackdefault="0"
-	    fi
-
 	    #NOT YET: See gdbarch.log for basic verification of
 	    # database
 
@@ -156,8 +124,8 @@ EOF
 
 fallback_default_p ()
 {
-    [ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \
-	|| [ -n "${predefault}" -a "x${invalid_p}" = "x0" ]
+    { [ -n "${postdefault:-}" ] && [ "x${invalid_p}" != "x0" ]; } \
+	|| { [ -n "${predefault}" ] && [ "x${invalid_p}" = "x0" ]; }
 }
 
 class_is_variable_p ()
@@ -221,7 +189,7 @@ do
 	#   hiding something from the ``struct info'' object
 	# m -> multi-arch function
 	#   hiding a multi-arch function (parameterised with the architecture)
-        # M -> multi-arch function + predicate
+	# M -> multi-arch function + predicate
 	#   hiding a multi-arch function + predicate to test function validity
 
     returntype ) : ;;
@@ -357,12 +325,14 @@ v;int;long_bit;;;8 * sizeof (long);4*TAR
 # machine.
 v;int;long_long_bit;;;8 * sizeof (LONGEST);2*gdbarch->long_bit;;0
 
-# The ABI default bit-size and format for "half", "float", "double", and
+# The ABI default bit-size and format for "bfloat16", "half", "float", "double", and
 # "long double".  These bit/format pairs should eventually be combined
 # into a single object.  For the moment, just initialize them as a pair.
 # Each format describes both the big and little endian layouts (if
 # useful).
 
+v;int;bfloat16_bit;;;16;2*TARGET_CHAR_BIT;;0
+v;const struct floatformat **;bfloat16_format;;;;;floatformats_bfloat16;;pformat (gdbarch->bfloat16_format)
 v;int;half_bit;;;16;2*TARGET_CHAR_BIT;;0
 v;const struct floatformat **;half_format;;;;;floatformats_ieee_half;;pformat (gdbarch->half_format)
 v;int;float_bit;;;8 * sizeof (float);4*TARGET_CHAR_BIT;;0
@@ -446,11 +416,10 @@ M;int;ax_pseudo_register_collect;struct
 # Return -1 if something goes wrong, 0 otherwise.
 M;int;ax_pseudo_register_push_stack;struct agent_expr *ax, int reg;ax, reg
 
-# Some targets/architectures can do extra processing/display of
-# segmentation faults.  E.g., Intel MPX boundary faults.
-# Call the architecture dependent function to handle the fault.
+# Some architectures can display additional information for specific
+# signals.
 # UIOUT is the output stream where the handler will place information.
-M;void;handle_segmentation_fault;struct ui_out *uiout;uiout
+M;void;report_signal_info;struct ui_out *uiout, enum gdb_signal siggnal;uiout, siggnal
 
 # GDB's standard (or well known) register numbers.  These can map onto
 # a real register or a pseudo (computed) register or not be defined at
@@ -636,6 +605,32 @@ m;CORE_ADDR;addr_bits_remove;CORE_ADDR a
 # additional data associated with the address.
 v;int;significant_addr_bit;;;;;;0
 
+# Return a string representation of the memory tag TAG.
+m;std::string;memtag_to_string;struct value *tag;tag;;default_memtag_to_string;;0
+
+# Return true if ADDRESS contains a tag and false otherwise.  ADDRESS
+# must be either a pointer or a reference type.
+m;bool;tagged_address_p;struct value *address;address;;default_tagged_address_p;;0
+
+# Return true if the tag from ADDRESS matches the memory tag for that
+# particular address.  Return false otherwise.
+m;bool;memtag_matches_p;struct value *address;address;;default_memtag_matches_p;;0
+
+# Set the tags of type TAG_TYPE, for the memory address range
+# [ADDRESS, ADDRESS + LENGTH) to TAGS.
+# Return true if successful and false otherwise.
+m;bool;set_memtags;struct value *address, size_t length, const gdb::byte_vector \&tags, memtag_type tag_type;address, length, tags, tag_type;;default_set_memtags;;0
+
+# Return the tag of type TAG_TYPE associated with the memory address ADDRESS,
+# assuming ADDRESS is tagged.
+m;struct value *;get_memtag;struct value *address, memtag_type tag_type;address, tag_type;;default_get_memtag;;0
+
+# memtag_granule_size is the size of the allocation tag granule, for
+# architectures that support memory tagging.
+# This is 0 for architectures that do not support memory tagging.
+# For a non-zero value, this represents the number of bytes of memory per tag.
+v;CORE_ADDR;memtag_granule_size;;;;;;0
+
 # FIXME/cagney/2001-01-18: This should be split in two.  A target method that
 # indicates if the target needs software single step.  An ISA method to
 # implement it.
@@ -722,16 +717,16 @@ v;int;cannot_step_breakpoint;;;0;0;;0
 # See comment in target.h about continuable, steppable and
 # non-steppable watchpoints.
 v;int;have_nonsteppable_watchpoint;;;0;0;;0
-F;int;address_class_type_flags;int byte_size, int dwarf2_addr_class;byte_size, dwarf2_addr_class
-M;const char *;address_class_type_flags_to_name;int type_flags;type_flags
+F;type_instance_flags;address_class_type_flags;int byte_size, int dwarf2_addr_class;byte_size, dwarf2_addr_class
+M;const char *;address_class_type_flags_to_name;type_instance_flags type_flags;type_flags
 # Execute vendor-specific DWARF Call Frame Instruction.  OP is the instruction.
 # FS are passed from the generic execute_cfa_program function.
 m;bool;execute_dwarf_cfa_vendor_op;gdb_byte op, struct dwarf2_frame_state *fs;op, fs;;default_execute_dwarf_cfa_vendor_op;;0
 
 # Return the appropriate type_flags for the supplied address class.
-# This function should return 1 if the address class was recognized and
-# type_flags was set, zero otherwise.
-M;int;address_class_name_to_type_flags;const char *name, int *type_flags_ptr;name, type_flags_ptr
+# This function should return true if the address class was recognized and
+# type_flags was set, false otherwise.
+M;bool;address_class_name_to_type_flags;const char *name, type_instance_flags *type_flags_ptr;name, type_flags_ptr
 # Is a register in a group
 m;int;register_reggroup_p;int regnum, struct reggroup *reggroup;regnum, reggroup;;default_register_reggroup_p;;0
 # Fetch the pointer to the ith function argument.
@@ -746,7 +741,7 @@ F;CORE_ADDR;fetch_pointer_argument;struc
 M;void;iterate_over_regset_sections;iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache;cb, cb_data, regcache
 
 # Create core file notes
-M;char *;make_corefile_notes;bfd *obfd, int *note_size;obfd, note_size
+M;gdb::unique_xmalloc_ptr<char>;make_corefile_notes;bfd *obfd, int *note_size;obfd, note_size
 
 # Find core file memory regions
 M;int;find_memory_regions;find_memory_region_ftype func, void *data;func, data
@@ -799,9 +794,7 @@ V;ULONGEST;max_insn_length;;;0;0
 # not the copy at TO.  The caller should update it to point at TO later.
 #
 # Return a pointer to data of the architecture's choice to be passed
-# to gdbarch_displaced_step_fixup.  Or, return NULL to indicate that
-# the instruction's effects have been completely simulated, with the
-# resulting state written back to REGS.
+# to gdbarch_displaced_step_fixup.
 #
 # For a general explanation of displaced stepping and how GDB uses it,
 # see the comments in infrun.c.
@@ -816,18 +809,17 @@ V;ULONGEST;max_insn_length;;;0;0
 # If the instruction cannot execute out of line, return NULL.  The
 # core falls back to stepping past the instruction in-line instead in
 # that case.
-M;struct displaced_step_closure *;displaced_step_copy_insn;CORE_ADDR from, CORE_ADDR to, struct regcache *regs;from, to, regs
+M;displaced_step_copy_insn_closure_up;displaced_step_copy_insn;CORE_ADDR from, CORE_ADDR to, struct regcache *regs;from, to, regs
 
-# Return true if GDB should use hardware single-stepping to execute
-# the displaced instruction identified by CLOSURE.  If false,
-# GDB will simply restart execution at the displaced instruction
-# location, and it is up to the target to ensure GDB will receive
-# control again (e.g. by placing a software breakpoint instruction
-# into the displaced instruction buffer).
-#
-# The default implementation returns false on all targets that
-# provide a gdbarch_software_single_step routine, and true otherwise.
-m;int;displaced_step_hw_singlestep;struct displaced_step_closure *closure;closure;;default_displaced_step_hw_singlestep;;0
+# Return true if GDB should use hardware single-stepping to execute a displaced
+# step instruction.  If false, GDB will simply restart execution at the
+# displaced instruction location, and it is up to the target to ensure GDB will
+# receive control again (e.g. by placing a software breakpoint instruction into
+# the displaced instruction buffer).
+#
+# The default implementation returns false on all targets that provide a
+# gdbarch_software_single_step routine, and true otherwise.
+m;bool;displaced_step_hw_singlestep;void;;;default_displaced_step_hw_singlestep;;0
 
 # Fix up the state resulting from successfully single-stepping a
 # displaced instruction, to give the result we would have gotten from
@@ -845,16 +837,22 @@ m;int;displaced_step_hw_singlestep;struc
 #
 # For a general explanation of displaced stepping and how GDB uses it,
 # see the comments in infrun.c.
-M;void;displaced_step_fixup;struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs;closure, from, to, regs;;NULL
+M;void;displaced_step_fixup;struct displaced_step_copy_insn_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs;closure, from, to, regs;;NULL
 
-# Return the address of an appropriate place to put displaced
-# instructions while we step over them.  There need only be one such
-# place, since we're only stepping one thread over a breakpoint at a
-# time.
+# Prepare THREAD for it to displaced step the instruction at its current PC.
 #
-# For a general explanation of displaced stepping and how GDB uses it,
-# see the comments in infrun.c.
-m;CORE_ADDR;displaced_step_location;void;;;NULL;;(! gdbarch->displaced_step_location) != (! gdbarch->displaced_step_copy_insn)
+# Throw an exception if any unexpected error happens.
+M;displaced_step_prepare_status;displaced_step_prepare;thread_info *thread, CORE_ADDR &displaced_pc;thread, displaced_pc
+
+# Clean up after a displaced step of THREAD.
+m;displaced_step_finish_status;displaced_step_finish;thread_info *thread, gdb_signal sig;thread, sig;;NULL;;(! gdbarch->displaced_step_finish) != (! gdbarch->displaced_step_prepare)
+
+# Return the closure associated to the displaced step buffer that is at ADDR.
+F;const displaced_step_copy_insn_closure *;displaced_step_copy_insn_closure_by_addr;inferior *inf, CORE_ADDR addr;inf, addr
+
+# PARENT_INF has forked and CHILD_PTID is the ptid of the child.  Restore the
+# contents of all displaced step buffers in the child's address space.
+f;void;displaced_step_restore_all_in_ptid;inferior *parent_inf, ptid_t child_ptid;parent_inf, child_ptid
 
 # Relocate an instruction to execute at a different address.  OLDLOC
 # is the address in the inferior memory where the instruction to
@@ -874,8 +872,6 @@ F;void;overlay_update;struct obj_section
 
 M;const struct target_desc *;core_read_description;struct target_ops *target, bfd *abfd;target, abfd
 
-# Handle special encoding of static variables in stabs debug info.
-F;const char *;static_transform_name;const char *name;name
 # Set if the address in N_SO or N_FUN stabs may be zero.
 v;int;sofun_address_maybe_missing;;;0;0;;0
 
@@ -1024,7 +1020,7 @@ M;int;stap_is_single_operand;const char
 # if the token was not recognized as a special token (in this case, returning
 # zero means that the special parser is deferring the parsing to the generic
 # parser), and should advance the buffer pointer (p->arg).
-M;int;stap_parse_special_token;struct stap_parse_info *p;p
+M;expr::operation_up;stap_parse_special_token;struct stap_parse_info *p;p
 
 # Perform arch-dependent adjustments to a register name.
 #
@@ -1055,7 +1051,7 @@ M;std::string;stap_adjust_register;struc
 
 # The expression to compute the NARTGth+1 argument to a DTrace USDT probe.
 # NARG must be >= 0.
-M;void;dtrace_parse_probe_argument;struct expr_builder *builder, int narg;builder, narg
+M;expr::operation_up;dtrace_parse_probe_argument;int narg;narg
 
 # True if the given ADDR does not contain the instruction sequence
 # corresponding to a disabled DTrace is-enabled probe.
@@ -1152,6 +1148,10 @@ m;int;insn_is_ret;CORE_ADDR addr;addr;;d
 # Return non-zero if the instruction at ADDR is a jump; zero otherwise.
 m;int;insn_is_jump;CORE_ADDR addr;addr;;default_insn_is_jump;;0
 
+# Return true if there's a program/permanent breakpoint planted in
+# memory at ADDRESS, return false otherwise.
+m;bool;program_breakpoint_here_p;CORE_ADDR address;address;;default_program_breakpoint_here_p;;0
+
 # 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.
@@ -1209,21 +1209,24 @@ m;ULONGEST;type_align;struct type *type;
 # Return a string containing any flags for the given PC in the given FRAME.
 f;std::string;get_pc_address_flags;frame_info *frame, CORE_ADDR pc;frame, pc;;default_get_pc_address_flags;;0
 
+# Read core file mappings
+m;void;read_core_file_mappings;struct bfd *cbfd, gdb::function_view<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> loop_cb;cbfd, pre_loop_cb, loop_cb;;default_read_core_file_mappings;;0
+
 EOF
 }
 
 #
 # The .log file
 #
-exec > new-gdbarch.log
+exec > gdbarch.log
 function_list | while do_read
 do
     cat <<EOF
-${class} ${returntype} ${function} ($formal)
+${class} ${returntype:-} ${function} (${formal:-})
 EOF
     for r in ${read}
     do
-	eval echo \"\ \ \ \ ${r}=\${${r}}\"
+	eval echo "\"    ${r}=\${${r}}\""
     done
     if class_is_predicate_p && fallback_default_p
     then
@@ -1231,7 +1234,7 @@ EOF
 	kill $$
 	exit 1
     fi
-    if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ]
+    if [ "x${invalid_p}" = "x0" ] && [ -n "${postdefault}" ]
     then
 	echo "Error: postdefault is useless when invalid_p=0" 1>&2
 	kill $$
@@ -1251,7 +1254,6 @@ EOF
 done
 
 exec 1>&2
-compare_new gdbarch.log
 
 
 copyright ()
@@ -1262,7 +1264,7 @@ cat <<EOF
 
 /* Dynamic architecture support for GDB, the GNU debugger.
 
-   Copyright (C) 1998-2020 Free Software Foundation, Inc.
+   Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1279,17 +1281,7 @@ cat <<EOF
    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 was created with the aid of \`\`gdbarch.sh''.
-
-   The Bourne shell script \`\`gdbarch.sh'' creates the files
-   \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
-   against the existing \`\`gdbarch.[hc]''.  Any differences found
-   being reported.
-
-   If editing this file, please also run gdbarch.sh and merge any
-   changes into that script. Conversely, when making sweeping changes
-   to this file, modifying gdbarch.sh and using its output may prove
-   easier.  */
+/* This file was created with the aid of \`\`gdbarch.sh''.  */
 
 EOF
 }
@@ -1308,6 +1300,9 @@ cat <<EOF
 #include "frame.h"
 #include "dis-asm.h"
 #include "gdb_obstack.h"
+#include "infrun.h"
+#include "osabi.h"
+#include "displaced-stepping.h"
 
 struct floatformat;
 struct ui_file;
@@ -1324,7 +1319,6 @@ struct obstack;
 struct bp_target_info;
 struct target_desc;
 struct symbol;
-struct displaced_step_closure;
 struct syscall;
 struct agent_expr;
 struct axs_value;
@@ -1335,6 +1329,7 @@ struct mem_range;
 struct syscalls_info;
 struct thread_info;
 struct ui_out;
+struct inferior;
 
 #include "regcache.h"
 
@@ -1393,6 +1388,18 @@ enum function_call_return_method
   return_method_struct,
 };
 
+enum class memtag_type
+{
+  /* Logical tag, the tag that is stored in unused bits of a pointer to a
+     virtual address.  */
+  logical = 0,
+
+  /* Allocation tag, the tag that is associated with every granule of memory in
+     the physical address space.  Allocation tags are used to validate memory
+     accesses via pointers containing logical tags.  */
+  allocation,
+};
+
 EOF
 
 # function typedef's
@@ -1404,8 +1411,8 @@ do
     if class_is_info_p
     then
 	printf "\n"
-	printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
-	printf "/* set_gdbarch_${function}() - not applicable - pre-initialized.  */\n"
+	printf "extern %s gdbarch_%s (struct gdbarch *gdbarch);\n" "$returntype" "$function"
+	printf "/* set_gdbarch_%s() - not applicable - pre-initialized.  */\n" "$function"
     fi
 done
 
@@ -1426,33 +1433,33 @@ do
     if class_is_predicate_p
     then
 	printf "\n"
-	printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
+	printf "extern bool gdbarch_%s_p (struct gdbarch *gdbarch);\n" "$function"
     fi
     if class_is_variable_p
     then
 	printf "\n"
-	printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
-	printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n"
+	printf "extern %s gdbarch_%s (struct gdbarch *gdbarch);\n" "$returntype" "$function"
+	printf "extern void set_gdbarch_%s (struct gdbarch *gdbarch, %s %s);\n" "$function" "$returntype" "$function"
     fi
     if class_is_function_p
     then
 	printf "\n"
 	if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p
 	then
-	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n"
+	    printf "typedef %s (gdbarch_%s_ftype) (struct gdbarch *gdbarch);\n" "$returntype" "$function"
 	elif class_is_multiarch_p
 	then
-	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n"
+	    printf "typedef %s (gdbarch_%s_ftype) (struct gdbarch *gdbarch, %s);\n" "$returntype" "$function" "$formal"
 	else
-	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
+	    printf "typedef %s (gdbarch_%s_ftype) (%s);\n" "$returntype" "$function" "$formal"
 	fi
 	if [ "x${formal}" = "xvoid" ]
 	then
-	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
+	  printf "extern %s gdbarch_%s (struct gdbarch *gdbarch);\n" "$returntype" "$function"
 	else
-	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
+	  printf "extern %s gdbarch_%s (struct gdbarch *gdbarch, %s);\n" "$returntype" "$function" "$formal"
 	fi
-	printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
+	printf "extern void set_gdbarch_%s (struct gdbarch *gdbarch, gdbarch_%s_ftype *%s);\n" "$function" "$function" "$function"
     fi
 done
 
@@ -1527,24 +1534,22 @@ struct gdbarch_list
 
 struct gdbarch_info
 {
-  /* Use default: NULL (ZERO).  */
-  const struct bfd_arch_info *bfd_arch_info;
+  gdbarch_info ()
+    /* Ensure the union is zero-initialized.  Relies on the fact that there's
+       no member larger than TDESC_DATA.  */
+    : tdesc_data ()
+  {}
 
-  /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO).  */
-  enum bfd_endian byte_order;
+  const struct bfd_arch_info *bfd_arch_info = nullptr;
 
-  enum bfd_endian byte_order_for_code;
+  enum bfd_endian byte_order = BFD_ENDIAN_UNKNOWN;
 
-  /* Use default: NULL (ZERO).  */
-  bfd *abfd;
+  enum bfd_endian byte_order_for_code = BFD_ENDIAN_UNKNOWN;
+
+  bfd *abfd = nullptr;
 
-  /* Use default: NULL (ZERO).  */
   union
     {
-      /* Architecture-specific information.  The generic form for targets
-	 that have extra requirements.  */
-      struct gdbarch_tdep_info *tdep_info;
-
       /* Architecture-specific target description data.  Numerous targets
 	 need only this, so give them an easy way to hold it.  */
       struct tdesc_arch_data *tdesc_data;
@@ -1555,11 +1560,9 @@ struct gdbarch_info
       int *id;
     };
 
-  /* Use default: GDB_OSABI_UNINITIALIZED (-1).  */
-  enum gdb_osabi osabi;
+  enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
 
-  /* Use default: NULL (ZERO).  */
-  const struct target_desc *target_desc;
+  const struct target_desc *target_desc = nullptr;
 };
 
 typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
@@ -1569,8 +1572,8 @@ typedef void (gdbarch_dump_tdep_ftype) (
 extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
 
 extern void gdbarch_register (enum bfd_architecture architecture,
-                              gdbarch_init_ftype *,
-                              gdbarch_dump_tdep_ftype *);
+			      gdbarch_init_ftype *,
+			      gdbarch_dump_tdep_ftype *);
 
 
 /* Return a freshly allocated, NULL terminated, array of the valid
@@ -1635,8 +1638,8 @@ extern int gdbarch_update_p (struct gdba
 
 /* Helper function.  Find an architecture matching info.
 
-   INFO should be initialized using gdbarch_info_init, relevant fields
-   set, and then finished using gdbarch_info_fill.
+   INFO should have relevant fields set, and then finished using
+   gdbarch_info_fill.
 
    Returns the corresponding architecture, or NULL if no matching
    architecture was found.  */
@@ -1672,9 +1675,6 @@ typedef void *(gdbarch_data_pre_init_fty
 extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
 typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
 extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
-extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-                                         struct gdbarch_data *data,
-			                 void *pointer);
 
 extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
 
@@ -1706,8 +1706,8 @@ gdbarch_num_cooked_regs (gdbarch *arch)
 #endif
 EOF
 exec 1>&2
-#../move-if-change new-gdbarch.h gdbarch.h
-compare_new gdbarch.h
+../move-if-change new-gdbarch.h gdbarch.h
+rm -f new-gdbarch.h
 
 
 #
@@ -1748,7 +1748,7 @@ static void alloc_gdbarch_data (struct g
 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)
+		    struct cmd_list_element *c, const char *value)
 {
   fprintf_filtered (file, _("Architecture debugging is %s.\\n"), value);
 }
@@ -1827,7 +1827,7 @@ function_list | while do_read
 do
     if class_is_info_p
     then
-	printf "  ${returntype} ${function};\n"
+	printf "  %s %s;\n" "$returntype" "$function"
     fi
 done
 printf "\n"
@@ -1868,10 +1868,10 @@ function_list | while do_read
 do
     if class_is_variable_p
     then
-	printf "  ${returntype} ${function};\n"
+	printf "  %s %s;\n" "$returntype" "$function"
     elif class_is_function_p
     then
-	printf "  gdbarch_${function}_ftype *${function};\n"
+	printf "  gdbarch_%s_ftype *%s;\n" "$function" "$function"
     fi
 done
 printf "};\n"
@@ -1886,7 +1886,7 @@ printf "\n"
 cat <<EOF
 struct gdbarch *
 gdbarch_alloc (const struct gdbarch_info *info,
-               struct gdbarch_tdep *tdep)
+	       struct gdbarch_tdep *tdep)
 {
   struct gdbarch *gdbarch;
 
@@ -1907,7 +1907,7 @@ function_list | while do_read
 do
     if class_is_info_p
     then
-	printf "  gdbarch->${function} = info->${function};\n"
+	printf "  gdbarch->%s = info->%s;\n" "$function" "$function"
     fi
 done
 printf "\n"
@@ -1916,9 +1916,9 @@ function_list | while do_read
 do
     if class_is_function_p || class_is_variable_p
     then
-	if [ -n "${predefault}" -a "x${predefault}" != "x0" ]
+	if [ -n "${predefault}" ] && [ "x${predefault}" != "x0" ]
 	then
-	  printf "  gdbarch->${function} = ${predefault};\n"
+	  printf "  gdbarch->%s = %s;\n" "$function" "$predefault"
 	fi
     fi
 done
@@ -1991,39 +1991,39 @@ do
     then
 	if [ "x${invalid_p}" = "x0" ]
 	then
-	    printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
+	    printf "  /* Skip verify of %s, invalid_p == 0 */\n" "$function"
 	elif class_is_predicate_p
 	then
-	    printf "  /* Skip verify of ${function}, has predicate.  */\n"
+	    printf "  /* Skip verify of %s, has predicate.  */\n" "$function"
 	# FIXME: See do_read for potential simplification
- 	elif [ -n "${invalid_p}" -a -n "${postdefault}" ]
+	elif [ -n "${invalid_p}" ] && [ -n "${postdefault}" ]
 	then
-	    printf "  if (${invalid_p})\n"
-	    printf "    gdbarch->${function} = ${postdefault};\n"
-	elif [ -n "${predefault}" -a -n "${postdefault}" ]
+	    printf "  if (%s)\n" "$invalid_p"
+	    printf "    gdbarch->%s = %s;\n" "$function" "$postdefault"
+	elif [ -n "${predefault}" ] && [ -n "${postdefault}" ]
 	then
-	    printf "  if (gdbarch->${function} == ${predefault})\n"
-	    printf "    gdbarch->${function} = ${postdefault};\n"
+	    printf "  if (gdbarch->%s == %s)\n" "$function" "$predefault"
+	    printf "    gdbarch->%s = %s;\n" "$function" "$postdefault"
 	elif [ -n "${postdefault}" ]
 	then
-	    printf "  if (gdbarch->${function} == 0)\n"
-	    printf "    gdbarch->${function} = ${postdefault};\n"
+	    printf "  if (gdbarch->%s == 0)\n" "$function"
+	    printf "    gdbarch->%s = %s;\n" "$function" "$postdefault"
 	elif [ -n "${invalid_p}" ]
 	then
-	    printf "  if (${invalid_p})\n"
-	    printf "    log.puts (\"\\\\n\\\\t${function}\");\n"
+	    printf "  if (%s)\n" "$invalid_p"
+	    printf "    log.puts (\"\\\\n\\\\t%s\");\n" "$function"
 	elif [ -n "${predefault}" ]
 	then
-	    printf "  if (gdbarch->${function} == ${predefault})\n"
-	    printf "    log.puts (\"\\\\n\\\\t${function}\");\n"
+	    printf "  if (gdbarch->%s == %s)\n" "$function" "$predefault"
+	    printf "    log.puts (\"\\\\n\\\\t%s\");\n" "$function"
 	fi
     fi
 done
 cat <<EOF
   if (!log.empty ())
     internal_error (__FILE__, __LINE__,
-                    _("verify_gdbarch: the following are invalid ...%s"),
-                    log.c_str ());
+		    _("verify_gdbarch: the following are invalid ...%s"),
+		    log.c_str ());
 }
 EOF
 
@@ -2042,8 +2042,8 @@ gdbarch_dump (struct gdbarch *gdbarch, s
   gdb_nm_file = GDB_NM_FILE;
 #endif
   fprintf_unfiltered (file,
-                      "gdbarch_dump: GDB_NM_FILE = %s\\n",
-                      gdb_nm_file);
+		      "gdbarch_dump: GDB_NM_FILE = %s\\n",
+		      gdb_nm_file);
 EOF
 function_list | sort '-t;' -k 3 | while do_read
 do
@@ -2051,15 +2051,15 @@ do
     if class_is_predicate_p
     then
 	printf "  fprintf_unfiltered (file,\n"
-	printf "                      \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n"
-	printf "                      gdbarch_${function}_p (gdbarch));\n"
+	printf "                      \"gdbarch_dump: gdbarch_%s_p() = %%d\\\\n\",\n" "$function"
+	printf "                      gdbarch_%s_p (gdbarch));\n" "$function"
     fi
     # Print the corresponding value.
     if class_is_function_p
     then
 	printf "  fprintf_unfiltered (file,\n"
-	printf "                      \"gdbarch_dump: ${function} = <%%s>\\\\n\",\n"
-	printf "                      host_address_to_string (gdbarch->${function}));\n"
+	printf "                      \"gdbarch_dump: %s = <%%s>\\\\n\",\n" "$function"
+	printf "                      host_address_to_string (gdbarch->%s));\n" "$function"
     else
 	# It is a variable
 	case "${print}:${returntype}" in
@@ -2068,16 +2068,16 @@ do
 		print="core_addr_to_string_nz (gdbarch->${function})"
 		;;
 	    :* )
-	        fmt="%s"
+		fmt="%s"
 		print="plongest (gdbarch->${function})"
 		;;
 	    * )
-	        fmt="%s"
+		fmt="%s"
 		;;
-        esac
+	esac
 	printf "  fprintf_unfiltered (file,\n"
-	printf "                      \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}"
-	printf "                      ${print});\n"
+	printf "                      \"gdbarch_dump: %s = %s\\\\n\",\n" "$function" "$fmt"
+	printf "                      %s);\n" "$print"
     fi
 done
 cat <<EOF
@@ -2104,34 +2104,34 @@ do
     if class_is_predicate_p
     then
 	printf "\n"
-	printf "int\n"
-	printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n"
+	printf "bool\n"
+	printf "gdbarch_%s_p (struct gdbarch *gdbarch)\n" "$function"
 	printf "{\n"
-        printf "  gdb_assert (gdbarch != NULL);\n"
-	printf "  return ${predicate};\n"
+	printf "  gdb_assert (gdbarch != NULL);\n"
+	printf "  return %s;\n" "$predicate"
 	printf "}\n"
     fi
     if class_is_function_p
     then
 	printf "\n"
-	printf "${returntype}\n"
+	printf "%s\n" "$returntype"
 	if [ "x${formal}" = "xvoid" ]
 	then
-	  printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
+	  printf "gdbarch_%s (struct gdbarch *gdbarch)\n" "$function"
 	else
-	  printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n"
+	  printf "gdbarch_%s (struct gdbarch *gdbarch, %s)\n" "$function" "$formal"
 	fi
 	printf "{\n"
-        printf "  gdb_assert (gdbarch != NULL);\n"
-	printf "  gdb_assert (gdbarch->${function} != NULL);\n"
+	printf "  gdb_assert (gdbarch != NULL);\n"
+	printf "  gdb_assert (gdbarch->%s != NULL);\n" "$function"
 	if class_is_predicate_p && test -n "${predefault}"
 	then
 	    # Allow a call to a function with a predicate.
-	    printf "  /* Do not check predicate: ${predicate}, allow call.  */\n"
+	    printf "  /* Do not check predicate: %s, allow call.  */\n" "$predicate"
 	fi
 	printf "  if (gdbarch_debug >= 2)\n"
-	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
-	if [ "x${actual}" = "x-" -o "x${actual}" = "x" ]
+	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_%s called\\\\n\");\n" "$function"
+	if [ "x${actual:-}" = "x-" ] || [ "x${actual:-}" = "x" ]
 	then
 	    if class_is_multiarch_p
 	    then
@@ -2146,61 +2146,61 @@ do
 	    else
 		params="${actual}"
 	    fi
-        fi
+	fi
        	if [ "x${returntype}" = "xvoid" ]
 	then
-	  printf "  gdbarch->${function} (${params});\n"
+	  printf "  gdbarch->%s (%s);\n" "$function" "$params"
 	else
-	  printf "  return gdbarch->${function} (${params});\n"
+	  printf "  return gdbarch->%s (%s);\n" "$function" "$params"
 	fi
 	printf "}\n"
 	printf "\n"
 	printf "void\n"
-	printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
-        printf "            `echo ${function} | sed -e 's/./ /g'`  gdbarch_${function}_ftype ${function})\n"
+	printf "set_gdbarch_%s (struct gdbarch *gdbarch,\n" "$function"
+	printf "            %s  gdbarch_%s_ftype %s)\n" "$(echo "$function" | sed -e 's/./ /g')" "$function" "$function"
 	printf "{\n"
-	printf "  gdbarch->${function} = ${function};\n"
+	printf "  gdbarch->%s = %s;\n" "$function" "$function"
 	printf "}\n"
     elif class_is_variable_p
     then
 	printf "\n"
-	printf "${returntype}\n"
-	printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
+	printf "%s\n" "$returntype"
+	printf "gdbarch_%s (struct gdbarch *gdbarch)\n" "$function"
 	printf "{\n"
-        printf "  gdb_assert (gdbarch != NULL);\n"
+	printf "  gdb_assert (gdbarch != NULL);\n"
 	if [ "x${invalid_p}" = "x0" ]
 	then
-	    printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
+	    printf "  /* Skip verify of %s, invalid_p == 0 */\n" "$function"
 	elif [ -n "${invalid_p}" ]
 	then
 	    printf "  /* Check variable is valid.  */\n"
-	    printf "  gdb_assert (!(${invalid_p}));\n"
+	    printf "  gdb_assert (!(%s));\n" "$invalid_p"
 	elif [ -n "${predefault}" ]
 	then
 	    printf "  /* Check variable changed from pre-default.  */\n"
-	    printf "  gdb_assert (gdbarch->${function} != ${predefault});\n"
+	    printf "  gdb_assert (gdbarch->%s != %s);\n" "$function" "$predefault"
 	fi
 	printf "  if (gdbarch_debug >= 2)\n"
-	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
-	printf "  return gdbarch->${function};\n"
+	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_%s called\\\\n\");\n" "$function"
+	printf "  return gdbarch->%s;\n" "$function"
 	printf "}\n"
 	printf "\n"
 	printf "void\n"
-	printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
-        printf "            `echo ${function} | sed -e 's/./ /g'`  ${returntype} ${function})\n"
+	printf "set_gdbarch_%s (struct gdbarch *gdbarch,\n" "$function"
+	printf "            %s  %s %s)\n" "$(echo "$function" | sed -e 's/./ /g')" "$returntype" "$function"
 	printf "{\n"
-	printf "  gdbarch->${function} = ${function};\n"
+	printf "  gdbarch->%s = %s;\n" "$function" "$function"
 	printf "}\n"
     elif class_is_info_p
     then
 	printf "\n"
-	printf "${returntype}\n"
-	printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
+	printf "%s\n" "$returntype"
+	printf "gdbarch_%s (struct gdbarch *gdbarch)\n" "$function"
 	printf "{\n"
-        printf "  gdb_assert (gdbarch != NULL);\n"
+	printf "  gdb_assert (gdbarch != NULL);\n"
 	printf "  if (gdbarch_debug >= 2)\n"
-	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
-	printf "  return gdbarch->${function};\n"
+	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_%s called\\\\n\");\n" "$function"
+	printf "  return gdbarch->%s;\n" "$function"
 	printf "}\n"
     fi
 done
@@ -2232,7 +2232,7 @@ struct gdbarch_data_registry
   struct gdbarch_data_registration *registrations;
 };
 
-struct gdbarch_data_registry gdbarch_data_registry =
+static struct gdbarch_data_registry gdbarch_data_registry =
 {
   0, NULL,
 };
@@ -2279,20 +2279,6 @@ alloc_gdbarch_data (struct gdbarch *gdba
   gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
 }
 
-/* Initialize the current value of the specified per-architecture
-   data-pointer.  */
-
-void
-deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-			     struct gdbarch_data *data,
-			     void *pointer)
-{
-  gdb_assert (data->index < gdbarch->nr_data);
-  gdb_assert (gdbarch->data[data->index] == NULL);
-  gdb_assert (data->pre_init == NULL);
-  gdbarch->data[data->index] = pointer;
-}
-
 /* Return the current value of the specified per-architecture
    data-pointer.  */
 
@@ -2322,11 +2308,9 @@ gdbarch_data (struct gdbarch *gdbarch, s
 	  data->init_p = 1;
 	}
       else
-	/* The architecture initialization hasn't completed - punt -
-	 hope that the caller knows what they are doing.  Once
-	 deprecated_set_gdbarch_data has been initialized, this can be
-	 changed to an internal error.  */
-	return NULL;
+	internal_error (__FILE__, __LINE__,
+			_("gdbarch post-init data field can only be used "
+			  "after gdbarch is fully initialised"));
       gdb_assert (gdbarch->data[data->index] != NULL);
     }
   return gdbarch->data[data->index];
@@ -2370,13 +2354,13 @@ gdbarch_printable_names (void)
       const struct bfd_arch_info *ap;
       ap = bfd_lookup_arch (rego->bfd_architecture, 0);
       if (ap == NULL)
-        internal_error (__FILE__, __LINE__,
-                        _("gdbarch_architecture_names: multi-arch unknown"));
+	internal_error (__FILE__, __LINE__,
+			_("gdbarch_architecture_names: multi-arch unknown"));
       do
-        {
-          append_name (&arches, &nr_arches, ap->printable_name);
-          ap = ap->next;
-        }
+	{
+	  append_name (&arches, &nr_arches, ap->printable_name);
+	  ap = ap->next;
+	}
       while (ap != NULL);
     }
   append_name (&arches, &nr_arches, NULL);
@@ -2386,7 +2370,7 @@ gdbarch_printable_names (void)
 
 void
 gdbarch_register (enum bfd_architecture bfd_architecture,
-                  gdbarch_init_ftype *init,
+		  gdbarch_init_ftype *init,
 		  gdbarch_dump_tdep_ftype *dump_tdep)
 {
   struct gdbarch_registration **curr;
@@ -2397,9 +2381,9 @@ gdbarch_register (enum bfd_architecture
   if (bfd_arch_info == NULL)
     {
       internal_error (__FILE__, __LINE__,
-                      _("gdbarch: Attempt to register "
+		      _("gdbarch: Attempt to register "
 			"unknown architecture (%d)"),
-                      bfd_architecture);
+		      bfd_architecture);
     }
   /* Check that we haven't seen this architecture before.  */
   for (curr = &gdbarch_registry;
@@ -2408,9 +2392,9 @@ gdbarch_register (enum bfd_architecture
     {
       if (bfd_architecture == (*curr)->bfd_architecture)
 	internal_error (__FILE__, __LINE__,
-                        _("gdbarch: Duplicate registration "
+			_("gdbarch: Duplicate registration "
 			  "of architecture (%s)"),
-	                bfd_arch_info->printable_name);
+			bfd_arch_info->printable_name);
     }
   /* log it */
   if (gdbarch_debug)
@@ -2438,7 +2422,7 @@ register_gdbarch_init (enum bfd_architec
 
 struct gdbarch_list *
 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
-                             const struct gdbarch_info *info)
+			     const struct gdbarch_info *info)
 {
   for (; arches != NULL; arches = arches->next)
     {
@@ -2492,9 +2476,6 @@ gdbarch_find_by_info (struct gdbarch_inf
       fprintf_unfiltered (gdb_stdlog,
 			  "gdbarch_find_by_info: info.abfd %s\n",
 			  host_address_to_string (info.abfd));
-      fprintf_unfiltered (gdb_stdlog,
-			  "gdbarch_find_by_info: info.tdep_info %s\n",
-			  host_address_to_string (info.tdep_info));
     }
 
   /* Find the tdep code that knows about this architecture.  */
@@ -2600,20 +2581,21 @@ target_gdbarch (void)
   return current_inferior ()->gdbarch;
 }
 
+void _initialize_gdbarch ();
 void
-_initialize_gdbarch (void)
+_initialize_gdbarch ()
 {
   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);
+			    NULL,
+			    show_gdbarch_debug,
+			    &setdebuglist, &showdebuglist);
 }
 EOF
 
 # close things off
 exec 1>&2
-#../move-if-change new-gdbarch.c gdbarch.c
-compare_new gdbarch.c
+../move-if-change new-gdbarch.c gdbarch.c
+rm -f new-gdbarch.c
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_bfd.c ./gdb/gdb_bfd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_bfd.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_bfd.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for BFD wrappers used by GDB.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -59,26 +59,16 @@ static htab_t all_bfds;
 
 struct gdb_bfd_data
 {
-  gdb_bfd_data (bfd *abfd)
-    : mtime (bfd_get_mtime (abfd)),
-      size (bfd_get_size (abfd)),
+  /* Note that if ST is nullptr, then we simply fill in zeroes.  */
+  gdb_bfd_data (bfd *abfd, struct stat *st)
+    : mtime (st == nullptr ? 0 : st->st_mtime),
+      size (st == nullptr ? 0 : st->st_size),
+      inode (st == nullptr ? 0 : st->st_ino),
+      device_id (st == nullptr ? 0 : st->st_dev),
       relocation_computed (0),
       needs_relocations (0),
       crc_computed (0)
   {
-    struct stat buf;
-
-    if (bfd_stat (abfd, &buf) == 0)
-      {
-	inode = buf.st_ino;
-	device_id = buf.st_dev;
-      }
-    else
-      {
-	/* The stat failed.  */
-	inode = 0;
-	device_id = 0;
-      }
   }
 
   ~gdb_bfd_data ()
@@ -144,9 +134,15 @@ show_bfd_sharing  (struct ui_file *file,
   fprintf_filtered (file, _("BFD sharing is %s.\n"), value);
 }
 
-/* When non-zero debugging of the bfd caches is enabled.  */
+/* When true debugging of the bfd caches is enabled.  */
+
+static bool debug_bfd_cache;
+
+/* Print an "bfd-cache" debug statement.  */
+
+#define bfd_cache_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_bfd_cache, "bfd-cache", fmt, ##__VA_ARGS__)
 
-static unsigned int debug_bfd_cache;
 static void
 show_bfd_cache_debug (struct ui_file *file, int from_tty,
 		      struct cmd_list_element *c, const char *value)
@@ -217,6 +213,91 @@ gdb_bfd_has_target_filename (struct bfd
   return is_target_filename (bfd_get_filename (abfd));
 }
 
+/* For `gdb_bfd_open_from_target_memory`.  */
+
+struct target_buffer
+{
+  CORE_ADDR base;
+  ULONGEST size;
+};
+
+/* For `gdb_bfd_open_from_target_memory`.  Opening the file is a no-op.  */
+
+static void *
+mem_bfd_iovec_open (struct bfd *abfd, void *open_closure)
+{
+  return open_closure;
+}
+
+/* For `gdb_bfd_open_from_target_memory`.  Closing the file is just freeing the
+   base/size pair on our side.  */
+
+static int
+mem_bfd_iovec_close (struct bfd *abfd, void *stream)
+{
+  xfree (stream);
+
+  /* Zero means success.  */
+  return 0;
+}
+
+/* For `gdb_bfd_open_from_target_memory`.  For reading the file, we just need to
+   pass through to target_read_memory and fix up the arguments and return
+   values.  */
+
+static file_ptr
+mem_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
+		     file_ptr nbytes, file_ptr offset)
+{
+  int err;
+  struct target_buffer *buffer = (struct target_buffer *) stream;
+
+  /* If this read will read all of the file, limit it to just the rest.  */
+  if (offset + nbytes > buffer->size)
+    nbytes = buffer->size - offset;
+
+  /* If there are no more bytes left, we've reached EOF.  */
+  if (nbytes == 0)
+    return 0;
+
+  err = target_read_memory (buffer->base + offset, (gdb_byte *) buf, nbytes);
+  if (err)
+    return -1;
+
+  return nbytes;
+}
+
+/* For `gdb_bfd_open_from_target_memory`.  For statting the file, we only
+   support the st_size attribute.  */
+
+static int
+mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
+{
+  struct target_buffer *buffer = (struct target_buffer*) stream;
+
+  memset (sb, 0, sizeof (struct stat));
+  sb->st_size = buffer->size;
+  return 0;
+}
+
+/* See gdb_bfd.h.  */
+
+gdb_bfd_ref_ptr
+gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
+				 const char *target,
+				 const char *filename)
+{
+  struct target_buffer *buffer = XNEW (struct target_buffer);
+
+  buffer->base = addr;
+  buffer->size = size;
+  return gdb_bfd_openr_iovec (filename ? filename : "<in-memory>", target,
+			      mem_bfd_iovec_open,
+			      buffer,
+			      mem_bfd_iovec_pread,
+			      mem_bfd_iovec_close,
+			      mem_bfd_iovec_stat);
+}
 
 /* Return the system error number corresponding to ERRNUM.  */
 
@@ -226,69 +307,75 @@ fileio_errno_to_host (int errnum)
   switch (errnum)
     {
       case FILEIO_EPERM:
-        return EPERM;
+	return EPERM;
       case FILEIO_ENOENT:
-        return ENOENT;
+	return ENOENT;
       case FILEIO_EINTR:
-        return EINTR;
+	return EINTR;
       case FILEIO_EIO:
-        return EIO;
+	return EIO;
       case FILEIO_EBADF:
-        return EBADF;
+	return EBADF;
       case FILEIO_EACCES:
-        return EACCES;
+	return EACCES;
       case FILEIO_EFAULT:
-        return EFAULT;
+	return EFAULT;
       case FILEIO_EBUSY:
-        return EBUSY;
+	return EBUSY;
       case FILEIO_EEXIST:
-        return EEXIST;
+	return EEXIST;
       case FILEIO_ENODEV:
-        return ENODEV;
+	return ENODEV;
       case FILEIO_ENOTDIR:
-        return ENOTDIR;
+	return ENOTDIR;
       case FILEIO_EISDIR:
-        return EISDIR;
+	return EISDIR;
       case FILEIO_EINVAL:
-        return EINVAL;
+	return EINVAL;
       case FILEIO_ENFILE:
-        return ENFILE;
+	return ENFILE;
       case FILEIO_EMFILE:
-        return EMFILE;
+	return EMFILE;
       case FILEIO_EFBIG:
-        return EFBIG;
+	return EFBIG;
       case FILEIO_ENOSPC:
-        return ENOSPC;
+	return ENOSPC;
       case FILEIO_ESPIPE:
-        return ESPIPE;
+	return ESPIPE;
       case FILEIO_EROFS:
-        return EROFS;
+	return EROFS;
       case FILEIO_ENOSYS:
-        return ENOSYS;
+	return ENOSYS;
       case FILEIO_ENAMETOOLONG:
-        return ENAMETOOLONG;
+	return ENAMETOOLONG;
     }
   return -1;
 }
 
+/* bfd_openr_iovec OPEN_CLOSURE data for gdb_bfd_open.  */
+struct gdb_bfd_open_closure
+{
+  inferior *inf;
+  bool warn_if_slow;
+};
+
 /* Wrapper for target_fileio_open suitable for passing as the
-   OPEN_FUNC argument to gdb_bfd_openr_iovec.  The supplied
-   OPEN_CLOSURE is unused.  */
+   OPEN_FUNC argument to gdb_bfd_openr_iovec.  */
 
 static void *
-gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *inferior)
+gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure)
 {
   const char *filename = bfd_get_filename (abfd);
   int fd, target_errno;
   int *stream;
+  gdb_bfd_open_closure *oclosure = (gdb_bfd_open_closure *) open_closure;
 
   gdb_assert (is_target_filename (filename));
 
-  fd = target_fileio_open_warn_if_slow ((struct inferior *) inferior,
-					filename
-					+ strlen (TARGET_SYSROOT_PREFIX),
-					FILEIO_O_RDONLY, 0,
-					&target_errno);
+  fd = target_fileio_open (oclosure->inf,
+			   filename + strlen (TARGET_SYSROOT_PREFIX),
+			   FILEIO_O_RDONLY, 0, oclosure->warn_if_slow,
+			   &target_errno);
   if (fd == -1)
     {
       errno = fileio_errno_to_host (target_errno);
@@ -321,8 +408,8 @@ gdb_bfd_iovec_fileio_pread (struct bfd *
 				   nbytes - pos, offset + pos,
 				   &target_errno);
       if (bytes == 0)
-        /* Success, but no bytes, means end-of-file.  */
-        break;
+	/* Success, but no bytes, means end-of-file.  */
+	break;
       if (bytes == -1)
 	{
 	  errno = fileio_errno_to_host (target_errno);
@@ -336,6 +423,15 @@ gdb_bfd_iovec_fileio_pread (struct bfd *
   return pos;
 }
 
+/* Warn that it wasn't possible to close a bfd for file NAME, because
+   of REASON.  */
+
+static void
+gdb_bfd_close_warning (const char *name, const char *reason)
+{
+  warning (_("cannot close \"%s\": %s"), name, reason);
+}
+
 /* Wrapper for target_fileio_close suitable for passing as the
    CLOSE_FUNC argument to gdb_bfd_openr_iovec.  */
 
@@ -349,7 +445,16 @@ gdb_bfd_iovec_fileio_close (struct bfd *
 
   /* Ignore errors on close.  These may happen with remote
      targets if the connection has already been torn down.  */
-  target_fileio_close (fd, &target_errno);
+  try
+    {
+      target_fileio_close (fd, &target_errno);
+    }
+  catch (const gdb_exception &ex)
+    {
+      /* Also avoid crossing exceptions over bfd.  */
+      gdb_bfd_close_warning (bfd_get_filename (abfd),
+			     ex.message->c_str ());
+    }
 
   /* Zero means success.  */
   return 0;
@@ -376,10 +481,35 @@ gdb_bfd_iovec_fileio_fstat (struct bfd *
   return result;
 }
 
+/* A helper function to initialize the data that gdb attaches to each
+   BFD.  */
+
+static void
+gdb_bfd_init_data (struct bfd *abfd, struct stat *st)
+{
+  struct gdb_bfd_data *gdata;
+  void **slot;
+
+  gdb_assert (bfd_usrdata (abfd) == nullptr);
+
+  /* Ask BFD to decompress sections in bfd_get_full_section_contents.  */
+  abfd->flags |= BFD_DECOMPRESS;
+
+  gdata = new gdb_bfd_data (abfd, st);
+  bfd_set_usrdata (abfd, gdata);
+  bfd_alloc_data (abfd);
+
+  /* This is the first we've seen it, so add it to the hash table.  */
+  slot = htab_find_slot (all_bfds, abfd, INSERT);
+  gdb_assert (slot && !*slot);
+  *slot = abfd;
+}
+
 /* See gdb_bfd.h.  */
 
 gdb_bfd_ref_ptr
-gdb_bfd_open (const char *name, const char *target, int fd)
+gdb_bfd_open (const char *name, const char *target, int fd,
+	      bool warn_if_slow)
 {
   hashval_t hash;
   void **slot;
@@ -393,9 +523,10 @@ gdb_bfd_open (const char *name, const ch
 	{
 	  gdb_assert (fd == -1);
 
+	  gdb_bfd_open_closure open_closure { current_inferior (), warn_if_slow };
 	  return gdb_bfd_openr_iovec (name, target,
 				      gdb_bfd_iovec_fileio_open,
-				      current_inferior (),
+				      &open_closure,
 				      gdb_bfd_iovec_fileio_pread,
 				      gdb_bfd_iovec_fileio_close,
 				      gdb_bfd_iovec_fileio_fstat);
@@ -418,23 +549,22 @@ gdb_bfd_open (const char *name, const ch
 	}
     }
 
-  search.filename = name;
   if (fstat (fd, &st) < 0)
     {
-      /* Weird situation here.  */
-      search.mtime = 0;
-      search.size = 0;
-      search.inode = 0;
-      search.device_id = 0;
-    }
-  else
-    {
-      search.mtime = st.st_mtime;
-      search.size = st.st_size;
-      search.inode = st.st_ino;
-      search.device_id = st.st_dev;
+      /* Weird situation here -- don't cache if we can't stat.  */
+      bfd_cache_debug_printf ("Could not stat %s - not caching", name);
+      abfd = bfd_fopen (name, target, FOPEN_RB, fd);
+      if (abfd == nullptr)
+	return nullptr;
+      return gdb_bfd_ref_ptr::new_reference (abfd);
     }
 
+  search.filename = name;
+  search.mtime = st.st_mtime;
+  search.size = st.st_size;
+  search.inode = st.st_ino;
+  search.device_id = st.st_dev;
+
   /* Note that this must compute the same result as hash_bfd.  */
   hash = htab_hash_string (name);
   /* Note that we cannot use htab_find_slot_with_hash here, because
@@ -443,11 +573,9 @@ gdb_bfd_open (const char *name, const ch
   abfd = (struct bfd *) htab_find_with_hash (gdb_bfd_cache, &search, hash);
   if (bfd_sharing && abfd != NULL)
     {
-      if (debug_bfd_cache)
-	fprintf_unfiltered (gdb_stdlog,
-			    "Reusing cached bfd %s for %s\n",
-			    host_address_to_string (abfd),
-			    bfd_get_filename (abfd));
+      bfd_cache_debug_printf ("Reusing cached bfd %s for %s",
+			      host_address_to_string (abfd),
+			      bfd_get_filename (abfd));
       close (fd);
       return gdb_bfd_ref_ptr::new_reference (abfd);
     }
@@ -456,11 +584,9 @@ gdb_bfd_open (const char *name, const ch
   if (abfd == NULL)
     return NULL;
 
-  if (debug_bfd_cache)
-    fprintf_unfiltered (gdb_stdlog,
-			"Creating new bfd %s for %s\n",
-			host_address_to_string (abfd),
-			bfd_get_filename (abfd));
+  bfd_cache_debug_printf ("Creating new bfd %s for %s",
+			  host_address_to_string (abfd),
+			  bfd_get_filename (abfd));
 
   if (bfd_sharing)
     {
@@ -469,14 +595,21 @@ gdb_bfd_open (const char *name, const ch
       *slot = abfd;
     }
 
-  return gdb_bfd_ref_ptr::new_reference (abfd);
+  /* It's important to pass the already-computed stat info here,
+     rather than, say, calling gdb_bfd_ref_ptr::new_reference.  BFD by
+     default will "stat" the file each time bfd_get_mtime is called --
+     and since we already entered it into the hash table using this
+     mtime, if the file changed at the wrong moment, the race would
+     lead to a hash table corruption.  */
+  gdb_bfd_init_data (abfd, &st);
+  return gdb_bfd_ref_ptr (abfd);
 }
 
 /* A helper function that releases any section data attached to the
    BFD.  */
 
 static void
-free_one_bfd_section (bfd *abfd, asection *sectp, void *ignore)
+free_one_bfd_section (asection *sectp)
 {
   struct gdb_bfd_section_data *sect
     = (struct gdb_bfd_section_data *) bfd_section_userdata (sectp);
@@ -505,13 +638,14 @@ gdb_bfd_close_or_warn (struct bfd *abfd)
   int ret;
   const char *name = bfd_get_filename (abfd);
 
-  bfd_map_over_sections (abfd, free_one_bfd_section, NULL);
+  for (asection *sect : gdb_bfd_sections (abfd))
+    free_one_bfd_section (sect);
 
   ret = bfd_close (abfd);
 
   if (!ret)
-    warning (_("cannot close \"%s\": %s"),
-	     name, bfd_errmsg (bfd_get_error ()));
+    gdb_bfd_close_warning (name,
+			   bfd_errmsg (bfd_get_error ()));
 
   return ret;
 }
@@ -522,18 +656,15 @@ void
 gdb_bfd_ref (struct bfd *abfd)
 {
   struct gdb_bfd_data *gdata;
-  void **slot;
 
   if (abfd == NULL)
     return;
 
   gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
 
-  if (debug_bfd_cache)
-    fprintf_unfiltered (gdb_stdlog,
-			"Increase reference count on bfd %s (%s)\n",
-			host_address_to_string (abfd),
-			bfd_get_filename (abfd));
+  bfd_cache_debug_printf ("Increase reference count on bfd %s (%s)",
+			  host_address_to_string (abfd),
+			  bfd_get_filename (abfd));
 
   if (gdata != NULL)
     {
@@ -541,17 +672,9 @@ gdb_bfd_ref (struct bfd *abfd)
       return;
     }
 
-  /* Ask BFD to decompress sections in bfd_get_full_section_contents.  */
-  abfd->flags |= BFD_DECOMPRESS;
-
-  gdata = new gdb_bfd_data (abfd);
-  bfd_set_usrdata (abfd, gdata);
-  bfd_alloc_data (abfd);
-
-  /* This is the first we've seen it, so add it to the hash table.  */
-  slot = htab_find_slot (all_bfds, abfd, INSERT);
-  gdb_assert (slot && !*slot);
-  *slot = abfd;
+  /* Caching only happens via gdb_bfd_open, so passing nullptr here is
+     fine.  */
+  gdb_bfd_init_data (abfd, nullptr);
 }
 
 /* See gdb_bfd.h.  */
@@ -572,19 +695,15 @@ gdb_bfd_unref (struct bfd *abfd)
   gdata->refc -= 1;
   if (gdata->refc > 0)
     {
-      if (debug_bfd_cache)
-	fprintf_unfiltered (gdb_stdlog,
-			    "Decrease reference count on bfd %s (%s)\n",
-			    host_address_to_string (abfd),
-			    bfd_get_filename (abfd));
+      bfd_cache_debug_printf ("Decrease reference count on bfd %s (%s)",
+			      host_address_to_string (abfd),
+			      bfd_get_filename (abfd));
       return;
     }
 
-  if (debug_bfd_cache)
-    fprintf_unfiltered (gdb_stdlog,
-			"Delete final reference count on bfd %s (%s)\n",
-			host_address_to_string (abfd),
-			bfd_get_filename (abfd));
+  bfd_cache_debug_printf ("Delete final reference count on bfd %s (%s)",
+			  host_address_to_string (abfd),
+			  bfd_get_filename (abfd));
 
   archive_bfd = gdata->archive_bfd;
   search.filename = bfd_get_filename (abfd);
@@ -926,7 +1045,19 @@ gdb_bfd_requires_relocations (bfd *abfd)
   return gdata->needs_relocations;
 }
 
-
+/* See gdb_bfd.h.  */
+
+bool
+gdb_bfd_get_full_section_contents (bfd *abfd, asection *section,
+				   gdb::byte_vector *contents)
+{
+  bfd_size_type section_size = bfd_section_size (section);
+
+  contents->resize (section_size);
+
+  return bfd_get_section_contents (abfd, section, contents->data (), 0,
+				   section_size);
+}
 
 /* A callback for htab_traverse that prints a single BFD.  */
 
@@ -962,8 +1093,9 @@ maintenance_info_bfds (const char *arg,
   htab_traverse (all_bfds, print_one_bfd, uiout);
 }
 
+void _initialize_gdb_bfd ();
 void
-_initialize_gdb_bfd (void)
+_initialize_gdb_bfd ()
 {
   all_bfds = htab_create_alloc (10, htab_hash_pointer, htab_eq_pointer,
 				NULL, xcalloc, xfree);
@@ -984,12 +1116,13 @@ filename, file size, file modification t
 			   &maintenance_set_cmdlist,
 			   &maintenance_show_cmdlist);
 
-  add_setshow_zuinteger_cmd ("bfd-cache", class_maintenance,
-			     &debug_bfd_cache, _("\
-Set bfd cache debugging."), _("\
-Show bfd cache debugging."), _("\
+  add_setshow_boolean_cmd ("bfd-cache", class_maintenance,
+			   &debug_bfd_cache,
+			   _("Set bfd cache debugging."),
+			   _("Show bfd cache debugging."),
+			   _("\
 When non-zero, bfd cache specific debugging is enabled."),
-			     NULL,
-			     &show_bfd_cache_debug,
-			     &setdebuglist, &showdebuglist);
+			   NULL,
+			   &show_bfd_cache_debug,
+			   &setdebuglist, &showdebuglist);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_bfd.h ./gdb/gdb_bfd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_bfd.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_bfd.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for BFD wrappers used by GDB.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,9 @@
 #define GDB_BFD_H
 
 #include "registry.h"
+#include "gdbsupport/byte-vector.h"
 #include "gdbsupport/gdb_ref_ptr.h"
+#include "gdbsupport/next-iterator.h"
 
 DECLARE_REGISTRY (bfd);
 
@@ -77,9 +79,12 @@ typedef gdb::ref_ptr<struct bfd, gdb_bfd
    If the BFD was not accessed using target fileio operations then the
    filename associated with the BFD and accessible with
    bfd_get_filename will not be exactly NAME but rather NAME with
-   TARGET_SYSROOT_PREFIX stripped.  */
+   TARGET_SYSROOT_PREFIX stripped.  If WARN_IF_SLOW is true, print a
+   warning message if the file is being accessed over a link that may
+   be slow.  */
 
-gdb_bfd_ref_ptr gdb_bfd_open (const char *name, const char *target, int fd);
+gdb_bfd_ref_ptr gdb_bfd_open (const char *name, const char *target,
+			      int fd = -1, bool warn_if_slow = true);
 
 /* Mark the CHILD BFD as being a member of PARENT.  Also, increment
    the reference count of CHILD.  Calling this function ensures that
@@ -181,4 +186,41 @@ int gdb_bfd_count_sections (bfd *abfd);
 
 int gdb_bfd_requires_relocations (bfd *abfd);
 
+/* Alternative to bfd_get_full_section_contents that returns the section
+   contents in *CONTENTS, instead of an allocated buffer.
+
+   Return true on success, false otherwise.  */
+
+bool gdb_bfd_get_full_section_contents (bfd *abfd, asection *section,
+					gdb::byte_vector *contents);
+
+/* Create and initialize a BFD handle from a target in-memory range.  */
+
+gdb_bfd_ref_ptr gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
+						 const char *target,
+						 const char *filename = nullptr);
+
+/* Range adapter for a BFD's sections.
+
+   To be used as:
+
+     for (asection *sect : gdb_bfd_all_sections (bfd))
+       ... use SECT ...
+ */
+
+using gdb_bfd_section_iterator = next_iterator<asection>;
+using gdb_bfd_section_range = next_adapter<asection, gdb_bfd_section_iterator>;
+
+static inline gdb_bfd_section_range
+gdb_bfd_sections (bfd *abfd)
+{
+  return gdb_bfd_section_range (abfd->sections);
+}
+
+static inline gdb_bfd_section_range
+gdb_bfd_sections (const gdb_bfd_ref_ptr &abfd)
+{
+  return gdb_bfd_section_range (abfd->sections);
+};
+
 #endif /* GDB_BFD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_buildall.sh ./gdb/gdb_buildall.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_buildall.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_buildall.sh	2021-12-16 01:57:39.000000000 +0000
@@ -2,7 +2,7 @@
 
 # Build script to build GDB with all targets enabled.
 
-# Copyright (C) 2008-2020 Free Software Foundation, Inc.
+# Copyright (C) 2008-2021 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
@@ -39,7 +39,7 @@ Options:
   -e <regexp>    Regular expression for selecting the targets to build.
   --force        Force rebuild.
   -j <makejobs>  Run <makejobs> in parallel.  Passed to make.
-                 On a single cpu machine, 2 is recommended.
+		 On a single cpu machine, 2 is recommended.
  Arguments:
    <srcdir>       Source code directory.
    <builddir>     Build directory.
@@ -66,9 +66,9 @@ do
       makejobs="-j $1"
       ;;
       --clean )
-        # Shall the build directory be deleted after processing?
-        clean=true
-        ;;
+	# Shall the build directory be deleted after processing?
+	clean=true
+	;;
     -e )
       # A regular expression for selecting targets
       shift
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb.c ./gdb/gdb.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Main function for CLI gdb.  
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbcmd.h ./gdb/gdbcmd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbcmd.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbcmd.h	2021-12-16 01:57:39.000000000 +0000
@@ -6,7 +6,7 @@
    fnasser@redhat.com    */
 
 /* Header file for GDB-specific command-line stuff.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 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
@@ -134,9 +134,12 @@ extern struct cmd_list_element *save_cmd
 
 extern void execute_command (const char *, int);
 
-/* Execute command P and returns its output.  If TERM_OUT,
-   the output is built using terminal output behaviour such
-   as cli_styling.  */
+/* Run execute_command for P and FROM_TTY.  Capture its output into the
+   returned string, do not display it to the screen.  The global BATCH_FLAG
+   will temporarily be set to true.  When TERM_OUT is true the output is
+   collected with terminal behaviour (e.g. with styling).  When TERM_OUT is
+   false raw output will be collected (e.g. no styling).  */
+
 extern std::string execute_command_to_string (const char *p, int from_tty,
 					      bool term_out);
 extern void execute_command_to_ui_file (struct ui_file *file,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-code-style.el ./gdb/gdb-code-style.el
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-code-style.el	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb-code-style.el	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 ;;; gdb-code-style.el --- code style checker for GDB contributors
 
-;; Copyright (C) 2012-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
 ;; Author: Yao Qi <yao@codesourcery.com>
 ;; Created: 17 April 2012
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbcore.h ./gdb/gdbcore.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbcore.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbcore.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Machine independent variables that describe the core file under GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -87,12 +87,6 @@ extern ULONGEST read_code_unsigned_integ
 					    int len,
 					    enum bfd_endian byte_order);
 
-/* Read a null-terminated string from the debuggee's memory, given
-   address, a buffer into which to place the string, and the maximum
-   available space.  */
-
-extern void read_memory_string (CORE_ADDR, char *, int);
-
 /* Read the pointer of type TYPE at ADDR, and return the address it
    represents.  */
 
@@ -112,13 +106,13 @@ extern void write_memory_with_notificati
 
 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned integer.  */
 extern void write_memory_unsigned_integer (CORE_ADDR addr, int len,
-                                           enum bfd_endian byte_order,
+					   enum bfd_endian byte_order,
 					   ULONGEST value);
 
 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned integer.  */
 extern void write_memory_signed_integer (CORE_ADDR addr, int len,
-                                         enum bfd_endian byte_order,
-                                         LONGEST value);
+					 enum bfd_endian byte_order,
+					 LONGEST value);
 
 /* Hook for `exec_file_command' command to call.  */
 
@@ -157,75 +151,17 @@ extern void exec_file_locate_attach (int
 
 extern void validate_files (void);
 
+/* Give the user a message if the current exec file does not match the exec
+   file determined from the target.  In case of mismatch, ask the user
+   if the exec file determined from target must be loaded.  */
+extern void validate_exec_file (int from_tty);
+
 /* The current default bfd target.  */
 
-extern char *gnutarget;
+extern const char *gnutarget;
 
 extern void set_gnutarget (const char *);
 
-/* Structure to keep track of core register reading functions for
-   various core file types.  */
-
-struct core_fns
-  {
-
-    /* BFD flavour that a core file handler is prepared to read.  This
-       can be used by the handler's core tasting function as a first
-       level filter to reject BFD's that don't have the right
-       flavour.  */
-
-    enum bfd_flavour core_flavour;
-
-    /* Core file handler function to call to recognize corefile
-       formats that BFD rejects.  Some core file format just don't fit
-       into the BFD model, or may require other resources to identify
-       them, that simply aren't available to BFD (such as symbols from
-       another file).  Returns nonzero if the handler recognizes the
-       format, zero otherwise.  */
-
-    int (*check_format) (bfd *);
-
-    /* Core file handler function to call to ask if it can handle a
-       given core file format or not.  Returns zero if it can't,
-       nonzero otherwise.  */
-
-    int (*core_sniffer) (struct core_fns *, bfd *);
-
-    /* Extract the register values out of the core file and supply them
-       into REGCACHE.
-
-       CORE_REG_SECT points to the register values themselves, read into
-       memory.
-
-       CORE_REG_SIZE is the size of that area.
-
-       WHICH says which set of registers we are handling:
-         0 --- integer registers
-         2 --- floating-point registers, on machines where they are
-               discontiguous
-         3 --- extended floating-point registers, on machines where
-               these are present in yet a third area.  (GNU/Linux uses
-               this to get at the SSE registers.)
-
-       REG_ADDR is the offset from u.u_ar0 to the register values relative to
-       core_reg_sect.  This is used with old-fashioned core files to locate the
-       registers in a large upage-plus-stack ".reg" section.  Original upage
-       address X is at location core_reg_sect+x+reg_addr.  */
-
-    void (*core_read_registers) (struct regcache *regcache,
-				 char *core_reg_sect,
-				 unsigned core_reg_size,
-				 int which, CORE_ADDR reg_addr);
-
-    /* Finds the next struct core_fns.  They are allocated and
-       initialized in whatever module implements the functions pointed
-       to; an initializer calls deprecated_add_core_fns to add them to
-       the global chain.  */
-
-    struct core_fns *next;
-
-  };
-
 /* Build either a single-thread or multi-threaded section name for
    PTID.
 
@@ -269,10 +205,4 @@ private:
   std::string m_storage;
 };
 
-/* NOTE: cagney/2004-04-05: Replaced by "regset.h" and
-   regset_from_core_section().  */
-extern void deprecated_add_core_fns (struct core_fns *cf);
-extern int default_core_sniffer (struct core_fns *cf, bfd * abfd);
-extern int default_check_format (bfd * abfd);
-
 #endif /* !defined (GDBCORE_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_curses.h ./gdb/gdb_curses.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_curses.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_curses.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Portable <curses.h>.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-demangle.c ./gdb/gdb-demangle.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-demangle.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb-demangle.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Basic C++ demangling support for GDB.
 
-   Copyright (C) 1991-2020 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    Written by Fred Fish at Cygnus Support.
 
@@ -212,8 +212,9 @@ demangle_command (const char *args, int
     error (_("Can't demangle \"%s\""), name);
 }
 
+void _initialize_gdb_demangle ();
 void
-_initialize_gdb_demangle (void)
+_initialize_gdb_demangle ()
 {
   int i, ndems;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-demangle.h ./gdb/gdb-demangle.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-demangle.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb-demangle.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Basic C++ demangling support for GDB.
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_expat.h ./gdb/gdb_expat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_expat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_expat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Slightly more portable version of <expat.h>.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-gdb.gdb.in ./gdb/gdb-gdb.gdb.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-gdb.gdb.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb-gdb.gdb.in	2021-12-16 01:57:39.000000000 +0000
@@ -7,9 +7,12 @@ if !$gdb_init_done
 
   b internal_error
 
+  # This provides an easy way to break into the top-level GDB by
+  # typing "info".
   b info_command
   commands
     silent
+    # This avoids the voluminous output of "info".
     return
   end
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-gdb.py.in ./gdb/gdb-gdb.py.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-gdb.py.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb-gdb.py.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2009-2020 Free Software Foundation, Inc.
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
 #
 # This file is part of GDB.
 #
@@ -39,7 +39,7 @@ class TypeFlag:
     def __init__(self, name, value):
         self.name = name
         self.value = value
-        self.short_name = name.replace("TYPE_INSTANCE_FLAG_", '')
+        self.short_name = name.replace("TYPE_INSTANCE_FLAG_", "")
 
     def __lt__(self, other):
         """Sort by value order."""
@@ -73,8 +73,9 @@ class TypeFlagsPrinter:
         if not self.val:
             return "0"
         if TYPE_FLAGS:
-            flag_list = [flag.short_name for flag in TYPE_FLAGS
-                         if self.val & flag.value]
+            flag_list = [
+                flag.short_name for flag in TYPE_FLAGS if self.val & flag.value
+            ]
         else:
             flag_list = ["???"]
         return "0x%x [%s]" % (self.val, "|".join(flag_list))
@@ -96,8 +97,7 @@ class TypeFlagsPrinter:
             print("Warning: Cannot find enum type_instance_flag_value type.")
             print("         `struct type' pretty-printer will be degraded")
             return
-        TYPE_FLAGS = [TypeFlag(field.name, field.enumval)
-                      for field in iflags.fields()]
+        TYPE_FLAGS = [TypeFlag(field.name, field.enumval) for field in iflags.fields()]
         TYPE_FLAGS.sort()
 
 
@@ -109,13 +109,14 @@ class StructTypePrettyPrinter:
 
     def to_string(self):
         fields = []
-        fields.append("pointer_type = %s" % self.val['pointer_type'])
-        fields.append("reference_type = %s" % self.val['reference_type'])
-        fields.append("chain = %s" % self.val['reference_type'])
-        fields.append("instance_flags = %s"
-                      % TypeFlagsPrinter(self.val['instance_flags']))
-        fields.append("length = %d" % self.val['length'])
-        fields.append("main_type = %s" % self.val['main_type'])
+        fields.append("pointer_type = %s" % self.val["pointer_type"])
+        fields.append("reference_type = %s" % self.val["reference_type"])
+        fields.append("chain = %s" % self.val["reference_type"])
+        fields.append(
+            "instance_flags = %s" % TypeFlagsPrinter(self.val["m_instance_flags"])
+        )
+        fields.append("length = %d" % self.val["length"])
+        fields.append("main_type = %s" % self.val["main_type"])
         return "\n{" + ",\n ".join(fields) + "}"
 
 
@@ -134,77 +135,77 @@ class StructMainTypePrettyPrinter:
         flag_unsigned and flag_static are the only components set to 1,
         this function will return "unsigned|static".
         """
-        fields = [field.name.replace("flag_", "")
-                  for field in self.val.type.fields()
-                  if field.name.startswith("flag_") and self.val[field.name]]
+        fields = [
+            field.name.replace("flag_", "")
+            for field in self.val.type.fields()
+            if field.name.startswith("flag_") and self.val[field.name]
+        ]
         return "|".join(fields)
 
     def owner_to_string(self):
-        """Return an image of component "owner".
-        """
-        if self.val['flag_objfile_owned'] != 0:
-            return "%s (objfile)" % self.val['owner']['objfile']
+        """Return an image of component "owner"."""
+        if self.val["m_flag_objfile_owned"] != 0:
+            return "%s (objfile)" % self.val["m_owner"]["objfile"]
         else:
-            return "%s (gdbarch)" % self.val['owner']['gdbarch']
+            return "%s (gdbarch)" % self.val["m_owner"]["gdbarch"]
 
     def struct_field_location_img(self, field_val):
         """Return an image of the loc component inside the given field
         gdb.Value.
         """
-        loc_val = field_val['loc']
-        loc_kind = str(field_val['loc_kind'])
+        loc_val = field_val["loc"]
+        loc_kind = str(field_val["loc_kind"])
         if loc_kind == "FIELD_LOC_KIND_BITPOS":
-            return 'bitpos = %d' % loc_val['bitpos']
+            return "bitpos = %d" % loc_val["bitpos"]
         elif loc_kind == "FIELD_LOC_KIND_ENUMVAL":
-            return 'enumval = %d' % loc_val['enumval']
+            return "enumval = %d" % loc_val["enumval"]
         elif loc_kind == "FIELD_LOC_KIND_PHYSADDR":
-            return 'physaddr = 0x%x' % loc_val['physaddr']
+            return "physaddr = 0x%x" % loc_val["physaddr"]
         elif loc_kind == "FIELD_LOC_KIND_PHYSNAME":
-            return 'physname = %s' % loc_val['physname']
+            return "physname = %s" % loc_val["physname"]
         elif loc_kind == "FIELD_LOC_KIND_DWARF_BLOCK":
-            return 'dwarf_block = %s' % loc_val['dwarf_block']
+            return "dwarf_block = %s" % loc_val["dwarf_block"]
         else:
-            return 'loc = ??? (unsupported loc_kind value)'
+            return "loc = ??? (unsupported loc_kind value)"
 
     def struct_field_img(self, fieldno):
-        """Return an image of the main_type field number FIELDNO.
-        """
-        f = self.val['flds_bnds']['fields'][fieldno]
+        """Return an image of the main_type field number FIELDNO."""
+        f = self.val["flds_bnds"]["fields"][fieldno]
         label = "flds_bnds.fields[%d]:" % fieldno
-        if f['artificial']:
+        if f["artificial"]:
             label += " (artificial)"
         fields = []
-        fields.append("name = %s" % f['name'])
-        fields.append("type = %s" % f['type'])
-        fields.append("loc_kind = %s" % f['loc_kind'])
-        fields.append("bitsize = %d" % f['bitsize'])
+        fields.append("name = %s" % f["name"])
+        fields.append("type = %s" % f["m_type"])
+        fields.append("loc_kind = %s" % f["loc_kind"])
+        fields.append("bitsize = %d" % f["bitsize"])
         fields.append(self.struct_field_location_img(f))
         return label + "\n" + "  {" + ",\n   ".join(fields) + "}"
 
     def bound_img(self, bound_name):
         """Return an image of the given main_type's bound."""
-        b = self.val['flds_bnds']['bounds'].dereference()[bound_name]
-        bnd_kind = str(b['kind'])
-        if bnd_kind == 'PROP_CONST':
-            return str(b['data']['const_val'])
-        elif bnd_kind == 'PROP_UNDEFINED':
-            return '(undefined)'
+        bounds = self.val["flds_bnds"]["bounds"].dereference()
+        b = bounds[bound_name]
+        bnd_kind = str(b["m_kind"])
+        if bnd_kind == "PROP_CONST":
+            return str(b["m_data"]["const_val"])
+        elif bnd_kind == "PROP_UNDEFINED":
+            return "(undefined)"
         else:
             info = [bnd_kind]
-            if bound_name == 'high' and b['flag_upper_bound_is_count']:
-                info.append('upper_bound_is_count')
-            return '{} ({})'.format(str(b['data']['baton']), ','.join(info))
+            if bound_name == "high" and bounds["flag_upper_bound_is_count"]:
+                info.append("upper_bound_is_count")
+            return "{} ({})".format(str(b["m_data"]["baton"]), ",".join(info))
 
     def bounds_img(self):
-        """Return an image of the main_type bounds.
-        """
-        b = self.val['flds_bnds']['bounds'].dereference()
-        low = self.bound_img('low')
-        high = self.bound_img('high')
+        """Return an image of the main_type bounds."""
+        b = self.val["flds_bnds"]["bounds"].dereference()
+        low = self.bound_img("low")
+        high = self.bound_img("high")
 
         img = "flds_bnds.bounds = {%s, %s}" % (low, high)
-        if b['flag_bound_evaluated']:
-            img += ' [evaluated]'
+        if b["flag_bound_evaluated"]:
+            img += " [evaluated]"
         return img
 
     def type_specific_img(self):
@@ -212,41 +213,53 @@ class StructMainTypePrettyPrinter:
         Only the relevant component of that union is printed (based on
         the value of the type_specific_kind field.
         """
-        type_specific_kind = str(self.val['type_specific_field'])
-        type_specific = self.val['type_specific']
+        type_specific_kind = str(self.val["type_specific_field"])
+        type_specific = self.val["type_specific"]
         if type_specific_kind == "TYPE_SPECIFIC_NONE":
-            img = 'type_specific_field = %s' % type_specific_kind
+            img = "type_specific_field = %s" % type_specific_kind
         elif type_specific_kind == "TYPE_SPECIFIC_CPLUS_STUFF":
-            img = "cplus_stuff = %s" % type_specific['cplus_stuff']
+            img = "cplus_stuff = %s" % type_specific["cplus_stuff"]
         elif type_specific_kind == "TYPE_SPECIFIC_GNAT_STUFF":
-            img = ("gnat_stuff = {descriptive_type = %s}"
-                   % type_specific['gnat_stuff']['descriptive_type'])
+            img = (
+                "gnat_stuff = {descriptive_type = %s}"
+                % type_specific["gnat_stuff"]["descriptive_type"]
+            )
         elif type_specific_kind == "TYPE_SPECIFIC_FLOATFORMAT":
-            img = "floatformat[0..1] = %s" % type_specific['floatformat']
+            img = "floatformat[0..1] = %s" % type_specific["floatformat"]
         elif type_specific_kind == "TYPE_SPECIFIC_FUNC":
-            img = ("calling_convention = %d"
-                   % type_specific['func_stuff']['calling_convention'])
+            img = (
+                "calling_convention = %d"
+                % type_specific["func_stuff"]["calling_convention"]
+            )
             # tail_call_list is not printed.
         elif type_specific_kind == "TYPE_SPECIFIC_SELF_TYPE":
-            img = "self_type = %s" % type_specific['self_type']
+            img = "self_type = %s" % type_specific["self_type"]
+        elif type_specific_kind == "TYPE_SPECIFIC_FIXED_POINT":
+            # The scaling factor is an opaque structure, so we cannot
+            # decode its value from Python (not without insider knowledge).
+            img = (
+                "scaling_factor: <opaque> (call __gmpz_dump with "
+                " _mp_num and _mp_den fields if needed)"
+            )
         else:
-            img = ("type_specific = ??? (unknown type_secific_kind: %s)"
-                   % type_specific_kind)
+            img = (
+                "type_specific = ??? (unknown type_secific_kind: %s)"
+                % type_specific_kind
+            )
         return img
 
     def to_string(self):
-        """Return a pretty-printed image of our main_type.
-        """
+        """Return a pretty-printed image of our main_type."""
         fields = []
-        fields.append("name = %s" % self.val['name'])
-        fields.append("code = %s" % self.val['code'])
+        fields.append("name = %s" % self.val["name"])
+        fields.append("code = %s" % self.val["code"])
         fields.append("flags = [%s]" % self.flags_to_string())
         fields.append("owner = %s" % self.owner_to_string())
-        fields.append("target_type = %s" % self.val['target_type'])
-        if self.val['nfields'] > 0:
-            for fieldno in range(self.val['nfields']):
+        fields.append("target_type = %s" % self.val["target_type"])
+        if self.val["nfields"] > 0:
+            for fieldno in range(self.val["nfields"]):
                 fields.append(self.struct_field_img(fieldno))
-        if self.val['code'] == gdb.TYPE_CODE_RANGE:
+        if self.val["code"] == gdb.TYPE_CODE_RANGE:
             fields.append(self.bounds_img())
         fields.append(self.type_specific_img())
 
@@ -271,14 +284,13 @@ def type_lookup_function(val):
         return StructTypePrettyPrinter(val)
     elif val.type.tag == "main_type":
         return StructMainTypePrettyPrinter(val)
-    elif val.type.name == 'CORE_ADDR':
+    elif val.type.name == "CORE_ADDR":
         return CoreAddrPrettyPrinter(val)
     return None
 
 
 def register_pretty_printer(objfile):
-    """A routine to register a pretty-printer against the given OBJFILE.
-    """
+    """A routine to register a pretty-printer against the given OBJFILE."""
     objfile.pretty_printers.append(type_lookup_function)
 
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_mbuild.sh ./gdb/gdb_mbuild.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_mbuild.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_mbuild.sh	2021-12-16 01:57:39.000000000 +0000
@@ -3,7 +3,7 @@
 #  Multi-build script for testing compilation of all maintained
 #  configs of GDB.
 
-#  Copyright (C) 2002-2020 Free Software Foundation, Inc.
+#  Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
 #  Contributed by Richard Earnshaw  (rearnsha@arm.com)
 
@@ -31,7 +31,7 @@ usage()
 Usage: gdb_mbuild.sh [ <options> ... ] <srcdir> <builddir>
  Options:
    -j <makejobs>  Run <makejobs> in parallel.  Passed to make.
-	          On a single cpu machine, 2 is recommended.
+		  On a single cpu machine, 2 is recommended.
    -k             Keep going.  Do not stop after the first build fails.
    --keep         Keep builds.  Do not remove each build when finished.
    -e <regexp>    Regular expression for selecting the targets to build.
@@ -79,7 +79,7 @@ do
 	keepgoing=-k
 	;;
     --keep )
-        keep=true
+	keep=true
 	;;
     -e )
 	# A regular expression for selecting targets
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_obstack.c ./gdb/gdb_obstack.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_obstack.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_obstack.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Obstack wrapper for GDB.
 
-   Copyright (C) 2013-2020 Free Software Foundation, Inc.
+   Copyright (C) 2013-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_obstack.h ./gdb/gdb_obstack.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_obstack.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_obstack.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Obstack wrapper for GDB.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -125,6 +125,8 @@ struct auto_obstack : obstack
   ~auto_obstack ()
   { obstack_free (this, NULL); }
 
+  DISABLE_COPY_AND_ASSIGN (auto_obstack);
+
   /* Free all memory in the obstack but leave it valid for further
      allocation.  */
   void clear ()
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_proc_service.h ./gdb/gdb_proc_service.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_proc_service.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_proc_service.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* <proc_service.h> replacement for systems that don't have it.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_regex.c ./gdb/gdb_regex.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_regex.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_regex.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_regex.h ./gdb/gdb_regex.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_regex.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_regex.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Portable <regex.h>.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,13 +19,7 @@
 #ifndef GDB_REGEX_H
 #define GDB_REGEX_H 1
 
-#ifdef USE_INCLUDED_REGEX
 # include "xregex.h"
-#else
-/* Request 4.2 BSD regex functions.  */
-# define _REGEX_RE_COMP
-# include <regex.h>
-#endif
 
 /* A compiled regex.  This is mainly a wrapper around regex_t.  The
    the constructor throws on regcomp error and the destructor is
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_select.h ./gdb/gdb_select.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_select.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_select.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,51 +0,0 @@
-/* Slightly more portable version of <sys/select.h>.
-
-   Copyright (C) 2006-2020 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/>.  */
-
-#if !defined(GDB_SELECT_H)
-#define GDB_SELECT_H
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#else
-#include "gdbsupport/gdb_sys_time.h"
-#endif
-
-#ifdef USE_WIN32API
-#include <winsock2.h>
-#endif
-
-extern int gdb_select (int n, fd_set *readfds, fd_set *writefds,
-		       fd_set *exceptfds, struct timeval *timeout);
-
-/* Convenience wrapper around gdb_select that returns -1/EINTR if
-   set_quit_flag is set, either on entry or from a signal handler or
-   from a different thread while select is blocked.  The quit flag is
-   not cleared on exit -- the caller is responsible to check it with
-   check_quit_flag or QUIT.
-
-   Note this does NOT return -1/EINTR if any signal handler other than
-   SIGINT runs, nor if the current SIGINT handler does not call
-   set_quit_flag.  */
-extern int interruptible_select (int n,
-				 fd_set *readfds,
-				 fd_set *writefds,
-				 fd_set *exceptfds,
-				 struct timeval *timeout);
-
-#endif /* !defined(GDB_SELECT_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/acinclude.m4 ./gdb/gdbserver/acinclude.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/acinclude.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/acinclude.m4	1970-01-01 00:00:00.000000000 +0000
@@ -1,53 +0,0 @@
-dnl gdb/gdbserver/configure.in uses BFD_HAVE_SYS_PROCFS_TYPE.
-m4_include(../../bfd/bfd.m4)
-
-m4_include(../acx_configure_dir.m4)
-
-# This gets AM_GDB_WARNINGS.
-m4_include(../warning.m4)
-
-dnl This gets autoconf bugfixes
-m4_include(../../config/override.m4)
-
-dnl For ACX_PKGVERSION and ACX_BUGURL.
-m4_include(../../config/acx.m4)
-
-m4_include(../../config/depstand.m4)
-m4_include(../../config/lead-dot.m4)
-
-dnl codeset.m4 is needed for common.m4, but not for
-dnl anything else in gdbserver.
-m4_include(../../config/codeset.m4)
-m4_include(../gdbsupport/common.m4)
-
-dnl For libiberty_INIT.
-m4_include(../libiberty.m4)
-
-dnl For GDB_AC_PTRACE.
-m4_include(../ptrace.m4)
-
-m4_include(../ax_cxx_compile_stdcxx.m4)
-
-dnl For GDB_AC_SELFTEST.
-m4_include(../selftest.m4)
-
-m4_include([../../config/ax_pthread.m4])
-
-dnl Check for existence of a type $1 in libthread_db.h
-dnl Based on BFD_HAVE_SYS_PROCFS_TYPE in bfd/bfd.m4.
-
-AC_DEFUN([GDBSERVER_HAVE_THREAD_DB_TYPE],
-[AC_MSG_CHECKING([for $1 in thread_db.h])
- AC_CACHE_VAL(gdbserver_cv_have_thread_db_type_$1,
-   [AC_TRY_COMPILE([
-#include <thread_db.h>],
-      [$1 avar],
-      gdbserver_cv_have_thread_db_type_$1=yes,
-      gdbserver_cv_have_thread_db_type_$1=no
-   )])
- if test $gdbserver_cv_have_thread_db_type_$1 = yes; then
-   AC_DEFINE([HAVE_]translit($1, [a-z], [A-Z]), 1,
-	     [Define if <thread_db.h> has $1.])
- fi
- AC_MSG_RESULT($gdbserver_cv_have_thread_db_type_$1)
-])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/aclocal.m4 ./gdb/gdbserver/aclocal.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/aclocal.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/aclocal.m4	1970-01-01 00:00:00.000000000 +0000
@@ -1,101 +0,0 @@
-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
-
-# Copyright (C) 1996-2017 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 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.
-
-m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997-2017 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 modifications, as long as this notice is preserved.
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ([2.52])dnl
- m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
-# From Jim Meyering
-
-# Copyright (C) 1996-2017 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 modifications, as long as this notice is preserved.
-
-# AM_MAINTAINER_MODE([DEFAULT-MODE])
-# ----------------------------------
-# Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless 'enable' is passed literally.
-# For symmetry, 'disable' may be passed as well.  Anyway, the user
-# can override the default with the --enable/--disable switch.
-AC_DEFUN([AM_MAINTAINER_MODE],
-[m4_case(m4_default([$1], [disable]),
-       [enable], [m4_define([am_maintainer_other], [disable])],
-       [disable], [m4_define([am_maintainer_other], [enable])],
-       [m4_define([am_maintainer_other], [enable])
-        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
-  AC_ARG_ENABLE([maintainer-mode],
-    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
-      am_maintainer_other[ make rules and dependencies not useful
-      (and sometimes confusing) to the casual installer])],
-    [USE_MAINTAINER_MODE=$enableval],
-    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
-  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
-  MAINT=$MAINTAINER_MODE_TRUE
-  AC_SUBST([MAINT])dnl
-]
-)
-
-# Copyright (C) 2006-2017 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 modifications, as long as this notice is preserved.
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# --------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-m4_include([acinclude.m4])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/ax.c ./gdb/gdbserver/ax.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/ax.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/ax.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1376 +0,0 @@
-/* Agent expression code for remote server.
-   Copyright (C) 2009-2020 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 "server.h"
-#include "ax.h"
-#include "gdbsupport/format.h"
-#include "tracepoint.h"
-#include "gdbsupport/rsp-low.h"
-
-static void ax_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
-
-#ifdef IN_PROCESS_AGENT
-int debug_agent = 0;
-#endif
-
-static void
-ax_vdebug (const char *fmt, ...)
-{
-  char buf[1024];
-  va_list ap;
-
-  va_start (ap, fmt);
-  vsprintf (buf, fmt, ap);
-#ifdef IN_PROCESS_AGENT
-  fprintf (stderr, PROG "/ax: %s\n", buf);
-#else
-  debug_printf (PROG "/ax: %s\n", buf);
-#endif
-  va_end (ap);
-}
-
-#define ax_debug_1(level, fmt, args...)	\
-  do {						\
-    if (level <= debug_threads)			\
-      ax_vdebug ((fmt), ##args);		\
-  } while (0)
-
-#define ax_debug(FMT, args...)		\
-  ax_debug_1 (1, FMT, ##args)
-
-/* This enum must exactly match what is documented in
-   gdb/doc/agentexpr.texi, including all the numerical values.  */
-
-enum gdb_agent_op
-  {
-#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  \
-    gdb_agent_op_ ## NAME = VALUE,
-#include "gdbsupport/ax.def"
-#undef DEFOP
-    gdb_agent_op_last
-  };
-
-static const char *gdb_agent_op_names [gdb_agent_op_last] =
-  {
-    "?undef?"
-#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  , # NAME
-#include "gdbsupport/ax.def"
-#undef DEFOP
-  };
-
-#ifndef IN_PROCESS_AGENT
-static const unsigned char gdb_agent_op_sizes [gdb_agent_op_last] =
-  {
-    0
-#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  , SIZE
-#include "gdbsupport/ax.def"
-#undef DEFOP
-  };
-#endif
-
-/* A wrapper for gdb_agent_op_names that does some bounds-checking.  */
-
-static const char *
-gdb_agent_op_name (int op)
-{
-  if (op < 0 || op >= gdb_agent_op_last || gdb_agent_op_names[op] == NULL)
-    return "?undef?";
-  return gdb_agent_op_names[op];
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* The packet form of an agent expression consists of an 'X', number
-   of bytes in expression, a comma, and then the bytes.  */
-
-struct agent_expr *
-gdb_parse_agent_expr (const char **actparm)
-{
-  const char *act = *actparm;
-  ULONGEST xlen;
-  struct agent_expr *aexpr;
-
-  ++act;  /* skip the X */
-  act = unpack_varlen_hex (act, &xlen);
-  ++act;  /* skip a comma */
-  aexpr = XNEW (struct agent_expr);
-  aexpr->length = xlen;
-  aexpr->bytes = (unsigned char *) xmalloc (xlen);
-  hex2bin (act, aexpr->bytes, xlen);
-  *actparm = act + (xlen * 2);
-  return aexpr;
-}
-
-void
-gdb_free_agent_expr (struct agent_expr *aexpr)
-{
-  if (aexpr != NULL)
-    {
-      free (aexpr->bytes);
-      free (aexpr);
-    }
-}
-
-/* Convert the bytes of an agent expression back into hex digits, so
-   they can be printed or uploaded.  This allocates the buffer,
-   callers should free when they are done with it.  */
-
-char *
-gdb_unparse_agent_expr (struct agent_expr *aexpr)
-{
-  char *rslt;
-
-  rslt = (char *) xmalloc (2 * aexpr->length + 1);
-  bin2hex (aexpr->bytes, rslt, aexpr->length);
-  return rslt;
-}
-
-/* Bytecode compilation.  */
-
-CORE_ADDR current_insn_ptr;
-
-int emit_error;
-
-struct bytecode_address
-{
-  int pc;
-  CORE_ADDR address;
-  int goto_pc;
-  /* Offset and size of field to be modified in the goto block.  */
-  int from_offset, from_size;
-  struct bytecode_address *next;
-} *bytecode_address_table;
-
-void
-emit_prologue (void)
-{
-  target_emit_ops ()->emit_prologue ();
-}
-
-void
-emit_epilogue (void)
-{
-  target_emit_ops ()->emit_epilogue ();
-}
-
-static void
-emit_add (void)
-{
-  target_emit_ops ()->emit_add ();
-}
-
-static void
-emit_sub (void)
-{
-  target_emit_ops ()->emit_sub ();
-}
-
-static void
-emit_mul (void)
-{
-  target_emit_ops ()->emit_mul ();
-}
-
-static void
-emit_lsh (void)
-{
-  target_emit_ops ()->emit_lsh ();
-}
-
-static void
-emit_rsh_signed (void)
-{
-  target_emit_ops ()->emit_rsh_signed ();
-}
-
-static void
-emit_rsh_unsigned (void)
-{
-  target_emit_ops ()->emit_rsh_unsigned ();
-}
-
-static void
-emit_ext (int arg)
-{
-  target_emit_ops ()->emit_ext (arg);
-}
-
-static void
-emit_log_not (void)
-{
-  target_emit_ops ()->emit_log_not ();
-}
-
-static void
-emit_bit_and (void)
-{
-  target_emit_ops ()->emit_bit_and ();
-}
-
-static void
-emit_bit_or (void)
-{
-  target_emit_ops ()->emit_bit_or ();
-}
-
-static void
-emit_bit_xor (void)
-{
-  target_emit_ops ()->emit_bit_xor ();
-}
-
-static void
-emit_bit_not (void)
-{
-  target_emit_ops ()->emit_bit_not ();
-}
-
-static void
-emit_equal (void)
-{
-  target_emit_ops ()->emit_equal ();
-}
-
-static void
-emit_less_signed (void)
-{
-  target_emit_ops ()->emit_less_signed ();
-}
-
-static void
-emit_less_unsigned (void)
-{
-  target_emit_ops ()->emit_less_unsigned ();
-}
-
-static void
-emit_ref (int size)
-{
-  target_emit_ops ()->emit_ref (size);
-}
-
-static void
-emit_if_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_if_goto (offset_p, size_p);
-}
-
-static void
-emit_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_goto (offset_p, size_p);
-}
-
-static void
-write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  target_emit_ops ()->write_goto_address (from, to, size);
-}
-
-static void
-emit_const (LONGEST num)
-{
-  target_emit_ops ()->emit_const (num);
-}
-
-static void
-emit_reg (int reg)
-{
-  target_emit_ops ()->emit_reg (reg);
-}
-
-static void
-emit_pop (void)
-{
-  target_emit_ops ()->emit_pop ();
-}
-
-static void
-emit_stack_flush (void)
-{
-  target_emit_ops ()->emit_stack_flush ();
-}
-
-static void
-emit_zero_ext (int arg)
-{
-  target_emit_ops ()->emit_zero_ext (arg);
-}
-
-static void
-emit_swap (void)
-{
-  target_emit_ops ()->emit_swap ();
-}
-
-static void
-emit_stack_adjust (int n)
-{
-  target_emit_ops ()->emit_stack_adjust (n);
-}
-
-/* FN's prototype is `LONGEST(*fn)(int)'.  */
-
-static void
-emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  target_emit_ops ()->emit_int_call_1 (fn, arg1);
-}
-
-/* FN's prototype is `void(*fn)(int,LONGEST)'.  */
-
-static void
-emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  target_emit_ops ()->emit_void_call_2 (fn, arg1);
-}
-
-static void
-emit_eq_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_eq_goto (offset_p, size_p);
-}
-
-static void
-emit_ne_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_ne_goto (offset_p, size_p);
-}
-
-static void
-emit_lt_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_lt_goto (offset_p, size_p);
-}
-
-static void
-emit_ge_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_ge_goto (offset_p, size_p);
-}
-
-static void
-emit_gt_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_gt_goto (offset_p, size_p);
-}
-
-static void
-emit_le_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_le_goto (offset_p, size_p);
-}
-
-/* Scan an agent expression for any evidence that the given PC is the
-   target of a jump bytecode in the expression.  */
-
-static int
-is_goto_target (struct agent_expr *aexpr, int pc)
-{
-  int i;
-  unsigned char op;
-
-  for (i = 0; i < aexpr->length; i += 1 + gdb_agent_op_sizes[op])
-    {
-      op = aexpr->bytes[i];
-
-      if (op == gdb_agent_op_goto || op == gdb_agent_op_if_goto)
-	{
-	  int target = (aexpr->bytes[i + 1] << 8) + aexpr->bytes[i + 2];
-	  if (target == pc)
-	    return 1;
-	}
-    }
-
-  return 0;
-}
-
-/* Given an agent expression, turn it into native code.  */
-
-enum eval_result_type
-compile_bytecodes (struct agent_expr *aexpr)
-{
-  int pc = 0;
-  int done = 0;
-  unsigned char op, next_op;
-  int arg;
-  /* This is only used to build 64-bit value for constants.  */
-  ULONGEST top;
-  struct bytecode_address *aentry, *aentry2;
-
-#define UNHANDLED					\
-  do							\
-    {							\
-      ax_debug ("Cannot compile op 0x%x\n", op);	\
-      return expr_eval_unhandled_opcode;		\
-    } while (0)
-
-  if (aexpr->length == 0)
-    {
-      ax_debug ("empty agent expression\n");
-      return expr_eval_empty_expression;
-    }
-
-  bytecode_address_table = NULL;
-
-  while (!done)
-    {
-      op = aexpr->bytes[pc];
-
-      ax_debug ("About to compile op 0x%x, pc=%d\n", op, pc);
-
-      /* Record the compiled-code address of the bytecode, for use by
-	 jump instructions.  */
-      aentry = XNEW (struct bytecode_address);
-      aentry->pc = pc;
-      aentry->address = current_insn_ptr;
-      aentry->goto_pc = -1;
-      aentry->from_offset = aentry->from_size = 0;
-      aentry->next = bytecode_address_table;
-      bytecode_address_table = aentry;
-
-      ++pc;
-
-      emit_error = 0;
-
-      switch (op)
-	{
-	case gdb_agent_op_add:
-	  emit_add ();
-	  break;
-
-	case gdb_agent_op_sub:
-	  emit_sub ();
-	  break;
-
-	case gdb_agent_op_mul:
-	  emit_mul ();
-	  break;
-
-	case gdb_agent_op_div_signed:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_div_unsigned:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_rem_signed:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_rem_unsigned:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_lsh:
-	  emit_lsh ();
-	  break;
-
-	case gdb_agent_op_rsh_signed:
-	  emit_rsh_signed ();
-	  break;
-
-	case gdb_agent_op_rsh_unsigned:
-	  emit_rsh_unsigned ();
-	  break;
-
-	case gdb_agent_op_trace:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_trace_quick:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_log_not:
-	  emit_log_not ();
-	  break;
-
-	case gdb_agent_op_bit_and:
-	  emit_bit_and ();
-	  break;
-
-	case gdb_agent_op_bit_or:
-	  emit_bit_or ();
-	  break;
-
-	case gdb_agent_op_bit_xor:
-	  emit_bit_xor ();
-	  break;
-
-	case gdb_agent_op_bit_not:
-	  emit_bit_not ();
-	  break;
-
-	case gdb_agent_op_equal:
-	  next_op = aexpr->bytes[pc];
-	  if (next_op == gdb_agent_op_if_goto
-	      && !is_goto_target (aexpr, pc)
-	      && target_emit_ops ()->emit_eq_goto)
-	    {
-	      ax_debug ("Combining equal & if_goto");
-	      pc += 1;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_eq_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else if (next_op == gdb_agent_op_log_not
-		   && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
-		   && !is_goto_target (aexpr, pc + 1)
-		   && target_emit_ops ()->emit_ne_goto)
-	    {
-	      ax_debug ("Combining equal & log_not & if_goto");
-	      pc += 2;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_ne_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else
-	    emit_equal ();
-	  break;
-
-	case gdb_agent_op_less_signed:
-	  next_op = aexpr->bytes[pc];
-	  if (next_op == gdb_agent_op_if_goto
-	      && !is_goto_target (aexpr, pc))
-	    {
-	      ax_debug ("Combining less_signed & if_goto");
-	      pc += 1;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_lt_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else if (next_op == gdb_agent_op_log_not
-		   && !is_goto_target (aexpr, pc)
-		   && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
-		   && !is_goto_target (aexpr, pc + 1))
-	    {
-	      ax_debug ("Combining less_signed & log_not & if_goto");
-	      pc += 2;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_ge_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else
-	    emit_less_signed ();
-	  break;
-
-	case gdb_agent_op_less_unsigned:
-	  emit_less_unsigned ();
-	  break;
-
-	case gdb_agent_op_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    emit_ext (arg);
-	  break;
-
-	case gdb_agent_op_ref8:
-	  emit_ref (1);
-	  break;
-
-	case gdb_agent_op_ref16:
-	  emit_ref (2);
-	  break;
-
-	case gdb_agent_op_ref32:
-	  emit_ref (4);
-	  break;
-
-	case gdb_agent_op_ref64:
-	  emit_ref (8);
-	  break;
-
-	case gdb_agent_op_if_goto:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  aentry->goto_pc = arg;
-	  emit_if_goto (&(aentry->from_offset), &(aentry->from_size));
-	  break;
-
-	case gdb_agent_op_goto:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  aentry->goto_pc = arg;
-	  emit_goto (&(aentry->from_offset), &(aentry->from_size));
-	  break;
-
-	case gdb_agent_op_const8:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_const16:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_const32:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_const64:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_reg:
-	  emit_stack_flush ();
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  emit_reg (arg);
-	  break;
-
-	case gdb_agent_op_end:
-	  ax_debug ("At end of expression\n");
-
-	  /* Assume there is one stack element left, and that it is
-	     cached in "top" where emit_epilogue can get to it.  */
-	  emit_stack_adjust (1);
-
-	  done = 1;
-	  break;
-
-	case gdb_agent_op_dup:
-	  /* In our design, dup is equivalent to stack flushing.  */
-	  emit_stack_flush ();
-	  break;
-
-	case gdb_agent_op_pop:
-	  emit_pop ();
-	  break;
-
-	case gdb_agent_op_zero_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    emit_zero_ext (arg);
-	  break;
-
-	case gdb_agent_op_swap:
-	  next_op = aexpr->bytes[pc];
-	  /* Detect greater-than comparison sequences.  */
-	  if (next_op == gdb_agent_op_less_signed
-	      && !is_goto_target (aexpr, pc)
-	      && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
-	      && !is_goto_target (aexpr, pc + 1))
-	    {
-	      ax_debug ("Combining swap & less_signed & if_goto");
-	      pc += 2;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_gt_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else if (next_op == gdb_agent_op_less_signed
-		   && !is_goto_target (aexpr, pc)
-		   && (aexpr->bytes[pc + 1] == gdb_agent_op_log_not)
-		   && !is_goto_target (aexpr, pc + 1)
-		   && (aexpr->bytes[pc + 2] == gdb_agent_op_if_goto)
-		   && !is_goto_target (aexpr, pc + 2))
-	    {
-	      ax_debug ("Combining swap & less_signed & log_not & if_goto");
-	      pc += 3;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_le_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else
-	    emit_swap ();
-	  break;
-
-	case gdb_agent_op_getv:
-	  emit_stack_flush ();
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  emit_int_call_1 (get_get_tsv_func_addr (),
-			   arg);
-	  break;
-
-	case gdb_agent_op_setv:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  emit_void_call_2 (get_set_tsv_func_addr (),
-			    arg);
-	  break;
-
-	case gdb_agent_op_tracev:
-	  UNHANDLED;
-	  break;
-
-	  /* GDB never (currently) generates any of these ops.  */
-	case gdb_agent_op_float:
-	case gdb_agent_op_ref_float:
-	case gdb_agent_op_ref_double:
-	case gdb_agent_op_ref_long_double:
-	case gdb_agent_op_l_to_d:
-	case gdb_agent_op_d_to_l:
-	case gdb_agent_op_trace16:
-	  UNHANDLED;
-	  break;
-
-	default:
-	  ax_debug ("Agent expression op 0x%x not recognized\n", op);
-	  /* Don't struggle on, things will just get worse.  */
-	  return expr_eval_unrecognized_opcode;
-	}
-
-      /* This catches errors that occur in target-specific code
-	 emission.  */
-      if (emit_error)
-	{
-	  ax_debug ("Error %d while emitting code for %s\n",
-		    emit_error, gdb_agent_op_name (op));
-	  return expr_eval_unhandled_opcode;
-	}
-
-      ax_debug ("Op %s compiled\n", gdb_agent_op_name (op));
-    }
-
-  /* Now fill in real addresses as goto destinations.  */
-  for (aentry = bytecode_address_table; aentry; aentry = aentry->next)
-    {
-      int written = 0;
-
-      if (aentry->goto_pc < 0)
-	continue;
-
-      /* Find the location that we are going to, and call back into
-	 target-specific code to write the actual address or
-	 displacement.  */
-      for (aentry2 = bytecode_address_table; aentry2; aentry2 = aentry2->next)
-	{
-	  if (aentry2->pc == aentry->goto_pc)
-	    {
-	      ax_debug ("Want to jump from %s to %s\n",
-			paddress (aentry->address),
-			paddress (aentry2->address));
-	      write_goto_address (aentry->address + aentry->from_offset,
-				  aentry2->address, aentry->from_size);
-	      written = 1;
-	      break;
-	    }
-	}
-
-      /* Error out if we didn't find a destination.  */
-      if (!written)
-	{
-	  ax_debug ("Destination of goto %d not found\n",
-		    aentry->goto_pc);
-	  return expr_eval_invalid_goto;
-	}
-    }
-
-  return expr_eval_no_error;
-}
-
-#endif
-
-/* Make printf-type calls using arguments supplied from the host.  We
-   need to parse the format string ourselves, and call the formatting
-   function with one argument at a time, partly because there is no
-   safe portable way to construct a varargs call, and partly to serve
-   as a security barrier against bad format strings that might get
-   in.  */
-
-static void
-ax_printf (CORE_ADDR fn, CORE_ADDR chan, const char *format,
-	   int nargs, ULONGEST *args)
-{
-  const char *f = format;
-  int i;
-  const char *current_substring;
-  int nargs_wanted;
-
-  ax_debug ("Printf of \"%s\" with %d args", format, nargs);
-
-  format_pieces fpieces (&f);
-
-  nargs_wanted = 0;
-  for (auto &&piece : fpieces)
-    if (piece.argclass != literal_piece)
-      ++nargs_wanted;
-
-  if (nargs != nargs_wanted)
-    error (_("Wrong number of arguments for specified format-string"));
-
-  i = 0;
-  for (auto &&piece : fpieces)
-    {
-      current_substring = piece.string;
-      ax_debug ("current substring is '%s', class is %d",
-		current_substring, piece.argclass);
-      switch (piece.argclass)
-	{
-	case string_arg:
-	  {
-	    gdb_byte *str;
-	    CORE_ADDR tem;
-	    int j;
-
-	    tem = args[i];
-	    if (tem == 0)
-	      {
-		printf (current_substring, "(null)");
-		break;
-	      }
-
-	    /* This is a %s argument.  Find the length of the string.  */
-	    for (j = 0;; j++)
-	      {
-		gdb_byte c;
-
-		read_inferior_memory (tem + j, &c, 1);
-		if (c == 0)
-		  break;
-	      }
-
-	      /* Copy the string contents into a string inside GDB.  */
-	      str = (gdb_byte *) alloca (j + 1);
-	      if (j != 0)
-		read_inferior_memory (tem, str, j);
-	      str[j] = 0;
-
-              printf (current_substring, (char *) str);
-	    }
-	    break;
-
-	  case long_long_arg:
-#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
-	    {
-	      long long val = args[i];
-
-              printf (current_substring, val);
-	      break;
-	    }
-#else
-	    error (_("long long not supported in agent printf"));
-#endif
-	case int_arg:
-	  {
-	    int val = args[i];
-
-	    printf (current_substring, val);
-	    break;
-	  }
-
-	case long_arg:
-	  {
-	    long val = args[i];
-
-	    printf (current_substring, val);
-	    break;
-	  }
-
-	case size_t_arg:
-	  {
-	    size_t val = args[i];
-
-	    printf (current_substring, val);
-	    break;
-	  }
-
-	case literal_piece:
-	  /* Print a portion of the format string that has no
-	     directives.  Note that this will not include any
-	     ordinary %-specs, but it might include "%%".  That is
-	     why we use printf_filtered and not puts_filtered here.
-	     Also, we pass a dummy argument because some platforms
-	     have modified GCC to include -Wformat-security by
-	     default, which will warn here if there is no
-	     argument.  */
-	  printf (current_substring, 0);
-	  break;
-
-	default:
-	  error (_("Format directive in '%s' not supported in agent printf"),
-		 current_substring);
-	}
-
-      /* Maybe advance to the next argument.  */
-      if (piece.argclass != literal_piece)
-	++i;
-    }
-
-  fflush (stdout);
-}
-
-/* The agent expression evaluator, as specified by the GDB docs. It
-   returns 0 if everything went OK, and a nonzero error code
-   otherwise.  */
-
-enum eval_result_type
-gdb_eval_agent_expr (struct eval_agent_expr_context *ctx,
-		     struct agent_expr *aexpr,
-		     ULONGEST *rslt)
-{
-  int pc = 0;
-#define STACK_MAX 100
-  ULONGEST stack[STACK_MAX], top;
-  int sp = 0;
-  unsigned char op;
-  int arg;
-
-  /* This union is a convenient way to convert representations.  For
-     now, assume a standard architecture where the hardware integer
-     types have 8, 16, 32, 64 bit types.  A more robust solution would
-     be to import stdint.h from gnulib.  */
-  union
-  {
-    union
-    {
-      unsigned char bytes[1];
-      unsigned char val;
-    } u8;
-    union
-    {
-      unsigned char bytes[2];
-      unsigned short val;
-    } u16;
-    union
-    {
-      unsigned char bytes[4];
-      unsigned int val;
-    } u32;
-    union
-    {
-      unsigned char bytes[8];
-      ULONGEST val;
-    } u64;
-  } cnv;
-
-  if (aexpr->length == 0)
-    {
-      ax_debug ("empty agent expression");
-      return expr_eval_empty_expression;
-    }
-
-  /* Cache the stack top in its own variable. Much of the time we can
-     operate on this variable, rather than dinking with the stack. It
-     needs to be copied to the stack when sp changes.  */
-  top = 0;
-
-  while (1)
-    {
-      op = aexpr->bytes[pc++];
-
-      ax_debug ("About to interpret byte 0x%x", op);
-
-      switch (op)
-	{
-	case gdb_agent_op_add:
-	  top += stack[--sp];
-	  break;
-
-	case gdb_agent_op_sub:
-	  top = stack[--sp] - top;
-	  break;
-
-	case gdb_agent_op_mul:
-	  top *= stack[--sp];
-	  break;
-
-	case gdb_agent_op_div_signed:
-	  if (top == 0)
-	    {
-	      ax_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = ((LONGEST) stack[--sp]) / ((LONGEST) top);
-	  break;
-
-	case gdb_agent_op_div_unsigned:
-	  if (top == 0)
-	    {
-	      ax_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = stack[--sp] / top;
-	  break;
-
-	case gdb_agent_op_rem_signed:
-	  if (top == 0)
-	    {
-	      ax_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = ((LONGEST) stack[--sp]) % ((LONGEST) top);
-	  break;
-
-	case gdb_agent_op_rem_unsigned:
-	  if (top == 0)
-	    {
-	      ax_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = stack[--sp] % top;
-	  break;
-
-	case gdb_agent_op_lsh:
-	  top = stack[--sp] << top;
-	  break;
-
-	case gdb_agent_op_rsh_signed:
-	  top = ((LONGEST) stack[--sp]) >> top;
-	  break;
-
-	case gdb_agent_op_rsh_unsigned:
-	  top = stack[--sp] >> top;
-	  break;
-
-	case gdb_agent_op_trace:
-	  agent_mem_read (ctx, NULL, (CORE_ADDR) stack[--sp],
-			  (ULONGEST) top);
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_trace_quick:
-	  arg = aexpr->bytes[pc++];
-	  agent_mem_read (ctx, NULL, (CORE_ADDR) top, (ULONGEST) arg);
-	  break;
-
-	case gdb_agent_op_log_not:
-	  top = !top;
-	  break;
-
-	case gdb_agent_op_bit_and:
-	  top &= stack[--sp];
-	  break;
-
-	case gdb_agent_op_bit_or:
-	  top |= stack[--sp];
-	  break;
-
-	case gdb_agent_op_bit_xor:
-	  top ^= stack[--sp];
-	  break;
-
-	case gdb_agent_op_bit_not:
-	  top = ~top;
-	  break;
-
-	case gdb_agent_op_equal:
-	  top = (stack[--sp] == top);
-	  break;
-
-	case gdb_agent_op_less_signed:
-	  top = (((LONGEST) stack[--sp]) < ((LONGEST) top));
-	  break;
-
-	case gdb_agent_op_less_unsigned:
-	  top = (stack[--sp] < top);
-	  break;
-
-	case gdb_agent_op_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    {
-	      LONGEST mask = 1 << (arg - 1);
-	      top &= ((LONGEST) 1 << arg) - 1;
-	      top = (top ^ mask) - mask;
-	    }
-	  break;
-
-	case gdb_agent_op_ref8:
-	  agent_mem_read (ctx, cnv.u8.bytes, (CORE_ADDR) top, 1);
-	  top = cnv.u8.val;
-	  break;
-
-	case gdb_agent_op_ref16:
-	  agent_mem_read (ctx, cnv.u16.bytes, (CORE_ADDR) top, 2);
-	  top = cnv.u16.val;
-	  break;
-
-	case gdb_agent_op_ref32:
-	  agent_mem_read (ctx, cnv.u32.bytes, (CORE_ADDR) top, 4);
-	  top = cnv.u32.val;
-	  break;
-
-	case gdb_agent_op_ref64:
-	  agent_mem_read (ctx, cnv.u64.bytes, (CORE_ADDR) top, 8);
-	  top = cnv.u64.val;
-	  break;
-
-	case gdb_agent_op_if_goto:
-	  if (top)
-	    pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
-	  else
-	    pc += 2;
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_goto:
-	  pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
-	  break;
-
-	case gdb_agent_op_const8:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_const16:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_const32:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_const64:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_reg:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  {
-	    int regnum = arg;
-	    struct regcache *regcache = ctx->regcache;
-
-	    switch (register_size (regcache->tdesc, regnum))
-	      {
-	      case 8:
-		collect_register (regcache, regnum, cnv.u64.bytes);
-		top = cnv.u64.val;
-		break;
-	      case 4:
-		collect_register (regcache, regnum, cnv.u32.bytes);
-		top = cnv.u32.val;
-		break;
-	      case 2:
-		collect_register (regcache, regnum, cnv.u16.bytes);
-		top = cnv.u16.val;
-		break;
-	      case 1:
-		collect_register (regcache, regnum, cnv.u8.bytes);
-		top = cnv.u8.val;
-		break;
-	      default:
-		internal_error (__FILE__, __LINE__,
-				"unhandled register size");
-	      }
-	  }
-	  break;
-
-	case gdb_agent_op_end:
-	  ax_debug ("At end of expression, sp=%d, stack top cache=0x%s",
-		    sp, pulongest (top));
-	  if (rslt)
-	    {
-	      if (sp <= 0)
-		{
-		  /* This should be an error */
-		  ax_debug ("Stack is empty, nothing to return");
-		  return expr_eval_empty_stack;
-		}
-	      *rslt = top;
-	    }
-	  return expr_eval_no_error;
-
-	case gdb_agent_op_dup:
-	  stack[sp++] = top;
-	  break;
-
-	case gdb_agent_op_pop:
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_pick:
-	  arg = aexpr->bytes[pc++];
-	  stack[sp] = top;
-	  top = stack[sp - arg];
-	  ++sp;
-	  break;
-
-	case gdb_agent_op_rot:
-	  {
-	    ULONGEST tem = stack[sp - 1];
-
-	    stack[sp - 1] = stack[sp - 2];
-	    stack[sp - 2] = top;
-	    top = tem;
-	  }
-	  break;
-
-	case gdb_agent_op_zero_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    top &= ((LONGEST) 1 << arg) - 1;
-	  break;
-
-	case gdb_agent_op_swap:
-	  /* Interchange top two stack elements, making sure top gets
-	     copied back onto stack.  */
-	  stack[sp] = top;
-	  top = stack[sp - 1];
-	  stack[sp - 1] = stack[sp];
-	  break;
-
-	case gdb_agent_op_getv:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  top = agent_get_trace_state_variable_value (arg);
-	  break;
-
-	case gdb_agent_op_setv:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  agent_set_trace_state_variable_value (arg, top);
-	  /* Note that we leave the value on the stack, for the
-	     benefit of later/enclosing expressions.  */
-	  break;
-
-	case gdb_agent_op_tracev:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  agent_tsv_read (ctx, arg);
-	  break;
-
-	case gdb_agent_op_tracenz:
-	  agent_mem_read_string (ctx, NULL, (CORE_ADDR) stack[--sp],
-				 (ULONGEST) top);
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_printf:
-	  {
-	    int nargs, slen, i;
-	    CORE_ADDR fn = 0, chan = 0;
-	    /* Can't have more args than the entire size of the stack.  */
-	    ULONGEST args[STACK_MAX];
-	    char *format;
-
-	    nargs = aexpr->bytes[pc++];
-	    slen = aexpr->bytes[pc++];
-	    slen = (slen << 8) + aexpr->bytes[pc++];
-	    format = (char *) &(aexpr->bytes[pc]);
-	    pc += slen;
-	    /* Pop function and channel.  */
-	    fn = top;
-	    if (--sp >= 0)
-	      top = stack[sp];
-	    chan = top;
-	    if (--sp >= 0)
-	      top = stack[sp];
-	    /* Pop arguments into a dedicated array.  */
-	    for (i = 0; i < nargs; ++i)
-	      {
-		args[i] = top;
-		if (--sp >= 0)
-		  top = stack[sp];
-	      }
-
-	    /* A bad format string means something is very wrong; give
-	       up immediately.  */
-	    if (format[slen - 1] != '\0')
-	      error (_("Unterminated format string in printf bytecode"));
-
-	    ax_printf (fn, chan, format, nargs, args);
-	  }
-	  break;
-
-	  /* GDB never (currently) generates any of these ops.  */
-	case gdb_agent_op_float:
-	case gdb_agent_op_ref_float:
-	case gdb_agent_op_ref_double:
-	case gdb_agent_op_ref_long_double:
-	case gdb_agent_op_l_to_d:
-	case gdb_agent_op_d_to_l:
-	case gdb_agent_op_trace16:
-	  ax_debug ("Agent expression op 0x%x valid, but not handled",
-		    op);
-	  /* If ever GDB generates any of these, we don't have the
-	     option of ignoring.  */
-	  return expr_eval_unhandled_opcode;
-
-	default:
-	  ax_debug ("Agent expression op 0x%x not recognized", op);
-	  /* Don't struggle on, things will just get worse.  */
-	  return expr_eval_unrecognized_opcode;
-	}
-
-      /* Check for stack badness.  */
-      if (sp >= (STACK_MAX - 1))
-	{
-	  ax_debug ("Expression stack overflow");
-	  return expr_eval_stack_overflow;
-	}
-
-      if (sp < 0)
-	{
-	  ax_debug ("Expression stack underflow");
-	  return expr_eval_stack_underflow;
-	}
-
-      ax_debug ("Op %s -> sp=%d, top=0x%s",
-		gdb_agent_op_name (op), sp, phex_nz (top, 0));
-    }
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/ax.h ./gdb/gdbserver/ax.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/ax.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/ax.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,144 +0,0 @@
-/* Data structures and functions associated with agent expressions in GDB.
-   Copyright (C) 2009-2020 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 GDBSERVER_AX_H
-#define GDBSERVER_AX_H
-
-#include "regcache.h"
-
-#ifdef IN_PROCESS_AGENT
-#define debug_threads debug_agent
-#endif
-
-struct traceframe;
-
-/* Enumeration of the different kinds of things that can happen during
-   agent expression evaluation.  */
-
-enum eval_result_type
-  {
-    expr_eval_no_error,
-    expr_eval_empty_expression,
-    expr_eval_empty_stack,
-    expr_eval_stack_overflow,
-    expr_eval_stack_underflow,
-    expr_eval_unhandled_opcode,
-    expr_eval_unrecognized_opcode,
-    expr_eval_divide_by_zero,
-    expr_eval_invalid_goto
-  };
-
-struct agent_expr
-{
-  int length;
-
-  unsigned char *bytes;
-};
-
-#ifndef IN_PROCESS_AGENT
-
-/* The packet form of an agent expression consists of an 'X', number
-   of bytes in expression, a comma, and then the bytes.  */
-struct agent_expr *gdb_parse_agent_expr (const char **actparm);
-
-/* Release an agent expression.  */
-void gdb_free_agent_expr (struct agent_expr *aexpr);
-
-/* Convert the bytes of an agent expression back into hex digits, so
-   they can be printed or uploaded.  This allocates the buffer,
-   callers should free when they are done with it.  */
-char *gdb_unparse_agent_expr (struct agent_expr *aexpr);
-void emit_prologue (void);
-void emit_epilogue (void);
-enum eval_result_type compile_bytecodes (struct agent_expr *aexpr);
-#endif
-
-/* The context when evaluating agent expression.  */
-
-struct eval_agent_expr_context
-{
-  /* The registers when evaluating agent expression.  */
-  struct regcache *regcache;
-  /* The traceframe, if any, when evaluating agent expression.  */
-  struct traceframe *tframe;
-  /* The tracepoint, if any, when evaluating agent expression.  */
-  struct tracepoint *tpoint;
-};
-
-enum eval_result_type
-  gdb_eval_agent_expr (struct eval_agent_expr_context *ctx,
-		       struct agent_expr *aexpr,
-		       ULONGEST *rslt);
-
-/* Bytecode compilation function vector.  */
-
-struct emit_ops
-{
-  void (*emit_prologue) (void);
-  void (*emit_epilogue) (void);
-  void (*emit_add) (void);
-  void (*emit_sub) (void);
-  void (*emit_mul) (void);
-  void (*emit_lsh) (void);
-  void (*emit_rsh_signed) (void);
-  void (*emit_rsh_unsigned) (void);
-  void (*emit_ext) (int arg);
-  void (*emit_log_not) (void);
-  void (*emit_bit_and) (void);
-  void (*emit_bit_or) (void);
-  void (*emit_bit_xor) (void);
-  void (*emit_bit_not) (void);
-  void (*emit_equal) (void);
-  void (*emit_less_signed) (void);
-  void (*emit_less_unsigned) (void);
-  void (*emit_ref) (int size);
-  void (*emit_if_goto) (int *offset_p, int *size_p);
-  void (*emit_goto) (int *offset_p, int *size_p);
-  void (*write_goto_address) (CORE_ADDR from, CORE_ADDR to, int size);
-  void (*emit_const) (LONGEST num);
-  void (*emit_call) (CORE_ADDR fn);
-  void (*emit_reg) (int reg);
-  void (*emit_pop) (void);
-  void (*emit_stack_flush) (void);
-  void (*emit_zero_ext) (int arg);
-  void (*emit_swap) (void);
-  void (*emit_stack_adjust) (int n);
-
-  /* Emit code for a generic function that takes one fixed integer
-     argument and returns a 64-bit int (for instance, tsv getter).  */
-  void (*emit_int_call_1) (CORE_ADDR fn, int arg1);
-
-  /* Emit code for a generic function that takes one fixed integer
-     argument and a 64-bit int from the top of the stack, and returns
-     nothing (for instance, tsv setter).  */
-  void (*emit_void_call_2) (CORE_ADDR fn, int arg1);
-
-  /* Emit code specialized for common combinations of compare followed
-     by a goto.  */
-  void (*emit_eq_goto) (int *offset_p, int *size_p);
-  void (*emit_ne_goto) (int *offset_p, int *size_p);
-  void (*emit_lt_goto) (int *offset_p, int *size_p);
-  void (*emit_le_goto) (int *offset_p, int *size_p);
-  void (*emit_gt_goto) (int *offset_p, int *size_p);
-  void (*emit_ge_goto) (int *offset_p, int *size_p);
-};
-
-extern CORE_ADDR current_insn_ptr;
-extern int emit_error;
-
-#endif /* GDBSERVER_AX_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/ChangeLog ./gdb/gdbserver/ChangeLog
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/ChangeLog	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/ChangeLog	1970-01-01 00:00:00.000000000 +0000
@@ -1,17819 +0,0 @@
-2020-01-28  Hannes Domani  <ssbssa@yahoo.de>
-
-	* server.c (handle_qxfer_libraries): Write segment-address with
-	paddress.
-
-2020-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* server.c (gdbserver_version): Change copyright year to 2020.
-	* gdbreplay.c (gdbreplay_version): Likewise.
-
-2019-12-26  Christian Biesinger  <cbiesinger@google.com>
-
-	* configure: Regenerate.
-	* configure.ac: Quote variable arguments of test.
-
-2019-12-10  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Add safe-strerror.c to gdbreplay and IPA, and change
-	UNDO_GNULIB_CFLAGS to undo strerror_r instead of strerror.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac: Don't check for strerror.
-	* linux-i386-ipa.c (initialize_fast_tracepoint_trampoline_buffer):
-	Call safe_strerror instead of strerror.
-	* server.h (strerror): Remove this now-unnecessary declaration.
-	* tracepoint.c (init_named_socket): Call safe_strerror instead of
-	strerror.
-	(gdb_agent_helper_thread): Likewise.
-	* utils.c (perror_with_name): Likewise.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* configure, config.in: Rebuild.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* remote-utils.c (block_unblock_async_io): Use gdb_sigmask.
-	* linux-low.c (linux_wait_for_event_filtered, linux_async): Use
-	gdb_sigmask.
-	* configure, config.in: Rebuild.
-
-2019-11-26  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables.
-	(INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS.
-	(GDBSERVER_LIBS): Use PTHREAD_LIBS.
-	* acinclude.m4: Include ax_pthread.m4.
-	* config.in, configure: Rebuild.
-
-2019-11-26  Christian Biesinger  <cbiesinger@google.com>
-
-	* debug.c (debug_set_output): Call safe_strerror instead of
-	strerror.
-	* linux-low.c (attach_proc_task_lwp_callback): Likewise.
-	(linux_kill_one_lwp): Likewise.
-	(linux_detach_one_lwp): Likewise.
-	(linux_wait_for_event_filtered): Likewise.
-	(store_register): Likewise.
-	* lynx-low.c (lynx_attach): Likewise.
-	* mem-break.c (insert_memory_breakpoint): Likewise.
-	(remove_memory_breakpoint): Likewise.
-	(delete_fast_tracepoint_jump): Likewise.
-	(set_fast_tracepoint_jump): Likewise.
-	(uninsert_fast_tracepoint_jumps_at): Likewise.
-	(reinsert_fast_tracepoint_jumps_at): Likewise.
-	* nto-low.c (nto_xfer_memory): Likewise.
-	(nto_resume): Likewise.
-
-2019-11-20  Luis Machado  <luis.machado@linaro.org>
-
-	* linux-aarch64-low.c (is_sve_tdesc): Check against target feature
-	instead of register count.
-	* tdesc.c (tdesc_contains_feature): New function.
-	* tdesc.h (tdesc_contains_feature): New prototype.
-
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* Makefile.in: Add safe-strerror.c.
-	* configure: Regenerate.
-	* configure.ac: Don't source common.host.
-
-2019-11-15  Christian Biesinger  <cbiesinger@google.com>
-
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2019-11-12  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* ax.c (ax_printf): Handle size_t_arg.
-
-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-01  Christian Biesinger  <cbiesinger@google.com>
-
-	* configure: Regenerate.
-	* configure.ac: Remove check for strerror_r.
-
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
-
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac: Also check for strerror_r.
-
-2019-10-31  Christian Biesinger  <cbiesinger@google.com>
-
-	* ax.h (debug_agent): Remove duplicate declaration.
-
-2019-10-26  Tom de Vries  <tdevries@suse.de>
-
-	* linux-aarch64-low.c: Fix typos in comments.
-	* linux-arm-low.c: Same.
-	* linux-low.c: Same.
-	* linux-ppc-low.c: Same.
-	* proc-service.c: Same.
-	* regcache.h: Same.
-	* server.c: Same.
-	* tracepoint.c: Same.
-	* win32-low.c: Same.
-
-2019-10-25  Tom Tromey  <tromey@adacore.com>
-
-	* utils.c (xstrdup): Remove.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* configure, config.in: Rebuild.
-
-2019-10-23  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* acinclude.m4: Use m4_include, not sinclude.
-
-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 (stamp-h, Makefile): Use new-style config.status
-	invocation.
-
-2019-10-16  Christian Biesinger  <cbiesinger@google.com>
-
-	* server.c: Include xml-builtin.h.
-	(get_xml_features): Don't declare xml_builtins here.
-
-2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* Makefile.in: Remove references to vec-ipa.o.
-
-2019-10-15  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* Makefile.in: Remove references to vec.c.
-
-2019-10-02  Christian Biesinger  <cbiesinger@google.com>
-
-	* server.c (server_waiting): Change to bool.
-	(extended_protocol): Likewise.
-	(response_needed): Likewise.
-	(exit_requested): Likewise.
-	(run_once): Likewise.
-	(report_no_resumed): Likewise.
-	(non_stop): Likewise.
-	(disable_packet_vCont): Likewise.
-	(disable_packet_Tthread): Likewise.
-	(disable_packet_qC): Likewise.
-	(disable_packet_qfThreadInfo): Likewise.
-	(handle_general_set): Update.
-	(handle_detach): Update.
-	(handle_monitor_command): Update.
-	(handle_query): Update.
-	(captured_main): Update.
-	(process_serial_event): Update.
-	* server.h (server_waiting): Change to bool.
-	(disable_packet_vCont): Likewise.
-	(disable_packet_Tthread): Likewise.
-	(disable_packet_qC): Likewise.
-	(disable_packet_qfThreadInfo): Likewise.
-	(run_once): Likewise.
-	(non_stop): Likewise.
-	* target.c (target_stop_and_wait): Update.
-
-2019-10-02  Tom Tromey  <tromey@adacore.com>
-
-	* Makefile.in (SFILES): Add common-inferior.c.
-	(OBS): Add common-inferior.o.
-	* server.c (startup_with_shell): Don't define.
-
-2019-10-02  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* linux-low.c (linux_low_read_btrace): Update for change to
-	std::vector.
-
-2019-09-20  Christian Biesinger  <cbiesinger@google.com>
-
-	* debug.c (debug_threads): Remove comment in favor of the header.
-	* debug.h (using_threads): Add declaration.
-	(debug_threads): Add comment.
-	* linux-aarch64-low.c: Include debug.h and remove declaration of
-	debug_threads.
-	* nto-low.c: Likewise.
-	* remote-utils.c: Likewise.
-	* thread-db.c: Likewise.
-
-2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv (ipa_ppc_linux_regobj): Remove powerpc-cell32l-ipa.o
-	and powerpc-cell64l-ipa.o.
-	(powerpc*-*-linux*): Remove powerpc-cell32l.o and powerpc-cell64l.o
-	from srv_regobj.  Remove rs6000/powerpc-cell32l.xml and
-	rs6000/powerpc-cell64l.xml from srv_xmlfiles.
-	(spu*-*-*): Remove.
-
-	* spu-low.c: Remove file.
-
-	* linux-ppc-low.c (INSTR_SC, NR_spu_run): Remove.
-	(parse_spufs_run): Remove.
-	(ppc_get_pc): Remove Cell/B.E. support.
-	(ppc_set_pc): Likewise.
-	(ppc_breakpoint_at): Likewise.
-	(ppc_arch_setup): Likewise.
-	(ppc_get_ipa_tdesc_idx): Do not handle tdesc_powerpc_cell64l or
-	tdesc_powerpc_cell32l.
-	(initialize_low_arch): Do not call init_registers_powerpc_cell64l
-	or init_registers_powerpc_cell32l.
-	* linux-ppc-ipa.c (get_ipa_tdesc): Do not handle PPC_TDESC_CELL.
-	(initialize_low_tracepoint): Do not call init_registers_powerpc_cell64l
-	or init_registers_powerpc_cell32l.
-	* linux-ppc-tdesc-init.h (PPC_TDESC_CELL): Mark as unused.
-	(init_registers_powerpc_cell32l): Remove prototype.
-	(init_registers_powerpc_cell64l): Likewise.
-
-	* target.h (struct target_ops): Remove qxfer_spu member.
-	* server.c (handle_qxfer_spu): Remove.
-	(qxfer_packets): Remove entry for "spu".
-	(handle_query): No longer support qXfer:spu:read or qXfer:spu:write.
-	* linux-low.c (SPUFS_MAGIC): Remove.
-	(spu_enumerate_spu_ids): Remove.
-	(linux_qxfer_spu): Remove.
-	(linux_target_ops): Remove qxfer_spu member.
-	* lynx-low.c (lynx_target_ops): Remove qxfer_spu member.
-	* nto-low.c (nto_target_ops): Remove qxfer_spu member.
-	* win32-low.c (win32_target_ops): Remove qxfer_spu member.
-
-2019-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'.
-	(OBS): Add 'gdbsupport/gdb-dlfcn.o'.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2019-08-15  Tom Tromey  <tromey@adacore.com>
-
-	* target.c (target_write_memory): Use gdb::byte_vector.
-
-2019-08-15  Tom Tromey  <tromey@adacore.com>
-
-	* tracepoint.c (write_inferior_data_pointer)
-	(write_inferior_integer, write_inferior_int8)
-	(write_inferior_uinteger, m_tracepoint_action_download)
-	(r_tracepoint_action_download, x_tracepoint_action_download)
-	(l_tracepoint_action_download, clear_inferior_trace_buffer)
-	(download_agent_expr, download_tracepoint_1)
-	(download_trace_state_variables, upload_fast_traceframes): Update.
-	* server.c (gdb_write_memory): Update.
-	* remote-utils.c (relocate_instruction): Update.
-	* proc-service.c (ps_pdwrite): Update.
-	* mem-break.c (remove_memory_breakpoint)
-	(delete_fast_tracepoint_jump, set_fast_tracepoint_jump)
-	(uninsert_fast_tracepoint_jumps_at)
-	(reinsert_fast_tracepoint_jumps_at): Update.
-	* linux-x86-low.c (append_insns)
-	(i386_install_fast_tracepoint_jump_pad)
-	(amd64_write_goto_address, i386_write_goto_address): Update.
-	* linux-s390-low.c (append_insns, s390_write_goto_address):
-	Update.
-	* linux-ppc-low.c (ppc_relocate_instruction)
-	(ppc_install_fast_tracepoint_jump_pad, emit_insns)
-	(ppc_write_goto_address): Update.
-	* linux-aarch64-low.c (append_insns): Update.
-	* target.h (struct target_ops): Update.
-	(write_inferior_memory): Don't declare.
-	* target.c (target_write_memory): Rename from
-	write_inferior_memory.  Remove old target_write_memory.
-
-2019-08-15  Tom Tromey  <tromey@adacore.com>
-
-	* target.c (write_inferior_memory): Use std::vector.
-
-2019-08-06  Frank Ch. Eigler  <fche@redhat.com>
-
-	PR build/24886
-	* configure.ac: Drop enable-libmcheck support.
-	* configure, config.in: Rebuild.
-	* acinclude.m4: Don't include it.
-
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Remove Arm xml files.
-
-2019-07-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Add new files. Remove xml generated files.
-	* linux-aarch32-low.c (initialize_low_arch_aarch32): Don't init
-	registers.
-	* linux-aarch32-low.h (tdesc_arm_with_neon): Remove.
-	* linux-aarch32-tdesc.c: New file.
-	* linux-aarch32-tdesc.h: New file.
-	* linux-aarch64-low.c (aarch64_arch_setup): Call aarch32_linux_read_description.
-	* linux-arm-low.c (init_registers_arm, tdesc_arm)
-	(init_registers_arm_with_iwmmxt, tdesc_arm_with_iwmmxt)
-	(init_registers_arm_with_vfpv2, tdesc_arm_with_vfpv2)
-	(init_registers_arm_with_vfpv3, tdesc_arm_with_vfpv3): Remove.
-	(arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset)
-	(arm_store_vfpregset): Call arm_linux_get_tdesc_fp_type.
-	(arm_read_description): Call arm_linux_read_description.
-	(initialize_low_arch): Don't init registers.
-	* linux-arm-tdesc.c: New file.
-	* linux-arm-tdesc.h: New file.
-
-2019-07-10  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-arm-low.c (arm_fill_wmmxregset, arm_store_wmmxregset):
-	Move counter inside for.
-	(arm_read_description): Check ptrace earlier.
-	(arm_arch_setup): Call arm_linux_init_hwbp_cap here.
-
-2019-07-09  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* configure.ac: Change common to gdbsupport.
-	* acinclude.m4: Change common to gdbsupport.
-	* Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS)
-	(version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change
-	common to gdbsupport.
-	* ax.c, event-loop.c, fork-child.c, gdb_proc_service.h,
-	gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c,
-	inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c,
-	linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c,
-	linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c,
-	linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h,
-	nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c,
-	server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h,
-	thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change
-	common to gdbsupport.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch32-low.c (arm_read_description, arm_regsets): Use new
-	defines.
-	* linux-arm-low.c (arm_read_description, arm_regsets): Likewise.
-
-2019-07-04  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Remove legacy xml.
-	* linux-aarch64-low.c (initialize_low_arch): Remove
-	initialize_low_tdesc call.
-	* linux-aarch64-tdesc-selftest.c: Remove file.
-	* linux-aarch64-tdesc.h (initialize_low_tdesc): Remove.
-	* linux-x86-low.c (initialize_low_arch): Remove
-	initialize_low_tdesc call.
-	* linux-x86-tdesc-selftest.c: Remove file.
-	* linux-x86-tdesc.h (initialize_low_tdesc): Remove.
-
-2019-06-20  Tom de Vries  <tdevries@suse.de>
-
-	* linux-s390-ipa.c (get_ipa_tdesc)[!__s390x__]: Use
-	s390_te_linux64_ft_collect_regmap for S390_TDESC_GS.
-
-2019-06-19  Tom de Vries  <tdevries@suse.de>
-
-	* debug.h (debug_write): Change return type to ssize_t.
-	* debug.c (debug_write): Same.
-
-2019-06-14  Tom Tromey  <tom@tromey.com>
-
-	* configure.ac: Use new path to gnulib.
-	* configure: Rebuild.
-	* Makefile.in (INCGNU, $(GNULIB_BUILDDIR)/Makefile): Use new path
-	to gnulib.
-
-2019-06-11  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (SFILES): Add alloc.c.
-	(OBS): Add alloc.o.
-	(IPA_OBJS): Add alloc-ipa.o.
-	(alloc-ipa.o): New target.
-	(%.o: ../%.c): New pattern rule.
-
-2019-06-10  Tom Tromey  <tromey@adacore.com>
-
-	* remote-utils.c (look_up_one_symbol, relocate_instruction): Don't
-	end warning with a newline.
-	* linux-s390-low.c (s390_get_wordsize): Don't end warning with a
-	newline.
-	* thread-db.c (attach_thread): Don't end warning with a newline.
-	(thread_db_notice_clone): Likewise.
-	* tracepoint.c (gdb_agent_helper_thread): Don't end warning with a
-	newline.
-	* linux-x86-low.c (x86_get_min_fast_tracepoint_insn_len): Don't
-	end warning with a newline.
-
-2019-06-04  Pedro Alves  <palves@redhat.com>
-
-	* server.c (captured_main): Use make_unique_xstrdup.
-
-2019-06-02  Tom Tromey  <tom@tromey.com>
-
-	* gdbreplay.c (fromhex): Remove.
-	* Makefile.in (GDBREPLAY_OBS): Add rsp-low.o.
-
-2019-05-29  Tom Tromey  <tromey@adacore.com>
-
-	* configure: Rebuild.
-
-2019-05-06  Kevin Buettner  <kevinb@redhat.com>
-
-	* linux-x86-low.c (x86_fill_gregset): Don't compile 64-bit
-	sign extension code on 32-bit builds.
-
-2019-05-03  Eli Zaretskii  <eliz@gnu.org>
-
-	* remote-utils.c:
-	* gdbreplay.c [USE_WIN32API]: Remove the _WIN32_WINNT override.
-
-2019-04-19  Tom Tromey  <tom@tromey.com>
-
-	* server.c (struct vstop_notif): Derive from notif_event.
-	<base>: Remove.
-	(queue_stop_reply): Update.
-	(remove_all_on_match_ptid): Change type.  Rewrite.
-	(discard_queued_stop_replies): Rewrite.
-	(in_queued_stop_replies_ptid): Change type.
-	(in_queued_stop_replies): Rewrite.
-	(notif_stop): Update.
-	(queue_stop_reply_callback): Update.
-	(captured_main): Don't call initialize_notif.
-	(push_stop_notification): Update.
-	* notif.c (notif_write_event, handle_notif_ack)
-	(notif_event_enque, notif_push): Update.
-	(notif_event_xfree, initialize_notif): Remove.
-	* notif.h (struct notif_event): Include <list>, not
-	"common/queue.h".
-	(struct notif_server) <queue>: Now a std::list.
-	(notif_event_p): Remove typedef.
-	(initialize_notif): Don't declare.
-	(struct notif_event): Add virtual destructor.
-
-2019-04-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* ax.c (ax_vdebug): Call debug_printf.
-	* debug.c (debug_write): New function.
-	* debug.h (debug_write): New declaration.
-	* linux-low.c (sigchld_handler): Call debug_write.
-
-2019-04-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* debug.c (debug_set_output): New function.
-	(debug_vprintf): Send output to debug_file.
-	(debug_flush): Likewise.
-	* debug.h (debug_set_output): New declaration.
-	* server.c (handle_monitor_command): Add debug-file option.
-	(captured_main): Likewise.
-
-2019-04-17  Alan Hayward  <alan.hayward@arm.com>
-
-	* debug.c (remote_debug): Add definition.
-	* debug.h (remote_debug): Add declaration.
-	* hostio.c (remote_debug): Remove declaration.
-	* remote-utils.c (struct ui_file): Likewise.
-	(remote_debug): Likewise.
-	* remote-utils.h (remote_debug): Likewise,
-	* server.c (remote_debug): Remove definition.
-
-2019-04-10  Kevin Buettner  <kevinb@redhat.com>
-
-	* linux-x86-low.c (x86_fill_gregset): Sign extend EAX value
-	when using a 64-bit gdbserver.
-
-2019-04-09  Tom Tromey  <tromey@adacore.com>
-
-	* linux-low.c (select_event_lwp): Use find_thread_in_random.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c (linux_detach_one_lwp): Replace throw_exception with
-	throw.
-	(linux_resume_one_lwp): Likewise.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* gdbreplay.c: Update.
-	* linux-low.c: Update.
-	* server.c: Update.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* server.c: Use C++ exception handling.
-	* linux-low.c: Use C++ exception handling.
-	* gdbreplay.c: Use C++ exception handling.
-
-2019-04-08  Tom Tromey  <tom@tromey.com>
-
-	* server.c (handle_btrace_general_set, handle_qxfer_btrace)
-	(handle_qxfer_btrace_conf, detach_or_kill_for_exit_cleanup)
-	(captured_main, main): Update.
-	* gdbreplay.c (main): Update.
-
-2019-04-05  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* linux-low.c (linux_get_auxv): Remove static.  Return auxv entry
-	value in argument pointer, return 1 if the entry is found and 0
-	otherwise.  Move comment.
-	(linux_get_hwcap, linux_get_hwcap2): Use modified linux_get_auxv.
-	* linux-low.h (linux_get_auxv): Declare.
-	* linux-ppc-low.c (is_elfv2_inferior): Use linux_get_auxv.
-
-2019-04-05  Tom Tromey  <tromey@adacore.com>
-
-	* server.c (gdbserver_usage): Use upper-case for metasyntactic
-	variables.
-
-2019-03-28  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-low.c (AT_HWCAP2): Add define if not already included.
-
-2019-03-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-low.c (aarch64_get_hwcap): Remove function.
-	(aarch64_arch_setup): Call linux_get_hwcap.
-	* linux-arm-low.c (arm_get_hwcap): Remove function.
-	(arm_read_description): Call linux_get_hwcap.
-	* linux-low.c (linux_get_auxv): New function.
-	(linux_get_hwcap): Likewise.
-	(linux_get_hwcap2): Likewise.
-	* linux-low.h (linux_get_hwcap): New declaration.
-	(linux_get_hwcap2): Likewise.
-	* linux-ppc-low.c (ppc_get_auxv): Remove function.
-	(ppc_arch_setup): Call linux_get_hwcap.
-	* linux-s390-low.c (s390_get_hwcap): Remove function.
-	(s390_arch_setup): Call linux_get_hwcap.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* linux-aarch64-low.c (aarch64_store_pauthregset): New function.
-	* linux-low.c (regsets_store_inferior_registers): Allow optional reads
-	to fail.
-	* linux-low.h (enum regset_type): Add OPTIONAL_REGS.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* linux-aarch64-low.c (AARCH64_HWCAP_PACA): New define.
-	(aarch64_get_hwcap): New function.
-	(aarch64_arch_setup): Read APIA hwcap.
-
-2019-03-22  Alan Hayward  <alan.hayward@arm.com>
-	    Jiong Wang  <jiong.wang@arm.com>
-
-	* linux-aarch64-ipa.c (get_ipa_tdesc): Add pauth param.
-	(initialize_low_tracepoint): Likewise.
-	* linux-aarch64-low.c (aarch64_arch_setup): Likewise.
-	* linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Likewise.
-	* linux-aarch64-tdesc.c (struct target_desc): Likewise.
-	(aarch64_linux_read_description): Likewise.
-	* linux-aarch64-tdesc.h (aarch64_linux_read_description): Likewise.
-
-2019-03-12  John Baldwin  <jhb@FreeBSD.org>
-
-	* linux-x86-tdesc.c (i386_linux_read_description): Update call to
-	i386_create_target_description for 'segments' parameter.
-	* lynx-i386-low.c (lynx_i386_arch_setup): Likewise.
-	* nto-x86-low.c (nto_x86_arch_setup): Likewise.
-	* win32-i386-low.c (i386_arch_setup): Likewise.
-
-2019-03-12  Tom Tromey  <tromey@adacore.com>
-
-	* linux-low.c (iterate_over_lwps): Update.
-
-2019-03-06  Tom Tromey  <tom@tromey.com>
-
-	* server.c (detach_or_kill_for_exit_cleanup): Remove parameter.
-	(captured_main): Use SCOPE_EXIT.
-
-2019-03-04  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* configure.srv: Use '$enable_unittest' instead of '$development'
-	when checking whether to fill 'srv_regobj' on 'aarch64*-*-linux*'
-	case.
-
-2019-02-27  Tom Tromey  <tromey@adacore.com>
-
-	* gdbreplay.c (logchar): Handle \r\n.
-
-2019-02-07  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-low.c (linux_attach): Add process before lwp.
-	* server.c (attach_inferior): Check if already attached.
-
-2019-02-07  Tom Tromey  <tom@tromey.com>
-
-	* x86-tdesc.h: Rename include guard.
-	* x86-low.h: Add include guard.
-	* wincecompat.h: Rename include guard.
-	* win32-low.h: Add include guard.
-	* utils.h: Rename include guard.
-	* tracepoint.h: Rename include guard.
-	* tdesc.h: Rename include guard.
-	* target.h: Rename include guard.
-	* server.h: Rename include guard.
-	* remote-utils.h: Rename include guard.
-	* regcache.h: Rename include guard.
-	* nto-low.h: Rename include guard.
-	* notif.h: Add include guard.
-	* mem-break.h: Rename include guard.
-	* lynx-low.h: Add include guard.
-	* linux-x86-tdesc.h: Add include guard.
-	* linux-s390-tdesc.h: Add include guard.
-	* linux-ppc-tdesc-init.h: Add include guard.
-	* linux-low.h: Add include guard.
-	* linux-aarch64-tdesc.h: Add include guard.
-	* linux-aarch32-low.h: Add include guard.
-	* inferiors.h: Rename include guard.
-	* i387-fp.h: Rename include guard.
-	* hostio.h: Rename include guard.
-	* gdbthread.h: Rename include guard.
-	* gdb_proc_service.h: Rename include guard.
-	* event-loop.h: Rename include guard.
-	* dll.h: Rename include guard.
-	* debug.h: Rename include guard.
-	* ax.h: Rename include guard.
-
-2018-01-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
-
-	PR gdb/23985
-	* Makefile.in (IPAGENT_CFLAGS): Add UNDO_GNULIB_CFLAGS.
-	(UNDO_GNULIB_CFLAGS): Undo gnulib replacements.
-
-2019-01-25  Tom Tromey  <tom@tromey.com>
-
-	* Makefile.in (INCLUDE_CFLAGS): Don't add -I for common.
-
-2019-01-25  Tom Tromey  <tom@tromey.com>
-
-	* win32-low.c: Fix common/ includes.
-	* win32-i386-low.c: Fix common/ includes.
-	* tracepoint.c: Fix common/ includes.
-	* thread-db.c: Fix common/ includes.
-	* target.h: Fix common/ includes.
-	* symbol.c: Fix common/ includes.
-	* spu-low.c: Fix common/ includes.
-	* server.h: Fix common/ includes.
-	* server.c: Fix common/ includes.
-	* remote-utils.c: Fix common/ includes.
-	* regcache.h: Fix common/ includes.
-	* regcache.c: Fix common/ includes.
-	* nto-x86-low.c: Fix common/ includes.
-	* notif.h: Fix common/ includes.
-	* mem-break.h: Fix common/ includes.
-	* lynx-low.c: Fix common/ includes.
-	* lynx-i386-low.c: Fix common/ includes.
-	* linux-x86-tdesc-selftest.c: Fix common/ includes.
-	* linux-x86-low.c: Fix common/ includes.
-	* linux-low.c: Fix common/ includes.
-	* inferiors.h: Fix common/ includes.
-	* i387-fp.c: Fix common/ includes.
-	* hostio.c: Fix common/ includes.
-	* hostio-errno.c: Fix common/ includes.
-	* gdbthread.h: Fix common/ includes.
-	* gdbreplay.c: Fix common/ includes.
-	* fork-child.c: Fix common/ includes.
-	* event-loop.c: Fix common/ includes.
-	* ax.c: 
-	(enum gdb_agent_op): Fix common/ includes.
-
-2019-01-21  Tom Tromey  <tom@tromey.com>
-
-	* tracepoint.c: Fix includes.
-	* remote-utils.c: Fix includes.
-	* linux-x86-low.c: Fix includes.
-
-2019-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c (gdbreplay_version): Update copyright year in
-	version message.
-	* server.c (gdbserver_version): Likewise.
-
-2018-12-05  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-low.c (add_lwp): Switch ordering.
-
-2018-11-29  Tom Tromey  <tom@tromey.com>
-
-	* win32-low.c (win32_join): Take pid, not process.
-	* target.h (struct target_ops) <join>: Change argument type.
-	(join_inferior): Change argument name.
-	* spu-low.c (spu_join): Take pid, not process.
-	* server.c (handle_detach): Preserve pid before destroying
-	process.
-	* lynx-low.c (lynx_join): Take pid, not process.
-	* linux-low.c (linux_join): Take pid, not process.
-
-2018-11-23  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-low.c (aarch64_cannot_store_register): Remove.
-	(aarch64_cannot_fetch_register): Likewise.
-	(struct linux_target_ops): Update references.
-
-2018-10-31  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* linux-ppc-low.c: Include nat/linux-ptrace.h.
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* configure.srv (ipa_ppc_linux_regobj): Add
-	powerpc-isa207-htm-vsx32l-ipa.o and
-	powerpc-isa207-htm-vsx64l-ipa.o.
-	(powerpc*-*-linux*): Add powerpc-isa207-htm-vsx32l.o and
-	powerpc-isa207-htm-vsx64l.o to srv_regobj.  Add
-	rs6000/power-htm-spr.xml, rs6000/power-htm-core.xml,
-	rs6000/power64-htm-core.xml, rs6000/power-htm-fpu.xml,
-	rs6000/power-htm-altivec.xml, rs6000/power-htm-vsx.xml,
-	rs6000/power-htm-ppr.xml, rs6000/power-htm-dscr.xml,
-	rs6000/power-htm-tar.xml, rs6000/powerpc-isa207-htm-vsx32l.xml,
-	and rs6000/powerpc-isa207-htm-vsx64l.xml to srv_xmlfiles.
-	* linux-ppc-tdesc-init.h (enum ppc_linux_tdesc)
-	<PPC_TDESC_ISA207_HTM_VSX>: New enum value.
-	(init_registers_powerpc_isa207_htm_vsx32l)
-	(init_registers_powerpc_isa207_htm_vsx64l): Declare.
-	* linux-ppc-low.c (ppc_fill_tm_sprregset, ppc_store_tm_sprregset)
-	(ppc_store_tm_cgprregset, ppc_store_tm_cfprregset)
-	(ppc_store_tm_cvrregset, ppc_store_tm_cvsxregset)
-	(ppc_store_tm_cpprregset, ppc_store_tm_cdscrregset)
-	(ppc_store_tm_ctarregset): New functions.
-	(ppc_regsets): Add entries for HTM regsets.
-	(ppc_arch_setup): Set htm in features struct when needed.  Set
-	sizes for the HTM regsets.
-	(ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_HTM_VSX.
-	(initialize_low_arch): Call
-	init_registers_powerpc_isa207_htm_vsx32l and
-	init_registers_powerpc_isa207_htm_vsx64l.
-	* linux-ppc-ipa.c (get_ipa_tdesc): Handle
-	PPC_TDESC_ISA207_HTM_VSX.
-	(initialize_low_tracepoint): Call
-	init_registers_powerpc_isa207_htm_vsx32l and
-	init_registers_powerpc_isa207_htm_vsx64l.
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* configure.srv (powerpc*-*-linux*): Add rs6000/power-ebb.xml and
-	rs6000/power-linux-pmu.xml to srv_xmlfiles.
-	* linux-ppc-low.c (ppc_store_ebbregset, ppc_fill_pmuregset)
-	(ppc_store_pmuregset): New functions.
-	(ppc_regsets): Add entries for ebb and pmu regsets.
-	(ppc_arch_setup): Set isa207 in features struct if the ebb and
-	pmu regsets are available.  Set sizes for these regsets.
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* configure.srv (ipa_ppc_linux_regobj): Add
-	powerpc-isa207-vsx64l-ipa.o and powerpc-isa207-vsx32l-ipa.o.
-	(powerpc*-*-linux*): Add powerpc-isa207-vsx32l.o and
-	powerpc-isa207-vsx64l.o to srv_regobj, add rs6000/power-tar.xml,
-	rs6000/powerpc-isa207-vsx32l.xml, and
-	rs6000/powerpc-isa207-vsx64l.xml to srv_xmlfiles.
-	* linux-ppc-tdesc-init.h (enum ppc_linux_tdesc)
-	<PPC_TDESC_ISA207_VSX>: New enum value.
-	(init_registers_powerpc_isa207_vsx32l): Declare.
-	(init_registers_powerpc_isa207_vsx64l): Declare.
-	* linux-ppc-low.c (ppc_fill_tarregset): New function.
-	(ppc_store_tarregset): New function.
-	(ppc_regsets): Add entry for the TAR regset.
-	(ppc_arch_setup): Set isa207 in features struct when needed.  Set
-	size for the TAR regsets.
-	(ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_VSX.
-	(initialize_low_arch): Call init_registers_powerpc_isa207_vsx32l
-	and init_registers_powerpc_isa207_vsx64l.
-	* linux-ppc-ipa.c (get_ipa_tdesc): Handle PPC_TDESC_ISA207_VSX.
-	(initialize_low_tracepoint): Call
-	init_registers_powerpc_isa207_vsx32l and
-	init_registers_powerpc_isa207_vsx64l.
-
-2018-10-26  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
-	    Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* configure.srv (ipa_ppc_linux_regobj): Add
-	powerpc-isa205-ppr-dscr-vsx32l-ipa.o and
-	powerpc-isa205-ppr-dscr-vsx64l-ipa.o.
-	(powerpc*-*-linux*): Add powerpc-isa205-ppr-dscr-vsx32l.o and
-	powerpc-isa205-ppr-dscr-vsx64l.o to srv_regobj, add
-	rs6000/power-dscr.xml, rs6000/power-ppr.xml,
-	rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml and
-	rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml to srv_xmlfiles.
-	* linux-ppc-tdesc-init.h (enum ppc_linux_tdesc)
-	<PPC_TDESC_ISA205_PPR_DSCR_VSX>: New enum value.
-	(init_registers_powerpc_isa205_ppr_dscr_vsx32l)
-	(init_registers_powerpc_isa205_ppr_dscr_vsx64l): Declare.
-	* linux-ppc-low.c: Include "elf/common.h" and <sys/uio.h>.
-	(ppc_hwcap): Add comment.
-	(ppc_hwcap2): New global.
-	(ppc_check_regset, ppc_fill_pprregset, ppc_store_pprregset)
-	(ppc_fill_dscrregset, ppc_store_dscrregset): New functions.
-	(ppc_regsets): Add entries for the DSCR and PPR regsets.
-	(ppc_arch_setup): Get AT_HWCAP2.  Set ppr_dscr in features struct
-	when needed.  Set sizes for the the DSCR and PPR regsets.
-	(ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA205_PPR_DSCR_VSX.
-	(initialize_low_arch): Call
-	init_registers_powerpc_isa205_ppr_dscr_vsx32l and
-	init_registers_powerpc_isa205_ppr_dscr_vsx64l.
-	* linux-ppc-ipa.c (get_ipa_tdesc): Handle
-	PPC_TDESC_ISA205_PPR_DSCR_VSX.
-	(initialize_low_tracepoint): Call
-	init_registers_powerpc_isa205_ppr_dscr_vsx32l and
-	init_registers_powerpc_isa205_ppr_dscr_vsx64l.
-
-2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
-
-	* linux-ppc-low.c (ppc_fill_vrregset): Remove memset calls.
-
-2018-10-10  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Simon Marchi <simark@simark.ca>
-
-	* acinclude.m4: Include "../selftest.m4".
-	* configure: Regenerate.
-	* configure.ac: Use "GDB_AC_SELFTEST".
-	* configure.srv: Use "$enable_unittests" instead of
-	"$development" when checking whether unit tests have been
-	enabled.
-	* server.c (captured_main): Update message informing that
-	selftests have been disabled.
-
-2018-10-04  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-10-04  Tom Tromey  <tom@tromey.com>
-
-	* server.c (handle_status): Rename inner "thread".
-	(process_serial_event): Declare "res" in 'm' case.
-	* linux-low.c (last_thread_of_process_p, find_lwp_pid)
-	(iterate_over_lwps): Rename inner "thread".
-	(linux_qxfer_libraries_svr4): Rename inner "len".
-	* gdbthread.h (find_thread_in_random): Rename inner "thread".
-
-2018-10-01  Gary Benson <gbenson@redhat.com>
-
-	* gdb_proc_service.h: Moved common code to
-	common/gdb_proc_service.h.
-
-2018-10-01  Gary Benson <gbenson@redhat.com>
-
-	* gdb_proc_service.h: Synchronize comments and whitespace with
-	GDB's version of this file.
-
-2018-09-25  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-	* configure.ac (WARN_CFLAGS): Don't remove -Wmissing-prototypes.
-
-2018-09-16  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (gdbserver$(EXEEXT)): Sort OBS.
-	(gdbreplay$(EXEEXT)): Sort GDBREPLAY_OBS.
-	($(IPA_LIB)): Sort IPA_OBJS.
-
-2018-09-16  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in: Remove references to $(ADD_DEPS).
-
-2018-09-16  Tom Tromey  <tom@tromey.com>
-
-	* remote-utils.c (remote_open): Use GNU style for metasyntactic
-	variables.
-	* gdbreplay.c (gdbreplay_usage): Use GNU style for metasyntactic
-	variables.
-
-2018-09-05  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-08-28  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	PR build/23399
-	* tracepoint.c (IPA_SYM_STRUCT_NAME): Define.
-
-2018-08-27  Tom Tromey  <tom@tromey.com>
-
-	PR build/23087:
-	* configure: Rebuild.
-
-2018-08-27  Tom Tromey  <tom@tromey.com>
-
-	* linux-s390-low.c (s390_emit_ext, s390_emit_litpool)
-	(s390_emit_const, s390_emit_reg, s390_emit_zero_ext)
-	(s390_emit_stack_adjust, s390_emit_set_r2, s390x_emit_ext)
-	(s390x_emit_const, s390x_emit_reg, s390x_emit_zero_ext)
-	(s390x_emit_stack_adjust): Add casts to unsigned char.
-
-2018-08-22  Simon Marchi  <simon.marchi@ericsson.com>
-
-	PR gdb/23374
-	PR gdb/23375
-	* server.h (struct client_state) <disable_randomization>:
-	Initialize to 1.
-
-2018-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-mips-low.c (mips_collect_ptrace_register): Remove unused
-	variable.
-	(mips_supply_ptrace_register): Likewise.
-
-2018-07-22  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-07-22  Tom Tromey  <tom@tromey.com>
-
-	* win32-low.c (win32_create_inferior): Remove unused variables.
-	* gdbreplay.c (remote_open): Remove unused variable.
-	* remote-utils.c (remote_prepare): Remove unused variable.
-	* x86-tdesc.h (X86_TDESC_H): Define.
-	(amd64_expedite_regs): Define conditionally.
-	(i386_expedite_regs): Mark ATTRIBUTE_UNUSED.
-	* linux-x86-tdesc.c (i386_tdescs): Move inside #if.
-	* remote-utils.c (readchar): Remove unused variable.
-
-2018-07-13  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_kill): Change parameter to process_info
-	pointer instead of pid.  Adjust.
-	* lynx-low.c (lynx_kill): Likewise.
-	* nto-low.c (nto_kill): Likewise.
-	* spu-low.c (spu_kill): Likewise.
-	* win32-low.c (win32_kill): Likewise.
-	* server.c (handle_v_kill, kill_inferior_callback)
-	(detach_or_kill_for_exit): Adjust.
-	* target.c (kill_inferior): Change parameter to process_info
-	pointer instead of pid.  Adjust.
-	* target.h (struct target_ops) <kill>: Change parameter to
-	process_info pointer instead of pid.  Adjust all implementations
-	and callers.
-	(kill_inferior): Likewise.
-
-2018-07-13  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_detach, linux_join): Change parameter to
-	process_info pointer instead of pid.  Adjust.
-	* lynx-low.c (lynx_detach, lynx_join): Likewise.
-	* nto-low.c (nto_detach): Likewise.
-	* spu-low.c (spu_detach, spu_join): Likewise.
-	* win32-low.c (win32_detach, win32_join): Likewise.
-	* server.c (handle_detach, detach_or_kill_for_exit): Adjust.
-	* target.h (struct target_ops) <detach, join>: Change parameter to
-	process_info pointer instead of pid.  Adjust all implementations
-	and callers.
-	(detach_inferior, join_inferior): Rename 'pid' parameter to
-	'proc'.
-
-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>
-
-	* Makefile.in (SFILES): Add '$(srcdir)/common/netstuff.c'.
-	(OBS): Add 'common/netstuff.o'.
-	(GDBREPLAY_OBS): Likewise.
-	* gdbreplay.c: Include 'wspiapi.h' and 'netstuff.h'.
-	(remote_open): Implement support for IPv6
-	connections.
-	* remote-utils.c: Include 'netstuff.h', 'filestuff.h'
-	and 'wspiapi.h'.
-	(handle_accept_event): Accept connections from IPv6 sources.
-	(remote_prepare): Handle IPv6-style hostnames; implement
-	support for IPv6 connections.
-	(remote_open): Implement support for printing connections from
-	IPv6 sources.
-
-2018-07-11  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/23377
-	* mem-break.c (any_persistent_commands): Add process_info
-	parameter and use it instead of relying on the current process.
-	Change return type to bool.
-	* mem-break.h (any_persistent_commands): Add process_info
-	parameter and change return type to bool.
-	* server.c (handle_detach): Remove require_running_or_return call.
-	Look up the process_info for the process we're about to detach.
-	If not found, return back error to GDB.  Adjust
-	any_persistent_commands call to pass down a process pointer.
-
-2018-07-11  Pedro Alves  <palves@redhat.com>
-
-	* i387-fp.c (i387_cache_to_fsave, cache_to_fxsave)
-	(i387_cache_to_xsave): Use regcache_raw_get_unsigned_by_name
-	instead of collect_register_by_name.
-	* regcache.c (regcache_raw_get_unsigned_by_name): New.
-	* regcache.h (regcache_raw_get_unsigned_by_name): New.
-
-2018-07-04  Vyacheslav Barinov  <v.barinov@samsung.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (initialize_low): Call linux_proc_init_warnings.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c: Update.
-	* lynx-low.c: Update.
-	* mem-break.c: Update.
-	* nto-low.c: Update.
-	* remote-utils.c: Update.
-	* server.c: Update.
-	* spu-low.c: Update.
-	* target.c: Update.
-	* win32-low.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* server.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* target.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c: Update.
-	* linux-mips-low.c: Update.
-	* lynx-low.c: Update.
-	* nto-low.c: Update.
-	* remote-utils.c: Update.
-	* server.c: Update.
-	* spu-low.c: Update.
-	* target.c: Update.
-	* thread-db.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c: Update.
-	* linux-mips-low.c: Update.
-	* lynx-low.c: Update.
-	* mem-break.c: Update.
-	* nto-low.c: Update.
-	* remote-utils.c: Update.
-	* server.c: Update.
-	* spu-low.c: Update.
-	* target.c: Update.
-	* tracepoint.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c: Update.
-	* linux-ppc-low.c: Update.
-	* linux-x86-low.c: Update.
-	* proc-service.c: Update.
-	* server.c: Update.
-	* spu-low.c: Update.
-	* thread-db.c: Update.
-	* win32-low.c: Update.
-
-2018-07-03  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c: Update.
-	* lynx-low.c: Update.
-	* nto-low.c: Update.
-	* remote-utils.c: Update.
-	* spu-low.c: Update.
-	* thread-db.c: Update.
-	* win32-low.c: Update.
-
-2018-06-29  Joel Brobecker  <brobecker@adacore.com>
-
-	* linux-x86-tdesc.c (amd64_linux_read_description): Add missing
-	parameter in call to 'amd64_create_target_description'.
-
-2018-06-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* x86-tdesc.h: Remove executable permission flag.
-
-2018-06-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* configure.ac: Remove AC_PREREQ, add missing quoting.
-	* configure: Re-generate.
-	* config.in: Re-generate.
-	* aclocal.m4: Re-generate.
-
-2018-06-18  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* tracepoint.h (current_traceframe): Remove declaration.
-
-2018-06-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-low.c (is_sve_tdesc): New function.
-	(aarch64_sve_regs_copy_to_regcache): Likewise.
-	(aarch64_sve_regs_copy_from_regcache): Likewise.
-	(aarch64_regs_info): Add SVE checks.
-	(initialize_low_arch): Initialize SVE.
-
-2018-06-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* Makefile.in: Add aarch64-sve-linux-ptrace.c.
-
-2018-06-11  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-ipa.c (get_ipa_tdesc): Add null VQ param.
-	(initialize_low_tracepoint): Likewise
-	* linux-aarch64-low.c (aarch64_arch_setup): Get VQ.
-	* linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Add null VQ
-	param.
-	* linux-aarch64-tdesc.c (aarch64_linux_read_description): Add VQ
-	checks.
-	* linux-aarch64-tdesc.h (aarch64_linux_read_description): Add VQ.
-
-2018-06-11  Alan Hayward  <alan.hayward@arm.com>
-
-	* server.h (PBUFSIZ): Increase size
-
-2018-06-11  Alan Hayward  <alan.hayward@arm.com>
-
-	* regcache.c (regcache::raw_compare): New function.
-	* regcache.h (regcache::raw_compare): New declaration.
-
-2018-06-11  Alan Hayward  <alan.hayward@arm.com>
-
-	* regcache.c (new_register_cache): Use new.
-	(free_register_cache): Use delete.
-	(register_data): Use const.
-	(supply_register): Move body inside regcache.
-	(regcache::raw_supply): New override function.
-	(collect_register): Move body inside regcache.
-	(regcache::raw_collect): New override function.
-	(regcache::get_register_status): New override function.
-	* regcache.h (struct regcache): Inherit from reg_buffer_common.
-
-2018-06-09  Tom Tromey  <tom@tromey.com>
-
-	* event-loop.c (gdb_event, gdb_event_p): Remove typedefs.  Don't
-	declare queue.
-	(event_queue): Use std::queue.
-	(gdb_event_xfree): Remove.
-	(initialize_event_loop, process_event, wait_for_event): Update.
-
-2018-06-08  Stan Cox  <scox@redhat.com>
-
-	* win32-low.c (win32_create_inferior):  last_ptid and last_status
-	moved to client_state.
-
-2018-06-08  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (GDBREPLAY_OBS): Add common/cleanups.o,
-	common/common-exceptions.o, common/common-utils.o,
-	common/errors.o, common/print-utils.o and utils.o.
-	* gdbreplay.c: Include "common-defs.h" instead of the two
-	'config.h's here.  Don't include stdio.h, errno.h, stdlib.h,
-	string.h or alloca.h.
-	(perror_with_name): Delete.
-	(remote_open): Use xstrdup instead of strdup.
-	(main): Rename to ...
-	(captured_main): ... this.
-	(main): New.
-
-2018-06-08  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c (linux_low_read_btrace): Update.
-
-2018-06-04  Stan Cox  <scox@redhat.com>
-
-	* server.h (struct client_state): New.
-	* server.c (cont_thread, general_thread, multi_process)
-	(report_fork_events, report_vfork_events, report_exec_events)
-	(report_thread_events, swbreak_feature, hwbreak_feature)
-	(vCont_supported, disable_randomization, pass_signals)
-	(program_signals, program_signals_p, last_status, last_ptid, own_buf):
-	Moved to client_state.
-	* remote-utils.c (remote_debug, noack_mode)
-	(transport_is_reliable): Moved to client_state.
-	* tracepoint.c (current_traceframe): Moved to client_state.
-
-	Update all callers.
-	* server.c, remote-utils.c, tracepoint.c, fork-child.c,
-	linux-low.c, remote-utils.h, target.c: Use client_state.
-
-2018-05-31  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Add new c/h file.
-
-2018-05-31  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-tdesc.c (aarch64_linux_read_description): Add
-	null VQ.
-
-2018-05-25  Maciej W. Rozycki  <macro@mips.com>
-
-	* gdb.arch/mips-fpregset-core.exp: New test.
-	* gdb.arch/mips-fpregset-core.c: New test source.
-
-2018-05-23  Erik Kurzinger  <ekurzinger@nvidia.com>
-
-	PR server/23198
-	* hostio.c (require_int): Do not report overflow for integers
-	between 0xfffffff and 0x7fffffff.
-
-2018-05-22  Maciej W. Rozycki  <macro@mips.com>
-
-	* linux-mips-low.c [HAVE_PTRACE_GETREGS] (mips_collect_register)
-	(mips_supply_register): Move outside HAVE_PTRACE_GETREGS.
-	(mips_collect_ptrace_register, mips_supply_ptrace_register): New
-	functions.
-	(the_low_target): Wire them.
-
-2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>
-
-	* linux-ppc-low.c (ppc_fill_vrregset): Add vscr_offset variable.
-	Set vscr_offset to 0 in little-endian mode and 12 in big-endian
-	mode. Call collect_register_by_name with vscr using
-	vscr_offset. Zero-pad vscr and vrsave fields in collector buffer.
-	(ppc_store_vrregset): Add and set vscr_offset variable as in
-	ppc_fill_vrregset. Call supply_register_by_name with vscr using
-	vscr_offset.
-
-2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>
-
-	* linux-ppc-low.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove.
-	(ppc_arch_setup): Change SIZEOF_VRREGS and SIZEOF_VSXREGS to
-	PPC_LINUX_SIZEOF_VRREGSET and PPC_LINUX_SIZEOF_VSXREGSET.
-
-2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>
-
-	* linux-ppc-low.c (ppc_fill_vsxregset): Remove ppc_hwcap check.
-	(ppc_store_vsxregset): Likewise.
-	(ppc_fill_vrregset): Likewise.
-	(ppc_store_vrregset): Likewise.
-	(ppc_fill_evrregset): Likewise.
-	(ppc_store_evrregset): Likewise.
-	(ppc_regsets): Set VSX/VR/EVR regset sizes to 0.
-	(ppc_arch_setup): Iterate through ppc_regsets and set sizes when
-	needed.
-
-2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>
-
-	* linux-ppc-low.c (ppc_arch_setup): Remove code for getting the
-	wordsize of the inferior. Call ppc_linux_target_wordsize.
-
-2018-05-22  Pedro Franco de Carvalho  <pedromfc@linux.vnet.ibm.com>
-
-	* configure.srv (srv_tgtobj): Add arch/ppc-linux-common.o.
-	* Makefile.in (SFILES): Add arch/ppc-linux-common.c.
-	* linux-ppc-tdesc.h: Rename to linux-ppc-tdesc-init.h.
-	* linux-ppc-tdesc-init.h (tdesc_powerpc_32l, tdesc_powerpc_64l)
-	(tdesc_powerpc_altivec32l, tdesc_powerpc_altivec64l)
-	(tdesc_powerpc_cell32l, tdesc_powerpc_cell64l)
-	(tdesc_powerpc_vsx32l, tdesc_powerpc_vsx64l)
-	(tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_64l)
-	(tdesc_powerpc_isa205_altivec32l, tdesc_powerpc_isa205_altivec64l)
-	(tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_isa205_vsx64l)
-	(tdesc_powerpc_e500l): Remove.
-	* linux-ppc-ipa.c: Include arch/ppc-linux-tdesc.h and
-	linux-ppc-tdesc-init.h. Don't include linux-ppc-tdesc.h.
-	* linux-ppc-low.c: Include arch/ppc-linux-common.h,
-	arch/ppc-linux-tdesc.h, and linux-ppc-tdesc-init.h. Don't include
-	linux-ppc-tdesc.h.
-	(ppc_arch_setup): Remove target description matching code. Fill a
-	ppc_linux_features struct and call ppc_linux_match_description
-	with it.
-
-2018-05-22  Maciej W. Rozycki  <macro@mips.com>
-
-	* linux-mips-low.c (mips_cannot_fetch_register): Return 1 if the
-	width of the requested register exceeds the width of the
-	`ptrace' data type.
-	(mips_cannot_store_register): Likewise.
-
-2018-05-21  Maciej W. Rozycki  <macro@mips.com>
-
-	* linux-mips-low.c (mips_fetch_register): New function.  Update
-	preceding comment.
-	(mips_store_gregset): Supply 0 rather than $restart for $zero.
-	(the_low_target): Wire `mips_fetch_register'.
-
-2018-05-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-i386-low.c (LYNXOS_178): New macro.
-	[LYNXOS_178] (usr_fcontext_t): Provide a definition that matches
-	the layout on LynxOS-178.
-	(lynx_i386_fill_fpregset, lynx_i386_store_fpregset): Do not
-	handle floating point registers that are not supported by
-	LynxOS-178.
-
-2018-05-10  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-05-10  Joel Brobecker  <brobecker@adacore.com>
-
-	PR server/23158:
-	* tdesc.h (init_target_desc) <expedite_regs>: New parameter.
-	* tdesc.c (init_target_desc) <expedite_regs>: New parameter.
-	Use it to set the expedite_regs field in the given tdesc.
-	* x86-tdesc.h: New file.
-	* linux-aarch64-tdesc.c (aarch64_linux_read_description):
-	Adjust following the addition of the new expedite_regs parameter
-	to init_target_desc.
-	* linux-tic6x-low.c (tic6x_read_description): Likewise.
-	* linux-x86-tdesc.c: #include "x86-tdesc.h".
-	(i386_linux_read_description, amd64_linux_read_description):
-	Adjust following the addition of the new expedite_regs parameter
-	to init_target_desc.
-	* lynx-i386-low.c: #include "x86-tdesc.h".
-	(lynx_i386_arch_setup): Adjust following the addition of the new
-	expedite_regs parameter to init_target_desc.
-	* nto-x86-low.c: #include "x86-tdesc.h".
-	(nto_x86_arch_setup): Adjust following the addition of the new
-	expedite_regs parameter to init_target_desc.
-	* win32-i386-low.c: #include "x86-tdesc.h".
-	(i386_arch_setup): Adjust following the addition of the new
-	expedite_regs parameter to init_target_desc.
-
-2018-05-10  Joel Brobecker  <brobecker@adacore.com>
-
-	PR server/23158:
-	* win32-low.c (win32_create_inferior): Add call to my_wait
-	setting last_status global.
-
-2018-05-10  Joel Brobecker  <brobecker@adacore.com>
-
-	PR server/23158:
-	* win32-low.c (create_process): Only call gdb_tilde_expand if
-	inferior_cwd is not NULL.
-
-2018-05-08  Andrew Burgess  <andrew.burgess@embecosm.com>
-
-	* i387-fp.c (i387_cache_to_xsave): Only write x87 control
-	registers to the cache if their values have changed.
-	(i387_xsave_to_cache): Provide default values for x87 control
-	registers when these features are available, but disabled.
-	* regcache.c (supply_register_by_name_zeroed): New function.
-	* regcache.h (supply_register_by_name_zeroed): Declare new
-	function.
-
-2018-05-07  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-05-04  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
-	    Pedro Alves <palves@redhat.com>
-
-	* linux-aarch64-low.c (aarch64_stopped_data_address):
-	Likewise.
-
-2018-04-27  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-04-23  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2018-04-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in (depcomp): Add "..".
-	(all_deps_files): New and use it.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv (aarch64*-*-linux*): Don't include xml.
-	(i[34567]86-*-cygwin*): Likewise.
-	(i[34567]86-*-linux*): Likewise.
-	(i[34567]86-*-lynxos*): Likewise.
-	(i[34567]86-*-mingw32ce*): Likewise.
-	(i[34567]86-*-mingw*): Likewise.
-	(i[34567]86-*-nto*): Likewise.
-	(tic6x-*-uclinux): Likewise.
-	(x86_64-*-linux*): Likewise.
-	(x86_64-*-mingw*): Likewise.
-	(x86_64-*-cygwin*): Likewise.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c: Remove xml parameter.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* server.c (get_features_xml): Remove cast.
-	* tdesc.c (void target_desc::accept): Fill in function.
-	(tdesc_get_features_xml): Remove old xml creation.
-	(print_xml_feature::visit_pre): Add xml vistor.
-	* tdesc.h (struct target_desc): Make xmltarget mutable.
-	(tdesc_get_features_xml): Remove declaration.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c (tdesc_architecture_name): Add new function.
-	(tdesc_osabi_name): Likewise.
-	(tdesc_get_features_xml): Use new functions.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c (tdesc_create_flags): Remove.
-	(tdesc_add_flag): Likewise.
-	(tdesc_named_type): Likewise.
-	(tdesc_create_union): Likewise.
-	(tdesc_create_struct): Likewise.
-	(tdesc_create_vector): Likewise.
-	(tdesc_add_bitfield): Likewise.
-	(tdesc_add_field): Likewise.
-	(tdesc_set_struct_size): Likewise.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c (~target_desc): Remove implictly deleted items.
-	(init_target_desc): Iterate all features.
-	(tdesc_get_features_xml): Use vector.
-	(tdesc_create_feature): Create feature.
-	* tdesc.h (tdesc_feature) Remove
-	(target_desc): Add features.
-
-2018-04-18  Alan Hayward  <alan.hayward@arm.com>
-
-	* Makefile.in: Add common/tdesc.c
-	* tdesc.c (init_target_desc): init all reg_defs from register
-	vector.
-	(tdesc_create_reg): Create tdesc_reg.
-	* tdesc.h (tdesc_feature): Add register vector.
-
-2018-03-30  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* tdesc.h (struct target_desc) <features>: Change type to
-	std::vector<std::string>.
-	* tdesc.c (target_desc::~target_desc): Adjust to std::vector
-	changes.
-	(tdesc_get_features_xml): Likewise.
-	(tdesc_create_feature): Likewise.
-
-2018-03-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* regcache.c (find_register_by_number): Return a ref.
-	(find_regno): Use references.
-	(register_size): Likewise.
-	(register_data): Likewise.
-	* tdesc.c (target_desc::~target_desc): Remove free calls.
-	(target_desc::operator==): Use std::vector compare.
-	(init_target_desc): Use reference.
-	(tdesc_create_reg): Use reg constructors.
-	* tdesc.h (struct target_desc): Replace pointer with object.
-
-2018-03-23  Alan Hayward  <alan.hayward@arm.com>
-
-	* regcache.c (find_register_by_number): Make static.
-	(find_regno): Use find_register_by_number
-	* regcache.h (struct reg): Remove declaration.
-
-2018-03-23  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c (target_desc::~target_desc): Move to here.
-	(target_desc::operator==): Likewise.
-	* tdesc.h (target_desc::~target_desc): Move from here.
-	(target_desc::operator==): Likewise.
-
-2018-03-22  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-s390-low.c (s390_get_wordsize): Correct brace style.
-
-2018-03-21  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-s390-ipa.c (get_ipa_tdesc): Add handling for
-	S390_TDESC_GS.
-	* linux-s390-low.c (s390_get_ipa_tdesc_idx): Likewise.
-	(initialize_low_tracepoint): Call init_registers_s390x_gs_linux64
-	and init_registers_s390_gs_linux64.
-
-2018-03-21  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-s390-low.c (s390_fill_gs): Remove function.
-	(s390_fill_gsbc): Remove function.
-	(s390_regsets): Set fill functions for the guarded storage regsets
-	to NULL.
-
-2018-03-21  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-s390-low.c (s390_get_hwcap): Replace tdesc parameter by
-	the word size.  Add comment.
-	(s390_get_wordsize): New function.
-	(s390_arch_setup): No longer select a temporary tdesc to fetch the
-	pswm with it.  Instead, use s390_get_wordsize to determine the
-	word size first and derive the correct tdesc from that directly.
-
-2018-03-16  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in: Include silent-rules.mk.
-	(srcdir, abs_top_srcdir, abs_srcdir, VPATH): Move up.
-	(COMPILE): Add ECHO_CXX.
-	(gdbserver$(EXEEXT)): Add SILENCE and ECHO_CXXLD.
-	(gdbreplay$(EXEEXT)): Add SILENCE and ECHO_CXXLD.
-	($(IPA_LIB)): Add SILENCE and ECHO_CXXLD.
-	(version-generated.c): Add ECHO_GEN.
-	(stamp-xml): Add SILENCE and ECHO_GEN_XML_BUILTIN_GENERATED.
-	(IPAGENT_COMPILE): Add ECHO_CXX.
-	(%-generated.c): Add ECHO_REGDAT.
-
-2018-03-14  Tom Tromey  <tom@tromey.com>
-
-	PR cli/14977:
-	* ax.c (ax_printf): Special case for NULL.
-
-2018-03-08  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (linux_qxfer_libraries_svr4): Use
-	xml_escape_text_append.
-
-2018-03-08  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (linux_qxfer_libraries_svr4): Use std::string.
-
-2018-03-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* server.c (handle_general_set): Remove unnecessary xstrdup.
-
-2018-03-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* server.c (parse_debug_format_options): Adjust to
-	delim_string_to_char_ptr_vec changes.
-	* thread-db.c (thread_db_load_search): Adjust to
-	dirnames_to_char_ptr_vec changes.
-
-2018-03-01  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* target.h (target_enable_btrace, target_disable_btrace)
-	(target_read_btrace, target_read_btrace_conf): Turn macro into
-	inline function.  Throw error if target method is not defined.
-	* server.c (handle_qxfer_btrace handle_qxfer_btrace_conf): Remove
-	check for btrace target method.  Be prepared to handle exceptions
-	from btrace target methods.
-
-2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c (captured_main): Change order of error message printed
-	when the current working directory cannot be found.
-
-2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c: Include "filenames.h" and "pathstuff.h".
-	(program_name): Delete variable.
-	(program_path): New anonymous class.
-	(get_exec_wrapper): Use "program_path" instead of
-	"program_name".
-	(handle_v_run): Likewise.
-	(captured_main): Likewise.
-	(process_serial_event): Likewise.
-
-2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (SFILES): Add "$(srcdir)/common/pathstuff.c".
-	(OBJS): Add "pathstuff.o".
-	* server.c (current_directory): New global variable.
-	(captured_main): Initialize "current_directory".
-
-2018-02-26  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c: Use common/tdesc.h.
-	* tdesc.h: Likewise.
-
-2018-02-20  Alan Hayward  <alan.hayward@arm.com>
-	    Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in: Switch order of make rules.
-
-2018-02-19  Alan Hayward  <alan.hayward@arm.com>
-
-	* Makefile.in: Add common directory in build.
-	* configure.ac: Add common reference.
-	* configure: Regenerate.
-
-2018-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* linux-low.c (linux_target_ops): Remove linux_supports_btrace.
-	* nto-low.c (nto_target_ops): Remove NULL for supports_btrace.
-	* spu-low.c (spu_target_ops): Likewise.
-	* win32-low.c (win32_target_ops): Likewise.
-	* server.c (supported_btrace_packets): Report packets unconditionally.
-	* target.h (target_ops) <supports_btrace>: Remove.
-	(target_supports_btrace): Remove.
-
-2018-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* server.c (handle_btrace_enable_bts, handle_btrace_enable_pt)
-	(handle_btrace_disable): Change return type to void.  Use exceptions
-	to report errors.
-	(handle_btrace_general_set): Catch exception and copy message to
-	return message.
-
-2018-02-08  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c (install_software_single_step_breakpoints): Use
-	make_scoped_restore.
-	* inferiors.c (make_cleanup_restore_current_thread): Remove.
-	(do_restore_current_thread_cleanup): Remove.
-	* gdbthread.h (make_cleanup_restore_current_thread): Don't
-	declare.
-
-2018-02-08  Tom Tromey  <tom@tromey.com>
-
-	* mem-break.c (set_raw_breakpoint_at): Use
-	gdb::unique_xmalloc_ptr.
-
-2018-01-30  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/13211
-	* target.c (target_terminal::terminal_state): Rename to ...
-	(target_terminal::m_terminal_state): ... this.
-
-2018-01-19  James Clarke  <jrtc27@jrtc27.com>
-
-	* linux-low.c (handle_extended_wait): Surround call to
-	thread_db_notice_clone with #ifdef USE_THREAD_DB.
-
-2018-01-17  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (attach_proc_task_lwp_callback): Adjust to
-	linux_ptrace_attach_fail_reason_string now returning an
-	std::string.
-	(linux_attach): Likewise.
-	* thread-db.c (attach_thread): Likewise.
-
-2018-01-17  Eldar Abusalimov  <eldar.abusalimov@jetbrains.com>
-
-	PR gdb/21559
-	* configure.ac: Include <sys/types.h> prior to <sys/user.h> when
-	checking for fs_base/gs_base fields in struct user_regs_struct.
-	* configure: Regenerate.
-
-2018-01-16  Yao Qi  <yao.qi@linaro.org>
-
-	PR gdb/18749
-	* linux-low.c (fetch_register): Call supply_register instead of
-	error.
-
-2018-01-08  Yao Qi  <yao.qi@linaro.org>
-	    Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in (OBS): Remove selftest.o.
-	* configure.ac: Set srv_selftest_objs if $development is true.
-	(GDBSERVER_DEPFILES): Append $srv_selftest_objs.
-	* configure: Re-generated.
-	* server.c (captured_main): Wrap variable selftest_filter with
-	GDB_SELF_TEST.
-
-2018-01-07  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* server.c (parse_debug_format_options): Return std::string.
-	(handle_monitor_command, captured_main): Adjust.
-
-2018-01-05  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/18653
-	* server.c (captured_main): Pass quiet=false to
-	save_original_signals_state.
-
-2018-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c (gdbreplay_version): Update copyright year in
-	version message.
-	* server.c (gdbserver_version): Likewise.
-
-2017-12-08  Tom Tromey  <tom@tromey.com>
-
-	* ax.c (ax_printf): Update.
-
-2017-12-07  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-ipa.c (initialize_low_tracepoint): Call
-	aarch64_linux_read_description.
-	* linux-amd64-ipa.c (idx2mask): New array.
-	(get_ipa_tdesc): Move idx2mask out.
-	(initialize_low_tracepoint): Initialize target descriptions.
-	* linux-i386-ipa.c (idx2mask): New array.
-	(get_ipa_tdesc): Move idx2mask out.
-	(initialize_low_tracepoint): Initialize target descriptions.
-
-2017-12-05  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* tdesc.c (struct tdesc_type): Change return type.
-	(tdesc_add_flag): Change parameter type.
-	(tdesc_add_bitfield): Likewise.
-	(tdesc_add_field): Likewise.
-	(tdesc_set_struct_size): Likewise.
-
-2017-12-05  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* regcache.c (registers_to_string): Remove unused variable.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.c (for_each_inferior_with_data): Remove.
-	* inferiors.h (for_each_inferior_with_data): Remove.
-	* server.c (handle_qxfer_threads_worker): Change parameter type.
-	(handle_qxfer_threads_proper): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.c (for_each_inferior): Remove.
-	(clear_inferiors): Use for_each_thread.
-	* inferiors.h (for_each_inferior): Remove.
-	* linux-low.c (linux_wait_for_event_filtered): Use
-	for_each_thread.
-	(linux_stabilize_threads): Likewise.
-	* regcache.c (regcache_release): Likewise.
-	* server.c (gdb_wants_all_threads_stopped): Likewise.
-	(clear_pending_status_callback): Remove.
-	(handle_status): Use for_each_thread.
-	(captured_main): Likewise.
-	* win32-low.c (child_init_thread_list): Likewise.
-	(win32_clear_inferiors): Likewise.
-	(fake_breakpoint_event): Likewise.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.h (find_inferior): Remove.
-	* inferiors.c (find_inferior): Remove.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (resume_status_pending_p): Update comment.
-	(need_step_over_p): Update comment.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (proceed_one_lwp): Return void, change parameter
-	type.
-	(unsuspend_and_proceed_one_lwp): Likewise.
-	(proceed_all_lwps): Use for_each_thread.
-	(unstop_all_lwps): Likewise.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (linux_resume_one_thread): Return void, take
-	parameter directly.
-	(linux_resume): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (send_sigstop_callback): Return void, change
-	parameter type.  Rename to...
-	(send_sigstop): ... this.
-	(suspend_and_send_sigstop_callback): Return void, change parameter
-	type.  Rename to...
-	(suspend_and_send_sigstop): ... this.
-	(stop_all_lwps): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (lwp_running): Return bool, remove unused
-	argument.
-	(linux_stabilize_threads): Use find_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (select_singlestep_lwp_callback): Remove.
-	(count_events_callback): Remove.
-	(select_event_lwp_callback): Remove.
-	(select_event_lwp): Use find_thread/for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (not_stopped_callback): Return bool, take filter
-	argument directly.
-	(linux_wait_for_event_filtered): Use find_thread.
-	(linux_wait_1): Likewise.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (same_lwp): Remove.
-	(find_lwp_pid): Use find_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (delete_lwp_callback): Remove.
-	(linux_mourn): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (linux_detach_lwp_callback): Return void, remove
-	args parameter, don't check for pid.
-	(linux_detach): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-low.c (struct counter): Remove.
-	(second_thread_of_pid_p): Remove.
-	(last_thread_of_process_p): Use find_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.c (find_inferior_in_random): Remove.
-	* inferiors.h (find_inferior_in_random): Remove.
-	* linux-low.c (status_pending_p_callback): Return bool, accept
-	parameter ptid directly.
-	(linux_wait_for_event_filtered): Use find_thread_in_random.
-	(linux_wait_1): Likewise.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.c (find_inferior_id): Remove.
-	(find_thread_ptid): Move implemention from find_inferior_id to
-	here.
-	* inferiors.h (find_inferior_id): Remove.
-	* server.c (handle_status): Use find_thread_ptid.
-	(process_serial_event): Likewise.
-	* thread-db.c (find_one_thread): Likewise.
-	(thread_db_thread_handle): Likewise.
-	* win32-low.c (thread_rec): Likewise.
-	(child_delete_thread): Likewise.
-	(win32_thread_alive): Likewise.
-	(get_child_debug_event): Likewise.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-mips-low.c (update_watch_registers_callback): Return
-	void, remove pid_p parameter, don't check for pid.
-	(mips_insert_point, mips_remove_point): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* lynx.low (lynx_delete_thread_callback): Remove.
-	(lynx_mourn): Use for_each_thread.
-
-2017-12-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* regcache.c (regcache_invalidate_one): Remove.
-	(regcache_invalidate_pid): use for_each_thread.
-
-2017-11-26  Tom Tromey  <tom@tromey.com>
-
-	* linux-low.c (linux_create_inferior): Update.
-
-2017-11-24  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* spu-low.c (spu_create_inferior): Fix typo in argument name.
-
-2017-11-24  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Add linux-aarch64-tdesc-selftest.o.
-	* linux-aarch64-low.c (initialize_low_arch): Call init func.
-	* linux-aarch64-tdesc-selftest.c: New file.
-	* linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration.
-
-2017-11-24  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Add new file.
-	* linux-aarch64-low.c (initialize_low_arch): Call init func.
-	* linux-aarch64-tdesc-selftest.c: New file.
-	* linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration.
-
-2017-11-24  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-ipa.c (initialize_low_tracepoint): Remove init.
-	* linux-aarch64-low.c (initialize_low_arch): Remove init.
-	* linux-aarch64-tdesc.c (aarch64_linux_read_description): Add init.
-
-2017-11-24  Alan Hayward  <alan.hayward@arm.com>
-
-	* configure.srv: Add new files.
-	* linux-aarch64-ipa.c (get_ipa_tdesc): Call
-	aarch64_linux_read_description.
-	* linux-aarch64-low.c (aarch64_linux_read_description):
-	Merge with aarch64_arch_setup.
-	(aarch64_arch_setup): Call aarch64_linux_read_description.
-	* linux-aarch64-tdesc.c: New file.
-	* linux-aarch64-tdesc.h: New file.
-
-2017-11-24  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Set $srv_regobj for tic6x-linux.
-	* linux-tic6x-low.c: Include "arch/tic6x.h" and "tdesc.h".
-	(tic6x_read_description): Move some code to tic6x_arch_setup.
-	(tic6x_tdesc_test): New function.
-	(initialize_low_arch): Call selftests::register_test.
-
-2017-11-22  Yao Qi  <yao.qi@linaro.org>
-
-	* remote-utils.c (prepare_resume_reply): Use memcpy.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (kill_one_lwp_callback): Return void, take
-	argument directly, don't filter on pid.
-	(linux_kill): Use for_each_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (need_step_over_p): Return bool, remove dummy
-	argument.
-	(linux_resume, proceed_all_lwps): Use find_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (resume_status_pending_p): Return bool, remove
-	flag_p argument.
-	(linux_resume): Use find_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (struct thread_resume_array): Remove.
-	(linux_set_resume_request): Return void, take arguments
-	directly.
-	(linux_resume): Use for_each_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (stuck_in_jump_pad_callback): Change prototype,
-	return bool, remove data argument.
-	(linux_stabilize_threads): Use find_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (unsuspend_one_lwp): Remove.
-	(unsuspend_all_lwps): Use for_each_thread, inline code from
-	unsuspend_one_lwp.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdbthread.h (find_thread): Add overload with ptid_t filter.
-	* linux-low.c (struct iterate_over_lwps_args): Remove.
-	(iterate_over_lwps_filter): Remove.
-	(iterate_over_lwps): Use find_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (reset_lwp_ptrace_options_callback): Remove.
-	(linux_handle_new_gdb_connection): Use for_each_thread, inline
-	code from reset_lwp_ptrace_options_callback.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-arm-low.c (struct update_registers_data): Remove.
-	(update_registers_callback): Return void, take arguments
-	directly, don't check thread's pid.
-	(arm_insert_point, arm_remove_point): Use for_each_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* win32-low.c (continue_one_thread): Return void, take argument
-	directly.
-	(child_continue): Use for_each_thread.
-
-2017-11-19  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* win32-i386-low.c (update_debug_registers_callback): Rename
-	to ...
-	(update_debug_registers): ... this, return void, remove pid_p arg.
-	(x86_dr_low_set_addr, x86_dr_low_set_control): Use for_each_thread.
-
-2017-11-17  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.h (struct process_info): Add constructor, initialize
-	fields..
-	<syscalls_to_catch>: Change type to std::vector<int>.
-	* inferiors.c (add_process): Allocate process_info with new.
-	(remove_process): Free process_info with delete.
-	* linux-low.c (handle_extended_wait): Adjust.
-	(gdb_catching_syscalls_p, gdb_catch_this_syscall_p): Adjust.
-	* server.c (handle_general_set): Adjust.
-
-2017-11-16  Pedro Alves  <palves@redhat.com>
-
-	* remote-utils.c (remote_close): Block SIGIO signals instead of
-	uninstalling the SIGIO handler.
-
-2017-11-16  Alan Hayward  <alan.hayward@arm.com>
-
-	* tdesc.c (tdesc_get_features_xml): Allow null osabi.
-
-2017-11-16  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-tic6x-low.c (tic6x_fill_gregset): Cast buf.
-	(tic6x_store_gregset): Likewise.
-	(tic6x_usrregs_info): Move it up.
-
-2017-11-15  Alan Hayward  <alan.hayward@arm.com>
-
-	* Makefile.in: Update arch rules.
-	* configure.srv: Explicitly mark arch/ files.
-
-2017-11-13  Andreas Schwab  <schwab@suse.de>
-
-	* linux-m68k-low.c (m68k_supports_hardware_single_step): New
-	function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-
-2017-11-06  Pedro Alves  <palves@redhat.com>
-
-	* config.in, configure: Regenerate.
-
-2017-10-27  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* target.c (struct thread_search): Remove.
-	(thread_search_callback): Remove.
-	(prepare_to_access_memory): Use for_each_thread instead of
-	find_inferior.  Inline code from thread_search_callback.
-
-2017-10-27  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (struct visit_actioned_threads_data): Remove.
-	(visit_actioned_threads): Change prototype to take arguments
-	directly.
-	(resume): Use find_thread instead of find_inferior.
-
-2017-10-27  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (queue_stop_reply_callback): Change prototype, return
-	void.
-	(find_status_pending_thread_callback): Remove.
-	(handle_status): Replace find_inferior with find_thread and
-	for_each_thread.
-
-2017-10-25  Alan Hayward  <alan.hayward@arm.com>
-
-	* linux-aarch64-low.c (aarch64_fill_gregset): Replace defines
-	with REGNO.
-	(aarch64_store_gregset): Likewise.
-	(aarch64_fill_fpregset): Likewise.
-	(aarch64_store_fpregset): Likewise.
-
-2017-10-21  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* gdbthread.h (find_thread, for_each_thread): New functions.
-	* inferiors.c (thread_of_pid): Remove.
-	(find_any_thread_of_pid): Use find_thread.
-	* linux-low.c (num_lwps): Use for_each_thread.
-
-2017-10-17  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in: Remove one rule.
-	* configure.srv: Rename aarch64-insn.o with arch/aarch64-insn.o.
-
-2017-10-17  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Rename arm-linux.o with arch/arm-linux.o.
-	Rename arm-get-next-pcs.o with arch/arm-get-next-pcs.o.
-
-2017-10-17  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Rename arm.o with arch/arm.o.
-
-2017-10-17  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (CONFIG_SRC_SUBDIR): New variable.
-	(clean): Remove .o files in CONFIG_SRC_SUBDIR.
-	(distclean): Remove DEPDIR in CONFIG_SRC_SUBDIR.
-	(arch-i386.o, arch-amd64.o): Remove rules.
-	(arch/%.o): New rule.
-	Update POSTCOMPILE and COMPILE.pre.
-	* configure.ac: Invoke AC_CONFIG_COMMANDS.
-	* configure: Re-generated.
-	* configure.srv: Replace arch-i386.o with arch/i386.o.
-	Replace arch-amd64.o with arch/amd64.o.
-
-2017-10-16  Yao Qi  <yao.qi@linaro.org>
-
-	* configure: Regenerated.
-
-2017-10-14  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* inferiors.h: (struct inferior_list): Remove.
-	(struct inferior_list_entry); Remove.
-	(add_inferior_to_list, clear_inferior_list, one_inferior_p,
-	A_I_NEXT, ALL_INFERIORS_TYPE, ALL_INFERIORS, remove_inferior,
-	get_first_inferior): Remove.
-	(for_each_inferior, for_each_inferior_with_data, find_inferior,
-	find_inferior_id, find_inferior_in_random): Change signature.
-	* inferiors.c (all_threads): Change type to
-	std::list<thread_info *>.
-	(get_thread): Remove macro.
-	(find_inferior, find_inferior_id): Change signature, implement
-	using find_thread.
-	(find_inferior_in_random): Change signature, implement using
-	find_thread_in_random.
-	(for_each_inferior, for_each_inferior_with_data): Change
-	signature, implement using for_each_thread.
-	(add_inferior_to_list, remove_inferior): Remove.
-	(add_thread, get_first_thread, thread_of_pid,
-	find_any_thread_of_pid, free_one_thread, remove_thread): Update.
-	(get_first_inferior, one_inferior_p, clear_inferior_list):
-	Remove.
-	(clear_inferiors, get_thread_process): Update.
-	* gdbthread.h: Include <list>.
-	(struct thread_info) <entry>: Remove field.
-	<id>: New field.
-	(all_threads): Change type to std::list<thread_info *>.
-	(get_first_inferior): Add doc.
-	(find_thread, for_each_thread, find_thread_in_random): New
-	functions.
-	(current_ptid, pid_of, ptid_of, lwpid_of): Update.
-	* linux-arm-low.c (update_registers_callback): Update.
-	* linux-low.c (second_thread_of_pid_p): Update.
-	(kill_one_lwp_callback, linux_detach_lwp_callback,
-	delete_lwp_callback, status_pending_p_callback, same_lwp,
-	find_lwp_pid, num_lwps, iterate_over_lwps_filter,
-	iterate_over_lwps, not_stopped_callback,
-	resume_stopped_resumed_lwps, count_events_callback,
-	select_singlestep_lwp_callback, select_event_lwp_callback,
-	unsuspend_one_lwp, linux_wait_1, send_sigstop_callback,
-	suspend_and_send_sigstop_callback, wait_for_sigstop,
-	stuck_in_jump_pad_callback, move_out_of_jump_pad_callback,
-	lwp_running, linux_set_resume_request, resume_status_pending_p,
-	need_step_over_p, start_step_over, linux_resume_one_thread,
-	proceed_one_lwp, unsuspend_and_proceed_one_lwp,
-	reset_lwp_ptrace_options_callback): Update.
-	* linux-mips-low.c (update_watch_registers_callback): Update.
-	* regcache.c (regcache_invalidate_one, regcache_invalidate):
-	Update.
-	(free_register_cache_thread_one): Remove.
-	(regcache_release): Update.
-	* server.c (handle_btrace_enable_bts, handle_btrace_enable_pt,
-	handle_qxfer_threads_worker): Update.
-	(handle_query): Update, use list iterator.
-	(visit_actioned_threads, handle_pending_status,
-	queue_stop_reply_callback, gdb_wants_all_threads_stopped,
-	clear_pending_status_callback, set_pending_status_callback,
-	find_status_pending_thread_callback, handle_status,
-	process_serial_event): Update.
-	* target.c (thread_search_callback): Update.
-	* thread-db.c (thread_db_get_tls_address): Update.
-	* tracepoint.c (tracepoint_finished_step, tracepoint_was_hit):
-	Update.
-	* win32-i386-low.c (update_debug_registers_callback): Update.
-	* win32-low.c (delete_thread_info, child_delete_thread,
-	continue_one_thread, suspend_one_thread,
-	get_child_debug_event): Adjust.
-
-2017-10-14  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* gdbthread.h (ptid_of, pid_of, lwpid_of): New functions.
-	* inferiors.h: Include <list>.
-	(struct process_info) <entry>: Remove field.
-	<pid>: New field.
-	(pid_of): Change macro to function.
-	(ptid_of, lwpid_of): Remove macro.
-	(all_processes): Change type to std::list<process_info *>.
-	(ALL_PROCESSES): Remove macro.
-	(for_each_process, find_process): New function.
-	* inferiors.c (all_processes): Change type to
-	std::list<process_info *>.
-	(find_thread_process): Adjust.
-	(add_process): Likewise.
-	(remove_process): Likewise.
-	(find_process_pid): Likewise.
-	(get_first_process): Likewise.
-	(started_inferior_callback): Remove.
-	(have_started_inferiors_p): Adjust.
-	(attached_inferior_callback): Remove.
-	(have_attached_inferiors_p): Adjust.
-	* linux-low.c (check_zombie_leaders): Likewise.
-	* linux-x86-low.c (x86_arch_setup_process_callback): Remove.
-	(x86_linux_update_xmltarget): Adjust.
-	* server.c (handle_query): Likewise.
-	(gdb_reattached_process): Remove.
-	(handle_status): Adjust.
-	(kill_inferior_callback): Likewise.
-	(detach_or_kill_inferior): Remove.
-	(print_started_pid): Likewise.
-	(print_attached_pid): Likewise.
-	(detach_or_kill_for_exit): Update.
-	(process_serial_event): Likewise.
-	* linux-arm-low.c (arm_new_fork): Likewise.
-
-2017-10-14  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* dll.h: Include <list>.
-	(struct dll_info): Add constructor.
-	<entry>: Remove field.
-	(all_dlls): Change type to std::list<dll_info>.
-	* dll.c: Include <algorithm>.
-	(get_dll): Remove macro.
-	(all_dlls): Change type to std::list<dll_info *>.
-	(free_one_dll): Remove.
-	(match_dll): Likewise.
-	(loaded_dll): Adjust.
-	(unloaded_dll): Adjust to all_dlls type change, use
-	std::find_if.  Inline code from match_dll.
-	(clear_dlls): Adjust to all_dlls type change.
-	* server.c (emit_dll_description): Remove.
-	(handle_qxfer_libraries): Adjust to all_dlls type change,
-	integrate emit_dll_description's functionality.
-
-2017-10-12  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.h (struct linux_target_ops) <delete_process>: New
-	field.
-	* linux-low.c (linux_mourn): Call the_low_target.delete_process.
-	* linux-aarch64-low.c (aarch64_linux_delete_process): New.
-	(struct linux_target_ops): Add delete_process callback.
-	* linux-arm-low.c (arm_delete_process): New.
-	(struct linux_target_ops): Add delete_process callback.
-	* linux-bfin-low.c (struct linux_target_ops): Likewise.
-	* linux-crisv32-low.c (struct linux_target_ops): Likewise.
-	* linux-m32r-low.c (struct linux_target_ops): Likewise.
-	* linux-mips-low.c (mips_linux_delete_process): New.
-	(struct linux_target_ops): Add delete_process callback.
-	* linux-ppc-low.c (struct linux_target_ops): Likewise.
-	* linux-s390-low.c (struct linux_target_ops): Likewise.
-	* linux-sh-low.c (struct linux_target_ops): Likewise.
-	* linux-tic6x-low.c (struct linux_target_ops): Likewise.
-	* linux-tile-low.c (struct linux_target_ops): Likewise.
-	* linux-x86-low.c (x86_linux_delete_process): New.
-	(struct linux_target_ops): Add delete_process callback.
-	* linux-xtensa-low.c (struct linux_target_ops): Likewise.
-
-2017-10-12  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-aarch64-low.c (the_low_target): Add thread delete
-	callback.
-	* linux-arm-low.c (arm_delete_thread): New function.
-	(the_low_target): Add thread delete callback.
-	* linux-bfin-low.c (the_low_target): Likewise.
-	* linux-crisv32-low.c (the_low_target): Likewise.
-	* linux-low.c (delete_lwp): Invoke delete_thread callback if
-	set.
-	* linux-low.h (struct linux_target_ops) <delete_thread>: New
-	field.
-	* linux-m32r-low.c (the_low_target): Add thread delete callback.
-	* linux-mips-low.c (mips_linux_delete_thread): New function.
-	(the_low_target): Add thread delete callback.
-	* linux-ppc-low.c (the_low_target): Likewise.
-	* linux-s390-low.c (the_low_target): Likewise.
-	* linux-sh-low.c (the_low_target): Likewise.
-	* linux-tic6x-low.c (the_low_target): Likewise.
-	* linux-tile-low.c (the_low_target): Likewise.
-	* linux-x86-low.c (the_low_target): Likewise.
-	* linux-xtensa-low.c (the_low_target): Likewise.
-
-2017-10-06  Yuanhui Zhang  <asmwarrior@gmail.com>
-
-	* win32-low.c: Include "common-inferior.h".
-
-2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* inferiors.c (set_inferior_cwd): New function.
-	* server.c (handle_general_set): Handle QSetWorkingDir packet.
-	(handle_query): Inform that QSetWorkingDir is supported.
-	* win32-low.c (create_process): Pass the inferior's cwd to
-	CreateProcess.
-
-2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* inferiors.c (current_inferior_cwd): New global variable.
-	(get_inferior_cwd): New function.
-	* inferiors.h (struct process_info) <cwd>: New field.
-
-2017-10-04  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (SFILES): Add $(srcdir)/common/gdb_tilde_expand.c.
-	(OBS): Add gdb_tilde_expand.o.
-
-2017-10-02  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* lynx-i386-low.c (lynx_i386_arch_setup): Call init_target_desc.
-	* nto-x86-low.c (nto_x86_arch_setup): Likewise.
-
-2017-09-29  Pedro Alves  <palves@redhat.com>
-
-	* ax.c (gdb_parse_agent_expr): Constify.
-	* ax.h (gdb_parse_agent_expr): Constify.
-	* mem-break.c (add_breakpoint_condition, add_breakpoint_commands):
-	Constify.
-	* mem-break.h (add_breakpoint_condition, add_breakpoint_commands): Constify.
-	* remote-utils.c (hex_or_minus_one, read_ptid): Constify.
-	* remote-utils.h (read_ptid): Constify.
-	* server.c (handle_qxfer_exec_file, handle_query, handle_v_cont)
-	(process_point_options, process_serial_event): Constify.
-	* tracepoint.c (add_tracepoint_action, cmd_qtdp, cmd_qtdpsrc)
-	(cmd_qtdv, cmd_qtenable_disable, cmd_qtro, cmd_qtframe, cmd_qtp)
-	(cmd_qtbuffer): Constify.
-
-2017-09-29  Pedro Alves  <palves@redhat.com>
-
-	* proc-service.c (ps_pdread): Return PS_ERR if reading memory
-	fails.
-
-2017-09-29  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Pass parent thread instead
-	of process to thread_db_notice_clone.
-	* linux-low.h (thread_db_notice_clone): Replace parent process
-	parameter with parent thread parameter.
-	* thread-db.c (find_one_thread): Add comment.
-	(thread_db_notice_clone): Replace parent process parameter with
-	parent thread parameter.  Temporarily switch to the parent thread.
-
-2017-09-26  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* gdbthread.h: Include "common-gdbthread.h".
-	* inferiors.c (switch_to_thread): Use "gdb_assert" instead of
-	"if" when validating the ptid.
-	* remote-utils.c: Include "gdbthread.h".
-	(prepare_resume_reply): Use "switch_to_thread".
-	* target.c (done_accessing_memory): Likewise.
-
-2017-09-25  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* configure.srv (s390*-*-linux*): Add s390-gs-linux64.o and
-	s390x-gs-linux64.o to srv_regobj.  Add s390-gs-linux64.xml,
-	s390x-gs-linux64.xml, s390-gs.xml, and s390-gsbc.xml to
-	srv_xmlfiles.  Add s390-gs-linux64-ipa.o and
-	s390x-gs-linux64-ipa.o to ipa_obj.
-	* linux-s390-low.c (HWCAP_S390_GS): New define.
-	(s390_fill_gs, s390_store_gs, s390_fill_gsbc, s390_store_gsbc):
-	New functions.
-	(s390_regsets): Add regsets for NT_S390_GS_CB and NT_S390_GS_BC.
-	(s390_arch_setup): Check for guarded-storage support and choose
-	appropriate tdesc.
-	(initialize_low_arch): Invoke init_registers_s390_gs_linux64 and
-	init_registers_s390x_gs_linux64.
-	* linux-s390-tdesc.h (enum s390_linux_tdesc) <S390_TDESC_GS>: New
-	enum value.
-	(init_registers_s390x_gs_linux64, tdesc_s390x_gs_linux64)
-	(init_registers_s390_gs_linux64, tdesc_s390_gs_linux64): Declare.
-
-2017-09-22  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* win32-i386-low.c (i386_arch_setup): Call init_target_desc.
-
-2017-09-21  Kevin Buettner  <kevinb@redhat.com>
-
-	* linux-low.h (struct lwp_info): Add new field, thread_handle.
-	(thread_db_thread_handle): Declare.
-	* linux-low.c (linux_target_ops): Initialize thread_handle.
-	* server.c (handle_qxfer_threads_worker): Add support for
-	"handle" attribute.
-	* target.h (struct target_ops): Add new function pointer,
-	thread_handle.
-	(target_thread_handle): Define.
-	* thread-db.c (find_one_thread, attach_thread): Set thread_handle
-	field in lwp.
-	(thread_db_thread_handle): New function.
-
-2017-09-21  Kevin Buettner  <kevinb@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Call thread_db_notice_clone().
-	* linux-low.h (thread_db_notice_clone): Declare.
-	* thread-db.c (thread_db_notice_clone): New function.
-
-2017-09-21  Pedro Alves  <palves@redhat.com>
-
-	* server.c (gdb_read_memory, handle_status, process_serial_event)
-	(handle_serial_event, handle_target_event): Adjust to
-	set_desired_thread prototype change.
-	* target.c (set_desired_thread): Remove 'use_general' parameter
-	and adjust.
-	* target.h (set_desired_thread): Remove 'use_general' parameter.
-
-2017-09-20  Tom Tromey  <tom@tromey.com>
-
-	* target.c (target_terminal::terminal_state): Define.
-	(target_terminal::init): Rename from target_terminal_init.
-	(target_terminal::inferior): Rename from
-	target_terminal_inferior.
-	(target_terminal::ours): Rename from target_terminal_ours.
-	(target_terminal::ours_for_output, target_terminal::info): New.
-
-2017-09-16  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (accumulate_file_name_length): Remove.
-	(emit_dll_description): Adjust to std::string change.
-	(handle_qxfer_libraries): Use std::string to hold document.
-
-2017-09-16  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (linux_qxfer_libraries_svr4): Adjust to change of
-	return type of xml_escape_text.
-	* server.c (emit_dll_description): Likewise.
-
-2017-09-16  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (captured_main): Accept argument for --selftest.
-	Update run_tests call.
-	* linux-x86-tdesc-selftest.c (initialize_low_tdesc): Add names
-	when registering selftests.
-
-2017-09-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* regcache.c (get_thread_regcache): Update code to use "std::vector"
-	instead of "VEC" for "target_desc.reg_defs".
-	(regcache_cpy): Likewise.
-	(registers_to_string): Likewise.
-	(registers_from_string): Likewise.
-	(find_regno): Likewise.
-	(supply_regblock): Likewise.
-	(regcache_raw_read_unsigned): Likewise.
-	* tdesc.c (init_target_desc): Likewise.
-	(tdesc_create_reg): Likewise.
-	* tdesc.h: Remove declaration of "tdesc_reg_p".  Include <vector>.
-	(struct target_desc) <reg_defs>: Convert to "std::vector".
-	(target_desc): Do not initialize "reg_defs".
-	(~target_desc): Update code to use "std::vector" instead of "VEC"
-	for "target_desc.reg_defs".
-	(operator==): Likewise.
-
-2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* inferiors.h (thread_to_gdb_id): Remove.
-	* inferiors.c (thread_to_gdb_id): Remove.
-	* server.c (handle_qxfer_threads_worker, handle_query): Adjust.
-	* lynx-low.c (lynx_resume, lynx_wait_1, lynx_fetch_registers,
-	lynx_store_registers, lynx_read_memory, lynx_write_memory):
-	Likewise.
-	* nto-low.c (nto_fetch_registers, nto_store_registers,
-	nto_stopped_by_watchpoint, nto_stopped_data_address): Likewise.
-
-2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* inferiors.h (gdb_id_to_thread_id): Remove.
-	* inferiors.c (gdb_id_to_thread_id): Remove.
-	* server.c (process_serial_event): Adjust to gdb_id_to_thread_id
-	removal.  Move pid declaration closer to where it's used.
-
-2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (handle_detach): New function.
-	(process_serial_event): Move code out, call handle_detach.
-
-2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (require_running): Rename to ...
-	(require_running_or_return): ... this ...
-	(require_running_or_break): ... and this.
-	(handle_query, process_serial_event): Adjust.
-
-2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (linux_set_resume_request): Remove unused
-	variables.
-
-2017-09-15  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (first_thread_of): Remove.
-	(process_serial_event): Replace usage of first_thread_of with
-	find_any_thread_of_pid.
-	* tracepoint.c (same_process_p): Remove.
-	(gdb_agent_about_to_close): Replace usage of same_process_p with
-	find_any_thread_of_pid.
-	* linux-x86-low.c (same_process_callback): Remove.
-	(x86_arch_setup_process_callback): Replace usage of
-	same_process_callback with find_any_thread_of_pid.
-	* thread-db.c (any_thread_of): Remove.
-	(switch_to_process): Replace usage of any_thread_of with
-	find_any_thread_of_pid.
-	* inferiors.c (thread_pid_matches_callback): Remove.
-	(find_thread_process): Adjust to use find_any_thread_of_pid.
-
-2017-09-10  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* regcache.c (get_thread_regcache): Guard calls to "memset"
-	with "!VEC_empty".
-
-2017-09-10  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Use
-	"allocate_target_description" instead of "XNEW".
-	* linux-x86-low.c (initialize_low_arch): Likewise.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_i386_regobj): Remove.
-	(srv_amd64_regobj): Remove.
-	(srv_regobj): Set it to "" for x86 non-linux targets.
-	* linux-x86-tdesc.c (i386_linux_read_description):
-	* lynx-i386-low.c: Include x86-xstate.h and arch/i386.h.
-	(init_registers_i386): Remove the declaration.
-	(tdesc_i386): Remove the declaration.
-	(lynx_i386_arch_setup): Call i386_create_target_description.
-	* nto-x86-low.c: Likewise.
-	* win32-i386-low.c [__x86_64__]: include arch/amd64.h.
-	[!__x86_64__]: include arch/i386.h.
-	(i386_arch_setup) [__x86_64__]: Call amd64_create_target_description.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_amd64_linux_xmlfiles): Remove
-	i386/amd64-XXX-linux from it.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Empty srv_amd64_linux_regobj if $development is
-	false.
-	(ipa_amd64_linux_regobj): Remove.
-	(ipa_x32_linux_regobj): Remove.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (arch-amd64.o): New rule.
-	* configure.srv: Append arch-amd64.o.
-	* linux-amd64-ipa.c: Include common/x86-xstate.h.
-	(get_ipa_tdesc): Call amd64_linux_read_description.
-	(initialize_low_tracepoint): Don't call init_registers_x32_XXX
-	and init_registers_amd64_XXX.
-	* linux-x86-low.c (x86_linux_read_description): Call
-	amd64_linux_read_description.
-	(x86_get_ipa_tdesc_idx): Call amd64_get_ipa_tdesc_idx.
-	(initialize_low_arch): Don't call init_registers_x32_XXX and
-	init_registers_amd64_XXX.
-	* linux-x86-tdesc-selftest.c: Declare init_registers_amd64_XXX
-	and tdesc_amd64_XXX.
-	[__x86_64__] (amd64_tdesc_test): New function.
-	(initialize_low_tdesc) [__x86_64__]: Call init_registers_x32_XXX
-	and init_registers_amd64_XXX.
-	* linux-x86-tdesc.c: Include arch/amd64.h.
-	(xcr0_to_tdesc_idx): New function.
-	(i386_linux_read_description): New function.
-	(amd64_get_ipa_tdesc_idx): New function.
-	* linux-x86-tdesc.h (amd64_get_ipa_tdesc_idx): Declare.
-	(amd64_get_ipa_tdesc): Declare.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_i386_linux_xmlfiles): Remove
-	i386/i386-XXX-linux.xml from it.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Set srv_i386_linux_regobj empty if $development
-	is false.
-	* linux-i386-ipa.c (initialize_low_tracepoint): Don't call
-	initialize_low_tdesc.
-	* linux-x86-low.c (initialize_low_arch): Wrap initialize_low_tdesc
-	with #if initialize_low_tdesc.
-	* linux-x86-tdesc-selftest.c: New file.
-	* linux-x86-tdesc.c: Move code to linux-x86-tdesc-selftest.c.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (arch-i386.o): New rule.
-	* configure.srv (i[34567]86-*-linux*): Add arch-i386.o.
-	(x86_64-*-linux*): Likewise.
-	* linux-x86-tdesc.c: Don't include ../features/i386/32bit-XXX.c,
-	include arch/i386.h.
-	(i386_linux_read_description): Remove code and call
-	i386_create_target_description.
-	* tdesc.c (allocate_target_description): New function.
-	* tdesc.h (set_tdesc_architecture): Remove declaration.
-	(set_tdesc_osabi): Likewise.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-x86-tdesc.c: Don't include <inttypes.h>.
-	(i386_linux_read_description) [!IN_PROCESS_AGENT]: Call
-	set_tdesc_architecture and set_tdesc_osabi.  Remove code setting
-	.xmltarget.
-	* server.c (get_features_xml): Call tdesc_get_features_xml.
-	* tdesc.c (set_tdesc_architecture): New function.
-	(set_tdesc_osabi): New function.
-	(tdesc_get_features_xml): New function.
-	(tdesc_create_feature): Add an argument.
-	* tdesc.h (struct target_desc) <features>: New field.
-	<arch, osabi>: New field.
-	(~target_desc): xfree features, arch, and osabi.
-	(target_desc::oerator==): Don't compare .xmltarget.
-	[!IN_PROCESS_AGENT] (set_tdesc_architecture): Declare.
-	(set_tdesc_osabi): Likewise.
-	(tdesc_get_features_xml): Likewise.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-x86-tdesc.c: Include selftest.h.
-	(i386_tdesc_test): New function.
-	(initialize_low_tdesc): Call selftests::register_test.
-	* tdesc.h: Include regdef.h.
-	(target_desc): Override operator == and !=.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_tgtobj): Append linux-x86-tdesc.o.
-	(ipa_obj): Likewise.
-	* linux-i386-ipa.c: Include common/x86-xstate.h
-	(get_ipa_tdesc): Call i386_linux_read_description.
-	(initialize_low_tracepoint): Don't call  init_registers_XXX
-	functions, call initialize_low_tdesc instead.
-	* linux-x86-low.c (x86_linux_read_description): Call
-	i386_linux_read_description.
-	(initialize_low_arch): Don't call init_registers_i386_XXX
-	functions, call initialize_low_tdesc.
-	* linux-x86-tdesc.c: New file.
-	* linux-x86-tdesc.h (x86_linux_tdesc): New X86_TDESC_LAST.
-	(i386_get_ipa_tdesc_idx): Declare.
-	(i386_get_ipa_tdesc): Declare.
-	(initialize_low_tdesc): Declare.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-x86-low.c (x86_get_ipa_tdesc_idx): Use X86_TDESC_MMX
-	instead of 0.
-
-2017-09-05  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (IPA_OBJS): Add vec-ipa.o
-	* regcache.c (get_thread_regcache): Use VEC_length.
-	(init_register_cache): Likewise.
-	(regcache_cpy): Likewise.
-	(registers_to_string): Iterate reg_defs via VEC_iterate.
-	(find_regno): Likewise.
-	(find_register_by_number): Use VEC_index.
-	(register_size): Call find_register_by_number.
-	(register_data): Call find_register_by_number.
-	(supply_regblock): Use VEC_length.
-	(regcache_raw_read_unsigned): Likewise.
-	* tdesc.c (init_target_desc): Iterate reg_defs via
-	VEC_iterate.
-	(default_description): Update initializer.
-	(copy_target_description): Don't update field num_registers.
-	* tdesc.h (struct target_desc) <reg_defs>: Change it to VEC.
-	<num_registers>: Remove.
-
-2017-09-04  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in (.SECONDARY): Define target.
-
-2017-09-03  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (linux_wait_1): Adjust.
-	* server.c (queue_stop_reply_callback): Adjust.
-
-2017-08-31  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c (handle_general_set): Handle QEnvironmentHexEncoded,
-	QEnvironmentUnset and QEnvironmentReset packets.
-	(handle_query): Inform remote that QEnvironmentHexEncoded,
-	QEnvironmentUnset and QEnvironmentReset are supported.
-
-2017-08-25  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* inferiors.h (inferior_target_data): Rename to ...
-	(thread_target_data): ... this.
-	(inferior_regcache_data): Rename to ...
-	(thread_regcache_data): ... this.
-	(set_inferior_regcache_data): Rename to ...
-	(set_thread_regcache_data): ... this.
-	* inferiors.c (inferior_target_data): Rename to ...
-	(thread_target_data): ... this.
-	(inferior_regcache_data): Rename to ...
-	(thread_regcache_data): ... this.
-	(set_inferior_regcache_data): Rename to ...
-	(set_thread_regcache_data): ... this.
-	(free_one_thread): Update.
-	* linux-low.h (get_thread_lwp): Update.
-	* regcache.c (get_thread_regcache): Update.
-	(regcache_invalidate_thread): Update.
-	(free_register_cache_thread): Update.
-	* win32-i386-low.c (update_debug_registers_callback): Update.
-	(win32_get_current_dr): Update.
-	* win32-low.c (thread_rec): Update.
-	(delete_thread_info): Update.
-	(continue_one_thread): Update.
-	(suspend_one_thread): Update.
-
-2017-08-24  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* inferiors.c (set_inferior_target_data): Remove.
-	* inferiors.h (set_inferior_target_data): Remove.
-
-2017-08-18  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (OBS): Add selftest.o.
-	* configure.ac: AC_DEFINE GDB_SELF_TEST if $development.
-	* configure, config.in: Re-generated.
-	* server.c: Include common/sefltest.h.
-	(captured_main): Handle option --selftest.
-
-2017-08-09  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_i386_regobj): Remove i386-avx.o,
-	i386-avx-avx512.o, i386-avx-mpx-avx512-pku.o, i386-mpx.o,
-	i386-avx-mpx.o and i386-mmx.o.
-	(srv_amd64_regobj): Remove amd64-avx.o, amd64-avx-avx512.o,
-	amd64-avx-mpx-avx512-pku.o, amd64-mpx.o and amd64-avx-mpx.o.
-	(srv_i386_xmlfiles): Remove i386/i386-avx.xml,
-	i386/i386-avx-avx512.xml, i386/i386-avx-mpx-avx512-pku.xml,
-	i386/i386-mpx.xml, i386/i386-avx-mpx.xml and i386/i386-mmx.xml.
-	(srv_amd64_xmlfile):i386/amd64-avx.xml, i386/amd64-avx-avx512.xml,
-	i386/amd64-avx-mpx-avx512-pku.xml, i386/amd64-mpx.xml,
-	i386/amd64-avx-mpx.xml.
-
-2017-08-09  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_amd64_regobj): Remove x32.o, x32-avx.o
-	and x32-avx-avx512.o.
-	(srv_amd64_xmlfiles): Remove i386/x32.xml, i386/x32-avx.xml
-	i386/x32-avx-avx512.xml.
-
-2017-07-26  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* tracepoint.h (enum class fast_tpoint_collect_result): New
-	enumeration.
-	(fast_tracepoint_collecting): Change return type to
-	fast_tpoint_collect_result.
-	* tracepoint.c (fast_tracepoint_collecting): Likewise.
-	* linux-low.h: Include tracepoint.h.
-	(struct lwp_info) <collecting_fast_tracepoint>: Change type to
-	fast_tpoint_collect_result.
-	* linux-low.c (handle_tracepoints): Adjust.
-	(linux_fast_tracepoint_collecting): Change return type to
-	fast_tpoint_collect_result.
-	(maybe_move_out_of_jump_pad, linux_wait_for_event_filtered,
-	linux_wait_1, stuck_in_jump_pad_callback,
-	lwp_signal_can_be_delivered, linux_resume_one_lwp_throw,
-	proceed_one_lwp): Adjust to type change.
-
-2017-07-10  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-x86-low.c (x86_linux_read_description): Re-indent the code.
-
-2017-06-29  Yao Qi  <yao.qi@linaro.org>
-
-	* tdesc.h (struct target_desc) [IN_PROCESS_AGENT] <expedite_regs>:
-	Remove.
-	[IN_PROCESS_AGENT] <xmltarget>: Likewise.
-
-2017-06-20  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in (IPA_OBJS): Sort and format one item per line.
-
-2017-06-20  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* linux-low.c (linux_create_inferior): Adjust code to access the
-	environment information via 'gdb_environ' class.
-	* lynx-low.c (lynx_create_inferior): Likewise.
-	* server.c (our_environ): Make it an instance of 'gdb_environ'.
-	(get_environ): Return a pointer to 'our_environ'.
-	(captured_main): Initialize 'our_environ'.
-	* server.h (get_environ): Adjust prototype.
-	* spu-low.c (spu_create_inferior): Adjust code to access the
-	environment information via 'gdb_environ' class.
-
-2017-06-17  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (linux_read_memory, linux_write_memory): Remove
-	usage of "register" keyword.
-
-2017-06-17  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* configure: Re-generate.
-
-2017-06-17  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* configure: Re-generate.
-
-2017-06-17  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in (COMPILE.pre): Add "-x c++".
-
-2017-06-09  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* fork-child.c: Conditionally include <signal.h>.
-
-2017-06-07  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c (handle_general_set): Handle new packet
-	"QStartupWithShell".
-	(handle_query): Add "QStartupWithShell" to the list of supported
-	packets.
-	(gdbserver_usage): Add help text explaining the
-	new "--startup-with-shell" and "--no-startup-with-shell" CLI
-	options.
-	(captured_main): Recognize and act upon the presence of the new
-	CLI options.
-
-2017-06-07  Sergio Durigan Junior  <sergiodj@redhat.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (SFILES): Add "nat/fork-inferior.o".
-	* configure: Regenerate.
-	* configure.srv (srv_linux_obj): Add "fork-child.o" and
-	"fork-inferior.o".
-	(i[34567]86-*-lynxos*): Likewise.
-	(spu*-*-*): Likewise.
-	* fork-child.c: New file.
-	* linux-low.c: Include "common-inferior.h", "nat/fork-inferior.h"
-	and "environ.h".
-	(linux_ptrace_fun): New function.
-	(linux_create_inferior): Adjust function prototype to reflect
-	change on "target.h".  Adjust function code to use
-	"fork_inferior".
-	(linux_request_interrupt): Delete "signal_pid".
-	* lynx-low.c: Include "common-inferior.h" and "nat/fork-inferior.h".
-	(lynx_ptrace_fun): New function.
-	(lynx_create_inferior): Adjust function prototype to reflect
-	change on "target.h".  Adjust function code to use
-	"fork_inferior".
-	* nto-low.c (nto_create_inferior): Adjust function prototype and
-	code to reflect change on "target.h".  Update comments.
-	* server.c: Include "common-inferior.h", "nat/fork-inferior.h",
-	"common-terminal.h" and "environ.h".
-	(terminal_fd): Moved to fork-child.c.
-	(old_foreground_pgrp): Likewise.
-	(restore_old_foreground_pgrp): Likewise.
-	(last_status): Make it global.
-	(last_ptid): Likewise.
-	(our_environ): New variable.
-	(startup_with_shell): Likewise.
-	(program_name): Likewise.
-	(program_argv): Rename to...
-	(program_args): ...this.
-	(wrapper_argv): New variable.
-	(start_inferior): Delete function.
-	(get_exec_wrapper): New function.
-	(get_exec_file): Likewise.
-	(get_environ): Likewise.
-	(prefork_hook): Likewise.
-	(post_fork_inferior): Likewise.
-	(postfork_hook): Likewise.
-	(postfork_child_hook): Likewise.
-	(handle_v_run): Update code to deal with arguments coming from the
-	remote host.  Update calls from "start_inferior" to
-	"create_inferior".
-	(captured_main): Likewise.  Initialize environment variable.  Call
-	"have_job_control".
-	* server.h (post_fork_inferior): New prototype.
-	(get_environ): Likewise.
-	(last_status): Declare.
-	(last_ptid): Likewise.
-	(signal_pid): Likewise.
-	* spu-low.c: Include "common-inferior.h" and "nat/fork-inferior.h".
-	(spu_ptrace_fun): New function.
-	(spu_create_inferior): Adjust function prototype to reflect change
-	on "target.h".  Adjust function code to use "fork_inferior".
-	* target.c (target_terminal_init): New function.
-	(target_terminal_inferior): Likewise.
-	(target_terminal_ours): Likewise.
-	* target.h: Include <vector>.
-	(struct target_ops) <create_inferior>: Update prototype.
-	(create_inferior): Update macro.
-	* utils.c (gdb_flush_out_err): New function.
-	* win32-low.c (win32_create_inferior): Adjust function prototype
-	and code to reflect change on "target.h".
-
-2017-06-07  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* inferiors.c (switch_to_thread): New function.
-
-2017-06-07  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (SFILE): Add "common/job-control.c".
-	(OBS): Add "job-control.o".
-
-2017-05-06  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile: Remove "@host_makefile_frag@".
-
-2017-05-05  Pedro Alves  <palves@redhat.com>
-
-	* configure: Regenerate.
-
-2017-05-03  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* configure: Regenerate.
-
-2017-05-02  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-arm-low.c (arm_gdbserver_get_next_pcs): Adjust to
-	software_single_step change of return type to
-	std::vector<CORE_ADDR>.
-	* linux-low.c (install_software_single_step_breakpoints):
-	Likewise.
-	* linux-low.h (install_software_single_step_breakpoints):
-	Likewise.
-
-2017-04-12  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* remote-utils.c: Include "gdb_termios.h" instead of
-	"terminal.h".
-	* terminal.h: Delete file.
-
-2017-04-12  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c: Include <vector>.
-	<program_argv, wrapper_argv>: Convert to std::vector.
-	(start_inferior): Rewrite function to use C++.
-	(handle_v_run): Likewise.  Update code that calculates the argv
-	based on the vRun packet; use C++.
-	(captured_main): Likewise.
-
-2017-04-06  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (handle_v_cont): Initialize thread_resume::thread
-	with null_ptid.
-
-2017-04-05  Pedro Alves  <palves@redhat.com>
-
-	* configure: Regenerate.
-
-2017-04-05  Pedro Alves  <palves@redhat.com>
-
-	* gdbreplay.c (sync_error): Constify.
-	* linux-x86-low.c (push_opcode): Constify.
-
-2017-04-05  Pedro Alves  <palves@redhat.com>
-
-	* win32-low.c (get_child_debug_event)
-	<CREATE_PROCESS_DEBUG_EVENT>: Don't report TARGET_WAITKIND_EXECD.
-	Report TARGET_WAITKIND_SPURIOUS instead.
-
-2017-04-05  Pedro Alves  <palves@redhat.com>
-
-	* remote-utils.c (remote_prepare, remote_open): Constify.
-	* remote-utils.h (remote_prepare, remote_open): Constify.
-	* server.c (captured_main): Constify 'port' handling.
-
-2017-04-04  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in (clean): Clear .deps.
-
-2017-03-31  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* .gitignore: Remove generated files, replace with wildcard.
-	* (clean): Replace removal of generated files with wildcard.
-	(version.c): Replace with...
-	(version-generated.c): ...this.
-	(xml-builtin.c): Replace with...
-	(xml-builtin-generated.c): ...this.
-	(%-ipa.o: %-generated.c, %.o: %-generated.c): New rules.
-	(%.c: *regformats*): Replace with...
-	(%-generated.c: *regformats*): ...this.
-
-2017-03-27  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* linux-xtensa-low.c (regnum::R_THREADPTR): New enum member.
-	(xtensa_fill_gregset): Call collect_register_by_name for
-	threadptr register.
-	(xtensa_store_gregset): Call supply_register_by_name for
-	threadptr register.
-
-2017-03-27  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* linux-xtensa-low.c (xtensa_fill_gregset): Call collect_register
-	for all registers in a0_regnum..a0_regnum + C0_NREGS range.
-	(xtensa_store_gregset): Call supply_register for all registers in
-	a0_regnum..a0_regnum + C0_NREGS range.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%-ipa.o: %-ipa.c): New rule.
-	(ax-ipa.o: ax.c): Remove.
-	(linux-i386-ipa.o: linux-i386-ipa.c): Remove.
-	(linux-amd64-ipa.o: linux-amd64-ipa.c): Remove.
-	(linux-aarch64-ipa.o: linux-aarch64-ipa.c): Remove.
-	(linux-s390-ipa.o: linux-s390-ipa.c): Remove.
-	(linux-ppc-ipa.o: linux-ppc-ipa.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%-ipa.o: ../common/%.c): New rule.
-	(print-utils-ipa.o: ../common/print-utils.c): Remove.
-	(rsp-low-ipa.o: ../common/rsp-low.c): Remove.
-	(errors-ipa.o: ../common/errors.c): Remove.
-	(format-ipa.o: ../common/format.c): Remove.
-	(common-utils-ipa.o: ../common/common-utils.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%-ipa.o: %.c): New rule.
-	(tracepoint-ipa.o: tracepoint.c): Remove.
-	(utils-ipa.o: utils.c): Remove.
-	(remote-utils-ipa.o: remote-utils.c): Remove.
-	(regcache-ipa.o: regcache.c): Remove.
-	(i386-linux-ipa.o: i386-linux.c): Remove.
-	(i386-mmx-linux-ipa.o: i386-mmx-linux.c): Remove.
-	(i386-avx-linux-ipa.o: i386-avx-linux.c): Remove.
-	(i386-mpx-linux-ipa.o: i386-mpx-linux.c): Remove.
-	(i386-avx-mpx-linux-ipa.o: i386-avx-mpx-linux.c): Remove.
-	(i386-avx-avx512-linux-ipa.o: i386-avx-avx512-linux.c): Remove.
-	(i386-avx-mpx-avx512-pku-linux-ipa.o: i386-avx-mpx-avx512-pku-linux.c): Remove.
-	(amd64-linux-ipa.o: amd64-linux.c): Remove.
-	(amd64-avx-linux-ipa.o: amd64-avx-linux.c): Remove.
-	(amd64-mpx-linux-ipa.o: amd64-mpx-linux.c): Remove.
-	(amd64-avx-mpx-linux-ipa.o: amd64-avx-mpx-linux.c): Remove.
-	(amd64-avx-avx512-linux-ipa.o: amd64-avx-avx512-linux.c): Remove.
-	(amd64-avx-mpx-avx512-pku-linux-ipa.o: amd64-avx-mpx-avx512-pku-linux.c): Remove.
-	(aarch64-ipa.o: aarch64.c): Remove.
-	(s390-linux32-ipa.o: s390-linux32.c): Remove.
-	(s390-linux32v1-ipa.o: s390-linux32v1.c): Remove.
-	(s390-linux32v2-ipa.o: s390-linux32v2.c): Remove.
-	(s390-linux64-ipa.o: s390-linux64.c): Remove.
-	(s390-linux64v1-ipa.o: s390-linux64v1.c): Remove.
-	(s390-linux64v2-ipa.o: s390-linux64v2.c): Remove.
-	(s390-te-linux64-ipa.o: s390-te-linux64.c): Remove.
-	(s390-vx-linux64-ipa.o: s390-vx-linux64.c): Remove.
-	(s390-tevx-linux64-ipa.o: s390-tevx-linux64.c): Remove.
-	(s390x-linux64-ipa.o: s390x-linux64.c): Remove.
-	(s390x-linux64v1-ipa.o: s390x-linux64v1.c): Remove.
-	(s390x-linux64v2-ipa.o: s390x-linux64v2.c): Remove.
-	(s390x-te-linux64-ipa.o: s390x-te-linux64.c): Remove.
-	(s390x-vx-linux64-ipa.o: s390x-vx-linux64.c): Remove.
-	(s390x-tevx-linux64-ipa.o: s390x-tevx-linux64.c): Remove.
-	(powerpc-32l-ipa.o: powerpc-32l.c): Remove.
-	(powerpc-altivec32l-ipa.o: powerpc-altivec32l.c): Remove.
-	(powerpc-cell32l-ipa.o: powerpc-cell32l.c): Remove.
-	(powerpc-vsx32l-ipa.o: powerpc-vsx32l.c): Remove.
-	(powerpc-isa205-32l-ipa.o: powerpc-isa205-32l.c): Remove.
-	(powerpc-isa205-altivec32l-ipa.o: powerpc-isa205-altivec32l.c): Remove.
-	(powerpc-isa205-vsx32l-ipa.o: powerpc-isa205-vsx32l.c): Remove.
-	(powerpc-e500l-ipa.o: powerpc-e500l.c): Remove.
-	(powerpc-64l-ipa.o: powerpc-64l.c): Remove.
-	(powerpc-altivec64l-ipa.o: powerpc-altivec64l.c): Remove.
-	(powerpc-cell64l-ipa.o: powerpc-cell64l.c): Remove.
-	(powerpc-vsx64l-ipa.o: powerpc-vsx64l.c): Remove.
-	(powerpc-isa205-64l-ipa.o: powerpc-isa205-64l.c): Remove.
-	(powerpc-isa205-altivec64l-ipa.o: powerpc-isa205-altivec64l.c): Remove.
-	(powerpc-isa205-vsx64l-ipa.o: powerpc-isa205-vsx64l.c): Remove.
-	(tdesc-ipa.o: tdesc.c): Remove.
-	(x32-linux-ipa.o: x32-linux.c): Remove.
-	(x32-avx-linux-ipa.o: x32-avx-linux.c): Remove.
-	(x32-avx512-linux-ipa.o: x32-avx512-linux.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%.o: ../arch/%.c): New rule.
-	(arm.o: ../arch/arm.c): Remove.
-	(arm-linux.o: ../arch/arm-linux.c): Remove.
-	(arm-get-next-pcs.o: ../arch/arm-get-next-pcs.c): Remove.
-	(aarch64-insn.o: ../arch/aarch64-insn.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%.o: ../nat/%.c): New rule.
-	(x86-dregs.o: ../nat/x86-dregs.c): Remove.
-	(amd64-linux-siginfo.o: ../nat/amd64-linux-siginfo.c): Remove.
-	(linux-btrace.o: ../nat/linux-btrace.c): Remove.
-	(linux-osdata.o: ../nat/linux-osdata.c): Remove.
-	(linux-procfs.o: ../nat/linux-procfs.c): Remove.
-	(linux-ptrace.o: ../nat/linux-ptrace.c): Remove.
-	(linux-waitpid.o: ../nat/linux-waitpid.c): Remove.
-	(mips-linux-watch.o: ../nat/mips-linux-watch.c): Remove.
-	(ppc-linux.o: ../nat/ppc-linux.c): Remove.
-	(linux-personality.o: ../nat/linux-personality.c): Remove.
-	(aarch64-linux-hw-point.o: ../nat/aarch64-linux-hw-point.c): Remove.
-	(aarch64-linux.o: ../nat/aarch64-linux.c): Remove.
-	(x86-linux.o: ../nat/x86-linux.c): Remove.
-	(x86-linux-dregs.o: ../nat/x86-linux-dregs.c): Remove.
-	(linux-namespaces.o: ../nat/linux-namespaces.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%.o: ../common/%.c): New rule.
-	(signals.o: ../common/signals.c): Remove.
-	(print-utils.o: ../common/print-utils.c): Remove.
-	(rsp-low.o: ../common/rsp-low.c): Remove.
-	(common-utils.o: ../common/common-utils.c): Remove.
-	(posix-strerror.o: ../common/posix-strerror.c): Remove.
-	(mingw-strerror.o: ../common/mingw-strerror.c): Remove.
-	(vec.o: ../common/vec.c): Remove.
-	(gdb_vecs.o: ../common/gdb_vecs.c): Remove.
-	(xml-utils.o: ../common/xml-utils.c): Remove.
-	(ptid.o: ../common/ptid.c): Remove.
-	(buffer.o: ../common/buffer.c): Remove.
-	(format.o: ../common/format.c): Remove.
-	(filestuff.o: ../common/filestuff.c): Remove.
-	(agent.o: ../common/agent.c): Remove.
-	(errors.o: ../common/errors.c): Remove.
-	(environ.o: ../common/environ.c): Remove.
-	(common-debug.o: ../common/common-debug.c): Remove.
-	(cleanups.o: ../common/cleanups.c): Remove.
-	(common-exceptions.o: ../common/common-exceptions.c): Remove.
-	(fileio.o: ../common/fileio.c): Remove.
-	(common-regcache.o: ../common/common-regcache.c): Remove.
-	(signals-state-save-restore.o: ../common/signals-state-save-restore.c): Remove.
-	(new-op.o: ../common/new-op.c): Remove.
-	(btrace-common.o: ../common/btrace-common.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (%.o: ../target/%.c): New rule.
-	(waitstatus.o: ../target/waitstatus.c): Remove.
-
-2017-03-13  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in
-	(%.c: ../regformats/%.dat,
-	(%.c: ../regformats/arm/%.dat,
-	(%.c: ../regformats/i386/%.dat,
-	(%.c: ../regformats/rs6000/%.dat): New rules.
-	(aarch64.c): Remove.
-	(reg-arm.c): Remove.
-	(arm-with-iwmmxt.c): Remove.
-	(arm-with-vfpv2.c): Remove.
-	(arm-with-vfpv3.c): Remove.
-	(arm-with-neon.c): Remove.
-	(reg-bfin.c): Remove.
-	(reg-cris.c): Remove.
-	(reg-crisv32.c): Remove.
-	(i386.c): Remove.
-	(i386-linux.c): Remove.
-	(i386-avx.c): Remove.
-	(i386-avx-linux.c): Remove.
-	(i386-avx-avx512.c): Remove.
-	(i386-avx-avx512-linux.c): Remove.
-	(i386-mpx.c): Remove.
-	(i386-mpx-linux.c): Remove.
-	(i386-avx-mpx-avx512-pku.c): Remove.
-	(i386-avx-mpx-avx512-pku-linux.c): Remove.
-	(i386-avx-mpx.c): Remove.
-	(i386-avx-mpx-linux.c): Remove.
-	(i386-mmx.c): Remove.
-	(i386-mmx-linux.c): Remove.
-	(reg-ia64.c): Remove.
-	(reg-m32r.c): Remove.
-	(reg-m68k.c): Remove.
-	(reg-cf.c): Remove.
-	(mips-linux.c): Remove.
-	(mips-dsp-linux.c): Remove.
-	(mips64-linux.c): Remove.
-	(mips64-dsp-linux.c): Remove.
-	(nios2-linux.c): Remove.
-	(powerpc-32.c): Remove.
-	(powerpc-32l.c): Remove.
-	(powerpc-altivec32l.c): Remove.
-	(powerpc-cell32l.c): Remove.
-	(powerpc-vsx32l.c): Remove.
-	(powerpc-isa205-32l.c): Remove.
-	(powerpc-isa205-altivec32l.c): Remove.
-	(powerpc-isa205-vsx32l.c): Remove.
-	(powerpc-e500l.c): Remove.
-	(powerpc-64l.c): Remove.
-	(powerpc-altivec64l.c): Remove.
-	(powerpc-cell64l.c): Remove.
-	(powerpc-vsx64l.c): Remove.
-	(powerpc-isa205-64l.c): Remove.
-	(powerpc-isa205-altivec64l.c): Remove.
-	(powerpc-isa205-vsx64l.c): Remove.
-	(s390-linux32.c): Remove.
-	(s390-linux32v1.c): Remove.
-	(s390-linux32v2.c): Remove.
-	(s390-linux64.c): Remove.
-	(s390-linux64v1.c): Remove.
-	(s390-linux64v2.c): Remove.
-	(s390-te-linux64.c): Remove.
-	(s390-vx-linux64.c): Remove.
-	(s390-tevx-linux64.c): Remove.
-	(s390x-linux64.c): Remove.
-	(s390x-linux64v1.c): Remove.
-	(s390x-linux64v2.c): Remove.
-	(s390x-te-linux64.c): Remove.
-	(s390x-vx-linux64.c): Remove.
-	(s390x-tevx-linux64.c): Remove.
-	(tic6x-c64xp-linux.c): Remove.
-	(tic6x-c64x-linux.c): Remove.
-	(tic6x-c62x-linux.c): Remove.
-	(reg-sh.c): Remove.
-	(reg-sparc64.c): Remove.
-	(reg-spu.c): Remove.
-	(amd64.c): Remove.
-	(amd64-linux.c): Remove.
-	(amd64-avx.c): Remove.
-	(amd64-avx-linux.c): Remove.
-	(amd64-avx-avx512.c): Remove.
-	(amd64-avx-avx512-linux.c): Remove.
-	(amd64-mpx.c): Remove.
-	(amd64-mpx-linux.c): Remove.
-	(amd64-avx-mpx-avx512-pku.c): Remove.
-	(amd64-avx-mpx-avx512-pku-linux.c): Remove.
-	(amd64-avx-mpx.c): Remove.
-	(amd64-avx-mpx-linux.c): Remove.
-	(x32.c): Remove.
-	(x32-linux.c): Remove.
-	(x32-avx.c): Remove.
-	(x32-avx-linux.c): Remove.
-	(x32-avx-avx512.c): Remove.
-	(x32-avx-avx512-linux.c): Remove.
-	(reg-xtensa.c): Remove.
-	(reg-tilegx.c): Remove.
-	(reg-tilegx32.c): Remove.
-
-2017-03-07  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (SFILES): Add "common/environ.c".
-	(OBJS): Add "common/environ.h".
-
-2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* configure.ac: Check if the fs_base and gs_base members of
-	`struct user_regs_struct' exist.
-	* config.in: Regenerated.
-	* configure: Likewise.
-
-2017-01-09  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-aarch32-low.c (arm_breakpoint_kind_from_pc): Use
-	target_read_memory.
-	* linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer): Likewise.
-	(get_next_pcs_syscall_next_pc): Likewise.
-
-2016-12-23  Luis Machado  <lgustavo@codesourcery.com>
-
-	* win32-i386-low.c: Fix incorrect reference to a couple source files.
-	* nto-x86-low.c: Likewise.
-
-2016-11-30  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in: Include disable-implicit-rules.mk.
-
-2016-11-23  Pedro Alves  <palves@redhat.com>
-
-	* debug.c: Include <chrono> instead of "gdb_sys_time.h".
-	(debug_vprintf): Use std::chrono::steady_clock instead of
-	gettimeofday.  Use '.' instead of ':'.
-	* tracepoint.c: Include <chrono> instead of "gdb_sys_time.h".
-	(get_timestamp): Use std::chrono::steady_clock instead of
-	gettimeofday.
-
-2016-11-22  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in: Fix whitespace formatting.
-
-2016-11-22  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (SFILES, OBS): Flatten list and order
-	alphabetically.
-
-2016-11-23  Pedro Alves  <palves@redhat.com>
-
-	* event-loop.c (handle_file_event): Use warning.
-	* linux-low.c (linux_resume_one_lwp_throw): Use warning.
-	* mem-break.c (add_breakpoint_condition, add_breakpoint_commands):
-	Use warning.
-
-2016-11-23  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (check_zombie_leaders): Use debug_printf for debug
-	output.
-	* notif.c (handle_notif_ack, notif_event_enque): Likewise.
-	* remote-utils.c (putpkt_binary_1, readchar, getpkt): Use
-	debug_printf and debug_flush for debug output.
-	* server.c (handle_general_set): Likewise.
-	* thread-db.c (try_thread_db_load): Use debug_printf for debug
-	output.
-
-2016-11-17  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in (.c.o): Replace rule with ...
-	(%.o: %.c): ... this one.
-
-2016-11-17  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* Makefile.in: Remove @GMAKE_TRUE@ prefixes and removes lines
-	prefixed with @GMAKE_FALSE@.  Update comment related to non-GNU
-	make.
-	* configure.ac: Remove checks for the make program.
-	* configure: Re-generate.
-
-2016-10-28  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (CXX_DIALECT): Get from configure.
-	(COMPILE.pre, CC_LD): Append $(CXX_DIALECT).
-	* acinclude.m4: Include ../ax_cxx_compile_stdcxx.m4.
-	* configure.ac: Call AX_CXX_COMPILE_STDCXX.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2016-10-27  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_supports_range_stepping): Return true if
-	can_software_single_step return true.
-
-2016-10-27  Yao Qi  <yao.qi@linaro.org>
-
-	* inferiors.c (find_inferior_in_random): New function.
-	* inferiors.h (find_inferior_in_random): Declare.
-	* linux-low.c (linux_wait_for_event_filtered): Call
-	find_inferior_in_random instead of find_inferior.
-
-2016-10-27  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_wait_1): If single-step breakpoints are
-	inserted, remove them.
-
-2016-10-26  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Link parent/child fork
-	threads.
-	(linux_wait_1): Unlink them.
-	(linux_set_resume_request): Ignore resume requests for
-	already-resumed and unhandled fork child threads.
-	* linux-low.h (struct lwp_info) <fork_relative>: New field.
-	* server.c (in_queued_stop_replies_ptid, in_queued_stop_replies):
-	New functions.
-	(handle_v_requests) <vCont>: Don't call require_running.
-	* server.h (in_queued_stop_replies): New declaration.
-
-2016-10-24  Yao Qi  <yao.qi@linaro.org>
-
-	PR server/20733
-	* linux-aarch64-low.c (append_insns): Cast the return value to
-	'uint32_t *'.
-
-2016-10-10  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.c (enum arm_breakpoint_kinds): Remove.
-
-2016-10-06  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* target.c (target_supports_multi_process): New function, moved
-	from...
-	* target.h (target_supports_multi_process): ... here.  Remove
-	macro.
-
-2016-10-05  Tom Tromey  <tom@tromey.com>
-
-	PR remote/20655:
-	* tracepoint.c (handle_tracepoint_bkpts): Check
-	ipa_error_tracepoint, not ipa_stopping_tracepoint.
-
-2016-10-05  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Update the path of arm-*.xml files.
-
-2016-10-05  Terry Guo  <terry.guo@arm.com>
-	    Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in: Adjust the path of rules.
-	* configure.srv: Update the path of xml files.
-	* regformats/arm-with-iwmmxt.dat: Regenerated.
-	* regformats/arm-with-neon.dat: Likewise.
-	* regformats/arm-with-vfpv2.dat: Likewise.
-	* regformats/arm-with-vfpv3.dat Likewise.
-
-2016-09-30  Yao Qi  <yao.qi@linaro.org>
-
-	PR gdbserver/20627
-	* target.c (target_stop_and_wait): Don't call
-	target_continue_no_signal, use resume_stop instead.
-
-2016-09-26  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_wait_1): Call debug_exit.
-
-2016-09-23  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (SFILES): Add common/new-op.c.
-	(OBS): Add common/new-op.o.
-	(new-op.o): New rule.
-
-2016-09-21  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* .gitinore: Ignore more files.
-
-2016-09-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.c (arm_fill_gregset): Keep bits 20 to
-	23.
-
-2016-09-19  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c (start_inferior): Call target_mourn_inferior instead of
-	mourn_inferior; pass ptid_t argument to it.
-	(resume): Likewise.
-	(handle_target_event): Likewise.
-	* target.c (target_mourn_inferior): New function.
-	* target.h (mourn_inferior): Delete macro.
-
-2016-09-16  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-low.c (lwp_is_stepping): New function.
-
-2016-09-06  Carl Love  <cel@us.ibm.com>
-
-	* server.c (start_inferior):  Fixed comment, requested comment change
-	didn't get updated correctly.  Removed reference to ptrace () call as
-	it is only true on Linux systems.
-
-2016-09-06  Carl Love  <cel@us.ibm.com>
-
-	* server.c (start_inferior):  Do not call
-	function target_post_create_inferior () if the
-	inferior process has already exited.
-
-2016-09-05  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (COMPILER, COMPILER_CFLAGS): Remove.
-	(COMPILE.pre, CC_LD): Use CXX directly.
-	(INTERNAL_CFLAGS_BASE): Use CXXFLAGS directly.
-	* acinclude.m4: Don't include build-with-cxx.m4.
-	* configure.ac: Remove GDB_AC_BUILD_WITH_CXX call.
-	* configure: Regenerate.
-
-2016-09-02  Akash Trehan  <akash.trehan123@gmail.com>
-
-	PR gdb/19495
-	* remote-utils.c (relocate_instruction): Remove redundant strcpy()
-	call writing data to own_buf.
-
-2016-09-01  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* target.c (mywait): Call target_wait instead of
-	the_target->wait.
-	(target_wait): New function.
-
-2016-09-01  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* server.c (start_inferior): New variable 'ptid'.  Replace calls
-	to the_target->resume by target_continue{,_no_signal}, depending
-	on the case.
-	* target.c (target_stop_and_wait): Call target_continue_no_signal
-	instead of the_target->resume.
-	(target_continue): New function.
-
-2016-08-31  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (linux_wait_1): Move event switch after unsuspend_lwps.
-
-2016-08-25  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
-
-	PR server/20491
-	* gdb_proc_service.h (ps_get_thread_area): Remove const from struct
-	ps_prochandle.
-	* linux-aarch64-low.c (ps_get_thread_area): Likewise.
-	* linux-arm-low.c (ps_get_thread_area): Likewise.
-	* linux-crisv32-low.c (ps_get_thread_area): Likewise.
-	* linux-m68k-low.c (ps_get_thread_area): Likewise.
-	* linux-mips-low.c (ps_get_thread_area): Likewise.
-	* linux-nios2-low.c (ps_get_thread_area): Likewise.
-	* linux-tic6x-low.c (ps_get_thread_area): Likewise.
-	* linux-x86-low.c (ps_get_thread_area): Likewise.
-	* linux-xtensa-low.c (ps_get_thread_area): Likewise.
-
-2016-08-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (amd64_emit_call): Emit missing call opcode.
-
-2016-08-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Fix
-	comment.  Use memcpy instead of casting through unsigned long.
-
-2016-08-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-amd64-ipa.c (alloc_jump_pad_buffer) [__ILP32__]: Try
-	allocating around 0x80000000.
-
-2016-08-19  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/20415
-	* Makefile.in (x32-linux-ipa.o, x32-avx-linux-ipa.o)
-	(x32-avx512-linux-ipa.o): New rules.
-	* configure.ac (x86_64-*-linux*): New x32 check.
-	* configure.srv (ipa_x32_linux_regobj): New.
-	(x86_64-*-linux*): Use $ipa_x32_linux_regobj if building for x32.
-	* linux-amd64-ipa.c (get_ipa_tdesc) [__ILP32__]: Return x32
-	descriptions.
-	(initialize_low_tracepoint) [__ILP32__]: Initialize x32
-	descriptions.
-	* configure: Regenerate.
-
-2016-08-09  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/18653
-	* Makefile.in (OBS): Add signals-state-save-restore.o.
-	(signals-state-save-restore.o): New rule.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* linux-low.c: Include "signals-state-save-restore.h".
-	(linux_create_inferior): Call
-	restore_original_signals_state.
-	* server.c: Include "dispositions-save-restore.h".
-	(captured_main): Call save_original_signals_state.
-
-2016-08-05  Pedro Alves  <palves@redhat.com>
-
-	* configure: Regenerate.
-
-2016-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (regsets_fetch_inferior_registers): Check
-	errno is ESRCH or not.
-
-2016-08-02  Yao Qi  <yao.qi@linaro.org>
-
-	* thread-db.c (struct thread_db) <td_ta_event_getmsg_p>: Remove.
-	<td_ta_set_event_p, td_ta_event_addr_p>: Remove.
-	(thread_db_load_search): Update.
-	(try_thread_db_load_1): Don't look for td_ta_event_addr,
-	td_ta_set_event and td_ta_event_getmsg.
-
-2016-07-26  Pedro Alves  <palves@redhat.com>
-
-	PR server/20414
-	* linux-x86-low.c (x86_get_pc, x86_set_pc): Use uint64_t instead
-	of unsigned long for 64-bit registers and use uint32_t instead of
-	unsigned int for 32-bit registers.
-
-2016-07-26  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (x86_siginfo_fixup): Rename 'native' parameter
-	to 'ptrace'.
-
-2016-07-21  Tom Tromey  <tom@tromey.com>
-
-	* configure: Rebuild.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* mem-break.c (find_gdb_breakpoint): Cast bp to
-	'struct gdb_breakpoint *' rather than 'gdb_breakpoint *'.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* server.c (handle_v_requests): Support s and S actions
-	if target_supports_software_single_step return true.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (resume_stopped_resumed_lwps): If resume request
-	is resume_step, call maybe_hw_step.
-	(linux_wait_1): Stop all threads, remove reinsert breakpoints,
-	and unstop them.
-	(linux_resume_one_lwp_throw): Don't assert the thread has reinsert
-	breakpoints or not.
-	(proceed_one_lwp): If resume request is resume_step, install
-	reinsert breakpoints and call maybe_hw_step.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (proceed_one_lwp): Declare.
-	(linux_resume_one_thread): Remove local variable 'step'.
-	Lift code enqueue signal.  Call proceed_one_lwp instead of
-	linux_resume_one_lwp.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_resume_one_thread): Call
-	enqueue_pending_signal.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* gdbthread.h (make_cleanup_restore_current_thread): Declare.
-	* inferiors.c (do_restore_current_thread_cleanup): New function.
-	(make_cleanup_restore_current_thread): Likewise.
-	* linux-low.c (install_software_single_step_breakpoints): Call
-	make_cleanup_restore_current_thread.  Switch current_thread to
-	thread.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* mem-break.c (struct reinsert_breakpoint) <ptid>: New field.
-	(set_reinsert_breakpoint): New parameter ptid.  Callers updated.
-	(clone_one_breakpoint): Likewise.
-	(delete_reinsert_breakpoints): Change parameter to thread.
-	Callers updated.
-	(has_reinsert_breakpoints): Likewise.
-	(uninsert_reinsert_breakpoints): Likewise.
-	(reinsert_reinsert_breakpoints): Likewise.
-	* mem-break.h (set_reinsert_breakpoint): Update declaration.
-	(delete_reinsert_breakpoints): Likewise.
-	(reinsert_reinsert_breakpoints): Likewise.
-	(uninsert_reinsert_breakpoints): Likewise.
-	(has_reinsert_breakpoints): Likewise.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* inferiors.c (get_thread_process): Make parameter const.
-	* inferiors.h (get_thread_process): Update declaration.
-	* mem-break.c (clone_all_breakpoints): Remove all parameters.
-	Add new parameters child_thread and parent_thread.  Callers
-	updated.
-	* mem-break.h (clone_all_breakpoints): Update declaration.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* mem-break.c (struct breakpoint) <cond_list>: Remove.
-	<command_list, handler>: Remove.
-	(struct gdb_breakpoint): New.
-	(struct other_breakpoint): New.
-	(struct reinsert_breakpoint): New.
-	(is_gdb_breakpoint): New function.
-	(any_persistent_commands): Update command_list if
-	is_gdb_breakpoint returns true.
-	(set_breakpoint): Create breakpoints according to their types.
-	(find_gdb_breakpoint): Return 'struct gdb_breakpoint *'.
-	(set_gdb_breakpoint_1): Likewise.
-	(set_gdb_breakpoint): Likewise.
-	(clear_breakpoint_conditions): Change parameter type to
-	'struct gdb_breakpoint *'.
-	(clear_breakpoint_commands): Likewise.
-	(clear_breakpoint_conditions_and_commands): Likewise.
-	(add_condition_to_breakpoint): Likewise.
-	(add_breakpoint_condition): Likewise.
-	(add_commands_to_breakpoint): Likewise.
-	(check_breakpoints): Check other_breakpoint.
-	(clone_one_breakpoint): Clone breakpopint according to its type.
-	* mem-break.h (struct gdb_breakpoint): Declare.
-	(set_gdb_breakpoint): Update declaration.
-	(clear_breakpoint_conditions_and_commands): Likewise.
-	(add_breakpoint_condition): Likewise.
-	(add_breakpoint_commands): Likewise.
-	* server.c (process_point_options): Change parameter type to
-	'struct gdb_breakpoint *'.
-
-2016-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* mem-break.c (set_breakpoint_at): Rename it to ...
-	(set_breakpoint_type_at): ... it.
-	(set_breakpoint_at): Call set_breakpoint_type_at.
-	(set_reinsert_breakpoint): Call set_breakpoint_type_at.
-	* mem-break.h (set_breakpoint_at): Update comments.
-
-2016-07-12  Chung-Lin Tang  <cltang@codesourcery.com>
-
-	* linux-nios2-low.c (nios2_fill_gregset): Add type cast
-	to buf parameter.
-	(nios2_store_gregset): Likewise.
-
-2016-07-01  Pedro Alves  <palves@redhat.com>
-	    Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c: Change interface to take the target lwp_info
-	pointer directly and return void.  Handle detaching from a zombie
-	thread.
-	(linux_detach_lwp_callback): New function.
-	(linux_detach): Detach from the leader thread after detaching from
-	the clone threads.
-
-2016-06-28  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_ftrace_insn_reloc_b): Use int64_t
-	for variable new_offset.
-	(aarch64_ftrace_insn_reloc_b_cond): Likewise.
-	(aarch64_ftrace_insn_reloc_cb): Likewise.
-	(aarch64_ftrace_insn_reloc_tb): Likewise.
-	(aarch64_install_fast_tracepoint_jump_pad): Likewise.  Use
-	PRIx64 instead of PRIx32.
-
-2016-06-28  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (arm_get_syscall_trapinfo): New function.
-	(the_low_target): Install arm_get_syscall_trapinfo.
-
-2016-06-28  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_get_syscall_trapinfo): New
-	function.
-	(the_low_target): Install aarch64_get_syscall_trapinfo.
-
-2016-06-28  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (get_syscall_trapinfo): Remove parameter sysret.
-	Callers updated.
-	* linux-low.h (struct linux_target_ops) <get_syscall_trapinfo>:
-	Remove parameter sysno.
-	* linux-x86-low.c (x86_get_syscall_trapinfo): Remove parameter
-	sysret.
-
-2016-06-21  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-s390-low.c (s390_emit_eq_goto): Mark function static.
-	(s390_emit_ne_goto): Likewise.
-	(s390_emit_lt_goto): Likewise.
-	(s390_emit_le_goto): Likewise.
-	(s390_emit_gt_goto): Likewise.
-	(s390_emit_ge_goto): Likewise.
-	(s390x_emit_eq_goto): Likewise.
-	(s390x_emit_ne_goto): Likewise.
-	(s390x_emit_lt_goto): Likewise.
-	(s390x_emit_le_goto): Likewise.
-	(s390x_emit_gt_goto): Likewise.
-	(s390x_emit_ge_goto): Likewise.
-	(s390_emit_ops_impl): Mark variable static.
-	(s390x_emit_ops): Likewise.
-
-2016-06-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (handle_extended_wait): Call
-	uninsert_reinsert_breakpoints for the parent process.  Remove
-	reinsert breakpoints from the child process.  Reinsert them to
-	the parent process when vfork is done.
-	* mem-break.c (uninsert_reinsert_breakpoints): New function.
-	(reinsert_reinsert_breakpoints): New function.
-	* mem-break.h (uninsert_reinsert_breakpoints): Declare
-	(reinsert_reinsert_breakpoints): Declare.
-
-2016-06-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (handle_extended_wait): If the parent is doing
-	step-over, remove the reinsert breakpoints from the forked child.
-
-2016-06-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (unsuspend_all_lwps): Declare.
-	(linux_low_filter_event): If thread exited, call finish_step_over.
-	If step-over is finished, unsuspend other threads.
-
-2016-06-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_resume_one_lwp_throw): Assert
-	has_reinsert_breakpoints returns false.
-	* mem-break.c (delete_disabled_breakpoints): Assert
-	bp type isn't reinsert_breakpoint.
-
-2016-06-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (maybe_hw_step): New function.
-	(linux_resume_one_lwp_throw): Call maybe_hw_step.
-	(finish_step_over): Switch current_thread to lwp temporarily,
-	and assert has_reinsert_breakpoints returns true.
-	(proceed_one_lwp): Call maybe_hw_step.
-	* mem-break.c (has_reinsert_breakpoints): New function.
-	* mem-break.h (has_reinsert_breakpoints): Declare.
-
-2016-06-02  Jon Turney  <jon.turney@dronecode.org.uk>
-
-	* win32-low.c (win32_create_inferior): Add pointer casts for C++.
-
-2016-05-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_stabilize_threads): Call unsuspend_all_lwps
-	instead of find_inferior.
-
-2016-05-05  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer):
-	Initialize res to zero.
-
-2016-05-05  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (arm_sigreturn_next_pc): Change type of cpsr
-	to uint32_t.
-
-2016-05-04  Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
-
-	* spu-low.c (fetch_ppc_register): Cast PowerPC-Linux-specific value
-	used as first ptrace argument to PTRACE_TYPE_ARG1 for C++.
-	(fetch_ppc_memory_1, store_ppc_memory_1): Likewise.
-
-2016-04-28  Par Olsson  <par.olsson@windriver.com>
-	    Simon Marchi  <simon.marchi@ericsson.com>
-
-	* tracepoint.c (write_inferior_int8): New function.
-	(cmd_qtenable_disable): Write enable flag using
-	write_inferior_int8.
-
-2016-04-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (lwp_signal_can_be_delivered): Adjust.
-	(need_step_over_p): Return zero if the LWP has pending signals
-	can be delivered on software single step target.
-
-2016-04-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (reinsert_raw_breakpoint): If bp->inserted is true
-	return instead of error.
-
-2016-04-22  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.c (arm_store_gregset): Clear CPSR bits 20
-	to 23.
-
-2016-04-22  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (lwp_signal_can_be_delivered): Don't deliver
-	signal when stepping over breakpoint with software single
-	step.
-
-2016-04-21  Pedro Alves  <palves@redhat.com>
-
-	* linux-s390-low.c (s390_collect_ptrace_register)
-	(s390_supply_ptrace_register, s390_get_hwcap): Use gdb_byte * and
-	add casts.
-	(s390_check_regset): Use void * instead of gdb_byte *.
-
-2016-04-20  Pedro Alves  <palves@redhat.com>
-
-	* configure: Renegerate.
-
-2016-04-20  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.c: Include "arch/arm-linux.h".
-	(arm_fill_gregset): Use ARM_CPSR_GREGNUM rather than magic
-	number 16.
-	(arm_store_gregset): Likewise.
-
-2016-04-16  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* Makefile.in (clean): Add removal for i386-avx-mpx.c,
-	i386-avx-mpx-linux.c, amd64-avx-mpx.c and amd64-avx-mpx-linux.c.
-	(i386-avx-mpx.c, i386-avx-mpx-linux.c, amd64-avx-mpx.c)
-	(amd64-avx-mpx-linux.c): New rules.
-	(amd64-avx-mpx-linux-ipa.o, i386-avx-mpx-linux-ipa.o): New rule.
-	* configure.srv (srv_i386_regobj): Add i386-avx-mpx.o.
-	(srv_i386_linux_regobj): Add i386-avx-mpx-linux.o.
-	(srv_amd64_regobj): Add amd64-avx-mpx.o.
-	(srv_amd64_linux_regobj): Add amd64-avx-mpx-linux.o.
-	(srv_i386_xmlfiles): Add i386/i386-avx-mpx.xml.
-	(srv_amd64_xmlfiles): Add i386/amd64-avx-mpx.xml.
-	(srv_i386_linux_xmlfiles): Add i386/i386-avx-mpx-linux.xml.
-	(srv_amd64_linux_xmlfiles): Add i386/amd64-avx-mpx-linux.xml.
-	(ipa_i386_linux_regobj): Add i386-avx-mpx-linux-ipa.o.
-	(ipa_amd64_linux_regobj): Add amd64-avx-mpx-linux-ipa.o.
-	* linux-x86-low.c (x86_linux_read_description): Add case for
-	X86_XSTATE_AVX_MPX_MASK.
-	(x86_get_ipa_tdesc_idx): Add cases for avx_mpx.
-	(initialize_low_arch): Call init_registers_amd64_avx_mpx_linux and
-	init_registers_i386_avx_mpx_linux.
-	* linux-i386-ipa.c (get_ipa_tdesc): Add case for avx_mpx.
-	(initialize_low_tracepoint): Call
-	init_registers_i386_avx_mpx_linux.
-	* linux-amd64-ipa.c (get_ipa_tdesc):  Add case for avx_mpx.
-	(initialize_low_tracepoint): Call
-	init_registers_amd64_avx_mpx_linux.
-	* linux-x86-tdesc.h (X86_TDESC_AVX_MPX): New enum value.
-	(init_registers_amd64_avx_mpx_linux, tdesc_amd64_avx_mpx_linux)
-	(init_registers_i386_avx_mpx_linux, tdesc_i386_avx_mpx_linux): New
-	declarations.
-
-2016-04-18  Pedro Alves  <palves@redhat.com>
-
-	* configure: Regenerate.
-
-2016-04-13  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-aarch64-low.c (aarch64_emit_add): Switch x1 and x0.
-	(aarch64_emit_sub): Likewise.
-
-2016-04-12  Pedro Alves  <palves@redhat.com>
-
-	* utils.c (prepare_to_throw_exception): Delete.
-
-2016-04-05  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* Makefile.in ($(IPA_LIB)): Set SONAME of the IPA lib.
-
-2016-04-05  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* tracepoint.c (getauxval): Move to #ifdef IN_PROCESS_AGENT.
-
-2016-04-03  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-aarch64-ipa.c: Add <elf.h> include.
-	* linux-ppc-ipa.c: Add <elf.h> include.
-	* linux-s390-ipa.c: Add <elf.h> include.
-
-2016-03-31  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* tracepoint.c (gdb_collect_ptr): Remove const qualifier.
-	(get_raw_reg_ptr): Likewise.
-	(get_trace_state_variable_value_ptr): Likewise.
-	(set_trace_state_variable_value_ptr): Likewise.
-	(initialize_tracepoint): Cast alloc_jump_pad_buffer result to
-	char *.
-
-2016-03-31  Wei-cheng Wang  <cole945@gmail.com>
-	    Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	PR/17221
-	* linux-ppc-low.c (emit_insns): New function.
-	(__EMIT_ASM, _EMIT_ASM, EMIT_ASM): New macros.
-	(ppc_emit_prologue): New function.
-	(ppc_emit_epilogue): New function.
-	(ppc_emit_add): New function.
-	(ppc_emit_sub): New function.
-	(ppc_emit_mul): New function.
-	(ppc_emit_lsh): New function.
-	(ppc_emit_rsh_signed): New function.
-	(ppc_emit_rsh_unsigned): New function.
-	(ppc_emit_ext): New function.
-	(ppc_emit_zero_ext): New function.
-	(ppc_emit_log_not): New function.
-	(ppc_emit_bit_and): New function.
-	(ppc_emit_bit_or): New function.
-	(ppc_emit_bit_xor): New function.
-	(ppc_emit_bit_not): New function.
-	(ppc_emit_equal): New function.
-	(ppc_emit_less_signed): New function.
-	(ppc_emit_less_unsigned): New function.
-	(ppc_emit_ref): New function.
-	(ppc_emit_const): New function.
-	(ppc_emit_reg): New function.
-	(ppc_emit_pop): New function.
-	(ppc_emit_stack_flush): New function.
-	(ppc_emit_swap): New function.
-	(ppc_emit_stack_adjust): New function.
-	(ppc_emit_call): New function.
-	(ppc_emit_int_call_1): New function.
-	(ppc_emit_void_call_2): New function.
-	(ppc_emit_if_goto): New function.
-	(ppc_emit_goto): New function.
-	(ppc_emit_eq_goto): New function.
-	(ppc_emit_ne_goto): New function.
-	(ppc_emit_lt_goto): New function.
-	(ppc_emit_le_goto): New function.
-	(ppc_emit_gt_goto): New function.
-	(ppc_emit_ge_goto): New function.
-	(ppc_write_goto_address): New function.
-	(ppc_emit_ops_impl): New static variable.
-	(ppc64v1_emit_prologue): New function.
-	(ppc64v2_emit_prologue): New function.
-	(ppc64_emit_epilogue): New function.
-	(ppc64_emit_add): New function.
-	(ppc64_emit_sub): New function.
-	(ppc64_emit_mul): New function.
-	(ppc64_emit_lsh): New function.
-	(ppc64_emit_rsh_signed): New function.
-	(ppc64_emit_rsh_unsigned): New function.
-	(ppc64_emit_ext): New function.
-	(ppc64_emit_zero_ext): New function.
-	(ppc64_emit_log_not): New function.
-	(ppc64_emit_bit_and): New function.
-	(ppc64_emit_bit_or): New function.
-	(ppc64_emit_bit_xor): New function.
-	(ppc64_emit_bit_not): New function.
-	(ppc64_emit_equal): New function.
-	(ppc64_emit_less_signed): New function.
-	(ppc64_emit_less_unsigned): New function.
-	(ppc64_emit_ref): New function.
-	(ppc64_emit_const): New function.
-	(ppc64v1_emit_reg): New function.
-	(ppc64v2_emit_reg): New function.
-	(ppc64_emit_pop): New function.
-	(ppc64_emit_stack_flush): New function.
-	(ppc64_emit_swap): New function.
-	(ppc64v1_emit_call): New function.
-	(ppc64v2_emit_call): New function.
-	(ppc64v1_emit_int_call_1): New function.
-	(ppc64v2_emit_int_call_1): New function.
-	(ppc64v1_emit_void_call_2): New function.
-	(ppc64v2_emit_void_call_2): New function.
-	(ppc64_emit_if_goto): New function.
-	(ppc64_emit_eq_goto): New function.
-	(ppc64_emit_ne_goto): New function.
-	(ppc64_emit_lt_goto): New function.
-	(ppc64_emit_le_goto): New function.
-	(ppc64_emit_gt_goto): New function.
-	(ppc64_emit_ge_goto): New function.
-	(ppc64v1_emit_ops_impl): New static variable.
-	(ppc64v2_emit_ops_impl): New static variable.
-	(ppc_emit_ops): New function.
-	(linux_low_target): Wire in ppc_emit_ops.
-
-2016-03-31  Wei-cheng Wang  <cole945@gmail.com>
-	    Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	PR/17221
-	* Makefile.in: Add powerpc-*-ipa.o
-	* configure.srv: Add ipa_obj for powerpc*-linux.
-	* linux-ppc-ipa.c: New file.
-	* linux-ppc-low.c: Added linux-ppc-tdesc.h, ax.h, tracepoint.h
-	includes.
-	(PPC_FIELD): New macro.
-	(PPC_SEXT): New macro.
-	(PPC_OP6): New macro.
-	(PPC_BO): New macro.
-	(PPC_LI): New macro.
-	(PPC_BD): New macro.
-	(init_registers_*): Move prototype to linux-ppc-tdesc.h.
-	(tdesc_*): Move declaration to linux-ppc-tdesc.h.
-	(ppc_get_hwcap): Rename to ppc_get_auxv and add type parameter.
-	(ppc_get_thread_area): New function.
-	(is_elfv2_inferior): New function.
-	(gen_ds_form): New function.
-	(GEN_STD): New macro.
-	(GEN_STDU): New macro.
-	(GEN_LD): New macro.
-	(GEN_LDU): New macro.
-	(gen_d_form): New function.
-	(GEN_ADDI): New macro.
-	(GEN_ADDIS): New macro.
-	(GEN_LI): New macro.
-	(GEN_LIS): New macro.
-	(GEN_ORI): New macro.
-	(GEN_ORIS): New macro.
-	(GEN_LWZ): New macro.
-	(GEN_STW): New macro.
-	(GEN_STWU): New macro.
-	(gen_xfx_form): New function.
-	(GEN_MFSPR): New macro.
-	(GEN_MTSPR): New macro.
-	(GEN_MFCR): New macro.
-	(GEN_MTCR): New macro.
-	(GEN_SYNC): New macro.
-	(GEN_LWSYNC): New macro.
-	(gen_x_form): New function.
-	(GEN_OR): New macro.
-	(GEN_MR): New macro.
-	(GEN_LWARX): New macro.
-	(GEN_STWCX): New macro.
-	(GEN_CMPW): New macro.
-	(gen_md_form): New function.
-	(GEN_RLDICL): New macro.
-	(GEN_RLDICR): New macro.
-	(gen_i_form): New function.
-	(GEN_B): New macro.
-	(GEN_BL): New macro.
-	(gen_b_form): New function.
-	(GEN_BNE): New macro.
-	(GEN_LOAD): New macro.
-	(GEN_STORE): New macro.
-	(gen_limm): New function.
-	(gen_atomic_xchg): New function.
-	(gen_call): New function.
-	(ppc_relocate_instruction): New function.
-	(ppc_install_fast_tracepoint_jump_pad): New function.
-	(ppc_get_min_fast_tracepoint_insn_len): New function.
-	(ppc_get_ipa_tdesc_idx): New function.
-	(the_low_target): Wire in the new functions.
-	(initialize_low_arch) [!__powerpc64__]: Don'it initialize 64-bit
-	tdescs.
-	* linux-ppc-tdesc.h: New file.
-
-2016-03-31  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-aarch64-ipa.c: Add <sys/mman.h> and <sys/auxv.h> includes.
-	(alloc_jump_pad_buffer): New function.
-	* linux-amd64-ipa.c: Add <sys/mman.h> include.
-	(alloc_jump_pad_buffer): New function.
-	* linux-i386-ipa.c (alloc_jump_pad_buffer): New function.
-	* linux-s390-ipa.c: Add <sys/mman.h> and <sys/auxv.h> includes.
-	(alloc_jump_pad_buffer): New function.
-	* tracepoint.c (getauxval) [!HAVE_GETAUXVAL]: New function.
-	(initialize_tracepoint): Delegate to alloc_jump_pad_buffer.
-	* tracepoint.h (alloc_jump_pad_buffer): New prototype.
-	(getauxval) [!HAVE_GETAUXVAL]: New prototype.
-
-2016-03-30  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-aarch64-ipa.c: Rename gdb_agent_get_raw_reg to get_raw_reg.
-	* linux-amd64-ipa.c: Likewise.
-	* linux-i386-ipa.c: Likewise.
-	* linux-s390-ipa.c: Likewise.
-	* tracepoint.c: IPA-export gdb_collect_ptr instead of gdb_collect,
-	ditto for get_raw_reg_ptr, get_trace_state_variable_value_ptr,
-	set_trace_state_variable_value_ptr.
-	(struct ipa_sym_addresses): Likewise.
-	(symbol_list): Likewise.
-	(install_fast_tracepoint): Dereference gdb_collect_ptr instead of
-	accessing gdb_collect directly.
-	(gdb_collect_ptr_type): New typedef.
-	(get_raw_reg_ptr_type): New typedef.
-	(get_trace_state_variable_value_ptr_type): New typedef.
-	(set_trace_state_variable_value_ptr_type): New typedef.
-	(gdb_collect_ptr): New global.
-	(get_raw_reg_ptr): New global.
-	(get_trace_state_variable_value_ptr): New global.
-	(set_trace_state_variable_value_ptr): New global.
-	(get_raw_reg_func_addr): Dereference get_raw_reg_ptr instead of
-	accessing get_raw_reg directly.
-	(get_get_tsv_func_addr): Likewise for
-	get_trace_state_variable_value_ptr.
-	(get_set_tsv_func_addr): Likewise for
-	set_trace_state_variable_value_ptr.
-	* tracepoint.h: Rename gdb_agent_get_raw_reg to get_raw_reg.
-
-2016-03-30  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* tracepoint.c (cmd_qtenable_disable): Remove whitespace.
-
-2016-03-30  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* remote-utils.c (look_up_one_symbol): Remove own_buf, handle 'v'
-	packets.
-	(relocate_instruction): Remove own_buf.
-	* server.c (own_buf): Make global.
-	(handle_v_requests): Make global.
-	* server.h (own_buf): New declaration.
-	(handle_v_requests): New prototype.
-
-2016-03-29  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	PR 18377
-	* linux-s390-low.c (add_insns): New function.
-	(s390_emit_prologue): New function.
-	(s390_emit_epilogue): New function.
-	(s390_emit_add): New function.
-	(s390_emit_sub): New function.
-	(s390_emit_mul): New function.
-	(s390_emit_lsh): New function.
-	(s390_emit_rsh_signed): New function.
-	(s390_emit_rsh_unsigned): New function.
-	(s390_emit_ext): New function.
-	(s390_emit_log_not): New function.
-	(s390_emit_bit_and): New function.
-	(s390_emit_bit_or): New function.
-	(s390_emit_bit_xor): New function.
-	(s390_emit_bit_not): New function.
-	(s390_emit_equal): New function.
-	(s390_emit_less_signed): New function.
-	(s390_emit_less_unsigned): New function.
-	(s390_emit_ref): New function.
-	(s390_emit_if_goto): New function.
-	(s390_emit_goto): New function.
-	(s390_write_goto_address): New function.
-	(s390_emit_litpool): New function.
-	(s390_emit_const): New function.
-	(s390_emit_call): New function.
-	(s390_emit_reg): New function.
-	(s390_emit_pop): New function.
-	(s390_emit_stack_flush): New function.
-	(s390_emit_zero_ext): New function.
-	(s390_emit_swap): New function.
-	(s390_emit_stack_adjust): New function.
-	(s390_emit_set_r2): New function.
-	(s390_emit_int_call_1): New function.
-	(s390_emit_void_call_2): New function.
-	(s390_emit_eq_goto): New function.
-	(s390_emit_ne_goto): New function.
-	(s390_emit_lt_goto): New function.
-	(s390_emit_le_goto): New function.
-	(s390_emit_gt_goto): New function.
-	(s390_emit_ge_goto): New function.
-	(s390x_emit_prologue): New function.
-	(s390x_emit_epilogue): New function.
-	(s390x_emit_add): New function.
-	(s390x_emit_sub): New function.
-	(s390x_emit_mul): New function.
-	(s390x_emit_lsh): New function.
-	(s390x_emit_rsh_signed): New function.
-	(s390x_emit_rsh_unsigned): New function.
-	(s390x_emit_ext): New function.
-	(s390x_emit_log_not): New function.
-	(s390x_emit_bit_and): New function.
-	(s390x_emit_bit_or): New function.
-	(s390x_emit_bit_xor): New function.
-	(s390x_emit_bit_not): New function.
-	(s390x_emit_equal): New function.
-	(s390x_emit_less_signed): New function.
-	(s390x_emit_less_unsigned): New function.
-	(s390x_emit_ref): New function.
-	(s390x_emit_if_goto): New function.
-	(s390x_emit_const): New function.
-	(s390x_emit_call): New function.
-	(s390x_emit_reg): New function.
-	(s390x_emit_pop): New function.
-	(s390x_emit_stack_flush): New function.
-	(s390x_emit_zero_ext): New function.
-	(s390x_emit_swap): New function.
-	(s390x_emit_stack_adjust): New function.
-	(s390x_emit_int_call_1): New function.
-	(s390x_emit_void_call_2): New function.
-	(s390x_emit_eq_goto): New function.
-	(s390x_emit_ne_goto): New function.
-	(s390x_emit_lt_goto): New function.
-	(s390x_emit_le_goto): New function.
-	(s390x_emit_gt_goto): New function.
-	(s390x_emit_ge_goto): New function.
-	(s390_emit_ops): New function.
-	(struct linux_target_ops): Fill in emit_ops hook.
-
-2016-03-29  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	PR 18377
-	* Makefile.in: Add s390 IPA files.
-	* configure.srv: Build IPA for s390.
-	* linux-s390-ipa.c: New file.
-	* linux-s390-low.c: New includes - inttypes.h and linux-s390-tdesc.h.
-	(init_registers_s390_linux32): Move declaration to linux-s390-tdesc.h.
-	(tdesc_s390_linux32): Likewise.
-	(init_registers_s390_linux32v1): Likewise.
-	(tdesc_s390_linux32v1): Likewise.
-	(init_registers_s390_linux32v2): Likewise.
-	(tdesc_s390_linux32v2): Likewise.
-	(init_registers_s390_linux64): Likewise.
-	(tdesc_s390_linux64): Likewise.
-	(init_registers_s390_linux64v1): Likewise.
-	(tdesc_s390_linux64v1): Likewise.
-	(init_registers_s390_linux64v2): Likewise.
-	(tdesc_s390_linux64v2): Likewise.
-	(init_registers_s390_te_linux64): Likewise.
-	(tdesc_s390_te_linux64): Likewise.
-	(init_registers_s390_vx_linux64): Likewise.
-	(tdesc_s390_vx_linux64): Likewise.
-	(init_registers_s390_tevx_linux64): Likewise.
-	(tdesc_s390_tevx_linux64): Likewise.
-	(init_registers_s390x_linux64): Likewise.
-	(tdesc_s390x_linux64): Likewise.
-	(init_registers_s390x_linux64v1): Likewise.
-	(tdesc_s390x_linux64v1): Likewise.
-	(init_registers_s390x_linux64v2): Likewise.
-	(tdesc_s390x_linux64v2): Likewise.
-	(init_registers_s390x_te_linux64): Likewise.
-	(tdesc_s390x_te_linux64): Likewise.
-	(init_registers_s390x_vx_linux64): Likewise.
-	(tdesc_s390x_vx_linux64): Likewise.
-	(init_registers_s390x_tevx_linux64): Likewise.
-	(tdesc_s390x_tevx_linux64): Likewise.
-	(have_hwcap_s390_vx): New static variable.
-	(s390_arch_setup): Fill have_hwcap_s390_vx.
-	(s390_get_thread_area): New function.
-	(s390_ft_entry_gpr_esa): New const.
-	(s390_ft_entry_gpr_zarch): New const.
-	(s390_ft_entry_misc): New const.
-	(s390_ft_entry_fr): New const.
-	(s390_ft_entry_vr): New const.
-	(s390_ft_main_31): New const.
-	(s390_ft_main_64): New const.
-	(s390_ft_exit_fr): New const.
-	(s390_ft_exit_vr): New const.
-	(s390_ft_exit_misc): New const.
-	(s390_ft_exit_gpr_esa): New const.
-	(s390_ft_exit_gpr_zarch): New const.
-	(append_insns): New function.
-	(s390_relocate_instruction): New function.
-	(s390_install_fast_tracepoint_jump_pad): New function.
-	(s390_get_min_fast_tracepoint_insn_len): New function.
-	(s390_get_ipa_tdesc_idx): New function.
-	(struct linux_target_ops): Wire in the above functions.
-	(initialize_low_arch) [!__s390x__]: Don't initialize s390x tdescs.
-	* linux-s390-tdesc.h: New file.
-
-2016-03-29  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-s390-low.c (s390_supports_tracepoints): New function.
-	(struct linux_target_ops): Fill supports_tracepoints hook.
-
-2016-03-18  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (lwp_signal_can_be_delivered): New function.
-	(linux_resume_one_lwp_throw): Use lwp_signal_can_be_delivered.
-
-2016-03-18  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_resume_one_lwp_throw): Set 'signal' to
-	0 if signal is enqueued.  Remove 'signal' from one debugging
-	message.  Move one debugging message to some lines below.
-	Remove code setting 'signal' to 0.
-
-2016-03-18  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_low_filter_event): Remove redundant
-	WIFSTOPPED check together with linux_wstatus_maybe_breakpoint.
-
-2016-03-09  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-ppc-low.c (ppc_supports_tracepoints): New function.
-	(struct linux_target_ops): Wire in the above.
-
-2016-03-03  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c: Update comments to start_step_over.
-
-2016-03-03  Yao Qi  <yao.qi@linaro.org>
-
-	PR server/19736
-	* linux-low.c (handle_extended_wait): Set child suspended
-	if event_lwp->bp_reinsert isn't zero.
-
-2016-03-02  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_resume_one_lwp_throw): Replace code with
-	enqueue_pending_signal.
-
-2016-03-02  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* tracepoint.c (cmd_qtstart): Only set ipa_tdesc_idx if agent
-	is actually loaded.
-
-2016-02-25  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-s390-low.c (s390_num_regs_3264): Define on 31-bit too.
-	(s390_regmap_3264) [!__s390x__]: New global.
-	(s390_collect_ptrace_register): Skip map entries containing -1.
-	(s390_supply_ptrace_register): Ditto.
-	(s390_fill_gprs_high): New function.
-	(s390_store_gprs_high): New function.
-	(s390_regsets): Add NT_S390_HIGH_GPRS.
-	(s390_get_hwcap): Enable on 31-bit.
-	(have_hwcap_s390_high_gprs): Enable on 31-bit.
-	(s390_arch_setup): Enable detection of high GPRs, TDB, VX on 31-bit.
-	Detect NT_S390_HIGH_GPRS.
-	(s390_usrregs_info_3264): Enable on 31-bit.
-	(s390_regs_info): Enable regs_info_3264 on 31-bit.
-	(initialize_low_arch): Initialize s390_regsets_info_3264 on 31-bit.
-
-2016-02-25  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	PR gdb/13808
-	* Makefile.in: Add i386-*-linux-ipa.o and amd64-*-linux-ipa.o.
-	* configure.srv: Ditto.
-	* linux-aarch64-ipa.c (get_ipa_tdesc): New function.
-	(initialize_low_tracepoint): Remove ipa_tdesc assignment.
-	* linux-amd64-ipa.c: Add "linux-x86-tdesc.h" include.
-	(init_registers_amd64_linux): Remove prototype.
-	(tdesc_amd64_linux): Remove declaration.
-	(get_ipa_tdesc): New function.
-	(initialize_low_tracepoint): Remove ipa_tdesc assignment,
-	initialize remaining tdescs.
-	* linux-i386-ipa.c: Add "linux-x86-tdesc.h" include.
-	(init_registers_i386_linux): Remove prototype.
-	(tdesc_i386_linux): Remove declaration.
-	(get_ipa_tdesc): New function.
-	(initialize_low_tracepoint): Remove ipa_tdesc assignment,
-	initialize remaining tdescs.
-	* linux-low.c (linux_get_ipa_tdesc_idx): New function.
-	(linux_target_ops): wire in linux_get_ipa_tdesc_idx.
-	* linux-low.h (struct linux_target_ops): Add get_ipa_tdesc_idx.
-	* linux-x86-low.c: Move tdesc declarations to linux-x86-tdesc.h.
-	(x86_get_ipa_tdesc_idx): New function.
-	(the_low_target): Wire in x86_get_ipa_tdesc_idx.
-	* linux-x86-tdesc.h: New file.
-	* target.h (struct target_ops): Add get_ipa_tdesc_idx.
-	(target_get_ipa_tdesc_idx): New macro.
-	* tracepoint.c (ipa_tdesc_idx): New macro.
-	(struct ipa_sym_addresses): Add addr_ipa_tdesc_idx.
-	(symbol_list): Add ipa_tdesc_idx.
-	(cmd_qtstart): Write ipa_tdesc_idx in the target.
-	(ipa_tdesc): Remove.
-	(ipa_tdesc_idx): New variable.
-	(get_context_regcache): Use get_ipa_tdesc.
-	(gdb_collect): Ditto.
-	(gdb_probe): Ditto.
-	* tracepoint.h (get_ipa_tdesc): New prototype.
-	(ipa_tdesc): Remove.
-
-2016-02-24  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (check_stopped_by_breakpoint): Rename to ...
-	(save_stop_reason): ... this.  Use GDB_ARCH_IS_TRAP_HWBKPT and
-	handle ambiguous GDB_ARCH_IS_TRAP_BRKPT / GDB_ARCH_IS_TRAP_HWBKPT.
-	Factor out common code between the USE_SIGTRAP_SIGINFO and
-	!USE_SIGTRAP_SIGINFO blocks.
-	(linux_low_filter_event): Call save_stop_reason instead of
-	check_stopped_by_breakpoint and check_stopped_by_watchpoint.
-	Update comments.
-	(linux_wait_1): Update comments.
-
-2016-02-24  Wei-cheng Wang  <cole945@gmail.com>
-
-	* linux-ppc-low.c (ppc_supports_z_point_type): New function:
-	(ppc_insert_point, ppc_remove_point): Insert/remove z-packet breakpoints.
-	(ppc64_emit_ops_vector): Add target ops - ppc_supports_z_point_type,
-	ppc_insert_point, ppc_remove_point.
-
-2016-02-17  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* linux-s390-low.c (s390_supports_z_point_type): New function.
-	(struct linux_target_ops): Wire s390_supports_z_point_type in.
-
-2016-02-16  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (get_next_pcs_syscall_next_pc): Remove argument
-	PC.  Get pc from regcache_read_pc.
-
-2016-02-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_get_pc): Call linux_get_pc_64bit
-	or linux_get_pc_32bit.
-	(aarch64_set_pc): Call linux_set_pc_64bit or linux_set_pc_32bit.
-
-2016-02-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (get_next_pcs_ops): Initialize it with
-	arm_linux_get_next_pcs_fixup.
-
-2016-02-12  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* tracepoint.c (x_tracepoint_action_download): Change
-	write_inferior_data_ptr to write_inferior_data_pointer.
-	(cmd_qtstart): Likewise.
-	(write_inferior_data_ptr): Remove.
-	(download_agent_expr): Change write_inferior_data_ptr to
-	write_inferior_data_pointer.
-	(download_tracepoint_1): Likewise.
-	(download_tracepoint): Likewise.
-	(download_trace_state_variables): Likewise.
-
-2016-02-11  Wei-cheng Wang  <cole945@gmail.com>
-	    Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* tracepoint.c (struct tracepoint_action_ops): Remove.
-	(struct tracepoint_action): Remove ops.
-	(m_tracepoint_action_download, r_tracepoint_action_download)
-	(x_tracepoint_action_download, l_tracepoint_action_download): Adjust
-	size and offset accordingly.
-	(m_tracepoint_action_ops, r_tracepoint_action_ops)
-	(x_tracepoint_action_ops, l_tracepoint_action_ops): Remove.
-	(tracepoint_action_send, tracepoint_action_download): New functions.
-	Helpers for trace action handlers.
-	(add_tracepoint_action): Remove setup actions ops.
-	(download_tracepoint_1, tracepoint_send_agent): Call helper functions.
-
-2016-02-10  Yao Qi  <yao.qi@linaro.org>
-
-	* regcache.c (regcache_raw_read_unsigned): Clear *VAL.
-
-2016-02-09  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* configure.ac: Use AC_CONFIG_FILES instead of passing arguments
-	to AC_OUTPUT.
-	* configure: Regenerate.
-
-2016-02-09  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-aarch64-low.c (aarch64_linux_siginfo_fixup): Change
-	void * to gdb_byte *.
-	* linux-low.c (siginfo_fixup): Likewise.
-	(linux_xfer_siginfo): Likewise.
-	* linux-low.h (struct linux_target_ops) <siginfo_fixup>:
-	Likewise.
-	* linux-x86-low.c (x86_siginfo_fixup): Likewise.
-
-2016-02-02  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* configure.srv (x86_64-*-linux*): Add amd64-linux-siginfo.o
-	to srv_tgtobj.
-	(i[34567]86-*-linux*): Add amd64-linux-siginfo.o
-	to srv_tgtobj.
-	* linux-x86-low.c [__x86_64__]: Include
-	"nat/amd64-linux-siginfo.h".
-	(compat_siginfo_from_siginfo, siginfo_from_compat_siginfo)
-	(compat_x32_siginfo_from_siginfo, siginfo_from_compat_x32_siginfo)
-	(compat_timeval, compat_sigval, compat_x32_clock, cpt_si_pid)
-	(cpt_si_uid, cpt_si_timerid, cpt_si_overrun, cpt_si_status)
-	(cpt_si_utime, cpt_si_stime, cpt_si_ptr, cpt_si_addr, cpt_si_band)
-	(cpt_si_fd, si_timerid, si_overrun): Move from
-	nat/amd64-linux-siginfo.c.
-	* Makefile.in (amd64-linux-siginfo.o:): New rule.
-
-2016-01-28  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (skip_to_semicolon):  Remove.
-	(process_point_options): Use strchrnul instead of
-	skip_to_semicolon.
-
-2016-01-26  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (arm_gdbserver_get_next_pcs): Remove argument pc.
-	* linux-low.c (install_software_single_step_breakpoints): Don't
-	call regcache_read_pc.
-	* linux-low.h (struct linux_target_ops) <get_next_pcs>: Remove
-	argument pc.
-
-2016-01-26  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (install_software_single_step_breakpoints): Call
-	regcache_read_pc instead of get_pc.
-
-2016-01-26  Yao Qi  <yao.qi@linaro.org>
-
-	* remote-utils.c (remote_close) [!USE_WIN32API]: Ignore SIGIO.
-	(unblock_async_io): Rename to ...
-	(block_unblock_async_io): ... it.  New function.
-	(enable_async_io): Don't install SIGIO handler.  Unblock it
-	instead.
-	(disable_async_io): Don't ignore SIGIO.  Block it instead.
-	(initialize_async_io): Install SIGIO handler.  Don't call
-	unblock_async_io.
-
-2016-01-26  Yao Qi  <yao.qi@linaro.org>
-
-	* remote-utils.c (getpkt): If the buffer isn't empty, and the
-	first character is '\003', call *the_target->request_interrupt.
-
-2016-01-25  Yao Qi  <yao.qi@linaro.org>
-
-	* remote-utils.c (new_thread_notify): Remove.
-	(dead_thread_notify): Likewise.
-	* remote-utils.h (new_thread_notify): Remove declaration.
-	(dead_thread_notify): Likewise.
-
-2016-01-23  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* gdb.trace/pending.exp: Fix expected message on continue.
-
-2016-01-22  Marcin KoÅ›cielnicki  <koriakin@0x04.net>
-
-	* tracepoint.c (write_inferior_data_ptr): Cast to uintptr_t, so that
-	it works properly on big-endian machines where sizeof (CORE_ADDR)
-	!= sizeof (void *).
-
-2016-01-21  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (COMPILER_CFLAGS, CXXFLAGS): New.
-	(INTERNAL_CFLAGS_BASE): Use COMPILER_CFLAGS instead of CFLAGS.
-	* configure: Regenerate.
-
-2016-01-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (arm_sigreturn_next_pc): Add parameter
-	is_thumb and set it according to CPSR saved on the stack.
-	(get_next_pcs_syscall_next_pc): Pass is_thumb to
-	arm_sigreturn_next_pc.
-
-2016-01-18  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_set_pc_64bit): New function.
-	(linux_get_pc_64bit): New function.
-	* linux-low.h (linux_set_pc_64bit, linux_get_pc_64bit):
-	Declare.
-	* linux-sparc-low.c (debug_threads): Remove declaration.
-	(sparc_get_pc): Remove.
-	(the_low_target): Use linux_get_pc_64bit instead of
-	sparc_get_pc.
-	* linux-tile-low.c (tile_get_pc, tile_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_64bit and
-	linux_set_pc_64bit.
-
-2016-01-18  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (debug_threads): Remove declaration.
-	(arm_get_pc, arm_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-bfin-low.c (bfin_get_pc, bfin_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-cris-low.c (debug_threads): Remove declaration.
-	(cris_get_pc, cris_set_pc,): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-crisv32-low.c (debug_threads): Remove declaration.
-	(cris_get_pc, cris_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-low.c: Include inttypes.h.
-	(linux_get_pc_32bit, linux_set_pc_32bit): New functions.
-	* linux-low.h (linux_get_pc_32bit, linux_set_pc_32bit): Declare.
-	* linux-m32r-low.c (m32r_get_pc, m32r_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-m68k-low.c (m68k_get_pc, m68k_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-nios2-low.c (nios2_get_pc, nios2_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-sh-low.c (sh_get_pc, sh_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-	* linux-xtensa-low.c (xtensa_get_pc, xtensa_set_pc): Remove.
-	(the_low_target): Use linux_get_pc_32bit and
-	linux_set_pc_32bit.
-
-2016-01-18  Gary Benson  <gbenson@redhat.com>
-
-	* configure.ac (AC_FUNC_FORK): New check.
-	* config.in: Regenerate.
-	* configure: Likewise.
-
-2016-01-14  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.c (thumb2_breakpoint): Make it static.
-	* linux-aarch32-low.h (thumb2_breakpoint): Remove declaration.
-	* linux-arm-low.c (arm_gdbserver_get_next_pcs): Pass 1 to
-	arm_get_next_pcs_ctor.
-
-2016-01-12  Josh Stone  <jistone@redhat.com>
-	    Philippe Waroquiers  <philippe.waroquiers@skynet.be>
-
-	* inferiors.h: Include "gdb_vecs.h".
-	(struct process_info): Add syscalls_to_catch.
-	* inferiors.c (remove_process): Free syscalls_to_catch.
-	* remote-utils.c (prepare_resume_reply): Report syscall_entry and
-	syscall_return stops.
-	* server.h (UNKNOWN_SYSCALL, ANY_SYSCALL): Define.
-	* server.c (handle_general_set): Handle QCatchSyscalls.
-	(handle_query): Report support for QCatchSyscalls.
-	* target.h (struct target_ops): Add supports_catch_syscall.
-	(target_supports_catch_syscall): New macro.
-	* linux-low.h (struct linux_target_ops): Add get_syscall_trapinfo.
-	(struct lwp_info): Add syscall_state.
-	* linux-low.c (handle_extended_wait): Mark syscall_state as an entry.
-	Maintain syscall_state and syscalls_to_catch across exec.
-	(get_syscall_trapinfo): New function, proxy to the_low_target.
-	(linux_low_ptrace_options): Enable PTRACE_O_TRACESYSGOOD.
-	(linux_low_filter_event): Toggle syscall_state entry/return for
-	syscall traps, and set it ignored for all others.
-	(gdb_catching_syscalls_p): New function.
-	(gdb_catch_this_syscall_p): New function.
-	(linux_wait_1): Handle SYSCALL_SIGTRAP.
-	(linux_resume_one_lwp_throw): Add PTRACE_SYSCALL possibility.
-	(linux_supports_catch_syscall): New function.
-	(linux_target_ops): Install it.
-	* linux-x86-low.c (x86_get_syscall_trapinfo): New function.
-	(the_low_target): Install it.
-
-2016-01-12  Mike Frysinger  <vapier@gentoo.org>
-
-	* acinclude.m4: Include new ../warning.m4 file.
-	* configure: Regenerated.
-	* configure.ac: Replace all warning logic with AM_GDB_WARNINGS.
-
-2016-01-12  Mike Frysinger  <vapier@gentoo.org>
-
-	* ax.c (is_goto_target): Mark static.
-	* linux-low.c (register_addr): Likewise.
-	(linux_fetch_registers, linux_store_registers): Likewise.
-	* mem-break.c (any_persistent_commands): Fix old prototype.
-	(add_commands_to_breakpoint): Mark static.
-	* regcache.c (find_register_by_name): Delete unused func.
-	* remote-utils.c (hex_or_minus_one): Mark static.
-	* server.c (monitor_show_help): Mark static.
-	(handle_query, handle_v_cont, handle_v_attach, handle_v_kill,
-	handle_v_requests): Likewise.
-
-2016-01-12  Pedro Alves  <palves@redhat.com>
-
-	Remove use of the registered trademark symbol throughout.
-
-2016-01-08  Yao Qi  <yao.qi@linaro.org>
-
-	* remote-utils.c (getpkt): If c is '\003', call target hook
-	request_interrupt.
-
-2016-01-06  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.h (arm_abi_breakpoint): Move to
-	linux-aarch32-low.c.
-	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
-	(arm_breakpoint_len, thumb_breakpoint_len): Likewise.
-	(thumb2_breakpoint, thumb2_breakpoint_len): Likewise.
-	(thumb2_breakpoint): Declare.
-	* linux-aarch32-low.c (arm_abi_breakpoint): Moved from
-	linux-aarch32-low.h.
-	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
-	(arm_breakpoint_len, thumb_breakpoint_len): Likewise.
-	(thumb2_breakpoint, thumb2_breakpoint_len): Likewise.
-
-2016-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c (gdbreplay_version): Change copyright year in
-	version message.
-	* server.c (gdbserver_version): Likewise.
-
-2015-12-28  Patrick Palka  <patrick@parcs.ath.cx>
-
-	* server.c (crc32_table): Delete.
-	(crc32): Use libiberty's xcrc32 function.
-
-2015-12-22  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_delete_thread_callback): New function.
-	(lynx_mourn): Properly delete our process and all of its
-	threads.  Remove call to clear_inferiors.
-
-2015-12-22  Joel Brobecker  <brobecker@adacore.com>
-
-	* target.c (thread_search_callback): Add check that
-	the thread_stopped target callback is not NULL before
-	calling it.
-
-2015-12-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.h [__aarch64__]: Use arm_abi_breakpoint
-	arm breakpoint.
-
-2015-12-18  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* server.c (handle_query): Call target_supports_software_single_step.
-
-2015-12-18  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (single_step): New function.
-	(linux_resume_one_lwp_throw): Call single_step.
-	(start_step_over): Likewise.
-
-2015-12-18  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* Makefile.in (SFILES): Append arch/arm-linux.c,
-	arch/arm-get-next-pcs.c.
-	(arm-linux.o): New rule.
-	(arm-get-next-pcs.o): New rule.
-	* configure.srv (arm*-*-linux*): Add arm-get-next-pcs.o,
-	arm-linux.o.
-	* linux-aarch32-low.c (arm_abi_breakpoint): Remove macro.  Moved
-	to linux-aarch32-low.c.
-	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
-	(arm_breakpoint_len, thumb_breakpoint): Likewise.
-	(thumb_breakpoint_len, thumb2_breakpoint): Likewise.
-	(thumb2_breakpoint_len): Likewise.
-	(arm_is_thumb_mode): Make non-static.
-	* linux-aarch32-low.h (arm_abi_breakpoint): New macro.  Moved
-	from linux-aarch32-low.c.
-	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
-	(arm_breakpoint_len, thumb_breakpoint): Likewise.
-	(thumb_breakpoint_len, thumb2_breakpoint): Likewise.
-	(thumb2_breakpoint_len): Likewise.
-	(arm_is_thumb_mode): New declaration.
-	* linux-arm-low.c: Include arch/arm-linux.h
-	aarch/arm-get-next-pcs.h, sys/syscall.h.
-	(get_next_pcs_ops): New struct.
-	(get_next_pcs_addr_bits_remove): New function.
-	(get_next_pcs_is_thumb): New function.
-	(get_next_pcs_read_memory_unsigned_integer): Likewise.
-	(arm_sigreturn_next_pc): Likewise.
-	(get_next_pcs_syscall_next_pc): Likewise.
-	(arm_gdbserver_get_next_pcs): Likewise.
-	(struct linux_target_ops) <arm_gdbserver_get_next_pcs>:
-	Initialize.
-	* linux-low.h: Move CORE_ADDR vector definition to gdb_vecs.h.
-	* server.h: Include gdb_vecs.h.
-
-2015-12-18  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* Makefile.in (SFILES): Append common/common-regcache.c.
-	(OBS): Append common-regcache.o.
-	(common-regcache.o): New rule.
-	* regcache.c (init_register_cache): Initialize cache to
-	REG_UNAVAILABLE.
-	(regcache_raw_read_unsigned): New function.
-	* regcache.h (REG_UNAVAILABLE, REG_VALID): Replaced by shared
-	register_status enum.
-
-2015-12-18  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-aarch64-low.c (the_low_targets): Rename
-	breakpoint_reinsert_addr to get_next_pcs.
-	* linux-arm-low.c (the_low_targets): Likewise.
-	* linux-bfin-low.c (the_low_targets): Likewise.
-	* linux-cris-low.c (the_low_targets): Likewise.
-	* linux-crisv32-low.c (the_low_targets): Likewise.
-	* linux-low.c (can_software_single_step): Likewise.
-	(install_software_single_step_breakpoints): New function.
-	(start_step_over): Use install_software_single_step_breakpoints.
-	* linux-low.h: New CORE_ADDR vector.
-	(struct linux_target_ops) Rename breakpoint_reinsert_addr to
-	get_next_pcs.
-	* linux-mips-low.c (the_low_targets): Likewise.
-	* linux-nios2-low.c (the_low_targets): Likewise.
-	* linux-sparc-low.c (the_low_targets): Likewise.
-
-2015-12-17  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_kill_one_lwp): Remove references to
-	LinuxThreads.
-	(kill_lwp): Remove HAVE_TKILL_SYSCALL check.  No longer fall back
-	to 'kill'.
-	(linux_init_signals): Delete.
-	(initialize_low): Adjust.
-	* thread-db.c (thread_db_init): Remove LinuxThreads reference.
-
-2015-12-16  Pedro Alves  <palves@redhat.com>
-
-	* configure.ac (compiler warning flags): When testing a
-	-Wno-foo option, check whether -Wfoo works instead.
-	* configure: Regenerate.
-
-2015-12-11  Don Breazeal  <donb@codesourcery.com>
-
-	* server.c (process_serial_event): Don't exit from gdbserver
-	in remote mode if there are still active inferiors.
-
-2015-12-11  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_breakpoint_at): Call
-	arm_breakpoint_at if the process is 32-bit.
-
-2015-12-11  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch32-low.c [__aarch64__]: Use arm_abi_breakpoint
-	arm breakpoint.
-
-2015-12-07  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv: Append arm.o to srv_tgtobj for
-	aarch64*-*-linux* target.
-	* linux-aarch32-low.c (arm_abi_breakpoint): New macro.  Moved
-	from linux-arm-low.c.
-	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
-	(arm_breakpoint_len, thumb_breakpoint): Likewise.
-	(thumb_breakpoint_len, thumb2_breakpoint): Likewise.
-	(thumb2_breakpoint_len): Likewise.
-	(arm_is_thumb_mode, arm_breakpoint_at): Likewise.
-	(arm_breakpoint_kinds): Likewise.
-	(arm_breakpoint_kind_from_pc): Likewise.
-	(arm_sw_breakpoint_from_kind): Likewise.
-	(arm_breakpoint_kind_from_current_state): Likewise.
-	* linux-aarch32-low.h (arm_breakpoint_kind_from_pc): Declare.
-	(arm_sw_breakpoint_from_kind): Declare.
-	(arm_breakpoint_kind_from_current_state): Declare.
-	(arm_breakpoint_at): Declare.
-	* linux-aarch64-low.c (aarch64_sw_breakpoint_from_kind): Call
-	arm_sw_breakpoint_from_kind if process is 32-bit.
-	(aarch64_breakpoint_kind_from_pc): New function.
-	(aarch64_breakpoint_kind_from_current_state): New function.
-	(the_low_target): Initialize fields breakpoint_kind_from_pc
-	and breakpoint_kind_from_current_state.
-	* linux-arm-low.c (arm_breakpoint_kinds): Move to
-	linux-aarch32-low.c.
-	(arm_abi_breakpoint, arm_eabi_breakpoint): Likewise.
-	(arm_breakpoint, arm_breakpoint_len): Likewise.
-	(thumb_breakpoint, thumb_breakpoint_len): Likewise.
-	(thumb2_breakpoint, thumb2_breakpoint_len): Likewise.
-	(arm_is_thumb_mode): Likewise.
-	(arm_breakpoint_at): Likewise.
-	(arm_breakpoint_kind_from_pc): Likewise.
-	(arm_sw_breakpoint_from_kind): Likewise.
-	(arm_breakpoint_kind_from_current_state): Likewise.
-
-	Revert:
-	2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_supports_z_point_type): Return
-	0 for Z_PACKET_SW_BP if it may be used in multi-arch debugging.
-	* server.c (extended_protocol): Remove "static".
-	* server.h (extended_protocol): Declare it.
-
-2015-12-04  Josh Stone  <jistone@redhat.com>
-
-	* target.h (struct target_ops) <arch_setup>: Rename to ...
-	(struct target_ops) <post_create_inferior>: ... this.
-	(target_arch_setup): Rename to ...
-	(target_post_create_inferior): ... this, calling post_create_inferior.
-	* server.c (start_inferior): Update target_arch_setup calls to
-	target_post_create_inferior.
-	* linux-low.c (linux_low_ptrace_options): Forward declare.
-	(linux_arch_setup): Update its comment for general use.
-	(linux_post_create_inferior): New, run arch_setup and setup ptrace.
-	(struct linux_target_ops): Use linux_post_create_inferior.
-	* lynx-low.c (struct lynx_target_ops): Update arch_setup stub comment
-	to post_create_inferior.
-	* nto-low.c (struct nto_target_ops): Likewise.
-	* spu-low.c (struct spu_target_ops): Likewise.
-	* win32-low.c (struct win32_target_ops): Likewise.
-
-2015-12-03  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-arm-low.c: Remove duplicate arch/arm.h include.
-
-2015-11-30  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-arm-low.c (arm_reinsert_addr): Remove function.
-	(struct linux_target_ops <breakpoint_reinsert_addr>: Set to NULL.
-	* linux-cris-low.c (cris_reinsert_addr> Remove function.
-	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
-	* linux-crisv32-low.c (cris_reinsert_addr): Remove function.
-	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
-	* linux-mips-low.c (mips_reinsert_addr): Remove function.
-	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
-	* linux-nios2-low.c (nios2_reinsert_addr): Remove function.
-	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
-	* linux-sparc-low.c (sparc_reinsert_addr): Remove function.
-	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
-
-2015-11-30  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (linux_look_up_symbols): Don't call
-	linux_supports_traceclone.
-	* linux-low.h (thread_db_init): Remove use_events argument.
-	* thread-db.c (thread_db_use_event): Remove global variable.
-	(struct thread_db) <td_thr_event_enable_p>: Remove field.
-	(struct thread_db) <td_create_bp>: Remove field.
-	(thread_db_create_event): Remove function.
-	(thread_db_enable_reporting): Likewise.
-	(find_one_thread): Don't check for thread_db_use_events.
-	(attach_thread): Likewise.
-	(thread_db_load_search): Remove td_thr_event_enable_p initialization.
-	(try_thread_db_load_1): Don't check for thread_db_use_events.
-	(thread_db_init): Remove use_events argument and thread events
-	handling.
-	(remove_thread_event_breakpoints): Remove function.
-	(thread_db_detach): Remove call to remove_thred_event_breakpoints.
-
-2015-11-30  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-aarch64-low.c (aarch64_supports_hardware_single_step):
-	New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-arm-low.c (arm_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-bfin-low.c (bfin_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <bfin_supports_hardware_single_step>:
-	Initialize.
-	* linux-crisv32-low.c (cris_supports_hardware_single_step):
-	New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-low.c (can_hardware_single_step): Use
-	supports_hardware_single_step.
-	(can_software_single_step): New function.
-	(start_step_over): Call can_software_single_step.
-	(linux_supports_hardware_single_step): New function.
-	(struct target_ops) <supports_software_single_step>: Initialize.
-	* linux-low.h (struct linux_target_ops)
-	<supports_hardware_single_step>: Initialize.
-	* linux-m32r-low.c (m32r_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-ppc-low.c (ppc_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <supports_hardware_single_step> Initialize.
-	* linux-s390-low.c (s390_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-sh-low.c (sh_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-tic6x-low.c (tic6x_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <tic6x_supports_hardware_single_step>:
-	Initialize.
-	* linux-tile-low.c (tile_supports_hardware_single_step): New function.
-	(struct linux_target_ops) <tile_supports_hardware_single_step>:
-	Initialize.
-	* linux-x86-low.c (x86_supports_hardware_single_step) New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* linux-xtensa-low.c (xtensa_supports_hardware_single_step):
-	New function.
-	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
-	* target.h (struct target_ops): <supports_software_single_step>:
-	New field.
-	(target_supports_software_single_step): New macro.
-
-2015-11-30  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (linux_wait_1): Fix pc advance condition.
-	* mem-break.c (reinsert_breakpoint_inserted_here): New function.
-	* mem-break.h (reinsert_breakpoint_inserted_here): New declaration.
-
-2015-11-30  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-arm-low.c (arm_is_thumb_mode): New function.
-	(arm_breakpoint_at): Use arm_is_thumb_mode.
-	(arm_breakpoint_kind_from_current_state): New function.
-	(struct linux_target_ops) <breakpoint_kind_from_current_state>:
-	Initialize.
-	* linux-low.c (linux_wait_1): Call breakpoint_kind_from_current_state.
-	(linux_breakpoint_kind_from_current_state): New function.
-	(struct target_ops <breakpoint_kind_from_current_state>: Initialize.
-	* linux-low.h (struct linux_target_ops)
-	<breakpoint_kind_from_current_state>: New field.
-	* target.h (struct target_ops): Likewise.
-	(target_breakpoint_kind_from_current_state): New macro.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_resume): Wake up the event loop before
-	returning.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* mem-break.c (check_gdb_bp_preconditions): Remove current_thread
-	check.
-	(set_gdb_breakpoint): If prepare_to_access_memory fails, set *ERR
-	to -1.
-	* target.c (struct thread_search): New structure.
-	(thread_search_callback): New function.
-	(prev_general_thread): New global.
-	(prepare_to_access_memory, done_accessing_memory): New functions.
-	* target.h (prepare_to_access_memory, done_accessing_memory):
-	Replace macros with function declarations.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	PR 14618
-	* linux-low.c (linux_wait_1): If the last resumed thread is gone,
-	report TARGET_WAITKIND_NO_RESUMED.
-	* remote-utils.c (prepare_resume_reply): Handle
-	TARGET_WAITKIND_NO_RESUMED.
-	* server.c (report_no_resumed): New global.
-	(handle_query) <qSupported>: Handle "no-resumed+".  Report
-	"no-resumed+" support.
-	(resume): When the target reports TARGET_WAITKIND_NO_RESUMED, only
-	return error if the client doesn't support no-resumed events.
-	(push_stop_notification): New function.
-	(handle_target_event): Use it.  Report TARGET_WAITKIND_NO_RESUMED
-	events if the client supports them.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (thread_still_has_status_pending_p): Don't check
-	vCont;t here.
-	(lwp_resumed): New function.
-	(status_pending_p_callback): Return early if the LWP is not
-	supposed to be resumed.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Assert that the LWP's
-	waitstatus is TARGET_WAITKIND_IGNORE.  If GDB wants to hear about
-	thread create events, leave the new child's status pending.
-	(linux_low_filter_event): If GDB wants to hear about thread exit
-	events, leave the LWP marked dead and don't delete it.
-	(linux_wait_for_event_filtered): Don't check for thread exit.
-	(filter_exit_event): New function.
-	(linux_wait_1): Use it, when returning an exit event.
-	(linux_resume_one_lwp_throw): Assert that the LWP's
-	waitstatus is TARGET_WAITKIND_IGNORE.
-	* remote-utils.c (prepare_resume_reply): Handle
-	TARGET_WAITKIND_THREAD_CREATED and TARGET_WAITKIND_THREAD_EXITED.
-	* server.c (report_thread_events): New global.
-	(handle_general_set): Handle QThreadEvents.
-	(handle_query) <qSupported>: Handle and report QThreadEvents+;
-	(handle_target_event): Handle TARGET_WAITKIND_THREAD_CREATED and
-	TARGET_WAITKIND_THREAD_EXITED.
-	* server.h (report_thread_events): Declare.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (resume_stopped_resumed_lwps): Don't check whether
-	the thread's last_resume_kind was resume_stop.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_attach): In non-stop mode, wait for one stop
-	before returning.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* server.c (handle_v_requests): Handle vCtrlC.
-
-2015-11-30  Pedro Alves  <palves@redhat.com>
-
-	* gdbthread.h (find_any_thread_of_pid): Declare.
-	* inferiors.c (thread_of_pid, find_any_thread_of_pid): New
-	functions.
-	* server.c (handle_query): If current_thread is NULL, look for
-	another thread of the selected process.
-
-2015-11-26  Daniel Colascione  <dancol@dancol.org>
-	    Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-low.c (linux_target_ops): Use linux_proc_tid_get_name.
-	* server.c (handle_qxfer_threads_worker): Refactor to include thread
-	name in reply.
-	* target.h (struct target_ops) <thread_name>: New field.
-	(target_thread_name): New macro.
-
-2015-11-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* regcache.h (regcache_invalidate_pid): Add declaration.
-	* regcache.c (regcache_invalidate_pid): New function, extracted
-	from regcache_invalidate.
-	(regcache_invalidate): Reimplement using regcache_invalidate_pid.
-	Add trivial documentation comment.
-	* lynx-low.c: Use regcache_invalidate_pid instead of
-	regcache_invalidate.
-
-2015-11-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: Do not call AC_CHECK_TYPES for Elf32_auxv_t
-	and Elf64_auxv_t if the target is Android.
-
-2015-11-22  Doug Evans  <xdje42@gmail.com>
-
-	* target.h: #include <sys/types.h>.
-
-2015-11-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_process_qsupported): Change prototype.
-	Adjust.
-	* linux-low.h (struct linux_target_ops) <process_qsupported>:
-	Change prototype.
-	* linux-x86-low.c (x86_linux_process_qsupported): Change prototype
-	and adjust to loop over all features.
-	* server.c (handle_query) <qSupported>: Adjust to call
-	target_process_qsupported once, passing it a vector of unprocessed
-	features.
-	* target.h (struct target_ops) <process_qsupported>: Change
-	prototype.
-	(target_process_qsupported): Adjust.
-
-2015-11-19  Pedro Alves  <palves@redhat.com>
-
-	* configure.ac (ERROR_ON_WARNING): Don't check whether in C++
-	mode.
-	* configure: Regenerate.
-
-2015-11-19  Pedro Alves  <palves@redhat.com>
-
-	* configure: Regenerate.
-
-2015-11-19  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (emit_data_processing_reg): Change opcode
-	type to uint32_t.
-
-2015-11-19  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (enum aarch64_operand_type): New.
-	(struct aarch64_operand): Move enum out.
-
-2015-11-19  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_fill_fpregset): Cast buf to
-	struct user_fpsimd_state *.
-	(aarch64_store_fpregset): Likewise.
-
-2015-11-19  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_fill_gregset): Cast buf to
-	struct user_pt_regs *.
-	(aarch64_store_gregset): Likewise.
-
-2015-11-18  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (all_object_files): Add $IPA_OBJS.
-
-2015-11-17  Pedro Alves  <palves@redhat.com>
-
-	* win32-low.c (win32_resume): Use gdb_signal_from_host,
-	GDB_SIGNAL_0 and gdb_signal_to_string.
-
-2015-11-17  Pedro Alves  <palves@redhat.com>
-
-	* win32-low.c (handle_output_debug_string): Remove parameter.
-	(win32_kill): Remove our_status local and adjust call to
-	handle_output_debug_string.
-	(get_child_debug_event): Adjust call to
-	handle_output_debug_string.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-mips-low.c (mips_fill_gregset): Add cast.
-	(mips_store_gregset): Likewise.
-	(mips_fill_fpregset): Likewise.
-	(mips_store_fpregset): Likewise.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-mips-low.c (mips_add_watchpoint): Rename private to
-	priv.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-mips-low.c (mips_linux_new_thread): Change type of
-	watch_type to enum target_hw_bp_type.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-		* linux-arm-low.c (raw_bkpt_type_to_arm_hwbp_type):
-		Change return type to arm_hwbp_type.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-aarch32-low.c (arm_fill_gregset): Add cast.
-	(arm_store_gregset): Likewise.
-	* linux-arm-low.c (arm_get_hwcap): Likewise.
-	(arm_read_description): Likewise.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-aarch32-low.c (aarch32_regsets): Use NULL_REGSET.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-ppc-low.c (ppc_get_hwcap): Add cast.
-	(ppc_fill_vsxregset): Likewise.
-	(ppc_store_vsxregset): Likewise.
-	(ppc_fill_vrregset): Likewise.
-	(ppc_store_vrregset): Likewise.
-	(ppc_fill_evrregset): Likewise.
-	(ppc_store_evrregset): Likewise.
-
-2015-11-03  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* linux-ppc-low.c (ppc_usrregs_info): Remove
-	forward-declaration.
-	(ppc_arch_setup): Move lower in file.
-
-2015-10-30  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* proc-service.c (ps_pdread): Change CORE_ADDR cast to uintptr_t.
-	(ps_pdwrite): Likewise.
-
-2015-10-29 Henrik Wallin <henrik.wallin@windriver.com>
-
-	* linux-arm-low.c (arm_new_thread): Move pointer dereference
-	to after assert checks.
-
-2015-10-29  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* proc-service.c (ps_pdread): Add/adjust casts.
-	(ps_pdwrite): Add/adjust casts.
-
-2015-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* server.c (handle_search_memory_1): Cast return value of
-	memmem.
-
-2015-10-29  Simon Marchi  <simon.marchi@polymtl.ca>
-
-	* server.c (write_qxfer_response): Change type of data to
-	gdb_byte *.
-
-2015-10-29  Pedro Alves  <palves@redhat.com>
-
-	* mem-break.c (Z_packet_to_bkpt_type): Add cast.
-
-2015-10-29  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (clear_installed_tracepoints): Add casts.
-
-2015-10-29  Pedro Alves  <palves@redhat.com>
-
-	* server.c (handle_v_cont, process_serial_event): Add enum
-	gdb_signal casts to signal parsing code.
-
-2015-10-29  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.h (NULL_REGSET): Define.
-	* linux-aarch64-low.c (aarch64_regsets): Use NULL_REGSET.
-	* linux-arm-low.c (arm_regsets): Likewise.
-	* linux-crisv32-low.c (cris_regsets): Likewise.
-	* linux-m68k-low.c (m68k_regsets): Likewise.
-	* linux-mips-low.c (mips_regsets): Likewise.
-	* linux-nios2-low.c (nios2_regsets): Likewise.
-	* linux-ppc-low.c (ppc_regsets): Likewise.
-	* linux-s390-low.c (s390_regsets): Likewise.
-	* linux-sh-low.c (sh_regsets): Likewise.
-	* linux-sparc-low.c (sparc_regsets): Likewise.
-	* linux-tic6x-low.c (tic6x_regsets): Likewise.
-	* linux-tile-low.c (tile_regsets): Likewise.
-	* linux-x86-low.c (x86_regsets): Likewise.
-	* linux-xtensa-low.c (xtensa_regsets): Likewise.
-
-2015-10-29  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.h (NULL_REGSET): Define.
-	* linux-aarch64-low.c (aarch64_regsets): Use NULL_REGSET.
-	* linux-arm-low.c (arm_regsets): Likewise.
-	* linux-crisv32-low.c (cris_regsets): Likewise.
-	* linux-m68k-low.c (m68k_regsets): Likewise.
-	* linux-mips-low.c (mips_regsets): Likewise.
-	* linux-nios2-low.c (nios2_regsets): Likewise.
-	* linux-ppc-low.c (ppc_regsets): Likewise.
-	* linux-s390-low.c (s390_regsets): Likewise.
-	* linux-sh-low.c (sh_regsets): Likewise.
-	* linux-sparc-low.c (sparc_regsets): Likewise.
-	* linux-tic6x-low.c (tic6x_regsets): Likewise.
-	* linux-tile-low.c (tile_regsets): Likewise.
-	* linux-x86-low.c (x86_regsets): Likewise.
-	* linux-xtensa-low.c (xtensa_regsets): Likewise.
-
-2015-10-26  Doug Evans  <dje@google.com>
-
-	* linux-low.c (__SIGRTMIN): Move to nat/linux-nat.h.
-
-2015-10-26  Doug Evans  <dje@google.com>
-
-	* linux-low.c (W_STOPCODE): Moved to common/gdb_wait.h.
-
-2015-10-26  Doug Evans  <dje@google.com>
-
-	* thread-db.c (find_one_thread): Cast ti.ti_tid to unsigned long
-	for debug_printf.
-	(attach_thread, find_new_threads_callback): Ditto.
-
-2015-10-23  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* mem-break.h (set_breakpoint_data): Remove.
-
-2015-10-23  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* nto-low.c (nto_sw_breakpoint_from_kind): New function.
-	(struct target_ops) <sw_breakpoint_from_kind>: Initialize.
-	(initialize_low): Remove set_breakpoint_data call.
-	* spu-low.c (spu_sw_breakpoint_from_kind): New function.
-	(struct target_ops) <sw_breakpoint_from_kind>: Iniitalize.
-	(initialize_low): Remove set_breakpoint_data call.
-	* win32-low.c (win32_sw_breakpoint_from_kind): New function.
-	(struct target_ops) <sw_breakpoint_from_kind>: Initialize.
-	(initialize_low): Remove set_breakpoint_data call.
-
-2015-10-23  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (default_breakpoint_kind_from_pc): Move to target.c.
-	* mem-break.c (set_breakpoint_at): Use target_breakpoint_kind_from_pc.
-	* target.c (default_breakpoint_kind_from_pc): Moved from linux-low.c
-	* target.h (target_breakpoint_kind_from_pc): New macro.
-
-2015-10-22  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (default_breakpoint_kind_from_pc): New function.
-	(linux_breakpoint_kind_from_pc): Use default_breakpoint_kind_from_pc for
-	the default breakpoint kind.
-
-2015-10-21  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-arm-low.c (arm_supports_z_point_type): Add software
-	breakpoint support.
-
-2015-10-21  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-arm-low.c: Refactor breakpoint definitions.
-	(arm_breakpoint_at): Adjust for arm_abi_breakpoint.
-	(arm_sw_breakpoint_from_kind): Adjust for arm_breakpoint.
-
-2015-10-21  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* Makefile.in: Add arm.c/o.
-	* configure.srv: Likewise.
-	* linux-arm-low.c (arm_breakpoint_kinds): New enum.
-	(arm_breakpoint_kind_from_pc): New function.
-	(arm_sw_breakpoint_from_kind): Return proper kind.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize.
-
-2015-10-21  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-low.c (initialize_low): Ajdust for breakpoint global variables
-	removal.
-	* mem-break.c : Remove breakpoint_data/breakpoint_len global variables.
-	(struct raw_breakpoint) <size>: Remove.
-	(struct raw_breakpoint) <kind>: Add.
-	(bp_size): New function.
-	(bp_opcode): Likewise.
-	(find_raw_breakpoint_at): Adjust for kind.
-	(insert_memory_breakpoint): Adjust for kind call bp_size,bp_opcode.
-	(remove_memory_breakpoint): Adjust for kind call bp_size.
-	(set_raw_breakpoint_at): Adjust for kind.
-	(set_breakpoint): Likewise.
-	(set_breakpoint_at): Call breakpoint_kind_from_pc.
-	(delete_raw_breakpoint): Adjust for kind.
-	(delete_breakpoint): Likewise.
-	(find_gdb_breakpoint): Likewise.
-	(set_gdb_breakpoint_1): Likewise.
-	(set_gdb_breakpoint): Likewise.
-	(delete_gdb_breakpoint_1): Likewise.
-	(delete_gdb_breakpoint): Likewise.
-	(uninsert_raw_breakpoint): Likewise.
-	(reinsert_raw_breakpoint): Likewise.
-	(set_breakpoint_data): Remove.
-	(validate_inserted_breakpoint): Adjust for kind call bp_size,bp_opcode.
-	(check_mem_read): Adjust for kind call bp_size.
-	(check_mem_write): Adjust for kind call bp_size,bp_opcode.
-	(clone_one_breakpoint): Adjust for kind.
-	* mem-break.h (set_gdb_breakpoint): Likewise.
-	(delete_gdb_breakpoint): Likewise.
-	* server.c (process_serial_event): Likewise.
-
-2015-10-21  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-aarch64-low.c (aarch64_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-arm-low.c (arm_breakpoint_kind_from_pc): New function.
-	(arm_sw_breakpoint_from_kind): New function.
-	* linux-bfin-low.c (bfin_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-cris-low.c (cris_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-crisv32-low.c (cris_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-low.c (linux_wait_1): Call breakpoint_kind_from_pc
-	and sw_breakpoint_from_kind to increment the pc.
-	(linux_breakpoint_kind_from_pc): New function.
-	(linux_sw_breakpoint_from_kind): New function.
-	(struct target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	(initialize_low): Call breakpoint_kind_from_pc and
-	sw_breakpoint_from_kind to replace breakpoint_data/len.
-	* linux-low.h (struct linux_target_ops) <breakpoint_kind_from_pc>:
-	New field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Likewise.
-	* linux-m32r-low.c (m32r_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-m68k-low.c (m68k_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-mips-low.c (mips_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-nios2-low.c (nios2_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-ppc-low.c (ppc_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-s390-low.c (s390_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-sh-low.c (sh_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-sparc-low.c (sparc_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-tic6x-low.c (tic6x_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-tile-low.c (tile_sw_breakpoint_from_kind): New function.
-	* linux-x86-low.c (x86_sw_breakpoint_from_kind): New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-	* linux-xtensa-low.c (xtensa_sw_breakpoint_from_kind) New function.
-	(struct linux_target_ops) <breakpoint>: Remove.
-	(struct linux_target_ops) <breakpoint_len>: Remove.
-	(struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field.
-	(struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field.
-
-2015-10-21  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	* linux-cris-low.c (cris_get_pc): Remove void arg.
-
-2015-10-16  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	* gdbserver/nto-low.c (nto_insert_point, nto_remove_point): Fix
-	variable name.
-
-2015-10-16  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	* inferiors.c (thread_pid_matches_callback): New function.
-	(find_thread_process): New function.
-	(remove_thread): Reset current_thread.
-	(remove_process): Assert threads have been removed first.
-
-2015-10-15  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_insert_point): Set len to 2
-	if it is 3.
-	(aarch64_remove_point): Likewise.
-	* regcache.c (regcache_register_size): New function.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c: Update all callers as emit_load_store
-	is renamed to aarch64_emit_load_store.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c: Update all callers of function renaming
-	from emit_insn to aarch64_emit_insn.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (enum aarch64_opcodes): Move to
-	arch/aarch64-insn.h.
-	(struct aarch64_memory_operand): Likewise.
-	(ENCODE): Likewise.
-	(emit_insn): Move to arch/aarch64-insn.c.
-	(emit_b, emit_bcond, emit_cb, emit_tb): Remove.
-	(emit_load_store): Move to arch/aarch64-insn.c.
-	(emit_ldr, emit_ldrb, emit_ldrsw, emit_nop): Remove.
-	(can_encode_int32): Remove.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (extract_signed_bitfield): Remove.
-	(aarch64_decode_ldr_literal): Move to gdb/arch/aarch64-insn.c.
-	(aarch64_relocate_instruction): Likewise.
-	(struct aarch64_insn_data): Move to gdb/arch/aarch64-insn.h.
-	(struct aarch64_insn_visitor): Likewise.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (struct aarch64_insn_data): New.
-	(struct aarch64_insn_visitor): New.
-	(struct aarch64_insn_relocation_data): New.
-	(aarch64_ftrace_insn_reloc_b): New function.
-	(aarch64_ftrace_insn_reloc_b_cond): Likewise.
-	(aarch64_ftrace_insn_reloc_cb): Likewise.
-	(aarch64_ftrace_insn_reloc_tb): Likewise.
-	(aarch64_ftrace_insn_reloc_adr): Likewise.
-	(aarch64_ftrace_insn_reloc_ldr_literal): Likewise.
-	(aarch64_ftrace_insn_reloc_others): Likewise.
-	(visitor): New.
-	(aarch64_relocate_instruction): Use visitor.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_relocate_instruction): Return
-	int.  Add argument buf.
-	(aarch64_install_fast_tracepoint_jump_pad): Pass buf to
-	aarch64_relocate_instruction.
-
-2015-10-12  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_relocate_instruction): Add
-	argument insn.  Remove local variable insn.  Don't call
-	target_read_uint32.
-	(aarch64_install_fast_tracepoint_jump_pad): Call
-	target_read_uint32.
-
-2015-09-30  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (emit_movk): Shorten a long line.
-	(emit_load_store_pair): Likewise.
-
-2015-09-25  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* dll.c (match_dll): Add cast(s).
-	(unloaded_dll): Likewise.
-	* linux-low.c (second_thread_of_pid_p): Likewise.
-	(delete_lwp_callback): Likewise.
-	(count_events_callback): Likewise.
-	(select_event_lwp_callback): Likewise.
-	(linux_set_resume_request): Likewise.
-	* server.c (accumulate_file_name_length): Likewise.
-	(emit_dll_description): Likewise.
-	(handle_qxfer_threads_worker): Likewise.
-	(visit_actioned_threads): Likewise.
-	* thread-db.c (any_thread_of): Likewise.
-	* tracepoint.c (same_process_p): Likewise.
-	(match_blocktype): Likewise.
-	(build_traceframe_info_xml): Likewise.
-
-2015-09-25  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* ax.c (gdb_parse_agent_expr): Add cast to allocation result
-	assignment.
-	(gdb_unparse_agent_expr): Likewise.
-	* hostio.c (require_data): Likewise.
-	(handle_pread): Likewise.
-	* linux-low.c (disable_regset): Likewise.
-	(fetch_register): Likewise.
-	(store_register): Likewise.
-	(get_dynamic): Likewise.
-	(linux_qxfer_libraries_svr4): Likewise.
-	* mem-break.c (delete_fast_tracepoint_jump): Likewise.
-	(set_fast_tracepoint_jump): Likewise.
-	(uninsert_fast_tracepoint_jumps_at): Likewise.
-	(reinsert_fast_tracepoint_jumps_at): Likewise.
-	(validate_inserted_breakpoint): Likewise.
-	(clone_agent_expr): Likewise.
-	* regcache.c (init_register_cache): Likewise.
-	* remote-utils.c (putpkt_binary_1): Likewise.
-	(decode_M_packet): Likewise.
-	(decode_X_packet): Likewise.
-	(look_up_one_symbol): Likewise.
-	(relocate_instruction): Likewise.
-	(monitor_output): Likewise.
-	* server.c (handle_search_memory): Likewise.
-	(handle_qxfer_exec_file): Likewise.
-	(handle_qxfer_libraries): Likewise.
-	(handle_qxfer): Likewise.
-	(handle_query): Likewise.
-	(handle_v_cont): Likewise.
-	(handle_v_run): Likewise.
-	(captured_main): Likewise.
-	* target.c (write_inferior_memory): Likewise.
-	* thread-db.c (try_thread_db_load_from_dir): Likewise.
-	* tracepoint.c (init_trace_buffer): Likewise.
-	(add_tracepoint_action): Likewise.
-	(add_traceframe): Likewise.
-	(add_traceframe_block): Likewise.
-	(cmd_qtdpsrc): Likewise.
-	(cmd_qtdv): Likewise.
-	(cmd_qtstatus): Likewise.
-	(response_source): Likewise.
-	(response_tsv): Likewise.
-	(cmd_qtnotes): Likewise.
-	(gdb_collect): Likewise.
-	(initialize_tracepoint): Likewise.
-
-2015-09-21  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* linux-aarch64-low-.c: Include ax.h and tracepoint.h.
-	(enum aarch64_opcodes) <RET>, <SUBS>, <AND>, <ORR>, <ORN>,
-	<EOR>, <LSLV>, <LSRV>, <ASRV>, <SBFM>, <UBFM>, <CSINC>, <MUL>,
-	<NOP>: New.
-	(enum aarch64_condition_codes): New enum.
-	(w0): New static global.
-	(fp): Likewise.
-	(lr): Likewise.
-	(struct aarch64_memory_operand) <type>: New
-	MEMORY_OPERAND_POSTINDEX type.
-	(postindex_memory_operand): New helper function.
-	(emit_ret): New function.
-	(emit_load_store_pair): New function, factored out of emit_stp
-	with support for MEMORY_OPERAND_POSTINDEX.
-	(emit_stp): Rewrite using emit_load_store_pair.
-	(emit_ldp): New function.
-	(emit_load_store): Likewise.
-	(emit_ldr): Mention post-index instruction in comment.
-	(emit_ldrh): New function.
-	(emit_ldrb): New function.
-	(emit_ldrsw): Mention post-index instruction in comment.
-	(emit_str): Likewise.
-	(emit_subs): New function.
-	(emit_cmp): Likewise.
-	(emit_and): Likewise.
-	(emit_orr): Likewise.
-	(emit_orn): Likewise.
-	(emit_eor): Likewise.
-	(emit_mvn): Likewise.
-	(emit_lslv): Likewise.
-	(emit_lsrv): Likewise.
-	(emit_asrv): Likewise.
-	(emit_mul): Likewise.
-	(emit_sbfm): Likewise.
-	(emit_sbfx): Likewise.
-	(emit_ubfm): Likewise.
-	(emit_ubfx): Likewise.
-	(emit_csinc): Likewise.
-	(emit_cset): Likewise.
-	(emit_nop): Likewise.
-	(emit_ops_insns): New helper function.
-	(emit_pop): Likewise.
-	(emit_push): Likewise.
-	(aarch64_emit_prologue): New function.
-	(aarch64_emit_epilogue): Likewise.
-	(aarch64_emit_add): Likewise.
-	(aarch64_emit_sub): Likewise.
-	(aarch64_emit_mul): Likewise.
-	(aarch64_emit_lsh): Likewise.
-	(aarch64_emit_rsh_signed): Likewise.
-	(aarch64_emit_rsh_unsigned): Likewise.
-	(aarch64_emit_ext): Likewise.
-	(aarch64_emit_log_not): Likewise.
-	(aarch64_emit_bit_and): Likewise.
-	(aarch64_emit_bit_or): Likewise.
-	(aarch64_emit_bit_xor): Likewise.
-	(aarch64_emit_bit_not): Likewise.
-	(aarch64_emit_equal): Likewise.
-	(aarch64_emit_less_signed): Likewise.
-	(aarch64_emit_less_unsigned): Likewise.
-	(aarch64_emit_ref): Likewise.
-	(aarch64_emit_if_goto): Likewise.
-	(aarch64_emit_goto): Likewise.
-	(aarch64_write_goto_address): Likewise.
-	(aarch64_emit_const): Likewise.
-	(aarch64_emit_call): Likewise.
-	(aarch64_emit_reg): Likewise.
-	(aarch64_emit_pop): Likewise.
-	(aarch64_emit_stack_flush): Likewise.
-	(aarch64_emit_zero_ext): Likewise.
-	(aarch64_emit_swap): Likewise.
-	(aarch64_emit_stack_adjust): Likewise.
-	(aarch64_emit_int_call_1): Likewise.
-	(aarch64_emit_void_call_2): Likewise.
-	(aarch64_emit_eq_goto): Likewise.
-	(aarch64_emit_ne_goto): Likewise.
-	(aarch64_emit_lt_goto): Likewise.
-	(aarch64_emit_le_goto): Likewise.
-	(aarch64_emit_gt_goto): Likewise.
-	(aarch64_emit_ge_got): Likewise.
-	(aarch64_emit_ops_impl): New static global variable.
-	(aarch64_emit_ops): New target function, return
-	&aarch64_emit_ops_impl.
-	(struct linux_target_ops): Install it.
-
-2015-09-21  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* Makefile.in (linux-aarch64-ipa.o, aarch64-ipa.o): New rules.
-	* configure.srv (aarch64*-*-linux*): Add linux-aarch64-ipa.o and
-	aarch64-ipa.o.
-	* linux-aarch64-ipa.c: New file.
-	* linux-aarch64-low.c: Include arch/aarch64-insn.h, inttypes.h
-	and endian.h.
-	(aarch64_get_thread_area): New target method.
-	(extract_signed_bitfield): New helper function.
-	(aarch64_decode_ldr_literal): New function.
-	(enum aarch64_opcodes): New enum.
-	(struct aarch64_register): New struct.
-	(struct aarch64_operand): New struct.
-	(x0): New static global.
-	(x1): Likewise.
-	(x2): Likewise.
-	(x3): Likewise.
-	(x4): Likewise.
-	(w2): Likewise.
-	(ip0): Likewise.
-	(sp): Likewise.
-	(xzr): Likewise.
-	(aarch64_register): New helper function.
-	(register_operand): Likewise.
-	(immediate_operand): Likewise.
-	(struct aarch64_memory_operand): New struct.
-	(offset_memory_operand): New helper function.
-	(preindex_memory_operand): Likewise.
-	(enum aarch64_system_control_registers): New enum.
-	(ENCODE): New macro.
-	(emit_insn): New helper function.
-	(emit_b): New function.
-	(emit_bcond): Likewise.
-	(emit_cb): Likewise.
-	(emit_tb): Likewise.
-	(emit_blr): Likewise.
-	(emit_stp): Likewise.
-	(emit_ldp_q_offset): Likewise.
-	(emit_stp_q_offset): Likewise.
-	(emit_load_store): Likewise.
-	(emit_ldr): Likewise.
-	(emit_ldrsw): Likewise.
-	(emit_str): Likewise.
-	(emit_ldaxr): Likewise.
-	(emit_stxr): Likewise.
-	(emit_stlr): Likewise.
-	(emit_data_processing_reg): Likewise.
-	(emit_data_processing): Likewise.
-	(emit_add): Likewise.
-	(emit_sub): Likewise.
-	(emit_mov): Likewise.
-	(emit_movk): Likewise.
-	(emit_mov_addr): Likewise.
-	(emit_mrs): Likewise.
-	(emit_msr): Likewise.
-	(emit_sevl): Likewise.
-	(emit_wfe): Likewise.
-	(append_insns): Likewise.
-	(can_encode_int32_in): New helper function.
-	(aarch64_relocate_instruction): New function.
-	(aarch64_install_fast_tracepoint_jump_pad): Likewise.
-	(aarch64_get_min_fast_tracepoint_insn_len): Likewise.
-	(struct linux_target_ops): Install aarch64_get_thread_area,
-	aarch64_install_fast_tracepoint_jump_pad and
-	aarch64_get_min_fast_tracepoint_insn_len.
-
-2015-09-21  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* Makefile.in (aarch64-insn.o): New rule.
-	* configure.srv (aarch64*-*-linux*): Add aarch64-insn.o.
-
-2015-09-21  Yao Qi  <yao.qi@linaro.org>
-
-	* ax.c [!IN_PROCESS_AGENT] (gdb_agent_op_sizes): Define it.
-
-2015-09-21  Yao Qi  <yao.qi@linaro.org>
-
-	* tracepoint.c (max_jump_pad_size): Remove.
-
-2015-09-18  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c: Don't include sys/uio.h.
-	(ps_get_thread_area): Call aarch64_ps_get_thread_area.
-
-2015-09-16  Wei-cheng Wang  <cole945@gmail.com>
-
-	* tracepoint.c (eval_result_type): Change prototype.
-	(condition_true_at_tracepoint): Fix argument to compiled_cond.
-
-2015-09-15  Pedro Alves  <palves@redhat.com>
-
-	* remote-utils.c (prepare_resume_reply) <TARGET_WAITKIND_EXECD>:
-	Check whether to report exec events instead of checking whether
-	multiprocess is enabled.
-
-2015-09-15  Pedro Alves  <palves@redhat.com>
-
-	PR remote/18965
-	* remote-utils.c (prepare_resume_reply): Merge
-	TARGET_WAITKIND_VFORK_DONE switch case with the
-	TARGET_WAITKIND_FORKED case.
-
-2015-09-15  Yao Qi  <yao.qi@linaro.org>
-
-	* server.c (handle_query): Check string comparison using
-	"else if" instead of "if".
-
-2015-09-15  Yao Qi  <yao.qi@linaro.org>
-
-	* server.c (vCont_supported): New global variable.
-	(handle_query): Set vCont_supported to 1 if "vContSupported+"
-	matches.  Append ";vContSupported+" to own_buf.
-	(handle_v_requests): Append ";s;S" to own_buf if target supports
-	hardware single step or vCont_supported is false.
-	(capture_main): Set vCont_supported to zero.
-
-2015-09-15  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_supports_conditional_breakpoints): Rename
-	it to ...
-	(linux_supports_hardware_single_step): ... New function.
-	(linux_target_ops): Update.
-	* lynx-low.c (lynx_target_ops): Set field
-	supports_hardware_single_step to target_can_do_hardware_single_step.
-	* nto-low.c (nto_target_ops): Likewise.
-	* spu-low.c (spu_target_ops): Likewise.
-	* win32-low.c (win32_target_ops): Likewise.
-	* target.c (target_can_do_hardware_single_step): New function.
-	* target.h (struct target_ops) <supports_conditional_breakpoints>:
-	Remove.  <supports_hardware_single_step>: New field.
-	(target_supports_conditional_breakpoints): Remove.
-	(target_supports_hardware_single_step): New macro.
-	(target_can_do_hardware_single_step): Declare.
-	* server.c (handle_query): Use target_supports_hardware_single_step
-	instead of target_supports_conditional_breakpoints.
-
-2015-09-15  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_linux_siginfo_fixup): New
-	function.
-	(struct linux_target_ops the_low_target): Install
-	aarch64_linux_siginfo_fixup.
-
-2015-09-11  Don Breazeal  <donb@codesourcery.com>
-	    Luis Machado  <lgustavo@codesourcery.com>
-
-	* linux-low.c (linux_mourn): Static declaration.
-	(linux_arch_setup): Move in front of
-	handle_extended_wait.
-	(linux_arch_setup_thread): New function.
-	(handle_extended_wait): Handle exec events.  Call
-	linux_arch_setup_thread.  Make event_lwp argument a
-	pointer-to-a-pointer.
-	(check_zombie_leaders): Do not check stopped threads.
-	(linux_low_ptrace_options): Add PTRACE_O_TRACEEXEC.
-	(linux_low_filter_event): Add lwp and thread for exec'ing
-	non-leader thread if leader thread has been deleted.
-	Refactor code into linux_arch_setup_thread and call it.
-	Pass child lwp pointer by reference to handle_extended_wait.
-	(linux_wait_for_event_filtered): Update comment.
-	(linux_wait_1): Prevent clobbering exec event status.
-	(linux_supports_exec_events): New function.
-	(linux_target_ops) <supports_exec_events>: Initialize new member.
-	* lynx-low.c (lynx_target_ops) <supports_exec_events>: Initialize
-	new member.
-	* remote-utils.c (prepare_resume_reply): New stop reason 'exec'.
-	* server.c (report_exec_events): New global variable.
-	(handle_query): Handle qSupported query for exec-events feature.
-	(captured_main): Initialize report_exec_events.
-	* server.h (report_exec_events): Declare new global variable.
-	* target.h (struct target_ops) <supports_exec_events>: New
-	member.
-	(target_supports_exec_events): New macro.
-	* win32-low.c (win32_target_ops) <supports_exec_events>:
-	Initialize new member.
-
-2015-09-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* linux-low.c (linux_low_enable_btrace): Remove.
-	(linux_target_ops): Replace linux_low_enable_btrace with
-	linux_enable_btrace.
-
-2015-09-03  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_insert_point): Call
-	aarch64_handle_watchpoint if aarch64_linux_region_ok_for_watchpoint
-	returns true.
-
-2015-08-27  Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
-
-	* linux-low.c (check_stopped_by_breakpoint): Use
-	GDB_ARCH_IS_TRAP_BRKPT instead of GDB_ARCH_TRAP_BRKPT.
-
-2015-08-27  Pedro Alves  <palves@redhat.com>
-
-	* proc-service.c (ps_pdwrite): Return PS_ERR/PS_OK explicily.
-
-2015-08-26  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* ax.c (gdb_parse_agent_expr): Replace xmalloc-family function with
-	the XNEW-family equivalent.
-	(compile_bytecodes): Likewise.
-	* dll.c (loaded_dll): Likewise.
-	* event-loop.c (append_callback_event): Likewise.
-	(create_file_handler): Likewise.
-	(create_file_event): Likewise.
-	* hostio.c (handle_open): Likewise.
-	* inferiors.c (add_thread): Likewise.
-	(add_process): Likewise.
-	* linux-aarch64-low.c (aarch64_linux_new_process): Likewise.
-	* linux-arm-low.c (arm_new_process): Likewise.
-	(arm_new_thread): Likewise.
-	* linux-low.c (add_to_pid_list): Likewise.
-	(linux_add_process): Likewise.
-	(handle_extended_wait): Likewise.
-	(add_lwp): Likewise.
-	(enqueue_one_deferred_signal): Likewise.
-	(enqueue_pending_signal): Likewise.
-	(linux_resume_one_lwp_throw): Likewise.
-	(linux_resume_one_thread): Likewise.
-	(linux_read_memory): Likewise.
-	(linux_write_memory): Likewise.
-	* linux-mips-low.c (mips_linux_new_process): Likewise.
-	(mips_linux_new_thread): Likewise.
-	(mips_add_watchpoint): Likewise.
-	* linux-x86-low.c (initialize_low_arch): Likewise.
-	* lynx-low.c (lynx_add_process): Likewise.
-	* mem-break.c (set_raw_breakpoint_at): Likewise.
-	(set_breakpoint): Likewise.
-	(add_condition_to_breakpoint): Likewise.
-	(add_commands_to_breakpoint): Likewise.
-	(clone_agent_expr): Likewise.
-	(clone_one_breakpoint): Likewise.
-	* regcache.c (new_register_cache): Likewise.
-	* remote-utils.c (look_up_one_symbol): Likewise.
-	* server.c (queue_stop_reply): Likewise.
-	(start_inferior): Likewise.
-	(queue_stop_reply_callback): Likewise.
-	(handle_target_event): Likewise.
-	* spu-low.c (fetch_ppc_memory): Likewise.
-	(store_ppc_memory): Likewise.
-	* target.c (set_target_ops): Likewise.
-	* thread-db.c (thread_db_load_search): Likewise.
-	(try_thread_db_load_1): Likewise.
-	* tracepoint.c (add_tracepoint): Likewise.
-	(add_tracepoint_action): Likewise.
-	(create_trace_state_variable): Likewise.
-	(cmd_qtdpsrc): Likewise.
-	(cmd_qtro): Likewise.
-	(add_while_stepping_state): Likewise.
-	* win32-low.c (child_add_thread): Likewise.
-	(get_image_name): Likewise.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_linux_new_thread): Remove.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (aarch64-linux.o): New rule.
-	* configure.srv (aarch64*-*-linux*): Append aarch64-linux.o to
-	srv_tgtobj.
-	* linux-aarch64-low.c: Include nat/aarch64-linux.h.
-	(aarch64_init_debug_reg_state): Make it extern.
-	(aarch64_linux_prepare_to_resume): Remove.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_linux_prepare_to_resume): Use
-	lwp_arch_private_info and ptid_of_lwp.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_get_debug_reg_state): Add argument pid.
-	Find proc_info by find_process_pid.  All callers updated.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (struct arch64_dr_update_callback_param):
-	Remove.
-	(debug_reg_change_callback): Remove.
-	(aarch64_notify_debug_reg_change): Remove.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_notify_debug_reg_change):
-	Call current_lwp_ptid.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (debug_reg_change_callback): Use
-	debug_printf.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (debug_reg_change_callback): Use phex.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (debug_reg_change_callback): Remove comments.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (debug_reg_change_callback): Re-indent
-	the code.
-
-2015-08-25  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_dr_update_callback_param) <pid>:
-	Remove.
-	(debug_reg_change_callback): Remove argument entry and add argument
-	lwp.  Remove local variable thread.  Don't print thread id in the
-	debugging output.  Don't check whether pid of thread equals to pid.
-	(aarch64_notify_debug_reg_change): Don't set param.pid.  Call
-	iterate_over_lwps instead find_inferior.
-
-2015-08-24  Pedro Alves  <palves@redhat.com>
-
-	* inferiors.c (get_first_process): New function.
-	* inferiors.h (get_first_process): New declaration.
-	* remote-utils.c (read_ptid): Default to the first process in the
-	list, instead of to the current thread's process.
-
-2015-08-24  Pedro Alves  <palves@redhat.com>
-
-	* debug.c: Include gdb_sys_time.h instead of sys/time.h.
-	* event-loop.c: Likewise.
-	* remote-utils.c: Likewise.
-	* tracepoint.c: Likewise.
-
-2015-08-24  Pedro Alves  <palves@redhat.com>
-
-	* spu-low.c (spu_request_interrupt): Use lwpid_of instead of
-	ptid_get_lwp.
-
-2015-08-21  Pedro Alves  <palves@redhat.com>
-
-	* ax.c (gdb_eval_agent_expr): Return expr_eval_unhandled_opcode
-	instead of literal 1.
-
-2015-08-21  Pedro Alves  <palves@redhat.com>
-
-	* tdesc.c (default_description): Explicitly zero-initialize.
-
-2015-08-21  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/18749
-	* inferiors.c (remove_thread): Discard any pending stop reply for
-	this thread.
-	* server.c (remove_all_on_match_pid): Rename to ...
-	(remove_all_on_match_ptid): ... this.  Work with a filter ptid
-	instead of a pid.
-	(discard_queued_stop_replies): Change parameter to a ptid.  Now
-	extern.
-	(handle_v_kill, kill_inferior_callback, captured_main)
-	(process_serial_event): Adjust.
-	* server.h (discard_queued_stop_replies): Declare.
-
-2015-08-21  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (wait_for_sigstop): Always switch to no thread
-	selected if the previously current thread dies.
-	* lynx-low.c (lynx_request_interrupt): Use the first thread's
-	process instead of the current thread's.
-	* remote-utils.c (input_interrupt): Don't check if there's no
-	current thread.
-	* server.c (gdb_read_memory, gdb_write_memory): If setting the
-	current thread to the general thread fails, error out.
-	(handle_qxfer_auxv, handle_qxfer_libraries)
-	(handle_qxfer_libraries_svr4, handle_qxfer_siginfo)
-	(handle_qxfer_spu, handle_qxfer_statictrace, handle_qxfer_fdpic)
-	(handle_query): Check if there's a thread selected instead of
-	checking whether there's any thread in the thread list.
-	(handle_qxfer_threads, handle_qxfer_btrace)
-	(handle_qxfer_btrace_conf): Don't error out early if there's no
-	thread in the thread list.
-	(handle_v_cont, myresume): Don't set the current thread to the
-	continue thread.
-	(process_serial_event) <Hg handling>: Also set thread_id if the
-	previous general thread is still alive.
-	(process_serial_event) <g/G handling>: If setting the current
-	thread to the general thread fails, error out.
-	* spu-low.c (spu_resume, spu_request_interrupt): Use the first
-	thread's lwp instead of the current thread's.
-	* target.c (set_desired_thread): If the desired thread was not
-	found, leave the current thread pointing to NULL.  Return an int
-	(boolean) indicating success.
-	* target.h (set_desired_thread): Change return type to int.
-
-2015-08-20  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* configure.srv (xtensa*-*-linux*): Add srv_linux_thread_db=yes.
-	* linux-xtensa-low.c (arch/xtensa.h gdb_proc_service.h): New
-	#includes.
-	(ps_get_thread_area): New function.
-
-2015-08-19  Gary Benson  <gbenson@redhat.com>
-
-	* hostio.c (handle_pread): Do not attempt to read more data
-	than hostio_reply_with_data can fit in a packet.
-
-2015-08-18  Joel Brobecker  <brobecker@adacore.com>
-
-	* linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined.
-
-2015-08-14  Matthew Fortune  <matthew.fortune@imgtec.com>
-
-	* linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP_REL.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (expr_eval_result): Now an int.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* gdbthread.h (struct regcache): Forward declare.
-	(struct thread_info) <regcache_data>: Now a struct regcache
-	pointer.
-	* inferiors.c (inferior_regcache_data)
-	(set_inferior_regcache_data): Now work with struct regcache
-	pointers.
-	* inferiors.h (struct regcache): Forward declare.
-	(inferior_regcache_data, set_inferior_regcache_data): Now work
-	with struct regcache pointers.
-	* regcache.c (get_thread_regcache, regcache_invalidate_thread)
-	(free_register_cache_thread): Remove struct regcache pointer
-	casts.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* server.c (captured_main): On error, print the exception message
-	to stderr, and if run_once is set, throw a quit.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (move_out_of_jump_pad_callback): Temporarily switch
-	the current thread.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_write_memory): Rewrite debug output to avoid
-	reading beyond the passed in buffer length.
-
-2015-08-06  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* tracepoint.c (symbol_list) <required>: Remove.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Set the fork child's suspend
-	count if stopping and suspending threads.
-	(check_stopped_by_breakpoint): If stopped by trace, set the LWP's
-	stop reason to TARGET_STOPPED_BY_SINGLE_STEP.
-	(linux_detach): Complete an ongoing step-over.
-	(lwp_suspended_inc, lwp_suspended_decr): New functions.  Use
-	throughout.
-	(resume_stopped_resumed_lwps): Don't resume a suspended thread.
-	(linux_wait_1): If passing a signal to the inferior after
-	finishing a step-over, unsuspend and re-resume all lwps.  If we
-	see a single-step event but the thread should be continuing, don't
-	pass the trap to gdb.
-	(stuck_in_jump_pad_callback, move_out_of_jump_pad_callback): Use
-	internal_error instead of gdb_assert.
-	(enqueue_pending_signal): New function.
-	(check_ptrace_stopped_lwp_gone): Add debug output.
-	(start_step_over): Use internal_error instead of gdb_assert.
-	(complete_ongoing_step_over): New function.
-	(linux_resume_one_thread): Don't resume a suspended thread.
-	(proceed_one_lwp): If the LWP is stepping over a breakpoint, reset
-	it stepping.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (add_lwp): Set waitstatus to TARGET_WAITKIND_IGNORE.
-	(linux_thread_alive): Use lwp_is_marked_dead.
-	(extended_event_reported): Delete.
-	(linux_wait_1): Check if waitstatus is TARGET_WAITKIND_IGNORE
-	instead of extended_event_reported.
-	(mark_lwp_dead): Don't set the 'dead' flag.  Store the waitstatus
-	as well.
-	(lwp_is_marked_dead): New function.
-	(lwp_running): Use lwp_is_marked_dead.
-	* linux-low.h: Delete 'dead' field, and update 'waitstatus's
-	comment.
-
-2015-08-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_wait_1): Move fork event output out of the
-	!report_to_gdb check.  Pass event_child->waitstatus to
-	target_waitstatus_to_string instead of ourstatus.
-
-2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_supports_tracepoints): Return 0
-	if current_thread is 32 bit.
-
-2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_supports_z_point_type): Return
-	0 for Z_PACKET_SW_BP if it may be used in multi-arch debugging.
-	* server.c (extended_protocol): Remove "static".
-	* server.h (extended_protocol): Declare it.
-
-2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_get_pc): Get PC register on
-	both aarch64 and aarch32.
-	(aarch64_set_pc): Likewise.
-
-2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (case aarch64*-*-linux*): Append arm-with-neon.o
-	to srv_regobj and append arm-core.xml arm-vfpv3.xml and
-	arm-with-neon.xml to srv_xmlfiles.
-	* linux-aarch64-low.c: Include linux-aarch32-low.h.
-	(is_64bit_tdesc): New function.
-	(aarch64_linux_read_description): New function.
-	(aarch64_arch_setup): Call aarch64_linux_read_description.
-	(regs_info): Rename to regs_info_aarch64.
-	(aarch64_regs_info): Return right regs_info.
-	(initialize_low_arch): Call initialize_low_arch_aarch32.
-
-2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (srv_tgtobj): Add linux-aarch32-low.o.
-	* linux-aarch32-low.c: New file.
-	* linux-aarch32-low.h: New file.
-	* linux-arm-low.c (arm_fill_gregset): Move it to
-	linux-aarch32-low.c.
-	(arm_store_gregset): Likewise.
-	(arm_fill_vfpregset): Call arm_fill_vfpregset_num
-	(arm_store_vfpregset): Call arm_store_vfpregset_num.
-	(arm_arch_setup): Check if PTRACE_GETREGSET works.
-	(regs_info): Rename to regs_info_arm.
-	(arm_regs_info): Return regs_info_aarch32 if
-	have_ptrace_getregset is 1 and target description is
-	arm_with_neon or arm_with_vfpv3.
-	(initialize_low_arch): Don't call init_registers_arm_with_neon.
-	Call initialize_low_arch_aarch32 instead.
-
-2015-08-04  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-x86-low.c (have_ptrace_getregset): Move it to ...
-	* linux-low.c: ... here.
-	* linux-low.h (have_ptrace_getregset): Declare it.
-
-2015-08-04  Pedro Alves  <palves@redhat.com>
-
-	* thread-db.c (struct thread_db): Use new typedefs.
-	(try_thread_db_load_1): Define local TDB_DLSYM macro and use it in
-	CHK calls.
-	(disable_thread_event_reporting): Cast result of dlsym to
-	destination function pointer type.
-	(thread_db_mourn): Use td_ta_delete_ftype.
-
-2015-08-03  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* linux-nios2-low.c (NIOS2_BREAKPOINT): Conditionalize for
-	arch variant.
-	(CDX_BREAKPOINT): Define for R2.
-	(nios2_breakpoint_at): Check for CDX_BREAKPOINT when R2.
-	(the_low_target): Add comments.
-
-2015-07-30  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (arm_hwcap): Remove it.
-	(arm_read_description): New local variable arm_hwcap.  Don't
-	set arm_hwcap to zero.
-
-2015-07-30  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c (arm_fill_wmmxregset): Don't use arm_hwcap.
-	Use regcache->tdesc instead.
-	(arm_store_wmmxregset): Likewise.
-	(arm_fill_vfpregset): Likewise.
-	(arm_store_vfpregset): Likewise.
-
-2015-07-30  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-arm-low.c: Include arch/arm.h.
-	(arm_fill_gregset): Don't use arm_num_regs and arm_regmap.
-	(arm_store_gregset): Likewise.
-
-2015-07-29  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* linux-mips-low.c (mips_linux_prepare_to_resume): Add NULL as
-	ptrace's 4th parameter.
-
-2015-07-27  Yao Qi  <yao.qi@linaro.org>
-
-	* configure.srv (case aarch64*-*-linux*): Don't set
-	srv_linux_usrregs.
-
-2015-07-24  Pedro Alves  <palves@redhat.c: Likewise.om>
-
-	* linux-aarch64-low.c: Include nat/gdb_ptrace.h instead of
-	sys/ptrace.h.
-	* linux-arm-low.c: Likewise.
-	* linux-cris-low.c: Likewise.
-	* linux-crisv32-low.c: Likewise.
-	* linux-low.c: Likewise.
-	* linux-m68k-low.c: Likewise.
-	* linux-mips-low.c: Likewise.
-	* linux-nios2-low.c: Likewise.
-	* linux-s390-low.c: Likewise.
-	* linux-sparc-low.c: Likewise.
-	* linux-tic6x-low.c: Likewise.
-	* linux-tile-low.c: Likewise.
-	* linux-x86-low.c: Likewise.
-
-2015-07-24  Pedro Alves  <palves@redhat.com>
-
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2015-07-24  Pedro Alves  <palves@redhat.com>
-
-	* acinclude.m4: Include ../ptrace.m4.
-	* configure.ac: Call GDB_AC_PTRACE.
-	* config.in, configure: Regenerate.
-
-2015-07-24  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_create_inferior): Remove setting to
-	proc->priv->new_inferior.
-	(linux_attach): Likewise.
-	(linux_low_filter_event): Likewise.
-	* linux-low.h (struct process_info_private) <new_inferior>: Remove.
-
-2015-07-24  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_arch_setup): New function.
-	(linux_low_filter_event): If proc->tdesc is NULL and
-	proc->attached is true, call the_low_target.arch_setup.
-	Otherwise, keep status pending, and return.
-	(linux_resume_one_lwp_throw): Don't call get_pc if
-	thread->while_stepping isn't NULL.  Don't call
-	get_thread_regcache if proc->tdesc is NULL.
-	(need_step_over_p): Return 0 if proc->tdesc is NULL.
-	(linux_target_ops): Install arch_setup.
-	* server.c (start_inferior): Call the_target->arch_setup.
-	* target.h (struct target_ops) <arch_setup>: New field.
-	(target_arch_setup): New marco.
-	* lynx-low.c (lynx_target_ops): Update.
-	* nto-low.c (nto_target_ops): Update.
-	* spu-low.c (spu_target_ops): Update.
-	* win32-low.c (win32_target_ops): Update.
-
-2015-07-24  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_add_process): Don't set
-	proc->priv->new_inferior.
-	(linux_create_inferior): Set proc->priv->new_inferior to 1.
-	(linux_attach): Likewise.
-
-2015-07-24  Yao Qi  <yao.qi@linaro.org>
-
-	* server.c (start_inferior): Code refactor.
-
-2015-07-24  Yao Qi  <yao.qi@linaro.org>
-
-	* server.c (process_serial_event): Set general_thread.
-
-2015-07-21  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_arch_setup): Remove code and call
-	aarch64_linux_get_debug_reg_capacity.
-
-2015-07-17  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (aarch64-linux-hw-point.o): New rule.
-	* configure.srv (srv_tgtobj): Append aarch64-linux-hw-point.o.
-	* linux-aarch64-low.c: Include nat/aarch64-linux-hw-point.h.
-	(AARCH64_HBP_MAX_NUM): Move to nat/aarch64-linux-hw-point.h.
-	(AARCH64_HWP_MAX_NUM, AARCH64_HBP_ALIGNMENT): Likewise.
-	(AARCH64_HWP_ALIGNMENT): Likewise.
-	(AARCH64_HWP_MAX_LEN_PER_REG): Likewise.
-	(AARCH64_DEBUG_NUM_SLOTS, AARCH64_DEBUG_ARCH): Likewise.
-	(aarch64_num_bp_regs, aarch64_num_wp_regs): Likewise.
-	(AARCH64_DEBUG_ARCH_V8, DR_MARK_ALL_CHANGED): Likewise.
-	(DR_MARK_N_CHANGED, DR_CLEAR_CHANGED): Likewise.
-	(DR_HAS_CHANGED, DR_N_HAS_CHANGE): Likewise.
-	(struct aarch64_debug_reg_state): Likewise.
-	(struct arch_lwp_info):	Likewise.
-	(aarch64_align_watchpoint): Likewise.
-	(DR_CONTROL_ENABLED, DR_CONTROL_LENGTH): Likewise.
-	(aarch64_watchpoint_length): Likewise.
-	(aarch64_point_encode_ctrl_reg): Likewise
-	(aarch64_point_is_aligned): Likewise.
-	(aarch64_align_watchpoint): Likewise.
-	(aarch64_linux_set_debug_regs):
-	(aarch64_dr_state_insert_one_point): Likewise.
-	(aarch64_dr_state_remove_one_point): Likewise.
-	(aarch64_handle_breakpoint): Likewise.
-	(aarch64_handle_aligned_watchpoint): Likewise.
-	(aarch64_handle_unaligned_watchpoint): Likewise.
-	(aarch64_handle_watchpoint): Likewise.
-
-2015-07-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_handle_breakpoint): Add argument state
-	and don't aarch64_get_debug_reg_state.  All callers update.
-	(aarch64_handle_aligned_watchpoint): Likewise.
-	(aarch64_handle_unaligned_watchpoint): Likewise.
-	(aarch64_handle_watchpoint): Likewise.
-	(aarch64_insert_point): Call aarch64_get_debug_reg_state earlier.
-	(aarch64_remove_point): Likewise.
-
-2015-07-17  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_show_debug_reg_state): Use
-	debug_printf.
-	(aarch64_handle_unaligned_watchpoint): Likewise.
-
-2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Revert the previous 3 commits:
-	Move gdb_regex* to common/
-	Move linux_find_memory_regions_full & co.
-	gdbserver build-id attribute generator
-
-2015-07-15  Aleksandar Ristovski  <aristovski@qnx.com
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	gdbserver build-id attribute generator.
-	* linux-low.c (nat/linux-maps.h, search.h, rsp-low.h): Include.
-	(ElfXX_Ehdr, ElfXX_Phdr, ElfXX_Nhdr): New.
-	(ELFXX_FLD, ELFXX_SIZEOF, ELFXX_ROUNDUP, BUILD_ID_INVALID): New.
-	(find_phdr): New.
-	(get_dynamic): Use find_pdhr to traverse program headers.
-	(struct mapping_entry, mapping_entry_s, free_mapping_entry_vec)
-	(compare_mapping_entry_range, struct find_memory_region_callback_data)
-	(read_build_id, find_memory_region_callback, lrfind_mapping_entry)
-	(get_hex_build_id): New.
-	(linux_qxfer_libraries_svr4): Add optional build-id attribute
-	to reply XML document.
-
-2015-07-15  Aleksandar Ristovski  <aristovski@qnx.com
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* target.c: Include target/target-utils.h and fcntl.h.
-	(target_fileio_read_stralloc_1_pread, target_fileio_read_stralloc_1)
-	(target_fileio_read_stralloc): New functions.
-
-2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (OBS): Add gdb_regex.o.
-	(gdb_regex.o): New.
-	* config.in: Rebuilt.
-	* configure: Rebuilt.
-
-2015-07-15  Aleksandar Ristovski  <aristovski@qnx.com
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Create empty nat/linux-maps.[ch] and common/target-utils.[ch].
-	* Makefile.in (OBS): Add target-utils.o.
-	(linux-maps.o, target-utils.o): New.
-	* configure.srv (srv_linux_obj): Add linux-maps.o.
-
-2015-07-15  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* linux-aarch64-low.c (aarch64_supports_range_stepping): New
-	function, return 1.
-	(the_low_target): Install it.
-
-2015-07-14  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (kill_wait_lwp): Don't assert if waitpid fails.
-	Instead, ignore ECHILD, and throw an error for other errnos.
-
-2015-07-10  Pedro Alves  <palves@redhat.com>
-
-	* event-loop.c (struct callback_event) <data>: Change type to
-	gdb_client_data instance instead of gdb_client_data pointer.
-	(append_callback_event): Adjust.
-
-2015-07-10  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* linux-aarch64-low.c: Add comments for each linux_target_ops
-	method.  Remove comments already covered in target_ops and
-	linux_target_ops definitions.
-	(the_low_target): Add comments for each unimplemented method.
-
-2015-07-09  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_regmap): Remove.
-	(aarch64_usrregs_info): Remove.
-	(regs_info): Set field usrregs to NULL.
-
-2015-07-02  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* linux-low.c: Include "rsp-low.h"
-	(linux_low_encode_pt_config, linux_low_encode_raw): New.
-	(linux_low_read_btrace): Support BTRACE_FORMAT_PT.
-	(linux_low_btrace_conf): Support BTRACE_FORMAT_PT.
-	(handle_btrace_enable_pt): New.
-	(handle_btrace_general_set): Support "pt".
-	(handle_btrace_conf_general_set): Support "pt:size".
-
-2015-06-29  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* linux-aarch64-low.c (aarch64_supports_z_point_type): Enable for
-	Z_PACKET_SW_BP.
-
-2015-06-29  Pierre Langlois  <pierre.langlois@arm.com>
-
-	* linux-aarch64-low.c: Remove comment about endianness.
-	(aarch64_breakpoint): Change type to gdb_byte[].  Set to "brk #0".
-	(aarch64_breakpoint_at): Change type of insn to gdb_byte[].  Use
-	memcmp.
-
-2015-06-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-i386-ipa.c (stdint.h): Do not include.
-	* lynx-i386-low.c (stdint.h): Likewise.
-	* lynx-ppc-low.c (stdint.h): Likewise.
-	* mem-break.c (stdint.h): Likewise.
-	* thread-db.c (stdint.h): Likewise.
-	* tracepoint.c (stdint.h): Likewise.
-	* win32-low.c (stdint.h): Likewise.
-
-2015-06-18  Simon Marchi  <simon.marchi@ericsson.com>
-
-	* server.c (write_qxfer_response): Update call to
-	remote_escape_output.
-
-2015-06-15  Aleksandar Ristovski  <aristovski@qnx.com
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Merge multiple hex conversions.
-	* gdbreplay.c (tohex): Rename to 'fromhex'.
-	(logchar): Use fromhex.
-
-2015-06-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* server.c (handle_qxfer_libraries): Set `version' attribute for
-	<library-list>.
-
-2015-06-10  Gary Benson  <gbenson@redhat.com>
-
-	* target.h (struct target_ops) <multifs_open>: New field.
-	<multifs_unlink>: Likewise.
-	<multifs_readlink>: Likewise.
-	* linux-low.c (nat/linux-namespaces.h): New include.
-	(linux_target_ops): Initialize the_target->multifs_open,
-	the_target->multifs_unlink and the_target->multifs_readlink.
-	* hostio.h (hostio_handle_new_gdb_connection): New declaration.
-	* hostio.c (hostio_fs_pid): New static variable.
-	(hostio_handle_new_gdb_connection): New function.
-	(handle_setfs): Likewise.
-	(handle_open): Use the_target->multifs_open as appropriate.
-	(handle_unlink): Use the_target->multifs_unlink as appropriate.
-	(handle_readlink): Use the_target->multifs_readlink as
-	appropriate.
-	(handle_vFile): Handle vFile:setfs packets.
-	* server.c (handle_query): Call hostio_handle_new_gdb_connection
-	after target_handle_new_gdb_connection.
-
-2015-06-10  Gary Benson  <gbenson@redhat.com>
-
-	* configure.ac (AC_CHECK_FUNCS): Add setns.
-	* config.in: Regenerate.
-	* configure: Likewise.
-	* Makefile.in (SFILES): Add nat/linux-namespaces.c.
-	(linux-namespaces.o): New rule.
-	* configure.srv (srv_linux_obj): Add linux-namespaces.o.
-
-2015-06-09  Gary Benson <gbenson@redhat.com>
-
-	* hostio.c (handle_open): Process mode argument with
-	fileio_to_host_mode.
-
-2015-06-01  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-s390-low.c (PTRACE_GETREGSET, PTRACE_SETREGSET): Remove.
-	* linux-x86-low.c: Likewise.
-
-2015-05-28  Don Breazeal  <donb@codesourcery.com>
-
-	* linux-low.c (handle_extended_wait): Initialize
-	thread_info.last_resume_kind for new fork children.
-
-2015-05-15  Pedro Alves  <palves@redhat.com>
-
-	* target.h (target_handle_new_gdb_connection): Rewrite using if
-	wrapped in do/while.
-
-2015-05-14  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: Add prfpregset_t BFD_HAVE_SYS_PROCFS_TYPE check.
-	* configure, config.in: Regenerate.
-	* gdb_proc_service.h [HAVE_PRFPREGSET_T] (prfpregset_t):
-	Declare typedef.
-
-2015-05-12  Don Breazeal  <donb@codesourcery.com>
-
-	* linux-low.c (handle_extended_wait): Handle PTRACE_EVENT_FORK and
-	PTRACE_EVENT_VFORK_DONE.
-	(linux_low_ptrace_options, extended_event_reported): Add vfork
-	events.
-	* remote-utils.c (prepare_resume_reply): New stop reasons "vfork"
-	and "vforkdone" for RSP 'T' Stop Reply Packet.
-	* server.h (report_vfork_events): Declare
-	global variable.
-
-2015-05-12  Don Breazeal  <donb@codesourcery.com>
-
-	* linux-aarch64-low.c (aarch64_linux_new_fork): New function.
-	(the_low_target) <new_fork>: Initialize new member.
-	* linux-arm-low.c (arm_new_fork): New function.
-	(the_low_target) <new_fork>: Initialize new member.
-	* linux-low.c (handle_extended_wait): Call new target function
-	new_fork.
-	* linux-low.h (struct linux_target_ops) <new_fork>: New member.
-	* linux-mips-low.c (mips_add_watchpoint): New function
-	extracted from mips_insert_point.
-	(the_low_target) <new_fork>: Initialize new member.
-	(mips_linux_new_fork): New function.
-	(mips_insert_point): Call mips_add_watchpoint.
-	* linux-x86-low.c (x86_linux_new_fork): New function.
-	(the_low_target) <new_fork>: Initialize new member.
-
-2015-05-12  Don Breazeal  <donb@codesourcery.com>
-
-	* linux-low.c (handle_extended_wait): Implement return value,
-	rename argument 'event_child' to 'event_lwp', handle
-	PTRACE_EVENT_FORK, call internal_error for unrecognized event.
-	(linux_low_ptrace_options): New function.
-	(linux_low_filter_event): Call linux_low_ptrace_options,
-	use different argument fo linux_enable_event_reporting,
-	use return value from handle_extended_wait.
-	(extended_event_reported): New function.
-	(linux_wait_1): Call extended_event_reported and set
-	status to report fork events.
-	(linux_write_memory): Add pid to debug message.
-	(reset_lwp_ptrace_options_callback): New function.
-	(linux_handle_new_gdb_connection): New function.
-	(linux_target_ops): Initialize new structure member.
-	* linux-low.h (struct lwp_info) <waitstatus>: New member.
-	* lynx-low.c: Initialize new structure member.
-	* remote-utils.c (prepare_resume_reply): Implement stop reason
-	"fork" for "T" stop message.
-	* server.c (handle_query): Call handle_new_gdb_connection.
-	* server.h (report_fork_events): Declare global flag.
-	* target.h (struct target_ops) <handle_new_gdb_connection>:
-	New member.
-	(target_handle_new_gdb_connection): New macro.
-	* win32-low.c: Initialize new structure member.
-
-2015-05-12  Don Breazeal  <donb@codesourcery.com>
-
-	* mem-break.c (APPEND_TO_LIST): Define macro.
-	(clone_agent_expr): New function.
-	(clone_one_breakpoint): New function.
-	(clone_all_breakpoints): New function.
-	* mem-break.h: Declare new functions.
-
-2015-05-12  Don Breazeal  <donb@codesourcery.com>
-
-	* linux-low.c (linux_supports_fork_events): New function.
-	(linux_supports_vfork_events): New function.
-	(linux_target_ops): Initialize new structure members.
-	(initialize_low): Call linux_check_ptrace_features.
-	* lynx-low.c (lynx_target_ops): Initialize new structure
-	members.
-	* server.c (report_fork_events, report_vfork_events):
-	New global flags.
-	(handle_query): Add new features to qSupported packet and
-	response.
-	(captured_main): Initialize new global variables.
-	* target.h (struct target_ops) <supports_fork_events>:
-	New member.
-	<supports_vfork_events>: New member.
-	(target_supports_fork_events): New macro.
-	(target_supports_vfork_events): New macro.
-	* win32-low.c (win32_target_ops): Initialize new structure
-	members.
-
-2015-05-12  Gary Benson <gbenson@redhat.com>
-
-	* server.c (handle_qxfer_exec_file): Use current process
-	if annex is empty.
-
-2015-05-08  Sandra Loosemore  <sandra@codesourcery.com>
-
-	* linux-nios2-low.c: Include elf/common.h.  Adjust comments.
-	Remove HAVE_PTRACE_GETREGS conditionals.
-	(nios2_regsets): Use PTRACE_GETREGSET and PTRACE_SETREGSET
-	instead of PTRACE_GETREGS and PTRACE_SETREGS.
-
-2015-05-08  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_supports_conditional_breakpoints): New
-	function.
-	(linux_target_ops): Install new target method.
-	* lynx-low.c (lynx_target_ops): Install NULL hook for
-	supports_conditional_breakpoints.
-	* nto-low.c (nto_target_ops): Likewise.
-	* spu-low.c (spu_target_ops): Likewise.
-	* win32-low.c (win32_target_ops): Likewise.
-	* server.c (handle_query): Check
-	target_supports_conditional_breakpoints.
-	* target.h (struct target_ops) <supports_conditional_breakpoints>:
-	New field.
-	(target_supports_conditional_breakpoints): New macro.
-
-2015-05-06  Pedro Alves  <palves@redhat.com>
-
-	PR server/18081
-	* server.c (start_inferior): If the process exits, mourn it.
-
-2015-04-21  Gary Benson <gbenson@redhat.com>
-
-	* hostio.c (fileio_open_flags_to_host): Factored out to
-	fileio_to_host_openflags in common/fileio.c.  Single use
-	updated.
-
-2015-04-17  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* linux-xtensa-low.c (xtensa_fill_gregset)
-	(xtensa_store_gregset): Check XCHAL_HAVE_LOOPS instead of
-	XCHAL_HAVE_LOOP.
-
-2015-04-17  Max Filippov  <jcmvbkbc@gmail.com>
-
-	* linux-xtensa-low.c (xtensa_usrregs_info): Remove.
-	(regs_info): Replace usrregs pointer with NULL.
-
-2015-04-17  Gary Benson  <gbenson@redhat.com>
-
-	* target.h (struct target_ops) <pid_to_exec_file>: New field.
-	* linux-low.c (linux_target_ops): Initialize pid_to_exec_file.
-	* server.c (handle_qxfer_exec_file): New function.
-	(qxfer_packets): Add exec-file entry.
-	(handle_query): Report qXfer:exec-file:read as supported packet.
-
-2015-04-14  Romain Naour <romain.naour@openwide.fr>  (tiny change)
-
-	* linux-low.c (linux_read_offsets): Remove get_thread_lwp.
-
-2015-04-09  Gary Benson <gbenson@redhat.com>
-
-	* hostio-errno.c (errno_to_fileio_error): Remove function.
-	Update caller to use remote_fileio_to_fio_error.
-
-2015-04-09  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-low.c (linux_insert_point): Call
-	insert_memory_breakpoint if TYPE is raw_bkpt_type_sw.
-	(linux_remove_point): Call remove_memory_breakpoint if type is
-	raw_bkpt_type_sw.
-	* linux-x86-low.c (x86_insert_point): Don't call
-	insert_memory_breakpoint.
-	(x86_remove_point): Don't call remove_memory_breakpoint.
-
-2015-04-01  Pedro Alves  <palves@redhat.com>
-	    Cleber Rosa  <crosa@redhat.com>
-
-	* server.c (gdbserver_usage): Reorganize and extend the usage
-	message.
-
-2015-03-24  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (check_stopped_by_breakpoint): Tweak debug log
-	output.  Also dump TRAP_TRACE.
-	(linux_low_filter_event): In debug output, distinguish a
-	resume_stop SIGSTOP from a delayed SIGSTOP.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_linux_new_thread): Moved to
-	nat/x86-linux.c.
-	(x86_linux_prepare_to_resume): Likewise.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (x86-linux-dregs.o): New rule.
-	* configure.srv: Add x86-linux-dregs.o to relevant targets.
-	* linux-x86-low.c: Include nat/x86-linux-dregs.h.
-	(u_debugreg_offset): Moved to nat/x86-linux-dregs.c.
-	(x86_linux_dr_get): Likewise.
-	(x86_linux_dr_set): Likewise.
-	(update_debug_registers_callback): Likewise.
-	(x86_linux_dr_set_addr): Likewise.
-	(x86_linux_dr_get_addr): Likewise.
-	(x86_linux_dr_set_control): Likewise.
-	(x86_linux_dr_get_control): Likewise.
-	(x86_linux_dr_get_status): Likewise.
-	(x86_linux_update_debug_registers): Likewise.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_linux_update_debug_registers):
-	New function, factored out from...
-	(x86_linux_prepare_to_resume): ...this.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_linux_dr_get): Update comments.
-	(x86_linux_dr_set): Likewise.
-	(update_debug_registers_callback): Likewise.
-	(x86_linux_dr_set_addr): Likewise.
-	(x86_linux_dr_get_addr): Likewise.
-	(x86_linux_dr_set_control): Likewise.
-	(x86_linux_dr_get_control): Likewise.
-	(x86_linux_dr_get_status): Likewise.
-	(x86_linux_prepare_to_resume): Likewise.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_linux_dr_get): Add assertion.
-	Use perror_with_name.  Pass string through gettext.
-	(x86_linux_dr_set): Likewise.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_dr_low_set_addr): Rename to...
-	(x86_linux_dr_set_addr): ...this.
-	(x86_dr_low_get_addr): Rename to...
-	(x86_linux_dr_get_addr): ...this.
-	(x86_dr_low_set_control): Rename to...
-	(x86_linux_dr_set_control): ...this.
-	(x86_dr_low_get_control): Rename to...
-	(x86_linux_dr_get_control): ...this.
-	(x86_dr_low_get_status): Rename to...
-	(x86_linux_dr_get_status): ...this.
-	(x86_dr_low): Update with new function names.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (x86-linux.o): New rule.
-	* configure.srv: Add x86-linux.o to relevant targets.
-	* linux-low.c (lwp_set_arch_private_info): New function.
-	(lwp_arch_private_info): Likewise.
-	* linux-x86-low.c: Include nat/x86-linux.h.
-	(arch_lwp_info): Removed structure.
-	(update_debug_registers_callback):
-	Use lwp_set_debug_registers_changed.
-	(x86_linux_prepare_to_resume): Use lwp_debug_registers_changed
-	and lwp_set_debug_registers_changed.
-	(x86_linux_new_thread): Use lwp_set_debug_registers_changed.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.h (linux_target_ops) <new_thread>: Changed signature.
-	* linux-arm-low.c (arm_new_thread): Likewise.
-	* linux-aarch64-low.c (aarch64_linux_new_thread): Likewise.
-	* linux-mips-low.c (mips_linux_new_thread): Likewise.
-	* linux-x86-low.c (x86_linux_new_thread): Likewise.
-	* linux-low.c (add_lwp): Update the_low_target.new_thread call.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.c (ptid_of_lwp): New function.
-	(lwp_is_stopped): Likewise.
-	(lwp_stop_reason): Likewise.
-	* linux-x86-low.c (update_debug_registers_callback):
-	Use lwp_is_stopped.
-	(x86_linux_prepare_to_resume): Use ptid_of_lwp and
-	lwp_stop_reason.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.h (linux_stop_lwp): Remove declaration.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.h: Include nat/linux-nat.h.
-	* linux-low.c (iterate_over_lwps_args): New structure.
-	(iterate_over_lwps_filter): New function.
-	(iterate_over_lwps): Likewise.
-	* linux-x86-low.c (update_debug_registers_callback):
-	Update signature to what iterate_over_lwps expects.
-	Remove PID check that iterate_over_lwps now performs.
-	(x86_dr_low_set_addr): Use iterate_over_lwps.
-	(x86_dr_low_set_control): Likewise.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_debug_reg_state): New function.
-	(x86_linux_prepare_to_resume): Use the above.
-
-2015-03-24  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.c (current_lwp_ptid): New function.
-	* linux-x86-low.c: Include nat/linux-nat.h.
-	(x86_dr_low_get_addr): Use current_lwp_ptid.
-	(x86_dr_low_get_control): Likewise.
-	(x86_dr_low_get_status): Likewise.
-
-2015-03-20  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (cmd_qtstatus): Make "str" const.
-
-2015-03-20  Pedro Alves  <palves@redhat.com>
-
-	* server.c (handle_general_set): Make "req_str" const.
-
-2015-03-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_resume_one_lwp): Rename to ...
-	(linux_resume_one_lwp_throw): ... this.  Don't handle ESRCH here,
-	instead call perror_with_name.
-	(check_ptrace_stopped_lwp_gone): New function.
-	(linux_resume_one_lwp): Reimplement as wrapper around
-	linux_resume_one_lwp_throw that swallows errors if the LWP is
-	gone.
-
-2015-03-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (count_events_callback, select_event_lwp_callback):
-	No longer check whether the thread has resume_stop as last resume
-	kind.
-
-2015-03-19 Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (count_events_callback, select_event_lwp_callback):
-	Use the lwp's status_pending_p field, not the thread's.
-
-2015-03-19  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (select_event_lwp_callback): Update comments to
-	no longer mention SIGTRAP.
-
-2015-03-18  Gary Benson  <gbenson@redhat.com>
-
-	* server.c (handle_query): Do not report vFile:fstat as supported.
-
-2015-03-11  Gary Benson  <gbenson@redhat.com>
-
-	* hostio.c (sys/types.h): New include.
-	(sys/stat.h): Likewise.
-	(common-remote-fileio.h): Likewise.
-	(handle_fstat): New function.
-	(handle_vFile): Handle vFile:fstat packets.
-
-2015-03-11  Gary Benson  <gbenson@redhat.com>
-
-	* configure.ac (AC_CHECK_MEMBERS): Add checks for
-	struct stat.st_blocks and struct stat.st_blksize.
-	* configure: Regenerate.
-	* config.in: Likewise.
-	* Makefile.in (SFILES): Add common/common-remote-fileio.c.
-	(OBS): Add common-remote-fileio.o.
-	(common-remote-fileio.o): New rule.
-
-2015-03-09  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (gdb_agent_helper_thread): Cast '&sockaddr' to
-	'struct sockaddr' pointer in 'accept' call.
-
-2015-03-09  Pedro Alves  <palves@redhat.com>
-
-	Revert:
-	2015-03-07  Pedro Alves  <palves@redhat.com>
-	* gdbreplay.c: No longer include <netinet/in.h>, <sys/socket.h>,
-	or <winsock2.h> here.  Instead include "gdb_socket.h".
-	(remote_open): Use union gdb_sockaddr_u.
-	* remote-utils.c: No longer include <netinet/in.h>, <sys/socket.h>
-	or <winsock2.h> here.  Instead include "gdb_socket.h".
-	(handle_accept_event, remote_prepare): Use union gdb_sockaddr_u.
-	* tracepoint.c: Include "gdb_socket.h" instead of <sys/socket.h>
-	or <sys/un.h>.
-	(init_named_socket, gdb_agent_helper_thread): Use union
-	gdb_sockaddr_u.
-
-2015-03-07  Pedro Alves  <palves@redhat.com>
-
-	* configure.ac (build_warnings): Move
-	-Wdeclaration-after-statement to the C-specific set.
-	* configure: Regenerate.
-
-2015-03-07  Pedro Alves  <palves@redhat.com>
-
-	* gdbreplay.c: No longer include <netinet/in.h>, <sys/socket.h>,
-	or <winsock2.h> here.  Instead include "gdb_socket.h".
-	(remote_open): Use union gdb_sockaddr_u.
-	* remote-utils.c: No longer include <netinet/in.h>, <sys/socket.h>
-	or <winsock2.h> here.  Instead include "gdb_socket.h".
-	(handle_accept_event, remote_prepare): Use union gdb_sockaddr_u.
-	* tracepoint.c: Include "gdb_socket.h" instead of <sys/socket.h>
-	or <sys/un.h>.
-	(init_named_socket, gdb_agent_helper_thread): Use union
-	gdb_sockaddr_u.
-
-2015-03-07  Pedro Alves  <palves@redhat.com>
-
-	Adjust all callers of TRY_CATCH to use TRY/CATCH/END_CATCH
-	instead.
-
-2015-03-06  Yao Qi  <yao.qi@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_insert_point): Use
-	show_debug_regs as a boolean.
-	(aarch64_remove_point): Likewise.
-
-2015-03-05  Pedro Alves  <palves@redhat.com>
-
-	* lynx-low.c (lynx_target_ops): Install NULL hooks for
-	stopped_by_sw_breakpoint, supports_stopped_by_sw_breakpoint,
-	stopped_by_hw_breakpoint, supports_stopped_by_hw_breakpoint.
-	* nto-low.c (nto_target_ops): Likewise.
-	* spu-low.c (spu_target_ops): Likewise.
-	* win32-low.c (win32_target_ops): Likewise.
-
-2015-03-04  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (check_stopped_by_breakpoint) [USE_SIGTRAP_SIGINFO]:
-	Decide whether a breakpoint triggered based on the SIGTRAP's
-	siginfo.si_code.
-	(thread_still_has_status_pending_p) [USE_SIGTRAP_SIGINFO]: Don't check whether a
-	breakpoint is inserted if relying on SIGTRAP's siginfo.si_code.
-	(linux_low_filter_event): Check for breakpoints before checking
-	watchpoints.
-	(linux_wait_1): Don't re-increment the PC if relying on SIGTRAP's
-	siginfo.si_code.
-	(linux_stopped_by_sw_breakpoint)
-	(linux_supports_stopped_by_sw_breakpoint)
-	(linux_stopped_by_hw_breakpoint)
-	(linux_supports_stopped_by_hw_breakpoint): New functions.
-	(linux_target_ops): Install new target methods.
-
-2015-03-04  Pedro Alves  <palves@redhat.com>
-
-	* remote-utils.c (prepare_resume_reply): Report swbreak/hbreak.
-	* server.c (swbreak_feature, hwbreak_feature): New globals.
-	(handle_query) <qSupported>: Handle "swbreak+" and "hwbreak+".
-	(captured_main): Clear swbreak_feature and hwbreak_feature.
-	* server.h (swbreak_feature, hwbreak_feature): Declare.
-	* target.h (struct target_ops) <stopped_by_sw_breakpoint,
-	supports_stopped_by_sw_breakpoint, stopped_by_hw_breakpoint,
-	supports_stopped_by_hw_breakpoint>: New fields.
-	(target_supports_stopped_by_sw_breakpoint)
-	(target_stopped_by_sw_breakpoint)
-	(target_supports_stopped_by_hw_breakpoint)
-	(target_stopped_by_hw_breakpoint): Declare.
-
-2015-03-04  Pedro Alves  <palves@redhat.com>
-
-	enum lwp_stop_reason -> enum target_stop_reason
-	* linux-low.c (check_stopped_by_breakpoint): Adjust.
-	(thread_still_has_status_pending_p, check_stopped_by_watchpoint)
-	(linux_wait_1, stuck_in_jump_pad_callback)
-	(move_out_of_jump_pad_callback, linux_resume_one_lwp)
-	(linux_stopped_by_watchpoint):
-	* linux-low.h (enum lwp_stop_reason): Delete.
-	(struct lwp_info) <stop_reason>: Now an enum target_stop_reason.
-	* linux-x86-low.c (x86_linux_prepare_to_resume): Adjust.
-
-2015-03-04  Yao Qi  <yao.qi@linaro.org>
-
-	* Makefile.in (SFILES): Add linux-aarch64-low.c.
-
-2015-03-03  Gary Benson  <gbenson@redhat.com>
-
-	* hostio.c (handle_vFile): Fix prefix lengths.
-
-2015-03-03  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* linux-low.c (linux_low_enable_btrace): Do not overwrite non-zero
-	ptr_bits.
-
-2015-03-02  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* Makefile.in (s390-vx-linux64.c, s390-tevx-linux64.c)
-	(s390x-vx-linux64.c, s390x-tevx-linux64.c): New rules.
-	(clean): Add "rm -f" for above C files.
-	* configure.srv (srv_regobj): Add s390-vx-linux64.o,
-	s390-tevx-linux64.o, s390x-vx-linux64.o, and s390x-tevx-linux64.o.
-	(srv_xmlfiles): Add s390-vx-linux64.xml, s390-tevx-linux64.xml,
-	s390x-vx-linux64.xml, s390x-tevx-linux64.xml, and s390-vx.xml.
-	* linux-s390-low.c (HWCAP_S390_VX): New macro.
-	(init_registers_s390_vx_linux64, init_registers_s390_tevx_linux64)
-	(init_registers_s390x_vx_linux64)
-	(init_registers_s390x_tevx_linux64)
-	(tdesc_s390_vx_linux64, tdesc_s390_tevx_linux64)
-	(tdesc_s390x_vx_linux64, tdesc_s390x_tevx_linux64): New extern
-	declarations.
-	(s390_fill_vxrs_low, s390_store_vxrs_low, s390_fill_vxrs_high)
-	(s390_store_vxrs_high): New functions.
-	(s390_regsets): Add entries for NT_S390_VXRS_LOW and
-	NT_S390_VXRS_HIGH.
-	(s390_arch_setup): Add logic for selecting one of the new target
-	descriptions.  Activate the new vector regsets if applicable.
-	(initialize_low_arch): Also invoke init_registers_s390_vx_linux64,
-	init_registers_s390_tevx_linux64, init_registers_s390x_vx_linux64,
-	and init_registers_s390x_tevx_linux64.
-
-2015-03-01  Pedro Alves  <palves@redhat.com>
-
-	* linux-i386-ipa.c (gdb_agent_get_raw_reg): Constify 'raw_regs'
-	parameter.
-
-2015-02-27  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (u_debugreg_offset): New function.
-	(x86_linux_dr_get, x86_linux_dr_set): Use it.
-
-2015-02-27  Pedro Alves  <palves@redhat.com>
-
-	* gdb_proc_service.h: Wrap with EXTERN_C_PUSH/EXTERN_C_POP.
-	[!HAVE_PROC_SERVICE_H] (struct ps_prochandle): Forward declare.
-	[!HAVE_PROC_SERVICE_H] (ps_pdread, ps_pdwrite, ps_ptread)
-	ps_ptwrite, ps_lgetregs, ps_lsetregs, ps_lgetfpregs)
-	(ps_lsetfpregs, ps_getpid)
-	(ps_get_thread_area, ps_pglobal_lookup, ps_pstop, ps_pcontinue)
-	(ps_lstop, ps_lcontinue, ps_lgetxregsize, ps_lgetxregs)
-	(ps_lsetxregs, ps_plog): Declare.
-
-2015-02-27  Pedro Alves  <palves@redhat.com>
-
-	* linux-amd64-ipa.c (gdb_agent_get_raw_reg): Use
-	IP_AGENT_EXPORT_FUNC.
-	* linux-i386-ipa.c (gdb_agent_get_raw_reg): Use
-	IP_AGENT_EXPORT_FUNC.
-	* tracepoint.c (ATTR_USED, ATTR_NOINLINE, ATTR_CONSTRUCTOR)
-	(IP_AGENT_EXPORT): Delete.
-	(gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end)
-	(gdb_trampoline_buffer, gdb_trampoline_buffer_end)
-	(gdb_trampoline_buffer_error, collecting, gdb_collect)
-	(stop_tracing, flush_trace_buffer, about_to_request_buffer_space)
-	(trace_buffer_is_full, stopping_tracepoint, expr_eval_result)
-	(error_tracepoint, tracepoints, tracing, trace_buffer_ctrl)
-	(trace_buffer_ctrl_curr, trace_buffer_lo, trace_buffer_hi)
-	(traceframe_read_count, traceframe_write_count)
-	(traceframes_created, trace_state_variables, get_raw_reg)
-	(get_trace_state_variable_value, set_trace_state_variable_value)
-	(ust_loaded, helper_thread_id, cmd_buf): Use
-	IPA_SYM_EXPORTED_NAME.
-	(stop_tracing, flush_trace_buffer): Use IP_AGENT_EXPORT_FUNC.
-	(tracepoints) Use IP_AGENT_EXPORT_VAR.
-	(stopping_tracepoint, trace_buffer_is_full, expr_eval_result): Use
-	IP_AGENT_EXPORT_VAR and wrap in EXTERN_C_PUSH/EXTERN_C_POP.
-	(last_tracepoint): Move into !IN_PROCESS_AGENT block.
-	(error_tracepoint): Use IP_AGENT_EXPORT_VAR and wrap in
-	EXTERN_C_PUSH/EXTERN_C_POP.
-	(trace_state_variables): Use IP_AGENT_EXPORT_VAR.
-	(trace_buffer_lo, trace_buffer_hi): Use IP_AGENT_EXPORT_VAR and
-	wrap in EXTERN_C_PUSH/EXTERN_C_POP.
-	(trace_buffer_ctrl, trace_buffer_ctrl_curr)
-	(traceframe_write_count, traceframe_read_count)
-	(traceframes_created, tracing): Use IP_AGENT_EXPORT_VAR.
-	(about_to_request_buffer_space, get_trace_state_variable_value)
-	(set_trace_state_variable_value): Use IP_AGENT_EXPORT_FUNC.
-	(collecting): Use IP_AGENT_EXPORT_VAR and wrap in
-	EXTERN_C_PUSH/EXTERN_C_POP.
-	(gdb_collect): Use IP_AGENT_EXPORT_FUNC.
-	(ust_loaded, cmd_buf): Use IP_AGENT_EXPORT_VAR.
-	(helper_thread_id, gdb_agent_capability): Use IP_AGENT_EXPORT_VAR
-	and wrap in EXTERN_C_PUSH/EXTERN_C_POP.
-	(gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end)
-	(gdb_trampoline_buffer, gdb_trampoline_buffer_end)
-	(gdb_trampoline_buffer_error): Use IP_AGENT_EXPORT_VAR.
-	* tracepoint.h (ATTR_USED, ATTR_NOINLINE, EXPORTED_SYMBOL):
-	Define.
-	(IP_AGENT_EXPORT_FUNC, IP_AGENT_EXPORT_VAR)
-	(IP_AGENT_EXPORT_VAR_DECL): Define.
-	(tracing): Declare.
-	(gdb_agent_get_raw_reg): Declare.
-
-2015-02-27  Tom Tromey  <tromey@redhat.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	Rename symbols whose names are reserved C++ keywords throughout.
-
-2015-02-27  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (COMPILER): New, get it from autoconf.
-	(CXX): Get from autoconf instead.
-	(COMPILE.pre): Use COMPILER.
-	(CC-LD): Rename to ...
-	(CC_LD): ... this.  Use COMPILER.
-	(gdbserver$(EXEEXT), gdbreplay$(EXEEXT), $(IPA_LIB)): Adjust.
-	(CXX_FOR_TARGET): Default to g++ instead of gcc.
-	* acinclude.m4: Include build-with-cxx.m4.
-	* configure.ac: Call AC_PROG_CXX and GDB_AC_BUILD_WITH_CXX.
-	Disable -Werror by default if building in C++ mode.
-	(build_warnings): Add -Wno-sign-compare, -Wno-write-strings and
-	-Wno-narrowing in C++ mode. Run supported-warning-flags tests with
-	the C++ compiler.  Save/restore CXXFLAGS too.
-	* configure: Regenerate.
-
-2015-02-27  Pedro Alves  <palves@redhat.com>
-
-	* acinclude.m4: Include libiberty.m4.
-	* configure.ac: Call libiberty_INIT.
-	* config.in, configure: Regenerate.
-
-2015-02-26  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_wait_1): When incrementing the PC past a
-	program breakpoint always use the_low_target.breakpoint_len as
-	increment, rather than the maximum between that and
-	the_low_target.decr_pc_after_break.
-
-2015-02-23  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (check_stopped_by_breakpoint): Don't check if the
-	thread was doing a step-over; always adjust the PC if
-	we stepped over a permanent breakpoint.
-	(linux_wait_1): If we stepped over breakpoint that was on top of a
-	permanent breakpoint, manually advance the PC past it.
-
-2015-02-23  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (REGSIZE): Define in both 32-bit and 64-bit
-	modes.
-	(x86_fill_gregset, x86_store_gregset): Use it when handling
-	$orig_eax.
-
-2015-02-20  Pedro Alves  <palves@redhat.com>
-
-	* thread-db.c: Include "nat/linux-procfs.h".
-	(thread_db_init): Skip listing new threads if the kernel supports
-	PTRACE_EVENT_CLONE and /proc/PID/task/ is accessible.
-
-2015-02-20  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (status_pending_p_callback): Use ptid_match.
-
-2015-02-19  Antoine Tremblay  <antoine.tremblay@ericsson.com>
-
-	PR breakpoints/16812
-	* linux-low.c (wstatus_maybe_breakpoint): Remove.
-	(linux_low_filter_event): Update wstatus_maybe_breakpoint name.
-	(linux_wait_1): Report SIGTRAP,SIGILL,SIGSEGV.
-
-2015-02-10  Antoine Tremblay <antoine.tremblay@ericsson.com>
-
-	PR breakpoints/15956
-	* tracepoint.c (cmd_qtinit): Add check for current_thread.
-
-2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* linux-low.c (linux_low_btrace_conf): Print size.
-	* server.c (handle_btrace_conf_general_set): New.
-	(hanle_general_set): Call handle_btrace_conf_general_set.
-	(handle_query): Report Qbtrace-conf:bts:size as supported.
-
-2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* linux-low.c (linux_low_enable_btrace): Update parameters.
-	(linux_low_btrace_conf): New.
-	(linux_target_ops)<to_btrace_conf>: Initialize.
-	* server.c (current_btrace_conf): New.
-	(handle_btrace_enable): Rename to ...
-	(handle_btrace_enable_bts): ... this.  Pass &current_btrace_conf
-	to target_enable_btrace.  Update comment.  Update users.
-	(handle_qxfer_btrace_conf): New.
-	(qxfer_packets): Add btrace-conf entry.
-	(handle_query): Report qXfer:btrace-conf:read as supported packet.
-	* target.h (target_ops)<enable_btrace>: Update parameters and comment.
-	(target_ops)<read_btrace_conf>: New.
-	(target_enable_btrace): Update parameters.
-	(target_read_btrace_conf): New.
-
-2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* server.c (handle_btrace_general_set): Remove call to
-	target_supports_btrace.
-	(supported_btrace_packets): New.
-	(handle_query): Call supported_btrace_packets.
-	* target.h: include btrace-common.h.
-	(btrace_target_info): Removed.
-	(supports_btrace, target_supports_btrace): Update parameters.
-
-2015-02-09  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* Makefile.in (SFILES): Add common/btrace-common.c.
-	(OBS): Add common/btrace-common.o.
-	(btrace-common.o): Add build rules.
-	* linux-low: Include btrace-common.h.
-	(linux_low_read_btrace): Use struct btrace_data.  Call
-	btrace_data_init and btrace_data_fini.
-
-2015-02-06  Pedro Alves  <palves@redhat.com>
-
-	* thread-db.c (find_new_threads_callback): Add debug output.
-
-2015-02-04  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Don't resume LWPs here.
-	(resume_stopped_resumed_lwps): New function.
-	(linux_wait_for_event_filtered): Use it.
-
-2015-01-15  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (SFILES): Add linux-personality.c.
-	(linux-personality.o): New rule.
-	* configure.srv (srv_linux_obj): Add linux-personality.o to the
-	list of objects to be built.
-	* linux-low.c: Include nat/linux-personality.h.
-	(linux_create_inferior): Remove code to disable address space
-	randomization (moved to ../nat/linux-personality.c).  Create
-	cleanup to disable address space randomization.
-
-2015-01-15  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* Makefile.in (posix-strerror.o): New rule.
-	(mingw-strerror.o): Likewise.
-	* configure: Regenerated.
-	* configure.ac: Source file ../common/common.host.  Initialize new
-	variable srv_host_obs.  Add srv_host_obs to GDBSERVER_DEPFILES.
-
-2015-01-14  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (SFILES): Add nat/ppc-linux.c.
-	(ppc-linux.o): New rule.
-	* configure.srv (powerpc*-*-linux*): Add ppc-linux.o.
-	* configure.ac: AC_CHECK_FUNCS(getauxval).
-	* config.in: Re-generated.
-	* configure: Re-generated.
-	* linux-ppc-low.c (ppc_arch_setup) [__powerpc64__]: Call
-	ppc64_64bit_inferior_p
-
-2015-01-14  Yao Qi  <yao@codesourcery.com>
-
-	* linux-ppc-low.c: Include "nat/ppc-linux.h".
-	 (PPC_FEATURE_HAS_VSX): Move to nat/ppc-linux.h.
-	(PPC_FEATURE_HAS_ALTIVEC,  PPC_FEATURE_HAS_SPE): Likewise.
-	(PT_ORIG_R3, PT_TRAP): Likewise.
-	(PTRACE_GETVSXREGS, PTRACE_SETVSXREGS): Likewise.
-	(PTRACE_GETVRREGS, PTRACE_SETVRREGS): Likewise.
-	(PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): Likewise.
-
-2015-01-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* i387-fp.c (i387_cache_to_xsave): In look over
-	num_avx512_zmmh_high_registers, replace use of struct i387_xsave
-	zmmh_low_space field by use of zmmh_high_space.
-
-2015-01-09  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (step_over_bkpt): Move higher up in the file.
-	(handle_extended_wait): Don't store the stop_pc here.
-	(get_stop_pc): Adjust comments and rename to ...
-	(check_stopped_by_breakpoint): ... this.  Record whether the LWP
-	stopped for a software breakpoint or hardware breakpoint.
-	(thread_still_has_status_pending_p): New function.
-	(status_pending_p_callback): Use
-	thread_still_has_status_pending_p.  If the event is no longer
-	interesting, resume the LWP.
-	(handle_tracepoints): Add assert.
-	(maybe_move_out_of_jump_pad): Remove cancel_breakpoints call.
-	(wstatus_maybe_breakpoint): New function.
-	(cancel_breakpoint): Delete function.
-	(check_stopped_by_watchpoint): New function, factored out from
-	linux_low_filter_event.
-	(lp_status_maybe_breakpoint): Delete function.
-	(linux_low_filter_event): Remove filter_ptid argument.
-	Leave thread group exits pending here.	Store the LWP's stop PC.
-	Always leave events pending.
-	(linux_wait_for_event_filtered): Pull all events out of the
-	kernel, and leave them all pending.
-	(count_events_callback, select_event_lwp_callback): Consider all
-	events.
-	(cancel_breakpoints_callback, linux_cancel_breakpoints): Delete.
-	(select_event_lwp): Only give preference to the stepping LWP in
-	all-stop mode.	Adjust comments.
-	(ignore_event): New function.
-	(linux_wait_1): Delete 'retry' label.  Use ignore_event.  Remove
-	references to cancel_breakpoints.  Adjust to renames.  Also give
-	equal priority to all LWPs that have had events in non-stop mode.
-	If reporting a software breakpoint event, unadjust the LWP's PC.
-	(linux_wait): If linux_wait_1 returned an ignored event, retry.
-	(stuck_in_jump_pad_callback, move_out_of_jump_pad_callback):
-	Adjust.
-	(linux_resume_one_lwp): Store the LWP's PC.  Adjust.
-	(resume_status_pending_p): Use thread_still_has_status_pending_p.
-	(linux_stopped_by_watchpoint): Adjust.
-	(linux_target_ops): Remove reference to linux_cancel_breakpoints.
-	* linux-low.h (enum lwp_stop_reason): New.
-	(struct lwp_info) <stop_pc>: Adjust comment.
-	<stopped_by_watchpoint>: Delete field.
-	<stop_reason>: New field.
-	* linux-x86-low.c (x86_linux_prepare_to_resume): Adjust.
-	* mem-break.c (software_breakpoint_inserted_here)
-	(hardware_breakpoint_inserted_here): New function.
-	* mem-break.h (software_breakpoint_inserted_here)
-	(hardware_breakpoint_inserted_here): Declare.
-	* target.h (struct target_ops) <cancel_breakpoints>: Remove field.
-	(cancel_breakpoints): Delete.
-	* tracepoint.c (clear_installed_tracepoints, stop_tracing)
-	(upload_fast_traceframes): Remove references to
-	cancel_breakpoints.
-
-2015-01-09  Pedro Alves  <palves@redhat.com>
-
-	* thread-db.c (find_new_threads_callback): Ignore thread if the
-	kernel thread ID is -1.
-
-2015-01-09  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_attach_fail_reason_string): Move to
-	nat/linux-ptrace.c, and rename.
-	(linux_attach_lwp): Update comment.
-	(attach_proc_task_lwp_callback): New function.
-	(linux_attach): Adjust to rename and use
-	linux_proc_attach_tgid_threads.
-	(linux_attach_fail_reason_string): Delete declaration.
-
-2015-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c (gdbreplay_version): Update copyright year to 2015.
-	* server.c (gdbserver_version): Likewise.
-
-2014-12-29  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* remote-utils.c: Include ctype.h.
-	(input_interrupt): Explicitly handle the case when the char
-	received is the NUL byte.  Improve the printing of non-ASCII
-	characters.
-
-2014-12-16  Joel Brobecker  <brobecker@adacore.com>
-
-	* linux-low.c (linux_low_filter_event): Update call to
-	linux_enable_event_reporting following the addition of
-	a new parameter to that function.
-
-2014-12-16  Catalin Udma  <catalin.udma@freescale.com>
-
-	PR server/17457
-	* linux-aarch64-low.c (AARCH64_FPSR_REGNO): New define.
-	(AARCH64_FPCR_REGNO): Likewise.
-	(AARCH64_NUM_REGS): Update to include fpsr/fpcr registers.
-	(aarch64_fill_fpregset): Add missing fpsr/fpcr registers.
-	(aarch64_store_fpregset): Likewise.
-
-2014-12-15  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_resume): Use PTRACE_SINGLESTEP_ONE if N == 1.
-	Remove FIXME comment about assumption about N.
-
-2014-12-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: If large-file support is disabled in GDBserver,
-	pass --disable-largefile to ACX_CONFIGURE_DIR call for "gnulib".
-	* configure: Regenerate.
-
-2014-12-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-low.c (regsets_fetch_inferior_registers): Suppress the
-	warning upon ENODATA from ptrace.
-	* linux-s390-low.c (s390_store_tdb): New.
-	(s390_regsets): Add regset for NT_S390_TDB.
-
-2014-12-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-low.c (regsets_store_inferior_registers): Skip regsets
-	without a fill_function.
-	* linux-s390-low.c (s390_fill_last_break): Remove.
-	(s390_regsets): Set fill_function to NULL for NT_S390_LAST_BREAK.
-	(s390_arch_setup): Use regset's size instead of fill_function for
-	loop end condition.
-
-2014-12-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-low.c (regsets_fetch_inferior_registers): Do not invoke
-	the regset's store function when ptrace returned an error.
-	* regcache.c (get_thread_regcache): Invalidate register cache
-	before fetching inferior's registers.
-
-2014-12-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-low.c (regsets_fetch_inferior_registers): Rephrase
-	while-loop as for-loop.
-	(regsets_store_inferior_registers): Likewise.
-
-2014-11-28  Yao Qi  <yao@codesourcery.com>
-
-	* configure.ac(AC_CHECK_FUNCS): Remove readlink.
-	* config.in, configure: Re-generate.
-	* hostio.c (handle_unlink): Remove code checking HAVE_READLINK
-	is defined.
-
-2014-11-21  Yao Qi  <yao@codesourcery.com>
-
-	* configure.ac: Don't invoke AC_FUNC_ALLOCA.
-	(AC_CHECK_HEADERS): Remove malloc.h.
-	* configure: Re-generated.
-	* config.in: Re-generated.
-	* server.h: Don't include alloca.h and malloc.h.
-	* gdbreplay.c: Don't check HAVE_ALLOCA_H is defined.
-	Don't include malloc.h.
-
-2014-11-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_write_memory): Put lynx_read_memory and
-	corresponding ERRNO check in same block.
-
-2014-11-12  Pedro Alves  <palves@redhat.com>
-
-	* server.c (cont_thread): Update comment.
-	(start_inferior, attach_inferior): No longer clear cont_thread.
-	(handle_v_cont): No longer set cont_thread.
-	(captured_main): Clear cont_thread each time a GDB connects.
-
-2014-11-12  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_wait_1): Don't force a wait for the Hc
-	thread, and don't resume all threads if the Hc thread has exited.
-
-2014-11-12  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_request_interrupt): Always send a SIGINT to
-	the process group instead of to a specific LWP.
-
-2014-10-15  Pedro Alves  <palves@redhat.com>
-
-	PR server/17487
-	* win32-arm-low.c (arm_set_thread_context): Remove current_event
-	parameter.
-	(arm_set_thread_context): Delete.
-	(the_low_target): Adjust.
-	* win32-i386-low.c (debug_registers_changed)
-	(debug_registers_used): Delete.
-	(update_debug_registers_callback): New function.
-	(x86_dr_low_set_addr, x86_dr_low_set_control): Mark all threads as
-	needing to update their debug registers.
-	(win32_get_current_dr): New function.
-	(x86_dr_low_get_addr, x86_dr_low_get_control)
-	(x86_dr_low_get_status): Fetch the debug register from the thread
-	record's context.
-	(i386_initial_stuff): Adjust.
-	(i386_get_thread_context): Remove current_event parameter.  Don't
-	clear debug_registers_changed nor copy DR values to
-	debug_reg_state.
-	(i386_set_thread_context): Delete.
-	(i386_prepare_to_resume): New function.
-	(i386_thread_added): Mark the thread as needing to update irs
-	debug registers.
-	(the_low_target): Remove i386_set_thread_context and install
-	i386_prepare_to_resume.
-	* win32-low.c (win32_get_thread_context): Adjust.
-	(win32_set_thread_context): Use SetThreadContext
-	directly.
-	(win32_prepare_to_resume): New function.
-	(win32_require_context): New function, factored out from ...
-	(thread_rec): ... this.
-	(continue_one_thread): Call win32_prepare_to_resume on each thread
-	we're about to continue.
-	(win32_resume): Call win32_prepare_to_resume on the event thread.
-	* win32-low.h (struct win32_thread_info)
-	<debug_registers_changed>: New field.
-	(struct win32_target_ops): Change prototype of set_thread_context,
-	delete set_thread_context and add prepare_to_resume.
-	(win32_require_context): New declaration.
-
-2014-10-08  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include common-exceptions.h.
-
-2014-10-08  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include cleanups.h.
-
-2014-09-30  James Hogan  <james.hogan@imgtec.com>
-
-	* Makefile.in (clean): Add rm -f commands for mips-dsp-linux.c and
-	mips64-dsp-linux.c.
-
-2014-09-23  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c (lp_status_maybe_breakpoint): New function.
-	(linux_low_filter_event): Call lp_status_maybe_breakpoint.
-	(count_events_callback): Likewise.
-	(select_event_lwp_callback): Likewise.
-	(cancel_breakpoints_callback): Likewise.
-
-2014-09-19  Don Breazeal  <donb@codesourcery.com>
-
-	* linux-low.c (handle_extended_wait): Call
-	linux_ptrace_get_extended_event.
-	(get_stop_pc, get_detach_signal, linux_low_filter_event): Call
-	linux_is_extended_waitstatus.
-
-2014-09-16  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in (CPPFLAGS): Define.
-	(INTERNAL_CFLAGS_BASE): Add ${CPPFLAGS}.
-	(IPAGENT_CFLAGS): Remove ${CPPFLAGS}.
-
-2014-09-16  Gary Benson  <gbenson@redhat.com>
-
-	* inferiors.h (current_inferior): Renamed as...
-	(current_thread): New variable.  All uses updated.
-	* linux-low.c (get_pc): Renamed saved_inferior as saved_thread.
-	(maybe_move_out_of_jump_pad): Likewise.
-	(cancel_breakpoint): Likewise.
-	(linux_low_filter_event): Likewise.
-	(wait_for_sigstop): Likewise.
-	(linux_resume_one_lwp): Likewise.
-	(need_step_over_p): Likewise.
-	(start_step_over): Likewise.
-	(linux_stabilize_threads): Renamed save_inferior as saved_thread.
-	* linux-x86-low.c (x86_linux_update_xmltarget): Likewise.
-	* proc-service.c (ps_lgetregs): Renamed reg_inferior as reg_thread
-	and save_inferior as saved_thread.
-	* regcache.c (get_thread_regcache): Renamed saved_inferior as
-	saved_thread.
-	(regcache_invalidate_thread): Likewise.
-	* remote-utils.c (prepare_resume_reply): Likewise.
-	* thread-db.c (thread_db_get_tls_address): Likewise.
-	(disable_thread_event_reporting): Likewise.
-	(remove_thread_event_breakpoints): Likewise.
-	* tracepoint.c (gdb_agent_about_to_close): Renamed save_inferior
-	as saved_thread.
-	* target.h (set_desired_inferior): Renamed as...
-	(set_desired_thread): New declaration.  All uses updated.
-	* server.c (myresume): Updated comment to reference thread instead
-	of inferior.
-	(handle_serial_event): Likewise.
-	(handle_target_event): Likewise.
-
-2014-09-12  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* regcache.h: Include common-regcache.h.
-	(regcache_read_pc): Don't declare.
-	* regcache.c (get_thread_regcache_for_ptid): New function.
-
-2014-09-11  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* symbol.c: New file.
-	* Makefile.in (SFILES): Add symbol.c.
-	(OBS): Add symbol.o.
-
-2014-09-11  Gary Benson  <gbenson@redhat.com>
-
-	* target.c (target_stop_ptid, target_continue_ptid): New
-	functions.
-
-2014-09-11  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* target.h: Include target/target.h.
-	* target.c (target_read_memory, target_read_uint32)
-	(target_write_memory): New functions.
-
-2014-09-11  Gary Benson  <gbenson@redhat.com>
-
-	* server.h (debug_hw_points): Don't declare.
-	* server.c (debug_hw_points): Don't define.  Replace all uses
-	with show_debug_regs.
-	* linux-aarch64-low.c (debug_hw_points): Don't define.  Replace
-	all uses with show_debug_regs.
-
-2014-09-08  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
-
-	* linux-ppc-low.c (ppc_collect_ptrace_register): Adjust routine to take
-	endianness into account.
-	(ppc_supply_ptrace_register): Likewise.
-
-2014-09-03  James Hogan  <james.hogan@imgtec.com>
-
-	* linux-mips-low.c (mips_read_description): Reset errno to 0 prior
-	to reading DSP_CONTROL with PTRACE_PEEKUSER ptrace call.
-
-2014-09-03  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_linux_prepare_to_resume): Use
-	ALL_DEBUG_ADDRESS_REGISTERS.
-
-2014-09-02  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.h: Renamed as...
-	* x86-low.h: New file.  All type, function and variable name
-	prefixes changed from "i386_" to "x86_".  All references updated.
-	* i386-low.c: Renamed as...
-	* x86-low.c: New file.  All type, function and variable name
-	prefixes changed from "i386_" to "x86_".  All references updated.
-
-2014-09-02  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (x86_linux_new_process): Use XCNEW.
-	(x86_linux_new_thread): Likewise.
-
-2014-08-29  Gary Benson  <gbenson@redhat.com>
-
-	* server.h (setjmp.h): Do not include.
-	(toplevel): Do not declare.
-	(common-exceptions.h): Include.
-	(cleanups.h): Likewise.
-	* server.c (toplevel): Do not define.
-	(exit_code): New static global.
-	(detach_or_kill_for_exit_cleanup): New function.
-	(main): New function.  Original main renamed to...
-	(captured_main): New function.
-	* utils.c (verror) [!IN_PROCESS_AGENT]: Use throw_verror.
-
-2014-08-29  Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (SFILES): Add common/common-exceptions.c.
-	(OBS): Add common-exceptions.o.
-	(common-exceptions.o): New rule.
-	* utils.c (prepare_to_throw_exception): New function.
-
-2014-08-29  Gary Benson  <gbenson@redhat.com>
-
-	* config.in: Regenerate.
-	* configure: Likewise.
-
-2014-08-29  Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (SFILES): Add common/cleanups.c.
-	(OBS): cleanups.o.
-	(cleanups.o): New rule.
-
-2014-08-29  Gary Benson  <gbenson@redhat.com>
-
-	* utils.c (internal_vwarning): New function.
-
-2014-08-28  Gary Benson  <gbenson@redhat.com>
-
-	* utils.h (fatal): Remove declaration.
-	* utils.c (fatal): Remove function.
-
-2014-08-28  Gary Benson  <gbenson@redhat.com>
-
-	* tracepoint.c (gdb_agent_init): Replace fatal with
-	perror_with_name.
-	(initialize_tracepoint): Likewise.
-
-2014-08-28  Gary Benson  <gbenson@redhat.com>
-
-	* remote-utils.c (remote_prepare): Replace fatal with error.
-
-2014-08-28  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.c (linux_async): Replace fatal with warning.
-	Tidy up and return.
-	(linux_start_non_stop): Return -1 if linux_async failed.
-
-2014-08-28  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c (i386_dr_low_set_addr): Replace check with
-	gdb_assert.
-	(i386_dr_low_get_addr): Remove vague comment.
-	* win32-i386-low.c (i386_dr_low_set_addr): Replace check with
-	gdb_assert.
-
-2014-08-28  Gary Benson  <gbenson@redhat.com>
-
-	* inferiors.c (get_thread_process): Replace check with gdb_assert.
-	* linux-low.c (linux_wait_for_event_filtered): Replace fatal with
-	internal_error.
-	(linux_resume_one_lwp): Likewise.
-	* linux-x86-low.c (x86_siginfo_fixup): Replace checks with
-	gdb_assert.
-	* mem-break.c (raw_bkpt_type_to_target_hw_bp_type): Replace fatal
-	with internal_error.
-	* regcache.c (get_thread_regcache): Replace check with gdb_assert.
-	(init_register_cache): Replace fatal with gdb_assert_not_reached.
-	(find_register_by_name): Replace fatal with internal_error.
-	(find_regno): Likewise.
-	* tdesc.c (init_target_desc): Replace check with gdb_assert.
-	* thread-db.c (thread_db_create_event): Likewise.
-	(thread_db_load_search): Likewise.
-	(try_thread_db_load_1): Likewise.
-	* tracepoint.c (get_jump_space_head): Replace fatal with
-	internal_error.
-	(claim_trampoline_space): Likewise.
-	(have_fast_tracepoint_trampoline_buffer): Likewise.
-	(cmd_qtstart): Likewise.
-	(stop_tracing): Likewise.
-	(fast_tracepoint_collecting): Likewise.
-	(target_malloc): Likewise.
-	(download_tracepoint): Likewise.
-	(download_trace_state_variables): Replace check with gdb_assert.
-	(upload_fast_traceframes): Replace fatal with internal_error.
-
-2014-08-19  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (SFILES): Add common/common-debug.c.
-	(OBS): Add common-debug.o.
-	(common-debug.o): New rule.
-	* debug.h (debug_printf): Don't declare.
-	* debug.c (debug_printf): Renamed and rewritten as...
-	(debug_vprintf): New function.
-
-2014-08-19  Gary Benson  <gbenson@redhat.com>
-
-	* utils.h: Do not include print-utils.h.
-
-2014-08-19  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Add static assertion.
-	(gdb_byte, CORE_ADDR, LONGEST, ULONGEST): Remove.
-
-2014-08-19  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (SFILES): Add common/errors.c.
-	(OBS): Add errors.o.
-	(IPA_OBS): Add errors-ipa.o.
-	(errors.o): New rule.
-	(errors-ipa.o): Likewise.
-	* utils.h (perror_with_name, error, warning): Don't declare.
-	* utils.c (warning): Renamed and rewritten as...
-	(vwarning): New function.
-	(error): Renamed and rewritten as...
-	(verror): New function.
-	(internal_error): Renamed and rewritten as...
-	(internal_verror): New function.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* configure.ac (AC_CHECK_HEADERS): Remove errno.h.
-	* configure: Regenerate.
-	* config.in: Likewise.
-	* server.h: Do not include errno.h.
-	* event-loop.c: Likewise.
-	* hostio-errno.c: Likewise.
-	* linux-low.c: Likewise.
-	* remote-utils.c: Likewise.
-	* spu-low.c: Likewise.
-	* utils.c: Likewise.
-	* gdbreplay.c: Unconditionally include errno.h.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include string.h.
-	* event-loop.c: Likewise.
-	* linux-low.c: Likewise.
-	* regcache.c: Likewise.
-	* remote-utils.c: Likewise.
-	* spu-low.c: Likewise.
-	* utils.c: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include gdb_assert.h.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include common-utils.h.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include ptid.h.
-	* notif.h: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include gdb_locale.h.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include gdb/signals.h.
-	* win32-low.c: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include pathmax.h.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include libiberty.h.
-	* linux-bfin-low.c: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include ansidecl.h.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* linux-x86-low.c: Do not include stddef.h.
-	* lynx-ppc-low.c: Likewise.
-	* tracepoint.c: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include stdarg.h.
-	* nto-low.c: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include stdlib.h.
-	* inferiors.c: Likewise.
-	* linux-low.c: Likewise.
-	* regcache.c: Likewise.
-	* spu-low.c: Likewise.
-	* tracepoint.c: Likewise.
-	* utils.c: Likewise.
-
-2014-08-07  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Do not include stdio.h.
-	* linux-low.c: Likewise.
-	* remote-utils.c: Likewise.
-	* spu-low.c: Likewise.
-	* utils.c: Likewise.
-	* wincecompat.c: Likewise.
-
-2014-08-06  Gary Benson  <gbenson@redhat.com>
-
-	* regcache.c (init_register_cache): Move conditionals inside if.
-
-2014-08-06  Gary Benson  <gbenson@redhat.com>
-
-	* linux-low.c (linux_supports_non_stop): Use target_is_async_p.
-
-2014-07-31  Gary Benson  <gbenson@redhat.com>
-
-	* ax.h: Do not include server.h.
-	* gdbthread.h: Likewise.
-	* lynx-low.h: Likewise.
-	* notif.h: Likewise.
-
-2014-07-30  Gary Benson  <gbenson@redhat.com>
-
-	* server.h: Include common-defs.h.
-	Do not include config.h or build-gnulib-gdbserver/config.h.
-
-2014-07-30  Gary Benson  <gbenson@redhat.com>
-
-	* hostio-errno.c: Move server.h to top of includes list.
-	* inferiors.c: Likewise.
-	* linux-x86-low.c: Likewise.
-	* notif.c: Include server.h.
-
-2014-07-24  Tom Tromey  <tromey@redhat.com>
-	    Gary Benson  <gbenson@redhat.com>
-
-	* server.h (CORE_ADDR): Now unsigned.
-
-2014-07-16  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_kill_one_lwp): Use kill_lwp, not kill.
-
-2014-07-15  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_kill_one_lwp): Save errno and work with saved
-	copy.
-
-2014-07-11  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (kill_wait_lwp): New function, based on
-	kill_one_lwp_callback, but use my_waitpid directly.
-	(kill_one_lwp_callback, linux_kill): Use it.
-
-2014-06-23  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR_CONTROL
-	before setting DR0..DR3.
-
-2014-06-20  Gary Benson  <gbenson@redhat.com>
-
-	* configure.ac (AC_REPLACE_FUNCS) <vasprintf, vsnprintf>: Removed.
-	* configure: Regenerated.
-	* config.in: Likewise.
-
-2014-06-20  Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (SFILES): Update locations for files moved
-	from common to nat.
-	(object file files): Reordered.
-
-2014-06-20  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.h (i386_dr_low_can_set_addr): Removed.
-	(i386_dr_low_set_addr): Likewise.
-	(i386_dr_low_get_addr): Likewise.
-	(i386_dr_low_can_set_control): Likewise.
-	(i386_dr_low_set_control): Likewise.
-	(i386_dr_low_get_control): Likewise.
-	(i386_dr_low_get_status): Likewise.
-	(i386_get_debug_register_length): Likewise.
-	* linux-x86-low.c (i386_dr_low_set_addr):
-	Changed signature.  Made static.
-	(i386_dr_low_get_addr): Likewise.
-	(i386_dr_low_set_control): Likewise.
-	(i386_dr_low_get_control): Likewise.
-	(i386_dr_low_get_status): Likewise.
-	(i386_dr_low): New global variable.
-	* win32-i386-low.c (i386_dr_low_set_addr):
-	Changed signature.  Made static.
-	(i386_dr_low_get_addr): Likewise.
-	(i386_dr_low_set_control): Likewise.
-	(i386_dr_low_get_control): Likewise.
-	(i386_dr_low_get_status): Likewise.
-	(i386_dr_low): New global variable.
-
-2014-06-20  Marcus Shawcroft  <marcus.shawcroft@arm.com>
-
-	* configure.ac: Invoke. AC_CHECK_TOOL(AR, ar).
-	* Makefile.in (AR, AR_FLAGS): Define.
-	* configure: Regenerate.
-
-2014-06-19  Gary Benson  <gbenson@redhat.com>
-
-	* Makefile.in (i386-dregs.o): New rule.
-	* configure.srv: Add i386-dregs.o to all targets using i386-low.o.
-	* i386-low.c (target.h): Remove include.
-	(TARGET_HAS_DR_LEN_8): Now in i386-dregs.c.
-	(DR_CONTROL_SHIFT): Likewise.
-	(DR_CONTROL_SIZE): Likewise.
-	(DR_RW_EXECUTE): Likewise.
-	(DR_RW_WRITE): Likewise.
-	(DR_RW_READ): Likewise.
-	(DR_RW_IORW): Likewise.
-	(DR_LEN_1): Likewise.
-	(DR_LEN_2): Likewise.
-	(DR_LEN_4): Likewise.
-	(DR_LEN_8): Likewise.
-	(DR_LOCAL_ENABLE_SHIFT): Likewise.
-	(DR_GLOBAL_ENABLE_SHIFT): Likewise.
-	(DR_ENABLE_SIZE): Likewise.
-	(DR_LOCAL_SLOWDOWN): Likewise.
-	(DR_GLOBAL_SLOWDOWN): Likewise.
-	(DR_CONTROL_RESERVED): Likewise.
-	(I386_DR_CONTROL_MASK): Likewise.
-	(I386_DR_VACANT): Likewise.
-	(I386_DR_LOCAL_ENABLE): Likewise.
-	(I386_DR_GLOBAL_ENABLE): Likewise.
-	(I386_DR_DISABLE): Likewise.
-	(I386_DR_SET_RW_LEN): Likewise.
-	(I386_DR_GET_RW_LEN): Likewise.
-	(I386_DR_WATCH_HIT): Likewise.
-	(i386_wp_op_t): Likewise.
-	(i386_show_dr): Likewise.
-	(i386_length_and_rw_bits): Likewise.
-	(i386_insert_aligned_watchpoint): Likewise.
-	(i386_remove_aligned_watchpoint): Likewise.
-	(i386_handle_nonaligned_watchpoint): Likewise.
-	i386_update_inferior_debug_regs(): Likewise.
-	(i386_dr_insert_watchpoint): Likewise.
-	(i386_dr_remove_watchpoint): Likewise.
-	(i386_dr_region_ok_for_watchpoint): Likewise.
-	(i386_dr_stopped_data_address): Likewise.
-	(i386_dr_stopped_by_watchpoint): Likewise.
-
-2014-06-19  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.c (i386_dr_show): Renamed to
-	i386_show_dr and made static.  All uses updated.
-	(i386_dr_length_and_rw_bits): Renamed to
-	i386_length_and_rw_bits and made static.
-	All uses updated.
-	(i386_dr_insert_aligned_watchpoint): Renamed to
-	i386_insert_aligned_watchpoint and made static.
-	All uses updated.
-	(i386_dr_remove_aligned_watchpoint): Renamed to
-	i386_remove_aligned_watchpoint and made static.
-	All uses updated.
-	(i386_dr_update_inferior_debug_regs): Renamed to
-	i386_update_inferior_debug_regs and made static.
-	All uses updated.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.h (i386_dr_low_can_set_addr): New macro.
-	(i386_dr_low_can_set_control): Likewise.
-	(i386_get_debug_register_length): Likewise.
-	* i386-low.c (i386_dr_low_can_set_addr): Now in i386-low.h.
-	(i386_dr_low_can_set_control): Likewise.
-	(i386_get_debug_register_length): Likewise.
-
-2014-06-17  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.h (i386-dregs.h): New include.
-	(DR_FIRSTADDR): Now in i386-dregs.h.
-	(DR_LASTADDR): Likewise.
-	(DR_NADDR): Likewise.
-	(DR_STATUS): Likewise.
-	(DR_CONTROL): Likewise.
-	(i386_debug_reg_state): Likewise.
-	(i386_dr_insert_watchpoint): Likewise.
-	(i386_dr_remove_watchpoint): Likewise.
-	(i386_dr_region_ok_for_watchpoint): Likewise.
-	(i386_dr_stopped_data_address): Likewise.
-	(i386_dr_stopped_by_watchpoint): Likewise.
-	* i386-low.c (ALL_DEBUG_REGISTERS): Likewise.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.h (i386_low_insert_watchpoint): Renamed to
-	i386_dr_insert_watchpoint.
-	(i386_low_remove_watchpoint): Renamed to
-	i386_dr_remove_watchpoint.
-	(i386_low_region_ok_for_watchpoint): Renamed to
-	i386_dr_region_ok_for_watchpoint.
-	(i386_low_stopped_data_address): Renamed to
-	i386_dr_stopped_data_address.
-	(i386_low_stopped_by_watchpoint): Renamed to
-	i386_dr_stopped_by_watchpoint.
-	* i386-low.c (i386_show_dr): Renamed to
-	i386_dr_show and made nonstatic.  All uses updated.
-	(i386_length_and_rw_bits): Renamed to
-	i386_dr_length_and_rw_bits and made nonstatic.
-	All uses updated.
-	(i386_insert_aligned_watchpoint): Renamed to
-	i386_dr_insert_aligned_watchpoint and made nonstatic.
-	All uses updated.
-	(i386_remove_aligned_watchpoint): Renamed to
-	i386_dr_remove_aligned_watchpoint and made nonstatic.
-	All uses updated.
-	(i386_update_inferior_debug_regs): Renamed to
-	i386_dr_update_inferior_debug_regs and made nonstatic.
-	All uses updated.
-	(i386_low_insert_watchpoint): Renamed to
-	i386_dr_insert_watchpoint.  All uses updated.
-	(i386_low_remove_watchpoint): Renamed to
-	i386_dr_remove_watchpoint.  All uses updated.
-	(i386_low_region_ok_for_watchpoint): Renamed to
-	i386_dr_region_ok_for_watchpoint.  All uses updated.
-	(i386_low_stopped_data_address): Renamed to
-	i386_dr_stopped_data_address.  All uses updated.
-	(i386_low_stopped_by_watchpoint): Renamed to
-	i386_dr_stopped_by_watchpoint.  All uses updated.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.c (i386_dr_low_can_set_addr): New macro.
-	(i386_dr_low_can_set_control): Likewise.
-	(i386_insert_aligned_watchpoint): New check.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.c (i386_update_inferior_debug_regs) <inf_state>:
-	Renamed to state.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.c (i386_length_and_rw_bits): Use internal_error
-	instead of fatal and error.
-	(i386_handle_nonaligned_watchpoint): Likewise.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.c (i386_get_debug_register_length): New macro.
-	(TARGET_HAS_DR_LEN_8): Remove conditional.  Use above macro.
-	(i386_show_dr): Use debug_printf instead of fprintf.  Use
-	phex to format values.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.h: Comment changes.
-	* i386-low.c: Likewise.
-
-2014-06-18  Gary Benson  <gbenson@redhat.com>
-
-	* i386-low.c: Whitespace changes.
-
-2014-06-12  Tom Tromey  <tromey@redhat.com>
-
-	* utils.c (freeargv): Remove.
-
-2014-06-12  Tom Tromey  <tromey@redhat.com>
-
-	* debug.c (debug_printf): Remove HAVE_GETTIMEOFDAY checks.
-	* server.c (monitor_show_help): Remove HAVE_GETTIMEOFDAY check.
-	(parse_debug_format_options): Likewise.
-	(gdbserver_usage): Likewise.
-	* Makefile.in (LIBIBERTY_BUILDDIR, LIBIBERTY): New variables.
-	(SUBDIRS, REQUIRED_SUBDIRS): Add libiberty.
-	(gdbserver$(EXEEXT), gdbreplay$(EXEEXT)): Depend on and link
-	against libiberty.
-	($(LIBGNU)): Depend on libiberty.
-	(all-lib): Recurse into all subdirs.
-	(install-only): Invoke "install" target in subdirs.
-	(vasprintf.o, vsnprintf.o, safe-ctype.o, lbasename.o): Remove
-	targets.
-	* configure: Rebuild.
-	* configure.ac: Add ACX_CONFIGURE_DIR for libiberty.  Don't check
-	for vasprintf, vsnprintf, or gettimeofday.
-	* configure.srv: Don't add safe-ctype.o or lbasename.o to
-	srv_tgtobj.
-
-2014-06-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* development.sh: Delete.
-	* Makefile.in (config.status): Adjust dependency on development.sh.
-	* configure.ac: Adjust development.sh source call.
-	* configure: Regenerate.
-
-2014-06-02  Pedro Alves  <palves@redhat.com>
-
-	* ax.c (gdb_free_agent_expr): New function.
-	* ax.h (gdb_free_agent_expr): New declaration.
-	* mem-break.c (delete_gdb_breakpoint_1): Also clear the commands
-	list.
-	(clear_breakpoint_conditions, clear_breakpoint_commands): Make
-	static.
-	(clear_breakpoint_conditions_and_commands): New function.
-	* mem-break.h (clear_breakpoint_conditions): Delete declaration.
-	(clear_breakpoint_conditions_and_commands): New declaration.
-
-2014-05-23  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
-
-	* linux-aarch64-low.c (asm/ptrace.h): Include.
-
-2014-05-21  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Fix TLS access for -static -pthread.
-	* gdbserver/thread-db.c (struct thread_db): Add td_thr_tlsbase_p.
-	(thread_db_get_tls_address): Call it if LOAD_MODULE is zero.
-	(thread_db_load_search, try_thread_db_load_1): Initialize it.
-
-2014-05-20  Pedro Alves  <palves@redhat.com>
-
-	* linux-aarch64-low.c (aarch64_insert_point)
-	(aarch64_remove_point): No longer check whether the type is
-	supported here.  Adjust to new interface.
-	(the_low_target): Install aarch64_supports_z_point_type as
-	supports_z_point_type method.
-	* linux-arm-low.c (raw_bkpt_type_to_arm_hwbp_type): New function.
-	(arm_linux_hw_point_initialize): Take an enum raw_bkpt_type
-	instead of a Z packet char.  Adjust.
-	(arm_supports_z_point_type): New function.
-	(arm_insert_point, arm_remove_point): Adjust to new interface.
-	(the_low_target): Install arm_supports_z_point_type.
-	* linux-crisv32-low.c (cris_supports_z_point_type): New function.
-	(cris_insert_point, cris_remove_point): Adjust to new interface.
-	Don't check whether the type is supported here.
-	(the_low_target): Install cris_supports_z_point_type.
-	* linux-low.c (linux_supports_z_point_type): New function.
-	(linux_insert_point, linux_remove_point): Adjust to new interface.
-	* linux-low.h (struct linux_target_ops) <insert_point,
-	remove_point>: Take an enum raw_bkpt_type instead of a char.  Add
-	raw_breakpoint pointer parameter.
-	<supports_z_point_type>: New method.
-	* linux-mips-low.c (mips_supports_z_point_type): New function.
-	(mips_insert_point, mips_remove_point): Adjust to new interface.
-	Use mips_supports_z_point_type.
-	(the_low_target): Install mips_supports_z_point_type.
-	* linux-ppc-low.c (the_low_target): Install NULL as
-	supports_z_point_type method.
-	* linux-s390-low.c (the_low_target): Install NULL as
-	supports_z_point_type method.
-	* linux-sparc-low.c (the_low_target): Install NULL as
-	supports_z_point_type method.
-	* linux-x86-low.c (x86_supports_z_point_type): New function.
-	(x86_insert_point): Adjust to new insert_point interface.  Use
-	insert_memory_breakpoint.  Adjust to new
-	i386_low_insert_watchpoint interface.
-	(x86_remove_point): Adjust to remove_point interface.  Use
-	remove_memory_breakpoint.  Adjust to new
-	i386_low_remove_watchpoint interface.
-	(the_low_target): Install x86_supports_z_point_type.
-	* lynx-low.c (lynx_target_ops): Install NULL as
-	supports_z_point_type callback.
-	* nto-low.c (nto_supports_z_point_type): New.
-	(nto_insert_point, nto_remove_point): Adjust to new interface.
-	(nto_target_ops): Install nto_supports_z_point_type.
-	* mem-break.c: Adjust intro comment.
-	(struct raw_breakpoint) <raw_type, size>: New fields.
-	<inserted>: Update comment.
-	<shlib_disabled>: Delete field.
-	(enum bkpt_type) <gdb_breakpoint>: Delete value.
-	<gdb_breakpoint_Z0, gdb_breakpoint_Z1, gdb_breakpoint_Z2,
-	gdb_breakpoint_Z3, gdb_breakpoint_Z4>: New values.
-	(raw_bkpt_type_to_target_hw_bp_type): New function.
-	(find_enabled_raw_code_breakpoint_at): New function.
-	(find_raw_breakpoint_at): New type and size parameters.  Use them.
-	(insert_memory_breakpoint): New function, based off
-	set_raw_breakpoint_at.
-	(remove_memory_breakpoint): New function.
-	(set_raw_breakpoint_at): Reimplement.
-	(set_breakpoint): New, based on set_breakpoint_at.
-	(set_breakpoint_at): Reimplement.
-	(delete_raw_breakpoint): Go through the_target->remove_point
-	instead of assuming memory breakpoints.
-	(find_gdb_breakpoint_at): Delete.
-	(Z_packet_to_bkpt_type, Z_packet_to_raw_bkpt_type): New functions.
-	(find_gdb_breakpoint): New function.
-	(set_gdb_breakpoint_at): Delete.
-	(z_type_supported): New function.
-	(set_gdb_breakpoint_1): New function, loosely based off
-	set_gdb_breakpoint_at.
-	(check_gdb_bp_preconditions, set_gdb_breakpoint): New functions.
-	(delete_gdb_breakpoint_at): Delete.
-	(delete_gdb_breakpoint_1): New function, loosely based off
-	delete_gdb_breakpoint_at.
-	(delete_gdb_breakpoint): New function.
-	(clear_gdb_breakpoint_conditions): Rename to ...
-	(clear_breakpoint_conditions): ... this.  Don't handle a NULL
-	breakpoint.
-	(add_condition_to_breakpoint): Make static.
-	(add_breakpoint_condition): Take a struct breakpoint pointer
-	instead of an address.  Adjust.
-	(gdb_condition_true_at_breakpoint): Rename to ...
-	(gdb_condition_true_at_breakpoint_z_type): ... this, and add
-	z_type parameter.
-	(gdb_condition_true_at_breakpoint): Reimplement.
-	(add_breakpoint_commands): Take a struct breakpoint pointer
-	instead of an address.  Adjust.
-	(gdb_no_commands_at_breakpoint): Rename to ...
-	(gdb_no_commands_at_breakpoint_z_type): ... this.  Add z_type
-	parameter.  Return true if no breakpoint was found.  Change debug
-	output.
-	(gdb_no_commands_at_breakpoint): Reimplement.
-	(run_breakpoint_commands): Rename to ...
-	(run_breakpoint_commands_z_type): ... this.  Add z_type parameter,
-	and change return type to boolean.
-	(run_breakpoint_commands): New function.
-	(gdb_breakpoint_here): Also check for Z1 breakpoints.
-	(uninsert_raw_breakpoint): Don't try to reinsert a disabled
-	breakpoint.  Go through the_target->remove_point instead of
-	assuming memory breakpoint.
-	(uninsert_breakpoints_at, uninsert_all_breakpoints): Uninsert
-	software and hardware breakpoints.
-	(reinsert_raw_breakpoint): Go through the_target->insert_point
-	instead of assuming memory breakpoint.
-	(reinsert_breakpoints_at, reinsert_all_breakpoints): Reinsert
-	software and hardware breakpoints.
-	(check_breakpoints, breakpoint_here, breakpoint_inserted_here):
-	Check both software and hardware breakpoints.
-	(validate_inserted_breakpoint): Assert the breakpoint is a
-	software breakpoint.  Set the inserted flag to -1 instead of
-	setting shlib_disabled.
-	(delete_disabled_breakpoints): Adjust.
-	(validate_breakpoints): Only validate software breakpoints.
-	Adjust to inserted flag change.
-	(check_mem_read, check_mem_write): Skip breakpoint types other
-	than software breakpoints.  Adjust to inserted flag change.
-	* mem-break.h (enum raw_bkpt_type): New enum.
-	(raw_breakpoint, struct process_info): Forward declare.
-	(Z_packet_to_target_hw_bp_type): Delete declaration.
-	(raw_bkpt_type_to_target_hw_bp_type, Z_packet_to_raw_bkpt_type)
-	(set_gdb_breakpoint, delete_gdb_breakpoint)
-	(clear_breakpoint_conditions): New declarations.
-	(set_gdb_breakpoint_at, clear_gdb_breakpoint_conditions): Delete.
-	(breakpoint_inserted_here): Update comment.
-	(add_breakpoint_condition, add_breakpoint_commands): Replace
-	address parameter with a breakpoint pointer parameter.
-	(gdb_breakpoint_here): Update comment.
-	(delete_gdb_breakpoint_at): Delete.
-	(insert_memory_breakpoint, remove_memory_breakpoint): Declare.
-	* server.c (process_point_options): Take a struct breakpoint
-	pointer instead of an address.  Adjust.
-	(process_serial_event) <Z/z packets>: Use set_gdb_breakpoint and
-	delete_gdb_breakpoint.
-	* spu-low.c (spu_target_ops): Install NULL as
-	supports_z_point_type method.
-	* target.h: Include mem-break.h.
-	(struct target_ops) <prepare_to_access_memory>: Update comment.
-	<supports_z_point_type>: New field.
-	<insert_point, remove_point>: Take an enum raw_bkpt_type argument
-	instead of a char.  Also take a raw breakpoint pointer.
-	* win32-arm-low.c (the_low_target): Install NULL as
-	supports_z_point_type.
-	* win32-i386-low.c (i386_supports_z_point_type): New function.
-	(i386_insert_point, i386_remove_point): Adjust to new interface.
-	(the_low_target): Install i386_supports_z_point_type.
-	* win32-low.c (win32_supports_z_point_type): New function.
-	(win32_insert_point, win32_remove_point): Adjust to new interface.
-	(win32_target_ops): Install win32_supports_z_point_type.
-	* win32-low.h (struct win32_target_ops):
-	<supports_z_point_type>: New method.
-	<insert_point, remove_point>: Take an enum raw_bkpt_type argument
-	instead of a char.  Also take a raw breakpoint pointer.
-
-2014-05-20  Pedro Alves  <palves@redhat.com>
-
-	* mem-break.h: Include break-common.h.
-	(Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP)
-	(Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): New defines.
-	(Z_packet_to_target_hw_bp_type): New declaration.
-	* mem-break.c (Z_packet_to_target_hw_bp_type): New function.
-	* i386-low.c (Z_PACKET_HW_BP, Z_PACKET_WRITE_WP, Z_PACKET_READ_WP)
-	(Z_PACKET_ACCESS_WP): Delete macros.
-	(Z_packet_to_hw_type): Delete function.
-	* i386-low.h: Don't include break-common.h here.
-	(Z_packet_to_hw_type): Delete declaration.
-	* linux-x86-low.c (x86_insert_point, x86_insert_point): Call
-	Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type.
-	* win32-i386-low.c (i386_insert_point, i386_remove_point): Call
-	Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type.
-	* linux-aarch64-low.c: Don't include break-common.h here.
-	(Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP)
-	(Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): Delete macros.
-	(Z_packet_to_target_hw_bp_type): Delete function.
-	* linux-mips-low.c (rsp_bp_type_to_target_hw_bp_type): Delete
-	function.
-	(mips_insert_point, mips_remove_point): Use
-	Z_packet_to_target_hw_bp_type.
-
-2014-05-20  Pedro Alves  <palves@redhat.com>
-
-	* linux-aarch64-low.c: Include break-common.h.
-	(enum target_point_type): Delete.
-	(Z_packet_to_point_type): Rename to ...
-	(Z_packet_to_target_hw_bp_type): ... this, and return a
-	target_hw_bp_type instead.
-	(aarch64_show_debug_reg_state): Take an enum target_hw_bp_type
-	instead of an enum target_point_type.
-	(aarch64_point_encode_ctrl_reg): Likewise.  Compute type mask from
-	breakpoint type.
-	(aarch64_dr_state_insert_one_point)
-	(aarch64_dr_state_remove_one_point, aarch64_handle_breakpoint)
-	(aarch64_handle_aligned_watchpoint)
-	(aarch64_handle_unaligned_watchpoint, aarch64_handle_watchpoint):
-	Take an enum target_hw_bp_type instead of an enum
-	target_point_type.
-	(aarch64_supports_z_point_type): New function.
-	(aarch64_insert_point, aarch64_remove_point): Use it.  Adjust to
-	use Z_packet_to_target_hw_bp_type.
-
-2014-05-20  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: Only use -Werror by default when DEVELOPMENT
-	is true.
-	* configure: Regenerate.
-
-2014-05-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Fix gdbserver qGetTLSAddr for x86_64 -m32.
-	* linux-x86-low.c (X86_64_USER_REGS): New.
-	(x86_fill_gregset): Call memset for BUF first in x86_64 -m32 case.
-
-2014-04-28  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (i386-avx512.c): Fix the typo of generated file
-	name.
-
-2014-04-25  Pedro Alves  <palves@redhat.com>
-
-	PR server/16255
-	* linux-low.c (linux_attach_fail_reason_string): New function.
-	(linux_attach_lwp): Delete.
-	(linux_attach_lwp_1): Rename to ...
-	(linux_attach_lwp): ... this.  Take a ptid instead of a pid as
-	argument.  Remove "initial" parameter.  Return int instead of
-	void.  Don't error or warn here.
-	(linux_attach): Adjust to call linux_attach_lwp.  Call error on
-	failure to attach to the tgid.  Call warning when failing to
-	attach to an lwp.
-	* linux-low.h (linux_attach_lwp): Take a ptid instead of a pid as
-	argument.  Remove "initial" parameter.  Return int instead of
-	void.  Don't error or warn here.
-	(linux_attach_fail_reason_string): New declaration.
-	* thread-db.c (attach_thread): Adjust to linux_attach_lwp's
-	interface change.  Use linux_attach_fail_reason_string.
-
-2014-04-24  Michael Sturm  <michael.sturm@mintel.com>
-	    Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* Makefile.in: Added rules to handle new files
-	i386-avx512.c i386-avx512-linux.c amd64-avx512.c
-	amd64-avx512-linux.c x32-avx512.c x32-avx512-linux.c.
-	* configure.srv (srv_i386_regobj): Add i386-avx512.o.
-	(srv_i386_linux_regobj): Add i386-avx512-linux.o.
-	(srv_amd64_regobj): Add amd64-avx512.o and x32-avx512.o.
-	(srv_amd64_linux_regobj): Add amd64-avx512-linux.o and
-	x32-avx512-linux.o.
-	(srv_i386_32bit_xmlfiles): Add i386/32bit-avx512.xml.
-	(srv_i386_64bit_xmlfiles): Add i386/64bit-avx512.xml.
-	(srv_amd64_xmlfiles): Add i386/amd64-avx512.xml and
-	i386/x32-avx512.xml.
-	(srv_i386_linux_xmlfiles): Add i386/i386-avx512-linux.xml.
-	(srv_amd64_linux_xmlfiles): Add i386/amd64-avx512-linux.xml and
-	i386/x32-avx512-linux.xml.
-	* i387-fp.c (num_avx512_k_registers): New constant for number
-	of K registers.
-	(num_avx512_zmmh_low_registers): New constant for number of
-	lower ZMM registers (0-15).
-	(num_avx512_zmmh_high_registers): New constant for number of
-	higher ZMM registers (16-31).
-	(num_avx512_ymmh_registers): New contant for number of higher
-	YMM registers (ymm16-31 added by avx521 on x86_64).
-	(num_avx512_xmm_registers): New constant for number of higher
-	XMM registers (xmm16-31 added by AVX512 on x86_64).
-	(struct i387_xsave): Add space for AVX512 registers.
-	(i387_cache_to_xsave): Change raw buffer size to 64 characters.
-	Add code to handle AVX512 registers.
-	(i387_xsave_to_cache): Add code to handle AVX512 registers.
-	* linux-x86-low.c (init_registers_amd64_avx512_linux): New
-	prototypei from generated file.
-	(tdesc_amd64_avx512_linux): Likewise.
-	(init_registers_x32_avx512_linux): Likewise.
-	(tdesc_x32_avx512_linux): Likewise.
-	(init_registers_i386_avx512_linux): Likewise.
-	(tdesc_i386_avx512_linux): Likewise.
-	(x86_64_regmap): Add AVX512 registers.
-	(x86_linux_read_description): Add code to handle AVX512 XSTATE
-	mask.
-	(initialize_low_arch): Add code to initialize AVX512 registers.
-
-2014-04-23  Pedro Alves  <palves@redhat.com>
-
-	* mem-break.c (find_gdb_breakpoint_at): Make static.
-	* mem-break.h (find_gdb_breakpoint_at): Delete declaration.
-
-2014-04-23  Pedro Alves  <palves@redhat.com>
-
-	* i386-low.c: Don't include break-common.h here.
-	(i386_low_insert_watchpoint, i386_low_remove_watchpoint): Change
-	prototype to take target_hw_bp_type as argument instead of a Z
-	packet char.
-	* i386-low.h: Include break-common.h here.
-	(Z_packet_to_hw_type): Declare.
-	(i386_low_insert_watchpoint, i386_low_remove_watchpoint): Change
-	prototypes.
-	* linux-x86-low.c (x86_insert_point): Convert the packet number to
-	a target_hw_bp_type before calling i386_low_insert_watchpoint.
-	(x86_remove_point): Convert the packet number to a
-	target_hw_bp_type before calling i386_low_remove_watchpoint.
-	* win32-i386-low.c (i386_insert_point): Convert the packet number
-	to a target_hw_bp_type before calling i386_low_insert_watchpoint.
-	(i386_remove_point): Convert the packet number to a
-	target_hw_bp_type before calling i386_low_remove_watchpoint.
-
-2014-04-23  Pedro Alves  <palves@redhat.com>
-
-	* utils.h (perror_with_name): Add ATTRIBUTE_NORETURN.
-
-2014-04-10  Pedro Alves  <palves@redhat.com>
-
-	* mem-break.c (add_breakpoint_condition, add_breakpoint_commands):
-	Check if the condition or command is NULL before checking if the
-	breakpoint is known.  On success, return true.
-	* mem-break.h (add_breakpoint_condition): Document return.
-	(add_breakpoint_commands): Add describing comment.
-	* server.c (skip_to_semicolon): New function.
-	(process_point_options): Use it.
-
-2014-04-09  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_read_loadmap): Pass current_inferior directly
-	to lwpid_of.
-
-2014-02-27  Pedro Alves  <palves@redhat.com>
-
-	PR 12702
-	* inferiors.h (A_I_NEXT, ALL_INFERIORS_TYPE, ALL_PROCESSES): New
-	macros.
-	* linux-low.c (delete_lwp, handle_extended_wait): Add debug
-	output.
-	(last_thread_of_process_p): Take a PID argument instead of a
-	thread pointer.
-	(linux_wait_for_lwp): Delete.
-	(num_lwps, check_zombie_leaders, not_stopped_callback): New
-	functions.
-	(linux_low_filter_event): New function, party factored out from
-	linux_wait_for_event.
-	(linux_wait_for_event): Rename to ...
-	(linux_wait_for_event_filtered): ... this.  Add new filter ptid
-	argument.  Partly rewrite.  Always use waitpid(-1, WNOHANG) and
-	sigsuspend.  Check for zombie leaders.
-	(linux_wait_for_event): Reimplement as wrapper around
-	linux_wait_for_event_filtered.
-	(linux_wait_1): Handle TARGET_WAITKIND_NO_RESUMED.  Assume that if
-	a normal or signal exit is seen, it's the whole process exiting.
-	(wait_for_sigstop): No longer a for_each_inferior callback.
-	Rewrite on top of linux_wait_for_event_filtered.
-	(stop_all_lwps): Call wait_for_sigstop directly.
-	* server.c (resume, handle_target_event): Handle
-	TARGET_WAITKIND_NO_RESUMED.
-
-2014-02-26  Joel Brobecker  <brobecker@adacore.com>
-
-	* win32-low.c (psapi_get_dll_name,
-	* win32_CreateToolhelp32Snapshot): Delete.
-	(win32_CreateToolhelp32Snapshot, win32_Module32First)
-	(win32_Module32Next, load_toolhelp, toolhelp_get_dll_name):
-	Delete.
-	(handle_load_dll): Add function description.
-	Remove code using psapi_get_dll_name and toolhelp_get_dll_name.
-
-2014-02-26  Joel Brobecker  <brobecker@adacore.com>
-
-	* win32-low.c (win32_add_one_solib): Add 0x1000 to load_addr.
-	Add comment.
-	(win32_add_all_dlls): Remove 0x1000 offset applied to DLL
-	base address when calling win32_add_one_solib.
-	(handle_load_dll): Delete local variable load_addr.
-	Remove 0x1000 offset applied to DLL base address when calling
-	win32_add_one_solib.
-	(handle_unload_dll): Add comment.
-
-2014-02-26  Joel Brobecker  <brobecker@adacore.com>
-
-	* win32-low.c (win32_add_all_dlls): Renames
-	win32_ensure_ntdll_loaded.  Rewrite function documentation.
-	Adjust implementation to always load all DLLs.
-	Add 0x1000 offset to DLL base address when calling
-	win32_add_one_solib.
-	(child_initialization_done): New static global.
-	(do_initial_child_stuff): Set child_initialization_done to
-	zero during child initialization, and 1 after.  Replace call
-	to win32_ensure_ntdll_loaded by call to win32_add_all_dlls.
-	Add comment.
-	(match_dll_by_basename, dll_is_loaded_by_basename): Delete.
-	(handle_unload_dll): Add function documentation.
-	(get_child_debug_event): Ignore load and unload DLL events
-	during child initialization.
-
-2014-02-20  Doug Evans  <dje@google.com>
-
-	Remove global all_lwps.
-	* inferiors.h (ptid_of): Move here from linux-low.h.
-	(pid_of, lwpid_of): Ditto.
-	* linux-aarch64-low.c (debug_reg_change_callback): Update, "entry"
-	parameter is a struct thread_info * now.
-	(aarch64_notify_debug_reg_change): Fetch pid from current_inferior
-	directly.  Pass &all_threads to find_inferior instead of &all_lwps.
-	(aarch64_stopped_data_address): Fetch lwpid from current_inferior
-	directly.
-	(aarch64_linux_prepare_to_resume): Fetch ptid from thread.
-	(aarch64_arch_setup): Fetch lwpid from current_inferior directly.
-	* linux-arm-low.c (update_registers_callback): Update, "entry"
-	parameter is a struct thread_info * now.
-	Fetch lwpid from current_inferior directly.
-	(arm_insert_point): Pass &all_threads to find_inferior instead of
-	&all_lwps.
-	(arm_remove_point): Ditto.
-	(arm_stopped_by_watchpoint): Fetch lwp from current_inferior.
-	(arm_prepare_to_resume): Fetch pid from thread.
-	(arm_read_description): Fetch lwpid from current_inferior directly.
-	* linux-low.c (all_lwps): Delete.
-	(delete_lwp): Delete call to remove_inferior.
-	(handle_extended_wait): Fetch lwpid from thread.
-	(add_lwp): Don't set lwp->entry.id.  Remove call to
-	add_inferior_to_list.
-	(linux_attach_lwp_1): Fetch pid from current_inferior directly.
-	(linux_kill_one_lwp): Fetch ptid,lwpid from thread.
-	(kill_one_lwp_callback): Ditto.
-	(linux_kill): Don't dereference NULL pointer.
-	Fetch ptid,lwpid from thread.
-	(get_detach_signal): Fetch ptid from thread.
-	(linux_detach_one_lwp): Fetch ptid,lwpid from thread.
-	Simplify call to regcache_invalidate_thread.
-	(delete_lwp_callback): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch pid from thread.
-	(linux_mourn): Pass &all_threads to find_inferior instead of &all_lwps.
-	(status_pending_p_callback): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch ptid from thread.
-	(find_lwp_pid): Update, "entry" parameter is a
-	struct thread_info * now.
-	(linux_wait_for_lwp): Fetch pid from thread.
-	(linux_fast_tracepoint_collecting): Fetch lwpid from thread.
-	(maybe_move_out_of_jump_pad): Fetch lwpid from current_inferior.
-	(enqueue_one_deferred_signal): Fetch lwpid from thread.
-	(dequeue_one_deferred_signal): Ditto.
-	(cancel_breakpoint): Fetch ptid from current_inferior.
-	(linux_wait_for_event): Pass &all_threads to find_inferior,
-	not &all_lwps.  Fetch ptid, lwpid from thread.
-	(count_events_callback): Update, "entry" parameter is a
-	struct thread_info * now.
-	(select_singlestep_lwp_callback): Ditto.
-	(select_event_lwp_callback): Ditto.
-	(cancel_breakpoints_callback): Ditto.
-	(linux_cancel_breakpoints): Pass &all_threads to find_inferior,
-	not &all_lwps.
-	(select_event_lwp): Ditto.  Fetch ptid from event_thread.
-	(unsuspend_one_lwp): Update, "entry" parameter is a
-	struct thread_info * now.
-	(unsuspend_all_lwps): Pass &all_threads to find_inferior,
-	not &all_lwps.
-	(linux_stabilize_threads): Ditto.  And for for_each_inferior.
-	Fetch lwpid from thread, not lwp.
-	(linux_wait_1): Fetch ptid, lwpid from current_inferior.
-	Pass &all_threads to find_inferior, not &all_lwps.
-	(send_sigstop): Fetch lwpid from thread, not lwp.
-	(send_sigstop_callback): Update, "entry" parameter is a
-	struct thread_info * now.
-	(suspend_and_send_sigstop_callback): Ditto.
-	(wait_for_sigstop): Ditto.  Fetch ptid, lwpid from thread, lwp.
-	(stuck_in_jump_pad_callback): Update, "entry" parameter is a
-	struct thread_info * now.
-	(move_out_of_jump_pad_callback): Ditto.  Fetch ptid, lwpid
-	from thread, lwp.
-	(lwp_running): Update, "entry" parameter is a
-	struct thread_info * now.
-	(stop_all_lwps): Fetch ptid from thread.
-	Pass &all_threads to find_inferior, for_each_inferior, not &all_lwps.
-	(linux_resume_one_lwp): Fetch lwpid from thread.
-	(linux_set_resume_request): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch pid, lwpid from thread.
-	(resume_status_pending_p): Update, "entry" parameter is a
-	struct thread_info * now.
-	(need_step_over_p): Ditto.  Fetch lwpid from thread.
-	(start_step_over): Fetch lwpid from thread.
-	(linux_resume_one_thread): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch lwpid from thread.
-	(linux_resume): Pass &all_threads to find_inferior, not &all_lwps.
-	(proceed_one_lwp): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch lwpid from thread.
-	(unsuspend_and_proceed_one_lwp): Update, "entry" parameter is a
-	struct thread_info * now.
-	(proceed_all_lwps): Pass &all_threads to find_inferior, not &all_lwps.
-	(unstop_all_lwps): Ditto.  Fetch lwpid from thread.
-	(regsets_fetch_inferior_registers): Fetch lwpid from current_inferior
-	directly.
-	(regsets_store_inferior_registers): Ditto.
-	(fetch_register, store_register): Ditto.
-	(linux_read_memory, linux_write_memory): Ditto.
-	(linux_request_interrupt): Ditto.
-	(linux_read_auxv): Ditto.
-	(linux_xfer_siginfo): Ditto.
-	(linux_qxfer_spu): Ditto.
-	(linux_qxfer_libraries_svr4): Ditto.
-	* linux-low.h (ptid_of, pid_of, lwpid_of): Delete,
-	moved to inferiors.h.
-	(get_lwp): Delete.
-	(get_thread_lwp): Update.
-	(struct lwp_info): Delete member "entry".  Simplify comment for
-	member "thread".
-	(all_lwps): Delete.
-	* linux-mips-low.c (mips_read_description): Fetch lwpid from
-	current_inferior directly.
-	(update_watch_registers_callback): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch pid from thread.
-	(mips_linux_prepare_to_resume): Fetch ptid from thread.
-	(mips_insert_point): Fetch lwpid from current_inferior.
-	Pass &all_threads to find_inferior, not &all_lwps.
-	(mips_remove_point): Pass &all_threads to find_inferior, not &all_lwps.
-	(mips_stopped_by_watchpoint): Fetch lwpid from current_inferior
-	directly.
-	(mips_stopped_data_address): Ditto.
-	* linux-s390-low.c (s390_arch_setup): Fetch pid from current_inferior
-	directly.
-	* linux-tile-low.c (tile_arch_setup): Ditto.
-	* linux-x86-low.c (x86_get_thread_area): Fetch lwpid from thread.
-	(update_debug_registers_callback): Update, "entry" parameter is a
-	struct thread_info * now.  Fetch pid from thread.
-	(i386_dr_low_set_addr): Fetch pid from current_inferior directly.
-	Pass &all_threads to find_inferior, not &all_lwps.
-	(i386_dr_low_get_addr): Fetch ptid from current_inferior directly.
-	(i386_dr_low_set_control): Fetch pid from current_inferior directly.
-	Pass &all_threads to find_inferior, not &all_lwps.
-	(i386_dr_low_get_control): Fetch ptid from current_inferior directly.
-	(i386_dr_low_get_status): Ditto.
-	(x86_linux_prepare_to_resume): Fetch ptid from thread.
-	(x86_siginfo_fixup): Fetch lwpid from current_inferior directly.
-	(x86_linux_read_description): Ditto.
-	* proc-service.c (ps_getpid): Fetch pid from current_inferior directly.
-
-2014-02-20  Doug Evans  <dje@google.com>
-
-	* inferiors.c (get_first_inferior): Fix buglet.
-
-2014-02-19  Doug Evans  <dje@google.com>
-
-	* gdbthread.h (add_thread): Change result type to struct thread_info *.
-	* inferiors.c (add_thread): Change result type to struct thread_info *.
-	All callers updated.
-	(add_lwp): Call add_thread here instead of in callers.
-	All callers updated.
-	* linux-low.h (get_lwp_thread): Rewrite.
-	(struct lwp_info): New member "thread".
-
-2014-02-19  Doug Evans  <dje@google.com>
-
-	* linux-low.c (add_lwp): Change result to struct lwp_info *.
-	All callers updated.
-
-2014-02-19  Doug Evans  <dje@google.com>
-
-	* inferiors.c (add_thread): Fix whitespace.
-
-2014-02-19  Doug Evans  <dje@google.com>
-
-	* dll.c (clear_dlls): Replace accessing list implemention details
-	with API function.
-	* gdbthread.h (get_first_thread): Declare.
-	* inferiors.c (for_each_inferior_with_data): New function.
-	(get_first_thread): New function.
-	(find_thread_ptid): Simplify.
-	(get_first_inferior): New function.
-	(clear_list): Delete.
-	(one_inferior_p): New function.
-	(clear_inferior_list): New function.
-	(clear_inferiors): Update.
-	* inferiors.h (for_each_inferior_with_data): Declare.
-	(clear_inferior_list): Declare.
-	(one_inferior_p): Declare.
-	(get_first_inferior): Declare.
-	* linux-low.c (linux_wait_for_event): Replace accessing list
-	implemention details with API function.
-	* server.c (target_running): Ditto.
-	(accumulate_file_name_length): New function.
-	(emit_dll_description): New function.
-	(handle_qxfer_libraries): Replace accessing list implemention
-	details with API function.
-	(handle_qxfer_threads_worker): New function.
-	(handle_qxfer_threads_proper): Replace accessing list implemention
-	details with API function.
-	(handle_query): Ditto.
-	(visit_actioned_threads_callback_ftype): New typedef.
-	(visit_actioned_threads_data): New struct.
-	(visit_actioned_threads): Rewrite to be find_inferior callback.
-	(resume): Call find_inferior.
-	(handle_status): Replace accessing list implemention
-	details with API function.
-	(process_serial_event): Replace accessing list implemention details
-	with API function.
-	* target.c (set_desired_inferior): Replace accessing list implemention
-	details with API function.
-	* tracepoint.c (same_process_p): New function.
-	(gdb_agent_about_to_close): Replace accessing list implemention
-	details with API function.
-	* win32-low.c (child_delete_thread): Replace accessing list
-	implemention details with API function.
-	(match_dll_by_basename): New function.
-	(dll_is_loaded_by_basename): New function.
-	(win32_ensure_ntdll_loaded): Replace accessing list implemention
-	details call to dll_is_loaded_by_basename.
-
-2014-02-19  Doug Evans  <dje@google.com>
-
-	* dll.h (struct dll_info): Add comment.
-	* gdbthread.h (struct thread_info): Add comment.
-	(current_ptid): Simplify.
-	* inferiors.c (add_process): Update.
-	(remove_process): Update.
-	* inferiors.h (struct process_info): Rename member "head" to "entry".
-	* linux-low.c (delete_lwp): Update.
-	(add_lwp): Update.
-	(last_thread_of_process_p): Update.
-	(kill_one_lwp_callback, linux_kill): Update.
-	(status_pending_p_callback): Update.
-	(wait_for_sigstop): Update.  Simplify read of ptid.
-	(start_step_over): Update.
-	* linux-low.h (ptid_of, pid_of, lwpid_of): Update.
-	(get_lwp_thread): Update.
-	(struct lwp_info): Rename member "head" to "entry".
-	* regcache.h (inferior_list_entry): Delete.
-	* server.c (kill_inferior_callback): Update.
-	(detach_or_kill_inferior_callback): Update.
-	(print_started_pid): Update.
-	(print_attached_pid): Update.
-	(process_serial_event): Simplify read of ptid.
-	* thread-db.c (thread_db_create_event): Update.
-	(thread_db_get_tls_address): Update.
-	* win32-low.c (current_inferior_ptid): Simplify.
-
-2014-02-19  Tom Tromey  <tromey@redhat.com>
-
-	* target.h (struct target_ops) <supports_btrace>: Add target_ops
-	argument.
-	(target_supports_btrace): Update.
-
-2014-02-14  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (IPA_OBJS): Append rsp-low-ipa.o.
-	(rsp-low-ipa.o): New target.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* ax.c (gdb_parse_agent_expr): Use hex2bin, not
-	convert_ascii_to_int.
-	* regcache.c (registers_to_string): Likewise.
-	* remote-utils.c (decode_M_packet): Likewise.
-	* server.c (process_serial_event): Likewise.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* server.c (handle_query, handle_v_run): Use hex2bin, not
-	unhexify.
-	* tracepoint.c (cmd_qtdpsrc, cmd_qtdv, cmd_qtnotes): Likewise.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* ax.c (gdb_unparse_agent_expr): Use bin2hex, not
-	convert_int_to_ascii.
-	* regcache.c (registers_to_string, collect_register_as_string):
-	Likewise.
-	* remote-utils.c (look_up_one_symbol, relocate_instruction):
-	Likewise.
-	* server.c (process_serial_event): Likewise.
-	* tracepoint.c (cmd_qtstatus, response_source, response_tsv)
-	(cmd_qtbuffer, cstr_to_hexstr): Likewise.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* remote-utils.c (look_up_one_symbol, monitor_output): Use
-	bin2hex, not hexify.
-	* tracepoint.c (cmd_qtstatus): Likewise.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* remote-utils.c (monitor_output): Pass explicit length to
-	hexify.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* tracepoint.c: Include rsp-low.h.
-	* server.c: Include rsp-low.h.
-	* remote-utils.h (convert_ascii_to_int, convert_int_to_ascii)
-	(unhexify, hexify, remote_escape_output, unpack_varlen_hex): Don't
-	declare.
-	* remote-utils.c: Include rsp-low.h.
-	(fromhex, hexchars, ishex, unhexify, tohex, hexify)
-	(remote_escape_output, remote_unescape_input, unpack_varlen_hex)
-	(convert_int_to_ascii, convert_ascii_to_int): Move to
-	common/rsp-low.c.
-	* regcache.c: Include rsp-low.h.
-	* ax.c: Include rsp-low.h.
-	* Makefile.in (SFILES): Add common/rsp-low.c.
-	(OBS): Add rsp-low.o.
-	(rsp-low.o): New target.
-
-2014-02-12  Tom Tromey  <tromey@redhat.com>
-
-	* utils.h (pulongest, plongest, phex_nz): Don't declare.
-	Include print-utils.h.
-	* utils.c (NUMCELLS, CELLSIZE, get_cell, decimal2str, pulongest)
-	(plongest, thirty_two, phex_nz): Remove.
-	* Makefile.in (SFILES): Add common/print-utils.c.
-	(OBS): Add print-utils.o.
-	(print-utils-ipa.o): New target.
-	(print-utils.o): New target.
-	(IPA_OBJS): Add print-utils-ipa.o.
-
-2014-02-06  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (SFILES): Fix indentation.
-
-2014-02-05  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_wait_for_event): Improve comment.
-	(linux_wait_1): Keep current_inferior in sync with event_child.
-
-2014-01-22  Doug Evans  <dje@google.com>
-
-	* gdbthread.h (gdb_id_to_thread): Delete, unused.
-
-2014-01-22  Doug Evans  <dje@google.com>
-
-	* configure.ac (AC_CHECK_FUNCS): Add test for gettimeofday.
-	* configure: Regenerate.
-	* config.in: Regenerate.
-	* Makefile.in (SFILES): Add debug.c.
-	(OBS): Add debug.o.
-	* debug.c: New file.
-	* debug.h: New file.
-	* linux-aarch64-low.c (*): Update all debugging printfs to use
-	debug_printf instead of fprintf.
-	* linux-arm-low.c (*): Ditto.
-	* linux-cris-low.c (*): Ditto.
-	* linux-crisv32-low.c (*): Ditto.
-	* linux-m32r-low.c (*): Ditto.
-	* linux-sparc-low.c (*): Ditto.
-	* linux-x86.c (*): Ditto.
-	* linux-low.c (*): Ditto.
-	(linux_wait_1): Add calls to debug_enter, debug_exit.
-	(linux_wait): Remove redundant debugging printf.
-	(stop_all_lwps): Add calls to debug_enter, debug_exit.
-	(linux_resume, unstop_all_lwps): Ditto.
-	* mem-break.c (*): Update all debugging printfs to use
-	debug_printf instead of fprintf.
-	* remote-utils.c (*): Ditto.
-	* thread-db.c (*): Ditto.
-	* server.c #include <ctype.h>, "gdb_vecs.h".
-	(debug_threads): Moved to debug.c.
-	(*): Update all debugging printfs to use debug_printf instead of
-	fprintf.
-	(start_inferior): Replace call to fflush with call to debug_flush.
-	(monitor_show_help): Mention set debug-format.
-	(parse_debug_format_options): New function.
-	(handle_monitor_command): Handle "monitor set debug-format".
-	(gdbserver_usage): Mention --debug-format.
-	(main): Parse --debug-format.
-	* server.h (debug_threads): Declaration moved to debug.h.
-	#include "debug.h".
-	* tracepoint.c (trace_debug_1) [!IN_PROCESS_AGENT]: Add version of
-	trace_debug_1 that uses debug_printf.
-	(tracepoint_look_up_symbols): Update all debugging printfs to use
-	debug_printf instead of fprintf.
-
-2014-01-20  Baruch Siach  <baruch@tkos.co.il>
-
-	* linux-xtensa-low.c: Include asm/ptrace.h instead of
-	sys/ptrace.h.
-
-2014-01-17  Pedro Alves  <palves@redhat.com>
-
-	PR build/16445
-	* linux-x86-low.c: Don't include elf/common.h if ELFMAG0 is
-	defined after including gdb_proc_service.h.
-
-2014-01-16  Doug Evans  <dje@google.com>
-
-	* dll.c (UNSPECIFIED_CORE_ADDR): New macro.
-	(match_dll): Use it.
-
-2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* target.h (target_ops) <read_btrace>: Change parameters and
-	return type to allow error reporting.
-	* server.c (handle_qxfer_btrace): Support delta reads.  Pass
-	trace reading errors on.
-	* linux-low.c (linux_low_read_btrace): Pass trace reading
-	errors on.
-	(linux_low_disable_btrace): New.
-
-2014-01-15  Doug Evans  <dje@google.com>
-
-	* inferiors.c (thread_id_to_gdb_id): Delete.
-	* inferiors.h (thread_id_to_gdb_id): Delete.
-
-2014-01-13  Eli Zaretskii  <eliz@gnu.org>
-
-	* Makefile.in (INCLUDE_CFLAGS): Remove trailing slash from
-	"-I$(srcdir)/../".  Fixes MinGW compilation errors with old GCC
-	versions.
-
-2014-01-08  Pedro Alves  <palves@redhat.com>
-
-	* server.c (handle_status): Don't discard previous queued stop
-	replies or thread's pending status here.
-	(main) <disconnection>: Do it here instead.
-
-2014-01-08  Pedro Alves  <palves@redhat.com>
-
-	* gdbthread.h (struct thread_info) <status_pending_p>: New field.
-	* server.c (visit_actioned_threads, handle_pending_status): New
-	function.
-	(handle_v_cont): Factor out parts to ...
-	(resume): ... this new function.  If in all-stop, and a thread
-	being resumed has a pending status, report it without actually
-	resuming.
-	(myresume): Adjust to use the new 'resume' function.
-	(clear_pending_status_callback, set_pending_status_callback)
-	(find_status_pending_thread_callback): New functions.
-	(handle_status): Handle the case of multiple threads having
-	interesting statuses to report.  Report threads' real last signal
-	instead of always reporting GDB_SIGNAL_TRAP.  Look for a thread
-	with an interesting thread to report the status for, instead of
-	always reporting the status of the first thread.
-
-2014-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbserver.c (gdbserver_version): Set copyright year to 2014.
-	* gdbreplay.c (gdbreplay_version): Likewise.
-
-2013-12-18  Yufeng Zhang  <yufeng.zhang@arm.com>
-
-	* linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set
-	iov.iov_len with the real length in use.
-
-2013-12-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in (safe-ctype.o, lbasename.o): New rules.
-	* configure.srv: Add safe-ctype.o and lbasename.o to srv_tgtobj
-	for all targets that use win32-low.c.
-	* win32-low.c (win32_ensure_ntdll_loaded): New function.
-	(do_initial_child_stuff): Add call to win32_ensure_ntdll_loaded.
-
-2013-12-13  Pedro Alves  <palves@redhat.com>
-
-	* target.c (mywait): Set OURSTATUS->KIND to TARGET_WAITKIND_STOPPED
-	if equal to TARGET_WAITKIND_LOADED.
-	* win32-low.c (cached_status): New static global.
-	(win32_wait): Add declaration.
-	(do_initial_child_stuff): Flush all initial pending debug events
-	up to the initial breakpoint.
-	(win32_wait): If CACHED_STATUS was set, return that instead
-	of doing a real wait.  Remove the code resuming the execution
-	of the inferior after receiving a TARGET_WAITKIND_LOADED event
-	during the initial phase.  Also remove the code changing
-	OURSTATUS->KIND from TARGET_WAITKIND_LOADED to
-	TARGET_WAITKIND_STOPPED.
-
-2013-12-11  Yao Qi  <yao@codesourcery.com>
-
-	* notif.c (handle_notif_ack): Return 0 if no notification
-	matches.
-
-2013-11-20  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_set_resume_request): Fix comment.
-
-2013-11-20  Doug Evans  <dje@google.com>
-
-	* linux-low.c (resume_status_pending_p): Tweak comment.
-
-2013-11-20  Walfred Tedeschi  <walfred.tedeschi@intel.com>
-
-	* Makefile.in: Add i386-mpx.c, i386-mpx-linux.c, amd64-mpx.c,
-	amd64-mpx-linux.c, x32-mpx.c and x32-mpx-linux.c generation.
-	* configure.srv (srv_i386_regobj): Add i386-mpx.o.
-	(srv_i386_linux_regobj): Add i386-mpx-linux.o.
-	(srv_amd64_regobj): Add amd64-mpx.o.
-	(srv_amd64_linux_regobj): Add amd64-mpx-linux.o.
-	(srv_i386_32bit_xmlfiles): Add i386/32bit-mpx.xml.
-	(srv_i386_64bit_xmlfiles): Add i386/64bit-mpx.xml.
-	* i387-fp.c (num_pl_bnd_register) Added constant.
-	(num_pl_bnd_cfg_registers) Added constant.
-	(struct i387_xsave) Added reserved area and MPX fields.
-	(i387_cache_to_xsave, i387_xsave_to_cache) Add MPX.
-	* linux-x86-low.c (init_registers_i386_mpx_linux): Declare new
-	function.
-	(tdesc_i386_mpx_linux): Add MPX amd64 target.
-	(init_registers_amd64_mpx_linux): Declare new function.
-	(tdesc_amd64_mpx_linux): Add MPX amd64 target.
-	(x86_64_regmap): Add MPX registers.
-	(x86_linux_read_description): Add MPX case.
-	(initialize_low_arch): Initialize MPX targets.
-
-2013-11-18  Tom Tromey  <tromey@redhat.com>
-
-	* configure: Rebuild.
-	* configure.ac: Don't check for stdlib.h.
-	* gdbreplay.c: Unconditionally include stdlib.h.
-
-2013-11-18  Tom Tromey  <tromey@redhat.com>
-
-	* config.in: Rebuild.
-	* configure: Rebuild.
-	* configure.ac: Don't use AC_HEADER_DIRENT.
-
-2013-11-18  Tom Tromey  <tromey@redhat.com>
-
-	* server.h: Don't check HAVE_STRING_H.
-	* gdbreplay.c: Don't check HAVE_STRING_H.
-	* configure: Rebuild.
-
-2013-11-18  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (gdbreplay$(EXEEXT)): Depend on and link against
-	LIBGNU.
-
-2013-11-08  Tom Tromey  <tromey@redhat.com>
-
-	* configure, config.in: Rebuild.
-	* configure.ac: Remove unused configury.
-
-2013-11-08  Tom Tromey  <tromey@redhat.com>
-
-	* acinclude.m4: Include common.m4, codeset.m4.
-	* configure, config.in: Rebuild.
-	* configure.ac: Use GDB_AC_COMMON.
-
-2013-11-06  Andreas Arnez  <arnez@linux.vnet.ibm.com>
-
-	* linux-s390-low.c (HWCAP_S390_TE): New define.
-	(s390_arch_setup): Consider the TE field in the HWCAP for
-	determining 'have_regset_tdb'.
-
-2013-10-16  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	PR gdb/16014
-	* tracepoint.c (download_tracepoint_1): Remove unnecessary double
-	call to sizeof.
-
-2013-10-02  Pedro Alves  <palves@redhat.com>
-
-	* server.c (process_serial_event): Don't output "GDBserver
-	exiting" if GDB is connected through stdio.
-	* target.c (mywait): Likewise, be silent if GDB is connected
-	through stdio.
-
-2013-10-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_add_threads_after_attach): New function.
-	(lynx_attach): Remove call to add_thread.  Add call to
-	lynx_add_threads_after_attach instead.
-
-2013-09-28  Mike Frysinger  <vapier@gentoo.org>
-
-	* configure.ac (AC_CHECK_HEADERS): Add sys/syscall.h
-	* config.in, configure: Regenerated.
-
-2013-09-18  Yao Qi  <yao@codesourcery.com>
-
-	PR server/15959
-	* server.c (start_inferior): Clear 'resume_info'.
-
-2013-09-16  Jiong Wang  <jiwang@tilera.com>
-
-	* linux-tile-low.c (tile_regsets): Modify the size field to 64-bit
-	for each register.
-
-2013-09-16  Jiong Wang  <jiwang@tilera.com>
-
-	* configure.srv <tilegx*-*-linux*>: Remove linux-osdata.o from and add
-	linux-tile-low.o to srv_tgtobj.
-
-2013-09-16  Will Newton  <will.newton@linaro.org>
-
-	* linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero
-	out regs.
-
-2013-09-06  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (gdb_proc_service_h, regdef_h, regcache_h)
-	(signals_def, signals_h, ptid_h, ax_h, agent_h, linux_btrace_h)
-	(linux_osdata_h, vec_h, gdb_vecs_h, host_defs_h, libiberty_h)
-	(server_h, gdbthread_h, linux_low_h, linux_ptrace_h)
-	(gdb_thread_db_h, linux_procfs_h, lynx_low_h, nto_low_h)
-	(mips_linux_watch_h, i386_low_h, win32_low_h): Delete.
-
-2013-09-06  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (linux-btrace.o, mips-linux-watch.o): Remove
-	explicit header dependencies and use $COMPILE/$POSTCOMPILE.
-
-2013-09-06  Pedro Alves  <palves@redhat.com>
-
-	* linux-amd64-ipa.c: Include tracepoint.h.
-	* linux-i386-ipa.c: Include tracepoint.h.
-
-2013-09-06  Ricard Wanderlof  <ricardw@axis.com>
-
-	* linux-crisv32-low.c (PTRACE_GET_THREAD_AREA): New macro.
-	(ps_get_thread_area): New function.
-
-2013-09-06  Ricard Wanderlof  <ricardw@axis.com>
-
-	* linux-crisv32-low.c (elf_gregset_t): Delete typedef.
-	(initialize_low_arch): Call init_registers_crisv32 rather than
-	init_register_crisv32.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (handle_vFile, hostio_last_error_from_errno): Move
-	to ...
-	* hostio.h: ... this new file.
-	* hostio.c, server.c, linux-low.c, nto-low.c, spu-low,
-	win32-low.c: Include hostio.h.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (gdb_client_data, handler_func, callback_handler_func)
-	(delete_file_handler, add_file_handler, append_callback_event)
-	(delete_callback_event, start_event_loop, initialize_event_loop):
-	Move to event-loop.h and include it.
-	* event-loop.h: New file.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* dll.c, inferiors.c, remote-utils.c, server.c: Include "dll.h".
-	* server.h (struct dll_info, all_dlls, dlls_changed, clear_dlls)
-	(loaded_dll, unloaded_dll): Move to ...
-	* dll.h: ... this new file.
-	* inferiors.c, remote-utils.c, win32-low.c: Include "dll.h".
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (current_process, get_thread_process, all_processes)
-	(add_inferior_to_list, for_each_inferior, current_inferior)
-	(remove_inferior, add_process, remove_process, find_process_pid)
-	(have_started_inferiors_p, have_attached_inferiors_p)
-	(thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id)
-	(clear_inferiors, find_inferior, find_inferior_id)
-	(inferior_target_data, set_inferior_target_data)
-	(inferior_regcache_data, set_inferior_regcache_data): Move to
-	inferiors.h, and include it.
-	* inferiors.h: New file.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (struct emit_ops, current_insn_ptr, emit_error):
-	Move ...
-	* ax.h: ... here.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* ax.c, linux-low.c, linux-x86-low.c, server.c: Include
-	tracepoint.h.
-	* server.h (IPA_BUFSIZ, initialize_tracepoint, tracing)
-	(disconnected_tracing, tracepoint_look_up_symbols, stop_tracing
-	(handle_tracepoint_general_set, handle_tracepoint_query)
-	(tracepoint_finished_step, tracepoint_was_hit)
-	(release_while_stepping_state_list, current_traceframe)
-	(in_readonly_region, traceframe_read_mem)
-	(fetch_traceframe_registers, traceframe_read_sdata)
-	(traceframe_read_info, struct fast_tpoint_collect_status)
-	(fast_tracepoint_collecting, force_unlock_trace_buffer)
-	(handle_tracepoit_bkpts, initialize_low_tracepoint)
-	(supply_fast_tracepoint_registers)
-	(supply_static_tracepoint_registers, set_trampoline_buffer_space)
-	(ipa_tdesc, claim_trampoline_space)
-	(have_fast_tracepoint_trampoline_buffer, gdb_agent_about_to_close)
-	(agent_mem_read, agent_get_trace_state_variable_value)
-	(agent_set_trace_state_variable_value, agent_tsv_read)
-	(agent_mem_read_string, get_raw_reg_func_addr)
-	(get_get_tsv_func_addr, get_set_tsv_func_addr): Move to ...
-	* tracepoint.h: ... this new file.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (perror_with_name, error, fatal, warning, paddress)
-	(pulongest, plongest, phex_nz, pfildes): Move to utils.h, and
-	include it.
-	* utils.h: New file.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (remote_debug, noack_mode, transport_is_reliable)
-	(gdb_connected, STDIO_CONNECTION_NAME, remote_connection_is_stdio)
-	(read_ptid, write_ptid, putpkt, putpkt_binary, putpkt_notif)
-	(getpkt, remote_prepare, remote_open, remote_close, write_ok)
-	(write_enn, initialize_async_io, enable_async_io)
-	(disable_async_io, check_remote_input_interrupt_request)
-	(convert_ascii_to_int, convert_int_to_ascii, new_thread_notify)
-	(dead_thread_notify, prepare_resume_reply)
-	(decode_address_to_semicolon, decode_address, decode_m_packet)
-	(decode_M_packet, decode_X_packet, decode_xfer_write)
-	(decode_search_memory_packet, unhexify, hexify)
-	(remote_escape_output, unpack_varlen_hex, clear_symbol_cache)
-	(look_up_one_symbol, relocate_instruction)
-	(monitor_output): Move to remote-utils.h, and include it.
-	* remote-utils.h: New file.
-
-2013-09-05  Pedro Alves  <palves@redhat.com>
-
-	* server.h (_): Delete.
-
-2013-09-02  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (TRACEFRAME_EOB_MARKER_SIZE): New macro.
-	(init_trace_buffer): Ensure at least TRACEFRAME_EOB_MARKER_SIZE is
-	allocated.
-	(trace_buffer_alloc): Use TRACEFRAME_EOB_MARKER_SIZE.
-
-2013-09-02  Pierre Muller  <muller@sourceware.org>
-
-	* win32-low.c (child_xfer_memory): Check if ReadProcessMemory
-	or WriteProcessMemory complete successfully and handle
-	ERROR_PARTIAL_COPY error.
-
-2013-09-02  Pedro Alves  <palves@redhat.com>
-
-	* server.c (gdb_read_memory): Return -1 on traceframe memory read
-	error instead of EIO.
-
-2013-08-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	PR server/15604
-	* linux-low.c: Include filestuff.h.
-	(linux_create_inferior) <pid == 0>: Call close_most_fds.
-	* lynx-low.c: Include filestuff.h.
-	(lynx_create_inferior) <pid == 0>: Call close_most_fds.
-	* server.c: Include filestuff.h.
-	(main): Call notice_open_fds.
-	* spu-low.c: Include filestuff.h.
-	(spu_create_inferior) <pid == 0>: Call close_most_fds.
-
-2013-08-22  Luis Machado  <lgustavo@codesourcery.com>
-
-	* Makefile.in: Explain why ../target and ../nat are not
-	listed as include file search paths.
-	(linux-waitpid.o): New object file rule.
-	* configure.srv (srv_native_linux_obj): New variable.
-	Replace all occurrences of linux native object files with
-	$srv_native_linux_obj.
-	* linux-low.c: Include nat/linux-nat.h and nat/linux-waitpid.h.
-	(HAS_NOMMU): Move defining logic to common/linux-ptrace.c.
-	(linux_enable_event_reporting): Remove declaration.
-	(my_waitpid): Moved to common/linux-waitpid.c.
-	(linux_wait_for_event): Pass ptid when calling
-	linux_enable_event_reporting.
-	(linux_supports_tracefork_flag): Remove.
-	(linux_enable_event_reporting): Likewise.
-	(linux_tracefork_grandchild): Remove.
-	(STACK_SIZE): Moved to common/linux-ptrace.c.
-	(linux_tracefork_child): Remove.
-	(linux_test_for_tracefork): Remove.
-	(linux_look_up_symbols): Call linux_supports_traceclone.
-	(initialize_low): Remove call to linux_test_for_tracefork.
-	* linux-low.h (PTRACE_TYPE_ARG3): Move to
-	common/linux-ptrace.h.
-	(PTRACE_TYPE_ARG4): Likewise.
-	Include linux-ptrace.h.
-
-2013-08-21  Pedro Alves  <palves@redhat.com>
-
-	* config.in: Renegerate.
-
-2013-08-19  Luis Machado  <lgustavo@codesourcery.com>
-
-	* Makefile.in (INCLUDE_CFLAGS): Include -I$(srcdir)/../.
-	(SFILES): Remove $(srcdir)/common/target-common.c and
-	add $(srcdir)/target/waitstatus.c.
-	(OBS): Remove target-common.o and add waitstatus.o.
-	(server_h): Remove $(srcdir)/../common/target-common.h and
-	add $(srcdir)/../target/resume.h, $(srcdir)/../target/wait.h
-	and $(srcdir)/../target/waitstatus.h.
-	(target-common.o): Remove.
-	(waitstatus.o): New target object file.
-	* target.h: Do not include target-common.h and
-	include target/resume.h, target/wait.h and
-	target/waitstatus.h.
-
-2013-08-13  Luis Machado  <lgustavo@codesourcery.com>
-
-	* linux-arm-low.c: Rename all occurrences of PTRACE_ARG3_TYPE
-	to PTRACE_TYPE_ARG3.
-	* linux-low.c: Rename all occurrences of PTRACE_ARG3_TYPE
-	to PTRACE_TYPE_ARG3 and PTRACE_ARG4_TYPE to
-	PTRACE_TYPE_ARG4.
-	* linux-low.h (PTRACE_ARG3_TYPE): Rename to PTRACE_TYPE_ARG3.
-	(PTRACE_ARG4_TYPE): Rename to PTRACE_TYPE_ARG4.
-
-2013-07-27  Jie Zhang  <jie@codesourcery.com>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-	    Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (SFILES): Add common/mips-linux-watch.c.
-	(mips-linux-watch.o): New rule.
-	(mips_linux_watch_h): New variable.
-	* configure.srv <mips*-*-linux*>: Add mips-linux-watch.o to
-	srv_tgtobj.
-	* linux-mips-low.c: Include mips-linux-watch.h.
-	(struct arch_process_info, struct arch_lwp_info): New.
-	(update_watch_registers_callback): New function.
-	(mips_linux_new_process, mips_linux_new_thread) New functions.
-	(mips_linux_prepare_to_resume, mips_insert_point): New
-	functions.
-	(mips_remove_point, mips_stopped_by_watchpoint): New
-	functions.
-	(rsp_bp_type_to_target_hw_bp_type): New function.
-	(mips_stopped_data_address): New function.
-	(the_low_target): Add watchpoint support functions.
-
-2013-07-27  Yao Qi  <yao@codesourcery.com>
-
-	* i386-low.c: Include break-common.h.
-	(enum target_hw_bp_type): Remove.
-
-2013-07-24  Luis Machado  <lgustavo@codesourcery.com>
-
-	* Makefile.in (SFILES): /common/target-common.c.
-	(OBS): Add target-common.o.
-	(server_h): Add $(srcdir)/../common/target-common.h.
-	(target-common.o): New target.
-	* server.c (queue_stop_reply_callback): Free
-	status string after use.
-	* target.c (target_waitstatus_to_string): Remove.
-	* target.h: Include target-common.h.
-	(resume_kind): Likewise.
-	(target_waitkind): Likewise.
-	(target_waitstatus): Likewise.
-	(TARGET_WNOHANG): Likewise.
-
-2013-07-04  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (host_alias): Use @host_noncanonical@.
-	(target_alias): Use @target_noncanonical@.
-	* configure.ac: Use ACX_NONCANONICAL_TARGET and
-	ACX_NONCANONICAL_HOST.
-	* configure: Regenerated.
-
-	Revert:
-	2013-06-28  Mircea Gherzan  <mircea.gherzan@intel.com>
-
-	* configure.ac (version_host, version_target): Set and AC_SUBST them.
-	* configure: Rebuild.
-	* Makefile.in (version_host, version_target): Get from configure.
-	(version.c): Use $(version_host) and $(version_target).
-
-2013-07-03  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (config.status): Depend on development.sh.
-	* acinclude.m4: Include libmcheck.m4.
-	* configure: Regenerate.
-
-2013-07-02  Mircea Gherzan  <mircea.gherzan@intel.com>
-
-	* win32-low.c (winapi_DebugActiveProcessStop): Move the WINAPI
-	attribute inside the parentheses.
-	(winapi_DebugSetProcessKillOnExit): Ditto.
-	(winapi_DebugBreakProcess): Ditto.
-	(winapi_GenerateConsoleCtrlEvent): Ditto.
-
-2013-07-02  Mircea Gherzan  <mircea.gherzan@intel.com>
-
-	* notif.h (notif_event): Add a dummy member to avoid compiler
-	errors.
-
-2013-07-01  Pedro Alves  <palves@redhat.com>
-
-	* hostio.c (HOSTIO_PATH_MAX): Define.
-	(require_filename, handle_open, handle_unlink, handle_readlink):
-	Use it.
-
-2013-07-01  Pedro Alves  <palves@redhat.com>
-
-	* server.h: Include "pathmax.h".
-	* linux-low.c: Don't include sys/param.h.
-	(linux_pid_exe_is_elf_64_file): Use PATH_MAX instead of
-	MAXPATHLEN.
-	* win32-low.c: Don't include sys/param.h.
-	(win32_create_inferior): Use PATH_MAX instead of MAXPATHLEN.
-
-2013-07-01  Pedro Alves  <palves@redhat.com>
-
-	* event-loop.c: Don't check HAVE_UNISTD_H before including
-	<unistd.h>.
-	* gdbreplay.c: Likewise.
-	* remote-utils.c: Likewise.
-	* server.c: Likewise.
-	* configure.ac: Don't check for unistd.h.
-	* configure: Regenerate.
-
-2013-06-28  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (version.c): Use version.in, not
-	common/version.in.
-
-2013-06-28  Mircea Gherzan  <mircea.gherzan@intel.com>
-
-	* configure.ac (version_host, version_target): Set and AC_SUBST them.
-	* configure: Rebuild.
-	* Makefile.in (version_host, version_target): Get from configure.
-	(version.c): Use $(version_host) and $(version_target).
-
-2013-06-10  Dmitry Kozlov <ddk@codesourcery.com>
-
-	Fix trace-status to output user name without trailing colon.
-	* tracepoint.c (cmd_qtstatus): Remove unnecessary colon from user name.
-
-2013-06-10  Dmitry Kozlov <ddk@codesourcery.com>
-
-	Fix trace-status to output proper start-time and stop-time.
-	* tracepoint.c (cmd_qtstatus): Modify trace-status output to
-	output start time and stop time in hex as gdb expects.
-
-2013-06-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* tracepoint.c (build_traceframe_info_xml): Output trace state
-	variables present in the trace buffer.
-
-2013-06-24  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (version.c): Use bfd/version.h, common/version.in,
-	create-version.sh.
-	(version.o): Remove.
-	* gdbreplay.c: Include version.h.
-	(version, host_name): Don't declare.
-	* server.h: Include version.h.
-	(version, host_name): Don't declare.
-
-2013-06-12  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (linux_is_elf64): Delete global.
-	(x86_siginfo_fixup): Replace reference to `linux_is_elf64' global
-	with local linux_pid_exe_is_elf_64_file use.
-
-2013-06-11  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (regset_disabled, disable_regset): New functions.
-	(regsets_fetch_inferior_registers)
-	(regsets_store_inferior_registers): Use them.
-	(initialize_regsets_info); Don't allocate the disabled_regsets
-	array here.
-	* linux-low.h (struct regsets_info) <disabled_regsets>: Extend
-	comment.
-
-2013-06-11  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (initialize_regsets_info): Use xcalloc instead of
-	xmalloc.
-
-2013-06-11  Pedro Alves  <palves@redhat.com>
-
-	* linux-x86-low.c (initialize_low_arch): Call
-	init_registers_x32_avx_linux.
-
-2013-06-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Fix compatibility with Android Bionic.
-	* linux-low.c (linux_qxfer_libraries_svr4): Ignore first entry even if
-	it is not empty.
-
-2013-06-07  Pedro Alves  <palves@redhat.com>
-
-	PR server/14823
-	* Makefile.in (OBS): Add tdesc.o.
-	(IPA_OBJS): Add tdesc-ipa.o.
-	(tdesc-ipa.o): New rule.
-	* ax.c (gdb_eval_agent_expr): Adjust register_size call to new
-	interface.
-	* linux-low.c (new_inferior): Delete.
-	(disabled_regsets, num_regsets): Delete.
-	(linux_add_process): Adjust to set the new per-process
-	new_inferior flag.
-	(linux_detach_one_lwp): Adjust to call regcache_invalidate_thread.
-	(linux_wait_for_lwp): Adjust.  Only call arch_setup if the event
-	was a stop.  When calling arch_setup, switch the current inferior
-	to the thread that got an event.
-	(linux_resume_one_lwp): Adjust to call regcache_invalidate_thread.
-	(regsets_fetch_inferior_registers)
-	(regsets_store_inferior_registers): New regsets_info parameter.
-	Adjust to use it.
-	(linux_register_in_regsets): New regs_info parameter.  Adjust to
-	use it.
-	(register_addr, fetch_register, store_register): New usrregs_info
-	parameter.  Adjust to use it.
-	(usr_fetch_inferior_registers, usr_store_inferior_registers): New
-	parameter regs_info.  Adjust to use it.
-	(linux_fetch_registers): Get the current inferior's regs_info, and
-	adjust to use it.
-	(linux_store_registers): Ditto.
-	[HAVE_LINUX_REGSETS] (initialize_regsets_info): New.
-	(initialize_low): Don't initialize the target_regsets here.  Call
-	initialize_low_arch.
-	* linux-low.h (target_regsets): Delete declaration.
-	(struct regsets_info): New.
-	(struct usrregs_info): New.
-	(struct regs_info): New.
-	(struct process_info_private) <new_inferior>: New field.
-	(struct linux_target_ops): Delete the num_regs, regmap, and
-	regset_bitmap fields.  New field regs_info.
-	[HAVE_LINUX_REGSETS] (initialize_regsets_info): Declare.
-	* i387-fp.c (num_xmm_registers): Delete.
-	(i387_cache_to_fsave, i387_fsave_to_cache): Adjust find_regno
-	calls to new interface.
-	(i387_cache_to_fxsave, i387_cache_to_xsave, i387_fxsave_to_cache)
-	(i387_xsave_to_cache): Adjust find_regno calls to new interface.
-	Infer the number of xmm registers from the regcache's target
-	description.
-	* i387-fp.h (num_xmm_registers): Delete.
-	* inferiors.c (add_thread): Don't install the thread's regcache
-	here.
-	* proc-service.c (gregset_info): Fetch the current inferior's
-	regs_info.  Adjust to use it.
-	* regcache.c: Include tdesc.h.
-	(register_bytes, reg_defs, num_registers)
-	(gdbserver_expedite_regs): Delete.
-	(get_thread_regcache): If the thread doesn't have a regcache yet,
-	create one, instead of aborting gdbserver.
-	(regcache_invalidate_one): Rename to ...
-	(regcache_invalidate_thread): ... this.
-	(regcache_invalidate_one): New.
-	(regcache_invalidate): Only invalidate registers of the current
-	process.
-	(init_register_cache): Add target_desc parameter, and use it.
-	(new_register_cache): Ditto.  Assert the target description has a
-	non zero registers_size.
-	(regcache_cpy): Add assertions.  Adjust.
-	(realloc_register_cache, set_register_cache): Delete.
-	(registers_to_string, registers_from_string): Adjust.
-	(find_register_by_name, find_regno, find_register_by_number)
-	(register_cache_size): Add target_desc parameter, and use it.
-	(free_register_cache_thread, free_register_cache_thread_one)
-	(regcache_release, register_cache_size): New.
-	(register_size): Add target_desc parameter, and use it.
-	(register_data, supply_register, supply_register_zeroed)
-	(supply_regblock, supply_register_by_name, collect_register)
-	(collect_register_as_string, collect_register_by_name): Adjust.
-	* regcache.h (struct target_desc): Forward declare.
-	(struct regcache) <tdesc>: New field.
-	(init_register_cache, new_register_cache): Add target_desc
-	parameter.
-	(regcache_invalidate_thread): Declare.
-	(regcache_invalidate_one): Delete declaration.
-	(regcache_release): Declare.
-	(find_register_by_number, register_cache_size, register_size)
-	(find_regno): Add target_desc parameter.
-	(gdbserver_expedite_regs, gdbserver_xmltarget): Delete
-	declarations.
-	* remote-utils.c: Include tdesc.h.
-	(outreg, prepare_resume_reply): Adjust.
-	* server.c: Include tdesc.h.
-	(gdbserver_xmltarget): Delete declaration.
-	(get_features_xml, process_serial_event): Adjust.
-	* server.h [IN_PROCESS_AGENT] (struct target_desc): Forward
-	declare.
-	(struct process_info) <tdesc>: New field.
-	(ipa_tdesc): Declare.
-	* tdesc.c: New file.
-	* tdesc.h: New file.
-	* tracepoint.c: Include tdesc.h.
-	[IN_PROCESS_AGENT] (ipa_tdesc): Define.
-	(get_context_regcache): Adjust to pass ipa_tdesc down.
-	(do_action_at_tracepoint): Adjust to get the register cache size
-	from the context regcache's description.
-	(traceframe_walk_blocks): Adjust to get the register cache size
-	from the current trace frame's description.
-	(traceframe_get_pc): Adjust to get current trace frame's
-	description and pass it down.
-	(gdb_collect): Adjust to get the register cache size from the
-	IPA's description.
-	* linux-amd64-ipa.c (tdesc_amd64_linux): Declare.
-	(gdbserver_xmltarget): Delete.
-	(initialize_low_tracepoint): Set the ipa's target description.
-	* linux-i386-ipa.c (tdesc_i386_linux): Declare.
-	(initialize_low_tracepoint): Set the ipa's target description.
-	* linux-x86-low.c: Include tdesc.h.
-	[__x86_64__] (is_64bit_tdesc): New.
-	(ps_get_thread_area, x86_get_thread_area): Use it.
-	(i386_cannot_store_register): Rename to ...
-	(x86_cannot_store_register): ... this.  Use is_64bit_tdesc.
-	(i386_cannot_fetch_register): Rename to ...
-	(x86_cannot_fetch_register): ... this.  Use is_64bit_tdesc.
-	(x86_fill_gregset, x86_store_gregset): Adjust register_size calls
-	to new interface.
-	(target_regsets): Rename to ...
-	(x86_regsets): ... this.
-	(x86_get_pc, x86_set_pc): Adjust register_size calls to new
-	interface.
-	(x86_siginfo_fixup): Use is_64bit_tdesc.
-	[__x86_64__] (tdesc_amd64_linux, tdesc_amd64_avx_linux)
-	(tdesc_x32_avx_linux, tdesc_x32_linux)
-	(tdesc_i386_linux, tdesc_i386_mmx_linux, tdesc_i386_avx_linux):
-	Declare.
-	(x86_linux_update_xmltarget): Delete.
-	(I386_LINUX_XSAVE_XCR0_OFFSET): Define.
-	(have_ptrace_getfpxregs, have_ptrace_getregset): New.
-	(AMD64_LINUX_USER64_CS): New.
-	(x86_linux_read_description): New, based on
-	x86_linux_update_xmltarget.
-	(same_process_callback): New.
-	(x86_arch_setup_process_callback): New.
-	(x86_linux_update_xmltarget): New.
-	(x86_regsets_info): New.
-	(amd64_linux_regs_info): New.
-	(i386_linux_usrregs_info): New.
-	(i386_linux_regs_info): New.
-	(x86_linux_regs_info): New.
-	(x86_arch_setup): Reimplement.
-	(x86_install_fast_tracepoint_jump_pad): Use is_64bit_tdesc.
-	(x86_emit_ops): Ditto.
-	(the_low_target): Adjust.  Install x86_linux_regs_info,
-	x86_cannot_fetch_register, and x86_cannot_store_register.
-	(initialize_low_arch): New.
-	* linux-ia64-low.c (tdesc_ia64): Declare.
-	(ia64_fetch_register): Adjust.
-	(ia64_usrregs_info, regs_info): New globals.
-	(ia64_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-sparc-low.c (tdesc_sparc64): Declare.
-	(sparc_fill_gregset_to_stack, sparc_store_gregset_from_stack):
-	Adjust.
-	(sparc_arch_setup): New function.
-	(sparc_regsets_info, sparc_usrregs_info, regs_info): New globals.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-ppc-low.c (tdesc_powerpc_32l, tdesc_powerpc_altivec32l)
-	(tdesc_powerpc_cell32l, tdesc_powerpc_vsx32l)
-	(tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_altivec32l)
-	(tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_e500l)
-	(tdesc_powerpc_64l, tdesc_powerpc_altivec64l)
-	(tdesc_powerpc_cell64l, tdesc_powerpc_vsx64l)
-	(tdesc_powerpc_isa205_64l, tdesc_powerpc_isa205_altivec64l)
-	(tdesc_powerpc_isa205_vsx64l): Declare.
-	(ppc_cannot_store_register, ppc_collect_ptrace_register)
-	(ppc_supply_ptrace_register, parse_spufs_run, ppc_get_pc)
-	(ppc_set_pc, ppc_get_hwcap): Adjust.
-	(ppc_usrregs_info): Forward declare.
-	(!__powerpc64__) ppc_regmap_adjusted: New global.
-	(ppc_arch_setup): Adjust to the current process'es target
-	description.
-	(ppc_fill_vsxregset, ppc_store_vsxregset, ppc_fill_vrregset)
-	(ppc_store_vrregset, ppc_fill_evrregset, ppc_store_evrregse)
-	(ppc_store_evrregset): Adjust.
-	(target_regsets): Rename to ...
-	(ppc_regsets): ... this, and make static.
-	(ppc_usrregs_info, ppc_regsets_info, regs_info): New globals.
-	(ppc_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-s390-low.c (tdesc_s390_linux32, tdesc_s390_linux32v1)
-	(tdesc_s390_linux32v2, tdesc_s390_linux64, tdesc_s390_linux64v1)
-	(tdesc_s390_linux64v2, tdesc_s390x_linux64, tdesc_s390x_linux64v1)
-	(tdesc_s390x_linux64v2): Declare.
-	(s390_collect_ptrace_register, s390_supply_ptrace_register)
-	(s390_fill_gregset, s390_store_last_break): Adjust.
-	(target_regsets): Rename to ...
-	(s390_regsets): ... this, and make static.
-	(s390_get_pc, s390_set_pc): Adjust.
-	(s390_get_hwcap): New target_desc parameter, and use it.
-	[__s390x__] (have_hwcap_s390_high_gprs): New global.
-	(s390_arch_setup): Adjust to set the current process'es target
-	description.  Don't adjust the regmap.
-	(s390_usrregs_info, s390_regsets_info, regs_info): New globals.
-	[__s390x__] (s390_usrregs_info_3264, s390_regsets_info_3264)
-	(regs_info_3264): New globals.
-	(s390_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-mips-low.c (tdesc_mips_linux, tdesc_mips_dsp_linux)
-	(tdesc_mips64_linux, tdesc_mips64_dsp_linux): Declare.
-	[__mips64] (init_registers_mips_linux)
-	(init_registers_mips_dsp_linux): Delete defines.
-	[__mips64] (tdesc_mips_linux, tdesc_mips_dsp_linux): New defines.
-	(have_dsp): New global.
-	(mips_read_description): New, based on mips_arch_setup.
-	(mips_arch_setup): Reimplement.
-	(get_usrregs_info): New function.
-	(mips_cannot_fetch_register, mips_cannot_store_register)
-	(mips_get_pc, mips_set_pc, mips_fill_gregset, mips_store_gregset)
-	(mips_fill_fpregset, mips_store_fpregset): Adjust.
-	(target_regsets): Rename to ...
-	(mips_regsets): ... this, and make static.
-	(mips_regsets_info, mips_dsp_usrregs_info, mips_usrregs_info)
-	(dsp_regs_info, regs_info): New globals.
-	(mips_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-arm-low.c (tdesc_arm, tdesc_arm_with_iwmmxt)
-	(tdesc_arm_with_vfpv2, tdesc_arm_with_vfpv3, tdesc_arm_with_neon):
-	Declare.
-	(arm_fill_vfpregset, arm_store_vfpregset): Adjust.
-	(arm_read_description): New, with bits factored from
-	arm_arch_setup.
-	(arm_arch_setup): Reimplement.
-	(target_regsets): Rename to ...
-	(arm_regsets): ... this, and make static.
-	(arm_regsets_info, arm_usrregs_info, regs_info): New globals.
-	(arm_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-m68k-low.c (tdesc_m68k): Declare.
-	(target_regsets): Rename to ...
-	(m68k_regsets): ... this, and make static.
-	(m68k_regsets_info, m68k_usrregs_info, regs_info): New globals.
-	(m68k_regs_info): New function.
-	(m68k_arch_setup): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-sh-low.c (tdesc_sharch): Declare.
-	(target_regsets): Rename to ...
-	(sh_regsets): ... this, and make static.
-	(sh_regsets_info, sh_usrregs_info, regs_info): New globals.
-	(sh_regs_info, sh_arch_setup): New functions.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-bfin-low.c (tdesc_bfin): Declare.
-	(bfin_arch_setup): New function.
-	(bfin_usrregs_info, regs_info): New globals.
-	(bfin_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-cris-low.c (tdesc_cris): Declare.
-	(cris_arch_setup): New function.
-	(cris_usrregs_info, regs_info): New globals.
-	(cris_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-cris-low.c (tdesc_crisv32): Declare.
-	(cris_arch_setup): New function.
-	(cris_regsets_info, cris_usrregs_info, regs_info): New globals.
-	(cris_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-m32r-low.c (tdesc_m32r): Declare.
-	(m32r_arch_setup): New function.
-	(m32r_usrregs_info, regs_info): New globals.
-	(m32r_regs_info): Adjust.
-	(initialize_low_arch): New function.
-	* linux-tic6x-low.c (tdesc_tic6x_c64xp_linux)
-	(tdesc_tic6x_c64x_linux, tdesc_tic6x_c62x_linux): Declare.
-	(tic6x_usrregs_info): Forward declare.
-	(tic6x_read_description): New function, based on ...
-	(tic6x_arch_setup): ... this.  Reimplement.
-	(target_regsets): Rename to ...
-	(tic6x_regsets): ... this, and make static.
-	(tic6x_regsets_info, tic6x_usrregs_info, regs_info): New globals.
-	(tic6x_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-xtensa-low.c (tdesc_xtensa): Declare.
-	(xtensa_fill_gregset, xtensa_store_gregset): Adjust.
-	(target_regsets): Rename to ...
-	(xtensa_regsets): ... this, and make static.
-	(xtensa_regsets_info, xtensa_usrregs_info, regs_info): New
-	globals.
-	(xtensa_arch_setup, xtensa_regs_info): New functions.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-nios2-low.c (tdesc_nios2_linux): Declare.
-	(nios2_arch_setup): Set the current process'es tdesc.
-	(target_regsets): Rename to ...
-	(nios2_regsets): ... this.
-	(nios2_regsets_info, nios2_usrregs_info, regs_info): New globals.
-	(nios2_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-aarch64-low.c (tdesc_aarch64): Declare.
-	(aarch64_arch_setup): Set the current process'es tdesc.
-	(target_regsets): Rename to ...
-	(aarch64_regsets): ... this.
-	(aarch64_regsets_info, aarch64_usrregs_info, regs_info): New globals.
-	(aarch64_regs_info): New function.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* linux-tile-low.c (tdesc_tilegx, tdesc_tilegx32): Declare
-	globals.
-	(target_regsets): Rename to ...
-	(tile_regsets): ... this.
-	(tile_regsets_info, tile_usrregs_info, regs_info): New globals.
-	(tile_regs_info): New function.
-	(tile_arch_setup): Set the current process'es tdesc.
-	(the_low_target): Adjust.
-	(initialize_low_arch): New function.
-	* spu-low.c (tdesc_spu): Declare.
-	(spu_create_inferior, spu_attach): Set the new process'es tdesc.
-	* win32-arm-low.c (tdesc_arm): Declare.
-	(arm_arch_setup): New function.
-	(the_low_target): Install arm_arch_setup instead of
-	init_registers_arm.
-	* win32-i386-low.c (tdesc_i386, tdesc_amd64): Declare.
-	(init_windows_x86): Rename to ...
-	(i386_arch_setup): ... this.  Set `win32_tdesc'.
-	(the_low_target): Adjust.
-	* win32-low.c (win32_tdesc): New global.
-	(child_add_thread): Don't create the thread cache here.
-	(do_initial_child_stuff): Set the new process'es tdesc.
-	* win32-low.h (struct target_desc): Forward declare.
-	(win32_tdesc): Declare.
-	* lynx-i386-low.c (tdesc_i386): Declare global.
-	(lynx_i386_arch_setup): Set `lynx_tdesc'.
-	* lynx-low.c (lynx_tdesc): New global.
-	(lynx_add_process): Set the new process'es tdesc.
-	* lynx-low.h (struct target_desc): Forward declare.
-	(lynx_tdesc): Declare global.
-	* lynx-ppc-low.c (tdesc_powerpc_32): Declare global.
-	(lynx_ppc_arch_setup): Set `lynx_tdesc'.
-	* nto-low.c (nto_tdesc): New global.
-	(do_attach): Set the new process'es tdesc.
-	* nto-low.h (struct target_desc): Forward declare.
-	(nto_tdesc): Declare.
-	* nto-x86-low.c (tdesc_i386): Declare.
-	(nto_x86_arch_setup): Set `nto_tdesc'.
-
-2013-06-04  Gary Benson  <gbenson@redhat.com>
-
-	* server.c (handle_query): Add "augmented-libraries-svr4-read+"
-	to qSupported response when appropriate.
-	(handle_qxfer_libraries_svr4): Allow qXfer:libraries-svr4:read
-	with nonzero-length annex.
-	* linux-low.c (linux_qxfer_libraries_svr4): Parse and handle
-	arguments supplied in annex.
-
-2013-05-31  Doug Evans  <dje@google.com>
-
-	PR server/15594
-	* linux-x86-low.c (ps_get_thread_area): Properly extend address to
-	64 bits in 64-cross-32 environment.
-
-2013-05-28  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (clean): Remove reference to aarch64-without-fpu.c.
-	(aarch64-without-fpu.c): Delete rule.
-	* configure.srv (aarch64*-*-linux*): Remove references to
-	aarch64-without-fpu.o and aarch64-without-fpu.xml.
-	* linux-aarch64-low.c (init_registers_aarch64_without_fpu): Remove
-	declaration.
-
-2013-05-24  Pedro Alves  <palves@redhat.com>
-
-	* server.c (handle_v_cont) <vCont;r>: Use unpack_varlen_hex
-	instead of strchr/decode_address.  Error if the range isn't split
-	with a ','.  Don't assume there's be a ':' in the action.
-
-2013-05-23  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (lwp_in_step_range): New function.
-	(linux_wait_1): If the thread was range stepping and stopped
-	outside the stepping range, report the stop to GDB.  Otherwise,
-	continue stepping.  Add range stepping debug output.
-	(linux_set_resume_request): Copy the step range from the resume
-	request to the lwp.
-	(linux_supports_range_stepping): New.
-	(linux_target_ops) <supports_range_stepping>: Set to
-	linux_supports_range_stepping.
-	* linux-low.h (struct linux_target_ops)
-	<supports_range_stepping>: New field.
-	(struct lwp_info) <step_range_start, step_range_end>: New fields.
-	* linux-x86-low.c (x86_supports_range_stepping): New.
-	(the_low_target) <supports_range_stepping>: Set to
-	x86_supports_range_stepping.
-	* server.c (handle_v_cont): Handle 'r' action.
-	(handle_v_requests): Append ";r" if the target supports range
-	stepping.
-	* target.h (struct thread_resume) <step_range_start,
-	step_range_end>: New fields.
-	(struct target_ops) <supports_range_stepping>:
-	New field.
-	(target_supports_range_stepping): New macro.
-
-2013-05-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_resume): Fix null_ptid/minus_one_ptid
-	confusion in comment.
-
-2013-05-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (struct process_info_private): New type.
-	(lynx_add_process): New function.
-	(lynx_create_inferior, lynx_attach): Replace calls to
-	add_process by calls to lynx_add_process.
-	(lynx_resume): If PTID is null, then try using
-	current_process()->private->last_wait_event_ptid.
-	Add comments.
-	(lynx_clear_inferiors): Delete.  The contents of that function
-	has been inlined in lynx_mourn;
-	(lynx_wait_1): Save the ptid in the process's private data.
-	(lynx_mourn): Free the process' private data.  Replace call
-	to lynx_clear_inferiors by call to clear_inferiors.
-
-2013-05-17  Yao Qi  <yao@codesourcery.com>
-
-	* i386-low.c (i386_length_and_rw_bits): Move the comment to
-	the right place.
-
-2013-05-16  Luis Machado  <lgustavo@codesourcery.com>
-
-	* linux-low.c: Move definition checks upwards for PT_TEXT_ADDR,
-	PT_DATA_ADDR and PT_TEXT_END_ADDR.  Update comments.
-	(linux_read_offsets): Remove PT_TEXT_ADDR, PT_DATA_ADDR and
-	PT_TEXT_END_ADDR guards.  Update comments.
-	(linux_target_op) <read_offsets>: Conditionally define to
-	linux_read_offsets if the target is UCLIBC and if it defines
-	PT_TEXT_ADDR, PT_DATA_ADDR and PT_TEXT_END_ADDR.
-
-2013-05-06  Sandra Loosemore  <sandra@codesourcery.com>
-	    Andrew Jenner  <andrew@codesourcery.com>
-
-	* Makefile.in (SFILES): Add linux-nios2-low.c.
-	(clean): Add action to delete nios2-linux.c.
-	(nios2-linux.c): New rule.
-	* configure.srv: Add nios2*-*-linux*.
-	* linux-nios2-low.c: New.
-
-2013-05-03  Hafiz Abid Qadeer  <abidh@codesourcery.com>
-
-	* tracepoint.c (cmd_qtinit): Call 'stop_tracing'.
-
-2013-04-25  Hui Zhu  <hui@codesourcery.com>
-
-	PR gdb/15186
-	* ax.c (ax_printf): Add fflush.
-
-2013-04-22  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (SFILES): Add filestuff.c.
-	(OBS): Add filestuff.o.
-	(filestuff.o): New target.
-	* config.in, configure: Rebuild.
-	* configure.ac: Check for fdwalk, pipe2.
-
-2013-04-17  Pedro Alves  <palves@redhat.com>
-
-	* configure.ac (USE_THREAD_DB): Delete variable.
-	(if test "$srv_linux_thread_db" = "yes"): AC_DEFINE USE_THREAD_DB.
-	Don't AC_SUBST USE_THREAD_DB.
-	* Makefile.in (INTERNAL_CFLAGS): Remove @USE_THREAD_DB@.
-	* config.in, configure: Regenerate.
-
-2013-04-16  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.h (struct lwp_info) <thread_known>: Move under
-	the USE_THREAD_DB #ifdef.
-
-2013-04-16  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (INTERNAL_CFLAGS): Add @USE_THREAD_DB@.
-	(linux-low.o): Delete rule.
-	* linux-low.h: Always include "gdb_thread_db.h" instead of
-	conditionally including thread_db.h.
-	(struct lwp_info) <th>: Guard with #ifdef USE_THREAD_DB instead of
-	HAVE_THREAD_DB_H.
-
-2013-04-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (install-only): Fix make install regression.
-
-2013-04-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Convert man pages to texinfo, new gdbinit.5 texinfo page.
-	* Makefile.in (install-only): Remove $(man1dir) and gdbserver.1
-	installation.
-	* gdbserver.1: Remove.
-
-2013-03-22  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (handle_extended_wait): Don't call
-	linux_enable_event_reporting.
-
-2013-03-15  Tony Theodore  <tonyt@logyst.com>
-
-	PR build/9098:
-	* Makefile.in (SHELL): Use @SHELL@.
-
-2013-03-14  Sergio Durigan Junior  <sergiodj@redhat.com>
-
-	* tracepoint.c (cmd_qtv): Initialize `val' with zero, silencing
-	compiler warning.
-
-2013-03-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* linux-low.c (linux_target_ops) [!HAVE_LINUX_BTRACE]:
-	Remove extraneous NULL element.
-
-2013-03-13  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (traceframe_read_tsv): Look for the last matched
-	'V' block in trace frame.
-
-2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* target.h (struct target_ops): Add btrace ops.
-	(target_supports_btrace): New macro.
-	(target_enable_btrace): New macro.
-	(target_disable_btrace): New macro.
-	(target_read_btrace): New macro.
-	* gdbthread.h (struct thread_info): Add btrace field.
-	* server.c: Include btrace-common.h.
-	(handle_btrace_general_set): New function.
-	(handle_btrace_enable): New function.
-	(handle_btrace_disable): New function.
-	(handle_general_set): Call handle_btrace_general_set.
-	(handle_qxfer_btrace): New function.
-	(struct qxfer qxfer_packets[]): Add btrace entry.
-	* inferiors.c (remove_thread): Disable btrace.
-	* linux-low: Include linux-btrace.h.
-	(linux_low_enable_btrace): New function.
-	(linux_low_read_btrace): New function.
-	(linux_target_ops): Add btrace ops.
-	* configure.srv (i[34567]86-*-linux*): Add linux-btrace.o.
-	Add srv_linux_btrace=yes.
-	(x86_64-*-linux*): Add linux-btrace.o.
-	Add srv_linux_btrace=yes.
-	* configure.ac: Define HAVE_LINUX_BTRACE.
-	* config.in: Regenerated.
-	* configure: Regenerated.
-
-2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* server.c (handle_qxfer): Preserve error message if -3 is
-	returned.
-	(qxfer): Document the -3 return value.
-
-2013-03-11  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* Makefile.in (SFILES): Add $(srcdir)/common/linux-btrace.c.
-	(linux_btrace_h): New variable.
-	(linux-btrace.o): New rule.
-
-2013-03-08  Stan Shebs  <stan@codesourcery.com>
-	    Hafiz Abid Qadeer  <abidh@codesourcery.com>
-
-	* tracepoint.c (trace_buffer_size): New global.
-	(DEFAULT_TRACE_BUFFER_SIZE): New define.
-	(init_trace_buffer): Change to one-argument function. Allocate
-	trace buffer memory.
-	(handle_tracepoint_general_set): Call cmd_bigqtbuffer_size to
-	handle QTBuffer:size packet.
-	(cmd_bigqtbuffer_size): New function.
-	(initialize_tracepoint): Call init_trace_buffer with
-	DEFAULT_TRACE_BUFFER_SIZE.
-	* server.c (handle_query): Add QTBuffer:size in the
-	supported packets.
-
-2013-03-07  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cur_action, cur_step_action): Make them unsigned.
-	(cmd_qtfp): Initialize cur_action and cur_step_action 0 instead
-	of -1.
-	(cmd_qtsp): Adjust condition.  Do post increment.
-	Set cur_action and cur_step_action back to 0.
-
-2013-03-07  Jeremy Bennett  <jeremy.bennett@embecosm.com>
-
-	PR server/15236
-	* linux-low.c (linux_write_memory): Return early success if LEN is
-	zero.
-
-2013-03-05  Corinna Vinschen  <vinschen@redhat.de>
-
-	* configure.srv: Add x86_64-*-cygwin* as target.
-
-2013-02-28  Tom Tromey  <tromey@redhat.com>
-
-	* configure.ac: Invoke AC_SYS_LARGEFILE.
-	* configure, config.in: Rebuild.
-
-2013-02-28  Corinna Vinschen  <vinschen@redhat.com>
-
-	* win32-low.c: Throughout, fix format strings and casts of
-	printf-like functions to avoid type related warnings on all
-	platforms.
-	(get_child_debug_event): Print dwDebugEventCode as hex since
-	that's how it's usually documented.
-
-2013-02-28  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cmd_qtbuffer): Call phex_nz instead of
-	pulongest.
-
-2013-02-27  Jiong Wang  <jiwang@tilera.com>
-
-	* Makefile.in (clean): Remove reg-tilegx.c, reg-tilegx32.c.
-	(reg-tilegx32.c): New rule.
-	* configure.srv (tilegx-*-linux*): Add reg-tilegx32.o to srv_regobj.
-	* linux-tile-low.c (tile_arch_setup): New function.  Invoke
-	different register info initializer according to elf class.
-	(init_registers_tilgx32): New function.  The tilegx32 register info
-	initializer.
-	(tile_fill_gregset): Use "uint_reg_t" to represent register size.
-	(tile_store_gregset): Likewise.
-
-2013-02-27  Yao Qi  <yao@codesourcery.com>
-
-	* server.c (process_point_options): Print debug message when
-	debug_threads is true.
-
-2013-02-26  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cmd_qtbuffer): Don't set '\0' in OWN_BUF.
-
-2013-02-19  Pedro Alves  <palves@redhat.com>
-	    Kai Tietz <ktietz@redhat.com>
-
-	PR gdb/15161
-
-	* server.c (handle_query) <CRC check>: Use unpack_varlen_hex
-	instead of strtoul to extract address from packet.
-	(process_serial_event) <'z'>: Likewise.
-
-2013-02-18  Yao Qi  <yao@codesourcery.com>
-
-	* linux-bfin-low.c (the_low_target): Use NULL instead of 0.
-
-2013-02-14  Pedro Alves  <palves@redhat.com>
-
-	Plug memory leak.
-
-	* tracepoint.c (cmd_qtnotes): Free TRACING_USER_NAME,
-	TRACING_NOTES and TRACING_STOP_NOTE before clobbering.
-
-2013-02-14  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (cmd_qtdpsrc): Use savestring.
-
-2013-02-14  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (save_string): Delete.
-	(add_tracepoint_action): Use savestring instead of save_string.
-
-2013-02-12  Pedro Alves  <palves@redhat.com>
-
-	* linux-xtensa-low.c: Ditto.
-	* xtensa-xtregs.c: Ditto.
-
-2013-02-12  Sanimir Agovic  <sanimir.agovic@intel.com>
-
-	* thread-db.c (thread_db_get_tls_address): NULL pointer check
-	thread_db.
-
-2013-02-07  Marcus Shawcroft  <marcus.shawcroft@arm.com>
-
-	* linux-aarch64-low.c (aarch64_arch_setup): Clamp
-	aarch64_num_wp_regs and aarch64_num_bp_regs to
-	AARCH64_HWP_MAX_NUM and AARCH64_HBP_MAX_NUM respectively.
-
-2013-02-07  Marcus Shawcroft  <marcus.shawcroft@arm.com>
-
-	* linux-aarch64-low.c (ps_get_thread_area): Replace
-	PTRACE_GET_THREAD_AREA with PTRACE_GETREGSET.
-
-2013-02-04  Jim MacArthur  <jim.macarthur@arm.com>
-	    Marcus Shawcroft  <marcus.shawcroft@arm.com>
-	    Nigel Stephens  <nigel.stephens@arm.com>
-	    Yufeng Zhang  <yufeng.zhang@arm.com>
-
-	* Makefile.in (clean): Remove aarch64.c and aarch64-without-fpu.c.
-	(aarch64.c, aarch64-without-fpu.c): New targets.
-	* configure.srv (aarch64*-*-linux*): New.
-	* linux-aarch64-low.c: New file.
-
-2013-02-04  Marcus Shawcroft  <marcus.shawcroft@arm.com>
-
-	* linux-low.c (handle_extended_wait, linux_create_inferior)
-	(linux_attach_lwp_1, linux_kill_one_lwp, linux_attach_one_lwp)
-	(dequeue_one_deferred_signal, linux_resume_one_thread)
-	(fetch_register, linux_write_memory, linux_enable_event_reporting)
-	(linux_tracefork_grandchild, linux_test_for_tracefork)
-	(linux_read_offsets, linux_xfer_siginfo, linux_xfer_siginfo): Add
-	PTRACE_ARG3_TYPE and PTRACE_ARG4_TYPE cast to ptrace arguments
-	where the argument is 0.
-
-2013-01-25  Yao Qi  <yao@codesourcery.com>
-
-	* event-loop.c: Include "queue.h".
-	(gdb_event_p): New typedef.
-	(struct gdb_event) <next_event>: Remove.
-	(event_queue): Change to QUEUE(gdb_event_p).
-	(async_queue_event): Remove.
-	(gdb_event_xfree): New.
-	(initialize_event_loop): New.
-	(process_event): Use API from QUEUE.
-	(wait_for_event): Likewise.
-	* server.c (main): Call initialize_event_loop.
-	* server.h (initialize_event_loop): Declare.
-
-2013-01-18  Yao Qi  <yao@codesourcery.com>
-
-	* ax.h (struct eval_agent_expr_context): New.
-	(gdb_eval_agent_expr): Update declaration.
-	* ax.c (gdb_eval_agent_expr): Remove argument REGCACHE and
-	TFRAME.  Add new argument CTX.
-	* server.h (struct eval_agent_expr_context): Declare.
-	(agent_mem_read, agent_tsv_read): Update declaration.
-	(agent_mem_read_string): Likewise.
-	* tracepoint.c (eval_tracepoint_agent_expr): Remove.
-	(add_traceframe_block): Add new argument TPOINT.
-	Increase TPOINT->traceframe_usage.
-	(do_action_at_tracepoint): Call gdb_eval_agent_expr instead of
-	eval_tracepoint_agent_expr.
-	(condition_true_at_tracepoint): Likewise.
-	(agent_mem_read): Remove argument TFRAME.  Add argument CTX.
-	(agent_mem_read_string, agent_tsv_read): Likewise.
-
-2013-01-16  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c (linux_resume_one_lwp): Don't check
-	'lwp->bp_reinsert != 0'.
-
-2013-01-07  Joel Brobecker  <brobecker@adacore.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* lynx-low.c (ptrace_request_to_str): Define a temporary
-	macro and use it to simplify this function's implementation.
-
-2013-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_resume): Call perror_with_name if lynx_ptrace
-	sets errno.
-
-2013-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.srv (i[34567]86-*-lynxos*): Set srv_xmlfiles.
-
-2013-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.srv (powerpc-*-lynxos*): Set srv_xmlfiles.
-
-2013-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_resume): Use the resume_info parameter
-	to determine the ptid for the lynx_ptrace call, unless
-	it is equal to minus_one_ptid, in which case we use the
-	ptid of the current_inferior.
-	(lynx_wait_1): After having received a thread create/exit
-	event, resume the inferior's execution using the signaling
-	thread's ptid, rather than the old ptid.
-
-2013-01-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_resume): Delete variable ret.
-
-2013-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c (gdbreplay_version): Update copyright year.
-	* server.c (gdbserver_version): Likewise.
-
-2012-12-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_wait_1): Add debug trace before adding
-	new thread.
-
-2012-12-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (ptrace_request_to_str): Add handling for
-	PTRACE_GETTRACESIG.
-
-2012-12-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_attach): Delete variable new_process.
-
-2012-12-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (lynx_create_inferior): Delete variable
-	new_process.
-
-2012-12-17  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (ptrace_request_to_str): Do not handle
-	PTRACE_GETTHREADLIST if this macro does not exist.
-
-2012-12-15  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (OBS): Add notif.o.
-	* notif.c, notif.h: New.
-	* server.c: Include "notif.h".
-	(struct vstop_notif) <next>: Remove.
-	<base>: New field.
-	(queue_stop_reply): Update.
-	(push_event, send_next_stop_reply): Remove.
-	(discard_queued_stop_replies): Update.
-	(notif_stop): New variable.
-	(handle_v_stopped): Remove.
-	(handle_v_requests): Don't call handle_v_stopped.  Call
-	handle_ack_notif instead.
-	(queue_stop_reply_callback): Call notif_event_enque instead
-	of queue_stop_reply.
-	(handle_status): Don't call send_next_stop_reply, call
-	notif_write_event instead.
-	(kill_inferior_callback): Likewise.
-	(detach_or_kill_inferior_callback): Likewise.
-	(main): Call initialize_notif.
-	(process_serial_event): Call QUEUE_is_empty.
-	(handle_target_event): Call notif_push instead of push event.
-	* server.h (push_event): Remove declaration.
-
-2012-12-10  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (DEPMODE, DEPDIR, depcomp, COMPILE.pre)
-	(COMPILE.post, COMPILE, POSTCOMPILE, IPAGENT_COMPILE): New
-	macros.
-	(.c.o): Rewrite.
-	(ax-ipa.o, tracepoint-ipa.o, utils-ipa.o, format-ipa.o)
-	(common-utils-ipa.o, remote-utils-ipa.o, regcache-ipa.o)
-	(i386-linux-ipa.o, linux-i386-ipa.o, linux-amd64-ipa.o)
-	(amd64-linux-ipa.o, ax.o): Rewrite.
-	(event-loop.o, hostio.o, hostio-errno.o, inferiors.o, mem-break.o)
-	(proc-service.o, regcache.o, remote-utils.o, server.o, target.o)
-	(thread-db.o, tracepoint.o, utils.o, gdbreplay.o, dll.o): Remove.
-	(signals.o, linux-procfs.o, linux-ptrace.o, common-utils.o, vec.o)
-	(gdb_vecs.o, xml-utils.o, linux-osdata.o, ptid.o, buffer.o)
-	(format.o, agent.o, vasprintf.o, vsnprintf.o): Rewrite.
-	(i386-low.o, i387-fp.o, linux-low.o, linux-arm-low.o)
-	(linux-bfin-low.o, linux-cris-low.o, linux-crisv32-low.o)
-	(linux-ia64-low.o, linux-m32r-low.o, linux-mips-low.o)
-	(linux-ppc-low.o, linux-s390-low.o, linux-sh-low.o)
-	(linux-tic6x-low.o, linux-x86-low.o, linux-xtensa-low.o)
-	(linux-tile-low.o, lynx-low.o, lynx-ppc-low.o, nto-low.o)
-	(nto-x86-low.o, linux-low.o, win32-low.o, win32-arm-low.o)
-	(win32-i386-low.o, spu-low.o, reg-arm.o, arm-with-iwmmxt.o)
-	(arm-with-vfpv2.o, arm-with-vfpv3.o, arm-with-neon.o, reg-bfin.o)
-	(reg-cris.o, reg-crisv32.o, i386.o, i386-linux.o, i386-avx.o)
-	(i386-avx-linux.o, i386-mmx.o, i386-mmx-linux.o, reg-ia64.o)
-	(reg-m32r.o, reg-m68k.o, reg-cf.o, mips-linux.o, mips-dsp-linux.o)
-	(mips64-linux.o, mips64-dsp-linux.o, powerpc-32.o, powerpc-32l.o)
-	(powerpc-altivec32l.o, powerpc-cell32l.o, powerpc-vsx32l.o)
-	(powerpc-isa205-32l.o, powerpc-isa205-altivec32l.o)
-	(powerpc-isa205-vsx32l.o, powerpc-e500l.o, powerpc-64l.o)
-	(powerpc-altivec64l.o, powerpc-cell64l.o, powerpc-vsx64l.o)
-	(powerpc-isa205-64l.o, powerpc-isa205-altivec64l.o)
-	(powerpc-isa205-vsx64l.o, s390-linux32.o, s390-linux32v1.o)
-	(s390-linux32v2.o, s390-linux64.o, s390-linux64v1.o)
-	(s390-linux64v2.o, s390x-linux64.o, s390x-linux64v1.o)
-	(s390x-linux64v2.o, tic6x-c64xp-linux.o, tic6x-c64x-linux.o)
-	(tic6x-c62x-linux.o, reg-sh.o, reg-sparc64.o, reg-spu.o, amd64.o)
-	(amd64-linux.o, amd64-avx.o, amd64-avx-linux.o, x32.o)
-	(x32-linux.o, x32-avx.o, x32-avx-linux.o, reg-xtensa.o)
-	(reg-tilegx.o): Remove.
-	(all_object_files): New macro.
-	Include .deps files.
-	* aclocal.m4, configure: Rebuild.
-	* acinclude.m4: Include depstand.m4, lead-dot.m4.
-	* configure.ac: Invoke ZW_CREATE_DEPDIR,
-	ZW_PROG_COMPILER_DEPENDENCIES.  Compute GMAKE condition.
-
-2012-12-05  Tom Tromey  <tromey@redhat.com>
-
-	PR gdb/14917:
-	* server.h (current_insn_ptr, emit_error): Declare 'extern'.
-
-2012-11-28  Markus Metzger  <markus.t.metzger@intel.com>
-
-	* configure.ac: Check for linux/perf_event.h.
-	* config.in: Regenerated.
-	* configure: Regenerated.
-
-2012-11-26  Maxime Villard  <rustyBSD@gmx.fr>
-
-	* hostio.c (handle_readlink): Decrease buffer size
-	parameter passed to readlink by one byte.
-
-2012-11-26  Yao Qi  <yao@codesourcery.com>
-
-	* configure.ac (build_warnings): Append '-Wempty-body'.
-	* configure: Regenerated.
-	* linux-low.c (linux_create_inferior): Use braces for empty 'if'
-	body.
-
-2012-11-15  Pierre Muller  <muller@sourceware.org>
-
-	* configure.ac (AC_CHECK_HEADERS): Add wait.h header.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* linux-low.c: Use "gdb_stat.h" header instead of <sys/stat.h> header.
-	Use "gdb_wait.h" header instead of <sys/wait.h> header.
-	* lynx-low.c: Use "gdb_wait.h" header instead of <sys/wait.h> header.
-	* remote-utils.c: Use "gdb_stat.h" header instead of <sys/stat.h>
-	header.
-	* server.c: Remove HAVE_WAIT_H conditional.  Use "gdb_wait.h" header
-	instead of <sys/wait.h> header.
-	* spu-low.c: Use "gdb_wait.h" header instead of <sys/wait.h> header.
-
-2012-11-13 Markus Metzger  <markus.t.metzger@intel.com>
-
-	* Makefile.in: (INTERNAL_CFLAGS): Add -DGDBSERVER
-	(various make rules): Remove -DGDBSERVER
-
-2012-11-09  Yao Qi  <yao@codesourcery.com>
-
-	* spu-low.c (current_ptid): Move it to ..
-	* gdbthread.h: ... here.  New.
-	* remote-utils.c (read_ptid): Use macro 'current_ptid'.
-	* server.c (myresume, process_serial_event): Likewise.
-	* thread-db.c (thread_db_find_new_threads): Likewise.
-	* tracepoint.c (run_inferior_command): Likewise.
-
-2012-10-01  Andrew Burgess  <aburgess@broadcom.com>
-
-	* server.c (handle_search_memory_1): Include access length in
-	warning message.
-
-2012-09-05  Michael Brandt  <michael.brandt@axis.com>
-
-	* linux-crisv32-low.c: Fix compile errors.
-
-2012-09-04  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cmd_qtsv): Adjust debug message.
-	Don't check CUR_TPOINT.
-
-2012-08-28  Yao Qi  <yao@codesourcery.com>
-
-	* ax.c, tracepoint.c: Replace ATTR_FORMAT with ATTRIBUTE_PRINTF.
-	* server.h: Include 'libiberty.h' and 'ansidecl.h'.
-	(ATTR_NORETURN, ATTR_FORMAT, ATTR_MALLOC): Remove.
-	Remove declarations of xmalloc, xreallloc, xstrdup and
-	freeargv.
-	* Makefile.in (libiberty_h): New.
-	(server_h): Append dependencies 'libiberty.h' and 'ansidecl.h'.
-	(linux-bfin-low.o): Append dependency 'libiberty.h'.
-
-2012-08-23  Yao Qi  <yao@codesourcery.com>
-
-	* server.h: Remove declaration of 'xsnprintf'.
-
-2012-08-22  Keith Seitz  <keiths@redhat.com>
-
-	* server.h: Include build-gnulib-gbserver/config.h.
-	* gdbreplay.c: Likewise.
-
-2012-08-08  Doug Evans  <dje@google.com>
-
-	* Makefile.in (SFILES): Add gdb_vecs.c.
-	(OBS): Add gdb_vecs.o.
-	(gdb_vecs_h, host_defs_h): New variables.
-	(thread-db.o): Add $(gdb_vecs_h) dependency.
-	(gdb_vecs.o): New rule.
-	* thread-db.c: #include "gdb_vecs.h".
-	(thread_db_load_search): Use a vector to iterate over path elements.
-	Handle text appearing after "$pdir".
-
-	* configure.ac: Add check for strstr.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2012-08-02  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* hostio.c (handle_pread): If pread fails, fall back to attempting
-	lseek/read.
-	(handle_pwrite): Likewise for pwrite.
-
-2012-08-01  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* linux-arm-low.c (arm_linux_hw_point_initialize): Distinguish
-	between unsupported TYPE and unimplementable ADDR/LEN combination.
-	(arm_insert_point): Act on new return value.
-
-2012-07-31  Pedro Alves  <palves@redhat.com>
-
-	* server.c (process_point_options): Only skip tokens if we find
-	one that is unrecognized.  Don't treat 'X' specially while
-	skipping unrecognized tokens.
-
-2012-07-30  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* linux-arm-low.c (arm_linux_hw_point_initialize): Do not attempt
-	to 4-byte-align HW breakpoint addresses for Thumb.
-
-2012-07-27  Yao Qi  <yao@codesourcery.com>
-
-	PR remote/14161.
-
-	* server.h: Declare gdb_agent_about_to_close.
-	* target.c (kill_inferior): Include "agent.h".
-	New.  Send command 'kill'.
-	* target.h (kill_inferior): Removed macro.
-	* tracepoint.c (gdb_agent_about_to_close): New.
-	(gdb_agent_helper_thread): Handle command 'close'.
-	Wait endlessly until the inferior stops.
-	Install gdb_agent_remove_socket to atexit hook.
-	(agent_socket_name): New static variable.
-	(gdb_agent_socket_init): Replace local variable 'name' with
-	'agent_socket_name'.
-	(gdb_agent_remove_socket): New.
-
-2012-07-27  Yao Qi  <yao@codesourcery.com>
-
-	* server.c (process_point_options): Stop at 'X' when parsing.
-
-2012-07-19  Michael Eager  <eager@eagercon.com>
-
-	* i386-low.c (Z_packet_to_hw_type): Add Z_PACKET_HW_BP, translate
-	to hw_execute.
-	* linux-x86-low.c (x86_insert_point, x86_remove_point):
-	Call i386_low_insert_watchpoint, i386_low_remove_watchpoint to add/del
-	hardware breakpoint.
-
-2012-07-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* gdbserver/linux-low.c (initialize_low): Call
-	linux_ptrace_init_warnings.
-
-2012-07-02  Doug Evans  <dje@google.com>
-
-	* mem-break.c (gdb_no_commands_at_breakpoint): Fix cast from
-	pointer to int.
-
-2012-07-02  Stan Shebs  <stan@codesourcery.com>
-
-	* Makefile.in (WARN_CFLAGS_NO_FORMAT): Define.
-	(ax.o): Add it to build rule.
-	(ax-ipa.o): Ditto.
-	(OBS): Add format.o.
-	(IPA_OBS): Add format.o.
-	* server.c (handle_query): Claim support for breakpoint commands.
-	(process_point_options): Add command case.
-	(process_serial_event): Leave running if there are printfs in
-	effect.
-	* mem-break.h (any_persistent_commands): Declare.
-	(add_breakpoint_commands): Declare.
-	(gdb_no_commands_at_breakpoint): Declare.
-	(run_breakpoint_commands): Declare.
-	* mem-break.c (struct point_command_list): New struct.
-	(struct breakpoint): New field command_list.
-	(any_persistent_commands): New function.
-	(add_commands_to_breakpoint): New function.
-	(add_breakpoint_commands): New function.
-	(gdb_no_commands_at_breakpoint): New function.
-	(run_breakpoint_commands): New function.
-	* linux-low.c (linux_wait_1): Test for and run breakpoint commands
-	locally.
-	* ax.c: Include format.h.
-	(ax_printf): New function.
-	(gdb_eval_agent_expr): Add printf opcode.
-
-2012-06-13  Yao Qi  <yao@codesourcery.com>
-
-	* server.c (start_inferior): Remove duplicated writes to fields
-	'last_resume_kind' and 'last_status' of 'current_inferior'.
-
-2012-06-12  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_set_resume_request): Simplify predicate.  Add
-	comment.
-	* server.c (handle_v_cont): Extend comment.
-
-2012-06-11  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c (linux_attach): Add 'static'.
-
-2012-06-06  Yao Qi  <yao@codesourcery.com>
-
-	* ax.c (gdb_eval_agent_expr): Print `top' in hex.
-
-2012-06-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Fix gcc -flto compilation warning.
-	* server.c (main): Make variable multi_mode and attach volatile.
-
-2012-05-30  Thiago Jung Bauermann  <thiago.bauermann@linaro.org>
-
-	* linux-low.c (get_r_debug): Disable code using DT_MIPS_RLD_MAP
-	if the platform doesn't know about it.
-
-2012-05-30  Jeff Kenton  <jkenton@tilera.com>
-
-	* Makefile.in (SFILES): Add linux-tile-low.c.
-	(linux-tile-low.o, reg-tilegx.o, reg-tilegx.c): New rules.
-	* configure.srv: Handle tilegx-*-linux*.
-	* linux-tile-low.c: New file.
-
-2012-05-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (linux_qxfer_libraries_svr4): Return -1 if R_DEBUG is -1.
-
-2012-05-24  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/7205
-
-	Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
-
-2012-05-24  Pedro Alves  <palves@redhat.com>
-
-	PR gdb/7205
-
-	Replace target_signal with gdb_signal throughout.
-
-2012-05-22  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-low.c (linux_store_registers): Avoid the copying sequence
-	when no data has been retrieved by ptrace.
-
-2012-05-22  Will Deacon  <will.deacon@arm.com>
-
-	* linux-low (__UCLIBC__ && !(__UCLIBC_HAS_MMU__ || __ARCH_HAS_MMU__)):
-	Include asm/ptrace.h.
-	(PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define only if not
-	already defined.
-
-2012-05-21  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-low.c (linux_store_registers): Don't re-retrieve data
-	with ptrace that has already been obtained from /proc.  Always
-	copy any data retrieved with ptrace to the buffer supplied.
-
-2012-05-11  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (enum stopping_threads_kind): New.
-	(stopping_threads): Change type to `enum stopping_threads_kind'.
-	(handle_extended_wait): If stopping and suspending threads, leave
-	the new_lwp suspended too.
-	(linux_wait_for_event): Adjust.
-	(stop_all_lwps): Set `stopping_threads' to
-	STOPPING_AND_SUSPENDING_THREADS or STOPPING_THREADS depending on
-	whether we're suspending threads or just stopping them.  Assert no
-	recursion happens.
-
-2012-04-29  Yao Qi  <yao@codesourcery.com>
-
-	* server.h: Move some code to ...
-	* gdbthread.h: ... here.  New.
-	* Makefile.in (inferiors.o, regcache.o): Depends on gdbthread.h
-	(remote-utils.o, server.o, target.o tracepoint.o): Likewise.
-	(nto-low.o, win32-low.o): Likewise.
-	* inferiors.c, linux-low.h, nto-low.c: Include gdbthread.h.
-	* regcache.c, remote-utils.c, server.c: Likewise.
-	* target.c, tracepoint.c, win32-low.c: Likewise.
-
-2012-04-24  Thiago Jung Bauermann  <thiago.bauermann@linaro.org>
-
-	* linux-low.h (PTRACE_ARG3_TYPE): Move macro from linux-low.c.
-	(PTRACE_ARG4_TYPE): Likewise.
-	(PTRACE_XFER_TYPE): Likewise.
-	* linux-arm-low.c (arm_prepare_to_resume): Cast third argument of
-	ptrace to PTRACE_ARG3_TYPE.
-	* linux-low.c (PTRACE_ARG3_TYPE): Move macro to linux-low.h.
-	(PTRACE_ARG4_TYPE): Likewise.
-	(PTRACE_XFER_TYPE): Likewise.
-	(linux_detach_one_lwp): Cast fourth argument of
-	ptrace to long then PTRACE_ARG4_TYPE.
-	(regsets_fetch_inferior_registers): Cast third argument of
-	ptrace to long then PTRACE_ARG3_TYPE.
-	(regsets_store_inferior_registers): Likewise.
-
-2012-04-20  Pedro Alves  <palves@redhat.com>
-
-	* configure: Regenerate.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (GNULIB_BUILDDIR): New.
-	(LIBGNU, INCGNU, GNULIB_H): Adjust.
-	(SUBDIRS, CLEANDIRS, REQUIRED_SUBDIRS): New.
-	(all, install-only, uninstall, clean-info, all-lib, clean): No
-	longer pass GNULIB_FLAGS_TO_PASS.  Use subdir_do.
-	(maintainer-clean realclean distclean): Use subdir_do.
-	(subdir_do): New.
-	(gnulib/import/Makefile): Adjust.  Replace gnulib/import with
-	$(GNULIB_BUILDDIR).  Don't pass argument to config.status.
-	* acinclude.m4: Include acx_configure_dir.m4.
-	* configure.ac: Remove gl_EARLY, gl_INIT, and AM_INIT_AUTOMAKE
-	calls.	Call AC_PROG_RANLIB.  Configure gnulib using
-	ACX_CONFIGURE_DIR.
-	(GNULIB): New.
-	(GNULIB_STDINT_H): Adjust.
-	(AC_OUTPUT): Don't output gnulib/Makefile anymore.
-	* gdbreplay.c: Include build-gnulib/config.h.
-	* server.h: Likewise.
-	* aclocal.m4: Regenerate.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (LIBGNU, INCGNU): Adjust.
-	(GNULIB_FLAGS_TO_PASS, GNULIB_H): Adjust.
-	(all, install-only, uninstall, clean-info, all-lib, clean)
-	(maintainer-clean, Makefile, gnulib/Makefile): Adjust.
-	* configure.ac: Adjust AC_OUTPUT output.
-	* aclocal.m4: Regenerate.
-	* configure: Regenerate.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (generated_files): New.
-	(server_h): Remove the explicit dependency on config.h, and depend
-	on $generated_files.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (INCGNU): Add -Ignulib.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (GNULIB_INCLUDE_DIR): Rename to ...
-	(INCGNU): ... this, and spell out -I here.
-	(GNULIB_LIB): Rename to ...
-	(LIBGNU): ... this.
-	(INCLUDE_CFLAGS, gdbserver$(EXEEXT), $(GNULIB_LIB) rule): Adjust.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* config.in: Regenerate.
-
-2012-04-19  Pedro Alves  <palves@redhat.com>
-
-	* configure.ac: Remove AC_CHECK_DECLS check for memmem.
-	* server.h (memmem): Remove declaration.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2012-04-19  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (SFILES): Add common/vec.c.
-	(OBS): Add vec.o.
-	(vec.o): New rule.
-
-2012-04-19  Yao Qi  <yao@codesourcery.com>
-
-	* remote-utils.c (prepare_resume_reply): Replace with macro
-	target_core_of_thread.
-	* server.c (handle_qxfer_threads_proper): Likewise.
-	* target.h (traget_core_of_thread): New macro.
-
-2012-04-18  Pedro Alves  <palves@redhat.com>
-
-	* aclocal.m4: Regenerate.
-	* configure: Regenerate.
-
-2012-04-16  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cmd_qtstart): Download tracepoints even when they are
-	duplicated on address.
-
-2012-04-16  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (COPY_FIELD_TO_BUF): New macro.
-	(struct tracepoint_action_ops) <send>: New field.
-	(m_tracepoint_action_send, r_tracepoint_action_send): New.
-	(agent_expr_send, x_tracepoint_action_send): New.
-	(l_tracepoint_action_send): New.
-	(cmd_qtdp): Download and install tracepoint
-	according to `use_agent'.
-	(run_inferior_command): Add one more parameter `len'.
-	Update callers.
-	(tracepoint_send_agent): New.
-	(cmd_qtdp, cmd_qtstart): Call tracepoint_send_agent.
-
-2012-04-16  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (download_tracepoints): Moved to ...
-	(cmd_qtstart): ... here.
-
-2012-04-14  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c: Include inttypes.h.
-	(struct collect_memory_action): Use sized types.
-	(struct tracepoint): Likewise.
-	(cmd_qtdp, stop_tracing): Update print specifiers.
-	(cmd_qtp, response_tracepoint): Likewise.
-	(collect_data_at_tracepoint): Likewise.
-	(collect_data_at_step): Likewise.
-
-2012-04-14  Yao Qi  <yao@codesourcery.com>
-
-	Import gnulib module inttypes.
-	* aclocal.m4, config.in, configure: Regenerated.
-
-2012-04-14  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (maintainer-clean, realclean, distclean): Remove
-	Makefile and config.status at last.
-
-2012-04-13  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c: Include stdint.h unconditionally.
-
-2012-04-13  Thiago Jung Bauermann  <thiago.bauermann@linaro.org>
-
-	* acinclude.m4 (GDBSERVER_HAVE_THREAD_DB_TYPE): New macro based
-	on BFD_HAVE_SYS_PROCFS_TYPE.
-	* configure.ac: Look for lwpid_t and psaddr_t in libthread_db.h.
-	* configure: Regenerate.
-	* config.in: Likewise.
-
-2012-04-13  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* Makefile.in (clean): Also remove x32.c x32-linux.c
-	x32-avx.c x32-avx-linux.c.
-	(x32.o): New target.
-	(x32.c): Likewise.
-	(x32-linux.o): Likewise.
-	(x32-linux.c): Likewise.
-	(x32-avx.o): Likewise.
-	(x32-avx.c): Likewise.
-	(x32-avx-linux.o): Likewise.
-	(x32-avx-linux.c): Likewise.
-
-	* configure.srv (srv_amd64_regobj): Add x32.o x32-avx.o.
-	(srv_amd64_linux_regobj): Add x32-linux.o x32-avx-linux.o.
-	(srv_i386_64bit_xmlfiles): Add i386/x32-core.xml.
-	(srv_amd64_xmlfiles): Add i386/x32.xml i386/x32-avx.xml.
-	(srv_amd64_linux_xmlfiles): Add i386/x32-linux.xml
-	i386/x32-avx-linux.xml.
-
-	* linux-x86-low.c (init_registers_x32_linux): New prototype.
-	(init_registers_x32_avx_linux): Likwise.
-	(x86_linux_update_xmltarget): Call init_registers_x32_linux
-	or init_registers_x32_avx_linux if linux_is_elf64 is false.
-
-2012-04-13  Pedro Alves  <palves@redhat.com>
-
-	* Makefile.in (GNULIB_FLAGS_TO_PASS): New.
-	(FLAGS_TO_PASS): Don't change or set $top_srcdir, $srcdir and VPATH.
-	(all, uninstall, clean-info, all-lib, clean, maintainer-clean)
-	(realclean, distclean): Explicitly pass $GNULIB_FLAGS_TO_PASS to
-	the sub-make.
-
-2012-04-12  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* linux-x86-low.c (compat_x32_clock_t): New.
-	(compat_x32_siginfo_t): Likewise.
-	(compat_x32_siginfo_from_siginfo): Likewise.
-	(siginfo_from_compat_x32_siginfo): Likewise.
-	(linux_is_elf64): Likewise.
-	(x86_siginfo_fixup): Call compat_x32_siginfo_from_siginfo
-	and siginfo_from_compat_x32_siginfo for x32.
-	(x86_arch_setup): Set linux_is_elf64.
-
-2012-04-12  H.J. Lu  <hongjiu.lu@intel.com>
-
-	PR gdb/13969
-	* linux-low.c (linux_pid_exe_is_elf_64_file): Also return the
-	e_machine field.
-	(linux_qxfer_libraries_svr4): Update call to elf_64_file_p.
-	* linux-low.h (linux_pid_exe_is_elf_64_file): Updated.
-	* linux-x86-low.c (x86_arch_setup): Check if GDBserver is
-	compatible with process.
-
-2012-04-12  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in: Define abs_top_srcdir and abs_srcdir.
-	(INCLUDE_CFLAGS): Append GNULIB_INCLUDE_DIR.
-	(install-only, install-info, clean): Handle sub dir gnulib.
-	(all-lib, am--refresh): New targets.
-	(memmem.o): Remove target.
-	* configure.ac: Remove AC_CONFIG_LIBOBJ_DIR.
-	Invoke gl_EARLY.  Invoke AC_CHECK_PROGS for make.
-	(AC_REPLACE_FUNCS): Remove memmem.
-	Invoke gl_INIT and AM_INIT_AUTOMAKE.
-	(AC_OUTPUT): Generate Makefile in gnulib/.
-	* aclocal.m4, config.in, configure: Regenerated.
-
-2012-04-10  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP.
-
-2012-04-05  Pedro Alves  <palves@redhat.com>
-
-	-Werror=strict-aliasing
-
-	* spu-low.c (parse_spufs_run): Avoid dereferencing type-punned
-	pointer.
-
-2012-04-04  Pedro Alves  <palves@redhat.com>
-
-	* linux-sparc-low.c (sparc_fill_gregset_to_stack)
-	(sparc_store_gregset_from_stack, sparc_store_gregset)
-	(sparc_breakpoint_at): Fix formatting.
-
-2012-03-30  Thiago Jung Bauermann  <thiago.bauermann@linaro.org>
-
-	* configure.ac: Check whether Elf32_auxv_t and Elf64_auxv_t
-	are available.
-	* linux-low.c [HAVE_ELF32_AUXV_T] (Elf32_auxv_t): Add typedef.
-	[HAVE_ELF64_AUXV_T] (Elf64_auxv_t): Likewise.
-	* config.in: Regenerate.
-	* configure: Likewise.
-
-2012-03-29  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (regsets_store_inferior_registers) [__sparc__]:
-	Correct ptrace arguments.
-
-2012-03-28  Pedro Alves  <palves@redhat.com>
-
-	* linux-ia64-low.c (ia64_regmap): Map IA64_EC_REGNUM to PT_AR_EC.
-	(IA64_GR0_REGNUM, IA64_FR0_REGNUM)
-	(IA64_FR1_REGNUM): New defines.
-	(ia64_fetch_register): New.
-	(the_low_target): Install it.
-	* linux-low.h (struct linux_target_ops) <fetch_register>: New
-	field.
-	* linux-low.c (linux_fetch_registers): Try the
-	the_low_target.fetch_register hook first.
-
-	* linux-arm-low.c (the_low_target): Adjust.
-	* linux-bfin-low.c (the_low_target): Adjust.
-	* linux-cris-low.c (the_low_target): Adjust.
-	* linux-crisv32-low.c (the_low_target): Adjust.
-	* linux-m32r-low.c (the_low_target): Adjust.
-	* linux-m68k-low.c (the_low_target): Adjust.
-	* linux-mips-low.c (the_low_target): Adjust.
-	* linux-ppc-low.c (the_low_target): Adjust.
-	* linux-s390-low.c (the_low_target): Adjust.
-	* linux-sh-low.c (the_low_target): Adjust.
-	* linux-sparc-low.c (the_low_target): Adjust.
-	* linux-tic6x-low.c (the_low_target): Adjust.
-	* linux-x86-low.c (the_low_target): Adjust.
-	* linux-xtensa-low.c (the_low_target): Adjust.
-
-2012-03-26  Pedro Alves  <palves@redhat.com>
-
-	* server.c (handle_qxfer_libraries): Don't bail early if
-	the_target->qxfer_libraries_svr4 is not NULL.
-
-2012-03-26  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_qxfer_libraries_svr4): Fix pasto in comment.
-
-2012-03-23  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_qxfer_libraries_svr4): Terminate the
-	"library-list-svr4" element's start tag when the the DSO list is
-	empty.
-
-2012-03-23  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (read_one_ptr): Read the inferior's pointer through
-	a variable whose type size is the same as the inferior's pointer
-	size.
-
-2012-03-21  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* linux-arm-low.c (arm_stopped_by_watchpoint): Use siginfo_t instead of
-	struct siginfo.
-	* linux-low.c (siginfo_fixup, linux_xfer_siginfo): Likewise.
-	* linux-x86-low.c (x86_siginfo_fixup): Likewise.
-	* linux-low.h: Include <signal.h>.
-	(struct siginfo): Remove forward declaration.
-	(struct linux_target_ops) <siginfo_fixup>: Use siginfo_t instead of
-	struct siginfo.
-
-2012-03-21  Mike Frysinger  <vapier@gentoo.org>
-
-	* .gitignore: Ignore more files.
-
-2012-03-19  Pedro Alves  <palves@redhat.com>
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* server.c (cont_thread, general_thread): Add describing comments.
-	(start_inferior): Clear `cont_thread'.
-	(handle_v_cont): Don't set `cont_thread' if resuming all threads
-	of a process.
-
-2012-03-15  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (install_tracepoint): Move duplicated tracepoint
-	handling to ...
-	(cmd_qtdp): ... here.
-
-2012-03-15  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (struct tracepoint_action_ops): New.
-	(struct tracepoint_action) [!IN_PROCESS_AGENT] <ops>: New field.
-	(m_tracepoint_action_download): New.
-	(r_tracepoint_action_download): New.
-	(x_tracepoint_action_download): New.
-	(l_tracepoint_action_download): New.
-	(add_tracepoint_action): Install `action->ops' according type.
-	(download_tracepoint_1): Move code `download' function pointer
-	of various tracepoint_action_ops.
-
-2012-03-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (linux_attach_lwp_1): New variable buffer.  Call
-	linux_ptrace_attach_warnings.
-
-2012-03-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (linux-ptrace.o): New.
-	* configure.srv (arm*-*-linux*, bfin-*-*linux*, crisv32-*-linux*)
-	(cris-*-linux*, i[34567]86-*-linux*, ia64-*-linux*, m32r*-*-linux*)
-	(m68*-*-linux*, m68*-*-uclinux*, mips*-*-linux*, powerpc*-*-linux*)
-	(s390*-*-linux*, sh*-*-linux*, sparc*-*-linux*, tic6x-*-uclinux)
-	(x86_64-*-linux*, xtensa*-*-linux*): Add linux-ptrace.o to SRV_TGTOBJ
-	of these targets.
-	* linux-low.c (linux_attach_lwp_1): Remove redundent else clause.
-
-2012-03-08  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	Fix PR server/13392.
-	* linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Check
-	offset of JMP insn.
-	* tracepoint.c (remove_tracepoint): New.
-	(cmd_qtdp): Call remove_tracepoint when failed to install.
-
-2012-03-07  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (get_detach_signal): New.
-	(linux_detach_one_lwp): Get rid of a pending SIGSTOP with SIGCONT.
-	Pass on pending signals to PTRACE_DETACH.  Check the result of the
-	ptrace call.
-	* server.c (program_signals, program_signals_p): New.
-	(handle_general_set): Handle QProgramSignals.
-	* server.h (program_signals, program_signals_p): Declare.
-
-2012-03-05  Pedro Alves  <palves@redhat.com>
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (get_dynamic): Don't warn when PT_PHDR isn't found.
-	New comment why.
-
-2012-03-03  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (tracepoint_look_up_symbols): Update call to
-	agent_look_up_symbols.
-
-2012-03-03  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (linux-low.o): Keep dependence on agent.h.
-	(linux-x86-low.o): Likewise.
-	* server.h: Remove in_process_agent_loaded.
-	* tracepoint.c (in_process_agent_loaded): Removed.  Moved it
-	common/agent.c.
-	Update callers.
-
-2012-03-03  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (gdb_agent_capability): New global.
-	(in_process_agent_loaded_ust): Renamed to
-	`in_process_agent_supports_ust'.
-	Update callers.
-	(in_process_agent_supports_ust): Call agent_capability_check.
-	(clear_installed_tracepoints): Assert that agent supports
-	agent.
-
-2012-03-03  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c (linux_supports_agent): New.
-	(linux_target_ops): Initialize field `supports_agent' with
-	linux_supports_agent.
-	* target.h (struct target_ops) <supports_agent>: New.
-	(target_supports_agent): New macro.
-	* server.c (handle_general_set): Handle packet 'QAgent'.
-	(handle_query): Send `QAgent+'.
-	* Makefile.in (server.o): Depends on agent.h.
-
-2012-03-03  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (OBS): Add agent.o.
-	Add new rule for agent.o.
-	Track dependence of tracepoint.c on agent.h.
-	* tracepoint.c (run_inferior_command_1):
-	(run_inferior_command): Call agent_run_command.
-	(gdb_ust_connect_sync_socket): Deleted.  Move it to
-	common/agent.c.
-	(resume_thread, stop_thread): Likewise.
-	(gdb_ust_socket_init): Renamed to ...
-	(gdb_agent_socket_init): ... New.
-	(gdb_ust_thread): Renamed to ...
-	(gdb_agent_helper_thread): ... New.
-	(gdb_ust_init): Move some code to ...
-	(gdb_agent_init): ... here.  New.
-	[HAVE_UST]: Call gdb_ust_init.
-	(initialize_tracepoint_ftlib):  Call gdb_agent_init.
-	* configure.ac: Add `sys/un.h' to AC_CHECK_HEADERS.
-	* config.in, configure: Regenerated.
-
-2012-03-02  Pedro Alves  <palves@redhat.com>
-
-	* inferiors.c (add_pid_to_list, pull_pid_from_list): Delete.
-	* linux-low.c (struct simple_pid_list): New.
-	(stopped_pids): New a struct simple_pid_list pointer.
-	(add_to_pid_list, pull_pid_from_list): New.
-	(handle_extended_wait): Don't assume the first signal new children
-	report is SIGSTOP.  Adjust call to pull_pid_from_list.
-	(linux_wait_for_lwp): Adjust.
-
-2012-03-02  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (do_action_at_tracepoint): Write `stop_pc' in
-	debug log.
-
-2012-03-02  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (collect_ust_data_at_tracepoint): Remove parameters
-	`stop_pc' and `tpoint'.  Update caller.
-
-2012-03-01  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-low.h (linux_target_ops): Add regset_bitmap member.
-	* linux-low.c (use_linux_regsets): New macro.
-	[!HAVE_LINUX_REGSETS] (regsets_fetch_inferior_registers): Likewise.
-	[!HAVE_LINUX_REGSETS] (regsets_store_inferior_registers): Likewise.
-	(linux_register_in_regsets): New function.
-	(usr_fetch_inferior_registers): Skip registers covered by
-	regsets.
-	(usr_store_inferior_registers): Likewise.
-	(usr_fetch_inferior_registers): New macro.
-	(usr_store_inferior_registers): Likewise.
-	(linux_fetch_registers): Handle mixed regset/non-regset targets.
-	(linux_store_registers): Likewise.
-	* linux-mips-low.c (init_registers_mips_dsp_linux): New
-	prototype.
-	(init_registers_mips64_dsp_linux): Likewise.
-	(init_registers_mips_linux): New macro.
-	(init_registers_mips_dsp_linux): Likewise.
-	(mips_dsp_num_regs): Likewise.
-	(DSP_BASE, DSP_CONTROL): New fallback macros.
-	(mips_base_regs): New macro.
-	(mips_regmap): Use it.  Fix the size.
-	(mips_dsp_regmap): New variable.
-	(mips_dsp_regset_bitmap): Likewise.
-	(mips_arch_setup): New function.
-	(mips_cannot_fetch_register): Use the_low_target.regmap rather
-	than mips_regmap.
-	(mips_cannot_store_register): Likewise.
-	(the_low_target): Update .arch_setup, .num_regs and .regmap
-	initializers.  Add .regset_bitmap initializer.
-	* linux-arm-low.c (the_low_target): Add .regset_bitmap
-	initializer.
-	* linux-bfin-low.c (the_low_target): Likewise.
-	* linux-cris-low.c (the_low_target): Likewise.
-	* linux-crisv32-low.c (the_low_target): Likewise.
-	* linux-ia64-low.c (the_low_target): Likewise.
-	* linux-m32r-low.c (the_low_target): Likewise.
-	* linux-m68k-low.c (the_low_target): Likewise.
-	* linux-ppc-low.c (the_low_target): Likewise.
-	* linux-s390-low.c (the_low_target): Likewise.
-	* linux-sh-low.c (the_low_target): Likewise.
-	* linux-sparc-low.c (the_low_target): Likewise.
-	* linux-tic6x-low.c (the_low_target): Likewise.
-	* linux-x86-low.c (the_low_target): Likewise.
-	* linux-xtensa-low.c (the_low_target): Likewise.
-	* configure.srv <mips*-*-linux*>: Add mips-dsp-linux.o and
-	mips64-dsp-linux.o to srv_regobj.  Add mips-dsp-linux.xml,
-	mips64-dsp-linux.xml, mips-dsp.xml and mips64-dsp.xml to
-	srv_xmlfiles.
-	* Makefile.in (mips-dsp-linux.o, mips-dsp-linux.c): New targets.
-	(mips64-dsp-linux.o, mips64-dsp-linux.c): Likewise.
-
-2012-02-29  Yao Qi  <yao@codesourcery.com>
-	    Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c: (linux_wait_1): Call unsuspend_all_lwps when
-	`step_over_finished' is true.
-
-2012-02-27  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (pid_is_stopped): Delete, moved to common/.
-	(linux_attach_lwp_1): Adjust to use linux_proc_pid_is_stopped.
-
-2012-02-27  Pedro Alves  <palves@redhat.com>
-
-	PR server/9684
-	* linux-low.c (pid_is_stopped): New.
-	(linux_attach_lwp_1): Handle attaching to 'T (stopped)' processes.
-
-2012-02-25  Luis Machado  <lgustavo@codesourcery.com>
-
-	* mem-break.c (clear_gdb_breakpoint_conditions): Fix de-allocation
-	of conditions.
-
-2012-02-24  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-mips-low.c (mips_regmap): Correct the index of $f9.
-
-2012-02-24  Luis Machado  <lgustavo@codesourcery>
-
-	* server.c (handle_query): Advertise support for target-side
-	breakpoint condition evaluation.
-	(process_point_options): New function.
-	(process_serial_event): When inserting a breakpoint, check for
-	a target-side condition that should be evaluated.
-
-	* mem-break.c: Include regcache.h and ax.h.
-	(point_cond_list_t): New data structure.
-	(breakpoint) <cond_list>: New field.
-	(find_gdb_breakpoint_at): Make non-static.
-	(delete_gdb_breakpoint_at): Clear any target-side
-	conditions.
-	(clear_gdb_breakpoint_conditions): New function.
-	(add_condition_to_breakpoint): Likewise.
-	(add_breakpoint_condition): Likewise.
-	(gdb_condition_true_at_breakpoint): Likewise.
-	(gdb_breakpoint_here): Return result directly instead
-	of going through a local variable.
-
-	* mem-break.h (find_gdb_breakpoint_at): New prototype.
-	(clear_gdb_breakpoint_conditions): Likewise.
-	(add_breakpoint_condition): Likewise.
-	(gdb_condition_true_at_breakpoint): Likewise.
-
-	* linux-low.c (linux_wait_1): Evaluate target-side breakpoint condition.
-	(need_step_over_p): Take target-side breakpoint condition into
-	consideration.
-
-2012-02-24  Luis Machado  <lgustavo@codesourcery>
-
-	* server.h: Include tracepoint.h.
-	(agent_mem_read, agent_get_trace_state_variable_value,
-	agent_set_trace_state_variable_value,
-	agent_tsv_read, agent_mem_read_string, get_get_tsv_func_addr,
-	get_set_tsv_func_addr): New prototypes.
-
-	* ax.h: New include file.
-	* ax.c: New source file.
-
-	* tracepoint.c: Include ax.h.
-	(gdb_agent_op, gdb_agent_op_names, gdb_agent_op_sizes,
-	agent_expr, eval_result_type): Move to ax.h.
-	(parse_agent_expr): Rename to ...
-	(gdb_parse_agent_expr): ... this, make it non-static and move
-	to ax.h.
-	(unparse_agent_expr) Rename to ...
-	(gdb_unparse_agent_expr): ... this, make it non-static and move
-	to ax.h.
-	(eval_agent_expr): Rename to ...
-	(eval_tracepoint_agent_expr): ... this.
-	(agent_mem_read, agent_mem_read_string, agent_tsv_read): Remove
-	forward declarations.
-	(add_tracepoint_action): Call gdb_parse_agent_expr (...).
-	(agent_get_trace_state_variable_value): New function.
-	(agent_set_trace_state_variable_value): New function.
-	(cmd_qtdp): Call gdb_parse_agent_expr (...).
-	(response_tracepoint): Call gdb_unparse_agent_expr (...).
-	(do_action_at_tracepoint): Call eval_tracepoint_agent_expr (...).
-	(condition_true_at_tracepoint): Likewise.
-	(parse_agent_expr): Rename to ...
-	(gdb_parse_agent_expr): ... this and move to ax.c.
-	(unparse_agent_expr): Rename to ...
-	(gdb_unparse_agent_expr): ... this and move to ax.c.
-	(gdb_agent_op_name): Move to ax.c.
-	(eval_agent_expr): Rename to ...
-	(gdb_eval_agent_expr): ... this, use regcache passed as parameter
-	and move to ax.c.
-	(eval_tracepoint_agent_expr): New function.
-	(agent_mem_read, agent_mem_read_string, agent_tsv_read): Make
-	non-static.
-	(current_insn_ptr, emit_error, struct bytecode_address): Move to
-	ax.c.
-	(emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul, emit_lsh,
-	emit_rsh_signed, emit_rsh_unsigned, emit_ext, emit_log_not,
-	emit_bit_and, emit_bit_or, emit_bit_xor, emit_bit_not, emit_equal,
-	emit_less_signed, emit_less_unsigned, emit_ref, emit_if_goto,
-	emit_goto, write_goto_address, emit_const, emit_reg, emit_pop,
-	emit_stack, emit_zero_ext, emit_swap, emit_stack_adjust,
-	emit_int_call_1, emit_void_call_2, emit_eq_goto, emit_ne_goto,
-	emit_lt_goto, emit_ge_goto, emit_gt_goto, emit_le_goto): Move to ax.c.
-	(get_get_tsv_func_addr, get_set_tsv_func_addr): New functions.
-	(compile_bytecodes): Remove forward declaration.
-	(is_goto_target): Move to ax.c.
-	(compile_bytecodes): Move to ax.c and call
-	agent_get_trace_state_variable_value (...) and
-	agent_set_trace_state_variable_value (...).
-
-	* Makefile.in: Update ax.c and IPA dependencies.
-
-2012-02-24  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (cmd_bigqtbuffer): Rename as ...
-	(cmd_bigqtbuffer_circular): ... this.  Only handle
-	'QTBuffer:circular:'.
-	(handle_tracepoint_general_set): Adjust.
-
-2012-02-16  Yao Qi  <yao@codesourcery.com>
-
-	* inferiors.c: Move code to ...
-	* dll.c: .... here.  New.
-	* server.h: Declare clear_dlls.
-	* Makefile.in (SFILES): Add dll.c.
-	(OBS): Add dll.o
-	(dll.o): New rule.
-
-2012-02-11  Yao Qi  <yao@codesourcery.com>
-
-	* server.c: (handle_monitor_command): Add a new parameter
-	`own_buf'.
-	(handle_query): Update caller.
-
-2012-02-09  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: Add readlink to AC_CHECK_FUNCS list.
-	* configure, config.in: Regenerate.
-	* hostio.c: Provide an alternate implementation if HAVE_READLINK
-	is not defined.
-
-2012-02-02  Pedro Alves  <palves@redhat.com>
-
-	Try SIGKILL first, then PTRACE_KILL.
-	* linux-low.c (linux_kill_one_lwp): New.
-	(linux_kill_one_lwp): Rename to ...
-	(kill_one_lwp_callback): ... this.  Use the new
-	linux_kill_one_lwp.
-
-2012-02-02  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (cmd_qtminftpilen): Return 0 if there's no current
-	inferior.
-
-2012-01-27  Pedro Alves  <palves@redhat.com>
-
-	* linux-low.c (linux_child_pid_to_exec_file): Delete.
-	(elf_64_file_p): Make static.
-	(linux_pid_exe_is_elf_64_file): New.
-	* linux-low.h (linux_child_pid_to_exec_file, elf_64_file_p):
-	Delete declarations.
-	(linux_pid_exe_is_elf_64_file): Declare.
-	* linux-x86-low.c (x86_arch_setup): Use
-	linux_pid_exe_is_elf_64_file.
-
-2012-01-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (linux_wait_for_event_1): Rename to ...
-	(linux_wait_for_event): ... here and merge it with former
-	linux_wait_for_event - new variable wait_ptid, use it.
-	(linux_wait_for_event): Remove - merge it to linux_wait_for_event_1.
-
-2012-01-23  Pedro Alves  <palves@redhat.com>
-
-	* server.c (main): Avoid yet another case of infinite loop while
-	detaching/killing after a longjmp.
-
-2012-01-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Code cleanup.
-	* linux-low.c (linux_wait_for_event_1): Use ptid_is_pid.
-
-2012-01-20  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* hostio.c (handle_readlink): New function.
-	(handle_vFile): Call it to handle "vFile:readlink" packets.
-
-2012-01-20  Pedro Alves  <palves@redhat.com>
-	    Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* server.c (handle_v_requests): Only support vAttach and vRun to
-	start multiple processes when in extended protocol mode.
-
-2012-01-17  Pedro Alves  <palves@redhat.com>
-
-	* tracepoint.c (initialize_tracepoint): Use mmap instead of
-	memalign plus mprotect to allocate the scratch buffer.
-
-2012-01-13  Pedro Alves  <palves@redhat.com>
-
-	* server.c (attach_inferior): Clear `cont_thread'.
-
-2012-01-13  Pedro Alves  <palves@redhat.com>
-
-	* server.c (main): Avoid infinite loop while detaching/killing
-	after a longjmp.
-
-2012-01-09  Doug Evans  <dje@google.com>
-
-	* server.c (start_inferior): Set last_ptid in --wrapper case.
-
-2012-01-06  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c [IN_PROCESS_AGENT] (debug_threads): Macro
-	defined.
-	[IN_PROCESS_AGENT] (debug_agent): New global variable.
-
-2012-01-04  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cmd_qtdp): Print debug message
-	for static tracepoint.
-
-2012-01-04  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (trace_vdebug): Differentiate debug message
-	between gdbserver and IPA.
-
-2012-01-03  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (tracepoint_was_hit): Don't collect for
-	static tracepoint.
-
-2012-01-02  Joel Brobecker  <brobecker@adacore.com>
-
-	* terminal.h: Reformat copyright header.
-
-2012-01-02  Joel Brobecker  <brobecker@adacore.com>
-
-	* server.c (gdbserver_version): Update copyright year.
-	* gdbreplay.c (gdbreplay_version): Likewise.
-
-2011-12-18  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (linux_create_inferior): Put empty if clause for write.
-
-	Revert:
-	2011-12-18  Hui Zhu  <teawater@gmail.com>
-	* linux-low.c (linux_create_inferior): Save return value to ret.
-
-2011-12-18  Hui Zhu  <teawater@gmail.com>
-
-	* linux-low.c (linux_create_inferior): Save return value to ret.
-
-2011-12-16  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_create_inferior): If stdio connection,
-	redirect stdin from /dev/null, stdout to stderr.
-	* remote-utils.c (remote_is_stdio): New static global.
-	(remote_connection_is_stdio): New function.
-	(remote_prepare): Handle stdio connection.
-	(remote_open): Ditto.
-	(remote_close): Don't close stdin for stdio connections.
-	(read_prim,write_prim): New functions.  Replace all calls to
-	read/write to these.
-	* server.c (main): Watch for "-" argument.  Move call to
-	remote_prepare before start_inferior.
-	* server.h (STDIO_CONNECTION_NAME): New macro.
-	(remote_connection_is_stdio): Declare.
-
-	* remote-utils.c (prepare_resume_reply): Remove extraneous \n
-	in debugging output.
-
-2011-12-15  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c: Include sys/syscall.h.
-	(gdb_ust_thread): Remove preprocessor conditional.
-
-2011-12-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_detach_one_lwp): Call
-	the_low_target.prepare_to_resume before detaching.
-
-2011-12-14  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (gdb_ust_thread): Don't ignore return value
-	of write.
-
-2011-12-14  Yao Qi  <yao@codesourcery.com>
-
-	* i386-low.c (i386_low_stopped_data_address): Initialize local
-	variable `control'.
-
-2011-12-13  Pedro Alves  <pedro@codesourcery.com>
-
-	PR remote/13492
-
-	* i386-low.c (i386_low_stopped_data_address): Avoid fetching
-	DR_CONTROL unless necessary.  Extend comments.
-	* linux-x86-low.c (x86_linux_prepare_to_resume): Don't write to
-	DR0-3 if not used.  If any watchpoint was set, clear DR_STATUS.
-
-2011-12-13  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (trace_buffer_alloc): Replace magic numbers with
-	macros.
-	(upload_fast_traceframes, upload_fast_traceframes): Likewise.
-
-2011-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (linux_kill): Skip PTRACE_KILL if LWP does not exist.
-	Print new debug message for such case.
-
-2011-12-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	Fix overlapping memcpy.
-	* mem-break.c (set_raw_breakpoint_at): New variable buf.  Use it for
-	the read_inferior_memory transfer.
-	(delete_fast_tracepoint_jump): New variable buf.  Use it for the
-	write_inferior_memory transfer.
-	(set_fast_tracepoint_jump): New variable buf.  Use it for the
-	read_inferior_memory and write_inferior_memory transfers.
-	(uninsert_fast_tracepoint_jumps_at, reinsert_fast_tracepoint_jumps_at)
-	(delete_raw_breakpoint, uninsert_raw_breakpoint): New variable buf.
-	Use it for the write_inferior_memory transfer.
-	(check_mem_read, check_mem_write): New gdb_asserts for overlapping
-	buffers.
-
-2011-12-06  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-low.c (fetch_register, store_register): Make code
-	consistent, fix formatting.
-
-2011-12-06  Maciej W. Rozycki  <macro@codesourcery.com>
-
-	* linux-low.c (usr_store_inferior_registers): Factor out code
-	to handle individual registers into...
-	(store_register): ... this new function.
-
-2011-12-06  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* Makefile.in (s390-linux32v1.o, s390-linux32v1.c): New rules.
-	(s390-linux32v2.o, s390-linux32v2.c): Likewise.
-	(s390-linux64v1.o, s390-linux64v1.c): Likewise.
-	(s390-linux64v2.o, s390-linux64v2.c): Likewise.
-	(s390x-linux64v1.o, s390x-linux64v1.c): Likewise.
-	(s390x-linux64v2.o, s390x-linux64v2.c): Likewise.
-	* configure.srv [s390*-*-linux*] (srv_regobj): Add new objects.
-	(srv_xmlfiles): Add new XML files.
-
-	* linux-s390-low.c: Include "elf/common.h", <sys/ptrace.h>,
-	and <sys/uio.h>.
-	(PTRACE_GETREGSET, PTRACE_SETREGSET): Define if undefined.
-	(init_registers_s390_linux32v1): Add prototype.
-	(init_registers_s390_linux32v2): Likewise.
-	(init_registers_s390_linux64v1): Likewise.
-	(init_registers_s390_linux64v2): Likewise.
-	(init_registers_s390x_linux64v1): Likewise.
-	(init_registers_s390x_linux64v2): Likewise.
-	(s390_num_regs): Increment to 52.
-	(s390_regmap): Add orig_r2 register.
-	(s390_num_regs_3264): Increment to 68.
-	(s390_regmap_3264): Add orig_r2 register.
-	(s390_collect_ptrace_register): Handle orig_r2 register.
-	(s390_supply_ptrace_register): Likewise.
-	(s390_fill_last_break): New function.
-	(s390_store_last_break): Likewise.
-	(s390_fill_system_call): New function.
-	(s390_store_system_call): Likewise.
-	(target_regsets): Handle NT_S390_LAST_BREAK and NT_S390_SYSTEM_CALL
-	register sets.
-	(s390_check_regset): New function.
-	(s390_arch_setup): Check for presence of NT_S390_LAST_BREAK and
-	NT_S390_SYSTEM_CALL regsets and use appropriate description.
-	Update target_regsets for available register sets.
-
-2011-12-02  Paul Pluzhnikov  <ppluzhnikov@google.com>
-	    Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (get_phdr_phnum_from_proc_auxv, get_dynamic, get_r_debug)
-	(read_one_ptr, struct link_map_offsets, linux_qxfer_libraries_svr4):
-	New.
-	(struct linux_target_ops): Install linux_qxfer_libraries_svr4.
-	* linux-low.h (struct process_info_private): New member r_debug.
-	* server.c (handle_qxfer_libraries): Call
-	the_target->qxfer_libraries_svr4.
-	(handle_qxfer_libraries_svr4): New function.
-	(qxfer_packets): New entry "libraries-svr4".
-	(handle_query): Check QXFER_LIBRARIES_SVR4 and report libraries-svr4.
-	* target.h (struct target_ops): New member qxfer_libraries_svr4.
-	* remote.c (remote_xfer_partial): Call add_packet_config_cmd for
-	PACKET_qXfer_libraries_svr4.
-
-2011-11-30  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-s390-low.c (s390_collect_ptrace_register): Fully convert
-	PSW address/mask between 8-byte and 16-byte formats.
-	(s390_supply_ptrace_register): Likewise.
-	(s390_get_pc, s390_set_pc): 4-byte PSW address always includes
-	basic addressing mode bit.
-
-2011-11-24  Stan Shebs  <stan@codesourcery.com>
-
-	* tracepoint.c (cmd_qtstatus): Use plongest instead of %llx.
-
-2011-11-17  Stan Shebs  <stan@codesourcery.com>
-
-	* tracepoint.c (struct tracepoint): New field traceframe_usage.
-	(tracing_start_time): New global.
-	(tracing_stop_time): New global.
-	(tracing_user_name): New global.
-	(tracing_notes): New global.
-	(tracing_stop_note): New global.
-	(cmd_qtstart): Set traceframe_usage, start_time.
-	(stop_tracing): Set stop_time.
-	(cmd_qtstatus): Report additional status.
-	(cmd_qtp): New function.
-	(handle_tracepoint_query): Call it.
-	(cmd_qtnotes): New function.
-	(handle_tracepoint_general_set): Call it.
-	(get_timestamp): Rename from tsv_get_timestamp.
-
-2011-11-14  Stan Shebs  <stan@codesourcery.com>
-	    Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* linux-x86-low.c (small_jump_insn): New.
-	(i386_install_fast_tracepoint_jump_pad): Add arguments for
-	trampoline and error message, build a trampoline and issue a small
-	jump instruction to it.
-	(x86_install_fast_tracepoint_jump_pad): Add arguments for
-	trampoline and error message.
-	(x86_get_min_fast_tracepoint_insn_len): New.
-	(the_low_target): Add call to x86_get_min_fast_tracepoint_insn_len.
-	* linux-low.h (struct linux_target_ops): Add arguments to
-	install_fast_tracepoint_jump_pad operation, add new operation.
-	* linux-low.c (linux_install_fast_tracepoint_jump_pad): Add
-	arguments.
-	(linux_get_min_fast_tracepoint_insn_len): New function.
-	(linux_target_op): Add new operation.
-	* tracepoint.c (gdb_trampoline_buffer): New IPA variable.
-	(gdb_trampoline_buffer_end): Ditto.
-	(gdb_trampoline_buffer_error): Ditto.
-	(struct ipa_sym_addresses): Add fields for new IPA variables.
-	(symbol_list): Add entries for new IPA variables.
-	(struct tracepoint): Add fields to hold the address range of the
-	trampoline used by the tracepoint.
-	(trampoline_buffer_head): New static variable.
-	(trampoline_buffer_tail): Ditto.
-	(claim_trampoline_space): New function.
-	(have_fast_tracepoint_trampoline_buffer): New function.
-	(clone_fast_tracepoint): Fill in trampoline fields of tracepoint
-	structure.
-	(install_fast_tracepoint): Ditto, also add error buffer argument.
-	(cmd_qtminftpilen): New function.
-	(handle_tracepoint_query): Add response to qTMinFTPILen packet.
-	(fast_tracepoint_from_trampoline_address): New function.
-	(fast_tracepoint_collecting): Handle trampoline as part of jump
-	pad space.
-	(set_trampoline_buffer_space): New function.
-	(initialize_tracepoint): Initialize new IPA variables.
-	* target.h (struct target_ops): Add arguments to
-	install_fast_tracepoint_jump_pad operation, add new
-	get_min_fast_tracepoint_insn_len operation.
-	(target_get_min_fast_tracepoint_insn_len): New.
-	(install_fast_tracepoint_jump_pad): Add arguments.
-	* server.h (IPA_BUFSIZ): Define.
-	* linux-i386-ipa.c: Include extra header files.
-	(initialize_fast_tracepoint_trampoline_buffer): New function.
-	(initialize_low_tracepoint): Call it.
-	* server.h (set_trampoline_buffer_space): Declare.
-	(claim_trampoline_space): Ditto.
-	(have_fast_tracepoint_trampoline_buffer): Ditto.
-
-2011-11-14  Yao Qi  <yao@codesourcery.com>
-
-	* server.c (handle_query): Handle InstallInTrace for qSupported.
-	* tracepoint.c (add_tracepoint): Sort list.
-	(install_tracepoint, download_tracepoint): New.
-	(cmd_qtdp): Call them to install and download tracepoints.
-	(sort_tracepoints): Removed.
-	(cmd_qtstart): Update.
-
-2011-11-14  Yao Qi  <yao@codesourcery.com>
-
-	* mem-break.c (inc_ref_fast_tracepoint_jump): New.
-	* mem-break.h: Declare.
-	* tracepoint.c (cmd_qtstart): Move some code to ...
-	(clone_fast_tracepoint, install_fast_tracepoint): ... here.
-	New.
-	(download_tracepoints): Move some code to ...
-	(download_tracepoint_1): ... here.  New.
-
-2011-11-08  Yao Qi  <yao@codesourcery.com>
-
-	* remote-utils.c (relocate_instruction): A comment fix.
-
-2011-11-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* win32-i386-low.c (dr_status_mirror, dr_control_mirror): Delete.
-	(i386_dr_low_get_control, i386_dr_low_get_status): Use
-	dr_status_mirror and dr_control_mirror from debug_reg_state.
-	(i386_dr_low_get_status): Use debug_reg_state.dr_status_mirror
-	(i386_initial_stuff): Remove use of deleted globals.
-	(i386_get_thread_context, i386_set_thread_context,
-	i386_thread_added): Use dr_status_mirror and dr_control_mirror
-	from debug_reg_state.
-
-2011-11-05  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (gdb_collect): Loop over tracepoints of same
-	address as TPOINT's.
-
-2011-11-02  Stan Shebs  <stan@codesourcery.com>
-
-	* tracepoint.c (agent_mem_read_string): New function.
-	(eval_agent_expr): Call it for tracenz.
-	* server.c (handle_query): Report support for tracenz.
-
-2011-11-02  Yao Qi  <yao@codesourcery.com>
-
-	* tracepoint.c (cmd_qtstart): Remove unused local variables.
-
-2011-11-02  Yao Qi  <yao@codesourcery.com>
-
-	* target.h: Fix a typo in comment.
-
-2011-10-31  Pedro Alves  <pedro@codesourcery.com>
-
-	* mem-break.c (check_mem_write): Add `myaddr' parameter.  Don't
-	clobber the breakpoints' shadows with fast tracepoint jumps.
-	* mem-break.h (check_mem_write): Add `myaddr' parameter.
-	* target.c (write_inferior_memory): Also pass MYADDR down to
-	check_mem_write.
-
-2011-10-07  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* configure.ac: Check support for personality routine.
-	* configure: Regenerate.
-	* config.in: Likewise.
-	* linux-low.c: Include <sys/personality.h>.
-	Define ADDR_NO_RANDOMIZE if necessary.
-	(linux_create_inferior): Disable address space randomization when
-	forking inferior, if requested.
-	(linux_supports_disable_randomization): New function.
-	(linux_target_ops): Install it.
-	* server.h (disable_randomization): Declare.
-	* server.c (disable_randomization): New global variable.
-	(handle_general_set): Handle QDisableRandomization.
-	(handle_query): Likewise for qSupported.
-	(main): Support --disable-randomization and --no-disable-randomization
-	command line arguments.
-	* target.h (struct target_ops): Add supports_disable_randomization.
-	(target_supports_disable_randomization): New macro.
-
-2011-09-29  Mike Frysinger  <vapier@gentoo.org>
-
-	* linux-low.c (target_loadseg): Add defined PTRACE_GETFDPIC to the
-	ifdef check.
-	[PT_GETDSBT] (target_loadmap): Wrap in a defined PT_GETDSBT check.
-	[!PT_GETDSBT] (target_loadmap): New definition.
-	(LINUX_LOADMAP, LINUX_LOADMAP_EXEC, LINUX_LOADMAP_INTERP): Define.
-	(linux_read_loadmap): Change PTRACE_GETDSBT_EXEC to
-	LINUX_LOADMAP_EXEC, PTRACE_GETDSBT_INTERP to LINUX_LOADMAP_INTERP,
-	and PT_GETDSBT to LINUX_LOADMAP.
-	[!PT_GETDSBT] (linux_read_loadmap): Define to NULL.
-	(linux_target_ops): Delete unnecessary ifdef PT_GETDSBT check.
-
-2011-09-21  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* linux-arm-low.c (struct arm_linux_hwbp_cap): Remove.
-	(arm_linux_hwbp_cap): New static variable.
-	(arm_linux_get_hwbp_cap): Replace by ...
-	(arm_linux_init_hwbp_cap): ... this new function.
-	(arm_linux_get_hw_breakpoint_count): Use arm_linux_hwbp_cap.
-	(arm_linux_get_hw_watchpoint_count): Likewise.
-	(arm_linux_get_hw_watchpoint_max_length): Likewise.
-	(arm_arch_setup): Call arm_linux_init_hwbp_cap.
-	(arm_prepare_to_resume): Use perror_with_name instead of error.
-
-2011-09-21  Ulrich Weigand  <ulrich.weigand@linaro.org>
-
-	* linux-arm-low.c: Include <signal.h>.
-	(PTRACE_GETHBPREGS, PTRACE_SETHBPREGS): Define if necessary.
-	(struct arm_linux_hwbp_cap): New data type.
-	(arm_hwbp_type, arm_hwbp_control_t): New typedefs.
-	(struct arm_linux_hw_breakpoint): New data type.
-	(MAX_BPTS, MAX_WPTS): Define.
-	(struct arch_process_info, struct arch_lwp_info): New data types.
-	(arm_linux_get_hwbp_cap): New function.
-	(arm_linux_get_hw_breakpoint_count): Likewise.
-	(arm_linux_get_hw_watchpoint_count): Likewise.
-	(arm_linux_get_hw_watchpoint_max_length): Likewise.
-	(arm_hwbp_control_initialize): Likewise.
-	(arm_hwbp_control_is_enabled): Likewise.
-	(arm_hwbp_control_is_initialized): Likewise.
-	(arm_hwbp_control_disable): Likewise.
-	(arm_linux_hw_breakpoint_equal): Likewise.
-	(arm_linux_hw_point_initialize): Likewise.
-	(struct update_registers_data): New data structure.
-	(update_registers_callback: New function.
-	(arm_insert_point): Likewise.
-	(arm_remove_point): Likewise.
-	(arm_stopped_by_watchpoint): Likewise.
-	(arm_stopped_data_address): Likewise.
-	(arm_new_process): Likewise.
-	(arm_new_thread): Likewise.
-	(arm_prepare_to_resume): Likewise.
-	(the_low_target): Register arm_insert_point, arm_remove_point,
-	arm_stopped_by_watchpoint, arm_stopped_data_address, arm_new_process,
-	arm_new_thread, and arm_prepare_to_resume.
-
-2011-09-15  Stan Shebs  <stan@codesourcery.com>
-
-	* server.h (struct emit_ops): Add compare-goto fields.
-	* tracepoint.c (gdb_agent_op_sizes): New table.
-	(emit_eq_goto): New function.
-	(emit_ne_goto): New function.
-	(emit_lt_goto): New function.
-	(emit_le_goto): New function.
-	(emit_gt_goto): New function.
-	(emit_ge_goto): New function.
-	(is_goto_target): New function.
-	(compile_bytecodes): Recognize special cases of compare-goto
-	combinations and call specialized emitters for them.
-	* linux-x86-low.c (amd64_emit_eq_goto): New function.
-	(amd64_emit_ne_goto): New function.
-	(amd64_emit_lt_goto): New function.
-	(amd64_emit_le_goto): New function.
-	(amd64_emit_gt_goto): New function.
-	(amd64_emit_ge_goto): New function.
-	(amd64_emit_ops): Add the new functions.
-	(i386_emit_eq_goto): New function.
-	(i386_emit_ne_goto): New function.
-	(i386_emit_lt_goto): New function.
-	(i386_emit_le_goto): New function.
-	(i386_emit_gt_goto): New function.
-	(i386_emit_ge_goto): New function.
-	(i386_emit_ops): Add the new functions.
-
-2011-09-08  Stan Shebs  <stan@codesourcery.com>
-
-	* linux-x86-low.c (i386_emit_prologue): Save %ebx.
-	(i386_emit_epilogue): Restore %ebx.
-
-2011-08-31  Jie Zhang  <jzhang918@gmail.com>
-
-	* server.c (step_thread): Remove definition.
-	(process_serial_event): Don't handle Hs.
-	* server.h (step_thread): Remove declaration.
-	* target.c (set_desired_inferior): Remove use of step_thread.
-
-2011-08-24  Luis Machado  <lgustavo@codesourcery.com>
-
-	* linux-low.c: Include linux-procfs.h.
-	(linux_attach_lwp_1): Update comments.
-	(linux_attach): Scan for existing threads when attaching to a
-	process that is the tgid.
-	* Makefile.in: Update dependencies.
-
-2011-08-24  Luis Machado  <lgustavo@codesourcery.com>
-
-	* configure.srv: Add linux-procfs.o dependencies.
-
-2011-08-14  Yao Qi  <yao@codesourcery.com>
-
-	* target.h (struct target_ops): Fix indent.
-	* win32-low.c (win32_target_ops): Fix comment.
-
-2011-08-14  Andrew Jenner  <andrew@codesourcery.com>
-	    Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (clean): Remove tic6x-*.c files.
-	(linux-tic6x-low.o, tic6x-c62x-linux.o, tic6x-c64x-linux.o): New rules.
-	(tic6x-c64xp-linux.o, tic6x-c62x-linux.c, tic6x-c64x-linux.c): Likewise.
-	(tic6x-c64xp-linux.c): Likewise.
-	* configure.srv: Add support for tic6x-*-uclinux.
-	* linux-tic6x-low.c: New.
-	* linux-low.c (PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define.
-
-2011-08-14  Andrew Stubbs <ams@codesourcery.com>
-	    Yao Qi  <yao@codesourcery.com>
-
-	* target.h (struct target_ops): Add read_loadmap.
-	* linux-low.c (struct target_loadseg): New type.
-	(struct target_loadmap): New type.
-	(linux_read_loadmap): New function.
-	(linux_target_ops): Add linux_read_loadmap.
-	* server.c (handle_query): Support qXfer:fdpic:read packet.
-	* win32-low.c (win32_target_ops): Initialize field `read_loadmap'
-	to NULL.
-
-2011-08-05  Eli Zaretskii  <eliz@gnu.org>
-
-	* win32-low.c: Include <stdint.h>.
-
-2011-07-22  Pedro Alves  <pedro@codesourcery.com>
-
-	* i386-low.c (i386_insert_aligned_watchpoint): Don't pass the info
-	to the inferior here.
-	(i386_remove_aligned_watchpoint): Ditto.
-	(i386_handle_nonaligned_watchpoint): Return immediate on fail to
-	fit part of the watchpoint in the debug registers.
-	(i386_update_inferior_debug_regs): New.
-	(i386_low_insert_watchpoint): Work on a local mirror of the debug
-	registers, and only update the inferior on success.
-	(i386_low_remove_watchpoint): Ditto.
-
-2011-07-22  Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* linux-low.c (compare_ints, unique, list_threads, show_process,
-	linux_core_of_thread): Delete.
-	(linux_target_ops): Change linux_core_of_thread to
-	linux_common_core_of_thread.
-	(linux_qxfer_osdata): Defer to linux_common_xfer_osdata.
-	* utils.c (malloc_failure): Change type of argument.
-	(xmalloc, xrealloc, xcalloc, xsnprintf): Delete.
-	* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
-	common/linux-osdata.c, common/ptid.c and common/buffer.c.
-	(OBS): Add xml-utils.o, common-utils.o, ptid.o and buffer.o.
-	(IPA_OBJS): Add common-utils-ipa.o.
-	(ptid_h, linux_osdata_h): New macros.
-	(server_h): Add common/common-utils.h, common/xml-utils.h,
-	common/buffer.h, common/gdb_assert.h, common/gdb_locale.h and
-	common/ptid.h.
-	(common-utils-ipa.o, common-utils.o, xml-utils.o, linux-osdata.o,
-	ptid.o, buffer.o): New rules.
-	(linux-low.o): Add common/linux-osdata.h as a dependency.
-	* configure.srv (srv_tgtobj): Add linux-osdata.o to Linux targets.
-	* configure.ac: Add AC_HEADER_DIRENT check.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* remote-utils.c (xml_escape_text): Delete.
-	(buffer_grow, buffer_free, buffer_init, buffer_finish,
-	buffer_xml_printf): Move to common/buffer.c.
-	* server.c (main): Remove call to initialize_inferiors.
-	* server.h (struct ptid, ptid_t, minus_one_ptid, null_ptid,
-	ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp, ptid_get_tid,
-	ptid_equal, ptid_is_pid, initialize_inferiors, xml_escape_text,
-	internal_error, gdb_assert, gdb_assert_fail): Delete.
-	(struct buffer, buffer_grow, buffer_free, buffer_init, buffer_finish,
-	buffer_xml_printf, buffer_grow_str, buffer_grow_str0): Move to
-	common/buffer.h.
-	* inferiors.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
-	ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid,
-	initialize_inferiors): Delete.
-
-2011-07-20  Pedro Alves  <pedro@codesourcery.com>
-
-	* tracepoint.c (tracepoint_look_up_symbols): Return upon the first
-	symbol error.
-
-2011-05-31  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-x86-low.c (i386_dr_low_get_addr): Fix off by one in
-	assertion.
-	* win32-i386-low.c (i386_dr_low_get_addr): Ditto.
-
-2011-05-26  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (thread-db.o): Track dependence to
-	common/gdb_thread_db.h.
-	* thread-db.c: include gdb_thread_db.h from right place.
-
-2011-05-16  Adrian Cornish  <gnu@bluedreamer.com>
-
-	* linux-i386-ipa.c (supply_static_tracepoint_registers): Pass
-	__FILE__ and __LINE__ to internal_error.
-
-2011-05-13  Doug Evans  <dje@google.com>
-
-	* thread-db.c (try_thread_db_load_from_sdir): New function.
-	(try_thread_db_load_from_dir): New function.
-	(thread_db_load_search): Handle $sdir, ignore $pdir.
-	Remove trying of system directories if search of
-	libthread-db-search-path fails,	that is now done via $sdir.
-
-2011-05-12  Kwok Cheung Yeung  <kcy@codesourcery.com>
-
-	* server.c (handle_query): Add EnableDisableTracepoints to the list
-	of supported features.
-	* tracepoint.c (clear_installed_tracepoints): Uninstall disabled
-	tracepoints.
-	(cmd_qtenable_disable): New.
-	(cmd_qtstart): Install tracepoints even if disabled.
-	(handle_tracepoint_general_set): Add call to cmd_qtenable_disable on
-	receiving a QTEnable or QTDisable packet.
-	(gdb_collect): Skip data collection if fast tracepoint is disabled.
-	(ust_marker_to_static_tracepoint): Do not ignore disabled static
-	tracepoints.
-	(gdb_probe): Skip data collection if static tracepoint is disabled.
-
-2011-05-10  Doug Evans  <dje@google.com>
-
-	* thread-db.c (thread_db_handle_monitor_command): Handle elided path.
-
-2011-05-04  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_join): Skip process lookup.
-	* spu-low.c (spu_join): Ditto.
-	* server.c (join_inferiors_callback): Delete.
-	(process_serial_event): For 'D' packet (detach) call join_inferior
-	directly.
-
-2011-05-04  Joseph Myers  <joseph@codesourcery.com>
-
-	* README: Don't mention xscale*-*-linux*.
-	* configure.srv (xscale*-*-linux*): Don't handle target.
-
-2011-04-27  Nathan Froyd  <froydnj@codesourcery.com>
-
-	* linux-x86-low.c (amd64_emit_const): Call memcpy instead of
-	casting pointers.
-	(amd64_emit_reg, amd64_emit_int_call_1, amd64_emit_void_call_2):
-	(i386_emit_const, i386_emit_reg, i386_emit_int_call_1):
-	(i386_emit_void_call_2): Likewise.
-
-2011-04-26  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c: Move common macros to linux-ptrace.h.
-	Include linux-ptrace.h.
-	* Makefile.in (linux_ptrace_h): New.
-	(linux-low.o): Depends on linux-ptrace.h.
-
-2011-04-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* remote-utils.c (handle_accept_event): Close LISTEN_DESC only if
-	RUN_ONCE.  Comment for the LISTEN_DESC delete_file_handler call.
-	(remote_prepare): New function with most of the TCP code from ...
-	(remote_open): ... here.  Detect PORT here unconditionally.  Move also
-	setting transport_is_reliable.
-	* server.c (run_once): New variable.
-	(gdbserver_usage): Document it.
-	(main): Set run_once for `--once'.  Call remote_prepare.  Exit after
-	the first run if RUN_ONCE.
-	* server.h (run_once, remote_prepare): New declarations.
-
-2011-04-19  Tom Tromey  <tromey@redhat.com>
-
-	* win32-low.c (handle_load_dll): Remove duplicate "the".
-
-2011-04-07  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	Remove support for old Cygwin 1.5 versions.
-	* win32-low.c (win32_create_inferior): Use new cygwin_path_list
-	function to avoid warning.
-	(win32_add_one_solib): Use cygwin_conv_path function to avoid
-	warning.
-
-2011-03-18  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* gdbserver/server.h (Macro _): Define it if not available.
-
-2011-03-14  Michael Snyder  <msnyder@vmware.com>
-
-	* hostio.c (handle_close): Remove unnecessary null test.
-
-2011-03-10  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in (maintainer-clean realclean distclean): Remove
-	"make ...  subdir_do" command.
-
-2011-03-10  Michael Snyder  <msnyder@vmware.com>
-
-	* tracepoint.c (tracepoint_finish_step): Fix loop variable.
-
-	* server.c (handle_v_run): Free alloced buffer on early return.
-
-2011-03-09  Yao Qi  <yao@codesourcery.com>
-
-	Revert:
-	2011-03-04  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in: Remove GNU make feature --directory.
-
-	2011-03-05  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (CLEANDIRS, REQUIRED_SUBDIRS): New variable.
-	(subdir_do): New make target.  Copied from gdb/Makefile.
-	(maintainer-clean, realclean, distclean, clean): Call corresponding
-	make targets in common/Makefile.
-
-	2011-02-11  Yao Qi  <yao@codesourcery.com>
-
-	* configure.ac: Call AC_PROG_RANLIB.
-	* Makefile.in: Remove signals.o from OBS.  Link libcommon.a.
-	* configure: Regenerate.
-
-2011-03-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* remote-utils.c (putpkt_binary_1): Calculate BUF2 size dynamically.
-
-2011-03-06  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (REQUIRED_SUBDIRS): Remove $(LIBCOMMON_DIR).
-
-2011-03-05  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in (CLEANDIRS, REQUIRED_SUBDIRS): New variable.
-	(subdir_do): New make target.  Copied from gdb/Makefile.
-	(maintainer-clean, realclean, distclean, clean): Call corresponding
-	make targets in common/Makefile.
-
-2011-03-04  Yao Qi  <yao@codesourcery.com>
-
-	* Makefile.in: Remove GNU make feature --directory.
-
-2011-03-04  Michael Snyder  <msnyder@vmware.com>
-
-	* server.c (queue_stop_reply): Call xmalloc not malloc.
-
-2011-03-02  Michael Snyder  <msnyder@vmware.com>
-
-	* linux-arm-low.c (arm_arch_setup): Replace malloc with xmalloc.
-
-2011-02-28  Michael Snyder  <msnyder@vmware.com>
-
-	* tracepoint.c (cmd_qtv): Discard unused value 'packet'.
-	(cmd_qtframe): Ditto.
-	(cmd_qtbuffer): Ditto.
-	(cmd_bigqtbuffer): Ditto.
-
-	* utils.c (decimal2str): Initialize 'width' to nine, then
-	don't mess with it.
-
-2011-02-28  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* hostio.c (require_data): Free *data, not data.
-
-2011-02-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* hostio.c (require_data): Use free, not xfree.
-
-2011-02-27  Michael Snyder  <msnyder@vmware.com>
-
-	* server.c (handle_query): Discard unused value.
-
-	* hostio.c (require_data): Free malloc memory before returning
-	error.
-
-2011-02-26  Michael Snyder  <msnyder@vmware.com>
-
-	* linux-low.c (list_threads): Call closedir for dirent.
-
-2011-02-27  Michael Snyder  <msnyder@vmware.com>
-
-	* i386-low.c (i386-length_and_rw_bits): Comment the fact that
-	a case statement falls through.
-
-	* linux-low.c (linux_xfer_siginfo): Fix fencepost error.
-
-	* linux-amd64-ipa.c (gdb_agent_get_raw_reg): Fix fencepost error
-	in comparison.
-
-2011-02-26  Michael Snyder  <msnyder@vmware.com>
-
-	* utils.c (decimal2str): Eliminate dead code and dead param.
-	(pulongest): Drop dead param from call to decimal2str.
-	(plongest): Ditto.
-
-2011-02-24  Joel Brobecker  <brobecker@adacore.com>
-
-	Revert the following patch (not approved yet):
-	2011-02-21  Hui Zhu  <teawater@gmail.com>
-	* tracepoint.c (tp_printf): New function.
-	(eval_agent_expr): Handle gdb_agent_op_printf.
-
-2011-02-21  Hui Zhu  <teawater@gmail.com>
-
-	* tracepoint.c (tp_printf): New function.
-	(eval_agent_expr): Handle gdb_agent_op_printf.
-
-2011-02-18  Tom Tromey  <tromey@redhat.com>
-
-	* Makefile.in (tracepoint-ipa.o): Depend on ax.def.
-	(tracepoint.o): Likewise.
-	* tracepoint.c (enum gdb_agent_op): Use ax.def.
-	(gdb_agent_op_names): Likewise.
-
-2011-02-18  Tom Tromey  <tromey@redhat.com>
-
-	* tracepoint.c (enum gdb_agent_op) <gdb_agent_op_pick,
-	gdb_agent_op_rot>: New constants.
-	(gdb_agent_op_names): Add pick and roll.
-	(eval_agent_expr) <gdb_agent_op_pick, gdb_agent_op_rot>: New
-	cases.
-
-2011-02-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* aclocal.m4: Regenerated with aclocal-1.11.1.
-
-2011-02-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_qxfer_traceframe_info): New.
-	(qxfer_packets): Register "traceframe-info".
-	(handle_query): Report support for qXfer:traceframe-info:read+.
-	* tracepoint.c (match_blocktype): New.
-	(traceframe_find_block_type): Rename to ...
-	(traceframe_walk_blocks): ... this.  Add callback filter argument,
-	and use it.
-	(traceframe_find_block_type): New, reimplemented on top of
-	traceframe_walk_blocks.
-	(build_traceframe_info_xml): New.
-	(traceframe_read_info): New.
-	* server.h (traceframe_read_info): Declare.
-
-2011-02-11  Yao Qi  <yao@codesourcery.com>
-
-	* configure.ac: Call AC_PROG_RANLIB.
-	* Makefile.in: Remove signals.o from OBS.  Link libcommon.a.
-	* configure: Regenerate.
-
-2011-02-07  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (gdb_read_memory): Change return semantics to allow
-	partial transfers.
-	(handle_search_memory_1): Adjust.
-	(process_serial_event) <'m' packet>: Handle partial transfers.
-	* tracepoint.c (traceframe_read_mem): Handle partial transfers.
-
-2011-01-28  Pedro Alves  <pedro@codesourcery.com>
-
-	* regcache.c (init_register_cache): Initialize
-	regcache->register_status.
-	(free_register_cache): Release regcache->register_status.
-	(regcache_cpy): Copy register_status.
-	(registers_to_string): Print 'x's for unavailable registers.
-	(supply_register): Mark the register's status valid or
-	unavailable, depending on whether a buffer was passed in or not.
-	(supply_register_zeroed): New.
-	(supply_regblock): Mark the registers' status valid or
-	unavailable, depending on whether a buffer was passed in or not.
-	* regcache.h (REG_UNAVAILABLE, REG_VALID): New defines.
-	(struct regcache): New `register_status' field.
-	(supply_register_zeroed): Declare.
-	* i387-fp.c (i387_xsave_to_cache): Zero out registers using
-	supply_register_zeroed, rather than passing a NULL buffer to
-	supply_register.
-	* tracepoint.c (fetch_traceframe_registers): Update comment.
-
-2011-01-28  Pedro Alves  <pedro@codesourcery.com>
-
-	* i387-fp.c (i387_xsave_to_cache): Make passing NULL as register
-	buffer explicit.
-
-2011-01-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.h (decode_xfer_write): Change prototype.
-	* remote-utils.c (decode_xfer_write): Remove `annex' parameter,
-	and don't extract the annex here.
-	* server.c (decode_xfer_read): Remove `annex' parameter,
-	and don't extract the annex here.
-	(decode_xfer): New.
-	(struct qxfer): New.
-	(handle_qxfer_auxv, handle_qxfer_features, handle_qxfer_libraries)
-	(handle_qxfer_osdata, handle_qxfer_siginfo, handle_qxfer_spu)
-	(handle_qxfer_statictrace): New functions, abstracted out from
-	handle_query, and made to use the struct qxfer interface.
-	(handle_threads_qxfer_proper): Rename to ...
-	(handle_qxfer_threads_proper): ... this.
-	(handle_threads_qxfer): Rename to ...
-	(handle_qxfer_threads): ... this.  Adjust.
-	(qxfer_packets): New array.
-	(handle_qxfer): New function.
-	(handle_query): Use handle_qxfer.
-
-2011-01-05  Michael Snyder  <msnyder@msnyder-server.eng.vmware.com>
-
-	* gdbreplay.c: Shorten lines of >= 80 columns.
-	* linux-low.c: Ditto.
-	* linux-ppc-low.c: Ditto.
-	* linux-s390-low.c: Ditto.
-	* linux-sparc-low.c: Ditto.
-	* linux-x86-low.c: Ditto.
-	* linux-xtensa-low.c: Ditto.
-	* mem-break.c: Ditto.
-	* nto-low.c: Ditto.
-	* regcache.h: Ditto.
-	* remote-utils.c: Ditto.
-	* server.c: Ditto.
-	* server.h: Ditto.
-	* thread-db.c: Ditto.
-	* tracepoint.c: Ditto.
-	* utils.c: Ditto.
-	* win32-low.h: Ditto.
-
-2011-01-05  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbserver/configure.ac, gdbserver/gdbserver.1: Copyright year
-	update.
-
-2011-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* server.c (gdbserver_version): Update copyright year in version
-	output.
-	* gdbreplay.c (gdbreplay_version): Ditto.
-
-2010-12-29  Jie Zhang  <jie.zhang@analog.com>
-
-	* configure.srv (bfin-*-*linux*): Handle Blackfin/Linux targets.
-	* linux-bfin-low.c: New file.
-	* linux-low.c: Define PT_TEXT_ADDR, PT_TEXT_END_ADDR, and
-	PT_DATA_ADDR for BFIN targets.
-	* Makefile.in (SFILES): Add linux-bfin-low.c.
-	(clean): Remove reg-bfin.c.
-	(linux-bfin-low.o, reg-bfin.o, reg-bfin.c): New targets.
-	* README: Mention supported Blackfin targets.
-
-2010-12-23  Mike Frysinger  <vapier@gentoo.org>
-
-	* .gitignore: New file.
-
-2010-11-16  Mike Frysinger  <vapier@gentoo.org>
-
-	* linux-low.c (linux_tracefork_child): Add char* cast to arg.
-
-2010-10-22  Jie Zhang  <jie@codesourcery.com>
-
-	* Makefile.in: Add FLAGS_TO_PASS variable.
-	(install): Remove dependency of install-only and recursively
-	invoke make for install-only.
-
-2010-10-04  Doug Evans  <dje@google.com>
-
-	* Makefile.in (uninstall): Use $(DESTDIR).
-
-2010-09-24  Pedro Alves  <pedro@codesourcery.com>
-
-	PR gdb/11842
-
-	* linux-x86-low.c (compat_siginfo_from_siginfo)
-	(siginfo_from_compat_siginfo): Also copy si_pid and si_uid when
-	si_code is < 0.  Check for si_code == SI_TIMER before checking for
-	si_code < 0.
-
-2010-09-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-i386-low.c: New file.
-	* configure.srv: Add handling of i[34567]86-*-lynxos* targets.
-
-2010-09-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c (ptrace_request_to_str): Remove handling for
-	request values that have been removed in LynxOS 5.x.
-
-2010-09-13  Joel Brobecker  <brobecker@adacore.com>
-
-	* lynx-low.c, lynx-ppc-loc.c: Include <sys/ptrace.h> instead of
-	<ptrace.h>
-
-2010-09-09  Nathan Sidwell  <nathan@codesourcery.com>
-
-	* configure.ac: Add --enable-inprocess-agent option.
-	* configure: Rebuilt.
-
-2010-09-06  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c (linux_kill): Remove unused variable.
-	(linux_stabilize_threads): Likewise.
-	* server.c (start_inferior): Likewise.
-	(queue_stop_reply_callback): Likewise.
-	* tracepoint.c (do_action_at_tracepoint): Likewise.
-
-2010-09-06  Yao Qi  <yao@codesourcery.com>
-
-	* linux-low.c (maybe_move_out_of_jump_pad): Restore current_inferior
-	on return.
-
-2010-09-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* target.c (mywait) <TARGET_WAITKIND_EXITED>: Fix to use INTEGER.
-
-2010-09-06  Pedro Alves  <pedro@codesourcery.com>
-
-	* Makefile.in (install-only): Replace $IPA_DEPFILES with
-	"$(IPA_DEPFILES)".
-
-2010-09-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbserver/lynx-low.c, gdbserver/lynx-low.h,
-	gdbserver/lynx-ppc-low.c: New files.
-	* Makefile.in (lynx_low_h): New variable.
-	(lynx-low.o, lynx-ppc-low.o): New rules.
-	* configure.ac: On LynxOS, link with -lnetinet.
-	* configure.srv: Add handling of powerpc-*-lynxos* targets.
-	* configure: regenerate.
-
-2010-09-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in (vasprintf.o, vsnprintf.o): New rules.
-	* configure.ac: Add check for vasprintf and vsnprintf.
-	* configure, config.in: Regenerate.
-	* server.h (vasprintf, vsnprintf): Add conditional declarations.
-
-2010-09-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c: Move include of alloca.h up, next to include of
-	malloc.h.
-	* server.h: Add include of malloc.h.
-	* mem-break.c: Remove include of malloc.h.
-	* server.c, tracepoint.c, utils.c, win32-low.c: Likewise.
-
-2010-09-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in (memmem.o): Build with -Wno-error.
-
-2010-09-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* utils.c (xsnprintf): Make non-static.
-	* server.h: Add xsnprintf declaration.
-	* linux-low.c, nto-low.c, target.c, thread-db.c, tracepoint.c:
-	replace calls to snprintf by calls to xsnprintf throughout.
-
-2010-09-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: Add configure check for alloca.
-	* configure, config.in: Regenerate.
-	* server.h: Include alloca.h if it exists.
-	* gdbreplay.c: Include alloca.h if it exists.
-
-2010-08-28  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (__SIGRTMIN): Define if not already defined.
-	(linux_create_inferior): Check for __ANDROID__ rather than
-	__SIGRTMIN.
-	(enqueue_one_deferred_signal): Don't requeue non-RT signals that
-	are already deferred.
-	(linux_wait_1): Check for __ANDROID__ rather than __SIGRTMIN.
-	(linux_resume_one_thread): Don't queue a SIGSTOP if the lwp is
-	stopped and already has a pending signal to report.
-	(proceed_one_lwp): : Don't queue a SIGSTOP if the lwp already has
-	a pending signal to report or is moving out of a jump pad.
-	(linux_init_signals): Check for __ANDROID__ rather than
-	__SIGRTMIN.
-
-2010-08-28  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_stabilize_threads): Wrap debug output in a
-	debug_threads check.  Avoid a linear search when not doing debug
-	output.
-
-2010-08-27  Pedro Alves  <pedro@codesourcery.com>
-
-	* event-loop.c (event_handle_func): Adjust to use gdb_fildes_t.
-	(struct gdb_event) <fd>: Change type to gdb_fildes_t.
-	(struct file_handler) <fd>: Change type to gdb_fildes_t.
-	(process_event): Change local fd's type to gdb_fildes_t.
-	(create_file_handler): Adjust prototype.
-	(delete_file_handler): Adjust prototype.
-	(handle_file_event): Adjust prototype.  Use pfildes.
-	(create_file_event): Adjsut prototype.
-	* remote-utils.c (remote_desc, listen_desc): Change type to
-	gdb_fildes_t.
-	* server.h: New gdb_fildes_t typedef.
-	[USE_WIN32API]: Include winsock2.h.
-	(delete_file_handler, add_file_handler): Adjust prototypes.
-	(pfildes): Declare.
-	* utils.c (pfildes): New.
-
-2010-08-27  Pedro Alves  <pedro@codesourcery.com>
-
-	* configure.ac (build_warnings): Add -Wno-char-subscripts.
-	* configure: Regenerate.
-
-2010-08-27  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_unprepare_to_access_memory): Rename to ...
-	(linux_done_accessing_memory): ... this.
-	(linux_target_ops): Adjust.
-	* linux-x86-low.c (x86_insert_point, x86_remove_point): Adjust.
-	* nto-low.c (nto_target_ops): Adjust comment.
-	* server.c (gdb_read_memory, gdb_write_memory): Adjust.
-	* spu-low.c (spu_target_ops): Adjust comment.
-	* target.h (target_ops): Rename unprepare_to_access_memory field
-	to done_accessing_memory.
-	(unprepare_to_access_memory): Rename to ...
-	(done_accessing_memory): ... this.
-
-2010-08-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_prepare_to_access_memory): New.
-	(linux_unprepare_to_access_memory): New.
-	(linux_target_ops): Install them.
-	* server.c (read_memory): Rename to ...
-	(gdb_read_memory): ... this.  Use
-	prepare_to_access_memory/prepare_to_access_memory.
-	(write_memory): Rename to ...
-	(gdb_write_memory): ... this.  Use
-	prepare_to_access_memory/prepare_to_access_memory.
-	(handle_search_memory_1): Adjust.
-	(process_serial_event): Adjust.
-	* target.h (struct target_ops): New fields
-	prepare_to_access_memory and unprepare_to_access_memory.
-	(prepare_to_access_memory, unprepare_to_access_memory): New.
-	* linux-x86-low.c (x86_insert_point, x86_remove_point): Use
-	prepare_to_access_memory/prepare_to_access_memory.
-	* nto-low.c (nto_target_ops): Adjust.
-	* spu-low.c (spu_target_ops): Adjust.
-	* win32-low.c (win32_target_ops): Adjust.
-
-2010-08-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* Makefile.in (WARN_CFLAGS): Get it from configure.
-	(WERROR_CFLAGS): New.
-	(INTERNAL_CFLAGS): Add WERROR_CFLAGS.
-	* configure.ac: Introduce --enable-werror, which adds -Werror to
-	the compiler command line.  Enabled by default.  Disable with
-	--disable-werror.  Add -Wdeclaration-after-statement
-	Wpointer-arith and -Wformat-nonliteral to warning flags.
-	* configure: Regenerate.
-
-2010-08-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* mem-break.c [HAVE_MALLOC_H]: Include malloc.h.
-
-2010-08-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* gdbreplay.c (remote_error): New.
-	(gdbchar): New.
-	(expect): Use gdbchar.  Check for error reading from GDB.
-	Clarify sync error output.
-	(play): Check for errors writing to GDB.
-	* linux-low.c (sigchld_handler): Really ignore `write' errors.
-	* remote-utils.c (getpkt): Check for errors writing to the remote
-	descriptor.
-
-2010-08-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_wait_1): Move non-debugging code out of
-	`debug_threads' control.
-
-2010-08-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_wait_1): Don't set last_status here.
-	* server.c (push_event, queue_stop_reply_callback): Assert we're
-	not pushing a TARGET_WAITKIND_IGNORE event.
-	(start_inferior, start_inferior, attach_inferior, handle_v_cont)
-	(myresume, handle_target_event): Set the thread's last_resume_kind
-	and last_status from the target returned status.
-
-2010-08-25  Pedro Alves  <pedro@codesourcery.com>
-
-	PR threads/10729
-
-	* linux-x86-low.c (update_debug_registers_callback): New.
-	(i386_dr_low_set_addr): Use it.
-	(i386_dr_low_get_addr): New.
-	(i386_dr_low_set_control): Use update_debug_registers_callback.
-	(i386_dr_low_get_control): New.
-	(i386_dr_low_get_status): Adjust.
-	* linux-low.c (linux_stop_lwp): New.
-	* linux-low.h (linux_stop_lwp): Declare.
-
-	* i386-low.c (I386_DR_GET_RW_LEN): Take the dr7 contents as
-	argument instead of a i386_debug_reg_state.
-	(I386_DR_WATCH_HIT): Take the dr6 contents as argument instead of
-	a i386_debug_reg_state.
-	(i386_insert_aligned_watchpoint): Adjust.
-	(i386_remove_aligned_watchpoint): Adjust.
-	(i386_low_stopped_data_address): Read the debug registers from the
-	inferior instead of from the mirrors.
-	* i386-low.h (struct i386_debug_reg_state): Extend comment.
-	(i386_dr_low_get_addr): Declare.
-	(i386_dr_low_get_control): Declare.
-	(i386_dr_low_get_status): Change prototype.
-
-	* win32-i386-low.c (dr_status_mirror, dr_control_mirror): New globals.
-	(i386_dr_low_get_addr): New.
-	(i386_dr_low_get_control): New.
-	(i386_dr_low_get_status): Adjust prototype.  Return
-	dr_status_mirror.
-	(i386_initial_stuff): Clear dr_status_mirror and
-	dr_control_mirror.
-	(i386_get_thread_context): Adjust.
-	(i386_set_thread_context): Adjust.
-	(i386_thread_added): Adjust.
-
-2010-08-24  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.h (linux_thread_area): Delete declaration.
-
-2010-08-11  Thomas Schwinge  <thomas@codesourcery.com>
-
-	* linux-low.c (linux_wait_1): Correctly return the ptid of the child
-	after its termination.
-
-2010-08-09  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (gdb_wants_lwp_stopped): Delete.
-	(gdb_wants_all_stopped): Delete.
-	(linux_wait_1): Don't call them.
-	* server.c (handle_v_cont): Tag all threads as want-stopped.
-	(gdb_wants_thread_stopped): Fix comments.  Tag the thread that
-	stopped as "client-wants-stopped".
-
-2010-07-31  Pedro Alves  <pedro@codesourcery.com>
-
-	* Makefile.in (signals_h): New.
-	(server_h): Depend on it.
-	(server.o): Don't depend on $(signals_def).
-	(signals.o): Depend on $(signals_def).
-
-2010-07-31  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (signals_def): New.
-	(server_h): Append include/gdb/signals.h and signals_def.
-	(server.o): Append signals_def.
-
-2010-07-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* server.c (handle_target_event): Use target_signal_to_host for
-	resume_info.sig initialization.
-	* target.h (struct thread_resume) <sig>: New comment.
-
-2010-07-20  Ozkan Sezer  <sezeroz@gmail.com>
-
-	* server.c (handle_query): strcpy() the returned string from paddress()
-	instead of sprintf().
-	* utils.c (paddress): Return phex_nz().
-
-2010-07-07  Joel Brobecker  <brobecker@adacore.com>
-
-	* server.c (handle_v_cont): Call mourn_inferior if process
-	just exited.
-	(myresume): Likewise.
-
-2010-07-01  Pedro Alves  <pedro@codesourcery.com>
-
-	Static tracepoints, and integration with UST.
-
-	* configure.ac: Handle --with-ust.  substitute ustlibs and ustinc.
-	* mem-break.c (uninsert_all_breakpoints)
-	(reinsert_all_breakpoints): New.
-	* mem-break.h (reinsert_all_breakpoints, uninsert_all_breakpoints):
-	* tracepoint.c (ust_loaded, helper_thread_id, cmd_buf): New.
-	(gdb_agent_ust_loaded, helper_thread_id)
-	(gdb_agent_helper_thread_id): New macros.
-	(struct ipa_sym_addresses): Add addr_ust_loaded,
-	addr_helper_thread_id, addr_cmd_buf.
-	(symbol_list): Add ust_loaded, helper_thread_id, cmd_buf.
-	(in_process_agent_loaded_ust): New.
-	(write_e_ust_not_loaded): New.
-	(maybe_write_ipa_ust_not_loaded): New.
-	(struct collect_static_trace_data_action): New.
-	(enum tracepoint_type) <static_tracepoint>: New.
-	(struct tracepoint) <handle>: Mention static tracepoints.
-	(struct static_tracepoint_ctx): New.
-	(CMD_BUF_SIZE): New.
-	(add_tracepoint_action): Handle static tracepoint actions.
-	(unprobe_marker_at): New.
-	(clear_installed_tracepoints): Handle static tracepoints.
-	(cmd_qtdp): Handle static tracepoints.
-	(probe_marker_at): New.
-	(cmd_qtstart): Handle static tracepoints.
-	(response_tracepoint): Handle static tracepoints.
-	(cmd_qtfstm, cmd_qtsstm, cmd_qtstmat): New.
-	(handle_tracepoint_query): Handle qTfSTM, qTsSTM and qTSTMat.
-	(get_context_regcache): Handle static tracepoints.
-	(do_action_at_tracepoint): Handle static tracepoint actions.
-	(traceframe_find_block_type): Handle static trace data blocks.
-	(traceframe_read_sdata): New.
-	(download_tracepoints): Download static tracepoint actions.
-	[HAVE_UST] Include ust/ust.h, dlfcn.h, sys/socket.h, and sys/un.h.
-	(GDB_PROBE_NAME): New.
-	(ust_ops): New.
-	(GET_UST_SYM): New.
-	(USTF): New.
-	(dlsym_ust): New.
-	(ust_marker_to_static_tracepoint): New.
-	(gdb_probe): New.
-	(collect_ust_data_at_tracepoint): New.
-	(gdb_ust_probe): New.
-	(UNIX_PATH_MAX, SOCK_DIR): New.
-	(gdb_ust_connect_sync_socket): New.
-	(resume_thread, stop_thread): New.
-	(run_inferior_command): New.
-	(init_named_socket): New.
-	(gdb_ust_socket_init): New.
-	(cstr_to_hexstr): New.
-	(next_st): New.
-	(first_marker, next_marker): New.
-	(response_ust_marker): New.
-	(cmd_qtfstm, cmd_qtsstm): New.
-	(unprobe_marker_at, probe_marker_at): New.
-	(cmd_qtstmat, gdb_ust_thread): New.
-	(gdb_ust_init): New.
-	(initialize_tracepoint_ftlib): Call gdb_ust_init.
-	* linux-amd64-ipa.c [HAVE_UST]: Include ust/processor.h
-	(ST_REGENTRY): New.
-	(x86_64_st_collect_regmap): New.
-	(X86_64_NUM_ST_COLLECT_GREGS): New.
-	(AMD64_RIP_REGNUM): New.
-	(supply_static_tracepoint_registers): New.
-	* linux-i386-ipa.c [HAVE_UST]: Include ust/processor.h
-	(ST_REGENTRY): New.
-	(i386_st_collect_regmap): New.
-	(i386_NUM_ST_COLLECT_GREGS): New.
-	(supply_static_tracepoint_registers): New.
-	* server.c (handle_query): Handle qXfer:statictrace:read.
-	<qSupported>: Report support for StaticTracepoints, and
-	qXfer:statictrace:read features.
-	* server.h (traceframe_read_sdata)
-	(supply_static_tracepoint_registers): Declare.
-	* remote-utils.c (convert_int_to_ascii, hexchars, ishex, tohex)
-	(unpack_varlen_hex): Include in IPA build.
-	* Makefile.in (ustlibs, ustinc): New.
-	(IPA_OBJS): Add remote-utils-ipa.o.
-	($(IPA_LIB)): Link -ldl and -lpthread.
-	(UST_CFLAGS): New.
-	(IPAGENT_CFLAGS): Add UST_CFLAGS.
-	* config.in, configure: Regenerate.
-
-2010-06-20  Ian Lance Taylor  <iant@google.com>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-x86-low.c (always_true): Delete.
-	(EMIT_ASM, EMIT_ASM32): Use an uncondition asm jmp instead of
-	trying to fool the compiler with always_true.
-
-2010-06-20  Pedro Alves  <pedro@codesourcery.com>
-
-	* tracepoint.c (condition_true_at_tracepoint): Don't run compiled
-	conditions in gdbserver.
-
-2010-06-19  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* spu-low.c (spu_read_memory): Wrap around local store limit.
-	(spu_write_memory): Likewise.
-
-2010-06-15  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-x86-low.c (amd64_emit_const, amd64_emit_void_call_2)
-	(i386_emit_const, i386_emit_void_call_2): Replace int64_t uses with
-	LONGEST uses.
-	* server.h (struct emit_ops): Replace int64_t uses with LONGEST
-	uses.
-	* tracepoint.c (emit_const, emit_void_call_2): Replace int64_t
-	uses with LONGEST uses.
-
-2010-06-14  Stan Shebs  <stan@codesourcery.com>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	Bytecode compiler.
-
-	* linux-x86-low.c: Include limits.h.
-	(add_insns): New.
-	(always_true): New.
-	(EMIT_ASM): New.
-	(EMIT_ASM32): New.
-	(amd64_emit_prologue, amd64_emit_epilogue, amd64_emit_add)
-	(amd64_emit_sub, amd64_emit_mul, amd64_emit_lsh)
-	(amd64_emit_rsh_signed, amd64_emit_rsh_unsigned, amd64_emit_ext,
-	(amd64_emit_log_not, amd64_emit_bit_and, amd64_emit_bit_or)
-	(amd64_emit_bit_xor, amd64_emit_bit_not, amd64_emit_equal,
-	(amd64_emit_less_signed, amd64_emit_less_unsigned, amd64_emit_ref,
-	(amd64_emit_if_goto, amd64_emit_goto, amd64_write_goto_address)
-	(amd64_emit_const, amd64_emit_call, amd64_emit_reg)
-	(amd64_emit_pop, amd64_emit_stack_flush, amd64_emit_zero_ext)
-	(amd64_emit_swap, amd64_emit_stack_adjust, amd64_emit_int_call_1)
-	(amd64_emit_void_call_2): New.
-	(amd64_emit_ops): New.
-	(i386_emit_prologue, i386_emit_epilogue, i386_emit_add)
-	(i386_emit_sub,i386_emit_mul, i386_emit_lsh, i386_emit_rsh_signed)
-	(i386_emit_rsh_unsigned, i386_emit_ext, i386_emit_log_not)
-	(i386_emit_bit_and, i386_emit_bit_or, i386_emit_bit_xor)
-	(i386_emit_bit_not, i386_emit_equal, i386_emit_less_signed)
-	(i386_emit_less_unsigned, i386_emit_ref, i386_emit_if_goto)
-	(i386_emit_goto, i386_write_goto_address, i386_emit_const)
-	(i386_emit_call, i386_emit_reg, i386_emit_pop)
-	(i386_emit_stack_flush, i386_emit_zero_ext, i386_emit_swap)
-	(i386_emit_stack_adjust, i386_emit_int_call_1)
-	(i386_emit_void_call_2): New.
-	(i386_emit_ops): New.
-	(x86_emit_ops): New.
-	(the_low_target): Install x86_emit_ops.
-	* server.h (struct emit_ops): New.
-	(get_raw_reg_func_addr): Declare.
-	(current_insn_ptr, emit_error): Declare.
-	* tracepoint.c (get_raw_reg, get_trace_state_variable_value)
-	(set_trace_state_variable_value): New defines.
-	(struct ipa_sym_addresses): New fields addr_get_raw_reg,
-	addr_get_trace_state_variable_value and
-	addr_set_trace_state_variable_value.
-	(symbol_list): New fields for get_raw_reg,
-	get_trace_state_variable_value and set_trace_state_variable_value.
-	(condfn): New typedef.
-	(struct tracepoint): New field `compiled_cond'.
-	(do_action_at_tracepoint): Clear compiled_cond.
-	(get_trace_state_variable_value, set_trace_state_variable_value):
-	Export in the IPA.
-	(condition_true_at_tracepoint): If there's a compiled condition,
-	run that.
-	(current_insn_ptr, emit_error): New globals.
-	(struct bytecode_address): New.
-	(get_raw_reg_func_addr): New.
-	(emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul)
-	(emit_lsh, emit_rsh_signed, emit_rsh_unsigned, emit_ext)
-	(emit_log_not, emit_bit_and, emit_bit_or, emit_bit_xor)
-	(emit_bit_not, emit_equal, emit_less_signed, emit_less_unsigned)
-	(emit_ref, emit_if_goto, emit_goto, write_goto_address, emit_const)
-	(emit_reg, emit_pop, emit_stack_flush, emit_zero_ext, emit_swap)
-	(emit_stack_adjust, emit_int_call_1, emit_void_call_2): New.
-	(compile_tracepoint_condition, compile_bytecodes): New.
-	* target.h (emit_ops): Forward declare.
-	(struct target_ops): New field emit_ops.
-	(target_emit_ops): New.
-	* linux-amd64-ipa.c (gdb_agent_get_raw_reg): New.
-	* linux-i386-ipa.c (gdb_agent_get_raw_reg): New.
-	* linux-low.c (linux_emit_ops): New.
-	(linux_target_ops): Install it.
-	* linux-low.h (struct linux_target_ops): New field emit_ops.
-
-2010-06-14  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-ppc-low.c (ppc_arch_setup): Use private regcache to test MSR.
-	* linux-s390-low.c (ppc_arch_setup): Use private regcache to test PSW.
-
-2010-06-01  Pedro Alves  <pedro@codesourcery.com>
-	    Stan Shebs  <stan@codesourcery.com>
-
-	* Makefile.in (IPA_DEPFILES, extra_libraries): New.
-	(all): Depend on $(extra_libraries).
-	(install-only): Install the IPA.
-	(IPA_OBJS, IPA_LIB): New.
-	(clean): Remove the IPA lib.
-	(IPAGENT_CFLAGS): New.
-	(tracepoint-ipa.o, utils-ipa.o, remote-utils-ipa.o)
-	(regcache-ipa.o, i386-linux-ipa.o, linux-i386-ipa.o)
-	(linux-amd64-ipa.o, amd64-linux-ipa.o): New rules.
-	* linux-amd64-ipa.c, linux-i386-ipa.c: New files.
-	* configure.ac: Check for atomic builtins support in the compiler.
-	(IPA_DEPFILES, extra_libraries): Define.
-	* configure.srv (ipa_obj): Add description.
-	(ipa_i386_linux_regobj, ipa_amd64_linux_regobj): Define.
-	(i[34567]86-*-linux*): Set ipa_obj.
-	(x86_64-*-linux*): Set ipa_obj.
-	* linux-low.c (stabilizing_threads): New.
-	(supports_fast_tracepoints): New.
-	(linux_detach): Stabilize threads before detaching.
-	(handle_tracepoints): Handle internal tracing breakpoints.  Assert
-	the lwp is either not stabilizing, or is moving out of a jump pad.
-	(linux_fast_tracepoint_collecting): New.
-	(maybe_move_out_of_jump_pad): New.
-	(enqueue_one_deferred_signal): New.
-	(dequeue_one_deferred_signal): New.
-	(linux_wait_for_event_1): If moving out of a jump pad, defer
-	pending signals to later.
-	(linux_stabilize_threads): New.
-	(linux_wait_1): Check if threads need moving out of jump pads, and
-	do it if so.
-	(stuck_in_jump_pad_callback): New.
-	(move_out_of_jump_pad_callback): New.
-	(lwp_running): New.
-	(linux_resume_one_lwp): Handle moving out of jump pads.
-	(linux_set_resume_request): Dequeue deferred signals.
-	(need_step_over_p): Also step over fast tracepoint jumps.
-	(start_step_over): Also uninsert fast tracepoint jumps.
-	(finish_step_over): Also reinsert fast tracepoint jumps.
-	(linux_install_fast_tracepoint_jump): New.
-	(linux_target_ops): Install linux_stabilize_threads and
-	linux_install_fast_tracepoint_jump_pad.
-	* linux-low.h (linux_target_ops) <get_thread_area,
-	install_fast_tracepoint_jump_pad>: New fields.
-	(struct lwp_info) <collecting_fast_tracepoint,
-	pending_signals_to_report, exit_jump_pad_bkpt>: New fields.
-	(linux_get_thread_area): Declare.
-	* linux-x86-low.c (jump_insn): New.
-	(x86_get_thread_area): New.
-	(append_insns): New.
-	(push_opcode): New.
-	(amd64_install_fast_tracepoint_jump_pad): New.
-	(i386_install_fast_tracepoint_jump_pad): New.
-	(x86_install_fast_tracepoint_jump_pad): New.
-	(the_low_target): Install x86_get_thread_area and
-	x86_install_fast_tracepoint_jump_pad.
-	* mem-break.c (set_raw_breakpoint_at): Use read_inferior_memory.
-	(struct fast_tracepoint_jump): New.
-	(fast_tracepoint_jump_insn): New.
-	(fast_tracepoint_jump_shadow): New.
-	(find_fast_tracepoint_jump_at): New.
-	(fast_tracepoint_jump_here): New.
-	(delete_fast_tracepoint_jump): New.
-	(set_fast_tracepoint_jump): New.
-	(uninsert_fast_tracepoint_jumps_at): New.
-	(reinsert_fast_tracepoint_jumps_at): New.
-	(set_breakpoint_at): Use write_inferior_memory.
-	(uninsert_raw_breakpoint): Use write_inferior_memory.
-	(check_mem_read): Mask out fast tracepoint jumps.
-	(check_mem_write): Mask out fast tracepoint jumps.
-	* mem-break.h (struct fast_tracepoint_jump): Forward declare.
-	(set_fast_tracepoint_jump): Declare.
-	(delete_fast_tracepoint_jump)
-	(fast_tracepoint_jump_here, uninsert_fast_tracepoint_jumps_at)
-	(reinsert_fast_tracepoint_jumps_at): Declare.
-	* regcache.c: Don't compile many functions when building the
-	in-process agent library.
-	(init_register_cache) [IN_PROCESS_AGENT]: Don't allow allocating
-	the register buffer in the heap.
-	(free_register_cache): If the register buffer isn't owned by the
-	regcache, don't free it.
-	(set_register_cache) [IN_PROCESS_AGENT]: Don't re-alocate
-	pre-existing register caches.
-	* remote-utils.c (convert_int_to_ascii): Constify `from' parameter
-	type.
-	(convert_ascii_to_int): : Constify `from' parameter type.
-	(decode_M_packet, decode_X_packet): Replace the `to' parameter by
-	a `to_p' pointer to pointer parameter.  If TO_P is NULL, malloc
-	the needed buffer in-place.
-	(relocate_instruction): New.
-	* server.c (handle_query) <qSymbols>: If the target supports
-	tracepoints, give it a chance of looking up symbols.  Report
-	support for fast tracepoints.
-	(handle_status): Stabilize threads.
-	(process_serial_event): Adjust.
-	* server.h (struct fast_tracepoint_jump): Forward declare.
-	(struct process_info) <fast_tracepoint_jumps>: New field.
-	(convert_ascii_to_int, convert_int_to_ascii): Adjust.
-	(decode_X_packet, decode_M_packet): Adjust.
-	(relocate_instruction): Declare.
-	(in_process_agent_loaded): Declare.
-	(tracepoint_look_up_symbols): Declare.
-	(struct fast_tpoint_collect_status): Declare.
-	(fast_tracepoint_collecting): Declare.
-	(force_unlock_trace_buffer): Declare.
-	(handle_tracepoint_bkpts): Declare.
-	(initialize_low_tracepoint)
-	(supply_fast_tracepoint_registers) [IN_PROCESS_AGENT]: Declare.
-	* target.h (struct target_ops) <stabilize_threads,
-	install_fast_tracepoint_jump_pad>: New fields.
-	(stabilize_threads, install_fast_tracepoint_jump_pad): New.
-	* tracepoint.c [HAVE_MALLOC_H]: Include malloc.h.
-	[HAVE_STDINT_H]: Include stdint.h.
-	(trace_debug_1): Rename to ...
-	(trace_vdebug): ... this.
-	(trace_debug): Rename to ...
-	(trace_debug_1): ... this.  Add `level' parameter.
-	(trace_debug): New.
-	(ATTR_USED, ATTR_NOINLINE): New.
-	(IP_AGENT_EXPORT): New.
-	(gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end)
-	(collecting, gdb_collect, stop_tracing, flush_trace_buffer)
-	(about_to_request_buffer_space, trace_buffer_is_full)
-	(stopping_tracepoint, expr_eval_result, error_tracepoint)
-	(tracepoints, tracing, trace_buffer_ctrl, trace_buffer_ctrl_curr)
-	(trace_buffer_lo, trace_buffer_hi, traceframe_read_count)
-	(traceframe_write_count, traceframes_created)
-	(trace_state_variables)
-	New renaming defines.
-	(struct ipa_sym_addresses): New.
-	(STRINGIZE_1, STRINGIZE, IPA_SYM): New.
-	(symbol_list): New.
-	(ipa_sym_addrs): New.
-	(all_tracepoint_symbols_looked_up): New.
-	(in_process_agent_loaded): New.
-	(write_e_ipa_not_loaded): New.
-	(maybe_write_ipa_not_loaded): New.
-	(tracepoint_look_up_symbols): New.
-	(debug_threads) [IN_PROCESS_AGENT]: New.
-	(read_inferior_memory) [IN_PROCESS_AGENT]: New.
-	(UNKNOWN_SIDE_EFFECTS): New.
-	(stop_tracing): New.
-	(flush_trace_buffer): New.
-	(stop_tracing_bkpt): New.
-	(flush_trace_buffer_bkpt): New.
-	(read_inferior_integer): New.
-	(read_inferior_uinteger): New.
-	(read_inferior_data_pointer): New.
-	(write_inferior_data_pointer): New.
-	(write_inferior_integer): New.
-	(write_inferior_uinteger): New.
-	(struct collect_static_trace_data_action): Delete.
-	(enum tracepoint_type): New.
-	(struct tracepoint) <type>: New field `type'.
-	<actions_str, step_actions, step_actions_str>: Only include in
-	GDBserver.
-	<orig_size, obj_addr_on_target, adjusted_insn_addr>
-	<adjusted_insn_addr_end, jump_pad, jump_pad_end>: New fields.
-	(tracepoints): Use IP_AGENT_EXPORT.
-	(last_tracepoint): Don't include in the IPA.
-	(stopping_tracepoint): Use IP_AGENT_EXPORT.
-	(trace_buffer_is_full): Use IP_AGENT_EXPORT.
-	(alloced_trace_state_variables): New.
-	(trace_state_variables): Use IP_AGENT_EXPORT.
-	(traceframe_t): Delete unused variable.
-	(circular_trace_buffer): Don't include in the IPA.
-	(trace_buffer_start): Delete.
-	(struct trace_buffer_control): New.
-	(trace_buffer_free): Delete.
-	(struct ipa_trace_buffer_control): New.
-	(GDBSERVER_FLUSH_COUNT_MASK, GDBSERVER_FLUSH_COUNT_MASK_PREV)
-	(GDBSERVER_FLUSH_COUNT_MASK_CURR, GDBSERVER_UPDATED_FLUSH_COUNT_BIT):
-	New.
-	(trace_buffer_ctrl): New.
-	(TRACE_BUFFER_CTRL_CURR): New.
-	(trace_buffer_start, trace_buffer_free, trace_buffer_end_free):
-	Reimplement as macros.
-	(trace_buffer_wrap): Delete.
-	(traceframe_write_count, traceframe_read_count)
-	(traceframes_created, tracing): Use IP_AGENT_EXPORT.
-	(struct tracepoint_hit_ctx) <type>: New field.
-	(struct fast_tracepoint_ctx): New.
-	(memory_barrier): New.
-	(cmpxchg): New.
-	(record_tracepoint_error): Update atomically in the IPA.
-	(clear_inferior_trace_buffer): New.
-	(about_to_request_buffer_space): New.
-	(trace_buffer_alloc): Handle GDBserver and inferior simulatenous
-	updating the same buffer.
-	(add_tracepoint): Default the tracepoint's type to trap
-	tracepoint, and orig_size to -1.
-	(get_trace_state_variable) [IN_PROCESS_AGENT]: Handle allocated
-	internal variables.
-	(create_trace_state_variable): New parameter `gdb'.  Handle it.
-	(clear_installed_tracepoints): Clear fast tracepoint jumps.
-	(cmd_qtdp): Handle fast tracepoints.
-	(cmd_qtdv): Adjust.
-	(max_jump_pad_size): New.
-	(gdb_jump_pad_head): New.
-	(get_jump_space_head): New.
-	(claim_jump_space): New.
-	(sort_tracepoints): New.
-	(MAX_JUMP_SIZE): New.
-	(cmd_qtstart): Handle fast tracepoints.  Sync tracepoints with the
-	IPA.
-	(stop_tracing) [IN_PROCESS_AGENT]: Don't include the tdisconnected
-	support.  Upload fast traceframes, and delete internal IPA
-	breakpoints.
-	(stop_tracing_handler): New.
-	(flush_trace_buffer_handler): New.
-	(cmd_qtstop): Upload fast tracepoints.
-	(response_tracepoint): Handle fast tracepoints.
-	(tracepoint_finished_step): Upload fast traceframes.  Set the
-	tracepoint hit context's tracepoint type.
-	(handle_tracepoint_bkpts): New.
-	(tracepoint_was_hit): Set the tracepoint hit context's tracepoint
-	type.  Add comment about fast tracepoints.
-	(collect_data_at_tracepoint) [IN_PROCESS_AGENT]: Don't access the
-	non-existing action_str field.
-	(get_context_regcache): Handle fast tracepoints.
-	(do_action_at_tracepoint) [!IN_PROCESS_AGENT]: Don't write the PC
-	to the regcache.
-	(fast_tracepoint_from_jump_pad_address): New.
-	(fast_tracepoint_from_ipa_tpoint_address): New.
-	(collecting_t): New.
-	(force_unlock_trace_buffer): New.
-	(fast_tracepoint_collecting): New.
-	(collecting): New.
-	(gdb_collect): New.
-	(write_inferior_data_ptr): New.
-	(target_tp_heap): New.
-	(target_malloc): New.
-	(download_agent_expr): New.
-	(UALIGN): New.
-	(download_tracepoints): New.
-	(download_trace_state_variables): New.
-	(upload_fast_traceframes): New.
-	(IPA_FIRST_TRACEFRAME): New.
-	(IPA_NEXT_TRACEFRAME_1): New.
-	(IPA_NEXT_TRACEFRAME): New.
-	[IN_PROCESS_AGENT]: Include sys/mman.h and fcntl.h.
-	[IN_PROCESS_AGENT] (gdb_tp_heap_buffer, gdb_jump_pad_buffer)
-	(gdb_jump_pad_buffer_end): New.
-	[IN_PROCESS_AGENT] (initialize_tracepoint_ftlib): New.
-	(initialize_tracepoint): Adjust.
-	[IN_PROCESS_AGENT]: Allocate the IPA heap, and jump pad scratch
-	buffer.  Initialize the low module.
-	* utils.c (PREFIX, TOOLNAME): New.
-	(malloc_failure): Use PREFIX.
-	(error): In the IPA, an error causes an exit.
-	(fatal, warning): Use PREFIX.
-	(internal_error): Use TOOLNAME.
-	(NUMCELLS): Increase to 10.
-	* configure, config.in: Regenerate.
-
-2010-06-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_query) <qSupported>: Do two passes over the
-	qSupported string to avoid nesting strtok.
-
-2010-05-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* Makefile.in (SFILES): Add $(srcdir)/proc-service.list.
-	(CDEPS): New.
-	* configure.ac (RDYNAMIC): New AC_MSG_CHECKING wrapping.  Test also
-	-Wl,--dynamic-list.
-	* configure: Regenerate.
-	* proc-service.list: New.
-
-2010-05-28  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-low.c (linux_core_of_thread): Fix crash on invalid CONTENT.
-	New comment.
-
-2010-05-26  Ozkan Sezer  <sezeroz@gmail.com>
-
-	* gdbreplay.c (remote_open): Check error return from socket() call by
-	its equality to -1 not by it being negative.
-	* remote-utils.c (remote_open): Likewise.
-
-2010-05-23  Pedro Alves  <pedro@codesourcery.com>
-
-	* config.h: Regenerate.
-
-2010-05-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
-
-	* linux-m68k-low.c (ps_get_thread_area): Don't define if kernel
-	doesn't provide PTRACE_GET_THREAD_AREA.
-
-2010-05-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
-
-	* linux-m68k-low.c: Include <asm/ptrace.h>
-	(ps_get_thread_area): Implement.
-
-2010-05-03  Doug Evans  <dje@google.com>
-
-	* event-loop.c (struct callback_event): New struct.
-	(callback_list): New global.
-	(append_callback_event, delete_callback_event): New functions.
-	(process_callback): New function.
-	(start_event_loop): Call it.
-	* remote-utils.c (NOT_SCHEDULED): Define.
-	(readchar_buf, readchar_bufcnt, readchar_bufp): New static globals,
-	moved out of readchar.
-	(readchar): Rewrite.  Call reschedule before returning.
-	(reset_readchar): New function.
-	(remote_close): Call it.
-	(process_remaining, reschedule): New functions.
-	* server.h (callback_handler_func): New typedef.
-	(append_callback_event, delete_callback_event): Declare.
-
-2010-05-03  Pedro Alves  <pedro@codesourcery.com>
-
-	* proc-service.c (ps_pglobal_lookup): Use
-	thread_db_look_up_one_symbol.
-	* remote-utils.c (look_up_one_symbol): Add new `may_ask_gdb'
-	parameter.  Use it instead of all_symbols_looked_up.
-	* server.h (struct process_info) <all_symbols_looked_up>: Delete
-	field.
-	(all_symbols_looked_up): Don't declare.
-	(look_up_one_symbol): Add new `may_ask_gdb' parameter.
-	* thread-db.c (struct thread_db) <all_symbols_looked_up>: New
-	field.
-	(thread_db_look_up_symbols): Adjust call to look_up_one_symbol.
-	Set all_symbols_looked_up here.
-	(thread_db_look_up_one_symbol): New.
-	(thread_db_get_tls_address): Adjust.
-	(thread_db_load_search, try_thread_db_load_1): Always allocate the
-	thread_db object on the heap, and tentatively set it in the
-	process structure.
-	(thread_db_init): Don't set all_symbols_looked_up here.
-	* linux-low.h (thread_db_look_up_one_symbol): Declare.
-
-2010-05-03  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_kill, linux_detach): Adjust.
-	(status_pending_p_callback): Remove redundant statement.  Check
-	for !TARGET_WAITIKIND_IGNORE, instead of
-	TARGET_WAITKIND_STOPPED.
-	(handle_tracepoints): Make sure LWP is locked.  Adjust.
-	(linux_wait_for_event_1): Adjust.
-	(linux_cancel_breakpoints): New.
-	(unsuspend_one_lwp): New.
-	(unsuspend_all_lwps): New.
-	(linux_wait_1): If finishing a step-over, unsuspend all lwps.
-	(send_sigstop_callback): Change return type to int, add new
-	`except' parameter and handle it.
-	(suspend_and_send_sigstop_callback): New.
-	(stop_all_lwps): Add new `suspend' and `expect' parameters, and
-	pass them down.  If SUSPEND, also increment the lwp's suspend
-	count.
-	(linux_resume_one_lwp): Add notice about resuming a suspended LWP.
-	(need_step_over_p): Don't consider suspended LWPs.
-	(start_step_over): Adjust.
-	(proceed_one_lwp): Change return type to int, add new `except'
-	parameter and handle it.
-	(unsuspend_and_proceed_one_lwp): New.
-	(proceed_all_lwps): Use find_inferior instead of
-	for_each_inferior.
-	(unstop_all_lwps): Add `unsuspend' parameter.  If UNSUSPEND, them
-	also decrement the suspend count of LWPs.  Pass `except' down,
-	instead of hacking its suspend count.
-	(linux_pause_all): Add `freeze' parameter.  Adjust.
-	(linux_unpause_all): New.
-	(linux_target_ops): Install linux_unpause_all.
-	* server.c (handle_status): Adjust.
-	* target.h (struct target_ops): New fields `unpause_all' and
-	`cancel_breakpoints'.  Add new parameter to `pause_all'.
-	(pause_all): Add new `freeze' parameter.
-	(unpause_all): New.
-	(cancel_breakpoints): New.
-	* tracepoint.c (clear_installed_tracepoints): Pause threads, and
-	cancel breakpoints.
-	(cmd_qtstart): Pause threads.
-	(stop_tracing): Pause threads, and cancel breakpoints.
-	* win32-low.c (win32_target_ops): Adjust.
-
-2010-05-03  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_wait_for_event_1): Move passing the signal to
-	the inferior right away from here...
-	(linux_wait_1): ... to here, and adjust to check the thread's
-	last_resume_kind instead of the lwp's step or stop_expected flags.
-
-2010-05-02  Pedro Alves  <pedro@codesourcery.com>
-
-	* README: Use consistent `GDB' and `GDBserver' spellings.
-
-2010-05-02  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_kill_one_lwp): Assume the lwp is stopped.
-	(linux_kill): Stop all lwps here.  Don't delete the main lwp here.
-	(linux_detach_one_lwp): Assume the lwp is stopped.
-	(any_thread_of): Delete.
-	(linux_detach): Stop all lwps here.  Don't blindly delete all
-	breakpoints.
-	(delete_lwp_callback): New.
-	(linux_mourn): Delete all lwps of the process that is gone.
-	(linux_wait_1): Don't delete the last lwp of the process here.
-	* mem-break.h (mark_breakpoints_out): Declare.
-	* mem-break.c (mark_breakpoints_out): New.
-	(free_all_breakpoints): Use it.
-	* server.c (handle_target_event): If the process is gone, mark
-	breakpoints out.
-	* thread-db.c (struct thread_db) <create_bp>: New field.
-	(thread_db_enable_reporting): Fix prototype.  Store a thread event
-	breakpoint reference in the thread_db struct.
-	(thread_db_load_search): Clear the thread_db object.
-	(try_thread_db_load_1): Ditto.
-	(switch_to_process): New.
-	(disable_thread_event_reporting): Use it.
-	(remove_thread_event_breakpoints): New.
-	(thread_db_detach, thread_db_mourn): Use it.
-
-2010-05-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_enable_event_reporting): New.
-	(linux_wait_for_event_1, handle_extended_wait): Use it.
-
-2010-04-30  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_kill_one_lwp, linux_kill)
-	(linux_detach_one_lwp): Adjust to send_sigstop interface change.
-	(send_sigstop): Take an lwp_info as parameter instead.  Queue a
-	SIGSTOP even if the LWP is stopped.
-	(send_sigstop_callback): New.
-	(stop_all_lwps): Use send_sigstop_callback instead.
-	(linux_resume_one_thread): Adjust.
-	(proceed_one_lwp): Still proceed an LWP that the client has
-	requested to stop, if we haven't reported it as stopped yet.  Make
-	sure that LWPs the client want stopped, have a pending SIGSTOP.
-
-2010-04-26  Doug Evans  <dje@google.com>
-
-	* server.c (handle_general_set): Make static.
-
-	* remote-utils.c (putpkt_binary_1): Call readchar instead of read.
-	Print received char after testing for error/eof instead of before.
-	(input_interrupt): Tweak comment.
-
-2010-04-23  Doug Evans  <dje@google.com>
-
-	* server.c (start_inferior): Print inferior argv if --debug.
-
-2010-04-21  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	* Makefile.in (nto_low_h nto-low.o nto-x86-low.o): New dependency lists.
-	* nto-x86-low.c: Include server.h
-
-2010-04-20  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* win32-i386-low.c: Use __x86_64__ macro instead of __x86_64 to
-	be consistent with other sources of this directory.
-	(init_registers_amd64): Correct name of source file of this function
-	in the comment.
-
-2010-04-19  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* configure.srv (x86_64-*-mingw*): New configuration for Windows
-	64-bit executables.
-
-2010-04-19  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* win32-i386-low.c: Add 64-bit support.
-	(CONTEXT_EXTENDED_REGISTERS): Set macro to zero if not exisiting.
-	(init_registers_amd64): Declare.
-	(mappings): Add 64-bit version of array.
-	(init_windows_x86): New function.
-	(the_low_target): Change init_arch field to init_windows_x86.
-
-2010-04-19  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* win32-low.c: Adapt to support also 64-bit architecture.
-	(child_xfer_memory): Use uintptr_t type for local variable `addr'.
-	(get_image_name): Use SIZE_T type for local variable `done'.
-	(psapi_get_dll_name): Use LPVOID type for parameter `BaseAddress'.
-	(toolhelp_get_dll_name): Idem.
-	(handle_load_dll): Use CORE_ADDR type for local variable `load_addr'.
-	Use uintptr_t typecast to avoid warning.
-	(handle_unload_dll): Use uintptr_t typecast to avoid warning.
-	(handle_exception): Use phex_nz to avoid warning.
-	(win32_wait): Remove unused local variable `process'.
-
-2010-04-19  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* configure.srv (srv_amd64_regobj): Replace `x86-64-avx.o' by
-	`amd64-avx.o'.
-
-2010-04-17  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* configure.ac: Use `ws2_32' library for srv_mingw.
-	* configure: Regenerate.
-	* gdbreplay.c: Include winsock2.h instead of winsock.h.
-	* remote-utils.c: Likewise.
-
-2010-04-17  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* linux-x86-low.c (xmltarget_amd64_linux_no_xml): Define only
-	if __x86_64__ is defined.
-
-2010-04-16  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* configure: Regenerate.
-
-2010-04-16  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* server.c (handle_query): Handle 'qGetTIBAddr' query.
-	* target.h (target_ops): New get_tib_address field.
-	* win32-low.h (win32_thread_info): Add thread_local_base field.
-	* win32-low.c (child_add_thread): Add tlb argument.
-	Set thread_local_base field to TLB.
-	(get_child_debug_event): Adapt to child_add_thread change.
-	(win32_get_tib_address): New function.
-	(win32_target_ops): Set get_tib_address field to
-	win32_get_tib_address.
-	* linux-low.c (linux_target_ops): Set get_tib_address field to NULL.
-
-2010-04-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_mourn): Also remove the process.
-	* server.c (handle_target_event): Don't remove the process here.
-	* nto-low.c (nto_mourn): New.
-	(nto_target_ops): Install it.
-	* spu-low.c (spu_mourn): New.
-	(spu_target_ops): Install it.
-	* win32-low.c (win32_mourn): New.
-	(win32_target_ops): Install it.
-
-2010-04-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.h (buffer_xml_printf): Remove redundant `;'.
-
-2010-04-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* regcache.c (set_register_cache): Invalidate regcaches before
-	changing the register cache layout.
-	(regcache_invalidate_one): Allow a NULL regcache.
-	* linux-x86-low.c (x86_linux_update_xmltarget): Invalidate
-	regcaches before changing the register cache layout or the target
-	regsets.
-
-2010-04-12  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* linux-x86-low.c (x86_linux_update_xmltarget): Avoid unused
-	variable warning on Linux/x86-64.
-
-2010-04-11  Pedro Alves  <pedro@codesourcery.com>
-
-	GDBserver disconnected tracing support.
-
-	* linux-low.c (linux_remove_process): Delete.
-	(add_lwp): Don't set last_resume_kind here.
-	(linux_kill): Use `mourn'.
-	(linux_detach): Use `thread_db_detach', and `mourn'.
-	(linux_mourn): New.
-	(linux_attach_lwp_1): Adjust comment.
-	(linux_attach): last_resume_kind moved the thread_info; adjust.
-	(status_pending_p_callback): Adjust.
-	(linux_wait_for_event_1): Adjust.
-	(count_events_callback, select_singlestep_lwp_callback)
-	(select_event_lwp_callback, cancel_breakpoints_callback)
-	(db_wants_lwp_stopped, linux_wait_1, need_step_over_p)
-	(proceed_one_lwp): Adjust.
-	(linux_async): Add debug output.
-	(linux_thread_stopped): New.
-	(linux_pause_all): New.
-	(linux_target_ops): Install linux_mourn, linux_thread_stopped and
-	linux_pause_all.
-	* linux-low.h (struct lwp_info): Delete last_resume_kind field.
-	(thread_db_free): Delete declaration.
-	(thread_db_detach, thread_db_mourn): Declare.
-	* thread-db.c (thread_db_init): Use thread_db_mourn.
-	(thread_db_free): Delete, split in two.
-	(disable_thread_event_reporting): New.
-	(thread_db_detach): New.
-	(thread_db_mourn): New.
-
-	* server.h (struct thread_info) <last_resume_kind>: New field.
-	<attached>: Add comment.
-	<gdb_detached>: New field.
-	(handler_func): Change return type to int.
-	(handle_serial_event, handle_target_event): Ditto.
-	(gdb_connected): Declare.
-	(tracing): Delete.
-	(disconnected_tracing): Declare.
-	(stop_tracing): Declare.
-
-	* server.c (handle_query) <qSupported>: Report support for
-	disconnected tracing.
-	(queue_stop_reply_callback): Account for running threads.
-	(gdb_wants_thread_stopped): New.
-	(gdb_wants_all_threads_stopped): New.
-	(gdb_reattached_process): New.
-	(handle_status): Clear the `gdb_detached' flag of all processes.
-	In all-stop, stop all threads.
-	(main): Be sure to leave tfind mode.  Handle disconnected tracing.
-	(process_serial_event): If the remote connection breaks, or if an
-	exit was forced with "monitor exit", force an event loop exit.
-	Handle disconnected tracing on detach.
-	(handle_serial_event): Adjust.
-	(handle_target_event): If GDB isn't connected, forward events back
-	to the inferior, unless the last process exited, in which case,
-	exit gdbserver.  Adjust interface.
-
-	* remote-utils.c (remote_open): Don't block in accept.  Instead
-	register an event loop source on the listen socket file
-	descriptor.  Refactor bits into ...
-	(listen_desc): ... this new global.
-	(gdb_connected): ... this new function.
-	(enable_async_notification): ... this new function.
-	(handle_accept_event): ... this new function.
-	(remote_close): Clear remote_desc.
-
-	* inferiors.c (add_thread): Set the new thread's last_resume_kind.
-
-	* target.h (struct target_ops) <mourn, thread_stopped, pause_all>:
-	New fields.
-	(mourn_inferior): Define.
-	(target_process_qsupported): Avoid the dangling else problem.
-	(thread_stopped): Define.
-	(pause_all): Define.
-	(target_waitstatus_to_string): Declare.
-	* target.c (target_waitstatus_to_string): New.
-
-	* tracepoint.c (tracing): Make extern.
-	(disconnected_tracing): New.
-	(stop_tracing): Make extern.  Handle tracing stops due to GDB
-	disconnecting.
-	(cmd_qtdisconnected): New.
-	(cmd_qtstatus): Report disconnected tracing status in trace reply.
-	(handle_tracepoint_general_set): Handle QTDisconnected.
-
-	* event-loop.c (event_handler_func): Change return type to int.
-	(process_event): Bail out if the event handler wants the event
-	loop to stop.
-	(handle_file_event): Ditto.
-	(start_event_loop): Bail out if the event handler wants the event
-	loop to stop.
-
-	* nto-low.c (nto_target_ops): Adjust.
-	* spu-low.c (spu_wait): Don't remove the process here.
-	(spu_target_ops): Adjust.
-	* win32-low.c (win32_wait): Don't remove the process here.
-	(win32_target_ops): Adjust.
-
-2010-04-11  Pedro Alves  <pedro@codesourcery.com>
-
-	* regcache.c (realloc_register_cache): Invalidate inferior's
-	regcache before recreating it.
-
-2010-04-09  Pedro Alves  <pedro@codesourcery.com>
-
-	* tracepoint.c (cmd_qtstatus): Report trace buffer circularity.
-
-2010-04-09  Stan Shebs  <stan@codesourcery.com>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	* server.h (LONGEST): New.
-	(struct thread_info) <while_stepping>: New field.
-	(unpack_varlen_hex, xrealloc, pulongest, plongest, phex_nz):
-	Declare.
-	(initialize_tracepoint, handle_tracepoint_general_set)
-	(handle_tracepoint_query, tracepoint_finished_step)
-	(tracepoint_was_hit, release_while_stepping_state_list):
-	(current_traceframe): Declare.
-	* server.c (handle_general_set): Handle tracepoint packets.
-	(read_memory): New.
-	(write_memory): New.
-	(handle_search_memory_1): Use read_memory.
-	(handle_query): Report support for conditional tracepoints, trace
-	state variables, and tracepoint sources.  Handle tracepoint
-	queries.
-	(main): Initialize the tracepoints module.
-	(process_serial_event): Handle traceframe reads/writes.
-
-	* linux-low.c (handle_tracepoints): New.
-	(linux_wait_1): Call it.
-	(linux_resume_one_lwp): Handle while-stepping.
-	(linux_supports_tracepoints, linux_read_pc, linux_write_pc): New.
-	(linux_target_ops): Install them.
-	* linux-low.h (struct linux_target_ops) <supports_tracepoints>:
-	New field.
-	* linux-x86-low.c (x86_supports_tracepoints): New.
-	(the_low_target). Install it.
-
-	* mem-break.h (delete_breakpoint): Declare.
-	* mem-break.c (delete_breakpoint): Make external.
-
-	* target.h (struct target_ops): Add `supports_tracepoints',
-	`read_pc', and `write_pc' fields.
-	(target_supports_tracepoints): Define.
-	* utils.c (xrealloc, decimal2str, pulongest, plongest, thirty_two)
-	(phex_nz): New.
-
-	* regcache.h (struct regcache) <registers_owned>: New field.
-	(init_register_cache, regcache_cpy): Declare.
-	(regcache_read_pc, regcache_write_pc): Declare.
-	(register_cache_size): Declare.
-	(supply_regblock): Declare.
-	* regcache.c (init_register_cache): New.
-	(new_register_cache): Use it.
-	(regcache_cpy): New.
-	(register_cache_size): New.
-	(supply_regblock): New.
-	(regcache_read_pc, regcache_write_pc): New.
-
-	* tracepoint.c: New.
-
-	* Makefile.in (OBS): Add tracepoint.o.
-	(tracepoint.o): New rule.
-
-2010-04-08  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* Makefile.in (clean): Also remove i386-mmx.c i386-mmx-linux.c.
-	(i386-mmx.o): New.
-	(i386-mmx.c): Likewise.
-	(i386-mmx-linux.o): Likewise.
-	(i386-mmx-linux.c): Likewise.
-
-	* configure.srv (srv_i386_regobj): Add i386-mmx.o.
-	(srv_i386_linux_regobj): Add i386-mmx-linux.o.
-	(srv_i386_xmlfiles): Add i386/i386-mmx.xml.
-	(srv_i386_linux_xmlfiles): Add i386/i386-mmx-linux.xml.
-
-	* linux-x86-low.c (init_registers_i386_mmx_linux): New.
-	(x86_linux_update_xmltarget): Call init_registers_i386_mmx_linux
-	and return if ptrace PTRACE_GETFPXREGS failed in 32bit.
-
-2010-04-07  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* Makefile.in (clean): Updated.
-	(i386-avx.o): New.
-	(i386-avx.c): Likewise.
-	(i386-avx-linux.o): Likewise.
-	(i386-avx-linux.c): Likewise.
-	(amd64-avx.o): Likewise.
-	(amd64-avx.c): Likewise.
-	(amd64-avx-linux.o): Likewise.
-	(amd64-avx-linux.c): Likewise.
-
-	* configure.srv (srv_i386_regobj): Add i386-avx.o.
-	(srv_i386_linux_regobj): Add i386-avx-linux.o.
-	(srv_amd64_regobj): Add amd64-avx.o.
-	(srv_amd64_linux_regobj): Add amd64-avx-linux.o.
-	(srv_i386_32bit_xmlfiles): Add i386/32bit-avx.xml.
-	(srv_i386_64bit_xmlfiles): Add i386/64bit-avx.xml.
-	(srv_i386_xmlfiles): Add i386/i386-avx.xml.
-	(srv_amd64_xmlfiles): Add i386/amd64-avx.xml.
-	(srv_i386_linux_xmlfiles): Add i386/i386-avx-linux.xml.
-	(srv_amd64_linux_xmlfiles): Add i386/amd64-avx-linux.xml.
-
-	* i387-fp.c: Include "i386-xstate.h".
-	(i387_xsave): New.
-	(i387_cache_to_xsave): Likewise.
-	(i387_xsave_to_cache): Likewise.
-	(x86_xcr0): Likewise.
-
-	* i387-fp.h (i387_cache_to_xsave): Likewise.
-	(i387_xsave_to_cache): Likewise.
-	(x86_xcr0): Likewise.
-
-	* linux-arm-low.c (target_regsets): Initialize nt_type to 0.
-	* linux-crisv32-low.c (target_regsets): Likewise.
-	* linux-m68k-low.c (target_regsets): Likewise.
-	* linux-mips-low.c (target_regsets): Likewise.
-	* linux-ppc-low.c (target_regsets): Likewise.
-	* linux-s390-low.c (target_regsets): Likewise.
-	* linux-sh-low.c (target_regsets): Likewise.
-	* linux-sparc-low.c (target_regsets): Likewise.
-	* linux-xtensa-low.c (target_regsets): Likewise.
-
-	* linux-low.c: Include <sys/uio.h>.
-	(regsets_fetch_inferior_registers): Support nt_type.
-	(regsets_store_inferior_registers): Likewise.
-	(linux_process_qsupported): New.
-	(linux_target_ops): Add linux_process_qsupported.
-
-	* linux-low.h (regset_info): Add nt_type.
-	(linux_target_ops): Add process_qsupported.
-
-	* linux-x86-low.c: Include "i386-xstate.h", "elf/common.h"
-	and <sys/uio.h>.
-	(init_registers_i386_avx_linux): New.
-	(init_registers_amd64_avx_linux): Likewise.
-	(xmltarget_i386_linux_no_xml): Likewise.
-	(xmltarget_amd64_linux_no_xml): Likewise.
-	(PTRACE_GETREGSET): Likewise.
-	(PTRACE_SETREGSET): Likewise.
-	(x86_fill_xstateregset): Likewise.
-	(x86_store_xstateregset): Likewise.
-	(use_xml): Likewise.
-	(x86_linux_update_xmltarget): Likewise.
-	(x86_linux_process_qsupported): Likewise.
-	(target_regsets): Add NT_X86_XSTATE entry and Initialize nt_type.
-	(x86_arch_setup): Don't call init_registers_amd64_linux nor
-	init_registers_i386_linux here.  Call
-	x86_linux_update_xmltarget.
-	(the_low_target): Add x86_linux_process_qsupported.
-
-	* server.c (handle_query): Call target_process_qsupported.
-
-	* target.h (target_ops): Add process_qsupported.
-	(target_process_qsupported): New.
-
-2010-04-03  Pedro Alves  <pedro@codesourcery.com>
-
-	* inferiors.c (add_thread): Set last_status kind to
-	TARGET_WAITKIND_IGNORE.
-	* linux-low.c (cancel_breakpoint): Remove unnecessary regcache
-	fetch.  Use ptid_of.  Avoid unnecessary get_lwp_thread calls.
-	(linux_wait_1): Move `thread' local definition to block that uses
-	it.  Don't NULL initialize `event_child'.
-	(linux_resume_one_thread): Avoid unnecessary get_lwp_thread calls.
-	Alway set the thread's last_status to TARGET_WAITKIND_IGNORE.
-	* linux-x86-low.c (x86_breakpoint_at): Read raw memory.
-
-2010-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (get_stop_pc): Don't adjust the PC if stopped with
-	an extended waitstatus, or by a watchpoint.
-	(cancel_breakpoints_callback): Don't cancel a breakpoint if the
-	thread was stepping or has been stopped by a watchpoint.
-
-2010-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* mem-break.c (struct raw_breakpoint): New field shlib_disabled.
-	(set_gdb_breakpoint_at): If GDB is inserting a breakpoint on top
-	of another, then delete the previous, and validate all
-	breakpoints.
-	(validate_inserted_breakpoint): New.
-	(delete_disabled_breakpoints): New.
-	(validate_breakpoints): New.
-	(check_mem_read): Validate breakpoints before trusting their
-	shadow.  Delete disabled breakpoints.
-	(check_mem_write): Validate breakpoints before trusting they
-	should be inserted.  Delete disabled breakpoints.
-	* mem-break.h (validate_breakpoints):
-	* server.c (handle_query): Validate breakpoints when we see a
-	qSymbol query.
-
-2010-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_wait_1): Avoid setting need_step_over is
-	there's a GDB breakpoint at stop_pc.  Always report a trap to GDB
-	if we could tell there's a GDB breakpoint at stop_pc.
-	(need_step_over_p): Don't do a step over if we find a GDB
-	breakpoint at the resume PC.
-
-	* mem-break.c (struct raw_breakpoint): New.
-	(enum bkpt_type): New type `gdb_breakpoint'.
-	(struct breakpoint): Delete the `PC', `old_data' and `inserted'
-	fields.  New field `raw'.
-	(find_raw_breakpoint_at): New.
-	(set_raw_breakpoint_at): Handle refcounting.  Create a raw
-	breakpoint instead.
-	(set_breakpoint_at): Adjust.
-	(delete_raw_breakpoint): New.
-	(release_breakpoint): New.
-	(delete_breakpoint): Rename to...
-	(delete_breakpoint_1): ... this.  Add proc parameter.  Use
-	release_breakpoint.  Return ENOENT.
-	(delete_breakpoint): Reimplement.
-	(find_breakpoint_at): Delete.
-	(find_gdb_breakpoint_at): New.
-	(delete_breakpoint_at): Delete.
-	(set_gdb_breakpoint_at): New.
-	(delete_gdb_breakpoint_at): New.
-	(gdb_breakpoint_here): New.
-	(set_reinsert_breakpoint): Use release_breakpoint.
-	(uninsert_breakpoint): Rename to ...
-	(uninsert_raw_breakpoint): ... this.
-	(uninsert_breakpoints_at): Adjust to handle raw breakpoints.
-	(reinsert_raw_breakpoint): Change parameter type to
-	raw_breakpoint.
-	(reinsert_breakpoints_at): Adjust to handle raw breakpoints
-	instead.
-	(check_breakpoints): Adjust.  Use release_breakpoint.
-	(breakpoint_here): Rewrite using find_raw_breakpoint_at.
-	(breakpoint_inserted_here): Ditto.
-	(check_mem_read): Adjust to iterate over raw breakpoints instead.
-	Don't trust the breakpoint's shadow if it is not inserted.
-	(check_mem_write): Adjust to iterate over raw breakpoints instead.
-	(delete_all_breakpoints): Adjust.
-	(free_all_breakpoints): Mark all breakpoints as uninserted, and
-	use delete_breakpoint_1.
-
-	* mem-break.h (breakpoints_supported): Delete declaration.
-	(set_gdb_breakpoint_at): Declare.
-	(gdb_breakpoint_here): Declare.
-	(delete_breakpoint_at): Delete.
-	(delete_gdb_breakpoint_at): Declare.
-
-	* server.h (struct raw_breakpoint): Forward declare.
-	(struct process_info): New field `raw_breakpoints'.
-
-	* linux-x86-low.c (x86_insert_point, x86_remote_point): Handle Z0
-	breakpoints.
-
-2010-03-24  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (status_pending_p_callback): Fix comment.
-	(linux_wait_for_event_1): Move most of the internal breakpoint
-	handling from here...
-	(linux_wait_1): ... to here.
-	(count_events_callback): New.
-	(select_singlestep_lwp_callback): New.
-	(select_event_lwp_callback): New.
-	(cancel_breakpoints_callback): New.
-	(select_event_lwp): New.
-	(linux_wait_1): Simplify internal breakpoint handling.  Give equal
-	priority to all LWPs that have had events that should be reported
-	to the client.  Cancel breakpoints when about to reporting the
-	event to the client, not while stopping lwps.  No longer cancel
-	finished single-steps here.
-	(cancel_finished_single_step): Delete.
-	(cancel_finished_single_steps): Delete.
-
-2010-03-24  Pedro Alves  <pedro@codesourcery.com>
-
-	* mem-break.c (enum bkpt_type): New.
-	(struct breakpoint): New field `type'.
-	(set_breakpoint_at): Change return type to struct breakpoint
-	pointer.  Set type to `other_breakpoint' by default.
-	(delete_breakpoint): Rewrite, supporting more than one breakpoint
-	in the breakpoint list.
-	(delete_reinsert_breakpoints): Only delete reinsert breakpoints.
-	(reinsert_breakpoint): Rename to ...
-	(reinsert_raw_breakpoint): ... this.
-	(reinsert_breakpoints_at): Adjust.
-	* mem-break.h (struct breakpoint): Declare.
-	(set_breakpoint_at): Change return type to struct breakpoint
-	pointer.
-
-2010-03-24  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_query): Assign, not compare.
-
-2010-03-24  Pedro Alves  <pedro@codesourcery.com>
-
-	Teach linux gdbserver to step-over-breakpoints.
-
-	* linux-low.c (can_hardware_single_step): New.
-	(supports_breakpoints): New.
-	(handle_extended_wait): If stopping threads, read the stop pc of
-	the new cloned LWP.
-	(get_pc): New.
-	(get_stop_pc): Add `lwp' parameter.  Handle it.  Bail out if the
-	low target doesn't support retrieving the PC.
-	(add_lwp): Set last_resume_kind to resume_continue.
-	(linux_attach_lwp_1): Adjust comments.  Always set stop_expected.
-	(linux_attach): Don't clear stop_expected.  Set the lwp's
-	last_resume_kind to resume_stop.
-	(linux_detach_one_lwp): Don't check for removed breakpoints.
-	(check_removed_breakpoint): Delete.
-	(status_pending_p): Rename to ...
-	(status_pending_p_callback): ... this.  Don't check for removed
-	breakpoints.  Don't consider threads that are stopped from GDB's
-	perspective.
-	(linux_wait_for_lwp): Always read the stop_pc here.
-	(cancel_breakpoint): New.
-	(step_over_bkpt): New global.
-	(linux_wait_for_event_1): Implement stepping over breakpoints.
-	(gdb_wants_lwp_stopped): New.
-	(gdb_wants_all_stopped): New.
-	(linux_wait_1): Tag threads as gdb-wants-stopped.  Cancel finished
-	single-step traps here.  Store the thread's last reported target
-	wait status.
-	(send_sigstop): Don't clear stop_expected.  Always set it,
-	instead.
-	(mark_lwp_dead): Remove reference to pending_is_breakpoint.
-	(cancel_finished_single_step): New.
-	(cancel_finished_single_steps): New.
-	(wait_for_sigstop): Don't cancel finished single-step traps here.
-	(linux_resume_one_lwp): Don't check for removed breakpoints.
-	Don't set `step' on non-hardware step archs.
-	(linux_set_resume_request): Ignore resume_stop requests if already
-	stopping or stopped.  Set the lwp's last_resume_kind.
-	(resume_status_pending_p): Don't check for removed breakpoints.
-	(need_step_over_p): New.
-	(start_step_over): New.
-	(finish_step_over): New.
-	(linux_resume_one_thread): Always queue a sigstop for resume_stop
-	requests.  Clear the thread's last reported target waitstatus.
-	Don't use the `suspended' flag.  Don't consider pending breakpoints.
-	(linux_resume): Start a step-over if necessary.
-	(proceed_one_lwp): New.
-	(proceed_all_lwps): New.
-	(unstop_all_lwps): New.
-	* linux-low.h (struct lwp_info): Rewrite comment for the
-	`suspended' flag.  Add the `stop_pc' field.  Delete the
-	`pending_stop_pc' field.  Tweak the `stepping' flag's comment.
-	Add `'last_resume_kind' and `need_step_over' fields.
-	* inferiors.c (struct thread_info): Delete, moved elsewhere.
-	* mem-break.c (struct breakpoint): Delete `reinserting' flag.
-	Delete `breakpoint_to_reinsert' field.  New flag `inserted'.
-	(set_raw_breakpoint_at): New.
-	(set_breakpoint_at): Rewrite to use it.
-	(reinsert_breakpoint_handler): Delete.
-	(set_reinsert_breakpoint): New.
-	(reinsert_breakpoint_by_bp): Delete.
-	(delete_reinsert_breakpoints): New.
-	(uninsert_breakpoint): Rewrite.
-	(uninsert_breakpoints_at): New.
-	(reinsert_breakpoint): Rewrite.
-	(reinsert_breakpoints_at): New.
-	(check_breakpoints): Rewrite.
-	(breakpoint_here): New.
-	(breakpoint_inserted_here): New.
-	(check_mem_read): Adjust.
-	* mem-break.h (breakpoints_supported, breakpoint_here)
-	(breakpoint_inserted_here, set_reinsert_breakpoint): Declare.
-	(reinsert_breakpoint_by_bp): Delete declaration.
-	(delete_reinsert_breakpoints): Declare.
-	(reinsert_breakpoint): Delete declaration.
-	(reinsert_breakpoints_at): Declare.
-	(uninsert_breakpoint): Delete declaration.
-	(uninsert_breakpoints_at): Declare.
-	(check_breakpoints): Adjust prototype.
-	* server.h: Adjust include order.
-	(struct thread_info): Declare here.  Add a `last_status' field.
-
-2010-03-23  Michael Snyder  <msnyder@vmware.com>
-
-	* server.c (crc32): New function.
-	(handle_query): Add handling for 'qCRC:' request.
-
-2010-03-23  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR6 if the
-	lwp had been stopped by a watchpoint.
-
-2010-03-16  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.h (internal_error): Declare.
-	(gdb_assert, ASSERT_FUNCTION, gdb_assert_fail): Define.
-	* utils.c (internal_error): New function.
-
-2010-03-15  Andreas Schwab  <schwab@redhat.com>
-
-	* configure.srv: Fix typo setting srv_regobj.
-
-2010-03-15  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (fetch_register): Avoid passing a non string literal
-	format to `error'.
-	(usr_store_inferior_registers): Ditto.
-
-2010-03-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_write_memory): Bail out early if peeking
-	memory failed.
-
-2010-03-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.h (struct lwp_info): New fields
-	`stopped_by_watchpoint' and `stopped_data_address'.
-	* linux-low.c (linux_wait_for_lwp): Check for watchpoint triggers
-	here, and cache them in the lwp object.
-	(wait_for_sigstop): Check stopped_by_watchpoint lwp field
-	directly.
-	(linux_resume_one_lwp): Clear the lwp's stopped_by_watchpoint
-	field.
-	(linux_stopped_by_watchpoint): Rewrite.
-	(linux_stopped_data_address): Rewrite.
-
-2010-03-06  Simo Melenius  <simo.melenius@iki.fi>
-
-	* linux-low.c (linux_wait_for_lwp): Fetch the regcache after
-	switching the current inferior, not before.
-
-2010-03-01  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* Makefile.in (clean): Replace reg-i386.c, reg-x86-64.c,
-	reg-i386-linux.c and reg-x86-64-linux.c with i386.c, amd64.c,
-	i386-linux.c and amd64-linux.c.
-	(reg-i386.o): Removed.
-	(reg-i386.c): Likewise.
-	(reg-i386-linux.o): Likewise.
-	(reg-i386-linux.c): Likewise.
-	(reg-x86-64.o): Likewise.
-	(reg-x86-64.c): Likewise.
-	(reg-x86-64-linux.o): Likewise.
-	(reg-x86-64-linux.c): Likewise.
-	(i386.o): New.
-	(i386.c): Likewise.
-	(i386-linux.o): Likewise.
-	(i386-linux.c): Likewise.
-	(amd64.o): Likewise.
-	(amd64.c): Likewise.
-	(amd64-linux.o): Likewise.
-	(amd64-linux.c): Likewise.
-
-	* configure.srv (srv_i386_regobj): New.
-	(srv_i386_linux_regobj): Likewise.
-	(srv_amd64_regobj): Likewise.
-	(srv_amd64_linux_regobj): Likewise.
-	(srv_i386_32bit_xmlfiles): Likewise.
-	(srv_i386_64bit_xmlfiles): Likewise.
-	(srv_i386_xmlfiles): Likewise.
-	(srv_amd64_xmlfiles): Likewise.
-	(srv_i386_linux_xmlfiles): Likewise.
-	(srv_amd64_linux_xmlfiles): Likewise.
-	(i[34567]86-*-cygwin*): Set srv_regobj to $srv_i386_regobj.  Set
-	srv_xmlfiles to $srv_i386_xmlfiles.
-	(i[34567]86-*-mingw32ce*): Likewise.
-	(i[34567]86-*-mingw*): Likewise.
-	(i[34567]86-*-nto*): Likewise.
-	(i[34567]86-*-linux*): Set srv_regobj to $srv_i386_linux_regobj
-	and $srv_amd64_linux_regobj.  Set srv_xmlfiles to
-	$srv_i386_linux_xmlfiles and $srv_amd64_linux_xmlfiles.
-	(x86_64-*-linux*): Likewise.
-
-	* linux-x86-low.c (init_registers_x86_64_linux): Removed.
-	(init_registers_amd64_linux): New.
-	(x86_arch_setup): Replace init_registers_x86_64_linux with
-	init_registers_amd64_linux.
-
-2010-02-23  Maxim Kuvyrkov  <maxim@codesourcery.com>
-
-	* configure.ac: Check for libdl.  If it is not available link against
-	static libthread_db.
-	* configure: Regenerate.
-
-2010-02-22  Pedro Alves  <pedro@codesourcery.com>
-
-	PR9605
-
-	* i386-low.c (i386_length_and_rw_bits): Throw a fatal error if
-	handing a read watchpoint.
-	(i386_low_insert_watchpoint): Read watchpoints aren't supported.
-
-2010-02-12  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_supports_tracefork_flag): Document.
-	(linux_look_up_symbols): Add comment.
-
-2010-02-03  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* regcache.c (supply_register): Clear regcache if buf is NULL.
-
-2010-02-02  Nicolas Roche  <roche@sourceware.org>
-	    Joel Brobecker  <brobecker@adacore.com>
-
-	* inferiors.c (find_inferior): Add function documentation.
-	(unloaded_dll): Handle the case where the unloaded dll has not
-	been previously registered in the dll list.
-
-2010-02-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-arm-low.c (thumb_breakpoint_len): Delete.
-	(thumb2_breakpoint): New.
-	(arm_breakpoint_at): Check for Thumb-2 breakpoints.
-
-2010-01-29  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (get_stop_pc): Check for SIGTRAP.
-	(linux_wait_for_event_1): Handle SIGILL and SIGSEGV as possible
-	breakpoints.
-
-2010-01-21  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-ppc-low.c (ppc_arch_setup): Adjust to regcache changes.
-
-2010-01-21  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-	* linux-s390-low.c (s390_collect_ptrace_register)
-	(s390_supply_ptrace_register): Adjust it for the new regcache parameter.
-
-2010-01-21  Doug Evans  <dje@google.com>
-
-	* linux-low.c (PTRACE_ARG3_TYPE): Change from long to void*.
-	(PTRACE_ARG4_TYPE): New macro.
-	(handle_extended_wait): Cast ptrace arg4 to PTRACE_ARG4_TYPE.
-	(linux_wait_for_event_1, linux_resume_one_lwp): Ditto.
-	(fetch_register): Cast to uintptr_t before casting to PTRACE_ARG3_TYPE.
-	(usr_store_inferior_registers): Ditto.
-	(linux_read_memory, linux_write_memory): Ditto.
-	(linux_test_for_tracefork): Ditto.
-
-	* linux-arm-low.c: Remove redundant include of gdb_proc_service.h.
-	Only include elf.h if gdb_proc_service.h didn't include linux/elf.h.
-
-2010-01-21  Pedro Alves  <pedro@codesourcery.com>
-
-	* proc-service.c (ps_lgetregs): Don't refetch registers from the
-	target.
-
-2010-01-21  Pedro Alves  <pedro@codesourcery.com>
-
-	* spu-low.c (spu_fetch_registers, spu_store_registers): Change
-	prototype to take a regcache.  Adjust.
-
-2010-01-20  Pedro Alves  <pedro@codesourcery.com>
-
-	* regcache.h (struct thread_info): Forward declare.
-	(struct regcache): New.
-	(new_register_cache): Adjust prototype.
-	(get_thread_regcache): Declare.
-	(free_register_cache): Adjust prototype.
-	(registers_to_string, registers_from_string): Ditto.
-	(supply_register, supply_register_by_name, collect_register)
-	(collect_register_as_string, collect_register_by_name): Ditto.
-	* regcache.c (struct inferior_regcache_data): Delete.
-	(get_regcache): Rename to ...
-	(get_thread_regcache): ... this.  Adjust.  Switch inferior before
-	fetching registers.
-	(regcache_invalidate_one): Adjust.
-	(regcache_invalidate): Fix prototype.
-	(new_register_cache): Return the new register cache.
-	(free_register_cache): Change prototype.
-	(realloc_register_cache): Adjust.
-	(registers_to_string): Change prototype to take a regcache.  Adjust.
-	(registers_from_string): Ditto.
-	(register_data): Ditto.
-	(supply_register): Ditto.
-	(supply_register_by_name): Ditto.
-	(collect_register): Ditto.
-	(collect_register_as_string): Ditto.
-	(collect_register_by_name): Ditto.
-	* server.c (process_serial_event): Adjust.
-	* linux-low.h (regset_fill_func, regset_store_func): Change
-	prototype.
-	(get_pc, set_pc, collect_ptrace_register, supply_ptrace_register):
-	Change prototype.
-	* linux-low.c (get_stop_pc): Adjust.
-	(check_removed_breakpoint): Adjust.
-	(linux_wait_for_event): Adjust.
-	(linux_resume_one_lwp): Adjust.
-	(fetch_register): Add regcache parameter.  Adjust.
-	(usr_store_inferior_registers): Ditto.
-	(regsets_fetch_inferior_registers): Ditto.
-	(regsets_store_inferior_registers): Ditto.
-	(linux_fetch_registers, linux_store_registers): Ditto.
-	* i387-fp.c (i387_cache_to_fsave): Change prototype to take a
-	regcache.  Adjust.
-	(i387_fsave_to_cache, i387_cache_to_fxsave, i387_fxsave_to_cache):
-	Ditto.
-	* i387-fp.h (i387_cache_to_fsave, i387_fsave_to_cache): Change
-	prototype to take a regcache.
-	(i387_cache_to_fxsave, i387_fxsave_to_cache): Ditto.
-	* remote-utils.c (convert_ascii_to_int, outreg)
-	(prepare_resume_reply): Change prototype to take a regcache.
-	Adjust.
-	* target.h (struct target_ops) <fetch_registers, store_registers>:
-	Change prototype to take a regcache.
-	(fetch_inferior_registers, store_inferior_registers): Change
-	prototype to take a regcache.  Adjust.
-	* proc-service.c (ps_lgetregs): Adjust.
-	* linux-x86-low.c (x86_fill_gregset, x86_store_gregset)
-	(x86_fill_fpregset, x86_store_fpregset, x86_fill_fpxregset)
-	(x86_store_fpxregset, x86_get_pc, x86_set_pc): Change prototype to
-	take a regcache.  Adjust.
-	* linux-arm-low.c (arm_fill_gregset, arm_store_gregset)
-	(arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset)
-	(arm_store_vfpregset, arm_get_pc, arm_set_pc):
-	(arm_breakpoint_at): Change prototype to take a regcache.  Adjust.
-	* linux-cris-low.c (cris_get_pc, cris_set_pc)
-	(cris_cannot_fetch_register):
-	(cris_breakpoint_at): Change prototype to take a regcache.
-	Adjust.
-	* linux-crisv32-low.c (cris_get_pc, cris_set_pc,
-	cris_reinsert_addr, cris_write_data_breakpoint): Change prototype
-	to take a regcache.  Adjust.
-	(cris_breakpoint_at, cris_insert_point, cris_remove_point):
-	Adjust.
-	* linux-m32r-low.c (m32r_get_pc, m32r_set_pc): Change prototype to
-	take a regcache.  Adjust.
-	* linux-m68k-low.c (m68k_fill_gregset, m68k_store_gregset)
-	(m68k_fill_fpregset, m68k_store_fpregset, m68k_get_pc,
-	(m68k_set_pc): Change prototype to take a regcache.  Adjust.
-	* linux-mips-low.c (mips_get_pc):
-	(mips_set_pc): Change prototype to take a regcache.  Adjust.
-	(mips_reinsert_addr): Adjust.
-	(mips_collect_register): Change prototype to take a regcache.
-	Adjust.
-	(mips_supply_register):
-	(mips_collect_register_32bit, mips_supply_register_32bit)
-	(mips_fill_gregset, mips_store_gregset, mips_fill_fpregset)
-	(mips_store_fpregset): Ditto.
-	* linux-ppc-low.c (ppc_supply_ptrace_register)
-	(ppc_supply_ptrace_register): Ditto.
-	(parse_spufs_run): Adjust.
-	(ppc_get_pc, ppc_set_pc, ppc_fill_gregset, ppc_fill_vsxregset)
-	(ppc_store_vsxregset, ppc_fill_vrregset, ppc_store_vrregset)
-	(ppc_fill_evrregset, ppc_store_evrregset): Change prototype to
-	take a regcache.  Adjust.
-	* linux-s390-low.c (s390_collect_ptrace_register)
-	(s390_supply_ptrace_register, s390_fill_gregset, s390_get_pc)
-	(s390_set_pc): Change prototype to take a regcache.  Adjust.
-	(s390_arch_setup): Adjust.
-	* linux-sh-low.c (sh_get_pc, sh_breakpoint_at)
-	(sh_fill_gregset): Change prototype to take a regcache.  Adjust.
-	* linux-sparc-low.c (sparc_fill_gregset_to_stack)
-	(sparc_fill_gregset, sparc_store_gregset_from_stack)
-	(sparc_store_gregset, sparc_get_pc): Change prototype to take a
-	regcache.  Adjust.
-	(sparc_breakpoint_at): Adjust.
-	* linux-xtensa-low.c (xtensa_fill_gregset):
-	(xtensa_store_gregset):
-	(xtensa_fill_xtregset, xtensa_store_xtregset, xtensa_get_pc)
-	(xtensa_set_pc): Change prototype to take a regcache.  Adjust.
-	* nto-low.c (nto_fetch_registers, nto_store_registers): Change
-	prototype to take a regcache.  Adjust.
-	* win32-arm-low.c (arm_fetch_inferior_register)
-	(arm_store_inferior_register): Change prototype to take a
-	regcache.  Adjust.
-	* win32-i386-low.c (i386_fetch_inferior_register)
-	(i386_store_inferior_register): Change prototype to take a
-	regcache.  Adjust.
-	* win32-low.c (child_fetch_inferior_registers)
-	(child_store_inferior_registers): Change prototype to take a
-	regcache.  Adjust.
-	(win32_wait): Adjust.
-	(win32_fetch_inferior_registers): Change prototype to take a
-	regcache.  Adjust.
-	(win32_store_inferior_registers): Adjust.
-	* win32-low.h (struct win32_target_ops) <fetch_inferior_register,
-	store_inferior_register>: Change prototype to take a regcache.
-
-2010-01-20  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_create_inferior): Wrap use of __SIGRTMIN in
-	#ifdef.
-	(linux_wait_for_event1, linux_init_signals): Ditto.
-	(W_STOPCODE): Provide definition if missing.
-
-2010-01-13  Vladimir Prus  <vladimir@codesourcery.com>
-
-	* linux-low.c (linux_core_of_thread): New.
-	(compare_ints, show_process, list_threads): New.
-	(linux_qxfer_osdata): Report threads and cores.
-	(linux_target_op): Register linux_core_of_thread.
-	* remote-utils.c (prepare_resume_reply): Report the core.
-	(buffer_xml_printf): Support %d specifier.
-	* server.c (handle_threads_qxfer_proper, handle_threads_qxfer):
-	New.
-	(handle_query): Handle qXfer:threads.  Announce availability
-	thereof.
-	* target.h (struct target_ops): New field core_of_thread.
-
-2010-01-04  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* Makefile.in (clean): Remove new generated files.
-	(reg-s390.o, reg-s390.c): Remove rules.
-	(reg-s390x.o, reg-s390x.c): Likewise.
-	(s390-linux32.o, s390-linux32.c): Add rules.
-	(s390-linux64.o, s390-linux64.c): Likewise.
-	(s390x-linux64.o, s390x-linux64.c): Likewise.
-	* configure.srv (s390*-*-linux*): Update srv_regobj and srv_xmlfiles.
-	* linux-s390-low.c: Include <elf.h>.
-	(HWCAP_S390_HIGH_GPRS): Define if undefined.
-	(init_registers_s390): Remove prototype.
-	(init_registers_s390x): Likewise.
-	(init_registers_s390_linux32): Add prototype.
-	(init_registers_s390_linux64): Likewise.
-	(init_registers_s390x_linux64): Likewise.
-	(s390_num_regs_3264): New define.
-	(s390_regmap_3264): New global variable.
-	(s390_cannot_fetch_register): Remove obsolete check.
-	(s390_cannot_store_register): Likewise.
-	(s390_collect_ptrace_register): Handle upper/lower register halves.
-	(s390_supply_ptrace_register): Likewise.
-	(s390_fill_gregset): Update to register number changes.
-	(s390_get_hwcap): New routine.
-	(s390_arch_setup): Detect 32-bit process running on 64-bit system.
-	Install appropriate regmap and register set.
-
-2010-01-01  Joel Brobecker  <brobecker@adacore.com>
-
-	* server.c (gdbserver_version): Update copyright year to 2010.
-	* gdbreplay.c (gdbreplay_version): Likewise.
-
-2009-12-28  Doug Evans  <dje@google.com>
-
-	* linux-low.c: Delete inclusion of ansidecl.h, elf/common.h,
-	elf/external.h.  Include <elf.h> instead but only if necessary.
-
-2009-12-28  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_remove_process): Remove `detaching'
-	parameter.  Don't release/detach from thread_db here.
-	(linux_kill): Release/detach from thread_db here, ...
-	(linux_detach): ... and here, before actually detaching.
-	(linux_wait_1): ... and here, when a process exits.
-	* thread-db.c (any_thread_of): New.
-	(thread_db_free): Switch the current inferior to a thread of the
-	passed in process.
-
-2009-12-21  Doug Evans  <dje@google.com>
-
-	* linux-x86-low.c: Delete outdated comment about Elf32_Phdr.
-
-	* linux-low.c (kill_lwp): Use __NR_tkill instead of SYS_tkill.
-	Move definition of tkill_failed to ifdef __NR_tkill to avoid gcc
-	warning ifndef __NR_tkill.  Move setting of errno there too.
-	Delete unnecessary resetting of errno after syscall.
-	Minor comment changes to match gdb/linux-nat.c:kill_lwp.
-
-	* configure.ac: Check for dladdr.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* thread-db.c (dladdr_to_soname): Only define ifdef HAVE_DLADDR.
-	(try_thread_db_load): Update.
-
-	* linux-low.c (my_waitpid): Delete unnecessary prototype.
-
-2009-12-18  Doug Evans  <dje@google.com>
-
-	* event-loop.c: Include unistd.h if it exists.
-
-	* linux-low.c (my_waitpid): Move definition away from being in
-	between linux_tracefork_child/linux_test_for_tracefork.
-
-	* gdb_proc_service.h (psaddr_t): Fix type.
-	* thread-db.c (thread_db_info.td_thr_tls_get_addr_p): Fix
-	signature to match glibc.
-
-2009-12-16  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_read_memory): Fix argument to read.
-
-2009-11-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* win32-low.c (get_child_debug_event): On EXIT_THREAD_DEBUG_EVENT
-	events, don't leave current_inferior pointing at null.
-
-2009-11-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* win32-low.c (LOG): Delete.
-	(OUTMSG): Output to stderr.
-	(OUTMSG2): Conditionalize on `debug_threads' variable, instead of
-	on compile time LOG macro.
-	(win32_wait): Fix debug output.
-
-2009-11-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* win32-low.c (win32_add_one_solib): If the dll name is
-	"ntdll.dll", prepend the system directory to the dll path.
-
-2009-11-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* m68k-tdep.c (m68k_gdbarch_init): Reuse previous initialization.
-
-2009-11-17  Nathan Sidwell  <nathan@codesourcery.com>
-	    Vladimir Prus  <vladimir@codesourcery.com>
-
-	* Makefile.in (reg-cf.o, reg-cf.c): New targets.
-	* configure.ac: Check for __mcoldfire__ and set
-	gdb_cv_m68k_is_coldfire.
-	* configure.srv: Use gdb_cv_m68k_is_coldfire to select between
-	reg-cf.o and reg-m68k.o.
-	* configure: Regenerated.
-
-2009-11-16  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_remove_process): Add `detaching' parameter.
-	Pass it to thread_db_free.
-	(linux_kill, linux_detach, linux_wait_1): Adjust to pass the
-	proper `detaching' argument to linux_remove_process.
-	* linux-low.h (thread_db_free): Add `detaching' parameter.
-	* thread-db.c (thread_db_init): Pass false as `detaching' argument
-	to thread_db_free.
-	(thread_db_free): Add `detaching' parameter.  Only
-	call td_ta_clear_event if detaching from process.
-
-2009-11-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
-
-	* thread-db.c (thread_db_free): Fix typo.
-
-2009-11-11  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	PR gdb/10838
-	* thread-db.c (thread_db_free): Call td_ta_clear_event.
-
-2009-11-03  Nathan Sidwell  <nathan@codesourcery.com>
-
-	* configure.ac (i[34567]86-*): Check if we're targetting x86-64
-	with an i686 compiler.
-	* configure.srv (i[34567]86-*-linux*): Pull in x86-64 handling if
-	needed.
-	* configure: Rebuilt.
-
-2009-10-29  Sandra Loosemore  <sandra@codesourcery.com>
-
-	PR gdb/10783
-
-	* server.c (handle_search_memory_1): Correct read_addr initialization
-	in loop for searching subsequent chunks.
-
-2009-10-29  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* configure.ac: New --with-libthread-db option.
-	* thread-db.c: Allow direct dependence on libthread_db.
-	(thread_db_free): Adjust.
-	* config.in: Regenerate.
-	* configure: Likewise.
-
-2009-10-28  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	PR gdb/10757
-	* thread-db.c (attach_thread): New function.
-	(maybe_attach_thread): Return success/failure.
-	(find_new_threads_callback): Adjust.
-	(thread_db_find_new_threads): Loop until no new threads.
-
-2009-10-13  Pedro Alves  <pedro@codesourcery.com>
-
-	* proc-service.c (ps_lgetregs): Formatting.
-
-2009-10-08  Paul Pluzhnikov  <ppluzhnikov@google.com>
-
-	* acinclude.m4: (SRV_CHECK_THREAD_DB, SRV_CHECK_TLS_GET_ADDR): Remove.
-	* configure.ac: Adjust.
-	* linux-low.h (struct process_info_private): Move members to struct
-	thread_db.
-	(thread_db_free, thread_db_handle_monitor_command): New prototype.
-	* linux-low.c (linux_remove_process): Adjust.
-	(linux_wait_for_event_1, linux_look_up_symbols): Likewise.
-	* server.c (handle_query): Move code ...
-	(handle_monitor_command): ... here. New function.
-	* target.h (struct target_ops): New member.
-	* thread-db.c (struct thread_db): New.
-	(libthread_db_search_path): New variable.
-	(thread_db_create_event, thread_db_enable_reporting)
-	(find_one_thread, maybe_attach_thread, find_new_threads_callback)
-	(thread_db_find_new_threads, (thread_db_get_tls_address): Adjust.
-	(try_thread_db_load_1, dladdr_to_soname): New functions.
-	(try_thread_db_load, thread_db_load_search): New functions.
-	(thread_db_init): Search for libthread_db.
-	(thread_db_free): New function.
-	(thread_db_handle_monitor_command): Likewise.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2009-09-27  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* spu-low.c (spu_kill): Wait for inferior to terminate.
-	Call clear_inferiors.
-	(spu_detach): Call clear_inferiors.
-
-2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
-
-	* aclocal.m4: Regenerate.
-	* config.in: Likewise.
-	* configure: Likewise.
-
-2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-ppc-low.c (INSTR_SC, NR_spu_run): Define.
-	(parse_spufs_run): New function.
-	(ppc_get_pc, ppc_set_pc): Detect and handle SPU PC.
-	(ppc_breakpoint_at): Handle SPU breakpoints.
-
-2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-low.c: Include <sys/stat.h> and <sys/vfs.h>.
-	(SPUFS_MAGIC): Define.
-	(spu_enumerate_spu_ids): New function.
-	(linux_qxfer_spu): New function.
-	(linux_target_ops): Install linux_qxfer_spu.
-
-2009-07-31  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv (powerpc*-*-linux*): Add powerpc-cell32l.o
-	and powerpc-cell64l.o to srv_regobj.  Add rs6000/powerpc-cell32l.xml
-	and rs6000/powerpc-cell64l.xml to srv_xmlfiles.
-	* Makefile.in (powerpc-cell32l.o, powerpc-cell32l.c): New rules.
-	(powerpc-cell64l.o, powerpc-cell64l.c): Likewise.
-	(clean): Handle powerpc-cell32l.c and powerpc-cell64l.c.
-	* linux-ppc-low.c (PPC_FEATURE_CELL): Define.
-	(init_registers_powerpc_cell32l): Add prototype.
-	(init_registers_powerpc_cell64l): Likewise.
-	(ppc_arch_setup): Detect Cell/B.E. architecture.
-
-2009-07-30  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
-
-	* Makefile.in (datarootdir): New variable.
-
-2009-07-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_write_memory): Update debugging output.
-	* Makefile.in (clean): Add new descriptions.
-	(arm-with-vfpv2.o, arm-with-vfpv2.c, arm-with-vfpv3.o)
-	(arm-with-vfpv3.c, arm-with-neon.o, arm-with-neon.c): New rules.
-	* configure.srv: Add new files for arm*-*-linux*.
-	* linux-arm-low.c: Add new declarations.
-	(PTRACE_GETVFPREGS, PTRACE_SETVFPREGS): Define if undefined.
-	(arm_hwcap, HWCAP_VFP, HWCAP_IWMMXT, HWCAP_NEON, HWCAP_VFPv3)
-	(HWCAP_VFPv3D16): New.
-	(arm_fill_wmmxregset, arm_store_wmmxregset): Check HWCAP_IWMMXT
-	instead of __IWMMXT__.
-	(arm_fill_vfpregset, arm_store_vfpregset, arm_get_hwcap)
-	(arm_arch_setup): New.
-	(target_regsets): Remove #ifdef.  Add VFP regset.
-	(the_low_target): Use arm_arch_setup.
-
-2009-07-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_kill_one_lwp): Adjust kernel workaround to skip
-	the main thread again.
-
-2009-07-06  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	Adding Neutrino gdbserver.
-	* configure: Regenerated.
-	* configure.ac: Add case for srv_qnx and set LIBS accordingly.
-	* configure.srv (i[34567]86-*-nto*): New target.
-	* nto-low.c, nto-low.h, nto-x86-low.c: New files.
-	* remote-utils.c [__QNX__]: Include sys/iomgr.h
-	(nto_comctrl) [__QNX__]: New function.
-	(enable_async_io, disable_async_io) [__QNX__]: Call nto_comctrl.
-
-2009-07-05  Danny Backx  <dannybackx@users.sourceforge.net>
-
-	* configure.srv (i[34567]86-*-mingw32ce*): Add i386-low.o to
-	srv_tgtobj.
-
-2009-07-04  Danny Backx  <dannybackx@users.sourceforge.net>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	* win32-i386-low.c (i386_get_thread_context): Handle systems that
-	don't support CONTEXT_EXTENDED_REGISTERS.
-	(i386_win32_breakpoint, i386_win32_breakpoint_len): New.
-	(the_low_target): Install them.
-	* win32-low.c (get_child_debug_event): Handle WaitForDebugEvent
-	failing with ERROR_PIPE_NOT_CONNECTED.
-
-2009-06-30  Doug Evans  <dje@google.com>
-	    Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	Add h/w watchpoint support to x86-linux, win32-i386.
-	* Makefile.in (SFILES): Add i386-low.c
-	(i386_low_h): Define.
-	(i386-low.o): Add dependencies.
-	(linux-x86-low.o): Add i386-low.h dependency.
-	(win32-i386-low.o): Ditto.
-	* i386-low.c: New file.
-	* i386-low.h: New file.
-	* configure.srv (i[34567]86-*-cygwin*): Add i386-low.o to srv_tgtobj.
-	(i[34567]86-*-linux*, i[34567]86-*-mingw*, x86_64-*-linux*): Ditto.
-	* linux-low.c (linux_add_process): Initialize arch_private.
-	(linux_remove_process): Free arch_private.
-	(add_lwp): Initialize arch_private.
-	(delete_lwp): Free arch_private.
-	(linux_resume_one_lwp): Call the_low_target.prepare_to_resume if
-	provided.
-	* linux-low.h (process_info_private): New member arch_private.
-	(lwp_info): New member arch_private.
-	(linux_target_ops): New members new_process, new_thread,
-	prepare_to_resume.
-	(ptid_of): New macro.
-	* linux-x86-low.c: Include stddef.h, i386-low.h.
-	(arch_process_info): New struct.
-	(arch_lwp_info): New struct.
-	(x86_linux_dr_get, x86_linux_dr_set): New functions.
-	(i386_dr_low_set_addr, i386_dr_low_set_control): New functions.
-	(i386_dr_low_get_status): New function.
-	(x86_insert_point, x86_remove_point): New functions.
-	(x86_stopped_by_watchpoint): New function.
-	(x86_stopped_data_address): New function.
-	(x86_linux_new_process, x86_linux_new_thread): New functions.
-	(x86_linux_prepare_to_resume): New function.
-	(the_low_target): Add entries for insert_point, remove_point,
-	stopped_by_watchpoint, stopped_data_address, new_process, new_thread,
-	prepare_to_resume.
-	* server.c (debug_hw_points): New global.
-	(monitor_show_help): Document set debug-hw-points.
-	(handle_query): Process "set debug-hw-points".
-	* server.h (debug_hw_points): Declare.
-	(paddress): Declare.
-	* utils.c (NUMCELLS, CELLSIZE): New macros.
-	(get_sell, xsnprintf, paddress): New functions.
-	* win32-arm-low.c (the_low_target): Add entries for insert_point,
-	remove_point, stopped_by_watchpoint, stopped_data_address.
-	* win32-i386-low.c: Include i386-low.h.
-	(debug_reg_state): Replaces dr.
-	(i386_dr_low_set_addr, i386_dr_low_set_control): New functions.
-	(i386_dr_low_get_status): New function.
-	(i386_insert_point, i386_remove_point): New functions.
-	(i386_stopped_by_watchpoint): New function.
-	(i386_stopped_data_address): New function.
-	(i386_initial_stuff): Update.
-	(get_thread_context,set_thread_context,i386_thread_added): Update.
-	(the_low_target): Add entries for insert_point,
-	remove_point, stopped_by_watchpoint, stopped_data_address.
-	* win32-low.c (win32_insert_watchpoint): New function.
-	(win32_remove_watchpoint): New function.
-	(win32_stopped_by_watchpoint): New function.
-	(win32_stopped_data_address): New function.
-	(win32_target_ops): Add entries for insert_watchpoint,
-	remove_watchpoint, stopped_by_watchpoint, stopped_data_address.
-	* win32-low.h (win32_target_ops): New members insert_point,
-	remove_point, stopped_by_watchpoint, stopped_data_address.
-
-2009-06-25  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (process_serial_event): Re-return unsupported, not
-	error, if the type isn't recognized.  Re-allow supporting only
-	insert or remove packets.  Also call require_running for
-	breakpoints.  Add missing break statement to default case.  Tidy.
-	* target.h (struct target_ops): Rename insert_watchpoint to
-	insert_point, and remove_watchpoint to remove_point.
-
-	* linux-low.h (struct linux_target_ops): Likewise.
-	* linux-low.c (linux_insert_watchpoint): Rename to ...
-	(linux_insert_point): ... this.  Adjust.
-	(linux_remove_watchpoint): Rename to ...
-	(linux_remove_point): ... this.  Adjust.
-	(linux_target_ops): Adjust.
-	* linux-crisv32-low.c (cris_insert_watchpoint): Rename to ...
-	(cris_insert_point): ... this.
-	(cris_remove_watchpoint): Rename to ...
-	(cris_remove_point): ... this.
-	(the_low_target): Adjust.
-
-2009-06-24  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* server.c (handle_v_kill): Pass signal_pid to
-	kill_inferior if multi_process is zero.
-
-2009-06-23  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	* server.c (process_serial_event): Add support for Z0 and Z1 packet.
-	* target.h (target_ops): Comment for *_watchpoint to make it clear
-	the functions can get types '0' and '1'.
-
-2009-06-22  Aleksandar Ristovski  <aristovski@qnx.com>
-
-	* linux-low.c (usr_fetch_inferior_registers): Remove check for regno 0.
-	* proc-service.c (ps_lgetregs): Pass -1 to fetch all registers.
-	* regcache.c (get_regcache): Likewise.
-	* spu-low.c (spu_fetch_registers): Remove 0 to -1 conversion.
-	* win32-low.c (child_fetch_inferior_registers): Remove check for
-	regno 0.
-
-2009-06-19  Aleksandar Ristovski  <aristovski@qnx.com>
-	    Pedro Alves <pedro@codesourcery.com>
-
-	* target.h (struct target_ops) <supports_multi_process>: New
-	callback.
-	(target_supports_multi_process): New.
-	* server.c (handle_query): Even if GDB reports support, only
-	enable multi-process if the target also supports it.  Report
-	multi-process support only if the target backend supports it.
-	* linux-low.c (linux_supports_multi_process): New function.
-	(linux_target_ops): Install it as target_supports_multi_process
-	callback.
-
-2009-05-24  Doug Evans  <dje@google.com>
-
-	Global renaming of find_thread_pid to find_thread_ptid.
-	* server.h (find_thread_ptid): Renamed from find_thread_pid.
-	* inferiors.c (find_thread_ptid): Renamed from find_thread_pid.
-	All callers updated.
-
-	* linux-low.c (handle_extended_wait): Use linux_resume_one_lwp
-	to resume the newly created thread, don't call ptrace (PTRACE_CONT)
-	directly.
-
-	* linux-low.c (get_stop_pc): Print pc if debug_threads.
-	(check_removed_breakpoint, linux_wait_for_lwp): Ditto.
-	(linux_resume_one_lwp): Ditto.
-
-2009-05-23  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_resume_one_lwp): Change type of first arg
-	from struct inferior_list_entry * to struct lwp_info *.
-	All callers updated.
-
-2009-05-13  Doug Evans  <dje@google.com>
-
-	* linux-x86-low.c: Don't include assert.h.
-	(x86_siginfo_fixup): Use fatal, not assert.
-	(x86_arch_setup): Fix comment.
-
-2009-05-12  Doug Evans  <dje@google.com>
-
-	Biarch support for i386/amd64 gdbserver.
-	* Makefile.in (SFILES): Remove linux-i386-low.c, linux-x86-64-low.c.
-	Add linux-x86-low.c.
-	(linux-i386-low.o, linux-x86-64-low.o): Delete.
-	(linux-x86-low.o): Add.
-	* linux-x86-64-low.c: Delete.
-	* linux-i386-low.c: Delete.
-	* linux-x86-low.c: New file.
-	* configure.srv (i?86-linux srv_tgtobj): Replace linux-i386-low.o with
-	linux-x86-low.o.
-	(x86_64-linux srv_tgtobj): Replace linux-x86-64-low.o with
-	linux-x86-low.o.
-	(x86_64-linux srv_regobj): Add reg-i386-linux.o.
-	* linux-low.c: Include ansidecl.h, elf/common.h, elf/external.h.
-	(linux_child_pid_to_exec_file): New function.
-	(elf_64_header_p, elf_64_file_p): New functions.
-	(siginfo_fixup): New function.
-	(linux_xfer_siginfo): New local inf_siginfo.  Call siginfo_fixup to
-	give target a chance to convert layout.
-	* linux-low.h (linux_target_ops): New member siginfo_fixup.
-	(linux_child_pid_to_exec_file, elf_64_file_p): Declare.
-
-2009-05-07  Doug Evans  <dje@google.com>
-
-	* linux-low.c (regsets_fetch_inferior_registers): Fix memory leak.
-	(regsets_store_inferior_registers): Ditto.
-
-2009-05-06  Pedro Alves  <pedro@codesourcery.com>
-
-	PR server/10048
-
-	* linux-low.c (must_set_ptrace_flags): Delete.
-	(linux_create_inferior): Set `lwp->must_set_ptrace_flags' instead
-	of the global.
-	(linux_attach_lwp_1): Don't set PTRACE_SETOPTIONS here.  Set
-	`lwp->must_set_ptrace_flags' instead.
-	(linux_wait_for_event_1): Set ptrace options here.
-	(linux_wait_1): ... not here.
-
-2009-04-30  Doug Evans  <dje@google.com>
-
-	* inferiors.c (started_inferior_callback): New function.
-	(attached_inferior_callback): New function.
-	(have_started_inferiors_p, have_attached_inferiors_p): New functions.
-	* server.c (print_started_pid, print_attached_pid): New functions.
-	(detach_or_kill_for_exit): New function.
-	(main): Call it instead of for_each_inferior (kill_inferior_callback).
-	* server.h (have_started_inferiors_p): Declare.
-	(have_attached_inferiors_p): Declare.
-
-	* inferiors.c (remove_process): Fix memory leak, free process.
-	* linux-low.c (linux_remove_process): New function.
-	(linux_kill): Call it instead of remove_process.
-	(linux_detach, linux_wait_1): Ditto.
-
-2009-04-19  Danny Backx  <dannybackx@users.sourceforge.net>
-
-	* configure.srv: Add x86 Windows CE target.
-
-2009-04-03  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* inferiors.c (get_thread_process): Make global.
-	* server.h (get_thread_process): Add prototype.
-	* thread-db.c (find_one_thread): Use get_thread_process
-	instead of current_process.
-	(thread_db_get_tls_address): Do not crash if called when
-	thread layer is not yet initialized.
-
-2009-04-03  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* remote-utils.c (prepare_resume_reply): Null-terminate packet.
-	* spu-low.c (current_tid): Rename to ...
-	(current_ptid): ... this.
-	(fetch_ppc_register, fetch_ppc_memory, store_ppc_memory,
-	spu_proc_xfer_spu, spu_resume, spu_request_interrupt): Use
-	ptid_get_lwp (current_ptid) instead of current_tid.
-	(spu_kill, spu_detach, spu_join, spu_wait): Use pid argument
-	instead of current_tid.  Use find_process_pid to verify pid
-	argument is valid.  Pass proper argument to remove_process.
-	(spu_thread_alive): Compare current_ptid instead of current_tid.
-	(spu_resume): Likewise.
-
-2009-04-02  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (usr_store_inferior_registers): Declare local `pid'
-	variable.
-
-2009-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	Implement the multiprocess extensions, and add linux multiprocess
-	support.
-
-	* server.h (ULONGEST): Declare.
-	(struct ptid, ptid_t): New.
-	(minus_one_ptid, null_ptid): Declare.
-	(ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp)
-	(ptid_get_tid, ptid_equal, ptid_is_pid): Declare.
-	(struct inferior_list_entry): Change `id' type from unsigned from
-	to ptid_t.
-	(struct sym_cache, struct breakpoint, struct
-	process_info_private): Forward declare.
-	(struct process_info): Declare.
-	(current_process): Declare.
-	(all_processes): Declare.
-	(initialize_inferiors): Declare.
-	(add_thread): Adjust to use ptid_t.
-	(thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): Ditto.
-	(add_process, remove_process, find_thread_pid): Declare.
-	(find_inferior_id): Adjust to use ptid_t.
-	(cont_thread, general_thread, step_thread): Change type to ptid_t.
-	(multi_process): Declare.
-	(push_event): Adjust to use ptid_t.
-	(read_ptid, write_ptid): Declare.
-	(prepare_resume_reply): Adjust to use ptid_t.
-	(clear_symbol_cache): Declare.
-	* inferiors.c (all_processes): New.
-	(null_ptid, minus_one_ptid): New.
-	(ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp)
-	(ptid_get_tid, ptid_equal, ptid_is_pid): New.
-	(add_thread): Change unsigned long to ptid.  Remove gdb_id
-	parameter.  Adjust.
-	(thread_id_to_gdb_id, thread_to_gdb_id): Change unsigned long to ptid.
-	(gdb_id_to_thread): Rename to ...
-	(find_thread_pid): ... this.  Change unsigned long to ptid.
-	(gdb_id_to_thread_id, find_inferior_id): Change unsigned long to ptid.
-	(loaded_dll, pull_pid_from_list): Adjust.
-	(add_process, remove_process, find_process_pid)
-	(get_thread_process, current_process, initialize_inferiors): New.
-	* target.h (struct thread_resume) <thread>: Change type to ptid_t.
-	(struct target_waitstatus) <related_pid>: Ditto.
-	(struct target_ops) <kill, detach>: Add `pid' argument.  Change
-	return type to int.
-	(struct target_ops) <join>: Add `pid' argument.
-	(struct target_ops) <thread_alive>: Change pid's type to ptid_t.
-	(struct target_ops) <wait>: Add `ptid' field.  Change return type
-	to ptid.
-	(kill_inferior, detach_inferior, join_inferior): Add `pid' argument.
-	(mywait): Add `ptid' argument.  Change return type to ptid_t.
-	(target_pid_to_str): Declare.
-	* target.c (set_desired_inferior): Adjust to use ptids.
-	(mywait): Add new `ptid' argument.  Adjust.
-	(target_pid_to_str): New.
-	* mem-break.h (free_all_breakpoints): Declare.
-	* mem-break.c (breakpoints): Delelete.
-	(set_breakpoint_at, delete_breakpoint, find_breakpoint_at)
-	(check_mem_read, check_mem_write, delete_all_breakpoints): Adjust
-	to use per-process breakpoint list.
-	(free_all_breakpoints): New.
-	* remote-utils.c (struct sym_cache) <name>: Drop `const'.
-	(symbol_cache, all_symbols_looked_up): Delete.
-	(hexchars): New.
-	(ishex, unpack_varlen_hex, write_ptid, hex_or_minus_one,
-	read_ptid): New.
-	(prepare_resume_reply): Change ptid argument's type from unsigned
-	long to ptid_t.  Adjust.  Implement W;process and X;process.
-	(free_sym_cache, clear_symbol_cache): New.
-	(look_up_one_symbol): Adjust to per-process symbol cache.  *
-	* server.c (cont_thread, general_thread, step_thread): Change type
-	to ptid_t.
-	(attached): Delete.
-	(multi_process): New.
-	(last_ptid): Change type to ptid_t.
-	(struct vstop_notif) <ptid>: Change type to ptid_t.
-	(queue_stop_reply, push_event): Change `ptid' argument's type to
-	ptid_t.
-	(discard_queued_stop_replies): Add `pid' argument.
-	(start_inferior): Adjust to use ptids.  Adjust to mywait interface
-	changes.  Don't reference the `attached' global.
-	(attach_inferior): Adjust to mywait interface changes.
-	(handle_query): Adjust to use ptids.  Parse GDB's qSupported
-	features.  Handle and report "multiprocess+".  Handle
-	"qAttached:PID".
-	(handle_v_cont): Adjust to use ptids.  Adjust to mywait interface
-	changes.
-	(handle_v_kill): New.
-	(handle_v_stopped): Adjust to use target_pid_to_str.
-	(handle_v_requests): Allow multiple attaches and runs when
-	multiprocess extensions are in effect.  Handle "vKill".
-	(myresume): Adjust to use ptids.
-	(queue_stop_reply_callback): Add `arg' parameter.  Handle it.
-	(handle_status): Adjust to discard_queued_stop_replies interface
-	change.
-	(first_thread_of, kill_inferior_callback)
-	(detach_or_kill_inferior_callback, join_inferiors_callback): New.
-	(main): Call initialize_inferiors.  Adjust to use ptids, killing
-	and detaching from all inferiors.  Handle multiprocess packet
-	variants.
-	* linux-low.h: Include gdb_proc_service.h.
-	(struct process_info_private): New.
-	(struct linux_target_ops) <pid_of>: Use ptid_get_pid.
-	<lwpid_of>: Use ptid_get_lwp.
-	(get_lwp_thread): Adjust.
-	(struct lwp_info): Add `dead' member.
-	(find_lwp_pid): Declare.
-	* linux-low.c (thread_db_active): Delete.
-	(new_inferior): Adjust comment.
-	(inferior_pid): Delete.
-	(linux_add_process): New.
-	(handle_extended_wait): Adjust.
-	(add_lwp): Change unsigned long to ptid.
-	(linux_create_inferior): Add process to processes table.  Adjust
-	to use ptids.  Don't set new_inferior here.
-	(linux_attach_lwp): Rename to ...
-	(linux_attach_lwp_1): ... this.  Add `initial' argument.  Handle
-	it.  Adjust to use ptids.
-	(linux_attach_lwp): New.
-	(linux_attach): Add process to processes table.  Don't set
-	new_inferior here.
-	(struct counter): New.
-	(second_thread_of_pid_p, last_thread_of_process_p): New.
-	(linux_kill_one_lwp): Add `args' parameter.  Handle it.  Adjust to
-	multiple processes.
-	(linux_kill): Add `pid' argument.  Handle it.  Adjust to multiple
-	processes.  Remove process from process table.
-	(linux_detach_one_lwp): Add `args' parameter.  Handle it.  Adjust
-	to multiple processes.
-	(any_thread_of): New.
-	(linux_detach): Add `pid' argument, and handle it.  Remove process
-	from processes table.
-	(linux_join): Add `pid' argument.  Handle it.
-	(linux_thread_alive): Change unsighed long argument to ptid_t.
-	Consider dead lwps as not being alive.
-	(status_pending_p): Rename `dummy' argument to `arg'.  Filter out
-	threads we're not interested in.
-	(same_lwp, find_lwp_pid): New.
-	(linux_wait_for_lwp): Change `pid' argument's type from int to
-	ptid_t.  Adjust.
-	(linux_wait_for_event): Rename to ...
-	(linux_wait_for_event_1): ... this.  Change `pid' argument's type
-	from int to ptid_t.  Adjust.
-	(linux_wait_for_event): New.
-	(linux_wait_1): Add `ptid' argument.  Change return type to
-	ptid_t.  Adjust.  Use last_thread_of_process_p.  Remove processes
-	that exit from the process table.
-	(linux_wait): Add `ptid' argument.  Change return type to ptid_t.
-	Adjust.
-	(mark_lwp_dead): New.
-	(wait_for_sigstop): Adjust to use ptids.  If a process exits while
-	stopping all threads, mark its main lwp as dead.
-	(linux_set_resume_request, linux_resume_one_thread): Adjust to use
-	ptids.
-	(fetch_register, usr_store_inferior_registers)
-	(regsets_fetch_inferior_registers)
-	(regsets_store_inferior_registers, linux_read_memory)
-	(linux_write_memory): Inline `inferior_pid'.
-	(linux_look_up_symbols): Adjust to use per-process
-	`thread_db_active'.
-	(linux_request_interrupt): Adjust to use ptids.
-	(linux_read_auxv): Inline `inferior_pid'.
-	(initialize_low): Don't reference thread_db_active.
-	* gdb_proc_service.h (struct ps_prochandle) <pid>: Remove.
-	* proc-service.c (ps_lgetregs): Use find_lwp_pid.
-	(ps_getpid): Return the pid of the current inferior.
-	* thread-db.c (proc_handle, thread_agent): Delete.
-	(thread_db_create_event, thread_db_enable_reporting): Adjust to
-	per-process data.
-	(find_one_thread): Change argument type to ptid_t.  Adjust to
-	per-process data.
-	(maybe_attach_thread): Adjust to per-process data and ptids.
-	(thread_db_find_new_threads): Ditto.
-	(thread_db_init): Ditto.
-	* spu-low.c (spu_create_inferior, spu_attach): Add process to
-	processes table.  Adjust to use ptids.
-	(spu_kill, spu_detach): Adjust interface.  Remove process from
-	processes table.
-	(spu_join, spu_thread_alive): Adjust interface.
-	(spu_wait): Adjust interface.  Remove process from processes
-	table.  Adjust to use ptids.
-	* win32-low.c (current_inferior_tid): Delete.
-	(current_inferior_ptid): New.
-	(debug_event_ptid): New.
-	(thread_rec): Take a ptid.  Adjust.
-	(child_add_thread): Add `pid' argument.  Adjust to use ptids.
-	(child_delete_thread): Ditto.
-	(do_initial_child_stuff): Add `attached' argument.  Add process to
-	processes table.
-	(child_fetch_inferior_registers, child_store_inferior_registers):
-	Adjust.
-	(win32_create_inferior): Pass 0 to do_initial_child_stuff.
-	(win32_attach): Pass 1 to do_initial_child_stuff.
-	(win32_kill): Adjust interface.  Remove process from processes
-	table.
-	(win32_detach): Ditto.
-	(win32_join): Adjust interface.
-	(win32_thread_alive): Take a ptid.
-	(win32_resume): Adjust to use ptids.
-	(get_child_debug_event): Ditto.
-	(win32_wait): Adjust interface.  Remove exiting process from
-	processes table.
-
-2009-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	Non-stop mode support.
-
-	* server.h (non_stop): Declare.
-	(gdb_client_data, handler_func): Declare.
-	(delete_file_handler, add_file_handler, start_event_loop):
-	Declare.
-	(handle_serial_event, handle_target_event, push_event)
-	(putpkt_notif): Declare.
-	* target.h (enum resume_kind): New.
-	(struct thread_resume): Replace `step' field by `kind' field.
-	(TARGET_WNOHANG): Define.
-	(struct target_ops) <wait>: Add `options' argument.
-	<supports_non_stop, async, start_non_stop>: New fields.
-	(target_supports_non_stop, target_async): New.
-	(start_non_stop): Declare.
-	(mywait): Add `options' argument.
-	* target.c (mywait): Add `options' argument.  Print child exit
-	notifications here.
-	(start_non_stop): New.
-	* server.c (non_stop, own_buf, mem_buf): New globals.
-	(struct vstop_notif): New.
-	(notif_queue): New global.
-	(queue_stop_reply, push_event, discard_queued_stop_replies)
-	(send_next_stop_reply): New.
-	(start_inferior): Adjust to use resume_kind.  Adjust to mywait
-	interface changes.
-	(attach_inferior): In non-stop mode, don't wait for the target
-	here.
-	(handle_general_set): Handle QNonStop.
-	(handle_query): When handling qC, return the current general
-	thread, instead of the first thread of the list.
-	(handle_query): If the backend supports non-stop mode, include
-	QNonStop+ in the qSupported query response.
-	(handle_v_cont): Adjust to use resume_kind.  Handle resume_stop
-	and non-stop mode.
-	(handle_v_attach, handle_v_run): Handle non-stop mode.
-	(handle_v_stopped): New.
-	(handle_v_requests): Report support for vCont;t.  Handle vStopped.
-	(myresume): Adjust to use resume_kind.  Handle non-stop.
-	(queue_stop_reply_callback): New.
-	(handle_status): Handle non-stop mode.
-	(main): Clear non_stop flag on reconnection.  Use the event-loop.
-	Refactor serial protocol handling from here ...
-	(process_serial_event): ... to this new function.  When GDB
-	selects any thread, select one here.  In non-stop mode, wait until
-	GDB acks all pending events before exiting.
-	(handle_serial_event, handle_target_event): New.
-	* remote-utils.c (remote_open): Install remote_desc in the event
-	loop.
-	(remote_close): Remove remote_desc from the event loop.
-	(putpkt_binary): Rename to...
-	(putpkt_binary_1): ... this.  Add `is_notic' argument.  Handle it.
-	(putpkt_binary): New as wrapper around putpkt_binary_1.
-	(putpkt_notif): New.
-	(prepare_resume_reply): In non-stop mode, don't change the
-	general_thread.
-	* event-loop.c: New.
-	* Makefile.in (OBJ): Add event-loop.o.
-	(event-loop.o): New rule.
-
-	* linux-low.h (pid_of): Moved here.
-	(lwpid_of): New.
-	(get_lwp_thread): Use lwpid_of.
-	(struct lwp_info): Delete `lwpid' field.  Add `suspended' field.
-	* linux-low.c (pid_of): Delete.
-	(inferior_pid): Use lwpid_of.
-	(linux_event_pipe): New.
-	(target_is_async_p): New.
-	(delete_lwp): New.
-	(handle_extended_wait): Use lwpid_of.
-	(add_lwp): Don't set lwpid field.
-	(linux_attach_lwp): Adjust debug output.  Use lwpid_of.
-	(linux_kill_one_lwp): If killing a running lwp, stop it first.
-	Use lwpid_of.  Adjust to linux_wait_for_event interface changes.
-	(linux_detach_one_lwp): If detaching from a running lwp, stop it
-	first.  Adjust to linux_wait_for_event interface changes.  Use
-	lwpid_of.
-	(linux_detach): Don't delete the main lwp here.
-	(linux_join): Use my_waitpid.  Avoid signal_pid.  Use lwpid_of.
-	(status_pending_p): Don't consider explicitly suspended lwps.
-	(linux_wait_for_lwp): Take an integer pid instead of a lwp_info
-	pointer.  Add OPTIONS argument.  Change return type to int.  Use
-	my_waitpid instead of sleeping.  Handle WNOHANG.  Use lwpid_of.
-	(linux_wait_for_event): Take an integer pid instead of a lwp_info
-	pointer.  Add status pointer argument.  Return a pid instead of a
-	status.  Use lwpid_of.  Adjust to linux_wait_for_lwp interface
-	changes.  In non-stop mode, don't switch to a random thread.
-	(linux_wait): Rename to...
-	(linux_wait_1): ... this.  Add target_options argument, and handle
-	it.  Adjust to use resume_kind.  Use lwpid_of.  In non-stop mode,
-	don't handle the continue thread.  Handle TARGET_WNOHANG.  Merge
-	clean exit and signal exit code.  Don't stop all threads in
-	non-stop mode.  In all-stop mode, only stop all threads when
-	reporting a stop to GDB.  Handle explicit thread stop requests.
-	(async_file_flush, async_file_mark): New.
-	(linux_wait): New.
-	(send_sigstop): Use lwpid_of.
-	(wait_for_sigstop): Use lwpid_of.  Adjust to linux_wait_for_event
-	interface changes.  In non-stop mode, don't switch to a random
-	thread.
-	(linux_resume_one_lwp): Use lwpid_of.
-	(linux_continue_one_thread, linux_queue_one_thread): Merge into ...
-	(linux_resume_one_thread): ... this.  Handle resume_stop.  In
-	non-stop mode, don't look for pending flag in all threads.
-	(resume_status_pending_p): Don't consider explicitly suspended
-	threads.
-	(my_waitpid): Reimplement.  Emulate __WALL.
-	(linux_request_interrupt, linux_read_offsets, linux_xfer_siginfo):
-	Use lwpid_of.
-	(sigchld_handler, linux_supports_non_stop, linux_async)
-	(linux_start_non_stop): New.
-	(linux_target_ops): Register linux_supports_non_stop, linux_async
-	and linux_start_non_stop.
-	(initialize_low): Install SIGCHLD handler.
-	* thread-db.c (thread_db_create_event, find_one_thread)
-	(thread_db_get_tls_address): Use lwpid_of.
-	* win32-low.c (win32_detach): Adjust to use resume_kind.
-	(win32_wait): Add `options' argument.
-	* spu-low.c (spu_resume): Adjust to use resume_kind.
-	(spu_wait): Add `options' argument.
-
-2009-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	Decouple target code from remote protocol.
-
-	* target.h (enum target_waitkind): New.
-	(struct target_waitstatus): New.
-	(struct target_ops) <wait>: Return an unsigned long.  Take a
-	target_waitstatus pointer instead of a char pointer.
-	(mywait): Likewise.
-	* target.c (mywait): Change prototype to return an unsigned long.
-	Take a target_waitstatus pointer instead of a char pointer.  Adjust.
-	* server.h (thread_from_wait, old_thread_from_wait): Delete
-	declarations.
-	(prepare_resume_reply): Change prototype to take a
-	target_waitstatus.
-	* server.c (thread_from_wait, old_thread_from_wait): Delete.
-	(last_status, last_ptid): New.
-	(start_inferior): Remove "statusptr" argument.  Adjust.  Return a
-	pid instead of a signal.
-	(attach_inferior): Remove "status" and "signal" parameters.
-	Adjust.
-	(handle_query): For qGetTLSAddr, parse the thread id with strtol,
-	not as an address.
-	(handle_v_cont, handle_v_attach, handle_v_run, handle_v_kill)
-	(handle_v_requests, myresume): Remove "status" and "signal"
-	parameters.  Adjust.
-	(handle_status): New.
-	(main): Delete local `status'.  Adjust.
-	* remote-utils.c: Include target.h.
-	(prepare_resume_reply): Change prototype to take a
-	target_waitstatus.  Adjust.
-
-	* linux-low.c (linux_wait): Adjust to new target_ops->wait
-	interface.
-	* spu-low.c (spu_wait): Adjust.
-	* win32-low.c (enum target_waitkind, struct target_waitstatus):
-	Delete.
-	(win32_wait): Adjust.
-
-2009-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* target.h (struct thread_resume): Delete leave_stopped member.
-	(struct target_ops): Add a `n' argument to the `resume' callback.
-	* server.c (start_inferior): Adjust.
-	(handle_v_cont, myresume): Adjust.
-	* linux-low.c (check_removed_breakpoint): Adjust to resume
-	interface change, and to removed leave_stopped field.
-	(resume_ptr): Delete.
-	(struct thread_resume_array): New.
-	(linux_set_resume_request): Add new `arg' parameter.  Adjust to
-	resume interface change.
-	(linux_continue_one_thread, linux_queue_one_thread)
-	(resume_status_pending_p): Check if the resume field is NULL
-	instead of checking the leave_stopped member.
-	(linux_resume): Adjust to the target resume interface change.
-	* spu-low.c (spu_resume): Adjust to the target resume interface
-	change.
-	* win32-low.c (win32_detach, win32_resume): Ditto.
-
-2009-04-01  Pedro Alves  <pedro@codesourcery.com>
-
-	* linux-low.c (linux_wait_for_event): Don't clear the `stepping'
-	flag.
-	(wait_for_sigstop): Don't leave a finished single-step SIGTRAP
-	pending.
-	(linux_continue_one_thread): Only preserve the stepping flag if
-	there's a pending breakpoint.
-
-2009-03-31  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (main): After the inferior having exited, call
-	remote_close before exiting gdbserver.
-
-2009-03-25  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	Fix size of FPSCR in Power 7 processors.
-	* linux-ppc-low.c (PPC_FEATURE_ARCH_2_05): Remove #define.
-	(PPC_FEATURE_HAS_DFP): New #define.
-	(ppc_arch_setup): Check for DFP feature instead of ISA 2.05 to decide on
-	size of the FPSCR.
-
-2009-03-23  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_query) Whitespace and formatting.
-
-2009-03-22  Pedro Alves  <pedro@codesourcery.com>
-
-	* i387-fp.c, linux-arm-low.c, linux-cris-low.c,
-	linux-crisv32-low.c, linux-i386-low.c, linux-low.c,
-	linux-mips-low.c, linux-s390-low.c, linux-sparc-low.c,
-	linux-x86-64-low.c, linux-xtensa-low.c, proc-service.c,
-	regcache.c, remote-utils.c, server.c, spu-low.c, target.h,
-	thread-db.c, win32-low.c, xtensa-xtregs.c, gdbreplay.c,
-	Makefile.in, configure.ac: Fix whitespace throughout.
-	* configure: Regenerate.
-
-2009-03-22  Pedro Alves  <pedro@codesourcery.com>
-
-	* inferiors.c (find_inferior): Make it safe for the callback
-	function to delete the currently iterated inferior.
-
-2009-03-22  Pedro Alves  <pedro@codesourcery.com>
-
-	* Makefile.in (linuw_low_h): Move higher.
-	(thread-db.o): Depend on $(linux_low_h).
-
-2009-03-17  Pedro Alves  <pedro@codesourcery.com>
-
-	Rename "process" to "lwp" throughout.
-
-	* linux-low.c (all_processes): Rename to...
-	(all_lwps): ... this.
-	(inferior_pid, handle_extended_wait, get_stop_pc): Adjust.
-	(add_process): Rename to ...
-	(add_lwp): ... this.  Adjust.
-	(linux_create_inferior): Adjust.
-	(linux_attach_lwp): Adjust.
-	(linux_attach): Adjust.
-	(linux_kill_one_process): Rename to ...
-	(linux_kill_one_lwp): ... this.  Adjust.
-	(linux_kill): Adjust.
-	(linux_detach_one_process): Rename to ...
-	(linux_detach_one_lwp): ... this.  Adjust.
-	(linux_detach): Adjust.
-	(check_removed_breakpoint): Adjust.
-	(status_pending_p): Adjust.
-	(linux_wait_for_process): Rename to ...
-	(linux_wait_for_lwp): ... this.  Adjust.
-	(linux_wait_for_event): Adjust.
-	(send_sigstop): Adjust.
-	(wait_for_sigstop): Adjust.
-	(stop_all_processes): Rename to ...
-	(stop_all_lwps): ... this.
-	(linux_resume_one_process): Rename to ...
-	(linux_resume_one_lwp): ... this.  Adjust.
-	(linux_set_resume_request, linux_continue_one_thread)
-	(linux_queue_one_thread, resume_status_pending_p)
-	(usr_store_inferior_registers, regsets_store_inferior_registers)
-	(linux_request_interrupt, linux_read_offsets, linux_xfer_siginfo):
-	Adjust.
-	* linux-low.h (get_process): Rename to ...
-	(get_lwp): ... this.  Adjust.
-	(get_thread_process): Rename to ...
-	(get_thread_lwp): ... this.  Adjust.
-	(get_process_thread): Rename to ...
-	(get_lwp_thread): ... this.  Adjust.
-	(struct process_info): Rename to ...
-	(struct lwp_info): ... this.
-	(all_processes): Rename to ...
-	(all_lwps): ... this.
-	* proc-service.c (ps_lgetregs): Adjust.
-	* thread-db.c (thread_db_create_event, find_one_thread)
-	(maybe_attach_thread, thread_db_get_tls_address): Adjust.
-
-2009-03-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_query): Handle "qAttached".
-
-2009-03-13  Nathan Sidwell  <nathan@codesourcery.com>
-
-	* Makefile.in, hostio-errno.c, errno.c, xtensa-xtregs.c: Change to
-	GPLv3, update license URL.
-
-2009-03-01  Doug Evans  <dje@google.com>
-
-	* Makefile.in (INCLUDE_CFLAGS): Add -I$(srcdir)/../common.
-	(server_h): Add gdb_signals.h.
-	(signals.o): Update.
-	* server.h (target_signal_from_host,target_signal_to_host_p)
-	(target_signal_to_host,target_signal_to_name): Moved to gdb_signals.h.
-
-2009-02-14  Pierre Muller  <muller@ics.u-strasbg.fr>
-
-	* remote-utils.c (getpkt): Also generate remote-debug
-	information if noack_mode is set.
-
-2009-02-06  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_query): Report qXfer:siginfo:read and
-	qXfer:siginfo:write as supported and handle them.
-	* target.h (struct target_ops) <qxfer_siginfo>: New field.
-	* linux-low.c (linux_xfer_siginfo): New.
-	(linux_target_ops): Set it.
-
-2009-01-26  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (gdbserver_usage): Mention --remote-debug.
-	(main): Accept '--remote-debug' switch.
-
-2009-01-18  Doug Evans  <dje@google.com>
-
-	* regcache.c (new_register_cache): No need to check result of xcalloc.
-	* server.c (handle_search_memory): Back out calls to xmalloc,
-	result is checked and error is returned to user upon failure.
-	(handle_query): Ditto.  Add more checks for result of malloc.
-	(handle_v_cont): Check result of malloc, report error back to
-	user upon failure.
-	(handle_v_run): Ditto.  Call freeargv.
-	* server.h (freeargv): Declare.
-	* utils.c (freeargv): New fn.
-
-2009-01-15  Doug Evans  <dje@google.com>
-
-	* gdbreplay.c (perror_with_name): Make arg const char *.
-	* server.h (target_signal_to_name): Make return type const char *.
-	* thread-db.c (thread_db_err_str): Make return type const char *.
-	* utils.c (perror_with_name): Make arg const char *.
-
-2009-01-14  Pedro Alves  <pedro@codesourcery.com>
-
-	* win32-low.c (get_child_debug_event): Issue a final DBG_CONTINUE
-	when handling a EXIT_PROCESS_DEBUG_EVENT.
-
-2009-01-06  Joel Brobecker  <brobecker@adacore.com>
-
-	* gdbreplay.c (gdbreplay_version): Update copyright year.
-	* server.c (gdbserver_version): Likewise.
-
-2009-01-05  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_attach_lwp): Add some comments/fixmes.
-	(handle_extended_wait): Improve comment.
-
-2008-12-13  Doug Evans  <dje@google.com>
-
-	* utils.c (xmalloc,xcalloc,xstrdup): New fns.
-	* server.h (ATTR_MALLOC): New macro.
-	(xmalloc,xcalloc,xstrdup): Declare.
-	* hostio.c: Replace malloc,calloc,strdup with xmalloc,xcalloc,xstrdup.
-	* inferiors.c: Ditto.
-	* linux-low.c: Ditto.
-	* mem-break.c: Ditto.
-	* regcache.c: Ditto.
-	* remote-utils.c: Ditto.
-	* server.c: Ditto.
-	* target.c: Ditto.
-	* win32-low.c: Ditto.
-
-2008-12-12  Doug Evans  <dje@google.com>
-
-	* linux-low.c (linux_wait_for_process): Don't clobber current_inferior
-	in debugging printf.
-
-	* linux-low.c (handle_extended_wait): Simplify, use my_waitpid.
-
-2008-12-09  Doug Evans  <dje@google.com>
-
-	* linux-low.h (struct process_info): Delete member tid, unused.
-	* thread-db.c (find_one_thread): Update.
-	(maybe_attach_thread): Update.
-
-2008-12-02  Pedro Alves  <pedro@codesourcery.com>
-
-	* target.h (struct target_ops): Add qxfer_osdata member.
-	* linux-low.c: Include ctype.h and pwd.h and sys/types.h
-	and dirent.h.
-	(linux_qxfer_osdata): New functions.
-	(linux_target_ops): Register linux_qxfer_osdata as qxfer_osdata
-	callback.
-	* server.c (handle_query): Handle "qXfer:osdata:read:".
-	* remote-utils.c (buffer_grow, buffer_free, buffer_init, buffer_finish)
-	(buffer_xml_printf): New functions.
-	* server.h (struct buffer): New.
-	(buffer_grow_str, buffer_grow_str0): New macros.
-	(buffer_grow, buffer_free, buffer_init, buffer_finish)
-	(buffer_xml_printf): Declare.
-
-2008-11-24  Doug Evans  <dje@google.com>
-
-	* Makefile.in (VERSION,DIST,LINT,LINTFLAGS): Delete, unused.
-
-2008-11-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (handle_v_run): Always use the supplied argument list.
-
-2008-11-19  Bob Wilson  <bob.wilson@acm.org>
-
-	* xtensa-xtregs.c (XTENSA_ELF_XTREG_SIZE): Change to 4.
-	(xtensa_regmap_table): Add entry for scompare1.
-
-2008-11-18  Thiago Jung Bauermann  <bauerman@br.ibm.com>
-
-	* Makefile.in (powerpc-isa205-32l.o, powerpc-isa205-32l.c,
-	powerpc-isa205-altivec32l.o, powerpc-isa205-altivec32l.c,
-	powerpc-isa205-vsx32l.o, powerpc-isa205-vsx32l.c,
-	powerpc-isa205-64l.o, powerpc-isa205-64l.c,
-	powerpc-isa205-altivec64l.o, powerpc-isa205-altivec64l.c,
-	powerpc-isa205-vsx64l.o, powerpc-isa205-vsx64l.c): New targets.
-	* configure.srv (powerpc*-*-linux*): Add ISA 2.05 object files and
-	XML target descriptions.
-	* linux-ppc-low.c (ppc_arch_setup): Init registers with 64-bit FPSCR
-	when inferior is running on an ISA 2.05 or later processor.  Add
-	special case to return offset for full 64-bit slot of FPSCR when
-	in 32-bits.
-
-2008-11-14  Daniel Gutson  <dgutson@codesourcery.com>
-
-	* Makefile.in (SFILES, clean): Added sparc64 files.
-	(reg-sparc64.o, reg-sparc64.c): New.
-	* configure.srv (sparc*-*-linux*): New configuration.
-	* linux-low.c (regsets_fetch_inferior_registers): Swap ptrace
-	syscall arguments for SPARC.
-	(regsets_store_inferior_registers): Likewise.
-	* linux-sparc-low.c: New file.
-
-2008-10-21  Doug Evans  <dje@google.com>
-
-	* Makefile.in (BFD_DIR,BFD,BFD_SRC,BFD_CFLAGS): Delete.
-	(READLINE_DIR,READLINE_DEP): Delete.
-	(INTERNAL_CFLAGS): Update.
-	(LINTFLAGS): Update.
-
-2008-10-10  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_v_run): If GDB didn't specify an argv, use the
-	whole argv from the last run, not just argv[0].
-
-2008-09-08  Pedro Alves  <pedro@codesourcery.com>
-
-	* regcache.c (new_register_cache): Return NULL if the register
-	cache size isn't known yet.
-	(free_register_cache): Avoid dereferencing a NULL regcache.
-
-2008-09-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.srv: Merge MIPS and MIPS64.
-
-2008-08-24  Maciej W. Rozycki  <macro@linux-mips.org>
-
-	* Makefile.in (uninstall): Apply $(EXEEXT) too.
-
-2008-08-18  Luis Machado  <luisgpm@br.ibm.com>
-
-	* Makefile.in: Add required vsx dependencies.
-
-	* linux-ppc-low: Define PPC_FEATURE_HAS_VSX.
-	Declare init_registers_powerpc_vsx32l.
-	Declare init_registers_powerpc_vsx64l.
-	Define PTRACE_GETVSXREGS and PTRACE_SETVSXREGS.
-	(ppc_arch_setup): Check for VSX in hwcap.
-	(ppc_fill_vsxregset): New function.
-	(ppc_store_vsxregset): New function.
-	Add new VSX entry in regset_info target_regsets.
-
-	* configure.srv: Add new VSX dependencies.
-
-2008-08-12  Pedro Alves  <pedro@codesourcery.com>
-
-	* remote-utils.c (noack_mode, transport_is_reliable): New globals.
-	(remote_open): Set or clear transport_is_reliable.
-	(putpkt_binary): Don't expect acks in noack mode.
-	(getpkt): Don't send ack/nac in noack mode.
-	* server.c (handle_general_set): Handle QStartNoAckMode.
-	(handle_query): If connected by tcp pass QStartNoAckMode+ in
-	qSupported.
-	(main): Reset noack_mode on every connection.
-	* server.h (noack_mode): Declare.
-
-2008-08-07  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
-
-	* Makefile.in (GDBREPLAY_OBS): New variable.
-	(gdbreplay$(EXEEXT)): Use it to avoid unportable $^.
-
-2008-08-05  Ulrich Weigand  <uweigand@de.ibm.com>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_resume_one_process): Ignore ESRCH.
-	(usr_store_inferior_registers): Likewise.
-	(regsets_store_inferior_registers): Likewise.
-
-2008-07-31  Rolf Jansen  <rj@surtec.com>
-	    Pedro Alves  <pedro@codesourcery.com>
-
-	* configure.ac: Check for memmem declaration.
-	* server.c [HAVE_MALLOC_H]: Include malloc.h.
-	(disable_packet_vCont, disable_packet_Tthread, disable_packet_qC)
-	(disable_packet_qfThreadInfo): Unconditionally compile.
-	* server.h [!HAVE_DECL_MEMMEM]: Declare memmem.
-	* configure, config.in: Regenerate.
-
-2008-07-28  Doug Kwan  <dougkwan@google.com>
-
-	* linux-low.c (sys/dir.h, sys/user.h): Remove includes.
-	(linux_write_memory): Remove declaration of errno.
-
-2008-07-12  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-low.c (handle_extended_wait): Do not use "status"
-	variable uninitialized.
-
-2008-07-07  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_v_attach): Inhibit reporting dll changes.
-
-2008-06-27  Pedro Alves  <pedro@codesourcery.com>
-
-	* remote-utils.c (prepare_resume_reply): If requested, don't
-	output "thread:TID" in the T stop reply.
-
-	* server.c (disable_packet_vCont, disable_packet_Tthread)
-	(disable_packet_qC, disable_packet_qfThreadInfo): New globals.
-	(handle_query): If requested, disable support for qC, qfThreadInfo
-	and qsThreadInfo.
-	(handle_v_requests): If requested, disable support for vCont.
-	(gdbserver_show_disableable): New.
-	(main): Handle --disable-packet and --disable-packet=LIST.
-
-	* server.h (disable_packet_vCont, disable_packet_Tthread)
-	(disable_packet_qC, disable_packet_qfThreadInfo): Declare.
-
-2008-06-20  Carlos O'Donell  <carlos@codesourcery.com>
-
-	* server.c (gdbserver_usage): Mention --version.
-
-2008-06-06  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (gdbreplay.o): New rule.
-
-2008-06-06  Joseph Myers  <joseph@codesourcery.com>
-
-	* gdbreplay.c (gdbreplay_version): Say gdbreplay in version
-	message, not gdbserver.
-
-2008-06-05  Vladimir Prus  <vladimir@codesourcery.com>
-	    Nathan Sidwell  <nathan@codesourcery.com>
-	    Joseph Myers  <joseph@codesourcery.com>
-
-	* acinclude.m4: Include ../../config/acx.m4.
-	* configure.ac: Use ACX_PKGVERSION and ACX_BUGURL.
-	* configure, config.in: Regenerate.
-	* Makefile.in (gdbreplay$(EXEEXT)): Add version.o.
-	* server.c (gdbserver_version): Print PKGVERSION.
-	(gdbsrever_usage): Add stream parameter.  Print REPORT_BUGS_TO.
-	(main): Adjust gdbserver_usage calls.
-	* gdbreplay.c (version, host_name): Add declarations.
-	(gdbreplay_version, gdbreplay_usage): New.
-	(main): Accept --version and --help options.
-
-2008-06-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-arm-low.c (thumb_breakpoint, thumb_breakpoint_len): New.
-	(arm_breakpoint_at): Handle Thumb.
-	(the_low_target): Add comment.
-
-2008-05-29  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-ppc-low.c (ppc_collect_ptrace_register): Clear buffer.
-
-2008-05-09  Doug Evans  <dje@google.com>
-
-	* server.h (decode_search_memory_packet): Declare.
-	* remote-utils.c (decode_search_memory_packet): New fn.
-	* server.c (handle_search_memory_1): New fn.
-	(handle_search_memory): New fn.
-	(handle_query): Process qSearch:memory packets.
-
-2008-05-08  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* regcache.c (registers_length): Remove.
-	(set_register_cache): Verify that PBUFSIZ is large enough to hold a
-	full register packet.
-	* regcache.h (registers_length): Remove prototype.
-	* server.h (PBUFSIZ): Define to 16384.
-
-2008-05-03  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv (powerpc*-*-linux*): Set srv_regobj to
-	powerpc-32l.o, powerpc-altivec32l.o, powerpc-e500l.o,
-	powerpc-64l.o, and powerpc-altivec64l.o.
-	Remove rs6000/powerpc-32.xml, rs6000/powerpc-64.xml, and
-	rs6000/powerpc-e500.xml; add rs6000/powerpc-32l.xml,
-	rs6000/powerpc-altivec32l.xml, rs6000/powerpc-e500l.xml,
-	rs6000/powerpc-64l.xml, rs6000/powerpc-altivec64l.xml,
-	rs6000/power-linux.xml, and rs6000/power64-linux.xml
-	to srv_xmlfiles.
-
-	* Makefile.in (reg-ppc.o, reg-ppc.c): Remove, replace by ...
-	(powerpc-32l.o, powerpc-32l.c): ... these new rules.
-	(powerpc-32.o, powerpc-32.c): Remove, replace by ...
-	(powerpc-altivec32l.o, powerpc-altivec32l.c): ... these new rules.
-	(powerpc-e500.o, powerpc-e500.c): Remove, replace by ...
-	(powerpc-e500l.o, powerpc-e500l.c): ... these new rules.
-	(reg-ppc64.o, reg-ppc64.c): Remove, replace by ...
-	(powerpc-64l.o, powerpc-64l.c): ... these new rules.
-	(powerpc-64.o, powerpc-64.c): Remove, replace by ...
-	(powerpc-altivec64l.o, powerpc-altivec64l.c): ... these new rules.
-	(clean): Update.
-
-	* linux-ppc-low.c (init_registers_ppc): Remove, replace by ...
-	(init_registers_powerpc_32l): ... this new prototype.
-	(init_registers_powerpc_32): Remove, replace by ...
-	(init_registers_powerpc_altivec32l): ... this new prototype.
-	(init_registers_powerpc_e500): Remove, replace by ...
-	(init_registers_powerpc_e500l): ... this new prototype.
-	(init_registers_ppc64): Remove, replace by ...
-	(init_registers_powerpc_64l): ... this new prototype.
-	(init_registers_powerpc_64): Remove, replace by ...
-	(init_registers_powerpc_altivec64l): ... this new prototype.
-	(ppc_num_regs): Set to 73.
-	(PT_ORIG_R3, PT_TRAP): Define if necessary.
-	(ppc_regmap, ppc_regmap_e500): Add values for orig_r3 and trap.
-	(ppc_cannot_store_register): Handle orig_r3 and trap.
-	(ppc_arch_setup): Update init_registers_... calls.
-	(ppc_fill_gregset): Handle orig_r3 and trap.
-
-	* inferiors.c (clear_inferiors): Reset current_inferior.
-
-2008-04-23  Paolo Bonzini  <bonzini@gnu.org>
-
-	* acinclude.m4: Add override.m4.
-	* configure: Regenerate.
-
-2008-04-21  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-ppc-low.c (ppc_arch_setup): Reset ppc_hwcap after the
-	initial call to init_register_ppc64.
-
-2008-04-21  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv (powerpc64-*-linux*, powerpc-*-linux*): Merge into
-	single powerpc*-*-linux* case.
-	(s390-*-linux*, s390x-*-linux*): Merge into single s390*-*-linux* case.
-
-2008-04-17  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv [powerpc64-*-linux*]: Remove powerpc-e500.o from
-	srv_regobj.  Remove rs6000/powerpc-e500.xml and rs6000/power-spe.xml
-	from reg_xmlfiles.
-	* linux-ppc-low.c: Include <elf.h>.
-	(PPC_FEATURE_HAS_ALTIVEC, PPC_FEATURE_HAS_SPE): Define.
-	(ppc_hwcap): New global variable.
-	(ppc_regmap): Remove __SPE__ #ifdef sections.
-	(ppc_regmap_e500): New global variable.
-	(ppc_cannot_store_register): Update __SPE__ special case.
-	(ppc_get_hwcap): New function.
-	(ppc_arch_setup): Use it to determine whether inferior supports
-	AltiVec or SPE registers.  Set the_low_target.regmap if appropriate.
-	(ppc_fill_vrregset, ppc_store_vrregset): Define unconditionally.
-	Do not access registers if target does not support AltiVec.
-	(ppc_fill_evrregset, ppc_store_evrregset): Define unconditionally.
-	Do not access registers if target does not support SPE.
-	(target_regsets): Unconditionally include AltiVec and SPE regsets.
-
-2008-04-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (disabled_regsets, num_regsets): New.
-	(use_regsets_p): Delete.
-	(linux_wait_for_process): Clear disabled_regsets.
-	(regsets_fetch_inferior_registers): Check and set it.
-	(regsets_store_inferior_registers): Likewise.
-	(linux_fetch_registers, linux_store_registers): Do not use
-	use_regsets_p.
-	(initialize_low): Allocate disabled_regsets.
-
-2008-04-14  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (LIBOBJS): New.
-	(OBS): Use LIBOBJS.
-	(memmem.o): New rule.
-	* configure.ac: Use AC_CONFIG_LIBOBJ_DIR and check for memmem.
-	* configure: Regenerated.
-
-2008-04-04  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* server.c (handle_query): Never return "unsupported" for
-	qXfer:features:read queries.
-
-2008-03-27  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* server.c (get_features_xml): Fix inverted condition.
-	(handle_query): Always support qXfer:feature:read.
-
-2008-03-10  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (wrapper_argv): New.
-	(start_inferior): Handle wrapper_argv.  If set, expect an extra
-	trap.
-	(gdbserver_usage): Document --wrapper.
-	(main): Parse --wrapper.
-
-2008-02-28  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv [powerpc64-*-linux*]: Add all files mentioned for
-	powerpc-*-linux* to srv_regobj and reg_xmlfiles.
-	* linux-ppc-low.c (ppc_get_pc): Support bi-arch operation.
-	(ppc_set_pc): Likewise.
-	(ppc_arch_setup): New function.
-	(ppc_fill_gregset): Call ppc_collect_ptrace_register instead
-	of collect_register.
-	(the_low_target): Use ppc_arch_setup as arch_setup initializer.
-
-2008-02-28  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv [powerpc64-*-linux*]: Use linux-ppc-low.o
-	instead of linux-ppc64-low.o.
-	* linux-ppc64-low.c: Remove file.
-	* Makefile.in (SFILES): Remove linux-ppc64-low.c.
-	(linux-ppc64-low.o): Remove rule.
-
-	* linux-ppc-low.c (init_registers_ppc64): Add prototype.
-	(init_registers_powerpc_64): Likewise.
-	(ppc_regmap): Conditionally define depending on __powerpc64__.
-	(ppc_cannot_store_register): Do not special-case "fpscr" when
-	compiled on __powerpc64__.
-	(ppc_collect_ptrace_register): New function.
-	(ppc_supply_ptrace_register): New function.
-	(ppc_breakpoint): Change type to "unsigned int".
-	(ppc_breakpoint_at): Change type of "insn" to "unsigned int".
-	(the_low_target): Conditionally provide initializers for the
-	arch_setup member depending on __powerpc64__.  Install
-	collect_ptrace_register and supply_ptrace_register members.
-
-2008-02-28  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* regcache.h (gdbserver_xmltarget): Add extern declaration.
-	* server.c (gdbserver_xmltarget): Define.
-	(get_features_xml): Use it to replace "target.xml" and arch_string.
-
-	* configure.srv: Remove srv_xmltarget.  Add XML files that were
-	mentioned there to srv_xmlfiles instead.  Remove conditional tests
-	on gdb_cv_arm_iwmmxt, gdb_cv_ppc_altivec, gdb_cv_ppc_spe; set
-	srv_xmlfiles and srv_regobj to include all possible choices.
-	* configure.ac (srv_xmltarget): Remove.
-	(srv_xmlfiles): Do not add "target.xml".
-	(gdb_cv_arm_iwmmxt, gdb_cv_ppc_altivec, gdb_cv_ppc_spe): Remove
-	checks for supplementary target information.
-	* configure: Regenerate.
-	* Makefile.in (XML_TARGET): Remove.
-	(target.xml): Remove rule.
-	(clean): Do not clean up target.xml.
-	(.PRECIOUS): Do not mention target.xml.
-
-	* target.h (struct target_ops): Remove arch_string member.
-	* linux-low.c (linux_arch_string): Remove.
-	(linux_target_ops): Remove arch_string initializer.
-	* linux-low.h (struct linux_target_ops): Remove arch_string member.
-	* linux-i386-low.c (the_low_target): Remove arch_string initializer.
-	* linux-x86-64-low.c (the_low_target): Remove arch_string initializer.
-	* spu-low.c (spu_arch_string): Remove.
-	(spu_target_ops): Remove arch_string initializer.
-	* win32-low.c (win32_arch_string): Remove.
-	(win32_target_ops): Remove arch_string initializer.
-	* win32-low.h (struct win32_target_ops): Remove arch_string member.
-	* win32-arm-low.c (the_low_target): Remove arch_string initializer.
-	* win32-i368-low.c (the_low_target): Remove arch_string initializer.
-
-2008-02-27  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-low.h (struct linux_target_ops): Replace left_pad_xfer field
-	by collect_ptrace_register and supply_ptrace_register hooks.
-	* linux-low.c (fetch_register): Use supply_ptrace_register callback
-	instead of checking for the_low_target.left_pad_xfer.
-	(usr_store_inferior_registers): Use collect_ptrace_register callback
-	instead of checking for the_low_target.left_pad_xfer.
-
-	* linux-s390-low.c (s390_collect_ptrace_register): New function.
-	(s390_supply_ptrace_register): Likewise.
-	(s390_fill_gregset): Call s390_collect_ptrace_register.
-	(the_low_target): Update.
-
-	* linux-ppc64-low.c (ppc_collect_ptrace_register): New function.
-	(ppc_supply_ptrace_register): Likewise.
-	(the_low_target): Update.
-
-	* linux-i386-low.c (the_low_target): Update.
-	* linux-x86-64-low.c (the_low_target): Update.
-
-2008-02-27  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv [s390x-*-linux*]: Set srv_regobj to include both
-	reg-s390.o and reg-s390x.o.
-
-	* linux-low.c (new_inferior): New global variable.
-	(linux_create_inferior, linux_attach): Set it.
-	(linux_wait_for_process): Call the_low_target.arch_setup after the
-	target has stopped for the first time.
-	(initialize_low): Do not call the_low_target.arch_setup.
-
-	* linux-s390-low.c (s390_get_pc): Support bi-arch operation.
-	(s390_set_pc): Likewise.
-	(s390_arch_setup): New function.
-	(the_low_target): Use s390_arch_setup as arch_setup routine.
-
-	* regcache.c (realloc_register_cache): New function.
-	(set_register_cache): Call it for each existing regcache.
-
-2008-02-27  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* server.h (init_registers): Remove prototype.
-
-	* linux-low.h (struct linux_target_ops): Add arch_setup field.
-	* linux-low.c (initialize_low): Call the_low_target.arch_setup ()
-	instead of init_registers ().
-	* linux-arm-low.c (init_registers_arm): Add prototype.
-	(init_registers_arm_with_iwmmxt): Likewise.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-cris-low.c (init_registers_cris): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-crisv32-low.c (init_registers_crisv32): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-i386-low.c (init_registers_i386_linux): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-ia64-low.c (init_registers_ia64): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-m32r-low.c (init_registers_m32r): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-m68k-low.c (init_registers_m68k): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-mips-low.c (init_registers_mips_linux): Add prototype.
-	(init_registers_mips64_linux): Likewise.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-ppc-low.c (init_registers_ppc): Add prototype.
-	(init_registers_powerpc_32, init_registers_powerpc_e500): Likewise.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-ppc64-low.c (init_registers_ppc64): Add prototype.
-	(init_registers_powerpc_64): Likewise.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-s390-low.c (init_registers_s390): Add prototype.
-	(init_registers_s390x): Likewise.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-sh-low.c (init_registers_sh): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-x86-64-low.c (init_registers_x86_64_linux): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* linux-xtensa-low.c (init_registers_xtensa): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-
-	* win32-low.h (struct win32_target_ops): Add arch_setup field.
-	* win32-low.c (initialize_low): Call the_low_target.arch_setup ()
-	instead of init_registers ().
-	* win32-arm-low.c (init_registers_arm): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-	* win32-i386-low.c (init_registers_i386): Add prototype.
-	(the_low_target): Add initializer for arch_setup field.
-
-	* spu-low.c (init_registers_spu): Add prototype.
-	(initialize_low): Call initialie_registers_spu () instead of
-	initialize_registers ().
-
-2008-02-19  Pedro Alves  <pedro@codesourcery.com>
-
-	* server.c (handle_v_requests): When handling the vRun and vAttach
-	packets, if already debugging a process, don't kill it.  Return an
-	error instead.
-
-2008-02-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (handle_query): Correct length check.
-
-2008-02-14  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (do_initial_child_stuff): Add process handle
-	parameter.  Set current_process_handle and current_process_id from the
-	parameters. Clear globals.
-	(win32_create_inferior): Don't set current_process_handle and
-	current_process_id here.  Instead pass them on the call to
-	do_initial_child_stuff.
-	(win32_attach): Likewise.
-	(win32_clear_inferiors): New.
-	(win32_kill): Don't close the current process handle or the
-	current thread handle here.  Instead call win32_clear_inferiors.
-	(win32_detach): Don't open a new handle to the process.  Call
-	win32_clear_inferiors.
-	(win32_join): Don't rely on current_process_handle; open a new
-	handle using the process id.
-	(win32_wait): Call win32_clear_inferiors when the inferior process
-	has exited.
-
-2008-02-14  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (monitor_show_help): Add "exit".
-
-2008-02-11  Maxim Grigoriev  <maxim2405@gmail.com>
-
-	* Makefile.in (SFILES): Add linux-xtensa-low.c.
-	(clean): Add reg-xtensa.c.
-	(linux-xtensa-low.o, reg-xtensa.o, reg-xtensa.c): New dependencies.
-	* configure.srv (xtensa*-*-linux*) New target.
-	* linux-xtensa-low.c: New.
-	* xtensa-xtregs.c: New.
-
-2008-02-01  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* hostio.c: Don't include errno.h.
-	(errno_to_fileio_errno): Move to hostio-errno.
-	* hostio.c: (hostio_error): Remove the error parameter.  Defer the
-	error number outputting to the target->hostio_last_error callback.
-	(hostio_packet_error): Use FILEIO_EINVAL directly.
-	(handle_open, handle_pread, hostio_error, handle_unlink): Update
-	calls to hostio_error.
-	* hostio-errno.c: New.
-	* server.h (hostio_last_error_from_errno): Declare.
-	* target.h (target_ops): Add hostio_last_error member.
-	* linux-low.c (linux_target_op): Register hostio_last_error_from_errno
-	as hostio_last_error handler.
-	* spu-low.c (spu_target_ops): Likewise.
-	* win32-low.c [_WIN32_WCE] (win32_error_to_fileio_error)
-	(wince_hostio_last_error): New functions.
-	(win32_target_ops) [_WIN32_WCE]: Register wince_hostio_last_error
-	as hostio_last_error handler.
-	(win32_target_ops) [!_WIN32_WCE]: Register
-	hostio_last_error_from_errno as hostio_last_error handler.
-	* Makefile.in (SFILES): Add hostio.c and hostio-errno.c.
-	(hostio-errno.o): New rule.
-	* configure.ac (GDBSERVER_DEPFILES): Add $srv_hostio_err_objs.
-	* configure.srv (srv_hostio_err_objs): New variable.  Default to
-	hostio-errno.o.
-	(arm*-*-mingw32ce*): Set srv_hostio_err_objs to "".
-	* configure: Regenerate.
-
-2008-01-29  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_attach_lwp): Do not _exit after errors.
-	(linux_kill, linux_detach): Clean up the process list.
-	* remote-utils.c (remote_open): Improve port number parsing.
-	(putpkt_binary, input_interrupt): Only send interrupts if the target
-	is running.
-	* server.c (extended_protocol): Make static.
-	(attached): Define earlier.
-	(exit_requested, response_needed, program_argv): New variables.
-	(target_running): New.
-	(start_inferior): Clear attached here.
-	(attach_inferior): Set attached here.
-	(require_running): Define.
-	(handle_query): Use require_running and target_running.  Implement
-	"monitor exit".
-	(handle_v_attach, handle_v_run): New.
-	(handle_v_requests): Use require_running.  Handle vAttach and vRun.
-	(gdbserver_usage): Update.
-	(main): Redo argument parsing.  Handle --debug and --multi.  Handle
-	--attach along with other options or after the port.  Save
-	program_argv.  Support no initial program.  Resynchronize
-	communication with GDB after an error.  Handle "monitor exit".
-	Use require_running and target_running.  Always allow the extended
-	protocol.  Do not error out for Hc0 or Hc-1.  Do not automatically
-	restart in extended mode.
-	* README: Refer to the GDB manual.  Update --attach usage.
-
-2007-12-20  Andreas Schwab  <schwab@suse.de>
-
-	* linux-low.c (STACK_SIZE): Define.
-	(linux_tracefork_child): Use it.  Use __clone2 on ia64.
-	(linux_test_for_tracefork): Likewise.
-
-2007-12-18  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_wait_for_event): Update messages.  Do not
-	reinsert auto-delete breakpoints.
-	* mem-break.c (struct breakpoint): Change return type of handler to
-	int.
-	(set_breakpoint_at): Update handler type.
-	(reinsert_breakpoint_handler): Return 1 instead of calling
-	delete_breakpoint.
-	(reinsert_breakpoint_by_bp): Check for the original breakpoint before
-	setting a new one.
-	(check_breakpoints): Delete auto-delete breakpoints and return 2.
-	* mem-break.h (set_breakpoint_at): Update handler type.
-	* thread-db.c (thread_db_create_event, thread_db_create_event): Update.
-	* win32-low.c (auto_delete_breakpoint): New.
-	(get_child_debug_event): Use it.
-
-2007-12-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.ac: Check for pread and pwrite.
-	* hostio.c (handle_pread): Fall back to lseek and read.
-	(handle_pwrite): Fall back to lseek and write.
-	* config.in, configure: Regenerated.
-
-2007-12-07  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (myresume): Add own_buf argument.
-	(main): Update calls.
-
-2007-12-06  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_wait, linux_resume): Do not handle async I/O.
-	* remote-utils.c (remote_open): Do not call disable_async_io.
-	(block_async_io): Delete.
-	(unblock_async_io): Make static.
-	(initialize_async_io): New.
-	* server.c (handle_v_cont): Handle async I/O here.
-	(myresume): Likewise.  Move other common resume tasks here...
-	(main): ... from here.  Call initialize_async_io.  Disable async
-	I/O before the main loop.
-	* server.h (initialize_async_io): Declare.
-	(block_async_io, unblock_async_io): Delete prototypes.
-	* spu-low.c (spu_resume, spu_wait): Do not handle async I/O here.
-
-2007-12-06  Mick Davis  <mickd@goanna.iinet.net.au>
-
-	* remote-utils.c (readchar): Allow binary data in received messages.
-
-2007-12-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (attaching): New global.
-	(win32_create_inferior): Clear the `attaching' global.
-	(win32_attach): Set the `attaching' global.
-	(get_child_debug_event) [_WIN32_WCE]: Stop the inferior when
-	attaching.  Only set a breakpoint at the entry point if not
-	attaching.
-
-2007-12-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* server.c (main): Don't report dll events on the initial
-	connection on attaches.
-
-2007-12-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* server.c (main): Relax numerical bases supported for the pid of
-	the --attach command line argument.
-
-2007-12-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (win32_attach): Call OpenProcess before
-	DebugActiveProcess, not after.  Add last error output to error
-	call.
-
-2007-12-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (win32_get_thread_context)
-	(win32_set_thread_context): New functions.
-	(thread_rec): Use win32_get_thread_context.
-	(continue_one_thread, win32_resume): Use win32_set_thread_context.
-	* win32-low.h (win32_thread_info) [_WIN32_WCE]: Add `base_context'
-	field.
-
-2007-12-03  Leo Zayas
-	    Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (soft_interrupt_requested, faked_breakpoint): New
-	global variables.
-	(child_add_thread): Minor cleanup.
-	(child_continue): Resume artificially suspended threads before
-	calling ContinueDebugEvent.
-	(suspend_one_thread): New.
-	(fake_breakpoint_event): New.
-	(get_child_debug_event): Change return type to int.  Check here if
-	gdb sent an interrupt request.  If a soft interrupt was requested,
-	fake a breakpoint event.  Return 0 if there is no event to handle,
-	and 1 otherwise.
-	(win32_wait): Don't check here if gdb sent an interrupt request.
-	Ensure there is a valid event to handle.
-	(win32_request_interrupt): Add soft interruption method as last
-	resort.
-
-2007-12-03  Leo Zayas
-	    Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.h (win32_thread_info): Add descriptions to the
-	structure members.  Replace `suspend_count' counter by a
-	`suspended' flag.
-	* win32-low.c (thread_rec): Update condition of when to get the
-	context from the inferior.  Rely on ContextFlags being set if it
-	has already been retrieved.  Only suspend the inferior thread if
-	we haven't already.  Warn if that fails.
-	(continue_one_thread): s/suspend_count/suspended/.  Only call
-	ResumeThread once.  Warn if that fails.
-
-2007-12-02  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (win32_wait): Don't read from the inferior when it
-	has already exited.
-
-2007-12-02  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* Makefile.in (win32_low_h): New variable.
-	(win32-low.o): Add dependency on $(win32_low_h).
-	(win32-arm-low.o, win32-i386-low.o): New rules.
-
-2007-11-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* hostio.c: Correct copyright year.
-
-2007-11-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (OBS): Add hostio.o.
-	(hostio.o): New rule.
-	* server.h (handle_vFile): Declare.
-	* hostio.c: New file.
-	* server.c (handle_v_requests): Take packet_len and new_packet_len
-	for binary packets.  Call handle_vFile.
-	(main): Update call to handle_v_requests.
-
-2007-11-05  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c: Include <sched.h>.
-
-2007-11-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_tracefork_grandchild): New.
-	(linux_tracefork_child): Use clone.
-	(linux_test_for_tracefork): Use clone; allocate and free a stack.
-
-2007-10-31  Joel Brobecker  <brobecker@adacore.com>
-
-	* Makefile.in: Use $(SHELL) instead of "sh" to call regdat.sh.
-
-2007-10-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (handle_extended_wait): Handle unexpected signals.
-
-2007-10-23  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* inferiors.c (change_inferior_id): Delete.
-	(add_pid_to_list, pull_pid_from_list): New.
-	* linux-low.c (PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG)
-	(PTRACE_O_TRACESYSGOOD, PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK)
-	(PTRACE_O_TRACECLONE, PTRACE_O_TRACEEXEC, PTRACE_O_TRACEVFORKDONE)
-	(PTRACE_O_TRACEEXIT, PTRACE_EVENT_FORK, PTRACE_EVENT_VFORK)
-	(PTRACE_EVENT_CLONE, PTRACE_EVENT_EXEC, PTRACE_EVENT_VFORK_DONE)
-	(PTRACE_EVENT_EXIT, __WALL): Provide default definitions.
-	(stopped_pids, thread_db_active, must_set_ptrace_flags): New variables.
-	(using_threads): Always set to 1.
-	(handle_extended_wait): New.
-	(add_process): Do not set TID.
-	(linux_create_inferior): Set must_set_ptrace_flags.
-	(linux_attach_lwp): Remove TID argument.  Do not check using_threads.
-	Use PTRACE_SETOPTIONS.  Call new_thread_notify.  Update all callers.
-	(linux_thread_alive): Rename TID argument to LWPID.
-	(linux_wait_for_process): Handle unknown processes.  Do not use TID.
-	(linux_wait_for_event): Do not use TID or check using_threads.  Update
-	call to dead_thread_notify.  Call handle_extended_wait.
-	(linux_create_inferior): Use PTRACE_SETOPTIONS.
-	(send_sigstop): Delete sigstop_sent.
-	(wait_for_sigstop): Avoid TID.
-	(linux_supports_tracefork_flag, linux_tracefork_child, my_waitpid)
-	(linux_test_for_tracefork): New.
-	(linux_lookup_signals): Use thread_db_active and
-	linux_supports_tracefork_flag.
-	(initialize_low): Use thread_db_active and linux_test_for_tracefork.
-	* linux-low.h (get_process_thread): Avoid TID.
-	(struct process_ifo): Move thread_known and tid to the end.  Remove
-	sigstop_sent.
-	(linux_attach_lwp, thread_db_init): Update prototypes.
-	* server.h (change_inferior_id): Delete prototype.
-	(add_pid_to_list, pull_pid_from_list): New prototypes.
-	* thread-db.c (thread_db_use_events): New.
-	(find_first_thread): Rename to...
-	(find_one_thread): ...this.  Update callers and messages.  Do not
-	call fatal.  Check thread_db_use_events.  Do not call
-	change_inferior_id or new_thread_notify.
-	(maybe_attach_thread): Update.  Do not call new_thread_notify.
-	(thread_db_init): Set thread_db_use_events.  Check use_events.
-	* utils.c (fatal, warning): Correct message prefix.
-
-2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (clean): Remove new files.
-	(powerpc-32.o, powerpc-32.c, powerpc-e500.o, powerpc-e500.c)
-	(powerpc-64.o, powerpc-64.c): New rules.
-	* configure.srv: Use alternate register sets for powerpc64-*-linux*
-	with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux*
-	with SPE.
-	* linux-ppc-low.c (ppc_regmap): Do not fetch the FP registers for
-	SPE targets.
-	(ppc_cannot_store_register): Do not check for FPSCR for SPE targets.
-	(PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, ppc_fill_vrregset)
-	(ppc_store_vrregset, PTRACE_GETEVRREGS, PTRACE_SETEVRREGS)
-	(struct gdb_evrregset_t, ppc_fill_evrregset, ppc_store_evrregset): New.
-	(target_regsets): Add AltiVec and SPE register sets.
-	* configure.ac: Check for AltiVec and SPE.
-	* linux-ppc64-low.c (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS)
-	(ppc_fill_vrregset, ppc_store_vrregset): New.
-	(target_regsets): Add AltiVec register set.
-	* configure: Regenerated.
-
-2007-09-19  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (O_LARGEFILE): Define.
-	(linux_read_memory): Use /proc/PID/mem.
-	* configure.ac: Use AC_GNU_SOURCE.  Check for pread64.
-	* configure, config.in: Regenerated.
-
-2007-09-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_wait_for_event): Do not pass signals while
-	single-stepping.
-
-2007-09-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (create_process): New.
-	(win32_create_inferior): Use create_process instead of
-	CreateProcess.  If create_process failed retry appending an ".exe"
-	suffix.  Store the GetLastError result immediatelly after
-	create_process calls and use it on the call to error.
-
-2007-09-03  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (handle_load_dll): Don't use toolhelp when waiting.
-
-2007-08-23  Joel Brobecker  <brobecker@adacore.com>
-
-	* configure.ac: Switch license to GPLv3.
-
-2007-08-01  Michael Snyder  <msnyder@access-company.com>
-
-	* remote-utils.c (putpkt_binary): Memory leak, free buf2.
-
-2007-07-31  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (winapi_CloseToolhelp32Snapshot) [_WIN32_WCE]: New
-	typedef.
-	(win32_CloseToolhelp32Snapshot) [_WIN32_WCE]: New global var.
-	(load_toolhelp) [_WIN32_WCE]: Load TOOLHELP.DLL.  Get
-	CloseToolhelp32Snapshot.
-	(toolhelp_get_dll_name) [_WIN32_WCE]: Close the snapshot with
-	CloseToolhelp32Snapshot.
-
-2007-07-27  Michael Snyder  <michael.snyder@access-company.com>
-
-	* server.c (main): Check for inferior exit before main loop.
-
-2007-07-18  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* remote-utils.c (remote_open): Set SO_KEEPALIVE on remote_desc
-	instead of on tmp_desc.
-
-2007-07-17  Pedro Alves  <pedro_alves@portugalmail.pt>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* inferiors.c (all_dlls, dlls_changed, get_dll): New.
-	(add_thread): Minor cleanups.
-	(clear_inferiors): Move lower in the file.  Clear the DLL
-	list.
-	(free_one_dll, match_dll, loaded_dll, unloaded_dll, clear_list): New.
-	* remote-utils.c (prepare_resume_reply): Check dlls_changed.
-	(xml_escape_text): New.
-	* server.c (handle_query): Handle qXfer:libraries:read.  Report it
-	for qSupported.
-	(handle_v_cont): Report errors.
-	(gdbserver_version): Update.
-	(main): Correct size of own_buf.  Do not report initial DLL events.
-	* server.h (struct dll_info, all_dlls, dlls_changed, loaded_dll)
-	(unloaded_dll, xml_escape_text): New.
-	* win32-low.c (enum target_waitkind): Update comments.
-	(win32_add_one_solib, get_image_name, winapi_EnumProcessModules)
-	(winapi_GetModuleInformation, winapi_GetModuleFileNameExA)
-	(win32_EnumProcessModules, win32_GetModuleInformation)
-	(win32_GetModuleFileNameExA, load_psapi, psapi_get_dll_name)
-	(winapi_CreateToolhelp32Snapshot, winapi_Module32First)
-	(winapi_Module32Next, win32_CreateToolhelp32Snapshot)
-	(win32_Module32First, win32_Module32Next, load_toolhelp)
-	(toolhelp_get_dll_name, handle_load_dll, handle_unload_dll): New.
-	(get_child_debug_event): Handle DLL events.
-	(win32_wait): Likewise.
-
-2007-07-12  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.srv: Set srv_linux_regsets for sh*-*-linux*.
-	* linux-sh-low.c (sh_fill_gregset, target_regsets): New.
-
-2007-07-08  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (handle_output_debug_string): Ignore event if not
-	waiting.
-
-2007-07-08  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-arm-low.c (arm_wince_breakpoint): Fix typo.
-
-2007-07-03  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (look_up_one_symbol): Handle 'm' packets.
-
-2007-07-02  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* inferiors.c (change_inferior_id): Add comment.
-	* linux-low.c (check_removed_breakpoint): Add an early
-	prototype.  Improve debug output.
-	(linux_attach): Doc update.
-	(linux_detach_one_process, linux_detach): Clean up before releasing
-	each process.
-	(send_sigstop, wait_for_sigstop): Improve comments and debug output.
-	* linux-low.h (struct process_info): Doc improvement.
-	* mem-break.c (delete_all_breakpoints): New.
-	* mem-break.h (delete_all_breakpoints): New prototype.
-	* thread-db.c (find_first_thread): New.
-	(thread_db_create_event): Call it instead of
-	thread_db_find_new_threads.  Clean up unused variables.
-	(maybe_attach_thread): Remove first thread handling.
-	(thread_db_find_new_threads): Use find_first_thread.
-	(thread_db_get_tls_address): Likewise.
-
-2007-06-27  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* thread-db.c (thread_db_find_new_threads): Add prototype.
-	(thread_db_create_event): Check for the main thread before adding
-	a new thread.
-	(maybe_attach_thread): Only enable event reporting if TID == 0.
-	(thread_db_get_tls_address): Check for new threads.
-
-2007-06-20  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_create_inferior): Try execv before execvp.
-	* spu-low.c (spu_create_inferior): Likewise.
-
-2007-06-13  Mike Frysinger  <vapier@gentoo.org>
-
-	* linux-low.c (linux_create_inferior): Change execv to execvp.
-	* spu-low.c (spu_create_inferior): Likewies.
-
-2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (clean): Clean new files instead of deleted ones.
-	(reg-mips.o, reg-mips.c, reg-mips64.o, reg-mips64.c): Delete.
-	(mips-linux.o, mips-linux.c, mips64-linux.o, mips64-linux.c): New
-	rules.
-	* configure.srv: Specify XML files and new regformats for MIPS and
-	MIPS64 GNU/Linux.
-	* linux-mips-low.c (mips_num_regs): Set to only used registers.
-	(mips_regmap): Do not fetch $0.  Remove unused registers.  Add
-	an entry for the restart register.
-	(mips_cannot_fetch_register, mips_cannot_store_register)
-	(mips_reinsert_addr, mips_fill_fpregset, mips_store_fpregset): Update
-	register names to match the XML descriptions.
-	(mips_fill_gregset, mips_store_gregset): Likewise.  Handle the
-	restart register instead of $0.
-
-2007-06-12  Ulrich Weigand  <uweigand@de.ibm.com>
-	    Markus Deuling  <deuling@de.ibm.com>
-
-	* remote-utils.c (decode_xfer_write): New function.
-	* server.h (decode_xfer_write): Add prototype.
-	* server.c (handle_query): Add PACKET_LEN argument.  Support
-	qXfer:spu:read and qXfer:spu:write packets.
-	(main): Pass packet_len to handle_query.
-	* spu-low.c (spu_target_ops): Add spu_proc_xfer_spu.
-	* target.h (target_ops): Add qxfer_spu.
-
-2007-06-12  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* spu-low.c (spu_proc_xfer_spu): Do not return failure when
-	accessing non-seekable spufs files.
-
-2007-05-16  Markus Deuling  <deuling@de.ibm.com>
-
-	* server.c (handle_query): Add reply for qC packet.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-	    Leo Zayas  <lerele@champenstudios@com>
-
-	* server.h (check_remote_input_interrupt_request): New function.
-	* remote_utils.c (INVALID_DESCRIPTOR): New define.
-	(remote_desc): Initialize with INVALID_DESCRIPTOR.
-	(input_interrupt): Expose on USE_WIN32API too.  Fix whitespace.
-	(check_remote_input_interrupt_request): New function.
-	* server.h (check_remote_input_interrupt_request): Declare.
-	* win32-low.c (winapi_DebugBreakProcess,
-	winapi_GenerateConsoleCtrlEvent): New typedefs.
-	(get_child_debug_event): Lower Win32 debug event polling from 1 sec
-	to 250 ms.
-	(win32_wait): Check for remote interrupt request
-	with check_remote_input_interrupt_request.
-	(win32_request_interrupt): New function.
-	(win32_target_op): Set request_interrupt to win32_request_interrupt.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (debug_registers_changed,
-	debug_registers_used, CONTEXT_EXTENDED_REGISTERS,
-	CONTEXT_FLOATING_POINT, CONTEXT_DEBUG_REGISTERS,
-	CONTEXT_DEBUGGER, CONTEXT_DEBUGGER_DR): Delete.
-	(thread_rec): Get context using the low target.
-	(child_add_thread): Call thread_added on the low target,
-	which does the same thing.
-	(regptr): Delete.
-	(do_initial_child_stuff): Remove debug registers references.
-	Set context using the low target.  Resume threads after
-	setting the contexts.
-	(child_continue): Remove dead variable.  Remove debug
-	registers references.
-	(child_fetch_inferior_registers): Go through the low target.
-	(do_child_store_inferior_registers): Remove.
-	(child_store_inferior_registers): Go through the low target.
-	(win32_resume): Remove debug registers references.
-	Set context using the low target.
-	(handle_exception): Change return type to void.  Don't record
-	context here.  Set status to TARGET_WAITKIND_SPURIOUS on a
-	first chance exception.
-	(get_child_debug_event): Change return type to void.  Remove
-	goto loop.  Always return after waiting for debug event.
-	(win32_wait): Convert to switch statement.  Handle spurious
-	events.
-
-	* win32-i386-low.c (debug_registers_changed,
-	debug_registers_used): New.
-	(initial_stuff): Rename to ...
-	(i386_initial_stuff): ... this.  Clear debug registers
-	state variables.
-	(store_debug_registers): Delete.
-	(i386_get_thread_context): New.
-	(load_debug_registers): Delete.
-	(i386_set_thread_context): New.
-	(i386_thread_added): New.
-	(single_step): Rename to ...
-	(i386_single_step): ... this.
-	(do_fetch_inferior_registers): Rename to ...
-	(i386_fetch_inferior_register): ... this.
-	(i386_store_inferior_register): New.
-	(the_low_target): Adapt to new interface.
-
-	* win32-arm-low.c (CONTEXT_FLOATING_POINT): Define.
-	(arm_get_thread_context): New.
-	(arm_set_thread_context): New.
-	(regptr): New.
-	(do_fetch_inferior_registers): Rename to ...
-	(arm_fetch_inferior_register): ... this.
-	(arm_store_inferior_register): New.
-	(arm_wince_breakpoint): Reimplement as unsigned long.
-	(arm_wince_breakpoint_len): Define.
-	(the_low_target): Adapt to new interface.
-
-	* win32-low.h (target_ops): Remove regmap, store_debug_registers and
-	load_debug_registers.  Add get_thread_context, set_thread_context,
-	thread_added and store_inferior_register.  Rename
-	fetch_inferior_registers to fetch_inferior_register.
-	(regptr): Remove declaration.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* linux-low.c (linux_detach): Change return type to int.  Return 0.
-	* spu-low.c (spu_detach): Likewise.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* target.h (target_ops): Change return type of detach to int.
-	Add join.
-	(join_inferior): New.
-	* server.c (main): Don't skip detach support on mingw32.
-	If the inferior doesn't support detaching return error.
-	Call join_inferior instead of using waitpid.
-	* linux-low.c (linux_join): New.
-	(linux_target_op): Add linux_join.
-	* spu-low.c (spu_join): New.
-	(spu_target_ops): Add spu_join.
-	* win32-low.c (win32_detach): Adapt to new interface.
-	Reopen current_process_handle before detaching.  Issue a child
-	resume before detaching.
-	(win32_join): New.
-	(win32_target_op): Add win32_join.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (win32-attach): Fix return value.
-	* target.h (target_ops): Describe ATTACH return values.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (GETPROCADDRESS): Define.
-	(winapi_DebugActiveProcessStop): Add WINAPI.  typedef as pointer.
-	(winapi_DebugSetProcessKillOnExit): Likewise.
-	(win32_create_inferior): Force usage of ansi CreateProcessA.
-	(win32_attach): Use GETPROCADDRESS.
-	(win32_detach): Likewise.
-
-2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c (win32_wait): Don't use WSTOPSIG.
-
-2007-03-30  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c: Commit leftover changes from 2007-03-29.
-
-2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* i387-fp.c (struct i387_fsave, struct i387_fxsave): Make 16-bit
-	fields short instead of int.  Add explicit padding.
-	(i387_cache_to_fsave): Remove unnecessary casts.
-	(i387_fsave_to_cache): Doc fix.
-	(i387_cache_to_fxsave): Remove unnecessary casts and masking.
-
-2007-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* i387-fp.c (i387_cache_to_fxsave): Reinitialize val2 before use.
-	(i387_fxsave_to_cache): Check fp->ftag while building ftag value.
-
-2007-03-29  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* configure.srv (arm*-*-mingw32ce*): Move near the other
-	arm targets.
-
-2007-03-29  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* configure.ac: Add errno checking.
-	(AC_CHECK_HEADERS): Add errno.h, fcntl.h, signal.h,
-	sys/file.h and malloc.h.
-	(AC_CHECK_DECLS): Add perror.
-	(srv_mingwce): Handle.
-	* configure.srv (i[34567]86-*-cygwin*): Add
-	win32-i386-low.o to srv_tgtobj.
-	(i[34567]86-*-mingw*): Likewise.
-	(arm*-*-mingw32ce*): Add case.
-	* gdbreplay.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H,
-	HAVE_FCNTL_H, HAVE_ERRNO_H, HAVE_MALLOC_H]: Check.
-	[__MINGW32CE__] (strerror): New function.
-	[__MINGW32CE__] (errno): Define to GetLastError.
-	[__MINGW32CE__] (COUNTOF): New macro.
-	(remote_open): Remove extra close call.
-	* mem-break.c (delete_breakpoint_at): New function.
-	* mem-break.h (delete_breakpoint_at): Declare.
-	* remote-utils.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H,
-	HAVE_FCNTL_H, HAVE_UNISTD_H, HAVE_ERRNO_H]: Check.
-	[USE_WIN32API] (read, write): Add char* casts.
-	* server.c [HAVE_UNISTD_H, HAVE_SIGNAL_H]: Check.
-	* server.h: Include wincecompat.h on Windows CE.
-	[HAVE_ERRNO_H]: Check.
-	(perror): Declare if not declared.
-	* utils.c: Add stdlib.h, errno.h and malloc.h includes.
-	(perror_with_name): Remove errno declaration.
-	* wincecompat.h: New.
-	* wincecompat.c: New.
-	* win32-low.h: New.
-	* win32-arm-low.c: New.
-	* win32-i386-low.c: New.
-	(win32-low.c): Include mem-break.h and win32-low.h, and winnt.h.
-	(OUTMSG2): Make it safe.
-	(_T): New macro.
-	(COUNTOF): New macro.
-	(NUM_REGS): Get it from the low target.
-	(CONTEXT_EXTENDED_REGISTERS, CONTEXT_FLOATING_POINT,
-	CONTEXT_DEBUG_REGISTERS): Add fallbacks to 0.
-	(thread_rec): Let low target handle debug registers.
-	(child_add_thread): Likewise.
-	(child_init_thread_list): Likewise.
-	(continue_one_thread): Likewise.
-	(regptr): New.
-	(do_child_fetch_inferior_registers): Move to ...
-	* win32-i386-low.c: ... here, and rename to ...
-	(do_fetch_inferior_registers): ... this.
-	* win32-low.c (child_fetch_inferior_registers):
-	Go through the low target.
-	(do_child_store_inferior_registers): Use regptr.
-	(strwinerror): New function.
-	(win32_create_inferior): Handle Windows CE.
-	Use strwinerror instead of strerror on Windows error
-	codes.  Add program to the error output.
-	Don't close the main thread handle on Windows CE.
-	(win32_attach): Use coredll.dll on Windows CE.
-	(win32_kill): Close current process and current
-	thread handles.
-	(win32_detach): Use coredll.dll on Windows CE.
-	(win32_resume): Let low target handle debug registers, and
-	step request.
-	(handle_exception): Add/Remove initial breakpoint.  Avoid
-	non-existant WSTOPSIG on Windows CE.
-	(win32_read_inferior_memory): Cast to remove warning.
-	(win32_arch_string): Go through the low target.
-	(initialize_low): Call set_breakpoint_data with the low
-	target's breakpoint.
-	* win32-low.c (dr, FLAG_TRACE_BIT, FCS_REGNUM,
-	FOP_REGNUM, mappings): Move to ...
-	* win32-i386-low.c: ... here.
-	* win32-low.c (win32_thread_info): Move to ...
-	* win32-low.h: ... here.
-	* Makefile.in (SFILES): Add win32-low.c, win32-i386-low.c,
-	win32-arm-low.c and wincecompat.c.
-	(all:): Add $EXEEXT.
-	(install-only:): Likewise.
-	(gdbserver:): Likewise.
-	(gdbreplay:): Likewise.
-	* config.in: Regenerate.
-	* configure: Regenerate.
-
-2007-03-28  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-low.c: Rename typedef thread_info to
-	win32_thread_info throughout.
-
-2007-03-28  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* win32-i386-low.c: Rename to ...
-	* win32-low.c: ... this.
-	* configure.srv: Replace win32-i386-low.o with win32-low.o.
-	* Makefile.in: Likewise.
-
-2007-03-27  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* remote-utils.c (monitor_output): Constify msg parameter.
-	* server.h (monitor_output): Likewise.
-	* win32-i386-low.c (handle_output_debug_string): New.
-	(win32_kill): Handle OUTPUT_DEBUG_STRING_EVENT events using
-	handle_output_debug_string.
-	(get_child_debug_event): Likewise.
-
-2007-03-27  Mat Hostetter  <mat@lcs.mit.edu>
-
-	* server.c (main): Correct strtoul check.
-
-2007-03-27  Jon Ringle  <jon@ringle.org>
-
-	* linux-low.c: Check __ARCH_HAS_MMU__ also.
-
-2007-03-27  Brooks Moses  <brooks.moses@codesourcery.com>
-
-	* Makefile.in: Add dummy "pdf" and "install-pdf" targets.
-
-2007-02-27  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* terminal.h: Check HAVE_SGTTY_H.
-
-2007-02-27  Mat Hostetter  <mat@lcs.mit.edu>
-
-	* remote-utils.c (remote_open): Print out the assigned port number.
-
-2007-02-26  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (monitor_output): New function.
-	* server.c (debug_threads): Define here.
-	(monitor_show_help): New function.
-	(handle_query): Handle qRcmd.
-	(main): Do not handle 'd' packet.
-	* server.h (debug_threads, remote_debug, monitor_output): Declare.
-	* linux-low.c, spu-low.c, win32-i386-low.c: Remove definitions
-	of debug_threads.
-
-2007-02-25  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* Makefile.in (EXEEXT): New.
-	(clean): Use $(EXEEXT).
-
-2007-02-25  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* target.h (target_ops): Rename send_signal to request_interrupt,
-	and remove enum target_signal parameter.
-	* linux-low.c (linux_request_interrupt): Rename from
-	linux_send_signal, and always send SIGINT.
-	* spu-low.c (spu_request_interrupt): Rename from spu_send_signal,
-	and always send SIGINT.
-	* remote-utils.c (putpkt_binary): Call request_interrupt, instead
-	of send_signal.
-	(input_interrupt): Likewise.
-
-2007-02-25  Pedro Alves  <pedro_alves@portugalmail.pt>
-
-	* server.c (get_features_xml): Check if target implemented
-	arch_string.
-	* win32-i386-low.c (win32_arch_string): New.
-	(win32_target_ops): Add win32_arch_string as arch_string member.
-
-2007-02-22  Markus Deuling  <deuling@de.ibm.com>
-
-	* spu-low.c (spu_arch_string): New.
-	(spu_target_ops): Add spu_arch_string.
-
-2007-02-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c: Remove HAVE_TERMINAL_H check.
-	* configure.ac: Do not check for terminal.h.
-	* configure, config.in: Regenerated.
-
-2007-02-08  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (OBS): Add $(XML_BUILTIN).
-	(XML_DIR, XML_TARGET, XML_FILES, XML_BUILTIN): New.
-	(clean): Update.
-	(target.xml, xml-builtin.c, stamp-xml, arm-with-iwmmxt.o)
-	(arm-with-iwmmxt.c): New.
-	* config.in, configure: Regenerate.
-	* configure.ac: Check for iWMMXt.  Handle srv_xmltarget,
-	srv_xmlbuiltin, and srv_xmlfiles.  Define USE_XML.
-	* configure.srv: Mention srv_xmltarget and srv_xmlfiles.
-	(arm*-*-linux*): Add iWMMXt and regset support.
-	* linux-arm-low.c (PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS): Define.
-	(arm_fill_gregset, arm_store_gregset, arm_fill_wmmxregset)
-	(arm_store_wmmxregset, target_regsets): New.
-	* server.c (get_features_xml): Take annex argument.  Check builtin
-	XML documents.
-	(handle_query): Handle multiple annexes.
-
-2007-01-29  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c [USE_WIN32API] (read, write): Define.
-	(putpkt_binary, input_interrupt, readchar, getpkt): Use read and
-	write.
-
-2007-01-09  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-i386-low.c (the_low_target): Set arch_string.
-	* linux-x86-64-low.c (the_low_target): Likewise.
-	* linux-low.c (linux_arch_string): New.
-	(linux_target_ops): Add it.
-	* linux-low.h (struct linux_target_ops): Add arch_string.
-	* server.c (write_qxfer_response): Use const void * for DATA.
-	(get_features_xml): New.
-	(handle_query): Handle qXfer:features:read.  Report it for qSupported.
-	* target.h (struct target_ops): Add arch_string method.
-
-2007-01-03  Denis Pilat  <denis.pilat@st.com>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_kill): Handle being called with no threads.
-	* win32-i386-low.c (win32_kill): Likewise.
-	(get_child_debug_event): Clear current_process_handle.
-
-2006-12-30  Denis PILAT  <denis.pilat@st.com>
-	    Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (remote_open): Check the type of specified
-	serial port devices before opening them.
-	* server.c (main): Kill the inferior if an error occurs during
-	the first remote_open.
-
-2006-12-05  Markus Deuling  <deuling@de.ibm.com>
-
-	* README: Update supported targets.
-
-2006-11-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (clean): Remove reg-mips64.c.
-	(reg-mips64.c, reg-mips64.o): New rules.
-	* configure.srv: Handle mips64.  Include regset support for mips.
-	* linux-mips-low.c (union mips_register): New.
-	(mips_get_pc, mips_set_pc, mips_reinsert_addr): Use it.
-	(mips_breakpoint, mips_breakpoint_at): Use int.
-	(mips_collect_register, mips_supply_register)
-	(mips_collect_register_32bit, mips_supply_register_32bit)
-	(mips_fill_gregset, mips_store_gregset, mips_fill_fpregset)
-	(mips_store_fpregset, target_regsets): New.
-	* thread-db.c (thread_db_get_tls_address): Use uintptr_t.
-
-2006-11-22  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv: Add target "spu*-*-*".
-	* Makefile.in (clean): Remove reg-spu.c.
-	(reg-spu.c, reg-spu.o, spu-low.o): Add dependencies.
-	* spu-low.c: New file.
-
-2006-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.ac: Correct td_thr_tls_get_addr test.
-	* configure: Regenerated.
-
-2006-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_wait_for_event): Reformat.  Use the
-	pass_signals array.
-	* remote-utils.c (decode_address_to_semicolon): New.
-	* server.c (pass_signals, handle_general_set): New.
-	(handle_query): Mention QPassSignals for qSupported.
-	(main): Call handle_general_set.
-	* server.h (pass_signals, decode_address_to_semicolon): New.
-
-2006-11-06  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (handle_query): Correct error handling for read_auxv.
-
-2005-10-19  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* configure.srv [s390-*-linux*, s390x-*-linux*]: Set srv_linux_regsets
-	and srv_linux_thread_db to yes.
-	* linux-s390-low.c (s390_fill_gregset): New function.
-	(target_regsets): Define data structure.
-
-2006-10-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* acinclude.m4 (SRV_CHECK_TLS_GET_ADDR): New.
-	* configure.ac: Use it.  Define HAVE_TD_THR_TLS_GET_ADDR.
-	* config.in, configure: Regenerated.
-	* inferiors.c (gdb_id_to_thread): New function.
-	(gdb_id_to_thread_id): Use it.
-	* linux-low.c (linux_target_ops): Use thread_db_get_tls_address.
-	* linux-low.h (struct process_info): Add th member.
-	(thread_db_get_tls_address): New prototype.
-	* remote-utils.c (decode_address): Make non-static.
-	* server.c (handle_query): Handle qGetTLSAddr.
-	* server.h (gdb_id_to_thread, decode_address): New prototypes.
-	* target.h (struct target_ops): Add get_tls_address.
-	* thread-db.c (maybe_attach_thread): Save the thread handle.
-	(thread_db_get_tls_address): New.
-
-2006-09-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (PTRACE_GETSIGINFO, PTRACE_SETSIGINFO): Define.
-	(linux_resume_one_process): Take a siginfo_t *.  Update all
-	callers.  Queue it if necessary.  Use PTRACE_SETSIGINFO.
-	(struct pending_signals): Add a siginfo_t.
-	(linux_wait_for_process): Always set last_status.
-	(linux_wait_for_event): Use PTRACE_GETSIGINFO.
-	(linux_queue_one_thread): Use PTRACE_GETSIGINFO.
-	* linux-low.h (struct process_info): Add last_status.
-
-2006-09-21  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (try_rle): New function.
-	(putpkt_binary): Use it.
-
-2006-08-19  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (clean): Clean reg-x86-64-linux.c.
-	(reg-x86-64-linux.o, reg-x86-64-linux.c): New.
-	* configure.srv (x86_64-*-linux*): Use reg-x86-64-linux.o.
-	* linux-x86-64-low.c (x86_64_regmap): Include ORIG_RAX.
-	(x86_64_fill_gregset, x86_64_store_gregset): Skip floating
-	point registers.
-
-2006-08-08  Richard Sandiford  <richard@codesourcery.com>
-
-	* server.c (terminal_fd): New variable.
-	(old_foreground_pgrp): Likewise.
-	(restore_old_foreground_pgrp): New function.
-	(start_inferior): Record the terminal file descriptor in terminal_fd
-	and its original foreground group in old_foreground_pgrp.  Register
-	restore_old_foreground_pgrp with atexit().
-
-2006-07-26  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (handle_query): Correct qPart to qXfer.
-
-2006-07-22  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.ac: Check for more headers which are missing on
-	Windows.  Automatically supply -lwsock32 and USE_WIN32API.
-	* configure.srv: Add Cygwin and mingw32.
-	* remote-utils.c: Don't include headers unconditionally which
-	are missing on mingw32.  Include <winsock.h> for mingw32.
-	(remote_open): Adjust for mingw32 support.  Flush
-	standard error after writing to it.
-	(remote_close, putpkt_binary, input_interrupt, block_async_io)
-	(unblock_async_io, enable_async_io, disable_async_io)
-	(readchar, getpkt): Update for Winsock support.
-	(prepare_resume_reply): Expect a protocol signal number.
-	* server.c: Disable <sys/wait.h> on mingw32.
-	(start_inferior): Adjust for mingw32 support.  Flush
-	standard error after writing to it.
-	(attach_inferior): Likewise.  Use protocol signal
-	numbers.
-	(main): Skip 'D' packet on mingw32.  Use protocol signal numbers
-	and names.
-	* win32-i386-low.c: New file.
-	* Makefile.in (XM_CLIBS): Set.
-	(gdbserver, gdbreplay): Use $(INTERNAL_CFLAGS).
-	(win32-i386-low.o): New dependency rule.
-	* linux-low.c (linux_wait): Use target signal numbers.
-	* target.h (struct target_ops): Doc fix.
-	* server.h (target_signal_to_name): New prototype.
-	* gdbreplay.c: Don't include headers unconditionally which
-	are missing on mingw32.  Include <winsock.h> for mingw32.
-	(remote_close, remote_open): Adjust for Winsock support.
-	* configure, config.in: Regenerated.
-
-2006-07-12  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (decode_xfer_read, write_qxfer_response): New.
-	(handle_query): Take a packet length argument.  Handle
-	qXfer:auxv:read instead of qPart:auxv:read.  Mention it in
-	the qSupported response.
-	(main): Update call to handle_query.
-
-2006-06-22  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (remote_escape_output, remote_unescape_input): New.
-	(putpkt_binary): Renamed from putpkt and adjusted for binary
-	data.
-	(putpkt): New wrapper for putpkt_binary.
-	(readchar): Don't mask off the high bit.
-	(decode_X_packet): New function.
-	* server.c (main): Call putpkt_binary if a handler sets the packet
-	length.  Save the length of the incoming packet.  Handle 'X'.
-	* server.h (gdb_byte, remote_escape_output, decode_X_packet): New.
-
-2006-06-21  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (handle_query): Handle qSupported.
-
-2006-05-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (all_symbols_looked_up): New variable.
-	(look_up_one_symbol): Check it.
-	* server.h (look_up_one_symbol): New declaration.
-	* thread-db.c (thread_db_init): Set all_symbols_looked_up.
-
-2006-05-30  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (linux-arm-low.o): Update dependencies.
-	* linux-arm-low.c: Include "gdb_proc_service.h".
-	(PTRACE_GET_THREAD_AREA): Define.
-	(ps_get_thread_area): New function.
-
-2006-05-09  Nathan Sidwell  <nathan@codesourcery.com>
-
-	* configure.srv (m68k*-*-uclinux*): New target.
-	* linux-low.c (linux_create_inferior): Use vfork on mmuless systems.
-	(linux_resume_one_process): Remove extraneous cast.
-	(linux_read_offsets): New.
-	(linux_target_op): Add linux_read_offsets on mmuless systems.
-	* server.c (handle_query): Add qOffsets logic.
-	* target.h (struct target_ops): Add read_offsets.
-
-2006-03-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-mips-low.c: Include <sys/ptrace.h> and "gdb_proc_service.h".
-	(PTRACE_GET_THREAD_AREA): Define.
-	(ps_get_thread_area): New function.
-	* Makefile.in (linux-i386-low.o, linux-mips-low.o)
-	(linux-x86-64-low.o): Update.
-
-2006-03-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.ac: Remove checks for prfpregset_t.
-	* gdb_proc_service.h: New file.
-	* linux-i386-low.c, linux-x86-64-low.c, thread-db.c: Use the
-	new "gdb_proc_service.h".
-	* proc-service.c: Likewise.
-	(ps_pglobal_lookup, ps_pdread, ps_pdwrite): Use psaddr_t.
-	(ps_lgetfpregs, ps_lsetfpregs): Use a void* argument.
-	* Makefile.in (gdb_proc_service_h): Updated.
-	* configure, config.in: Regenerated.
-
-2006-03-03  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* remote-utils.c (prepare_resume_reply): Move declaration
-	of gdb_id_from_wait to the top of the block.
-
-2006-02-15  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (regsets_store_inferior_registers): Read the regset
-	from the target before filling it.
-
-2006-02-08  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (attach_inferior): Return SIGTRAP for a successful
-	attach.
-
-2006-02-01  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (OBS): Add version.o.
-	(STAGESTUFF): Delete.
-	(version.o): Add dependencies.
-	(version.c): Replace rule.
-	(clean): Remove version.c.
-	* server.c (gdbserver_version): New.
-	(gdbserver_usage): Use printf.
-	(main): Handle --version and --help.
-	* server.h (version, host_name): Add declarations.
-
-2005-12-23  Eli Zaretskii  <eliz@gnu.org>
-
-	* linux-arm-low.c:
-	* linux-arm-low.c:
-	* inferiors.c:
-	* i387-fp.h:
-	* i387-fp.c:
-	* gdbreplay.c:
-	* regcache.c:
-	* proc-service.c:
-	* mem-break.h:
-	* mem-break.c:
-	* linux-x86-64-low.c:
-	* linux-sh-low.c:
-	* linux-s390-low.c:
-	* linux-ppc64-low.c:
-	* linux-ppc-low.c:
-	* linux-mips-low.c:
-	* linux-m68k-low.c:
-	* linux-m32r-low.c:
-	* linux-low.h:
-	* linux-low.c:
-	* linux-ia64-low.c:
-	* linux-i386-low.c:
-	* linux-crisv32-low.c:
-	* thread-db.c:
-	* terminal.h:
-	* target.h:
-	* target.c:
-	* server.h:
-	* server.c:
-	* remote-utils.c:
-	* regcache.h:
-	* utils.c:
-	* Makefile.in:
-	* configure.ac:
-	* gdbserver.1: Add (C) after Copyright.  Update the FSF
-	address.
-
-2005-11-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-arm-low.c (arm_eabi_breakpoint): New variable.
-	(arm_breakpoint_at): Recognize both breakpoints.
-	(the_low_target): Use the correct breakpoint instruction.
-
-2005-11-02  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.srv (x86_64-*-linux*): Turn on thread_db support.
-	* linux-x86-64-low.c (x86_64_breakpoint, x86_64_breakpoint_len)
-	(x86_64_get_pc, x86_64_set_pc, x86_64_breakpoint_at): New.
-	(the_low_target): Update.
-
-2005-10-25  Andreas Schwab  <schwab@suse.de>
-
-	* server.c (main): Allocate mem_buf with PBUFSIZ bytes.
-
-	* linux-ia64-low.c (ia64_regmap): Remove NAT registers.
-	(ia64_num_regs): Reduce to 462.
-
-2005-09-17  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* acinclude.m4: Correct quoting.
-	* aclocal.m4: Regenerated.
-
-	Suggested by SZOKOVACS Robert <szo@ies.hu>:
-	* thread-db.c (thread_db_err_str): Handle TD_VERSION.
-	(thread_db_init): Call thread_db_err_str.
-	* configure.ac: Check for TD_VERSION.
-	* config.in, configure: Regenerated.
-
-2005-07-31  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
-
-	* server.h (error, fatal, warning): Add ATTR_FORMAT.
-
-2005-07-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* configure.ac: Define HAVE_LINUX_REGSETS even if PTRACE_GETREGS
-	is not available.  Define HAVE_PTRACE_GETREGS if it is.
-	* config.in, configure: Regenerated.
-	* configure.srv: Set srv_linux_regsets for PowerPC and PowerPC64.
-	* linux-i386-low.c, linux-m68k-low.c: Update to use
-	HAVE_PTRACE_GETREGS.
-	* linux-low.c (regsets_fetch_inferior_registers)
-	(regsets_store_inferior_registers): Only return 0 if we processed
-	GENERAL_REGS.
-	* linux-ppc-low.c (ppc_fill_gregset, target_regsets): New.
-	* linux-ppc64-low.c (ppc_fill_gregset, target_regsets): New.
-
-2005-07-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* inferiors.c (struct thread_info): Add gdb_id.
-	(add_thread): Add gdb_id argument.
-	(thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): New.
-	* linux-low.c (linux_create_inferior, linux_attach_lwp): Update
-	calls to add_thread.
-	* remote-utils.c (prepare_resume_reply: Use thread_to_gdb_id.
-	* server.c (handle_query): Use thread_to_gdb_id.
-	(handle_v_cont, main): Use gdb_id_to_thread_id.
-	* server.h (add_thread): Update prototype.
-	(thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): New
-	prototypes.
-
-2005-07-13  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (fetch_register, usr_store_inferior_registers): Handle
-	left-padded registers.
-	* linux-low.h (struct linux_target_ops): Add left_pad_xfer.
-	* linux-ppc64-low.c (the_low_target): Set left_pad_xfer.
-
-2005-07-01  Steve Ellcey  <sje@cup.hp.com>
-
-	* configure.ac (BFD_NEED_DECLARATION): Replace with AC_CHECK_DECLS.
-	* configure: Regenerate.
-	* config.in: Regenerate.
-	* server.h (NEED_DECLARATION_STRERROR):
-	Replace with !HAVE_DECL_STRERROR.
-
-2005-06-16  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* linux-low.c (linux_wait, linux_send_signal): Don't test
-	an unsigned long variable for > 0 if it could be MAX_ULONG.
-	* server.c (myresume): Likewise.
-	* target.c (set_desired_inferior): Likewise.
-
-2005-06-13  Mark Kettenis  <kettenis@gnu.org>
-
-	* configure.ac: Simplify and improve check for socklen_t.
-	* configure, config.in: Regenerate.
-
-2005-06-12  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* acconfig.h: Remove.
-	* configure.ac: Add a test for socklen_t.  Use three-argument
-	AC_DEFINE throughout.
-	* config.in: Regenerated using autoheader 2.59.
-	* configure: Regenerated.
-
-	* gdbreplay.c (socklen_t): Provide a default.
-	(remote_open): Use socklen_t.
-	* remote-utils.c (socklen_t): Provide a default.
-	(remote_open): Use socklen_t.
-	(convert_int_to_ascii, convert_ascii_to_int, decode_M_packet): Use
-	unsigned char.
-
-	* i387-fp.c (struct i387_fsave, struct i387_fxsave): Use unsigned
-	char for buffers.
-	* linux-low.c (linux_read_memory, linux_write_memory)
-	(linux_read_auxv): Likewise.
-	* mem-break.c (breakpoint_data, set_breakpoint_data, check_mem_read)
-	(check_mem_write): Likewise.
-	* mem-break.h (set_breakpoint_data, check_mem_read, check_mem_write):
-	Likewise.
-	* regcache.c (struct inferior_rgcache_data, registers_to_string)
-	(registers_from_string, register_data): Likewise.
-	* server.c (handle_query, main): Likewise.
-	* server.h (convert_ascii_to_int, convert_int_to_ascii)
-	(decode_M_packet): Likewise.
-	* target.c (read_inferior_memory, write_inferior_memory): Likewise.
-	* target.h (struct target_ops): Update read_memory, write_memory,
-	and read_auxv.
-	(read_inferior_memory, write_inferior_memory): Update.
-	* linux-low.h (struct linux_target_ops): Change type of breakpoint
-	to unsigned char *.
-	* linux-arm-low.c, linux-cris-low.c, linux-crisv32-low.c,
-	linux-i386-low.c, linux-m32r-low.c, linux-m68k-low.c,
-	linux-mips-low.c, linux-ppc-low.c, linux-ppc64-low.c,
-	linux-s390-low.c, linux-sh-low.c: Update for changes in
-	read_inferior_memory and the_low_target->breakpoint.
-
-2005-05-28  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (SFILES): Add linux-ppc64-low.c.
-	(linux-ppc64-low.o, reg-ppc64.c, reg-ppc64.o): New targets.
-	* configure.srv: Add powerpc64-*-linux*.
-	* linux-ppc64-low.c: New file.
-
-2005-05-23  Orjan Friberg  <orjanf@axis.com>
-
-	* linux-cris-low.c: New file with support for CRIS.
-	* linux-crisv32-low.c: Ditto for CRISv32.
-	* Makefile.in (SFILES): Add linux-cris-low.c, linux-crisv32-low.c.
-	(clean): Add reg-cris.c and reg-crisv32.c.
-	Add linux-cris-low.o, linux-crisv32-low.o, reg-cris.o, reg-cris.c,
-	reg-crisv32.o, and reg-crisv32.c to make rules.
-	* configure.srv: Add cris-*-linux* and crisv32-*-linux* to list of
-	recognized targets.
-
-2005-05-16  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-low.c (fetch_register): Ensure buffer size is a multiple
-	of sizeof (PTRACE_XFER_TYPE).
-	(usr_store_inferior_registers): Likewise.  Zero out excess bytes.
-
-2005-05-12  Orjan Friberg  <orjanf@axis.com>
-
-	* target.h (struct target_ops): Add insert_watchpoint,
-	remove_watchpoint, stopped_by_watchpoint, stopped_data_address function
-	pointers for hardware watchpoint support.
-	* linux-low.h (struct linux_target_ops): Ditto.
-	* linux-low.c (linux_insert_watchpoint, linux_remove_watchpoint)
-	(linux_stopped_by_watchpoint, linux_stopped_data_address): New.  Add
-	to linux_target_ops.
-	* remote-utils.c (prepare_resume_reply): Add watchpoint information to
-	reply packet.
-	* server.c (main): Recognize 'Z' and 'z' packets.
-
-2005-05-10  Ulrich Weigand  <uweigand@de.ibm.com>
-
-	* linux-s390-low.c (s390_breakpoint, s390_breakpoint_len): Define.
-	(s390_get_pc, s390_set_pc, s390_breakpoint_at): New functions.
-	(the_low_target): Add new members.
-
-2005-05-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* proc-service.c (ps_lgetregs): Search all_processes instead of
-	all_threads.
-
-2005-05-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* server.c (start_inferior): Change return type to int.
-	(attach_inferior): Change sigptr to int *.
-	(handle_v_cont, handle_v_requests): Change signal to int *.
-	(main): Change signal to int.
-
-2005-04-15  Kei Sakamoto  <sakamoto.kei@renesas.com>
-
-	* Makefile.in: Add linux-m32r-low.o, reg-m32r.c and reg-m32r.o.
-	* configure.srv: Add m32r*-*-linux*.
-	* linux-m32r-low.c: New file.
-
-2005-03-04  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* Makefile.in (stamp-h): Set CONFIG_HEADERS explicitly.
-
-2005-03-03  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* inferiors.c (change_inferior_id, add_thread, find_inferior_id):
-	Take unsigned long arguments for PIDs.
-	* linux-low.c (add_process, linux_attach_lwp, linux_attach)
-	(linux_thread_alive, linux_wait_for_event, kill_lwp, send_sigstop)
-	(wait_for_sigstop, linux_resume_one_process)
-	(regsets_fetch_inferior_registers, linux_send_signal)
-	(linux_read_auxv): Likewise.  Update the types of variables holding
-	PIDs.  Update format string specifiers.
-	* linux-low.h (struct process_info, linux_attach_lwp): Likewise.
-	* remote-utils.c (prepare_resume_reply): Likewise.
-	* server.c (cont_thread, general_thread, step_thread)
-	(thread_from_wait, old_thread_from_wait, signal_pid): Change type to
-	unsigned long.
-	(handle_query): Update format specifiers.
-	(handle_v_cont, main): Use strtoul for thread IDs.
-	* server.h (struct inferior_list_entry): Use unsigned long for ID.
-	(add_thread, find_inferior_id, change_inferior_id, cont_thread)
-	(general_thread, step_thread, thread_from_wait)
-	(old_thread_from_wait): Update.
-	* target.h (struct thread_resume): Use unsigned long for THREAD.
-	(struct target_ops): Use unsigned long for arguments to attach and
-	thread_alive.
-
-2005-02-24  Daniel Jacobowitz  <dan@codesourcery.com>
-
-	* acinclude.m4: Include bfd/bfd.m4 directly.
-	* configure.ac: Use AC_ARG_PROGRAM.  Suggested by Aron Griffis
-	<agriffis@toolchain.org>.
-	* aclocal.m4, configure: Regenerated.
-
-2005-01-07  Andrew Cagney  <cagney@gnu.org>
-
-	* configure.ac: Rename configure.in, require autoconf 2.59.
-	* configure: Re-generate.
-
-2004-12-08  Daniel Jacobowitz  <dan@debian.org>
-
-	* acinclude.m4 (SRV_CHECK_THREAD_DB): Add ps_get_thread_area.  Reset
-	LIBS when finished.
-	* aclocal.m4: Regenerated.
-	* configure: Regenerated.
-
-2004-11-21  Andreas Schwab  <schwab@suse.de>
-
-	* linux-m68k-low.c (m68k_num_gregs): Define.
-	(m68k_fill_gregset, m68k_store_gregset, m68k_fill_fpregset)
-	(m68k_store_fpregset, target_regsets) [HAVE_LINUX_REGSETS]: New.
-	(m68k_breakpoint, m68k_breakpoint_len, m68k_get_pc, m68k_set_pc)
-	(m68k_breakpoint_at): New.  Add to the_low_target.
-
-	* configure.srv (m68*-*-linux*): Set srv_linux_regsets and
-	srv_linux_thread_db to yes.
-
-2004-10-20  Joel Brobecker  <brobecker@gnat.com>
-
-	* linux-x86-64-low.c (ARCH_SET_GS): Add definition if missing.
-	(ARCH_SET_FS): Likewise.
-	(ARCH_GET_FS): Likewise.
-	(ARCH_GET_GS): Likewise.
-
-2004-10-16  Daniel Jacobowitz  <dan@debian.org>
-
-	* linux-i386-low.c (ps_get_thread_area): New.
-	* linux-x86-64-low.c (ps_get_thread_area): New.
-	* linux-low.c: Include <sys/syscall.h>.
-	(linux_kill_one_process): Don't kill the first thread here.
-	(linux_kill): Kill the first thread here.
-	(kill_lwp): New function.
-	(send_sigstop, linux_send_signal): Use it.
-	* proc-service.c: Clean up #ifdefs.
-	(fpregset_info): Delete.
-	(ps_lgetregs): Update and enable implementation.
-	(ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs): Remove disabled
-	implementations.
-	* remote-utils.c (struct sym_cache, symbol_cache): New.
-	(input_interrupt): Print a clearer message.
-	(async_io_enabled): New variable.
-	(enable_async_io, disable_async_io): Use it.  Update comments.
-	(look_up_one_symbol): Use the symbol cache.
-	* thread-db.c (thread_db_look_up_symbols): New function.
-	(thread_db_init): Update comments.  Call thread_db_look_up_symbols.
-
-2004-10-16  Daniel Jacobowitz  <dan@debian.org>
-
-	* configure.in: Test for -rdynamic.
-	* configure: Regenerated.
-	* Makefile (INTERNAL_LDFLAGS): New.
-	(gdbserver, gdbreplay): Use it.
-
-2004-09-02  Andrew Cagney  <cagney@gnu.org>
-
-	* Makefile.in (TAGS): Replace TM_FILE with DEPRECATED_TM_FILE.
-
-2004-03-23  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (linux_wait): Clear all_processes list also.
-
-2004-03-12  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c: Include <errno.h>.  Remove extern declaration of
-	errno.
-
-2004-03-12  Daniel Jacobowitz  <drow@mvista.com>
-
-	* gdbreplay.c, server.h, utils.c: Update copyright years.
-
-2004-03-04  Nathan J. Williams  <nathanw@wasabisystems.com>
-
-	* server.c (main): Print child status or termination signal from
-	variable 'signal', not 'sig'.
-
-2004-03-04  Nathan J. Williams  <nathanw@wasabisystems.com>
-
-	* linux-low.c (linux_read_memory): Change return type to
-	int.  Check for and return error from ptrace().
-	* target.c (read_inferior_memory): Change return type to int.  Pass
-	back return status from the_target->read_memory().
-	* target.h (struct target_ops): Adapt *read_memory() prototype.
-	Update comment.
-	(read_inferior_memory): Adapt prototype.
-	* server.c (main): Return an error packet if
-	read_inferior_memory() returns an error.
-
-2004-03-04  Daniel Jacobowitz  <drow@mvista.com>
-
-	* Makefile.in (distclean): Remove config.h, stamp-h, and config.log.
-	Unify with other clean targets.
-
-2004-02-29  Daniel Jacobowitz  <drow@mvista.com>
-
-	* server.c (handle_v_cont): Call set_desired_inferior.
-
-2004-02-29  Daniel Jacobowitz  <drow@mvista.com>
-
-	* remote-utils.c (prepare_resume_reply): Always supply "thread:".
-
-2004-02-29  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (linux_wait): Unblock async I/O.
-	(linux_resume): Block and enable async I/O.
-	* remote-utils.c (block_async_io, unblock_async_io): New functions.
-	* server.h (block_async_io, unblock_async_io): Add prototypes.
-
-2004-02-29  Daniel Jacobowitz  <drow@mvista.com>
-
-	* remote-utils.c (remote_open): Print a status notice after
-	opening a TCP port.
-	* server.c (attach_inferior): Print a status notice after
-	attaching.
-
-2004-02-29  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-arm-low.c (arm_get_pc): Print out stop PC in debug mode.
-
-2004-02-26  Daniel Jacobowitz  <drow@mvista.com>
-
-	* remote-utils.c (write_enn): Use "E01" instead of "ENN" for the
-	error packet.
-	* server.c, target.h: Update copyright years.
-
-2004-02-25  Roland McGrath  <roland@redhat.com>
-
-	* target.h (struct target_ops): New member `read_auxv'.
-	* server.c (handle_query): Handle qPart:auxv:read: query using that.
-	* linux-low.c (linux_read_auxv): New function.
-	(linux_target_ops): Initialize `read_auxv' member to that.
-
-2004-02-17  Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
-
-	Committed by Jim Blandy  <jimb@redhat.com>.
-
-	* linux-s390-low.c (s390_num_regs): Update.
-	(s390_regmap): Remove control registers.  Use __s390x__ predefine
-	instead of GPR_SIZE to distiguish s390 and s390x targets.
-
-2004-01-31  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c: Update copyright year.
-	(check_removed_breakpoint): Clear pending_is_breakpoint.
-	(linux_set_resume_request, linux_queue_one_thread)
-	(resume_status_pending_p): New functions.
-	(linux_continue_one_thread): Use process->resume.
-	(linux_resume): Only resume threads if there are no pending events.
-	* linux-low.h (struct process_info): Add resume request
-	pointer.
-
-2004-01-30  Daniel Jacobowitz  <drow@mvista.com>
-
-	* regcache.c (new_register_cache): Clear the allocated register
-	buffer.  Suggested by Atsushi Nemoto <anemo@mba.ocn.ne.jp>.
-
-2003-10-13  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (linux_resume): Take a struct thread_resume *
-	argument.
-	(linux_wait): Update call.
-	(resume_ptr): New static variable.
-	(linux_continue_one_thread): Renamed from
-	linux_continue_one_process.  Use resume_ptr.
-	(linux_resume): Use linux_continue_one_thread.
-	* server.c (handle_v_cont, handle_v_requests): New functions.
-	(myresume): New function.
-	(main): Handle 'v' case.
-	* target.h (struct thread_resume): New type.
-	(struct target_ops): Change argument of "resume" to struct
-	thread_resume *.
-	(myresume): Delete macro.
-
-2003-08-08  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* Makefile.in (install-only): Create dest dir. Support DESTDIR.
-	(uninstall): Support DESTDIR.
-
-Mon Jul 21 20:09:34 UTC 2003  Brendan Conoboy  <blc@redhat.com>
-
-	* configure.srv: Add xscale*linux copy of arm*linux entry.
-
-2003-07-24  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-arm-low.c (arm_reinsert_addr): New function.
-	(the_low_target): Add arm_reinsert_addr.
-
-2003-07-08  Mark Kettenis  <kettenis@gnu.org>
-
-	* mem-break.c: Remove whitespace at end of file.
-
-2003-06-28  Daniel Jacobowitz  <drow@mvista.com>
-
-	* configure.in: Check whether we need to prototype strerror.
-	* server.h: Optionally prototype strerror.
-	* gdbreplay.c (perror_with_name): Use strerror.
-	* linux-low.c (linux_attach_lwp): Use strerror.
-	* utils.c (perror_with_name): Use strerror.
-	* config.in, configure: Regenerated.
-
-2003-06-28  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-sh-low.c (sh_regmap): Fix FP register offsets, reported by
-	SUGIOKA Toshinobu <sugioka@itonet.co.jp>.
-
-2003-06-20  Daniel Jacobowitz  <drow@mvista.com>
-
-	* Makefile.in (SFILES): Update.
-	* low-hppabsd.c, low-lynx.c, low-nbsd.c, low-sim.c, low-sparc.c,
-	low-sun3.c: Remove files.
-
-2003-06-17  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c: Move comment to linux_thread_alive where it belonged.
-	(linux_detach_one_process, linux_detach): New functions.
-	(linux_target_ops): Add linux_detach.
-	* server.c (main): Handle 'D' packet.
-	* target.h (struct target_ops): Add "detach" member.
-	(detach_inferior): Define.
-
-2003-06-13  Mark Kettenis  <kettenis@gnu.org>
-
-	From Kelley Cook  <kelleycook@wideopenwest.com>:
-	* configure.srv: Accept i[34567]86 variants.
-
-2003-06-05  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (linux_wait_for_event): Correct comment typos.
-	(linux_resume_one_process): Call check_removed_breakpoint.
-	(linux_send_signal): New function.
-	(linux_target_ops): Add linux_send_signal.
-	* remote-utils.c (putpkt, input_interrupt): Use send_signal instead
-	of kill.
-	* target.h (struct target_ops): Add send_signal.
-
-2003-05-29  Jim Blandy  <jimb@redhat.com>
-
-	* linux-low.c (usr_store_inferior_registers): Transfer buf in
-	PTRACE_XFER_TYPE-sized chunks, not int-sized chunks.  Otherwise,
-	if 'int' is smaller than PTRACE_XFER_TYPE, you end up throwing
-	away part of the register's value.
-
-2003-03-26  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (linux_create_inferior): Use __SIGRTMIN.
-	(linux_wait_for_event, linux_init_signals): Likewise.
-
-2003-03-17  Daniel Jacobowitz  <drow@mvista.com>
-
-	* configure.in: Check for stdlib.h.
-	* configure: Regenerated.
-	* config.in: Regenerated.
-
-2003-01-04  Andreas Schwab  <schwab@suse.de>
-
-	* linux-m68k-low.c (m68k_num_regs): Define to 29 instead of 31.
-
-2003-01-02  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in: Remove obsolete code.
-
-2002-11-20  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-s390-low.c (s390_regmap): Check GPR_SIZE instead of
-	defined(PT_FPR0_HI).
-
-2002-11-17  Stuart Hughes  <seh@zee2.com>
-
-	* linux-arm-low.c (arm_num_regs): Increase.
-	(arm_regmap): Include status register.
-
-2002-11-17  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (register_addr): Remove incorrect -1 check.
-
-2002-08-29  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (linux_create_inferior): Call setpgid.  Return
-	the new PID.
-	(unstopped_p, linux_signal_pid): Remove.
-	(linux_target_ops): Remove linux_signal_pid.
-	* remote-utils.c (putpkt, input_interrupt): Use signal_pid
-	global instead of target method.
-	* target.h (struct target_ops): Remove signal_pid.  Update comment
-	for create_inferior.
-	* server.c (signal_pid): New variable.
-	(create_inferior): Set signal_pid.  Block SIGTTOU and SIGTTIN in
-	gdbserver.  Set the child to be the foreground process group.
-	(attach_inferior): Set signal_pid.
-
-2002-08-23  Daniel Jacobowitz  <drow@mvista.com>
-
-	* ChangeLog: New file, with entries from gdb/ChangeLog after GDB 5.2.
-
-2002-08-20  Jim Blandy  <jimb@redhat.com>
-
-	* Makefile.in (LDFLAGS): Allow the configure script to establish a
-	default for this.
-
-2002-08-01  Andrew Cagney  <cagney@redhat.com>
-
-	* Makefile.in: Make chill references obsolete.
-
-2002-07-24  Kevin Buettner  <kevinb@redhat.com>
-
-	* configure.in (unistd.h): Add to AC_CHECK_HEADERS list.
-	* configure: Regenerate.
-	* config.in: Regenerate.
-
-2002-07-09  David O'Brien  <obrien@FreeBSD.org>
-
-	* gdbreplay.c (stdlib.h, unistd.h): Conditionaly include.
-	(perror_with_name, remote_close, remote_open, expect, play): Static.
-
-2002-07-04  Michal Ludvig  <mludvig@suse.cz>
-
-	* linux-x86-64-low.c (x86_64_regmap): Make it an array of
-	byte offsets instead of an array of indexes.
-	(x86_64_store_gregset, x86_64_store_fpregset): Parameter made const.
-
-2002-06-13  Daniel Jacobowitz  <drow@mvista.com>
-
-	* regcache.c: Add comment.
-
-2002-06-11  Daniel Jacobowitz  <drow@mvista.com>
-
-	* thread-db.c: New file.
-	* proc-service.c: New file.
-	* acinclude.m4: New file.
-	* Makefile.in: Add GDBSERVER_LIBS, gdb_proc_service_h,
-	proc-service.o, and thread-db.o.
-	(linux-low.o): Add USE_THREAD_DB.
-	* acconfig.h: Add HAVE_PRGREGSET_T, HAVE_PRFPREGSET_T,
-	HAVE_LWPID_T, HAVE_PSADDR_T, and PRFPREGSET_T_BROKEN.
-	* aclocal.m4: Regenerated.
-	* config.in: Regenerated.
-	* configure: Regenerated.
-	* configure.in: Check for proc_service.h, sys/procfs.h,
-	thread_db.h, and linux/elf.h headrs.
-	Check for lwpid_t, psaddr_t, prgregset_t, prfpregset_t, and
-	PRFPREGSET_T_BROKEN.  Introduce srv_thread_depfiles and USE_THREAD_DB.
-	Check for -lthread_db and thread support.
-	* configure.srv: Enable thread_db support for ARM, i386, MIPS,
-	PowerPC, and SuperH.
-	* i387-fp.c: Constify arguments.
-	* i387-fp.h: Likewise.
-	* inferiors.c: (struct thread_info): Renamed from
-	`struct inferior_info'.  Remove PID member.  Use generic inferior
-	list header.  All uses updated.
-	(inferiors, signal_pid): Removed.
-	(all_threads): New variable.
-	(get_thread): Define.
-	(add_inferior_to_list): New function.
-	(for_each_inferior): New function.
-	(change_inferior_id): New function.
-	(add_inferior): Removed.
-	(remove_inferior): New function.
-	(add_thread): New function.
-	(free_one_thread): New function.
-	(remove_thread): New function.
-	(clear_inferiors): Use for_each_inferior and free_one_thread.
-	(find_inferior): New function.
-	(find_inferior_id): New function.
-	(inferior_target_data): Update argument type.
-	(set_inferior_target_data): Likewise.
-	(inferior_regcache_data): Likewise.
-	(set_inferior_regcache_data): Likewise.
-	* linux-low.c (linux_bp_reinsert): Remove.
-	(all_processes, stopping_threads, using_thrads)
-	(struct pending_signals, debug_threads, pid_of): New.
-	(inferior_pid): Replace with macro.
-	(struct inferior_linux_data): Remove.
-	(get_stop_pc, add_process): New functions.
-	(linux_create_inferior): Restore SIGRTMIN+1 before calling exec.
-	Use add_process and add_thread.
-	(linux_attach_lwp): New function, based on old linux_attach.  Use
-	add_process and add_thread.  Set stop_expected for new threads.
-	(linux_attach): New function.
-	(linux_kill_one_process): New function.
-	(linux_kill): Kill all LWPs.
-	(linux_thread_alive): Use find_inferior_id.
-	(check_removed_breakpoints, status_pending_p): New functions.
-	(linux_wait_for_process): Renamed from linux_wait_for_one_inferior.
-	Update.  Use WNOHANG.  Wait for cloned processes also.  Update process
-	struct for the found process.
-	(linux_wait_for_event): New function.
-	(linux_wait): Use it.  Support LWPs.
-	(send_sigstop, wait_for_sigstop, stop_all_processes)
-	(linux_resume_one_process, linux_continue_one_process): New functions.
-	(linux_resume): Support LWPs.
-	(REGISTER_RAW_SIZE): Remove.
-	(fetch_register): Use register_size instead.  Call supply_register.
-	(usr_store_inferior_registers): Likewise.  Call collect_register.
-	Fix recursive case.
-	(regsets_fetch_inferior_registers): Improve error message.
-	(regsets_store_inferior_registers): Add debugging.
-	(linux_look_up_symbols): Call thread_db_init if USE_THREAD_DB.
-	(unstopped_p, linux_signal_pid): New functions.
-	(linux_target_ops): Add linux_signal_pid.
-	(linux_init_signals): New function.
-	(initialize_low): Call it.  Initialize using_threads.
-	* regcache.c (inferior_regcache_data): Add valid
-	flag.
-	(get_regcache): Fetch registers lazily.  Add fetch argument
-	and update all callers.
-	(regcache_invalidate_one, regcache_invalidate): New
-	functions.
-	(new_register_cache): Renamed from create_register_cache.
-	Return the new regcache.
-	(free_register_cache): Change argument to a void *.
-	(registers_to_string, registers_from_string): Call get_regcache
-	with fetch flag set.
-	(register_data): Make static.  Pass fetch flag to get_regcache.
-	(supply_register): Call get_regcache with fetch flag clear.
-	(collect_register): Call get_regcache with fetch flag set.
-	(collect_register_as_string): New function.
-	* regcache.h: Update.
-	* remote-utils.c (putpkt): Flush after debug output and use
-	stderr.
-	Handle input interrupts while waiting for an ACK.
-	(input_interrupt): Use signal_pid method.
-	(getpkt): Flush after debug output and use stderr.
-	(outreg): Use collect_register_as_string.
-	(new_thread_notify, dead_thread_notify): New functions.
-	(prepare_resume_reply): Check using_threads.  Set thread_from_wait
-	and general_thread.
-	(look_up_one_symbol): Flush after debug output.
-	* server.c (step_thread, server_waiting): New variables.
-	(start_inferior): Don't use signal_pid.  Update call to mywait.
-	(attach_inferior): Update call to mywait.
-	(handle_query): Handle qfThreadInfo and qsThreadInfo.
-	(main): Don't fetch/store registers explicitly.  Use
-	set_desired_inferior.  Support proposed ``Hs'' packet.  Update
-	calls to mywait.
-	* server.h: Update.
-	(struct inferior_list, struct_inferior_list_entry): New.
-	* target.c (set_desired_inferior): New.
-	(write_inferior_memory): Constify.
-	(mywait): New function.
-	* target.h: Update.
-	(struct target_ops): New signal_pid method.
-	(mywait): Removed macro, added prototype.
-
-	* linux-low.h (regset_func): Removed.
-	(regset_fill_func, regset_store_func): New.
-	(enum regset_type): New.
-	(struct regset_info): Add type field.  Use new operation types.
-	(struct linux_target_ops): stop_pc renamed to get_pc.
-	Add decr_pc_after_break and breakpoint_at.
-	(get_process, get_thread_proess, get_process_thread)
-	(strut process_info, all_processes, linux_attach_lwp)
-	(thread_db_init): New.
-
-	* linux-arm-low.c (arm_get_pc, arm_set_pc,
-	arm_breakpoint, arm_breakpoint_len, arm_breakpoint_at): New.
-	(the_low_target): Add new members.
-	* linux-i386-low.c (i386_store_gregset, i386_store_fpregset)
-	(i386_store_fpxregset): Constify.
-	(target_regsets): Add new kind identifier.
-	(i386_get_pc): Renamed from i386_stop_pc.  Simplify.
-	(i386_set_pc): Add debugging.
-	(i386_breakpoint_at): New function.
-	(the_low_target): Add new members.
-	* linux-mips-low.c (mips_get_pc, mips_set_pc)
-	(mips_breakpoint, mips_breakpoint_len, mips_reinsert_addr)
-	(mips_breakpoint_at): New.
-	(the_low_target): Add new members.
-	* linux-ppc-low.c (ppc_get_pc, ppc_set_pc)
-	(ppc_breakpoint, ppc_breakpoint_len, ppc_breakpoint_at): New.
-	(the_low_target): Add new members.
-	* linux-sh-low.c (sh_get_pc, sh_set_pc)
-	(sh_breakpoint, sh_breakpoint_len, sh_breakpoint_at): New.
-	(the_low_target): Add new members.
-	* linux-x86-64-low.c (target_regsets): Add new kind
-	identifier.
-
-2002-05-15  Daniel Jacobowitz  <drow@mvista.com>
-
-	From Martin Pool <mbp@samba.org>:
-	* server.c (gdbserver_usage): New function.
-	(main): Call it.
-
-2002-05-14  Daniel Jacobowitz  <drow@mvista.com>
-
-	* mem-break.c (reinsert_breakpoint_by_bp): Correct typo
-	stop_at -> stop_pc.
-
-2002-05-04  Andrew Cagney  <ac131313@redhat.com>
-
-	* Makefile.in: Remove obsolete code.
-
-2002-04-24  Michal Ludvig  <mludvig@suse.cz>
-
-	* linux-low.c (regsets_fetch_inferior_registers),
-	(regsets_store_inferior_registers): Removed cast to int from
-	ptrace() calls.
-	* regcache.h: Added declaration of struct inferior_info.
-
-2002-04-20  Daniel Jacobowitz  <drow@mvista.com>
-
-	* inferiors.c (struct inferior_info): Add regcache_data.
-	(add_inferior): Call create_register_cache.
-	(clear_inferiors): Call free_register_cache.
-	(inferior_regcache_data, set_inferior_regcache_data): New functions.
-	* regcache.c (struct inferior_regcache_data): New.
-	(registers): Remove.
-	(get_regcache): New function.
-	(create_register_cache, free_register_cache): New functions.
-	(set_register_cache): Don't initialize the register cache here.
-	(registers_to_string, registers_from_string, register_data): Call
-	get_regcache.
-	* regcache.h: Add prototypes.
-	* server.h: Likewise.
-
-2002-04-20  Daniel Jacobowitz  <drow@mvista.com>
-
-	* mem-break.c: New file.
-	* mem-break.h: New file.
-	* Makefile.in: Add mem-break.o rule; update server.h
-	dependencies.
-	* inferiors.c (struct inferior_info): Add target_data
-	member.
-	(clear_inferiors): Free target_data member if set.
-	(inferior_target_data, set_inferior_target_data): New functions.
-	* linux-i386-low.c (i386_breakpoint, i386_breakpoint_len)
-	(i386_stop_pc, i386_set_pc): New.  Add to the_low_target.
-	* linux-low.c (linux_bp_reinsert): New variable.
-	(struct inferior_linux_data): New.
-	(linux_create_inferior): Use set_inferior_target_data.
-	(linux_attach): Likewise.  Call add_inferior.
-	(linux_wait_for_one_inferior): New function.
-	(linux_wait): Call it.
-	(linux_write_memory): Add const.
-	(initialize_low): Call set_breakpoint_data.
-	* linux-low.h (struct linux_target_ops): Add breakpoint
-	handling members.
-	* server.c (attach_inferior): Remove extra add_inferior
-	call.
-	* server.h: Include mem-break.h.  Update inferior.c
-	prototypes.
-	* target.c (read_inferior_memory)
-	(write_inferior_memory): New functions.
-	* target.h (read_inferior_memory)
-	(write_inferior_memory): Change macros to prototypes.
-	(struct target_ops): Update comments.  Add const to write_memory
-	definition.
-
-2002-04-11  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.c (usr_store_inferior_registers): Support
-	registers which are allowed to fail to store.
-	* linux-low.h (linux_target_ops): Likewise.
-	* linux-ppc-low.c (ppc_regmap): Support FPSCR.
-	(ppc_cannot_store_register): FPSCR may not be storable.
-
-2002-04-09  Daniel Jacobowitz  <drow@mvista.com>
-
-	* server.h: Include <string.h> if HAVE_STRING_H.
-	* ChangeLog: Correct paths in last ChangeLog entry.
-
-2002-04-09  Daniel Jacobowitz  <drow@mvista.com>
-
-	* linux-low.h: Remove obsolete prototypes.
-	(struct linux_target_ops): New.
-	(extern the_low_target): New.
-	* linux-low.c (num_regs, regmap): Remove declarations.
-	(register_addr): Use the_low_target explicitly.
-	(fetch_register): Likewise.
-	(usr_fetch_inferior_registers): Likewise.
-	(usr_store_inferior_registers): Likewise.
-	* linux-arm-low.c (num_regs): Remove.
-	(arm_num_regs): Define.
-	(arm_regmap): Renamed from regmap, made static.
-	(arm_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(arm_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-i386-low.c (num_regs): Remove.
-	(i386_num_regs): Define.
-	(i386_regmap): Renamed from regmap, made static.
-	(i386_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(i386_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-ia64-low.c (num_regs): Remove.
-	(ia64_num_regs): Define.
-	(ia64_regmap): Renamed from regmap, made static.
-	(ia64_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(ia64_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-m68k-low.c (num_regs): Remove.
-	(m68k_num_regs): Define.
-	(m68k_regmap): Renamed from regmap, made static.
-	(m68k_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(m68k_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-mips-low.c (num_regs): Remove.
-	(mips_num_regs): Define.
-	(mips_regmap): Renamed from regmap, made static.
-	(mips_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(mips_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-ppc-low.c (num_regs): Remove.
-	(ppc_num_regs): Define.
-	(ppc_regmap): Renamed from regmap, made static.
-	(ppc_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(ppc_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-s390-low.c (num_regs): Remove.
-	(s390_num_regs): Define.
-	(s390_regmap): Renamed from regmap, made static.
-	(s390_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(s390_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-sh-low.c (num_regs): Remove.
-	(sh_num_regs): Define.
-	(sh_regmap): Renamed from regmap, made static.
-	(sh_cannot_fetch_register): Renamed from cannot_fetch_register,
-	made static.
-	(sh_cannot_store_register): Renamed from cannot_store_register,
-	made static.
-	(the_low_target): New.
-	* linux-x86-64-low.c (x86_64_regmap): Renamed from regmap.
-	(the_low_target): New.
-
-2002-04-09  Daniel Jacobowitz  <drow@mvista.com>
-
-	* Makefile.in: Add stamp-h target.
-	* configure.in: Create stamp-h.
-	* configure: Regenerated.
-
-2002-04-09  Daniel Jacobowitz  <drow@mvista.com>
-
-	* inferiors.c: New file.
-	* target.c: New file.
-	* target.h: New file.
-	* Makefile.in:  Add target.o and inferiors.o.  Update
-	dependencies.
-	* linux-low.c (inferior_pid): New static variable,
-	moved from server.c.
-	(linux_create_inferior): Renamed from create_inferior.
-	Call add_inferior.  Return 0 on success instead of a PID.
-	(linux_attach): Renamed from myattach.
-	(linux_kill): Renamed from kill_inferior.  Call clear_inferiors ().
-	(linux_thread_alive): Renamed from mythread_alive.
-	(linux_wait): Renamed from mywait.  Call clear_inferiors () if the
-	child dies.
-	(linux_resume): Renamed from myresume.  Add missing ``return 0''.
-	(regsets_store_inferior_registers): Correct error message.
-	Add missing ``return 0''.
-	(linux_fetch_registers): Renamed from fetch_inferior_registers.
-	(linux_store_registers): Renamed from store_inferior_registers.
-	(linux_read_memory): Renamed from read_inferior_memory.
-	(linux_write_memory): Renamed from write_inferior_memory.
-	(linux_target_ops): New structure.
-	(initialize_low): Call set_target_ops ().
-	* remote-utils.c (unhexify): New function.
-	(hexify): New function.
-	(input_interrupt): Send signals to ``signal_pid''.
-	* server.c (inferior_pid): Remove.
-	(start_inferior): Update create_inferior call.
-	(attach_inferior): Call add_inferior.
-	(handle_query): New function.
-	(main): Call handle_query for `q' packets.
-	* server.h: Include "target.h".  Remove obsolete prototypes.
-	Add prototypes for "inferiors.c", "target.c", hexify, and unhexify.
-
-2002-04-09  Daniel Jacobowitz  <drow@mvista.com>
-
-	* Makefile.in: Add WARN_CFLAGS.  Update configury
-	dependencies.
-	* configure.in: Check for <string.h>
-	* configure: Regenerate.
-	* config.in: Regenerate.
-	* gdbreplay.c: Include needed system headers.
-	(remote_open): Remove strchr prototype.
-	* linux-low.h: Correct #ifdef to HAVE_LINUX_USRREGS.
-	* regcache.c (supply_register): Change buf argument to const void *.
-	(supply_register_by_name): Likewise.
-	(collect_register): Change buf argument to void *.
-	(collect_register_by_name): Likewise.
-	* regcache.h: Add missing prototypes.
-	* remote-utils.c: Include <arpa/inet.h> for inet_ntoa.
-	* server.c (handle_query): New function.
-	(attached): New static variable, moved out of main.
-	(main): Quiet longjmp clobber warnings.
-	* server.h: Add ATTR_NORETURN and ATTR_FORMAT.  Update prototypes.
-	* utils.c (error): Remove NORETURN.
-	(fatal): Likewise.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/config.in ./gdb/gdbserver/config.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/config.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/config.in	1970-01-01 00:00:00.000000000 +0000
@@ -1,445 +0,0 @@
-/* config.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-   systems. This function is required for `alloca.c' support on those systems.
-   */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if std::thread works. */
-#undef CXX_STD_THREAD
-
-/* Define to 1 if using `alloca.c'. */
-#undef C_ALLOCA
-
-/* Define if self-testing features should be enabled */
-#undef GDB_SELF_TEST
-
-/* Define to 1 if you have `alloca', as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-   */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#undef HAVE_ARPA_INET_H
-
-/* define if the compiler supports basic C++11 syntax */
-#undef HAVE_CXX11
-
-/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
-   you don't. */
-#undef HAVE_DECL_ADDR_NO_RANDOMIZE
-
-/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_ASPRINTF
-
-/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if
-   you don't. */
-#undef HAVE_DECL_BASENAME
-
-/* 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 `perror', and to 0 if you don't.
-   */
-#undef HAVE_DECL_PERROR
-
-/* 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
-
-/* 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 `strtol', and to 0 if you don't.
-   */
-#undef HAVE_DECL_STRTOL
-
-/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOLL
-
-/* Define to 1 if you have the declaration of `strtoul', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOUL
-
-/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOULL
-
-/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRVERSCMP
-
-/* 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 `dladdr' function. */
-#undef HAVE_DLADDR
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if the system has the type `Elf32_auxv_t'. */
-#undef HAVE_ELF32_AUXV_T
-
-/* Define to 1 if the system has the type `Elf64_auxv_t'. */
-#undef HAVE_ELF64_AUXV_T
-
-/* Define if <sys/procfs.h> has elf_fpregset_t. */
-#undef HAVE_ELF_FPREGSET_T
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the `fdwalk' function. */
-#undef HAVE_FDWALK
-
-/* Define to 1 if you have the `fork' function. */
-#undef HAVE_FORK
-
-/* Define to 1 if you have the `getauxval' function. */
-#undef HAVE_GETAUXVAL
-
-/* Define to 1 if you have the `getrlimit' function. */
-#undef HAVE_GETRLIMIT
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define to 1 if you have the `dl' library (-ldl). */
-#undef HAVE_LIBDL
-
-/* Define if the target supports branch tracing. */
-#undef HAVE_LINUX_BTRACE
-
-/* Define to 1 if you have the <linux/elf.h> header file. */
-#undef HAVE_LINUX_ELF_H
-
-/* Define to 1 if you have the <linux/perf_event.h> header file. */
-#undef HAVE_LINUX_PERF_EVENT_H
-
-/* Define if the target supports register sets. */
-#undef HAVE_LINUX_REGSETS
-
-/* Define if the target supports PTRACE_PEEKUSR for register access. */
-#undef HAVE_LINUX_USRREGS
-
-/* Define to 1 if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define to 1 if the system has the type `long long'. */
-#undef HAVE_LONG_LONG
-
-/* Define if <thread_db.h> has lwpid_t. */
-#undef HAVE_LWPID_T
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#undef HAVE_NETINET_IN_H
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#undef HAVE_NETINET_TCP_H
-
-/* Define if you support the personality syscall. */
-#undef HAVE_PERSONALITY
-
-/* Define to 1 if you have the `pipe' function. */
-#undef HAVE_PIPE
-
-/* Define to 1 if you have the `pipe2' function. */
-#undef HAVE_PIPE2
-
-/* Define to 1 if you have the `pread' function. */
-#undef HAVE_PREAD
-
-/* Define to 1 if you have the `pread64' function. */
-#undef HAVE_PREAD64
-
-/* Define if <sys/procfs.h> has prfpregset_t. */
-#undef HAVE_PRFPREGSET_T
-
-/* Define if <sys/procfs.h> has prgregset_t. */
-#undef HAVE_PRGREGSET_T
-
-/* Define to 1 if you have the <proc_service.h> header file. */
-#undef HAVE_PROC_SERVICE_H
-
-/* Define if <thread_db.h> has psaddr_t. */
-#undef HAVE_PSADDR_T
-
-/* Have PTHREAD_PRIO_INHERIT. */
-#undef HAVE_PTHREAD_PRIO_INHERIT
-
-/* Define to 1 if you have the `pthread_setname_np' function. */
-#undef HAVE_PTHREAD_SETNAME_NP
-
-/* Define to 1 if you have the `pthread_sigmask' function. */
-#undef HAVE_PTHREAD_SIGMASK
-
-/* Define if the target supports PTRACE_GETFPXREGS for extended register
-   access. */
-#undef HAVE_PTRACE_GETFPXREGS
-
-/* Define if the target supports PTRACE_GETREGS for register access. */
-#undef HAVE_PTRACE_GETREGS
-
-/* Define to 1 if you have the <ptrace.h> header file. */
-#undef HAVE_PTRACE_H
-
-/* Define to 1 if you have the `pwrite' function. */
-#undef HAVE_PWRITE
-
-/* Define to 1 if you have the `setns' function. */
-#undef HAVE_SETNS
-
-/* Define to 1 if you have the `sigaction' function. */
-#undef HAVE_SIGACTION
-
-/* Define to 1 if you have the <signal.h> header file. */
-#undef HAVE_SIGNAL_H
-
-/* Define to 1 if you have the `sigprocmask' function. */
-#undef HAVE_SIGPROCMASK
-
-/* Define if sigsetjmp is available. */
-#undef HAVE_SIGSETJMP
-
-/* Define to 1 if you have the `socketpair' function. */
-#undef HAVE_SOCKETPAIR
-
-/* Define to 1 if the system has the type `socklen_t'. */
-#undef HAVE_SOCKLEN_T
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if `st_blksize' is a member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BLKSIZE
-
-/* Define to 1 if `st_blocks' is a member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BLOCKS
-
-/* 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 the target supports __sync_*_compare_and_swap */
-#undef HAVE_SYNC_BUILTINS
-
-/* 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/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
-/* Define to 1 if you have the <sys/procfs.h> header file. */
-#undef HAVE_SYS_PROCFS_H
-
-/* Define to 1 if you have the <sys/ptrace.h> header file. */
-#undef HAVE_SYS_PTRACE_H
-
-/* Define to 1 if you have the <sys/reg.h> header file. */
-#undef HAVE_SYS_REG_H
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#undef HAVE_SYS_RESOURCE_H
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* 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/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#undef HAVE_SYS_UN_H
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define if TD_VERSION is available. */
-#undef HAVE_TD_VERSION
-
-/* Define to 1 if you have the <termios.h> header file. */
-#undef HAVE_TERMIOS_H
-
-/* Define to 1 if you have the <thread_db.h> header file. */
-#undef HAVE_THREAD_DB_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if UST is available */
-#undef HAVE_UST
-
-/* Define to 1 if you have the `vfork' function. */
-#undef HAVE_VFORK
-
-/* Define to 1 if you have the <vfork.h> header file. */
-#undef HAVE_VFORK_H
-
-/* Define to 1 if you have the <wait.h> header file. */
-#undef HAVE_WAIT_H
-
-/* Define to 1 if `fork' works. */
-#undef HAVE_WORKING_FORK
-
-/* Define to 1 if `vfork' works. */
-#undef HAVE_WORKING_VFORK
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Additional package description */
-#undef PKGVERSION
-
-/* Define to necessary symbol if this constant uses a non-standard name on
-   your system. */
-#undef PTHREAD_CREATE_JOINABLE
-
-/* Define to the type of arg 1 for ptrace. */
-#undef PTRACE_TYPE_ARG1
-
-/* Define to the type of arg 3 for ptrace. */
-#undef PTRACE_TYPE_ARG3
-
-/* Define to the type of arg 4 for ptrace. */
-#undef PTRACE_TYPE_ARG4
-
-/* Define to the type of arg 5 for ptrace. */
-#undef PTRACE_TYPE_ARG5
-
-/* Define as the return type of ptrace. */
-#undef PTRACE_TYPE_RET
-
-/* Bug reporting address */
-#undef REPORT_BUGS_TO
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* 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.
-	STACK_DIRECTION > 0 => grows toward higher addresses
-	STACK_DIRECTION < 0 => grows toward lower addresses
-	STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if we should use libthread_db directly. */
-#undef USE_LIBTHREAD_DB_DIRECTLY
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
-/* Define if we should use libthread_db. */
-#undef USE_THREAD_DB
-
-/* 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. */
-#undef USE_WIN32API
-
-/* Define if an XML target description is available. */
-#undef USE_XML
-
-/* Enable large inode numbers on Mac OS X 10.5.  */
-#ifndef _DARWIN_USE_64_BIT_INODE
-# define _DARWIN_USE_64_BIT_INODE 1
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define as `fork' if `vfork' does not work. */
-#undef vfork
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/configure ./gdb/gdbserver/configure
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/configure	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/configure	1970-01-01 00:00:00.000000000 +0000
@@ -1,10726 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## 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
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="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_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  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"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# 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_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
-
-# 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_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
-
-
-# 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
-
-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
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO 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'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-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
-
-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_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'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="server.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-GNULIB_STDINT_H
-extra_libraries
-IPA_DEPFILES
-srv_xmlfiles
-srv_xmlbuiltin
-GDBSERVER_LIBS
-GDBSERVER_DEPFILES
-RDYNAMIC
-REPORT_BUGS_TEXI
-REPORT_BUGS_TO
-PKGVERSION
-WERROR_CFLAGS
-WARN_CFLAGS
-ustinc
-ustlibs
-PTHREAD_CFLAGS
-PTHREAD_LIBS
-PTHREAD_CC
-ax_pthread_config
-SED
-ALLOCA
-CCDEPMODE
-CONFIG_SRC_SUBDIR
-DEPDIR
-am__leading_dot
-host_noncanonical
-target_noncanonical
-CXX_DIALECT
-HAVE_CXX11
-RANLIB
-AR
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-EGREP
-GREP
-CPP
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-MAINT
-MAINTAINER_MODE_FALSE
-MAINTAINER_MODE_TRUE
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_maintainer_mode
-enable_largefile
-enable_unit_tests
-with_ust
-with_ust_include
-with_ust_lib
-enable_werror
-enable_build_warnings
-enable_gdb_build_warnings
-with_pkgversion
-with_bugurl
-with_libthread_db
-enable_inprocess_agent
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-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.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --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]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_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
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-  --target=TARGET   configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-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-maintainer-mode
-                          enable make rules and dependencies not useful (and
-                          sometimes confusing) to the casual installer
-  --disable-largefile     omit support for large files
-  --enable-unit-tests     Enable the inclusion of unit tests when compiling
-                          GDB
-  --enable-werror         treat compile warnings as errors
-  --enable-build-warnings enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings
-                          enable GDB specific build-time compiler warnings if
-                          gcc is used
-  --enable-inprocess-agent
-                          inprocess agent
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-ust=PATH       Specify prefix directory for the installed UST package
-                          Equivalent to --with-ust-include=PATH/include
-                          plus --with-ust-lib=PATH/lib
-  --with-ust-include=PATH Specify directory for installed UST include files
-  --with-ust-lib=PATH   Specify the directory for the installed UST 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-libthread-db=PATH
-                          use given libthread_db directly
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  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>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_objext; then :
-  ac_retval=0
-else
-  $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_c_try_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  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>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_objext; then :
-  ac_retval=0
-else
-  $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_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  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_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $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_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $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
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $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=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  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; } && { ac_try='./conftest$ac_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 :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  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_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  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
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-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_header_compile
-
-# 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_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
-ac_fn_c_check_func ()
-{
-  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
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* 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 $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext 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_func
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-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_decl
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_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_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
-  $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_cxx_try_link
-
-# ac_fn_cxx_check_func LINENO FUNC VAR
-# ------------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_cxx_check_func ()
-{
-  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
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* 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 $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext 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_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
-
-# 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
-  { $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"
-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
-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
-
-} # ac_fn_c_check_member
-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
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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_headers="$ac_config_headers config.h:config.in"
-
-
-
-{ $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
-
-
-
-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=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 -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  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_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # 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_CXX="$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
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-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_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  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
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# 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
-
-{ $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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  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
-
-
-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 how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_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_c_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_c_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_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_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_c_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_c_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 \"$CPP\" 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
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_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 grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_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 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "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_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_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_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_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 egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_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 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "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_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_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_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $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
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-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_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
-
-
-  if test "$MINIX" = yes; then
-
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
-
-
-$as_echo "#define _MINIX 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
-
-
-
-# Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
-  enableval=$enable_largefile;
-fi
-
-if test "$enable_largefile" != no; then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_sys_largefile_CC=no
-     if test "$GCC" != yes; then
-       ac_save_CC=$CC
-       while :; do
-	 # IRIX 6.2 and later do not support large files by default,
-	 # so use the C compiler's -n32 option if that helps.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-	 if ac_fn_c_try_compile "$LINENO"; then :
-  break
-fi
-rm -f core conftest.err conftest.$ac_objext
-	 CC="$CC -n32"
-	 if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_largefile_CC=' -n32'; break
-fi
-rm -f core conftest.err conftest.$ac_objext
-	 break
-       done
-       CC=$ac_save_CC
-       rm -f conftest.$ac_ext
-    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
-  if test "$ac_cv_sys_largefile_CC" != no; then
-    CC=$CC$ac_cv_sys_largefile_CC
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_file_offset_bits=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_file_offset_bits=64; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  ac_cv_sys_file_offset_bits=unknown
-  break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
-  no | unknown) ;;
-  *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -rf conftest*
-  if test $ac_cv_sys_file_offset_bits = unknown; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_large_files=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_large_files=1; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  ac_cv_sys_large_files=unknown
-  break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
-  no | unknown) ;;
-  *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
-esac
-rm -rf conftest*
-  fi
-
-
-fi
-
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$target_alias" = x; then
-  ac_cv_target=$ac_cv_host
-else
-  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
-  test "$program_prefix$program_suffix$program_transform_name" = \
-    NONENONEs,x,x, &&
-  program_prefix=${target_alias}-
-
-
-# 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 -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}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
-
-
-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.  */
-
-
-// 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 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;
-    }
-
-  }
-
-  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 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;
-    }
-
-  }
-
-  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_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
-
-#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;
-    }
-
-  }
-
-  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_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
-
-
-
-
-{ $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
-
-
-# Set the 'development' global.
-. $srcdir/../../bfd/development.sh
-
-
-# Check whether we will enable the inclusion of unit tests when
-# compiling GDB.
-#
-# 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").
-# Check whether --enable-unit-tests was given.
-if test "${enable_unit_tests+set}" = set; then :
-  enableval=$enable_unit_tests; case "${enableval}" in
-  yes)  enable_unittests=true  ;;
-  no)   enable_unittests=false ;;
-  *)    as_fn_error $? "bad value ${enableval} for --{enable,disable}-unit-tests option" "$LINENO" 5 ;;
-esac
-else
-  enable_unittests=$development
-fi
-
-
-if $enable_unittests; then
-
-$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
-
-
-  srv_selftest_objs="gdbsupport/selftest.o"
-
-fi
-
-
- case ${build_alias} in
-  "") build_noncanonical=${build} ;;
-  *) build_noncanonical=${build_alias} ;;
-esac
-
- case ${host_alias} in
-  "") host_noncanonical=${build_noncanonical} ;;
-  *) host_noncanonical=${host_alias} ;;
-esac
-
- case ${target_alias} in
-  "") target_noncanonical=${host_noncanonical} ;;
-  *) target_noncanonical=${target_alias} ;;
-esac
-
-
-
-
-
-
-# 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"
-
-
-
-# Create sub-directories for objects and dependencies.
-CONFIG_SRC_SUBDIR="arch gdbsupport"
-
-
-ac_config_commands="$ac_config_commands gdbdepdir"
-
-
-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
-
-  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
-
-    $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
-
-  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; }
-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
-
-fi
-
-
-gnulib_extra_configure_args=
-# If large-file support is disabled, make sure gnulib does the same.
-if test "$enable_largefile" = no; then
-gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
-fi
-
-# Configure gnulib.  We can't use AC_CONFIG_SUBDIRS as that'd expect
-# to find the the source subdir to be configured directly under
-# gdbserver/.  We need to build gnulib under some other directory not
-# "gnulib", to avoid the problem of both GDB and GDBserver wanting to
-# build it in the same directory, when building in the source dir.
-
-  in_src="../../gnulib"
-  in_build="build-gnulib-gdbserver"
-  in_extra_args="$gnulib_extra_configure_args"
-
-  # Remove --cache-file, --srcdir, and --disable-option-checking arguments
-  # so they do not pile up.
-  ac_sub_configure_args=
-  ac_prev=
-  eval "set x $ac_configure_args"
-  shift
-  for ac_arg
-  do
-    if test -n "$ac_prev"; then
-      ac_prev=
-      continue
-    fi
-    case $ac_arg in
-    -cache-file | --cache-file | --cache-fil | --cache-fi \
-    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-      ac_prev=cache_file ;;
-    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
-    | --c=*)
-      ;;
-    --config-cache | -C)
-      ;;
-    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-      ac_prev=srcdir ;;
-    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-      ;;
-    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-      ac_prev=prefix ;;
-    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-      ;;
-    --disable-option-checking)
-      ;;
-    *)
-      case $ac_arg in
-      *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-      esac
-      as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
-    esac
-  done
-
-  # Always prepend --prefix to ensure using the same prefix
-  # in subdir configurations.
-  ac_arg="--prefix=$prefix"
-  case $ac_arg in
-  *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-  esac
-  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
-
-  # Pass --silent
-  if test "$silent" = yes; then
-    ac_sub_configure_args="--silent $ac_sub_configure_args"
-  fi
-
-  # Always prepend --disable-option-checking to silence warnings, since
-  # different subdirs can have different --enable and --with options.
-  ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
-
-  ac_popdir=`pwd`
-  ac_dir=$in_build
-
-  ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
-  $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
-  $as_echo "$ac_msg" >&6
-  as_dir="$ac_dir"; as_fn_mkdir_p
-
-  case $srcdir in
-  [\\/]* | ?:[\\/]* )
-    ac_srcdir=$srcdir/$in_src ;;
-  *) # Relative name.
-    ac_srcdir=../$srcdir/$in_src ;;
-  esac
-
-  cd "$ac_dir"
-
-  ac_sub_configure=$ac_srcdir/configure
-
-  # Make the cache file name correct relative to the subdirectory.
-  case $cache_file in
-  [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
-  *) # Relative name.
-    ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
-  esac
-
-  if test -n "$in_extra_args"; then
-    # Add the extra args at the end.
-    ac_sub_configure_args="$ac_sub_configure_args $in_extra_args"
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
-$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
-  # The eval makes quoting arguments work.
-  eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
-       --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
-    as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
-
-  cd "$ac_popdir"
-
-
-
-  in_src="../../libiberty"
-  in_build="build-libiberty-gdbserver"
-  in_extra_args=
-
-  # Remove --cache-file, --srcdir, and --disable-option-checking arguments
-  # so they do not pile up.
-  ac_sub_configure_args=
-  ac_prev=
-  eval "set x $ac_configure_args"
-  shift
-  for ac_arg
-  do
-    if test -n "$ac_prev"; then
-      ac_prev=
-      continue
-    fi
-    case $ac_arg in
-    -cache-file | --cache-file | --cache-fil | --cache-fi \
-    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-      ac_prev=cache_file ;;
-    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
-    | --c=*)
-      ;;
-    --config-cache | -C)
-      ;;
-    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-      ac_prev=srcdir ;;
-    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-      ;;
-    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-      ac_prev=prefix ;;
-    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-      ;;
-    --disable-option-checking)
-      ;;
-    *)
-      case $ac_arg in
-      *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-      esac
-      as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
-    esac
-  done
-
-  # Always prepend --prefix to ensure using the same prefix
-  # in subdir configurations.
-  ac_arg="--prefix=$prefix"
-  case $ac_arg in
-  *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-  esac
-  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
-
-  # Pass --silent
-  if test "$silent" = yes; then
-    ac_sub_configure_args="--silent $ac_sub_configure_args"
-  fi
-
-  # Always prepend --disable-option-checking to silence warnings, since
-  # different subdirs can have different --enable and --with options.
-  ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
-
-  ac_popdir=`pwd`
-  ac_dir=$in_build
-
-  ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
-  $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
-  $as_echo "$ac_msg" >&6
-  as_dir="$ac_dir"; as_fn_mkdir_p
-
-  case $srcdir in
-  [\\/]* | ?:[\\/]* )
-    ac_srcdir=$srcdir/$in_src ;;
-  *) # Relative name.
-    ac_srcdir=../$srcdir/$in_src ;;
-  esac
-
-  cd "$ac_dir"
-
-  ac_sub_configure=$ac_srcdir/configure
-
-  # Make the cache file name correct relative to the subdirectory.
-  case $cache_file in
-  [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
-  *) # Relative name.
-    ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
-  esac
-
-  if test -n "$in_extra_args"; then
-    # Add the extra args at the end.
-    ac_sub_configure_args="$ac_sub_configure_args $in_extra_args"
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
-$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
-  # The eval makes quoting arguments work.
-  eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
-       --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
-    as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
-
-  cd "$ac_popdir"
-
-
-for ac_header in termios.h sys/reg.h string.h 		 proc_service.h sys/procfs.h linux/elf.h 		 fcntl.h signal.h sys/file.h 		 sys/ioctl.h netinet/in.h sys/socket.h netdb.h 		 netinet/tcp.h arpa/inet.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
-
-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 pread pwrite pread64 setns
-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_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.
-
-
-for ac_header in sys/ptrace.h ptrace.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
-
-
-gdb_ptrace_headers='
-#include <sys/types.h>
-#if HAVE_SYS_PTRACE_H
-# include <sys/ptrace.h>
-#endif
-#if HAVE_UNISTD_H
-# 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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of ptrace" >&5
-$as_echo_n "checking return type of ptrace... " >&6; }
-if ${gdb_cv_func_ptrace_ret+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$gdb_ptrace_headers
-int
-main ()
-{
-extern long ptrace (enum __ptrace_request, ...);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdb_cv_func_ptrace_ret='long'
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$gdb_ptrace_headers
-int
-main ()
-{
-extern int ptrace ();
-  ;
-  return 0;
-}
-_ACEOF
-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
-int
-main ()
-{
-extern long ptrace (enum __ptrace_request, ...);
-  ;
-  return 0;
-}
-_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
-/* end confdefs.h.  */
-$gdb_ptrace_headers
-int
-main ()
-{
-
-extern $gdb_cv_func_ptrace_ret
-  ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4);
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4";
-    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
-/* 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);
-
-  ;
-  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;
-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'}
-
-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
-shift
-
-cat >>confdefs.h <<_ACEOF
-#define PTRACE_TYPE_ARG1 $1
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PTRACE_TYPE_ARG3 $3
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PTRACE_TYPE_ARG4 $4
-_ACEOF
-
-if test -n "$5"; then
-
-cat >>confdefs.h <<_ACEOF
-#define PTRACE_TYPE_ARG5 $5
-_ACEOF
-
-fi
-
-
-# Check for UST
-ustlibs=""
-ustinc=""
-
-
-# Check whether --with-ust was given.
-if test "${with_ust+set}" = set; then :
-  withval=$with_ust;
-fi
-
-
-# Check whether --with-ust_include was given.
-if test "${with_ust_include+set}" = set; then :
-  withval=$with_ust_include;
-fi
-
-
-# Check whether --with-ust_lib was given.
-if test "${with_ust_lib+set}" = set; then :
-  withval=$with_ust_lib;
-fi
-
-
-case $with_ust in
-  no)
-    ustlibs=
-    ustinc=
-    ;;
-  "" | yes)
-    ustlibs=" -lust "
-    ustinc=""
-    ;;
-  *)
-    ustlibs="-L$with_ust/lib -lust"
-    ustinc="-I$with_ust/include "
-    ;;
-esac
-if test "x$with_ust_include" != x; then
-  ustinc="-I$with_ust_include "
-fi
-if test "x$with_ust_lib" != x; then
-  ustlibs="-L$with_ust_lib -lust"
-fi
-
-if test "x$with_ust" != "xno"; then
-  saved_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $ustinc"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ust" >&5
-$as_echo_n "checking for ust... " >&6; }
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#define CONFIG_UST_GDB_INTEGRATION
-#include <ust/ust.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };
-$as_echo "#define HAVE_UST 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }; ustlibs= ; ustinc=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$saved_CFLAGS"
-fi
-
-# Flags needed for UST
-
-
-
-
-# Check whether --enable-werror was given.
-if test "${enable_werror+set}" = set; then :
-  enableval=$enable_werror; case "${enableval}" in
-     yes | y) ERROR_ON_WARNING="yes" ;;
-     no | n)  ERROR_ON_WARNING="no" ;;
-     *) as_fn_error $? "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
-   esac
-fi
-
-
-# Enable -Werror by default when using gcc.  Turn it off for releases.
-if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then
-    ERROR_ON_WARNING=yes
-fi
-
-WERROR_CFLAGS=""
-if test "${ERROR_ON_WARNING}" = yes ; then
-    WERROR_CFLAGS="-Werror"
-fi
-
-# The options we'll try to enable.
-build_warnings="-Wall -Wpointer-arith \
--Wno-unused -Wunused-value -Wunused-variable -Wunused-function \
--Wno-switch -Wno-char-subscripts \
--Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable \
--Wno-sign-compare -Wno-error=maybe-uninitialized \
--Wno-mismatched-tags \
--Wno-error=deprecated-register \
--Wsuggest-override \
--Wimplicit-fallthrough=3 \
--Wduplicated-cond \
--Wshadow=local \
--Wdeprecated-copy \
--Wdeprecated-copy-dtor \
--Wredundant-move"
-
-case "${host}" in
-  *-*-mingw32*)
-    # Enable -Wno-format by default when using gcc on mingw since many
-    # GCC versions complain about %I64.
-    build_warnings="$build_warnings -Wno-format" ;;
-  *-*-solaris*)
-    # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC
-    # doesn't understand.
-    build_warnings="$build_warnings -Wno-unknown-pragmas"
-    # Solaris 11 <unistd.h> marks vfork deprecated.
-    build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
-  *)
-    # Note that gcc requires -Wformat for -Wformat-nonliteral to work,
-    # but there's a special case for this below.
-    build_warnings="$build_warnings -Wformat-nonliteral" ;;
-esac
-
-# Check whether --enable-build-warnings was given.
-if test "${enable_build_warnings+set}" = set; then :
-  enableval=$enable_build_warnings; case "${enableval}" in
-  yes)	;;
-  no)	build_warnings="-w";;
-  ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
-        build_warnings="${build_warnings} ${t}";;
-  *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
-        build_warnings="${t} ${build_warnings}";;
-  *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
-esac
-if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
-  echo "Setting compiler warning flags = $build_warnings" 6>&1
-fi
-fi
-# Check whether --enable-gdb-build-warnings was given.
-if test "${enable_gdb_build_warnings+set}" = set; then :
-  enableval=$enable_gdb_build_warnings; case "${enableval}" in
-  yes)	;;
-  no)	build_warnings="-w";;
-  ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
-        build_warnings="${build_warnings} ${t}";;
-  *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
-        build_warnings="${t} ${build_warnings}";;
-  *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
-esac
-if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
-  echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1
-fi
-fi
-
-# The set of warnings supported by a C++ compiler is not the same as
-# of the C compiler.
-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
-
-
-WARN_CFLAGS=""
-if test "x${build_warnings}" != x -a "x$GCC" = xyes
-then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
-$as_echo_n "checking compiler warning flags... " >&6; }
-    # Separate out the -Werror flag as some files just cannot be
-    # compiled with it enabled.
-    for w in ${build_warnings}; do
-	# GCC does not complain about -Wno-unknown-warning.  Invert
-	# and test -Wunknown-warning instead.
-	case $w in
-	-Wno-*)
-		wtest=`echo $w | sed 's/-Wno-/-W/g'` ;;
-        -Wformat-nonliteral)
-		# gcc requires -Wformat before -Wformat-nonliteral
-		# will work, so stick them together.
-		w="-Wformat $w"
-		wtest="$w"
-		;;
-	*)
-		wtest=$w ;;
-	esac
-
-	case $w in
-	-Werr*) WERROR_CFLAGS=-Werror ;;
-	*)
-	    # Check whether GCC accepts it.
-	    saved_CFLAGS="$CFLAGS"
-	    CFLAGS="$CFLAGS -Werror $wtest"
-	    saved_CXXFLAGS="$CXXFLAGS"
-	    CXXFLAGS="$CXXFLAGS -Werror $wtest"
-	    if test "x$w" = "x-Wunused-variable"; then
-	      # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958,
-	      # fixed in GCC 4.9.  This test is derived from the gdb
-	      # source code that triggered this bug in GCC.
-	      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() {}
-		 };
-int
-main ()
-{
-const scoped_restore_base &b = scoped_restore_tmpl();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  WARN_CFLAGS="${WARN_CFLAGS} $w"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	    else
-	      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  WARN_CFLAGS="${WARN_CFLAGS} $w"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	    fi
-	    CFLAGS="$saved_CFLAGS"
-	    CXXFLAGS="$saved_CXXFLAGS"
-	esac
-    done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&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
-
-
-
-old_LIBS="$LIBS"
-LIBS="$LIBS -ldl"
-for ac_func in dladdr
-do :
-  ac_fn_c_check_func "$LINENO" "dladdr" "ac_cv_func_dladdr"
-if test "x$ac_cv_func_dladdr" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLADDR 1
-_ACEOF
-
-fi
-done
-
-LIBS="$old_LIBS"
-
-
-  # 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 :
-
-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" "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_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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-fi
-
-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"
-if test "x$ac_cv_have_decl_strtol" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-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
-else
-  ac_have_decl=0
-fi
-
-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"
-if test "x$ac_cv_have_decl_strverscmp" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRVERSCMP $ac_have_decl
-_ACEOF
-
-
-
-ac_fn_c_check_decl "$LINENO" "perror" "ac_cv_have_decl_perror" "$ac_includes_default"
-if test "x$ac_cv_have_decl_perror" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PERROR $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
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VASPRINTF $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
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VSNPRINTF $ac_have_decl
-_ACEOF
-
-
-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
-
-
-# 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
-
-
-
-ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h>
-#include <sys/socket.h>
-
-"
-if test "x$ac_cv_type_socklen_t" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SOCKLEN_T 1
-_ACEOF
-
-
-fi
-
-
-case "${target}" in
-  *-android*)
-    # Starting with NDK version 9, <elf.h> actually includes definitions
-    # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes
-    # <sys/exec_elf.h> which defines some of the ELF types incorrectly,
-    # leading to conflicts with the defintions from <linux/elf.h>.
-    # This makes it impossible for us to include both <elf.h> and
-    # <linux/elf.h>, which means that, in practice, we do not have
-    # access to Elf32_auxv_t and Elf64_auxv_t on this platform.
-    # Therefore, do not try to auto-detect availability, as it would
-    # get it wrong on this platform.
-    ;;
-  *)
-    ac_fn_c_check_type "$LINENO" "Elf32_auxv_t" "ac_cv_type_Elf32_auxv_t" "#include <elf.h>
-
-"
-if test "x$ac_cv_type_Elf32_auxv_t" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ELF32_AUXV_T 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_type "$LINENO" "Elf64_auxv_t" "ac_cv_type_Elf64_auxv_t" "#include <elf.h>
-
-"
-if test "x$ac_cv_type_Elf64_auxv_t" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ELF64_AUXV_T 1
-_ACEOF
-
-
-fi
-
-esac
-
-
-
-# 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/"
-
-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
-
-
-# Check for various supplementary target information (beyond the
-# triplet) which might affect the choices in configure.srv.
-case "${target}" in
-  i[34567]86-*-linux*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x86-64" >&5
-$as_echo_n "checking if building for x86-64... " >&6; }
-if ${gdb_cv_i386_is_x86_64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  save_CPPFLAGS="$CPPFLAGS"
-                    CPPFLAGS="$CPPFLAGS $CFLAGS"
-                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if __x86_64__
-got it
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "got it" >/dev/null 2>&1; then :
-  gdb_cv_i386_is_x86_64=yes
-else
-  gdb_cv_i386_is_x86_64=no
-fi
-rm -f conftest*
-
-                    CPPFLAGS="$save_CPPFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_i386_is_x86_64" >&5
-$as_echo "$gdb_cv_i386_is_x86_64" >&6; }
-    ;;
-
-  x86_64-*-linux*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x32" >&5
-$as_echo_n "checking if building for x32... " >&6; }
-if ${gdb_cv_x86_is_x32+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  save_CPPFLAGS="$CPPFLAGS"
-		    CPPFLAGS="$CPPFLAGS $CFLAGS"
-		    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if __x86_64__ && __ILP32__
-got it
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "got it" >/dev/null 2>&1; then :
-  gdb_cv_x86_is_x32=yes
-else
-  gdb_cv_x86_is_x32=no
-fi
-rm -f conftest*
-
-		    CPPFLAGS="$save_CPPFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_x86_is_x32" >&5
-$as_echo "$gdb_cv_x86_is_x32" >&6; }
-    ;;
-
-  m68k-*-*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for Coldfire" >&5
-$as_echo_n "checking if building for Coldfire... " >&6; }
-if ${gdb_cv_m68k_is_coldfire+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  save_CPPFLAGS="$CPPFLAGS"
-                    CPPFLAGS="$CPPFLAGS $CFLAGS"
-                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#ifdef __mcoldfire__
-got it
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "got it" >/dev/null 2>&1; then :
-  gdb_cv_m68k_is_coldfire=yes
-else
-  gdb_cv_m68k_is_coldfire=no
-fi
-rm -f conftest*
-
-                    CPPFLAGS="$save_CPPFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_m68k_is_coldfire" >&5
-$as_echo "$gdb_cv_m68k_is_coldfire" >&6; }
-    ;;
-esac
-
-. ${srcdir}/configure.srv
-
-if test "${srv_mingwce}" = "yes"; then
-  LIBS="$LIBS -lws2"
-elif test "${srv_mingw}" = "yes"; then
-  LIBS="$LIBS -lws2_32"
-elif test "${srv_qnx}" = "yes"; then
-  LIBS="$LIBS -lsocket"
-elif test "${srv_lynxos}" = "yes"; then
-  LIBS="$LIBS -lnetinet"
-fi
-
-if test "${srv_mingw}" = "yes"; then
-
-$as_echo "#define USE_WIN32API 1" >>confdefs.h
-
-fi
-
-if test "${srv_linux_usrregs}" = "yes"; then
-
-$as_echo "#define HAVE_LINUX_USRREGS 1" >>confdefs.h
-
-fi
-
-if test "${srv_linux_regsets}" = "yes"; then
-
-$as_echo "#define HAVE_LINUX_REGSETS 1" >>confdefs.h
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5
-$as_echo_n "checking for PTRACE_GETREGS... " >&6; }
-  if ${gdbsrv_cv_have_ptrace_getregs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/ptrace.h>
-int
-main ()
-{
-PTRACE_GETREGS;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdbsrv_cv_have_ptrace_getregs=yes
-else
-  gdbsrv_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: $gdbsrv_cv_have_ptrace_getregs" >&5
-$as_echo "$gdbsrv_cv_have_ptrace_getregs" >&6; }
-  if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
-
-$as_echo "#define HAVE_PTRACE_GETREGS 1" >>confdefs.h
-
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETFPXREGS" >&5
-$as_echo_n "checking for PTRACE_GETFPXREGS... " >&6; }
-  if ${gdbsrv_cv_have_ptrace_getfpxregs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/ptrace.h>
-int
-main ()
-{
-PTRACE_GETFPXREGS;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdbsrv_cv_have_ptrace_getfpxregs=yes
-else
-  gdbsrv_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: $gdbsrv_cv_have_ptrace_getfpxregs" >&5
-$as_echo "$gdbsrv_cv_have_ptrace_getfpxregs" >&6; }
-  if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
-
-$as_echo "#define HAVE_PTRACE_GETFPXREGS 1" >>confdefs.h
-
-  fi
-fi
-
-if test "${srv_linux_btrace}" = "yes"; then
-
-$as_echo "#define HAVE_LINUX_BTRACE 1" >>confdefs.h
-
-fi
-
-if test "$ac_cv_header_sys_procfs_h" = yes; then
-  { $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 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 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
-
-if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in thread_db.h" >&5
-$as_echo_n "checking for lwpid_t in thread_db.h... " >&6; }
- if ${gdbserver_cv_have_thread_db_type_lwpid_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <thread_db.h>
-int
-main ()
-{
-lwpid_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdbserver_cv_have_thread_db_type_lwpid_t=yes
-else
-  gdbserver_cv_have_thread_db_type_lwpid_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $gdbserver_cv_have_thread_db_type_lwpid_t = yes; then
-
-$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_lwpid_t" >&5
-$as_echo "$gdbserver_cv_have_thread_db_type_lwpid_t" >&6; }
-
-fi
-
-if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in thread_db.h" >&5
-$as_echo_n "checking for psaddr_t in thread_db.h... " >&6; }
- if ${gdbserver_cv_have_thread_db_type_psaddr_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <thread_db.h>
-int
-main ()
-{
-psaddr_t avar
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdbserver_cv_have_thread_db_type_psaddr_t=yes
-else
-  gdbserver_cv_have_thread_db_type_psaddr_t=no
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- if test $gdbserver_cv_have_thread_db_type_psaddr_t = yes; then
-
-$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_psaddr_t" >&5
-$as_echo "$gdbserver_cv_have_thread_db_type_psaddr_t" >&6; }
-
-fi
-
-old_LIBS="$LIBS"
-{ $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 :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDL 1
-_ACEOF
-
-  LIBS="-ldl $LIBS"
-
-fi
-
-LIBS="$old_LIBS"
-
-srv_thread_depfiles=
-srv_libs=
-
-if test "$srv_linux_thread_db" = "yes"; then
-  if test "$ac_cv_lib_dl_dlopen" = "yes"; then
-    srv_libs="-ldl"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the dynamic export flag" >&5
-$as_echo_n "checking for the dynamic export flag... " >&6; }
-    old_LDFLAGS="$LDFLAGS"
-    # Older GNU ld supports --export-dynamic but --dynamic-list may not be
-    # supported there.
-    RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
-    LDFLAGS="$LDFLAGS $RDYNAMIC"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  found="-Wl,--dynamic-list"
-		 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'
-else
-  RDYNAMIC="-rdynamic"
-		 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
-		 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  found="-rdynamic"
-else
-  found="no"
-			      RDYNAMIC=""
-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
-
-    LDFLAGS="$old_LDFLAGS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5
-$as_echo "$found" >&6; }
-  else
-    srv_libs="-lthread_db"
-  fi
-
-  srv_thread_depfiles="thread-db.o proc-service.o"
-
-$as_echo "#define USE_THREAD_DB 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TD_VERSION" >&5
-$as_echo_n "checking for TD_VERSION... " >&6; }
-if ${gdbsrv_cv_have_td_version+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <thread_db.h>
-int
-main ()
-{
-TD_VERSION;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdbsrv_cv_have_td_version=yes
-else
-  gdbsrv_cv_have_td_version=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_td_version" >&5
-$as_echo "$gdbsrv_cv_have_td_version" >&6; }
-  if test "$gdbsrv_cv_have_td_version" = yes; then
-
-$as_echo "#define HAVE_TD_VERSION 1" >>confdefs.h
-
-  fi
-fi
-
-
-# Check whether --with-libthread-db was given.
-if test "${with_libthread_db+set}" = set; then :
-  withval=$with_libthread_db; srv_libthread_db_path="${withval}"
-  srv_libs="$srv_libthread_db_path"
-
-fi
-
-
-if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
-
-$as_echo "#define USE_LIBTHREAD_DB_DIRECTLY 1" >>confdefs.h
-
-fi
-
-if test "$srv_xmlfiles" != ""; then
-  srv_xmlbuiltin="xml-builtin.o"
-
-$as_echo "#define USE_XML 1" >>confdefs.h
-
-
-  tmp_xmlfiles=$srv_xmlfiles
-  srv_xmlfiles=""
-  for f in $tmp_xmlfiles; do
-    srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
-  done
-fi
-
-GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_selftest_objs"
-GDBSERVER_LIBS="$srv_libs"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports __sync_*_compare_and_swap" >&5
-$as_echo_n "checking whether the target supports __sync_*_compare_and_swap... " >&6; }
-if ${gdbsrv_cv_have_sync_builtins+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  gdbsrv_cv_have_sync_builtins=yes
-else
-  gdbsrv_cv_have_sync_builtins=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: $gdbsrv_cv_have_sync_builtins" >&5
-$as_echo "$gdbsrv_cv_have_sync_builtins" >&6; }
-if test "$gdbsrv_cv_have_sync_builtins" = yes; then
-
-$as_echo "#define HAVE_SYNC_BUILTINS 1" >>confdefs.h
-
-fi
-
-saved_cflags="$CFLAGS"
-CFLAGS="$CFLAGS -fvisibility=hidden"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gdbsrv_cv_have_visibility_hidden=yes
-else
-  gdbsrv_cv_have_visibility_hidden=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$saved_cflags"
-
-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 :
-  gdbsrv_cv_have_personality=true
-else
-  gdbsrv_cv_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 :
-  gdbsrv_cv_have_personality=true
-else
-  gdbsrv_cv_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 $gdbsrv_cv_have_personality
-then
-
-$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
-
-fi
-
-
-IPA_DEPFILES=""
-extra_libraries=""
-
-# check whether to enable the inprocess agent
-if test "$ipa_obj" != "" \
-   -a "$gdbsrv_cv_have_sync_builtins" = yes \
-   -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
-   have_ipa=true
-else
-   have_ipa=false
-fi
-
-# Check whether --enable-inprocess-agent was given.
-if test "${enable_inprocess_agent+set}" = set; then :
-  enableval=$enable_inprocess_agent; case "$enableval" in
-  yes) want_ipa=true ;;
-  no) want_ipa=false ;;
-  *) as_fn_error $? "bad value $enableval for inprocess-agent" "$LINENO" 5 ;;
-esac
-else
-  want_ipa=$have_ipa
-fi
-
-
-if $want_ipa ; then
-   if $have_ipa ; then
-     IPA_DEPFILES="$ipa_obj"
-     extra_libraries="$extra_libraries libinproctrace.so"
-   else
-     as_fn_error $? "inprocess agent not supported for this target" "$LINENO" 5
-   fi
-fi
-
-
-
-
-
-
-
-
-GNULIB=build-gnulib-gdbserver/import
-
-GNULIB_STDINT_H=
-if test x"$STDINT_H" != x; then
-  GNULIB_STDINT_H=$GNULIB/$STDINT_H
-fi
-
-
-ac_config_files="$ac_config_files Makefile"
-
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-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
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_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_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# 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
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to the package provider."
-
-_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
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR
-ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
-    "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
-    "gdbdepdir") CONFIG_COMMANDS="$CONFIG_COMMANDS gdbdepdir" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-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
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
- ;;
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "config.h":H) echo > stamp-h ;;
-    "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
-    "gdbdepdir":C)
-  for subdir in ${CONFIG_SRC_SUBDIR}
-  do
-      $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR
-  done ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/configure.ac ./gdb/gdbserver/configure.ac
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/configure.ac	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/configure.ac	1970-01-01 00:00:00.000000000 +0000
@@ -1,485 +0,0 @@
-dnl Autoconf configure script for GDB server.
-dnl Copyright (C) 2000-2020 Free Software Foundation, Inc.
-dnl
-dnl This file is part of GDB.
-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 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.  If not, see <http://www.gnu.org/licenses/>.
-
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT(server.c)
-AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h])
-
-AM_MAINTAINER_MODE
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_GNU_SOURCE
-AC_SYS_LARGEFILE
-
-AC_CANONICAL_SYSTEM
-
-AC_PROG_INSTALL
-AC_CHECK_TOOL(AR, ar)
-AC_PROG_RANLIB
-
-AC_ARG_PROGRAM
-
-# 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_STDCXX(11, , mandatory)
-
-AC_HEADER_STDC
-
-# Set the 'development' global.
-. $srcdir/../../bfd/development.sh
-
-GDB_AC_SELFTEST([
-  srv_selftest_objs="gdbsupport/selftest.o"
-])
-
-ACX_NONCANONICAL_TARGET
-ACX_NONCANONICAL_HOST
-
-# Dependency checking.
-ZW_CREATE_DEPDIR
-
-# Create sub-directories for objects and dependencies.
-CONFIG_SRC_SUBDIR="arch gdbsupport"
-AC_SUBST(CONFIG_SRC_SUBDIR)
-
-AC_CONFIG_COMMANDS([gdbdepdir],[
-  for subdir in ${CONFIG_SRC_SUBDIR}
-  do
-      $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR
-  done],
-  [ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"])
-
-ZW_PROG_COMPILER_DEPENDENCIES([CC])
-
-gnulib_extra_configure_args=
-# If large-file support is disabled, make sure gnulib does the same.
-if test "$enable_largefile" = no; then
-gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
-fi
-
-# Configure gnulib.  We can't use AC_CONFIG_SUBDIRS as that'd expect
-# to find the the source subdir to be configured directly under
-# gdbserver/.  We need to build gnulib under some other directory not
-# "gnulib", to avoid the problem of both GDB and GDBserver wanting to
-# build it in the same directory, when building in the source dir.
-ACX_CONFIGURE_DIR(["../../gnulib"], ["build-gnulib-gdbserver"],
-                  ["$gnulib_extra_configure_args"])
-
-ACX_CONFIGURE_DIR(["../../libiberty"], ["build-libiberty-gdbserver"])
-
-AC_CHECK_HEADERS(termios.h sys/reg.h string.h dnl
-		 proc_service.h sys/procfs.h linux/elf.h dnl
-		 fcntl.h signal.h sys/file.h dnl
-		 sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
-		 netinet/tcp.h arpa/inet.h)
-AC_FUNC_FORK
-AC_CHECK_FUNCS(getauxval pread pwrite pread64 setns)
-
-GDB_AC_COMMON
-
-# Check the return and argument types of ptrace.
-GDB_AC_PTRACE
-
-# Check for UST
-ustlibs=""
-ustinc=""
-
-AC_ARG_WITH(ust, [  --with-ust=PATH       Specify prefix directory for the installed UST package
-                          Equivalent to --with-ust-include=PATH/include
-                          plus --with-ust-lib=PATH/lib])
-AC_ARG_WITH(ust_include, [  --with-ust-include=PATH Specify directory for installed UST include files])
-AC_ARG_WITH(ust_lib, [  --with-ust-lib=PATH   Specify the directory for the installed UST library])
-
-case $with_ust in
-  no)
-    ustlibs=
-    ustinc=
-    ;;
-  "" | yes)
-    ustlibs=" -lust "
-    ustinc=""
-    ;;
-  *)
-    ustlibs="-L$with_ust/lib -lust"
-    ustinc="-I$with_ust/include "
-    ;;
-esac
-if test "x$with_ust_include" != x; then
-  ustinc="-I$with_ust_include "
-fi
-if test "x$with_ust_lib" != x; then
-  ustlibs="-L$with_ust_lib -lust"
-fi
-
-if test "x$with_ust" != "xno"; then
-  saved_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $ustinc"
-  AC_MSG_CHECKING([for ust])
-  AC_TRY_COMPILE([
-#define CONFIG_UST_GDB_INTEGRATION
-#include <ust/ust.h>
-  ],[],
-  [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])],
-  [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ])
-  CFLAGS="$saved_CFLAGS"
-fi
-
-# Flags needed for UST
-AC_SUBST(ustlibs)
-AC_SUBST(ustinc)
-
-AM_GDB_WARNINGS
-
-dnl dladdr is glibc-specific.  It is used by thread-db.c but only for
-dnl debugging messages.  It lives in -ldl which is handled below so we don't
-dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here.  Instead we just temporarily
-dnl augment LIBS.
-old_LIBS="$LIBS"
-LIBS="$LIBS -ldl"
-AC_CHECK_FUNCS(dladdr)
-LIBS="$old_LIBS"
-
-libiberty_INIT
-
-AC_CHECK_DECLS([perror, vasprintf, vsnprintf])
-
-AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
-
-# 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>])
-
-
-AC_CHECK_TYPES(socklen_t, [], [],
-[#include <sys/types.h>
-#include <sys/socket.h>
-])
-
-case "${target}" in
-  *-android*)
-    # Starting with NDK version 9, <elf.h> actually includes definitions
-    # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes
-    # <sys/exec_elf.h> which defines some of the ELF types incorrectly,
-    # leading to conflicts with the defintions from <linux/elf.h>.
-    # This makes it impossible for us to include both <elf.h> and
-    # <linux/elf.h>, which means that, in practice, we do not have
-    # access to Elf32_auxv_t and Elf64_auxv_t on this platform.
-    # Therefore, do not try to auto-detect availability, as it would
-    # get it wrong on this platform.
-    ;;
-  *)
-    AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [],
-    #include <elf.h>
-    )
-esac
-
-ACX_PKGVERSION([GDB])
-ACX_BUGURL([http://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])
-
-# Check for various supplementary target information (beyond the
-# triplet) which might affect the choices in configure.srv.
-case "${target}" in
-changequote(,)dnl
-  i[34567]86-*-linux*)
-changequote([,])dnl
-    AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64],
-      	           [save_CPPFLAGS="$CPPFLAGS"
-                    CPPFLAGS="$CPPFLAGS $CFLAGS"
-                    AC_EGREP_CPP([got it], [
-#if __x86_64__
-got it
-#endif
-                 ], [gdb_cv_i386_is_x86_64=yes],
-                    [gdb_cv_i386_is_x86_64=no])
-                    CPPFLAGS="$save_CPPFLAGS"])
-    ;;
-
-  x86_64-*-linux*)
-    AC_CACHE_CHECK([if building for x32], [gdb_cv_x86_is_x32],
-		   [save_CPPFLAGS="$CPPFLAGS"
-		    CPPFLAGS="$CPPFLAGS $CFLAGS"
-		    AC_EGREP_CPP([got it], [
-#if __x86_64__ && __ILP32__
-got it
-#endif
-		 ], [gdb_cv_x86_is_x32=yes],
-		    [gdb_cv_x86_is_x32=no])
-		    CPPFLAGS="$save_CPPFLAGS"])
-    ;;
-
-  m68k-*-*)
-    AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire],
-      	           [save_CPPFLAGS="$CPPFLAGS"
-                    CPPFLAGS="$CPPFLAGS $CFLAGS"
-                    AC_EGREP_CPP([got it], [
-#ifdef __mcoldfire__
-got it
-#endif
-                 ], [gdb_cv_m68k_is_coldfire=yes],
-                    [gdb_cv_m68k_is_coldfire=no])
-                    CPPFLAGS="$save_CPPFLAGS"])
-    ;;
-esac
-
-. ${srcdir}/configure.srv
-
-if test "${srv_mingwce}" = "yes"; then
-  LIBS="$LIBS -lws2"
-elif test "${srv_mingw}" = "yes"; then
-  LIBS="$LIBS -lws2_32"
-elif test "${srv_qnx}" = "yes"; then
-  LIBS="$LIBS -lsocket"
-elif test "${srv_lynxos}" = "yes"; then
-  LIBS="$LIBS -lnetinet"
-fi
-
-if test "${srv_mingw}" = "yes"; then
-  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.])
-fi
-
-if test "${srv_linux_usrregs}" = "yes"; then
-  AC_DEFINE(HAVE_LINUX_USRREGS, 1,
-	    [Define if the target supports PTRACE_PEEKUSR for register ]
-	    [access.])
-fi
-
-if test "${srv_linux_regsets}" = "yes"; then
-  AC_DEFINE(HAVE_LINUX_REGSETS, 1,
-	    [Define if the target supports register sets.])
-
-  AC_MSG_CHECKING(for PTRACE_GETREGS)
-  AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs,
-  [AC_TRY_COMPILE([#include <sys/ptrace.h>],
-		  [PTRACE_GETREGS;],
-		  [gdbsrv_cv_have_ptrace_getregs=yes],
-		  [gdbsrv_cv_have_ptrace_getregs=no])])
-  AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs)
-  if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
-    AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
-	      [Define if the target supports PTRACE_GETREGS for register ]
-	      [access.])
-  fi
-
-  AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
-  AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs,
-  [AC_TRY_COMPILE([#include <sys/ptrace.h>],
-		  [PTRACE_GETFPXREGS;],
-		  [gdbsrv_cv_have_ptrace_getfpxregs=yes],
-		  [gdbsrv_cv_have_ptrace_getfpxregs=no])])
-  AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs)
-  if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
-    AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
-	      [Define if the target supports PTRACE_GETFPXREGS for extended ]
-	      [register access.])
-  fi
-fi
-
-if test "${srv_linux_btrace}" = "yes"; then
-  AC_DEFINE(HAVE_LINUX_BTRACE, 1,
-	    [Define if the target supports branch tracing.])
-fi
-
-if test "$ac_cv_header_sys_procfs_h" = yes; then
-  BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
-  BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
-fi
-
-dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h.
-if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
-  GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t)
-fi
-
-dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h.
-if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
-  GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t)
-fi
-
-dnl Check for libdl, but do not add it to LIBS as only gdbserver
-dnl needs it (and gdbreplay doesn't).
-old_LIBS="$LIBS"
-AC_CHECK_LIB(dl, dlopen)
-LIBS="$old_LIBS"
-
-srv_thread_depfiles=
-srv_libs=
-
-if test "$srv_linux_thread_db" = "yes"; then
-  if test "$ac_cv_lib_dl_dlopen" = "yes"; then
-    srv_libs="-ldl"
-    AC_MSG_CHECKING(for the dynamic export flag)
-    old_LDFLAGS="$LDFLAGS"
-    # Older GNU ld supports --export-dynamic but --dynamic-list may not be
-    # supported there.
-    RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
-    LDFLAGS="$LDFLAGS $RDYNAMIC"
-    AC_TRY_LINK([], [],
-		[found="-Wl,--dynamic-list"
-		 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'],
-		[RDYNAMIC="-rdynamic"
-		 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
-		 AC_TRY_LINK([], [],
-			     [found="-rdynamic"],
-			     [found="no"
-			      RDYNAMIC=""])])
-    AC_SUBST(RDYNAMIC)
-    LDFLAGS="$old_LDFLAGS"
-    AC_MSG_RESULT($found)
-  else
-    srv_libs="-lthread_db"
-  fi
-
-  srv_thread_depfiles="thread-db.o proc-service.o"
-  AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.])
-  AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version,
-  [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;],
-		  [gdbsrv_cv_have_td_version=yes],
-		  [gdbsrv_cv_have_td_version=no])])
-  if test "$gdbsrv_cv_have_td_version" = yes; then
-    AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.])
-  fi
-fi
-
-AC_ARG_WITH(libthread-db,
-AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]),
-[srv_libthread_db_path="${withval}"
-  srv_libs="$srv_libthread_db_path"
-])
-
-if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
-  AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.])
-fi
-
-if test "$srv_xmlfiles" != ""; then
-  srv_xmlbuiltin="xml-builtin.o"
-  AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
-
-  tmp_xmlfiles=$srv_xmlfiles
-  srv_xmlfiles=""
-  for f in $tmp_xmlfiles; do
-    srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
-  done
-fi
-
-GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_selftest_objs"
-GDBSERVER_LIBS="$srv_libs"
-
-dnl Check whether the target supports __sync_*_compare_and_swap.
-AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
-		gdbsrv_cv_have_sync_builtins, [
-AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
-		gdbsrv_cv_have_sync_builtins=yes,
-		gdbsrv_cv_have_sync_builtins=no)])
-if test "$gdbsrv_cv_have_sync_builtins" = yes; then
-  AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
-    [Define to 1 if the target supports __sync_*_compare_and_swap])
-fi
-
-dnl Check for -fvisibility=hidden support in the compiler.
-saved_cflags="$CFLAGS"
-CFLAGS="$CFLAGS -fvisibility=hidden"
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
-		        [gdbsrv_cv_have_visibility_hidden=yes],
-	        	[gdbsrv_cv_have_visibility_hidden=no])
-CFLAGS="$saved_cflags"
-
-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],
-              [gdbsrv_cv_have_personality=true],
-              [gdbsrv_cv_have_personality=false],
-              [AC_LINK_IFELSE([PERSONALITY_TEST],
-                              [gdbsrv_cv_have_personality=true],
-                              [gdbsrv_cv_have_personality=false])])
-if $gdbsrv_cv_have_personality
-then
-    AC_DEFINE([HAVE_PERSONALITY], 1,
-              [Define if you support the personality syscall.])
-fi
-
-
-IPA_DEPFILES=""
-extra_libraries=""
-
-# check whether to enable the inprocess agent
-if test "$ipa_obj" != "" \
-   -a "$gdbsrv_cv_have_sync_builtins" = yes \
-   -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
-   have_ipa=true
-else
-   have_ipa=false
-fi
-
-AC_ARG_ENABLE(inprocess-agent,
-AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]),
-[case "$enableval" in
-  yes) want_ipa=true ;;
-  no) want_ipa=false ;;
-  *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;;
-esac],
-[want_ipa=$have_ipa])
-
-if $want_ipa ; then
-   if $have_ipa ; then
-     IPA_DEPFILES="$ipa_obj"
-     extra_libraries="$extra_libraries libinproctrace.so"
-   else
-     AC_MSG_ERROR([inprocess agent not supported for this target])
-   fi
-fi
-
-AC_SUBST(GDBSERVER_DEPFILES)
-AC_SUBST(GDBSERVER_LIBS)
-AC_SUBST(srv_xmlbuiltin)
-AC_SUBST(srv_xmlfiles)
-AC_SUBST(IPA_DEPFILES)
-AC_SUBST(extra_libraries)
-
-GNULIB=build-gnulib-gdbserver/import
-
-GNULIB_STDINT_H=
-if test x"$STDINT_H" != x; then
-  GNULIB_STDINT_H=$GNULIB/$STDINT_H
-fi
-AC_SUBST(GNULIB_STDINT_H)
-
-AC_CONFIG_FILES([Makefile])
-
-AC_OUTPUT
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/configure.srv ./gdb/gdbserver/configure.srv
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/configure.srv	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/configure.srv	1970-01-01 00:00:00.000000000 +0000
@@ -1,390 +0,0 @@
-# Mappings from configuration triplets to gdbserver build options.
-# This is invoked from the autoconf-generated configure script, to
-# produce the appropriate Makefile substitutions.
-
-# This file sets the following shell variables:
-#   srv_regobj		The register protocol appropriate for this target.
-#   srv_tgtobj		Any other target-specific modules appropriate
-#			for this target.
-#   srv_hostio_err	The object implementing the hostio_last_error
-#			target method.
-#   srv_xmlfiles	All XML files which should be available for
-#			gdbserver in this configuration.
-#   ipa_obj		Any other target-specific modules appropriate
-#			for this target's in-process agent.
-#
-# In addition, on GNU/Linux the following shell variables will be set:
-#   srv_linux_regsets	Set to "yes" if ptrace(PTRACE_GETREGS) and friends
-#			may be available on this platform;  unset otherwise.
-#			They will only be used if <sys/ptrace.h> defines
-#			PTRACE_GETREGS.
-#   srv_linux_usrregs	Set to "yes" if we can get at registers via
-#			PTRACE_PEEKUSR / PTRACE_POKEUSR.
-
-# Default hostio_last_error implementation
-srv_hostio_err_objs="hostio-errno.o"
-
-ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-isa205-ppr-dscr-vsx32l-ipa.o powerpc-isa207-vsx32l-ipa.o powerpc-isa207-htm-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o powerpc-isa205-ppr-dscr-vsx64l-ipa.o powerpc-isa207-vsx64l-ipa.o powerpc-isa207-htm-vsx64l-ipa.o"
-
-# Linux object files.  This is so we don't have to repeat
-# these files over and over again.
-srv_linux_obj="linux-low.o linux-osdata.o linux-procfs.o linux-ptrace.o linux-waitpid.o linux-personality.o linux-namespaces.o fork-child.o fork-inferior.o"
-
-# Input is taken from the "${target}" variable.
-
-case "${target}" in
-  aarch64*-*-linux*)	srv_tgtobj="linux-aarch64-low.o aarch64-linux-hw-point.o"
-			srv_tgtobj="$srv_tgtobj linux-aarch32-low.o"
-			srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o"
-			srv_tgtobj="${srv_tgtobj} arch/aarch32.o"
-			srv_tgtobj="${srv_tgtobj} arch/arm.o"
-			srv_tgtobj="$srv_tgtobj aarch64-linux.o"
-			srv_tgtobj="$srv_tgtobj arch/aarch64-insn.o"
-			srv_tgtobj="$srv_tgtobj arch/aarch64.o"
-			srv_tgtobj="$srv_tgtobj linux-aarch64-tdesc.o"
-			srv_tgtobj="$srv_tgtobj aarch64-sve-linux-ptrace.o"
-			srv_tgtobj="${srv_tgtobj} $srv_linux_obj"
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			ipa_obj="linux-aarch64-ipa.o"
-			ipa_obj="${ipa_obj} linux-aarch64-tdesc-ipa.o"
-			ipa_obj="${ipa_obj} arch/aarch64-ipa.o"
-			;;
-  arm*-*-linux*)	srv_tgtobj="$srv_linux_obj linux-arm-low.o"
-			srv_tgtobj="$srv_tgtobj linux-arm-tdesc.o"
-			srv_tgtobj="$srv_tgtobj linux-aarch32-low.o"
-			srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o"
-			srv_tgtobj="${srv_tgtobj} arch/aarch32.o"
-			srv_tgtobj="${srv_tgtobj} arch/arm.o"
-			srv_tgtobj="${srv_tgtobj} arch/arm-linux.o"
-			srv_tgtobj="${srv_tgtobj} arch/arm-get-next-pcs.o"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  arm*-*-mingw32ce*)	srv_regobj=reg-arm.o
-			srv_tgtobj="win32-low.o win32-arm-low.o"
-			srv_tgtobj="${srv_tgtobj} wincecompat.o"
-			# hostio_last_error implementation is in win32-low.c
-			srv_hostio_err_objs=""
-			srv_mingw=yes
-			srv_mingwce=yes
-			;;
-  bfin-*-*linux*)	srv_regobj=reg-bfin.o
-			srv_tgtobj="$srv_linux_obj linux-bfin-low.o"
-			srv_linux_usrregs=yes
-			srv_linux_thread_db=yes
-			;;
-  crisv32-*-linux*)	srv_regobj=reg-crisv32.o
-			srv_tgtobj="$srv_linux_obj linux-crisv32-low.o"
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  cris-*-linux*)	srv_regobj=reg-cris.o
-			srv_tgtobj="$srv_linux_obj linux-cris-low.o"
-			srv_linux_usrregs=yes
-			srv_linux_thread_db=yes
-			;;
-  i[34567]86-*-cygwin*)	srv_regobj=""
-			srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o"
-			srv_tgtobj="${srv_tgtobj} arch/i386.o"
-			;;
-  i[34567]86-*-linux*)	srv_tgtobj="${srv_tgtobj} arch/i386.o"
-			srv_tgtobj="${srv_tgtobj} $srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o"
-			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
-			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
-			srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			srv_linux_btrace=yes
-			ipa_obj="linux-i386-ipa.o linux-x86-tdesc-ipa.o"
-			ipa_obj="${ipa_obj} arch/i386-ipa.o"
-			;;
-  i[34567]86-*-lynxos*)	srv_regobj=""
-			srv_tgtobj="lynx-low.o lynx-i386-low.o fork-child.o fork-inferior.o"
-			srv_tgtobj="${srv_tgtobj} arch/i386.o"
-			srv_lynxos=yes
-			;;
-  i[34567]86-*-mingw32ce*)
-			srv_regobj=""
-			srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o"
-			srv_tgtobj="${srv_tgtobj} arch/i386.o"
-			srv_tgtobj="${srv_tgtobj} wincecompat.o"
-			# hostio_last_error implementation is in win32-low.c
-			srv_hostio_err_objs=""
-			srv_mingw=yes
-			srv_mingwce=yes
-			;;
-  i[34567]86-*-mingw*)	srv_regobj=""
-			srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o"
-			srv_tgtobj="${srv_tgtobj} arch/i386.o"
-			srv_mingw=yes
-			;;
-  i[34567]86-*-nto*)	srv_regobj=""
-			srv_tgtobj="nto-low.o nto-x86-low.o arch/i386.o"
-			srv_qnx="yes"
-			;;
-  ia64-*-linux*)	srv_regobj=reg-ia64.o
-			srv_tgtobj="$srv_linux_obj linux-ia64-low.o"
-			srv_linux_usrregs=yes
-			;;
-  m32r*-*-linux*)	srv_regobj=reg-m32r.o
-			srv_tgtobj="$srv_linux_obj linux-m32r-low.o"
-			srv_linux_usrregs=yes
- 			srv_linux_thread_db=yes
-			;;
-  m68*-*-linux*)	if test "$gdb_cv_m68k_is_coldfire" = yes; then
-                          srv_regobj=reg-cf.o
-                        else
-                          srv_regobj=reg-m68k.o
-                        fi
-			srv_tgtobj="$srv_linux_obj linux-m68k-low.o"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  m68*-*-uclinux*)	if test "$gdb_cv_m68k_is_coldfire" = yes; then
-                          srv_regobj=reg-cf.o
-                        else
-                          srv_regobj=reg-m68k.o
-                        fi
-			srv_tgtobj="$srv_linux_obj linux-m68k-low.o"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  mips*-*-linux*)	srv_regobj="mips-linux.o"
-			srv_regobj="${srv_regobj} mips-dsp-linux.o"
-			srv_regobj="${srv_regobj} mips64-linux.o"
-			srv_regobj="${srv_regobj} mips64-dsp-linux.o"
-			srv_tgtobj="$srv_linux_obj linux-mips-low.o"
-			srv_tgtobj="${srv_tgtobj} mips-linux-watch.o"
-			srv_xmlfiles="mips-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips-dsp-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips-cpu.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips-cp0.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips-fpu.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips-dsp.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips64-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips64-dsp-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips64-cpu.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips64-cp0.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips64-fpu.xml"
-			srv_xmlfiles="${srv_xmlfiles} mips64-dsp.xml"
-			srv_linux_regsets=yes
-			srv_linux_usrregs=yes
-			srv_linux_thread_db=yes
-			;;
-  nios2*-*-linux*)	srv_regobj="nios2-linux.o"
-			srv_tgtobj="$srv_linux_obj linux-nios2-low.o"
-			srv_xmlfiles="nios2-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} nios2-cpu.xml"
-			srv_linux_regsets=yes
-			srv_linux_usrregs=yes
-			srv_linux_thread_db=yes
-			;;
-  powerpc*-*-linux*)	srv_regobj="powerpc-32l.o"
-			srv_regobj="${srv_regobj} powerpc-altivec32l.o"
-			srv_regobj="${srv_regobj} powerpc-vsx32l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-32l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-altivec32l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-vsx32l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-ppr-dscr-vsx32l.o"
-			srv_regobj="${srv_regobj} powerpc-isa207-vsx32l.o"
-			srv_regobj="${srv_regobj} powerpc-isa207-htm-vsx32l.o"
-			srv_regobj="${srv_regobj} powerpc-e500l.o"
-			srv_regobj="${srv_regobj} powerpc-64l.o"
-			srv_regobj="${srv_regobj} powerpc-altivec64l.o"
-			srv_regobj="${srv_regobj} powerpc-vsx64l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-64l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-altivec64l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-vsx64l.o"
-			srv_regobj="${srv_regobj} powerpc-isa205-ppr-dscr-vsx64l.o"
-			srv_regobj="${srv_regobj} powerpc-isa207-vsx64l.o"
-			srv_regobj="${srv_regobj} powerpc-isa207-htm-vsx64l.o"
-			srv_tgtobj="$srv_linux_obj linux-ppc-low.o ppc-linux.o"
-			srv_tgtobj="${srv_tgtobj} arch/ppc-linux-common.o"
-			srv_xmlfiles="rs6000/powerpc-32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-vsx32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-vsx32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-htm-vsx32l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-altivec.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-vsx.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu-isa205.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-dscr.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-ppr.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-tar.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-ebb.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux-pmu.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-spr.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-core.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-fpu.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-altivec.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-vsx.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-ppr.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-dscr.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-tar.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-vsx64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-vsx64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-htm-vsx64l.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power64-core.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power64-linux.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power64-htm-core.xml"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			ipa_obj="${ipa_ppc_linux_regobj} linux-ppc-ipa.o"
-			;;
-  powerpc-*-lynxos*)	srv_regobj="powerpc-32.o"
-			srv_tgtobj="lynx-low.o lynx-ppc-low.o"
-			srv_xmlfiles="rs6000/powerpc-32.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml"
-			srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml"
-			srv_lynxos=yes
-			;;
-  s390*-*-linux*)	srv_regobj="s390-linux32.o"
-			srv_regobj="${srv_regobj} s390-linux32v1.o"
-			srv_regobj="${srv_regobj} s390-linux32v2.o"
-			srv_regobj="${srv_regobj} s390-linux64.o"
-			srv_regobj="${srv_regobj} s390-linux64v1.o"
-			srv_regobj="${srv_regobj} s390-linux64v2.o"
-			srv_regobj="${srv_regobj} s390-te-linux64.o"
-			srv_regobj="${srv_regobj} s390-vx-linux64.o"
-			srv_regobj="${srv_regobj} s390-tevx-linux64.o"
-			srv_regobj="${srv_regobj} s390-gs-linux64.o"
-			srv_regobj="${srv_regobj} s390x-linux64.o"
-			srv_regobj="${srv_regobj} s390x-linux64v1.o"
-			srv_regobj="${srv_regobj} s390x-linux64v2.o"
-			srv_regobj="${srv_regobj} s390x-te-linux64.o"
-			srv_regobj="${srv_regobj} s390x-vx-linux64.o"
-			srv_regobj="${srv_regobj} s390x-tevx-linux64.o"
-			srv_regobj="${srv_regobj} s390x-gs-linux64.o"
-			srv_tgtobj="$srv_linux_obj linux-s390-low.o"
-			srv_xmlfiles="s390-linux32.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-linux32v2.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-linux64v1.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-linux64v2.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-te-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-vx-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-tevx-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-gs-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-linux64v1.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-linux64v2.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-te-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-vx-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-tevx-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-gs-linux64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-core32.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-core64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-acr.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-vx.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-gs.xml"
-			srv_xmlfiles="${srv_xmlfiles} s390-gsbc.xml"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			ipa_obj="linux-s390-ipa.o"
-			ipa_obj="${ipa_obj} s390-linux32-ipa.o"
-			ipa_obj="${ipa_obj} s390-linux32v1-ipa.o"
-			ipa_obj="${ipa_obj} s390-linux32v2-ipa.o"
-			ipa_obj="${ipa_obj} s390-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390-linux64v1-ipa.o"
-			ipa_obj="${ipa_obj} s390-linux64v2-ipa.o"
-			ipa_obj="${ipa_obj} s390-vx-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390-te-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390-tevx-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390-gs-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390x-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390x-linux64v1-ipa.o"
-			ipa_obj="${ipa_obj} s390x-linux64v2-ipa.o"
-			ipa_obj="${ipa_obj} s390x-vx-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390x-te-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390x-tevx-linux64-ipa.o"
-			ipa_obj="${ipa_obj} s390x-gs-linux64-ipa.o"
-			;;
-  sh*-*-linux*)		srv_regobj=reg-sh.o
-			srv_tgtobj="$srv_linux_obj linux-sh-low.o"
-			srv_linux_usrregs=yes
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  sparc*-*-linux*)	srv_regobj=reg-sparc64.o
-			srv_tgtobj="$srv_linux_obj linux-sparc-low.o"
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  tic6x-*-uclinux)	if $development; then
-			  srv_regobj="tic6x-c64xp-linux.o"
-			  srv_regobj="${srv_regobj} tic6x-c64x-linux.o"
-			  srv_regobj="${srv_regobj} tic6x-c62x-linux.o"
-                        else
-			  srv_regobj=""
-                        fi
-			srv_tgtobj="$srv_linux_obj linux-tic6x-low.o"
-			srv_tgtobj="${srv_tgtobj} arch/tic6x.o"
-			srv_linux_regsets=yes
-			srv_linux_usrregs=yes
-			srv_linux_thread_db=yes
-			;;
-  x86_64-*-linux*)	srv_tgtobj="$srv_linux_obj linux-x86-low.o x86-low.o"
-			srv_tgtobj="${srv_tgtobj} x86-dregs.o i387-fp.o"
-			srv_tgtobj="${srv_tgtobj} arch/i386.o arch/amd64.o"
-			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
-			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
-			srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o"
-			srv_tgtobj="${srv_tgtobj} amd64-linux-siginfo.o"
-			srv_linux_usrregs=yes # This is for i386 progs.
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			srv_linux_btrace=yes
-			ipa_obj="linux-amd64-ipa.o linux-x86-tdesc-ipa.o"
-			ipa_obj="${ipa_obj} arch/amd64-ipa.o"
-			;;
-  x86_64-*-mingw*)	srv_regobj=""
-			srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o"
-			srv_tgtobj="${srv_tgtobj} arch/amd64.o"
-			srv_mingw=yes
-			;;
-  x86_64-*-cygwin*)	srv_regobj=""
-			srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o"
-			srv_tgtobj="${srv_tgtobj} arch/amd64.o"
-			;;
-
-  xtensa*-*-linux*)	srv_regobj=reg-xtensa.o
-			srv_tgtobj="$srv_linux_obj linux-xtensa-low.o"
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  tilegx-*-linux*)	srv_regobj=reg-tilegx.o
-			srv_regobj="${srv_regobj} reg-tilegx32.o"
-			srv_tgtobj="$srv_linux_obj linux-tile-low.o"
-			srv_linux_regsets=yes
-			srv_linux_thread_db=yes
-			;;
-  *)			echo "Error: target not supported by gdbserver."
-			exit 1
-			;;
-esac
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/debug.c ./gdb/gdbserver/debug.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/debug.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/debug.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,140 +0,0 @@
-/* Debugging routines for the remote server for GDB.
-   Copyright (C) 2014-2020 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 "server.h"
-#include <chrono>
-
-#if !defined (IN_PROCESS_AGENT)
-int remote_debug = 0;
-#endif
-
-/* Output file for debugging.  Default to standard error.  */
-FILE *debug_file = stderr;
-
-/* See debug.h.  */
-int debug_threads;
-
-/* Include timestamps in debugging output.  */
-int debug_timestamp;
-
-#if !defined (IN_PROCESS_AGENT)
-
-/* See debug.h.  */
-
-void
-debug_set_output (const char *new_debug_file)
-{
-  /* Close any existing file and reset to standard error.  */
-  if (debug_file != stderr)
-    {
-      fclose (debug_file);
-    }
-  debug_file = stderr;
-
-  /* Catch empty filenames.  */
-  if (new_debug_file == nullptr || strlen (new_debug_file) == 0)
-    return;
-
-  FILE *fptr = fopen (new_debug_file, "w");
-
-  if (fptr == nullptr)
-    {
-      debug_printf ("Cannot open %s for writing. %s. Switching to stderr.\n",
-		    new_debug_file, safe_strerror (errno));
-      return;
-    }
-
-  debug_file = fptr;
-}
-
-#endif
-
-/* Print a debugging message.
-   If the text begins a new line it is preceded by a timestamp.
-   We don't get fancy with newline checking, we just check whether the
-   previous call ended with "\n".  */
-
-void
-debug_vprintf (const char *format, va_list ap)
-{
-#if !defined (IN_PROCESS_AGENT)
-  /* N.B. Not thread safe, and can't be used, as is, with IPA.  */
-  static int new_line = 1;
-
-  if (debug_timestamp && new_line)
-    {
-      using namespace std::chrono;
-
-      steady_clock::time_point now = steady_clock::now ();
-      seconds s = duration_cast<seconds> (now.time_since_epoch ());
-      microseconds us = duration_cast<microseconds> (now.time_since_epoch ()) - s;
-
-      fprintf (debug_file, "%ld.%06ld ", (long) s.count (), (long) us.count ());
-    }
-#endif
-
-  vfprintf (debug_file, format, ap);
-
-#if !defined (IN_PROCESS_AGENT)
-  if (*format)
-    new_line = format[strlen (format) - 1] == '\n';
-#endif
-}
-
-/* Flush debugging output.
-   This is called, for example, when starting an inferior to ensure all debug
-   output thus far appears before any inferior output.  */
-
-void
-debug_flush (void)
-{
-  fflush (debug_file);
-}
-
-/* Notify the user that the code is entering FUNCTION_NAME.
-   FUNCTION_NAME is the name of the calling function, or NULL if unknown.
-
-   This is intended to be called via the debug_enter macro.  */
-
-void
-do_debug_enter (const char *function_name)
-{
-  if (function_name != NULL)
-    debug_printf (">>>> entering %s\n", function_name);
-}
-
-/* Notify the user that the code is exiting FUNCTION_NAME.
-   FUNCTION_NAME is the name of the calling function, or NULL if unknown.
-
-   This is intended to be called via the debug_exit macro.  */
-
-void
-do_debug_exit (const char *function_name)
-{
-  if (function_name != NULL)
-    debug_printf ("<<<< exiting %s\n", function_name);
-}
-
-/* See debug.h.  */
-
-ssize_t
-debug_write (const void *buf, size_t nbyte)
-{
-  int fd = fileno (debug_file);
-  return write (fd, buf, nbyte);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/debug.h ./gdb/gdbserver/debug.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/debug.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/debug.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,65 +0,0 @@
-/* Debugging routines for the remote server for GDB.
-   Copyright (C) 2014-2020 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 GDBSERVER_DEBUG_H
-#define GDBSERVER_DEBUG_H
-
-#if !defined (IN_PROCESS_AGENT)
-extern int remote_debug;
-
-/* Switch all debug output to DEBUG_FILE.  If DEBUG_FILE is nullptr or an
-   empty string, or if the file cannot be opened, then debug output is sent to
-   stderr.  */
-void debug_set_output (const char *debug_file);
-#endif
-
-extern int using_threads;
-
-/* Enable miscellaneous debugging output.  The name is historical - it
-   was originally used to debug LinuxThreads support.  */
-
-extern int debug_threads;
-
-extern int debug_timestamp;
-
-void debug_flush (void);
-void do_debug_enter (const char *function_name);
-void do_debug_exit (const char *function_name);
-
-/* Async signal safe debug output function that calls write directly.  */
-ssize_t debug_write (const void *buf, size_t nbyte);
-
-/* These macros are for use in major functions that produce a lot of
-   debugging output.  They help identify in the mass of debugging output
-   when these functions enter and exit.  debug_enter is intended to be
-   called at the start of a function, before any other debugging output.
-   debug_exit is intended to be called at the end of the same function,
-   after all debugging output.  */
-#ifdef FUNCTION_NAME
-#define debug_enter() \
-  do { do_debug_enter (FUNCTION_NAME); } while (0)
-#define debug_exit() \
-  do { do_debug_exit (FUNCTION_NAME); } while (0)
-#else
-#define debug_enter() \
-  do { } while (0)
-#define debug_exit() \
-  do { } while (0)
-#endif
-
-#endif /* GDBSERVER_DEBUG_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/dll.c ./gdb/gdbserver/dll.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/dll.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/dll.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,80 +0,0 @@
-/* Copyright (C) 2002-2020 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 "server.h"
-#include "dll.h"
-
-#include <algorithm>
-
-/* An "unspecified" CORE_ADDR, for match_dll.  */
-#define UNSPECIFIED_CORE_ADDR (~(CORE_ADDR) 0)
-
-std::list<dll_info> all_dlls;
-int dlls_changed;
-
-/* Record a newly loaded DLL at BASE_ADDR.  */
-
-void
-loaded_dll (const char *name, CORE_ADDR base_addr)
-{
-  all_dlls.emplace_back (name != NULL ? name : "", base_addr);
-  dlls_changed = 1;
-}
-
-/* Record that the DLL with NAME and BASE_ADDR has been unloaded.  */
-
-void
-unloaded_dll (const char *name, CORE_ADDR base_addr)
-{
-  auto pred = [&] (const dll_info &dll)
-    {
-      if (base_addr != UNSPECIFIED_CORE_ADDR
-	  && base_addr == dll.base_addr)
-	return true;
-
-      if (name != NULL && dll.name == name)
-	return true;
-
-      return false;
-    };
-
-  auto iter = std::find_if (all_dlls.begin (), all_dlls.end (), pred);
-
-  if (iter == all_dlls.end ())
-    /* For some inferiors we might get unloaded_dll events without having
-       a corresponding loaded_dll.  In that case, the dll cannot be found
-       in ALL_DLL, and there is nothing further for us to do.
-
-       This has been observed when running 32bit executables on Windows64
-       (i.e. through WOW64, the interface between the 32bits and 64bits
-       worlds).  In that case, the inferior always does some strange
-       unloading of unnamed dll.  */
-    return;
-  else
-    {
-      /* DLL has been found so remove the entry and free associated
-         resources.  */
-      all_dlls.erase (iter);
-      dlls_changed = 1;
-    }
-}
-
-void
-clear_dlls (void)
-{
-  all_dlls.clear ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/dll.h ./gdb/gdbserver/dll.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/dll.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/dll.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,40 +0,0 @@
-/* Copyright (C) 1993-2020 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 GDBSERVER_DLL_H
-#define GDBSERVER_DLL_H
-
-#include <list>
-
-struct dll_info
-{
-  dll_info (const std::string &name_, CORE_ADDR base_addr_)
-  : name (name_), base_addr (base_addr_)
-  {}
-
-  std::string name;
-  CORE_ADDR base_addr;
-};
-
-extern std::list<dll_info> all_dlls;
-extern int dlls_changed;
-
-extern void clear_dlls (void);
-extern void loaded_dll (const char *name, CORE_ADDR base_addr);
-extern void unloaded_dll (const char *name, CORE_ADDR base_addr);
-
-#endif /* GDBSERVER_DLL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/event-loop.c ./gdb/gdbserver/event-loop.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/event-loop.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/event-loop.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,567 +0,0 @@
-/* Event loop machinery for the remote server for GDB.
-   Copyright (C) 1999-2020 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/>. */
-
-/* Based on src/gdb/event-loop.c.  */
-
-#include "server.h"
-
-#include <sys/types.h>
-#include "gdbsupport/gdb_sys_time.h"
-
-#ifdef USE_WIN32API
-#include <windows.h>
-#include <io.h>
-#endif
-
-#include <unistd.h>
-#include <queue>
-
-typedef int (event_handler_func) (gdb_fildes_t);
-
-/* Tell create_file_handler what events we are interested in.  */
-
-#define GDB_READABLE	(1<<1)
-#define GDB_WRITABLE	(1<<2)
-#define GDB_EXCEPTION	(1<<3)
-
-/* Events are queued by on the event_queue and serviced later
-   on by do_one_event.  An event can be, for instance, a file
-   descriptor becoming ready to be read.  Servicing an event simply
-   means that the procedure PROC will be called.  We have 2 queues,
-   one for file handlers that we listen to in the event loop, and one
-   for the file handlers+events that are ready.  The procedure PROC
-   associated with each event is always the same (handle_file_event).
-   Its duty is to invoke the handler associated with the file
-   descriptor whose state change generated the event, plus doing other
-   cleanups and such.  */
-
-struct gdb_event
-  {
-    /* Procedure to call to service this event.  */
-    event_handler_func *proc;
-
-    /* File descriptor that is ready.  */
-    gdb_fildes_t fd;
-  };
-
-/* Information about each file descriptor we register with the event
-   loop.  */
-
-typedef struct file_handler
-  {
-    /* File descriptor.  */
-    gdb_fildes_t fd;
-
-    /* Events we want to monitor.  */
-    int mask;
-
-    /* Events that have been seen since the last time.  */
-    int ready_mask;
-
-    /* Procedure to call when fd is ready.  */
-    handler_func *proc;
-
-    /* Argument to pass to proc.  */
-    gdb_client_data client_data;
-
-    /* Was an error detected on this fd?  */
-    int error;
-
-    /* Next registered file descriptor.  */
-    struct file_handler *next_file;
-  }
-file_handler;
-
-typedef gdb::unique_xmalloc_ptr<gdb_event> gdb_event_up;
-
-static std::queue<gdb_event_up, std::list<gdb_event_up>> event_queue;
-
-/* Gdb_notifier is just a list of file descriptors gdb is interested
-   in.  These are the input file descriptor, and the target file
-   descriptor.  Each of the elements in the gdb_notifier list is
-   basically a description of what kind of events gdb is interested
-   in, for each fd.  */
-
-static struct
-  {
-    /* Ptr to head of file handler list.  */
-    file_handler *first_file_handler;
-
-    /* Masks to be used in the next call to select.  Bits are set in
-       response to calls to create_file_handler.  */
-    fd_set check_masks[3];
-
-    /* What file descriptors were found ready by select.  */
-    fd_set ready_masks[3];
-
-    /* Number of valid bits (highest fd value + 1). (for select) */
-    int num_fds;
-  }
-gdb_notifier;
-
-/* Callbacks are just routines that are executed before waiting for the
-   next event.  In GDB this is struct gdb_timer.  We don't need timers
-   so rather than copy all that complexity in gdbserver, we provide what
-   we need, but we do so in a way that if/when the day comes that we need
-   that complexity, it'll be easier to add - replace callbacks with timers
-   and use a delta of zero (which is all gdb currently uses timers for anyway).
-
-   PROC will be executed before gdbserver goes to sleep to wait for the
-   next event.  */
-
-struct callback_event
-  {
-    int id;
-    callback_handler_func *proc;
-    gdb_client_data data;
-    struct callback_event *next;
-  };
-
-/* Table of registered callbacks.  */
-
-static struct
-  {
-    struct callback_event *first;
-    struct callback_event *last;
-
-    /* Id of the last callback created.  */
-    int num_callbacks;
-  }
-callback_list;
-
-void
-initialize_event_loop (void)
-{
-}
-
-/* Process one event.  If an event was processed, 1 is returned
-   otherwise 0 is returned.  Scan the queue from head to tail,
-   processing therefore the high priority events first, by invoking
-   the associated event handler procedure.  */
-
-static int
-process_event (void)
-{
-  /* Let's get rid of the event from the event queue.  We need to
-     do this now because while processing the event, since the
-     proc function could end up jumping out to the caller of this
-     function.  In that case, we would have on the event queue an
-     event which has been processed, but not deleted.  */
-  if (!event_queue.empty ())
-    {
-      gdb_event_up event_ptr = std::move (event_queue.front ());
-      event_queue.pop ();
-
-      event_handler_func *proc = event_ptr->proc;
-      gdb_fildes_t fd = event_ptr->fd;
-
-      /* Now call the procedure associated with the event.  */
-      if ((*proc) (fd))
-	return -1;
-      return 1;
-    }
-
-  /* This is the case if there are no event on the event queue.  */
-  return 0;
-}
-
-/* Append PROC to the callback list.
-   The result is the "id" of the callback that can be passed back to
-   delete_callback_event.  */
-
-int
-append_callback_event (callback_handler_func *proc, gdb_client_data data)
-{
-  struct callback_event *event_ptr = XNEW (struct callback_event);
-
-  event_ptr->id = callback_list.num_callbacks++;
-  event_ptr->proc = proc;
-  event_ptr->data = data;
-  event_ptr->next = NULL;
-  if (callback_list.first == NULL)
-    callback_list.first = event_ptr;
-  if (callback_list.last != NULL)
-    callback_list.last->next = event_ptr;
-  callback_list.last = event_ptr;
-  return event_ptr->id;
-}
-
-/* Delete callback ID.
-   It is not an error callback ID doesn't exist.  */
-
-void
-delete_callback_event (int id)
-{
-  struct callback_event **p;
-
-  for (p = &callback_list.first; *p != NULL; p = &(*p)->next)
-    {
-      struct callback_event *event_ptr = *p;
-
-      if (event_ptr->id == id)
-	{
-	  *p = event_ptr->next;
-	  if (event_ptr == callback_list.last)
-	    callback_list.last = NULL;
-	  free (event_ptr);
-	  break;
-	}
-    }
-}
-
-/* Run the next callback.
-   The result is 1 if a callback was called and event processing
-   should continue, -1 if the callback wants the event loop to exit,
-   and 0 if there are no more callbacks.  */
-
-static int
-process_callback (void)
-{
-  struct callback_event *event_ptr;
-
-  event_ptr = callback_list.first;
-  if (event_ptr != NULL)
-    {
-      callback_handler_func *proc = event_ptr->proc;
-      gdb_client_data data = event_ptr->data;
-
-      /* Remove the event before calling PROC,
-	 more events may get added by PROC.  */
-      callback_list.first = event_ptr->next;
-      if (callback_list.first == NULL)
-	callback_list.last = NULL;
-      free  (event_ptr);
-      if ((*proc) (data))
-	return -1;
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Add a file handler/descriptor to the list of descriptors we are
-   interested in.  FD is the file descriptor for the file/stream to be
-   listened to.  MASK is a combination of READABLE, WRITABLE,
-   EXCEPTION.  PROC is the procedure that will be called when an event
-   occurs for FD.  CLIENT_DATA is the argument to pass to PROC.  */
-
-static void
-create_file_handler (gdb_fildes_t fd, int mask, handler_func *proc,
-		     gdb_client_data client_data)
-{
-  file_handler *file_ptr;
-
-  /* Do we already have a file handler for this file? (We may be
-     changing its associated procedure).  */
-  for (file_ptr = gdb_notifier.first_file_handler;
-       file_ptr != NULL;
-       file_ptr = file_ptr->next_file)
-    if (file_ptr->fd == fd)
-      break;
-
-  /* It is a new file descriptor.  Add it to the list.  Otherwise,
-     just change the data associated with it.  */
-  if (file_ptr == NULL)
-    {
-      file_ptr = XNEW (struct file_handler);
-      file_ptr->fd = fd;
-      file_ptr->ready_mask = 0;
-      file_ptr->next_file = gdb_notifier.first_file_handler;
-      gdb_notifier.first_file_handler = file_ptr;
-
-      if (mask & GDB_READABLE)
-	FD_SET (fd, &gdb_notifier.check_masks[0]);
-      else
-	FD_CLR (fd, &gdb_notifier.check_masks[0]);
-
-      if (mask & GDB_WRITABLE)
-	FD_SET (fd, &gdb_notifier.check_masks[1]);
-      else
-	FD_CLR (fd, &gdb_notifier.check_masks[1]);
-
-      if (mask & GDB_EXCEPTION)
-	FD_SET (fd, &gdb_notifier.check_masks[2]);
-      else
-	FD_CLR (fd, &gdb_notifier.check_masks[2]);
-
-      if (gdb_notifier.num_fds <= fd)
-	gdb_notifier.num_fds = fd + 1;
-    }
-
-  file_ptr->proc = proc;
-  file_ptr->client_data = client_data;
-  file_ptr->mask = mask;
-}
-
-/* Wrapper function for create_file_handler.  */
-
-void
-add_file_handler (gdb_fildes_t fd,
-		  handler_func *proc, gdb_client_data client_data)
-{
-  create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data);
-}
-
-/* Remove the file descriptor FD from the list of monitored fd's:
-   i.e. we don't care anymore about events on the FD.  */
-
-void
-delete_file_handler (gdb_fildes_t fd)
-{
-  file_handler *file_ptr, *prev_ptr = NULL;
-  int i;
-
-  /* Find the entry for the given file. */
-
-  for (file_ptr = gdb_notifier.first_file_handler;
-       file_ptr != NULL;
-       file_ptr = file_ptr->next_file)
-    if (file_ptr->fd == fd)
-      break;
-
-  if (file_ptr == NULL)
-    return;
-
-  if (file_ptr->mask & GDB_READABLE)
-    FD_CLR (fd, &gdb_notifier.check_masks[0]);
-  if (file_ptr->mask & GDB_WRITABLE)
-    FD_CLR (fd, &gdb_notifier.check_masks[1]);
-  if (file_ptr->mask & GDB_EXCEPTION)
-    FD_CLR (fd, &gdb_notifier.check_masks[2]);
-
-  /* Find current max fd.  */
-
-  if ((fd + 1) == gdb_notifier.num_fds)
-    {
-      gdb_notifier.num_fds--;
-      for (i = gdb_notifier.num_fds; i; i--)
-	{
-	  if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
-	      || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
-	      || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
-	    break;
-	}
-      gdb_notifier.num_fds = i;
-    }
-
-  /* Deactivate the file descriptor, by clearing its mask, so that it
-     will not fire again.  */
-
-  file_ptr->mask = 0;
-
-  /* Get rid of the file handler in the file handler list.  */
-  if (file_ptr == gdb_notifier.first_file_handler)
-    gdb_notifier.first_file_handler = file_ptr->next_file;
-  else
-    {
-      for (prev_ptr = gdb_notifier.first_file_handler;
-	   prev_ptr->next_file != file_ptr;
-	   prev_ptr = prev_ptr->next_file)
-	;
-      prev_ptr->next_file = file_ptr->next_file;
-    }
-  free (file_ptr);
-}
-
-/* Handle the given event by calling the procedure associated to the
-   corresponding file handler.  Called by process_event indirectly,
-   through event_ptr->proc.  EVENT_FILE_DESC is file descriptor of the
-   event in the front of the event queue.  */
-
-static int
-handle_file_event (gdb_fildes_t event_file_desc)
-{
-  file_handler *file_ptr;
-  int mask;
-
-  /* Search the file handler list to find one that matches the fd in
-     the event.  */
-  for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
-       file_ptr = file_ptr->next_file)
-    {
-      if (file_ptr->fd == event_file_desc)
-	{
-	  /* See if the desired events (mask) match the received
-	     events (ready_mask).  */
-
-	  if (file_ptr->ready_mask & GDB_EXCEPTION)
-	    {
-	      warning ("Exception condition detected on fd %s",
-		       pfildes (file_ptr->fd));
-	      file_ptr->error = 1;
-	    }
-	  else
-	    file_ptr->error = 0;
-	  mask = file_ptr->ready_mask & file_ptr->mask;
-
-	  /* Clear the received events for next time around.  */
-	  file_ptr->ready_mask = 0;
-
-	  /* If there was a match, then call the handler.  */
-	  if (mask != 0)
-	    {
-	      if ((*file_ptr->proc) (file_ptr->error,
-				     file_ptr->client_data) < 0)
-		return -1;
-	    }
-	  break;
-	}
-    }
-
-  return 0;
-}
-
-/* Create a file event, to be enqueued in the event queue for
-   processing.  The procedure associated to this event is always
-   handle_file_event, which will in turn invoke the one that was
-   associated to FD when it was registered with the event loop.  */
-
-static gdb_event *
-create_file_event (gdb_fildes_t fd)
-{
-  gdb_event *file_event_ptr;
-
-  file_event_ptr = XNEW (gdb_event);
-  file_event_ptr->proc = handle_file_event;
-  file_event_ptr->fd = fd;
-
-  return file_event_ptr;
-}
-
-/* Called by do_one_event to wait for new events on the monitored file
-   descriptors.  Queue file events as they are detected by the poll.
-   If there are no events, this function will block in the call to
-   select.  Return -1 if there are no files descriptors to monitor,
-   otherwise return 0.  */
-
-static int
-wait_for_event (void)
-{
-  file_handler *file_ptr;
-  int num_found = 0;
-
-  /* Make sure all output is done before getting another event.  */
-  fflush (stdout);
-  fflush (stderr);
-
-  if (gdb_notifier.num_fds == 0)
-    return -1;
-
-  gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
-  gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
-  gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
-  num_found = select (gdb_notifier.num_fds,
-		      &gdb_notifier.ready_masks[0],
-		      &gdb_notifier.ready_masks[1],
-		      &gdb_notifier.ready_masks[2],
-		      NULL);
-
-  /* Clear the masks after an error from select.  */
-  if (num_found == -1)
-    {
-      FD_ZERO (&gdb_notifier.ready_masks[0]);
-      FD_ZERO (&gdb_notifier.ready_masks[1]);
-      FD_ZERO (&gdb_notifier.ready_masks[2]);
-#ifdef EINTR
-      /* Dont print anything if we got a signal, let gdb handle
-	 it.  */
-      if (errno != EINTR)
-	perror_with_name ("select");
-#endif
-    }
-
-  /* Enqueue all detected file events.  */
-
-  for (file_ptr = gdb_notifier.first_file_handler;
-       file_ptr != NULL && num_found > 0;
-       file_ptr = file_ptr->next_file)
-    {
-      int mask = 0;
-
-      if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
-	mask |= GDB_READABLE;
-      if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
-	mask |= GDB_WRITABLE;
-      if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
-	mask |= GDB_EXCEPTION;
-
-      if (!mask)
-	continue;
-      else
-	num_found--;
-
-      /* Enqueue an event only if this is still a new event for this
-	 fd.  */
-
-      if (file_ptr->ready_mask == 0)
-	{
-	  gdb_event *file_event_ptr = create_file_event (file_ptr->fd);
-
-	  event_queue.emplace (file_event_ptr);
-	}
-      file_ptr->ready_mask = mask;
-    }
-
-  return 0;
-}
-
-/* Start up the event loop.  This is the entry point to the event
-   loop.  */
-
-void
-start_event_loop (void)
-{
-  /* Loop until there is nothing to do.  This is the entry point to
-     the event loop engine.  If nothing is ready at this time, wait
-     for something to happen (via wait_for_event), then process it.
-     Return when there are no longer event sources to wait for.  */
-
-  while (1)
-    {
-      /* Any events already waiting in the queue?  */
-      int res = process_event ();
-
-      /* Did the event handler want the event loop to stop?  */
-      if (res == -1)
-	return;
-
-      if (res)
-	continue;
-
-      /* Process any queued callbacks before we go to sleep.  */
-      res = process_callback ();
-
-      /* Did the callback want the event loop to stop?  */
-      if (res == -1)
-	return;
-
-      if (res)
-	continue;
-
-      /* Wait for a new event.  If wait_for_event returns -1, we
-	 should get out because this means that there are no event
-	 sources left.  This will make the event loop stop, and the
-	 application exit.  */
-
-      if (wait_for_event () < 0)
-	return;
-    }
-
-  /* We are done with the event loop.  There are no more event sources
-     to listen to.  So we exit gdbserver.  */
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/event-loop.h ./gdb/gdbserver/event-loop.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/event-loop.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/event-loop.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-/* Event loop machinery for the remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_EVENT_LOOP_H
-#define GDBSERVER_EVENT_LOOP_H
-
-typedef void *gdb_client_data;
-typedef int (handler_func) (int, gdb_client_data);
-typedef int (callback_handler_func) (gdb_client_data);
-
-extern void delete_file_handler (gdb_fildes_t fd);
-extern void add_file_handler (gdb_fildes_t fd, handler_func *proc,
-			      gdb_client_data client_data);
-extern int append_callback_event (callback_handler_func *proc,
-				   gdb_client_data client_data);
-extern void delete_callback_event (int id);
-
-extern void start_event_loop (void);
-extern void initialize_event_loop (void);
-
-#endif /* GDBSERVER_EVENT_LOOP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/fork-child.c ./gdb/gdbserver/fork-child.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/fork-child.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/fork-child.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,118 +0,0 @@
-/* Fork a Unix child process, and set up to debug it, for GDBserver.
-   Copyright (C) 1989-2020 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 "server.h"
-#include "gdbsupport/job-control.h"
-#include "nat/fork-inferior.h"
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef SIGTTOU
-/* A file descriptor for the controlling terminal.  */
-static int terminal_fd;
-
-/* TERMINAL_FD's original foreground group.  */
-static pid_t old_foreground_pgrp;
-
-/* Hand back terminal ownership to the original foreground group.  */
-
-static void
-restore_old_foreground_pgrp (void)
-{
-  tcsetpgrp (terminal_fd, old_foreground_pgrp);
-}
-#endif
-
-/* See nat/fork-inferior.h.  */
-
-void
-prefork_hook (const char *args)
-{
-  client_state &cs = get_client_state ();
-  if (debug_threads)
-    {
-      debug_printf ("args: %s\n", args);
-      debug_flush ();
-    }
-
-#ifdef SIGTTOU
-  signal (SIGTTOU, SIG_DFL);
-  signal (SIGTTIN, SIG_DFL);
-#endif
-
-  /* Clear this so the backend doesn't get confused, thinking
-     CONT_THREAD died, and it needs to resume all threads.  */
-  cs.cont_thread = null_ptid;
-}
-
-/* See nat/fork-inferior.h.  */
-
-void
-postfork_hook (pid_t pid)
-{
-}
-
-/* See nat/fork-inferior.h.  */
-
-void
-postfork_child_hook ()
-{
-  /* This is set to the result of setpgrp, which if vforked, will be
-     visible to you in the parent process.  It's only used by humans
-     for debugging.  */
-  static int debug_setpgrp = 657473;
-
-  debug_setpgrp = gdb_setpgid ();
-  if (debug_setpgrp == -1)
-    perror (_("setpgrp failed in child"));
-}
-
-/* See nat/fork-inferior.h.  */
-
-void
-gdb_flush_out_err ()
-{
-  fflush (stdout);
-  fflush (stderr);
-}
-
-/* See server.h.  */
-
-void
-post_fork_inferior (int pid, const char *program)
-{
-  client_state &cs = get_client_state ();
-#ifdef SIGTTOU
-  signal (SIGTTOU, SIG_IGN);
-  signal (SIGTTIN, SIG_IGN);
-  terminal_fd = fileno (stderr);
-  old_foreground_pgrp = tcgetpgrp (terminal_fd);
-  tcsetpgrp (terminal_fd, pid);
-  atexit (restore_old_foreground_pgrp);
-#endif
-
-  startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED,
-		    &cs.last_status, &cs.last_ptid);
-  current_thread->last_resume_kind = resume_stop;
-  current_thread->last_status = cs.last_status;
-  signal_pid = pid;
-  target_post_create_inferior ();
-  fprintf (stderr, "Process %s created; pid = %d\n", program, pid);
-  fflush (stderr);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/gdb_proc_service.h ./gdb/gdbserver/gdb_proc_service.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/gdb_proc_service.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/gdb_proc_service.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-/* <proc_service.h> replacement for systems that don't have it.
-   Copyright (C) 2000-2020 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 GDBSERVER_GDB_PROC_SERVICE_H
-#define GDBSERVER_GDB_PROC_SERVICE_H
-
-#include "gdbsupport/gdb_proc_service.h"
-
-/* Structure that identifies the target process.  */
-struct ps_prochandle
-{
-  /* We don't need to track anything.  All context is served from the
-     current inferior.  */
-};
-
-#endif /* GDBSERVER_GDB_PROC_SERVICE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/gdbreplay.c ./gdb/gdbserver/gdbreplay.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/gdbreplay.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/gdbreplay.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,524 +0,0 @@
-/* Replay a remote debug session logfile for GDB.
-   Copyright (C) 1996-2020 Free Software Foundation, Inc.
-   Written by Fred Fish (fnf@cygnus.com) from pieces of gdbserver.
-
-   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 "gdbsupport/version.h"
-
-#if HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#include <ctype.h>
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#include <unistd.h>
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#if HAVE_NETINET_TCP_H
-#include <netinet/tcp.h>
-#endif
-
-#if USE_WIN32API
-#include <ws2tcpip.h>
-#endif
-
-#include "gdbsupport/netstuff.h"
-#include "gdbsupport/rsp-low.h"
-
-#ifndef HAVE_SOCKLEN_T
-typedef int socklen_t;
-#endif
-
-/* Sort of a hack... */
-#define EOL (EOF - 1)
-
-static int remote_desc;
-
-#ifdef __MINGW32CE__
-
-#ifndef COUNTOF
-#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0]))
-#endif
-
-#define errno (GetLastError ())
-
-char *
-strerror (DWORD error)
-{
-  static char buf[1024];
-  WCHAR *msgbuf;
-  DWORD lasterr = GetLastError ();
-  DWORD chars = FormatMessageW (FORMAT_MESSAGE_FROM_SYSTEM
-				| FORMAT_MESSAGE_ALLOCATE_BUFFER,
-				NULL,
-				error,
-				0, /* Default language */
-				(LPVOID)&msgbuf,
-				0,
-				NULL);
-  if (chars != 0)
-    {
-      /* If there is an \r\n appended, zap it.  */
-      if (chars >= 2
-	  && msgbuf[chars - 2] == '\r'
-	  && msgbuf[chars - 1] == '\n')
-	{
-	  chars -= 2;
-	  msgbuf[chars] = 0;
-	}
-
-      if (chars > ((COUNTOF (buf)) - 1))
-	{
-	  chars = COUNTOF (buf) - 1;
-	  msgbuf [chars] = 0;
-	}
-
-      wcstombs (buf, msgbuf, chars + 1);
-      LocalFree (msgbuf);
-    }
-  else
-    sprintf (buf, "unknown win32 error (%ld)", error);
-
-  SetLastError (lasterr);
-  return buf;
-}
-
-#endif /* __MINGW32CE__ */
-
-static void
-sync_error (FILE *fp, const char *desc, int expect, int got)
-{
-  fprintf (stderr, "\n%s\n", desc);
-  fprintf (stderr, "At logfile offset %ld, expected '0x%x' got '0x%x'\n",
-	   ftell (fp), expect, got);
-  fflush (stderr);
-  exit (1);
-}
-
-static void
-remote_error (const char *desc)
-{
-  fprintf (stderr, "\n%s\n", desc);
-  fflush (stderr);
-  exit (1);
-}
-
-static void
-remote_close (void)
-{
-#ifdef USE_WIN32API
-  closesocket (remote_desc);
-#else
-  close (remote_desc);
-#endif
-}
-
-/* Open a connection to a remote debugger.
-   NAME is the filename used for communication.  */
-
-static void
-remote_open (char *name)
-{
-  char *last_colon = strrchr (name, ':');
-
-  if (last_colon == NULL)
-    {
-      fprintf (stderr, "%s: Must specify tcp connection as host:addr\n", name);
-      fflush (stderr);
-      exit (1);
-    }
-
-#ifdef USE_WIN32API
-  static int winsock_initialized;
-#endif
-  int tmp;
-  int tmp_desc;
-  struct addrinfo hint;
-  struct addrinfo *ainfo;
-
-  memset (&hint, 0, sizeof (hint));
-  /* Assume no prefix will be passed, therefore we should use
-     AF_UNSPEC.  */
-  hint.ai_family = AF_UNSPEC;
-  hint.ai_socktype = SOCK_STREAM;
-  hint.ai_protocol = IPPROTO_TCP;
-
-  parsed_connection_spec parsed = parse_connection_spec (name, &hint);
-
-  if (parsed.port_str.empty ())
-    error (_("Missing port on hostname '%s'"), name);
-
-#ifdef USE_WIN32API
-  if (!winsock_initialized)
-    {
-      WSADATA wsad;
-
-      WSAStartup (MAKEWORD (1, 0), &wsad);
-      winsock_initialized = 1;
-    }
-#endif
-
-  int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
-		       &hint, &ainfo);
-
-  if (r != 0)
-    {
-      fprintf (stderr, "%s:%s: cannot resolve name: %s\n",
-	       parsed.host_str.c_str (), parsed.port_str.c_str (),
-	       gai_strerror (r));
-      fflush (stderr);
-      exit (1);
-    }
-
-  scoped_free_addrinfo free_ainfo (ainfo);
-
-  struct addrinfo *p;
-
-  for (p = ainfo; p != NULL; p = p->ai_next)
-    {
-      tmp_desc = socket (p->ai_family, p->ai_socktype, p->ai_protocol);
-
-      if (tmp_desc >= 0)
-	break;
-    }
-
-  if (p == NULL)
-    perror_with_name ("Cannot open socket");
-
-  /* Allow rapid reuse of this port. */
-  tmp = 1;
-  setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
-	      sizeof (tmp));
-
-  switch (p->ai_family)
-    {
-    case AF_INET:
-      ((struct sockaddr_in *) p->ai_addr)->sin_addr.s_addr = INADDR_ANY;
-      break;
-    case AF_INET6:
-      ((struct sockaddr_in6 *) p->ai_addr)->sin6_addr = in6addr_any;
-      break;
-    default:
-      fprintf (stderr, "Invalid 'ai_family' %d\n", p->ai_family);
-      exit (1);
-    }
-
-  if (bind (tmp_desc, p->ai_addr, p->ai_addrlen) != 0)
-    perror_with_name ("Can't bind address");
-
-  if (p->ai_socktype == SOCK_DGRAM)
-    remote_desc = tmp_desc;
-  else
-    {
-      struct sockaddr_storage sockaddr;
-      socklen_t sockaddrsize = sizeof (sockaddr);
-      char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
-
-      if (listen (tmp_desc, 1) != 0)
-	perror_with_name ("Can't listen on socket");
-
-      remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr,
-			    &sockaddrsize);
-
-      if (remote_desc == -1)
-	perror_with_name ("Accept failed");
-
-      /* Enable TCP keep alive process. */
-      tmp = 1;
-      setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE,
-		  (char *) &tmp, sizeof (tmp));
-
-      /* Tell TCP not to delay small packets.  This greatly speeds up
-	 interactive response. */
-      tmp = 1;
-      setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
-		  (char *) &tmp, sizeof (tmp));
-
-      if (getnameinfo ((struct sockaddr *) &sockaddr, sockaddrsize,
-		       orig_host, sizeof (orig_host),
-		       orig_port, sizeof (orig_port),
-		       NI_NUMERICHOST | NI_NUMERICSERV) == 0)
-	{
-	  fprintf (stderr, "Remote debugging from host %s, port %s\n",
-		   orig_host, orig_port);
-	  fflush (stderr);
-	}
-
-#ifndef USE_WIN32API
-      close (tmp_desc);		/* No longer need this */
-
-      signal (SIGPIPE, SIG_IGN);	/* If we don't do this, then
-					   gdbreplay simply exits when
-					   the remote side dies.  */
-#else
-      closesocket (tmp_desc);	/* No longer need this */
-#endif
-    }
-
-#if defined(F_SETFL) && defined (FASYNC)
-  fcntl (remote_desc, F_SETFL, FASYNC);
-#endif
-
-  fprintf (stderr, "Replay logfile using %s\n", name);
-  fflush (stderr);
-}
-
-static int
-logchar (FILE *fp)
-{
-  int ch;
-  int ch2;
-
-  ch = fgetc (fp);
-  if (ch != '\r')
-    {
-      fputc (ch, stdout);
-      fflush (stdout);
-    }
-  switch (ch)
-    {
-      /* Treat \r\n as a newline.  */
-    case '\r':
-      ch = fgetc (fp);
-      if (ch == '\n')
-	ch = EOL;
-      else
-	{
-	  ungetc (ch, fp);
-	  ch = '\r';
-	}
-      fputc (ch == EOL ? '\n' : '\r', stdout);
-      fflush (stdout);
-      break;
-    case '\n':
-      ch = EOL;
-      break;
-    case '\\':
-      ch = fgetc (fp);
-      fputc (ch, stdout);
-      fflush (stdout);
-      switch (ch)
-	{
-	case '\\':
-	  break;
-	case 'b':
-	  ch = '\b';
-	  break;
-	case 'f':
-	  ch = '\f';
-	  break;
-	case 'n':
-	  ch = '\n';
-	  break;
-	case 'r':
-	  ch = '\r';
-	  break;
-	case 't':
-	  ch = '\t';
-	  break;
-	case 'v':
-	  ch = '\v';
-	  break;
-	case 'x':
-	  ch2 = fgetc (fp);
-	  fputc (ch2, stdout);
-	  fflush (stdout);
-	  ch = fromhex (ch2) << 4;
-	  ch2 = fgetc (fp);
-	  fputc (ch2, stdout);
-	  fflush (stdout);
-	  ch |= fromhex (ch2);
-	  break;
-	default:
-	  /* Treat any other char as just itself */
-	  break;
-	}
-    default:
-      break;
-    }
-  return (ch);
-}
-
-static int
-gdbchar (int desc)
-{
-  unsigned char fromgdb;
-
-  if (read (desc, &fromgdb, 1) != 1)
-    return -1;
-  else
-    return fromgdb;
-}
-
-/* Accept input from gdb and match with chars from fp (after skipping one
-   blank) up until a \n is read from fp (which is not matched) */
-
-static void
-expect (FILE *fp)
-{
-  int fromlog;
-  int fromgdb;
-
-  if ((fromlog = logchar (fp)) != ' ')
-    {
-      sync_error (fp, "Sync error during gdb read of leading blank", ' ',
-		  fromlog);
-    }
-  do
-    {
-      fromlog = logchar (fp);
-      if (fromlog == EOL)
-	break;
-      fromgdb = gdbchar (remote_desc);
-      if (fromgdb < 0)
-	remote_error ("Error during read from gdb");
-    }
-  while (fromlog == fromgdb);
-
-  if (fromlog != EOL)
-    {
-      sync_error (fp, "Sync error during read of gdb packet from log", fromlog,
-		  fromgdb);
-    }
-}
-
-/* Play data back to gdb from fp (after skipping leading blank) up until a
-   \n is read from fp (which is discarded and not sent to gdb). */
-
-static void
-play (FILE *fp)
-{
-  int fromlog;
-  char ch;
-
-  if ((fromlog = logchar (fp)) != ' ')
-    {
-      sync_error (fp, "Sync error skipping blank during write to gdb", ' ',
-		  fromlog);
-    }
-  while ((fromlog = logchar (fp)) != EOL)
-    {
-      ch = fromlog;
-      if (write (remote_desc, &ch, 1) != 1)
-	remote_error ("Error during write to gdb");
-    }
-}
-
-static void
-gdbreplay_version (void)
-{
-  printf ("GNU gdbreplay %s%s\n"
-	  "Copyright (C) 2020 Free Software Foundation, Inc.\n"
-	  "gdbreplay is free software, covered by "
-	  "the GNU General Public License.\n"
-	  "This gdbreplay was configured as \"%s\"\n",
-	  PKGVERSION, version, host_name);
-}
-
-static void
-gdbreplay_usage (FILE *stream)
-{
-  fprintf (stream, "Usage:\tgdbreplay LOGFILE HOST:PORT\n");
-  if (REPORT_BUGS_TO[0] && stream == stdout)
-    fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
-}
-
-/* Main function.  This is called by the real "main" function,
-   wrapped in a TRY_CATCH that handles any uncaught exceptions.  */
-
-static void ATTRIBUTE_NORETURN
-captured_main (int argc, char *argv[])
-{
-  FILE *fp;
-  int ch;
-
-  if (argc >= 2 && strcmp (argv[1], "--version") == 0)
-    {
-      gdbreplay_version ();
-      exit (0);
-    }
-  if (argc >= 2 && strcmp (argv[1], "--help") == 0)
-    {
-      gdbreplay_usage (stdout);
-      exit (0);
-    }
-
-  if (argc < 3)
-    {
-      gdbreplay_usage (stderr);
-      exit (1);
-    }
-  fp = fopen (argv[1], "r");
-  if (fp == NULL)
-    {
-      perror_with_name (argv[1]);
-    }
-  remote_open (argv[2]);
-  while ((ch = logchar (fp)) != EOF)
-    {
-      switch (ch)
-	{
-	case 'w':
-	  /* data sent from gdb to gdbreplay, accept and match it */
-	  expect (fp);
-	  break;
-	case 'r':
-	  /* data sent from gdbreplay to gdb, play it */
-	  play (fp);
-	  break;
-	case 'c':
-	  /* Command executed by gdb */
-	  while ((ch = logchar (fp)) != EOL);
-	  break;
-	}
-    }
-  remote_close ();
-  exit (0);
-}
-
-int
-main (int argc, char *argv[])
-{
-  try
-    {
-      captured_main (argc, argv);
-    }
-  catch (const gdb_exception &exception)
-    {
-      if (exception.reason == RETURN_ERROR)
-	{
-	  fflush (stdout);
-	  fprintf (stderr, "%s\n", exception.what ());
-	}
-
-      exit (1);
-    }
-
-  gdb_assert_not_reached ("captured_main should never return");
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/gdbthread.h ./gdb/gdbserver/gdbthread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/gdbthread.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/gdbthread.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,227 +0,0 @@
-/* Multi-thread control defs for remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_GDBTHREAD_H
-#define GDBSERVER_GDBTHREAD_H
-
-#include "gdbsupport/common-gdbthread.h"
-#include "inferiors.h"
-
-#include <list>
-
-struct btrace_target_info;
-struct regcache;
-
-struct thread_info
-{
-  /* The id of this thread.  */
-  ptid_t id;
-
-  void *target_data;
-  struct regcache *regcache_data;
-
-  /* The last resume GDB requested on this thread.  */
-  enum resume_kind last_resume_kind;
-
-  /* The last wait status reported for this thread.  */
-  struct target_waitstatus last_status;
-
-  /* True if LAST_STATUS hasn't been reported to GDB yet.  */
-  int status_pending_p;
-
-  /* Given `while-stepping', a thread may be collecting data for more
-     than one tracepoint simultaneously.  E.g.:
-
-    ff0001  INSN1 <-- TP1, while-stepping 10 collect $regs
-    ff0002  INSN2
-    ff0003  INSN3 <-- TP2, collect $regs
-    ff0004  INSN4 <-- TP3, while-stepping 10 collect $regs
-    ff0005  INSN5
-
-   Notice that when instruction INSN5 is reached, the while-stepping
-   actions of both TP1 and TP3 are still being collected, and that TP2
-   had been collected meanwhile.  The whole range of ff0001-ff0005
-   should be single-stepped, due to at least TP1's while-stepping
-   action covering the whole range.
-
-   On the other hand, the same tracepoint with a while-stepping action
-   may be hit by more than one thread simultaneously, hence we can't
-   keep the current step count in the tracepoint itself.
-
-   This is the head of the list of the states of `while-stepping'
-   tracepoint actions this thread is now collecting; NULL if empty.
-   Each item in the list holds the current step of the while-stepping
-   action.  */
-  struct wstep_state *while_stepping;
-
-  /* Branch trace target information for this thread.  */
-  struct btrace_target_info *btrace;
-};
-
-extern std::list<thread_info *> all_threads;
-
-void remove_thread (struct thread_info *thread);
-struct thread_info *add_thread (ptid_t ptid, void *target_data);
-
-/* Return a pointer to the first thread, or NULL if there isn't one.  */
-
-struct thread_info *get_first_thread (void);
-
-struct thread_info *find_thread_ptid (ptid_t ptid);
-
-/* Find any thread of the PID process.  Returns NULL if none is
-   found.  */
-struct thread_info *find_any_thread_of_pid (int pid);
-
-/* Find the first thread for which FUNC returns true.  Return NULL if no thread
-   satisfying FUNC is found.  */
-
-template <typename Func>
-static thread_info *
-find_thread (Func func)
-{
-  std::list<thread_info *>::iterator next, cur = all_threads.begin ();
-
-  while (cur != all_threads.end ())
-    {
-      next = cur;
-      next++;
-
-      if (func (*cur))
-	return *cur;
-
-      cur = next;
-    }
-
-  return NULL;
-}
-
-/* Like the above, but only consider threads with pid PID.  */
-
-template <typename Func>
-static thread_info *
-find_thread (int pid, Func func)
-{
-  return find_thread ([&] (thread_info *thread)
-    {
-      return thread->id.pid () == pid && func (thread);
-    });
-}
-
-/* Find the first thread that matches FILTER for which FUNC returns true.
-   Return NULL if no thread satisfying these conditions is found.  */
-
-template <typename Func>
-static thread_info *
-find_thread (ptid_t filter, Func func)
-{
-  return find_thread ([&] (thread_info *thread) {
-    return thread->id.matches (filter) && func (thread);
-  });
-}
-
-/* Invoke FUNC for each thread.  */
-
-template <typename Func>
-static void
-for_each_thread (Func func)
-{
-  std::list<thread_info *>::iterator next, cur = all_threads.begin ();
-
-  while (cur != all_threads.end ())
-    {
-      next = cur;
-      next++;
-      func (*cur);
-      cur = next;
-    }
-}
-
-/* Like the above, but only consider threads with pid PID.  */
-
-template <typename Func>
-static void
-for_each_thread (int pid, Func func)
-{
-  for_each_thread ([&] (thread_info *thread)
-    {
-      if (pid == thread->id.pid ())
-	func (thread);
-    });
-}
-
-/* Find the a random thread for which FUNC (THREAD) returns true.  If
-   no entry is found then return NULL.  */
-
-template <typename Func>
-static thread_info *
-find_thread_in_random (Func func)
-{
-  int count = 0;
-  int random_selector;
-
-  /* First count how many interesting entries we have.  */
-  for_each_thread ([&] (thread_info *thread) {
-    if (func (thread))
-      count++;
-  });
-
-  if (count == 0)
-    return NULL;
-
-  /* Now randomly pick an entry out of those.  */
-  random_selector = (int)
-    ((count * (double) rand ()) / (RAND_MAX + 1.0));
-
-  thread_info *thread = find_thread ([&] (thread_info *thr_arg) {
-    return func (thr_arg) && (random_selector-- == 0);
-  });
-
-  gdb_assert (thread != NULL);
-
-  return thread;
-}
-
-/* Get current thread ID (Linux task ID).  */
-#define current_ptid (current_thread->id)
-
-/* Get the ptid of THREAD.  */
-
-static inline ptid_t
-ptid_of (const thread_info *thread)
-{
-  return thread->id;
-}
-
-/* Get the pid of THREAD.  */
-
-static inline int
-pid_of (const thread_info *thread)
-{
-  return thread->id.pid ();
-}
-
-/* Get the lwp of THREAD.  */
-
-static inline long
-lwpid_of (const thread_info *thread)
-{
-  return thread->id.lwp ();
-}
-
-#endif /* GDBSERVER_GDBTHREAD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/.gitignore ./gdb/gdbserver/.gitignore
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/.gitignore	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/.gitignore	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-/Makefile
-
-gdbreplay
-gdbserver
-libinproctrace.so
-
-build-gnulib-gdbserver
-build-libiberty-gdbserver
-
-*-generated.c
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/hostio.c ./gdb/gdbserver/hostio.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/hostio.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/hostio.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,620 +0,0 @@
-/* Host file transfer support for gdbserver.
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
-
-   Contributed by CodeSourcery.
-
-   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 "server.h"
-#include "gdb/fileio.h"
-#include "hostio.h"
-
-#include <fcntl.h>
-#include <limits.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "gdbsupport/fileio.h"
-
-struct fd_list
-{
-  int fd;
-  struct fd_list *next;
-};
-
-static struct fd_list *open_fds;
-
-static int
-safe_fromhex (char a, int *nibble)
-{
-  if (a >= '0' && a <= '9')
-    *nibble = a - '0';
-  else if (a >= 'a' && a <= 'f')
-    *nibble = a - 'a' + 10;
-  else if (a >= 'A' && a <= 'F')
-    *nibble = a - 'A' + 10;
-  else
-    return -1;
-
-  return 0;
-}
-
-/* Filenames are hex encoded, so the maximum we can handle is half the
-   packet buffer size.  Cap to PATH_MAX, if it is shorter.  */
-#if !defined (PATH_MAX) || (PATH_MAX > (PBUFSIZ / 2 + 1))
-#  define HOSTIO_PATH_MAX (PBUFSIZ / 2 + 1)
-#else
-#  define HOSTIO_PATH_MAX PATH_MAX
-#endif
-
-static int
-require_filename (char **pp, char *filename)
-{
-  int count;
-  char *p;
-
-  p = *pp;
-  count = 0;
-
-  while (*p && *p != ',')
-    {
-      int nib1, nib2;
-
-      /* Don't allow overflow.  */
-      if (count >= HOSTIO_PATH_MAX - 1)
-	return -1;
-
-      if (safe_fromhex (p[0], &nib1)
-	  || safe_fromhex (p[1], &nib2))
-	return -1;
-
-      filename[count++] = nib1 * 16 + nib2;
-      p += 2;
-    }
-
-  filename[count] = '\0';
-  *pp = p;
-  return 0;
-}
-
-static int
-require_int (char **pp, int *value)
-{
-  char *p;
-  int count, firstdigit;
-
-  p = *pp;
-  *value = 0;
-  count = 0;
-  firstdigit = -1;
-
-  while (*p && *p != ',')
-    {
-      int nib;
-
-      if (safe_fromhex (p[0], &nib))
-	return -1;
-
-      if (firstdigit == -1)
-	firstdigit = nib;
-
-      /* Don't allow overflow.  */
-      if (count >= 8 || (count == 7 && firstdigit >= 0x8))
-	return -1;
-
-      *value = *value * 16 + nib;
-      p++;
-      count++;
-    }
-
-  *pp = p;
-  return 0;
-}
-
-static int
-require_data (char *p, int p_len, char **data, int *data_len)
-{
-  int input_index, output_index, escaped;
-
-  *data = (char *) xmalloc (p_len);
-
-  output_index = 0;
-  escaped = 0;
-  for (input_index = 0; input_index < p_len; input_index++)
-    {
-      char b = p[input_index];
-
-      if (escaped)
-	{
-	  (*data)[output_index++] = b ^ 0x20;
-	  escaped = 0;
-	}
-      else if (b == '}')
-	escaped = 1;
-      else
-	(*data)[output_index++] = b;
-    }
-
-  if (escaped)
-    {
-      free (*data);
-      return -1;
-    }
-
-  *data_len = output_index;
-  return 0;
-}
-
-static int
-require_comma (char **pp)
-{
-  if (**pp == ',')
-    {
-      (*pp)++;
-      return 0;
-    }
-  else
-    return -1;
-}
-
-static int
-require_end (char *p)
-{
-  if (*p == '\0')
-    return 0;
-  else
-    return -1;
-}
-
-static int
-require_valid_fd (int fd)
-{
-  struct fd_list *fd_ptr;
-
-  for (fd_ptr = open_fds; fd_ptr != NULL; fd_ptr = fd_ptr->next)
-    if (fd_ptr->fd == fd)
-      return 0;
-
-  return -1;
-}
-
-/* Fill in own_buf with the last hostio error packet, however it
-   suitable for the target.  */
-static void
-hostio_error (char *own_buf)
-{
-  the_target->hostio_last_error (own_buf);
-}
-
-static void
-hostio_packet_error (char *own_buf)
-{
-  sprintf (own_buf, "F-1,%x", FILEIO_EINVAL);
-}
-
-static void
-hostio_reply (char *own_buf, int result)
-{
-  sprintf (own_buf, "F%x", result);
-}
-
-static int
-hostio_reply_with_data (char *own_buf, char *buffer, int len,
-			int *new_packet_len)
-{
-  int input_index, output_index, out_maxlen;
-
-  sprintf (own_buf, "F%x;", len);
-  output_index = strlen (own_buf);
-
-  out_maxlen = PBUFSIZ;
-
-  for (input_index = 0; input_index < len; input_index++)
-    {
-      char b = buffer[input_index];
-
-      if (b == '$' || b == '#' || b == '}' || b == '*')
-	{
-	  /* These must be escaped.  */
-	  if (output_index + 2 > out_maxlen)
-	    break;
-	  own_buf[output_index++] = '}';
-	  own_buf[output_index++] = b ^ 0x20;
-	}
-      else
-	{
-	  if (output_index + 1 > out_maxlen)
-	    break;
-	  own_buf[output_index++] = b;
-	}
-    }
-
-  *new_packet_len = output_index;
-  return input_index;
-}
-
-/* Process ID of inferior whose filesystem hostio functions
-   that take FILENAME arguments will use.  Zero means to use
-   our own filesystem.  */
-
-static int hostio_fs_pid;
-
-/* See hostio.h.  */
-
-void
-hostio_handle_new_gdb_connection (void)
-{
-  hostio_fs_pid = 0;
-}
-
-/* Handle a "vFile:setfs:" packet.  */
-
-static void
-handle_setfs (char *own_buf)
-{
-  char *p;
-  int pid;
-
-  /* If the target doesn't have any of the in-filesystem-of methods
-     then there's no point in GDB sending "vFile:setfs:" packets.  We
-     reply with an empty packet (i.e. we pretend we don't understand
-     "vFile:setfs:") and that should stop GDB sending any more.  */
-  if (the_target->multifs_open == NULL
-      && the_target->multifs_unlink == NULL
-      && the_target->multifs_readlink == NULL)
-    {
-      own_buf[0] = '\0';
-      return;
-    }
-
-  p = own_buf + strlen ("vFile:setfs:");
-
-  if (require_int (&p, &pid)
-      || pid < 0
-      || require_end (p))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  hostio_fs_pid = pid;
-
-  hostio_reply (own_buf, 0);
-}
-
-static void
-handle_open (char *own_buf)
-{
-  char filename[HOSTIO_PATH_MAX];
-  char *p;
-  int fileio_flags, fileio_mode, flags, fd;
-  mode_t mode;
-  struct fd_list *new_fd;
-
-  p = own_buf + strlen ("vFile:open:");
-
-  if (require_filename (&p, filename)
-      || require_comma (&p)
-      || require_int (&p, &fileio_flags)
-      || require_comma (&p)
-      || require_int (&p, &fileio_mode)
-      || require_end (p)
-      || fileio_to_host_openflags (fileio_flags, &flags)
-      || fileio_to_host_mode (fileio_mode, &mode))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  /* We do not need to convert MODE, since the fileio protocol
-     uses the standard values.  */
-  if (hostio_fs_pid != 0 && the_target->multifs_open != NULL)
-    fd = the_target->multifs_open (hostio_fs_pid, filename,
-				   flags, mode);
-  else
-    fd = open (filename, flags, mode);
-
-  if (fd == -1)
-    {
-      hostio_error (own_buf);
-      return;
-    }
-
-  /* Record the new file descriptor.  */
-  new_fd = XNEW (struct fd_list);
-  new_fd->fd = fd;
-  new_fd->next = open_fds;
-  open_fds = new_fd;
-
-  hostio_reply (own_buf, fd);
-}
-
-static void
-handle_pread (char *own_buf, int *new_packet_len)
-{
-  int fd, ret, len, offset, bytes_sent;
-  char *p, *data;
-  static int max_reply_size = -1;
-
-  p = own_buf + strlen ("vFile:pread:");
-
-  if (require_int (&p, &fd)
-      || require_comma (&p)
-      || require_valid_fd (fd)
-      || require_int (&p, &len)
-      || require_comma (&p)
-      || require_int (&p, &offset)
-      || require_end (p))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  /* Do not attempt to read more than the maximum number of bytes
-     hostio_reply_with_data can fit in a packet.  We may still read
-     too much because of escaping, but this is handled below.  */
-  if (max_reply_size == -1)
-    {
-      sprintf (own_buf, "F%x;", PBUFSIZ);
-      max_reply_size = PBUFSIZ - strlen (own_buf);
-    }
-  if (len > max_reply_size)
-    len = max_reply_size;
-
-  data = (char *) xmalloc (len);
-#ifdef HAVE_PREAD
-  ret = pread (fd, data, len, offset);
-#else
-  ret = -1;
-#endif
-  /* If we have no pread or it failed for this file, use lseek/read.  */
-  if (ret == -1)
-    {
-      ret = lseek (fd, offset, SEEK_SET);
-      if (ret != -1)
-	ret = read (fd, data, len);
-    }
-
-  if (ret == -1)
-    {
-      hostio_error (own_buf);
-      free (data);
-      return;
-    }
-
-  bytes_sent = hostio_reply_with_data (own_buf, data, ret, new_packet_len);
-
-  /* If we were using read, and the data did not all fit in the reply,
-     we would have to back up using lseek here.  With pread it does
-     not matter.  But we still have a problem; the return value in the
-     packet might be wrong, so we must fix it.  This time it will
-     definitely fit.  */
-  if (bytes_sent < ret)
-    bytes_sent = hostio_reply_with_data (own_buf, data, bytes_sent,
-					 new_packet_len);
-
-  free (data);
-}
-
-static void
-handle_pwrite (char *own_buf, int packet_len)
-{
-  int fd, ret, len, offset;
-  char *p, *data;
-
-  p = own_buf + strlen ("vFile:pwrite:");
-
-  if (require_int (&p, &fd)
-      || require_comma (&p)
-      || require_valid_fd (fd)
-      || require_int (&p, &offset)
-      || require_comma (&p)
-      || require_data (p, packet_len - (p - own_buf), &data, &len))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-#ifdef HAVE_PWRITE
-  ret = pwrite (fd, data, len, offset);
-#else
-  ret = -1;
-#endif
-  /* If we have no pwrite or it failed for this file, use lseek/write.  */
-  if (ret == -1)
-    {
-      ret = lseek (fd, offset, SEEK_SET);
-      if (ret != -1)
-	ret = write (fd, data, len);
-    }
-
-  if (ret == -1)
-    {
-      hostio_error (own_buf);
-      free (data);
-      return;
-    }
-
-  hostio_reply (own_buf, ret);
-  free (data);
-}
-
-static void
-handle_fstat (char *own_buf, int *new_packet_len)
-{
-  int fd, bytes_sent;
-  char *p;
-  struct stat st;
-  struct fio_stat fst;
-
-  p = own_buf + strlen ("vFile:fstat:");
-
-  if (require_int (&p, &fd)
-      || require_valid_fd (fd)
-      || require_end (p))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  if (fstat (fd, &st) == -1)
-    {
-      hostio_error (own_buf);
-      return;
-    }
-
-  host_to_fileio_stat (&st, &fst);
-
-  bytes_sent = hostio_reply_with_data (own_buf,
-				       (char *) &fst, sizeof (fst),
-				       new_packet_len);
-
-  /* If the response does not fit into a single packet, do not attempt
-     to return a partial response, but simply fail.  */
-  if (bytes_sent < sizeof (fst))
-    write_enn (own_buf);
-}
-
-static void
-handle_close (char *own_buf)
-{
-  int fd, ret;
-  char *p;
-  struct fd_list **open_fd_p, *old_fd;
-
-  p = own_buf + strlen ("vFile:close:");
-
-  if (require_int (&p, &fd)
-      || require_valid_fd (fd)
-      || require_end (p))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  ret = close (fd);
-
-  if (ret == -1)
-    {
-      hostio_error (own_buf);
-      return;
-    }
-
-  open_fd_p = &open_fds;
-  /* We know that fd is in the list, thanks to require_valid_fd.  */
-  while ((*open_fd_p)->fd != fd)
-    open_fd_p = &(*open_fd_p)->next;
-
-  old_fd = *open_fd_p;
-  *open_fd_p = (*open_fd_p)->next;
-  free (old_fd);
-
-  hostio_reply (own_buf, ret);
-}
-
-static void
-handle_unlink (char *own_buf)
-{
-  char filename[HOSTIO_PATH_MAX];
-  char *p;
-  int ret;
-
-  p = own_buf + strlen ("vFile:unlink:");
-
-  if (require_filename (&p, filename)
-      || require_end (p))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  if (hostio_fs_pid != 0 && the_target->multifs_unlink != NULL)
-    ret = the_target->multifs_unlink (hostio_fs_pid, filename);
-  else
-    ret = unlink (filename);
-
-  if (ret == -1)
-    {
-      hostio_error (own_buf);
-      return;
-    }
-
-  hostio_reply (own_buf, ret);
-}
-
-static void
-handle_readlink (char *own_buf, int *new_packet_len)
-{
-  char filename[HOSTIO_PATH_MAX], linkname[HOSTIO_PATH_MAX];
-  char *p;
-  int ret, bytes_sent;
-
-  p = own_buf + strlen ("vFile:readlink:");
-
-  if (require_filename (&p, filename)
-      || require_end (p))
-    {
-      hostio_packet_error (own_buf);
-      return;
-    }
-
-  if (hostio_fs_pid != 0 && the_target->multifs_readlink != NULL)
-    ret = the_target->multifs_readlink (hostio_fs_pid, filename,
-					linkname,
-					sizeof (linkname) - 1);
-  else
-    ret = readlink (filename, linkname, sizeof (linkname) - 1);
-
-  if (ret == -1)
-    {
-      hostio_error (own_buf);
-      return;
-    }
-
-  bytes_sent = hostio_reply_with_data (own_buf, linkname, ret, new_packet_len);
-
-  /* If the response does not fit into a single packet, do not attempt
-     to return a partial response, but simply fail.  */
-  if (bytes_sent < ret)
-    sprintf (own_buf, "F-1,%x", FILEIO_ENAMETOOLONG);
-}
-
-/* Handle all the 'F' file transfer packets.  */
-
-int
-handle_vFile (char *own_buf, int packet_len, int *new_packet_len)
-{
-  if (startswith (own_buf, "vFile:open:"))
-    handle_open (own_buf);
-  else if (startswith (own_buf, "vFile:pread:"))
-    handle_pread (own_buf, new_packet_len);
-  else if (startswith (own_buf, "vFile:pwrite:"))
-    handle_pwrite (own_buf, packet_len);
-  else if (startswith (own_buf, "vFile:fstat:"))
-    handle_fstat (own_buf, new_packet_len);
-  else if (startswith (own_buf, "vFile:close:"))
-    handle_close (own_buf);
-  else if (startswith (own_buf, "vFile:unlink:"))
-    handle_unlink (own_buf);
-  else if (startswith (own_buf, "vFile:readlink:"))
-    handle_readlink (own_buf, new_packet_len);
-  else if (startswith (own_buf, "vFile:setfs:"))
-    handle_setfs (own_buf);
-  else
-    return 0;
-
-  return 1;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/hostio-errno.c ./gdb/gdbserver/hostio-errno.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/hostio-errno.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/hostio-errno.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-/* Host file transfer support for gdbserver.
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
-
-   Contributed by CodeSourcery.
-
-   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 file implements the hostio_last_error target callback
-   on top of errno.  */
-
-#include "server.h"
-#include "gdbsupport/fileio.h"
-
-void
-hostio_last_error_from_errno (char *buf)
-{
-  int error = errno;
-  int fileio_error = host_to_fileio_error (error);
-  sprintf (buf, "F-1,%x", fileio_error);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/hostio.h ./gdb/gdbserver/hostio.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/hostio.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/hostio.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-/* Host file transfer support for gdbserver.
-   Copyright (C) 1993-2020 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 GDBSERVER_HOSTIO_H
-#define GDBSERVER_HOSTIO_H
-
-/* Per-connection setup.  */
-extern void hostio_handle_new_gdb_connection (void);
-
-/* Functions from hostio.c.  */
-extern int handle_vFile (char *, int, int *);
-
-/* Functions from hostio-errno.c.  */
-extern void hostio_last_error_from_errno (char *own_buf);
-
-#endif /* GDBSERVER_HOSTIO_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/i387-fp.c ./gdb/gdbserver/i387-fp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/i387-fp.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/i387-fp.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,954 +0,0 @@
-/* i387-specific utility functions, for the remote server for GDB.
-   Copyright (C) 2000-2020 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 "server.h"
-#include "i387-fp.h"
-#include "gdbsupport/x86-xstate.h"
-
-static const int num_mpx_bnd_registers = 4;
-static const int num_mpx_cfg_registers = 2;
-static const int num_avx512_k_registers = 8;
-static const int num_avx512_zmmh_low_registers = 16;
-static const int num_avx512_zmmh_high_registers = 16;
-static const int num_avx512_ymmh_registers = 16;
-static const int num_avx512_xmm_registers = 16;
-static const int num_pkeys_registers = 1;
-
-/* Note: These functions preserve the reserved bits in control registers.
-   However, gdbserver promptly throws away that information.  */
-
-/* These structs should have the proper sizes and alignment on both
-   i386 and x86-64 machines.  */
-
-struct i387_fsave {
-  /* All these are only sixteen bits, plus padding, except for fop (which
-     is only eleven bits), and fooff / fioff (which are 32 bits each).  */
-  unsigned short fctrl;
-  unsigned short pad1;
-  unsigned short fstat;
-  unsigned short pad2;
-  unsigned short ftag;
-  unsigned short pad3;
-  unsigned int fioff;
-  unsigned short fiseg;
-  unsigned short fop;
-  unsigned int fooff;
-  unsigned short foseg;
-  unsigned short pad4;
-
-  /* Space for eight 80-bit FP values.  */
-  unsigned char st_space[80];
-};
-
-struct i387_fxsave {
-  /* All these are only sixteen bits, plus padding, except for fop (which
-     is only eleven bits), and fooff / fioff (which are 32 bits each).  */
-  unsigned short fctrl;
-  unsigned short fstat;
-  unsigned short ftag;
-  unsigned short fop;
-  unsigned int fioff;
-  unsigned short fiseg;
-  unsigned short pad1;
-  unsigned int fooff;
-  unsigned short foseg;
-  unsigned short pad12;
-
-  unsigned int mxcsr;
-  unsigned int pad3;
-
-  /* Space for eight 80-bit FP values in 128-bit spaces.  */
-  unsigned char st_space[128];
-
-  /* Space for eight 128-bit XMM values, or 16 on x86-64.  */
-  unsigned char xmm_space[256];
-};
-
-struct i387_xsave {
-  /* All these are only sixteen bits, plus padding, except for fop (which
-     is only eleven bits), and fooff / fioff (which are 32 bits each).  */
-  unsigned short fctrl;
-  unsigned short fstat;
-  unsigned short ftag;
-  unsigned short fop;
-  unsigned int fioff;
-  unsigned short fiseg;
-  unsigned short pad1;
-  unsigned int fooff;
-  unsigned short foseg;
-  unsigned short pad12;
-
-  unsigned int mxcsr;
-  unsigned int mxcsr_mask;
-
-  /* Space for eight 80-bit FP values in 128-bit spaces.  */
-  unsigned char st_space[128];
-
-  /* Space for eight 128-bit XMM values, or 16 on x86-64.  */
-  unsigned char xmm_space[256];
-
-  unsigned char reserved1[48];
-
-  /* The extended control register 0 (the XFEATURE_ENABLED_MASK
-     register).  */
-  unsigned long long xcr0;
-
-  unsigned char reserved2[40];
-
-  /* The XSTATE_BV bit vector.  */
-  unsigned long long xstate_bv;
-
-  unsigned char reserved3[56];
-
-  /* Space for eight upper 128-bit YMM values, or 16 on x86-64.  */
-  unsigned char ymmh_space[256];
-
-  unsigned char reserved4[128];
-
-  /* Space for 4 bound registers values of 128 bits.  */
-  unsigned char mpx_bnd_space[64];
-
-  /* Space for 2 MPX configuration registers of 64 bits
-     plus reserved space.  */
-  unsigned char mpx_cfg_space[16];
-
-  unsigned char reserved5[48];
-
-  /* Space for 8 OpMask register values of 64 bits.  */
-  unsigned char k_space[64];
-
-  /* Space for 16 256-bit zmm0-15.  */
-  unsigned char zmmh_low_space[512];
-
-  /* Space for 16 512-bit zmm16-31 values.  */
-  unsigned char zmmh_high_space[1024];
-
-  /* Space for 1 32-bit PKRU register.  The HW XSTATE size for this feature is
-     actually 64 bits, but WRPKRU/RDPKRU instructions ignore upper 32 bits.  */
-  unsigned char pkru_space[8];
-};
-
-void
-i387_cache_to_fsave (struct regcache *regcache, void *buf)
-{
-  struct i387_fsave *fp = (struct i387_fsave *) buf;
-  int i;
-  int st0_regnum = find_regno (regcache->tdesc, "st0");
-  unsigned long val2;
-
-  for (i = 0; i < 8; i++)
-    collect_register (regcache, i + st0_regnum,
-		      ((char *) &fp->st_space[0]) + i * 10);
-
-  fp->fioff = regcache_raw_get_unsigned_by_name (regcache, "fioff");
-  fp->fooff = regcache_raw_get_unsigned_by_name (regcache, "fooff");
-
-  /* This one's 11 bits... */
-  val2 = regcache_raw_get_unsigned_by_name (regcache, "fop");
-  fp->fop = (val2 & 0x7FF) | (fp->fop & 0xF800);
-
-  /* Some registers are 16-bit.  */
-  fp->fctrl = regcache_raw_get_unsigned_by_name (regcache, "fctrl");
-  fp->fstat = regcache_raw_get_unsigned_by_name (regcache, "fstat");
-  fp->ftag = regcache_raw_get_unsigned_by_name (regcache, "ftag");
-  fp->fiseg = regcache_raw_get_unsigned_by_name (regcache, "fiseg");
-  fp->foseg = regcache_raw_get_unsigned_by_name (regcache, "foseg");
-}
-
-void
-i387_fsave_to_cache (struct regcache *regcache, const void *buf)
-{
-  struct i387_fsave *fp = (struct i387_fsave *) buf;
-  int i;
-  int st0_regnum = find_regno (regcache->tdesc, "st0");
-  unsigned long val;
-
-  for (i = 0; i < 8; i++)
-    supply_register (regcache, i + st0_regnum,
-		     ((char *) &fp->st_space[0]) + i * 10);
-
-  supply_register_by_name (regcache, "fioff", &fp->fioff);
-  supply_register_by_name (regcache, "fooff", &fp->fooff);
-
-  /* Some registers are 16-bit.  */
-  val = fp->fctrl & 0xFFFF;
-  supply_register_by_name (regcache, "fctrl", &val);
-
-  val = fp->fstat & 0xFFFF;
-  supply_register_by_name (regcache, "fstat", &val);
-
-  val = fp->ftag & 0xFFFF;
-  supply_register_by_name (regcache, "ftag", &val);
-
-  val = fp->fiseg & 0xFFFF;
-  supply_register_by_name (regcache, "fiseg", &val);
-
-  val = fp->foseg & 0xFFFF;
-  supply_register_by_name (regcache, "foseg", &val);
-
-  /* fop has only 11 valid bits.  */
-  val = (fp->fop) & 0x7FF;
-  supply_register_by_name (regcache, "fop", &val);
-}
-
-void
-i387_cache_to_fxsave (struct regcache *regcache, void *buf)
-{
-  struct i387_fxsave *fp = (struct i387_fxsave *) buf;
-  int i;
-  int st0_regnum = find_regno (regcache->tdesc, "st0");
-  int xmm0_regnum = find_regno (regcache->tdesc, "xmm0");
-  unsigned long val, val2;
-  /* Amd64 has 16 xmm regs; I386 has 8 xmm regs.  */
-  int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8;
-
-  for (i = 0; i < 8; i++)
-    collect_register (regcache, i + st0_regnum,
-		      ((char *) &fp->st_space[0]) + i * 16);
-  for (i = 0; i < num_xmm_registers; i++)
-    collect_register (regcache, i + xmm0_regnum,
-		      ((char *) &fp->xmm_space[0]) + i * 16);
-
-  fp->fioff = regcache_raw_get_unsigned_by_name (regcache, "fioff");
-  fp->fooff = regcache_raw_get_unsigned_by_name (regcache, "fooff");
-  fp->mxcsr = regcache_raw_get_unsigned_by_name (regcache, "mxcsr");
-
-  /* This one's 11 bits... */
-  val2 = regcache_raw_get_unsigned_by_name (regcache, "fop");
-  fp->fop = (val2 & 0x7FF) | (fp->fop & 0xF800);
-
-  /* Some registers are 16-bit.  */
-  fp->fctrl = regcache_raw_get_unsigned_by_name (regcache, "fctrl");
-  fp->fstat = regcache_raw_get_unsigned_by_name (regcache, "fstat");
-
-  /* Convert to the simplifed tag form stored in fxsave data.  */
-  val = regcache_raw_get_unsigned_by_name (regcache, "ftag");
-  val2 = 0;
-  for (i = 7; i >= 0; i--)
-    {
-      int tag = (val >> (i * 2)) & 3;
-
-      if (tag != 3)
-	val2 |= (1 << i);
-    }
-  fp->ftag = val2;
-
-  fp->fiseg = regcache_raw_get_unsigned_by_name (regcache, "fiseg");
-  fp->foseg = regcache_raw_get_unsigned_by_name (regcache, "foseg");
-}
-
-void
-i387_cache_to_xsave (struct regcache *regcache, void *buf)
-{
-  struct i387_xsave *fp = (struct i387_xsave *) buf;
-  int i;
-  unsigned long val, val2;
-  unsigned long long xstate_bv = 0;
-  unsigned long long clear_bv = 0;
-  char raw[64];
-  char *p;
-  /* Amd64 has 16 xmm regs; I386 has 8 xmm regs.  */
-  int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8;
-
-  /* The supported bits in `xstat_bv' are 8 bytes.  Clear part in
-     vector registers if its bit in xstat_bv is zero.  */
-  clear_bv = (~fp->xstate_bv) & x86_xcr0;
-
-  /* Clear part in x87 and vector registers if its bit in xstat_bv is
-     zero.  */
-  if (clear_bv)
-    {
-      if ((clear_bv & X86_XSTATE_X87))
-	{
-	  for (i = 0; i < 8; i++)
-	    memset (((char *) &fp->st_space[0]) + i * 16, 0, 10);
-
-	  fp->fioff = 0;
-	  fp->fooff = 0;
-	  fp->fctrl = I387_FCTRL_INIT_VAL;
-	  fp->fstat = 0;
-	  fp->ftag = 0;
-	  fp->fiseg = 0;
-	  fp->foseg = 0;
-	  fp->fop = 0;
-	}
-
-      if ((clear_bv & X86_XSTATE_SSE))
-	for (i = 0; i < num_xmm_registers; i++)
-	  memset (((char *) &fp->xmm_space[0]) + i * 16, 0, 16);
-
-      if ((clear_bv & X86_XSTATE_AVX))
-	for (i = 0; i < num_xmm_registers; i++)
-	  memset (((char *) &fp->ymmh_space[0]) + i * 16, 0, 16);
-
-      if ((clear_bv & X86_XSTATE_SSE) && (clear_bv & X86_XSTATE_AVX))
-	memset (((char *) &fp->mxcsr), 0, 4);
-
-      if ((clear_bv & X86_XSTATE_BNDREGS))
-	for (i = 0; i < num_mpx_bnd_registers; i++)
-	  memset (((char *) &fp->mpx_bnd_space[0]) + i * 16, 0, 16);
-
-      if ((clear_bv & X86_XSTATE_BNDCFG))
-	for (i = 0; i < num_mpx_cfg_registers; i++)
-	  memset (((char *) &fp->mpx_cfg_space[0]) + i * 8, 0, 8);
-
-      if ((clear_bv & X86_XSTATE_K))
-	for (i = 0; i < num_avx512_k_registers; i++)
-	  memset (((char *) &fp->k_space[0]) + i * 8, 0, 8);
-
-      if ((clear_bv & X86_XSTATE_ZMM_H))
-	for (i = 0; i < num_avx512_zmmh_low_registers; i++)
-	  memset (((char *) &fp->zmmh_low_space[0]) + i * 32, 0, 32);
-
-      if ((clear_bv & X86_XSTATE_ZMM))
-	{
-	  for (i = 0; i < num_avx512_zmmh_high_registers; i++)
-	    memset (((char *) &fp->zmmh_low_space[0]) + 32 + i * 64, 0, 32);
-	  for (i = 0; i < num_avx512_xmm_registers; i++)
-	    memset (((char *) &fp->zmmh_high_space[0]) + i * 64, 0, 16);
-	  for (i = 0; i < num_avx512_ymmh_registers; i++)
-	    memset (((char *) &fp->zmmh_high_space[0]) + 16 + i * 64, 0, 16);
-	}
-
-      if ((clear_bv & X86_XSTATE_PKRU))
-	for (i = 0; i < num_pkeys_registers; i++)
-	  memset (((char *) &fp->pkru_space[0]) + i * 4, 0, 4);
-    }
-
-  /* Check if any x87 registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_X87))
-    {
-      int st0_regnum = find_regno (regcache->tdesc, "st0");
-
-      for (i = 0; i < 8; i++)
-	{
-	  collect_register (regcache, i + st0_regnum, raw);
-	  p = ((char *) &fp->st_space[0]) + i * 16;
-	  if (memcmp (raw, p, 10))
-	    {
-	      xstate_bv |= X86_XSTATE_X87;
-	      memcpy (p, raw, 10);
-	    }
-	}
-    }
-
-  /* Check if any SSE registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_SSE))
-    {
-      int xmm0_regnum = find_regno (regcache->tdesc, "xmm0");
-
-      for (i = 0; i < num_xmm_registers; i++) 
-	{
-	  collect_register (regcache, i + xmm0_regnum, raw);
-	  p = ((char *) &fp->xmm_space[0]) + i * 16;
-	  if (memcmp (raw, p, 16))
-	    {
-	      xstate_bv |= X86_XSTATE_SSE;
-	      memcpy (p, raw, 16);
-	    }
-	}
-    }
-
-  /* Check if any AVX registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_AVX))
-    {
-      int ymm0h_regnum = find_regno (regcache->tdesc, "ymm0h");
-
-      for (i = 0; i < num_xmm_registers; i++) 
-	{
-	  collect_register (regcache, i + ymm0h_regnum, raw);
-	  p = ((char *) &fp->ymmh_space[0]) + i * 16;
-	  if (memcmp (raw, p, 16))
-	    {
-	      xstate_bv |= X86_XSTATE_AVX;
-	      memcpy (p, raw, 16);
-	    }
-	}
-    }
-
-  /* Check if any bound register has changed.  */
-  if ((x86_xcr0 & X86_XSTATE_BNDREGS))
-    {
-     int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw");
-
-      for (i = 0; i < num_mpx_bnd_registers; i++)
-	{
-	  collect_register (regcache, i + bnd0r_regnum, raw);
-	  p = ((char *) &fp->mpx_bnd_space[0]) + i * 16;
-	  if (memcmp (raw, p, 16))
-	    {
-	      xstate_bv |= X86_XSTATE_BNDREGS;
-	      memcpy (p, raw, 16);
-	    }
-	}
-    }
-
-  /* Check if any status register has changed.  */
-  if ((x86_xcr0 & X86_XSTATE_BNDCFG))
-    {
-      int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu");
-
-      for (i = 0; i < num_mpx_cfg_registers; i++)
-	{
-	  collect_register (regcache, i + bndcfg_regnum, raw);
-	  p = ((char *) &fp->mpx_cfg_space[0]) + i * 8;
-	  if (memcmp (raw, p, 8))
-	    {
-	      xstate_bv |= X86_XSTATE_BNDCFG;
-	      memcpy (p, raw, 8);
-	    }
-	}
-    }
-
-  /* Check if any K registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_K))
-    {
-      int k0_regnum = find_regno (regcache->tdesc, "k0");
-
-      for (i = 0; i < num_avx512_k_registers; i++)
-	{
-	  collect_register (regcache, i + k0_regnum, raw);
-	  p = ((char *) &fp->k_space[0]) + i * 8;
-	  if (memcmp (raw, p, 8) != 0)
-	    {
-	      xstate_bv |= X86_XSTATE_K;
-	      memcpy (p, raw, 8);
-	    }
-	}
-    }
-
-  /* Check if any of ZMM0H-ZMM15H registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_ZMM_H))
-    {
-      int zmm0h_regnum = find_regno (regcache->tdesc, "zmm0h");
-
-      for (i = 0; i < num_avx512_zmmh_low_registers; i++)
-	{
-	  collect_register (regcache, i + zmm0h_regnum, raw);
-	  p = ((char *) &fp->zmmh_low_space[0]) + i * 32;
-	  if (memcmp (raw, p, 32) != 0)
-	    {
-	      xstate_bv |= X86_XSTATE_ZMM_H;
-	      memcpy (p, raw, 32);
-	    }
-	}
-    }
-
-  /* Check if any of ZMM16H-ZMM31H registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_ZMM))
-    {
-      int zmm16h_regnum = find_regno (regcache->tdesc, "zmm16h");
-
-      for (i = 0; i < num_avx512_zmmh_high_registers; i++)
-	{
-	  collect_register (regcache, i + zmm16h_regnum, raw);
-	  p = ((char *) &fp->zmmh_high_space[0]) + 32 + i * 64;
-	  if (memcmp (raw, p, 32) != 0)
-	    {
-	      xstate_bv |= X86_XSTATE_ZMM;
-	      memcpy (p, raw, 32);
-	    }
-	}
-    }
-
-  /* Check if any XMM_AVX512 registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_ZMM))
-    {
-      int xmm_avx512_regnum = find_regno (regcache->tdesc, "xmm16");
-
-      for (i = 0; i < num_avx512_xmm_registers; i++)
-	{
-	  collect_register (regcache, i + xmm_avx512_regnum, raw);
-	  p = ((char *) &fp->zmmh_high_space[0]) + i * 64;
-	  if (memcmp (raw, p, 16) != 0)
-	    {
-	      xstate_bv |= X86_XSTATE_ZMM;
-	      memcpy (p, raw, 16);
-	    }
-	}
-    }
-
-  /* Check if any YMMH_AVX512 registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_ZMM))
-    {
-      int ymmh_avx512_regnum = find_regno (regcache->tdesc, "ymm16h");
-
-      for (i = 0; i < num_avx512_ymmh_registers; i++)
-	{
-	  collect_register (regcache, i + ymmh_avx512_regnum, raw);
-	  p = ((char *) &fp->zmmh_high_space[0]) + 16 + i * 64;
-	  if (memcmp (raw, p, 16) != 0)
-	    {
-	      xstate_bv |= X86_XSTATE_ZMM;
-	      memcpy (p, raw, 16);
-	    }
-	}
-    }
-
-  /* Check if any PKEYS registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_PKRU))
-    {
-      int pkru_regnum = find_regno (regcache->tdesc, "pkru");
-
-      for (i = 0; i < num_pkeys_registers; i++)
-	{
-	  collect_register (regcache, i + pkru_regnum, raw);
-	  p = ((char *) &fp->pkru_space[0]) + i * 4;
-	  if (memcmp (raw, p, 4) != 0)
-	    {
-	      xstate_bv |= X86_XSTATE_PKRU;
-	      memcpy (p, raw, 4);
-	    }
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_SSE) || (x86_xcr0 & X86_XSTATE_AVX))
-    {
-      collect_register_by_name (regcache, "mxcsr", raw);
-      if (memcmp (raw, &fp->mxcsr, 4) != 0)
-	{
-	  if (((fp->xstate_bv | xstate_bv)
-	       & (X86_XSTATE_SSE | X86_XSTATE_AVX)) == 0)
-	    xstate_bv |= X86_XSTATE_SSE;
-	  memcpy (&fp->mxcsr, raw, 4);
-	}
-    }
-
-  if (x86_xcr0 & X86_XSTATE_X87)
-    {
-      collect_register_by_name (regcache, "fioff", raw);
-      if (memcmp (raw, &fp->fioff, 4) != 0)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  memcpy (&fp->fioff, raw, 4);
-	}
-
-      collect_register_by_name (regcache, "fooff", raw);
-      if (memcmp (raw, &fp->fooff, 4) != 0)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  memcpy (&fp->fooff, raw, 4);
-	}
-
-      /* This one's 11 bits... */
-      val2 = regcache_raw_get_unsigned_by_name (regcache, "fop");
-      val2 = (val2 & 0x7FF) | (fp->fop & 0xF800);
-      if (fp->fop != val2)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  fp->fop = val2;
-	}
-
-      /* Some registers are 16-bit.  */
-      val = regcache_raw_get_unsigned_by_name (regcache, "fctrl");
-      if (fp->fctrl != val)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  fp->fctrl = val;
-	}
-
-      val = regcache_raw_get_unsigned_by_name (regcache, "fstat");
-      if (fp->fstat != val)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  fp->fstat = val;
-	}
-
-      /* Convert to the simplifed tag form stored in fxsave data.  */
-      val = regcache_raw_get_unsigned_by_name (regcache, "ftag");
-      val2 = 0;
-      for (i = 7; i >= 0; i--)
-	{
-	  int tag = (val >> (i * 2)) & 3;
-
-	  if (tag != 3)
-	    val2 |= (1 << i);
-	}
-      if (fp->ftag != val2)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  fp->ftag = val2;
-	}
-
-      val = regcache_raw_get_unsigned_by_name (regcache, "fiseg");
-      if (fp->fiseg != val)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  fp->fiseg = val;
-	}
-
-      val = regcache_raw_get_unsigned_by_name (regcache, "foseg");
-      if (fp->foseg != val)
-	{
-	  xstate_bv |= X86_XSTATE_X87;
-	  fp->foseg = val;
-	}
-    }
-
-  /* Update the corresponding bits in xstate_bv if any SSE/AVX
-     registers are changed.  */
-  fp->xstate_bv |= xstate_bv;
-}
-
-static int
-i387_ftag (struct i387_fxsave *fp, int regno)
-{
-  unsigned char *raw = &fp->st_space[regno * 16];
-  unsigned int exponent;
-  unsigned long fraction[2];
-  int integer;
-
-  integer = raw[7] & 0x80;
-  exponent = (((raw[9] & 0x7f) << 8) | raw[8]);
-  fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]);
-  fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16)
-		 | (raw[5] << 8) | raw[4]);
-
-  if (exponent == 0x7fff)
-    {
-      /* Special.  */
-      return (2);
-    }
-  else if (exponent == 0x0000)
-    {
-      if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer)
-	{
-	  /* Zero.  */
-	  return (1);
-	}
-      else
-	{
-	  /* Special.  */
-	  return (2);
-	}
-    }
-  else
-    {
-      if (integer)
-	{
-	  /* Valid.  */
-	  return (0);
-	}
-      else
-	{
-	  /* Special.  */
-	  return (2);
-	}
-    }
-}
-
-void
-i387_fxsave_to_cache (struct regcache *regcache, const void *buf)
-{
-  struct i387_fxsave *fp = (struct i387_fxsave *) buf;
-  int i, top;
-  int st0_regnum = find_regno (regcache->tdesc, "st0");
-  int xmm0_regnum = find_regno (regcache->tdesc, "xmm0");
-  unsigned long val;
-  /* Amd64 has 16 xmm regs; I386 has 8 xmm regs.  */
-  int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8;
-
-  for (i = 0; i < 8; i++)
-    supply_register (regcache, i + st0_regnum,
-		     ((char *) &fp->st_space[0]) + i * 16);
-  for (i = 0; i < num_xmm_registers; i++)
-    supply_register (regcache, i + xmm0_regnum,
-		     ((char *) &fp->xmm_space[0]) + i * 16);
-
-  supply_register_by_name (regcache, "fioff", &fp->fioff);
-  supply_register_by_name (regcache, "fooff", &fp->fooff);
-  supply_register_by_name (regcache, "mxcsr", &fp->mxcsr);
-
-  /* Some registers are 16-bit.  */
-  val = fp->fctrl & 0xFFFF;
-  supply_register_by_name (regcache, "fctrl", &val);
-
-  val = fp->fstat & 0xFFFF;
-  supply_register_by_name (regcache, "fstat", &val);
-
-  /* Generate the form of ftag data that GDB expects.  */
-  top = (fp->fstat >> 11) & 0x7;
-  val = 0;
-  for (i = 7; i >= 0; i--)
-    {
-      int tag;
-      if (fp->ftag & (1 << i))
-	tag = i387_ftag (fp, (i + 8 - top) % 8);
-      else
-	tag = 3;
-      val |= tag << (2 * i);
-    }
-  supply_register_by_name (regcache, "ftag", &val);
-
-  val = fp->fiseg & 0xFFFF;
-  supply_register_by_name (regcache, "fiseg", &val);
-
-  val = fp->foseg & 0xFFFF;
-  supply_register_by_name (regcache, "foseg", &val);
-
-  val = (fp->fop) & 0x7FF;
-  supply_register_by_name (regcache, "fop", &val);
-}
-
-void
-i387_xsave_to_cache (struct regcache *regcache, const void *buf)
-{
-  struct i387_xsave *fp = (struct i387_xsave *) buf;
-  struct i387_fxsave *fxp = (struct i387_fxsave *) buf;
-  int i, top;
-  unsigned long val;
-  unsigned long long clear_bv;
-  gdb_byte *p;
-  /* Amd64 has 16 xmm regs; I386 has 8 xmm regs.  */
-  int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8;
-
-  /* The supported bits in `xstat_bv' are 8 bytes.  Clear part in
-     vector registers if its bit in xstat_bv is zero.  */
-  clear_bv = (~fp->xstate_bv) & x86_xcr0;
-
-  /* Check if any x87 registers are changed.  */
-  if ((x86_xcr0 & X86_XSTATE_X87) != 0)
-    {
-      int st0_regnum = find_regno (regcache->tdesc, "st0");
-
-      if ((clear_bv & X86_XSTATE_X87) != 0)
-	{
-	  for (i = 0; i < 8; i++)
-	    supply_register_zeroed (regcache, i + st0_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->st_space[0];
-	  for (i = 0; i < 8; i++)
-	    supply_register (regcache, i + st0_regnum, p + i * 16);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_SSE) != 0)
-    {
-      int xmm0_regnum = find_regno (regcache->tdesc, "xmm0");
-
-      if ((clear_bv & X86_XSTATE_SSE))
-	{
-	  for (i = 0; i < num_xmm_registers; i++)
-	    supply_register_zeroed (regcache, i + xmm0_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->xmm_space[0];
-	  for (i = 0; i < num_xmm_registers; i++)
-	    supply_register (regcache, i + xmm0_regnum, p + i * 16);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_AVX) != 0)
-    {
-      int ymm0h_regnum = find_regno (regcache->tdesc, "ymm0h");
-
-      if ((clear_bv & X86_XSTATE_AVX) != 0)
-	{
-	  for (i = 0; i < num_xmm_registers; i++)
-	    supply_register_zeroed (regcache, i + ymm0h_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->ymmh_space[0];
-	  for (i = 0; i < num_xmm_registers; i++)
-	    supply_register (regcache, i + ymm0h_regnum, p + i * 16);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_BNDREGS))
-    {
-      int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw");
-
-
-      if ((clear_bv & X86_XSTATE_BNDREGS) != 0)
-	{
-	  for (i = 0; i < num_mpx_bnd_registers; i++)
-	    supply_register_zeroed (regcache, i + bnd0r_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->mpx_bnd_space[0];
-	  for (i = 0; i < num_mpx_bnd_registers; i++)
-	    supply_register (regcache, i + bnd0r_regnum, p + i * 16);
-	}
-
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_BNDCFG))
-    {
-      int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu");
-
-      if ((clear_bv & X86_XSTATE_BNDCFG) != 0)
-	{
-	  for (i = 0; i < num_mpx_cfg_registers; i++)
-	    supply_register_zeroed (regcache, i + bndcfg_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->mpx_cfg_space[0];
-	  for (i = 0; i < num_mpx_cfg_registers; i++)
-	    supply_register (regcache, i + bndcfg_regnum, p + i * 8);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_K) != 0)
-    {
-      int k0_regnum = find_regno (regcache->tdesc, "k0");
-
-      if ((clear_bv & X86_XSTATE_K) != 0)
-	{
-	  for (i = 0; i < num_avx512_k_registers; i++)
-	    supply_register_zeroed (regcache, i + k0_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->k_space[0];
-	  for (i = 0; i < num_avx512_k_registers; i++)
-	    supply_register (regcache, i + k0_regnum, p + i * 8);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_ZMM_H) != 0)
-    {
-      int zmm0h_regnum = find_regno (regcache->tdesc, "zmm0h");
-
-      if ((clear_bv & X86_XSTATE_ZMM_H) != 0)
-	{
-	  for (i = 0; i < num_avx512_zmmh_low_registers; i++)
-	    supply_register_zeroed (regcache, i + zmm0h_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->zmmh_low_space[0];
-	  for (i = 0; i < num_avx512_zmmh_low_registers; i++)
-	    supply_register (regcache, i + zmm0h_regnum, p + i * 32);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_ZMM) != 0)
-    {
-      int zmm16h_regnum = find_regno (regcache->tdesc, "zmm16h");
-      int ymm16h_regnum = find_regno (regcache->tdesc, "ymm16h");
-      int xmm16_regnum = find_regno (regcache->tdesc, "xmm16");
-
-      if ((clear_bv & X86_XSTATE_ZMM) != 0)
-	{
-	  for (i = 0; i < num_avx512_zmmh_high_registers; i++)
-	    supply_register_zeroed (regcache, i + zmm16h_regnum);
-	  for (i = 0; i < num_avx512_ymmh_registers; i++)
-	    supply_register_zeroed (regcache, i + ymm16h_regnum);
-	  for (i = 0; i < num_avx512_xmm_registers; i++)
-	    supply_register_zeroed (regcache, i + xmm16_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->zmmh_high_space[0];
-	  for (i = 0; i < num_avx512_zmmh_high_registers; i++)
-	    supply_register (regcache, i + zmm16h_regnum, p + 32 + i * 64);
-	  for (i = 0; i < num_avx512_ymmh_registers; i++)
-	    supply_register (regcache, i + ymm16h_regnum, p + 16 + i * 64);
-	  for (i = 0; i < num_avx512_xmm_registers; i++)
-	    supply_register (regcache, i + xmm16_regnum, p + i * 64);
-	}
-    }
-
-  if ((x86_xcr0 & X86_XSTATE_PKRU) != 0)
-    {
-      int pkru_regnum = find_regno (regcache->tdesc, "pkru");
-
-      if ((clear_bv & X86_XSTATE_PKRU) != 0)
-	{
-	  for (i = 0; i < num_pkeys_registers; i++)
-	    supply_register_zeroed (regcache, i + pkru_regnum);
-	}
-      else
-	{
-	  p = (gdb_byte *) &fp->pkru_space[0];
-	  for (i = 0; i < num_pkeys_registers; i++)
-	    supply_register (regcache, i + pkru_regnum, p + i * 4);
-	}
-    }
-
-  if ((clear_bv & (X86_XSTATE_SSE | X86_XSTATE_AVX))
-      == (X86_XSTATE_SSE | X86_XSTATE_AVX))
-    {
-      unsigned int default_mxcsr = I387_MXCSR_INIT_VAL;
-      supply_register_by_name (regcache, "mxcsr", &default_mxcsr);
-    }
-  else
-    supply_register_by_name (regcache, "mxcsr", &fp->mxcsr);
-
-  if ((clear_bv & X86_XSTATE_X87) != 0)
-    {
-      supply_register_by_name_zeroed (regcache, "fioff");
-      supply_register_by_name_zeroed (regcache, "fooff");
-
-      val = I387_FCTRL_INIT_VAL;
-      supply_register_by_name (regcache, "fctrl", &val);
-
-      supply_register_by_name_zeroed (regcache, "fstat");
-
-      val = 0xFFFF;
-      supply_register_by_name (regcache, "ftag", &val);
-
-      supply_register_by_name_zeroed (regcache, "fiseg");
-      supply_register_by_name_zeroed (regcache, "foseg");
-      supply_register_by_name_zeroed (regcache, "fop");
-    }
-  else
-    {
-      supply_register_by_name (regcache, "fioff", &fp->fioff);
-      supply_register_by_name (regcache, "fooff", &fp->fooff);
-
-      /* Some registers are 16-bit.  */
-      val = fp->fctrl & 0xFFFF;
-      supply_register_by_name (regcache, "fctrl", &val);
-
-      val = fp->fstat & 0xFFFF;
-      supply_register_by_name (regcache, "fstat", &val);
-
-      /* Generate the form of ftag data that GDB expects.  */
-      top = (fp->fstat >> 11) & 0x7;
-      val = 0;
-      for (i = 7; i >= 0; i--)
-	{
-	  int tag;
-	  if (fp->ftag & (1 << i))
-	    tag = i387_ftag (fxp, (i + 8 - top) % 8);
-	  else
-	    tag = 3;
-	  val |= tag << (2 * i);
-	}
-      supply_register_by_name (regcache, "ftag", &val);
-
-      val = fp->fiseg & 0xFFFF;
-      supply_register_by_name (regcache, "fiseg", &val);
-
-      val = fp->foseg & 0xFFFF;
-      supply_register_by_name (regcache, "foseg", &val);
-
-      val = (fp->fop) & 0x7FF;
-      supply_register_by_name (regcache, "fop", &val);
-    }
-}
-
-/* Default to SSE.  */
-unsigned long long x86_xcr0 = X86_XSTATE_SSE_MASK;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/i387-fp.h ./gdb/gdbserver/i387-fp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/i387-fp.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/i387-fp.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-/* i387-specific utility functions, for the remote server for GDB.
-   Copyright (C) 2000-2020 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 GDBSERVER_I387_FP_H
-#define GDBSERVER_I387_FP_H
-
-void i387_cache_to_fsave (struct regcache *regcache, void *buf);
-void i387_fsave_to_cache (struct regcache *regcache, const void *buf);
-
-void i387_cache_to_fxsave (struct regcache *regcache, void *buf);
-void i387_fxsave_to_cache (struct regcache *regcache, const void *buf);
-
-void i387_cache_to_xsave (struct regcache *regcache, void *buf);
-void i387_xsave_to_cache (struct regcache *regcache, const void *buf);
-
-extern unsigned long long x86_xcr0;
-
-#endif /* GDBSERVER_I387_FP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/inferiors.c ./gdb/gdbserver/inferiors.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/inferiors.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/inferiors.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,243 +0,0 @@
-/* Inferior process information for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 "server.h"
-#include "gdbthread.h"
-#include "dll.h"
-
-std::list<process_info *> all_processes;
-std::list<thread_info *> all_threads;
-
-struct thread_info *current_thread;
-
-/* The current working directory used to start the inferior.  */
-static const char *current_inferior_cwd = NULL;
-
-struct thread_info *
-add_thread (ptid_t thread_id, void *target_data)
-{
-  struct thread_info *new_thread = XCNEW (struct thread_info);
-
-  new_thread->id = thread_id;
-  new_thread->last_resume_kind = resume_continue;
-  new_thread->last_status.kind = TARGET_WAITKIND_IGNORE;
-
-  all_threads.push_back (new_thread);
-
-  if (current_thread == NULL)
-    current_thread = new_thread;
-
-  new_thread->target_data = target_data;
-
-  return new_thread;
-}
-
-/* See gdbthread.h.  */
-
-struct thread_info *
-get_first_thread (void)
-{
-  if (!all_threads.empty ())
-    return all_threads.front ();
-  else
-    return NULL;
-}
-
-struct thread_info *
-find_thread_ptid (ptid_t ptid)
-{
-  return find_thread ([&] (thread_info *thread) {
-    return thread->id == ptid;
-  });
-}
-
-/* Find a thread associated with the given PROCESS, or NULL if no
-   such thread exists.  */
-
-static struct thread_info *
-find_thread_process (const struct process_info *const process)
-{
-  return find_any_thread_of_pid (process->pid);
-}
-
-/* See gdbthread.h.  */
-
-struct thread_info *
-find_any_thread_of_pid (int pid)
-{
-  return find_thread (pid, [] (thread_info *thread) {
-    return true;
-  });
-}
-
-static void
-free_one_thread (thread_info *thread)
-{
-  free_register_cache (thread_regcache_data (thread));
-  free (thread);
-}
-
-void
-remove_thread (struct thread_info *thread)
-{
-  if (thread->btrace != NULL)
-    target_disable_btrace (thread->btrace);
-
-  discard_queued_stop_replies (ptid_of (thread));
-  all_threads.remove (thread);
-  free_one_thread (thread);
-  if (current_thread == thread)
-    current_thread = NULL;
-}
-
-void *
-thread_target_data (struct thread_info *thread)
-{
-  return thread->target_data;
-}
-
-struct regcache *
-thread_regcache_data (struct thread_info *thread)
-{
-  return thread->regcache_data;
-}
-
-void
-set_thread_regcache_data (struct thread_info *thread, struct regcache *data)
-{
-  thread->regcache_data = data;
-}
-
-void
-clear_inferiors (void)
-{
-  for_each_thread (free_one_thread);
-  all_threads.clear ();
-
-  clear_dlls ();
-
-  current_thread = NULL;
-}
-
-struct process_info *
-add_process (int pid, int attached)
-{
-  process_info *process = new process_info (pid, attached);
-
-  all_processes.push_back (process);
-
-  return process;
-}
-
-/* Remove a process from the common process list and free the memory
-   allocated for it.
-   The caller is responsible for freeing private data first.  */
-
-void
-remove_process (struct process_info *process)
-{
-  clear_symbol_cache (&process->symbol_cache);
-  free_all_breakpoints (process);
-  gdb_assert (find_thread_process (process) == NULL);
-  all_processes.remove (process);
-  delete process;
-}
-
-process_info *
-find_process_pid (int pid)
-{
-  return find_process ([&] (process_info *process) {
-    return process->pid == pid;
-  });
-}
-
-/* Get the first process in the process list, or NULL if the list is empty.  */
-
-process_info *
-get_first_process (void)
-{
-  if (!all_processes.empty ())
-    return all_processes.front ();
-  else
-    return NULL;
-}
-
-/* Return non-zero if there are any inferiors that we have created
-   (as opposed to attached-to).  */
-
-int
-have_started_inferiors_p (void)
-{
-  return find_process ([] (process_info *process) {
-    return !process->attached;
-  }) != NULL;
-}
-
-/* Return non-zero if there are any inferiors that we have attached to.  */
-
-int
-have_attached_inferiors_p (void)
-{
-  return find_process ([] (process_info *process) {
-    return process->attached;
-  }) != NULL;
-}
-
-struct process_info *
-get_thread_process (const struct thread_info *thread)
-{
-  return find_process_pid (thread->id.pid ());
-}
-
-struct process_info *
-current_process (void)
-{
-  gdb_assert (current_thread != NULL);
-  return get_thread_process (current_thread);
-}
-
-/* See gdbsupport/common-gdbthread.h.  */
-
-void
-switch_to_thread (ptid_t ptid)
-{
-  gdb_assert (ptid != minus_one_ptid);
-  current_thread = find_thread_ptid (ptid);
-}
-
-/* See gdbsupport/common-inferior.h.  */
-
-const char *
-get_inferior_cwd ()
-{
-  return current_inferior_cwd;
-}
-
-/* See gdbsupport/common-inferior.h.  */
-
-void
-set_inferior_cwd (const char *cwd)
-{
-  xfree ((void *) current_inferior_cwd);
-  if (cwd != NULL)
-    current_inferior_cwd = xstrdup (cwd);
-  else
-    current_inferior_cwd = NULL;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/inferiors.h ./gdb/gdbserver/inferiors.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/inferiors.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/inferiors.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,147 +0,0 @@
-/* Inferior process information for the remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_INFERIORS_H
-#define GDBSERVER_INFERIORS_H
-
-#include "gdbsupport/gdb_vecs.h"
-#include <list>
-
-struct thread_info;
-struct regcache;
-struct target_desc;
-struct sym_cache;
-struct breakpoint;
-struct raw_breakpoint;
-struct fast_tracepoint_jump;
-struct process_info_private;
-
-struct process_info
-{
-  process_info (int pid_, int attached_)
-  : pid (pid_), attached (attached_)
-  {}
-
-  /* This process' pid.  */
-  int pid;
-
-  /* Nonzero if this child process was attached rather than
-     spawned.  */
-  int attached;
-
-  /* True if GDB asked us to detach from this process, but we remained
-     attached anyway.  */
-  int gdb_detached = 0;
-
-  /* The symbol cache.  */
-  struct sym_cache *symbol_cache = NULL;
-
-  /* The list of memory breakpoints.  */
-  struct breakpoint *breakpoints = NULL;
-
-  /* The list of raw memory breakpoints.  */
-  struct raw_breakpoint *raw_breakpoints = NULL;
-
-  /* The list of installed fast tracepoints.  */
-  struct fast_tracepoint_jump *fast_tracepoint_jumps = NULL;
-
-  /* The list of syscalls to report, or just a single element, ANY_SYSCALL,
-     for unfiltered syscall reporting.  */
-  std::vector<int> syscalls_to_catch;
-
-  const struct target_desc *tdesc = NULL;
-
-  /* Private target data.  */
-  struct process_info_private *priv = NULL;
-};
-
-/* Get the pid of PROC.  */
-
-static inline int
-pid_of (const process_info *proc)
-{
-  return proc->pid;
-}
-
-/* Return a pointer to the process that corresponds to the current
-   thread (current_thread).  It is an error to call this if there is
-   no current thread selected.  */
-
-struct process_info *current_process (void);
-struct process_info *get_thread_process (const struct thread_info *);
-
-extern std::list<process_info *> all_processes;
-
-/* Invoke FUNC for each process.  */
-
-template <typename Func>
-static void
-for_each_process (Func func)
-{
-  std::list<process_info *>::iterator next, cur = all_processes.begin ();
-
-  while (cur != all_processes.end ())
-    {
-      next = cur;
-      next++;
-      func (*cur);
-      cur = next;
-    }
-}
-
-/* Find the first process for which FUNC returns true.  Return NULL if no
-   process satisfying FUNC is found.  */
-
-template <typename Func>
-static process_info *
-find_process (Func func)
-{
-  std::list<process_info *>::iterator next, cur = all_processes.begin ();
-
-  while (cur != all_processes.end ())
-    {
-      next = cur;
-      next++;
-
-      if (func (*cur))
-        return *cur;
-
-      cur = next;
-    }
-
-  return NULL;
-}
-
-extern struct thread_info *current_thread;
-
-/* Return the first process in the processes list.  */
-struct process_info *get_first_process (void);
-
-struct process_info *add_process (int pid, int attached);
-void remove_process (struct process_info *process);
-struct process_info *find_process_pid (int pid);
-int have_started_inferiors_p (void);
-int have_attached_inferiors_p (void);
-
-void clear_inferiors (void);
-
-void *thread_target_data (struct thread_info *);
-struct regcache *thread_regcache_data (struct thread_info *);
-void set_thread_regcache_data (struct thread_info *, struct regcache *);
-
-#endif /* GDBSERVER_INFERIORS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-low.c ./gdb/gdbserver/linux-aarch32-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch32-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,303 +0,0 @@
-/* Copyright (C) 1995-2020 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 "server.h"
-#include "arch/arm.h"
-#include "arch/arm-linux.h"
-#include "linux-low.h"
-#include "linux-aarch32-low.h"
-
-#include <sys/ptrace.h>
-/* Don't include elf.h if linux/elf.h got included by gdb_proc_service.h.
-   On Bionic elf.h and linux/elf.h have conflicting definitions.  */
-#ifndef ELFMAG0
-#include <elf.h>
-#endif
-
-/* Correct in either endianness.  */
-#define arm_abi_breakpoint 0xef9f0001UL
-
-/* For new EABI binaries.  We recognize it regardless of which ABI
-   is used for gdbserver, so single threaded debugging should work
-   OK, but for multi-threaded debugging we only insert the current
-   ABI's breakpoint instruction.  For now at least.  */
-#define arm_eabi_breakpoint 0xe7f001f0UL
-
-#if (defined __ARM_EABI__ || defined __aarch64__)
-static const unsigned long arm_breakpoint = arm_eabi_breakpoint;
-#else
-static const unsigned long arm_breakpoint = arm_abi_breakpoint;
-#endif
-
-#define arm_breakpoint_len 4
-static const unsigned short thumb_breakpoint = 0xde01;
-#define thumb_breakpoint_len 2
-static const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 };
-#define thumb2_breakpoint_len 4
-
-/* Some older versions of GNU/Linux and Android do not define
-   the following macros.  */
-#ifndef NT_ARM_VFP
-#define NT_ARM_VFP 0x400
-#endif
-
-/* Collect GP registers from REGCACHE to buffer BUF.  */
-
-void
-arm_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-  uint32_t *regs = (uint32_t *) buf;
-  uint32_t cpsr = regs[ARM_CPSR_GREGNUM];
-
-  for (i = ARM_A1_REGNUM; i <= ARM_PC_REGNUM; i++)
-    collect_register (regcache, i, &regs[i]);
-
-  collect_register (regcache, ARM_PS_REGNUM, &regs[ARM_CPSR_GREGNUM]);
-  /* Keep reserved bits bit 20 to bit 23.  */
-  regs[ARM_CPSR_GREGNUM] = ((regs[ARM_CPSR_GREGNUM] & 0xff0fffff)
-			    | (cpsr & 0x00f00000));
-}
-
-/* Supply GP registers contents, stored in BUF, to REGCACHE.  */
-
-void
-arm_store_gregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-  char zerobuf[8];
-  const uint32_t *regs = (const uint32_t *) buf;
-  uint32_t cpsr = regs[ARM_CPSR_GREGNUM];
-
-  memset (zerobuf, 0, 8);
-  for (i = ARM_A1_REGNUM; i <= ARM_PC_REGNUM; i++)
-    supply_register (regcache, i, &regs[i]);
-
-  for (; i < ARM_PS_REGNUM; i++)
-    supply_register (regcache, i, zerobuf);
-
-  /* Clear reserved bits bit 20 to bit 23.  */
-  cpsr &= 0xff0fffff;
-  supply_register (regcache, ARM_PS_REGNUM, &cpsr);
-}
-
-/* Collect NUM number of VFP registers from REGCACHE to buffer BUF.  */
-
-void
-arm_fill_vfpregset_num (struct regcache *regcache, void *buf, int num)
-{
-  int i, base;
-
-  gdb_assert (num == 16 || num == 32);
-
-  base = find_regno (regcache->tdesc, "d0");
-  for (i = 0; i < num; i++)
-    collect_register (regcache, base + i, (char *) buf + i * 8);
-
-  collect_register_by_name (regcache, "fpscr", (char *) buf + 32 * 8);
-}
-
-/* Supply NUM number of VFP registers contents, stored in BUF, to
-   REGCACHE.  */
-
-void
-arm_store_vfpregset_num (struct regcache *regcache, const void *buf, int num)
-{
-  int i, base;
-
-  gdb_assert (num == 16 || num == 32);
-
-  base = find_regno (regcache->tdesc, "d0");
-  for (i = 0; i < num; i++)
-    supply_register (regcache, base + i, (char *) buf + i * 8);
-
-  supply_register_by_name (regcache, "fpscr", (char *) buf + 32 * 8);
-}
-
-static void
-arm_fill_vfpregset (struct regcache *regcache, void *buf)
-{
-  arm_fill_vfpregset_num (regcache, buf, 32);
-}
-
-static void
-arm_store_vfpregset (struct regcache *regcache, const void *buf)
-{
-  arm_store_vfpregset_num (regcache, buf, 32);
-}
-
-/* Register sets with using PTRACE_GETREGSET.  */
-
-static struct regset_info aarch32_regsets[] = {
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS,
-    ARM_CORE_REGS_SIZE + ARM_INT_REGISTER_SIZE, GENERAL_REGS,
-    arm_fill_gregset, arm_store_gregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_VFP, ARM_VFP3_REGS_SIZE,
-    EXTENDED_REGS,
-    arm_fill_vfpregset, arm_store_vfpregset },
-  NULL_REGSET
-};
-
-static struct regsets_info aarch32_regsets_info =
-  {
-    aarch32_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-struct regs_info regs_info_aarch32 =
-  {
-    NULL, /* regset_bitmap */
-    NULL, /* usrregs */
-    &aarch32_regsets_info
-  };
-
-/* Returns 1 if the current instruction set is thumb, 0 otherwise.  */
-
-int
-arm_is_thumb_mode (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 1);
-  unsigned long cpsr;
-
-  collect_register_by_name (regcache, "cpsr", &cpsr);
-
-  if (cpsr & 0x20)
-    return 1;
-  else
-    return 0;
-}
-
-/* Returns 1 if there is a software breakpoint at location.  */
-
-int
-arm_breakpoint_at (CORE_ADDR where)
-{
-  if (arm_is_thumb_mode ())
-    {
-      /* Thumb mode.  */
-      unsigned short insn;
-
-      (*the_target->read_memory) (where, (unsigned char *) &insn, 2);
-      if (insn == thumb_breakpoint)
-	return 1;
-
-      if (insn == thumb2_breakpoint[0])
-	{
-	  (*the_target->read_memory) (where + 2, (unsigned char *) &insn, 2);
-	  if (insn == thumb2_breakpoint[1])
-	    return 1;
-	}
-    }
-  else
-    {
-      /* ARM mode.  */
-      unsigned long insn;
-
-      (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
-      if (insn == arm_abi_breakpoint)
-	return 1;
-
-      if (insn == arm_eabi_breakpoint)
-	return 1;
-    }
-
-  return 0;
-}
-
-/* Implementation of linux_target_ops method "breakpoint_kind_from_pc".
-
-   Determine the type and size of breakpoint to insert at PCPTR.  Uses the
-   program counter value to determine whether a 16-bit or 32-bit breakpoint
-   should be used.  It returns the breakpoint's kind, and adjusts the program
-   counter (if necessary) to point to the actual memory location where the
-   breakpoint should be inserted.  */
-
-int
-arm_breakpoint_kind_from_pc (CORE_ADDR *pcptr)
-{
-  if (IS_THUMB_ADDR (*pcptr))
-    {
-      gdb_byte buf[2];
-
-      *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
-
-      /* Check whether we are replacing a thumb2 32-bit instruction.  */
-      if (target_read_memory (*pcptr, buf, 2) == 0)
-	{
-	  unsigned short inst1 = 0;
-
-	  target_read_memory (*pcptr, (gdb_byte *) &inst1, 2);
-	  if (thumb_insn_size (inst1) == 4)
-	    return ARM_BP_KIND_THUMB2;
-	}
-      return ARM_BP_KIND_THUMB;
-    }
-  else
-    return ARM_BP_KIND_ARM;
-}
-
-/*  Implementation of the linux_target_ops method "sw_breakpoint_from_kind".  */
-
-const gdb_byte *
-arm_sw_breakpoint_from_kind (int kind , int *size)
-{
-  *size = arm_breakpoint_len;
-  /* Define an ARM-mode breakpoint; we only set breakpoints in the C
-     library, which is most likely to be ARM.  If the kernel supports
-     clone events, we will never insert a breakpoint, so even a Thumb
-     C library will work; so will mixing EABI/non-EABI gdbserver and
-     application.  */
-  switch (kind)
-    {
-      case ARM_BP_KIND_THUMB:
-	*size = thumb_breakpoint_len;
-	return (gdb_byte *) &thumb_breakpoint;
-      case ARM_BP_KIND_THUMB2:
-	*size = thumb2_breakpoint_len;
-	return (gdb_byte *) &thumb2_breakpoint;
-      case ARM_BP_KIND_ARM:
-	*size = arm_breakpoint_len;
-	return (const gdb_byte *) &arm_breakpoint;
-      default:
-       return NULL;
-    }
-  return NULL;
-}
-
-/* Implementation of the linux_target_ops method
-   "breakpoint_kind_from_current_state".  */
-
-int
-arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr)
-{
-  if (arm_is_thumb_mode ())
-    {
-      *pcptr = MAKE_THUMB_ADDR (*pcptr);
-      return arm_breakpoint_kind_from_pc (pcptr);
-    }
-  else
-    {
-      return arm_breakpoint_kind_from_pc (pcptr);
-    }
-}
-
-void
-initialize_low_arch_aarch32 (void)
-{
-  initialize_regsets_info (&aarch32_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-low.h ./gdb/gdbserver/linux-aarch32-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch32-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-/* Copyright (C) 1995-2020 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 GDBSERVER_LINUX_AARCH32_LOW_H
-#define GDBSERVER_LINUX_AARCH32_LOW_H
-
-extern struct regs_info regs_info_aarch32;
-
-void arm_fill_gregset (struct regcache *regcache, void *buf);
-void arm_store_gregset (struct regcache *regcache, const void *buf);
-void arm_fill_vfpregset_num (struct regcache *regcache, void *buf, int num);
-void arm_store_vfpregset_num (struct regcache *regcache, const void *buf,
-			      int num);
-
-int arm_breakpoint_kind_from_pc (CORE_ADDR *pcptr);
-const gdb_byte *arm_sw_breakpoint_from_kind (int kind , int *size);
-int arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr);
-int arm_breakpoint_at (CORE_ADDR where);
-
-void initialize_low_arch_aarch32 (void);
-
-void init_registers_arm_with_neon (void);
-int arm_is_thumb_mode (void);
-
-#endif /* GDBSERVER_LINUX_AARCH32_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-tdesc.c ./gdb/gdbserver/linux-aarch32-tdesc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-tdesc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch32-tdesc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,47 +0,0 @@
-/* Copyright (C) 2019-2020 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 "server.h"
-#include "tdesc.h"
-#include "arch/aarch32.h"
-#include <inttypes.h>
-
-static struct target_desc *tdesc_aarch32;
-
-/* See linux-aarch32-tdesc.h.  */
-
-const target_desc *
-aarch32_linux_read_description ()
-{
-  if (tdesc_aarch32 == nullptr)
-    {
-      tdesc_aarch32 = aarch32_create_target_description ();
-
-      static const char *expedite_regs[] = { "r11", "sp", "pc", 0 };
-      init_target_desc (tdesc_aarch32, expedite_regs);
-    }
-  return tdesc_aarch32;
-}
-
-/* See linux-aarch32-tdesc.h.  */
-
-bool
-is_aarch32_linux_description (const target_desc *tdesc)
-{
-  gdb_assert (tdesc != nullptr);
-  return tdesc == tdesc_aarch32;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-tdesc.h ./gdb/gdbserver/linux-aarch32-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch32-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch32-tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-/* Copyright (C) 2019-2020 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 GDBSERVER_LINUX_AARCH32_TDESC_H
-#define GDBSERVER_LINUX_AARCH32_TDESC_H
-
-/* Return the AArch32 target description.  */
-
-const target_desc * aarch32_linux_read_description ();
-
-/* Return true if TDESC is the AArch32 target description.  */
-
-bool is_aarch32_linux_description (const target_desc *tdesc);
-
-#endif /* linux-aarch32-tdesc.h.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-ipa.c ./gdb/gdbserver/linux-aarch64-ipa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-ipa.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch64-ipa.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,209 +0,0 @@
-/* GNU/Linux/AArch64 specific low level interface, for the in-process
-   agent library for GDB.
-
-   Copyright (C) 2015-2020 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 "server.h"
-#include <sys/mman.h>
-#include "tracepoint.h"
-#include <elf.h>
-#ifdef HAVE_GETAUXVAL
-#include <sys/auxv.h>
-#endif
-#include "linux-aarch64-tdesc.h"
-
-/* Each register saved by the jump pad is in a 16 byte cell.  */
-#define FT_CR_SIZE 16
-
-#define FT_CR_FPCR	0
-#define FT_CR_FPSR	1
-#define FT_CR_CPSR	2
-#define FT_CR_PC	3
-#define FT_CR_SP	4
-#define FT_CR_X0	5
-#define FT_CR_GPR(n)	(FT_CR_X0 + (n))
-#define FT_CR_FPR(n)	(FT_CR_GPR (31) + (n))
-
-/* Mapping between registers collected by the jump pad and GDB's register
-   array layout used by regcache.
-
-   See linux-aarch64-low.c (aarch64_install_fast_tracepoint_jump_pad) for
-   more details.  */
-
-static const int aarch64_ft_collect_regmap[] = {
-  FT_CR_GPR (0),
-  FT_CR_GPR (1),
-  FT_CR_GPR (2),
-  FT_CR_GPR (3),
-  FT_CR_GPR (4),
-  FT_CR_GPR (5),
-  FT_CR_GPR (6),
-  FT_CR_GPR (7),
-  FT_CR_GPR (8),
-  FT_CR_GPR (9),
-  FT_CR_GPR (10),
-  FT_CR_GPR (11),
-  FT_CR_GPR (12),
-  FT_CR_GPR (13),
-  FT_CR_GPR (14),
-  FT_CR_GPR (15),
-  FT_CR_GPR (16),
-  FT_CR_GPR (17),
-  FT_CR_GPR (18),
-  FT_CR_GPR (19),
-  FT_CR_GPR (20),
-  FT_CR_GPR (21),
-  FT_CR_GPR (22),
-  FT_CR_GPR (23),
-  FT_CR_GPR (24),
-  FT_CR_GPR (25),
-  FT_CR_GPR (26),
-  FT_CR_GPR (27),
-  FT_CR_GPR (28),
-  /* FP */
-  FT_CR_GPR (29),
-  /* LR */
-  FT_CR_GPR (30),
-  FT_CR_SP,
-  FT_CR_PC,
-  FT_CR_CPSR,
-  FT_CR_FPR (0),
-  FT_CR_FPR (1),
-  FT_CR_FPR (2),
-  FT_CR_FPR (3),
-  FT_CR_FPR (4),
-  FT_CR_FPR (5),
-  FT_CR_FPR (6),
-  FT_CR_FPR (7),
-  FT_CR_FPR (8),
-  FT_CR_FPR (9),
-  FT_CR_FPR (10),
-  FT_CR_FPR (11),
-  FT_CR_FPR (12),
-  FT_CR_FPR (13),
-  FT_CR_FPR (14),
-  FT_CR_FPR (15),
-  FT_CR_FPR (16),
-  FT_CR_FPR (17),
-  FT_CR_FPR (18),
-  FT_CR_FPR (19),
-  FT_CR_FPR (20),
-  FT_CR_FPR (21),
-  FT_CR_FPR (22),
-  FT_CR_FPR (23),
-  FT_CR_FPR (24),
-  FT_CR_FPR (25),
-  FT_CR_FPR (26),
-  FT_CR_FPR (27),
-  FT_CR_FPR (28),
-  FT_CR_FPR (29),
-  FT_CR_FPR (30),
-  FT_CR_FPR (31),
-  FT_CR_FPSR,
-  FT_CR_FPCR
-};
-
-#define AARCH64_NUM_FT_COLLECT_GREGS \
-  (sizeof (aarch64_ft_collect_regmap) / sizeof(aarch64_ft_collect_regmap[0]))
-
-/* Fill in REGCACHE with registers saved by the jump pad in BUF.  */
-
-void
-supply_fast_tracepoint_registers (struct regcache *regcache,
-				  const unsigned char *buf)
-{
-  int i;
-
-  for (i = 0; i < AARCH64_NUM_FT_COLLECT_GREGS; i++)
-    supply_register (regcache, i,
-		     ((char *) buf)
-		     + (aarch64_ft_collect_regmap[i] * FT_CR_SIZE));
-}
-
-ULONGEST
-get_raw_reg (const unsigned char *raw_regs, int regnum)
-{
-  if (regnum >= AARCH64_NUM_FT_COLLECT_GREGS)
-    return 0;
-
-  return *(ULONGEST *) (raw_regs
-			+ aarch64_ft_collect_regmap[regnum] * FT_CR_SIZE);
-}
-
-/* Return target_desc to use for IPA, given the tdesc index passed by
-   gdbserver.  Index is ignored, since we have only one tdesc
-   at the moment.  SVE and pauth not yet supported.  */
-
-const struct target_desc *
-get_ipa_tdesc (int idx)
-{
-  return aarch64_linux_read_description (0, false);
-}
-
-/* Allocate buffer for the jump pads.  The branch instruction has a reach
-   of +/- 128MiB, and the executable is loaded at 0x400000 (4MiB).
-   To maximize the area of executable that can use tracepoints, try
-   allocating at 0x400000 - size initially, decreasing until we hit
-   a free area.  */
-
-void *
-alloc_jump_pad_buffer (size_t size)
-{
-  uintptr_t addr;
-  uintptr_t exec_base = getauxval (AT_PHDR);
-  int pagesize;
-  void *res;
-
-  if (exec_base == 0)
-    exec_base = 0x400000;
-
-  pagesize = sysconf (_SC_PAGE_SIZE);
-  if (pagesize == -1)
-    perror_with_name ("sysconf");
-
-  addr = exec_base - size;
-
-  /* size should already be page-aligned, but this can't hurt.  */
-  addr &= ~(pagesize - 1);
-
-  /* Search for a free area.  If we hit 0, we're out of luck.  */
-  for (; addr; addr -= pagesize)
-    {
-      /* No MAP_FIXED - we don't want to zap someone's mapping.  */
-      res = mmap ((void *) addr, size,
-		  PROT_READ | PROT_WRITE | PROT_EXEC,
-		  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-      /* If we got what we wanted, return.  */
-      if ((uintptr_t) res == addr)
-	return res;
-
-      /* If we got a mapping, but at a wrong address, undo it.  */
-      if (res != MAP_FAILED)
-	munmap (res, size);
-    }
-
-  return NULL;
-}
-
-void
-initialize_low_tracepoint (void)
-{
-  /* SVE and pauth not yet supported.  */
-  aarch64_linux_read_description (0, false);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-low.c ./gdb/gdbserver/linux-aarch64-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch64-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,3098 +0,0 @@
-/* GNU/Linux/AArch64 specific low level interface, for the remote server for
-   GDB.
-
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
-   Contributed by ARM Ltd.
-
-   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 "server.h"
-#include "linux-low.h"
-#include "nat/aarch64-linux.h"
-#include "nat/aarch64-linux-hw-point.h"
-#include "arch/aarch64-insn.h"
-#include "linux-aarch32-low.h"
-#include "elf/common.h"
-#include "ax.h"
-#include "tracepoint.h"
-#include "debug.h"
-
-#include <signal.h>
-#include <sys/user.h>
-#include "nat/gdb_ptrace.h"
-#include <asm/ptrace.h>
-#include <inttypes.h>
-#include <endian.h>
-#include <sys/uio.h>
-
-#include "gdb_proc_service.h"
-#include "arch/aarch64.h"
-#include "linux-aarch32-tdesc.h"
-#include "linux-aarch64-tdesc.h"
-#include "nat/aarch64-sve-linux-ptrace.h"
-#include "tdesc.h"
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-/* Per-process arch-specific data we want to keep.  */
-
-struct arch_process_info
-{
-  /* Hardware breakpoint/watchpoint data.
-     The reason for them to be per-process rather than per-thread is
-     due to the lack of information in the gdbserver environment;
-     gdbserver is not told that whether a requested hardware
-     breakpoint/watchpoint is thread specific or not, so it has to set
-     each hw bp/wp for every thread in the current process.  The
-     higher level bp/wp management in gdb will resume a thread if a hw
-     bp/wp trap is not expected for it.  Since the hw bp/wp setting is
-     same for each thread, it is reasonable for the data to live here.
-     */
-  struct aarch64_debug_reg_state debug_reg_state;
-};
-
-/* Return true if the size of register 0 is 8 byte.  */
-
-static int
-is_64bit_tdesc (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
-  return register_size (regcache->tdesc, 0) == 8;
-}
-
-/* Return true if the regcache contains the number of SVE registers.  */
-
-static bool
-is_sve_tdesc (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
-  return tdesc_contains_feature (regcache->tdesc, "org.gnu.gdb.aarch64.sve");
-}
-
-static void
-aarch64_fill_gregset (struct regcache *regcache, void *buf)
-{
-  struct user_pt_regs *regset = (struct user_pt_regs *) buf;
-  int i;
-
-  for (i = 0; i < AARCH64_X_REGS_NUM; i++)
-    collect_register (regcache, AARCH64_X0_REGNUM + i, &regset->regs[i]);
-  collect_register (regcache, AARCH64_SP_REGNUM, &regset->sp);
-  collect_register (regcache, AARCH64_PC_REGNUM, &regset->pc);
-  collect_register (regcache, AARCH64_CPSR_REGNUM, &regset->pstate);
-}
-
-static void
-aarch64_store_gregset (struct regcache *regcache, const void *buf)
-{
-  const struct user_pt_regs *regset = (const struct user_pt_regs *) buf;
-  int i;
-
-  for (i = 0; i < AARCH64_X_REGS_NUM; i++)
-    supply_register (regcache, AARCH64_X0_REGNUM + i, &regset->regs[i]);
-  supply_register (regcache, AARCH64_SP_REGNUM, &regset->sp);
-  supply_register (regcache, AARCH64_PC_REGNUM, &regset->pc);
-  supply_register (regcache, AARCH64_CPSR_REGNUM, &regset->pstate);
-}
-
-static void
-aarch64_fill_fpregset (struct regcache *regcache, void *buf)
-{
-  struct user_fpsimd_state *regset = (struct user_fpsimd_state *) buf;
-  int i;
-
-  for (i = 0; i < AARCH64_V_REGS_NUM; i++)
-    collect_register (regcache, AARCH64_V0_REGNUM + i, &regset->vregs[i]);
-  collect_register (regcache, AARCH64_FPSR_REGNUM, &regset->fpsr);
-  collect_register (regcache, AARCH64_FPCR_REGNUM, &regset->fpcr);
-}
-
-static void
-aarch64_store_fpregset (struct regcache *regcache, const void *buf)
-{
-  const struct user_fpsimd_state *regset
-    = (const struct user_fpsimd_state *) buf;
-  int i;
-
-  for (i = 0; i < AARCH64_V_REGS_NUM; i++)
-    supply_register (regcache, AARCH64_V0_REGNUM + i, &regset->vregs[i]);
-  supply_register (regcache, AARCH64_FPSR_REGNUM, &regset->fpsr);
-  supply_register (regcache, AARCH64_FPCR_REGNUM, &regset->fpcr);
-}
-
-/* Store the pauth registers to regcache.  */
-
-static void
-aarch64_store_pauthregset (struct regcache *regcache, const void *buf)
-{
-  uint64_t *pauth_regset = (uint64_t *) buf;
-  int pauth_base = find_regno (regcache->tdesc, "pauth_dmask");
-
-  if (pauth_base == 0)
-    return;
-
-  supply_register (regcache, AARCH64_PAUTH_DMASK_REGNUM (pauth_base),
-		   &pauth_regset[0]);
-  supply_register (regcache, AARCH64_PAUTH_CMASK_REGNUM (pauth_base),
-		   &pauth_regset[1]);
-}
-
-/* Implementation of linux_target_ops method "get_pc".  */
-
-static CORE_ADDR
-aarch64_get_pc (struct regcache *regcache)
-{
-  if (register_size (regcache->tdesc, 0) == 8)
-    return linux_get_pc_64bit (regcache);
-  else
-    return linux_get_pc_32bit (regcache);
-}
-
-/* Implementation of linux_target_ops method "set_pc".  */
-
-static void
-aarch64_set_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  if (register_size (regcache->tdesc, 0) == 8)
-    linux_set_pc_64bit (regcache, pc);
-  else
-    linux_set_pc_32bit (regcache, pc);
-}
-
-#define aarch64_breakpoint_len 4
-
-/* AArch64 BRK software debug mode instruction.
-   This instruction needs to match gdb/aarch64-tdep.c
-   (aarch64_default_breakpoint).  */
-static const gdb_byte aarch64_breakpoint[] = {0x00, 0x00, 0x20, 0xd4};
-
-/* Implementation of linux_target_ops method "breakpoint_at".  */
-
-static int
-aarch64_breakpoint_at (CORE_ADDR where)
-{
-  if (is_64bit_tdesc ())
-    {
-      gdb_byte insn[aarch64_breakpoint_len];
-
-      (*the_target->read_memory) (where, (unsigned char *) &insn,
-				  aarch64_breakpoint_len);
-      if (memcmp (insn, aarch64_breakpoint, aarch64_breakpoint_len) == 0)
-	return 1;
-
-      return 0;
-    }
-  else
-    return arm_breakpoint_at (where);
-}
-
-static void
-aarch64_init_debug_reg_state (struct aarch64_debug_reg_state *state)
-{
-  int i;
-
-  for (i = 0; i < AARCH64_HBP_MAX_NUM; ++i)
-    {
-      state->dr_addr_bp[i] = 0;
-      state->dr_ctrl_bp[i] = 0;
-      state->dr_ref_count_bp[i] = 0;
-    }
-
-  for (i = 0; i < AARCH64_HWP_MAX_NUM; ++i)
-    {
-      state->dr_addr_wp[i] = 0;
-      state->dr_ctrl_wp[i] = 0;
-      state->dr_ref_count_wp[i] = 0;
-    }
-}
-
-/* Return the pointer to the debug register state structure in the
-   current process' arch-specific data area.  */
-
-struct aarch64_debug_reg_state *
-aarch64_get_debug_reg_state (pid_t pid)
-{
-  struct process_info *proc = find_process_pid (pid);
-
-  return &proc->priv->arch_private->debug_reg_state;
-}
-
-/* Implementation of linux_target_ops method "supports_z_point_type".  */
-
-static int
-aarch64_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-    case Z_PACKET_HW_BP:
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_READ_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-/* Implementation of linux_target_ops method "insert_point".
-
-   It actually only records the info of the to-be-inserted bp/wp;
-   the actual insertion will happen when threads are resumed.  */
-
-static int
-aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		      int len, struct raw_breakpoint *bp)
-{
-  int ret;
-  enum target_hw_bp_type targ_type;
-  struct aarch64_debug_reg_state *state
-    = aarch64_get_debug_reg_state (pid_of (current_thread));
-
-  if (show_debug_regs)
-    fprintf (stderr, "insert_point on entry (addr=0x%08lx, len=%d)\n",
-	     (unsigned long) addr, len);
-
-  /* Determine the type from the raw breakpoint type.  */
-  targ_type = raw_bkpt_type_to_target_hw_bp_type (type);
-
-  if (targ_type != hw_execute)
-    {
-      if (aarch64_linux_region_ok_for_watchpoint (addr, len))
-	ret = aarch64_handle_watchpoint (targ_type, addr, len,
-					 1 /* is_insert */, state);
-      else
-	ret = -1;
-    }
-  else
-    {
-      if (len == 3)
-	{
-	  /* LEN is 3 means the breakpoint is set on a 32-bit thumb
-	     instruction.   Set it to 2 to correctly encode length bit
-	     mask in hardware/watchpoint control register.  */
-	  len = 2;
-	}
-      ret = aarch64_handle_breakpoint (targ_type, addr, len,
-				       1 /* is_insert */, state);
-    }
-
-  if (show_debug_regs)
-    aarch64_show_debug_reg_state (state, "insert_point", addr, len,
-				  targ_type);
-
-  return ret;
-}
-
-/* Implementation of linux_target_ops method "remove_point".
-
-   It actually only records the info of the to-be-removed bp/wp,
-   the actual removal will be done when threads are resumed.  */
-
-static int
-aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		      int len, struct raw_breakpoint *bp)
-{
-  int ret;
-  enum target_hw_bp_type targ_type;
-  struct aarch64_debug_reg_state *state
-    = aarch64_get_debug_reg_state (pid_of (current_thread));
-
-  if (show_debug_regs)
-    fprintf (stderr, "remove_point on entry (addr=0x%08lx, len=%d)\n",
-	     (unsigned long) addr, len);
-
-  /* Determine the type from the raw breakpoint type.  */
-  targ_type = raw_bkpt_type_to_target_hw_bp_type (type);
-
-  /* Set up state pointers.  */
-  if (targ_type != hw_execute)
-    ret =
-      aarch64_handle_watchpoint (targ_type, addr, len, 0 /* is_insert */,
-				 state);
-  else
-    {
-      if (len == 3)
-	{
-	  /* LEN is 3 means the breakpoint is set on a 32-bit thumb
-	     instruction.   Set it to 2 to correctly encode length bit
-	     mask in hardware/watchpoint control register.  */
-	  len = 2;
-	}
-      ret = aarch64_handle_breakpoint (targ_type, addr, len,
-				       0 /* is_insert */,  state);
-    }
-
-  if (show_debug_regs)
-    aarch64_show_debug_reg_state (state, "remove_point", addr, len,
-				  targ_type);
-
-  return ret;
-}
-
-/* Implementation of linux_target_ops method "stopped_data_address".  */
-
-static CORE_ADDR
-aarch64_stopped_data_address (void)
-{
-  siginfo_t siginfo;
-  int pid, i;
-  struct aarch64_debug_reg_state *state;
-
-  pid = lwpid_of (current_thread);
-
-  /* Get the siginfo.  */
-  if (ptrace (PTRACE_GETSIGINFO, pid, NULL, &siginfo) != 0)
-    return (CORE_ADDR) 0;
-
-  /* Need to be a hardware breakpoint/watchpoint trap.  */
-  if (siginfo.si_signo != SIGTRAP
-      || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
-    return (CORE_ADDR) 0;
-
-  /* Check if the address matches any watched address.  */
-  state = aarch64_get_debug_reg_state (pid_of (current_thread));
-  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.  */
-	  return addr_orig;
-	}
-    }
-
-  return (CORE_ADDR) 0;
-}
-
-/* Implementation of linux_target_ops method "stopped_by_watchpoint".  */
-
-static int
-aarch64_stopped_by_watchpoint (void)
-{
-  if (aarch64_stopped_data_address () != 0)
-    return 1;
-  else
-    return 0;
-}
-
-/* Fetch the thread-local storage pointer for libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-		    lwpid_t lwpid, int idx, void **base)
-{
-  return aarch64_ps_get_thread_area (ph, lwpid, idx, base,
-				     is_64bit_tdesc ());
-}
-
-/* Implementation of linux_target_ops method "siginfo_fixup".  */
-
-static int
-aarch64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
-{
-  /* Is the inferior 32-bit?  If so, then fixup the siginfo object.  */
-  if (!is_64bit_tdesc ())
-    {
-      if (direction == 0)
-	aarch64_compat_siginfo_from_siginfo ((struct compat_siginfo *) inf,
-					     native);
-      else
-	aarch64_siginfo_from_compat_siginfo (native,
-					     (struct compat_siginfo *) inf);
-
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Implementation of linux_target_ops method "new_process".  */
-
-static struct arch_process_info *
-aarch64_linux_new_process (void)
-{
-  struct arch_process_info *info = XCNEW (struct arch_process_info);
-
-  aarch64_init_debug_reg_state (&info->debug_reg_state);
-
-  return info;
-}
-
-/* Implementation of linux_target_ops method "delete_process".  */
-
-static void
-aarch64_linux_delete_process (struct arch_process_info *info)
-{
-  xfree (info);
-}
-
-/* Implementation of linux_target_ops method "linux_new_fork".  */
-
-static void
-aarch64_linux_new_fork (struct process_info *parent,
-			struct process_info *child)
-{
-  /* These are allocated by linux_add_process.  */
-  gdb_assert (parent->priv != NULL
-	      && parent->priv->arch_private != NULL);
-  gdb_assert (child->priv != NULL
-	      && child->priv->arch_private != NULL);
-
-  /* Linux kernel before 2.6.33 commit
-     72f674d203cd230426437cdcf7dd6f681dad8b0d
-     will inherit hardware debug registers from parent
-     on fork/vfork/clone.  Newer Linux kernels create such tasks with
-     zeroed debug registers.
-
-     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.  The debug registers mirror will become zeroed
-     in the end before detaching the forked off process, thus making
-     this compatible with older Linux kernels too.  */
-
-  *child->priv->arch_private = *parent->priv->arch_private;
-}
-
-/* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h.  */
-#define AARCH64_HWCAP_PACA (1 << 30)
-
-/* Implementation of linux_target_ops method "arch_setup".  */
-
-static void
-aarch64_arch_setup (void)
-{
-  unsigned int machine;
-  int is_elf64;
-  int tid;
-
-  tid = lwpid_of (current_thread);
-
-  is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
-
-  if (is_elf64)
-    {
-      uint64_t vq = aarch64_sve_get_vq (tid);
-      unsigned long hwcap = linux_get_hwcap (8);
-      bool pauth_p = hwcap & AARCH64_HWCAP_PACA;
-
-      current_process ()->tdesc = aarch64_linux_read_description (vq, pauth_p);
-    }
-  else
-    current_process ()->tdesc = aarch32_linux_read_description ();
-
-  aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread));
-}
-
-/* Wrapper for aarch64_sve_regs_copy_to_reg_buf.  */
-
-static void
-aarch64_sve_regs_copy_to_regcache (struct regcache *regcache, const void *buf)
-{
-  return aarch64_sve_regs_copy_to_reg_buf (regcache, buf);
-}
-
-/* Wrapper for aarch64_sve_regs_copy_from_reg_buf.  */
-
-static void
-aarch64_sve_regs_copy_from_regcache (struct regcache *regcache, void *buf)
-{
-  return aarch64_sve_regs_copy_from_reg_buf (regcache, buf);
-}
-
-static struct regset_info aarch64_regsets[] =
-{
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS,
-    sizeof (struct user_pt_regs), GENERAL_REGS,
-    aarch64_fill_gregset, aarch64_store_gregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET,
-    sizeof (struct user_fpsimd_state), FP_REGS,
-    aarch64_fill_fpregset, aarch64_store_fpregset
-  },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK,
-    AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS,
-    NULL, aarch64_store_pauthregset },
-  NULL_REGSET
-};
-
-static struct regsets_info aarch64_regsets_info =
-  {
-    aarch64_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct regs_info regs_info_aarch64 =
-  {
-    NULL, /* regset_bitmap */
-    NULL, /* usrregs */
-    &aarch64_regsets_info,
-  };
-
-static struct regset_info aarch64_sve_regsets[] =
-{
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS,
-    sizeof (struct user_pt_regs), GENERAL_REGS,
-    aarch64_fill_gregset, aarch64_store_gregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_SVE,
-    SVE_PT_SIZE (AARCH64_MAX_SVE_VQ, SVE_PT_REGS_SVE), EXTENDED_REGS,
-    aarch64_sve_regs_copy_from_regcache, aarch64_sve_regs_copy_to_regcache
-  },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK,
-    AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS,
-    NULL, aarch64_store_pauthregset },
-  NULL_REGSET
-};
-
-static struct regsets_info aarch64_sve_regsets_info =
-  {
-    aarch64_sve_regsets, /* regsets.  */
-    0, /* num_regsets.  */
-    NULL, /* disabled_regsets.  */
-  };
-
-static struct regs_info regs_info_aarch64_sve =
-  {
-    NULL, /* regset_bitmap.  */
-    NULL, /* usrregs.  */
-    &aarch64_sve_regsets_info,
-  };
-
-/* Implementation of linux_target_ops method "regs_info".  */
-
-static const struct regs_info *
-aarch64_regs_info (void)
-{
-  if (!is_64bit_tdesc ())
-    return &regs_info_aarch32;
-
-  if (is_sve_tdesc ())
-    return &regs_info_aarch64_sve;
-
-  return &regs_info_aarch64;
-}
-
-/* Implementation of linux_target_ops method "supports_tracepoints".  */
-
-static int
-aarch64_supports_tracepoints (void)
-{
-  if (current_thread == NULL)
-    return 1;
-  else
-    {
-      /* We don't support tracepoints on aarch32 now.  */
-      return is_64bit_tdesc ();
-    }
-}
-
-/* Implementation of linux_target_ops method "get_thread_area".  */
-
-static int
-aarch64_get_thread_area (int lwpid, CORE_ADDR *addrp)
-{
-  struct iovec iovec;
-  uint64_t reg;
-
-  iovec.iov_base = &reg;
-  iovec.iov_len = sizeof (reg);
-
-  if (ptrace (PTRACE_GETREGSET, lwpid, NT_ARM_TLS, &iovec) != 0)
-    return -1;
-
-  *addrp = reg;
-
-  return 0;
-}
-
-/* Implementation of linux_target_ops method "get_syscall_trapinfo".  */
-
-static void
-aarch64_get_syscall_trapinfo (struct regcache *regcache, int *sysno)
-{
-  int use_64bit = register_size (regcache->tdesc, 0) == 8;
-
-  if (use_64bit)
-    {
-      long l_sysno;
-
-      collect_register_by_name (regcache, "x8", &l_sysno);
-      *sysno = (int) l_sysno;
-    }
-  else
-    collect_register_by_name (regcache, "r7", sysno);
-}
-
-/* List of condition codes that we need.  */
-
-enum aarch64_condition_codes
-{
-  EQ = 0x0,
-  NE = 0x1,
-  LO = 0x3,
-  GE = 0xa,
-  LT = 0xb,
-  GT = 0xc,
-  LE = 0xd,
-};
-
-enum aarch64_operand_type
-{
-  OPERAND_IMMEDIATE,
-  OPERAND_REGISTER,
-};
-
-/* Representation of an operand.  At this time, it only supports register
-   and immediate types.  */
-
-struct aarch64_operand
-{
-  /* Type of the operand.  */
-  enum aarch64_operand_type type;
-
-  /* Value of the operand according to the type.  */
-  union
-    {
-      uint32_t imm;
-      struct aarch64_register reg;
-    };
-};
-
-/* List of registers that we are currently using, we can add more here as
-   we need to use them.  */
-
-/* General purpose scratch registers (64 bit).  */
-static const struct aarch64_register x0 = { 0, 1 };
-static const struct aarch64_register x1 = { 1, 1 };
-static const struct aarch64_register x2 = { 2, 1 };
-static const struct aarch64_register x3 = { 3, 1 };
-static const struct aarch64_register x4 = { 4, 1 };
-
-/* General purpose scratch registers (32 bit).  */
-static const struct aarch64_register w0 = { 0, 0 };
-static const struct aarch64_register w2 = { 2, 0 };
-
-/* Intra-procedure scratch registers.  */
-static const struct aarch64_register ip0 = { 16, 1 };
-
-/* Special purpose registers.  */
-static const struct aarch64_register fp = { 29, 1 };
-static const struct aarch64_register lr = { 30, 1 };
-static const struct aarch64_register sp = { 31, 1 };
-static const struct aarch64_register xzr = { 31, 1 };
-
-/* Dynamically allocate a new register.  If we know the register
-   statically, we should make it a global as above instead of using this
-   helper function.  */
-
-static struct aarch64_register
-aarch64_register (unsigned num, int is64)
-{
-  return (struct aarch64_register) { num, is64 };
-}
-
-/* Helper function to create a register operand, for instructions with
-   different types of operands.
-
-   For example:
-   p += emit_mov (p, x0, register_operand (x1));  */
-
-static struct aarch64_operand
-register_operand (struct aarch64_register reg)
-{
-  struct aarch64_operand operand;
-
-  operand.type = OPERAND_REGISTER;
-  operand.reg = reg;
-
-  return operand;
-}
-
-/* Helper function to create an immediate operand, for instructions with
-   different types of operands.
-
-   For example:
-   p += emit_mov (p, x0, immediate_operand (12));  */
-
-static struct aarch64_operand
-immediate_operand (uint32_t imm)
-{
-  struct aarch64_operand operand;
-
-  operand.type = OPERAND_IMMEDIATE;
-  operand.imm = imm;
-
-  return operand;
-}
-
-/* Helper function to create an offset memory operand.
-
-   For example:
-   p += emit_ldr (p, x0, sp, offset_memory_operand (16));  */
-
-static struct aarch64_memory_operand
-offset_memory_operand (int32_t offset)
-{
-  return (struct aarch64_memory_operand) { MEMORY_OPERAND_OFFSET, offset };
-}
-
-/* Helper function to create a pre-index memory operand.
-
-   For example:
-   p += emit_ldr (p, x0, sp, preindex_memory_operand (16));  */
-
-static struct aarch64_memory_operand
-preindex_memory_operand (int32_t index)
-{
-  return (struct aarch64_memory_operand) { MEMORY_OPERAND_PREINDEX, index };
-}
-
-/* Helper function to create a post-index memory operand.
-
-   For example:
-   p += emit_ldr (p, x0, sp, postindex_memory_operand (16));  */
-
-static struct aarch64_memory_operand
-postindex_memory_operand (int32_t index)
-{
-  return (struct aarch64_memory_operand) { MEMORY_OPERAND_POSTINDEX, index };
-}
-
-/* System control registers.  These special registers can be written and
-   read with the MRS and MSR instructions.
-
-   - NZCV: Condition flags.  GDB refers to this register under the CPSR
-	   name.
-   - FPSR: Floating-point status register.
-   - FPCR: Floating-point control registers.
-   - TPIDR_EL0: Software thread ID register.  */
-
-enum aarch64_system_control_registers
-{
-  /*          op0           op1           crn          crm          op2  */
-  NZCV =      (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x2 << 3) | 0x0,
-  FPSR =      (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x4 << 3) | 0x1,
-  FPCR =      (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x4 << 3) | 0x0,
-  TPIDR_EL0 = (0x1 << 14) | (0x3 << 11) | (0xd << 7) | (0x0 << 3) | 0x2
-};
-
-/* Write a BLR instruction into *BUF.
-
-     BLR rn
-
-   RN is the register to branch to.  */
-
-static int
-emit_blr (uint32_t *buf, struct aarch64_register rn)
-{
-  return aarch64_emit_insn (buf, BLR | ENCODE (rn.num, 5, 5));
-}
-
-/* Write a RET instruction into *BUF.
-
-     RET xn
-
-   RN is the register to branch to.  */
-
-static int
-emit_ret (uint32_t *buf, struct aarch64_register rn)
-{
-  return aarch64_emit_insn (buf, RET | ENCODE (rn.num, 5, 5));
-}
-
-static int
-emit_load_store_pair (uint32_t *buf, enum aarch64_opcodes opcode,
-		      struct aarch64_register rt,
-		      struct aarch64_register rt2,
-		      struct aarch64_register rn,
-		      struct aarch64_memory_operand operand)
-{
-  uint32_t opc;
-  uint32_t pre_index;
-  uint32_t write_back;
-
-  if (rt.is64)
-    opc = ENCODE (2, 2, 30);
-  else
-    opc = ENCODE (0, 2, 30);
-
-  switch (operand.type)
-    {
-    case MEMORY_OPERAND_OFFSET:
-      {
-	pre_index = ENCODE (1, 1, 24);
-	write_back = ENCODE (0, 1, 23);
-	break;
-      }
-    case MEMORY_OPERAND_POSTINDEX:
-      {
-	pre_index = ENCODE (0, 1, 24);
-	write_back = ENCODE (1, 1, 23);
-	break;
-      }
-    case MEMORY_OPERAND_PREINDEX:
-      {
-	pre_index = ENCODE (1, 1, 24);
-	write_back = ENCODE (1, 1, 23);
-	break;
-      }
-    default:
-      return 0;
-    }
-
-  return aarch64_emit_insn (buf, opcode | opc | pre_index | write_back
-			    | ENCODE (operand.index >> 3, 7, 15)
-			    | ENCODE (rt2.num, 5, 10)
-			    | ENCODE (rn.num, 5, 5) | ENCODE (rt.num, 5, 0));
-}
-
-/* Write a STP instruction into *BUF.
-
-     STP rt, rt2, [rn, #offset]
-     STP rt, rt2, [rn, #index]!
-     STP rt, rt2, [rn], #index
-
-   RT and RT2 are the registers to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to a
-   -512 .. 504 range (7 bits << 3).  */
-
-static int
-emit_stp (uint32_t *buf, struct aarch64_register rt,
-	  struct aarch64_register rt2, struct aarch64_register rn,
-	  struct aarch64_memory_operand operand)
-{
-  return emit_load_store_pair (buf, STP, rt, rt2, rn, operand);
-}
-
-/* Write a LDP instruction into *BUF.
-
-     LDP rt, rt2, [rn, #offset]
-     LDP rt, rt2, [rn, #index]!
-     LDP rt, rt2, [rn], #index
-
-   RT and RT2 are the registers to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to a
-   -512 .. 504 range (7 bits << 3).  */
-
-static int
-emit_ldp (uint32_t *buf, struct aarch64_register rt,
-	  struct aarch64_register rt2, struct aarch64_register rn,
-	  struct aarch64_memory_operand operand)
-{
-  return emit_load_store_pair (buf, LDP, rt, rt2, rn, operand);
-}
-
-/* Write a LDP (SIMD&VFP) instruction using Q registers into *BUF.
-
-     LDP qt, qt2, [rn, #offset]
-
-   RT and RT2 are the Q registers to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to
-   -1024 .. 1008 range (7 bits << 4).  */
-
-static int
-emit_ldp_q_offset (uint32_t *buf, unsigned rt, unsigned rt2,
-		   struct aarch64_register rn, int32_t offset)
-{
-  uint32_t opc = ENCODE (2, 2, 30);
-  uint32_t pre_index = ENCODE (1, 1, 24);
-
-  return aarch64_emit_insn (buf, LDP_SIMD_VFP | opc | pre_index
-			    | ENCODE (offset >> 4, 7, 15)
-			    | ENCODE (rt2, 5, 10)
-			    | ENCODE (rn.num, 5, 5) | ENCODE (rt, 5, 0));
-}
-
-/* Write a STP (SIMD&VFP) instruction using Q registers into *BUF.
-
-     STP qt, qt2, [rn, #offset]
-
-   RT and RT2 are the Q registers to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to
-   -1024 .. 1008 range (7 bits << 4).  */
-
-static int
-emit_stp_q_offset (uint32_t *buf, unsigned rt, unsigned rt2,
-		   struct aarch64_register rn, int32_t offset)
-{
-  uint32_t opc = ENCODE (2, 2, 30);
-  uint32_t pre_index = ENCODE (1, 1, 24);
-
-  return aarch64_emit_insn (buf, STP_SIMD_VFP | opc | pre_index
-			    | ENCODE (offset >> 4, 7, 15)
-			    | ENCODE (rt2, 5, 10)
-			    | ENCODE (rn.num, 5, 5) | ENCODE (rt, 5, 0));
-}
-
-/* Write a LDRH instruction into *BUF.
-
-     LDRH wt, [xn, #offset]
-     LDRH wt, [xn, #index]!
-     LDRH wt, [xn], #index
-
-   RT is the register to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to
-   0 .. 32760 range (12 bits << 3).  */
-
-static int
-emit_ldrh (uint32_t *buf, struct aarch64_register rt,
-	   struct aarch64_register rn,
-	   struct aarch64_memory_operand operand)
-{
-  return aarch64_emit_load_store (buf, 1, LDR, rt, rn, operand);
-}
-
-/* Write a LDRB instruction into *BUF.
-
-     LDRB wt, [xn, #offset]
-     LDRB wt, [xn, #index]!
-     LDRB wt, [xn], #index
-
-   RT is the register to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to
-   0 .. 32760 range (12 bits << 3).  */
-
-static int
-emit_ldrb (uint32_t *buf, struct aarch64_register rt,
-	   struct aarch64_register rn,
-	   struct aarch64_memory_operand operand)
-{
-  return aarch64_emit_load_store (buf, 0, LDR, rt, rn, operand);
-}
-
-
-
-/* Write a STR instruction into *BUF.
-
-     STR rt, [rn, #offset]
-     STR rt, [rn, #index]!
-     STR rt, [rn], #index
-
-   RT is the register to store.
-   RN is the base address register.
-   OFFSET is the immediate to add to the base address.  It is limited to
-   0 .. 32760 range (12 bits << 3).  */
-
-static int
-emit_str (uint32_t *buf, struct aarch64_register rt,
-	  struct aarch64_register rn,
-	  struct aarch64_memory_operand operand)
-{
-  return aarch64_emit_load_store (buf, rt.is64 ? 3 : 2, STR, rt, rn, operand);
-}
-
-/* Helper function emitting an exclusive load or store instruction.  */
-
-static int
-emit_load_store_exclusive (uint32_t *buf, uint32_t size,
-			   enum aarch64_opcodes opcode,
-			   struct aarch64_register rs,
-			   struct aarch64_register rt,
-			   struct aarch64_register rt2,
-			   struct aarch64_register rn)
-{
-  return aarch64_emit_insn (buf, opcode | ENCODE (size, 2, 30)
-			    | ENCODE (rs.num, 5, 16) | ENCODE (rt2.num, 5, 10)
-			    | ENCODE (rn.num, 5, 5) | ENCODE (rt.num, 5, 0));
-}
-
-/* Write a LAXR instruction into *BUF.
-
-     LDAXR rt, [xn]
-
-   RT is the destination register.
-   RN is the base address register.  */
-
-static int
-emit_ldaxr (uint32_t *buf, struct aarch64_register rt,
-	    struct aarch64_register rn)
-{
-  return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, LDAXR, xzr, rt,
-				    xzr, rn);
-}
-
-/* Write a STXR instruction into *BUF.
-
-     STXR ws, rt, [xn]
-
-   RS is the result register, it indicates if the store succeeded or not.
-   RT is the destination register.
-   RN is the base address register.  */
-
-static int
-emit_stxr (uint32_t *buf, struct aarch64_register rs,
-	   struct aarch64_register rt, struct aarch64_register rn)
-{
-  return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, STXR, rs, rt,
-				    xzr, rn);
-}
-
-/* Write a STLR instruction into *BUF.
-
-     STLR rt, [xn]
-
-   RT is the register to store.
-   RN is the base address register.  */
-
-static int
-emit_stlr (uint32_t *buf, struct aarch64_register rt,
-	   struct aarch64_register rn)
-{
-  return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, STLR, xzr, rt,
-				    xzr, rn);
-}
-
-/* Helper function for data processing instructions with register sources.  */
-
-static int
-emit_data_processing_reg (uint32_t *buf, uint32_t opcode,
-			  struct aarch64_register rd,
-			  struct aarch64_register rn,
-			  struct aarch64_register rm)
-{
-  uint32_t size = ENCODE (rd.is64, 1, 31);
-
-  return aarch64_emit_insn (buf, opcode | size | ENCODE (rm.num, 5, 16)
-			    | ENCODE (rn.num, 5, 5) | ENCODE (rd.num, 5, 0));
-}
-
-/* Helper function for data processing instructions taking either a register
-   or an immediate.  */
-
-static int
-emit_data_processing (uint32_t *buf, enum aarch64_opcodes opcode,
-		      struct aarch64_register rd,
-		      struct aarch64_register rn,
-		      struct aarch64_operand operand)
-{
-  uint32_t size = ENCODE (rd.is64, 1, 31);
-  /* The opcode is different for register and immediate source operands.  */
-  uint32_t operand_opcode;
-
-  if (operand.type == OPERAND_IMMEDIATE)
-    {
-      /* xxx1 000x xxxx xxxx xxxx xxxx xxxx xxxx */
-      operand_opcode = ENCODE (8, 4, 25);
-
-      return aarch64_emit_insn (buf, opcode | operand_opcode | size
-				| ENCODE (operand.imm, 12, 10)
-				| ENCODE (rn.num, 5, 5)
-				| ENCODE (rd.num, 5, 0));
-    }
-  else
-    {
-      /* xxx0 101x xxxx xxxx xxxx xxxx xxxx xxxx */
-      operand_opcode = ENCODE (5, 4, 25);
-
-      return emit_data_processing_reg (buf, opcode | operand_opcode, rd,
-				       rn, operand.reg);
-    }
-}
-
-/* Write an ADD instruction into *BUF.
-
-     ADD rd, rn, #imm
-     ADD rd, rn, rm
-
-   This function handles both an immediate and register add.
-
-   RD is the destination register.
-   RN is the input register.
-   OPERAND is the source operand, either of type OPERAND_IMMEDIATE or
-   OPERAND_REGISTER.  */
-
-static int
-emit_add (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_operand operand)
-{
-  return emit_data_processing (buf, ADD, rd, rn, operand);
-}
-
-/* Write a SUB instruction into *BUF.
-
-     SUB rd, rn, #imm
-     SUB rd, rn, rm
-
-   This function handles both an immediate and register sub.
-
-   RD is the destination register.
-   RN is the input register.
-   IMM is the immediate to substract to RN.  */
-
-static int
-emit_sub (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_operand operand)
-{
-  return emit_data_processing (buf, SUB, rd, rn, operand);
-}
-
-/* Write a MOV instruction into *BUF.
-
-     MOV rd, #imm
-     MOV rd, rm
-
-   This function handles both a wide immediate move and a register move,
-   with the condition that the source register is not xzr.  xzr and the
-   stack pointer share the same encoding and this function only supports
-   the stack pointer.
-
-   RD is the destination register.
-   OPERAND is the source operand, either of type OPERAND_IMMEDIATE or
-   OPERAND_REGISTER.  */
-
-static int
-emit_mov (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_operand operand)
-{
-  if (operand.type == OPERAND_IMMEDIATE)
-    {
-      uint32_t size = ENCODE (rd.is64, 1, 31);
-      /* Do not shift the immediate.  */
-      uint32_t shift = ENCODE (0, 2, 21);
-
-      return aarch64_emit_insn (buf, MOV | size | shift
-				| ENCODE (operand.imm, 16, 5)
-				| ENCODE (rd.num, 5, 0));
-    }
-  else
-    return emit_add (buf, rd, operand.reg, immediate_operand (0));
-}
-
-/* Write a MOVK instruction into *BUF.
-
-     MOVK rd, #imm, lsl #shift
-
-   RD is the destination register.
-   IMM is the immediate.
-   SHIFT is the logical shift left to apply to IMM.   */
-
-static int
-emit_movk (uint32_t *buf, struct aarch64_register rd, uint32_t imm,
-	   unsigned shift)
-{
-  uint32_t size = ENCODE (rd.is64, 1, 31);
-
-  return aarch64_emit_insn (buf, MOVK | size | ENCODE (shift, 2, 21) |
-			    ENCODE (imm, 16, 5) | ENCODE (rd.num, 5, 0));
-}
-
-/* Write instructions into *BUF in order to move ADDR into a register.
-   ADDR can be a 64-bit value.
-
-   This function will emit a series of MOV and MOVK instructions, such as:
-
-     MOV  xd, #(addr)
-     MOVK xd, #(addr >> 16), lsl #16
-     MOVK xd, #(addr >> 32), lsl #32
-     MOVK xd, #(addr >> 48), lsl #48  */
-
-static int
-emit_mov_addr (uint32_t *buf, struct aarch64_register rd, CORE_ADDR addr)
-{
-  uint32_t *p = buf;
-
-  /* The MOV (wide immediate) instruction clears to top bits of the
-     register.  */
-  p += emit_mov (p, rd, immediate_operand (addr & 0xffff));
-
-  if ((addr >> 16) != 0)
-    p += emit_movk (p, rd, (addr >> 16) & 0xffff, 1);
-  else
-    return p - buf;
-
-  if ((addr >> 32) != 0)
-    p += emit_movk (p, rd, (addr >> 32) & 0xffff, 2);
-  else
-    return p - buf;
-
-  if ((addr >> 48) != 0)
-    p += emit_movk (p, rd, (addr >> 48) & 0xffff, 3);
-
-  return p - buf;
-}
-
-/* Write a SUBS instruction into *BUF.
-
-     SUBS rd, rn, rm
-
-   This instruction update the condition flags.
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_subs (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, struct aarch64_operand operand)
-{
-  return emit_data_processing (buf, SUBS, rd, rn, operand);
-}
-
-/* Write a CMP instruction into *BUF.
-
-     CMP rn, rm
-
-   This instruction is an alias of SUBS xzr, rn, rm.
-
-   RN and RM are the registers to compare.  */
-
-static int
-emit_cmp (uint32_t *buf, struct aarch64_register rn,
-	      struct aarch64_operand operand)
-{
-  return emit_subs (buf, xzr, rn, operand);
-}
-
-/* Write a AND instruction into *BUF.
-
-     AND rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_and (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, AND, rd, rn, rm);
-}
-
-/* Write a ORR instruction into *BUF.
-
-     ORR rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_orr (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, ORR, rd, rn, rm);
-}
-
-/* Write a ORN instruction into *BUF.
-
-     ORN rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_orn (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, ORN, rd, rn, rm);
-}
-
-/* Write a EOR instruction into *BUF.
-
-     EOR rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_eor (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, EOR, rd, rn, rm);
-}
-
-/* Write a MVN instruction into *BUF.
-
-     MVN rd, rm
-
-   This is an alias for ORN rd, xzr, rm.
-
-   RD is the destination register.
-   RM is the source register.  */
-
-static int
-emit_mvn (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rm)
-{
-  return emit_orn (buf, rd, xzr, rm);
-}
-
-/* Write a LSLV instruction into *BUF.
-
-     LSLV rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_lslv (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, LSLV, rd, rn, rm);
-}
-
-/* Write a LSRV instruction into *BUF.
-
-     LSRV rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_lsrv (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, LSRV, rd, rn, rm);
-}
-
-/* Write a ASRV instruction into *BUF.
-
-     ASRV rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_asrv (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, ASRV, rd, rn, rm);
-}
-
-/* Write a MUL instruction into *BUF.
-
-     MUL rd, rn, rm
-
-   RD is the destination register.
-   RN and RM are the source registers.  */
-
-static int
-emit_mul (uint32_t *buf, struct aarch64_register rd,
-	  struct aarch64_register rn, struct aarch64_register rm)
-{
-  return emit_data_processing_reg (buf, MUL, rd, rn, rm);
-}
-
-/* Write a MRS instruction into *BUF.  The register size is 64-bit.
-
-     MRS xt, system_reg
-
-   RT is the destination register.
-   SYSTEM_REG is special purpose register to read.  */
-
-static int
-emit_mrs (uint32_t *buf, struct aarch64_register rt,
-	  enum aarch64_system_control_registers system_reg)
-{
-  return aarch64_emit_insn (buf, MRS | ENCODE (system_reg, 15, 5)
-			    | ENCODE (rt.num, 5, 0));
-}
-
-/* Write a MSR instruction into *BUF.  The register size is 64-bit.
-
-     MSR system_reg, xt
-
-   SYSTEM_REG is special purpose register to write.
-   RT is the input register.  */
-
-static int
-emit_msr (uint32_t *buf, enum aarch64_system_control_registers system_reg,
-	  struct aarch64_register rt)
-{
-  return aarch64_emit_insn (buf, MSR | ENCODE (system_reg, 15, 5)
-			    | ENCODE (rt.num, 5, 0));
-}
-
-/* Write a SEVL instruction into *BUF.
-
-   This is a hint instruction telling the hardware to trigger an event.  */
-
-static int
-emit_sevl (uint32_t *buf)
-{
-  return aarch64_emit_insn (buf, SEVL);
-}
-
-/* Write a WFE instruction into *BUF.
-
-   This is a hint instruction telling the hardware to wait for an event.  */
-
-static int
-emit_wfe (uint32_t *buf)
-{
-  return aarch64_emit_insn (buf, WFE);
-}
-
-/* Write a SBFM instruction into *BUF.
-
-     SBFM rd, rn, #immr, #imms
-
-   This instruction moves the bits from #immr to #imms into the
-   destination, sign extending the result.
-
-   RD is the destination register.
-   RN is the source register.
-   IMMR is the bit number to start at (least significant bit).
-   IMMS is the bit number to stop at (most significant bit).  */
-
-static int
-emit_sbfm (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, uint32_t immr, uint32_t imms)
-{
-  uint32_t size = ENCODE (rd.is64, 1, 31);
-  uint32_t n = ENCODE (rd.is64, 1, 22);
-
-  return aarch64_emit_insn (buf, SBFM | size | n | ENCODE (immr, 6, 16)
-			    | ENCODE (imms, 6, 10) | ENCODE (rn.num, 5, 5)
-			    | ENCODE (rd.num, 5, 0));
-}
-
-/* Write a SBFX instruction into *BUF.
-
-     SBFX rd, rn, #lsb, #width
-
-   This instruction moves #width bits from #lsb into the destination, sign
-   extending the result.  This is an alias for:
-
-     SBFM rd, rn, #lsb, #(lsb + width - 1)
-
-   RD is the destination register.
-   RN is the source register.
-   LSB is the bit number to start at (least significant bit).
-   WIDTH is the number of bits to move.  */
-
-static int
-emit_sbfx (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, uint32_t lsb, uint32_t width)
-{
-  return emit_sbfm (buf, rd, rn, lsb, lsb + width - 1);
-}
-
-/* Write a UBFM instruction into *BUF.
-
-     UBFM rd, rn, #immr, #imms
-
-   This instruction moves the bits from #immr to #imms into the
-   destination, extending the result with zeros.
-
-   RD is the destination register.
-   RN is the source register.
-   IMMR is the bit number to start at (least significant bit).
-   IMMS is the bit number to stop at (most significant bit).  */
-
-static int
-emit_ubfm (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, uint32_t immr, uint32_t imms)
-{
-  uint32_t size = ENCODE (rd.is64, 1, 31);
-  uint32_t n = ENCODE (rd.is64, 1, 22);
-
-  return aarch64_emit_insn (buf, UBFM | size | n | ENCODE (immr, 6, 16)
-			    | ENCODE (imms, 6, 10) | ENCODE (rn.num, 5, 5)
-			    | ENCODE (rd.num, 5, 0));
-}
-
-/* Write a UBFX instruction into *BUF.
-
-     UBFX rd, rn, #lsb, #width
-
-   This instruction moves #width bits from #lsb into the destination,
-   extending the result with zeros.  This is an alias for:
-
-     UBFM rd, rn, #lsb, #(lsb + width - 1)
-
-   RD is the destination register.
-   RN is the source register.
-   LSB is the bit number to start at (least significant bit).
-   WIDTH is the number of bits to move.  */
-
-static int
-emit_ubfx (uint32_t *buf, struct aarch64_register rd,
-	   struct aarch64_register rn, uint32_t lsb, uint32_t width)
-{
-  return emit_ubfm (buf, rd, rn, lsb, lsb + width - 1);
-}
-
-/* Write a CSINC instruction into *BUF.
-
-     CSINC rd, rn, rm, cond
-
-   This instruction conditionally increments rn or rm and places the result
-   in rd.  rn is chosen is the condition is true.
-
-   RD is the destination register.
-   RN and RM are the source registers.
-   COND is the encoded condition.  */
-
-static int
-emit_csinc (uint32_t *buf, struct aarch64_register rd,
-	    struct aarch64_register rn, struct aarch64_register rm,
-	    unsigned cond)
-{
-  uint32_t size = ENCODE (rd.is64, 1, 31);
-
-  return aarch64_emit_insn (buf, CSINC | size | ENCODE (rm.num, 5, 16)
-			    | ENCODE (cond, 4, 12) | ENCODE (rn.num, 5, 5)
-			    | ENCODE (rd.num, 5, 0));
-}
-
-/* Write a CSET instruction into *BUF.
-
-     CSET rd, cond
-
-   This instruction conditionally write 1 or 0 in the destination register.
-   1 is written if the condition is true.  This is an alias for:
-
-     CSINC rd, xzr, xzr, !cond
-
-   Note that the condition needs to be inverted.
-
-   RD is the destination register.
-   RN and RM are the source registers.
-   COND is the encoded condition.  */
-
-static int
-emit_cset (uint32_t *buf, struct aarch64_register rd, unsigned cond)
-{
-  /* The least significant bit of the condition needs toggling in order to
-     invert it.  */
-  return emit_csinc (buf, rd, xzr, xzr, cond ^ 0x1);
-}
-
-/* Write LEN instructions from BUF into the inferior memory at *TO.
-
-   Note instructions are always little endian on AArch64, unlike data.  */
-
-static void
-append_insns (CORE_ADDR *to, size_t len, const uint32_t *buf)
-{
-  size_t byte_len = len * sizeof (uint32_t);
-#if (__BYTE_ORDER == __BIG_ENDIAN)
-  uint32_t *le_buf = (uint32_t *) xmalloc (byte_len);
-  size_t i;
-
-  for (i = 0; i < len; i++)
-    le_buf[i] = htole32 (buf[i]);
-
-  target_write_memory (*to, (const unsigned char *) le_buf, byte_len);
-
-  xfree (le_buf);
-#else
-  target_write_memory (*to, (const unsigned char *) buf, byte_len);
-#endif
-
-  *to += byte_len;
-}
-
-/* Sub-class of struct aarch64_insn_data, store information of
-   instruction relocation for fast tracepoint.  Visitor can
-   relocate an instruction from BASE.INSN_ADDR to NEW_ADDR and save
-   the relocated instructions in buffer pointed by INSN_PTR.  */
-
-struct aarch64_insn_relocation_data
-{
-  struct aarch64_insn_data base;
-
-  /* The new address the instruction is relocated to.  */
-  CORE_ADDR new_addr;
-  /* Pointer to the buffer of relocated instruction(s).  */
-  uint32_t *insn_ptr;
-};
-
-/* Implementation of aarch64_insn_visitor method "b".  */
-
-static void
-aarch64_ftrace_insn_reloc_b (const int is_bl, const int32_t offset,
-			     struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-  int64_t new_offset
-    = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset;
-
-  if (can_encode_int32 (new_offset, 28))
-    insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, is_bl, new_offset);
-}
-
-/* Implementation of aarch64_insn_visitor method "b_cond".  */
-
-static void
-aarch64_ftrace_insn_reloc_b_cond (const unsigned cond, const int32_t offset,
-				  struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-  int64_t new_offset
-    = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset;
-
-  if (can_encode_int32 (new_offset, 21))
-    {
-      insn_reloc->insn_ptr += emit_bcond (insn_reloc->insn_ptr, cond,
-					  new_offset);
-    }
-  else if (can_encode_int32 (new_offset, 28))
-    {
-      /* The offset is out of range for a conditional branch
-	 instruction but not for a unconditional branch.  We can use
-	 the following instructions instead:
-
-	 B.COND TAKEN    ; If cond is true, then jump to TAKEN.
-	 B NOT_TAKEN     ; Else jump over TAKEN and continue.
-	 TAKEN:
-	 B #(offset - 8)
-	 NOT_TAKEN:
-
-      */
-
-      insn_reloc->insn_ptr += emit_bcond (insn_reloc->insn_ptr, cond, 8);
-      insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8);
-      insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, new_offset - 8);
-    }
-}
-
-/* Implementation of aarch64_insn_visitor method "cb".  */
-
-static void
-aarch64_ftrace_insn_reloc_cb (const int32_t offset, const int is_cbnz,
-			      const unsigned rn, int is64,
-			      struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-  int64_t new_offset
-    = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset;
-
-  if (can_encode_int32 (new_offset, 21))
-    {
-      insn_reloc->insn_ptr += emit_cb (insn_reloc->insn_ptr, is_cbnz,
-				       aarch64_register (rn, is64), new_offset);
-    }
-  else if (can_encode_int32 (new_offset, 28))
-    {
-      /* The offset is out of range for a compare and branch
-	 instruction but not for a unconditional branch.  We can use
-	 the following instructions instead:
-
-	 CBZ xn, TAKEN   ; xn == 0, then jump to TAKEN.
-	 B NOT_TAKEN     ; Else jump over TAKEN and continue.
-	 TAKEN:
-	 B #(offset - 8)
-	 NOT_TAKEN:
-
-      */
-      insn_reloc->insn_ptr += emit_cb (insn_reloc->insn_ptr, is_cbnz,
-				       aarch64_register (rn, is64), 8);
-      insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8);
-      insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, new_offset - 8);
-    }
-}
-
-/* Implementation of aarch64_insn_visitor method "tb".  */
-
-static void
-aarch64_ftrace_insn_reloc_tb (const int32_t offset, int is_tbnz,
-			      const unsigned rt, unsigned bit,
-			      struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-  int64_t new_offset
-    = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset;
-
-  if (can_encode_int32 (new_offset, 16))
-    {
-      insn_reloc->insn_ptr += emit_tb (insn_reloc->insn_ptr, is_tbnz, bit,
-				       aarch64_register (rt, 1), new_offset);
-    }
-  else if (can_encode_int32 (new_offset, 28))
-    {
-      /* The offset is out of range for a test bit and branch
-	 instruction but not for a unconditional branch.  We can use
-	 the following instructions instead:
-
-	 TBZ xn, #bit, TAKEN ; xn[bit] == 0, then jump to TAKEN.
-	 B NOT_TAKEN         ; Else jump over TAKEN and continue.
-	 TAKEN:
-	 B #(offset - 8)
-	 NOT_TAKEN:
-
-      */
-      insn_reloc->insn_ptr += emit_tb (insn_reloc->insn_ptr, is_tbnz, bit,
-				       aarch64_register (rt, 1), 8);
-      insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8);
-      insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0,
-				      new_offset - 8);
-    }
-}
-
-/* Implementation of aarch64_insn_visitor method "adr".  */
-
-static void
-aarch64_ftrace_insn_reloc_adr (const int32_t offset, const unsigned rd,
-			       const int is_adrp,
-			       struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-  /* We know exactly the address the ADR{P,} instruction will compute.
-     We can just write it to the destination register.  */
-  CORE_ADDR address = data->insn_addr + offset;
-
-  if (is_adrp)
-    {
-      /* Clear the lower 12 bits of the offset to get the 4K page.  */
-      insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr,
-					     aarch64_register (rd, 1),
-					     address & ~0xfff);
-    }
-  else
-    insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr,
-					   aarch64_register (rd, 1), address);
-}
-
-/* Implementation of aarch64_insn_visitor method "ldr_literal".  */
-
-static void
-aarch64_ftrace_insn_reloc_ldr_literal (const int32_t offset, const int is_sw,
-				       const unsigned rt, const int is64,
-				       struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-  CORE_ADDR address = data->insn_addr + offset;
-
-  insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr,
-					 aarch64_register (rt, 1), address);
-
-  /* We know exactly what address to load from, and what register we
-     can use:
-
-     MOV xd, #(oldloc + offset)
-     MOVK xd, #((oldloc + offset) >> 16), lsl #16
-     ...
-
-     LDR xd, [xd] ; or LDRSW xd, [xd]
-
-  */
-
-  if (is_sw)
-    insn_reloc->insn_ptr += emit_ldrsw (insn_reloc->insn_ptr,
-					aarch64_register (rt, 1),
-					aarch64_register (rt, 1),
-					offset_memory_operand (0));
-  else
-    insn_reloc->insn_ptr += emit_ldr (insn_reloc->insn_ptr,
-				      aarch64_register (rt, is64),
-				      aarch64_register (rt, 1),
-				      offset_memory_operand (0));
-}
-
-/* Implementation of aarch64_insn_visitor method "others".  */
-
-static void
-aarch64_ftrace_insn_reloc_others (const uint32_t insn,
-				  struct aarch64_insn_data *data)
-{
-  struct aarch64_insn_relocation_data *insn_reloc
-    = (struct aarch64_insn_relocation_data *) data;
-
-  /* The instruction is not PC relative.  Just re-emit it at the new
-     location.  */
-  insn_reloc->insn_ptr += aarch64_emit_insn (insn_reloc->insn_ptr, insn);
-}
-
-static const struct aarch64_insn_visitor visitor =
-{
-  aarch64_ftrace_insn_reloc_b,
-  aarch64_ftrace_insn_reloc_b_cond,
-  aarch64_ftrace_insn_reloc_cb,
-  aarch64_ftrace_insn_reloc_tb,
-  aarch64_ftrace_insn_reloc_adr,
-  aarch64_ftrace_insn_reloc_ldr_literal,
-  aarch64_ftrace_insn_reloc_others,
-};
-
-/* Implementation of linux_target_ops method
-   "install_fast_tracepoint_jump_pad".  */
-
-static int
-aarch64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint,
-					  CORE_ADDR tpaddr,
-					  CORE_ADDR collector,
-					  CORE_ADDR lockaddr,
-					  ULONGEST orig_size,
-					  CORE_ADDR *jump_entry,
-					  CORE_ADDR *trampoline,
-					  ULONGEST *trampoline_size,
-					  unsigned char *jjump_pad_insn,
-					  ULONGEST *jjump_pad_insn_size,
-					  CORE_ADDR *adjusted_insn_addr,
-					  CORE_ADDR *adjusted_insn_addr_end,
-					  char *err)
-{
-  uint32_t buf[256];
-  uint32_t *p = buf;
-  int64_t offset;
-  int i;
-  uint32_t insn;
-  CORE_ADDR buildaddr = *jump_entry;
-  struct aarch64_insn_relocation_data insn_data;
-
-  /* We need to save the current state on the stack both to restore it
-     later and to collect register values when the tracepoint is hit.
-
-     The saved registers are pushed in a layout that needs to be in sync
-     with aarch64_ft_collect_regmap (see linux-aarch64-ipa.c).  Later on
-     the supply_fast_tracepoint_registers function will fill in the
-     register cache from a pointer to saved registers on the stack we build
-     here.
-
-     For simplicity, we set the size of each cell on the stack to 16 bytes.
-     This way one cell can hold any register type, from system registers
-     to the 128 bit SIMD&FP registers.  Furthermore, the stack pointer
-     has to be 16 bytes aligned anyway.
-
-     Note that the CPSR register does not exist on AArch64.  Instead we
-     can access system bits describing the process state with the
-     MRS/MSR instructions, namely the condition flags.  We save them as
-     if they are part of a CPSR register because that's how GDB
-     interprets these system bits.  At the moment, only the condition
-     flags are saved in CPSR (NZCV).
-
-     Stack layout, each cell is 16 bytes (descending):
-
-     High *-------- SIMD&FP registers from 31 down to 0. --------*
-	  | q31                                                  |
-	  .                                                      .
-	  .                                                      . 32 cells
-	  .                                                      .
-	  | q0                                                   |
-	  *---- General purpose registers from 30 down to 0. ----*
-	  | x30                                                  |
-	  .                                                      .
-	  .                                                      . 31 cells
-	  .                                                      .
-	  | x0                                                   |
-	  *------------- Special purpose registers. -------------*
-	  | SP                                                   |
-	  | PC                                                   |
-	  | CPSR (NZCV)                                          | 5 cells
-	  | FPSR                                                 |
-	  | FPCR                                                 | <- SP + 16
-	  *------------- collecting_t object --------------------*
-	  | TPIDR_EL0               | struct tracepoint *        |
-     Low  *------------------------------------------------------*
-
-     After this stack is set up, we issue a call to the collector, passing
-     it the saved registers at (SP + 16).  */
-
-  /* Push SIMD&FP registers on the stack:
-
-       SUB sp, sp, #(32 * 16)
-
-       STP q30, q31, [sp, #(30 * 16)]
-       ...
-       STP q0, q1, [sp]
-
-     */
-  p += emit_sub (p, sp, sp, immediate_operand (32 * 16));
-  for (i = 30; i >= 0; i -= 2)
-    p += emit_stp_q_offset (p, i, i + 1, sp, i * 16);
-
-  /* Push general purpose registers on the stack.  Note that we do not need
-     to push x31 as it represents the xzr register and not the stack
-     pointer in a STR instruction.
-
-       SUB sp, sp, #(31 * 16)
-
-       STR x30, [sp, #(30 * 16)]
-       ...
-       STR x0, [sp]
-
-     */
-  p += emit_sub (p, sp, sp, immediate_operand (31 * 16));
-  for (i = 30; i >= 0; i -= 1)
-    p += emit_str (p, aarch64_register (i, 1), sp,
-		   offset_memory_operand (i * 16));
-
-  /* Make space for 5 more cells.
-
-       SUB sp, sp, #(5 * 16)
-
-     */
-  p += emit_sub (p, sp, sp, immediate_operand (5 * 16));
-
-
-  /* Save SP:
-
-       ADD x4, sp, #((32 + 31 + 5) * 16)
-       STR x4, [sp, #(4 * 16)]
-
-     */
-  p += emit_add (p, x4, sp, immediate_operand ((32 + 31 + 5) * 16));
-  p += emit_str (p, x4, sp, offset_memory_operand (4 * 16));
-
-  /* Save PC (tracepoint address):
-
-       MOV  x3, #(tpaddr)
-       ...
-
-       STR x3, [sp, #(3 * 16)]
-
-     */
-
-  p += emit_mov_addr (p, x3, tpaddr);
-  p += emit_str (p, x3, sp, offset_memory_operand (3 * 16));
-
-  /* Save CPSR (NZCV), FPSR and FPCR:
-
-       MRS x2, nzcv
-       MRS x1, fpsr
-       MRS x0, fpcr
-
-       STR x2, [sp, #(2 * 16)]
-       STR x1, [sp, #(1 * 16)]
-       STR x0, [sp, #(0 * 16)]
-
-     */
-  p += emit_mrs (p, x2, NZCV);
-  p += emit_mrs (p, x1, FPSR);
-  p += emit_mrs (p, x0, FPCR);
-  p += emit_str (p, x2, sp, offset_memory_operand (2 * 16));
-  p += emit_str (p, x1, sp, offset_memory_operand (1 * 16));
-  p += emit_str (p, x0, sp, offset_memory_operand (0 * 16));
-
-  /* Push the collecting_t object.  It consist of the address of the
-     tracepoint and an ID for the current thread.  We get the latter by
-     reading the tpidr_el0 system register.  It corresponds to the
-     NT_ARM_TLS register accessible with ptrace.
-
-       MOV x0, #(tpoint)
-       ...
-
-       MRS x1, tpidr_el0
-
-       STP x0, x1, [sp, #-16]!
-
-     */
-
-  p += emit_mov_addr (p, x0, tpoint);
-  p += emit_mrs (p, x1, TPIDR_EL0);
-  p += emit_stp (p, x0, x1, sp, preindex_memory_operand (-16));
-
-  /* Spin-lock:
-
-     The shared memory for the lock is at lockaddr.  It will hold zero
-     if no-one is holding the lock, otherwise it contains the address of
-     the collecting_t object on the stack of the thread which acquired it.
-
-     At this stage, the stack pointer points to this thread's collecting_t
-     object.
-
-     We use the following registers:
-     - x0: Address of the lock.
-     - x1: Pointer to collecting_t object.
-     - x2: Scratch register.
-
-       MOV x0, #(lockaddr)
-       ...
-       MOV x1, sp
-
-       ; Trigger an event local to this core.  So the following WFE
-       ; instruction is ignored.
-       SEVL
-     again:
-       ; Wait for an event.  The event is triggered by either the SEVL
-       ; or STLR instructions (store release).
-       WFE
-
-       ; Atomically read at lockaddr.  This marks the memory location as
-       ; exclusive.  This instruction also has memory constraints which
-       ; make sure all previous data reads and writes are done before
-       ; executing it.
-       LDAXR x2, [x0]
-
-       ; Try again if another thread holds the lock.
-       CBNZ x2, again
-
-       ; We can lock it!  Write the address of the collecting_t object.
-       ; This instruction will fail if the memory location is not marked
-       ; as exclusive anymore.  If it succeeds, it will remove the
-       ; exclusive mark on the memory location.  This way, if another
-       ; thread executes this instruction before us, we will fail and try
-       ; all over again.
-       STXR w2, x1, [x0]
-       CBNZ w2, again
-
-     */
-
-  p += emit_mov_addr (p, x0, lockaddr);
-  p += emit_mov (p, x1, register_operand (sp));
-
-  p += emit_sevl (p);
-  p += emit_wfe (p);
-  p += emit_ldaxr (p, x2, x0);
-  p += emit_cb (p, 1, w2, -2 * 4);
-  p += emit_stxr (p, w2, x1, x0);
-  p += emit_cb (p, 1, x2, -4 * 4);
-
-  /* Call collector (struct tracepoint *, unsigned char *):
-
-       MOV x0, #(tpoint)
-       ...
-
-       ; Saved registers start after the collecting_t object.
-       ADD x1, sp, #16
-
-       ; We use an intra-procedure-call scratch register.
-       MOV ip0, #(collector)
-       ...
-
-       ; And call back to C!
-       BLR ip0
-
-     */
-
-  p += emit_mov_addr (p, x0, tpoint);
-  p += emit_add (p, x1, sp, immediate_operand (16));
-
-  p += emit_mov_addr (p, ip0, collector);
-  p += emit_blr (p, ip0);
-
-  /* Release the lock.
-
-       MOV x0, #(lockaddr)
-       ...
-
-       ; This instruction is a normal store with memory ordering
-       ; constraints.  Thanks to this we do not have to put a data
-       ; barrier instruction to make sure all data read and writes are done
-       ; before this instruction is executed.  Furthermore, this instruction
-       ; will trigger an event, letting other threads know they can grab
-       ; the lock.
-       STLR xzr, [x0]
-
-     */
-  p += emit_mov_addr (p, x0, lockaddr);
-  p += emit_stlr (p, xzr, x0);
-
-  /* Free collecting_t object:
-
-       ADD sp, sp, #16
-
-     */
-  p += emit_add (p, sp, sp, immediate_operand (16));
-
-  /* Restore CPSR (NZCV), FPSR and FPCR.  And free all special purpose
-     registers from the stack.
-
-       LDR x2, [sp, #(2 * 16)]
-       LDR x1, [sp, #(1 * 16)]
-       LDR x0, [sp, #(0 * 16)]
-
-       MSR NZCV, x2
-       MSR FPSR, x1
-       MSR FPCR, x0
-
-       ADD sp, sp #(5 * 16)
-
-     */
-  p += emit_ldr (p, x2, sp, offset_memory_operand (2 * 16));
-  p += emit_ldr (p, x1, sp, offset_memory_operand (1 * 16));
-  p += emit_ldr (p, x0, sp, offset_memory_operand (0 * 16));
-  p += emit_msr (p, NZCV, x2);
-  p += emit_msr (p, FPSR, x1);
-  p += emit_msr (p, FPCR, x0);
-
-  p += emit_add (p, sp, sp, immediate_operand (5 * 16));
-
-  /* Pop general purpose registers:
-
-       LDR x0, [sp]
-       ...
-       LDR x30, [sp, #(30 * 16)]
-
-       ADD sp, sp, #(31 * 16)
-
-     */
-  for (i = 0; i <= 30; i += 1)
-    p += emit_ldr (p, aarch64_register (i, 1), sp,
-		   offset_memory_operand (i * 16));
-  p += emit_add (p, sp, sp, immediate_operand (31 * 16));
-
-  /* Pop SIMD&FP registers:
-
-       LDP q0, q1, [sp]
-       ...
-       LDP q30, q31, [sp, #(30 * 16)]
-
-       ADD sp, sp, #(32 * 16)
-
-     */
-  for (i = 0; i <= 30; i += 2)
-    p += emit_ldp_q_offset (p, i, i + 1, sp, i * 16);
-  p += emit_add (p, sp, sp, immediate_operand (32 * 16));
-
-  /* Write the code into the inferior memory.  */
-  append_insns (&buildaddr, p - buf, buf);
-
-  /* Now emit the relocated instruction.  */
-  *adjusted_insn_addr = buildaddr;
-  target_read_uint32 (tpaddr, &insn);
-
-  insn_data.base.insn_addr = tpaddr;
-  insn_data.new_addr = buildaddr;
-  insn_data.insn_ptr = buf;
-
-  aarch64_relocate_instruction (insn, &visitor,
-				(struct aarch64_insn_data *) &insn_data);
-
-  /* We may not have been able to relocate the instruction.  */
-  if (insn_data.insn_ptr == buf)
-    {
-      sprintf (err,
-	       "E.Could not relocate instruction from %s to %s.",
-	       core_addr_to_string_nz (tpaddr),
-	       core_addr_to_string_nz (buildaddr));
-      return 1;
-    }
-  else
-    append_insns (&buildaddr, insn_data.insn_ptr - buf, buf);
-  *adjusted_insn_addr_end = buildaddr;
-
-  /* Go back to the start of the buffer.  */
-  p = buf;
-
-  /* Emit a branch back from the jump pad.  */
-  offset = (tpaddr + orig_size - buildaddr);
-  if (!can_encode_int32 (offset, 28))
-    {
-      sprintf (err,
-	       "E.Jump back from jump pad too far from tracepoint "
-	       "(offset 0x%" PRIx64 " cannot be encoded in 28 bits).",
-	       offset);
-      return 1;
-    }
-
-  p += emit_b (p, 0, offset);
-  append_insns (&buildaddr, p - buf, buf);
-
-  /* Give the caller a branch instruction into the jump pad.  */
-  offset = (*jump_entry - tpaddr);
-  if (!can_encode_int32 (offset, 28))
-    {
-      sprintf (err,
-	       "E.Jump pad too far from tracepoint "
-	       "(offset 0x%" PRIx64 " cannot be encoded in 28 bits).",
-	       offset);
-      return 1;
-    }
-
-  emit_b ((uint32_t *) jjump_pad_insn, 0, offset);
-  *jjump_pad_insn_size = 4;
-
-  /* Return the end address of our pad.  */
-  *jump_entry = buildaddr;
-
-  return 0;
-}
-
-/* Helper function writing LEN instructions from START into
-   current_insn_ptr.  */
-
-static void
-emit_ops_insns (const uint32_t *start, int len)
-{
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  if (debug_threads)
-    debug_printf ("Adding %d instrucions at %s\n",
-		  len, paddress (buildaddr));
-
-  append_insns (&buildaddr, len, start);
-  current_insn_ptr = buildaddr;
-}
-
-/* Pop a register from the stack.  */
-
-static int
-emit_pop (uint32_t *buf, struct aarch64_register rt)
-{
-  return emit_ldr (buf, rt, sp, postindex_memory_operand (1 * 16));
-}
-
-/* Push a register on the stack.  */
-
-static int
-emit_push (uint32_t *buf, struct aarch64_register rt)
-{
-  return emit_str (buf, rt, sp, preindex_memory_operand (-1 * 16));
-}
-
-/* Implementation of emit_ops method "emit_prologue".  */
-
-static void
-aarch64_emit_prologue (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* This function emit a prologue for the following function prototype:
-
-     enum eval_result_type f (unsigned char *regs,
-			      ULONGEST *value);
-
-     The first argument is a buffer of raw registers.  The second
-     argument is the result of
-     evaluating the expression, which will be set to whatever is on top of
-     the stack at the end.
-
-     The stack set up by the prologue is as such:
-
-     High *------------------------------------------------------*
-	  | LR                                                   |
-	  | FP                                                   | <- FP
-	  | x1  (ULONGEST *value)                                |
-	  | x0  (unsigned char *regs)                            |
-     Low  *------------------------------------------------------*
-
-     As we are implementing a stack machine, each opcode can expand the
-     stack so we never know how far we are from the data saved by this
-     prologue.  In order to be able refer to value and regs later, we save
-     the current stack pointer in the frame pointer.  This way, it is not
-     clobbered when calling C functions.
-
-     Finally, throughout every operation, we are using register x0 as the
-     top of the stack, and x1 as a scratch register.  */
-
-  p += emit_stp (p, x0, x1, sp, preindex_memory_operand (-2 * 16));
-  p += emit_str (p, lr, sp, offset_memory_operand (3 * 8));
-  p += emit_str (p, fp, sp, offset_memory_operand (2 * 8));
-
-  p += emit_add (p, fp, sp, immediate_operand (2 * 8));
-
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_epilogue".  */
-
-static void
-aarch64_emit_epilogue (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* Store the result of the expression (x0) in *value.  */
-  p += emit_sub (p, x1, fp, immediate_operand (1 * 8));
-  p += emit_ldr (p, x1, x1, offset_memory_operand (0));
-  p += emit_str (p, x0, x1, offset_memory_operand (0));
-
-  /* Restore the previous state.  */
-  p += emit_add (p, sp, fp, immediate_operand (2 * 8));
-  p += emit_ldp (p, fp, lr, fp, offset_memory_operand (0));
-
-  /* Return expr_eval_no_error.  */
-  p += emit_mov (p, x0, immediate_operand (expr_eval_no_error));
-  p += emit_ret (p, lr);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_add".  */
-
-static void
-aarch64_emit_add (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_add (p, x0, x1, register_operand (x0));
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_sub".  */
-
-static void
-aarch64_emit_sub (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_sub (p, x0, x1, register_operand (x0));
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_mul".  */
-
-static void
-aarch64_emit_mul (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_mul (p, x0, x1, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_lsh".  */
-
-static void
-aarch64_emit_lsh (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_lslv (p, x0, x1, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_rsh_signed".  */
-
-static void
-aarch64_emit_rsh_signed (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_asrv (p, x0, x1, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_rsh_unsigned".  */
-
-static void
-aarch64_emit_rsh_unsigned (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_lsrv (p, x0, x1, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_ext".  */
-
-static void
-aarch64_emit_ext (int arg)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_sbfx (p, x0, x0, 0, arg);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_log_not".  */
-
-static void
-aarch64_emit_log_not (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* If the top of the stack is 0, replace it with 1.  Else replace it with
-     0.  */
-
-  p += emit_cmp (p, x0, immediate_operand (0));
-  p += emit_cset (p, x0, EQ);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_bit_and".  */
-
-static void
-aarch64_emit_bit_and (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_and (p, x0, x0, x1);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_bit_or".  */
-
-static void
-aarch64_emit_bit_or (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_orr (p, x0, x0, x1);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_bit_xor".  */
-
-static void
-aarch64_emit_bit_xor (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_eor (p, x0, x0, x1);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_bit_not".  */
-
-static void
-aarch64_emit_bit_not (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_mvn (p, x0, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_equal".  */
-
-static void
-aarch64_emit_equal (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x0, register_operand (x1));
-  p += emit_cset (p, x0, EQ);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_less_signed".  */
-
-static void
-aarch64_emit_less_signed (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  p += emit_cset (p, x0, LT);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_less_unsigned".  */
-
-static void
-aarch64_emit_less_unsigned (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  p += emit_cset (p, x0, LO);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_ref".  */
-
-static void
-aarch64_emit_ref (int size)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  switch (size)
-    {
-    case 1:
-      p += emit_ldrb (p, w0, x0, offset_memory_operand (0));
-      break;
-    case 2:
-      p += emit_ldrh (p, w0, x0, offset_memory_operand (0));
-      break;
-    case 4:
-      p += emit_ldr (p, w0, x0, offset_memory_operand (0));
-      break;
-    case 8:
-      p += emit_ldr (p, x0, x0, offset_memory_operand (0));
-      break;
-    default:
-      /* Unknown size, bail on compilation.  */
-      emit_error = 1;
-      break;
-    }
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_if_goto".  */
-
-static void
-aarch64_emit_if_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* The Z flag is set or cleared here.  */
-  p += emit_cmp (p, x0, immediate_operand (0));
-  /* This instruction must not change the Z flag.  */
-  p += emit_pop (p, x0);
-  /* Branch over the next instruction if x0 == 0.  */
-  p += emit_bcond (p, EQ, 8);
-
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_goto".  */
-
-static void
-aarch64_emit_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = 0;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "write_goto_address".  */
-
-void
-aarch64_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  uint32_t insn;
-
-  emit_b (&insn, 0, to - from);
-  append_insns (&from, 1, &insn);
-}
-
-/* Implementation of emit_ops method "emit_const".  */
-
-static void
-aarch64_emit_const (LONGEST num)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_mov_addr (p, x0, num);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_call".  */
-
-static void
-aarch64_emit_call (CORE_ADDR fn)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_mov_addr (p, ip0, fn);
-  p += emit_blr (p, ip0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_reg".  */
-
-static void
-aarch64_emit_reg (int reg)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* Set x0 to unsigned char *regs.  */
-  p += emit_sub (p, x0, fp, immediate_operand (2 * 8));
-  p += emit_ldr (p, x0, x0, offset_memory_operand (0));
-  p += emit_mov (p, x1, immediate_operand (reg));
-
-  emit_ops_insns (buf, p - buf);
-
-  aarch64_emit_call (get_raw_reg_func_addr ());
-}
-
-/* Implementation of emit_ops method "emit_pop".  */
-
-static void
-aarch64_emit_pop (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_stack_flush".  */
-
-static void
-aarch64_emit_stack_flush (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_push (p, x0);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_zero_ext".  */
-
-static void
-aarch64_emit_zero_ext (int arg)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_ubfx (p, x0, x0, 0, arg);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_swap".  */
-
-static void
-aarch64_emit_swap (void)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_ldr (p, x1, sp, offset_memory_operand (0 * 16));
-  p += emit_str (p, x0, sp, offset_memory_operand (0 * 16));
-  p += emit_mov (p, x0, register_operand (x1));
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_stack_adjust".  */
-
-static void
-aarch64_emit_stack_adjust (int n)
-{
-  /* This is not needed with our design.  */
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_add (p, sp, sp, immediate_operand (n * 16));
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_int_call_1".  */
-
-static void
-aarch64_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_mov (p, x0, immediate_operand (arg1));
-
-  emit_ops_insns (buf, p - buf);
-
-  aarch64_emit_call (fn);
-}
-
-/* Implementation of emit_ops method "emit_void_call_2".  */
-
-static void
-aarch64_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  /* Push x0 on the stack.  */
-  aarch64_emit_stack_flush ();
-
-  /* Setup arguments for the function call:
-
-     x0: arg1
-     x1: top of the stack
-
-       MOV x1, x0
-       MOV x0, #arg1  */
-
-  p += emit_mov (p, x1, register_operand (x0));
-  p += emit_mov (p, x0, immediate_operand (arg1));
-
-  emit_ops_insns (buf, p - buf);
-
-  aarch64_emit_call (fn);
-
-  /* Restore x0.  */
-  aarch64_emit_pop ();
-}
-
-/* Implementation of emit_ops method "emit_eq_goto".  */
-
-static void
-aarch64_emit_eq_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  /* Branch over the next instruction if x0 != x1.  */
-  p += emit_bcond (p, NE, 8);
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_ne_goto".  */
-
-static void
-aarch64_emit_ne_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  /* Branch over the next instruction if x0 == x1.  */
-  p += emit_bcond (p, EQ, 8);
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_lt_goto".  */
-
-static void
-aarch64_emit_lt_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  /* Branch over the next instruction if x0 >= x1.  */
-  p += emit_bcond (p, GE, 8);
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_le_goto".  */
-
-static void
-aarch64_emit_le_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  /* Branch over the next instruction if x0 > x1.  */
-  p += emit_bcond (p, GT, 8);
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_gt_goto".  */
-
-static void
-aarch64_emit_gt_goto (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  /* Branch over the next instruction if x0 <= x1.  */
-  p += emit_bcond (p, LE, 8);
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-/* Implementation of emit_ops method "emit_ge_got".  */
-
-static void
-aarch64_emit_ge_got (int *offset_p, int *size_p)
-{
-  uint32_t buf[16];
-  uint32_t *p = buf;
-
-  p += emit_pop (p, x1);
-  p += emit_cmp (p, x1, register_operand (x0));
-  /* Branch over the next instruction if x0 <= x1.  */
-  p += emit_bcond (p, LT, 8);
-  /* The NOP instruction will be patched with an unconditional branch.  */
-  if (offset_p)
-    *offset_p = (p - buf) * 4;
-  if (size_p)
-    *size_p = 4;
-  p += emit_nop (p);
-
-  emit_ops_insns (buf, p - buf);
-}
-
-static struct emit_ops aarch64_emit_ops_impl =
-{
-  aarch64_emit_prologue,
-  aarch64_emit_epilogue,
-  aarch64_emit_add,
-  aarch64_emit_sub,
-  aarch64_emit_mul,
-  aarch64_emit_lsh,
-  aarch64_emit_rsh_signed,
-  aarch64_emit_rsh_unsigned,
-  aarch64_emit_ext,
-  aarch64_emit_log_not,
-  aarch64_emit_bit_and,
-  aarch64_emit_bit_or,
-  aarch64_emit_bit_xor,
-  aarch64_emit_bit_not,
-  aarch64_emit_equal,
-  aarch64_emit_less_signed,
-  aarch64_emit_less_unsigned,
-  aarch64_emit_ref,
-  aarch64_emit_if_goto,
-  aarch64_emit_goto,
-  aarch64_write_goto_address,
-  aarch64_emit_const,
-  aarch64_emit_call,
-  aarch64_emit_reg,
-  aarch64_emit_pop,
-  aarch64_emit_stack_flush,
-  aarch64_emit_zero_ext,
-  aarch64_emit_swap,
-  aarch64_emit_stack_adjust,
-  aarch64_emit_int_call_1,
-  aarch64_emit_void_call_2,
-  aarch64_emit_eq_goto,
-  aarch64_emit_ne_goto,
-  aarch64_emit_lt_goto,
-  aarch64_emit_le_goto,
-  aarch64_emit_gt_goto,
-  aarch64_emit_ge_got,
-};
-
-/* Implementation of linux_target_ops method "emit_ops".  */
-
-static struct emit_ops *
-aarch64_emit_ops (void)
-{
-  return &aarch64_emit_ops_impl;
-}
-
-/* Implementation of linux_target_ops method
-   "get_min_fast_tracepoint_insn_len".  */
-
-static int
-aarch64_get_min_fast_tracepoint_insn_len (void)
-{
-  return 4;
-}
-
-/* Implementation of linux_target_ops method "supports_range_stepping".  */
-
-static int
-aarch64_supports_range_stepping (void)
-{
-  return 1;
-}
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-aarch64_sw_breakpoint_from_kind (int kind, int *size)
-{
-  if (is_64bit_tdesc ())
-    {
-      *size = aarch64_breakpoint_len;
-      return aarch64_breakpoint;
-    }
-  else
-    return arm_sw_breakpoint_from_kind (kind, size);
-}
-
-/* Implementation of linux_target_ops method "breakpoint_kind_from_pc".  */
-
-static int
-aarch64_breakpoint_kind_from_pc (CORE_ADDR *pcptr)
-{
-  if (is_64bit_tdesc ())
-    return aarch64_breakpoint_len;
-  else
-    return arm_breakpoint_kind_from_pc (pcptr);
-}
-
-/* Implementation of the linux_target_ops method
-   "breakpoint_kind_from_current_state".  */
-
-static int
-aarch64_breakpoint_kind_from_current_state (CORE_ADDR *pcptr)
-{
-  if (is_64bit_tdesc ())
-    return aarch64_breakpoint_len;
-  else
-    return arm_breakpoint_kind_from_current_state (pcptr);
-}
-
-/* Support for hardware single step.  */
-
-static int
-aarch64_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-struct linux_target_ops the_low_target =
-{
-  aarch64_arch_setup,
-  aarch64_regs_info,
-  NULL, /* cannot_fetch_register */
-  NULL, /* cannot_store_register */
-  NULL, /* fetch_register */
-  aarch64_get_pc,
-  aarch64_set_pc,
-  aarch64_breakpoint_kind_from_pc,
-  aarch64_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  0,    /* decr_pc_after_break */
-  aarch64_breakpoint_at,
-  aarch64_supports_z_point_type,
-  aarch64_insert_point,
-  aarch64_remove_point,
-  aarch64_stopped_by_watchpoint,
-  aarch64_stopped_data_address,
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  aarch64_linux_siginfo_fixup,
-  aarch64_linux_new_process,
-  aarch64_linux_delete_process,
-  aarch64_linux_new_thread,
-  aarch64_linux_delete_thread,
-  aarch64_linux_new_fork,
-  aarch64_linux_prepare_to_resume,
-  NULL, /* process_qsupported */
-  aarch64_supports_tracepoints,
-  aarch64_get_thread_area,
-  aarch64_install_fast_tracepoint_jump_pad,
-  aarch64_emit_ops,
-  aarch64_get_min_fast_tracepoint_insn_len,
-  aarch64_supports_range_stepping,
-  aarch64_breakpoint_kind_from_current_state,
-  aarch64_supports_hardware_single_step,
-  aarch64_get_syscall_trapinfo,
-};
-
-void
-initialize_low_arch (void)
-{
-  initialize_low_arch_aarch32 ();
-
-  initialize_regsets_info (&aarch64_regsets_info);
-  initialize_regsets_info (&aarch64_sve_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-tdesc.c ./gdb/gdbserver/linux-aarch64-tdesc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-tdesc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch64-tdesc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,57 +0,0 @@
-/* GNU/Linux/aarch64 specific target description, for the remote server
-   for GDB.
-   Copyright (C) 2017-2020 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 "server.h"
-#include "tdesc.h"
-#include "arch/aarch64.h"
-#include "linux-aarch32-low.h"
-#include <inttypes.h>
-
-/* All possible aarch64 target descriptors.  */
-struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/];
-
-/* Create the aarch64 target description.  */
-
-const target_desc *
-aarch64_linux_read_description (uint64_t vq, bool pauth_p)
-{
-  if (vq > AARCH64_MAX_SVE_VQ)
-    error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq,
-	   AARCH64_MAX_SVE_VQ);
-
-  struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p];
-
-  if (tdesc == NULL)
-    {
-      tdesc = aarch64_create_target_description (vq, pauth_p);
-
-      static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
-      static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc",
-							 "vg", NULL };
-
-      if (vq == 0)
-	init_target_desc (tdesc, expedite_regs_aarch64);
-      else
-	init_target_desc (tdesc, expedite_regs_aarch64_sve);
-
-      tdesc_aarch64_list[vq][pauth_p] = tdesc;
-    }
-
-  return tdesc;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-tdesc.h ./gdb/gdbserver/linux-aarch64-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-aarch64-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-aarch64-tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-/* Low level support for aarch64, shared between gdbserver and IPA.
-
-   Copyright (C) 2016-2020 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 GDBSERVER_LINUX_AARCH64_TDESC_H
-#define GDBSERVER_LINUX_AARCH64_TDESC_H
-
-const target_desc * aarch64_linux_read_description (uint64_t vq, bool pauth_p);
-
-#endif /* GDBSERVER_LINUX_AARCH64_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-amd64-ipa.c ./gdb/gdbserver/linux-amd64-ipa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-amd64-ipa.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-amd64-ipa.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,289 +0,0 @@
-/* GNU/Linux/x86-64 specific low level interface, for the in-process
-   agent library for GDB.
-
-   Copyright (C) 2010-2020 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 "server.h"
-#include <sys/mman.h>
-#include "tracepoint.h"
-#include "linux-x86-tdesc.h"
-#include "gdbsupport/x86-xstate.h"
-
-/* Defined in auto-generated file amd64-linux.c.  */
-void init_registers_amd64_linux (void);
-extern const struct target_desc *tdesc_amd64_linux;
-
-/* fast tracepoints collect registers.  */
-
-#define FT_CR_RIP 0
-#define FT_CR_EFLAGS 1
-#define FT_CR_R8 2
-#define FT_CR_R9 3
-#define FT_CR_R10 4
-#define FT_CR_R11 5
-#define FT_CR_R12 6
-#define FT_CR_R13 7
-#define FT_CR_R14 8
-#define FT_CR_R15 9
-#define FT_CR_RAX 10
-#define FT_CR_RBX 11
-#define FT_CR_RCX 12
-#define FT_CR_RDX 13
-#define FT_CR_RSI 14
-#define FT_CR_RDI 15
-#define FT_CR_RBP 16
-#define FT_CR_RSP 17
-
-static const int x86_64_ft_collect_regmap[] = {
-  FT_CR_RAX * 8, FT_CR_RBX * 8, FT_CR_RCX * 8, FT_CR_RDX * 8,
-  FT_CR_RSI * 8, FT_CR_RDI * 8, FT_CR_RBP * 8, FT_CR_RSP * 8,
-  FT_CR_R8 * 8,  FT_CR_R9 * 8,  FT_CR_R10 * 8, FT_CR_R11 * 8,
-  FT_CR_R12 * 8, FT_CR_R13 * 8, FT_CR_R14 * 8, FT_CR_R15 * 8,
-  FT_CR_RIP * 8, FT_CR_EFLAGS * 8
-};
-
-#define X86_64_NUM_FT_COLLECT_GREGS \
-  (sizeof (x86_64_ft_collect_regmap) / sizeof(x86_64_ft_collect_regmap[0]))
-
-void
-supply_fast_tracepoint_registers (struct regcache *regcache,
-				  const unsigned char *buf)
-{
-  int i;
-
-  for (i = 0; i < X86_64_NUM_FT_COLLECT_GREGS; i++)
-    supply_register (regcache, i,
-		     ((char *) buf) + x86_64_ft_collect_regmap[i]);
-}
-
-ULONGEST
-get_raw_reg (const unsigned char *raw_regs, int regnum)
-{
-  if (regnum >= X86_64_NUM_FT_COLLECT_GREGS)
-    return 0;
-
-  return *(ULONGEST *) (raw_regs + x86_64_ft_collect_regmap[regnum]);
-}
-
-#ifdef HAVE_UST
-
-#include <ust/processor.h>
-
-/* "struct registers" is the UST object type holding the registers at
-   the time of the static tracepoint marker call.  This doesn't
-   contain RIP, but we know what it must have been (the marker
-   address).  */
-
-#define ST_REGENTRY(REG)			\
-  {						\
-    offsetof (struct registers, REG),		\
-    sizeof (((struct registers *) NULL)->REG)	\
-  }
-
-static struct
-{
-  int offset;
-  int size;
-} x86_64_st_collect_regmap[] =
-  {
-    ST_REGENTRY(rax),
-    ST_REGENTRY(rbx),
-    ST_REGENTRY(rcx),
-    ST_REGENTRY(rdx),
-    ST_REGENTRY(rsi),
-    ST_REGENTRY(rdi),
-    ST_REGENTRY(rbp),
-    ST_REGENTRY(rsp),
-    ST_REGENTRY(r8),
-    ST_REGENTRY(r9),
-    ST_REGENTRY(r10),
-    ST_REGENTRY(r11),
-    ST_REGENTRY(r12),
-    ST_REGENTRY(r13),
-    ST_REGENTRY(r14),
-    ST_REGENTRY(r15),
-    { -1, 0 },
-    ST_REGENTRY(rflags),
-    ST_REGENTRY(cs),
-    ST_REGENTRY(ss),
-  };
-
-#define X86_64_NUM_ST_COLLECT_GREGS \
-  (sizeof (x86_64_st_collect_regmap) / sizeof (x86_64_st_collect_regmap[0]))
-
-/* GDB's RIP register number.  */
-#define AMD64_RIP_REGNUM 16
-
-void
-supply_static_tracepoint_registers (struct regcache *regcache,
-				    const unsigned char *buf,
-				    CORE_ADDR pc)
-{
-  int i;
-  unsigned long newpc = pc;
-
-  supply_register (regcache, AMD64_RIP_REGNUM, &newpc);
-
-  for (i = 0; i < X86_64_NUM_ST_COLLECT_GREGS; i++)
-    if (x86_64_st_collect_regmap[i].offset != -1)
-      {
-	switch (x86_64_st_collect_regmap[i].size)
-	  {
-	  case 8:
-	    supply_register (regcache, i,
-			     ((char *) buf)
-			     + x86_64_st_collect_regmap[i].offset);
-	    break;
-	  case 2:
-	    {
-	      unsigned long reg
-		= * (short *) (((char *) buf)
-			       + x86_64_st_collect_regmap[i].offset);
-	      reg &= 0xffff;
-	      supply_register (regcache, i, &reg);
-	    }
-	    break;
-	  default:
-	    internal_error (__FILE__, __LINE__,
-			    "unhandled register size: %d",
-			    x86_64_st_collect_regmap[i].size);
-	    break;
-	  }
-      }
-}
-
-#endif /* HAVE_UST */
-
-#if !defined __ILP32__
-/* Map the tdesc index to xcr0 mask.  */
-static uint64_t idx2mask[X86_TDESC_LAST] = {
-  X86_XSTATE_X87_MASK,
-  X86_XSTATE_SSE_MASK,
-  X86_XSTATE_AVX_MASK,
-  X86_XSTATE_MPX_MASK,
-  X86_XSTATE_AVX_MPX_MASK,
-  X86_XSTATE_AVX_AVX512_MASK,
-  X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
-};
-#endif
-
-/* Return target_desc to use for IPA, given the tdesc index passed by
-   gdbserver.  */
-
-const struct target_desc *
-get_ipa_tdesc (int idx)
-{
-  if (idx >= X86_TDESC_LAST)
-    {
-      internal_error (__FILE__, __LINE__,
-		      "unknown ipa tdesc index: %d", idx);
-    }
-
-#if defined __ILP32__
-  switch (idx)
-    {
-    case X86_TDESC_SSE:
-      return amd64_linux_read_description (X86_XSTATE_SSE_MASK, true);
-    case X86_TDESC_AVX:
-      return amd64_linux_read_description (X86_XSTATE_AVX_MASK, true);
-    case X86_TDESC_AVX_AVX512:
-      return amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true);
-    default:
-      break;
-    }
-#else
-  return amd64_linux_read_description (idx2mask[idx], false);
-#endif
-
-  internal_error (__FILE__, __LINE__,
-		  "unknown ipa tdesc index: %d", idx);
-}
-
-/* Allocate buffer for the jump pads.  The branch instruction has a
-   reach of +/- 31-bit, and the executable is loaded at low addresses.
-
-   64-bit: Use MAP_32BIT to allocate in the first 2GB.  Shared
-   libraries, being allocated at the top, are unfortunately out of
-   luck.
-
-   x32: Since MAP_32BIT is 64-bit only, do the placement manually.
-   Try allocating at '0x80000000 - SIZE' initially, decreasing until
-   we hit a free area.  This ensures the executable is fully covered,
-   and is as close as possible to the shared libraries, which are
-   usually mapped at the top of the first 4GB of the address space.
-*/
-
-void *
-alloc_jump_pad_buffer (size_t size)
-{
-#if __ILP32__
-  uintptr_t addr;
-  int pagesize;
-
-  pagesize = sysconf (_SC_PAGE_SIZE);
-  if (pagesize == -1)
-    perror_with_name ("sysconf");
-
-  addr = 0x80000000 - size;
-
-  /* size should already be page-aligned, but this can't hurt.  */
-  addr &= ~(pagesize - 1);
-
-  /* Search for a free area.  If we hit 0, we're out of luck.  */
-  for (; addr; addr -= pagesize)
-    {
-      void *res;
-
-      /* No MAP_FIXED - we don't want to zap someone's mapping.  */
-      res = mmap ((void *) addr, size,
-		  PROT_READ | PROT_WRITE | PROT_EXEC,
-		  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-      /* If we got what we wanted, return.  */
-      if ((uintptr_t) res == addr)
-	return res;
-
-      /* If we got a mapping, but at a wrong address, undo it.  */
-      if (res != MAP_FAILED)
-	munmap (res, size);
-    }
-
-  return NULL;
-#else
-  void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
-		    MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0);
-
-  if (res == MAP_FAILED)
-    return NULL;
-
-  return res;
-#endif
-}
-
-void
-initialize_low_tracepoint (void)
-{
-#if defined __ILP32__
-  amd64_linux_read_description (X86_XSTATE_SSE_MASK, true);
-  amd64_linux_read_description (X86_XSTATE_AVX_MASK, true);
-  amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true);
-#else
-  for (auto i = 0; i < X86_TDESC_LAST; i++)
-    amd64_linux_read_description (idx2mask[i], false);
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-arm-low.c ./gdb/gdbserver/linux-arm-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-arm-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-arm-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1052 +0,0 @@
-/* GNU/Linux/ARM specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-#include "arch/arm.h"
-#include "arch/arm-linux.h"
-#include "arch/arm-get-next-pcs.h"
-#include "linux-aarch32-low.h"
-#include "linux-aarch32-tdesc.h"
-#include "linux-arm-tdesc.h"
-
-#include <sys/uio.h>
-/* Don't include elf.h if linux/elf.h got included by gdb_proc_service.h.
-   On Bionic elf.h and linux/elf.h have conflicting definitions.  */
-#ifndef ELFMAG0
-#include <elf.h>
-#endif
-#include "nat/gdb_ptrace.h"
-#include <signal.h>
-#include <sys/syscall.h>
-
-#ifndef PTRACE_GET_THREAD_AREA
-#define PTRACE_GET_THREAD_AREA 22
-#endif
-
-#ifndef PTRACE_GETWMMXREGS
-# define PTRACE_GETWMMXREGS 18
-# define PTRACE_SETWMMXREGS 19
-#endif
-
-#ifndef PTRACE_GETVFPREGS
-# define PTRACE_GETVFPREGS 27
-# define PTRACE_SETVFPREGS 28
-#endif
-
-#ifndef PTRACE_GETHBPREGS
-#define PTRACE_GETHBPREGS 29
-#define PTRACE_SETHBPREGS 30
-#endif
-
-/* Information describing the hardware breakpoint capabilities.  */
-static struct
-{
-  unsigned char arch;
-  unsigned char max_wp_length;
-  unsigned char wp_count;
-  unsigned char bp_count;
-} arm_linux_hwbp_cap;
-
-/* Enum describing the different types of ARM hardware break-/watch-points.  */
-typedef enum
-{
-  arm_hwbp_break = 0,
-  arm_hwbp_load = 1,
-  arm_hwbp_store = 2,
-  arm_hwbp_access = 3
-} arm_hwbp_type;
-
-/* Type describing an ARM Hardware Breakpoint Control register value.  */
-typedef unsigned int arm_hwbp_control_t;
-
-/* Structure used to keep track of hardware break-/watch-points.  */
-struct arm_linux_hw_breakpoint
-{
-  /* Address to break on, or being watched.  */
-  unsigned int address;
-  /* Control register for break-/watch- point.  */
-  arm_hwbp_control_t control;
-};
-
-/* Since we cannot dynamically allocate subfields of arch_process_info,
-   assume a maximum number of supported break-/watchpoints.  */
-#define MAX_BPTS 32
-#define MAX_WPTS 32
-
-/* Per-process arch-specific data we want to keep.  */
-struct arch_process_info
-{
-  /* Hardware breakpoints for this process.  */
-  struct arm_linux_hw_breakpoint bpts[MAX_BPTS];
-  /* Hardware watchpoints for this process.  */
-  struct arm_linux_hw_breakpoint wpts[MAX_WPTS];
-};
-
-/* Per-thread arch-specific data we want to keep.  */
-struct arch_lwp_info
-{
-  /* Non-zero if our copy differs from what's recorded in the thread.  */
-  char bpts_changed[MAX_BPTS];
-  char wpts_changed[MAX_WPTS];
-  /* Cached stopped data address.  */
-  CORE_ADDR stopped_data_address;
-};
-
-/* These are in <asm/elf.h> in current kernels.  */
-#define HWCAP_VFP       64
-#define HWCAP_IWMMXT    512
-#define HWCAP_NEON      4096
-#define HWCAP_VFPv3     8192
-#define HWCAP_VFPv3D16  16384
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-#define arm_num_regs 26
-
-static int arm_regmap[] = {
-  0, 4, 8, 12, 16, 20, 24, 28,
-  32, 36, 40, 44, 48, 52, 56, 60,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  64
-};
-
-/* Forward declarations needed for get_next_pcs ops.  */
-static ULONGEST get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr,
-							   int len,
-							   int byte_order);
-
-static CORE_ADDR get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
-						CORE_ADDR val);
-
-static CORE_ADDR get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
-
-static int get_next_pcs_is_thumb (struct arm_get_next_pcs *self);
-
-/* get_next_pcs operations.  */
-static struct arm_get_next_pcs_ops get_next_pcs_ops = {
-  get_next_pcs_read_memory_unsigned_integer,
-  get_next_pcs_syscall_next_pc,
-  get_next_pcs_addr_bits_remove,
-  get_next_pcs_is_thumb,
-  arm_linux_get_next_pcs_fixup,
-};
-
-static int
-arm_cannot_store_register (int regno)
-{
-  return (regno >= arm_num_regs);
-}
-
-static int
-arm_cannot_fetch_register (int regno)
-{
-  return (regno >= arm_num_regs);
-}
-
-static void
-arm_fill_wmmxregset (struct regcache *regcache, void *buf)
-{
-  if (arm_linux_get_tdesc_fp_type (regcache->tdesc) != ARM_FP_TYPE_IWMMXT)
-    return;
-
-  for (int i = 0; i < 16; i++)
-    collect_register (regcache, arm_num_regs + i, (char *) buf + i * 8);
-
-  /* We only have access to wcssf, wcasf, and wcgr0-wcgr3.  */
-  for (int i = 0; i < 6; i++)
-    collect_register (regcache, arm_num_regs + i + 16,
-		      (char *) buf + 16 * 8 + i * 4);
-}
-
-static void
-arm_store_wmmxregset (struct regcache *regcache, const void *buf)
-{
-  if (arm_linux_get_tdesc_fp_type (regcache->tdesc) != ARM_FP_TYPE_IWMMXT)
-    return;
-
-  for (int i = 0; i < 16; i++)
-    supply_register (regcache, arm_num_regs + i, (char *) buf + i * 8);
-
-  /* We only have access to wcssf, wcasf, and wcgr0-wcgr3.  */
-  for (int i = 0; i < 6; i++)
-    supply_register (regcache, arm_num_regs + i + 16,
-		     (char *) buf + 16 * 8 + i * 4);
-}
-
-static void
-arm_fill_vfpregset (struct regcache *regcache, void *buf)
-{
-  int num;
-
-  if (is_aarch32_linux_description (regcache->tdesc))
-    num = 32;
-  else
-    {
-      arm_fp_type fp_type = arm_linux_get_tdesc_fp_type (regcache->tdesc);
-
-      if (fp_type == ARM_FP_TYPE_VFPV3)
-	num = 32;
-      else if (fp_type == ARM_FP_TYPE_VFPV2)
-	num = 16;
-      else
-	return;
-    }
-
-  arm_fill_vfpregset_num (regcache, buf, num);
-}
-
-/* Wrapper of UNMAKE_THUMB_ADDR for get_next_pcs.  */
-static CORE_ADDR
-get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self, CORE_ADDR val)
-{
-  return UNMAKE_THUMB_ADDR (val);
-}
-
-static void
-arm_store_vfpregset (struct regcache *regcache, const void *buf)
-{
-  int num;
-
-  if (is_aarch32_linux_description (regcache->tdesc))
-    num = 32;
-  else
-    {
-      arm_fp_type fp_type = arm_linux_get_tdesc_fp_type (regcache->tdesc);
-
-      if (fp_type == ARM_FP_TYPE_VFPV3)
-	num = 32;
-      else if (fp_type == ARM_FP_TYPE_VFPV2)
-	num = 16;
-      else
-	return;
-    }
-
-  arm_store_vfpregset_num (regcache, buf, num);
-}
-
-/* Wrapper of arm_is_thumb_mode for get_next_pcs.  */
-static int
-get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
-{
-  return arm_is_thumb_mode ();
-}
-
-/* Read memory from the inferior.
-   BYTE_ORDER is ignored and there to keep compatiblity with GDB's
-   read_memory_unsigned_integer. */
-static ULONGEST
-get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr,
-					   int len,
-					   int byte_order)
-{
-  ULONGEST res;
-
-  res = 0;
-  target_read_memory (memaddr, (unsigned char *) &res, len);
-
-  return res;
-}
-
-/* Fetch the thread-local storage pointer for libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-		    lwpid_t lwpid, int idx, void **base)
-{
-  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;
-}
-
-
-/* Query Hardware Breakpoint information for the target we are attached to
-   (using PID as ptrace argument) and set up arm_linux_hwbp_cap.  */
-static void
-arm_linux_init_hwbp_cap (int pid)
-{
-  unsigned int val;
-
-  if (ptrace (PTRACE_GETHBPREGS, pid, 0, &val) < 0)
-    return;
-
-  arm_linux_hwbp_cap.arch = (unsigned char)((val >> 24) & 0xff);
-  if (arm_linux_hwbp_cap.arch == 0)
-    return;
-
-  arm_linux_hwbp_cap.max_wp_length = (unsigned char)((val >> 16) & 0xff);
-  arm_linux_hwbp_cap.wp_count = (unsigned char)((val >> 8) & 0xff);
-  arm_linux_hwbp_cap.bp_count = (unsigned char)(val & 0xff);
-
-  if (arm_linux_hwbp_cap.wp_count > MAX_WPTS)
-    internal_error (__FILE__, __LINE__, "Unsupported number of watchpoints");
-  if (arm_linux_hwbp_cap.bp_count > MAX_BPTS)
-    internal_error (__FILE__, __LINE__, "Unsupported number of breakpoints");
-}
-
-/* How many hardware breakpoints are available?  */
-static int
-arm_linux_get_hw_breakpoint_count (void)
-{
-  return arm_linux_hwbp_cap.bp_count;
-}
-
-/* How many hardware watchpoints are available?  */
-static int
-arm_linux_get_hw_watchpoint_count (void)
-{
-  return arm_linux_hwbp_cap.wp_count;
-}
-
-/* Maximum length of area watched by hardware watchpoint.  */
-static int
-arm_linux_get_hw_watchpoint_max_length (void)
-{
-  return arm_linux_hwbp_cap.max_wp_length;
-}
-
-/* Initialize an ARM hardware break-/watch-point control register value.
-   BYTE_ADDRESS_SELECT is the mask of bytes to trigger on; HWBP_TYPE is the
-   type of break-/watch-point; ENABLE indicates whether the point is enabled.
-   */
-static arm_hwbp_control_t
-arm_hwbp_control_initialize (unsigned byte_address_select,
-			     arm_hwbp_type hwbp_type,
-			     int enable)
-{
-  gdb_assert ((byte_address_select & ~0xffU) == 0);
-  gdb_assert (hwbp_type != arm_hwbp_break
-	      || ((byte_address_select & 0xfU) != 0));
-
-  return (byte_address_select << 5) | (hwbp_type << 3) | (3 << 1) | enable;
-}
-
-/* Does the breakpoint control value CONTROL have the enable bit set?  */
-static int
-arm_hwbp_control_is_enabled (arm_hwbp_control_t control)
-{
-  return control & 0x1;
-}
-
-/* Is the breakpoint control value CONTROL initialized?  */
-static int
-arm_hwbp_control_is_initialized (arm_hwbp_control_t control)
-{
-  return control != 0;
-}
-
-/* Change a breakpoint control word so that it is in the disabled state.  */
-static arm_hwbp_control_t
-arm_hwbp_control_disable (arm_hwbp_control_t control)
-{
-  return control & ~0x1;
-}
-
-/* Are two break-/watch-points equal?  */
-static int
-arm_linux_hw_breakpoint_equal (const struct arm_linux_hw_breakpoint *p1,
-			       const struct arm_linux_hw_breakpoint *p2)
-{
-  return p1->address == p2->address && p1->control == p2->control;
-}
-
-/* Convert a raw breakpoint type to an enum arm_hwbp_type.  */
-
-static arm_hwbp_type
-raw_bkpt_type_to_arm_hwbp_type (enum raw_bkpt_type raw_type)
-{
-  switch (raw_type)
-    {
-    case raw_bkpt_type_hw:
-      return arm_hwbp_break;
-    case raw_bkpt_type_write_wp:
-      return arm_hwbp_store;
-    case raw_bkpt_type_read_wp:
-      return arm_hwbp_load;
-    case raw_bkpt_type_access_wp:
-      return arm_hwbp_access;
-    default:
-      gdb_assert_not_reached ("unhandled raw type");
-    }
-}
-
-/* Initialize the hardware breakpoint structure P for a breakpoint or
-   watchpoint at ADDR to LEN.  The type of watchpoint is given in TYPE.
-   Returns -1 if TYPE is unsupported, or -2 if the particular combination
-   of ADDR and LEN cannot be implemented.  Otherwise, returns 0 if TYPE
-   represents a breakpoint and 1 if type represents a watchpoint.  */
-static int
-arm_linux_hw_point_initialize (enum raw_bkpt_type raw_type, CORE_ADDR addr,
-			       int len, struct arm_linux_hw_breakpoint *p)
-{
-  arm_hwbp_type hwbp_type;
-  unsigned mask;
-
-  hwbp_type = raw_bkpt_type_to_arm_hwbp_type (raw_type);
-
-  if (hwbp_type == arm_hwbp_break)
-    {
-      /* For breakpoints, the length field encodes the mode.  */
-      switch (len)
-	{
-	case 2:	 /* 16-bit Thumb mode breakpoint */
-	case 3:  /* 32-bit Thumb mode breakpoint */
-	  mask = 0x3;
-	  addr &= ~1;
-	  break;
-	case 4:  /* 32-bit ARM mode breakpoint */
-	  mask = 0xf;
-	  addr &= ~3;
-	  break;
-	default:
-	  /* Unsupported. */
-	  return -2;
-	}
-    }
-  else
-    {
-      CORE_ADDR max_wp_length = arm_linux_get_hw_watchpoint_max_length ();
-      CORE_ADDR aligned_addr;
-
-      /* Can not set watchpoints for zero or negative lengths.  */
-      if (len <= 0)
-	return -2;
-      /* The current ptrace interface can only handle watchpoints that are a
-	 power of 2.  */
-      if ((len & (len - 1)) != 0)
-	return -2;
-
-      /* Test that the range [ADDR, ADDR + LEN) fits into the largest address
-	 range covered by a watchpoint.  */
-      aligned_addr = addr & ~(max_wp_length - 1);
-      if (aligned_addr + max_wp_length < addr + len)
-	return -2;
-
-      mask = (1 << len) - 1;
-    }
-
-  p->address = (unsigned int) addr;
-  p->control = arm_hwbp_control_initialize (mask, hwbp_type, 1);
-
-  return hwbp_type != arm_hwbp_break;
-}
-
-/* Callback to mark a watch-/breakpoint to be updated in all threads of
-   the current process.  */
-
-static void
-update_registers_callback (thread_info *thread, int watch, int i)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  /* The actual update is done later just before resuming the lwp,
-     we just mark that the registers need updating.  */
-  if (watch)
-    lwp->arch_private->wpts_changed[i] = 1;
-  else
-    lwp->arch_private->bpts_changed[i] = 1;
-
-  /* If the lwp isn't stopped, force it to momentarily pause, so
-     we can update its breakpoint registers.  */
-  if (!lwp->stopped)
-    linux_stop_lwp (lwp);
-}
-
-static int
-arm_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-    case Z_PACKET_HW_BP:
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_READ_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      /* Leave the handling of sw breakpoints with the gdb client.  */
-      return 0;
-    }
-}
-
-/* Insert hardware break-/watchpoint.  */
-static int
-arm_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int len, struct raw_breakpoint *bp)
-{
-  struct process_info *proc = current_process ();
-  struct arm_linux_hw_breakpoint p, *pts;
-  int watch, i, count;
-
-  watch = arm_linux_hw_point_initialize (type, addr, len, &p);
-  if (watch < 0)
-    {
-      /* Unsupported.  */
-      return watch == -1 ? 1 : -1;
-    }
-
-  if (watch)
-    {
-      count = arm_linux_get_hw_watchpoint_count ();
-      pts = proc->priv->arch_private->wpts;
-    }
-  else
-    {
-      count = arm_linux_get_hw_breakpoint_count ();
-      pts = proc->priv->arch_private->bpts;
-    }
-
-  for (i = 0; i < count; i++)
-    if (!arm_hwbp_control_is_enabled (pts[i].control))
-      {
-	pts[i] = p;
-
-	/* Only update the threads of the current process.  */
-	for_each_thread (current_thread->id.pid (), [&] (thread_info *thread)
-	  {
-	    update_registers_callback (thread, watch, i);
-	  });
-
-	return 0;
-      }
-
-  /* We're out of watchpoints.  */
-  return -1;
-}
-
-/* Remove hardware break-/watchpoint.  */
-static int
-arm_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int len, struct raw_breakpoint *bp)
-{
-  struct process_info *proc = current_process ();
-  struct arm_linux_hw_breakpoint p, *pts;
-  int watch, i, count;
-
-  watch = arm_linux_hw_point_initialize (type, addr, len, &p);
-  if (watch < 0)
-    {
-      /* Unsupported.  */
-      return -1;
-    }
-
-  if (watch)
-    {
-      count = arm_linux_get_hw_watchpoint_count ();
-      pts = proc->priv->arch_private->wpts;
-    }
-  else
-    {
-      count = arm_linux_get_hw_breakpoint_count ();
-      pts = proc->priv->arch_private->bpts;
-    }
-
-  for (i = 0; i < count; i++)
-    if (arm_linux_hw_breakpoint_equal (&p, pts + i))
-      {
-	pts[i].control = arm_hwbp_control_disable (pts[i].control);
-
-	/* Only update the threads of the current process.  */
-	for_each_thread (current_thread->id.pid (), [&] (thread_info *thread)
-	  {
-	    update_registers_callback (thread, watch, i);
-	  });
-
-	return 0;
-      }
-
-  /* No watchpoint matched.  */
-  return -1;
-}
-
-/* Return whether current thread is stopped due to a watchpoint.  */
-static int
-arm_stopped_by_watchpoint (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-  siginfo_t siginfo;
-
-  /* We must be able to set hardware watchpoints.  */
-  if (arm_linux_get_hw_watchpoint_count () == 0)
-    return 0;
-
-  /* Retrieve siginfo.  */
-  errno = 0;
-  ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), 0, &siginfo);
-  if (errno != 0)
-    return 0;
-
-  /* This must be a hardware breakpoint.  */
-  if (siginfo.si_signo != SIGTRAP
-      || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
-    return 0;
-
-  /* If we are in a positive slot then we're looking at a breakpoint and not
-     a watchpoint.  */
-  if (siginfo.si_errno >= 0)
-    return 0;
-
-  /* Cache stopped data address for use by arm_stopped_data_address.  */
-  lwp->arch_private->stopped_data_address
-    = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
-
-  return 1;
-}
-
-/* Return data address that triggered watchpoint.  Called only if
-   arm_stopped_by_watchpoint returned true.  */
-static CORE_ADDR
-arm_stopped_data_address (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-  return lwp->arch_private->stopped_data_address;
-}
-
-/* Called when a new process is created.  */
-static struct arch_process_info *
-arm_new_process (void)
-{
-  struct arch_process_info *info = XCNEW (struct arch_process_info);
-  return info;
-}
-
-/* Called when a process is being deleted.  */
-
-static void
-arm_delete_process (struct arch_process_info *info)
-{
-  xfree (info);
-}
-
-/* Called when a new thread is detected.  */
-static void
-arm_new_thread (struct lwp_info *lwp)
-{
-  struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
-  int i;
-
-  for (i = 0; i < MAX_BPTS; i++)
-    info->bpts_changed[i] = 1;
-  for (i = 0; i < MAX_WPTS; i++)
-    info->wpts_changed[i] = 1;
-
-  lwp->arch_private = info;
-}
-
-/* Function to call when a thread is being deleted.  */
-
-static void
-arm_delete_thread (struct arch_lwp_info *arch_lwp)
-{
-  xfree (arch_lwp);
-}
-
-static void
-arm_new_fork (struct process_info *parent, struct process_info *child)
-{
-  struct arch_process_info *parent_proc_info;
-  struct arch_process_info *child_proc_info;
-  struct lwp_info *child_lwp;
-  struct arch_lwp_info *child_lwp_info;
-  int i;
-
-  /* These are allocated by linux_add_process.  */
-  gdb_assert (parent->priv != NULL
-	      && parent->priv->arch_private != NULL);
-  gdb_assert (child->priv != NULL
-	      && child->priv->arch_private != NULL);
-
-  parent_proc_info = parent->priv->arch_private;
-  child_proc_info = child->priv->arch_private;
-
-  /* Linux kernel before 2.6.33 commit
-     72f674d203cd230426437cdcf7dd6f681dad8b0d
-     will inherit hardware debug registers from parent
-     on fork/vfork/clone.  Newer Linux kernels create such tasks with
-     zeroed debug registers.
-
-     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.  The debug registers mirror will become zeroed
-     in the end before detaching the forked off process, thus making
-     this compatible with older Linux kernels too.  */
-
-  *child_proc_info = *parent_proc_info;
-
-  /* Mark all the hardware breakpoints and watchpoints as changed to
-     make sure that the registers will be updated.  */
-  child_lwp = find_lwp_pid (ptid_t (child->pid));
-  child_lwp_info = child_lwp->arch_private;
-  for (i = 0; i < MAX_BPTS; i++)
-    child_lwp_info->bpts_changed[i] = 1;
-  for (i = 0; i < MAX_WPTS; i++)
-    child_lwp_info->wpts_changed[i] = 1;
-}
-
-/* Called when resuming a thread.
-   If the debug regs have changed, update the thread's copies.  */
-static void
-arm_prepare_to_resume (struct lwp_info *lwp)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-  int pid = lwpid_of (thread);
-  struct process_info *proc = find_process_pid (pid_of (thread));
-  struct arch_process_info *proc_info = proc->priv->arch_private;
-  struct arch_lwp_info *lwp_info = lwp->arch_private;
-  int i;
-
-  for (i = 0; i < arm_linux_get_hw_breakpoint_count (); i++)
-    if (lwp_info->bpts_changed[i])
-      {
-	errno = 0;
-
-	if (arm_hwbp_control_is_enabled (proc_info->bpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid,
-		      (PTRACE_TYPE_ARG3) ((i << 1) + 1),
-		      &proc_info->bpts[i].address) < 0)
-	    perror_with_name ("Unexpected error setting breakpoint address");
-
-	if (arm_hwbp_control_is_initialized (proc_info->bpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid,
-		      (PTRACE_TYPE_ARG3) ((i << 1) + 2),
-		      &proc_info->bpts[i].control) < 0)
-	    perror_with_name ("Unexpected error setting breakpoint");
-
-	lwp_info->bpts_changed[i] = 0;
-      }
-
-  for (i = 0; i < arm_linux_get_hw_watchpoint_count (); i++)
-    if (lwp_info->wpts_changed[i])
-      {
-	errno = 0;
-
-	if (arm_hwbp_control_is_enabled (proc_info->wpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid,
-		      (PTRACE_TYPE_ARG3) -((i << 1) + 1),
-		      &proc_info->wpts[i].address) < 0)
-	    perror_with_name ("Unexpected error setting watchpoint address");
-
-	if (arm_hwbp_control_is_initialized (proc_info->wpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid,
-		      (PTRACE_TYPE_ARG3) -((i << 1) + 2),
-		      &proc_info->wpts[i].control) < 0)
-	    perror_with_name ("Unexpected error setting watchpoint");
-
-	lwp_info->wpts_changed[i] = 0;
-      }
-}
-
-/* Find the next pc for a sigreturn or rt_sigreturn syscall.  In
-   addition, set IS_THUMB depending on whether we will return to ARM
-   or Thumb code.
-   See arm-linux.h for stack layout details.  */
-static CORE_ADDR
-arm_sigreturn_next_pc (struct regcache *regcache, int svc_number,
-		       int *is_thumb)
-{
-  unsigned long sp;
-  unsigned long sp_data;
-  /* Offset of PC register.  */
-  int pc_offset = 0;
-  CORE_ADDR next_pc = 0;
-  uint32_t cpsr;
-
-  gdb_assert (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn);
-
-  collect_register_by_name (regcache, "sp", &sp);
-  (*the_target->read_memory) (sp, (unsigned char *) &sp_data, 4);
-
-  pc_offset = arm_linux_sigreturn_next_pc_offset
-    (sp, sp_data, svc_number, __NR_sigreturn == svc_number ? 1 : 0);
-
-  (*the_target->read_memory) (sp + pc_offset, (unsigned char *) &next_pc, 4);
-
-  /* Set IS_THUMB according the CPSR saved on the stack.  */
-  (*the_target->read_memory) (sp + pc_offset + 4, (unsigned char *) &cpsr, 4);
-  *is_thumb = ((cpsr & CPSR_T) != 0);
-
-  return next_pc;
-}
-
-/* When PC is at a syscall instruction, return the PC of the next
-   instruction to be executed.  */
-static CORE_ADDR
-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_mode ();
-  ULONGEST svc_number = 0;
-  struct regcache *regcache = self->regcache;
-
-  if (is_thumb)
-    {
-      collect_register (regcache, 7, &svc_number);
-      next_pc = pc + 2;
-    }
-  else
-    {
-      unsigned long this_instr;
-      unsigned long svc_operand;
-
-      target_read_memory (pc, (unsigned char *) &this_instr, 4);
-      svc_operand = (0x00ffffff & this_instr);
-
-      if (svc_operand)  /* OABI.  */
-	{
-	  svc_number = svc_operand - 0x900000;
-	}
-      else /* EABI.  */
-	{
-	  collect_register (regcache, 7, &svc_number);
-	}
-
-      next_pc = pc + 4;
-    }
-
-  /* This is a sigreturn or sigreturn_rt syscall.  */
-  if (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn)
-    {
-      /* SIGRETURN or RT_SIGRETURN may affect the arm thumb mode, so
-	 update IS_THUMB.   */
-      next_pc = arm_sigreturn_next_pc (regcache, svc_number, &is_thumb);
-    }
-
-  /* Addresses for calling Thumb functions have the bit 0 set.  */
-  if (is_thumb)
-    next_pc = MAKE_THUMB_ADDR (next_pc);
-
-  return next_pc;
-}
-
-static const struct target_desc *
-arm_read_description (void)
-{
-  unsigned long arm_hwcap = linux_get_hwcap (4);
-
-  if (arm_hwcap & HWCAP_IWMMXT)
-    return arm_linux_read_description (ARM_FP_TYPE_IWMMXT);
-
-  if (arm_hwcap & HWCAP_VFP)
-    {
-      /* Make sure that the kernel supports reading VFP registers.  Support was
-	 added in 2.6.30.  */
-      int pid = lwpid_of (current_thread);
-      errno = 0;
-      char *buf = (char *) alloca (ARM_VFP3_REGS_SIZE);
-      if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO)
-	return arm_linux_read_description (ARM_FP_TYPE_NONE);
-
-      /* NEON implies either no VFP, or VFPv3-D32.  We only support
-	 it with VFP.  */
-      if (arm_hwcap & HWCAP_NEON)
-	return aarch32_linux_read_description ();
-      else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
-	return arm_linux_read_description (ARM_FP_TYPE_VFPV3);
-      else
-	return arm_linux_read_description (ARM_FP_TYPE_VFPV2);
-    }
-
-  /* The default configuration uses legacy FPA registers, probably
-     simulated.  */
-  return arm_linux_read_description (ARM_FP_TYPE_NONE);
-}
-
-static void
-arm_arch_setup (void)
-{
-  int tid = lwpid_of (current_thread);
-  int gpregs[18];
-  struct iovec iov;
-
-  /* Query hardware watchpoint/breakpoint capabilities.  */
-  arm_linux_init_hwbp_cap (tid);
-
-  current_process ()->tdesc = arm_read_description ();
-
-  iov.iov_base = gpregs;
-  iov.iov_len = sizeof (gpregs);
-
-  /* Check if PTRACE_GETREGSET works.  */
-  if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iov) == 0)
-    have_ptrace_getregset = 1;
-  else
-    have_ptrace_getregset = 0;
-}
-
-/* Fetch the next possible PCs after the current instruction executes.  */
-
-static std::vector<CORE_ADDR>
-arm_gdbserver_get_next_pcs (struct regcache *regcache)
-{
-  struct arm_get_next_pcs next_pcs_ctx;
-
-  arm_get_next_pcs_ctor (&next_pcs_ctx,
-			 &get_next_pcs_ops,
-			 /* Byte order is ignored assumed as host.  */
-			 0,
-			 0,
-			 1,
-			 regcache);
-
-  return arm_get_next_pcs (&next_pcs_ctx);
-}
-
-/* Support for hardware single step.  */
-
-static int
-arm_supports_hardware_single_step (void)
-{
-  return 0;
-}
-
-/* Implementation of linux_target_ops method "get_syscall_trapinfo".  */
-
-static void
-arm_get_syscall_trapinfo (struct regcache *regcache, int *sysno)
-{
-  if (arm_is_thumb_mode ())
-    collect_register_by_name (regcache, "r7", sysno);
-  else
-    {
-      unsigned long pc;
-      unsigned long insn;
-
-      collect_register_by_name (regcache, "pc", &pc);
-
-      if ((*the_target->read_memory) (pc - 4, (unsigned char *) &insn, 4))
-	*sysno = UNKNOWN_SYSCALL;
-      else
-	{
-	  unsigned long svc_operand = (0x00ffffff & insn);
-
-	  if (svc_operand)
-	    {
-	      /* OABI */
-	      *sysno = svc_operand - 0x900000;
-	    }
-	  else
-	    {
-	      /* EABI */
-	      collect_register_by_name (regcache, "r7", sysno);
-	    }
-	}
-    }
-}
-
-/* Register sets without using PTRACE_GETREGSET.  */
-
-static struct regset_info arm_regsets[] = {
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0,
-    ARM_CORE_REGS_SIZE + ARM_INT_REGISTER_SIZE, GENERAL_REGS,
-    arm_fill_gregset, arm_store_gregset },
-  { PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS, 0, IWMMXT_REGS_SIZE, EXTENDED_REGS,
-    arm_fill_wmmxregset, arm_store_wmmxregset },
-  { PTRACE_GETVFPREGS, PTRACE_SETVFPREGS, 0, ARM_VFP3_REGS_SIZE, EXTENDED_REGS,
-    arm_fill_vfpregset, arm_store_vfpregset },
-  NULL_REGSET
-};
-
-static struct regsets_info arm_regsets_info =
-  {
-    arm_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info arm_usrregs_info =
-  {
-    arm_num_regs,
-    arm_regmap,
-  };
-
-static struct regs_info regs_info_arm =
-  {
-    NULL, /* regset_bitmap */
-    &arm_usrregs_info,
-    &arm_regsets_info
-  };
-
-static const struct regs_info *
-arm_regs_info (void)
-{
-  const struct target_desc *tdesc = current_process ()->tdesc;
-
-  if (have_ptrace_getregset == 1
-      && (is_aarch32_linux_description (tdesc)
-	  || arm_linux_get_tdesc_fp_type (tdesc) == ARM_FP_TYPE_VFPV3))
-    return &regs_info_aarch32;
-
-  return &regs_info_arm;
-}
-
-struct linux_target_ops the_low_target = {
-  arm_arch_setup,
-  arm_regs_info,
-  arm_cannot_fetch_register,
-  arm_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  arm_breakpoint_kind_from_pc,
-  arm_sw_breakpoint_from_kind,
-  arm_gdbserver_get_next_pcs,
-  0,
-  arm_breakpoint_at,
-  arm_supports_z_point_type,
-  arm_insert_point,
-  arm_remove_point,
-  arm_stopped_by_watchpoint,
-  arm_stopped_data_address,
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  arm_new_process,
-  arm_delete_process,
-  arm_new_thread,
-  arm_delete_thread,
-  arm_new_fork,
-  arm_prepare_to_resume,
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  arm_breakpoint_kind_from_current_state,
-  arm_supports_hardware_single_step,
-  arm_get_syscall_trapinfo,
-};
-
-void
-initialize_low_arch (void)
-{
-  initialize_low_arch_aarch32 ();
-  initialize_regsets_info (&arm_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-arm-tdesc.c ./gdb/gdbserver/linux-arm-tdesc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-arm-tdesc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-arm-tdesc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,62 +0,0 @@
-/* Copyright (C) 2019-2020 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 "server.h"
-#include "tdesc.h"
-#include "arch/arm.h"
-#include <inttypes.h>
-
-/* All possible Arm target descriptors.  */
-static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID];
-
-/* See linux-arm-tdesc.h.  */
-
-const target_desc *
-arm_linux_read_description (arm_fp_type fp_type)
-{
-  struct target_desc *tdesc = tdesc_arm_list[fp_type];
-
-  if (tdesc == nullptr)
-    {
-      tdesc = arm_create_target_description (fp_type);
-
-      static const char *expedite_regs[] = { "r11", "sp", "pc", 0 };
-      init_target_desc (tdesc, expedite_regs);
-
-      tdesc_arm_list[fp_type] = tdesc;
-    }
-
-  return tdesc;
-}
-
-/* See linux-arm-tdesc.h.  */
-
-arm_fp_type
-arm_linux_get_tdesc_fp_type (const target_desc *tdesc)
-{
-  gdb_assert (tdesc != nullptr);
-
-  /* Many of the tdesc_arm_list entries may not have been initialised yet.  This
-     is ok, because tdesc must be one of the initialised ones.  */
-  for (int i = ARM_FP_TYPE_NONE; i < ARM_FP_TYPE_INVALID; i++)
-    {
-      if (tdesc == tdesc_arm_list[i])
-	return (arm_fp_type) i;
-    }
-
-  return ARM_FP_TYPE_INVALID;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-arm-tdesc.h ./gdb/gdbserver/linux-arm-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-arm-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-arm-tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-/* Copyright (C) 2019-2020 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 GDBSERVER_LINUX_ARM_TDESC_H
-#define GDBSERVER_LINUX_ARM_TDESC_H
-
-/* Return the Arm target description with fp registers FP_TYPE.  */
-
-const target_desc * arm_linux_read_description (arm_fp_type fp_type);
-
-/* For a target description TDESC, return its fp type.  */
-
-arm_fp_type arm_linux_get_tdesc_fp_type (const target_desc *tdesc);
-
-#endif /* linux-arm-tdesc.h.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-bfin-low.c ./gdb/gdbserver/linux-bfin-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-bfin-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-bfin-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,159 +0,0 @@
-/* GNU/Linux/BFIN specific low level interface, for the remote server for GDB.
-
-   Copyright (C) 2005-2020 Free Software Foundation, Inc.
-
-   Contributed by Analog Devices, 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 "server.h"
-#include "linux-low.h"
-#include <asm/ptrace.h>
-
-/* Defined in auto-generated file reg-bfin.c.  */
-void init_registers_bfin (void);
-extern const struct target_desc *tdesc_bfin;
-
-static int bfin_regmap[] =
-{
-  PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7,
-  PT_P0, PT_P1, PT_P2, PT_P3, PT_P4, PT_P5, PT_USP, PT_FP,
-  PT_I0, PT_I1, PT_I2, PT_I3, PT_M0, PT_M1, PT_M2, PT_M3,
-  PT_B0, PT_B1, PT_B2, PT_B3, PT_L0, PT_L1, PT_L2, PT_L3,
-  PT_A0X, PT_A0W, PT_A1X, PT_A1W, PT_ASTAT, PT_RETS,
-  PT_LC0, PT_LT0, PT_LB0, PT_LC1, PT_LT1, PT_LB1,
-  -1 /* PT_CYCLES */, -1 /* PT_CYCLES2 */,
-  -1 /* PT_USP */, PT_SEQSTAT, PT_SYSCFG, PT_PC, PT_RETX, PT_RETN, PT_RETE,
-  PT_PC,
-};
-
-#define bfin_num_regs ARRAY_SIZE (bfin_regmap)
-
-static int
-bfin_cannot_store_register (int regno)
-{
-  return (regno >= bfin_num_regs);
-}
-
-static int
-bfin_cannot_fetch_register (int regno)
-{
-  return (regno >= bfin_num_regs);
-}
-
-#define bfin_breakpoint_len 2
-static const gdb_byte bfin_breakpoint[bfin_breakpoint_len] = {0xa1, 0x00};
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-bfin_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = bfin_breakpoint_len;
-  return bfin_breakpoint;
-}
-
-static int
-bfin_breakpoint_at (CORE_ADDR where)
-{
-  unsigned char insn[bfin_breakpoint_len];
-
-  read_inferior_memory(where, insn, bfin_breakpoint_len);
-  if (insn[0] == bfin_breakpoint[0]
-      && insn[1] == bfin_breakpoint[1])
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-static void
-bfin_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_bfin;
-}
-
-/* Support for hardware single step.  */
-
-static int
-bfin_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static struct usrregs_info bfin_usrregs_info =
-  {
-    bfin_num_regs,
-    bfin_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &bfin_usrregs_info,
-  };
-
-static const struct regs_info *
-bfin_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  bfin_arch_setup,
-  bfin_regs_info,
-  bfin_cannot_fetch_register,
-  bfin_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  bfin_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  2,
-  bfin_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  bfin_supports_hardware_single_step,
-};
-
-
-void
-initialize_low_arch (void)
-{
-  init_registers_bfin ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-cris-low.c ./gdb/gdbserver/linux-cris-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-cris-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-cris-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,132 +0,0 @@
-/* GNU/Linux/CRIS specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-#include "nat/gdb_ptrace.h"
-
-/* Defined in auto-generated file reg-cris.c.  */
-void init_registers_cris (void);
-extern const struct target_desc *tdesc_cris;
-
-/* CRISv10 */
-#define cris_num_regs 32
-
-/* Locations need to match <include/asm/arch/ptrace.h>.  */
-static int cris_regmap[] = {
-  15*4, 14*4, 13*4, 12*4,
-  11*4, 10*4, 9*4, 8*4,
-  7*4, 6*4, 5*4, 4*4,
-  3*4, 2*4, 23*4, 19*4,
-
-  -1, -1, -1, -1,
-  -1, 17*4, -1, 16*4,
-  -1, -1, -1, 18*4,
-  -1, 17*4, -1, -1
-
-};
-
-static int
-cris_cannot_store_register (int regno)
-{
-  if (cris_regmap[regno] == -1)
-    return 1;
-
-  return (regno >= cris_num_regs);
-}
-
-static int
-cris_cannot_fetch_register (int regno)
-{
-  if (cris_regmap[regno] == -1)
-    return 1;
-
-  return (regno >= cris_num_regs);
-}
-
-static const unsigned short cris_breakpoint = 0xe938;
-#define cris_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-cris_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = cris_breakpoint_len;
-  return (const gdb_byte *) &cris_breakpoint;
-}
-
-static int
-cris_breakpoint_at (CORE_ADDR where)
-{
-  unsigned short insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn,
-			      cris_breakpoint_len);
-  if (insn == cris_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-static void
-cris_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_cris;
-}
-
-static struct usrregs_info cris_usrregs_info =
-  {
-    cris_num_regs,
-    cris_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &cris_usrregs_info,
-  };
-
-static const struct regs_info *
-cris_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  cris_arch_setup,
-  cris_regs_info,
-  cris_cannot_fetch_register,
-  cris_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  cris_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  0,
-  cris_breakpoint_at,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_cris ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-crisv32-low.c ./gdb/gdbserver/linux-crisv32-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-crisv32-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-crisv32-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,440 +0,0 @@
-/* GNU/Linux/CRIS specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-#include "nat/gdb_ptrace.h"
-
-/* Defined in auto-generated file reg-crisv32.c.  */
-void init_registers_crisv32 (void);
-extern const struct target_desc *tdesc_crisv32;
-
-/* CRISv32 */
-#define cris_num_regs 49
-
-#ifndef PTRACE_GET_THREAD_AREA
-#define PTRACE_GET_THREAD_AREA 25
-#endif
-
-/* Note: Ignoring USP (having the stack pointer in two locations causes trouble
-   without any significant gain).  */
-
-/* Locations need to match <include/asm/arch/ptrace.h>.  */
-static int cris_regmap[] = {
-  1*4, 2*4, 3*4, 4*4,
-  5*4, 6*4, 7*4, 8*4,
-  9*4, 10*4, 11*4, 12*4,
-  13*4, 14*4, 24*4, 15*4,
-
-  -1, -1, -1, 16*4,
-  -1, 22*4, 23*4, 17*4,
-  -1, -1, 21*4, 20*4,
-  -1, 19*4, -1, 18*4,
-
-  25*4,
-
-  26*4, -1,   -1,   29*4,
-  30*4, 31*4, 32*4, 33*4,
-  34*4, 35*4, 36*4, 37*4,
-  38*4, 39*4, 40*4, -1
-
-};
-
-static const unsigned short cris_breakpoint = 0xe938;
-#define cris_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-cris_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = cris_breakpoint_len;
-  return (const gdb_byte *) &cris_breakpoint;
-}
-
-static int
-cris_breakpoint_at (CORE_ADDR where)
-{
-  unsigned short insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn,
-			      cris_breakpoint_len);
-  if (insn == cris_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-static void
-cris_write_data_breakpoint (struct regcache *regcache,
-			    int bp, unsigned long start, unsigned long end)
-{
-  switch (bp)
-    {
-    case 0:
-      supply_register_by_name (regcache, "s3", &start);
-      supply_register_by_name (regcache, "s4", &end);
-      break;
-    case 1:
-      supply_register_by_name (regcache, "s5", &start);
-      supply_register_by_name (regcache, "s6", &end);
-      break;
-    case 2:
-      supply_register_by_name (regcache, "s7", &start);
-      supply_register_by_name (regcache, "s8", &end);
-      break;
-    case 3:
-      supply_register_by_name (regcache, "s9", &start);
-      supply_register_by_name (regcache, "s10", &end);
-      break;
-    case 4:
-      supply_register_by_name (regcache, "s11", &start);
-      supply_register_by_name (regcache, "s12", &end);
-      break;
-    case 5:
-      supply_register_by_name (regcache, "s13", &start);
-      supply_register_by_name (regcache, "s14", &end);
-      break;
-    }
-}
-
-static int
-cris_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_READ_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-static int
-cris_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		   int len, struct raw_breakpoint *bp)
-{
-  int bp;
-  unsigned long bp_ctrl;
-  unsigned long start, end;
-  unsigned long ccs;
-  struct regcache *regcache;
-
-  regcache = get_thread_regcache (current_thread, 1);
-
-  /* Read watchpoints are set as access watchpoints, because of GDB's
-     inability to deal with pure read watchpoints.  */
-  if (type == raw_bkpt_type_read_wp)
-    type = raw_bkpt_type_access_wp;
-
-  /* Get the configuration register.  */
-  collect_register_by_name (regcache, "s0", &bp_ctrl);
-
-  /* The watchpoint allocation scheme is the simplest possible.
-     For example, if a region is watched for read and
-     a write watch is requested, a new watchpoint will
-     be used.  Also, if a watch for a region that is already
-     covered by one or more existing watchpoints, a new
-     watchpoint will be used.  */
-
-  /* First, find a free data watchpoint.  */
-  for (bp = 0; bp < 6; bp++)
-    {
-      /* Each data watchpoint's control registers occupy 2 bits
-	 (hence the 3), starting at bit 2 for D0 (hence the 2)
-	 with 4 bits between for each watchpoint (yes, the 4).  */
-      if (!(bp_ctrl & (0x3 << (2 + (bp * 4)))))
-	break;
-    }
-
-  if (bp > 5)
-    {
-      /* We're out of watchpoints.  */
-      return -1;
-    }
-
-  /* Configure the control register first.  */
-  if (type == raw_bkpt_type_read_wp || type == raw_bkpt_type_access_wp)
-    {
-      /* Trigger on read.  */
-      bp_ctrl |= (1 << (2 + bp * 4));
-    }
-  if (type == raw_bkpt_type_write_wp || type == raw_bkpt_type_access_wp)
-    {
-      /* Trigger on write.  */
-      bp_ctrl |= (2 << (2 + bp * 4));
-    }
-
-  /* Setup the configuration register.  */
-  supply_register_by_name (regcache, "s0", &bp_ctrl);
-
-  /* Setup the range.  */
-  start = addr;
-  end = addr + len - 1;
-
-  /* Configure the watchpoint register.  */
-  cris_write_data_breakpoint (regcache, bp, start, end);
-
-  collect_register_by_name (regcache, "ccs", &ccs);
-  /* Set the S1 flag to enable watchpoints.  */
-  ccs |= (1 << 19);
-  supply_register_by_name (regcache, "ccs", &ccs);
-
-  return 0;
-}
-
-static int
-cris_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, int len,
-		   struct raw_breakpoint *bp)
-{
-  int bp;
-  unsigned long bp_ctrl;
-  unsigned long start, end;
-  struct regcache *regcache;
-  unsigned long bp_d_regs[12];
-
-  regcache = get_thread_regcache (current_thread, 1);
-
-  /* Read watchpoints are set as access watchpoints, because of GDB's
-     inability to deal with pure read watchpoints.  */
-  if (type == raw_bkpt_type_read_wp)
-    type = raw_bkpt_type_access_wp;
-
-  /* Get the configuration register.  */
-  collect_register_by_name (regcache, "s0", &bp_ctrl);
-
-  /* Try to find a watchpoint that is configured for the
-     specified range, then check that read/write also matches.  */
-
-  /* Ugly pointer arithmetic, since I cannot rely on a
-     single switch (addr) as there may be several watchpoints with
-     the same start address for example.  */
-
-  /* Get all range registers to simplify search.  */
-  collect_register_by_name (regcache, "s3", &bp_d_regs[0]);
-  collect_register_by_name (regcache, "s4", &bp_d_regs[1]);
-  collect_register_by_name (regcache, "s5", &bp_d_regs[2]);
-  collect_register_by_name (regcache, "s6", &bp_d_regs[3]);
-  collect_register_by_name (regcache, "s7", &bp_d_regs[4]);
-  collect_register_by_name (regcache, "s8", &bp_d_regs[5]);
-  collect_register_by_name (regcache, "s9", &bp_d_regs[6]);
-  collect_register_by_name (regcache, "s10", &bp_d_regs[7]);
-  collect_register_by_name (regcache, "s11", &bp_d_regs[8]);
-  collect_register_by_name (regcache, "s12", &bp_d_regs[9]);
-  collect_register_by_name (regcache, "s13", &bp_d_regs[10]);
-  collect_register_by_name (regcache, "s14", &bp_d_regs[11]);
-
-  for (bp = 0; bp < 6; bp++)
-    {
-      if (bp_d_regs[bp * 2] == addr
-	  && bp_d_regs[bp * 2 + 1] == (addr + len - 1)) {
-	/* Matching range.  */
-	int bitpos = 2 + bp * 4;
-	int rw_bits;
-
-	/* Read/write bits for this BP.  */
-	rw_bits = (bp_ctrl & (0x3 << bitpos)) >> bitpos;
-
-	if ((type == raw_bkpt_type_read_wp && rw_bits == 0x1)
-	    || (type == raw_bkpt_type_write_wp && rw_bits == 0x2)
-	    || (type == raw_bkpt_type_access_wp && rw_bits == 0x3))
-	  {
-	    /* Read/write matched.  */
-	    break;
-	  }
-      }
-    }
-
-  if (bp > 5)
-    {
-      /* No watchpoint matched.  */
-      return -1;
-    }
-
-  /* Found a matching watchpoint.  Now, deconfigure it by
-     both disabling read/write in bp_ctrl and zeroing its
-     start/end addresses.  */
-  bp_ctrl &= ~(3 << (2 + (bp * 4)));
-  /* Setup the configuration register.  */
-  supply_register_by_name (regcache, "s0", &bp_ctrl);
-
-  start = end = 0;
-  /* Configure the watchpoint register.  */
-  cris_write_data_breakpoint (regcache, bp, start, end);
-
-  /* Note that we don't clear the S1 flag here.  It's done when continuing.  */
-  return 0;
-}
-
-static int
-cris_stopped_by_watchpoint (void)
-{
-  unsigned long exs;
-  struct regcache *regcache = get_thread_regcache (current_thread, 1);
-
-  collect_register_by_name (regcache, "exs", &exs);
-
-  return (((exs & 0xff00) >> 8) == 0xc);
-}
-
-static CORE_ADDR
-cris_stopped_data_address (void)
-{
-  unsigned long eda;
-  struct regcache *regcache = get_thread_regcache (current_thread, 1);
-
-  collect_register_by_name (regcache, "eda", &eda);
-
-  /* FIXME: Possibly adjust to match watched range.  */
-  return eda;
-}
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-                    lwpid_t lwpid, int idx, void **base)
-{
-  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;
-}
-
-static void
-cris_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-  for (i = 0; i < cris_num_regs; i++)
-    {
-      if (cris_regmap[i] != -1)
-	collect_register (regcache, i, ((char *) buf) + cris_regmap[i]);
-    }
-}
-
-static void
-cris_store_gregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-
-  for (i = 0; i < cris_num_regs; i++)
-    {
-      if (cris_regmap[i] != -1)
-	supply_register (regcache, i, ((char *) buf) + cris_regmap[i]);
-    }
-}
-
-static void
-cris_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_crisv32;
-}
-
-/* Support for hardware single step.  */
-
-static int
-cris_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static struct regset_info cris_regsets[] = {
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, cris_num_regs * 4,
-    GENERAL_REGS, cris_fill_gregset, cris_store_gregset },
-  NULL_REGSET
-};
-
-
-static struct regsets_info cris_regsets_info =
-  {
-    cris_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info cris_usrregs_info =
-  {
-    cris_num_regs,
-    cris_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &cris_usrregs_info,
-    &cris_regsets_info
-  };
-
-static const struct regs_info *
-cris_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  cris_arch_setup,
-  cris_regs_info,
-  NULL,
-  NULL,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  cris_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  0,
-  cris_breakpoint_at,
-  cris_supports_z_point_type,
-  cris_insert_point,
-  cris_remove_point,
-  cris_stopped_by_watchpoint,
-  cris_stopped_data_address,
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  cris_supports_hardware_single_step,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_crisv32 ();
-
-  initialize_regsets_info (&cris_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-i386-ipa.c ./gdb/gdbserver/linux-i386-ipa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-i386-ipa.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-i386-ipa.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,294 +0,0 @@
-/* GNU/Linux/x86 specific low level interface, for the in-process
-   agent library for GDB.
-
-   Copyright (C) 2010-2020 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 "server.h"
-#include <sys/mman.h>
-#include "tracepoint.h"
-#include "linux-x86-tdesc.h"
-#include "gdbsupport/x86-xstate.h"
-
-/* GDB register numbers.  */
-
-enum i386_gdb_regnum
-{
-  I386_EAX_REGNUM,		/* %eax */
-  I386_ECX_REGNUM,		/* %ecx */
-  I386_EDX_REGNUM,		/* %edx */
-  I386_EBX_REGNUM,		/* %ebx */
-  I386_ESP_REGNUM,		/* %esp */
-  I386_EBP_REGNUM,		/* %ebp */
-  I386_ESI_REGNUM,		/* %esi */
-  I386_EDI_REGNUM,		/* %edi */
-  I386_EIP_REGNUM,		/* %eip */
-  I386_EFLAGS_REGNUM,		/* %eflags */
-  I386_CS_REGNUM,		/* %cs */
-  I386_SS_REGNUM,		/* %ss */
-  I386_DS_REGNUM,		/* %ds */
-  I386_ES_REGNUM,		/* %es */
-  I386_FS_REGNUM,		/* %fs */
-  I386_GS_REGNUM,		/* %gs */
-  I386_ST0_REGNUM		/* %st(0) */
-};
-
-#define i386_num_regs 16
-
-#define FT_CR_EAX 15
-#define FT_CR_ECX 14
-#define FT_CR_EDX 13
-#define FT_CR_EBX 12
-#define FT_CR_UESP 11
-#define FT_CR_EBP 10
-#define FT_CR_ESI 9
-#define FT_CR_EDI 8
-#define FT_CR_EIP 7
-#define FT_CR_EFL 6
-#define FT_CR_DS 5
-#define FT_CR_ES 4
-#define FT_CR_FS 3
-#define FT_CR_GS 2
-#define FT_CR_SS 1
-#define FT_CR_CS 0
-
-/* Mapping between the general-purpose registers in jump tracepoint
-   format and GDB's register array layout.  */
-
-static const int i386_ft_collect_regmap[] =
-{
-  FT_CR_EAX * 4, FT_CR_ECX * 4, FT_CR_EDX * 4, FT_CR_EBX * 4,
-  FT_CR_UESP * 4, FT_CR_EBP * 4, FT_CR_ESI * 4, FT_CR_EDI * 4,
-  FT_CR_EIP * 4, FT_CR_EFL * 4, FT_CR_CS * 4, FT_CR_SS * 4,
-  FT_CR_DS * 4, FT_CR_ES * 4, FT_CR_FS * 4, FT_CR_GS * 4
-};
-
-void
-supply_fast_tracepoint_registers (struct regcache *regcache,
-				  const unsigned char *buf)
-{
-  int i;
-
-  for (i = 0; i < i386_num_regs; i++)
-    {
-      int regval;
-
-      if (i >= I386_CS_REGNUM && i <= I386_GS_REGNUM)
-	regval = *(short *) (((char *) buf) + i386_ft_collect_regmap[i]);
-      else
-	regval = *(int *) (((char *) buf) + i386_ft_collect_regmap[i]);
-
-      supply_register (regcache, i, &regval);
-    }
-}
-
-ULONGEST
-get_raw_reg (const unsigned char *raw_regs, int regnum)
-{
-  /* This should maybe be allowed to return an error code, or perhaps
-     better, have the emit_reg detect this, and emit a constant zero,
-     or something.  */
-
-  if (regnum > i386_num_regs)
-    return 0;
-  else if (regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM)
-    return *(short *) (raw_regs + i386_ft_collect_regmap[regnum]);
-  else
-    return *(int *) (raw_regs + i386_ft_collect_regmap[regnum]);
-}
-
-#ifdef HAVE_UST
-
-#include <ust/processor.h>
-
-/* "struct registers" is the UST object type holding the registers at
-   the time of the static tracepoint marker call.  This doesn't
-   contain EIP, but we know what it must have been (the marker
-   address).  */
-
-#define ST_REGENTRY(REG)			\
-  {						\
-    offsetof (struct registers, REG),		\
-    sizeof (((struct registers *) NULL)->REG)	\
-  }
-
-static struct
-{
-  int offset;
-  int size;
-} i386_st_collect_regmap[] =
-  {
-    ST_REGENTRY(eax),
-    ST_REGENTRY(ecx),
-    ST_REGENTRY(edx),
-    ST_REGENTRY(ebx),
-    ST_REGENTRY(esp),
-    ST_REGENTRY(ebp),
-    ST_REGENTRY(esi),
-    ST_REGENTRY(edi),
-    { -1, 0 }, /* eip */
-    ST_REGENTRY(eflags),
-    ST_REGENTRY(cs),
-    ST_REGENTRY(ss),
-  };
-
-#define i386_NUM_ST_COLLECT_GREGS \
-  (sizeof (i386_st_collect_regmap) / sizeof (i386_st_collect_regmap[0]))
-
-void
-supply_static_tracepoint_registers (struct regcache *regcache,
-				    const unsigned char *buf,
-				    CORE_ADDR pc)
-{
-  int i;
-  unsigned int newpc = pc;
-
-  supply_register (regcache, I386_EIP_REGNUM, &newpc);
-
-  for (i = 0; i < i386_NUM_ST_COLLECT_GREGS; i++)
-    if (i386_st_collect_regmap[i].offset != -1)
-      {
-	switch (i386_st_collect_regmap[i].size)
-	  {
-	  case 4:
-	    supply_register (regcache, i,
-			     ((char *) buf)
-			     + i386_st_collect_regmap[i].offset);
-	    break;
-	  case 2:
-	    {
-	      unsigned long reg
-		= * (short *) (((char *) buf)
-			       + i386_st_collect_regmap[i].offset);
-	      reg &= 0xffff;
-	      supply_register (regcache, i, &reg);
-	    }
-	    break;
-	  default:
-	    internal_error (__FILE__, __LINE__, "unhandled register size: %d",
-			    i386_st_collect_regmap[i].size);
-	  }
-      }
-}
-
-#endif /* HAVE_UST */
-
-
-/* This is only needed because reg-i386-linux-lib.o references it.  We
-   may use it proper at some point.  */
-const char *gdbserver_xmltarget;
-
-/* Attempt to allocate memory for trampolines in the first 64 KiB of
-   memory to enable smaller jump patches.  */
-
-static void
-initialize_fast_tracepoint_trampoline_buffer (void)
-{
-  const CORE_ADDR buffer_end = 64 * 1024;
-  /* Ensure that the buffer will be at least 1 KiB in size, which is
-     enough space for over 200 fast tracepoints.  */
-  const int min_buffer_size = 1024;
-  char buf[IPA_BUFSIZ];
-  CORE_ADDR mmap_min_addr = buffer_end + 1;
-  ULONGEST buffer_size;
-  FILE *f = fopen ("/proc/sys/vm/mmap_min_addr", "r");
-
-  if (!f)
-    {    
-      snprintf (buf, sizeof (buf), "mmap_min_addr open failed: %s",
-		safe_strerror (errno));
-      set_trampoline_buffer_space (0, 0, buf);
-      return;
-    }
-
-  if (fgets (buf, IPA_BUFSIZ, f))
-    sscanf (buf, "%llu", &mmap_min_addr);
-      
-  fclose (f);
-      
-  buffer_size = buffer_end - mmap_min_addr;
-
-  if (buffer_size >= min_buffer_size)
-    {
-      if (mmap ((void *) (uintptr_t) mmap_min_addr, buffer_size,
-		PROT_READ | PROT_EXEC | PROT_WRITE,
-		MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
-		-1, 0)
-	  != MAP_FAILED)
-	set_trampoline_buffer_space (mmap_min_addr, buffer_end, NULL);
-      else
-	{
-	  snprintf (buf, IPA_BUFSIZ, "low-64K-buffer mmap() failed: %s",
-		    safe_strerror (errno));
-	  set_trampoline_buffer_space (0, 0, buf);
-	}
-    }
-  else
-    {
-      snprintf (buf, IPA_BUFSIZ, "mmap_min_addr is %d, must be %d or less",
-		(int) mmap_min_addr, (int) buffer_end - min_buffer_size);
-      set_trampoline_buffer_space (0, 0, buf);
-    }
-}
-
-/* Map the tdesc index to xcr0 mask.  */
-static uint64_t idx2mask[X86_TDESC_LAST] = {
-  X86_XSTATE_X87_MASK,
-  X86_XSTATE_SSE_MASK,
-  X86_XSTATE_AVX_MASK,
-  X86_XSTATE_MPX_MASK,
-  X86_XSTATE_AVX_MPX_MASK,
-  X86_XSTATE_AVX_AVX512_MASK,
-  X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
-};
-
-/* Return target_desc to use for IPA, given the tdesc index passed by
-   gdbserver.  */
-
-const struct target_desc *
-get_ipa_tdesc (int idx)
-{
-  if (idx >= X86_TDESC_LAST)
-    {
-      internal_error (__FILE__, __LINE__,
-		      "unknown ipa tdesc index: %d", idx);
-    }
-  return i386_linux_read_description (idx2mask[idx]);
-}
-
-/* Allocate buffer for the jump pads.  On i386, we can reach an arbitrary
-   address with a jump instruction, so just allocate normally.  */
-
-void *
-alloc_jump_pad_buffer (size_t size)
-{
-  void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
-		    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-  if (res == MAP_FAILED)
-    return NULL;
-
-  return res;
-}
-
-void
-initialize_low_tracepoint (void)
-{
-  initialize_fast_tracepoint_trampoline_buffer ();
-  for (auto i = 0; i < X86_TDESC_LAST; i++)
-    i386_linux_read_description (idx2mask[i]);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ia64-low.c ./gdb/gdbserver/linux-ia64-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ia64-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-ia64-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,360 +0,0 @@
-/* GNU/Linux/IA64 specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-/* Defined in auto-generated file reg-ia64.c.  */
-void init_registers_ia64 (void);
-extern const struct target_desc *tdesc_ia64;
-
-#define ia64_num_regs 462
-
-#include <asm/ptrace_offsets.h>
-
-static int ia64_regmap[] =
-  {
-    /* general registers */
-    -1,		/* gr0 not available; i.e, it's always zero */
-    PT_R1,
-    PT_R2,
-    PT_R3,
-    PT_R4,
-    PT_R5,
-    PT_R6,
-    PT_R7,
-    PT_R8,
-    PT_R9,
-    PT_R10,
-    PT_R11,
-    PT_R12,
-    PT_R13,
-    PT_R14,
-    PT_R15,
-    PT_R16,
-    PT_R17,
-    PT_R18,
-    PT_R19,
-    PT_R20,
-    PT_R21,
-    PT_R22,
-    PT_R23,
-    PT_R24,
-    PT_R25,
-    PT_R26,
-    PT_R27,
-    PT_R28,
-    PT_R29,
-    PT_R30,
-    PT_R31,
-    /* gr32 through gr127 not directly available via the ptrace interface */
-    -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,
-    /* Floating point registers */
-    -1, -1,	/* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
-    PT_F2,
-    PT_F3,
-    PT_F4,
-    PT_F5,
-    PT_F6,
-    PT_F7,
-    PT_F8,
-    PT_F9,
-    PT_F10,
-    PT_F11,
-    PT_F12,
-    PT_F13,
-    PT_F14,
-    PT_F15,
-    PT_F16,
-    PT_F17,
-    PT_F18,
-    PT_F19,
-    PT_F20,
-    PT_F21,
-    PT_F22,
-    PT_F23,
-    PT_F24,
-    PT_F25,
-    PT_F26,
-    PT_F27,
-    PT_F28,
-    PT_F29,
-    PT_F30,
-    PT_F31,
-    PT_F32,
-    PT_F33,
-    PT_F34,
-    PT_F35,
-    PT_F36,
-    PT_F37,
-    PT_F38,
-    PT_F39,
-    PT_F40,
-    PT_F41,
-    PT_F42,
-    PT_F43,
-    PT_F44,
-    PT_F45,
-    PT_F46,
-    PT_F47,
-    PT_F48,
-    PT_F49,
-    PT_F50,
-    PT_F51,
-    PT_F52,
-    PT_F53,
-    PT_F54,
-    PT_F55,
-    PT_F56,
-    PT_F57,
-    PT_F58,
-    PT_F59,
-    PT_F60,
-    PT_F61,
-    PT_F62,
-    PT_F63,
-    PT_F64,
-    PT_F65,
-    PT_F66,
-    PT_F67,
-    PT_F68,
-    PT_F69,
-    PT_F70,
-    PT_F71,
-    PT_F72,
-    PT_F73,
-    PT_F74,
-    PT_F75,
-    PT_F76,
-    PT_F77,
-    PT_F78,
-    PT_F79,
-    PT_F80,
-    PT_F81,
-    PT_F82,
-    PT_F83,
-    PT_F84,
-    PT_F85,
-    PT_F86,
-    PT_F87,
-    PT_F88,
-    PT_F89,
-    PT_F90,
-    PT_F91,
-    PT_F92,
-    PT_F93,
-    PT_F94,
-    PT_F95,
-    PT_F96,
-    PT_F97,
-    PT_F98,
-    PT_F99,
-    PT_F100,
-    PT_F101,
-    PT_F102,
-    PT_F103,
-    PT_F104,
-    PT_F105,
-    PT_F106,
-    PT_F107,
-    PT_F108,
-    PT_F109,
-    PT_F110,
-    PT_F111,
-    PT_F112,
-    PT_F113,
-    PT_F114,
-    PT_F115,
-    PT_F116,
-    PT_F117,
-    PT_F118,
-    PT_F119,
-    PT_F120,
-    PT_F121,
-    PT_F122,
-    PT_F123,
-    PT_F124,
-    PT_F125,
-    PT_F126,
-    PT_F127,
-    /* predicate registers - we don't fetch these individually */
-    -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,
-    /* branch registers */
-    PT_B0,
-    PT_B1,
-    PT_B2,
-    PT_B3,
-    PT_B4,
-    PT_B5,
-    PT_B6,
-    PT_B7,
-    /* virtual frame pointer and virtual return address pointer */
-    -1, -1,
-    /* other registers */
-    PT_PR,
-    PT_CR_IIP,	/* ip */
-    PT_CR_IPSR, /* psr */
-    PT_CFM,	/* cfm */
-    /* kernel registers not visible via ptrace interface (?) */
-    -1, -1, -1, -1, -1, -1, -1, -1,
-    /* hole */
-    -1, -1, -1, -1, -1, -1, -1, -1,
-    PT_AR_RSC,
-    PT_AR_BSP,
-    PT_AR_BSPSTORE,
-    PT_AR_RNAT,
-    -1,
-    -1,		/* Not available: FCR, IA32 floating control register */
-    -1, -1,
-    -1,		/* Not available: EFLAG */
-    -1,		/* Not available: CSD */
-    -1,		/* Not available: SSD */
-    -1,		/* Not available: CFLG */
-    -1,		/* Not available: FSR */
-    -1,		/* Not available: FIR */
-    -1,		/* Not available: FDR */
-    -1,
-    PT_AR_CCV,
-    -1, -1, -1,
-    PT_AR_UNAT,
-    -1, -1, -1,
-    PT_AR_FPSR,
-    -1, -1, -1,
-    -1,		/* Not available: ITC */
-    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    -1, -1, -1, -1, -1, -1, -1, -1, -1,
-    PT_AR_PFS,
-    PT_AR_LC,
-    PT_AR_EC,
-    -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,
-  };
-
-static int
-ia64_cannot_store_register (int regno)
-{
-  return 0;
-}
-
-static int
-ia64_cannot_fetch_register (int regno)
-{
-  return 0;
-}
-
-/* GDB register numbers.  */
-#define IA64_GR0_REGNUM		0
-#define IA64_FR0_REGNUM		128
-#define IA64_FR1_REGNUM		129
-
-static int
-ia64_fetch_register (struct regcache *regcache, int regnum)
-{
-  /* r0 cannot be fetched but is always zero.  */
-  if (regnum == IA64_GR0_REGNUM)
-    {
-      const gdb_byte zero[8] = { 0 };
-
-      gdb_assert (sizeof (zero) == register_size (regcache->tdesc, regnum));
-      supply_register (regcache, regnum, zero);
-      return 1;
-    }
-
-  /* fr0 cannot be fetched but is always zero.  */
-  if (regnum == IA64_FR0_REGNUM)
-    {
-      const gdb_byte f_zero[16] = { 0 };
-
-      gdb_assert (sizeof (f_zero) == register_size (regcache->tdesc, regnum));
-      supply_register (regcache, regnum, f_zero);
-      return 1;
-    }
-
-  /* fr1 cannot be fetched but is always one (1.0).  */
-  if (regnum == IA64_FR1_REGNUM)
-    {
-      const gdb_byte f_one[16] =
-	{ 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0xff, 0, 0, 0, 0, 0, 0 };
-
-      gdb_assert (sizeof (f_one) == register_size (regcache->tdesc, regnum));
-      supply_register (regcache, regnum, f_one);
-      return 1;
-    }
-
-  return 0;
-}
-
-static struct usrregs_info ia64_usrregs_info =
-  {
-    ia64_num_regs,
-    ia64_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &ia64_usrregs_info
-  };
-
-static const struct regs_info *
-ia64_regs_info (void)
-{
-  return &regs_info;
-}
-
-static void
-ia64_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_ia64;
-}
-
-
-struct linux_target_ops the_low_target = {
-  ia64_arch_setup,
-  ia64_regs_info,
-  ia64_cannot_fetch_register,
-  ia64_cannot_store_register,
-  ia64_fetch_register,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_ia64 ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-low.c ./gdb/gdbserver/linux-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,7492 +0,0 @@
-/* Low level interface to ptrace, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-#include "nat/linux-osdata.h"
-#include "gdbsupport/agent.h"
-#include "tdesc.h"
-#include "gdbsupport/rsp-low.h"
-#include "gdbsupport/signals-state-save-restore.h"
-#include "nat/linux-nat.h"
-#include "nat/linux-waitpid.h"
-#include "gdbsupport/gdb_wait.h"
-#include "nat/gdb_ptrace.h"
-#include "nat/linux-ptrace.h"
-#include "nat/linux-procfs.h"
-#include "nat/linux-personality.h"
-#include <signal.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/syscall.h>
-#include <sched.h>
-#include <ctype.h>
-#include <pwd.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <sys/vfs.h>
-#include <sys/uio.h>
-#include "gdbsupport/filestuff.h"
-#include "tracepoint.h"
-#include "hostio.h"
-#include <inttypes.h>
-#include "gdbsupport/common-inferior.h"
-#include "nat/fork-inferior.h"
-#include "gdbsupport/environ.h"
-#include "gdbsupport/gdb-sigmask.h"
-#include "gdbsupport/scoped_restore.h"
-#ifndef ELFMAG0
-/* Don't include <linux/elf.h> here.  If it got included by gdb_proc_service.h
-   then ELFMAG0 will have been defined.  If it didn't get included by
-   gdb_proc_service.h then including it will likely introduce a duplicate
-   definition of elf_fpregset_t.  */
-#include <elf.h>
-#endif
-#include "nat/linux-namespaces.h"
-
-#ifdef HAVE_PERSONALITY
-# include <sys/personality.h>
-# if !HAVE_DECL_ADDR_NO_RANDOMIZE
-#  define ADDR_NO_RANDOMIZE 0x0040000
-# endif
-#endif
-
-#ifndef O_LARGEFILE
-#define O_LARGEFILE 0
-#endif
-
-#ifndef AT_HWCAP2
-#define AT_HWCAP2 26
-#endif
-
-/* Some targets did not define these ptrace constants from the start,
-   so gdbserver defines them locally here.  In the future, these may
-   be removed after they are added to asm/ptrace.h.  */
-#if !(defined(PT_TEXT_ADDR) \
-      || defined(PT_DATA_ADDR) \
-      || defined(PT_TEXT_END_ADDR))
-#if defined(__mcoldfire__)
-/* These are still undefined in 3.10 kernels.  */
-#define PT_TEXT_ADDR 49*4
-#define PT_DATA_ADDR 50*4
-#define PT_TEXT_END_ADDR  51*4
-/* BFIN already defines these since at least 2.6.32 kernels.  */
-#elif defined(BFIN)
-#define PT_TEXT_ADDR 220
-#define PT_TEXT_END_ADDR 224
-#define PT_DATA_ADDR 228
-/* These are still undefined in 3.10 kernels.  */
-#elif defined(__TMS320C6X__)
-#define PT_TEXT_ADDR     (0x10000*4)
-#define PT_DATA_ADDR     (0x10004*4)
-#define PT_TEXT_END_ADDR (0x10008*4)
-#endif
-#endif
-
-#ifdef HAVE_LINUX_BTRACE
-# include "nat/linux-btrace.h"
-# include "gdbsupport/btrace-common.h"
-#endif
-
-#ifndef HAVE_ELF32_AUXV_T
-/* Copied from glibc's elf.h.  */
-typedef struct
-{
-  uint32_t a_type;		/* Entry type */
-  union
-    {
-      uint32_t a_val;		/* Integer value */
-      /* We use to have pointer elements added here.  We cannot do that,
-	 though, since it does not work when using 32-bit definitions
-	 on 64-bit platforms and vice versa.  */
-    } a_un;
-} Elf32_auxv_t;
-#endif
-
-#ifndef HAVE_ELF64_AUXV_T
-/* Copied from glibc's elf.h.  */
-typedef struct
-{
-  uint64_t a_type;		/* Entry type */
-  union
-    {
-      uint64_t a_val;		/* Integer value */
-      /* We use to have pointer elements added here.  We cannot do that,
-	 though, since it does not work when using 32-bit definitions
-	 on 64-bit platforms and vice versa.  */
-    } a_un;
-} Elf64_auxv_t;
-#endif
-
-/* Does the current host support PTRACE_GETREGSET?  */
-int have_ptrace_getregset = -1;
-
-/* LWP accessors.  */
-
-/* See nat/linux-nat.h.  */
-
-ptid_t
-ptid_of_lwp (struct lwp_info *lwp)
-{
-  return ptid_of (get_lwp_thread (lwp));
-}
-
-/* See nat/linux-nat.h.  */
-
-void
-lwp_set_arch_private_info (struct lwp_info *lwp,
-			   struct arch_lwp_info *info)
-{
-  lwp->arch_private = info;
-}
-
-/* See nat/linux-nat.h.  */
-
-struct arch_lwp_info *
-lwp_arch_private_info (struct lwp_info *lwp)
-{
-  return lwp->arch_private;
-}
-
-/* See nat/linux-nat.h.  */
-
-int
-lwp_is_stopped (struct lwp_info *lwp)
-{
-  return lwp->stopped;
-}
-
-/* See nat/linux-nat.h.  */
-
-enum target_stop_reason
-lwp_stop_reason (struct lwp_info *lwp)
-{
-  return lwp->stop_reason;
-}
-
-/* See nat/linux-nat.h.  */
-
-int
-lwp_is_stepping (struct lwp_info *lwp)
-{
-  return lwp->stepping;
-}
-
-/* A list of all unknown processes which receive stop signals.  Some
-   other process will presumably claim each of these as forked
-   children momentarily.  */
-
-struct simple_pid_list
-{
-  /* The process ID.  */
-  int pid;
-
-  /* The status as reported by waitpid.  */
-  int status;
-
-  /* Next in chain.  */
-  struct simple_pid_list *next;
-};
-struct simple_pid_list *stopped_pids;
-
-/* Trivial list manipulation functions to keep track of a list of new
-   stopped processes.  */
-
-static void
-add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
-{
-  struct simple_pid_list *new_pid = XNEW (struct simple_pid_list);
-
-  new_pid->pid = pid;
-  new_pid->status = status;
-  new_pid->next = *listp;
-  *listp = new_pid;
-}
-
-static int
-pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
-{
-  struct simple_pid_list **p;
-
-  for (p = listp; *p != NULL; p = &(*p)->next)
-    if ((*p)->pid == pid)
-      {
-	struct simple_pid_list *next = (*p)->next;
-
-	*statusp = (*p)->status;
-	xfree (*p);
-	*p = next;
-	return 1;
-      }
-  return 0;
-}
-
-enum stopping_threads_kind
-  {
-    /* Not stopping threads presently.  */
-    NOT_STOPPING_THREADS,
-
-    /* Stopping threads.  */
-    STOPPING_THREADS,
-
-    /* Stopping and suspending threads.  */
-    STOPPING_AND_SUSPENDING_THREADS
-  };
-
-/* This is set while stop_all_lwps is in effect.  */
-enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS;
-
-/* FIXME make into a target method?  */
-int using_threads = 1;
-
-/* True if we're presently stabilizing threads (moving them out of
-   jump pads).  */
-static int stabilizing_threads;
-
-static void linux_resume_one_lwp (struct lwp_info *lwp,
-				  int step, int signal, siginfo_t *info);
-static void linux_resume (struct thread_resume *resume_info, size_t n);
-static void stop_all_lwps (int suspend, struct lwp_info *except);
-static void unstop_all_lwps (int unsuspend, struct lwp_info *except);
-static void unsuspend_all_lwps (struct lwp_info *except);
-static int linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid,
-					  int *wstat, int options);
-static int linux_wait_for_event (ptid_t ptid, int *wstat, int options);
-static struct lwp_info *add_lwp (ptid_t ptid);
-static void linux_mourn (struct process_info *process);
-static int linux_stopped_by_watchpoint (void);
-static void mark_lwp_dead (struct lwp_info *lwp, int wstat);
-static int lwp_is_marked_dead (struct lwp_info *lwp);
-static void proceed_all_lwps (void);
-static int finish_step_over (struct lwp_info *lwp);
-static int kill_lwp (unsigned long lwpid, int signo);
-static void enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info);
-static void complete_ongoing_step_over (void);
-static int linux_low_ptrace_options (int attached);
-static int check_ptrace_stopped_lwp_gone (struct lwp_info *lp);
-static void proceed_one_lwp (thread_info *thread, lwp_info *except);
-
-/* When the event-loop is doing a step-over, this points at the thread
-   being stepped.  */
-ptid_t step_over_bkpt;
-
-/* True if the low target can hardware single-step.  */
-
-static int
-can_hardware_single_step (void)
-{
-  if (the_low_target.supports_hardware_single_step != NULL)
-    return the_low_target.supports_hardware_single_step ();
-  else
-    return 0;
-}
-
-/* True if the low target can software single-step.  Such targets
-   implement the GET_NEXT_PCS callback.  */
-
-static int
-can_software_single_step (void)
-{
-  return (the_low_target.get_next_pcs != NULL);
-}
-
-/* True if the low target supports memory breakpoints.  If so, we'll
-   have a GET_PC implementation.  */
-
-static int
-supports_breakpoints (void)
-{
-  return (the_low_target.get_pc != NULL);
-}
-
-/* Returns true if this target can support fast tracepoints.  This
-   does not mean that the in-process agent has been loaded in the
-   inferior.  */
-
-static int
-supports_fast_tracepoints (void)
-{
-  return the_low_target.install_fast_tracepoint_jump_pad != NULL;
-}
-
-/* True if LWP is stopped in its stepping range.  */
-
-static int
-lwp_in_step_range (struct lwp_info *lwp)
-{
-  CORE_ADDR pc = lwp->stop_pc;
-
-  return (pc >= lwp->step_range_start && pc < lwp->step_range_end);
-}
-
-struct pending_signals
-{
-  int signal;
-  siginfo_t info;
-  struct pending_signals *prev;
-};
-
-/* The read/write ends of the pipe registered as waitable file in the
-   event loop.  */
-static int linux_event_pipe[2] = { -1, -1 };
-
-/* True if we're currently in async mode.  */
-#define target_is_async_p() (linux_event_pipe[0] != -1)
-
-static void send_sigstop (struct lwp_info *lwp);
-static void wait_for_sigstop (void);
-
-/* Return non-zero if HEADER is a 64-bit ELF file.  */
-
-static int
-elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine)
-{
-  if (header->e_ident[EI_MAG0] == ELFMAG0
-      && header->e_ident[EI_MAG1] == ELFMAG1
-      && header->e_ident[EI_MAG2] == ELFMAG2
-      && header->e_ident[EI_MAG3] == ELFMAG3)
-    {
-      *machine = header->e_machine;
-      return header->e_ident[EI_CLASS] == ELFCLASS64;
-
-    }
-  *machine = EM_NONE;
-  return -1;
-}
-
-/* Return non-zero if FILE is a 64-bit ELF file,
-   zero if the file is not a 64-bit ELF file,
-   and -1 if the file is not accessible or doesn't exist.  */
-
-static int
-elf_64_file_p (const char *file, unsigned int *machine)
-{
-  Elf64_Ehdr header;
-  int fd;
-
-  fd = open (file, O_RDONLY);
-  if (fd < 0)
-    return -1;
-
-  if (read (fd, &header, sizeof (header)) != sizeof (header))
-    {
-      close (fd);
-      return 0;
-    }
-  close (fd);
-
-  return elf_64_header_p (&header, machine);
-}
-
-/* Accepts an integer PID; Returns true if the executable PID is
-   running is a 64-bit ELF file..  */
-
-int
-linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
-{
-  char file[PATH_MAX];
-
-  sprintf (file, "/proc/%d/exe", pid);
-  return elf_64_file_p (file, machine);
-}
-
-static void
-delete_lwp (struct lwp_info *lwp)
-{
-  struct thread_info *thr = get_lwp_thread (lwp);
-
-  if (debug_threads)
-    debug_printf ("deleting %ld\n", lwpid_of (thr));
-
-  remove_thread (thr);
-
-  if (the_low_target.delete_thread != NULL)
-    the_low_target.delete_thread (lwp->arch_private);
-  else
-    gdb_assert (lwp->arch_private == NULL);
-
-  free (lwp);
-}
-
-/* Add a process to the common process list, and set its private
-   data.  */
-
-static struct process_info *
-linux_add_process (int pid, int attached)
-{
-  struct process_info *proc;
-
-  proc = add_process (pid, attached);
-  proc->priv = XCNEW (struct process_info_private);
-
-  if (the_low_target.new_process != NULL)
-    proc->priv->arch_private = the_low_target.new_process ();
-
-  return proc;
-}
-
-static CORE_ADDR get_pc (struct lwp_info *lwp);
-
-/* Call the target arch_setup function on the current thread.  */
-
-static void
-linux_arch_setup (void)
-{
-  the_low_target.arch_setup ();
-}
-
-/* Call the target arch_setup function on THREAD.  */
-
-static void
-linux_arch_setup_thread (struct thread_info *thread)
-{
-  struct thread_info *saved_thread;
-
-  saved_thread = current_thread;
-  current_thread = thread;
-
-  linux_arch_setup ();
-
-  current_thread = saved_thread;
-}
-
-/* Handle a GNU/Linux extended wait response.  If we see a clone,
-   fork, or vfork event, we need to add the new LWP to our list
-   (and return 0 so as not to report the trap to higher layers).
-   If we see an exec event, we will modify ORIG_EVENT_LWP to point
-   to a new LWP representing the new program.  */
-
-static int
-handle_extended_wait (struct lwp_info **orig_event_lwp, int wstat)
-{
-  client_state &cs = get_client_state ();
-  struct lwp_info *event_lwp = *orig_event_lwp;
-  int event = linux_ptrace_get_extended_event (wstat);
-  struct thread_info *event_thr = get_lwp_thread (event_lwp);
-  struct lwp_info *new_lwp;
-
-  gdb_assert (event_lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE);
-
-  /* All extended events we currently use are mid-syscall.  Only
-     PTRACE_EVENT_STOP is delivered more like a signal-stop, but
-     you have to be using PTRACE_SEIZE to get that.  */
-  event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY;
-
-  if ((event == PTRACE_EVENT_FORK) || (event == PTRACE_EVENT_VFORK)
-      || (event == PTRACE_EVENT_CLONE))
-    {
-      ptid_t ptid;
-      unsigned long new_pid;
-      int ret, status;
-
-      /* Get the pid of the new lwp.  */
-      ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_thr), (PTRACE_TYPE_ARG3) 0,
-	      &new_pid);
-
-      /* If we haven't already seen the new PID stop, wait for it now.  */
-      if (!pull_pid_from_list (&stopped_pids, new_pid, &status))
-	{
-	  /* The new child has a pending SIGSTOP.  We can't affect it until it
-	     hits the SIGSTOP, but we're already attached.  */
-
-	  ret = my_waitpid (new_pid, &status, __WALL);
-
-	  if (ret == -1)
-	    perror_with_name ("waiting for new child");
-	  else if (ret != new_pid)
-	    warning ("wait returned unexpected PID %d", ret);
-	  else if (!WIFSTOPPED (status))
-	    warning ("wait returned unexpected status 0x%x", status);
-	}
-
-      if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK)
-	{
-	  struct process_info *parent_proc;
-	  struct process_info *child_proc;
-	  struct lwp_info *child_lwp;
-	  struct thread_info *child_thr;
-	  struct target_desc *tdesc;
-
-	  ptid = ptid_t (new_pid, new_pid, 0);
-
-	  if (debug_threads)
-	    {
-	      debug_printf ("HEW: Got fork event from LWP %ld, "
-			    "new child is %d\n",
-			    ptid_of (event_thr).lwp (),
-			    ptid.pid ());
-	    }
-
-	  /* Add the new process to the tables and clone the breakpoint
-	     lists of the parent.  We need to do this even if the new process
-	     will be detached, since we will need the process object and the
-	     breakpoints to remove any breakpoints from memory when we
-	     detach, and the client side will access registers.  */
-	  child_proc = linux_add_process (new_pid, 0);
-	  gdb_assert (child_proc != NULL);
-	  child_lwp = add_lwp (ptid);
-	  gdb_assert (child_lwp != NULL);
-	  child_lwp->stopped = 1;
-	  child_lwp->must_set_ptrace_flags = 1;
-	  child_lwp->status_pending_p = 0;
-	  child_thr = get_lwp_thread (child_lwp);
-	  child_thr->last_resume_kind = resume_stop;
-	  child_thr->last_status.kind = TARGET_WAITKIND_STOPPED;
-
-	  /* If we're suspending all threads, leave this one suspended
-	     too.  If the fork/clone parent is stepping over a breakpoint,
-	     all other threads have been suspended already.  Leave the
-	     child suspended too.  */
-	  if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS
-	      || event_lwp->bp_reinsert != 0)
-	    {
-	      if (debug_threads)
-		debug_printf ("HEW: leaving child suspended\n");
-	      child_lwp->suspended = 1;
-	    }
-
-	  parent_proc = get_thread_process (event_thr);
-	  child_proc->attached = parent_proc->attached;
-
-	  if (event_lwp->bp_reinsert != 0
-	      && can_software_single_step ()
-	      && event == PTRACE_EVENT_VFORK)
-	    {
-	      /* If we leave single-step breakpoints there, child will
-		 hit it, so uninsert single-step breakpoints from parent
-		 (and child).  Once vfork child is done, reinsert
-		 them back to parent.  */
-	      uninsert_single_step_breakpoints (event_thr);
-	    }
-
-	  clone_all_breakpoints (child_thr, event_thr);
-
-	  tdesc = allocate_target_description ();
-	  copy_target_description (tdesc, parent_proc->tdesc);
-	  child_proc->tdesc = tdesc;
-
-	  /* Clone arch-specific process data.  */
-	  if (the_low_target.new_fork != NULL)
-	    the_low_target.new_fork (parent_proc, child_proc);
-
-	  /* Save fork info in the parent thread.  */
-	  if (event == PTRACE_EVENT_FORK)
-	    event_lwp->waitstatus.kind = TARGET_WAITKIND_FORKED;
-	  else if (event == PTRACE_EVENT_VFORK)
-	    event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORKED;
-
-	  event_lwp->waitstatus.value.related_pid = ptid;
-
-	  /* The status_pending field contains bits denoting the
-	     extended event, so when the pending event is handled,
-	     the handler will look at lwp->waitstatus.  */
-	  event_lwp->status_pending_p = 1;
-	  event_lwp->status_pending = wstat;
-
-	  /* Link the threads until the parent event is passed on to
-	     higher layers.  */
-	  event_lwp->fork_relative = child_lwp;
-	  child_lwp->fork_relative = event_lwp;
-
-	  /* If the parent thread is doing step-over with single-step
-	     breakpoints, the list of single-step breakpoints are cloned
-	     from the parent's.  Remove them from the child process.
-	     In case of vfork, we'll reinsert them back once vforked
-	     child is done.  */
-	  if (event_lwp->bp_reinsert != 0
-	      && can_software_single_step ())
-	    {
-	      /* The child process is forked and stopped, so it is safe
-		 to access its memory without stopping all other threads
-		 from other processes.  */
-	      delete_single_step_breakpoints (child_thr);
-
-	      gdb_assert (has_single_step_breakpoints (event_thr));
-	      gdb_assert (!has_single_step_breakpoints (child_thr));
-	    }
-
-	  /* Report the event.  */
-	  return 0;
-	}
-
-      if (debug_threads)
-	debug_printf ("HEW: Got clone event "
-		      "from LWP %ld, new child is LWP %ld\n",
-		      lwpid_of (event_thr), new_pid);
-
-      ptid = ptid_t (pid_of (event_thr), new_pid, 0);
-      new_lwp = add_lwp (ptid);
-
-      /* Either we're going to immediately resume the new thread
-	 or leave it stopped.  linux_resume_one_lwp is a nop if it
-	 thinks the thread is currently running, so set this first
-	 before calling linux_resume_one_lwp.  */
-      new_lwp->stopped = 1;
-
-      /* If we're suspending all threads, leave this one suspended
-	 too.  If the fork/clone parent is stepping over a breakpoint,
-	 all other threads have been suspended already.  Leave the
-	 child suspended too.  */
-      if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS
-	  || event_lwp->bp_reinsert != 0)
-	new_lwp->suspended = 1;
-
-      /* Normally we will get the pending SIGSTOP.  But in some cases
-	 we might get another signal delivered to the group first.
-	 If we do get another signal, be sure not to lose it.  */
-      if (WSTOPSIG (status) != SIGSTOP)
-	{
-	  new_lwp->stop_expected = 1;
-	  new_lwp->status_pending_p = 1;
-	  new_lwp->status_pending = status;
-	}
-      else if (cs.report_thread_events)
-	{
-	  new_lwp->waitstatus.kind = TARGET_WAITKIND_THREAD_CREATED;
-	  new_lwp->status_pending_p = 1;
-	  new_lwp->status_pending = status;
-	}
-
-#ifdef USE_THREAD_DB
-      thread_db_notice_clone (event_thr, ptid);
-#endif
-
-      /* Don't report the event.  */
-      return 1;
-    }
-  else if (event == PTRACE_EVENT_VFORK_DONE)
-    {
-      event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE;
-
-      if (event_lwp->bp_reinsert != 0 && can_software_single_step ())
-	{
-	  reinsert_single_step_breakpoints (event_thr);
-
-	  gdb_assert (has_single_step_breakpoints (event_thr));
-	}
-
-      /* Report the event.  */
-      return 0;
-    }
-  else if (event == PTRACE_EVENT_EXEC && cs.report_exec_events)
-    {
-      struct process_info *proc;
-      std::vector<int> syscalls_to_catch;
-      ptid_t event_ptid;
-      pid_t event_pid;
-
-      if (debug_threads)
-	{
-	  debug_printf ("HEW: Got exec event from LWP %ld\n",
-			lwpid_of (event_thr));
-	}
-
-      /* Get the event ptid.  */
-      event_ptid = ptid_of (event_thr);
-      event_pid = event_ptid.pid ();
-
-      /* Save the syscall list from the execing process.  */
-      proc = get_thread_process (event_thr);
-      syscalls_to_catch = std::move (proc->syscalls_to_catch);
-
-      /* Delete the execing process and all its threads.  */
-      linux_mourn (proc);
-      current_thread = NULL;
-
-      /* Create a new process/lwp/thread.  */
-      proc = linux_add_process (event_pid, 0);
-      event_lwp = add_lwp (event_ptid);
-      event_thr = get_lwp_thread (event_lwp);
-      gdb_assert (current_thread == event_thr);
-      linux_arch_setup_thread (event_thr);
-
-      /* Set the event status.  */
-      event_lwp->waitstatus.kind = TARGET_WAITKIND_EXECD;
-      event_lwp->waitstatus.value.execd_pathname
-	= xstrdup (linux_proc_pid_to_exec_file (lwpid_of (event_thr)));
-
-      /* Mark the exec status as pending.  */
-      event_lwp->stopped = 1;
-      event_lwp->status_pending_p = 1;
-      event_lwp->status_pending = wstat;
-      event_thr->last_resume_kind = resume_continue;
-      event_thr->last_status.kind = TARGET_WAITKIND_IGNORE;
-
-      /* Update syscall state in the new lwp, effectively mid-syscall too.  */
-      event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY;
-
-      /* Restore the list to catch.  Don't rely on the client, which is free
-	 to avoid sending a new list when the architecture doesn't change.
-	 Also, for ANY_SYSCALL, the architecture doesn't really matter.  */
-      proc->syscalls_to_catch = std::move (syscalls_to_catch);
-
-      /* Report the event.  */
-      *orig_event_lwp = event_lwp;
-      return 0;
-    }
-
-  internal_error (__FILE__, __LINE__, _("unknown ptrace event %d"), event);
-}
-
-/* Return the PC as read from the regcache of LWP, without any
-   adjustment.  */
-
-static CORE_ADDR
-get_pc (struct lwp_info *lwp)
-{
-  struct thread_info *saved_thread;
-  struct regcache *regcache;
-  CORE_ADDR pc;
-
-  if (the_low_target.get_pc == NULL)
-    return 0;
-
-  saved_thread = current_thread;
-  current_thread = get_lwp_thread (lwp);
-
-  regcache = get_thread_regcache (current_thread, 1);
-  pc = (*the_low_target.get_pc) (regcache);
-
-  if (debug_threads)
-    debug_printf ("pc is 0x%lx\n", (long) pc);
-
-  current_thread = saved_thread;
-  return pc;
-}
-
-/* This function should only be called if LWP got a SYSCALL_SIGTRAP.
-   Fill *SYSNO with the syscall nr trapped.  */
-
-static void
-get_syscall_trapinfo (struct lwp_info *lwp, int *sysno)
-{
-  struct thread_info *saved_thread;
-  struct regcache *regcache;
-
-  if (the_low_target.get_syscall_trapinfo == NULL)
-    {
-      /* If we cannot get the syscall trapinfo, report an unknown
-	 system call number.  */
-      *sysno = UNKNOWN_SYSCALL;
-      return;
-    }
-
-  saved_thread = current_thread;
-  current_thread = get_lwp_thread (lwp);
-
-  regcache = get_thread_regcache (current_thread, 1);
-  (*the_low_target.get_syscall_trapinfo) (regcache, sysno);
-
-  if (debug_threads)
-    debug_printf ("get_syscall_trapinfo sysno %d\n", *sysno);
-
-  current_thread = saved_thread;
-}
-
-static int check_stopped_by_watchpoint (struct lwp_info *child);
-
-/* Called when the LWP stopped for a signal/trap.  If it stopped for a
-   trap check what caused it (breakpoint, watchpoint, trace, etc.),
-   and save the result in the LWP's stop_reason field.  If it stopped
-   for a breakpoint, decrement the PC if necessary on the lwp's
-   architecture.  Returns true if we now have the LWP's stop PC.  */
-
-static int
-save_stop_reason (struct lwp_info *lwp)
-{
-  CORE_ADDR pc;
-  CORE_ADDR sw_breakpoint_pc;
-  struct thread_info *saved_thread;
-#if USE_SIGTRAP_SIGINFO
-  siginfo_t siginfo;
-#endif
-
-  if (the_low_target.get_pc == NULL)
-    return 0;
-
-  pc = get_pc (lwp);
-  sw_breakpoint_pc = pc - the_low_target.decr_pc_after_break;
-
-  /* breakpoint_at reads from the current thread.  */
-  saved_thread = current_thread;
-  current_thread = get_lwp_thread (lwp);
-
-#if USE_SIGTRAP_SIGINFO
-  if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
-	      (PTRACE_TYPE_ARG3) 0, &siginfo) == 0)
-    {
-      if (siginfo.si_signo == SIGTRAP)
-	{
-	  if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)
-	      && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))
-	    {
-	      /* The si_code is ambiguous on this arch -- check debug
-		 registers.  */
-	      if (!check_stopped_by_watchpoint (lwp))
-		lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
-	    }
-	  else if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code))
-	    {
-	      /* If we determine the LWP stopped for a SW breakpoint,
-		 trust it.  Particularly don't check watchpoint
-		 registers, because at least on s390, we'd find
-		 stopped-by-watchpoint as long as there's a watchpoint
-		 set.  */
-	      lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
-	    }
-	  else if (GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))
-	    {
-	      /* This can indicate either a hardware breakpoint or
-		 hardware watchpoint.  Check debug registers.  */
-	      if (!check_stopped_by_watchpoint (lwp))
-		lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
-	    }
-	  else if (siginfo.si_code == TRAP_TRACE)
-	    {
-	      /* We may have single stepped an instruction that
-		 triggered a watchpoint.  In that case, on some
-		 architectures (such as x86), instead of TRAP_HWBKPT,
-		 si_code indicates TRAP_TRACE, and we need to check
-		 the debug registers separately.  */
-	      if (!check_stopped_by_watchpoint (lwp))
-		lwp->stop_reason = TARGET_STOPPED_BY_SINGLE_STEP;
-	    }
-	}
-    }
-#else
-  /* We may have just stepped a breakpoint instruction.  E.g., in
-     non-stop mode, GDB first tells the thread A to step a range, and
-     then the user inserts a breakpoint inside the range.  In that
-     case we need to report the breakpoint PC.  */
-  if ((!lwp->stepping || lwp->stop_pc == sw_breakpoint_pc)
-      && (*the_low_target.breakpoint_at) (sw_breakpoint_pc))
-    lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
-
-  if (hardware_breakpoint_inserted_here (pc))
-    lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
-
-  if (lwp->stop_reason == TARGET_STOPPED_BY_NO_REASON)
-    check_stopped_by_watchpoint (lwp);
-#endif
-
-  if (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
-    {
-      if (debug_threads)
-	{
-	  struct thread_info *thr = get_lwp_thread (lwp);
-
-	  debug_printf ("CSBB: %s stopped by software breakpoint\n",
-			target_pid_to_str (ptid_of (thr)));
-	}
-
-      /* Back up the PC if necessary.  */
-      if (pc != sw_breakpoint_pc)
-	{
-	  struct regcache *regcache
-	    = get_thread_regcache (current_thread, 1);
-	  (*the_low_target.set_pc) (regcache, sw_breakpoint_pc);
-	}
-
-      /* Update this so we record the correct stop PC below.  */
-      pc = sw_breakpoint_pc;
-    }
-  else if (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
-    {
-      if (debug_threads)
-	{
-	  struct thread_info *thr = get_lwp_thread (lwp);
-
-	  debug_printf ("CSBB: %s stopped by hardware breakpoint\n",
-			target_pid_to_str (ptid_of (thr)));
-	}
-    }
-  else if (lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
-    {
-      if (debug_threads)
-	{
-	  struct thread_info *thr = get_lwp_thread (lwp);
-
-	  debug_printf ("CSBB: %s stopped by hardware watchpoint\n",
-			target_pid_to_str (ptid_of (thr)));
-	}
-    }
-  else if (lwp->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP)
-    {
-      if (debug_threads)
-	{
-	  struct thread_info *thr = get_lwp_thread (lwp);
-
-	  debug_printf ("CSBB: %s stopped by trace\n",
-			target_pid_to_str (ptid_of (thr)));
-	}
-    }
-
-  lwp->stop_pc = pc;
-  current_thread = saved_thread;
-  return 1;
-}
-
-static struct lwp_info *
-add_lwp (ptid_t ptid)
-{
-  struct lwp_info *lwp;
-
-  lwp = XCNEW (struct lwp_info);
-
-  lwp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
-
-  lwp->thread = add_thread (ptid, lwp);
-
-  if (the_low_target.new_thread != NULL)
-    the_low_target.new_thread (lwp);
-
-  return lwp;
-}
-
-/* Callback to be used when calling fork_inferior, responsible for
-   actually initiating the tracing of the inferior.  */
-
-static void
-linux_ptrace_fun ()
-{
-  if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0,
-	      (PTRACE_TYPE_ARG4) 0) < 0)
-    trace_start_error_with_name ("ptrace");
-
-  if (setpgid (0, 0) < 0)
-    trace_start_error_with_name ("setpgid");
-
-  /* If GDBserver is connected to gdb via stdio, redirect the inferior's
-     stdout to stderr so that inferior i/o doesn't corrupt the connection.
-     Also, redirect stdin to /dev/null.  */
-  if (remote_connection_is_stdio ())
-    {
-      if (close (0) < 0)
-	trace_start_error_with_name ("close");
-      if (open ("/dev/null", O_RDONLY) < 0)
-	trace_start_error_with_name ("open");
-      if (dup2 (2, 1) < 0)
-	trace_start_error_with_name ("dup2");
-      if (write (2, "stdin/stdout redirected\n",
-		 sizeof ("stdin/stdout redirected\n") - 1) < 0)
-	{
-	  /* Errors ignored.  */;
-	}
-    }
-}
-
-/* Start an inferior process and returns its pid.
-   PROGRAM is the name of the program to be started, and PROGRAM_ARGS
-   are its arguments.  */
-
-static int
-linux_create_inferior (const char *program,
-		       const std::vector<char *> &program_args)
-{
-  client_state &cs = get_client_state ();
-  struct lwp_info *new_lwp;
-  int pid;
-  ptid_t ptid;
-
-  {
-    maybe_disable_address_space_randomization restore_personality
-      (cs.disable_randomization);
-    std::string str_program_args = stringify_argv (program_args);
-
-    pid = fork_inferior (program,
-			 str_program_args.c_str (),
-			 get_environ ()->envp (), linux_ptrace_fun,
-			 NULL, NULL, NULL, NULL);
-  }
-
-  linux_add_process (pid, 0);
-
-  ptid = ptid_t (pid, pid, 0);
-  new_lwp = add_lwp (ptid);
-  new_lwp->must_set_ptrace_flags = 1;
-
-  post_fork_inferior (pid, program);
-
-  return pid;
-}
-
-/* Implement the post_create_inferior target_ops method.  */
-
-static void
-linux_post_create_inferior (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-
-  linux_arch_setup ();
-
-  if (lwp->must_set_ptrace_flags)
-    {
-      struct process_info *proc = current_process ();
-      int options = linux_low_ptrace_options (proc->attached);
-
-      linux_enable_event_reporting (lwpid_of (current_thread), options);
-      lwp->must_set_ptrace_flags = 0;
-    }
-}
-
-/* Attach to an inferior process.  Returns 0 on success, ERRNO on
-   error.  */
-
-int
-linux_attach_lwp (ptid_t ptid)
-{
-  struct lwp_info *new_lwp;
-  int lwpid = ptid.lwp ();
-
-  if (ptrace (PTRACE_ATTACH, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0)
-      != 0)
-    return errno;
-
-  new_lwp = add_lwp (ptid);
-
-  /* We need to wait for SIGSTOP before being able to make the next
-     ptrace call on this LWP.  */
-  new_lwp->must_set_ptrace_flags = 1;
-
-  if (linux_proc_pid_is_stopped (lwpid))
-    {
-      if (debug_threads)
-	debug_printf ("Attached to a stopped process\n");
-
-      /* The process is definitely stopped.  It is in a job control
-	 stop, unless the kernel predates the TASK_STOPPED /
-	 TASK_TRACED distinction, in which case it might be in a
-	 ptrace stop.  Make sure it is in a ptrace stop; from there we
-	 can kill it, signal it, et cetera.
-
-	 First make sure there is a pending SIGSTOP.  Since we are
-	 already attached, the process can not transition from stopped
-	 to running without a PTRACE_CONT; so we know this signal will
-	 go into the queue.  The SIGSTOP generated by PTRACE_ATTACH is
-	 probably already in the queue (unless this kernel is old
-	 enough to use TASK_STOPPED for ptrace stops); but since
-	 SIGSTOP is not an RT signal, it can only be queued once.  */
-      kill_lwp (lwpid, SIGSTOP);
-
-      /* Finally, resume the stopped process.  This will deliver the
-	 SIGSTOP (or a higher priority signal, just like normal
-	 PTRACE_ATTACH), which we'll catch later on.  */
-      ptrace (PTRACE_CONT, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
-    }
-
-  /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
-     brings it to a halt.
-
-     There are several cases to consider here:
-
-     1) gdbserver has already attached to the process and is being notified
-	of a new thread that is being created.
-	In this case we should ignore that SIGSTOP and resume the
-	process.  This is handled below by setting stop_expected = 1,
-	and the fact that add_thread sets last_resume_kind ==
-	resume_continue.
-
-     2) This is the first thread (the process thread), and we're attaching
-	to it via attach_inferior.
-	In this case we want the process thread to stop.
-	This is handled by having linux_attach set last_resume_kind ==
-	resume_stop after we return.
-
-	If the pid we are attaching to is also the tgid, we attach to and
-	stop all the existing threads.  Otherwise, we attach to pid and
-	ignore any other threads in the same group as this pid.
-
-     3) GDB is connecting to gdbserver and is requesting an enumeration of all
-	existing threads.
-	In this case we want the thread to stop.
-	FIXME: This case is currently not properly handled.
-	We should wait for the SIGSTOP but don't.  Things work apparently
-	because enough time passes between when we ptrace (ATTACH) and when
-	gdb makes the next ptrace call on the thread.
-
-     On the other hand, if we are currently trying to stop all threads, we
-     should treat the new thread as if we had sent it a SIGSTOP.  This works
-     because we are guaranteed that the add_lwp call above added us to the
-     end of the list, and so the new thread has not yet reached
-     wait_for_sigstop (but will).  */
-  new_lwp->stop_expected = 1;
-
-  return 0;
-}
-
-/* Callback for linux_proc_attach_tgid_threads.  Attach to PTID if not
-   already attached.  Returns true if a new LWP is found, false
-   otherwise.  */
-
-static int
-attach_proc_task_lwp_callback (ptid_t ptid)
-{
-  /* Is this a new thread?  */
-  if (find_thread_ptid (ptid) == NULL)
-    {
-      int lwpid = ptid.lwp ();
-      int err;
-
-      if (debug_threads)
-	debug_printf ("Found new lwp %d\n", lwpid);
-
-      err = linux_attach_lwp (ptid);
-
-      /* Be quiet if we simply raced with the thread exiting.  EPERM
-	 is returned if the thread's task still exists, and is marked
-	 as exited or zombie, as well as other conditions, so in that
-	 case, confirm the status in /proc/PID/status.  */
-      if (err == ESRCH
-	  || (err == EPERM && linux_proc_pid_is_gone (lwpid)))
-	{
-	  if (debug_threads)
-	    {
-	      debug_printf ("Cannot attach to lwp %d: "
-			    "thread is gone (%d: %s)\n",
-			    lwpid, err, safe_strerror (err));
-	    }
-	}
-      else if (err != 0)
-	{
-	  std::string reason
-	    = linux_ptrace_attach_fail_reason_string (ptid, err);
-
-	  warning (_("Cannot attach to lwp %d: %s"), lwpid, reason.c_str ());
-	}
-
-      return 1;
-    }
-  return 0;
-}
-
-static void async_file_mark (void);
-
-/* Attach to PID.  If PID is the tgid, attach to it and all
-   of its threads.  */
-
-static int
-linux_attach (unsigned long pid)
-{
-  struct process_info *proc;
-  struct thread_info *initial_thread;
-  ptid_t ptid = ptid_t (pid, pid, 0);
-  int err;
-
-  proc = linux_add_process (pid, 1);
-
-  /* Attach to PID.  We will check for other threads
-     soon.  */
-  err = linux_attach_lwp (ptid);
-  if (err != 0)
-    {
-      remove_process (proc);
-
-      std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err);
-      error ("Cannot attach to process %ld: %s", pid, reason.c_str ());
-    }
-
-  /* Don't ignore the initial SIGSTOP if we just attached to this
-     process.  It will be collected by wait shortly.  */
-  initial_thread = find_thread_ptid (ptid_t (pid, pid, 0));
-  initial_thread->last_resume_kind = resume_stop;
-
-  /* We must attach to every LWP.  If /proc is mounted, use that to
-     find them now.  On the one hand, the inferior may be using raw
-     clone instead of using pthreads.  On the other hand, even if it
-     is using pthreads, GDB may not be connected yet (thread_db needs
-     to do symbol lookups, through qSymbol).  Also, thread_db walks
-     structures in the inferior's address space to find the list of
-     threads/LWPs, and those structures may well be corrupted.  Note
-     that once thread_db is loaded, we'll still use it to list threads
-     and associate pthread info with each LWP.  */
-  linux_proc_attach_tgid_threads (pid, attach_proc_task_lwp_callback);
-
-  /* GDB will shortly read the xml target description for this
-     process, to figure out the process' architecture.  But the target
-     description is only filled in when the first process/thread in
-     the thread group reports its initial PTRACE_ATTACH SIGSTOP.  Do
-     that now, otherwise, if GDB is fast enough, it could read the
-     target description _before_ that initial stop.  */
-  if (non_stop)
-    {
-      struct lwp_info *lwp;
-      int wstat, lwpid;
-      ptid_t pid_ptid = ptid_t (pid);
-
-      lwpid = linux_wait_for_event_filtered (pid_ptid, pid_ptid,
-					     &wstat, __WALL);
-      gdb_assert (lwpid > 0);
-
-      lwp = find_lwp_pid (ptid_t (lwpid));
-
-      if (!WIFSTOPPED (wstat) || WSTOPSIG (wstat) != SIGSTOP)
-	{
-	  lwp->status_pending_p = 1;
-	  lwp->status_pending = wstat;
-	}
-
-      initial_thread->last_resume_kind = resume_continue;
-
-      async_file_mark ();
-
-      gdb_assert (proc->tdesc != NULL);
-    }
-
-  return 0;
-}
-
-static int
-last_thread_of_process_p (int pid)
-{
-  bool seen_one = false;
-
-  thread_info *thread = find_thread (pid, [&] (thread_info *thr_arg)
-    {
-      if (!seen_one)
-	{
-	  /* This is the first thread of this process we see.  */
-	  seen_one = true;
-	  return false;
-	}
-      else
-	{
-	  /* This is the second thread of this process we see.  */
-	  return true;
-	}
-    });
-
-  return thread == NULL;
-}
-
-/* Kill LWP.  */
-
-static void
-linux_kill_one_lwp (struct lwp_info *lwp)
-{
-  struct thread_info *thr = get_lwp_thread (lwp);
-  int pid = lwpid_of (thr);
-
-  /* PTRACE_KILL is unreliable.  After stepping into a signal handler,
-     there is no signal context, and ptrace(PTRACE_KILL) (or
-     ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like
-     ptrace(CONT, pid, 0,0) and just resumes the tracee.  A better
-     alternative is to kill with SIGKILL.  We only need one SIGKILL
-     per process, not one for each thread.  But since we still support
-     support debugging programs using raw clone without CLONE_THREAD,
-     we send one for each thread.  For years, we used PTRACE_KILL
-     only, so we're being a bit paranoid about some old kernels where
-     PTRACE_KILL might work better (dubious if there are any such, but
-     that's why it's paranoia), so we try SIGKILL first, PTRACE_KILL
-     second, and so we're fine everywhere.  */
-
-  errno = 0;
-  kill_lwp (pid, SIGKILL);
-  if (debug_threads)
-    {
-      int save_errno = errno;
-
-      debug_printf ("LKL:  kill_lwp (SIGKILL) %s, 0, 0 (%s)\n",
-		    target_pid_to_str (ptid_of (thr)),
-		    save_errno ? safe_strerror (save_errno) : "OK");
-    }
-
-  errno = 0;
-  ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
-  if (debug_threads)
-    {
-      int save_errno = errno;
-
-      debug_printf ("LKL:  PTRACE_KILL %s, 0, 0 (%s)\n",
-		    target_pid_to_str (ptid_of (thr)),
-		    save_errno ? safe_strerror (save_errno) : "OK");
-    }
-}
-
-/* Kill LWP and wait for it to die.  */
-
-static void
-kill_wait_lwp (struct lwp_info *lwp)
-{
-  struct thread_info *thr = get_lwp_thread (lwp);
-  int pid = ptid_of (thr).pid ();
-  int lwpid = ptid_of (thr).lwp ();
-  int wstat;
-  int res;
-
-  if (debug_threads)
-    debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid);
-
-  do
-    {
-      linux_kill_one_lwp (lwp);
-
-      /* Make sure it died.  Notes:
-
-	 - The loop is most likely unnecessary.
-
-	 - We don't use linux_wait_for_event as that could delete lwps
-	   while we're iterating over them.  We're not interested in
-	   any pending status at this point, only in making sure all
-	   wait status on the kernel side are collected until the
-	   process is reaped.
-
-	 - We don't use __WALL here as the __WALL emulation relies on
-	   SIGCHLD, and killing a stopped process doesn't generate
-	   one, nor an exit status.
-      */
-      res = my_waitpid (lwpid, &wstat, 0);
-      if (res == -1 && errno == ECHILD)
-	res = my_waitpid (lwpid, &wstat, __WCLONE);
-    } while (res > 0 && WIFSTOPPED (wstat));
-
-  /* Even if it was stopped, the child may have already disappeared.
-     E.g., if it was killed by SIGKILL.  */
-  if (res < 0 && errno != ECHILD)
-    perror_with_name ("kill_wait_lwp");
-}
-
-/* Callback for `for_each_thread'.  Kills an lwp of a given process,
-   except the leader.  */
-
-static void
-kill_one_lwp_callback (thread_info *thread, int pid)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  /* We avoid killing the first thread here, because of a Linux kernel (at
-     least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
-     the children get a chance to be reaped, it will remain a zombie
-     forever.  */
-
-  if (lwpid_of (thread) == pid)
-    {
-      if (debug_threads)
-	debug_printf ("lkop: is last of process %s\n",
-		      target_pid_to_str (thread->id));
-      return;
-    }
-
-  kill_wait_lwp (lwp);
-}
-
-static int
-linux_kill (process_info *process)
-{
-  int pid = process->pid;
-
-  /* If we're killing a running inferior, make sure it is stopped
-     first, as PTRACE_KILL will not work otherwise.  */
-  stop_all_lwps (0, NULL);
-
-  for_each_thread (pid, [&] (thread_info *thread)
-    {
-      kill_one_lwp_callback (thread, pid);
-    });
-
-  /* See the comment in linux_kill_one_lwp.  We did not kill the first
-     thread in the list, so do so now.  */
-  lwp_info *lwp = find_lwp_pid (ptid_t (pid));
-
-  if (lwp == NULL)
-    {
-      if (debug_threads)
-	debug_printf ("lk_1: cannot find lwp for pid: %d\n",
-		      pid);
-    }
-  else
-    kill_wait_lwp (lwp);
-
-  the_target->mourn (process);
-
-  /* Since we presently can only stop all lwps of all processes, we
-     need to unstop lwps of other processes.  */
-  unstop_all_lwps (0, NULL);
-  return 0;
-}
-
-/* Get pending signal of THREAD, for detaching purposes.  This is the
-   signal the thread last stopped for, which we need to deliver to the
-   thread when detaching, otherwise, it'd be suppressed/lost.  */
-
-static int
-get_detach_signal (struct thread_info *thread)
-{
-  client_state &cs = get_client_state ();
-  enum gdb_signal signo = GDB_SIGNAL_0;
-  int status;
-  struct lwp_info *lp = get_thread_lwp (thread);
-
-  if (lp->status_pending_p)
-    status = lp->status_pending;
-  else
-    {
-      /* If the thread had been suspended by gdbserver, and it stopped
-	 cleanly, then it'll have stopped with SIGSTOP.  But we don't
-	 want to deliver that SIGSTOP.  */
-      if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
-	  || thread->last_status.value.sig == GDB_SIGNAL_0)
-	return 0;
-
-      /* Otherwise, we may need to deliver the signal we
-	 intercepted.  */
-      status = lp->last_status;
-    }
-
-  if (!WIFSTOPPED (status))
-    {
-      if (debug_threads)
-	debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n",
-		      target_pid_to_str (ptid_of (thread)));
-      return 0;
-    }
-
-  /* Extended wait statuses aren't real SIGTRAPs.  */
-  if (WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status))
-    {
-      if (debug_threads)
-	debug_printf ("GPS: lwp %s had stopped with extended "
-		      "status: no pending signal\n",
-		      target_pid_to_str (ptid_of (thread)));
-      return 0;
-    }
-
-  signo = gdb_signal_from_host (WSTOPSIG (status));
-
-  if (cs.program_signals_p && !cs.program_signals[signo])
-    {
-      if (debug_threads)
-	debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n",
-		      target_pid_to_str (ptid_of (thread)),
-		      gdb_signal_to_string (signo));
-      return 0;
-    }
-  else if (!cs.program_signals_p
-	   /* If we have no way to know which signals GDB does not
-	      want to have passed to the program, assume
-	      SIGTRAP/SIGINT, which is GDB's default.  */
-	   && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
-    {
-      if (debug_threads)
-	debug_printf ("GPS: lwp %s had signal %s, "
-		      "but we don't know if we should pass it. "
-		      "Default to not.\n",
-		      target_pid_to_str (ptid_of (thread)),
-		      gdb_signal_to_string (signo));
-      return 0;
-    }
-  else
-    {
-      if (debug_threads)
-	debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n",
-		      target_pid_to_str (ptid_of (thread)),
-		      gdb_signal_to_string (signo));
-
-      return WSTOPSIG (status);
-    }
-}
-
-/* Detach from LWP.  */
-
-static void
-linux_detach_one_lwp (struct lwp_info *lwp)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-  int sig;
-  int lwpid;
-
-  /* If there is a pending SIGSTOP, get rid of it.  */
-  if (lwp->stop_expected)
-    {
-      if (debug_threads)
-	debug_printf ("Sending SIGCONT to %s\n",
-		      target_pid_to_str (ptid_of (thread)));
-
-      kill_lwp (lwpid_of (thread), SIGCONT);
-      lwp->stop_expected = 0;
-    }
-
-  /* Pass on any pending signal for this thread.  */
-  sig = get_detach_signal (thread);
-
-  /* Preparing to resume may try to write registers, and fail if the
-     lwp is zombie.  If that happens, ignore the error.  We'll handle
-     it below, when detach fails with ESRCH.  */
-  try
-    {
-      /* Flush any pending changes to the process's registers.  */
-      regcache_invalidate_thread (thread);
-
-      /* Finally, let it resume.  */
-      if (the_low_target.prepare_to_resume != NULL)
-	the_low_target.prepare_to_resume (lwp);
-    }
-  catch (const gdb_exception_error &ex)
-    {
-      if (!check_ptrace_stopped_lwp_gone (lwp))
-	throw;
-    }
-
-  lwpid = lwpid_of (thread);
-  if (ptrace (PTRACE_DETACH, lwpid, (PTRACE_TYPE_ARG3) 0,
-	      (PTRACE_TYPE_ARG4) (long) sig) < 0)
-    {
-      int save_errno = errno;
-
-      /* We know the thread exists, so ESRCH must mean the lwp is
-	 zombie.  This can happen if one of the already-detached
-	 threads exits the whole thread group.  In that case we're
-	 still attached, and must reap the lwp.  */
-      if (save_errno == ESRCH)
-	{
-	  int ret, status;
-
-	  ret = my_waitpid (lwpid, &status, __WALL);
-	  if (ret == -1)
-	    {
-	      warning (_("Couldn't reap LWP %d while detaching: %s"),
-		       lwpid, safe_strerror (errno));
-	    }
-	  else if (!WIFEXITED (status) && !WIFSIGNALED (status))
-	    {
-	      warning (_("Reaping LWP %d while detaching "
-			 "returned unexpected status 0x%x"),
-		       lwpid, status);
-	    }
-	}
-      else
-	{
-	  error (_("Can't detach %s: %s"),
-		 target_pid_to_str (ptid_of (thread)),
-		 safe_strerror (save_errno));
-	}
-    }
-  else if (debug_threads)
-    {
-      debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)\n",
-		    target_pid_to_str (ptid_of (thread)),
-		    strsignal (sig));
-    }
-
-  delete_lwp (lwp);
-}
-
-/* Callback for for_each_thread.  Detaches from non-leader threads of a
-   given process.  */
-
-static void
-linux_detach_lwp_callback (thread_info *thread)
-{
-  /* We don't actually detach from the thread group leader just yet.
-     If the thread group exits, we must reap the zombie clone lwps
-     before we're able to reap the leader.  */
-  if (thread->id.pid () == thread->id.lwp ())
-    return;
-
-  lwp_info *lwp = get_thread_lwp (thread);
-  linux_detach_one_lwp (lwp);
-}
-
-static int
-linux_detach (process_info *process)
-{
-  struct lwp_info *main_lwp;
-
-  /* As there's a step over already in progress, let it finish first,
-     otherwise nesting a stabilize_threads operation on top gets real
-     messy.  */
-  complete_ongoing_step_over ();
-
-  /* Stop all threads before detaching.  First, ptrace requires that
-     the thread is stopped to successfully detach.  Second, thread_db
-     may need to uninstall thread event breakpoints from memory, which
-     only works with a stopped process anyway.  */
-  stop_all_lwps (0, NULL);
-
-#ifdef USE_THREAD_DB
-  thread_db_detach (process);
-#endif
-
-  /* Stabilize threads (move out of jump pads).  */
-  stabilize_threads ();
-
-  /* Detach from the clone lwps first.  If the thread group exits just
-     while we're detaching, we must reap the clone lwps before we're
-     able to reap the leader.  */
-  for_each_thread (process->pid, linux_detach_lwp_callback);
-
-  main_lwp = find_lwp_pid (ptid_t (process->pid));
-  linux_detach_one_lwp (main_lwp);
-
-  the_target->mourn (process);
-
-  /* Since we presently can only stop all lwps of all processes, we
-     need to unstop lwps of other processes.  */
-  unstop_all_lwps (0, NULL);
-  return 0;
-}
-
-/* Remove all LWPs that belong to process PROC from the lwp list.  */
-
-static void
-linux_mourn (struct process_info *process)
-{
-  struct process_info_private *priv;
-
-#ifdef USE_THREAD_DB
-  thread_db_mourn (process);
-#endif
-
-  for_each_thread (process->pid, [] (thread_info *thread)
-    {
-      delete_lwp (get_thread_lwp (thread));
-    });
-
-  /* Freeing all private data.  */
-  priv = process->priv;
-  if (the_low_target.delete_process != NULL)
-    the_low_target.delete_process (priv->arch_private);
-  else
-    gdb_assert (priv->arch_private == NULL);
-  free (priv);
-  process->priv = NULL;
-
-  remove_process (process);
-}
-
-static void
-linux_join (int pid)
-{
-  int status, ret;
-
-  do {
-    ret = my_waitpid (pid, &status, 0);
-    if (WIFEXITED (status) || WIFSIGNALED (status))
-      break;
-  } while (ret != -1 || errno != ECHILD);
-}
-
-/* Return nonzero if the given thread is still alive.  */
-static int
-linux_thread_alive (ptid_t ptid)
-{
-  struct lwp_info *lwp = find_lwp_pid (ptid);
-
-  /* We assume we always know if a thread exits.  If a whole process
-     exited but we still haven't been able to report it to GDB, we'll
-     hold on to the last lwp of the dead process.  */
-  if (lwp != NULL)
-    return !lwp_is_marked_dead (lwp);
-  else
-    return 0;
-}
-
-/* Return 1 if this lwp still has an interesting status pending.  If
-   not (e.g., it had stopped for a breakpoint that is gone), return
-   false.  */
-
-static int
-thread_still_has_status_pending_p (struct thread_info *thread)
-{
-  struct lwp_info *lp = get_thread_lwp (thread);
-
-  if (!lp->status_pending_p)
-    return 0;
-
-  if (thread->last_resume_kind != resume_stop
-      && (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
-	  || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT))
-    {
-      struct thread_info *saved_thread;
-      CORE_ADDR pc;
-      int discard = 0;
-
-      gdb_assert (lp->last_status != 0);
-
-      pc = get_pc (lp);
-
-      saved_thread = current_thread;
-      current_thread = thread;
-
-      if (pc != lp->stop_pc)
-	{
-	  if (debug_threads)
-	    debug_printf ("PC of %ld changed\n",
-			  lwpid_of (thread));
-	  discard = 1;
-	}
-
-#if !USE_SIGTRAP_SIGINFO
-      else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
-	       && !(*the_low_target.breakpoint_at) (pc))
-	{
-	  if (debug_threads)
-	    debug_printf ("previous SW breakpoint of %ld gone\n",
-			  lwpid_of (thread));
-	  discard = 1;
-	}
-      else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT
-	       && !hardware_breakpoint_inserted_here (pc))
-	{
-	  if (debug_threads)
-	    debug_printf ("previous HW breakpoint of %ld gone\n",
-			  lwpid_of (thread));
-	  discard = 1;
-	}
-#endif
-
-      current_thread = saved_thread;
-
-      if (discard)
-	{
-	  if (debug_threads)
-	    debug_printf ("discarding pending breakpoint status\n");
-	  lp->status_pending_p = 0;
-	  return 0;
-	}
-    }
-
-  return 1;
-}
-
-/* Returns true if LWP is resumed from the client's perspective.  */
-
-static int
-lwp_resumed (struct lwp_info *lwp)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-
-  if (thread->last_resume_kind != resume_stop)
-    return 1;
-
-  /* Did gdb send us a `vCont;t', but we haven't reported the
-     corresponding stop to gdb yet?  If so, the thread is still
-     resumed/running from gdb's perspective.  */
-  if (thread->last_resume_kind == resume_stop
-      && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
-    return 1;
-
-  return 0;
-}
-
-/* Return true if this lwp has an interesting status pending.  */
-static bool
-status_pending_p_callback (thread_info *thread, ptid_t ptid)
-{
-  struct lwp_info *lp = get_thread_lwp (thread);
-
-  /* Check if we're only interested in events from a specific process
-     or a specific LWP.  */
-  if (!thread->id.matches (ptid))
-    return 0;
-
-  if (!lwp_resumed (lp))
-    return 0;
-
-  if (lp->status_pending_p
-      && !thread_still_has_status_pending_p (thread))
-    {
-      linux_resume_one_lwp (lp, lp->stepping, GDB_SIGNAL_0, NULL);
-      return 0;
-    }
-
-  return lp->status_pending_p;
-}
-
-struct lwp_info *
-find_lwp_pid (ptid_t ptid)
-{
-  thread_info *thread = find_thread ([&] (thread_info *thr_arg)
-    {
-      int lwp = ptid.lwp () != 0 ? ptid.lwp () : ptid.pid ();
-      return thr_arg->id.lwp () == lwp;
-    });
-
-  if (thread == NULL)
-    return NULL;
-
-  return get_thread_lwp (thread);
-}
-
-/* Return the number of known LWPs in the tgid given by PID.  */
-
-static int
-num_lwps (int pid)
-{
-  int count = 0;
-
-  for_each_thread (pid, [&] (thread_info *thread)
-    {
-      count++;
-    });
-
-  return count;
-}
-
-/* See nat/linux-nat.h.  */
-
-struct lwp_info *
-iterate_over_lwps (ptid_t filter,
-		   gdb::function_view<iterate_over_lwps_ftype> callback)
-{
-  thread_info *thread = find_thread (filter, [&] (thread_info *thr_arg)
-    {
-      lwp_info *lwp = get_thread_lwp (thr_arg);
-
-      return callback (lwp);
-    });
-
-  if (thread == NULL)
-    return NULL;
-
-  return get_thread_lwp (thread);
-}
-
-/* Detect zombie thread group leaders, and "exit" them.  We can't reap
-   their exits until all other threads in the group have exited.  */
-
-static void
-check_zombie_leaders (void)
-{
-  for_each_process ([] (process_info *proc) {
-    pid_t leader_pid = pid_of (proc);
-    struct lwp_info *leader_lp;
-
-    leader_lp = find_lwp_pid (ptid_t (leader_pid));
-
-    if (debug_threads)
-      debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, "
-		    "num_lwps=%d, zombie=%d\n",
-		    leader_pid, leader_lp!= NULL, num_lwps (leader_pid),
-		    linux_proc_pid_is_zombie (leader_pid));
-
-    if (leader_lp != NULL && !leader_lp->stopped
-	/* Check if there are other threads in the group, as we may
-	   have raced with the inferior simply exiting.  */
-	&& !last_thread_of_process_p (leader_pid)
-	&& linux_proc_pid_is_zombie (leader_pid))
-      {
-	/* A leader zombie can mean one of two things:
-
-	   - It exited, and there's an exit status pending
-	   available, or only the leader exited (not the whole
-	   program).  In the latter case, we can't waitpid the
-	   leader's exit status until all other threads are gone.
-
-	   - There are 3 or more threads in the group, and a thread
-	   other than the leader exec'd.  On an exec, the Linux
-	   kernel destroys all other threads (except the execing
-	   one) in the thread group, and resets the execing thread's
-	   tid to the tgid.  No exit notification is sent for the
-	   execing thread -- from the ptracer's perspective, it
-	   appears as though the execing thread just vanishes.
-	   Until we reap all other threads except the leader and the
-	   execing thread, the leader will be zombie, and the
-	   execing thread will be in `D (disc sleep)'.  As soon as
-	   all other threads are reaped, the execing thread changes
-	   it's tid to the tgid, and the previous (zombie) leader
-	   vanishes, giving place to the "new" leader.  We could try
-	   distinguishing the exit and exec cases, by waiting once
-	   more, and seeing if something comes out, but it doesn't
-	   sound useful.  The previous leader _does_ go away, and
-	   we'll re-add the new one once we see the exec event
-	   (which is just the same as what would happen if the
-	   previous leader did exit voluntarily before some other
-	   thread execs).  */
-
-	if (debug_threads)
-	  debug_printf ("CZL: Thread group leader %d zombie "
-			"(it exited, or another thread execd).\n",
-			leader_pid);
-
-	delete_lwp (leader_lp);
-      }
-    });
-}
-
-/* Callback for `find_thread'.  Returns the first LWP that is not
-   stopped.  */
-
-static bool
-not_stopped_callback (thread_info *thread, ptid_t filter)
-{
-  if (!thread->id.matches (filter))
-    return false;
-
-  lwp_info *lwp = get_thread_lwp (thread);
-
-  return !lwp->stopped;
-}
-
-/* Increment LWP's suspend count.  */
-
-static void
-lwp_suspended_inc (struct lwp_info *lwp)
-{
-  lwp->suspended++;
-
-  if (debug_threads && lwp->suspended > 4)
-    {
-      struct thread_info *thread = get_lwp_thread (lwp);
-
-      debug_printf ("LWP %ld has a suspiciously high suspend count,"
-		    " suspended=%d\n", lwpid_of (thread), lwp->suspended);
-    }
-}
-
-/* Decrement LWP's suspend count.  */
-
-static void
-lwp_suspended_decr (struct lwp_info *lwp)
-{
-  lwp->suspended--;
-
-  if (lwp->suspended < 0)
-    {
-      struct thread_info *thread = get_lwp_thread (lwp);
-
-      internal_error (__FILE__, __LINE__,
-		      "unsuspend LWP %ld, suspended=%d\n", lwpid_of (thread),
-		      lwp->suspended);
-    }
-}
-
-/* This function should only be called if the LWP got a SIGTRAP.
-
-   Handle any tracepoint steps or hits.  Return true if a tracepoint
-   event was handled, 0 otherwise.  */
-
-static int
-handle_tracepoints (struct lwp_info *lwp)
-{
-  struct thread_info *tinfo = get_lwp_thread (lwp);
-  int tpoint_related_event = 0;
-
-  gdb_assert (lwp->suspended == 0);
-
-  /* If this tracepoint hit causes a tracing stop, we'll immediately
-     uninsert tracepoints.  To do this, we temporarily pause all
-     threads, unpatch away, and then unpause threads.  We need to make
-     sure the unpausing doesn't resume LWP too.  */
-  lwp_suspended_inc (lwp);
-
-  /* And we need to be sure that any all-threads-stopping doesn't try
-     to move threads out of the jump pads, as it could deadlock the
-     inferior (LWP could be in the jump pad, maybe even holding the
-     lock.)  */
-
-  /* Do any necessary step collect actions.  */
-  tpoint_related_event |= tracepoint_finished_step (tinfo, lwp->stop_pc);
-
-  tpoint_related_event |= handle_tracepoint_bkpts (tinfo, lwp->stop_pc);
-
-  /* See if we just hit a tracepoint and do its main collect
-     actions.  */
-  tpoint_related_event |= tracepoint_was_hit (tinfo, lwp->stop_pc);
-
-  lwp_suspended_decr (lwp);
-
-  gdb_assert (lwp->suspended == 0);
-  gdb_assert (!stabilizing_threads
-	      || (lwp->collecting_fast_tracepoint
-		  != fast_tpoint_collect_result::not_collecting));
-
-  if (tpoint_related_event)
-    {
-      if (debug_threads)
-	debug_printf ("got a tracepoint event\n");
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Convenience wrapper.  Returns information about LWP's fast tracepoint
-   collection status.  */
-
-static fast_tpoint_collect_result
-linux_fast_tracepoint_collecting (struct lwp_info *lwp,
-				  struct fast_tpoint_collect_status *status)
-{
-  CORE_ADDR thread_area;
-  struct thread_info *thread = get_lwp_thread (lwp);
-
-  if (the_low_target.get_thread_area == NULL)
-    return fast_tpoint_collect_result::not_collecting;
-
-  /* Get the thread area address.  This is used to recognize which
-     thread is which when tracing with the in-process agent library.
-     We don't read anything from the address, and treat it as opaque;
-     it's the address itself that we assume is unique per-thread.  */
-  if ((*the_low_target.get_thread_area) (lwpid_of (thread), &thread_area) == -1)
-    return fast_tpoint_collect_result::not_collecting;
-
-  return fast_tracepoint_collecting (thread_area, lwp->stop_pc, status);
-}
-
-/* The reason we resume in the caller, is because we want to be able
-   to pass lwp->status_pending as WSTAT, and we need to clear
-   status_pending_p before resuming, otherwise, linux_resume_one_lwp
-   refuses to resume.  */
-
-static int
-maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat)
-{
-  struct thread_info *saved_thread;
-
-  saved_thread = current_thread;
-  current_thread = get_lwp_thread (lwp);
-
-  if ((wstat == NULL
-       || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP))
-      && supports_fast_tracepoints ()
-      && agent_loaded_p ())
-    {
-      struct fast_tpoint_collect_status status;
-
-      if (debug_threads)
-	debug_printf ("Checking whether LWP %ld needs to move out of the "
-		      "jump pad.\n",
-		      lwpid_of (current_thread));
-
-      fast_tpoint_collect_result r
-	= linux_fast_tracepoint_collecting (lwp, &status);
-
-      if (wstat == NULL
-	  || (WSTOPSIG (*wstat) != SIGILL
-	      && WSTOPSIG (*wstat) != SIGFPE
-	      && WSTOPSIG (*wstat) != SIGSEGV
-	      && WSTOPSIG (*wstat) != SIGBUS))
-	{
-	  lwp->collecting_fast_tracepoint = r;
-
-	  if (r != fast_tpoint_collect_result::not_collecting)
-	    {
-	      if (r == fast_tpoint_collect_result::before_insn
-		  && lwp->exit_jump_pad_bkpt == NULL)
-		{
-		  /* Haven't executed the original instruction yet.
-		     Set breakpoint there, and wait till it's hit,
-		     then single-step until exiting the jump pad.  */
-		  lwp->exit_jump_pad_bkpt
-		    = set_breakpoint_at (status.adjusted_insn_addr, NULL);
-		}
-
-	      if (debug_threads)
-		debug_printf ("Checking whether LWP %ld needs to move out of "
-			      "the jump pad...it does\n",
-			      lwpid_of (current_thread));
-	      current_thread = saved_thread;
-
-	      return 1;
-	    }
-	}
-      else
-	{
-	  /* If we get a synchronous signal while collecting, *and*
-	     while executing the (relocated) original instruction,
-	     reset the PC to point at the tpoint address, before
-	     reporting to GDB.  Otherwise, it's an IPA lib bug: just
-	     report the signal to GDB, and pray for the best.  */
-
-	  lwp->collecting_fast_tracepoint
-	    = fast_tpoint_collect_result::not_collecting;
-
-	  if (r != fast_tpoint_collect_result::not_collecting
-	      && (status.adjusted_insn_addr <= lwp->stop_pc
-		  && lwp->stop_pc < status.adjusted_insn_addr_end))
-	    {
-	      siginfo_t info;
-	      struct regcache *regcache;
-
-	      /* The si_addr on a few signals references the address
-		 of the faulting instruction.  Adjust that as
-		 well.  */
-	      if ((WSTOPSIG (*wstat) == SIGILL
-		   || WSTOPSIG (*wstat) == SIGFPE
-		   || WSTOPSIG (*wstat) == SIGBUS
-		   || WSTOPSIG (*wstat) == SIGSEGV)
-		  && ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
-			     (PTRACE_TYPE_ARG3) 0, &info) == 0
-		  /* Final check just to make sure we don't clobber
-		     the siginfo of non-kernel-sent signals.  */
-		  && (uintptr_t) info.si_addr == lwp->stop_pc)
-		{
-		  info.si_addr = (void *) (uintptr_t) status.tpoint_addr;
-		  ptrace (PTRACE_SETSIGINFO, lwpid_of (current_thread),
-			  (PTRACE_TYPE_ARG3) 0, &info);
-		}
-
-	      regcache = get_thread_regcache (current_thread, 1);
-	      (*the_low_target.set_pc) (regcache, status.tpoint_addr);
-	      lwp->stop_pc = status.tpoint_addr;
-
-	      /* Cancel any fast tracepoint lock this thread was
-		 holding.  */
-	      force_unlock_trace_buffer ();
-	    }
-
-	  if (lwp->exit_jump_pad_bkpt != NULL)
-	    {
-	      if (debug_threads)
-		debug_printf ("Cancelling fast exit-jump-pad: removing bkpt. "
-			      "stopping all threads momentarily.\n");
-
-	      stop_all_lwps (1, lwp);
-
-	      delete_breakpoint (lwp->exit_jump_pad_bkpt);
-	      lwp->exit_jump_pad_bkpt = NULL;
-
-	      unstop_all_lwps (1, lwp);
-
-	      gdb_assert (lwp->suspended >= 0);
-	    }
-	}
-    }
-
-  if (debug_threads)
-    debug_printf ("Checking whether LWP %ld needs to move out of the "
-		  "jump pad...no\n",
-		  lwpid_of (current_thread));
-
-  current_thread = saved_thread;
-  return 0;
-}
-
-/* Enqueue one signal in the "signals to report later when out of the
-   jump pad" list.  */
-
-static void
-enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
-{
-  struct pending_signals *p_sig;
-  struct thread_info *thread = get_lwp_thread (lwp);
-
-  if (debug_threads)
-    debug_printf ("Deferring signal %d for LWP %ld.\n",
-		  WSTOPSIG (*wstat), lwpid_of (thread));
-
-  if (debug_threads)
-    {
-      struct pending_signals *sig;
-
-      for (sig = lwp->pending_signals_to_report;
-	   sig != NULL;
-	   sig = sig->prev)
-	debug_printf ("   Already queued %d\n",
-		      sig->signal);
-
-      debug_printf ("   (no more currently queued signals)\n");
-    }
-
-  /* Don't enqueue non-RT signals if they are already in the deferred
-     queue.  (SIGSTOP being the easiest signal to see ending up here
-     twice)  */
-  if (WSTOPSIG (*wstat) < __SIGRTMIN)
-    {
-      struct pending_signals *sig;
-
-      for (sig = lwp->pending_signals_to_report;
-	   sig != NULL;
-	   sig = sig->prev)
-	{
-	  if (sig->signal == WSTOPSIG (*wstat))
-	    {
-	      if (debug_threads)
-		debug_printf ("Not requeuing already queued non-RT signal %d"
-			      " for LWP %ld\n",
-			      sig->signal,
-			      lwpid_of (thread));
-	      return;
-	    }
-	}
-    }
-
-  p_sig = XCNEW (struct pending_signals);
-  p_sig->prev = lwp->pending_signals_to_report;
-  p_sig->signal = WSTOPSIG (*wstat);
-
-  ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
-	  &p_sig->info);
-
-  lwp->pending_signals_to_report = p_sig;
-}
-
-/* Dequeue one signal from the "signals to report later when out of
-   the jump pad" list.  */
-
-static int
-dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-
-  if (lwp->pending_signals_to_report != NULL)
-    {
-      struct pending_signals **p_sig;
-
-      p_sig = &lwp->pending_signals_to_report;
-      while ((*p_sig)->prev != NULL)
-	p_sig = &(*p_sig)->prev;
-
-      *wstat = W_STOPCODE ((*p_sig)->signal);
-      if ((*p_sig)->info.si_signo != 0)
-	ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
-		&(*p_sig)->info);
-      free (*p_sig);
-      *p_sig = NULL;
-
-      if (debug_threads)
-	debug_printf ("Reporting deferred signal %d for LWP %ld.\n",
-		      WSTOPSIG (*wstat), lwpid_of (thread));
-
-      if (debug_threads)
-	{
-	  struct pending_signals *sig;
-
-	  for (sig = lwp->pending_signals_to_report;
-	       sig != NULL;
-	       sig = sig->prev)
-	    debug_printf ("   Still queued %d\n",
-			  sig->signal);
-
-	  debug_printf ("   (no more queued signals)\n");
-	}
-
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Fetch the possibly triggered data watchpoint info and store it in
-   CHILD.
-
-   On some archs, like x86, that use debug registers to set
-   watchpoints, it's possible that the way to know which watched
-   address trapped, is to check the register that is used to select
-   which address to watch.  Problem is, between setting the watchpoint
-   and reading back which data address trapped, the user may change
-   the set of watchpoints, and, as a consequence, GDB changes the
-   debug registers in the inferior.  To avoid reading back a stale
-   stopped-data-address when that happens, we cache in LP the fact
-   that a watchpoint trapped, and the corresponding data address, as
-   soon as we see CHILD stop with a SIGTRAP.  If GDB changes the debug
-   registers meanwhile, we have the cached data we can rely on.  */
-
-static int
-check_stopped_by_watchpoint (struct lwp_info *child)
-{
-  if (the_low_target.stopped_by_watchpoint != NULL)
-    {
-      struct thread_info *saved_thread;
-
-      saved_thread = current_thread;
-      current_thread = get_lwp_thread (child);
-
-      if (the_low_target.stopped_by_watchpoint ())
-	{
-	  child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
-
-	  if (the_low_target.stopped_data_address != NULL)
-	    child->stopped_data_address
-	      = the_low_target.stopped_data_address ();
-	  else
-	    child->stopped_data_address = 0;
-	}
-
-      current_thread = saved_thread;
-    }
-
-  return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
-}
-
-/* Return the ptrace options that we want to try to enable.  */
-
-static int
-linux_low_ptrace_options (int attached)
-{
-  client_state &cs = get_client_state ();
-  int options = 0;
-
-  if (!attached)
-    options |= PTRACE_O_EXITKILL;
-
-  if (cs.report_fork_events)
-    options |= PTRACE_O_TRACEFORK;
-
-  if (cs.report_vfork_events)
-    options |= (PTRACE_O_TRACEVFORK | PTRACE_O_TRACEVFORKDONE);
-
-  if (cs.report_exec_events)
-    options |= PTRACE_O_TRACEEXEC;
-
-  options |= PTRACE_O_TRACESYSGOOD;
-
-  return options;
-}
-
-/* Do low-level handling of the event, and check if we should go on
-   and pass it to caller code.  Return the affected lwp if we are, or
-   NULL otherwise.  */
-
-static struct lwp_info *
-linux_low_filter_event (int lwpid, int wstat)
-{
-  client_state &cs = get_client_state ();
-  struct lwp_info *child;
-  struct thread_info *thread;
-  int have_stop_pc = 0;
-
-  child = find_lwp_pid (ptid_t (lwpid));
-
-  /* Check for stop events reported by a process we didn't already
-     know about - anything not already in our LWP list.
-
-     If we're expecting to receive stopped processes after
-     fork, vfork, and clone events, then we'll just add the
-     new one to our list and go back to waiting for the event
-     to be reported - the stopped process might be returned
-     from waitpid before or after the event is.
-
-     But note the case of a non-leader thread exec'ing after the
-     leader having exited, and gone from our lists (because
-     check_zombie_leaders deleted it).  The non-leader thread
-     changes its tid to the tgid.  */
-
-  if (WIFSTOPPED (wstat) && child == NULL && WSTOPSIG (wstat) == SIGTRAP
-      && linux_ptrace_get_extended_event (wstat) == PTRACE_EVENT_EXEC)
-    {
-      ptid_t child_ptid;
-
-      /* A multi-thread exec after we had seen the leader exiting.  */
-      if (debug_threads)
-	{
-	  debug_printf ("LLW: Re-adding thread group leader LWP %d"
-			"after exec.\n", lwpid);
-	}
-
-      child_ptid = ptid_t (lwpid, lwpid, 0);
-      child = add_lwp (child_ptid);
-      child->stopped = 1;
-      current_thread = child->thread;
-    }
-
-  /* If we didn't find a process, one of two things presumably happened:
-     - A process we started and then detached from has exited.  Ignore it.
-     - A process we are controlling has forked and the new child's stop
-     was reported to us by the kernel.  Save its PID.  */
-  if (child == NULL && WIFSTOPPED (wstat))
-    {
-      add_to_pid_list (&stopped_pids, lwpid, wstat);
-      return NULL;
-    }
-  else if (child == NULL)
-    return NULL;
-
-  thread = get_lwp_thread (child);
-
-  child->stopped = 1;
-
-  child->last_status = wstat;
-
-  /* Check if the thread has exited.  */
-  if ((WIFEXITED (wstat) || WIFSIGNALED (wstat)))
-    {
-      if (debug_threads)
-	debug_printf ("LLFE: %d exited.\n", lwpid);
-
-      if (finish_step_over (child))
-	{
-	  /* Unsuspend all other LWPs, and set them back running again.  */
-	  unsuspend_all_lwps (child);
-	}
-
-      /* If there is at least one more LWP, then the exit signal was
-	 not the end of the debugged application and should be
-	 ignored, unless GDB wants to hear about thread exits.  */
-      if (cs.report_thread_events
-	  || last_thread_of_process_p (pid_of (thread)))
-	{
-	  /* Since events are serialized to GDB core, and we can't
-	     report this one right now.  Leave the status pending for
-	     the next time we're able to report it.  */
-	  mark_lwp_dead (child, wstat);
-	  return child;
-	}
-      else
-	{
-	  delete_lwp (child);
-	  return NULL;
-	}
-    }
-
-  gdb_assert (WIFSTOPPED (wstat));
-
-  if (WIFSTOPPED (wstat))
-    {
-      struct process_info *proc;
-
-      /* Architecture-specific setup after inferior is running.  */
-      proc = find_process_pid (pid_of (thread));
-      if (proc->tdesc == NULL)
-	{
-	  if (proc->attached)
-	    {
-	      /* This needs to happen after we have attached to the
-		 inferior and it is stopped for the first time, but
-		 before we access any inferior registers.  */
-	      linux_arch_setup_thread (thread);
-	    }
-	  else
-	    {
-	      /* The process is started, but GDBserver will do
-		 architecture-specific setup after the program stops at
-		 the first instruction.  */
-	      child->status_pending_p = 1;
-	      child->status_pending = wstat;
-	      return child;
-	    }
-	}
-    }
-
-  if (WIFSTOPPED (wstat) && child->must_set_ptrace_flags)
-    {
-      struct process_info *proc = find_process_pid (pid_of (thread));
-      int options = linux_low_ptrace_options (proc->attached);
-
-      linux_enable_event_reporting (lwpid, options);
-      child->must_set_ptrace_flags = 0;
-    }
-
-  /* Always update syscall_state, even if it will be filtered later.  */
-  if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SYSCALL_SIGTRAP)
-    {
-      child->syscall_state
-	= (child->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
-	   ? TARGET_WAITKIND_SYSCALL_RETURN
-	   : TARGET_WAITKIND_SYSCALL_ENTRY);
-    }
-  else
-    {
-      /* Almost all other ptrace-stops are known to be outside of system
-	 calls, with further exceptions in handle_extended_wait.  */
-      child->syscall_state = TARGET_WAITKIND_IGNORE;
-    }
-
-  /* Be careful to not overwrite stop_pc until save_stop_reason is
-     called.  */
-  if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP
-      && linux_is_extended_waitstatus (wstat))
-    {
-      child->stop_pc = get_pc (child);
-      if (handle_extended_wait (&child, wstat))
-	{
-	  /* The event has been handled, so just return without
-	     reporting it.  */
-	  return NULL;
-	}
-    }
-
-  if (linux_wstatus_maybe_breakpoint (wstat))
-    {
-      if (save_stop_reason (child))
-	have_stop_pc = 1;
-    }
-
-  if (!have_stop_pc)
-    child->stop_pc = get_pc (child);
-
-  if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGSTOP
-      && child->stop_expected)
-    {
-      if (debug_threads)
-	debug_printf ("Expected stop.\n");
-      child->stop_expected = 0;
-
-      if (thread->last_resume_kind == resume_stop)
-	{
-	  /* We want to report the stop to the core.  Treat the
-	     SIGSTOP as a normal event.  */
-	  if (debug_threads)
-	    debug_printf ("LLW: resume_stop SIGSTOP caught for %s.\n",
-			  target_pid_to_str (ptid_of (thread)));
-	}
-      else if (stopping_threads != NOT_STOPPING_THREADS)
-	{
-	  /* Stopping threads.  We don't want this SIGSTOP to end up
-	     pending.  */
-	  if (debug_threads)
-	    debug_printf ("LLW: SIGSTOP caught for %s "
-			  "while stopping threads.\n",
-			  target_pid_to_str (ptid_of (thread)));
-	  return NULL;
-	}
-      else
-	{
-	  /* This is a delayed SIGSTOP.  Filter out the event.  */
-	  if (debug_threads)
-	    debug_printf ("LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n",
-			  child->stepping ? "step" : "continue",
-			  target_pid_to_str (ptid_of (thread)));
-
-	  linux_resume_one_lwp (child, child->stepping, 0, NULL);
-	  return NULL;
-	}
-    }
-
-  child->status_pending_p = 1;
-  child->status_pending = wstat;
-  return child;
-}
-
-/* Return true if THREAD is doing hardware single step.  */
-
-static int
-maybe_hw_step (struct thread_info *thread)
-{
-  if (can_hardware_single_step ())
-    return 1;
-  else
-    {
-      /* GDBserver must insert single-step breakpoint for software
-	 single step.  */
-      gdb_assert (has_single_step_breakpoints (thread));
-      return 0;
-    }
-}
-
-/* Resume LWPs that are currently stopped without any pending status
-   to report, but are resumed from the core's perspective.  */
-
-static void
-resume_stopped_resumed_lwps (thread_info *thread)
-{
-  struct lwp_info *lp = get_thread_lwp (thread);
-
-  if (lp->stopped
-      && !lp->suspended
-      && !lp->status_pending_p
-      && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
-    {
-      int step = 0;
-
-      if (thread->last_resume_kind == resume_step)
-	step = maybe_hw_step (thread);
-
-      if (debug_threads)
-	debug_printf ("RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n",
-		      target_pid_to_str (ptid_of (thread)),
-		      paddress (lp->stop_pc),
-		      step);
-
-      linux_resume_one_lwp (lp, step, GDB_SIGNAL_0, NULL);
-    }
-}
-
-/* Wait for an event from child(ren) WAIT_PTID, and return any that
-   match FILTER_PTID (leaving others pending).  The PTIDs can be:
-   minus_one_ptid, to specify any child; a pid PTID, specifying all
-   lwps of a thread group; or a PTID representing a single lwp.  Store
-   the stop status through the status pointer WSTAT.  OPTIONS is
-   passed to the waitpid call.  Return 0 if no event was found and
-   OPTIONS contains WNOHANG.  Return -1 if no unwaited-for children
-   was found.  Return the PID of the stopped child otherwise.  */
-
-static int
-linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid,
-			       int *wstatp, int options)
-{
-  struct thread_info *event_thread;
-  struct lwp_info *event_child, *requested_child;
-  sigset_t block_mask, prev_mask;
-
- retry:
-  /* N.B. event_thread points to the thread_info struct that contains
-     event_child.  Keep them in sync.  */
-  event_thread = NULL;
-  event_child = NULL;
-  requested_child = NULL;
-
-  /* Check for a lwp with a pending status.  */
-
-  if (filter_ptid == minus_one_ptid || filter_ptid.is_pid ())
-    {
-      event_thread = find_thread_in_random ([&] (thread_info *thread)
-	{
-	  return status_pending_p_callback (thread, filter_ptid);
-	});
-
-      if (event_thread != NULL)
-	event_child = get_thread_lwp (event_thread);
-      if (debug_threads && event_thread)
-	debug_printf ("Got a pending child %ld\n", lwpid_of (event_thread));
-    }
-  else if (filter_ptid != null_ptid)
-    {
-      requested_child = find_lwp_pid (filter_ptid);
-
-      if (stopping_threads == NOT_STOPPING_THREADS
-	  && requested_child->status_pending_p
-	  && (requested_child->collecting_fast_tracepoint
-	      != fast_tpoint_collect_result::not_collecting))
-	{
-	  enqueue_one_deferred_signal (requested_child,
-				       &requested_child->status_pending);
-	  requested_child->status_pending_p = 0;
-	  requested_child->status_pending = 0;
-	  linux_resume_one_lwp (requested_child, 0, 0, NULL);
-	}
-
-      if (requested_child->suspended
-	  && requested_child->status_pending_p)
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "requesting an event out of a"
-			  " suspended child?");
-	}
-
-      if (requested_child->status_pending_p)
-	{
-	  event_child = requested_child;
-	  event_thread = get_lwp_thread (event_child);
-	}
-    }
-
-  if (event_child != NULL)
-    {
-      if (debug_threads)
-	debug_printf ("Got an event from pending child %ld (%04x)\n",
-		      lwpid_of (event_thread), event_child->status_pending);
-      *wstatp = event_child->status_pending;
-      event_child->status_pending_p = 0;
-      event_child->status_pending = 0;
-      current_thread = event_thread;
-      return lwpid_of (event_thread);
-    }
-
-  /* But if we don't find a pending event, we'll have to wait.
-
-     We only enter this loop if no process has a pending wait status.
-     Thus any action taken in response to a wait status inside this
-     loop is responding as soon as we detect the status, not after any
-     pending events.  */
-
-  /* Make sure SIGCHLD is blocked until the sigsuspend below.  Block
-     all signals while here.  */
-  sigfillset (&block_mask);
-  gdb_sigmask (SIG_BLOCK, &block_mask, &prev_mask);
-
-  /* Always pull all events out of the kernel.  We'll randomly select
-     an event LWP out of all that have events, to prevent
-     starvation.  */
-  while (event_child == NULL)
-    {
-      pid_t ret = 0;
-
-      /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace
-	 quirks:
-
-	 - If the thread group leader exits while other threads in the
-	   thread group still exist, waitpid(TGID, ...) hangs.  That
-	   waitpid won't return an exit status until the other threads
-	   in the group are reaped.
-
-	 - When a non-leader thread execs, that thread just vanishes
-	   without reporting an exit (so we'd hang if we waited for it
-	   explicitly in that case).  The exec event is reported to
-	   the TGID pid.  */
-      errno = 0;
-      ret = my_waitpid (-1, wstatp, options | WNOHANG);
-
-      if (debug_threads)
-	debug_printf ("LWFE: waitpid(-1, ...) returned %d, %s\n",
-		      ret, errno ? safe_strerror (errno) : "ERRNO-OK");
-
-      if (ret > 0)
-	{
-	  if (debug_threads)
-	    {
-	      debug_printf ("LLW: waitpid %ld received %s\n",
-			    (long) ret, status_to_str (*wstatp));
-	    }
-
-	  /* Filter all events.  IOW, leave all events pending.  We'll
-	     randomly select an event LWP out of all that have events
-	     below.  */
-	  linux_low_filter_event (ret, *wstatp);
-	  /* Retry until nothing comes out of waitpid.  A single
-	     SIGCHLD can indicate more than one child stopped.  */
-	  continue;
-	}
-
-      /* Now that we've pulled all events out of the kernel, resume
-	 LWPs that don't have an interesting event to report.  */
-      if (stopping_threads == NOT_STOPPING_THREADS)
-	for_each_thread (resume_stopped_resumed_lwps);
-
-      /* ... and find an LWP with a status to report to the core, if
-	 any.  */
-      event_thread = find_thread_in_random ([&] (thread_info *thread)
-	{
-	  return status_pending_p_callback (thread, filter_ptid);
-	});
-
-      if (event_thread != NULL)
-	{
-	  event_child = get_thread_lwp (event_thread);
-	  *wstatp = event_child->status_pending;
-	  event_child->status_pending_p = 0;
-	  event_child->status_pending = 0;
-	  break;
-	}
-
-      /* Check for zombie thread group leaders.  Those can't be reaped
-	 until all other threads in the thread group are.  */
-      check_zombie_leaders ();
-
-      auto not_stopped = [&] (thread_info *thread)
-	{
-	  return not_stopped_callback (thread, wait_ptid);
-	};
-
-      /* If there are no resumed children left in the set of LWPs we
-	 want to wait for, bail.  We can't just block in
-	 waitpid/sigsuspend, because lwps might have been left stopped
-	 in trace-stop state, and we'd be stuck forever waiting for
-	 their status to change (which would only happen if we resumed
-	 them).  Even if WNOHANG is set, this return code is preferred
-	 over 0 (below), as it is more detailed.  */
-      if (find_thread (not_stopped) == NULL)
-	{
-	  if (debug_threads)
-	    debug_printf ("LLW: exit (no unwaited-for LWP)\n");
-	  gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
-	  return -1;
-	}
-
-      /* No interesting event to report to the caller.  */
-      if ((options & WNOHANG))
-	{
-	  if (debug_threads)
-	    debug_printf ("WNOHANG set, no event found\n");
-
-	  gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
-	  return 0;
-	}
-
-      /* Block until we get an event reported with SIGCHLD.  */
-      if (debug_threads)
-	debug_printf ("sigsuspend'ing\n");
-
-      sigsuspend (&prev_mask);
-      gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
-      goto retry;
-    }
-
-  gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
-
-  current_thread = event_thread;
-
-  return lwpid_of (event_thread);
-}
-
-/* Wait for an event from child(ren) PTID.  PTIDs can be:
-   minus_one_ptid, to specify any child; a pid PTID, specifying all
-   lwps of a thread group; or a PTID representing a single lwp.  Store
-   the stop status through the status pointer WSTAT.  OPTIONS is
-   passed to the waitpid call.  Return 0 if no event was found and
-   OPTIONS contains WNOHANG.  Return -1 if no unwaited-for children
-   was found.  Return the PID of the stopped child otherwise.  */
-
-static int
-linux_wait_for_event (ptid_t ptid, int *wstatp, int options)
-{
-  return linux_wait_for_event_filtered (ptid, ptid, wstatp, options);
-}
-
-/* Select one LWP out of those that have events pending.  */
-
-static void
-select_event_lwp (struct lwp_info **orig_lp)
-{
-  struct thread_info *event_thread = NULL;
-
-  /* In all-stop, give preference to the LWP that is being
-     single-stepped.  There will be at most one, and it's the LWP that
-     the core is most interested in.  If we didn't do this, then we'd
-     have to handle pending step SIGTRAPs somehow in case the core
-     later continues the previously-stepped thread, otherwise we'd
-     report the pending SIGTRAP, and the core, not having stepped the
-     thread, wouldn't understand what the trap was for, and therefore
-     would report it to the user as a random signal.  */
-  if (!non_stop)
-    {
-      event_thread = find_thread ([] (thread_info *thread)
-	{
-	  lwp_info *lp = get_thread_lwp (thread);
-
-	  return (thread->last_status.kind == TARGET_WAITKIND_IGNORE
-		  && thread->last_resume_kind == resume_step
-		  && lp->status_pending_p);
-	});
-
-      if (event_thread != NULL)
-	{
-	  if (debug_threads)
-	    debug_printf ("SEL: Select single-step %s\n",
-			  target_pid_to_str (ptid_of (event_thread)));
-	}
-    }
-  if (event_thread == NULL)
-    {
-      /* No single-stepping LWP.  Select one at random, out of those
-         which have had events.  */
-
-      event_thread = find_thread_in_random ([&] (thread_info *thread)
-	{
-	  lwp_info *lp = get_thread_lwp (thread);
-
-	  /* Only resumed LWPs that have an event pending. */
-	  return (thread->last_status.kind == TARGET_WAITKIND_IGNORE
-		  && lp->status_pending_p);
-	});
-    }
-
-  if (event_thread != NULL)
-    {
-      struct lwp_info *event_lp = get_thread_lwp (event_thread);
-
-      /* Switch the event LWP.  */
-      *orig_lp = event_lp;
-    }
-}
-
-/* Decrement the suspend count of all LWPs, except EXCEPT, if non
-   NULL.  */
-
-static void
-unsuspend_all_lwps (struct lwp_info *except)
-{
-  for_each_thread ([&] (thread_info *thread)
-    {
-      lwp_info *lwp = get_thread_lwp (thread);
-
-      if (lwp != except)
-	lwp_suspended_decr (lwp);
-    });
-}
-
-static void move_out_of_jump_pad_callback (thread_info *thread);
-static bool stuck_in_jump_pad_callback (thread_info *thread);
-static bool lwp_running (thread_info *thread);
-static ptid_t linux_wait_1 (ptid_t ptid,
-			    struct target_waitstatus *ourstatus,
-			    int target_options);
-
-/* Stabilize threads (move out of jump pads).
-
-   If a thread is midway collecting a fast tracepoint, we need to
-   finish the collection and move it out of the jump pad before
-   reporting the signal.
-
-   This avoids recursion while collecting (when a signal arrives
-   midway, and the signal handler itself collects), which would trash
-   the trace buffer.  In case the user set a breakpoint in a signal
-   handler, this avoids the backtrace showing the jump pad, etc..
-   Most importantly, there are certain things we can't do safely if
-   threads are stopped in a jump pad (or in its callee's).  For
-   example:
-
-     - starting a new trace run.  A thread still collecting the
-   previous run, could trash the trace buffer when resumed.  The trace
-   buffer control structures would have been reset but the thread had
-   no way to tell.  The thread could even midway memcpy'ing to the
-   buffer, which would mean that when resumed, it would clobber the
-   trace buffer that had been set for a new run.
-
-     - we can't rewrite/reuse the jump pads for new tracepoints
-   safely.  Say you do tstart while a thread is stopped midway while
-   collecting.  When the thread is later resumed, it finishes the
-   collection, and returns to the jump pad, to execute the original
-   instruction that was under the tracepoint jump at the time the
-   older run had been started.  If the jump pad had been rewritten
-   since for something else in the new run, the thread would now
-   execute the wrong / random instructions.  */
-
-static void
-linux_stabilize_threads (void)
-{
-  thread_info *thread_stuck = find_thread (stuck_in_jump_pad_callback);
-
-  if (thread_stuck != NULL)
-    {
-      if (debug_threads)
-	debug_printf ("can't stabilize, LWP %ld is stuck in jump pad\n",
-		      lwpid_of (thread_stuck));
-      return;
-    }
-
-  thread_info *saved_thread = current_thread;
-
-  stabilizing_threads = 1;
-
-  /* Kick 'em all.  */
-  for_each_thread (move_out_of_jump_pad_callback);
-
-  /* Loop until all are stopped out of the jump pads.  */
-  while (find_thread (lwp_running) != NULL)
-    {
-      struct target_waitstatus ourstatus;
-      struct lwp_info *lwp;
-      int wstat;
-
-      /* Note that we go through the full wait even loop.  While
-	 moving threads out of jump pad, we need to be able to step
-	 over internal breakpoints and such.  */
-      linux_wait_1 (minus_one_ptid, &ourstatus, 0);
-
-      if (ourstatus.kind == TARGET_WAITKIND_STOPPED)
-	{
-	  lwp = get_thread_lwp (current_thread);
-
-	  /* Lock it.  */
-	  lwp_suspended_inc (lwp);
-
-	  if (ourstatus.value.sig != GDB_SIGNAL_0
-	      || current_thread->last_resume_kind == resume_stop)
-	    {
-	      wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig));
-	      enqueue_one_deferred_signal (lwp, &wstat);
-	    }
-	}
-    }
-
-  unsuspend_all_lwps (NULL);
-
-  stabilizing_threads = 0;
-
-  current_thread = saved_thread;
-
-  if (debug_threads)
-    {
-      thread_stuck = find_thread (stuck_in_jump_pad_callback);
-
-      if (thread_stuck != NULL)
-	debug_printf ("couldn't stabilize, LWP %ld got stuck in jump pad\n",
-		      lwpid_of (thread_stuck));
-    }
-}
-
-/* Convenience function that is called when the kernel reports an
-   event that is not passed out to GDB.  */
-
-static ptid_t
-ignore_event (struct target_waitstatus *ourstatus)
-{
-  /* If we got an event, there may still be others, as a single
-     SIGCHLD can indicate more than one child stopped.  This forces
-     another target_wait call.  */
-  async_file_mark ();
-
-  ourstatus->kind = TARGET_WAITKIND_IGNORE;
-  return null_ptid;
-}
-
-/* Convenience function that is called when the kernel reports an exit
-   event.  This decides whether to report the event to GDB as a
-   process exit event, a thread exit event, or to suppress the
-   event.  */
-
-static ptid_t
-filter_exit_event (struct lwp_info *event_child,
-		   struct target_waitstatus *ourstatus)
-{
-  client_state &cs = get_client_state ();
-  struct thread_info *thread = get_lwp_thread (event_child);
-  ptid_t ptid = ptid_of (thread);
-
-  if (!last_thread_of_process_p (pid_of (thread)))
-    {
-      if (cs.report_thread_events)
-	ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED;
-      else
-	ourstatus->kind = TARGET_WAITKIND_IGNORE;
-
-      delete_lwp (event_child);
-    }
-  return ptid;
-}
-
-/* Returns 1 if GDB is interested in any event_child syscalls.  */
-
-static int
-gdb_catching_syscalls_p (struct lwp_info *event_child)
-{
-  struct thread_info *thread = get_lwp_thread (event_child);
-  struct process_info *proc = get_thread_process (thread);
-
-  return !proc->syscalls_to_catch.empty ();
-}
-
-/* Returns 1 if GDB is interested in the event_child syscall.
-   Only to be called when stopped reason is SYSCALL_SIGTRAP.  */
-
-static int
-gdb_catch_this_syscall_p (struct lwp_info *event_child)
-{
-  int sysno;
-  struct thread_info *thread = get_lwp_thread (event_child);
-  struct process_info *proc = get_thread_process (thread);
-
-  if (proc->syscalls_to_catch.empty ())
-    return 0;
-
-  if (proc->syscalls_to_catch[0] == ANY_SYSCALL)
-    return 1;
-
-  get_syscall_trapinfo (event_child, &sysno);
-
-  for (int iter : proc->syscalls_to_catch)
-    if (iter == sysno)
-      return 1;
-
-  return 0;
-}
-
-/* Wait for process, returns status.  */
-
-static ptid_t
-linux_wait_1 (ptid_t ptid,
-	      struct target_waitstatus *ourstatus, int target_options)
-{
-  client_state &cs = get_client_state ();
-  int w;
-  struct lwp_info *event_child;
-  int options;
-  int pid;
-  int step_over_finished;
-  int bp_explains_trap;
-  int maybe_internal_trap;
-  int report_to_gdb;
-  int trace_event;
-  int in_step_range;
-  int any_resumed;
-
-  if (debug_threads)
-    {
-      debug_enter ();
-      debug_printf ("linux_wait_1: [%s]\n", target_pid_to_str (ptid));
-    }
-
-  /* Translate generic target options into linux options.  */
-  options = __WALL;
-  if (target_options & TARGET_WNOHANG)
-    options |= WNOHANG;
-
-  bp_explains_trap = 0;
-  trace_event = 0;
-  in_step_range = 0;
-  ourstatus->kind = TARGET_WAITKIND_IGNORE;
-
-  auto status_pending_p_any = [&] (thread_info *thread)
-    {
-      return status_pending_p_callback (thread, minus_one_ptid);
-    };
-
-  auto not_stopped = [&] (thread_info *thread)
-    {
-      return not_stopped_callback (thread, minus_one_ptid);
-    };
-
-  /* Find a resumed LWP, if any.  */
-  if (find_thread (status_pending_p_any) != NULL)
-    any_resumed = 1;
-  else if (find_thread (not_stopped) != NULL)
-    any_resumed = 1;
-  else
-    any_resumed = 0;
-
-  if (step_over_bkpt == null_ptid)
-    pid = linux_wait_for_event (ptid, &w, options);
-  else
-    {
-      if (debug_threads)
-	debug_printf ("step_over_bkpt set [%s], doing a blocking wait\n",
-		      target_pid_to_str (step_over_bkpt));
-      pid = linux_wait_for_event (step_over_bkpt, &w, options & ~WNOHANG);
-    }
-
-  if (pid == 0 || (pid == -1 && !any_resumed))
-    {
-      gdb_assert (target_options & TARGET_WNOHANG);
-
-      if (debug_threads)
-	{
-	  debug_printf ("linux_wait_1 ret = null_ptid, "
-			"TARGET_WAITKIND_IGNORE\n");
-	  debug_exit ();
-	}
-
-      ourstatus->kind = TARGET_WAITKIND_IGNORE;
-      return null_ptid;
-    }
-  else if (pid == -1)
-    {
-      if (debug_threads)
-	{
-	  debug_printf ("linux_wait_1 ret = null_ptid, "
-			"TARGET_WAITKIND_NO_RESUMED\n");
-	  debug_exit ();
-	}
-
-      ourstatus->kind = TARGET_WAITKIND_NO_RESUMED;
-      return null_ptid;
-    }
-
-  event_child = get_thread_lwp (current_thread);
-
-  /* linux_wait_for_event only returns an exit status for the last
-     child of a process.  Report it.  */
-  if (WIFEXITED (w) || WIFSIGNALED (w))
-    {
-      if (WIFEXITED (w))
-	{
-	  ourstatus->kind = TARGET_WAITKIND_EXITED;
-	  ourstatus->value.integer = WEXITSTATUS (w);
-
-	  if (debug_threads)
-	    {
-	      debug_printf ("linux_wait_1 ret = %s, exited with "
-			    "retcode %d\n",
-			    target_pid_to_str (ptid_of (current_thread)),
-			    WEXITSTATUS (w));
-	      debug_exit ();
-	    }
-	}
-      else
-	{
-	  ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-	  ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
-
-	  if (debug_threads)
-	    {
-	      debug_printf ("linux_wait_1 ret = %s, terminated with "
-			    "signal %d\n",
-			    target_pid_to_str (ptid_of (current_thread)),
-			    WTERMSIG (w));
-	      debug_exit ();
-	    }
-	}
-
-      if (ourstatus->kind == TARGET_WAITKIND_EXITED)
-	return filter_exit_event (event_child, ourstatus);
-
-      return ptid_of (current_thread);
-    }
-
-  /* If step-over executes a breakpoint instruction, in the case of a
-     hardware single step it means a gdb/gdbserver breakpoint had been
-     planted on top of a permanent breakpoint, in the case of a software
-     single step it may just mean that gdbserver hit the reinsert breakpoint.
-     The PC has been adjusted by save_stop_reason to point at
-     the breakpoint address.
-     So in the case of the hardware single step advance the PC manually
-     past the breakpoint and in the case of software single step advance only
-     if it's not the single_step_breakpoint we are hitting.
-     This avoids that a program would keep trapping a permanent breakpoint
-     forever.  */
-  if (step_over_bkpt != null_ptid
-      && event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
-      && (event_child->stepping
-	  || !single_step_breakpoint_inserted_here (event_child->stop_pc)))
-    {
-      int increment_pc = 0;
-      int breakpoint_kind = 0;
-      CORE_ADDR stop_pc = event_child->stop_pc;
-
-      breakpoint_kind =
-	the_target->breakpoint_kind_from_current_state (&stop_pc);
-      the_target->sw_breakpoint_from_kind (breakpoint_kind, &increment_pc);
-
-      if (debug_threads)
-	{
-	  debug_printf ("step-over for %s executed software breakpoint\n",
-			target_pid_to_str (ptid_of (current_thread)));
-	}
-
-      if (increment_pc != 0)
-	{
-	  struct regcache *regcache
-	    = get_thread_regcache (current_thread, 1);
-
-	  event_child->stop_pc += increment_pc;
-	  (*the_low_target.set_pc) (regcache, event_child->stop_pc);
-
-	  if (!(*the_low_target.breakpoint_at) (event_child->stop_pc))
-	    event_child->stop_reason = TARGET_STOPPED_BY_NO_REASON;
-	}
-    }
-
-  /* If this event was not handled before, and is not a SIGTRAP, we
-     report it.  SIGILL and SIGSEGV are also treated as traps in case
-     a breakpoint is inserted at the current PC.  If this target does
-     not support internal breakpoints at all, we also report the
-     SIGTRAP without further processing; it's of no concern to us.  */
-  maybe_internal_trap
-    = (supports_breakpoints ()
-       && (WSTOPSIG (w) == SIGTRAP
-	   || ((WSTOPSIG (w) == SIGILL
-		|| WSTOPSIG (w) == SIGSEGV)
-	       && (*the_low_target.breakpoint_at) (event_child->stop_pc))));
-
-  if (maybe_internal_trap)
-    {
-      /* Handle anything that requires bookkeeping before deciding to
-	 report the event or continue waiting.  */
-
-      /* First check if we can explain the SIGTRAP with an internal
-	 breakpoint, or if we should possibly report the event to GDB.
-	 Do this before anything that may remove or insert a
-	 breakpoint.  */
-      bp_explains_trap = breakpoint_inserted_here (event_child->stop_pc);
-
-      /* We have a SIGTRAP, possibly a step-over dance has just
-	 finished.  If so, tweak the state machine accordingly,
-	 reinsert breakpoints and delete any single-step
-	 breakpoints.  */
-      step_over_finished = finish_step_over (event_child);
-
-      /* Now invoke the callbacks of any internal breakpoints there.  */
-      check_breakpoints (event_child->stop_pc);
-
-      /* Handle tracepoint data collecting.  This may overflow the
-	 trace buffer, and cause a tracing stop, removing
-	 breakpoints.  */
-      trace_event = handle_tracepoints (event_child);
-
-      if (bp_explains_trap)
-	{
-	  if (debug_threads)
-	    debug_printf ("Hit a gdbserver breakpoint.\n");
-	}
-    }
-  else
-    {
-      /* We have some other signal, possibly a step-over dance was in
-	 progress, and it should be cancelled too.  */
-      step_over_finished = finish_step_over (event_child);
-    }
-
-  /* We have all the data we need.  Either report the event to GDB, or
-     resume threads and keep waiting for more.  */
-
-  /* If we're collecting a fast tracepoint, finish the collection and
-     move out of the jump pad before delivering a signal.  See
-     linux_stabilize_threads.  */
-
-  if (WIFSTOPPED (w)
-      && WSTOPSIG (w) != SIGTRAP
-      && supports_fast_tracepoints ()
-      && agent_loaded_p ())
-    {
-      if (debug_threads)
-	debug_printf ("Got signal %d for LWP %ld.  Check if we need "
-		      "to defer or adjust it.\n",
-		      WSTOPSIG (w), lwpid_of (current_thread));
-
-      /* Allow debugging the jump pad itself.  */
-      if (current_thread->last_resume_kind != resume_step
-	  && maybe_move_out_of_jump_pad (event_child, &w))
-	{
-	  enqueue_one_deferred_signal (event_child, &w);
-
-	  if (debug_threads)
-	    debug_printf ("Signal %d for LWP %ld deferred (in jump pad)\n",
-			  WSTOPSIG (w), lwpid_of (current_thread));
-
-	  linux_resume_one_lwp (event_child, 0, 0, NULL);
-
-	  if (debug_threads)
-	    debug_exit ();
-	  return ignore_event (ourstatus);
-	}
-    }
-
-  if (event_child->collecting_fast_tracepoint
-      != fast_tpoint_collect_result::not_collecting)
-    {
-      if (debug_threads)
-	debug_printf ("LWP %ld was trying to move out of the jump pad (%d). "
-		      "Check if we're already there.\n",
-		      lwpid_of (current_thread),
-		      (int) event_child->collecting_fast_tracepoint);
-
-      trace_event = 1;
-
-      event_child->collecting_fast_tracepoint
-	= linux_fast_tracepoint_collecting (event_child, NULL);
-
-      if (event_child->collecting_fast_tracepoint
-	  != fast_tpoint_collect_result::before_insn)
-	{
-	  /* No longer need this breakpoint.  */
-	  if (event_child->exit_jump_pad_bkpt != NULL)
-	    {
-	      if (debug_threads)
-		debug_printf ("No longer need exit-jump-pad bkpt; removing it."
-			      "stopping all threads momentarily.\n");
-
-	      /* Other running threads could hit this breakpoint.
-		 We don't handle moribund locations like GDB does,
-		 instead we always pause all threads when removing
-		 breakpoints, so that any step-over or
-		 decr_pc_after_break adjustment is always taken
-		 care of while the breakpoint is still
-		 inserted.  */
-	      stop_all_lwps (1, event_child);
-
-	      delete_breakpoint (event_child->exit_jump_pad_bkpt);
-	      event_child->exit_jump_pad_bkpt = NULL;
-
-	      unstop_all_lwps (1, event_child);
-
-	      gdb_assert (event_child->suspended >= 0);
-	    }
-	}
-
-      if (event_child->collecting_fast_tracepoint
-	  == fast_tpoint_collect_result::not_collecting)
-	{
-	  if (debug_threads)
-	    debug_printf ("fast tracepoint finished "
-			  "collecting successfully.\n");
-
-	  /* We may have a deferred signal to report.  */
-	  if (dequeue_one_deferred_signal (event_child, &w))
-	    {
-	      if (debug_threads)
-		debug_printf ("dequeued one signal.\n");
-	    }
-	  else
-	    {
-	      if (debug_threads)
-		debug_printf ("no deferred signals.\n");
-
-	      if (stabilizing_threads)
-		{
-		  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-		  ourstatus->value.sig = GDB_SIGNAL_0;
-
-		  if (debug_threads)
-		    {
-		      debug_printf ("linux_wait_1 ret = %s, stopped "
-				    "while stabilizing threads\n",
-				    target_pid_to_str (ptid_of (current_thread)));
-		      debug_exit ();
-		    }
-
-		  return ptid_of (current_thread);
-		}
-	    }
-	}
-    }
-
-  /* Check whether GDB would be interested in this event.  */
-
-  /* Check if GDB is interested in this syscall.  */
-  if (WIFSTOPPED (w)
-      && WSTOPSIG (w) == SYSCALL_SIGTRAP
-      && !gdb_catch_this_syscall_p (event_child))
-    {
-      if (debug_threads)
-	{
-	  debug_printf ("Ignored syscall for LWP %ld.\n",
-			lwpid_of (current_thread));
-	}
-
-      linux_resume_one_lwp (event_child, event_child->stepping,
-			    0, NULL);
-
-      if (debug_threads)
-	debug_exit ();
-      return ignore_event (ourstatus);
-    }
-
-  /* If GDB is not interested in this signal, don't stop other
-     threads, and don't report it to GDB.  Just resume the inferior
-     right away.  We do this for threading-related signals as well as
-     any that GDB specifically requested we ignore.  But never ignore
-     SIGSTOP if we sent it ourselves, and do not ignore signals when
-     stepping - they may require special handling to skip the signal
-     handler. Also never ignore signals that could be caused by a
-     breakpoint.  */
-  if (WIFSTOPPED (w)
-      && current_thread->last_resume_kind != resume_step
-      && (
-#if defined (USE_THREAD_DB) && !defined (__ANDROID__)
-	  (current_process ()->priv->thread_db != NULL
-	   && (WSTOPSIG (w) == __SIGRTMIN
-	       || WSTOPSIG (w) == __SIGRTMIN + 1))
-	  ||
-#endif
-	  (cs.pass_signals[gdb_signal_from_host (WSTOPSIG (w))]
-	   && !(WSTOPSIG (w) == SIGSTOP
-		&& current_thread->last_resume_kind == resume_stop)
-	   && !linux_wstatus_maybe_breakpoint (w))))
-    {
-      siginfo_t info, *info_p;
-
-      if (debug_threads)
-	debug_printf ("Ignored signal %d for LWP %ld.\n",
-		      WSTOPSIG (w), lwpid_of (current_thread));
-
-      if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
-		  (PTRACE_TYPE_ARG3) 0, &info) == 0)
-	info_p = &info;
-      else
-	info_p = NULL;
-
-      if (step_over_finished)
-	{
-	  /* We cancelled this thread's step-over above.  We still
-	     need to unsuspend all other LWPs, and set them back
-	     running again while the signal handler runs.  */
-	  unsuspend_all_lwps (event_child);
-
-	  /* Enqueue the pending signal info so that proceed_all_lwps
-	     doesn't lose it.  */
-	  enqueue_pending_signal (event_child, WSTOPSIG (w), info_p);
-
-	  proceed_all_lwps ();
-	}
-      else
-	{
-	  linux_resume_one_lwp (event_child, event_child->stepping,
-				WSTOPSIG (w), info_p);
-	}
-
-      if (debug_threads)
-	debug_exit ();
-
-      return ignore_event (ourstatus);
-    }
-
-  /* Note that all addresses are always "out of the step range" when
-     there's no range to begin with.  */
-  in_step_range = lwp_in_step_range (event_child);
-
-  /* If GDB wanted this thread to single step, and the thread is out
-     of the step range, we always want to report the SIGTRAP, and let
-     GDB handle it.  Watchpoints should always be reported.  So should
-     signals we can't explain.  A SIGTRAP we can't explain could be a
-     GDB breakpoint --- we may or not support Z0 breakpoints.  If we
-     do, we're be able to handle GDB breakpoints on top of internal
-     breakpoints, by handling the internal breakpoint and still
-     reporting the event to GDB.  If we don't, we're out of luck, GDB
-     won't see the breakpoint hit.  If we see a single-step event but
-     the thread should be continuing, don't pass the trap to gdb.
-     That indicates that we had previously finished a single-step but
-     left the single-step pending -- see
-     complete_ongoing_step_over.  */
-  report_to_gdb = (!maybe_internal_trap
-		   || (current_thread->last_resume_kind == resume_step
-		       && !in_step_range)
-		   || event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT
-		   || (!in_step_range
-		       && !bp_explains_trap
-		       && !trace_event
-		       && !step_over_finished
-		       && !(current_thread->last_resume_kind == resume_continue
-			    && event_child->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP))
-		   || (gdb_breakpoint_here (event_child->stop_pc)
-		       && gdb_condition_true_at_breakpoint (event_child->stop_pc)
-		       && gdb_no_commands_at_breakpoint (event_child->stop_pc))
-		   || event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE);
-
-  run_breakpoint_commands (event_child->stop_pc);
-
-  /* We found no reason GDB would want us to stop.  We either hit one
-     of our own breakpoints, or finished an internal step GDB
-     shouldn't know about.  */
-  if (!report_to_gdb)
-    {
-      if (debug_threads)
-	{
-	  if (bp_explains_trap)
-	    debug_printf ("Hit a gdbserver breakpoint.\n");
-	  if (step_over_finished)
-	    debug_printf ("Step-over finished.\n");
-	  if (trace_event)
-	    debug_printf ("Tracepoint event.\n");
-	  if (lwp_in_step_range (event_child))
-	    debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).\n",
-			  paddress (event_child->stop_pc),
-			  paddress (event_child->step_range_start),
-			  paddress (event_child->step_range_end));
-	}
-
-      /* We're not reporting this breakpoint to GDB, so apply the
-	 decr_pc_after_break adjustment to the inferior's regcache
-	 ourselves.  */
-
-      if (the_low_target.set_pc != NULL)
-	{
-	  struct regcache *regcache
-	    = get_thread_regcache (current_thread, 1);
-	  (*the_low_target.set_pc) (regcache, event_child->stop_pc);
-	}
-
-      if (step_over_finished)
-	{
-	  /* If we have finished stepping over a breakpoint, we've
-	     stopped and suspended all LWPs momentarily except the
-	     stepping one.  This is where we resume them all again.
-	     We're going to keep waiting, so use proceed, which
-	     handles stepping over the next breakpoint.  */
-	  unsuspend_all_lwps (event_child);
-	}
-      else
-	{
-	  /* Remove the single-step breakpoints if any.  Note that
-	     there isn't single-step breakpoint if we finished stepping
-	     over.  */
-	  if (can_software_single_step ()
-	      && has_single_step_breakpoints (current_thread))
-	    {
-	      stop_all_lwps (0, event_child);
-	      delete_single_step_breakpoints (current_thread);
-	      unstop_all_lwps (0, event_child);
-	    }
-	}
-
-      if (debug_threads)
-	debug_printf ("proceeding all threads.\n");
-      proceed_all_lwps ();
-
-      if (debug_threads)
-	debug_exit ();
-
-      return ignore_event (ourstatus);
-    }
-
-  if (debug_threads)
-    {
-      if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE)
-	{
-	  std::string str
-	    = target_waitstatus_to_string (&event_child->waitstatus);
-
-	  debug_printf ("LWP %ld: extended event with waitstatus %s\n",
-			lwpid_of (get_lwp_thread (event_child)), str.c_str ());
-	}
-      if (current_thread->last_resume_kind == resume_step)
-	{
-	  if (event_child->step_range_start == event_child->step_range_end)
-	    debug_printf ("GDB wanted to single-step, reporting event.\n");
-	  else if (!lwp_in_step_range (event_child))
-	    debug_printf ("Out of step range, reporting event.\n");
-	}
-      if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
-	debug_printf ("Stopped by watchpoint.\n");
-      else if (gdb_breakpoint_here (event_child->stop_pc))
-	debug_printf ("Stopped by GDB breakpoint.\n");
-      if (debug_threads)
-	debug_printf ("Hit a non-gdbserver trap event.\n");
-    }
-
-  /* Alright, we're going to report a stop.  */
-
-  /* Remove single-step breakpoints.  */
-  if (can_software_single_step ())
-    {
-      /* Remove single-step breakpoints or not.  It it is true, stop all
-	 lwps, so that other threads won't hit the breakpoint in the
-	 staled memory.  */
-      int remove_single_step_breakpoints_p = 0;
-
-      if (non_stop)
-	{
-	  remove_single_step_breakpoints_p
-	    = has_single_step_breakpoints (current_thread);
-	}
-      else
-	{
-	  /* In all-stop, a stop reply cancels all previous resume
-	     requests.  Delete all single-step breakpoints.  */
-
-	  find_thread ([&] (thread_info *thread) {
-	    if (has_single_step_breakpoints (thread))
-	      {
-		remove_single_step_breakpoints_p = 1;
-		return true;
-	      }
-
-	    return false;
-	  });
-	}
-
-      if (remove_single_step_breakpoints_p)
-	{
-	  /* If we remove single-step breakpoints from memory, stop all lwps,
-	     so that other threads won't hit the breakpoint in the staled
-	     memory.  */
-	  stop_all_lwps (0, event_child);
-
-	  if (non_stop)
-	    {
-	      gdb_assert (has_single_step_breakpoints (current_thread));
-	      delete_single_step_breakpoints (current_thread);
-	    }
-	  else
-	    {
-	      for_each_thread ([] (thread_info *thread){
-		if (has_single_step_breakpoints (thread))
-		  delete_single_step_breakpoints (thread);
-	      });
-	    }
-
-	  unstop_all_lwps (0, event_child);
-	}
-    }
-
-  if (!stabilizing_threads)
-    {
-      /* In all-stop, stop all threads.  */
-      if (!non_stop)
-	stop_all_lwps (0, NULL);
-
-      if (step_over_finished)
-	{
-	  if (!non_stop)
-	    {
-	      /* If we were doing a step-over, all other threads but
-		 the stepping one had been paused in start_step_over,
-		 with their suspend counts incremented.  We don't want
-		 to do a full unstop/unpause, because we're in
-		 all-stop mode (so we want threads stopped), but we
-		 still need to unsuspend the other threads, to
-		 decrement their `suspended' count back.  */
-	      unsuspend_all_lwps (event_child);
-	    }
-	  else
-	    {
-	      /* If we just finished a step-over, then all threads had
-		 been momentarily paused.  In all-stop, that's fine,
-		 we want threads stopped by now anyway.  In non-stop,
-		 we need to re-resume threads that GDB wanted to be
-		 running.  */
-	      unstop_all_lwps (1, event_child);
-	    }
-	}
-
-      /* If we're not waiting for a specific LWP, choose an event LWP
-	 from among those that have had events.  Giving equal priority
-	 to all LWPs that have had events helps prevent
-	 starvation.  */
-      if (ptid == minus_one_ptid)
-	{
-	  event_child->status_pending_p = 1;
-	  event_child->status_pending = w;
-
-	  select_event_lwp (&event_child);
-
-	  /* current_thread and event_child must stay in sync.  */
-	  current_thread = get_lwp_thread (event_child);
-
-	  event_child->status_pending_p = 0;
-	  w = event_child->status_pending;
-	}
-
-
-      /* Stabilize threads (move out of jump pads).  */
-      if (!non_stop)
-	stabilize_threads ();
-    }
-  else
-    {
-      /* If we just finished a step-over, then all threads had been
-	 momentarily paused.  In all-stop, that's fine, we want
-	 threads stopped by now anyway.  In non-stop, we need to
-	 re-resume threads that GDB wanted to be running.  */
-      if (step_over_finished)
-	unstop_all_lwps (1, event_child);
-    }
-
-  if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE)
-    {
-      /* If the reported event is an exit, fork, vfork or exec, let
-	 GDB know.  */
-
-      /* Break the unreported fork relationship chain.  */
-      if (event_child->waitstatus.kind == TARGET_WAITKIND_FORKED
-	  || event_child->waitstatus.kind == TARGET_WAITKIND_VFORKED)
-	{
-	  event_child->fork_relative->fork_relative = NULL;
-	  event_child->fork_relative = NULL;
-	}
-
-      *ourstatus = event_child->waitstatus;
-      /* Clear the event lwp's waitstatus since we handled it already.  */
-      event_child->waitstatus.kind = TARGET_WAITKIND_IGNORE;
-    }
-  else
-    ourstatus->kind = TARGET_WAITKIND_STOPPED;
-
-  /* Now that we've selected our final event LWP, un-adjust its PC if
-     it was a software breakpoint, and the client doesn't know we can
-     adjust the breakpoint ourselves.  */
-  if (event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
-      && !cs.swbreak_feature)
-    {
-      int decr_pc = the_low_target.decr_pc_after_break;
-
-      if (decr_pc != 0)
-	{
-	  struct regcache *regcache
-	    = get_thread_regcache (current_thread, 1);
-	  (*the_low_target.set_pc) (regcache, event_child->stop_pc + decr_pc);
-	}
-    }
-
-  if (WSTOPSIG (w) == SYSCALL_SIGTRAP)
-    {
-      get_syscall_trapinfo (event_child,
-			    &ourstatus->value.syscall_number);
-      ourstatus->kind = event_child->syscall_state;
-    }
-  else if (current_thread->last_resume_kind == resume_stop
-	   && WSTOPSIG (w) == SIGSTOP)
-    {
-      /* A thread that has been requested to stop by GDB with vCont;t,
-	 and it stopped cleanly, so report as SIG0.  The use of
-	 SIGSTOP is an implementation detail.  */
-      ourstatus->value.sig = GDB_SIGNAL_0;
-    }
-  else if (current_thread->last_resume_kind == resume_stop
-	   && WSTOPSIG (w) != SIGSTOP)
-    {
-      /* A thread that has been requested to stop by GDB with vCont;t,
-	 but, it stopped for other reasons.  */
-      ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
-    }
-  else if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
-    {
-      ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
-    }
-
-  gdb_assert (step_over_bkpt == null_ptid);
-
-  if (debug_threads)
-    {
-      debug_printf ("linux_wait_1 ret = %s, %d, %d\n",
-		    target_pid_to_str (ptid_of (current_thread)),
-		    ourstatus->kind, ourstatus->value.sig);
-      debug_exit ();
-    }
-
-  if (ourstatus->kind == TARGET_WAITKIND_EXITED)
-    return filter_exit_event (event_child, ourstatus);
-
-  return ptid_of (current_thread);
-}
-
-/* Get rid of any pending event in the pipe.  */
-static void
-async_file_flush (void)
-{
-  int ret;
-  char buf;
-
-  do
-    ret = read (linux_event_pipe[0], &buf, 1);
-  while (ret >= 0 || (ret == -1 && errno == EINTR));
-}
-
-/* Put something in the pipe, so the event loop wakes up.  */
-static void
-async_file_mark (void)
-{
-  int ret;
-
-  async_file_flush ();
-
-  do
-    ret = write (linux_event_pipe[1], "+", 1);
-  while (ret == 0 || (ret == -1 && errno == EINTR));
-
-  /* Ignore EAGAIN.  If the pipe is full, the event loop will already
-     be awakened anyway.  */
-}
-
-static ptid_t
-linux_wait (ptid_t ptid,
-	    struct target_waitstatus *ourstatus, int target_options)
-{
-  ptid_t event_ptid;
-
-  /* Flush the async file first.  */
-  if (target_is_async_p ())
-    async_file_flush ();
-
-  do
-    {
-      event_ptid = linux_wait_1 (ptid, ourstatus, target_options);
-    }
-  while ((target_options & TARGET_WNOHANG) == 0
-	 && event_ptid == null_ptid
-	 && ourstatus->kind == TARGET_WAITKIND_IGNORE);
-
-  /* If at least one stop was reported, there may be more.  A single
-     SIGCHLD can signal more than one child stop.  */
-  if (target_is_async_p ()
-      && (target_options & TARGET_WNOHANG) != 0
-      && event_ptid != null_ptid)
-    async_file_mark ();
-
-  return event_ptid;
-}
-
-/* Send a signal to an LWP.  */
-
-static int
-kill_lwp (unsigned long lwpid, int signo)
-{
-  int ret;
-
-  errno = 0;
-  ret = syscall (__NR_tkill, lwpid, signo);
-  if (errno == ENOSYS)
-    {
-      /* If tkill fails, then we are not using nptl threads, a
-	 configuration we no longer support.  */
-      perror_with_name (("tkill"));
-    }
-  return ret;
-}
-
-void
-linux_stop_lwp (struct lwp_info *lwp)
-{
-  send_sigstop (lwp);
-}
-
-static void
-send_sigstop (struct lwp_info *lwp)
-{
-  int pid;
-
-  pid = lwpid_of (get_lwp_thread (lwp));
-
-  /* If we already have a pending stop signal for this process, don't
-     send another.  */
-  if (lwp->stop_expected)
-    {
-      if (debug_threads)
-	debug_printf ("Have pending sigstop for lwp %d\n", pid);
-
-      return;
-    }
-
-  if (debug_threads)
-    debug_printf ("Sending sigstop to lwp %d\n", pid);
-
-  lwp->stop_expected = 1;
-  kill_lwp (pid, SIGSTOP);
-}
-
-static void
-send_sigstop (thread_info *thread, lwp_info *except)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  /* Ignore EXCEPT.  */
-  if (lwp == except)
-    return;
-
-  if (lwp->stopped)
-    return;
-
-  send_sigstop (lwp);
-}
-
-/* Increment the suspend count of an LWP, and stop it, if not stopped
-   yet.  */
-static void
-suspend_and_send_sigstop (thread_info *thread, lwp_info *except)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  /* Ignore EXCEPT.  */
-  if (lwp == except)
-    return;
-
-  lwp_suspended_inc (lwp);
-
-  send_sigstop (thread, except);
-}
-
-static void
-mark_lwp_dead (struct lwp_info *lwp, int wstat)
-{
-  /* Store the exit status for later.  */
-  lwp->status_pending_p = 1;
-  lwp->status_pending = wstat;
-
-  /* Store in waitstatus as well, as there's nothing else to process
-     for this event.  */
-  if (WIFEXITED (wstat))
-    {
-      lwp->waitstatus.kind = TARGET_WAITKIND_EXITED;
-      lwp->waitstatus.value.integer = WEXITSTATUS (wstat);
-    }
-  else if (WIFSIGNALED (wstat))
-    {
-      lwp->waitstatus.kind = TARGET_WAITKIND_SIGNALLED;
-      lwp->waitstatus.value.sig = gdb_signal_from_host (WTERMSIG (wstat));
-    }
-
-  /* Prevent trying to stop it.  */
-  lwp->stopped = 1;
-
-  /* No further stops are expected from a dead lwp.  */
-  lwp->stop_expected = 0;
-}
-
-/* Return true if LWP has exited already, and has a pending exit event
-   to report to GDB.  */
-
-static int
-lwp_is_marked_dead (struct lwp_info *lwp)
-{
-  return (lwp->status_pending_p
-	  && (WIFEXITED (lwp->status_pending)
-	      || WIFSIGNALED (lwp->status_pending)));
-}
-
-/* Wait for all children to stop for the SIGSTOPs we just queued.  */
-
-static void
-wait_for_sigstop (void)
-{
-  struct thread_info *saved_thread;
-  ptid_t saved_tid;
-  int wstat;
-  int ret;
-
-  saved_thread = current_thread;
-  if (saved_thread != NULL)
-    saved_tid = saved_thread->id;
-  else
-    saved_tid = null_ptid; /* avoid bogus unused warning */
-
-  if (debug_threads)
-    debug_printf ("wait_for_sigstop: pulling events\n");
-
-  /* Passing NULL_PTID as filter indicates we want all events to be
-     left pending.  Eventually this returns when there are no
-     unwaited-for children left.  */
-  ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid,
-				       &wstat, __WALL);
-  gdb_assert (ret == -1);
-
-  if (saved_thread == NULL || linux_thread_alive (saved_tid))
-    current_thread = saved_thread;
-  else
-    {
-      if (debug_threads)
-	debug_printf ("Previously current thread died.\n");
-
-      /* We can't change the current inferior behind GDB's back,
-	 otherwise, a subsequent command may apply to the wrong
-	 process.  */
-      current_thread = NULL;
-    }
-}
-
-/* Returns true if THREAD is stopped in a jump pad, and we can't
-   move it out, because we need to report the stop event to GDB.  For
-   example, if the user puts a breakpoint in the jump pad, it's
-   because she wants to debug it.  */
-
-static bool
-stuck_in_jump_pad_callback (thread_info *thread)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  if (lwp->suspended != 0)
-    {
-      internal_error (__FILE__, __LINE__,
-		      "LWP %ld is suspended, suspended=%d\n",
-		      lwpid_of (thread), lwp->suspended);
-    }
-  gdb_assert (lwp->stopped);
-
-  /* Allow debugging the jump pad, gdb_collect, etc..  */
-  return (supports_fast_tracepoints ()
-	  && agent_loaded_p ()
-	  && (gdb_breakpoint_here (lwp->stop_pc)
-	      || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT
-	      || thread->last_resume_kind == resume_step)
-	  && (linux_fast_tracepoint_collecting (lwp, NULL)
-	      != fast_tpoint_collect_result::not_collecting));
-}
-
-static void
-move_out_of_jump_pad_callback (thread_info *thread)
-{
-  struct thread_info *saved_thread;
-  struct lwp_info *lwp = get_thread_lwp (thread);
-  int *wstat;
-
-  if (lwp->suspended != 0)
-    {
-      internal_error (__FILE__, __LINE__,
-		      "LWP %ld is suspended, suspended=%d\n",
-		      lwpid_of (thread), lwp->suspended);
-    }
-  gdb_assert (lwp->stopped);
-
-  /* For gdb_breakpoint_here.  */
-  saved_thread = current_thread;
-  current_thread = thread;
-
-  wstat = lwp->status_pending_p ? &lwp->status_pending : NULL;
-
-  /* Allow debugging the jump pad, gdb_collect, etc.  */
-  if (!gdb_breakpoint_here (lwp->stop_pc)
-      && lwp->stop_reason != TARGET_STOPPED_BY_WATCHPOINT
-      && thread->last_resume_kind != resume_step
-      && maybe_move_out_of_jump_pad (lwp, wstat))
-    {
-      if (debug_threads)
-	debug_printf ("LWP %ld needs stabilizing (in jump pad)\n",
-		      lwpid_of (thread));
-
-      if (wstat)
-	{
-	  lwp->status_pending_p = 0;
-	  enqueue_one_deferred_signal (lwp, wstat);
-
-	  if (debug_threads)
-	    debug_printf ("Signal %d for LWP %ld deferred "
-			  "(in jump pad)\n",
-			  WSTOPSIG (*wstat), lwpid_of (thread));
-	}
-
-      linux_resume_one_lwp (lwp, 0, 0, NULL);
-    }
-  else
-    lwp_suspended_inc (lwp);
-
-  current_thread = saved_thread;
-}
-
-static bool
-lwp_running (thread_info *thread)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  if (lwp_is_marked_dead (lwp))
-    return false;
-
-  return !lwp->stopped;
-}
-
-/* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL.
-   If SUSPEND, then also increase the suspend count of every LWP,
-   except EXCEPT.  */
-
-static void
-stop_all_lwps (int suspend, struct lwp_info *except)
-{
-  /* Should not be called recursively.  */
-  gdb_assert (stopping_threads == NOT_STOPPING_THREADS);
-
-  if (debug_threads)
-    {
-      debug_enter ();
-      debug_printf ("stop_all_lwps (%s, except=%s)\n",
-		    suspend ? "stop-and-suspend" : "stop",
-		    except != NULL
-		    ? target_pid_to_str (ptid_of (get_lwp_thread (except)))
-		    : "none");
-    }
-
-  stopping_threads = (suspend
-		      ? STOPPING_AND_SUSPENDING_THREADS
-		      : STOPPING_THREADS);
-
-  if (suspend)
-    for_each_thread ([&] (thread_info *thread)
-      {
-	suspend_and_send_sigstop (thread, except);
-      });
-  else
-    for_each_thread ([&] (thread_info *thread)
-      {
-	 send_sigstop (thread, except);
-      });
-
-  wait_for_sigstop ();
-  stopping_threads = NOT_STOPPING_THREADS;
-
-  if (debug_threads)
-    {
-      debug_printf ("stop_all_lwps done, setting stopping_threads "
-		    "back to !stopping\n");
-      debug_exit ();
-    }
-}
-
-/* Enqueue one signal in the chain of signals which need to be
-   delivered to this process on next resume.  */
-
-static void
-enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info)
-{
-  struct pending_signals *p_sig = XNEW (struct pending_signals);
-
-  p_sig->prev = lwp->pending_signals;
-  p_sig->signal = signal;
-  if (info == NULL)
-    memset (&p_sig->info, 0, sizeof (siginfo_t));
-  else
-    memcpy (&p_sig->info, info, sizeof (siginfo_t));
-  lwp->pending_signals = p_sig;
-}
-
-/* Install breakpoints for software single stepping.  */
-
-static void
-install_software_single_step_breakpoints (struct lwp_info *lwp)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-  struct regcache *regcache = get_thread_regcache (thread, 1);
-
-  scoped_restore save_current_thread = make_scoped_restore (&current_thread);
-
-  current_thread = thread;
-  std::vector<CORE_ADDR> next_pcs = the_low_target.get_next_pcs (regcache);
-
-  for (CORE_ADDR pc : next_pcs)
-    set_single_step_breakpoint (pc, current_ptid);
-}
-
-/* Single step via hardware or software single step.
-   Return 1 if hardware single stepping, 0 if software single stepping
-   or can't single step.  */
-
-static int
-single_step (struct lwp_info* lwp)
-{
-  int step = 0;
-
-  if (can_hardware_single_step ())
-    {
-      step = 1;
-    }
-  else if (can_software_single_step ())
-    {
-      install_software_single_step_breakpoints (lwp);
-      step = 0;
-    }
-  else
-    {
-      if (debug_threads)
-	debug_printf ("stepping is not implemented on this target");
-    }
-
-  return step;
-}
-
-/* The signal can be delivered to the inferior if we are not trying to
-   finish a fast tracepoint collect.  Since signal can be delivered in
-   the step-over, the program may go to signal handler and trap again
-   after return from the signal handler.  We can live with the spurious
-   double traps.  */
-
-static int
-lwp_signal_can_be_delivered (struct lwp_info *lwp)
-{
-  return (lwp->collecting_fast_tracepoint
-	  == fast_tpoint_collect_result::not_collecting);
-}
-
-/* Resume execution of LWP.  If STEP is nonzero, single-step it.  If
-   SIGNAL is nonzero, give it that signal.  */
-
-static void
-linux_resume_one_lwp_throw (struct lwp_info *lwp,
-			    int step, int signal, siginfo_t *info)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-  struct thread_info *saved_thread;
-  int ptrace_request;
-  struct process_info *proc = get_thread_process (thread);
-
-  /* Note that target description may not be initialised
-     (proc->tdesc == NULL) at this point because the program hasn't
-     stopped at the first instruction yet.  It means GDBserver skips
-     the extra traps from the wrapper program (see option --wrapper).
-     Code in this function that requires register access should be
-     guarded by proc->tdesc == NULL or something else.  */
-
-  if (lwp->stopped == 0)
-    return;
-
-  gdb_assert (lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE);
-
-  fast_tpoint_collect_result fast_tp_collecting
-    = lwp->collecting_fast_tracepoint;
-
-  gdb_assert (!stabilizing_threads
-	      || (fast_tp_collecting
-		  != fast_tpoint_collect_result::not_collecting));
-
-  /* Cancel actions that rely on GDB not changing the PC (e.g., the
-     user used the "jump" command, or "set $pc = foo").  */
-  if (thread->while_stepping != NULL && lwp->stop_pc != get_pc (lwp))
-    {
-      /* Collecting 'while-stepping' actions doesn't make sense
-	 anymore.  */
-      release_while_stepping_state_list (thread);
-    }
-
-  /* If we have pending signals or status, and a new signal, enqueue the
-     signal.  Also enqueue the signal if it can't be delivered to the
-     inferior right now.  */
-  if (signal != 0
-      && (lwp->status_pending_p
-	  || lwp->pending_signals != NULL
-	  || !lwp_signal_can_be_delivered (lwp)))
-    {
-      enqueue_pending_signal (lwp, signal, info);
-
-      /* Postpone any pending signal.  It was enqueued above.  */
-      signal = 0;
-    }
-
-  if (lwp->status_pending_p)
-    {
-      if (debug_threads)
-	debug_printf ("Not resuming lwp %ld (%s, stop %s);"
-		      " has pending status\n",
-		      lwpid_of (thread), step ? "step" : "continue",
-		      lwp->stop_expected ? "expected" : "not expected");
-      return;
-    }
-
-  saved_thread = current_thread;
-  current_thread = thread;
-
-  /* This bit needs some thinking about.  If we get a signal that
-     we must report while a single-step reinsert is still pending,
-     we often end up resuming the thread.  It might be better to
-     (ew) allow a stack of pending events; then we could be sure that
-     the reinsert happened right away and not lose any signals.
-
-     Making this stack would also shrink the window in which breakpoints are
-     uninserted (see comment in linux_wait_for_lwp) but not enough for
-     complete correctness, so it won't solve that problem.  It may be
-     worthwhile just to solve this one, however.  */
-  if (lwp->bp_reinsert != 0)
-    {
-      if (debug_threads)
-	debug_printf ("  pending reinsert at 0x%s\n",
-		      paddress (lwp->bp_reinsert));
-
-      if (can_hardware_single_step ())
-	{
-	  if (fast_tp_collecting == fast_tpoint_collect_result::not_collecting)
-	    {
-	      if (step == 0)
-		warning ("BAD - reinserting but not stepping.");
-	      if (lwp->suspended)
-		warning ("BAD - reinserting and suspended(%d).",
-				 lwp->suspended);
-	    }
-	}
-
-      step = maybe_hw_step (thread);
-    }
-
-  if (fast_tp_collecting == fast_tpoint_collect_result::before_insn)
-    {
-      if (debug_threads)
-	debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
-		      " (exit-jump-pad-bkpt)\n",
-		      lwpid_of (thread));
-    }
-  else if (fast_tp_collecting == fast_tpoint_collect_result::at_insn)
-    {
-      if (debug_threads)
-	debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
-		      " single-stepping\n",
-		      lwpid_of (thread));
-
-      if (can_hardware_single_step ())
-	step = 1;
-      else
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "moving out of jump pad single-stepping"
-			  " not implemented on this target");
-	}
-    }
-
-  /* If we have while-stepping actions in this thread set it stepping.
-     If we have a signal to deliver, it may or may not be set to
-     SIG_IGN, we don't know.  Assume so, and allow collecting
-     while-stepping into a signal handler.  A possible smart thing to
-     do would be to set an internal breakpoint at the signal return
-     address, continue, and carry on catching this while-stepping
-     action only when that breakpoint is hit.  A future
-     enhancement.  */
-  if (thread->while_stepping != NULL)
-    {
-      if (debug_threads)
-	debug_printf ("lwp %ld has a while-stepping action -> forcing step.\n",
-		      lwpid_of (thread));
-
-      step = single_step (lwp);
-    }
-
-  if (proc->tdesc != NULL && the_low_target.get_pc != NULL)
-    {
-      struct regcache *regcache = get_thread_regcache (current_thread, 1);
-
-      lwp->stop_pc = (*the_low_target.get_pc) (regcache);
-
-      if (debug_threads)
-	{
-	  debug_printf ("  %s from pc 0x%lx\n", step ? "step" : "continue",
-			(long) lwp->stop_pc);
-	}
-    }
-
-  /* If we have pending signals, consume one if it can be delivered to
-     the inferior.  */
-  if (lwp->pending_signals != NULL && lwp_signal_can_be_delivered (lwp))
-    {
-      struct pending_signals **p_sig;
-
-      p_sig = &lwp->pending_signals;
-      while ((*p_sig)->prev != NULL)
-	p_sig = &(*p_sig)->prev;
-
-      signal = (*p_sig)->signal;
-      if ((*p_sig)->info.si_signo != 0)
-	ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
-		&(*p_sig)->info);
-
-      free (*p_sig);
-      *p_sig = NULL;
-    }
-
-  if (debug_threads)
-    debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)\n",
-		  lwpid_of (thread), step ? "step" : "continue", signal,
-		  lwp->stop_expected ? "expected" : "not expected");
-
-  if (the_low_target.prepare_to_resume != NULL)
-    the_low_target.prepare_to_resume (lwp);
-
-  regcache_invalidate_thread (thread);
-  errno = 0;
-  lwp->stepping = step;
-  if (step)
-    ptrace_request = PTRACE_SINGLESTEP;
-  else if (gdb_catching_syscalls_p (lwp))
-    ptrace_request = PTRACE_SYSCALL;
-  else
-    ptrace_request = PTRACE_CONT;
-  ptrace (ptrace_request,
-	  lwpid_of (thread),
-	  (PTRACE_TYPE_ARG3) 0,
-	  /* Coerce to a uintptr_t first to avoid potential gcc warning
-	     of coercing an 8 byte integer to a 4 byte pointer.  */
-	  (PTRACE_TYPE_ARG4) (uintptr_t) signal);
-
-  current_thread = saved_thread;
-  if (errno)
-    perror_with_name ("resuming thread");
-
-  /* Successfully resumed.  Clear state that no longer makes sense,
-     and mark the LWP as running.  Must not do this before resuming
-     otherwise if that fails other code will be confused.  E.g., we'd
-     later try to stop the LWP and hang forever waiting for a stop
-     status.  Note that we must not throw after this is cleared,
-     otherwise handle_zombie_lwp_error would get confused.  */
-  lwp->stopped = 0;
-  lwp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
-}
-
-/* Called when we try to resume a stopped LWP and that errors out.  If
-   the LWP is no longer in ptrace-stopped state (meaning it's zombie,
-   or about to become), discard the error, clear any pending status
-   the LWP may have, and return true (we'll collect the exit status
-   soon enough).  Otherwise, return false.  */
-
-static int
-check_ptrace_stopped_lwp_gone (struct lwp_info *lp)
-{
-  struct thread_info *thread = get_lwp_thread (lp);
-
-  /* If we get an error after resuming the LWP successfully, we'd
-     confuse !T state for the LWP being gone.  */
-  gdb_assert (lp->stopped);
-
-  /* We can't just check whether the LWP is in 'Z (Zombie)' state,
-     because even if ptrace failed with ESRCH, the tracee may be "not
-     yet fully dead", but already refusing ptrace requests.  In that
-     case the tracee has 'R (Running)' state for a little bit
-     (observed in Linux 3.18).  See also the note on ESRCH in the
-     ptrace(2) man page.  Instead, check whether the LWP has any state
-     other than ptrace-stopped.  */
-
-  /* Don't assume anything if /proc/PID/status can't be read.  */
-  if (linux_proc_pid_is_trace_stopped_nowarn (lwpid_of (thread)) == 0)
-    {
-      lp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
-      lp->status_pending_p = 0;
-      return 1;
-    }
-  return 0;
-}
-
-/* Like linux_resume_one_lwp_throw, but no error is thrown if the LWP
-   disappears while we try to resume it.  */
-
-static void
-linux_resume_one_lwp (struct lwp_info *lwp,
-		      int step, int signal, siginfo_t *info)
-{
-  try
-    {
-      linux_resume_one_lwp_throw (lwp, step, signal, info);
-    }
-  catch (const gdb_exception_error &ex)
-    {
-      if (!check_ptrace_stopped_lwp_gone (lwp))
-	throw;
-    }
-}
-
-/* This function is called once per thread via for_each_thread.
-   We look up which resume request applies to THREAD and mark it with a
-   pointer to the appropriate resume request.
-
-   This algorithm is O(threads * resume elements), but resume elements
-   is small (and will remain small at least until GDB supports thread
-   suspension).  */
-
-static void
-linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  for (int ndx = 0; ndx < n; ndx++)
-    {
-      ptid_t ptid = resume[ndx].thread;
-      if (ptid == minus_one_ptid
-	  || ptid == thread->id
-	  /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads
-	     of PID'.  */
-	  || (ptid.pid () == pid_of (thread)
-	      && (ptid.is_pid ()
-		  || ptid.lwp () == -1)))
-	{
-	  if (resume[ndx].kind == resume_stop
-	      && thread->last_resume_kind == resume_stop)
-	    {
-	      if (debug_threads)
-		debug_printf ("already %s LWP %ld at GDB's request\n",
-			      (thread->last_status.kind
-			       == TARGET_WAITKIND_STOPPED)
-			      ? "stopped"
-			      : "stopping",
-			      lwpid_of (thread));
-
-	      continue;
-	    }
-
-	  /* Ignore (wildcard) resume requests for already-resumed
-	     threads.  */
-	  if (resume[ndx].kind != resume_stop
-	      && thread->last_resume_kind != resume_stop)
-	    {
-	      if (debug_threads)
-		debug_printf ("already %s LWP %ld at GDB's request\n",
-			      (thread->last_resume_kind
-			       == resume_step)
-			      ? "stepping"
-			      : "continuing",
-			      lwpid_of (thread));
-	      continue;
-	    }
-
-	  /* Don't let wildcard resumes resume fork children that GDB
-	     does not yet know are new fork children.  */
-	  if (lwp->fork_relative != NULL)
-	    {
-	      struct lwp_info *rel = lwp->fork_relative;
-
-	      if (rel->status_pending_p
-		  && (rel->waitstatus.kind == TARGET_WAITKIND_FORKED
-		      || rel->waitstatus.kind == TARGET_WAITKIND_VFORKED))
-		{
-		  if (debug_threads)
-		    debug_printf ("not resuming LWP %ld: has queued stop reply\n",
-				  lwpid_of (thread));
-		  continue;
-		}
-	    }
-
-	  /* If the thread has a pending event that has already been
-	     reported to GDBserver core, but GDB has not pulled the
-	     event out of the vStopped queue yet, likewise, ignore the
-	     (wildcard) resume request.  */
-	  if (in_queued_stop_replies (thread->id))
-	    {
-	      if (debug_threads)
-		debug_printf ("not resuming LWP %ld: has queued stop reply\n",
-			      lwpid_of (thread));
-	      continue;
-	    }
-
-	  lwp->resume = &resume[ndx];
-	  thread->last_resume_kind = lwp->resume->kind;
-
-	  lwp->step_range_start = lwp->resume->step_range_start;
-	  lwp->step_range_end = lwp->resume->step_range_end;
-
-	  /* If we had a deferred signal to report, dequeue one now.
-	     This can happen if LWP gets more than one signal while
-	     trying to get out of a jump pad.  */
-	  if (lwp->stopped
-	      && !lwp->status_pending_p
-	      && dequeue_one_deferred_signal (lwp, &lwp->status_pending))
-	    {
-	      lwp->status_pending_p = 1;
-
-	      if (debug_threads)
-		debug_printf ("Dequeueing deferred signal %d for LWP %ld, "
-			      "leaving status pending.\n",
-			      WSTOPSIG (lwp->status_pending),
-			      lwpid_of (thread));
-	    }
-
-	  return;
-	}
-    }
-
-  /* No resume action for this thread.  */
-  lwp->resume = NULL;
-}
-
-/* find_thread callback for linux_resume.  Return true if this lwp has an
-   interesting status pending.  */
-
-static bool
-resume_status_pending_p (thread_info *thread)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  /* LWPs which will not be resumed are not interesting, because
-     we might not wait for them next time through linux_wait.  */
-  if (lwp->resume == NULL)
-    return false;
-
-  return thread_still_has_status_pending_p (thread);
-}
-
-/* Return 1 if this lwp that GDB wants running is stopped at an
-   internal breakpoint that we need to step over.  It assumes that any
-   required STOP_PC adjustment has already been propagated to the
-   inferior's regcache.  */
-
-static bool
-need_step_over_p (thread_info *thread)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-  struct thread_info *saved_thread;
-  CORE_ADDR pc;
-  struct process_info *proc = get_thread_process (thread);
-
-  /* GDBserver is skipping the extra traps from the wrapper program,
-     don't have to do step over.  */
-  if (proc->tdesc == NULL)
-    return false;
-
-  /* LWPs which will not be resumed are not interesting, because we
-     might not wait for them next time through linux_wait.  */
-
-  if (!lwp->stopped)
-    {
-      if (debug_threads)
-	debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped\n",
-		      lwpid_of (thread));
-      return false;
-    }
-
-  if (thread->last_resume_kind == resume_stop)
-    {
-      if (debug_threads)
-	debug_printf ("Need step over [LWP %ld]? Ignoring, should remain"
-		      " stopped\n",
-		      lwpid_of (thread));
-      return false;
-    }
-
-  gdb_assert (lwp->suspended >= 0);
-
-  if (lwp->suspended)
-    {
-      if (debug_threads)
-	debug_printf ("Need step over [LWP %ld]? Ignoring, suspended\n",
-		      lwpid_of (thread));
-      return false;
-    }
-
-  if (lwp->status_pending_p)
-    {
-      if (debug_threads)
-	debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
-		      " status.\n",
-		      lwpid_of (thread));
-      return false;
-    }
-
-  /* Note: PC, not STOP_PC.  Either GDB has adjusted the PC already,
-     or we have.  */
-  pc = get_pc (lwp);
-
-  /* If the PC has changed since we stopped, then don't do anything,
-     and let the breakpoint/tracepoint be hit.  This happens if, for
-     instance, GDB handled the decr_pc_after_break subtraction itself,
-     GDB is OOL stepping this thread, or the user has issued a "jump"
-     command, or poked thread's registers herself.  */
-  if (pc != lwp->stop_pc)
-    {
-      if (debug_threads)
-	debug_printf ("Need step over [LWP %ld]? Cancelling, PC was changed. "
-		      "Old stop_pc was 0x%s, PC is now 0x%s\n",
-		      lwpid_of (thread),
-		      paddress (lwp->stop_pc), paddress (pc));
-      return false;
-    }
-
-  /* On software single step target, resume the inferior with signal
-     rather than stepping over.  */
-  if (can_software_single_step ()
-      && lwp->pending_signals != NULL
-      && lwp_signal_can_be_delivered (lwp))
-    {
-      if (debug_threads)
-	debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
-		      " signals.\n",
-		      lwpid_of (thread));
-
-      return false;
-    }
-
-  saved_thread = current_thread;
-  current_thread = thread;
-
-  /* We can only step over breakpoints we know about.  */
-  if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
-    {
-      /* Don't step over a breakpoint that GDB expects to hit
-	 though.  If the condition is being evaluated on the target's side
-	 and it evaluate to false, step over this breakpoint as well.  */
-      if (gdb_breakpoint_here (pc)
-	  && gdb_condition_true_at_breakpoint (pc)
-	  && gdb_no_commands_at_breakpoint (pc))
-	{
-	  if (debug_threads)
-	    debug_printf ("Need step over [LWP %ld]? yes, but found"
-			  " GDB breakpoint at 0x%s; skipping step over\n",
-			  lwpid_of (thread), paddress (pc));
-
-	  current_thread = saved_thread;
-	  return false;
-	}
-      else
-	{
-	  if (debug_threads)
-	    debug_printf ("Need step over [LWP %ld]? yes, "
-			  "found breakpoint at 0x%s\n",
-			  lwpid_of (thread), paddress (pc));
-
-	  /* We've found an lwp that needs stepping over --- return 1 so
-	     that find_thread stops looking.  */
-	  current_thread = saved_thread;
-
-	  return true;
-	}
-    }
-
-  current_thread = saved_thread;
-
-  if (debug_threads)
-    debug_printf ("Need step over [LWP %ld]? No, no breakpoint found"
-		  " at 0x%s\n",
-		  lwpid_of (thread), paddress (pc));
-
-  return false;
-}
-
-/* Start a step-over operation on LWP.  When LWP stopped at a
-   breakpoint, to make progress, we need to remove the breakpoint out
-   of the way.  If we let other threads run while we do that, they may
-   pass by the breakpoint location and miss hitting it.  To avoid
-   that, a step-over momentarily stops all threads while LWP is
-   single-stepped by either hardware or software while the breakpoint
-   is temporarily uninserted from the inferior.  When the single-step
-   finishes, we reinsert the breakpoint, and let all threads that are
-   supposed to be running, run again.  */
-
-static int
-start_step_over (struct lwp_info *lwp)
-{
-  struct thread_info *thread = get_lwp_thread (lwp);
-  struct thread_info *saved_thread;
-  CORE_ADDR pc;
-  int step;
-
-  if (debug_threads)
-    debug_printf ("Starting step-over on LWP %ld.  Stopping all threads\n",
-		  lwpid_of (thread));
-
-  stop_all_lwps (1, lwp);
-
-  if (lwp->suspended != 0)
-    {
-      internal_error (__FILE__, __LINE__,
-		      "LWP %ld suspended=%d\n", lwpid_of (thread),
-		      lwp->suspended);
-    }
-
-  if (debug_threads)
-    debug_printf ("Done stopping all threads for step-over.\n");
-
-  /* Note, we should always reach here with an already adjusted PC,
-     either by GDB (if we're resuming due to GDB's request), or by our
-     caller, if we just finished handling an internal breakpoint GDB
-     shouldn't care about.  */
-  pc = get_pc (lwp);
-
-  saved_thread = current_thread;
-  current_thread = thread;
-
-  lwp->bp_reinsert = pc;
-  uninsert_breakpoints_at (pc);
-  uninsert_fast_tracepoint_jumps_at (pc);
-
-  step = single_step (lwp);
-
-  current_thread = saved_thread;
-
-  linux_resume_one_lwp (lwp, step, 0, NULL);
-
-  /* Require next event from this LWP.  */
-  step_over_bkpt = thread->id;
-  return 1;
-}
-
-/* Finish a step-over.  Reinsert the breakpoint we had uninserted in
-   start_step_over, if still there, and delete any single-step
-   breakpoints we've set, on non hardware single-step targets.  */
-
-static int
-finish_step_over (struct lwp_info *lwp)
-{
-  if (lwp->bp_reinsert != 0)
-    {
-      struct thread_info *saved_thread = current_thread;
-
-      if (debug_threads)
-	debug_printf ("Finished step over.\n");
-
-      current_thread = get_lwp_thread (lwp);
-
-      /* Reinsert any breakpoint at LWP->BP_REINSERT.  Note that there
-	 may be no breakpoint to reinsert there by now.  */
-      reinsert_breakpoints_at (lwp->bp_reinsert);
-      reinsert_fast_tracepoint_jumps_at (lwp->bp_reinsert);
-
-      lwp->bp_reinsert = 0;
-
-      /* Delete any single-step breakpoints.  No longer needed.  We
-	 don't have to worry about other threads hitting this trap,
-	 and later not being able to explain it, because we were
-	 stepping over a breakpoint, and we hold all threads but
-	 LWP stopped while doing that.  */
-      if (!can_hardware_single_step ())
-	{
-	  gdb_assert (has_single_step_breakpoints (current_thread));
-	  delete_single_step_breakpoints (current_thread);
-	}
-
-      step_over_bkpt = null_ptid;
-      current_thread = saved_thread;
-      return 1;
-    }
-  else
-    return 0;
-}
-
-/* If there's a step over in progress, wait until all threads stop
-   (that is, until the stepping thread finishes its step), and
-   unsuspend all lwps.  The stepping thread ends with its status
-   pending, which is processed later when we get back to processing
-   events.  */
-
-static void
-complete_ongoing_step_over (void)
-{
-  if (step_over_bkpt != null_ptid)
-    {
-      struct lwp_info *lwp;
-      int wstat;
-      int ret;
-
-      if (debug_threads)
-	debug_printf ("detach: step over in progress, finish it first\n");
-
-      /* Passing NULL_PTID as filter indicates we want all events to
-	 be left pending.  Eventually this returns when there are no
-	 unwaited-for children left.  */
-      ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid,
-					   &wstat, __WALL);
-      gdb_assert (ret == -1);
-
-      lwp = find_lwp_pid (step_over_bkpt);
-      if (lwp != NULL)
-	finish_step_over (lwp);
-      step_over_bkpt = null_ptid;
-      unsuspend_all_lwps (lwp);
-    }
-}
-
-/* This function is called once per thread.  We check the thread's resume
-   request, which will tell us whether to resume, step, or leave the thread
-   stopped; and what signal, if any, it should be sent.
-
-   For threads which we aren't explicitly told otherwise, we preserve
-   the stepping flag; this is used for stepping over gdbserver-placed
-   breakpoints.
-
-   If pending_flags was set in any thread, we queue any needed
-   signals, since we won't actually resume.  We already have a pending
-   event to report, so we don't need to preserve any step requests;
-   they should be re-issued if necessary.  */
-
-static void
-linux_resume_one_thread (thread_info *thread, bool leave_all_stopped)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-  int leave_pending;
-
-  if (lwp->resume == NULL)
-    return;
-
-  if (lwp->resume->kind == resume_stop)
-    {
-      if (debug_threads)
-	debug_printf ("resume_stop request for LWP %ld\n", lwpid_of (thread));
-
-      if (!lwp->stopped)
-	{
-	  if (debug_threads)
-	    debug_printf ("stopping LWP %ld\n", lwpid_of (thread));
-
-	  /* Stop the thread, and wait for the event asynchronously,
-	     through the event loop.  */
-	  send_sigstop (lwp);
-	}
-      else
-	{
-	  if (debug_threads)
-	    debug_printf ("already stopped LWP %ld\n",
-			  lwpid_of (thread));
-
-	  /* The LWP may have been stopped in an internal event that
-	     was not meant to be notified back to GDB (e.g., gdbserver
-	     breakpoint), so we should be reporting a stop event in
-	     this case too.  */
-
-	  /* If the thread already has a pending SIGSTOP, this is a
-	     no-op.  Otherwise, something later will presumably resume
-	     the thread and this will cause it to cancel any pending
-	     operation, due to last_resume_kind == resume_stop.  If
-	     the thread already has a pending status to report, we
-	     will still report it the next time we wait - see
-	     status_pending_p_callback.  */
-
-	  /* If we already have a pending signal to report, then
-	     there's no need to queue a SIGSTOP, as this means we're
-	     midway through moving the LWP out of the jumppad, and we
-	     will report the pending signal as soon as that is
-	     finished.  */
-	  if (lwp->pending_signals_to_report == NULL)
-	    send_sigstop (lwp);
-	}
-
-      /* For stop requests, we're done.  */
-      lwp->resume = NULL;
-      thread->last_status.kind = TARGET_WAITKIND_IGNORE;
-      return;
-    }
-
-  /* If this thread which is about to be resumed has a pending status,
-     then don't resume it - we can just report the pending status.
-     Likewise if it is suspended, because e.g., another thread is
-     stepping past a breakpoint.  Make sure to queue any signals that
-     would otherwise be sent.  In all-stop mode, we do this decision
-     based on if *any* thread has a pending status.  If there's a
-     thread that needs the step-over-breakpoint dance, then don't
-     resume any other thread but that particular one.  */
-  leave_pending = (lwp->suspended
-		   || lwp->status_pending_p
-		   || leave_all_stopped);
-
-  /* If we have a new signal, enqueue the signal.  */
-  if (lwp->resume->sig != 0)
-    {
-      siginfo_t info, *info_p;
-
-      /* If this is the same signal we were previously stopped by,
-	 make sure to queue its siginfo.  */
-      if (WIFSTOPPED (lwp->last_status)
-	  && WSTOPSIG (lwp->last_status) == lwp->resume->sig
-	  && ptrace (PTRACE_GETSIGINFO, lwpid_of (thread),
-		     (PTRACE_TYPE_ARG3) 0, &info) == 0)
-	info_p = &info;
-      else
-	info_p = NULL;
-
-      enqueue_pending_signal (lwp, lwp->resume->sig, info_p);
-    }
-
-  if (!leave_pending)
-    {
-      if (debug_threads)
-	debug_printf ("resuming LWP %ld\n", lwpid_of (thread));
-
-      proceed_one_lwp (thread, NULL);
-    }
-  else
-    {
-      if (debug_threads)
-	debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread));
-    }
-
-  thread->last_status.kind = TARGET_WAITKIND_IGNORE;
-  lwp->resume = NULL;
-}
-
-static void
-linux_resume (struct thread_resume *resume_info, size_t n)
-{
-  struct thread_info *need_step_over = NULL;
-
-  if (debug_threads)
-    {
-      debug_enter ();
-      debug_printf ("linux_resume:\n");
-    }
-
-  for_each_thread ([&] (thread_info *thread)
-    {
-      linux_set_resume_request (thread, resume_info, n);
-    });
-
-  /* If there is a thread which would otherwise be resumed, which has
-     a pending status, then don't resume any threads - we can just
-     report the pending status.  Make sure to queue any signals that
-     would otherwise be sent.  In non-stop mode, we'll apply this
-     logic to each thread individually.  We consume all pending events
-     before considering to start a step-over (in all-stop).  */
-  bool any_pending = false;
-  if (!non_stop)
-    any_pending = find_thread (resume_status_pending_p) != NULL;
-
-  /* If there is a thread which would otherwise be resumed, which is
-     stopped at a breakpoint that needs stepping over, then don't
-     resume any threads - have it step over the breakpoint with all
-     other threads stopped, then resume all threads again.  Make sure
-     to queue any signals that would otherwise be delivered or
-     queued.  */
-  if (!any_pending && supports_breakpoints ())
-    need_step_over = find_thread (need_step_over_p);
-
-  bool leave_all_stopped = (need_step_over != NULL || any_pending);
-
-  if (debug_threads)
-    {
-      if (need_step_over != NULL)
-	debug_printf ("Not resuming all, need step over\n");
-      else if (any_pending)
-	debug_printf ("Not resuming, all-stop and found "
-		      "an LWP with pending status\n");
-      else
-	debug_printf ("Resuming, no pending status or step over needed\n");
-    }
-
-  /* Even if we're leaving threads stopped, queue all signals we'd
-     otherwise deliver.  */
-  for_each_thread ([&] (thread_info *thread)
-    {
-      linux_resume_one_thread (thread, leave_all_stopped);
-    });
-
-  if (need_step_over)
-    start_step_over (get_thread_lwp (need_step_over));
-
-  if (debug_threads)
-    {
-      debug_printf ("linux_resume done\n");
-      debug_exit ();
-    }
-
-  /* We may have events that were pending that can/should be sent to
-     the client now.  Trigger a linux_wait call.  */
-  if (target_is_async_p ())
-    async_file_mark ();
-}
-
-/* This function is called once per thread.  We check the thread's
-   last resume request, which will tell us whether to resume, step, or
-   leave the thread stopped.  Any signal the client requested to be
-   delivered has already been enqueued at this point.
-
-   If any thread that GDB wants running is stopped at an internal
-   breakpoint that needs stepping over, we start a step-over operation
-   on that particular thread, and leave all others stopped.  */
-
-static void
-proceed_one_lwp (thread_info *thread, lwp_info *except)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-  int step;
-
-  if (lwp == except)
-    return;
-
-  if (debug_threads)
-    debug_printf ("proceed_one_lwp: lwp %ld\n", lwpid_of (thread));
-
-  if (!lwp->stopped)
-    {
-      if (debug_threads)
-	debug_printf ("   LWP %ld already running\n", lwpid_of (thread));
-      return;
-    }
-
-  if (thread->last_resume_kind == resume_stop
-      && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
-    {
-      if (debug_threads)
-	debug_printf ("   client wants LWP to remain %ld stopped\n",
-		      lwpid_of (thread));
-      return;
-    }
-
-  if (lwp->status_pending_p)
-    {
-      if (debug_threads)
-	debug_printf ("   LWP %ld has pending status, leaving stopped\n",
-		      lwpid_of (thread));
-      return;
-    }
-
-  gdb_assert (lwp->suspended >= 0);
-
-  if (lwp->suspended)
-    {
-      if (debug_threads)
-	debug_printf ("   LWP %ld is suspended\n", lwpid_of (thread));
-      return;
-    }
-
-  if (thread->last_resume_kind == resume_stop
-      && lwp->pending_signals_to_report == NULL
-      && (lwp->collecting_fast_tracepoint
-	  == fast_tpoint_collect_result::not_collecting))
-    {
-      /* We haven't reported this LWP as stopped yet (otherwise, the
-	 last_status.kind check above would catch it, and we wouldn't
-	 reach here.  This LWP may have been momentarily paused by a
-	 stop_all_lwps call while handling for example, another LWP's
-	 step-over.  In that case, the pending expected SIGSTOP signal
-	 that was queued at vCont;t handling time will have already
-	 been consumed by wait_for_sigstop, and so we need to requeue
-	 another one here.  Note that if the LWP already has a SIGSTOP
-	 pending, this is a no-op.  */
-
-      if (debug_threads)
-	debug_printf ("Client wants LWP %ld to stop. "
-		      "Making sure it has a SIGSTOP pending\n",
-		      lwpid_of (thread));
-
-      send_sigstop (lwp);
-    }
-
-  if (thread->last_resume_kind == resume_step)
-    {
-      if (debug_threads)
-	debug_printf ("   stepping LWP %ld, client wants it stepping\n",
-		      lwpid_of (thread));
-
-      /* If resume_step is requested by GDB, install single-step
-	 breakpoints when the thread is about to be actually resumed if
-	 the single-step breakpoints weren't removed.  */
-      if (can_software_single_step ()
-	  && !has_single_step_breakpoints (thread))
-	install_software_single_step_breakpoints (lwp);
-
-      step = maybe_hw_step (thread);
-    }
-  else if (lwp->bp_reinsert != 0)
-    {
-      if (debug_threads)
-	debug_printf ("   stepping LWP %ld, reinsert set\n",
-		      lwpid_of (thread));
-
-      step = maybe_hw_step (thread);
-    }
-  else
-    step = 0;
-
-  linux_resume_one_lwp (lwp, step, 0, NULL);
-}
-
-static void
-unsuspend_and_proceed_one_lwp (thread_info *thread, lwp_info *except)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  if (lwp == except)
-    return;
-
-  lwp_suspended_decr (lwp);
-
-  proceed_one_lwp (thread, except);
-}
-
-/* When we finish a step-over, set threads running again.  If there's
-   another thread that may need a step-over, now's the time to start
-   it.  Eventually, we'll move all threads past their breakpoints.  */
-
-static void
-proceed_all_lwps (void)
-{
-  struct thread_info *need_step_over;
-
-  /* If there is a thread which would otherwise be resumed, which is
-     stopped at a breakpoint that needs stepping over, then don't
-     resume any threads - have it step over the breakpoint with all
-     other threads stopped, then resume all threads again.  */
-
-  if (supports_breakpoints ())
-    {
-      need_step_over = find_thread (need_step_over_p);
-
-      if (need_step_over != NULL)
-	{
-	  if (debug_threads)
-	    debug_printf ("proceed_all_lwps: found "
-			  "thread %ld needing a step-over\n",
-			  lwpid_of (need_step_over));
-
-	  start_step_over (get_thread_lwp (need_step_over));
-	  return;
-	}
-    }
-
-  if (debug_threads)
-    debug_printf ("Proceeding, no step-over needed\n");
-
-  for_each_thread ([] (thread_info *thread)
-    {
-      proceed_one_lwp (thread, NULL);
-    });
-}
-
-/* Stopped LWPs that the client wanted to be running, that don't have
-   pending statuses, are set to run again, except for EXCEPT, if not
-   NULL.  This undoes a stop_all_lwps call.  */
-
-static void
-unstop_all_lwps (int unsuspend, struct lwp_info *except)
-{
-  if (debug_threads)
-    {
-      debug_enter ();
-      if (except)
-	debug_printf ("unstopping all lwps, except=(LWP %ld)\n",
-		      lwpid_of (get_lwp_thread (except)));
-      else
-	debug_printf ("unstopping all lwps\n");
-    }
-
-  if (unsuspend)
-    for_each_thread ([&] (thread_info *thread)
-      {
-	unsuspend_and_proceed_one_lwp (thread, except);
-      });
-  else
-    for_each_thread ([&] (thread_info *thread)
-      {
-	proceed_one_lwp (thread, except);
-      });
-
-  if (debug_threads)
-    {
-      debug_printf ("unstop_all_lwps done\n");
-      debug_exit ();
-    }
-}
-
-
-#ifdef HAVE_LINUX_REGSETS
-
-#define use_linux_regsets 1
-
-/* Returns true if REGSET has been disabled.  */
-
-static int
-regset_disabled (struct regsets_info *info, struct regset_info *regset)
-{
-  return (info->disabled_regsets != NULL
-	  && info->disabled_regsets[regset - info->regsets]);
-}
-
-/* Disable REGSET.  */
-
-static void
-disable_regset (struct regsets_info *info, struct regset_info *regset)
-{
-  int dr_offset;
-
-  dr_offset = regset - info->regsets;
-  if (info->disabled_regsets == NULL)
-    info->disabled_regsets = (char *) xcalloc (1, info->num_regsets);
-  info->disabled_regsets[dr_offset] = 1;
-}
-
-static int
-regsets_fetch_inferior_registers (struct regsets_info *regsets_info,
-				  struct regcache *regcache)
-{
-  struct regset_info *regset;
-  int saw_general_regs = 0;
-  int pid;
-  struct iovec iov;
-
-  pid = lwpid_of (current_thread);
-  for (regset = regsets_info->regsets; regset->size >= 0; regset++)
-    {
-      void *buf, *data;
-      int nt_type, res;
-
-      if (regset->size == 0 || regset_disabled (regsets_info, regset))
-	continue;
-
-      buf = xmalloc (regset->size);
-
-      nt_type = regset->nt_type;
-      if (nt_type)
-	{
-	  iov.iov_base = buf;
-	  iov.iov_len = regset->size;
-	  data = (void *) &iov;
-	}
-      else
-	data = buf;
-
-#ifndef __sparc__
-      res = ptrace (regset->get_request, pid,
-		    (PTRACE_TYPE_ARG3) (long) nt_type, data);
-#else
-      res = ptrace (regset->get_request, pid, data, nt_type);
-#endif
-      if (res < 0)
-	{
-	  if (errno == EIO
-	      || (errno == EINVAL && regset->type == OPTIONAL_REGS))
-	    {
-	      /* If we get EIO on a regset, or an EINVAL and the regset is
-		 optional, do not try it again for this process mode.  */
-	      disable_regset (regsets_info, regset);
-	    }
-	  else if (errno == ENODATA)
-	    {
-	      /* ENODATA may be returned if the regset is currently
-		 not "active".  This can happen in normal operation,
-		 so suppress the warning in this case.  */
-	    }
-	  else if (errno == ESRCH)
-	    {
-	      /* At this point, ESRCH should mean the process is
-		 already gone, in which case we simply ignore attempts
-		 to read its registers.  */
-	    }
-	  else
-	    {
-	      char s[256];
-	      sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
-		       pid);
-	      perror (s);
-	    }
-	}
-      else
-	{
-	  if (regset->type == GENERAL_REGS)
-	    saw_general_regs = 1;
-	  regset->store_function (regcache, buf);
-	}
-      free (buf);
-    }
-  if (saw_general_regs)
-    return 0;
-  else
-    return 1;
-}
-
-static int
-regsets_store_inferior_registers (struct regsets_info *regsets_info,
-				  struct regcache *regcache)
-{
-  struct regset_info *regset;
-  int saw_general_regs = 0;
-  int pid;
-  struct iovec iov;
-
-  pid = lwpid_of (current_thread);
-  for (regset = regsets_info->regsets; regset->size >= 0; regset++)
-    {
-      void *buf, *data;
-      int nt_type, res;
-
-      if (regset->size == 0 || regset_disabled (regsets_info, regset)
-	  || regset->fill_function == NULL)
-	continue;
-
-      buf = xmalloc (regset->size);
-
-      /* First fill the buffer with the current register set contents,
-	 in case there are any items in the kernel's regset that are
-	 not in gdbserver's regcache.  */
-
-      nt_type = regset->nt_type;
-      if (nt_type)
-	{
-	  iov.iov_base = buf;
-	  iov.iov_len = regset->size;
-	  data = (void *) &iov;
-	}
-      else
-	data = buf;
-
-#ifndef __sparc__
-      res = ptrace (regset->get_request, pid,
-		    (PTRACE_TYPE_ARG3) (long) nt_type, data);
-#else
-      res = ptrace (regset->get_request, pid, data, nt_type);
-#endif
-
-      if (res == 0)
-	{
-	  /* Then overlay our cached registers on that.  */
-	  regset->fill_function (regcache, buf);
-
-	  /* Only now do we write the register set.  */
-#ifndef __sparc__
-	  res = ptrace (regset->set_request, pid,
-			(PTRACE_TYPE_ARG3) (long) nt_type, data);
-#else
-	  res = ptrace (regset->set_request, pid, data, nt_type);
-#endif
-	}
-
-      if (res < 0)
-	{
-	  if (errno == EIO
-	      || (errno == EINVAL && regset->type == OPTIONAL_REGS))
-	    {
-	      /* If we get EIO on a regset, or an EINVAL and the regset is
-		 optional, do not try it again for this process mode.  */
-	      disable_regset (regsets_info, regset);
-	    }
-	  else if (errno == ESRCH)
-	    {
-	      /* At this point, ESRCH should mean the process is
-		 already gone, in which case we simply ignore attempts
-		 to change its registers.  See also the related
-		 comment in linux_resume_one_lwp.  */
-	      free (buf);
-	      return 0;
-	    }
-	  else
-	    {
-	      perror ("Warning: ptrace(regsets_store_inferior_registers)");
-	    }
-	}
-      else if (regset->type == GENERAL_REGS)
-	saw_general_regs = 1;
-      free (buf);
-    }
-  if (saw_general_regs)
-    return 0;
-  else
-    return 1;
-}
-
-#else /* !HAVE_LINUX_REGSETS */
-
-#define use_linux_regsets 0
-#define regsets_fetch_inferior_registers(regsets_info, regcache) 1
-#define regsets_store_inferior_registers(regsets_info, regcache) 1
-
-#endif
-
-/* Return 1 if register REGNO is supported by one of the regset ptrace
-   calls or 0 if it has to be transferred individually.  */
-
-static int
-linux_register_in_regsets (const struct regs_info *regs_info, int regno)
-{
-  unsigned char mask = 1 << (regno % 8);
-  size_t index = regno / 8;
-
-  return (use_linux_regsets
-	  && (regs_info->regset_bitmap == NULL
-	      || (regs_info->regset_bitmap[index] & mask) != 0));
-}
-
-#ifdef HAVE_LINUX_USRREGS
-
-static int
-register_addr (const struct usrregs_info *usrregs, int regnum)
-{
-  int addr;
-
-  if (regnum < 0 || regnum >= usrregs->num_regs)
-    error ("Invalid register number %d.", regnum);
-
-  addr = usrregs->regmap[regnum];
-
-  return addr;
-}
-
-/* Fetch one register.  */
-static void
-fetch_register (const struct usrregs_info *usrregs,
-		struct regcache *regcache, int regno)
-{
-  CORE_ADDR regaddr;
-  int i, size;
-  char *buf;
-  int pid;
-
-  if (regno >= usrregs->num_regs)
-    return;
-  if ((*the_low_target.cannot_fetch_register) (regno))
-    return;
-
-  regaddr = register_addr (usrregs, regno);
-  if (regaddr == -1)
-    return;
-
-  size = ((register_size (regcache->tdesc, regno)
-	   + sizeof (PTRACE_XFER_TYPE) - 1)
-	  & -sizeof (PTRACE_XFER_TYPE));
-  buf = (char *) alloca (size);
-
-  pid = lwpid_of (current_thread);
-  for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
-    {
-      errno = 0;
-      *(PTRACE_XFER_TYPE *) (buf + i) =
-	ptrace (PTRACE_PEEKUSER, pid,
-		/* Coerce to a uintptr_t first to avoid potential gcc warning
-		   of coercing an 8 byte integer to a 4 byte pointer.  */
-		(PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0);
-      regaddr += sizeof (PTRACE_XFER_TYPE);
-      if (errno != 0)
-	{
-	  /* Mark register REGNO unavailable.  */
-	  supply_register (regcache, regno, NULL);
-	  return;
-	}
-    }
-
-  if (the_low_target.supply_ptrace_register)
-    the_low_target.supply_ptrace_register (regcache, regno, buf);
-  else
-    supply_register (regcache, regno, buf);
-}
-
-/* Store one register.  */
-static void
-store_register (const struct usrregs_info *usrregs,
-		struct regcache *regcache, int regno)
-{
-  CORE_ADDR regaddr;
-  int i, size;
-  char *buf;
-  int pid;
-
-  if (regno >= usrregs->num_regs)
-    return;
-  if ((*the_low_target.cannot_store_register) (regno))
-    return;
-
-  regaddr = register_addr (usrregs, regno);
-  if (regaddr == -1)
-    return;
-
-  size = ((register_size (regcache->tdesc, regno)
-	   + sizeof (PTRACE_XFER_TYPE) - 1)
-	  & -sizeof (PTRACE_XFER_TYPE));
-  buf = (char *) alloca (size);
-  memset (buf, 0, size);
-
-  if (the_low_target.collect_ptrace_register)
-    the_low_target.collect_ptrace_register (regcache, regno, buf);
-  else
-    collect_register (regcache, regno, buf);
-
-  pid = lwpid_of (current_thread);
-  for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
-    {
-      errno = 0;
-      ptrace (PTRACE_POKEUSER, pid,
-	    /* Coerce to a uintptr_t first to avoid potential gcc warning
-	       about coercing an 8 byte integer to a 4 byte pointer.  */
-	      (PTRACE_TYPE_ARG3) (uintptr_t) regaddr,
-	      (PTRACE_TYPE_ARG4) *(PTRACE_XFER_TYPE *) (buf + i));
-      if (errno != 0)
-	{
-	  /* At this point, ESRCH should mean the process is
-	     already gone, in which case we simply ignore attempts
-	     to change its registers.  See also the related
-	     comment in linux_resume_one_lwp.  */
-	  if (errno == ESRCH)
-	    return;
-
-	  if ((*the_low_target.cannot_store_register) (regno) == 0)
-	    error ("writing register %d: %s", regno, safe_strerror (errno));
-	}
-      regaddr += sizeof (PTRACE_XFER_TYPE);
-    }
-}
-
-/* Fetch all registers, or just one, from the child process.
-   If REGNO is -1, do this for all registers, skipping any that are
-   assumed to have been retrieved by regsets_fetch_inferior_registers,
-   unless ALL is non-zero.
-   Otherwise, REGNO specifies which register (so we can save time).  */
-static void
-usr_fetch_inferior_registers (const struct regs_info *regs_info,
-			      struct regcache *regcache, int regno, int all)
-{
-  struct usrregs_info *usr = regs_info->usrregs;
-
-  if (regno == -1)
-    {
-      for (regno = 0; regno < usr->num_regs; regno++)
-	if (all || !linux_register_in_regsets (regs_info, regno))
-	  fetch_register (usr, regcache, regno);
-    }
-  else
-    fetch_register (usr, regcache, regno);
-}
-
-/* Store our register values back into the inferior.
-   If REGNO is -1, do this for all registers, skipping any that are
-   assumed to have been saved by regsets_store_inferior_registers,
-   unless ALL is non-zero.
-   Otherwise, REGNO specifies which register (so we can save time).  */
-static void
-usr_store_inferior_registers (const struct regs_info *regs_info,
-			      struct regcache *regcache, int regno, int all)
-{
-  struct usrregs_info *usr = regs_info->usrregs;
-
-  if (regno == -1)
-    {
-      for (regno = 0; regno < usr->num_regs; regno++)
-	if (all || !linux_register_in_regsets (regs_info, regno))
-	  store_register (usr, regcache, regno);
-    }
-  else
-    store_register (usr, regcache, regno);
-}
-
-#else /* !HAVE_LINUX_USRREGS */
-
-#define usr_fetch_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
-#define usr_store_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
-
-#endif
-
-
-static void
-linux_fetch_registers (struct regcache *regcache, int regno)
-{
-  int use_regsets;
-  int all = 0;
-  const struct regs_info *regs_info = (*the_low_target.regs_info) ();
-
-  if (regno == -1)
-    {
-      if (the_low_target.fetch_register != NULL
-	  && regs_info->usrregs != NULL)
-	for (regno = 0; regno < regs_info->usrregs->num_regs; regno++)
-	  (*the_low_target.fetch_register) (regcache, regno);
-
-      all = regsets_fetch_inferior_registers (regs_info->regsets_info, regcache);
-      if (regs_info->usrregs != NULL)
-	usr_fetch_inferior_registers (regs_info, regcache, -1, all);
-    }
-  else
-    {
-      if (the_low_target.fetch_register != NULL
-	  && (*the_low_target.fetch_register) (regcache, regno))
-	return;
-
-      use_regsets = linux_register_in_regsets (regs_info, regno);
-      if (use_regsets)
-	all = regsets_fetch_inferior_registers (regs_info->regsets_info,
-						regcache);
-      if ((!use_regsets || all) && regs_info->usrregs != NULL)
-	usr_fetch_inferior_registers (regs_info, regcache, regno, 1);
-    }
-}
-
-static void
-linux_store_registers (struct regcache *regcache, int regno)
-{
-  int use_regsets;
-  int all = 0;
-  const struct regs_info *regs_info = (*the_low_target.regs_info) ();
-
-  if (regno == -1)
-    {
-      all = regsets_store_inferior_registers (regs_info->regsets_info,
-					      regcache);
-      if (regs_info->usrregs != NULL)
-	usr_store_inferior_registers (regs_info, regcache, regno, all);
-    }
-  else
-    {
-      use_regsets = linux_register_in_regsets (regs_info, regno);
-      if (use_regsets)
-	all = regsets_store_inferior_registers (regs_info->regsets_info,
-						regcache);
-      if ((!use_regsets || all) && regs_info->usrregs != NULL)
-	usr_store_inferior_registers (regs_info, regcache, regno, 1);
-    }
-}
-
-
-/* Copy LEN bytes from inferior's memory starting at MEMADDR
-   to debugger memory starting at MYADDR.  */
-
-static int
-linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  int pid = lwpid_of (current_thread);
-  PTRACE_XFER_TYPE *buffer;
-  CORE_ADDR addr;
-  int count;
-  char filename[64];
-  int i;
-  int ret;
-  int fd;
-
-  /* Try using /proc.  Don't bother for one word.  */
-  if (len >= 3 * sizeof (long))
-    {
-      int bytes;
-
-      /* We could keep this file open and cache it - possibly one per
-	 thread.  That requires some juggling, but is even faster.  */
-      sprintf (filename, "/proc/%d/mem", pid);
-      fd = open (filename, O_RDONLY | O_LARGEFILE);
-      if (fd == -1)
-	goto no_proc;
-
-      /* If pread64 is available, use it.  It's faster if the kernel
-	 supports it (only one syscall), and it's 64-bit safe even on
-	 32-bit platforms (for instance, SPARC debugging a SPARC64
-	 application).  */
-#ifdef HAVE_PREAD64
-      bytes = pread64 (fd, myaddr, len, memaddr);
-#else
-      bytes = -1;
-      if (lseek (fd, memaddr, SEEK_SET) != -1)
-	bytes = read (fd, myaddr, len);
-#endif
-
-      close (fd);
-      if (bytes == len)
-	return 0;
-
-      /* Some data was read, we'll try to get the rest with ptrace.  */
-      if (bytes > 0)
-	{
-	  memaddr += bytes;
-	  myaddr += bytes;
-	  len -= bytes;
-	}
-    }
-
- no_proc:
-  /* Round starting address down to longword boundary.  */
-  addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
-  /* Round ending address up; get number of longwords that makes.  */
-  count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
-	   / sizeof (PTRACE_XFER_TYPE));
-  /* Allocate buffer of that many longwords.  */
-  buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
-
-  /* Read all the longwords */
-  errno = 0;
-  for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
-    {
-      /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
-	 about coercing an 8 byte integer to a 4 byte pointer.  */
-      buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
-			  (PTRACE_TYPE_ARG3) (uintptr_t) addr,
-			  (PTRACE_TYPE_ARG4) 0);
-      if (errno)
-	break;
-    }
-  ret = errno;
-
-  /* Copy appropriate bytes out of the buffer.  */
-  if (i > 0)
-    {
-      i *= sizeof (PTRACE_XFER_TYPE);
-      i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
-      memcpy (myaddr,
-	      (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
-	      i < len ? i : len);
-    }
-
-  return ret;
-}
-
-/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
-   memory at MEMADDR.  On failure (cannot write to the inferior)
-   returns the value of errno.  Always succeeds if LEN is zero.  */
-
-static int
-linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
-{
-  int i;
-  /* Round starting address down to longword boundary.  */
-  CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
-  /* Round ending address up; get number of longwords that makes.  */
-  int count
-    = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
-    / sizeof (PTRACE_XFER_TYPE);
-
-  /* Allocate buffer of that many longwords.  */
-  PTRACE_XFER_TYPE *buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
-
-  int pid = lwpid_of (current_thread);
-
-  if (len == 0)
-    {
-      /* Zero length write always succeeds.  */
-      return 0;
-    }
-
-  if (debug_threads)
-    {
-      /* Dump up to four bytes.  */
-      char str[4 * 2 + 1];
-      char *p = str;
-      int dump = len < 4 ? len : 4;
-
-      for (i = 0; i < dump; i++)
-	{
-	  sprintf (p, "%02x", myaddr[i]);
-	  p += 2;
-	}
-      *p = '\0';
-
-      debug_printf ("Writing %s to 0x%08lx in process %d\n",
-		    str, (long) memaddr, pid);
-    }
-
-  /* Fill start and end extra bytes of buffer with existing memory data.  */
-
-  errno = 0;
-  /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
-     about coercing an 8 byte integer to a 4 byte pointer.  */
-  buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
-		      (PTRACE_TYPE_ARG3) (uintptr_t) addr,
-		      (PTRACE_TYPE_ARG4) 0);
-  if (errno)
-    return errno;
-
-  if (count > 1)
-    {
-      errno = 0;
-      buffer[count - 1]
-	= ptrace (PTRACE_PEEKTEXT, pid,
-		  /* Coerce to a uintptr_t first to avoid potential gcc warning
-		     about coercing an 8 byte integer to a 4 byte pointer.  */
-		  (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1)
-						  * sizeof (PTRACE_XFER_TYPE)),
-		  (PTRACE_TYPE_ARG4) 0);
-      if (errno)
-	return errno;
-    }
-
-  /* Copy data to be written over corresponding part of buffer.  */
-
-  memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
-	  myaddr, len);
-
-  /* Write the entire buffer.  */
-
-  for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
-    {
-      errno = 0;
-      ptrace (PTRACE_POKETEXT, pid,
-	      /* Coerce to a uintptr_t first to avoid potential gcc warning
-		 about coercing an 8 byte integer to a 4 byte pointer.  */
-	      (PTRACE_TYPE_ARG3) (uintptr_t) addr,
-	      (PTRACE_TYPE_ARG4) buffer[i]);
-      if (errno)
-	return errno;
-    }
-
-  return 0;
-}
-
-static void
-linux_look_up_symbols (void)
-{
-#ifdef USE_THREAD_DB
-  struct process_info *proc = current_process ();
-
-  if (proc->priv->thread_db != NULL)
-    return;
-
-  thread_db_init ();
-#endif
-}
-
-static void
-linux_request_interrupt (void)
-{
-  /* Send a SIGINT to the process group.  This acts just like the user
-     typed a ^C on the controlling terminal.  */
-  kill (-signal_pid, SIGINT);
-}
-
-/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
-   to debugger memory starting at MYADDR.  */
-
-static int
-linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
-{
-  char filename[PATH_MAX];
-  int fd, n;
-  int pid = lwpid_of (current_thread);
-
-  xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
-
-  fd = open (filename, O_RDONLY);
-  if (fd < 0)
-    return -1;
-
-  if (offset != (CORE_ADDR) 0
-      && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
-    n = -1;
-  else
-    n = read (fd, myaddr, len);
-
-  close (fd);
-
-  return n;
-}
-
-/* These breakpoint and watchpoint related wrapper functions simply
-   pass on the function call if the target has registered a
-   corresponding function.  */
-
-static int
-linux_supports_z_point_type (char z_type)
-{
-  return (the_low_target.supports_z_point_type != NULL
-	  && the_low_target.supports_z_point_type (z_type));
-}
-
-static int
-linux_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		    int size, struct raw_breakpoint *bp)
-{
-  if (type == raw_bkpt_type_sw)
-    return insert_memory_breakpoint (bp);
-  else if (the_low_target.insert_point != NULL)
-    return the_low_target.insert_point (type, addr, size, bp);
-  else
-    /* Unsupported (see target.h).  */
-    return 1;
-}
-
-static int
-linux_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		    int size, struct raw_breakpoint *bp)
-{
-  if (type == raw_bkpt_type_sw)
-    return remove_memory_breakpoint (bp);
-  else if (the_low_target.remove_point != NULL)
-    return the_low_target.remove_point (type, addr, size, bp);
-  else
-    /* Unsupported (see target.h).  */
-    return 1;
-}
-
-/* Implement the to_stopped_by_sw_breakpoint target_ops
-   method.  */
-
-static int
-linux_stopped_by_sw_breakpoint (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-
-  return (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
-}
-
-/* Implement the to_supports_stopped_by_sw_breakpoint target_ops
-   method.  */
-
-static int
-linux_supports_stopped_by_sw_breakpoint (void)
-{
-  return USE_SIGTRAP_SIGINFO;
-}
-
-/* Implement the to_stopped_by_hw_breakpoint target_ops
-   method.  */
-
-static int
-linux_stopped_by_hw_breakpoint (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-
-  return (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
-}
-
-/* Implement the to_supports_stopped_by_hw_breakpoint target_ops
-   method.  */
-
-static int
-linux_supports_stopped_by_hw_breakpoint (void)
-{
-  return USE_SIGTRAP_SIGINFO;
-}
-
-/* Implement the supports_hardware_single_step target_ops method.  */
-
-static int
-linux_supports_hardware_single_step (void)
-{
-  return can_hardware_single_step ();
-}
-
-static int
-linux_supports_software_single_step (void)
-{
-  return can_software_single_step ();
-}
-
-static int
-linux_stopped_by_watchpoint (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-
-  return lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
-}
-
-static CORE_ADDR
-linux_stopped_data_address (void)
-{
-  struct lwp_info *lwp = get_thread_lwp (current_thread);
-
-  return lwp->stopped_data_address;
-}
-
-#if defined(__UCLIBC__) && defined(HAS_NOMMU)	      \
-    && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \
-    && defined(PT_TEXT_END_ADDR)
-
-/* This is only used for targets that define PT_TEXT_ADDR,
-   PT_DATA_ADDR and PT_TEXT_END_ADDR.  If those are not defined, supposedly
-   the target has different ways of acquiring this information, like
-   loadmaps.  */
-
-/* Under uClinux, programs are loaded at non-zero offsets, which we need
-   to tell gdb about.  */
-
-static int
-linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
-{
-  unsigned long text, text_end, data;
-  int pid = lwpid_of (current_thread);
-
-  errno = 0;
-
-  text = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_ADDR,
-		 (PTRACE_TYPE_ARG4) 0);
-  text_end = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_END_ADDR,
-		     (PTRACE_TYPE_ARG4) 0);
-  data = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_DATA_ADDR,
-		 (PTRACE_TYPE_ARG4) 0);
-
-  if (errno == 0)
-    {
-      /* Both text and data offsets produced at compile-time (and so
-	 used by gdb) are relative to the beginning of the program,
-	 with the data segment immediately following the text segment.
-	 However, the actual runtime layout in memory may put the data
-	 somewhere else, so when we send gdb a data base-address, we
-	 use the real data base address and subtract the compile-time
-	 data base-address from it (which is just the length of the
-	 text segment).  BSS immediately follows data in both
-	 cases.  */
-      *text_p = text;
-      *data_p = data - (text_end - text);
-
-      return 1;
-    }
- return 0;
-}
-#endif
-
-static int
-linux_qxfer_osdata (const char *annex,
-		    unsigned char *readbuf, unsigned const char *writebuf,
-		    CORE_ADDR offset, int len)
-{
-  return linux_common_xfer_osdata (annex, readbuf, offset, len);
-}
-
-/* Convert a native/host siginfo object, into/from the siginfo in the
-   layout of the inferiors' architecture.  */
-
-static void
-siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
-{
-  int done = 0;
-
-  if (the_low_target.siginfo_fixup != NULL)
-    done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
-
-  /* If there was no callback, or the callback didn't do anything,
-     then just do a straight memcpy.  */
-  if (!done)
-    {
-      if (direction == 1)
-	memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
-      else
-	memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
-    }
-}
-
-static int
-linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
-		    unsigned const char *writebuf, CORE_ADDR offset, int len)
-{
-  int pid;
-  siginfo_t siginfo;
-  gdb_byte inf_siginfo[sizeof (siginfo_t)];
-
-  if (current_thread == NULL)
-    return -1;
-
-  pid = lwpid_of (current_thread);
-
-  if (debug_threads)
-    debug_printf ("%s siginfo for lwp %d.\n",
-		  readbuf != NULL ? "Reading" : "Writing",
-		  pid);
-
-  if (offset >= sizeof (siginfo))
-    return -1;
-
-  if (ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
-    return -1;
-
-  /* When GDBSERVER is built as a 64-bit application, ptrace writes into
-     SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
-     inferior with a 64-bit GDBSERVER should look the same as debugging it
-     with a 32-bit GDBSERVER, we need to convert it.  */
-  siginfo_fixup (&siginfo, inf_siginfo, 0);
-
-  if (offset + len > sizeof (siginfo))
-    len = sizeof (siginfo) - offset;
-
-  if (readbuf != NULL)
-    memcpy (readbuf, inf_siginfo + offset, len);
-  else
-    {
-      memcpy (inf_siginfo + offset, writebuf, len);
-
-      /* Convert back to ptrace layout before flushing it out.  */
-      siginfo_fixup (&siginfo, inf_siginfo, 1);
-
-      if (ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
-	return -1;
-    }
-
-  return len;
-}
-
-/* SIGCHLD handler that serves two purposes: In non-stop/async mode,
-   so we notice when children change state; as the handler for the
-   sigsuspend in my_waitpid.  */
-
-static void
-sigchld_handler (int signo)
-{
-  int old_errno = errno;
-
-  if (debug_threads)
-    {
-      do
-	{
-	  /* Use the async signal safe debug function.  */
-	  if (debug_write ("sigchld_handler\n",
-			   sizeof ("sigchld_handler\n") - 1) < 0)
-	    break; /* just ignore */
-	} while (0);
-    }
-
-  if (target_is_async_p ())
-    async_file_mark (); /* trigger a linux_wait */
-
-  errno = old_errno;
-}
-
-static int
-linux_supports_non_stop (void)
-{
-  return 1;
-}
-
-static int
-linux_async (int enable)
-{
-  int previous = target_is_async_p ();
-
-  if (debug_threads)
-    debug_printf ("linux_async (%d), previous=%d\n",
-		  enable, previous);
-
-  if (previous != enable)
-    {
-      sigset_t mask;
-      sigemptyset (&mask);
-      sigaddset (&mask, SIGCHLD);
-
-      gdb_sigmask (SIG_BLOCK, &mask, NULL);
-
-      if (enable)
-	{
-	  if (pipe (linux_event_pipe) == -1)
-	    {
-	      linux_event_pipe[0] = -1;
-	      linux_event_pipe[1] = -1;
-	      gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
-
-	      warning ("creating event pipe failed.");
-	      return previous;
-	    }
-
-	  fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
-	  fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
-
-	  /* Register the event loop handler.  */
-	  add_file_handler (linux_event_pipe[0],
-			    handle_target_event, NULL);
-
-	  /* Always trigger a linux_wait.  */
-	  async_file_mark ();
-	}
-      else
-	{
-	  delete_file_handler (linux_event_pipe[0]);
-
-	  close (linux_event_pipe[0]);
-	  close (linux_event_pipe[1]);
-	  linux_event_pipe[0] = -1;
-	  linux_event_pipe[1] = -1;
-	}
-
-      gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
-    }
-
-  return previous;
-}
-
-static int
-linux_start_non_stop (int nonstop)
-{
-  /* Register or unregister from event-loop accordingly.  */
-  linux_async (nonstop);
-
-  if (target_is_async_p () != (nonstop != 0))
-    return -1;
-
-  return 0;
-}
-
-static int
-linux_supports_multi_process (void)
-{
-  return 1;
-}
-
-/* Check if fork events are supported.  */
-
-static int
-linux_supports_fork_events (void)
-{
-  return linux_supports_tracefork ();
-}
-
-/* Check if vfork events are supported.  */
-
-static int
-linux_supports_vfork_events (void)
-{
-  return linux_supports_tracefork ();
-}
-
-/* Check if exec events are supported.  */
-
-static int
-linux_supports_exec_events (void)
-{
-  return linux_supports_traceexec ();
-}
-
-/* Target hook for 'handle_new_gdb_connection'.  Causes a reset of the
-   ptrace flags for all inferiors.  This is in case the new GDB connection
-   doesn't support the same set of events that the previous one did.  */
-
-static void
-linux_handle_new_gdb_connection (void)
-{
-  /* Request that all the lwps reset their ptrace options.  */
-  for_each_thread ([] (thread_info *thread)
-    {
-      struct lwp_info *lwp = get_thread_lwp (thread);
-
-      if (!lwp->stopped)
-	{
-	  /* Stop the lwp so we can modify its ptrace options.  */
-	  lwp->must_set_ptrace_flags = 1;
-	  linux_stop_lwp (lwp);
-	}
-      else
-	{
-	  /* Already stopped; go ahead and set the ptrace options.  */
-	  struct process_info *proc = find_process_pid (pid_of (thread));
-	  int options = linux_low_ptrace_options (proc->attached);
-
-	  linux_enable_event_reporting (lwpid_of (thread), options);
-	  lwp->must_set_ptrace_flags = 0;
-	}
-    });
-}
-
-static int
-linux_supports_disable_randomization (void)
-{
-#ifdef HAVE_PERSONALITY
-  return 1;
-#else
-  return 0;
-#endif
-}
-
-static int
-linux_supports_agent (void)
-{
-  return 1;
-}
-
-static int
-linux_supports_range_stepping (void)
-{
-  if (can_software_single_step ())
-    return 1;
-  if (*the_low_target.supports_range_stepping == NULL)
-    return 0;
-
-  return (*the_low_target.supports_range_stepping) ();
-}
-
-#if defined PT_GETDSBT || defined PTRACE_GETFDPIC
-struct target_loadseg
-{
-  /* Core address to which the segment is mapped.  */
-  Elf32_Addr addr;
-  /* VMA recorded in the program header.  */
-  Elf32_Addr p_vaddr;
-  /* Size of this segment in memory.  */
-  Elf32_Word p_memsz;
-};
-
-# if defined PT_GETDSBT
-struct target_loadmap
-{
-  /* Protocol version number, must be zero.  */
-  Elf32_Word version;
-  /* Pointer to the DSBT table, its size, and the DSBT index.  */
-  unsigned *dsbt_table;
-  unsigned dsbt_size, dsbt_index;
-  /* Number of segments in this map.  */
-  Elf32_Word nsegs;
-  /* The actual memory map.  */
-  struct target_loadseg segs[/*nsegs*/];
-};
-#  define LINUX_LOADMAP		PT_GETDSBT
-#  define LINUX_LOADMAP_EXEC	PTRACE_GETDSBT_EXEC
-#  define LINUX_LOADMAP_INTERP	PTRACE_GETDSBT_INTERP
-# else
-struct target_loadmap
-{
-  /* Protocol version number, must be zero.  */
-  Elf32_Half version;
-  /* Number of segments in this map.  */
-  Elf32_Half nsegs;
-  /* The actual memory map.  */
-  struct target_loadseg segs[/*nsegs*/];
-};
-#  define LINUX_LOADMAP		PTRACE_GETFDPIC
-#  define LINUX_LOADMAP_EXEC	PTRACE_GETFDPIC_EXEC
-#  define LINUX_LOADMAP_INTERP	PTRACE_GETFDPIC_INTERP
-# endif
-
-static int
-linux_read_loadmap (const char *annex, CORE_ADDR offset,
-		    unsigned char *myaddr, unsigned int len)
-{
-  int pid = lwpid_of (current_thread);
-  int addr = -1;
-  struct target_loadmap *data = NULL;
-  unsigned int actual_length, copy_length;
-
-  if (strcmp (annex, "exec") == 0)
-    addr = (int) LINUX_LOADMAP_EXEC;
-  else if (strcmp (annex, "interp") == 0)
-    addr = (int) LINUX_LOADMAP_INTERP;
-  else
-    return -1;
-
-  if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0)
-    return -1;
-
-  if (data == NULL)
-    return -1;
-
-  actual_length = sizeof (struct target_loadmap)
-    + sizeof (struct target_loadseg) * data->nsegs;
-
-  if (offset < 0 || offset > actual_length)
-    return -1;
-
-  copy_length = actual_length - offset < len ? actual_length - offset : len;
-  memcpy (myaddr, (char *) data + offset, copy_length);
-  return copy_length;
-}
-#else
-# define linux_read_loadmap NULL
-#endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */
-
-static void
-linux_process_qsupported (char **features, int count)
-{
-  if (the_low_target.process_qsupported != NULL)
-    the_low_target.process_qsupported (features, count);
-}
-
-static int
-linux_supports_catch_syscall (void)
-{
-  return (the_low_target.get_syscall_trapinfo != NULL
-	  && linux_supports_tracesysgood ());
-}
-
-static int
-linux_get_ipa_tdesc_idx (void)
-{
-  if (the_low_target.get_ipa_tdesc_idx == NULL)
-    return 0;
-
-  return (*the_low_target.get_ipa_tdesc_idx) ();
-}
-
-static int
-linux_supports_tracepoints (void)
-{
-  if (*the_low_target.supports_tracepoints == NULL)
-    return 0;
-
-  return (*the_low_target.supports_tracepoints) ();
-}
-
-static CORE_ADDR
-linux_read_pc (struct regcache *regcache)
-{
-  if (the_low_target.get_pc == NULL)
-    return 0;
-
-  return (*the_low_target.get_pc) (regcache);
-}
-
-static void
-linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  gdb_assert (the_low_target.set_pc != NULL);
-
-  (*the_low_target.set_pc) (regcache, pc);
-}
-
-static int
-linux_thread_stopped (struct thread_info *thread)
-{
-  return get_thread_lwp (thread)->stopped;
-}
-
-/* This exposes stop-all-threads functionality to other modules.  */
-
-static void
-linux_pause_all (int freeze)
-{
-  stop_all_lwps (freeze, NULL);
-}
-
-/* This exposes unstop-all-threads functionality to other gdbserver
-   modules.  */
-
-static void
-linux_unpause_all (int unfreeze)
-{
-  unstop_all_lwps (unfreeze, NULL);
-}
-
-static int
-linux_prepare_to_access_memory (void)
-{
-  /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
-     running LWP.  */
-  if (non_stop)
-    linux_pause_all (1);
-  return 0;
-}
-
-static void
-linux_done_accessing_memory (void)
-{
-  /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
-     running LWP.  */
-  if (non_stop)
-    linux_unpause_all (1);
-}
-
-static int
-linux_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-					CORE_ADDR collector,
-					CORE_ADDR lockaddr,
-					ULONGEST orig_size,
-					CORE_ADDR *jump_entry,
-					CORE_ADDR *trampoline,
-					ULONGEST *trampoline_size,
-					unsigned char *jjump_pad_insn,
-					ULONGEST *jjump_pad_insn_size,
-					CORE_ADDR *adjusted_insn_addr,
-					CORE_ADDR *adjusted_insn_addr_end,
-					char *err)
-{
-  return (*the_low_target.install_fast_tracepoint_jump_pad)
-    (tpoint, tpaddr, collector, lockaddr, orig_size,
-     jump_entry, trampoline, trampoline_size,
-     jjump_pad_insn, jjump_pad_insn_size,
-     adjusted_insn_addr, adjusted_insn_addr_end,
-     err);
-}
-
-static struct emit_ops *
-linux_emit_ops (void)
-{
-  if (the_low_target.emit_ops != NULL)
-    return (*the_low_target.emit_ops) ();
-  else
-    return NULL;
-}
-
-static int
-linux_get_min_fast_tracepoint_insn_len (void)
-{
-  return (*the_low_target.get_min_fast_tracepoint_insn_len) ();
-}
-
-/* Extract &phdr and num_phdr in the inferior.  Return 0 on success.  */
-
-static int
-get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64,
-			       CORE_ADDR *phdr_memaddr, int *num_phdr)
-{
-  char filename[PATH_MAX];
-  int fd;
-  const int auxv_size = is_elf64
-    ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t);
-  char buf[sizeof (Elf64_auxv_t)];  /* The larger of the two.  */
-
-  xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
-
-  fd = open (filename, O_RDONLY);
-  if (fd < 0)
-    return 1;
-
-  *phdr_memaddr = 0;
-  *num_phdr = 0;
-  while (read (fd, buf, auxv_size) == auxv_size
-	 && (*phdr_memaddr == 0 || *num_phdr == 0))
-    {
-      if (is_elf64)
-	{
-	  Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf;
-
-	  switch (aux->a_type)
-	    {
-	    case AT_PHDR:
-	      *phdr_memaddr = aux->a_un.a_val;
-	      break;
-	    case AT_PHNUM:
-	      *num_phdr = aux->a_un.a_val;
-	      break;
-	    }
-	}
-      else
-	{
-	  Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf;
-
-	  switch (aux->a_type)
-	    {
-	    case AT_PHDR:
-	      *phdr_memaddr = aux->a_un.a_val;
-	      break;
-	    case AT_PHNUM:
-	      *num_phdr = aux->a_un.a_val;
-	      break;
-	    }
-	}
-    }
-
-  close (fd);
-
-  if (*phdr_memaddr == 0 || *num_phdr == 0)
-    {
-      warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: "
-	       "phdr_memaddr = %ld, phdr_num = %d",
-	       (long) *phdr_memaddr, *num_phdr);
-      return 2;
-    }
-
-  return 0;
-}
-
-/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present.  */
-
-static CORE_ADDR
-get_dynamic (const int pid, const int is_elf64)
-{
-  CORE_ADDR phdr_memaddr, relocation;
-  int num_phdr, i;
-  unsigned char *phdr_buf;
-  const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr);
-
-  if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr))
-    return 0;
-
-  gdb_assert (num_phdr < 100);  /* Basic sanity check.  */
-  phdr_buf = (unsigned char *) alloca (num_phdr * phdr_size);
-
-  if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size))
-    return 0;
-
-  /* Compute relocation: it is expected to be 0 for "regular" executables,
-     non-zero for PIE ones.  */
-  relocation = -1;
-  for (i = 0; relocation == -1 && i < num_phdr; i++)
-    if (is_elf64)
-      {
-	Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
-
-	if (p->p_type == PT_PHDR)
-	  relocation = phdr_memaddr - p->p_vaddr;
-      }
-    else
-      {
-	Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
-
-	if (p->p_type == PT_PHDR)
-	  relocation = phdr_memaddr - p->p_vaddr;
-      }
-
-  if (relocation == -1)
-    {
-      /* PT_PHDR is optional, but necessary for PIE in general.  Fortunately
-	 any real world executables, including PIE executables, have always
-	 PT_PHDR present.  PT_PHDR is not present in some shared libraries or
-	 in fpc (Free Pascal 2.4) binaries but neither of those have a need for
-	 or present DT_DEBUG anyway (fpc binaries are statically linked).
-
-	 Therefore if there exists DT_DEBUG there is always also PT_PHDR.
-
-	 GDB could find RELOCATION also from AT_ENTRY - e_entry.  */
-
-      return 0;
-    }
-
-  for (i = 0; i < num_phdr; i++)
-    {
-      if (is_elf64)
-	{
-	  Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
-
-	  if (p->p_type == PT_DYNAMIC)
-	    return p->p_vaddr + relocation;
-	}
-      else
-	{
-	  Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
-
-	  if (p->p_type == PT_DYNAMIC)
-	    return p->p_vaddr + relocation;
-	}
-    }
-
-  return 0;
-}
-
-/* Return &_r_debug in the inferior, or -1 if not present.  Return value
-   can be 0 if the inferior does not yet have the library list initialized.
-   We look for DT_MIPS_RLD_MAP first.  MIPS executables use this instead of
-   DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too.  */
-
-static CORE_ADDR
-get_r_debug (const int pid, const int is_elf64)
-{
-  CORE_ADDR dynamic_memaddr;
-  const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
-  unsigned char buf[sizeof (Elf64_Dyn)];  /* The larger of the two.  */
-  CORE_ADDR map = -1;
-
-  dynamic_memaddr = get_dynamic (pid, is_elf64);
-  if (dynamic_memaddr == 0)
-    return map;
-
-  while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
-    {
-      if (is_elf64)
-	{
-	  Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
-#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL
-	  union
-	    {
-	      Elf64_Xword map;
-	      unsigned char buf[sizeof (Elf64_Xword)];
-	    }
-	  rld_map;
-#endif
-#ifdef DT_MIPS_RLD_MAP
-	  if (dyn->d_tag == DT_MIPS_RLD_MAP)
-	    {
-	      if (linux_read_memory (dyn->d_un.d_val,
-				     rld_map.buf, sizeof (rld_map.buf)) == 0)
-		return rld_map.map;
-	      else
-		break;
-	    }
-#endif	/* DT_MIPS_RLD_MAP */
-#ifdef DT_MIPS_RLD_MAP_REL
-	  if (dyn->d_tag == DT_MIPS_RLD_MAP_REL)
-	    {
-	      if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr,
-				     rld_map.buf, sizeof (rld_map.buf)) == 0)
-		return rld_map.map;
-	      else
-		break;
-	    }
-#endif	/* DT_MIPS_RLD_MAP_REL */
-
-	  if (dyn->d_tag == DT_DEBUG && map == -1)
-	    map = dyn->d_un.d_val;
-
-	  if (dyn->d_tag == DT_NULL)
-	    break;
-	}
-      else
-	{
-	  Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
-#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL
-	  union
-	    {
-	      Elf32_Word map;
-	      unsigned char buf[sizeof (Elf32_Word)];
-	    }
-	  rld_map;
-#endif
-#ifdef DT_MIPS_RLD_MAP
-	  if (dyn->d_tag == DT_MIPS_RLD_MAP)
-	    {
-	      if (linux_read_memory (dyn->d_un.d_val,
-				     rld_map.buf, sizeof (rld_map.buf)) == 0)
-		return rld_map.map;
-	      else
-		break;
-	    }
-#endif	/* DT_MIPS_RLD_MAP */
-#ifdef DT_MIPS_RLD_MAP_REL
-	  if (dyn->d_tag == DT_MIPS_RLD_MAP_REL)
-	    {
-	      if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr,
-				     rld_map.buf, sizeof (rld_map.buf)) == 0)
-		return rld_map.map;
-	      else
-		break;
-	    }
-#endif	/* DT_MIPS_RLD_MAP_REL */
-
-	  if (dyn->d_tag == DT_DEBUG && map == -1)
-	    map = dyn->d_un.d_val;
-
-	  if (dyn->d_tag == DT_NULL)
-	    break;
-	}
-
-      dynamic_memaddr += dyn_size;
-    }
-
-  return map;
-}
-
-/* Read one pointer from MEMADDR in the inferior.  */
-
-static int
-read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
-{
-  int ret;
-
-  /* Go through a union so this works on either big or little endian
-     hosts, when the inferior's pointer size is smaller than the size
-     of CORE_ADDR.  It is assumed the inferior's endianness is the
-     same of the superior's.  */
-  union
-  {
-    CORE_ADDR core_addr;
-    unsigned int ui;
-    unsigned char uc;
-  } addr;
-
-  ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
-  if (ret == 0)
-    {
-      if (ptr_size == sizeof (CORE_ADDR))
-	*ptr = addr.core_addr;
-      else if (ptr_size == sizeof (unsigned int))
-	*ptr = addr.ui;
-      else
-	gdb_assert_not_reached ("unhandled pointer size");
-    }
-  return ret;
-}
-
-struct link_map_offsets
-  {
-    /* Offset and size of r_debug.r_version.  */
-    int r_version_offset;
-
-    /* Offset and size of r_debug.r_map.  */
-    int r_map_offset;
-
-    /* Offset to l_addr field in struct link_map.  */
-    int l_addr_offset;
-
-    /* Offset to l_name field in struct link_map.  */
-    int l_name_offset;
-
-    /* Offset to l_ld field in struct link_map.  */
-    int l_ld_offset;
-
-    /* Offset to l_next field in struct link_map.  */
-    int l_next_offset;
-
-    /* Offset to l_prev field in struct link_map.  */
-    int l_prev_offset;
-  };
-
-/* Construct qXfer:libraries-svr4:read reply.  */
-
-static int
-linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
-			    unsigned const char *writebuf,
-			    CORE_ADDR offset, int len)
-{
-  struct process_info_private *const priv = current_process ()->priv;
-  char filename[PATH_MAX];
-  int pid, is_elf64;
-
-  static const struct link_map_offsets lmo_32bit_offsets =
-    {
-      0,     /* r_version offset. */
-      4,     /* r_debug.r_map offset.  */
-      0,     /* l_addr offset in link_map.  */
-      4,     /* l_name offset in link_map.  */
-      8,     /* l_ld offset in link_map.  */
-      12,    /* l_next offset in link_map.  */
-      16     /* l_prev offset in link_map.  */
-    };
-
-  static const struct link_map_offsets lmo_64bit_offsets =
-    {
-      0,     /* r_version offset. */
-      8,     /* r_debug.r_map offset.  */
-      0,     /* l_addr offset in link_map.  */
-      8,     /* l_name offset in link_map.  */
-      16,    /* l_ld offset in link_map.  */
-      24,    /* l_next offset in link_map.  */
-      32     /* l_prev offset in link_map.  */
-    };
-  const struct link_map_offsets *lmo;
-  unsigned int machine;
-  int ptr_size;
-  CORE_ADDR lm_addr = 0, lm_prev = 0;
-  CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev;
-  int header_done = 0;
-
-  if (writebuf != NULL)
-    return -2;
-  if (readbuf == NULL)
-    return -1;
-
-  pid = lwpid_of (current_thread);
-  xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
-  is_elf64 = elf_64_file_p (filename, &machine);
-  lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
-  ptr_size = is_elf64 ? 8 : 4;
-
-  while (annex[0] != '\0')
-    {
-      const char *sep;
-      CORE_ADDR *addrp;
-      int name_len;
-
-      sep = strchr (annex, '=');
-      if (sep == NULL)
-	break;
-
-      name_len = sep - annex;
-      if (name_len == 5 && startswith (annex, "start"))
-	addrp = &lm_addr;
-      else if (name_len == 4 && startswith (annex, "prev"))
-	addrp = &lm_prev;
-      else
-	{
-	  annex = strchr (sep, ';');
-	  if (annex == NULL)
-	    break;
-	  annex++;
-	  continue;
-	}
-
-      annex = decode_address_to_semicolon (addrp, sep + 1);
-    }
-
-  if (lm_addr == 0)
-    {
-      int r_version = 0;
-
-      if (priv->r_debug == 0)
-	priv->r_debug = get_r_debug (pid, is_elf64);
-
-      /* We failed to find DT_DEBUG.  Such situation will not change
-	 for this inferior - do not retry it.  Report it to GDB as
-	 E01, see for the reasons at the GDB solib-svr4.c side.  */
-      if (priv->r_debug == (CORE_ADDR) -1)
-	return -1;
-
-      if (priv->r_debug != 0)
-	{
-	  if (linux_read_memory (priv->r_debug + lmo->r_version_offset,
-				 (unsigned char *) &r_version,
-				 sizeof (r_version)) != 0
-	      || r_version != 1)
-	    {
-	      warning ("unexpected r_debug version %d", r_version);
-	    }
-	  else if (read_one_ptr (priv->r_debug + lmo->r_map_offset,
-				 &lm_addr, ptr_size) != 0)
-	    {
-	      warning ("unable to read r_map from 0x%lx",
-		       (long) priv->r_debug + lmo->r_map_offset);
-	    }
-	}
-    }
-
-  std::string document = "<library-list-svr4 version=\"1.0\"";
-
-  while (lm_addr
-	 && read_one_ptr (lm_addr + lmo->l_name_offset,
-			  &l_name, ptr_size) == 0
-	 && read_one_ptr (lm_addr + lmo->l_addr_offset,
-			  &l_addr, ptr_size) == 0
-	 && read_one_ptr (lm_addr + lmo->l_ld_offset,
-			  &l_ld, ptr_size) == 0
-	 && read_one_ptr (lm_addr + lmo->l_prev_offset,
-			  &l_prev, ptr_size) == 0
-	 && read_one_ptr (lm_addr + lmo->l_next_offset,
-			  &l_next, ptr_size) == 0)
-    {
-      unsigned char libname[PATH_MAX];
-
-      if (lm_prev != l_prev)
-	{
-	  warning ("Corrupted shared library list: 0x%lx != 0x%lx",
-		   (long) lm_prev, (long) l_prev);
-	  break;
-	}
-
-      /* Ignore the first entry even if it has valid name as the first entry
-	 corresponds to the main executable.  The first entry should not be
-	 skipped if the dynamic loader was loaded late by a static executable
-	 (see solib-svr4.c parameter ignore_first).  But in such case the main
-	 executable does not have PT_DYNAMIC present and this function already
-	 exited above due to failed get_r_debug.  */
-      if (lm_prev == 0)
-	string_appendf (document, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
-      else
-	{
-	  /* Not checking for error because reading may stop before
-	     we've got PATH_MAX worth of characters.  */
-	  libname[0] = '\0';
-	  linux_read_memory (l_name, libname, sizeof (libname) - 1);
-	  libname[sizeof (libname) - 1] = '\0';
-	  if (libname[0] != '\0')
-	    {
-	      if (!header_done)
-		{
-		  /* Terminate `<library-list-svr4'.  */
-		  document += '>';
-		  header_done = 1;
-		}
-
-	      string_appendf (document, "<library name=\"");
-	      xml_escape_text_append (&document, (char *) libname);
-	      string_appendf (document, "\" lm=\"0x%lx\" "
-			      "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
-			      (unsigned long) lm_addr, (unsigned long) l_addr,
-			      (unsigned long) l_ld);
-	    }
-	}
-
-      lm_prev = lm_addr;
-      lm_addr = l_next;
-    }
-
-  if (!header_done)
-    {
-      /* Empty list; terminate `<library-list-svr4'.  */
-      document += "/>";
-    }
-  else
-    document += "</library-list-svr4>";
-
-  int document_len = document.length ();
-  if (offset < document_len)
-    document_len -= offset;
-  else
-    document_len = 0;
-  if (len > document_len)
-    len = document_len;
-
-  memcpy (readbuf, document.data () + offset, len);
-
-  return len;
-}
-
-#ifdef HAVE_LINUX_BTRACE
-
-/* See to_disable_btrace target method.  */
-
-static int
-linux_low_disable_btrace (struct btrace_target_info *tinfo)
-{
-  enum btrace_error err;
-
-  err = linux_disable_btrace (tinfo);
-  return (err == BTRACE_ERR_NONE ? 0 : -1);
-}
-
-/* Encode an Intel Processor Trace configuration.  */
-
-static void
-linux_low_encode_pt_config (struct buffer *buffer,
-			    const struct btrace_data_pt_config *config)
-{
-  buffer_grow_str (buffer, "<pt-config>\n");
-
-  switch (config->cpu.vendor)
-    {
-    case CV_INTEL:
-      buffer_xml_printf (buffer, "<cpu vendor=\"GenuineIntel\" family=\"%u\" "
-			 "model=\"%u\" stepping=\"%u\"/>\n",
-			 config->cpu.family, config->cpu.model,
-			 config->cpu.stepping);
-      break;
-
-    default:
-      break;
-    }
-
-  buffer_grow_str (buffer, "</pt-config>\n");
-}
-
-/* Encode a raw buffer.  */
-
-static void
-linux_low_encode_raw (struct buffer *buffer, const gdb_byte *data,
-		      unsigned int size)
-{
-  if (size == 0)
-    return;
-
-  /* We use hex encoding - see gdbsupport/rsp-low.h.  */
-  buffer_grow_str (buffer, "<raw>\n");
-
-  while (size-- > 0)
-    {
-      char elem[2];
-
-      elem[0] = tohex ((*data >> 4) & 0xf);
-      elem[1] = tohex (*data++ & 0xf);
-
-      buffer_grow (buffer, elem, 2);
-    }
-
-  buffer_grow_str (buffer, "</raw>\n");
-}
-
-/* See to_read_btrace target method.  */
-
-static int
-linux_low_read_btrace (struct btrace_target_info *tinfo, struct buffer *buffer,
-		       enum btrace_read_type type)
-{
-  struct btrace_data btrace;
-  enum btrace_error err;
-
-  err = linux_read_btrace (&btrace, tinfo, type);
-  if (err != BTRACE_ERR_NONE)
-    {
-      if (err == BTRACE_ERR_OVERFLOW)
-	buffer_grow_str0 (buffer, "E.Overflow.");
-      else
-	buffer_grow_str0 (buffer, "E.Generic Error.");
-
-      return -1;
-    }
-
-  switch (btrace.format)
-    {
-    case BTRACE_FORMAT_NONE:
-      buffer_grow_str0 (buffer, "E.No Trace.");
-      return -1;
-
-    case BTRACE_FORMAT_BTS:
-      buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
-      buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
-
-      for (const btrace_block &block : *btrace.variant.bts.blocks)
-	buffer_xml_printf (buffer, "<block begin=\"0x%s\" end=\"0x%s\"/>\n",
-			   paddress (block.begin), paddress (block.end));
-
-      buffer_grow_str0 (buffer, "</btrace>\n");
-      break;
-
-    case BTRACE_FORMAT_PT:
-      buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
-      buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
-      buffer_grow_str (buffer, "<pt>\n");
-
-      linux_low_encode_pt_config (buffer, &btrace.variant.pt.config);
-
-      linux_low_encode_raw (buffer, btrace.variant.pt.data,
-			    btrace.variant.pt.size);
-
-      buffer_grow_str (buffer, "</pt>\n");
-      buffer_grow_str0 (buffer, "</btrace>\n");
-      break;
-
-    default:
-      buffer_grow_str0 (buffer, "E.Unsupported Trace Format.");
-      return -1;
-    }
-
-  return 0;
-}
-
-/* See to_btrace_conf target method.  */
-
-static int
-linux_low_btrace_conf (const struct btrace_target_info *tinfo,
-		       struct buffer *buffer)
-{
-  const struct btrace_config *conf;
-
-  buffer_grow_str (buffer, "<!DOCTYPE btrace-conf SYSTEM \"btrace-conf.dtd\">\n");
-  buffer_grow_str (buffer, "<btrace-conf version=\"1.0\">\n");
-
-  conf = linux_btrace_conf (tinfo);
-  if (conf != NULL)
-    {
-      switch (conf->format)
-	{
-	case BTRACE_FORMAT_NONE:
-	  break;
-
-	case BTRACE_FORMAT_BTS:
-	  buffer_xml_printf (buffer, "<bts");
-	  buffer_xml_printf (buffer, " size=\"0x%x\"", conf->bts.size);
-	  buffer_xml_printf (buffer, " />\n");
-	  break;
-
-	case BTRACE_FORMAT_PT:
-	  buffer_xml_printf (buffer, "<pt");
-	  buffer_xml_printf (buffer, " size=\"0x%x\"", conf->pt.size);
-	  buffer_xml_printf (buffer, "/>\n");
-	  break;
-	}
-    }
-
-  buffer_grow_str0 (buffer, "</btrace-conf>\n");
-  return 0;
-}
-#endif /* HAVE_LINUX_BTRACE */
-
-/* See nat/linux-nat.h.  */
-
-ptid_t
-current_lwp_ptid (void)
-{
-  return ptid_of (current_thread);
-}
-
-/* Implementation of the target_ops method "breakpoint_kind_from_pc".  */
-
-static int
-linux_breakpoint_kind_from_pc (CORE_ADDR *pcptr)
-{
-  if (the_low_target.breakpoint_kind_from_pc != NULL)
-    return (*the_low_target.breakpoint_kind_from_pc) (pcptr);
-  else
-    return default_breakpoint_kind_from_pc (pcptr);
-}
-
-/* Implementation of the target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-linux_sw_breakpoint_from_kind (int kind, int *size)
-{
-  gdb_assert (the_low_target.sw_breakpoint_from_kind != NULL);
-
-  return (*the_low_target.sw_breakpoint_from_kind) (kind, size);
-}
-
-/* Implementation of the target_ops method
-   "breakpoint_kind_from_current_state".  */
-
-static int
-linux_breakpoint_kind_from_current_state (CORE_ADDR *pcptr)
-{
-  if (the_low_target.breakpoint_kind_from_current_state != NULL)
-    return (*the_low_target.breakpoint_kind_from_current_state) (pcptr);
-  else
-    return linux_breakpoint_kind_from_pc (pcptr);
-}
-
-/* Default implementation of linux_target_ops method "set_pc" for
-   32-bit pc register which is literally named "pc".  */
-
-void
-linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc)
-{
-  uint32_t newpc = pc;
-
-  supply_register_by_name (regcache, "pc", &newpc);
-}
-
-/* Default implementation of linux_target_ops method "get_pc" for
-   32-bit pc register which is literally named "pc".  */
-
-CORE_ADDR
-linux_get_pc_32bit (struct regcache *regcache)
-{
-  uint32_t pc;
-
-  collect_register_by_name (regcache, "pc", &pc);
-  if (debug_threads)
-    debug_printf ("stop pc is 0x%" PRIx32 "\n", pc);
-  return pc;
-}
-
-/* Default implementation of linux_target_ops method "set_pc" for
-   64-bit pc register which is literally named "pc".  */
-
-void
-linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc)
-{
-  uint64_t newpc = pc;
-
-  supply_register_by_name (regcache, "pc", &newpc);
-}
-
-/* Default implementation of linux_target_ops method "get_pc" for
-   64-bit pc register which is literally named "pc".  */
-
-CORE_ADDR
-linux_get_pc_64bit (struct regcache *regcache)
-{
-  uint64_t pc;
-
-  collect_register_by_name (regcache, "pc", &pc);
-  if (debug_threads)
-    debug_printf ("stop pc is 0x%" PRIx64 "\n", pc);
-  return pc;
-}
-
-/* See linux-low.h.  */
-
-int
-linux_get_auxv (int wordsize, CORE_ADDR match, CORE_ADDR *valp)
-{
-  gdb_byte *data = (gdb_byte *) alloca (2 * wordsize);
-  int offset = 0;
-
-  gdb_assert (wordsize == 4 || wordsize == 8);
-
-  while ((*the_target->read_auxv) (offset, data, 2 * wordsize) == 2 * wordsize)
-    {
-      if (wordsize == 4)
-	{
-	  uint32_t *data_p = (uint32_t *) data;
-	  if (data_p[0] == match)
-	    {
-	      *valp = data_p[1];
-	      return 1;
-	    }
-	}
-      else
-	{
-	  uint64_t *data_p = (uint64_t *) data;
-	  if (data_p[0] == match)
-	    {
-	      *valp = data_p[1];
-	      return 1;
-	    }
-	}
-
-      offset += 2 * wordsize;
-    }
-
-  return 0;
-}
-
-/* See linux-low.h.  */
-
-CORE_ADDR
-linux_get_hwcap (int wordsize)
-{
-  CORE_ADDR hwcap = 0;
-  linux_get_auxv (wordsize, AT_HWCAP, &hwcap);
-  return hwcap;
-}
-
-/* See linux-low.h.  */
-
-CORE_ADDR
-linux_get_hwcap2 (int wordsize)
-{
-  CORE_ADDR hwcap2 = 0;
-  linux_get_auxv (wordsize, AT_HWCAP2, &hwcap2);
-  return hwcap2;
-}
-
-static struct target_ops linux_target_ops = {
-  linux_create_inferior,
-  linux_post_create_inferior,
-  linux_attach,
-  linux_kill,
-  linux_detach,
-  linux_mourn,
-  linux_join,
-  linux_thread_alive,
-  linux_resume,
-  linux_wait,
-  linux_fetch_registers,
-  linux_store_registers,
-  linux_prepare_to_access_memory,
-  linux_done_accessing_memory,
-  linux_read_memory,
-  linux_write_memory,
-  linux_look_up_symbols,
-  linux_request_interrupt,
-  linux_read_auxv,
-  linux_supports_z_point_type,
-  linux_insert_point,
-  linux_remove_point,
-  linux_stopped_by_sw_breakpoint,
-  linux_supports_stopped_by_sw_breakpoint,
-  linux_stopped_by_hw_breakpoint,
-  linux_supports_stopped_by_hw_breakpoint,
-  linux_supports_hardware_single_step,
-  linux_stopped_by_watchpoint,
-  linux_stopped_data_address,
-#if defined(__UCLIBC__) && defined(HAS_NOMMU)	      \
-    && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \
-    && defined(PT_TEXT_END_ADDR)
-  linux_read_offsets,
-#else
-  NULL,
-#endif
-#ifdef USE_THREAD_DB
-  thread_db_get_tls_address,
-#else
-  NULL,
-#endif
-  hostio_last_error_from_errno,
-  linux_qxfer_osdata,
-  linux_xfer_siginfo,
-  linux_supports_non_stop,
-  linux_async,
-  linux_start_non_stop,
-  linux_supports_multi_process,
-  linux_supports_fork_events,
-  linux_supports_vfork_events,
-  linux_supports_exec_events,
-  linux_handle_new_gdb_connection,
-#ifdef USE_THREAD_DB
-  thread_db_handle_monitor_command,
-#else
-  NULL,
-#endif
-  linux_common_core_of_thread,
-  linux_read_loadmap,
-  linux_process_qsupported,
-  linux_supports_tracepoints,
-  linux_read_pc,
-  linux_write_pc,
-  linux_thread_stopped,
-  NULL,
-  linux_pause_all,
-  linux_unpause_all,
-  linux_stabilize_threads,
-  linux_install_fast_tracepoint_jump_pad,
-  linux_emit_ops,
-  linux_supports_disable_randomization,
-  linux_get_min_fast_tracepoint_insn_len,
-  linux_qxfer_libraries_svr4,
-  linux_supports_agent,
-#ifdef HAVE_LINUX_BTRACE
-  linux_enable_btrace,
-  linux_low_disable_btrace,
-  linux_low_read_btrace,
-  linux_low_btrace_conf,
-#else
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-#endif
-  linux_supports_range_stepping,
-  linux_proc_pid_to_exec_file,
-  linux_mntns_open_cloexec,
-  linux_mntns_unlink,
-  linux_mntns_readlink,
-  linux_breakpoint_kind_from_pc,
-  linux_sw_breakpoint_from_kind,
-  linux_proc_tid_get_name,
-  linux_breakpoint_kind_from_current_state,
-  linux_supports_software_single_step,
-  linux_supports_catch_syscall,
-  linux_get_ipa_tdesc_idx,
-#if USE_THREAD_DB
-  thread_db_thread_handle,
-#else
-  NULL,
-#endif
-};
-
-#ifdef HAVE_LINUX_REGSETS
-void
-initialize_regsets_info (struct regsets_info *info)
-{
-  for (info->num_regsets = 0;
-       info->regsets[info->num_regsets].size >= 0;
-       info->num_regsets++)
-    ;
-}
-#endif
-
-void
-initialize_low (void)
-{
-  struct sigaction sigchld_action;
-
-  memset (&sigchld_action, 0, sizeof (sigchld_action));
-  set_target_ops (&linux_target_ops);
-
-  linux_ptrace_init_warnings ();
-  linux_proc_init_warnings ();
-
-  sigchld_action.sa_handler = sigchld_handler;
-  sigemptyset (&sigchld_action.sa_mask);
-  sigchld_action.sa_flags = SA_RESTART;
-  sigaction (SIGCHLD, &sigchld_action, NULL);
-
-  initialize_low_arch ();
-
-  linux_check_ptrace_features ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-low.h ./gdb/gdbserver/linux-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,456 +0,0 @@
-/* Internal interfaces for the GNU/Linux specific target code for gdbserver.
-   Copyright (C) 2002-2020 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 GDBSERVER_LINUX_LOW_H
-#define GDBSERVER_LINUX_LOW_H
-
-#include "nat/linux-nat.h"
-#include "nat/gdb_thread_db.h"
-#include <signal.h>
-
-#include "gdbthread.h"
-#include "gdb_proc_service.h"
-
-/* Included for ptrace type definitions.  */
-#include "nat/linux-ptrace.h"
-#include "target/waitstatus.h" /* For enum target_stop_reason.  */
-#include "tracepoint.h"
-
-#define PTRACE_XFER_TYPE long
-
-#ifdef HAVE_LINUX_REGSETS
-typedef void (*regset_fill_func) (struct regcache *, void *);
-typedef void (*regset_store_func) (struct regcache *, const void *);
-enum regset_type {
-  GENERAL_REGS,
-  FP_REGS,
-  EXTENDED_REGS,
-  OPTIONAL_REGS, /* Do not error if the regset cannot be accessed.  */
-};
-
-/* The arch's regsets array initializer must be terminated with a NULL
-   regset.  */
-#define NULL_REGSET \
-  { 0, 0, 0, -1, (enum regset_type) -1, NULL, NULL }
-
-struct regset_info
-{
-  int get_request, set_request;
-  /* If NT_TYPE isn't 0, it will be passed to ptrace as the 3rd
-     argument and the 4th argument should be "const struct iovec *".  */
-  int nt_type;
-  int size;
-  enum regset_type type;
-  regset_fill_func fill_function;
-  regset_store_func store_function;
-};
-
-/* Aggregation of all the supported regsets of a given
-   architecture/mode.  */
-
-struct regsets_info
-{
-  /* The regsets array.  */
-  struct regset_info *regsets;
-
-  /* The number of regsets in the REGSETS array.  */
-  int num_regsets;
-
-  /* If we get EIO on a regset, do not try it again.  Note the set of
-     supported regsets may depend on processor mode on biarch
-     machines.  This is a (lazily allocated) array holding one boolean
-     byte (0/1) per regset, with each element corresponding to the
-     regset in the REGSETS array above at the same offset.  */
-  char *disabled_regsets;
-};
-
-#endif
-
-/* Mapping between the general-purpose registers in `struct user'
-   format and GDB's register array layout.  */
-
-struct usrregs_info
-{
-  /* The number of registers accessible.  */
-  int num_regs;
-
-  /* The registers map.  */
-  int *regmap;
-};
-
-/* All info needed to access an architecture/mode's registers.  */
-
-struct regs_info
-{
-  /* Regset support bitmap: 1 for registers that are transferred as a part
-     of a regset, 0 for ones that need to be handled individually.  This
-     can be NULL if all registers are transferred with regsets or regsets
-     are not supported.  */
-  unsigned char *regset_bitmap;
-
-  /* Info used when accessing registers with PTRACE_PEEKUSER /
-     PTRACE_POKEUSER.  This can be NULL if all registers are
-     transferred with regsets  .*/
-  struct usrregs_info *usrregs;
-
-#ifdef HAVE_LINUX_REGSETS
-  /* Info used when accessing registers with regsets.  */
-  struct regsets_info *regsets_info;
-#endif
-};
-
-struct process_info_private
-{
-  /* Arch-specific additions.  */
-  struct arch_process_info *arch_private;
-
-  /* libthread_db-specific additions.  Not NULL if this process has loaded
-     thread_db, and it is active.  */
-  struct thread_db *thread_db;
-
-  /* &_r_debug.  0 if not yet determined.  -1 if no PT_DYNAMIC in Phdrs.  */
-  CORE_ADDR r_debug;
-};
-
-struct lwp_info;
-
-struct linux_target_ops
-{
-  /* Architecture-specific setup.  */
-  void (*arch_setup) (void);
-
-  const struct regs_info *(*regs_info) (void);
-  int (*cannot_fetch_register) (int);
-
-  /* Returns 0 if we can store the register, 1 if we can not
-     store the register, and 2 if failure to store the register
-     is acceptable.  */
-  int (*cannot_store_register) (int);
-
-  /* Hook to fetch a register in some non-standard way.  Used for
-     example by backends that have read-only registers with hardcoded
-     values (e.g., IA64's gr0/fr0/fr1).  Returns true if register
-     REGNO was supplied, false if not, and we should fallback to the
-     standard ptrace methods.  */
-  int (*fetch_register) (struct regcache *regcache, int regno);
-
-  CORE_ADDR (*get_pc) (struct regcache *regcache);
-  void (*set_pc) (struct regcache *regcache, CORE_ADDR newpc);
-
-  /* See target.h for details.  */
-  int (*breakpoint_kind_from_pc) (CORE_ADDR *pcptr);
-
-  /* See target.h for details.  */
-  const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size);
-
-  /* Find the next possible PCs after the current instruction executes.  */
-  std::vector<CORE_ADDR> (*get_next_pcs) (struct regcache *regcache);
-
-  int decr_pc_after_break;
-  int (*breakpoint_at) (CORE_ADDR pc);
-
-  /* Breakpoint and watchpoint related functions.  See target.h for
-     comments.  */
-  int (*supports_z_point_type) (char z_type);
-  int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr,
-		       int size, struct raw_breakpoint *bp);
-  int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr,
-		       int size, struct raw_breakpoint *bp);
-
-  int (*stopped_by_watchpoint) (void);
-  CORE_ADDR (*stopped_data_address) (void);
-
-  /* Hooks to reformat register data for PEEKUSR/POKEUSR (in particular
-     for registers smaller than an xfer unit).  */
-  void (*collect_ptrace_register) (struct regcache *regcache,
-				   int regno, char *buf);
-  void (*supply_ptrace_register) (struct regcache *regcache,
-				  int regno, const char *buf);
-
-  /* Hook to convert from target format to ptrace format and back.
-     Returns true if any conversion was done; false otherwise.
-     If DIRECTION is 1, then copy from INF to NATIVE.
-     If DIRECTION is 0, copy from NATIVE to INF.  */
-  int (*siginfo_fixup) (siginfo_t *native, gdb_byte *inf, int direction);
-
-  /* Hook to call when a new process is created or attached to.
-     If extra per-process architecture-specific data is needed,
-     allocate it here.  */
-  struct arch_process_info * (*new_process) (void);
-
-  /* Hook to call when a process is being deleted.  If extra per-process
-     architecture-specific data is needed, delete it here.  */
-  void (*delete_process) (struct arch_process_info *info);
-
-  /* Hook to call when a new thread is detected.
-     If extra per-thread architecture-specific data is needed,
-     allocate it here.  */
-  void (*new_thread) (struct lwp_info *);
-
-  /* Hook to call when a thread is being deleted.  If extra per-thread
-     architecture-specific data is needed, delete it here.  */
-  void (*delete_thread) (struct arch_lwp_info *);
-
-  /* Hook to call, if any, when a new fork is attached.  */
-  void (*new_fork) (struct process_info *parent, struct process_info *child);
-
-  /* Hook to call prior to resuming a thread.  */
-  void (*prepare_to_resume) (struct lwp_info *);
-
-  /* Hook to support target specific qSupported.  */
-  void (*process_qsupported) (char **, int count);
-
-  /* Returns true if the low target supports tracepoints.  */
-  int (*supports_tracepoints) (void);
-
-  /* Fill ADDRP with the thread area address of LWPID.  Returns 0 on
-     success, -1 on failure.  */
-  int (*get_thread_area) (int lwpid, CORE_ADDR *addrp);
-
-  /* Install a fast tracepoint jump pad.  See target.h for
-     comments.  */
-  int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-					   CORE_ADDR collector,
-					   CORE_ADDR lockaddr,
-					   ULONGEST orig_size,
-					   CORE_ADDR *jump_entry,
-					   CORE_ADDR *trampoline,
-					   ULONGEST *trampoline_size,
-					   unsigned char *jjump_pad_insn,
-					   ULONGEST *jjump_pad_insn_size,
-					   CORE_ADDR *adjusted_insn_addr,
-					   CORE_ADDR *adjusted_insn_addr_end,
-					   char *err);
-
-  /* Return the bytecode operations vector for the current inferior.
-     Returns NULL if bytecode compilation is not supported.  */
-  struct emit_ops *(*emit_ops) (void);
-
-  /* Return the minimum length of an instruction that can be safely overwritten
-     for use as a fast tracepoint.  */
-  int (*get_min_fast_tracepoint_insn_len) (void);
-
-  /* Returns true if the low target supports range stepping.  */
-  int (*supports_range_stepping) (void);
-
-  /* See target.h.  */
-  int (*breakpoint_kind_from_current_state) (CORE_ADDR *pcptr);
-
-  /* See target.h.  */
-  int (*supports_hardware_single_step) (void);
-
-  /* Fill *SYSNO with the syscall nr trapped.  Only to be called when
-     inferior is stopped due to SYSCALL_SIGTRAP.  */
-  void (*get_syscall_trapinfo) (struct regcache *regcache, int *sysno);
-
-  /* See target.h.  */
-  int (*get_ipa_tdesc_idx) (void);
-};
-
-extern struct linux_target_ops the_low_target;
-
-#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr)))
-#define get_lwp_thread(lwp) ((lwp)->thread)
-
-/* This struct is recorded in the target_data field of struct thread_info.
-
-   On linux ``all_threads'' is keyed by the LWP ID, which we use as the
-   GDB protocol representation of the thread ID.  Threads also have
-   a "process ID" (poorly named) which is (presently) the same as the
-   LWP ID.
-
-   There is also ``all_processes'' is keyed by the "overall process ID",
-   which GNU/Linux calls tgid, "thread group ID".  */
-
-struct lwp_info
-{
-  /* Backlink to the parent object.  */
-  struct thread_info *thread;
-
-  /* If this flag is set, the next SIGSTOP will be ignored (the
-     process will be immediately resumed).  This means that either we
-     sent the SIGSTOP to it ourselves and got some other pending event
-     (so the SIGSTOP is still pending), or that we stopped the
-     inferior implicitly via PTRACE_ATTACH and have not waited for it
-     yet.  */
-  int stop_expected;
-
-  /* When this is true, we shall not try to resume this thread, even
-     if last_resume_kind isn't resume_stop.  */
-  int suspended;
-
-  /* If this flag is set, the lwp is known to be stopped right now (stop
-     event already received in a wait()).  */
-  int stopped;
-
-  /* Signal whether we are in a SYSCALL_ENTRY or
-     in a SYSCALL_RETURN event.
-     Values:
-     - TARGET_WAITKIND_SYSCALL_ENTRY
-     - TARGET_WAITKIND_SYSCALL_RETURN */
-  enum target_waitkind syscall_state;
-
-  /* When stopped is set, the last wait status recorded for this lwp.  */
-  int last_status;
-
-  /* If WAITSTATUS->KIND != TARGET_WAITKIND_IGNORE, the waitstatus for
-     this LWP's last event, to pass to GDB without any further
-     processing.  This is used to store extended ptrace event
-     information or exit status until it can be reported to GDB.  */
-  struct target_waitstatus waitstatus;
-
-  /* A pointer to the fork child/parent relative.  Valid only while
-     the parent fork event is not reported to higher layers.  Used to
-     avoid wildcard vCont actions resuming a fork child before GDB is
-     notified about the parent's fork event.  */
-  struct lwp_info *fork_relative;
-
-  /* When stopped is set, this is where the lwp last stopped, with
-     decr_pc_after_break already accounted for.  If the LWP is
-     running, this is the address at which the lwp was resumed.  */
-  CORE_ADDR stop_pc;
-
-  /* If this flag is set, STATUS_PENDING is a waitstatus that has not yet
-     been reported.  */
-  int status_pending_p;
-  int status_pending;
-
-  /* The reason the LWP last stopped, if we need to track it
-     (breakpoint, watchpoint, etc.)  */
-  enum target_stop_reason stop_reason;
-
-  /* On architectures where it is possible to know the data address of
-     a triggered watchpoint, STOPPED_DATA_ADDRESS is non-zero, and
-     contains such data address.  Only valid if STOPPED_BY_WATCHPOINT
-     is true.  */
-  CORE_ADDR stopped_data_address;
-
-  /* If this is non-zero, it is a breakpoint to be reinserted at our next
-     stop (SIGTRAP stops only).  */
-  CORE_ADDR bp_reinsert;
-
-  /* If this flag is set, the last continue operation at the ptrace
-     level on this process was a single-step.  */
-  int stepping;
-
-  /* Range to single step within.  This is a copy of the step range
-     passed along the last resume request.  See 'struct
-     thread_resume'.  */
-  CORE_ADDR step_range_start;	/* Inclusive */
-  CORE_ADDR step_range_end;	/* Exclusive */
-
-  /* If this flag is set, we need to set the event request flags the
-     next time we see this LWP stop.  */
-  int must_set_ptrace_flags;
-
-  /* If this is non-zero, it points to a chain of signals which need to
-     be delivered to this process.  */
-  struct pending_signals *pending_signals;
-
-  /* A link used when resuming.  It is initialized from the resume request,
-     and then processed and cleared in linux_resume_one_lwp.  */
-  struct thread_resume *resume;
-
-  /* Information bout this lwp's fast tracepoint collection status (is it
-     currently stopped in the jump pad, and if so, before or at/after the
-     relocated instruction).  Normally, we won't care about this, but we will
-     if a signal arrives to this lwp while it is collecting.  */
-  fast_tpoint_collect_result collecting_fast_tracepoint;
-
-  /* If this is non-zero, it points to a chain of signals which need
-     to be reported to GDB.  These were deferred because the thread
-     was doing a fast tracepoint collect when they arrived.  */
-  struct pending_signals *pending_signals_to_report;
-
-  /* When collecting_fast_tracepoint is first found to be 1, we insert
-     a exit-jump-pad-quickly breakpoint.  This is it.  */
-  struct breakpoint *exit_jump_pad_bkpt;
-
-#ifdef USE_THREAD_DB
-  int thread_known;
-  /* The thread handle, used for e.g. TLS access.  Only valid if
-     THREAD_KNOWN is set.  */
-  td_thrhandle_t th;
-
-  /* The pthread_t handle.  */
-  thread_t thread_handle;
-#endif
-
-  /* Arch-specific additions.  */
-  struct arch_lwp_info *arch_private;
-};
-
-int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine);
-
-/* Attach to PTID.  Returns 0 on success, non-zero otherwise (an
-   errno).  */
-int linux_attach_lwp (ptid_t ptid);
-
-struct lwp_info *find_lwp_pid (ptid_t ptid);
-/* For linux_stop_lwp see nat/linux-nat.h.  */
-
-#ifdef HAVE_LINUX_REGSETS
-void initialize_regsets_info (struct regsets_info *regsets_info);
-#endif
-
-void initialize_low_arch (void);
-
-void linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc);
-CORE_ADDR linux_get_pc_32bit (struct regcache *regcache);
-
-void linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc);
-CORE_ADDR linux_get_pc_64bit (struct regcache *regcache);
-
-/* From thread-db.c  */
-int thread_db_init (void);
-void thread_db_detach (struct process_info *);
-void thread_db_mourn (struct process_info *);
-int thread_db_handle_monitor_command (char *);
-int thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset,
-			       CORE_ADDR load_module, CORE_ADDR *address);
-int thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp);
-
-/* Called from linux-low.c when a clone event is detected.  Upon entry,
-   both the clone and the parent should be stopped.  This function does
-   whatever is required have the clone under thread_db's control.  */
-
-void thread_db_notice_clone (struct thread_info *parent_thr, ptid_t child_ptid);
-
-bool thread_db_thread_handle (ptid_t ptid, gdb_byte **handle, int *handle_len);
-
-extern int have_ptrace_getregset;
-
-/* Search for the value with type MATCH in the auxv vector with
-   entries of length WORDSIZE bytes.  If found, store the value in
-   *VALP and return 1.  If not found or if there is an error, return
-   0.  */
-
-int linux_get_auxv (int wordsize, CORE_ADDR match,
-		    CORE_ADDR *valp);
-
-/* Fetch the AT_HWCAP entry from the auxv vector, where entries are length
-   WORDSIZE.  If no entry was found, return zero.  */
-
-CORE_ADDR linux_get_hwcap (int wordsize);
-
-/* Fetch the AT_HWCAP2 entry from the auxv vector, where entries are length
-   WORDSIZE.  If no entry was found, return zero.  */
-
-CORE_ADDR linux_get_hwcap2 (int wordsize);
-
-#endif /* GDBSERVER_LINUX_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-m32r-low.c ./gdb/gdbserver/linux-m32r-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-m32r-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-m32r-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,157 +0,0 @@
-/* GNU/Linux/m32r specific low level interface, for the remote server for GDB.
-   Copyright (C) 2005-2020 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 "server.h"
-#include "linux-low.h"
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-/* Defined in auto-generated file reg-m32r.c.  */
-void init_registers_m32r (void);
-extern const struct target_desc *tdesc_m32r;
-
-#define m32r_num_regs 25
-
-static int m32r_regmap[] = {
-#ifdef PT_R0
-  PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7,
-  PT_R8, PT_R9, PT_R10, PT_R11, PT_R12, PT_FP, PT_LR, PT_SPU,
-  PT_PSW, PT_CBR, PT_SPI, PT_SPU, PT_BPC, PT_PC, PT_ACCL, PT_ACCH, PT_EVB
-#else
-  4 * 4, 4 * 5, 4 * 6, 4 * 7, 4 * 0, 4 * 1, 4 * 2, 4 * 8,
-  4 * 9, 4 * 10, 4 * 11, 4 * 12, 4 * 13, 4 * 24, 4 * 25, 4 * 23,
-  4 * 19, 4 * 31, 4 * 26, 4 * 23, 4 * 20, 4 * 30, 4 * 16, 4 * 15, 4 * 32
-#endif
-};
-
-static int
-m32r_cannot_store_register (int regno)
-{
-  return (regno >= m32r_num_regs);
-}
-
-static int
-m32r_cannot_fetch_register (int regno)
-{
-  return (regno >= m32r_num_regs);
-}
-
-static const unsigned short m32r_breakpoint = 0x10f1;
-#define m32r_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-m32r_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = m32r_breakpoint_len;
-  return (const gdb_byte *) &m32r_breakpoint;
-}
-
-static int
-m32r_breakpoint_at (CORE_ADDR where)
-{
-  unsigned short insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn,
-			      m32r_breakpoint_len);
-  if (insn == m32r_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-static void
-m32r_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_m32r;
-}
-
-/* Support for hardware single step.  */
-
-static int
-m32r_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static struct usrregs_info m32r_usrregs_info =
-  {
-    m32r_num_regs,
-    m32r_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &m32r_usrregs_info,
-  };
-
-static const struct regs_info *
-m32r_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  m32r_arch_setup,
-  m32r_regs_info,
-  m32r_cannot_fetch_register,
-  m32r_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_from_pc */
-  m32r_sw_breakpoint_from_kind,
-  NULL,
-  0,
-  m32r_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  m32r_supports_hardware_single_step,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_m32r ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-m68k-low.c ./gdb/gdbserver/linux-m68k-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-m68k-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-m68k-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,255 +0,0 @@
-/* GNU/Linux/m68k specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-
-/* Defined in auto-generated file reg-m68k.c.  */
-void init_registers_m68k (void);
-extern const struct target_desc *tdesc_m68k;
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-#define m68k_num_regs 29
-#define m68k_num_gregs 18
-
-/* This table must line up with REGISTER_NAMES in tm-m68k.h */
-static int m68k_regmap[] =
-{
-#ifdef PT_D0
-  PT_D0 * 4, PT_D1 * 4, PT_D2 * 4, PT_D3 * 4,
-  PT_D4 * 4, PT_D5 * 4, PT_D6 * 4, PT_D7 * 4,
-  PT_A0 * 4, PT_A1 * 4, PT_A2 * 4, PT_A3 * 4,
-  PT_A4 * 4, PT_A5 * 4, PT_A6 * 4, PT_USP * 4,
-  PT_SR * 4, PT_PC * 4,
-#else
-  14 * 4, 0 * 4, 1 * 4, 2 * 4, 3 * 4, 4 * 4, 5 * 4, 6 * 4,
-  7 * 4, 8 * 4, 9 * 4, 10 * 4, 11 * 4, 12 * 4, 13 * 4, 15 * 4,
-  17 * 4, 18 * 4,
-#endif
-#ifdef PT_FP0
-  PT_FP0 * 4, PT_FP1 * 4, PT_FP2 * 4, PT_FP3 * 4,
-  PT_FP4 * 4, PT_FP5 * 4, PT_FP6 * 4, PT_FP7 * 4,
-  PT_FPCR * 4, PT_FPSR * 4, PT_FPIAR * 4
-#else
-  21 * 4, 24 * 4, 27 * 4, 30 * 4, 33 * 4, 36 * 4,
-  39 * 4, 42 * 4, 45 * 4, 46 * 4, 47 * 4
-#endif
-};
-
-static int
-m68k_cannot_store_register (int regno)
-{
-  return (regno >= m68k_num_regs);
-}
-
-static int
-m68k_cannot_fetch_register (int regno)
-{
-  return (regno >= m68k_num_regs);
-}
-
-#ifdef HAVE_PTRACE_GETREGS
-#include <sys/procfs.h>
-#include "nat/gdb_ptrace.h"
-
-static void
-m68k_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-  for (i = 0; i < m68k_num_gregs; i++)
-    collect_register (regcache, i, (char *) buf + m68k_regmap[i]);
-}
-
-static void
-m68k_store_gregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-
-  for (i = 0; i < m68k_num_gregs; i++)
-    supply_register (regcache, i, (const char *) buf + m68k_regmap[i]);
-}
-
-static void
-m68k_fill_fpregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-  for (i = m68k_num_gregs; i < m68k_num_regs; i++)
-    collect_register (regcache, i, ((char *) buf
-			 + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs])));
-}
-
-static void
-m68k_store_fpregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-
-  for (i = m68k_num_gregs; i < m68k_num_regs; i++)
-    supply_register (regcache, i, ((const char *) buf
-			 + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs])));
-}
-
-#endif /* HAVE_PTRACE_GETREGS */
-
-static struct regset_info m68k_regsets[] = {
-#ifdef HAVE_PTRACE_GETREGS
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t),
-    GENERAL_REGS,
-    m68k_fill_gregset, m68k_store_gregset },
-  { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (elf_fpregset_t),
-    FP_REGS,
-    m68k_fill_fpregset, m68k_store_fpregset },
-#endif /* HAVE_PTRACE_GETREGS */
-  NULL_REGSET
-};
-
-static const gdb_byte m68k_breakpoint[] = { 0x4E, 0x4F };
-#define m68k_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-m68k_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = m68k_breakpoint_len;
-  return m68k_breakpoint;
-}
-
-static int
-m68k_breakpoint_at (CORE_ADDR pc)
-{
-  unsigned char c[2];
-
-  read_inferior_memory (pc, c, 2);
-  if (c[0] == 0x4E && c[1] == 0x4F)
-    return 1;
-
-  return 0;
-}
-
-#include <asm/ptrace.h>
-
-#ifdef PTRACE_GET_THREAD_AREA
-/* Fetch the thread-local storage pointer for libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-		    lwpid_t lwpid, int idx, void **base)
-{
-  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;
-}
-#endif /* PTRACE_GET_THREAD_AREA */
-
-static struct regsets_info m68k_regsets_info =
-  {
-    m68k_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info m68k_usrregs_info =
-  {
-    m68k_num_regs,
-    m68k_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &m68k_usrregs_info,
-    &m68k_regsets_info
-  };
-
-static const struct regs_info *
-m68k_regs_info (void)
-{
-  return &regs_info;
-}
-
-static void
-m68k_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_m68k;
-}
-
-/* Support for hardware single step.  */
-
-static int
-m68k_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-struct linux_target_ops the_low_target = {
-  m68k_arch_setup,
-  m68k_regs_info,
-  m68k_cannot_fetch_register,
-  m68k_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  m68k_sw_breakpoint_from_kind,
-  NULL,
-  2,
-  m68k_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  m68k_supports_hardware_single_step,
-};
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-  init_registers_m68k ();
-
-  initialize_regsets_info (&m68k_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-mips-low.c ./gdb/gdbserver/linux-mips-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-mips-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-mips-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,978 +0,0 @@
-/* GNU/Linux/MIPS specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-
-#include "nat/gdb_ptrace.h"
-#include <endian.h>
-
-#include "nat/mips-linux-watch.h"
-#include "gdb_proc_service.h"
-
-/* Defined in auto-generated file mips-linux.c.  */
-void init_registers_mips_linux (void);
-extern const struct target_desc *tdesc_mips_linux;
-
-/* Defined in auto-generated file mips-dsp-linux.c.  */
-void init_registers_mips_dsp_linux (void);
-extern const struct target_desc *tdesc_mips_dsp_linux;
-
-/* Defined in auto-generated file mips64-linux.c.  */
-void init_registers_mips64_linux (void);
-extern const struct target_desc *tdesc_mips64_linux;
-
-/* Defined in auto-generated file mips64-dsp-linux.c.  */
-void init_registers_mips64_dsp_linux (void);
-extern const struct target_desc *tdesc_mips64_dsp_linux;
-
-#ifdef __mips64
-#define tdesc_mips_linux tdesc_mips64_linux
-#define tdesc_mips_dsp_linux tdesc_mips64_dsp_linux
-#endif
-
-#ifndef PTRACE_GET_THREAD_AREA
-#define PTRACE_GET_THREAD_AREA 25
-#endif
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-#define mips_num_regs 73
-#define mips_dsp_num_regs 80
-
-#include <asm/ptrace.h>
-
-#ifndef DSP_BASE
-#define DSP_BASE 71
-#define DSP_CONTROL 77
-#endif
-
-union mips_register
-{
-  unsigned char buf[8];
-
-  /* Deliberately signed, for proper sign extension.  */
-  int reg32;
-  long long reg64;
-};
-
-/* Return the ptrace ``address'' of register REGNO. */
-
-#define mips_base_regs							\
-  -1,  1,  2,  3,  4,  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,					\
-									\
-  -1, MMLO, MMHI, BADVADDR, CAUSE, PC,					\
-									\
-  FPR_BASE,      FPR_BASE + 1,  FPR_BASE + 2,  FPR_BASE + 3,		\
-  FPR_BASE + 4,  FPR_BASE + 5,  FPR_BASE + 6,  FPR_BASE + 7,		\
-  FPR_BASE + 8,  FPR_BASE + 9,  FPR_BASE + 10, FPR_BASE + 11,		\
-  FPR_BASE + 12, FPR_BASE + 13, FPR_BASE + 14, FPR_BASE + 15,		\
-  FPR_BASE + 16, FPR_BASE + 17, FPR_BASE + 18, FPR_BASE + 19,		\
-  FPR_BASE + 20, FPR_BASE + 21, FPR_BASE + 22, FPR_BASE + 23,		\
-  FPR_BASE + 24, FPR_BASE + 25, FPR_BASE + 26, FPR_BASE + 27,		\
-  FPR_BASE + 28, FPR_BASE + 29, FPR_BASE + 30, FPR_BASE + 31,		\
-  FPC_CSR, FPC_EIR
-
-#define mips_dsp_regs							\
-  DSP_BASE,      DSP_BASE + 1,  DSP_BASE + 2,  DSP_BASE + 3,		\
-  DSP_BASE + 4,  DSP_BASE + 5,						\
-  DSP_CONTROL
-
-static int mips_regmap[mips_num_regs] = {
-  mips_base_regs,
-  0
-};
-
-static int mips_dsp_regmap[mips_dsp_num_regs] = {
-  mips_base_regs,
-  mips_dsp_regs,
-  0
-};
-
-/* DSP registers are not in any regset and can only be accessed
-   individually.  */
-
-static unsigned char mips_dsp_regset_bitmap[(mips_dsp_num_regs + 7) / 8] = {
-  0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x80
-};
-
-static int have_dsp = -1;
-
-/* Try peeking at an arbitrarily chosen DSP register and pick the available
-   user register set accordingly.  */
-
-static const struct target_desc *
-mips_read_description (void)
-{
-  if (have_dsp < 0)
-    {
-      int pid = lwpid_of (current_thread);
-
-      errno = 0;
-      ptrace (PTRACE_PEEKUSER, pid, DSP_CONTROL, 0);
-      switch (errno)
-	{
-	case 0:
-	  have_dsp = 1;
-	  break;
-	case EIO:
-	  have_dsp = 0;
-	  break;
-	default:
-	  perror_with_name ("ptrace");
-	  break;
-	}
-    }
-
-  return have_dsp ? tdesc_mips_dsp_linux : tdesc_mips_linux;
-}
-
-static void
-mips_arch_setup (void)
-{
-  current_process ()->tdesc = mips_read_description ();
-}
-
-static struct usrregs_info *
-get_usrregs_info (void)
-{
-  const struct regs_info *regs_info = the_low_target.regs_info ();
-
-  return regs_info->usrregs;
-}
-
-/* Per-process arch-specific data we want to keep.  */
-
-struct arch_process_info
-{
-  /* -1 if the kernel and/or CPU do not support watch registers.
-      1 if watch_readback is valid and we can read style, num_valid
-	and the masks.
-      0 if we need to read the watch_readback.  */
-
-  int watch_readback_valid;
-
-  /* Cached watch register read values.  */
-
-  struct pt_watch_regs watch_readback;
-
-  /* Current watchpoint requests for this process.  */
-
-  struct mips_watchpoint *current_watches;
-
-  /* The current set of watch register values for writing the
-     registers.  */
-
-  struct pt_watch_regs watch_mirror;
-};
-
-/* Per-thread arch-specific data we want to keep.  */
-
-struct arch_lwp_info
-{
-  /* Non-zero if our copy differs from what's recorded in the thread.  */
-  int watch_registers_changed;
-};
-
-/* From mips-linux-nat.c.  */
-
-/* Pseudo registers can not be read.  ptrace does not provide a way to
-   read (or set) PS_REGNUM, and there's no point in reading or setting
-   ZERO_REGNUM, it's always 0.  We also can not set BADVADDR, CAUSE,
-   or FCRIR via ptrace().  */
-
-static int
-mips_cannot_fetch_register (int regno)
-{
-  const struct target_desc *tdesc;
-
-  if (get_usrregs_info ()->regmap[regno] == -1)
-    return 1;
-
-  tdesc = current_process ()->tdesc;
-
-  /* On n32 we can't access 64-bit registers via PTRACE_PEEKUSR.  */
-  if (register_size (tdesc, regno) > sizeof (PTRACE_XFER_TYPE))
-    return 1;
-
-  if (find_regno (tdesc, "r0") == regno)
-    return 1;
-
-  return 0;
-}
-
-static int
-mips_cannot_store_register (int regno)
-{
-  const struct target_desc *tdesc;
-
-  if (get_usrregs_info ()->regmap[regno] == -1)
-    return 1;
-
-  tdesc = current_process ()->tdesc;
-
-  /* On n32 we can't access 64-bit registers via PTRACE_POKEUSR.  */
-  if (register_size (tdesc, regno) > sizeof (PTRACE_XFER_TYPE))
-    return 1;
-
-  if (find_regno (tdesc, "r0") == regno)
-    return 1;
-
-  if (find_regno (tdesc, "cause") == regno)
-    return 1;
-
-  if (find_regno (tdesc, "badvaddr") == regno)
-    return 1;
-
-  if (find_regno (tdesc, "fir") == regno)
-    return 1;
-
-  return 0;
-}
-
-static int
-mips_fetch_register (struct regcache *regcache, int regno)
-{
-  const struct target_desc *tdesc = current_process ()->tdesc;
-
-  if (find_regno (tdesc, "r0") == regno)
-    {
-      supply_register_zeroed (regcache, regno);
-      return 1;
-    }
-
-  return 0;
-}
-
-static CORE_ADDR
-mips_get_pc (struct regcache *regcache)
-{
-  union mips_register pc;
-  collect_register_by_name (regcache, "pc", pc.buf);
-  return register_size (regcache->tdesc, 0) == 4 ? pc.reg32 : pc.reg64;
-}
-
-static void
-mips_set_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  union mips_register newpc;
-  if (register_size (regcache->tdesc, 0) == 4)
-    newpc.reg32 = pc;
-  else
-    newpc.reg64 = pc;
-
-  supply_register_by_name (regcache, "pc", newpc.buf);
-}
-
-/* Correct in either endianness.  */
-static const unsigned int mips_breakpoint = 0x0005000d;
-#define mips_breakpoint_len 4
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-mips_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = mips_breakpoint_len;
-  return (const gdb_byte *) &mips_breakpoint;
-}
-
-static int
-mips_breakpoint_at (CORE_ADDR where)
-{
-  unsigned int insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
-  if (insn == mips_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-/* Mark the watch registers of lwp, represented by ENTRY, as changed.  */
-
-static void
-update_watch_registers_callback (thread_info *thread)
-{
-  struct lwp_info *lwp = get_thread_lwp (thread);
-
-  /* The actual update is done later just before resuming the lwp,
-     we just mark that the registers need updating.  */
-  lwp->arch_private->watch_registers_changed = 1;
-
-  /* If the lwp isn't stopped, force it to momentarily pause, so
-     we can update its watch registers.  */
-  if (!lwp->stopped)
-    linux_stop_lwp (lwp);
-}
-
-/* This is the implementation of linux_target_ops method
-   new_process.  */
-
-static struct arch_process_info *
-mips_linux_new_process (void)
-{
-  struct arch_process_info *info = XCNEW (struct arch_process_info);
-
-  return info;
-}
-
-/* This is the implementation of linux_target_ops method
-   delete_process.  */
-
-static void
-mips_linux_delete_process (struct arch_process_info *info)
-{
-  xfree (info);
-}
-
-/* This is the implementation of linux_target_ops method new_thread.
-   Mark the watch registers as changed, so the threads' copies will
-   be updated.  */
-
-static void
-mips_linux_new_thread (struct lwp_info *lwp)
-{
-  struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
-
-  info->watch_registers_changed = 1;
-
-  lwp->arch_private = info;
-}
-
-/* Function to call when a thread is being deleted.  */
-
-static void
-mips_linux_delete_thread (struct arch_lwp_info *arch_lwp)
-{
-  xfree (arch_lwp);
-}
-
-/* Create a new mips_watchpoint and add it to the list.  */
-
-static void
-mips_add_watchpoint (struct arch_process_info *priv, CORE_ADDR addr, int len,
-		     enum target_hw_bp_type watch_type)
-{
-  struct mips_watchpoint *new_watch;
-  struct mips_watchpoint **pw;
-
-  new_watch = XNEW (struct mips_watchpoint);
-  new_watch->addr = addr;
-  new_watch->len = len;
-  new_watch->type = watch_type;
-  new_watch->next = NULL;
-
-  pw = &priv->current_watches;
-  while (*pw != NULL)
-    pw = &(*pw)->next;
-  *pw = new_watch;
-}
-
-/* Hook to call when a new fork is attached.  */
-
-static void
-mips_linux_new_fork (struct process_info *parent,
-			struct process_info *child)
-{
-  struct arch_process_info *parent_private;
-  struct arch_process_info *child_private;
-  struct mips_watchpoint *wp;
-
-  /* These are allocated by linux_add_process.  */
-  gdb_assert (parent->priv != NULL
-	      && parent->priv->arch_private != NULL);
-  gdb_assert (child->priv != NULL
-	      && child->priv->arch_private != NULL);
-
-  /* Linux kernel before 2.6.33 commit
-     72f674d203cd230426437cdcf7dd6f681dad8b0d
-     will inherit hardware debug registers from parent
-     on fork/vfork/clone.  Newer Linux kernels create such tasks with
-     zeroed debug registers.
-
-     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.  The debug registers mirror will become zeroed
-     in the end before detaching the forked off process, thus making
-     this compatible with older Linux kernels too.  */
-
-  parent_private = parent->priv->arch_private;
-  child_private = child->priv->arch_private;
-
-  child_private->watch_readback_valid = parent_private->watch_readback_valid;
-  child_private->watch_readback = parent_private->watch_readback;
-
-  for (wp = parent_private->current_watches; wp != NULL; wp = wp->next)
-    mips_add_watchpoint (child_private, wp->addr, wp->len, wp->type);
-
-  child_private->watch_mirror = parent_private->watch_mirror;
-}
-/* This is the implementation of linux_target_ops method
-   prepare_to_resume.  If the watch regs have changed, update the
-   thread's copies.  */
-
-static void
-mips_linux_prepare_to_resume (struct lwp_info *lwp)
-{
-  ptid_t ptid = ptid_of (get_lwp_thread (lwp));
-  struct process_info *proc = find_process_pid (ptid.pid ());
-  struct arch_process_info *priv = proc->priv->arch_private;
-
-  if (lwp->arch_private->watch_registers_changed)
-    {
-      /* Only update the watch registers if we have set or unset a
-	 watchpoint already.  */
-      if (mips_linux_watch_get_num_valid (&priv->watch_mirror) > 0)
-	{
-	  /* Write the mirrored watch register values.  */
-	  int tid = ptid.lwp ();
-
-	  if (-1 == ptrace (PTRACE_SET_WATCH_REGS, tid,
-			    &priv->watch_mirror, NULL))
-	    perror_with_name ("Couldn't write watch register");
-	}
-
-      lwp->arch_private->watch_registers_changed = 0;
-    }
-}
-
-static int
-mips_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_READ_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-/* This is the implementation of linux_target_ops method
-   insert_point.  */
-
-static int
-mips_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		   int len, struct raw_breakpoint *bp)
-{
-  struct process_info *proc = current_process ();
-  struct arch_process_info *priv = proc->priv->arch_private;
-  struct pt_watch_regs regs;
-  long lwpid;
-  enum target_hw_bp_type watch_type;
-  uint32_t irw;
-
-  lwpid = lwpid_of (current_thread);
-  if (!mips_linux_read_watch_registers (lwpid,
-					&priv->watch_readback,
-					&priv->watch_readback_valid,
-					0))
-    return -1;
-
-  if (len <= 0)
-    return -1;
-
-  regs = priv->watch_readback;
-  /* Add the current watches.  */
-  mips_linux_watch_populate_regs (priv->current_watches, &regs);
-
-  /* Now try to add the new watch.  */
-  watch_type = raw_bkpt_type_to_target_hw_bp_type (type);
-  irw = mips_linux_watch_type_to_irw (watch_type);
-  if (!mips_linux_watch_try_one_watch (&regs, addr, len, irw))
-    return -1;
-
-  /* It fit.  Stick it on the end of the list.  */
-  mips_add_watchpoint (priv, addr, len, watch_type);
-
-  priv->watch_mirror = regs;
-
-  /* Only update the threads of this process.  */
-  for_each_thread (proc->pid, update_watch_registers_callback);
-
-  return 0;
-}
-
-/* This is the implementation of linux_target_ops method
-   remove_point.  */
-
-static int
-mips_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		   int len, struct raw_breakpoint *bp)
-{
-  struct process_info *proc = current_process ();
-  struct arch_process_info *priv = proc->priv->arch_private;
-
-  int deleted_one;
-  enum target_hw_bp_type watch_type;
-
-  struct mips_watchpoint **pw;
-  struct mips_watchpoint *w;
-
-  /* Search for a known watch that matches.  Then unlink and free it.  */
-  watch_type = raw_bkpt_type_to_target_hw_bp_type (type);
-  deleted_one = 0;
-  pw = &priv->current_watches;
-  while ((w = *pw))
-    {
-      if (w->addr == addr && w->len == len && w->type == watch_type)
-	{
-	  *pw = w->next;
-	  free (w);
-	  deleted_one = 1;
-	  break;
-	}
-      pw = &(w->next);
-    }
-
-  if (!deleted_one)
-    return -1;  /* We don't know about it, fail doing nothing.  */
-
-  /* At this point watch_readback is known to be valid because we
-     could not have added the watch without reading it.  */
-  gdb_assert (priv->watch_readback_valid == 1);
-
-  priv->watch_mirror = priv->watch_readback;
-  mips_linux_watch_populate_regs (priv->current_watches,
-				  &priv->watch_mirror);
-
-  /* Only update the threads of this process.  */
-  for_each_thread (proc->pid, update_watch_registers_callback);
-
-  return 0;
-}
-
-/* This is the implementation of linux_target_ops method
-   stopped_by_watchpoint.  The watchhi R and W bits indicate
-   the watch register triggered. */
-
-static int
-mips_stopped_by_watchpoint (void)
-{
-  struct process_info *proc = current_process ();
-  struct arch_process_info *priv = proc->priv->arch_private;
-  int n;
-  int num_valid;
-  long lwpid = lwpid_of (current_thread);
-
-  if (!mips_linux_read_watch_registers (lwpid,
-					&priv->watch_readback,
-					&priv->watch_readback_valid,
-					1))
-    return 0;
-
-  num_valid = mips_linux_watch_get_num_valid (&priv->watch_readback);
-
-  for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++)
-    if (mips_linux_watch_get_watchhi (&priv->watch_readback, n)
-	& (R_MASK | W_MASK))
-      return 1;
-
-  return 0;
-}
-
-/* This is the implementation of linux_target_ops method
-   stopped_data_address.  */
-
-static CORE_ADDR
-mips_stopped_data_address (void)
-{
-  struct process_info *proc = current_process ();
-  struct arch_process_info *priv = proc->priv->arch_private;
-  int n;
-  int num_valid;
-  long lwpid = lwpid_of (current_thread);
-
-  /* On MIPS we don't know the low order 3 bits of the data address.
-     GDB does not support remote targets that can't report the
-     watchpoint address.  So, make our best guess; return the starting
-     address of a watchpoint request which overlaps the one that
-     triggered.  */
-
-  if (!mips_linux_read_watch_registers (lwpid,
-					&priv->watch_readback,
-					&priv->watch_readback_valid,
-					0))
-    return 0;
-
-  num_valid = mips_linux_watch_get_num_valid (&priv->watch_readback);
-
-  for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++)
-    if (mips_linux_watch_get_watchhi (&priv->watch_readback, n)
-	& (R_MASK | W_MASK))
-      {
-	CORE_ADDR t_low, t_hi;
-	int t_irw;
-	struct mips_watchpoint *watch;
-
-	t_low = mips_linux_watch_get_watchlo (&priv->watch_readback, n);
-	t_irw = t_low & IRW_MASK;
-	t_hi = (mips_linux_watch_get_watchhi (&priv->watch_readback, n)
-		| IRW_MASK);
-	t_low &= ~(CORE_ADDR)t_hi;
-
-	for (watch = priv->current_watches;
-	     watch != NULL;
-	     watch = watch->next)
-	  {
-	    CORE_ADDR addr = watch->addr;
-	    CORE_ADDR last_byte = addr + watch->len - 1;
-
-	    if ((t_irw & mips_linux_watch_type_to_irw (watch->type)) == 0)
-	      {
-		/* Different type.  */
-		continue;
-	      }
-	    /* Check for overlap of even a single byte.  */
-	    if (last_byte >= t_low && addr <= t_low + t_hi)
-	      return addr;
-	  }
-      }
-
-  /* Shouldn't happen.  */
-  return 0;
-}
-
-/* Fetch the thread-local storage pointer for libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-		    lwpid_t lwpid, int idx, void **base)
-{
-  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;
-}
-
-static void
-mips_collect_register (struct regcache *regcache,
-		       int use_64bit, int regno, union mips_register *reg)
-{
-  union mips_register tmp_reg;
-
-  if (use_64bit)
-    {
-      collect_register (regcache, regno, &tmp_reg.reg64);
-      *reg = tmp_reg;
-    }
-  else
-    {
-      collect_register (regcache, regno, &tmp_reg.reg32);
-      reg->reg64 = tmp_reg.reg32;
-    }
-}
-
-static void
-mips_supply_register (struct regcache *regcache,
-		      int use_64bit, int regno, const union mips_register *reg)
-{
-  int offset = 0;
-
-  /* For big-endian 32-bit targets, ignore the high four bytes of each
-     eight-byte slot.  */
-  if (__BYTE_ORDER == __BIG_ENDIAN && !use_64bit)
-    offset = 4;
-
-  supply_register (regcache, regno, reg->buf + offset);
-}
-
-#ifdef HAVE_PTRACE_GETREGS
-
-static void
-mips_collect_register_32bit (struct regcache *regcache,
-			     int use_64bit, int regno, unsigned char *buf)
-{
-  union mips_register tmp_reg;
-  int reg32;
-
-  mips_collect_register (regcache, use_64bit, regno, &tmp_reg);
-  reg32 = tmp_reg.reg64;
-  memcpy (buf, &reg32, 4);
-}
-
-static void
-mips_supply_register_32bit (struct regcache *regcache,
-			    int use_64bit, int regno, const unsigned char *buf)
-{
-  union mips_register tmp_reg;
-  int reg32;
-
-  memcpy (&reg32, buf, 4);
-  tmp_reg.reg64 = reg32;
-  mips_supply_register (regcache, use_64bit, regno, &tmp_reg);
-}
-
-static void
-mips_fill_gregset (struct regcache *regcache, void *buf)
-{
-  union mips_register *regset = (union mips_register *) buf;
-  int i, use_64bit;
-  const struct target_desc *tdesc = regcache->tdesc;
-
-  use_64bit = (register_size (tdesc, 0) == 8);
-
-  for (i = 1; i < 32; i++)
-    mips_collect_register (regcache, use_64bit, i, regset + i);
-
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "lo"), regset + 32);
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "hi"), regset + 33);
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "pc"), regset + 34);
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "badvaddr"), regset + 35);
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "status"), regset + 36);
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "cause"), regset + 37);
-
-  mips_collect_register (regcache, use_64bit,
-			 find_regno (tdesc, "restart"), regset + 0);
-}
-
-static void
-mips_store_gregset (struct regcache *regcache, const void *buf)
-{
-  const union mips_register *regset = (const union mips_register *) buf;
-  int i, use_64bit;
-
-  use_64bit = (register_size (regcache->tdesc, 0) == 8);
-
-  supply_register_by_name_zeroed (regcache, "r0");
-
-  for (i = 1; i < 32; i++)
-    mips_supply_register (regcache, use_64bit, i, regset + i);
-
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "lo"), regset + 32);
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "hi"), regset + 33);
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "pc"), regset + 34);
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "badvaddr"), regset + 35);
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "status"), regset + 36);
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "cause"), regset + 37);
-
-  mips_supply_register (regcache, use_64bit,
-			find_regno (regcache->tdesc, "restart"), regset + 0);
-}
-
-static void
-mips_fill_fpregset (struct regcache *regcache, void *buf)
-{
-  union mips_register *regset = (union mips_register *) buf;
-  int i, use_64bit, first_fp, big_endian;
-
-  use_64bit = (register_size (regcache->tdesc, 0) == 8);
-  first_fp = find_regno (regcache->tdesc, "f0");
-  big_endian = (__BYTE_ORDER == __BIG_ENDIAN);
-
-  /* See GDB for a discussion of this peculiar layout.  */
-  for (i = 0; i < 32; i++)
-    if (use_64bit)
-      collect_register (regcache, first_fp + i, regset[i].buf);
-    else
-      collect_register (regcache, first_fp + i,
-			regset[i & ~1].buf + 4 * (big_endian != (i & 1)));
-
-  mips_collect_register_32bit (regcache, use_64bit,
-			       find_regno (regcache->tdesc, "fcsr"), regset[32].buf);
-  mips_collect_register_32bit (regcache, use_64bit,
-			       find_regno (regcache->tdesc, "fir"),
-			       regset[32].buf + 4);
-}
-
-static void
-mips_store_fpregset (struct regcache *regcache, const void *buf)
-{
-  const union mips_register *regset = (const union mips_register *) buf;
-  int i, use_64bit, first_fp, big_endian;
-
-  use_64bit = (register_size (regcache->tdesc, 0) == 8);
-  first_fp = find_regno (regcache->tdesc, "f0");
-  big_endian = (__BYTE_ORDER == __BIG_ENDIAN);
-
-  /* See GDB for a discussion of this peculiar layout.  */
-  for (i = 0; i < 32; i++)
-    if (use_64bit)
-      supply_register (regcache, first_fp + i, regset[i].buf);
-    else
-      supply_register (regcache, first_fp + i,
-		       regset[i & ~1].buf + 4 * (big_endian != (i & 1)));
-
-  mips_supply_register_32bit (regcache, use_64bit,
-			      find_regno (regcache->tdesc, "fcsr"),
-			      regset[32].buf);
-  mips_supply_register_32bit (regcache, use_64bit,
-			      find_regno (regcache->tdesc, "fir"),
-			      regset[32].buf + 4);
-}
-#endif /* HAVE_PTRACE_GETREGS */
-
-/* Take care of 32-bit registers with 64-bit ptrace, POKEUSER side.  */
-
-static void
-mips_collect_ptrace_register (struct regcache *regcache,
-			      int regno, char *buf)
-{
-  int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8;
-
-  if (use_64bit && register_size (regcache->tdesc, regno) == 4)
-    {
-      union mips_register reg;
-
-      mips_collect_register (regcache, 0, regno, &reg);
-      memcpy (buf, &reg, sizeof (reg));
-    }
-  else
-    collect_register (regcache, regno, buf);
-}
-
-/* Take care of 32-bit registers with 64-bit ptrace, PEEKUSER side.  */
-
-static void
-mips_supply_ptrace_register (struct regcache *regcache,
-			     int regno, const char *buf)
-{
-  int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8;
-
-  if (use_64bit && register_size (regcache->tdesc, regno) == 4)
-    {
-      union mips_register reg;
-
-      memcpy (&reg, buf, sizeof (reg));
-      mips_supply_register (regcache, 0, regno, &reg);
-    }
-  else
-    supply_register (regcache, regno, buf);
-}
-
-static struct regset_info mips_regsets[] = {
-#ifdef HAVE_PTRACE_GETREGS
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, 38 * 8, GENERAL_REGS,
-    mips_fill_gregset, mips_store_gregset },
-  { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, 33 * 8, FP_REGS,
-    mips_fill_fpregset, mips_store_fpregset },
-#endif /* HAVE_PTRACE_GETREGS */
-  NULL_REGSET
-};
-
-static struct regsets_info mips_regsets_info =
-  {
-    mips_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info mips_dsp_usrregs_info =
-  {
-    mips_dsp_num_regs,
-    mips_dsp_regmap,
-  };
-
-static struct usrregs_info mips_usrregs_info =
-  {
-    mips_num_regs,
-    mips_regmap,
-  };
-
-static struct regs_info dsp_regs_info =
-  {
-    mips_dsp_regset_bitmap,
-    &mips_dsp_usrregs_info,
-    &mips_regsets_info
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &mips_usrregs_info,
-    &mips_regsets_info
-  };
-
-static const struct regs_info *
-mips_regs_info (void)
-{
-  if (have_dsp)
-    return &dsp_regs_info;
-  else
-    return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  mips_arch_setup,
-  mips_regs_info,
-  mips_cannot_fetch_register,
-  mips_cannot_store_register,
-  mips_fetch_register,
-  mips_get_pc,
-  mips_set_pc,
-  NULL, /* breakpoint_kind_from_pc */
-  mips_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  0,
-  mips_breakpoint_at,
-  mips_supports_z_point_type,
-  mips_insert_point,
-  mips_remove_point,
-  mips_stopped_by_watchpoint,
-  mips_stopped_data_address,
-  mips_collect_ptrace_register,
-  mips_supply_ptrace_register,
-  NULL, /* siginfo_fixup */
-  mips_linux_new_process,
-  mips_linux_delete_process,
-  mips_linux_new_thread,
-  mips_linux_delete_thread,
-  mips_linux_new_fork,
-  mips_linux_prepare_to_resume
-};
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-  init_registers_mips_linux ();
-  init_registers_mips_dsp_linux ();
-  init_registers_mips64_linux ();
-  init_registers_mips64_dsp_linux ();
-
-  initialize_regsets_info (&mips_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-nios2-low.c ./gdb/gdbserver/linux-nios2-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-nios2-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-nios2-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,259 +0,0 @@
-/* GNU/Linux/Nios II specific low level interface, for the remote server for
-   GDB.
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
-
-   Contributed by Mentor Graphics, 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 "server.h"
-#include "linux-low.h"
-#include "elf/common.h"
-#include "nat/gdb_ptrace.h"
-#include <endian.h>
-#include "gdb_proc_service.h"
-#include <asm/ptrace.h>
-
-#ifndef PTRACE_GET_THREAD_AREA
-#define PTRACE_GET_THREAD_AREA 25
-#endif
-
-/* The following definition must agree with the number of registers
-   defined in "struct user_regs" in GLIBC
-   (sysdeps/unix/sysv/linux/nios2/sys/user.h), and also with
-   NIOS2_NUM_REGS in GDB proper.  */
-
-#define nios2_num_regs 49
-
-/* Defined in auto-generated file nios2-linux.c.  */
-
-void init_registers_nios2_linux (void);
-extern const struct target_desc *tdesc_nios2_linux;
-
-/* This union is used to convert between int and byte buffer
-   representations of register contents.  */
-
-union nios2_register
-{
-  unsigned char buf[4];
-  int reg32;
-};
-
-/* Return the ptrace ``address'' of register REGNO. */
-
-static int nios2_regmap[] = {
-  -1,  1,  2,  3,  4,  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, 36, 37, 38, 39,
-  40, 41, 42, 43, 44, 45, 46, 47,
-  48,
-  0
-};
-
-/* Implement the arch_setup linux_target_ops method.  */
-
-static void
-nios2_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_nios2_linux;
-}
-
-/* Implement the cannot_fetch_register linux_target_ops method.  */
-
-static int
-nios2_cannot_fetch_register (int regno)
-{
-  if (nios2_regmap[regno] == -1)
-    return 1;
-
-  return 0;
-}
-
-/* Implement the cannot_store_register linux_target_ops method.  */
-
-static int
-nios2_cannot_store_register (int regno)
-{
-  if (nios2_regmap[regno] == -1)
-    return 1;
-
-  return 0;
-}
-
-/* Breakpoint support.  Also see comments on nios2_breakpoint_from_pc
-   in nios2-tdep.c.  */
-
-#if defined(__nios2_arch__) && __nios2_arch__ == 2
-#define NIOS2_BREAKPOINT 0xb7fd0020
-#define CDX_BREAKPOINT 0xd7c9
-#else
-#define NIOS2_BREAKPOINT 0x003b6ffa
-#endif
-
-/* We only register the 4-byte breakpoint, even on R2 targets which also
-   support 2-byte breakpoints.  Since there is no supports_z_point_type
-   function provided, gdbserver never inserts software breakpoints itself
-   and instead relies on GDB to insert the breakpoint of the correct length
-   via a memory write.  */
-static const unsigned int nios2_breakpoint = NIOS2_BREAKPOINT;
-#define nios2_breakpoint_len 4
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-nios2_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = nios2_breakpoint_len;
-  return (const gdb_byte *) &nios2_breakpoint;
-}
-
-/* Implement the breakpoint_at linux_target_ops method.  */
-
-static int
-nios2_breakpoint_at (CORE_ADDR where)
-{
-  unsigned int insn;
-
-  /* For R2, first check for the 2-byte CDX trap.n breakpoint encoding.  */
-#if defined(__nios2_arch__) && __nios2_arch__ == 2
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 2);
-  if (insn == CDX_BREAKPOINT)
-    return 1;
-#endif
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
-  if (insn == nios2_breakpoint)
-    return 1;
-  return 0;
-}
-
-/* Fetch the thread-local storage pointer for libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-                    lwpid_t lwpid, int idx, void **base)
-{
-  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;
-}
-
-/* Helper functions to collect/supply a single register REGNO.  */
-
-static void
-nios2_collect_register (struct regcache *regcache, int regno,
-			union nios2_register *reg)
-{
-  union nios2_register tmp_reg;
-
-  collect_register (regcache, regno, &tmp_reg.reg32);
-  reg->reg32 = tmp_reg.reg32;
-}
-
-static void
-nios2_supply_register (struct regcache *regcache, int regno,
-		       const union nios2_register *reg)
-{
-  supply_register (regcache, regno, reg->buf);
-}
-
-/* We have only a single register set on Nios II.  */
-
-static void
-nios2_fill_gregset (struct regcache *regcache, void *buf)
-{
-  union nios2_register *regset = (union nios2_register *) buf;
-  int i;
-
-  for (i = 1; i < nios2_num_regs; i++)
-    nios2_collect_register (regcache, i, regset + i);
-}
-
-static void
-nios2_store_gregset (struct regcache *regcache, const void *buf)
-{
-  const union nios2_register *regset = (union nios2_register *) buf;
-  int i;
-
-  for (i = 0; i < nios2_num_regs; i++)
-    nios2_supply_register (regcache, i, regset + i);
-}
-
-static struct regset_info nios2_regsets[] =
-{
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS,
-    nios2_num_regs * 4, GENERAL_REGS,
-    nios2_fill_gregset, nios2_store_gregset },
-  NULL_REGSET
-};
-
-static struct regsets_info nios2_regsets_info =
-  {
-    nios2_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info nios2_usrregs_info =
-  {
-    nios2_num_regs,
-    nios2_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &nios2_usrregs_info,
-    &nios2_regsets_info
-  };
-
-static const struct regs_info *
-nios2_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target =
-{
-  nios2_arch_setup,
-  nios2_regs_info,
-  nios2_cannot_fetch_register,
-  nios2_cannot_store_register,
-  NULL,
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  nios2_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  0,
-  nios2_breakpoint_at,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_nios2_linux ();
-
-  initialize_regsets_info (&nios2_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ppc-ipa.c ./gdb/gdbserver/linux-ppc-ipa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ppc-ipa.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-ppc-ipa.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,259 +0,0 @@
-/* GNU/Linux/PowerPC specific low level interface, for the in-process
-   agent library for GDB.
-
-   Copyright (C) 2016-2020 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 "server.h"
-#include <sys/mman.h>
-#include "tracepoint.h"
-#include "arch/ppc-linux-tdesc.h"
-#include "linux-ppc-tdesc-init.h"
-#include <elf.h>
-#ifdef HAVE_GETAUXVAL
-#include <sys/auxv.h>
-#endif
-
-/* These macros define the position of registers in the buffer collected
-   by the fast tracepoint jump pad.  */
-#define FT_CR_R0	0
-#define FT_CR_CR	32
-#define FT_CR_XER	33
-#define FT_CR_LR	34
-#define FT_CR_CTR	35
-#define FT_CR_PC	36
-#define FT_CR_GPR(n)	(FT_CR_R0 + (n))
-
-static const int ppc_ft_collect_regmap[] = {
-  /* GPRs */
-  FT_CR_GPR (0), FT_CR_GPR (1), FT_CR_GPR (2),
-  FT_CR_GPR (3), FT_CR_GPR (4), FT_CR_GPR (5),
-  FT_CR_GPR (6), FT_CR_GPR (7), FT_CR_GPR (8),
-  FT_CR_GPR (9), FT_CR_GPR (10), FT_CR_GPR (11),
-  FT_CR_GPR (12), FT_CR_GPR (13), FT_CR_GPR (14),
-  FT_CR_GPR (15), FT_CR_GPR (16), FT_CR_GPR (17),
-  FT_CR_GPR (18), FT_CR_GPR (19), FT_CR_GPR (20),
-  FT_CR_GPR (21), FT_CR_GPR (22), FT_CR_GPR (23),
-  FT_CR_GPR (24), FT_CR_GPR (25), FT_CR_GPR (26),
-  FT_CR_GPR (27), FT_CR_GPR (28), FT_CR_GPR (29),
-  FT_CR_GPR (30), FT_CR_GPR (31),
-  /* FPRs - not collected.  */
-  -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,
-  FT_CR_PC, /* PC */
-  -1, /* MSR */
-  FT_CR_CR, /* CR */
-  FT_CR_LR, /* LR */
-  FT_CR_CTR, /* CTR */
-  FT_CR_XER, /* XER */
-  -1, /* FPSCR */
-};
-
-#define PPC_NUM_FT_COLLECT_GREGS \
-  (sizeof (ppc_ft_collect_regmap) / sizeof(ppc_ft_collect_regmap[0]))
-
-/* Supply registers collected by the fast tracepoint jump pad.
-   BUF is the second argument we pass to gdb_collect in jump pad.  */
-
-void
-supply_fast_tracepoint_registers (struct regcache *regcache,
-				  const unsigned char *buf)
-{
-  int i;
-
-  for (i = 0; i < PPC_NUM_FT_COLLECT_GREGS; i++)
-    {
-      if (ppc_ft_collect_regmap[i] == -1)
-	continue;
-      supply_register (regcache, i,
-		       ((char *) buf)
-			+ ppc_ft_collect_regmap[i] * sizeof (long));
-    }
-}
-
-/* Return the value of register REGNUM.  RAW_REGS is collected buffer
-   by jump pad.  This function is called by emit_reg.  */
-
-ULONGEST
-get_raw_reg (const unsigned char *raw_regs, int regnum)
-{
-  if (regnum >= PPC_NUM_FT_COLLECT_GREGS)
-    return 0;
-  if (ppc_ft_collect_regmap[regnum] == -1)
-    return 0;
-
-  return *(unsigned long *) (raw_regs
-			     + ppc_ft_collect_regmap[regnum] * sizeof (long));
-}
-
-/* Allocate buffer for the jump pads.  The branch instruction has a reach
-   of +/- 32MiB, and the executable is loaded at 0x10000000 (256MiB).
-
-   64-bit: To maximize the area of executable that can use tracepoints,
-   try allocating at 0x10000000 - size initially, decreasing until we hit
-   a free area.
-
-   32-bit: ld.so loads dynamic libraries right below the executable, so
-   we cannot depend on that area (dynamic libraries can be quite large).
-   Instead, aim right after the executable - at sbrk(0).  This will
-   cause future brk to fail, and malloc will fallback to mmap.  */
-
-void *
-alloc_jump_pad_buffer (size_t size)
-{
-#ifdef __powerpc64__
-  uintptr_t addr;
-  uintptr_t exec_base = getauxval (AT_PHDR);
-  int pagesize;
-  void *res;
-
-  if (exec_base == 0)
-    exec_base = 0x10000000;
-
-  pagesize = sysconf (_SC_PAGE_SIZE);
-  if (pagesize == -1)
-    perror_with_name ("sysconf");
-
-  addr = exec_base - size;
-
-  /* size should already be page-aligned, but this can't hurt.  */
-  addr &= ~(pagesize - 1);
-
-  /* Search for a free area.  If we hit 0, we're out of luck.  */
-  for (; addr; addr -= pagesize)
-    {
-      /* No MAP_FIXED - we don't want to zap someone's mapping.  */
-      res = mmap ((void *) addr, size,
-		  PROT_READ | PROT_WRITE | PROT_EXEC,
-		  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-      /* If we got what we wanted, return.  */
-      if ((uintptr_t) res == addr)
-	return res;
-
-      /* If we got a mapping, but at a wrong address, undo it.  */
-      if (res != MAP_FAILED)
-	munmap (res, size);
-    }
-
-  return NULL;
-#else
-  void *target = sbrk (0);
-  void *res = mmap (target, size, PROT_READ | PROT_WRITE | PROT_EXEC,
-		    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-  if (res == target)
-    return res;
-
-  if (res != MAP_FAILED)
-    munmap (res, size);
-
-  return NULL;
-#endif
-}
-
-/* Return target_desc to use for IPA, given the tdesc index passed by
-   gdbserver.  */
-
-const struct target_desc *
-get_ipa_tdesc (int idx)
-{
-  switch (idx)
-    {
-#ifdef __powerpc64__
-    case PPC_TDESC_BASE:
-      return tdesc_powerpc_64l;
-    case PPC_TDESC_ALTIVEC:
-      return tdesc_powerpc_altivec64l;
-    case PPC_TDESC_VSX:
-      return tdesc_powerpc_vsx64l;
-    case PPC_TDESC_ISA205:
-      return tdesc_powerpc_isa205_64l;
-    case PPC_TDESC_ISA205_ALTIVEC:
-      return tdesc_powerpc_isa205_altivec64l;
-    case PPC_TDESC_ISA205_VSX:
-      return tdesc_powerpc_isa205_vsx64l;
-    case PPC_TDESC_ISA205_PPR_DSCR_VSX:
-      return tdesc_powerpc_isa205_ppr_dscr_vsx64l;
-    case PPC_TDESC_ISA207_VSX:
-      return tdesc_powerpc_isa207_vsx64l;
-    case PPC_TDESC_ISA207_HTM_VSX:
-      return tdesc_powerpc_isa207_htm_vsx64l;
-#else
-    case PPC_TDESC_BASE:
-      return tdesc_powerpc_32l;
-    case PPC_TDESC_ALTIVEC:
-      return tdesc_powerpc_altivec32l;
-    case PPC_TDESC_VSX:
-      return tdesc_powerpc_vsx32l;
-    case PPC_TDESC_ISA205:
-      return tdesc_powerpc_isa205_32l;
-    case PPC_TDESC_ISA205_ALTIVEC:
-      return tdesc_powerpc_isa205_altivec32l;
-    case PPC_TDESC_ISA205_VSX:
-      return tdesc_powerpc_isa205_vsx32l;
-    case PPC_TDESC_ISA205_PPR_DSCR_VSX:
-      return tdesc_powerpc_isa205_ppr_dscr_vsx32l;
-    case PPC_TDESC_ISA207_VSX:
-      return tdesc_powerpc_isa207_vsx32l;
-    case PPC_TDESC_ISA207_HTM_VSX:
-      return tdesc_powerpc_isa207_htm_vsx32l;
-    case PPC_TDESC_E500:
-      return tdesc_powerpc_e500l;
-#endif
-    default:
-      internal_error (__FILE__, __LINE__,
-                     "unknown ipa tdesc index: %d", idx);
-#ifdef __powerpc64__
-      return tdesc_powerpc_64l;
-#else
-      return tdesc_powerpc_32l;
-#endif
-    }
-}
-
-
-/* Initialize ipa_tdesc and others.  */
-
-void
-initialize_low_tracepoint (void)
-{
-#ifdef __powerpc64__
-  init_registers_powerpc_64l ();
-  init_registers_powerpc_altivec64l ();
-  init_registers_powerpc_vsx64l ();
-  init_registers_powerpc_isa205_64l ();
-  init_registers_powerpc_isa205_altivec64l ();
-  init_registers_powerpc_isa205_vsx64l ();
-  init_registers_powerpc_isa205_ppr_dscr_vsx64l ();
-  init_registers_powerpc_isa207_vsx64l ();
-  init_registers_powerpc_isa207_htm_vsx64l ();
-#else
-  init_registers_powerpc_32l ();
-  init_registers_powerpc_altivec32l ();
-  init_registers_powerpc_vsx32l ();
-  init_registers_powerpc_isa205_32l ();
-  init_registers_powerpc_isa205_altivec32l ();
-  init_registers_powerpc_isa205_vsx32l ();
-  init_registers_powerpc_isa205_ppr_dscr_vsx32l ();
-  init_registers_powerpc_isa207_vsx32l ();
-  init_registers_powerpc_isa207_htm_vsx32l ();
-  init_registers_powerpc_e500l ();
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ppc-low.c ./gdb/gdbserver/linux-ppc-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ppc-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-ppc-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,3441 +0,0 @@
-/* GNU/Linux/PowerPC specific low level interface, for the remote server for
-   GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-
-#include "elf/common.h"
-#include <sys/uio.h>
-#include <elf.h>
-#include <asm/ptrace.h>
-
-#include "arch/ppc-linux-common.h"
-#include "arch/ppc-linux-tdesc.h"
-#include "nat/ppc-linux.h"
-#include "nat/linux-ptrace.h"
-#include "linux-ppc-tdesc-init.h"
-#include "ax.h"
-#include "tracepoint.h"
-
-#define PPC_FIELD(value, from, len) \
-	(((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1))
-#define PPC_SEXT(v, bs) \
-	((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \
-	  ^ ((CORE_ADDR) 1 << ((bs) - 1))) \
-	 - ((CORE_ADDR) 1 << ((bs) - 1)))
-#define PPC_OP6(insn)	PPC_FIELD (insn, 0, 6)
-#define PPC_BO(insn)	PPC_FIELD (insn, 6, 5)
-#define PPC_LI(insn)	(PPC_SEXT (PPC_FIELD (insn, 6, 24), 24) << 2)
-#define PPC_BD(insn)	(PPC_SEXT (PPC_FIELD (insn, 16, 14), 14) << 2)
-
-/* Holds the AT_HWCAP auxv entry.  */
-
-static unsigned long ppc_hwcap;
-
-/* Holds the AT_HWCAP2 auxv entry.  */
-
-static unsigned long ppc_hwcap2;
-
-
-#define ppc_num_regs 73
-
-#ifdef __powerpc64__
-/* We use a constant for FPSCR instead of PT_FPSCR, because
-   many shipped PPC64 kernels had the wrong value in ptrace.h.  */
-static int ppc_regmap[] =
- {PT_R0 * 8,     PT_R1 * 8,     PT_R2 * 8,     PT_R3 * 8,
-  PT_R4 * 8,     PT_R5 * 8,     PT_R6 * 8,     PT_R7 * 8,
-  PT_R8 * 8,     PT_R9 * 8,     PT_R10 * 8,    PT_R11 * 8,
-  PT_R12 * 8,    PT_R13 * 8,    PT_R14 * 8,    PT_R15 * 8,
-  PT_R16 * 8,    PT_R17 * 8,    PT_R18 * 8,    PT_R19 * 8,
-  PT_R20 * 8,    PT_R21 * 8,    PT_R22 * 8,    PT_R23 * 8,
-  PT_R24 * 8,    PT_R25 * 8,    PT_R26 * 8,    PT_R27 * 8,
-  PT_R28 * 8,    PT_R29 * 8,    PT_R30 * 8,    PT_R31 * 8,
-  PT_FPR0*8,     PT_FPR0*8 + 8, PT_FPR0*8+16,  PT_FPR0*8+24,
-  PT_FPR0*8+32,  PT_FPR0*8+40,  PT_FPR0*8+48,  PT_FPR0*8+56,
-  PT_FPR0*8+64,  PT_FPR0*8+72,  PT_FPR0*8+80,  PT_FPR0*8+88,
-  PT_FPR0*8+96,  PT_FPR0*8+104,  PT_FPR0*8+112,  PT_FPR0*8+120,
-  PT_FPR0*8+128, PT_FPR0*8+136,  PT_FPR0*8+144,  PT_FPR0*8+152,
-  PT_FPR0*8+160,  PT_FPR0*8+168,  PT_FPR0*8+176,  PT_FPR0*8+184,
-  PT_FPR0*8+192,  PT_FPR0*8+200,  PT_FPR0*8+208,  PT_FPR0*8+216,
-  PT_FPR0*8+224,  PT_FPR0*8+232,  PT_FPR0*8+240,  PT_FPR0*8+248,
-  PT_NIP * 8,    PT_MSR * 8,    PT_CCR * 8,    PT_LNK * 8,
-  PT_CTR * 8,    PT_XER * 8,    PT_FPR0*8 + 256,
-  PT_ORIG_R3 * 8, PT_TRAP * 8 };
-#else
-/* Currently, don't check/send MQ.  */
-static int ppc_regmap[] =
- {PT_R0 * 4,     PT_R1 * 4,     PT_R2 * 4,     PT_R3 * 4,
-  PT_R4 * 4,     PT_R5 * 4,     PT_R6 * 4,     PT_R7 * 4,
-  PT_R8 * 4,     PT_R9 * 4,     PT_R10 * 4,    PT_R11 * 4,
-  PT_R12 * 4,    PT_R13 * 4,    PT_R14 * 4,    PT_R15 * 4,
-  PT_R16 * 4,    PT_R17 * 4,    PT_R18 * 4,    PT_R19 * 4,
-  PT_R20 * 4,    PT_R21 * 4,    PT_R22 * 4,    PT_R23 * 4,
-  PT_R24 * 4,    PT_R25 * 4,    PT_R26 * 4,    PT_R27 * 4,
-  PT_R28 * 4,    PT_R29 * 4,    PT_R30 * 4,    PT_R31 * 4,
-  PT_FPR0*4,     PT_FPR0*4 + 8, PT_FPR0*4+16,  PT_FPR0*4+24,
-  PT_FPR0*4+32,  PT_FPR0*4+40,  PT_FPR0*4+48,  PT_FPR0*4+56,
-  PT_FPR0*4+64,  PT_FPR0*4+72,  PT_FPR0*4+80,  PT_FPR0*4+88,
-  PT_FPR0*4+96,  PT_FPR0*4+104,  PT_FPR0*4+112,  PT_FPR0*4+120,
-  PT_FPR0*4+128, PT_FPR0*4+136,  PT_FPR0*4+144,  PT_FPR0*4+152,
-  PT_FPR0*4+160,  PT_FPR0*4+168,  PT_FPR0*4+176,  PT_FPR0*4+184,
-  PT_FPR0*4+192,  PT_FPR0*4+200,  PT_FPR0*4+208,  PT_FPR0*4+216,
-  PT_FPR0*4+224,  PT_FPR0*4+232,  PT_FPR0*4+240,  PT_FPR0*4+248,
-  PT_NIP * 4,    PT_MSR * 4,    PT_CCR * 4,    PT_LNK * 4,
-  PT_CTR * 4,    PT_XER * 4,    PT_FPSCR * 4,
-  PT_ORIG_R3 * 4, PT_TRAP * 4
- };
-
-static int ppc_regmap_e500[] =
- {PT_R0 * 4,     PT_R1 * 4,     PT_R2 * 4,     PT_R3 * 4,
-  PT_R4 * 4,     PT_R5 * 4,     PT_R6 * 4,     PT_R7 * 4,
-  PT_R8 * 4,     PT_R9 * 4,     PT_R10 * 4,    PT_R11 * 4,
-  PT_R12 * 4,    PT_R13 * 4,    PT_R14 * 4,    PT_R15 * 4,
-  PT_R16 * 4,    PT_R17 * 4,    PT_R18 * 4,    PT_R19 * 4,
-  PT_R20 * 4,    PT_R21 * 4,    PT_R22 * 4,    PT_R23 * 4,
-  PT_R24 * 4,    PT_R25 * 4,    PT_R26 * 4,    PT_R27 * 4,
-  PT_R28 * 4,    PT_R29 * 4,    PT_R30 * 4,    PT_R31 * 4,
-  -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,
-  PT_NIP * 4,    PT_MSR * 4,    PT_CCR * 4,    PT_LNK * 4,
-  PT_CTR * 4,    PT_XER * 4,    -1,
-  PT_ORIG_R3 * 4, PT_TRAP * 4
- };
-#endif
-
-/* Check whether the kernel provides a register set with number
-   REGSET_ID of size REGSETSIZE for process/thread TID.  */
-
-static int
-ppc_check_regset (int tid, int regset_id, int regsetsize)
-{
-  void *buf = alloca (regsetsize);
-  struct iovec iov;
-
-  iov.iov_base = buf;
-  iov.iov_len = regsetsize;
-
-  if (ptrace (PTRACE_GETREGSET, tid, regset_id, &iov) >= 0
-      || errno == ENODATA)
-    return 1;
-  return 0;
-}
-
-static int
-ppc_cannot_store_register (int regno)
-{
-  const struct target_desc *tdesc = current_process ()->tdesc;
-
-#ifndef __powerpc64__
-  /* Some kernels do not allow us to store fpscr.  */
-  if (!(ppc_hwcap & PPC_FEATURE_HAS_SPE)
-      && regno == find_regno (tdesc, "fpscr"))
-    return 2;
-#endif
-
-  /* Some kernels do not allow us to store orig_r3 or trap.  */
-  if (regno == find_regno (tdesc, "orig_r3")
-      || regno == find_regno (tdesc, "trap"))
-    return 2;
-
-  return 0;
-}
-
-static int
-ppc_cannot_fetch_register (int regno)
-{
-  return 0;
-}
-
-static void
-ppc_collect_ptrace_register (struct regcache *regcache, int regno, char *buf)
-{
-  memset (buf, 0, sizeof (long));
-
-  if (__BYTE_ORDER == __LITTLE_ENDIAN)
-    {
-      /* Little-endian values always sit at the left end of the buffer.  */
-      collect_register (regcache, regno, buf);
-    }
-  else if (__BYTE_ORDER == __BIG_ENDIAN)
-    {
-      /* Big-endian values sit at the right end of the buffer.  In case of
-         registers whose sizes are smaller than sizeof (long), we must use a
-         padding to access them correctly.  */
-      int size = register_size (regcache->tdesc, regno);
-
-      if (size < sizeof (long))
-	collect_register (regcache, regno, buf + sizeof (long) - size);
-      else
-	collect_register (regcache, regno, buf);
-    }
-  else
-    perror_with_name ("Unexpected byte order");
-}
-
-static void
-ppc_supply_ptrace_register (struct regcache *regcache,
-			    int regno, const char *buf)
-{
-  if (__BYTE_ORDER == __LITTLE_ENDIAN)
-    {
-      /* Little-endian values always sit at the left end of the buffer.  */
-      supply_register (regcache, regno, buf);
-    }
-  else if (__BYTE_ORDER == __BIG_ENDIAN)
-    {
-      /* Big-endian values sit at the right end of the buffer.  In case of
-         registers whose sizes are smaller than sizeof (long), we must use a
-         padding to access them correctly.  */
-      int size = register_size (regcache->tdesc, regno);
-
-      if (size < sizeof (long))
-	supply_register (regcache, regno, buf + sizeof (long) - size);
-      else
-	supply_register (regcache, regno, buf);
-    }
-  else
-    perror_with_name ("Unexpected byte order");
-}
-
-static CORE_ADDR
-ppc_get_pc (struct regcache *regcache)
-{
-  if (register_size (regcache->tdesc, 0) == 4)
-    {
-      unsigned int pc;
-      collect_register_by_name (regcache, "pc", &pc);
-      return (CORE_ADDR) pc;
-    }
-  else
-    {
-      unsigned long pc;
-      collect_register_by_name (regcache, "pc", &pc);
-      return (CORE_ADDR) pc;
-    }
-}
-
-static void
-ppc_set_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  if (register_size (regcache->tdesc, 0) == 4)
-    {
-      unsigned int newpc = pc;
-      supply_register_by_name (regcache, "pc", &newpc);
-    }
-  else
-    {
-      unsigned long newpc = pc;
-      supply_register_by_name (regcache, "pc", &newpc);
-    }
-}
-
-#ifndef __powerpc64__
-static int ppc_regmap_adjusted;
-#endif
-
-
-/* Correct in either endianness.
-   This instruction is "twge r2, r2", which GDB uses as a software
-   breakpoint.  */
-static const unsigned int ppc_breakpoint = 0x7d821008;
-#define ppc_breakpoint_len 4
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-ppc_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = ppc_breakpoint_len;
-  return (const gdb_byte *) &ppc_breakpoint;
-}
-
-static int
-ppc_breakpoint_at (CORE_ADDR where)
-{
-  unsigned int insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
-  if (insn == ppc_breakpoint)
-    return 1;
-  /* If necessary, recognize more trap instructions here.  GDB only uses
-     the one.  */
-
-  return 0;
-}
-
-/* Implement supports_z_point_type target-ops.
-   Returns true if type Z_TYPE breakpoint is supported.
-
-   Handling software breakpoint at server side, so tracepoints
-   and breakpoints can be inserted at the same location.  */
-
-static int
-ppc_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-      return 1;
-    case Z_PACKET_HW_BP:
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_ACCESS_WP:
-    default:
-      return 0;
-    }
-}
-
-/* Implement insert_point target-ops.
-   Returns 0 on success, -1 on failure and 1 on unsupported.  */
-
-static int
-ppc_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int size, struct raw_breakpoint *bp)
-{
-  switch (type)
-    {
-    case raw_bkpt_type_sw:
-      return insert_memory_breakpoint (bp);
-
-    case raw_bkpt_type_hw:
-    case raw_bkpt_type_write_wp:
-    case raw_bkpt_type_access_wp:
-    default:
-      /* Unsupported.  */
-      return 1;
-    }
-}
-
-/* Implement remove_point target-ops.
-   Returns 0 on success, -1 on failure and 1 on unsupported.  */
-
-static int
-ppc_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int size, struct raw_breakpoint *bp)
-{
-  switch (type)
-    {
-    case raw_bkpt_type_sw:
-      return remove_memory_breakpoint (bp);
-
-    case raw_bkpt_type_hw:
-    case raw_bkpt_type_write_wp:
-    case raw_bkpt_type_access_wp:
-    default:
-      /* Unsupported.  */
-      return 1;
-    }
-}
-
-/* Provide only a fill function for the general register set.  ps_lgetregs
-   will use this for NPTL support.  */
-
-static void ppc_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-  for (i = 0; i < 32; i++)
-    ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]);
-
-  for (i = 64; i < 70; i++)
-    ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]);
-
-  for (i = 71; i < 73; i++)
-    ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]);
-}
-
-/* Program Priority Register regset fill function.  */
-
-static void
-ppc_fill_pprregset (struct regcache *regcache, void *buf)
-{
-  char *ppr = (char *) buf;
-
-  collect_register_by_name (regcache, "ppr", ppr);
-}
-
-/* Program Priority Register regset store function.  */
-
-static void
-ppc_store_pprregset (struct regcache *regcache, const void *buf)
-{
-  const char *ppr = (const char *) buf;
-
-  supply_register_by_name (regcache, "ppr", ppr);
-}
-
-/* Data Stream Control Register regset fill function.  */
-
-static void
-ppc_fill_dscrregset (struct regcache *regcache, void *buf)
-{
-  char *dscr = (char *) buf;
-
-  collect_register_by_name (regcache, "dscr", dscr);
-}
-
-/* Data Stream Control Register regset store function.  */
-
-static void
-ppc_store_dscrregset (struct regcache *regcache, const void *buf)
-{
-  const char *dscr = (const char *) buf;
-
-  supply_register_by_name (regcache, "dscr", dscr);
-}
-
-/* Target Address Register regset fill function.  */
-
-static void
-ppc_fill_tarregset (struct regcache *regcache, void *buf)
-{
-  char *tar = (char *) buf;
-
-  collect_register_by_name (regcache, "tar", tar);
-}
-
-/* Target Address Register regset store function.  */
-
-static void
-ppc_store_tarregset (struct regcache *regcache, const void *buf)
-{
-  const char *tar = (const char *) buf;
-
-  supply_register_by_name (regcache, "tar", tar);
-}
-
-/* Event-Based Branching regset store function.  Unless the inferior
-   has a perf event open, ptrace can return in error when reading and
-   writing to the regset, with ENODATA.  For reading, the registers
-   will correctly show as unavailable.  For writing, gdbserver
-   currently only caches any register writes from P and G packets and
-   the stub always tries to write all the regsets when resuming the
-   inferior, which would result in frequent warnings.  For this
-   reason, we don't define a fill function.  This also means that the
-   client-side regcache will be dirty if the user tries to write to
-   the EBB registers.  G packets that the client sends to write to
-   unrelated registers will also include data for EBB registers, even
-   if they are unavailable.  */
-
-static void
-ppc_store_ebbregset (struct regcache *regcache, const void *buf)
-{
-  const char *regset = (const char *) buf;
-
-  /* The order in the kernel regset is: EBBRR, EBBHR, BESCR.  In the
-     .dat file is BESCR, EBBHR, EBBRR.  */
-  supply_register_by_name (regcache, "ebbrr", &regset[0]);
-  supply_register_by_name (regcache, "ebbhr", &regset[8]);
-  supply_register_by_name (regcache, "bescr", &regset[16]);
-}
-
-/* Performance Monitoring Unit regset fill function.  */
-
-static void
-ppc_fill_pmuregset (struct regcache *regcache, void *buf)
-{
-  char *regset = (char *) buf;
-
-  /* The order in the kernel regset is SIAR, SDAR, SIER, MMCR2, MMCR0.
-     In the .dat file is MMCR0, MMCR2, SIAR, SDAR, SIER.  */
-  collect_register_by_name (regcache, "siar", &regset[0]);
-  collect_register_by_name (regcache, "sdar", &regset[8]);
-  collect_register_by_name (regcache, "sier", &regset[16]);
-  collect_register_by_name (regcache, "mmcr2", &regset[24]);
-  collect_register_by_name (regcache, "mmcr0", &regset[32]);
-}
-
-/* Performance Monitoring Unit regset store function.  */
-
-static void
-ppc_store_pmuregset (struct regcache *regcache, const void *buf)
-{
-  const char *regset = (const char *) buf;
-
-  supply_register_by_name (regcache, "siar", &regset[0]);
-  supply_register_by_name (regcache, "sdar", &regset[8]);
-  supply_register_by_name (regcache, "sier", &regset[16]);
-  supply_register_by_name (regcache, "mmcr2", &regset[24]);
-  supply_register_by_name (regcache, "mmcr0", &regset[32]);
-}
-
-/* Hardware Transactional Memory special-purpose register regset fill
-   function.  */
-
-static void
-ppc_fill_tm_sprregset (struct regcache *regcache, void *buf)
-{
-  int i, base;
-  char *regset = (char *) buf;
-
-  base = find_regno (regcache->tdesc, "tfhar");
-  for (i = 0; i < 3; i++)
-    collect_register (regcache, base + i, &regset[i * 8]);
-}
-
-/* Hardware Transactional Memory special-purpose register regset store
-   function.  */
-
-static void
-ppc_store_tm_sprregset (struct regcache *regcache, const void *buf)
-{
-  int i, base;
-  const char *regset = (const char *) buf;
-
-  base = find_regno (regcache->tdesc, "tfhar");
-  for (i = 0; i < 3; i++)
-    supply_register (regcache, base + i, &regset[i * 8]);
-}
-
-/* For the same reasons as the EBB regset, none of the HTM
-   checkpointed regsets have a fill function.  These registers are
-   only available if the inferior is in a transaction.  */
-
-/* Hardware Transactional Memory checkpointed general-purpose regset
-   store function.  */
-
-static void
-ppc_store_tm_cgprregset (struct regcache *regcache, const void *buf)
-{
-  int i, base, size, endian_offset;
-  const char *regset = (const char *) buf;
-
-  base = find_regno (regcache->tdesc, "cr0");
-  size = register_size (regcache->tdesc, base);
-
-  gdb_assert (size == 4 || size == 8);
-
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, base + i, &regset[i * size]);
-
-  endian_offset = 0;
-
-  if ((size == 8) && (__BYTE_ORDER == __BIG_ENDIAN))
-    endian_offset = 4;
-
-  supply_register_by_name (regcache, "ccr",
-			   &regset[PT_CCR * size + endian_offset]);
-
-  supply_register_by_name (regcache, "cxer",
-			   &regset[PT_XER * size + endian_offset]);
-
-  supply_register_by_name (regcache, "clr", &regset[PT_LNK * size]);
-  supply_register_by_name (regcache, "cctr", &regset[PT_CTR * size]);
-}
-
-/* Hardware Transactional Memory checkpointed floating-point regset
-   store function.  */
-
-static void
-ppc_store_tm_cfprregset (struct regcache *regcache, const void *buf)
-{
-  int i, base;
-  const char *regset = (const char *) buf;
-
-  base = find_regno (regcache->tdesc, "cf0");
-
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, base + i, &regset[i * 8]);
-
-  supply_register_by_name (regcache, "cfpscr", &regset[32 * 8]);
-}
-
-/* Hardware Transactional Memory checkpointed vector regset store
-   function.  */
-
-static void
-ppc_store_tm_cvrregset (struct regcache *regcache, const void *buf)
-{
-  int i, base;
-  const char *regset = (const char *) buf;
-  int vscr_offset = 0;
-
-  base = find_regno (regcache->tdesc, "cvr0");
-
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, base + i, &regset[i * 16]);
-
-  if (__BYTE_ORDER == __BIG_ENDIAN)
-    vscr_offset = 12;
-
-  supply_register_by_name (regcache, "cvscr",
-			   &regset[32 * 16 + vscr_offset]);
-
-  supply_register_by_name (regcache, "cvrsave", &regset[33 * 16]);
-}
-
-/* Hardware Transactional Memory checkpointed vector-scalar regset
-   store function.  */
-
-static void
-ppc_store_tm_cvsxregset (struct regcache *regcache, const void *buf)
-{
-  int i, base;
-  const char *regset = (const char *) buf;
-
-  base = find_regno (regcache->tdesc, "cvs0h");
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, base + i, &regset[i * 8]);
-}
-
-/* Hardware Transactional Memory checkpointed Program Priority
-   Register regset store function.  */
-
-static void
-ppc_store_tm_cpprregset (struct regcache *regcache, const void *buf)
-{
-  const char *cppr = (const char *) buf;
-
-  supply_register_by_name (regcache, "cppr", cppr);
-}
-
-/* Hardware Transactional Memory checkpointed Data Stream Control
-   Register regset store function.  */
-
-static void
-ppc_store_tm_cdscrregset (struct regcache *regcache, const void *buf)
-{
-  const char *cdscr = (const char *) buf;
-
-  supply_register_by_name (regcache, "cdscr", cdscr);
-}
-
-/* Hardware Transactional Memory checkpointed Target Address Register
-   regset store function.  */
-
-static void
-ppc_store_tm_ctarregset (struct regcache *regcache, const void *buf)
-{
-  const char *ctar = (const char *) buf;
-
-  supply_register_by_name (regcache, "ctar", ctar);
-}
-
-static void
-ppc_fill_vsxregset (struct regcache *regcache, void *buf)
-{
-  int i, base;
-  char *regset = (char *) buf;
-
-  base = find_regno (regcache->tdesc, "vs0h");
-  for (i = 0; i < 32; i++)
-    collect_register (regcache, base + i, &regset[i * 8]);
-}
-
-static void
-ppc_store_vsxregset (struct regcache *regcache, const void *buf)
-{
-  int i, base;
-  const char *regset = (const char *) buf;
-
-  base = find_regno (regcache->tdesc, "vs0h");
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, base + i, &regset[i * 8]);
-}
-
-static void
-ppc_fill_vrregset (struct regcache *regcache, void *buf)
-{
-  int i, base;
-  char *regset = (char *) buf;
-  int vscr_offset = 0;
-
-  base = find_regno (regcache->tdesc, "vr0");
-  for (i = 0; i < 32; i++)
-    collect_register (regcache, base + i, &regset[i * 16]);
-
-  if (__BYTE_ORDER == __BIG_ENDIAN)
-    vscr_offset = 12;
-
-  collect_register_by_name (regcache, "vscr",
-			    &regset[32 * 16 + vscr_offset]);
-
-  collect_register_by_name (regcache, "vrsave", &regset[33 * 16]);
-}
-
-static void
-ppc_store_vrregset (struct regcache *regcache, const void *buf)
-{
-  int i, base;
-  const char *regset = (const char *) buf;
-  int vscr_offset = 0;
-
-  base = find_regno (regcache->tdesc, "vr0");
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, base + i, &regset[i * 16]);
-
-  if (__BYTE_ORDER == __BIG_ENDIAN)
-    vscr_offset = 12;
-
-  supply_register_by_name (regcache, "vscr",
-			   &regset[32 * 16 + vscr_offset]);
-  supply_register_by_name (regcache, "vrsave", &regset[33 * 16]);
-}
-
-struct gdb_evrregset_t
-{
-  unsigned long evr[32];
-  unsigned long long acc;
-  unsigned long spefscr;
-};
-
-static void
-ppc_fill_evrregset (struct regcache *regcache, void *buf)
-{
-  int i, ev0;
-  struct gdb_evrregset_t *regset = (struct gdb_evrregset_t *) buf;
-
-  ev0 = find_regno (regcache->tdesc, "ev0h");
-  for (i = 0; i < 32; i++)
-    collect_register (regcache, ev0 + i, &regset->evr[i]);
-
-  collect_register_by_name (regcache, "acc", &regset->acc);
-  collect_register_by_name (regcache, "spefscr", &regset->spefscr);
-}
-
-static void
-ppc_store_evrregset (struct regcache *regcache, const void *buf)
-{
-  int i, ev0;
-  const struct gdb_evrregset_t *regset = (const struct gdb_evrregset_t *) buf;
-
-  ev0 = find_regno (regcache->tdesc, "ev0h");
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, ev0 + i, &regset->evr[i]);
-
-  supply_register_by_name (regcache, "acc", &regset->acc);
-  supply_register_by_name (regcache, "spefscr", &regset->spefscr);
-}
-
-/* Support for hardware single step.  */
-
-static int
-ppc_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static struct regset_info ppc_regsets[] = {
-  /* List the extra register sets before GENERAL_REGS.  That way we will
-     fetch them every time, but still fall back to PTRACE_PEEKUSER for the
-     general registers.  Some kernels support these, but not the newer
-     PPC_PTRACE_GETREGS.  */
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CTAR, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_ctarregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CDSCR, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_cdscrregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CPPR, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_cpprregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CVSX, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_cvsxregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CVMX, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_cvrregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CFPR, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_cfprregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CGPR, 0, EXTENDED_REGS,
-    NULL, ppc_store_tm_cgprregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_SPR, 0, EXTENDED_REGS,
-    ppc_fill_tm_sprregset, ppc_store_tm_sprregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_EBB, 0, EXTENDED_REGS,
-    NULL, ppc_store_ebbregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PMU, 0, EXTENDED_REGS,
-    ppc_fill_pmuregset, ppc_store_pmuregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TAR, 0, EXTENDED_REGS,
-    ppc_fill_tarregset, ppc_store_tarregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PPR, 0, EXTENDED_REGS,
-    ppc_fill_pprregset, ppc_store_pprregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_DSCR, 0, EXTENDED_REGS,
-    ppc_fill_dscrregset, ppc_store_dscrregset },
-  { PTRACE_GETVSXREGS, PTRACE_SETVSXREGS, 0, 0, EXTENDED_REGS,
-  ppc_fill_vsxregset, ppc_store_vsxregset },
-  { PTRACE_GETVRREGS, PTRACE_SETVRREGS, 0, 0, EXTENDED_REGS,
-    ppc_fill_vrregset, ppc_store_vrregset },
-  { PTRACE_GETEVRREGS, PTRACE_SETEVRREGS, 0, 0, EXTENDED_REGS,
-    ppc_fill_evrregset, ppc_store_evrregset },
-  { 0, 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL },
-  NULL_REGSET
-};
-
-static struct usrregs_info ppc_usrregs_info =
-  {
-    ppc_num_regs,
-    ppc_regmap,
-  };
-
-static struct regsets_info ppc_regsets_info =
-  {
-    ppc_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &ppc_usrregs_info,
-    &ppc_regsets_info
-  };
-
-static const struct regs_info *
-ppc_regs_info (void)
-{
-  return &regs_info;
-}
-
-static void
-ppc_arch_setup (void)
-{
-  const struct target_desc *tdesc;
-  struct regset_info *regset;
-  struct ppc_linux_features features = ppc_linux_no_features;
-
-  int tid = lwpid_of (current_thread);
-
-  features.wordsize = ppc_linux_target_wordsize (tid);
-
-  if (features.wordsize == 4)
-      tdesc = tdesc_powerpc_32l;
-  else
-      tdesc = tdesc_powerpc_64l;
-
-  current_process ()->tdesc = tdesc;
-
-  /* The value of current_process ()->tdesc needs to be set for this
-     call.  */
-  ppc_hwcap = linux_get_hwcap (features.wordsize);
-  ppc_hwcap2 = linux_get_hwcap2 (features.wordsize);
-
-  features.isa205 = ppc_linux_has_isa205 (ppc_hwcap);
-
-  if (ppc_hwcap & PPC_FEATURE_HAS_VSX)
-    features.vsx = true;
-
-  if (ppc_hwcap & PPC_FEATURE_HAS_ALTIVEC)
-    features.altivec = true;
-
-  if ((ppc_hwcap2 & PPC_FEATURE2_DSCR)
-      && ppc_check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET)
-      && ppc_check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET))
-    {
-      features.ppr_dscr = true;
-      if ((ppc_hwcap2 & PPC_FEATURE2_ARCH_2_07)
-	  && (ppc_hwcap2 & PPC_FEATURE2_TAR)
-	  && (ppc_hwcap2 & PPC_FEATURE2_EBB)
-	  && ppc_check_regset (tid, NT_PPC_TAR,
-			       PPC_LINUX_SIZEOF_TARREGSET)
-	  && ppc_check_regset (tid, NT_PPC_EBB,
-			       PPC_LINUX_SIZEOF_EBBREGSET)
-	  && ppc_check_regset (tid, NT_PPC_PMU,
-			       PPC_LINUX_SIZEOF_PMUREGSET))
-	{
-	  features.isa207 = true;
-	  if ((ppc_hwcap2 & PPC_FEATURE2_HTM)
-	      && ppc_check_regset (tid, NT_PPC_TM_SPR,
-				   PPC_LINUX_SIZEOF_TM_SPRREGSET))
-	    features.htm = true;
-	}
-    }
-
-  tdesc = ppc_linux_match_description (features);
-
-  /* On 32-bit machines, check for SPE registers.
-     Set the low target's regmap field as appropriately.  */
-#ifndef __powerpc64__
-  if (ppc_hwcap & PPC_FEATURE_HAS_SPE)
-    tdesc = tdesc_powerpc_e500l;
-
-  if (!ppc_regmap_adjusted)
-    {
-      if (ppc_hwcap & PPC_FEATURE_HAS_SPE)
-	ppc_usrregs_info.regmap = ppc_regmap_e500;
-
-      /* If the FPSCR is 64-bit wide, we need to fetch the whole
-	 64-bit slot and not just its second word.  The PT_FPSCR
-	 supplied in a 32-bit GDB compilation doesn't reflect
-	 this.  */
-      if (register_size (tdesc, 70) == 8)
-	ppc_regmap[70] = (48 + 2*32) * sizeof (long);
-
-      ppc_regmap_adjusted = 1;
-   }
-#endif
-
-  current_process ()->tdesc = tdesc;
-
-  for (regset = ppc_regsets; regset->size >= 0; regset++)
-    switch (regset->get_request)
-      {
-      case PTRACE_GETVRREGS:
-	regset->size = features.altivec ? PPC_LINUX_SIZEOF_VRREGSET : 0;
-	break;
-      case PTRACE_GETVSXREGS:
-	regset->size = features.vsx ? PPC_LINUX_SIZEOF_VSXREGSET : 0;
-	break;
-      case PTRACE_GETEVRREGS:
-	if (ppc_hwcap & PPC_FEATURE_HAS_SPE)
-	  regset->size = 32 * 4 + 8 + 4;
-	else
-	  regset->size = 0;
-	break;
-      case PTRACE_GETREGSET:
-	switch (regset->nt_type)
-	  {
-	  case NT_PPC_PPR:
-	    regset->size = (features.ppr_dscr ?
-			    PPC_LINUX_SIZEOF_PPRREGSET : 0);
-	    break;
-	  case NT_PPC_DSCR:
-	    regset->size = (features.ppr_dscr ?
-			    PPC_LINUX_SIZEOF_DSCRREGSET : 0);
-	    break;
-	  case NT_PPC_TAR:
-	    regset->size = (features.isa207 ?
-			    PPC_LINUX_SIZEOF_TARREGSET : 0);
-	    break;
-	  case NT_PPC_EBB:
-	    regset->size = (features.isa207 ?
-			    PPC_LINUX_SIZEOF_EBBREGSET : 0);
-	    break;
-	  case NT_PPC_PMU:
-	    regset->size = (features.isa207 ?
-			    PPC_LINUX_SIZEOF_PMUREGSET : 0);
-	    break;
-	  case NT_PPC_TM_SPR:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_TM_SPRREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CGPR:
-	    if (features.wordsize == 4)
-	      regset->size = (features.htm ?
-			      PPC32_LINUX_SIZEOF_CGPRREGSET : 0);
-	    else
-	      regset->size = (features.htm ?
-			      PPC64_LINUX_SIZEOF_CGPRREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CFPR:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_CFPRREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CVMX:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_CVMXREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CVSX:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_CVSXREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CPPR:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_CPPRREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CDSCR:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_CDSCRREGSET : 0);
-	    break;
-	  case NT_PPC_TM_CTAR:
-	    regset->size = (features.htm ?
-			    PPC_LINUX_SIZEOF_CTARREGSET : 0);
-	    break;
-	  default:
-	    break;
-	  }
-	break;
-      default:
-	break;
-      }
-}
-
-/* Implementation of linux_target_ops method "supports_tracepoints".  */
-
-static int
-ppc_supports_tracepoints (void)
-{
-  return 1;
-}
-
-/* Get the thread area address.  This is used to recognize which
-   thread is which when tracing with the in-process agent library.  We
-   don't read anything from the address, and treat it as opaque; it's
-   the address itself that we assume is unique per-thread.  */
-
-static int
-ppc_get_thread_area (int lwpid, CORE_ADDR *addr)
-{
-  struct lwp_info *lwp = find_lwp_pid (ptid_t (lwpid));
-  struct thread_info *thr = get_lwp_thread (lwp);
-  struct regcache *regcache = get_thread_regcache (thr, 1);
-  ULONGEST tp = 0;
-
-#ifdef __powerpc64__
-  if (register_size (regcache->tdesc, 0) == 8)
-    collect_register_by_name (regcache, "r13", &tp);
-  else
-#endif
-    collect_register_by_name (regcache, "r2", &tp);
-
-  *addr = tp;
-
-  return 0;
-}
-
-#ifdef __powerpc64__
-
-/* Older glibc doesn't provide this.  */
-
-#ifndef EF_PPC64_ABI
-#define EF_PPC64_ABI 3
-#endif
-
-/* Returns 1 if inferior is using ELFv2 ABI.  Undefined for 32-bit
-   inferiors.  */
-
-static int
-is_elfv2_inferior (void)
-{
-  /* To be used as fallback if we're unable to determine the right result -
-     assume inferior uses the same ABI as gdbserver.  */
-#if _CALL_ELF == 2
-  const int def_res = 1;
-#else
-  const int def_res = 0;
-#endif
-  CORE_ADDR phdr;
-  Elf64_Ehdr ehdr;
-
-  const struct target_desc *tdesc = current_process ()->tdesc;
-  int wordsize = register_size (tdesc, 0);
-
-  if (!linux_get_auxv (wordsize, AT_PHDR, &phdr))
-    return def_res;
-
-  /* Assume ELF header is at the beginning of the page where program headers
-     are located.  If it doesn't look like one, bail.  */
-
-  read_inferior_memory (phdr & ~0xfff, (unsigned char *) &ehdr, sizeof ehdr);
-  if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG))
-    return def_res;
-
-  return (ehdr.e_flags & EF_PPC64_ABI) == 2;
-}
-
-#endif
-
-/* Generate a ds-form instruction in BUF and return the number of bytes written
-
-   0      6     11   16          30 32
-   | OPCD | RST | RA |     DS    |XO|  */
-
-__attribute__((unused)) /* Maybe unused due to conditional compilation.  */
-static int
-gen_ds_form (uint32_t *buf, int opcd, int rst, int ra, int ds, int xo)
-{
-  uint32_t insn;
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-  gdb_assert ((rst & ~0x1f) == 0);
-  gdb_assert ((ra & ~0x1f) == 0);
-  gdb_assert ((xo & ~0x3) == 0);
-
-  insn = (rst << 21) | (ra << 16) | (ds & 0xfffc) | (xo & 0x3);
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* Followings are frequently used ds-form instructions.  */
-
-#define GEN_STD(buf, rs, ra, offset)	gen_ds_form (buf, 62, rs, ra, offset, 0)
-#define GEN_STDU(buf, rs, ra, offset)	gen_ds_form (buf, 62, rs, ra, offset, 1)
-#define GEN_LD(buf, rt, ra, offset)	gen_ds_form (buf, 58, rt, ra, offset, 0)
-#define GEN_LDU(buf, rt, ra, offset)	gen_ds_form (buf, 58, rt, ra, offset, 1)
-
-/* Generate a d-form instruction in BUF.
-
-   0      6     11   16             32
-   | OPCD | RST | RA |       D      |  */
-
-static int
-gen_d_form (uint32_t *buf, int opcd, int rst, int ra, int si)
-{
-  uint32_t insn;
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-  gdb_assert ((rst & ~0x1f) == 0);
-  gdb_assert ((ra & ~0x1f) == 0);
-
-  insn = (rst << 21) | (ra << 16) | (si & 0xffff);
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* Followings are frequently used d-form instructions.  */
-
-#define GEN_ADDI(buf, rt, ra, si)	gen_d_form (buf, 14, rt, ra, si)
-#define GEN_ADDIS(buf, rt, ra, si)	gen_d_form (buf, 15, rt, ra, si)
-#define GEN_LI(buf, rt, si)		GEN_ADDI (buf, rt, 0, si)
-#define GEN_LIS(buf, rt, si)		GEN_ADDIS (buf, rt, 0, si)
-#define GEN_ORI(buf, rt, ra, si)	gen_d_form (buf, 24, rt, ra, si)
-#define GEN_ORIS(buf, rt, ra, si)	gen_d_form (buf, 25, rt, ra, si)
-#define GEN_LWZ(buf, rt, ra, si)	gen_d_form (buf, 32, rt, ra, si)
-#define GEN_STW(buf, rt, ra, si)	gen_d_form (buf, 36, rt, ra, si)
-#define GEN_STWU(buf, rt, ra, si)	gen_d_form (buf, 37, rt, ra, si)
-
-/* Generate a xfx-form instruction in BUF and return the number of bytes
-   written.
-
-   0      6     11         21        31 32
-   | OPCD | RST |    RI    |    XO   |/|  */
-
-static int
-gen_xfx_form (uint32_t *buf, int opcd, int rst, int ri, int xo)
-{
-  uint32_t insn;
-  unsigned int n = ((ri & 0x1f) << 5) | ((ri >> 5) & 0x1f);
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-  gdb_assert ((rst & ~0x1f) == 0);
-  gdb_assert ((xo & ~0x3ff) == 0);
-
-  insn = (rst << 21) | (n << 11) | (xo << 1);
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* Followings are frequently used xfx-form instructions.  */
-
-#define GEN_MFSPR(buf, rt, spr)		gen_xfx_form (buf, 31, rt, spr, 339)
-#define GEN_MTSPR(buf, rt, spr)		gen_xfx_form (buf, 31, rt, spr, 467)
-#define GEN_MFCR(buf, rt)		gen_xfx_form (buf, 31, rt, 0, 19)
-#define GEN_MTCR(buf, rt)		gen_xfx_form (buf, 31, rt, 0x3cf, 144)
-#define GEN_SYNC(buf, L, E)             gen_xfx_form (buf, 31, L & 0x3, \
-						      E & 0xf, 598)
-#define GEN_LWSYNC(buf)			GEN_SYNC (buf, 1, 0)
-
-
-/* Generate a x-form instruction in BUF and return the number of bytes written.
-
-   0      6     11   16   21       31 32
-   | OPCD | RST | RA | RB |   XO   |RC|  */
-
-static int
-gen_x_form (uint32_t *buf, int opcd, int rst, int ra, int rb, int xo, int rc)
-{
-  uint32_t insn;
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-  gdb_assert ((rst & ~0x1f) == 0);
-  gdb_assert ((ra & ~0x1f) == 0);
-  gdb_assert ((rb & ~0x1f) == 0);
-  gdb_assert ((xo & ~0x3ff) == 0);
-  gdb_assert ((rc & ~1) == 0);
-
-  insn = (rst << 21) | (ra << 16) | (rb << 11) | (xo << 1) | rc;
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* Followings are frequently used x-form instructions.  */
-
-#define GEN_OR(buf, ra, rs, rb)		gen_x_form (buf, 31, rs, ra, rb, 444, 0)
-#define GEN_MR(buf, ra, rs)		GEN_OR (buf, ra, rs, rs)
-#define GEN_LWARX(buf, rt, ra, rb)	gen_x_form (buf, 31, rt, ra, rb, 20, 0)
-#define GEN_STWCX(buf, rs, ra, rb)	gen_x_form (buf, 31, rs, ra, rb, 150, 1)
-/* Assume bf = cr7.  */
-#define GEN_CMPW(buf, ra, rb)		gen_x_form (buf, 31, 28, ra, rb, 0, 0)
-
-
-/* Generate a md-form instruction in BUF and return the number of bytes written.
-
-   0      6    11   16   21   27   30 31 32
-   | OPCD | RS | RA | sh | mb | XO |sh|Rc|  */
-
-static int
-gen_md_form (uint32_t *buf, int opcd, int rs, int ra, int sh, int mb,
-	     int xo, int rc)
-{
-  uint32_t insn;
-  unsigned int n = ((mb & 0x1f) << 1) | ((mb >> 5) & 0x1);
-  unsigned int sh0_4 = sh & 0x1f;
-  unsigned int sh5 = (sh >> 5) & 1;
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-  gdb_assert ((rs & ~0x1f) == 0);
-  gdb_assert ((ra & ~0x1f) == 0);
-  gdb_assert ((sh & ~0x3f) == 0);
-  gdb_assert ((mb & ~0x3f) == 0);
-  gdb_assert ((xo & ~0x7) == 0);
-  gdb_assert ((rc & ~0x1) == 0);
-
-  insn = (rs << 21) | (ra << 16) | (sh0_4 << 11) | (n << 5)
-	 | (sh5 << 1) | (xo << 2) | (rc & 1);
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* The following are frequently used md-form instructions.  */
-
-#define GEN_RLDICL(buf, ra, rs ,sh, mb) \
-				gen_md_form (buf, 30, rs, ra, sh, mb, 0, 0)
-#define GEN_RLDICR(buf, ra, rs ,sh, mb) \
-				gen_md_form (buf, 30, rs, ra, sh, mb, 1, 0)
-
-/* Generate a i-form instruction in BUF and return the number of bytes written.
-
-   0      6                          30 31 32
-   | OPCD |            LI            |AA|LK|  */
-
-static int
-gen_i_form (uint32_t *buf, int opcd, int li, int aa, int lk)
-{
-  uint32_t insn;
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-
-  insn = (li & 0x3fffffc) | (aa & 1) | (lk & 1);
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* The following are frequently used i-form instructions.  */
-
-#define GEN_B(buf, li)		gen_i_form (buf, 18, li, 0, 0)
-#define GEN_BL(buf, li)		gen_i_form (buf, 18, li, 0, 1)
-
-/* Generate a b-form instruction in BUF and return the number of bytes written.
-
-   0      6    11   16               30 31 32
-   | OPCD | BO | BI |      BD        |AA|LK|  */
-
-static int
-gen_b_form (uint32_t *buf, int opcd, int bo, int bi, int bd,
-	    int aa, int lk)
-{
-  uint32_t insn;
-
-  gdb_assert ((opcd & ~0x3f) == 0);
-  gdb_assert ((bo & ~0x1f) == 0);
-  gdb_assert ((bi & ~0x1f) == 0);
-
-  insn = (bo << 21) | (bi << 16) | (bd & 0xfffc) | (aa & 1) | (lk & 1);
-  *buf = (opcd << 26) | insn;
-  return 1;
-}
-
-/* The following are frequently used b-form instructions.  */
-/* Assume bi = cr7.  */
-#define GEN_BNE(buf, bd)  gen_b_form (buf, 16, 0x4, (7 << 2) | 2, bd, 0 ,0)
-
-/* GEN_LOAD and GEN_STORE generate 64- or 32-bit load/store for ppc64 or ppc32
-   respectively.  They are primary used for save/restore GPRs in jump-pad,
-   not used for bytecode compiling.  */
-
-#ifdef __powerpc64__
-#define GEN_LOAD(buf, rt, ra, si, is_64)	(is_64 ? \
-						 GEN_LD (buf, rt, ra, si) : \
-						 GEN_LWZ (buf, rt, ra, si))
-#define GEN_STORE(buf, rt, ra, si, is_64)	(is_64 ? \
-						 GEN_STD (buf, rt, ra, si) : \
-						 GEN_STW (buf, rt, ra, si))
-#else
-#define GEN_LOAD(buf, rt, ra, si, is_64)	GEN_LWZ (buf, rt, ra, si)
-#define GEN_STORE(buf, rt, ra, si, is_64)	GEN_STW (buf, rt, ra, si)
-#endif
-
-/* Generate a sequence of instructions to load IMM in the register REG.
-   Write the instructions in BUF and return the number of bytes written.  */
-
-static int
-gen_limm (uint32_t *buf, int reg, uint64_t imm, int is_64)
-{
-  uint32_t *p = buf;
-
-  if ((imm + 32768) < 65536)
-    {
-      /* li	reg, imm[15:0] */
-      p += GEN_LI (p, reg, imm);
-    }
-  else if ((imm >> 32) == 0)
-    {
-      /* lis	reg, imm[31:16]
-	 ori	reg, reg, imm[15:0]
-	 rldicl reg, reg, 0, 32 */
-      p += GEN_LIS (p, reg, (imm >> 16) & 0xffff);
-      if ((imm & 0xffff) != 0)
-	p += GEN_ORI (p, reg, reg, imm & 0xffff);
-      /* Clear upper 32-bit if sign-bit is set.  */
-      if (imm & (1u << 31) && is_64)
-	p += GEN_RLDICL (p, reg, reg, 0, 32);
-    }
-  else
-    {
-      gdb_assert (is_64);
-      /* lis    reg, <imm[63:48]>
-	 ori    reg, reg, <imm[48:32]>
-	 rldicr reg, reg, 32, 31
-	 oris   reg, reg, <imm[31:16]>
-	 ori    reg, reg, <imm[15:0]> */
-      p += GEN_LIS (p, reg, ((imm >> 48) & 0xffff));
-      if (((imm >> 32) & 0xffff) != 0)
-        p += GEN_ORI (p, reg, reg, ((imm >> 32) & 0xffff));
-      p += GEN_RLDICR (p, reg, reg, 32, 31);
-      if (((imm >> 16) & 0xffff) != 0)
-        p += GEN_ORIS (p, reg, reg, ((imm >> 16) & 0xffff));
-      if ((imm & 0xffff) != 0)
-        p += GEN_ORI (p, reg, reg, (imm & 0xffff));
-    }
-
-  return p - buf;
-}
-
-/* Generate a sequence for atomically exchange at location LOCK.
-   This code sequence clobbers r6, r7, r8.  LOCK is the location for
-   the atomic-xchg, OLD_VALUE is expected old value stored in the
-   location, and R_NEW is a register for the new value.  */
-
-static int
-gen_atomic_xchg (uint32_t *buf, CORE_ADDR lock, int old_value, int r_new,
-		 int is_64)
-{
-  const int r_lock = 6;
-  const int r_old = 7;
-  const int r_tmp = 8;
-  uint32_t *p = buf;
-
-  /*
-  1: lwarx   TMP, 0, LOCK
-     cmpwi   TMP, OLD
-     bne     1b
-     stwcx.  NEW, 0, LOCK
-     bne     1b */
-
-  p += gen_limm (p, r_lock, lock, is_64);
-  p += gen_limm (p, r_old, old_value, is_64);
-
-  p += GEN_LWARX (p, r_tmp, 0, r_lock);
-  p += GEN_CMPW (p, r_tmp, r_old);
-  p += GEN_BNE (p, -8);
-  p += GEN_STWCX (p, r_new, 0, r_lock);
-  p += GEN_BNE (p, -16);
-
-  return p - buf;
-}
-
-/* Generate a sequence of instructions for calling a function
-   at address of FN.  Return the number of bytes are written in BUF.  */
-
-static int
-gen_call (uint32_t *buf, CORE_ADDR fn, int is_64, int is_opd)
-{
-  uint32_t *p = buf;
-
-  /* Must be called by r12 for caller to calculate TOC address. */
-  p += gen_limm (p, 12, fn, is_64);
-  if (is_opd)
-    {
-      p += GEN_LOAD (p, 11, 12, 16, is_64);
-      p += GEN_LOAD (p, 2, 12, 8, is_64);
-      p += GEN_LOAD (p, 12, 12, 0, is_64);
-    }
-  p += GEN_MTSPR (p, 12, 9);		/* mtctr  r12 */
-  *p++ = 0x4e800421;			/* bctrl */
-
-  return p - buf;
-}
-
-/* Copy the instruction from OLDLOC to *TO, and update *TO to *TO + size
-   of instruction.  This function is used to adjust pc-relative instructions
-   when copying.  */
-
-static void
-ppc_relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
-{
-  uint32_t insn, op6;
-  long rel, newrel;
-
-  read_inferior_memory (oldloc, (unsigned char *) &insn, 4);
-  op6 = PPC_OP6 (insn);
-
-  if (op6 == 18 && (insn & 2) == 0)
-    {
-      /* branch && AA = 0 */
-      rel = PPC_LI (insn);
-      newrel = (oldloc - *to) + rel;
-
-      /* Out of range. Cannot relocate instruction.  */
-      if (newrel >= (1 << 25) || newrel < -(1 << 25))
-	return;
-
-      insn = (insn & ~0x3fffffc) | (newrel & 0x3fffffc);
-    }
-  else if (op6 == 16 && (insn & 2) == 0)
-    {
-      /* conditional branch && AA = 0 */
-
-      /* If the new relocation is too big for even a 26-bit unconditional
-	 branch, there is nothing we can do.  Just abort.
-
-	 Otherwise, if it can be fit in 16-bit conditional branch, just
-	 copy the instruction and relocate the address.
-
-	 If the it's  big for conditional-branch (16-bit), try to invert the
-	 condition and jump with 26-bit branch.  For example,
-
-	 beq  .Lgoto
-	 INSN1
-
-	 =>
-
-	 bne  1f (+8)
-	 b    .Lgoto
-       1:INSN1
-
-	 After this transform, we are actually jump from *TO+4 instead of *TO,
-	 so check the relocation again because it will be 1-insn farther then
-	 before if *TO is after OLDLOC.
-
-
-	 For BDNZT (or so) is transformed from
-
-	 bdnzt  eq, .Lgoto
-	 INSN1
-
-	 =>
-
-	 bdz    1f (+12)
-	 bf     eq, 1f (+8)
-	 b      .Lgoto
-       1:INSN1
-
-	 See also "BO field encodings".  */
-
-      rel = PPC_BD (insn);
-      newrel = (oldloc - *to) + rel;
-
-      if (newrel < (1 << 15) && newrel >= -(1 << 15))
-	insn = (insn & ~0xfffc) | (newrel & 0xfffc);
-      else if ((PPC_BO (insn) & 0x14) == 0x4 || (PPC_BO (insn) & 0x14) == 0x10)
-	{
-	  newrel -= 4;
-
-	  /* Out of range. Cannot relocate instruction.  */
-	  if (newrel >= (1 << 25) || newrel < -(1 << 25))
-	    return;
-
-	  if ((PPC_BO (insn) & 0x14) == 0x4)
-	    insn ^= (1 << 24);
-	  else if ((PPC_BO (insn) & 0x14) == 0x10)
-	    insn ^= (1 << 22);
-
-	  /* Jump over the unconditional branch.  */
-	  insn = (insn & ~0xfffc) | 0x8;
-	  target_write_memory (*to, (unsigned char *) &insn, 4);
-	  *to += 4;
-
-	  /* Build a unconditional branch and copy LK bit.  */
-	  insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3);
-	  target_write_memory (*to, (unsigned char *) &insn, 4);
-	  *to += 4;
-
-	  return;
-	}
-      else if ((PPC_BO (insn) & 0x14) == 0)
-	{
-	  uint32_t bdnz_insn = (16 << 26) | (0x10 << 21) | 12;
-	  uint32_t bf_insn = (16 << 26) | (0x4 << 21) | 8;
-
-	  newrel -= 8;
-
-	  /* Out of range. Cannot relocate instruction.  */
-	  if (newrel >= (1 << 25) || newrel < -(1 << 25))
-	    return;
-
-	  /* Copy BI field.  */
-	  bf_insn |= (insn & 0x1f0000);
-
-	  /* Invert condition.  */
-	  bdnz_insn |= (insn ^ (1 << 22)) & (1 << 22);
-	  bf_insn |= (insn ^ (1 << 24)) & (1 << 24);
-
-	  target_write_memory (*to, (unsigned char *) &bdnz_insn, 4);
-	  *to += 4;
-	  target_write_memory (*to, (unsigned char *) &bf_insn, 4);
-	  *to += 4;
-
-	  /* Build a unconditional branch and copy LK bit.  */
-	  insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3);
-	  target_write_memory (*to, (unsigned char *) &insn, 4);
-	  *to += 4;
-
-	  return;
-	}
-      else /* (BO & 0x14) == 0x14, branch always.  */
-	{
-	  /* Out of range. Cannot relocate instruction.  */
-	  if (newrel >= (1 << 25) || newrel < -(1 << 25))
-	    return;
-
-	  /* Build a unconditional branch and copy LK bit.  */
-	  insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3);
-	  target_write_memory (*to, (unsigned char *) &insn, 4);
-	  *to += 4;
-
-	  return;
-	}
-    }
-
-  target_write_memory (*to, (unsigned char *) &insn, 4);
-  *to += 4;
-}
-
-/* Implement install_fast_tracepoint_jump_pad of target_ops.
-   See target.h for details.  */
-
-static int
-ppc_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-				      CORE_ADDR collector,
-				      CORE_ADDR lockaddr,
-				      ULONGEST orig_size,
-				      CORE_ADDR *jump_entry,
-				      CORE_ADDR *trampoline,
-				      ULONGEST *trampoline_size,
-				      unsigned char *jjump_pad_insn,
-				      ULONGEST *jjump_pad_insn_size,
-				      CORE_ADDR *adjusted_insn_addr,
-				      CORE_ADDR *adjusted_insn_addr_end,
-				      char *err)
-{
-  uint32_t buf[256];
-  uint32_t *p = buf;
-  int j, offset;
-  CORE_ADDR buildaddr = *jump_entry;
-  const CORE_ADDR entryaddr = *jump_entry;
-  int rsz, min_frame, frame_size, tp_reg;
-#ifdef __powerpc64__
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-  int is_64 = register_size (regcache->tdesc, 0) == 8;
-  int is_opd = is_64 && !is_elfv2_inferior ();
-#else
-  int is_64 = 0, is_opd = 0;
-#endif
-
-#ifdef __powerpc64__
-  if (is_64)
-    {
-      /* Minimum frame size is 32 bytes for ELFv2, and 112 bytes for ELFv1.  */
-      rsz = 8;
-      min_frame = 112;
-      frame_size = (40 * rsz) + min_frame;
-      tp_reg = 13;
-    }
-  else
-    {
-#endif
-      rsz = 4;
-      min_frame = 16;
-      frame_size = (40 * rsz) + min_frame;
-      tp_reg = 2;
-#ifdef __powerpc64__
-    }
-#endif
-
-  /* Stack frame layout for this jump pad,
-
-     High	thread_area (r13/r2)    |
-		tpoint			- collecting_t obj
-		PC/<tpaddr>		| +36
-		CTR			| +35
-		LR			| +34
-		XER			| +33
-		CR			| +32
-		R31			|
-		R29			|
-		...			|
-		R1			| +1
-		R0			- collected registers
-		...			|
-		...			|
-     Low	Back-chain		-
-
-
-     The code flow of this jump pad,
-
-     1. Adjust SP
-     2. Save GPR and SPR
-     3. Prepare argument
-     4. Call gdb_collector
-     5. Restore GPR and SPR
-     6. Restore SP
-     7. Build a jump for back to the program
-     8. Copy/relocate original instruction
-     9. Build a jump for replacing original instruction.  */
-
-  /* Adjust stack pointer.  */
-  if (is_64)
-    p += GEN_STDU (p, 1, 1, -frame_size);		/* stdu   r1,-frame_size(r1) */
-  else
-    p += GEN_STWU (p, 1, 1, -frame_size);		/* stwu   r1,-frame_size(r1) */
-
-  /* Store GPRs.  Save R1 later, because it had just been modified, but
-     we want the original value.  */
-  for (j = 2; j < 32; j++)
-    p += GEN_STORE (p, j, 1, min_frame + j * rsz, is_64);
-  p += GEN_STORE (p, 0, 1, min_frame + 0 * rsz, is_64);
-  /* Set r0 to the original value of r1 before adjusting stack frame,
-     and then save it.  */
-  p += GEN_ADDI (p, 0, 1, frame_size);
-  p += GEN_STORE (p, 0, 1, min_frame + 1 * rsz, is_64);
-
-  /* Save CR, XER, LR, and CTR.  */
-  p += GEN_MFCR (p, 3);					/* mfcr   r3 */
-  p += GEN_MFSPR (p, 4, 1);				/* mfxer  r4 */
-  p += GEN_MFSPR (p, 5, 8);				/* mflr   r5 */
-  p += GEN_MFSPR (p, 6, 9);				/* mfctr  r6 */
-  p += GEN_STORE (p, 3, 1, min_frame + 32 * rsz, is_64);/* std    r3, 32(r1) */
-  p += GEN_STORE (p, 4, 1, min_frame + 33 * rsz, is_64);/* std    r4, 33(r1) */
-  p += GEN_STORE (p, 5, 1, min_frame + 34 * rsz, is_64);/* std    r5, 34(r1) */
-  p += GEN_STORE (p, 6, 1, min_frame + 35 * rsz, is_64);/* std    r6, 35(r1) */
-
-  /* Save PC<tpaddr>  */
-  p += gen_limm (p, 3, tpaddr, is_64);
-  p += GEN_STORE (p, 3, 1, min_frame + 36 * rsz, is_64);
-
-
-  /* Setup arguments to collector.  */
-  /* Set r4 to collected registers.  */
-  p += GEN_ADDI (p, 4, 1, min_frame);
-  /* Set r3 to TPOINT.  */
-  p += gen_limm (p, 3, tpoint, is_64);
-
-  /* Prepare collecting_t object for lock.  */
-  p += GEN_STORE (p, 3, 1, min_frame + 37 * rsz, is_64);
-  p += GEN_STORE (p, tp_reg, 1, min_frame + 38 * rsz, is_64);
-  /* Set R5 to collecting object.  */
-  p += GEN_ADDI (p, 5, 1, 37 * rsz);
-
-  p += GEN_LWSYNC (p);
-  p += gen_atomic_xchg (p, lockaddr, 0, 5, is_64);
-  p += GEN_LWSYNC (p);
-
-  /* Call to collector.  */
-  p += gen_call (p, collector, is_64, is_opd);
-
-  /* Simply write 0 to release the lock.  */
-  p += gen_limm (p, 3, lockaddr, is_64);
-  p += gen_limm (p, 4, 0, is_64);
-  p += GEN_LWSYNC (p);
-  p += GEN_STORE (p, 4, 3, 0, is_64);
-
-  /* Restore stack and registers.  */
-  p += GEN_LOAD (p, 3, 1, min_frame + 32 * rsz, is_64);	/* ld	r3, 32(r1) */
-  p += GEN_LOAD (p, 4, 1, min_frame + 33 * rsz, is_64);	/* ld	r4, 33(r1) */
-  p += GEN_LOAD (p, 5, 1, min_frame + 34 * rsz, is_64);	/* ld	r5, 34(r1) */
-  p += GEN_LOAD (p, 6, 1, min_frame + 35 * rsz, is_64);	/* ld	r6, 35(r1) */
-  p += GEN_MTCR (p, 3);					/* mtcr	  r3 */
-  p += GEN_MTSPR (p, 4, 1);				/* mtxer  r4 */
-  p += GEN_MTSPR (p, 5, 8);				/* mtlr   r5 */
-  p += GEN_MTSPR (p, 6, 9);				/* mtctr  r6 */
-
-  /* Restore GPRs.  */
-  for (j = 2; j < 32; j++)
-    p += GEN_LOAD (p, j, 1, min_frame + j * rsz, is_64);
-  p += GEN_LOAD (p, 0, 1, min_frame + 0 * rsz, is_64);
-  /* Restore SP.  */
-  p += GEN_ADDI (p, 1, 1, frame_size);
-
-  /* Flush instructions to inferior memory.  */
-  target_write_memory (buildaddr, (unsigned char *) buf, (p - buf) * 4);
-
-  /* Now, insert the original instruction to execute in the jump pad.  */
-  *adjusted_insn_addr = buildaddr + (p - buf) * 4;
-  *adjusted_insn_addr_end = *adjusted_insn_addr;
-  ppc_relocate_instruction (adjusted_insn_addr_end, tpaddr);
-
-  /* Verify the relocation size.  If should be 4 for normal copy,
-     8 or 12 for some conditional branch.  */
-  if ((*adjusted_insn_addr_end - *adjusted_insn_addr == 0)
-      || (*adjusted_insn_addr_end - *adjusted_insn_addr > 12))
-    {
-      sprintf (err, "E.Unexpected instruction length = %d"
-		    "when relocate instruction.",
-		    (int) (*adjusted_insn_addr_end - *adjusted_insn_addr));
-      return 1;
-    }
-
-  buildaddr = *adjusted_insn_addr_end;
-  p = buf;
-  /* Finally, write a jump back to the program.  */
-  offset = (tpaddr + 4) - buildaddr;
-  if (offset >= (1 << 25) || offset < -(1 << 25))
-    {
-      sprintf (err, "E.Jump back from jump pad too far from tracepoint "
-		    "(offset 0x%x > 26-bit).", offset);
-      return 1;
-    }
-  /* b <tpaddr+4> */
-  p += GEN_B (p, offset);
-  target_write_memory (buildaddr, (unsigned char *) buf, (p - buf) * 4);
-  *jump_entry = buildaddr + (p - buf) * 4;
-
-  /* The jump pad is now built.  Wire in a jump to our jump pad.  This
-     is always done last (by our caller actually), so that we can
-     install fast tracepoints with threads running.  This relies on
-     the agent's atomic write support.  */
-  offset = entryaddr - tpaddr;
-  if (offset >= (1 << 25) || offset < -(1 << 25))
-    {
-      sprintf (err, "E.Jump back from jump pad too far from tracepoint "
-		    "(offset 0x%x > 26-bit).", offset);
-      return 1;
-    }
-  /* b <jentry> */
-  GEN_B ((uint32_t *) jjump_pad_insn, offset);
-  *jjump_pad_insn_size = 4;
-
-  return 0;
-}
-
-/* Returns the minimum instruction length for installing a tracepoint.  */
-
-static int
-ppc_get_min_fast_tracepoint_insn_len (void)
-{
-  return 4;
-}
-
-/* Emits a given buffer into the target at current_insn_ptr.  Length
-   is in units of 32-bit words.  */
-
-static void
-emit_insns (uint32_t *buf, int n)
-{
-  n = n * sizeof (uint32_t);
-  target_write_memory (current_insn_ptr, (unsigned char *) buf, n);
-  current_insn_ptr += n;
-}
-
-#define __EMIT_ASM(NAME, INSNS)					\
-  do								\
-    {								\
-      extern uint32_t start_bcax_ ## NAME [];			\
-      extern uint32_t end_bcax_ ## NAME [];			\
-      emit_insns (start_bcax_ ## NAME,				\
-		  end_bcax_ ## NAME - start_bcax_ ## NAME);	\
-      __asm__ (".section .text.__ppcbcax\n\t"			\
-	       "start_bcax_" #NAME ":\n\t"			\
-	       INSNS "\n\t"					\
-	       "end_bcax_" #NAME ":\n\t"			\
-	       ".previous\n\t");				\
-    } while (0)
-
-#define _EMIT_ASM(NAME, INSNS)		__EMIT_ASM (NAME, INSNS)
-#define EMIT_ASM(INSNS)			_EMIT_ASM (__LINE__, INSNS)
-
-/*
-
-  Bytecode execution stack frame - 32-bit
-
-	|  LR save area           (SP + 4)
- SP' -> +- Back chain             (SP + 0)
-	|  Save r31   for access saved arguments
-	|  Save r30   for bytecode stack pointer
-	|  Save r4    for incoming argument *value
-	|  Save r3    for incoming argument regs
- r30 -> +- Bytecode execution stack
-	|
-	|  64-byte (8 doublewords) at initial.
-	|  Expand stack as needed.
-	|
-	+-
-        |  Some padding for minimum stack frame and 16-byte alignment.
-        |  16 bytes.
- SP     +- Back-chain (SP')
-
-  initial frame size
-  = 16 + (4 * 4) + 64
-  = 96
-
-   r30 is the stack-pointer for bytecode machine.
-       It should point to next-empty, so we can use LDU for pop.
-   r3  is used for cache of the high part of TOP value.
-       It was the first argument, pointer to regs.
-   r4  is used for cache of the low part of TOP value.
-       It was the second argument, pointer to the result.
-       We should set *result = TOP after leaving this function.
-
- Note:
- * To restore stack at epilogue
-   => sp = r31
- * To check stack is big enough for bytecode execution.
-   => r30 - 8 > SP + 8
- * To return execution result.
-   => 0(r4) = TOP
-
- */
-
-/* Regardless of endian, register 3 is always high part, 4 is low part.
-   These defines are used when the register pair is stored/loaded.
-   Likewise, to simplify code, have a similiar define for 5:6. */
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define TOP_FIRST	"4"
-#define TOP_SECOND	"3"
-#define TMP_FIRST	"6"
-#define TMP_SECOND	"5"
-#else
-#define TOP_FIRST	"3"
-#define TOP_SECOND	"4"
-#define TMP_FIRST	"5"
-#define TMP_SECOND	"6"
-#endif
-
-/* Emit prologue in inferior memory.  See above comments.  */
-
-static void
-ppc_emit_prologue (void)
-{
-  EMIT_ASM (/* Save return address.  */
-	    "mflr  0		\n"
-	    "stw   0, 4(1)	\n"
-	    /* Adjust SP.  96 is the initial frame size.  */
-	    "stwu  1, -96(1)	\n"
-	    /* Save r30 and incoming arguments.  */
-	    "stw   31, 96-4(1)	\n"
-	    "stw   30, 96-8(1)	\n"
-	    "stw   4, 96-12(1)	\n"
-	    "stw   3, 96-16(1)	\n"
-	    /* Point r31 to original r1 for access arguments.  */
-	    "addi  31, 1, 96	\n"
-	    /* Set r30 to pointing stack-top.  */
-	    "addi  30, 1, 64	\n"
-	    /* Initial r3/TOP to 0.  */
-	    "li    3, 0		\n"
-	    "li    4, 0		\n");
-}
-
-/* Emit epilogue in inferior memory.  See above comments.  */
-
-static void
-ppc_emit_epilogue (void)
-{
-  EMIT_ASM (/* *result = TOP */
-	    "lwz   5, -12(31)	\n"
-	    "stw   " TOP_FIRST ", 0(5)	\n"
-	    "stw   " TOP_SECOND ", 4(5)	\n"
-	    /* Restore registers.  */
-	    "lwz   31, -4(31)	\n"
-	    "lwz   30, -8(31)	\n"
-	    /* Restore SP.  */
-	    "lwz   1, 0(1)      \n"
-	    /* Restore LR.  */
-	    "lwz   0, 4(1)	\n"
-	    /* Return 0 for no-error.  */
-	    "li    3, 0		\n"
-	    "mtlr  0		\n"
-	    "blr		\n");
-}
-
-/* TOP = stack[--sp] + TOP  */
-
-static void
-ppc_emit_add (void)
-{
-  EMIT_ASM ("lwzu  " TMP_FIRST ", 8(30)	\n"
-	    "lwz   " TMP_SECOND ", 4(30)\n"
-	    "addc  4, 6, 4	\n"
-	    "adde  3, 5, 3	\n");
-}
-
-/* TOP = stack[--sp] - TOP  */
-
-static void
-ppc_emit_sub (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "subfc  4, 4, 6	\n"
-	    "subfe  3, 3, 5	\n");
-}
-
-/* TOP = stack[--sp] * TOP  */
-
-static void
-ppc_emit_mul (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "mulhwu 7, 6, 4	\n"
-	    "mullw  3, 6, 3	\n"
-	    "mullw  5, 4, 5	\n"
-	    "mullw  4, 6, 4	\n"
-	    "add    3, 5, 3	\n"
-	    "add    3, 7, 3	\n");
-}
-
-/* TOP = stack[--sp] << TOP  */
-
-static void
-ppc_emit_lsh (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "subfic 3, 4, 32\n"		/* r3 = 32 - TOP */
-	    "addi   7, 4, -32\n"	/* r7 = TOP - 32 */
-	    "slw    5, 5, 4\n"		/* Shift high part left */
-	    "slw    4, 6, 4\n"		/* Shift low part left */
-	    "srw    3, 6, 3\n"		/* Shift low to high if shift < 32 */
-	    "slw    7, 6, 7\n"		/* Shift low to high if shift >= 32 */
-	    "or     3, 5, 3\n"
-	    "or     3, 7, 3\n");	/* Assemble high part */
-}
-
-/* Top = stack[--sp] >> TOP
-   (Arithmetic shift right)  */
-
-static void
-ppc_emit_rsh_signed (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "addi   7, 4, -32\n"	/* r7 = TOP - 32 */
-	    "sraw   3, 5, 4\n"		/* Shift high part right */
-	    "cmpwi  7, 1\n"
-	    "blt    0, 1f\n"		/* If shift <= 32, goto 1: */
-	    "sraw   4, 5, 7\n"		/* Shift high to low */
-	    "b      2f\n"
-	    "1:\n"
-	    "subfic 7, 4, 32\n"		/* r7 = 32 - TOP */
-	    "srw    4, 6, 4\n"		/* Shift low part right */
-	    "slw    5, 5, 7\n"		/* Shift high to low */
-	    "or     4, 4, 5\n"		/* Assemble low part */
-	    "2:\n");
-}
-
-/* Top = stack[--sp] >> TOP
-   (Logical shift right)  */
-
-static void
-ppc_emit_rsh_unsigned (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "subfic 3, 4, 32\n"		/* r3 = 32 - TOP */
-	    "addi   7, 4, -32\n"	/* r7 = TOP - 32 */
-	    "srw    6, 6, 4\n"		/* Shift low part right */
-	    "slw    3, 5, 3\n"		/* Shift high to low if shift < 32 */
-	    "srw    7, 5, 7\n"		/* Shift high to low if shift >= 32 */
-	    "or     6, 6, 3\n"
-	    "srw    3, 5, 4\n"		/* Shift high part right */
-	    "or     4, 6, 7\n");	/* Assemble low part */
-}
-
-/* Emit code for signed-extension specified by ARG.  */
-
-static void
-ppc_emit_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM ("extsb  4, 4\n"
-		"srawi 3, 4, 31");
-      break;
-    case 16:
-      EMIT_ASM ("extsh  4, 4\n"
-		"srawi 3, 4, 31");
-      break;
-    case 32:
-      EMIT_ASM ("srawi 3, 4, 31");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-/* Emit code for zero-extension specified by ARG.  */
-
-static void
-ppc_emit_zero_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM ("clrlwi 4,4,24\n"
-		"li 3, 0\n");
-      break;
-    case 16:
-      EMIT_ASM ("clrlwi 4,4,16\n"
-		"li 3, 0\n");
-      break;
-    case 32:
-      EMIT_ASM ("li 3, 0");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-/* TOP = !TOP
-   i.e., TOP = (TOP == 0) ? 1 : 0;  */
-
-static void
-ppc_emit_log_not (void)
-{
-  EMIT_ASM ("or      4, 3, 4	\n"
-	    "cntlzw  4, 4	\n"
-	    "srwi    4, 4, 5	\n"
-	    "li      3, 0	\n");
-}
-
-/* TOP = stack[--sp] & TOP  */
-
-static void
-ppc_emit_bit_and (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "and  4, 6, 4	\n"
-	    "and  3, 5, 3	\n");
-}
-
-/* TOP = stack[--sp] | TOP  */
-
-static void
-ppc_emit_bit_or (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "or  4, 6, 4	\n"
-	    "or  3, 5, 3	\n");
-}
-
-/* TOP = stack[--sp] ^ TOP  */
-
-static void
-ppc_emit_bit_xor (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "xor  4, 6, 4	\n"
-	    "xor  3, 5, 3	\n");
-}
-
-/* TOP = ~TOP
-   i.e., TOP = ~(TOP | TOP)  */
-
-static void
-ppc_emit_bit_not (void)
-{
-  EMIT_ASM ("nor  3, 3, 3	\n"
-	    "nor  4, 4, 4	\n");
-}
-
-/* TOP = stack[--sp] == TOP  */
-
-static void
-ppc_emit_equal (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "xor     4, 6, 4	\n"
-	    "xor     3, 5, 3	\n"
-	    "or      4, 3, 4	\n"
-	    "cntlzw  4, 4	\n"
-	    "srwi    4, 4, 5	\n"
-	    "li      3, 0	\n");
-}
-
-/* TOP = stack[--sp] < TOP
-   (Signed comparison)  */
-
-static void
-ppc_emit_less_signed (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "cmplw   6, 6, 4		\n"
-	    "cmpw    7, 5, 3		\n"
-	    /* CR6 bit 0 = low less and high equal */
-	    "crand   6*4+0, 6*4+0, 7*4+2\n"
-	    /* CR7 bit 0 = (low less and high equal) or high less */
-	    "cror    7*4+0, 7*4+0, 6*4+0\n"
-	    "mfcr    4			\n"
-	    "rlwinm  4, 4, 29, 31, 31	\n"
-	    "li      3, 0		\n");
-}
-
-/* TOP = stack[--sp] < TOP
-   (Unsigned comparison)  */
-
-static void
-ppc_emit_less_unsigned (void)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "cmplw   6, 6, 4		\n"
-	    "cmplw   7, 5, 3		\n"
-	    /* CR6 bit 0 = low less and high equal */
-	    "crand   6*4+0, 6*4+0, 7*4+2\n"
-	    /* CR7 bit 0 = (low less and high equal) or high less */
-	    "cror    7*4+0, 7*4+0, 6*4+0\n"
-	    "mfcr    4			\n"
-	    "rlwinm  4, 4, 29, 31, 31	\n"
-	    "li      3, 0		\n");
-}
-
-/* Access the memory address in TOP in size of SIZE.
-   Zero-extend the read value.  */
-
-static void
-ppc_emit_ref (int size)
-{
-  switch (size)
-    {
-    case 1:
-      EMIT_ASM ("lbz   4, 0(4)\n"
-		"li    3, 0");
-      break;
-    case 2:
-      EMIT_ASM ("lhz   4, 0(4)\n"
-		"li    3, 0");
-      break;
-    case 4:
-      EMIT_ASM ("lwz   4, 0(4)\n"
-		"li    3, 0");
-      break;
-    case 8:
-      if (__BYTE_ORDER == __LITTLE_ENDIAN)
-	EMIT_ASM ("lwz   3, 4(4)\n"
-		  "lwz   4, 0(4)");
-      else
-	EMIT_ASM ("lwz   3, 0(4)\n"
-		  "lwz   4, 4(4)");
-      break;
-    }
-}
-
-/* TOP = NUM  */
-
-static void
-ppc_emit_const (LONGEST num)
-{
-  uint32_t buf[10];
-  uint32_t *p = buf;
-
-  p += gen_limm (p, 3, num >> 32 & 0xffffffff, 0);
-  p += gen_limm (p, 4, num & 0xffffffff, 0);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Set TOP to the value of register REG by calling get_raw_reg function
-   with two argument, collected buffer and register number.  */
-
-static void
-ppc_emit_reg (int reg)
-{
-  uint32_t buf[13];
-  uint32_t *p = buf;
-
-  /* fctx->regs is passed in r3 and then saved in -16(31).  */
-  p += GEN_LWZ (p, 3, 31, -16);
-  p += GEN_LI (p, 4, reg);	/* li	r4, reg */
-  p += gen_call (p, get_raw_reg_func_addr (), 0, 0);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-
-  if (__BYTE_ORDER == __LITTLE_ENDIAN)
-    {
-      EMIT_ASM ("mr 5, 4\n"
-		"mr 4, 3\n"
-		"mr 3, 5\n");
-    }
-}
-
-/* TOP = stack[--sp] */
-
-static void
-ppc_emit_pop (void)
-{
-  EMIT_ASM ("lwzu " TOP_FIRST ", 8(30)	\n"
-	    "lwz " TOP_SECOND ", 4(30)	\n");
-}
-
-/* stack[sp++] = TOP
-
-   Because we may use up bytecode stack, expand 8 doublewords more
-   if needed.  */
-
-static void
-ppc_emit_stack_flush (void)
-{
-  /* Make sure bytecode stack is big enough before push.
-     Otherwise, expand 64-byte more.  */
-
-  EMIT_ASM ("  stw   " TOP_FIRST ", 0(30)	\n"
-	    "  stw   " TOP_SECOND ", 4(30)\n"
-	    "  addi  5, 30, -(8 + 8)	\n"
-	    "  cmpw  7, 5, 1		\n"
-	    "  bgt   7, 1f		\n"
-	    "  stwu  31, -64(1)		\n"
-	    "1:addi  30, 30, -8		\n");
-}
-
-/* Swap TOP and stack[sp-1]  */
-
-static void
-ppc_emit_swap (void)
-{
-  EMIT_ASM ("lwz  " TMP_FIRST ", 8(30)	\n"
-	    "lwz  " TMP_SECOND ", 12(30)	\n"
-	    "stw  " TOP_FIRST ", 8(30)	\n"
-	    "stw  " TOP_SECOND ", 12(30)	\n"
-	    "mr   3, 5		\n"
-	    "mr   4, 6		\n");
-}
-
-/* Discard N elements in the stack.  Also used for ppc64.  */
-
-static void
-ppc_emit_stack_adjust (int n)
-{
-  uint32_t buf[6];
-  uint32_t *p = buf;
-
-  n = n << 3;
-  if ((n >> 15) != 0)
-    {
-      emit_error = 1;
-      return;
-    }
-
-  p += GEN_ADDI (p, 30, 30, n);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Call function FN.  */
-
-static void
-ppc_emit_call (CORE_ADDR fn)
-{
-  uint32_t buf[11];
-  uint32_t *p = buf;
-
-  p += gen_call (p, fn, 0, 0);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* FN's prototype is `LONGEST(*fn)(int)'.
-   TOP = fn (arg1)
-  */
-
-static void
-ppc_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[15];
-  uint32_t *p = buf;
-
-  /* Setup argument.  arg1 is a 16-bit value.  */
-  p += gen_limm (p, 3, (uint32_t) arg1, 0);
-  p += gen_call (p, fn, 0, 0);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-
-  if (__BYTE_ORDER == __LITTLE_ENDIAN)
-    {
-      EMIT_ASM ("mr 5, 4\n"
-		"mr 4, 3\n"
-		"mr 3, 5\n");
-    }
-}
-
-/* FN's prototype is `void(*fn)(int,LONGEST)'.
-   fn (arg1, TOP)
-
-   TOP should be preserved/restored before/after the call.  */
-
-static void
-ppc_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[21];
-  uint32_t *p = buf;
-
-  /* Save TOP.  0(30) is next-empty.  */
-  p += GEN_STW (p, 3, 30, 0);
-  p += GEN_STW (p, 4, 30, 4);
-
-  /* Setup argument.  arg1 is a 16-bit value.  */
-  if (__BYTE_ORDER == __LITTLE_ENDIAN)
-    {
-       p += GEN_MR (p, 5, 4);
-       p += GEN_MR (p, 6, 3);
-    }
-  else
-    {
-       p += GEN_MR (p, 5, 3);
-       p += GEN_MR (p, 6, 4);
-    }
-  p += gen_limm (p, 3, (uint32_t) arg1, 0);
-  p += gen_call (p, fn, 0, 0);
-
-  /* Restore TOP */
-  p += GEN_LWZ (p, 3, 30, 0);
-  p += GEN_LWZ (p, 4, 30, 4);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Note in the following goto ops:
-
-   When emitting goto, the target address is later relocated by
-   write_goto_address.  OFFSET_P is the offset of the branch instruction
-   in the code sequence, and SIZE_P is how to relocate the instruction,
-   recognized by ppc_write_goto_address.  In current implementation,
-   SIZE can be either 24 or 14 for branch of conditional-branch instruction.
- */
-
-/* If TOP is true, goto somewhere.  Otherwise, just fall-through.  */
-
-static void
-ppc_emit_if_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("or.    3, 3, 4	\n"
-	    "lwzu " TOP_FIRST ", 8(30)	\n"
-	    "lwz " TOP_SECOND ", 4(30)	\n"
-	    "1:bne  0, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Unconditional goto.  Also used for ppc64.  */
-
-static void
-ppc_emit_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("1:b	1b");
-
-  if (offset_p)
-    *offset_p = 0;
-  if (size_p)
-    *size_p = 24;
-}
-
-/* Goto if stack[--sp] == TOP  */
-
-static void
-ppc_emit_eq_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("lwzu  " TMP_FIRST ", 8(30)	\n"
-	    "lwz   " TMP_SECOND ", 4(30)	\n"
-	    "xor   4, 6, 4	\n"
-	    "xor   3, 5, 3	\n"
-	    "or.   3, 3, 4	\n"
-	    "lwzu  " TOP_FIRST ", 8(30)	\n"
-	    "lwz   " TOP_SECOND ", 4(30)	\n"
-	    "1:beq 0, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 28;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] != TOP  */
-
-static void
-ppc_emit_ne_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("lwzu  " TMP_FIRST ", 8(30)	\n"
-	    "lwz   " TMP_SECOND ", 4(30)	\n"
-	    "xor   4, 6, 4	\n"
-	    "xor   3, 5, 3	\n"
-	    "or.   3, 3, 4	\n"
-	    "lwzu  " TOP_FIRST ", 8(30)	\n"
-	    "lwz   " TOP_SECOND ", 4(30)	\n"
-	    "1:bne 0, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 28;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] < TOP  */
-
-static void
-ppc_emit_lt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "cmplw   6, 6, 4		\n"
-	    "cmpw    7, 5, 3		\n"
-	    /* CR6 bit 0 = low less and high equal */
-	    "crand   6*4+0, 6*4+0, 7*4+2\n"
-	    /* CR7 bit 0 = (low less and high equal) or high less */
-	    "cror    7*4+0, 7*4+0, 6*4+0\n"
-	    "lwzu    " TOP_FIRST ", 8(30)	\n"
-	    "lwz     " TOP_SECOND ", 4(30)\n"
-	    "1:blt   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 32;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] <= TOP  */
-
-static void
-ppc_emit_le_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "cmplw   6, 6, 4		\n"
-	    "cmpw    7, 5, 3		\n"
-	    /* CR6 bit 0 = low less/equal and high equal */
-	    "crandc   6*4+0, 7*4+2, 6*4+1\n"
-	    /* CR7 bit 0 = (low less/eq and high equal) or high less */
-	    "cror    7*4+0, 7*4+0, 6*4+0\n"
-	    "lwzu    " TOP_FIRST ", 8(30)	\n"
-	    "lwz     " TOP_SECOND ", 4(30)\n"
-	    "1:blt   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 32;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] > TOP  */
-
-static void
-ppc_emit_gt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "cmplw   6, 6, 4		\n"
-	    "cmpw    7, 5, 3		\n"
-	    /* CR6 bit 0 = low greater and high equal */
-	    "crand   6*4+0, 6*4+1, 7*4+2\n"
-	    /* CR7 bit 0 = (low greater and high equal) or high greater */
-	    "cror    7*4+0, 7*4+1, 6*4+0\n"
-	    "lwzu    " TOP_FIRST ", 8(30)	\n"
-	    "lwz     " TOP_SECOND ", 4(30)\n"
-	    "1:blt   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 32;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] >= TOP  */
-
-static void
-ppc_emit_ge_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("lwzu " TMP_FIRST ", 8(30)	\n"
-	    "lwz " TMP_SECOND ", 4(30)	\n"
-	    "cmplw   6, 6, 4		\n"
-	    "cmpw    7, 5, 3		\n"
-	    /* CR6 bit 0 = low ge and high equal */
-	    "crandc  6*4+0, 7*4+2, 6*4+0\n"
-	    /* CR7 bit 0 = (low ge and high equal) or high greater */
-	    "cror    7*4+0, 7*4+1, 6*4+0\n"
-	    "lwzu    " TOP_FIRST ", 8(30)\n"
-	    "lwz     " TOP_SECOND ", 4(30)\n"
-	    "1:blt   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 32;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Relocate previous emitted branch instruction.  FROM is the address
-   of the branch instruction, TO is the goto target address, and SIZE
-   if the value we set by *SIZE_P before.  Currently, it is either
-   24 or 14 of branch and conditional-branch instruction.
-   Also used for ppc64.  */
-
-static void
-ppc_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  long rel = to - from;
-  uint32_t insn;
-  int opcd;
-
-  read_inferior_memory (from, (unsigned char *) &insn, 4);
-  opcd = (insn >> 26) & 0x3f;
-
-  switch (size)
-    {
-    case 14:
-      if (opcd != 16
-	  || (rel >= (1 << 15) || rel < -(1 << 15)))
-	emit_error = 1;
-      insn = (insn & ~0xfffc) | (rel & 0xfffc);
-      break;
-    case 24:
-      if (opcd != 18
-	  || (rel >= (1 << 25) || rel < -(1 << 25)))
-	emit_error = 1;
-      insn = (insn & ~0x3fffffc) | (rel & 0x3fffffc);
-      break;
-    default:
-      emit_error = 1;
-    }
-
-  if (!emit_error)
-    target_write_memory (from, (unsigned char *) &insn, 4);
-}
-
-/* Table of emit ops for 32-bit.  */
-
-static struct emit_ops ppc_emit_ops_impl =
-{
-  ppc_emit_prologue,
-  ppc_emit_epilogue,
-  ppc_emit_add,
-  ppc_emit_sub,
-  ppc_emit_mul,
-  ppc_emit_lsh,
-  ppc_emit_rsh_signed,
-  ppc_emit_rsh_unsigned,
-  ppc_emit_ext,
-  ppc_emit_log_not,
-  ppc_emit_bit_and,
-  ppc_emit_bit_or,
-  ppc_emit_bit_xor,
-  ppc_emit_bit_not,
-  ppc_emit_equal,
-  ppc_emit_less_signed,
-  ppc_emit_less_unsigned,
-  ppc_emit_ref,
-  ppc_emit_if_goto,
-  ppc_emit_goto,
-  ppc_write_goto_address,
-  ppc_emit_const,
-  ppc_emit_call,
-  ppc_emit_reg,
-  ppc_emit_pop,
-  ppc_emit_stack_flush,
-  ppc_emit_zero_ext,
-  ppc_emit_swap,
-  ppc_emit_stack_adjust,
-  ppc_emit_int_call_1,
-  ppc_emit_void_call_2,
-  ppc_emit_eq_goto,
-  ppc_emit_ne_goto,
-  ppc_emit_lt_goto,
-  ppc_emit_le_goto,
-  ppc_emit_gt_goto,
-  ppc_emit_ge_goto
-};
-
-#ifdef __powerpc64__
-
-/*
-
-  Bytecode execution stack frame - 64-bit
-
-	|  LR save area           (SP + 16)
-	|  CR save area           (SP + 8)
- SP' -> +- Back chain             (SP + 0)
-	|  Save r31   for access saved arguments
-	|  Save r30   for bytecode stack pointer
-	|  Save r4    for incoming argument *value
-	|  Save r3    for incoming argument regs
- r30 -> +- Bytecode execution stack
-	|
-	|  64-byte (8 doublewords) at initial.
-	|  Expand stack as needed.
-	|
-	+-
-        |  Some padding for minimum stack frame.
-        |  112 for ELFv1.
- SP     +- Back-chain (SP')
-
-  initial frame size
-  = 112 + (4 * 8) + 64
-  = 208
-
-   r30 is the stack-pointer for bytecode machine.
-       It should point to next-empty, so we can use LDU for pop.
-   r3  is used for cache of TOP value.
-       It was the first argument, pointer to regs.
-   r4  is the second argument, pointer to the result.
-       We should set *result = TOP after leaving this function.
-
- Note:
- * To restore stack at epilogue
-   => sp = r31
- * To check stack is big enough for bytecode execution.
-   => r30 - 8 > SP + 112
- * To return execution result.
-   => 0(r4) = TOP
-
- */
-
-/* Emit prologue in inferior memory.  See above comments.  */
-
-static void
-ppc64v1_emit_prologue (void)
-{
-  /* On ELFv1, function pointers really point to function descriptor,
-     so emit one here.  We don't care about contents of words 1 and 2,
-     so let them just overlap out code.  */
-  uint64_t opd = current_insn_ptr + 8;
-  uint32_t buf[2];
-
-  /* Mind the strict aliasing rules.  */
-  memcpy (buf, &opd, sizeof buf);
-  emit_insns(buf, 2);
-  EMIT_ASM (/* Save return address.  */
-	    "mflr  0		\n"
-	    "std   0, 16(1)	\n"
-	    /* Save r30 and incoming arguments.  */
-	    "std   31, -8(1)	\n"
-	    "std   30, -16(1)	\n"
-	    "std   4, -24(1)	\n"
-	    "std   3, -32(1)	\n"
-	    /* Point r31 to current r1 for access arguments.  */
-	    "mr    31, 1	\n"
-	    /* Adjust SP.  208 is the initial frame size.  */
-	    "stdu  1, -208(1)	\n"
-	    /* Set r30 to pointing stack-top.  */
-	    "addi  30, 1, 168	\n"
-	    /* Initial r3/TOP to 0.  */
-	    "li	   3, 0		\n");
-}
-
-/* Emit prologue in inferior memory.  See above comments.  */
-
-static void
-ppc64v2_emit_prologue (void)
-{
-  EMIT_ASM (/* Save return address.  */
-	    "mflr  0		\n"
-	    "std   0, 16(1)	\n"
-	    /* Save r30 and incoming arguments.  */
-	    "std   31, -8(1)	\n"
-	    "std   30, -16(1)	\n"
-	    "std   4, -24(1)	\n"
-	    "std   3, -32(1)	\n"
-	    /* Point r31 to current r1 for access arguments.  */
-	    "mr    31, 1	\n"
-	    /* Adjust SP.  208 is the initial frame size.  */
-	    "stdu  1, -208(1)	\n"
-	    /* Set r30 to pointing stack-top.  */
-	    "addi  30, 1, 168	\n"
-	    /* Initial r3/TOP to 0.  */
-	    "li	   3, 0		\n");
-}
-
-/* Emit epilogue in inferior memory.  See above comments.  */
-
-static void
-ppc64_emit_epilogue (void)
-{
-  EMIT_ASM (/* Restore SP.  */
-	    "ld    1, 0(1)      \n"
-	    /* *result = TOP */
-	    "ld    4, -24(1)	\n"
-	    "std   3, 0(4)	\n"
-	    /* Restore registers.  */
-	    "ld    31, -8(1)	\n"
-	    "ld    30, -16(1)	\n"
-            /* Restore LR.  */
-	    "ld    0, 16(1)	\n"
-	    /* Return 0 for no-error.  */
-	    "li    3, 0		\n"
-	    "mtlr  0		\n"
-	    "blr		\n");
-}
-
-/* TOP = stack[--sp] + TOP  */
-
-static void
-ppc64_emit_add (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "add  3, 4, 3	\n");
-}
-
-/* TOP = stack[--sp] - TOP  */
-
-static void
-ppc64_emit_sub (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "sub  3, 4, 3	\n");
-}
-
-/* TOP = stack[--sp] * TOP  */
-
-static void
-ppc64_emit_mul (void)
-{
-  EMIT_ASM ("ldu    4, 8(30)	\n"
-	    "mulld  3, 4, 3	\n");
-}
-
-/* TOP = stack[--sp] << TOP  */
-
-static void
-ppc64_emit_lsh (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "sld  3, 4, 3	\n");
-}
-
-/* Top = stack[--sp] >> TOP
-   (Arithmetic shift right)  */
-
-static void
-ppc64_emit_rsh_signed (void)
-{
-  EMIT_ASM ("ldu   4, 8(30)	\n"
-	    "srad  3, 4, 3	\n");
-}
-
-/* Top = stack[--sp] >> TOP
-   (Logical shift right)  */
-
-static void
-ppc64_emit_rsh_unsigned (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "srd  3, 4, 3	\n");
-}
-
-/* Emit code for signed-extension specified by ARG.  */
-
-static void
-ppc64_emit_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM ("extsb  3, 3");
-      break;
-    case 16:
-      EMIT_ASM ("extsh  3, 3");
-      break;
-    case 32:
-      EMIT_ASM ("extsw  3, 3");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-/* Emit code for zero-extension specified by ARG.  */
-
-static void
-ppc64_emit_zero_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM ("rldicl 3,3,0,56");
-      break;
-    case 16:
-      EMIT_ASM ("rldicl 3,3,0,48");
-      break;
-    case 32:
-      EMIT_ASM ("rldicl 3,3,0,32");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-/* TOP = !TOP
-   i.e., TOP = (TOP == 0) ? 1 : 0;  */
-
-static void
-ppc64_emit_log_not (void)
-{
-  EMIT_ASM ("cntlzd  3, 3	\n"
-	    "srdi    3, 3, 6	\n");
-}
-
-/* TOP = stack[--sp] & TOP  */
-
-static void
-ppc64_emit_bit_and (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "and  3, 4, 3	\n");
-}
-
-/* TOP = stack[--sp] | TOP  */
-
-static void
-ppc64_emit_bit_or (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "or   3, 4, 3	\n");
-}
-
-/* TOP = stack[--sp] ^ TOP  */
-
-static void
-ppc64_emit_bit_xor (void)
-{
-  EMIT_ASM ("ldu  4, 8(30)	\n"
-	    "xor  3, 4, 3	\n");
-}
-
-/* TOP = ~TOP
-   i.e., TOP = ~(TOP | TOP)  */
-
-static void
-ppc64_emit_bit_not (void)
-{
-  EMIT_ASM ("nor  3, 3, 3	\n");
-}
-
-/* TOP = stack[--sp] == TOP  */
-
-static void
-ppc64_emit_equal (void)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "xor     3, 3, 4	\n"
-	    "cntlzd  3, 3	\n"
-	    "srdi    3, 3, 6	\n");
-}
-
-/* TOP = stack[--sp] < TOP
-   (Signed comparison)  */
-
-static void
-ppc64_emit_less_signed (void)
-{
-  EMIT_ASM ("ldu     4, 8(30)		\n"
-	    "cmpd    7, 4, 3		\n"
-	    "mfcr    3			\n"
-	    "rlwinm  3, 3, 29, 31, 31	\n");
-}
-
-/* TOP = stack[--sp] < TOP
-   (Unsigned comparison)  */
-
-static void
-ppc64_emit_less_unsigned (void)
-{
-  EMIT_ASM ("ldu     4, 8(30)		\n"
-	    "cmpld   7, 4, 3		\n"
-	    "mfcr    3			\n"
-	    "rlwinm  3, 3, 29, 31, 31	\n");
-}
-
-/* Access the memory address in TOP in size of SIZE.
-   Zero-extend the read value.  */
-
-static void
-ppc64_emit_ref (int size)
-{
-  switch (size)
-    {
-    case 1:
-      EMIT_ASM ("lbz   3, 0(3)");
-      break;
-    case 2:
-      EMIT_ASM ("lhz   3, 0(3)");
-      break;
-    case 4:
-      EMIT_ASM ("lwz   3, 0(3)");
-      break;
-    case 8:
-      EMIT_ASM ("ld    3, 0(3)");
-      break;
-    }
-}
-
-/* TOP = NUM  */
-
-static void
-ppc64_emit_const (LONGEST num)
-{
-  uint32_t buf[5];
-  uint32_t *p = buf;
-
-  p += gen_limm (p, 3, num, 1);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Set TOP to the value of register REG by calling get_raw_reg function
-   with two argument, collected buffer and register number.  */
-
-static void
-ppc64v1_emit_reg (int reg)
-{
-  uint32_t buf[15];
-  uint32_t *p = buf;
-
-  /* fctx->regs is passed in r3 and then saved in 176(1).  */
-  p += GEN_LD (p, 3, 31, -32);
-  p += GEN_LI (p, 4, reg);
-  p += GEN_STD (p, 2, 1, 40);	/* Save TOC.  */
-  p += gen_call (p, get_raw_reg_func_addr (), 1, 1);
-  p += GEN_LD (p, 2, 1, 40);	/* Restore TOC.  */
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Likewise, for ELFv2.  */
-
-static void
-ppc64v2_emit_reg (int reg)
-{
-  uint32_t buf[12];
-  uint32_t *p = buf;
-
-  /* fctx->regs is passed in r3 and then saved in 176(1).  */
-  p += GEN_LD (p, 3, 31, -32);
-  p += GEN_LI (p, 4, reg);
-  p += GEN_STD (p, 2, 1, 24);	/* Save TOC.  */
-  p += gen_call (p, get_raw_reg_func_addr (), 1, 0);
-  p += GEN_LD (p, 2, 1, 24);	/* Restore TOC.  */
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* TOP = stack[--sp] */
-
-static void
-ppc64_emit_pop (void)
-{
-  EMIT_ASM ("ldu  3, 8(30)");
-}
-
-/* stack[sp++] = TOP
-
-   Because we may use up bytecode stack, expand 8 doublewords more
-   if needed.  */
-
-static void
-ppc64_emit_stack_flush (void)
-{
-  /* Make sure bytecode stack is big enough before push.
-     Otherwise, expand 64-byte more.  */
-
-  EMIT_ASM ("  std   3, 0(30)		\n"
-	    "  addi  4, 30, -(112 + 8)	\n"
-	    "  cmpd  7, 4, 1		\n"
-	    "  bgt   7, 1f		\n"
-	    "  stdu  31, -64(1)		\n"
-	    "1:addi  30, 30, -8		\n");
-}
-
-/* Swap TOP and stack[sp-1]  */
-
-static void
-ppc64_emit_swap (void)
-{
-  EMIT_ASM ("ld   4, 8(30)	\n"
-	    "std  3, 8(30)	\n"
-	    "mr   3, 4		\n");
-}
-
-/* Call function FN - ELFv1.  */
-
-static void
-ppc64v1_emit_call (CORE_ADDR fn)
-{
-  uint32_t buf[13];
-  uint32_t *p = buf;
-
-  p += GEN_STD (p, 2, 1, 40);	/* Save TOC.  */
-  p += gen_call (p, fn, 1, 1);
-  p += GEN_LD (p, 2, 1, 40);	/* Restore TOC.  */
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Call function FN - ELFv2.  */
-
-static void
-ppc64v2_emit_call (CORE_ADDR fn)
-{
-  uint32_t buf[10];
-  uint32_t *p = buf;
-
-  p += GEN_STD (p, 2, 1, 24);	/* Save TOC.  */
-  p += gen_call (p, fn, 1, 0);
-  p += GEN_LD (p, 2, 1, 24);	/* Restore TOC.  */
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* FN's prototype is `LONGEST(*fn)(int)'.
-   TOP = fn (arg1)
-  */
-
-static void
-ppc64v1_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[13];
-  uint32_t *p = buf;
-
-  /* Setup argument.  arg1 is a 16-bit value.  */
-  p += gen_limm (p, 3, arg1, 1);
-  p += GEN_STD (p, 2, 1, 40);	/* Save TOC.  */
-  p += gen_call (p, fn, 1, 1);
-  p += GEN_LD (p, 2, 1, 40);	/* Restore TOC.  */
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Likewise for ELFv2.  */
-
-static void
-ppc64v2_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[10];
-  uint32_t *p = buf;
-
-  /* Setup argument.  arg1 is a 16-bit value.  */
-  p += gen_limm (p, 3, arg1, 1);
-  p += GEN_STD (p, 2, 1, 24);	/* Save TOC.  */
-  p += gen_call (p, fn, 1, 0);
-  p += GEN_LD (p, 2, 1, 24);	/* Restore TOC.  */
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* FN's prototype is `void(*fn)(int,LONGEST)'.
-   fn (arg1, TOP)
-
-   TOP should be preserved/restored before/after the call.  */
-
-static void
-ppc64v1_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[17];
-  uint32_t *p = buf;
-
-  /* Save TOP.  0(30) is next-empty.  */
-  p += GEN_STD (p, 3, 30, 0);
-
-  /* Setup argument.  arg1 is a 16-bit value.  */
-  p += GEN_MR (p, 4, 3);		/* mr	r4, r3 */
-  p += gen_limm (p, 3, arg1, 1);
-  p += GEN_STD (p, 2, 1, 40);	/* Save TOC.  */
-  p += gen_call (p, fn, 1, 1);
-  p += GEN_LD (p, 2, 1, 40);	/* Restore TOC.  */
-
-  /* Restore TOP */
-  p += GEN_LD (p, 3, 30, 0);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* Likewise for ELFv2.  */
-
-static void
-ppc64v2_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  uint32_t buf[14];
-  uint32_t *p = buf;
-
-  /* Save TOP.  0(30) is next-empty.  */
-  p += GEN_STD (p, 3, 30, 0);
-
-  /* Setup argument.  arg1 is a 16-bit value.  */
-  p += GEN_MR (p, 4, 3);		/* mr	r4, r3 */
-  p += gen_limm (p, 3, arg1, 1);
-  p += GEN_STD (p, 2, 1, 24);	/* Save TOC.  */
-  p += gen_call (p, fn, 1, 0);
-  p += GEN_LD (p, 2, 1, 24);	/* Restore TOC.  */
-
-  /* Restore TOP */
-  p += GEN_LD (p, 3, 30, 0);
-
-  emit_insns (buf, p - buf);
-  gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf)));
-}
-
-/* If TOP is true, goto somewhere.  Otherwise, just fall-through.  */
-
-static void
-ppc64_emit_if_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("cmpdi  7, 3, 0	\n"
-	    "ldu    3, 8(30)	\n"
-	    "1:bne  7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 8;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] == TOP  */
-
-static void
-ppc64_emit_eq_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "cmpd    7, 4, 3	\n"
-	    "ldu     3, 8(30)	\n"
-	    "1:beq   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] != TOP  */
-
-static void
-ppc64_emit_ne_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "cmpd    7, 4, 3	\n"
-	    "ldu     3, 8(30)	\n"
-	    "1:bne   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] < TOP  */
-
-static void
-ppc64_emit_lt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "cmpd    7, 4, 3	\n"
-	    "ldu     3, 8(30)	\n"
-	    "1:blt   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] <= TOP  */
-
-static void
-ppc64_emit_le_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "cmpd    7, 4, 3	\n"
-	    "ldu     3, 8(30)	\n"
-	    "1:ble   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] > TOP  */
-
-static void
-ppc64_emit_gt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "cmpd    7, 4, 3	\n"
-	    "ldu     3, 8(30)	\n"
-	    "1:bgt   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Goto if stack[--sp] >= TOP  */
-
-static void
-ppc64_emit_ge_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM ("ldu     4, 8(30)	\n"
-	    "cmpd    7, 4, 3	\n"
-	    "ldu     3, 8(30)	\n"
-	    "1:bge   7, 1b	\n");
-
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 14;
-}
-
-/* Table of emit ops for 64-bit ELFv1.  */
-
-static struct emit_ops ppc64v1_emit_ops_impl =
-{
-  ppc64v1_emit_prologue,
-  ppc64_emit_epilogue,
-  ppc64_emit_add,
-  ppc64_emit_sub,
-  ppc64_emit_mul,
-  ppc64_emit_lsh,
-  ppc64_emit_rsh_signed,
-  ppc64_emit_rsh_unsigned,
-  ppc64_emit_ext,
-  ppc64_emit_log_not,
-  ppc64_emit_bit_and,
-  ppc64_emit_bit_or,
-  ppc64_emit_bit_xor,
-  ppc64_emit_bit_not,
-  ppc64_emit_equal,
-  ppc64_emit_less_signed,
-  ppc64_emit_less_unsigned,
-  ppc64_emit_ref,
-  ppc64_emit_if_goto,
-  ppc_emit_goto,
-  ppc_write_goto_address,
-  ppc64_emit_const,
-  ppc64v1_emit_call,
-  ppc64v1_emit_reg,
-  ppc64_emit_pop,
-  ppc64_emit_stack_flush,
-  ppc64_emit_zero_ext,
-  ppc64_emit_swap,
-  ppc_emit_stack_adjust,
-  ppc64v1_emit_int_call_1,
-  ppc64v1_emit_void_call_2,
-  ppc64_emit_eq_goto,
-  ppc64_emit_ne_goto,
-  ppc64_emit_lt_goto,
-  ppc64_emit_le_goto,
-  ppc64_emit_gt_goto,
-  ppc64_emit_ge_goto
-};
-
-/* Table of emit ops for 64-bit ELFv2.  */
-
-static struct emit_ops ppc64v2_emit_ops_impl =
-{
-  ppc64v2_emit_prologue,
-  ppc64_emit_epilogue,
-  ppc64_emit_add,
-  ppc64_emit_sub,
-  ppc64_emit_mul,
-  ppc64_emit_lsh,
-  ppc64_emit_rsh_signed,
-  ppc64_emit_rsh_unsigned,
-  ppc64_emit_ext,
-  ppc64_emit_log_not,
-  ppc64_emit_bit_and,
-  ppc64_emit_bit_or,
-  ppc64_emit_bit_xor,
-  ppc64_emit_bit_not,
-  ppc64_emit_equal,
-  ppc64_emit_less_signed,
-  ppc64_emit_less_unsigned,
-  ppc64_emit_ref,
-  ppc64_emit_if_goto,
-  ppc_emit_goto,
-  ppc_write_goto_address,
-  ppc64_emit_const,
-  ppc64v2_emit_call,
-  ppc64v2_emit_reg,
-  ppc64_emit_pop,
-  ppc64_emit_stack_flush,
-  ppc64_emit_zero_ext,
-  ppc64_emit_swap,
-  ppc_emit_stack_adjust,
-  ppc64v2_emit_int_call_1,
-  ppc64v2_emit_void_call_2,
-  ppc64_emit_eq_goto,
-  ppc64_emit_ne_goto,
-  ppc64_emit_lt_goto,
-  ppc64_emit_le_goto,
-  ppc64_emit_gt_goto,
-  ppc64_emit_ge_goto
-};
-
-#endif
-
-/* Implementation of linux_target_ops method "emit_ops".  */
-
-static struct emit_ops *
-ppc_emit_ops (void)
-{
-#ifdef __powerpc64__
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
-  if (register_size (regcache->tdesc, 0) == 8)
-    {
-      if (is_elfv2_inferior ())
-        return &ppc64v2_emit_ops_impl;
-      else
-        return &ppc64v1_emit_ops_impl;
-    }
-#endif
-  return &ppc_emit_ops_impl;
-}
-
-/* Implementation of linux_target_ops method "get_ipa_tdesc_idx".  */
-
-static int
-ppc_get_ipa_tdesc_idx (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-  const struct target_desc *tdesc = regcache->tdesc;
-
-#ifdef __powerpc64__
-  if (tdesc == tdesc_powerpc_64l)
-    return PPC_TDESC_BASE;
-  if (tdesc == tdesc_powerpc_altivec64l)
-    return PPC_TDESC_ALTIVEC;
-  if (tdesc == tdesc_powerpc_vsx64l)
-    return PPC_TDESC_VSX;
-  if (tdesc == tdesc_powerpc_isa205_64l)
-    return PPC_TDESC_ISA205;
-  if (tdesc == tdesc_powerpc_isa205_altivec64l)
-    return PPC_TDESC_ISA205_ALTIVEC;
-  if (tdesc == tdesc_powerpc_isa205_vsx64l)
-    return PPC_TDESC_ISA205_VSX;
-  if (tdesc == tdesc_powerpc_isa205_ppr_dscr_vsx64l)
-    return PPC_TDESC_ISA205_PPR_DSCR_VSX;
-  if (tdesc == tdesc_powerpc_isa207_vsx64l)
-    return PPC_TDESC_ISA207_VSX;
-  if (tdesc == tdesc_powerpc_isa207_htm_vsx64l)
-    return PPC_TDESC_ISA207_HTM_VSX;
-#endif
-
-  if (tdesc == tdesc_powerpc_32l)
-    return PPC_TDESC_BASE;
-  if (tdesc == tdesc_powerpc_altivec32l)
-    return PPC_TDESC_ALTIVEC;
-  if (tdesc == tdesc_powerpc_vsx32l)
-    return PPC_TDESC_VSX;
-  if (tdesc == tdesc_powerpc_isa205_32l)
-    return PPC_TDESC_ISA205;
-  if (tdesc == tdesc_powerpc_isa205_altivec32l)
-    return PPC_TDESC_ISA205_ALTIVEC;
-  if (tdesc == tdesc_powerpc_isa205_vsx32l)
-    return PPC_TDESC_ISA205_VSX;
-  if (tdesc == tdesc_powerpc_isa205_ppr_dscr_vsx32l)
-    return PPC_TDESC_ISA205_PPR_DSCR_VSX;
-  if (tdesc == tdesc_powerpc_isa207_vsx32l)
-    return PPC_TDESC_ISA207_VSX;
-  if (tdesc == tdesc_powerpc_isa207_htm_vsx32l)
-    return PPC_TDESC_ISA207_HTM_VSX;
-  if (tdesc == tdesc_powerpc_e500l)
-    return PPC_TDESC_E500;
-
-  return 0;
-}
-
-struct linux_target_ops the_low_target = {
-  ppc_arch_setup,
-  ppc_regs_info,
-  ppc_cannot_fetch_register,
-  ppc_cannot_store_register,
-  NULL, /* fetch_register */
-  ppc_get_pc,
-  ppc_set_pc,
-  NULL, /* breakpoint_kind_from_pc */
-  ppc_sw_breakpoint_from_kind,
-  NULL,
-  0,
-  ppc_breakpoint_at,
-  ppc_supports_z_point_type,
-  ppc_insert_point,
-  ppc_remove_point,
-  NULL,
-  NULL,
-  ppc_collect_ptrace_register,
-  ppc_supply_ptrace_register,
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  ppc_supports_tracepoints,
-  ppc_get_thread_area,
-  ppc_install_fast_tracepoint_jump_pad,
-  ppc_emit_ops,
-  ppc_get_min_fast_tracepoint_insn_len,
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  ppc_supports_hardware_single_step,
-  NULL, /* get_syscall_trapinfo */
-  ppc_get_ipa_tdesc_idx,
-};
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-
-  init_registers_powerpc_32l ();
-  init_registers_powerpc_altivec32l ();
-  init_registers_powerpc_vsx32l ();
-  init_registers_powerpc_isa205_32l ();
-  init_registers_powerpc_isa205_altivec32l ();
-  init_registers_powerpc_isa205_vsx32l ();
-  init_registers_powerpc_isa205_ppr_dscr_vsx32l ();
-  init_registers_powerpc_isa207_vsx32l ();
-  init_registers_powerpc_isa207_htm_vsx32l ();
-  init_registers_powerpc_e500l ();
-#if __powerpc64__
-  init_registers_powerpc_64l ();
-  init_registers_powerpc_altivec64l ();
-  init_registers_powerpc_vsx64l ();
-  init_registers_powerpc_isa205_64l ();
-  init_registers_powerpc_isa205_altivec64l ();
-  init_registers_powerpc_isa205_vsx64l ();
-  init_registers_powerpc_isa205_ppr_dscr_vsx64l ();
-  init_registers_powerpc_isa207_vsx64l ();
-  init_registers_powerpc_isa207_htm_vsx64l ();
-#endif
-
-  initialize_regsets_info (&ppc_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ppc-tdesc-init.h ./gdb/gdbserver/linux-ppc-tdesc-init.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-ppc-tdesc-init.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-ppc-tdesc-init.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,106 +0,0 @@
-/* Low level support for ppc, shared between gdbserver and IPA.
-
-   Copyright (C) 2016-2020 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 GDBSERVER_LINUX_PPC_TDESC_INIT_H
-#define GDBSERVER_LINUX_PPC_TDESC_INIT_H
-
-/* Note: since IPA obviously knows what ABI it's running on (32 vs 64),
-   it's sufficient to pass only the register set here.  This, together with
-   the ABI known at IPA compile time, maps to a tdesc.  */
-
-enum ppc_linux_tdesc {
-  PPC_TDESC_BASE,
-  PPC_TDESC_ALTIVEC,
-  PPC_TDESC_CELL,  /* No longer used, but kept to avoid ABI changes.  */
-  PPC_TDESC_VSX,
-  PPC_TDESC_ISA205,
-  PPC_TDESC_ISA205_ALTIVEC,
-  PPC_TDESC_ISA205_VSX,
-  PPC_TDESC_ISA205_PPR_DSCR_VSX,
-  PPC_TDESC_ISA207_VSX,
-  PPC_TDESC_ISA207_HTM_VSX,
-  PPC_TDESC_E500,
-};
-
-#if !defined __powerpc64__ || !defined IN_PROCESS_AGENT
-
-/* Defined in auto-generated file powerpc-32l.c.  */
-void init_registers_powerpc_32l (void);
-
-/* Defined in auto-generated file powerpc-altivec32l.c.  */
-void init_registers_powerpc_altivec32l (void);
-
-/* Defined in auto-generated file powerpc-vsx32l.c.  */
-void init_registers_powerpc_vsx32l (void);
-
-/* Defined in auto-generated file powerpc-isa205-32l.c.  */
-void init_registers_powerpc_isa205_32l (void);
-
-/* Defined in auto-generated file powerpc-isa205-altivec32l.c.  */
-void init_registers_powerpc_isa205_altivec32l (void);
-
-/* Defined in auto-generated file powerpc-isa205-vsx32l.c.  */
-void init_registers_powerpc_isa205_vsx32l (void);
-
-/* Defined in auto-generated file powerpc-isa205-ppr-dscr-vsx32l.c.  */
-void init_registers_powerpc_isa205_ppr_dscr_vsx32l (void);
-
-/* Defined in auto-generated file powerpc-isa207-vsx32l.c.  */
-void init_registers_powerpc_isa207_vsx32l (void);
-
-/* Defined in auto-generated file powerpc-isa207-htm-vsx32l.c.  */
-void init_registers_powerpc_isa207_htm_vsx32l (void);
-
-/* Defined in auto-generated file powerpc-e500l.c.  */
-void init_registers_powerpc_e500l (void);
-
-#endif
-
-#if defined __powerpc64__
-
-/* Defined in auto-generated file powerpc-64l.c.  */
-void init_registers_powerpc_64l (void);
-
-/* Defined in auto-generated file powerpc-altivec64l.c.  */
-void init_registers_powerpc_altivec64l (void);
-
-/* Defined in auto-generated file powerpc-vsx64l.c.  */
-void init_registers_powerpc_vsx64l (void);
-
-/* Defined in auto-generated file powerpc-isa205-64l.c.  */
-void init_registers_powerpc_isa205_64l (void);
-
-/* Defined in auto-generated file powerpc-isa205-altivec64l.c.  */
-void init_registers_powerpc_isa205_altivec64l (void);
-
-/* Defined in auto-generated file powerpc-isa205-vsx64l.c.  */
-void init_registers_powerpc_isa205_vsx64l (void);
-
-/* Defined in auto-generated file powerpc-isa205-ppr-dscr-vsx64l.c.  */
-void init_registers_powerpc_isa205_ppr_dscr_vsx64l (void);
-
-/* Defined in auto-generated file powerpc-isa207-vsx64l.c.  */
-void init_registers_powerpc_isa207_vsx64l (void);
-
-/* Defined in auto-generated file powerpc-isa207-htm-vsx64l.c.  */
-void init_registers_powerpc_isa207_htm_vsx64l (void);
-
-#endif
-
-#endif /* GDBSERVER_LINUX_PPC_TDESC_INIT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-s390-ipa.c ./gdb/gdbserver/linux-s390-ipa.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-s390-ipa.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-s390-ipa.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,463 +0,0 @@
-/* GNU/Linux S/390 specific low level interface, for the in-process
-   agent library for GDB.
-
-   Copyright (C) 2016-2020 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 "server.h"
-#include <sys/mman.h>
-#include "tracepoint.h"
-#include "linux-s390-tdesc.h"
-#include <elf.h>
-#ifdef HAVE_GETAUXVAL
-#include <sys/auxv.h>
-#endif
-
-#define FT_FPR(x) (0x000 + (x) * 0x10)
-#define FT_VR(x) (0x000 + (x) * 0x10)
-#define FT_VR_L(x) (0x008 + (x) * 0x10)
-#define FT_GPR(x) (0x200 + (x) * 8)
-#define FT_GPR_U(x) (0x200 + (x) * 8)
-#define FT_GPR_L(x) (0x204 + (x) * 8)
-#define FT_GPR(x) (0x200 + (x) * 8)
-#define FT_ACR(x) (0x280 + (x) * 4)
-#define FT_PSWM 0x2c0
-#define FT_PSWM_U 0x2c0
-#define FT_PSWA 0x2c8
-#define FT_PSWA_L 0x2cc
-#define FT_FPC 0x2d0
-
-/* Mappings between registers collected by the jump pad and GDB's register
-   array layout used by regcache.
-
-   See linux-s390-low.c (s390_install_fast_tracepoint_jump_pad) for more
-   details.  */
-
-#ifndef __s390x__
-
-/* Used for s390-linux32, s390-linux32v1, s390-linux32v2.  */
-
-static const int s390_linux32_ft_collect_regmap[] = {
-  /* 32-bit PSWA and PSWM.  */
-  FT_PSWM_U, FT_PSWA_L,
-  /* 32-bit GPRs (mapped to lower halves of 64-bit slots).  */
-  FT_GPR_L (0), FT_GPR_L (1), FT_GPR_L (2), FT_GPR_L (3),
-  FT_GPR_L (4), FT_GPR_L (5), FT_GPR_L (6), FT_GPR_L (7),
-  FT_GPR_L (8), FT_GPR_L (9), FT_GPR_L (10), FT_GPR_L (11),
-  FT_GPR_L (12), FT_GPR_L (13), FT_GPR_L (14), FT_GPR_L (15),
-  /* ACRs */
-  FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
-  FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
-  FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
-  FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
-  /* FPRs (mapped to upper halves of 128-bit VR slots).  */
-  FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
-  FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
-  FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
-  FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
-  /* orig_r2, last_break, system_call */
-  -1, -1, -1,
-};
-
-/* Used for s390-linux64, s390-linux64v1, s390-linux64v2, s390-vx-linux64.  */
-
-static const int s390_linux64_ft_collect_regmap[] = {
-  /* 32-bit PSWA and PSWM.  */
-  FT_PSWM_U, FT_PSWA_L,
-  /* 32-bit halves of 64-bit GPRs.  */
-  FT_GPR_U (0), FT_GPR_L (0),
-  FT_GPR_U (1), FT_GPR_L (1),
-  FT_GPR_U (2), FT_GPR_L (2),
-  FT_GPR_U (3), FT_GPR_L (3),
-  FT_GPR_U (4), FT_GPR_L (4),
-  FT_GPR_U (5), FT_GPR_L (5),
-  FT_GPR_U (6), FT_GPR_L (6),
-  FT_GPR_U (7), FT_GPR_L (7),
-  FT_GPR_U (8), FT_GPR_L (8),
-  FT_GPR_U (9), FT_GPR_L (9),
-  FT_GPR_U (10), FT_GPR_L (10),
-  FT_GPR_U (11), FT_GPR_L (11),
-  FT_GPR_U (12), FT_GPR_L (12),
-  FT_GPR_U (13), FT_GPR_L (13),
-  FT_GPR_U (14), FT_GPR_L (14),
-  FT_GPR_U (15), FT_GPR_L (15),
-  /* ACRs */
-  FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
-  FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
-  FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
-  FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
-  /* FPRs (mapped to upper halves of 128-bit VR slots).  */
-  FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
-  FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
-  FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
-  FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
-  /* orig_r2, last_break, system_call */
-  -1, -1, -1,
-  /* Lower halves of 128-bit VRs. */
-  FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
-  FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
-  FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
-  FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
-  /* And the next 16 VRs.  */
-  FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
-  FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
-  FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
-  FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
-};
-
-/* Used for s390-te-linux64, s390-tevx-linux64, and s390-gs-linux64.  */
-
-static const int s390_te_linux64_ft_collect_regmap[] = {
-  /* 32-bit PSWA and PSWM.  */
-  FT_PSWM_U, FT_PSWA_L,
-  /* 32-bit halves of 64-bit GPRs.  */
-  FT_GPR_U (0), FT_GPR_L (0),
-  FT_GPR_U (1), FT_GPR_L (1),
-  FT_GPR_U (2), FT_GPR_L (2),
-  FT_GPR_U (3), FT_GPR_L (3),
-  FT_GPR_U (4), FT_GPR_L (4),
-  FT_GPR_U (5), FT_GPR_L (5),
-  FT_GPR_U (6), FT_GPR_L (6),
-  FT_GPR_U (7), FT_GPR_L (7),
-  FT_GPR_U (8), FT_GPR_L (8),
-  FT_GPR_U (9), FT_GPR_L (9),
-  FT_GPR_U (10), FT_GPR_L (10),
-  FT_GPR_U (11), FT_GPR_L (11),
-  FT_GPR_U (12), FT_GPR_L (12),
-  FT_GPR_U (13), FT_GPR_L (13),
-  FT_GPR_U (14), FT_GPR_L (14),
-  FT_GPR_U (15), FT_GPR_L (15),
-  /* ACRs */
-  FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
-  FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
-  FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
-  FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
-  /* FPRs (mapped to upper halves of 128-bit VR slots).  */
-  FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
-  FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
-  FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
-  FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
-  /* orig_r2, last_break, system_call */
-  -1, -1, -1,
-  /* TDB */
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  /* Lower halves of 128-bit VRs. */
-  FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
-  FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
-  FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
-  FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
-  /* And the next 16 VRs.  */
-  FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
-  FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
-  FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
-  FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
-};
-
-#else /* __s390x__ */
-
-/* Used for s390x-linux64, s390x-linux64v1, s390x-linux64v2, s390x-vx-linux64.  */
-
-static const int s390x_ft_collect_regmap[] = {
-  /* 64-bit PSWA and PSWM.  */
-  FT_PSWM, FT_PSWA,
-  /* 64-bit GPRs.  */
-  FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3),
-  FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7),
-  FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11),
-  FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15),
-  /* ACRs */
-  FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
-  FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
-  FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
-  FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
-  /* FPRs (mapped to upper halves of 128-bit VR slots).  */
-  FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
-  FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
-  FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
-  FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
-  /* orig_r2, last_break, system_call */
-  -1, -1, -1,
-  /* Lower halves of 128-bit VRs. */
-  FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
-  FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
-  FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
-  FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
-  /* And the next 16 VRs.  */
-  FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
-  FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
-  FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
-  FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
-};
-
-/* Used for s390x-te-linux64, s390x-tevx-linux64, and
-   s390x-gs-linux64.  */
-
-static const int s390x_te_ft_collect_regmap[] = {
-  /* 64-bit PSWA and PSWM.  */
-  FT_PSWM, FT_PSWA,
-  /* 64-bit GPRs.  */
-  FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3),
-  FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7),
-  FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11),
-  FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15),
-  /* ACRs */
-  FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
-  FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
-  FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
-  FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
-  /* FPRs (mapped to upper halves of 128-bit VR slots).  */
-  FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
-  FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
-  FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
-  FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
-  /* orig_r2, last_break, system_call */
-  -1, -1, -1,
-  /* TDB */
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  -1, -1, -1, -1,
-  /* Lower halves of 128-bit VRs. */
-  FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
-  FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
-  FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
-  FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
-  /* And the next 16 VRs.  */
-  FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
-  FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
-  FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
-  FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
-};
-
-#endif
-
-/* Initialized by get_ipa_tdesc according to the tdesc in use.  */
-
-static const int *s390_regmap;
-static int s390_regnum;
-
-/* Fill in REGCACHE with registers saved by the jump pad in BUF.  */
-
-void
-supply_fast_tracepoint_registers (struct regcache *regcache,
-				  const unsigned char *buf)
-{
-  int i;
-  for (i = 0; i < s390_regnum; i++)
-    if (s390_regmap[i] != -1)
-      supply_register (regcache, i, ((char *) buf) + s390_regmap[i]);
-}
-
-ULONGEST
-get_raw_reg (const unsigned char *raw_regs, int regnum)
-{
-  int offset;
-  if (regnum >= s390_regnum)
-    return 0;
-  offset = s390_regmap[regnum];
-  if (offset == -1)
-    return 0;
-
-  /* The regnums are variable, better to figure out size by FT offset.  */
-
-  /* 64-bit ones.  */
-  if (offset < FT_VR(16)
-#ifdef __s390x__
-      || (offset >= FT_GPR(0) && offset < FT_ACR(0))
-      || offset == FT_PSWM
-      || offset == FT_PSWA
-#endif
-     )
-    return *(uint64_t *) (raw_regs + offset);
-
-  if (offset >= FT_ACR(0 && offset < FT_PSWM)
-      || offset == FT_FPC
-#ifndef __s390x__
-      || (offset >= FT_GPR(0) && offset < FT_ACR(0))
-      || offset == FT_PSWM_U
-      || offset == FT_PSWA_L
-#endif
-     )
-    return *(uint32_t *) (raw_regs + offset);
-
-  /* This leaves 128-bit VX.  No way to return them.  */
-  return 0;
-}
-
-/* Return target_desc to use for IPA, given the tdesc index passed by
-   gdbserver.  For s390, it also sets s390_regmap and s390_regnum.  */
-
-const struct target_desc *
-get_ipa_tdesc (int idx)
-{
-#define SET_REGMAP(regmap, skip_last) \
-	do { \
-	  s390_regmap = regmap; \
-	  s390_regnum = (sizeof regmap / sizeof regmap[0]) - skip_last; \
-	} while(0)
-  switch (idx)
-    {
-#ifdef __s390x__
-    case S390_TDESC_64:
-      /* Subtract number of VX regs.  */
-      SET_REGMAP(s390x_ft_collect_regmap, 32);
-      return tdesc_s390x_linux64;
-    case S390_TDESC_64V1:
-      SET_REGMAP(s390x_ft_collect_regmap, 32);
-      return tdesc_s390x_linux64v1;
-    case S390_TDESC_64V2:
-      SET_REGMAP(s390x_ft_collect_regmap, 32);
-      return tdesc_s390x_linux64v2;
-    case S390_TDESC_TE:
-      SET_REGMAP(s390x_te_ft_collect_regmap, 32);
-      return tdesc_s390x_te_linux64;
-    case S390_TDESC_VX:
-      SET_REGMAP(s390x_ft_collect_regmap, 0);
-      return tdesc_s390x_vx_linux64;
-    case S390_TDESC_TEVX:
-      SET_REGMAP(s390x_te_ft_collect_regmap, 0);
-      return tdesc_s390x_tevx_linux64;
-    case S390_TDESC_GS:
-      SET_REGMAP(s390x_te_ft_collect_regmap, 0);
-      return tdesc_s390x_gs_linux64;
-#else
-    case S390_TDESC_32:
-      SET_REGMAP(s390_linux32_ft_collect_regmap, 0);
-      return tdesc_s390_linux32;
-    case S390_TDESC_32V1:
-      SET_REGMAP(s390_linux32_ft_collect_regmap, 0);
-      return tdesc_s390_linux32v1;
-    case S390_TDESC_32V2:
-      SET_REGMAP(s390_linux32_ft_collect_regmap, 0);
-      return tdesc_s390_linux32v2;
-    case S390_TDESC_64:
-      SET_REGMAP(s390_linux64_ft_collect_regmap, 32);
-      return tdesc_s390_linux64;
-    case S390_TDESC_64V1:
-      SET_REGMAP(s390_linux64_ft_collect_regmap, 32);
-      return tdesc_s390_linux64v1;
-    case S390_TDESC_64V2:
-      SET_REGMAP(s390_linux64_ft_collect_regmap, 32);
-      return tdesc_s390_linux64v2;
-    case S390_TDESC_TE:
-      SET_REGMAP(s390_te_linux64_ft_collect_regmap, 32);
-      return tdesc_s390_te_linux64;
-    case S390_TDESC_VX:
-      SET_REGMAP(s390_linux64_ft_collect_regmap, 0);
-      return tdesc_s390_vx_linux64;
-    case S390_TDESC_TEVX:
-      SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0);
-      return tdesc_s390_tevx_linux64;
-    case S390_TDESC_GS:
-      SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0);
-      return tdesc_s390_gs_linux64;
-#endif
-    default:
-      internal_error (__FILE__, __LINE__,
-		      "unknown ipa tdesc index: %d", idx);
-#ifdef __s390x__
-      return tdesc_s390x_linux64;
-#else
-      return tdesc_s390_linux32;
-#endif
-    }
-}
-
-/* Allocate buffer for the jump pads.  On 31-bit, JG reaches everywhere,
-   so just allocate normally.  On 64-bit, we have +/-4GiB of reach, and
-   the executable is usually mapped at 0x80000000 - aim for somewhere
-   below it.  */
-
-void *
-alloc_jump_pad_buffer (size_t size)
-{
-#ifdef __s390x__
-  uintptr_t addr;
-  uintptr_t exec_base = getauxval (AT_PHDR);
-  int pagesize;
-  void *res;
-
-  if (exec_base == 0)
-    exec_base = 0x80000000;
-
-  pagesize = sysconf (_SC_PAGE_SIZE);
-  if (pagesize == -1)
-    perror_with_name ("sysconf");
-
-  addr = exec_base - size;
-
-  /* size should already be page-aligned, but this can't hurt.  */
-  addr &= ~(pagesize - 1);
-
-  /* Search for a free area.  If we hit 0, we're out of luck.  */
-  for (; addr; addr -= pagesize)
-    {
-      /* No MAP_FIXED - we don't want to zap someone's mapping.  */
-      res = mmap ((void *) addr, size,
-		  PROT_READ | PROT_WRITE | PROT_EXEC,
-		  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-      /* If we got what we wanted, return.  */
-      if ((uintptr_t) res == addr)
-	return res;
-
-      /* If we got a mapping, but at a wrong address, undo it.  */
-      if (res != MAP_FAILED)
-	munmap (res, size);
-    }
-
-  return NULL;
-#else
-  void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
-		    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-
-  if (res == MAP_FAILED)
-    return NULL;
-
-  return res;
-#endif
-}
-
-void
-initialize_low_tracepoint (void)
-{
-#ifdef __s390x__
-  init_registers_s390x_linux64 ();
-  init_registers_s390x_linux64v1 ();
-  init_registers_s390x_linux64v2 ();
-  init_registers_s390x_te_linux64 ();
-  init_registers_s390x_vx_linux64 ();
-  init_registers_s390x_tevx_linux64 ();
-  init_registers_s390x_gs_linux64 ();
-#else
-  init_registers_s390_linux32 ();
-  init_registers_s390_linux32v1 ();
-  init_registers_s390_linux32v2 ();
-  init_registers_s390_linux64 ();
-  init_registers_s390_linux64v1 ();
-  init_registers_s390_linux64v2 ();
-  init_registers_s390_te_linux64 ();
-  init_registers_s390_vx_linux64 ();
-  init_registers_s390_tevx_linux64 ();
-  init_registers_s390_gs_linux64 ();
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-s390-low.c ./gdb/gdbserver/linux-s390-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-s390-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-s390-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,2860 +0,0 @@
-/* GNU/Linux S/390 specific low level interface, for the remote server
-   for GDB.
-   Copyright (C) 2001-2020 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 file is used for both 31-bit and 64-bit S/390 systems.  */
-
-#include "server.h"
-#include "linux-low.h"
-#include "elf/common.h"
-#include "ax.h"
-#include "tracepoint.h"
-
-#include <asm/ptrace.h>
-#include "nat/gdb_ptrace.h"
-#include <sys/uio.h>
-#include <elf.h>
-#include <inttypes.h>
-
-#include "linux-s390-tdesc.h"
-
-#ifndef HWCAP_S390_HIGH_GPRS
-#define HWCAP_S390_HIGH_GPRS 512
-#endif
-
-#ifndef HWCAP_S390_TE
-#define HWCAP_S390_TE 1024
-#endif
-
-#ifndef HWCAP_S390_VX
-#define HWCAP_S390_VX 2048
-#endif
-
-#ifndef HWCAP_S390_GS
-#define HWCAP_S390_GS 16384
-#endif
-
-#define s390_num_regs 52
-
-static int s390_regmap[] = {
-  PT_PSWMASK, PT_PSWADDR,
-
-  PT_GPR0, PT_GPR1, PT_GPR2, PT_GPR3,
-  PT_GPR4, PT_GPR5, PT_GPR6, PT_GPR7,
-  PT_GPR8, PT_GPR9, PT_GPR10, PT_GPR11,
-  PT_GPR12, PT_GPR13, PT_GPR14, PT_GPR15,
-
-  PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3,
-  PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7,
-  PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11,
-  PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15,
-
-  PT_FPC,
-
-#ifndef __s390x__
-  PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI,
-  PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI,
-  PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI,
-  PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI,
-#else
-  PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3,
-  PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7,
-  PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11,
-  PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15,
-#endif
-
-  PT_ORIGGPR2,
-};
-
-#define s390_num_regs_3264 68
-
-#ifdef __s390x__
-static int s390_regmap_3264[] = {
-  PT_PSWMASK, PT_PSWADDR,
-
-  PT_GPR0, PT_GPR0, PT_GPR1, PT_GPR1,
-  PT_GPR2, PT_GPR2, PT_GPR3, PT_GPR3,
-  PT_GPR4, PT_GPR4, PT_GPR5, PT_GPR5,
-  PT_GPR6, PT_GPR6, PT_GPR7, PT_GPR7,
-  PT_GPR8, PT_GPR8, PT_GPR9, PT_GPR9,
-  PT_GPR10, PT_GPR10, PT_GPR11, PT_GPR11,
-  PT_GPR12, PT_GPR12, PT_GPR13, PT_GPR13,
-  PT_GPR14, PT_GPR14, PT_GPR15, PT_GPR15,
-
-  PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3,
-  PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7,
-  PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11,
-  PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15,
-
-  PT_FPC,
-
-  PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3,
-  PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7,
-  PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11,
-  PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15,
-
-  PT_ORIGGPR2,
-};
-#else
-static int s390_regmap_3264[] = {
-  PT_PSWMASK, PT_PSWADDR,
-
-  -1, PT_GPR0, -1, PT_GPR1,
-  -1, PT_GPR2, -1, PT_GPR3,
-  -1, PT_GPR4, -1, PT_GPR5,
-  -1, PT_GPR6, -1, PT_GPR7,
-  -1, PT_GPR8, -1, PT_GPR9,
-  -1, PT_GPR10, -1, PT_GPR11,
-  -1, PT_GPR12, -1, PT_GPR13,
-  -1, PT_GPR14, -1, PT_GPR15,
-
-  PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3,
-  PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7,
-  PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11,
-  PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15,
-
-  PT_FPC,
-
-  PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI,
-  PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI,
-  PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI,
-  PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI,
-
-  PT_ORIGGPR2,
-};
-#endif
-
-
-static int
-s390_cannot_fetch_register (int regno)
-{
-  return 0;
-}
-
-static int
-s390_cannot_store_register (int regno)
-{
-  return 0;
-}
-
-static void
-s390_collect_ptrace_register (struct regcache *regcache, int regno, char *buf)
-{
-  int size = register_size (regcache->tdesc, regno);
-  const struct regs_info *regs_info = (*the_low_target.regs_info) ();
-  struct usrregs_info *usr = regs_info->usrregs;
-  int regaddr = usr->regmap[regno];
-
-  if (size < sizeof (long))
-    {
-      memset (buf, 0, sizeof (long));
-
-      if ((regno ^ 1) < usr->num_regs
-	  && usr->regmap[regno ^ 1] == regaddr)
-	{
-	  collect_register (regcache, regno & ~1, buf);
-	  collect_register (regcache, (regno & ~1) + 1,
-			    buf + sizeof (long) - size);
-	}
-      else if (regaddr == PT_PSWMASK)
-	{
-	  /* Convert 4-byte PSW mask to 8 bytes by clearing bit 12 and copying
-	     the basic addressing mode bit from the PSW address.  */
-	  gdb_byte *addr = (gdb_byte *) alloca (register_size (regcache->tdesc, regno ^ 1));
-	  collect_register (regcache, regno, buf);
-	  collect_register (regcache, regno ^ 1, addr);
-	  buf[1] &= ~0x8;
-	  buf[size] |= (addr[0] & 0x80);
-	}
-      else if (regaddr == PT_PSWADDR)
-	{
-	  /* Convert 4-byte PSW address to 8 bytes by clearing the addressing
-	     mode bit (which gets copied to the PSW mask instead).  */
-	  collect_register (regcache, regno, buf + sizeof (long) - size);
-	  buf[sizeof (long) - size] &= ~0x80;
-	}
-      else if ((regaddr >= PT_GPR0 && regaddr <= PT_GPR15)
-	       || regaddr == PT_ORIGGPR2)
-	collect_register (regcache, regno, buf + sizeof (long) - size);
-      else
-	collect_register (regcache, regno, buf);
-    }
-  else if (regaddr != -1)
-    collect_register (regcache, regno, buf);
-}
-
-static void
-s390_supply_ptrace_register (struct regcache *regcache,
-			     int regno, const char *buf)
-{
-  int size = register_size (regcache->tdesc, regno);
-  const struct regs_info *regs_info = (*the_low_target.regs_info) ();
-  struct usrregs_info *usr = regs_info->usrregs;
-  int regaddr = usr->regmap[regno];
-
-  if (size < sizeof (long))
-    {
-      if ((regno ^ 1) < usr->num_regs
-	  && usr->regmap[regno ^ 1] == regaddr)
-	{
-	  supply_register (regcache, regno & ~1, buf);
-	  supply_register (regcache, (regno & ~1) + 1,
-			   buf + sizeof (long) - size);
-	}
-      else if (regaddr == PT_PSWMASK)
-	{
-	  /* Convert 8-byte PSW mask to 4 bytes by setting bit 12 and copying
-	     the basic addressing mode into the PSW address.  */
-	  gdb_byte *mask = (gdb_byte *) alloca (size);
-	  gdb_byte *addr = (gdb_byte *) alloca (register_size (regcache->tdesc, regno ^ 1));
-	  memcpy (mask, buf, size);
-	  mask[1] |= 0x8;
-	  supply_register (regcache, regno, mask);
-
-	  collect_register (regcache, regno ^ 1, addr);
-	  addr[0] &= ~0x80;
-	  addr[0] |= (buf[size] & 0x80);
-	  supply_register (regcache, regno ^ 1, addr);
-	}
-      else if (regaddr == PT_PSWADDR)
-	{
-	  /* Convert 8-byte PSW address to 4 bytes by truncating, but
-	     keeping the addressing mode bit (which was set from the mask).  */
-	  gdb_byte *addr = (gdb_byte *) alloca (size);
-	  char amode;
-	  collect_register (regcache, regno, addr);
-	  amode = addr[0] & 0x80;
-	  memcpy (addr, buf + sizeof (long) - size, size);
-	  addr[0] &= ~0x80;
-	  addr[0] |= amode;
-	  supply_register (regcache, regno, addr);
-	}
-      else if ((regaddr >= PT_GPR0 && regaddr <= PT_GPR15)
-	       || regaddr == PT_ORIGGPR2)
-	supply_register (regcache, regno, buf + sizeof (long) - size);
-      else
-	supply_register (regcache, regno, buf);
-    }
-  else if (regaddr != -1)
-    supply_register (regcache, regno, buf);
-}
-
-/* Provide only a fill function for the general register set.  ps_lgetregs
-   will use this for NPTL support.  */
-
-static void
-s390_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-  const struct regs_info *regs_info = (*the_low_target.regs_info) ();
-  struct usrregs_info *usr = regs_info->usrregs;
-
-  for (i = 0; i < usr->num_regs; i++)
-    {
-      if (usr->regmap[i] < PT_PSWMASK
-	  || usr->regmap[i] > PT_ACR15)
-	continue;
-
-      s390_collect_ptrace_register (regcache, i,
-				    (char *) buf + usr->regmap[i]);
-    }
-}
-
-/* Fill and store functions for extended register sets.  */
-
-#ifndef __s390x__
-static void
-s390_fill_gprs_high (struct regcache *regcache, void *buf)
-{
-  int r0h = find_regno (regcache->tdesc, "r0h");
-  int i;
-
-  for (i = 0; i < 16; i++)
-    collect_register (regcache, r0h + 2 * i, (char *) buf + 4 * i);
-}
-
-static void
-s390_store_gprs_high (struct regcache *regcache, const void *buf)
-{
-  int r0h = find_regno (regcache->tdesc, "r0h");
-  int i;
-
-  for (i = 0; i < 16; i++)
-    supply_register (regcache, r0h + 2 * i, (const char *) buf + 4 * i);
-}
-#endif
-
-static void
-s390_store_last_break (struct regcache *regcache, const void *buf)
-{
-  const char *p;
-
-  p = (const char *) buf + 8 - register_size (regcache->tdesc, 0);
-  supply_register_by_name (regcache, "last_break", p);
-}
-
-static void
-s390_fill_system_call (struct regcache *regcache, void *buf)
-{
-  collect_register_by_name (regcache, "system_call", buf);
-}
-
-static void
-s390_store_system_call (struct regcache *regcache, const void *buf)
-{
-  supply_register_by_name (regcache, "system_call", buf);
-}
-
-static void
-s390_store_tdb (struct regcache *regcache, const void *buf)
-{
-  int tdb0 = find_regno (regcache->tdesc, "tdb0");
-  int tr0 = find_regno (regcache->tdesc, "tr0");
-  int i;
-
-  for (i = 0; i < 4; i++)
-    supply_register (regcache, tdb0 + i, (const char *) buf + 8 * i);
-
-  for (i = 0; i < 16; i++)
-    supply_register (regcache, tr0 + i, (const char *) buf + 8 * (16 + i));
-}
-
-static void
-s390_fill_vxrs_low (struct regcache *regcache, void *buf)
-{
-  int v0 = find_regno (regcache->tdesc, "v0l");
-  int i;
-
-  for (i = 0; i < 16; i++)
-    collect_register (regcache, v0 + i, (char *) buf + 8 * i);
-}
-
-static void
-s390_store_vxrs_low (struct regcache *regcache, const void *buf)
-{
-  int v0 = find_regno (regcache->tdesc, "v0l");
-  int i;
-
-  for (i = 0; i < 16; i++)
-    supply_register (regcache, v0 + i, (const char *) buf + 8 * i);
-}
-
-static void
-s390_fill_vxrs_high (struct regcache *regcache, void *buf)
-{
-  int v16 = find_regno (regcache->tdesc, "v16");
-  int i;
-
-  for (i = 0; i < 16; i++)
-    collect_register (regcache, v16 + i, (char *) buf + 16 * i);
-}
-
-static void
-s390_store_vxrs_high (struct regcache *regcache, const void *buf)
-{
-  int v16 = find_regno (regcache->tdesc, "v16");
-  int i;
-
-  for (i = 0; i < 16; i++)
-    supply_register (regcache, v16 + i, (const char *) buf + 16 * i);
-}
-
-static void
-s390_store_gs (struct regcache *regcache, const void *buf)
-{
-  int gsd = find_regno (regcache->tdesc, "gsd");
-  int i;
-
-  for (i = 0; i < 3; i++)
-    supply_register (regcache, gsd + i, (const char *) buf + 8 * (i + 1));
-}
-
-static void
-s390_store_gsbc (struct regcache *regcache, const void *buf)
-{
-  int bc_gsd = find_regno (regcache->tdesc, "bc_gsd");
-  int i;
-
-  for (i = 0; i < 3; i++)
-    supply_register (regcache, bc_gsd + i, (const char *) buf + 8 * (i + 1));
-}
-
-static struct regset_info s390_regsets[] = {
-  { 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL },
-#ifndef __s390x__
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_HIGH_GPRS, 0,
-    EXTENDED_REGS, s390_fill_gprs_high, s390_store_gprs_high },
-#endif
-  /* Last break address is read-only; no fill function.  */
-  { PTRACE_GETREGSET, -1, NT_S390_LAST_BREAK, 0, EXTENDED_REGS,
-    NULL, s390_store_last_break },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_SYSTEM_CALL, 0,
-    EXTENDED_REGS, s390_fill_system_call, s390_store_system_call },
-  /* TDB is read-only.  */
-  { PTRACE_GETREGSET, -1, NT_S390_TDB, 0, EXTENDED_REGS,
-    NULL, s390_store_tdb },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_LOW, 0,
-    EXTENDED_REGS, s390_fill_vxrs_low, s390_store_vxrs_low },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_HIGH, 0,
-    EXTENDED_REGS, s390_fill_vxrs_high, s390_store_vxrs_high },
-  /* Guarded storage registers are read-only.  */
-  { PTRACE_GETREGSET, -1, NT_S390_GS_CB, 0, EXTENDED_REGS,
-    NULL, s390_store_gs },
-  { PTRACE_GETREGSET, -1, NT_S390_GS_BC, 0, EXTENDED_REGS,
-    NULL, s390_store_gsbc },
-  NULL_REGSET
-};
-
-
-static const gdb_byte s390_breakpoint[] = { 0, 1 };
-#define s390_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-s390_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = s390_breakpoint_len;
-  return s390_breakpoint;
-}
-
-static CORE_ADDR
-s390_get_pc (struct regcache *regcache)
-{
-  if (register_size (regcache->tdesc, 0) == 4)
-    {
-      unsigned int pswa;
-      collect_register_by_name (regcache, "pswa", &pswa);
-      return pswa & 0x7fffffff;
-    }
-  else
-    {
-      unsigned long pc;
-      collect_register_by_name (regcache, "pswa", &pc);
-      return pc;
-    }
-}
-
-static void
-s390_set_pc (struct regcache *regcache, CORE_ADDR newpc)
-{
-  if (register_size (regcache->tdesc, 0) == 4)
-    {
-      unsigned int pswa;
-      collect_register_by_name (regcache, "pswa", &pswa);
-      pswa = (pswa & 0x80000000) | (newpc & 0x7fffffff);
-      supply_register_by_name (regcache, "pswa", &pswa);
-    }
-  else
-    {
-      unsigned long pc = newpc;
-      supply_register_by_name (regcache, "pswa", &pc);
-    }
-}
-
-/* Determine the word size for the given PID, in bytes.  */
-
-#ifdef __s390x__
-static int
-s390_get_wordsize (int pid)
-{
-  errno = 0;
-  PTRACE_XFER_TYPE pswm = ptrace (PTRACE_PEEKUSER, pid,
-				  (PTRACE_TYPE_ARG3) 0,
-				  (PTRACE_TYPE_ARG4) 0);
-  if (errno != 0)
-    {
-      warning (_("Couldn't determine word size, assuming 64-bit."));
-      return 8;
-    }
-  /* Derive word size from extended addressing mode (PSW bit 31).  */
-  return pswm & (1L << 32) ? 8 : 4;
-}
-#else
-#define s390_get_wordsize(pid) 4
-#endif
-
-static int
-s390_check_regset (int pid, int regset, int regsize)
-{
-  void *buf = alloca (regsize);
-  struct iovec iov;
-
-  iov.iov_base = buf;
-  iov.iov_len = regsize;
-
-  if (ptrace (PTRACE_GETREGSET, pid, (long) regset, (long) &iov) >= 0
-      || errno == ENODATA)
-    return 1;
-  return 0;
-}
-
-/* For a 31-bit inferior, whether the kernel supports using the full
-   64-bit GPRs.  */
-static int have_hwcap_s390_high_gprs = 0;
-static int have_hwcap_s390_vx = 0;
-
-static void
-s390_arch_setup (void)
-{
-  const struct target_desc *tdesc;
-  struct regset_info *regset;
-
-  /* Determine word size and HWCAP.  */
-  int pid = pid_of (current_thread);
-  int wordsize = s390_get_wordsize (pid);
-  unsigned long hwcap = linux_get_hwcap (wordsize);
-
-  /* Check whether the kernel supports extra register sets.  */
-  int have_regset_last_break
-    = s390_check_regset (pid, NT_S390_LAST_BREAK, 8);
-  int have_regset_system_call
-    = s390_check_regset (pid, NT_S390_SYSTEM_CALL, 4);
-  int have_regset_tdb
-    = (s390_check_regset (pid, NT_S390_TDB, 256)
-       && (hwcap & HWCAP_S390_TE) != 0);
-  int have_regset_vxrs
-    = (s390_check_regset (pid, NT_S390_VXRS_LOW, 128)
-       && s390_check_regset (pid, NT_S390_VXRS_HIGH, 256)
-       && (hwcap & HWCAP_S390_VX) != 0);
-  int have_regset_gs
-    = (s390_check_regset (pid, NT_S390_GS_CB, 32)
-       && s390_check_regset (pid, NT_S390_GS_BC, 32)
-       && (hwcap & HWCAP_S390_GS) != 0);
-
-  {
-#ifdef __s390x__
-    if (wordsize == 8)
-      {
-	if (have_regset_gs)
-	  tdesc = tdesc_s390x_gs_linux64;
-	else if (have_regset_vxrs)
-	  tdesc = (have_regset_tdb ? tdesc_s390x_tevx_linux64 :
-		   tdesc_s390x_vx_linux64);
-	else if (have_regset_tdb)
-	  tdesc = tdesc_s390x_te_linux64;
-	else if (have_regset_system_call)
-	  tdesc = tdesc_s390x_linux64v2;
-	else if (have_regset_last_break)
-	  tdesc = tdesc_s390x_linux64v1;
-	else
-	  tdesc = tdesc_s390x_linux64;
-      }
-
-    /* For a 31-bit inferior, check whether the kernel supports
-       using the full 64-bit GPRs.  */
-    else
-#endif
-    if (hwcap & HWCAP_S390_HIGH_GPRS)
-      {
-	have_hwcap_s390_high_gprs = 1;
-	if (have_regset_gs)
-	  tdesc = tdesc_s390_gs_linux64;
-	else if (have_regset_vxrs)
-	  tdesc = (have_regset_tdb ? tdesc_s390_tevx_linux64 :
-		   tdesc_s390_vx_linux64);
-	else if (have_regset_tdb)
-	  tdesc = tdesc_s390_te_linux64;
-	else if (have_regset_system_call)
-	  tdesc = tdesc_s390_linux64v2;
-	else if (have_regset_last_break)
-	  tdesc = tdesc_s390_linux64v1;
-	else
-	  tdesc = tdesc_s390_linux64;
-      }
-    else
-      {
-	/* Assume 31-bit inferior process.  */
-	if (have_regset_system_call)
-	  tdesc = tdesc_s390_linux32v2;
-	else if (have_regset_last_break)
-	  tdesc = tdesc_s390_linux32v1;
-	else
-	  tdesc = tdesc_s390_linux32;
-      }
-
-    have_hwcap_s390_vx = have_regset_vxrs;
-  }
-
-  /* Update target_regsets according to available register sets.  */
-  for (regset = s390_regsets; regset->size >= 0; regset++)
-    if (regset->get_request == PTRACE_GETREGSET)
-      switch (regset->nt_type)
-	{
-#ifndef __s390x__
-	case NT_S390_HIGH_GPRS:
-	  regset->size = have_hwcap_s390_high_gprs ? 64 : 0;
-	  break;
-#endif
-	case NT_S390_LAST_BREAK:
-	  regset->size = have_regset_last_break ? 8 : 0;
-	  break;
-	case NT_S390_SYSTEM_CALL:
-	  regset->size = have_regset_system_call ? 4 : 0;
-	  break;
-	case NT_S390_TDB:
-	  regset->size = have_regset_tdb ? 256 : 0;
-	  break;
-	case NT_S390_VXRS_LOW:
-	  regset->size = have_regset_vxrs ? 128 : 0;
-	  break;
-	case NT_S390_VXRS_HIGH:
-	  regset->size = have_regset_vxrs ? 256 : 0;
-	  break;
-	case NT_S390_GS_CB:
-	case NT_S390_GS_BC:
-	  regset->size = have_regset_gs ? 32 : 0;
-	default:
-	  break;
-	}
-
-  current_process ()->tdesc = tdesc;
-}
-
-
-static int
-s390_breakpoint_at (CORE_ADDR pc)
-{
-  unsigned char c[s390_breakpoint_len];
-  read_inferior_memory (pc, c, s390_breakpoint_len);
-  return memcmp (c, s390_breakpoint, s390_breakpoint_len) == 0;
-}
-
-/* Breakpoint/Watchpoint support.  */
-
-/* The "supports_z_point_type" linux_target_ops method.  */
-
-static int
-s390_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-/* Support for hardware single step.  */
-
-static int
-s390_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static struct usrregs_info s390_usrregs_info =
-  {
-    s390_num_regs,
-    s390_regmap,
-  };
-
-static struct regsets_info s390_regsets_info =
-  {
-    s390_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &s390_usrregs_info,
-    &s390_regsets_info
-  };
-
-static struct usrregs_info s390_usrregs_info_3264 =
-  {
-    s390_num_regs_3264,
-    s390_regmap_3264
-  };
-
-static struct regsets_info s390_regsets_info_3264 =
-  {
-    s390_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct regs_info regs_info_3264 =
-  {
-    NULL, /* regset_bitmap */
-    &s390_usrregs_info_3264,
-    &s390_regsets_info_3264
-  };
-
-static const struct regs_info *
-s390_regs_info (void)
-{
-  if (have_hwcap_s390_high_gprs)
-    {
-#ifdef __s390x__
-      const struct target_desc *tdesc = current_process ()->tdesc;
-
-      if (register_size (tdesc, 0) == 4)
-	return &regs_info_3264;
-#else
-      return &regs_info_3264;
-#endif
-    }
-  return &regs_info;
-}
-
-/* The "supports_tracepoints" linux_target_ops method.  */
-
-static int
-s390_supports_tracepoints (void)
-{
-  return 1;
-}
-
-/* Implementation of linux_target_ops method "get_thread_area".  */
-
-static int
-s390_get_thread_area (int lwpid, CORE_ADDR *addrp)
-{
-  CORE_ADDR res = ptrace (PTRACE_PEEKUSER, lwpid, (long) PT_ACR0, (long) 0);
-#ifdef __s390x__
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
-  if (register_size (regcache->tdesc, 0) == 4)
-    res &= 0xffffffffull;
-#endif
-  *addrp = res;
-  return 0;
-}
-
-
-/* Fast tracepoint support.
-
-   The register save area on stack is identical for all targets:
-
-   0x000+i*0x10: VR0-VR31
-   0x200+i*8: GR0-GR15
-   0x280+i*4: AR0-AR15
-   0x2c0: PSWM [64-bit]
-   0x2c8: PSWA [64-bit]
-   0x2d0: FPC
-
-   If we're on 31-bit linux, we just don't store the high parts of the GPRs.
-   Likewise, if there's no VX support, we just store the FRs into the slots
-   of low VR halves.  The agent code is responsible for rearranging that
-   into regcache.  */
-
-/* Code sequence saving GPRs for 31-bit target with no high GPRs.  There's
-   one trick used at the very beginning: since there's no way to allocate
-   stack space without destroying CC (lay instruction can do it, but it's
-   only supported on later CPUs), we take 4 different execution paths for
-   every possible value of CC, allocate stack space, save %r0, stuff the
-   CC value in %r0 (shifted to match its position in PSWM high word),
-   then branch to common path.  */
-
-static const unsigned char s390_ft_entry_gpr_esa[] = {
-  0xa7, 0x14, 0x00, 0x1e,		/* jo .Lcc3 */
-  0xa7, 0x24, 0x00, 0x14,		/* jh .Lcc2 */
-  0xa7, 0x44, 0x00, 0x0a,		/* jl .Lcc1 */
-  /* CC = 0 */
-  0xa7, 0xfa, 0xfd, 0x00,		/* ahi %r15, -0x300 */
-  0x50, 0x00, 0xf2, 0x04,		/* st %r0, 0x204(%r15) */
-  0xa7, 0x08, 0x00, 0x00,		/* lhi %r0, 0 */
-  0xa7, 0xf4, 0x00, 0x18,		/* j .Lccdone */
-  /* .Lcc1: */
-  0xa7, 0xfa, 0xfd, 0x00,		/* ahi %r15, -0x300 */
-  0x50, 0x00, 0xf2, 0x04,		/* st %r0, 0x204(%r15) */
-  0xa7, 0x08, 0x10, 0x00,		/* lhi %r0, 0x1000 */
-  0xa7, 0xf4, 0x00, 0x10,		/* j .Lccdone */
-  /* .Lcc2: */
-  0xa7, 0xfa, 0xfd, 0x00,		/* ahi %r15, -0x300 */
-  0x50, 0x00, 0xf2, 0x04,		/* st %r0, 0x204(%r15) */
-  0xa7, 0x08, 0x20, 0x00,		/* lhi %r0, 0x2000 */
-  0xa7, 0xf4, 0x00, 0x08,		/* j .Lccdone */
-  /* .Lcc3: */
-  0xa7, 0xfa, 0xfd, 0x00,		/* ahi %r15, -0x300 */
-  0x50, 0x00, 0xf2, 0x04,		/* st %r0, 0x204(%r15) */
-  0xa7, 0x08, 0x30, 0x00,		/* lhi %r0, 0x3000 */
-  /* .Lccdone: */
-  0x50, 0x10, 0xf2, 0x0c,		/* st %r1, 0x20c(%r15) */
-  0x50, 0x20, 0xf2, 0x14,		/* st %r2, 0x214(%r15) */
-  0x50, 0x30, 0xf2, 0x1c,		/* st %r3, 0x21c(%r15) */
-  0x50, 0x40, 0xf2, 0x24,		/* st %r4, 0x224(%r15) */
-  0x50, 0x50, 0xf2, 0x2c,		/* st %r5, 0x22c(%r15) */
-  0x50, 0x60, 0xf2, 0x34,		/* st %r6, 0x234(%r15) */
-  0x50, 0x70, 0xf2, 0x3c,		/* st %r7, 0x23c(%r15) */
-  0x50, 0x80, 0xf2, 0x44,		/* st %r8, 0x244(%r15) */
-  0x50, 0x90, 0xf2, 0x4c,		/* st %r9, 0x24c(%r15) */
-  0x50, 0xa0, 0xf2, 0x54,		/* st %r10, 0x254(%r15) */
-  0x50, 0xb0, 0xf2, 0x5c,		/* st %r11, 0x25c(%r15) */
-  0x50, 0xc0, 0xf2, 0x64,		/* st %r12, 0x264(%r15) */
-  0x50, 0xd0, 0xf2, 0x6c,		/* st %r13, 0x26c(%r15) */
-  0x50, 0xe0, 0xf2, 0x74,		/* st %r14, 0x274(%r15) */
-  /* Compute original value of %r15 and store it.  We use ahi instead
-     of la to preserve the whole value, and not just the low 31 bits.
-     This is not particularly important here, but essential in the
-     zarch case where someone might be using the high word of %r15
-     as an extra register.  */
-  0x18, 0x1f,				/* lr %r1, %r15 */
-  0xa7, 0x1a, 0x03, 0x00,		/* ahi %r1, 0x300 */
-  0x50, 0x10, 0xf2, 0x7c,		/* st %r1, 0x27c(%r15) */
-};
-
-/* Code sequence saving GPRs for 31-bit target with high GPRs and for 64-bit
-   target.  Same as above, except this time we can use load/store multiple,
-   since the 64-bit regs are tightly packed.  */
-
-static const unsigned char s390_ft_entry_gpr_zarch[] = {
-  0xa7, 0x14, 0x00, 0x21,		/* jo .Lcc3 */
-  0xa7, 0x24, 0x00, 0x16,		/* jh .Lcc2 */
-  0xa7, 0x44, 0x00, 0x0b,		/* jl .Lcc1 */
-  /* CC = 0 */
-  0xa7, 0xfb, 0xfd, 0x00,		/* aghi %r15, -0x300 */
-  0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24,	/* stmg %r0, %r14, 0x200(%r15) */
-  0xa7, 0x08, 0x00, 0x00,		/* lhi %r0, 0 */
-  0xa7, 0xf4, 0x00, 0x1b,		/* j .Lccdone */
-  /* .Lcc1: */
-  0xa7, 0xfb, 0xfd, 0x00,		/* aghi %r15, -0x300 */
-  0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24,	/* stmg %r0, %r14, 0x200(%r15) */
-  0xa7, 0x08, 0x10, 0x00,		/* lhi %r0, 0x1000 */
-  0xa7, 0xf4, 0x00, 0x12,		/* j .Lccdone */
-  /* .Lcc2: */
-  0xa7, 0xfb, 0xfd, 0x00,		/* aghi %r15, -0x300 */
-  0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24,	/* stmg %r0, %r14, 0x200(%r15) */
-  0xa7, 0x08, 0x20, 0x00,		/* lhi %r0, 0x2000 */
-  0xa7, 0xf4, 0x00, 0x09,		/* j .Lccdone */
-  /* .Lcc3: */
-  0xa7, 0xfb, 0xfd, 0x00,		/* aghi %r15, -0x300 */
-  0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24,	/* stmg %r0, %r14, 0x200(%r15) */
-  0xa7, 0x08, 0x30, 0x00,		/* lhi %r0, 0x3000 */
-  /* .Lccdone: */
-  0xb9, 0x04, 0x00, 0x1f,		/* lgr %r1, %r15 */
-  0xa7, 0x1b, 0x03, 0x00,		/* aghi %r1, 0x300 */
-  0xe3, 0x10, 0xf2, 0x78, 0x00, 0x24,	/* stg %r1, 0x278(%r15) */
-};
-
-/* Code sequence saving ARs, PSWM and FPC.  PSWM has to be assembled from
-   current PSWM (read by epsw) and CC from entry (in %r0).  */
-
-static const unsigned char s390_ft_entry_misc[] = {
-  0x9b, 0x0f, 0xf2, 0x80,		/* stam %a0, %a15, 0x20(%%r15) */
-  0xb9, 0x8d, 0x00, 0x23,		/* epsw %r2, %r3 */
-  0xa7, 0x18, 0xcf, 0xff,		/* lhi %r1, ~0x3000 */
-  0x14, 0x21,				/* nr %r2, %r1 */
-  0x16, 0x20,				/* or %r2, %r0 */
-  0x50, 0x20, 0xf2, 0xc0,		/* st %r2, 0x2c0(%r15) */
-  0x50, 0x30, 0xf2, 0xc4,		/* st %r3, 0x2c4(%r15) */
-  0xb2, 0x9c, 0xf2, 0xd0,		/* stfpc 0x2d0(%r15) */
-};
-
-/* Code sequence saving FRs, used if VX not supported.  */
-
-static const unsigned char s390_ft_entry_fr[] = {
-  0x60, 0x00, 0xf0, 0x00,		/* std %f0, 0x000(%r15) */
-  0x60, 0x10, 0xf0, 0x10,		/* std %f1, 0x010(%r15) */
-  0x60, 0x20, 0xf0, 0x20,		/* std %f2, 0x020(%r15) */
-  0x60, 0x30, 0xf0, 0x30,		/* std %f3, 0x030(%r15) */
-  0x60, 0x40, 0xf0, 0x40,		/* std %f4, 0x040(%r15) */
-  0x60, 0x50, 0xf0, 0x50,		/* std %f5, 0x050(%r15) */
-  0x60, 0x60, 0xf0, 0x60,		/* std %f6, 0x060(%r15) */
-  0x60, 0x70, 0xf0, 0x70,		/* std %f7, 0x070(%r15) */
-  0x60, 0x80, 0xf0, 0x80,		/* std %f8, 0x080(%r15) */
-  0x60, 0x90, 0xf0, 0x90,		/* std %f9, 0x090(%r15) */
-  0x60, 0xa0, 0xf0, 0xa0,		/* std %f10, 0x0a0(%r15) */
-  0x60, 0xb0, 0xf0, 0xb0,		/* std %f11, 0x0b0(%r15) */
-  0x60, 0xc0, 0xf0, 0xc0,		/* std %f12, 0x0c0(%r15) */
-  0x60, 0xd0, 0xf0, 0xd0,		/* std %f13, 0x0d0(%r15) */
-  0x60, 0xe0, 0xf0, 0xe0,		/* std %f14, 0x0e0(%r15) */
-  0x60, 0xf0, 0xf0, 0xf0,		/* std %f15, 0x0f0(%r15) */
-};
-
-/* Code sequence saving VRs, used if VX not supported.  */
-
-static const unsigned char s390_ft_entry_vr[] = {
-  0xe7, 0x0f, 0xf0, 0x00, 0x00, 0x3e,	/* vstm %v0, %v15, 0x000(%r15) */
-  0xe7, 0x0f, 0xf1, 0x00, 0x0c, 0x3e,	/* vstm %v16, %v31, 0x100(%r15) */
-};
-
-/* Code sequence doing the collection call for 31-bit target.  %r1 contains
-   the address of the literal pool.  */
-
-static const unsigned char s390_ft_main_31[] = {
-  /* Load the literals into registers.  */
-  0x58, 0x50, 0x10, 0x00,		/* l %r5, 0x0(%r1) */
-  0x58, 0x20, 0x10, 0x04,		/* l %r2, 0x4(%r1) */
-  0x58, 0x40, 0x10, 0x08,		/* l %r4, 0x8(%r1) */
-  0x58, 0x60, 0x10, 0x0c,		/* l %r6, 0xc(%r1) */
-  /* Save original PSWA (tracepoint address | 0x80000000).  */
-  0x50, 0x50, 0xf2, 0xcc,		/* st %r5, 0x2cc(%r15) */
-  /* Construct a collecting_t object at %r15+0x2e0.  */
-  0x50, 0x20, 0xf2, 0xe0,		/* st %r2, 0x2e0(%r15) */
-  0x9b, 0x00, 0xf2, 0xe4,		/* stam %a0, %a0, 0x2e4(%r15) */
-  /* Move its address to %r0.  */
-  0x41, 0x00, 0xf2, 0xe0,		/* la %r0, 0x2e0(%r15) */
-  /* Take the lock.  */
-  /* .Lloop:  */
-  0xa7, 0x18, 0x00, 0x00,		/* lhi %r1, 0 */
-  0xba, 0x10, 0x60, 0x00,		/* cs %r1, %r0, 0(%r6) */
-  0xa7, 0x74, 0xff, 0xfc,		/* jne .Lloop */
-  /* Address of the register save block to %r3.  */
-  0x18, 0x3f,				/* lr %r3, %r15 */
-  /* Make a stack frame, so that we can call the collector.  */
-  0xa7, 0xfa, 0xff, 0xa0,		/* ahi %r15, -0x60 */
-  /* Call it.  */
-  0x0d, 0xe4,				/* basr %r14, %r4 */
-  /* And get rid of the stack frame again.  */
-  0x41, 0xf0, 0xf0, 0x60,		/* la %r15, 0x60(%r15) */
-  /* Leave the lock.  */
-  0x07, 0xf0, 				/* br %r0 */
-  0xa7, 0x18, 0x00, 0x00,		/* lhi %r1, 0 */
-  0x50, 0x10, 0x60, 0x00,		/* st %t1, 0(%r6) */
-};
-
-/* Code sequence doing the collection call for 64-bit target.  %r1 contains
-   the address of the literal pool.  */
-
-static const unsigned char s390_ft_main_64[] = {
-  /* Load the literals into registers.  */
-  0xe3, 0x50, 0x10, 0x00, 0x00, 0x04,	/* lg %r5, 0x00(%r1) */
-  0xe3, 0x20, 0x10, 0x08, 0x00, 0x04,	/* lg %r2, 0x08(%r1) */
-  0xe3, 0x40, 0x10, 0x10, 0x00, 0x04,	/* lg %r4, 0x10(%r1) */
-  0xe3, 0x60, 0x10, 0x18, 0x00, 0x04,	/* lg %r6, 0x18(%r1) */
-  /* Save original PSWA (tracepoint address).  */
-  0xe3, 0x50, 0xf2, 0xc8, 0x00, 0x24,	/* stg %r5, 0x2c8(%r15) */
-  /* Construct a collecting_t object at %r15+0x2e0.  */
-  0xe3, 0x20, 0xf2, 0xe0, 0x00, 0x24,	/* stg %r2, 0x2e0(%r15) */
-  0x9b, 0x01, 0xf2, 0xe8,		/* stam %a0, %a1, 0x2e8(%r15) */
-  /* Move its address to %r0.  */
-  0x41, 0x00, 0xf2, 0xe0,		/* la %r0, 0x2e0(%r15) */
-  /* Take the lock.  */
-  /* .Lloop:  */
-  0xa7, 0x19, 0x00, 0x00,		/* lghi %r1, 0 */
-  0xeb, 0x10, 0x60, 0x00, 0x00, 0x30,	/* csg %r1, %r0, 0(%r6) */
-  0xa7, 0x74, 0xff, 0xfb,		/* jne .Lloop */
-  /* Address of the register save block to %r3.  */
-  0xb9, 0x04, 0x00, 0x3f,		/* lgr %r3, %r15 */
-  /* Make a stack frame, so that we can call the collector.  */
-  0xa7, 0xfb, 0xff, 0x60,		/* aghi %r15, -0xa0 */
-  /* Call it.  */
-  0x0d, 0xe4,				/* basr %r14, %r4 */
-  /* And get rid of the stack frame again.  */
-  0x41, 0xf0, 0xf0, 0xa0,		/* la %r15, 0xa0(%r15) */
-  /* Leave the lock.  */
-  0x07, 0xf0,				/* br %r0 */
-  0xa7, 0x19, 0x00, 0x00,		/* lghi %r1, 0 */
-  0xe3, 0x10, 0x60, 0x00, 0x00, 0x24,	/* stg %t1, 0(%r6) */
-};
-
-/* Code sequence restoring FRs, for targets with no VX support.  */
-
-static const unsigned char s390_ft_exit_fr[] = {
-  0x68, 0x00, 0xf0, 0x00,		/* ld %f0, 0x000(%r15) */
-  0x68, 0x10, 0xf0, 0x10,		/* ld %f1, 0x010(%r15) */
-  0x68, 0x20, 0xf0, 0x20,		/* ld %f2, 0x020(%r15) */
-  0x68, 0x30, 0xf0, 0x30,		/* ld %f3, 0x030(%r15) */
-  0x68, 0x40, 0xf0, 0x40,		/* ld %f4, 0x040(%r15) */
-  0x68, 0x50, 0xf0, 0x50,		/* ld %f5, 0x050(%r15) */
-  0x68, 0x60, 0xf0, 0x60,		/* ld %f6, 0x060(%r15) */
-  0x68, 0x70, 0xf0, 0x70,		/* ld %f7, 0x070(%r15) */
-  0x68, 0x80, 0xf0, 0x80,		/* ld %f8, 0x080(%r15) */
-  0x68, 0x90, 0xf0, 0x90,		/* ld %f9, 0x090(%r15) */
-  0x68, 0xa0, 0xf0, 0xa0,		/* ld %f10, 0x0a0(%r15) */
-  0x68, 0xb0, 0xf0, 0xb0,		/* ld %f11, 0x0b0(%r15) */
-  0x68, 0xc0, 0xf0, 0xc0,		/* ld %f12, 0x0c0(%r15) */
-  0x68, 0xd0, 0xf0, 0xd0,		/* ld %f13, 0x0d0(%r15) */
-  0x68, 0xe0, 0xf0, 0xe0,		/* ld %f14, 0x0e0(%r15) */
-  0x68, 0xf0, 0xf0, 0xf0,		/* ld %f15, 0x0f0(%r15) */
-};
-
-/* Code sequence restoring VRs.  */
-
-static const unsigned char s390_ft_exit_vr[] = {
-  0xe7, 0x0f, 0xf0, 0x00, 0x00, 0x36,	/* vlm %v0, %v15, 0x000(%r15) */
-  0xe7, 0x0f, 0xf1, 0x00, 0x0c, 0x36,	/* vlm %v16, %v31, 0x100(%r15) */
-};
-
-/* Code sequence restoring misc registers.  As for PSWM, only CC should be
-   modified by C code, so we use the alr instruction to restore it by
-   manufacturing an operand that'll result in the original flags.  */
-
-static const unsigned char s390_ft_exit_misc[] = {
-  0xb2, 0x9d, 0xf2, 0xd0,		/* lfpc 0x2d0(%r15) */
-  0x58, 0x00, 0xf2, 0xc0,		/* l %r0, 0x2c0(%r15) */
-  /* Extract CC to high 2 bits of %r0.  */
-  0x88, 0x00, 0x00, 0x0c,		/* srl %r0, 12 */
-  0x89, 0x00, 0x00, 0x1e,		/* sll %r0, 30 */
-  /* Add %r0 to itself.  Result will be nonzero iff CC bit 0 is set, and
-     will have carry iff CC bit 1 is set - resulting in the same flags
-     as the original.  */
-  0x1e, 0x00,				/* alr %r0, %r0 */
-  0x9a, 0x0f, 0xf2, 0x80,		/* lam %a0, %a15, 0x280(%r15) */
-};
-
-/* Code sequence restoring GPRs, for 31-bit targets with no high GPRs.  */
-
-static const unsigned char s390_ft_exit_gpr_esa[] = {
-  0x58, 0x00, 0xf2, 0x04,		/* l %r0, 0x204(%r15) */
-  0x58, 0x10, 0xf2, 0x0c,		/* l %r1, 0x20c(%r15) */
-  0x58, 0x20, 0xf2, 0x14,		/* l %r2, 0x214(%r15) */
-  0x58, 0x30, 0xf2, 0x1c,		/* l %r3, 0x21c(%r15) */
-  0x58, 0x40, 0xf2, 0x24,		/* l %r4, 0x224(%r15) */
-  0x58, 0x50, 0xf2, 0x2c,		/* l %r5, 0x22c(%r15) */
-  0x58, 0x60, 0xf2, 0x34,		/* l %r6, 0x234(%r15) */
-  0x58, 0x70, 0xf2, 0x3c,		/* l %r7, 0x23c(%r15) */
-  0x58, 0x80, 0xf2, 0x44,		/* l %r8, 0x244(%r15) */
-  0x58, 0x90, 0xf2, 0x4c,		/* l %r9, 0x24c(%r15) */
-  0x58, 0xa0, 0xf2, 0x54,		/* l %r10, 0x254(%r15) */
-  0x58, 0xb0, 0xf2, 0x5c,		/* l %r11, 0x25c(%r15) */
-  0x58, 0xc0, 0xf2, 0x64,		/* l %r12, 0x264(%r15) */
-  0x58, 0xd0, 0xf2, 0x6c,		/* l %r13, 0x26c(%r15) */
-  0x58, 0xe0, 0xf2, 0x74,		/* l %r14, 0x274(%r15) */
-  0x58, 0xf0, 0xf2, 0x7c,		/* l %r15, 0x27c(%r15) */
-};
-
-/* Code sequence restoring GPRs, for 64-bit targets and 31-bit targets
-   with high GPRs.  */
-
-static const unsigned char s390_ft_exit_gpr_zarch[] = {
-  0xeb, 0x0f, 0xf2, 0x00, 0x00, 0x04,	/* lmg %r0, %r15, 0x200(%r15) */
-};
-
-/* Writes instructions to target, updating the to pointer.  */
-
-static void
-append_insns (CORE_ADDR *to, size_t len, const unsigned char *buf)
-{
-  target_write_memory (*to, buf, len);
-  *to += len;
-}
-
-/* Relocates an instruction from oldloc to *to, updating to.  */
-
-static int
-s390_relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc, int is_64)
-{
-  gdb_byte buf[6];
-  int ilen;
-  int op2;
-  /* 0: no fixup, 1: PC16DBL fixup, 2: PC32DBL fixup.  */
-  int mode = 0;
-  int is_bras = 0;
-  read_inferior_memory (oldloc, buf, sizeof buf);
-  if (buf[0] < 0x40)
-    ilen = 2;
-  else if (buf[0] < 0xc0)
-    ilen = 4;
-  else
-    ilen = 6;
-  switch (buf[0])
-    {
-    case 0x05: /* BALR */
-    case 0x0c: /* BASSM */
-    case 0x0d: /* BASR */
-    case 0x45: /* BAL */
-    case 0x4d: /* BAS */
-      /* These save a return address and mess around with registers.
-	 We can't relocate them.  */
-      return 1;
-    case 0x84: /* BRXH */
-    case 0x85: /* BRXLE */
-      mode = 1;
-      break;
-    case 0xa7:
-      op2 = buf[1] & 0xf;
-      /* BRC, BRAS, BRCT, BRCTG */
-      if (op2 >= 4 && op2 <= 7)
-	mode = 1;
-      /* BRAS */
-      if (op2 == 5)
-	is_bras = 1;
-      break;
-    case 0xc0:
-      op2 = buf[1] & 0xf;
-      /* LARL, BRCL, BRASL */
-      if (op2 == 0 || op2 == 4 || op2 == 5)
-	mode = 2;
-      /* BRASL */
-      if (op2 == 5)
-	is_bras = 1;
-      break;
-    case 0xc4:
-    case 0xc6:
-      /* PC-relative addressing instructions.  */
-      mode = 2;
-      break;
-    case 0xc5: /* BPRP */
-    case 0xc7: /* BPP */
-      /* Branch prediction - just skip it.  */
-      return 0;
-    case 0xcc:
-      op2 = buf[1] & 0xf;
-      /* BRCTH */
-      if (op2 == 6)
-	mode = 2;
-      break;
-    case 0xec:
-      op2 = buf[5];
-      switch (op2)
-	{
-	case 0x44: /* BRXHG */
-	case 0x45: /* BRXLG */
-	case 0x64: /* CGRJ */
-	case 0x65: /* CLGRJ */
-	case 0x76: /* CRJ */
-	case 0x77: /* CLRJ */
-	  mode = 1;
-	  break;
-	}
-      break;
-    }
-
-  if (mode != 0)
-    {
-      /* We'll have to relocate an instruction with a PC-relative field.
-	 First, compute the target.  */
-      int64_t loffset = 0;
-      CORE_ADDR target;
-      if (mode == 1)
-	{
-	  int16_t soffset = 0;
-	  memcpy (&soffset, buf + 2, 2);
-	  loffset = soffset;
-	}
-      else if (mode == 2)
-	{
-	  int32_t soffset = 0;
-	  memcpy (&soffset, buf + 2, 4);
-	  loffset = soffset;
-	}
-      target = oldloc + loffset * 2;
-      if (!is_64)
-	target &= 0x7fffffff;
-
-      if (is_bras)
-	{
-	  /* BRAS or BRASL was used.  We cannot just relocate those, since
-	     they save the return address in a register.  We can, however,
-	     replace them with a LARL+JG sequence.  */
-
-	  /* Make the LARL.  */
-	  int32_t soffset;
-	  buf[0] = 0xc0;
-	  buf[1] &= 0xf0;
-	  loffset = oldloc + ilen - *to;
-	  loffset >>= 1;
-	  soffset = loffset;
-	  if (soffset != loffset && is_64)
-	    return 1;
-	  memcpy (buf + 2, &soffset, 4);
-	  append_insns (to, 6, buf);
-
-	  /* Note: this is not fully correct.  In 31-bit mode, LARL will write
-	     an address with the top bit 0, while BRAS/BRASL will write it
-	     with top bit 1.  It should not matter much, since linux compilers
-	     use BR and not BSM to return from functions, but it could confuse
-	     some poor stack unwinder.  */
-
-	  /* We'll now be writing a JG.  */
-	  mode = 2;
-	  buf[0] = 0xc0;
-	  buf[1] = 0xf4;
-	  ilen = 6;
-	}
-
-      /* Compute the new offset and write it to the buffer.  */
-      loffset = target - *to;
-      loffset >>= 1;
-
-      if (mode == 1)
-	{
-	  int16_t soffset = loffset;
-	  if (soffset != loffset)
-	    return 1;
-	  memcpy (buf + 2, &soffset, 2);
-	}
-      else if (mode == 2)
-	{
-	  int32_t soffset = loffset;
-	  if (soffset != loffset && is_64)
-	    return 1;
-	  memcpy (buf + 2, &soffset, 4);
-	}
-    }
-  append_insns (to, ilen, buf);
-  return 0;
-}
-
-/* Implementation of linux_target_ops method
-   "install_fast_tracepoint_jump_pad".  */
-
-static int
-s390_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint,
-				       CORE_ADDR tpaddr,
-				       CORE_ADDR collector,
-				       CORE_ADDR lockaddr,
-				       ULONGEST orig_size,
-				       CORE_ADDR *jump_entry,
-				       CORE_ADDR *trampoline,
-				       ULONGEST *trampoline_size,
-				       unsigned char *jjump_pad_insn,
-				       ULONGEST *jjump_pad_insn_size,
-				       CORE_ADDR *adjusted_insn_addr,
-				       CORE_ADDR *adjusted_insn_addr_end,
-				       char *err)
-{
-  int i;
-  int64_t loffset;
-  int32_t offset;
-  unsigned char jbuf[6] = { 0xc0, 0xf4, 0, 0, 0, 0 };	/* jg ... */
-  CORE_ADDR buildaddr = *jump_entry;
-#ifdef __s390x__
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-  int is_64 = register_size (regcache->tdesc, 0) == 8;
-  int is_zarch = is_64 || have_hwcap_s390_high_gprs;
-  int has_vx = have_hwcap_s390_vx;
-#else
-  int is_64 = 0, is_zarch = 0, has_vx = 0;
-#endif
-  CORE_ADDR literals[4] = {
-    tpaddr,
-    tpoint,
-    collector,
-    lockaddr,
-  };
-
-  /* First, store the GPRs.  */
-  if (is_zarch)
-    append_insns (&buildaddr, sizeof s390_ft_entry_gpr_zarch,
-			      s390_ft_entry_gpr_zarch);
-  else
-    append_insns (&buildaddr, sizeof s390_ft_entry_gpr_esa,
-			      s390_ft_entry_gpr_esa);
-
-  /* Second, misc registers (ARs, PSWM, FPC).  PSWA will be stored below.  */
-  append_insns (&buildaddr, sizeof s390_ft_entry_misc, s390_ft_entry_misc);
-
-  /* Third, FRs or VRs.  */
-  if (has_vx)
-    append_insns (&buildaddr, sizeof s390_ft_entry_vr, s390_ft_entry_vr);
-  else
-    append_insns (&buildaddr, sizeof s390_ft_entry_fr, s390_ft_entry_fr);
-
-  /* Now, the main part of code - store PSWA, take lock, call collector,
-     leave lock.  First, we'll need to fetch 4 literals.  */
-  if (is_64) {
-    unsigned char buf[] = {
-      0x07, 0x07,		/* nopr %r7 */
-      0x07, 0x07,		/* nopr %r7 */
-      0x07, 0x07,		/* nopr %r7 */
-      0xa7, 0x15, 0x00, 0x12,	/* bras %r1, .Lend */
-      0, 0, 0, 0, 0, 0, 0, 0,	/* tpaddr */
-      0, 0, 0, 0, 0, 0, 0, 0,	/* tpoint */
-      0, 0, 0, 0, 0, 0, 0, 0,	/* collector */
-      0, 0, 0, 0, 0, 0, 0, 0,	/* lockaddr */
-      /* .Lend: */
-    };
-    /* Find the proper start place in buf, so that literals will be
-       aligned. */
-    int bufpos = (buildaddr + 2) & 7;
-    /* Stuff the literals into the buffer. */
-    for (i = 0; i < 4; i++) {
-      uint64_t lit = literals[i];
-      memcpy (&buf[sizeof buf - 32 + i * 8], &lit, 8);
-    }
-    append_insns (&buildaddr, sizeof buf - bufpos, buf + bufpos);
-    append_insns (&buildaddr, sizeof s390_ft_main_64, s390_ft_main_64);
-  } else {
-    unsigned char buf[] = {
-      0x07, 0x07,		/* nopr %r7 */
-      0xa7, 0x15, 0x00, 0x0a,	/* bras %r1, .Lend */
-      0, 0, 0, 0,		/* tpaddr */
-      0, 0, 0, 0,		/* tpoint */
-      0, 0, 0, 0,		/* collector */
-      0, 0, 0, 0,		/* lockaddr */
-      /* .Lend: */
-    };
-    /* Find the proper start place in buf, so that literals will be
-       aligned. */
-    int bufpos = (buildaddr + 2) & 3;
-    /* First literal will be saved as the PSWA, make sure it has the high bit
-       set.  */
-    literals[0] |= 0x80000000;
-    /* Stuff the literals into the buffer. */
-    for (i = 0; i < 4; i++) {
-      uint32_t lit = literals[i];
-      memcpy (&buf[sizeof buf - 16 + i * 4], &lit, 4);
-    }
-    append_insns (&buildaddr, sizeof buf - bufpos, buf + bufpos);
-    append_insns (&buildaddr, sizeof s390_ft_main_31, s390_ft_main_31);
-  }
-
-  /* Restore FRs or VRs.  */
-  if (has_vx)
-    append_insns (&buildaddr, sizeof s390_ft_exit_vr, s390_ft_exit_vr);
-  else
-    append_insns (&buildaddr, sizeof s390_ft_exit_fr, s390_ft_exit_fr);
-
-  /* Restore misc registers.  */
-  append_insns (&buildaddr, sizeof s390_ft_exit_misc, s390_ft_exit_misc);
-
-  /* Restore the GPRs.  */
-  if (is_zarch)
-    append_insns (&buildaddr, sizeof s390_ft_exit_gpr_zarch,
-			      s390_ft_exit_gpr_zarch);
-  else
-    append_insns (&buildaddr, sizeof s390_ft_exit_gpr_esa,
-			      s390_ft_exit_gpr_esa);
-
-  /* Now, adjust the original instruction to execute in the jump
-     pad.  */
-  *adjusted_insn_addr = buildaddr;
-  if (s390_relocate_instruction (&buildaddr, tpaddr, is_64))
-    {
-      sprintf (err, "E.Could not relocate instruction for tracepoint.");
-      return 1;
-    }
-  *adjusted_insn_addr_end = buildaddr;
-
-  /* Finally, write a jump back to the program.  */
-
-  loffset = (tpaddr + orig_size) - buildaddr;
-  loffset >>= 1;
-  offset = loffset;
-  if (is_64 && offset != loffset)
-    {
-      sprintf (err,
-	       "E.Jump back from jump pad too far from tracepoint "
-	       "(offset 0x%" PRIx64 " > int33).", loffset);
-      return 1;
-    }
-  memcpy (jbuf + 2, &offset, 4);
-  append_insns (&buildaddr, sizeof jbuf, jbuf);
-
-  /* The jump pad is now built.  Wire in a jump to our jump pad.  This
-     is always done last (by our caller actually), so that we can
-     install fast tracepoints with threads running.  This relies on
-     the agent's atomic write support.  */
-  loffset = *jump_entry - tpaddr;
-  loffset >>= 1;
-  offset = loffset;
-  if (is_64 && offset != loffset)
-    {
-      sprintf (err,
-	       "E.Jump back from jump pad too far from tracepoint "
-	       "(offset 0x%" PRIx64 " > int33).", loffset);
-      return 1;
-    }
-  memcpy (jbuf + 2, &offset, 4);
-  memcpy (jjump_pad_insn, jbuf, sizeof jbuf);
-  *jjump_pad_insn_size = sizeof jbuf;
-
-  /* Return the end address of our pad.  */
-  *jump_entry = buildaddr;
-
-  return 0;
-}
-
-/* Implementation of linux_target_ops method
-   "get_min_fast_tracepoint_insn_len".  */
-
-static int
-s390_get_min_fast_tracepoint_insn_len (void)
-{
-  /* We only support using 6-byte jumps to reach the tracepoint code.
-     If the tracepoint buffer were allocated sufficiently close (64kiB)
-     to the executable code, and the traced instruction itself was close
-     enough to the beginning, we could use 4-byte jumps, but this doesn't
-     seem to be worth the effort.  */
-  return 6;
-}
-
-/* Implementation of linux_target_ops method "get_ipa_tdesc_idx".  */
-
-static int
-s390_get_ipa_tdesc_idx (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-  const struct target_desc *tdesc = regcache->tdesc;
-
-#ifdef __s390x__
-  if (tdesc == tdesc_s390x_linux64)
-    return S390_TDESC_64;
-  if (tdesc == tdesc_s390x_linux64v1)
-    return S390_TDESC_64V1;
-  if (tdesc == tdesc_s390x_linux64v2)
-    return S390_TDESC_64V2;
-  if (tdesc == tdesc_s390x_te_linux64)
-    return S390_TDESC_TE;
-  if (tdesc == tdesc_s390x_vx_linux64)
-    return S390_TDESC_VX;
-  if (tdesc == tdesc_s390x_tevx_linux64)
-    return S390_TDESC_TEVX;
-  if (tdesc == tdesc_s390x_gs_linux64)
-    return S390_TDESC_GS;
-#endif
-
-  if (tdesc == tdesc_s390_linux32)
-    return S390_TDESC_32;
-  if (tdesc == tdesc_s390_linux32v1)
-    return S390_TDESC_32V1;
-  if (tdesc == tdesc_s390_linux32v2)
-    return S390_TDESC_32V2;
-  if (tdesc == tdesc_s390_linux64)
-    return S390_TDESC_64;
-  if (tdesc == tdesc_s390_linux64v1)
-    return S390_TDESC_64V1;
-  if (tdesc == tdesc_s390_linux64v2)
-    return S390_TDESC_64V2;
-  if (tdesc == tdesc_s390_te_linux64)
-    return S390_TDESC_TE;
-  if (tdesc == tdesc_s390_vx_linux64)
-    return S390_TDESC_VX;
-  if (tdesc == tdesc_s390_tevx_linux64)
-    return S390_TDESC_TEVX;
-  if (tdesc == tdesc_s390_gs_linux64)
-    return S390_TDESC_GS;
-
-  return 0;
-}
-
-/* Appends given buffer to current_insn_ptr in the target.  */
-
-static void
-add_insns (const unsigned char *start, int len)
-{
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  if (debug_threads)
-    debug_printf ("Adding %d bytes of insn at %s\n",
-		  len, paddress (buildaddr));
-
-  append_insns (&buildaddr, len, start);
-  current_insn_ptr = buildaddr;
-}
-
-/* Register usage in emit:
-
-   - %r0, %r1: temp
-   - %r2: top of stack (high word for 31-bit)
-   - %r3: low word of top of stack (for 31-bit)
-   - %r4, %r5: temp
-   - %r6, %r7, %r8: don't use
-   - %r9: saved arg1
-   - %r10: saved arg2
-   - %r11: frame pointer
-   - %r12: saved top of stack for void_call_2 (high word for 31-bit)
-   - %r13: low word of saved top of stack (for 31-bit)
-   - %r14: return address for calls
-   - %r15: stack pointer
-
-  */
-
-/* The "emit_prologue" emit_ops method for s390.  */
-
-static void
-s390_emit_prologue (void)
-{
-  static const unsigned char buf[] = {
-    0x90, 0x9f, 0xf0, 0x24,		/* stm %r9, %r15, 0x24(%r15) */
-    0x18, 0x92,				/* lr %r9, %r2 */
-    0x18, 0xa3,				/* lr %r10, %r3 */
-    0x18, 0xbf,				/* lr %r11, %r15 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_epilogue" emit_ops method for s390.  */
-
-static void
-s390_emit_epilogue (void)
-{
-  static const unsigned char buf[] = {
-    0x90, 0x23, 0xa0, 0x00,		/* stm %r2, %r3, 0(%r10) */
-    0xa7, 0x28, 0x00, 0x00,		/* lhi %r2, 0 */
-    0x98, 0x9f, 0xb0, 0x24,		/* lm %r9, %r15, 0x24(%r11) */
-    0x07, 0xfe,				/* br %r14 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_add" emit_ops method for s390.  */
-
-static void
-s390_emit_add (void)
-{
-  static const unsigned char buf[] = {
-    0x5e, 0x30, 0xf0, 0x04,		/* al %r3, 4(%r15) */
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x98,	/* al %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_sub" emit_ops method for s390.  */
-
-static void
-s390_emit_sub (void)
-{
-  static const unsigned char buf[] = {
-    0x98, 0x45, 0xf0, 0x00,	/* lm %r4, %r5, 0(%r15) */
-    0x1f, 0x53,			/* slr %r5, %r3 */
-    0xb9, 0x99, 0x00, 0x42,	/* slbr %r4, %r2 */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-    0x18, 0x35,			/* lr %r3, %r5 */
-    0x18, 0x24,			/* lr %r2, %r4 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_mul" emit_ops method for s390.  */
-
-static void
-s390_emit_mul (void)
-{
-  emit_error = 1;
-}
-
-/* The "emit_lsh" emit_ops method for s390.  */
-
-static void
-s390_emit_lsh (void)
-{
-  static const unsigned char buf[] = {
-    0x18, 0x43,			/* lr %r4, %r3 */
-    0x98, 0x23, 0xf0, 0x00,	/* lm %r2, %r3, 0(%r15) */
-    0x8d, 0x20, 0x40, 0x00,	/* sldl %r2, 0(%r4) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_rsh_signed" emit_ops method for s390.  */
-
-static void
-s390_emit_rsh_signed (void)
-{
-  static const unsigned char buf[] = {
-    0x18, 0x43,			/* lr %r4, %r3 */
-    0x98, 0x23, 0xf0, 0x00,	/* lm %r2, %r3, 0(%r15) */
-    0x8e, 0x20, 0x40, 0x00,	/* srda %r2, 0(%r4) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_rsh_unsigned" emit_ops method for s390.  */
-
-static void
-s390_emit_rsh_unsigned (void)
-{
-  static const unsigned char buf[] = {
-    0x18, 0x43,			/* lr %r4, %r3 */
-    0x98, 0x23, 0xf0, 0x00,	/* lm %r2, %r3, 0(%r15) */
-    0x8c, 0x20, 0x40, 0x00,	/* srdl %r2, 0(%r4) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_ext" emit_ops method for s390.  */
-
-static void
-s390_emit_ext (int arg)
-{
-  unsigned char buf[] = {
-    0x8d, 0x20, 0x00, (unsigned char) (64 - arg), /* sldl %r2, <64-arg> */
-    0x8e, 0x20, 0x00, (unsigned char) (64 - arg), /* srda %r2, <64-arg> */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_log_not" emit_ops method for s390.  */
-
-static void
-s390_emit_log_not (void)
-{
-  static const unsigned char buf[] = {
-    0x16, 0x23,			/* or %r2, %r3 */
-    0xa7, 0x28, 0x00, 0x00,	/* lhi %r2, 0 */
-    0xa7, 0x38, 0x00, 0x00,	/* lhi %r3, 0 */
-    0xa7, 0x74, 0x00, 0x04,	/* jne .Lskip */
-    0xa7, 0x38, 0x00, 0x01,	/* lhi %r3, 1 */
-    /* .Lskip: */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_and" emit_ops method for s390.  */
-
-static void
-s390_emit_bit_and (void)
-{
-  static const unsigned char buf[] = {
-    0x54, 0x20, 0xf0, 0x00,	/* n %r2, 0(%r15) */
-    0x54, 0x30, 0xf0, 0x04,	/* n %r3, 4(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_or" emit_ops method for s390.  */
-
-static void
-s390_emit_bit_or (void)
-{
-  static const unsigned char buf[] = {
-    0x56, 0x20, 0xf0, 0x00,	/* o %r2, 0(%r15) */
-    0x56, 0x30, 0xf0, 0x04,	/* o %r3, 4(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_xor" emit_ops method for s390.  */
-
-static void
-s390_emit_bit_xor (void)
-{
-  static const unsigned char buf[] = {
-    0x57, 0x20, 0xf0, 0x00,	/* x %r2, 0(%r15) */
-    0x57, 0x30, 0xf0, 0x04,	/* x %r3, 4(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_not" emit_ops method for s390.  */
-
-static void
-s390_emit_bit_not (void)
-{
-  static const unsigned char buf[] = {
-    0xa7, 0x48, 0xff, 0xff,	/* lhi %r4, -1 */
-    0x17, 0x24,			/* xr %r2, %r4 */
-    0x17, 0x34,			/* xr %r3, %r4 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_equal" emit_ops method for s390.  */
-
-static void
-s390_emit_equal (void)
-{
-  s390_emit_bit_xor ();
-  s390_emit_log_not ();
-}
-
-/* The "emit_less_signed" emit_ops method for s390.  */
-
-static void
-s390_emit_less_signed (void)
-{
-  static const unsigned char buf[] = {
-    0x59, 0x20, 0xf0, 0x00,	/* c %r2, 0(%r15) */
-    0xa7, 0x24, 0x00, 0x0c,	/* jh .Lless */
-    0xa7, 0x44, 0x00, 0x06,	/* jl .Lhigh */
-    0x55, 0x30, 0xf0, 0x04,	/* cl %r3, 4(%r15) */
-    0xa7, 0x24, 0x00, 0x06,	/* jh .Lless */
-    /* .Lhigh: */
-    0xa7, 0x38, 0x00, 0x00,	/* lhi %r3, 0 */
-    0xa7, 0xf4, 0x00, 0x04,	/* j .Lend */
-    /* .Lless: */
-    0xa7, 0x38, 0x00, 0x01,	/* lhi %r3, 1 */
-    /* .Lend: */
-    0xa7, 0x28, 0x00, 0x00,	/* lhi %r2, 0 */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_less_unsigned" emit_ops method for s390.  */
-
-static void
-s390_emit_less_unsigned (void)
-{
-  static const unsigned char buf[] = {
-    0x55, 0x20, 0xf0, 0x00,	/* cl %r2, 0(%r15) */
-    0xa7, 0x24, 0x00, 0x0c,	/* jh .Lless */
-    0xa7, 0x44, 0x00, 0x06,	/* jl .Lhigh */
-    0x55, 0x30, 0xf0, 0x04,	/* cl %r3, 4(%r15) */
-    0xa7, 0x24, 0x00, 0x06,	/* jh .Lless */
-    /* .Lhigh: */
-    0xa7, 0x38, 0x00, 0x00,	/* lhi %r3, 0 */
-    0xa7, 0xf4, 0x00, 0x04,	/* j .Lend */
-    /* .Lless: */
-    0xa7, 0x38, 0x00, 0x01,	/* lhi %r3, 1 */
-    /* .Lend: */
-    0xa7, 0x28, 0x00, 0x00,	/* lhi %r2, 0 */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_ref" emit_ops method for s390.  */
-
-static void
-s390_emit_ref (int size)
-{
-  static const unsigned char buf1[] = {
-    0xa7, 0x28, 0x00, 0x00,	/* lhi %r2, 0 */
-    0x43, 0x30, 0x30, 0x00,	/* ic %r3, 0(%r3) */
-  };
-  static const unsigned char buf2[] = {
-    0xa7, 0x28, 0x00, 0x00,	/* lhi %r2, 0 */
-    0x48, 0x30, 0x30, 0x00,	/* lh %r3, 0(%r3) */
-  };
-  static const unsigned char buf4[] = {
-    0xa7, 0x28, 0x00, 0x00,	/* lhi %r2, 0 */
-    0x58, 0x30, 0x30, 0x00,	/* l %r3, 0(%r3) */
-  };
-  static const unsigned char buf8[] = {
-    0x98, 0x23, 0x30, 0x00,	/* lm %r2, %r3, 0(%r3) */
-  };
-  switch (size)
-    {
-    case 1:
-      add_insns (buf1, sizeof buf1);
-      break;
-    case 2:
-      add_insns (buf2, sizeof buf2);
-      break;
-    case 4:
-      add_insns (buf4, sizeof buf4);
-      break;
-    case 8:
-      add_insns (buf8, sizeof buf8);
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-/* The "emit_if_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_if_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x16, 0x23,				/* or %r2, %r3 */
-    0x98, 0x23, 0xf0, 0x00,		/* lm %r2, %r3, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-    0xc0, 0x74, 0x00, 0x00, 0x00, 0x00	/* jgne <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 12;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_goto" emit_ops method for s390 and s390x.  */
-
-static void
-s390_emit_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00,	/* jg <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 2;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "write_goto_address" emit_ops method for s390 and s390x.  */
-
-static void
-s390_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  long diff = ((long) (to - (from - 2))) / 2;
-  int sdiff = diff;
-  unsigned char buf[sizeof sdiff];
-
-  /* We're only doing 4-byte sizes at the moment.  */
-  if (size != sizeof sdiff || sdiff != diff)
-    {
-      emit_error = 1;
-      return;
-    }
-
-  memcpy (buf, &sdiff, sizeof sdiff);
-  target_write_memory (from, buf, sizeof sdiff);
-}
-
-/* Preparation for emitting a literal pool of given size.  Loads the address
-   of the pool into %r1, and jumps over it.  Called should emit the pool data
-   immediately afterwards.  Used for both s390 and s390x.  */
-
-static void
-s390_emit_litpool (int size)
-{
-  static const unsigned char nop[] = {
-    0x07, 0x07,
-  };
-  unsigned char buf[] = {
-    0xa7, 0x15, 0x00,
-    (unsigned char) ((size + 4) / 2),	/* bras %r1, .Lend+size */
-    /* .Lend: */
-  };
-  if (size == 4)
-    {
-      /* buf needs to start at even halfword for litpool to be aligned */
-      if (current_insn_ptr & 2)
-	add_insns (nop, sizeof nop);
-    }
-  else
-    {
-      while ((current_insn_ptr & 6) != 4)
-	add_insns (nop, sizeof nop);
-    }
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_const" emit_ops method for s390.  */
-
-static void
-s390_emit_const (LONGEST num)
-{
-  unsigned long long n = num;
-  unsigned char buf_s[] = {
-    /* lhi %r3, <num> */
-    0xa7, 0x38,
-    (unsigned char) (num >> 8), (unsigned char) num,
-    /* xr %r2, %r2 */
-    0x17, 0x22,
-  };
-  static const unsigned char buf_l[] = {
-    0x98, 0x23, 0x10, 0x00,	/* lm %r2, %r3, 0(%r1) */
-  };
-  if (num < 0x8000 && num >= 0)
-  {
-    add_insns (buf_s, sizeof buf_s);
-  }
-  else
-  {
-    s390_emit_litpool (8);
-    add_insns ((unsigned char *) &n, sizeof n);
-    add_insns (buf_l, sizeof buf_l);
-  }
-}
-
-/* The "emit_call" emit_ops method for s390.  */
-
-static void
-s390_emit_call (CORE_ADDR fn)
-{
-  unsigned int n = fn;
-  static const unsigned char buf[] = {
-    0x58, 0x10, 0x10, 0x00,	/* l %r1, 0(%r1) */
-    0xa7, 0xfa, 0xff, 0xa0,	/* ahi %r15, -0x60 */
-    0x0d, 0xe1,			/* basr %r14, %r1 */
-    0xa7, 0xfa, 0x00, 0x60,	/* ahi %r15, 0x60 */
-  };
-  s390_emit_litpool (4);
-  add_insns ((unsigned char *) &n, sizeof n);
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_reg" emit_ops method for s390.  */
-
-static void
-s390_emit_reg (int reg)
-{
-  unsigned char bufpre[] = {
-    /* lr %r2, %r9 */
-    0x18, 0x29,
-    /* lhi %r3, <reg> */
-    0xa7, 0x38, (unsigned char) (reg >> 8), (unsigned char) reg,
-  };
-  add_insns (bufpre, sizeof bufpre);
-  s390_emit_call (get_raw_reg_func_addr ());
-}
-
-/* The "emit_pop" emit_ops method for s390.  */
-
-static void
-s390_emit_pop (void)
-{
-  static const unsigned char buf[] = {
-    0x98, 0x23, 0xf0, 0x00,	/* lm %r2, %r3, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,	/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_stack_flush" emit_ops method for s390.  */
-
-static void
-s390_emit_stack_flush (void)
-{
-  static const unsigned char buf[] = {
-    0xa7, 0xfa, 0xff, 0xf8,	/* ahi %r15, -8 */
-    0x90, 0x23, 0xf0, 0x00,	/* stm %r2, %r3, 0(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_zero_ext" emit_ops method for s390.  */
-
-static void
-s390_emit_zero_ext (int arg)
-{
-  unsigned char buf[] = {
-    0x8d, 0x20, 0x00, (unsigned char) (64 - arg), /* sldl %r2, <64-arg> */
-    0x8c, 0x20, 0x00, (unsigned char) (64 - arg), /* srdl %r2, <64-arg> */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_swap" emit_ops method for s390.  */
-
-static void
-s390_emit_swap (void)
-{
-  static const unsigned char buf[] = {
-    0x98, 0x45, 0xf0, 0x00,	/* lm %r4, %r5, 0(%r15) */
-    0x90, 0x23, 0xf0, 0x00,	/* stm %r2, %r3, 0(%r15) */
-    0x18, 0x24,			/* lr %r2, %r4 */
-    0x18, 0x35,			/* lr %r3, %r5 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_stack_adjust" emit_ops method for s390.  */
-
-static void
-s390_emit_stack_adjust (int n)
-{
-  unsigned char buf[] = {
-    /* ahi %r15, 8*n */
-    0xa7, 0xfa,
-    (unsigned char ) (n * 8 >> 8), (unsigned char) (n * 8),
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* Sets %r2 to a 32-bit constant.  */
-
-static void
-s390_emit_set_r2 (int arg1)
-{
-  unsigned char buf_s[] = {
-    /* lhi %r2, <arg1> */
-    0xa7, 0x28, (unsigned char) (arg1 >> 8), (unsigned char) arg1,
-  };
-  static const unsigned char buf_l[] = {
-    0x58, 0x20, 0x10, 0x00,	/* l %r2, 0(%r1) */
-  };
-  if (arg1 < 0x8000 && arg1 >= -0x8000)
-  {
-    add_insns (buf_s, sizeof buf_s);
-  }
-  else
-  {
-    s390_emit_litpool (4);
-    add_insns ((unsigned char *) &arg1, sizeof arg1);
-    add_insns (buf_l, sizeof buf_l);
-  }
-}
-
-/* The "emit_int_call_1" emit_ops method for s390.  */
-
-static void
-s390_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  /* FN's prototype is `LONGEST(*fn)(int)'.  */
-  s390_emit_set_r2 (arg1);
-  s390_emit_call (fn);
-}
-
-/* The "emit_void_call_2" emit_ops method for s390.  */
-
-static void
-s390_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  /* FN's prototype is `void(*fn)(int,LONGEST)'.  */
-  static const unsigned char buf[] = {
-    0x18, 0xc2,			/* lr %r12, %r2 */
-    0x18, 0xd3,			/* lr %r13, %r3 */
-    0x18, 0x43,			/* lr %r4, %r3 */
-    0x18, 0x32,			/* lr %r3, %r2 */
-  };
-  static const unsigned char buf2[] = {
-    0x18, 0x2c,			/* lr %r2, %r12 */
-    0x18, 0x3d,			/* lr %r3, %r13 */
-  };
-  add_insns (buf, sizeof buf);
-  s390_emit_set_r2 (arg1);
-  s390_emit_call (fn);
-  add_insns (buf2, sizeof buf2);
-}
-
-/* The "emit_eq_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_eq_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x57, 0x20, 0xf0, 0x00,		/* x %r2, 0(%r15) */
-    0x57, 0x30, 0xf0, 0x04,		/* x %r3, 4(%r15) */
-    0x16, 0x23,				/* or %r2, %r3 */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0x84, 0x00, 0x00, 0x00, 0x00,	/* jge <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 20;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_ne_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_ne_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x57, 0x20, 0xf0, 0x00,		/* x %r2, 0(%r15) */
-    0x57, 0x30, 0xf0, 0x04,		/* x %r3, 4(%r15) */
-    0x16, 0x23,				/* or %r2, %r3 */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0x74, 0x00, 0x00, 0x00, 0x00,	/* jgne <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 20;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_lt_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_lt_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x59, 0x20, 0xf0, 0x00,		/* c %r2, 0(%r15) */
-    0xa7, 0x24, 0x00, 0x0e,		/* jh .Ltrue */
-    0xa7, 0x44, 0x00, 0x06,		/* jl .Lfalse */
-    0x55, 0x30, 0xf0, 0x04,		/* cl %r3, 4(%r15) */
-    0xa7, 0x24, 0x00, 0x08,		/* jh .Ltrue */
-    /* .Lfalse: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xa7, 0xf4, 0x00, 0x09,		/* j .Lend */
-    /* .Ltrue: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00,	/* jg <fillme> */
-    /* .Lend: */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 42;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_le_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_le_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x59, 0x20, 0xf0, 0x00,		/* c %r2, 0(%r15) */
-    0xa7, 0x24, 0x00, 0x0e,		/* jh .Ltrue */
-    0xa7, 0x44, 0x00, 0x06,		/* jl .Lfalse */
-    0x55, 0x30, 0xf0, 0x04,		/* cl %r3, 4(%r15) */
-    0xa7, 0xa4, 0x00, 0x08,		/* jhe .Ltrue */
-    /* .Lfalse: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xa7, 0xf4, 0x00, 0x09,		/* j .Lend */
-    /* .Ltrue: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00,	/* jg <fillme> */
-    /* .Lend: */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 42;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_gt_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_gt_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x59, 0x20, 0xf0, 0x00,		/* c %r2, 0(%r15) */
-    0xa7, 0x44, 0x00, 0x0e,		/* jl .Ltrue */
-    0xa7, 0x24, 0x00, 0x06,		/* jh .Lfalse */
-    0x55, 0x30, 0xf0, 0x04,		/* cl %r3, 4(%r15) */
-    0xa7, 0x44, 0x00, 0x08,		/* jl .Ltrue */
-    /* .Lfalse: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xa7, 0xf4, 0x00, 0x09,		/* j .Lend */
-    /* .Ltrue: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00,	/* jg <fillme> */
-    /* .Lend: */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 42;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_ge_goto" emit_ops method for s390.  */
-
-static void
-s390_emit_ge_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0x59, 0x20, 0xf0, 0x00,		/* c %r2, 0(%r15) */
-    0xa7, 0x44, 0x00, 0x0e,		/* jl .Ltrue */
-    0xa7, 0x24, 0x00, 0x06,		/* jh .Lfalse */
-    0x55, 0x30, 0xf0, 0x04,		/* cl %r3, 4(%r15) */
-    0xa7, 0xc4, 0x00, 0x08,		/* jle .Ltrue */
-    /* .Lfalse: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xa7, 0xf4, 0x00, 0x09,		/* j .Lend */
-    /* .Ltrue: */
-    0x98, 0x23, 0xf0, 0x08,		/* lm %r2, %r3, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00,	/* jg <fillme> */
-    /* .Lend: */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 42;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_ops" structure for s390.  Named _impl to avoid name
-   collision with s390_emit_ops function.  */
-
-static struct emit_ops s390_emit_ops_impl =
-  {
-    s390_emit_prologue,
-    s390_emit_epilogue,
-    s390_emit_add,
-    s390_emit_sub,
-    s390_emit_mul,
-    s390_emit_lsh,
-    s390_emit_rsh_signed,
-    s390_emit_rsh_unsigned,
-    s390_emit_ext,
-    s390_emit_log_not,
-    s390_emit_bit_and,
-    s390_emit_bit_or,
-    s390_emit_bit_xor,
-    s390_emit_bit_not,
-    s390_emit_equal,
-    s390_emit_less_signed,
-    s390_emit_less_unsigned,
-    s390_emit_ref,
-    s390_emit_if_goto,
-    s390_emit_goto,
-    s390_write_goto_address,
-    s390_emit_const,
-    s390_emit_call,
-    s390_emit_reg,
-    s390_emit_pop,
-    s390_emit_stack_flush,
-    s390_emit_zero_ext,
-    s390_emit_swap,
-    s390_emit_stack_adjust,
-    s390_emit_int_call_1,
-    s390_emit_void_call_2,
-    s390_emit_eq_goto,
-    s390_emit_ne_goto,
-    s390_emit_lt_goto,
-    s390_emit_le_goto,
-    s390_emit_gt_goto,
-    s390_emit_ge_goto
-  };
-
-#ifdef __s390x__
-
-/* The "emit_prologue" emit_ops method for s390x.  */
-
-static void
-s390x_emit_prologue (void)
-{
-  static const unsigned char buf[] = {
-    0xeb, 0x9f, 0xf0, 0x48, 0x00, 0x24,	/* stmg %r9, %r15, 0x48(%r15) */
-    0xb9, 0x04, 0x00, 0x92,		/* lgr %r9, %r2 */
-    0xb9, 0x04, 0x00, 0xa3,		/* lgr %r10, %r3 */
-    0xb9, 0x04, 0x00, 0xbf,		/* lgr %r11, %r15 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_epilogue" emit_ops method for s390x.  */
-
-static void
-s390x_emit_epilogue (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xa0, 0x00, 0x00, 0x24,	/* stg %r2, 0(%r10) */
-    0xa7, 0x29, 0x00, 0x00,		/* lghi %r2, 0 */
-    0xeb, 0x9f, 0xf0, 0x48, 0x00, 0x04,	/* lmg %r9, %r15, 0x48(%r15) */
-    0x07, 0xfe,				/* br %r14 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_add" emit_ops method for s390x.  */
-
-static void
-s390x_emit_add (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x0a,	/* alg %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_sub" emit_ops method for s390x.  */
-
-static void
-s390x_emit_sub (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04,	/* lg %r3, 0(%r15) */
-    0xb9, 0x0b, 0x00, 0x32,		/* slgr %r3, %r2 */
-    0xb9, 0x04, 0x00, 0x23,		/* lgr %r2, %r3 */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_mul" emit_ops method for s390x.  */
-
-static void
-s390x_emit_mul (void)
-{
-  emit_error = 1;
-}
-
-/* The "emit_lsh" emit_ops method for s390x.  */
-
-static void
-s390x_emit_lsh (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04,	/* lg %r3, 0(%r15) */
-    0xeb, 0x23, 0x20, 0x00, 0x00, 0x0d,	/* sllg %r2, %r3, 0(%r2) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_rsh_signed" emit_ops method for s390x.  */
-
-static void
-s390x_emit_rsh_signed (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04,	/* lg %r3, 0(%r15) */
-    0xeb, 0x23, 0x20, 0x00, 0x00, 0x0a,	/* srag %r2, %r3, 0(%r2) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_rsh_unsigned" emit_ops method for s390x.  */
-
-static void
-s390x_emit_rsh_unsigned (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04,	/* lg %r3, 0(%r15) */
-    0xeb, 0x23, 0x20, 0x00, 0x00, 0x0c,	/* srlg %r2, %r3, 0(%r2) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_ext" emit_ops method for s390x.  */
-
-static void
-s390x_emit_ext (int arg)
-{
-  unsigned char buf[] = {
-    /* sllg %r2, %r2, <64-arg> */
-    0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0d,
-    /* srag %r2, %r2, <64-arg> */
-    0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0a,
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_log_not" emit_ops method for s390x.  */
-
-static void
-s390x_emit_log_not (void)
-{
-  static const unsigned char buf[] = {
-    0xb9, 0x00, 0x00, 0x22,		/* lpgr %r2, %r2 */
-    0xa7, 0x2b, 0xff, 0xff,		/* aghi %r2, -1 */
-    0xeb, 0x22, 0x00, 0x3f, 0x00, 0x0c,	/* srlg %r2, %r2, 63 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_and" emit_ops method for s390x.  */
-
-static void
-s390x_emit_bit_and (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x80,	/* ng %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_or" emit_ops method for s390x.  */
-
-static void
-s390x_emit_bit_or (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x81,	/* og %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_xor" emit_ops method for s390x.  */
-
-static void
-s390x_emit_bit_xor (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x82,	/* xg %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_bit_not" emit_ops method for s390x.  */
-
-static void
-s390x_emit_bit_not (void)
-{
-  static const unsigned char buf[] = {
-    0xa7, 0x39, 0xff, 0xff,	/* lghi %r3, -1 */
-    0xb9, 0x82, 0x00, 0x23,	/* xgr %r2, %r3 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_equal" emit_ops method for s390x.  */
-
-static void
-s390x_emit_equal (void)
-{
-  s390x_emit_bit_xor ();
-  s390x_emit_log_not ();
-}
-
-/* The "emit_less_signed" emit_ops method for s390x.  */
-
-static void
-s390x_emit_less_signed (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xa7, 0x29, 0x00, 0x01,		/* lghi %r2, 1 */
-    0xa7, 0x24, 0x00, 0x04,		/* jh .Lend */
-    0xa7, 0x29, 0x00, 0x00,		/* lghi %r2, 0 */
-    /* .Lend: */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_less_unsigned" emit_ops method for s390x.  */
-
-static void
-s390x_emit_less_unsigned (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x21,	/* clg %r2, 0(%r15) */
-    0xa7, 0x29, 0x00, 0x01,		/* lghi %r2, 1 */
-    0xa7, 0x24, 0x00, 0x04,		/* jh .Lend */
-    0xa7, 0x29, 0x00, 0x00,		/* lghi %r2, 0 */
-    /* .Lend: */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_ref" emit_ops method for s390x.  */
-
-static void
-s390x_emit_ref (int size)
-{
-  static const unsigned char buf1[] = {
-    0xe3, 0x20, 0x20, 0x00, 0x00, 0x90,	/* llgc %r2, 0(%r2) */
-  };
-  static const unsigned char buf2[] = {
-    0xe3, 0x20, 0x20, 0x00, 0x00, 0x91	/* llgh %r2, 0(%r2) */
-  };
-  static const unsigned char buf4[] = {
-    0xe3, 0x20, 0x20, 0x00, 0x00, 0x16,	/* llgf %r2, 0(%r2) */
-  };
-  static const unsigned char buf8[] = {
-    0xe3, 0x20, 0x20, 0x00, 0x00, 0x04,	/* lg %r2, 0(%r2) */
-  };
-  switch (size)
-    {
-    case 1:
-      add_insns (buf1, sizeof buf1);
-      break;
-    case 2:
-      add_insns (buf2, sizeof buf2);
-      break;
-    case 4:
-      add_insns (buf4, sizeof buf4);
-      break;
-    case 8:
-      add_insns (buf8, sizeof buf8);
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-/* The "emit_if_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_if_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xb9, 0x02, 0x00, 0x22,		/* ltgr %r2, %r2 */
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x04,	/* lg %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-    0xc0, 0x74, 0x00, 0x00, 0x00, 0x00,	/* jgne <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 16;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_const" emit_ops method for s390x.  */
-
-static void
-s390x_emit_const (LONGEST num)
-{
-  unsigned long long n = num;
-  unsigned char buf_s[] = {
-    /* lghi %r2, <num> */
-    0xa7, 0x29, (unsigned char) (num >> 8), (unsigned char) num,
-  };
-  static const unsigned char buf_l[] = {
-    0xe3, 0x20, 0x10, 0x00, 0x00, 0x04,	/* lg %r2, 0(%r1) */
-  };
-  if (num < 0x8000 && num >= -0x8000)
-  {
-    add_insns (buf_s, sizeof buf_s);
-  }
-  else
-  {
-    s390_emit_litpool (8);
-    add_insns ((unsigned char *) &n, sizeof n);
-    add_insns (buf_l, sizeof buf_l);
-  }
-}
-
-/* The "emit_call" emit_ops method for s390x.  */
-
-static void
-s390x_emit_call (CORE_ADDR fn)
-{
-  unsigned long n = fn;
-  static const unsigned char buf[] = {
-    0xe3, 0x10, 0x10, 0x00, 0x00, 0x04,	/* lg %r1, 0(%r1) */
-    0xa7, 0xfb, 0xff, 0x60,		/* aghi %r15, -0xa0 */
-    0x0d, 0xe1,				/* basr %r14, %r1 */
-    0xa7, 0xfb, 0x00, 0xa0,		/* aghi %r15, 0xa0 */
-  };
-  s390_emit_litpool (8);
-  add_insns ((unsigned char *) &n, sizeof n);
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_reg" emit_ops method for s390x.  */
-
-static void
-s390x_emit_reg (int reg)
-{
-  unsigned char buf[] = {
-    /* lgr %r2, %r9 */
-    0xb9, 0x04, 0x00, 0x29,
-    /* lghi %r3, <reg> */
-    0xa7, 0x39, (unsigned char) (reg >> 8), (unsigned char) reg,
-  };
-  add_insns (buf, sizeof buf);
-  s390x_emit_call (get_raw_reg_func_addr ());
-}
-
-/* The "emit_pop" emit_ops method for s390x.  */
-
-static void
-s390x_emit_pop (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x04,	/* lg %r2, 0(%r15) */
-    0x41, 0xf0, 0xf0, 0x08,		/* la %r15, 8(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_stack_flush" emit_ops method for s390x.  */
-
-static void
-s390x_emit_stack_flush (void)
-{
-  static const unsigned char buf[] = {
-    0xa7, 0xfb, 0xff, 0xf8,		/* aghi %r15, -8 */
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x24,	/* stg %r2, 0(%r15) */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_zero_ext" emit_ops method for s390x.  */
-
-static void
-s390x_emit_zero_ext (int arg)
-{
-  unsigned char buf[] = {
-    /* sllg %r2, %r2, <64-arg> */
-    0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0d,
-    /* srlg %r2, %r2, <64-arg> */
-    0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0c,
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_swap" emit_ops method for s390x.  */
-
-static void
-s390x_emit_swap (void)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04,	/* lg %r3, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x24,	/* stg %r2, 0(%r15) */
-    0xb9, 0x04, 0x00, 0x23,		/* lgr %r2, %r3 */
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_stack_adjust" emit_ops method for s390x.  */
-
-static void
-s390x_emit_stack_adjust (int n)
-{
-  unsigned char buf[] = {
-    /* aghi %r15, 8*n */
-    0xa7, 0xfb,
-    (unsigned char) (n * 8 >> 8), (unsigned char) (n * 8),
-  };
-  add_insns (buf, sizeof buf);
-}
-
-/* The "emit_int_call_1" emit_ops method for s390x.  */
-
-static void
-s390x_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  /* FN's prototype is `LONGEST(*fn)(int)'.  */
-  s390x_emit_const (arg1);
-  s390x_emit_call (fn);
-}
-
-/* The "emit_void_call_2" emit_ops method for s390x.  */
-
-static void
-s390x_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  /* FN's prototype is `void(*fn)(int,LONGEST)'.  */
-  static const unsigned char buf[] = {
-    0xb9, 0x04, 0x00, 0x32,		/* lgr %r3, %r2 */
-    0xb9, 0x04, 0x00, 0xc2,		/* lgr %r12, %r2 */
-  };
-  static const unsigned char buf2[] = {
-    0xb9, 0x04, 0x00, 0x2c,		/* lgr %r2, %r12 */
-  };
-  add_insns (buf, sizeof buf);
-  s390x_emit_const (arg1);
-  s390x_emit_call (fn);
-  add_insns (buf2, sizeof buf2);
-}
-
-/* The "emit_eq_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_eq_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0x84, 0x00, 0x00, 0x00, 0x00,	/* jge <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_ne_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_ne_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0x74, 0x00, 0x00, 0x00, 0x00,	/* jgne <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_lt_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_lt_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0x24, 0x00, 0x00, 0x00, 0x00,	/* jgh <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_le_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_le_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0xa4, 0x00, 0x00, 0x00, 0x00,	/* jghe <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_gt_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_gt_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0x44, 0x00, 0x00, 0x00, 0x00,	/* jgl <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_ge_goto" emit_ops method for s390x.  */
-
-static void
-s390x_emit_ge_goto (int *offset_p, int *size_p)
-{
-  static const unsigned char buf[] = {
-    0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20,	/* cg %r2, 0(%r15) */
-    0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */
-    0x41, 0xf0, 0xf0, 0x10,		/* la %r15, 16(%r15) */
-    0xc0, 0xc4, 0x00, 0x00, 0x00, 0x00,	/* jgle <fillme> */
-  };
-  add_insns (buf, sizeof buf);
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-/* The "emit_ops" structure for s390x.  */
-
-static struct emit_ops s390x_emit_ops =
-  {
-    s390x_emit_prologue,
-    s390x_emit_epilogue,
-    s390x_emit_add,
-    s390x_emit_sub,
-    s390x_emit_mul,
-    s390x_emit_lsh,
-    s390x_emit_rsh_signed,
-    s390x_emit_rsh_unsigned,
-    s390x_emit_ext,
-    s390x_emit_log_not,
-    s390x_emit_bit_and,
-    s390x_emit_bit_or,
-    s390x_emit_bit_xor,
-    s390x_emit_bit_not,
-    s390x_emit_equal,
-    s390x_emit_less_signed,
-    s390x_emit_less_unsigned,
-    s390x_emit_ref,
-    s390x_emit_if_goto,
-    s390_emit_goto,
-    s390_write_goto_address,
-    s390x_emit_const,
-    s390x_emit_call,
-    s390x_emit_reg,
-    s390x_emit_pop,
-    s390x_emit_stack_flush,
-    s390x_emit_zero_ext,
-    s390x_emit_swap,
-    s390x_emit_stack_adjust,
-    s390x_emit_int_call_1,
-    s390x_emit_void_call_2,
-    s390x_emit_eq_goto,
-    s390x_emit_ne_goto,
-    s390x_emit_lt_goto,
-    s390x_emit_le_goto,
-    s390x_emit_gt_goto,
-    s390x_emit_ge_goto
-  };
-#endif
-
-/* The "emit_ops" linux_target_ops method.  */
-
-static struct emit_ops *
-s390_emit_ops (void)
-{
-#ifdef __s390x__
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
-  if (register_size (regcache->tdesc, 0) == 8)
-    return &s390x_emit_ops;
-  else
-#endif
-    return &s390_emit_ops_impl;
-}
-
-struct linux_target_ops the_low_target = {
-  s390_arch_setup,
-  s390_regs_info,
-  s390_cannot_fetch_register,
-  s390_cannot_store_register,
-  NULL, /* fetch_register */
-  s390_get_pc,
-  s390_set_pc,
-  NULL, /* breakpoint_kind_from_pc */
-  s390_sw_breakpoint_from_kind,
-  NULL,
-  s390_breakpoint_len,
-  s390_breakpoint_at,
-  s390_supports_z_point_type,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  s390_collect_ptrace_register,
-  s390_supply_ptrace_register,
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  s390_supports_tracepoints,
-  s390_get_thread_area,
-  s390_install_fast_tracepoint_jump_pad,
-  s390_emit_ops,
-  s390_get_min_fast_tracepoint_insn_len,
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  s390_supports_hardware_single_step,
-  NULL, /* get_syscall_trapinfo */
-  s390_get_ipa_tdesc_idx,
-};
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-
-  init_registers_s390_linux32 ();
-  init_registers_s390_linux32v1 ();
-  init_registers_s390_linux32v2 ();
-  init_registers_s390_linux64 ();
-  init_registers_s390_linux64v1 ();
-  init_registers_s390_linux64v2 ();
-  init_registers_s390_te_linux64 ();
-  init_registers_s390_vx_linux64 ();
-  init_registers_s390_tevx_linux64 ();
-  init_registers_s390_gs_linux64 ();
-#ifdef __s390x__
-  init_registers_s390x_linux64 ();
-  init_registers_s390x_linux64v1 ();
-  init_registers_s390x_linux64v2 ();
-  init_registers_s390x_te_linux64 ();
-  init_registers_s390x_vx_linux64 ();
-  init_registers_s390x_tevx_linux64 ();
-  init_registers_s390x_gs_linux64 ();
-#endif
-
-  initialize_regsets_info (&s390_regsets_info);
-  initialize_regsets_info (&s390_regsets_info_3264);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-s390-tdesc.h ./gdb/gdbserver/linux-s390-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-s390-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-s390-tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,116 +0,0 @@
-/* Low level support for s390, shared between gdbserver and IPA.
-
-   Copyright (C) 2016-2020 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 GDBSERVER_LINUX_S390_TDESC_H
-#define GDBSERVER_LINUX_S390_TDESC_H
-
-/* Note: since IPA obviously knows what ABI it's running on (s390 vs s390x),
-   it's sufficient to pass only the register set here.  This, together with
-   the ABI known at IPA compile time, maps to a tdesc.  */
-
-enum s390_linux_tdesc {
-  S390_TDESC_32,
-  S390_TDESC_32V1,
-  S390_TDESC_32V2,
-  S390_TDESC_64,
-  S390_TDESC_64V1,
-  S390_TDESC_64V2,
-  S390_TDESC_TE,
-  S390_TDESC_VX,
-  S390_TDESC_TEVX,
-  S390_TDESC_GS,
-};
-
-#ifdef __s390x__
-
-/* Defined in auto-generated file s390x-linux64.c.  */
-void init_registers_s390x_linux64 (void);
-extern const struct target_desc *tdesc_s390x_linux64;
-
-/* Defined in auto-generated file s390x-linux64v1.c.  */
-void init_registers_s390x_linux64v1 (void);
-extern const struct target_desc *tdesc_s390x_linux64v1;
-
-/* Defined in auto-generated file s390x-linux64v2.c.  */
-void init_registers_s390x_linux64v2 (void);
-extern const struct target_desc *tdesc_s390x_linux64v2;
-
-/* Defined in auto-generated file s390x-te-linux64.c.  */
-void init_registers_s390x_te_linux64 (void);
-extern const struct target_desc *tdesc_s390x_te_linux64;
-
-/* Defined in auto-generated file s390x-vx-linux64.c.  */
-void init_registers_s390x_vx_linux64 (void);
-extern const struct target_desc *tdesc_s390x_vx_linux64;
-
-/* Defined in auto-generated file s390x-tevx-linux64.c.  */
-void init_registers_s390x_tevx_linux64 (void);
-extern const struct target_desc *tdesc_s390x_tevx_linux64;
-
-/* Defined in auto-generated file s390x-gs-linux64.c.  */
-void init_registers_s390x_gs_linux64 (void);
-extern const struct target_desc *tdesc_s390x_gs_linux64;
-
-#endif
-
-#if !defined __s390x__ || !defined IN_PROCESS_AGENT
-
-/* Defined in auto-generated file s390-linux32.c.  */
-void init_registers_s390_linux32 (void);
-extern const struct target_desc *tdesc_s390_linux32;
-
-/* Defined in auto-generated file s390-linux32v1.c.  */
-void init_registers_s390_linux32v1 (void);
-extern const struct target_desc *tdesc_s390_linux32v1;
-
-/* Defined in auto-generated file s390-linux32v2.c.  */
-void init_registers_s390_linux32v2 (void);
-extern const struct target_desc *tdesc_s390_linux32v2;
-
-/* Defined in auto-generated file s390-linux64.c.  */
-void init_registers_s390_linux64 (void);
-extern const struct target_desc *tdesc_s390_linux64;
-
-/* Defined in auto-generated file s390-linux64v1.c.  */
-void init_registers_s390_linux64v1 (void);
-extern const struct target_desc *tdesc_s390_linux64v1;
-
-/* Defined in auto-generated file s390-linux64v2.c.  */
-void init_registers_s390_linux64v2 (void);
-extern const struct target_desc *tdesc_s390_linux64v2;
-
-/* Defined in auto-generated file s390-te-linux64.c.  */
-void init_registers_s390_te_linux64 (void);
-extern const struct target_desc *tdesc_s390_te_linux64;
-
-/* Defined in auto-generated file s390-vx-linux64.c.  */
-void init_registers_s390_vx_linux64 (void);
-extern const struct target_desc *tdesc_s390_vx_linux64;
-
-/* Defined in auto-generated file s390-tevx-linux64.c.  */
-void init_registers_s390_tevx_linux64 (void);
-extern const struct target_desc *tdesc_s390_tevx_linux64;
-
-/* Defined in auto-generated file s390-gs-linux64.c.  */
-void init_registers_s390_gs_linux64 (void);
-extern const struct target_desc *tdesc_s390_gs_linux64;
-
-#endif
-
-#endif /* GDBSERVER_LINUX_S390_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-sh-low.c ./gdb/gdbserver/linux-sh-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-sh-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-sh-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,189 +0,0 @@
-/* GNU/Linux/SH specific low level interface, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-
-/* Defined in auto-generated file reg-sh.c.  */
-void init_registers_sh (void);
-extern const struct target_desc *tdesc_sh;
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-#include <asm/ptrace.h>
-
-#define sh_num_regs 41
-
-/* Currently, don't check/send MQ.  */
-static int sh_regmap[] = {
- 0,	4,	8,	12,	16,	20,	24,	28,
- 32,	36,	40,	44,	48,	52,	56,	60,
-
- REG_PC*4,   REG_PR*4,   REG_GBR*4,  -1,
- REG_MACH*4, REG_MACL*4, REG_SR*4,
- REG_FPUL*4, REG_FPSCR*4,
-
- REG_FPREG0*4+0,   REG_FPREG0*4+4,   REG_FPREG0*4+8,   REG_FPREG0*4+12,
- REG_FPREG0*4+16,  REG_FPREG0*4+20,  REG_FPREG0*4+24,  REG_FPREG0*4+28,
- REG_FPREG0*4+32,  REG_FPREG0*4+36,  REG_FPREG0*4+40,  REG_FPREG0*4+44,
- REG_FPREG0*4+48,  REG_FPREG0*4+52,  REG_FPREG0*4+56,  REG_FPREG0*4+60,
-};
-
-static int
-sh_cannot_store_register (int regno)
-{
-  return 0;
-}
-
-static int
-sh_cannot_fetch_register (int regno)
-{
-  return 0;
-}
-
-/* Correct in either endianness, obviously.  */
-static const unsigned short sh_breakpoint = 0xc3c3;
-#define sh_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-sh_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = sh_breakpoint_len;
-  return (const gdb_byte *) &sh_breakpoint;
-}
-
-static int
-sh_breakpoint_at (CORE_ADDR where)
-{
-  unsigned short insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 2);
-  if (insn == sh_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-/* Support for hardware single step.  */
-
-static int
-sh_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-/* Provide only a fill function for the general register set.  ps_lgetregs
-   will use this for NPTL support.  */
-
-static void sh_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-  for (i = 0; i < 23; i++)
-    if (sh_regmap[i] != -1)
-      collect_register (regcache, i, (char *) buf + sh_regmap[i]);
-}
-
-static struct regset_info sh_regsets[] = {
-  { 0, 0, 0, 0, GENERAL_REGS, sh_fill_gregset, NULL },
-  NULL_REGSET
-};
-
-static struct regsets_info sh_regsets_info =
-  {
-    sh_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info sh_usrregs_info =
-  {
-    sh_num_regs,
-    sh_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &sh_usrregs_info,
-    &sh_regsets_info
-  };
-
-static const struct regs_info *
-sh_regs_info (void)
-{
-  return &regs_info;
-}
-
-static void
-sh_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_sh;
-}
-
-struct linux_target_ops the_low_target = {
-  sh_arch_setup,
-  sh_regs_info,
-  sh_cannot_fetch_register,
-  sh_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  sh_sw_breakpoint_from_kind,
-  NULL,
-  0,
-  sh_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  sh_supports_hardware_single_step,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_sh ();
-
-  initialize_regsets_info (&sh_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-sparc-low.c ./gdb/gdbserver/linux-sparc-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-sparc-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-sparc-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,326 +0,0 @@
-/* Low level interface to ptrace, for the remote server for GDB.
-   Copyright (C) 1995-2020 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 "server.h"
-#include "linux-low.h"
-
-#include "nat/gdb_ptrace.h"
-
-#include "gdb_proc_service.h"
-
-/* The stack pointer is offset from the stack frame by a BIAS of 2047
-   (0x7ff) for 64-bit code.  BIAS is likely to be defined on SPARC
-   hosts, so undefine it first.  */
-#undef BIAS
-#define BIAS 2047
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-#define INSN_SIZE 4
-
-#define SPARC_R_REGS_NUM 32
-#define SPARC_F_REGS_NUM 48
-#define SPARC_CONTROL_REGS_NUM 6
-
-#define sparc_num_regs \
-  (SPARC_R_REGS_NUM + SPARC_F_REGS_NUM + SPARC_CONTROL_REGS_NUM)
-
-/* Each offset is multiplied by 8, because of the register size.
-   These offsets apply to the buffer sent/filled by ptrace.
-   Additionally, the array elements order corresponds to the .dat file, and the
-   gdb's registers enumeration order.  */
-
-static int sparc_regmap[] = {
-  /* These offsets correspond to GET/SETREGSET.  */
-	-1,  0*8,  1*8,  2*8,  3*8,  4*8,  5*8,  6*8,	 /* g0 .. g7 */
-	7*8,  8*8,  9*8, 10*8, 11*8, 12*8, 13*8, 14*8,	 /* o0 .. o5, sp, o7 */
-	-1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,	 /* l0 .. l7 */
-	-1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,	 /* i0 .. i5, fp, i7 */
-
-  /* Floating point registers offsets correspond to GET/SETFPREGSET.  */
-    0*4,  1*4,  2*4,  3*4,  4*4,  5*4,  6*4,  7*4,	   /*  f0 ..  f7 */
-    8*4,  9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4,	   /*  f8 .. f15 */
-   16*4, 17*4, 18*4, 19*4, 20*4, 21*4, 22*4, 23*4,	   /* f16 .. f23 */
-   24*4, 25*4, 26*4, 27*4, 28*4, 29*4, 30*4, 31*4,	   /* f24 .. f31 */
-
-  /* F32 offset starts next to f31: 31*4+4 = 16 * 8.  */
-   16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8,	   /* f32 .. f46 */
-   24*8, 25*8, 26*8, 27*8, 28*8, 29*8, 30*8, 31*8,	   /* f48 .. f62 */
-
-   17 *8, /*    pc */
-   18 *8, /*   npc */
-   16 *8, /* state */
-  /* FSR offset also corresponds to GET/SETFPREGSET, ans is placed
-     next to f62.  */
-   32 *8, /*   fsr */
-      -1, /*  fprs */
-  /* Y register is 32-bits length, but gdb takes care of that.  */
-   19 *8, /*     y */
-
-};
-
-
-struct regs_range_t
-{
-  int regno_start;
-  int regno_end;
-};
-
-static const struct regs_range_t gregs_ranges[] = {
- {  0, 31 }, /*   g0 .. i7  */
- { 80, 82 }, /*   pc .. state */
- { 84, 85 }  /* fprs .. y */
-};
-
-#define N_GREGS_RANGES (sizeof (gregs_ranges) / sizeof (struct regs_range_t))
-
-static const struct regs_range_t fpregs_ranges[] = {
- { 32, 79 }, /* f0 .. f62  */
- { 83, 83 }  /* fsr */
-};
-
-#define N_FPREGS_RANGES (sizeof (fpregs_ranges) / sizeof (struct regs_range_t))
-
-/* Defined in auto-generated file reg-sparc64.c.  */
-void init_registers_sparc64 (void);
-extern const struct target_desc *tdesc_sparc64;
-
-static int
-sparc_cannot_store_register (int regno)
-{
-  return (regno >= sparc_num_regs || sparc_regmap[regno] == -1);
-}
-
-static int
-sparc_cannot_fetch_register (int regno)
-{
-  return (regno >= sparc_num_regs || sparc_regmap[regno] == -1);
-}
-
-static void
-sparc_fill_gregset_to_stack (struct regcache *regcache, const void *buf)
-{
-  int i;
-  CORE_ADDR addr = 0;
-  unsigned char tmp_reg_buf[8];
-  const int l0_regno = find_regno (regcache->tdesc, "l0");
-  const int i7_regno = l0_regno + 15;
-
-  /* These registers have to be stored in the stack.  */
-  memcpy (&addr,
-	  ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")],
-	  sizeof (addr));
-
-  addr += BIAS;
-
-  for (i = l0_regno; i <= i7_regno; i++)
-    {
-      collect_register (regcache, i, tmp_reg_buf);
-      (*the_target->write_memory) (addr, tmp_reg_buf, sizeof (tmp_reg_buf));
-      addr += sizeof (tmp_reg_buf);
-    }
-}
-
-static void
-sparc_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-  int range;
-
-  for (range = 0; range < N_GREGS_RANGES; range++)
-    for (i = gregs_ranges[range].regno_start;
-	 i <= gregs_ranges[range].regno_end; i++)
-      if (sparc_regmap[i] != -1)
-	collect_register (regcache, i, ((char *) buf) + sparc_regmap[i]);
-
-  sparc_fill_gregset_to_stack (regcache, buf);
-}
-
-static void
-sparc_fill_fpregset (struct regcache *regcache, void *buf)
-{
-  int i;
-  int range;
-
-  for (range = 0; range < N_FPREGS_RANGES; range++)
-    for (i = fpregs_ranges[range].regno_start;
-	 i <= fpregs_ranges[range].regno_end; i++)
-      collect_register (regcache, i, ((char *) buf) + sparc_regmap[i]);
-
-}
-
-static void
-sparc_store_gregset_from_stack (struct regcache *regcache, const void *buf)
-{
-  int i;
-  CORE_ADDR addr = 0;
-  unsigned char tmp_reg_buf[8];
-  const int l0_regno = find_regno (regcache->tdesc, "l0");
-  const int i7_regno = l0_regno + 15;
-
-  /* These registers have to be obtained from the stack.  */
-  memcpy (&addr,
-	  ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")],
-	  sizeof (addr));
-
-  addr += BIAS;
-
-  for (i = l0_regno; i <= i7_regno; i++)
-    {
-      (*the_target->read_memory) (addr, tmp_reg_buf, sizeof (tmp_reg_buf));
-      supply_register (regcache, i, tmp_reg_buf);
-      addr += sizeof (tmp_reg_buf);
-    }
-}
-
-static void
-sparc_store_gregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-  char zerobuf[8];
-  int range;
-
-  memset (zerobuf, 0, sizeof (zerobuf));
-
-  for (range = 0; range < N_GREGS_RANGES; range++)
-    for (i = gregs_ranges[range].regno_start;
-	 i <= gregs_ranges[range].regno_end; i++)
-      if (sparc_regmap[i] != -1)
-	supply_register (regcache, i, ((char *) buf) + sparc_regmap[i]);
-      else
-	supply_register (regcache, i, zerobuf);
-
-  sparc_store_gregset_from_stack (regcache, buf);
-}
-
-static void
-sparc_store_fpregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-  int range;
-
-  for (range = 0; range < N_FPREGS_RANGES; range++)
-    for (i = fpregs_ranges[range].regno_start;
-	 i <= fpregs_ranges[range].regno_end;
-	 i++)
-      supply_register (regcache, i, ((char *) buf) + sparc_regmap[i]);
-}
-
-static const gdb_byte sparc_breakpoint[INSN_SIZE] = {
-  0x91, 0xd0, 0x20, 0x01
-};
-#define sparc_breakpoint_len INSN_SIZE
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const unsigned char *
-sparc_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = sparc_breakpoint_len;
-  return sparc_breakpoint;
-}
-
-static int
-sparc_breakpoint_at (CORE_ADDR where)
-{
-  unsigned char insn[INSN_SIZE];
-
-  (*the_target->read_memory) (where, (unsigned char *) insn, sizeof (insn));
-
-  if (memcmp (sparc_breakpoint, insn, sizeof (insn)) == 0)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only
-     uses TRAP Always.  */
-
-  return 0;
-}
-
-static void
-sparc_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_sparc64;
-}
-
-static struct regset_info sparc_regsets[] = {
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t),
-    GENERAL_REGS,
-    sparc_fill_gregset, sparc_store_gregset },
-  { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (fpregset_t),
-    FP_REGS,
-    sparc_fill_fpregset, sparc_store_fpregset },
-  NULL_REGSET
-};
-
-static struct regsets_info sparc_regsets_info =
-  {
-    sparc_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info sparc_usrregs_info =
-  {
-    sparc_num_regs,
-    /* No regmap needs to be provided since this impl. doesn't use
-       USRREGS.  */
-    NULL
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &sparc_usrregs_info,
-    &sparc_regsets_info
-  };
-
-static const struct regs_info *
-sparc_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  sparc_arch_setup,
-  sparc_regs_info,
-  sparc_cannot_fetch_register,
-  sparc_cannot_store_register,
-  NULL, /* fetch_register */
-  linux_get_pc_64bit,
-  /* No sparc_set_pc is needed.  */
-  NULL,
-  NULL, /* breakpoint_kind_from_pc */
-  sparc_sw_breakpoint_from_kind,
-  NULL, /* get_next_pcs */
-  0,
-  sparc_breakpoint_at,
-  NULL,  /* supports_z_point_type */
-  NULL, NULL, NULL, NULL,
-  NULL, NULL
-};
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-  init_registers_sparc64 ();
-
-  initialize_regsets_info (&sparc_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-tic6x-low.c ./gdb/gdbserver/linux-tic6x-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-tic6x-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-tic6x-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,455 +0,0 @@
-/* Target dependent code for GDB on TI C6x systems.
-
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
-   Contributed by Andrew Jenner <andrew@codesourcery.com>
-   Contributed by Yao Qi <yao@codesourcery.com>
-
-   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 "server.h"
-#include "linux-low.h"
-#include "arch/tic6x.h"
-#include "tdesc.h"
-
-#include "nat/gdb_ptrace.h"
-#include <endian.h>
-
-#include "gdb_proc_service.h"
-
-#ifndef PTRACE_GET_THREAD_AREA
-#define PTRACE_GET_THREAD_AREA 25
-#endif
-
-/* There are at most 69 registers accessible in ptrace.  */
-#define TIC6X_NUM_REGS 69
-
-#include <asm/ptrace.h>
-
-/* Defined in auto-generated file tic6x-c64xp-linux.c.  */
-void init_registers_tic6x_c64xp_linux (void);
-extern const struct target_desc *tdesc_tic6x_c64xp_linux;
-
-/* Defined in auto-generated file tic6x-c64x-linux.c.  */
-void init_registers_tic6x_c64x_linux (void);
-extern const struct target_desc *tdesc_tic6x_c64x_linux;
-
-/* Defined in auto-generated file tic62x-c6xp-linux.c.  */
-void init_registers_tic6x_c62x_linux (void);
-extern const struct target_desc *tdesc_tic6x_c62x_linux;
-
-union tic6x_register
-{
-  unsigned char buf[4];
-
-  int reg32;
-};
-
-/* Return the ptrace ``address'' of register REGNO.  */
-
-#if __BYTE_ORDER == __BIG_ENDIAN
-static int tic6x_regmap_c64xp[] = {
-  /* A0 - A15 */
-  53, 52, 55, 54, 57, 56, 59, 58,
-  61, 60, 63, 62, 65, 64, 67, 66,
-  /* B0 - B15 */
-  23, 22, 25, 24, 27, 26, 29, 28,
-  31, 30, 33, 32, 35, 34, 69, 68,
-  /* CSR PC */
-  5, 4,
-  /* A16 - A31 */
-  37, 36, 39, 38, 41, 40, 43, 42,
-  45, 44, 47, 46, 49, 48, 51, 50,
-  /* B16 - B31 */
-  7,  6,  9,  8,  11, 10, 13, 12,
-  15, 14, 17, 16, 19, 18, 21, 20,
-  /* TSR, ILC, RILC */
-  1,  2, 3
-};
-
-static int tic6x_regmap_c64x[] = {
-  /* A0 - A15 */
-  51, 50, 53, 52, 55, 54, 57, 56,
-  59, 58, 61, 60, 63, 62, 65, 64,
-  /* B0 - B15 */
-  21, 20, 23, 22, 25, 24, 27, 26,
-  29, 28, 31, 30, 33, 32, 67, 66,
-  /* CSR PC */
-  3,  2,
-  /* A16 - A31 */
-  35, 34, 37, 36, 39, 38, 41, 40,
-  43, 42, 45, 44, 47, 46, 49, 48,
-  /* B16 - B31 */
-  5,  4,  7,  6,  9,  8,  11, 10,
-  13, 12, 15, 14, 17, 16, 19, 18,
-  -1, -1, -1
-};
-
-static int tic6x_regmap_c62x[] = {
-  /* A0 - A15 */
-  19, 18, 21, 20, 23, 22, 25, 24,
-  27, 26, 29, 28, 31, 30, 33, 32,
-  /* B0 - B15 */
-   5,  4,  7,  6,  9,  8, 11, 10,
-  13, 12, 15, 14, 17, 16, 35, 34,
-  /* CSR, PC */
-  3, 2,
-  -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
-};
-
-#else
-static int tic6x_regmap_c64xp[] = {
-  /* A0 - A15 */
-  52, 53, 54, 55, 56, 57, 58, 59,
-  60, 61, 62, 63, 64, 65, 66, 67,
-  /* B0 - B15 */
-  22, 23, 24, 25, 26, 27, 28, 29,
-  30, 31, 32, 33, 34, 35, 68, 69,
-  /* CSR PC */
-   4,  5,
-  /* A16 - A31 */
-  36, 37, 38, 39, 40, 41, 42, 43,
-  44, 45, 46, 47, 48, 49, 50, 51,
-  /* B16 -B31 */
-   6,  7,  8,  9, 10, 11, 12, 13,
-  14, 15, 16, 17, 18, 19, 20, 31,
-  /* TSR, ILC, RILC */
-  0,  3, 2
-};
-
-static int tic6x_regmap_c64x[] = {
-  /* A0 - A15 */
-  50, 51, 52, 53, 54, 55, 56, 57,
-  58, 59, 60, 61, 62, 63, 64, 65,
-  /* B0 - B15 */
-  20, 21, 22, 23, 24, 25, 26, 27,
-  28, 29, 30, 31, 32, 33, 66, 67,
-  /* CSR PC */
-  2,  3,
-  /* A16 - A31 */
-  34, 35, 36, 37, 38, 39, 40, 41,
-  42, 43, 44, 45, 46, 47, 48, 49,
-  /* B16 - B31 */
-  4,  5,  6,  7,  8,  9,  10, 11,
-  12, 13, 14, 15, 16, 17, 18, 19,
-  -1, -1, -1
-};
-
-static int tic6x_regmap_c62x[] = {
-  /* A0 - A15 */
-  18, 19, 20, 21, 22, 23, 24, 25,
-  26, 27, 28, 29, 30, 31, 32, 33,
-  /* B0 - B15 */
-  4,  5,  6,  7,  8,  9, 10, 11,
-  12, 13, 14, 15, 16, 17, 34, 35,
-  /* CSR PC */
-  2,  3,
-  -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
-};
-
-#endif
-
-extern struct linux_target_ops the_low_target;
-
-static int *tic6x_regmap;
-static unsigned int tic6x_breakpoint;
-#define tic6x_breakpoint_len 4
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-tic6x_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = tic6x_breakpoint_len;
-  return (const gdb_byte *) &tic6x_breakpoint;
-}
-
-static struct usrregs_info tic6x_usrregs_info =
-  {
-    TIC6X_NUM_REGS,
-    NULL, /* Set in tic6x_read_description.  */
-  };
-
-static const struct target_desc *
-tic6x_read_description (enum c6x_feature feature)
-{
-  static target_desc *tdescs[C6X_LAST] = { };
-  struct target_desc **tdesc = &tdescs[feature];
-
-  if (*tdesc == NULL)
-    {
-      *tdesc = tic6x_create_target_description (feature);
-      static const char *expedite_regs[] = { "A15", "PC", NULL };
-      init_target_desc (*tdesc, expedite_regs);
-    }
-
-  return *tdesc;
-}
-
-static int
-tic6x_cannot_fetch_register (int regno)
-{
-  return (tic6x_regmap[regno] == -1);
-}
-
-static int
-tic6x_cannot_store_register (int regno)
-{
-  return (tic6x_regmap[regno] == -1);
-}
-
-static CORE_ADDR
-tic6x_get_pc (struct regcache *regcache)
-{
-  union tic6x_register pc;
-
-  collect_register_by_name (regcache, "PC", pc.buf);
-  return pc.reg32;
-}
-
-static void
-tic6x_set_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  union tic6x_register newpc;
-
-  newpc.reg32 = pc;
-  supply_register_by_name (regcache, "PC", newpc.buf);
-}
-
-static int
-tic6x_breakpoint_at (CORE_ADDR where)
-{
-  unsigned int insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
-  if (insn == tic6x_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-/* Fetch the thread-local storage pointer for libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-		    lwpid_t lwpid, int idx, void **base)
-{
-  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;
-}
-
-static void
-tic6x_collect_register (struct regcache *regcache, int regno,
-			union tic6x_register *reg)
-{
-  union tic6x_register tmp_reg;
-
-  collect_register (regcache, regno, &tmp_reg.reg32);
-  reg->reg32 = tmp_reg.reg32;
-}
-
-static void
-tic6x_supply_register (struct regcache *regcache, int regno,
-		       const union tic6x_register *reg)
-{
-  int offset = 0;
-
-  supply_register (regcache, regno, reg->buf + offset);
-}
-
-static void
-tic6x_fill_gregset (struct regcache *regcache, void *buf)
-{
-  auto regset = static_cast<union tic6x_register *> (buf);
-  int i;
-
-  for (i = 0; i < TIC6X_NUM_REGS; i++)
-    if (tic6x_regmap[i] != -1)
-      tic6x_collect_register (regcache, i, regset + tic6x_regmap[i]);
-}
-
-static void
-tic6x_store_gregset (struct regcache *regcache, const void *buf)
-{
-  const auto regset = static_cast<const union tic6x_register *> (buf);
-  int i;
-
-  for (i = 0; i < TIC6X_NUM_REGS; i++)
-    if (tic6x_regmap[i] != -1)
-      tic6x_supply_register (regcache, i, regset + tic6x_regmap[i]);
-}
-
-static struct regset_info tic6x_regsets[] = {
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, TIC6X_NUM_REGS * 4, GENERAL_REGS,
-    tic6x_fill_gregset, tic6x_store_gregset },
-  NULL_REGSET
-};
-
-static void
-tic6x_arch_setup (void)
-{
-  register unsigned int csr asm ("B2");
-  unsigned int cpuid;
-  enum c6x_feature feature = C6X_CORE;
-
-  /* Determine the CPU we're running on to find the register order.  */
-  __asm__ ("MVC .S2 CSR,%0" : "=r" (csr) :);
-  cpuid = csr >> 24;
-  switch (cpuid)
-    {
-    case 0x00: /* C62x */
-    case 0x02: /* C67x */
-      tic6x_regmap = tic6x_regmap_c62x;
-      tic6x_breakpoint = 0x0000a122;  /* BNOP .S2 0,5 */
-      feature = C6X_CORE;
-      break;
-    case 0x03: /* C67x+ */
-      tic6x_regmap = tic6x_regmap_c64x;
-      tic6x_breakpoint = 0x0000a122;  /* BNOP .S2 0,5 */
-      feature = C6X_GP;
-      break;
-    case 0x0c: /* C64x */
-      tic6x_regmap = tic6x_regmap_c64x;
-      tic6x_breakpoint = 0x0000a122;  /* BNOP .S2 0,5 */
-      feature = C6X_GP;
-      break;
-    case 0x10: /* C64x+ */
-    case 0x14: /* C674x */
-    case 0x15: /* C66x */
-      tic6x_regmap = tic6x_regmap_c64xp;
-      tic6x_breakpoint = 0x56454314;  /* illegal opcode */
-      feature = C6X_C6XP;
-      break;
-    default:
-      error ("Unknown CPU ID 0x%02x", cpuid);
-    }
-  tic6x_usrregs_info.regmap = tic6x_regmap;
-
-  current_process ()->tdesc = tic6x_read_description (feature);
-}
-
-/* Support for hardware single step.  */
-
-static int
-tic6x_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static struct regsets_info tic6x_regsets_info =
-  {
-    tic6x_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &tic6x_usrregs_info,
-    &tic6x_regsets_info
-  };
-
-static const struct regs_info *
-tic6x_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  tic6x_arch_setup,
-  tic6x_regs_info,
-  tic6x_cannot_fetch_register,
-  tic6x_cannot_store_register,
-  NULL, /* fetch_register */
-  tic6x_get_pc,
-  tic6x_set_pc,
-  NULL, /* breakpoint_kind_from_pc */
-  tic6x_sw_breakpoint_from_kind,
-  NULL,
-  0,
-  tic6x_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  tic6x_supports_hardware_single_step,
-};
-
-#if GDB_SELF_TEST
-#include "gdbsupport/selftest.h"
-
-namespace selftests {
-namespace tdesc {
-static void
-tic6x_tdesc_test ()
-{
-  SELF_CHECK (*tdesc_tic6x_c62x_linux == *tic6x_read_description (C6X_CORE));
-  SELF_CHECK (*tdesc_tic6x_c64x_linux == *tic6x_read_description (C6X_GP));
-  SELF_CHECK (*tdesc_tic6x_c64xp_linux == *tic6x_read_description (C6X_C6XP));
-}
-}
-}
-#endif
-
-void
-initialize_low_arch (void)
-{
-#if GDB_SELF_TEST
-  /* Initialize the Linux target descriptions.  */
-  init_registers_tic6x_c64xp_linux ();
-  init_registers_tic6x_c64x_linux ();
-  init_registers_tic6x_c62x_linux ();
-
-  selftests::register_test ("tic6x-tdesc", selftests::tdesc::tic6x_tdesc_test);
-#endif
-
-  initialize_regsets_info (&tic6x_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-tile-low.c ./gdb/gdbserver/linux-tile-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-tile-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-tile-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,222 +0,0 @@
-/* GNU/Linux/TILE-Gx specific low level interface, GDBserver.
-
-   Copyright (C) 2012-2020 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 "server.h"
-#include "linux-low.h"
-
-#include <arch/abi.h>
-#include "nat/gdb_ptrace.h"
-
-/* Defined in auto-generated file reg-tilegx.c.  */
-void init_registers_tilegx (void);
-extern const struct target_desc *tdesc_tilegx;
-
-/* Defined in auto-generated file reg-tilegx32.c.  */
-void init_registers_tilegx32 (void);
-extern const struct target_desc *tdesc_tilegx32;
-
-#define tile_num_regs 65
-
-static int tile_regmap[] =
-{
-   0,  1,  2,  3,  4,  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, 36, 37, 38, 39,
-  40, 41, 42, 43, 44, 45, 46, 47,
-  48, 49, 50, 51, 52, 53, 54, 55,
-  -1, -1, -1, -1, -1, -1, -1, -1,
-  56
-};
-
-static int
-tile_cannot_fetch_register (int regno)
-{
-  if (regno >= 0 && regno < 56)
-    return 0;
-  else if (regno == 64)
-    return 0;
-  else
-    return 1;
-}
-
-static int
-tile_cannot_store_register (int regno)
-{
-  if (regno >= 0 && regno < 56)
-    return 0;
-  else if (regno == 64)
-    return 0;
-  else
-    return 1;
-}
-
-static uint64_t tile_breakpoint = 0x400b3cae70166000ULL;
-#define tile_breakpoint_len 8
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-tile_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = tile_breakpoint_len;
-  return (const gdb_byte *) &tile_breakpoint;
-}
-
-static int
-tile_breakpoint_at (CORE_ADDR where)
-{
-  uint64_t insn;
-
-  (*the_target->read_memory) (where, (unsigned char *) &insn, 8);
-  if (insn == tile_breakpoint)
-    return 1;
-
-  /* If necessary, recognize more trap instructions here.  GDB only uses the
-     one.  */
-  return 0;
-}
-
-static void
-tile_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-  for (i = 0; i < tile_num_regs; i++)
-    if (tile_regmap[i] != -1)
-      collect_register (regcache, i, ((uint_reg_t *) buf) + tile_regmap[i]);
-}
-
-static void
-tile_store_gregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-
-  for (i = 0; i < tile_num_regs; i++)
-    if (tile_regmap[i] != -1)
-      supply_register (regcache, i, ((uint_reg_t *) buf) + tile_regmap[i]);
-}
-
-static struct regset_info tile_regsets[] =
-{
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, tile_num_regs * 8,
-    GENERAL_REGS, tile_fill_gregset, tile_store_gregset },
-  NULL_REGSET
-};
-
-static struct regsets_info tile_regsets_info =
-  {
-    tile_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct usrregs_info tile_usrregs_info =
-  {
-    tile_num_regs,
-    tile_regmap,
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &tile_usrregs_info,
-    &tile_regsets_info,
-  };
-
-static const struct regs_info *
-tile_regs_info (void)
-{
-  return &regs_info;
-}
-
-static void
-tile_arch_setup (void)
-{
-  int pid = pid_of (current_thread);
-  unsigned int machine;
-  int is_elf64 = linux_pid_exe_is_elf_64_file (pid, &machine);
-
-  if (sizeof (void *) == 4)
-    if (is_elf64 > 0)
-      error (_("Can't debug 64-bit process with 32-bit GDBserver"));
-
-  if (!is_elf64)
-    current_process ()->tdesc = tdesc_tilegx32;
-  else
-    current_process ()->tdesc = tdesc_tilegx;
-}
-
-/* Support for hardware single step.  */
-
-static int
-tile_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-
-struct linux_target_ops the_low_target =
-{
-  tile_arch_setup,
-  tile_regs_info,
-  tile_cannot_fetch_register,
-  tile_cannot_store_register,
-  NULL,
-  linux_get_pc_64bit,
-  linux_set_pc_64bit,
-  NULL, /* breakpoint_kind_from_pc */
-  tile_sw_breakpoint_from_kind,
-  NULL,
-  0,
-  tile_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  tile_supports_hardware_single_step,
-};
-
-void
-initialize_low_arch (void)
-{
-  init_registers_tilegx32();
-  init_registers_tilegx();
-
-  initialize_regsets_info (&tile_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-x86-low.c ./gdb/gdbserver/linux-x86-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-x86-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-x86-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,2922 +0,0 @@
-/* GNU/Linux/x86-64 specific low level interface, for the remote server
-   for GDB.
-   Copyright (C) 2002-2020 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 "server.h"
-#include <signal.h>
-#include <limits.h>
-#include <inttypes.h>
-#include "linux-low.h"
-#include "i387-fp.h"
-#include "x86-low.h"
-#include "gdbsupport/x86-xstate.h"
-#include "nat/gdb_ptrace.h"
-
-#ifdef __x86_64__
-#include "nat/amd64-linux-siginfo.h"
-#endif
-
-#include "gdb_proc_service.h"
-/* Don't include elf/common.h if linux/elf.h got included by
-   gdb_proc_service.h.  */
-#ifndef ELFMAG0
-#include "elf/common.h"
-#endif
-
-#include "gdbsupport/agent.h"
-#include "tdesc.h"
-#include "tracepoint.h"
-#include "ax.h"
-#include "nat/linux-nat.h"
-#include "nat/x86-linux.h"
-#include "nat/x86-linux-dregs.h"
-#include "linux-x86-tdesc.h"
-
-#ifdef __x86_64__
-static struct target_desc *tdesc_amd64_linux_no_xml;
-#endif
-static struct target_desc *tdesc_i386_linux_no_xml;
-
-
-static unsigned char jump_insn[] = { 0xe9, 0, 0, 0, 0 };
-static unsigned char small_jump_insn[] = { 0x66, 0xe9, 0, 0 };
-
-/* Backward compatibility for gdb without XML support.  */
-
-static const char *xmltarget_i386_linux_no_xml = "@<target>\
-<architecture>i386</architecture>\
-<osabi>GNU/Linux</osabi>\
-</target>";
-
-#ifdef __x86_64__
-static const char *xmltarget_amd64_linux_no_xml = "@<target>\
-<architecture>i386:x86-64</architecture>\
-<osabi>GNU/Linux</osabi>\
-</target>";
-#endif
-
-#include <sys/reg.h>
-#include <sys/procfs.h>
-#include <sys/uio.h>
-
-#ifndef PTRACE_GET_THREAD_AREA
-#define PTRACE_GET_THREAD_AREA 25
-#endif
-
-/* This definition comes from prctl.h, but some kernels may not have it.  */
-#ifndef PTRACE_ARCH_PRCTL
-#define PTRACE_ARCH_PRCTL      30
-#endif
-
-/* The following definitions come from prctl.h, but may be absent
-   for certain configurations.  */
-#ifndef ARCH_GET_FS
-#define ARCH_SET_GS 0x1001
-#define ARCH_SET_FS 0x1002
-#define ARCH_GET_FS 0x1003
-#define ARCH_GET_GS 0x1004
-#endif
-
-/* Per-process arch-specific data we want to keep.  */
-
-struct arch_process_info
-{
-  struct x86_debug_reg_state debug_reg_state;
-};
-
-#ifdef __x86_64__
-
-/* Mapping between the general-purpose registers in `struct user'
-   format and GDB's register array layout.
-   Note that the transfer layout uses 64-bit regs.  */
-static /*const*/ int i386_regmap[] = 
-{
-  RAX * 8, RCX * 8, RDX * 8, RBX * 8,
-  RSP * 8, RBP * 8, RSI * 8, RDI * 8,
-  RIP * 8, EFLAGS * 8, CS * 8, SS * 8,
-  DS * 8, ES * 8, FS * 8, GS * 8
-};
-
-#define I386_NUM_REGS (sizeof (i386_regmap) / sizeof (i386_regmap[0]))
-
-/* So code below doesn't have to care, i386 or amd64.  */
-#define ORIG_EAX ORIG_RAX
-#define REGSIZE 8
-
-static const int x86_64_regmap[] =
-{
-  RAX * 8, RBX * 8, RCX * 8, RDX * 8,
-  RSI * 8, RDI * 8, RBP * 8, RSP * 8,
-  R8 * 8, R9 * 8, R10 * 8, R11 * 8,
-  R12 * 8, R13 * 8, R14 * 8, R15 * 8,
-  RIP * 8, EFLAGS * 8, CS * 8, SS * 8,
-  DS * 8, ES * 8, FS * 8, GS * 8,
-  -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,
-  ORIG_RAX * 8,
-#ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-  21 * 8,  22 * 8,
-#else
-  -1, -1,
-#endif
-  -1, -1, -1, -1,			/* MPX registers BND0 ... BND3.  */
-  -1, -1,				/* MPX registers BNDCFGU, BNDSTATUS.  */
-  -1, -1, -1, -1, -1, -1, -1, -1,       /* xmm16 ... xmm31 (AVX512)  */
-  -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1,       /* ymm16 ... ymm31 (AVX512)  */
-  -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1,       /* k0 ... k7 (AVX512)  */
-  -1, -1, -1, -1, -1, -1, -1, -1,       /* zmm0 ... zmm31 (AVX512)  */
-  -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					/* pkru  */
-};
-
-#define X86_64_NUM_REGS (sizeof (x86_64_regmap) / sizeof (x86_64_regmap[0]))
-#define X86_64_USER_REGS (GS + 1)
-
-#else /* ! __x86_64__ */
-
-/* Mapping between the general-purpose registers in `struct user'
-   format and GDB's register array layout.  */
-static /*const*/ int i386_regmap[] = 
-{
-  EAX * 4, ECX * 4, EDX * 4, EBX * 4,
-  UESP * 4, EBP * 4, ESI * 4, EDI * 4,
-  EIP * 4, EFL * 4, CS * 4, SS * 4,
-  DS * 4, ES * 4, FS * 4, GS * 4
-};
-
-#define I386_NUM_REGS (sizeof (i386_regmap) / sizeof (i386_regmap[0]))
-
-#define REGSIZE 4
-
-#endif
-
-#ifdef __x86_64__
-
-/* Returns true if the current inferior belongs to a x86-64 process,
-   per the tdesc.  */
-
-static int
-is_64bit_tdesc (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-
-  return register_size (regcache->tdesc, 0) == 8;
-}
-
-#endif
-
-
-/* Called by libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-		    lwpid_t lwpid, int idx, void **base)
-{
-#ifdef __x86_64__
-  int use_64bit = is_64bit_tdesc ();
-
-  if (use_64bit)
-    {
-      switch (idx)
-	{
-	case FS:
-	  if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0)
-	    return PS_OK;
-	  break;
-	case GS:
-	  if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0)
-	    return PS_OK;
-	  break;
-	default:
-	  return PS_BADADDR;
-	}
-      return PS_ERR;
-    }
-#endif
-
-  {
-    unsigned int desc[4];
-
-    if (ptrace (PTRACE_GET_THREAD_AREA, lwpid,
-		(void *) (intptr_t) idx, (unsigned long) &desc) < 0)
-      return PS_ERR;
-
-    /* Ensure we properly extend the value to 64-bits for x86_64.  */
-    *base = (void *) (uintptr_t) desc[1];
-    return PS_OK;
-  }
-}
-
-/* Get the thread area address.  This is used to recognize which
-   thread is which when tracing with the in-process agent library.  We
-   don't read anything from the address, and treat it as opaque; it's
-   the address itself that we assume is unique per-thread.  */
-
-static int
-x86_get_thread_area (int lwpid, CORE_ADDR *addr)
-{
-#ifdef __x86_64__
-  int use_64bit = is_64bit_tdesc ();
-
-  if (use_64bit)
-    {
-      void *base;
-      if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_FS) == 0)
-	{
-	  *addr = (CORE_ADDR) (uintptr_t) base;
-	  return 0;
-	}
-
-      return -1;
-    }
-#endif
-
-  {
-    struct lwp_info *lwp = find_lwp_pid (ptid_t (lwpid));
-    struct thread_info *thr = get_lwp_thread (lwp);
-    struct regcache *regcache = get_thread_regcache (thr, 1);
-    unsigned int desc[4];
-    ULONGEST gs = 0;
-    const int reg_thread_area = 3; /* bits to scale down register value.  */
-    int idx;
-
-    collect_register_by_name (regcache, "gs", &gs);
-
-    idx = gs >> reg_thread_area;
-
-    if (ptrace (PTRACE_GET_THREAD_AREA,
-		lwpid_of (thr),
-		(void *) (long) idx, (unsigned long) &desc) < 0)
-      return -1;
-
-    *addr = desc[1];
-    return 0;
-  }
-}
-
-
-
-static int
-x86_cannot_store_register (int regno)
-{
-#ifdef __x86_64__
-  if (is_64bit_tdesc ())
-    return 0;
-#endif
-
-  return regno >= I386_NUM_REGS;
-}
-
-static int
-x86_cannot_fetch_register (int regno)
-{
-#ifdef __x86_64__
-  if (is_64bit_tdesc ())
-    return 0;
-#endif
-
-  return regno >= I386_NUM_REGS;
-}
-
-static void
-x86_fill_gregset (struct regcache *regcache, void *buf)
-{
-  int i;
-
-#ifdef __x86_64__
-  if (register_size (regcache->tdesc, 0) == 8)
-    {
-      for (i = 0; i < X86_64_NUM_REGS; i++)
-	if (x86_64_regmap[i] != -1)
-	  collect_register (regcache, i, ((char *) buf) + x86_64_regmap[i]);
-
-#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-      {
-        unsigned long base;
-        int lwpid = lwpid_of (current_thread);
-
-        collect_register_by_name (regcache, "fs_base", &base);
-        ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_SET_FS);
-
-        collect_register_by_name (regcache, "gs_base", &base);
-        ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_SET_GS);
-      }
-#endif
-
-      return;
-    }
-
-  /* 32-bit inferior registers need to be zero-extended.
-     Callers would read uninitialized memory otherwise.  */
-  memset (buf, 0x00, X86_64_USER_REGS * 8);
-#endif
-
-  for (i = 0; i < I386_NUM_REGS; i++)
-    collect_register (regcache, i, ((char *) buf) + i386_regmap[i]);
-
-  collect_register_by_name (regcache, "orig_eax",
-			    ((char *) buf) + ORIG_EAX * REGSIZE);
-
-#ifdef __x86_64__
-  /* Sign extend EAX value to avoid potential syscall restart
-     problems. 
-
-     See amd64_linux_collect_native_gregset() in gdb/amd64-linux-nat.c
-     for a detailed explanation.  */
-  if (register_size (regcache->tdesc, 0) == 4)
-    {
-      void *ptr = ((gdb_byte *) buf
-                   + i386_regmap[find_regno (regcache->tdesc, "eax")]);
-
-      *(int64_t *) ptr = *(int32_t *) ptr;
-    }
-#endif
-}
-
-static void
-x86_store_gregset (struct regcache *regcache, const void *buf)
-{
-  int i;
-
-#ifdef __x86_64__
-  if (register_size (regcache->tdesc, 0) == 8)
-    {
-      for (i = 0; i < X86_64_NUM_REGS; i++)
-	if (x86_64_regmap[i] != -1)
-	  supply_register (regcache, i, ((char *) buf) + x86_64_regmap[i]);
-
-#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
-      {
-        unsigned long base;
-        int lwpid = lwpid_of (current_thread);
-
-        if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_FS) == 0)
-          supply_register_by_name (regcache, "fs_base", &base);
-
-        if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_GS) == 0)
-          supply_register_by_name (regcache, "gs_base", &base);
-      }
-#endif
-      return;
-    }
-#endif
-
-  for (i = 0; i < I386_NUM_REGS; i++)
-    supply_register (regcache, i, ((char *) buf) + i386_regmap[i]);
-
-  supply_register_by_name (regcache, "orig_eax",
-			   ((char *) buf) + ORIG_EAX * REGSIZE);
-}
-
-static void
-x86_fill_fpregset (struct regcache *regcache, void *buf)
-{
-#ifdef __x86_64__
-  i387_cache_to_fxsave (regcache, buf);
-#else
-  i387_cache_to_fsave (regcache, buf);
-#endif
-}
-
-static void
-x86_store_fpregset (struct regcache *regcache, const void *buf)
-{
-#ifdef __x86_64__
-  i387_fxsave_to_cache (regcache, buf);
-#else
-  i387_fsave_to_cache (regcache, buf);
-#endif
-}
-
-#ifndef __x86_64__
-
-static void
-x86_fill_fpxregset (struct regcache *regcache, void *buf)
-{
-  i387_cache_to_fxsave (regcache, buf);
-}
-
-static void
-x86_store_fpxregset (struct regcache *regcache, const void *buf)
-{
-  i387_fxsave_to_cache (regcache, buf);
-}
-
-#endif
-
-static void
-x86_fill_xstateregset (struct regcache *regcache, void *buf)
-{
-  i387_cache_to_xsave (regcache, buf);
-}
-
-static void
-x86_store_xstateregset (struct regcache *regcache, const void *buf)
-{
-  i387_xsave_to_cache (regcache, buf);
-}
-
-/* ??? The non-biarch i386 case stores all the i387 regs twice.
-   Once in i387_.*fsave.* and once in i387_.*fxsave.*.
-   This is, presumably, to handle the case where PTRACE_[GS]ETFPXREGS
-   doesn't work.  IWBN to avoid the duplication in the case where it
-   does work.  Maybe the arch_setup routine could check whether it works
-   and update the supported regsets accordingly.  */
-
-static struct regset_info x86_regsets[] =
-{
-#ifdef HAVE_PTRACE_GETREGS
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t),
-    GENERAL_REGS,
-    x86_fill_gregset, x86_store_gregset },
-  { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_X86_XSTATE, 0,
-    EXTENDED_REGS, x86_fill_xstateregset, x86_store_xstateregset },
-# ifndef __x86_64__
-#  ifdef HAVE_PTRACE_GETFPXREGS
-  { PTRACE_GETFPXREGS, PTRACE_SETFPXREGS, 0, sizeof (elf_fpxregset_t),
-    EXTENDED_REGS,
-    x86_fill_fpxregset, x86_store_fpxregset },
-#  endif
-# endif
-  { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (elf_fpregset_t),
-    FP_REGS,
-    x86_fill_fpregset, x86_store_fpregset },
-#endif /* HAVE_PTRACE_GETREGS */
-  NULL_REGSET
-};
-
-static CORE_ADDR
-x86_get_pc (struct regcache *regcache)
-{
-  int use_64bit = register_size (regcache->tdesc, 0) == 8;
-
-  if (use_64bit)
-    {
-      uint64_t pc;
-
-      collect_register_by_name (regcache, "rip", &pc);
-      return (CORE_ADDR) pc;
-    }
-  else
-    {
-      uint32_t pc;
-
-      collect_register_by_name (regcache, "eip", &pc);
-      return (CORE_ADDR) pc;
-    }
-}
-
-static void
-x86_set_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  int use_64bit = register_size (regcache->tdesc, 0) == 8;
-
-  if (use_64bit)
-    {
-      uint64_t newpc = pc;
-
-      supply_register_by_name (regcache, "rip", &newpc);
-    }
-  else
-    {
-      uint32_t newpc = pc;
-
-      supply_register_by_name (regcache, "eip", &newpc);
-    }
-}
-
-static const gdb_byte x86_breakpoint[] = { 0xCC };
-#define x86_breakpoint_len 1
-
-static int
-x86_breakpoint_at (CORE_ADDR pc)
-{
-  unsigned char c;
-
-  (*the_target->read_memory) (pc, &c, 1);
-  if (c == 0xCC)
-    return 1;
-
-  return 0;
-}
-
-/* Low-level function vector.  */
-struct x86_dr_low_type x86_dr_low =
-  {
-    x86_linux_dr_set_control,
-    x86_linux_dr_set_addr,
-    x86_linux_dr_get_addr,
-    x86_linux_dr_get_status,
-    x86_linux_dr_get_control,
-    sizeof (void *),
-  };
-
-/* Breakpoint/Watchpoint support.  */
-
-static int
-x86_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-    case Z_PACKET_HW_BP:
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-static int
-x86_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int size, struct raw_breakpoint *bp)
-{
-  struct process_info *proc = current_process ();
-
-  switch (type)
-    {
-    case raw_bkpt_type_hw:
-    case raw_bkpt_type_write_wp:
-    case raw_bkpt_type_access_wp:
-      {
-	enum target_hw_bp_type hw_type
-	  = raw_bkpt_type_to_target_hw_bp_type (type);
-	struct x86_debug_reg_state *state
-	  = &proc->priv->arch_private->debug_reg_state;
-
-	return x86_dr_insert_watchpoint (state, hw_type, addr, size);
-      }
-
-    default:
-      /* Unsupported.  */
-      return 1;
-    }
-}
-
-static int
-x86_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int size, struct raw_breakpoint *bp)
-{
-  struct process_info *proc = current_process ();
-
-  switch (type)
-    {
-    case raw_bkpt_type_hw:
-    case raw_bkpt_type_write_wp:
-    case raw_bkpt_type_access_wp:
-      {
-	enum target_hw_bp_type hw_type
-	  = raw_bkpt_type_to_target_hw_bp_type (type);
-	struct x86_debug_reg_state *state
-	  = &proc->priv->arch_private->debug_reg_state;
-
-	return x86_dr_remove_watchpoint (state, hw_type, addr, size);
-      }
-    default:
-      /* Unsupported.  */
-      return 1;
-    }
-}
-
-static int
-x86_stopped_by_watchpoint (void)
-{
-  struct process_info *proc = current_process ();
-  return x86_dr_stopped_by_watchpoint (&proc->priv->arch_private->debug_reg_state);
-}
-
-static CORE_ADDR
-x86_stopped_data_address (void)
-{
-  struct process_info *proc = current_process ();
-  CORE_ADDR addr;
-  if (x86_dr_stopped_data_address (&proc->priv->arch_private->debug_reg_state,
-				   &addr))
-    return addr;
-  return 0;
-}
-
-/* Called when a new process is created.  */
-
-static struct arch_process_info *
-x86_linux_new_process (void)
-{
-  struct arch_process_info *info = XCNEW (struct arch_process_info);
-
-  x86_low_init_dregs (&info->debug_reg_state);
-
-  return info;
-}
-
-/* Called when a process is being deleted.  */
-
-static void
-x86_linux_delete_process (struct arch_process_info *info)
-{
-  xfree (info);
-}
-
-/* Target routine for linux_new_fork.  */
-
-static void
-x86_linux_new_fork (struct process_info *parent, struct process_info *child)
-{
-  /* These are allocated by linux_add_process.  */
-  gdb_assert (parent->priv != NULL
-	      && parent->priv->arch_private != NULL);
-  gdb_assert (child->priv != NULL
-	      && child->priv->arch_private != NULL);
-
-  /* Linux kernel before 2.6.33 commit
-     72f674d203cd230426437cdcf7dd6f681dad8b0d
-     will inherit hardware debug registers from parent
-     on fork/vfork/clone.  Newer Linux kernels create such tasks with
-     zeroed debug registers.
-
-     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.  The debug registers mirror will become zeroed
-     in the end before detaching the forked off process, thus making
-     this compatible with older Linux kernels too.  */
-
-  *child->priv->arch_private = *parent->priv->arch_private;
-}
-
-/* See nat/x86-dregs.h.  */
-
-struct x86_debug_reg_state *
-x86_debug_reg_state (pid_t pid)
-{
-  struct process_info *proc = find_process_pid (pid);
-
-  return &proc->priv->arch_private->debug_reg_state;
-}
-
-/* When GDBSERVER is built as a 64-bit application on linux, the
-   PTRACE_GETSIGINFO data is always presented in 64-bit layout.  Since
-   debugging a 32-bit inferior with a 64-bit GDBSERVER should look the same
-   as debugging it with a 32-bit GDBSERVER, we do the 32-bit <-> 64-bit
-   conversion in-place ourselves.  */
-
-/* Convert a ptrace/host siginfo object, into/from the siginfo in the
-   layout of the inferiors' architecture.  Returns true if any
-   conversion was done; false otherwise.  If DIRECTION is 1, then copy
-   from INF to PTRACE.  If DIRECTION is 0, copy from PTRACE to
-   INF.  */
-
-static int
-x86_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
-{
-#ifdef __x86_64__
-  unsigned int machine;
-  int tid = lwpid_of (current_thread);
-  int is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
-
-  /* Is the inferior 32-bit?  If so, then fixup the siginfo object.  */
-  if (!is_64bit_tdesc ())
-      return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
-					       FIXUP_32);
-  /* No fixup for native x32 GDB.  */
-  else if (!is_elf64 && sizeof (void *) == 8)
-    return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
-					     FIXUP_X32);
-#endif
-
-  return 0;
-}
-
-static int use_xml;
-
-/* Format of XSAVE extended state is:
-	struct
-	{
-	  fxsave_bytes[0..463]
-	  sw_usable_bytes[464..511]
-	  xstate_hdr_bytes[512..575]
-	  avx_bytes[576..831]
-	  future_state etc
-	};
-
-  Same memory layout will be used for the coredump NT_X86_XSTATE
-  representing the XSAVE extended state registers.
-
-  The first 8 bytes of the sw_usable_bytes[464..467] is the OS enabled
-  extended state mask, which is the same as the extended control register
-  0 (the XFEATURE_ENABLED_MASK register), XCR0.  We can use this mask
-  together with the mask saved in the xstate_hdr_bytes to determine what
-  states the processor/OS supports and what state, used or initialized,
-  the process/thread is in.  */
-#define I386_LINUX_XSAVE_XCR0_OFFSET 464
-
-/* Does the current host support the GETFPXREGS request?  The header
-   file may or may not define it, and even if it is defined, the
-   kernel will return EIO if it's running on a pre-SSE processor.  */
-int have_ptrace_getfpxregs =
-#ifdef HAVE_PTRACE_GETFPXREGS
-  -1
-#else
-  0
-#endif
-;
-
-/* Get Linux/x86 target description from running target.  */
-
-static const struct target_desc *
-x86_linux_read_description (void)
-{
-  unsigned int machine;
-  int is_elf64;
-  int xcr0_features;
-  int tid;
-  static uint64_t xcr0;
-  struct regset_info *regset;
-
-  tid = lwpid_of (current_thread);
-
-  is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
-
-  if (sizeof (void *) == 4)
-    {
-      if (is_elf64 > 0)
-       error (_("Can't debug 64-bit process with 32-bit GDBserver"));
-#ifndef __x86_64__
-      else if (machine == EM_X86_64)
-       error (_("Can't debug x86-64 process with 32-bit GDBserver"));
-#endif
-    }
-
-#if !defined __x86_64__ && defined HAVE_PTRACE_GETFPXREGS
-  if (machine == EM_386 && have_ptrace_getfpxregs == -1)
-    {
-      elf_fpxregset_t fpxregs;
-
-      if (ptrace (PTRACE_GETFPXREGS, tid, 0, (long) &fpxregs) < 0)
-	{
-	  have_ptrace_getfpxregs = 0;
-	  have_ptrace_getregset = 0;
-	  return i386_linux_read_description (X86_XSTATE_X87);
-	}
-      else
-	have_ptrace_getfpxregs = 1;
-    }
-#endif
-
-  if (!use_xml)
-    {
-      x86_xcr0 = X86_XSTATE_SSE_MASK;
-
-      /* Don't use XML.  */
-#ifdef __x86_64__
-      if (machine == EM_X86_64)
-	return tdesc_amd64_linux_no_xml;
-      else
-#endif
-	return tdesc_i386_linux_no_xml;
-    }
-
-  if (have_ptrace_getregset == -1)
-    {
-      uint64_t xstateregs[(X86_XSTATE_SSE_SIZE / sizeof (uint64_t))];
-      struct iovec iov;
-
-      iov.iov_base = xstateregs;
-      iov.iov_len = sizeof (xstateregs);
-
-      /* Check if PTRACE_GETREGSET works.  */
-      if (ptrace (PTRACE_GETREGSET, tid,
-		  (unsigned int) NT_X86_XSTATE, (long) &iov) < 0)
-	have_ptrace_getregset = 0;
-      else
-	{
-	  have_ptrace_getregset = 1;
-
-	  /* Get XCR0 from XSAVE extended state.  */
-	  xcr0 = xstateregs[(I386_LINUX_XSAVE_XCR0_OFFSET
-			     / sizeof (uint64_t))];
-
-	  /* Use PTRACE_GETREGSET if it is available.  */
-	  for (regset = x86_regsets;
-	       regset->fill_function != NULL; regset++)
-	    if (regset->get_request == PTRACE_GETREGSET)
-	      regset->size = X86_XSTATE_SIZE (xcr0);
-	    else if (regset->type != GENERAL_REGS)
-	      regset->size = 0;
-	}
-    }
-
-  /* Check the native XCR0 only if PTRACE_GETREGSET is available.  */
-  xcr0_features = (have_ptrace_getregset
-		   && (xcr0 & X86_XSTATE_ALL_MASK));
-
-  if (xcr0_features)
-    x86_xcr0 = xcr0;
-
-  if (machine == EM_X86_64)
-    {
-#ifdef __x86_64__
-      const target_desc *tdesc = NULL;
-
-      if (xcr0_features)
-	{
-	  tdesc = amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK,
-						!is_elf64);
-	}
-
-      if (tdesc == NULL)
-	tdesc = amd64_linux_read_description (X86_XSTATE_SSE_MASK, !is_elf64);
-      return tdesc;
-#endif
-    }
-  else
-    {
-      const target_desc *tdesc = NULL;
-
-      if (xcr0_features)
-	  tdesc = i386_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK);
-
-      if (tdesc == NULL)
-	tdesc = i386_linux_read_description (X86_XSTATE_SSE);
-
-      return tdesc;
-    }
-
-  gdb_assert_not_reached ("failed to return tdesc");
-}
-
-/* Update all the target description of all processes; a new GDB
-   connected, and it may or not support xml target descriptions.  */
-
-static void
-x86_linux_update_xmltarget (void)
-{
-  struct thread_info *saved_thread = current_thread;
-
-  /* Before changing the register cache's internal layout, flush the
-     contents of the current valid caches back to the threads, and
-     release the current regcache objects.  */
-  regcache_release ();
-
-  for_each_process ([] (process_info *proc) {
-    int pid = proc->pid;
-
-    /* Look up any thread of this process.  */
-    current_thread = find_any_thread_of_pid (pid);
-
-    the_low_target.arch_setup ();
-  });
-
-  current_thread = saved_thread;
-}
-
-/* Process qSupported query, "xmlRegisters=".  Update the buffer size for
-   PTRACE_GETREGSET.  */
-
-static void
-x86_linux_process_qsupported (char **features, int count)
-{
-  int i;
-
-  /* Return if gdb doesn't support XML.  If gdb sends "xmlRegisters="
-     with "i386" in qSupported query, it supports x86 XML target
-     descriptions.  */
-  use_xml = 0;
-  for (i = 0; i < count; i++)
-    {
-      const char *feature = features[i];
-
-      if (startswith (feature, "xmlRegisters="))
-	{
-	  char *copy = xstrdup (feature + 13);
-
-	  char *saveptr;
-	  for (char *p = strtok_r (copy, ",", &saveptr);
-	       p != NULL;
-	       p = strtok_r (NULL, ",", &saveptr))
-	    {
-	      if (strcmp (p, "i386") == 0)
-		{
-		  use_xml = 1;
-		  break;
-		}
-	    }
-
-	  free (copy);
-	}
-    }
-  x86_linux_update_xmltarget ();
-}
-
-/* Common for x86/x86-64.  */
-
-static struct regsets_info x86_regsets_info =
-  {
-    x86_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-#ifdef __x86_64__
-static struct regs_info amd64_linux_regs_info =
-  {
-    NULL, /* regset_bitmap */
-    NULL, /* usrregs_info */
-    &x86_regsets_info
-  };
-#endif
-static struct usrregs_info i386_linux_usrregs_info =
-  {
-    I386_NUM_REGS,
-    i386_regmap,
-  };
-
-static struct regs_info i386_linux_regs_info =
-  {
-    NULL, /* regset_bitmap */
-    &i386_linux_usrregs_info,
-    &x86_regsets_info
-  };
-
-const struct regs_info *
-x86_linux_regs_info (void)
-{
-#ifdef __x86_64__
-  if (is_64bit_tdesc ())
-    return &amd64_linux_regs_info;
-  else
-#endif
-    return &i386_linux_regs_info;
-}
-
-/* Initialize the target description for the architecture of the
-   inferior.  */
-
-static void
-x86_arch_setup (void)
-{
-  current_process ()->tdesc = x86_linux_read_description ();
-}
-
-/* Fill *SYSNO and *SYSRET with the syscall nr trapped and the syscall return
-   code.  This should only be called if LWP got a SYSCALL_SIGTRAP.  */
-
-static void
-x86_get_syscall_trapinfo (struct regcache *regcache, int *sysno)
-{
-  int use_64bit = register_size (regcache->tdesc, 0) == 8;
-
-  if (use_64bit)
-    {
-      long l_sysno;
-
-      collect_register_by_name (regcache, "orig_rax", &l_sysno);
-      *sysno = (int) l_sysno;
-    }
-  else
-    collect_register_by_name (regcache, "orig_eax", sysno);
-}
-
-static int
-x86_supports_tracepoints (void)
-{
-  return 1;
-}
-
-static void
-append_insns (CORE_ADDR *to, size_t len, const unsigned char *buf)
-{
-  target_write_memory (*to, buf, len);
-  *to += len;
-}
-
-static int
-push_opcode (unsigned char *buf, const char *op)
-{
-  unsigned char *buf_org = buf;
-
-  while (1)
-    {
-      char *endptr;
-      unsigned long ul = strtoul (op, &endptr, 16);
-
-      if (endptr == op)
-	break;
-
-      *buf++ = ul;
-      op = endptr;
-    }
-
-  return buf - buf_org;
-}
-
-#ifdef __x86_64__
-
-/* Build a jump pad that saves registers and calls a collection
-   function.  Writes a jump instruction to the jump pad to
-   JJUMPAD_INSN.  The caller is responsible to write it in at the
-   tracepoint address.  */
-
-static int
-amd64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-					CORE_ADDR collector,
-					CORE_ADDR lockaddr,
-					ULONGEST orig_size,
-					CORE_ADDR *jump_entry,
-					CORE_ADDR *trampoline,
-					ULONGEST *trampoline_size,
-					unsigned char *jjump_pad_insn,
-					ULONGEST *jjump_pad_insn_size,
-					CORE_ADDR *adjusted_insn_addr,
-					CORE_ADDR *adjusted_insn_addr_end,
-					char *err)
-{
-  unsigned char buf[40];
-  int i, offset;
-  int64_t loffset;
-
-  CORE_ADDR buildaddr = *jump_entry;
-
-  /* Build the jump pad.  */
-
-  /* First, do tracepoint data collection.  Save registers.  */
-  i = 0;
-  /* Need to ensure stack pointer saved first.  */
-  buf[i++] = 0x54; /* push %rsp */
-  buf[i++] = 0x55; /* push %rbp */
-  buf[i++] = 0x57; /* push %rdi */
-  buf[i++] = 0x56; /* push %rsi */
-  buf[i++] = 0x52; /* push %rdx */
-  buf[i++] = 0x51; /* push %rcx */
-  buf[i++] = 0x53; /* push %rbx */
-  buf[i++] = 0x50; /* push %rax */
-  buf[i++] = 0x41; buf[i++] = 0x57; /* push %r15 */
-  buf[i++] = 0x41; buf[i++] = 0x56; /* push %r14 */
-  buf[i++] = 0x41; buf[i++] = 0x55; /* push %r13 */
-  buf[i++] = 0x41; buf[i++] = 0x54; /* push %r12 */
-  buf[i++] = 0x41; buf[i++] = 0x53; /* push %r11 */
-  buf[i++] = 0x41; buf[i++] = 0x52; /* push %r10 */
-  buf[i++] = 0x41; buf[i++] = 0x51; /* push %r9 */
-  buf[i++] = 0x41; buf[i++] = 0x50; /* push %r8 */
-  buf[i++] = 0x9c; /* pushfq */
-  buf[i++] = 0x48; /* movabs <addr>,%rdi */
-  buf[i++] = 0xbf;
-  memcpy (buf + i, &tpaddr, 8);
-  i += 8;
-  buf[i++] = 0x57; /* push %rdi */
-  append_insns (&buildaddr, i, buf);
-
-  /* Stack space for the collecting_t object.  */
-  i = 0;
-  i += push_opcode (&buf[i], "48 83 ec 18");	/* sub $0x18,%rsp */
-  i += push_opcode (&buf[i], "48 b8");          /* mov <tpoint>,%rax */
-  memcpy (buf + i, &tpoint, 8);
-  i += 8;
-  i += push_opcode (&buf[i], "48 89 04 24");    /* mov %rax,(%rsp) */
-  i += push_opcode (&buf[i],
-		    "64 48 8b 04 25 00 00 00 00"); /* mov %fs:0x0,%rax */
-  i += push_opcode (&buf[i], "48 89 44 24 08"); /* mov %rax,0x8(%rsp) */
-  append_insns (&buildaddr, i, buf);
-
-  /* spin-lock.  */
-  i = 0;
-  i += push_opcode (&buf[i], "48 be");		/* movl <lockaddr>,%rsi */
-  memcpy (&buf[i], (void *) &lockaddr, 8);
-  i += 8;
-  i += push_opcode (&buf[i], "48 89 e1");       /* mov %rsp,%rcx */
-  i += push_opcode (&buf[i], "31 c0");		/* xor %eax,%eax */
-  i += push_opcode (&buf[i], "f0 48 0f b1 0e"); /* lock cmpxchg %rcx,(%rsi) */
-  i += push_opcode (&buf[i], "48 85 c0");	/* test %rax,%rax */
-  i += push_opcode (&buf[i], "75 f4");		/* jne <again> */
-  append_insns (&buildaddr, i, buf);
-
-  /* Set up the gdb_collect call.  */
-  /* At this point, (stack pointer + 0x18) is the base of our saved
-     register block.  */
-
-  i = 0;
-  i += push_opcode (&buf[i], "48 89 e6");	/* mov %rsp,%rsi */
-  i += push_opcode (&buf[i], "48 83 c6 18");	/* add $0x18,%rsi */
-
-  /* tpoint address may be 64-bit wide.  */
-  i += push_opcode (&buf[i], "48 bf");		/* movl <addr>,%rdi */
-  memcpy (buf + i, &tpoint, 8);
-  i += 8;
-  append_insns (&buildaddr, i, buf);
-
-  /* The collector function being in the shared library, may be
-     >31-bits away off the jump pad.  */
-  i = 0;
-  i += push_opcode (&buf[i], "48 b8");          /* mov $collector,%rax */
-  memcpy (buf + i, &collector, 8);
-  i += 8;
-  i += push_opcode (&buf[i], "ff d0");          /* callq *%rax */
-  append_insns (&buildaddr, i, buf);
-
-  /* Clear the spin-lock.  */
-  i = 0;
-  i += push_opcode (&buf[i], "31 c0");		/* xor %eax,%eax */
-  i += push_opcode (&buf[i], "48 a3");		/* mov %rax, lockaddr */
-  memcpy (buf + i, &lockaddr, 8);
-  i += 8;
-  append_insns (&buildaddr, i, buf);
-
-  /* Remove stack that had been used for the collect_t object.  */
-  i = 0;
-  i += push_opcode (&buf[i], "48 83 c4 18");	/* add $0x18,%rsp */
-  append_insns (&buildaddr, i, buf);
-
-  /* Restore register state.  */
-  i = 0;
-  buf[i++] = 0x48; /* add $0x8,%rsp */
-  buf[i++] = 0x83;
-  buf[i++] = 0xc4;
-  buf[i++] = 0x08;
-  buf[i++] = 0x9d; /* popfq */
-  buf[i++] = 0x41; buf[i++] = 0x58; /* pop %r8 */
-  buf[i++] = 0x41; buf[i++] = 0x59; /* pop %r9 */
-  buf[i++] = 0x41; buf[i++] = 0x5a; /* pop %r10 */
-  buf[i++] = 0x41; buf[i++] = 0x5b; /* pop %r11 */
-  buf[i++] = 0x41; buf[i++] = 0x5c; /* pop %r12 */
-  buf[i++] = 0x41; buf[i++] = 0x5d; /* pop %r13 */
-  buf[i++] = 0x41; buf[i++] = 0x5e; /* pop %r14 */
-  buf[i++] = 0x41; buf[i++] = 0x5f; /* pop %r15 */
-  buf[i++] = 0x58; /* pop %rax */
-  buf[i++] = 0x5b; /* pop %rbx */
-  buf[i++] = 0x59; /* pop %rcx */
-  buf[i++] = 0x5a; /* pop %rdx */
-  buf[i++] = 0x5e; /* pop %rsi */
-  buf[i++] = 0x5f; /* pop %rdi */
-  buf[i++] = 0x5d; /* pop %rbp */
-  buf[i++] = 0x5c; /* pop %rsp */
-  append_insns (&buildaddr, i, buf);
-
-  /* Now, adjust the original instruction to execute in the jump
-     pad.  */
-  *adjusted_insn_addr = buildaddr;
-  relocate_instruction (&buildaddr, tpaddr);
-  *adjusted_insn_addr_end = buildaddr;
-
-  /* Finally, write a jump back to the program.  */
-
-  loffset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn));
-  if (loffset > INT_MAX || loffset < INT_MIN)
-    {
-      sprintf (err,
-	       "E.Jump back from jump pad too far from tracepoint "
-	       "(offset 0x%" PRIx64 " > int32).", loffset);
-      return 1;
-    }
-
-  offset = (int) loffset;
-  memcpy (buf, jump_insn, sizeof (jump_insn));
-  memcpy (buf + 1, &offset, 4);
-  append_insns (&buildaddr, sizeof (jump_insn), buf);
-
-  /* The jump pad is now built.  Wire in a jump to our jump pad.  This
-     is always done last (by our caller actually), so that we can
-     install fast tracepoints with threads running.  This relies on
-     the agent's atomic write support.  */
-  loffset = *jump_entry - (tpaddr + sizeof (jump_insn));
-  if (loffset > INT_MAX || loffset < INT_MIN)
-    {
-      sprintf (err,
-	       "E.Jump pad too far from tracepoint "
-	       "(offset 0x%" PRIx64 " > int32).", loffset);
-      return 1;
-    }
-
-  offset = (int) loffset;
-
-  memcpy (buf, jump_insn, sizeof (jump_insn));
-  memcpy (buf + 1, &offset, 4);
-  memcpy (jjump_pad_insn, buf, sizeof (jump_insn));
-  *jjump_pad_insn_size = sizeof (jump_insn);
-
-  /* Return the end address of our pad.  */
-  *jump_entry = buildaddr;
-
-  return 0;
-}
-
-#endif /* __x86_64__ */
-
-/* Build a jump pad that saves registers and calls a collection
-   function.  Writes a jump instruction to the jump pad to
-   JJUMPAD_INSN.  The caller is responsible to write it in at the
-   tracepoint address.  */
-
-static int
-i386_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-				       CORE_ADDR collector,
-				       CORE_ADDR lockaddr,
-				       ULONGEST orig_size,
-				       CORE_ADDR *jump_entry,
-				       CORE_ADDR *trampoline,
-				       ULONGEST *trampoline_size,
-				       unsigned char *jjump_pad_insn,
-				       ULONGEST *jjump_pad_insn_size,
-				       CORE_ADDR *adjusted_insn_addr,
-				       CORE_ADDR *adjusted_insn_addr_end,
-				       char *err)
-{
-  unsigned char buf[0x100];
-  int i, offset;
-  CORE_ADDR buildaddr = *jump_entry;
-
-  /* Build the jump pad.  */
-
-  /* First, do tracepoint data collection.  Save registers.  */
-  i = 0;
-  buf[i++] = 0x60; /* pushad */
-  buf[i++] = 0x68; /* push tpaddr aka $pc */
-  *((int *)(buf + i)) = (int) tpaddr;
-  i += 4;
-  buf[i++] = 0x9c; /* pushf */
-  buf[i++] = 0x1e; /* push %ds */
-  buf[i++] = 0x06; /* push %es */
-  buf[i++] = 0x0f; /* push %fs */
-  buf[i++] = 0xa0;
-  buf[i++] = 0x0f; /* push %gs */
-  buf[i++] = 0xa8;
-  buf[i++] = 0x16; /* push %ss */
-  buf[i++] = 0x0e; /* push %cs */
-  append_insns (&buildaddr, i, buf);
-
-  /* Stack space for the collecting_t object.  */
-  i = 0;
-  i += push_opcode (&buf[i], "83 ec 08");	/* sub    $0x8,%esp */
-
-  /* Build the object.  */
-  i += push_opcode (&buf[i], "b8");		/* mov    <tpoint>,%eax */
-  memcpy (buf + i, &tpoint, 4);
-  i += 4;
-  i += push_opcode (&buf[i], "89 04 24");	   /* mov %eax,(%esp) */
-
-  i += push_opcode (&buf[i], "65 a1 00 00 00 00"); /* mov %gs:0x0,%eax */
-  i += push_opcode (&buf[i], "89 44 24 04");	   /* mov %eax,0x4(%esp) */
-  append_insns (&buildaddr, i, buf);
-
-  /* spin-lock.  Note this is using cmpxchg, which leaves i386 behind.
-     If we cared for it, this could be using xchg alternatively.  */
-
-  i = 0;
-  i += push_opcode (&buf[i], "31 c0");		/* xor %eax,%eax */
-  i += push_opcode (&buf[i], "f0 0f b1 25");    /* lock cmpxchg
-						   %esp,<lockaddr> */
-  memcpy (&buf[i], (void *) &lockaddr, 4);
-  i += 4;
-  i += push_opcode (&buf[i], "85 c0");		/* test %eax,%eax */
-  i += push_opcode (&buf[i], "75 f2");		/* jne <again> */
-  append_insns (&buildaddr, i, buf);
-
-
-  /* Set up arguments to the gdb_collect call.  */
-  i = 0;
-  i += push_opcode (&buf[i], "89 e0");		/* mov %esp,%eax */
-  i += push_opcode (&buf[i], "83 c0 08");	/* add $0x08,%eax */
-  i += push_opcode (&buf[i], "89 44 24 fc");	/* mov %eax,-0x4(%esp) */
-  append_insns (&buildaddr, i, buf);
-
-  i = 0;
-  i += push_opcode (&buf[i], "83 ec 08");	/* sub $0x8,%esp */
-  append_insns (&buildaddr, i, buf);
-
-  i = 0;
-  i += push_opcode (&buf[i], "c7 04 24");       /* movl <addr>,(%esp) */
-  memcpy (&buf[i], (void *) &tpoint, 4);
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-
-  buf[0] = 0xe8; /* call <reladdr> */
-  offset = collector - (buildaddr + sizeof (jump_insn));
-  memcpy (buf + 1, &offset, 4);
-  append_insns (&buildaddr, 5, buf);
-  /* Clean up after the call.  */
-  buf[0] = 0x83; /* add $0x8,%esp */
-  buf[1] = 0xc4;
-  buf[2] = 0x08;
-  append_insns (&buildaddr, 3, buf);
-
-
-  /* Clear the spin-lock.  This would need the LOCK prefix on older
-     broken archs.  */
-  i = 0;
-  i += push_opcode (&buf[i], "31 c0");		/* xor %eax,%eax */
-  i += push_opcode (&buf[i], "a3");		/* mov %eax, lockaddr */
-  memcpy (buf + i, &lockaddr, 4);
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-
-
-  /* Remove stack that had been used for the collect_t object.  */
-  i = 0;
-  i += push_opcode (&buf[i], "83 c4 08");	/* add $0x08,%esp */
-  append_insns (&buildaddr, i, buf);
-
-  i = 0;
-  buf[i++] = 0x83; /* add $0x4,%esp (no pop of %cs, assume unchanged) */
-  buf[i++] = 0xc4;
-  buf[i++] = 0x04;
-  buf[i++] = 0x17; /* pop %ss */
-  buf[i++] = 0x0f; /* pop %gs */
-  buf[i++] = 0xa9;
-  buf[i++] = 0x0f; /* pop %fs */
-  buf[i++] = 0xa1;
-  buf[i++] = 0x07; /* pop %es */
-  buf[i++] = 0x1f; /* pop %ds */
-  buf[i++] = 0x9d; /* popf */
-  buf[i++] = 0x83; /* add $0x4,%esp (pop of tpaddr aka $pc) */
-  buf[i++] = 0xc4;
-  buf[i++] = 0x04;
-  buf[i++] = 0x61; /* popad */
-  append_insns (&buildaddr, i, buf);
-
-  /* Now, adjust the original instruction to execute in the jump
-     pad.  */
-  *adjusted_insn_addr = buildaddr;
-  relocate_instruction (&buildaddr, tpaddr);
-  *adjusted_insn_addr_end = buildaddr;
-
-  /* Write the jump back to the program.  */
-  offset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn));
-  memcpy (buf, jump_insn, sizeof (jump_insn));
-  memcpy (buf + 1, &offset, 4);
-  append_insns (&buildaddr, sizeof (jump_insn), buf);
-
-  /* The jump pad is now built.  Wire in a jump to our jump pad.  This
-     is always done last (by our caller actually), so that we can
-     install fast tracepoints with threads running.  This relies on
-     the agent's atomic write support.  */
-  if (orig_size == 4)
-    {
-      /* Create a trampoline.  */
-      *trampoline_size = sizeof (jump_insn);
-      if (!claim_trampoline_space (*trampoline_size, trampoline))
-	{
-	  /* No trampoline space available.  */
-	  strcpy (err,
-		  "E.Cannot allocate trampoline space needed for fast "
-		  "tracepoints on 4-byte instructions.");
-	  return 1;
-	}
-
-      offset = *jump_entry - (*trampoline + sizeof (jump_insn));
-      memcpy (buf, jump_insn, sizeof (jump_insn));
-      memcpy (buf + 1, &offset, 4);
-      target_write_memory (*trampoline, buf, sizeof (jump_insn));
-
-      /* Use a 16-bit relative jump instruction to jump to the trampoline.  */
-      offset = (*trampoline - (tpaddr + sizeof (small_jump_insn))) & 0xffff;
-      memcpy (buf, small_jump_insn, sizeof (small_jump_insn));
-      memcpy (buf + 2, &offset, 2);
-      memcpy (jjump_pad_insn, buf, sizeof (small_jump_insn));
-      *jjump_pad_insn_size = sizeof (small_jump_insn);
-    }
-  else
-    {
-      /* Else use a 32-bit relative jump instruction.  */
-      offset = *jump_entry - (tpaddr + sizeof (jump_insn));
-      memcpy (buf, jump_insn, sizeof (jump_insn));
-      memcpy (buf + 1, &offset, 4);
-      memcpy (jjump_pad_insn, buf, sizeof (jump_insn));
-      *jjump_pad_insn_size = sizeof (jump_insn);
-    }
-
-  /* Return the end address of our pad.  */
-  *jump_entry = buildaddr;
-
-  return 0;
-}
-
-static int
-x86_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-				      CORE_ADDR collector,
-				      CORE_ADDR lockaddr,
-				      ULONGEST orig_size,
-				      CORE_ADDR *jump_entry,
-				      CORE_ADDR *trampoline,
-				      ULONGEST *trampoline_size,
-				      unsigned char *jjump_pad_insn,
-				      ULONGEST *jjump_pad_insn_size,
-				      CORE_ADDR *adjusted_insn_addr,
-				      CORE_ADDR *adjusted_insn_addr_end,
-				      char *err)
-{
-#ifdef __x86_64__
-  if (is_64bit_tdesc ())
-    return amd64_install_fast_tracepoint_jump_pad (tpoint, tpaddr,
-						   collector, lockaddr,
-						   orig_size, jump_entry,
-						   trampoline, trampoline_size,
-						   jjump_pad_insn,
-						   jjump_pad_insn_size,
-						   adjusted_insn_addr,
-						   adjusted_insn_addr_end,
-						   err);
-#endif
-
-  return i386_install_fast_tracepoint_jump_pad (tpoint, tpaddr,
-						collector, lockaddr,
-						orig_size, jump_entry,
-						trampoline, trampoline_size,
-						jjump_pad_insn,
-						jjump_pad_insn_size,
-						adjusted_insn_addr,
-						adjusted_insn_addr_end,
-						err);
-}
-
-/* Return the minimum instruction length for fast tracepoints on x86/x86-64
-   architectures.  */
-
-static int
-x86_get_min_fast_tracepoint_insn_len (void)
-{
-  static int warned_about_fast_tracepoints = 0;
-
-#ifdef __x86_64__
-  /*  On x86-64, 5-byte jump instructions with a 4-byte offset are always
-      used for fast tracepoints.  */
-  if (is_64bit_tdesc ())
-    return 5;
-#endif
-
-  if (agent_loaded_p ())
-    {
-      char errbuf[IPA_BUFSIZ];
-
-      errbuf[0] = '\0';
-
-      /* On x86, if trampolines are available, then 4-byte jump instructions
-	 with a 2-byte offset may be used, otherwise 5-byte jump instructions
-	 with a 4-byte offset are used instead.  */
-      if (have_fast_tracepoint_trampoline_buffer (errbuf))
-	return 4;
-      else
-	{
-	  /* GDB has no channel to explain to user why a shorter fast
-	     tracepoint is not possible, but at least make GDBserver
-	     mention that something has gone awry.  */
-	  if (!warned_about_fast_tracepoints)
-	    {
-	      warning ("4-byte fast tracepoints not available; %s", errbuf);
-	      warned_about_fast_tracepoints = 1;
-	    }
-	  return 5;
-	}
-    }
-  else
-    {
-      /* Indicate that the minimum length is currently unknown since the IPA
-	 has not loaded yet.  */
-      return 0;
-    }
-}
-
-static void
-add_insns (unsigned char *start, int len)
-{
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  if (debug_threads)
-    debug_printf ("Adding %d bytes of insn at %s\n",
-		  len, paddress (buildaddr));
-
-  append_insns (&buildaddr, len, start);
-  current_insn_ptr = buildaddr;
-}
-
-/* Our general strategy for emitting code is to avoid specifying raw
-   bytes whenever possible, and instead copy a block of inline asm
-   that is embedded in the function.  This is a little messy, because
-   we need to keep the compiler from discarding what looks like dead
-   code, plus suppress various warnings.  */
-
-#define EMIT_ASM(NAME, INSNS)						\
-  do									\
-    {									\
-      extern unsigned char start_ ## NAME, end_ ## NAME;		\
-      add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME);	\
-      __asm__ ("jmp end_" #NAME "\n"					\
-	       "\t" "start_" #NAME ":"					\
-	       "\t" INSNS "\n"						\
-	       "\t" "end_" #NAME ":");					\
-    } while (0)
-
-#ifdef __x86_64__
-
-#define EMIT_ASM32(NAME,INSNS)						\
-  do									\
-    {									\
-      extern unsigned char start_ ## NAME, end_ ## NAME;		\
-      add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME);	\
-      __asm__ (".code32\n"						\
-	       "\t" "jmp end_" #NAME "\n"				\
-	       "\t" "start_" #NAME ":\n"				\
-	       "\t" INSNS "\n"						\
-	       "\t" "end_" #NAME ":\n"					\
-	       ".code64\n");						\
-    } while (0)
-
-#else
-
-#define EMIT_ASM32(NAME,INSNS) EMIT_ASM(NAME,INSNS)
-
-#endif
-
-#ifdef __x86_64__
-
-static void
-amd64_emit_prologue (void)
-{
-  EMIT_ASM (amd64_prologue,
-	    "pushq %rbp\n\t"
-	    "movq %rsp,%rbp\n\t"
-	    "sub $0x20,%rsp\n\t"
-	    "movq %rdi,-8(%rbp)\n\t"
-	    "movq %rsi,-16(%rbp)");
-}
-
-
-static void
-amd64_emit_epilogue (void)
-{
-  EMIT_ASM (amd64_epilogue,
-	    "movq -16(%rbp),%rdi\n\t"
-	    "movq %rax,(%rdi)\n\t"
-	    "xor %rax,%rax\n\t"
-	    "leave\n\t"
-	    "ret");
-}
-
-static void
-amd64_emit_add (void)
-{
-  EMIT_ASM (amd64_add,
-	    "add (%rsp),%rax\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_sub (void)
-{
-  EMIT_ASM (amd64_sub,
-	    "sub %rax,(%rsp)\n\t"
-	    "pop %rax");
-}
-
-static void
-amd64_emit_mul (void)
-{
-  emit_error = 1;
-}
-
-static void
-amd64_emit_lsh (void)
-{
-  emit_error = 1;
-}
-
-static void
-amd64_emit_rsh_signed (void)
-{
-  emit_error = 1;
-}
-
-static void
-amd64_emit_rsh_unsigned (void)
-{
-  emit_error = 1;
-}
-
-static void
-amd64_emit_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM (amd64_ext_8,
-		"cbtw\n\t"
-		"cwtl\n\t"
-		"cltq");
-      break;
-    case 16:
-      EMIT_ASM (amd64_ext_16,
-		"cwtl\n\t"
-		"cltq");
-      break;
-    case 32:
-      EMIT_ASM (amd64_ext_32,
-		"cltq");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-static void
-amd64_emit_log_not (void)
-{
-  EMIT_ASM (amd64_log_not,
-	    "test %rax,%rax\n\t"
-	    "sete %cl\n\t"
-	    "movzbq %cl,%rax");
-}
-
-static void
-amd64_emit_bit_and (void)
-{
-  EMIT_ASM (amd64_and,
-	    "and (%rsp),%rax\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_bit_or (void)
-{
-  EMIT_ASM (amd64_or,
-	    "or (%rsp),%rax\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_bit_xor (void)
-{
-  EMIT_ASM (amd64_xor,
-	    "xor (%rsp),%rax\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_bit_not (void)
-{
-  EMIT_ASM (amd64_bit_not,
-	    "xorq $0xffffffffffffffff,%rax");
-}
-
-static void
-amd64_emit_equal (void)
-{
-  EMIT_ASM (amd64_equal,
-	    "cmp %rax,(%rsp)\n\t"
-	    "je .Lamd64_equal_true\n\t"
-	    "xor %rax,%rax\n\t"
-	    "jmp .Lamd64_equal_end\n\t"
-	    ".Lamd64_equal_true:\n\t"
-	    "mov $0x1,%rax\n\t"
-	    ".Lamd64_equal_end:\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_less_signed (void)
-{
-  EMIT_ASM (amd64_less_signed,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jl .Lamd64_less_signed_true\n\t"
-	    "xor %rax,%rax\n\t"
-	    "jmp .Lamd64_less_signed_end\n\t"
-	    ".Lamd64_less_signed_true:\n\t"
-	    "mov $1,%rax\n\t"
-	    ".Lamd64_less_signed_end:\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_less_unsigned (void)
-{
-  EMIT_ASM (amd64_less_unsigned,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jb .Lamd64_less_unsigned_true\n\t"
-	    "xor %rax,%rax\n\t"
-	    "jmp .Lamd64_less_unsigned_end\n\t"
-	    ".Lamd64_less_unsigned_true:\n\t"
-	    "mov $1,%rax\n\t"
-	    ".Lamd64_less_unsigned_end:\n\t"
-	    "lea 0x8(%rsp),%rsp");
-}
-
-static void
-amd64_emit_ref (int size)
-{
-  switch (size)
-    {
-    case 1:
-      EMIT_ASM (amd64_ref1,
-		"movb (%rax),%al");
-      break;
-    case 2:
-      EMIT_ASM (amd64_ref2,
-		"movw (%rax),%ax");
-      break;
-    case 4:
-      EMIT_ASM (amd64_ref4,
-		"movl (%rax),%eax");
-      break;
-    case 8:
-      EMIT_ASM (amd64_ref8,
-		"movq (%rax),%rax");
-      break;
-    }
-}
-
-static void
-amd64_emit_if_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_if_goto,
-	    "mov %rax,%rcx\n\t"
-	    "pop %rax\n\t"
-	    "cmp $0,%rcx\n\t"
-	    ".byte 0x0f, 0x85, 0x0, 0x0, 0x0, 0x0");
-  if (offset_p)
-    *offset_p = 10;
-  if (size_p)
-    *size_p = 4;
-}
-
-static void
-amd64_emit_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_goto,
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0");
-  if (offset_p)
-    *offset_p = 1;
-  if (size_p)
-    *size_p = 4;
-}
-
-static void
-amd64_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  int diff = (to - (from + size));
-  unsigned char buf[sizeof (int)];
-
-  if (size != 4)
-    {
-      emit_error = 1;
-      return;
-    }
-
-  memcpy (buf, &diff, sizeof (int));
-  target_write_memory (from, buf, sizeof (int));
-}
-
-static void
-amd64_emit_const (LONGEST num)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  i = 0;
-  buf[i++] = 0x48;  buf[i++] = 0xb8; /* mov $<n>,%rax */
-  memcpy (&buf[i], &num, sizeof (num));
-  i += 8;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-}
-
-static void
-amd64_emit_call (CORE_ADDR fn)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-  LONGEST offset64;
-
-  /* The destination function being in the shared library, may be
-     >31-bits away off the compiled code pad.  */
-
-  buildaddr = current_insn_ptr;
-
-  offset64 = fn - (buildaddr + 1 /* call op */ + 4 /* 32-bit offset */);
-
-  i = 0;
-
-  if (offset64 > INT_MAX || offset64 < INT_MIN)
-    {
-      /* Offset is too large for a call.  Use callq, but that requires
-	 a register, so avoid it if possible.  Use r10, since it is
-	 call-clobbered, we don't have to push/pop it.  */
-      buf[i++] = 0x48; /* mov $fn,%r10 */
-      buf[i++] = 0xba;
-      memcpy (buf + i, &fn, 8);
-      i += 8;
-      buf[i++] = 0xff; /* callq *%r10 */
-      buf[i++] = 0xd2;
-    }
-  else
-    {
-      int offset32 = offset64; /* we know we can't overflow here.  */
-
-      buf[i++] = 0xe8; /* call <reladdr> */
-      memcpy (buf + i, &offset32, 4);
-      i += 4;
-    }
-
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-}
-
-static void
-amd64_emit_reg (int reg)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-
-  /* Assume raw_regs is still in %rdi.  */
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xbe; /* mov $<n>,%esi */
-  memcpy (&buf[i], &reg, sizeof (reg));
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-  amd64_emit_call (get_raw_reg_func_addr ());
-}
-
-static void
-amd64_emit_pop (void)
-{
-  EMIT_ASM (amd64_pop,
-	    "pop %rax");
-}
-
-static void
-amd64_emit_stack_flush (void)
-{
-  EMIT_ASM (amd64_stack_flush,
-	    "push %rax");
-}
-
-static void
-amd64_emit_zero_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM (amd64_zero_ext_8,
-		"and $0xff,%rax");
-      break;
-    case 16:
-      EMIT_ASM (amd64_zero_ext_16,
-		"and $0xffff,%rax");
-      break;
-    case 32:
-      EMIT_ASM (amd64_zero_ext_32,
-		"mov $0xffffffff,%rcx\n\t"
-		"and %rcx,%rax");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-static void
-amd64_emit_swap (void)
-{
-  EMIT_ASM (amd64_swap,
-	    "mov %rax,%rcx\n\t"
-	    "pop %rax\n\t"
-	    "push %rcx");
-}
-
-static void
-amd64_emit_stack_adjust (int n)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  i = 0;
-  buf[i++] = 0x48; /* lea $<n>(%rsp),%rsp */
-  buf[i++] = 0x8d;
-  buf[i++] = 0x64;
-  buf[i++] = 0x24;
-  /* This only handles adjustments up to 16, but we don't expect any more.  */
-  buf[i++] = n * 8;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-}
-
-/* FN's prototype is `LONGEST(*fn)(int)'.  */
-
-static void
-amd64_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xbf; /* movl $<n>,%edi */
-  memcpy (&buf[i], &arg1, sizeof (arg1));
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-  amd64_emit_call (fn);
-}
-
-/* FN's prototype is `void(*fn)(int,LONGEST)'.  */
-
-static void
-amd64_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xbf; /* movl $<n>,%edi */
-  memcpy (&buf[i], &arg1, sizeof (arg1));
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-  EMIT_ASM (amd64_void_call_2_a,
-	    /* Save away a copy of the stack top.  */
-	    "push %rax\n\t"
-	    /* Also pass top as the second argument.  */
-	    "mov %rax,%rsi");
-  amd64_emit_call (fn);
-  EMIT_ASM (amd64_void_call_2_b,
-	    /* Restore the stack top, %rax may have been trashed.  */
-	    "pop %rax");
-}
-
-void
-amd64_emit_eq_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_eq,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jne .Lamd64_eq_fallthru\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax\n\t"
-	    /* jmp, but don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	    ".Lamd64_eq_fallthru:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax");
-
-  if (offset_p)
-    *offset_p = 13;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-amd64_emit_ne_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_ne,
-	    "cmp %rax,(%rsp)\n\t"
-	    "je .Lamd64_ne_fallthru\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax\n\t"
-	    /* jmp, but don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	    ".Lamd64_ne_fallthru:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax");
-
-  if (offset_p)
-    *offset_p = 13;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-amd64_emit_lt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_lt,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jnl .Lamd64_lt_fallthru\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax\n\t"
-	    /* jmp, but don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	    ".Lamd64_lt_fallthru:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax");
-
-  if (offset_p)
-    *offset_p = 13;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-amd64_emit_le_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_le,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jnle .Lamd64_le_fallthru\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax\n\t"
-	    /* jmp, but don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	    ".Lamd64_le_fallthru:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax");
-
-  if (offset_p)
-    *offset_p = 13;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-amd64_emit_gt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_gt,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jng .Lamd64_gt_fallthru\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax\n\t"
-	    /* jmp, but don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	    ".Lamd64_gt_fallthru:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax");
-
-  if (offset_p)
-    *offset_p = 13;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-amd64_emit_ge_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM (amd64_ge,
-	    "cmp %rax,(%rsp)\n\t"
-	    "jnge .Lamd64_ge_fallthru\n\t"
-	    ".Lamd64_ge_jump:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax\n\t"
-	    /* jmp, but don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	    ".Lamd64_ge_fallthru:\n\t"
-	    "lea 0x8(%rsp),%rsp\n\t"
-	    "pop %rax");
-
-  if (offset_p)
-    *offset_p = 13;
-  if (size_p)
-    *size_p = 4;
-}
-
-struct emit_ops amd64_emit_ops =
-  {
-    amd64_emit_prologue,
-    amd64_emit_epilogue,
-    amd64_emit_add,
-    amd64_emit_sub,
-    amd64_emit_mul,
-    amd64_emit_lsh,
-    amd64_emit_rsh_signed,
-    amd64_emit_rsh_unsigned,
-    amd64_emit_ext,
-    amd64_emit_log_not,
-    amd64_emit_bit_and,
-    amd64_emit_bit_or,
-    amd64_emit_bit_xor,
-    amd64_emit_bit_not,
-    amd64_emit_equal,
-    amd64_emit_less_signed,
-    amd64_emit_less_unsigned,
-    amd64_emit_ref,
-    amd64_emit_if_goto,
-    amd64_emit_goto,
-    amd64_write_goto_address,
-    amd64_emit_const,
-    amd64_emit_call,
-    amd64_emit_reg,
-    amd64_emit_pop,
-    amd64_emit_stack_flush,
-    amd64_emit_zero_ext,
-    amd64_emit_swap,
-    amd64_emit_stack_adjust,
-    amd64_emit_int_call_1,
-    amd64_emit_void_call_2,
-    amd64_emit_eq_goto,
-    amd64_emit_ne_goto,
-    amd64_emit_lt_goto,
-    amd64_emit_le_goto,
-    amd64_emit_gt_goto,
-    amd64_emit_ge_goto
-  };
-
-#endif /* __x86_64__ */
-
-static void
-i386_emit_prologue (void)
-{
-  EMIT_ASM32 (i386_prologue,
-	    "push %ebp\n\t"
-	    "mov %esp,%ebp\n\t"
-	    "push %ebx");
-  /* At this point, the raw regs base address is at 8(%ebp), and the
-     value pointer is at 12(%ebp).  */
-}
-
-static void
-i386_emit_epilogue (void)
-{
-  EMIT_ASM32 (i386_epilogue,
-	    "mov 12(%ebp),%ecx\n\t"
-	    "mov %eax,(%ecx)\n\t"
-	    "mov %ebx,0x4(%ecx)\n\t"
-	    "xor %eax,%eax\n\t"
-	    "pop %ebx\n\t"
-	    "pop %ebp\n\t"
-	    "ret");
-}
-
-static void
-i386_emit_add (void)
-{
-  EMIT_ASM32 (i386_add,
-	    "add (%esp),%eax\n\t"
-	    "adc 0x4(%esp),%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_sub (void)
-{
-  EMIT_ASM32 (i386_sub,
-	    "subl %eax,(%esp)\n\t"
-	    "sbbl %ebx,4(%esp)\n\t"
-	    "pop %eax\n\t"
-	    "pop %ebx\n\t");
-}
-
-static void
-i386_emit_mul (void)
-{
-  emit_error = 1;
-}
-
-static void
-i386_emit_lsh (void)
-{
-  emit_error = 1;
-}
-
-static void
-i386_emit_rsh_signed (void)
-{
-  emit_error = 1;
-}
-
-static void
-i386_emit_rsh_unsigned (void)
-{
-  emit_error = 1;
-}
-
-static void
-i386_emit_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM32 (i386_ext_8,
-		"cbtw\n\t"
-		"cwtl\n\t"
-		"movl %eax,%ebx\n\t"
-		"sarl $31,%ebx");
-      break;
-    case 16:
-      EMIT_ASM32 (i386_ext_16,
-		"cwtl\n\t"
-		"movl %eax,%ebx\n\t"
-		"sarl $31,%ebx");
-      break;
-    case 32:
-      EMIT_ASM32 (i386_ext_32,
-		"movl %eax,%ebx\n\t"
-		"sarl $31,%ebx");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-static void
-i386_emit_log_not (void)
-{
-  EMIT_ASM32 (i386_log_not,
-	    "or %ebx,%eax\n\t"
-	    "test %eax,%eax\n\t"
-	    "sete %cl\n\t"
-	    "xor %ebx,%ebx\n\t"
-	    "movzbl %cl,%eax");
-}
-
-static void
-i386_emit_bit_and (void)
-{
-  EMIT_ASM32 (i386_and,
-	    "and (%esp),%eax\n\t"
-	    "and 0x4(%esp),%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_bit_or (void)
-{
-  EMIT_ASM32 (i386_or,
-	    "or (%esp),%eax\n\t"
-	    "or 0x4(%esp),%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_bit_xor (void)
-{
-  EMIT_ASM32 (i386_xor,
-	    "xor (%esp),%eax\n\t"
-	    "xor 0x4(%esp),%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_bit_not (void)
-{
-  EMIT_ASM32 (i386_bit_not,
-	    "xor $0xffffffff,%eax\n\t"
-	    "xor $0xffffffff,%ebx\n\t");
-}
-
-static void
-i386_emit_equal (void)
-{
-  EMIT_ASM32 (i386_equal,
-	    "cmpl %ebx,4(%esp)\n\t"
-	    "jne .Li386_equal_false\n\t"
-	    "cmpl %eax,(%esp)\n\t"
-	    "je .Li386_equal_true\n\t"
-	    ".Li386_equal_false:\n\t"
-	    "xor %eax,%eax\n\t"
-	    "jmp .Li386_equal_end\n\t"
-	    ".Li386_equal_true:\n\t"
-	    "mov $1,%eax\n\t"
-	    ".Li386_equal_end:\n\t"
-	    "xor %ebx,%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_less_signed (void)
-{
-  EMIT_ASM32 (i386_less_signed,
-	    "cmpl %ebx,4(%esp)\n\t"
-	    "jl .Li386_less_signed_true\n\t"
-	    "jne .Li386_less_signed_false\n\t"
-	    "cmpl %eax,(%esp)\n\t"
-	    "jl .Li386_less_signed_true\n\t"
-	    ".Li386_less_signed_false:\n\t"
-	    "xor %eax,%eax\n\t"
-	    "jmp .Li386_less_signed_end\n\t"
-	    ".Li386_less_signed_true:\n\t"
-	    "mov $1,%eax\n\t"
-	    ".Li386_less_signed_end:\n\t"
-	    "xor %ebx,%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_less_unsigned (void)
-{
-  EMIT_ASM32 (i386_less_unsigned,
-	    "cmpl %ebx,4(%esp)\n\t"
-	    "jb .Li386_less_unsigned_true\n\t"
-	    "jne .Li386_less_unsigned_false\n\t"
-	    "cmpl %eax,(%esp)\n\t"
-	    "jb .Li386_less_unsigned_true\n\t"
-	    ".Li386_less_unsigned_false:\n\t"
-	    "xor %eax,%eax\n\t"
-	    "jmp .Li386_less_unsigned_end\n\t"
-	    ".Li386_less_unsigned_true:\n\t"
-	    "mov $1,%eax\n\t"
-	    ".Li386_less_unsigned_end:\n\t"
-	    "xor %ebx,%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_ref (int size)
-{
-  switch (size)
-    {
-    case 1:
-      EMIT_ASM32 (i386_ref1,
-		"movb (%eax),%al");
-      break;
-    case 2:
-      EMIT_ASM32 (i386_ref2,
-		"movw (%eax),%ax");
-      break;
-    case 4:
-      EMIT_ASM32 (i386_ref4,
-		"movl (%eax),%eax");
-      break;
-    case 8:
-      EMIT_ASM32 (i386_ref8,
-		"movl 4(%eax),%ebx\n\t"
-		"movl (%eax),%eax");
-      break;
-    }
-}
-
-static void
-i386_emit_if_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (i386_if_goto,
-	    "mov %eax,%ecx\n\t"
-	    "or %ebx,%ecx\n\t"
-	    "pop %eax\n\t"
-	    "pop %ebx\n\t"
-	    "cmpl $0,%ecx\n\t"
-	    /* Don't trust the assembler to choose the right jump */
-	    ".byte 0x0f, 0x85, 0x0, 0x0, 0x0, 0x0");
-
-  if (offset_p)
-    *offset_p = 11; /* be sure that this matches the sequence above */
-  if (size_p)
-    *size_p = 4;
-}
-
-static void
-i386_emit_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (i386_goto,
-	    /* Don't trust the assembler to choose the right jump */
-	    ".byte 0xe9, 0x0, 0x0, 0x0, 0x0");
-  if (offset_p)
-    *offset_p = 1;
-  if (size_p)
-    *size_p = 4;
-}
-
-static void
-i386_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  int diff = (to - (from + size));
-  unsigned char buf[sizeof (int)];
-
-  /* We're only doing 4-byte sizes at the moment.  */
-  if (size != 4)
-    {
-      emit_error = 1;
-      return;
-    }
-
-  memcpy (buf, &diff, sizeof (int));
-  target_write_memory (from, buf, sizeof (int));
-}
-
-static void
-i386_emit_const (LONGEST num)
-{
-  unsigned char buf[16];
-  int i, hi, lo;
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  i = 0;
-  buf[i++] = 0xb8; /* mov $<n>,%eax */
-  lo = num & 0xffffffff;
-  memcpy (&buf[i], &lo, sizeof (lo));
-  i += 4;
-  hi = ((num >> 32) & 0xffffffff);
-  if (hi)
-    {
-      buf[i++] = 0xbb; /* mov $<n>,%ebx */
-      memcpy (&buf[i], &hi, sizeof (hi));
-      i += 4;
-    }
-  else
-    {
-      buf[i++] = 0x31; buf[i++] = 0xdb; /* xor %ebx,%ebx */
-    }
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-}
-
-static void
-i386_emit_call (CORE_ADDR fn)
-{
-  unsigned char buf[16];
-  int i, offset;
-  CORE_ADDR buildaddr;
-
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xe8; /* call <reladdr> */
-  offset = ((int) fn) - (buildaddr + 5);
-  memcpy (buf + 1, &offset, 4);
-  append_insns (&buildaddr, 5, buf);
-  current_insn_ptr = buildaddr;
-}
-
-static void
-i386_emit_reg (int reg)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-
-  EMIT_ASM32 (i386_reg_a,
-	    "sub $0x8,%esp");
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xb8; /* mov $<n>,%eax */
-  memcpy (&buf[i], &reg, sizeof (reg));
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-  EMIT_ASM32 (i386_reg_b,
-	    "mov %eax,4(%esp)\n\t"
-	    "mov 8(%ebp),%eax\n\t"
-	    "mov %eax,(%esp)");
-  i386_emit_call (get_raw_reg_func_addr ());
-  EMIT_ASM32 (i386_reg_c,
-	    "xor %ebx,%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-static void
-i386_emit_pop (void)
-{
-  EMIT_ASM32 (i386_pop,
-	    "pop %eax\n\t"
-	    "pop %ebx");
-}
-
-static void
-i386_emit_stack_flush (void)
-{
-  EMIT_ASM32 (i386_stack_flush,
-	    "push %ebx\n\t"
-	    "push %eax");
-}
-
-static void
-i386_emit_zero_ext (int arg)
-{
-  switch (arg)
-    {
-    case 8:
-      EMIT_ASM32 (i386_zero_ext_8,
-		"and $0xff,%eax\n\t"
-		"xor %ebx,%ebx");
-      break;
-    case 16:
-      EMIT_ASM32 (i386_zero_ext_16,
-		"and $0xffff,%eax\n\t"
-		"xor %ebx,%ebx");
-      break;
-    case 32:
-      EMIT_ASM32 (i386_zero_ext_32,
-		"xor %ebx,%ebx");
-      break;
-    default:
-      emit_error = 1;
-    }
-}
-
-static void
-i386_emit_swap (void)
-{
-  EMIT_ASM32 (i386_swap,
-	    "mov %eax,%ecx\n\t"
-	    "mov %ebx,%edx\n\t"
-	    "pop %eax\n\t"
-	    "pop %ebx\n\t"
-	    "push %edx\n\t"
-	    "push %ecx");
-}
-
-static void
-i386_emit_stack_adjust (int n)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr = current_insn_ptr;
-
-  i = 0;
-  buf[i++] = 0x8d; /* lea $<n>(%esp),%esp */
-  buf[i++] = 0x64;
-  buf[i++] = 0x24;
-  buf[i++] = n * 8;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-}
-
-/* FN's prototype is `LONGEST(*fn)(int)'.  */
-
-static void
-i386_emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-
-  EMIT_ASM32 (i386_int_call_1_a,
-	    /* Reserve a bit of stack space.  */
-	    "sub $0x8,%esp");
-  /* Put the one argument on the stack.  */
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xc7;  /* movl $<arg1>,(%esp) */
-  buf[i++] = 0x04;
-  buf[i++] = 0x24;
-  memcpy (&buf[i], &arg1, sizeof (arg1));
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-  i386_emit_call (fn);
-  EMIT_ASM32 (i386_int_call_1_c,
-	    "mov %edx,%ebx\n\t"
-	    "lea 0x8(%esp),%esp");
-}
-
-/* FN's prototype is `void(*fn)(int,LONGEST)'.  */
-
-static void
-i386_emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  unsigned char buf[16];
-  int i;
-  CORE_ADDR buildaddr;
-
-  EMIT_ASM32 (i386_void_call_2_a,
-	    /* Preserve %eax only; we don't have to worry about %ebx.  */
-	    "push %eax\n\t"
-	    /* Reserve a bit of stack space for arguments.  */
-	    "sub $0x10,%esp\n\t"
-	    /* Copy "top" to the second argument position.  (Note that
-	       we can't assume function won't scribble on its
-	       arguments, so don't try to restore from this.)  */
-	    "mov %eax,4(%esp)\n\t"
-	    "mov %ebx,8(%esp)");
-  /* Put the first argument on the stack.  */
-  buildaddr = current_insn_ptr;
-  i = 0;
-  buf[i++] = 0xc7;  /* movl $<arg1>,(%esp) */
-  buf[i++] = 0x04;
-  buf[i++] = 0x24;
-  memcpy (&buf[i], &arg1, sizeof (arg1));
-  i += 4;
-  append_insns (&buildaddr, i, buf);
-  current_insn_ptr = buildaddr;
-  i386_emit_call (fn);
-  EMIT_ASM32 (i386_void_call_2_b,
-	    "lea 0x10(%esp),%esp\n\t"
-	    /* Restore original stack top.  */
-	    "pop %eax");
-}
-
-
-void
-i386_emit_eq_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (eq,
-	      /* Check low half first, more likely to be decider  */
-	      "cmpl %eax,(%esp)\n\t"
-	      "jne .Leq_fallthru\n\t"
-	      "cmpl %ebx,4(%esp)\n\t"
-	      "jne .Leq_fallthru\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx\n\t"
-	      /* jmp, but don't trust the assembler to choose the right jump */
-	      ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	      ".Leq_fallthru:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx");
-
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-i386_emit_ne_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (ne,
-	      /* Check low half first, more likely to be decider  */
-	      "cmpl %eax,(%esp)\n\t"
-	      "jne .Lne_jump\n\t"
-	      "cmpl %ebx,4(%esp)\n\t"
-	      "je .Lne_fallthru\n\t"
-	      ".Lne_jump:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx\n\t"
-	      /* jmp, but don't trust the assembler to choose the right jump */
-	      ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	      ".Lne_fallthru:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx");
-
-  if (offset_p)
-    *offset_p = 18;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-i386_emit_lt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (lt,
-	      "cmpl %ebx,4(%esp)\n\t"
-	      "jl .Llt_jump\n\t"
-	      "jne .Llt_fallthru\n\t"
-	      "cmpl %eax,(%esp)\n\t"
-	      "jnl .Llt_fallthru\n\t"
-	      ".Llt_jump:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx\n\t"
-	      /* jmp, but don't trust the assembler to choose the right jump */
-	      ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	      ".Llt_fallthru:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx");
-
-  if (offset_p)
-    *offset_p = 20;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-i386_emit_le_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (le,
-	      "cmpl %ebx,4(%esp)\n\t"
-	      "jle .Lle_jump\n\t"
-	      "jne .Lle_fallthru\n\t"
-	      "cmpl %eax,(%esp)\n\t"
-	      "jnle .Lle_fallthru\n\t"
-	      ".Lle_jump:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx\n\t"
-	      /* jmp, but don't trust the assembler to choose the right jump */
-	      ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	      ".Lle_fallthru:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx");
-
-  if (offset_p)
-    *offset_p = 20;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-i386_emit_gt_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (gt,
-	      "cmpl %ebx,4(%esp)\n\t"
-	      "jg .Lgt_jump\n\t"
-	      "jne .Lgt_fallthru\n\t"
-	      "cmpl %eax,(%esp)\n\t"
-	      "jng .Lgt_fallthru\n\t"
-	      ".Lgt_jump:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx\n\t"
-	      /* jmp, but don't trust the assembler to choose the right jump */
-	      ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	      ".Lgt_fallthru:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx");
-
-  if (offset_p)
-    *offset_p = 20;
-  if (size_p)
-    *size_p = 4;
-}
-
-void
-i386_emit_ge_goto (int *offset_p, int *size_p)
-{
-  EMIT_ASM32 (ge,
-	      "cmpl %ebx,4(%esp)\n\t"
-	      "jge .Lge_jump\n\t"
-	      "jne .Lge_fallthru\n\t"
-	      "cmpl %eax,(%esp)\n\t"
-	      "jnge .Lge_fallthru\n\t"
-	      ".Lge_jump:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx\n\t"
-	      /* jmp, but don't trust the assembler to choose the right jump */
-	      ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t"
-	      ".Lge_fallthru:\n\t"
-	      "lea 0x8(%esp),%esp\n\t"
-	      "pop %eax\n\t"
-	      "pop %ebx");
-
-  if (offset_p)
-    *offset_p = 20;
-  if (size_p)
-    *size_p = 4;
-}
-
-struct emit_ops i386_emit_ops =
-  {
-    i386_emit_prologue,
-    i386_emit_epilogue,
-    i386_emit_add,
-    i386_emit_sub,
-    i386_emit_mul,
-    i386_emit_lsh,
-    i386_emit_rsh_signed,
-    i386_emit_rsh_unsigned,
-    i386_emit_ext,
-    i386_emit_log_not,
-    i386_emit_bit_and,
-    i386_emit_bit_or,
-    i386_emit_bit_xor,
-    i386_emit_bit_not,
-    i386_emit_equal,
-    i386_emit_less_signed,
-    i386_emit_less_unsigned,
-    i386_emit_ref,
-    i386_emit_if_goto,
-    i386_emit_goto,
-    i386_write_goto_address,
-    i386_emit_const,
-    i386_emit_call,
-    i386_emit_reg,
-    i386_emit_pop,
-    i386_emit_stack_flush,
-    i386_emit_zero_ext,
-    i386_emit_swap,
-    i386_emit_stack_adjust,
-    i386_emit_int_call_1,
-    i386_emit_void_call_2,
-    i386_emit_eq_goto,
-    i386_emit_ne_goto,
-    i386_emit_lt_goto,
-    i386_emit_le_goto,
-    i386_emit_gt_goto,
-    i386_emit_ge_goto
-  };
-
-
-static struct emit_ops *
-x86_emit_ops (void)
-{
-#ifdef __x86_64__
-  if (is_64bit_tdesc ())
-    return &amd64_emit_ops;
-  else
-#endif
-    return &i386_emit_ops;
-}
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-x86_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = x86_breakpoint_len;
-  return x86_breakpoint;
-}
-
-static int
-x86_supports_range_stepping (void)
-{
-  return 1;
-}
-
-/* Implementation of linux_target_ops method "supports_hardware_single_step".
- */
-
-static int
-x86_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static int
-x86_get_ipa_tdesc_idx (void)
-{
-  struct regcache *regcache = get_thread_regcache (current_thread, 0);
-  const struct target_desc *tdesc = regcache->tdesc;
-
-#ifdef __x86_64__
-  return amd64_get_ipa_tdesc_idx (tdesc);
-#endif
-
-  if (tdesc == tdesc_i386_linux_no_xml)
-    return X86_TDESC_SSE;
-
-  return i386_get_ipa_tdesc_idx (tdesc);
-}
-
-/* This is initialized assuming an amd64 target.
-   x86_arch_setup will correct it for i386 or amd64 targets.  */
-
-struct linux_target_ops the_low_target =
-{
-  x86_arch_setup,
-  x86_linux_regs_info,
-  x86_cannot_fetch_register,
-  x86_cannot_store_register,
-  NULL, /* fetch_register */
-  x86_get_pc,
-  x86_set_pc,
-  NULL, /* breakpoint_kind_from_pc */
-  x86_sw_breakpoint_from_kind,
-  NULL,
-  1,
-  x86_breakpoint_at,
-  x86_supports_z_point_type,
-  x86_insert_point,
-  x86_remove_point,
-  x86_stopped_by_watchpoint,
-  x86_stopped_data_address,
-  /* collect_ptrace_register/supply_ptrace_register are not needed in the
-     native i386 case (no registers smaller than an xfer unit), and are not
-     used in the biarch case (HAVE_LINUX_USRREGS is not defined).  */
-  NULL,
-  NULL,
-  /* need to fix up i386 siginfo if host is amd64 */
-  x86_siginfo_fixup,
-  x86_linux_new_process,
-  x86_linux_delete_process,
-  x86_linux_new_thread,
-  x86_linux_delete_thread,
-  x86_linux_new_fork,
-  x86_linux_prepare_to_resume,
-  x86_linux_process_qsupported,
-  x86_supports_tracepoints,
-  x86_get_thread_area,
-  x86_install_fast_tracepoint_jump_pad,
-  x86_emit_ops,
-  x86_get_min_fast_tracepoint_insn_len,
-  x86_supports_range_stepping,
-  NULL, /* breakpoint_kind_from_current_state */
-  x86_supports_hardware_single_step,
-  x86_get_syscall_trapinfo,
-  x86_get_ipa_tdesc_idx,
-};
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-#ifdef __x86_64__
-  tdesc_amd64_linux_no_xml = allocate_target_description ();
-  copy_target_description (tdesc_amd64_linux_no_xml,
-			   amd64_linux_read_description (X86_XSTATE_SSE_MASK,
-							 false));
-  tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml;
-#endif
-
-  tdesc_i386_linux_no_xml = allocate_target_description ();
-  copy_target_description (tdesc_i386_linux_no_xml,
-			   i386_linux_read_description (X86_XSTATE_SSE_MASK));
-  tdesc_i386_linux_no_xml->xmltarget = xmltarget_i386_linux_no_xml;
-
-  initialize_regsets_info (&x86_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-x86-tdesc.c ./gdb/gdbserver/linux-x86-tdesc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-x86-tdesc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-x86-tdesc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,164 +0,0 @@
-/* GNU/Linux/x86-64 specific target description, for the remote server
-   for GDB.
-   Copyright (C) 2017-2020 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 "server.h"
-#include "tdesc.h"
-#include "linux-x86-tdesc.h"
-#include "arch/i386.h"
-#include "gdbsupport/x86-xstate.h"
-#ifdef __x86_64__
-#include "arch/amd64.h"
-#endif
-#include "x86-tdesc.h"
-
-/* Return the right x86_linux_tdesc index for a given XCR0.  Return
-   X86_TDESC_LAST if can't find a match.  */
-
-static enum x86_linux_tdesc
-xcr0_to_tdesc_idx (uint64_t xcr0, bool is_x32)
-{
-  if (xcr0 & X86_XSTATE_PKRU)
-    {
-      if (is_x32)
-	{
-	  /* No x32 MPX and PKU, fall back to avx_avx512.  */
-	  return X86_TDESC_AVX_AVX512;
-	}
-      else
-	return X86_TDESC_AVX_MPX_AVX512_PKU;
-    }
-  else if (xcr0 & X86_XSTATE_AVX512)
-    return X86_TDESC_AVX_AVX512;
-  else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK)
-    {
-      if (is_x32) /* No MPX on x32.  */
-	return X86_TDESC_AVX;
-      else
-	return X86_TDESC_AVX_MPX;
-    }
-  else if (xcr0 & X86_XSTATE_MPX)
-    {
-      if (is_x32) /* No MPX on x32.  */
-	return X86_TDESC_AVX;
-      else
-	return X86_TDESC_MPX;
-    }
-  else if (xcr0 & X86_XSTATE_AVX)
-    return X86_TDESC_AVX;
-  else if (xcr0 & X86_XSTATE_SSE)
-    return X86_TDESC_SSE;
-  else if (xcr0 & X86_XSTATE_X87)
-    return X86_TDESC_MMX;
-  else
-    return X86_TDESC_LAST;
-}
-
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-
-static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
-
-/* Return the target description according to XCR0.  */
-
-const struct target_desc *
-i386_linux_read_description (uint64_t xcr0)
-{
-  enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, false);
-
-  if (idx == X86_TDESC_LAST)
-    return NULL;
-
-  struct target_desc **tdesc = &i386_tdescs[idx];
-
-  if (*tdesc == NULL)
-    {
-      *tdesc = i386_create_target_description (xcr0, true, false);
-
-      init_target_desc (*tdesc, i386_expedite_regs);
-    }
-
-  return *tdesc;;
-}
-#endif
-
-#ifdef __x86_64__
-
-static target_desc *amd64_tdescs[X86_TDESC_LAST] = { };
-static target_desc *x32_tdescs[X86_TDESC_LAST] = { };
-
-const struct target_desc *
-amd64_linux_read_description (uint64_t xcr0, bool is_x32)
-{
-  enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, is_x32);
-
-  if (idx == X86_TDESC_LAST)
-    return NULL;
-
-  struct target_desc **tdesc = NULL;
-
-  if (is_x32)
-    tdesc = &x32_tdescs[idx];
-  else
-    tdesc = &amd64_tdescs[idx];
-
-  if (*tdesc == NULL)
-    {
-      *tdesc = amd64_create_target_description (xcr0, is_x32, true, true);
-
-      init_target_desc (*tdesc, amd64_expedite_regs);
-    }
-  return *tdesc;
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-int
-i386_get_ipa_tdesc_idx (const struct target_desc *tdesc)
-{
-  for (int i = 0; i < X86_TDESC_LAST; i++)
-    {
-      if (tdesc == i386_tdescs[i])
-	return i;
-    }
-
-  /* If none tdesc is found, return the one with minimum features.  */
-  return X86_TDESC_MMX;
-}
-
-#if defined __x86_64__
-int
-amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc)
-{
-  for (int i = 0; i < X86_TDESC_LAST; i++)
-    {
-      if (tdesc == amd64_tdescs[i])
-	return i;
-    }
-  for (int i = 0; i < X86_TDESC_LAST; i++)
-    {
-      if (tdesc == x32_tdescs[i])
-	return i;
-    }
-
-  return X86_TDESC_SSE;
-}
-
-#endif
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-x86-tdesc.h ./gdb/gdbserver/linux-x86-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-x86-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-x86-tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,56 +0,0 @@
-/* Low level support for x86 (i386 and x86-64), shared between gdbserver
-   and IPA.
-
-   Copyright (C) 2016-2020 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 GDBSERVER_LINUX_X86_TDESC_H
-#define GDBSERVER_LINUX_X86_TDESC_H
-
-/* Note: since IPA obviously knows what ABI it's running on (i386 vs x86_64
-   vs x32), it's sufficient to pass only the register set here.  This,
-   together with the ABI known at IPA compile time, maps to a tdesc.  */
-
-enum x86_linux_tdesc {
-  X86_TDESC_MMX = 0,
-  X86_TDESC_SSE = 1,
-  X86_TDESC_AVX = 2,
-  X86_TDESC_MPX = 3,
-  X86_TDESC_AVX_MPX = 4,
-  X86_TDESC_AVX_AVX512 = 5,
-  X86_TDESC_AVX_MPX_AVX512_PKU = 6,
-  X86_TDESC_LAST = 7,
-};
-
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-int i386_get_ipa_tdesc_idx (const struct target_desc *tdesc);
-#endif
-
-#if defined __x86_64__ && !defined IN_PROCESS_AGENT
-int amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc);
-#endif
-
-const struct target_desc *i386_get_ipa_tdesc (int idx);
-
-#ifdef __x86_64__
-const struct target_desc *amd64_linux_read_description (uint64_t xcr0,
-							bool is_x32);
-#endif
-
-const struct target_desc *i386_linux_read_description (uint64_t xcr0);
-
-#endif /* GDBSERVER_LINUX_X86_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-xtensa-low.c ./gdb/gdbserver/linux-xtensa-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/linux-xtensa-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/linux-xtensa-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,315 +0,0 @@
-/* GNU/Linux/Xtensa specific low level interface, for the remote server for GDB.
-   Copyright (C) 2007-2020 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 "server.h"
-#include "linux-low.h"
-
-/* Defined in auto-generated file reg-xtensa.c.  */
-void init_registers_xtensa (void);
-extern const struct target_desc *tdesc_xtensa;
-
-#include <asm/ptrace.h>
-#include <xtensa-config.h>
-#include "arch/xtensa.h"
-#include "gdb_proc_service.h"
-
-#include "xtensa-xtregs.c"
-
-enum regnum {
-	R_PC=0,	R_PS,
-	R_LBEG,	R_LEND,	R_LCOUNT,
-	R_SAR,
-	R_WS, R_WB,
-	R_THREADPTR,
-	R_A0 = 64
-};
-
-static void
-xtensa_fill_gregset (struct regcache *regcache, void *buf)
-{
-  elf_greg_t* rset = (elf_greg_t*)buf;
-  const struct target_desc *tdesc = regcache->tdesc;
-  int ar0_regnum;
-  char *ptr;
-  int i;
-
-  /* Take care of AR registers.  */
-
-  ar0_regnum = find_regno (tdesc, "ar0");
-  ptr = (char*)&rset[R_A0];
-
-  for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++)
-    {
-      collect_register (regcache, i, ptr);
-      ptr += register_size (tdesc, i);
-    }
-
-  if (XSHAL_ABI == XTHAL_ABI_CALL0)
-    {
-      int a0_regnum = find_regno (tdesc, "a0");
-      ptr = (char *) &rset[R_A0 + 4 * rset[R_WB]];
-
-      for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++)
-	{
-	  if ((4 * rset[R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS)
-	    ptr = (char *) &rset[R_A0];
-	  collect_register (regcache, i, ptr);
-	  ptr += register_size (tdesc, i);
-	}
-    }
-
-  /* Loop registers, if hardware has it.  */
-
-#if XCHAL_HAVE_LOOPS
-  collect_register_by_name (regcache, "lbeg", (char*)&rset[R_LBEG]);
-  collect_register_by_name (regcache, "lend", (char*)&rset[R_LEND]);
-  collect_register_by_name (regcache, "lcount", (char*)&rset[R_LCOUNT]);
-#endif
-
-  collect_register_by_name (regcache, "sar", (char*)&rset[R_SAR]);
-  collect_register_by_name (regcache, "pc", (char*)&rset[R_PC]);
-  collect_register_by_name (regcache, "ps", (char*)&rset[R_PS]);
-  collect_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]);
-  collect_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]);
-
-#if XCHAL_HAVE_THREADPTR
-  collect_register_by_name (regcache, "threadptr",
-			    (char *) &rset[R_THREADPTR]);
-#endif
-}
-
-static void
-xtensa_store_gregset (struct regcache *regcache, const void *buf)
-{
-  const elf_greg_t* rset = (const elf_greg_t*)buf;
-  const struct target_desc *tdesc = regcache->tdesc;
-  int ar0_regnum;
-  char *ptr;
-  int i;
-
-  /* Take care of AR registers.  */
-
-  ar0_regnum = find_regno (tdesc, "ar0");
-  ptr = (char *)&rset[R_A0];
-
-  for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++)
-    {
-      supply_register (regcache, i, ptr);
-      ptr += register_size (tdesc, i);
-    }
-
-  if (XSHAL_ABI == XTHAL_ABI_CALL0)
-    {
-      int a0_regnum = find_regno (tdesc, "a0");
-      ptr = (char *) &rset[R_A0 + (4 * rset[R_WB]) % XCHAL_NUM_AREGS];
-
-      for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++)
-	{
-	  if ((4 * rset[R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS)
-	    ptr = (char *) &rset[R_A0];
-	  supply_register (regcache, i, ptr);
-	  ptr += register_size (tdesc, i);
-	}
-    }
-
-  /* Loop registers, if hardware has it.  */
-
-#if XCHAL_HAVE_LOOPS
-  supply_register_by_name (regcache, "lbeg", (char*)&rset[R_LBEG]);
-  supply_register_by_name (regcache, "lend", (char*)&rset[R_LEND]);
-  supply_register_by_name (regcache, "lcount", (char*)&rset[R_LCOUNT]);
-#endif
-
-  supply_register_by_name (regcache, "sar", (char*)&rset[R_SAR]);
-  supply_register_by_name (regcache, "pc", (char*)&rset[R_PC]);
-  supply_register_by_name (regcache, "ps", (char*)&rset[R_PS]);
-  supply_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]);
-  supply_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]);
-
-#if XCHAL_HAVE_THREADPTR
-  supply_register_by_name (regcache, "threadptr",
-			   (char *) &rset[R_THREADPTR]);
-#endif
-}
-
-/* Xtensa GNU/Linux PTRACE interface includes extended register set.  */
-
-static void
-xtensa_fill_xtregset (struct regcache *regcache, void *buf)
-{
-  const xtensa_regtable_t *ptr;
-
-  for (ptr = xtensa_regmap_table; ptr->name; ptr++)
-    {
-      collect_register_by_name (regcache, ptr->name,
-				(char*)buf + ptr->ptrace_offset);
-    }
-}
-
-static void
-xtensa_store_xtregset (struct regcache *regcache, const void *buf)
-{
-  const xtensa_regtable_t *ptr;
-
-  for (ptr = xtensa_regmap_table; ptr->name; ptr++)
-    {
-      supply_register_by_name (regcache, ptr->name,
-				(char*)buf + ptr->ptrace_offset);
-    }
-}
-
-static struct regset_info xtensa_regsets[] = {
-  { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t),
-    GENERAL_REGS,
-    xtensa_fill_gregset, xtensa_store_gregset },
-  { PTRACE_GETXTREGS, PTRACE_SETXTREGS, 0, XTENSA_ELF_XTREG_SIZE,
-    EXTENDED_REGS,
-    xtensa_fill_xtregset, xtensa_store_xtregset },
-  NULL_REGSET
-};
-
-#if XCHAL_HAVE_BE
-#define XTENSA_BREAKPOINT {0xd2,0x0f}
-#else
-#define XTENSA_BREAKPOINT {0x2d,0xf0}
-#endif
-
-static const gdb_byte xtensa_breakpoint[] = XTENSA_BREAKPOINT;
-#define xtensa_breakpoint_len 2
-
-/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-xtensa_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = xtensa_breakpoint_len;
-  return xtensa_breakpoint;
-}
-
-static int
-xtensa_breakpoint_at (CORE_ADDR where)
-{
-    unsigned long insn;
-
-    (*the_target->read_memory) (where, (unsigned char *) &insn,
-				xtensa_breakpoint_len);
-    return memcmp((char *) &insn,
-		  xtensa_breakpoint, xtensa_breakpoint_len) == 0;
-}
-
-/* Called by libthread_db.  */
-
-ps_err_e
-ps_get_thread_area (struct ps_prochandle *ph,
-                    lwpid_t lwpid, int idx, void **base)
-{
-  xtensa_elf_gregset_t regs;
-
-  if (ptrace (PTRACE_GETREGS, lwpid, NULL, &regs) != 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 *) regs.threadptr - idx);
-
-  return PS_OK;
-}
-
-static struct regsets_info xtensa_regsets_info =
-  {
-    xtensa_regsets, /* regsets */
-    0, /* num_regsets */
-    NULL, /* disabled_regsets */
-  };
-
-static struct regs_info regs_info =
-  {
-    NULL, /* regset_bitmap */
-    NULL, /* usrregs */
-    &xtensa_regsets_info
-  };
-
-static void
-xtensa_arch_setup (void)
-{
-  current_process ()->tdesc = tdesc_xtensa;
-}
-
-/* Support for hardware single step.  */
-
-static int
-xtensa_supports_hardware_single_step (void)
-{
-  return 1;
-}
-
-static const struct regs_info *
-xtensa_regs_info (void)
-{
-  return &regs_info;
-}
-
-struct linux_target_ops the_low_target = {
-  xtensa_arch_setup,
-  xtensa_regs_info,
-  0,
-  0,
-  NULL, /* fetch_register */
-  linux_get_pc_32bit,
-  linux_set_pc_32bit,
-  NULL, /* breakpoint_kind_from_pc */
-  xtensa_sw_breakpoint_from_kind,
-  NULL,
-  0,
-  xtensa_breakpoint_at,
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
-  NULL, /* collect_ptrace_register */
-  NULL, /* supply_ptrace_register */
-  NULL, /* siginfo_fixup */
-  NULL, /* new_process */
-  NULL, /* delete_process */
-  NULL, /* new_thread */
-  NULL, /* delete_thread */
-  NULL, /* new_fork */
-  NULL, /* prepare_to_resume */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* get_thread_area */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* supports_range_stepping */
-  NULL, /* breakpoint_kind_from_current_state */
-  xtensa_supports_hardware_single_step,
-};
-
-
-void
-initialize_low_arch (void)
-{
-  /* Initialize the Linux target descriptions.  */
-  init_registers_xtensa ();
-
-  initialize_regsets_info (&xtensa_regsets_info);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-i386-low.c ./gdb/gdbserver/lynx-i386-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-i386-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/lynx-i386-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,358 +0,0 @@
-/* Copyright (C) 2010-2020 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 "server.h"
-#include "lynx-low.h"
-#include <limits.h>
-#include <sys/ptrace.h>
-#include "gdbsupport/x86-xstate.h"
-#include "arch/i386.h"
-#include "x86-tdesc.h"
-
-/* The following two typedefs are defined in a .h file which is not
-   in the standard include path (/sys/include/family/x86/ucontext.h),
-   so we just duplicate them here.
-
-   Unfortunately for us, the definition of this structure differs between
-   LynxOS 5.x and LynxOS 178.  Rather than duplicate the code, we use
-   different definitions depending on the target.  */
-
-#ifdef VMOS_DEV
-#define LYNXOS_178
-#endif
-
-/* General register context */
-typedef struct usr_econtext {
-
-    uint32_t    uec_fault;
-    uint32_t    uec_es;
-    uint32_t    uec_ds;
-    uint32_t    uec_edi;
-    uint32_t    uec_esi;
-    uint32_t    uec_ebp;
-    uint32_t    uec_temp;
-    uint32_t    uec_ebx;
-    uint32_t    uec_edx;
-    uint32_t    uec_ecx;
-    uint32_t    uec_eax;
-    uint32_t    uec_inum;
-    uint32_t    uec_ecode;
-    uint32_t    uec_eip;
-    uint32_t    uec_cs;
-    uint32_t    uec_eflags;
-    uint32_t    uec_esp;
-    uint32_t    uec_ss;
-    uint32_t    uec_fs;
-    uint32_t    uec_gs;
-} usr_econtext_t;
-
-#if defined(LYNXOS_178)
-
-/* Floating point register context                                                                                      */
-typedef struct usr_fcontext {
-        uint32_t         ufc_control;
-        uint32_t         ufc_status;
-        uint32_t         ufc_tag;
-        uint8_t         *ufc_inst_off;
-        uint32_t         ufc_inst_sel;
-        uint8_t         *ufc_data_off;
-        uint32_t         ufc_data_sel;
-        struct ufp387_real {
-                uint16_t        umant4;
-        uint16_t        umant3;
-        uint16_t        umant2;
-        uint16_t        umant1;
-        uint16_t        us_and_e;
-        } ufc_reg[8];
-} usr_fcontext_t;
-
-#else /* This is LynxOS 5.x.  */
-
-/* Floating point and SIMD register context */
-typedef struct usr_fcontext {
-        uint16_t         ufc_control;
-        uint16_t         ufc_status;
-        uint16_t         ufc_tag;
-        uint16_t         ufc_opcode;
-        uint8_t         *ufc_inst_off;
-        uint32_t         ufc_inst_sel;
-        uint8_t         *ufc_data_off;
-        uint32_t         ufc_data_sel;
-        uint32_t         usse_mxcsr;
-        uint32_t         usse_mxcsr_mask;
-        struct ufp387_real {
-                uint16_t umant4;
-                uint16_t umant3;
-                uint16_t umant2;
-                uint16_t umant1;
-                uint16_t us_and_e;
-                uint16_t ureserved_1;
-                uint16_t ureserved_2;
-                uint16_t ureserved_3;
-        } ufc_reg[8];
-        struct uxmm_register {
-                uint16_t uchunk_1;
-                uint16_t uchunk_2;
-                uint16_t uchunk_3;
-                uint16_t uchunk_4;
-                uint16_t uchunk_5;
-                uint16_t uchunk_6;
-                uint16_t uchunk_7;
-                uint16_t uchunk_8;
-        } uxmm_reg[8];
-        char ureserved[16][14];
-} usr_fcontext_t;
-
-#endif
-
-/* The index of various registers inside the regcache.  */
-
-enum lynx_i386_gdb_regnum
-{
-  I386_EAX_REGNUM,
-  I386_ECX_REGNUM,
-  I386_EDX_REGNUM,
-  I386_EBX_REGNUM,
-  I386_ESP_REGNUM,
-  I386_EBP_REGNUM,
-  I386_ESI_REGNUM,
-  I386_EDI_REGNUM,
-  I386_EIP_REGNUM,
-  I386_EFLAGS_REGNUM,
-  I386_CS_REGNUM,
-  I386_SS_REGNUM,
-  I386_DS_REGNUM,
-  I386_ES_REGNUM,
-  I386_FS_REGNUM,
-  I386_GS_REGNUM,
-  I386_ST0_REGNUM,
-  I386_FCTRL_REGNUM = I386_ST0_REGNUM + 8,
-  I386_FSTAT_REGNUM,
-  I386_FTAG_REGNUM,
-  I386_FISEG_REGNUM,
-  I386_FIOFF_REGNUM,
-  I386_FOSEG_REGNUM,
-  I386_FOOFF_REGNUM,
-  I386_FOP_REGNUM,
-  I386_XMM0_REGNUM = 32,
-  I386_MXCSR_REGNUM = I386_XMM0_REGNUM + 8,
-  I386_SENTINEL_REGUM
-};
-
-/* The fill_function for the general-purpose register set.  */
-
-static void
-lynx_i386_fill_gregset (struct regcache *regcache, char *buf)
-{
-#define lynx_i386_collect_gp(regnum, fld) \
-  collect_register (regcache, regnum, \
-                    buf + offsetof (usr_econtext_t, uec_##fld))
-
-  lynx_i386_collect_gp (I386_EAX_REGNUM, eax);
-  lynx_i386_collect_gp (I386_ECX_REGNUM, ecx);
-  lynx_i386_collect_gp (I386_EDX_REGNUM, edx);
-  lynx_i386_collect_gp (I386_EBX_REGNUM, ebx);
-  lynx_i386_collect_gp (I386_ESP_REGNUM, esp);
-  lynx_i386_collect_gp (I386_EBP_REGNUM, ebp);
-  lynx_i386_collect_gp (I386_ESI_REGNUM, esi);
-  lynx_i386_collect_gp (I386_EDI_REGNUM, edi);
-  lynx_i386_collect_gp (I386_EIP_REGNUM, eip);
-  lynx_i386_collect_gp (I386_EFLAGS_REGNUM, eflags);
-  lynx_i386_collect_gp (I386_CS_REGNUM, cs);
-  lynx_i386_collect_gp (I386_SS_REGNUM, ss);
-  lynx_i386_collect_gp (I386_DS_REGNUM, ds);
-  lynx_i386_collect_gp (I386_ES_REGNUM, es);
-  lynx_i386_collect_gp (I386_FS_REGNUM, fs);
-  lynx_i386_collect_gp (I386_GS_REGNUM, gs);
-}
-
-/* The store_function for the general-purpose register set.  */
-
-static void
-lynx_i386_store_gregset (struct regcache *regcache, const char *buf)
-{
-#define lynx_i386_supply_gp(regnum, fld) \
-  supply_register (regcache, regnum, \
-                   buf + offsetof (usr_econtext_t, uec_##fld))
-
-  lynx_i386_supply_gp (I386_EAX_REGNUM, eax);
-  lynx_i386_supply_gp (I386_ECX_REGNUM, ecx);
-  lynx_i386_supply_gp (I386_EDX_REGNUM, edx);
-  lynx_i386_supply_gp (I386_EBX_REGNUM, ebx);
-  lynx_i386_supply_gp (I386_ESP_REGNUM, esp);
-  lynx_i386_supply_gp (I386_EBP_REGNUM, ebp);
-  lynx_i386_supply_gp (I386_ESI_REGNUM, esi);
-  lynx_i386_supply_gp (I386_EDI_REGNUM, edi);
-  lynx_i386_supply_gp (I386_EIP_REGNUM, eip);
-  lynx_i386_supply_gp (I386_EFLAGS_REGNUM, eflags);
-  lynx_i386_supply_gp (I386_CS_REGNUM, cs);
-  lynx_i386_supply_gp (I386_SS_REGNUM, ss);
-  lynx_i386_supply_gp (I386_DS_REGNUM, ds);
-  lynx_i386_supply_gp (I386_ES_REGNUM, es);
-  lynx_i386_supply_gp (I386_FS_REGNUM, fs);
-  lynx_i386_supply_gp (I386_GS_REGNUM, gs);
-}
-
-/* Extract the first 16 bits of register REGNUM in the REGCACHE,
-   and store these 2 bytes at DEST.
-
-   This is useful to collect certain 16bit registers which are known
-   by GDBserver as 32bit registers (such as the Control Register
-   for instance).  */
-
-static void
-collect_16bit_register (struct regcache *regcache, int regnum, char *dest)
-{
-  gdb_byte word[4];
-
-  collect_register (regcache, regnum, word);
-  memcpy (dest, word, 2);
-}
-
-/* The fill_function for the floating-point register set.  */
-
-static void
-lynx_i386_fill_fpregset (struct regcache *regcache, char *buf)
-{
-  int i;
-
-  /* Collect %st0 .. %st7.  */
-  for (i = 0; i < 8; i++)
-    collect_register (regcache, I386_ST0_REGNUM + i,
-                      buf + offsetof (usr_fcontext_t, ufc_reg)
-		      + i * sizeof (struct ufp387_real));
-
-  /* Collect the other FPU registers.  */
-  collect_16bit_register (regcache, I386_FCTRL_REGNUM,
-                          buf + offsetof (usr_fcontext_t, ufc_control));
-  collect_16bit_register (regcache, I386_FSTAT_REGNUM,
-                          buf + offsetof (usr_fcontext_t, ufc_status));
-  collect_16bit_register (regcache, I386_FTAG_REGNUM,
-                          buf + offsetof (usr_fcontext_t, ufc_tag));
-  collect_register (regcache, I386_FISEG_REGNUM,
-                    buf + offsetof (usr_fcontext_t, ufc_inst_sel));
-  collect_register (regcache, I386_FIOFF_REGNUM,
-                    buf + offsetof (usr_fcontext_t, ufc_inst_off));
-  collect_register (regcache, I386_FOSEG_REGNUM,
-                    buf + offsetof (usr_fcontext_t, ufc_data_sel));
-  collect_register (regcache, I386_FOOFF_REGNUM,
-                    buf + offsetof (usr_fcontext_t, ufc_data_off));
-#if !defined(LYNXOS_178)
-  collect_16bit_register (regcache, I386_FOP_REGNUM,
-                          buf + offsetof (usr_fcontext_t, ufc_opcode));
-
-  /* Collect the XMM registers.  */
-  for (i = 0; i < 8; i++)
-    collect_register (regcache, I386_XMM0_REGNUM + i,
-                      buf + offsetof (usr_fcontext_t, uxmm_reg)
-		      + i * sizeof (struct uxmm_register));
-  collect_register (regcache, I386_MXCSR_REGNUM,
-                    buf + offsetof (usr_fcontext_t, usse_mxcsr));
-#endif
-}
-
-/* This is the supply counterpart for collect_16bit_register:
-   It extracts a 2byte value from BUF, and uses that value to
-   set REGNUM's value in the regcache.
-
-   This is useful to supply the value of certain 16bit registers
-   which are known by GDBserver as 32bit registers (such as the Control
-   Register for instance).  */
-
-static void
-supply_16bit_register (struct regcache *regcache, int regnum, const char *buf)
-{
-  gdb_byte word[4];
-
-  memcpy (word, buf, 2);
-  memset (word + 2, 0, 2);
-  supply_register (regcache, regnum, word);
-}
-
-/* The store_function for the floating-point register set.  */
-
-static void
-lynx_i386_store_fpregset (struct regcache *regcache, const char *buf)
-{
-  int i;
-
-  /* Store the %st0 .. %st7 registers.  */
-  for (i = 0; i < 8; i++)
-    supply_register (regcache, I386_ST0_REGNUM + i,
-                     buf + offsetof (usr_fcontext_t, ufc_reg)
-		     + i * sizeof (struct ufp387_real));
-
-  /* Store the other FPU registers.  */
-  supply_16bit_register (regcache, I386_FCTRL_REGNUM,
-                         buf + offsetof (usr_fcontext_t, ufc_control));
-  supply_16bit_register (regcache, I386_FSTAT_REGNUM,
-                         buf + offsetof (usr_fcontext_t, ufc_status));
-  supply_16bit_register (regcache, I386_FTAG_REGNUM,
-                         buf + offsetof (usr_fcontext_t, ufc_tag));
-  supply_register (regcache, I386_FISEG_REGNUM,
-                   buf + offsetof (usr_fcontext_t, ufc_inst_sel));
-  supply_register (regcache, I386_FIOFF_REGNUM,
-                   buf + offsetof (usr_fcontext_t, ufc_inst_off));
-  supply_register (regcache, I386_FOSEG_REGNUM,
-                   buf + offsetof (usr_fcontext_t, ufc_data_sel));
-  supply_register (regcache, I386_FOOFF_REGNUM,
-                   buf + offsetof (usr_fcontext_t, ufc_data_off));
-#if !defined(LYNXOS_178)
-  supply_16bit_register (regcache, I386_FOP_REGNUM,
-                         buf + offsetof (usr_fcontext_t, ufc_opcode));
-
-  /* Store the XMM registers.  */
-  for (i = 0; i < 8; i++)
-    supply_register (regcache, I386_XMM0_REGNUM + i,
-                     buf + offsetof (usr_fcontext_t, uxmm_reg)
-		     + i * sizeof (struct uxmm_register));
-  supply_register (regcache, I386_MXCSR_REGNUM,
-                   buf + offsetof (usr_fcontext_t, usse_mxcsr));
-#endif
-}
-
-/* Implements the lynx_target_ops.arch_setup routine.  */
-
-static void
-lynx_i386_arch_setup (void)
-{
-  struct target_desc *tdesc
-    = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false);
-
-  init_target_desc (tdesc, i386_expedite_regs);
-
-  lynx_tdesc = tdesc;
-}
-
-/* Description of all the x86-lynx register sets.  */
-
-struct lynx_regset_info lynx_target_regsets[] = {
-  /* General Purpose Registers.  */
-  {PTRACE_GETREGS, PTRACE_SETREGS, sizeof(usr_econtext_t),
-   lynx_i386_fill_gregset, lynx_i386_store_gregset},
-  /* Floating Point Registers.  */
-  { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof(usr_fcontext_t),
-    lynx_i386_fill_fpregset, lynx_i386_store_fpregset },
-  /* End of list marker.  */
-  {0, 0, -1, NULL, NULL }
-};
-
-/* The lynx_target_ops vector for x86-lynx.  */
-
-struct lynx_target_ops the_low_target = {
-  lynx_i386_arch_setup,
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-low.c ./gdb/gdbserver/lynx-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/lynx-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,776 +0,0 @@
-/* Copyright (C) 2009-2020 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 "server.h"
-#include "target.h"
-#include "lynx-low.h"
-
-#include <limits.h>
-#include <sys/ptrace.h>
-#include <sys/piddef.h> /* Provides PIDGET, TIDGET, BUILDPID, etc.  */
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include "gdbsupport/gdb_wait.h"
-#include <signal.h>
-#include "gdbsupport/filestuff.h"
-#include "gdbsupport/common-inferior.h"
-#include "nat/fork-inferior.h"
-
-int using_threads = 1;
-
-const struct target_desc *lynx_tdesc;
-
-/* Per-process private data.  */
-
-struct process_info_private
-{
-  /* The PTID obtained from the last wait performed on this process.
-     Initialized to null_ptid until the first wait is performed.  */
-  ptid_t last_wait_event_ptid;
-};
-
-/* Print a debug trace on standard output if debug_threads is set.  */
-
-static void
-lynx_debug (char *string, ...)
-{
-  va_list args;
-
-  if (!debug_threads)
-    return;
-
-  va_start (args, string);
-  fprintf (stderr, "DEBUG(lynx): ");
-  vfprintf (stderr, string, args);
-  fprintf (stderr, "\n");
-  va_end (args);
-}
-
-/* Build a ptid_t given a PID and a LynxOS TID.  */
-
-static ptid_t
-lynx_ptid_t (int pid, long tid)
-{
-  /* brobecker/2010-06-21: It looks like the LWP field in ptids
-     should be distinct for each thread (see write_ptid where it
-     writes the thread ID from the LWP).  So instead of storing
-     the LynxOS tid in the tid field of the ptid, we store it in
-     the lwp field.  */
-  return ptid_t (pid, tid, 0);
-}
-
-/* Return the process ID of the given PTID.
-
-   This function has little reason to exist, it's just a wrapper around
-   ptid_get_pid.  But since we have a getter function for the lynxos
-   ptid, it feels cleaner to have a getter for the pid as well.  */
-
-static int
-lynx_ptid_get_pid (ptid_t ptid)
-{
-  return ptid.pid ();
-}
-
-/* Return the LynxOS tid of the given PTID.  */
-
-static long
-lynx_ptid_get_tid (ptid_t ptid)
-{
-  /* See lynx_ptid_t: The LynxOS tid is stored inside the lwp field
-     of the ptid.  */
-  return ptid.lwp ();
-}
-
-/* For a given PTID, return the associated PID as known by the LynxOS
-   ptrace layer.  */
-
-static int
-lynx_ptrace_pid_from_ptid (ptid_t ptid)
-{
-  return BUILDPID (lynx_ptid_get_pid (ptid), lynx_ptid_get_tid (ptid));
-}
-
-/* Return a string image of the ptrace REQUEST number.  */
-
-static char *
-ptrace_request_to_str (int request)
-{
-#define CASE(X) case X: return #X
-  switch (request)
-    {
-      CASE(PTRACE_TRACEME);
-      CASE(PTRACE_PEEKTEXT);
-      CASE(PTRACE_PEEKDATA);
-      CASE(PTRACE_PEEKUSER);
-      CASE(PTRACE_POKETEXT);
-      CASE(PTRACE_POKEDATA);
-      CASE(PTRACE_POKEUSER);
-      CASE(PTRACE_CONT);
-      CASE(PTRACE_KILL);
-      CASE(PTRACE_SINGLESTEP);
-      CASE(PTRACE_ATTACH);
-      CASE(PTRACE_DETACH);
-      CASE(PTRACE_GETREGS);
-      CASE(PTRACE_SETREGS);
-      CASE(PTRACE_GETFPREGS);
-      CASE(PTRACE_SETFPREGS);
-      CASE(PTRACE_READDATA);
-      CASE(PTRACE_WRITEDATA);
-      CASE(PTRACE_READTEXT);
-      CASE(PTRACE_WRITETEXT);
-      CASE(PTRACE_GETFPAREGS);
-      CASE(PTRACE_SETFPAREGS);
-      CASE(PTRACE_GETWINDOW);
-      CASE(PTRACE_SETWINDOW);
-      CASE(PTRACE_SYSCALL);
-      CASE(PTRACE_DUMPCORE);
-      CASE(PTRACE_SETWRBKPT);
-      CASE(PTRACE_SETACBKPT);
-      CASE(PTRACE_CLRBKPT);
-      CASE(PTRACE_GET_UCODE);
-#ifdef PT_READ_GPR
-      CASE(PT_READ_GPR);
-#endif
-#ifdef PT_WRITE_GPR
-      CASE(PT_WRITE_GPR);
-#endif
-#ifdef PT_READ_FPR
-      CASE(PT_READ_FPR);
-#endif
-#ifdef PT_WRITE_FPR
-      CASE(PT_WRITE_FPR);
-#endif
-#ifdef PT_READ_VPR
-      CASE(PT_READ_VPR);
-#endif
-#ifdef PT_WRITE_VPR
-      CASE(PT_WRITE_VPR);
-#endif
-#ifdef PTRACE_PEEKUSP
-      CASE(PTRACE_PEEKUSP);
-#endif
-#ifdef PTRACE_POKEUSP
-      CASE(PTRACE_POKEUSP);
-#endif
-      CASE(PTRACE_PEEKTHREAD);
-      CASE(PTRACE_THREADUSER);
-      CASE(PTRACE_FPREAD);
-      CASE(PTRACE_FPWRITE);
-      CASE(PTRACE_SETSIG);
-      CASE(PTRACE_CONT_ONE);
-      CASE(PTRACE_KILL_ONE);
-      CASE(PTRACE_SINGLESTEP_ONE);
-      CASE(PTRACE_GETLOADINFO);
-      CASE(PTRACE_GETTRACESIG);
-#ifdef PTRACE_GETTHREADLIST
-      CASE(PTRACE_GETTHREADLIST);
-#endif
-    }
-#undef CASE
-
-  return "<unknown-request>";
-}
-
-/* A wrapper around ptrace that allows us to print debug traces of
-   ptrace calls if debug traces are activated.  */
-
-static int
-lynx_ptrace (int request, ptid_t ptid, int addr, int data, int addr2)
-{
-  int result;
-  const int pid = lynx_ptrace_pid_from_ptid (ptid);
-  int saved_errno;
-
-  if (debug_threads)
-    fprintf (stderr, "PTRACE (%s, pid=%d(pid=%d, tid=%d), addr=0x%x, "
-             "data=0x%x, addr2=0x%x)",
-             ptrace_request_to_str (request), pid, PIDGET (pid), TIDGET (pid),
-             addr, data, addr2);
-  result = ptrace (request, pid, addr, data, addr2);
-  saved_errno = errno;
-  if (debug_threads)
-    fprintf (stderr, " -> %d (=0x%x)\n", result, result);
-
-  errno = saved_errno;
-  return result;
-}
-
-/* Call add_process with the given parameters, and initializes
-   the process' private data.  */
-
-static struct process_info *
-lynx_add_process (int pid, int attached)
-{
-  struct process_info *proc;
-
-  proc = add_process (pid, attached);
-  proc->tdesc = lynx_tdesc;
-  proc->priv = XCNEW (struct process_info_private);
-  proc->priv->last_wait_event_ptid = null_ptid;
-
-  return proc;
-}
-
-/* Callback used by fork_inferior to start tracing the inferior.  */
-
-static void
-lynx_ptrace_fun ()
-{
-  int pgrp;
-
-  /* Switch child to its own process group so that signals won't
-     directly affect GDBserver. */
-  pgrp = getpid();
-  if (pgrp < 0)
-    trace_start_error_with_name ("pgrp");
-  if (setpgid (0, pgrp) < 0)
-    trace_start_error_with_name ("setpgid");
-  if (ioctl (0, TIOCSPGRP, &pgrp) < 0)
-    trace_start_error_with_name ("ioctl");
-  if (lynx_ptrace (PTRACE_TRACEME, null_ptid, 0, 0, 0) < 0)
-    trace_start_error_with_name ("lynx_ptrace");
-}
-
-/* Implement the create_inferior method of the target_ops vector.  */
-
-static int
-lynx_create_inferior (const char *program,
-		      const std::vector<char *> &program_args)
-{
-  int pid;
-  std::string str_program_args = stringify_argv (program_args);
-
-  lynx_debug ("lynx_create_inferior ()");
-
-  pid = fork_inferior (program,
-		       str_program_args.c_str (),
-		       get_environ ()->envp (), lynx_ptrace_fun,
-		       NULL, NULL, NULL, NULL);
-
-  post_fork_inferior (pid, program);
-
-  lynx_add_process (pid, 0);
-  /* Do not add the process thread just yet, as we do not know its tid.
-     We will add it later, during the wait for the STOP event corresponding
-     to the lynx_ptrace (PTRACE_TRACEME) call above.  */
-  return pid;
-}
-
-/* Assuming we've just attached to a running inferior whose pid is PID,
-   add all threads running in that process.  */
-
-static void
-lynx_add_threads_after_attach (int pid)
-{
-  /* Ugh!  There appears to be no way to get the list of threads
-     in the program we just attached to.  So get the list by calling
-     the "ps" command.  This is only needed now, as we will then
-     keep the thread list up to date thanks to thread creation and
-     exit notifications.  */
-  FILE *f;
-  char buf[256];
-  int thread_pid, thread_tid;
-
-  f = popen ("ps atx", "r");
-  if (f == NULL)
-    perror_with_name ("Cannot get thread list");
-
-  while (fgets (buf, sizeof (buf), f) != NULL)
-    if ((sscanf (buf, "%d %d", &thread_pid, &thread_tid) == 2
-	 && thread_pid == pid))
-    {
-      ptid_t thread_ptid = lynx_ptid_t (pid, thread_tid);
-
-      if (!find_thread_ptid (thread_ptid))
-	{
-	  lynx_debug ("New thread: (pid = %d, tid = %d)",
-		      pid, thread_tid);
-	  add_thread (thread_ptid, NULL);
-	}
-    }
-
-  pclose (f);
-}
-
-/* Implement the attach target_ops method.  */
-
-static int
-lynx_attach (unsigned long pid)
-{
-  ptid_t ptid = lynx_ptid_t (pid, 0);
-
-  if (lynx_ptrace (PTRACE_ATTACH, ptid, 0, 0, 0) != 0)
-    error ("Cannot attach to process %lu: %s (%d)\n", pid,
-	   safe_strerror (errno), errno);
-
-  lynx_add_process (pid, 1);
-  lynx_add_threads_after_attach (pid);
-
-  return 0;
-}
-
-/* Implement the resume target_ops method.  */
-
-static void
-lynx_resume (struct thread_resume *resume_info, size_t n)
-{
-  ptid_t ptid = resume_info[0].thread;
-  const int request
-    = (resume_info[0].kind == resume_step
-       ? (n == 1 ? PTRACE_SINGLESTEP_ONE : PTRACE_SINGLESTEP)
-       : PTRACE_CONT);
-  const int signal = resume_info[0].sig;
-
-  /* If given a minus_one_ptid, then try using the current_process'
-     private->last_wait_event_ptid.  On most LynxOS versions,
-     using any of the process' thread works well enough, but
-     LynxOS 178 is a little more sensitive, and triggers some
-     unexpected signals (Eg SIG61) when we resume the inferior
-     using a different thread.  */
-  if (ptid == minus_one_ptid)
-    ptid = current_process()->priv->last_wait_event_ptid;
-
-  /* The ptid might still be minus_one_ptid; this can happen between
-     the moment we create the inferior or attach to a process, and
-     the moment we resume its execution for the first time.  It is
-     fine to use the current_thread's ptid in those cases.  */
-  if (ptid == minus_one_ptid)
-    ptid = ptid_of (current_thread);
-
-  regcache_invalidate_pid (ptid.pid ());
-
-  errno = 0;
-  lynx_ptrace (request, ptid, 1, signal, 0);
-  if (errno)
-    perror_with_name ("ptrace");
-}
-
-/* Resume the execution of the given PTID.  */
-
-static void
-lynx_continue (ptid_t ptid)
-{
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_continue;
-  resume_info.sig = 0;
-
-  lynx_resume (&resume_info, 1);
-}
-
-/* A wrapper around waitpid that handles the various idiosyncrasies
-   of LynxOS' waitpid.  */
-
-static int
-lynx_waitpid (int pid, int *stat_loc)
-{
-  int ret = 0;
-
-  while (1)
-    {
-      ret = waitpid (pid, stat_loc, WNOHANG);
-      if (ret < 0)
-        {
-	  /* An ECHILD error is not indicative of a real problem.
-	     It happens for instance while waiting for the inferior
-	     to stop after attaching to it.  */
-	  if (errno != ECHILD)
-	    perror_with_name ("waitpid (WNOHANG)");
-	}
-      if (ret > 0)
-        break;
-      /* No event with WNOHANG.  See if there is one with WUNTRACED.  */
-      ret = waitpid (pid, stat_loc, WNOHANG | WUNTRACED);
-      if (ret < 0)
-        {
-	  /* An ECHILD error is not indicative of a real problem.
-	     It happens for instance while waiting for the inferior
-	     to stop after attaching to it.  */
-	  if (errno != ECHILD)
-	    perror_with_name ("waitpid (WNOHANG|WUNTRACED)");
-	}
-      if (ret > 0)
-        break;
-      usleep (1000);
-    }
-  return ret;
-}
-
-/* Implement the wait target_ops method.  */
-
-static ptid_t
-lynx_wait_1 (ptid_t ptid, struct target_waitstatus *status, int options)
-{
-  int pid;
-  int ret;
-  int wstat;
-  ptid_t new_ptid;
-
-  if (ptid == minus_one_ptid)
-    pid = lynx_ptid_get_pid (ptid_of (current_thread));
-  else
-    pid = BUILDPID (lynx_ptid_get_pid (ptid), lynx_ptid_get_tid (ptid));
-
-retry:
-
-  ret = lynx_waitpid (pid, &wstat);
-  new_ptid = lynx_ptid_t (ret, ((union wait *) &wstat)->w_tid);
-  find_process_pid (ret)->priv->last_wait_event_ptid = new_ptid;
-
-  /* If this is a new thread, then add it now.  The reason why we do
-     this here instead of when handling new-thread events is because
-     we need to add the thread associated to the "main" thread - even
-     for non-threaded applications where the new-thread events are not
-     generated.  */
-  if (!find_thread_ptid (new_ptid))
-    {
-      lynx_debug ("New thread: (pid = %d, tid = %d)",
-		  lynx_ptid_get_pid (new_ptid), lynx_ptid_get_tid (new_ptid));
-      add_thread (new_ptid, NULL);
-    }
-
-  if (WIFSTOPPED (wstat))
-    {
-      status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.integer = gdb_signal_from_host (WSTOPSIG (wstat));
-      lynx_debug ("process stopped with signal: %d",
-                  status->value.integer);
-    }
-  else if (WIFEXITED (wstat))
-    {
-      status->kind = TARGET_WAITKIND_EXITED;
-      status->value.integer = WEXITSTATUS (wstat);
-      lynx_debug ("process exited with code: %d", status->value.integer);
-    }
-  else if (WIFSIGNALED (wstat))
-    {
-      status->kind = TARGET_WAITKIND_SIGNALLED;
-      status->value.integer = gdb_signal_from_host (WTERMSIG (wstat));
-      lynx_debug ("process terminated with code: %d",
-                  status->value.integer);
-    }
-  else
-    {
-      /* Not sure what happened if we get here, or whether we can
-	 in fact get here.  But if we do, handle the event the best
-	 we can.  */
-      status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.integer = gdb_signal_from_host (0);
-      lynx_debug ("unknown event ????");
-    }
-
-  /* SIGTRAP events are generated for situations other than single-step/
-     breakpoint events (Eg. new-thread events).  Handle those other types
-     of events, and resume the execution if necessary.  */
-  if (status->kind == TARGET_WAITKIND_STOPPED
-      && status->value.integer == GDB_SIGNAL_TRAP)
-    {
-      const int realsig = lynx_ptrace (PTRACE_GETTRACESIG, new_ptid, 0, 0, 0);
-
-      lynx_debug ("(realsig = %d)", realsig);
-      switch (realsig)
-	{
-	  case SIGNEWTHREAD:
-	    /* We just added the new thread above.  No need to do anything
-	       further.  Just resume the execution again.  */
-	    lynx_continue (new_ptid);
-	    goto retry;
-
-	  case SIGTHREADEXIT:
-	    remove_thread (find_thread_ptid (new_ptid));
-	    lynx_continue (new_ptid);
-	    goto retry;
-	}
-    }
-
-  return new_ptid;
-}
-
-/* A wrapper around lynx_wait_1 that also prints debug traces when
-   such debug traces have been activated.  */
-
-static ptid_t
-lynx_wait (ptid_t ptid, struct target_waitstatus *status, int options)
-{
-  ptid_t new_ptid;
-
-  lynx_debug ("lynx_wait (pid = %d, tid = %ld)",
-              lynx_ptid_get_pid (ptid), lynx_ptid_get_tid (ptid));
-  new_ptid = lynx_wait_1 (ptid, status, options);
-  lynx_debug ("          -> (pid=%d, tid=%ld, status->kind = %d)",
-	      lynx_ptid_get_pid (new_ptid), lynx_ptid_get_tid (new_ptid),
-	      status->kind);
-  return new_ptid;
-}
-
-/* Implement the kill target_ops method.  */
-
-static int
-lynx_kill (process_info *process)
-{
-  ptid_t ptid = lynx_ptid_t (process->pid, 0);
-  struct target_waitstatus status;
-
-  lynx_ptrace (PTRACE_KILL, ptid, 0, 0, 0);
-  lynx_wait (ptid, &status, 0);
-  the_target->mourn (process);
-  return 0;
-}
-
-/* Implement the detach target_ops method.  */
-
-static int
-lynx_detach (process_info *process)
-{
-  ptid_t ptid = lynx_ptid_t (process->pid, 0);
-
-  lynx_ptrace (PTRACE_DETACH, ptid, 0, 0, 0);
-  the_target->mourn (process);
-  return 0;
-}
-
-/* Implement the mourn target_ops method.  */
-
-static void
-lynx_mourn (struct process_info *proc)
-{
-  for_each_thread (proc->pid, remove_thread);
-
-  /* Free our private data.  */
-  free (proc->priv);
-  proc->priv = NULL;
-
-  remove_process (proc);
-}
-
-/* Implement the join target_ops method.  */
-
-static void
-lynx_join (int pid)
-{
-  /* The PTRACE_DETACH is sufficient to detach from the process.
-     So no need to do anything extra.  */
-}
-
-/* Implement the thread_alive target_ops method.  */
-
-static int
-lynx_thread_alive (ptid_t ptid)
-{
-  /* The list of threads is updated at the end of each wait, so it
-     should be up to date.  No need to re-fetch it.  */
-  return (find_thread_ptid (ptid) != NULL);
-}
-
-/* Implement the fetch_registers target_ops method.  */
-
-static void
-lynx_fetch_registers (struct regcache *regcache, int regno)
-{
-  struct lynx_regset_info *regset = lynx_target_regsets;
-  ptid_t inferior_ptid = ptid_of (current_thread);
-
-  lynx_debug ("lynx_fetch_registers (regno = %d)", regno);
-
-  while (regset->size >= 0)
-    {
-      char *buf;
-      int res;
-
-      buf = xmalloc (regset->size);
-      res = lynx_ptrace (regset->get_request, inferior_ptid, (int) buf, 0, 0);
-      if (res < 0)
-        perror ("ptrace");
-      regset->store_function (regcache, buf);
-      free (buf);
-      regset++;
-    }
-}
-
-/* Implement the store_registers target_ops method.  */
-
-static void
-lynx_store_registers (struct regcache *regcache, int regno)
-{
-  struct lynx_regset_info *regset = lynx_target_regsets;
-  ptid_t inferior_ptid = ptid_of (current_thread);
-
-  lynx_debug ("lynx_store_registers (regno = %d)", regno);
-
-  while (regset->size >= 0)
-    {
-      char *buf;
-      int res;
-
-      buf = xmalloc (regset->size);
-      res = lynx_ptrace (regset->get_request, inferior_ptid, (int) buf, 0, 0);
-      if (res == 0)
-        {
-	  /* Then overlay our cached registers on that.  */
-	  regset->fill_function (regcache, buf);
-	  /* Only now do we write the register set.  */
-	  res = lynx_ptrace (regset->set_request, inferior_ptid, (int) buf,
-			     0, 0);
-        }
-      if (res < 0)
-        perror ("ptrace");
-      free (buf);
-      regset++;
-    }
-}
-
-/* Implement the read_memory target_ops method.  */
-
-static int
-lynx_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  /* On LynxOS, memory reads needs to be performed in chunks the size
-     of int types, and they should also be aligned accordingly.  */
-  int buf;
-  const int xfer_size = sizeof (buf);
-  CORE_ADDR addr = memaddr & -(CORE_ADDR) xfer_size;
-  ptid_t inferior_ptid = ptid_of (current_thread);
-
-  while (addr < memaddr + len)
-    {
-      int skip = 0;
-      int truncate = 0;
-
-      errno = 0;
-      if (addr < memaddr)
-        skip = memaddr - addr;
-      if (addr + xfer_size > memaddr + len)
-        truncate = addr + xfer_size - memaddr - len;
-      buf = lynx_ptrace (PTRACE_PEEKTEXT, inferior_ptid, addr, 0, 0);
-      if (errno)
-        return errno;
-      memcpy (myaddr + (addr - memaddr) + skip, (gdb_byte *) &buf + skip,
-              xfer_size - skip - truncate);
-      addr += xfer_size;
-    }
-
-  return 0;
-}
-
-/* Implement the write_memory target_ops method.  */
-
-static int
-lynx_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
-{
-  /* On LynxOS, memory writes needs to be performed in chunks the size
-     of int types, and they should also be aligned accordingly.  */
-  int buf;
-  const int xfer_size = sizeof (buf);
-  CORE_ADDR addr = memaddr & -(CORE_ADDR) xfer_size;
-  ptid_t inferior_ptid = ptid_of (current_thread);
-
-  while (addr < memaddr + len)
-    {
-      int skip = 0;
-      int truncate = 0;
-
-      if (addr < memaddr)
-        skip = memaddr - addr;
-      if (addr + xfer_size > memaddr + len)
-        truncate = addr + xfer_size - memaddr - len;
-      if (skip > 0 || truncate > 0)
-	{
-	  /* We need to read the memory at this address in order to preserve
-	     the data that we are not overwriting.  */
-	  lynx_read_memory (addr, (unsigned char *) &buf, xfer_size);
-	  if (errno)
-	    return errno;
-	}
-      memcpy ((gdb_byte *) &buf + skip, myaddr + (addr - memaddr) + skip,
-              xfer_size - skip - truncate);
-      errno = 0;
-      lynx_ptrace (PTRACE_POKETEXT, inferior_ptid, addr, buf, 0);
-      if (errno)
-        return errno;
-      addr += xfer_size;
-    }
-
-  return 0;
-}
-
-/* Implement the kill_request target_ops method.  */
-
-static void
-lynx_request_interrupt (void)
-{
-  ptid_t inferior_ptid = ptid_of (get_first_thread ());
-
-  kill (lynx_ptid_get_pid (inferior_ptid), SIGINT);
-}
-
-/* The LynxOS target_ops vector.  */
-
-static struct target_ops lynx_target_ops = {
-  lynx_create_inferior,
-  NULL,  /* post_create_inferior */
-  lynx_attach,
-  lynx_kill,
-  lynx_detach,
-  lynx_mourn,
-  lynx_join,
-  lynx_thread_alive,
-  lynx_resume,
-  lynx_wait,
-  lynx_fetch_registers,
-  lynx_store_registers,
-  NULL,  /* prepare_to_access_memory */
-  NULL,  /* done_accessing_memory */
-  lynx_read_memory,
-  lynx_write_memory,
-  NULL,  /* look_up_symbols */
-  lynx_request_interrupt,
-  NULL,  /* read_auxv */
-  NULL,  /* supports_z_point_type */
-  NULL,  /* insert_point */
-  NULL,  /* remove_point */
-  NULL,  /* stopped_by_sw_breakpoint */
-  NULL,  /* supports_stopped_by_sw_breakpoint */
-  NULL,  /* stopped_by_hw_breakpoint */
-  NULL,  /* supports_stopped_by_hw_breakpoint */
-  target_can_do_hardware_single_step,
-  NULL,  /* stopped_by_watchpoint */
-  NULL,  /* stopped_data_address */
-  NULL,  /* read_offsets */
-  NULL,  /* get_tls_address */
-  NULL,  /* hostio_last_error */
-  NULL,  /* qxfer_osdata */
-  NULL,  /* qxfer_siginfo */
-  NULL,  /* supports_non_stop */
-  NULL,  /* async */
-  NULL,  /* start_non_stop */
-  NULL,  /* supports_multi_process */
-  NULL,  /* supports_fork_events */
-  NULL,  /* supports_vfork_events */
-  NULL,  /* supports_exec_events */
-  NULL,  /* handle_new_gdb_connection */
-  NULL,  /* handle_monitor_command */
-};
-
-void
-initialize_low (void)
-{
-  set_target_ops (&lynx_target_ops);
-  the_low_target.arch_setup ();
-}
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-low.h ./gdb/gdbserver/lynx-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/lynx-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,59 +0,0 @@
-/* Copyright (C) 2010-2020 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 GDBSERVER_LYNX_LOW_H
-#define GDBSERVER_LYNX_LOW_H
-
-struct regcache;
-struct target_desc;
-
-/*  Some information relative to a given register set.   */
-
-struct lynx_regset_info
-{
-  /* The ptrace request needed to get/set registers of this set.  */
-  int get_request, set_request;
-  /* The size of the register set.  */
-  int size;
-  /* Fill the buffer BUF from the contents of the given REGCACHE.  */
-  void (*fill_function) (struct regcache *regcache, char *buf);
-  /* Store the register value in BUF in the given REGCACHE.  */
-  void (*store_function) (struct regcache *regcache, const char *buf);
-};
-
-/* A list of regsets for the target being debugged, terminated by an entry
-   where the size is negative.
-
-   This list should be created by the target-specific code.  */
-
-extern struct lynx_regset_info lynx_target_regsets[];
-
-/* The target-specific operations for LynxOS support.  */
-
-struct lynx_target_ops
-{
-  /* Architecture-specific setup.  */
-  void (*arch_setup) (void);
-};
-
-extern struct lynx_target_ops the_low_target;
-
-/* The inferior's target description.  This is a global because the
-   LynxOS ports support neither bi-arch nor multi-process.  */
-extern const struct target_desc *lynx_tdesc;
-
-#endif /* GDBSERVER_LYNX_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-ppc-low.c ./gdb/gdbserver/lynx-ppc-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/lynx-ppc-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/lynx-ppc-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,185 +0,0 @@
-/* Copyright (C) 2009-2020 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 "server.h"
-#include "lynx-low.h"
-#include <limits.h>
-#include <sys/ptrace.h>
-
-/* The following two typedefs are defined in a .h file which is not
-   in the standard include path (/sys/include/family/ppc/ucontext.h),
-   so we just duplicate them here.  */
-
-/* General register context */
-typedef struct usr_econtext_s
-{
-        uint32_t        uec_iregs[32];
-        uint32_t        uec_inum;
-        uint32_t        uec_srr0;
-        uint32_t        uec_srr1;
-        uint32_t        uec_lr;
-        uint32_t        uec_ctr;
-        uint32_t        uec_cr;
-        uint32_t        uec_xer;
-        uint32_t        uec_dar;
-        uint32_t        uec_mq;
-        uint32_t        uec_msr;
-        uint32_t        uec_sregs[16];
-        uint32_t        uec_ss_count;
-        uint32_t        uec_ss_addr1;
-        uint32_t        uec_ss_addr2;
-        uint32_t        uec_ss_code1;
-        uint32_t        uec_ss_code2;
-} usr_econtext_t;
-
-/* Floating point register context */
-typedef struct usr_fcontext_s
-{
-        uint64_t        ufc_freg[32];
-        uint32_t        ufc_fpscr[2];
-} usr_fcontext_t;
-
-/* Index of for various registers inside the regcache.  */
-#define R0_REGNUM    0
-#define F0_REGNUM    32
-#define PC_REGNUM    64
-#define MSR_REGNUM   65
-#define CR_REGNUM    66
-#define LR_REGNUM    67
-#define CTR_REGNUM   68
-#define XER_REGNUM   69
-#define FPSCR_REGNUM 70
-
-/* Defined in auto-generated file powerpc-32.c.  */
-extern void init_registers_powerpc_32 (void);
-extern const struct target_desc *tdesc_powerpc_32;
-
-/* The fill_function for the general-purpose register set.  */
-
-static void
-lynx_ppc_fill_gregset (struct regcache *regcache, char *buf)
-{
-  int i;
-
-  /* r0 - r31 */
-  for (i = 0; i < 32; i++)
-    collect_register (regcache, R0_REGNUM + i,
-                      buf + offsetof (usr_econtext_t, uec_iregs[i]));
-
-  /* The other registers provided in the GP register context.  */
-  collect_register (regcache, PC_REGNUM,
-                    buf + offsetof (usr_econtext_t, uec_srr0));
-  collect_register (regcache, MSR_REGNUM,
-                    buf + offsetof (usr_econtext_t, uec_srr1));
-  collect_register (regcache, CR_REGNUM,
-                    buf + offsetof (usr_econtext_t, uec_cr));
-  collect_register (regcache, LR_REGNUM,
-                    buf + offsetof (usr_econtext_t, uec_lr));
-  collect_register (regcache, CTR_REGNUM,
-                    buf + offsetof (usr_econtext_t, uec_ctr));
-  collect_register (regcache, XER_REGNUM,
-                    buf + offsetof (usr_econtext_t, uec_xer));
-}
-
-/* The store_function for the general-purpose register set.  */
-
-static void
-lynx_ppc_store_gregset (struct regcache *regcache, const char *buf)
-{
-  int i;
-
-  /* r0 - r31 */
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, R0_REGNUM + i,
-                      buf + offsetof (usr_econtext_t, uec_iregs[i]));
-
-  /* The other registers provided in the GP register context.  */
-  supply_register (regcache, PC_REGNUM,
-                   buf + offsetof (usr_econtext_t, uec_srr0));
-  supply_register (regcache, MSR_REGNUM,
-                   buf + offsetof (usr_econtext_t, uec_srr1));
-  supply_register (regcache, CR_REGNUM,
-                   buf + offsetof (usr_econtext_t, uec_cr));
-  supply_register (regcache, LR_REGNUM,
-                   buf + offsetof (usr_econtext_t, uec_lr));
-  supply_register (regcache, CTR_REGNUM,
-                   buf + offsetof (usr_econtext_t, uec_ctr));
-  supply_register (regcache, XER_REGNUM,
-                   buf + offsetof (usr_econtext_t, uec_xer));
-}
-
-/* The fill_function for the floating-point register set.  */
-
-static void
-lynx_ppc_fill_fpregset (struct regcache *regcache, char *buf)
-{
-  int i;
-
-  /* f0 - f31 */
-  for (i = 0; i < 32; i++)
-    collect_register (regcache, F0_REGNUM + i,
-                      buf + offsetof (usr_fcontext_t, ufc_freg[i]));
-
-  /* fpscr */
-  collect_register (regcache, FPSCR_REGNUM,
-                    buf + offsetof (usr_fcontext_t, ufc_fpscr));
-}
-
-/* The store_function for the floating-point register set.  */
-
-static void
-lynx_ppc_store_fpregset (struct regcache *regcache, const char *buf)
-{
-  int i;
-
-  /* f0 - f31 */
-  for (i = 0; i < 32; i++)
-    supply_register (regcache, F0_REGNUM + i,
-                     buf + offsetof (usr_fcontext_t, ufc_freg[i]));
-
-  /* fpscr */
-  supply_register (regcache, FPSCR_REGNUM,
-                   buf + offsetof (usr_fcontext_t, ufc_fpscr));
-}
-
-/* Implements the lynx_target_ops.arch_setup routine.  */
-
-static void
-lynx_ppc_arch_setup (void)
-{
-  init_registers_powerpc_32 ();
-  lynx_tdesc = tdesc_powerpc_32;
-}
-
-/* Description of all the powerpc-lynx register sets.  */
-
-struct lynx_regset_info lynx_target_regsets[] = {
-  /* General Purpose Registers.  */
-  {PTRACE_GETREGS, PTRACE_SETREGS, sizeof(usr_econtext_t),
-   lynx_ppc_fill_gregset, lynx_ppc_store_gregset},
-  /* Floating Point Registers.  */
-  { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof(usr_fcontext_t),
-    lynx_ppc_fill_fpregset, lynx_ppc_store_fpregset },
-  /* End of list marker.  */
-  {0, 0, -1, NULL, NULL }
-};
-
-/* The lynx_target_ops vector for powerpc-lynxos.  */
-
-struct lynx_target_ops the_low_target = {
-  lynx_ppc_arch_setup,
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/Makefile.in ./gdb/gdbserver/Makefile.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/Makefile.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/Makefile.in	1970-01-01 00:00:00.000000000 +0000
@@ -1,708 +0,0 @@
-# Copyright (C) 1989-2020 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/>.
-
-# Please keep lists in this file sorted alphabetically, with one item per line.
-# See gdb/Makefile.in for guidelines on ordering files and directories.
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-host_alias = @host_noncanonical@
-target_alias = @target_noncanonical@
-program_transform_name = @program_transform_name@
-bindir = @bindir@
-libdir = @libdir@
-tooldir = $(libdir)/$(target_alias)
-
-datarootdir = @datarootdir@
-datadir = @datadir@
-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
-infodir = @infodir@
-htmldir = $(prefix)/html
-includedir = @includedir@
-CONFIG_SRC_SUBDIR = @CONFIG_SRC_SUBDIR@
-
-SHELL = @SHELL@
-EXEEXT = @EXEEXT@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-RANLIB = @RANLIB@
-
-CC = @CC@
-CXX = @CXX@
-CXX_DIALECT = @CXX_DIALECT@
-AR = @AR@
-AR_FLAGS = rc
-
-# Dependency tracking information.
-DEPMODE = @CCDEPMODE@
-DEPDIR = @DEPDIR@
-depcomp = $(SHELL) $(srcdir)/../../depcomp
-
-# Directory containing source files.  Don't clean up the spacing,
-# this exact string is matched for by the "configure" script.
-srcdir = @srcdir@
-abs_top_srcdir = @abs_top_srcdir@
-abs_srcdir = @abs_srcdir@
-VPATH = @srcdir@
-
-include $(srcdir)/../silent-rules.mk
-
-# Note that these are overridden by GNU make-specific code below if
-# GNU make is used.  The overrides implement dependency tracking.
-COMPILE.pre = $(CXX) -x c++ $(CXX_DIALECT)
-COMPILE.post = -c -o $@
-COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(INTERNAL_CFLAGS) $(COMPILE.post)
-POSTCOMPILE = @true
-
-# It is also possible that you will need to add -I/usr/include/sys to the
-# CFLAGS section if your system doesn't have fcntl.h in /usr/include (which
-# is where it should be according to Posix).
-
-# Set this up with gcc if you have gnu ld and the loader will print out
-# line numbers for undefinded refs.
-#CC_LD = g++ -static
-CC_LD = $(CXX) $(CXX_DIALECT)
-
-# Where is the "include" directory?  Traditionally ../include or ./include
-INCLUDE_DIR = ${srcdir}/../../include
-INCLUDE_DEP = $$(INCLUDE_DIR)
-
-LIBIBERTY_BUILDDIR = build-libiberty-gdbserver
-LIBIBERTY = $(LIBIBERTY_BUILDDIR)/libiberty.a
-
-# Where is ust?  These will be empty if ust was not available.
-ustlibs = @ustlibs@
-ustinc = @ustinc@
-
-# gnulib
-GNULIB_BUILDDIR = build-gnulib-gdbserver
-LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a
-INCGNU = -I$(srcdir)/../../gnulib/import -I$(GNULIB_BUILDDIR)/import
-
-# Generated headers in the gnulib directory.  These must be listed
-# so that they are generated before other files are compiled.
-GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@
-
-# All the includes used for CFLAGS and for lint.
-# -I. for config files.
-# -I${srcdir} for our headers.
-# -I$(srcdir)/../regformats for regdef.h.
-#
-# We do not include ../target or ../nat in here because headers
-# in those directories should be included with the subdirectory.
-# e.g.: "target/wait.h".
-#
-INCLUDE_CFLAGS = -I. -I${srcdir} \
-	-I$(srcdir)/../regformats -I$(srcdir)/.. -I$(INCLUDE_DIR) \
-	$(INCGNU)
-
-# M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS
-# from the config/ directory.
-GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS}
-#PROFILE_CFLAGS = -pg
-
-WARN_CFLAGS = @WARN_CFLAGS@
-WERROR_CFLAGS = @WERROR_CFLAGS@
-
-WARN_CFLAGS_NO_FORMAT = `echo " $(WARN_CFLAGS) " \
-		   | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"`
-
-# These are specifically reserved for setting from the command line
-# when running make.  I.E.  "make CFLAGS=-Wmissing-prototypes".
-CFLAGS = @CFLAGS@
-CXXFLAGS = @CXXFLAGS@
-CPPFLAGS = @CPPFLAGS@
-
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-
-# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros.
-INTERNAL_CFLAGS_BASE = ${CXXFLAGS} ${GLOBAL_CFLAGS} \
-	${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CPPFLAGS} $(PTHREAD_CFLAGS)
-INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS)
-INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER
-
-# LDFLAGS is specifically reserved for setting from the command line
-# when running make.
-LDFLAGS = @LDFLAGS@
-INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@
-
-# All source files that go into linking GDB remote server.
-
-SFILES = \
-	$(srcdir)/debug.c \
-	$(srcdir)/dll.c \
-	$(srcdir)/gdbreplay.c \
-	$(srcdir)/hostio.c \
-	$(srcdir)/hostio-errno.c \
-	$(srcdir)/i387-fp.c \
-	$(srcdir)/inferiors.c \
-	$(srcdir)/linux-aarch64-low.c \
-	$(srcdir)/linux-arm-low.c \
-	$(srcdir)/linux-bfin-low.c \
-	$(srcdir)/linux-cris-low.c \
-	$(srcdir)/linux-crisv32-low.c \
-	$(srcdir)/linux-ia64-low.c \
-	$(srcdir)/linux-low.c \
-	$(srcdir)/linux-m32r-low.c \
-	$(srcdir)/linux-m68k-low.c \
-	$(srcdir)/linux-mips-low.c \
-	$(srcdir)/linux-nios2-low.c \
-	$(srcdir)/linux-ppc-low.c \
-	$(srcdir)/linux-s390-low.c \
-	$(srcdir)/linux-sh-low.c \
-	$(srcdir)/linux-sparc-low.c \
-	$(srcdir)/linux-tile-low.c \
-	$(srcdir)/linux-x86-low.c \
-	$(srcdir)/linux-xtensa-low.c \
-	$(srcdir)/mem-break.c \
-	$(srcdir)/proc-service.c \
-	$(srcdir)/proc-service.list \
-	$(srcdir)/regcache.c \
-	$(srcdir)/remote-utils.c \
-	$(srcdir)/server.c \
-	$(srcdir)/symbol.c \
-	$(srcdir)/target.c \
-	$(srcdir)/thread-db.c \
-	$(srcdir)/utils.c \
-	$(srcdir)/win32-arm-low.c \
-	$(srcdir)/win32-i386-low.c \
-	$(srcdir)/win32-low.c \
-	$(srcdir)/wincecompat.c \
-	$(srcdir)/x86-low.c \
-	$(srcdir)/arch/arm.c \
-	$(srcdir)/arch/arm-get-next-pcs.c \
-	$(srcdir)/arch/arm-linux.c \
-	$(srcdir)/arch/ppc-linux-common.c \
-	$(srcdir)/../alloc.c \
-	$(srcdir)/gdbsupport/btrace-common.c \
-	$(srcdir)/gdbsupport/buffer.c \
-	$(srcdir)/gdbsupport/cleanups.c \
-	$(srcdir)/gdbsupport/common-debug.c \
-	$(srcdir)/gdbsupport/common-exceptions.c \
-	$(srcdir)/gdbsupport/common-inferior.c \
-	$(srcdir)/gdbsupport/common-regcache.c \
-	$(srcdir)/gdbsupport/common-utils.c \
-	$(srcdir)/gdbsupport/errors.c \
-	$(srcdir)/gdbsupport/environ.c \
-	$(srcdir)/gdbsupport/fileio.c \
-	$(srcdir)/gdbsupport/filestuff.c \
-	$(srcdir)/gdbsupport/job-control.c \
-	$(srcdir)/gdbsupport/gdb-dlfcn.c \
-	$(srcdir)/gdbsupport/gdb_tilde_expand.c \
-	$(srcdir)/gdbsupport/gdb_vecs.c \
-	$(srcdir)/gdbsupport/netstuff.c \
-	$(srcdir)/gdbsupport/new-op.c \
-	$(srcdir)/gdbsupport/pathstuff.c \
-	$(srcdir)/gdbsupport/print-utils.c \
-	$(srcdir)/gdbsupport/ptid.c \
-	$(srcdir)/gdbsupport/rsp-low.c \
-	$(srcdir)/gdbsupport/safe-strerror.c \
-	$(srcdir)/gdbsupport/tdesc.c \
-	$(srcdir)/gdbsupport/xml-utils.c \
-	$(srcdir)/nat/aarch64-sve-linux-ptrace.c \
-	$(srcdir)/nat/linux-btrace.c \
-	$(srcdir)/nat/linux-namespaces.c \
-	$(srcdir)/nat/linux-osdata.c \
-	$(srcdir)/nat/linux-personality.c \
-	$(srcdir)/nat/mips-linux-watch.c \
-	$(srcdir)/nat/ppc-linux.c \
-	$(srcdir)/nat/fork-inferior.c \
-	$(srcdir)/target/waitstatus.c
-
-DEPFILES = @GDBSERVER_DEPFILES@
-
-LIBOBJS = @LIBOBJS@
-
-SOURCES = $(SFILES)
-TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
-
-OBS = \
-	alloc.o \
-	ax.o \
-	gdbsupport/agent.o \
-	gdbsupport/btrace-common.o \
-	gdbsupport/buffer.o \
-	gdbsupport/cleanups.o \
-	gdbsupport/common-debug.o \
-	gdbsupport/common-exceptions.o \
-	gdbsupport/common-inferior.o \
-	gdbsupport/job-control.o \
-	gdbsupport/common-regcache.o \
-	gdbsupport/common-utils.o \
-	gdbsupport/errors.o \
-	gdbsupport/environ.o \
-	gdbsupport/fileio.o \
-	gdbsupport/filestuff.o \
-	gdbsupport/format.o \
-	gdbsupport/gdb-dlfcn.o \
-	gdbsupport/gdb_tilde_expand.o \
-	gdbsupport/gdb_vecs.o \
-	gdbsupport/netstuff.o \
-	gdbsupport/new-op.o \
-	gdbsupport/pathstuff.o \
-	gdbsupport/print-utils.o \
-	gdbsupport/ptid.o \
-	gdbsupport/rsp-low.o \
-	gdbsupport/safe-strerror.o \
-	gdbsupport/signals.o \
-	gdbsupport/signals-state-save-restore.o \
-	gdbsupport/tdesc.o \
-	gdbsupport/xml-utils.o \
-	debug.o \
-	dll.o \
-	event-loop.o \
-	hostio.o \
-	inferiors.o \
-	mem-break.o \
-	notif.o \
-	regcache.o \
-	remote-utils.o \
-	server.o \
-	symbol.o \
-	target.o \
-	tdesc.o \
-	tracepoint.o \
-	utils.o \
-	version.o \
-	waitstatus.o \
-	$(DEPFILES) \
-	$(LIBOBJS) \
-	$(XML_BUILTIN)
-
-GDBREPLAY_OBS = \
-	gdbsupport/cleanups.o \
-	gdbsupport/common-exceptions.o \
-	gdbsupport/common-utils.o \
-	gdbsupport/rsp-low.o \
-	gdbsupport/errors.o \
-	gdbsupport/netstuff.o \
-	gdbsupport/print-utils.o \
-	gdbsupport/safe-strerror.o \
-	gdbreplay.o \
-	utils.o \
-	version.o
-
-GDBSERVER_LIBS = @GDBSERVER_LIBS@ $(PTHREAD_LIBS)
-XM_CLIBS = @LIBS@
-CDEPS = $(srcdir)/proc-service.list
-
-# XML files to compile in to gdbserver, if any.
-XML_DIR = $(srcdir)/../features
-XML_FILES = @srv_xmlfiles@
-XML_BUILTIN = @srv_xmlbuiltin@
-
-IPA_DEPFILES = @IPA_DEPFILES@
-extra_libraries = @extra_libraries@
-
-SUBDIRS = $(GNULIB_BUILDDIR) $(LIBIBERTY_BUILDDIR)
-CLEANDIRS = $(SUBDIRS)
-
-# List of subdirectories in the build tree that must exist.
-# This is used to force build failures in existing trees when
-# a new directory is added.
-# The format here is for the `case' shell command.
-REQUIRED_SUBDIRS = $(GNULIB_BUILDDIR) | $(LIBIBERTY_BUILDDIR)
-
-FLAGS_TO_PASS = \
-	"prefix=$(prefix)" \
-	"exec_prefix=$(exec_prefix)" \
-	"infodir=$(infodir)" \
-	"datarootdir=$(datarootdir)" \
-	"docdir=$(docdir)" \
-	"htmldir=$(htmldir)" \
-	"pdfdir=$(pdfdir)" \
-	"libdir=$(libdir)" \
-	"mandir=$(mandir)" \
-	"datadir=$(datadir)" \
-	"includedir=$(includedir)" \
-	"against=$(against)" \
-	"DESTDIR=$(DESTDIR)" \
-	"AR=$(AR)" \
-	"AR_FLAGS=$(AR_FLAGS)" \
-	"CC=$(CC)" \
-	"CFLAGS=$(CFLAGS)" \
-	"CXX=$(CXX)" \
-	"CXXFLAGS=$(CXXFLAGS)" \
-	"DLLTOOL=$(DLLTOOL)" \
-	"LDFLAGS=$(LDFLAGS)" \
-	"RANLIB=$(RANLIB)" \
-	"MAKEINFO=$(MAKEINFO)" \
-	"MAKEHTML=$(MAKEHTML)" \
-	"MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \
-	"INSTALL=$(INSTALL)" \
-	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
-	"INSTALL_DATA=$(INSTALL_DATA)" \
-	"RUNTEST=$(RUNTEST)" \
-	"RUNTESTFLAGS=$(RUNTESTFLAGS)"
-
-# All generated files which can be included by another file.
-generated_files = config.h $(GNULIB_H)
-
-all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT) $(extra_libraries)
-	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
-
-# Traditionally "install" depends on "all".  But it may be useful
-# not to; for example, if the user has made some trivial change to a
-# source file and doesn't care about rebuilding or just wants to save the
-# time it takes for make to check that all is up to date.
-# install-only is intended to address that need.
-install: all
-	@$(MAKE) $(FLAGS_TO_PASS) install-only
-
-install-only:
-	n=`echo gdbserver | sed '$(program_transform_name)'`; \
-	if [ x$$n = x ]; then n=gdbserver; else true; fi; \
-	if [ x"$(IPA_DEPFILES)" != x ]; then \
-		$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(libdir); \
-		$(INSTALL_PROGRAM) $(IPA_LIB) $(DESTDIR)$(libdir)/$(IPA_LIB); \
-	fi; \
-	$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir); \
-	$(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT)
-	# Note that we run install and not install-only, as the latter
-	# is not part of GNU standards and in particular not provided
-	# in libiberty.
-	@$(MAKE) $(FLAGS_TO_PASS) DO=install "DODIRS=$(SUBDIRS)" subdir_do
-
-uninstall: force
-	n=`echo gdbserver | sed '$(program_transform_name)'`; \
-	if [ x$$n = x ]; then n=gdbserver; else true; fi; \
-	rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(man1dir)/$$n.1
-	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
-
-installcheck:
-check:
-info dvi pdf:
-install-info:
-install-pdf:
-html:
-install-html:
-clean-info: force
-	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
-
-gdbserver$(EXEEXT): $(sort $(OBS)) ${CDEPS} $(LIBGNU) $(LIBIBERTY)
-	$(SILENCE) rm -f gdbserver$(EXEEXT)
-	$(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
-		-o gdbserver$(EXEEXT) $(OBS) $(LIBGNU) $(LIBIBERTY) \
-		$(GDBSERVER_LIBS) $(XM_CLIBS)
-
-$(LIBGNU) $(LIBIBERTY) $(GNULIB_H): all-lib
-all-lib: $(GNULIB_BUILDDIR)/Makefile $(LIBIBERTY_BUILDDIR)/Makefile
-	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS="$(SUBDIRS)" subdir_do
-.PHONY: all-lib
-
-gdbreplay$(EXEEXT): $(sort $(GDBREPLAY_OBS)) $(LIBGNU) $(LIBIBERTY)
-	$(SILENCE) rm -f gdbreplay$(EXEEXT)
-	$(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
-		-o gdbreplay$(EXEEXT) $(GDBREPLAY_OBS) $(XM_CLIBS) $(LIBGNU) \
-		$(LIBIBERTY)
-
-IPA_OBJS = \
-	alloc-ipa.o \
-	ax-ipa.o \
-	gdbsupport/common-utils-ipa.o \
-	gdbsupport/errors-ipa.o \
-	gdbsupport/format-ipa.o \
-	gdbsupport/print-utils-ipa.o \
-	gdbsupport/rsp-low-ipa.o \
-	gdbsupport/safe-strerror-ipa.o \
-	gdbsupport/tdesc-ipa.o \
-	regcache-ipa.o \
-	remote-utils-ipa.o \
-	tdesc-ipa.o \
-	tracepoint-ipa.o \
-	utils-ipa.o \
-	${IPA_DEPFILES}
-
-IPA_LIB = libinproctrace.so
-
-$(IPA_LIB): $(sort $(IPA_OBJS)) ${CDEPS}
-	$(SILENCE) rm -f $(IPA_LIB)
-	$(ECHO_CXXLD) $(CC_LD) -shared -fPIC -Wl,--soname=$(IPA_LIB) \
-		-Wl,--no-undefined $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
-		-o $(IPA_LIB) ${IPA_OBJS} -ldl -pthread
-
-# Put the proper machine-specific files first, so M-. on a machine
-# specific routine gets the one for the correct machine.
-# The xyzzy stuff below deals with empty DEPFILES
-TAGS:	${TAGFILES}
-	etags `find ${srcdir}/../config -name $(DEPRECATED_TM_FILE) -print` \
-	  `find ${srcdir}/../config -name ${XM_FILE} -print` \
-	  `find ${srcdir}/../config -name ${NAT_FILE} -print` \
-	  `for i in yzzy ${DEPFILES}; do \
-	     if [ x$$i != xyzzy ]; then \
-	       echo ${srcdir}/$$i | sed -e 's/\.o$$/\.c/' ; \
-	     fi; \
-	   done` \
-	  ${TAGFILES}
-tags: TAGS
-
-clean:
-	rm -f *.o ${ADD_FILES} *~
-	rm -f gdbserver$(EXEEXT) gdbreplay$(EXEEXT) core make.log
-	rm -f $(IPA_LIB)
-	rm -f *-generated.c
-	rm -f stamp-xml
-	rm -f $(DEPDIR)/*.Po
-	for i in $(CONFIG_SRC_SUBDIR); do \
-		rm -f $$i/*.o;	\
-		rm -f $$i/$(DEPDIR)/*; \
-	done
-	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
-
-maintainer-clean realclean distclean: clean
-	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
-	rm -rf $(GNULIB_BUILDDIR)
-	rm -f Makefile config.status config.h stamp-h config.log
-	rm -f Makefile
-	for i in $(CONFIG_SRC_SUBDIR); do \
-		rmdir $$i/$(DEPDIR); \
-	done
-
-subdir_do: force
-	@for i in $(DODIRS); do \
-		case $$i in \
-		$(REQUIRED_SUBDIRS)) \
-			if [ ! -f ./$$i/Makefile ] ; then \
-				echo "Missing $$i/Makefile" >&2 ; \
-				exit 1 ; \
-			fi ;; \
-		esac ; \
-		if [ -f ./$$i/Makefile ] ; then \
-			if (cd ./$$i; \
-				$(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
-			else exit 1 ; fi ; \
-		else true ; fi ; \
-	done
-
-config.h: stamp-h ; @true
-stamp-h: config.in config.status
-	$(SHELL) ./config.status config.h
-
-Makefile: Makefile.in config.status
-	$(SHELL) ./config.status $@
-
-$(GNULIB_BUILDDIR)/Makefile: $(srcdir)/../../gnulib/Makefile.in config.status
-	  @cd $(GNULIB_BUILDDIR); CONFIG_FILES="Makefile" \
-	  CONFIG_COMMANDS="depfiles" \
-	  CONFIG_HEADERS= \
-	  CONFIG_LINKS= \
-	  $(SHELL) config.status
-
-config.status: configure configure.srv $(srcdir)/../../bfd/development.sh
-	$(SHELL) ./config.status --recheck
-
-# automatic rebuilding in automake-generated Makefiles requires
-# this rule in the toplevel Makefile, which, with GNU make, causes
-# the desired updates through the implicit regeneration of the Makefile
-# and all of its prerequisites.
-am--refresh:
-	@:
-
-force:
-
-version-generated.c: Makefile $(srcdir)/../version.in $(srcdir)/../../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh
-	$(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir)/.. \
-		$(host_alias) $(target_alias) $@
-
-xml-builtin-generated.c: stamp-xml; @true
-stamp-xml: $(XML_DIR)/feature_to_c.sh Makefile $(XML_FILES)
-	$(SILENCE) rm -f xml-builtin.tmp
-	$(ECHO_GEN_XML_BUILTIN_GENERATED) $(SHELL) $(XML_DIR)/feature_to_c.sh \
-		xml-builtin.tmp $(XML_FILES)
-	$(SILENCE) $(SHELL) $(srcdir)/../../move-if-change xml-builtin.tmp xml-builtin-generated.c
-	$(SILENCE) echo stamp > stamp-xml
-
-.PRECIOUS: xml-builtin.c
-
-# GNU Make has an annoying habit of putting *all* the Makefile variables
-# into the environment, unless you include this target as a circumvention.
-# Rumor is that this will be fixed (and this target can be removed)
-# in GNU Make 4.0.
-.NOEXPORT:
-
-# GNU Make 3.63 has a different problem: it keeps tacking command line
-# overrides onto the definition of $(MAKE).  This variable setting
-# will remove them.
-MAKEOVERRIDES =
-
-regdat_sh = $(srcdir)/../regformats/regdat.sh
-
-UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION
-
-# Undo gnulib replacements for the IPA shared library build.
-# The gnulib headers are still needed, but gnulib is not linked
-# into the IPA lib so replacement apis don't work.
-UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r
-
-# Note, we only build the IPA if -fvisibility=hidden is supported in
-# the first place.
-IPAGENT_CFLAGS = $(INTERNAL_CFLAGS) $(UST_CFLAGS) \
-	$(UNDO_GNULIB_CFLAGS) \
-	-fPIC -DIN_PROCESS_AGENT \
-	-fvisibility=hidden
-
-IPAGENT_COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(IPAGENT_CFLAGS) $(COMPILE.post)
-
-# Rules for special cases.
-
-ax-ipa.o: ax.c
-	$(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
-	$(POSTCOMPILE)
-
-ax.o: ax.c
-	$(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
-	$(POSTCOMPILE)
-
-alloc-ipa.o: ../alloc.c
-	$(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
-	$(POSTCOMPILE)
-
-# Rules for objects that go in the in-process agent.
-
-arch/%-ipa.o: ../arch/%.c
-	$(IPAGENT_COMPILE) $<
-	$(POSTCOMPILE)
-
-gdbsupport/%-ipa.o: ../gdbsupport/%.c
-	$(IPAGENT_COMPILE) $<
-	$(POSTCOMPILE)
-
-%-ipa.o: %-generated.c
-	$(IPAGENT_COMPILE) $<
-	$(POSTCOMPILE)
-
-%-ipa.o: %.c
-	$(IPAGENT_COMPILE) $<
-	$(POSTCOMPILE)
-
-# Note: Between two matching pattern rules, GNU Make 3.81 chooses the first one.
-# Therefore, this one needs to be before "%.o: %.c" for it to be considered for
-# files such as linux-amd64-ipa.o generated from linux-amd64-ipa.c.
-#
-# Later versions of GNU Make choose the rule with the shortest stem, so it would
-# work in any order.
-
-%-ipa.o: %-ipa.c
-	$(IPAGENT_COMPILE) $<
-	$(POSTCOMPILE)
-
-# Rules for objects that go in the gdbserver binary.
-
-arch/%.o: ../arch/%.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-gdbsupport/%.o: ../gdbsupport/%.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-%.o: %-generated.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-%.o: %.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-%.o: ../nat/%.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-%.o: ../target/%.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-%.o: ../%.c
-	$(COMPILE) $<
-	$(POSTCOMPILE)
-
-# Rules for register format descriptions.  Suffix destination files with
-# -generated to identify and clean them easily.
-
-%-generated.c: ../regformats/%.dat | $(regdat_sh)
-	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
-
-%-generated.c: ../regformats/arm/%.dat | $(regdat_sh)
-	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
-
-%-generated.c: ../regformats/i386/%.dat | $(regdat_sh)
-	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
-
-%-generated.c: ../regformats/rs6000/%.dat | $(regdat_sh)
-	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
-
-#
-# Dependency tracking.
-#
-
-ifeq ($(DEPMODE),depmode=gcc3)
-# Note that we put the dependencies into a .Tpo file, then move them
-# into place if the compile succeeds.  We need this because gcc does
-# not atomically write the dependency output file.
-override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
-	-MF $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo
-override POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo \
-	$(@D)/$(DEPDIR)/$(basename $(@F)).Po
-else
-override COMPILE.pre = source='$<' object='$@' libtool=no \
-	DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) \
-	$(CXX) -x c++ $(CXX_DIALECT)
-# depcomp handles atomicity for us, so we don't need a postcompile
-# step.
-override POSTCOMPILE =
-endif
-
-# A list of all the objects we might care about in this build, for
-# dependency tracking.
-all_object_files = $(OBS) $(GDBREPLAY_OBS) $(IPA_OBJS)
-
-# Ensure that generated files are created early.  Use order-only
-# dependencies if available.  They require GNU make 3.80 or newer,
-# and the .VARIABLES variable was introduced at the same time.
-ifdef .VARIABLES
-$(all_object_files): | $(generated_files)
-else
-$(all_object_files) : $(generated_files)
-endif
-
-# All the .deps files to include.
-all_deps_files = $(foreach dep,$(patsubst %.o,%.Po,$(all_object_files)),\
-		   $(dir $(dep))/$(DEPDIR)/$(notdir $(dep)))
-
-# Dependencies.
--include $(all_deps_files)
-
-# Disable implicit make rules.
-include $(srcdir)/../disable-implicit-rules.mk
-
-# Do not delete intermediate files (e.g. *-generated.c).
-.SECONDARY:
-
-# This is the end of "Makefile.in".
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/mem-break.c ./gdb/gdbserver/mem-break.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/mem-break.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/mem-break.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,2237 +0,0 @@
-/* Memory breakpoint operations for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 "server.h"
-#include "regcache.h"
-#include "ax.h"
-
-#define MAX_BREAKPOINT_LEN 8
-
-/* Helper macro used in loops that append multiple items to a singly-linked
-   list instead of inserting items at the head of the list, as, say, in the
-   breakpoint lists.  LISTPP is a pointer to the pointer that is the head of
-   the new list.  ITEMP is a pointer to the item to be added to the list.
-   TAILP must be defined to be the same type as ITEMP, and initialized to
-   NULL.  */
-
-#define APPEND_TO_LIST(listpp, itemp, tailp) \
-	  do \
-	    { \
-	      if ((tailp) == NULL) \
-		*(listpp) = (itemp); \
-	      else \
-		(tailp)->next = (itemp); \
-	      (tailp) = (itemp); \
-	    } \
-	  while (0)
-
-/* GDB will never try to install multiple breakpoints at the same
-   address.  However, we can see GDB requesting to insert a breakpoint
-   at an address is had already inserted one previously in a few
-   situations.
-
-   - The RSP documentation on Z packets says that to avoid potential
-   problems with duplicate packets, the operations should be
-   implemented in an idempotent way.
-
-   - A breakpoint is set at ADDR, an address in a shared library.
-   Then the shared library is unloaded.  And then another, unrelated,
-   breakpoint at ADDR is set.  There is not breakpoint removal request
-   between the first and the second breakpoint.
-
-   - When GDB wants to update the target-side breakpoint conditions or
-   commands, it re-inserts the breakpoint, with updated
-   conditions/commands associated.
-
-   Also, we need to keep track of internal breakpoints too, so we do
-   need to be able to install multiple breakpoints at the same address
-   transparently.
-
-   We keep track of two different, and closely related structures.  A
-   raw breakpoint, which manages the low level, close to the metal
-   aspect of a breakpoint.  It holds the breakpoint address, and for
-   software breakpoints, a buffer holding a copy of the instructions
-   that would be in memory had not been a breakpoint there (we call
-   that the shadow memory of the breakpoint).  We occasionally need to
-   temporarilly uninsert a breakpoint without the client knowing about
-   it (e.g., to step over an internal breakpoint), so we keep an
-   `inserted' state associated with this low level breakpoint
-   structure.  There can only be one such object for a given address.
-   Then, we have (a bit higher level) breakpoints.  This structure
-   holds a callback to be called whenever a breakpoint is hit, a
-   high-level type, and a link to a low level raw breakpoint.  There
-   can be many high-level breakpoints at the same address, and all of
-   them will point to the same raw breakpoint, which is reference
-   counted.  */
-
-/* The low level, physical, raw breakpoint.  */
-struct raw_breakpoint
-{
-  struct raw_breakpoint *next;
-
-  /* The low level type of the breakpoint (software breakpoint,
-     watchpoint, etc.)  */
-  enum raw_bkpt_type raw_type;
-
-  /* A reference count.  Each high level breakpoint referencing this
-     raw breakpoint accounts for one reference.  */
-  int refcount;
-
-  /* The breakpoint's insertion address.  There can only be one raw
-     breakpoint for a given PC.  */
-  CORE_ADDR pc;
-
-  /* The breakpoint's kind.  This is target specific.  Most
-     architectures only use one specific instruction for breakpoints, while
-     others may use more than one.  E.g., on ARM, we need to use different
-     breakpoint instructions on Thumb, Thumb-2, and ARM code.  Likewise for
-     hardware breakpoints -- some architectures (including ARM) need to
-     setup debug registers differently depending on mode.  */
-  int kind;
-
-  /* The breakpoint's shadow memory.  */
-  unsigned char old_data[MAX_BREAKPOINT_LEN];
-
-  /* Positive if this breakpoint is currently inserted in the
-     inferior.  Negative if it was, but we've detected that it's now
-     gone.  Zero if not inserted.  */
-  int inserted;
-};
-
-/* The type of a breakpoint.  */
-enum bkpt_type
-  {
-    /* A GDB breakpoint, requested with a Z0 packet.  */
-    gdb_breakpoint_Z0,
-
-    /* A GDB hardware breakpoint, requested with a Z1 packet.  */
-    gdb_breakpoint_Z1,
-
-    /* A GDB write watchpoint, requested with a Z2 packet.  */
-    gdb_breakpoint_Z2,
-
-    /* A GDB read watchpoint, requested with a Z3 packet.  */
-    gdb_breakpoint_Z3,
-
-    /* A GDB access watchpoint, requested with a Z4 packet.  */
-    gdb_breakpoint_Z4,
-
-    /* A software single-step breakpoint.  */
-    single_step_breakpoint,
-
-    /* Any other breakpoint type that doesn't require specific
-       treatment goes here.  E.g., an event breakpoint.  */
-    other_breakpoint,
-  };
-
-struct point_cond_list
-{
-  /* Pointer to the agent expression that is the breakpoint's
-     conditional.  */
-  struct agent_expr *cond;
-
-  /* Pointer to the next condition.  */
-  struct point_cond_list *next;
-};
-
-struct point_command_list
-{
-  /* Pointer to the agent expression that is the breakpoint's
-     commands.  */
-  struct agent_expr *cmd;
-
-  /* Flag that is true if this command should run even while GDB is
-     disconnected.  */
-  int persistence;
-
-  /* Pointer to the next command.  */
-  struct point_command_list *next;
-};
-
-/* A high level (in gdbserver's perspective) breakpoint.  */
-struct breakpoint
-{
-  struct breakpoint *next;
-
-  /* The breakpoint's type.  */
-  enum bkpt_type type;
-
-  /* Link to this breakpoint's raw breakpoint.  This is always
-     non-NULL.  */
-  struct raw_breakpoint *raw;
-};
-
-/* Breakpoint requested by GDB.  */
-
-struct gdb_breakpoint
-{
-  struct breakpoint base;
-
-  /* Pointer to the condition list that should be evaluated on
-     the target or NULL if the breakpoint is unconditional or
-     if GDB doesn't want us to evaluate the conditionals on the
-     target's side.  */
-  struct point_cond_list *cond_list;
-
-  /* Point to the list of commands to run when this is hit.  */
-  struct point_command_list *command_list;
-};
-
-/* Breakpoint used by GDBserver.  */
-
-struct other_breakpoint
-{
-  struct breakpoint base;
-
-  /* Function to call when we hit this breakpoint.  If it returns 1,
-     the breakpoint shall be deleted; 0 or if this callback is NULL,
-     it will be left inserted.  */
-  int (*handler) (CORE_ADDR);
-};
-
-/* Breakpoint for single step.  */
-
-struct single_step_breakpoint
-{
-  struct breakpoint base;
-
-  /* Thread the reinsert breakpoint belongs to.  */
-  ptid_t ptid;
-};
-
-/* Return the breakpoint size from its kind.  */
-
-static int
-bp_size (struct raw_breakpoint *bp)
-{
-  int size = 0;
-
-  the_target->sw_breakpoint_from_kind (bp->kind, &size);
-  return size;
-}
-
-/* Return the breakpoint opcode from its kind.  */
-
-static const gdb_byte *
-bp_opcode (struct raw_breakpoint *bp)
-{
-  int size = 0;
-
-  return the_target->sw_breakpoint_from_kind (bp->kind, &size);
-}
-
-/* See mem-break.h.  */
-
-enum target_hw_bp_type
-raw_bkpt_type_to_target_hw_bp_type (enum raw_bkpt_type raw_type)
-{
-  switch (raw_type)
-    {
-    case raw_bkpt_type_hw:
-      return hw_execute;
-    case raw_bkpt_type_write_wp:
-      return hw_write;
-    case raw_bkpt_type_read_wp:
-      return hw_read;
-    case raw_bkpt_type_access_wp:
-      return hw_access;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      "bad raw breakpoint type %d", (int) raw_type);
-    }
-}
-
-/* See mem-break.h.  */
-
-static enum bkpt_type
-Z_packet_to_bkpt_type (char z_type)
-{
-  gdb_assert ('0' <= z_type && z_type <= '4');
-
-  return (enum bkpt_type) (gdb_breakpoint_Z0 + (z_type - '0'));
-}
-
-/* See mem-break.h.  */
-
-enum raw_bkpt_type
-Z_packet_to_raw_bkpt_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-      return raw_bkpt_type_sw;
-    case Z_PACKET_HW_BP:
-      return raw_bkpt_type_hw;
-    case Z_PACKET_WRITE_WP:
-      return raw_bkpt_type_write_wp;
-    case Z_PACKET_READ_WP:
-      return raw_bkpt_type_read_wp;
-    case Z_PACKET_ACCESS_WP:
-      return raw_bkpt_type_access_wp;
-    default:
-      gdb_assert_not_reached ("unhandled Z packet type.");
-    }
-}
-
-/* Return true if breakpoint TYPE is a GDB breakpoint.  */
-
-static int
-is_gdb_breakpoint (enum bkpt_type type)
-{
-  return (type == gdb_breakpoint_Z0
-	  || type == gdb_breakpoint_Z1
-	  || type == gdb_breakpoint_Z2
-	  || type == gdb_breakpoint_Z3
-	  || type == gdb_breakpoint_Z4);
-}
-
-bool
-any_persistent_commands (process_info *proc)
-{
-  struct breakpoint *bp;
-  struct point_command_list *cl;
-
-  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
-    {
-      if (is_gdb_breakpoint (bp->type))
-	{
-	  struct gdb_breakpoint *gdb_bp = (struct gdb_breakpoint *) bp;
-
-	  for (cl = gdb_bp->command_list; cl != NULL; cl = cl->next)
-	    if (cl->persistence)
-	      return true;
-	}
-    }
-
-  return false;
-}
-
-/* Find low-level breakpoint of type TYPE at address ADDR that is not
-   insert-disabled.  Returns NULL if not found.  */
-
-static struct raw_breakpoint *
-find_enabled_raw_code_breakpoint_at (CORE_ADDR addr, enum raw_bkpt_type type)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if (bp->pc == addr
-	&& bp->raw_type == type
-	&& bp->inserted >= 0)
-      return bp;
-
-  return NULL;
-}
-
-/* Find low-level breakpoint of type TYPE at address ADDR.  Returns
-   NULL if not found.  */
-
-static struct raw_breakpoint *
-find_raw_breakpoint_at (CORE_ADDR addr, enum raw_bkpt_type type, int kind)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if (bp->pc == addr && bp->raw_type == type && bp->kind == kind)
-      return bp;
-
-  return NULL;
-}
-
-/* See mem-break.h.  */
-
-int
-insert_memory_breakpoint (struct raw_breakpoint *bp)
-{
-  unsigned char buf[MAX_BREAKPOINT_LEN];
-  int err;
-
-  /* Note that there can be fast tracepoint jumps installed in the
-     same memory range, so to get at the original memory, we need to
-     use read_inferior_memory, which masks those out.  */
-  err = read_inferior_memory (bp->pc, buf, bp_size (bp));
-  if (err != 0)
-    {
-      if (debug_threads)
-	debug_printf ("Failed to read shadow memory of"
-		      " breakpoint at 0x%s (%s).\n",
-		      paddress (bp->pc), safe_strerror (err));
-    }
-  else
-    {
-      memcpy (bp->old_data, buf, bp_size (bp));
-
-      err = (*the_target->write_memory) (bp->pc, bp_opcode (bp),
-					 bp_size (bp));
-      if (err != 0)
-	{
-	  if (debug_threads)
-	    debug_printf ("Failed to insert breakpoint at 0x%s (%s).\n",
-			  paddress (bp->pc), safe_strerror (err));
-	}
-    }
-  return err != 0 ? -1 : 0;
-}
-
-/* See mem-break.h  */
-
-int
-remove_memory_breakpoint (struct raw_breakpoint *bp)
-{
-  unsigned char buf[MAX_BREAKPOINT_LEN];
-  int err;
-
-  /* Since there can be trap breakpoints inserted in the same address
-     range, we use `target_write_memory', which takes care of
-     layering breakpoints on top of fast tracepoints, and on top of
-     the buffer we pass it.  This works because the caller has already
-     either unlinked the breakpoint or marked it uninserted.  Also
-     note that we need to pass the current shadow contents, because
-     target_write_memory updates any shadow memory with what we pass
-     here, and we want that to be a nop.  */
-  memcpy (buf, bp->old_data, bp_size (bp));
-  err = target_write_memory (bp->pc, buf, bp_size (bp));
-  if (err != 0)
-    {
-      if (debug_threads)
-	debug_printf ("Failed to uninsert raw breakpoint "
-		      "at 0x%s (%s) while deleting it.\n",
-		      paddress (bp->pc), safe_strerror (err));
-    }
-  return err != 0 ? -1 : 0;
-}
-
-/* Set a RAW breakpoint of type TYPE and kind KIND at WHERE.  On
-   success, a pointer to the new breakpoint is returned.  On failure,
-   returns NULL and writes the error code to *ERR.  */
-
-static struct raw_breakpoint *
-set_raw_breakpoint_at (enum raw_bkpt_type type, CORE_ADDR where, int kind,
-		       int *err)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  if (type == raw_bkpt_type_sw || type == raw_bkpt_type_hw)
-    {
-      bp = find_enabled_raw_code_breakpoint_at (where, type);
-      if (bp != NULL && bp->kind != kind)
-	{
-	  /* A different kind than previously seen.  The previous
-	     breakpoint must be gone then.  */
-	  if (debug_threads)
-	    debug_printf ("Inconsistent breakpoint kind?  Was %d, now %d.\n",
-			  bp->kind, kind);
-	  bp->inserted = -1;
-	  bp = NULL;
-	}
-    }
-  else
-    bp = find_raw_breakpoint_at (where, type, kind);
-
-  gdb::unique_xmalloc_ptr<struct raw_breakpoint> bp_holder;
-  if (bp == NULL)
-    {
-      bp_holder.reset (XCNEW (struct raw_breakpoint));
-      bp = bp_holder.get ();
-      bp->pc = where;
-      bp->kind = kind;
-      bp->raw_type = type;
-    }
-
-  if (!bp->inserted)
-    {
-      *err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp);
-      if (*err != 0)
-	{
-	  if (debug_threads)
-	    debug_printf ("Failed to insert breakpoint at 0x%s (%d).\n",
-			  paddress (where), *err);
-
-	  return NULL;
-	}
-
-      bp->inserted = 1;
-    }
-
-  /* If the breakpoint was allocated above, we know we want to keep it
-     now.  */
-  bp_holder.release ();
-
-  /* Link the breakpoint in, if this is the first reference.  */
-  if (++bp->refcount == 1)
-    {
-      bp->next = proc->raw_breakpoints;
-      proc->raw_breakpoints = bp;
-    }
-  return bp;
-}
-
-/* Notice that breakpoint traps are always installed on top of fast
-   tracepoint jumps.  This is even if the fast tracepoint is installed
-   at a later time compared to when the breakpoint was installed.
-   This means that a stopping breakpoint or tracepoint has higher
-   "priority".  In turn, this allows having fast and slow tracepoints
-   (and breakpoints) at the same address behave correctly.  */
-
-
-/* A fast tracepoint jump.  */
-
-struct fast_tracepoint_jump
-{
-  struct fast_tracepoint_jump *next;
-
-  /* A reference count.  GDB can install more than one fast tracepoint
-     at the same address (each with its own action list, for
-     example).  */
-  int refcount;
-
-  /* The fast tracepoint's insertion address.  There can only be one
-     of these for a given PC.  */
-  CORE_ADDR pc;
-
-  /* Non-zero if this fast tracepoint jump is currently inserted in
-     the inferior.  */
-  int inserted;
-
-  /* The length of the jump instruction.  */
-  int length;
-
-  /* A poor-man's flexible array member, holding both the jump
-     instruction to insert, and a copy of the instruction that would
-     be in memory had not been a jump there (the shadow memory of the
-     tracepoint jump).  */
-  unsigned char insn_and_shadow[0];
-};
-
-/* Fast tracepoint FP's jump instruction to insert.  */
-#define fast_tracepoint_jump_insn(fp) \
-  ((fp)->insn_and_shadow + 0)
-
-/* The shadow memory of fast tracepoint jump FP.  */
-#define fast_tracepoint_jump_shadow(fp) \
-  ((fp)->insn_and_shadow + (fp)->length)
-
-
-/* Return the fast tracepoint jump set at WHERE.  */
-
-static struct fast_tracepoint_jump *
-find_fast_tracepoint_jump_at (CORE_ADDR where)
-{
-  struct process_info *proc = current_process ();
-  struct fast_tracepoint_jump *jp;
-
-  for (jp = proc->fast_tracepoint_jumps; jp != NULL; jp = jp->next)
-    if (jp->pc == where)
-      return jp;
-
-  return NULL;
-}
-
-int
-fast_tracepoint_jump_here (CORE_ADDR where)
-{
-  struct fast_tracepoint_jump *jp = find_fast_tracepoint_jump_at (where);
-
-  return (jp != NULL);
-}
-
-int
-delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel)
-{
-  struct fast_tracepoint_jump *bp, **bp_link;
-  int ret;
-  struct process_info *proc = current_process ();
-
-  bp = proc->fast_tracepoint_jumps;
-  bp_link = &proc->fast_tracepoint_jumps;
-
-  while (bp)
-    {
-      if (bp == todel)
-	{
-	  if (--bp->refcount == 0)
-	    {
-	      struct fast_tracepoint_jump *prev_bp_link = *bp_link;
-	      unsigned char *buf;
-
-	      /* Unlink it.  */
-	      *bp_link = bp->next;
-
-	      /* Since there can be breakpoints inserted in the same
-		 address range, we use `target_write_memory', which
-		 takes care of layering breakpoints on top of fast
-		 tracepoints, and on top of the buffer we pass it.
-		 This works because we've already unlinked the fast
-		 tracepoint jump above.  Also note that we need to
-		 pass the current shadow contents, because
-		 target_write_memory updates any shadow memory with
-		 what we pass here, and we want that to be a nop.  */
-	      buf = (unsigned char *) alloca (bp->length);
-	      memcpy (buf, fast_tracepoint_jump_shadow (bp), bp->length);
-	      ret = target_write_memory (bp->pc, buf, bp->length);
-	      if (ret != 0)
-		{
-		  /* Something went wrong, relink the jump.  */
-		  *bp_link = prev_bp_link;
-
-		  if (debug_threads)
-		    debug_printf ("Failed to uninsert fast tracepoint jump "
-				  "at 0x%s (%s) while deleting it.\n",
-				  paddress (bp->pc), safe_strerror (ret));
-		  return ret;
-		}
-
-	      free (bp);
-	    }
-
-	  return 0;
-	}
-      else
-	{
-	  bp_link = &bp->next;
-	  bp = *bp_link;
-	}
-    }
-
-  warning ("Could not find fast tracepoint jump in list.");
-  return ENOENT;
-}
-
-void
-inc_ref_fast_tracepoint_jump (struct fast_tracepoint_jump *jp)
-{
-  jp->refcount++;
-}
-
-struct fast_tracepoint_jump *
-set_fast_tracepoint_jump (CORE_ADDR where,
-			  unsigned char *insn, ULONGEST length)
-{
-  struct process_info *proc = current_process ();
-  struct fast_tracepoint_jump *jp;
-  int err;
-  unsigned char *buf;
-
-  /* We refcount fast tracepoint jumps.  Check if we already know
-     about a jump at this address.  */
-  jp = find_fast_tracepoint_jump_at (where);
-  if (jp != NULL)
-    {
-      jp->refcount++;
-      return jp;
-    }
-
-  /* We don't, so create a new object.  Double the length, because the
-     flexible array member holds both the jump insn, and the
-     shadow.  */
-  jp = (struct fast_tracepoint_jump *) xcalloc (1, sizeof (*jp) + (length * 2));
-  jp->pc = where;
-  jp->length = length;
-  memcpy (fast_tracepoint_jump_insn (jp), insn, length);
-  jp->refcount = 1;
-  buf = (unsigned char *) alloca (length);
-
-  /* Note that there can be trap breakpoints inserted in the same
-     address range.  To access the original memory contents, we use
-     `read_inferior_memory', which masks out breakpoints.  */
-  err = read_inferior_memory (where, buf, length);
-  if (err != 0)
-    {
-      if (debug_threads)
-	debug_printf ("Failed to read shadow memory of"
-		      " fast tracepoint at 0x%s (%s).\n",
-		      paddress (where), safe_strerror (err));
-      free (jp);
-      return NULL;
-    }
-  memcpy (fast_tracepoint_jump_shadow (jp), buf, length);
-
-  /* Link the jump in.  */
-  jp->inserted = 1;
-  jp->next = proc->fast_tracepoint_jumps;
-  proc->fast_tracepoint_jumps = jp;
-
-  /* Since there can be trap breakpoints inserted in the same address
-     range, we use use `target_write_memory', which takes care of
-     layering breakpoints on top of fast tracepoints, on top of the
-     buffer we pass it.  This works because we've already linked in
-     the fast tracepoint jump above.  Also note that we need to pass
-     the current shadow contents, because target_write_memory
-     updates any shadow memory with what we pass here, and we want
-     that to be a nop.  */
-  err = target_write_memory (where, buf, length);
-  if (err != 0)
-    {
-      if (debug_threads)
-	debug_printf ("Failed to insert fast tracepoint jump at 0x%s (%s).\n",
-		      paddress (where), safe_strerror (err));
-
-      /* Unlink it.  */
-      proc->fast_tracepoint_jumps = jp->next;
-      free (jp);
-
-      return NULL;
-    }
-
-  return jp;
-}
-
-void
-uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc)
-{
-  struct fast_tracepoint_jump *jp;
-  int err;
-
-  jp = find_fast_tracepoint_jump_at (pc);
-  if (jp == NULL)
-    {
-      /* This can happen when we remove all breakpoints while handling
-	 a step-over.  */
-      if (debug_threads)
-	debug_printf ("Could not find fast tracepoint jump at 0x%s "
-		      "in list (uninserting).\n",
-		      paddress (pc));
-      return;
-    }
-
-  if (jp->inserted)
-    {
-      unsigned char *buf;
-
-      jp->inserted = 0;
-
-      /* Since there can be trap breakpoints inserted in the same
-	 address range, we use use `target_write_memory', which
-	 takes care of layering breakpoints on top of fast
-	 tracepoints, and on top of the buffer we pass it.  This works
-	 because we've already marked the fast tracepoint fast
-	 tracepoint jump uninserted above.  Also note that we need to
-	 pass the current shadow contents, because
-	 target_write_memory updates any shadow memory with what we
-	 pass here, and we want that to be a nop.  */
-      buf = (unsigned char *) alloca (jp->length);
-      memcpy (buf, fast_tracepoint_jump_shadow (jp), jp->length);
-      err = target_write_memory (jp->pc, buf, jp->length);
-      if (err != 0)
-	{
-	  jp->inserted = 1;
-
-	  if (debug_threads)
-	    debug_printf ("Failed to uninsert fast tracepoint jump at"
-			  " 0x%s (%s).\n",
-			  paddress (pc), safe_strerror (err));
-	}
-    }
-}
-
-void
-reinsert_fast_tracepoint_jumps_at (CORE_ADDR where)
-{
-  struct fast_tracepoint_jump *jp;
-  int err;
-  unsigned char *buf;
-
-  jp = find_fast_tracepoint_jump_at (where);
-  if (jp == NULL)
-    {
-      /* This can happen when we remove breakpoints when a tracepoint
-	 hit causes a tracing stop, while handling a step-over.  */
-      if (debug_threads)
-	debug_printf ("Could not find fast tracepoint jump at 0x%s "
-		      "in list (reinserting).\n",
-		      paddress (where));
-      return;
-    }
-
-  if (jp->inserted)
-    error ("Jump already inserted at reinsert time.");
-
-  jp->inserted = 1;
-
-  /* Since there can be trap breakpoints inserted in the same address
-     range, we use `target_write_memory', which takes care of
-     layering breakpoints on top of fast tracepoints, and on top of
-     the buffer we pass it.  This works because we've already marked
-     the fast tracepoint jump inserted above.  Also note that we need
-     to pass the current shadow contents, because
-     target_write_memory updates any shadow memory with what we pass
-     here, and we want that to be a nop.  */
-  buf = (unsigned char *) alloca (jp->length);
-  memcpy (buf, fast_tracepoint_jump_shadow (jp), jp->length);
-  err = target_write_memory (where, buf, jp->length);
-  if (err != 0)
-    {
-      jp->inserted = 0;
-
-      if (debug_threads)
-	debug_printf ("Failed to reinsert fast tracepoint jump at"
-		      " 0x%s (%s).\n",
-		      paddress (where), safe_strerror (err));
-    }
-}
-
-/* Set a high-level breakpoint of type TYPE, with low level type
-   RAW_TYPE and kind KIND, at WHERE.  On success, a pointer to the new
-   breakpoint is returned.  On failure, returns NULL and writes the
-   error code to *ERR.  HANDLER is called when the breakpoint is hit.
-   HANDLER should return 1 if the breakpoint should be deleted, 0
-   otherwise.  */
-
-static struct breakpoint *
-set_breakpoint (enum bkpt_type type, enum raw_bkpt_type raw_type,
-		CORE_ADDR where, int kind,
-		int (*handler) (CORE_ADDR), int *err)
-{
-  struct process_info *proc = current_process ();
-  struct breakpoint *bp;
-  struct raw_breakpoint *raw;
-
-  raw = set_raw_breakpoint_at (raw_type, where, kind, err);
-
-  if (raw == NULL)
-    {
-      /* warn? */
-      return NULL;
-    }
-
-  if (is_gdb_breakpoint (type))
-    {
-      struct gdb_breakpoint *gdb_bp = XCNEW (struct gdb_breakpoint);
-
-      bp = (struct breakpoint *) gdb_bp;
-      gdb_assert (handler == NULL);
-    }
-  else if (type == other_breakpoint)
-    {
-      struct other_breakpoint *other_bp = XCNEW (struct other_breakpoint);
-
-      other_bp->handler = handler;
-      bp = (struct breakpoint *) other_bp;
-    }
-  else if (type == single_step_breakpoint)
-    {
-      struct single_step_breakpoint *ss_bp
-	= XCNEW (struct single_step_breakpoint);
-
-      bp = (struct breakpoint *) ss_bp;
-    }
-  else
-    gdb_assert_not_reached ("unhandled breakpoint type");
-
-  bp->type = type;
-  bp->raw = raw;
-
-  bp->next = proc->breakpoints;
-  proc->breakpoints = bp;
-
-  return bp;
-}
-
-/* Set breakpoint of TYPE on address WHERE with handler HANDLER.  */
-
-static struct breakpoint *
-set_breakpoint_type_at (enum bkpt_type type, CORE_ADDR where,
-			int (*handler) (CORE_ADDR))
-{
-  int err_ignored;
-  CORE_ADDR placed_address = where;
-  int breakpoint_kind = target_breakpoint_kind_from_pc (&placed_address);
-
-  return set_breakpoint (type, raw_bkpt_type_sw,
-			 placed_address, breakpoint_kind, handler,
-			 &err_ignored);
-}
-
-/* See mem-break.h  */
-
-struct breakpoint *
-set_breakpoint_at (CORE_ADDR where, int (*handler) (CORE_ADDR))
-{
-  return set_breakpoint_type_at (other_breakpoint, where, handler);
-}
-
-
-static int
-delete_raw_breakpoint (struct process_info *proc, struct raw_breakpoint *todel)
-{
-  struct raw_breakpoint *bp, **bp_link;
-  int ret;
-
-  bp = proc->raw_breakpoints;
-  bp_link = &proc->raw_breakpoints;
-
-  while (bp)
-    {
-      if (bp == todel)
-	{
-	  if (bp->inserted > 0)
-	    {
-	      struct raw_breakpoint *prev_bp_link = *bp_link;
-
-	      *bp_link = bp->next;
-
-	      ret = the_target->remove_point (bp->raw_type, bp->pc, bp->kind,
-					      bp);
-	      if (ret != 0)
-		{
-		  /* Something went wrong, relink the breakpoint.  */
-		  *bp_link = prev_bp_link;
-
-		  if (debug_threads)
-		    debug_printf ("Failed to uninsert raw breakpoint "
-				  "at 0x%s while deleting it.\n",
-				  paddress (bp->pc));
-		  return ret;
-		}
-	    }
-	  else
-	    *bp_link = bp->next;
-
-	  free (bp);
-	  return 0;
-	}
-      else
-	{
-	  bp_link = &bp->next;
-	  bp = *bp_link;
-	}
-    }
-
-  warning ("Could not find raw breakpoint in list.");
-  return ENOENT;
-}
-
-static int
-release_breakpoint (struct process_info *proc, struct breakpoint *bp)
-{
-  int newrefcount;
-  int ret;
-
-  newrefcount = bp->raw->refcount - 1;
-  if (newrefcount == 0)
-    {
-      ret = delete_raw_breakpoint (proc, bp->raw);
-      if (ret != 0)
-	return ret;
-    }
-  else
-    bp->raw->refcount = newrefcount;
-
-  free (bp);
-
-  return 0;
-}
-
-static int
-delete_breakpoint_1 (struct process_info *proc, struct breakpoint *todel)
-{
-  struct breakpoint *bp, **bp_link;
-  int err;
-
-  bp = proc->breakpoints;
-  bp_link = &proc->breakpoints;
-
-  while (bp)
-    {
-      if (bp == todel)
-	{
-	  *bp_link = bp->next;
-
-	  err = release_breakpoint (proc, bp);
-	  if (err != 0)
-	    return err;
-
-	  bp = *bp_link;
-	  return 0;
-	}
-      else
-	{
-	  bp_link = &bp->next;
-	  bp = *bp_link;
-	}
-    }
-
-  warning ("Could not find breakpoint in list.");
-  return ENOENT;
-}
-
-int
-delete_breakpoint (struct breakpoint *todel)
-{
-  struct process_info *proc = current_process ();
-  return delete_breakpoint_1 (proc, todel);
-}
-
-/* Locate a GDB breakpoint of type Z_TYPE and kind KIND placed at
-   address ADDR and return a pointer to its structure.  If KIND is -1,
-   the breakpoint's kind is ignored.  */
-
-static struct gdb_breakpoint *
-find_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind)
-{
-  struct process_info *proc = current_process ();
-  struct breakpoint *bp;
-  enum bkpt_type type = Z_packet_to_bkpt_type (z_type);
-
-  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
-    if (bp->type == type && bp->raw->pc == addr
-	&& (kind == -1 || bp->raw->kind == kind))
-      return (struct gdb_breakpoint *) bp;
-
-  return NULL;
-}
-
-static int
-z_type_supported (char z_type)
-{
-  return (z_type >= '0' && z_type <= '4'
-	  && the_target->supports_z_point_type != NULL
-	  && the_target->supports_z_point_type (z_type));
-}
-
-/* Create a new GDB breakpoint of type Z_TYPE at ADDR with kind KIND.
-   Returns a pointer to the newly created breakpoint on success.  On
-   failure returns NULL and sets *ERR to either -1 for error, or 1 if
-   Z_TYPE breakpoints are not supported on this target.  */
-
-static struct gdb_breakpoint *
-set_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind, int *err)
-{
-  struct gdb_breakpoint *bp;
-  enum bkpt_type type;
-  enum raw_bkpt_type raw_type;
-
-  /* If we see GDB inserting a second code breakpoint at the same
-     address, then either: GDB is updating the breakpoint's conditions
-     or commands; or, the first breakpoint must have disappeared due
-     to a shared library unload.  On targets where the shared
-     libraries are handled by userspace, like SVR4, for example,
-     GDBserver can't tell if a library was loaded or unloaded.  Since
-     we refcount raw breakpoints, we must be careful to make sure GDB
-     breakpoints never contribute more than one reference.  if we
-     didn't do this, in case the previous breakpoint is gone due to a
-     shared library unload, we'd just increase the refcount of the
-     previous breakpoint at this address, but the trap was not planted
-     in the inferior anymore, thus the breakpoint would never be hit.
-     Note this must be careful to not create a window where
-     breakpoints are removed from the target, for non-stop, in case
-     the target can poke at memory while the program is running.  */
-  if (z_type == Z_PACKET_SW_BP
-      || z_type == Z_PACKET_HW_BP)
-    {
-      bp = find_gdb_breakpoint (z_type, addr, -1);
-
-      if (bp != NULL)
-	{
-	  if (bp->base.raw->kind != kind)
-	    {
-	      /* A different kind than previously seen.  The previous
-		 breakpoint must be gone then.  */
-	      bp->base.raw->inserted = -1;
-	      delete_breakpoint ((struct breakpoint *) bp);
-	      bp = NULL;
-	    }
-	  else if (z_type == Z_PACKET_SW_BP)
-	    {
-	      /* Check if the breakpoint is actually gone from the
-		 target, due to an solib unload, for example.  Might
-		 as well validate _all_ breakpoints.  */
-	      validate_breakpoints ();
-
-	      /* Breakpoints that don't pass validation are
-		 deleted.  */
-	      bp = find_gdb_breakpoint (z_type, addr, -1);
-	    }
-	}
-    }
-  else
-    {
-      /* Data breakpoints for the same address but different kind are
-	 expected.  GDB doesn't merge these.  The backend gets to do
-	 that if it wants/can.  */
-      bp = find_gdb_breakpoint (z_type, addr, kind);
-    }
-
-  if (bp != NULL)
-    {
-      /* We already know about this breakpoint, there's nothing else
-	 to do - GDB's reference is already accounted for.  Note that
-	 whether the breakpoint inserted is left as is - we may be
-	 stepping over it, for example, in which case we don't want to
-	 force-reinsert it.  */
-      return bp;
-    }
-
-  raw_type = Z_packet_to_raw_bkpt_type (z_type);
-  type = Z_packet_to_bkpt_type (z_type);
-  return (struct gdb_breakpoint *) set_breakpoint (type, raw_type, addr,
-						   kind, NULL, err);
-}
-
-static int
-check_gdb_bp_preconditions (char z_type, int *err)
-{
-  /* As software/memory breakpoints work by poking at memory, we need
-     to prepare to access memory.  If that operation fails, we need to
-     return error.  Seeing an error, if this is the first breakpoint
-     of that type that GDB tries to insert, GDB would then assume the
-     breakpoint type is supported, but it may actually not be.  So we
-     need to check whether the type is supported at all before
-     preparing to access memory.  */
-  if (!z_type_supported (z_type))
-    {
-      *err = 1;
-      return 0;
-    }
-
-  return 1;
-}
-
-/* See mem-break.h.  This is a wrapper for set_gdb_breakpoint_1 that
-   knows to prepare to access memory for Z0 breakpoints.  */
-
-struct gdb_breakpoint *
-set_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind, int *err)
-{
-  struct gdb_breakpoint *bp;
-
-  if (!check_gdb_bp_preconditions (z_type, err))
-    return NULL;
-
-  /* If inserting a software/memory breakpoint, need to prepare to
-     access memory.  */
-  if (z_type == Z_PACKET_SW_BP)
-    {
-      if (prepare_to_access_memory () != 0)
-	{
-	  *err = -1;
-	  return NULL;
-	}
-    }
-
-  bp = set_gdb_breakpoint_1 (z_type, addr, kind, err);
-
-  if (z_type == Z_PACKET_SW_BP)
-    done_accessing_memory ();
-
-  return bp;
-}
-
-/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously
-   inserted at ADDR with set_gdb_breakpoint_at.  Returns 0 on success,
-   -1 on error, and 1 if Z_TYPE breakpoints are not supported on this
-   target.  */
-
-static int
-delete_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind)
-{
-  struct gdb_breakpoint *bp;
-  int err;
-
-  bp = find_gdb_breakpoint (z_type, addr, kind);
-  if (bp == NULL)
-    return -1;
-
-  /* Before deleting the breakpoint, make sure to free its condition
-     and command lists.  */
-  clear_breakpoint_conditions_and_commands (bp);
-  err = delete_breakpoint ((struct breakpoint *) bp);
-  if (err != 0)
-    return -1;
-
-  return 0;
-}
-
-/* See mem-break.h.  This is a wrapper for delete_gdb_breakpoint that
-   knows to prepare to access memory for Z0 breakpoints.  */
-
-int
-delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind)
-{
-  int ret;
-
-  if (!check_gdb_bp_preconditions (z_type, &ret))
-    return ret;
-
-  /* If inserting a software/memory breakpoint, need to prepare to
-     access memory.  */
-  if (z_type == Z_PACKET_SW_BP)
-    {
-      int err;
-
-      err = prepare_to_access_memory ();
-      if (err != 0)
-	return -1;
-    }
-
-  ret = delete_gdb_breakpoint_1 (z_type, addr, kind);
-
-  if (z_type == Z_PACKET_SW_BP)
-    done_accessing_memory ();
-
-  return ret;
-}
-
-/* Clear all conditions associated with a breakpoint.  */
-
-static void
-clear_breakpoint_conditions (struct gdb_breakpoint *bp)
-{
-  struct point_cond_list *cond;
-
-  if (bp->cond_list == NULL)
-    return;
-
-  cond = bp->cond_list;
-
-  while (cond != NULL)
-    {
-      struct point_cond_list *cond_next;
-
-      cond_next = cond->next;
-      gdb_free_agent_expr (cond->cond);
-      free (cond);
-      cond = cond_next;
-    }
-
-  bp->cond_list = NULL;
-}
-
-/* Clear all commands associated with a breakpoint.  */
-
-static void
-clear_breakpoint_commands (struct gdb_breakpoint *bp)
-{
-  struct point_command_list *cmd;
-
-  if (bp->command_list == NULL)
-    return;
-
-  cmd = bp->command_list;
-
-  while (cmd != NULL)
-    {
-      struct point_command_list *cmd_next;
-
-      cmd_next = cmd->next;
-      gdb_free_agent_expr (cmd->cmd);
-      free (cmd);
-      cmd = cmd_next;
-    }
-
-  bp->command_list = NULL;
-}
-
-void
-clear_breakpoint_conditions_and_commands (struct gdb_breakpoint *bp)
-{
-  clear_breakpoint_conditions (bp);
-  clear_breakpoint_commands (bp);
-}
-
-/* Add condition CONDITION to GDBserver's breakpoint BP.  */
-
-static void
-add_condition_to_breakpoint (struct gdb_breakpoint *bp,
-			     struct agent_expr *condition)
-{
-  struct point_cond_list *new_cond;
-
-  /* Create new condition.  */
-  new_cond = XCNEW (struct point_cond_list);
-  new_cond->cond = condition;
-
-  /* Add condition to the list.  */
-  new_cond->next = bp->cond_list;
-  bp->cond_list = new_cond;
-}
-
-/* Add a target-side condition CONDITION to a breakpoint.  */
-
-int
-add_breakpoint_condition (struct gdb_breakpoint *bp, const char **condition)
-{
-  const char *actparm = *condition;
-  struct agent_expr *cond;
-
-  if (condition == NULL)
-    return 1;
-
-  if (bp == NULL)
-    return 0;
-
-  cond = gdb_parse_agent_expr (&actparm);
-
-  if (cond == NULL)
-    {
-      warning ("Condition evaluation failed. Assuming unconditional.");
-      return 0;
-    }
-
-  add_condition_to_breakpoint (bp, cond);
-
-  *condition = actparm;
-
-  return 1;
-}
-
-/* Evaluate condition (if any) at breakpoint BP.  Return 1 if
-   true and 0 otherwise.  */
-
-static int
-gdb_condition_true_at_breakpoint_z_type (char z_type, CORE_ADDR addr)
-{
-  /* Fetch registers for the current inferior.  */
-  struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1);
-  ULONGEST value = 0;
-  struct point_cond_list *cl;
-  int err = 0;
-  struct eval_agent_expr_context ctx;
-
-  if (bp == NULL)
-    return 0;
-
-  /* Check if the breakpoint is unconditional.  If it is,
-     the condition always evaluates to TRUE.  */
-  if (bp->cond_list == NULL)
-    return 1;
-
-  ctx.regcache = get_thread_regcache (current_thread, 1);
-  ctx.tframe = NULL;
-  ctx.tpoint = NULL;
-
-  /* Evaluate each condition in the breakpoint's list of conditions.
-     Return true if any of the conditions evaluates to TRUE.
-
-     If we failed to evaluate the expression, TRUE is returned.  This
-     forces GDB to reevaluate the conditions.  */
-  for (cl = bp->cond_list;
-       cl && !value && !err; cl = cl->next)
-    {
-      /* Evaluate the condition.  */
-      err = gdb_eval_agent_expr (&ctx, cl->cond, &value);
-    }
-
-  if (err)
-    return 1;
-
-  return (value != 0);
-}
-
-int
-gdb_condition_true_at_breakpoint (CORE_ADDR where)
-{
-  /* Only check code (software or hardware) breakpoints.  */
-  return (gdb_condition_true_at_breakpoint_z_type (Z_PACKET_SW_BP, where)
-	  || gdb_condition_true_at_breakpoint_z_type (Z_PACKET_HW_BP, where));
-}
-
-/* Add commands COMMANDS to GDBserver's breakpoint BP.  */
-
-static void
-add_commands_to_breakpoint (struct gdb_breakpoint *bp,
-			    struct agent_expr *commands, int persist)
-{
-  struct point_command_list *new_cmd;
-
-  /* Create new command.  */
-  new_cmd = XCNEW (struct point_command_list);
-  new_cmd->cmd = commands;
-  new_cmd->persistence = persist;
-
-  /* Add commands to the list.  */
-  new_cmd->next = bp->command_list;
-  bp->command_list = new_cmd;
-}
-
-/* Add a target-side command COMMAND to the breakpoint at ADDR.  */
-
-int
-add_breakpoint_commands (struct gdb_breakpoint *bp, const char **command,
-			 int persist)
-{
-  const char *actparm = *command;
-  struct agent_expr *cmd;
-
-  if (command == NULL)
-    return 1;
-
-  if (bp == NULL)
-    return 0;
-
-  cmd = gdb_parse_agent_expr (&actparm);
-
-  if (cmd == NULL)
-    {
-      warning ("Command evaluation failed. Disabling.");
-      return 0;
-    }
-
-  add_commands_to_breakpoint (bp, cmd, persist);
-
-  *command = actparm;
-
-  return 1;
-}
-
-/* Return true if there are no commands to run at this location,
-   which likely means we want to report back to GDB.  */
-
-static int
-gdb_no_commands_at_breakpoint_z_type (char z_type, CORE_ADDR addr)
-{
-  struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1);
-
-  if (bp == NULL)
-    return 1;
-
-  if (debug_threads)
-    debug_printf ("at 0x%s, type Z%c, bp command_list is 0x%s\n",
-		  paddress (addr), z_type,
-		  phex_nz ((uintptr_t) bp->command_list, 0));
-  return (bp->command_list == NULL);
-}
-
-/* Return true if there are no commands to run at this location,
-   which likely means we want to report back to GDB.  */
-
-int
-gdb_no_commands_at_breakpoint (CORE_ADDR where)
-{
-  /* Only check code (software or hardware) breakpoints.  */
-  return (gdb_no_commands_at_breakpoint_z_type (Z_PACKET_SW_BP, where)
-	  && gdb_no_commands_at_breakpoint_z_type (Z_PACKET_HW_BP, where));
-}
-
-/* Run a breakpoint's commands.  Returns 0 if there was a problem
-   running any command, 1 otherwise.  */
-
-static int
-run_breakpoint_commands_z_type (char z_type, CORE_ADDR addr)
-{
-  /* Fetch registers for the current inferior.  */
-  struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1);
-  ULONGEST value = 0;
-  struct point_command_list *cl;
-  int err = 0;
-  struct eval_agent_expr_context ctx;
-
-  if (bp == NULL)
-    return 1;
-
-  ctx.regcache = get_thread_regcache (current_thread, 1);
-  ctx.tframe = NULL;
-  ctx.tpoint = NULL;
-
-  for (cl = bp->command_list;
-       cl && !value && !err; cl = cl->next)
-    {
-      /* Run the command.  */
-      err = gdb_eval_agent_expr (&ctx, cl->cmd, &value);
-
-      /* If one command has a problem, stop digging the hole deeper.  */
-      if (err)
-	return 0;
-    }
-
-  return 1;
-}
-
-void
-run_breakpoint_commands (CORE_ADDR where)
-{
-  /* Only check code (software or hardware) breakpoints.  If one
-     command has a problem, stop digging the hole deeper.  */
-  if (run_breakpoint_commands_z_type (Z_PACKET_SW_BP, where))
-    run_breakpoint_commands_z_type (Z_PACKET_HW_BP, where);
-}
-
-/* See mem-break.h.  */
-
-int
-gdb_breakpoint_here (CORE_ADDR where)
-{
-  /* Only check code (software or hardware) breakpoints.  */
-  return (find_gdb_breakpoint (Z_PACKET_SW_BP, where, -1) != NULL
-	  || find_gdb_breakpoint (Z_PACKET_HW_BP, where, -1) != NULL);
-}
-
-void
-set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid)
-{
-  struct single_step_breakpoint *bp;
-
-  gdb_assert (current_ptid.pid () == ptid.pid ());
-
-  bp = (struct single_step_breakpoint *) set_breakpoint_type_at (single_step_breakpoint,
-								stop_at, NULL);
-  bp->ptid = ptid;
-}
-
-void
-delete_single_step_breakpoints (struct thread_info *thread)
-{
-  struct process_info *proc = get_thread_process (thread);
-  struct breakpoint *bp, **bp_link;
-
-  bp = proc->breakpoints;
-  bp_link = &proc->breakpoints;
-
-  while (bp)
-    {
-      if (bp->type == single_step_breakpoint
-	  && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread))
-	{
-	  struct thread_info *saved_thread = current_thread;
-
-	  current_thread = thread;
-	  *bp_link = bp->next;
-	  release_breakpoint (proc, bp);
-	  bp = *bp_link;
-	  current_thread = saved_thread;
-	}
-      else
-	{
-	  bp_link = &bp->next;
-	  bp = *bp_link;
-	}
-    }
-}
-
-static void
-uninsert_raw_breakpoint (struct raw_breakpoint *bp)
-{
-  if (bp->inserted < 0)
-    {
-      if (debug_threads)
-	debug_printf ("Breakpoint at %s is marked insert-disabled.\n",
-		      paddress (bp->pc));
-    }
-  else if (bp->inserted > 0)
-    {
-      int err;
-
-      bp->inserted = 0;
-
-      err = the_target->remove_point (bp->raw_type, bp->pc, bp->kind, bp);
-      if (err != 0)
-	{
-	  bp->inserted = 1;
-
-	  if (debug_threads)
-	    debug_printf ("Failed to uninsert raw breakpoint at 0x%s.\n",
-			  paddress (bp->pc));
-	}
-    }
-}
-
-void
-uninsert_breakpoints_at (CORE_ADDR pc)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-  int found = 0;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if ((bp->raw_type == raw_bkpt_type_sw
-	 || bp->raw_type == raw_bkpt_type_hw)
-	&& bp->pc == pc)
-      {
-	found = 1;
-
-	if (bp->inserted)
-	  uninsert_raw_breakpoint (bp);
-      }
-
-  if (!found)
-    {
-      /* This can happen when we remove all breakpoints while handling
-	 a step-over.  */
-      if (debug_threads)
-	debug_printf ("Could not find breakpoint at 0x%s "
-		      "in list (uninserting).\n",
-		      paddress (pc));
-    }
-}
-
-void
-uninsert_all_breakpoints (void)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if ((bp->raw_type == raw_bkpt_type_sw
-	 || bp->raw_type == raw_bkpt_type_hw)
-	&& bp->inserted)
-      uninsert_raw_breakpoint (bp);
-}
-
-void
-uninsert_single_step_breakpoints (struct thread_info *thread)
-{
-  struct process_info *proc = get_thread_process (thread);
-  struct breakpoint *bp;
-
-  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
-    {
-    if (bp->type == single_step_breakpoint
-	&& ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread))
-      {
-	gdb_assert (bp->raw->inserted > 0);
-
-	/* Only uninsert the raw breakpoint if it only belongs to a
-	   reinsert breakpoint.  */
-	if (bp->raw->refcount == 1)
-	  {
-	    struct thread_info *saved_thread = current_thread;
-
-	    current_thread = thread;
-	    uninsert_raw_breakpoint (bp->raw);
-	    current_thread = saved_thread;
-	  }
-      }
-    }
-}
-
-static void
-reinsert_raw_breakpoint (struct raw_breakpoint *bp)
-{
-  int err;
-
-  if (bp->inserted)
-    return;
-
-  err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp);
-  if (err == 0)
-    bp->inserted = 1;
-  else if (debug_threads)
-    debug_printf ("Failed to reinsert breakpoint at 0x%s (%d).\n",
-		  paddress (bp->pc), err);
-}
-
-void
-reinsert_breakpoints_at (CORE_ADDR pc)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-  int found = 0;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if ((bp->raw_type == raw_bkpt_type_sw
-	 || bp->raw_type == raw_bkpt_type_hw)
-	&& bp->pc == pc)
-      {
-	found = 1;
-
-	reinsert_raw_breakpoint (bp);
-      }
-
-  if (!found)
-    {
-      /* This can happen when we remove all breakpoints while handling
-	 a step-over.  */
-      if (debug_threads)
-	debug_printf ("Could not find raw breakpoint at 0x%s "
-		      "in list (reinserting).\n",
-		      paddress (pc));
-    }
-}
-
-int
-has_single_step_breakpoints (struct thread_info *thread)
-{
-  struct process_info *proc = get_thread_process (thread);
-  struct breakpoint *bp, **bp_link;
-
-  bp = proc->breakpoints;
-  bp_link = &proc->breakpoints;
-
-  while (bp)
-    {
-      if (bp->type == single_step_breakpoint
-	  && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread))
-	return 1;
-      else
-	{
-	  bp_link = &bp->next;
-	  bp = *bp_link;
-	}
-    }
-
-  return 0;
-}
-
-void
-reinsert_all_breakpoints (void)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if ((bp->raw_type == raw_bkpt_type_sw
-	 || bp->raw_type == raw_bkpt_type_hw)
-	&& !bp->inserted)
-      reinsert_raw_breakpoint (bp);
-}
-
-void
-reinsert_single_step_breakpoints (struct thread_info *thread)
-{
-  struct process_info *proc = get_thread_process (thread);
-  struct breakpoint *bp;
-
-  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
-    {
-      if (bp->type == single_step_breakpoint
-	  && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread))
-	{
-	  gdb_assert (bp->raw->inserted > 0);
-
-	  if (bp->raw->refcount == 1)
-	    {
-	      struct thread_info *saved_thread = current_thread;
-
-	      current_thread = thread;
-	      reinsert_raw_breakpoint (bp->raw);
-	      current_thread = saved_thread;
-	    }
-	}
-    }
-}
-
-void
-check_breakpoints (CORE_ADDR stop_pc)
-{
-  struct process_info *proc = current_process ();
-  struct breakpoint *bp, **bp_link;
-
-  bp = proc->breakpoints;
-  bp_link = &proc->breakpoints;
-
-  while (bp)
-    {
-      struct raw_breakpoint *raw = bp->raw;
-
-      if ((raw->raw_type == raw_bkpt_type_sw
-	   || raw->raw_type == raw_bkpt_type_hw)
-	  && raw->pc == stop_pc)
-	{
-	  if (!raw->inserted)
-	    {
-	      warning ("Hit a removed breakpoint?");
-	      return;
-	    }
-
-	  if (bp->type == other_breakpoint)
-	    {
-	      struct other_breakpoint *other_bp
-		= (struct other_breakpoint *) bp;
-
-	      if (other_bp->handler != NULL && (*other_bp->handler) (stop_pc))
-		{
-		  *bp_link = bp->next;
-
-		  release_breakpoint (proc, bp);
-
-		  bp = *bp_link;
-		  continue;
-		}
-	    }
-	}
-
-      bp_link = &bp->next;
-      bp = *bp_link;
-    }
-}
-
-int
-breakpoint_here (CORE_ADDR addr)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if ((bp->raw_type == raw_bkpt_type_sw
-	 || bp->raw_type == raw_bkpt_type_hw)
-	&& bp->pc == addr)
-      return 1;
-
-  return 0;
-}
-
-int
-breakpoint_inserted_here (CORE_ADDR addr)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if ((bp->raw_type == raw_bkpt_type_sw
-	 || bp->raw_type == raw_bkpt_type_hw)
-	&& bp->pc == addr
-	&& bp->inserted)
-      return 1;
-
-  return 0;
-}
-
-/* See mem-break.h.  */
-
-int
-software_breakpoint_inserted_here (CORE_ADDR addr)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if (bp->raw_type == raw_bkpt_type_sw
-	&& bp->pc == addr
-	&& bp->inserted)
-      return 1;
-
-  return 0;
-}
-
-/* See mem-break.h.  */
-
-int
-hardware_breakpoint_inserted_here (CORE_ADDR addr)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp;
-
-  for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next)
-    if (bp->raw_type == raw_bkpt_type_hw
-	&& bp->pc == addr
-	&& bp->inserted)
-      return 1;
-
-  return 0;
-}
-
-/* See mem-break.h.  */
-
-int
-single_step_breakpoint_inserted_here (CORE_ADDR addr)
-{
-  struct process_info *proc = current_process ();
-  struct breakpoint *bp;
-
-  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
-    if (bp->type == single_step_breakpoint
-	&& bp->raw->pc == addr
-	&& bp->raw->inserted)
-      return 1;
-
-  return 0;
-}
-
-static int
-validate_inserted_breakpoint (struct raw_breakpoint *bp)
-{
-  unsigned char *buf;
-  int err;
-
-  gdb_assert (bp->inserted);
-  gdb_assert (bp->raw_type == raw_bkpt_type_sw);
-
-  buf = (unsigned char *) alloca (bp_size (bp));
-  err = (*the_target->read_memory) (bp->pc, buf, bp_size (bp));
-  if (err || memcmp (buf, bp_opcode (bp), bp_size (bp)) != 0)
-    {
-      /* Tag it as gone.  */
-      bp->inserted = -1;
-      return 0;
-    }
-
-  return 1;
-}
-
-static void
-delete_disabled_breakpoints (void)
-{
-  struct process_info *proc = current_process ();
-  struct breakpoint *bp, *next;
-
-  for (bp = proc->breakpoints; bp != NULL; bp = next)
-    {
-      next = bp->next;
-      if (bp->raw->inserted < 0)
-	{
-	  /* If single_step_breakpoints become disabled, that means the
-	     manipulations (insertion and removal) of them are wrong.  */
-	  gdb_assert (bp->type != single_step_breakpoint);
-	  delete_breakpoint_1 (proc, bp);
-	}
-    }
-}
-
-/* Check if breakpoints we inserted still appear to be inserted.  They
-   may disappear due to a shared library unload, and worse, a new
-   shared library may be reloaded at the same address as the
-   previously unloaded one.  If that happens, we should make sure that
-   the shadow memory of the old breakpoints isn't used when reading or
-   writing memory.  */
-
-void
-validate_breakpoints (void)
-{
-  struct process_info *proc = current_process ();
-  struct breakpoint *bp;
-
-  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
-    {
-      struct raw_breakpoint *raw = bp->raw;
-
-      if (raw->raw_type == raw_bkpt_type_sw && raw->inserted > 0)
-	validate_inserted_breakpoint (raw);
-    }
-
-  delete_disabled_breakpoints ();
-}
-
-void
-check_mem_read (CORE_ADDR mem_addr, unsigned char *buf, int mem_len)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp = proc->raw_breakpoints;
-  struct fast_tracepoint_jump *jp = proc->fast_tracepoint_jumps;
-  CORE_ADDR mem_end = mem_addr + mem_len;
-  int disabled_one = 0;
-
-  for (; jp != NULL; jp = jp->next)
-    {
-      CORE_ADDR bp_end = jp->pc + jp->length;
-      CORE_ADDR start, end;
-      int copy_offset, copy_len, buf_offset;
-
-      gdb_assert (fast_tracepoint_jump_shadow (jp) >= buf + mem_len
-		  || buf >= fast_tracepoint_jump_shadow (jp) + (jp)->length);
-
-      if (mem_addr >= bp_end)
-	continue;
-      if (jp->pc >= mem_end)
-	continue;
-
-      start = jp->pc;
-      if (mem_addr > start)
-	start = mem_addr;
-
-      end = bp_end;
-      if (end > mem_end)
-	end = mem_end;
-
-      copy_len = end - start;
-      copy_offset = start - jp->pc;
-      buf_offset = start - mem_addr;
-
-      if (jp->inserted)
-	memcpy (buf + buf_offset,
-		fast_tracepoint_jump_shadow (jp) + copy_offset,
-		copy_len);
-    }
-
-  for (; bp != NULL; bp = bp->next)
-    {
-      CORE_ADDR bp_end = bp->pc + bp_size (bp);
-      CORE_ADDR start, end;
-      int copy_offset, copy_len, buf_offset;
-
-      if (bp->raw_type != raw_bkpt_type_sw)
-	continue;
-
-      gdb_assert (bp->old_data >= buf + mem_len
-		  || buf >= &bp->old_data[sizeof (bp->old_data)]);
-
-      if (mem_addr >= bp_end)
-	continue;
-      if (bp->pc >= mem_end)
-	continue;
-
-      start = bp->pc;
-      if (mem_addr > start)
-	start = mem_addr;
-
-      end = bp_end;
-      if (end > mem_end)
-	end = mem_end;
-
-      copy_len = end - start;
-      copy_offset = start - bp->pc;
-      buf_offset = start - mem_addr;
-
-      if (bp->inserted > 0)
-	{
-	  if (validate_inserted_breakpoint (bp))
-	    memcpy (buf + buf_offset, bp->old_data + copy_offset, copy_len);
-	  else
-	    disabled_one = 1;
-	}
-    }
-
-  if (disabled_one)
-    delete_disabled_breakpoints ();
-}
-
-void
-check_mem_write (CORE_ADDR mem_addr, unsigned char *buf,
-		 const unsigned char *myaddr, int mem_len)
-{
-  struct process_info *proc = current_process ();
-  struct raw_breakpoint *bp = proc->raw_breakpoints;
-  struct fast_tracepoint_jump *jp = proc->fast_tracepoint_jumps;
-  CORE_ADDR mem_end = mem_addr + mem_len;
-  int disabled_one = 0;
-
-  /* First fast tracepoint jumps, then breakpoint traps on top.  */
-
-  for (; jp != NULL; jp = jp->next)
-    {
-      CORE_ADDR jp_end = jp->pc + jp->length;
-      CORE_ADDR start, end;
-      int copy_offset, copy_len, buf_offset;
-
-      gdb_assert (fast_tracepoint_jump_shadow (jp) >= myaddr + mem_len
-		  || myaddr >= fast_tracepoint_jump_shadow (jp) + (jp)->length);
-      gdb_assert (fast_tracepoint_jump_insn (jp) >= buf + mem_len
-		  || buf >= fast_tracepoint_jump_insn (jp) + (jp)->length);
-
-      if (mem_addr >= jp_end)
-	continue;
-      if (jp->pc >= mem_end)
-	continue;
-
-      start = jp->pc;
-      if (mem_addr > start)
-	start = mem_addr;
-
-      end = jp_end;
-      if (end > mem_end)
-	end = mem_end;
-
-      copy_len = end - start;
-      copy_offset = start - jp->pc;
-      buf_offset = start - mem_addr;
-
-      memcpy (fast_tracepoint_jump_shadow (jp) + copy_offset,
-	      myaddr + buf_offset, copy_len);
-      if (jp->inserted)
-	memcpy (buf + buf_offset,
-		fast_tracepoint_jump_insn (jp) + copy_offset, copy_len);
-    }
-
-  for (; bp != NULL; bp = bp->next)
-    {
-      CORE_ADDR bp_end = bp->pc + bp_size (bp);
-      CORE_ADDR start, end;
-      int copy_offset, copy_len, buf_offset;
-
-      if (bp->raw_type != raw_bkpt_type_sw)
-	continue;
-
-      gdb_assert (bp->old_data >= myaddr + mem_len
-		  || myaddr >= &bp->old_data[sizeof (bp->old_data)]);
-
-      if (mem_addr >= bp_end)
-	continue;
-      if (bp->pc >= mem_end)
-	continue;
-
-      start = bp->pc;
-      if (mem_addr > start)
-	start = mem_addr;
-
-      end = bp_end;
-      if (end > mem_end)
-	end = mem_end;
-
-      copy_len = end - start;
-      copy_offset = start - bp->pc;
-      buf_offset = start - mem_addr;
-
-      memcpy (bp->old_data + copy_offset, myaddr + buf_offset, copy_len);
-      if (bp->inserted > 0)
-	{
-	  if (validate_inserted_breakpoint (bp))
-	    memcpy (buf + buf_offset, bp_opcode (bp) + copy_offset, copy_len);
-	  else
-	    disabled_one = 1;
-	}
-    }
-
-  if (disabled_one)
-    delete_disabled_breakpoints ();
-}
-
-/* Delete all breakpoints, and un-insert them from the inferior.  */
-
-void
-delete_all_breakpoints (void)
-{
-  struct process_info *proc = current_process ();
-
-  while (proc->breakpoints)
-    delete_breakpoint_1 (proc, proc->breakpoints);
-}
-
-/* Clear the "inserted" flag in all breakpoints.  */
-
-void
-mark_breakpoints_out (struct process_info *proc)
-{
-  struct raw_breakpoint *raw_bp;
-
-  for (raw_bp = proc->raw_breakpoints; raw_bp != NULL; raw_bp = raw_bp->next)
-    raw_bp->inserted = 0;
-}
-
-/* Release all breakpoints, but do not try to un-insert them from the
-   inferior.  */
-
-void
-free_all_breakpoints (struct process_info *proc)
-{
-  mark_breakpoints_out (proc);
-
-  /* Note: use PROC explicitly instead of deferring to
-     delete_all_breakpoints --- CURRENT_INFERIOR may already have been
-     released when we get here.  There should be no call to
-     current_process from here on.  */
-  while (proc->breakpoints)
-    delete_breakpoint_1 (proc, proc->breakpoints);
-}
-
-/* Clone an agent expression.  */
-
-static struct agent_expr *
-clone_agent_expr (const struct agent_expr *src_ax)
-{
-  struct agent_expr *ax;
-
-  ax = XCNEW (struct agent_expr);
-  ax->length = src_ax->length;
-  ax->bytes = (unsigned char *) xcalloc (ax->length, 1);
-  memcpy (ax->bytes, src_ax->bytes, ax->length);
-  return ax;
-}
-
-/* Deep-copy the contents of one breakpoint to another.  */
-
-static struct breakpoint *
-clone_one_breakpoint (const struct breakpoint *src, ptid_t ptid)
-{
-  struct breakpoint *dest;
-  struct raw_breakpoint *dest_raw;
-
-  /* Clone the raw breakpoint.  */
-  dest_raw = XCNEW (struct raw_breakpoint);
-  dest_raw->raw_type = src->raw->raw_type;
-  dest_raw->refcount = src->raw->refcount;
-  dest_raw->pc = src->raw->pc;
-  dest_raw->kind = src->raw->kind;
-  memcpy (dest_raw->old_data, src->raw->old_data, MAX_BREAKPOINT_LEN);
-  dest_raw->inserted = src->raw->inserted;
-
-  /* Clone the high-level breakpoint.  */
-  if (is_gdb_breakpoint (src->type))
-    {
-      struct gdb_breakpoint *gdb_dest = XCNEW (struct gdb_breakpoint);
-      struct point_cond_list *current_cond;
-      struct point_cond_list *new_cond;
-      struct point_cond_list *cond_tail = NULL;
-      struct point_command_list *current_cmd;
-      struct point_command_list *new_cmd;
-      struct point_command_list *cmd_tail = NULL;
-
-      /* Clone the condition list.  */
-      for (current_cond = ((struct gdb_breakpoint *) src)->cond_list;
-	   current_cond != NULL;
-	   current_cond = current_cond->next)
-	{
-	  new_cond = XCNEW (struct point_cond_list);
-	  new_cond->cond = clone_agent_expr (current_cond->cond);
-	  APPEND_TO_LIST (&gdb_dest->cond_list, new_cond, cond_tail);
-	}
-
-      /* Clone the command list.  */
-      for (current_cmd = ((struct gdb_breakpoint *) src)->command_list;
-	   current_cmd != NULL;
-	   current_cmd = current_cmd->next)
-	{
-	  new_cmd = XCNEW (struct point_command_list);
-	  new_cmd->cmd = clone_agent_expr (current_cmd->cmd);
-	  new_cmd->persistence = current_cmd->persistence;
-	  APPEND_TO_LIST (&gdb_dest->command_list, new_cmd, cmd_tail);
-	}
-
-      dest = (struct breakpoint *) gdb_dest;
-    }
-  else if (src->type == other_breakpoint)
-    {
-      struct other_breakpoint *other_dest = XCNEW (struct other_breakpoint);
-
-      other_dest->handler = ((struct other_breakpoint *) src)->handler;
-      dest = (struct breakpoint *) other_dest;
-    }
-  else if (src->type == single_step_breakpoint)
-    {
-      struct single_step_breakpoint *ss_dest
-	= XCNEW (struct single_step_breakpoint);
-
-      dest = (struct breakpoint *) ss_dest;
-      /* Since single-step breakpoint is thread specific, don't copy
-	 thread id from SRC, use ID instead.  */
-      ss_dest->ptid = ptid;
-    }
-  else
-    gdb_assert_not_reached ("unhandled breakpoint type");
-
-  dest->type = src->type;
-  dest->raw = dest_raw;
-
-  return dest;
-}
-
-/* See mem-break.h.  */
-
-void
-clone_all_breakpoints (struct thread_info *child_thread,
-		       const struct thread_info *parent_thread)
-{
-  const struct breakpoint *bp;
-  struct breakpoint *new_bkpt;
-  struct breakpoint *bkpt_tail = NULL;
-  struct raw_breakpoint *raw_bkpt_tail = NULL;
-  struct process_info *child_proc = get_thread_process (child_thread);
-  struct process_info *parent_proc = get_thread_process (parent_thread);
-  struct breakpoint **new_list = &child_proc->breakpoints;
-  struct raw_breakpoint **new_raw_list = &child_proc->raw_breakpoints;
-
-  for (bp = parent_proc->breakpoints; bp != NULL; bp = bp->next)
-    {
-      new_bkpt = clone_one_breakpoint (bp, ptid_of (child_thread));
-      APPEND_TO_LIST (new_list, new_bkpt, bkpt_tail);
-      APPEND_TO_LIST (new_raw_list, new_bkpt->raw, raw_bkpt_tail);
-    }
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/mem-break.h ./gdb/gdbserver/mem-break.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/mem-break.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/mem-break.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,279 +0,0 @@
-/* Memory breakpoint interfaces for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 GDBSERVER_MEM_BREAK_H
-#define GDBSERVER_MEM_BREAK_H
-
-#include "gdbsupport/break-common.h"
-
-/* Breakpoints are opaque.  */
-struct breakpoint;
-struct gdb_breakpoint;
-struct fast_tracepoint_jump;
-struct raw_breakpoint;
-struct process_info;
-
-#define Z_PACKET_SW_BP '0'
-#define Z_PACKET_HW_BP '1'
-#define Z_PACKET_WRITE_WP '2'
-#define Z_PACKET_READ_WP '3'
-#define Z_PACKET_ACCESS_WP '4'
-
-/* The low level breakpoint types.  */
-
-enum raw_bkpt_type
-  {
-    /* Software/memory breakpoint.  */
-    raw_bkpt_type_sw,
-
-    /* Hardware-assisted breakpoint.  */
-    raw_bkpt_type_hw,
-
-    /* Hardware-assisted write watchpoint.  */
-    raw_bkpt_type_write_wp,
-
-    /* Hardware-assisted read watchpoint.  */
-    raw_bkpt_type_read_wp,
-
-    /* Hardware-assisted access watchpoint.  */
-    raw_bkpt_type_access_wp
-  };
-
-/* Map the protocol breakpoint/watchpoint type Z_TYPE to the internal
-   raw breakpoint type.  */
-
-enum raw_bkpt_type Z_packet_to_raw_bkpt_type (char z_type);
-
-/* Map a raw breakpoint type to an enum target_hw_bp_type.  */
-
-enum target_hw_bp_type raw_bkpt_type_to_target_hw_bp_type
-  (enum raw_bkpt_type raw_type);
-
-/* Create a new GDB breakpoint of type Z_TYPE at ADDR with kind KIND.
-   Returns a pointer to the newly created breakpoint on success.  On
-   failure returns NULL and sets *ERR to either -1 for error, or 1 if
-   Z_TYPE breakpoints are not supported on this target.  */
-
-struct gdb_breakpoint *set_gdb_breakpoint (char z_type, CORE_ADDR addr,
-					   int kind, int *err);
-
-/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously
-   inserted at ADDR with set_gdb_breakpoint_at.  Returns 0 on success,
-   -1 on error, and 1 if Z_TYPE breakpoints are not supported on this
-   target.  */
-
-int delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind);
-
-/* Returns TRUE if there's a software or hardware (code) breakpoint at
-   ADDR in our tables, inserted, or not.  */
-
-int breakpoint_here (CORE_ADDR addr);
-
-/* Returns TRUE if there's any inserted software or hardware (code)
-   breakpoint set at ADDR.  */
-
-int breakpoint_inserted_here (CORE_ADDR addr);
-
-/* Returns TRUE if there's any inserted software breakpoint at
-   ADDR.  */
-
-int software_breakpoint_inserted_here (CORE_ADDR addr);
-
-/* Returns TRUE if there's any inserted hardware (code) breakpoint at
-   ADDR.  */
-
-int hardware_breakpoint_inserted_here (CORE_ADDR addr);
-
-/* Returns TRUE if there's any single-step breakpoint at ADDR.  */
-
-int single_step_breakpoint_inserted_here (CORE_ADDR addr);
-
-/* Clear all breakpoint conditions and commands associated with a
-   breakpoint.  */
-
-void clear_breakpoint_conditions_and_commands (struct gdb_breakpoint *bp);
-
-/* Set target-side condition CONDITION to the breakpoint at ADDR.
-   Returns false on failure.  On success, advances CONDITION pointer
-   past the condition and returns true.  */
-
-int add_breakpoint_condition (struct gdb_breakpoint *bp,
-			      const char **condition);
-
-/* Set target-side commands COMMANDS to the breakpoint at ADDR.
-   Returns false on failure.  On success, advances COMMANDS past the
-   commands and returns true.  If PERSIST, the commands should run
-   even while GDB is disconnected.  */
-
-int add_breakpoint_commands (struct gdb_breakpoint *bp, const char **commands,
-			     int persist);
-
-/* Return true if PROC has any persistent command.  */
-bool any_persistent_commands (process_info *proc);
-
-/* Evaluation condition (if any) at breakpoint BP.  Return 1 if
-   true and 0 otherwise.  */
-
-int gdb_condition_true_at_breakpoint (CORE_ADDR where);
-
-int gdb_no_commands_at_breakpoint (CORE_ADDR where);
-
-void run_breakpoint_commands (CORE_ADDR where);
-
-/* Returns TRUE if there's a GDB breakpoint (Z0 or Z1) set at
-   WHERE.  */
-
-int gdb_breakpoint_here (CORE_ADDR where);
-
-/* Create a new breakpoint at WHERE, and call HANDLER when
-   it is hit.  HANDLER should return 1 if the breakpoint
-   should be deleted, 0 otherwise.  The type of the created
-   breakpoint is other_breakpoint.  */
-
-struct breakpoint *set_breakpoint_at (CORE_ADDR where,
-				      int (*handler) (CORE_ADDR));
-
-/* Delete a breakpoint.  */
-
-int delete_breakpoint (struct breakpoint *bkpt);
-
-/* Set a single-step breakpoint at STOP_AT for thread represented by
-   PTID.  */
-
-void set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid);
-
-/* Delete all single-step breakpoints of THREAD.  */
-
-void delete_single_step_breakpoints (struct thread_info *thread);
-
-/* Reinsert all single-step breakpoints of THREAD.  */
-
-void reinsert_single_step_breakpoints (struct thread_info *thread);
-
-/* Uninsert all single-step breakpoints of THREAD.  This still leaves
-   the single-step breakpoints in the table.  */
-
-void uninsert_single_step_breakpoints (struct thread_info *thread);
-
-/* Reinsert breakpoints at WHERE (and change their status to
-   inserted).  */
-
-void reinsert_breakpoints_at (CORE_ADDR where);
-
-/* The THREAD has single-step breakpoints or not.  */
-
-int has_single_step_breakpoints (struct thread_info *thread);
-
-/* Uninsert breakpoints at WHERE (and change their status to
-   uninserted).  This still leaves the breakpoints in the table.  */
-
-void uninsert_breakpoints_at (CORE_ADDR where);
-
-/* Reinsert all breakpoints of the current process (and change their
-   status to inserted).  */
-
-void reinsert_all_breakpoints (void);
-
-/* Uninsert all breakpoints of the current process (and change their
-   status to uninserted).  This still leaves the breakpoints in the
-   table.  */
-
-void uninsert_all_breakpoints (void);
-
-/* See if any breakpoint claims ownership of STOP_PC.  Call the handler for
-   the breakpoint, if found.  */
-
-void check_breakpoints (CORE_ADDR stop_pc);
-
-/* See if any breakpoints shadow the target memory area from MEM_ADDR
-   to MEM_ADDR + MEM_LEN.  Update the data already read from the target
-   (in BUF) if necessary.  */
-
-void check_mem_read (CORE_ADDR mem_addr, unsigned char *buf, int mem_len);
-
-/* See if any breakpoints shadow the target memory area from MEM_ADDR
-   to MEM_ADDR + MEM_LEN.  Update the data to be written to the target
-   (in BUF, a copy of MYADDR on entry) if necessary, as well as the
-   original data for any breakpoints.  */
-
-void check_mem_write (CORE_ADDR mem_addr,
-		      unsigned char *buf, const unsigned char *myaddr, int mem_len);
-
-/* Delete all breakpoints.  */
-
-void delete_all_breakpoints (void);
-
-/* Clear the "inserted" flag in all breakpoints of PROC.  */
-
-void mark_breakpoints_out (struct process_info *proc);
-
-/* Delete all breakpoints, but do not try to un-insert them from the
-   inferior.  */
-
-void free_all_breakpoints (struct process_info *proc);
-
-/* Check if breakpoints still seem to be inserted in the inferior.  */
-
-void validate_breakpoints (void);
-
-/* Insert a fast tracepoint jump at WHERE, using instruction INSN, of
-   LENGTH bytes.  */
-
-struct fast_tracepoint_jump *set_fast_tracepoint_jump (CORE_ADDR where,
-						       unsigned char *insn,
-						       ULONGEST length);
-
-/* Increment reference counter of JP.  */
-void inc_ref_fast_tracepoint_jump (struct fast_tracepoint_jump *jp);
-
-/* Delete fast tracepoint jump TODEL from our tables, and uninsert if
-   from memory.  */
-
-int delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel);
-
-/* Returns true if there's fast tracepoint jump set at WHERE.  */
-
-int fast_tracepoint_jump_here (CORE_ADDR);
-
-/* Uninsert fast tracepoint jumps at WHERE (and change their status to
-   uninserted).  This still leaves the tracepoints in the table.  */
-
-void uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc);
-
-/* Reinsert fast tracepoint jumps at WHERE (and change their status to
-   inserted).  */
-
-void reinsert_fast_tracepoint_jumps_at (CORE_ADDR where);
-
-/* Insert a memory breakpoint.  */
-
-int insert_memory_breakpoint (struct raw_breakpoint *bp);
-
-/* Remove a previously inserted memory breakpoint.  */
-
-int remove_memory_breakpoint (struct raw_breakpoint *bp);
-
-/* Create a new breakpoint list in CHILD_THREAD's process that is a
-   copy of breakpoint list in PARENT_THREAD's process.  */
-
-void clone_all_breakpoints (struct thread_info *child_thread,
-			    const struct thread_info *parent_thread);
-
-#endif /* GDBSERVER_MEM_BREAK_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/notif.c ./gdb/gdbserver/notif.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/notif.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/notif.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,154 +0,0 @@
-/* Notification to GDB.
-   Copyright (C) 1989-2020 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/>.  */
-
-/* Async notifications to GDB.  When the state of remote target is
-   changed or something interesting to GDB happened, async
-   notifications are used to tell GDB.
-
-   Each type of notification is represented by an object
-   'struct notif_server', in which there is a queue for events to GDB
-   represented by 'struct notif_event'.  GDBserver writes (by means of
-   'write' field) each event in the queue into the buffer and send the
-   contents in buffer to GDB.  The contents in buffer is specified in
-   RSP.  See more in the comments to field 'queue' of
-   'struct notif_server'.
-
-   Here is the workflow of sending events and managing queue:
-   1.  At any time, when something interesting FOO happens, a object
-   of 'struct notif_event' or its sub-class EVENT is created for FOO.
-
-   2.  Enque EVENT to the 'queue' field of 'struct notif_server' for
-   FOO and send corresponding notification packet to GDB if EVENT is
-   the first one.
-   #1 and #2 are done by function 'notif_push'.
-
-   3.  EVENT is not deque'ed until the ack of FOO from GDB arrives.
-   Before ack of FOO arrives, FOO happens again, a new object of
-   EVENT is created and enque EVENT silently.
-   Once GDB has a chance to ack to FOO, it sends an ack to GDBserver,
-   and GDBserver repeatedly sends events to GDB and gets ack of FOO,
-   until queue is empty.  Then, GDBserver sends 'OK' to GDB that all
-   queued notification events are done.
-
-   # 3 is done by function 'handle_notif_ack'.  */
-
-#include "server.h"
-#include "notif.h"
-
-static struct notif_server *notifs[] =
-{
-  &notif_stop,
-};
-
-/* Write another event or an OK, if there are no more left, to
-   OWN_BUF.  */
-
-void
-notif_write_event (struct notif_server *notif, char *own_buf)
-{
-  if (!notif->queue.empty ())
-    {
-      struct notif_event *event = notif->queue.front ();
-
-      notif->write (event, own_buf);
-    }
-  else
-    write_ok (own_buf);
-}
-
-/* Handle the ack in buffer OWN_BUF,and packet length is PACKET_LEN.
-   Return 1 if the ack is handled, and return 0 if the contents
-   in OWN_BUF is not a ack.  */
-
-int
-handle_notif_ack (char *own_buf, int packet_len)
-{
-  size_t i;
-  struct notif_server *np;
-
-  for (i = 0; i < ARRAY_SIZE (notifs); i++)
-    {
-      const char *ack_name = notifs[i]->ack_name;
-
-      if (startswith (own_buf, ack_name)
-	  && packet_len == strlen (ack_name))
-	break;
-    }
-
-  if (i == ARRAY_SIZE (notifs))
-    return 0;
-
-  np = notifs[i];
-
-  /* If we're waiting for GDB to acknowledge a pending event,
-     consider that done.  */
-  if (!np->queue.empty ())
-    {
-      struct notif_event *head = np->queue.front ();
-      np->queue.pop_front ();
-
-      if (remote_debug)
-	debug_printf ("%s: acking %d\n", np->ack_name,
-		      (int) np->queue.size ());
-
-      delete head;
-    }
-
-  notif_write_event (np, own_buf);
-
-  return 1;
-}
-
-/* Put EVENT to the queue of NOTIF.  */
-
-void
-notif_event_enque (struct notif_server *notif,
-		   struct notif_event *event)
-{
-  notif->queue.push_back (event);
-
-  if (remote_debug)
-    debug_printf ("pending events: %s %d\n", notif->notif_name,
-		  (int) notif->queue.size ());
-
-}
-
-/* Push one event NEW_EVENT of notification NP into NP->queue.  */
-
-void
-notif_push (struct notif_server *np, struct notif_event *new_event)
-{
-  bool is_first_event = np->queue.empty ();
-
-  /* Something interesting.  Tell GDB about it.  */
-  notif_event_enque (np, new_event);
-
-  /* If this is the first stop reply in the queue, then inform GDB
-     about it, by sending a corresponding notification.  */
-  if (is_first_event)
-    {
-      char buf[PBUFSIZ];
-      char *p = buf;
-
-      xsnprintf (p, PBUFSIZ, "%s:", np->notif_name);
-      p += strlen (p);
-
-      np->write (new_event, p);
-      putpkt_notif (buf);
-    }
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/notif.h ./gdb/gdbserver/notif.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/notif.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/notif.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,68 +0,0 @@
-/* Notification to GDB.
-   Copyright (C) 1989-2020 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 GDBSERVER_NOTIF_H
-#define GDBSERVER_NOTIF_H
-
-#include "target.h"
-#include <list>
-
-/* Structure holding information related to a single event.  We
-   keep a queue of these to push to GDB.  It can be extended if
-   the event of given notification contains more information.  */
-
-struct notif_event
-{
-  virtual ~notif_event ()
-  {
-  }
-
-  /* No payload needed.  */
-};
-
-/* A type notification to GDB.  An object of 'struct notif_server'
-   represents a type of notification.  */
-
-typedef struct notif_server
-{
-  /* The name of ack packet, for example, 'vStopped'.  */
-  const char *ack_name;
-
-  /* The notification packet, for example, '%Stop'.  Note that '%' is
-     not in 'notif_name'.  */
-  const char *notif_name;
-
-  /* A queue of events to GDB.  A new notif_event can be enque'ed
-     into QUEUE at any appropriate time, and the notif_reply is
-     deque'ed only when the ack from GDB arrives.  */
-  std::list<notif_event *> queue;
-
-  /* Write event EVENT to OWN_BUF.  */
-  void (*write) (struct notif_event *event, char *own_buf);
-} *notif_server_p;
-
-extern struct notif_server notif_stop;
-
-int handle_notif_ack (char *own_buf, int packet_len);
-void notif_write_event (struct notif_server *notif, char *own_buf);
-
-void notif_push (struct notif_server *np, struct notif_event *event);
-void notif_event_enque (struct notif_server *notif,
-			struct notif_event *event);
-
-#endif /* GDBSERVER_NOTIF_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/nto-low.c ./gdb/gdbserver/nto-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/nto-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/nto-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1026 +0,0 @@
-/* QNX Neutrino specific low level interface, for the remote server
-   for GDB.
-   Copyright (C) 2009-2020 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 "server.h"
-#include "gdbthread.h"
-#include "nto-low.h"
-#include "hostio.h"
-#include "debug.h"
-
-#include <limits.h>
-#include <fcntl.h>
-#include <spawn.h>
-#include <sys/procfs.h>
-#include <sys/auxv.h>
-#include <sys/iomgr.h>
-#include <sys/neutrino.h>
-
-
-int using_threads = 1;
-
-const struct target_desc *nto_tdesc;
-
-static void
-nto_trace (const char *fmt, ...)
-{
-  va_list arg_list;
-
-  if (debug_threads == 0)
-    return;
-  fprintf (stderr, "nto:");
-  va_start (arg_list, fmt);
-  vfprintf (stderr, fmt, arg_list);
-  va_end (arg_list);
-}
-
-#define TRACE nto_trace
-
-/* Structure holding neutrino specific information about
-   inferior.  */
-
-struct nto_inferior
-{
-  char nto_procfs_path[PATH_MAX];
-  int ctl_fd;
-  pid_t pid;
-  int exit_signo; /* For tracking exit status.  */
-};
-
-static struct nto_inferior nto_inferior;
-
-static void
-init_nto_inferior (struct nto_inferior *nto_inferior)
-{
-  memset (nto_inferior, 0, sizeof (struct nto_inferior));
-  nto_inferior->ctl_fd = -1;
-  nto_inferior->pid = -1;
-}
-
-static void
-do_detach (void)
-{
-  if (nto_inferior.ctl_fd != -1)
-    {
-      nto_trace ("Closing fd\n");
-      close (nto_inferior.ctl_fd);
-      init_nto_inferior (&nto_inferior);
-    }
-}
-
-/* Set current thread. Return 1 on success, 0 otherwise.  */
-
-static int
-nto_set_thread (ptid_t ptid)
-{
-  int res = 0;
-
-  TRACE ("%s pid: %d tid: %ld\n", __func__, ptid.pid (),
-	 ptid.lwp ());
-  if (nto_inferior.ctl_fd != -1
-      && ptid != null_ptid
-      && ptid != minus_one_ptid)
-    {
-      pthread_t tid = ptid.lwp ();
-
-      if (EOK == devctl (nto_inferior.ctl_fd, DCMD_PROC_CURTHREAD, &tid,
-	  sizeof (tid), 0))
-	res = 1;
-      else
-	TRACE ("%s: Error: failed to set current thread\n", __func__);
-    }
-  return res;
-}
-
-/* This function will determine all alive threads.  Note that we do not list
-   dead but unjoined threads even though they are still in the process' thread
-   list.  
-
-   NTO_INFERIOR must not be NULL.  */
-
-static void
-nto_find_new_threads (struct nto_inferior *nto_inferior)
-{
-  pthread_t tid;
-
-  TRACE ("%s pid:%d\n", __func__, nto_inferior->pid);
-
-  if (nto_inferior->ctl_fd == -1)
-    return;
-
-  for (tid = 1;; ++tid)
-    {
-      procfs_status status;
-      ptid_t ptid;
-      int err;
-
-      status.tid = tid;
-      err = devctl (nto_inferior->ctl_fd, DCMD_PROC_TIDSTATUS, &status,
-		    sizeof (status), 0);
-
-      if (err != EOK || status.tid == 0)
-	break;
-
-      /* All threads in between are gone.  */
-      while (tid != status.tid || status.state == STATE_DEAD)
-	{
-	  struct thread_info *ti;
-
-	  ptid = ptid_t (nto_inferior->pid, tid, 0);
-	  ti = find_thread_ptid (ptid);
-	  if (ti != NULL)
-	    {
-	      TRACE ("Removing thread %d\n", tid);
-	      remove_thread (ti);
-	    }
-	  if (tid == status.tid)
-	    break;
-	  ++tid;
-	}
-
-      if (status.state != STATE_DEAD)
-	{
-	  TRACE ("Adding thread %d\n", tid);
-	  ptid = ptid_t (nto_inferior->pid, tid, 0);
-	  if (!find_thread_ptid (ptid))
-	    add_thread (ptid, NULL);
-	}
-    }
-}
-
-/* Given pid, open procfs path.  */
-
-static pid_t
-do_attach (pid_t pid)
-{
-  procfs_status status;
-  struct sigevent event;
-
-  if (nto_inferior.ctl_fd != -1)
-    {
-      close (nto_inferior.ctl_fd);
-      init_nto_inferior (&nto_inferior);
-    }
-  xsnprintf (nto_inferior.nto_procfs_path, PATH_MAX - 1, "/proc/%d/as", pid);
-  nto_inferior.ctl_fd = open (nto_inferior.nto_procfs_path, O_RDWR);
-  if (nto_inferior.ctl_fd == -1)
-    {
-      TRACE ("Failed to open %s\n", nto_inferior.nto_procfs_path);
-      init_nto_inferior (&nto_inferior);
-      return -1;
-    }
-  if (devctl (nto_inferior.ctl_fd, DCMD_PROC_STOP, &status, sizeof (status), 0)
-      != EOK)
-    {
-      do_detach ();
-      return -1;
-    }
-  nto_inferior.pid = pid;
-  /* Define a sigevent for process stopped notification.  */
-  event.sigev_notify = SIGEV_SIGNAL_THREAD;
-  event.sigev_signo = SIGUSR1;
-  event.sigev_code = 0;
-  event.sigev_value.sival_ptr = NULL;
-  event.sigev_priority = -1;
-  devctl (nto_inferior.ctl_fd, DCMD_PROC_EVENT, &event, sizeof (event), 0);
-
-  if (devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status),
-	      0) == EOK
-      && (status.flags & _DEBUG_FLAG_STOPPED))
-    {
-      ptid_t ptid;
-      struct process_info *proc;
-
-      kill (pid, SIGCONT);
-      ptid = ptid_t (status.pid, status.tid, 0);
-      the_low_target.arch_setup ();
-      proc = add_process (status.pid, 1);
-      proc->tdesc = nto_tdesc;
-      TRACE ("Adding thread: pid=%d tid=%ld\n", status.pid,
-	     ptid.lwp ());
-      nto_find_new_threads (&nto_inferior);
-    }
-  else
-    {
-      do_detach ();
-      return -1;
-    }
-
-  return pid;
-}
-
-/* Read or write LEN bytes from/to inferior's MEMADDR memory address
-   into gdbservers's MYADDR buffer.  Return number of bytes actually
-   transfered.  */
-
-static int
-nto_xfer_memory (off_t memaddr, unsigned char *myaddr, int len,
-		 int dowrite)
-{
-  int nbytes = 0;
-
-  if (lseek (nto_inferior.ctl_fd, memaddr, SEEK_SET) == memaddr)
-    {
-      if (dowrite)
-	nbytes = write (nto_inferior.ctl_fd, myaddr, len);
-      else
-	nbytes = read (nto_inferior.ctl_fd, myaddr, len);
-      if (nbytes < 0)
-	nbytes = 0;
-    }
-  if (nbytes == 0)
-    {
-      int e = errno;
-      TRACE ("Error in %s : errno=%d (%s)\n", __func__, e, safe_strerror (e));
-    }
-  return nbytes;
-}
-
-/* Insert or remove breakpoint or watchpoint at address ADDR.
-   TYPE can be one of Neutrino breakpoint types.  SIZE must be 0 for
-   inserting the point, -1 for removing it.  
-
-   Return 0 on success, 1 otherwise.  */
-
-static int
-nto_breakpoint (CORE_ADDR addr, int type, int size)
-{
-  procfs_break brk;
-
-  brk.type = type;
-  brk.addr = addr;
-  brk.size = size;
-  if (devctl (nto_inferior.ctl_fd, DCMD_PROC_BREAK, &brk, sizeof (brk), 0)
-      != EOK)
-    return 1;
-  return 0;
-}
-
-/* Read auxiliary vector from inferior's initial stack into gdbserver's
-   MYADDR buffer, up to LEN bytes.  
-
-   Return number of bytes read.  */
-
-static int
-nto_read_auxv_from_initial_stack (CORE_ADDR initial_stack,
-				  unsigned char *myaddr,
-				  unsigned int len)
-{
-  int data_ofs = 0;
-  int anint;
-  unsigned int len_read = 0;
-
-  /* Skip over argc, argv and envp... Comment from ldd.c:
-
-     The startup frame is set-up so that we have:
-     auxv
-     NULL
-     ...
-     envp2
-     envp1 <----- void *frame + (argc + 2) * sizeof(char *)
-     NULL
-     ...
-     argv2
-     argv1
-     argc  <------ void * frame
-
-     On entry to ldd, frame gives the address of argc on the stack.  */
-  if (nto_xfer_memory (initial_stack, (unsigned char *)&anint,
-		       sizeof (anint), 0) != sizeof (anint))
-    return 0;
-
-  /* Size of pointer is assumed to be 4 bytes (32 bit arch. ) */
-  data_ofs += (anint + 2) * sizeof (void *); /* + 2 comes from argc itself and
-						NULL terminating pointer in
-						argv.  */
-
-  /* Now loop over env table:  */
-  while (nto_xfer_memory (initial_stack + data_ofs,
-			  (unsigned char *)&anint, sizeof (anint), 0)
-	 == sizeof (anint))
-    {
-      data_ofs += sizeof (anint);
-      if (anint == 0)
-	break;
-    }
-  initial_stack += data_ofs;
-
-  memset (myaddr, 0, len);
-  while (len_read <= len - sizeof (auxv_t))
-    {
-      auxv_t *auxv = (auxv_t *)myaddr;
-
-      /* Search backwards until we have read AT_PHDR (num. 3),
-	 AT_PHENT (num 4), AT_PHNUM (num 5)  */
-      if (nto_xfer_memory (initial_stack, (unsigned char *)auxv,
-			   sizeof (auxv_t), 0) == sizeof (auxv_t))
-	{
-	  if (auxv->a_type != AT_NULL)
-	    {
-	      auxv++;
-	      len_read += sizeof (auxv_t);
-	    }
-	  if (auxv->a_type == AT_PHNUM) /* That's all we need.  */
-	    break;
-	  initial_stack += sizeof (auxv_t);
-	}
-      else
-	break;
-    }
-  TRACE ("auxv: len_read: %d\n", len_read);
-  return len_read;
-}
-
-/* Start inferior specified by PROGRAM, using PROGRAM_ARGS as its
-   arguments.  */
-
-static int
-nto_create_inferior (const char *program,
-		     const std::vector<char *> &program_args)
-{
-  struct inheritance inherit;
-  pid_t pid;
-  sigset_t set;
-  std::string str_program_args = stringify_argv (program_args);
-
-  TRACE ("%s %s\n", __func__, program);
-  /* Clear any pending SIGUSR1's but keep the behavior the same.  */
-  signal (SIGUSR1, signal (SIGUSR1, SIG_IGN));
-
-  sigemptyset (&set);
-  sigaddset (&set, SIGUSR1);
-  sigprocmask (SIG_UNBLOCK, &set, NULL);
-
-  memset (&inherit, 0, sizeof (inherit));
-  inherit.flags |= SPAWN_SETGROUP | SPAWN_HOLD;
-  inherit.pgroup = SPAWN_NEWPGROUP;
-  pid = spawnp (program, 0, NULL, &inherit,
-		(char *) str_program_args.c_str (), 0);
-  sigprocmask (SIG_BLOCK, &set, NULL);
-
-  if (pid == -1)
-    return -1;
-
-  if (do_attach (pid) != pid)
-    return -1;
-
-  return pid;
-}
-
-/* Attach to process PID.  */
-
-static int
-nto_attach (unsigned long pid)
-{
-  TRACE ("%s %ld\n", __func__, pid);
-  if (do_attach (pid) != pid)
-    error ("Unable to attach to %ld\n", pid);
-  return 0;
-}
-
-/* Send signal to process PID.  */
-
-static int
-nto_kill (process_info *proc)
-{
-  int pid = proc->pid;
-
-  TRACE ("%s %d\n", __func__, pid);
-  kill (pid, SIGKILL);
-  do_detach ();
-  return 0;
-}
-
-/* Detach from process PID.  */
-
-static int
-nto_detach (process_info *proc)
-{
-  TRACE ("%s %d\n", __func__, proc->pid);
-  do_detach ();
-  return 0;
-}
-
-static void
-nto_mourn (struct process_info *process)
-{
-  remove_process (process);
-}
-
-/* Check if the given thread is alive.  
-
-   Return 1 if alive, 0 otherwise.  */
-
-static int
-nto_thread_alive (ptid_t ptid)
-{
-  int res;
-
-  TRACE ("%s pid:%d tid:%d\n", __func__, ptid.pid (),
-	 ptid.lwp ());
-  if (SignalKill (0, ptid.pid (), ptid.lwp (),
-		  0, 0, 0) == -1)
-    res = 0;
-  else
-    res = 1;
-  TRACE ("%s: %s\n", __func__, res ? "yes" : "no");
-  return res;
-}
-
-/* Resume inferior's execution.  */
-
-static void
-nto_resume (struct thread_resume *resume_info, size_t n)
-{
-  /* We can only work in all-stop mode.  */
-  procfs_status status;
-  procfs_run run;
-  int err;
-
-  TRACE ("%s\n", __func__);
-  /* Workaround for aliasing rules violation. */
-  sigset_t *run_fault = (sigset_t *) (void *) &run.fault;
-
-  nto_set_thread (resume_info->thread);
-
-  run.flags = _DEBUG_RUN_FAULT | _DEBUG_RUN_TRACE;
-  if (resume_info->kind == resume_step)
-    run.flags |= _DEBUG_RUN_STEP;
-  run.flags |= _DEBUG_RUN_ARM;
-
-  sigemptyset (run_fault);
-  sigaddset (run_fault, FLTBPT);
-  sigaddset (run_fault, FLTTRACE);
-  sigaddset (run_fault, FLTILL);
-  sigaddset (run_fault, FLTPRIV);
-  sigaddset (run_fault, FLTBOUNDS);
-  sigaddset (run_fault, FLTIOVF);
-  sigaddset (run_fault, FLTIZDIV);
-  sigaddset (run_fault, FLTFPE);
-  sigaddset (run_fault, FLTPAGE);
-  sigaddset (run_fault, FLTSTACK);
-  sigaddset (run_fault, FLTACCESS);
-
-  sigemptyset (&run.trace);
-  if (resume_info->sig)
-    {
-      int signal_to_pass;
-
-      devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status),
-	      0);
-      signal_to_pass = resume_info->sig;
-      if (status.why & (_DEBUG_WHY_SIGNALLED | _DEBUG_WHY_FAULTED))
-	{
-	  if (signal_to_pass != status.info.si_signo)
-	    {
-	      kill (status.pid, signal_to_pass);
-	      run.flags |= _DEBUG_RUN_CLRFLT | _DEBUG_RUN_CLRSIG;
-	    }
-	  else		/* Let it kill the program without telling us.  */
-	    sigdelset (&run.trace, signal_to_pass);
-	}
-    }
-  else
-    run.flags |= _DEBUG_RUN_CLRSIG | _DEBUG_RUN_CLRFLT;
-
-  sigfillset (&run.trace);
-
-  regcache_invalidate ();
-
-  err = devctl (nto_inferior.ctl_fd, DCMD_PROC_RUN, &run, sizeof (run), 0);
-  if (err != EOK)
-    TRACE ("Error: %d \"%s\"\n", err, safe_strerror (err));
-}
-
-/* Wait for inferior's event.  
-
-   Return ptid of thread that caused the event.  */
-
-static ptid_t
-nto_wait (ptid_t ptid,
-	  struct target_waitstatus *ourstatus, int target_options)
-{
-  sigset_t set;
-  siginfo_t info;
-  procfs_status status;
-  const int trace_mask = (_DEBUG_FLAG_TRACE_EXEC | _DEBUG_FLAG_TRACE_RD
-			  | _DEBUG_FLAG_TRACE_WR | _DEBUG_FLAG_TRACE_MODIFY);
-
-  TRACE ("%s\n", __func__);
-
-  ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-
-  sigemptyset (&set);
-  sigaddset (&set, SIGUSR1);
-
-  devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0);
-  while (!(status.flags & _DEBUG_FLAG_ISTOP))
-    {
-      sigwaitinfo (&set, &info);
-      devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status),
-	      0);
-    }
-  nto_find_new_threads (&nto_inferior);
-
-  if (status.flags & _DEBUG_FLAG_SSTEP)
-    {
-      TRACE ("SSTEP\n");
-      ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = GDB_SIGNAL_TRAP;
-    }
-  /* Was it a breakpoint?  */
-  else if (status.flags & trace_mask)
-    {
-      TRACE ("STOPPED\n");
-      ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = GDB_SIGNAL_TRAP;
-    }
-  else if (status.flags & _DEBUG_FLAG_ISTOP)
-    {
-      TRACE ("ISTOP\n");
-      switch (status.why)
-	{
-	case _DEBUG_WHY_SIGNALLED:
-	  TRACE ("  SIGNALLED\n");
-	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-	  ourstatus->value.sig =
-	    gdb_signal_from_host (status.info.si_signo);
-	  nto_inferior.exit_signo = ourstatus->value.sig;
-	  break;
-	case _DEBUG_WHY_FAULTED:
-	  TRACE ("  FAULTED\n");
-	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-	  if (status.info.si_signo == SIGTRAP)
-	    {
-	      ourstatus->value.sig = 0;
-	      nto_inferior.exit_signo = 0;
-	    }
-	  else
-	    {
-	      ourstatus->value.sig =
-		gdb_signal_from_host (status.info.si_signo);
-	      nto_inferior.exit_signo = ourstatus->value.sig;
-	    }
-	  break;
-
-	case _DEBUG_WHY_TERMINATED:
-	  {
-	    int waitval = 0;
-
-	    TRACE ("  TERMINATED\n");
-	    waitpid (ptid.pid (), &waitval, WNOHANG);
-	    if (nto_inferior.exit_signo)
-	      {
-		/* Abnormal death.  */
-		ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-		ourstatus->value.sig = nto_inferior.exit_signo;
-	      }
-	    else
-	      {
-		/* Normal death.  */
-		ourstatus->kind = TARGET_WAITKIND_EXITED;
-		ourstatus->value.integer = WEXITSTATUS (waitval);
-	      }
-	    nto_inferior.exit_signo = 0;
-	    break;
-	  }
-
-	case _DEBUG_WHY_REQUESTED:
-	  TRACE ("REQUESTED\n");
-	  /* We are assuming a requested stop is due to a SIGINT.  */
-	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-	  ourstatus->value.sig = GDB_SIGNAL_INT;
-	  nto_inferior.exit_signo = 0;
-	  break;
-	}
-    }
-
-  return ptid_t (status.pid, status.tid, 0);
-}
-
-/* Fetch inferior's registers for currently selected thread (CURRENT_INFERIOR).
-   If REGNO is -1, fetch all registers, or REGNO register only otherwise.  */
-
-static void
-nto_fetch_registers (struct regcache *regcache, int regno)
-{
-  int regsize;
-  procfs_greg greg;
-
-  TRACE ("%s (regno=%d)\n", __func__, regno);
-  if (regno >= the_low_target.num_regs)
-    return;
-
-  if (current_thread == NULL)
-    {
-      TRACE ("current_thread is NULL\n");
-      return;
-    }
-  ptid_t ptid = ptid_of (current_thread);
-  if (!nto_set_thread (ptid))
-    return;
-
-  if (devctl (nto_inferior.ctl_fd, DCMD_PROC_GETGREG, &greg, sizeof (greg),
-	      &regsize) == EOK)
-    {
-      if (regno == -1) /* All registers. */
-	{
-	  for (regno = 0; regno != the_low_target.num_regs; ++regno)
-	    {
-	      const unsigned int registeroffset
-		= the_low_target.register_offset (regno);
-	      supply_register (regcache, regno,
-			       ((char *)&greg) + registeroffset);
-	    }
-	}
-      else
-	{
-	  const unsigned int registeroffset
-	    = the_low_target.register_offset (regno);
-	  if (registeroffset == -1)
-	    return;
-	  supply_register (regcache, regno, ((char *)&greg) + registeroffset);
-	}
-    }
-  else
-    TRACE ("ERROR reading registers from inferior.\n");
-}
-
-/* Store registers for currently selected thread (CURRENT_INFERIOR).  
-   We always store all registers, regardless of REGNO.  */
-
-static void
-nto_store_registers (struct regcache *regcache, int regno)
-{
-  procfs_greg greg;
-  int err;
-
-  TRACE ("%s (regno:%d)\n", __func__, regno);
-
-  if (current_thread == NULL)
-    {
-      TRACE ("current_thread is NULL\n");
-      return;
-    }
-  ptid_t ptid = ptid_of (current_thread);
-  if (!nto_set_thread (ptid))
-    return;
-
-  memset (&greg, 0, sizeof (greg));
-  for  (regno = 0; regno != the_low_target.num_regs; ++regno)
-    {
-      const unsigned int regoffset
-	= the_low_target.register_offset (regno);
-      collect_register (regcache, regno, ((char *)&greg) + regoffset);
-    }
-  err = devctl (nto_inferior.ctl_fd, DCMD_PROC_SETGREG, &greg, sizeof (greg),
-		0);
-  if (err != EOK)
-    TRACE ("Error: setting registers.\n");
-}
-
-/* Read LEN bytes from inferior's memory address MEMADDR into
-   gdbserver's MYADDR buffer.  
-
-   Return 0 on success -1 otherwise.  */
-
-static int
-nto_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  TRACE ("%s memaddr:0x%08lx, len:%d\n", __func__, memaddr, len);
-
-  if (nto_xfer_memory (memaddr, myaddr, len, 0) != len)
-    {
-      TRACE ("Failed to read memory\n");
-      return -1;
-    }
-
-  return 0;
-}
-
-/* Write LEN bytes from gdbserver's buffer MYADDR into inferior's
-   memory at address MEMADDR.  
-
-   Return 0 on success -1 otherwise.  */
-
-static int
-nto_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
-{
-  int len_written;
-
-  TRACE ("%s memaddr: 0x%08llx len: %d\n", __func__, memaddr, len);
-  if ((len_written = nto_xfer_memory (memaddr, (unsigned char *)myaddr, len,
-				      1))
-      != len)
-    {
-      TRACE ("Wanted to write: %d but written: %d\n", len, len_written);
-      return -1;
-    }
-
-  return 0;
-}
-
-/* Stop inferior.  We always stop all threads.  */
-
-static void
-nto_request_interrupt (void)
-{
-  TRACE ("%s\n", __func__);
-  nto_set_thread (ptid_t (nto_inferior.pid, 1, 0));
-  if (EOK != devctl (nto_inferior.ctl_fd, DCMD_PROC_STOP, NULL, 0, 0))
-    TRACE ("Error stopping inferior.\n");
-}
-
-/* Read auxiliary vector from inferior's memory into gdbserver's buffer
-   MYADDR.  We always read whole auxv.  
-   
-   Return number of bytes stored in MYADDR buffer, 0 if OFFSET > 0
-   or -1 on error.  */
-
-static int
-nto_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
-{
-  int err;
-  CORE_ADDR initial_stack;
-  procfs_info procinfo;
-
-  TRACE ("%s\n", __func__);
-  if (offset > 0)
-    return 0;
-
-  err = devctl (nto_inferior.ctl_fd, DCMD_PROC_INFO, &procinfo,
-		sizeof procinfo, 0);
-  if (err != EOK)
-    return -1;
-
-  initial_stack = procinfo.initial_stack;
-
-  return nto_read_auxv_from_initial_stack (initial_stack, myaddr, len);
-}
-
-static int
-nto_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_SW_BP:
-    case Z_PACKET_HW_BP:
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_READ_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-/* Insert {break/watch}point at address ADDR.  SIZE is not used.  */
-
-static int
-nto_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int size, struct raw_breakpoint *bp)
-{
-  int wtype = _DEBUG_BREAK_HW; /* Always request HW.  */
-
-  TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, size);
-  switch (type)
-    {
-    case raw_bkpt_type_sw:
-      wtype = _DEBUG_BREAK_EXEC;
-      break;
-    case raw_bkpt_type_hw:
-      wtype |= _DEBUG_BREAK_EXEC;
-      break;
-    case raw_bkpt_type_write_wp:
-      wtype |= _DEBUG_BREAK_RW;
-      break;
-    case raw_bkpt_type_read_wp:
-      wtype |= _DEBUG_BREAK_RD;
-      break;
-    case raw_bkpt_type_access_wp:
-      wtype |= _DEBUG_BREAK_RW;
-      break;
-    default:
-      return 1; /* Not supported.  */
-    }
-  return nto_breakpoint (addr, wtype, 0);
-}
-
-/* Remove {break/watch}point at address ADDR.  SIZE is not used.  */
-
-static int
-nto_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		  int size, struct raw_breakpoint *bp)
-{
-  int wtype = _DEBUG_BREAK_HW; /* Always request HW.  */
-
-  TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, size);
-  switch (type)
-    {
-    case raw_bkpt_type_sw:
-      wtype = _DEBUG_BREAK_EXEC;
-      break;
-    case raw_bkpt_type_hw:
-      wtype |= _DEBUG_BREAK_EXEC;
-      break;
-    case raw_bkpt_type_write_wp:
-      wtype |= _DEBUG_BREAK_RW;
-      break;
-    case raw_bkpt_type_read_wp:
-      wtype |= _DEBUG_BREAK_RD;
-      break;
-    case raw_bkpt_type_access_wp:
-      wtype |= _DEBUG_BREAK_RW;
-      break;
-    default:
-      return 1; /* Not supported.  */
-    }
-  return nto_breakpoint (addr, wtype, -1);
-}
-
-/* Check if the reason of stop for current thread (CURRENT_INFERIOR) is
-   a watchpoint.
-
-   Return 1 if stopped by watchpoint, 0 otherwise.  */
-
-static int
-nto_stopped_by_watchpoint (void)
-{
-  int ret = 0;
-
-  TRACE ("%s\n", __func__);
-  if (nto_inferior.ctl_fd != -1 && current_thread != NULL)
-    {
-      ptid_t ptid = ptid_of (current_thread);
-      if (nto_set_thread (ptid))
-	{
-	  const int watchmask = _DEBUG_FLAG_TRACE_RD | _DEBUG_FLAG_TRACE_WR
-				| _DEBUG_FLAG_TRACE_MODIFY;
-	  procfs_status status;
-	  int err;
-
-	  err = devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status,
-			sizeof (status), 0);
-	  if (err == EOK && (status.flags & watchmask))
-	    ret = 1;
-	}
-    }
-  TRACE ("%s: %s\n", __func__, ret ? "yes" : "no");
-  return ret;
-}
-
-/* Get instruction pointer for CURRENT_INFERIOR thread.  
-
-   Return inferior's instruction pointer value, or 0 on error.  */ 
-
-static CORE_ADDR
-nto_stopped_data_address (void)
-{
-  CORE_ADDR ret = (CORE_ADDR)0;
-
-  TRACE ("%s\n", __func__);
-  if (nto_inferior.ctl_fd != -1 && current_thread != NULL)
-    {
-      ptid_t ptid = ptid_of (current_thread);
-
-      if (nto_set_thread (ptid))
-	{
-	  procfs_status status;
-
-	  if (devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status,
-		      sizeof (status), 0) == EOK)
-	    ret = status.ip;
-	}
-    }
-  TRACE ("%s: 0x%08lx\n", __func__, ret);
-  return ret;
-}
-
-/* We do not currently support non-stop.  */
-
-static int
-nto_supports_non_stop (void)
-{
-  TRACE ("%s\n", __func__);
-  return 0;
-}
-
-/* Implementation of the target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-nto_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = the_low_target.breakpoint_len;
-  return the_low_target.breakpoint;
-}
-
-
-static struct target_ops nto_target_ops = {
-  nto_create_inferior,
-  NULL,  /* post_create_inferior */
-  nto_attach,
-  nto_kill,
-  nto_detach,
-  nto_mourn,
-  NULL, /* nto_join */
-  nto_thread_alive,
-  nto_resume,
-  nto_wait,
-  nto_fetch_registers,
-  nto_store_registers,
-  NULL, /* prepare_to_access_memory */
-  NULL, /* done_accessing_memory */
-  nto_read_memory,
-  nto_write_memory,
-  NULL, /* nto_look_up_symbols */
-  nto_request_interrupt,
-  nto_read_auxv,
-  nto_supports_z_point_type,
-  nto_insert_point,
-  nto_remove_point,
-  NULL, /* stopped_by_sw_breakpoint */
-  NULL, /* supports_stopped_by_sw_breakpoint */
-  NULL, /* stopped_by_hw_breakpoint */
-  NULL, /* supports_stopped_by_hw_breakpoint */
-  target_can_do_hardware_single_step,
-  nto_stopped_by_watchpoint,
-  nto_stopped_data_address,
-  NULL, /* nto_read_offsets */
-  NULL, /* thread_db_set_tls_address */
-  hostio_last_error_from_errno,
-  NULL, /* nto_qxfer_osdata */
-  NULL, /* xfer_siginfo */
-  nto_supports_non_stop,
-  NULL, /* async */
-  NULL, /* start_non_stop */
-  NULL, /* supports_multi_process */
-  NULL, /* supports_fork_events */
-  NULL, /* supports_vfork_events */
-  NULL, /* supports_exec_events */
-  NULL, /* handle_new_gdb_connection */
-  NULL, /* handle_monitor_command */
-  NULL, /* core_of_thread */
-  NULL, /* read_loadmap */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* read_pc */
-  NULL, /* write_pc */
-  NULL, /* thread_stopped */
-  NULL, /* get_tib_address */
-  NULL, /* pause_all */
-  NULL, /* unpause_all */
-  NULL, /* stabilize_threads */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* supports_disable_randomization */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* qxfer_libraries_svr4 */
-  NULL, /* support_agent */
-  NULL, /* enable_btrace */
-  NULL, /* disable_btrace */
-  NULL, /* read_btrace */
-  NULL, /* read_btrace_conf */
-  NULL, /* supports_range_stepping */
-  NULL, /* pid_to_exec_file */
-  NULL, /* multifs_open */
-  NULL, /* multifs_unlink */
-  NULL, /* multifs_readlink */
-  NULL, /* breakpoint_kind_from_pc */
-  nto_sw_breakpoint_from_kind,
-};
-
-
-/* Global function called by server.c.  Initializes QNX Neutrino
-   gdbserver.  */
-
-void
-initialize_low (void)
-{
-  sigset_t set;
-
-  TRACE ("%s\n", __func__);
-  set_target_ops (&nto_target_ops);
-
-  /* We use SIGUSR1 to gain control after we block waiting for a process.
-     We use sigwaitevent to wait.  */
-  sigemptyset (&set);
-  sigaddset (&set, SIGUSR1);
-  sigprocmask (SIG_BLOCK, &set, NULL);
-}
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/nto-low.h ./gdb/gdbserver/nto-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/nto-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/nto-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,49 +0,0 @@
-/* Internal interfaces for the QNX Neutrino specific target code for gdbserver.
-   Copyright (C) 2009-2020 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 GDBSERVER_NTO_LOW_H
-#define GDBSERVER_NTO_LOW_H
-
-struct target_desc;
-
-enum regset_type
-{
-  NTO_REG_GENERAL,
-  NTO_REG_FLOAT,
-  NTO_REG_SYSTEM,
-  NTO_REG_ALT,
-  NTO_REG_END
-};
-
-struct nto_target_ops
-{
-  /* Architecture specific setup.  */
-  void (*arch_setup) (void);
-  int num_regs;
-  int (*register_offset) (int gdbregno);
-  const unsigned char *breakpoint;
-  int breakpoint_len;
-};
-
-extern struct nto_target_ops the_low_target;
-
-/* The inferior's target description.  This is a global because the
-   LynxOS ports support neither bi-arch nor multi-process.  */
-extern const struct target_desc *nto_tdesc;
-
-#endif /* GDBSERVER_NTO_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/nto-x86-low.c ./gdb/gdbserver/nto-x86-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/nto-x86-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/nto-x86-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,109 +0,0 @@
-/* QNX Neutrino specific low level interface, for the remote server
-   for GDB.
-   Copyright (C) 2009-2020 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 "server.h"
-#include "nto-low.h"
-#include "regdef.h"
-#include "regcache.h"
-
-#include <x86/context.h>
-#include "gdbsupport/x86-xstate.h"
-#include "arch/i386.h"
-#include "x86-tdesc.h"
-
-const unsigned char x86_breakpoint[] = { 0xCC };
-#define x86_breakpoint_len 1
-
-/* Returns offset in appropriate Neutrino's context structure.
-   Defined in x86/context.h.
-   GDBREGNO is index into regs_i386 array.  It is autogenerated and
-   hopefully doesn't change.  */
-static int
-nto_x86_register_offset (int gdbregno)
-{
-  if (gdbregno >= 0 && gdbregno < 16)
-    {
-      X86_CPU_REGISTERS *dummy = (void*)0;
-      /* GPRs  */
-      switch (gdbregno)
-	{
-	case 0: 
-	  return (int)&(dummy->eax);
-	case 1:
-	  return (int)&(dummy->ecx);
-	case 2:
-	  return (int)&(dummy->edx);
-	case 3:
-	  return (int)&(dummy->ebx);
-	case 4:
-	  return (int)&(dummy->esp);
-	case 5:
-	  return (int)&(dummy->ebp);
-	case 6:
-	  return (int)&(dummy->esi);
-	case 7:
-	  return (int)&(dummy->edi);
-	case 8:
-	  return (int)&(dummy->eip);
-	case 9:
-	  return (int)&(dummy->efl);
-	case 10:
-	  return (int)&(dummy->cs);
-	case 11:
-	  return (int)&(dummy->ss);
-#ifdef __SEGMENTS__
-	case 12:
-	  return (int)&(dummy->ds);
-	case 13:
-	  return (int)&(dummy->es);
-	case 14:
-	  return (int)&(dummy->fs);
-	case 15:
-	  return (int)&(dummy->gs);
-#endif
-	default:
-	  return -1;
-	}
-    }
-  return -1;
-}
-
-static void
-nto_x86_arch_setup (void)
-{
-  the_low_target.num_regs = 16;
-  struct target_desc *tdesc
-    = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false);
-
-  init_target_desc (tdesc, i386_expedite_regs);
-
-  nto_tdesc = tdesc;
-}
-
-struct nto_target_ops the_low_target =
-{
-  nto_x86_arch_setup,
-  0, /* num_regs */
-  nto_x86_register_offset,
-  x86_breakpoint,
-  x86_breakpoint_len
-};
-
-
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/proc-service.c ./gdb/gdbserver/proc-service.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/proc-service.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/proc-service.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,165 +0,0 @@
-/* libthread_db helper functions for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 "server.h"
-
-/* This file is currently tied to GNU/Linux.  It should scale well to
-   another libthread_db implementation, with the appropriate gdbserver
-   hooks, but for now this means we can use GNU/Linux's target data.  */
-
-#include "linux-low.h"
-
-#include "gdb_proc_service.h"
-
-typedef struct ps_prochandle *gdb_ps_prochandle_t;
-typedef void *gdb_ps_read_buf_t;
-typedef const void *gdb_ps_write_buf_t;
-typedef size_t gdb_ps_size_t;
-
-#ifdef HAVE_LINUX_REGSETS
-#define HAVE_REGSETS
-#endif
-
-#ifdef HAVE_REGSETS
-static struct regset_info *
-gregset_info (void)
-{
-  int i = 0;
-  const struct regs_info *regs_info = (*the_low_target.regs_info) ();
-  struct regsets_info *regsets_info = regs_info->regsets_info;
-
-  while (regsets_info->regsets[i].size != -1)
-    {
-      if (regsets_info->regsets[i].type == GENERAL_REGS)
-	break;
-      i++;
-    }
-
-  return &regsets_info->regsets[i];
-}
-#endif
-
-/* Search for the symbol named NAME within the object named OBJ within
-   the target process PH.  If the symbol is found the address of the
-   symbol is stored in SYM_ADDR.  */
-
-ps_err_e
-ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj,
-		   const char *name, psaddr_t *sym_addr)
-{
-  CORE_ADDR addr;
-
-  if (thread_db_look_up_one_symbol (name, &addr) == 0)
-    return PS_NOSYM;
-
-  *sym_addr = (psaddr_t) (unsigned long) addr;
-  return PS_OK;
-}
-
-/* Read SIZE bytes from the target process PH at address ADDR and copy
-   them into BUF.  */
-
-ps_err_e
-ps_pdread (gdb_ps_prochandle_t ph, psaddr_t addr,
-	   gdb_ps_read_buf_t buf, gdb_ps_size_t size)
-{
-  if (read_inferior_memory ((uintptr_t) addr, (gdb_byte *) buf, size) != 0)
-    return PS_ERR;
-  return PS_OK;
-}
-
-/* Write SIZE bytes from BUF into the target process PH at address ADDR.  */
-
-ps_err_e
-ps_pdwrite (gdb_ps_prochandle_t ph, psaddr_t addr,
-	    gdb_ps_write_buf_t buf, gdb_ps_size_t size)
-{
-  if (target_write_memory ((uintptr_t) addr, (const gdb_byte *) buf, size)
-      != 0)
-    return PS_ERR;
-  return PS_OK;
-}
-
-/* Get the general registers of LWP LWPID within the target process PH
-   and store them in GREGSET.  */
-
-ps_err_e
-ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
-{
-#ifdef HAVE_REGSETS
-  struct lwp_info *lwp;
-  struct thread_info *reg_thread, *saved_thread;
-  struct regcache *regcache;
-
-  lwp = find_lwp_pid (ptid_t (lwpid));
-  if (lwp == NULL)
-    return PS_ERR;
-
-  reg_thread = get_lwp_thread (lwp);
-  saved_thread = current_thread;
-  current_thread = reg_thread;
-  regcache = get_thread_regcache (current_thread, 1);
-  gregset_info ()->fill_function (regcache, gregset);
-
-  current_thread = saved_thread;
-  return PS_OK;
-#else
-  return PS_ERR;
-#endif
-}
-
-/* Set the general registers of LWP LWPID within the target process PH
-   from GREGSET.  */
-
-ps_err_e
-ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset)
-{
-  /* Unneeded.  */
-  return PS_ERR;
-}
-
-/* Get the floating-point registers of LWP LWPID within the target
-   process PH and store them in FPREGSET.  */
-
-ps_err_e
-ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prfpregset_t *fpregset)
-{
-  /* Unneeded.  */
-  return PS_ERR;
-}
-
-/* Set the floating-point registers of LWP LWPID within the target
-   process PH from FPREGSET.  */
-
-ps_err_e
-ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prfpregset_t *fpregset)
-{
-  /* Unneeded.  */
-  return PS_ERR;
-}
-
-/* Return overall process id of the target PH.  Special for GNU/Linux
-   -- not used on Solaris.  */
-
-pid_t
-ps_getpid (gdb_ps_prochandle_t ph)
-{
-  return pid_of (current_thread);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/proc-service.list ./gdb/gdbserver/proc-service.list
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/proc-service.list	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/proc-service.list	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-/* -Wl,--dynamic-list symbols exported for libthread_db.
-
-   Copyright (C) 2010-2020 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/>.  */
-
-{
-  ps_get_thread_area;
-  ps_getpid;
-  ps_lgetfpregs;
-  ps_lgetregs;
-  ps_lsetfpregs;
-  ps_lsetregs;
-  ps_pdread;
-  ps_pdwrite;
-  ps_pglobal_lookup;
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/README ./gdb/gdbserver/README
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/README	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/README	1970-01-01 00:00:00.000000000 +0000
@@ -1,152 +0,0 @@
-		   README for GDBserver & GDBreplay
-		    by Stu Grossman and Fred Fish
-
-Introduction:
-
-This is GDBserver, a remote server for Un*x-like systems.  It can be used to
-control the execution of a program on a target system from a GDB on a different
-host.  GDB and GDBserver communicate using the standard remote serial protocol
-implemented in remote.c, and various *-stub.c files.  They communicate via
-either a serial line or a TCP connection.
-
-For more information about GDBserver, see the GDB manual.
-
-Usage (server (target) side):
-
-First, you need to have a copy of the program you want to debug put onto
-the target system.  The program can be stripped to save space if needed, as
-GDBserver doesn't care about symbols.  All symbol handling is taken care of by
-the GDB running on the host system.
-
-To use the server, you log on to the target system, and run the `gdbserver'
-program.  You must tell it (a) how to communicate with GDB, (b) the name of
-your program, and (c) its arguments.  The general syntax is:
-
-	target> gdbserver COMM PROGRAM [ARGS ...]
-
-For example, using a serial port, you might say:
-
-	target> gdbserver /dev/com1 emacs foo.txt
-
-This tells GDBserver to debug emacs with an argument of foo.txt, and to
-communicate with GDB via /dev/com1.  GDBserver now waits patiently for the
-host GDB to communicate with it.
-
-To use a TCP connection, you could say:
-
-	target> gdbserver host:2345 emacs foo.txt
-
-This says pretty much the same thing as the last example, except that we are
-going to communicate with the host GDB via TCP.  The `host:2345' argument means
-that we are expecting to see a TCP connection from `host' to local TCP port
-2345.  (Currently, the `host' part is ignored.)  You can choose any number you
-want for the port number as long as it does not conflict with any existing TCP
-ports on the target system.  This same port number must be used in the host
-GDBs `target remote' command, which will be described shortly.  Note that if
-you chose a port number that conflicts with another service, GDBserver will
-print an error message and exit.
-
-On some targets, GDBserver can also attach to running programs.  This is
-accomplished via the --attach argument.  The syntax is:
-
-	target> gdbserver --attach COMM PID
-
-PID is the process ID of a currently running process.  It isn't necessary
-to point GDBserver at a binary for the running process.
-
-Usage (host side):
-
-You need an unstripped copy of the target program on your host system, since
-GDB needs to examine it's symbol tables and such.  Start up GDB as you normally
-would, with the target program as the first argument.  (You may need to use the
---baud option if the serial line is running at anything except 9600 baud.)
-Ie: `gdb TARGET-PROG', or `gdb --baud BAUD TARGET-PROG'.  After that, the only
-new command you need to know about is `target remote'.  It's argument is either
-a device name (usually a serial device, like `/dev/ttyb'), or a HOST:PORT
-descriptor.  For example:
-
-	(gdb) target remote /dev/ttyb
-
-communicates with the server via serial line /dev/ttyb, and:
-
-	(gdb) target remote the-target:2345
-
-communicates via a TCP connection to port 2345 on host `the-target', where
-you previously started up GDBserver with the same port number.  Note that for
-TCP connections, you must start up GDBserver prior to using the `target remote'
-command, otherwise you may get an error that looks something like
-`Connection refused'.
-
-Building GDBserver:
-
-The supported targets as of November 2006 are:
-	arm-*-linux*
-	bfin-*-uclinux
-	bfin-*-linux-uclibc
-	crisv32-*-linux*
-	cris-*-linux*
-	i[34567]86-*-cygwin*
-	i[34567]86-*-linux*
-	i[34567]86-*-mingw*
-	ia64-*-linux*
-	m32r*-*-linux*
-	m68*-*-linux*
-	m68*-*-uclinux*
-	mips*64*-*-linux*
-	mips*-*-linux*
-	powerpc[64]-*-linux*
-	s390[x]-*-linux*
-	sh-*-linux*
-	spu*-*-*
-	x86_64-*-linux*
-
-Configuring GDBserver you should specify the same machine for host and
-target (which are the machine that GDBserver is going to run on.  This
-is not the same as the machine that GDB is going to run on; building
-GDBserver automatically as part of building a whole tree of tools does
-not currently work if cross-compilation is involved (we don't get the
-right CC in the Makefile, to start with)).
-
-Building GDBserver for your target is very straightforward.  If you build
-GDB natively on a target which GDBserver supports, it will be built
-automatically when you build GDB.  You can also build just GDBserver:
-
-	% mkdir obj
-	% cd obj
-	% path-to-gdbserver-sources/configure
-	% make
-
-If you prefer to cross-compile to your target, then you can also build
-GDBserver that way.  In a Bourne shell, for example:
-
-	% export CC=your-cross-compiler
-	% path-to-gdbserver-sources/configure your-target-name
-	% make
-
-Using GDBreplay:
-
-A special hacked down version of GDBserver can be used to replay remote
-debug log files created by GDB.  Before using the GDB "target" command to
-initiate a remote debug session, use "set remotelogfile <filename>" to tell
-GDB that you want to make a recording of the serial or tcp session.  Note
-that when replaying the session, GDB communicates with GDBreplay via tcp,
-regardless of whether the original session was via a serial link or tcp.
-
-Once you are done with the remote debug session, start GDBreplay and
-tell it the name of the log file and the host and port number that GDB
-should connect to (typically the same as the host running GDB):
-
-	$ gdbreplay logfile host:port
-
-Then start GDB (preferably in a different screen or window) and use the
-"target" command to connect to GDBreplay:
-
-	(gdb) target remote host:port
-
-Repeat the same sequence of user commands to GDB that you gave in the
-original debug session.  GDB should not be able to tell that it is talking
-to GDBreplay rather than a real target, all other things being equal.  Note
-that GDBreplay echos the command lines to stderr, as well as the contents of
-the packets it sends and receives.  The last command echoed by GDBreplay is
-the next command that needs to be typed to GDB to continue the session in
-sync with the original session.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/regcache.c ./gdb/gdbserver/regcache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/regcache.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/regcache.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,528 +0,0 @@
-/* Register support routines for the remote server for GDB.
-   Copyright (C) 2001-2020 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 "server.h"
-#include "regdef.h"
-#include "gdbthread.h"
-#include "tdesc.h"
-#include "gdbsupport/rsp-low.h"
-#ifndef IN_PROCESS_AGENT
-
-struct regcache *
-get_thread_regcache (struct thread_info *thread, int fetch)
-{
-  struct regcache *regcache;
-
-  regcache = thread_regcache_data (thread);
-
-  /* Threads' regcaches are created lazily, because biarch targets add
-     the main thread/lwp before seeing it stop for the first time, and
-     it is only after the target sees the thread stop for the first
-     time that the target has a chance of determining the process's
-     architecture.  IOW, when we first add the process's main thread
-     we don't know which architecture/tdesc its regcache should
-     have.  */
-  if (regcache == NULL)
-    {
-      struct process_info *proc = get_thread_process (thread);
-
-      gdb_assert (proc->tdesc != NULL);
-
-      regcache = new_register_cache (proc->tdesc);
-      set_thread_regcache_data (thread, regcache);
-    }
-
-  if (fetch && regcache->registers_valid == 0)
-    {
-      struct thread_info *saved_thread = current_thread;
-
-      current_thread = thread;
-      /* Invalidate all registers, to prevent stale left-overs.  */
-      memset (regcache->register_status, REG_UNAVAILABLE,
-	      regcache->tdesc->reg_defs.size ());
-      fetch_inferior_registers (regcache, -1);
-      current_thread = saved_thread;
-      regcache->registers_valid = 1;
-    }
-
-  return regcache;
-}
-
-/* See gdbsupport/common-regcache.h.  */
-
-struct regcache *
-get_thread_regcache_for_ptid (ptid_t ptid)
-{
-  return get_thread_regcache (find_thread_ptid (ptid), 1);
-}
-
-void
-regcache_invalidate_thread (struct thread_info *thread)
-{
-  struct regcache *regcache;
-
-  regcache = thread_regcache_data (thread);
-
-  if (regcache == NULL)
-    return;
-
-  if (regcache->registers_valid)
-    {
-      struct thread_info *saved_thread = current_thread;
-
-      current_thread = thread;
-      store_inferior_registers (regcache, -1);
-      current_thread = saved_thread;
-    }
-
-  regcache->registers_valid = 0;
-}
-
-/* See regcache.h.  */
-
-void
-regcache_invalidate_pid (int pid)
-{
-  /* Only invalidate the regcaches of threads of this process.  */
-  for_each_thread (pid, regcache_invalidate_thread);
-}
-
-/* See regcache.h.  */
-
-void
-regcache_invalidate (void)
-{
-  /* Only update the threads of the current process.  */
-  int pid = current_thread->id.pid ();
-
-  regcache_invalidate_pid (pid);
-}
-
-#endif
-
-struct regcache *
-init_register_cache (struct regcache *regcache,
-		     const struct target_desc *tdesc,
-		     unsigned char *regbuf)
-{
-  if (regbuf == NULL)
-    {
-#ifndef IN_PROCESS_AGENT
-      /* Make sure to zero-initialize the register cache when it is
-	 created, in case there are registers the target never
-	 fetches.  This way they'll read as zero instead of
-	 garbage.  */
-      regcache->tdesc = tdesc;
-      regcache->registers
-	= (unsigned char *) xcalloc (1, tdesc->registers_size);
-      regcache->registers_owned = 1;
-      regcache->register_status
-	= (unsigned char *) xmalloc (tdesc->reg_defs.size ());
-      memset ((void *) regcache->register_status, REG_UNAVAILABLE,
-	      tdesc->reg_defs.size ());
-#else
-      gdb_assert_not_reached ("can't allocate memory from the heap");
-#endif
-    }
-  else
-    {
-      regcache->tdesc = tdesc;
-      regcache->registers = regbuf;
-      regcache->registers_owned = 0;
-#ifndef IN_PROCESS_AGENT
-      regcache->register_status = NULL;
-#endif
-    }
-
-  regcache->registers_valid = 0;
-
-  return regcache;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-struct regcache *
-new_register_cache (const struct target_desc *tdesc)
-{
-  struct regcache *regcache = new struct regcache;
-
-  gdb_assert (tdesc->registers_size != 0);
-
-  return init_register_cache (regcache, tdesc, NULL);
-}
-
-void
-free_register_cache (struct regcache *regcache)
-{
-  if (regcache)
-    {
-      if (regcache->registers_owned)
-	free (regcache->registers);
-      free (regcache->register_status);
-      delete regcache;
-    }
-}
-
-#endif
-
-void
-regcache_cpy (struct regcache *dst, struct regcache *src)
-{
-  gdb_assert (src != NULL && dst != NULL);
-  gdb_assert (src->tdesc == dst->tdesc);
-  gdb_assert (src != dst);
-
-  memcpy (dst->registers, src->registers, src->tdesc->registers_size);
-#ifndef IN_PROCESS_AGENT
-  if (dst->register_status != NULL && src->register_status != NULL)
-    memcpy (dst->register_status, src->register_status,
-	    src->tdesc->reg_defs.size ());
-#endif
-  dst->registers_valid = src->registers_valid;
-}
-
-/* Return a reference to the description of register N.  */
-
-static const struct reg &
-find_register_by_number (const struct target_desc *tdesc, int n)
-{
-  return tdesc->reg_defs[n];
-}
-
-#ifndef IN_PROCESS_AGENT
-
-void
-registers_to_string (struct regcache *regcache, char *buf)
-{
-  unsigned char *registers = regcache->registers;
-  const struct target_desc *tdesc = regcache->tdesc;
-
-  for (int i = 0; i < tdesc->reg_defs.size (); ++i)
-    {
-      if (regcache->register_status[i] == REG_VALID)
-	{
-	  bin2hex (registers, buf, register_size (tdesc, i));
-	  buf += register_size (tdesc, i) * 2;
-	}
-      else
-	{
-	  memset (buf, 'x', register_size (tdesc, i) * 2);
-	  buf += register_size (tdesc, i) * 2;
-	}
-      registers += register_size (tdesc, i);
-    }
-  *buf = '\0';
-}
-
-void
-registers_from_string (struct regcache *regcache, char *buf)
-{
-  int len = strlen (buf);
-  unsigned char *registers = regcache->registers;
-  const struct target_desc *tdesc = regcache->tdesc;
-
-  if (len != tdesc->registers_size * 2)
-    {
-      warning ("Wrong sized register packet (expected %d bytes, got %d)",
-	       2 * tdesc->registers_size, len);
-      if (len > tdesc->registers_size * 2)
-	len = tdesc->registers_size * 2;
-    }
-  hex2bin (buf, registers, len / 2);
-}
-
-int
-find_regno (const struct target_desc *tdesc, const char *name)
-{
-  for (int i = 0; i < tdesc->reg_defs.size (); ++i)
-    {
-      if (strcmp (name, find_register_by_number (tdesc, i).name) == 0)
-	return i;
-    }
-  internal_error (__FILE__, __LINE__, "Unknown register %s requested",
-		  name);
-}
-
-static void
-free_register_cache_thread (struct thread_info *thread)
-{
-  struct regcache *regcache = thread_regcache_data (thread);
-
-  if (regcache != NULL)
-    {
-      regcache_invalidate_thread (thread);
-      free_register_cache (regcache);
-      set_thread_regcache_data (thread, NULL);
-    }
-}
-
-void
-regcache_release (void)
-{
-  /* Flush and release all pre-existing register caches.  */
-  for_each_thread (free_register_cache_thread);
-}
-#endif
-
-int
-register_cache_size (const struct target_desc *tdesc)
-{
-  return tdesc->registers_size;
-}
-
-int
-register_size (const struct target_desc *tdesc, int n)
-{
-  return find_register_by_number (tdesc, n).size / 8;
-}
-
-/* See gdbsupport/common-regcache.h.  */
-
-int
-regcache_register_size (const struct regcache *regcache, int n)
-{
-  return register_size (regcache->tdesc, n);
-}
-
-static unsigned char *
-register_data (const struct regcache *regcache, int n, int fetch)
-{
-  return (regcache->registers
-	  + find_register_by_number (regcache->tdesc, n).offset / 8);
-}
-
-void
-supply_register (struct regcache *regcache, int n, const void *buf)
-{
-  return regcache->raw_supply (n, buf);
-}
-
-/* See gdbsupport/common-regcache.h.  */
-
-void
-regcache::raw_supply (int n, const void *buf)
-{
-  if (buf)
-    {
-      memcpy (register_data (this, n, 0), buf, register_size (tdesc, n));
-#ifndef IN_PROCESS_AGENT
-      if (register_status != NULL)
-	register_status[n] = REG_VALID;
-#endif
-    }
-  else
-    {
-      memset (register_data (this, n, 0), 0, register_size (tdesc, n));
-#ifndef IN_PROCESS_AGENT
-      if (register_status != NULL)
-	register_status[n] = REG_UNAVAILABLE;
-#endif
-    }
-}
-
-/* Supply register N with value zero to REGCACHE.  */
-
-void
-supply_register_zeroed (struct regcache *regcache, int n)
-{
-  memset (register_data (regcache, n, 0), 0,
-	  register_size (regcache->tdesc, n));
-#ifndef IN_PROCESS_AGENT
-  if (regcache->register_status != NULL)
-    regcache->register_status[n] = REG_VALID;
-#endif
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* Supply register called NAME with value zero to REGCACHE.  */
-
-void
-supply_register_by_name_zeroed (struct regcache *regcache,
-				const char *name)
-{
-  supply_register_zeroed (regcache, find_regno (regcache->tdesc, name));
-}
-
-#endif
-
-/* Supply the whole register set whose contents are stored in BUF, to
-   REGCACHE.  If BUF is NULL, all the registers' values are recorded
-   as unavailable.  */
-
-void
-supply_regblock (struct regcache *regcache, const void *buf)
-{
-  if (buf)
-    {
-      const struct target_desc *tdesc = regcache->tdesc;
-
-      memcpy (regcache->registers, buf, tdesc->registers_size);
-#ifndef IN_PROCESS_AGENT
-      {
-	int i;
-
-	for (i = 0; i < tdesc->reg_defs.size (); i++)
-	  regcache->register_status[i] = REG_VALID;
-      }
-#endif
-    }
-  else
-    {
-      const struct target_desc *tdesc = regcache->tdesc;
-
-      memset (regcache->registers, 0, tdesc->registers_size);
-#ifndef IN_PROCESS_AGENT
-      {
-	int i;
-
-	for (i = 0; i < tdesc->reg_defs.size (); i++)
-	  regcache->register_status[i] = REG_UNAVAILABLE;
-      }
-#endif
-    }
-}
-
-#ifndef IN_PROCESS_AGENT
-
-void
-supply_register_by_name (struct regcache *regcache,
-			 const char *name, const void *buf)
-{
-  supply_register (regcache, find_regno (regcache->tdesc, name), buf);
-}
-
-#endif
-
-void
-collect_register (struct regcache *regcache, int n, void *buf)
-{
-  regcache->raw_collect (n, buf);
-}
-
-/* See gdbsupport/common-regcache.h.  */
-
-void
-regcache::raw_collect (int n, void *buf) const
-{
-  memcpy (buf, register_data (this, n, 1), register_size (tdesc, n));
-}
-
-enum register_status
-regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
-			    ULONGEST *val)
-{
-  int size;
-
-  gdb_assert (regcache != NULL);
-  gdb_assert (regnum >= 0
-	      && regnum < regcache->tdesc->reg_defs.size ());
-
-  size = register_size (regcache->tdesc, regnum);
-
-  if (size > (int) sizeof (ULONGEST))
-    error (_("That operation is not available on integers of more than"
-            "%d bytes."),
-          (int) sizeof (ULONGEST));
-
-  *val = 0;
-  collect_register (regcache, regnum, val);
-
-  return REG_VALID;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* See regcache.h.  */
-
-ULONGEST
-regcache_raw_get_unsigned_by_name (struct regcache *regcache,
-				   const char *name)
-{
-  return regcache_raw_get_unsigned (regcache,
-				    find_regno (regcache->tdesc, name));
-}
-
-void
-collect_register_as_string (struct regcache *regcache, int n, char *buf)
-{
-  bin2hex (register_data (regcache, n, 1), buf,
-	   register_size (regcache->tdesc, n));
-}
-
-void
-collect_register_by_name (struct regcache *regcache,
-			  const char *name, void *buf)
-{
-  collect_register (regcache, find_regno (regcache->tdesc, name), buf);
-}
-
-/* Special handling for register PC.  */
-
-CORE_ADDR
-regcache_read_pc (struct regcache *regcache)
-{
-  CORE_ADDR pc_val;
-
-  if (the_target->read_pc)
-    pc_val = the_target->read_pc (regcache);
-  else
-    internal_error (__FILE__, __LINE__,
-		    "regcache_read_pc: Unable to find PC");
-
-  return pc_val;
-}
-
-void
-regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  if (the_target->write_pc)
-    the_target->write_pc (regcache, pc);
-  else
-    internal_error (__FILE__, __LINE__,
-		    "regcache_write_pc: Unable to update PC");
-}
-
-#endif
-
-/* See gdbsupport/common-regcache.h.  */
-
-enum register_status
-regcache::get_register_status (int regnum) const
-{
-#ifndef IN_PROCESS_AGENT
-  gdb_assert (regnum >= 0 && regnum < tdesc->reg_defs.size ());
-  return (enum register_status) (register_status[regnum]);
-#else
-  return REG_VALID;
-#endif
-}
-
-/* See gdbsupport/common-regcache.h.  */
-
-bool
-regcache::raw_compare (int regnum, const void *buf, int offset) const
-{
-  gdb_assert (buf != NULL);
-
-  const unsigned char *regbuf = register_data (this, regnum, 1);
-  int size = register_size (tdesc, regnum);
-  gdb_assert (size >= offset);
-
-  return (memcmp (buf, regbuf + offset, size - offset) == 0);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/regcache.h ./gdb/gdbserver/regcache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/regcache.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/regcache.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,141 +0,0 @@
-/* Register support routines for the remote server for GDB.
-   Copyright (C) 2001-2020 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 GDBSERVER_REGCACHE_H
-#define GDBSERVER_REGCACHE_H
-
-#include "gdbsupport/common-regcache.h"
-
-struct thread_info;
-struct target_desc;
-
-/* The data for the register cache.  Note that we have one per
-   inferior; this is primarily for simplicity, as the performance
-   benefit is minimal.  */
-
-struct regcache : public reg_buffer_common
-{
-  /* The regcache's target description.  */
-  const struct target_desc *tdesc = nullptr;
-
-  /* Whether the REGISTERS buffer's contents are valid.  If false, we
-     haven't fetched the registers from the target yet.  Not that this
-     register cache is _not_ pass-through, unlike GDB's.  Note that
-     "valid" here is unrelated to whether the registers are available
-     in a traceframe.  For that, check REGISTER_STATUS below.  */
-  int registers_valid = 0;
-  int registers_owned = 0;
-  unsigned char *registers = nullptr;
-#ifndef IN_PROCESS_AGENT
-  /* One of REG_UNAVAILABLE or REG_VALID.  */
-  unsigned char *register_status = nullptr;
-#endif
-
-  /* See gdbsupport/common-regcache.h.  */
-  enum register_status get_register_status (int regnum) const override;
-
-  /* See gdbsupport/common-regcache.h.  */
-  void raw_supply (int regnum, const void *buf) override;
-
-  /* See gdbsupport/common-regcache.h.  */
-  void raw_collect (int regnum, void *buf) const override;
-
-  /* See gdbsupport/common-regcache.h.  */
-  bool raw_compare (int regnum, const void *buf, int offset) const override;
-};
-
-struct regcache *init_register_cache (struct regcache *regcache,
-				      const struct target_desc *tdesc,
-				      unsigned char *regbuf);
-
-void regcache_cpy (struct regcache *dst, struct regcache *src);
-
-/* Create a new register cache for INFERIOR.  */
-
-struct regcache *new_register_cache (const struct target_desc *tdesc);
-
-struct regcache *get_thread_regcache (struct thread_info *thread, int fetch);
-
-/* Release all memory associated with the register cache for INFERIOR.  */
-
-void free_register_cache (struct regcache *regcache);
-
-/* Invalidate cached registers for one thread.  */
-
-void regcache_invalidate_thread (struct thread_info *);
-
-/* Invalidate cached registers for all threads of the given process.  */
-
-void regcache_invalidate_pid (int pid);
-
-/* Invalidate cached registers for all threads of the current
-   process.  */
-
-void regcache_invalidate (void);
-
-/* Invalidate and release the register cache of all threads of the
-   current process.  */
-
-void regcache_release (void);
-
-/* Convert all registers to a string in the currently specified remote
-   format.  */
-
-void registers_to_string (struct regcache *regcache, char *buf);
-
-/* Convert a string to register values and fill our register cache.  */
-
-void registers_from_string (struct regcache *regcache, char *buf);
-
-/* For regcache_read_pc see gdbsupport/common-regcache.h.  */
-
-void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
-
-int register_cache_size (const struct target_desc *tdesc);
-
-int register_size (const struct target_desc *tdesc, int n);
-
-int find_regno (const struct target_desc *tdesc, const char *name);
-
-void supply_register (struct regcache *regcache, int n, const void *buf);
-
-void supply_register_zeroed (struct regcache *regcache, int n);
-
-void supply_register_by_name (struct regcache *regcache,
-			      const char *name, const void *buf);
-
-void supply_register_by_name_zeroed (struct regcache *regcache,
-				     const char *name);
-
-void supply_regblock (struct regcache *regcache, const void *buf);
-
-void collect_register (struct regcache *regcache, int n, void *buf);
-
-void collect_register_as_string (struct regcache *regcache, int n, char *buf);
-
-void collect_register_by_name (struct regcache *regcache,
-			       const char *name, void *buf);
-
-/* Read a raw register as an unsigned integer.  Convenience wrapper
-   around regcache_raw_get_unsigned that takes a register name instead
-   of a register number.  */
-
-ULONGEST regcache_raw_get_unsigned_by_name (struct regcache *regcache,
-					    const char *name);
-
-#endif /* GDBSERVER_REGCACHE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/remote-utils.c ./gdb/gdbserver/remote-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/remote-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/remote-utils.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1691 +0,0 @@
-/* Remote utility routines for the remote server for GDB.
-   Copyright (C) 1986-2020 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 "server.h"
-#if HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#include "target.h"
-#include "gdbthread.h"
-#include "tdesc.h"
-#include "debug.h"
-#include "dll.h"
-#include "gdbsupport/rsp-low.h"
-#include "gdbsupport/netstuff.h"
-#include "gdbsupport/filestuff.h"
-#include "gdbsupport/gdb-sigmask.h"
-#include <ctype.h>
-#if HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-#if HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#if HAVE_NETINET_TCP_H
-#include <netinet/tcp.h>
-#endif
-#if HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#include "gdbsupport/gdb_sys_time.h"
-#include <unistd.h>
-#if HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <sys/stat.h>
-
-#if USE_WIN32API
-#include <ws2tcpip.h>
-#endif
-
-#if __QNX__
-#include <sys/iomgr.h>
-#endif /* __QNX__ */
-
-#ifndef HAVE_SOCKLEN_T
-typedef int socklen_t;
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-#if USE_WIN32API
-# define INVALID_DESCRIPTOR INVALID_SOCKET
-#else
-# define INVALID_DESCRIPTOR -1
-#endif
-
-/* Extra value for readchar_callback.  */
-enum {
-  /* The callback is currently not scheduled.  */
-  NOT_SCHEDULED = -1
-};
-
-/* Status of the readchar callback.
-   Either NOT_SCHEDULED or the callback id.  */
-static int readchar_callback = NOT_SCHEDULED;
-
-static int readchar (void);
-static void reset_readchar (void);
-static void reschedule (void);
-
-/* A cache entry for a successfully looked-up symbol.  */
-struct sym_cache
-{
-  char *name;
-  CORE_ADDR addr;
-  struct sym_cache *next;
-};
-
-static int remote_is_stdio = 0;
-
-static gdb_fildes_t remote_desc = INVALID_DESCRIPTOR;
-static gdb_fildes_t listen_desc = INVALID_DESCRIPTOR;
-
-#ifdef USE_WIN32API
-# define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
-# define write(fd, buf, len) send (fd, (char *) buf, len, 0)
-#endif
-
-int
-gdb_connected (void)
-{
-  return remote_desc != INVALID_DESCRIPTOR;
-}
-
-/* Return true if the remote connection is over stdio.  */
-
-int
-remote_connection_is_stdio (void)
-{
-  return remote_is_stdio;
-}
-
-static void
-enable_async_notification (int fd)
-{
-#if defined(F_SETFL) && defined (FASYNC)
-  int save_fcntl_flags;
-
-  save_fcntl_flags = fcntl (fd, F_GETFL, 0);
-  fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC);
-#if defined (F_SETOWN)
-  fcntl (fd, F_SETOWN, getpid ());
-#endif
-#endif
-}
-
-static int
-handle_accept_event (int err, gdb_client_data client_data)
-{
-  struct sockaddr_storage sockaddr;
-  socklen_t len = sizeof (sockaddr);
-
-  if (debug_threads)
-    debug_printf ("handling possible accept event\n");
-
-  remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
-  if (remote_desc == -1)
-    perror_with_name ("Accept failed");
-
-  /* Enable TCP keep alive process. */
-  socklen_t tmp = 1;
-  setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
-	      (char *) &tmp, sizeof (tmp));
-
-  /* Tell TCP not to delay small packets.  This greatly speeds up
-     interactive response. */
-  tmp = 1;
-  setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
-	      (char *) &tmp, sizeof (tmp));
-
-#ifndef USE_WIN32API
-  signal (SIGPIPE, SIG_IGN);	/* If we don't do this, then gdbserver simply
-				   exits when the remote side dies.  */
-#endif
-
-  if (run_once)
-    {
-#ifndef USE_WIN32API
-      close (listen_desc);		/* No longer need this */
-#else
-      closesocket (listen_desc);	/* No longer need this */
-#endif
-    }
-
-  /* Even if !RUN_ONCE no longer notice new connections.  Still keep the
-     descriptor open for add_file_handler to wait for a new connection.  */
-  delete_file_handler (listen_desc);
-
-  /* Convert IP address to string.  */
-  char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
-
-  int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
-		       orig_host, sizeof (orig_host),
-		       orig_port, sizeof (orig_port),
-		       NI_NUMERICHOST | NI_NUMERICSERV);
-
-  if (r != 0)
-    fprintf (stderr, _("Could not obtain remote address: %s\n"),
-	     gai_strerror (r));
-  else
-    fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
-	     orig_host, orig_port);
-
-  enable_async_notification (remote_desc);
-
-  /* Register the event loop handler.  */
-  add_file_handler (remote_desc, handle_serial_event, NULL);
-
-  /* We have a new GDB connection now.  If we were disconnected
-     tracing, there's a window where the target could report a stop
-     event to the event loop, and since we have a connection now, we'd
-     try to send vStopped notifications to GDB.  But, don't do that
-     until GDB as selected all-stop/non-stop, and has queried the
-     threads' status ('?').  */
-  target_async (0);
-
-  return 0;
-}
-
-/* Prepare for a later connection to a remote debugger.
-   NAME is the filename used for communication.  */
-
-void
-remote_prepare (const char *name)
-{
-  client_state &cs = get_client_state ();
-#ifdef USE_WIN32API
-  static int winsock_initialized;
-#endif
-  socklen_t tmp;
-
-  remote_is_stdio = 0;
-  if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
-    {
-      /* We need to record fact that we're using stdio sooner than the
-	 call to remote_open so start_inferior knows the connection is
-	 via stdio.  */
-      remote_is_stdio = 1;
-      cs.transport_is_reliable = 1;
-      return;
-    }
-
-  struct addrinfo hint;
-  struct addrinfo *ainfo;
-
-  memset (&hint, 0, sizeof (hint));
-  /* Assume no prefix will be passed, therefore we should use
-     AF_UNSPEC.  */
-  hint.ai_family = AF_UNSPEC;
-  hint.ai_socktype = SOCK_STREAM;
-  hint.ai_protocol = IPPROTO_TCP;
-
-  parsed_connection_spec parsed
-    = parse_connection_spec_without_prefix (name, &hint);
-
-  if (parsed.port_str.empty ())
-    {
-      cs.transport_is_reliable = 0;
-      return;
-    }
-
-#ifdef USE_WIN32API
-  if (!winsock_initialized)
-    {
-      WSADATA wsad;
-
-      WSAStartup (MAKEWORD (1, 0), &wsad);
-      winsock_initialized = 1;
-    }
-#endif
-
-  int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
-		       &hint, &ainfo);
-
-  if (r != 0)
-    error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
-
-  scoped_free_addrinfo freeaddrinfo (ainfo);
-
-  struct addrinfo *iter;
-
-  for (iter = ainfo; iter != NULL; iter = iter->ai_next)
-    {
-      listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
-					iter->ai_protocol);
-
-      if (listen_desc >= 0)
-	break;
-    }
-
-  if (iter == NULL)
-    perror_with_name ("Can't open socket");
-
-  /* Allow rapid reuse of this port. */
-  tmp = 1;
-  setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
-	      sizeof (tmp));
-
-  switch (iter->ai_family)
-    {
-    case AF_INET:
-      ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
-      break;
-    case AF_INET6:
-      ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
-      break;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("Invalid 'ai_family' %d\n"), iter->ai_family);
-    }
-
-  if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
-    perror_with_name ("Can't bind address");
-
-  if (listen (listen_desc, 1) != 0)
-    perror_with_name ("Can't listen on socket");
-
-  cs.transport_is_reliable = 1;
-}
-
-/* Open a connection to a remote debugger.
-   NAME is the filename used for communication.  */
-
-void
-remote_open (const char *name)
-{
-  const char *port_str;
-
-  port_str = strchr (name, ':');
-#ifdef USE_WIN32API
-  if (port_str == NULL)
-    error ("Only HOST:PORT is supported on this platform.");
-#endif
-
-  if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
-    {
-      fprintf (stderr, "Remote debugging using stdio\n");
-
-      /* Use stdin as the handle of the connection.
-	 We only select on reads, for example.  */
-      remote_desc = fileno (stdin);
-
-      enable_async_notification (remote_desc);
-
-      /* Register the event loop handler.  */
-      add_file_handler (remote_desc, handle_serial_event, NULL);
-    }
-#ifndef USE_WIN32API
-  else if (port_str == NULL)
-    {
-      struct stat statbuf;
-
-      if (stat (name, &statbuf) == 0
-	  && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
-	remote_desc = open (name, O_RDWR);
-      else
-	{
-	  errno = EINVAL;
-	  remote_desc = -1;
-	}
-
-      if (remote_desc < 0)
-	perror_with_name ("Could not open remote device");
-
-#if HAVE_TERMIOS_H
-      {
-	struct termios termios;
-	tcgetattr (remote_desc, &termios);
-
-	termios.c_iflag = 0;
-	termios.c_oflag = 0;
-	termios.c_lflag = 0;
-	termios.c_cflag &= ~(CSIZE | PARENB);
-	termios.c_cflag |= CLOCAL | CS8;
-	termios.c_cc[VMIN] = 1;
-	termios.c_cc[VTIME] = 0;
-
-	tcsetattr (remote_desc, TCSANOW, &termios);
-      }
-#endif
-
-      fprintf (stderr, "Remote debugging using %s\n", name);
-
-      enable_async_notification (remote_desc);
-
-      /* Register the event loop handler.  */
-      add_file_handler (remote_desc, handle_serial_event, NULL);
-    }
-#endif /* USE_WIN32API */
-  else
-    {
-      char listen_port[GDB_NI_MAX_PORT];
-      struct sockaddr_storage sockaddr;
-      socklen_t len = sizeof (sockaddr);
-
-      if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
-	perror_with_name ("Can't determine port");
-
-      int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
-			   NULL, 0,
-			   listen_port, sizeof (listen_port),
-			   NI_NUMERICSERV);
-
-      if (r != 0)
-	fprintf (stderr, _("Can't obtain port where we are listening: %s"),
-		 gai_strerror (r));
-      else
-	fprintf (stderr, _("Listening on port %s\n"), listen_port);
-
-      fflush (stderr);
-
-      /* Register the event loop handler.  */
-      add_file_handler (listen_desc, handle_accept_event, NULL);
-    }
-}
-
-void
-remote_close (void)
-{
-  delete_file_handler (remote_desc);
-
-  disable_async_io ();
-
-#ifdef USE_WIN32API
-  closesocket (remote_desc);
-#else
-  if (! remote_connection_is_stdio ())
-    close (remote_desc);
-#endif
-  remote_desc = INVALID_DESCRIPTOR;
-
-  reset_readchar ();
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-void
-decode_address (CORE_ADDR *addrp, const char *start, int len)
-{
-  CORE_ADDR addr;
-  char ch;
-  int i;
-
-  addr = 0;
-  for (i = 0; i < len; i++)
-    {
-      ch = start[i];
-      addr = addr << 4;
-      addr = addr | (fromhex (ch) & 0x0f);
-    }
-  *addrp = addr;
-}
-
-const char *
-decode_address_to_semicolon (CORE_ADDR *addrp, const char *start)
-{
-  const char *end;
-
-  end = start;
-  while (*end != '\0' && *end != ';')
-    end++;
-
-  decode_address (addrp, start, end - start);
-
-  if (*end == ';')
-    end++;
-  return end;
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-/* Look for a sequence of characters which can be run-length encoded.
-   If there are any, update *CSUM and *P.  Otherwise, output the
-   single character.  Return the number of characters consumed.  */
-
-static int
-try_rle (char *buf, int remaining, unsigned char *csum, char **p)
-{
-  int n;
-
-  /* Always output the character.  */
-  *csum += buf[0];
-  *(*p)++ = buf[0];
-
-  /* Don't go past '~'.  */
-  if (remaining > 97)
-    remaining = 97;
-
-  for (n = 1; n < remaining; n++)
-    if (buf[n] != buf[0])
-      break;
-
-  /* N is the index of the first character not the same as buf[0].
-     buf[0] is counted twice, so by decrementing N, we get the number
-     of characters the RLE sequence will replace.  */
-  n--;
-
-  if (n < 3)
-    return 1;
-
-  /* Skip the frame characters.  The manual says to skip '+' and '-'
-     also, but there's no reason to.  Unfortunately these two unusable
-     characters double the encoded length of a four byte zero
-     value.  */
-  while (n + 29 == '$' || n + 29 == '#')
-    n--;
-
-  *csum += '*';
-  *(*p)++ = '*';
-  *csum += n + 29;
-  *(*p)++ = n + 29;
-
-  return n + 1;
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-/* Write a PTID to BUF.  Returns BUF+CHARACTERS_WRITTEN.  */
-
-char *
-write_ptid (char *buf, ptid_t ptid)
-{
-  client_state &cs = get_client_state ();
-  int pid, tid;
-
-  if (cs.multi_process)
-    {
-      pid = ptid.pid ();
-      if (pid < 0)
-	buf += sprintf (buf, "p-%x.", -pid);
-      else
-	buf += sprintf (buf, "p%x.", pid);
-    }
-  tid = ptid.lwp ();
-  if (tid < 0)
-    buf += sprintf (buf, "-%x", -tid);
-  else
-    buf += sprintf (buf, "%x", tid);
-
-  return buf;
-}
-
-static ULONGEST
-hex_or_minus_one (const char *buf, const char **obuf)
-{
-  ULONGEST ret;
-
-  if (startswith (buf, "-1"))
-    {
-      ret = (ULONGEST) -1;
-      buf += 2;
-    }
-  else
-    buf = unpack_varlen_hex (buf, &ret);
-
-  if (obuf)
-    *obuf = buf;
-
-  return ret;
-}
-
-/* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
-   passed the last parsed char.  Returns null_ptid on error.  */
-ptid_t
-read_ptid (const char *buf, const char **obuf)
-{
-  const char *p = buf;
-  const char *pp;
-  ULONGEST pid = 0, tid = 0;
-
-  if (*p == 'p')
-    {
-      /* Multi-process ptid.  */
-      pp = unpack_varlen_hex (p + 1, &pid);
-      if (*pp != '.')
-	error ("invalid remote ptid: %s\n", p);
-
-      p = pp + 1;
-
-      tid = hex_or_minus_one (p, &pp);
-
-      if (obuf)
-	*obuf = pp;
-      return ptid_t (pid, tid, 0);
-    }
-
-  /* No multi-process.  Just a tid.  */
-  tid = hex_or_minus_one (p, &pp);
-
-  /* Since GDB is not sending a process id (multi-process extensions
-     are off), then there's only one process.  Default to the first in
-     the list.  */
-  pid = pid_of (get_first_process ());
-
-  if (obuf)
-    *obuf = pp;
-  return ptid_t (pid, tid, 0);
-}
-
-/* Write COUNT bytes in BUF to the client.
-   The result is the number of bytes written or -1 if error.
-   This may return less than COUNT.  */
-
-static int
-write_prim (const void *buf, int count)
-{
-  if (remote_connection_is_stdio ())
-    return write (fileno (stdout), buf, count);
-  else
-    return write (remote_desc, buf, count);
-}
-
-/* Read COUNT bytes from the client and store in BUF.
-   The result is the number of bytes read or -1 if error.
-   This may return less than COUNT.  */
-
-static int
-read_prim (void *buf, int count)
-{
-  if (remote_connection_is_stdio ())
-    return read (fileno (stdin), buf, count);
-  else
-    return read (remote_desc, buf, count);
-}
-
-/* Send a packet to the remote machine, with error checking.
-   The data of the packet is in BUF, and the length of the
-   packet is in CNT.  Returns >= 0 on success, -1 otherwise.  */
-
-static int
-putpkt_binary_1 (char *buf, int cnt, int is_notif)
-{
-  client_state &cs = get_client_state ();
-  int i;
-  unsigned char csum = 0;
-  char *buf2;
-  char *p;
-  int cc;
-
-  buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1);
-
-  /* Copy the packet into buffer BUF2, encapsulating it
-     and giving it a checksum.  */
-
-  p = buf2;
-  if (is_notif)
-    *p++ = '%';
-  else
-    *p++ = '$';
-
-  for (i = 0; i < cnt;)
-    i += try_rle (buf + i, cnt - i, &csum, &p);
-
-  *p++ = '#';
-  *p++ = tohex ((csum >> 4) & 0xf);
-  *p++ = tohex (csum & 0xf);
-
-  *p = '\0';
-
-  /* Send it over and over until we get a positive ack.  */
-
-  do
-    {
-      if (write_prim (buf2, p - buf2) != p - buf2)
-	{
-	  perror ("putpkt(write)");
-	  free (buf2);
-	  return -1;
-	}
-
-      if (cs.noack_mode || is_notif)
-	{
-	  /* Don't expect an ack then.  */
-	  if (remote_debug)
-	    {
-	      if (is_notif)
-		debug_printf ("putpkt (\"%s\"); [notif]\n", buf2);
-	      else
-		debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2);
-	      debug_flush ();
-	    }
-	  break;
-	}
-
-      if (remote_debug)
-	{
-	  debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
-	  debug_flush ();
-	}
-
-      cc = readchar ();
-
-      if (cc < 0)
-	{
-	  free (buf2);
-	  return -1;
-	}
-
-      if (remote_debug)
-	{
-	  debug_printf ("[received '%c' (0x%x)]\n", cc, cc);
-	  debug_flush ();
-	}
-
-      /* Check for an input interrupt while we're here.  */
-      if (cc == '\003' && current_thread != NULL)
-	(*the_target->request_interrupt) ();
-    }
-  while (cc != '+');
-
-  free (buf2);
-  return 1;			/* Success! */
-}
-
-int
-putpkt_binary (char *buf, int cnt)
-{
-  return putpkt_binary_1 (buf, cnt, 0);
-}
-
-/* Send a packet to the remote machine, with error checking.  The data
-   of the packet is in BUF, and the packet should be a NUL-terminated
-   string.  Returns >= 0 on success, -1 otherwise.  */
-
-int
-putpkt (char *buf)
-{
-  return putpkt_binary (buf, strlen (buf));
-}
-
-int
-putpkt_notif (char *buf)
-{
-  return putpkt_binary_1 (buf, strlen (buf), 1);
-}
-
-/* Come here when we get an input interrupt from the remote side.  This
-   interrupt should only be active while we are waiting for the child to do
-   something.  Thus this assumes readchar:bufcnt is 0.
-   About the only thing that should come through is a ^C, which
-   will cause us to request child interruption.  */
-
-static void
-input_interrupt (int unused)
-{
-  fd_set readset;
-  struct timeval immediate = { 0, 0 };
-
-  /* Protect against spurious interrupts.  This has been observed to
-     be a problem under NetBSD 1.4 and 1.5.  */
-
-  FD_ZERO (&readset);
-  FD_SET (remote_desc, &readset);
-  if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
-    {
-      int cc;
-      char c = 0;
-
-      cc = read_prim (&c, 1);
-
-      if (cc == 0)
-	{
-	  fprintf (stderr, "client connection closed\n");
-	  return;
-	}
-      else if (cc != 1 || c != '\003')
-	{
-	  fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
-	  if (isprint (c))
-	    fprintf (stderr, "('%c')\n", c);
-	  else
-	    fprintf (stderr, "('\\x%02x')\n", c & 0xff);
-	  return;
-	}
-
-      (*the_target->request_interrupt) ();
-    }
-}
-
-/* Check if the remote side sent us an interrupt request (^C).  */
-void
-check_remote_input_interrupt_request (void)
-{
-  /* This function may be called before establishing communications,
-     therefore we need to validate the remote descriptor.  */
-
-  if (remote_desc == INVALID_DESCRIPTOR)
-    return;
-
-  input_interrupt (0);
-}
-
-/* Asynchronous I/O support.  SIGIO must be unblocked when waiting,
-   in order to accept Control-C from the client, and must be blocked
-   when talking to the client.  */
-
-static void
-block_unblock_async_io (int block)
-{
-#ifndef USE_WIN32API
-  sigset_t sigio_set;
-
-  sigemptyset (&sigio_set);
-  sigaddset (&sigio_set, SIGIO);
-  gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL);
-#endif
-}
-
-#ifdef __QNX__
-static void
-nto_comctrl (int enable)
-{
-  struct sigevent event;
-
-  if (enable)
-    {
-      event.sigev_notify = SIGEV_SIGNAL_THREAD;
-      event.sigev_signo = SIGIO;
-      event.sigev_code = 0;
-      event.sigev_value.sival_ptr = NULL;
-      event.sigev_priority = -1;
-      ionotify (remote_desc, _NOTIFY_ACTION_POLLARM, _NOTIFY_COND_INPUT,
-		&event);
-    }
-  else
-    ionotify (remote_desc, _NOTIFY_ACTION_POLL, _NOTIFY_COND_INPUT, NULL);
-}
-#endif /* __QNX__ */
-
-
-/* Current state of asynchronous I/O.  */
-static int async_io_enabled;
-
-/* Enable asynchronous I/O.  */
-void
-enable_async_io (void)
-{
-  if (async_io_enabled)
-    return;
-
-  block_unblock_async_io (0);
-
-  async_io_enabled = 1;
-#ifdef __QNX__
-  nto_comctrl (1);
-#endif /* __QNX__ */
-}
-
-/* Disable asynchronous I/O.  */
-void
-disable_async_io (void)
-{
-  if (!async_io_enabled)
-    return;
-
-  block_unblock_async_io (1);
-
-  async_io_enabled = 0;
-#ifdef __QNX__
-  nto_comctrl (0);
-#endif /* __QNX__ */
-
-}
-
-void
-initialize_async_io (void)
-{
-  /* Make sure that async I/O starts blocked.  */
-  async_io_enabled = 1;
-  disable_async_io ();
-
-  /* Install the signal handler.  */
-#ifndef USE_WIN32API
-  signal (SIGIO, input_interrupt);
-#endif
-}
-
-/* Internal buffer used by readchar.
-   These are global to readchar because reschedule_remote needs to be
-   able to tell whether the buffer is empty.  */
-
-static unsigned char readchar_buf[BUFSIZ];
-static int readchar_bufcnt = 0;
-static unsigned char *readchar_bufp;
-
-/* Returns next char from remote GDB.  -1 if error.  */
-
-static int
-readchar (void)
-{
-  int ch;
-
-  if (readchar_bufcnt == 0)
-    {
-      readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
-
-      if (readchar_bufcnt <= 0)
-	{
-	  if (readchar_bufcnt == 0)
-	    {
-	      if (remote_debug)
-		debug_printf ("readchar: Got EOF\n");
-	    }
-	  else
-	    perror ("readchar");
-
-	  return -1;
-	}
-
-      readchar_bufp = readchar_buf;
-    }
-
-  readchar_bufcnt--;
-  ch = *readchar_bufp++;
-  reschedule ();
-  return ch;
-}
-
-/* Reset the readchar state machine.  */
-
-static void
-reset_readchar (void)
-{
-  readchar_bufcnt = 0;
-  if (readchar_callback != NOT_SCHEDULED)
-    {
-      delete_callback_event (readchar_callback);
-      readchar_callback = NOT_SCHEDULED;
-    }
-}
-
-/* Process remaining data in readchar_buf.  */
-
-static int
-process_remaining (void *context)
-{
-  int res;
-
-  /* This is a one-shot event.  */
-  readchar_callback = NOT_SCHEDULED;
-
-  if (readchar_bufcnt > 0)
-    res = handle_serial_event (0, NULL);
-  else
-    res = 0;
-
-  return res;
-}
-
-/* If there is still data in the buffer, queue another event to process it,
-   we can't sleep in select yet.  */
-
-static void
-reschedule (void)
-{
-  if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED)
-    readchar_callback = append_callback_event (process_remaining, NULL);
-}
-
-/* Read a packet from the remote machine, with error checking,
-   and store it in BUF.  Returns length of packet, or negative if error. */
-
-int
-getpkt (char *buf)
-{
-  client_state &cs = get_client_state ();
-  char *bp;
-  unsigned char csum, c1, c2;
-  int c;
-
-  while (1)
-    {
-      csum = 0;
-
-      while (1)
-	{
-	  c = readchar ();
-
-	  /* The '\003' may appear before or after each packet, so
-	     check for an input interrupt.  */
-	  if (c == '\003')
-	    {
-	      (*the_target->request_interrupt) ();
-	      continue;
-	    }
-
-	  if (c == '$')
-	    break;
-	  if (remote_debug)
-	    {
-	      debug_printf ("[getpkt: discarding char '%c']\n", c);
-	      debug_flush ();
-	    }
-
-	  if (c < 0)
-	    return -1;
-	}
-
-      bp = buf;
-      while (1)
-	{
-	  c = readchar ();
-	  if (c < 0)
-	    return -1;
-	  if (c == '#')
-	    break;
-	  *bp++ = c;
-	  csum += c;
-	}
-      *bp = 0;
-
-      c1 = fromhex (readchar ());
-      c2 = fromhex (readchar ());
-
-      if (csum == (c1 << 4) + c2)
-	break;
-
-      if (cs.noack_mode)
-	{
-	  fprintf (stderr,
-		   "Bad checksum, sentsum=0x%x, csum=0x%x, "
-		   "buf=%s [no-ack-mode, Bad medium?]\n",
-		   (c1 << 4) + c2, csum, buf);
-	  /* Not much we can do, GDB wasn't expecting an ack/nac.  */
-	  break;
-	}
-
-      fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
-	       (c1 << 4) + c2, csum, buf);
-      if (write_prim ("-", 1) != 1)
-	return -1;
-    }
-
-  if (!cs.noack_mode)
-    {
-      if (remote_debug)
-	{
-	  debug_printf ("getpkt (\"%s\");  [sending ack] \n", buf);
-	  debug_flush ();
-	}
-
-      if (write_prim ("+", 1) != 1)
-	return -1;
-
-      if (remote_debug)
-	{
-	  debug_printf ("[sent ack]\n");
-	  debug_flush ();
-	}
-    }
-  else
-    {
-      if (remote_debug)
-	{
-	  debug_printf ("getpkt (\"%s\");  [no ack sent] \n", buf);
-	  debug_flush ();
-	}
-    }
-
-  /* The readchar above may have already read a '\003' out of the socket
-     and moved it to the local buffer.  For example, when GDB sends
-     vCont;c immediately followed by interrupt (see
-     gdb.base/interrupt-noterm.exp).  As soon as we see the vCont;c, we'll
-     resume the inferior and wait.  Since we've already moved the '\003'
-     to the local buffer, SIGIO won't help.  In that case, if we don't
-     check for interrupt after the vCont;c packet, the interrupt character
-     would stay in the buffer unattended until after the next (unrelated)
-     stop.  */
-  while (readchar_bufcnt > 0 && *readchar_bufp == '\003')
-    {
-      /* Consume the interrupt character in the buffer.  */
-      readchar ();
-      (*the_target->request_interrupt) ();
-    }
-
-  return bp - buf;
-}
-
-void
-write_ok (char *buf)
-{
-  buf[0] = 'O';
-  buf[1] = 'K';
-  buf[2] = '\0';
-}
-
-void
-write_enn (char *buf)
-{
-  /* Some day, we should define the meanings of the error codes... */
-  buf[0] = 'E';
-  buf[1] = '0';
-  buf[2] = '1';
-  buf[3] = '\0';
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-static char *
-outreg (struct regcache *regcache, int regno, char *buf)
-{
-  if ((regno >> 12) != 0)
-    *buf++ = tohex ((regno >> 12) & 0xf);
-  if ((regno >> 8) != 0)
-    *buf++ = tohex ((regno >> 8) & 0xf);
-  *buf++ = tohex ((regno >> 4) & 0xf);
-  *buf++ = tohex (regno & 0xf);
-  *buf++ = ':';
-  collect_register_as_string (regcache, regno, buf);
-  buf += 2 * register_size (regcache->tdesc, regno);
-  *buf++ = ';';
-
-  return buf;
-}
-
-void
-prepare_resume_reply (char *buf, ptid_t ptid,
-		      struct target_waitstatus *status)
-{
-  client_state &cs = get_client_state ();
-  if (debug_threads)
-    debug_printf ("Writing resume reply for %s:%d\n",
-		  target_pid_to_str (ptid), status->kind);
-
-  switch (status->kind)
-    {
-    case TARGET_WAITKIND_STOPPED:
-    case TARGET_WAITKIND_FORKED:
-    case TARGET_WAITKIND_VFORKED:
-    case TARGET_WAITKIND_VFORK_DONE:
-    case TARGET_WAITKIND_EXECD:
-    case TARGET_WAITKIND_THREAD_CREATED:
-    case TARGET_WAITKIND_SYSCALL_ENTRY:
-    case TARGET_WAITKIND_SYSCALL_RETURN:
-      {
-	struct thread_info *saved_thread;
-	const char **regp;
-	struct regcache *regcache;
-
-	if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events)
-	    || (status->kind == TARGET_WAITKIND_VFORKED 
-		&& cs.report_vfork_events))
-	  {
-	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
-	    const char *event = (status->kind == TARGET_WAITKIND_FORKED
-				 ? "fork" : "vfork");
-
-	    sprintf (buf, "T%02x%s:", signal, event);
-	    buf += strlen (buf);
-	    buf = write_ptid (buf, status->value.related_pid);
-	    strcat (buf, ";");
-	  }
-	else if (status->kind == TARGET_WAITKIND_VFORK_DONE 
-		 && cs.report_vfork_events)
-	  {
-	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
-
-	    sprintf (buf, "T%02xvforkdone:;", signal);
-	  }
-	else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events)
-	  {
-	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
-	    const char *event = "exec";
-	    char hexified_pathname[PATH_MAX * 2];
-
-	    sprintf (buf, "T%02x%s:", signal, event);
-	    buf += strlen (buf);
-
-	    /* Encode pathname to hexified format.  */
-	    bin2hex ((const gdb_byte *) status->value.execd_pathname,
-		     hexified_pathname,
-		     strlen (status->value.execd_pathname));
-
-	    sprintf (buf, "%s;", hexified_pathname);
-	    xfree (status->value.execd_pathname);
-	    status->value.execd_pathname = NULL;
-	    buf += strlen (buf);
-	  }
-	else if (status->kind == TARGET_WAITKIND_THREAD_CREATED
-		 && cs.report_thread_events)
-	  {
-	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
-
-	    sprintf (buf, "T%02xcreate:;", signal);
-	  }
-	else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
-		 || status->kind == TARGET_WAITKIND_SYSCALL_RETURN)
-	  {
-	    enum gdb_signal signal = GDB_SIGNAL_TRAP;
-	    const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY
-				 ? "syscall_entry" : "syscall_return");
-
-	    sprintf (buf, "T%02x%s:%x;", signal, event,
-		     status->value.syscall_number);
-	  }
-	else
-	  sprintf (buf, "T%02x", status->value.sig);
-
-	buf += strlen (buf);
-
-	saved_thread = current_thread;
-
-	switch_to_thread (ptid);
-
-	regp = current_target_desc ()->expedite_regs;
-
-	regcache = get_thread_regcache (current_thread, 1);
-
-	if (the_target->stopped_by_watchpoint != NULL
-	    && (*the_target->stopped_by_watchpoint) ())
-	  {
-	    CORE_ADDR addr;
-	    int i;
-
-	    memcpy (buf, "watch:", 6);
-	    buf += 6;
-
-	    addr = (*the_target->stopped_data_address) ();
-
-	    /* Convert each byte of the address into two hexadecimal
-	       chars.  Note that we take sizeof (void *) instead of
-	       sizeof (addr); this is to avoid sending a 64-bit
-	       address to a 32-bit GDB.  */
-	    for (i = sizeof (void *) * 2; i > 0; i--)
-	      *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
-	    *buf++ = ';';
-	  }
-	else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ())
-	  {
-	    sprintf (buf, "swbreak:;");
-	    buf += strlen (buf);
-	  }
-	else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ())
-	  {
-	    sprintf (buf, "hwbreak:;");
-	    buf += strlen (buf);
-	  }
-
-	while (*regp)
-	  {
-	    buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf);
-	    regp ++;
-	  }
-	*buf = '\0';
-
-	/* Formerly, if the debugger had not used any thread features
-	   we would not burden it with a thread status response.  This
-	   was for the benefit of GDB 4.13 and older.  However, in
-	   recent GDB versions the check (``if (cont_thread != 0)'')
-	   does not have the desired effect because of sillyness in
-	   the way that the remote protocol handles specifying a
-	   thread.  Since thread support relies on qSymbol support
-	   anyway, assume GDB can handle threads.  */
-
-	if (using_threads && !disable_packet_Tthread)
-	  {
-	    /* This if (1) ought to be unnecessary.  But remote_wait
-	       in GDB will claim this event belongs to inferior_ptid
-	       if we do not specify a thread, and there's no way for
-	       gdbserver to know what inferior_ptid is.  */
-	    if (1 || cs.general_thread != ptid)
-	      {
-		int core = -1;
-		/* In non-stop, don't change the general thread behind
-		   GDB's back.  */
-		if (!non_stop)
-		  cs.general_thread = ptid;
-		sprintf (buf, "thread:");
-		buf += strlen (buf);
-		buf = write_ptid (buf, ptid);
-		strcat (buf, ";");
-		buf += strlen (buf);
-
-		core = target_core_of_thread (ptid);
-
-		if (core != -1)
-		  {
-		    sprintf (buf, "core:");
-		    buf += strlen (buf);
-		    sprintf (buf, "%x", core);
-		    strcat (buf, ";");
-		    buf += strlen (buf);
-		  }
-	      }
-	  }
-
-	if (dlls_changed)
-	  {
-	    strcpy (buf, "library:;");
-	    buf += strlen (buf);
-	    dlls_changed = 0;
-	  }
-
-	current_thread = saved_thread;
-      }
-      break;
-    case TARGET_WAITKIND_EXITED:
-      if (cs.multi_process)
-	sprintf (buf, "W%x;process:%x",
-		 status->value.integer, ptid.pid ());
-      else
-	sprintf (buf, "W%02x", status->value.integer);
-      break;
-    case TARGET_WAITKIND_SIGNALLED:
-      if (cs.multi_process)
-	sprintf (buf, "X%x;process:%x",
-		 status->value.sig, ptid.pid ());
-      else
-	sprintf (buf, "X%02x", status->value.sig);
-      break;
-    case TARGET_WAITKIND_THREAD_EXITED:
-      sprintf (buf, "w%x;", status->value.integer);
-      buf += strlen (buf);
-      buf = write_ptid (buf, ptid);
-      break;
-    case TARGET_WAITKIND_NO_RESUMED:
-      sprintf (buf, "N");
-      break;
-    default:
-      error ("unhandled waitkind");
-      break;
-    }
-}
-
-void
-decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
-{
-  int i = 0, j = 0;
-  char ch;
-  *mem_addr_ptr = *len_ptr = 0;
-
-  while ((ch = from[i++]) != ',')
-    {
-      *mem_addr_ptr = *mem_addr_ptr << 4;
-      *mem_addr_ptr |= fromhex (ch) & 0x0f;
-    }
-
-  for (j = 0; j < 4; j++)
-    {
-      if ((ch = from[i++]) == 0)
-	break;
-      *len_ptr = *len_ptr << 4;
-      *len_ptr |= fromhex (ch) & 0x0f;
-    }
-}
-
-void
-decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
-		 unsigned char **to_p)
-{
-  int i = 0;
-  char ch;
-  *mem_addr_ptr = *len_ptr = 0;
-
-  while ((ch = from[i++]) != ',')
-    {
-      *mem_addr_ptr = *mem_addr_ptr << 4;
-      *mem_addr_ptr |= fromhex (ch) & 0x0f;
-    }
-
-  while ((ch = from[i++]) != ':')
-    {
-      *len_ptr = *len_ptr << 4;
-      *len_ptr |= fromhex (ch) & 0x0f;
-    }
-
-  if (*to_p == NULL)
-    *to_p = (unsigned char *) xmalloc (*len_ptr);
-
-  hex2bin (&from[i++], *to_p, *len_ptr);
-}
-
-int
-decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
-		 unsigned int *len_ptr, unsigned char **to_p)
-{
-  int i = 0;
-  char ch;
-  *mem_addr_ptr = *len_ptr = 0;
-
-  while ((ch = from[i++]) != ',')
-    {
-      *mem_addr_ptr = *mem_addr_ptr << 4;
-      *mem_addr_ptr |= fromhex (ch) & 0x0f;
-    }
-
-  while ((ch = from[i++]) != ':')
-    {
-      *len_ptr = *len_ptr << 4;
-      *len_ptr |= fromhex (ch) & 0x0f;
-    }
-
-  if (*to_p == NULL)
-    *to_p = (unsigned char *) xmalloc (*len_ptr);
-
-  if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
-			     *to_p, *len_ptr) != *len_ptr)
-    return -1;
-
-  return 0;
-}
-
-/* Decode a qXfer write request.  */
-
-int
-decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset,
-		   unsigned int *len, unsigned char *data)
-{
-  char ch;
-  char *b = buf;
-
-  /* Extract the offset.  */
-  *offset = 0;
-  while ((ch = *buf++) != ':')
-    {
-      *offset = *offset << 4;
-      *offset |= fromhex (ch) & 0x0f;
-    }
-
-  /* Get encoded data.  */
-  packet_len -= buf - b;
-  *len = remote_unescape_input ((const gdb_byte *) buf, packet_len,
-				data, packet_len);
-  return 0;
-}
-
-/* Decode the parameters of a qSearch:memory packet.  */
-
-int
-decode_search_memory_packet (const char *buf, int packet_len,
-			     CORE_ADDR *start_addrp,
-			     CORE_ADDR *search_space_lenp,
-			     gdb_byte *pattern, unsigned int *pattern_lenp)
-{
-  const char *p = buf;
-
-  p = decode_address_to_semicolon (start_addrp, p);
-  p = decode_address_to_semicolon (search_space_lenp, p);
-  packet_len -= p - buf;
-  *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len,
-					 pattern, packet_len);
-  return 0;
-}
-
-static void
-free_sym_cache (struct sym_cache *sym)
-{
-  if (sym != NULL)
-    {
-      free (sym->name);
-      free (sym);
-    }
-}
-
-void
-clear_symbol_cache (struct sym_cache **symcache_p)
-{
-  struct sym_cache *sym, *next;
-
-  /* Check the cache first.  */
-  for (sym = *symcache_p; sym; sym = next)
-    {
-      next = sym->next;
-      free_sym_cache (sym);
-    }
-
-  *symcache_p = NULL;
-}
-
-/* Get the address of NAME, and return it in ADDRP if found.  if
-   MAY_ASK_GDB is false, assume symbol cache misses are failures.
-   Returns 1 if the symbol is found, 0 if it is not, -1 on error.  */
-
-int
-look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
-{
-  client_state &cs = get_client_state ();
-  char *p, *q;
-  int len;
-  struct sym_cache *sym;
-  struct process_info *proc;
-
-  proc = current_process ();
-
-  /* Check the cache first.  */
-  for (sym = proc->symbol_cache; sym; sym = sym->next)
-    if (strcmp (name, sym->name) == 0)
-      {
-	*addrp = sym->addr;
-	return 1;
-      }
-
-  /* It might not be an appropriate time to look up a symbol,
-     e.g. while we're trying to fetch registers.  */
-  if (!may_ask_gdb)
-    return 0;
-
-  /* Send the request.  */
-  strcpy (cs.own_buf, "qSymbol:");
-  bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"),
-	  strlen (name));
-  if (putpkt (cs.own_buf) < 0)
-    return -1;
-
-  /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
-  len = getpkt (cs.own_buf);
-  if (len < 0)
-    return -1;
-
-  /* We ought to handle pretty much any packet at this point while we
-     wait for the qSymbol "response".  That requires re-entering the
-     main loop.  For now, this is an adequate approximation; allow
-     GDB to read from memory and handle 'v' packets (for vFile transfers)
-     while it figures out the address of the symbol.  */
-  while (1)
-    {
-      if (cs.own_buf[0] == 'm')
-	{
-	  CORE_ADDR mem_addr;
-	  unsigned char *mem_buf;
-	  unsigned int mem_len;
-
-	  decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
-	  mem_buf = (unsigned char *) xmalloc (mem_len);
-	  if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
-	    bin2hex (mem_buf, cs.own_buf, mem_len);
-	  else
-	    write_enn (cs.own_buf);
-	  free (mem_buf);
-	  if (putpkt (cs.own_buf) < 0)
-	    return -1;
-	}
-      else if (cs.own_buf[0] == 'v')
-	{
-	  int new_len = -1;
-	  handle_v_requests (cs.own_buf, len, &new_len);
-	  if (new_len != -1)
-	    putpkt_binary (cs.own_buf, new_len);
-	  else
-	    putpkt (cs.own_buf);
-	}
-      else
-	break;
-      len = getpkt (cs.own_buf);
-      if (len < 0)
-	return -1;
-    }
-
-  if (!startswith (cs.own_buf, "qSymbol:"))
-    {
-      warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf);
-      return -1;
-    }
-
-  p = cs.own_buf + strlen ("qSymbol:");
-  q = p;
-  while (*q && *q != ':')
-    q++;
-
-  /* Make sure we found a value for the symbol.  */
-  if (p == q || *q == '\0')
-    return 0;
-
-  decode_address (addrp, p, q - p);
-
-  /* Save the symbol in our cache.  */
-  sym = XNEW (struct sym_cache);
-  sym->name = xstrdup (name);
-  sym->addr = *addrp;
-  sym->next = proc->symbol_cache;
-  proc->symbol_cache = sym;
-
-  return 1;
-}
-
-/* Relocate an instruction to execute at a different address.  OLDLOC
-   is the address in the inferior memory where the instruction to
-   relocate is currently at.  On input, TO points to the destination
-   where we want the instruction to be copied (and possibly adjusted)
-   to.  On output, it points to one past the end of the resulting
-   instruction(s).  The effect of executing the instruction at TO
-   shall be the same as if executing it at OLDLOC.  For example, call
-   instructions that implicitly push the return address on the stack
-   should be adjusted to return to the instruction after OLDLOC;
-   relative branches, and other PC-relative instructions need the
-   offset adjusted; etc.  Returns 0 on success, -1 on failure.  */
-
-int
-relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc)
-{
-  client_state &cs = get_client_state ();
-  int len;
-  ULONGEST written = 0;
-
-  /* Send the request.  */
-  sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc),
-	   paddress (*to));
-  if (putpkt (cs.own_buf) < 0)
-    return -1;
-
-  /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
-  len = getpkt (cs.own_buf);
-  if (len < 0)
-    return -1;
-
-  /* We ought to handle pretty much any packet at this point while we
-     wait for the qRelocInsn "response".  That requires re-entering
-     the main loop.  For now, this is an adequate approximation; allow
-     GDB to access memory.  */
-  while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X')
-    {
-      CORE_ADDR mem_addr;
-      unsigned char *mem_buf = NULL;
-      unsigned int mem_len;
-
-      if (cs.own_buf[0] == 'm')
-	{
-	  decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len);
-	  mem_buf = (unsigned char *) xmalloc (mem_len);
-	  if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0)
-	    bin2hex (mem_buf, cs.own_buf, mem_len);
-	  else
-	    write_enn (cs.own_buf);
-	}
-      else if (cs.own_buf[0] == 'X')
-	{
-	  if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr,
-			       &mem_len, &mem_buf) < 0
-	      || target_write_memory (mem_addr, mem_buf, mem_len) != 0)
-	    write_enn (cs.own_buf);
-	  else
-	    write_ok (cs.own_buf);
-	}
-      else
-	{
-	  decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf);
-	  if (target_write_memory (mem_addr, mem_buf, mem_len) == 0)
-	    write_ok (cs.own_buf);
-	  else
-	    write_enn (cs.own_buf);
-	}
-      free (mem_buf);
-      if (putpkt (cs.own_buf) < 0)
-	return -1;
-      len = getpkt (cs.own_buf);
-      if (len < 0)
-	return -1;
-    }
-
-  if (cs.own_buf[0] == 'E')
-    {
-      warning ("An error occurred while relocating an instruction: %s",
-	       cs.own_buf);
-      return -1;
-    }
-
-  if (!startswith (cs.own_buf, "qRelocInsn:"))
-    {
-      warning ("Malformed response to qRelocInsn, ignoring: %s",
-	       cs.own_buf);
-      return -1;
-    }
-
-  unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written);
-
-  *to += written;
-  return 0;
-}
-
-void
-monitor_output (const char *msg)
-{
-  int len = strlen (msg);
-  char *buf = (char *) xmalloc (len * 2 + 2);
-
-  buf[0] = 'O';
-  bin2hex ((const gdb_byte *) msg, buf + 1, len);
-
-  putpkt (buf);
-  free (buf);
-}
-
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/remote-utils.h ./gdb/gdbserver/remote-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/remote-utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/remote-utils.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-/* Remote utility routines for the remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_REMOTE_UTILS_H
-#define GDBSERVER_REMOTE_UTILS_H
-
-int gdb_connected (void);
-
-#define STDIO_CONNECTION_NAME "stdio"
-int remote_connection_is_stdio (void);
-
-ptid_t read_ptid (const char *buf, const char **obuf);
-char *write_ptid (char *buf, ptid_t ptid);
-
-int putpkt (char *buf);
-int putpkt_binary (char *buf, int len);
-int putpkt_notif (char *buf);
-int getpkt (char *buf);
-void remote_prepare (const char *name);
-void remote_open (const char *name);
-void remote_close (void);
-void write_ok (char *buf);
-void write_enn (char *buf);
-void initialize_async_io (void);
-void enable_async_io (void);
-void disable_async_io (void);
-void check_remote_input_interrupt_request (void);
-void prepare_resume_reply (char *buf, ptid_t ptid,
-			   struct target_waitstatus *status);
-
-const char *decode_address_to_semicolon (CORE_ADDR *addrp, const char *start);
-void decode_address (CORE_ADDR *addrp, const char *start, int len);
-void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr,
-		      unsigned int *len_ptr);
-void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
-		      unsigned int *len_ptr, unsigned char **to_p);
-int decode_X_packet (char *from, int packet_len, CORE_ADDR * mem_addr_ptr,
-		     unsigned int *len_ptr, unsigned char **to_p);
-int decode_xfer_write (char *buf, int packet_len,
-		       CORE_ADDR *offset, unsigned int *len,
-		       unsigned char *data);
-int decode_search_memory_packet (const char *buf, int packet_len,
-				 CORE_ADDR *start_addrp,
-				 CORE_ADDR *search_space_lenp,
-				 gdb_byte *pattern,
-				 unsigned int *pattern_lenp);
-
-void clear_symbol_cache (struct sym_cache **symcache_p);
-int look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb);
-
-int relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc);
-
-void monitor_output (const char *msg);
-
-#endif /* GDBSERVER_REMOTE_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/server.c ./gdb/gdbserver/server.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/server.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/server.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,4485 +0,0 @@
-/* Main code for remote server for GDB.
-   Copyright (C) 1989-2020 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 "server.h"
-#include "gdbthread.h"
-#include "gdbsupport/agent.h"
-#include "notif.h"
-#include "tdesc.h"
-#include "gdbsupport/rsp-low.h"
-#include "gdbsupport/signals-state-save-restore.h"
-#include <ctype.h>
-#include <unistd.h>
-#if HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#include "gdbsupport/gdb_vecs.h"
-#include "gdbsupport/gdb_wait.h"
-#include "gdbsupport/btrace-common.h"
-#include "gdbsupport/filestuff.h"
-#include "tracepoint.h"
-#include "dll.h"
-#include "hostio.h"
-#include <vector>
-#include "gdbsupport/common-inferior.h"
-#include "gdbsupport/job-control.h"
-#include "gdbsupport/environ.h"
-#include "filenames.h"
-#include "gdbsupport/pathstuff.h"
-#ifdef USE_XML
-#include "xml-builtin.h"
-#endif
-
-#include "gdbsupport/selftest.h"
-#include "gdbsupport/scope-exit.h"
-
-#define require_running_or_return(BUF)		\
-  if (!target_running ())			\
-    {						\
-      write_enn (BUF);				\
-      return;					\
-    }
-
-#define require_running_or_break(BUF)		\
-  if (!target_running ())			\
-    {						\
-      write_enn (BUF);				\
-      break;					\
-    }
-
-/* String containing the current directory (what getwd would return).  */
-
-char *current_directory;
-
-/* The environment to pass to the inferior when creating it.  */
-
-static gdb_environ our_environ;
-
-bool server_waiting;
-
-static bool extended_protocol;
-static bool response_needed;
-static bool exit_requested;
-
-/* --once: Exit after the first connection has closed.  */
-bool run_once;
-
-/* Whether to report TARGET_WAITKIND_NO_RESUMED events.  */
-static bool report_no_resumed;
-
-bool non_stop;
-
-static struct {
-  /* Set the PROGRAM_PATH.  Here we adjust the path of the provided
-     binary if needed.  */
-  void set (gdb::unique_xmalloc_ptr<char> &&path)
-  {
-    m_path = std::move (path);
-
-    /* Make sure we're using the absolute path of the inferior when
-       creating it.  */
-    if (!contains_dir_separator (m_path.get ()))
-      {
-	int reg_file_errno;
-
-	/* Check if the file is in our CWD.  If it is, then we prefix
-	   its name with CURRENT_DIRECTORY.  Otherwise, we leave the
-	   name as-is because we'll try searching for it in $PATH.  */
-	if (is_regular_file (m_path.get (), &reg_file_errno))
-	  m_path = gdb_abspath (m_path.get ());
-      }
-  }
-
-  /* Return the PROGRAM_PATH.  */
-  char *get ()
-  { return m_path.get (); }
-
-private:
-  /* The program name, adjusted if needed.  */
-  gdb::unique_xmalloc_ptr<char> m_path;
-} program_path;
-static std::vector<char *> program_args;
-static std::string wrapper_argv;
-
-/* The PID of the originally created or attached inferior.  Used to
-   send signals to the process when GDB sends us an asynchronous interrupt
-   (user hitting Control-C in the client), and to wait for the child to exit
-   when no longer debugging it.  */
-
-unsigned long signal_pid;
-
-/* Set if you want to disable optional thread related packets support
-   in gdbserver, for the sake of testing GDB against stubs that don't
-   support them.  */
-bool disable_packet_vCont;
-bool disable_packet_Tthread;
-bool disable_packet_qC;
-bool disable_packet_qfThreadInfo;
-
-static unsigned char *mem_buf;
-
-/* A sub-class of 'struct notif_event' for stop, holding information
-   relative to a single stop reply.  We keep a queue of these to
-   push to GDB in non-stop mode.  */
-
-struct vstop_notif : public notif_event
-{
-  /* Thread or process that got the event.  */
-  ptid_t ptid;
-
-  /* Event info.  */
-  struct target_waitstatus status;
-};
-
-/* The current btrace configuration.  This is gdbserver's mirror of GDB's
-   btrace configuration.  */
-static struct btrace_config current_btrace_conf;
-
-/* The client remote protocol state. */
-
-static client_state g_client_state;
-
-client_state &
-get_client_state ()
-{
-  client_state &cs = g_client_state;
-  return cs;
-}
-
-
-/* Put a stop reply to the stop reply queue.  */
-
-static void
-queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
-{
-  struct vstop_notif *new_notif = new struct vstop_notif;
-
-  new_notif->ptid = ptid;
-  new_notif->status = *status;
-
-  notif_event_enque (&notif_stop, new_notif);
-}
-
-static bool
-remove_all_on_match_ptid (struct notif_event *event, ptid_t filter_ptid)
-{
-  struct vstop_notif *vstop_event = (struct vstop_notif *) event;
-
-  return vstop_event->ptid.matches (filter_ptid);
-}
-
-/* See server.h.  */
-
-void
-discard_queued_stop_replies (ptid_t ptid)
-{
-  std::list<notif_event *>::iterator iter, next, end;
-  end = notif_stop.queue.end ();
-  for (iter = notif_stop.queue.begin (); iter != end; iter = next)
-    {
-      next = iter;
-      ++next;
-
-      if (remove_all_on_match_ptid (*iter, ptid))
-	{
-	  delete *iter;
-	  notif_stop.queue.erase (iter);
-	}
-    }
-}
-
-static void
-vstop_notif_reply (struct notif_event *event, char *own_buf)
-{
-  struct vstop_notif *vstop = (struct vstop_notif *) event;
-
-  prepare_resume_reply (own_buf, vstop->ptid, &vstop->status);
-}
-
-/* Helper for in_queued_stop_replies.  */
-
-static bool
-in_queued_stop_replies_ptid (struct notif_event *event, ptid_t filter_ptid)
-{
-  struct vstop_notif *vstop_event = (struct vstop_notif *) event;
-
-  if (vstop_event->ptid.matches (filter_ptid))
-    return true;
-
-  /* Don't resume fork children that GDB does not know about yet.  */
-  if ((vstop_event->status.kind == TARGET_WAITKIND_FORKED
-       || vstop_event->status.kind == TARGET_WAITKIND_VFORKED)
-      && vstop_event->status.value.related_pid.matches (filter_ptid))
-    return true;
-
-  return false;
-}
-
-/* See server.h.  */
-
-int
-in_queued_stop_replies (ptid_t ptid)
-{
-  for (notif_event *event : notif_stop.queue)
-    {
-      if (in_queued_stop_replies_ptid (event, ptid))
-	return true;
-    }
-
-  return false;
-}
-
-struct notif_server notif_stop =
-{
-  "vStopped", "Stop", {}, vstop_notif_reply,
-};
-
-static int
-target_running (void)
-{
-  return get_first_thread () != NULL;
-}
-
-/* See gdbsupport/common-inferior.h.  */
-
-const char *
-get_exec_wrapper ()
-{
-  return !wrapper_argv.empty () ? wrapper_argv.c_str () : NULL;
-}
-
-/* See gdbsupport/common-inferior.h.  */
-
-char *
-get_exec_file (int err)
-{
-  if (err && program_path.get () == NULL)
-    error (_("No executable file specified."));
-
-  return program_path.get ();
-}
-
-/* See server.h.  */
-
-gdb_environ *
-get_environ ()
-{
-  return &our_environ;
-}
-
-static int
-attach_inferior (int pid)
-{
-  client_state &cs = get_client_state ();
-  /* myattach should return -1 if attaching is unsupported,
-     0 if it succeeded, and call error() otherwise.  */
-
-  if (find_process_pid (pid) != nullptr)
-    error ("Already attached to process %d\n", pid);
-
-  if (myattach (pid) != 0)
-    return -1;
-
-  fprintf (stderr, "Attached; pid = %d\n", pid);
-  fflush (stderr);
-
-  /* FIXME - It may be that we should get the SIGNAL_PID from the
-     attach function, so that it can be the main thread instead of
-     whichever we were told to attach to.  */
-  signal_pid = pid;
-
-  if (!non_stop)
-    {
-      cs.last_ptid = mywait (ptid_t (pid), &cs.last_status, 0, 0);
-
-      /* GDB knows to ignore the first SIGSTOP after attaching to a running
-	 process using the "attach" command, but this is different; it's
-	 just using "target remote".  Pretend it's just starting up.  */
-      if (cs.last_status.kind == TARGET_WAITKIND_STOPPED
-	  && cs.last_status.value.sig == GDB_SIGNAL_STOP)
-	cs.last_status.value.sig = GDB_SIGNAL_TRAP;
-
-      current_thread->last_resume_kind = resume_stop;
-      current_thread->last_status = cs.last_status;
-    }
-
-  return 0;
-}
-
-/* Decode a qXfer read request.  Return 0 if everything looks OK,
-   or -1 otherwise.  */
-
-static int
-decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len)
-{
-  /* After the read marker and annex, qXfer looks like a
-     traditional 'm' packet.  */
-  decode_m_packet (buf, ofs, len);
-
-  return 0;
-}
-
-static int
-decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset)
-{
-  /* Extract and NUL-terminate the object.  */
-  *object = buf;
-  while (*buf && *buf != ':')
-    buf++;
-  if (*buf == '\0')
-    return -1;
-  *buf++ = 0;
-
-  /* Extract and NUL-terminate the read/write action.  */
-  *rw = buf;
-  while (*buf && *buf != ':')
-    buf++;
-  if (*buf == '\0')
-    return -1;
-  *buf++ = 0;
-
-  /* Extract and NUL-terminate the annex.  */
-  *annex = buf;
-  while (*buf && *buf != ':')
-    buf++;
-  if (*buf == '\0')
-    return -1;
-  *buf++ = 0;
-
-  *offset = buf;
-  return 0;
-}
-
-/* Write the response to a successful qXfer read.  Returns the
-   length of the (binary) data stored in BUF, corresponding
-   to as much of DATA/LEN as we could fit.  IS_MORE controls
-   the first character of the response.  */
-static int
-write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more)
-{
-  int out_len;
-
-  if (is_more)
-    buf[0] = 'm';
-  else
-    buf[0] = 'l';
-
-  return remote_escape_output (data, len, 1, (unsigned char *) buf + 1,
-			       &out_len, PBUFSIZ - 2) + 1;
-}
-
-/* Handle btrace enabling in BTS format.  */
-
-static void
-handle_btrace_enable_bts (struct thread_info *thread)
-{
-  if (thread->btrace != NULL)
-    error (_("Btrace already enabled."));
-
-  current_btrace_conf.format = BTRACE_FORMAT_BTS;
-  thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
-}
-
-/* Handle btrace enabling in Intel Processor Trace format.  */
-
-static void
-handle_btrace_enable_pt (struct thread_info *thread)
-{
-  if (thread->btrace != NULL)
-    error (_("Btrace already enabled."));
-
-  current_btrace_conf.format = BTRACE_FORMAT_PT;
-  thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
-}
-
-/* Handle btrace disabling.  */
-
-static void
-handle_btrace_disable (struct thread_info *thread)
-{
-
-  if (thread->btrace == NULL)
-    error (_("Branch tracing not enabled."));
-
-  if (target_disable_btrace (thread->btrace) != 0)
-    error (_("Could not disable branch tracing."));
-
-  thread->btrace = NULL;
-}
-
-/* Handle the "Qbtrace" packet.  */
-
-static int
-handle_btrace_general_set (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  struct thread_info *thread;
-  char *op;
-
-  if (!startswith (own_buf, "Qbtrace:"))
-    return 0;
-
-  op = own_buf + strlen ("Qbtrace:");
-
-  if (cs.general_thread == null_ptid
-      || cs.general_thread == minus_one_ptid)
-    {
-      strcpy (own_buf, "E.Must select a single thread.");
-      return -1;
-    }
-
-  thread = find_thread_ptid (cs.general_thread);
-  if (thread == NULL)
-    {
-      strcpy (own_buf, "E.No such thread.");
-      return -1;
-    }
-
-  try
-    {
-      if (strcmp (op, "bts") == 0)
-	handle_btrace_enable_bts (thread);
-      else if (strcmp (op, "pt") == 0)
-	handle_btrace_enable_pt (thread);
-      else if (strcmp (op, "off") == 0)
-	handle_btrace_disable (thread);
-      else
-	error (_("Bad Qbtrace operation.  Use bts, pt, or off."));
-
-      write_ok (own_buf);
-    }
-  catch (const gdb_exception_error &exception)
-    {
-      sprintf (own_buf, "E.%s", exception.what ());
-    }
-
-  return 1;
-}
-
-/* Handle the "Qbtrace-conf" packet.  */
-
-static int
-handle_btrace_conf_general_set (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  struct thread_info *thread;
-  char *op;
-
-  if (!startswith (own_buf, "Qbtrace-conf:"))
-    return 0;
-
-  op = own_buf + strlen ("Qbtrace-conf:");
-
-  if (cs.general_thread == null_ptid
-      || cs.general_thread == minus_one_ptid)
-    {
-      strcpy (own_buf, "E.Must select a single thread.");
-      return -1;
-    }
-
-  thread = find_thread_ptid (cs.general_thread);
-  if (thread == NULL)
-    {
-      strcpy (own_buf, "E.No such thread.");
-      return -1;
-    }
-
-  if (startswith (op, "bts:size="))
-    {
-      unsigned long size;
-      char *endp = NULL;
-
-      errno = 0;
-      size = strtoul (op + strlen ("bts:size="), &endp, 16);
-      if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX)
-	{
-	  strcpy (own_buf, "E.Bad size value.");
-	  return -1;
-	}
-
-      current_btrace_conf.bts.size = (unsigned int) size;
-    }
-  else if (strncmp (op, "pt:size=", strlen ("pt:size=")) == 0)
-    {
-      unsigned long size;
-      char *endp = NULL;
-
-      errno = 0;
-      size = strtoul (op + strlen ("pt:size="), &endp, 16);
-      if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX)
-	{
-	  strcpy (own_buf, "E.Bad size value.");
-	  return -1;
-	}
-
-      current_btrace_conf.pt.size = (unsigned int) size;
-    }
-  else
-    {
-      strcpy (own_buf, "E.Bad Qbtrace configuration option.");
-      return -1;
-    }
-
-  write_ok (own_buf);
-  return 1;
-}
-
-/* Handle all of the extended 'Q' packets.  */
-
-static void
-handle_general_set (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  if (startswith (own_buf, "QPassSignals:"))
-    {
-      int numsigs = (int) GDB_SIGNAL_LAST, i;
-      const char *p = own_buf + strlen ("QPassSignals:");
-      CORE_ADDR cursig;
-
-      p = decode_address_to_semicolon (&cursig, p);
-      for (i = 0; i < numsigs; i++)
-	{
-	  if (i == cursig)
-	    {
-	      cs.pass_signals[i] = 1;
-	      if (*p == '\0')
-		/* Keep looping, to clear the remaining signals.  */
-		cursig = -1;
-	      else
-		p = decode_address_to_semicolon (&cursig, p);
-	    }
-	  else
-	    cs.pass_signals[i] = 0;
-	}
-      strcpy (own_buf, "OK");
-      return;
-    }
-
-  if (startswith (own_buf, "QProgramSignals:"))
-    {
-      int numsigs = (int) GDB_SIGNAL_LAST, i;
-      const char *p = own_buf + strlen ("QProgramSignals:");
-      CORE_ADDR cursig;
-
-      cs.program_signals_p = 1;
-
-      p = decode_address_to_semicolon (&cursig, p);
-      for (i = 0; i < numsigs; i++)
-	{
-	  if (i == cursig)
-	    {
-	      cs.program_signals[i] = 1;
-	      if (*p == '\0')
-		/* Keep looping, to clear the remaining signals.  */
-		cursig = -1;
-	      else
-		p = decode_address_to_semicolon (&cursig, p);
-	    }
-	  else
-	    cs.program_signals[i] = 0;
-	}
-      strcpy (own_buf, "OK");
-      return;
-    }
-
-  if (startswith (own_buf, "QCatchSyscalls:"))
-    {
-      const char *p = own_buf + sizeof ("QCatchSyscalls:") - 1;
-      int enabled = -1;
-      CORE_ADDR sysno;
-      struct process_info *process;
-
-      if (!target_running () || !target_supports_catch_syscall ())
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-
-      if (strcmp (p, "0") == 0)
-	enabled = 0;
-      else if (p[0] == '1' && (p[1] == ';' || p[1] == '\0'))
-	enabled = 1;
-      else
-	{
-	  fprintf (stderr, "Unknown catch-syscalls mode requested: %s\n",
-		   own_buf);
-	  write_enn (own_buf);
-	  return;
-	}
-
-      process = current_process ();
-      process->syscalls_to_catch.clear ();
-
-      if (enabled)
-	{
-	  p += 1;
-	  if (*p == ';')
-	    {
-	      p += 1;
-	      while (*p != '\0')
-		{
-		  p = decode_address_to_semicolon (&sysno, p);
-		  process->syscalls_to_catch.push_back (sysno);
-		}
-	    }
-	  else
-	    process->syscalls_to_catch.push_back (ANY_SYSCALL);
-	}
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (strcmp (own_buf, "QEnvironmentReset") == 0)
-    {
-      our_environ = gdb_environ::from_host_environ ();
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "QEnvironmentHexEncoded:"))
-    {
-      const char *p = own_buf + sizeof ("QEnvironmentHexEncoded:") - 1;
-      /* The final form of the environment variable.  FINAL_VAR will
-	 hold the 'VAR=VALUE' format.  */
-      std::string final_var = hex2str (p);
-      std::string var_name, var_value;
-
-      if (remote_debug)
-	{
-	  debug_printf (_("[QEnvironmentHexEncoded received '%s']\n"), p);
-	  debug_printf (_("[Environment variable to be set: '%s']\n"),
-			final_var.c_str ());
-	  debug_flush ();
-	}
-
-      size_t pos = final_var.find ('=');
-      if (pos == std::string::npos)
-	{
-	  warning (_("Unexpected format for environment variable: '%s'"),
-		   final_var.c_str ());
-	  write_enn (own_buf);
-	  return;
-	}
-
-      var_name = final_var.substr (0, pos);
-      var_value = final_var.substr (pos + 1, std::string::npos);
-
-      our_environ.set (var_name.c_str (), var_value.c_str ());
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "QEnvironmentUnset:"))
-    {
-      const char *p = own_buf + sizeof ("QEnvironmentUnset:") - 1;
-      std::string varname = hex2str (p);
-
-      if (remote_debug)
-	{
-	  debug_printf (_("[QEnvironmentUnset received '%s']\n"), p);
-	  debug_printf (_("[Environment variable to be unset: '%s']\n"),
-			varname.c_str ());
-	  debug_flush ();
-	}
-
-      our_environ.unset (varname.c_str ());
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (strcmp (own_buf, "QStartNoAckMode") == 0)
-    {
-      if (remote_debug)
-	{
-	  debug_printf ("[noack mode enabled]\n");
-	  debug_flush ();
-	}
-
-      cs.noack_mode = 1;
-      write_ok (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "QNonStop:"))
-    {
-      char *mode = own_buf + 9;
-      int req = -1;
-      const char *req_str;
-
-      if (strcmp (mode, "0") == 0)
-	req = 0;
-      else if (strcmp (mode, "1") == 0)
-	req = 1;
-      else
-	{
-	  /* We don't know what this mode is, so complain to
-	     GDB.  */
-	  fprintf (stderr, "Unknown non-stop mode requested: %s\n",
-		   own_buf);
-	  write_enn (own_buf);
-	  return;
-	}
-
-      req_str = req ? "non-stop" : "all-stop";
-      if (start_non_stop (req) != 0)
-	{
-	  fprintf (stderr, "Setting %s mode failed\n", req_str);
-	  write_enn (own_buf);
-	  return;
-	}
-
-      non_stop = (req != 0);
-
-      if (remote_debug)
-	debug_printf ("[%s mode enabled]\n", req_str);
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "QDisableRandomization:"))
-    {
-      char *packet = own_buf + strlen ("QDisableRandomization:");
-      ULONGEST setting;
-
-      unpack_varlen_hex (packet, &setting);
-      cs.disable_randomization = setting;
-
-      if (remote_debug)
-	{
-	  debug_printf (cs.disable_randomization
-			? "[address space randomization disabled]\n"
-			: "[address space randomization enabled]\n");
-	}
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (target_supports_tracepoints ()
-      && handle_tracepoint_general_set (own_buf))
-    return;
-
-  if (startswith (own_buf, "QAgent:"))
-    {
-      char *mode = own_buf + strlen ("QAgent:");
-      int req = 0;
-
-      if (strcmp (mode, "0") == 0)
-	req = 0;
-      else if (strcmp (mode, "1") == 0)
-	req = 1;
-      else
-	{
-	  /* We don't know what this value is, so complain to GDB.  */
-	  sprintf (own_buf, "E.Unknown QAgent value");
-	  return;
-	}
-
-      /* Update the flag.  */
-      use_agent = req;
-      if (remote_debug)
-	debug_printf ("[%s agent]\n", req ? "Enable" : "Disable");
-      write_ok (own_buf);
-      return;
-    }
-
-  if (handle_btrace_general_set (own_buf))
-    return;
-
-  if (handle_btrace_conf_general_set (own_buf))
-    return;
-
-  if (startswith (own_buf, "QThreadEvents:"))
-    {
-      char *mode = own_buf + strlen ("QThreadEvents:");
-      enum tribool req = TRIBOOL_UNKNOWN;
-
-      if (strcmp (mode, "0") == 0)
-	req = TRIBOOL_FALSE;
-      else if (strcmp (mode, "1") == 0)
-	req = TRIBOOL_TRUE;
-      else
-	{
-	  /* We don't know what this mode is, so complain to GDB.  */
-	  sprintf (own_buf, "E.Unknown thread-events mode requested: %s\n",
-		   mode);
-	  return;
-	}
-
-      cs.report_thread_events = (req == TRIBOOL_TRUE);
-
-      if (remote_debug)
-	{
-	  const char *req_str = cs.report_thread_events ? "enabled" : "disabled";
-
-	  debug_printf ("[thread events are now %s]\n", req_str);
-	}
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "QStartupWithShell:"))
-    {
-      const char *value = own_buf + strlen ("QStartupWithShell:");
-
-      if (strcmp (value, "1") == 0)
-	startup_with_shell = true;
-      else if (strcmp (value, "0") == 0)
-	startup_with_shell = false;
-      else
-	{
-	  /* Unknown value.  */
-	  fprintf (stderr, "Unknown value to startup-with-shell: %s\n",
-		   own_buf);
-	  write_enn (own_buf);
-	  return;
-	}
-
-      if (remote_debug)
-	debug_printf (_("[Inferior will %s started with shell]"),
-		      startup_with_shell ? "be" : "not be");
-
-      write_ok (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "QSetWorkingDir:"))
-    {
-      const char *p = own_buf + strlen ("QSetWorkingDir:");
-
-      if (*p != '\0')
-	{
-	  std::string path = hex2str (p);
-
-	  set_inferior_cwd (path.c_str ());
-
-	  if (remote_debug)
-	    debug_printf (_("[Set the inferior's current directory to %s]\n"),
-			  path.c_str ());
-	}
-      else
-	{
-	  /* An empty argument means that we should clear out any
-	     previously set cwd for the inferior.  */
-	  set_inferior_cwd (NULL);
-
-	  if (remote_debug)
-	    debug_printf (_("\
-[Unset the inferior's current directory; will use gdbserver's cwd]\n"));
-	}
-      write_ok (own_buf);
-
-      return;
-    }
-
-  /* Otherwise we didn't know what packet it was.  Say we didn't
-     understand it.  */
-  own_buf[0] = 0;
-}
-
-static const char *
-get_features_xml (const char *annex)
-{
-  const struct target_desc *desc = current_target_desc ();
-
-  /* `desc->xmltarget' defines what to return when looking for the
-     "target.xml" file.  Its contents can either be verbatim XML code
-     (prefixed with a '@') or else the name of the actual XML file to
-     be used in place of "target.xml".
-
-     This variable is set up from the auto-generated
-     init_registers_... routine for the current target.  */
-
-  if (strcmp (annex, "target.xml") == 0)
-    {
-      const char *ret = tdesc_get_features_xml (desc);
-
-      if (*ret == '@')
-	return ret + 1;
-      else
-	annex = ret;
-    }
-
-#ifdef USE_XML
-  {
-    int i;
-
-    /* Look for the annex.  */
-    for (i = 0; xml_builtin[i][0] != NULL; i++)
-      if (strcmp (annex, xml_builtin[i][0]) == 0)
-	break;
-
-    if (xml_builtin[i][0] != NULL)
-      return xml_builtin[i][1];
-  }
-#endif
-
-  return NULL;
-}
-
-static void
-monitor_show_help (void)
-{
-  monitor_output ("The following monitor commands are supported:\n");
-  monitor_output ("  set debug <0|1>\n");
-  monitor_output ("    Enable general debugging messages\n");
-  monitor_output ("  set debug-hw-points <0|1>\n");
-  monitor_output ("    Enable h/w breakpoint/watchpoint debugging messages\n");
-  monitor_output ("  set remote-debug <0|1>\n");
-  monitor_output ("    Enable remote protocol debugging messages\n");
-  monitor_output ("  set debug-format option1[,option2,...]\n");
-  monitor_output ("    Add additional information to debugging messages\n");
-  monitor_output ("    Options: all, none");
-  monitor_output (", timestamp");
-  monitor_output ("\n");
-  monitor_output ("  exit\n");
-  monitor_output ("    Quit GDBserver\n");
-}
-
-/* Read trace frame or inferior memory.  Returns the number of bytes
-   actually read, zero when no further transfer is possible, and -1 on
-   error.  Return of a positive value smaller than LEN does not
-   indicate there's no more to be read, only the end of the transfer.
-   E.g., when GDB reads memory from a traceframe, a first request may
-   be served from a memory block that does not cover the whole request
-   length.  A following request gets the rest served from either
-   another block (of the same traceframe) or from the read-only
-   regions.  */
-
-static int
-gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  client_state &cs = get_client_state ();
-  int res;
-
-  if (cs.current_traceframe >= 0)
-    {
-      ULONGEST nbytes;
-      ULONGEST length = len;
-
-      if (traceframe_read_mem (cs.current_traceframe,
-			       memaddr, myaddr, len, &nbytes))
-	return -1;
-      /* Data read from trace buffer, we're done.  */
-      if (nbytes > 0)
-	return nbytes;
-      if (!in_readonly_region (memaddr, length))
-	return -1;
-      /* Otherwise we have a valid readonly case, fall through.  */
-      /* (assume no half-trace half-real blocks for now) */
-    }
-
-  res = prepare_to_access_memory ();
-  if (res == 0)
-    {
-      if (set_desired_thread ())
-	res = read_inferior_memory (memaddr, myaddr, len);
-      else
-	res = 1;
-      done_accessing_memory ();
-
-      return res == 0 ? len : -1;
-    }
-  else
-    return -1;
-}
-
-/* Write trace frame or inferior memory.  Actually, writing to trace
-   frames is forbidden.  */
-
-static int
-gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
-{
-  client_state &cs = get_client_state ();
-  if (cs.current_traceframe >= 0)
-    return EIO;
-  else
-    {
-      int ret;
-
-      ret = prepare_to_access_memory ();
-      if (ret == 0)
-	{
-	  if (set_desired_thread ())
-	    ret = target_write_memory (memaddr, myaddr, len);
-	  else
-	    ret = EIO;
-	  done_accessing_memory ();
-	}
-      return ret;
-    }
-}
-
-/* Subroutine of handle_search_memory to simplify it.  */
-
-static int
-handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
-			gdb_byte *pattern, unsigned pattern_len,
-			gdb_byte *search_buf,
-			unsigned chunk_size, unsigned search_buf_size,
-			CORE_ADDR *found_addrp)
-{
-  /* Prime the search buffer.  */
-
-  if (gdb_read_memory (start_addr, search_buf, search_buf_size)
-      != search_buf_size)
-    {
-      warning ("Unable to access %ld bytes of target "
-	       "memory at 0x%lx, halting search.",
-	       (long) search_buf_size, (long) start_addr);
-      return -1;
-    }
-
-  /* Perform the search.
-
-     The loop is kept simple by allocating [N + pattern-length - 1] bytes.
-     When we've scanned N bytes we copy the trailing bytes to the start and
-     read in another N bytes.  */
-
-  while (search_space_len >= pattern_len)
-    {
-      gdb_byte *found_ptr;
-      unsigned nr_search_bytes = (search_space_len < search_buf_size
-				  ? search_space_len
-				  : search_buf_size);
-
-      found_ptr = (gdb_byte *) memmem (search_buf, nr_search_bytes, pattern,
-				       pattern_len);
-
-      if (found_ptr != NULL)
-	{
-	  CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
-	  *found_addrp = found_addr;
-	  return 1;
-	}
-
-      /* Not found in this chunk, skip to next chunk.  */
-
-      /* Don't let search_space_len wrap here, it's unsigned.  */
-      if (search_space_len >= chunk_size)
-	search_space_len -= chunk_size;
-      else
-	search_space_len = 0;
-
-      if (search_space_len >= pattern_len)
-	{
-	  unsigned keep_len = search_buf_size - chunk_size;
-	  CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
-	  int nr_to_read;
-
-	  /* Copy the trailing part of the previous iteration to the front
-	     of the buffer for the next iteration.  */
-	  memcpy (search_buf, search_buf + chunk_size, keep_len);
-
-	  nr_to_read = (search_space_len - keep_len < chunk_size
-			? search_space_len - keep_len
-			: chunk_size);
-
-	  if (gdb_read_memory (read_addr, search_buf + keep_len,
-			       nr_to_read) != search_buf_size)
-	    {
-	      warning ("Unable to access %ld bytes of target memory "
-		       "at 0x%lx, halting search.",
-		       (long) nr_to_read, (long) read_addr);
-	      return -1;
-	    }
-
-	  start_addr += chunk_size;
-	}
-    }
-
-  /* Not found.  */
-
-  return 0;
-}
-
-/* Handle qSearch:memory packets.  */
-
-static void
-handle_search_memory (char *own_buf, int packet_len)
-{
-  CORE_ADDR start_addr;
-  CORE_ADDR search_space_len;
-  gdb_byte *pattern;
-  unsigned int pattern_len;
-  /* NOTE: also defined in find.c testcase.  */
-#define SEARCH_CHUNK_SIZE 16000
-  const unsigned chunk_size = SEARCH_CHUNK_SIZE;
-  /* Buffer to hold memory contents for searching.  */
-  gdb_byte *search_buf;
-  unsigned search_buf_size;
-  int found;
-  CORE_ADDR found_addr;
-  int cmd_name_len = sizeof ("qSearch:memory:") - 1;
-
-  pattern = (gdb_byte *) malloc (packet_len);
-  if (pattern == NULL)
-    {
-      error ("Unable to allocate memory to perform the search");
-      strcpy (own_buf, "E00");
-      return;
-    }
-  if (decode_search_memory_packet (own_buf + cmd_name_len,
-				   packet_len - cmd_name_len,
-				   &start_addr, &search_space_len,
-				   pattern, &pattern_len) < 0)
-    {
-      free (pattern);
-      error ("Error in parsing qSearch:memory packet");
-      strcpy (own_buf, "E00");
-      return;
-    }
-
-  search_buf_size = chunk_size + pattern_len - 1;
-
-  /* No point in trying to allocate a buffer larger than the search space.  */
-  if (search_space_len < search_buf_size)
-    search_buf_size = search_space_len;
-
-  search_buf = (gdb_byte *) malloc (search_buf_size);
-  if (search_buf == NULL)
-    {
-      free (pattern);
-      error ("Unable to allocate memory to perform the search");
-      strcpy (own_buf, "E00");
-      return;
-    }
-
-  found = handle_search_memory_1 (start_addr, search_space_len,
-				  pattern, pattern_len,
-				  search_buf, chunk_size, search_buf_size,
-				  &found_addr);
-
-  if (found > 0)
-    sprintf (own_buf, "1,%lx", (long) found_addr);
-  else if (found == 0)
-    strcpy (own_buf, "0");
-  else
-    strcpy (own_buf, "E00");
-
-  free (search_buf);
-  free (pattern);
-}
-
-/* Handle the "D" packet.  */
-
-static void
-handle_detach (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-
-  process_info *process;
-
-  if (cs.multi_process)
-    {
-      /* skip 'D;' */
-      int pid = strtol (&own_buf[2], NULL, 16);
-
-      process = find_process_pid (pid);
-    }
-  else
-    {
-      process = (current_thread != nullptr
-		 ? get_thread_process (current_thread)
-		 : nullptr);
-    }
-
-  if (process == NULL)
-    {
-      write_enn (own_buf);
-      return;
-    }
-
-  if ((tracing && disconnected_tracing) || any_persistent_commands (process))
-    {
-      if (tracing && disconnected_tracing)
-	fprintf (stderr,
-		 "Disconnected tracing in effect, "
-		 "leaving gdbserver attached to the process\n");
-
-      if (any_persistent_commands (process))
-	fprintf (stderr,
-		 "Persistent commands are present, "
-		 "leaving gdbserver attached to the process\n");
-
-      /* Make sure we're in non-stop/async mode, so we we can both
-	 wait for an async socket accept, and handle async target
-	 events simultaneously.  There's also no point either in
-	 having the target stop all threads, when we're going to
-	 pass signals down without informing GDB.  */
-      if (!non_stop)
-	{
-	  if (debug_threads)
-	    debug_printf ("Forcing non-stop mode\n");
-
-	  non_stop = true;
-	  start_non_stop (1);
-	}
-
-      process->gdb_detached = 1;
-
-      /* Detaching implicitly resumes all threads.  */
-      target_continue_no_signal (minus_one_ptid);
-
-      write_ok (own_buf);
-      return;
-    }
-
-  fprintf (stderr, "Detaching from process %d\n", process->pid);
-  stop_tracing ();
-
-  /* We'll need this after PROCESS has been destroyed.  */
-  int pid = process->pid;
-
-  if (detach_inferior (process) != 0)
-    write_enn (own_buf);
-  else
-    {
-      discard_queued_stop_replies (ptid_t (pid));
-      write_ok (own_buf);
-
-      if (extended_protocol || target_running ())
-	{
-	  /* There is still at least one inferior remaining or
-	     we are in extended mode, so don't terminate gdbserver,
-	     and instead treat this like a normal program exit.  */
-	  cs.last_status.kind = TARGET_WAITKIND_EXITED;
-	  cs.last_status.value.integer = 0;
-	  cs.last_ptid = ptid_t (pid);
-
-	  current_thread = NULL;
-	}
-      else
-	{
-	  putpkt (own_buf);
-	  remote_close ();
-
-	  /* If we are attached, then we can exit.  Otherwise, we
-	     need to hang around doing nothing, until the child is
-	     gone.  */
-	  join_inferior (pid);
-	  exit (0);
-	}
-    }
-}
-
-/* Parse options to --debug-format= and "monitor set debug-format".
-   ARG is the text after "--debug-format=" or "monitor set debug-format".
-   IS_MONITOR is non-zero if we're invoked via "monitor set debug-format".
-   This triggers calls to monitor_output.
-   The result is an empty string if all options were parsed ok, otherwise an
-   error message which the caller must free.
-
-   N.B. These commands affect all debug format settings, they are not
-   cumulative.  If a format is not specified, it is turned off.
-   However, we don't go to extra trouble with things like
-   "monitor set debug-format all,none,timestamp".
-   Instead we just parse them one at a time, in order.
-
-   The syntax for "monitor set debug" we support here is not identical
-   to gdb's "set debug foo on|off" because we also use this function to
-   parse "--debug-format=foo,bar".  */
-
-static std::string
-parse_debug_format_options (const char *arg, int is_monitor)
-{
-  /* First turn all debug format options off.  */
-  debug_timestamp = 0;
-
-  /* First remove leading spaces, for "monitor set debug-format".  */
-  while (isspace (*arg))
-    ++arg;
-
-  std::vector<gdb::unique_xmalloc_ptr<char>> options
-    = delim_string_to_char_ptr_vec (arg, ',');
-
-  for (const gdb::unique_xmalloc_ptr<char> &option : options)
-    {
-      if (strcmp (option.get (), "all") == 0)
-	{
-	  debug_timestamp = 1;
-	  if (is_monitor)
-	    monitor_output ("All extra debug format options enabled.\n");
-	}
-      else if (strcmp (option.get (), "none") == 0)
-	{
-	  debug_timestamp = 0;
-	  if (is_monitor)
-	    monitor_output ("All extra debug format options disabled.\n");
-	}
-      else if (strcmp (option.get (), "timestamp") == 0)
-	{
-	  debug_timestamp = 1;
-	  if (is_monitor)
-	    monitor_output ("Timestamps will be added to debug output.\n");
-	}
-      else if (*option == '\0')
-	{
-	  /* An empty option, e.g., "--debug-format=foo,,bar", is ignored.  */
-	  continue;
-	}
-      else
-	return string_printf ("Unknown debug-format argument: \"%s\"\n",
-			      option.get ());
-    }
-
-  return std::string ();
-}
-
-/* Handle monitor commands not handled by target-specific handlers.  */
-
-static void
-handle_monitor_command (char *mon, char *own_buf)
-{
-  if (strcmp (mon, "set debug 1") == 0)
-    {
-      debug_threads = 1;
-      monitor_output ("Debug output enabled.\n");
-    }
-  else if (strcmp (mon, "set debug 0") == 0)
-    {
-      debug_threads = 0;
-      monitor_output ("Debug output disabled.\n");
-    }
-  else if (strcmp (mon, "set debug-hw-points 1") == 0)
-    {
-      show_debug_regs = 1;
-      monitor_output ("H/W point debugging output enabled.\n");
-    }
-  else if (strcmp (mon, "set debug-hw-points 0") == 0)
-    {
-      show_debug_regs = 0;
-      monitor_output ("H/W point debugging output disabled.\n");
-    }
-  else if (strcmp (mon, "set remote-debug 1") == 0)
-    {
-      remote_debug = 1;
-      monitor_output ("Protocol debug output enabled.\n");
-    }
-  else if (strcmp (mon, "set remote-debug 0") == 0)
-    {
-      remote_debug = 0;
-      monitor_output ("Protocol debug output disabled.\n");
-    }
-  else if (startswith (mon, "set debug-format "))
-    {
-      std::string error_msg
-	= parse_debug_format_options (mon + sizeof ("set debug-format ") - 1,
-				      1);
-
-      if (!error_msg.empty ())
-	{
-	  monitor_output (error_msg.c_str ());
-	  monitor_show_help ();
-	  write_enn (own_buf);
-	}
-    }
-  else if (strcmp (mon, "set debug-file") == 0)
-    debug_set_output (nullptr);
-  else if (startswith (mon, "set debug-file "))
-    debug_set_output (mon + sizeof ("set debug-file ") - 1);
-  else if (strcmp (mon, "help") == 0)
-    monitor_show_help ();
-  else if (strcmp (mon, "exit") == 0)
-    exit_requested = true;
-  else
-    {
-      monitor_output ("Unknown monitor command.\n\n");
-      monitor_show_help ();
-      write_enn (own_buf);
-    }
-}
-
-/* Associates a callback with each supported qXfer'able object.  */
-
-struct qxfer
-{
-  /* The object this handler handles.  */
-  const char *object;
-
-  /* Request that the target transfer up to LEN 8-bit bytes of the
-     target's OBJECT.  The OFFSET, for a seekable object, specifies
-     the starting point.  The ANNEX can be used to provide additional
-     data-specific information to the target.
-
-     Return the number of bytes actually transfered, zero when no
-     further transfer is possible, -1 on error, -2 when the transfer
-     is not supported, and -3 on a verbose error message that should
-     be preserved.  Return of a positive value smaller than LEN does
-     not indicate the end of the object, only the end of the transfer.
-
-     One, and only one, of readbuf or writebuf must be non-NULL.  */
-  int (*xfer) (const char *annex,
-	       gdb_byte *readbuf, const gdb_byte *writebuf,
-	       ULONGEST offset, LONGEST len);
-};
-
-/* Handle qXfer:auxv:read.  */
-
-static int
-handle_qxfer_auxv (const char *annex,
-		   gdb_byte *readbuf, const gdb_byte *writebuf,
-		   ULONGEST offset, LONGEST len)
-{
-  if (the_target->read_auxv == NULL || writebuf != NULL)
-    return -2;
-
-  if (annex[0] != '\0' || current_thread == NULL)
-    return -1;
-
-  return (*the_target->read_auxv) (offset, readbuf, len);
-}
-
-/* Handle qXfer:exec-file:read.  */
-
-static int
-handle_qxfer_exec_file (const char *annex,
-			gdb_byte *readbuf, const gdb_byte *writebuf,
-			ULONGEST offset, LONGEST len)
-{
-  char *file;
-  ULONGEST pid;
-  int total_len;
-
-  if (the_target->pid_to_exec_file == NULL || writebuf != NULL)
-    return -2;
-
-  if (annex[0] == '\0')
-    {
-      if (current_thread == NULL)
-	return -1;
-
-      pid = pid_of (current_thread);
-    }
-  else
-    {
-      annex = unpack_varlen_hex (annex, &pid);
-      if (annex[0] != '\0')
-	return -1;
-    }
-
-  if (pid <= 0)
-    return -1;
-
-  file = (*the_target->pid_to_exec_file) (pid);
-  if (file == NULL)
-    return -1;
-
-  total_len = strlen (file);
-
-  if (offset > total_len)
-    return -1;
-
-  if (offset + len > total_len)
-    len = total_len - offset;
-
-  memcpy (readbuf, file + offset, len);
-  return len;
-}
-
-/* Handle qXfer:features:read.  */
-
-static int
-handle_qxfer_features (const char *annex,
-		       gdb_byte *readbuf, const gdb_byte *writebuf,
-		       ULONGEST offset, LONGEST len)
-{
-  const char *document;
-  size_t total_len;
-
-  if (writebuf != NULL)
-    return -2;
-
-  if (!target_running ())
-    return -1;
-
-  /* Grab the correct annex.  */
-  document = get_features_xml (annex);
-  if (document == NULL)
-    return -1;
-
-  total_len = strlen (document);
-
-  if (offset > total_len)
-    return -1;
-
-  if (offset + len > total_len)
-    len = total_len - offset;
-
-  memcpy (readbuf, document + offset, len);
-  return len;
-}
-
-/* Handle qXfer:libraries:read.  */
-
-static int
-handle_qxfer_libraries (const char *annex,
-			gdb_byte *readbuf, const gdb_byte *writebuf,
-			ULONGEST offset, LONGEST len)
-{
-  if (writebuf != NULL)
-    return -2;
-
-  if (annex[0] != '\0' || current_thread == NULL)
-    return -1;
-
-  std::string document = "<library-list version=\"1.0\">\n";
-
-  for (const dll_info &dll : all_dlls)
-    document += string_printf
-      ("  <library name=\"%s\"><segment address=\"0x%s\"/></library>\n",
-       dll.name.c_str (), paddress (dll.base_addr));
-
-  document += "</library-list>\n";
-
-  if (offset > document.length ())
-    return -1;
-
-  if (offset + len > document.length ())
-    len = document.length () - offset;
-
-  memcpy (readbuf, &document[offset], len);
-
-  return len;
-}
-
-/* Handle qXfer:libraries-svr4:read.  */
-
-static int
-handle_qxfer_libraries_svr4 (const char *annex,
-			     gdb_byte *readbuf, const gdb_byte *writebuf,
-			     ULONGEST offset, LONGEST len)
-{
-  if (writebuf != NULL)
-    return -2;
-
-  if (current_thread == NULL || the_target->qxfer_libraries_svr4 == NULL)
-    return -1;
-
-  return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, offset, len);
-}
-
-/* Handle qXfer:osadata:read.  */
-
-static int
-handle_qxfer_osdata (const char *annex,
-		     gdb_byte *readbuf, const gdb_byte *writebuf,
-		     ULONGEST offset, LONGEST len)
-{
-  if (the_target->qxfer_osdata == NULL || writebuf != NULL)
-    return -2;
-
-  return (*the_target->qxfer_osdata) (annex, readbuf, NULL, offset, len);
-}
-
-/* Handle qXfer:siginfo:read and qXfer:siginfo:write.  */
-
-static int
-handle_qxfer_siginfo (const char *annex,
-		      gdb_byte *readbuf, const gdb_byte *writebuf,
-		      ULONGEST offset, LONGEST len)
-{
-  if (the_target->qxfer_siginfo == NULL)
-    return -2;
-
-  if (annex[0] != '\0' || current_thread == NULL)
-    return -1;
-
-  return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len);
-}
-
-/* Handle qXfer:statictrace:read.  */
-
-static int
-handle_qxfer_statictrace (const char *annex,
-			  gdb_byte *readbuf, const gdb_byte *writebuf,
-			  ULONGEST offset, LONGEST len)
-{
-  client_state &cs = get_client_state ();
-  ULONGEST nbytes;
-
-  if (writebuf != NULL)
-    return -2;
-
-  if (annex[0] != '\0' || current_thread == NULL 
-      || cs.current_traceframe == -1)
-    return -1;
-
-  if (traceframe_read_sdata (cs.current_traceframe, offset,
-			     readbuf, len, &nbytes))
-    return -1;
-  return nbytes;
-}
-
-/* Helper for handle_qxfer_threads_proper.
-   Emit the XML to describe the thread of INF.  */
-
-static void
-handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer)
-{
-  ptid_t ptid = ptid_of (thread);
-  char ptid_s[100];
-  int core = target_core_of_thread (ptid);
-  char core_s[21];
-  const char *name = target_thread_name (ptid);
-  int handle_len;
-  gdb_byte *handle;
-  bool handle_status = target_thread_handle (ptid, &handle, &handle_len);
-
-  write_ptid (ptid_s, ptid);
-
-  buffer_xml_printf (buffer, "<thread id=\"%s\"", ptid_s);
-
-  if (core != -1)
-    {
-      sprintf (core_s, "%d", core);
-      buffer_xml_printf (buffer, " core=\"%s\"", core_s);
-    }
-
-  if (name != NULL)
-    buffer_xml_printf (buffer, " name=\"%s\"", name);
-
-  if (handle_status)
-    {
-      char *handle_s = (char *) alloca (handle_len * 2 + 1);
-      bin2hex (handle, handle_s, handle_len);
-      buffer_xml_printf (buffer, " handle=\"%s\"", handle_s);
-    }
-
-  buffer_xml_printf (buffer, "/>\n");
-}
-
-/* Helper for handle_qxfer_threads.  */
-
-static void
-handle_qxfer_threads_proper (struct buffer *buffer)
-{
-  buffer_grow_str (buffer, "<threads>\n");
-
-  for_each_thread ([&] (thread_info *thread)
-    {
-      handle_qxfer_threads_worker (thread, buffer);
-    });
-
-  buffer_grow_str0 (buffer, "</threads>\n");
-}
-
-/* Handle qXfer:threads:read.  */
-
-static int
-handle_qxfer_threads (const char *annex,
-		      gdb_byte *readbuf, const gdb_byte *writebuf,
-		      ULONGEST offset, LONGEST len)
-{
-  static char *result = 0;
-  static unsigned int result_length = 0;
-
-  if (writebuf != NULL)
-    return -2;
-
-  if (annex[0] != '\0')
-    return -1;
-
-  if (offset == 0)
-    {
-      struct buffer buffer;
-      /* When asked for data at offset 0, generate everything and store into
-	 'result'.  Successive reads will be served off 'result'.  */
-      if (result)
-	free (result);
-
-      buffer_init (&buffer);
-
-      handle_qxfer_threads_proper (&buffer);
-
-      result = buffer_finish (&buffer);
-      result_length = strlen (result);
-      buffer_free (&buffer);
-    }
-
-  if (offset >= result_length)
-    {
-      /* We're out of data.  */
-      free (result);
-      result = NULL;
-      result_length = 0;
-      return 0;
-    }
-
-  if (len > result_length - offset)
-    len = result_length - offset;
-
-  memcpy (readbuf, result + offset, len);
-
-  return len;
-}
-
-/* Handle qXfer:traceframe-info:read.  */
-
-static int
-handle_qxfer_traceframe_info (const char *annex,
-			      gdb_byte *readbuf, const gdb_byte *writebuf,
-			      ULONGEST offset, LONGEST len)
-{
-  client_state &cs = get_client_state ();
-  static char *result = 0;
-  static unsigned int result_length = 0;
-
-  if (writebuf != NULL)
-    return -2;
-
-  if (!target_running () || annex[0] != '\0' || cs.current_traceframe == -1)
-    return -1;
-
-  if (offset == 0)
-    {
-      struct buffer buffer;
-
-      /* When asked for data at offset 0, generate everything and
-	 store into 'result'.  Successive reads will be served off
-	 'result'.  */
-      free (result);
-
-      buffer_init (&buffer);
-
-      traceframe_read_info (cs.current_traceframe, &buffer);
-
-      result = buffer_finish (&buffer);
-      result_length = strlen (result);
-      buffer_free (&buffer);
-    }
-
-  if (offset >= result_length)
-    {
-      /* We're out of data.  */
-      free (result);
-      result = NULL;
-      result_length = 0;
-      return 0;
-    }
-
-  if (len > result_length - offset)
-    len = result_length - offset;
-
-  memcpy (readbuf, result + offset, len);
-  return len;
-}
-
-/* Handle qXfer:fdpic:read.  */
-
-static int
-handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf,
-		    const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
-{
-  if (the_target->read_loadmap == NULL)
-    return -2;
-
-  if (current_thread == NULL)
-    return -1;
-
-  return (*the_target->read_loadmap) (annex, offset, readbuf, len);
-}
-
-/* Handle qXfer:btrace:read.  */
-
-static int
-handle_qxfer_btrace (const char *annex,
-		     gdb_byte *readbuf, const gdb_byte *writebuf,
-		     ULONGEST offset, LONGEST len)
-{
-  client_state &cs = get_client_state ();
-  static struct buffer cache;
-  struct thread_info *thread;
-  enum btrace_read_type type;
-  int result;
-
-  if (writebuf != NULL)
-    return -2;
-
-  if (cs.general_thread == null_ptid
-      || cs.general_thread == minus_one_ptid)
-    {
-      strcpy (cs.own_buf, "E.Must select a single thread.");
-      return -3;
-    }
-
-  thread = find_thread_ptid (cs.general_thread);
-  if (thread == NULL)
-    {
-      strcpy (cs.own_buf, "E.No such thread.");
-      return -3;
-    }
-
-  if (thread->btrace == NULL)
-    {
-      strcpy (cs.own_buf, "E.Btrace not enabled.");
-      return -3;
-    }
-
-  if (strcmp (annex, "all") == 0)
-    type = BTRACE_READ_ALL;
-  else if (strcmp (annex, "new") == 0)
-    type = BTRACE_READ_NEW;
-  else if (strcmp (annex, "delta") == 0)
-    type = BTRACE_READ_DELTA;
-  else
-    {
-      strcpy (cs.own_buf, "E.Bad annex.");
-      return -3;
-    }
-
-  if (offset == 0)
-    {
-      buffer_free (&cache);
-
-      try
-	{
-	  result = target_read_btrace (thread->btrace, &cache, type);
-	  if (result != 0)
-	    memcpy (cs.own_buf, cache.buffer, cache.used_size);
-	}
-      catch (const gdb_exception_error &exception)
-	{
-	  sprintf (cs.own_buf, "E.%s", exception.what ());
-	  result = -1;
-	}
-
-      if (result != 0)
-	return -3;
-    }
-  else if (offset > cache.used_size)
-    {
-      buffer_free (&cache);
-      return -3;
-    }
-
-  if (len > cache.used_size - offset)
-    len = cache.used_size - offset;
-
-  memcpy (readbuf, cache.buffer + offset, len);
-
-  return len;
-}
-
-/* Handle qXfer:btrace-conf:read.  */
-
-static int
-handle_qxfer_btrace_conf (const char *annex,
-			  gdb_byte *readbuf, const gdb_byte *writebuf,
-			  ULONGEST offset, LONGEST len)
-{
-  client_state &cs = get_client_state ();
-  static struct buffer cache;
-  struct thread_info *thread;
-  int result;
-
-  if (writebuf != NULL)
-    return -2;
-
-  if (annex[0] != '\0')
-    return -1;
-
-  if (cs.general_thread == null_ptid
-      || cs.general_thread == minus_one_ptid)
-    {
-      strcpy (cs.own_buf, "E.Must select a single thread.");
-      return -3;
-    }
-
-  thread = find_thread_ptid (cs.general_thread);
-  if (thread == NULL)
-    {
-      strcpy (cs.own_buf, "E.No such thread.");
-      return -3;
-    }
-
-  if (thread->btrace == NULL)
-    {
-      strcpy (cs.own_buf, "E.Btrace not enabled.");
-      return -3;
-    }
-
-  if (offset == 0)
-    {
-      buffer_free (&cache);
-
-      try
-	{
-	  result = target_read_btrace_conf (thread->btrace, &cache);
-	  if (result != 0)
-	    memcpy (cs.own_buf, cache.buffer, cache.used_size);
-	}
-      catch (const gdb_exception_error &exception)
-	{
-	  sprintf (cs.own_buf, "E.%s", exception.what ());
-	  result = -1;
-	}
-
-      if (result != 0)
-	return -3;
-    }
-  else if (offset > cache.used_size)
-    {
-      buffer_free (&cache);
-      return -3;
-    }
-
-  if (len > cache.used_size - offset)
-    len = cache.used_size - offset;
-
-  memcpy (readbuf, cache.buffer + offset, len);
-
-  return len;
-}
-
-static const struct qxfer qxfer_packets[] =
-  {
-    { "auxv", handle_qxfer_auxv },
-    { "btrace", handle_qxfer_btrace },
-    { "btrace-conf", handle_qxfer_btrace_conf },
-    { "exec-file", handle_qxfer_exec_file},
-    { "fdpic", handle_qxfer_fdpic},
-    { "features", handle_qxfer_features },
-    { "libraries", handle_qxfer_libraries },
-    { "libraries-svr4", handle_qxfer_libraries_svr4 },
-    { "osdata", handle_qxfer_osdata },
-    { "siginfo", handle_qxfer_siginfo },
-    { "statictrace", handle_qxfer_statictrace },
-    { "threads", handle_qxfer_threads },
-    { "traceframe-info", handle_qxfer_traceframe_info },
-  };
-
-static int
-handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
-{
-  int i;
-  char *object;
-  char *rw;
-  char *annex;
-  char *offset;
-
-  if (!startswith (own_buf, "qXfer:"))
-    return 0;
-
-  /* Grab the object, r/w and annex.  */
-  if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0)
-    {
-      write_enn (own_buf);
-      return 1;
-    }
-
-  for (i = 0;
-       i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]);
-       i++)
-    {
-      const struct qxfer *q = &qxfer_packets[i];
-
-      if (strcmp (object, q->object) == 0)
-	{
-	  if (strcmp (rw, "read") == 0)
-	    {
-	      unsigned char *data;
-	      int n;
-	      CORE_ADDR ofs;
-	      unsigned int len;
-
-	      /* Grab the offset and length.  */
-	      if (decode_xfer_read (offset, &ofs, &len) < 0)
-		{
-		  write_enn (own_buf);
-		  return 1;
-		}
-
-	      /* Read one extra byte, as an indicator of whether there is
-		 more.  */
-	      if (len > PBUFSIZ - 2)
-		len = PBUFSIZ - 2;
-	      data = (unsigned char *) malloc (len + 1);
-	      if (data == NULL)
-		{
-		  write_enn (own_buf);
-		  return 1;
-		}
-	      n = (*q->xfer) (annex, data, NULL, ofs, len + 1);
-	      if (n == -2)
-		{
-		  free (data);
-		  return 0;
-		}
-	      else if (n == -3)
-		{
-		  /* Preserve error message.  */
-		}
-	      else if (n < 0)
-		write_enn (own_buf);
-	      else if (n > len)
-		*new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
-	      else
-		*new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
-
-	      free (data);
-	      return 1;
-	    }
-	  else if (strcmp (rw, "write") == 0)
-	    {
-	      int n;
-	      unsigned int len;
-	      CORE_ADDR ofs;
-	      unsigned char *data;
-
-	      strcpy (own_buf, "E00");
-	      data = (unsigned char *) malloc (packet_len - (offset - own_buf));
-	      if (data == NULL)
-		{
-		  write_enn (own_buf);
-		  return 1;
-		}
-	      if (decode_xfer_write (offset, packet_len - (offset - own_buf),
-				     &ofs, &len, data) < 0)
-		{
-		  free (data);
-		  write_enn (own_buf);
-		  return 1;
-		}
-
-	      n = (*q->xfer) (annex, NULL, data, ofs, len);
-	      if (n == -2)
-		{
-		  free (data);
-		  return 0;
-		}
-	      else if (n == -3)
-		{
-		  /* Preserve error message.  */
-		}
-	      else if (n < 0)
-		write_enn (own_buf);
-	      else
-		sprintf (own_buf, "%x", n);
-
-	      free (data);
-	      return 1;
-	    }
-
-	  return 0;
-	}
-    }
-
-  return 0;
-}
-
-/* Compute 32 bit CRC from inferior memory.
-
-   On success, return 32 bit CRC.
-   On failure, return (unsigned long long) -1.  */
-
-static unsigned long long
-crc32 (CORE_ADDR base, int len, unsigned int crc)
-{
-  while (len--)
-    {
-      unsigned char byte = 0;
-
-      /* Return failure if memory read fails.  */
-      if (read_inferior_memory (base, &byte, 1) != 0)
-	return (unsigned long long) -1;
-
-      crc = xcrc32 (&byte, 1, crc);
-      base++;
-    }
-  return (unsigned long long) crc;
-}
-
-/* Add supported btrace packets to BUF.  */
-
-static void
-supported_btrace_packets (char *buf)
-{
-  strcat (buf, ";Qbtrace:bts+");
-  strcat (buf, ";Qbtrace-conf:bts:size+");
-  strcat (buf, ";Qbtrace:pt+");
-  strcat (buf, ";Qbtrace-conf:pt:size+");
-  strcat (buf, ";Qbtrace:off+");
-  strcat (buf, ";qXfer:btrace:read+");
-  strcat (buf, ";qXfer:btrace-conf:read+");
-}
-
-/* Handle all of the extended 'q' packets.  */
-
-static void
-handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
-{
-  client_state &cs = get_client_state ();
-  static std::list<thread_info *>::const_iterator thread_iter;
-
-  /* Reply the current thread id.  */
-  if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
-    {
-      ptid_t ptid;
-      require_running_or_return (own_buf);
-
-      if (cs.general_thread != null_ptid && cs.general_thread != minus_one_ptid)
-	ptid = cs.general_thread;
-      else
-	{
-	  thread_iter = all_threads.begin ();
-	  ptid = (*thread_iter)->id;
-	}
-
-      sprintf (own_buf, "QC");
-      own_buf += 2;
-      write_ptid (own_buf, ptid);
-      return;
-    }
-
-  if (strcmp ("qSymbol::", own_buf) == 0)
-    {
-      struct thread_info *save_thread = current_thread;
-
-      /* For qSymbol, GDB only changes the current thread if the
-	 previous current thread was of a different process.  So if
-	 the previous thread is gone, we need to pick another one of
-	 the same process.  This can happen e.g., if we followed an
-	 exec in a non-leader thread.  */
-      if (current_thread == NULL)
-	{
-	  current_thread
-	    = find_any_thread_of_pid (cs.general_thread.pid ());
-
-	  /* Just in case, if we didn't find a thread, then bail out
-	     instead of crashing.  */
-	  if (current_thread == NULL)
-	    {
-	      write_enn (own_buf);
-	      current_thread = save_thread;
-	      return;
-	    }
-	}
-
-      /* GDB is suggesting new symbols have been loaded.  This may
-	 mean a new shared library has been detected as loaded, so
-	 take the opportunity to check if breakpoints we think are
-	 inserted, still are.  Note that it isn't guaranteed that
-	 we'll see this when a shared library is loaded, and nor will
-	 we see this for unloads (although breakpoints in unloaded
-	 libraries shouldn't trigger), as GDB may not find symbols for
-	 the library at all.  We also re-validate breakpoints when we
-	 see a second GDB breakpoint for the same address, and or when
-	 we access breakpoint shadows.  */
-      validate_breakpoints ();
-
-      if (target_supports_tracepoints ())
-	tracepoint_look_up_symbols ();
-
-      if (current_thread != NULL && the_target->look_up_symbols != NULL)
-	(*the_target->look_up_symbols) ();
-
-      current_thread = save_thread;
-
-      strcpy (own_buf, "OK");
-      return;
-    }
-
-  if (!disable_packet_qfThreadInfo)
-    {
-      if (strcmp ("qfThreadInfo", own_buf) == 0)
-	{
-	  require_running_or_return (own_buf);
-	  thread_iter = all_threads.begin ();
-
-	  *own_buf++ = 'm';
-	  ptid_t ptid = (*thread_iter)->id;
-	  write_ptid (own_buf, ptid);
-	  thread_iter++;
-	  return;
-	}
-
-      if (strcmp ("qsThreadInfo", own_buf) == 0)
-	{
-	  require_running_or_return (own_buf);
-	  if (thread_iter != all_threads.end ())
-	    {
-	      *own_buf++ = 'm';
-	      ptid_t ptid = (*thread_iter)->id;
-	      write_ptid (own_buf, ptid);
-	      thread_iter++;
-	      return;
-	    }
-	  else
-	    {
-	      sprintf (own_buf, "l");
-	      return;
-	    }
-	}
-    }
-
-  if (the_target->read_offsets != NULL
-      && strcmp ("qOffsets", own_buf) == 0)
-    {
-      CORE_ADDR text, data;
-
-      require_running_or_return (own_buf);
-      if (the_target->read_offsets (&text, &data))
-	sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
-		 (long)text, (long)data, (long)data);
-      else
-	write_enn (own_buf);
-
-      return;
-    }
-
-  /* Protocol features query.  */
-  if (startswith (own_buf, "qSupported")
-      && (own_buf[10] == ':' || own_buf[10] == '\0'))
-    {
-      char *p = &own_buf[10];
-      int gdb_supports_qRelocInsn = 0;
-
-      /* Process each feature being provided by GDB.  The first
-	 feature will follow a ':', and latter features will follow
-	 ';'.  */
-      if (*p == ':')
-	{
-	  char **qsupported = NULL;
-	  int count = 0;
-	  int unknown = 0;
-	  int i;
-
-	  /* Two passes, to avoid nested strtok calls in
-	     target_process_qsupported.  */
-	  char *saveptr;
-	  for (p = strtok_r (p + 1, ";", &saveptr);
-	       p != NULL;
-	       p = strtok_r (NULL, ";", &saveptr))
-	    {
-	      count++;
-	      qsupported = XRESIZEVEC (char *, qsupported, count);
-	      qsupported[count - 1] = xstrdup (p);
-	    }
-
-	  for (i = 0; i < count; i++)
-	    {
-	      p = qsupported[i];
-	      if (strcmp (p, "multiprocess+") == 0)
-		{
-		  /* GDB supports and wants multi-process support if
-		     possible.  */
-		  if (target_supports_multi_process ())
-		    cs.multi_process = 1;
-		}
-	      else if (strcmp (p, "qRelocInsn+") == 0)
-		{
-		  /* GDB supports relocate instruction requests.  */
-		  gdb_supports_qRelocInsn = 1;
-		}
-	      else if (strcmp (p, "swbreak+") == 0)
-		{
-		  /* GDB wants us to report whether a trap is caused
-		     by a software breakpoint and for us to handle PC
-		     adjustment if necessary on this target.  */
-		  if (target_supports_stopped_by_sw_breakpoint ())
-		    cs.swbreak_feature = 1;
-		}
-	      else if (strcmp (p, "hwbreak+") == 0)
-		{
-		  /* GDB wants us to report whether a trap is caused
-		     by a hardware breakpoint.  */
-		  if (target_supports_stopped_by_hw_breakpoint ())
-		    cs.hwbreak_feature = 1;
-		}
-	      else if (strcmp (p, "fork-events+") == 0)
-		{
-		  /* GDB supports and wants fork events if possible.  */
-		  if (target_supports_fork_events ())
-		    cs.report_fork_events = 1;
-		}
-	      else if (strcmp (p, "vfork-events+") == 0)
-		{
-		  /* GDB supports and wants vfork events if possible.  */
-		  if (target_supports_vfork_events ())
-		    cs.report_vfork_events = 1;
-		}
-	      else if (strcmp (p, "exec-events+") == 0)
-		{
-		  /* GDB supports and wants exec events if possible.  */
-		  if (target_supports_exec_events ())
-		    cs.report_exec_events = 1;
-		}
-	      else if (strcmp (p, "vContSupported+") == 0)
-		cs.vCont_supported = 1;
-	      else if (strcmp (p, "QThreadEvents+") == 0)
-		;
-	      else if (strcmp (p, "no-resumed+") == 0)
-		{
-		  /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
-		     events.  */
-		  report_no_resumed = true;
-		}
-	      else
-		{
-		  /* Move the unknown features all together.  */
-		  qsupported[i] = NULL;
-		  qsupported[unknown] = p;
-		  unknown++;
-		}
-	    }
-
-	  /* Give the target backend a chance to process the unknown
-	     features.  */
-	  target_process_qsupported (qsupported, unknown);
-
-	  for (i = 0; i < count; i++)
-	    free (qsupported[i]);
-	  free (qsupported);
-	}
-
-      sprintf (own_buf,
-	       "PacketSize=%x;QPassSignals+;QProgramSignals+;"
-	       "QStartupWithShell+;QEnvironmentHexEncoded+;"
-	       "QEnvironmentReset+;QEnvironmentUnset+;"
-	       "QSetWorkingDir+",
-	       PBUFSIZ - 1);
-
-      if (target_supports_catch_syscall ())
-	strcat (own_buf, ";QCatchSyscalls+");
-
-      if (the_target->qxfer_libraries_svr4 != NULL)
-	strcat (own_buf, ";qXfer:libraries-svr4:read+"
-		";augmented-libraries-svr4-read+");
-      else
-	{
-	  /* We do not have any hook to indicate whether the non-SVR4 target
-	     backend supports qXfer:libraries:read, so always report it.  */
-	  strcat (own_buf, ";qXfer:libraries:read+");
-	}
-
-      if (the_target->read_auxv != NULL)
-	strcat (own_buf, ";qXfer:auxv:read+");
-
-      if (the_target->qxfer_siginfo != NULL)
-	strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
-
-      if (the_target->read_loadmap != NULL)
-	strcat (own_buf, ";qXfer:fdpic:read+");
-
-      /* We always report qXfer:features:read, as targets may
-	 install XML files on a subsequent call to arch_setup.
-	 If we reported to GDB on startup that we don't support
-	 qXfer:feature:read at all, we will never be re-queried.  */
-      strcat (own_buf, ";qXfer:features:read+");
-
-      if (cs.transport_is_reliable)
-	strcat (own_buf, ";QStartNoAckMode+");
-
-      if (the_target->qxfer_osdata != NULL)
-	strcat (own_buf, ";qXfer:osdata:read+");
-
-      if (target_supports_multi_process ())
-	strcat (own_buf, ";multiprocess+");
-
-      if (target_supports_fork_events ())
-	strcat (own_buf, ";fork-events+");
-
-      if (target_supports_vfork_events ())
-	strcat (own_buf, ";vfork-events+");
-
-      if (target_supports_exec_events ())
-	strcat (own_buf, ";exec-events+");
-
-      if (target_supports_non_stop ())
-	strcat (own_buf, ";QNonStop+");
-
-      if (target_supports_disable_randomization ())
-	strcat (own_buf, ";QDisableRandomization+");
-
-      strcat (own_buf, ";qXfer:threads:read+");
-
-      if (target_supports_tracepoints ())
-	{
-	  strcat (own_buf, ";ConditionalTracepoints+");
-	  strcat (own_buf, ";TraceStateVariables+");
-	  strcat (own_buf, ";TracepointSource+");
-	  strcat (own_buf, ";DisconnectedTracing+");
-	  if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
-	    strcat (own_buf, ";FastTracepoints+");
-	  strcat (own_buf, ";StaticTracepoints+");
-	  strcat (own_buf, ";InstallInTrace+");
-	  strcat (own_buf, ";qXfer:statictrace:read+");
-	  strcat (own_buf, ";qXfer:traceframe-info:read+");
-	  strcat (own_buf, ";EnableDisableTracepoints+");
-	  strcat (own_buf, ";QTBuffer:size+");
-	  strcat (own_buf, ";tracenz+");
-	}
-
-      if (target_supports_hardware_single_step ()
-	  || target_supports_software_single_step () )
-	{
-	  strcat (own_buf, ";ConditionalBreakpoints+");
-	}
-      strcat (own_buf, ";BreakpointCommands+");
-
-      if (target_supports_agent ())
-	strcat (own_buf, ";QAgent+");
-
-      supported_btrace_packets (own_buf);
-
-      if (target_supports_stopped_by_sw_breakpoint ())
-	strcat (own_buf, ";swbreak+");
-
-      if (target_supports_stopped_by_hw_breakpoint ())
-	strcat (own_buf, ";hwbreak+");
-
-      if (the_target->pid_to_exec_file != NULL)
-	strcat (own_buf, ";qXfer:exec-file:read+");
-
-      strcat (own_buf, ";vContSupported+");
-
-      strcat (own_buf, ";QThreadEvents+");
-
-      strcat (own_buf, ";no-resumed+");
-
-      /* Reinitialize components as needed for the new connection.  */
-      hostio_handle_new_gdb_connection ();
-      target_handle_new_gdb_connection ();
-
-      return;
-    }
-
-  /* Thread-local storage support.  */
-  if (the_target->get_tls_address != NULL
-      && startswith (own_buf, "qGetTLSAddr:"))
-    {
-      char *p = own_buf + 12;
-      CORE_ADDR parts[2], address = 0;
-      int i, err;
-      ptid_t ptid = null_ptid;
-
-      require_running_or_return (own_buf);
-
-      for (i = 0; i < 3; i++)
-	{
-	  char *p2;
-	  int len;
-
-	  if (p == NULL)
-	    break;
-
-	  p2 = strchr (p, ',');
-	  if (p2)
-	    {
-	      len = p2 - p;
-	      p2++;
-	    }
-	  else
-	    {
-	      len = strlen (p);
-	      p2 = NULL;
-	    }
-
-	  if (i == 0)
-	    ptid = read_ptid (p, NULL);
-	  else
-	    decode_address (&parts[i - 1], p, len);
-	  p = p2;
-	}
-
-      if (p != NULL || i < 3)
-	err = 1;
-      else
-	{
-	  struct thread_info *thread = find_thread_ptid (ptid);
-
-	  if (thread == NULL)
-	    err = 2;
-	  else
-	    err = the_target->get_tls_address (thread, parts[0], parts[1],
-					       &address);
-	}
-
-      if (err == 0)
-	{
-	  strcpy (own_buf, paddress(address));
-	  return;
-	}
-      else if (err > 0)
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-
-      /* Otherwise, pretend we do not understand this packet.  */
-    }
-
-  /* Windows OS Thread Information Block address support.  */
-  if (the_target->get_tib_address != NULL
-      && startswith (own_buf, "qGetTIBAddr:"))
-    {
-      const char *annex;
-      int n;
-      CORE_ADDR tlb;
-      ptid_t ptid = read_ptid (own_buf + 12, &annex);
-
-      n = (*the_target->get_tib_address) (ptid, &tlb);
-      if (n == 1)
-	{
-	  strcpy (own_buf, paddress(tlb));
-	  return;
-	}
-      else if (n == 0)
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-      return;
-    }
-
-  /* Handle "monitor" commands.  */
-  if (startswith (own_buf, "qRcmd,"))
-    {
-      char *mon = (char *) malloc (PBUFSIZ);
-      int len = strlen (own_buf + 6);
-
-      if (mon == NULL)
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-
-      if ((len % 2) != 0
-	  || hex2bin (own_buf + 6, (gdb_byte *) mon, len / 2) != len / 2)
-	{
-	  write_enn (own_buf);
-	  free (mon);
-	  return;
-	}
-      mon[len / 2] = '\0';
-
-      write_ok (own_buf);
-
-      if (the_target->handle_monitor_command == NULL
-	  || (*the_target->handle_monitor_command) (mon) == 0)
-	/* Default processing.  */
-	handle_monitor_command (mon, own_buf);
-
-      free (mon);
-      return;
-    }
-
-  if (startswith (own_buf, "qSearch:memory:"))
-    {
-      require_running_or_return (own_buf);
-      handle_search_memory (own_buf, packet_len);
-      return;
-    }
-
-  if (strcmp (own_buf, "qAttached") == 0
-      || startswith (own_buf, "qAttached:"))
-    {
-      struct process_info *process;
-
-      if (own_buf[sizeof ("qAttached") - 1])
-	{
-	  int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
-	  process = find_process_pid (pid);
-	}
-      else
-	{
-	  require_running_or_return (own_buf);
-	  process = current_process ();
-	}
-
-      if (process == NULL)
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-
-      strcpy (own_buf, process->attached ? "1" : "0");
-      return;
-    }
-
-  if (startswith (own_buf, "qCRC:"))
-    {
-      /* CRC check (compare-section).  */
-      const char *comma;
-      ULONGEST base;
-      int len;
-      unsigned long long crc;
-
-      require_running_or_return (own_buf);
-      comma = unpack_varlen_hex (own_buf + 5, &base);
-      if (*comma++ != ',')
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-      len = strtoul (comma, NULL, 16);
-      crc = crc32 (base, len, 0xffffffff);
-      /* Check for memory failure.  */
-      if (crc == (unsigned long long) -1)
-	{
-	  write_enn (own_buf);
-	  return;
-	}
-      sprintf (own_buf, "C%lx", (unsigned long) crc);
-      return;
-    }
-
-  if (handle_qxfer (own_buf, packet_len, new_packet_len_p))
-    return;
-
-  if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
-    return;
-
-  /* Otherwise we didn't know what packet it was.  Say we didn't
-     understand it.  */
-  own_buf[0] = 0;
-}
-
-static void gdb_wants_all_threads_stopped (void);
-static void resume (struct thread_resume *actions, size_t n);
-
-/* The callback that is passed to visit_actioned_threads.  */
-typedef int (visit_actioned_threads_callback_ftype)
-  (const struct thread_resume *, struct thread_info *);
-
-/* Call CALLBACK for any thread to which ACTIONS applies to.  Returns
-   true if CALLBACK returns true.  Returns false if no matching thread
-   is found or CALLBACK results false.
-   Note: This function is itself a callback for find_thread.  */
-
-static bool
-visit_actioned_threads (thread_info *thread,
-			const struct thread_resume *actions,
-			size_t num_actions,
-			visit_actioned_threads_callback_ftype *callback)
-{
-  for (size_t i = 0; i < num_actions; i++)
-    {
-      const struct thread_resume *action = &actions[i];
-
-      if (action->thread == minus_one_ptid
-	  || action->thread == thread->id
-	  || ((action->thread.pid ()
-	       == thread->id.pid ())
-	      && action->thread.lwp () == -1))
-	{
-	  if ((*callback) (action, thread))
-	    return true;
-	}
-    }
-
-  return false;
-}
-
-/* Callback for visit_actioned_threads.  If the thread has a pending
-   status to report, report it now.  */
-
-static int
-handle_pending_status (const struct thread_resume *resumption,
-		       struct thread_info *thread)
-{
-  client_state &cs = get_client_state ();
-  if (thread->status_pending_p)
-    {
-      thread->status_pending_p = 0;
-
-      cs.last_status = thread->last_status;
-      cs.last_ptid = thread->id;
-      prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status);
-      return 1;
-    }
-  return 0;
-}
-
-/* Parse vCont packets.  */
-static void
-handle_v_cont (char *own_buf)
-{
-  const char *p;
-  int n = 0, i = 0;
-  struct thread_resume *resume_info;
-  struct thread_resume default_action { null_ptid };
-
-  /* Count the number of semicolons in the packet.  There should be one
-     for every action.  */
-  p = &own_buf[5];
-  while (p)
-    {
-      n++;
-      p++;
-      p = strchr (p, ';');
-    }
-
-  resume_info = (struct thread_resume *) malloc (n * sizeof (resume_info[0]));
-  if (resume_info == NULL)
-    goto err;
-
-  p = &own_buf[5];
-  while (*p)
-    {
-      p++;
-
-      memset (&resume_info[i], 0, sizeof resume_info[i]);
-
-      if (p[0] == 's' || p[0] == 'S')
-	resume_info[i].kind = resume_step;
-      else if (p[0] == 'r')
-	resume_info[i].kind = resume_step;
-      else if (p[0] == 'c' || p[0] == 'C')
-	resume_info[i].kind = resume_continue;
-      else if (p[0] == 't')
-	resume_info[i].kind = resume_stop;
-      else
-	goto err;
-
-      if (p[0] == 'S' || p[0] == 'C')
-	{
-	  char *q;
-	  int sig = strtol (p + 1, &q, 16);
-	  if (p == q)
-	    goto err;
-	  p = q;
-
-	  if (!gdb_signal_to_host_p ((enum gdb_signal) sig))
-	    goto err;
-	  resume_info[i].sig = gdb_signal_to_host ((enum gdb_signal) sig);
-	}
-      else if (p[0] == 'r')
-	{
-	  ULONGEST addr;
-
-	  p = unpack_varlen_hex (p + 1, &addr);
-	  resume_info[i].step_range_start = addr;
-
-	  if (*p != ',')
-	    goto err;
-
-	  p = unpack_varlen_hex (p + 1, &addr);
-	  resume_info[i].step_range_end = addr;
-	}
-      else
-	{
-	  p = p + 1;
-	}
-
-      if (p[0] == 0)
-	{
-	  resume_info[i].thread = minus_one_ptid;
-	  default_action = resume_info[i];
-
-	  /* Note: we don't increment i here, we'll overwrite this entry
-	     the next time through.  */
-	}
-      else if (p[0] == ':')
-	{
-	  const char *q;
-	  ptid_t ptid = read_ptid (p + 1, &q);
-
-	  if (p == q)
-	    goto err;
-	  p = q;
-	  if (p[0] != ';' && p[0] != 0)
-	    goto err;
-
-	  resume_info[i].thread = ptid;
-
-	  i++;
-	}
-    }
-
-  if (i < n)
-    resume_info[i] = default_action;
-
-  resume (resume_info, n);
-  free (resume_info);
-  return;
-
-err:
-  write_enn (own_buf);
-  free (resume_info);
-  return;
-}
-
-/* Resume target with ACTIONS, an array of NUM_ACTIONS elements.  */
-
-static void
-resume (struct thread_resume *actions, size_t num_actions)
-{
-  client_state &cs = get_client_state ();
-  if (!non_stop)
-    {
-      /* Check if among the threads that GDB wants actioned, there's
-	 one with a pending status to report.  If so, skip actually
-	 resuming/stopping and report the pending event
-	 immediately.  */
-
-      thread_info *thread_with_status = find_thread ([&] (thread_info *thread)
-	{
-	  return visit_actioned_threads (thread, actions, num_actions,
-					 handle_pending_status);
-	});
-
-      if (thread_with_status != NULL)
-	return;
-
-      enable_async_io ();
-    }
-
-  (*the_target->resume) (actions, num_actions);
-
-  if (non_stop)
-    write_ok (cs.own_buf);
-  else
-    {
-      cs.last_ptid = mywait (minus_one_ptid, &cs.last_status, 0, 1);
-
-      if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED
-	  && !report_no_resumed)
-	{
-	  /* The client does not support this stop reply.  At least
-	     return error.  */
-	  sprintf (cs.own_buf, "E.No unwaited-for children left.");
-	  disable_async_io ();
-	  return;
-	}
-
-      if (cs.last_status.kind != TARGET_WAITKIND_EXITED
-          && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED
-	  && cs.last_status.kind != TARGET_WAITKIND_NO_RESUMED)
-	current_thread->last_status = cs.last_status;
-
-      /* From the client's perspective, all-stop mode always stops all
-	 threads implicitly (and the target backend has already done
-	 so by now).  Tag all threads as "want-stopped", so we don't
-	 resume them implicitly without the client telling us to.  */
-      gdb_wants_all_threads_stopped ();
-      prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status);
-      disable_async_io ();
-
-      if (cs.last_status.kind == TARGET_WAITKIND_EXITED
-          || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED)
-        target_mourn_inferior (cs.last_ptid);
-    }
-}
-
-/* Attach to a new program.  Return 1 if successful, 0 if failure.  */
-static int
-handle_v_attach (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  int pid;
-
-  pid = strtol (own_buf + 8, NULL, 16);
-  if (pid != 0 && attach_inferior (pid) == 0)
-    {
-      /* Don't report shared library events after attaching, even if
-	 some libraries are preloaded.  GDB will always poll the
-	 library list.  Avoids the "stopped by shared library event"
-	 notice on the GDB side.  */
-      dlls_changed = 0;
-
-      if (non_stop)
-	{
-	  /* In non-stop, we don't send a resume reply.  Stop events
-	     will follow up using the normal notification
-	     mechanism.  */
-	  write_ok (own_buf);
-	}
-      else
-	prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status);
-
-      return 1;
-    }
-  else
-    {
-      write_enn (own_buf);
-      return 0;
-    }
-}
-
-/* Run a new program.  Return 1 if successful, 0 if failure.  */
-static int
-handle_v_run (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  char *p, *next_p;
-  std::vector<char *> new_argv;
-  char *new_program_name = NULL;
-  int i, new_argc;
-
-  new_argc = 0;
-  for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
-    {
-      p++;
-      new_argc++;
-    }
-
-  for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i)
-    {
-      next_p = strchr (p, ';');
-      if (next_p == NULL)
-	next_p = p + strlen (p);
-
-      if (i == 0 && p == next_p)
-	{
-	  /* No program specified.  */
-	  new_program_name = NULL;
-	}
-      else if (p == next_p)
-	{
-	  /* Empty argument.  */
-	  new_argv.push_back (xstrdup ("''"));
-	}
-      else
-	{
-	  size_t len = (next_p - p) / 2;
-	  /* ARG is the unquoted argument received via the RSP.  */
-	  char *arg = (char *) xmalloc (len + 1);
-	  /* FULL_ARGS will contain the quoted version of ARG.  */
-	  char *full_arg = (char *) xmalloc ((len + 1) * 2);
-	  /* These are pointers used to navigate the strings above.  */
-	  char *tmp_arg = arg;
-	  char *tmp_full_arg = full_arg;
-	  int need_quote = 0;
-
-	  hex2bin (p, (gdb_byte *) arg, len);
-	  arg[len] = '\0';
-
-	  while (*tmp_arg != '\0')
-	    {
-	      switch (*tmp_arg)
-		{
-		case '\n':
-		  /* Quote \n.  */
-		  *tmp_full_arg = '\'';
-		  ++tmp_full_arg;
-		  need_quote = 1;
-		  break;
-
-		case '\'':
-		  /* Quote single quote.  */
-		  *tmp_full_arg = '\\';
-		  ++tmp_full_arg;
-		  break;
-
-		default:
-		  break;
-		}
-
-	      *tmp_full_arg = *tmp_arg;
-	      ++tmp_full_arg;
-	      ++tmp_arg;
-	    }
-
-	  if (need_quote)
-	    *tmp_full_arg++ = '\'';
-
-	  /* Finish FULL_ARG and push it into the vector containing
-	     the argv.  */
-	  *tmp_full_arg = '\0';
-	  if (i == 0)
-	    new_program_name = full_arg;
-	  else
-	    new_argv.push_back (full_arg);
-	  xfree (arg);
-	}
-      if (*next_p)
-	next_p++;
-    }
-  new_argv.push_back (NULL);
-
-  if (new_program_name == NULL)
-    {
-      /* GDB didn't specify a program to run.  Use the program from the
-	 last run with the new argument list.  */
-      if (program_path.get () == NULL)
-	{
-	  write_enn (own_buf);
-	  free_vector_argv (new_argv);
-	  return 0;
-	}
-    }
-  else
-    program_path.set (gdb::unique_xmalloc_ptr<char> (new_program_name));
-
-  /* Free the old argv and install the new one.  */
-  free_vector_argv (program_args);
-  program_args = new_argv;
-
-  create_inferior (program_path.get (), program_args);
-
-  if (cs.last_status.kind == TARGET_WAITKIND_STOPPED)
-    {
-      prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status);
-
-      /* In non-stop, sending a resume reply doesn't set the general
-	 thread, but GDB assumes a vRun sets it (this is so GDB can
-	 query which is the main thread of the new inferior.  */
-      if (non_stop)
-	cs.general_thread = cs.last_ptid;
-
-      return 1;
-    }
-  else
-    {
-      write_enn (own_buf);
-      return 0;
-    }
-}
-
-/* Kill process.  Return 1 if successful, 0 if failure.  */
-static int
-handle_v_kill (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  int pid;
-  char *p = &own_buf[6];
-  if (cs.multi_process)
-    pid = strtol (p, NULL, 16);
-  else
-    pid = signal_pid;
-
-  process_info *proc = find_process_pid (pid);
-
-  if (proc != nullptr && kill_inferior (proc) == 0)
-    {
-      cs.last_status.kind = TARGET_WAITKIND_SIGNALLED;
-      cs.last_status.value.sig = GDB_SIGNAL_KILL;
-      cs.last_ptid = ptid_t (pid);
-      discard_queued_stop_replies (cs.last_ptid);
-      write_ok (own_buf);
-      return 1;
-    }
-  else
-    {
-      write_enn (own_buf);
-      return 0;
-    }
-}
-
-/* Handle all of the extended 'v' packets.  */
-void
-handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
-{
-  client_state &cs = get_client_state ();
-  if (!disable_packet_vCont)
-    {
-      if (strcmp (own_buf, "vCtrlC") == 0)
-	{
-	  (*the_target->request_interrupt) ();
-	  write_ok (own_buf);
-	  return;
-	}
-
-      if (startswith (own_buf, "vCont;"))
-	{
-	  handle_v_cont (own_buf);
-	  return;
-	}
-
-      if (startswith (own_buf, "vCont?"))
-	{
-	  strcpy (own_buf, "vCont;c;C;t");
-
-	  if (target_supports_hardware_single_step ()
-	      || target_supports_software_single_step ()
-	      || !cs.vCont_supported)
-	    {
-	      /* If target supports single step either by hardware or by
-		 software, add actions s and S to the list of supported
-		 actions.  On the other hand, if GDB doesn't request the
-		 supported vCont actions in qSupported packet, add s and
-		 S to the list too.  */
-	      own_buf = own_buf + strlen (own_buf);
-	      strcpy (own_buf, ";s;S");
-	    }
-
-	  if (target_supports_range_stepping ())
-	    {
-	      own_buf = own_buf + strlen (own_buf);
-	      strcpy (own_buf, ";r");
-	    }
-	  return;
-	}
-    }
-
-  if (startswith (own_buf, "vFile:")
-      && handle_vFile (own_buf, packet_len, new_packet_len))
-    return;
-
-  if (startswith (own_buf, "vAttach;"))
-    {
-      if ((!extended_protocol || !cs.multi_process) && target_running ())
-	{
-	  fprintf (stderr, "Already debugging a process\n");
-	  write_enn (own_buf);
-	  return;
-	}
-      handle_v_attach (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "vRun;"))
-    {
-      if ((!extended_protocol || !cs.multi_process) && target_running ())
-	{
-	  fprintf (stderr, "Already debugging a process\n");
-	  write_enn (own_buf);
-	  return;
-	}
-      handle_v_run (own_buf);
-      return;
-    }
-
-  if (startswith (own_buf, "vKill;"))
-    {
-      if (!target_running ())
-	{
-	  fprintf (stderr, "No process to kill\n");
-	  write_enn (own_buf);
-	  return;
-	}
-      handle_v_kill (own_buf);
-      return;
-    }
-
-  if (handle_notif_ack (own_buf, packet_len))
-    return;
-
-  /* Otherwise we didn't know what packet it was.  Say we didn't
-     understand it.  */
-  own_buf[0] = 0;
-  return;
-}
-
-/* Resume thread and wait for another event.  In non-stop mode,
-   don't really wait here, but return immediatelly to the event
-   loop.  */
-static void
-myresume (char *own_buf, int step, int sig)
-{
-  client_state &cs = get_client_state ();
-  struct thread_resume resume_info[2];
-  int n = 0;
-  int valid_cont_thread;
-
-  valid_cont_thread = (cs.cont_thread != null_ptid
-			 && cs.cont_thread != minus_one_ptid);
-
-  if (step || sig || valid_cont_thread)
-    {
-      resume_info[0].thread = current_ptid;
-      if (step)
-	resume_info[0].kind = resume_step;
-      else
-	resume_info[0].kind = resume_continue;
-      resume_info[0].sig = sig;
-      n++;
-    }
-
-  if (!valid_cont_thread)
-    {
-      resume_info[n].thread = minus_one_ptid;
-      resume_info[n].kind = resume_continue;
-      resume_info[n].sig = 0;
-      n++;
-    }
-
-  resume (resume_info, n);
-}
-
-/* Callback for for_each_thread.  Make a new stop reply for each
-   stopped thread.  */
-
-static void
-queue_stop_reply_callback (thread_info *thread)
-{
-  /* For now, assume targets that don't have this callback also don't
-     manage the thread's last_status field.  */
-  if (the_target->thread_stopped == NULL)
-    {
-      struct vstop_notif *new_notif = new struct vstop_notif;
-
-      new_notif->ptid = thread->id;
-      new_notif->status = thread->last_status;
-      /* Pass the last stop reply back to GDB, but don't notify
-	 yet.  */
-      notif_event_enque (&notif_stop, new_notif);
-    }
-  else
-    {
-      if (thread_stopped (thread))
-	{
-	  if (debug_threads)
-	    {
-	      std::string status_string
-		= target_waitstatus_to_string (&thread->last_status);
-
-	      debug_printf ("Reporting thread %s as already stopped with %s\n",
-			    target_pid_to_str (thread->id),
-			    status_string.c_str ());
-	    }
-
-	  gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE);
-
-	  /* Pass the last stop reply back to GDB, but don't notify
-	     yet.  */
-	  queue_stop_reply (thread->id, &thread->last_status);
-	}
-    }
-}
-
-/* Set this inferior threads's state as "want-stopped".  We won't
-   resume this thread until the client gives us another action for
-   it.  */
-
-static void
-gdb_wants_thread_stopped (thread_info *thread)
-{
-  thread->last_resume_kind = resume_stop;
-
-  if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
-    {
-      /* Most threads are stopped implicitly (all-stop); tag that with
-	 signal 0.  */
-      thread->last_status.kind = TARGET_WAITKIND_STOPPED;
-      thread->last_status.value.sig = GDB_SIGNAL_0;
-    }
-}
-
-/* Set all threads' states as "want-stopped".  */
-
-static void
-gdb_wants_all_threads_stopped (void)
-{
-  for_each_thread (gdb_wants_thread_stopped);
-}
-
-/* Callback for for_each_thread.  If the thread is stopped with an
-   interesting event, mark it as having a pending event.  */
-
-static void
-set_pending_status_callback (thread_info *thread)
-{
-  if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
-      || (thread->last_status.value.sig != GDB_SIGNAL_0
-	  /* A breakpoint, watchpoint or finished step from a previous
-	     GDB run isn't considered interesting for a new GDB run.
-	     If we left those pending, the new GDB could consider them
-	     random SIGTRAPs.  This leaves out real async traps.  We'd
-	     have to peek into the (target-specific) siginfo to
-	     distinguish those.  */
-	  && thread->last_status.value.sig != GDB_SIGNAL_TRAP))
-    thread->status_pending_p = 1;
-}
-
-/* Status handler for the '?' packet.  */
-
-static void
-handle_status (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-
-  /* GDB is connected, don't forward events to the target anymore.  */
-  for_each_process ([] (process_info *process) {
-    process->gdb_detached = 0;
-  });
-
-  /* In non-stop mode, we must send a stop reply for each stopped
-     thread.  In all-stop mode, just send one for the first stopped
-     thread we find.  */
-
-  if (non_stop)
-    {
-      for_each_thread (queue_stop_reply_callback);
-
-      /* The first is sent immediatly.  OK is sent if there is no
-	 stopped thread, which is the same handling of the vStopped
-	 packet (by design).  */
-      notif_write_event (&notif_stop, cs.own_buf);
-    }
-  else
-    {
-      thread_info *thread = NULL;
-
-      pause_all (0);
-      stabilize_threads ();
-      gdb_wants_all_threads_stopped ();
-
-      /* We can only report one status, but we might be coming out of
-	 non-stop -- if more than one thread is stopped with
-	 interesting events, leave events for the threads we're not
-	 reporting now pending.  They'll be reported the next time the
-	 threads are resumed.  Start by marking all interesting events
-	 as pending.  */
-      for_each_thread (set_pending_status_callback);
-
-      /* Prefer the last thread that reported an event to GDB (even if
-	 that was a GDB_SIGNAL_TRAP).  */
-      if (cs.last_status.kind != TARGET_WAITKIND_IGNORE
-	  && cs.last_status.kind != TARGET_WAITKIND_EXITED
-	  && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED)
-	thread = find_thread_ptid (cs.last_ptid);
-
-      /* If the last event thread is not found for some reason, look
-	 for some other thread that might have an event to report.  */
-      if (thread == NULL)
-	thread = find_thread ([] (thread_info *thr_arg)
-	  {
-	    return thr_arg->status_pending_p;
-	  });
-
-      /* If we're still out of luck, simply pick the first thread in
-	 the thread list.  */
-      if (thread == NULL)
-	thread = get_first_thread ();
-
-      if (thread != NULL)
-	{
-	  struct thread_info *tp = (struct thread_info *) thread;
-
-	  /* We're reporting this event, so it's no longer
-	     pending.  */
-	  tp->status_pending_p = 0;
-
-	  /* GDB assumes the current thread is the thread we're
-	     reporting the status for.  */
-	  cs.general_thread = thread->id;
-	  set_desired_thread ();
-
-	  gdb_assert (tp->last_status.kind != TARGET_WAITKIND_IGNORE);
-	  prepare_resume_reply (own_buf, tp->id, &tp->last_status);
-	}
-      else
-	strcpy (own_buf, "W00");
-    }
-}
-
-static void
-gdbserver_version (void)
-{
-  printf ("GNU gdbserver %s%s\n"
-	  "Copyright (C) 2020 Free Software Foundation, Inc.\n"
-	  "gdbserver is free software, covered by the "
-	  "GNU General Public License.\n"
-	  "This gdbserver was configured as \"%s\"\n",
-	  PKGVERSION, version, host_name);
-}
-
-static void
-gdbserver_usage (FILE *stream)
-{
-  fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
-	   "\tgdbserver [OPTIONS] --attach COMM PID\n"
-	   "\tgdbserver [OPTIONS] --multi COMM\n"
-	   "\n"
-	   "COMM may either be a tty device (for serial debugging),\n"
-	   "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n"
-	   "stdin/stdout of gdbserver.\n"
-	   "PROG is the executable program.  ARGS are arguments passed to inferior.\n"
-	   "PID is the process ID to attach to, when --attach is specified.\n"
-	   "\n"
-	   "Operating modes:\n"
-	   "\n"
-	   "  --attach              Attach to running process PID.\n"
-	   "  --multi               Start server without a specific program, and\n"
-	   "                        only quit when explicitly commanded.\n"
-	   "  --once                Exit after the first connection has closed.\n"
-	   "  --help                Print this message and then exit.\n"
-	   "  --version             Display version information and exit.\n"
-	   "\n"
-	   "Other options:\n"
-	   "\n"
-	   "  --wrapper WRAPPER --  Run WRAPPER to start new programs.\n"
-	   "  --disable-randomization\n"
-	   "                        Run PROG with address space randomization disabled.\n"
-	   "  --no-disable-randomization\n"
-	   "                        Don't disable address space randomization when\n"
-	   "                        starting PROG.\n"
-	   "  --startup-with-shell\n"
-	   "                        Start PROG using a shell.  I.e., execs a shell that\n"
-	   "                        then execs PROG.  (default)\n"
-	   "  --no-startup-with-shell\n"
-	   "                        Exec PROG directly instead of using a shell.\n"
-	   "                        Disables argument globbing and variable substitution\n"
-	   "                        on UNIX-like systems.\n"
-	   "\n"
-	   "Debug options:\n"
-	   "\n"
-	   "  --debug               Enable general debugging output.\n"
-	   "  --debug-format=OPT1[,OPT2,...]\n"
-	   "                        Specify extra content in debugging output.\n"
-	   "                          Options:\n"
-	   "                            all\n"
-	   "                            none\n"
-	   "                            timestamp\n"
-	   "  --remote-debug        Enable remote protocol debugging output.\n"
-	   "  --disable-packet=OPT1[,OPT2,...]\n"
-	   "                        Disable support for RSP packets or features.\n"
-	   "                          Options:\n"
-	   "                            vCont, Tthread, qC, qfThreadInfo and \n"
-	   "                            threads (disable all threading packets).\n"
-	   "\n"
-	   "For more information, consult the GDB manual (available as on-line \n"
-	   "info or a printed manual).\n");
-  if (REPORT_BUGS_TO[0] && stream == stdout)
-    fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
-}
-
-static void
-gdbserver_show_disableable (FILE *stream)
-{
-  fprintf (stream, "Disableable packets:\n"
-	   "  vCont       \tAll vCont packets\n"
-	   "  qC          \tQuerying the current thread\n"
-	   "  qfThreadInfo\tThread listing\n"
-	   "  Tthread     \tPassing the thread specifier in the "
-	   "T stop reply packet\n"
-	   "  threads     \tAll of the above\n");
-}
-
-static void
-kill_inferior_callback (process_info *process)
-{
-  kill_inferior (process);
-  discard_queued_stop_replies (ptid_t (process->pid));
-}
-
-/* Call this when exiting gdbserver with possible inferiors that need
-   to be killed or detached from.  */
-
-static void
-detach_or_kill_for_exit (void)
-{
-  /* First print a list of the inferiors we will be killing/detaching.
-     This is to assist the user, for example, in case the inferior unexpectedly
-     dies after we exit: did we screw up or did the inferior exit on its own?
-     Having this info will save some head-scratching.  */
-
-  if (have_started_inferiors_p ())
-    {
-      fprintf (stderr, "Killing process(es):");
-
-      for_each_process ([] (process_info *process) {
-	if (!process->attached)
-	  fprintf (stderr, " %d", process->pid);
-      });
-
-      fprintf (stderr, "\n");
-    }
-  if (have_attached_inferiors_p ())
-    {
-      fprintf (stderr, "Detaching process(es):");
-
-      for_each_process ([] (process_info *process) {
-	if (process->attached)
-	  fprintf (stderr, " %d", process->pid);
-      });
-
-      fprintf (stderr, "\n");
-    }
-
-  /* Now we can kill or detach the inferiors.  */
-  for_each_process ([] (process_info *process) {
-    int pid = process->pid;
-
-    if (process->attached)
-      detach_inferior (process);
-    else
-      kill_inferior (process);
-
-    discard_queued_stop_replies (ptid_t (pid));
-  });
-}
-
-/* Value that will be passed to exit(3) when gdbserver exits.  */
-static int exit_code;
-
-/* Wrapper for detach_or_kill_for_exit that catches and prints
-   errors.  */
-
-static void
-detach_or_kill_for_exit_cleanup ()
-{
-  try
-    {
-      detach_or_kill_for_exit ();
-    }
-  catch (const gdb_exception &exception)
-    {
-      fflush (stdout);
-      fprintf (stderr, "Detach or kill failed: %s\n",
-	       exception.what ());
-      exit_code = 1;
-    }
-}
-
-/* Main function.  This is called by the real "main" function,
-   wrapped in a TRY_CATCH that handles any uncaught exceptions.  */
-
-static void ATTRIBUTE_NORETURN
-captured_main (int argc, char *argv[])
-{
-  int bad_attach;
-  int pid;
-  char *arg_end;
-  const char *port = NULL;
-  char **next_arg = &argv[1];
-  volatile int multi_mode = 0;
-  volatile int attach = 0;
-  int was_running;
-  bool selftest = false;
-#if GDB_SELF_TEST
-  const char *selftest_filter = NULL;
-#endif
-
-  current_directory = getcwd (NULL, 0);
-  client_state &cs = get_client_state ();
-
-  if (current_directory == NULL)
-    {
-      error (_("Could not find current working directory: %s"),
-	     safe_strerror (errno));
-    }
-
-  while (*next_arg != NULL && **next_arg == '-')
-    {
-      if (strcmp (*next_arg, "--version") == 0)
-	{
-	  gdbserver_version ();
-	  exit (0);
-	}
-      else if (strcmp (*next_arg, "--help") == 0)
-	{
-	  gdbserver_usage (stdout);
-	  exit (0);
-	}
-      else if (strcmp (*next_arg, "--attach") == 0)
-	attach = 1;
-      else if (strcmp (*next_arg, "--multi") == 0)
-	multi_mode = 1;
-      else if (strcmp (*next_arg, "--wrapper") == 0)
-	{
-	  char **tmp;
-
-	  next_arg++;
-
-	  tmp = next_arg;
-	  while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
-	    {
-	      wrapper_argv += *next_arg;
-	      wrapper_argv += ' ';
-	      next_arg++;
-	    }
-
-	  if (!wrapper_argv.empty ())
-	    {
-	      /* Erase the last whitespace.  */
-	      wrapper_argv.erase (wrapper_argv.end () - 1);
-	    }
-
-	  if (next_arg == tmp || *next_arg == NULL)
-	    {
-	      gdbserver_usage (stderr);
-	      exit (1);
-	    }
-
-	  /* Consume the "--".  */
-	  *next_arg = NULL;
-	}
-      else if (strcmp (*next_arg, "--debug") == 0)
-	debug_threads = 1;
-      else if (startswith (*next_arg, "--debug-format="))
-	{
-	  std::string error_msg
-	    = parse_debug_format_options ((*next_arg)
-					  + sizeof ("--debug-format=") - 1, 0);
-
-	  if (!error_msg.empty ())
-	    {
-	      fprintf (stderr, "%s", error_msg.c_str ());
-	      exit (1);
-	    }
-	}
-      else if (strcmp (*next_arg, "--remote-debug") == 0)
-	remote_debug = 1;
-      else if (startswith (*next_arg, "--debug-file="))
-	debug_set_output ((*next_arg) + sizeof ("--debug-file=") -1);
-      else if (strcmp (*next_arg, "--disable-packet") == 0)
-	{
-	  gdbserver_show_disableable (stdout);
-	  exit (0);
-	}
-      else if (startswith (*next_arg, "--disable-packet="))
-	{
-	  char *packets = *next_arg += sizeof ("--disable-packet=") - 1;
-	  char *saveptr;
-	  for (char *tok = strtok_r (packets, ",", &saveptr);
-	       tok != NULL;
-	       tok = strtok_r (NULL, ",", &saveptr))
-	    {
-	      if (strcmp ("vCont", tok) == 0)
-		disable_packet_vCont = true;
-	      else if (strcmp ("Tthread", tok) == 0)
-		disable_packet_Tthread = true;
-	      else if (strcmp ("qC", tok) == 0)
-		disable_packet_qC = true;
-	      else if (strcmp ("qfThreadInfo", tok) == 0)
-		disable_packet_qfThreadInfo = true;
-	      else if (strcmp ("threads", tok) == 0)
-		{
-		  disable_packet_vCont = true;
-		  disable_packet_Tthread = true;
-		  disable_packet_qC = true;
-		  disable_packet_qfThreadInfo = true;
-		}
-	      else
-		{
-		  fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
-			   tok);
-		  gdbserver_show_disableable (stderr);
-		  exit (1);
-		}
-	    }
-	}
-      else if (strcmp (*next_arg, "-") == 0)
-	{
-	  /* "-" specifies a stdio connection and is a form of port
-	     specification.  */
-	  port = STDIO_CONNECTION_NAME;
-	  next_arg++;
-	  break;
-	}
-      else if (strcmp (*next_arg, "--disable-randomization") == 0)
-	cs.disable_randomization = 1;
-      else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
-	cs.disable_randomization = 0;
-      else if (strcmp (*next_arg, "--startup-with-shell") == 0)
-	startup_with_shell = true;
-      else if (strcmp (*next_arg, "--no-startup-with-shell") == 0)
-	startup_with_shell = false;
-      else if (strcmp (*next_arg, "--once") == 0)
-	run_once = true;
-      else if (strcmp (*next_arg, "--selftest") == 0)
-	selftest = true;
-      else if (startswith (*next_arg, "--selftest="))
-	{
-	  selftest = true;
-#if GDB_SELF_TEST
-	  selftest_filter = *next_arg + strlen ("--selftest=");
-#endif
-	}
-      else
-	{
-	  fprintf (stderr, "Unknown argument: %s\n", *next_arg);
-	  exit (1);
-	}
-
-      next_arg++;
-      continue;
-    }
-
-  if (port == NULL)
-    {
-      port = *next_arg;
-      next_arg++;
-    }
-  if ((port == NULL || (!attach && !multi_mode && *next_arg == NULL))
-       && !selftest)
-    {
-      gdbserver_usage (stderr);
-      exit (1);
-    }
-
-  /* Remember stdio descriptors.  LISTEN_DESC must not be listed, it will be
-     opened by remote_prepare.  */
-  notice_open_fds ();
-
-  save_original_signals_state (false);
-
-  /* We need to know whether the remote connection is stdio before
-     starting the inferior.  Inferiors created in this scenario have
-     stdin,stdout redirected.  So do this here before we call
-     start_inferior.  */
-  if (port != NULL)
-    remote_prepare (port);
-
-  bad_attach = 0;
-  pid = 0;
-
-  /* --attach used to come after PORT, so allow it there for
-       compatibility.  */
-  if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
-    {
-      attach = 1;
-      next_arg++;
-    }
-
-  if (attach
-      && (*next_arg == NULL
-	  || (*next_arg)[0] == '\0'
-	  || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
-	  || *arg_end != '\0'
-	  || next_arg[1] != NULL))
-    bad_attach = 1;
-
-  if (bad_attach)
-    {
-      gdbserver_usage (stderr);
-      exit (1);
-    }
-
-  /* Gather information about the environment.  */
-  our_environ = gdb_environ::from_host_environ ();
-
-  initialize_async_io ();
-  initialize_low ();
-  have_job_control ();
-  initialize_event_loop ();
-  if (target_supports_tracepoints ())
-    initialize_tracepoint ();
-
-  mem_buf = (unsigned char *) xmalloc (PBUFSIZ);
-
-  if (selftest)
-    {
-#if GDB_SELF_TEST
-      selftests::run_tests (selftest_filter);
-#else
-      printf (_("Selftests have been disabled for this build.\n"));
-#endif
-      throw_quit ("Quit");
-    }
-
-  if (pid == 0 && *next_arg != NULL)
-    {
-      int i, n;
-
-      n = argc - (next_arg - argv);
-      program_path.set (make_unique_xstrdup (next_arg[0]));
-      for (i = 1; i < n; i++)
-	program_args.push_back (xstrdup (next_arg[i]));
-      program_args.push_back (NULL);
-
-      /* Wait till we are at first instruction in program.  */
-      create_inferior (program_path.get (), program_args);
-
-      /* We are now (hopefully) stopped at the first instruction of
-	 the target process.  This assumes that the target process was
-	 successfully created.  */
-    }
-  else if (pid != 0)
-    {
-      if (attach_inferior (pid) == -1)
-	error ("Attaching not supported on this target");
-
-      /* Otherwise succeeded.  */
-    }
-  else
-    {
-      cs.last_status.kind = TARGET_WAITKIND_EXITED;
-      cs.last_status.value.integer = 0;
-      cs.last_ptid = minus_one_ptid;
-    }
-
-  SCOPE_EXIT { detach_or_kill_for_exit_cleanup (); };
-
-  /* Don't report shared library events on the initial connection,
-     even if some libraries are preloaded.  Avoids the "stopped by
-     shared library event" notice on gdb side.  */
-  dlls_changed = 0;
-
-  if (cs.last_status.kind == TARGET_WAITKIND_EXITED
-      || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED)
-    was_running = 0;
-  else
-    was_running = 1;
-
-  if (!was_running && !multi_mode)
-    error ("No program to debug");
-
-  while (1)
-    {
-      cs.noack_mode = 0;
-      cs.multi_process = 0;
-      cs.report_fork_events = 0;
-      cs.report_vfork_events = 0;
-      cs.report_exec_events = 0;
-      /* Be sure we're out of tfind mode.  */
-      cs.current_traceframe = -1;
-      cs.cont_thread = null_ptid;
-      cs.swbreak_feature = 0;
-      cs.hwbreak_feature = 0;
-      cs.vCont_supported = 0;
-
-      remote_open (port);
-
-      try
-	{
-	  /* Wait for events.  This will return when all event sources
-	     are removed from the event loop.  */
-	  start_event_loop ();
-
-	  /* If an exit was requested (using the "monitor exit"
-	     command), terminate now.  */
-	  if (exit_requested)
-	    throw_quit ("Quit");
-
-	  /* The only other way to get here is for getpkt to fail:
-
-	      - If --once was specified, we're done.
-
-	      - If not in extended-remote mode, and we're no longer
-	        debugging anything, simply exit: GDB has disconnected
-	        after processing the last process exit.
-
-	      - Otherwise, close the connection and reopen it at the
-	        top of the loop.  */
-	  if (run_once || (!extended_protocol && !target_running ()))
-	    throw_quit ("Quit");
-
-	  fprintf (stderr,
-		   "Remote side has terminated connection.  "
-		   "GDBserver will reopen the connection.\n");
-
-	  /* Get rid of any pending statuses.  An eventual reconnection
-	     (by the same GDB instance or another) will refresh all its
-	     state from scratch.  */
-	  discard_queued_stop_replies (minus_one_ptid);
-	  for_each_thread ([] (thread_info *thread)
-	    {
-	      thread->status_pending_p = 0;
-	    });
-
-	  if (tracing)
-	    {
-	      if (disconnected_tracing)
-		{
-		  /* Try to enable non-stop/async mode, so we we can
-		     both wait for an async socket accept, and handle
-		     async target events simultaneously.  There's also
-		     no point either in having the target always stop
-		     all threads, when we're going to pass signals
-		     down without informing GDB.  */
-		  if (!non_stop)
-		    {
-		      if (start_non_stop (1))
-			non_stop = 1;
-
-		      /* Detaching implicitly resumes all threads;
-			 simply disconnecting does not.  */
-		    }
-		}
-	      else
-		{
-		  fprintf (stderr,
-			   "Disconnected tracing disabled; "
-			   "stopping trace run.\n");
-		  stop_tracing ();
-		}
-	    }
-	}
-      catch (const gdb_exception_error &exception)
-	{
-	  fflush (stdout);
-	  fprintf (stderr, "gdbserver: %s\n", exception.what ());
-
-	  if (response_needed)
-	    {
-	      write_enn (cs.own_buf);
-	      putpkt (cs.own_buf);
-	    }
-
-	  if (run_once)
-	    throw_quit ("Quit");
-	}
-    }
-}
-
-/* Main function.  */
-
-int
-main (int argc, char *argv[])
-{
-
-  try
-    {
-      captured_main (argc, argv);
-    }
-  catch (const gdb_exception &exception)
-    {
-      if (exception.reason == RETURN_ERROR)
-	{
-	  fflush (stdout);
-	  fprintf (stderr, "%s\n", exception.what ());
-	  fprintf (stderr, "Exiting\n");
-	  exit_code = 1;
-	}
-
-      exit (exit_code);
-    }
-
-  gdb_assert_not_reached ("captured_main should never return");
-}
-
-/* Process options coming from Z packets for a breakpoint.  PACKET is
-   the packet buffer.  *PACKET is updated to point to the first char
-   after the last processed option.  */
-
-static void
-process_point_options (struct gdb_breakpoint *bp, const char **packet)
-{
-  const char *dataptr = *packet;
-  int persist;
-
-  /* Check if data has the correct format.  */
-  if (*dataptr != ';')
-    return;
-
-  dataptr++;
-
-  while (*dataptr)
-    {
-      if (*dataptr == ';')
-	++dataptr;
-
-      if (*dataptr == 'X')
-	{
-	  /* Conditional expression.  */
-	  if (debug_threads)
-	    debug_printf ("Found breakpoint condition.\n");
-	  if (!add_breakpoint_condition (bp, &dataptr))
-	    dataptr = strchrnul (dataptr, ';');
-	}
-      else if (startswith (dataptr, "cmds:"))
-	{
-	  dataptr += strlen ("cmds:");
-	  if (debug_threads)
-	    debug_printf ("Found breakpoint commands %s.\n", dataptr);
-	  persist = (*dataptr == '1');
-	  dataptr += 2;
-	  if (add_breakpoint_commands (bp, &dataptr, persist))
-	    dataptr = strchrnul (dataptr, ';');
-	}
-      else
-	{
-	  fprintf (stderr, "Unknown token %c, ignoring.\n",
-		   *dataptr);
-	  /* Skip tokens until we find one that we recognize.  */
-	  dataptr = strchrnul (dataptr, ';');
-	}
-    }
-  *packet = dataptr;
-}
-
-/* Event loop callback that handles a serial event.  The first byte in
-   the serial buffer gets us here.  We expect characters to arrive at
-   a brisk pace, so we read the rest of the packet with a blocking
-   getpkt call.  */
-
-static int
-process_serial_event (void)
-{
-  client_state &cs = get_client_state ();
-  int signal;
-  unsigned int len;
-  CORE_ADDR mem_addr;
-  unsigned char sig;
-  int packet_len;
-  int new_packet_len = -1;
-
-  disable_async_io ();
-
-  response_needed = false;
-  packet_len = getpkt (cs.own_buf);
-  if (packet_len <= 0)
-    {
-      remote_close ();
-      /* Force an event loop break.  */
-      return -1;
-    }
-  response_needed = true;
-
-  char ch = cs.own_buf[0];
-  switch (ch)
-    {
-    case 'q':
-      handle_query (cs.own_buf, packet_len, &new_packet_len);
-      break;
-    case 'Q':
-      handle_general_set (cs.own_buf);
-      break;
-    case 'D':
-      handle_detach (cs.own_buf);
-      break;
-    case '!':
-      extended_protocol = true;
-      write_ok (cs.own_buf);
-      break;
-    case '?':
-      handle_status (cs.own_buf);
-      break;
-    case 'H':
-      if (cs.own_buf[1] == 'c' || cs.own_buf[1] == 'g' || cs.own_buf[1] == 's')
-	{
-	  require_running_or_break (cs.own_buf);
-
-	  ptid_t thread_id = read_ptid (&cs.own_buf[2], NULL);
-
-	  if (thread_id == null_ptid || thread_id == minus_one_ptid)
-	    thread_id = null_ptid;
-	  else if (thread_id.is_pid ())
-	    {
-	      /* The ptid represents a pid.  */
-	      thread_info *thread = find_any_thread_of_pid (thread_id.pid ());
-
-	      if (thread == NULL)
-		{
-		  write_enn (cs.own_buf);
-		  break;
-		}
-
-	      thread_id = thread->id;
-	    }
-	  else
-	    {
-	      /* The ptid represents a lwp/tid.  */
-	      if (find_thread_ptid (thread_id) == NULL)
-		{
-		  write_enn (cs.own_buf);
-		  break;
-		}
-	    }
-
-	  if (cs.own_buf[1] == 'g')
-	    {
-	      if (thread_id == null_ptid)
-		{
-		  /* GDB is telling us to choose any thread.  Check if
-		     the currently selected thread is still valid. If
-		     it is not, select the first available.  */
-		  thread_info *thread = find_thread_ptid (cs.general_thread);
-		  if (thread == NULL)
-		    thread = get_first_thread ();
-		  thread_id = thread->id;
-		}
-
-	      cs.general_thread = thread_id;
-	      set_desired_thread ();
-	      gdb_assert (current_thread != NULL);
-	    }
-	  else if (cs.own_buf[1] == 'c')
-	    cs.cont_thread = thread_id;
-
-	  write_ok (cs.own_buf);
-	}
-      else
-	{
-	  /* Silently ignore it so that gdb can extend the protocol
-	     without compatibility headaches.  */
-	  cs.own_buf[0] = '\0';
-	}
-      break;
-    case 'g':
-      require_running_or_break (cs.own_buf);
-      if (cs.current_traceframe >= 0)
-	{
-	  struct regcache *regcache
-	    = new_register_cache (current_target_desc ());
-
-	  if (fetch_traceframe_registers (cs.current_traceframe,
-					  regcache, -1) == 0)
-	    registers_to_string (regcache, cs.own_buf);
-	  else
-	    write_enn (cs.own_buf);
-	  free_register_cache (regcache);
-	}
-      else
-	{
-	  struct regcache *regcache;
-
-	  if (!set_desired_thread ())
-	    write_enn (cs.own_buf);
-	  else
-	    {
-	      regcache = get_thread_regcache (current_thread, 1);
-	      registers_to_string (regcache, cs.own_buf);
-	    }
-	}
-      break;
-    case 'G':
-      require_running_or_break (cs.own_buf);
-      if (cs.current_traceframe >= 0)
-	write_enn (cs.own_buf);
-      else
-	{
-	  struct regcache *regcache;
-
-	  if (!set_desired_thread ())
-	    write_enn (cs.own_buf);
-	  else
-	    {
-	      regcache = get_thread_regcache (current_thread, 1);
-	      registers_from_string (regcache, &cs.own_buf[1]);
-	      write_ok (cs.own_buf);
-	    }
-	}
-      break;
-    case 'm':
-      {
-	require_running_or_break (cs.own_buf);
-	decode_m_packet (&cs.own_buf[1], &mem_addr, &len);
-	int res = gdb_read_memory (mem_addr, mem_buf, len);
-	if (res < 0)
-	  write_enn (cs.own_buf);
-	else
-	  bin2hex (mem_buf, cs.own_buf, res);
-      }
-      break;
-    case 'M':
-      require_running_or_break (cs.own_buf);
-      decode_M_packet (&cs.own_buf[1], &mem_addr, &len, &mem_buf);
-      if (gdb_write_memory (mem_addr, mem_buf, len) == 0)
-	write_ok (cs.own_buf);
-      else
-	write_enn (cs.own_buf);
-      break;
-    case 'X':
-      require_running_or_break (cs.own_buf);
-      if (decode_X_packet (&cs.own_buf[1], packet_len - 1,
-			   &mem_addr, &len, &mem_buf) < 0
-	  || gdb_write_memory (mem_addr, mem_buf, len) != 0)
-	write_enn (cs.own_buf);
-      else
-	write_ok (cs.own_buf);
-      break;
-    case 'C':
-      require_running_or_break (cs.own_buf);
-      hex2bin (cs.own_buf + 1, &sig, 1);
-      if (gdb_signal_to_host_p ((enum gdb_signal) sig))
-	signal = gdb_signal_to_host ((enum gdb_signal) sig);
-      else
-	signal = 0;
-      myresume (cs.own_buf, 0, signal);
-      break;
-    case 'S':
-      require_running_or_break (cs.own_buf);
-      hex2bin (cs.own_buf + 1, &sig, 1);
-      if (gdb_signal_to_host_p ((enum gdb_signal) sig))
-	signal = gdb_signal_to_host ((enum gdb_signal) sig);
-      else
-	signal = 0;
-      myresume (cs.own_buf, 1, signal);
-      break;
-    case 'c':
-      require_running_or_break (cs.own_buf);
-      signal = 0;
-      myresume (cs.own_buf, 0, signal);
-      break;
-    case 's':
-      require_running_or_break (cs.own_buf);
-      signal = 0;
-      myresume (cs.own_buf, 1, signal);
-      break;
-    case 'Z':  /* insert_ ... */
-      /* Fallthrough.  */
-    case 'z':  /* remove_ ... */
-      {
-	char *dataptr;
-	ULONGEST addr;
-	int kind;
-	char type = cs.own_buf[1];
-	int res;
-	const int insert = ch == 'Z';
-	const char *p = &cs.own_buf[3];
-
-	p = unpack_varlen_hex (p, &addr);
-	kind = strtol (p + 1, &dataptr, 16);
-
-	if (insert)
-	  {
-	    struct gdb_breakpoint *bp;
-
-	    bp = set_gdb_breakpoint (type, addr, kind, &res);
-	    if (bp != NULL)
-	      {
-		res = 0;
-
-		/* GDB may have sent us a list of *point parameters to
-		   be evaluated on the target's side.  Read such list
-		   here.  If we already have a list of parameters, GDB
-		   is telling us to drop that list and use this one
-		   instead.  */
-		clear_breakpoint_conditions_and_commands (bp);
-		const char *options = dataptr;
-		process_point_options (bp, &options);
-	      }
-	  }
-	else
-	  res = delete_gdb_breakpoint (type, addr, kind);
-
-	if (res == 0)
-	  write_ok (cs.own_buf);
-	else if (res == 1)
-	  /* Unsupported.  */
-	  cs.own_buf[0] = '\0';
-	else
-	  write_enn (cs.own_buf);
-	break;
-      }
-    case 'k':
-      response_needed = false;
-      if (!target_running ())
-	/* The packet we received doesn't make sense - but we can't
-	   reply to it, either.  */
-	return 0;
-
-      fprintf (stderr, "Killing all inferiors\n");
-
-      for_each_process (kill_inferior_callback);
-
-      /* When using the extended protocol, we wait with no program
-	 running.  The traditional protocol will exit instead.  */
-      if (extended_protocol)
-	{
-	  cs.last_status.kind = TARGET_WAITKIND_EXITED;
-	  cs.last_status.value.sig = GDB_SIGNAL_KILL;
-	  return 0;
-	}
-      else
-	exit (0);
-
-    case 'T':
-      {
-	require_running_or_break (cs.own_buf);
-
-	ptid_t thread_id = read_ptid (&cs.own_buf[1], NULL);
-	if (find_thread_ptid (thread_id) == NULL)
-	  {
-	    write_enn (cs.own_buf);
-	    break;
-	  }
-
-	if (mythread_alive (thread_id))
-	  write_ok (cs.own_buf);
-	else
-	  write_enn (cs.own_buf);
-      }
-      break;
-    case 'R':
-      response_needed = false;
-
-      /* Restarting the inferior is only supported in the extended
-	 protocol.  */
-      if (extended_protocol)
-	{
-	  if (target_running ())
-	    for_each_process (kill_inferior_callback);
-
-	  fprintf (stderr, "GDBserver restarting\n");
-
-	  /* Wait till we are at 1st instruction in prog.  */
-	  if (program_path.get () != NULL)
-	    {
-	      create_inferior (program_path.get (), program_args);
-
-	      if (cs.last_status.kind == TARGET_WAITKIND_STOPPED)
-		{
-		  /* Stopped at the first instruction of the target
-		     process.  */
-		  cs.general_thread = cs.last_ptid;
-		}
-	      else
-		{
-		  /* Something went wrong.  */
-		  cs.general_thread = null_ptid;
-		}
-	    }
-	  else
-	    {
-	      cs.last_status.kind = TARGET_WAITKIND_EXITED;
-	      cs.last_status.value.sig = GDB_SIGNAL_KILL;
-	    }
-	  return 0;
-	}
-      else
-	{
-	  /* It is a request we don't understand.  Respond with an
-	     empty packet so that gdb knows that we don't support this
-	     request.  */
-	  cs.own_buf[0] = '\0';
-	  break;
-	}
-    case 'v':
-      /* Extended (long) request.  */
-      handle_v_requests (cs.own_buf, packet_len, &new_packet_len);
-      break;
-
-    default:
-      /* It is a request we don't understand.  Respond with an empty
-	 packet so that gdb knows that we don't support this
-	 request.  */
-      cs.own_buf[0] = '\0';
-      break;
-    }
-
-  if (new_packet_len != -1)
-    putpkt_binary (cs.own_buf, new_packet_len);
-  else
-    putpkt (cs.own_buf);
-
-  response_needed = false;
-
-  if (exit_requested)
-    return -1;
-
-  return 0;
-}
-
-/* Event-loop callback for serial events.  */
-
-int
-handle_serial_event (int err, gdb_client_data client_data)
-{
-  if (debug_threads)
-    debug_printf ("handling possible serial event\n");
-
-  /* Really handle it.  */
-  if (process_serial_event () < 0)
-    return -1;
-
-  /* Be sure to not change the selected thread behind GDB's back.
-     Important in the non-stop mode asynchronous protocol.  */
-  set_desired_thread ();
-
-  return 0;
-}
-
-/* Push a stop notification on the notification queue.  */
-
-static void
-push_stop_notification (ptid_t ptid, struct target_waitstatus *status)
-{
-  struct vstop_notif *vstop_notif = new struct vstop_notif;
-
-  vstop_notif->status = *status;
-  vstop_notif->ptid = ptid;
-  /* Push Stop notification.  */
-  notif_push (&notif_stop, vstop_notif);
-}
-
-/* Event-loop callback for target events.  */
-
-int
-handle_target_event (int err, gdb_client_data client_data)
-{
-  client_state &cs = get_client_state ();
-  if (debug_threads)
-    debug_printf ("handling possible target event\n");
-
-  cs.last_ptid = mywait (minus_one_ptid, &cs.last_status,
-		      TARGET_WNOHANG, 1);
-
-  if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED)
-    {
-      if (gdb_connected () && report_no_resumed)
-	push_stop_notification (null_ptid, &cs.last_status);
-    }
-  else if (cs.last_status.kind != TARGET_WAITKIND_IGNORE)
-    {
-      int pid = cs.last_ptid.pid ();
-      struct process_info *process = find_process_pid (pid);
-      int forward_event = !gdb_connected () || process->gdb_detached;
-
-      if (cs.last_status.kind == TARGET_WAITKIND_EXITED
-	  || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED)
-	{
-	  mark_breakpoints_out (process);
-	  target_mourn_inferior (cs.last_ptid);
-	}
-      else if (cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
-	;
-      else
-	{
-	  /* We're reporting this thread as stopped.  Update its
-	     "want-stopped" state to what the client wants, until it
-	     gets a new resume action.  */
-	  current_thread->last_resume_kind = resume_stop;
-	  current_thread->last_status = cs.last_status;
-	}
-
-      if (forward_event)
-	{
-	  if (!target_running ())
-	    {
-	      /* The last process exited.  We're done.  */
-	      exit (0);
-	    }
-
-	  if (cs.last_status.kind == TARGET_WAITKIND_EXITED
-	      || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED
-	      || cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
-	    ;
-	  else
-	    {
-	      /* A thread stopped with a signal, but gdb isn't
-		 connected to handle it.  Pass it down to the
-		 inferior, as if it wasn't being traced.  */
-	      enum gdb_signal signal;
-
-	      if (debug_threads)
-		debug_printf ("GDB not connected; forwarding event %d for"
-			      " [%s]\n",
-			      (int) cs.last_status.kind,
-			      target_pid_to_str (cs.last_ptid));
-
-	      if (cs.last_status.kind == TARGET_WAITKIND_STOPPED)
-		signal = cs.last_status.value.sig;
-	      else
-		signal = GDB_SIGNAL_0;
-	      target_continue (cs.last_ptid, signal);
-	    }
-	}
-      else
-	push_stop_notification (cs.last_ptid, &cs.last_status);
-    }
-
-  /* Be sure to not change the selected thread behind GDB's back.
-     Important in the non-stop mode asynchronous protocol.  */
-  set_desired_thread ();
-
-  return 0;
-}
-
-#if GDB_SELF_TEST
-namespace selftests
-{
-
-void
-reset ()
-{}
-
-} // namespace selftests
-#endif /* GDB_SELF_TEST */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/server.h ./gdb/gdbserver/server.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/server.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/server.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,202 +0,0 @@
-/* Common definitions for remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_SERVER_H
-#define GDBSERVER_SERVER_H
-
-#include "gdbsupport/common-defs.h"
-
-gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *));
-
-#ifdef __MINGW32CE__
-#include "wincecompat.h"
-#endif
-
-#include "gdbsupport/version.h"
-
-#if !HAVE_DECL_PERROR
-#ifndef perror
-extern void perror (const char *);
-#endif
-#endif
-
-#if !HAVE_DECL_VASPRINTF
-extern int vasprintf(char **strp, const char *fmt, va_list ap);
-#endif
-#if !HAVE_DECL_VSNPRINTF
-int vsnprintf(char *str, size_t size, const char *format, va_list ap);
-#endif
-
-#ifdef IN_PROCESS_AGENT
-#  define PROG "ipa"
-#else
-#  define PROG "gdbserver"
-#endif
-
-#include "gdbsupport/buffer.h"
-#include "gdbsupport/xml-utils.h"
-#include "regcache.h"
-#include "gdbsupport/gdb_signals.h"
-#include "target.h"
-#include "mem-break.h"
-#include "gdbsupport/environ.h"
-
-/* Target-specific functions */
-
-void initialize_low ();
-
-/* Public variables in server.c */
-
-extern bool server_waiting;
-
-extern bool disable_packet_vCont;
-extern bool disable_packet_Tthread;
-extern bool disable_packet_qC;
-extern bool disable_packet_qfThreadInfo;
-
-extern bool run_once;
-extern bool non_stop;
-
-#if USE_WIN32API
-#include <winsock2.h>
-typedef SOCKET gdb_fildes_t;
-#else
-typedef int gdb_fildes_t;
-#endif
-
-#include "event-loop.h"
-
-/* Functions from server.c.  */
-extern void handle_v_requests (char *own_buf, int packet_len,
-			       int *new_packet_len);
-extern int handle_serial_event (int err, gdb_client_data client_data);
-extern int handle_target_event (int err, gdb_client_data client_data);
-
-/* Get rid of the currently pending stop replies that match PTID.  */
-extern void discard_queued_stop_replies (ptid_t ptid);
-
-/* Returns true if there's a pending stop reply that matches PTID in
-   the vStopped notifications queue.  */
-extern int in_queued_stop_replies (ptid_t ptid);
-
-#include "remote-utils.h"
-
-#include "utils.h"
-#include "debug.h"
-#include "gdbsupport/gdb_vecs.h"
-
-/* Maximum number of bytes to read/write at once.  The value here
-   is chosen to fill up a packet (the headers account for the 32).  */
-#define MAXBUFBYTES(N) (((N)-32)/2)
-
-/* Buffer sizes for transferring memory, registers, etc.   Set to a constant
-   value to accomodate multiple register formats.  This value must be at least
-   as large as the largest register set supported by gdbserver.  */
-#define PBUFSIZ 18432
-
-/* Definition for an unknown syscall, used basically in error-cases.  */
-#define UNKNOWN_SYSCALL (-1)
-
-/* Definition for any syscall, used for unfiltered syscall reporting.  */
-#define ANY_SYSCALL (-2)
-
-/* After fork_inferior has been called, we need to adjust a few
-   signals and call startup_inferior to start the inferior and consume
-   its first events.  This is done here.  PID is the pid of the new
-   inferior and PROGRAM is its name.  */
-extern void post_fork_inferior (int pid, const char *program);
-
-/* Get the gdb_environ being used in the current session.  */
-extern gdb_environ *get_environ ();
-
-extern unsigned long signal_pid;
-
-
-/* Description of the client remote protocol state for the currently
-   connected client.  */
-
-struct client_state
-{
-  client_state ():
-    own_buf ((char *) xmalloc (PBUFSIZ + 1)) 
-  {}
-
-  /* The thread set with an `Hc' packet.  `Hc' is deprecated in favor of
-     `vCont'.  Note the multi-process extensions made `vCont' a
-     requirement, so `Hc pPID.TID' is pretty much undefined.  So
-     CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for
-     resuming all threads of the process (again, `Hc' isn't used for
-     multi-process), or a specific thread ptid_t.  */
-  ptid_t cont_thread;
-
-  /* The thread set with an `Hg' packet.  */
-  ptid_t general_thread;
-
-  int multi_process = 0;
-  int report_fork_events = 0;
-  int report_vfork_events = 0;
-  int report_exec_events = 0;
-  int report_thread_events = 0;
-
-  /* True if the "swbreak+" feature is active.  In that case, GDB wants
-     us to report whether a trap is explained by a software breakpoint
-     and for the server to handle PC adjustment if necessary on this
-     target.  Only enabled if the target supports it.  */
-  int swbreak_feature = 0;
-  /* True if the "hwbreak+" feature is active.  In that case, GDB wants
-     us to report whether a trap is explained by a hardware breakpoint.
-     Only enabled if the target supports it.  */
-  int hwbreak_feature = 0;
-
-  /* True if the "vContSupported" feature is active.  In that case, GDB
-     wants us to report whether single step is supported in the reply to
-     "vCont?" packet.  */
-  int vCont_supported = 0;
-
-  /* Whether we should attempt to disable the operating system's address
-     space randomization feature before starting an inferior.  */
-  int disable_randomization = 1;
-
-  int pass_signals[GDB_SIGNAL_LAST];
-  int program_signals[GDB_SIGNAL_LAST];
-  int program_signals_p = 0;
-
-  /* Last status reported to GDB.  */
-  struct target_waitstatus last_status;
-  ptid_t last_ptid;
-
-  char *own_buf;
-
-  /* If true, then GDB has requested noack mode.  */
-  int noack_mode = 0;
-  /* If true, then we tell GDB to use noack mode by default.  */
-  int transport_is_reliable = 0;
-
-  /* The traceframe to be used as the source of data to send back to
-     GDB.  A value of -1 means to get data from the live program.  */
-
-  int current_traceframe = -1;
-
-};
-
-client_state &get_client_state ();
-
-#include "gdbthread.h"
-#include "inferiors.h"
-
-#endif /* GDBSERVER_SERVER_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/symbol.c ./gdb/gdbserver/symbol.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/symbol.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/symbol.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-/* Symbol manipulating routines for the remote server for GDB.
-
-   Copyright (C) 2014-2020 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 "server.h"
-#include "gdbsupport/symbol.h"
-
-/* See gdbsupport/symbol.h.  */
-
-int
-find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
-			     struct objfile *objfile)
-{
-  gdb_assert (objfile == NULL);
-
-  return look_up_one_symbol (name, addr, 1) != 1;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/target.c ./gdb/gdbserver/target.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/target.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/target.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,395 +0,0 @@
-/* Target operations for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 "server.h"
-#include "tracepoint.h"
-#include "gdbsupport/byte-vector.h"
-
-struct target_ops *the_target;
-
-int
-set_desired_thread ()
-{
-  client_state &cs = get_client_state ();
-  thread_info *found = find_thread_ptid (cs.general_thread);
-
-  current_thread = found;
-  return (current_thread != NULL);
-}
-
-/* The thread that was current before prepare_to_access_memory was
-   called.  done_accessing_memory uses this to restore the previous
-   selected thread.  */
-static ptid_t prev_general_thread;
-
-/* See target.h.  */
-
-int
-prepare_to_access_memory (void)
-{
-  client_state &cs = get_client_state ();
-
-  /* The first thread found.  */
-  struct thread_info *first = NULL;
-  /* The first stopped thread found.  */
-  struct thread_info *stopped = NULL;
-  /* The current general thread, if found.  */
-  struct thread_info *current = NULL;
-
-  /* Save the general thread value, since prepare_to_access_memory could change
-     it.  */
-  prev_general_thread = cs.general_thread;
-
-  if (the_target->prepare_to_access_memory != NULL)
-    {
-      int res;
-
-      res = the_target->prepare_to_access_memory ();
-      if (res != 0)
-	return res;
-    }
-
-  for_each_thread (prev_general_thread.pid (), [&] (thread_info *thread)
-    {
-      if (mythread_alive (thread->id))
-	{
-	  if (stopped == NULL && the_target->thread_stopped != NULL
-	      && thread_stopped (thread))
-	    stopped = thread;
-
-	  if (first == NULL)
-	    first = thread;
-
-	  if (current == NULL && prev_general_thread == thread->id)
-	    current = thread;
-	}
-    });
-
-  /* The thread we end up choosing.  */
-  struct thread_info *thread;
-
-  /* Prefer a stopped thread.  If none is found, try the current
-     thread.  Otherwise, take the first thread in the process.  If
-     none is found, undo the effects of
-     target->prepare_to_access_memory() and return error.  */
-  if (stopped != NULL)
-    thread = stopped;
-  else if (current != NULL)
-    thread = current;
-  else if (first != NULL)
-    thread = first;
-  else
-    {
-      done_accessing_memory ();
-      return 1;
-    }
-
-  current_thread = thread;
-  cs.general_thread = ptid_of (thread);
-
-  return 0;
-}
-
-/* See target.h.  */
-
-void
-done_accessing_memory (void)
-{
-  client_state &cs = get_client_state ();
-
-  if (the_target->done_accessing_memory != NULL)
-    the_target->done_accessing_memory ();
-
-  /* Restore the previous selected thread.  */
-  cs.general_thread = prev_general_thread;
-  switch_to_thread (cs.general_thread);
-}
-
-int
-read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  int res;
-  res = (*the_target->read_memory) (memaddr, myaddr, len);
-  check_mem_read (memaddr, myaddr, len);
-  return res;
-}
-
-/* See target/target.h.  */
-
-int
-target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
-{
-  return read_inferior_memory (memaddr, myaddr, len);
-}
-
-/* See target/target.h.  */
-
-int
-target_read_uint32 (CORE_ADDR memaddr, uint32_t *result)
-{
-  return read_inferior_memory (memaddr, (gdb_byte *) result, sizeof (*result));
-}
-
-/* See target/target.h.  */
-
-int
-target_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
-		     ssize_t len)
-{
-  /* Make a copy of the data because check_mem_write may need to
-     update it.  */
-  gdb::byte_vector buffer (myaddr, myaddr + len);
-  check_mem_write (memaddr, buffer.data (), myaddr, len);
-  return (*the_target->write_memory) (memaddr, buffer.data (), len);
-}
-
-ptid_t
-mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
-	int connected_wait)
-{
-  ptid_t ret;
-
-  if (connected_wait)
-    server_waiting = 1;
-
-  ret = target_wait (ptid, ourstatus, options);
-
-  /* We don't expose _LOADED events to gdbserver core.  See the
-     `dlls_changed' global.  */
-  if (ourstatus->kind == TARGET_WAITKIND_LOADED)
-    ourstatus->kind = TARGET_WAITKIND_STOPPED;
-
-  /* If GDB is connected through TCP/serial, then GDBserver will most
-     probably be running on its own terminal/console, so it's nice to
-     print there why is GDBserver exiting.  If however, GDB is
-     connected through stdio, then there's no need to spam the GDB
-     console with this -- the user will already see the exit through
-     regular GDB output, in that same terminal.  */
-  if (!remote_connection_is_stdio ())
-    {
-      if (ourstatus->kind == TARGET_WAITKIND_EXITED)
-	fprintf (stderr,
-		 "\nChild exited with status %d\n", ourstatus->value.integer);
-      else if (ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
-	fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
-		 gdb_signal_to_host (ourstatus->value.sig),
-		 gdb_signal_to_name (ourstatus->value.sig));
-    }
-
-  if (connected_wait)
-    server_waiting = 0;
-
-  return ret;
-}
-
-/* See target/target.h.  */
-
-void
-target_stop_and_wait (ptid_t ptid)
-{
-  struct target_waitstatus status;
-  bool was_non_stop = non_stop;
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_stop;
-  resume_info.sig = GDB_SIGNAL_0;
-  (*the_target->resume) (&resume_info, 1);
-
-  non_stop = true;
-  mywait (ptid, &status, 0, 0);
-  non_stop = was_non_stop;
-}
-
-/* See target/target.h.  */
-
-ptid_t
-target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
-{
-  return (*the_target->wait) (ptid, status, options);
-}
-
-/* See target/target.h.  */
-
-void
-target_mourn_inferior (ptid_t ptid)
-{
-  (*the_target->mourn) (find_process_pid (ptid.pid ()));
-}
-
-/* See target/target.h.  */
-
-void
-target_continue_no_signal (ptid_t ptid)
-{
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_continue;
-  resume_info.sig = GDB_SIGNAL_0;
-  (*the_target->resume) (&resume_info, 1);
-}
-
-/* See target/target.h.  */
-
-void
-target_continue (ptid_t ptid, enum gdb_signal signal)
-{
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_continue;
-  resume_info.sig = gdb_signal_to_host (signal);
-  (*the_target->resume) (&resume_info, 1);
-}
-
-/* See target/target.h.  */
-
-int
-target_supports_multi_process (void)
-{
-  return (the_target->supports_multi_process != NULL ?
-	  (*the_target->supports_multi_process) () : 0);
-}
-
-int
-start_non_stop (int nonstop)
-{
-  if (the_target->start_non_stop == NULL)
-    {
-      if (nonstop)
-	return -1;
-      else
-	return 0;
-    }
-
-  return (*the_target->start_non_stop) (nonstop);
-}
-
-void
-set_target_ops (struct target_ops *target)
-{
-  the_target = XNEW (struct target_ops);
-  memcpy (the_target, target, sizeof (*the_target));
-}
-
-/* Convert pid to printable format.  */
-
-const char *
-target_pid_to_str (ptid_t ptid)
-{
-  static char buf[80];
-
-  if (ptid == minus_one_ptid)
-    xsnprintf (buf, sizeof (buf), "<all threads>");
-  else if (ptid == null_ptid)
-    xsnprintf (buf, sizeof (buf), "<null thread>");
-  else if (ptid.tid () != 0)
-    xsnprintf (buf, sizeof (buf), "Thread %d.0x%lx",
-	       ptid.pid (), ptid.tid ());
-  else if (ptid.lwp () != 0)
-    xsnprintf (buf, sizeof (buf), "LWP %d.%ld",
-	       ptid.pid (), ptid.lwp ());
-  else
-    xsnprintf (buf, sizeof (buf), "Process %d",
-	       ptid.pid ());
-
-  return buf;
-}
-
-int
-kill_inferior (process_info *proc)
-{
-  gdb_agent_about_to_close (proc->pid);
-
-  return (*the_target->kill) (proc);
-}
-
-/* Target can do hardware single step.  */
-
-int
-target_can_do_hardware_single_step (void)
-{
-  return 1;
-}
-
-/* Default implementation for breakpoint_kind_for_pc.
-
-   The default behavior for targets that don't implement breakpoint_kind_for_pc
-   is to use the size of a breakpoint as the kind.  */
-
-int
-default_breakpoint_kind_from_pc (CORE_ADDR *pcptr)
-{
-  int size = 0;
-
-  gdb_assert (the_target->sw_breakpoint_from_kind != NULL);
-
-  (*the_target->sw_breakpoint_from_kind) (0, &size);
-  return size;
-}
-
-/* Define it.  */
-
-target_terminal_state target_terminal::m_terminal_state
-  = target_terminal_state::is_ours;
-
-/* See target/target.h.  */
-
-void
-target_terminal::init ()
-{
-  /* Placeholder needed because of fork_inferior.  Not necessary on
-     GDBserver.  */
-}
-
-/* See target/target.h.  */
-
-void
-target_terminal::inferior ()
-{
-  /* Placeholder needed because of fork_inferior.  Not necessary on
-     GDBserver.  */
-}
-
-/* See target/target.h.  */
-
-void
-target_terminal::ours ()
-{
-  /* Placeholder needed because of fork_inferior.  Not necessary on
-     GDBserver.  */
-}
-
-/* See target/target.h.  */
-
-void
-target_terminal::ours_for_output (void)
-{
-  /* Placeholder.  */
-}
-
-/* See target/target.h.  */
-
-void
-target_terminal::info (const char *arg, int from_tty)
-{
-  /* Placeholder.  */
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/target.h ./gdb/gdbserver/target.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/target.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/target.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,733 +0,0 @@
-/* Target operations for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 GDBSERVER_TARGET_H
-#define GDBSERVER_TARGET_H
-
-#include <sys/types.h> /* for mode_t */
-#include "target/target.h"
-#include "target/resume.h"
-#include "target/wait.h"
-#include "target/waitstatus.h"
-#include "mem-break.h"
-#include "gdbsupport/btrace-common.h"
-#include <vector>
-
-struct emit_ops;
-struct buffer;
-struct process_info;
-
-/* This structure describes how to resume a particular thread (or all
-   threads) based on the client's request.  If thread is -1, then this
-   entry applies to all threads.  These are passed around as an
-   array.  */
-
-struct thread_resume
-{
-  ptid_t thread;
-
-  /* How to "resume".  */
-  enum resume_kind kind;
-
-  /* If non-zero, send this signal when we resume, or to stop the
-     thread.  If stopping a thread, and this is 0, the target should
-     stop the thread however it best decides to (e.g., SIGSTOP on
-     linux; SuspendThread on win32).  This is a host signal value (not
-     enum gdb_signal).  */
-  int sig;
-
-  /* Range to single step within.  Valid only iff KIND is resume_step.
-
-     Single-step once, and then continuing stepping as long as the
-     thread stops in this range.  (If the range is empty
-     [STEP_RANGE_START == STEP_RANGE_END], then this is a single-step
-     request.)  */
-  CORE_ADDR step_range_start;	/* Inclusive */
-  CORE_ADDR step_range_end;	/* Exclusive */
-};
-
-struct target_ops
-{
-  /* Start a new process.
-
-     PROGRAM is a path to the program to execute.
-     PROGRAM_ARGS is a standard NULL-terminated array of arguments,
-     to be passed to the inferior as ``argv'' (along with PROGRAM).
-
-     Returns the new PID on success, -1 on failure.  Registers the new
-     process with the process list.  */
-  int (*create_inferior) (const char *program,
-			  const std::vector<char *> &program_args);
-
-  /* Do additional setup after a new process is created, including
-     exec-wrapper completion.  */
-  void (*post_create_inferior) (void);
-
-  /* Attach to a running process.
-
-     PID is the process ID to attach to, specified by the user
-     or a higher layer.
-
-     Returns -1 if attaching is unsupported, 0 on success, and calls
-     error() otherwise.  */
-
-  int (*attach) (unsigned long pid);
-
-  /* Kill process PROC.  Return -1 on failure, and 0 on success.  */
-
-  int (*kill) (process_info *proc);
-
-  /* Detach from process PROC.  Return -1 on failure, and 0 on
-     success.  */
-
-  int (*detach) (process_info *proc);
-
-  /* The inferior process has died.  Do what is right.  */
-
-  void (*mourn) (struct process_info *proc);
-
-  /* Wait for process PID to exit.  */
-
-  void (*join) (int pid);
-
-  /* Return 1 iff the thread with process ID PID is alive.  */
-
-  int (*thread_alive) (ptid_t pid);
-
-  /* Resume the inferior process.  */
-
-  void (*resume) (struct thread_resume *resume_info, size_t n);
-
-  /* Wait for the inferior process or thread to change state.  Store
-     status through argument pointer STATUS.
-
-     PTID = -1 to wait for any pid to do something, PTID(pid,0,0) to
-     wait for any thread of process pid to do something.  Return ptid
-     of child, or -1 in case of error; store status through argument
-     pointer STATUS.  OPTIONS is a bit set of options defined as
-     TARGET_W* above.  If options contains TARGET_WNOHANG and there's
-     no child stop to report, return is
-     null_ptid/TARGET_WAITKIND_IGNORE.  */
-
-  ptid_t (*wait) (ptid_t ptid, struct target_waitstatus *status, int options);
-
-  /* Fetch registers from the inferior process.
-
-     If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO.  */
-
-  void (*fetch_registers) (struct regcache *regcache, int regno);
-
-  /* Store registers to the inferior process.
-
-     If REGNO is -1, store all registers; otherwise, store at least REGNO.  */
-
-  void (*store_registers) (struct regcache *regcache, int regno);
-
-  /* Prepare to read or write memory from the inferior process.
-     Targets use this to do what is necessary to get the state of the
-     inferior such that it is possible to access memory.
-
-     This should generally only be called from client facing routines,
-     such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint
-     insertion routine.
-
-     Like `read_memory' and `write_memory' below, returns 0 on success
-     and errno on failure.  */
-
-  int (*prepare_to_access_memory) (void);
-
-  /* Undo the effects of prepare_to_access_memory.  */
-
-  void (*done_accessing_memory) (void);
-
-  /* Read memory from the inferior process.  This should generally be
-     called through read_inferior_memory, which handles breakpoint shadowing.
-
-     Read LEN bytes at MEMADDR into a buffer at MYADDR.
-  
-     Returns 0 on success and errno on failure.  */
-
-  int (*read_memory) (CORE_ADDR memaddr, unsigned char *myaddr, int len);
-
-  /* Write memory to the inferior process.  This should generally be
-     called through target_write_memory, which handles breakpoint shadowing.
-
-     Write LEN bytes from the buffer at MYADDR to MEMADDR.
-
-     Returns 0 on success and errno on failure.  */
-
-  int (*write_memory) (CORE_ADDR memaddr, const unsigned char *myaddr,
-		       int len);
-
-  /* Query GDB for the values of any symbols we're interested in.
-     This function is called whenever we receive a "qSymbols::"
-     query, which corresponds to every time more symbols (might)
-     become available.  NULL if we aren't interested in any
-     symbols.  */
-
-  void (*look_up_symbols) (void);
-
-  /* Send an interrupt request to the inferior process,
-     however is appropriate.  */
-
-  void (*request_interrupt) (void);
-
-  /* Read auxiliary vector data from the inferior process.
-
-     Read LEN bytes at OFFSET into a buffer at MYADDR.  */
-
-  int (*read_auxv) (CORE_ADDR offset, unsigned char *myaddr,
-		    unsigned int len);
-
-  /* Returns true if GDB Z breakpoint type TYPE is supported, false
-     otherwise.  The type is coded as follows:
-       '0' - software-breakpoint
-       '1' - hardware-breakpoint
-       '2' - write watchpoint
-       '3' - read watchpoint
-       '4' - access watchpoint
-  */
-  int (*supports_z_point_type) (char z_type);
-
-  /* Insert and remove a break or watchpoint.
-     Returns 0 on success, -1 on failure and 1 on unsupported.  */
-
-  int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr,
-		       int size, struct raw_breakpoint *bp);
-  int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr,
-		       int size, struct raw_breakpoint *bp);
-
-  /* Returns 1 if the target stopped because it executed a software
-     breakpoint instruction, 0 otherwise.  */
-  int (*stopped_by_sw_breakpoint) (void);
-
-  /* Returns true if the target knows whether a trap was caused by a
-     SW breakpoint triggering.  */
-  int (*supports_stopped_by_sw_breakpoint) (void);
-
-  /* Returns 1 if the target stopped for a hardware breakpoint.  */
-  int (*stopped_by_hw_breakpoint) (void);
-
-  /* Returns true if the target knows whether a trap was caused by a
-     HW breakpoint triggering.  */
-  int (*supports_stopped_by_hw_breakpoint) (void);
-
-  /* Returns true if the target can do hardware single step.  */
-  int (*supports_hardware_single_step) (void);
-
-  /* Returns 1 if target was stopped due to a watchpoint hit, 0 otherwise.  */
-
-  int (*stopped_by_watchpoint) (void);
-
-  /* Returns the address associated with the watchpoint that hit, if any;
-     returns 0 otherwise.  */
-
-  CORE_ADDR (*stopped_data_address) (void);
-
-  /* Reports the text, data offsets of the executable.  This is
-     needed for uclinux where the executable is relocated during load
-     time.  */
-
-  int (*read_offsets) (CORE_ADDR *text, CORE_ADDR *data);
-
-  /* Fetch the address associated with a specific thread local storage
-     area, determined by the specified THREAD, OFFSET, and LOAD_MODULE.
-     Stores it in *ADDRESS and returns zero on success; otherwise returns
-     an error code.  A return value of -1 means this system does not
-     support the operation.  */
-
-  int (*get_tls_address) (struct thread_info *thread, CORE_ADDR offset,
-			  CORE_ADDR load_module, CORE_ADDR *address);
-
-  /* Fill BUF with an hostio error packet representing the last hostio
-     error.  */
-  void (*hostio_last_error) (char *buf);
-
-  /* Read/Write OS data using qXfer packets.  */
-  int (*qxfer_osdata) (const char *annex, unsigned char *readbuf,
-		       unsigned const char *writebuf, CORE_ADDR offset,
-		       int len);
-
-  /* Read/Write extra signal info.  */
-  int (*qxfer_siginfo) (const char *annex, unsigned char *readbuf,
-			unsigned const char *writebuf,
-			CORE_ADDR offset, int len);
-
-  int (*supports_non_stop) (void);
-
-  /* Enables async target events.  Returns the previous enable
-     state.  */
-  int (*async) (int enable);
-
-  /* Switch to non-stop (1) or all-stop (0) mode.  Return 0 on
-     success, -1 otherwise.  */
-  int (*start_non_stop) (int);
-
-  /* Returns true if the target supports multi-process debugging.  */
-  int (*supports_multi_process) (void);
-
-  /* Returns true if fork events are supported.  */
-  int (*supports_fork_events) (void);
-
-  /* Returns true if vfork events are supported.  */
-  int (*supports_vfork_events) (void);
-
-  /* Returns true if exec events are supported.  */
-  int (*supports_exec_events) (void);
-
-  /* Allows target to re-initialize connection-specific settings.  */
-  void (*handle_new_gdb_connection) (void);
-
-  /* If not NULL, target-specific routine to process monitor command.
-     Returns 1 if handled, or 0 to perform default processing.  */
-  int (*handle_monitor_command) (char *);
-
-  /* Returns the core given a thread, or -1 if not known.  */
-  int (*core_of_thread) (ptid_t);
-
-  /* Read loadmaps.  Read LEN bytes at OFFSET into a buffer at MYADDR.  */
-  int (*read_loadmap) (const char *annex, CORE_ADDR offset,
-		       unsigned char *myaddr, unsigned int len);
-
-  /* Target specific qSupported support.  FEATURES is an array of
-     features with COUNT elements.  */
-  void (*process_qsupported) (char **features, int count);
-
-  /* Return 1 if the target supports tracepoints, 0 (or leave the
-     callback NULL) otherwise.  */
-  int (*supports_tracepoints) (void);
-
-  /* Read PC from REGCACHE.  */
-  CORE_ADDR (*read_pc) (struct regcache *regcache);
-
-  /* Write PC to REGCACHE.  */
-  void (*write_pc) (struct regcache *regcache, CORE_ADDR pc);
-
-  /* Return true if THREAD is known to be stopped now.  */
-  int (*thread_stopped) (struct thread_info *thread);
-
-  /* Read Thread Information Block address.  */
-  int (*get_tib_address) (ptid_t ptid, CORE_ADDR *address);
-
-  /* Pause all threads.  If FREEZE, arrange for any resume attempt to
-     be ignored until an unpause_all call unfreezes threads again.
-     There can be nested calls to pause_all, so a freeze counter
-     should be maintained.  */
-  void (*pause_all) (int freeze);
-
-  /* Unpause all threads.  Threads that hadn't been resumed by the
-     client should be left stopped.  Basically a pause/unpause call
-     pair should not end up resuming threads that were stopped before
-     the pause call.  */
-  void (*unpause_all) (int unfreeze);
-
-  /* Stabilize all threads.  That is, force them out of jump pads.  */
-  void (*stabilize_threads) (void);
-
-  /* Install a fast tracepoint jump pad.  TPOINT is the address of the
-     tracepoint internal object as used by the IPA agent.  TPADDR is
-     the address of tracepoint.  COLLECTOR is address of the function
-     the jump pad redirects to.  LOCKADDR is the address of the jump
-     pad lock object.  ORIG_SIZE is the size in bytes of the
-     instruction at TPADDR.  JUMP_ENTRY points to the address of the
-     jump pad entry, and on return holds the address past the end of
-     the created jump pad.  If a trampoline is created by the function,
-     then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of
-     the trampoline, else they remain unchanged.  JJUMP_PAD_INSN is a
-     buffer containing a copy of the instruction at TPADDR.
-     ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that
-     return the address range where the instruction at TPADDR was relocated
-     to.  If an error occurs, the ERR may be used to pass on an error
-     message.  */
-  int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr,
-					   CORE_ADDR collector,
-					   CORE_ADDR lockaddr,
-					   ULONGEST orig_size,
-					   CORE_ADDR *jump_entry,
-					   CORE_ADDR *trampoline,
-					   ULONGEST *trampoline_size,
-					   unsigned char *jjump_pad_insn,
-					   ULONGEST *jjump_pad_insn_size,
-					   CORE_ADDR *adjusted_insn_addr,
-					   CORE_ADDR *adjusted_insn_addr_end,
-					   char *err);
-
-  /* Return the bytecode operations vector for the current inferior.
-     Returns NULL if bytecode compilation is not supported.  */
-  struct emit_ops *(*emit_ops) (void);
-
-  /* Returns true if the target supports disabling randomization.  */
-  int (*supports_disable_randomization) (void);
-
-  /* Return the minimum length of an instruction that can be safely overwritten
-     for use as a fast tracepoint.  */
-  int (*get_min_fast_tracepoint_insn_len) (void);
-
-  /* Read solib info on SVR4 platforms.  */
-  int (*qxfer_libraries_svr4) (const char *annex, unsigned char *readbuf,
-			       unsigned const char *writebuf,
-			       CORE_ADDR offset, int len);
-
-  /* Return true if target supports debugging agent.  */
-  int (*supports_agent) (void);
-
-  /* Enable branch tracing for PTID based on CONF and allocate a branch trace
-     target information struct for reading and for disabling branch trace.  */
-  struct btrace_target_info *(*enable_btrace)
-    (ptid_t ptid, const struct btrace_config *conf);
-
-  /* Disable branch tracing.
-     Returns zero on success, non-zero otherwise.  */
-  int (*disable_btrace) (struct btrace_target_info *tinfo);
-
-  /* Read branch trace data into buffer.
-     Return 0 on success; print an error message into BUFFER and return -1,
-     otherwise.  */
-  int (*read_btrace) (struct btrace_target_info *, struct buffer *,
-		      enum btrace_read_type type);
-
-  /* Read the branch trace configuration into BUFFER.
-     Return 0 on success; print an error message into BUFFER and return -1
-     otherwise.  */
-  int (*read_btrace_conf) (const struct btrace_target_info *, struct buffer *);
-
-  /* Return true if target supports range stepping.  */
-  int (*supports_range_stepping) (void);
-
-  /* Return the full absolute name of the executable file that was
-     run to create the process PID.  If the executable file cannot
-     be determined, NULL is returned.  Otherwise, a pointer to a
-     character string containing the pathname is returned.  This
-     string should be copied into a buffer by the client if the string
-     will not be immediately used, or if it must persist.  */
-  char *(*pid_to_exec_file) (int pid);
-
-  /* Multiple-filesystem-aware open.  Like open(2), but operating in
-     the filesystem as it appears to process PID.  Systems where all
-     processes share a common filesystem should set this to NULL.
-     If NULL, the caller should fall back to open(2).  */
-  int (*multifs_open) (int pid, const char *filename,
-		       int flags, mode_t mode);
-
-  /* Multiple-filesystem-aware unlink.  Like unlink(2), but operates
-     in the filesystem as it appears to process PID.  Systems where
-     all processes share a common filesystem should set this to NULL.
-     If NULL, the caller should fall back to unlink(2).  */
-  int (*multifs_unlink) (int pid, const char *filename);
-
-  /* Multiple-filesystem-aware readlink.  Like readlink(2), but
-     operating in the filesystem as it appears to process PID.
-     Systems where all processes share a common filesystem should
-     set this to NULL.  If NULL, the caller should fall back to
-     readlink(2).  */
-  ssize_t (*multifs_readlink) (int pid, const char *filename,
-			       char *buf, size_t bufsiz);
-
-  /* Return the breakpoint kind for this target based on PC.  The PCPTR is
-     adjusted to the real memory location in case a flag (e.g., the Thumb bit on
-     ARM) was present in the PC.  */
-  int (*breakpoint_kind_from_pc) (CORE_ADDR *pcptr);
-
-  /* Return the software breakpoint from KIND.  KIND can have target
-     specific meaning like the Z0 kind parameter.
-     SIZE is set to the software breakpoint's length in memory.  */
-  const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size);
-
-  /* Return the thread's name, or NULL if the target is unable to determine it.
-     The returned value must not be freed by the caller.  */
-  const char *(*thread_name) (ptid_t thread);
-
-  /* Return the breakpoint kind for this target based on the current
-     processor state (e.g. the current instruction mode on ARM) and the
-     PC.  The PCPTR is adjusted to the real memory location in case a flag
-     (e.g., the Thumb bit on ARM) is present in the PC.  */
-  int (*breakpoint_kind_from_current_state) (CORE_ADDR *pcptr);
-
-  /* Returns true if the target can software single step.  */
-  int (*supports_software_single_step) (void);
-
-  /* Return 1 if the target supports catch syscall, 0 (or leave the
-     callback NULL) otherwise.  */
-  int (*supports_catch_syscall) (void);
-
-  /* Return tdesc index for IPA.  */
-  int (*get_ipa_tdesc_idx) (void);
-
-  /* Thread ID to (numeric) thread handle: Return true on success and
-     false for failure.  Return pointer to thread handle via HANDLE
-     and the handle's length via HANDLE_LEN.  */
-  bool (*thread_handle) (ptid_t ptid, gdb_byte **handle, int *handle_len);
-};
-
-extern struct target_ops *the_target;
-
-void set_target_ops (struct target_ops *);
-
-#define create_inferior(program, program_args)	\
-  (*the_target->create_inferior) (program, program_args)
-
-#define target_post_create_inferior()			 \
-  do							 \
-    {							 \
-      if (the_target->post_create_inferior != NULL)	 \
-	(*the_target->post_create_inferior) ();		 \
-    } while (0)
-
-#define myattach(pid) \
-  (*the_target->attach) (pid)
-
-int kill_inferior (process_info *proc);
-
-#define target_supports_fork_events() \
-  (the_target->supports_fork_events ? \
-   (*the_target->supports_fork_events) () : 0)
-
-#define target_supports_vfork_events() \
-  (the_target->supports_vfork_events ? \
-   (*the_target->supports_vfork_events) () : 0)
-
-#define target_supports_exec_events() \
-  (the_target->supports_exec_events ? \
-   (*the_target->supports_exec_events) () : 0)
-
-#define target_handle_new_gdb_connection()		 \
-  do							 \
-    {							 \
-      if (the_target->handle_new_gdb_connection != NULL) \
-	(*the_target->handle_new_gdb_connection) ();	 \
-    } while (0)
-
-#define detach_inferior(proc) \
-  (*the_target->detach) (proc)
-
-#define mythread_alive(pid) \
-  (*the_target->thread_alive) (pid)
-
-#define fetch_inferior_registers(regcache, regno)	\
-  (*the_target->fetch_registers) (regcache, regno)
-
-#define store_inferior_registers(regcache, regno) \
-  (*the_target->store_registers) (regcache, regno)
-
-#define join_inferior(pid) \
-  (*the_target->join) (pid)
-
-#define target_supports_non_stop() \
-  (the_target->supports_non_stop ? (*the_target->supports_non_stop ) () : 0)
-
-#define target_async(enable) \
-  (the_target->async ? (*the_target->async) (enable) : 0)
-
-#define target_process_qsupported(features, count)	\
-  do							\
-    {							\
-      if (the_target->process_qsupported)		\
-	the_target->process_qsupported (features, count); \
-    } while (0)
-
-#define target_supports_catch_syscall()              	\
-  (the_target->supports_catch_syscall ?			\
-   (*the_target->supports_catch_syscall) () : 0)
-
-#define target_get_ipa_tdesc_idx()			\
-  (the_target->get_ipa_tdesc_idx			\
-   ? (*the_target->get_ipa_tdesc_idx) () : 0)
-
-#define target_supports_tracepoints()			\
-  (the_target->supports_tracepoints			\
-   ? (*the_target->supports_tracepoints) () : 0)
-
-#define target_supports_fast_tracepoints()		\
-  (the_target->install_fast_tracepoint_jump_pad != NULL)
-
-#define target_get_min_fast_tracepoint_insn_len()	\
-  (the_target->get_min_fast_tracepoint_insn_len		\
-   ? (*the_target->get_min_fast_tracepoint_insn_len) () : 0)
-
-#define thread_stopped(thread) \
-  (*the_target->thread_stopped) (thread)
-
-#define pause_all(freeze)			\
-  do						\
-    {						\
-      if (the_target->pause_all)		\
-	(*the_target->pause_all) (freeze);	\
-    } while (0)
-
-#define unpause_all(unfreeze)			\
-  do						\
-    {						\
-      if (the_target->unpause_all)		\
-	(*the_target->unpause_all) (unfreeze);	\
-    } while (0)
-
-#define stabilize_threads()			\
-  do						\
-    {						\
-      if (the_target->stabilize_threads)     	\
-	(*the_target->stabilize_threads) ();  	\
-    } while (0)
-
-#define install_fast_tracepoint_jump_pad(tpoint, tpaddr,		\
-					 collector, lockaddr,		\
-					 orig_size,			\
-					 jump_entry,			\
-					 trampoline, trampoline_size,	\
-					 jjump_pad_insn,		\
-					 jjump_pad_insn_size,		\
-					 adjusted_insn_addr,		\
-					 adjusted_insn_addr_end,	\
-					 err)				\
-  (*the_target->install_fast_tracepoint_jump_pad) (tpoint, tpaddr,	\
-						   collector,lockaddr,	\
-						   orig_size, jump_entry, \
-						   trampoline,		\
-						   trampoline_size,	\
-						   jjump_pad_insn,	\
-						   jjump_pad_insn_size, \
-						   adjusted_insn_addr,	\
-						   adjusted_insn_addr_end, \
-						   err)
-
-#define target_emit_ops() \
-  (the_target->emit_ops ? (*the_target->emit_ops) () : NULL)
-
-#define target_supports_disable_randomization() \
-  (the_target->supports_disable_randomization ? \
-   (*the_target->supports_disable_randomization) () : 0)
-
-#define target_supports_agent() \
-  (the_target->supports_agent ? \
-   (*the_target->supports_agent) () : 0)
-
-static inline struct btrace_target_info *
-target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
-{
-  if (the_target->enable_btrace == nullptr)
-    error (_("Target does not support branch tracing."));
-
-  return (*the_target->enable_btrace) (ptid, conf);
-}
-
-static inline int
-target_disable_btrace (struct btrace_target_info *tinfo)
-{
-  if (the_target->disable_btrace == nullptr)
-    error (_("Target does not support branch tracing."));
-
-  return (*the_target->disable_btrace) (tinfo);
-}
-
-static inline int
-target_read_btrace (struct btrace_target_info *tinfo,
-		    struct buffer *buffer,
-		    enum btrace_read_type type)
-{
-  if (the_target->read_btrace == nullptr)
-    error (_("Target does not support branch tracing."));
-
-  return (*the_target->read_btrace) (tinfo, buffer, type);
-}
-
-static inline int
-target_read_btrace_conf (struct btrace_target_info *tinfo,
-			 struct buffer *buffer)
-{
-  if (the_target->read_btrace_conf == nullptr)
-    error (_("Target does not support branch tracing."));
-
-  return (*the_target->read_btrace_conf) (tinfo, buffer);
-}
-
-#define target_supports_range_stepping() \
-  (the_target->supports_range_stepping ? \
-   (*the_target->supports_range_stepping) () : 0)
-
-#define target_supports_stopped_by_sw_breakpoint() \
-  (the_target->supports_stopped_by_sw_breakpoint ? \
-   (*the_target->supports_stopped_by_sw_breakpoint) () : 0)
-
-#define target_stopped_by_sw_breakpoint() \
-  (the_target->stopped_by_sw_breakpoint ? \
-   (*the_target->stopped_by_sw_breakpoint) () : 0)
-
-#define target_supports_stopped_by_hw_breakpoint() \
-  (the_target->supports_stopped_by_hw_breakpoint ? \
-   (*the_target->supports_stopped_by_hw_breakpoint) () : 0)
-
-#define target_supports_hardware_single_step() \
-  (the_target->supports_hardware_single_step ? \
-   (*the_target->supports_hardware_single_step) () : 0)
-
-#define target_stopped_by_hw_breakpoint() \
-  (the_target->stopped_by_hw_breakpoint ? \
-   (*the_target->stopped_by_hw_breakpoint) () : 0)
-
-#define target_breakpoint_kind_from_pc(pcptr) \
-  (the_target->breakpoint_kind_from_pc \
-   ? (*the_target->breakpoint_kind_from_pc) (pcptr) \
-   : default_breakpoint_kind_from_pc (pcptr))
-
-#define target_breakpoint_kind_from_current_state(pcptr) \
-  (the_target->breakpoint_kind_from_current_state \
-   ? (*the_target->breakpoint_kind_from_current_state) (pcptr) \
-   : target_breakpoint_kind_from_pc (pcptr))
-
-#define target_supports_software_single_step() \
-  (the_target->supports_software_single_step ? \
-   (*the_target->supports_software_single_step) () : 0)
-
-/* Start non-stop mode, returns 0 on success, -1 on failure.   */
-
-int start_non_stop (int nonstop);
-
-ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
-	       int connected_wait);
-
-/* Prepare to read or write memory from the inferior process.  See the
-   corresponding target_ops methods for more details.  */
-
-int prepare_to_access_memory (void);
-void done_accessing_memory (void);
-
-#define target_core_of_thread(ptid)		\
-  (the_target->core_of_thread ? (*the_target->core_of_thread) (ptid) \
-   : -1)
-
-#define target_thread_name(ptid)                                \
-  (the_target->thread_name ? (*the_target->thread_name) (ptid)  \
-   : NULL)
-
-#define target_thread_handle(ptid, handle, handle_len) \
-   (the_target->thread_handle ? (*the_target->thread_handle) \
-                                  (ptid, handle, handle_len) \
-   : false)
-
-int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len);
-
-int set_desired_thread ();
-
-const char *target_pid_to_str (ptid_t);
-
-int target_can_do_hardware_single_step (void);
-
-int default_breakpoint_kind_from_pc (CORE_ADDR *pcptr);
-
-#endif /* GDBSERVER_TARGET_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tdesc.c ./gdb/gdbserver/tdesc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tdesc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/tdesc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,204 +0,0 @@
-/* Copyright (C) 2012-2020 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 "server.h"
-#include "tdesc.h"
-#include "regdef.h"
-
-#ifndef IN_PROCESS_AGENT
-
-target_desc::~target_desc ()
-{
-  xfree ((char *) arch);
-  xfree ((char *) osabi);
-}
-
-bool target_desc::operator== (const target_desc &other) const
-{
-  if (reg_defs != other.reg_defs)
-    return false;
-
-  /* Compare expedite_regs.  */
-  int i = 0;
-  for (; expedite_regs[i] != NULL; i++)
-    {
-      if (strcmp (expedite_regs[i], other.expedite_regs[i]) != 0)
-	return false;
-    }
-  if (other.expedite_regs[i] != NULL)
-    return false;
-
-  return true;
-}
-
-#endif
-
-void target_desc::accept (tdesc_element_visitor &v) const
-{
-#ifndef IN_PROCESS_AGENT
-  v.visit_pre (this);
-
-  for (const tdesc_feature_up &feature : features)
-    feature->accept (v);
-
-  v.visit_post (this);
-#endif
-}
-
-void
-init_target_desc (struct target_desc *tdesc,
-		  const char **expedite_regs)
-{
-  int offset = 0;
-
-  /* Go through all the features and populate reg_defs.  */
-  for (const tdesc_feature_up &feature : tdesc->features)
-    for (const tdesc_reg_up &treg : feature->registers)
-      {
-	int regnum = treg->target_regnum;
-
-	/* Register number will increase (possibly with gaps) or be zero.  */
-	gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ());
-
-	if (regnum != 0)
-	  tdesc->reg_defs.resize (regnum, reg (offset));
-
-	tdesc->reg_defs.emplace_back (treg->name.c_str (), offset,
-				      treg->bitsize);
-	offset += treg->bitsize;
-      }
-
-  tdesc->registers_size = offset / 8;
-
-  /* Make sure PBUFSIZ is large enough to hold a full register
-     packet.  */
-  gdb_assert (2 * tdesc->registers_size + 32 <= PBUFSIZ);
-
-#ifndef IN_PROCESS_AGENT
-  tdesc->expedite_regs = expedite_regs;
-#endif
-}
-
-struct target_desc *
-allocate_target_description (void)
-{
-  return new target_desc ();
-}
-
-#ifndef IN_PROCESS_AGENT
-
-static const struct target_desc default_description {};
-
-void
-copy_target_description (struct target_desc *dest,
-			 const struct target_desc *src)
-{
-  dest->reg_defs = src->reg_defs;
-  dest->expedite_regs = src->expedite_regs;
-  dest->registers_size = src->registers_size;
-  dest->xmltarget = src->xmltarget;
-}
-
-const struct target_desc *
-current_target_desc (void)
-{
-  if (current_thread == NULL)
-    return &default_description;
-
-  return current_process ()->tdesc;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-const char *
-tdesc_architecture_name (const struct target_desc *target_desc)
-{
-  return target_desc->arch;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-set_tdesc_architecture (struct target_desc *target_desc,
-			const char *name)
-{
-  target_desc->arch = xstrdup (name);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-const char *
-tdesc_osabi_name (const struct target_desc *target_desc)
-{
-  return target_desc->osabi;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-set_tdesc_osabi (struct target_desc *target_desc, const char *name)
-{
-  target_desc->osabi = xstrdup (name);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-const char *
-tdesc_get_features_xml (const target_desc *tdesc)
-{
-  /* Either .xmltarget or .features is not NULL.  */
-  gdb_assert (tdesc->xmltarget != NULL
-	      || (!tdesc->features.empty ()
-		  && tdesc->arch != NULL));
-
-  if (tdesc->xmltarget == NULL)
-    {
-      std::string buffer ("@");
-      print_xml_feature v (&buffer);
-      tdesc->accept (v);
-      tdesc->xmltarget = xstrdup (buffer.c_str ());
-    }
-
-  return tdesc->xmltarget;
-}
-#endif
-
-/* See gdbsupport/tdesc.h.  */
-
-struct tdesc_feature *
-tdesc_create_feature (struct target_desc *tdesc, const char *name)
-{
-  struct tdesc_feature *new_feature = new tdesc_feature (name);
-  tdesc->features.emplace_back (new_feature);
-  return new_feature;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-bool
-tdesc_contains_feature (const target_desc *tdesc, const std::string &feature)
-{
-  gdb_assert (tdesc != nullptr);
-
-  for (const tdesc_feature_up &f : tdesc->features)
-    {
-      if (f->name == feature)
-	return true;
-    }
-
-  return false;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tdesc.h ./gdb/gdbserver/tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,101 +0,0 @@
-/* Target description definitions for remote server for GDB.
-   Copyright (C) 2012-2020 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 GDBSERVER_TDESC_H
-#define GDBSERVER_TDESC_H
-
-#include "gdbsupport/tdesc.h"
-
-#include "regdef.h"
-#include <vector>
-
-/* A target description.  Inherit from tdesc_feature so that target_desc
-   can be used as tdesc_feature.  */
-
-struct target_desc : tdesc_element
-{
-  /* A vector of elements of register definitions that
-     describe the inferior's register set.  */
-  std::vector<struct reg> reg_defs;
-
-  /* The register cache size, in bytes.  */
-  int registers_size;
-
-  /* XML features in this target description.  */
-  std::vector<tdesc_feature_up> features;
-
-#ifndef IN_PROCESS_AGENT
-  /* An array of register names.  These are the "expedite" registers:
-     registers whose values are sent along with stop replies.  */
-  const char **expedite_regs = NULL;
-
-  /* Defines what to return when looking for the "target.xml" file in
-     response to qXfer:features:read.  Its contents can either be
-     verbatim XML code (prefixed with a '@') or else the name of the
-     actual XML file to be used in place of "target.xml".
-
-     If NULL then its content will be generated by parsing the target
-     description into xml.  */
-  mutable const char *xmltarget = NULL;
-
-  /* The value of <architecture> element in the XML, replying GDB.  */
-  const char *arch = NULL;
-
-  /* The value of <osabi> element in the XML, replying GDB.  */
-  const char *osabi = NULL;
-
-public:
-  target_desc ()
-    : registers_size (0)
-  {}
-
-  ~target_desc ();
-
-  bool operator== (const target_desc &other) const;
-
-  bool operator!= (const target_desc &other) const
-  {
-    return !(*this == other);
-  }
-#endif
-
-  void accept (tdesc_element_visitor &v) const override;
-};
-
-/* Copy target description SRC to DEST.  */
-
-void copy_target_description (struct target_desc *dest,
-			      const struct target_desc *src);
-
-/* Initialize TDESC, and then set its expedite_regs field to
-   EXPEDITE_REGS.  */
-
-void init_target_desc (struct target_desc *tdesc,
-		       const char **expedite_regs);
-
-/* Return the current inferior's target description.  Never returns
-   NULL.  */
-
-const struct target_desc *current_target_desc (void);
-
-/* Return true if TDESC contains the feature described by string FEATURE.
-   Return false otherwise.  */
-bool tdesc_contains_feature (const target_desc *tdesc,
-			     const std::string &feature);
-
-#endif /* GDBSERVER_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/thread-db.c ./gdb/gdbserver/thread-db.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/thread-db.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/thread-db.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,910 +0,0 @@
-/* Thread management interface, for the remote server for GDB.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-
-   Contributed by MontaVista Software.
-
-   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 "server.h"
-
-#include "linux-low.h"
-
-#include "debug.h"
-#include "gdb_proc_service.h"
-#include "nat/gdb_thread_db.h"
-#include "gdbsupport/gdb_vecs.h"
-#include "nat/linux-procfs.h"
-#include "gdbsupport/scoped_restore.h"
-
-#ifndef USE_LIBTHREAD_DB_DIRECTLY
-#include <dlfcn.h>
-#endif
-#include <limits.h>
-#include <ctype.h>
-
-struct thread_db
-{
-  /* Structure that identifies the child process for the
-     <proc_service.h> interface.  */
-  struct ps_prochandle proc_handle;
-
-  /* Connection to the libthread_db library.  */
-  td_thragent_t *thread_agent;
-
-  /* If this flag has been set, we've already asked GDB for all
-     symbols we might need; assume symbol cache misses are
-     failures.  */
-  int all_symbols_looked_up;
-
-#ifndef USE_LIBTHREAD_DB_DIRECTLY
-  /* Handle of the libthread_db from dlopen.  */
-  void *handle;
-#endif
-
-  /* Addresses of libthread_db functions.  */
-  td_ta_new_ftype *td_ta_new_p;
-  td_ta_map_lwp2thr_ftype *td_ta_map_lwp2thr_p;
-  td_thr_get_info_ftype *td_thr_get_info_p;
-  td_ta_thr_iter_ftype *td_ta_thr_iter_p;
-  td_thr_tls_get_addr_ftype *td_thr_tls_get_addr_p;
-  td_thr_tlsbase_ftype *td_thr_tlsbase_p;
-  td_symbol_list_ftype *td_symbol_list_p;
-};
-
-static char *libthread_db_search_path;
-
-static int find_one_thread (ptid_t);
-static int find_new_threads_callback (const td_thrhandle_t *th_p, void *data);
-
-static const char *
-thread_db_err_str (td_err_e err)
-{
-  static char buf[64];
-
-  switch (err)
-    {
-    case TD_OK:
-      return "generic 'call succeeded'";
-    case TD_ERR:
-      return "generic error";
-    case TD_NOTHR:
-      return "no thread to satisfy query";
-    case TD_NOSV:
-      return "no sync handle to satisfy query";
-    case TD_NOLWP:
-      return "no LWP to satisfy query";
-    case TD_BADPH:
-      return "invalid process handle";
-    case TD_BADTH:
-      return "invalid thread handle";
-    case TD_BADSH:
-      return "invalid synchronization handle";
-    case TD_BADTA:
-      return "invalid thread agent";
-    case TD_BADKEY:
-      return "invalid key";
-    case TD_NOMSG:
-      return "no event message for getmsg";
-    case TD_NOFPREGS:
-      return "FPU register set not available";
-    case TD_NOLIBTHREAD:
-      return "application not linked with libthread";
-    case TD_NOEVENT:
-      return "requested event is not supported";
-    case TD_NOCAPAB:
-      return "capability not available";
-    case TD_DBERR:
-      return "debugger service failed";
-    case TD_NOAPLIC:
-      return "operation not applicable to";
-    case TD_NOTSD:
-      return "no thread-specific data for this thread";
-    case TD_MALLOC:
-      return "malloc failed";
-    case TD_PARTIALREG:
-      return "only part of register set was written/read";
-    case TD_NOXREGS:
-      return "X register set not available for this thread";
-#ifdef HAVE_TD_VERSION
-    case TD_VERSION:
-      return "version mismatch between libthread_db and libpthread";
-#endif
-    default:
-      xsnprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
-      return buf;
-    }
-}
-
-#if 0
-static char *
-thread_db_state_str (td_thr_state_e state)
-{
-  static char buf[64];
-
-  switch (state)
-    {
-    case TD_THR_STOPPED:
-      return "stopped by debugger";
-    case TD_THR_RUN:
-      return "runnable";
-    case TD_THR_ACTIVE:
-      return "active";
-    case TD_THR_ZOMBIE:
-      return "zombie";
-    case TD_THR_SLEEP:
-      return "sleeping";
-    case TD_THR_STOPPED_ASLEEP:
-      return "stopped by debugger AND blocked";
-    default:
-      xsnprintf (buf, sizeof (buf), "unknown thread_db state %d", state);
-      return buf;
-    }
-}
-#endif
-
-/* Get thread info about PTID, accessing memory via the current
-   thread.  */
-
-static int
-find_one_thread (ptid_t ptid)
-{
-  td_thrhandle_t th;
-  td_thrinfo_t ti;
-  td_err_e err;
-  struct lwp_info *lwp;
-  struct thread_db *thread_db = current_process ()->priv->thread_db;
-  int lwpid = ptid.lwp ();
-
-  thread_info *thread = find_thread_ptid (ptid);
-  lwp = get_thread_lwp (thread);
-  if (lwp->thread_known)
-    return 1;
-
-  /* Get information about this thread.  */
-  err = thread_db->td_ta_map_lwp2thr_p (thread_db->thread_agent, lwpid, &th);
-  if (err != TD_OK)
-    error ("Cannot get thread handle for LWP %d: %s",
-	   lwpid, thread_db_err_str (err));
-
-  err = thread_db->td_thr_get_info_p (&th, &ti);
-  if (err != TD_OK)
-    error ("Cannot get thread info for LWP %d: %s",
-	   lwpid, thread_db_err_str (err));
-
-  if (debug_threads)
-    debug_printf ("Found thread %ld (LWP %d)\n",
-		  (unsigned long) ti.ti_tid, ti.ti_lid);
-
-  if (lwpid != ti.ti_lid)
-    {
-      warning ("PID mismatch!  Expected %ld, got %ld",
-	       (long) lwpid, (long) ti.ti_lid);
-      return 0;
-    }
-
-  /* If the new thread ID is zero, a final thread ID will be available
-     later.  Do not enable thread debugging yet.  */
-  if (ti.ti_tid == 0)
-    return 0;
-
-  lwp->thread_known = 1;
-  lwp->th = th;
-  lwp->thread_handle = ti.ti_tid;
-
-  return 1;
-}
-
-/* Attach a thread.  Return true on success.  */
-
-static int
-attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p)
-{
-  struct process_info *proc = current_process ();
-  int pid = pid_of (proc);
-  ptid_t ptid = ptid_t (pid, ti_p->ti_lid, 0);
-  struct lwp_info *lwp;
-  int err;
-
-  if (debug_threads)
-    debug_printf ("Attaching to thread %ld (LWP %d)\n",
-		  (unsigned long) ti_p->ti_tid, ti_p->ti_lid);
-  err = linux_attach_lwp (ptid);
-  if (err != 0)
-    {
-      std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err);
-
-      warning ("Could not attach to thread %ld (LWP %d): %s",
-	       (unsigned long) ti_p->ti_tid, ti_p->ti_lid, reason.c_str ());
-
-      return 0;
-    }
-
-  lwp = find_lwp_pid (ptid);
-  gdb_assert (lwp != NULL);
-  lwp->thread_known = 1;
-  lwp->th = *th_p;
-  lwp->thread_handle = ti_p->ti_tid;
-
-  return 1;
-}
-
-/* Attach thread if we haven't seen it yet.
-   Increment *COUNTER if we have attached a new thread.
-   Return false on failure.  */
-
-static int
-maybe_attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p,
-		     int *counter)
-{
-  struct lwp_info *lwp;
-
-  lwp = find_lwp_pid (ptid_t (ti_p->ti_lid));
-  if (lwp != NULL)
-    return 1;
-
-  if (!attach_thread (th_p, ti_p))
-    return 0;
-
-  if (counter != NULL)
-    *counter += 1;
-
-  return 1;
-}
-
-static int
-find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
-{
-  td_thrinfo_t ti;
-  td_err_e err;
-  struct thread_db *thread_db = current_process ()->priv->thread_db;
-
-  err = thread_db->td_thr_get_info_p (th_p, &ti);
-  if (err != TD_OK)
-    error ("Cannot get thread info: %s", thread_db_err_str (err));
-
-  if (ti.ti_lid == -1)
-    {
-      /* A thread with kernel thread ID -1 is either a thread that
-	 exited and was joined, or a thread that is being created but
-	 hasn't started yet, and that is reusing the tcb/stack of a
-	 thread that previously exited and was joined.  (glibc marks
-	 terminated and joined threads with kernel thread ID -1.  See
-	 glibc PR17707.  */
-      if (debug_threads)
-	debug_printf ("thread_db: skipping exited and "
-		      "joined thread (0x%lx)\n",
-		      (unsigned long) ti.ti_tid);
-      return 0;
-    }
-
-  /* Check for zombies.  */
-  if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
-    return 0;
-
-  if (!maybe_attach_thread (th_p, &ti, (int *) data))
-    {
-      /* Terminate iteration early: we might be looking at stale data in
-	 the inferior.  The thread_db_find_new_threads will retry.  */
-      return 1;
-    }
-
-  return 0;
-}
-
-static void
-thread_db_find_new_threads (void)
-{
-  td_err_e err;
-  ptid_t ptid = current_ptid;
-  struct thread_db *thread_db = current_process ()->priv->thread_db;
-  int loop, iteration;
-
-  /* This function is only called when we first initialize thread_db.
-     First locate the initial thread.  If it is not ready for
-     debugging yet, then stop.  */
-  if (find_one_thread (ptid) == 0)
-    return;
-
-  /* Require 4 successive iterations which do not find any new threads.
-     The 4 is a heuristic: there is an inherent race here, and I have
-     seen that 2 iterations in a row are not always sufficient to
-     "capture" all threads.  */
-  for (loop = 0, iteration = 0; loop < 4; ++loop, ++iteration)
-    {
-      int new_thread_count = 0;
-
-      /* Iterate over all user-space threads to discover new threads.  */
-      err = thread_db->td_ta_thr_iter_p (thread_db->thread_agent,
-					 find_new_threads_callback,
-					 &new_thread_count,
-					 TD_THR_ANY_STATE,
-					 TD_THR_LOWEST_PRIORITY,
-					 TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
-      if (debug_threads)
-	debug_printf ("Found %d threads in iteration %d.\n",
-		      new_thread_count, iteration);
-
-      if (new_thread_count != 0)
-	{
-	  /* Found new threads.  Restart iteration from beginning.  */
-	  loop = -1;
-	}
-    }
-  if (err != TD_OK)
-    error ("Cannot find new threads: %s", thread_db_err_str (err));
-}
-
-/* Cache all future symbols that thread_db might request.  We can not
-   request symbols at arbitrary states in the remote protocol, only
-   when the client tells us that new symbols are available.  So when
-   we load the thread library, make sure to check the entire list.  */
-
-static void
-thread_db_look_up_symbols (void)
-{
-  struct thread_db *thread_db = current_process ()->priv->thread_db;
-  const char **sym_list;
-  CORE_ADDR unused;
-
-  for (sym_list = thread_db->td_symbol_list_p (); *sym_list; sym_list++)
-    look_up_one_symbol (*sym_list, &unused, 1);
-
-  /* We're not interested in any other libraries loaded after this
-     point, only in symbols in libpthread.so.  */
-  thread_db->all_symbols_looked_up = 1;
-}
-
-int
-thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp)
-{
-  struct thread_db *thread_db = current_process ()->priv->thread_db;
-  int may_ask_gdb = !thread_db->all_symbols_looked_up;
-
-  /* If we've passed the call to thread_db_look_up_symbols, then
-     anything not in the cache must not exist; we're not interested
-     in any libraries loaded after that point, only in symbols in
-     libpthread.so.  It might not be an appropriate time to look
-     up a symbol, e.g. while we're trying to fetch registers.  */
-  return look_up_one_symbol (name, addrp, may_ask_gdb);
-}
-
-int
-thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset,
-			   CORE_ADDR load_module, CORE_ADDR *address)
-{
-  psaddr_t addr;
-  td_err_e err;
-  struct lwp_info *lwp;
-  struct thread_info *saved_thread;
-  struct process_info *proc;
-  struct thread_db *thread_db;
-
-  proc = get_thread_process (thread);
-  thread_db = proc->priv->thread_db;
-
-  /* If the thread layer is not (yet) initialized, fail.  */
-  if (thread_db == NULL || !thread_db->all_symbols_looked_up)
-    return TD_ERR;
-
-  /* If td_thr_tls_get_addr is missing rather do not expect td_thr_tlsbase
-     could work.  */
-  if (thread_db->td_thr_tls_get_addr_p == NULL
-      || (load_module == 0 && thread_db->td_thr_tlsbase_p == NULL))
-    return -1;
-
-  lwp = get_thread_lwp (thread);
-  if (!lwp->thread_known)
-    find_one_thread (thread->id);
-  if (!lwp->thread_known)
-    return TD_NOTHR;
-
-  saved_thread = current_thread;
-  current_thread = thread;
-
-  if (load_module != 0)
-    {
-      /* Note the cast through uintptr_t: this interface only works if
-	 a target address fits in a psaddr_t, which is a host pointer.
-	 So a 32-bit debugger can not access 64-bit TLS through this.  */
-      err = thread_db->td_thr_tls_get_addr_p (&lwp->th,
-					     (psaddr_t) (uintptr_t) load_module,
-					      offset, &addr);
-    }
-  else
-    {
-      /* This code path handles the case of -static -pthread executables:
-	 https://sourceware.org/ml/libc-help/2014-03/msg00024.html
-	 For older GNU libc r_debug.r_map is NULL.  For GNU libc after
-	 PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL.
-	 The constant number 1 depends on GNU __libc_setup_tls
-	 initialization of l_tls_modid to 1.  */
-      err = thread_db->td_thr_tlsbase_p (&lwp->th, 1, &addr);
-      addr = (char *) addr + offset;
-    }
-
-  current_thread = saved_thread;
-  if (err == TD_OK)
-    {
-      *address = (CORE_ADDR) (uintptr_t) addr;
-      return 0;
-    }
-  else
-    return err;
-}
-
-/* See linux-low.h.  */
-
-bool
-thread_db_thread_handle (ptid_t ptid, gdb_byte **handle, int *handle_len)
-{
-  struct thread_db *thread_db;
-  struct lwp_info *lwp;
-  thread_info *thread = find_thread_ptid (ptid);
-
-  if (thread == NULL)
-    return false;
-
-  thread_db = get_thread_process (thread)->priv->thread_db;
-
-  if (thread_db == NULL)
-    return false;
-
-  lwp = get_thread_lwp (thread);
-
-  if (!lwp->thread_known && !find_one_thread (thread->id))
-    return false;
-
-  gdb_assert (lwp->thread_known);
-
-  *handle = (gdb_byte *) &lwp->thread_handle;
-  *handle_len = sizeof (lwp->thread_handle);
-  return true;
-}
-
-#ifdef USE_LIBTHREAD_DB_DIRECTLY
-
-static int
-thread_db_load_search (void)
-{
-  td_err_e err;
-  struct thread_db *tdb;
-  struct process_info *proc = current_process ();
-
-  gdb_assert (proc->priv->thread_db == NULL);
-
-  tdb = XCNEW (struct thread_db);
-  proc->priv->thread_db = tdb;
-
-  tdb->td_ta_new_p = &td_ta_new;
-
-  /* Attempt to open a connection to the thread library.  */
-  err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent);
-  if (err != TD_OK)
-    {
-      if (debug_threads)
-	debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err));
-      free (tdb);
-      proc->priv->thread_db = NULL;
-      return 0;
-    }
-
-  tdb->td_ta_map_lwp2thr_p = &td_ta_map_lwp2thr;
-  tdb->td_thr_get_info_p = &td_thr_get_info;
-  tdb->td_ta_thr_iter_p = &td_ta_thr_iter;
-  tdb->td_symbol_list_p = &td_symbol_list;
-
-  /* These are not essential.  */
-  tdb->td_thr_tls_get_addr_p = &td_thr_tls_get_addr;
-  tdb->td_thr_tlsbase_p = &td_thr_tlsbase;
-
-  return 1;
-}
-
-#else
-
-static int
-try_thread_db_load_1 (void *handle)
-{
-  td_err_e err;
-  struct thread_db *tdb;
-  struct process_info *proc = current_process ();
-
-  gdb_assert (proc->priv->thread_db == NULL);
-
-  tdb = XCNEW (struct thread_db);
-  proc->priv->thread_db = tdb;
-
-  tdb->handle = handle;
-
-  /* Initialize pointers to the dynamic library functions we will use.
-     Essential functions first.  */
-
-#define CHK(required, a)					\
-  do								\
-    {								\
-      if ((a) == NULL)						\
-	{							\
-	  if (debug_threads)					\
-	    debug_printf ("dlsym: %s\n", dlerror ());		\
-	  if (required)						\
-	    {							\
-	      free (tdb);					\
-	      proc->priv->thread_db = NULL;			\
-	      return 0;						\
-	    }							\
-	}							\
-    }								\
-  while (0)
-
-#define TDB_DLSYM(tdb, func) \
-  tdb->func ## _p = (func ## _ftype *) dlsym (tdb->handle, #func)
-
-  CHK (1, TDB_DLSYM (tdb, td_ta_new));
-
-  /* Attempt to open a connection to the thread library.  */
-  err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent);
-  if (err != TD_OK)
-    {
-      if (debug_threads)
-	debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err));
-      free (tdb);
-      proc->priv->thread_db = NULL;
-      return 0;
-    }
-
-  CHK (1, TDB_DLSYM (tdb, td_ta_map_lwp2thr));
-  CHK (1, TDB_DLSYM (tdb, td_thr_get_info));
-  CHK (1, TDB_DLSYM (tdb, td_ta_thr_iter));
-  CHK (1, TDB_DLSYM (tdb, td_symbol_list));
-
-  /* These are not essential.  */
-  CHK (0, TDB_DLSYM (tdb, td_thr_tls_get_addr));
-  CHK (0, TDB_DLSYM (tdb, td_thr_tlsbase));
-
-#undef CHK
-#undef TDB_DLSYM
-
-  return 1;
-}
-
-#ifdef HAVE_DLADDR
-
-/* Lookup a library in which given symbol resides.
-   Note: this is looking in the GDBSERVER process, not in the inferior.
-   Returns library name, or NULL.  */
-
-static const char *
-dladdr_to_soname (const void *addr)
-{
-  Dl_info info;
-
-  if (dladdr (addr, &info) != 0)
-    return info.dli_fname;
-  return NULL;
-}
-
-#endif
-
-static int
-try_thread_db_load (const char *library)
-{
-  void *handle;
-
-  if (debug_threads)
-    debug_printf ("Trying host libthread_db library: %s.\n",
-		  library);
-  handle = dlopen (library, RTLD_NOW);
-  if (handle == NULL)
-    {
-      if (debug_threads)
-	debug_printf ("dlopen failed: %s.\n", dlerror ());
-      return 0;
-    }
-
-#ifdef HAVE_DLADDR
-  if (debug_threads && strchr (library, '/') == NULL)
-    {
-      void *td_init;
-
-      td_init = dlsym (handle, "td_init");
-      if (td_init != NULL)
-	{
-	  const char *const libpath = dladdr_to_soname (td_init);
-
-	  if (libpath != NULL)
-	    debug_printf ("Host %s resolved to: %s.\n", library, libpath);
-	}
-    }
-#endif
-
-  if (try_thread_db_load_1 (handle))
-    return 1;
-
-  /* This library "refused" to work on current inferior.  */
-  dlclose (handle);
-  return 0;
-}
-
-/* Handle $sdir in libthread-db-search-path.
-   Look for libthread_db in the system dirs, or wherever a plain
-   dlopen(file_without_path) will look.
-   The result is true for success.  */
-
-static int
-try_thread_db_load_from_sdir (void)
-{
-  return try_thread_db_load (LIBTHREAD_DB_SO);
-}
-
-/* Try to load libthread_db from directory DIR of length DIR_LEN.
-   The result is true for success.  */
-
-static int
-try_thread_db_load_from_dir (const char *dir, size_t dir_len)
-{
-  char path[PATH_MAX];
-
-  if (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1 > sizeof (path))
-    {
-      char *cp = (char *) xmalloc (dir_len + 1);
-
-      memcpy (cp, dir, dir_len);
-      cp[dir_len] = '\0';
-      warning (_("libthread-db-search-path component too long,"
-		 " ignored: %s."), cp);
-      free (cp);
-      return 0;
-    }
-
-  memcpy (path, dir, dir_len);
-  path[dir_len] = '/';
-  strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
-  return try_thread_db_load (path);
-}
-
-/* Search libthread_db_search_path for libthread_db which "agrees"
-   to work on current inferior.
-   The result is true for success.  */
-
-static int
-thread_db_load_search (void)
-{
-  int rc = 0;
-
-  if (libthread_db_search_path == NULL)
-    libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
-
-  std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
-    = dirnames_to_char_ptr_vec (libthread_db_search_path);
-
-  for (const gdb::unique_xmalloc_ptr<char> &this_dir_up : dir_vec)
-    {
-      char *this_dir = this_dir_up.get ();
-      const int pdir_len = sizeof ("$pdir") - 1;
-      size_t this_dir_len;
-
-      this_dir_len = strlen (this_dir);
-
-      if (strncmp (this_dir, "$pdir", pdir_len) == 0
-	  && (this_dir[pdir_len] == '\0'
-	      || this_dir[pdir_len] == '/'))
-	{
-	  /* We don't maintain a list of loaded libraries so we don't know
-	     where libpthread lives.  We *could* fetch the info, but we don't
-	     do that yet.  Ignore it.  */
-	}
-      else if (strcmp (this_dir, "$sdir") == 0)
-	{
-	  if (try_thread_db_load_from_sdir ())
-	    {
-	      rc = 1;
-	      break;
-	    }
-	}
-      else
-	{
-	  if (try_thread_db_load_from_dir (this_dir, this_dir_len))
-	    {
-	      rc = 1;
-	      break;
-	    }
-	}
-    }
-
-  if (debug_threads)
-    debug_printf ("thread_db_load_search returning %d\n", rc);
-  return rc;
-}
-
-#endif  /* USE_LIBTHREAD_DB_DIRECTLY */
-
-int
-thread_db_init (void)
-{
-  struct process_info *proc = current_process ();
-
-  /* FIXME drow/2004-10-16: This is the "overall process ID", which
-     GNU/Linux calls tgid, "thread group ID".  When we support
-     attaching to threads, the original thread may not be the correct
-     thread.  We would have to get the process ID from /proc for NPTL.
-
-     This isn't the only place in gdbserver that assumes that the first
-     process in the list is the thread group leader.  */
-
-  if (thread_db_load_search ())
-    {
-      /* It's best to avoid td_ta_thr_iter if possible.  That walks
-	 data structures in the inferior's address space that may be
-	 corrupted, or, if the target is running, the list may change
-	 while we walk it.  In the latter case, it's possible that a
-	 thread exits just at the exact time that causes GDBserver to
-	 get stuck in an infinite loop.  As the kernel supports clone
-	 events and /proc/PID/task/ exists, then we already know about
-	 all threads in the process.  When we need info out of
-	 thread_db on a given thread (e.g., for TLS), we'll use
-	 find_one_thread then.  That uses thread_db entry points that
-	 do not walk libpthread's thread list, so should be safe, as
-	 well as more efficient.  */
-      if (!linux_proc_task_list_dir_exists (pid_of (proc)))
-	thread_db_find_new_threads ();
-      thread_db_look_up_symbols ();
-      return 1;
-    }
-
-  return 0;
-}
-
-static void
-switch_to_process (struct process_info *proc)
-{
-  int pid = pid_of (proc);
-
-  current_thread = find_any_thread_of_pid (pid);
-}
-
-/* Disconnect from libthread_db and free resources.  */
-
-static void
-disable_thread_event_reporting (struct process_info *proc)
-{
-  struct thread_db *thread_db = proc->priv->thread_db;
-  if (thread_db)
-    {
-      td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta,
-				       td_thr_events_t *event);
-
-#ifndef USE_LIBTHREAD_DB_DIRECTLY
-      td_ta_clear_event_p
-	= (td_ta_clear_event_ftype *) dlsym (thread_db->handle,
-					     "td_ta_clear_event");
-#else
-      td_ta_clear_event_p = &td_ta_clear_event;
-#endif
-
-      if (td_ta_clear_event_p != NULL)
-	{
-	  struct thread_info *saved_thread = current_thread;
-	  td_thr_events_t events;
-
-	  switch_to_process (proc);
-
-	  /* Set the process wide mask saying we aren't interested
-	     in any events anymore.  */
-	  td_event_fillset (&events);
-	  (*td_ta_clear_event_p) (thread_db->thread_agent, &events);
-
-	  current_thread = saved_thread;
-	}
-    }
-}
-
-void
-thread_db_detach (struct process_info *proc)
-{
-  struct thread_db *thread_db = proc->priv->thread_db;
-
-  if (thread_db)
-    {
-      disable_thread_event_reporting (proc);
-    }
-}
-
-/* Disconnect from libthread_db and free resources.  */
-
-void
-thread_db_mourn (struct process_info *proc)
-{
-  struct thread_db *thread_db = proc->priv->thread_db;
-  if (thread_db)
-    {
-      td_ta_delete_ftype *td_ta_delete_p;
-
-#ifndef USE_LIBTHREAD_DB_DIRECTLY
-      td_ta_delete_p = (td_ta_delete_ftype *) dlsym (thread_db->handle, "td_ta_delete");
-#else
-      td_ta_delete_p = &td_ta_delete;
-#endif
-
-      if (td_ta_delete_p != NULL)
-	(*td_ta_delete_p) (thread_db->thread_agent);
-
-#ifndef USE_LIBTHREAD_DB_DIRECTLY
-      dlclose (thread_db->handle);
-#endif  /* USE_LIBTHREAD_DB_DIRECTLY  */
-
-      free (thread_db);
-      proc->priv->thread_db = NULL;
-    }
-}
-
-/* Handle "set libthread-db-search-path" monitor command and return 1.
-   For any other command, return 0.  */
-
-int
-thread_db_handle_monitor_command (char *mon)
-{
-  const char *cmd = "set libthread-db-search-path";
-  size_t cmd_len = strlen (cmd);
-
-  if (strncmp (mon, cmd, cmd_len) == 0
-      && (mon[cmd_len] == '\0'
-	  || mon[cmd_len] == ' '))
-    {
-      const char *cp = mon + cmd_len;
-
-      if (libthread_db_search_path != NULL)
-	free (libthread_db_search_path);
-
-      /* Skip leading space (if any).  */
-      while (isspace (*cp))
-	++cp;
-
-      if (*cp == '\0')
-	cp = LIBTHREAD_DB_SEARCH_PATH;
-      libthread_db_search_path = xstrdup (cp);
-
-      monitor_output ("libthread-db-search-path set to `");
-      monitor_output (libthread_db_search_path);
-      monitor_output ("'\n");
-      return 1;
-    }
-
-  /* Tell server.c to perform default processing.  */
-  return 0;
-}
-
-/* See linux-low.h.  */
-
-void
-thread_db_notice_clone (struct thread_info *parent_thr, ptid_t child_ptid)
-{
-  process_info *parent_proc = get_thread_process (parent_thr);
-  struct thread_db *thread_db = parent_proc->priv->thread_db;
-
-  /* If the thread layer isn't initialized, return.  It may just
-     be that the program uses clone, but does not use libthread_db.  */
-  if (thread_db == NULL || !thread_db->all_symbols_looked_up)
-    return;
-
-  /* find_one_thread calls into libthread_db which accesses memory via
-     the current thread.  Temporarily switch to a thread we know is
-     stopped.  */
-  scoped_restore restore_current_thread
-    = make_scoped_restore (&current_thread, parent_thr);
-
-  if (!find_one_thread (child_ptid))
-    warning ("Cannot find thread after clone.");
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tracepoint.c ./gdb/gdbserver/tracepoint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tracepoint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/tracepoint.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,7453 +0,0 @@
-/* Tracepoint code for remote server for GDB.
-   Copyright (C) 2009-2020 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 "server.h"
-#include "tracepoint.h"
-#include "gdbthread.h"
-#include "gdbsupport/rsp-low.h"
-
-#include <ctype.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <chrono>
-#include <inttypes.h>
-#include "ax.h"
-#include "tdesc.h"
-
-#define IPA_SYM_STRUCT_NAME ipa_sym_addresses
-#include "gdbsupport/agent.h"
-
-#define DEFAULT_TRACE_BUFFER_SIZE 5242880 /* 5*1024*1024 */
-
-/* This file is built for both GDBserver, and the in-process
-   agent (IPA), a shared library that includes a tracing agent that is
-   loaded by the inferior to support fast tracepoints.  Fast
-   tracepoints (or more accurately, jump based tracepoints) are
-   implemented by patching the tracepoint location with a jump into a
-   small trampoline function whose job is to save the register state,
-   call the in-process tracing agent, and then execute the original
-   instruction that was under the tracepoint jump (possibly adjusted,
-   if PC-relative, or some such).
-
-   The current synchronization design is pull based.  That means,
-   GDBserver does most of the work, by peeking/poking at the inferior
-   agent's memory directly for downloading tracepoint and associated
-   objects, and for uploading trace frames.  Whenever the IPA needs
-   something from GDBserver (trace buffer is full, tracing stopped for
-   some reason, etc.) the IPA calls a corresponding hook function
-   where GDBserver has placed a breakpoint.
-
-   Each of the agents has its own trace buffer.  When browsing the
-   trace frames built from slow and fast tracepoints from GDB (tfind
-   mode), there's no guarantee the user is seeing the trace frames in
-   strict chronological creation order, although, GDBserver tries to
-   keep the order relatively reasonable, by syncing the trace buffers
-   at appropriate times.
-
-*/
-
-#ifdef IN_PROCESS_AGENT
-
-static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
-
-static void
-trace_vdebug (const char *fmt, ...)
-{
-  char buf[1024];
-  va_list ap;
-
-  va_start (ap, fmt);
-  vsprintf (buf, fmt, ap);
-  fprintf (stderr, PROG "/tracepoint: %s\n", buf);
-  va_end (ap);
-}
-
-#define trace_debug_1(level, fmt, args...)	\
-  do {						\
-    if (level <= debug_threads)		\
-      trace_vdebug ((fmt), ##args);		\
-  } while (0)
-
-#else
-
-#define trace_debug_1(level, fmt, args...)	\
-  do {						\
-    if (level <= debug_threads)			\
-      {						\
-	debug_printf ((fmt), ##args);		\
-	debug_printf ("\n");			\
-      }						\
-  } while (0)
-
-#endif
-
-#define trace_debug(FMT, args...)		\
-  trace_debug_1 (1, FMT, ##args)
-
-/* Prefix exported symbols, for good citizenship.  All the symbols
-   that need exporting are defined in this module.  Note that all
-   these symbols must be tagged with IP_AGENT_EXPORT_*.  */
-#ifdef IN_PROCESS_AGENT
-# define gdb_tp_heap_buffer IPA_SYM_EXPORTED_NAME (gdb_tp_heap_buffer)
-# define gdb_jump_pad_buffer IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer)
-# define gdb_jump_pad_buffer_end IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer_end)
-# define gdb_trampoline_buffer IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer)
-# define gdb_trampoline_buffer_end IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_end)
-# define gdb_trampoline_buffer_error IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_error)
-# define collecting IPA_SYM_EXPORTED_NAME (collecting)
-# define gdb_collect_ptr IPA_SYM_EXPORTED_NAME (gdb_collect_ptr)
-# define stop_tracing IPA_SYM_EXPORTED_NAME (stop_tracing)
-# define flush_trace_buffer IPA_SYM_EXPORTED_NAME (flush_trace_buffer)
-# define about_to_request_buffer_space IPA_SYM_EXPORTED_NAME (about_to_request_buffer_space)
-# define trace_buffer_is_full IPA_SYM_EXPORTED_NAME (trace_buffer_is_full)
-# define stopping_tracepoint IPA_SYM_EXPORTED_NAME (stopping_tracepoint)
-# define expr_eval_result IPA_SYM_EXPORTED_NAME (expr_eval_result)
-# define error_tracepoint IPA_SYM_EXPORTED_NAME (error_tracepoint)
-# define tracepoints IPA_SYM_EXPORTED_NAME (tracepoints)
-# define tracing IPA_SYM_EXPORTED_NAME (tracing)
-# define trace_buffer_ctrl IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl)
-# define trace_buffer_ctrl_curr IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl_curr)
-# define trace_buffer_lo IPA_SYM_EXPORTED_NAME (trace_buffer_lo)
-# define trace_buffer_hi IPA_SYM_EXPORTED_NAME (trace_buffer_hi)
-# define traceframe_read_count IPA_SYM_EXPORTED_NAME (traceframe_read_count)
-# define traceframe_write_count IPA_SYM_EXPORTED_NAME (traceframe_write_count)
-# define traceframes_created IPA_SYM_EXPORTED_NAME (traceframes_created)
-# define trace_state_variables IPA_SYM_EXPORTED_NAME (trace_state_variables)
-# define get_raw_reg_ptr IPA_SYM_EXPORTED_NAME (get_raw_reg_ptr)
-# define get_trace_state_variable_value_ptr \
-  IPA_SYM_EXPORTED_NAME (get_trace_state_variable_value_ptr)
-# define set_trace_state_variable_value_ptr \
-  IPA_SYM_EXPORTED_NAME (set_trace_state_variable_value_ptr)
-# define ust_loaded IPA_SYM_EXPORTED_NAME (ust_loaded)
-# define helper_thread_id IPA_SYM_EXPORTED_NAME (helper_thread_id)
-# define cmd_buf IPA_SYM_EXPORTED_NAME (cmd_buf)
-# define ipa_tdesc_idx IPA_SYM_EXPORTED_NAME (ipa_tdesc_idx)
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-/* Addresses of in-process agent's symbols GDBserver cares about.  */
-
-struct ipa_sym_addresses
-{
-  CORE_ADDR addr_gdb_tp_heap_buffer;
-  CORE_ADDR addr_gdb_jump_pad_buffer;
-  CORE_ADDR addr_gdb_jump_pad_buffer_end;
-  CORE_ADDR addr_gdb_trampoline_buffer;
-  CORE_ADDR addr_gdb_trampoline_buffer_end;
-  CORE_ADDR addr_gdb_trampoline_buffer_error;
-  CORE_ADDR addr_collecting;
-  CORE_ADDR addr_gdb_collect_ptr;
-  CORE_ADDR addr_stop_tracing;
-  CORE_ADDR addr_flush_trace_buffer;
-  CORE_ADDR addr_about_to_request_buffer_space;
-  CORE_ADDR addr_trace_buffer_is_full;
-  CORE_ADDR addr_stopping_tracepoint;
-  CORE_ADDR addr_expr_eval_result;
-  CORE_ADDR addr_error_tracepoint;
-  CORE_ADDR addr_tracepoints;
-  CORE_ADDR addr_tracing;
-  CORE_ADDR addr_trace_buffer_ctrl;
-  CORE_ADDR addr_trace_buffer_ctrl_curr;
-  CORE_ADDR addr_trace_buffer_lo;
-  CORE_ADDR addr_trace_buffer_hi;
-  CORE_ADDR addr_traceframe_read_count;
-  CORE_ADDR addr_traceframe_write_count;
-  CORE_ADDR addr_traceframes_created;
-  CORE_ADDR addr_trace_state_variables;
-  CORE_ADDR addr_get_raw_reg_ptr;
-  CORE_ADDR addr_get_trace_state_variable_value_ptr;
-  CORE_ADDR addr_set_trace_state_variable_value_ptr;
-  CORE_ADDR addr_ust_loaded;
-  CORE_ADDR addr_ipa_tdesc_idx;
-};
-
-static struct
-{
-  const char *name;
-  int offset;
-} symbol_list[] = {
-  IPA_SYM(gdb_tp_heap_buffer),
-  IPA_SYM(gdb_jump_pad_buffer),
-  IPA_SYM(gdb_jump_pad_buffer_end),
-  IPA_SYM(gdb_trampoline_buffer),
-  IPA_SYM(gdb_trampoline_buffer_end),
-  IPA_SYM(gdb_trampoline_buffer_error),
-  IPA_SYM(collecting),
-  IPA_SYM(gdb_collect_ptr),
-  IPA_SYM(stop_tracing),
-  IPA_SYM(flush_trace_buffer),
-  IPA_SYM(about_to_request_buffer_space),
-  IPA_SYM(trace_buffer_is_full),
-  IPA_SYM(stopping_tracepoint),
-  IPA_SYM(expr_eval_result),
-  IPA_SYM(error_tracepoint),
-  IPA_SYM(tracepoints),
-  IPA_SYM(tracing),
-  IPA_SYM(trace_buffer_ctrl),
-  IPA_SYM(trace_buffer_ctrl_curr),
-  IPA_SYM(trace_buffer_lo),
-  IPA_SYM(trace_buffer_hi),
-  IPA_SYM(traceframe_read_count),
-  IPA_SYM(traceframe_write_count),
-  IPA_SYM(traceframes_created),
-  IPA_SYM(trace_state_variables),
-  IPA_SYM(get_raw_reg_ptr),
-  IPA_SYM(get_trace_state_variable_value_ptr),
-  IPA_SYM(set_trace_state_variable_value_ptr),
-  IPA_SYM(ust_loaded),
-  IPA_SYM(ipa_tdesc_idx),
-};
-
-static struct ipa_sym_addresses ipa_sym_addrs;
-
-static int read_inferior_integer (CORE_ADDR symaddr, int *val);
-
-/* Returns true if both the in-process agent library and the static
-   tracepoints libraries are loaded in the inferior, and agent has
-   capability on static tracepoints.  */
-
-static int
-in_process_agent_supports_ust (void)
-{
-  int loaded = 0;
-
-  if (!agent_loaded_p ())
-    {
-      warning ("In-process agent not loaded");
-      return 0;
-    }
-
-  if (agent_capability_check (AGENT_CAPA_STATIC_TRACE))
-    {
-      /* Agent understands static tracepoint, then check whether UST is in
-	 fact loaded in the inferior.  */
-      if (read_inferior_integer (ipa_sym_addrs.addr_ust_loaded, &loaded))
-	{
-	  warning ("Error reading ust_loaded in lib");
-	  return 0;
-	}
-
-      return loaded;
-    }
-  else
-    return 0;
-}
-
-static void
-write_e_ipa_not_loaded (char *buffer)
-{
-  sprintf (buffer,
-	   "E.In-process agent library not loaded in process.  "
-	   "Fast and static tracepoints unavailable.");
-}
-
-/* Write an error to BUFFER indicating that UST isn't loaded in the
-   inferior.  */
-
-static void
-write_e_ust_not_loaded (char *buffer)
-{
-#ifdef HAVE_UST
-  sprintf (buffer,
-	   "E.UST library not loaded in process.  "
-	   "Static tracepoints unavailable.");
-#else
-  sprintf (buffer, "E.GDBserver was built without static tracepoints support");
-#endif
-}
-
-/* If the in-process agent library isn't loaded in the inferior, write
-   an error to BUFFER, and return 1.  Otherwise, return 0.  */
-
-static int
-maybe_write_ipa_not_loaded (char *buffer)
-{
-  if (!agent_loaded_p ())
-    {
-      write_e_ipa_not_loaded (buffer);
-      return 1;
-    }
-  return 0;
-}
-
-/* If the in-process agent library and the ust (static tracepoints)
-   library aren't loaded in the inferior, write an error to BUFFER,
-   and return 1.  Otherwise, return 0.  */
-
-static int
-maybe_write_ipa_ust_not_loaded (char *buffer)
-{
-  if (!agent_loaded_p ())
-    {
-      write_e_ipa_not_loaded (buffer);
-      return 1;
-    }
-  else if (!in_process_agent_supports_ust ())
-    {
-      write_e_ust_not_loaded (buffer);
-      return 1;
-    }
-  return 0;
-}
-
-/* Cache all future symbols that the tracepoints module might request.
-   We can not request symbols at arbitrary states in the remote
-   protocol, only when the client tells us that new symbols are
-   available.  So when we load the in-process library, make sure to
-   check the entire list.  */
-
-void
-tracepoint_look_up_symbols (void)
-{
-  int i;
-
-  if (agent_loaded_p ())
-    return;
-
-  for (i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++)
-    {
-      CORE_ADDR *addrp =
-	(CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset);
-
-      if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0)
-	{
-	  if (debug_threads)
-	    debug_printf ("symbol `%s' not found\n", symbol_list[i].name);
-	  return;
-	}
-    }
-
-  agent_look_up_symbols (NULL);
-}
-
-#endif
-
-/* GDBserver places a breakpoint on the IPA's version (which is a nop)
-   of the "stop_tracing" function.  When this breakpoint is hit,
-   tracing stopped in the IPA for some reason.  E.g., due to
-   tracepoint reaching the pass count, hitting conditional expression
-   evaluation error, etc.
-
-   The IPA's trace buffer is never in circular tracing mode: instead,
-   GDBserver's is, and whenever the in-process buffer fills, it calls
-   "flush_trace_buffer", which triggers an internal breakpoint.
-   GDBserver reacts to this breakpoint by pulling the meanwhile
-   collected data.  Old frames discarding is always handled on the
-   GDBserver side.  */
-
-#ifdef IN_PROCESS_AGENT
-int
-read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  memcpy (myaddr, (void *) (uintptr_t) memaddr, len);
-  return 0;
-}
-
-/* Call this in the functions where GDBserver places a breakpoint, so
-   that the compiler doesn't try to be clever and skip calling the
-   function at all.  This is necessary, even if we tell the compiler
-   to not inline said functions.  */
-
-#if defined(__GNUC__)
-#  define UNKNOWN_SIDE_EFFECTS() asm ("")
-#else
-#  define UNKNOWN_SIDE_EFFECTS() do {} while (0)
-#endif
-
-IP_AGENT_EXPORT_FUNC void
-stop_tracing (void)
-{
-  /* GDBserver places breakpoint here.  */
-  UNKNOWN_SIDE_EFFECTS();
-}
-
-IP_AGENT_EXPORT_FUNC void
-flush_trace_buffer (void)
-{
-  /* GDBserver places breakpoint here.  */
-  UNKNOWN_SIDE_EFFECTS();
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-static int
-tracepoint_handler (CORE_ADDR address)
-{
-  trace_debug ("tracepoint_handler: tracepoint at 0x%s hit",
-	       paddress (address));
-  return 0;
-}
-
-/* Breakpoint at "stop_tracing" in the inferior lib.  */
-struct breakpoint *stop_tracing_bkpt;
-static int stop_tracing_handler (CORE_ADDR);
-
-/* Breakpoint at "flush_trace_buffer" in the inferior lib.  */
-struct breakpoint *flush_trace_buffer_bkpt;
-static int flush_trace_buffer_handler (CORE_ADDR);
-
-static void download_trace_state_variables (void);
-static void upload_fast_traceframes (void);
-
-static int run_inferior_command (char *cmd, int len);
-
-static int
-read_inferior_integer (CORE_ADDR symaddr, int *val)
-{
-  return read_inferior_memory (symaddr, (unsigned char *) val,
-			       sizeof (*val));
-}
-
-struct tracepoint;
-static int tracepoint_send_agent (struct tracepoint *tpoint);
-
-static int
-read_inferior_uinteger (CORE_ADDR symaddr, unsigned int *val)
-{
-  return read_inferior_memory (symaddr, (unsigned char *) val,
-			       sizeof (*val));
-}
-
-static int
-read_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR *val)
-{
-  void *pval = (void *) (uintptr_t) val;
-  int ret;
-
-  ret = read_inferior_memory (symaddr, (unsigned char *) &pval, sizeof (pval));
-  *val = (uintptr_t) pval;
-  return ret;
-}
-
-static int
-write_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR val)
-{
-  void *pval = (void *) (uintptr_t) val;
-  return target_write_memory (symaddr,
-				(unsigned char *) &pval, sizeof (pval));
-}
-
-static int
-write_inferior_integer (CORE_ADDR symaddr, int val)
-{
-  return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val));
-}
-
-static int
-write_inferior_int8 (CORE_ADDR symaddr, int8_t val)
-{
-  return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val));
-}
-
-static int
-write_inferior_uinteger (CORE_ADDR symaddr, unsigned int val)
-{
-  return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val));
-}
-
-static CORE_ADDR target_malloc (ULONGEST size);
-
-#define COPY_FIELD_TO_BUF(BUF, OBJ, FIELD)	\
-  do {							\
-    memcpy (BUF, &(OBJ)->FIELD, sizeof ((OBJ)->FIELD)); \
-    BUF += sizeof ((OBJ)->FIELD);			\
-  } while (0)
-
-#endif
-
-/* Base action.  Concrete actions inherit this.  */
-
-struct tracepoint_action
-{
-  char type;
-};
-
-/* An 'M' (collect memory) action.  */
-struct collect_memory_action
-{
-  struct tracepoint_action base;
-
-  ULONGEST addr;
-  ULONGEST len;
-  int32_t basereg;
-};
-
-/* An 'R' (collect registers) action.  */
-
-struct collect_registers_action
-{
-  struct tracepoint_action base;
-};
-
-/* An 'X' (evaluate expression) action.  */
-
-struct eval_expr_action
-{
-  struct tracepoint_action base;
-
-  struct agent_expr *expr;
-};
-
-/* An 'L' (collect static trace data) action.  */
-struct collect_static_trace_data_action
-{
-  struct tracepoint_action base;
-};
-
-#ifndef IN_PROCESS_AGENT
-static CORE_ADDR
-m_tracepoint_action_download (const struct tracepoint_action *action)
-{
-  CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_memory_action));
-
-  target_write_memory (ipa_action, (unsigned char *) action,
-			 sizeof (struct collect_memory_action));
-
-  return ipa_action;
-}
-static char *
-m_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
-{
-  struct collect_memory_action *maction
-    = (struct collect_memory_action *) action;
-
-  COPY_FIELD_TO_BUF (buffer, maction, addr);
-  COPY_FIELD_TO_BUF (buffer, maction, len);
-  COPY_FIELD_TO_BUF (buffer, maction, basereg);
-
-  return buffer;
-}
-
-static CORE_ADDR
-r_tracepoint_action_download (const struct tracepoint_action *action)
-{
-  CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_registers_action));
-
-  target_write_memory (ipa_action, (unsigned char *) action,
-			 sizeof (struct collect_registers_action));
-
-  return ipa_action;
-}
-
-static char *
-r_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
-{
-  return buffer;
-}
-
-static CORE_ADDR download_agent_expr (struct agent_expr *expr);
-
-static CORE_ADDR
-x_tracepoint_action_download (const struct tracepoint_action *action)
-{
-  CORE_ADDR ipa_action = target_malloc (sizeof (struct eval_expr_action));
-  CORE_ADDR expr;
-
-  target_write_memory (ipa_action, (unsigned char *) action,
-			 sizeof (struct eval_expr_action));
-  expr = download_agent_expr (((struct eval_expr_action *) action)->expr);
-  write_inferior_data_pointer (ipa_action
-			       + offsetof (struct eval_expr_action, expr),
-			       expr);
-
-  return ipa_action;
-}
-
-/* Copy agent expression AEXPR to buffer pointed by P.  If AEXPR is NULL,
-   copy 0 to P.  Return updated header of buffer.  */
-
-static char *
-agent_expr_send (char *p, const struct agent_expr *aexpr)
-{
-  /* Copy the length of condition first, and then copy its
-     content.  */
-  if (aexpr == NULL)
-    {
-      memset (p, 0, 4);
-      p += 4;
-    }
-  else
-    {
-      memcpy (p, &aexpr->length, 4);
-      p +=4;
-
-      memcpy (p, aexpr->bytes, aexpr->length);
-      p += aexpr->length;
-    }
-  return p;
-}
-
-static char *
-x_tracepoint_action_send ( char *buffer, const struct tracepoint_action *action)
-{
-  struct eval_expr_action *eaction = (struct eval_expr_action *) action;
-
-  return agent_expr_send (buffer, eaction->expr);
-}
-
-static CORE_ADDR
-l_tracepoint_action_download (const struct tracepoint_action *action)
-{
-  CORE_ADDR ipa_action
-    = target_malloc (sizeof (struct collect_static_trace_data_action));
-
-  target_write_memory (ipa_action, (unsigned char *) action,
-			 sizeof (struct collect_static_trace_data_action));
-
-  return ipa_action;
-}
-
-static char *
-l_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
-{
-  return buffer;
-}
-
-static char *
-tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
-{
-  switch (action->type)
-    {
-    case 'M':
-      return m_tracepoint_action_send (buffer, action);
-    case 'R':
-      return r_tracepoint_action_send (buffer, action);
-    case 'X':
-      return x_tracepoint_action_send (buffer, action);
-    case 'L':
-      return l_tracepoint_action_send (buffer, action);
-    }
-  error ("Unknown trace action '%c'.", action->type);
-}
-
-static CORE_ADDR
-tracepoint_action_download (const struct tracepoint_action *action)
-{
-  switch (action->type)
-    {
-    case 'M':
-      return m_tracepoint_action_download (action);
-    case 'R':
-      return r_tracepoint_action_download (action);
-    case 'X':
-      return x_tracepoint_action_download (action);
-    case 'L':
-      return l_tracepoint_action_download (action);
-    }
-  error ("Unknown trace action '%c'.", action->type);
-}
-#endif
-
-/* This structure describes a piece of the source-level definition of
-   the tracepoint.  The contents are not interpreted by the target,
-   but preserved verbatim for uploading upon reconnection.  */
-
-struct source_string
-{
-  /* The type of string, such as "cond" for a conditional.  */
-  char *type;
-
-  /* The source-level string itself.  For the sake of target
-     debugging, we store it in plaintext, even though it is always
-     transmitted in hex.  */
-  char *str;
-
-  /* Link to the next one in the list.  We link them in the order
-     received, in case some make up an ordered list of commands or
-     some such.  */
-  struct source_string *next;
-};
-
-enum tracepoint_type
-{
-  /* Trap based tracepoint.  */
-  trap_tracepoint,
-
-  /* A fast tracepoint implemented with a jump instead of a trap.  */
-  fast_tracepoint,
-
-  /* A static tracepoint, implemented by a program call into a tracing
-     library.  */
-  static_tracepoint
-};
-
-struct tracepoint_hit_ctx;
-
-typedef enum eval_result_type (*condfn) (unsigned char *,
-					 ULONGEST *);
-
-/* The definition of a tracepoint.  */
-
-/* Tracepoints may have multiple locations, each at a different
-   address.  This can occur with optimizations, template
-   instantiation, etc.  Since the locations may be in different
-   scopes, the conditions and actions may be different for each
-   location.  Our target version of tracepoints is more like GDB's
-   notion of "breakpoint locations", but we have almost nothing that
-   is not per-location, so we bother having two kinds of objects.  The
-   key consequence is that numbers are not unique, and that it takes
-   both number and address to identify a tracepoint uniquely.  */
-
-struct tracepoint
-{
-  /* The number of the tracepoint, as specified by GDB.  Several
-     tracepoint objects here may share a number.  */
-  uint32_t number;
-
-  /* Address at which the tracepoint is supposed to trigger.  Several
-     tracepoints may share an address.  */
-  CORE_ADDR address;
-
-  /* Tracepoint type.  */
-  enum tracepoint_type type;
-
-  /* True if the tracepoint is currently enabled.  */
-  int8_t enabled;
-
-  /* The number of single steps that will be performed after each
-     tracepoint hit.  */
-  uint64_t step_count;
-
-  /* The number of times the tracepoint may be hit before it will
-     terminate the entire tracing run.  */
-  uint64_t pass_count;
-
-  /* Pointer to the agent expression that is the tracepoint's
-     conditional, or NULL if the tracepoint is unconditional.  */
-  struct agent_expr *cond;
-
-  /* The list of actions to take when the tracepoint triggers.  */
-  uint32_t numactions;
-  struct tracepoint_action **actions;
-
-  /* Count of the times we've hit this tracepoint during the run.
-     Note that while-stepping steps are not counted as "hits".  */
-  uint64_t hit_count;
-
-  /* Cached sum of the sizes of traceframes created by this point.  */
-  uint64_t traceframe_usage;
-
-  CORE_ADDR compiled_cond;
-
-  /* Link to the next tracepoint in the list.  */
-  struct tracepoint *next;
-
-#ifndef IN_PROCESS_AGENT
-  /* The list of actions to take when the tracepoint triggers, in
-     string/packet form.  */
-  char **actions_str;
-
-  /* The collection of strings that describe the tracepoint as it was
-     entered into GDB.  These are not used by the target, but are
-     reported back to GDB upon reconnection.  */
-  struct source_string *source_strings;
-
-  /* The number of bytes displaced by fast tracepoints. It may subsume
-     multiple instructions, for multi-byte fast tracepoints.  This
-     field is only valid for fast tracepoints.  */
-  uint32_t orig_size;
-
-  /* Only for fast tracepoints.  */
-  CORE_ADDR obj_addr_on_target;
-
-  /* Address range where the original instruction under a fast
-     tracepoint was relocated to.  (_end is actually one byte past
-     the end).  */
-  CORE_ADDR adjusted_insn_addr;
-  CORE_ADDR adjusted_insn_addr_end;
-
-  /* The address range of the piece of the jump pad buffer that was
-     assigned to this fast tracepoint.  (_end is actually one byte
-     past the end).*/
-  CORE_ADDR jump_pad;
-  CORE_ADDR jump_pad_end;
-
-  /* The address range of the piece of the trampoline buffer that was
-     assigned to this fast tracepoint.  (_end is actually one byte
-     past the end).  */
-  CORE_ADDR trampoline;
-  CORE_ADDR trampoline_end;
-
-  /* The list of actions to take while in a stepping loop.  These
-     fields are only valid for patch-based tracepoints.  */
-  int num_step_actions;
-  struct tracepoint_action **step_actions;
-  /* Same, but in string/packet form.  */
-  char **step_actions_str;
-
-  /* Handle returned by the breakpoint or tracepoint module when we
-     inserted the trap or jump, or hooked into a static tracepoint.
-     NULL if we haven't inserted it yet.  */
-  void *handle;
-#endif
-
-};
-
-#ifndef IN_PROCESS_AGENT
-
-/* Given `while-stepping', a thread may be collecting data for more
-   than one tracepoint simultaneously.  On the other hand, the same
-   tracepoint with a while-stepping action may be hit by more than one
-   thread simultaneously (but not quite, each thread could be handling
-   a different step).  Each thread holds a list of these objects,
-   representing the current step of each while-stepping action being
-   collected.  */
-
-struct wstep_state
-{
-  struct wstep_state *next;
-
-  /* The tracepoint number.  */
-  int tp_number;
-  /* The tracepoint's address.  */
-  CORE_ADDR tp_address;
-
-  /* The number of the current step in this 'while-stepping'
-     action.  */
-  long current_step;
-};
-
-#endif
-
-EXTERN_C_PUSH
-
-/* The linked list of all tracepoints.  Marked explicitly as used as
-   the in-process library doesn't use it for the fast tracepoints
-   support.  */
-IP_AGENT_EXPORT_VAR struct tracepoint *tracepoints;
-
-/* The first tracepoint to exceed its pass count.  */
-
-IP_AGENT_EXPORT_VAR struct tracepoint *stopping_tracepoint;
-
-/* True if the trace buffer is full or otherwise no longer usable.  */
-
-IP_AGENT_EXPORT_VAR int trace_buffer_is_full;
-
-/* The first error that occurred during expression evaluation.  */
-
-/* Stored as an int to avoid the IPA ABI being dependent on whatever
-   the compiler decides to use for the enum's underlying type.  Holds
-   enum eval_result_type values.  */
-IP_AGENT_EXPORT_VAR int expr_eval_result = expr_eval_no_error;
-
-EXTERN_C_POP
-
-#ifndef IN_PROCESS_AGENT
-
-/* Pointer to the last tracepoint in the list, new tracepoints are
-   linked in at the end.  */
-
-static struct tracepoint *last_tracepoint;
-
-static const char *eval_result_names[] =
-  {
-    "terror:in the attic",  /* this should never be reported */
-    "terror:empty expression",
-    "terror:empty stack",
-    "terror:stack overflow",
-    "terror:stack underflow",
-    "terror:unhandled opcode",
-    "terror:unrecognized opcode",
-    "terror:divide by zero"
-  };
-
-#endif
-
-/* The tracepoint in which the error occurred.  */
-
-EXTERN_C_PUSH
-IP_AGENT_EXPORT_VAR struct tracepoint *error_tracepoint;
-EXTERN_C_POP
-
-struct trace_state_variable
-{
-  /* This is the name of the variable as used in GDB.  The target
-     doesn't use the name, but needs to have it for saving and
-     reconnection purposes.  */
-  char *name;
-
-  /* This number identifies the variable uniquely.  Numbers may be
-     assigned either by the target (in the case of builtin variables),
-     or by GDB, and are presumed unique during the course of a trace
-     experiment.  */
-  int number;
-
-  /* The variable's initial value, a 64-bit signed integer always.  */
-  LONGEST initial_value;
-
-  /* The variable's value, a 64-bit signed integer always.  */
-  LONGEST value;
-
-  /* Pointer to a getter function, used to supply computed values.  */
-  LONGEST (*getter) (void);
-
-  /* Link to the next variable.  */
-  struct trace_state_variable *next;
-};
-
-/* Linked list of all trace state variables.  */
-
-#ifdef IN_PROCESS_AGENT
-struct trace_state_variable *alloced_trace_state_variables;
-#endif
-
-IP_AGENT_EXPORT_VAR struct trace_state_variable *trace_state_variables;
-
-/* The results of tracing go into a fixed-size space known as the
-   "trace buffer".  Because usage follows a limited number of
-   patterns, we manage it ourselves rather than with malloc.  Basic
-   rules are that we create only one trace frame at a time, each is
-   variable in size, they are never moved once created, and we only
-   discard if we are doing a circular buffer, and then only the oldest
-   ones.  Each trace frame includes its own size, so we don't need to
-   link them together, and the trace frame number is relative to the
-   first one, so we don't need to record numbers.  A trace frame also
-   records the number of the tracepoint that created it.  The data
-   itself is a series of blocks, each introduced by a single character
-   and with a defined format.  Each type of block has enough
-   type/length info to allow scanners to jump quickly from one block
-   to the next without reading each byte in the block.  */
-
-/* Trace buffer management would be simple - advance a free pointer
-   from beginning to end, then stop - were it not for the circular
-   buffer option, which is a useful way to prevent a trace run from
-   stopping prematurely because the buffer filled up.  In the circular
-   case, the location of the first trace frame (trace_buffer_start)
-   moves as old trace frames are discarded.  Also, since we grow trace
-   frames incrementally as actions are performed, we wrap around to
-   the beginning of the trace buffer.  This is per-block, so each
-   block within a trace frame remains contiguous.  Things get messy
-   when the wrapped-around trace frame is the one being discarded; the
-   free space ends up in two parts at opposite ends of the buffer.  */
-
-#ifndef ATTR_PACKED
-#  if defined(__GNUC__)
-#    define ATTR_PACKED __attribute__ ((packed))
-#  else
-#    define ATTR_PACKED /* nothing */
-#  endif
-#endif
-
-/* The data collected at a tracepoint hit.  This object should be as
-   small as possible, since there may be a great many of them.  We do
-   not need to keep a frame number, because they are all sequential
-   and there are no deletions; so the Nth frame in the buffer is
-   always frame number N.  */
-
-struct traceframe
-{
-  /* Number of the tracepoint that collected this traceframe.  A value
-     of 0 indicates the current end of the trace buffer.  We make this
-     a 16-bit field because it's never going to happen that GDB's
-     numbering of tracepoints reaches 32,000.  */
-  int tpnum : 16;
-
-  /* The size of the data in this trace frame.  We limit this to 32
-     bits, even on a 64-bit target, because it's just implausible that
-     one is validly going to collect 4 gigabytes of data at a single
-     tracepoint hit.  */
-  unsigned int data_size : 32;
-
-  /* The base of the trace data, which is contiguous from this point.  */
-  unsigned char data[0];
-
-} ATTR_PACKED;
-
-/* The size of the EOB marker, in bytes.  A traceframe with zeroed
-   fields (and no data) marks the end of trace data.  */
-#define TRACEFRAME_EOB_MARKER_SIZE offsetof (struct traceframe, data)
-
-/* This flag is true if the trace buffer is circular, meaning that
-   when it fills, the oldest trace frames are discarded in order to
-   make room.  */
-
-#ifndef IN_PROCESS_AGENT
-static int circular_trace_buffer;
-#endif
-
-/* Size of the trace buffer.  */
-
-static LONGEST trace_buffer_size;
-
-EXTERN_C_PUSH
-
-/* Pointer to the block of memory that traceframes all go into.  */
-
-IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_lo;
-
-/* Pointer to the end of the trace buffer, more precisely to the byte
-   after the end of the buffer.  */
-
-IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_hi;
-
-EXTERN_C_POP
-
-/* Control structure holding the read/write/etc. pointers into the
-   trace buffer.  We need more than one of these to implement a
-   transaction-like mechanism to guarantees that both GDBserver and the
-   in-process agent can try to change the trace buffer
-   simultaneously.  */
-
-struct trace_buffer_control
-{
-  /* Pointer to the first trace frame in the buffer.  In the
-     non-circular case, this is equal to trace_buffer_lo, otherwise it
-     moves around in the buffer.  */
-  unsigned char *start;
-
-  /* Pointer to the free part of the trace buffer.  Note that we clear
-     several bytes at and after this pointer, so that traceframe
-     scans/searches terminate properly.  */
-  unsigned char *free;
-
-  /* Pointer to the byte after the end of the free part.  Note that
-     this may be smaller than trace_buffer_free in the circular case,
-     and means that the free part is in two pieces.  Initially it is
-     equal to trace_buffer_hi, then is generally equivalent to
-     trace_buffer_start.  */
-  unsigned char *end_free;
-
-  /* Pointer to the wraparound.  If not equal to trace_buffer_hi, then
-     this is the point at which the trace data breaks, and resumes at
-     trace_buffer_lo.  */
-  unsigned char *wrap;
-};
-
-/* Same as above, to be used by GDBserver when updating the in-process
-   agent.  */
-struct ipa_trace_buffer_control
-{
-  uintptr_t start;
-  uintptr_t free;
-  uintptr_t end_free;
-  uintptr_t wrap;
-};
-
-
-/* We have possibly both GDBserver and an inferior thread accessing
-   the same IPA trace buffer memory.  The IPA is the producer (tries
-   to put new frames in the buffer), while GDBserver occasionally
-   consumes them, that is, flushes the IPA's buffer into its own
-   buffer.  Both sides need to update the trace buffer control
-   pointers (current head, tail, etc.).  We can't use a global lock to
-   synchronize the accesses, as otherwise we could deadlock GDBserver
-   (if the thread holding the lock stops for a signal, say).  So
-   instead of that, we use a transaction scheme where GDBserver writes
-   always prevail over the IPAs writes, and, we have the IPA detect
-   the commit failure/overwrite, and retry the whole attempt.  This is
-   mainly implemented by having a global token object that represents
-   who wrote last to the buffer control structure.  We need to freeze
-   any inferior writing to the buffer while GDBserver touches memory,
-   so that the inferior can correctly detect that GDBserver had been
-   there, otherwise, it could mistakingly think its commit was
-   successful; that's implemented by simply having GDBserver set a
-   breakpoint the inferior hits if it is the critical region.
-
-   There are three cycling trace buffer control structure copies
-   (buffer head, tail, etc.), with the token object including an index
-   indicating which is current live copy.  The IPA tentatively builds
-   an updated copy in a non-current control structure, while GDBserver
-   always clobbers the current version directly.  The IPA then tries
-   to atomically "commit" its version; if GDBserver clobbered the
-   structure meanwhile, that will fail, and the IPA restarts the
-   allocation process.
-
-   Listing the step in further detail, we have:
-
-  In-process agent (producer):
-
-  - passes by `about_to_request_buffer_space' breakpoint/lock
-
-  - reads current token, extracts current trace buffer control index,
-    and starts tentatively updating the rightmost one (0->1, 1->2,
-    2->0).  Note that only one inferior thread is executing this code
-    at any given time, due to an outer lock in the jump pads.
-
-  - updates counters, and tries to commit the token.
-
-  - passes by second `about_to_request_buffer_space' breakpoint/lock,
-    leaving the sync region.
-
-  - checks if the update was effective.
-
-  - if trace buffer was found full, hits flush_trace_buffer
-    breakpoint, and restarts later afterwards.
-
-  GDBserver (consumer):
-
-  - sets `about_to_request_buffer_space' breakpoint/lock.
-
-  - updates the token unconditionally, using the current buffer
-    control index, since it knows that the IP agent always writes to
-    the rightmost, and due to the breakpoint, at most one IP thread
-    can try to update the trace buffer concurrently to GDBserver, so
-    there will be no danger of trace buffer control index wrap making
-    the IPA write to the same index as GDBserver.
-
-  - flushes the IP agent's trace buffer completely, and updates the
-    current trace buffer control structure.  GDBserver *always* wins.
-
-  - removes the `about_to_request_buffer_space' breakpoint.
-
-The token is stored in the `trace_buffer_ctrl_curr' variable.
-Internally, it's bits are defined as:
-
- |-------------+-----+-------------+--------+-------------+--------------|
- | Bit offsets |  31 |   30 - 20   |   19   |    18-8     |     7-0      |
- |-------------+-----+-------------+--------+-------------+--------------|
- | What        | GSB | PC (11-bit) | unused | CC (11-bit) | TBCI (8-bit) |
- |-------------+-----+-------------+--------+-------------+--------------|
-
- GSB  - GDBserver Stamp Bit
- PC   - Previous Counter
- CC   - Current Counter
- TBCI - Trace Buffer Control Index
-
-
-An IPA update of `trace_buffer_ctrl_curr' does:
-
-    - read CC from the current token, save as PC.
-    - updates pointers
-    - atomically tries to write PC+1,CC
-
-A GDBserver update of `trace_buffer_ctrl_curr' does:
-
-    - reads PC and CC from the current token.
-    - updates pointers
-    - writes GSB,PC,CC
-*/
-
-/* These are the bits of `trace_buffer_ctrl_curr' that are reserved
-   for the counters described below.  The cleared bits are used to
-   hold the index of the items of the `trace_buffer_ctrl' array that
-   is "current".  */
-#define GDBSERVER_FLUSH_COUNT_MASK        0xfffffff0
-
-/* `trace_buffer_ctrl_curr' contains two counters.  The `previous'
-   counter, and the `current' counter.  */
-
-#define GDBSERVER_FLUSH_COUNT_MASK_PREV   0x7ff00000
-#define GDBSERVER_FLUSH_COUNT_MASK_CURR   0x0007ff00
-
-/* When GDBserver update the IP agent's `trace_buffer_ctrl_curr', it
-   always stamps this bit as set.  */
-#define GDBSERVER_UPDATED_FLUSH_COUNT_BIT 0x80000000
-
-#ifdef IN_PROCESS_AGENT
-IP_AGENT_EXPORT_VAR struct trace_buffer_control trace_buffer_ctrl[3];
-IP_AGENT_EXPORT_VAR unsigned int trace_buffer_ctrl_curr;
-
-# define TRACE_BUFFER_CTRL_CURR \
-  (trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK)
-
-#else
-
-/* The GDBserver side agent only needs one instance of this object, as
-   it doesn't need to sync with itself.  Define it as array anyway so
-   that the rest of the code base doesn't need to care for the
-   difference.  */
-struct trace_buffer_control trace_buffer_ctrl[1];
-# define TRACE_BUFFER_CTRL_CURR 0
-#endif
-
-/* These are convenience macros used to access the current trace
-   buffer control in effect.  */
-#define trace_buffer_start (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].start)
-#define trace_buffer_free (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].free)
-#define trace_buffer_end_free \
-  (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].end_free)
-#define trace_buffer_wrap (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].wrap)
-
-
-/* Macro that returns a pointer to the first traceframe in the buffer.  */
-
-#define FIRST_TRACEFRAME() ((struct traceframe *) trace_buffer_start)
-
-/* Macro that returns a pointer to the next traceframe in the buffer.
-   If the computed location is beyond the wraparound point, subtract
-   the offset of the wraparound.  */
-
-#define NEXT_TRACEFRAME_1(TF) \
-  (((unsigned char *) (TF)) + sizeof (struct traceframe) + (TF)->data_size)
-
-#define NEXT_TRACEFRAME(TF) \
-  ((struct traceframe *) (NEXT_TRACEFRAME_1 (TF)  \
-			  - ((NEXT_TRACEFRAME_1 (TF) >= trace_buffer_wrap) \
-			     ? (trace_buffer_wrap - trace_buffer_lo)	\
-			     : 0)))
-
-/* The difference between these counters represents the total number
-   of complete traceframes present in the trace buffer.  The IP agent
-   writes to the write count, GDBserver writes to read count.  */
-
-IP_AGENT_EXPORT_VAR unsigned int traceframe_write_count;
-IP_AGENT_EXPORT_VAR unsigned int traceframe_read_count;
-
-/* Convenience macro.  */
-
-#define traceframe_count \
-  ((unsigned int) (traceframe_write_count - traceframe_read_count))
-
-/* The count of all traceframes created in the current run, including
-   ones that were discarded to make room.  */
-
-IP_AGENT_EXPORT_VAR int traceframes_created;
-
-#ifndef IN_PROCESS_AGENT
-
-/* Read-only regions are address ranges whose contents don't change,
-   and so can be read from target memory even while looking at a trace
-   frame.  Without these, disassembly for instance will likely fail,
-   because the program code is not usually collected into a trace
-   frame.  This data structure does not need to be very complicated or
-   particularly efficient, it's only going to be used occasionally,
-   and only by some commands.  */
-
-struct readonly_region
-{
-  /* The bounds of the region.  */
-  CORE_ADDR start, end;
-
-  /* Link to the next one.  */
-  struct readonly_region *next;
-};
-
-/* Linked list of readonly regions.  This list stays in effect from
-   one tstart to the next.  */
-
-static struct readonly_region *readonly_regions;
-
-#endif
-
-/* The global that controls tracing overall.  */
-
-IP_AGENT_EXPORT_VAR int tracing;
-
-#ifndef IN_PROCESS_AGENT
-
-/* Controls whether tracing should continue after GDB disconnects.  */
-
-int disconnected_tracing;
-
-/* The reason for the last tracing run to have stopped.  We initialize
-   to a distinct string so that GDB can distinguish between "stopped
-   after running" and "stopped because never run" cases.  */
-
-static const char *tracing_stop_reason = "tnotrun";
-
-static int tracing_stop_tpnum;
-
-/* 64-bit timestamps for the trace run's start and finish, expressed
-   in microseconds from the Unix epoch.  */
-
-LONGEST tracing_start_time;
-LONGEST tracing_stop_time;
-
-/* The (optional) user-supplied name of the user that started the run.
-   This is an arbitrary string, and may be NULL.  */
-
-char *tracing_user_name;
-
-/* Optional user-supplied text describing the run.  This is
-   an arbitrary string, and may be NULL.  */
-
-char *tracing_notes;
-
-/* Optional user-supplied text explaining a tstop command.  This is an
-   arbitrary string, and may be NULL.  */
-
-char *tracing_stop_note;
-
-#endif
-
-/* Functions local to this file.  */
-
-/* Base "class" for tracepoint type specific data to be passed down to
-   collect_data_at_tracepoint.  */
-struct tracepoint_hit_ctx
-{
-  enum tracepoint_type type;
-};
-
-#ifdef IN_PROCESS_AGENT
-
-/* Fast/jump tracepoint specific data to be passed down to
-   collect_data_at_tracepoint.  */
-struct fast_tracepoint_ctx
-{
-  struct tracepoint_hit_ctx base;
-
-  struct regcache regcache;
-  int regcache_initted;
-  unsigned char *regspace;
-
-  unsigned char *regs;
-  struct tracepoint *tpoint;
-};
-
-/* Static tracepoint specific data to be passed down to
-   collect_data_at_tracepoint.  */
-struct static_tracepoint_ctx
-{
-  struct tracepoint_hit_ctx base;
-
-  /* The regcache corresponding to the registers state at the time of
-     the tracepoint hit.  Initialized lazily, from REGS.  */
-  struct regcache regcache;
-  int regcache_initted;
-
-  /* The buffer space REGCACHE above uses.  We use a separate buffer
-     instead of letting the regcache malloc for both signal safety and
-     performance reasons; this is allocated on the stack instead.  */
-  unsigned char *regspace;
-
-  /* The register buffer as passed on by lttng/ust.  */
-  struct registers *regs;
-
-  /* The "printf" formatter and the args the user passed to the marker
-     call.  We use this to be able to collect "static trace data"
-     ($_sdata).  */
-  const char *fmt;
-  va_list *args;
-
-  /* The GDB tracepoint matching the probed marker that was "hit".  */
-  struct tracepoint *tpoint;
-};
-
-#else
-
-/* Static tracepoint specific data to be passed down to
-   collect_data_at_tracepoint.  */
-struct trap_tracepoint_ctx
-{
-  struct tracepoint_hit_ctx base;
-
-  struct regcache *regcache;
-};
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-static CORE_ADDR traceframe_get_pc (struct traceframe *tframe);
-static int traceframe_read_tsv (int num, LONGEST *val);
-#endif
-
-static int condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-					 struct tracepoint *tpoint);
-
-#ifndef IN_PROCESS_AGENT
-static void clear_readonly_regions (void);
-static void clear_installed_tracepoints (void);
-#endif
-
-static void collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-					CORE_ADDR stop_pc,
-					struct tracepoint *tpoint);
-#ifndef IN_PROCESS_AGENT
-static void collect_data_at_step (struct tracepoint_hit_ctx *ctx,
-				  CORE_ADDR stop_pc,
-				  struct tracepoint *tpoint, int current_step);
-static void compile_tracepoint_condition (struct tracepoint *tpoint,
-					  CORE_ADDR *jump_entry);
-#endif
-static void do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-				     CORE_ADDR stop_pc,
-				     struct tracepoint *tpoint,
-				     struct traceframe *tframe,
-				     struct tracepoint_action *taction);
-
-#ifndef IN_PROCESS_AGENT
-static struct tracepoint *fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR);
-
-static void install_tracepoint (struct tracepoint *, char *own_buf);
-static void download_tracepoint (struct tracepoint *);
-static int install_fast_tracepoint (struct tracepoint *, char *errbuf);
-static void clone_fast_tracepoint (struct tracepoint *to,
-				   const struct tracepoint *from);
-#endif
-
-static LONGEST get_timestamp (void);
-
-#if defined(__GNUC__)
-#  define memory_barrier() asm volatile ("" : : : "memory")
-#else
-#  define memory_barrier() do {} while (0)
-#endif
-
-/* We only build the IPA if this builtin is supported, and there are
-   no uses of this in GDBserver itself, so we're safe in defining this
-   unconditionally.  */
-#define cmpxchg(mem, oldval, newval) \
-  __sync_val_compare_and_swap (mem, oldval, newval)
-
-/* Record that an error occurred during expression evaluation.  */
-
-static void
-record_tracepoint_error (struct tracepoint *tpoint, const char *which,
-			 enum eval_result_type rtype)
-{
-  trace_debug ("Tracepoint %d at %s %s eval reports error %d",
-	       tpoint->number, paddress (tpoint->address), which, rtype);
-
-#ifdef IN_PROCESS_AGENT
-  /* Only record the first error we get.  */
-  if (cmpxchg (&expr_eval_result,
-	       expr_eval_no_error,
-	       rtype) != expr_eval_no_error)
-    return;
-#else
-  if (expr_eval_result != expr_eval_no_error)
-    return;
-#endif
-
-  error_tracepoint = tpoint;
-}
-
-/* Trace buffer management.  */
-
-static void
-clear_trace_buffer (void)
-{
-  trace_buffer_start = trace_buffer_lo;
-  trace_buffer_free = trace_buffer_lo;
-  trace_buffer_end_free = trace_buffer_hi;
-  trace_buffer_wrap = trace_buffer_hi;
-  /* A traceframe with zeroed fields marks the end of trace data.  */
-  ((struct traceframe *) trace_buffer_free)->tpnum = 0;
-  ((struct traceframe *) trace_buffer_free)->data_size = 0;
-  traceframe_read_count = traceframe_write_count = 0;
-  traceframes_created = 0;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-static void
-clear_inferior_trace_buffer (void)
-{
-  CORE_ADDR ipa_trace_buffer_lo;
-  CORE_ADDR ipa_trace_buffer_hi;
-  struct traceframe ipa_traceframe = { 0 };
-  struct ipa_trace_buffer_control ipa_trace_buffer_ctrl;
-
-  read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo,
-			      &ipa_trace_buffer_lo);
-  read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi,
-			      &ipa_trace_buffer_hi);
-
-  ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo;
-  ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo;
-  ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi;
-  ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi;
-
-  /* A traceframe with zeroed fields marks the end of trace data.  */
-  target_write_memory (ipa_sym_addrs.addr_trace_buffer_ctrl,
-			 (unsigned char *) &ipa_trace_buffer_ctrl,
-			 sizeof (ipa_trace_buffer_ctrl));
-
-  write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, 0);
-
-  /* A traceframe with zeroed fields marks the end of trace data.  */
-  target_write_memory (ipa_trace_buffer_lo,
-			 (unsigned char *) &ipa_traceframe,
-			 sizeof (ipa_traceframe));
-
-  write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, 0);
-  write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, 0);
-  write_inferior_integer (ipa_sym_addrs.addr_traceframes_created, 0);
-}
-
-#endif
-
-static void
-init_trace_buffer (LONGEST bufsize)
-{
-  size_t alloc_size;
-
-  trace_buffer_size = bufsize;
-
-  /* Make sure to internally allocate at least space for the EOB
-     marker.  */
-  alloc_size = (bufsize < TRACEFRAME_EOB_MARKER_SIZE
-		? TRACEFRAME_EOB_MARKER_SIZE : bufsize);
-  trace_buffer_lo = (unsigned char *) xrealloc (trace_buffer_lo, alloc_size);
-
-  trace_buffer_hi = trace_buffer_lo + trace_buffer_size;
-
-  clear_trace_buffer ();
-}
-
-#ifdef IN_PROCESS_AGENT
-
-IP_AGENT_EXPORT_FUNC void
-about_to_request_buffer_space (void)
-{
-  /* GDBserver places breakpoint here while it goes about to flush
-     data at random times.  */
-  UNKNOWN_SIDE_EFFECTS();
-}
-
-#endif
-
-/* Carve out a piece of the trace buffer, returning NULL in case of
-   failure.  */
-
-static void *
-trace_buffer_alloc (size_t amt)
-{
-  unsigned char *rslt;
-  struct trace_buffer_control *tbctrl;
-  unsigned int curr;
-#ifdef IN_PROCESS_AGENT
-  unsigned int prev, prev_filtered;
-  unsigned int commit_count;
-  unsigned int commit;
-  unsigned int readout;
-#else
-  struct traceframe *oldest;
-  unsigned char *new_start;
-#endif
-
-  trace_debug ("Want to allocate %ld+%ld bytes in trace buffer",
-	       (long) amt, (long) sizeof (struct traceframe));
-
-  /* Account for the EOB marker.  */
-  amt += TRACEFRAME_EOB_MARKER_SIZE;
-
-#ifdef IN_PROCESS_AGENT
- again:
-  memory_barrier ();
-
-  /* Read the current token and extract the index to try to write to,
-     storing it in CURR.  */
-  prev = trace_buffer_ctrl_curr;
-  prev_filtered = prev & ~GDBSERVER_FLUSH_COUNT_MASK;
-  curr = prev_filtered + 1;
-  if (curr > 2)
-    curr = 0;
-
-  about_to_request_buffer_space ();
-
-  /* Start out with a copy of the current state.  GDBserver may be
-     midway writing to the PREV_FILTERED TBC, but, that's OK, we won't
-     be able to commit anyway if that happens.  */
-  trace_buffer_ctrl[curr]
-    = trace_buffer_ctrl[prev_filtered];
-  trace_debug ("trying curr=%u", curr);
-#else
-  /* The GDBserver's agent doesn't need all that syncing, and always
-     updates TCB 0 (there's only one, mind you).  */
-  curr = 0;
-#endif
-  tbctrl = &trace_buffer_ctrl[curr];
-
-  /* Offsets are easier to grok for debugging than raw addresses,
-     especially for the small trace buffer sizes that are useful for
-     testing.  */
-  trace_debug ("Trace buffer [%d] start=%d free=%d endfree=%d wrap=%d hi=%d",
-	       curr,
-	       (int) (tbctrl->start - trace_buffer_lo),
-	       (int) (tbctrl->free - trace_buffer_lo),
-	       (int) (tbctrl->end_free - trace_buffer_lo),
-	       (int) (tbctrl->wrap - trace_buffer_lo),
-	       (int) (trace_buffer_hi - trace_buffer_lo));
-
-  /* The algorithm here is to keep trying to get a contiguous block of
-     the requested size, possibly discarding older traceframes to free
-     up space.  Since free space might come in one or two pieces,
-     depending on whether discarded traceframes wrapped around at the
-     high end of the buffer, we test both pieces after each
-     discard.  */
-  while (1)
-    {
-      /* First, if we have two free parts, try the upper one first.  */
-      if (tbctrl->end_free < tbctrl->free)
-	{
-	  if (tbctrl->free + amt <= trace_buffer_hi)
-	    /* We have enough in the upper part.  */
-	    break;
-	  else
-	    {
-	      /* Our high part of free space wasn't enough.  Give up
-		 on it for now, set wraparound.  We will recover the
-		 space later, if/when the wrapped-around traceframe is
-		 discarded.  */
-	      trace_debug ("Upper part too small, setting wraparound");
-	      tbctrl->wrap = tbctrl->free;
-	      tbctrl->free = trace_buffer_lo;
-	    }
-	}
-
-      /* The normal case.  */
-      if (tbctrl->free + amt <= tbctrl->end_free)
-	break;
-
-#ifdef IN_PROCESS_AGENT
-      /* The IP Agent's buffer is always circular.  It isn't used
-	 currently, but `circular_trace_buffer' could represent
-	 GDBserver's mode.  If we didn't find space, ask GDBserver to
-	 flush.  */
-
-      flush_trace_buffer ();
-      memory_barrier ();
-      if (tracing)
-	{
-	  trace_debug ("gdbserver flushed buffer, retrying");
-	  goto again;
-	}
-
-      /* GDBserver cancelled the tracing.  Bail out as well.  */
-      return NULL;
-#else
-      /* If we're here, then neither part is big enough, and
-	 non-circular trace buffers are now full.  */
-      if (!circular_trace_buffer)
-	{
-	  trace_debug ("Not enough space in the trace buffer");
-	  return NULL;
-	}
-
-      trace_debug ("Need more space in the trace buffer");
-
-      /* If we have a circular buffer, we can try discarding the
-	 oldest traceframe and see if that helps.  */
-      oldest = FIRST_TRACEFRAME ();
-      if (oldest->tpnum == 0)
-	{
-	  /* Not good; we have no traceframes to free.  Perhaps we're
-	     asking for a block that is larger than the buffer?  In
-	     any case, give up.  */
-	  trace_debug ("No traceframes to discard");
-	  return NULL;
-	}
-
-      /* We don't run this code in the in-process agent currently.
-	 E.g., we could leave the in-process agent in autonomous
-	 circular mode if we only have fast tracepoints.  If we do
-	 that, then this bit becomes racy with GDBserver, which also
-	 writes to this counter.  */
-      --traceframe_write_count;
-
-      new_start = (unsigned char *) NEXT_TRACEFRAME (oldest);
-      /* If we freed the traceframe that wrapped around, go back
-	 to the non-wrap case.  */
-      if (new_start < tbctrl->start)
-	{
-	  trace_debug ("Discarding past the wraparound");
-	  tbctrl->wrap = trace_buffer_hi;
-	}
-      tbctrl->start = new_start;
-      tbctrl->end_free = tbctrl->start;
-
-      trace_debug ("Discarded a traceframe\n"
-		   "Trace buffer [%d], start=%d free=%d "
-		   "endfree=%d wrap=%d hi=%d",
-		   curr,
-		   (int) (tbctrl->start - trace_buffer_lo),
-		   (int) (tbctrl->free - trace_buffer_lo),
-		   (int) (tbctrl->end_free - trace_buffer_lo),
-		   (int) (tbctrl->wrap - trace_buffer_lo),
-		   (int) (trace_buffer_hi - trace_buffer_lo));
-
-      /* Now go back around the loop.  The discard might have resulted
-	 in either one or two pieces of free space, so we want to try
-	 both before freeing any more traceframes.  */
-#endif
-    }
-
-  /* If we get here, we know we can provide the asked-for space.  */
-
-  rslt = tbctrl->free;
-
-  /* Adjust the request back down, now that we know we have space for
-     the marker, but don't commit to AMT yet, we may still need to
-     restart the operation if GDBserver touches the trace buffer
-     (obviously only important in the in-process agent's version).  */
-  tbctrl->free += (amt - sizeof (struct traceframe));
-
-  /* Or not.  If GDBserver changed the trace buffer behind our back,
-     we get to restart a new allocation attempt.  */
-
-#ifdef IN_PROCESS_AGENT
-  /* Build the tentative token.  */
-  commit_count = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) + 0x100)
-		  & GDBSERVER_FLUSH_COUNT_MASK_CURR);
-  commit = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) << 12)
-	    | commit_count
-	    | curr);
-
-  /* Try to commit it.  */
-  readout = cmpxchg (&trace_buffer_ctrl_curr, prev, commit);
-  if (readout != prev)
-    {
-      trace_debug ("GDBserver has touched the trace buffer, restarting."
-		   " (prev=%08x, commit=%08x, readout=%08x)",
-		   prev, commit, readout);
-      goto again;
-    }
-
-  /* Hold your horses here.  Even if that change was committed,
-     GDBserver could come in, and clobber it.  We need to hold to be
-     able to tell if GDBserver clobbers before or after we committed
-     the change.  Whenever GDBserver goes about touching the IPA
-     buffer, it sets a breakpoint in this routine, so we have a sync
-     point here.  */
-  about_to_request_buffer_space ();
-
-  /* Check if the change has been effective, even if GDBserver stopped
-     us at the breakpoint.  */
-
-  {
-    unsigned int refetch;
-
-    memory_barrier ();
-
-    refetch = trace_buffer_ctrl_curr;
-
-    if (refetch == commit
-	|| ((refetch & GDBSERVER_FLUSH_COUNT_MASK_PREV) >> 12) == commit_count)
-      {
-	/* effective */
-	trace_debug ("change is effective: (prev=%08x, commit=%08x, "
-		     "readout=%08x, refetch=%08x)",
-		     prev, commit, readout, refetch);
-      }
-    else
-      {
-	trace_debug ("GDBserver has touched the trace buffer, not effective."
-		     " (prev=%08x, commit=%08x, readout=%08x, refetch=%08x)",
-		     prev, commit, readout, refetch);
-	goto again;
-      }
-  }
-#endif
-
-  /* We have a new piece of the trace buffer.  Hurray!  */
-
-  /* Add an EOB marker just past this allocation.  */
-  ((struct traceframe *) tbctrl->free)->tpnum = 0;
-  ((struct traceframe *) tbctrl->free)->data_size = 0;
-
-  /* Adjust the request back down, now that we know we have space for
-     the marker.  */
-  amt -= sizeof (struct traceframe);
-
-  if (debug_threads)
-    {
-      trace_debug ("Allocated %d bytes", (int) amt);
-      trace_debug ("Trace buffer [%d] start=%d free=%d "
-		   "endfree=%d wrap=%d hi=%d",
-		   curr,
-		   (int) (tbctrl->start - trace_buffer_lo),
-		   (int) (tbctrl->free - trace_buffer_lo),
-		   (int) (tbctrl->end_free - trace_buffer_lo),
-		   (int) (tbctrl->wrap - trace_buffer_lo),
-		   (int) (trace_buffer_hi - trace_buffer_lo));
-    }
-
-  return rslt;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* Return the total free space.  This is not necessarily the largest
-   block we can allocate, because of the two-part case.  */
-
-static int
-free_space (void)
-{
-  if (trace_buffer_free <= trace_buffer_end_free)
-    return trace_buffer_end_free - trace_buffer_free;
-  else
-    return ((trace_buffer_end_free - trace_buffer_lo)
-	    + (trace_buffer_hi - trace_buffer_free));
-}
-
-/* An 'S' in continuation packets indicates remainder are for
-   while-stepping.  */
-
-static int seen_step_action_flag;
-
-/* Create a tracepoint (location) with given number and address.  Add this
-   new tracepoint to list and sort this list.  */
-
-static struct tracepoint *
-add_tracepoint (int num, CORE_ADDR addr)
-{
-  struct tracepoint *tpoint, **tp_next;
-
-  tpoint = XNEW (struct tracepoint);
-  tpoint->number = num;
-  tpoint->address = addr;
-  tpoint->numactions = 0;
-  tpoint->actions = NULL;
-  tpoint->actions_str = NULL;
-  tpoint->cond = NULL;
-  tpoint->num_step_actions = 0;
-  tpoint->step_actions = NULL;
-  tpoint->step_actions_str = NULL;
-  /* Start all off as regular (slow) tracepoints.  */
-  tpoint->type = trap_tracepoint;
-  tpoint->orig_size = -1;
-  tpoint->source_strings = NULL;
-  tpoint->compiled_cond = 0;
-  tpoint->handle = NULL;
-  tpoint->next = NULL;
-
-  /* Find a place to insert this tracepoint into list in order to keep
-     the tracepoint list still in the ascending order.  There may be
-     multiple tracepoints at the same address as TPOINT's, and this
-     guarantees TPOINT is inserted after all the tracepoints which are
-     set at the same address.  For example, fast tracepoints A, B, C are
-     set at the same address, and D is to be insert at the same place as
-     well,
-
-     -->| A |--> | B |-->| C |->...
-
-     One jump pad was created for tracepoint A, B, and C, and the target
-     address of A is referenced/used in jump pad.  So jump pad will let
-     inferior jump to A.  If D is inserted in front of A, like this,
-
-     -->| D |-->| A |--> | B |-->| C |->...
-
-     without updating jump pad, D is not reachable during collect, which
-     is wrong.  As we can see, the order of B, C and D doesn't matter, but
-     A should always be the `first' one.  */
-  for (tp_next = &tracepoints;
-       (*tp_next) != NULL && (*tp_next)->address <= tpoint->address;
-       tp_next = &(*tp_next)->next)
-    ;
-  tpoint->next = *tp_next;
-  *tp_next = tpoint;
-  last_tracepoint = tpoint;
-
-  seen_step_action_flag = 0;
-
-  return tpoint;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* Return the tracepoint with the given number and address, or NULL.  */
-
-static struct tracepoint *
-find_tracepoint (int id, CORE_ADDR addr)
-{
-  struct tracepoint *tpoint;
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    if (tpoint->number == id && tpoint->address == addr)
-      return tpoint;
-
-  return NULL;
-}
-
-/* Remove TPOINT from global list.  */
-
-static void
-remove_tracepoint (struct tracepoint *tpoint)
-{
-  struct tracepoint *tp, *tp_prev;
-
-  for (tp = tracepoints, tp_prev = NULL; tp && tp != tpoint;
-       tp_prev = tp, tp = tp->next)
-    ;
-
-  if (tp)
-    {
-      if (tp_prev)
-	tp_prev->next = tp->next;
-      else
-	tracepoints = tp->next;
-
-      xfree (tp);
-    }
-}
-
-/* There may be several tracepoints with the same number (because they
-   are "locations", in GDB parlance); return the next one after the
-   given tracepoint, or search from the beginning of the list if the
-   first argument is NULL.  */
-
-static struct tracepoint *
-find_next_tracepoint_by_number (struct tracepoint *prev_tp, int num)
-{
-  struct tracepoint *tpoint;
-
-  if (prev_tp)
-    tpoint = prev_tp->next;
-  else
-    tpoint = tracepoints;
-  for (; tpoint; tpoint = tpoint->next)
-    if (tpoint->number == num)
-      return tpoint;
-
-  return NULL;
-}
-
-#endif
-
-/* Append another action to perform when the tracepoint triggers.  */
-
-static void
-add_tracepoint_action (struct tracepoint *tpoint, const char *packet)
-{
-  const char *act;
-
-  if (*packet == 'S')
-    {
-      seen_step_action_flag = 1;
-      ++packet;
-    }
-
-  act = packet;
-
-  while (*act)
-    {
-      const char *act_start = act;
-      struct tracepoint_action *action = NULL;
-
-      switch (*act)
-	{
-	case 'M':
-	  {
-	    struct collect_memory_action *maction =
-	      XNEW (struct collect_memory_action);
-	    ULONGEST basereg;
-	    int is_neg;
-
-	    maction->base.type = *act;
-	    action = &maction->base;
-
-	    ++act;
-	    is_neg = (*act == '-');
-	    if (*act == '-')
-	      ++act;
-	    act = unpack_varlen_hex (act, &basereg);
-	    ++act;
-	    act = unpack_varlen_hex (act, &maction->addr);
-	    ++act;
-	    act = unpack_varlen_hex (act, &maction->len);
-	    maction->basereg = (is_neg
-				? - (int) basereg
-				: (int) basereg);
-	    trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)",
-			 pulongest (maction->len),
-			 paddress (maction->addr), maction->basereg);
-	    break;
-	  }
-	case 'R':
-	  {
-	    struct collect_registers_action *raction =
-	      XNEW (struct collect_registers_action);
-
-	    raction->base.type = *act;
-	    action = &raction->base;
-
-	    trace_debug ("Want to collect registers");
-	    ++act;
-	    /* skip past hex digits of mask for now */
-	    while (isxdigit(*act))
-	      ++act;
-	    break;
-	  }
-	case 'L':
-	  {
-	    struct collect_static_trace_data_action *raction =
-	      XNEW (struct collect_static_trace_data_action);
-
-	    raction->base.type = *act;
-	    action = &raction->base;
-
-	    trace_debug ("Want to collect static trace data");
-	    ++act;
-	    break;
-	  }
-	case 'S':
-	  trace_debug ("Unexpected step action, ignoring");
-	  ++act;
-	  break;
-	case 'X':
-	  {
-	    struct eval_expr_action *xaction = XNEW (struct eval_expr_action);
-
-	    xaction->base.type = *act;
-	    action = &xaction->base;
-
-	    trace_debug ("Want to evaluate expression");
-	    xaction->expr = gdb_parse_agent_expr (&act);
-	    break;
-	  }
-	default:
-	  trace_debug ("unknown trace action '%c', ignoring...", *act);
-	  break;
-	case '-':
-	  break;
-	}
-
-      if (action == NULL)
-	break;
-
-      if (seen_step_action_flag)
-	{
-	  tpoint->num_step_actions++;
-
-	  tpoint->step_actions
-	    = XRESIZEVEC (struct tracepoint_action *, tpoint->step_actions,
-			  tpoint->num_step_actions);
-	  tpoint->step_actions_str
-	    = XRESIZEVEC (char *, tpoint->step_actions_str,
-			  tpoint->num_step_actions);
-	  tpoint->step_actions[tpoint->num_step_actions - 1] = action;
-	  tpoint->step_actions_str[tpoint->num_step_actions - 1]
-	    = savestring (act_start, act - act_start);
-	}
-      else
-	{
-	  tpoint->numactions++;
-	  tpoint->actions
-	    = XRESIZEVEC (struct tracepoint_action *, tpoint->actions,
-			  tpoint->numactions);
-	  tpoint->actions_str
-	    = XRESIZEVEC (char *, tpoint->actions_str, tpoint->numactions);
-	  tpoint->actions[tpoint->numactions - 1] = action;
-	  tpoint->actions_str[tpoint->numactions - 1]
-	    = savestring (act_start, act - act_start);
-	}
-    }
-}
-
-#endif
-
-/* Find or create a trace state variable with the given number.  */
-
-static struct trace_state_variable *
-get_trace_state_variable (int num)
-{
-  struct trace_state_variable *tsv;
-
-#ifdef IN_PROCESS_AGENT
-  /* Search for an existing variable.  */
-  for (tsv = alloced_trace_state_variables; tsv; tsv = tsv->next)
-    if (tsv->number == num)
-      return tsv;
-#endif
-
-  /* Search for an existing variable.  */
-  for (tsv = trace_state_variables; tsv; tsv = tsv->next)
-    if (tsv->number == num)
-      return tsv;
-
-  return NULL;
-}
-
-/* Find or create a trace state variable with the given number.  */
-
-static struct trace_state_variable *
-create_trace_state_variable (int num, int gdb)
-{
-  struct trace_state_variable *tsv;
-
-  tsv = get_trace_state_variable (num);
-  if (tsv != NULL)
-    return tsv;
-
-  /* Create a new variable.  */
-  tsv = XNEW (struct trace_state_variable);
-  tsv->number = num;
-  tsv->initial_value = 0;
-  tsv->value = 0;
-  tsv->getter = NULL;
-  tsv->name = NULL;
-#ifdef IN_PROCESS_AGENT
-  if (!gdb)
-    {
-      tsv->next = alloced_trace_state_variables;
-      alloced_trace_state_variables = tsv;
-    }
-  else
-#endif
-    {
-      tsv->next = trace_state_variables;
-      trace_state_variables = tsv;
-    }
-  return tsv;
-}
-
-IP_AGENT_EXPORT_FUNC LONGEST
-get_trace_state_variable_value (int num)
-{
-  struct trace_state_variable *tsv;
-
-  tsv = get_trace_state_variable (num);
-
-  if (!tsv)
-    {
-      trace_debug ("No trace state variable %d, skipping value get", num);
-      return 0;
-    }
-
-  /* Call a getter function if we have one.  While it's tempting to
-     set up something to only call the getter once per tracepoint hit,
-     it could run afoul of thread races. Better to let the getter
-     handle it directly, if necessary to worry about it.  */
-  if (tsv->getter)
-    tsv->value = (tsv->getter) ();
-
-  trace_debug ("get_trace_state_variable_value(%d) ==> %s",
-	       num, plongest (tsv->value));
-
-  return tsv->value;
-}
-
-IP_AGENT_EXPORT_FUNC void
-set_trace_state_variable_value (int num, LONGEST val)
-{
-  struct trace_state_variable *tsv;
-
-  tsv = get_trace_state_variable (num);
-
-  if (!tsv)
-    {
-      trace_debug ("No trace state variable %d, skipping value set", num);
-      return;
-    }
-
-  tsv->value = val;
-}
-
-LONGEST
-agent_get_trace_state_variable_value (int num)
-{
-  return get_trace_state_variable_value (num);
-}
-
-void
-agent_set_trace_state_variable_value (int num, LONGEST val)
-{
-  set_trace_state_variable_value (num, val);
-}
-
-static void
-set_trace_state_variable_name (int num, const char *name)
-{
-  struct trace_state_variable *tsv;
-
-  tsv = get_trace_state_variable (num);
-
-  if (!tsv)
-    {
-      trace_debug ("No trace state variable %d, skipping name set", num);
-      return;
-    }
-
-  tsv->name = (char *) name;
-}
-
-static void
-set_trace_state_variable_getter (int num, LONGEST (*getter) (void))
-{
-  struct trace_state_variable *tsv;
-
-  tsv = get_trace_state_variable (num);
-
-  if (!tsv)
-    {
-      trace_debug ("No trace state variable %d, skipping getter set", num);
-      return;
-    }
-
-  tsv->getter = getter;
-}
-
-/* Add a raw traceframe for the given tracepoint.  */
-
-static struct traceframe *
-add_traceframe (struct tracepoint *tpoint)
-{
-  struct traceframe *tframe;
-
-  tframe
-    = (struct traceframe *) trace_buffer_alloc (sizeof (struct traceframe));
-
-  if (tframe == NULL)
-    return NULL;
-
-  tframe->tpnum = tpoint->number;
-  tframe->data_size = 0;
-
-  return tframe;
-}
-
-/* Add a block to the traceframe currently being worked on.  */
-
-static unsigned char *
-add_traceframe_block (struct traceframe *tframe,
-		      struct tracepoint *tpoint, int amt)
-{
-  unsigned char *block;
-
-  if (!tframe)
-    return NULL;
-
-  block = (unsigned char *) trace_buffer_alloc (amt);
-
-  if (!block)
-    return NULL;
-
-  gdb_assert (tframe->tpnum == tpoint->number);
-
-  tframe->data_size += amt;
-  tpoint->traceframe_usage += amt;
-
-  return block;
-}
-
-/* Flag that the current traceframe is finished.  */
-
-static void
-finish_traceframe (struct traceframe *tframe)
-{
-  ++traceframe_write_count;
-  ++traceframes_created;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* Given a traceframe number NUM, find the NUMth traceframe in the
-   buffer.  */
-
-static struct traceframe *
-find_traceframe (int num)
-{
-  struct traceframe *tframe;
-  int tfnum = 0;
-
-  for (tframe = FIRST_TRACEFRAME ();
-       tframe->tpnum != 0;
-       tframe = NEXT_TRACEFRAME (tframe))
-    {
-      if (tfnum == num)
-	return tframe;
-      ++tfnum;
-    }
-
-  return NULL;
-}
-
-static CORE_ADDR
-get_traceframe_address (struct traceframe *tframe)
-{
-  CORE_ADDR addr;
-  struct tracepoint *tpoint;
-
-  addr = traceframe_get_pc (tframe);
-
-  if (addr)
-    return addr;
-
-  /* Fallback strategy, will be incorrect for while-stepping frames
-     and multi-location tracepoints.  */
-  tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum);
-  return tpoint->address;
-}
-
-/* Search for the next traceframe whose address is inside or outside
-   the given range.  */
-
-static struct traceframe *
-find_next_traceframe_in_range (CORE_ADDR lo, CORE_ADDR hi, int inside_p,
-			       int *tfnump)
-{
-  client_state &cs = get_client_state ();
-  struct traceframe *tframe;
-  CORE_ADDR tfaddr;
-
-  *tfnump = cs.current_traceframe + 1;
-  tframe = find_traceframe (*tfnump);
-  /* The search is not supposed to wrap around.  */
-  if (!tframe)
-    {
-      *tfnump = -1;
-      return NULL;
-    }
-
-  for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe))
-    {
-      tfaddr = get_traceframe_address (tframe);
-      if (inside_p
-	  ? (lo <= tfaddr && tfaddr <= hi)
-	  : (lo > tfaddr || tfaddr > hi))
-	return tframe;
-      ++*tfnump;
-    }
-
-  *tfnump = -1;
-  return NULL;
-}
-
-/* Search for the next traceframe recorded by the given tracepoint.
-   Note that for multi-location tracepoints, this will find whatever
-   location appears first.  */
-
-static struct traceframe *
-find_next_traceframe_by_tracepoint (int num, int *tfnump)
-{
-  client_state &cs = get_client_state ();
-  struct traceframe *tframe;
-
-  *tfnump = cs.current_traceframe + 1;
-  tframe = find_traceframe (*tfnump);
-  /* The search is not supposed to wrap around.  */
-  if (!tframe)
-    {
-      *tfnump = -1;
-      return NULL;
-    }
-
-  for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe))
-    {
-      if (tframe->tpnum == num)
-	return tframe;
-      ++*tfnump;
-    }
-
-  *tfnump = -1;
-  return NULL;
-}
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-/* Clear all past trace state.  */
-
-static void
-cmd_qtinit (char *packet)
-{
-  client_state &cs = get_client_state ();
-  struct trace_state_variable *tsv, *prev, *next;
-
-  /* Can't do this command without a pid attached.  */
-  if (current_thread == NULL)
-    {
-      write_enn (packet);
-      return;
-    }
-
-  /* Make sure we don't try to read from a trace frame.  */
-  cs.current_traceframe = -1;
-
-  stop_tracing ();
-
-  trace_debug ("Initializing the trace");
-
-  clear_installed_tracepoints ();
-  clear_readonly_regions ();
-
-  tracepoints = NULL;
-  last_tracepoint = NULL;
-
-  /* Clear out any leftover trace state variables.  Ones with target
-     defined getters should be kept however.  */
-  prev = NULL;
-  tsv = trace_state_variables;
-  while (tsv)
-    {
-      trace_debug ("Looking at var %d", tsv->number);
-      if (tsv->getter == NULL)
-	{
-	  next = tsv->next;
-	  if (prev)
-	    prev->next = next;
-	  else
-	    trace_state_variables = next;
-	  trace_debug ("Deleting var %d", tsv->number);
-	  free (tsv);
-	  tsv = next;
-	}
-      else
-	{
-	  prev = tsv;
-	  tsv = tsv->next;
-	}
-    }
-
-  clear_trace_buffer ();
-  clear_inferior_trace_buffer ();
-
-  write_ok (packet);
-}
-
-/* Unprobe the UST marker at ADDRESS.  */
-
-static void
-unprobe_marker_at (CORE_ADDR address)
-{
-  char cmd[IPA_CMD_BUF_SIZE];
-
-  sprintf (cmd, "unprobe_marker_at:%s", paddress (address));
-  run_inferior_command (cmd, strlen (cmd) + 1);
-}
-
-/* Restore the program to its pre-tracing state.  This routine may be called
-   in error situations, so it needs to be careful about only restoring
-   from known-valid bits.  */
-
-static void
-clear_installed_tracepoints (void)
-{
-  struct tracepoint *tpoint;
-  struct tracepoint *prev_stpoint;
-
-  pause_all (1);
-
-  prev_stpoint = NULL;
-
-  /* Restore any bytes overwritten by tracepoints.  */
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    {
-      /* Catch the case where we might try to remove a tracepoint that
-	 was never actually installed.  */
-      if (tpoint->handle == NULL)
-	{
-	  trace_debug ("Tracepoint %d at 0x%s was "
-		       "never installed, nothing to clear",
-		       tpoint->number, paddress (tpoint->address));
-	  continue;
-	}
-
-      switch (tpoint->type)
-	{
-	case trap_tracepoint:
-	  {
-	    struct breakpoint *bp
-	      = (struct breakpoint *) tpoint->handle;
-
-	    delete_breakpoint (bp);
-	  }
-	  break;
-	case fast_tracepoint:
-	  {
-	    struct fast_tracepoint_jump *jump
-	      = (struct fast_tracepoint_jump *) tpoint->handle;
-
-	    delete_fast_tracepoint_jump (jump);
-	  }
-	  break;
-	case static_tracepoint:
-	  if (prev_stpoint != NULL
-	      && prev_stpoint->address == tpoint->address)
-	    /* Nothing to do.  We already unprobed a tracepoint set at
-	       this marker address (and there can only be one probe
-	       per marker).  */
-	    ;
-	  else
-	    {
-	      unprobe_marker_at (tpoint->address);
-	      prev_stpoint = tpoint;
-	    }
-	  break;
-	}
-
-      tpoint->handle = NULL;
-    }
-
-  unpause_all (1);
-}
-
-/* Parse a packet that defines a tracepoint.  */
-
-static void
-cmd_qtdp (char *own_buf)
-{
-  int tppacket;
-  /* Whether there is a trailing hyphen at the end of the QTDP packet.  */
-  int trail_hyphen = 0;
-  ULONGEST num;
-  ULONGEST addr;
-  ULONGEST count;
-  struct tracepoint *tpoint;
-  const char *packet = own_buf;
-
-  packet += strlen ("QTDP:");
-
-  /* A hyphen at the beginning marks a packet specifying actions for a
-     tracepoint already supplied.  */
-  tppacket = 1;
-  if (*packet == '-')
-    {
-      tppacket = 0;
-      ++packet;
-    }
-  packet = unpack_varlen_hex (packet, &num);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &addr);
-  ++packet; /* skip a colon */
-
-  /* See if we already have this tracepoint.  */
-  tpoint = find_tracepoint (num, addr);
-
-  if (tppacket)
-    {
-      /* Duplicate tracepoints are never allowed.  */
-      if (tpoint)
-	{
-	  trace_debug ("Tracepoint error: tracepoint %d"
-		       " at 0x%s already exists",
-		       (int) num, paddress (addr));
-	  write_enn (own_buf);
-	  return;
-	}
-
-      tpoint = add_tracepoint (num, addr);
-
-      tpoint->enabled = (*packet == 'E');
-      ++packet; /* skip 'E' */
-      ++packet; /* skip a colon */
-      packet = unpack_varlen_hex (packet, &count);
-      tpoint->step_count = count;
-      ++packet; /* skip a colon */
-      packet = unpack_varlen_hex (packet, &count);
-      tpoint->pass_count = count;
-      /* See if we have any of the additional optional fields.  */
-      while (*packet == ':')
-	{
-	  ++packet;
-	  if (*packet == 'F')
-	    {
-	      tpoint->type = fast_tracepoint;
-	      ++packet;
-	      packet = unpack_varlen_hex (packet, &count);
-	      tpoint->orig_size = count;
-	    }
-	  else if (*packet == 'S')
-	    {
-	      tpoint->type = static_tracepoint;
-	      ++packet;
-	    }
-	  else if (*packet == 'X')
-	    {
-	      tpoint->cond = gdb_parse_agent_expr (&packet);
-	    }
-	  else if (*packet == '-')
-	    break;
-	  else if (*packet == '\0')
-	    break;
-	  else
-	    trace_debug ("Unknown optional tracepoint field");
-	}
-      if (*packet == '-')
-	{
-	  trail_hyphen = 1;
-	  trace_debug ("Also has actions\n");
-	}
-
-      trace_debug ("Defined %stracepoint %d at 0x%s, "
-		   "enabled %d step %" PRIu64 " pass %" PRIu64,
-		   tpoint->type == fast_tracepoint ? "fast "
-		   : tpoint->type == static_tracepoint ? "static " : "",
-		   tpoint->number, paddress (tpoint->address), tpoint->enabled,
-		   tpoint->step_count, tpoint->pass_count);
-    }
-  else if (tpoint)
-    add_tracepoint_action (tpoint, packet);
-  else
-    {
-      trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found",
-		   (int) num, paddress (addr));
-      write_enn (own_buf);
-      return;
-    }
-
-  /* Install tracepoint during tracing only once for each tracepoint location.
-     For each tracepoint loc, GDB may send multiple QTDP packets, and we can
-     determine the last QTDP packet for one tracepoint location by checking
-     trailing hyphen in QTDP packet.  */
-  if (tracing && !trail_hyphen)
-    {
-      struct tracepoint *tp = NULL;
-
-      /* Pause all threads temporarily while we patch tracepoints.  */
-      pause_all (0);
-
-      /* download_tracepoint will update global `tracepoints'
-	 list, so it is unsafe to leave threads in jump pad.  */
-      stabilize_threads ();
-
-      /* Freeze threads.  */
-      pause_all (1);
-
-
-      if (tpoint->type != trap_tracepoint)
-	{
-	  /* Find another fast or static tracepoint at the same address.  */
-	  for (tp = tracepoints; tp; tp = tp->next)
-	    {
-	      if (tp->address == tpoint->address && tp->type == tpoint->type
-		  && tp->number != tpoint->number)
-		break;
-	    }
-
-	  /* TPOINT is installed at the same address as TP.  */
-	  if (tp)
-	    {
-	      if (tpoint->type == fast_tracepoint)
-		clone_fast_tracepoint (tpoint, tp);
-	      else if (tpoint->type == static_tracepoint)
-		tpoint->handle = (void *) -1;
-	    }
-	}
-
-      if (use_agent && tpoint->type == fast_tracepoint
-	  && agent_capability_check (AGENT_CAPA_FAST_TRACE))
-	{
-	  /* Download and install fast tracepoint by agent.  */
-	  if (tracepoint_send_agent (tpoint) == 0)
-	    write_ok (own_buf);
-	  else
-	    {
-	      write_enn (own_buf);
-	      remove_tracepoint (tpoint);
-	    }
-	}
-      else
-	{
-	  download_tracepoint (tpoint);
-
-	  if (tpoint->type == trap_tracepoint || tp == NULL)
-	    {
-	      install_tracepoint (tpoint, own_buf);
-	      if (strcmp (own_buf, "OK") != 0)
-		remove_tracepoint (tpoint);
-	    }
-	  else
-	    write_ok (own_buf);
-	}
-
-      unpause_all (1);
-      return;
-    }
-
-  write_ok (own_buf);
-}
-
-static void
-cmd_qtdpsrc (char *own_buf)
-{
-  ULONGEST num, addr, start, slen;
-  struct tracepoint *tpoint;
-  const char *packet = own_buf;
-  const char *saved;
-  char *srctype, *src;
-  size_t nbytes;
-  struct source_string *last, *newlast;
-
-  packet += strlen ("QTDPsrc:");
-
-  packet = unpack_varlen_hex (packet, &num);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &addr);
-  ++packet; /* skip a colon */
-
-  /* See if we already have this tracepoint.  */
-  tpoint = find_tracepoint (num, addr);
-
-  if (!tpoint)
-    {
-      trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found",
-		   (int) num, paddress (addr));
-      write_enn (own_buf);
-      return;
-    }
-
-  saved = packet;
-  packet = strchr (packet, ':');
-  srctype = (char *) xmalloc (packet - saved + 1);
-  memcpy (srctype, saved, packet - saved);
-  srctype[packet - saved] = '\0';
-  ++packet;
-  packet = unpack_varlen_hex (packet, &start);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &slen);
-  ++packet; /* skip a colon */
-  src = (char *) xmalloc (slen + 1);
-  nbytes = hex2bin (packet, (gdb_byte *) src, strlen (packet) / 2);
-  src[nbytes] = '\0';
-
-  newlast = XNEW (struct source_string);
-  newlast->type = srctype;
-  newlast->str = src;
-  newlast->next = NULL;
-  /* Always add a source string to the end of the list;
-     this keeps sequences of actions/commands in the right
-     order.  */
-  if (tpoint->source_strings)
-    {
-      for (last = tpoint->source_strings; last->next; last = last->next)
-	;
-      last->next = newlast;
-    }
-  else
-    tpoint->source_strings = newlast;
-
-  write_ok (own_buf);
-}
-
-static void
-cmd_qtdv (char *own_buf)
-{
-  ULONGEST num, val, builtin;
-  char *varname;
-  size_t nbytes;
-  struct trace_state_variable *tsv;
-  const char *packet = own_buf;
-
-  packet += strlen ("QTDV:");
-
-  packet = unpack_varlen_hex (packet, &num);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &val);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &builtin);
-  ++packet; /* skip a colon */
-
-  nbytes = strlen (packet) / 2;
-  varname = (char *) xmalloc (nbytes + 1);
-  nbytes = hex2bin (packet, (gdb_byte *) varname, nbytes);
-  varname[nbytes] = '\0';
-
-  tsv = create_trace_state_variable (num, 1);
-  tsv->initial_value = (LONGEST) val;
-  tsv->name = varname;
-
-  set_trace_state_variable_value (num, (LONGEST) val);
-
-  write_ok (own_buf);
-}
-
-static void
-cmd_qtenable_disable (char *own_buf, int enable)
-{
-  const char *packet = own_buf;
-  ULONGEST num, addr;
-  struct tracepoint *tp;
-
-  packet += strlen (enable ? "QTEnable:" : "QTDisable:");
-  packet = unpack_varlen_hex (packet, &num);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &addr);
-
-  tp = find_tracepoint (num, addr);
-
-  if (tp)
-    {
-      if ((enable && tp->enabled) || (!enable && !tp->enabled))
-	{
-	  trace_debug ("Tracepoint %d at 0x%s is already %s",
-		       (int) num, paddress (addr),
-		       enable ? "enabled" : "disabled");
-	  write_ok (own_buf);
-	  return;
-	}
-
-      trace_debug ("%s tracepoint %d at 0x%s",
-		   enable ? "Enabling" : "Disabling",
-		   (int) num, paddress (addr));
-
-      tp->enabled = enable;
-
-      if (tp->type == fast_tracepoint || tp->type == static_tracepoint)
-	{
-	  int ret;
-	  int offset = offsetof (struct tracepoint, enabled);
-	  CORE_ADDR obj_addr = tp->obj_addr_on_target + offset;
-
-	  ret = prepare_to_access_memory ();
-	  if (ret)
-	    {
-	      trace_debug ("Failed to temporarily stop inferior threads");
-	      write_enn (own_buf);
-	      return;
-	    }
-
-	  ret = write_inferior_int8 (obj_addr, enable);
-	  done_accessing_memory ();
-	  
-	  if (ret)
-	    {
-	      trace_debug ("Cannot write enabled flag into "
-			   "inferior process memory");
-	      write_enn (own_buf);
-	      return;
-	    }
-	}
-
-      write_ok (own_buf);
-    }
-  else
-    {
-      trace_debug ("Tracepoint %d at 0x%s not found",
-		   (int) num, paddress (addr));
-      write_enn (own_buf);
-    }
-}
-
-static void
-cmd_qtv (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  ULONGEST num;
-  LONGEST val = 0;
-  int err;
-  char *packet = own_buf;
-
-  packet += strlen ("qTV:");
-  unpack_varlen_hex (packet, &num);
-
-  if (cs.current_traceframe >= 0)
-    {
-      err = traceframe_read_tsv ((int) num, &val);
-      if (err)
-	{
-	  strcpy (own_buf, "U");
-	  return;
-	}
-    }
-  /* Only make tsv's be undefined before the first trace run.  After a
-     trace run is over, the user might want to see the last value of
-     the tsv, and it might not be available in a traceframe.  */
-  else if (!tracing && strcmp (tracing_stop_reason, "tnotrun") == 0)
-    {
-      strcpy (own_buf, "U");
-      return;
-    }
-  else
-    val = get_trace_state_variable_value (num);
-
-  sprintf (own_buf, "V%s", phex_nz (val, 0));
-}
-
-/* Clear out the list of readonly regions.  */
-
-static void
-clear_readonly_regions (void)
-{
-  struct readonly_region *roreg;
-
-  while (readonly_regions)
-    {
-      roreg = readonly_regions;
-      readonly_regions = readonly_regions->next;
-      free (roreg);
-    }
-}
-
-/* Parse the collection of address ranges whose contents GDB believes
-   to be unchanging and so can be read directly from target memory
-   even while looking at a traceframe.  */
-
-static void
-cmd_qtro (char *own_buf)
-{
-  ULONGEST start, end;
-  struct readonly_region *roreg;
-  const char *packet = own_buf;
-
-  trace_debug ("Want to mark readonly regions");
-
-  clear_readonly_regions ();
-
-  packet += strlen ("QTro");
-
-  while (*packet == ':')
-    {
-      ++packet;  /* skip a colon */
-      packet = unpack_varlen_hex (packet, &start);
-      ++packet;  /* skip a comma */
-      packet = unpack_varlen_hex (packet, &end);
-
-      roreg = XNEW (struct readonly_region);
-      roreg->start = start;
-      roreg->end = end;
-      roreg->next = readonly_regions;
-      readonly_regions = roreg;
-      trace_debug ("Added readonly region from 0x%s to 0x%s",
-		   paddress (roreg->start), paddress (roreg->end));
-    }
-
-  write_ok (own_buf);
-}
-
-/* Test to see if the given range is in our list of readonly ranges.
-   We only test for being entirely within a range, GDB is not going to
-   send a single memory packet that spans multiple regions.  */
-
-int
-in_readonly_region (CORE_ADDR addr, ULONGEST length)
-{
-  struct readonly_region *roreg;
-
-  for (roreg = readonly_regions; roreg; roreg = roreg->next)
-    if (roreg->start <= addr && (addr + length - 1) <= roreg->end)
-      return 1;
-
-  return 0;
-}
-
-static CORE_ADDR gdb_jump_pad_head;
-
-/* Return the address of the next free jump space.  */
-
-static CORE_ADDR
-get_jump_space_head (void)
-{
-  if (gdb_jump_pad_head == 0)
-    {
-      if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer,
-				      &gdb_jump_pad_head))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "error extracting jump_pad_buffer");
-	}
-    }
-
-  return gdb_jump_pad_head;
-}
-
-/* Reserve USED bytes from the jump space.  */
-
-static void
-claim_jump_space (ULONGEST used)
-{
-  trace_debug ("claim_jump_space reserves %s bytes at %s",
-	       pulongest (used), paddress (gdb_jump_pad_head));
-  gdb_jump_pad_head += used;
-}
-
-static CORE_ADDR trampoline_buffer_head = 0;
-static CORE_ADDR trampoline_buffer_tail;
-
-/* Reserve USED bytes from the trampoline buffer and return the
-   address of the start of the reserved space in TRAMPOLINE.  Returns
-   non-zero if the space is successfully claimed.  */
-
-int
-claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline)
-{
-  if (!trampoline_buffer_head)
-    {
-      if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer,
-				      &trampoline_buffer_tail))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "error extracting trampoline_buffer");
-	}
-
-      if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end,
-				      &trampoline_buffer_head))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "error extracting trampoline_buffer_end");
-	}
-    }
-
-  /* Start claiming space from the top of the trampoline space.  If
-     the space is located at the bottom of the virtual address space,
-     this reduces the possibility that corruption will occur if a null
-     pointer is used to write to memory.  */
-  if (trampoline_buffer_head - trampoline_buffer_tail < used)
-    {
-      trace_debug ("claim_trampoline_space failed to reserve %s bytes",
-		   pulongest (used));
-      return 0;
-    }
-
-  trampoline_buffer_head -= used;
-
-  trace_debug ("claim_trampoline_space reserves %s bytes at %s",
-	       pulongest (used), paddress (trampoline_buffer_head));
-
-  *trampoline = trampoline_buffer_head;
-  return 1;
-}
-
-/* Returns non-zero if there is space allocated for use in trampolines
-   for fast tracepoints.  */
-
-int
-have_fast_tracepoint_trampoline_buffer (char *buf)
-{
-  CORE_ADDR trampoline_end, errbuf;
-
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end,
-				  &trampoline_end))
-    {
-      internal_error (__FILE__, __LINE__,
-		      "error extracting trampoline_buffer_end");
-    }
-  
-  if (buf)
-    {
-      buf[0] = '\0';
-      strcpy (buf, "was claiming");
-      if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_error,
-				  &errbuf))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "error extracting errbuf");
-	}
-
-      read_inferior_memory (errbuf, (unsigned char *) buf, 100);
-    }
-
-  return trampoline_end != 0;
-}
-
-/* Ask the IPA to probe the marker at ADDRESS.  Returns -1 if running
-   the command fails, or 0 otherwise.  If the command ran
-   successfully, but probing the marker failed, ERROUT will be filled
-   with the error to reply to GDB, and -1 is also returned.  This
-   allows directly passing IPA errors to GDB.  */
-
-static int
-probe_marker_at (CORE_ADDR address, char *errout)
-{
-  char cmd[IPA_CMD_BUF_SIZE];
-  int err;
-
-  sprintf (cmd, "probe_marker_at:%s", paddress (address));
-  err = run_inferior_command (cmd, strlen (cmd) + 1);
-
-  if (err == 0)
-    {
-      if (*cmd == 'E')
-	{
-	  strcpy (errout, cmd);
-	  return -1;
-	}
-    }
-
-  return err;
-}
-
-static void
-clone_fast_tracepoint (struct tracepoint *to, const struct tracepoint *from)
-{
-  to->jump_pad = from->jump_pad;
-  to->jump_pad_end = from->jump_pad_end;
-  to->trampoline = from->trampoline;
-  to->trampoline_end = from->trampoline_end;
-  to->adjusted_insn_addr = from->adjusted_insn_addr;
-  to->adjusted_insn_addr_end = from->adjusted_insn_addr_end;
-  to->handle = from->handle;
-
-  gdb_assert (from->handle);
-  inc_ref_fast_tracepoint_jump ((struct fast_tracepoint_jump *) from->handle);
-}
-
-#define MAX_JUMP_SIZE 20
-
-/* Install fast tracepoint.  Return 0 if successful, otherwise return
-   non-zero.  */
-
-static int
-install_fast_tracepoint (struct tracepoint *tpoint, char *errbuf)
-{
-  CORE_ADDR jentry, jump_entry;
-  CORE_ADDR trampoline;
-  CORE_ADDR collect;
-  ULONGEST trampoline_size;
-  int err = 0;
-  /* The jump to the jump pad of the last fast tracepoint
-     installed.  */
-  unsigned char fjump[MAX_JUMP_SIZE];
-  ULONGEST fjump_size;
-
-  if (tpoint->orig_size < target_get_min_fast_tracepoint_insn_len ())
-    {
-      trace_debug ("Requested a fast tracepoint on an instruction "
-		   "that is of less than the minimum length.");
-      return 0;
-    }
-
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_collect_ptr,
-				  &collect))
-    {
-      error ("error extracting gdb_collect_ptr");
-      return 1;
-    }
-
-  jentry = jump_entry = get_jump_space_head ();
-
-  trampoline = 0;
-  trampoline_size = 0;
-
-  /* Install the jump pad.  */
-  err = install_fast_tracepoint_jump_pad (tpoint->obj_addr_on_target,
-					  tpoint->address,
-					  collect,
-					  ipa_sym_addrs.addr_collecting,
-					  tpoint->orig_size,
-					  &jentry,
-					  &trampoline, &trampoline_size,
-					  fjump, &fjump_size,
-					  &tpoint->adjusted_insn_addr,
-					  &tpoint->adjusted_insn_addr_end,
-					  errbuf);
-
-  if (err)
-    return 1;
-
-  /* Wire it in.  */
-  tpoint->handle = set_fast_tracepoint_jump (tpoint->address, fjump,
-					     fjump_size);
-
-  if (tpoint->handle != NULL)
-    {
-      tpoint->jump_pad = jump_entry;
-      tpoint->jump_pad_end = jentry;
-      tpoint->trampoline = trampoline;
-      tpoint->trampoline_end = trampoline + trampoline_size;
-
-      /* Pad to 8-byte alignment.  */
-      jentry = ((jentry + 7) & ~0x7);
-      claim_jump_space (jentry - jump_entry);
-    }
-
-  return 0;
-}
-
-
-/* Install tracepoint TPOINT, and write reply message in OWN_BUF.  */
-
-static void
-install_tracepoint (struct tracepoint *tpoint, char *own_buf)
-{
-  tpoint->handle = NULL;
-  *own_buf = '\0';
-
-  if (tpoint->type == trap_tracepoint)
-    {
-      /* Tracepoints are installed as memory breakpoints.  Just go
-	 ahead and install the trap.  The breakpoints module
-	 handles duplicated breakpoints, and the memory read
-	 routine handles un-patching traps from memory reads.  */
-      tpoint->handle = set_breakpoint_at (tpoint->address,
-					  tracepoint_handler);
-    }
-  else if (tpoint->type == fast_tracepoint || tpoint->type == static_tracepoint)
-    {
-      if (!agent_loaded_p ())
-	{
-	  trace_debug ("Requested a %s tracepoint, but fast "
-		       "tracepoints aren't supported.",
-		       tpoint->type == static_tracepoint ? "static" : "fast");
-	  write_e_ipa_not_loaded (own_buf);
-	  return;
-	}
-      if (tpoint->type == static_tracepoint
-	  && !in_process_agent_supports_ust ())
-	{
-	  trace_debug ("Requested a static tracepoint, but static "
-		       "tracepoints are not supported.");
-	  write_e_ust_not_loaded (own_buf);
-	  return;
-	}
-
-      if (tpoint->type == fast_tracepoint)
-	install_fast_tracepoint (tpoint, own_buf);
-      else
-	{
-	  if (probe_marker_at (tpoint->address, own_buf) == 0)
-	    tpoint->handle = (void *) -1;
-	}
-
-    }
-  else
-    internal_error (__FILE__, __LINE__, "Unknown tracepoint type");
-
-  if (tpoint->handle == NULL)
-    {
-      if (*own_buf == '\0')
-	write_enn (own_buf);
-    }
-  else
-    write_ok (own_buf);
-}
-
-static void download_tracepoint_1 (struct tracepoint *tpoint);
-
-static void
-cmd_qtstart (char *packet)
-{
-  struct tracepoint *tpoint, *prev_ftpoint, *prev_stpoint;
-  CORE_ADDR tpptr = 0, prev_tpptr = 0;
-
-  trace_debug ("Starting the trace");
-
-  /* Pause all threads temporarily while we patch tracepoints.  */
-  pause_all (0);
-
-  /* Get threads out of jump pads.  Safe to do here, since this is a
-     top level command.  And, required to do here, since we're
-     deleting/rewriting jump pads.  */
-
-  stabilize_threads ();
-
-  /* Freeze threads.  */
-  pause_all (1);
-
-  /* Sync the fast tracepoints list in the inferior ftlib.  */
-  if (agent_loaded_p ())
-    download_trace_state_variables ();
-
-  /* No previous fast tpoint yet.  */
-  prev_ftpoint = NULL;
-
-  /* No previous static tpoint yet.  */
-  prev_stpoint = NULL;
-
-  *packet = '\0';
-
-  if (agent_loaded_p ())
-    {
-      /* Tell IPA about the correct tdesc.  */
-      if (write_inferior_integer (ipa_sym_addrs.addr_ipa_tdesc_idx,
-				  target_get_ipa_tdesc_idx ()))
-        error ("Error setting ipa_tdesc_idx variable in lib");
-    }
-
-  /* Start out empty.  */
-  if (agent_loaded_p ())
-    write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, 0);
-
-  /* Download and install tracepoints.  */
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    {
-      /* Ensure all the hit counts start at zero.  */
-      tpoint->hit_count = 0;
-      tpoint->traceframe_usage = 0;
-
-      if (tpoint->type == trap_tracepoint)
-	{
-	  /* Tracepoints are installed as memory breakpoints.  Just go
-	     ahead and install the trap.  The breakpoints module
-	     handles duplicated breakpoints, and the memory read
-	     routine handles un-patching traps from memory reads.  */
-	  tpoint->handle = set_breakpoint_at (tpoint->address,
-					      tracepoint_handler);
-	}
-      else if (tpoint->type == fast_tracepoint
-	       || tpoint->type == static_tracepoint)
-	{
-	  if (maybe_write_ipa_not_loaded (packet))
-	    {
-	      trace_debug ("Requested a %s tracepoint, but fast "
-			   "tracepoints aren't supported.",
-			   tpoint->type == static_tracepoint
-			   ? "static" : "fast");
-	      break;
-	    }
-
-	  if (tpoint->type == fast_tracepoint)
-	    {
-	      int use_agent_p
-		= use_agent && agent_capability_check (AGENT_CAPA_FAST_TRACE);
-
-	      if (prev_ftpoint != NULL
-		  && prev_ftpoint->address == tpoint->address)
-		{
-		  if (use_agent_p)
-		    tracepoint_send_agent (tpoint);
-		  else
-		    download_tracepoint_1 (tpoint);
-
-		  clone_fast_tracepoint (tpoint, prev_ftpoint);
-		}
-	      else
-		{
-		  /* Tracepoint is installed successfully?  */
-		  int installed = 0;
-
-		  /* Download and install fast tracepoint by agent.  */
-		  if (use_agent_p)
-		    installed = !tracepoint_send_agent (tpoint);
-		  else
-		    {
-		      download_tracepoint_1 (tpoint);
-		      installed = !install_fast_tracepoint (tpoint, packet);
-		    }
-
-		  if (installed)
-		    prev_ftpoint = tpoint;
-		}
-	    }
-	  else
-	    {
-	      if (!in_process_agent_supports_ust ())
-		{
-		  trace_debug ("Requested a static tracepoint, but static "
-			       "tracepoints are not supported.");
-		  break;
-		}
-
-	      download_tracepoint_1 (tpoint);
-	      /* Can only probe a given marker once.  */
-	      if (prev_stpoint != NULL
-		  && prev_stpoint->address == tpoint->address)
-		tpoint->handle = (void *) -1;
-	      else
-		{
-		  if (probe_marker_at (tpoint->address, packet) == 0)
-		    {
-		      tpoint->handle = (void *) -1;
-
-		      /* So that we can handle multiple static tracepoints
-			 at the same address easily.  */
-		      prev_stpoint = tpoint;
-		    }
-		}
-	    }
-
-	  prev_tpptr = tpptr;
-	  tpptr = tpoint->obj_addr_on_target;
-
-	  if (tpoint == tracepoints)
-	    /* First object in list, set the head pointer in the
-	       inferior.  */
-	    write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, tpptr);
-	  else
-	    write_inferior_data_pointer (prev_tpptr
-					 + offsetof (struct tracepoint, next),
-					 tpptr);
-	}
-
-      /* Any failure in the inner loop is sufficient cause to give
-	 up.  */
-      if (tpoint->handle == NULL)
-	break;
-    }
-
-  /* Any error in tracepoint insertion is unacceptable; better to
-     address the problem now, than end up with a useless or misleading
-     trace run.  */
-  if (tpoint != NULL)
-    {
-      clear_installed_tracepoints ();
-      if (*packet == '\0')
-	write_enn (packet);
-      unpause_all (1);
-      return;
-    }
-
-  stopping_tracepoint = NULL;
-  trace_buffer_is_full = 0;
-  expr_eval_result = expr_eval_no_error;
-  error_tracepoint = NULL;
-  tracing_start_time = get_timestamp ();
-
-  /* Tracing is now active, hits will now start being logged.  */
-  tracing = 1;
-
-  if (agent_loaded_p ())
-    {
-      if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 1))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "Error setting tracing variable in lib");
-	}
-
-      if (write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint,
-				       0))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "Error clearing stopping_tracepoint variable"
-			  " in lib");
-	}
-
-      if (write_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full, 0))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "Error clearing trace_buffer_is_full variable"
-			  " in lib");
-	}
-
-      stop_tracing_bkpt = set_breakpoint_at (ipa_sym_addrs.addr_stop_tracing,
-					     stop_tracing_handler);
-      if (stop_tracing_bkpt == NULL)
-	error ("Error setting stop_tracing breakpoint");
-
-      flush_trace_buffer_bkpt
-	= set_breakpoint_at (ipa_sym_addrs.addr_flush_trace_buffer,
-			     flush_trace_buffer_handler);
-      if (flush_trace_buffer_bkpt == NULL)
-	error ("Error setting flush_trace_buffer breakpoint");
-    }
-
-  unpause_all (1);
-
-  write_ok (packet);
-}
-
-/* End a tracing run, filling in a stop reason to report back to GDB,
-   and removing the tracepoints from the code.  */
-
-void
-stop_tracing (void)
-{
-  if (!tracing)
-    {
-      trace_debug ("Tracing is already off, ignoring");
-      return;
-    }
-
-  trace_debug ("Stopping the trace");
-
-  /* Pause all threads before removing fast jumps from memory,
-     breakpoints, and touching IPA state variables (inferior memory).
-     Some thread may hit the internal tracing breakpoints, or be
-     collecting this moment, but that's ok, we don't release the
-     tpoint object's memory or the jump pads here (we only do that
-     when we're sure we can move all threads out of the jump pads).
-     We can't now, since we may be getting here due to the inferior
-     agent calling us.  */
-  pause_all (1);
-
-  /* Stop logging. Tracepoints can still be hit, but they will not be
-     recorded.  */
-  tracing = 0;
-  if (agent_loaded_p ())
-    {
-      if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 0))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "Error clearing tracing variable in lib");
-	}
-    }
-
-  tracing_stop_time = get_timestamp ();
-  tracing_stop_reason = "t???";
-  tracing_stop_tpnum = 0;
-  if (stopping_tracepoint)
-    {
-      trace_debug ("Stopping the trace because "
-		   "tracepoint %d was hit %" PRIu64 " times",
-		   stopping_tracepoint->number,
-		   stopping_tracepoint->pass_count);
-      tracing_stop_reason = "tpasscount";
-      tracing_stop_tpnum = stopping_tracepoint->number;
-    }
-  else if (trace_buffer_is_full)
-    {
-      trace_debug ("Stopping the trace because the trace buffer is full");
-      tracing_stop_reason = "tfull";
-    }
-  else if (expr_eval_result != expr_eval_no_error)
-    {
-      trace_debug ("Stopping the trace because of an expression eval error");
-      tracing_stop_reason = eval_result_names[expr_eval_result];
-      tracing_stop_tpnum = error_tracepoint->number;
-    }
-#ifndef IN_PROCESS_AGENT
-  else if (!gdb_connected ())
-    {
-      trace_debug ("Stopping the trace because GDB disconnected");
-      tracing_stop_reason = "tdisconnected";
-    }
-#endif
-  else
-    {
-      trace_debug ("Stopping the trace because of a tstop command");
-      tracing_stop_reason = "tstop";
-    }
-
-  stopping_tracepoint = NULL;
-  error_tracepoint = NULL;
-
-  /* Clear out the tracepoints.  */
-  clear_installed_tracepoints ();
-
-  if (agent_loaded_p ())
-    {
-      /* Pull in fast tracepoint trace frames from the inferior lib
-	 buffer into our buffer, even if our buffer is already full,
-	 because we want to present the full number of created frames
-	 in addition to what fit in the trace buffer.  */
-      upload_fast_traceframes ();
-    }
-
-  if (stop_tracing_bkpt != NULL)
-    {
-      delete_breakpoint (stop_tracing_bkpt);
-      stop_tracing_bkpt = NULL;
-    }
-
-  if (flush_trace_buffer_bkpt != NULL)
-    {
-      delete_breakpoint (flush_trace_buffer_bkpt);
-      flush_trace_buffer_bkpt = NULL;
-    }
-
-  unpause_all (1);
-}
-
-static int
-stop_tracing_handler (CORE_ADDR addr)
-{
-  trace_debug ("lib hit stop_tracing");
-
-  /* Don't actually handle it here.  When we stop tracing we remove
-     breakpoints from the inferior, and that is not allowed in a
-     breakpoint handler (as the caller is walking the breakpoint
-     list).  */
-  return 0;
-}
-
-static int
-flush_trace_buffer_handler (CORE_ADDR addr)
-{
-  trace_debug ("lib hit flush_trace_buffer");
-  return 0;
-}
-
-static void
-cmd_qtstop (char *packet)
-{
-  stop_tracing ();
-  write_ok (packet);
-}
-
-static void
-cmd_qtdisconnected (char *own_buf)
-{
-  ULONGEST setting;
-  char *packet = own_buf;
-
-  packet += strlen ("QTDisconnected:");
-
-  unpack_varlen_hex (packet, &setting);
-
-  write_ok (own_buf);
-
-  disconnected_tracing = setting;
-}
-
-static void
-cmd_qtframe (char *own_buf)
-{
-  client_state &cs = get_client_state ();
-  ULONGEST frame, pc, lo, hi, num;
-  int tfnum, tpnum;
-  struct traceframe *tframe;
-  const char *packet = own_buf;
-
-  packet += strlen ("QTFrame:");
-
-  if (startswith (packet, "pc:"))
-    {
-      packet += strlen ("pc:");
-      unpack_varlen_hex (packet, &pc);
-      trace_debug ("Want to find next traceframe at pc=0x%s", paddress (pc));
-      tframe = find_next_traceframe_in_range (pc, pc, 1, &tfnum);
-    }
-  else if (startswith (packet, "range:"))
-    {
-      packet += strlen ("range:");
-      packet = unpack_varlen_hex (packet, &lo);
-      ++packet;
-      unpack_varlen_hex (packet, &hi);
-      trace_debug ("Want to find next traceframe in the range 0x%s to 0x%s",
-		   paddress (lo), paddress (hi));
-      tframe = find_next_traceframe_in_range (lo, hi, 1, &tfnum);
-    }
-  else if (startswith (packet, "outside:"))
-    {
-      packet += strlen ("outside:");
-      packet = unpack_varlen_hex (packet, &lo);
-      ++packet;
-      unpack_varlen_hex (packet, &hi);
-      trace_debug ("Want to find next traceframe "
-		   "outside the range 0x%s to 0x%s",
-		   paddress (lo), paddress (hi));
-      tframe = find_next_traceframe_in_range (lo, hi, 0, &tfnum);
-    }
-  else if (startswith (packet, "tdp:"))
-    {
-      packet += strlen ("tdp:");
-      unpack_varlen_hex (packet, &num);
-      tpnum = (int) num;
-      trace_debug ("Want to find next traceframe for tracepoint %d", tpnum);
-      tframe = find_next_traceframe_by_tracepoint (tpnum, &tfnum);
-    }
-  else
-    {
-      unpack_varlen_hex (packet, &frame);
-      tfnum = (int) frame;
-      if (tfnum == -1)
-	{
-	  trace_debug ("Want to stop looking at traceframes");
-	  cs.current_traceframe = -1;
-	  write_ok (own_buf);
-	  return;
-	}
-      trace_debug ("Want to look at traceframe %d", tfnum);
-      tframe = find_traceframe (tfnum);
-    }
-
-  if (tframe)
-    {
-      cs.current_traceframe = tfnum;
-      sprintf (own_buf, "F%xT%x", tfnum, tframe->tpnum);
-    }
-  else
-    sprintf (own_buf, "F-1");
-}
-
-static void
-cmd_qtstatus (char *packet)
-{
-  char *stop_reason_rsp = NULL;
-  char *buf1, *buf2, *buf3;
-  const char *str;
-  int slen;
-
-  /* Translate the plain text of the notes back into hex for
-     transmission.  */
-
-  str = (tracing_user_name ? tracing_user_name : "");
-  slen = strlen (str);
-  buf1 = (char *) alloca (slen * 2 + 1);
-  bin2hex ((gdb_byte *) str, buf1, slen);
-
-  str = (tracing_notes ? tracing_notes : "");
-  slen = strlen (str);
-  buf2 = (char *) alloca (slen * 2 + 1);
-  bin2hex ((gdb_byte *) str, buf2, slen);
-
-  str = (tracing_stop_note ? tracing_stop_note : "");
-  slen = strlen (str);
-  buf3 = (char *) alloca (slen * 2 + 1);
-  bin2hex ((gdb_byte *) str, buf3, slen);
-
-  trace_debug ("Returning trace status as %d, stop reason %s",
-	       tracing, tracing_stop_reason);
-
-  if (agent_loaded_p ())
-    {
-      pause_all (1);
-
-      upload_fast_traceframes ();
-
-      unpause_all (1);
-   }
-
-  stop_reason_rsp = (char *) tracing_stop_reason;
-
-  /* The user visible error string in terror needs to be hex encoded.
-     We leave it as plain string in `tracing_stop_reason' to ease
-     debugging.  */
-  if (startswith (stop_reason_rsp, "terror:"))
-    {
-      const char *result_name;
-      int hexstr_len;
-      char *p;
-
-      result_name = stop_reason_rsp + strlen ("terror:");
-      hexstr_len = strlen (result_name) * 2;
-      p = stop_reason_rsp
-	= (char *) alloca (strlen ("terror:") + hexstr_len + 1);
-      strcpy (p, "terror:");
-      p += strlen (p);
-      bin2hex ((gdb_byte *) result_name, p, strlen (result_name));
-    }
-
-  /* If this was a forced stop, include any stop note that was supplied.  */
-  if (strcmp (stop_reason_rsp, "tstop") == 0)
-    {
-      stop_reason_rsp = (char *) alloca (strlen ("tstop:") + strlen (buf3) + 1);
-      strcpy (stop_reason_rsp, "tstop:");
-      strcat (stop_reason_rsp, buf3);
-    }
-
-  sprintf (packet,
-	   "T%d;"
-	   "%s:%x;"
-	   "tframes:%x;tcreated:%x;"
-	   "tfree:%x;tsize:%s;"
-	   "circular:%d;"
-	   "disconn:%d;"
-	   "starttime:%s;stoptime:%s;"
-	   "username:%s;notes:%s:",
-	   tracing ? 1 : 0,
-	   stop_reason_rsp, tracing_stop_tpnum,
-	   traceframe_count, traceframes_created,
-	   free_space (), phex_nz (trace_buffer_hi - trace_buffer_lo, 0),
-	   circular_trace_buffer,
-	   disconnected_tracing,
-	   phex_nz (tracing_start_time, sizeof (tracing_start_time)),
-	   phex_nz (tracing_stop_time, sizeof (tracing_stop_time)),
-	   buf1, buf2);
-}
-
-static void
-cmd_qtp (char *own_buf)
-{
-  ULONGEST num, addr;
-  struct tracepoint *tpoint;
-  const char *packet = own_buf;
-
-  packet += strlen ("qTP:");
-
-  packet = unpack_varlen_hex (packet, &num);
-  ++packet; /* skip a colon */
-  packet = unpack_varlen_hex (packet, &addr);
-
-  /* See if we already have this tracepoint.  */
-  tpoint = find_tracepoint (num, addr);
-
-  if (!tpoint)
-    {
-      trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found",
-		   (int) num, paddress (addr));
-      write_enn (own_buf);
-      return;
-    }
-
-  sprintf (own_buf, "V%" PRIu64 ":%" PRIu64 "", tpoint->hit_count,
-	   tpoint->traceframe_usage);
-}
-
-/* State variables to help return all the tracepoint bits.  */
-static struct tracepoint *cur_tpoint;
-static unsigned int cur_action;
-static unsigned int cur_step_action;
-static struct source_string *cur_source_string;
-static struct trace_state_variable *cur_tsv;
-
-/* Compose a response that is an imitation of the syntax by which the
-   tracepoint was originally downloaded.  */
-
-static void
-response_tracepoint (char *packet, struct tracepoint *tpoint)
-{
-  char *buf;
-
-  sprintf (packet, "T%x:%s:%c:%" PRIx64 ":%" PRIx64, tpoint->number,
-	   paddress (tpoint->address),
-	   (tpoint->enabled ? 'E' : 'D'), tpoint->step_count,
-	   tpoint->pass_count);
-  if (tpoint->type == fast_tracepoint)
-    sprintf (packet + strlen (packet), ":F%x", tpoint->orig_size);
-  else if (tpoint->type == static_tracepoint)
-    sprintf (packet + strlen (packet), ":S");
-
-  if (tpoint->cond)
-    {
-      buf = gdb_unparse_agent_expr (tpoint->cond);
-      sprintf (packet + strlen (packet), ":X%x,%s",
-	       tpoint->cond->length, buf);
-      free (buf);
-    }
-}
-
-/* Compose a response that is an imitation of the syntax by which the
-   tracepoint action was originally downloaded (with the difference
-   that due to the way we store the actions, this will output a packet
-   per action, while GDB could have combined more than one action
-   per-packet.  */
-
-static void
-response_action (char *packet, struct tracepoint *tpoint,
-		 char *taction, int step)
-{
-  sprintf (packet, "%c%x:%s:%s",
-	   (step ? 'S' : 'A'), tpoint->number, paddress (tpoint->address),
-	   taction);
-}
-
-/* Compose a response that is an imitation of the syntax by which the
-   tracepoint source piece was originally downloaded.  */
-
-static void
-response_source (char *packet,
-		 struct tracepoint *tpoint, struct source_string *src)
-{
-  char *buf;
-  int len;
-
-  len = strlen (src->str);
-  buf = (char *) alloca (len * 2 + 1);
-  bin2hex ((gdb_byte *) src->str, buf, len);
-
-  sprintf (packet, "Z%x:%s:%s:%x:%x:%s",
-	   tpoint->number, paddress (tpoint->address),
-	   src->type, 0, len, buf);
-}
-
-/* Return the first piece of tracepoint definition, and initialize the
-   state machine that will iterate through all the tracepoint
-   bits.  */
-
-static void
-cmd_qtfp (char *packet)
-{
-  trace_debug ("Returning first tracepoint definition piece");
-
-  cur_tpoint = tracepoints;
-  cur_action = cur_step_action = 0;
-  cur_source_string = NULL;
-
-  if (cur_tpoint)
-    response_tracepoint (packet, cur_tpoint);
-  else
-    strcpy (packet, "l");
-}
-
-/* Return additional pieces of tracepoint definition.  Each action and
-   stepping action must go into its own packet, because of packet size
-   limits, and so we use state variables to deliver one piece at a
-   time.  */
-
-static void
-cmd_qtsp (char *packet)
-{
-  trace_debug ("Returning subsequent tracepoint definition piece");
-
-  if (!cur_tpoint)
-    {
-      /* This case would normally never occur, but be prepared for
-	 GDB misbehavior.  */
-      strcpy (packet, "l");
-    }
-  else if (cur_action < cur_tpoint->numactions)
-    {
-      response_action (packet, cur_tpoint,
-		       cur_tpoint->actions_str[cur_action], 0);
-      ++cur_action;
-    }
-  else if (cur_step_action < cur_tpoint->num_step_actions)
-    {
-      response_action (packet, cur_tpoint,
-		       cur_tpoint->step_actions_str[cur_step_action], 1);
-      ++cur_step_action;
-    }
-  else if ((cur_source_string
-	    ? cur_source_string->next
-	    : cur_tpoint->source_strings))
-    {
-      if (cur_source_string)
-	cur_source_string = cur_source_string->next;
-      else
-	cur_source_string = cur_tpoint->source_strings;
-      response_source (packet, cur_tpoint, cur_source_string);
-    }
-  else
-    {
-      cur_tpoint = cur_tpoint->next;
-      cur_action = cur_step_action = 0;
-      cur_source_string = NULL;
-      if (cur_tpoint)
-	response_tracepoint (packet, cur_tpoint);
-      else
-	strcpy (packet, "l");
-    }
-}
-
-/* Compose a response that is an imitation of the syntax by which the
-   trace state variable was originally downloaded.  */
-
-static void
-response_tsv (char *packet, struct trace_state_variable *tsv)
-{
-  char *buf = (char *) "";
-  int namelen;
-
-  if (tsv->name)
-    {
-      namelen = strlen (tsv->name);
-      buf = (char *) alloca (namelen * 2 + 1);
-      bin2hex ((gdb_byte *) tsv->name, buf, namelen);
-    }
-
-  sprintf (packet, "%x:%s:%x:%s", tsv->number, phex_nz (tsv->initial_value, 0),
-	   tsv->getter ? 1 : 0, buf);
-}
-
-/* Return the first trace state variable definition, and initialize
-   the state machine that will iterate through all the tsv bits.  */
-
-static void
-cmd_qtfv (char *packet)
-{
-  trace_debug ("Returning first trace state variable definition");
-
-  cur_tsv = trace_state_variables;
-
-  if (cur_tsv)
-    response_tsv (packet, cur_tsv);
-  else
-    strcpy (packet, "l");
-}
-
-/* Return additional trace state variable definitions. */
-
-static void
-cmd_qtsv (char *packet)
-{
-  trace_debug ("Returning additional trace state variable definition");
-
-  if (cur_tsv)
-    {
-      cur_tsv = cur_tsv->next;
-      if (cur_tsv)
-	response_tsv (packet, cur_tsv);
-      else
-	strcpy (packet, "l");
-    }
-  else
-    strcpy (packet, "l");
-}
-
-/* Return the first static tracepoint marker, and initialize the state
-   machine that will iterate through all the static tracepoints
-   markers.  */
-
-static void
-cmd_qtfstm (char *packet)
-{
-  if (!maybe_write_ipa_ust_not_loaded (packet))
-    run_inferior_command (packet, strlen (packet) + 1);
-}
-
-/* Return additional static tracepoints markers.  */
-
-static void
-cmd_qtsstm (char *packet)
-{
-  if (!maybe_write_ipa_ust_not_loaded (packet))
-    run_inferior_command (packet, strlen (packet) + 1);
-}
-
-/* Return the definition of the static tracepoint at a given address.
-   Result packet is the same as qTsST's.  */
-
-static void
-cmd_qtstmat (char *packet)
-{
-  if (!maybe_write_ipa_ust_not_loaded (packet))
-    run_inferior_command (packet, strlen (packet) + 1);
-}
-
-/* Sent the agent a command to close it.  */
-
-void
-gdb_agent_about_to_close (int pid)
-{
-  char buf[IPA_CMD_BUF_SIZE];
-
-  if (!maybe_write_ipa_not_loaded (buf))
-    {
-      struct thread_info *saved_thread;
-
-      saved_thread = current_thread;
-
-      /* Find any thread which belongs to process PID.  */
-      current_thread = find_any_thread_of_pid (pid);
-
-      strcpy (buf, "close");
-
-      run_inferior_command (buf, strlen (buf) + 1);
-
-      current_thread = saved_thread;
-    }
-}
-
-/* Return the minimum instruction size needed for fast tracepoints as a
-   hexadecimal number.  */
-
-static void
-cmd_qtminftpilen (char *packet)
-{
-  if (current_thread == NULL)
-    {
-      /* Indicate that the minimum length is currently unknown.  */
-      strcpy (packet, "0");
-      return;
-    }
-
-  sprintf (packet, "%x", target_get_min_fast_tracepoint_insn_len ());
-}
-
-/* Respond to qTBuffer packet with a block of raw data from the trace
-   buffer.  GDB may ask for a lot, but we are allowed to reply with
-   only as much as will fit within packet limits or whatever.  */
-
-static void
-cmd_qtbuffer (char *own_buf)
-{
-  ULONGEST offset, num, tot;
-  unsigned char *tbp;
-  const char *packet = own_buf;
-
-  packet += strlen ("qTBuffer:");
-
-  packet = unpack_varlen_hex (packet, &offset);
-  ++packet; /* skip a comma */
-  unpack_varlen_hex (packet, &num);
-
-  trace_debug ("Want to get trace buffer, %d bytes at offset 0x%s",
-	       (int) num, phex_nz (offset, 0));
-
-  tot = (trace_buffer_hi - trace_buffer_lo) - free_space ();
-
-  /* If we're right at the end, reply specially that we're done.  */
-  if (offset == tot)
-    {
-      strcpy (own_buf, "l");
-      return;
-    }
-
-  /* Object to any other out-of-bounds request.  */
-  if (offset > tot)
-    {
-      write_enn (own_buf);
-      return;
-    }
-
-  /* Compute the pointer corresponding to the given offset, accounting
-     for wraparound.  */
-  tbp = trace_buffer_start + offset;
-  if (tbp >= trace_buffer_wrap)
-    tbp -= (trace_buffer_wrap - trace_buffer_lo);
-
-  /* Trim to the remaining bytes if we're close to the end.  */
-  if (num > tot - offset)
-    num = tot - offset;
-
-  /* Trim to available packet size.  */
-  if (num >= (PBUFSIZ - 16) / 2 )
-    num = (PBUFSIZ - 16) / 2;
-
-  bin2hex (tbp, own_buf, num);
-}
-
-static void
-cmd_bigqtbuffer_circular (char *own_buf)
-{
-  ULONGEST val;
-  char *packet = own_buf;
-
-  packet += strlen ("QTBuffer:circular:");
-
-  unpack_varlen_hex (packet, &val);
-  circular_trace_buffer = val;
-  trace_debug ("Trace buffer is now %s",
-	       circular_trace_buffer ? "circular" : "linear");
-  write_ok (own_buf);
-}
-
-static void
-cmd_bigqtbuffer_size (char *own_buf)
-{
-  ULONGEST val;
-  LONGEST sval;
-  char *packet = own_buf;
-
-  /* Can't change the size during a tracing run.  */
-  if (tracing)
-    {
-      write_enn (own_buf);
-      return;
-    }
-
-  packet += strlen ("QTBuffer:size:");
-
-  /* -1 is sent as literal "-1".  */
-  if (strcmp (packet, "-1") == 0)
-    sval = DEFAULT_TRACE_BUFFER_SIZE;
-  else
-    {
-      unpack_varlen_hex (packet, &val);
-      sval = (LONGEST) val;
-    }
-
-  init_trace_buffer (sval);
-  trace_debug ("Trace buffer is now %s bytes",
-	       plongest (trace_buffer_size));
-  write_ok (own_buf);
-}
-
-static void
-cmd_qtnotes (char *own_buf)
-{
-  size_t nbytes;
-  char *saved, *user, *notes, *stopnote;
-  char *packet = own_buf;
-
-  packet += strlen ("QTNotes:");
-
-  while (*packet)
-    {
-      if (startswith (packet, "user:"))
-	{
-	  packet += strlen ("user:");
-	  saved = packet;
-	  packet = strchr (packet, ';');
-	  nbytes = (packet - saved) / 2;
-	  user = (char *) xmalloc (nbytes + 1);
-	  nbytes = hex2bin (saved, (gdb_byte *) user, nbytes);
-	  user[nbytes] = '\0';
-	  ++packet; /* skip the semicolon */
-	  trace_debug ("User is '%s'", user);
-	  xfree (tracing_user_name);
-	  tracing_user_name = user;
-	}
-      else if (startswith (packet, "notes:"))
-	{
-	  packet += strlen ("notes:");
-	  saved = packet;
-	  packet = strchr (packet, ';');
-	  nbytes = (packet - saved) / 2;
-	  notes = (char *) xmalloc (nbytes + 1);
-	  nbytes = hex2bin (saved, (gdb_byte *) notes, nbytes);
-	  notes[nbytes] = '\0';
-	  ++packet; /* skip the semicolon */
-	  trace_debug ("Notes is '%s'", notes);
-	  xfree (tracing_notes);
-	  tracing_notes = notes;
-	}
-      else if (startswith (packet, "tstop:"))
-	{
-	  packet += strlen ("tstop:");
-	  saved = packet;
-	  packet = strchr (packet, ';');
-	  nbytes = (packet - saved) / 2;
-	  stopnote = (char *) xmalloc (nbytes + 1);
-	  nbytes = hex2bin (saved, (gdb_byte *) stopnote, nbytes);
-	  stopnote[nbytes] = '\0';
-	  ++packet; /* skip the semicolon */
-	  trace_debug ("tstop note is '%s'", stopnote);
-	  xfree (tracing_stop_note);
-	  tracing_stop_note = stopnote;
-	}
-      else
-	break;
-    }
-
-  write_ok (own_buf);
-}
-
-int
-handle_tracepoint_general_set (char *packet)
-{
-  if (strcmp ("QTinit", packet) == 0)
-    {
-      cmd_qtinit (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTDP:"))
-    {
-      cmd_qtdp (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTDPsrc:"))
-    {
-      cmd_qtdpsrc (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTEnable:"))
-    {
-      cmd_qtenable_disable (packet, 1);
-      return 1;
-    }
-  else if (startswith (packet, "QTDisable:"))
-    {
-      cmd_qtenable_disable (packet, 0);
-      return 1;
-    }
-  else if (startswith (packet, "QTDV:"))
-    {
-      cmd_qtdv (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTro:"))
-    {
-      cmd_qtro (packet);
-      return 1;
-    }
-  else if (strcmp ("QTStart", packet) == 0)
-    {
-      cmd_qtstart (packet);
-      return 1;
-    }
-  else if (strcmp ("QTStop", packet) == 0)
-    {
-      cmd_qtstop (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTDisconnected:"))
-    {
-      cmd_qtdisconnected (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTFrame:"))
-    {
-      cmd_qtframe (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTBuffer:circular:"))
-    {
-      cmd_bigqtbuffer_circular (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTBuffer:size:"))
-    {
-      cmd_bigqtbuffer_size (packet);
-      return 1;
-    }
-  else if (startswith (packet, "QTNotes:"))
-    {
-      cmd_qtnotes (packet);
-      return 1;
-    }
-
-  return 0;
-}
-
-int
-handle_tracepoint_query (char *packet)
-{
-  if (strcmp ("qTStatus", packet) == 0)
-    {
-      cmd_qtstatus (packet);
-      return 1;
-    }
-  else if (startswith (packet, "qTP:"))
-    {
-      cmd_qtp (packet);
-      return 1;
-    }
-  else if (strcmp ("qTfP", packet) == 0)
-    {
-      cmd_qtfp (packet);
-      return 1;
-    }
-  else if (strcmp ("qTsP", packet) == 0)
-    {
-      cmd_qtsp (packet);
-      return 1;
-    }
-  else if (strcmp ("qTfV", packet) == 0)
-    {
-      cmd_qtfv (packet);
-      return 1;
-    }
-  else if (strcmp ("qTsV", packet) == 0)
-    {
-      cmd_qtsv (packet);
-      return 1;
-    }
-  else if (startswith (packet, "qTV:"))
-    {
-      cmd_qtv (packet);
-      return 1;
-    }
-  else if (startswith (packet, "qTBuffer:"))
-    {
-      cmd_qtbuffer (packet);
-      return 1;
-    }
-  else if (strcmp ("qTfSTM", packet) == 0)
-    {
-      cmd_qtfstm (packet);
-      return 1;
-    }
-  else if (strcmp ("qTsSTM", packet) == 0)
-    {
-      cmd_qtsstm (packet);
-      return 1;
-    }
-  else if (startswith (packet, "qTSTMat:"))
-    {
-      cmd_qtstmat (packet);
-      return 1;
-    }
-  else if (strcmp ("qTMinFTPILen", packet) == 0)
-    {
-      cmd_qtminftpilen (packet);
-      return 1;
-    }
-
-  return 0;
-}
-
-#endif
-#ifndef IN_PROCESS_AGENT
-
-/* Call this when thread TINFO has hit the tracepoint defined by
-   TP_NUMBER and TP_ADDRESS, and that tracepoint has a while-stepping
-   action.  This adds a while-stepping collecting state item to the
-   threads' collecting state list, so that we can keep track of
-   multiple simultaneous while-stepping actions being collected by the
-   same thread.  This can happen in cases like:
-
-    ff0001  INSN1 <-- TP1, while-stepping 10 collect $regs
-    ff0002  INSN2
-    ff0003  INSN3 <-- TP2, collect $regs
-    ff0004  INSN4 <-- TP3, while-stepping 10 collect $regs
-    ff0005  INSN5
-
-   Notice that when instruction INSN5 is reached, the while-stepping
-   actions of both TP1 and TP3 are still being collected, and that TP2
-   had been collected meanwhile.  The whole range of ff0001-ff0005
-   should be single-stepped, due to at least TP1's while-stepping
-   action covering the whole range.  */
-
-static void
-add_while_stepping_state (struct thread_info *tinfo,
-			  int tp_number, CORE_ADDR tp_address)
-{
-  struct wstep_state *wstep = XNEW (struct wstep_state);
-
-  wstep->next = tinfo->while_stepping;
-
-  wstep->tp_number = tp_number;
-  wstep->tp_address = tp_address;
-  wstep->current_step = 0;
-
-  tinfo->while_stepping = wstep;
-}
-
-/* Release the while-stepping collecting state WSTEP.  */
-
-static void
-release_while_stepping_state (struct wstep_state *wstep)
-{
-  free (wstep);
-}
-
-/* Release all while-stepping collecting states currently associated
-   with thread TINFO.  */
-
-void
-release_while_stepping_state_list (struct thread_info *tinfo)
-{
-  struct wstep_state *head;
-
-  while (tinfo->while_stepping)
-    {
-      head = tinfo->while_stepping;
-      tinfo->while_stepping = head->next;
-      release_while_stepping_state (head);
-    }
-}
-
-/* If TINFO was handling a 'while-stepping' action, the step has
-   finished, so collect any step data needed, and check if any more
-   steps are required.  Return true if the thread was indeed
-   collecting tracepoint data, false otherwise.  */
-
-int
-tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc)
-{
-  struct tracepoint *tpoint;
-  struct wstep_state *wstep;
-  struct wstep_state **wstep_link;
-  struct trap_tracepoint_ctx ctx;
-
-  /* Pull in fast tracepoint trace frames from the inferior lib buffer into
-     our buffer.  */
-  if (agent_loaded_p ())
-    upload_fast_traceframes ();
-
-  /* Check if we were indeed collecting data for one of more
-     tracepoints with a 'while-stepping' count.  */
-  if (tinfo->while_stepping == NULL)
-    return 0;
-
-  if (!tracing)
-    {
-      /* We're not even tracing anymore.  Stop this thread from
-	 collecting.  */
-      release_while_stepping_state_list (tinfo);
-
-      /* The thread had stopped due to a single-step request indeed
-	 explained by a tracepoint.  */
-      return 1;
-    }
-
-  wstep = tinfo->while_stepping;
-  wstep_link = &tinfo->while_stepping;
-
-  trace_debug ("Thread %s finished a single-step for tracepoint %d at 0x%s",
-	       target_pid_to_str (tinfo->id),
-	       wstep->tp_number, paddress (wstep->tp_address));
-
-  ctx.base.type = trap_tracepoint;
-  ctx.regcache = get_thread_regcache (tinfo, 1);
-
-  while (wstep != NULL)
-    {
-      tpoint = find_tracepoint (wstep->tp_number, wstep->tp_address);
-      if (tpoint == NULL)
-	{
-	  trace_debug ("NO TRACEPOINT %d at 0x%s FOR THREAD %s!",
-		       wstep->tp_number, paddress (wstep->tp_address),
-		       target_pid_to_str (tinfo->id));
-
-	  /* Unlink.  */
-	  *wstep_link = wstep->next;
-	  release_while_stepping_state (wstep);
-	  wstep = *wstep_link;
-	  continue;
-	}
-
-      /* We've just finished one step.  */
-      ++wstep->current_step;
-
-      /* Collect data.  */
-      collect_data_at_step ((struct tracepoint_hit_ctx *) &ctx,
-			    stop_pc, tpoint, wstep->current_step);
-
-      if (wstep->current_step >= tpoint->step_count)
-	{
-	  /* The requested numbers of steps have occurred.  */
-	  trace_debug ("Thread %s done stepping for tracepoint %d at 0x%s",
-		       target_pid_to_str (tinfo->id),
-		       wstep->tp_number, paddress (wstep->tp_address));
-
-	  /* Unlink the wstep.  */
-	  *wstep_link = wstep->next;
-	  release_while_stepping_state (wstep);
-	  wstep = *wstep_link;
-
-	  /* Only check the hit count now, which ensure that we do all
-	     our stepping before stopping the run.  */
-	  if (tpoint->pass_count > 0
-	      && tpoint->hit_count >= tpoint->pass_count
-	      && stopping_tracepoint == NULL)
-	    stopping_tracepoint = tpoint;
-	}
-      else
-	{
-	  /* Keep single-stepping until the requested numbers of steps
-	     have occurred.  */
-	  wstep_link = &wstep->next;
-	  wstep = *wstep_link;
-	}
-
-      if (stopping_tracepoint
-	  || trace_buffer_is_full
-	  || expr_eval_result != expr_eval_no_error)
-	{
-	  stop_tracing ();
-	  break;
-	}
-    }
-
-  return 1;
-}
-
-/* Handle any internal tracing control breakpoint hits.  That means,
-   pull traceframes from the IPA to our buffer, and syncing both
-   tracing agents when the IPA's tracing stops for some reason.  */
-
-int
-handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc)
-{
-  /* Pull in fast tracepoint trace frames from the inferior in-process
-     agent's buffer into our buffer.  */
-
-  if (!agent_loaded_p ())
-    return 0;
-
-  upload_fast_traceframes ();
-
-  /* Check if the in-process agent had decided we should stop
-     tracing.  */
-  if (stop_pc == ipa_sym_addrs.addr_stop_tracing)
-    {
-      int ipa_trace_buffer_is_full;
-      CORE_ADDR ipa_stopping_tracepoint;
-      int ipa_expr_eval_result;
-      CORE_ADDR ipa_error_tracepoint;
-
-      trace_debug ("lib stopped at stop_tracing");
-
-      read_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full,
-			     &ipa_trace_buffer_is_full);
-
-      read_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint,
-				  &ipa_stopping_tracepoint);
-      write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, 0);
-
-      read_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint,
-				  &ipa_error_tracepoint);
-      write_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint, 0);
-
-      read_inferior_integer (ipa_sym_addrs.addr_expr_eval_result,
-			     &ipa_expr_eval_result);
-      write_inferior_integer (ipa_sym_addrs.addr_expr_eval_result, 0);
-
-      trace_debug ("lib: trace_buffer_is_full: %d, "
-		   "stopping_tracepoint: %s, "
-		   "ipa_expr_eval_result: %d, "
-		   "error_tracepoint: %s, ",
-		   ipa_trace_buffer_is_full,
-		   paddress (ipa_stopping_tracepoint),
-		   ipa_expr_eval_result,
-		   paddress (ipa_error_tracepoint));
-
-      if (debug_threads)
-	{
-	  if (ipa_trace_buffer_is_full)
-	    trace_debug ("lib stopped due to full buffer.");
-	  if (ipa_stopping_tracepoint)
-	    trace_debug ("lib stopped due to tpoint");
-	  if (ipa_error_tracepoint)
-	    trace_debug ("lib stopped due to error");
-	}
-
-      if (ipa_stopping_tracepoint != 0)
-	{
-	  stopping_tracepoint
-	    = fast_tracepoint_from_ipa_tpoint_address (ipa_stopping_tracepoint);
-	}
-      else if (ipa_expr_eval_result != expr_eval_no_error)
-	{
-	  expr_eval_result = ipa_expr_eval_result;
-	  error_tracepoint
-	    = fast_tracepoint_from_ipa_tpoint_address (ipa_error_tracepoint);
-	}
-      stop_tracing ();
-      return 1;
-    }
-  else if (stop_pc == ipa_sym_addrs.addr_flush_trace_buffer)
-    {
-      trace_debug ("lib stopped at flush_trace_buffer");
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Return true if TINFO just hit a tracepoint.  Collect data if
-   so.  */
-
-int
-tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc)
-{
-  struct tracepoint *tpoint;
-  int ret = 0;
-  struct trap_tracepoint_ctx ctx;
-
-  /* Not tracing, don't handle.  */
-  if (!tracing)
-    return 0;
-
-  ctx.base.type = trap_tracepoint;
-  ctx.regcache = get_thread_regcache (tinfo, 1);
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    {
-      /* Note that we collect fast tracepoints here as well.  We'll
-	 step over the fast tracepoint jump later, which avoids the
-	 double collect.  However, we don't collect for static
-	 tracepoints here, because UST markers are compiled in program,
-	 and probes will be executed in program.  So static tracepoints
-	 are collected there.   */
-      if (tpoint->enabled && stop_pc == tpoint->address
-	  && tpoint->type != static_tracepoint)
-	{
-	  trace_debug ("Thread %s at address of tracepoint %d at 0x%s",
-		       target_pid_to_str (tinfo->id),
-		       tpoint->number, paddress (tpoint->address));
-
-	  /* Test the condition if present, and collect if true.  */
-	  if (!tpoint->cond
-	      || (condition_true_at_tracepoint
-		  ((struct tracepoint_hit_ctx *) &ctx, tpoint)))
-	    collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
-					stop_pc, tpoint);
-
-	  if (stopping_tracepoint
-	      || trace_buffer_is_full
-	      || expr_eval_result != expr_eval_no_error)
-	    {
-	      stop_tracing ();
-	    }
-	  /* If the tracepoint had a 'while-stepping' action, then set
-	     the thread to collect this tracepoint on the following
-	     single-steps.  */
-	  else if (tpoint->step_count > 0)
-	    {
-	      add_while_stepping_state (tinfo,
-					tpoint->number, tpoint->address);
-	    }
-
-	  ret = 1;
-	}
-    }
-
-  return ret;
-}
-
-#endif
-
-#if defined IN_PROCESS_AGENT && defined HAVE_UST
-struct ust_marker_data;
-static void collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-					    struct traceframe *tframe);
-#endif
-
-/* Create a trace frame for the hit of the given tracepoint in the
-   given thread.  */
-
-static void
-collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, CORE_ADDR stop_pc,
-			    struct tracepoint *tpoint)
-{
-  struct traceframe *tframe;
-  int acti;
-
-  /* Only count it as a hit when we actually collect data.  */
-  tpoint->hit_count++;
-
-  /* If we've exceeded a defined pass count, record the event for
-     later, and finish the collection for this hit.  This test is only
-     for nonstepping tracepoints, stepping tracepoints test at the end
-     of their while-stepping loop.  */
-  if (tpoint->pass_count > 0
-      && tpoint->hit_count >= tpoint->pass_count
-      && tpoint->step_count == 0
-      && stopping_tracepoint == NULL)
-    stopping_tracepoint = tpoint;
-
-  trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64,
-	       tpoint->number, paddress (tpoint->address), tpoint->hit_count);
-
-  tframe = add_traceframe (tpoint);
-
-  if (tframe)
-    {
-      for (acti = 0; acti < tpoint->numactions; ++acti)
-	{
-#ifndef IN_PROCESS_AGENT
-	  trace_debug ("Tracepoint %d at 0x%s about to do action '%s'",
-		       tpoint->number, paddress (tpoint->address),
-		       tpoint->actions_str[acti]);
-#endif
-
-	  do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe,
-				   tpoint->actions[acti]);
-	}
-
-      finish_traceframe (tframe);
-    }
-
-  if (tframe == NULL && tracing)
-    trace_buffer_is_full = 1;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-static void
-collect_data_at_step (struct tracepoint_hit_ctx *ctx,
-		      CORE_ADDR stop_pc,
-		      struct tracepoint *tpoint, int current_step)
-{
-  struct traceframe *tframe;
-  int acti;
-
-  trace_debug ("Making new step traceframe for "
-	       "tracepoint %d at 0x%s, step %d of %" PRIu64 ", hit %" PRIu64,
-	       tpoint->number, paddress (tpoint->address),
-	       current_step, tpoint->step_count,
-	       tpoint->hit_count);
-
-  tframe = add_traceframe (tpoint);
-
-  if (tframe)
-    {
-      for (acti = 0; acti < tpoint->num_step_actions; ++acti)
-	{
-	  trace_debug ("Tracepoint %d at 0x%s about to do step action '%s'",
-		       tpoint->number, paddress (tpoint->address),
-		       tpoint->step_actions_str[acti]);
-
-	  do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe,
-				   tpoint->step_actions[acti]);
-	}
-
-      finish_traceframe (tframe);
-    }
-
-  if (tframe == NULL && tracing)
-    trace_buffer_is_full = 1;
-}
-
-#endif
-
-#ifdef IN_PROCESS_AGENT
-/* The target description index for IPA.  Passed from gdbserver, used
-   to select ipa_tdesc.  */
-EXTERN_C_PUSH
-IP_AGENT_EXPORT_VAR int ipa_tdesc_idx;
-EXTERN_C_POP
-#endif
-
-static struct regcache *
-get_context_regcache (struct tracepoint_hit_ctx *ctx)
-{
-  struct regcache *regcache = NULL;
-#ifdef IN_PROCESS_AGENT
-  const struct target_desc *ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx);
-
-  if (ctx->type == fast_tracepoint)
-    {
-      struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx;
-      if (!fctx->regcache_initted)
-	{
-	  fctx->regcache_initted = 1;
-	  init_register_cache (&fctx->regcache, ipa_tdesc, fctx->regspace);
-	  supply_regblock (&fctx->regcache, NULL);
-	  supply_fast_tracepoint_registers (&fctx->regcache, fctx->regs);
-	}
-      regcache = &fctx->regcache;
-    }
-#ifdef HAVE_UST
-  if (ctx->type == static_tracepoint)
-    {
-      struct static_tracepoint_ctx *sctx
-	= (struct static_tracepoint_ctx *) ctx;
-
-      if (!sctx->regcache_initted)
-	{
-	  sctx->regcache_initted = 1;
-	  init_register_cache (&sctx->regcache, ipa_tdesc, sctx->regspace);
-	  supply_regblock (&sctx->regcache, NULL);
-	  /* Pass down the tracepoint address, because REGS doesn't
-	     include the PC, but we know what it must have been.  */
-	  supply_static_tracepoint_registers (&sctx->regcache,
-					      (const unsigned char *)
-					      sctx->regs,
-					      sctx->tpoint->address);
-	}
-      regcache = &sctx->regcache;
-    }
-#endif
-#else
-  if (ctx->type == trap_tracepoint)
-    {
-      struct trap_tracepoint_ctx *tctx = (struct trap_tracepoint_ctx *) ctx;
-      regcache = tctx->regcache;
-    }
-#endif
-
-  gdb_assert (regcache != NULL);
-
-  return regcache;
-}
-
-static void
-do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-			 CORE_ADDR stop_pc,
-			 struct tracepoint *tpoint,
-			 struct traceframe *tframe,
-			 struct tracepoint_action *taction)
-{
-  enum eval_result_type err;
-
-  switch (taction->type)
-    {
-    case 'M':
-      {
-	struct collect_memory_action *maction;
-	struct eval_agent_expr_context ax_ctx;
-
-	maction = (struct collect_memory_action *) taction;
-	ax_ctx.regcache = NULL;
-	ax_ctx.tframe = tframe;
-	ax_ctx.tpoint = tpoint;
-
-	trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)",
-		     pulongest (maction->len),
-		     paddress (maction->addr), maction->basereg);
-	/* (should use basereg) */
-	agent_mem_read (&ax_ctx, NULL, (CORE_ADDR) maction->addr,
-			maction->len);
-	break;
-      }
-    case 'R':
-      {
-	unsigned char *regspace;
-	struct regcache tregcache;
-	struct regcache *context_regcache;
-	int regcache_size;
-
-	trace_debug ("Want to collect registers");
-
-	context_regcache = get_context_regcache (ctx);
-	regcache_size = register_cache_size (context_regcache->tdesc);
-
-	/* Collect all registers for now.  */
-	regspace = add_traceframe_block (tframe, tpoint, 1 + regcache_size);
-	if (regspace == NULL)
-	  {
-	    trace_debug ("Trace buffer block allocation failed, skipping");
-	    break;
-	  }
-	/* Identify a register block.  */
-	*regspace = 'R';
-
-	/* Wrap the regblock in a register cache (in the stack, we
-	   don't want to malloc here).  */
-	init_register_cache (&tregcache, context_regcache->tdesc,
-			     regspace + 1);
-
-	/* Copy the register data to the regblock.  */
-	regcache_cpy (&tregcache, context_regcache);
-
-#ifndef IN_PROCESS_AGENT
-	/* On some platforms, trap-based tracepoints will have the PC
-	   pointing to the next instruction after the trap, but we
-	   don't want the user or GDB trying to guess whether the
-	   saved PC needs adjusting; so always record the adjusted
-	   stop_pc.  Note that we can't use tpoint->address instead,
-	   since it will be wrong for while-stepping actions.  This
-	   adjustment is a nop for fast tracepoints collected from the
-	   in-process lib (but not if GDBserver is collecting one
-	   preemptively), since the PC had already been adjusted to
-	   contain the tracepoint's address by the jump pad.  */
-	trace_debug ("Storing stop pc (0x%s) in regblock",
-		     paddress (stop_pc));
-
-	/* This changes the regblock, not the thread's
-	   regcache.  */
-	regcache_write_pc (&tregcache, stop_pc);
-#endif
-      }
-      break;
-    case 'X':
-      {
-	struct eval_expr_action *eaction;
-	struct eval_agent_expr_context ax_ctx;
-
-	eaction = (struct eval_expr_action *) taction;
-	ax_ctx.regcache = get_context_regcache (ctx);
-	ax_ctx.tframe = tframe;
-	ax_ctx.tpoint = tpoint;
-
-	trace_debug ("Want to evaluate expression");
-
-	err = gdb_eval_agent_expr (&ax_ctx, eaction->expr, NULL);
-
-	if (err != expr_eval_no_error)
-	  {
-	    record_tracepoint_error (tpoint, "action expression", err);
-	    return;
-	  }
-      }
-      break;
-    case 'L':
-      {
-#if defined IN_PROCESS_AGENT && defined HAVE_UST
-	trace_debug ("Want to collect static trace data");
-	collect_ust_data_at_tracepoint (ctx, tframe);
-#else
-	trace_debug ("warning: collecting static trace data, "
-		     "but static tracepoints are not supported");
-#endif
-      }
-      break;
-    default:
-      trace_debug ("unknown trace action '%c', ignoring", taction->type);
-      break;
-    }
-}
-
-static int
-condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-			      struct tracepoint *tpoint)
-{
-  ULONGEST value = 0;
-  enum eval_result_type err;
-
-  /* Presently, gdbserver doesn't run compiled conditions, only the
-     IPA does.  If the program stops at a fast tracepoint's address
-     (e.g., due to a breakpoint, trap tracepoint, or stepping),
-     gdbserver preemptively collect the fast tracepoint.  Later, on
-     resume, gdbserver steps over the fast tracepoint like it steps
-     over breakpoints, so that the IPA doesn't see that fast
-     tracepoint.  This avoids double collects of fast tracepoints in
-     that stopping scenario.  Having gdbserver itself handle the fast
-     tracepoint gives the user a consistent view of when fast or trap
-     tracepoints are collected, compared to an alternative where only
-     trap tracepoints are collected on stop, and fast tracepoints on
-     resume.  When a fast tracepoint is being processed by gdbserver,
-     it is always the non-compiled condition expression that is
-     used.  */
-#ifdef IN_PROCESS_AGENT
-  if (tpoint->compiled_cond)
-    {
-      struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx;
-      err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (fctx->regs, &value);
-    }
-  else
-#endif
-    {
-      struct eval_agent_expr_context ax_ctx;
-
-      ax_ctx.regcache = get_context_regcache (ctx);
-      ax_ctx.tframe = NULL;
-      ax_ctx.tpoint = tpoint;
-
-      err = gdb_eval_agent_expr (&ax_ctx, tpoint->cond, &value);
-    }
-  if (err != expr_eval_no_error)
-    {
-      record_tracepoint_error (tpoint, "condition", err);
-      /* The error case must return false.  */
-      return 0;
-    }
-
-  trace_debug ("Tracepoint %d at 0x%s condition evals to %s",
-	       tpoint->number, paddress (tpoint->address),
-	       pulongest (value));
-  return (value ? 1 : 0);
-}
-
-/* Do memory copies for bytecodes.  */
-/* Do the recording of memory blocks for actions and bytecodes.  */
-
-int
-agent_mem_read (struct eval_agent_expr_context *ctx,
-		unsigned char *to, CORE_ADDR from, ULONGEST len)
-{
-  unsigned char *mspace;
-  ULONGEST remaining = len;
-  unsigned short blocklen;
-
-  /* If a 'to' buffer is specified, use it.  */
-  if (to != NULL)
-    {
-      read_inferior_memory (from, to, len);
-      return 0;
-    }
-
-  /* Otherwise, create a new memory block in the trace buffer.  */
-  while (remaining > 0)
-    {
-      size_t sp;
-
-      blocklen = (remaining > 65535 ? 65535 : remaining);
-      sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen;
-      mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp);
-      if (mspace == NULL)
-	return 1;
-      /* Identify block as a memory block.  */
-      *mspace = 'M';
-      ++mspace;
-      /* Record address and size.  */
-      memcpy (mspace, &from, sizeof (from));
-      mspace += sizeof (from);
-      memcpy (mspace, &blocklen, sizeof (blocklen));
-      mspace += sizeof (blocklen);
-      /* Record the memory block proper.  */
-      read_inferior_memory (from, mspace, blocklen);
-      trace_debug ("%d bytes recorded", blocklen);
-      remaining -= blocklen;
-      from += blocklen;
-    }
-  return 0;
-}
-
-int
-agent_mem_read_string (struct eval_agent_expr_context *ctx,
-		       unsigned char *to, CORE_ADDR from, ULONGEST len)
-{
-  unsigned char *buf, *mspace;
-  ULONGEST remaining = len;
-  unsigned short blocklen, i;
-
-  /* To save a bit of space, block lengths are 16-bit, so break large
-     requests into multiple blocks.  Bordering on overkill for strings,
-     but it could happen that someone specifies a large max length.  */
-  while (remaining > 0)
-    {
-      size_t sp;
-
-      blocklen = (remaining > 65535 ? 65535 : remaining);
-      /* We want working space to accumulate nonzero bytes, since
-	 traceframes must have a predecided size (otherwise it gets
-	 harder to wrap correctly for the circular case, etc).  */
-      buf = (unsigned char *) xmalloc (blocklen + 1);
-      for (i = 0; i < blocklen; ++i)
-	{
-	  /* Read the string one byte at a time, in case the string is
-	     at the end of a valid memory area - we don't want a
-	     correctly-terminated string to engender segvio
-	     complaints.  */
-	  read_inferior_memory (from + i, buf + i, 1);
-
-	  if (buf[i] == '\0')
-	    {
-	      blocklen = i + 1;
-	      /* Make sure outer loop stops now too.  */
-	      remaining = blocklen;
-	      break;
-	    }
-	}
-      sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen;
-      mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp);
-      if (mspace == NULL)
-	{
-	  xfree (buf);
-	  return 1;
-	}
-      /* Identify block as a memory block.  */
-      *mspace = 'M';
-      ++mspace;
-      /* Record address and size.  */
-      memcpy ((void *) mspace, (void *) &from, sizeof (from));
-      mspace += sizeof (from);
-      memcpy ((void *) mspace, (void *) &blocklen, sizeof (blocklen));
-      mspace += sizeof (blocklen);
-      /* Copy the string contents.  */
-      memcpy ((void *) mspace, (void *) buf, blocklen);
-      remaining -= blocklen;
-      from += blocklen;
-      xfree (buf);
-    }
-  return 0;
-}
-
-/* Record the value of a trace state variable.  */
-
-int
-agent_tsv_read (struct eval_agent_expr_context *ctx, int n)
-{
-  unsigned char *vspace;
-  LONGEST val;
-
-  vspace = add_traceframe_block (ctx->tframe, ctx->tpoint,
-				 1 + sizeof (n) + sizeof (LONGEST));
-  if (vspace == NULL)
-    return 1;
-  /* Identify block as a variable.  */
-  *vspace = 'V';
-  /* Record variable's number and value.  */
-  memcpy (vspace + 1, &n, sizeof (n));
-  val = get_trace_state_variable_value (n);
-  memcpy (vspace + 1 + sizeof (n), &val, sizeof (val));
-  trace_debug ("Variable %d recorded", n);
-  return 0;
-}
-
-#ifndef IN_PROCESS_AGENT
-
-/* Callback for traceframe_walk_blocks, used to find a given block
-   type in a traceframe.  */
-
-static int
-match_blocktype (char blocktype, unsigned char *dataptr, void *data)
-{
-  char *wantedp = (char *) data;
-
-  if (*wantedp == blocktype)
-    return 1;
-
-  return 0;
-}
-
-/* Walk over all traceframe blocks of the traceframe buffer starting
-   at DATABASE, of DATASIZE bytes long, and call CALLBACK for each
-   block found, passing in DATA unmodified.  If CALLBACK returns true,
-   this returns a pointer to where the block is found.  Returns NULL
-   if no callback call returned true, indicating that all blocks have
-   been walked.  */
-
-static unsigned char *
-traceframe_walk_blocks (unsigned char *database, unsigned int datasize,
-			int tfnum,
-			int (*callback) (char blocktype,
-					 unsigned char *dataptr,
-					 void *data),
-			void *data)
-{
-  unsigned char *dataptr;
-
-  if (datasize == 0)
-    {
-      trace_debug ("traceframe %d has no data", tfnum);
-      return NULL;
-    }
-
-  /* Iterate through a traceframe's blocks, looking for a block of the
-     requested type.  */
-  for (dataptr = database;
-       dataptr < database + datasize;
-       /* nothing */)
-    {
-      char blocktype;
-      unsigned short mlen;
-
-      if (dataptr == trace_buffer_wrap)
-	{
-	  /* Adjust to reflect wrapping part of the frame around to
-	     the beginning.  */
-	  datasize = dataptr - database;
-	  dataptr = database = trace_buffer_lo;
-	}
-
-      blocktype = *dataptr++;
-
-      if ((*callback) (blocktype, dataptr, data))
-	return dataptr;
-
-      switch (blocktype)
-	{
-	case 'R':
-	  /* Skip over the registers block.  */
-	  dataptr += current_target_desc ()->registers_size;
-	  break;
-	case 'M':
-	  /* Skip over the memory block.  */
-	  dataptr += sizeof (CORE_ADDR);
-	  memcpy (&mlen, dataptr, sizeof (mlen));
-	  dataptr += (sizeof (mlen) + mlen);
-	  break;
-	case 'V':
-	  /* Skip over the TSV block.  */
-	  dataptr += (sizeof (int) + sizeof (LONGEST));
-	  break;
-	case 'S':
-	  /* Skip over the static trace data block.  */
-	  memcpy (&mlen, dataptr, sizeof (mlen));
-	  dataptr += (sizeof (mlen) + mlen);
-	  break;
-	default:
-	  trace_debug ("traceframe %d has unknown block type 0x%x",
-		       tfnum, blocktype);
-	  return NULL;
-	}
-    }
-
-  return NULL;
-}
-
-/* Look for the block of type TYPE_WANTED in the traceframe starting
-   at DATABASE of DATASIZE bytes long.  TFNUM is the traceframe
-   number.  */
-
-static unsigned char *
-traceframe_find_block_type (unsigned char *database, unsigned int datasize,
-			    int tfnum, char type_wanted)
-{
-  return traceframe_walk_blocks (database, datasize, tfnum,
-				 match_blocktype, &type_wanted);
-}
-
-static unsigned char *
-traceframe_find_regblock (struct traceframe *tframe, int tfnum)
-{
-  unsigned char *regblock;
-
-  regblock = traceframe_find_block_type (tframe->data,
-					 tframe->data_size,
-					 tfnum, 'R');
-
-  if (regblock == NULL)
-    trace_debug ("traceframe %d has no register data", tfnum);
-
-  return regblock;
-}
-
-/* Get registers from a traceframe.  */
-
-int
-fetch_traceframe_registers (int tfnum, struct regcache *regcache, int regnum)
-{
-  unsigned char *dataptr;
-  struct tracepoint *tpoint;
-  struct traceframe *tframe;
-
-  tframe = find_traceframe (tfnum);
-
-  if (tframe == NULL)
-    {
-      trace_debug ("traceframe %d not found", tfnum);
-      return 1;
-    }
-
-  dataptr = traceframe_find_regblock (tframe, tfnum);
-  if (dataptr == NULL)
-    {
-      /* Mark registers unavailable.  */
-      supply_regblock (regcache, NULL);
-
-      /* We can generally guess at a PC, although this will be
-	 misleading for while-stepping frames and multi-location
-	 tracepoints.  */
-      tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum);
-      if (tpoint != NULL)
-	regcache_write_pc (regcache, tpoint->address);
-    }
-  else
-    supply_regblock (regcache, dataptr);
-
-  return 0;
-}
-
-static CORE_ADDR
-traceframe_get_pc (struct traceframe *tframe)
-{
-  struct regcache regcache;
-  unsigned char *dataptr;
-  const struct target_desc *tdesc = current_target_desc ();
-
-  dataptr = traceframe_find_regblock (tframe, -1);
-  if (dataptr == NULL)
-    return 0;
-
-  init_register_cache (&regcache, tdesc, dataptr);
-  return regcache_read_pc (&regcache);
-}
-
-/* Read a requested block of memory from a trace frame.  */
-
-int
-traceframe_read_mem (int tfnum, CORE_ADDR addr,
-		     unsigned char *buf, ULONGEST length,
-		     ULONGEST *nbytes)
-{
-  struct traceframe *tframe;
-  unsigned char *database, *dataptr;
-  unsigned int datasize;
-  CORE_ADDR maddr;
-  unsigned short mlen;
-
-  trace_debug ("traceframe_read_mem");
-
-  tframe = find_traceframe (tfnum);
-
-  if (!tframe)
-    {
-      trace_debug ("traceframe %d not found", tfnum);
-      return 1;
-    }
-
-  datasize = tframe->data_size;
-  database = dataptr = &tframe->data[0];
-
-  /* Iterate through a traceframe's blocks, looking for memory.  */
-  while ((dataptr = traceframe_find_block_type (dataptr,
-						datasize
-						- (dataptr - database),
-						tfnum, 'M')) != NULL)
-    {
-      memcpy (&maddr, dataptr, sizeof (maddr));
-      dataptr += sizeof (maddr);
-      memcpy (&mlen, dataptr, sizeof (mlen));
-      dataptr += sizeof (mlen);
-      trace_debug ("traceframe %d has %d bytes at %s",
-		   tfnum, mlen, paddress (maddr));
-
-      /* If the block includes the first part of the desired range,
-	 return as much it has; GDB will re-request the remainder,
-	 which might be in a different block of this trace frame.  */
-      if (maddr <= addr && addr < (maddr + mlen))
-	{
-	  ULONGEST amt = (maddr + mlen) - addr;
-	  if (amt > length)
-	    amt = length;
-
-	  memcpy (buf, dataptr + (addr - maddr), amt);
-	  *nbytes = amt;
-	  return 0;
-	}
-
-      /* Skip over this block.  */
-      dataptr += mlen;
-    }
-
-  trace_debug ("traceframe %d has no memory data for the desired region",
-	       tfnum);
-
-  *nbytes = 0;
-  return 0;
-}
-
-static int
-traceframe_read_tsv (int tsvnum, LONGEST *val)
-{
-  client_state &cs = get_client_state ();
-  int tfnum;
-  struct traceframe *tframe;
-  unsigned char *database, *dataptr;
-  unsigned int datasize;
-  int vnum;
-  int found = 0;
-
-  trace_debug ("traceframe_read_tsv");
-
-  tfnum = cs.current_traceframe;
-
-  if (tfnum < 0)
-    {
-      trace_debug ("no current traceframe");
-      return 1;
-    }
-
-  tframe = find_traceframe (tfnum);
-
-  if (tframe == NULL)
-    {
-      trace_debug ("traceframe %d not found", tfnum);
-      return 1;
-    }
-
-  datasize = tframe->data_size;
-  database = dataptr = &tframe->data[0];
-
-  /* Iterate through a traceframe's blocks, looking for the last
-     matched tsv.  */
-  while ((dataptr = traceframe_find_block_type (dataptr,
-						datasize
-						- (dataptr - database),
-						tfnum, 'V')) != NULL)
-    {
-      memcpy (&vnum, dataptr, sizeof (vnum));
-      dataptr += sizeof (vnum);
-
-      trace_debug ("traceframe %d has variable %d", tfnum, vnum);
-
-      /* Check that this is the variable we want.  */
-      if (tsvnum == vnum)
-	{
-	  memcpy (val, dataptr, sizeof (*val));
-	  found = 1;
-	}
-
-      /* Skip over this block.  */
-      dataptr += sizeof (LONGEST);
-    }
-
-  if (!found)
-    trace_debug ("traceframe %d has no data for variable %d",
-		 tfnum, tsvnum);
-  return !found;
-}
-
-/* Read a requested block of static tracepoint data from a trace
-   frame.  */
-
-int
-traceframe_read_sdata (int tfnum, ULONGEST offset,
-		       unsigned char *buf, ULONGEST length,
-		       ULONGEST *nbytes)
-{
-  struct traceframe *tframe;
-  unsigned char *database, *dataptr;
-  unsigned int datasize;
-  unsigned short mlen;
-
-  trace_debug ("traceframe_read_sdata");
-
-  tframe = find_traceframe (tfnum);
-
-  if (!tframe)
-    {
-      trace_debug ("traceframe %d not found", tfnum);
-      return 1;
-    }
-
-  datasize = tframe->data_size;
-  database = &tframe->data[0];
-
-  /* Iterate through a traceframe's blocks, looking for static
-     tracepoint data.  */
-  dataptr = traceframe_find_block_type (database, datasize,
-					tfnum, 'S');
-  if (dataptr != NULL)
-    {
-      memcpy (&mlen, dataptr, sizeof (mlen));
-      dataptr += sizeof (mlen);
-      if (offset < mlen)
-	{
-	  if (offset + length > mlen)
-	    length = mlen - offset;
-
-	  memcpy (buf, dataptr, length);
-	  *nbytes = length;
-	}
-      else
-	*nbytes = 0;
-      return 0;
-    }
-
-  trace_debug ("traceframe %d has no static trace data", tfnum);
-
-  *nbytes = 0;
-  return 0;
-}
-
-/* Callback for traceframe_walk_blocks.  Builds a traceframe-info
-   object.  DATA is pointer to a struct buffer holding the
-   traceframe-info object being built.  */
-
-static int
-build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data)
-{
-  struct buffer *buffer = (struct buffer *) data;
-
-  switch (blocktype)
-    {
-    case 'M':
-      {
-	unsigned short mlen;
-	CORE_ADDR maddr;
-
-	memcpy (&maddr, dataptr, sizeof (maddr));
-	dataptr += sizeof (maddr);
-	memcpy (&mlen, dataptr, sizeof (mlen));
-	dataptr += sizeof (mlen);
-	buffer_xml_printf (buffer,
-			   "<memory start=\"0x%s\" length=\"0x%s\"/>\n",
-			   paddress (maddr), phex_nz (mlen, sizeof (mlen)));
-	break;
-      }
-    case 'V':
-      {
-	int vnum;
-
-	memcpy (&vnum, dataptr, sizeof (vnum));
-	buffer_xml_printf (buffer, "<tvar id=\"%d\"/>\n", vnum);
-	break;
-      }
-    case 'R':
-    case 'S':
-      {
-	break;
-      }
-    default:
-      warning ("Unhandled trace block type (%d) '%c ' "
-	       "while building trace frame info.",
-	       blocktype, blocktype);
-      break;
-    }
-
-  return 0;
-}
-
-/* Build a traceframe-info object for traceframe number TFNUM into
-   BUFFER.  */
-
-int
-traceframe_read_info (int tfnum, struct buffer *buffer)
-{
-  struct traceframe *tframe;
-
-  trace_debug ("traceframe_read_info");
-
-  tframe = find_traceframe (tfnum);
-
-  if (!tframe)
-    {
-      trace_debug ("traceframe %d not found", tfnum);
-      return 1;
-    }
-
-  buffer_grow_str (buffer, "<traceframe-info>\n");
-  traceframe_walk_blocks (tframe->data, tframe->data_size,
-			  tfnum, build_traceframe_info_xml, buffer);
-  buffer_grow_str0 (buffer, "</traceframe-info>\n");
-  return 0;
-}
-
-/* Return the first fast tracepoint whose jump pad contains PC.  */
-
-static struct tracepoint *
-fast_tracepoint_from_jump_pad_address (CORE_ADDR pc)
-{
-  struct tracepoint *tpoint;
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    if (tpoint->type == fast_tracepoint)
-      if (tpoint->jump_pad <= pc && pc < tpoint->jump_pad_end)
-	return tpoint;
-
-  return NULL;
-}
-
-/* Return the first fast tracepoint whose trampoline contains PC.  */
-
-static struct tracepoint *
-fast_tracepoint_from_trampoline_address (CORE_ADDR pc)
-{
-  struct tracepoint *tpoint;
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    {
-      if (tpoint->type == fast_tracepoint
-	  && tpoint->trampoline <= pc && pc < tpoint->trampoline_end)
-	return tpoint;
-    }
-
-  return NULL;
-}
-
-/* Return GDBserver's tracepoint that matches the IP Agent's
-   tracepoint object that lives at IPA_TPOINT_OBJ in the IP Agent's
-   address space.  */
-
-static struct tracepoint *
-fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR ipa_tpoint_obj)
-{
-  struct tracepoint *tpoint;
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    if (tpoint->type == fast_tracepoint)
-      if (tpoint->obj_addr_on_target == ipa_tpoint_obj)
-	return tpoint;
-
-  return NULL;
-}
-
-#endif
-
-/* The type of the object that is used to synchronize fast tracepoint
-   collection.  */
-
-typedef struct collecting_t
-{
-  /* The fast tracepoint number currently collecting.  */
-  uintptr_t tpoint;
-
-  /* A number that GDBserver can use to identify the thread that is
-     presently holding the collect lock.  This need not (and usually
-     is not) the thread id, as getting the current thread ID usually
-     requires a system call, which we want to avoid like the plague.
-     Usually this is thread's TCB, found in the TLS (pseudo-)
-     register, which is readable with a single insn on several
-     architectures.  */
-  uintptr_t thread_area;
-} collecting_t;
-
-#ifndef IN_PROCESS_AGENT
-
-void
-force_unlock_trace_buffer (void)
-{
-  write_inferior_data_pointer (ipa_sym_addrs.addr_collecting, 0);
-}
-
-/* Check if the thread identified by THREAD_AREA which is stopped at
-   STOP_PC, is presently locking the fast tracepoint collection, and
-   if so, gather some status of said collection.  Returns 0 if the
-   thread isn't collecting or in the jump pad at all.  1, if in the
-   jump pad (or within gdb_collect) and hasn't executed the adjusted
-   original insn yet (can set a breakpoint there and run to it).  2,
-   if presently executing the adjusted original insn --- in which
-   case, if we want to move the thread out of the jump pad, we need to
-   single-step it until this function returns 0.  */
-
-fast_tpoint_collect_result
-fast_tracepoint_collecting (CORE_ADDR thread_area,
-			    CORE_ADDR stop_pc,
-			    struct fast_tpoint_collect_status *status)
-{
-  CORE_ADDR ipa_collecting;
-  CORE_ADDR ipa_gdb_jump_pad_buffer, ipa_gdb_jump_pad_buffer_end;
-  CORE_ADDR ipa_gdb_trampoline_buffer;
-  CORE_ADDR ipa_gdb_trampoline_buffer_end;
-  struct tracepoint *tpoint;
-  int needs_breakpoint;
-
-  /* The thread THREAD_AREA is either:
-
-      0. not collecting at all, not within the jump pad, or within
-	 gdb_collect or one of its callees.
-
-      1. in the jump pad and haven't reached gdb_collect
-
-      2. within gdb_collect (out of the jump pad) (collect is set)
-
-      3. we're in the jump pad, after gdb_collect having returned,
-	 possibly executing the adjusted insns.
-
-      For cases 1 and 3, `collecting' may or not be set.  The jump pad
-      doesn't have any complicated jump logic, so we can tell if the
-      thread is executing the adjust original insn or not by just
-      matching STOP_PC with known jump pad addresses.  If we it isn't
-      yet executing the original insn, set a breakpoint there, and let
-      the thread run to it, so to quickly step over a possible (many
-      insns) gdb_collect call.  Otherwise, or when the breakpoint is
-      hit, only a few (small number of) insns are left to be executed
-      in the jump pad.  Single-step the thread until it leaves the
-      jump pad.  */
-
- again:
-  tpoint = NULL;
-  needs_breakpoint = 0;
-  trace_debug ("fast_tracepoint_collecting");
-
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer,
-				  &ipa_gdb_jump_pad_buffer))
-    {
-      internal_error (__FILE__, __LINE__,
-		      "error extracting `gdb_jump_pad_buffer'");
-    }
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer_end,
-				  &ipa_gdb_jump_pad_buffer_end))
-    {
-      internal_error (__FILE__, __LINE__,
-		      "error extracting `gdb_jump_pad_buffer_end'");
-    }
-
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer,
-				  &ipa_gdb_trampoline_buffer))
-    {
-      internal_error (__FILE__, __LINE__,
-		      "error extracting `gdb_trampoline_buffer'");
-    }
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end,
-				  &ipa_gdb_trampoline_buffer_end))
-    {
-      internal_error (__FILE__, __LINE__,
-		      "error extracting `gdb_trampoline_buffer_end'");
-    }
-
-  if (ipa_gdb_jump_pad_buffer <= stop_pc
-      && stop_pc < ipa_gdb_jump_pad_buffer_end)
-    {
-      /* We can tell which tracepoint(s) the thread is collecting by
-	 matching the jump pad address back to the tracepoint.  */
-      tpoint = fast_tracepoint_from_jump_pad_address (stop_pc);
-      if (tpoint == NULL)
-	{
-	  warning ("in jump pad, but no matching tpoint?");
-	  return fast_tpoint_collect_result::not_collecting;
-	}
-      else
-	{
-	  trace_debug ("in jump pad of tpoint (%d, %s); jump_pad(%s, %s); "
-		       "adj_insn(%s, %s)",
-		       tpoint->number, paddress (tpoint->address),
-		       paddress (tpoint->jump_pad),
-		       paddress (tpoint->jump_pad_end),
-		       paddress (tpoint->adjusted_insn_addr),
-		       paddress (tpoint->adjusted_insn_addr_end));
-	}
-
-      /* Definitely in the jump pad.  May or may not need
-	 fast-exit-jump-pad breakpoint.  */
-      if (tpoint->jump_pad <= stop_pc
-	  && stop_pc < tpoint->adjusted_insn_addr)
-	needs_breakpoint =  1;
-    }
-  else if (ipa_gdb_trampoline_buffer <= stop_pc
-	   && stop_pc < ipa_gdb_trampoline_buffer_end)
-    {
-      /* We can tell which tracepoint(s) the thread is collecting by
-	 matching the trampoline address back to the tracepoint.  */
-      tpoint = fast_tracepoint_from_trampoline_address (stop_pc);
-      if (tpoint == NULL)
-	{
-	  warning ("in trampoline, but no matching tpoint?");
-	  return fast_tpoint_collect_result::not_collecting;
-	}
-      else
-	{
-	  trace_debug ("in trampoline of tpoint (%d, %s); trampoline(%s, %s)",
-		       tpoint->number, paddress (tpoint->address),
-		       paddress (tpoint->trampoline),
-		       paddress (tpoint->trampoline_end));
-	}
-
-      /* Have not reached jump pad yet, but treat the trampoline as a
-	 part of the jump pad that is before the adjusted original
-	 instruction.  */
-      needs_breakpoint = 1;
-    }
-  else
-    {
-      collecting_t ipa_collecting_obj;
-
-      /* If `collecting' is set/locked, then the THREAD_AREA thread
-	 may or not be the one holding the lock.  We have to read the
-	 lock to find out.  */
-
-      if (read_inferior_data_pointer (ipa_sym_addrs.addr_collecting,
-				      &ipa_collecting))
-	{
-	  trace_debug ("fast_tracepoint_collecting:"
-		       " failed reading 'collecting' in the inferior");
-	  return fast_tpoint_collect_result::not_collecting;
-	}
-
-      if (!ipa_collecting)
-	{
-	  trace_debug ("fast_tracepoint_collecting: not collecting"
-		       " (and nobody is).");
-	  return fast_tpoint_collect_result::not_collecting;
-	}
-
-      /* Some thread is collecting.  Check which.  */
-      if (read_inferior_memory (ipa_collecting,
-				(unsigned char *) &ipa_collecting_obj,
-				sizeof (ipa_collecting_obj)) != 0)
-	goto again;
-
-      if (ipa_collecting_obj.thread_area != thread_area)
-	{
-	  trace_debug ("fast_tracepoint_collecting: not collecting "
-		       "(another thread is)");
-	  return fast_tpoint_collect_result::not_collecting;
-	}
-
-      tpoint
-	= fast_tracepoint_from_ipa_tpoint_address (ipa_collecting_obj.tpoint);
-      if (tpoint == NULL)
-	{
-	  warning ("fast_tracepoint_collecting: collecting, "
-		   "but tpoint %s not found?",
-		   paddress ((CORE_ADDR) ipa_collecting_obj.tpoint));
-	  return fast_tpoint_collect_result::not_collecting;
-	}
-
-      /* The thread is within `gdb_collect', skip over the rest of
-	 fast tracepoint collection quickly using a breakpoint.  */
-      needs_breakpoint = 1;
-    }
-
-  /* The caller wants a bit of status detail.  */
-  if (status != NULL)
-    {
-      status->tpoint_num = tpoint->number;
-      status->tpoint_addr = tpoint->address;
-      status->adjusted_insn_addr = tpoint->adjusted_insn_addr;
-      status->adjusted_insn_addr_end = tpoint->adjusted_insn_addr_end;
-    }
-
-  if (needs_breakpoint)
-    {
-      /* Hasn't executed the original instruction yet.  Set breakpoint
-	 there, and wait till it's hit, then single-step until exiting
-	 the jump pad.  */
-
-      trace_debug ("\
-fast_tracepoint_collecting, returning continue-until-break at %s",
-		   paddress (tpoint->adjusted_insn_addr));
-
-      return fast_tpoint_collect_result::before_insn; /* continue */
-    }
-  else
-    {
-      /* Just single-step until exiting the jump pad.  */
-
-      trace_debug ("fast_tracepoint_collecting, returning "
-		   "need-single-step (%s-%s)",
-		   paddress (tpoint->adjusted_insn_addr),
-		   paddress (tpoint->adjusted_insn_addr_end));
-
-      return fast_tpoint_collect_result::at_insn; /* single-step */
-    }
-}
-
-#endif
-
-#ifdef IN_PROCESS_AGENT
-
-/* The global fast tracepoint collect lock.  Points to a collecting_t
-   object built on the stack by the jump pad, if presently locked;
-   NULL if it isn't locked.  Note that this lock *must* be set while
-   executing any *function other than the jump pad.  See
-   fast_tracepoint_collecting.  */
-EXTERN_C_PUSH
-IP_AGENT_EXPORT_VAR collecting_t *collecting;
-EXTERN_C_POP
-
-/* This routine, called from the jump pad (in asm) is designed to be
-   called from the jump pads of fast tracepoints, thus it is on the
-   critical path.  */
-
-IP_AGENT_EXPORT_FUNC void
-gdb_collect (struct tracepoint *tpoint, unsigned char *regs)
-{
-  struct fast_tracepoint_ctx ctx;
-  const struct target_desc *ipa_tdesc;
-
-  /* Don't do anything until the trace run is completely set up.  */
-  if (!tracing)
-    return;
-
-  ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx);
-  ctx.base.type = fast_tracepoint;
-  ctx.regs = regs;
-  ctx.regcache_initted = 0;
-  /* Wrap the regblock in a register cache (in the stack, we don't
-     want to malloc here).  */
-  ctx.regspace = (unsigned char *) alloca (ipa_tdesc->registers_size);
-  if (ctx.regspace == NULL)
-    {
-      trace_debug ("Trace buffer block allocation failed, skipping");
-      return;
-    }
-
-  for (ctx.tpoint = tpoint;
-       ctx.tpoint != NULL && ctx.tpoint->address == tpoint->address;
-       ctx.tpoint = ctx.tpoint->next)
-    {
-      if (!ctx.tpoint->enabled)
-	continue;
-
-      /* Multiple tracepoints of different types, such as fast tracepoint and
-	 static tracepoint, can be set at the same address.  */
-      if (ctx.tpoint->type != tpoint->type)
-	continue;
-
-      /* Test the condition if present, and collect if true.  */
-      if (ctx.tpoint->cond == NULL
-	  || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
-					   ctx.tpoint))
-	{
-	  collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
-				      ctx.tpoint->address, ctx.tpoint);
-
-	  /* Note that this will cause original insns to be written back
-	     to where we jumped from, but that's OK because we're jumping
-	     back to the next whole instruction.  This will go badly if
-	     instruction restoration is not atomic though.  */
-	  if (stopping_tracepoint
-	      || trace_buffer_is_full
-	      || expr_eval_result != expr_eval_no_error)
-	    {
-	      stop_tracing ();
-	      break;
-	    }
-	}
-      else
-	{
-	  /* If there was a condition and it evaluated to false, the only
-	     way we would stop tracing is if there was an error during
-	     condition expression evaluation.  */
-	  if (expr_eval_result != expr_eval_no_error)
-	    {
-	      stop_tracing ();
-	      break;
-	    }
-	}
-    }
-}
-
-/* These global variables points to the corresponding functions.  This is
-   necessary on powerpc64, where asking for function symbol address from gdb
-   results in returning the actual code pointer, instead of the descriptor
-   pointer.  */
-
-typedef void (*gdb_collect_ptr_type) (struct tracepoint *, unsigned char *);
-typedef ULONGEST (*get_raw_reg_ptr_type) (const unsigned char *, int);
-typedef LONGEST (*get_trace_state_variable_value_ptr_type) (int);
-typedef void (*set_trace_state_variable_value_ptr_type) (int, LONGEST);
-
-EXTERN_C_PUSH
-IP_AGENT_EXPORT_VAR gdb_collect_ptr_type gdb_collect_ptr = gdb_collect;
-IP_AGENT_EXPORT_VAR get_raw_reg_ptr_type get_raw_reg_ptr = get_raw_reg;
-IP_AGENT_EXPORT_VAR get_trace_state_variable_value_ptr_type
-  get_trace_state_variable_value_ptr = get_trace_state_variable_value;
-IP_AGENT_EXPORT_VAR set_trace_state_variable_value_ptr_type
-  set_trace_state_variable_value_ptr = set_trace_state_variable_value;
-EXTERN_C_POP
-
-#endif
-
-#ifndef IN_PROCESS_AGENT
-
-CORE_ADDR
-get_raw_reg_func_addr (void)
-{
-  CORE_ADDR res;
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_get_raw_reg_ptr, &res))
-    {
-      error ("error extracting get_raw_reg_ptr");
-      return 0;
-    }
-  return res;
-}
-
-CORE_ADDR
-get_get_tsv_func_addr (void)
-{
-  CORE_ADDR res;
-  if (read_inferior_data_pointer (
-	ipa_sym_addrs.addr_get_trace_state_variable_value_ptr, &res))
-    {
-      error ("error extracting get_trace_state_variable_value_ptr");
-      return 0;
-    }
-  return res;
-}
-
-CORE_ADDR
-get_set_tsv_func_addr (void)
-{
-  CORE_ADDR res;
-  if (read_inferior_data_pointer (
-	ipa_sym_addrs.addr_set_trace_state_variable_value_ptr, &res))
-    {
-      error ("error extracting set_trace_state_variable_value_ptr");
-      return 0;
-    }
-  return res;
-}
-
-static void
-compile_tracepoint_condition (struct tracepoint *tpoint,
-			      CORE_ADDR *jump_entry)
-{
-  CORE_ADDR entry_point = *jump_entry;
-  enum eval_result_type err;
-
-  trace_debug ("Starting condition compilation for tracepoint %d\n",
-	       tpoint->number);
-
-  /* Initialize the global pointer to the code being built.  */
-  current_insn_ptr = *jump_entry;
-
-  emit_prologue ();
-
-  err = compile_bytecodes (tpoint->cond);
-
-  if (err == expr_eval_no_error)
-    {
-      emit_epilogue ();
-
-      /* Record the beginning of the compiled code.  */
-      tpoint->compiled_cond = entry_point;
-
-      trace_debug ("Condition compilation for tracepoint %d complete\n",
-		   tpoint->number);
-    }
-  else
-    {
-      /* Leave the unfinished code in situ, but don't point to it.  */
-
-      tpoint->compiled_cond = 0;
-
-      trace_debug ("Condition compilation for tracepoint %d failed, "
-		   "error code %d",
-		   tpoint->number, err);
-    }
-
-  /* Update the code pointer passed in.  Note that we do this even if
-     the compile fails, so that we can look at the partial results
-     instead of letting them be overwritten.  */
-  *jump_entry = current_insn_ptr;
-
-  /* Leave a gap, to aid dump decipherment.  */
-  *jump_entry += 16;
-}
-
-/* The base pointer of the IPA's heap.  This is the only memory the
-   IPA is allowed to use.  The IPA should _not_ call the inferior's
-   `malloc' during operation.  That'd be slow, and, most importantly,
-   it may not be safe.  We may be collecting a tracepoint in a signal
-   handler, for example.  */
-static CORE_ADDR target_tp_heap;
-
-/* Allocate at least SIZE bytes of memory from the IPA heap, aligned
-   to 8 bytes.  */
-
-static CORE_ADDR
-target_malloc (ULONGEST size)
-{
-  CORE_ADDR ptr;
-
-  if (target_tp_heap == 0)
-    {
-      /* We have the pointer *address*, need what it points to.  */
-      if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_tp_heap_buffer,
-				      &target_tp_heap))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "couldn't get target heap head pointer");
-	}
-    }
-
-  ptr = target_tp_heap;
-  target_tp_heap += size;
-
-  /* Pad to 8-byte alignment.  */
-  target_tp_heap = ((target_tp_heap + 7) & ~0x7);
-
-  return ptr;
-}
-
-static CORE_ADDR
-download_agent_expr (struct agent_expr *expr)
-{
-  CORE_ADDR expr_addr;
-  CORE_ADDR expr_bytes;
-
-  expr_addr = target_malloc (sizeof (*expr));
-  target_write_memory (expr_addr, (unsigned char *) expr, sizeof (*expr));
-
-  expr_bytes = target_malloc (expr->length);
-  write_inferior_data_pointer (expr_addr + offsetof (struct agent_expr, bytes),
-			       expr_bytes);
-  target_write_memory (expr_bytes, expr->bytes, expr->length);
-
-  return expr_addr;
-}
-
-/* Align V up to N bits.  */
-#define UALIGN(V, N) (((V) + ((N) - 1)) & ~((N) - 1))
-
-/* Sync tracepoint with IPA, but leave maintenance of linked list to caller.  */
-
-static void
-download_tracepoint_1 (struct tracepoint *tpoint)
-{
-  struct tracepoint target_tracepoint;
-  CORE_ADDR tpptr = 0;
-
-  gdb_assert (tpoint->type == fast_tracepoint
-	      || tpoint->type == static_tracepoint);
-
-  if (tpoint->cond != NULL && target_emit_ops () != NULL)
-    {
-      CORE_ADDR jentry, jump_entry;
-
-      jentry = jump_entry = get_jump_space_head ();
-
-      if (tpoint->cond != NULL)
-	{
-	  /* Pad to 8-byte alignment. (needed?)  */
-	  /* Actually this should be left for the target to
-	     decide.  */
-	  jentry = UALIGN (jentry, 8);
-
-	  compile_tracepoint_condition (tpoint, &jentry);
-	}
-
-      /* Pad to 8-byte alignment.  */
-      jentry = UALIGN (jentry, 8);
-      claim_jump_space (jentry - jump_entry);
-    }
-
-  target_tracepoint = *tpoint;
-
-  tpptr = target_malloc (sizeof (*tpoint));
-  tpoint->obj_addr_on_target = tpptr;
-
-  /* Write the whole object.  We'll fix up its pointers in a bit.
-     Assume no next for now.  This is fixed up above on the next
-     iteration, if there's any.  */
-  target_tracepoint.next = NULL;
-  /* Need to clear this here too, since we're downloading the
-     tracepoints before clearing our own copy.  */
-  target_tracepoint.hit_count = 0;
-
-  target_write_memory (tpptr, (unsigned char *) &target_tracepoint,
-			 sizeof (target_tracepoint));
-
-  if (tpoint->cond)
-    write_inferior_data_pointer (tpptr
-				 + offsetof (struct tracepoint, cond),
-				 download_agent_expr (tpoint->cond));
-
-  if (tpoint->numactions)
-    {
-      int i;
-      CORE_ADDR actions_array;
-
-      /* The pointers array.  */
-      actions_array
-	= target_malloc (sizeof (*tpoint->actions) * tpoint->numactions);
-      write_inferior_data_pointer (tpptr + offsetof (struct tracepoint,
-						     actions),
-				   actions_array);
-
-      /* Now for each pointer, download the action.  */
-      for (i = 0; i < tpoint->numactions; i++)
-	{
-	  struct tracepoint_action *action = tpoint->actions[i];
-	  CORE_ADDR ipa_action = tracepoint_action_download (action);
-
-	  if (ipa_action != 0)
-	    write_inferior_data_pointer (actions_array
-					 + i * sizeof (*tpoint->actions),
-					 ipa_action);
-	}
-    }
-}
-
-#define IPA_PROTO_FAST_TRACE_FLAG 0
-#define IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET 2
-#define IPA_PROTO_FAST_TRACE_JUMP_PAD 10
-#define IPA_PROTO_FAST_TRACE_FJUMP_SIZE 18
-#define IPA_PROTO_FAST_TRACE_FJUMP_INSN 22
-
-/* Send a command to agent to download and install tracepoint TPOINT.  */
-
-static int
-tracepoint_send_agent (struct tracepoint *tpoint)
-{
-  char buf[IPA_CMD_BUF_SIZE];
-  char *p;
-  int i, ret;
-
-  p = buf;
-  strcpy (p, "FastTrace:");
-  p += 10;
-
-  COPY_FIELD_TO_BUF (p, tpoint, number);
-  COPY_FIELD_TO_BUF (p, tpoint, address);
-  COPY_FIELD_TO_BUF (p, tpoint, type);
-  COPY_FIELD_TO_BUF (p, tpoint, enabled);
-  COPY_FIELD_TO_BUF (p, tpoint, step_count);
-  COPY_FIELD_TO_BUF (p, tpoint, pass_count);
-  COPY_FIELD_TO_BUF (p, tpoint, numactions);
-  COPY_FIELD_TO_BUF (p, tpoint, hit_count);
-  COPY_FIELD_TO_BUF (p, tpoint, traceframe_usage);
-  COPY_FIELD_TO_BUF (p, tpoint, compiled_cond);
-  COPY_FIELD_TO_BUF (p, tpoint, orig_size);
-
-  /* condition */
-  p = agent_expr_send (p, tpoint->cond);
-
-  /* tracepoint_action */
-  for (i = 0; i < tpoint->numactions; i++)
-    {
-      struct tracepoint_action *action = tpoint->actions[i];
-
-      p[0] = action->type;
-      p = tracepoint_action_send (&p[1], action);
-    }
-
-  get_jump_space_head ();
-  /* Copy the value of GDB_JUMP_PAD_HEAD to command buffer, so that
-     agent can use jump pad from it.  */
-  if (tpoint->type == fast_tracepoint)
-    {
-      memcpy (p, &gdb_jump_pad_head, 8);
-      p += 8;
-    }
-
-  ret = run_inferior_command (buf, (int) (ptrdiff_t) (p - buf));
-  if (ret)
-    return ret;
-
-  if (!startswith (buf, "OK"))
-    return 1;
-
-  /* The value of tracepoint's target address is stored in BUF.  */
-  memcpy (&tpoint->obj_addr_on_target,
-	  &buf[IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET], 8);
-
-  if (tpoint->type == fast_tracepoint)
-    {
-      unsigned char *insn
-	= (unsigned char *) &buf[IPA_PROTO_FAST_TRACE_FJUMP_INSN];
-      int fjump_size;
-
-     trace_debug ("agent: read from cmd_buf 0x%x 0x%x\n",
-		  (unsigned int) tpoint->obj_addr_on_target,
-		  (unsigned int) gdb_jump_pad_head);
-
-      memcpy (&gdb_jump_pad_head, &buf[IPA_PROTO_FAST_TRACE_JUMP_PAD], 8);
-
-      /* This has been done in agent.  We should also set up record for it.  */
-      memcpy (&fjump_size, &buf[IPA_PROTO_FAST_TRACE_FJUMP_SIZE], 4);
-      /* Wire it in.  */
-      tpoint->handle
-	= set_fast_tracepoint_jump (tpoint->address, insn, fjump_size);
-    }
-
-  return 0;
-}
-
-static void
-download_tracepoint (struct tracepoint *tpoint)
-{
-  struct tracepoint *tp, *tp_prev;
-
-  if (tpoint->type != fast_tracepoint
-      && tpoint->type != static_tracepoint)
-    return;
-
-  download_tracepoint_1 (tpoint);
-
-  /* Find the previous entry of TPOINT, which is fast tracepoint or
-     static tracepoint.  */
-  tp_prev = NULL;
-  for (tp = tracepoints; tp != tpoint; tp = tp->next)
-    {
-      if (tp->type == fast_tracepoint || tp->type == static_tracepoint)
-	tp_prev = tp;
-    }
-
-  if (tp_prev)
-    {
-      CORE_ADDR tp_prev_target_next_addr;
-
-      /* Insert TPOINT after TP_PREV in IPA.  */
-      if (read_inferior_data_pointer (tp_prev->obj_addr_on_target
-				      + offsetof (struct tracepoint, next),
-				      &tp_prev_target_next_addr))
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "error reading `tp_prev->next'");
-	}
-
-      /* tpoint->next = tp_prev->next */
-      write_inferior_data_pointer (tpoint->obj_addr_on_target
-				   + offsetof (struct tracepoint, next),
-				   tp_prev_target_next_addr);
-      /* tp_prev->next = tpoint */
-      write_inferior_data_pointer (tp_prev->obj_addr_on_target
-				   + offsetof (struct tracepoint, next),
-				   tpoint->obj_addr_on_target);
-    }
-  else
-    /* First object in list, set the head pointer in the
-       inferior.  */
-    write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints,
-				 tpoint->obj_addr_on_target);
-
-}
-
-static void
-download_trace_state_variables (void)
-{
-  CORE_ADDR ptr = 0, prev_ptr = 0;
-  struct trace_state_variable *tsv;
-
-  /* Start out empty.  */
-  write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables, 0);
-
-  for (tsv = trace_state_variables; tsv != NULL; tsv = tsv->next)
-    {
-      struct trace_state_variable target_tsv;
-
-      /* TSV's with a getter have been initialized equally in both the
-	 inferior and GDBserver.  Skip them.  */
-      if (tsv->getter != NULL)
-	continue;
-
-      target_tsv = *tsv;
-
-      prev_ptr = ptr;
-      ptr = target_malloc (sizeof (*tsv));
-
-      if (tsv == trace_state_variables)
-	{
-	  /* First object in list, set the head pointer in the
-	     inferior.  */
-
-	  write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables,
-				       ptr);
-	}
-      else
-	{
-	  write_inferior_data_pointer (prev_ptr
-				       + offsetof (struct trace_state_variable,
-						   next),
-				       ptr);
-	}
-
-      /* Write the whole object.  We'll fix up its pointers in a bit.
-	 Assume no next, fixup when needed.  */
-      target_tsv.next = NULL;
-
-      target_write_memory (ptr, (unsigned char *) &target_tsv,
-			     sizeof (target_tsv));
-
-      if (tsv->name != NULL)
-	{
-	  size_t size = strlen (tsv->name) + 1;
-	  CORE_ADDR name_addr = target_malloc (size);
-	  target_write_memory (name_addr,
-				 (unsigned char *) tsv->name, size);
-	  write_inferior_data_pointer (ptr
-				       + offsetof (struct trace_state_variable,
-						   name),
-				       name_addr);
-	}
-
-      gdb_assert (tsv->getter == NULL);
-    }
-
-  if (prev_ptr != 0)
-    {
-      /* Fixup the next pointer in the last item in the list.  */
-      write_inferior_data_pointer (prev_ptr
-				   + offsetof (struct trace_state_variable,
-					       next), 0);
-    }
-}
-
-/* Upload complete trace frames out of the IP Agent's trace buffer
-   into GDBserver's trace buffer.  This always uploads either all or
-   no trace frames.  This is the counter part of
-   `trace_alloc_trace_buffer'.  See its description of the atomic
-   syncing mechanism.  */
-
-static void
-upload_fast_traceframes (void)
-{
-  unsigned int ipa_traceframe_read_count, ipa_traceframe_write_count;
-  unsigned int ipa_traceframe_read_count_racy, ipa_traceframe_write_count_racy;
-  CORE_ADDR tf;
-  struct ipa_trace_buffer_control ipa_trace_buffer_ctrl;
-  unsigned int curr_tbctrl_idx;
-  unsigned int ipa_trace_buffer_ctrl_curr;
-  unsigned int ipa_trace_buffer_ctrl_curr_old;
-  CORE_ADDR ipa_trace_buffer_ctrl_addr;
-  struct breakpoint *about_to_request_buffer_space_bkpt;
-  CORE_ADDR ipa_trace_buffer_lo;
-  CORE_ADDR ipa_trace_buffer_hi;
-
-  if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count,
-			      &ipa_traceframe_read_count_racy))
-    {
-      /* This will happen in most targets if the current thread is
-	 running.  */
-      return;
-    }
-
-  if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count,
-			      &ipa_traceframe_write_count_racy))
-    return;
-
-  trace_debug ("ipa_traceframe_count (racy area): %d (w=%d, r=%d)",
-	       ipa_traceframe_write_count_racy
-	       - ipa_traceframe_read_count_racy,
-	       ipa_traceframe_write_count_racy,
-	       ipa_traceframe_read_count_racy);
-
-  if (ipa_traceframe_write_count_racy == ipa_traceframe_read_count_racy)
-    return;
-
-  about_to_request_buffer_space_bkpt
-    = set_breakpoint_at (ipa_sym_addrs.addr_about_to_request_buffer_space,
-			 NULL);
-
-  if (read_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr,
-			      &ipa_trace_buffer_ctrl_curr))
-    return;
-
-  ipa_trace_buffer_ctrl_curr_old = ipa_trace_buffer_ctrl_curr;
-
-  curr_tbctrl_idx = ipa_trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK;
-
-  {
-    unsigned int prev, counter;
-
-    /* Update the token, with new counters, and the GDBserver stamp
-       bit.  Alway reuse the current TBC index.  */
-    prev = ipa_trace_buffer_ctrl_curr & GDBSERVER_FLUSH_COUNT_MASK_CURR;
-    counter = (prev + 0x100) & GDBSERVER_FLUSH_COUNT_MASK_CURR;
-
-    ipa_trace_buffer_ctrl_curr = (GDBSERVER_UPDATED_FLUSH_COUNT_BIT
-				  | (prev << 12)
-				  | counter
-				  | curr_tbctrl_idx);
-  }
-
-  if (write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr,
-			       ipa_trace_buffer_ctrl_curr))
-    return;
-
-  trace_debug ("Lib: Committed %08x -> %08x",
-	       ipa_trace_buffer_ctrl_curr_old,
-	       ipa_trace_buffer_ctrl_curr);
-
-  /* Re-read these, now that we've installed the
-     `about_to_request_buffer_space' breakpoint/lock.  A thread could
-     have finished a traceframe between the last read of these
-     counters and setting the breakpoint above.  If we start
-     uploading, we never want to leave this function with
-     traceframe_read_count != 0, otherwise, GDBserver could end up
-     incrementing the counter tokens more than once (due to event loop
-     nesting), which would break the IP agent's "effective" detection
-     (see trace_alloc_trace_buffer).  */
-  if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count,
-			      &ipa_traceframe_read_count))
-    return;
-  if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count,
-			      &ipa_traceframe_write_count))
-    return;
-
-  if (debug_threads)
-    {
-      trace_debug ("ipa_traceframe_count (blocked area): %d (w=%d, r=%d)",
-		   ipa_traceframe_write_count - ipa_traceframe_read_count,
-		   ipa_traceframe_write_count, ipa_traceframe_read_count);
-
-      if (ipa_traceframe_write_count != ipa_traceframe_write_count_racy
-	  || ipa_traceframe_read_count != ipa_traceframe_read_count_racy)
-	trace_debug ("note that ipa_traceframe_count's parts changed");
-    }
-
-  /* Get the address of the current TBC object (the IP agent has an
-     array of 3 such objects).  The index is stored in the TBC
-     token.  */
-  ipa_trace_buffer_ctrl_addr = ipa_sym_addrs.addr_trace_buffer_ctrl;
-  ipa_trace_buffer_ctrl_addr
-    += sizeof (struct ipa_trace_buffer_control) * curr_tbctrl_idx;
-
-  if (read_inferior_memory (ipa_trace_buffer_ctrl_addr,
-			    (unsigned char *) &ipa_trace_buffer_ctrl,
-			    sizeof (struct ipa_trace_buffer_control)))
-    return;
-
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo,
-				  &ipa_trace_buffer_lo))
-    return;
-  if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi,
-				  &ipa_trace_buffer_hi))
-    return;
-
-  /* Offsets are easier to grok for debugging than raw addresses,
-     especially for the small trace buffer sizes that are useful for
-     testing.  */
-  trace_debug ("Lib: Trace buffer [%d] start=%d free=%d "
-	       "endfree=%d wrap=%d hi=%d",
-	       curr_tbctrl_idx,
-	       (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo),
-	       (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo),
-	       (int) (ipa_trace_buffer_ctrl.end_free - ipa_trace_buffer_lo),
-	       (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo),
-	       (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo));
-
-  /* Note that the IPA's buffer is always circular.  */
-
-#define IPA_FIRST_TRACEFRAME() (ipa_trace_buffer_ctrl.start)
-
-#define IPA_NEXT_TRACEFRAME_1(TF, TFOBJ)		\
-  ((TF) + sizeof (struct traceframe) + (TFOBJ)->data_size)
-
-#define IPA_NEXT_TRACEFRAME(TF, TFOBJ)					\
-  (IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ)					\
-   - ((IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ) >= ipa_trace_buffer_ctrl.wrap) \
-      ? (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo)		\
-      : 0))
-
-  tf = IPA_FIRST_TRACEFRAME ();
-
-  while (ipa_traceframe_write_count - ipa_traceframe_read_count)
-    {
-      struct tracepoint *tpoint;
-      struct traceframe *tframe;
-      unsigned char *block;
-      struct traceframe ipa_tframe;
-
-      if (read_inferior_memory (tf, (unsigned char *) &ipa_tframe,
-				offsetof (struct traceframe, data)))
-	error ("Uploading: couldn't read traceframe at %s\n", paddress (tf));
-
-      if (ipa_tframe.tpnum == 0)
-	{
-	  internal_error (__FILE__, __LINE__,
-			  "Uploading: No (more) fast traceframes, but"
-			  " ipa_traceframe_count == %u??\n",
-			  ipa_traceframe_write_count
-			  - ipa_traceframe_read_count);
-	}
-
-      /* Note that this will be incorrect for multi-location
-	 tracepoints...  */
-      tpoint = find_next_tracepoint_by_number (NULL, ipa_tframe.tpnum);
-
-      tframe = add_traceframe (tpoint);
-      if (tframe == NULL)
-	{
-	  trace_buffer_is_full = 1;
-	  trace_debug ("Uploading: trace buffer is full");
-	}
-      else
-	{
-	  /* Copy the whole set of blocks in one go for now.  FIXME:
-	     split this in smaller blocks.  */
-	  block = add_traceframe_block (tframe, tpoint,
-					ipa_tframe.data_size);
-	  if (block != NULL)
-	    {
-	      if (read_inferior_memory (tf
-					+ offsetof (struct traceframe, data),
-					block, ipa_tframe.data_size))
-		error ("Uploading: Couldn't read traceframe data at %s\n",
-		       paddress (tf + offsetof (struct traceframe, data)));
-	    }
-
-	  trace_debug ("Uploading: traceframe didn't fit");
-	  finish_traceframe (tframe);
-	}
-
-      tf = IPA_NEXT_TRACEFRAME (tf, &ipa_tframe);
-
-      /* If we freed the traceframe that wrapped around, go back
-	 to the non-wrap case.  */
-      if (tf < ipa_trace_buffer_ctrl.start)
-	{
-	  trace_debug ("Lib: Discarding past the wraparound");
-	  ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi;
-	}
-      ipa_trace_buffer_ctrl.start = tf;
-      ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_ctrl.start;
-      ++ipa_traceframe_read_count;
-
-      if (ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.free
-	  && ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.end_free)
-	{
-	  trace_debug ("Lib: buffer is fully empty.  "
-		       "Trace buffer [%d] start=%d free=%d endfree=%d",
-		       curr_tbctrl_idx,
-		       (int) (ipa_trace_buffer_ctrl.start
-			      - ipa_trace_buffer_lo),
-		       (int) (ipa_trace_buffer_ctrl.free
-			      - ipa_trace_buffer_lo),
-		       (int) (ipa_trace_buffer_ctrl.end_free
-			      - ipa_trace_buffer_lo));
-
-	  ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo;
-	  ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo;
-	  ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi;
-	  ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi;
-	}
-
-      trace_debug ("Uploaded a traceframe\n"
-		   "Lib: Trace buffer [%d] start=%d free=%d "
-		   "endfree=%d wrap=%d hi=%d",
-		   curr_tbctrl_idx,
-		   (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo),
-		   (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo),
-		   (int) (ipa_trace_buffer_ctrl.end_free
-			  - ipa_trace_buffer_lo),
-		   (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo),
-		   (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo));
-    }
-
-  if (target_write_memory (ipa_trace_buffer_ctrl_addr,
-			     (unsigned char *) &ipa_trace_buffer_ctrl,
-			     sizeof (struct ipa_trace_buffer_control)))
-    return;
-
-  write_inferior_integer (ipa_sym_addrs.addr_traceframe_read_count,
-			  ipa_traceframe_read_count);
-
-  trace_debug ("Done uploading traceframes [%d]\n", curr_tbctrl_idx);
-
-  pause_all (1);
-
-  delete_breakpoint (about_to_request_buffer_space_bkpt);
-  about_to_request_buffer_space_bkpt = NULL;
-
-  unpause_all (1);
-
-  if (trace_buffer_is_full)
-    stop_tracing ();
-}
-#endif
-
-#ifdef IN_PROCESS_AGENT
-
-IP_AGENT_EXPORT_VAR int ust_loaded;
-IP_AGENT_EXPORT_VAR char cmd_buf[IPA_CMD_BUF_SIZE];
-
-#ifdef HAVE_UST
-
-/* Static tracepoints.  */
-
-/* UST puts a "struct tracepoint" in the global namespace, which
-   conflicts with our tracepoint.  Arguably, being a library, it
-   shouldn't take ownership of such a generic name.  We work around it
-   here.  */
-#define tracepoint ust_tracepoint
-#include <ust/ust.h>
-#undef tracepoint
-
-extern int serialize_to_text (char *outbuf, int bufsize,
-			      const char *fmt, va_list ap);
-
-#define GDB_PROBE_NAME "gdb"
-
-/* We dynamically search for the UST symbols instead of linking them
-   in.  This lets the user decide if the application uses static
-   tracepoints, instead of always pulling libust.so in.  This vector
-   holds pointers to all functions we care about.  */
-
-static struct
-{
-  int (*serialize_to_text) (char *outbuf, int bufsize,
-			    const char *fmt, va_list ap);
-
-  int (*ltt_probe_register) (struct ltt_available_probe *pdata);
-  int (*ltt_probe_unregister) (struct ltt_available_probe *pdata);
-
-  int (*ltt_marker_connect) (const char *channel, const char *mname,
-			     const char *pname);
-  int (*ltt_marker_disconnect) (const char *channel, const char *mname,
-				const char *pname);
-
-  void (*marker_iter_start) (struct marker_iter *iter);
-  void (*marker_iter_next) (struct marker_iter *iter);
-  void (*marker_iter_stop) (struct marker_iter *iter);
-  void (*marker_iter_reset) (struct marker_iter *iter);
-} ust_ops;
-
-#include <dlfcn.h>
-
-/* Cast through typeof to catch incompatible API changes.  Since UST
-   only builds with gcc, we can freely use gcc extensions here
-   too.  */
-#define GET_UST_SYM(SYM)					\
-  do								\
-    {								\
-      if (ust_ops.SYM == NULL)					\
-	ust_ops.SYM = (typeof (&SYM)) dlsym (RTLD_DEFAULT, #SYM);	\
-      if (ust_ops.SYM == NULL)					\
-	return 0;						\
-    } while (0)
-
-#define USTF(SYM) ust_ops.SYM
-
-/* Get pointers to all libust.so functions we care about.  */
-
-static int
-dlsym_ust (void)
-{
-  GET_UST_SYM (serialize_to_text);
-
-  GET_UST_SYM (ltt_probe_register);
-  GET_UST_SYM (ltt_probe_unregister);
-  GET_UST_SYM (ltt_marker_connect);
-  GET_UST_SYM (ltt_marker_disconnect);
-
-  GET_UST_SYM (marker_iter_start);
-  GET_UST_SYM (marker_iter_next);
-  GET_UST_SYM (marker_iter_stop);
-  GET_UST_SYM (marker_iter_reset);
-
-  ust_loaded = 1;
-  return 1;
-}
-
-/* Given an UST marker, return the matching gdb static tracepoint.
-   The match is done by address.  */
-
-static struct tracepoint *
-ust_marker_to_static_tracepoint (const struct marker *mdata)
-{
-  struct tracepoint *tpoint;
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    {
-      if (tpoint->type != static_tracepoint)
-	continue;
-
-      if (tpoint->address == (uintptr_t) mdata->location)
-	return tpoint;
-    }
-
-  return NULL;
-}
-
-/* The probe function we install on lttng/ust markers.  Whenever a
-   probed ust marker is hit, this function is called.  This is similar
-   to gdb_collect, only for static tracepoints, instead of fast
-   tracepoints.  */
-
-static void
-gdb_probe (const struct marker *mdata, void *probe_private,
-	   struct registers *regs, void *call_private,
-	   const char *fmt, va_list *args)
-{
-  struct tracepoint *tpoint;
-  struct static_tracepoint_ctx ctx;
-  const struct target_desc *ipa_tdesc;
-
-  /* Don't do anything until the trace run is completely set up.  */
-  if (!tracing)
-    {
-      trace_debug ("gdb_probe: not tracing\n");
-      return;
-    }
-
-  ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx);
-  ctx.base.type = static_tracepoint;
-  ctx.regcache_initted = 0;
-  ctx.regs = regs;
-  ctx.fmt = fmt;
-  ctx.args = args;
-
-  /* Wrap the regblock in a register cache (in the stack, we don't
-     want to malloc here).  */
-  ctx.regspace = alloca (ipa_tdesc->registers_size);
-  if (ctx.regspace == NULL)
-    {
-      trace_debug ("Trace buffer block allocation failed, skipping");
-      return;
-    }
-
-  tpoint = ust_marker_to_static_tracepoint (mdata);
-  if (tpoint == NULL)
-    {
-      trace_debug ("gdb_probe: marker not known: "
-		   "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"",
-		   mdata->location, mdata->channel,
-		   mdata->name, mdata->format);
-      return;
-    }
-
-  if (!tpoint->enabled)
-    {
-      trace_debug ("gdb_probe: tracepoint disabled");
-      return;
-    }
-
-  ctx.tpoint = tpoint;
-
-  trace_debug ("gdb_probe: collecting marker: "
-	       "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"",
-	       mdata->location, mdata->channel,
-	       mdata->name, mdata->format);
-
-  /* Test the condition if present, and collect if true.  */
-  if (tpoint->cond == NULL
-      || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
-				       tpoint))
-    {
-      collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
-				  tpoint->address, tpoint);
-
-      if (stopping_tracepoint
-	  || trace_buffer_is_full
-	  || expr_eval_result != expr_eval_no_error)
-	stop_tracing ();
-    }
-  else
-    {
-      /* If there was a condition and it evaluated to false, the only
-	 way we would stop tracing is if there was an error during
-	 condition expression evaluation.  */
-      if (expr_eval_result != expr_eval_no_error)
-	stop_tracing ();
-    }
-}
-
-/* Called if the gdb static tracepoint requested collecting "$_sdata",
-   static tracepoint string data.  This is a string passed to the
-   tracing library by the user, at the time of the tracepoint marker
-   call.  E.g., in the UST marker call:
-
-     trace_mark (ust, bar33, "str %s", "FOOBAZ");
-
-   the collected data is "str FOOBAZ".
-*/
-
-static void
-collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-				struct traceframe *tframe)
-{
-  struct static_tracepoint_ctx *umd = (struct static_tracepoint_ctx *) ctx;
-  unsigned char *bufspace;
-  int size;
-  va_list copy;
-  unsigned short blocklen;
-
-  if (umd == NULL)
-    {
-      trace_debug ("Wanted to collect static trace data, "
-		   "but there's no static trace data");
-      return;
-    }
-
-  va_copy (copy, *umd->args);
-  size = USTF(serialize_to_text) (NULL, 0, umd->fmt, copy);
-  va_end (copy);
-
-  trace_debug ("Want to collect ust data");
-
-  /* 'S' + size + string */
-  bufspace = add_traceframe_block (tframe, umd->tpoint,
-				   1 + sizeof (blocklen) + size + 1);
-  if (bufspace == NULL)
-    {
-      trace_debug ("Trace buffer block allocation failed, skipping");
-      return;
-    }
-
-  /* Identify a static trace data block.  */
-  *bufspace = 'S';
-
-  blocklen = size + 1;
-  memcpy (bufspace + 1, &blocklen, sizeof (blocklen));
-
-  va_copy (copy, *umd->args);
-  USTF(serialize_to_text) ((char *) bufspace + 1 + sizeof (blocklen),
-			   size + 1, umd->fmt, copy);
-  va_end (copy);
-
-  trace_debug ("Storing static tracepoint data in regblock: %s",
-	       bufspace + 1 + sizeof (blocklen));
-}
-
-/* The probe to register with lttng/ust.  */
-static struct ltt_available_probe gdb_ust_probe =
-  {
-    GDB_PROBE_NAME,
-    NULL,
-    gdb_probe,
-  };
-
-#endif /* HAVE_UST */
-#endif /* IN_PROCESS_AGENT */
-
-#ifndef IN_PROCESS_AGENT
-
-/* Ask the in-process agent to run a command.  Since we don't want to
-   have to handle the IPA hitting breakpoints while running the
-   command, we pause all threads, remove all breakpoints, and then set
-   the helper thread re-running.  We communicate with the helper
-   thread by means of direct memory xfering, and a socket for
-   synchronization.  */
-
-static int
-run_inferior_command (char *cmd, int len)
-{
-  int err = -1;
-  int pid = current_ptid.pid ();
-
-  trace_debug ("run_inferior_command: running: %s", cmd);
-
-  pause_all (0);
-  uninsert_all_breakpoints ();
-
-  err = agent_run_command (pid, (const char *) cmd, len);
-
-  reinsert_all_breakpoints ();
-  unpause_all (0);
-
-  return err;
-}
-
-#else /* !IN_PROCESS_AGENT */
-
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#ifndef UNIX_PATH_MAX
-#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
-#endif
-
-/* Where we put the socked used for synchronization.  */
-#define SOCK_DIR P_tmpdir
-
-/* Thread ID of the helper thread.  GDBserver reads this to know which
-   is the help thread.  This is an LWP id on Linux.  */
-EXTERN_C_PUSH
-IP_AGENT_EXPORT_VAR int helper_thread_id;
-EXTERN_C_POP
-
-static int
-init_named_socket (const char *name)
-{
-  int result, fd;
-  struct sockaddr_un addr;
-
-  result = fd = socket (PF_UNIX, SOCK_STREAM, 0);
-  if (result == -1)
-    {
-      warning ("socket creation failed: %s", safe_strerror (errno));
-      return -1;
-    }
-
-  addr.sun_family = AF_UNIX;
-
-  strncpy (addr.sun_path, name, UNIX_PATH_MAX);
-  addr.sun_path[UNIX_PATH_MAX - 1] = '\0';
-
-  result = access (name, F_OK);
-  if (result == 0)
-    {
-      /* File exists.  */
-      result = unlink (name);
-      if (result == -1)
-	{
-	  warning ("unlink failed: %s", safe_strerror (errno));
-	  close (fd);
-	  return -1;
-	}
-      warning ("socket %s already exists; overwriting", name);
-    }
-
-  result = bind (fd, (struct sockaddr *) &addr, sizeof (addr));
-  if (result == -1)
-    {
-      warning ("bind failed: %s", safe_strerror (errno));
-      close (fd);
-      return -1;
-    }
-
-  result = listen (fd, 1);
-  if (result == -1)
-    {
-      warning ("listen: %s", safe_strerror (errno));
-      close (fd);
-      return -1;
-    }
-
-  return fd;
-}
-
-static char agent_socket_name[UNIX_PATH_MAX];
-
-static int
-gdb_agent_socket_init (void)
-{
-  int result, fd;
-
-  result = xsnprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d",
-		      SOCK_DIR, getpid ());
-  if (result >= UNIX_PATH_MAX)
-    {
-      trace_debug ("string overflow allocating socket name");
-      return -1;
-    }
-
-  fd = init_named_socket (agent_socket_name);
-  if (fd < 0)
-    warning ("Error initializing named socket (%s) for communication with the "
-	     "ust helper thread. Check that directory exists and that it "
-	     "is writable.", agent_socket_name);
-
-  return fd;
-}
-
-#ifdef HAVE_UST
-
-/* The next marker to be returned on a qTsSTM command.  */
-static const struct marker *next_st;
-
-/* Returns the first known marker.  */
-
-struct marker *
-first_marker (void)
-{
-  struct marker_iter iter;
-
-  USTF(marker_iter_reset) (&iter);
-  USTF(marker_iter_start) (&iter);
-
-  return iter.marker;
-}
-
-/* Returns the marker following M.  */
-
-const struct marker *
-next_marker (const struct marker *m)
-{
-  struct marker_iter iter;
-
-  USTF(marker_iter_reset) (&iter);
-  USTF(marker_iter_start) (&iter);
-
-  for (; iter.marker != NULL; USTF(marker_iter_next) (&iter))
-    {
-      if (iter.marker == m)
-	{
-	  USTF(marker_iter_next) (&iter);
-	  return iter.marker;
-	}
-    }
-
-  return NULL;
-}
-
-/* Return an hexstr version of the STR C string, fit for sending to
-   GDB.  */
-
-static char *
-cstr_to_hexstr (const char *str)
-{
-  int len = strlen (str);
-  char *hexstr = xmalloc (len * 2 + 1);
-  bin2hex ((gdb_byte *) str, hexstr, len);
-  return hexstr;
-}
-
-/* Compose packet that is the response to the qTsSTM/qTfSTM/qTSTMat
-   packets.  */
-
-static void
-response_ust_marker (char *packet, const struct marker *st)
-{
-  char *strid, *format, *tmp;
-
-  next_st = next_marker (st);
-
-  tmp = xmalloc (strlen (st->channel) + 1 +
-		 strlen (st->name) + 1);
-  sprintf (tmp, "%s/%s", st->channel, st->name);
-
-  strid = cstr_to_hexstr (tmp);
-  free (tmp);
-
-  format = cstr_to_hexstr (st->format);
-
-  sprintf (packet, "m%s:%s:%s",
-	   paddress ((uintptr_t) st->location),
-	   strid,
-	   format);
-
-  free (strid);
-  free (format);
-}
-
-/* Return the first static tracepoint, and initialize the state
-   machine that will iterate through all the static tracepoints.  */
-
-static void
-cmd_qtfstm (char *packet)
-{
-  trace_debug ("Returning first trace state variable definition");
-
-  if (first_marker ())
-    response_ust_marker (packet, first_marker ());
-  else
-    strcpy (packet, "l");
-}
-
-/* Return additional trace state variable definitions. */
-
-static void
-cmd_qtsstm (char *packet)
-{
-  trace_debug ("Returning static tracepoint");
-
-  if (next_st)
-    response_ust_marker (packet, next_st);
-  else
-    strcpy (packet, "l");
-}
-
-/* Disconnect the GDB probe from a marker at a given address.  */
-
-static void
-unprobe_marker_at (char *packet)
-{
-  char *p = packet;
-  ULONGEST address;
-  struct marker_iter iter;
-
-  p += sizeof ("unprobe_marker_at:") - 1;
-
-  p = unpack_varlen_hex (p, &address);
-
-  USTF(marker_iter_reset) (&iter);
-  USTF(marker_iter_start) (&iter);
-  for (; iter.marker != NULL; USTF(marker_iter_next) (&iter))
-    if ((uintptr_t ) iter.marker->location == address)
-      {
-	int result;
-
-	result = USTF(ltt_marker_disconnect) (iter.marker->channel,
-					      iter.marker->name,
-					      GDB_PROBE_NAME);
-	if (result < 0)
-	  warning ("could not disable marker %s/%s",
-		   iter.marker->channel, iter.marker->name);
-	break;
-      }
-}
-
-/* Connect the GDB probe to a marker at a given address.  */
-
-static int
-probe_marker_at (char *packet)
-{
-  char *p = packet;
-  ULONGEST address;
-  struct marker_iter iter;
-  struct marker *m;
-
-  p += sizeof ("probe_marker_at:") - 1;
-
-  p = unpack_varlen_hex (p, &address);
-
-  USTF(marker_iter_reset) (&iter);
-
-  for (USTF(marker_iter_start) (&iter), m = iter.marker;
-       m != NULL;
-       USTF(marker_iter_next) (&iter), m = iter.marker)
-    if ((uintptr_t ) m->location == address)
-      {
-	int result;
-
-	trace_debug ("found marker for address.  "
-		     "ltt_marker_connect (marker = %s/%s)",
-		     m->channel, m->name);
-
-	result = USTF(ltt_marker_connect) (m->channel, m->name,
-					   GDB_PROBE_NAME);
-	if (result && result != -EEXIST)
-	  trace_debug ("ltt_marker_connect (marker = %s/%s, errno = %d)",
-		       m->channel, m->name, -result);
-
-	if (result < 0)
-	  {
-	    sprintf (packet, "E.could not connect marker: channel=%s, name=%s",
-		     m->channel, m->name);
-	    return -1;
-	  }
-
-	strcpy (packet, "OK");
-	return 0;
-      }
-
-  sprintf (packet, "E.no marker found at 0x%s", paddress (address));
-  return -1;
-}
-
-static int
-cmd_qtstmat (char *packet)
-{
-  char *p = packet;
-  ULONGEST address;
-  struct marker_iter iter;
-  struct marker *m;
-
-  p += sizeof ("qTSTMat:") - 1;
-
-  p = unpack_varlen_hex (p, &address);
-
-  USTF(marker_iter_reset) (&iter);
-
-  for (USTF(marker_iter_start) (&iter), m = iter.marker;
-       m != NULL;
-       USTF(marker_iter_next) (&iter), m = iter.marker)
-    if ((uintptr_t ) m->location == address)
-      {
-	response_ust_marker (packet, m);
-	return 0;
-      }
-
-  strcpy (packet, "l");
-  return -1;
-}
-
-static void
-gdb_ust_init (void)
-{
-  if (!dlsym_ust ())
-    return;
-
-  USTF(ltt_probe_register) (&gdb_ust_probe);
-}
-
-#endif /* HAVE_UST */
-
-#include <sys/syscall.h>
-
-static void
-gdb_agent_remove_socket (void)
-{
-  unlink (agent_socket_name);
-}
-
-/* Helper thread of agent.  */
-
-static void *
-gdb_agent_helper_thread (void *arg)
-{
-  int listen_fd;
-
-  atexit (gdb_agent_remove_socket);
-
-  while (1)
-    {
-      listen_fd = gdb_agent_socket_init ();
-
-      if (helper_thread_id == 0)
-	helper_thread_id = syscall (SYS_gettid);
-
-      if (listen_fd == -1)
-	{
-	  warning ("could not create sync socket");
-	  break;
-	}
-
-      while (1)
-	{
-	  socklen_t tmp;
-	  struct sockaddr_un sockaddr;
-	  int fd;
-	  char buf[1];
-	  int ret;
-	  int stop_loop = 0;
-
-	  tmp = sizeof (sockaddr);
-
-	  do
-	    {
-	      fd = accept (listen_fd, (struct sockaddr *) &sockaddr, &tmp);
-	    }
-	  /* It seems an ERESTARTSYS can escape out of accept.  */
-	  while (fd == -512 || (fd == -1 && errno == EINTR));
-
-	  if (fd < 0)
-	    {
-	      warning ("Accept returned %d, error: %s",
-		       fd, safe_strerror (errno));
-	      break;
-	    }
-
-	  do
-	    {
-	      ret = read (fd, buf, 1);
-	    } while (ret == -1 && errno == EINTR);
-
-	  if (ret == -1)
-	    {
-	      warning ("reading socket (fd=%d) failed with %s",
-		       fd, safe_strerror (errno));
-	      close (fd);
-	      break;
-	    }
-
-	  if (cmd_buf[0])
-	    {
-	      if (startswith (cmd_buf, "close"))
-		{
-		  stop_loop = 1;
-		}
-#ifdef HAVE_UST
-	      else if (strcmp ("qTfSTM", cmd_buf) == 0)
-		{
-		  cmd_qtfstm (cmd_buf);
-		}
-	      else if (strcmp ("qTsSTM", cmd_buf) == 0)
-		{
-		  cmd_qtsstm (cmd_buf);
-		}
-	      else if (startswith (cmd_buf, "unprobe_marker_at:"))
-		{
-		  unprobe_marker_at (cmd_buf);
-		}
-	      else if (startswith (cmd_buf, "probe_marker_at:"))
-		{
-		  probe_marker_at (cmd_buf);
-		}
-	      else if (startswith (cmd_buf, "qTSTMat:"))
-		{
-		  cmd_qtstmat (cmd_buf);
-		}
-#endif /* HAVE_UST */
-	    }
-
-	  /* Fix compiler's warning: ignoring return value of 'write'.  */
-	  ret = write (fd, buf, 1);
-	  close (fd);
-
-	  if (stop_loop)
-	    {
-	      close (listen_fd);
-	      unlink (agent_socket_name);
-
-	      /* Sleep endlessly to wait the whole inferior stops.  This
-		 thread can not exit because GDB or GDBserver may still need
-		 'current_thread' (representing this thread) to access
-		 inferior memory.  Otherwise, this thread exits earlier than
-		 other threads, and 'current_thread' is set to NULL.  */
-	      while (1)
-		sleep (10);
-	    }
-	}
-    }
-
-  return NULL;
-}
-
-#include <signal.h>
-#include <pthread.h>
-
-EXTERN_C_PUSH
-IP_AGENT_EXPORT_VAR int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE;
-EXTERN_C_POP
-
-static void
-gdb_agent_init (void)
-{
-  int res;
-  pthread_t thread;
-  sigset_t new_mask;
-  sigset_t orig_mask;
-
-  /* We want the helper thread to be as transparent as possible, so
-     have it inherit an all-signals-blocked mask.  */
-
-  sigfillset (&new_mask);
-  res = pthread_sigmask (SIG_SETMASK, &new_mask, &orig_mask);
-  if (res)
-    perror_with_name ("pthread_sigmask (1)");
-
-  res = pthread_create (&thread,
-			NULL,
-			gdb_agent_helper_thread,
-			NULL);
-
-  res = pthread_sigmask (SIG_SETMASK, &orig_mask, NULL);
-  if (res)
-    perror_with_name ("pthread_sigmask (2)");
-
-  while (helper_thread_id == 0)
-    usleep (1);
-
-#ifdef HAVE_UST
-  gdb_ust_init ();
-#endif
-}
-
-#include <sys/mman.h>
-
-IP_AGENT_EXPORT_VAR char *gdb_tp_heap_buffer;
-IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer;
-IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer_end;
-IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer;
-IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_end;
-IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_error;
-
-/* Record the result of getting buffer space for fast tracepoint
-   trampolines.  Any error message is copied, since caller may not be
-   using persistent storage.  */
-
-void
-set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end, char *errmsg)
-{
-  gdb_trampoline_buffer = (char *) (uintptr_t) begin;
-  gdb_trampoline_buffer_end = (char *) (uintptr_t) end;
-  if (errmsg)
-    strncpy (gdb_trampoline_buffer_error, errmsg, 99);
-  else
-    strcpy (gdb_trampoline_buffer_error, "no buffer passed");
-}
-
-static void __attribute__ ((constructor))
-initialize_tracepoint_ftlib (void)
-{
-  initialize_tracepoint ();
-
-  gdb_agent_init ();
-}
-
-#ifndef HAVE_GETAUXVAL
-/* Retrieve the value of TYPE from the auxiliary vector.  If TYPE is not
-   found, 0 is returned.  This function is provided if glibc is too old.  */
-
-unsigned long
-getauxval (unsigned long type)
-{
-  unsigned long data[2];
-  FILE *f = fopen ("/proc/self/auxv", "r");
-  unsigned long value = 0;
-
-  if (f == NULL)
-    return 0;
-
-  while (fread (data, sizeof (data), 1, f) > 0)
-    {
-      if (data[0] == type)
-	{
-	  value = data[1];
-	  break;
-	}
-    }
-
-  fclose (f);
-  return value;
-}
-#endif
-
-#endif /* IN_PROCESS_AGENT */
-
-/* Return a timestamp, expressed as microseconds of the usual Unix
-   time.  (As the result is a 64-bit number, it will not overflow any
-   time soon.)  */
-
-static LONGEST
-get_timestamp (void)
-{
-  using namespace std::chrono;
-
-  steady_clock::time_point now = steady_clock::now ();
-  return duration_cast<microseconds> (now.time_since_epoch ()).count ();
-}
-
-void
-initialize_tracepoint (void)
-{
-  /* Start with the default size.  */
-  init_trace_buffer (DEFAULT_TRACE_BUFFER_SIZE);
-
-  /* Wire trace state variable 1 to be the timestamp.  This will be
-     uploaded to GDB upon connection and become one of its trace state
-     variables.  (In case you're wondering, if GDB already has a trace
-     variable numbered 1, it will be renumbered.)  */
-  create_trace_state_variable (1, 0);
-  set_trace_state_variable_name (1, "trace_timestamp");
-  set_trace_state_variable_getter (1, get_timestamp);
-
-#ifdef IN_PROCESS_AGENT
-  {
-    int pagesize;
-    size_t jump_pad_size;
-
-    pagesize = sysconf (_SC_PAGE_SIZE);
-    if (pagesize == -1)
-      perror_with_name ("sysconf");
-
-#define SCRATCH_BUFFER_NPAGES 20
-
-    jump_pad_size = pagesize * SCRATCH_BUFFER_NPAGES;
-
-    gdb_tp_heap_buffer = (char *) xmalloc (5 * 1024 * 1024);
-    gdb_jump_pad_buffer = (char *) alloc_jump_pad_buffer (jump_pad_size);
-    if (gdb_jump_pad_buffer == NULL)
-      perror_with_name ("mmap");
-    gdb_jump_pad_buffer_end = gdb_jump_pad_buffer + jump_pad_size;
-  }
-
-  gdb_trampoline_buffer = gdb_trampoline_buffer_end = 0;
-
-  /* It's not a fatal error for something to go wrong with trampoline
-     buffer setup, but it can be mysterious, so create a channel to
-     report back on what went wrong, using a fixed size since we may
-     not be able to allocate space later when the problem occurs.  */
-  gdb_trampoline_buffer_error = (char *) xmalloc (IPA_BUFSIZ);
-
-  strcpy (gdb_trampoline_buffer_error, "No errors reported");
-
-  initialize_low_tracepoint ();
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tracepoint.h ./gdb/gdbserver/tracepoint.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/tracepoint.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/tracepoint.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,195 +0,0 @@
-/* Tracepoint code for remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_TRACEPOINT_H
-#define GDBSERVER_TRACEPOINT_H
-
-/* Size for a small buffer to report problems from the in-process
-   agent back to GDBserver.  */
-#define IPA_BUFSIZ 100
-
-void initialize_tracepoint (void);
-
-#if defined(__GNUC__)
-# define ATTR_USED __attribute__((used))
-# define ATTR_NOINLINE __attribute__((noinline))
-#else
-# define ATTR_USED
-# define ATTR_NOINLINE
-#endif
-
-/* How to make symbol public/exported.  */
-
-#if defined _WIN32 || defined __CYGWIN__
-# define EXPORTED_SYMBOL __declspec (dllexport)
-#else
-# if __GNUC__ >= 4
-#  define EXPORTED_SYMBOL __attribute__ ((visibility ("default")))
-# else
-#  define EXPORTED_SYMBOL
-# endif
-#endif
-
-/* Use these to make sure the functions and variables the IPA needs to
-   export (symbols GDBserver needs to query GDB about) are visible and
-   have C linkage.
-
-   Tag exported functions with IP_AGENT_EXPORT_FUNC, tag the
-   definitions of exported variables with IP_AGENT_EXPORT_VAR, and
-   variable declarations with IP_AGENT_EXPORT_VAR_DECL.  Variables
-   must also be exported with C linkage.  As we can't both use extern
-   "C" and initialize a variable in the same statement, variables that
-   don't have a separate declaration must use
-   EXTERN_C_PUSH/EXTERN_C_POP around their definition.  */
-
-#ifdef IN_PROCESS_AGENT
-# define IP_AGENT_EXPORT_FUNC EXTERN_C EXPORTED_SYMBOL ATTR_NOINLINE ATTR_USED
-# define IP_AGENT_EXPORT_VAR EXPORTED_SYMBOL ATTR_USED
-# define IP_AGENT_EXPORT_VAR_DECL EXTERN_C EXPORTED_SYMBOL
-#else
-# define IP_AGENT_EXPORT_FUNC
-# define IP_AGENT_EXPORT_VAR
-# define IP_AGENT_EXPORT_VAR_DECL extern
-#endif
-
-IP_AGENT_EXPORT_VAR_DECL int tracing;
-
-extern int disconnected_tracing;
-
-void tracepoint_look_up_symbols (void);
-
-void stop_tracing (void);
-
-int handle_tracepoint_general_set (char *own_buf);
-int handle_tracepoint_query (char *own_buf);
-
-int tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc);
-int tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc);
-
-void release_while_stepping_state_list (struct thread_info *tinfo);
-
-int in_readonly_region (CORE_ADDR addr, ULONGEST length);
-int traceframe_read_mem (int tfnum, CORE_ADDR addr,
-			 unsigned char *buf, ULONGEST length,
-			 ULONGEST *nbytes);
-int fetch_traceframe_registers (int tfnum,
-				struct regcache *regcache,
-				int regnum);
-
-int traceframe_read_sdata (int tfnum, ULONGEST offset,
-			   unsigned char *buf, ULONGEST length,
-			   ULONGEST *nbytes);
-
-int traceframe_read_info (int tfnum, struct buffer *buffer);
-
-/* If a thread is determined to be collecting a fast tracepoint, this
-   structure holds the collect status.  */
-
-struct fast_tpoint_collect_status
-{
-  /* The tracepoint that is presently being collected.  */
-  int tpoint_num;
-  CORE_ADDR tpoint_addr;
-
-  /* The address range in the jump pad of where the original
-     instruction the tracepoint jump was inserted was relocated
-     to.  */
-  CORE_ADDR adjusted_insn_addr;
-  CORE_ADDR adjusted_insn_addr_end;
-};
-
-/* The possible states a thread can be in, related to the collection of fast
-   tracepoint.  */
-
-enum class fast_tpoint_collect_result
-{
-  /* Not collecting a fast tracepoint.  */
-  not_collecting,
-
-  /* In the jump pad, but before the relocated instruction.  */
-  before_insn,
-
-  /* In the jump pad, but at (or after) the relocated instruction.  */
-  at_insn,
-};
-
-fast_tpoint_collect_result fast_tracepoint_collecting
-  (CORE_ADDR thread_area, CORE_ADDR stop_pc,
-   struct fast_tpoint_collect_status *status);
-
-void force_unlock_trace_buffer (void);
-
-int handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc);
-
-#ifdef IN_PROCESS_AGENT
-void initialize_low_tracepoint (void);
-const struct target_desc *get_ipa_tdesc (int idx);
-void supply_fast_tracepoint_registers (struct regcache *regcache,
-				       const unsigned char *regs);
-void supply_static_tracepoint_registers (struct regcache *regcache,
-					 const unsigned char *regs,
-					 CORE_ADDR pc);
-void set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end,
-				  char *errmsg);
-void *alloc_jump_pad_buffer (size_t size);
-#ifndef HAVE_GETAUXVAL
-unsigned long getauxval (unsigned long type);
-#endif
-#else
-void stop_tracing (void);
-
-int claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline);
-int have_fast_tracepoint_trampoline_buffer (char *msgbuf);
-void gdb_agent_about_to_close (int pid);
-#endif
-
-struct traceframe;
-struct eval_agent_expr_context;
-
-/* Do memory copies for bytecodes.  */
-/* Do the recording of memory blocks for actions and bytecodes.  */
-
-int agent_mem_read (struct eval_agent_expr_context *ctx,
-		    unsigned char *to, CORE_ADDR from,
-		    ULONGEST len);
-
-LONGEST agent_get_trace_state_variable_value (int num);
-void agent_set_trace_state_variable_value (int num, LONGEST val);
-
-/* Record the value of a trace state variable.  */
-
-int agent_tsv_read (struct eval_agent_expr_context *ctx, int n);
-int agent_mem_read_string (struct eval_agent_expr_context *ctx,
-			   unsigned char *to,
-			   CORE_ADDR from,
-			   ULONGEST len);
-
-/* The prototype the get_raw_reg function in the IPA.  Each arch's
-   bytecode compiler emits calls to this function.  */
-ULONGEST get_raw_reg (const unsigned char *raw_regs, int regnum);
-
-/* Returns the address of the get_raw_reg function in the IPA.  */
-CORE_ADDR get_raw_reg_func_addr (void);
-/* Returns the address of the get_trace_state_variable_value
-   function in the IPA.  */
-CORE_ADDR get_get_tsv_func_addr (void);
-/* Returns the address of the set_trace_state_variable_value
-   function in the IPA.  */
-CORE_ADDR get_set_tsv_func_addr (void);
-
-#endif /* GDBSERVER_TRACEPOINT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/utils.c ./gdb/gdbserver/utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/utils.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,127 +0,0 @@
-/* General utility routines for the remote server for GDB.
-   Copyright (C) 1986-2020 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 "server.h"
-
-#ifdef IN_PROCESS_AGENT
-#  define PREFIX "ipa: "
-#  define TOOLNAME "GDBserver in-process agent"
-#else
-#  define PREFIX "gdbserver: "
-#  define TOOLNAME "GDBserver"
-#endif
-
-/* Generally useful subroutines used throughout the program.  */
-
-void
-malloc_failure (long size)
-{
-  fprintf (stderr,
-	   PREFIX "ran out of memory while trying to allocate %lu bytes\n",
-	   (unsigned long) size);
-  exit (1);
-}
-
-/* Print the system error message for errno, and also mention STRING
-   as the file name for which the error was encountered.
-   Then return to command level.  */
-
-void
-perror_with_name (const char *string)
-{
-  const char *err;
-  char *combined;
-
-  err = safe_strerror (errno);
-  if (err == NULL)
-    err = "unknown error";
-
-  combined = (char *) alloca (strlen (err) + strlen (string) + 3);
-  strcpy (combined, string);
-  strcat (combined, ": ");
-  strcat (combined, err);
-
-  error ("%s.", combined);
-}
-
-/* Print an error message and return to top level.  */
-
-void
-verror (const char *string, va_list args)
-{
-#ifdef IN_PROCESS_AGENT
-  fflush (stdout);
-  vfprintf (stderr, string, args);
-  fprintf (stderr, "\n");
-  exit (1);
-#else
-  throw_verror (GENERIC_ERROR, string, args);
-#endif
-}
-
-void
-vwarning (const char *string, va_list args)
-{
-  fprintf (stderr, PREFIX);
-  vfprintf (stderr, string, args);
-  fprintf (stderr, "\n");
-}
-
-/* Report a problem internal to GDBserver, and exit.  */
-
-void
-internal_verror (const char *file, int line, const char *fmt, va_list args)
-{
-  fprintf (stderr,  "\
-%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line);
-  vfprintf (stderr, fmt, args);
-  fprintf (stderr, "\n");
-  exit (1);
-}
-
-/* Report a problem internal to GDBserver.  */
-
-void
-internal_vwarning (const char *file, int line, const char *fmt, va_list args)
-{
-  fprintf (stderr,  "\
-%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line);
-  vfprintf (stderr, fmt, args);
-  fprintf (stderr, "\n");
-}
-
-/* Convert a CORE_ADDR into a HEX string, like %lx.
-   The result is stored in a circular static buffer, NUMCELLS deep.  */
-
-char *
-paddress (CORE_ADDR addr)
-{
-  return phex_nz (addr, sizeof (CORE_ADDR));
-}
-
-/* Convert a file descriptor into a printable string.  */
-
-char *
-pfildes (gdb_fildes_t fd)
-{
-#if USE_WIN32API
-  return phex_nz (fd, sizeof (gdb_fildes_t));
-#else
-  return plongest (fd);
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/utils.h ./gdb/gdbserver/utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/utils.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-/* General utility routines for the remote server for GDB.
-   Copyright (C) 1993-2020 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 GDBSERVER_UTILS_H
-#define GDBSERVER_UTILS_H
-
-char *paddress (CORE_ADDR addr);
-char *pfildes (gdb_fildes_t fd);
-
-#endif /* GDBSERVER_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-arm-low.c ./gdb/gdbserver/win32-arm-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-arm-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/win32-arm-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,134 +0,0 @@
-/* Copyright (C) 2007-2020 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 "server.h"
-#include "win32-low.h"
-
-#ifndef CONTEXT_FLOATING_POINT
-#define CONTEXT_FLOATING_POINT 0
-#endif
-
-/* Defined in auto-generated file reg-arm.c.  */
-void init_registers_arm (void);
-extern const struct target_desc *tdesc_arm;
-
-static void
-arm_get_thread_context (win32_thread_info *th)
-{
-  th->context.ContextFlags = \
-    CONTEXT_FULL | \
-    CONTEXT_FLOATING_POINT;
-
-  GetThreadContext (th->h, &th->context);
-}
-
-#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x))
-static const int mappings[] = {
-  context_offset (R0),
-  context_offset (R1),
-  context_offset (R2),
-  context_offset (R3),
-  context_offset (R4),
-  context_offset (R5),
-  context_offset (R6),
-  context_offset (R7),
-  context_offset (R8),
-  context_offset (R9),
-  context_offset (R10),
-  context_offset (R11),
-  context_offset (R12),
-  context_offset (Sp),
-  context_offset (Lr),
-  context_offset (Pc),
-  -1, /* f0 */
-  -1, /* f1 */
-  -1, /* f2 */
-  -1, /* f3 */
-  -1, /* f4 */
-  -1, /* f5 */
-  -1, /* f6 */
-  -1, /* f7 */
-  -1, /* fps */
-  context_offset (Psr),
-};
-#undef context_offset
-
-/* Return a pointer into a CONTEXT field indexed by gdb register number.
-   Return a pointer to an dummy register holding zero if there is no
-   corresponding CONTEXT field for the given register number.  */
-static char *
-regptr (CONTEXT* c, int r)
-{
-  if (mappings[r] < 0)
-  {
-    static ULONG zero;
-    /* Always force value to zero, in case the user tried to write
-       to this register before.  */
-    zero = 0;
-    return (char *) &zero;
-  }
-  else
-    return (char *) c + mappings[r];
-}
-
-/* Fetch register from gdbserver regcache data.  */
-static void
-arm_fetch_inferior_register (struct regcache *regcache,
-			     win32_thread_info *th, int r)
-{
-  char *context_offset = regptr (&th->context, r);
-  supply_register (regcache, r, context_offset);
-}
-
-/* Store a new register value into the thread context of TH.  */
-static void
-arm_store_inferior_register (struct regcache *regcache,
-			     win32_thread_info *th, int r)
-{
-  collect_register (regcache, r, regptr (&th->context, r));
-}
-
-static void
-arm_arch_setup (void)
-{
-  init_registers_arm ();
-  win32_tdesc = tdesc_arm;
-}
-
-/* Correct in either endianness.  We do not support Thumb yet.  */
-static const unsigned long arm_wince_breakpoint = 0xe6000010;
-#define arm_wince_breakpoint_len 4
-
-struct win32_target_ops the_low_target = {
-  arm_arch_setup,
-  sizeof (mappings) / sizeof (mappings[0]),
-  NULL, /* initial_stuff */
-  arm_get_thread_context,
-  NULL, /* prepare_to_resume */
-  NULL, /* thread_added */
-  arm_fetch_inferior_register,
-  arm_store_inferior_register,
-  NULL, /* single_step */
-  (const unsigned char *) &arm_wince_breakpoint,
-  arm_wince_breakpoint_len,
-  /* Watchpoint related functions.  See target.h for comments.  */
-  NULL, /* supports_z_point_type */
-  NULL, /* insert_point */
-  NULL, /* remove_point */
-  NULL, /* stopped_by_watchpoint */
-  NULL  /* stopped_data_address */
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-i386-low.c ./gdb/gdbserver/win32-i386-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-i386-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/win32-i386-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,468 +0,0 @@
-/* Copyright (C) 2007-2020 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 "server.h"
-#include "win32-low.h"
-#include "x86-low.h"
-#include "gdbsupport/x86-xstate.h"
-#ifdef __x86_64__
-#include "arch/amd64.h"
-#endif
-#include "arch/i386.h"
-#include "tdesc.h"
-#include "x86-tdesc.h"
-
-#ifndef CONTEXT_EXTENDED_REGISTERS
-#define CONTEXT_EXTENDED_REGISTERS 0
-#endif
-
-#define FCS_REGNUM 27
-#define FOP_REGNUM 31
-
-#define FLAG_TRACE_BIT 0x100
-
-static struct x86_debug_reg_state debug_reg_state;
-
-static void
-update_debug_registers (thread_info *thread)
-{
-  win32_thread_info *th = (win32_thread_info *) thread_target_data (thread);
-
-  /* The actual update is done later just before resuming the lwp,
-     we just mark that the registers need updating.  */
-  th->debug_registers_changed = 1;
-}
-
-/* Update the inferior's debug register REGNUM from STATE.  */
-
-static void
-x86_dr_low_set_addr (int regnum, CORE_ADDR addr)
-{
-  gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
-
-  /* Only update the threads of this process.  */
-  for_each_thread (current_thread->id.pid (), update_debug_registers);
-}
-
-/* Update the inferior's DR7 debug control register from STATE.  */
-
-static void
-x86_dr_low_set_control (unsigned long control)
-{
-  /* Only update the threads of this process.  */
-  for_each_thread (current_thread->id.pid (), update_debug_registers);
-}
-
-/* Return the current value of a DR register of the current thread's
-   context.  */
-
-static DWORD64
-win32_get_current_dr (int dr)
-{
-  win32_thread_info *th
-    = (win32_thread_info *) thread_target_data (current_thread);
-
-  win32_require_context (th);
-
-#define RET_DR(DR)				\
-  case DR:					\
-    return th->context.Dr ## DR
-
-  switch (dr)
-    {
-      RET_DR (0);
-      RET_DR (1);
-      RET_DR (2);
-      RET_DR (3);
-      RET_DR (6);
-      RET_DR (7);
-    }
-
-#undef RET_DR
-
-  gdb_assert_not_reached ("unhandled dr");
-}
-
-static CORE_ADDR
-x86_dr_low_get_addr (int regnum)
-{
-  gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
-
-  return win32_get_current_dr (regnum - DR_FIRSTADDR);
-}
-
-static unsigned long
-x86_dr_low_get_control (void)
-{
-  return win32_get_current_dr (7);
-}
-
-/* Get the value of the DR6 debug status register from the inferior
-   and record it in STATE.  */
-
-static unsigned long
-x86_dr_low_get_status (void)
-{
-  return win32_get_current_dr (6);
-}
-
-/* Low-level function vector.  */
-struct x86_dr_low_type x86_dr_low =
-  {
-    x86_dr_low_set_control,
-    x86_dr_low_set_addr,
-    x86_dr_low_get_addr,
-    x86_dr_low_get_status,
-    x86_dr_low_get_control,
-    sizeof (void *),
-  };
-
-/* Breakpoint/watchpoint support.  */
-
-static int
-i386_supports_z_point_type (char z_type)
-{
-  switch (z_type)
-    {
-    case Z_PACKET_WRITE_WP:
-    case Z_PACKET_ACCESS_WP:
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-static int
-i386_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		   int size, struct raw_breakpoint *bp)
-{
-  switch (type)
-    {
-    case raw_bkpt_type_write_wp:
-    case raw_bkpt_type_access_wp:
-      {
-	enum target_hw_bp_type hw_type
-	  = raw_bkpt_type_to_target_hw_bp_type (type);
-
-	return x86_dr_insert_watchpoint (&debug_reg_state,
-					 hw_type, addr, size);
-      }
-    default:
-      /* Unsupported.  */
-      return 1;
-    }
-}
-
-static int
-i386_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		   int size, struct raw_breakpoint *bp)
-{
-  switch (type)
-    {
-    case raw_bkpt_type_write_wp:
-    case raw_bkpt_type_access_wp:
-      {
-	enum target_hw_bp_type hw_type
-	  = raw_bkpt_type_to_target_hw_bp_type (type);
-
-	return x86_dr_remove_watchpoint (&debug_reg_state,
-					 hw_type, addr, size);
-      }
-    default:
-      /* Unsupported.  */
-      return 1;
-    }
-}
-
-static int
-x86_stopped_by_watchpoint (void)
-{
-  return x86_dr_stopped_by_watchpoint (&debug_reg_state);
-}
-
-static CORE_ADDR
-x86_stopped_data_address (void)
-{
-  CORE_ADDR addr;
-  if (x86_dr_stopped_data_address (&debug_reg_state, &addr))
-    return addr;
-  return 0;
-}
-
-static void
-i386_initial_stuff (void)
-{
-  x86_low_init_dregs (&debug_reg_state);
-}
-
-static void
-i386_get_thread_context (win32_thread_info *th)
-{
-  /* Requesting the CONTEXT_EXTENDED_REGISTERS register set fails if
-     the system doesn't support extended registers.  */
-  static DWORD extended_registers = CONTEXT_EXTENDED_REGISTERS;
-
- again:
-  th->context.ContextFlags = (CONTEXT_FULL
-			      | CONTEXT_FLOATING_POINT
-			      | CONTEXT_DEBUG_REGISTERS
-			      | extended_registers);
-
-  if (!GetThreadContext (th->h, &th->context))
-    {
-      DWORD e = GetLastError ();
-
-      if (extended_registers && e == ERROR_INVALID_PARAMETER)
-	{
-	  extended_registers = 0;
-	  goto again;
-	}
-
-      error ("GetThreadContext failure %ld\n", (long) e);
-    }
-}
-
-static void
-i386_prepare_to_resume (win32_thread_info *th)
-{
-  if (th->debug_registers_changed)
-    {
-      struct x86_debug_reg_state *dr = &debug_reg_state;
-
-      win32_require_context (th);
-
-      th->context.Dr0 = dr->dr_mirror[0];
-      th->context.Dr1 = dr->dr_mirror[1];
-      th->context.Dr2 = dr->dr_mirror[2];
-      th->context.Dr3 = dr->dr_mirror[3];
-      /* th->context.Dr6 = dr->dr_status_mirror;
-	 FIXME: should we set dr6 also ?? */
-      th->context.Dr7 = dr->dr_control_mirror;
-
-      th->debug_registers_changed = 0;
-    }
-}
-
-static void
-i386_thread_added (win32_thread_info *th)
-{
-  th->debug_registers_changed = 1;
-}
-
-static void
-i386_single_step (win32_thread_info *th)
-{
-  th->context.EFlags |= FLAG_TRACE_BIT;
-}
-
-#ifndef __x86_64__
-
-/* An array of offset mappings into a Win32 Context structure.
-   This is a one-to-one mapping which is indexed by gdb's register
-   numbers.  It retrieves an offset into the context structure where
-   the 4 byte register is located.
-   An offset value of -1 indicates that Win32 does not provide this
-   register in it's CONTEXT structure.  In this case regptr will return
-   a pointer into a dummy register.  */
-#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x))
-static const int mappings[] = {
-  context_offset (Eax),
-  context_offset (Ecx),
-  context_offset (Edx),
-  context_offset (Ebx),
-  context_offset (Esp),
-  context_offset (Ebp),
-  context_offset (Esi),
-  context_offset (Edi),
-  context_offset (Eip),
-  context_offset (EFlags),
-  context_offset (SegCs),
-  context_offset (SegSs),
-  context_offset (SegDs),
-  context_offset (SegEs),
-  context_offset (SegFs),
-  context_offset (SegGs),
-  context_offset (FloatSave.RegisterArea[0 * 10]),
-  context_offset (FloatSave.RegisterArea[1 * 10]),
-  context_offset (FloatSave.RegisterArea[2 * 10]),
-  context_offset (FloatSave.RegisterArea[3 * 10]),
-  context_offset (FloatSave.RegisterArea[4 * 10]),
-  context_offset (FloatSave.RegisterArea[5 * 10]),
-  context_offset (FloatSave.RegisterArea[6 * 10]),
-  context_offset (FloatSave.RegisterArea[7 * 10]),
-  context_offset (FloatSave.ControlWord),
-  context_offset (FloatSave.StatusWord),
-  context_offset (FloatSave.TagWord),
-  context_offset (FloatSave.ErrorSelector),
-  context_offset (FloatSave.ErrorOffset),
-  context_offset (FloatSave.DataSelector),
-  context_offset (FloatSave.DataOffset),
-  context_offset (FloatSave.ErrorSelector),
-  /* XMM0-7 */
-  context_offset (ExtendedRegisters[10 * 16]),
-  context_offset (ExtendedRegisters[11 * 16]),
-  context_offset (ExtendedRegisters[12 * 16]),
-  context_offset (ExtendedRegisters[13 * 16]),
-  context_offset (ExtendedRegisters[14 * 16]),
-  context_offset (ExtendedRegisters[15 * 16]),
-  context_offset (ExtendedRegisters[16 * 16]),
-  context_offset (ExtendedRegisters[17 * 16]),
-  /* MXCSR */
-  context_offset (ExtendedRegisters[24])
-};
-#undef context_offset
-
-#else /* __x86_64__ */
-
-#define context_offset(x) (offsetof (CONTEXT, x))
-static const int mappings[] =
-{
-  context_offset (Rax),
-  context_offset (Rbx),
-  context_offset (Rcx),
-  context_offset (Rdx),
-  context_offset (Rsi),
-  context_offset (Rdi),
-  context_offset (Rbp),
-  context_offset (Rsp),
-  context_offset (R8),
-  context_offset (R9),
-  context_offset (R10),
-  context_offset (R11),
-  context_offset (R12),
-  context_offset (R13),
-  context_offset (R14),
-  context_offset (R15),
-  context_offset (Rip),
-  context_offset (EFlags),
-  context_offset (SegCs),
-  context_offset (SegSs),
-  context_offset (SegDs),
-  context_offset (SegEs),
-  context_offset (SegFs),
-  context_offset (SegGs),
-  context_offset (FloatSave.FloatRegisters[0]),
-  context_offset (FloatSave.FloatRegisters[1]),
-  context_offset (FloatSave.FloatRegisters[2]),
-  context_offset (FloatSave.FloatRegisters[3]),
-  context_offset (FloatSave.FloatRegisters[4]),
-  context_offset (FloatSave.FloatRegisters[5]),
-  context_offset (FloatSave.FloatRegisters[6]),
-  context_offset (FloatSave.FloatRegisters[7]),
-  context_offset (FloatSave.ControlWord),
-  context_offset (FloatSave.StatusWord),
-  context_offset (FloatSave.TagWord),
-  context_offset (FloatSave.ErrorSelector),
-  context_offset (FloatSave.ErrorOffset),
-  context_offset (FloatSave.DataSelector),
-  context_offset (FloatSave.DataOffset),
-  context_offset (FloatSave.ErrorSelector)
-  /* XMM0-7 */ ,
-  context_offset (Xmm0),
-  context_offset (Xmm1),
-  context_offset (Xmm2),
-  context_offset (Xmm3),
-  context_offset (Xmm4),
-  context_offset (Xmm5),
-  context_offset (Xmm6),
-  context_offset (Xmm7),
-  context_offset (Xmm8),
-  context_offset (Xmm9),
-  context_offset (Xmm10),
-  context_offset (Xmm11),
-  context_offset (Xmm12),
-  context_offset (Xmm13),
-  context_offset (Xmm14),
-  context_offset (Xmm15),
-  /* MXCSR */
-  context_offset (FloatSave.MxCsr)
-};
-#undef context_offset
-
-#endif /* __x86_64__ */
-
-/* Fetch register from gdbserver regcache data.  */
-static void
-i386_fetch_inferior_register (struct regcache *regcache,
-			      win32_thread_info *th, int r)
-{
-  char *context_offset = (char *) &th->context + mappings[r];
-
-  long l;
-  if (r == FCS_REGNUM)
-    {
-      l = *((long *) context_offset) & 0xffff;
-      supply_register (regcache, r, (char *) &l);
-    }
-  else if (r == FOP_REGNUM)
-    {
-      l = (*((long *) context_offset) >> 16) & ((1 << 11) - 1);
-      supply_register (regcache, r, (char *) &l);
-    }
-  else
-    supply_register (regcache, r, context_offset);
-}
-
-/* Store a new register value into the thread context of TH.  */
-static void
-i386_store_inferior_register (struct regcache *regcache,
-			      win32_thread_info *th, int r)
-{
-  char *context_offset = (char *) &th->context + mappings[r];
-  collect_register (regcache, r, context_offset);
-}
-
-static const unsigned char i386_win32_breakpoint = 0xcc;
-#define i386_win32_breakpoint_len 1
-
-static void
-i386_arch_setup (void)
-{
-  struct target_desc *tdesc;
-
-#ifdef __x86_64__
-  tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false,
-					   false, false);
-  const char **expedite_regs = amd64_expedite_regs;
-#else
-  tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false);
-  const char **expedite_regs = i386_expedite_regs;
-#endif
-
-  init_target_desc (tdesc, expedite_regs);
-
-  win32_tdesc = tdesc;
-}
-
-struct win32_target_ops the_low_target = {
-  i386_arch_setup,
-  sizeof (mappings) / sizeof (mappings[0]),
-  i386_initial_stuff,
-  i386_get_thread_context,
-  i386_prepare_to_resume,
-  i386_thread_added,
-  i386_fetch_inferior_register,
-  i386_store_inferior_register,
-  i386_single_step,
-  &i386_win32_breakpoint,
-  i386_win32_breakpoint_len,
-  i386_supports_z_point_type,
-  i386_insert_point,
-  i386_remove_point,
-  x86_stopped_by_watchpoint,
-  x86_stopped_data_address
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-low.c ./gdb/gdbserver/win32-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/win32-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1864 +0,0 @@
-/* Low level interface to Windows debugging, for gdbserver.
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
-
-   Contributed by Leo Zayas.  Based on "win32-nat.c" from GDB.
-
-   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 "server.h"
-#include "regcache.h"
-#include "gdb/fileio.h"
-#include "mem-break.h"
-#include "win32-low.h"
-#include "gdbthread.h"
-#include "dll.h"
-#include "hostio.h"
-#include <windows.h>
-#include <winnt.h>
-#include <imagehlp.h>
-#include <tlhelp32.h>
-#include <psapi.h>
-#include <process.h>
-#include "gdbsupport/gdb_tilde_expand.h"
-#include "gdbsupport/common-inferior.h"
-
-#ifndef USE_WIN32API
-#include <sys/cygwin.h>
-#endif
-
-#define OUTMSG(X) do { printf X; fflush (stderr); } while (0)
-
-#define OUTMSG2(X) \
-  do						\
-    {						\
-      if (debug_threads)			\
-	{					\
-	  printf X;				\
-	  fflush (stderr);			\
-	}					\
-    } while (0)
-
-#ifndef _T
-#define _T(x) TEXT (x)
-#endif
-
-#ifndef COUNTOF
-#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0]))
-#endif
-
-#ifdef _WIN32_WCE
-# define GETPROCADDRESS(DLL, PROC) \
-  ((winapi_ ## PROC) GetProcAddress (DLL, TEXT (#PROC)))
-#else
-# define GETPROCADDRESS(DLL, PROC) \
-  ((winapi_ ## PROC) GetProcAddress (DLL, #PROC))
-#endif
-
-int using_threads = 1;
-
-/* Globals.  */
-static int attaching = 0;
-static HANDLE current_process_handle = NULL;
-static DWORD current_process_id = 0;
-static DWORD main_thread_id = 0;
-static enum gdb_signal last_sig = GDB_SIGNAL_0;
-
-/* The current debug event from WaitForDebugEvent.  */
-static DEBUG_EVENT current_event;
-
-/* A status that hasn't been reported to the core yet, and so
-   win32_wait should return it next, instead of fetching the next
-   debug event off the win32 API.  */
-static struct target_waitstatus cached_status;
-
-/* Non zero if an interrupt request is to be satisfied by suspending
-   all threads.  */
-static int soft_interrupt_requested = 0;
-
-/* Non zero if the inferior is stopped in a simulated breakpoint done
-   by suspending all the threads.  */
-static int faked_breakpoint = 0;
-
-const struct target_desc *win32_tdesc;
-
-#define NUM_REGS (the_low_target.num_regs)
-
-typedef BOOL (WINAPI *winapi_DebugActiveProcessStop) (DWORD dwProcessId);
-typedef BOOL (WINAPI *winapi_DebugSetProcessKillOnExit) (BOOL KillOnExit);
-typedef BOOL (WINAPI *winapi_DebugBreakProcess) (HANDLE);
-typedef BOOL (WINAPI *winapi_GenerateConsoleCtrlEvent) (DWORD, DWORD);
-
-static ptid_t win32_wait (ptid_t ptid, struct target_waitstatus *ourstatus,
-			  int options);
-static void win32_resume (struct thread_resume *resume_info, size_t n);
-#ifndef _WIN32_WCE
-static void win32_add_all_dlls (void);
-#endif
-
-/* Get the thread ID from the current selected inferior (the current
-   thread).  */
-static ptid_t
-current_thread_ptid (void)
-{
-  return current_ptid;
-}
-
-/* The current debug event from WaitForDebugEvent.  */
-static ptid_t
-debug_event_ptid (DEBUG_EVENT *event)
-{
-  return ptid_t (event->dwProcessId, event->dwThreadId, 0);
-}
-
-/* Get the thread context of the thread associated with TH.  */
-
-static void
-win32_get_thread_context (win32_thread_info *th)
-{
-  memset (&th->context, 0, sizeof (CONTEXT));
-  (*the_low_target.get_thread_context) (th);
-#ifdef _WIN32_WCE
-  memcpy (&th->base_context, &th->context, sizeof (CONTEXT));
-#endif
-}
-
-/* Set the thread context of the thread associated with TH.  */
-
-static void
-win32_set_thread_context (win32_thread_info *th)
-{
-#ifdef _WIN32_WCE
-  /* Calling SuspendThread on a thread that is running kernel code
-     will report that the suspending was successful, but in fact, that
-     will often not be true.  In those cases, the context returned by
-     GetThreadContext will not be correct by the time the thread
-     stops, hence we can't set that context back into the thread when
-     resuming - it will most likely crash the inferior.
-     Unfortunately, there is no way to know when the thread will
-     really stop.  To work around it, we'll only write the context
-     back to the thread when either the user or GDB explicitly change
-     it between stopping and resuming.  */
-  if (memcmp (&th->context, &th->base_context, sizeof (CONTEXT)) != 0)
-#endif
-    SetThreadContext (th->h, &th->context);
-}
-
-/* Set the thread context of the thread associated with TH.  */
-
-static void
-win32_prepare_to_resume (win32_thread_info *th)
-{
-  if (the_low_target.prepare_to_resume != NULL)
-    (*the_low_target.prepare_to_resume) (th);
-}
-
-/* See win32-low.h.  */
-
-void
-win32_require_context (win32_thread_info *th)
-{
-  if (th->context.ContextFlags == 0)
-    {
-      if (!th->suspended)
-	{
-	  if (SuspendThread (th->h) == (DWORD) -1)
-	    {
-	      DWORD err = GetLastError ();
-	      OUTMSG (("warning: SuspendThread failed in thread_rec, "
-		       "(error %d): %s\n", (int) err, strwinerror (err)));
-	    }
-	  else
-	    th->suspended = 1;
-	}
-
-      win32_get_thread_context (th);
-    }
-}
-
-/* Find a thread record given a thread id.  If GET_CONTEXT is set then
-   also retrieve the context for this thread.  */
-static win32_thread_info *
-thread_rec (ptid_t ptid, int get_context)
-{
-  thread_info *thread = find_thread_ptid (ptid);
-  if (thread == NULL)
-    return NULL;
-
-  win32_thread_info *th = (win32_thread_info *) thread_target_data (thread);
-  if (get_context)
-    win32_require_context (th);
-  return th;
-}
-
-/* Add a thread to the thread list.  */
-static win32_thread_info *
-child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb)
-{
-  win32_thread_info *th;
-  ptid_t ptid = ptid_t (pid, tid, 0);
-
-  if ((th = thread_rec (ptid, FALSE)))
-    return th;
-
-  th = XCNEW (win32_thread_info);
-  th->tid = tid;
-  th->h = h;
-  th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb;
-
-  add_thread (ptid, th);
-
-  if (the_low_target.thread_added != NULL)
-    (*the_low_target.thread_added) (th);
-
-  return th;
-}
-
-/* Delete a thread from the list of threads.  */
-static void
-delete_thread_info (thread_info *thread)
-{
-  win32_thread_info *th = (win32_thread_info *) thread_target_data (thread);
-
-  remove_thread (thread);
-  CloseHandle (th->h);
-  free (th);
-}
-
-/* Delete a thread from the list of threads.  */
-static void
-child_delete_thread (DWORD pid, DWORD tid)
-{
-  /* If the last thread is exiting, just return.  */
-  if (all_threads.size () == 1)
-    return;
-
-  thread_info *thread = find_thread_ptid (ptid_t (pid, tid));
-  if (thread == NULL)
-    return;
-
-  delete_thread_info (thread);
-}
-
-/* These watchpoint related wrapper functions simply pass on the function call
-   if the low target has registered a corresponding function.  */
-
-static int
-win32_supports_z_point_type (char z_type)
-{
-  return (the_low_target.supports_z_point_type != NULL
-	  && the_low_target.supports_z_point_type (z_type));
-}
-
-static int
-win32_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		    int size, struct raw_breakpoint *bp)
-{
-  if (the_low_target.insert_point != NULL)
-    return the_low_target.insert_point (type, addr, size, bp);
-  else
-    /* Unsupported (see target.h).  */
-    return 1;
-}
-
-static int
-win32_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-		    int size, struct raw_breakpoint *bp)
-{
-  if (the_low_target.remove_point != NULL)
-    return the_low_target.remove_point (type, addr, size, bp);
-  else
-    /* Unsupported (see target.h).  */
-    return 1;
-}
-
-static int
-win32_stopped_by_watchpoint (void)
-{
-  if (the_low_target.stopped_by_watchpoint != NULL)
-    return the_low_target.stopped_by_watchpoint ();
-  else
-    return 0;
-}
-
-static CORE_ADDR
-win32_stopped_data_address (void)
-{
-  if (the_low_target.stopped_data_address != NULL)
-    return the_low_target.stopped_data_address ();
-  else
-    return 0;
-}
-
-
-/* Transfer memory from/to the debugged process.  */
-static int
-child_xfer_memory (CORE_ADDR memaddr, char *our, int len,
-		   int write, struct target_ops *target)
-{
-  BOOL success;
-  SIZE_T done = 0;
-  DWORD lasterror = 0;
-  uintptr_t addr = (uintptr_t) memaddr;
-
-  if (write)
-    {
-      success = WriteProcessMemory (current_process_handle, (LPVOID) addr,
-				    (LPCVOID) our, len, &done);
-      if (!success)
-	lasterror = GetLastError ();
-      FlushInstructionCache (current_process_handle, (LPCVOID) addr, len);
-    }
-  else
-    {
-      success = ReadProcessMemory (current_process_handle, (LPCVOID) addr,
-				   (LPVOID) our, len, &done);
-      if (!success)
-	lasterror = GetLastError ();
-    }
-  if (!success && lasterror == ERROR_PARTIAL_COPY && done > 0)
-    return done;
-  else
-    return success ? done : -1;
-}
-
-/* Clear out any old thread list and reinitialize it to a pristine
-   state. */
-static void
-child_init_thread_list (void)
-{
-  for_each_thread (delete_thread_info);
-}
-
-/* Zero during the child initialization phase, and nonzero otherwise.  */
-
-static int child_initialization_done = 0;
-
-static void
-do_initial_child_stuff (HANDLE proch, DWORD pid, int attached)
-{
-  struct process_info *proc;
-
-  last_sig = GDB_SIGNAL_0;
-
-  current_process_handle = proch;
-  current_process_id = pid;
-  main_thread_id = 0;
-
-  soft_interrupt_requested = 0;
-  faked_breakpoint = 0;
-
-  memset (&current_event, 0, sizeof (current_event));
-
-  proc = add_process (pid, attached);
-  proc->tdesc = win32_tdesc;
-  child_init_thread_list ();
-  child_initialization_done = 0;
-
-  if (the_low_target.initial_stuff != NULL)
-    (*the_low_target.initial_stuff) ();
-
-  cached_status.kind = TARGET_WAITKIND_IGNORE;
-
-  /* Flush all currently pending debug events (thread and dll list) up
-     to the initial breakpoint.  */
-  while (1)
-    {
-      struct target_waitstatus status;
-
-      win32_wait (minus_one_ptid, &status, 0);
-
-      /* Note win32_wait doesn't return thread events.  */
-      if (status.kind != TARGET_WAITKIND_LOADED)
-	{
-	  cached_status = status;
-	  break;
-	}
-
-      {
-	struct thread_resume resume;
-
-	resume.thread = minus_one_ptid;
-	resume.kind = resume_continue;
-	resume.sig = 0;
-
-	win32_resume (&resume, 1);
-      }
-    }
-
-#ifndef _WIN32_WCE
-  /* Now that the inferior has been started and all DLLs have been mapped,
-     we can iterate over all DLLs and load them in.
-
-     We avoid doing it any earlier because, on certain versions of Windows,
-     LOAD_DLL_DEBUG_EVENTs are sometimes not complete.  In particular,
-     we have seen on Windows 8.1 that the ntdll.dll load event does not
-     include the DLL name, preventing us from creating an associated SO.
-     A possible explanation is that ntdll.dll might be mapped before
-     the SO info gets created by the Windows system -- ntdll.dll is
-     the first DLL to be reported via LOAD_DLL_DEBUG_EVENT and other DLLs
-     do not seem to suffer from that problem.
-
-     Rather than try to work around this sort of issue, it is much
-     simpler to just ignore DLL load/unload events during the startup
-     phase, and then process them all in one batch now.  */
-  win32_add_all_dlls ();
-#endif
-
-  child_initialization_done = 1;
-}
-
-/* Resume all artificially suspended threads if we are continuing
-   execution.  */
-static void
-continue_one_thread (thread_info *thread, int thread_id)
-{
-  win32_thread_info *th = (win32_thread_info *) thread_target_data (thread);
-
-  if (thread_id == -1 || thread_id == th->tid)
-    {
-      win32_prepare_to_resume (th);
-
-      if (th->suspended)
-	{
-	  if (th->context.ContextFlags)
-	    {
-	      win32_set_thread_context (th);
-	      th->context.ContextFlags = 0;
-	    }
-
-	  if (ResumeThread (th->h) == (DWORD) -1)
-	    {
-	      DWORD err = GetLastError ();
-	      OUTMSG (("warning: ResumeThread failed in continue_one_thread, "
-		       "(error %d): %s\n", (int) err, strwinerror (err)));
-	    }
-	  th->suspended = 0;
-	}
-    }
-}
-
-static BOOL
-child_continue (DWORD continue_status, int thread_id)
-{
-  /* The inferior will only continue after the ContinueDebugEvent
-     call.  */
-  for_each_thread ([&] (thread_info *thread)
-    {
-      continue_one_thread (thread, thread_id);
-    });
-  faked_breakpoint = 0;
-
-  if (!ContinueDebugEvent (current_event.dwProcessId,
-			   current_event.dwThreadId,
-			   continue_status))
-    return FALSE;
-
-  return TRUE;
-}
-
-/* Fetch register(s) from the current thread context.  */
-static void
-child_fetch_inferior_registers (struct regcache *regcache, int r)
-{
-  int regno;
-  win32_thread_info *th = thread_rec (current_thread_ptid (), TRUE);
-  if (r == -1 || r > NUM_REGS)
-    child_fetch_inferior_registers (regcache, NUM_REGS);
-  else
-    for (regno = 0; regno < r; regno++)
-      (*the_low_target.fetch_inferior_register) (regcache, th, regno);
-}
-
-/* Store a new register value into the current thread context.  We don't
-   change the program's context until later, when we resume it.  */
-static void
-child_store_inferior_registers (struct regcache *regcache, int r)
-{
-  int regno;
-  win32_thread_info *th = thread_rec (current_thread_ptid (), TRUE);
-  if (r == -1 || r == 0 || r > NUM_REGS)
-    child_store_inferior_registers (regcache, NUM_REGS);
-  else
-    for (regno = 0; regno < r; regno++)
-      (*the_low_target.store_inferior_register) (regcache, th, regno);
-}
-
-/* Map the Windows error number in ERROR to a locale-dependent error
-   message string and return a pointer to it.  Typically, the values
-   for ERROR come from GetLastError.
-
-   The string pointed to shall not be modified by the application,
-   but may be overwritten by a subsequent call to strwinerror
-
-   The strwinerror function does not change the current setting
-   of GetLastError.  */
-
-char *
-strwinerror (DWORD error)
-{
-  static char buf[1024];
-  TCHAR *msgbuf;
-  DWORD lasterr = GetLastError ();
-  DWORD chars = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
-			       | FORMAT_MESSAGE_ALLOCATE_BUFFER,
-			       NULL,
-			       error,
-			       0, /* Default language */
-			       (LPTSTR) &msgbuf,
-			       0,
-			       NULL);
-  if (chars != 0)
-    {
-      /* If there is an \r\n appended, zap it.  */
-      if (chars >= 2
-	  && msgbuf[chars - 2] == '\r'
-	  && msgbuf[chars - 1] == '\n')
-	{
-	  chars -= 2;
-	  msgbuf[chars] = 0;
-	}
-
-      if (chars > ((COUNTOF (buf)) - 1))
-	{
-	  chars = COUNTOF (buf) - 1;
-	  msgbuf [chars] = 0;
-	}
-
-#ifdef UNICODE
-      wcstombs (buf, msgbuf, chars + 1);
-#else
-      strncpy (buf, msgbuf, chars + 1);
-#endif
-      LocalFree (msgbuf);
-    }
-  else
-    sprintf (buf, "unknown win32 error (%u)", (unsigned) error);
-
-  SetLastError (lasterr);
-  return buf;
-}
-
-static BOOL
-create_process (const char *program, char *args,
-		DWORD flags, PROCESS_INFORMATION *pi)
-{
-  const char *inferior_cwd = get_inferior_cwd ();
-  BOOL ret;
-
-#ifdef _WIN32_WCE
-  wchar_t *p, *wprogram, *wargs, *wcwd = NULL;
-  size_t argslen;
-
-  wprogram = alloca ((strlen (program) + 1) * sizeof (wchar_t));
-  mbstowcs (wprogram, program, strlen (program) + 1);
-
-  for (p = wprogram; *p; ++p)
-    if (L'/' == *p)
-      *p = L'\\';
-
-  argslen = strlen (args);
-  wargs = alloca ((argslen + 1) * sizeof (wchar_t));
-  mbstowcs (wargs, args, argslen + 1);
-
-  if (inferior_cwd != NULL)
-    {
-      std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd);
-      std::replace (expanded_infcwd.begin (), expanded_infcwd.end (),
-		    '/', '\\');
-      wcwd = alloca ((expanded_infcwd.size () + 1) * sizeof (wchar_t));
-      if (mbstowcs (wcwd, expanded_infcwd.c_str (),
-		    expanded_infcwd.size () + 1) == NULL)
-	{
-	  error (_("\
-Could not convert the expanded inferior cwd to wide-char."));
-	}
-    }
-
-  ret = CreateProcessW (wprogram, /* image name */
-			wargs,    /* command line */
-			NULL,     /* security, not supported */
-			NULL,     /* thread, not supported */
-			FALSE,    /* inherit handles, not supported */
-			flags,    /* start flags */
-			NULL,     /* environment, not supported */
-			wcwd,     /* current directory */
-			NULL,     /* start info, not supported */
-			pi);      /* proc info */
-#else
-  STARTUPINFOA si = { sizeof (STARTUPINFOA) };
-
-  ret = CreateProcessA (program,  /* image name */
-			args,     /* command line */
-			NULL,     /* security */
-			NULL,     /* thread */
-			TRUE,     /* inherit handles */
-			flags,    /* start flags */
-			NULL,     /* environment */
-			/* current directory */
-			(inferior_cwd == NULL
-			 ? NULL
-			 : gdb_tilde_expand (inferior_cwd).c_str()),
-			&si,      /* start info */
-			pi);      /* proc info */
-#endif
-
-  return ret;
-}
-
-/* Start a new process.
-   PROGRAM is the program name.
-   PROGRAM_ARGS is the vector containing the inferior's args.
-   Returns the new PID on success, -1 on failure.  Registers the new
-   process with the process list.  */
-static int
-win32_create_inferior (const char *program,
-		       const std::vector<char *> &program_args)
-{
-  client_state &cs = get_client_state ();
-#ifndef USE_WIN32API
-  char real_path[PATH_MAX];
-  char *orig_path, *new_path, *path_ptr;
-#endif
-  BOOL ret;
-  DWORD flags;
-  PROCESS_INFORMATION pi;
-  DWORD err;
-  std::string str_program_args = stringify_argv (program_args);
-  char *args = (char *) str_program_args.c_str ();
-
-  /* win32_wait needs to know we're not attaching.  */
-  attaching = 0;
-
-  if (!program)
-    error ("No executable specified, specify executable to debug.\n");
-
-  flags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS;
-
-#ifndef USE_WIN32API
-  orig_path = NULL;
-  path_ptr = getenv ("PATH");
-  if (path_ptr)
-    {
-      int size = cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, path_ptr, NULL, 0);
-      orig_path = (char *) alloca (strlen (path_ptr) + 1);
-      new_path = (char *) alloca (size);
-      strcpy (orig_path, path_ptr);
-      cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, path_ptr, new_path, size);
-      setenv ("PATH", new_path, 1);
-     }
-  cygwin_conv_path (CCP_POSIX_TO_WIN_A, program, real_path, PATH_MAX);
-  program = real_path;
-#endif
-
-  OUTMSG2 (("Command line is \"%s\"\n", args));
-
-#ifdef CREATE_NEW_PROCESS_GROUP
-  flags |= CREATE_NEW_PROCESS_GROUP;
-#endif
-
-  ret = create_process (program, args, flags, &pi);
-  err = GetLastError ();
-  if (!ret && err == ERROR_FILE_NOT_FOUND)
-    {
-      char *exename = (char *) alloca (strlen (program) + 5);
-      strcat (strcpy (exename, program), ".exe");
-      ret = create_process (exename, args, flags, &pi);
-      err = GetLastError ();
-    }
-
-#ifndef USE_WIN32API
-  if (orig_path)
-    setenv ("PATH", orig_path, 1);
-#endif
-
-  if (!ret)
-    {
-      error ("Error creating process \"%s%s\", (error %d): %s\n",
-	     program, args, (int) err, strwinerror (err));
-    }
-  else
-    {
-      OUTMSG2 (("Process created: %s\n", (char *) args));
-    }
-
-#ifndef _WIN32_WCE
-  /* On Windows CE this handle can't be closed.  The OS reuses
-     it in the debug events, while the 9x/NT versions of Windows
-     probably use a DuplicateHandle'd one.  */
-  CloseHandle (pi.hThread);
-#endif
-
-  do_initial_child_stuff (pi.hProcess, pi.dwProcessId, 0);
-
-  /* Wait till we are at 1st instruction in program, return new pid
-     (assuming success).  */
-  cs.last_ptid = win32_wait (ptid_t (current_process_id), &cs.last_status, 0);
-
-  return current_process_id;
-}
-
-/* Attach to a running process.
-   PID is the process ID to attach to, specified by the user
-   or a higher layer.  */
-static int
-win32_attach (unsigned long pid)
-{
-  HANDLE h;
-  winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL;
-  DWORD err;
-#ifdef _WIN32_WCE
-  HMODULE dll = GetModuleHandle (_T("COREDLL.DLL"));
-#else
-  HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL"));
-#endif
-  DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit);
-
-  h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
-  if (h != NULL)
-    {
-      if (DebugActiveProcess (pid))
-	{
-	  if (DebugSetProcessKillOnExit != NULL)
-	    DebugSetProcessKillOnExit (FALSE);
-
-	  /* win32_wait needs to know we're attaching.  */
-	  attaching = 1;
-	  do_initial_child_stuff (h, pid, 1);
-	  return 0;
-	}
-
-      CloseHandle (h);
-    }
-
-  err = GetLastError ();
-  error ("Attach to process failed (error %d): %s\n",
-	 (int) err, strwinerror (err));
-}
-
-/* Handle OUTPUT_DEBUG_STRING_EVENT from child process.  */
-static void
-handle_output_debug_string (void)
-{
-#define READ_BUFFER_LEN 1024
-  CORE_ADDR addr;
-  char s[READ_BUFFER_LEN + 1] = { 0 };
-  DWORD nbytes = current_event.u.DebugString.nDebugStringLength;
-
-  if (nbytes == 0)
-    return;
-
-  if (nbytes > READ_BUFFER_LEN)
-    nbytes = READ_BUFFER_LEN;
-
-  addr = (CORE_ADDR) (size_t) current_event.u.DebugString.lpDebugStringData;
-
-  if (current_event.u.DebugString.fUnicode)
-    {
-      /* The event tells us how many bytes, not chars, even
-	 in Unicode.  */
-      WCHAR buffer[(READ_BUFFER_LEN + 1) / sizeof (WCHAR)] = { 0 };
-      if (read_inferior_memory (addr, (unsigned char *) buffer, nbytes) != 0)
-	return;
-      wcstombs (s, buffer, (nbytes + 1) / sizeof (WCHAR));
-    }
-  else
-    {
-      if (read_inferior_memory (addr, (unsigned char *) s, nbytes) != 0)
-	return;
-    }
-
-  if (!startswith (s, "cYg"))
-    {
-      if (!server_waiting)
-	{
-	  OUTMSG2(("%s", s));
-	  return;
-	}
-
-      monitor_output (s);
-    }
-#undef READ_BUFFER_LEN
-}
-
-static void
-win32_clear_inferiors (void)
-{
-  if (current_process_handle != NULL)
-    CloseHandle (current_process_handle);
-
-  for_each_thread (delete_thread_info);
-  clear_inferiors ();
-}
-
-/* Implementation of target_ops::kill.  */
-
-static int
-win32_kill (process_info *process)
-{
-  TerminateProcess (current_process_handle, 0);
-  for (;;)
-    {
-      if (!child_continue (DBG_CONTINUE, -1))
-	break;
-      if (!WaitForDebugEvent (&current_event, INFINITE))
-	break;
-      if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT)
-	break;
-      else if (current_event.dwDebugEventCode == OUTPUT_DEBUG_STRING_EVENT)
-	handle_output_debug_string ();
-    }
-
-  win32_clear_inferiors ();
-
-  remove_process (process);
-  return 0;
-}
-
-/* Implementation of target_ops::detach.  */
-
-static int
-win32_detach (process_info *process)
-{
-  winapi_DebugActiveProcessStop DebugActiveProcessStop = NULL;
-  winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL;
-#ifdef _WIN32_WCE
-  HMODULE dll = GetModuleHandle (_T("COREDLL.DLL"));
-#else
-  HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL"));
-#endif
-  DebugActiveProcessStop = GETPROCADDRESS (dll, DebugActiveProcessStop);
-  DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit);
-
-  if (DebugSetProcessKillOnExit == NULL
-      || DebugActiveProcessStop == NULL)
-    return -1;
-
-  {
-    struct thread_resume resume;
-    resume.thread = minus_one_ptid;
-    resume.kind = resume_continue;
-    resume.sig = 0;
-    win32_resume (&resume, 1);
-  }
-
-  if (!DebugActiveProcessStop (current_process_id))
-    return -1;
-
-  DebugSetProcessKillOnExit (FALSE);
-  remove_process (process);
-
-  win32_clear_inferiors ();
-  return 0;
-}
-
-static void
-win32_mourn (struct process_info *process)
-{
-  remove_process (process);
-}
-
-/* Implementation of target_ops::join.  */
-
-static void
-win32_join (int pid)
-{
-  HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
-  if (h != NULL)
-    {
-      WaitForSingleObject (h, INFINITE);
-      CloseHandle (h);
-    }
-}
-
-/* Return 1 iff the thread with thread ID TID is alive.  */
-static int
-win32_thread_alive (ptid_t ptid)
-{
-  /* Our thread list is reliable; don't bother to poll target
-     threads.  */
-  return find_thread_ptid (ptid) != NULL;
-}
-
-/* Resume the inferior process.  RESUME_INFO describes how we want
-   to resume.  */
-static void
-win32_resume (struct thread_resume *resume_info, size_t n)
-{
-  DWORD tid;
-  enum gdb_signal sig;
-  int step;
-  win32_thread_info *th;
-  DWORD continue_status = DBG_CONTINUE;
-  ptid_t ptid;
-
-  /* This handles the very limited set of resume packets that GDB can
-     currently produce.  */
-
-  if (n == 1 && resume_info[0].thread == minus_one_ptid)
-    tid = -1;
-  else if (n > 1)
-    tid = -1;
-  else
-    /* Yes, we're ignoring resume_info[0].thread.  It'd be tricky to make
-       the Windows resume code do the right thing for thread switching.  */
-    tid = current_event.dwThreadId;
-
-  if (resume_info[0].thread != minus_one_ptid)
-    {
-      sig = gdb_signal_from_host (resume_info[0].sig);
-      step = resume_info[0].kind == resume_step;
-    }
-  else
-    {
-      sig = GDB_SIGNAL_0;
-      step = 0;
-    }
-
-  if (sig != GDB_SIGNAL_0)
-    {
-      if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
-	{
-	  OUTMSG (("Cannot continue with signal %s here.\n",
-		   gdb_signal_to_string (sig)));
-	}
-      else if (sig == last_sig)
-	continue_status = DBG_EXCEPTION_NOT_HANDLED;
-      else
-	OUTMSG (("Can only continue with received signal %s.\n",
-		 gdb_signal_to_string (last_sig)));
-    }
-
-  last_sig = GDB_SIGNAL_0;
-
-  /* Get context for the currently selected thread.  */
-  ptid = debug_event_ptid (&current_event);
-  th = thread_rec (ptid, FALSE);
-  if (th)
-    {
-      win32_prepare_to_resume (th);
-
-      if (th->context.ContextFlags)
-	{
-	  /* Move register values from the inferior into the thread
-	     context structure.  */
-	  regcache_invalidate ();
-
-	  if (step)
-	    {
-	      if (the_low_target.single_step != NULL)
-		(*the_low_target.single_step) (th);
-	      else
-		error ("Single stepping is not supported "
-		       "in this configuration.\n");
-	    }
-
-	  win32_set_thread_context (th);
-	  th->context.ContextFlags = 0;
-	}
-    }
-
-  /* Allow continuing with the same signal that interrupted us.
-     Otherwise complain.  */
-
-  child_continue (continue_status, tid);
-}
-
-static void
-win32_add_one_solib (const char *name, CORE_ADDR load_addr)
-{
-  char buf[MAX_PATH + 1];
-  char buf2[MAX_PATH + 1];
-
-#ifdef _WIN32_WCE
-  WIN32_FIND_DATA w32_fd;
-  WCHAR wname[MAX_PATH + 1];
-  mbstowcs (wname, name, MAX_PATH);
-  HANDLE h = FindFirstFile (wname, &w32_fd);
-#else
-  WIN32_FIND_DATAA w32_fd;
-  HANDLE h = FindFirstFileA (name, &w32_fd);
-#endif
-
-  /* The symbols in a dll are offset by 0x1000, which is the
-     offset from 0 of the first byte in an image - because
-     of the file header and the section alignment. */
-  load_addr += 0x1000;
-
-  if (h == INVALID_HANDLE_VALUE)
-    strcpy (buf, name);
-  else
-    {
-      FindClose (h);
-      strcpy (buf, name);
-#ifndef _WIN32_WCE
-      {
-	char cwd[MAX_PATH + 1];
-	char *p;
-	if (GetCurrentDirectoryA (MAX_PATH + 1, cwd))
-	  {
-	    p = strrchr (buf, '\\');
-	    if (p)
-	      p[1] = '\0';
-	    SetCurrentDirectoryA (buf);
-	    GetFullPathNameA (w32_fd.cFileName, MAX_PATH, buf, &p);
-	    SetCurrentDirectoryA (cwd);
-	  }
-      }
-#endif
-    }
-
-#ifndef _WIN32_WCE
-  if (strcasecmp (buf, "ntdll.dll") == 0)
-    {
-      GetSystemDirectoryA (buf, sizeof (buf));
-      strcat (buf, "\\ntdll.dll");
-    }
-#endif
-
-#ifdef __CYGWIN__
-  cygwin_conv_path (CCP_WIN_A_TO_POSIX, buf, buf2, sizeof (buf2));
-#else
-  strcpy (buf2, buf);
-#endif
-
-  loaded_dll (buf2, load_addr);
-}
-
-static char *
-get_image_name (HANDLE h, void *address, int unicode)
-{
-  static char buf[(2 * MAX_PATH) + 1];
-  DWORD size = unicode ? sizeof (WCHAR) : sizeof (char);
-  char *address_ptr;
-  int len = 0;
-  char b[2];
-  SIZE_T done;
-
-  /* Attempt to read the name of the dll that was detected.
-     This is documented to work only when actively debugging
-     a program.  It will not work for attached processes. */
-  if (address == NULL)
-    return NULL;
-
-#ifdef _WIN32_WCE
-  /* Windows CE reports the address of the image name,
-     instead of an address of a pointer into the image name.  */
-  address_ptr = address;
-#else
-  /* See if we could read the address of a string, and that the
-     address isn't null. */
-  if (!ReadProcessMemory (h, address,  &address_ptr,
-			  sizeof (address_ptr), &done)
-      || done != sizeof (address_ptr)
-      || !address_ptr)
-    return NULL;
-#endif
-
-  /* Find the length of the string */
-  while (ReadProcessMemory (h, address_ptr + len++ * size, &b, size, &done)
-	 && (b[0] != 0 || b[size - 1] != 0) && done == size)
-    continue;
-
-  if (!unicode)
-    ReadProcessMemory (h, address_ptr, buf, len, &done);
-  else
-    {
-      WCHAR *unicode_address = XALLOCAVEC (WCHAR, len);
-      ReadProcessMemory (h, address_ptr, unicode_address, len * sizeof (WCHAR),
-			 &done);
-
-      WideCharToMultiByte (CP_ACP, 0, unicode_address, len, buf, len, 0, 0);
-    }
-
-  return buf;
-}
-
-typedef BOOL (WINAPI *winapi_EnumProcessModules) (HANDLE, HMODULE *,
-						  DWORD, LPDWORD);
-typedef BOOL (WINAPI *winapi_GetModuleInformation) (HANDLE, HMODULE,
-						    LPMODULEINFO, DWORD);
-typedef DWORD (WINAPI *winapi_GetModuleFileNameExA) (HANDLE, HMODULE,
-						     LPSTR, DWORD);
-
-static winapi_EnumProcessModules win32_EnumProcessModules;
-static winapi_GetModuleInformation win32_GetModuleInformation;
-static winapi_GetModuleFileNameExA win32_GetModuleFileNameExA;
-
-static BOOL
-load_psapi (void)
-{
-  static int psapi_loaded = 0;
-  static HMODULE dll = NULL;
-
-  if (!psapi_loaded)
-    {
-      psapi_loaded = 1;
-      dll = LoadLibrary (TEXT("psapi.dll"));
-      if (!dll)
-	return FALSE;
-      win32_EnumProcessModules =
-	      GETPROCADDRESS (dll, EnumProcessModules);
-      win32_GetModuleInformation =
-	      GETPROCADDRESS (dll, GetModuleInformation);
-      win32_GetModuleFileNameExA =
-	      GETPROCADDRESS (dll, GetModuleFileNameExA);
-    }
-
-  return (win32_EnumProcessModules != NULL
-	  && win32_GetModuleInformation != NULL
-	  && win32_GetModuleFileNameExA != NULL);
-}
-
-#ifndef _WIN32_WCE
-
-/* Iterate over all DLLs currently mapped by our inferior, and
-   add them to our list of solibs.  */
-
-static void
-win32_add_all_dlls (void)
-{
-  size_t i;
-  HMODULE dh_buf[1];
-  HMODULE *DllHandle = dh_buf;
-  DWORD cbNeeded;
-  BOOL ok;
-
-  if (!load_psapi ())
-    return;
-
-  cbNeeded = 0;
-  ok = (*win32_EnumProcessModules) (current_process_handle,
-				    DllHandle,
-				    sizeof (HMODULE),
-				    &cbNeeded);
-
-  if (!ok || !cbNeeded)
-    return;
-
-  DllHandle = (HMODULE *) alloca (cbNeeded);
-  if (!DllHandle)
-    return;
-
-  ok = (*win32_EnumProcessModules) (current_process_handle,
-				    DllHandle,
-				    cbNeeded,
-				    &cbNeeded);
-  if (!ok)
-    return;
-
-  for (i = 1; i < ((size_t) cbNeeded / sizeof (HMODULE)); i++)
-    {
-      MODULEINFO mi;
-      char dll_name[MAX_PATH];
-
-      if (!(*win32_GetModuleInformation) (current_process_handle,
-					  DllHandle[i],
-					  &mi,
-					  sizeof (mi)))
-	continue;
-      if ((*win32_GetModuleFileNameExA) (current_process_handle,
-					 DllHandle[i],
-					 dll_name,
-					 MAX_PATH) == 0)
-	continue;
-      win32_add_one_solib (dll_name, (CORE_ADDR) (uintptr_t) mi.lpBaseOfDll);
-    }
-}
-#endif
-
-typedef HANDLE (WINAPI *winapi_CreateToolhelp32Snapshot) (DWORD, DWORD);
-typedef BOOL (WINAPI *winapi_Module32First) (HANDLE, LPMODULEENTRY32);
-typedef BOOL (WINAPI *winapi_Module32Next) (HANDLE, LPMODULEENTRY32);
-
-/* Handle a DLL load event.
-
-   This function assumes that this event did not occur during inferior
-   initialization, where their event info may be incomplete (see
-   do_initial_child_stuff and win32_add_all_dlls for more info on
-   how we handle DLL loading during that phase).  */
-
-static void
-handle_load_dll (void)
-{
-  LOAD_DLL_DEBUG_INFO *event = &current_event.u.LoadDll;
-  char *dll_name;
-
-  dll_name = get_image_name (current_process_handle,
-			     event->lpImageName, event->fUnicode);
-  if (!dll_name)
-    return;
-
-  win32_add_one_solib (dll_name, (CORE_ADDR) (uintptr_t) event->lpBaseOfDll);
-}
-
-/* Handle a DLL unload event.
-
-   This function assumes that this event did not occur during inferior
-   initialization, where their event info may be incomplete (see
-   do_initial_child_stuff and win32_add_one_solib for more info
-   on how we handle DLL loading during that phase).  */
-
-static void
-handle_unload_dll (void)
-{
-  CORE_ADDR load_addr =
-	  (CORE_ADDR) (uintptr_t) current_event.u.UnloadDll.lpBaseOfDll;
-
-  /* The symbols in a dll are offset by 0x1000, which is the
-     offset from 0 of the first byte in an image - because
-     of the file header and the section alignment. */
-  load_addr += 0x1000;
-  unloaded_dll (NULL, load_addr);
-}
-
-static void
-handle_exception (struct target_waitstatus *ourstatus)
-{
-  DWORD code = current_event.u.Exception.ExceptionRecord.ExceptionCode;
-
-  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-
-  switch (code)
-    {
-    case EXCEPTION_ACCESS_VIOLATION:
-      OUTMSG2 (("EXCEPTION_ACCESS_VIOLATION"));
-      ourstatus->value.sig = GDB_SIGNAL_SEGV;
-      break;
-    case STATUS_STACK_OVERFLOW:
-      OUTMSG2 (("STATUS_STACK_OVERFLOW"));
-      ourstatus->value.sig = GDB_SIGNAL_SEGV;
-      break;
-    case STATUS_FLOAT_DENORMAL_OPERAND:
-      OUTMSG2 (("STATUS_FLOAT_DENORMAL_OPERAND"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
-      OUTMSG2 (("EXCEPTION_ARRAY_BOUNDS_EXCEEDED"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_FLOAT_INEXACT_RESULT:
-      OUTMSG2 (("STATUS_FLOAT_INEXACT_RESULT"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_FLOAT_INVALID_OPERATION:
-      OUTMSG2 (("STATUS_FLOAT_INVALID_OPERATION"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_FLOAT_OVERFLOW:
-      OUTMSG2 (("STATUS_FLOAT_OVERFLOW"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_FLOAT_STACK_CHECK:
-      OUTMSG2 (("STATUS_FLOAT_STACK_CHECK"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_FLOAT_UNDERFLOW:
-      OUTMSG2 (("STATUS_FLOAT_UNDERFLOW"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_FLOAT_DIVIDE_BY_ZERO:
-      OUTMSG2 (("STATUS_FLOAT_DIVIDE_BY_ZERO"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_INTEGER_DIVIDE_BY_ZERO:
-      OUTMSG2 (("STATUS_INTEGER_DIVIDE_BY_ZERO"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case STATUS_INTEGER_OVERFLOW:
-      OUTMSG2 (("STATUS_INTEGER_OVERFLOW"));
-      ourstatus->value.sig = GDB_SIGNAL_FPE;
-      break;
-    case EXCEPTION_BREAKPOINT:
-      OUTMSG2 (("EXCEPTION_BREAKPOINT"));
-      ourstatus->value.sig = GDB_SIGNAL_TRAP;
-#ifdef _WIN32_WCE
-      /* Remove the initial breakpoint.  */
-      check_breakpoints ((CORE_ADDR) (long) current_event
-			 .u.Exception.ExceptionRecord.ExceptionAddress);
-#endif
-      break;
-    case DBG_CONTROL_C:
-      OUTMSG2 (("DBG_CONTROL_C"));
-      ourstatus->value.sig = GDB_SIGNAL_INT;
-      break;
-    case DBG_CONTROL_BREAK:
-      OUTMSG2 (("DBG_CONTROL_BREAK"));
-      ourstatus->value.sig = GDB_SIGNAL_INT;
-      break;
-    case EXCEPTION_SINGLE_STEP:
-      OUTMSG2 (("EXCEPTION_SINGLE_STEP"));
-      ourstatus->value.sig = GDB_SIGNAL_TRAP;
-      break;
-    case EXCEPTION_ILLEGAL_INSTRUCTION:
-      OUTMSG2 (("EXCEPTION_ILLEGAL_INSTRUCTION"));
-      ourstatus->value.sig = GDB_SIGNAL_ILL;
-      break;
-    case EXCEPTION_PRIV_INSTRUCTION:
-      OUTMSG2 (("EXCEPTION_PRIV_INSTRUCTION"));
-      ourstatus->value.sig = GDB_SIGNAL_ILL;
-      break;
-    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
-      OUTMSG2 (("EXCEPTION_NONCONTINUABLE_EXCEPTION"));
-      ourstatus->value.sig = GDB_SIGNAL_ILL;
-      break;
-    default:
-      if (current_event.u.Exception.dwFirstChance)
-	{
-	  ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-	  return;
-	}
-      OUTMSG2 (("gdbserver: unknown target exception 0x%08x at 0x%s",
-	    (unsigned) current_event.u.Exception.ExceptionRecord.ExceptionCode,
-	    phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord.
-	    ExceptionAddress, sizeof (uintptr_t))));
-      ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
-      break;
-    }
-  OUTMSG2 (("\n"));
-  last_sig = ourstatus->value.sig;
-}
-
-
-static void
-suspend_one_thread (thread_info *thread)
-{
-  win32_thread_info *th = (win32_thread_info *) thread_target_data (thread);
-
-  if (!th->suspended)
-    {
-      if (SuspendThread (th->h) == (DWORD) -1)
-	{
-	  DWORD err = GetLastError ();
-	  OUTMSG (("warning: SuspendThread failed in suspend_one_thread, "
-		   "(error %d): %s\n", (int) err, strwinerror (err)));
-	}
-      else
-	th->suspended = 1;
-    }
-}
-
-static void
-fake_breakpoint_event (void)
-{
-  OUTMSG2(("fake_breakpoint_event\n"));
-
-  faked_breakpoint = 1;
-
-  memset (&current_event, 0, sizeof (current_event));
-  current_event.dwThreadId = main_thread_id;
-  current_event.dwDebugEventCode = EXCEPTION_DEBUG_EVENT;
-  current_event.u.Exception.ExceptionRecord.ExceptionCode
-    = EXCEPTION_BREAKPOINT;
-
-  for_each_thread (suspend_one_thread);
-}
-
-#ifdef _WIN32_WCE
-static int
-auto_delete_breakpoint (CORE_ADDR stop_pc)
-{
-  return 1;
-}
-#endif
-
-/* Get the next event from the child.  */
-
-static int
-get_child_debug_event (struct target_waitstatus *ourstatus)
-{
-  ptid_t ptid;
-
-  last_sig = GDB_SIGNAL_0;
-  ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-
-  /* Check if GDB sent us an interrupt request.  */
-  check_remote_input_interrupt_request ();
-
-  if (soft_interrupt_requested)
-    {
-      soft_interrupt_requested = 0;
-      fake_breakpoint_event ();
-      goto gotevent;
-    }
-
-#ifndef _WIN32_WCE
-  attaching = 0;
-#else
-  if (attaching)
-    {
-      /* WinCE doesn't set an initial breakpoint automatically.  To
-	 stop the inferior, we flush all currently pending debug
-	 events -- the thread list and the dll list are always
-	 reported immediatelly without delay, then, we suspend all
-	 threads and pretend we saw a trap at the current PC of the
-	 main thread.
-
-	 Contrary to desktop Windows, Windows CE *does* report the dll
-	 names on LOAD_DLL_DEBUG_EVENTs resulting from a
-	 DebugActiveProcess call.  This limits the way we can detect
-	 if all the dlls have already been reported.  If we get a real
-	 debug event before leaving attaching, the worst that will
-	 happen is the user will see a spurious breakpoint.  */
-
-      current_event.dwDebugEventCode = 0;
-      if (!WaitForDebugEvent (&current_event, 0))
-	{
-	  OUTMSG2(("no attach events left\n"));
-	  fake_breakpoint_event ();
-	  attaching = 0;
-	}
-      else
-	OUTMSG2(("got attach event\n"));
-    }
-  else
-#endif
-    {
-      /* Keep the wait time low enough for comfortable remote
-	 interruption, but high enough so gdbserver doesn't become a
-	 bottleneck.  */
-      if (!WaitForDebugEvent (&current_event, 250))
-        {
-	  DWORD e  = GetLastError();
-
-	  if (e == ERROR_PIPE_NOT_CONNECTED)
-	    {
-	      /* This will happen if the loader fails to succesfully
-		 load the application, e.g., if the main executable
-		 tries to pull in a non-existing export from a
-		 DLL.  */
-	      ourstatus->kind = TARGET_WAITKIND_EXITED;
-	      ourstatus->value.integer = 1;
-	      return 1;
-	    }
-
-	  return 0;
-        }
-    }
-
- gotevent:
-
-  switch (current_event.dwDebugEventCode)
-    {
-    case CREATE_THREAD_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event CREATE_THREAD_DEBUG_EVENT "
-		"for pid=%u tid=%x)\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-
-      /* Record the existence of this thread.  */
-      child_add_thread (current_event.dwProcessId,
-			current_event.dwThreadId,
-			current_event.u.CreateThread.hThread,
-			current_event.u.CreateThread.lpThreadLocalBase);
-      break;
-
-    case EXIT_THREAD_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event EXIT_THREAD_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      child_delete_thread (current_event.dwProcessId,
-			   current_event.dwThreadId);
-
-      current_thread = get_first_thread ();
-      return 1;
-
-    case CREATE_PROCESS_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event CREATE_PROCESS_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      CloseHandle (current_event.u.CreateProcessInfo.hFile);
-
-      current_process_handle = current_event.u.CreateProcessInfo.hProcess;
-      main_thread_id = current_event.dwThreadId;
-
-      /* Add the main thread.  */
-      child_add_thread (current_event.dwProcessId,
-			main_thread_id,
-			current_event.u.CreateProcessInfo.hThread,
-			current_event.u.CreateProcessInfo.lpThreadLocalBase);
-
-#ifdef _WIN32_WCE
-      if (!attaching)
-	{
-	  /* Windows CE doesn't set the initial breakpoint
-	     automatically like the desktop versions of Windows do.
-	     We add it explicitly here.	 It will be removed as soon as
-	     it is hit.	 */
-	  set_breakpoint_at ((CORE_ADDR) (long) current_event.u
-			     .CreateProcessInfo.lpStartAddress,
-			     auto_delete_breakpoint);
-	}
-#endif
-      break;
-
-    case EXIT_PROCESS_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event EXIT_PROCESS_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      ourstatus->kind = TARGET_WAITKIND_EXITED;
-      ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode;
-      child_continue (DBG_CONTINUE, -1);
-      CloseHandle (current_process_handle);
-      current_process_handle = NULL;
-      break;
-
-    case LOAD_DLL_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      CloseHandle (current_event.u.LoadDll.hFile);
-      if (! child_initialization_done)
-	break;
-      handle_load_dll ();
-
-      ourstatus->kind = TARGET_WAITKIND_LOADED;
-      ourstatus->value.sig = GDB_SIGNAL_TRAP;
-      break;
-
-    case UNLOAD_DLL_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      if (! child_initialization_done)
-	break;
-      handle_unload_dll ();
-      ourstatus->kind = TARGET_WAITKIND_LOADED;
-      ourstatus->value.sig = GDB_SIGNAL_TRAP;
-      break;
-
-    case EXCEPTION_DEBUG_EVENT:
-      OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      handle_exception (ourstatus);
-      break;
-
-    case OUTPUT_DEBUG_STRING_EVENT:
-      /* A message from the kernel (or Cygwin).  */
-      OUTMSG2 (("gdbserver: kernel event OUTPUT_DEBUG_STRING_EVENT "
-		"for pid=%u tid=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId));
-      handle_output_debug_string ();
-      break;
-
-    default:
-      OUTMSG2 (("gdbserver: kernel event unknown "
-		"for pid=%u tid=%x code=%x\n",
-		(unsigned) current_event.dwProcessId,
-		(unsigned) current_event.dwThreadId,
-		(unsigned) current_event.dwDebugEventCode));
-      break;
-    }
-
-  ptid = debug_event_ptid (&current_event);
-  current_thread = find_thread_ptid (ptid);
-  return 1;
-}
-
-/* Wait for the inferior process to change state.
-   STATUS will be filled in with a response code to send to GDB.
-   Returns the signal which caused the process to stop. */
-static ptid_t
-win32_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options)
-{
-  struct regcache *regcache;
-
-  if (cached_status.kind != TARGET_WAITKIND_IGNORE)
-    {
-      /* The core always does a wait after creating the inferior, and
-	 do_initial_child_stuff already ran the inferior to the
-	 initial breakpoint (or an exit, if creating the process
-	 fails).  Report it now.  */
-      *ourstatus = cached_status;
-      cached_status.kind = TARGET_WAITKIND_IGNORE;
-      return debug_event_ptid (&current_event);
-    }
-
-  while (1)
-    {
-      if (!get_child_debug_event (ourstatus))
-	continue;
-
-      switch (ourstatus->kind)
-	{
-	case TARGET_WAITKIND_EXITED:
-	  OUTMSG2 (("Child exited with retcode = %x\n",
-		    ourstatus->value.integer));
-	  win32_clear_inferiors ();
-	  return ptid_t (current_event.dwProcessId);
-	case TARGET_WAITKIND_STOPPED:
-	case TARGET_WAITKIND_LOADED:
-	  OUTMSG2 (("Child Stopped with signal = %d \n",
-		    ourstatus->value.sig));
-
-	  regcache = get_thread_regcache (current_thread, 1);
-	  child_fetch_inferior_registers (regcache, -1);
-	  return debug_event_ptid (&current_event);
-	default:
-	  OUTMSG (("Ignoring unknown internal event, %d\n", ourstatus->kind));
-	  /* fall-through */
-	case TARGET_WAITKIND_SPURIOUS:
-	  /* do nothing, just continue */
-	  child_continue (DBG_CONTINUE, -1);
-	  break;
-	}
-    }
-}
-
-/* Fetch registers from the inferior process.
-   If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO.  */
-static void
-win32_fetch_inferior_registers (struct regcache *regcache, int regno)
-{
-  child_fetch_inferior_registers (regcache, regno);
-}
-
-/* Store registers to the inferior process.
-   If REGNO is -1, store all registers; otherwise, store at least REGNO.  */
-static void
-win32_store_inferior_registers (struct regcache *regcache, int regno)
-{
-  child_store_inferior_registers (regcache, regno);
-}
-
-/* Read memory from the inferior process.  This should generally be
-   called through read_inferior_memory, which handles breakpoint shadowing.
-   Read LEN bytes at MEMADDR into a buffer at MYADDR.  */
-static int
-win32_read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  return child_xfer_memory (memaddr, (char *) myaddr, len, 0, 0) != len;
-}
-
-/* Write memory to the inferior process.  This should generally be
-   called through write_inferior_memory, which handles breakpoint shadowing.
-   Write LEN bytes from the buffer at MYADDR to MEMADDR.
-   Returns 0 on success and errno on failure.  */
-static int
-win32_write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
-			     int len)
-{
-  return child_xfer_memory (memaddr, (char *) myaddr, len, 1, 0) != len;
-}
-
-/* Send an interrupt request to the inferior process. */
-static void
-win32_request_interrupt (void)
-{
-  winapi_DebugBreakProcess DebugBreakProcess;
-  winapi_GenerateConsoleCtrlEvent GenerateConsoleCtrlEvent;
-
-#ifdef _WIN32_WCE
-  HMODULE dll = GetModuleHandle (_T("COREDLL.DLL"));
-#else
-  HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL"));
-#endif
-
-  GenerateConsoleCtrlEvent = GETPROCADDRESS (dll, GenerateConsoleCtrlEvent);
-
-  if (GenerateConsoleCtrlEvent != NULL
-      && GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, current_process_id))
-    return;
-
-  /* GenerateConsoleCtrlEvent can fail if process id being debugged is
-     not a process group id.
-     Fallback to XP/Vista 'DebugBreakProcess', which generates a
-     breakpoint exception in the interior process.  */
-
-  DebugBreakProcess = GETPROCADDRESS (dll, DebugBreakProcess);
-
-  if (DebugBreakProcess != NULL
-      && DebugBreakProcess (current_process_handle))
-    return;
-
-  /* Last resort, suspend all threads manually.  */
-  soft_interrupt_requested = 1;
-}
-
-#ifdef _WIN32_WCE
-int
-win32_error_to_fileio_error (DWORD err)
-{
-  switch (err)
-    {
-    case ERROR_BAD_PATHNAME:
-    case ERROR_FILE_NOT_FOUND:
-    case ERROR_INVALID_NAME:
-    case ERROR_PATH_NOT_FOUND:
-      return FILEIO_ENOENT;
-    case ERROR_CRC:
-    case ERROR_IO_DEVICE:
-    case ERROR_OPEN_FAILED:
-      return FILEIO_EIO;
-    case ERROR_INVALID_HANDLE:
-      return FILEIO_EBADF;
-    case ERROR_ACCESS_DENIED:
-    case ERROR_SHARING_VIOLATION:
-      return FILEIO_EACCES;
-    case ERROR_NOACCESS:
-      return FILEIO_EFAULT;
-    case ERROR_BUSY:
-      return FILEIO_EBUSY;
-    case ERROR_ALREADY_EXISTS:
-    case ERROR_FILE_EXISTS:
-      return FILEIO_EEXIST;
-    case ERROR_BAD_DEVICE:
-      return FILEIO_ENODEV;
-    case ERROR_DIRECTORY:
-      return FILEIO_ENOTDIR;
-    case ERROR_FILENAME_EXCED_RANGE:
-    case ERROR_INVALID_DATA:
-    case ERROR_INVALID_PARAMETER:
-    case ERROR_NEGATIVE_SEEK:
-      return FILEIO_EINVAL;
-    case ERROR_TOO_MANY_OPEN_FILES:
-      return FILEIO_EMFILE;
-    case ERROR_HANDLE_DISK_FULL:
-    case ERROR_DISK_FULL:
-      return FILEIO_ENOSPC;
-    case ERROR_WRITE_PROTECT:
-      return FILEIO_EROFS;
-    case ERROR_NOT_SUPPORTED:
-      return FILEIO_ENOSYS;
-    }
-
-  return FILEIO_EUNKNOWN;
-}
-
-static void
-wince_hostio_last_error (char *buf)
-{
-  DWORD winerr = GetLastError ();
-  int fileio_err = win32_error_to_fileio_error (winerr);
-  sprintf (buf, "F-1,%x", fileio_err);
-}
-#endif
-
-/* Write Windows OS Thread Information Block address.  */
-
-static int
-win32_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
-{
-  win32_thread_info *th;
-  th = thread_rec (ptid, 0);
-  if (th == NULL)
-    return 0;
-  if (addr != NULL)
-    *addr = th->thread_local_base;
-  return 1;
-}
-
-/* Implementation of the target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-win32_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = the_low_target.breakpoint_len;
-  return the_low_target.breakpoint;
-}
-
-static struct target_ops win32_target_ops = {
-  win32_create_inferior,
-  NULL,  /* post_create_inferior */
-  win32_attach,
-  win32_kill,
-  win32_detach,
-  win32_mourn,
-  win32_join,
-  win32_thread_alive,
-  win32_resume,
-  win32_wait,
-  win32_fetch_inferior_registers,
-  win32_store_inferior_registers,
-  NULL, /* prepare_to_access_memory */
-  NULL, /* done_accessing_memory */
-  win32_read_inferior_memory,
-  win32_write_inferior_memory,
-  NULL, /* lookup_symbols */
-  win32_request_interrupt,
-  NULL, /* read_auxv */
-  win32_supports_z_point_type,
-  win32_insert_point,
-  win32_remove_point,
-  NULL, /* stopped_by_sw_breakpoint */
-  NULL, /* supports_stopped_by_sw_breakpoint */
-  NULL, /* stopped_by_hw_breakpoint */
-  NULL, /* supports_stopped_by_hw_breakpoint */
-  target_can_do_hardware_single_step,
-  win32_stopped_by_watchpoint,
-  win32_stopped_data_address,
-  NULL, /* read_offsets */
-  NULL, /* get_tls_address */
-#ifdef _WIN32_WCE
-  wince_hostio_last_error,
-#else
-  hostio_last_error_from_errno,
-#endif
-  NULL, /* qxfer_osdata */
-  NULL, /* qxfer_siginfo */
-  NULL, /* supports_non_stop */
-  NULL, /* async */
-  NULL, /* start_non_stop */
-  NULL, /* supports_multi_process */
-  NULL, /* supports_fork_events */
-  NULL, /* supports_vfork_events */
-  NULL, /* supports_exec_events */
-  NULL, /* handle_new_gdb_connection */
-  NULL, /* handle_monitor_command */
-  NULL, /* core_of_thread */
-  NULL, /* read_loadmap */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* read_pc */
-  NULL, /* write_pc */
-  NULL, /* thread_stopped */
-  win32_get_tib_address,
-  NULL, /* pause_all */
-  NULL, /* unpause_all */
-  NULL, /* stabilize_threads */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* supports_disable_randomization */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* qxfer_libraries_svr4 */
-  NULL, /* support_agent */
-  NULL, /* enable_btrace */
-  NULL, /* disable_btrace */
-  NULL, /* read_btrace */
-  NULL, /* read_btrace_conf */
-  NULL, /* supports_range_stepping */
-  NULL, /* pid_to_exec_file */
-  NULL, /* multifs_open */
-  NULL, /* multifs_unlink */
-  NULL, /* multifs_readlink */
-  NULL, /* breakpoint_kind_from_pc */
-  win32_sw_breakpoint_from_kind,
-};
-
-/* Initialize the Win32 backend.  */
-void
-initialize_low (void)
-{
-  set_target_ops (&win32_target_ops);
-  the_low_target.arch_setup ();
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-low.h ./gdb/gdbserver/win32-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/win32-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/win32-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,122 +0,0 @@
-/* Internal interfaces for the Win32 specific target code for gdbserver.
-   Copyright (C) 2007-2020 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 GDBSERVER_WIN32_LOW_H
-#define GDBSERVER_WIN32_LOW_H
-
-#include <windows.h>
-
-struct target_desc;
-
-/* The inferior's target description.  This is a global because the
-   Windows ports support neither bi-arch nor multi-process.  */
-extern const struct target_desc *win32_tdesc;
-
-/* Thread information structure used to track extra information about
-   each thread.  */
-typedef struct win32_thread_info
-{
-  /* The Win32 thread identifier.  */
-  DWORD tid;
-
-  /* The handle to the thread.  */
-  HANDLE h;
-
-  /* Thread Information Block address.  */
-  CORE_ADDR thread_local_base;
-
-  /* Non zero if SuspendThread was called on this thread.  */
-  int suspended;
-
-#ifdef _WIN32_WCE
-  /* The context as retrieved right after suspending the thread. */
-  CONTEXT base_context;
-#endif
-
-  /* The context of the thread, including any manipulations.  */
-  CONTEXT context;
-
-  /* Whether debug registers changed since we last set CONTEXT back to
-     the thread.  */
-  int debug_registers_changed;
-} win32_thread_info;
-
-struct win32_target_ops
-{
-  /* Architecture-specific setup.  */
-  void (*arch_setup) (void);
-
-  /* The number of target registers.  */
-  int num_regs;
-
-  /* Perform initializations on startup.  */
-  void (*initial_stuff) (void);
-
-  /* Fetch the context from the inferior.  */
-  void (*get_thread_context) (win32_thread_info *th);
-
-  /* Called just before resuming the thread.  */
-  void (*prepare_to_resume) (win32_thread_info *th);
-
-  /* Called when a thread was added.  */
-  void (*thread_added) (win32_thread_info *th);
-
-  /* Fetch register from gdbserver regcache data.  */
-  void (*fetch_inferior_register) (struct regcache *regcache,
-				   win32_thread_info *th, int r);
-
-  /* Store a new register value into the thread context of TH.  */
-  void (*store_inferior_register) (struct regcache *regcache,
-				   win32_thread_info *th, int r);
-
-  void (*single_step) (win32_thread_info *th);
-
-  const unsigned char *breakpoint;
-  int breakpoint_len;
-
-  /* Breakpoint/Watchpoint related functions.  See target.h for comments.  */
-  int (*supports_z_point_type) (char z_type);
-  int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr,
-		       int size, struct raw_breakpoint *bp);
-  int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr,
-		       int size, struct raw_breakpoint *bp);
-  int (*stopped_by_watchpoint) (void);
-  CORE_ADDR (*stopped_data_address) (void);
-};
-
-extern struct win32_target_ops the_low_target;
-
-/* Retrieve the context for this thread, if not already retrieved.  */
-extern void win32_require_context (win32_thread_info *th);
-
-/* Map the Windows error number in ERROR to a locale-dependent error
-   message string and return a pointer to it.  Typically, the values
-   for ERROR come from GetLastError.
-
-   The string pointed to shall not be modified by the application,
-   but may be overwritten by a subsequent call to strwinerror
-
-   The strwinerror function does not change the current setting
-   of GetLastError.  */
-extern char * strwinerror (DWORD error);
-
-/* in wincecompat.c */
-
-extern void to_back_slashes (char *);
-
-#endif /* GDBSERVER_WIN32_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/wincecompat.c ./gdb/gdbserver/wincecompat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/wincecompat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/wincecompat.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/* Compatibility routines for Windows CE.
-   Copyright (C) 2007-2020 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 "server.h"
-
-#include <windows.h>
-
-void
-perror (const char *s)
-{
-  if (s && *s)
-    fprintf (stderr, "%s: %s\n", s, strwinerror (GetLastError ()));
-  else
-    fprintf (stderr, "%s\n", strwinerror (GetLastError ()));
-}
-
-void
-to_back_slashes (char *path)
-{
-  for (; *path; ++path)
-    if ('/' == *path)
-      *path = '\\';
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/wincecompat.h ./gdb/gdbserver/wincecompat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/wincecompat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/wincecompat.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-/* Compatibility routines for Windows CE.
-   Copyright (C) 2007-2020 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 GDBSERVER_WINCECOMPAT_H
-#define GDBSERVER_WINCECOMPAT_H
-
-#include <windows.h>
-
-#define errno (GetLastError ())
-
-/* in win32-low.c */
-extern char * strwinerror (DWORD error);
-#define strerror strwinerror
-
-#endif /* GDBSERVER_WINCECOMPAT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/x86-low.c ./gdb/gdbserver/x86-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/x86-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/x86-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/* Low level support for x86 (i386 and x86-64).
-
-   Copyright (C) 2009-2020 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 "server.h"
-#include "x86-low.h"
-
-/* Clear the reference counts and forget everything we knew about the
-   debug registers.  */
-
-void
-x86_low_init_dregs (struct x86_debug_reg_state *state)
-{
-  int i;
-
-  ALL_DEBUG_ADDRESS_REGISTERS (i)
-    {
-      state->dr_mirror[i] = 0;
-      state->dr_ref_count[i] = 0;
-    }
-  state->dr_control_mirror = 0;
-  state->dr_status_mirror  = 0;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/x86-low.h ./gdb/gdbserver/x86-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/x86-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/x86-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-/* Low level support for x86 (i386 and x86-64).
-
-   Copyright (C) 2009-2020 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 GDBSERVER_X86_LOW_H
-#define GDBSERVER_X86_LOW_H
-
-#include "nat/x86-dregs.h"
-
-/* Initialize STATE.  */
-extern void x86_low_init_dregs (struct x86_debug_reg_state *state);
-
-#endif /* GDBSERVER_X86_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/x86-tdesc.h ./gdb/gdbserver/x86-tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/x86-tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/x86-tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-/* Copyright (C) 2018-2020 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 GDBSERVER_X86_TDESC_H
-#define GDBSERVER_X86_TDESC_H
-
-/* The "expedite" registers for x86 targets.  Since whether the
-   variable is used depends on host/configuration, we mark it
-   ATTRIBUTE_UNUSED to keep it simple here.  */
-static const char *i386_expedite_regs[] ATTRIBUTE_UNUSED
-    = {"ebp", "esp", "eip", NULL};
-
-#ifdef __x86_64__
-/* The "expedite" registers for x86_64 targets.  */
-static const char *amd64_expedite_regs[] = {"rbp", "rsp", "rip", NULL};
-#endif
-
-#endif /* GDBSERVER_X86_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/xtensa-xtregs.c ./gdb/gdbserver/xtensa-xtregs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbserver/xtensa-xtregs.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbserver/xtensa-xtregs.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-/* Table mapping between kernel xtregset and GDB register cache.
-   Copyright (C) 2007-2020 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/>.  */
-
-
-typedef struct {
-  int   gdb_regnum;
-  int   gdb_offset;
-  int   ptrace_cp_offset;
-  int   ptrace_offset;
-  int   size;
-  int   coproc;
-  int   dbnum;
-  char* name
-;} xtensa_regtable_t;
-
-#define XTENSA_ELF_XTREG_SIZE	4
-
-const xtensa_regtable_t  xtensa_regmap_table[] = {
-  /* gnum,gofs,cpofs,ofs,siz,cp, dbnum,  name */
-  {   44, 176,   0,   0,  4, -1, 0x020c, "scompare1" },
-  { 0 }
-};
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-stabs.h ./gdb/gdb-stabs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb-stabs.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb-stabs.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Definitions for symbol-reading containing "stabs", for GDB.
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
    Contributed by Cygnus Support.  Written by John Gilmore.
 
    This file is part of GDB.
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/agent.c ./gdb/gdbsupport/agent.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/agent.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/agent.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,280 +0,0 @@
-/* Shared utility routines for GDB to interact with agent.
-
-   Copyright (C) 2009-2020 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 "common-defs.h"
-#include "target/target.h"
-#include "gdbsupport/symbol.h"
-#include <unistd.h>
-#include "filestuff.h"
-
-#define IPA_SYM_STRUCT_NAME ipa_sym_addresses_common
-#include "agent.h"
-
-bool debug_agent = false;
-
-/* A stdarg wrapper for debug_vprintf.  */
-
-static void ATTRIBUTE_PRINTF (1, 2)
-debug_agent_printf (const char *fmt, ...)
-{
-  va_list ap;
-
-  if (!debug_agent)
-    return;
-  va_start (ap, fmt);
-  debug_vprintf (fmt, ap);
-  va_end (ap);
-}
-
-#define DEBUG_AGENT debug_agent_printf
-
-/* Global flag to determine using agent or not.  */
-bool use_agent = false;
-
-/* Addresses of in-process agent's symbols both GDB and GDBserver cares
-   about.  */
-
-struct ipa_sym_addresses_common
-{
-  CORE_ADDR addr_helper_thread_id;
-  CORE_ADDR addr_cmd_buf;
-  CORE_ADDR addr_capability;
-};
-
-/* Cache of the helper thread id.  FIXME: this global should be made
-   per-process.  */
-static uint32_t helper_thread_id = 0;
-
-static struct
-{
-  const char *name;
-  int offset;
-} symbol_list[] = {
-  IPA_SYM(helper_thread_id),
-  IPA_SYM(cmd_buf),
-  IPA_SYM(capability),
-};
-
-static struct ipa_sym_addresses_common ipa_sym_addrs;
-
-static bool all_agent_symbols_looked_up = false;
-
-bool
-agent_loaded_p (void)
-{
-  return all_agent_symbols_looked_up;
-}
-
-/* Look up all symbols needed by agent.  Return 0 if all the symbols are
-   found, return non-zero otherwise.  */
-
-int
-agent_look_up_symbols (void *arg)
-{
-  all_agent_symbols_looked_up = false;
-
-  for (int i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++)
-    {
-      CORE_ADDR *addrp =
-	(CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset);
-      struct objfile *objfile = (struct objfile *) arg;
-
-      if (find_minimal_symbol_address (symbol_list[i].name, addrp,
-				       objfile) != 0)
-	{
-	  DEBUG_AGENT ("symbol `%s' not found\n", symbol_list[i].name);
-	  return -1;
-	}
-    }
-
-  all_agent_symbols_looked_up = true;
-  return 0;
-}
-
-static unsigned int
-agent_get_helper_thread_id (void)
-{
-  if  (helper_thread_id == 0)
-    {
-      if (target_read_uint32 (ipa_sym_addrs.addr_helper_thread_id,
-			      &helper_thread_id))
-	warning (_("Error reading helper thread's id in lib"));
-    }
-
-  return helper_thread_id;
-}
-
-#ifdef HAVE_SYS_UN_H
-#include <sys/socket.h>
-#include <sys/un.h>
-#define SOCK_DIR P_tmpdir
-
-#ifndef UNIX_PATH_MAX
-#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
-#endif
-
-#endif
-
-/* Connects to synchronization socket.  PID is the pid of inferior, which is
-   used to set up the connection socket.  */
-
-static int
-gdb_connect_sync_socket (int pid)
-{
-#ifdef HAVE_SYS_UN_H
-  struct sockaddr_un addr;
-  int res, fd;
-  char path[UNIX_PATH_MAX];
-
-  res = xsnprintf (path, UNIX_PATH_MAX, "%s/gdb_ust%d", P_tmpdir, pid);
-  if (res >= UNIX_PATH_MAX)
-    return -1;
-
-  res = fd = gdb_socket_cloexec (PF_UNIX, SOCK_STREAM, 0);
-  if (res == -1)
-    {
-      warning (_("error opening sync socket: %s"), safe_strerror (errno));
-      return -1;
-    }
-
-  addr.sun_family = AF_UNIX;
-
-  res = xsnprintf (addr.sun_path, UNIX_PATH_MAX, "%s", path);
-  if (res >= UNIX_PATH_MAX)
-    {
-      warning (_("string overflow allocating socket name"));
-      close (fd);
-      return -1;
-    }
-
-  res = connect (fd, (struct sockaddr *) &addr, sizeof (addr));
-  if (res == -1)
-    {
-      warning (_("error connecting sync socket (%s): %s. "
-		 "Make sure the directory exists and that it is writable."),
-		 path, safe_strerror (errno));
-      close (fd);
-      return -1;
-    }
-
-  return fd;
-#else
-  return -1;
-#endif
-}
-
-/* Execute an agent command in the inferior.  PID is the value of pid of the
-   inferior.  CMD is the buffer for command.  GDB or GDBserver will store the
-   command into it and fetch the return result from CMD.  The interaction
-   between GDB/GDBserver and the agent is synchronized by a synchronization
-   socket.  Return zero if success, otherwise return non-zero.  */
-
-int
-agent_run_command (int pid, const char *cmd, int len)
-{
-  int fd;
-  int tid = agent_get_helper_thread_id ();
-  ptid_t ptid = ptid_t (pid, tid, 0);
-
-  int ret = target_write_memory (ipa_sym_addrs.addr_cmd_buf,
-				 (gdb_byte *) cmd, len);
-
-  if (ret != 0)
-    {
-      warning (_("unable to write"));
-      return -1;
-    }
-
-  DEBUG_AGENT ("agent: resumed helper thread\n");
-
-  /* Resume helper thread.  */
-  target_continue_no_signal (ptid);
-
-  fd = gdb_connect_sync_socket (pid);
-  if (fd >= 0)
-    {
-      char buf[1] = "";
-
-      DEBUG_AGENT ("agent: signalling helper thread\n");
-
-      do
-	{
-	  ret = write (fd, buf, 1);
-	} while (ret == -1 && errno == EINTR);
-
-	DEBUG_AGENT ("agent: waiting for helper thread's response\n");
-
-      do
-	{
-	  ret = read (fd, buf, 1);
-	} while (ret == -1 && errno == EINTR);
-
-      close (fd);
-
-      DEBUG_AGENT ("agent: helper thread's response received\n");
-    }
-  else
-    return -1;
-
-  /* Need to read response with the inferior stopped.  */
-  if (ptid != null_ptid)
-    {
-      /* Stop thread PTID.  */
-      DEBUG_AGENT ("agent: stop helper thread\n");
-      target_stop_and_wait (ptid);
-    }
-
-  if (fd >= 0)
-    {
-      if (target_read_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd,
-			      IPA_CMD_BUF_SIZE))
-	{
-	  warning (_("Error reading command response"));
-	  return -1;
-	}
-    }
-
-  return 0;
-}
-
-/* Each bit of it stands for a capability of agent.  */
-static uint32_t agent_capability = 0;
-
-/* Return true if agent has capability AGENT_CAP, otherwise return false.  */
-
-bool
-agent_capability_check (enum agent_capa agent_capa)
-{
-  if (agent_capability == 0)
-    {
-      if (target_read_uint32 (ipa_sym_addrs.addr_capability,
-			      &agent_capability))
-	warning (_("Error reading capability of agent"));
-    }
-  return (agent_capability & agent_capa) != 0;
-}
-
-/* Invalidate the cache of agent capability, so we'll read it from inferior
-   again.  Call it when launches a new program or reconnect to remote stub.  */
-
-void
-agent_capability_invalidate (void)
-{
-  agent_capability = 0;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/agent.h ./gdb/gdbsupport/agent.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/agent.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/agent.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,68 +0,0 @@
-/* Shared utility routines for GDB to interact with agent.
-
-   Copyright (C) 2009-2020 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 COMMON_AGENT_H
-#define COMMON_AGENT_H
-
-#include "gdbsupport/preprocessor.h"
-
-int agent_run_command (int pid, const char *cmd, int len);
-
-int agent_look_up_symbols (void *);
-
-#define IPA_SYM_EXPORTED_NAME(SYM) gdb_agent_ ## SYM
-
-/* Define an entry in an IPA symbol list array.  If IPA_SYM is used, the macro
-   IPA_SYM_STRUCT_NAME must be defined to the structure name holding the IPA
-   symbol addresses in that particular file, before including
-   gdbsupport/agent.h.  */
-#define IPA_SYM(SYM)                                   \
-  {                                                    \
-    STRINGIFY (IPA_SYM_EXPORTED_NAME (SYM)),           \
-    offsetof (IPA_SYM_STRUCT_NAME, addr_ ## SYM)       \
-  }
-
-/* The size in bytes of the buffer used to talk to the IPA helper
-   thread.  */
-#define IPA_CMD_BUF_SIZE 1024
-
-bool agent_loaded_p (void);
-
-extern bool debug_agent;
-
-extern bool use_agent;
-
-/* Capability of agent.  Different agents may have different capabilities,
-   such as installing fast tracepoint or evaluating breakpoint conditions.
-   Capabilities are represented by bit-maps, and each capability occupies one
-   bit.  */
-
-enum agent_capa
-{
-  /* Capability to install fast tracepoint.  */
-  AGENT_CAPA_FAST_TRACE = 0x1,
-  /* Capability to install static tracepoint.  */
-  AGENT_CAPA_STATIC_TRACE = (0x1 << 1),
-};
-
-bool agent_capability_check (enum agent_capa);
-
-void agent_capability_invalidate (void);
-
-#endif /* COMMON_AGENT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/alt-stack.h ./gdb/gdbsupport/alt-stack.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/alt-stack.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/alt-stack.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-/* Temporarily install an alternate signal stack
-
-   Copyright (C) 2019-2020 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 GDBSUPPORT_ALT_STACK_H
-#define GDBSUPPORT_ALT_STACK_H
-
-#include <signal.h>
-
-namespace gdb
-{
-
-/* Try to set up an alternate signal stack for SIGSEGV handlers.
-   This allows us to handle SIGSEGV signals generated when the
-   normal process stack is exhausted.  If this stack is not set
-   up (sigaltstack is unavailable or fails) and a SIGSEGV is
-   generated when the normal stack is exhausted then the program
-   will behave as though no SIGSEGV handler was installed.  */
-class alternate_signal_stack
-{
-public:
-  alternate_signal_stack ()
-  {
-#ifdef HAVE_SIGALTSTACK
-    m_stack.reset ((char *) xmalloc (SIGSTKSZ));
-
-    stack_t stack;
-    stack.ss_sp = m_stack.get ();
-    stack.ss_size = SIGSTKSZ;
-    stack.ss_flags = 0;
-
-    sigaltstack (&stack, &m_old_stack);
-#endif
-  }
-
-  ~alternate_signal_stack ()
-  {
-#ifdef HAVE_SIGALTSTACK
-    sigaltstack (&m_old_stack, nullptr);
-#endif
-  }
-
-  DISABLE_COPY_AND_ASSIGN (alternate_signal_stack);
-
-private:
-
-#ifdef HAVE_SIGALTSTACK
-  gdb::unique_xmalloc_ptr<char> m_stack;
-  stack_t m_old_stack;
-#endif
-};
-
-}
-
-#endif /* GDBSUPPORT_ALT_STACK_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/array-view.h ./gdb/gdbsupport/array-view.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/array-view.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/array-view.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,259 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_ARRAY_VIEW_H
-#define COMMON_ARRAY_VIEW_H
-
-#include "traits.h"
-#include <type_traits>
-
-/* An array_view is an abstraction that provides a non-owning view
-   over a sequence of contiguous objects.
-
-   A way to put it is that array_view is to std::vector (and
-   std::array and built-in arrays with rank==1) like std::string_view
-   is to std::string.
-
-   The main intent of array_view is to use it as function input
-   parameter type, making it possible to pass in any sequence of
-   contiguous objects, irrespective of whether the objects live on the
-   stack or heap and what actual container owns them.  Implicit
-   construction from the element type is supported too, making it easy
-   to call functions that expect an array of elements when you only
-   have one element (usually on the stack).  For example:
-
-    struct A { .... };
-    void function (gdb::array_view<A> as);
-
-    std::vector<A> std_vec = ...;
-    std::array<A, N> std_array = ...;
-    A array[] = {...};
-    A elem;
-
-    function (std_vec);
-    function (std_array);
-    function (array);
-    function (elem);
-
-   Views can be either mutable or const.  A const view is simply
-   created by specifying a const T as array_view template parameter,
-   in which case operator[] of non-const array_view objects ends up
-   returning const references.  Making the array_view itself const is
-   analogous to making a pointer itself be const.  I.e., disables
-   re-seating the view/pointer.
-
-   Since array_view objects are small (pointer plus size), and
-   designed to be trivially copyable, they should generally be passed
-   around by value.
-
-   You can find unit tests covering the whole API in
-   unittests/array-view-selftests.c.  */
-
-namespace gdb {
-
-template <typename T>
-class array_view
-{
-  /* True iff decayed T is the same as decayed U.  E.g., we want to
-     say that 'T&' is the same as 'const T'.  */
-  template <typename U>
-  using IsDecayedT = typename std::is_same<typename std::decay<T>::type,
-					   typename std::decay<U>::type>;
-
-  /* True iff decayed T is the same as decayed U, and 'U *' is
-     implicitly convertible to 'T *'.  This is a requirement for
-     several methods.  */
-  template <typename U>
-  using DecayedConvertible = gdb::And<IsDecayedT<U>,
-				      std::is_convertible<U *, T *>>;
-
-public:
-  using value_type = T;
-  using reference = T &;
-  using const_reference = const T &;
-  using size_type = size_t;
-
-  /* Default construction creates an empty view.  */
-  constexpr array_view () noexcept
-    : m_array (nullptr), m_size (0)
-  {}
-
-  /* Create an array view over a single object of the type of an
-     array_view element.  The created view as size==1.  This is
-     templated on U to allow constructing a array_view<const T> over a
-     (non-const) T.  The "convertible" requirement makes sure that you
-     can't create an array_view<T> over a const T.  */
-  template<typename U,
-	   typename = Requires<DecayedConvertible<U>>>
-  constexpr array_view (U &elem) noexcept
-    : m_array (&elem), m_size (1)
-  {}
-
-  /* Same as above, for rvalue references.  */
-  template<typename U,
-	   typename = Requires<DecayedConvertible<U>>>
-  constexpr array_view (U &&elem) noexcept
-    : m_array (&elem), m_size (1)
-  {}
-
-  /* Create an array view from a pointer to an array and an element
-     count.  */
-  template<typename U,
-	   typename = Requires<DecayedConvertible<U>>>
-  constexpr array_view (U *array, size_t size) noexcept
-    : m_array (array), m_size (size)
-  {}
-
-  /* Create an array view from a range.  This is templated on both U
-     an V to allow passing in a mix of 'const T *' and 'T *'.  */
-  template<typename U, typename V,
-	   typename = Requires<DecayedConvertible<U>>,
-	   typename = Requires<DecayedConvertible<V>>>
-  constexpr array_view (U *begin, V *end) noexcept
-    : m_array (begin), m_size (end - begin)
-  {}
-
-  /* Create an array view from an array.  */
-  template<typename U, size_t Size,
-	   typename = Requires<DecayedConvertible<U>>>
-  constexpr array_view (U (&array)[Size]) noexcept
-    : m_array (array), m_size (Size)
-  {}
-
-  /* Create an array view from a contiguous container.  E.g.,
-     std::vector and std::array.  */
-  template<typename Container,
-	   typename = Requires<gdb::Not<IsDecayedT<Container>>>,
-	   typename
-	     = Requires<std::is_convertible
-			<decltype (std::declval<Container> ().data ()),
-			 T *>>,
-	   typename
-	     = Requires<std::is_convertible
-			<decltype (std::declval<Container> ().size ()),
-			 size_type>>>
-  constexpr array_view (Container &&c) noexcept
-    : m_array (c.data ()), m_size (c.size ())
-  {}
-
-  /* Observer methods.  Some of these can't be constexpr until we
-     require C++14.  */
-  /*constexpr14*/ T *data () noexcept { return m_array; }
-  constexpr const T *data () const noexcept { return m_array; }
-
-  /*constexpr14*/ T *begin () noexcept { return m_array; }
-  constexpr const T *begin () const noexcept { return m_array; }
-
-  /*constexpr14*/ T *end () noexcept { return m_array + m_size; }
-  constexpr const T *end () const noexcept { return m_array + m_size; }
-
-  /*constexpr14*/ reference operator[] (size_t index) noexcept
-  { return m_array[index]; }
-  constexpr const_reference operator[] (size_t index) const noexcept
-  { return m_array[index]; }
-
-  constexpr size_type size () const noexcept { return m_size; }
-  constexpr bool empty () const noexcept { return m_size == 0; }
-
-  /* Slice an array view.  */
-
-  /* Return a new array view over SIZE elements starting at START.  */
-  constexpr array_view<T> slice (size_type start, size_type size) const noexcept
-  { return {m_array + start, size}; }
-
-  /* Return a new array view over all the elements after START,
-     inclusive.  */
-  constexpr array_view<T> slice (size_type start) const noexcept
-  { return {m_array + start, size () - start}; }
-
-private:
-  T *m_array;
-  size_type m_size;
-};
-
-/* Compare LHS and RHS for (deep) equality.  That is, whether LHS and
-   RHS have the same sizes, and whether each pair of elements of LHS
-   and RHS at the same position compares equal.  */
-
-template <typename T>
-bool
-operator== (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs)
-{
-  if (lhs.size () != rhs.size ())
-    return false;
-
-  for (size_t i = 0; i < lhs.size (); i++)
-    if (!(lhs[i] == rhs[i]))
-      return false;
-
-  return true;
-}
-
-/* Compare two array_views for inequality.  */
-
-template <typename T>
-bool
-operator!= (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs)
-{
-  return !(lhs == rhs);
-}
-
-/* Create an array view from a pointer to an array and an element
-   count.
-
-   This is useful as alternative to constructing an array_view using
-   brace initialization when the size variable you have handy is of
-   signed type, since otherwise without an explicit cast the code
-   would be ill-formed.
-
-   For example, with:
-
-     extern void foo (int, int, gdb::array_view<value *>);
-
-     value *args[2];
-     int nargs;
-     foo (1, 2, {values, nargs});
-
-   You'd get:
-
-     source.c:10: error: narrowing conversion of â€˜nargsâ€™ from â€˜intâ€™ to
-     â€˜size_t {aka long unsigned int}â€™ inside { } [-Werror=narrowing]
-
-   You could fix it by writing the somewhat distracting explicit cast:
-
-     foo (1, 2, {values, (size_t) nargs});
-
-   Or by instantiating an array_view explicitly:
-
-     foo (1, 2, gdb::array_view<value *>(values, nargs));
-
-   Or, better, using make_array_view, which has the advantage of
-   inferring the arrav_view element's type:
-
-     foo (1, 2, gdb::make_array_view (values, nargs));
-*/
-
-template<typename U>
-constexpr inline array_view<U>
-make_array_view (U *array, size_t size) noexcept
-{
-  return {array, size};
-}
-
-} /* namespace gdb */
-
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/ax.def ./gdb/gdbsupport/ax.def
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/ax.def	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/ax.def	1970-01-01 00:00:00.000000000 +0000
@@ -1,97 +0,0 @@
-/* Definition of agent opcode values.   -*- c -*-
-   Copyright (C) 1998-2020 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/>.  */
-
-/* The actual values of the various bytecode operations.
-
-   Other independent implementations of the agent bytecode engine will
-   rely on the exact values of these enums, and may not be recompiled
-   when we change this table.  The numeric values should remain fixed
-   whenever possible.  Thus, we assign them values explicitly here (to
-   allow gaps to form safely), and the disassembly table in
-   agentexpr.h behaves like an opcode map.  If you want to see them
-   grouped logically, see doc/agentexpr.texi.
-
-   Each line is of the form:
-   
-   DEFOP (name, size, data_size, consumed, produced, opcode)
-   
-   NAME is the name of the operation.
-   SIZE is the number of argument bytes that the operation takes from
-   the bytecode stream.
-   DATA_SIZE is the size of data operated on, in bits, for operations
-   that care (ref and const).  It is zero otherwise.
-   CONSUMED is the number of stack elements consumed.
-   PRODUCED is the number of stack elements produced.
-   OPCODE is the operation's encoding.  */
-
-DEFOP (float, 0, 0, 0, 0, 0x01)
-DEFOP (add, 0, 0, 2, 1, 0x02)
-DEFOP (sub, 0, 0, 2, 1, 0x03)
-DEFOP (mul, 0, 0, 2, 1, 0x04)
-DEFOP (div_signed, 0, 0, 2, 1, 0x05)
-DEFOP (div_unsigned, 0, 0, 2, 1, 0x06)
-DEFOP (rem_signed, 0, 0, 2, 1, 0x07)
-DEFOP (rem_unsigned, 0, 0, 2, 1, 0x08)
-DEFOP (lsh, 0, 0, 2, 1, 0x09)
-DEFOP (rsh_signed, 0, 0, 2, 1, 0x0a)
-DEFOP (rsh_unsigned, 0, 0, 2, 1, 0x0b)
-DEFOP (trace, 0, 0, 2, 0, 0x0c)
-DEFOP (trace_quick, 1, 0, 1, 1, 0x0d)
-DEFOP (log_not, 0, 0, 1, 1, 0x0e)
-DEFOP (bit_and, 0, 0, 2, 1, 0x0f)
-DEFOP (bit_or, 0, 0, 2, 1, 0x10)
-DEFOP (bit_xor, 0, 0, 2, 1, 0x11)
-DEFOP (bit_not, 0, 0, 1, 1, 0x12)
-DEFOP (equal, 0, 0, 2, 1, 0x13)
-DEFOP (less_signed, 0, 0, 2, 1, 0x14)
-DEFOP (less_unsigned, 0, 0, 2, 1, 0x15)
-DEFOP (ext, 1, 0, 1, 1, 0x16)
-DEFOP (ref8, 0, 8, 1, 1, 0x17)
-DEFOP (ref16, 0, 16, 1, 1, 0x18)
-DEFOP (ref32, 0, 32, 1, 1, 0x19)
-DEFOP (ref64, 0, 64, 1, 1, 0x1a)
-DEFOP (ref_float, 0, 0, 1, 1, 0x1b)
-DEFOP (ref_double, 0, 0, 1, 1, 0x1c)
-DEFOP (ref_long_double, 0, 0, 1, 1, 0x1d)
-DEFOP (l_to_d, 0, 0, 1, 1, 0x1e)
-DEFOP (d_to_l, 0, 0, 1, 1, 0x1f)
-DEFOP (if_goto, 2, 0, 1, 0, 0x20)
-DEFOP (goto, 2, 0, 0, 0, 0x21)
-DEFOP (const8, 1, 8, 0, 1, 0x22)
-DEFOP (const16, 2, 16, 0, 1, 0x23)
-DEFOP (const32, 4, 32, 0, 1, 0x24)
-DEFOP (const64, 8, 64, 0, 1, 0x25)
-DEFOP (reg, 2, 0, 0, 1, 0x26)
-DEFOP (end, 0, 0, 0, 0, 0x27)
-DEFOP (dup, 0, 0, 1, 2, 0x28)
-DEFOP (pop, 0, 0, 1, 0, 0x29)
-DEFOP (zero_ext, 1, 0, 1, 1, 0x2a)
-DEFOP (swap, 0, 0, 2, 2, 0x2b)
-DEFOP (getv, 2, 0, 0, 1, 0x2c)
-DEFOP (setv, 2, 0, 1, 1, 0x2d)
-DEFOP (tracev, 2, 0, 0, 1, 0x2e)
-DEFOP (tracenz, 0, 0, 2, 0, 0x2f)
-DEFOP (trace16, 2, 0, 1, 1, 0x30)
-/* We need something here just to make the tables come out ok.  */
-DEFOP (invalid2, 0, 0, 0, 0, 0x31)
-/* The "consumed" number for pick is wrong, but there's no way to
-   express the right thing.  */
-DEFOP (pick, 1, 0, 0, 1, 0x32)
-DEFOP (rot, 0, 0, 3, 3, 0x33)
-/* Both the argument and consumed numbers are dynamic for this one.  */
-DEFOP (printf, 0, 0, 0, 0, 0x34)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/block-signals.h ./gdb/gdbsupport/block-signals.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/block-signals.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/block-signals.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,67 +0,0 @@
-/* Block signals used by gdb
-
-   Copyright (C) 2019-2020 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 GDBSUPPORT_BLOCK_SIGNALS_H
-#define GDBSUPPORT_BLOCK_SIGNALS_H
-
-#include <signal.h>
-
-#include "gdbsupport/gdb-sigmask.h"
-
-namespace gdb
-{
-
-/* This is an RAII class that temporarily blocks the signals needed by
-   gdb.  This can be used before starting a new thread to ensure that
-   this thread starts with the appropriate signals blocked.  */
-class block_signals
-{
-public:
-  block_signals ()
-  {
-#ifdef HAVE_SIGPROCMASK
-    sigset_t mask;
-    sigemptyset (&mask);
-    sigaddset (&mask, SIGINT);
-    sigaddset (&mask, SIGCHLD);
-    sigaddset (&mask, SIGALRM);
-    sigaddset (&mask, SIGWINCH);
-    gdb_sigmask (SIG_BLOCK, &mask, &m_old_mask);
-#endif
-  }
-
-  ~block_signals ()
-  {
-#ifdef HAVE_SIGPROCMASK
-    gdb_sigmask (SIG_SETMASK, &m_old_mask, nullptr);
-#endif
-  }
-
-  DISABLE_COPY_AND_ASSIGN (block_signals);
-
-private:
-
-#ifdef HAVE_SIGPROCMASK
-  sigset_t m_old_mask;
-#endif
-};
-
-}
-
-#endif /* GDBSUPPORT_BLOCK_SIGNALS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/break-common.h ./gdb/gdbsupport/break-common.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/break-common.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/break-common.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-/* Data structures associated with breakpoints shared in both GDB and
-   GDBserver.
-   Copyright (C) 1992-2020 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 COMMON_BREAK_COMMON_H
-#define COMMON_BREAK_COMMON_H
-
-enum target_hw_bp_type
-  {
-    hw_write   = 0, 		/* Common  HW watchpoint */
-    hw_read    = 1, 		/* Read    HW watchpoint */
-    hw_access  = 2, 		/* Access  HW watchpoint */
-    hw_execute = 3		/* Execute HW breakpoint */
-  };
-
-#endif /* COMMON_BREAK_COMMON_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/btrace-common.c ./gdb/gdbsupport/btrace-common.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/btrace-common.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/btrace-common.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,190 +0,0 @@
-/* Copyright (C) 2014-2020 Free Software Foundation, Inc.
-
-   Contributed by Intel Corp. <markus.t.metzger@intel.com>
-
-   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 "common-defs.h"
-#include "btrace-common.h"
-
-
-/* See btrace-common.h.  */
-
-const char *
-btrace_format_string (enum btrace_format format)
-{
-  switch (format)
-    {
-    case BTRACE_FORMAT_NONE:
-      return _("No or unknown format");
-
-    case BTRACE_FORMAT_BTS:
-      return _("Branch Trace Store");
-
-    case BTRACE_FORMAT_PT:
-      return _("Intel Processor Trace");
-    }
-
-  internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
-}
-
-/* See btrace-common.h.  */
-
-const char *
-btrace_format_short_string (enum btrace_format format)
-{
-  switch (format)
-    {
-    case BTRACE_FORMAT_NONE:
-      return "unknown";
-
-    case BTRACE_FORMAT_BTS:
-      return "bts";
-
-    case BTRACE_FORMAT_PT:
-      return "pt";
-    }
-
-  internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
-}
-
-/* See btrace-common.h.  */
-
-void
-btrace_data::fini ()
-{
-  switch (format)
-    {
-    case BTRACE_FORMAT_NONE:
-      /* Nothing to do.  */
-      return;
-
-    case BTRACE_FORMAT_BTS:
-      delete variant.bts.blocks;
-      variant.bts.blocks = nullptr;
-      return;
-
-    case BTRACE_FORMAT_PT:
-      xfree (variant.pt.data);
-      return;
-    }
-
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
-}
-
-/* See btrace-common.h.  */
-
-bool
-btrace_data::empty () const
-{
-  switch (format)
-    {
-    case BTRACE_FORMAT_NONE:
-      return true;
-
-    case BTRACE_FORMAT_BTS:
-      return variant.bts.blocks->empty ();
-
-    case BTRACE_FORMAT_PT:
-      return (variant.pt.size == 0);
-    }
-
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
-}
-
-/* See btrace-common.h.  */
-
-void
-btrace_data::clear ()
-{
-  fini ();
-  format = BTRACE_FORMAT_NONE;
-}
-
-/* See btrace-common.h.  */
-
-int
-btrace_data_append (struct btrace_data *dst,
-		    const struct btrace_data *src)
-{
-  switch (src->format)
-    {
-    case BTRACE_FORMAT_NONE:
-      return 0;
-
-    case BTRACE_FORMAT_BTS:
-      switch (dst->format)
-	{
-	default:
-	  return -1;
-
-	case BTRACE_FORMAT_NONE:
-	  dst->format = BTRACE_FORMAT_BTS;
-	  dst->variant.bts.blocks = new std::vector<btrace_block>;
-
-	  /* Fall-through.  */
-	case BTRACE_FORMAT_BTS:
-	  {
-	    unsigned int blk;
-
-	    /* We copy blocks in reverse order to have the oldest block at
-	       index zero.  */
-	    blk = src->variant.bts.blocks->size ();
-	    while (blk != 0)
-	      {
-		const btrace_block &block
-		  = src->variant.bts.blocks->at (--blk);
-		dst->variant.bts.blocks->push_back (block);
-	      }
-	  }
-	}
-      return 0;
-
-    case BTRACE_FORMAT_PT:
-      switch (dst->format)
-	{
-	default:
-	  return -1;
-
-	case BTRACE_FORMAT_NONE:
-	  dst->format = BTRACE_FORMAT_PT;
-	  dst->variant.pt.data = NULL;
-	  dst->variant.pt.size = 0;
-
-	  /* fall-through.  */
-	case BTRACE_FORMAT_PT:
-	  {
-	    gdb_byte *data;
-	    size_t size;
-
-	    size = src->variant.pt.size + dst->variant.pt.size;
-	    data = (gdb_byte *) xmalloc (size);
-
-	    memcpy (data, dst->variant.pt.data, dst->variant.pt.size);
-	    memcpy (data + dst->variant.pt.size, src->variant.pt.data,
-		    src->variant.pt.size);
-
-	    xfree (dst->variant.pt.data);
-
-	    dst->variant.pt.data = data;
-	    dst->variant.pt.size = size;
-	  }
-	}
-      return 0;
-    }
-
-  internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/btrace-common.h ./gdb/gdbsupport/btrace-common.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/btrace-common.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/btrace-common.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,260 +0,0 @@
-/* Branch trace support for GDB, the GNU debugger.
-
-   Copyright (C) 2013-2020 Free Software Foundation, Inc.
-
-   Contributed by Intel Corp. <markus.t.metzger@intel.com>.
-
-   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 COMMON_BTRACE_COMMON_H
-#define COMMON_BTRACE_COMMON_H
-
-/* Branch tracing (btrace) is a per-thread control-flow execution trace of the
-   inferior.  For presentation purposes, the branch trace is represented as a
-   list of sequential control-flow blocks, one such list per thread.  */
-
-/* A branch trace block.
-
-   This represents a block of sequential control-flow.  Adjacent blocks will be
-   connected via calls, returns, or jumps.  The latter can be direct or
-   indirect, conditional or unconditional.  Branches can further be
-   asynchronous, e.g. interrupts.  */
-struct btrace_block
-{
-  /* The address of the first byte of the first instruction in the block.
-     The address may be zero if we do not know the beginning of this block,
-     such as for the first block in a delta trace.  */
-  CORE_ADDR begin;
-
-  /* The address of the first byte of the last instruction in the block.  */
-  CORE_ADDR end;
-
-  /* Simple constructor.  */
-  btrace_block (CORE_ADDR begin, CORE_ADDR end)
-    : begin (begin),
-      end (end)
-  {
-    /* Nothing.  */
-  }
-};
-
-/* Enumeration of btrace formats.  */
-
-enum btrace_format
-{
-  /* No branch trace format.  */
-  BTRACE_FORMAT_NONE,
-
-  /* Branch trace is in Branch Trace Store (BTS) format.
-     Actually, the format is a sequence of blocks derived from BTS.  */
-  BTRACE_FORMAT_BTS,
-
-  /* Branch trace is in Intel Processor Trace format.  */
-  BTRACE_FORMAT_PT
-};
-
-/* An enumeration of cpu vendors.  */
-
-enum btrace_cpu_vendor
-{
-  /* We do not know this vendor.  */
-  CV_UNKNOWN,
-
-  /* Intel.  */
-  CV_INTEL
-};
-
-/* A cpu identifier.  */
-
-struct btrace_cpu
-{
-  /* The processor vendor.  */
-  enum btrace_cpu_vendor vendor;
-
-  /* The cpu family.  */
-  unsigned short family;
-
-  /* The cpu model.  */
-  unsigned char model;
-
-  /* The cpu stepping.  */
-  unsigned char stepping;
-};
-
-/* A BTS configuration.  */
-
-struct btrace_config_bts
-{
-  /* The size of the branch trace buffer in bytes.
-
-     This is unsigned int and not size_t since it is registered as
-     control variable for "set record btrace bts buffer-size".  */
-  unsigned int size;
-};
-
-/* An Intel Processor Trace configuration.  */
-
-struct btrace_config_pt
-{
-  /* The size of the branch trace buffer in bytes.
-
-     This is unsigned int and not size_t since it is registered as
-     control variable for "set record btrace pt buffer-size".  */
-  unsigned int size;
-};
-
-/* A branch tracing configuration.
-
-   This describes the requested configuration as well as the actually
-   obtained configuration.
-   We describe the configuration for all different formats so we can
-   easily switch between formats.  */
-
-struct btrace_config
-{
-  /* The branch tracing format.  */
-  enum btrace_format format;
-
-  /* The BTS format configuration.  */
-  struct btrace_config_bts bts;
-
-  /* The Intel Processor Trace format configuration.  */
-  struct btrace_config_pt pt;
-};
-
-/* Branch trace in BTS format.  */
-struct btrace_data_bts
-{
-  /* Branch trace is represented as a vector of branch trace blocks starting
-     with the most recent block.  This needs to be a pointer as we place
-     btrace_data_bts into a union.  */
-  std::vector<btrace_block> *blocks;
-};
-
-/* Configuration information to go with the trace data.  */
-struct btrace_data_pt_config
-{
-  /* The processor on which the trace has been collected.  */
-  struct btrace_cpu cpu;
-};
-
-/* Branch trace in Intel Processor Trace format.  */
-struct btrace_data_pt
-{
-  /* Some configuration information to go with the data.  */
-  struct btrace_data_pt_config config;
-
-  /* The trace data.  */
-  gdb_byte *data;
-
-  /* The size of DATA in bytes.  */
-  size_t size;
-};
-
-/* The branch trace data.  */
-struct btrace_data
-{
-  btrace_data () = default;
-
-  ~btrace_data ()
-  {
-    fini ();
-  }
-
-  btrace_data &operator= (btrace_data &&other)
-  {
-    if (this != &other)
-      {
-	fini ();
-	format = other.format;
-	variant = other.variant;
-	other.format = BTRACE_FORMAT_NONE;
-      }
-    return *this;
-  }
-
-  /* Return true if this is empty; false otherwise.  */
-  bool empty () const;
-
-  /* Clear this object.  */
-  void clear ();
-
-  enum btrace_format format = BTRACE_FORMAT_NONE;
-
-  union
-  {
-    /* Format == BTRACE_FORMAT_BTS.  */
-    struct btrace_data_bts bts;
-
-    /* Format == BTRACE_FORMAT_PT.  */
-    struct btrace_data_pt pt;
-  } variant;
-
-private:
-
-  DISABLE_COPY_AND_ASSIGN (btrace_data);
-
-  void fini ();
-};
-
-/* Target specific branch trace information.  */
-struct btrace_target_info;
-
-/* Enumeration of btrace read types.  */
-
-enum btrace_read_type
-{
-  /* Send all available trace.  */
-  BTRACE_READ_ALL,
-
-  /* Send all available trace, if it changed.  */
-  BTRACE_READ_NEW,
-
-  /* Send the trace since the last request.  This will fail if the trace
-     buffer overflowed.  */
-  BTRACE_READ_DELTA
-};
-
-/* Enumeration of btrace errors.  */
-
-enum btrace_error
-{
-  /* No error.  Everything is OK.  */
-  BTRACE_ERR_NONE,
-
-  /* An unknown error.  */
-  BTRACE_ERR_UNKNOWN,
-
-  /* Branch tracing is not supported on this system.  */
-  BTRACE_ERR_NOT_SUPPORTED,
-
-  /* The branch trace buffer overflowed; no delta read possible.  */
-  BTRACE_ERR_OVERFLOW
-};
-
-/* Return a string representation of FORMAT.  */
-extern const char *btrace_format_string (enum btrace_format format);
-
-/* Return an abbreviation string representation of FORMAT.  */
-extern const char *btrace_format_short_string (enum btrace_format format);
-
-/* Append the branch trace data from SRC to the end of DST.
-   Both SRC and DST must use the same format.
-   Returns zero on success; a negative number otherwise.  */
-extern int btrace_data_append (struct btrace_data *dst,
-			       const struct btrace_data *src);
-
-#endif /* COMMON_BTRACE_COMMON_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/buffer.c ./gdb/gdbsupport/buffer.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/buffer.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/buffer.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,178 +0,0 @@
-/* A simple growing buffer for GDB.
-  
-   Copyright (C) 2009-2020 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 "common-defs.h"
-#include "xml-utils.h"
-#include "buffer.h"
-#include "inttypes.h"
-void
-buffer_grow (struct buffer *buffer, const char *data, size_t size)
-{
-  char *new_buffer;
-  size_t new_buffer_size;
-
-  if (size == 0)
-    return;
-
-  new_buffer_size = buffer->buffer_size;
-
-  if (new_buffer_size == 0)
-    new_buffer_size = 1;
-
-  while (buffer->used_size + size > new_buffer_size)
-    new_buffer_size *= 2;
-  new_buffer = (char *) xrealloc (buffer->buffer, new_buffer_size);
-  memcpy (new_buffer + buffer->used_size, data, size);
-  buffer->buffer = new_buffer;
-  buffer->buffer_size = new_buffer_size;
-  buffer->used_size += size;
-}
-
-void
-buffer_free (struct buffer *buffer)
-{
-  if (!buffer)
-    return;
-
-  xfree (buffer->buffer);
-  buffer->buffer = NULL;
-  buffer->buffer_size = 0;
-  buffer->used_size = 0;
-}
-
-void
-buffer_init (struct buffer *buffer)
-{
-  memset (buffer, 0, sizeof (*buffer));
-}
-
-char*
-buffer_finish (struct buffer *buffer)
-{
-  char *ret = buffer->buffer;
-  buffer->buffer = NULL;
-  buffer->buffer_size = 0;
-  buffer->used_size = 0;
-  return ret;
-}
-
-void
-buffer_xml_printf (struct buffer *buffer, const char *format, ...)
-{
-  va_list ap;
-  const char *f;
-  const char *prev;
-  int percent = 0;
-
-  va_start (ap, format);
-
-  prev = format;
-  for (f = format; *f; f++)
-    {
-      if (percent)
-	{
-	  char buf[32];
-	  char *str = buf;
-	  const char *f_old = f;
-	  
-	  switch (*f)
-	    {
-	    case 's':
-	      str = va_arg (ap, char *);
-	      break;
-	    case 'd':
-	      sprintf (str, "%d", va_arg (ap, int));
-	      break;
-	    case 'u':
-	      sprintf (str, "%u", va_arg (ap, unsigned int));
-	      break;
-	    case 'x':
-	      sprintf (str, "%x", va_arg (ap, unsigned int));
-	      break;
-	    case 'o':
-	      sprintf (str, "%o", va_arg (ap, unsigned int));
-	      break;
-	    case 'l':
-	      f++;
-	      switch (*f)
-		{
-		case 'd':
-		  sprintf (str, "%ld", va_arg (ap, long));
-		  break;
-		case 'u':
-		  sprintf (str, "%lu", va_arg (ap, unsigned long));
-		  break;
-		case 'x':
-		  sprintf (str, "%lx", va_arg (ap, unsigned long));
-		  break;
-		case 'o':
-		  sprintf (str, "%lo", va_arg (ap, unsigned long));
-		  break;
-		case 'l':
-		  f++;
-		  switch (*f)
-		    {
-		    case 'd':
-		      sprintf (str, "%" PRId64,
-			       (int64_t) va_arg (ap, long long));
-		      break;
-		    case 'u':
-		      sprintf (str, "%" PRIu64,
-			       (uint64_t) va_arg (ap, unsigned long long));
-		      break;
-		    case 'x':
-		      sprintf (str, "%" PRIx64,
-			       (uint64_t) va_arg (ap, unsigned long long));
-		      break;
-		    case 'o':
-		      sprintf (str, "%" PRIo64,
-			       (uint64_t) va_arg (ap, unsigned long long));
-		      break;
-		    default:
-		      str = 0;
-		      break;
-		    }
-		  break;
-		default:
-		  str = 0;
-		  break;
-		}
-	      break;
-	    default:
-	      str = 0;
-	      break;
-	    }
-
-	  if (str)
-	    {
-	      buffer_grow (buffer, prev, f_old - prev - 1);
-	      std::string p = xml_escape_text (str);
-	      buffer_grow_str (buffer, p.c_str ());
-	      prev = f + 1;
-	    }
-	  percent = 0;
-	}
-      else if (*f == '%')
-	percent = 1;
-    }
-
-  buffer_grow_str (buffer, prev);
-  va_end (ap);
-}
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/buffer.h ./gdb/gdbsupport/buffer.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/buffer.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/buffer.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,68 +0,0 @@
-/* A simple growing buffer for GDB.
-  
-   Copyright (C) 2009-2020 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 COMMON_BUFFER_H
-#define COMMON_BUFFER_H
-
-struct buffer
-{
-  char *buffer;
-  size_t buffer_size; /* allocated size */
-  size_t used_size; /* actually used size */
-};
-
-/* Append DATA of size SIZE to the end of BUFFER.  Grows the buffer to
-   accommodate the new data.  */
-void buffer_grow (struct buffer *buffer, const char *data, size_t size);
-
-/* Append C to the end of BUFFER.  Grows the buffer to accommodate the
-   new data.  */
-
-static inline void
-buffer_grow_char (struct buffer *buffer, char c)
-{
-  buffer_grow (buffer, &c, 1);
-}
-
-/* Release any memory held by BUFFER.  */
-void buffer_free (struct buffer *buffer);
-
-/* Initialize BUFFER.  BUFFER holds no memory afterwards.  */
-void buffer_init (struct buffer *buffer);
-
-/* Return a pointer into BUFFER data, effectively transferring
-   ownership of the buffer memory to the caller.  Calling buffer_free
-   afterwards has no effect on the returned data.  */
-char* buffer_finish (struct buffer *buffer);
-
-/* Simple printf to buffer function.  Current implemented formatters:
-   %s - grow an xml escaped text in BUFFER.
-   %d - grow an signed integer in BUFFER.
-   %u - grow an unsigned integer in BUFFER.
-   %x - grow an unsigned integer formatted in hexadecimal in BUFFER.
-   %o - grow an unsigned integer formatted in octal in BUFFER.  */
-void buffer_xml_printf (struct buffer *buffer, const char *format, ...)
-  ATTRIBUTE_PRINTF (2, 3);
-
-#define buffer_grow_str(BUFFER,STRING)		\
-  buffer_grow (BUFFER, STRING, strlen (STRING))
-#define buffer_grow_str0(BUFFER,STRING)			\
-  buffer_grow (BUFFER, STRING, strlen (STRING) + 1)
-
-#endif /* COMMON_BUFFER_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/byte-vector.h ./gdb/gdbsupport/byte-vector.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/byte-vector.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/byte-vector.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,63 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_BYTE_VECTOR_H
-#define COMMON_BYTE_VECTOR_H
-
-#include "gdbsupport/def-vector.h"
-
-namespace gdb {
-
-/* byte_vector is a gdb_byte std::vector with a custom allocator that
-   unlike std::vector<gdb_byte> does not zero-initialize new elements
-   by default when the vector is created/resized.  This is what you
-   usually want when working with byte buffers, since if you're
-   creating or growing a buffer you'll most surely want to fill it in
-   with data, in which case zero-initialization would be a
-   pessimization.  For example:
-
-     gdb::byte_vector buf (some_large_size);
-     fill_with_data (buf.data (), buf.size ());
-
-   On the odd case you do need zero initialization, then you can still
-   call the overloads that specify an explicit value, like:
-
-     gdb::byte_vector buf (some_initial_size, 0);
-     buf.resize (a_bigger_size, 0);
-
-   (Or use std::vector<gdb_byte> instead.)
-
-   Note that unlike std::vector<gdb_byte>, function local
-   gdb::byte_vector objects constructed with an initial size like:
-
-     gdb::byte_vector buf (some_size);
-     fill_with_data (buf.data (), buf.size ());
-
-   usually compile down to the exact same as:
-
-     std::unique_ptr<byte[]> buf (new gdb_byte[some_size]);
-     fill_with_data (buf.get (), some_size);
-
-   with the former having the advantage of being a bit more readable,
-   and providing the whole std::vector API, if you end up needing it.
-*/
-using byte_vector = gdb::def_vector<gdb_byte>;
-using char_vector = gdb::def_vector<char>;
-
-} /* namespace gdb */
-
-#endif /* COMMON_DEF_VECTOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/cleanups.c ./gdb/gdbsupport/cleanups.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/cleanups.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/cleanups.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,144 +0,0 @@
-/* Cleanup routines for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "cleanups.h"
-
-/* The cleanup list records things that have to be undone
-   if an error happens (descriptors to be closed, memory to be freed, etc.)
-   Each link in the chain records a function to call and an
-   argument to give it.
-
-   Use make_cleanup to add an element to the cleanup chain.
-   Use do_cleanups to do all cleanup actions back to a given
-   point in the chain.  Use discard_cleanups to remove cleanups
-   from the chain back to a given point, not doing them.
-
-   If the argument is pointer to allocated memory, then you need
-   to additionally set the 'free_arg' member to a function that will
-   free that memory.  This function will be called both when the cleanup
-   is executed and when it's discarded.  */
-
-struct cleanup
-{
-  struct cleanup *next;
-  void (*function) (void *);
-  void (*free_arg) (void *);
-  void *arg;
-};
-
-/* Used to mark the end of a cleanup chain.
-   The value is chosen so that it:
-   - is non-NULL so that make_cleanup never returns NULL,
-   - causes a segv if dereferenced
-     [though this won't catch errors that a value of, say,
-     ((struct cleanup *) -1) will]
-   - displays as something useful when printed in gdb.
-   This is const for a bit of extra robustness.
-   It is initialized to coax gcc into putting it into .rodata.
-   All fields are initialized to survive -Wextra.  */
-static const struct cleanup sentinel_cleanup = { 0, 0, 0, 0 };
-
-/* Handy macro to use when referring to sentinel_cleanup.  */
-#define SENTINEL_CLEANUP ((struct cleanup *) &sentinel_cleanup)
-
-/* Chain of cleanup actions established with make_final_cleanup,
-   to be executed when gdb exits.  */
-static struct cleanup *final_cleanup_chain = SENTINEL_CLEANUP;
-
-/* Main worker routine to create a cleanup.
-   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
-   FUNCTION is the function to call to perform the cleanup.
-   ARG is passed to FUNCTION when called.
-   FREE_ARG, if non-NULL, is called after the cleanup is performed.
-
-   The result is a pointer to the previous chain pointer
-   to be passed later to do_cleanups or discard_cleanups.  */
-
-static struct cleanup *
-make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function,
-		  void *arg,  void (*free_arg) (void *))
-{
-  struct cleanup *newobj = XNEW (struct cleanup);
-  struct cleanup *old_chain = *pmy_chain;
-
-  newobj->next = *pmy_chain;
-  newobj->function = function;
-  newobj->free_arg = free_arg;
-  newobj->arg = arg;
-  *pmy_chain = newobj;
-
-  gdb_assert (old_chain != NULL);
-  return old_chain;
-}
-
-/* Worker routine to create a cleanup without a destructor.
-   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
-   FUNCTION is the function to call to perform the cleanup.
-   ARG is passed to FUNCTION when called.
-
-   The result is a pointer to the previous chain pointer
-   to be passed later to do_cleanups or discard_cleanups.  */
-
-static struct cleanup *
-make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
-		 void *arg)
-{
-  return make_my_cleanup2 (pmy_chain, function, arg, NULL);
-}
-
-/* Add a new cleanup to the final cleanup_chain,
-   and return the previous chain pointer
-   to be passed later to do_cleanups or discard_cleanups.
-   Args are FUNCTION to clean up with, and ARG to pass to it.  */
-
-struct cleanup *
-make_final_cleanup (make_cleanup_ftype *function, void *arg)
-{
-  return make_my_cleanup (&final_cleanup_chain, function, arg);
-}
-
-/* Worker routine to perform cleanups.
-   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
-   OLD_CHAIN is the result of a "make" cleanup routine.
-   Cleanups are performed until we get back to the old end of the chain.  */
-
-static void
-do_my_cleanups (struct cleanup **pmy_chain,
-		struct cleanup *old_chain)
-{
-  struct cleanup *ptr;
-
-  while ((ptr = *pmy_chain) != old_chain)
-    {
-      *pmy_chain = ptr->next;	/* Do this first in case of recursion.  */
-      (*ptr->function) (ptr->arg);
-      if (ptr->free_arg)
-	(*ptr->free_arg) (ptr->arg);
-      xfree (ptr);
-    }
-}
-
-/* Discard final cleanups and do the actions they describe.  */
-
-void
-do_final_cleanups ()
-{
-  do_my_cleanups (&final_cleanup_chain, SENTINEL_CLEANUP);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/cleanups.h ./gdb/gdbsupport/cleanups.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/cleanups.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/cleanups.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-/* Cleanups.
-   Copyright (C) 1986-2020 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 COMMON_CLEANUPS_H
-#define COMMON_CLEANUPS_H
-
-/* Outside of cleanups.c, this is an opaque type.  */
-struct cleanup;
-
-/* NOTE: cagney/2000-03-04: This typedef is strictly for the
-   make_cleanup function declarations below.  Do not use this typedef
-   as a cast when passing functions into the make_cleanup() code.
-   Instead either use a bounce function or add a wrapper function.
-   Calling a f(char*) function with f(void*) is non-portable.  */
-typedef void (make_cleanup_ftype) (void *);
-
-/* Function type for the dtor in make_cleanup_dtor.  */
-typedef void (make_cleanup_dtor_ftype) (void *);
-
-extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
-
-extern void do_final_cleanups ();
-
-#endif /* COMMON_CLEANUPS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-debug.c ./gdb/gdbsupport/common-debug.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-debug.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-debug.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-/* Debug printing functions.
-
-   Copyright (C) 2014-2020 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 "common-defs.h"
-#include "common-debug.h"
-
-/* See gdbsupport/common-debug.h.  */
-
-bool show_debug_regs;
-
-/* See gdbsupport/common-debug.h.  */
-
-void
-debug_printf (const char *fmt, ...)
-{
-  va_list ap;
-
-  va_start (ap, fmt);
-  debug_vprintf (fmt, ap);
-  va_end (ap);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-debug.h ./gdb/gdbsupport/common-debug.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-debug.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-debug.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,41 +0,0 @@
-/* Declarations for debug printing functions.
-
-   Copyright (C) 2014-2020 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 COMMON_COMMON_DEBUG_H
-#define COMMON_COMMON_DEBUG_H
-
-/* Set to true to enable debugging of hardware breakpoint/
-   watchpoint support code.  */
-
-extern bool show_debug_regs;
-
-/* Print a formatted message to the appropriate channel for
-   debugging output for the client.  */
-
-extern void debug_printf (const char *format, ...)
-     ATTRIBUTE_PRINTF (1, 2);
-
-/* Print a formatted message to the appropriate channel for
-   debugging output for the client.  This function must be
-   provided by the client.  */
-
-extern void debug_vprintf (const char *format, va_list ap)
-     ATTRIBUTE_PRINTF (1, 0);
-
-#endif /* COMMON_COMMON_DEBUG_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-defs.h ./gdb/gdbsupport/common-defs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-defs.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-defs.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,159 +0,0 @@
-/* Common definitions.
-
-   Copyright (C) 1986-2020 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 COMMON_COMMON_DEFS_H
-#define COMMON_COMMON_DEFS_H
-
-#include "config.h"
-
-#undef PACKAGE_NAME
-#undef PACKAGE_VERSION
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-
-#ifdef GDBSERVER
-#include "build-gnulib-gdbserver/config.h"
-#else
-#include "../../gnulib/config.h"
-#endif
-
-#undef PACKAGE_NAME
-#undef PACKAGE_VERSION
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-
-/* From:
-    https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html
-
-   "On some hosts that predate C++11, when using C++ one must define
-   __STDC_CONSTANT_MACROS to make visible the definitions of constant
-   macros such as INTMAX_C, and one must define __STDC_LIMIT_MACROS to
-   make visible the definitions of limit macros such as INTMAX_MAX.".
-
-   And:
-    https://www.gnu.org/software/gnulib/manual/html_node/inttypes_002eh.html
-
-   "On some hosts that predate C++11, when using C++ one must define
-   __STDC_FORMAT_MACROS to make visible the declarations of format
-   macros such as PRIdMAX."
-
-   Must do this before including any system header, since other system
-   headers may include stdint.h/inttypes.h.  */
-#define __STDC_CONSTANT_MACROS 1
-#define __STDC_LIMIT_MACROS 1
-#define __STDC_FORMAT_MACROS 1
-
-/* Some distros enable _FORTIFY_SOURCE by default, which on occasion
-   has caused build failures with -Wunused-result when a patch is
-   developed on a distro that does not enable _FORTIFY_SOURCE.  We
-   enable it here in order to try to catch these problems earlier;
-   plus this seems like a reasonable safety measure.  The check for
-   optimization is required because _FORTIFY_SOURCE only works when
-   optimization is enabled.  If _FORTIFY_SOURCE is already defined,
-   then we don't do anything.  Also, on MinGW, fortify requires
-   linking to -lssp, and to avoid the hassle of checking for
-   that and linking to it statically, we just don't define
-   _FORTIFY_SOURCE there.  */
-
-#if (!defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 \
-     && !defined(__MINGW32__))
-#define _FORTIFY_SOURCE 2
-#endif
-
-/* We don't support Windows versions before XP, so we define
-   _WIN32_WINNT correspondingly to ensure the Windows API headers
-   expose the required symbols.  */
-#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 <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#ifdef HAVE_STRINGS_H
-#include <strings.h>	/* for strcasecmp and strncasecmp */
-#endif
-#include <errno.h>
-#include <alloca.h>
-/* Must be included before pathmax.h to avoid build errors about localtime_r
-   and gmtime_r in gnulib on MinGW.  This is a gnulib bug:
-   https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00022.html  */
-#include <time.h>
-
-
-#include "ansidecl.h"
-/* This is defined by ansidecl.h, but we prefer gnulib's version.  On
-   MinGW, gnulib might enable __USE_MINGW_ANSI_STDIO, which may or not
-   require use of attribute gnu_printf instead of printf.  gnulib
-   checks that at configure time.  Since _GL_ATTRIBUTE_FORMAT_PRINTF
-   is compatible with ATTRIBUTE_PRINTF, simply use it.  */
-#undef ATTRIBUTE_PRINTF
-#define ATTRIBUTE_PRINTF _GL_ATTRIBUTE_FORMAT_PRINTF
-
-#if GCC_VERSION >= 3004
-#define ATTRIBUTE_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
-#else
-#define ATTRIBUTE_UNUSED_RESULT
-#endif
-
-#include "libiberty.h"
-#include "pathmax.h"
-#include "gdb/signals.h"
-#include "gdb_locale.h"
-#include "ptid.h"
-#include "common-types.h"
-#include "common-utils.h"
-#include "gdb_assert.h"
-#include "errors.h"
-#include "print-utils.h"
-#include "common-debug.h"
-#include "cleanups.h"
-#include "common-exceptions.h"
-#include "gdbsupport/poison.h"
-
-#define EXTERN_C extern "C"
-#define EXTERN_C_PUSH extern "C" {
-#define EXTERN_C_POP }
-
-/* Pull in gdb::unique_xmalloc_ptr.  */
-#include "gdbsupport/gdb_unique_ptr.h"
-
-/* String containing the current directory (what getwd would return).  */
-extern char *current_directory;
-
-/* sbrk on macOS is not useful for our purposes, since sbrk(0) always
-   returns the same value.  brk/sbrk on macOS is just an emulation
-   that always returns a pointer to a 4MB section reserved for
-   that.  */
-
-#if defined (HAVE_SBRK) && !__APPLE__
-#define HAVE_USEFUL_SBRK 1
-#endif
-
-#endif /* COMMON_COMMON_DEFS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-exceptions.c ./gdb/gdbsupport/common-exceptions.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-exceptions.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-exceptions.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,235 +0,0 @@
-/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "common-exceptions.h"
-#include <forward_list>
-
-/* Possible catcher states.  */
-enum catcher_state {
-  /* Initial state, a new catcher has just been created.  */
-  CATCHER_CREATED,
-  /* The catch code is running.  */
-  CATCHER_RUNNING,
-  CATCHER_RUNNING_1,
-  /* The catch code threw an exception.  */
-  CATCHER_ABORTING
-};
-
-/* Possible catcher actions.  */
-enum catcher_action {
-  CATCH_ITER,
-  CATCH_ITER_1,
-  CATCH_THROWING
-};
-
-struct catcher
-{
-  enum catcher_state state = CATCHER_CREATED;
-  /* Jump buffer pointing back at the exception handler.  */
-  jmp_buf buf;
-  /* Status buffer belonging to the exception handler.  */
-  struct gdb_exception exception;
-};
-
-/* Where to go for throw_exception().  */
-static std::forward_list<struct catcher> catchers;
-
-jmp_buf *
-exceptions_state_mc_init ()
-{
-  catchers.emplace_front ();
-  return &catchers.front ().buf;
-}
-
-/* Catcher state machine.  Returns non-zero if the m/c should be run
-   again, zero if it should abort.  */
-
-static int
-exceptions_state_mc (enum catcher_action action)
-{
-  switch (catchers.front ().state)
-    {
-    case CATCHER_CREATED:
-      switch (action)
-	{
-	case CATCH_ITER:
-	  /* Allow the code to run the catcher.  */
-	  catchers.front ().state = CATCHER_RUNNING;
-	  return 1;
-	default:
-	  internal_error (__FILE__, __LINE__, _("bad state"));
-	}
-    case CATCHER_RUNNING:
-      switch (action)
-	{
-	case CATCH_ITER:
-	  /* No error/quit has occured.  */
-	  return 0;
-	case CATCH_ITER_1:
-	  catchers.front ().state = CATCHER_RUNNING_1;
-	  return 1;
-	case CATCH_THROWING:
-	  catchers.front ().state = CATCHER_ABORTING;
-	  /* See also throw_exception.  */
-	  return 1;
-	default:
-	  internal_error (__FILE__, __LINE__, _("bad switch"));
-	}
-    case CATCHER_RUNNING_1:
-      switch (action)
-	{
-	case CATCH_ITER:
-	  /* The did a "break" from the inner while loop.  */
-	  return 0;
-	case CATCH_ITER_1:
-	  catchers.front ().state = CATCHER_RUNNING;
-	  return 0;
-	case CATCH_THROWING:
-	  catchers.front ().state = CATCHER_ABORTING;
-	  /* See also throw_exception.  */
-	  return 1;
-	default:
-	  internal_error (__FILE__, __LINE__, _("bad switch"));
-	}
-    case CATCHER_ABORTING:
-      switch (action)
-	{
-	case CATCH_ITER:
-	  {
-	    /* Exit normally if this catcher can handle this
-	       exception.  The caller analyses the func return
-	       values.  */
-	    return 0;
-	  }
-	default:
-	  internal_error (__FILE__, __LINE__, _("bad state"));
-	}
-    default:
-      internal_error (__FILE__, __LINE__, _("bad switch"));
-    }
-}
-
-int
-exceptions_state_mc_catch (struct gdb_exception *exception,
-			   int mask)
-{
-  *exception = std::move (catchers.front ().exception);
-  catchers.pop_front ();
-
-  if (exception->reason < 0)
-    {
-      if (mask & RETURN_MASK (exception->reason))
-	{
-	  /* Exit normally and let the caller handle the
-	     exception.  */
-	  return 1;
-	}
-
-      /* The caller didn't request that the event be caught, relay the
-	 event to the next exception_catch/CATCH_SJLJ.  */
-      throw_exception_sjlj (*exception);
-    }
-
-  /* No exception was thrown.  */
-  return 0;
-}
-
-int
-exceptions_state_mc_action_iter (void)
-{
-  return exceptions_state_mc (CATCH_ITER);
-}
-
-int
-exceptions_state_mc_action_iter_1 (void)
-{
-  return exceptions_state_mc (CATCH_ITER_1);
-}
-
-/* Return EXCEPTION to the nearest containing CATCH_SJLJ block.  */
-
-void
-throw_exception_sjlj (const struct gdb_exception &exception)
-{
-  /* Jump to the nearest CATCH_SJLJ block, communicating REASON to
-     that call via setjmp's return value.  Note that REASON can't be
-     zero, by definition in common-exceptions.h.  */
-  exceptions_state_mc (CATCH_THROWING);
-  enum return_reason reason = exception.reason;
-  catchers.front ().exception = exception;
-  longjmp (catchers.front ().buf, reason);
-}
-
-/* Implementation of throw_exception that uses C++ try/catch.  */
-
-void
-throw_exception (gdb_exception &&exception)
-{
-  if (exception.reason == RETURN_QUIT)
-    throw gdb_exception_quit (std::move (exception));
-  else if (exception.reason == RETURN_ERROR)
-    throw gdb_exception_error (std::move (exception));
-  else
-    gdb_assert_not_reached ("invalid return reason");
-}
-
-static void ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0)
-throw_it (enum return_reason reason, enum errors error, const char *fmt,
-	  va_list ap)
-{
-  if (reason == RETURN_QUIT)
-    throw gdb_exception_quit (fmt, ap);
-  else if (reason == RETURN_ERROR)
-    throw gdb_exception_error (error, fmt, ap);
-  else
-    gdb_assert_not_reached ("invalid return reason");
-}
-
-void
-throw_verror (enum errors error, const char *fmt, va_list ap)
-{
-  throw_it (RETURN_ERROR, error, fmt, ap);
-}
-
-void
-throw_vquit (const char *fmt, va_list ap)
-{
-  throw_it (RETURN_QUIT, GDB_NO_ERROR, fmt, ap);
-}
-
-void
-throw_error (enum errors error, const char *fmt, ...)
-{
-  va_list args;
-
-  va_start (args, fmt);
-  throw_verror (error, fmt, args);
-  va_end (args);
-}
-
-void
-throw_quit (const char *fmt, ...)
-{
-  va_list args;
-
-  va_start (args, fmt);
-  throw_vquit (fmt, args);
-  va_end (args);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-exceptions.h ./gdb/gdbsupport/common-exceptions.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-exceptions.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-exceptions.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,304 +0,0 @@
-/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 COMMON_COMMON_EXCEPTIONS_H
-#define COMMON_COMMON_EXCEPTIONS_H
-
-#include <setjmp.h>
-#include <new>
-#include <memory>
-#include <string>
-
-/* Reasons for calling throw_exceptions().  NOTE: all reason values
-   must be different from zero.  enum value 0 is reserved for internal
-   use as the return value from an initial setjmp().  */
-
-enum return_reason
-  {
-    /* User interrupt.  */
-    RETURN_QUIT = -2,
-    /* Any other error.  */
-    RETURN_ERROR
-  };
-
-#define RETURN_MASK(reason)	(1 << (int)(-reason))
-
-typedef enum
-{
-  RETURN_MASK_QUIT = RETURN_MASK (RETURN_QUIT),
-  RETURN_MASK_ERROR = RETURN_MASK (RETURN_ERROR),
-  RETURN_MASK_ALL = (RETURN_MASK_QUIT | RETURN_MASK_ERROR)
-} return_mask;
-
-/* Describe all exceptions.  */
-
-enum errors {
-  GDB_NO_ERROR,
-
-  /* Any generic error, the corresponding text is in
-     exception.message.  */
-  GENERIC_ERROR,
-
-  /* Something requested was not found.  */
-  NOT_FOUND_ERROR,
-
-  /* Thread library lacks support necessary for finding thread local
-     storage.  */
-  TLS_NO_LIBRARY_SUPPORT_ERROR,
-
-  /* Load module not found while attempting to find thread local storage.  */
-  TLS_LOAD_MODULE_NOT_FOUND_ERROR,
-
-  /* Thread local storage has not been allocated yet.  */
-  TLS_NOT_ALLOCATED_YET_ERROR,
-
-  /* Something else went wrong while attempting to find thread local
-     storage.  The ``struct gdb_exception'' message field provides
-     more detail.  */
-  TLS_GENERIC_ERROR,
-
-  /* Problem parsing an XML document.  */
-  XML_PARSE_ERROR,
-
-  /* Error accessing memory.  */
-  MEMORY_ERROR,
-
-  /* Value not available.  E.g., a register was not collected in a
-     traceframe.  */
-  NOT_AVAILABLE_ERROR,
-
-  /* Value was optimized out.  Note: if the value was a register, this
-     means the register was not saved in the frame.  */
-  OPTIMIZED_OUT_ERROR,
-
-  /* DW_OP_entry_value resolving failed.  */
-  NO_ENTRY_VALUE_ERROR,
-
-  /* Target throwing an error has been closed.  Current command should be
-     aborted as the inferior state is no longer valid.  */
-  TARGET_CLOSE_ERROR,
-
-  /* An undefined command was executed.  */
-  UNDEFINED_COMMAND_ERROR,
-
-  /* Requested feature, method, mechanism, etc. is not supported.  */
-  NOT_SUPPORTED_ERROR,
-
-  /* The number of candidates generated during line completion has
-     reached the user's specified limit.  This isn't an error, this exception
-     is used to halt searching for more completions, but for consistency
-     "_ERROR" is appended to the name.  */
-  MAX_COMPLETIONS_REACHED_ERROR,
-
-  /* Add more errors here.  */
-  NR_ERRORS
-};
-
-struct gdb_exception
-{
-  gdb_exception ()
-    : reason ((enum return_reason) 0),
-      error (GDB_NO_ERROR)
-  {
-  }
-
-  gdb_exception (enum return_reason r, enum errors e)
-    : reason (r),
-      error (e)
-  {
-  }
-
-  gdb_exception (enum return_reason r, enum errors e,
-		 const char *fmt, va_list ap)
-    ATTRIBUTE_PRINTF (4, 0)
-    : reason (r),
-      error (e),
-      message (std::make_shared<std::string> (string_vprintf (fmt, ap)))
-  {
-  }
-
-  /* The move constructor exists so that we can mark it "noexcept",
-     which is a good practice for any sort of exception object.  */
-  explicit gdb_exception (gdb_exception &&other) noexcept = default;
-
-  /* The copy constructor exists so that we can mark it "noexcept",
-     which is a good practice for any sort of exception object.  */
-  gdb_exception (const gdb_exception &other) noexcept
-    : reason (other.reason),
-      error (other.error),
-      message (other.message)
-  {
-  }
-
-  /* The assignment operator exists so that we can mark it "noexcept",
-     which is a good practice for any sort of exception object.  */
-  gdb_exception &operator= (const gdb_exception &other) noexcept
-  {
-    reason = other.reason;
-    error = other.error;
-    message = other.message;
-    return *this;
-  }
-
-  gdb_exception &operator= (gdb_exception &&other) noexcept = default;
-
-  /* Return the contents of the exception message, as a C string.  The
-     string remains owned by the exception object.  */
-  const char *what () const noexcept
-  {
-    return message->c_str ();
-  }
-
-  enum return_reason reason;
-  enum errors error;
-  std::shared_ptr<std::string> message;
-};
-
-/* Functions to drive the sjlj-based exceptions state machine.  Though
-   declared here by necessity, these functions should be considered
-   internal to the exceptions subsystem and not used other than via
-   the TRY/CATCH (or TRY_SJLJ/CATCH_SJLJ) macros defined below.  */
-
-extern jmp_buf *exceptions_state_mc_init (void);
-extern int exceptions_state_mc_action_iter (void);
-extern int exceptions_state_mc_action_iter_1 (void);
-extern int exceptions_state_mc_catch (struct gdb_exception *, int);
-
-/* Macro to wrap up standard try/catch behavior.
-
-   The double loop lets us correctly handle code "break"ing out of the
-   try catch block.  (It works as the "break" only exits the inner
-   "while" loop, the outer for loop detects this handling it
-   correctly.)  Of course "return" and "goto" are not so lucky.
-
-   For instance:
-
-   *INDENT-OFF*
-
-   TRY_SJLJ
-     {
-     }
-   CATCH_SJLJ (e, RETURN_MASK_ERROR)
-     {
-       switch (e.reason)
-         {
-           case RETURN_ERROR: ...
-         }
-     }
-   END_CATCH_SJLJ
-
-   The SJLJ variants are needed in some cases where gdb exceptions
-   need to cross third-party library code compiled without exceptions
-   support (e.g., readline).  */
-
-#define TRY_SJLJ \
-     { \
-       jmp_buf *buf = \
-	 exceptions_state_mc_init (); \
-       setjmp (*buf); \
-     } \
-     while (exceptions_state_mc_action_iter ()) \
-       while (exceptions_state_mc_action_iter_1 ())
-
-#define CATCH_SJLJ(EXCEPTION, MASK)				\
-  {							\
-    struct gdb_exception EXCEPTION;				\
-    if (exceptions_state_mc_catch (&(EXCEPTION), MASK))
-
-#define END_CATCH_SJLJ				\
-  }
-
-/* The exception types client code may catch.  They're just shims
-   around gdb_exception that add nothing but type info.  Which is used
-   is selected depending on the MASK argument passed to CATCH.  */
-
-struct gdb_exception_error : public gdb_exception
-{
-  gdb_exception_error (enum errors e, const char *fmt, va_list ap)
-    ATTRIBUTE_PRINTF (3, 0)
-    : gdb_exception (RETURN_ERROR, e, fmt, ap)
-  {
-  }
-
-  explicit gdb_exception_error (gdb_exception &&ex) noexcept
-    : gdb_exception (std::move (ex))
-  {
-    gdb_assert (ex.reason == RETURN_ERROR);
-  }
-};
-
-struct gdb_exception_quit : public gdb_exception
-{
-  gdb_exception_quit (const char *fmt, va_list ap)
-    ATTRIBUTE_PRINTF (2, 0)
-    : gdb_exception (RETURN_QUIT, GDB_NO_ERROR, fmt, ap)
-  {
-  }
-
-  explicit gdb_exception_quit (gdb_exception &&ex) noexcept
-    : gdb_exception (std::move (ex))
-  {
-    gdb_assert (ex.reason == RETURN_QUIT);
-  }
-};
-
-/* An exception type that inherits from both std::bad_alloc and a gdb
-   exception.  This is necessary because operator new can only throw
-   std::bad_alloc, and OTOH, we want exceptions thrown due to memory
-   allocation error to be caught by all the CATCH/RETURN_MASK_ALL
-   spread around the codebase.  */
-
-struct gdb_quit_bad_alloc
-  : public gdb_exception_quit,
-    public std::bad_alloc
-{
-  explicit gdb_quit_bad_alloc (gdb_exception &&ex) noexcept
-    : gdb_exception_quit (std::move (ex)),
-      std::bad_alloc ()
-  {
-  }
-};
-
-/* *INDENT-ON* */
-
-/* Throw an exception (as described by "struct gdb_exception"),
-   landing in the inner most containing exception handler established
-   using TRY/CATCH.  */
-extern void throw_exception (gdb_exception &&exception)
-     ATTRIBUTE_NORETURN;
-
-/* Throw an exception by executing a LONG JUMP to the inner most
-   containing exception handler established using TRY_SJLJ.  Necessary
-   in some cases where we need to throw GDB exceptions across
-   third-party library code (e.g., readline).  */
-extern void throw_exception_sjlj (const struct gdb_exception &exception)
-     ATTRIBUTE_NORETURN;
-
-/* Convenience wrappers around throw_exception that throw GDB
-   errors.  */
-extern void throw_verror (enum errors, const char *fmt, va_list ap)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 0);
-extern void throw_vquit (const char *fmt, va_list ap)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
-extern void throw_error (enum errors error, const char *fmt, ...)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
-extern void throw_quit (const char *fmt, ...)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
-
-#endif /* COMMON_COMMON_EXCEPTIONS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-gdbthread.h ./gdb/gdbsupport/common-gdbthread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-gdbthread.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-gdbthread.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-/* Common multi-process/thread control defs for GDB and gdbserver.
-   Copyright (C) 1987-2020 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 COMMON_COMMON_GDBTHREAD_H
-#define COMMON_COMMON_GDBTHREAD_H
-
-/* Switch from one thread to another.  */
-extern void switch_to_thread (ptid_t ptid);
-
-#endif /* COMMON_COMMON_GDBTHREAD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-inferior.c ./gdb/gdbsupport/common-inferior.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-inferior.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-inferior.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,26 +0,0 @@
-/* Functions to deal with the inferior being executed on GDB or
-   GDBserver.
-
-   Copyright (C) 2019-2020 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 "gdbsupport/common-inferior.h"
-
-/* See common-inferior.h.  */
-
-bool startup_with_shell = true;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-inferior.h ./gdb/gdbsupport/common-inferior.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-inferior.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-inferior.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,61 +0,0 @@
-/* Functions to deal with the inferior being executed on GDB or
-   GDBserver.
-
-   Copyright (C) 1986-2020 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 COMMON_COMMON_INFERIOR_H
-#define COMMON_COMMON_INFERIOR_H
-
-/* Return the exec wrapper to be used when starting the inferior, or NULL
-   otherwise.  */
-extern const char *get_exec_wrapper ();
-
-/* Return the name of the executable file as a string.
-   ERR nonzero means get error if there is none specified;
-   otherwise return 0 in that case.  */
-extern char *get_exec_file (int err);
-
-/* Return the inferior's current working directory.  If nothing has
-   been set, then return NULL.  */
-extern const char *get_inferior_cwd ();
-
-/* Set the inferior current working directory.  If CWD is NULL, unset
-   the directory.  */
-extern void set_inferior_cwd (const char *cwd);
-
-/* Whether to start up the debuggee under a shell.
-
-   If startup-with-shell is set, GDB's "run" will attempt to start up
-   the debuggee under a shell.  This also happens when using GDBserver
-   under extended remote mode.
-
-   This is in order for argument-expansion to occur.  E.g.,
-
-   (gdb) run *
-
-   The "*" gets expanded by the shell into a list of files.
-
-   While this is a nice feature, it may be handy to bypass the shell
-   in some cases.  To disable this feature, do "set startup-with-shell
-   false".
-
-   The catch-exec traps expected during start-up will be one more if
-   the target is started up with a shell.  */
-extern bool startup_with_shell;
-
-#endif /* COMMON_COMMON_INFERIOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common.m4 ./gdb/gdbsupport/common.m4
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common.m4	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common.m4	1970-01-01 00:00:00.000000000 +0000
@@ -1,81 +0,0 @@
-dnl Autoconf configure snippets for common.
-dnl Copyright (C) 1995-2020 Free Software Foundation, Inc.
-dnl
-dnl This file is part of GDB.
-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 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.  If not, see <http://www.gnu.org/licenses/>.
-
-dnl Invoke configury needed by the files in 'common'.
-AC_DEFUN([GDB_AC_COMMON], [
-  AC_HEADER_STDC
-  AC_FUNC_ALLOCA
-
-  dnl Note that this requires codeset.m4, which is included
-  dnl by the users of common.m4.
-  AM_LANGINFO_CODESET
-
-  AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl
-		   sys/resource.h sys/socket.h dnl
-		   sys/un.h sys/wait.h dnl
-		   thread_db.h wait.h dnl
-		   termios.h dnl
-		   dlfcn.h)
-
-  AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 socketpair sigaction \
-		  sigprocmask])
-
-  AC_CHECK_DECLS([strstr])
-
-  # Check for std::thread.  This does not work on some platforms, like
-  # mingw and DJGPP.
-  AC_LANG_PUSH([C++])
-  AX_PTHREAD([threads=yes], [threads=no])
-  if test "$threads" = "yes"; then
-    save_LIBS="$LIBS"
-    LIBS="$PTHREAD_LIBS $LIBS"
-    save_CXXFLAGS="$CXXFLAGS"
-    CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
-    AC_CACHE_CHECK([for std::thread],
-		   gdb_cv_cxx_std_thread,
-		   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
-    [[#include <thread>
-      void callback() { }]],
-    [[std::thread t(callback);]])],
-				  gdb_cv_cxx_std_thread=yes,
-				  gdb_cv_cxx_std_thread=no)])
-
-    # This check must be here, while LIBS includes any necessary
-    # threading library.
-    AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
-
-    LIBS="$save_LIBS"
-    CXXFLAGS="$save_CXXFLAGS"
-  fi
-  if test "$gdb_cv_cxx_std_thread" = "yes"; then
-    AC_DEFINE(CXX_STD_THREAD, 1,
-	      [Define to 1 if std::thread works.])
-  fi
-  AC_LANG_POP
-
-  dnl Check if sigsetjmp is available.  Using AC_CHECK_FUNCS won't
-  dnl do since sigsetjmp might only be defined as a macro.
-AC_CACHE_CHECK([for sigsetjmp], gdb_cv_func_sigsetjmp,
-[AC_TRY_COMPILE([
-#include <setjmp.h>
-], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);],
-gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)])
-if test "$gdb_cv_func_sigsetjmp" = "yes"; then
-  AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
-fi
-])
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-regcache.c ./gdb/gdbsupport/common-regcache.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-regcache.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-regcache.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-/* Cache and manage the values of registers for GDB, the GNU debugger.
-
-   Copyright (C) 2015-2020 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 "common-defs.h"
-#include "common-regcache.h"
-
-/* Return the register's value or throw if it's not available.  */
-
-ULONGEST
-regcache_raw_get_unsigned (struct regcache *regcache, int regnum)
-{
-  ULONGEST value;
-  enum register_status status;
-
-  status = regcache_raw_read_unsigned (regcache, regnum, &value);
-  if (status == REG_UNAVAILABLE)
-    throw_error (NOT_AVAILABLE_ERROR,
-		 _("Register %d is not available"), regnum);
-  return value;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-regcache.h ./gdb/gdbsupport/common-regcache.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-regcache.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-regcache.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,85 +0,0 @@
-/* Cache and manage the values of registers
-
-   Copyright (C) 2014-2020 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 COMMON_COMMON_REGCACHE_H
-#define COMMON_COMMON_REGCACHE_H
-
-/* This header is a stopgap until we have an independent regcache.  */
-
-enum register_status : signed char
-  {
-    /* The register value is not in the cache, and we don't know yet
-       whether it's available in the target (or traceframe).  */
-    REG_UNKNOWN = 0,
-
-    /* The register value is valid and cached.  */
-    REG_VALID = 1,
-
-    /* The register value is unavailable.  E.g., we're inspecting a
-       traceframe, and this register wasn't collected.  Note that this
-       is different a different "unavailable" from saying the register
-       does not exist in the target's architecture --- in that case,
-       the target should have given us a target description that does
-       not include the register in the first place.  */
-    REG_UNAVAILABLE = -1
-  };
-
-/* Return a pointer to the register cache associated with the
-   thread specified by PTID.  This function must be provided by
-   the client.  */
-
-extern struct regcache *get_thread_regcache_for_ptid (ptid_t ptid);
-
-/* Return the size of register numbered N in REGCACHE.  This function
-   must be provided by the client.  */
-
-extern int regcache_register_size (const struct regcache *regcache, int n);
-
-/* Read the PC register.  This function must be provided by the
-   client.  */
-
-extern CORE_ADDR regcache_read_pc (struct regcache *regcache);
-
-/* Read a raw register into a unsigned integer.  */
-extern enum register_status regcache_raw_read_unsigned
-  (struct regcache *regcache, int regnum, ULONGEST *val);
-
-ULONGEST regcache_raw_get_unsigned (struct regcache *regcache, int regnum);
-
-struct reg_buffer_common
-{
-  virtual ~reg_buffer_common () = default;
-
-  /* Get the availability status of the value of register REGNUM in this
-     buffer.  */
-  virtual register_status get_register_status (int regnum) const = 0;
-
-  /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE.  */
-  virtual void raw_supply (int regnum, const void *buf) = 0;
-
-  /* Collect register REGNUM from REGCACHE and store its contents in BUF.  */
-  virtual void raw_collect (int regnum, void *buf) const = 0;
-
-  /* Compare the contents of the register stored in the regcache (ignoring the
-     first OFFSET bytes) to the contents of BUF (without any offset).  Returns
-     true if the same.  */
-  virtual bool raw_compare (int regnum, const void *buf, int offset) const = 0;
-};
-
-#endif /* COMMON_COMMON_REGCACHE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-types.h ./gdb/gdbsupport/common-types.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-types.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-types.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,66 +0,0 @@
-/* Declarations for common types.
-
-   Copyright (C) 1986-2020 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 COMMON_COMMON_TYPES_H
-#define COMMON_COMMON_TYPES_H
-
-#ifdef GDBSERVER
-
-/* * A byte from the program being debugged.  */
-typedef unsigned char gdb_byte;
-
-typedef unsigned long long CORE_ADDR;
-
-typedef long long LONGEST;
-typedef unsigned long long ULONGEST;
-
-#else /* GDBSERVER */
-
-#include "bfd.h"
-
-/* * A byte from the program being debugged.  */
-typedef bfd_byte gdb_byte;
-
-/* * An address in the program being debugged.  Host byte order.  */
-typedef bfd_vma CORE_ADDR;
-
-/* This is to make sure that LONGEST is at least as big as CORE_ADDR.  */
-
-#ifdef BFD64
-
-typedef BFD_HOST_64_BIT LONGEST;
-typedef BFD_HOST_U_64_BIT ULONGEST;
-
-#else /* No BFD64 */
-
-typedef long long LONGEST;
-typedef unsigned long long ULONGEST;
-
-#endif /* No BFD64 */
-#endif /* GDBSERVER */
-
-/* * The largest CORE_ADDR value.  */
-#define CORE_ADDR_MAX (~(CORE_ADDR) 0)
-
-/* * The largest ULONGEST value.  */
-#define ULONGEST_MAX (~(ULONGEST) 0)
-
-enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 };
-
-#endif /* COMMON_COMMON_TYPES_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-utils.c ./gdb/gdbsupport/common-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-utils.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,417 +0,0 @@
-/* Shared general utility routines for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "common-utils.h"
-#include "host-defs.h"
-#include <ctype.h>
-
-void *
-xzalloc (size_t size)
-{
-  return xcalloc (1, size);
-}
-
-/* Like asprintf/vasprintf but get an internal_error if the call
-   fails. */
-
-char *
-xstrprintf (const char *format, ...)
-{
-  char *ret;
-  va_list args;
-
-  va_start (args, format);
-  ret = xstrvprintf (format, args);
-  va_end (args);
-  return ret;
-}
-
-char *
-xstrvprintf (const char *format, va_list ap)
-{
-  char *ret = NULL;
-  int status = vasprintf (&ret, format, ap);
-
-  /* NULL is returned when there was a memory allocation problem, or
-     any other error (for instance, a bad format string).  A negative
-     status (the printed length) with a non-NULL buffer should never
-     happen, but just to be sure.  */
-  if (ret == NULL || status < 0)
-    internal_error (__FILE__, __LINE__, _("vasprintf call failed"));
-  return ret;
-}
-
-int
-xsnprintf (char *str, size_t size, const char *format, ...)
-{
-  va_list args;
-  int ret;
-
-  va_start (args, format);
-  ret = vsnprintf (str, size, format, args);
-  gdb_assert (ret < size);
-  va_end (args);
-
-  return ret;
-}
-
-/* See documentation in common-utils.h.  */
-
-std::string
-string_printf (const char* fmt, ...)
-{
-  va_list vp;
-  int size;
-
-  va_start (vp, fmt);
-  size = vsnprintf (NULL, 0, fmt, vp);
-  va_end (vp);
-
-  std::string str (size, '\0');
-
-  /* C++11 and later guarantee std::string uses contiguous memory and
-     always includes the terminating '\0'.  */
-  va_start (vp, fmt);
-  vsprintf (&str[0], fmt, vp);
-  va_end (vp);
-
-  return str;
-}
-
-/* See documentation in common-utils.h.  */
-
-std::string
-string_vprintf (const char* fmt, va_list args)
-{
-  va_list vp;
-  size_t size;
-
-  va_copy (vp, args);
-  size = vsnprintf (NULL, 0, fmt, vp);
-  va_end (vp);
-
-  std::string str (size, '\0');
-
-  /* C++11 and later guarantee std::string uses contiguous memory and
-     always includes the terminating '\0'.  */
-  vsprintf (&str[0], fmt, args);
-
-  return str;
-}
-
-
-/* See documentation in common-utils.h.  */
-
-void
-string_appendf (std::string &str, const char *fmt, ...)
-{
-  va_list vp;
-
-  va_start (vp, fmt);
-  string_vappendf (str, fmt, vp);
-  va_end (vp);
-}
-
-
-/* See documentation in common-utils.h.  */
-
-void
-string_vappendf (std::string &str, const char *fmt, va_list args)
-{
-  va_list vp;
-  int grow_size;
-
-  va_copy (vp, args);
-  grow_size = vsnprintf (NULL, 0, fmt, vp);
-  va_end (vp);
-
-  size_t curr_size = str.size ();
-  str.resize (curr_size + grow_size);
-
-  /* C++11 and later guarantee std::string uses contiguous memory and
-     always includes the terminating '\0'.  */
-  vsprintf (&str[curr_size], fmt, args);
-}
-
-char *
-savestring (const char *ptr, size_t len)
-{
-  char *p = (char *) xmalloc (len + 1);
-
-  memcpy (p, ptr, len);
-  p[len] = 0;
-  return p;
-}
-
-/* See documentation in common-utils.h.  */
-
-std::string
-extract_string_maybe_quoted (const char **arg)
-{
-  bool squote = false;
-  bool dquote = false;
-  bool bsquote = false;
-  std::string result;
-  const char *p = *arg;
-
-  /* Find the start of the argument.  */
-  p = skip_spaces (p);
-
-  /* Parse p similarly to gdb_argv buildargv function.  */
-  while (*p != '\0')
-    {
-      if (isspace (*p) && !squote && !dquote && !bsquote)
-	break;
-      else
-	{
-	  if (bsquote)
-	    {
-	      bsquote = false;
-	      result += *p;
-	    }
-	  else if (*p == '\\')
-	    bsquote = true;
-	  else if (squote)
-	    {
-	      if (*p == '\'')
-		squote = false;
-	      else
-		result += *p;
-	    }
-	  else if (dquote)
-	    {
-	      if (*p == '"')
-		dquote = false;
-	      else
-		result += *p;
-	    }
-	  else
-	    {
-	      if (*p == '\'')
-		squote = true;
-	      else if (*p == '"')
-		dquote = true;
-	      else
-		result += *p;
-	    }
-	  p++;
-	}
-    }
-
-  *arg = p;
-  return result;
-}
-
-/* The bit offset of the highest byte in a ULONGEST, for overflow
-   checking.  */
-
-#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
-
-/* True (non-zero) iff DIGIT is a valid digit in radix BASE,
-   where 2 <= BASE <= 36.  */
-
-static int
-is_digit_in_base (unsigned char digit, int base)
-{
-  if (!isalnum (digit))
-    return 0;
-  if (base <= 10)
-    return (isdigit (digit) && digit < base + '0');
-  else
-    return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
-}
-
-static int
-digit_to_int (unsigned char c)
-{
-  if (isdigit (c))
-    return c - '0';
-  else
-    return tolower (c) - 'a' + 10;
-}
-
-/* As for strtoul, but for ULONGEST results.  */
-
-ULONGEST
-strtoulst (const char *num, const char **trailer, int base)
-{
-  unsigned int high_part;
-  ULONGEST result;
-  int minus = 0;
-  int i = 0;
-
-  /* Skip leading whitespace.  */
-  while (isspace (num[i]))
-    i++;
-
-  /* Handle prefixes.  */
-  if (num[i] == '+')
-    i++;
-  else if (num[i] == '-')
-    {
-      minus = 1;
-      i++;
-    }
-
-  if (base == 0 || base == 16)
-    {
-      if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
-	{
-	  i += 2;
-	  if (base == 0)
-	    base = 16;
-	}
-    }
-
-  if (base == 0 && num[i] == '0')
-    base = 8;
-
-  if (base == 0)
-    base = 10;
-
-  if (base < 2 || base > 36)
-    {
-      errno = EINVAL;
-      return 0;
-    }
-
-  result = high_part = 0;
-  for (; is_digit_in_base (num[i], base); i += 1)
-    {
-      result = result * base + digit_to_int (num[i]);
-      high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
-      result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
-      if (high_part > 0xff)
-	{
-	  errno = ERANGE;
-	  result = ~ (ULONGEST) 0;
-	  high_part = 0;
-	  minus = 0;
-	  break;
-	}
-    }
-
-  if (trailer != NULL)
-    *trailer = &num[i];
-
-  result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
-  if (minus)
-    return -result;
-  else
-    return result;
-}
-
-/* See documentation in common-utils.h.  */
-
-char *
-skip_spaces (char *chp)
-{
-  if (chp == NULL)
-    return NULL;
-  while (*chp && isspace (*chp))
-    chp++;
-  return chp;
-}
-
-/* A const-correct version of the above.  */
-
-const char *
-skip_spaces (const char *chp)
-{
-  if (chp == NULL)
-    return NULL;
-  while (*chp && isspace (*chp))
-    chp++;
-  return chp;
-}
-
-/* See documentation in common-utils.h.  */
-
-const char *
-skip_to_space (const char *chp)
-{
-  if (chp == NULL)
-    return NULL;
-  while (*chp && !isspace (*chp))
-    chp++;
-  return chp;
-}
-
-/* See documentation in common-utils.h.  */
-
-char *
-skip_to_space (char *chp)
-{
-  return (char *) skip_to_space ((const char *) chp);
-}
-
-/* See gdbsupport/common-utils.h.  */
-
-void
-free_vector_argv (std::vector<char *> &v)
-{
-  for (char *el : v)
-    xfree (el);
-
-  v.clear ();
-}
-
-/* See gdbsupport/common-utils.h.  */
-
-std::string
-stringify_argv (const std::vector<char *> &args)
-{
-  std::string ret;
-
-  if (!args.empty () && args[0] != NULL)
-    {
-      for (auto s : args)
-	if (s != NULL)
-	  {
-	    ret += s;
-	    ret += ' ';
-	  }
-
-      /* Erase the last whitespace.  */
-      ret.erase (ret.end () - 1);
-    }
-
-  return ret;
-}
-
-/* See gdbsupport/common-utils.h.  */
-
-ULONGEST
-align_up (ULONGEST v, int n)
-{
-  /* Check that N is really a power of two.  */
-  gdb_assert (n && (n & (n-1)) == 0);
-  return (v + n - 1) & -n;
-}
-
-/* See gdbsupport/common-utils.h.  */
-
-ULONGEST
-align_down (ULONGEST v, int n)
-{
-  /* Check that N is really a power of two.  */
-  gdb_assert (n && (n & (n-1)) == 0);
-  return (v & -n);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-utils.h ./gdb/gdbsupport/common-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/common-utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/common-utils.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,202 +0,0 @@
-/* Shared general utility routines for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 COMMON_COMMON_UTILS_H
-#define COMMON_COMMON_UTILS_H
-
-#include <string>
-#include <vector>
-
-#include "poison.h"
-
-/* If possible, define FUNCTION_NAME, a macro containing the name of
-   the function being defined.  Since this macro may not always be
-   defined, all uses must be protected by appropriate macro definition
-   checks (Eg: "#ifdef FUNCTION_NAME").
-
-   Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
-   which contains the name of the function currently being defined.
-   This is broken in G++ before version 2.6.
-   C9x has a similar variable called __func__, but prefer the GCC one since
-   it demangles C++ function names.  */
-#if (GCC_VERSION >= 2004)
-#define FUNCTION_NAME		__PRETTY_FUNCTION__
-#else
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
-#define FUNCTION_NAME		__func__  /* ARI: func */
-#endif
-#endif
-
-#include "gdb_string_view.h"
-
-/* xmalloc(), xrealloc() and xcalloc() have already been declared in
-   "libiberty.h". */
-
-/* Like xmalloc, but zero the memory.  */
-void *xzalloc (size_t);
-
-template <typename T>
-static void
-xfree (T *ptr)
-{
-  static_assert (IsFreeable<T>::value, "Trying to use xfree with a non-POD \
-data type.  Use operator delete instead.");
-
-  if (ptr != NULL)
-    free (ptr);		/* ARI: free */
-}
-
-
-/* Like asprintf and vasprintf, but return the string, throw an error
-   if no memory.  */
-char *xstrprintf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
-char *xstrvprintf (const char *format, va_list ap)
-     ATTRIBUTE_PRINTF (1, 0);
-
-/* Like snprintf, but throw an error if the output buffer is too small.  */
-int xsnprintf (char *str, size_t size, const char *format, ...)
-     ATTRIBUTE_PRINTF (3, 4);
-
-/* Returns a std::string built from a printf-style format string.  */
-std::string string_printf (const char* fmt, ...)
-  ATTRIBUTE_PRINTF (1, 2);
-
-/* Like string_printf, but takes a va_list.  */
-std::string string_vprintf (const char* fmt, va_list args)
-  ATTRIBUTE_PRINTF (1, 0);
-
-/* Like string_printf, but appends to DEST instead of returning a new
-   std::string.  */
-void string_appendf (std::string &dest, const char* fmt, ...)
-  ATTRIBUTE_PRINTF (2, 3);
-
-/* Like string_appendf, but takes a va_list.  */
-void string_vappendf (std::string &dest, const char* fmt, va_list args)
-  ATTRIBUTE_PRINTF (2, 0);
-
-/* Make a copy of the string at PTR with LEN characters
-   (and add a null character at the end in the copy).
-   Uses malloc to get the space.  Returns the address of the copy.  */
-
-char *savestring (const char *ptr, size_t len);
-
-/* Extract the next word from ARG.  The next word is defined as either,
-   everything up to the next space, or, if the next word starts with either
-   a single or double quote, then everything up to the closing quote.  The
-   enclosing quotes are not returned in the result string.  The pointer in
-   ARG is updated to point to the first character after the end of the
-   word, or, for quoted words, the first character after the closing
-   quote.  */
-
-std::string extract_string_maybe_quoted (const char **arg);
-
-/* The strerror() function can return NULL for errno values that are
-   out of range.  Provide a "safe" version that always returns a
-   printable string.  This version is also thread-safe.  */
-
-extern const char *safe_strerror (int);
-
-/* Return true if the start of STRING matches PATTERN, false otherwise.  */
-
-static inline bool
-startswith (const char *string, const char *pattern)
-{
-  return strncmp (string, pattern, strlen (pattern)) == 0;
-}
-
-/* Version of startswith that takes string_view arguments.  See comment
-   above.  */
-
-static inline bool
-startswith (gdb::string_view string, gdb::string_view pattern)
-{
-  return (string.length () >= pattern.length ()
-	  && strncmp (string.data (), pattern.data (), pattern.length ()) == 0);
-}
-
-ULONGEST strtoulst (const char *num, const char **trailer, int base);
-
-/* Skip leading whitespace characters in INP, returning an updated
-   pointer.  If INP is NULL, return NULL.  */
-
-extern char *skip_spaces (char *inp);
-
-/* A const-correct version of the above.  */
-
-extern const char *skip_spaces (const char *inp);
-
-/* Skip leading non-whitespace characters in INP, returning an updated
-   pointer.  If INP is NULL, return NULL.  */
-
-extern char *skip_to_space (char *inp);
-
-/* A const-correct version of the above.  */
-
-extern const char *skip_to_space (const char *inp);
-
-/* Assumes that V is an argv for a program, and iterates through
-   freeing all the elements.  */
-extern void free_vector_argv (std::vector<char *> &v);
-
-/* Given a vector of arguments ARGV, return a string equivalent to
-   joining all the arguments with a whitespace separating them.  */
-extern std::string stringify_argv (const std::vector<char *> &argv);
-
-/* Return true if VALUE is in [LOW, HIGH].  */
-
-template <typename T>
-static bool
-in_inclusive_range (T value, T low, T high)
-{
-  return value >= low && value <= high;
-}
-
-/* Ensure that V is aligned to an N byte boundary (B's assumed to be a
-   power of 2).  Round up/down when necessary.  Examples of correct
-   use include:
-
-    addr = align_up (addr, 8); -- VALUE needs 8 byte alignment
-    write_memory (addr, value, len);
-    addr += len;
-
-   and:
-
-    sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned
-    write_memory (sp, value, len);
-
-   Note that uses such as:
-
-    write_memory (addr, value, len);
-    addr += align_up (len, 8);
-
-   and:
-
-    sp -= align_up (len, 8);
-    write_memory (sp, value, len);
-
-   are typically not correct as they don't ensure that the address (SP
-   or ADDR) is correctly aligned (relying on previous alignment to
-   keep things right).  This is also why the methods are called
-   "align_..." instead of "round_..." as the latter reads better with
-   this incorrect coding style.  */
-
-extern ULONGEST align_up (ULONGEST v, int n);
-extern ULONGEST align_down (ULONGEST v, int n);
-
-#endif /* COMMON_COMMON_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/create-version.sh ./gdb/gdbsupport/create-version.sh
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/create-version.sh	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/create-version.sh	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 1989-2020 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/>.
-
-# Create version.c from version.in.
-# Usage:
-#    create-version.sh PATH-TO-GDB-SRCDIR HOST_ALIAS \
-#        TARGET_ALIAS OUTPUT-FILE-NAME
-
-srcdir="$1"
-host_alias="$2"
-target_alias="$3"
-output="$4"
-
-rm -f version.c-tmp $output version.tmp
-date=`sed -n -e 's/^.* BFD_VERSION_DATE \(.*\)$/\1/p' $srcdir/../bfd/version.h`
-sed -e "s/DATE/$date/" < $srcdir/version.in > version.tmp
-echo '#include "gdbsupport/version.h"' >> version.c-tmp
-echo 'const char version[] = "'"`sed q version.tmp`"'";' >> version.c-tmp
-echo 'const char host_name[] = "'"$host_alias"'";' >> version.c-tmp
-echo 'const char target_name[] = "'"$target_alias"'";' >> version.c-tmp
-mv version.c-tmp $output
-rm -f version.tmp
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/default-init-alloc.h ./gdb/gdbsupport/default-init-alloc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/default-init-alloc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/default-init-alloc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,67 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_DEFAULT_INIT_ALLOC_H
-#define COMMON_DEFAULT_INIT_ALLOC_H
-
-namespace gdb {
-
-/* An allocator that default constructs using default-initialization
-   rather than value-initialization.  The idea is to use this when you
-   don't want to default construct elements of containers of trivial
-   types using zero-initialization.  */
-
-/* Mostly as implementation convenience, this is implemented as an
-   adapter that given an allocator A, overrides 'A::construct()'.  'A'
-   defaults to std::allocator<T>.  */
-
-template<typename T, typename A = std::allocator<T>>
-class default_init_allocator : public A
-{
-public:
-  /* Pull in A's ctors.  */
-  using A::A;
-
-  /* Override rebind.  */
-  template<typename U>
-  struct rebind
-  {
-    /* A couple helpers just to make it a bit more readable.  */
-    typedef std::allocator_traits<A> traits_;
-    typedef typename traits_::template rebind_alloc<U> alloc_;
-
-    /* This is what we're after.  */
-    typedef default_init_allocator<U, alloc_> other;
-  };
-
-  /* Make the base allocator's construct method(s) visible.  */
-  using A::construct;
-
-  /* .. and provide an override/overload for the case of default
-     construction (i.e., no arguments).  This is where we construct
-     with default-init.  */
-  template <typename U>
-  void construct (U *ptr)
-    noexcept (std::is_nothrow_default_constructible<U>::value)
-  {
-    ::new ((void *) ptr) U; /* default-init */
-  }
-};
-
-} /* namespace gdb */
-
-#endif /* COMMON_DEFAULT_INIT_ALLOC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/def-vector.h ./gdb/gdbsupport/def-vector.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/def-vector.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/def-vector.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_DEF_VECTOR_H
-#define COMMON_DEF_VECTOR_H
-
-#include <vector>
-#include "gdbsupport/default-init-alloc.h"
-
-namespace gdb {
-
-/* A vector that uses an allocator that default constructs using
-   default-initialization rather than value-initialization.  The idea
-   is to use this when you don't want zero-initialization of elements
-   of vectors of trivial types.  E.g., byte buffers.  */
-
-template<typename T> using def_vector
-  = std::vector<T, gdb::default_init_allocator<T>>;
-
-} /* namespace gdb */
-
-#endif /* COMMON_DEF_VECTOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/enum-flags.h ./gdb/gdbsupport/enum-flags.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/enum-flags.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/enum-flags.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,221 +0,0 @@
-/* Copyright (C) 2015-2020 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 COMMON_ENUM_FLAGS_H
-#define COMMON_ENUM_FLAGS_H
-
-/* Type-safe wrapper for enum flags.  enum flags are enums where the
-   values are bits that are meant to be ORed together.
-
-   This allows writing code like the below, while with raw enums this
-   would fail to compile without casts to enum type at the assignments
-   to 'f':
-
-    enum some_flag
-    {
-       flag_val1 = 1 << 1,
-       flag_val2 = 1 << 2,
-       flag_val3 = 1 << 3,
-       flag_val4 = 1 << 4,
-    };
-    DEF_ENUM_FLAGS_TYPE(enum some_flag, some_flags);
-
-    some_flags f = flag_val1 | flag_val2;
-    f |= flag_val3;
-
-   It's also possible to assign literal zero to an enum flags variable
-   (meaning, no flags), dispensing adding an awkward explicit "no
-   value" value to the enumeration.  For example:
-
-    some_flags f = 0;
-    f |= flag_val3 | flag_val4;
-
-   Note that literal integers other than zero fail to compile:
-
-    some_flags f = 1; // error
-*/
-
-#ifdef __cplusplus
-
-/* Traits type used to prevent the global operator overloads from
-   instantiating for non-flag enums.  */
-template<typename T> struct enum_flags_type {};
-
-/* Use this to mark an enum as flags enum.  It defines FLAGS as
-   enum_flags wrapper class for ENUM, and enables the global operator
-   overloads for ENUM.  */
-#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type)	\
-  typedef enum_flags<enum_type> flags_type;		\
-  template<>						\
-  struct enum_flags_type<enum_type>			\
-  {							\
-    typedef enum_flags<enum_type> type;			\
-  }
-
-/* Until we can rely on std::underlying type being universally
-   available (C++11), roll our own for enums.  */
-template<int size, bool sign> class integer_for_size { typedef void type; };
-template<> struct integer_for_size<1, 0> { typedef uint8_t type; };
-template<> struct integer_for_size<2, 0> { typedef uint16_t type; };
-template<> struct integer_for_size<4, 0> { typedef uint32_t type; };
-template<> struct integer_for_size<8, 0> { typedef uint64_t type; };
-template<> struct integer_for_size<1, 1> { typedef int8_t type; };
-template<> struct integer_for_size<2, 1> { typedef int16_t type; };
-template<> struct integer_for_size<4, 1> { typedef int32_t type; };
-template<> struct integer_for_size<8, 1> { typedef int64_t type; };
-
-template<typename T>
-struct enum_underlying_type
-{
-  typedef typename
-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
-    type;
-};
-
-template <typename E>
-class enum_flags
-{
-public:
-  typedef E enum_type;
-  typedef typename enum_underlying_type<enum_type>::type underlying_type;
-
-private:
-  /* Private type used to support initializing flag types with zero:
-
-       foo_flags f = 0;
-
-     but not other integers:
-
-       foo_flags f = 1;
-
-     The way this works is that we define an implicit constructor that
-     takes a pointer to this private type.  Since nothing can
-     instantiate an object of this type, the only possible pointer to
-     pass to the constructor is the NULL pointer, or, zero.  */
-  struct zero_type;
-
-  underlying_type
-  underlying_value () const
-  {
-    return m_enum_value;
-  }
-
-public:
-  /* Allow default construction.  */
-  enum_flags ()
-    : m_enum_value ((enum_type) 0)
-  {}
-
-  /* If you get an error saying these two overloads are ambiguous,
-     then you tried to mix values of different enum types.  */
-  enum_flags (enum_type e)
-    : m_enum_value (e)
-  {}
-  enum_flags (struct enum_flags::zero_type *zero)
-    : m_enum_value ((enum_type) 0)
-  {}
-
-  enum_flags &operator&= (enum_type e)
-  {
-    m_enum_value = (enum_type) (underlying_value () & e);
-    return *this;
-  }
-  enum_flags &operator|= (enum_type e)
-  {
-    m_enum_value = (enum_type) (underlying_value () | e);
-    return *this;
-  }
-  enum_flags &operator^= (enum_type e)
-  {
-    m_enum_value = (enum_type) (underlying_value () ^ e);
-    return *this;
-  }
-
-  operator enum_type () const
-  {
-    return m_enum_value;
-  }
-
-  enum_flags operator& (enum_type e) const
-  {
-    return (enum_type) (underlying_value () & e);
-  }
-  enum_flags operator| (enum_type e) const
-  {
-    return (enum_type) (underlying_value () | e);
-  }
-  enum_flags operator^ (enum_type e) const
-  {
-    return (enum_type) (underlying_value () ^ e);
-  }
-  enum_flags operator~ () const
-  {
-    // We only the underlying type to be unsigned when actually using
-    // operator~ -- if it were not unsigned, undefined behavior could
-    // result.  However, asserting this in the class itself would
-    // require too many unnecessary changes to otherwise ok enum
-    // types.
-    gdb_static_assert (std::is_unsigned<underlying_type>::value);
-    return (enum_type) ~underlying_value ();
-  }
-
-private:
-  /* Stored as enum_type because GDB knows to print the bit flags
-     neatly if the enum values look like bit flags.  */
-  enum_type m_enum_value;
-};
-
-/* Global operator overloads.  */
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator& (enum_type e1, enum_type e2)
-{
-  return enum_flags<enum_type> (e1) & e2;
-}
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator| (enum_type e1, enum_type e2)
-{
-  return enum_flags<enum_type> (e1) | e2;
-}
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator^ (enum_type e1, enum_type e2)
-{
-  return enum_flags<enum_type> (e1) ^ e2;
-}
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator~ (enum_type e)
-{
-  return ~enum_flags<enum_type> (e);
-}
-
-#else /* __cplusplus */
-
-/* In C, the flags type is just a typedef for the enum type.  */
-
-#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \
-  typedef enum_type flags_type
-
-#endif /* __cplusplus */
-
-#endif /* COMMON_ENUM_FLAGS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/environ.c ./gdb/gdbsupport/environ.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/environ.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/environ.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,183 +0,0 @@
-/* environ.c -- library for manipulating environments for GNU.
-
-   Copyright (C) 1986-2020 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/>.  */
-
-#include "common-defs.h"
-#include "environ.h"
-#include <algorithm>
-#include <utility>
-
-/* See gdbsupport/environ.h.  */
-
-gdb_environ &
-gdb_environ::operator= (gdb_environ &&e)
-{
-  /* Are we self-moving?  */
-  if (&e == this)
-    return *this;
-
-  m_environ_vector = std::move (e.m_environ_vector);
-  m_user_set_env = std::move (e.m_user_set_env);
-  m_user_unset_env = std::move (e.m_user_unset_env);
-  e.m_environ_vector.clear ();
-  e.m_environ_vector.push_back (NULL);
-  e.m_user_set_env.clear ();
-  e.m_user_unset_env.clear ();
-  return *this;
-}
-
-/* See gdbsupport/environ.h.  */
-
-gdb_environ gdb_environ::from_host_environ ()
-{
-  extern char **environ;
-  gdb_environ e;
-
-  if (environ == NULL)
-    return e;
-
-  for (int i = 0; environ[i] != NULL; ++i)
-    {
-      /* Make sure we add the element before the last (NULL).  */
-      e.m_environ_vector.insert (e.m_environ_vector.end () - 1,
-				 xstrdup (environ[i]));
-    }
-
-  return e;
-}
-
-/* See gdbsupport/environ.h.  */
-
-void
-gdb_environ::clear ()
-{
-  for (char *v : m_environ_vector)
-    xfree (v);
-  m_environ_vector.clear ();
-  /* Always add the NULL element.  */
-  m_environ_vector.push_back (NULL);
-  m_user_set_env.clear ();
-  m_user_unset_env.clear ();
-}
-
-/* Helper function to check if STRING contains an environment variable
-   assignment of VAR, i.e., if STRING starts with 'VAR='.  Return true
-   if it contains, false otherwise.  */
-
-static bool
-match_var_in_string (const char *string, const char *var, size_t var_len)
-{
-  if (strncmp (string, var, var_len) == 0 && string[var_len] == '=')
-    return true;
-
-  return false;
-}
-
-/* See gdbsupport/environ.h.  */
-
-const char *
-gdb_environ::get (const char *var) const
-{
-  size_t len = strlen (var);
-
-  for (char *el : m_environ_vector)
-    if (el != NULL && match_var_in_string (el, var, len))
-      return &el[len + 1];
-
-  return NULL;
-}
-
-/* See gdbsupport/environ.h.  */
-
-void
-gdb_environ::set (const char *var, const char *value)
-{
-  char *fullvar = concat (var, "=", value, NULL);
-
-  /* We have to unset the variable in the vector if it exists.  */
-  unset (var, false);
-
-  /* Insert the element before the last one, which is always NULL.  */
-  m_environ_vector.insert (m_environ_vector.end () - 1, fullvar);
-
-  /* Mark this environment variable as having been set by the user.
-     This will be useful when we deal with setting environment
-     variables on the remote target.  */
-  m_user_set_env.insert (std::string (fullvar));
-
-  /* If this environment variable is marked as unset by the user, then
-     remove it from the list, because now the user wants to set
-     it.  */
-  m_user_unset_env.erase (std::string (var));
-}
-
-/* See gdbsupport/environ.h.  */
-
-void
-gdb_environ::unset (const char *var, bool update_unset_list)
-{
-  size_t len = strlen (var);
-  std::vector<char *>::iterator it_env;
-
-  /* We iterate until '.end () - 1' because the last element is
-     always NULL.  */
-  for (it_env = m_environ_vector.begin ();
-       it_env != m_environ_vector.end () - 1;
-       ++it_env)
-    if (match_var_in_string (*it_env, var, len))
-      break;
-
-  if (it_env != m_environ_vector.end () - 1)
-    {
-      m_user_set_env.erase (std::string (*it_env));
-      xfree (*it_env);
-
-      m_environ_vector.erase (it_env);
-    }
-
-  if (update_unset_list)
-    m_user_unset_env.insert (std::string (var));
-}
-
-/* See gdbsupport/environ.h.  */
-
-void
-gdb_environ::unset (const char *var)
-{
-  unset (var, true);
-}
-
-/* See gdbsupport/environ.h.  */
-
-char **
-gdb_environ::envp () const
-{
-  return const_cast<char **> (&m_environ_vector[0]);
-}
-
-/* See gdbsupport/environ.h.  */
-
-const std::set<std::string> &
-gdb_environ::user_set_env () const
-{
-  return m_user_set_env;
-}
-
-const std::set<std::string> &
-gdb_environ::user_unset_env () const
-{
-  return m_user_unset_env;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/environ.h ./gdb/gdbsupport/environ.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/environ.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/environ.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,103 +0,0 @@
-/* Header for environment manipulation library.
-   Copyright (C) 1989-2020 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/>.  */
-
-#ifndef COMMON_ENVIRON_H
-#define COMMON_ENVIRON_H
-
-#include <vector>
-#include <set>
-
-/* Class that represents the environment variables as seen by the
-   inferior.  */
-
-class gdb_environ
-{
-public:
-  /* Regular constructor and destructor.  */
-  gdb_environ ()
-  {
-    /* Make sure that the vector contains at least a NULL element.
-       If/when we add more variables to it, NULL will always be the
-       last element.  */
-    m_environ_vector.push_back (NULL);
-  }
-
-  ~gdb_environ ()
-  {
-    clear ();
-  }
-
-  /* Move constructor.  */
-  gdb_environ (gdb_environ &&e)
-    : m_environ_vector (std::move (e.m_environ_vector)),
-      m_user_set_env (std::move (e.m_user_set_env)),
-      m_user_unset_env (std::move (e.m_user_unset_env))
-  {
-    /* Make sure that the moved-from vector is left at a valid
-       state (only one NULL element).  */
-    e.m_environ_vector.clear ();
-    e.m_environ_vector.push_back (NULL);
-    e.m_user_set_env.clear ();
-    e.m_user_unset_env.clear ();
-  }
-
-  /* Move assignment.  */
-  gdb_environ &operator= (gdb_environ &&e);
-
-  /* Create a gdb_environ object using the host's environment
-     variables.  */
-  static gdb_environ from_host_environ ();
-
-  /* Clear the environment variables stored in the object.  */
-  void clear ();
-
-  /* Return the value in the environment for the variable VAR.  The
-     returned pointer is only valid as long as the gdb_environ object
-     is not modified.  */
-  const char *get (const char *var) const;
-
-  /* Store VAR=VALUE in the environment.  */
-  void set (const char *var, const char *value);
-
-  /* Unset VAR in environment.  */
-  void unset (const char *var);
-
-  /* Return the environment vector represented as a 'char **'.  */
-  char **envp () const;
-
-  /* Return the user-set environment vector.  */
-  const std::set<std::string> &user_set_env () const;
-
-  /* Return the user-unset environment vector.  */
-  const std::set<std::string> &user_unset_env () const;
-
-private:
-  /* Unset VAR in environment.  If UPDATE_UNSET_LIST is true, then
-     also update M_USER_UNSET_ENV to reflect the unsetting of the
-     environment variable.  */
-  void unset (const char *var, bool update_unset_list);
-
-  /* A vector containing the environment variables.  */
-  std::vector<char *> m_environ_vector;
-
-  /* The environment variables explicitly set by the user.  */
-  std::set<std::string> m_user_set_env;
-
-  /* The environment variables explicitly unset by the user.  */
-  std::set<std::string> m_user_unset_env;
-};
-
-#endif /* COMMON_ENVIRON_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/errors.c ./gdb/gdbsupport/errors.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/errors.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/errors.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,69 +0,0 @@
-/* Error reporting facilities.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "errors.h"
-
-/* See gdbsupport/errors.h.  */
-
-void
-warning (const char *fmt, ...)
-{
-  va_list ap;
-
-  va_start (ap, fmt);
-  vwarning (fmt, ap);
-  va_end (ap);
-}
-
-/* See gdbsupport/errors.h.  */
-
-void
-error (const char *fmt, ...)
-{
-  va_list ap;
-
-  va_start (ap, fmt);
-  verror (fmt, ap);
-  va_end (ap);
-}
-
-/* See gdbsupport/errors.h.  */
-
-void
-internal_error (const char *file, int line, const char *fmt, ...)
-{
-  va_list ap;
-
-  va_start (ap, fmt);
-  internal_verror (file, line, fmt, ap);
-  va_end (ap);
-}
-
-/* See gdbsupport/errors.h.  */
-
-void
-internal_warning (const char *file, int line, const char *fmt, ...)
-{
-  va_list ap;
-
-  va_start (ap, fmt);
-  internal_vwarning (file, line, fmt, ap);
-  va_end (ap);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/errors.h ./gdb/gdbsupport/errors.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/errors.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/errors.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,90 +0,0 @@
-/* Declarations for error-reporting facilities.
-
-   Copyright (C) 1986-2020 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 COMMON_ERRORS_H
-#define COMMON_ERRORS_H
-
-/* A problem was detected, but the requested operation can still
-   proceed.  A warning message is constructed using a printf- or
-   vprintf-style argument list.  The function "vwarning" must be
-   provided by the client.  */
-
-extern void warning (const char *fmt, ...)
-     ATTRIBUTE_PRINTF (1, 2);
-
-extern void vwarning (const char *fmt, va_list args)
-     ATTRIBUTE_PRINTF (1, 0);
-
-/* A non-predictable, non-fatal error was detected.  The requested
-   operation cannot proceed.  An error message is constructed using
-   a printf- or vprintf-style argument list.  These functions do not
-   return.  The function "verror" must be provided by the client.  */
-
-extern void error (const char *fmt, ...)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
-
-extern void verror (const char *fmt, va_list args)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
-
-/* An internal error was detected.  Internal errors indicate
-   programming errors such as assertion failures, as opposed to
-   more general errors beyond the application's control.  These
-   functions do not return.  An error message is constructed using
-   a printf- or vprintf-style argument list.  FILE and LINE
-   indicate the file and line number where the programming error
-   was detected.  The function "internal_verror" must be provided
-   by the client.  */
-
-extern void internal_error (const char *file, int line,
-			    const char *fmt, ...)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4);
-
-extern void internal_verror (const char *file, int line,
-			     const char *fmt, va_list args)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0);
-
-/* An internal problem was detected, but the requested operation can
-   still proceed.  Internal warnings indicate programming errors as
-   opposed to more general issues beyond the application's control.
-   A warning message is constructed using a printf- or vprintf-style
-   argument list.  The function "internal_vwarning" must be provided
-   by the client.  */
-
-extern void internal_warning (const char *file, int line,
-			      const char *fmt, ...)
-     ATTRIBUTE_PRINTF (3, 4);
-
-extern void internal_vwarning (const char *file, int line,
-			       const char *fmt, va_list args)
-     ATTRIBUTE_PRINTF (3, 0);
-
-
-/* Like "error", but the error message is constructed by combining
-   STRING with the system error message for errno.  This function does
-   not return.  This function must be provided by the client.  */
-
-extern void perror_with_name (const char *string) ATTRIBUTE_NORETURN;
-
-/* Call this function to handle memory allocation failures.  This
-   function does not return.  This function must be provided by the
-   client.  */
-
-extern void malloc_failure (long size) ATTRIBUTE_NORETURN;
-
-#endif /* COMMON_ERRORS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/fileio.c ./gdb/gdbsupport/fileio.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/fileio.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/fileio.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,255 +0,0 @@
-/* File-I/O functions for GDB, the GNU debugger.
-
-   Copyright (C) 2003-2020 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 "common-defs.h"
-#include "fileio.h"
-#include <sys/stat.h>
-#include <fcntl.h>
-
-/* See fileio.h.  */
-
-int
-host_to_fileio_error (int error)
-{
-  switch (error)
-    {
-      case EPERM:
-        return FILEIO_EPERM;
-      case ENOENT:
-        return FILEIO_ENOENT;
-      case EINTR:
-        return FILEIO_EINTR;
-      case EIO:
-        return FILEIO_EIO;
-      case EBADF:
-        return FILEIO_EBADF;
-      case EACCES:
-        return FILEIO_EACCES;
-      case EFAULT:
-        return FILEIO_EFAULT;
-      case EBUSY:
-        return FILEIO_EBUSY;
-      case EEXIST:
-        return FILEIO_EEXIST;
-      case ENODEV:
-        return FILEIO_ENODEV;
-      case ENOTDIR:
-        return FILEIO_ENOTDIR;
-      case EISDIR:
-        return FILEIO_EISDIR;
-      case EINVAL:
-        return FILEIO_EINVAL;
-      case ENFILE:
-        return FILEIO_ENFILE;
-      case EMFILE:
-        return FILEIO_EMFILE;
-      case EFBIG:
-        return FILEIO_EFBIG;
-      case ENOSPC:
-        return FILEIO_ENOSPC;
-      case ESPIPE:
-        return FILEIO_ESPIPE;
-      case EROFS:
-        return FILEIO_EROFS;
-      case ENOSYS:
-        return FILEIO_ENOSYS;
-      case ENAMETOOLONG:
-        return FILEIO_ENAMETOOLONG;
-    }
-  return FILEIO_EUNKNOWN;
-}
-
-/* See fileio.h.  */
-
-int
-fileio_to_host_openflags (int fileio_open_flags, int *open_flags_p)
-{
-  int open_flags = 0;
-
-  if (fileio_open_flags & ~FILEIO_O_SUPPORTED)
-    return -1;
-
-  if (fileio_open_flags & FILEIO_O_CREAT)
-    open_flags |= O_CREAT;
-  if (fileio_open_flags & FILEIO_O_EXCL)
-    open_flags |= O_EXCL;
-  if (fileio_open_flags & FILEIO_O_TRUNC)
-    open_flags |= O_TRUNC;
-  if (fileio_open_flags & FILEIO_O_APPEND)
-    open_flags |= O_APPEND;
-  if (fileio_open_flags & FILEIO_O_RDONLY)
-    open_flags |= O_RDONLY;
-  if (fileio_open_flags & FILEIO_O_WRONLY)
-    open_flags |= O_WRONLY;
-  if (fileio_open_flags & FILEIO_O_RDWR)
-    open_flags |= O_RDWR;
-  /* On systems supporting binary and text mode, always open files
-     in binary mode. */
-#ifdef O_BINARY
-  open_flags |= O_BINARY;
-#endif
-
-  *open_flags_p = open_flags;
-  return 0;
-}
-
-/* See fileio.h.  */
-
-int
-fileio_to_host_mode (int fileio_mode, mode_t *mode_p)
-{
-  mode_t mode = 0;
-
-  if (fileio_mode & ~FILEIO_S_SUPPORTED)
-    return -1;
-
-  if (fileio_mode & FILEIO_S_IFREG)
-    mode |= S_IFREG;
-  if (fileio_mode & FILEIO_S_IFDIR)
-    mode |= S_IFDIR;
-  if (fileio_mode & FILEIO_S_IFCHR)
-    mode |= S_IFCHR;
-  if (fileio_mode & FILEIO_S_IRUSR)
-    mode |= S_IRUSR;
-  if (fileio_mode & FILEIO_S_IWUSR)
-    mode |= S_IWUSR;
-  if (fileio_mode & FILEIO_S_IXUSR)
-    mode |= S_IXUSR;
-#ifdef S_IRGRP
-  if (fileio_mode & FILEIO_S_IRGRP)
-    mode |= S_IRGRP;
-#endif
-#ifdef S_IWGRP
-  if (fileio_mode & FILEIO_S_IWGRP)
-    mode |= S_IWGRP;
-#endif
-#ifdef S_IXGRP
-  if (fileio_mode & FILEIO_S_IXGRP)
-    mode |= S_IXGRP;
-#endif
-  if (fileio_mode & FILEIO_S_IROTH)
-    mode |= S_IROTH;
-#ifdef S_IWOTH
-  if (fileio_mode & FILEIO_S_IWOTH)
-    mode |= S_IWOTH;
-#endif
-#ifdef S_IXOTH
-  if (fileio_mode & FILEIO_S_IXOTH)
-    mode |= S_IXOTH;
-#endif
-
-  *mode_p = mode;
-  return 0;
-}
-
-/* Convert a host-format mode_t into a bitmask of File-I/O flags.  */
-
-static LONGEST
-fileio_mode_pack (mode_t mode)
-{
-  mode_t tmode = 0;
-
-  if (S_ISREG (mode))
-    tmode |= FILEIO_S_IFREG;
-  if (S_ISDIR (mode))
-    tmode |= FILEIO_S_IFDIR;
-  if (S_ISCHR (mode))
-    tmode |= FILEIO_S_IFCHR;
-  if (mode & S_IRUSR)
-    tmode |= FILEIO_S_IRUSR;
-  if (mode & S_IWUSR)
-    tmode |= FILEIO_S_IWUSR;
-  if (mode & S_IXUSR)
-    tmode |= FILEIO_S_IXUSR;
-#ifdef S_IRGRP
-  if (mode & S_IRGRP)
-    tmode |= FILEIO_S_IRGRP;
-#endif
-#ifdef S_IWGRP
-  if (mode & S_IWGRP)
-    tmode |= FILEIO_S_IWGRP;
-#endif
-#ifdef S_IXGRP
-  if (mode & S_IXGRP)
-    tmode |= FILEIO_S_IXGRP;
-#endif
-  if (mode & S_IROTH)
-    tmode |= FILEIO_S_IROTH;
-#ifdef S_IWOTH
-  if (mode & S_IWOTH)
-    tmode |= FILEIO_S_IWOTH;
-#endif
-#ifdef S_IXOTH
-  if (mode & S_IXOTH)
-    tmode |= FILEIO_S_IXOTH;
-#endif
-  return tmode;
-}
-
-/* Pack a host-format mode_t into an fio_mode_t.  */
-
-static void
-host_to_fileio_mode (mode_t num, fio_mode_t fnum)
-{
-  host_to_bigendian (fileio_mode_pack (num), (char *) fnum, 4);
-}
-
-/* Pack a host-format integer into an fio_ulong_t.  */
-
-static void
-host_to_fileio_ulong (LONGEST num, fio_ulong_t fnum)
-{
-  host_to_bigendian (num, (char *) fnum, 8);
-}
-
-/* See fileio.h.  */
-
-void
-host_to_fileio_stat (struct stat *st, struct fio_stat *fst)
-{
-  LONGEST blksize;
-
-  host_to_fileio_uint ((long) st->st_dev, fst->fst_dev);
-  host_to_fileio_uint ((long) st->st_ino, fst->fst_ino);
-  host_to_fileio_mode (st->st_mode, fst->fst_mode);
-  host_to_fileio_uint ((long) st->st_nlink, fst->fst_nlink);
-  host_to_fileio_uint ((long) st->st_uid, fst->fst_uid);
-  host_to_fileio_uint ((long) st->st_gid, fst->fst_gid);
-  host_to_fileio_uint ((long) st->st_rdev, fst->fst_rdev);
-  host_to_fileio_ulong ((LONGEST) st->st_size, fst->fst_size);
-#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
-  blksize = st->st_blksize;
-#else
-  blksize = 512;
-#endif
-  host_to_fileio_ulong (blksize, fst->fst_blksize);
-#if HAVE_STRUCT_STAT_ST_BLOCKS
-  host_to_fileio_ulong ((LONGEST) st->st_blocks, fst->fst_blocks);
-#else
-  /* FIXME: This is correct for DJGPP, but other systems that don't
-     have st_blocks, if any, might prefer 512 instead of st_blksize.
-     (eliz, 30-12-2003)  */
-  host_to_fileio_ulong (((LONGEST) st->st_size + blksize - 1)
-			/ blksize,
-			fst->fst_blocks);
-#endif
-  host_to_fileio_time (st->st_atime, fst->fst_atime);
-  host_to_fileio_time (st->st_mtime, fst->fst_mtime);
-  host_to_fileio_time (st->st_ctime, fst->fst_ctime);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/fileio.h ./gdb/gdbsupport/fileio.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/fileio.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/fileio.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,73 +0,0 @@
-/* File-I/O functions for GDB, the GNU debugger.
-
-   Copyright (C) 2003-2020 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 COMMON_FILEIO_H
-#define COMMON_FILEIO_H
-
-#include "gdb/fileio.h"
-#include <sys/stat.h>
-
-/* Convert a host-format errno value to a File-I/O error number.  */
-
-extern int host_to_fileio_error (int error);
-
-/* Convert File-I/O open flags FFLAGS to host format, storing
-   the result in *FLAGS.  Return 0 on success, -1 on error.  */
-
-extern int fileio_to_host_openflags (int fflags, int *flags);
-
-/* Convert File-I/O mode FMODE to host format, storing
-   the result in *MODE.  Return 0 on success, -1 on error.  */
-
-extern int fileio_to_host_mode (int fmode, mode_t *mode);
-
-/* Pack a host-format integer into a byte buffer in big-endian
-   format.  BYTES specifies the size of the integer to pack in
-   bytes.  */
-
-static inline void
-host_to_bigendian (LONGEST num, char *buf, int bytes)
-{
-  int i;
-
-  for (i = 0; i < bytes; ++i)
-    buf[i] = (num >> (8 * (bytes - i - 1))) & 0xff;
-}
-
-/* Pack a host-format integer into an fio_uint_t.  */
-
-static inline void
-host_to_fileio_uint (long num, fio_uint_t fnum)
-{
-  host_to_bigendian ((LONGEST) num, (char *) fnum, 4);
-}
-
-/* Pack a host-format time_t into an fio_time_t.  */
-
-static inline void
-host_to_fileio_time (time_t num, fio_time_t fnum)
-{
-  host_to_bigendian ((LONGEST) num, (char *) fnum, 4);
-}
-
-/* Pack a host-format struct stat into a struct fio_stat.  */
-
-extern void host_to_fileio_stat (struct stat *st, struct fio_stat *fst);
-
-#endif /* COMMON_FILEIO_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/filestuff.c ./gdb/gdbsupport/filestuff.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/filestuff.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/filestuff.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,503 +0,0 @@
-/* Low-level file-handling.
-   Copyright (C) 2012-2020 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 "common-defs.h"
-#include "filestuff.h"
-#include "gdb_vecs.h"
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <algorithm>
-
-#ifdef USE_WIN32API
-#include <winsock2.h>
-#include <windows.h>
-#define HAVE_SOCKETS 1
-#elif defined HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-/* Define HAVE_F_GETFD if we plan to use F_GETFD.  */
-#define HAVE_F_GETFD F_GETFD
-#define HAVE_SOCKETS 1
-#endif
-
-#ifdef HAVE_KINFO_GETFILE
-#include <sys/user.h>
-#include <libutil.h>
-#endif
-
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif /* HAVE_SYS_RESOURCE_H */
-
-#ifndef O_CLOEXEC
-#define O_CLOEXEC 0
-#endif
-
-#ifndef O_NOINHERIT
-#define O_NOINHERIT 0
-#endif
-
-#ifndef SOCK_CLOEXEC
-#define SOCK_CLOEXEC 0
-#endif
-
-
-
-#ifndef HAVE_FDWALK
-
-#include <dirent.h>
-
-/* Replacement for fdwalk, if the system doesn't define it.  Walks all
-   open file descriptors (though this implementation may walk closed
-   ones as well, depending on the host platform's capabilities) and
-   call FUNC with ARG.  If FUNC returns non-zero, stops immediately
-   and returns the same value.  Otherwise, returns zero when
-   finished.  */
-
-static int
-fdwalk (int (*func) (void *, int), void *arg)
-{
-  /* Checking __linux__ isn't great but it isn't clear what would be
-     better.  There doesn't seem to be a good way to check for this in
-     configure.  */
-#ifdef __linux__
-  DIR *dir;
-
-  dir = opendir ("/proc/self/fd");
-  if (dir != NULL)
-    {
-      struct dirent *entry;
-      int result = 0;
-
-      for (entry = readdir (dir); entry != NULL; entry = readdir (dir))
-	{
-	  long fd;
-	  char *tail;
-
-	  errno = 0;
-	  fd = strtol (entry->d_name, &tail, 10);
-	  if (*tail != '\0' || errno != 0)
-	    continue;
-	  if ((int) fd != fd)
-	    {
-	      /* What can we do here really?  */
-	      continue;
-	    }
-
-	  if (fd == dirfd (dir))
-	    continue;
-
-	  result = func (arg, fd);
-	  if (result != 0)
-	    break;
-	}
-
-      closedir (dir);
-      return result;
-    }
-  /* We may fall through to the next case.  */
-#endif
-#ifdef HAVE_KINFO_GETFILE
-  int nfd;
-  gdb::unique_xmalloc_ptr<struct kinfo_file[]> fdtbl
-    (kinfo_getfile (getpid (), &nfd));
-  if (fdtbl != NULL)
-    {
-      for (int i = 0; i < nfd; i++)
-	{
-	  if (fdtbl[i].kf_fd >= 0)
-	    {
-	      int result = func (arg, fdtbl[i].kf_fd);
-	      if (result != 0)
-		return result;
-	    }
-	}
-      return 0;
-    }
-  /* We may fall through to the next case.  */
-#endif
-
-  {
-    int max, fd;
-
-#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
-    struct rlimit rlim;
-
-    if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && rlim.rlim_max != RLIM_INFINITY)
-      max = rlim.rlim_max;
-    else
-#endif
-      {
-#ifdef _SC_OPEN_MAX
-	max = sysconf (_SC_OPEN_MAX);
-#else
-	/* Whoops.  */
-	return 0;
-#endif /* _SC_OPEN_MAX */
-      }
-
-    for (fd = 0; fd < max; ++fd)
-      {
-	struct stat sb;
-	int result;
-
-	/* Only call FUNC for open fds.  */
-	if (fstat (fd, &sb) == -1)
-	  continue;
-
-	result = func (arg, fd);
-	if (result != 0)
-	  return result;
-      }
-
-    return 0;
-  }
-}
-
-#endif /* HAVE_FDWALK */
-
-
-
-/* A vector holding all the fds open when notice_open_fds was called.  We
-   don't use a hashtab because we don't expect there to be many open fds.  */
-
-static std::vector<int> open_fds;
-
-/* An fdwalk callback function used by notice_open_fds.  It puts the
-   given file descriptor into the vec.  */
-
-static int
-do_mark_open_fd (void *ignore, int fd)
-{
-  open_fds.push_back (fd);
-  return 0;
-}
-
-/* See filestuff.h.  */
-
-void
-notice_open_fds (void)
-{
-  fdwalk (do_mark_open_fd, NULL);
-}
-
-/* See filestuff.h.  */
-
-void
-mark_fd_no_cloexec (int fd)
-{
-  do_mark_open_fd (NULL, fd);
-}
-
-/* See filestuff.h.  */
-
-void
-unmark_fd_no_cloexec (int fd)
-{
-  auto it = std::remove (open_fds.begin (), open_fds.end (), fd);
-
-  if (it != open_fds.end ())
-    open_fds.erase (it);
-  else
-    gdb_assert_not_reached (_("fd not found in open_fds"));
-}
-
-/* Helper function for close_most_fds that closes the file descriptor
-   if appropriate.  */
-
-static int
-do_close (void *ignore, int fd)
-{
-  for (int val : open_fds)
-    {
-      if (fd == val)
-	{
-	  /* Keep this one open.  */
-	  return 0;
-	}
-    }
-
-  close (fd);
-  return 0;
-}
-
-/* See filestuff.h.  */
-
-void
-close_most_fds (void)
-{
-  fdwalk (do_close, NULL);
-}
-
-
-
-/* This is a tri-state flag.  When zero it means we haven't yet tried
-   O_CLOEXEC.  When positive it means that O_CLOEXEC works on this
-   host.  When negative, it means that O_CLOEXEC doesn't work.  We
-   track this state because, while gdb might have been compiled
-   against a libc that supplies O_CLOEXEC, there is no guarantee that
-   the kernel supports it.  */
-
-static int trust_o_cloexec;
-
-/* Mark FD as close-on-exec, ignoring errors.  Update
-   TRUST_O_CLOEXEC.  */
-
-static void
-mark_cloexec (int fd)
-{
-#ifdef HAVE_F_GETFD
-  int old = fcntl (fd, F_GETFD, 0);
-
-  if (old != -1)
-    {
-      fcntl (fd, F_SETFD, old | FD_CLOEXEC);
-
-      if (trust_o_cloexec == 0)
-	{
-	  if ((old & FD_CLOEXEC) != 0)
-	    trust_o_cloexec = 1;
-	  else
-	    trust_o_cloexec = -1;
-	}
-    }
-#endif /* HAVE_F_GETFD */
-}
-
-/* Depending on TRUST_O_CLOEXEC, mark FD as close-on-exec.  */
-
-static void
-maybe_mark_cloexec (int fd)
-{
-  if (trust_o_cloexec <= 0)
-    mark_cloexec (fd);
-}
-
-#ifdef HAVE_SOCKETS
-
-/* Like maybe_mark_cloexec, but for callers that use SOCK_CLOEXEC.  */
-
-static void
-socket_mark_cloexec (int fd)
-{
-  if (SOCK_CLOEXEC == 0 || trust_o_cloexec <= 0)
-    mark_cloexec (fd);
-}
-
-#endif
-
-
-
-/* See filestuff.h.  */
-
-int
-gdb_open_cloexec (const char *filename, int flags, unsigned long mode)
-{
-  int fd = open (filename, flags | O_CLOEXEC, mode);
-
-  if (fd >= 0)
-    maybe_mark_cloexec (fd);
-
-  return fd;
-}
-
-/* See filestuff.h.  */
-
-gdb_file_up
-gdb_fopen_cloexec (const char *filename, const char *opentype)
-{
-  FILE *result;
-  /* Probe for "e" support once.  But, if we can tell the operating
-     system doesn't know about close on exec mode "e" without probing,
-     skip it.  E.g., the Windows runtime issues an "Invalid parameter
-     passed to C runtime function" OutputDebugString warning for
-     unknown modes.  Assume that if O_CLOEXEC is zero, then "e" isn't
-     supported.  On MinGW, O_CLOEXEC is an alias of O_NOINHERIT, and
-     "e" isn't supported.  */
-  static int fopen_e_ever_failed_einval =
-    O_CLOEXEC == 0 || O_CLOEXEC == O_NOINHERIT;
-
-  if (!fopen_e_ever_failed_einval)
-    {
-      char *copy;
-
-      copy = (char *) alloca (strlen (opentype) + 2);
-      strcpy (copy, opentype);
-      /* This is a glibc extension but we try it unconditionally on
-	 this path.  */
-      strcat (copy, "e");
-      result = fopen (filename, copy);
-
-      if (result == NULL && errno == EINVAL)
-	{
-	  result = fopen (filename, opentype);
-	  if (result != NULL)
-	    fopen_e_ever_failed_einval = 1;
-	}
-    }
-  else
-    result = fopen (filename, opentype);
-
-  if (result != NULL)
-    maybe_mark_cloexec (fileno (result));
-
-  return gdb_file_up (result);
-}
-
-#ifdef HAVE_SOCKETS
-/* See filestuff.h.  */
-
-int
-gdb_socketpair_cloexec (int domain, int style, int protocol,
-			int filedes[2])
-{
-#ifdef HAVE_SOCKETPAIR
-  int result = socketpair (domain, style | SOCK_CLOEXEC, protocol, filedes);
-
-  if (result != -1)
-    {
-      socket_mark_cloexec (filedes[0]);
-      socket_mark_cloexec (filedes[1]);
-    }
-
-  return result;
-#else
-  gdb_assert_not_reached (_("socketpair not available on this host"));
-#endif
-}
-
-/* See filestuff.h.  */
-
-int
-gdb_socket_cloexec (int domain, int style, int protocol)
-{
-  int result = socket (domain, style | SOCK_CLOEXEC, protocol);
-
-  if (result != -1)
-    socket_mark_cloexec (result);
-
-  return result;
-}
-#endif
-
-/* See filestuff.h.  */
-
-int
-gdb_pipe_cloexec (int filedes[2])
-{
-  int result;
-
-#ifdef HAVE_PIPE2
-  result = pipe2 (filedes, O_CLOEXEC);
-  if (result != -1)
-    {
-      maybe_mark_cloexec (filedes[0]);
-      maybe_mark_cloexec (filedes[1]);
-    }
-#else
-#ifdef HAVE_PIPE
-  result = pipe (filedes);
-  if (result != -1)
-    {
-      mark_cloexec (filedes[0]);
-      mark_cloexec (filedes[1]);
-    }
-#else /* HAVE_PIPE */
-  gdb_assert_not_reached (_("pipe not available on this host"));
-#endif /* HAVE_PIPE */
-#endif /* HAVE_PIPE2 */
-
-  return result;
-}
-
-/* See gdbsupport/filestuff.h.  */
-
-bool
-is_regular_file (const char *name, int *errno_ptr)
-{
-  struct stat st;
-  const int status = stat (name, &st);
-
-  /* Stat should never fail except when the file does not exist.
-     If stat fails, analyze the source of error and return true
-     unless the file does not exist, to avoid returning false results
-     on obscure systems where stat does not work as expected.  */
-
-  if (status != 0)
-    {
-      if (errno != ENOENT)
-	return true;
-      *errno_ptr = ENOENT;
-      return false;
-    }
-
-  if (S_ISREG (st.st_mode))
-    return true;
-
-  if (S_ISDIR (st.st_mode))
-    *errno_ptr = EISDIR;
-  else
-    *errno_ptr = EINVAL;
-  return false;
-}
-
-/* See gdbsupport/filestuff.h.  */
-
-bool
-mkdir_recursive (const char *dir)
-{
-  auto holder = make_unique_xstrdup (dir);
-  char * const start = holder.get ();
-  char *component_start = start;
-  char *component_end = start;
-
-  while (1)
-    {
-      /* Find the beginning of the next component.  */
-      while (*component_start == '/')
-	component_start++;
-
-      /* Are we done?  */
-      if (*component_start == '\0')
-	return true;
-
-      /* Find the slash or null-terminator after this component.  */
-      component_end = component_start;
-      while (*component_end != '/' && *component_end != '\0')
-	component_end++;
-
-      /* Temporarily replace the slash with a null terminator, so we can create
-         the directory up to this component.  */
-      char saved_char = *component_end;
-      *component_end = '\0';
-
-      /* If we get EEXIST and the existing path is a directory, then we're
-         happy.  If it exists, but it's a regular file and this is not the last
-         component, we'll fail at the next component.  If this is the last
-         component, the caller will fail with ENOTDIR when trying to
-         open/create a file under that path.  */
-      if (mkdir (start, 0700) != 0)
-	if (errno != EEXIST)
-	  return false;
-
-      /* Restore the overwritten char.  */
-      *component_end = saved_char;
-      component_start = component_end;
-    }
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/filestuff.h ./gdb/gdbsupport/filestuff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/filestuff.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/filestuff.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,142 +0,0 @@
-/* Low-level file-handling.
-   Copyright (C) 2012-2020 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 COMMON_FILESTUFF_H
-#define COMMON_FILESTUFF_H
-
-#include <dirent.h>
-#include <fcntl.h>
-
-/* Note all the file descriptors which are open when this is called.
-   These file descriptors will not be closed by close_most_fds.  */
-
-extern void notice_open_fds (void);
-
-/* Mark a file descriptor as inheritable across an exec.  */
-
-extern void mark_fd_no_cloexec (int fd);
-
-/* Mark a file descriptor as no longer being inheritable across an
-   exec.  This is only meaningful when FD was previously passed to
-   mark_fd_no_cloexec.  */
-
-extern void unmark_fd_no_cloexec (int fd);
-
-/* Close all open file descriptors other than those marked by
-   'notice_open_fds', and stdin, stdout, and stderr.  Errors that
-   occur while closing are ignored.  */
-
-extern void close_most_fds (void);
-
-/* Like 'open', but ensures that the returned file descriptor has the
-   close-on-exec flag set.  */
-
-extern int gdb_open_cloexec (const char *filename, int flags,
-			     /* mode_t */ unsigned long mode);
-
-/* Like mkstemp, but ensures that the file descriptor is
-   close-on-exec.  */
-
-static inline int
-gdb_mkostemp_cloexec (char *name_template, int flags = 0)
-{
-  /* gnulib provides a mkostemp replacement if needed.  */
-  return mkostemp (name_template, flags | O_CLOEXEC);
-}
-
-/* Convenience wrapper for the above, which takes the filename as an
-   std::string.  */
-
-static inline int
-gdb_open_cloexec (const std::string &filename, int flags,
-		  /* mode_t */ unsigned long mode)
-{
-  return gdb_open_cloexec (filename.c_str (), flags, mode);
-}
-
-struct gdb_file_deleter
-{
-  void operator() (FILE *file) const
-  {
-    fclose (file);
-  }
-};
-
-/* A unique pointer to a FILE.  */
-
-typedef std::unique_ptr<FILE, gdb_file_deleter> gdb_file_up;
-
-/* Like 'fopen', but ensures that the returned file descriptor has the
-   close-on-exec flag set.  */
-
-extern gdb_file_up gdb_fopen_cloexec (const char *filename,
-				      const char *opentype);
-
-/* Convenience wrapper for the above, which takes the filename as an
-   std::string.  */
-
-static inline gdb_file_up
-gdb_fopen_cloexec (const std::string &filename, const char *opentype)
-{
-  return gdb_fopen_cloexec (filename.c_str (), opentype);
-}
-
-/* Like 'socketpair', but ensures that the returned file descriptors
-   have the close-on-exec flag set.  */
-
-extern int gdb_socketpair_cloexec (int domain, int style, int protocol,
-				   int filedes[2]);
-
-/* Like 'socket', but ensures that the returned file descriptor has
-   the close-on-exec flag set.  */
-
-extern int gdb_socket_cloexec (int domain, int style, int protocol);
-
-/* Like 'pipe', but ensures that the returned file descriptors have
-   the close-on-exec flag set.  */
-
-extern int gdb_pipe_cloexec (int filedes[2]);
-
-struct gdb_dir_deleter
-{
-  void operator() (DIR *dir) const
-  {
-    closedir (dir);
-  }
-};
-
-/* A unique pointer to a DIR.  */
-
-typedef std::unique_ptr<DIR, gdb_dir_deleter> gdb_dir_up;
-
-/* Return true if the file NAME exists and is a regular file.
-   If the result is false then *ERRNO_PTR is set to a useful value assuming
-   we're expecting a regular file.  */
-extern bool is_regular_file (const char *name, int *errno_ptr);
-
-
-/* A cheap (as in low-quality) recursive mkdir.  Try to create all the
-   parents directories up to DIR and DIR itself.  Stop if we hit an
-   error along the way.  There is no attempt to remove created
-   directories in case of failure.
-
-   Returns false on failure and sets errno.  */
-
-extern bool mkdir_recursive (const char *dir);
-
-#endif /* COMMON_FILESTUFF_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/filtered-iterator.h ./gdb/gdbsupport/filtered-iterator.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/filtered-iterator.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/filtered-iterator.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,87 +0,0 @@
-/* A forward filtered iterator for GDB, the GNU debugger.
-   Copyright (C) 2018-2020 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 COMMON_FILTERED_ITERATOR_H
-#define COMMON_FILTERED_ITERATOR_H
-
-/* A filtered iterator.  This wraps BaseIterator and automatically
-   skips elements that FilterFunc filters out.  Requires that
-   default-constructing a BaseIterator creates a valid one-past-end
-   iterator.  */
-
-template<typename BaseIterator, typename FilterFunc>
-class filtered_iterator
-{
-public:
-  typedef filtered_iterator self_type;
-  typedef typename BaseIterator::value_type value_type;
-  typedef typename BaseIterator::reference reference;
-  typedef typename BaseIterator::pointer pointer;
-  typedef typename BaseIterator::iterator_category iterator_category;
-  typedef typename BaseIterator::difference_type difference_type;
-
-  /* Construct by forwarding all arguments to the underlying
-     iterator.  */
-  template<typename... Args>
-  explicit filtered_iterator (Args &&...args)
-    : m_it (std::forward<Args> (args)...)
-  { skip_filtered (); }
-
-  /* Create a one-past-end iterator.  */
-  filtered_iterator () = default;
-
-  /* Need these as the variadic constructor would be a better match
-     otherwise.  */
-  filtered_iterator (filtered_iterator &) = default;
-  filtered_iterator (const filtered_iterator &) = default;
-  filtered_iterator (filtered_iterator &&) = default;
-  filtered_iterator (const filtered_iterator &&other)
-    : filtered_iterator (static_cast<const filtered_iterator &> (other))
-  {}
-
-  value_type operator* () const { return *m_it; }
-
-  self_type &operator++ ()
-  {
-    ++m_it;
-    skip_filtered ();
-    return *this;
-  }
-
-  bool operator== (const self_type &other) const
-  { return m_it == other.m_it; }
-
-  bool operator!= (const self_type &other) const
-  { return m_it != other.m_it; }
-
-private:
-
-  void skip_filtered ()
-  {
-    for (; m_it != m_end; ++m_it)
-      if (m_filter (*m_it))
-	break;
-  }
-
-private:
-  FilterFunc m_filter {};
-  BaseIterator m_it {};
-  BaseIterator m_end {};
-};
-
-#endif /* COMMON_FILTERED_ITERATOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/format.c ./gdb/gdbsupport/format.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/format.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/format.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,412 +0,0 @@
-/* Parse a printf-style format string.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "format.h"
-
-format_pieces::format_pieces (const char **arg, bool gdb_extensions)
-{
-  const char *s;
-  const char *string;
-  const char *prev_start;
-  const char *percent_loc;
-  char *sub_start, *current_substring;
-  enum argclass this_argclass;
-
-  s = *arg;
-
-  if (gdb_extensions)
-    {
-      string = *arg;
-      *arg += strlen (*arg);
-    }
-  else
-    {
-      /* Parse the format-control string and copy it into the string STRING,
-	 processing some kinds of escape sequence.  */
-
-      char *f = (char *) alloca (strlen (s) + 1);
-      string = f;
-
-      while ((gdb_extensions || *s != '"') && *s != '\0')
-	{
-	  int c = *s++;
-	  switch (c)
-	    {
-	    case '\0':
-	      continue;
-
-	    case '\\':
-	      switch (c = *s++)
-		{
-		case '\\':
-		  *f++ = '\\';
-		  break;
-		case 'a':
-		  *f++ = '\a';
-		  break;
-		case 'b':
-		  *f++ = '\b';
-		  break;
-		case 'e':
-		  *f++ = '\e';
-		  break;
-		case 'f':
-		  *f++ = '\f';
-		  break;
-		case 'n':
-		  *f++ = '\n';
-		  break;
-		case 'r':
-		  *f++ = '\r';
-		  break;
-		case 't':
-		  *f++ = '\t';
-		  break;
-		case 'v':
-		  *f++ = '\v';
-		  break;
-		case '"':
-		  *f++ = '"';
-		  break;
-		default:
-		  /* ??? TODO: handle other escape sequences.  */
-		  error (_("Unrecognized escape character \\%c in format string."),
-			 c);
-		}
-	      break;
-
-	    default:
-	      *f++ = c;
-	    }
-	}
-
-      /* Terminate our escape-processed copy.  */
-      *f++ = '\0';
-
-      /* Whether the format string ended with double-quote or zero, we're
-	 done with it; it's up to callers to complain about syntax.  */
-      *arg = s;
-    }
-
-  /* Need extra space for the '\0's.  Doubling the size is sufficient.  */
-
-  current_substring = (char *) xmalloc (strlen (string) * 2 + 1000);
-  m_storage.reset (current_substring);
-
-  /* Now scan the string for %-specs and see what kinds of args they want.
-     argclass classifies the %-specs so we can give printf-type functions
-     something of the right size.  */
-
-  const char *f = string;
-  prev_start = string;
-  while (*f)
-    if (*f++ == '%')
-      {
-	int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0;
-	int seen_space = 0, seen_plus = 0;
-	int seen_big_l = 0, seen_h = 0, seen_big_h = 0;
-	int seen_big_d = 0, seen_double_big_d = 0;
-	int seen_size_t = 0;
-	int bad = 0;
-	int n_int_args = 0;
-	bool seen_i64 = false;
-
-	/* Skip over "%%", it will become part of a literal piece.  */
-	if (*f == '%')
-	  {
-	    f++;
-	    continue;
-	  }
-
-	sub_start = current_substring;
-
-	strncpy (current_substring, prev_start, f - 1 - prev_start);
-	current_substring += f - 1 - prev_start;
-	*current_substring++ = '\0';
-
-	if (*sub_start != '\0')
-	  m_pieces.emplace_back (sub_start, literal_piece, 0);
-
-	percent_loc = f - 1;
-
-	/* Check the validity of the format specifier, and work
-	   out what argument it expects.  We only accept C89
-	   format strings, with the exception of long long (which
-	   we autoconf for).  */
-
-	/* The first part of a format specifier is a set of flag
-	   characters.  */
-	while (*f != '\0' && strchr ("0-+ #", *f))
-	  {
-	    if (*f == '#')
-	      seen_hash = 1;
-	    else if (*f == '0')
-	      seen_zero = 1;
-	    else if (*f == ' ')
-	      seen_space = 1;
-	    else if (*f == '+')
-	      seen_plus = 1;
-	    f++;
-	  }
-
-	/* The next part of a format specifier is a width.  */
-	if (gdb_extensions && *f == '*')
-	  {
-	    ++f;
-	    ++n_int_args;
-	  }
-	else
-	  {
-	    while (*f != '\0' && strchr ("0123456789", *f))
-	      f++;
-	  }
-
-	/* The next part of a format specifier is a precision.  */
-	if (*f == '.')
-	  {
-	    seen_prec = 1;
-	    f++;
-	    if (gdb_extensions && *f == '*')
-	      {
-		++f;
-		++n_int_args;
-	      }
-	    else
-	      {
-		while (*f != '\0' && strchr ("0123456789", *f))
-		  f++;
-	      }
-	  }
-
-	/* The next part of a format specifier is a length modifier.  */
-	switch (*f)
-	  {
-	  case 'h':
-	    seen_h = 1;
-	    f++;
-	    break;
-	  case 'l':
-	    f++;
-	    lcount++;
-	    if (*f == 'l')
-	      {
-		f++;
-		lcount++;
-	      }
-	    break;
-	  case 'L':
-	    seen_big_l = 1;
-	    f++;
-	    break;
-	  case 'H':
-	    /* Decimal32 modifier.  */
-	    seen_big_h = 1;
-	    f++;
-	    break;
-	  case 'D':
-	    /* Decimal64 and Decimal128 modifiers.  */
-	    f++;
-
-	    /* Check for a Decimal128.  */
-	    if (*f == 'D')
-	      {
-		f++;
-		seen_double_big_d = 1;
-	      }
-	    else
-	      seen_big_d = 1;
-	    break;
-	  case 'z':
-	    /* For size_t or ssize_t.  */
-	    seen_size_t = 1;
-	    f++;
-	    break;
-	  case 'I':
-	    /* Support the Windows '%I64' extension, because an
-	       earlier call to format_pieces might have converted %lld
-	       to %I64d.  */
-	    if (f[1] == '6' && f[2] == '4')
-	      {
-		f += 3;
-		lcount = 2;
-		seen_i64 = true;
-	      }
-	    break;
-	}
-
-	switch (*f)
-	  {
-	  case 'u':
-	    if (seen_hash)
-	      bad = 1;
-	    /* FALLTHROUGH */
-
-	  case 'o':
-	  case 'x':
-	  case 'X':
-	    if (seen_space || seen_plus)
-	      bad = 1;
-	  /* FALLTHROUGH */
-
-	  case 'd':
-	  case 'i':
-	    if (seen_size_t)
-	      this_argclass = size_t_arg;
-	    else if (lcount == 0)
-	      this_argclass = int_arg;
-	    else if (lcount == 1)
-	      this_argclass = long_arg;
-	    else
-	      this_argclass = long_long_arg;
-
-	    if (seen_big_l)
-	      bad = 1;
-	    break;
-
-	  case 'c':
-	    this_argclass = lcount == 0 ? int_arg : wide_char_arg;
-	    if (lcount > 1 || seen_h || seen_big_l)
-	      bad = 1;
-	    if (seen_prec || seen_zero || seen_space || seen_plus)
-	      bad = 1;
-	    break;
-
-	  case 'p':
-	    this_argclass = ptr_arg;
-	    if (lcount || seen_h || seen_big_l)
-	      bad = 1;
-	    if (seen_prec)
-	      bad = 1;
-	    if (seen_hash || seen_zero || seen_space || seen_plus)
-	      bad = 1;
-
-	    if (gdb_extensions)
-	      {
-		switch (f[1])
-		  {
-		  case 's':
-		  case 'F':
-		  case '[':
-		  case ']':
-		    f++;
-		    break;
-		  }
-	      }
-
-	    break;
-
-	  case 's':
-	    this_argclass = lcount == 0 ? string_arg : wide_string_arg;
-	    if (lcount > 1 || seen_h || seen_big_l)
-	      bad = 1;
-	    if (seen_zero || seen_space || seen_plus)
-	      bad = 1;
-	    break;
-
-	  case 'e':
-	  case 'f':
-	  case 'g':
-	  case 'E':
-	  case 'G':
-	    if (seen_double_big_d)
-	      this_argclass = dec128float_arg;
-	    else if (seen_big_d)
-	      this_argclass = dec64float_arg;
-	    else if (seen_big_h)
-	      this_argclass = dec32float_arg;
-	    else if (seen_big_l)
-	      this_argclass = long_double_arg;
-	    else
-	      this_argclass = double_arg;
-
-	    if (lcount || seen_h)
-	      bad = 1;
-	    break;
-
-	  case '*':
-	    error (_("`*' not supported for precision or width in printf"));
-
-	  case 'n':
-	    error (_("Format specifier `n' not supported in printf"));
-
-	  case '\0':
-	    error (_("Incomplete format specifier at end of format string"));
-
-	  default:
-	    error (_("Unrecognized format specifier '%c' in printf"), *f);
-	  }
-
-	if (bad)
-	  error (_("Inappropriate modifiers to "
-		   "format specifier '%c' in printf"),
-		 *f);
-
-	f++;
-
-	sub_start = current_substring;
-
-	if (lcount > 1 && !seen_i64 && USE_PRINTF_I64)
-	  {
-	    /* Windows' printf does support long long, but not the usual way.
-	       Convert %lld to %I64d.  */
-	    int length_before_ll = f - percent_loc - 1 - lcount;
-
-	    strncpy (current_substring, percent_loc, length_before_ll);
-	    strcpy (current_substring + length_before_ll, "I64");
-	    current_substring[length_before_ll + 3] =
-	      percent_loc[length_before_ll + lcount];
-	    current_substring += length_before_ll + 4;
-	  }
-	else if (this_argclass == wide_string_arg
-		 || this_argclass == wide_char_arg)
-	  {
-	    /* Convert %ls or %lc to %s.  */
-	    int length_before_ls = f - percent_loc - 2;
-
-	    strncpy (current_substring, percent_loc, length_before_ls);
-	    strcpy (current_substring + length_before_ls, "s");
-	    current_substring += length_before_ls + 2;
-	  }
-	else
-	  {
-	    strncpy (current_substring, percent_loc, f - percent_loc);
-	    current_substring += f - percent_loc;
-	  }
-
-	*current_substring++ = '\0';
-
-	prev_start = f;
-
-	m_pieces.emplace_back (sub_start, this_argclass, n_int_args);
-      }
-
-  /* Record the remainder of the string.  */
-
-  if (f > prev_start)
-    {
-      sub_start = current_substring;
-
-      strncpy (current_substring, prev_start, f - prev_start);
-      current_substring += f - prev_start;
-      *current_substring++ = '\0';
-
-      m_pieces.emplace_back (sub_start, literal_piece, 0);
-    }
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/format.h ./gdb/gdbsupport/format.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/format.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/format.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,101 +0,0 @@
-/* Parse a printf-style format string.
-
-   Copyright (C) 1986-2020 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 COMMON_FORMAT_H
-#define COMMON_FORMAT_H
-
-#include "gdbsupport/gdb_string_view.h"
-
-#if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG)
-# define USE_PRINTF_I64 1
-# define PRINTF_HAS_LONG_LONG
-#else
-# define USE_PRINTF_I64 0
-#endif
-
-/* The argclass represents the general type of data that goes with a
-   format directive; int_arg for %d, long_arg for %l, and so forth.
-   Note that these primarily distinguish types by size and need for
-   special handling, so for instance %u and %x are (at present) also
-   classed as int_arg.  */
-
-enum argclass
-  {
-    literal_piece,
-    int_arg, long_arg, long_long_arg, size_t_arg, ptr_arg,
-    string_arg, wide_string_arg, wide_char_arg,
-    double_arg, long_double_arg,
-    dec32float_arg, dec64float_arg, dec128float_arg
-  };
-
-/* A format piece is a section of the format string that may include a
-   single print directive somewhere in it, and the associated class
-   for the argument.  */
-
-struct format_piece
-{
-  format_piece (const char *str, enum argclass argc, int n)
-    : string (str),
-      argclass (argc),
-      n_int_args (n)
-  {
-  }
-
-  bool operator== (const format_piece &other) const
-  {
-    return (this->argclass == other.argclass
-	    && gdb::string_view (this->string) == other.string);
-  }
-
-  const char *string;
-  enum argclass argclass;
-  /* Count the number of preceding 'int' arguments that must be passed
-     along.  This is used for a width or precision of '*'.  Note that
-     this feature is only available in "gdb_extensions" mode.  */
-  int n_int_args;
-};
-
-class format_pieces
-{
-public:
-
-  format_pieces (const char **arg, bool gdb_extensions = false);
-  ~format_pieces () = default;
-
-  DISABLE_COPY_AND_ASSIGN (format_pieces);
-
-  typedef std::vector<format_piece>::iterator iterator;
-
-  iterator begin ()
-  {
-    return m_pieces.begin ();
-  }
-
-  iterator end ()
-  {
-    return m_pieces.end ();
-  }
-
-private:
-
-  std::vector<format_piece> m_pieces;
-  gdb::unique_xmalloc_ptr<char> m_storage;
-};
-
-#endif /* COMMON_FORMAT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/forward-scope-exit.h ./gdb/gdbsupport/forward-scope-exit.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/forward-scope-exit.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/forward-scope-exit.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,123 +0,0 @@
-/* Copyright (C) 2019-2020 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 COMMON_FORWARD_SCOPE_EXIT_H
-#define COMMON_FORWARD_SCOPE_EXIT_H
-
-#include "gdbsupport/scope-exit.h"
-#include <functional>
-
-/* A forward_scope_exit is like scope_exit, but instead of giving it a
-   callable, you instead specialize it for a given cleanup function,
-   and the generated class automatically has a constructor with the
-   same interface as the cleanup function.  forward_scope_exit
-   captures the arguments passed to the ctor, and in turn passes those
-   as arguments to the wrapped cleanup function, when it is called at
-   scope exit time, from within the forward_scope_exit dtor.  The
-   forward_scope_exit class can take any number of arguments, and is
-   cancelable if needed.
-
-   This allows usage like this:
-
-      void
-      delete_longjmp_breakpoint (int arg)
-      {
-	// Blah, blah, blah...
-      }
-
-      using longjmp_breakpoint_cleanup
-	= FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint);
-
-   This above created a new cleanup class `longjmp_breakpoint_cleanup`
-   than can then be used like this:
-
-      longjmp_breakpoint_cleanup obj (thread);
-
-      // Blah, blah, blah...
-
-      obj.release ();  // Optional cancel if needed.
-
-   forward_scope_exit is also handy when you would need to wrap a
-   scope_exit in a gdb::optional:
-
-      gdb::optional<longjmp_breakpoint_cleanup> cleanup;
-      if (some condition)
-	cleanup.emplace (thread);
-      ...
-      if (cleanup)
-	cleanup->release ();
-
-   since with scope exit, you would have to know the scope_exit's
-   callable template type when you create the gdb::optional:
-
-     gdb:optional<scope_exit<what goes here?>>
-
-   The "forward" naming fits both purposes shown above -- the class
-   "forwards" ctor arguments to the wrapped cleanup function at scope
-   exit time, and can also be used to "forward declare"
-   scope_exit-like objects.  */
-
-namespace detail
-{
-
-/* Function and Signature are passed in the same type, in order to
-   extract Function's arguments' types in the specialization below.
-   Those are used to generate the constructor.  */
-
-template<typename Function, Function *function, typename Signature>
-struct forward_scope_exit;
-
-template<typename Function, Function *function,
-	 typename Res, typename... Args>
-class forward_scope_exit<Function, function, Res (Args...)>
-  : public scope_exit_base<forward_scope_exit<Function,
-					      function,
-					      Res (Args...)>>
-{
-  /* For access to on_exit().  */
-  friend scope_exit_base<forward_scope_exit<Function,
-					    function,
-					    Res (Args...)>>;
-
-public:
-  explicit forward_scope_exit (Args ...args)
-    : m_bind_function (function, args...)
-  {
-    /* Nothing.  */
-  }
-
-private:
-  void on_exit ()
-  {
-    m_bind_function ();
-  }
-
-  /* The function and the arguments passed to the ctor, all packed in
-     a std::bind.  */
-  decltype (std::bind (function, std::declval<Args> ()...))
-    m_bind_function;
-};
-
-} /* namespace detail */
-
-/* This is the "public" entry point.  It's a macro to avoid having to
-   name FUNC more than once.  */
-
-#define FORWARD_SCOPE_EXIT(FUNC) \
-  detail::forward_scope_exit<decltype (FUNC), FUNC, decltype (FUNC)>
-
-#endif /* COMMON_FORWARD_SCOPE_EXIT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/function-view.h ./gdb/gdbsupport/function-view.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/function-view.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/function-view.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,323 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_FUNCTION_VIEW_H
-#define COMMON_FUNCTION_VIEW_H
-
-/* function_view is a polymorphic type-erasing wrapper class that
-   encapsulates a non-owning reference to arbitrary callable objects.
-
-   A way to put it is that function_view is to std::function like
-   std::string_view is to std::string.  While std::function stores a
-   type-erased callable object internally, function_view holds a
-   type-erased reference to an external callable object.
-
-   This is meant to be used as callback type of a function that:
-
-     #1 - Takes a callback as parameter.
-
-     #2 - Wants to support arbitrary callable objects as callback type
-	  (e.g., stateful function objects, lambda closures, free
-	  functions).
-
-     #3 - Does not store the callback anywhere; instead the function
-	  just calls the callback directly or forwards it to some
-	  other function that calls it.
-
-     #4 - Can't be, or we don't want it to be, a template function
-	  with the callable type as template parameter.  For example,
-	  when the callback is a parameter of a virtual member
-	  function, or when putting the function template in a header
-	  would expose too much implementation detail.
-
-   Note that the C-style "function pointer" + "void *data" callback
-   parameter idiom fails requirement #2 above.  Please don't add new
-   uses of that idiom.  I.e., something like this wouldn't work;
-
-    typedef bool (iterate_over_foos_cb) (foo *f, void *user_data),
-    void iterate_over_foos (iterate_over_foos_cb *callback, void *user_data);
-
-    foo *find_foo_by_type (int type)
-    {
-      foo *found = nullptr;
-
-      iterate_over_foos ([&] (foo *f, void *data)
-	{
-	  if (foo->type == type)
-	    {
-	      found = foo;
-	      return true; // stop iterating
-	    }
-	  return false; // continue iterating
-	}, NULL);
-
-      return found;
-    }
-
-   The above wouldn't compile, because lambdas with captures can't be
-   implicitly converted to a function pointer (because a capture means
-   some context data must be passed to the lambda somehow).
-
-   C++11 gave us std::function as type-erased wrapper around arbitrary
-   callables, however, std::function is not an ideal fit for transient
-   callbacks such as the use case above.  For this use case, which is
-   quite pervasive, a function_view is a better choice, because while
-   function_view is light and does not require any heap allocation,
-   std::function is a heavy-weight object with value semantics that
-   generally requires a heap allocation on construction/assignment of
-   the target callable.  In addition, while it is possible to use
-   std::function in such a way that avoids most of the overhead by
-   making sure to only construct it with callables of types that fit
-   std::function's small object optimization, such as function
-   pointers and std::reference_wrapper callables, that is quite
-   inconvenient in practice, because restricting to free-function
-   callables would imply no state/capture/closure, which we need in
-   most cases, and std::reference_wrapper implies remembering to use
-   std::ref/std::cref where the callable is constructed, with the
-   added inconvenience that std::ref/std::cref have deleted rvalue-ref
-   overloads, meaning you can't use unnamed/temporary lambdas with
-   them.
-
-   Note that because function_view is a non-owning view of a callable,
-   care must be taken to ensure that the callable outlives the
-   function_view that calls it.  This is not really a problem for the
-   use case function_view is intended for, such as passing a temporary
-   function object / lambda to a function that accepts a callback,
-   because in those cases, the temporary is guaranteed to be live
-   until the called function returns.
-
-   Calling a function_view with no associated target is undefined,
-   unlike with std::function, which throws std::bad_function_call.
-   This is by design, to avoid the otherwise necessary NULL check in
-   function_view::operator().
-
-   Since function_view objects are small (a pair of pointers), they
-   should generally be passed around by value.
-
-   Usage:
-
-   Given this function that accepts a callback:
-
-    void
-    iterate_over_foos (gdb::function_view<void (foo *)> callback)
-    {
-       for (auto &foo : foos)
-	 callback (&foo);
-    }
-
-   you can call it like this, passing a lambda as callback:
-
-    iterate_over_foos ([&] (foo *f)
-      {
-	process_one_foo (f);
-      });
-
-   or like this, passing a function object as callback:
-
-    struct function_object
-    {
-      void operator() (foo *f)
-      {
-	if (s->check ())
-	  process_one_foo (f);
-      }
-
-      // some state
-      state *s;
-    };
-
-    state mystate;
-    function_object matcher {&mystate};
-    iterate_over_foos (matcher);
-
-  or like this, passing a function pointer as callback:
-
-    iterate_over_foos (process_one_foo);
-
-  You can find unit tests covering the whole API in
-  unittests/function-view-selftests.c.  */
-
-namespace gdb {
-
-namespace fv_detail {
-/* Bits shared by all function_view instantiations that do not depend
-   on the template parameters.  */
-
-/* Storage for the erased callable.  This is a union in order to be
-   able to save both a function object (data) pointer or a function
-   pointer without triggering undefined behavior.  */
-union erased_callable
-{
-  /* For function objects.  */
-  void *data;
-
-    /* For function pointers.  */
-  void (*fn) ();
-};
-
-} /* namespace fv_detail */
-
-/* Use partial specialization to get access to the callable's
-   signature. */
-template<class Signature>
-struct function_view;
-
-template<typename Res, typename... Args>
-class function_view<Res (Args...)>
-{
-  template<typename From, typename To>
-  using CompatibleReturnType
-    = Or<std::is_void<To>,
-	 std::is_same<From, To>,
-	 std::is_convertible<From, To>>;
-
-  /* True if Func can be called with Args, and either the result is
-     Res, convertible to Res or Res is void.  */
-  template<typename Callable,
-	   typename Res2 = typename std::result_of<Callable &(Args...)>::type>
-  struct IsCompatibleCallable : CompatibleReturnType<Res2, Res>
-  {};
-
-  /* True if Callable is a function_view.  Used to avoid hijacking the
-     copy ctor.  */
-  template <typename Callable>
-  struct IsFunctionView
-    : std::is_same<function_view, typename std::decay<Callable>::type>
-  {};
-
- public:
-
-  /* NULL by default.  */
-  constexpr function_view () noexcept
-    : m_erased_callable {},
-      m_invoker {}
-  {}
-
-  /* Default copy/assignment is fine.  */
-  function_view (const function_view &) = default;
-  function_view &operator= (const function_view &) = default;
-
-  /* This is the main entry point.  Use SFINAE to avoid hijacking the
-     copy constructor and to ensure that the target type is
-     compatible.  */
-  template
-    <typename Callable,
-     typename = Requires<Not<IsFunctionView<Callable>>>,
-     typename = Requires<IsCompatibleCallable<Callable>>>
-  function_view (Callable &&callable) noexcept
-  {
-    bind (callable);
-  }
-
-  /* Construct a NULL function_view.  */
-  constexpr function_view (std::nullptr_t) noexcept
-    : m_erased_callable {},
-      m_invoker {}
-  {}
-
-  /* Clear a function_view.  */
-  function_view &operator= (std::nullptr_t) noexcept
-  {
-    m_invoker = nullptr;
-    return *this;
-  }
-
-  /* Return true if the wrapper has a target, false otherwise.  Note
-     we check M_INVOKER instead of M_ERASED_CALLABLE because we don't
-     know which member of the union is active right now.  */
-  constexpr explicit operator bool () const noexcept
-  { return m_invoker != nullptr; }
-
-  /* Call the callable.  */
-  Res operator () (Args... args) const
-  { return m_invoker (m_erased_callable, std::forward<Args> (args)...); }
-
- private:
-
-  /* Bind this function_view to a compatible function object
-     reference.  */
-  template <typename Callable>
-  void bind (Callable &callable) noexcept
-  {
-    m_erased_callable.data = (void *) std::addressof (callable);
-    m_invoker = [] (fv_detail::erased_callable ecall, Args... args)
-      noexcept (noexcept (callable (std::forward<Args> (args)...))) -> Res
-      {
-	auto &restored_callable = *static_cast<Callable *> (ecall.data);
-	/* The explicit cast to Res avoids a compile error when Res is
-	   void and the callable returns non-void.  */
-	return (Res) restored_callable (std::forward<Args> (args)...);
-      };
-  }
-
-  /* Bind this function_view to a compatible function pointer.
-
-     Making this a separate function allows avoiding one indirection,
-     by storing the function pointer directly in the storage, instead
-     of a pointer to pointer.  erased_callable is then a union in
-     order to avoid storing a function pointer as a data pointer here,
-     which would be undefined.  */
-  template<class Res2, typename... Args2>
-  void bind (Res2 (*fn) (Args2...)) noexcept
-  {
-    m_erased_callable.fn = reinterpret_cast<void (*) ()> (fn);
-    m_invoker = [] (fv_detail::erased_callable ecall, Args... args)
-      noexcept (noexcept (fn (std::forward<Args> (args)...))) -> Res
-      {
-	auto restored_fn = reinterpret_cast<Res2 (*) (Args2...)> (ecall.fn);
-	/* The explicit cast to Res avoids a compile error when Res is
-	   void and the callable returns non-void.  */
-	return (Res) restored_fn (std::forward<Args> (args)...);
-      };
-  }
-
-  /* Storage for the erased callable.  */
-  fv_detail::erased_callable m_erased_callable;
-
-  /* The invoker.  This is set to a capture-less lambda by one of the
-     'bind' overloads.  The lambda restores the right type of the
-     callable (which is passed as first argument), and forwards the
-     args.  */
-  Res (*m_invoker) (fv_detail::erased_callable, Args...);
-};
-
-/* Allow comparison with NULL.  Defer the work to the in-class
-   operator bool implementation.  */
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator== (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept
-{ return !static_cast<bool> (f); }
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator== (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept
-{ return !static_cast<bool> (f); }
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator!= (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept
-{ return static_cast<bool> (f); }
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator!= (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept
-{ return static_cast<bool> (f); }
-
-} /* namespace gdb */
-
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_assert.h ./gdb/gdbsupport/gdb_assert.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_assert.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_assert.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,61 +0,0 @@
-/* GDB-friendly replacement for <assert.h>.
-   Copyright (C) 2000-2020 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 COMMON_GDB_ASSERT_H
-#define COMMON_GDB_ASSERT_H
-
-#include "errors.h"
-
-/* A static assertion.  This will cause a compile-time error if EXPR,
-   which must be a compile-time constant, is false.  */
-
-#define gdb_static_assert(expr) static_assert (expr, "")
-
-/* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather
-   than upper case) macro since that provides the closest fit to the
-   existing lower case macro <assert.h>:assert() that it is
-   replacing.  */
-
-#define gdb_assert(expr)                                                      \
-  ((void) ((expr) ? 0 :                                                       \
-	   (gdb_assert_fail (#expr, __FILE__, __LINE__, FUNCTION_NAME), 0)))
-
-/* This prints an "Assertion failed" message, asking the user if they
-   want to continue, dump core, or just exit.  */
-#if defined (FUNCTION_NAME)
-#define gdb_assert_fail(assertion, file, line, function)                      \
-  internal_error (file, line, _("%s: Assertion `%s' failed."),                \
-		  function, assertion)
-#else
-#define gdb_assert_fail(assertion, file, line, function)                      \
-  internal_error (file, line, _("Assertion `%s' failed."),                    \
-		  assertion)
-#endif
-
-/* The canonical form of gdb_assert (0).
-   MESSAGE is a string to include in the error message.  */
-
-#if defined (FUNCTION_NAME)
-#define gdb_assert_not_reached(message) \
-  internal_error (__FILE__, __LINE__, "%s: %s", FUNCTION_NAME, _(message))
-#else
-#define gdb_assert_not_reached(message) \
-  internal_error (__FILE__, __LINE__, _(message))
-#endif
-
-#endif /* COMMON_GDB_ASSERT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_binary_search.h ./gdb/gdbsupport/gdb_binary_search.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_binary_search.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_binary_search.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,59 +0,0 @@
-/* C++ implementation of a binary search.
-
-   Copyright (C) 2019-2020 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 GDBSUPPORT_GDB_BINARY_SEARCH_H
-#define GDBSUPPORT_GDB_BINARY_SEARCH_H
-
-#include <algorithm>
-
-namespace gdb {
-
-/* Implements a binary search using C++ iterators.
-   This differs from std::binary_search in that it returns an interator for
-   the found element and in that the type of EL can be different from the
-   type of the elements in the countainer.
-
-   COMP is a C-style comparison function with signature:
-   int comp(const value_type& a, const T& b);
-   It should return -1, 0 or 1 if a is less than, equal to, or greater than
-   b, respectively.
-   [first, last) must be sorted.
-
-   The return value is an iterator pointing to the found element, or LAST if
-   no element was found.  */
-template<typename It, typename T, typename Comp>
-It binary_search (It first, It last, T el, Comp comp)
-{
-  auto lt = [&] (const typename std::iterator_traits<It>::value_type &a,
-		 const T &b)
-    { return comp (a, b) < 0; };
-
-  auto lb = std::lower_bound (first, last, el, lt);
-  if (lb != last)
-    {
-      if (comp (*lb, el) == 0)
-	return lb;
-    }
-  return last;
-}
-
-} /* namespace gdb */
-
-#endif /* GDBSUPPORT_GDB_BINARY_SEARCH_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb-dlfcn.c ./gdb/gdbsupport/gdb-dlfcn.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb-dlfcn.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb-dlfcn.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,118 +0,0 @@
-/* Platform independent shared object routines for GDB.
-
-   Copyright (C) 2011-2020 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 "common-defs.h"
-#include "gdb-dlfcn.h"
-
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#elif __MINGW32__
-#include <windows.h>
-#else
-/* Unsupported configuration. */
-#define NO_SHARED_LIB
-#endif
-
-#ifdef NO_SHARED_LIB
-
-gdb_dlhandle_up
-gdb_dlopen (const char *filename)
-{
-  gdb_assert_not_reached ("gdb_dlopen should not be called on this platform.");
-}
-
-void *
-gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol)
-{
-  gdb_assert_not_reached ("gdb_dlsym should not be called on this platform.");
-}
-
-void
-dlclose_deleter::operator() (void *handle) const
-{
-  gdb_assert_not_reached ("gdb_dlclose should not be called on this platform.");
-}
-
-int
-is_dl_available (void)
-{
-  return 0;
-}
-
-#else /* NO_SHARED_LIB */
-
-gdb_dlhandle_up
-gdb_dlopen (const char *filename)
-{
-  void *result;
-#ifdef HAVE_DLFCN_H
-  result = dlopen (filename, RTLD_NOW);
-#elif __MINGW32__
-  result = (void *) LoadLibrary (filename);
-#endif
-  if (result != NULL)
-    return gdb_dlhandle_up (result);
-
-#ifdef HAVE_DLFCN_H
-  error (_("Could not load %s: %s"), filename, dlerror());
-#else
-  {
-    LPVOID buffer;
-    DWORD dw;
-
-    dw = GetLastError();
-
-    FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
-                   FORMAT_MESSAGE_IGNORE_INSERTS,
-                   NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-                   (LPTSTR) &buffer,
-                   0, NULL);
-
-    error (_("Could not load %s: %s"), filename, (char *) buffer);
-  }
-#endif
-}
-
-void *
-gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol)
-{
-#ifdef HAVE_DLFCN_H
-  return dlsym (handle.get (), symbol);
-#elif __MINGW32__
-  return (void *) GetProcAddress ((HMODULE) handle.get (), symbol);
-#endif
-}
-
-void
-dlclose_deleter::operator() (void *handle) const
-{
-#ifdef HAVE_DLFCN_H
-  dlclose (handle);
-#elif __MINGW32__
-  FreeLibrary ((HMODULE) handle);
-#endif
-}
-
-int
-is_dl_available (void)
-{
-  return 1;
-}
-
-#endif /* NO_SHARED_LIB */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb-dlfcn.h ./gdb/gdbsupport/gdb-dlfcn.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb-dlfcn.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb-dlfcn.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,51 +0,0 @@
-/* Platform independent shared object routines for GDB.
-
-   Copyright (C) 2011-2020 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 GDB_DLFCN_H
-#define GDB_DLFCN_H
-
-/* A deleter that closes an open dynamic library.  */
-
-struct dlclose_deleter
-{
-  void operator() (void *handle) const;
-};
-
-/* A unique pointer that points to a dynamic library.  */
-
-typedef std::unique_ptr<void, dlclose_deleter> gdb_dlhandle_up;
-
-/* Load the dynamic library file named FILENAME, and return a handle
-   for that dynamic library.  Return NULL if the loading fails for any
-   reason.  */
-
-gdb_dlhandle_up gdb_dlopen (const char *filename);
-
-/* Return the address of the symbol named SYMBOL inside the shared
-   library whose handle is HANDLE.  Return NULL when the symbol could
-   not be found.  */
-
-void *gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol);
-
-/* Return non-zero if the dynamic library functions are available on
-   this platform.  */
-
-int is_dl_available(void);
-
-#endif /* GDB_DLFCN_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_locale.h ./gdb/gdbsupport/gdb_locale.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_locale.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_locale.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-/* GDB-friendly replacement for <locale.h>.
-   Copyright (C) 2002-2020 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 COMMON_GDB_LOCALE_H
-#define COMMON_GDB_LOCALE_H
-
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#ifdef ENABLE_NLS
-# include <libintl.h>
-# define _(String) gettext (String)
-# ifdef gettext_noop
-#  define N_(String) gettext_noop (String)
-# else
-#  define N_(String) (String)
-# endif
-#else
-# define _(String) (String)
-# define N_(String) (String)
-#endif
-
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-
-#endif /* COMMON_GDB_LOCALE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_optional.h ./gdb/gdbsupport/gdb_optional.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_optional.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_optional.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,219 +0,0 @@
-/* An optional object.
-
-   Copyright (C) 2017-2020 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 COMMON_GDB_OPTIONAL_H
-#define COMMON_GDB_OPTIONAL_H
-
-#include "gdbsupport/traits.h"
-
-namespace gdb
-{
-
-struct in_place_t
-{
-  explicit in_place_t () = default;
-};
-
-constexpr gdb::in_place_t in_place {};
-
-/* This class attempts to be a compatible subset of std::optional,
-   which is slated to be available in C++17.  This class optionally
-   holds an object of some type -- by default it is constructed not
-   holding an object, but later the object can be "emplaced".  This is
-   similar to using std::unique_ptr, but in-object allocation is
-   guaranteed.
-
-   Unlike std::optional, we currently only support copy/move
-   construction/assignment of an optional<T> from either exactly
-   optional<T> or T.  I.e., we don't support copy/move
-   construction/assignment from optional<U> or U, when U is a type
-   convertible to T.  Making that work depending on the definitions of
-   T and U is somewhat complicated, and currently the users of this
-   class don't need it.  */
-
-template<typename T>
-class optional
-{
-public:
-
-  constexpr optional ()
-    : m_dummy ()
-  {}
-
-  template<typename... Args>
-  constexpr optional (in_place_t, Args &&... args)
-    : m_item (std::forward<Args> (args)...),
-      m_instantiated (true)
-  {}
-
-  ~optional ()
-  { this->reset (); }
-
-  /* Copy and move constructors.  */
-
-  optional (const optional &other)
-  {
-    if (other.m_instantiated)
-      this->emplace (other.get ());
-  }
-
-  optional (optional &&other)
-    noexcept(std::is_nothrow_move_constructible<T> ())
-  {
-    if (other.m_instantiated)
-      this->emplace (std::move (other.get ()));
-  }
-
-  constexpr optional (const T &other)
-    : m_item (other),
-      m_instantiated (true)
-  {}
-
-  constexpr optional (T &&other)
-    noexcept (std::is_nothrow_move_constructible<T> ())
-    : m_item (std::move (other)),
-      m_instantiated (true)
-  {}
-
-  /* Assignment operators.  */
-
-  optional &
-  operator= (const optional &other)
-  {
-    if (m_instantiated && other.m_instantiated)
-      this->get () = other.get ();
-    else
-      {
-	if (other.m_instantiated)
-	  this->emplace (other.get ());
-	else
-	  this->reset ();
-      }
-
-    return *this;
-  }
-
-  optional &
-  operator= (optional &&other)
-    noexcept (And<std::is_nothrow_move_constructible<T>,
-	      std::is_nothrow_move_assignable<T>> ())
-  {
-    if (m_instantiated && other.m_instantiated)
-      this->get () = std::move (other.get ());
-    else
-      {
-	if (other.m_instantiated)
-	  this->emplace (std::move (other.get ()));
-	else
-	  this->reset ();
-      }
-    return *this;
-  }
-
-  optional &
-  operator= (const T &other)
-  {
-    if (m_instantiated)
-      this->get () = other;
-    else
-      this->emplace (other);
-    return *this;
-  }
-
-  optional &
-  operator= (T &&other)
-    noexcept (And<std::is_nothrow_move_constructible<T>,
-	      std::is_nothrow_move_assignable<T>> ())
-  {
-    if (m_instantiated)
-      this->get () = std::move (other);
-    else
-      this->emplace (std::move (other));
-    return *this;
-  }
-
-  template<typename... Args>
-  T &emplace (Args &&... args)
-  {
-    this->reset ();
-    new (&m_item) T (std::forward<Args>(args)...);
-    m_instantiated = true;
-    return this->get ();
-  }
-
-  /* Observers.  */
-  constexpr const T *operator-> () const
-  { return std::addressof (this->get ()); }
-
-  T *operator-> ()
-  { return std::addressof (this->get ()); }
-
-  constexpr const T &operator* () const &
-  { return this->get (); }
-
-  T &operator* () &
-  { return this->get (); }
-
-  T &&operator* () &&
-  { return std::move (this->get ()); }
-
-  constexpr const T &&operator* () const &&
-  { return std::move (this->get ()); }
-
-  constexpr explicit operator bool () const noexcept
-  { return m_instantiated; }
-
-  constexpr bool has_value () const noexcept
-  { return m_instantiated; }
-
-  /* 'reset' is a 'safe' operation with no precondition.  */
-  void reset () noexcept
-  {
-    if (m_instantiated)
-      this->destroy ();
-  }
-
-private:
-
-  /* Destroy the object.  */
-  void destroy ()
-  {
-    gdb_assert (m_instantiated);
-    m_instantiated = false;
-    m_item.~T ();
-  }
-
-  /* The get operations have m_instantiated as a precondition.  */
-  T &get () noexcept { return m_item; }
-  constexpr const T &get () const noexcept { return m_item; }
-
-  /* The object.  */
-  union
-  {
-    struct { } m_dummy;
-    T m_item;
-  };
-
-  /* True if the object was ever emplaced.  */
-  bool m_instantiated = false;
-};
-
-}
-
-#endif /* COMMON_GDB_OPTIONAL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_proc_service.h ./gdb/gdbsupport/gdb_proc_service.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_proc_service.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_proc_service.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,173 +0,0 @@
-/* <proc_service.h> replacement for systems that don't have it.
-   Copyright (C) 2000-2020 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 COMMON_GDB_PROC_SERVICE_H
-#define COMMON_GDB_PROC_SERVICE_H
-
-#include <sys/types.h>
-
-#ifdef HAVE_PROC_SERVICE_H
-
-/* glibc's proc_service.h doesn't wrap itself with extern "C".  Need
-   to do it ourselves.  */
-EXTERN_C_PUSH
-
-#include <proc_service.h>
-
-EXTERN_C_POP
-
-#else /* HAVE_PROC_SERVICE_H */
-
-/* The following fallback definitions have been imported and adjusted
-   from glibc's proc_service.h  */
-
-/* Callback interface for libthread_db, functions users must define.
-   Copyright (C) 1999,2002,2003 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* The definitions in this file must correspond to those in the debugger.  */
-
-#ifdef HAVE_SYS_PROCFS_H
-#include <sys/procfs.h>
-#endif
-
-/* Not all platforms bring in <linux/elf.h> via <sys/procfs.h>.  If
-   <sys/procfs.h> wasn't enough to find elf_fpregset_t, try the kernel
-   headers also (but don't if we don't need to).  */
-#ifndef HAVE_ELF_FPREGSET_T
-# ifdef HAVE_LINUX_ELF_H
-#  include <linux/elf.h>
-# endif
-#endif
-
-EXTERN_C_PUSH
-
-/* Functions in this interface return one of these status codes.  */
-typedef enum
-{
-  PS_OK,		/* Generic "call succeeded".  */
-  PS_ERR,		/* Generic error.  */
-  PS_BADPID,		/* Bad process handle.  */
-  PS_BADLID,		/* Bad LWP identifier.  */
-  PS_BADADDR,		/* Bad address.  */
-  PS_NOSYM,		/* Could not find given symbol.  */
-  PS_NOFREGS		/* FPU register set not available for given LWP.  */
-} ps_err_e;
-
-#ifndef HAVE_LWPID_T
-typedef unsigned int lwpid_t;
-#endif
-
-#ifndef HAVE_PSADDR_T
-typedef void *psaddr_t;
-#endif
-
-#ifndef HAVE_PRGREGSET_T
-typedef elf_gregset_t prgregset_t;
-#endif
-
-#ifndef HAVE_PRFPREGSET_T
-typedef elf_fpregset_t prfpregset_t;
-#endif
-
-/* This type is opaque in this interface.  It's defined by the user of
-   libthread_db.  GDB's version is defined below.  */
-struct ps_prochandle;
-
-
-/* Read or write process memory at the given address.  */
-extern ps_err_e ps_pdread (struct ps_prochandle *,
-			   psaddr_t, void *, size_t);
-extern ps_err_e ps_pdwrite (struct ps_prochandle *,
-			    psaddr_t, const void *, size_t);
-extern ps_err_e ps_ptread (struct ps_prochandle *,
-			   psaddr_t, void *, size_t);
-extern ps_err_e ps_ptwrite (struct ps_prochandle *,
-			    psaddr_t, const void *, size_t);
-
-
-/* Get and set the given LWP's general or FPU register set.  */
-extern ps_err_e ps_lgetregs (struct ps_prochandle *,
-			     lwpid_t, prgregset_t);
-extern ps_err_e ps_lsetregs (struct ps_prochandle *,
-			     lwpid_t, const prgregset_t);
-extern ps_err_e ps_lgetfpregs (struct ps_prochandle *,
-			       lwpid_t, prfpregset_t *);
-extern ps_err_e ps_lsetfpregs (struct ps_prochandle *,
-			       lwpid_t, const prfpregset_t *);
-
-/* Return the PID of the process.  */
-extern pid_t ps_getpid (struct ps_prochandle *);
-
-/* Fetch the special per-thread address associated with the given LWP.
-   This call is only used on a few platforms (most use a normal register).
-   The meaning of the `int' parameter is machine-dependent.  */
-extern ps_err_e ps_get_thread_area (struct ps_prochandle *,
-				    lwpid_t, int, psaddr_t *);
-
-
-/* Look up the named symbol in the named DSO in the symbol tables
-   associated with the process being debugged, filling in *SYM_ADDR
-   with the corresponding run-time address.  */
-extern ps_err_e ps_pglobal_lookup (struct ps_prochandle *,
-				   const char *object_name,
-				   const char *sym_name,
-				   psaddr_t *sym_addr);
-
-
-/* Stop or continue the entire process.  */
-extern ps_err_e ps_pstop (struct ps_prochandle *);
-extern ps_err_e ps_pcontinue (struct ps_prochandle *);
-
-/* Stop or continue the given LWP alone.  */
-extern ps_err_e ps_lstop (struct ps_prochandle *, lwpid_t);
-extern ps_err_e ps_lcontinue (struct ps_prochandle *, lwpid_t);
-
-/* The following are only defined in/called by Solaris.  */
-
-/* Get size of extra register set.  */
-extern ps_err_e ps_lgetxregsize (struct ps_prochandle *ph,
-				 lwpid_t lwpid, int *xregsize);
-/* Get extra register set.  */
-extern ps_err_e ps_lgetxregs (struct ps_prochandle *ph, lwpid_t lwpid,
-			      caddr_t xregset);
-extern ps_err_e ps_lsetxregs (struct ps_prochandle *ph, lwpid_t lwpid,
-			      caddr_t xregset);
-
-/* Log a message (sends to gdb_stderr).  */
-extern void ps_plog (const char *fmt, ...);
-
-EXTERN_C_POP
-
-#endif /* HAVE_PROC_SERVICE_H */
-
-#endif /* COMMON_GDB_PROC_SERVICE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_ref_ptr.h ./gdb/gdbsupport/gdb_ref_ptr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_ref_ptr.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_ref_ptr.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,228 +0,0 @@
-/* Reference-counted smart pointer class
-
-   Copyright (C) 2016-2020 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 COMMON_GDB_REF_PTR_H
-#define COMMON_GDB_REF_PTR_H
-
-#include <cstddef>
-
-namespace gdb
-{
-
-/* An instance of this class either holds a reference to a
-   reference-counted object or is "NULL".  Reference counting is
-   handled externally by a policy class.  If the object holds a
-   reference, then when the object is destroyed, the reference is
-   decref'd.
-
-   Normally an instance is constructed using a pointer.  This sort of
-   initialization lets this class manage the lifetime of that
-   reference.
-
-   Assignment and copy construction will make a new reference as
-   appropriate.  Assignment from a plain pointer is disallowed to
-   avoid confusion about whether this acquires a new reference;
-   instead use the "reset" method -- which, like the pointer
-   constructor, transfers ownership.
-
-   The policy class must provide two static methods:
-   void incref (T *);
-   void decref (T *);
-*/
-template<typename T, typename Policy>
-class ref_ptr
-{
- public:
-
-  /* Create a new NULL instance.  */
-  ref_ptr ()
-    : m_obj (NULL)
-  {
-  }
-
-  /* Create a new NULL instance.  Note that this is not explicit.  */
-  ref_ptr (const std::nullptr_t)
-    : m_obj (NULL)
-  {
-  }
-
-  /* Create a new instance.  OBJ is a reference, management of which
-     is now transferred to this class.  */
-  explicit ref_ptr (T *obj)
-    : m_obj (obj)
-  {
-  }
-
-  /* Copy another instance.  */
-  ref_ptr (const ref_ptr &other)
-    : m_obj (other.m_obj)
-  {
-    if (m_obj != NULL)
-      Policy::incref (m_obj);
-  }
-
-  /* Transfer ownership from OTHER.  */
-  ref_ptr (ref_ptr &&other)
-    : m_obj (other.m_obj)
-  {
-    other.m_obj = NULL;
-  }
-
-  /* Destroy this instance.  */
-  ~ref_ptr ()
-  {
-    if (m_obj != NULL)
-      Policy::decref (m_obj);
-  }
-
-  /* Copy another instance.  */
-  ref_ptr &operator= (const ref_ptr &other)
-  {
-    /* Do nothing on self-assignment.  */
-    if (this != &other)
-      {
-	reset (other.m_obj);
-	if (m_obj != NULL)
-	  Policy::incref (m_obj);
-      }
-    return *this;
-  }
-
-  /* Transfer ownership from OTHER.  */
-  ref_ptr &operator= (ref_ptr &&other)
-  {
-    /* Do nothing on self-assignment.  */
-    if (this != &other)
-      {
-	reset (other.m_obj);
-	other.m_obj = NULL;
-      }
-    return *this;
-  }
-
-  /* Change this instance's referent.  OBJ is a reference, management
-     of which is now transferred to this class.  */
-  void reset (T *obj)
-  {
-    if (m_obj != NULL)
-      Policy::decref (m_obj);
-    m_obj = obj;
-  }
-
-  /* Return this instance's referent without changing the state of
-     this class.  */
-  T *get () const
-  {
-    return m_obj;
-  }
-
-  /* Return this instance's referent, and stop managing this
-     reference.  The caller is now responsible for the ownership of
-     the reference.  */
-  ATTRIBUTE_UNUSED_RESULT T *release ()
-  {
-    T *result = m_obj;
-
-    m_obj = NULL;
-    return result;
-  }
-
-  /* Let users refer to members of the underlying pointer.  */
-  T *operator-> () const
-  {
-    return m_obj;
-  }
-
-  /* Acquire a new reference and return a ref_ptr that owns it.  */
-  static ref_ptr<T, Policy> new_reference (T *obj)
-  {
-    Policy::incref (obj);
-    return ref_ptr<T, Policy> (obj);
-  }
-
- private:
-
-  T *m_obj;
-};
-
-template<typename T, typename Policy>
-inline bool operator== (const ref_ptr<T, Policy> &lhs,
-			const ref_ptr<T, Policy> &rhs)
-{
-  return lhs.get () == rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const ref_ptr<T, Policy> &lhs, const T *rhs)
-{
-  return lhs.get () == rhs;
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const ref_ptr<T, Policy> &lhs, const std::nullptr_t)
-{
-  return lhs.get () == nullptr;
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const T *lhs, const ref_ptr<T, Policy> &rhs)
-{
-  return lhs == rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const std::nullptr_t, const ref_ptr<T, Policy> &rhs)
-{
-  return nullptr == rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const ref_ptr<T, Policy> &lhs,
-			const ref_ptr<T, Policy> &rhs)
-{
-  return lhs.get () != rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const ref_ptr<T, Policy> &lhs, const T *rhs)
-{
-  return lhs.get () != rhs;
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const ref_ptr<T, Policy> &lhs, const std::nullptr_t)
-{
-  return lhs.get () != nullptr;
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const T *lhs, const ref_ptr<T, Policy> &rhs)
-{
-  return lhs != rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const std::nullptr_t, const ref_ptr<T, Policy> &rhs)
-{
-  return nullptr != rhs.get ();
-}
-
-}
-
-#endif /* COMMON_GDB_REF_PTR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_setjmp.h ./gdb/gdbsupport/gdb_setjmp.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_setjmp.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_setjmp.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-/* Portability wrappers for setjmp and longjmp.
-   Copyright (C) 1986-2020 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 COMMON_GDB_SETJMP_H
-#define COMMON_GDB_SETJMP_H
-
-#include <setjmp.h>
-
-#ifdef HAVE_SIGSETJMP
-#define SIGJMP_BUF		sigjmp_buf
-#define SIGSETJMP(buf,val)	sigsetjmp((buf), val)
-#define SIGLONGJMP(buf,val)	siglongjmp((buf), (val))
-#else
-#define SIGJMP_BUF		jmp_buf
-/* We ignore val here because that's safer and avoids having to check
-   whether _setjmp exists.  */
-#define SIGSETJMP(buf,val)	setjmp(buf)
-#define SIGLONGJMP(buf,val)	longjmp((buf), (val))
-#endif
-
-#endif /* COMMON_GDB_SETJMP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb-sigmask.h ./gdb/gdbsupport/gdb-sigmask.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb-sigmask.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb-sigmask.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,45 +0,0 @@
-/* sigprocmask wrapper for gdb
-
-   Copyright (C) 2019-2020 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 GDBSUPPORT_GDB_SIGMASK_H
-#define GDBSUPPORT_GDB_SIGMASK_H
-
-#include <signal.h>
-
-#ifdef HAVE_SIGPROCMASK
-
-#ifdef HAVE_PTHREAD_SIGMASK
-#define gdb_sigmask pthread_sigmask
-#else
-#define gdb_sigmask sigprocmask
-#endif
-
-#else /* HAVE_SIGPROCMASK */
-
-/* Other code checks HAVE_SIGPROCMASK, but if there happened to be a
-   system that only had pthread_sigmask, we could still use it with
-   some extra changes.  */
-#ifdef HAVE_PTHREAD_SIGMASK
-#error pthead_sigmask available without sigprocmask - please report
-#endif
-
-#endif /* HAVE_SIGPROCMASK */
-
-
-#endif /* GDBSUPPORT_GDB_SIGMASK_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_signals.h ./gdb/gdbsupport/gdb_signals.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_signals.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_signals.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,58 +0,0 @@
-/* Target signal translation functions for GDB.
-   Copyright (C) 1990-2020 Free Software Foundation, Inc.
-   Contributed by Cygnus Support.
-
-   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 COMMON_GDB_SIGNALS_H
-#define COMMON_GDB_SIGNALS_H
-
-#include "gdb/signals.h"
-
-/* Predicate to gdb_signal_to_host(). Return non-zero if the enum
-   targ_signal SIGNO has an equivalent ``host'' representation.  */
-/* FIXME: cagney/1999-11-22: The name below was chosen in preference
-   to the shorter gdb_signal_p() because it is far less ambigious.
-   In this context ``gdb_signal'' refers to GDB's internal
-   representation of the target's set of signals while ``host signal''
-   refers to the target operating system's signal.  Confused?  */
-extern int gdb_signal_to_host_p (enum gdb_signal signo);
-
-/* Convert between host signal numbers and enum gdb_signal's.
-   gdb_signal_to_host() returns 0 and prints a warning() on GDB's
-   console if SIGNO has no equivalent host representation.  */
-/* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is
-   refering to the target operating system's signal numbering.
-   Similarly, ``enum gdb_signal'' is named incorrectly, ``enum
-   gdb_signal'' would probably be better as it is refering to GDB's
-   internal representation of a target operating system's signal.  */
-extern enum gdb_signal gdb_signal_from_host (int);
-extern int gdb_signal_to_host (enum gdb_signal);
-
-/* Return the enum symbol name of SIG as a string, to use in debug
-   output.  */
-extern const char *gdb_signal_to_symbol_string (enum gdb_signal sig);
-
-/* Return the string for a signal.  */
-extern const char *gdb_signal_to_string (enum gdb_signal);
-
-/* Return the name (SIGHUP, etc.) for a signal.  */
-extern const char *gdb_signal_to_name (enum gdb_signal);
-
-/* Given a name (SIGHUP, etc.), return its signal.  */
-enum gdb_signal gdb_signal_from_name (const char *);
-
-#endif /* COMMON_GDB_SIGNALS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_splay_tree.h ./gdb/gdbsupport/gdb_splay_tree.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_splay_tree.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_splay_tree.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,42 +0,0 @@
-/* GDB wrapper for splay trees.
-
-   Copyright (C) 2017-2020 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 COMMON_GDB_SPLAY_TREE_H
-#define COMMON_GDB_SPLAY_TREE_H
-
-#include "splay-tree.h"
-
-namespace gdb {
-
-struct splay_tree_deleter
-{
-  void operator() (splay_tree tree) const
-  {
-    splay_tree_delete (tree);
-  }
-};
-
-} /* namespace gdb */
-
-/* A unique pointer to a splay tree.  */
-
-typedef std::unique_ptr<splay_tree_s, gdb::splay_tree_deleter>
-    gdb_splay_tree_up;
-
-#endif /* COMMON_GDB_SPLAY_TREE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_string_view.h ./gdb/gdbsupport/gdb_string_view.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_string_view.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_string_view.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,563 +0,0 @@
-// Components for manipulating non-owning sequences of characters -*- C++ -*-
-
-
-#ifndef COMMON_GDB_STRING_VIEW_H
-#define COMMON_GDB_STRING_VIEW_H
-
-// Note: This file has been stolen from the gcc repo
-// (libstdc++-v3/include/experimental/string_view) and has local modifications.
-
-// Copyright (C) 2013-2020 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library 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.
-
-// This library 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.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-// <http://www.gnu.org/licenses/>.
-
-//
-// N3762 basic_string_view library
-//
-
-
-#if __cplusplus >= 201703L
-
-#include <string_view>
-
-namespace gdb {
-  using string_view = std::string_view;
-} /* namespace gdb */
-
-#else /* __cplusplus < 201703L */
-
-#include <string>
-#include <limits>
-#include "gdb_assert.h"
-
-namespace gdb {
-
-  /**
-   *  @class basic_string_view <experimental/string_view>
-   *  @brief  A non-owning reference to a string.
-   *
-   *  @ingroup strings
-   *  @ingroup sequences
-   *  @ingroup experimental
-   *
-   *  @tparam _CharT  Type of character
-   *  @tparam _Traits  Traits for character type, defaults to
-   *                   char_traits<_CharT>.
-   *
-   *  A basic_string_view looks like this:
-   *
-   *  @code
-   *    _CharT*    _M_str
-   *    size_t     _M_len
-   *  @endcode
-   */
-  template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
-    class basic_string_view
-    {
-    public:
-
-      // types
-      using traits_type = _Traits;
-      using value_type = _CharT;
-      using pointer = const _CharT*;
-      using const_pointer = const _CharT*;
-      using reference = const _CharT&;
-      using const_reference = const _CharT&;
-      using const_iterator = const _CharT*;
-      using iterator = const_iterator;
-      using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-      using reverse_iterator = const_reverse_iterator;
-      using size_type = size_t;
-      using difference_type = ptrdiff_t;
-      static constexpr size_type npos = size_type(-1);
-
-      // [string.view.cons], construct/copy
-
-      constexpr
-      basic_string_view() noexcept
-      : _M_len{0}, _M_str{nullptr}
-      { }
-
-      constexpr basic_string_view(const basic_string_view&) noexcept = default;
-
-      template<typename _Allocator>
-        basic_string_view(const std::basic_string<_CharT, _Traits,
-			  _Allocator>& __str) noexcept
-        : _M_len{__str.length()}, _M_str{__str.data()}
-        { }
-
-      /*constexpr*/ basic_string_view(const _CharT* __str)
-      : _M_len{__str == nullptr ? 0 : traits_type::length(__str)},
-	_M_str{__str}
-      { }
-
-      constexpr basic_string_view(const _CharT* __str, size_type __len)
-      : _M_len{__len},
-        _M_str{__str}
-      { }
-
-      basic_string_view&
-      operator=(const basic_string_view&) noexcept = default;
-
-      // [string.view.iterators], iterators
-
-      constexpr const_iterator
-      begin() const noexcept
-      { return this->_M_str; }
-
-      constexpr const_iterator
-      end() const noexcept
-      { return this->_M_str + this->_M_len; }
-
-      constexpr const_iterator
-      cbegin() const noexcept
-      { return this->_M_str; }
-
-      constexpr const_iterator
-      cend() const noexcept
-      { return this->_M_str + this->_M_len; }
-
-      const_reverse_iterator
-      rbegin() const noexcept
-      { return const_reverse_iterator(this->end()); }
-
-      const_reverse_iterator
-      rend() const noexcept
-      { return const_reverse_iterator(this->begin()); }
-
-      const_reverse_iterator
-      crbegin() const noexcept
-      { return const_reverse_iterator(this->end()); }
-
-      const_reverse_iterator
-      crend() const noexcept
-      { return const_reverse_iterator(this->begin()); }
-
-      // [string.view.capacity], capacity
-
-      constexpr size_type
-      size() const noexcept
-      { return this->_M_len; }
-
-      constexpr size_type
-      length() const noexcept
-      { return _M_len; }
-
-      constexpr size_type
-      max_size() const noexcept
-      {
-	return (npos - sizeof(size_type) - sizeof(void*))
-		/ sizeof(value_type) / 4;
-      }
-
-      constexpr bool
-      empty() const noexcept
-      { return this->_M_len == 0; }
-
-      // [string.view.access], element access
-
-      constexpr const _CharT&
-      operator[](size_type __pos) const
-      {
-	// TODO: Assert to restore in a way compatible with the constexpr.
-	// __glibcxx_assert(__pos < this->_M_len);
-	return *(this->_M_str + __pos);
-      }
-
-      constexpr const _CharT&
-      at(size_type __pos) const
-      {
-	return __pos < this->_M_len
-	     ? *(this->_M_str + __pos)
-	     : (error (_("basic_string_view::at: __pos "
-			 "(which is %zu) >= this->size() "
-			 "(which is %zu)"),
-		       __pos, this->size()),
-		*this->_M_str);
-      }
-
-      constexpr const _CharT&
-      front() const
-      {
-	// TODO: Assert to restore in a way compatible with the constexpr.
-	// __glibcxx_assert(this->_M_len > 0);
-	return *this->_M_str;
-      }
-
-      constexpr const _CharT&
-      back() const
-      {
-	// TODO: Assert to restore in a way compatible with the constexpr.
-	// __glibcxx_assert(this->_M_len > 0);
-	return *(this->_M_str + this->_M_len - 1);
-      }
-
-      constexpr const _CharT*
-      data() const noexcept
-      { return this->_M_str; }
-
-      // [string.view.modifiers], modifiers:
-
-      /*constexpr*/ void
-      remove_prefix(size_type __n)
-      {
-	gdb_assert (this->_M_len >= __n);
-	this->_M_str += __n;
-	this->_M_len -= __n;
-      }
-
-      /*constexpr*/ void
-      remove_suffix(size_type __n)
-      { this->_M_len -= __n; }
-
-      /*constexpr*/ void
-      swap(basic_string_view& __sv) noexcept
-      {
-	auto __tmp = *this;
-	*this = __sv;
-	__sv = __tmp;
-      }
-
-
-      // [string.view.ops], string operations:
-
-      template<typename _Allocator>
-        explicit operator std::basic_string<_CharT, _Traits, _Allocator>() const
-        {
-	  return { this->_M_str, this->_M_len };
-	}
-
-      template<typename _Allocator = std::allocator<_CharT>>
-	std::basic_string<_CharT, _Traits, _Allocator>
-	to_string(const _Allocator& __alloc = _Allocator()) const
-	{
-	  return { this->_M_str, this->_M_len, __alloc };
-	}
-
-      size_type
-      copy(_CharT* __str, size_type __n, size_type __pos = 0) const
-      {
-	gdb_assert (__str != nullptr || __n == 0);
-	if (__pos > this->_M_len)
-	  error (_("basic_string_view::copy: __pos "
-		   "(which is %zu) > this->size() "
-		   "(which is %zu)"),
-		 __pos, this->size());
-	size_type __rlen{std::min(__n, size_type{this->_M_len  - __pos})};
-	for (auto __begin = this->_M_str + __pos,
-	     __end = __begin + __rlen; __begin != __end;)
-	  *__str++ = *__begin++;
-	return __rlen;
-      }
-
-
-      // [string.view.ops], string operations:
-
-      /*constexpr*/ basic_string_view
-      substr(size_type __pos, size_type __n=npos) const
-      {
-	return __pos <= this->_M_len
-	     ? basic_string_view{this->_M_str + __pos,
-				std::min(__n, size_type{this->_M_len  - __pos})}
-	     : (error (_("basic_string_view::substr: __pos "
-			 "(which is %zu) > this->size() "
-			 "(which is %zu)"),
-		       __pos, this->size()), basic_string_view{});
-      }
-
-      /*constexpr*/ int
-      compare(basic_string_view __str) const noexcept
-      {
-	int __ret = traits_type::compare(this->_M_str, __str._M_str,
-					 std::min(this->_M_len, __str._M_len));
-	if (__ret == 0)
-	  __ret = _S_compare(this->_M_len, __str._M_len);
-	return __ret;
-      }
-
-      /*constexpr*/ int
-      compare(size_type __pos1, size_type __n1, basic_string_view __str) const
-      { return this->substr(__pos1, __n1).compare(__str); }
-
-      /*constexpr*/ int
-      compare(size_type __pos1, size_type __n1,
-	      basic_string_view __str, size_type __pos2, size_type __n2) const
-      { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); }
-
-      /*constexpr*/ int
-      compare(const _CharT* __str) const noexcept
-      { return this->compare(basic_string_view{__str}); }
-
-      /*constexpr*/ int
-      compare(size_type __pos1, size_type __n1, const _CharT* __str) const
-      { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); }
-
-      /*constexpr*/ int
-      compare(size_type __pos1, size_type __n1,
-	      const _CharT* __str, size_type __n2) const
-      {
-	return this->substr(__pos1, __n1)
-		   .compare(basic_string_view(__str, __n2));
-      }
-
-      /*constexpr*/ size_type
-      find(basic_string_view __str, size_type __pos = 0) const noexcept
-      { return this->find(__str._M_str, __pos, __str._M_len); }
-
-      /*constexpr*/ size_type
-      find(_CharT __c, size_type __pos=0) const noexcept;
-
-      /*constexpr*/ size_type
-      find(const _CharT* __str, size_type __pos, size_type __n) const noexcept;
-
-      /*constexpr*/ size_type
-      find(const _CharT* __str, size_type __pos=0) const noexcept
-      { return this->find(__str, __pos, traits_type::length(__str)); }
-
-      /*constexpr*/ size_type
-      rfind(basic_string_view __str, size_type __pos = npos) const noexcept
-      { return this->rfind(__str._M_str, __pos, __str._M_len); }
-
-      /*constexpr*/ size_type
-      rfind(_CharT __c, size_type __pos = npos) const noexcept;
-
-      /*constexpr*/ size_type
-      rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept;
-
-      /*constexpr*/ size_type
-      rfind(const _CharT* __str, size_type __pos = npos) const noexcept
-      { return this->rfind(__str, __pos, traits_type::length(__str)); }
-
-      /*constexpr*/ size_type
-      find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept
-      { return this->find_first_of(__str._M_str, __pos, __str._M_len); }
-
-      /*constexpr*/ size_type
-      find_first_of(_CharT __c, size_type __pos = 0) const noexcept
-      { return this->find(__c, __pos); }
-
-      /*constexpr*/ size_type
-      find_first_of(const _CharT* __str, size_type __pos, size_type __n) const;
-
-      /*constexpr*/ size_type
-      find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept
-      { return this->find_first_of(__str, __pos, traits_type::length(__str)); }
-
-      /*constexpr*/ size_type
-      find_last_of(basic_string_view __str,
-		   size_type __pos = npos) const noexcept
-      { return this->find_last_of(__str._M_str, __pos, __str._M_len); }
-
-      size_type
-      find_last_of(_CharT __c, size_type __pos=npos) const noexcept
-      { return this->rfind(__c, __pos); }
-
-      /*constexpr*/ size_type
-      find_last_of(const _CharT* __str, size_type __pos, size_type __n) const;
-
-      /*constexpr*/ size_type
-      find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept
-      { return this->find_last_of(__str, __pos, traits_type::length(__str)); }
-
-      /*constexpr*/ size_type
-      find_first_not_of(basic_string_view __str,
-			size_type __pos = 0) const noexcept
-      { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); }
-
-      /*constexpr*/ size_type
-      find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept;
-
-      /*constexpr*/ size_type
-      find_first_not_of(const _CharT* __str,
-			size_type __pos, size_type __n) const;
-
-      /*constexpr*/ size_type
-      find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept
-      {
-	return this->find_first_not_of(__str, __pos,
-				       traits_type::length(__str));
-      }
-
-      /*constexpr*/ size_type
-      find_last_not_of(basic_string_view __str,
-		       size_type __pos = npos) const noexcept
-      { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); }
-
-      /*constexpr*/ size_type
-      find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept;
-
-      /*constexpr*/ size_type
-      find_last_not_of(const _CharT* __str,
-		       size_type __pos, size_type __n) const;
-
-      /*constexpr*/ size_type
-      find_last_not_of(const _CharT* __str,
-		       size_type __pos = npos) const noexcept
-      {
-	return this->find_last_not_of(__str, __pos,
-				      traits_type::length(__str));
-      }
-
-    private:
-
-      static constexpr int
-      _S_compare(size_type __n1, size_type __n2) noexcept
-      {
-	return difference_type(__n1 - __n2) > std::numeric_limits<int>::max()
-	     ? std::numeric_limits<int>::max()
-	     : difference_type(__n1 - __n2) < std::numeric_limits<int>::min()
-	     ? std::numeric_limits<int>::min()
-	     : static_cast<int>(difference_type(__n1 - __n2));
-      }
-
-      size_t	    _M_len;
-      const _CharT* _M_str;
-    };
-
-  // [string.view.comparison], non-member basic_string_view comparison functions
-
-  namespace __detail
-  {
-    // Identity transform to create a non-deduced context, so that only one
-    // argument participates in template argument deduction and the other
-    // argument gets implicitly converted to the deduced type. See n3766.html.
-    template<typename _Tp>
-      using __idt = typename std::common_type<_Tp>::type;
-  }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator==(basic_string_view<_CharT, _Traits> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.size() == __y.size() && __x.compare(__y) == 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator==(basic_string_view<_CharT, _Traits> __x,
-               __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
-    { return __x.size() == __y.size() && __x.compare(__y) == 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator==(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.size() == __y.size() && __x.compare(__y) == 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator!=(basic_string_view<_CharT, _Traits> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return !(__x == __y); }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator!=(basic_string_view<_CharT, _Traits> __x,
-               __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
-    { return !(__x == __y); }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator!=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return !(__x == __y); }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator< (basic_string_view<_CharT, _Traits> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) < 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator< (basic_string_view<_CharT, _Traits> __x,
-               __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
-    { return __x.compare(__y) < 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator< (__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) < 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator> (basic_string_view<_CharT, _Traits> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) > 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator> (basic_string_view<_CharT, _Traits> __x,
-               __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
-    { return __x.compare(__y) > 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator> (__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) > 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator<=(basic_string_view<_CharT, _Traits> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) <= 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator<=(basic_string_view<_CharT, _Traits> __x,
-               __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
-    { return __x.compare(__y) <= 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator<=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) <= 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator>=(basic_string_view<_CharT, _Traits> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) >= 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator>=(basic_string_view<_CharT, _Traits> __x,
-               __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
-    { return __x.compare(__y) >= 0; }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ bool
-    operator>=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
-               basic_string_view<_CharT, _Traits> __y) noexcept
-    { return __x.compare(__y) >= 0; }
-
-  // basic_string_view typedef names
-
-  using string_view = basic_string_view<char>;
-} /* namespace gdb */
-
-#include "gdb_string_view.tcc"
-
-#endif // __cplusplus < 201703L
-
-#endif /* COMMON_GDB_STRING_VIEW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_string_view.tcc ./gdb/gdbsupport/gdb_string_view.tcc
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_string_view.tcc	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_string_view.tcc	1970-01-01 00:00:00.000000000 +0000
@@ -1,219 +0,0 @@
-// Components for manipulating non-owning sequences of characters -*- C++ -*-
-
-// Note: This file has been stolen from the gcc repo
-// (libstdc++-v3/include/experimental/bits/string_view.tcc) and has local
-// modifications.
-
-// Copyright (C) 2013-2020 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library 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.
-
-// This library 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.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file experimental/bits/string_view.tcc
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{experimental/string_view}
- */
-
-//
-// N3762 basic_string_view library
-//
-
-#ifndef GDB_STRING_VIEW_TCC
-#define GDB_STRING_VIEW_TCC 1
-
-namespace gdb
-{
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find(const _CharT* __str, size_type __pos, size_type __n) const noexcept
-    {
-      gdb_assert (__str != nullptr || __n == 0);
-
-      if (__n == 0)
-	return __pos <= this->_M_len ? __pos : npos;
-
-      if (__n <= this->_M_len)
-	{
-	  for (; __pos <= this->_M_len - __n; ++__pos)
-	    if (traits_type::eq(this->_M_str[__pos], __str[0])
-		&& traits_type::compare(this->_M_str + __pos + 1,
-					__str + 1, __n - 1) == 0)
-	      return __pos;
-	}
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find(_CharT __c, size_type __pos) const noexcept
-    {
-      size_type __ret = npos;
-      if (__pos < this->_M_len)
-	{
-	  const size_type __n = this->_M_len - __pos;
-	  const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c);
-	  if (__p)
-	    __ret = __p - this->_M_str;
-	}
-      return __ret;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept
-    {
-      gdb_assert (__str != nullptr || __n == 0);
-
-      if (__n <= this->_M_len)
-	{
-	  __pos = std::min(size_type(this->_M_len - __n), __pos);
-	  do
-	    {
-	      if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0)
-		return __pos;
-	    }
-	  while (__pos-- > 0);
-	}
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    rfind(_CharT __c, size_type __pos) const noexcept
-    {
-      size_type __size = this->_M_len;
-      if (__size > 0)
-	{
-	  if (--__size > __pos)
-	    __size = __pos;
-	  for (++__size; __size-- > 0; )
-	    if (traits_type::eq(this->_M_str[__size], __c))
-	      return __size;
-	}
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find_first_of(const _CharT* __str, size_type __pos, size_type __n) const
-    {
-      gdb_assert (__str != nullptr || __n == 0);
-      for (; __n && __pos < this->_M_len; ++__pos)
-	{
-	  const _CharT* __p = traits_type::find(__str, __n,
-						this->_M_str[__pos]);
-	  if (__p)
-	    return __pos;
-	}
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find_last_of(const _CharT* __str, size_type __pos, size_type __n) const
-    {
-      gdb_assert (__str != nullptr || __n == 0);
-      size_type __size = this->size();
-      if (__size && __n)
-	{
-	  if (--__size > __pos)
-	    __size = __pos;
-	  do
-	    {
-	      if (traits_type::find(__str, __n, this->_M_str[__size]))
-		return __size;
-	    }
-	  while (__size-- != 0);
-	}
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const
-    {
-      gdb_assert (__str != nullptr || __n == 0);
-      for (; __pos < this->_M_len; ++__pos)
-	if (!traits_type::find(__str, __n, this->_M_str[__pos]))
-	  return __pos;
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find_first_not_of(_CharT __c, size_type __pos) const noexcept
-    {
-      for (; __pos < this->_M_len; ++__pos)
-	if (!traits_type::eq(this->_M_str[__pos], __c))
-	  return __pos;
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const
-    {
-      gdb_assert (__str != nullptr || __n == 0);
-      size_type __size = this->_M_len;
-      if (__size)
-	{
-	  if (--__size > __pos)
-	    __size = __pos;
-	  do
-	    {
-	      if (!traits_type::find(__str, __n, this->_M_str[__size]))
-		return __size;
-	    }
-	  while (__size--);
-	}
-      return npos;
-    }
-
-  template<typename _CharT, typename _Traits>
-    /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
-    basic_string_view<_CharT, _Traits>::
-    find_last_not_of(_CharT __c, size_type __pos) const noexcept
-    {
-      size_type __size = this->_M_len;
-      if (__size)
-	{
-	  if (--__size > __pos)
-	    __size = __pos;
-	  do
-	    {
-	      if (!traits_type::eq(this->_M_str[__size], __c))
-		return __size;
-	    }
-	  while (__size--);
-	}
-      return npos;
-    }
-} // namespace gdb
-
-#endif // GDB_STRING_VIEW_TCC
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_sys_time.h ./gdb/gdbsupport/gdb_sys_time.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_sys_time.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_sys_time.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/* Copyright (C) 2015-2020 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 COMMON_GDB_SYS_TIME_H
-#define COMMON_GDB_SYS_TIME_H
-
-#include <sys/time.h>
-
-/* On MinGW-w64, gnulib's sys/time.h replaces 'struct timeval' and
-   gettimeofday with versions that support 64-bit time_t, for POSIX
-   compliance.  However, the gettimeofday replacement does not ever
-   return time_t values larger than 31-bit, as it simply returns the
-   system's gettimeofday's (signed) 32-bit result as (signed) 64-bit.
-   Because we don't really need the POSIX compliance, and it ends up
-   causing conflicts with other libraries we use that don't use gnulib
-   and thus work with the native struct timeval, such as Winsock2's
-   native 'select' and libiberty, simply undefine away gnulib's
-   replacements.  */
-#if GNULIB_defined_struct_timeval
-# undef timeval
-# undef gettimeofday
-#endif
-
-#endif /* COMMON_GDB_SYS_TIME_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_tilde_expand.c ./gdb/gdbsupport/gdb_tilde_expand.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_tilde_expand.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_tilde_expand.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,95 +0,0 @@
-/* Perform tilde expansion on paths for GDB and gdbserver.
-
-   Copyright (C) 2017-2020 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 "common-defs.h"
-#include "gdb_tilde_expand.h"
-#include <glob.h>
-
-/* RAII-style class wrapping "glob".  */
-
-class gdb_glob
-{
-public:
-  /* Construct a "gdb_glob" object by calling "glob" with the provided
-     parameters.  This function can throw if "glob" fails.  */
-  gdb_glob (const char *pattern, int flags,
-	    int (*errfunc) (const char *epath, int eerrno))
-  {
-    int ret = glob (pattern, flags, errfunc, &m_glob);
-
-    if (ret != 0)
-      {
-	if (ret == GLOB_NOMATCH)
-	  error (_("Could not find a match for '%s'."), pattern);
-	else
-	  error (_("glob could not process pattern '%s'."),
-		 pattern);
-      }
-  }
-
-  /* Destroy the object and free M_GLOB.  */
-  ~gdb_glob ()
-  {
-    globfree (&m_glob);
-  }
-
-  /* Return the GL_PATHC component of M_GLOB.  */
-  int pathc () const
-  {
-    return m_glob.gl_pathc;
-  }
-
-  /* Return the GL_PATHV component of M_GLOB.  */
-  char **pathv () const
-  {
-    return m_glob.gl_pathv;
-  }
-
-private:
-  /* The actual glob object we're dealing with.  */
-  glob_t m_glob;
-};
-
-/* See gdbsupport/gdb_tilde_expand.h.  */
-
-std::string
-gdb_tilde_expand (const char *dir)
-{
-  gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL);
-
-  gdb_assert (glob.pathc () > 0);
-  /* "glob" may return more than one match to the path provided by the
-     user, but we are only interested in the first match.  */
-  std::string expanded_dir = glob.pathv ()[0];
-
-  return expanded_dir;
-}
-
-/* See gdbsupport/gdb_tilde_expand.h.  */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_tilde_expand_up (const char *dir)
-{
-  gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL);
-
-  gdb_assert (glob.pathc () > 0);
-  /* "glob" may return more than one match to the path provided by the
-     user, but we are only interested in the first match.  */
-  return make_unique_xstrdup (glob.pathv ()[0]);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_tilde_expand.h ./gdb/gdbsupport/gdb_tilde_expand.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_tilde_expand.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_tilde_expand.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-/* Perform tilde expansion on paths for GDB and gdbserver.
-
-   Copyright (C) 2017-2020 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 COMMON_GDB_TILDE_EXPAND_H
-#define COMMON_GDB_TILDE_EXPAND_H
-
-/* Perform path expansion (i.e., tilde expansion) on DIR, and return
-   the full path.  */
-extern std::string gdb_tilde_expand (const char *dir);
-
-/* Same as GDB_TILDE_EXPAND, but return the full path as a
-   gdb::unique_xmalloc_ptr<char>.  */
-extern gdb::unique_xmalloc_ptr<char> gdb_tilde_expand_up (const char *dir);
-
-#endif /* COMMON_GDB_TILDE_EXPAND_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_unique_ptr.h ./gdb/gdbsupport/gdb_unique_ptr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_unique_ptr.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_unique_ptr.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,67 +0,0 @@
-/* std::unique_ptr specializations for GDB.
-
-   Copyright (C) 2016-2020 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 COMMON_GDB_UNIQUE_PTR_H
-#define COMMON_GDB_UNIQUE_PTR_H
-
-#include <memory>
-
-namespace gdb
-{
-/* Define gdb::unique_xmalloc_ptr, a std::unique_ptr that manages
-   xmalloc'ed memory.  */
-
-/* The deleter for std::unique_xmalloc_ptr.  Uses xfree.  */
-template <typename T>
-struct xfree_deleter
-{
-  void operator() (T *ptr) const { xfree (ptr); }
-};
-
-/* Same, for arrays.  */
-template <typename T>
-struct xfree_deleter<T[]>
-{
-  void operator() (T *ptr) const { xfree (ptr); }
-};
-
-/* Import the standard unique_ptr to our namespace with a custom
-   deleter.  */
-
-template<typename T> using unique_xmalloc_ptr
-  = std::unique_ptr<T, xfree_deleter<T>>;
-
-/* A no-op deleter.  */
-template<typename T>
-struct noop_deleter
-{
-  void operator() (T *ptr) const { }
-};
-
-} /* namespace gdb */
-
-/* Dup STR and return a unique_xmalloc_ptr for the result.  */
-
-static inline gdb::unique_xmalloc_ptr<char>
-make_unique_xstrdup (const char *str)
-{
-  return gdb::unique_xmalloc_ptr<char> (xstrdup (str));
-}
-
-#endif /* COMMON_GDB_UNIQUE_PTR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_unlinker.h ./gdb/gdbsupport/gdb_unlinker.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_unlinker.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_unlinker.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,60 +0,0 @@
-/* Unlinking class
-
-   Copyright (C) 2016-2020 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 COMMON_GDB_UNLINKER_H
-#define COMMON_GDB_UNLINKER_H
-
-namespace gdb
-{
-
-/* An object of this class holds a filename and, when the object goes
-   of scope, the file is removed using unlink.
-
-   A user of this class can request that the file be preserved using
-   the "keep" method.  */
-class unlinker
-{
- public:
-
-  unlinker (const char *filename) ATTRIBUTE_NONNULL (2)
-    : m_filename (filename)
-  {
-    gdb_assert (filename != NULL);
-  }
-
-  ~unlinker ()
-  {
-    if (m_filename != NULL)
-      unlink (m_filename);
-  }
-
-  /* Keep the file, rather than unlink it.  */
-  void keep ()
-  {
-    m_filename = NULL;
-  }
-
- private:
-
-  const char *m_filename;
-};
-
-}
-
-#endif /* COMMON_GDB_UNLINKER_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_vecs.c ./gdb/gdbsupport/gdb_vecs.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_vecs.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_vecs.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,88 +0,0 @@
-/* Some commonly-used VEC types.
-
-   Copyright (C) 2012-2020 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 "common-defs.h"
-#include "gdb_vecs.h"
-#include "host-defs.h"
-
-/* Worker function to split character delimiter separated string of fields
-   STR into a char pointer vector.  */
-
-static void
-delim_string_to_char_ptr_vec_append
-  (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *str,
-   char delimiter)
-{
-  do
-    {
-      size_t this_len;
-      const char *next_field;
-      char *this_field;
-
-      next_field = strchr (str, delimiter);
-      if (next_field == NULL)
-	this_len = strlen (str);
-      else
-	{
-	  this_len = next_field - str;
-	  next_field++;
-	}
-
-      this_field = (char *) xmalloc (this_len + 1);
-      memcpy (this_field, str, this_len);
-      this_field[this_len] = '\0';
-      vecp->emplace_back (this_field);
-
-      str = next_field;
-    }
-  while (str != NULL);
-}
-
-/* See gdb_vecs.h.  */
-
-std::vector<gdb::unique_xmalloc_ptr<char>>
-delim_string_to_char_ptr_vec (const char *str, char delimiter)
-{
-  std::vector<gdb::unique_xmalloc_ptr<char>> retval;
-  
-  delim_string_to_char_ptr_vec_append (&retval, str, delimiter);
-
-  return retval;
-}
-
-/* See gdb_vecs.h.  */
-
-void
-dirnames_to_char_ptr_vec_append
-  (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames)
-{
-  delim_string_to_char_ptr_vec_append (vecp, dirnames, DIRNAME_SEPARATOR);
-}
-
-/* See gdb_vecs.h.  */
-
-std::vector<gdb::unique_xmalloc_ptr<char>>
-dirnames_to_char_ptr_vec (const char *dirnames)
-{
-  std::vector<gdb::unique_xmalloc_ptr<char>> retval;
-  
-  dirnames_to_char_ptr_vec_append (&retval, dirnames);
-
-  return retval;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_vecs.h ./gdb/gdbsupport/gdb_vecs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_vecs.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_vecs.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,88 +0,0 @@
-/* Some commonly-used VEC types.
-
-   Copyright (C) 2012-2020 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 COMMON_GDB_VECS_H
-#define COMMON_GDB_VECS_H
-
-/* Split STR, a list of DELIMITER-separated fields, into a char pointer vector.
-
-   You may modify the returned strings.  */
-
-extern std::vector<gdb::unique_xmalloc_ptr<char>>
-  delim_string_to_char_ptr_vec (const char *str, char delimiter);
-
-/* Like dirnames_to_char_ptr_vec, but append the directories to *VECP.  */
-
-extern void dirnames_to_char_ptr_vec_append
-  (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames);
-
-/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the
-   elements in their original order.  For empty string ("") DIRNAMES return
-   list of one empty string ("") element.
-
-   You may modify the returned strings.  */
-
-extern std::vector<gdb::unique_xmalloc_ptr<char>>
-  dirnames_to_char_ptr_vec (const char *dirnames);
-
-/* Remove the element pointed by iterator IT from VEC, not preserving the order
-   of the remaining elements.  Return the removed element.  */
-
-template <typename T>
-T
-unordered_remove (std::vector<T> &vec, typename std::vector<T>::iterator it)
-{
-  gdb_assert (it >= vec.begin () && it < vec.end ());
-
-  T removed = std::move (*it);
-  if (it != vec.end () - 1)
-    *it = std::move (vec.back ());
-  vec.pop_back ();
-
-  return removed;
-}
-
-/* Remove the element at position IX from VEC, not preserving the order of the
-   remaining elements.  Return the removed element.  */
-
-template <typename T>
-T
-unordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix)
-{
-  gdb_assert (ix < vec.size ());
-
-  return unordered_remove (vec, vec.begin () + ix);
-}
-
-/* Remove the element at position IX from VEC, preserving the order the
-   remaining elements.  Return the removed element.  */
-
-template <typename T>
-T
-ordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix)
-{
-  gdb_assert (ix < vec.size ());
-
-  T removed = std::move (vec[ix]);
-  vec.erase (vec.begin () + ix);
-
-  return removed;
-}
-
-#endif /* COMMON_GDB_VECS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_wait.h ./gdb/gdbsupport/gdb_wait.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/gdb_wait.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/gdb_wait.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,113 +0,0 @@
-/* Standard wait macros.
-   Copyright (C) 2000-2020 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 COMMON_GDB_WAIT_H
-#define COMMON_GDB_WAIT_H
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h> /* POSIX */
-#else
-#ifdef HAVE_WAIT_H
-#include <wait.h> /* legacy */
-#endif
-#endif
-
-/* Define how to access the int that the wait system call stores.
-   This has been compatible in all Unix systems since time immemorial,
-   but various well-meaning people have defined various different
-   words for the same old bits in the same old int (sometimes claimed
-   to be a struct).  We just know it's an int and we use these macros
-   to access the bits.  */
-
-/* The following macros are defined equivalently to their definitions
-   in POSIX.1.  We fail to define WNOHANG and WUNTRACED, which POSIX.1
-   <sys/wait.h> defines, since our code does not use waitpid() (but
-   NOTE exception for GNU/Linux below).  We also fail to declare
-   wait() and waitpid().  */
-
-#ifndef	WIFEXITED
-#define WIFEXITED(w)	(((w)&0377) == 0)
-#endif
-
-#ifndef	WIFSIGNALED
-#define WIFSIGNALED(w)	(((w)&0377) != 0177 && ((w)&~0377) == 0)
-#endif
-
-#ifndef	WIFSTOPPED
-#ifdef IBM6000
-
-/* Unfortunately, the above comment (about being compatible in all Unix 
-   systems) is not quite correct for AIX, sigh.  And AIX 3.2 can generate
-   status words like 0x57c (sigtrap received after load), and gdb would
-   choke on it.  */
-
-#define WIFSTOPPED(w)	((w)&0x40)
-
-#else
-#define WIFSTOPPED(w)	(((w)&0377) == 0177)
-#endif
-#endif
-
-#ifndef	WEXITSTATUS
-#define WEXITSTATUS(w)	(((w) >> 8) & 0377) /* same as WRETCODE */
-#endif
-
-#ifndef	WTERMSIG
-#define WTERMSIG(w)	((w) & 0177)
-#endif
-
-#ifndef	WSTOPSIG
-#define WSTOPSIG	WEXITSTATUS
-#endif
-
-/* These are not defined in POSIX, but are used by our programs.  */
-
-#ifndef	WSETEXIT
-# ifdef	W_EXITCODE
-#define	WSETEXIT(w,status) ((w) = W_EXITCODE(status,0))
-# else
-#define WSETEXIT(w,status) ((w) = (0 | ((status) << 8)))
-# endif
-#endif
-
-#ifndef W_STOPCODE
-#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
-#endif
-
-#ifndef	WSETSTOP
-#define	WSETSTOP(w,sig)    ((w) = W_STOPCODE(sig))
-#endif
-
-/* For native GNU/Linux we may use waitpid and the __WCLONE option.
-  <GRIPE> It is of course dangerous not to use the REAL header file...
-  </GRIPE>.  */
-
-/* Bits in the third argument to `waitpid'.  */
-#ifndef WNOHANG
-#define	WNOHANG		1	/* Don't block waiting.  */
-#endif
-
-#ifndef WUNTRACED
-#define	WUNTRACED	2	/* Report status of stopped children.  */
-#endif
-
-#ifndef __WCLONE
-#define __WCLONE	0x80000000 /* Wait for cloned process.  */
-#endif
-
-#endif /* COMMON_GDB_WAIT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/hash_enum.h ./gdb/gdbsupport/hash_enum.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/hash_enum.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/hash_enum.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,45 +0,0 @@
-/* A hasher for enums.
-
-   Copyright (C) 2017-2020 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 COMMON_HASH_ENUM_H
-#define COMMON_HASH_ENUM_H
-
-/* A hasher for enums, which was missing in C++11:
-    http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2148
-*/
-
-namespace gdb {
-
-/* Helper struct for hashing enum types.  */
-template<typename T>
-struct hash_enum
-{
-  typedef size_t result_type;
-  typedef T argument_type;
-
-  size_t operator() (T val) const noexcept
-  {
-    using underlying = typename std::underlying_type<T>::type;
-    return std::hash<underlying> () (static_cast<underlying> (val));
-  }
-};
-
-} /* namespace gdb */
-
-#endif /* COMMON_HASH_ENUM_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/host-defs.h ./gdb/gdbsupport/host-defs.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/host-defs.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/host-defs.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,61 +0,0 @@
-/* Basic host-specific definitions for GDB.
-   Copyright (C) 1986-2020 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 COMMON_HOST_DEFS_H
-#define COMMON_HOST_DEFS_H
-
-#include <limits.h>
-
-/* Static host-system-dependent parameters for GDB.  */
-
-/* * Number of bits in a char or unsigned char for the target machine.
-   Just like CHAR_BIT in <limits.h> but describes the target machine.  */
-#if !defined (TARGET_CHAR_BIT)
-#define TARGET_CHAR_BIT 8
-#endif
-
-/* * If we picked up a copy of CHAR_BIT from a configuration file
-   (which may get it by including <limits.h>) then use it to set
-   the number of bits in a host char.  If not, use the same size
-   as the target.  */
-
-#if defined (CHAR_BIT)
-#define HOST_CHAR_BIT CHAR_BIT
-#else
-#define HOST_CHAR_BIT TARGET_CHAR_BIT
-#endif
-
-#ifdef __MSDOS__
-# define CANT_FORK
-# define GLOBAL_CURDIR
-# define DIRNAME_SEPARATOR ';'
-#endif
-
-#if !defined (__CYGWIN__) && defined (_WIN32)
-# define DIRNAME_SEPARATOR ';'
-#endif
-
-#ifndef DIRNAME_SEPARATOR
-#define DIRNAME_SEPARATOR ':'
-#endif
-
-#ifndef SLASH_STRING
-#define SLASH_STRING "/"
-#endif
-
-#endif /* COMMON_HOST_DEFS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/job-control.c ./gdb/gdbsupport/job-control.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/job-control.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/job-control.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,86 +0,0 @@
-/* Job control and terminal related functions, for GDB and gdbserver
-   when running under Unix.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "job-control.h"
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#include <unistd.h>
-
-/* Nonzero if we have job control.  */
-int job_control;
-
-/* Set the process group ID of the inferior.
-
-   Just using job_control only does part of it because setpgid or
-   setpgrp might not exist on a system without job control.
-
-   For a more clean implementation, in libiberty, put a setpgid which merely
-   calls setpgrp and a setpgrp which does nothing (any system with job control
-   will have one or the other).  */
-
-int
-gdb_setpgid ()
-{
-  int retval = 0;
-
-  if (job_control)
-    {
-#ifdef HAVE_SETPGID
-      /* The call setpgid (0, 0) is supposed to work and mean the same
-         thing as this, but on Ultrix 4.2A it fails with EPERM (and
-         setpgid (getpid (), getpid ()) succeeds).  */
-      retval = setpgid (getpid (), getpid ());
-#else
-#ifdef HAVE_SETPGRP
-#ifdef SETPGRP_VOID
-      retval = setpgrp ();
-#else
-      retval = setpgrp (getpid (), getpid ());
-#endif
-#endif /* HAVE_SETPGRP */
-#endif /* HAVE_SETPGID */
-    }
-
-  return retval;
-}
-
-/* See gdbsupport/common-terminal.h.  */
-
-void
-have_job_control ()
-{
-  /* OK, figure out whether we have job control.  If termios is not
-     available, leave job_control 0.  */
-#if defined (HAVE_TERMIOS_H)
-  /* Do all systems with termios have the POSIX way of identifying job
-     control?  I hope so.  */
-#ifdef _POSIX_JOB_CONTROL
-  job_control = 1;
-#else
-#ifdef _SC_JOB_CONTROL
-  job_control = sysconf (_SC_JOB_CONTROL);
-#else
-  job_control = 0;		/* Have to assume the worst.  */
-#endif /* _SC_JOB_CONTROL */
-#endif /* _POSIX_JOB_CONTROL */
-#endif /* HAVE_TERMIOS_H */
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/job-control.h ./gdb/gdbsupport/job-control.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/job-control.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/job-control.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-/* Job control and terminal related functions, for GDB and gdbserver
-   when running under Unix.
-
-   Copyright (C) 1986-2020 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 COMMON_JOB_CONTROL_H
-#define COMMON_JOB_CONTROL_H
-
-/* Do we have job control?  Can be assumed to always be the same
-   within a given run of GDB.  Use in gdb/inflow.c and
-   gdbsupport/common-inflow.c.  */
-extern int job_control;
-
-/* Set the process group of the caller to its own pid, or do nothing
-   if we lack job control.  */
-extern int gdb_setpgid ();
-
-/* Determine whether we have job control, and set variable JOB_CONTROL
-   accordingly.  This function must be called before any use of
-   JOB_CONTROL.  */
-extern void have_job_control ();
-
-#endif /* COMMON_JOB_CONTROL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/netstuff.c ./gdb/gdbsupport/netstuff.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/netstuff.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/netstuff.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,154 +0,0 @@
-/* Operations on network stuff.
-   Copyright (C) 2018-2020 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 "common-defs.h"
-#include "netstuff.h"
-#include <algorithm>
-
-#ifdef USE_WIN32API
-#include <ws2tcpip.h>
-#else
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <netinet/tcp.h>
-#endif
-
-/* See gdbsupport/netstuff.h.  */
-
-scoped_free_addrinfo::~scoped_free_addrinfo ()
-{
-  freeaddrinfo (m_res);
-}
-
-/* See gdbsupport/netstuff.h.  */
-
-parsed_connection_spec
-parse_connection_spec_without_prefix (std::string spec, struct addrinfo *hint)
-{
-  parsed_connection_spec ret;
-  size_t last_colon_pos = 0;
-  /* We're dealing with IPv6 if:
-
-     - ai_family is AF_INET6, or
-     - ai_family is not AF_INET, and
-       - spec[0] is '[', or
-       - the number of ':' on spec is greater than 1.  */
-  bool is_ipv6 = (hint->ai_family == AF_INET6
-		  || (hint->ai_family != AF_INET
-		      && (spec[0] == '['
-			  || std::count (spec.begin (),
-					 spec.end (), ':') > 1)));
-
-  if (is_ipv6)
-    {
-      if (spec[0] == '[')
-	{
-	  /* IPv6 addresses can be written as '[ADDR]:PORT', and we
-	     support this notation.  */
-	  size_t close_bracket_pos = spec.find_first_of (']');
-
-	  if (close_bracket_pos == std::string::npos)
-	    error (_("Missing close bracket in hostname '%s'"),
-		   spec.c_str ());
-
-	  hint->ai_family = AF_INET6;
-
-	  const char c = spec[close_bracket_pos + 1];
-
-	  if (c == '\0')
-	    last_colon_pos = std::string::npos;
-	  else if (c != ':')
-	    error (_("Invalid cruft after close bracket in '%s'"),
-		   spec.c_str ());
-
-	  /* Erase both '[' and ']'.  */
-	  spec.erase (0, 1);
-	  spec.erase (close_bracket_pos - 1, 1);
-	}
-      else if (spec.find_first_of (']') != std::string::npos)
-	error (_("Missing open bracket in hostname '%s'"),
-	       spec.c_str ());
-    }
-
-  if (last_colon_pos == 0)
-    last_colon_pos = spec.find_last_of (':');
-
-  /* The length of the hostname part.  */
-  size_t host_len;
-
-  if (last_colon_pos != std::string::npos)
-    {
-      /* The user has provided a port.  */
-      host_len = last_colon_pos;
-      ret.port_str = spec.substr (last_colon_pos + 1);
-    }
-  else
-    host_len = spec.size ();
-
-  ret.host_str = spec.substr (0, host_len);
-
-  /* Default hostname is localhost.  */
-  if (ret.host_str.empty ())
-    ret.host_str = "localhost";
-
-  return ret;
-}
-
-/* See gdbsupport/netstuff.h.  */
-
-parsed_connection_spec
-parse_connection_spec (const char *spec, struct addrinfo *hint)
-{
-  /* Struct to hold the association between valid prefixes, their
-     family and socktype.  */
-  struct host_prefix
-    {
-      /* The prefix.  */
-      const char *prefix;
-
-      /* The 'ai_family'.  */
-      int family;
-
-      /* The 'ai_socktype'.  */
-      int socktype;
-    };
-  static const struct host_prefix prefixes[] =
-    {
-      { "udp:",  AF_UNSPEC, SOCK_DGRAM },
-      { "tcp:",  AF_UNSPEC, SOCK_STREAM },
-      { "udp4:", AF_INET,   SOCK_DGRAM },
-      { "tcp4:", AF_INET,   SOCK_STREAM },
-      { "udp6:", AF_INET6,  SOCK_DGRAM },
-      { "tcp6:", AF_INET6,  SOCK_STREAM },
-    };
-
-  for (const host_prefix prefix : prefixes)
-    if (startswith (spec, prefix.prefix))
-      {
-	spec += strlen (prefix.prefix);
-	hint->ai_family = prefix.family;
-	hint->ai_socktype = prefix.socktype;
-	hint->ai_protocol
-	  = hint->ai_socktype == SOCK_DGRAM ? IPPROTO_UDP : IPPROTO_TCP;
-	break;
-      }
-
-  return parse_connection_spec_without_prefix (spec, hint);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/netstuff.h ./gdb/gdbsupport/netstuff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/netstuff.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/netstuff.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,76 +0,0 @@
-/* Operations on network stuff.
-   Copyright (C) 2018-2020 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 COMMON_NETSTUFF_H
-#define COMMON_NETSTUFF_H
-
-#include <string>
-
-/* Like NI_MAXHOST/NI_MAXSERV, but enough for numeric forms.  */
-#define GDB_NI_MAX_ADDR 64
-#define GDB_NI_MAX_PORT 16
-
-/* Helper class to guarantee that we always call 'freeaddrinfo'.  */
-
-class scoped_free_addrinfo
-{
-public:
-  /* Default constructor.  */
-  explicit scoped_free_addrinfo (struct addrinfo *ainfo)
-    : m_res (ainfo)
-  {
-  }
-
-  /* Destructor responsible for free'ing M_RES by calling
-     'freeaddrinfo'.  */
-  ~scoped_free_addrinfo ();
-
-  DISABLE_COPY_AND_ASSIGN (scoped_free_addrinfo);
-
-private:
-  /* The addrinfo resource.  */
-  struct addrinfo *m_res;
-};
-
-/* The struct we return after parsing the connection spec.  */
-
-struct parsed_connection_spec
-{
-  /* The hostname.  */
-  std::string host_str;
-
-  /* The port, if any.  */
-  std::string port_str;
-};
-
-
-/* Parse SPEC (which is a string in the form of "ADDR:PORT") and
-   return a 'parsed_connection_spec' structure with the proper fields
-   filled in.  Also adjust HINT accordingly.  */
-extern parsed_connection_spec
-  parse_connection_spec_without_prefix (std::string spec,
-					struct addrinfo *hint);
-
-/* Parse SPEC (which is a string in the form of
-   "[tcp[6]:|udp[6]:]ADDR:PORT") and return a 'parsed_connection_spec'
-   structure with the proper fields filled in.  Also adjust HINT
-   accordingly.  */
-extern parsed_connection_spec parse_connection_spec (const char *spec,
-						     struct addrinfo *hint);
-
-#endif /* COMMON_NETSTUFF_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/new-op.c ./gdb/gdbsupport/new-op.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/new-op.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/new-op.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,95 +0,0 @@
-/* Replace operator new/new[], for GDB, the GNU debugger.
-
-   Copyright (C) 2016-2020 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/>.  */
-
-/* GCC does not understand __has_feature.  */
-#if !defined(__has_feature)
-# define __has_feature(x) 0
-#endif
-
-#if !__has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__)
-#include "common-defs.h"
-#include "host-defs.h"
-#include <new>
-
-/* Override operator new / operator new[], in order to internal_error
-   on allocation failure and thus query the user for abort/core
-   dump/continue, just like xmalloc does.  We don't do this from a
-   new-handler function instead (std::set_new_handler) because we want
-   to catch allocation errors from within global constructors too.
-
-   Skip overriding if building with -fsanitize=address though.
-   Address sanitizer wants to override operator new/delete too in
-   order to detect malloc+delete and new+free mismatches.  Our
-   versions would mask out ASan's, with the result of losing that
-   useful mismatch detection.
-
-   Note that C++ implementations could either have their throw
-   versions call the nothrow versions (libstdc++), or the other way
-   around (clang/libc++).  For that reason, we replace both throw and
-   nothrow variants and call malloc directly.  */
-
-void *
-operator new (std::size_t sz)
-{
-  /* malloc (0) is unpredictable; avoid it.  */
-  if (sz == 0)
-    sz = 1;
-
-  void *p = malloc (sz);	/* ARI: malloc */
-  if (p == NULL)
-    {
-      /* If the user decides to continue debugging, throw a
-	 gdb_quit_bad_alloc exception instead of a regular QUIT
-	 gdb_exception.  The former extends both std::bad_alloc and a
-	 QUIT gdb_exception.  This is necessary because operator new
-	 can only ever throw std::bad_alloc, or something that extends
-	 it.  */
-      try
-	{
-	  malloc_failure (sz);
-	}
-      catch (gdb_exception &ex)
-	{
-	  throw gdb_quit_bad_alloc (std::move (ex));
-	}
-    }
-  return p;
-}
-
-void *
-operator new (std::size_t sz, const std::nothrow_t&) noexcept
-{
-  /* malloc (0) is unpredictable; avoid it.  */
-  if (sz == 0)
-    sz = 1;
-  return malloc (sz);		/* ARI: malloc */
-}
-
-void *
-operator new[] (std::size_t sz)
-{
-   return ::operator new (sz);
-}
-
-void*
-operator new[] (std::size_t sz, const std::nothrow_t&) noexcept
-{
-  return ::operator new (sz, std::nothrow);
-}
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/next-iterator.h ./gdb/gdbsupport/next-iterator.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/next-iterator.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/next-iterator.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,102 +0,0 @@
-/* A "next" iterator for GDB, the GNU debugger.
-   Copyright (C) 2019-2020 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 COMMON_NEXT_ITERATOR_H
-#define COMMON_NEXT_ITERATOR_H
-
-/* An iterator that uses the 'next' field of a type to iterate.  This
-   can be used with various GDB types that are stored as linked
-   lists.  */
-
-template<typename T>
-struct next_iterator
-{
-  typedef next_iterator self_type;
-  typedef T *value_type;
-  typedef T *&reference;
-  typedef T **pointer;
-  typedef std::forward_iterator_tag iterator_category;
-  typedef int difference_type;
-
-  explicit next_iterator (T *item)
-    : m_item (item)
-  {
-  }
-
-  /* Create a one-past-the-end iterator.  */
-  next_iterator ()
-    : m_item (nullptr)
-  {
-  }
-
-  value_type operator* () const
-  {
-    return m_item;
-  }
-
-  bool operator== (const self_type &other) const
-  {
-    return m_item == other.m_item;
-  }
-
-  bool operator!= (const self_type &other) const
-  {
-    return m_item != other.m_item;
-  }
-
-  self_type &operator++ ()
-  {
-    m_item = m_item->next;
-    return *this;
-  }
-
-private:
-
-  T *m_item;
-};
-
-/* A range adapter that allows iterating over a linked list.  */
-
-template<typename T, typename Iterator = next_iterator<T>>
-class next_adapter
-{
-public:
-
-  explicit next_adapter (T *item)
-    : m_item (item)
-  {
-  }
-
-  using iterator = Iterator;
-
-  iterator begin () const
-  {
-    return iterator (m_item);
-  }
-
-  iterator end () const
-  {
-    return iterator ();
-  }
-
-private:
-
-  T *m_item;
-};
-
-#endif /* COMMON_NEXT_ITERATOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/observable.h ./gdb/gdbsupport/observable.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/observable.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/observable.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,119 +0,0 @@
-/* Observers
-
-   Copyright (C) 2016-2020 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 COMMON_OBSERVABLE_H
-#define COMMON_OBSERVABLE_H
-
-#include <algorithm>
-#include <functional>
-#include <vector>
-
-namespace gdb
-{
-
-namespace observers
-{
-
-extern unsigned int observer_debug;
-
-/* An observer is an entity which is interested in being notified
-   when GDB reaches certain states, or certain events occur in GDB.
-   The entity being observed is called the observable.  To receive
-   notifications, the observer attaches a callback to the observable.
-   One observable can have several observers.
-
-   The observer implementation is also currently not reentrant.  In
-   particular, it is therefore not possible to call the attach or
-   detach routines during a notification.  */
-
-/* The type of a key that can be passed to attach, which can be passed
-   to detach to remove associated observers.  Tokens have address
-   identity, and are thus usually const globals.  */
-struct token
-{
-  token () = default;
-
-  DISABLE_COPY_AND_ASSIGN (token);
-};
-
-template<typename... T>
-class observable
-{
-public:
-
-  typedef std::function<void (T...)> func_type;
-
-  explicit observable (const char *name)
-    : m_name (name)
-  {
-  }
-
-  DISABLE_COPY_AND_ASSIGN (observable);
-
-  /* Attach F as an observer to this observable.  F cannot be
-     detached.  */
-  void attach (const func_type &f)
-  {
-    m_observers.emplace_back (nullptr, f);
-  }
-
-  /* Attach F as an observer to this observable.  T is a reference to
-     a token that can be used to later remove F.  */
-  void attach (const func_type &f, const token &t)
-  {
-    m_observers.emplace_back (&t, f);
-  }
-
-  /* Remove observers associated with T from this observable.  T is
-     the token that was previously passed to any number of "attach"
-     calls.  */
-  void detach (const token &t)
-  {
-    auto iter = std::remove_if (m_observers.begin (),
-				m_observers.end (),
-				[&] (const std::pair<const token *,
-				     func_type> &e)
-				{
-				  return e.first == &t;
-				});
-
-    m_observers.erase (iter, m_observers.end ());
-  }
-
-  /* Notify all observers that are attached to this observable.  */
-  void notify (T... args) const
-  {
-    if (observer_debug)
-      fprintf_unfiltered (gdb_stdlog, "observable %s notify() called\n",
-			  m_name);
-    for (auto &&e : m_observers)
-      e.second (args...);
-  }
-
-private:
-
-  std::vector<std::pair<const token *, func_type>> m_observers;
-  const char *m_name;
-};
-
-} /* namespace observers */
-
-} /* namespace gdb */
-
-#endif /* COMMON_OBSERVABLE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/offset-type.h ./gdb/gdbsupport/offset-type.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/offset-type.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/offset-type.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,133 +0,0 @@
-/* Offset types for GDB.
-
-   Copyright (C) 2017-2020 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/>.  */
-
-/* Define an "offset" type.  Offset types are distinct integer types
-   that are used to represent an offset into anything that is
-   addressable.  For example, an offset into a DWARF debug section.
-   The idea is catch mixing unrelated offset types at compile time, in
-   code that needs to manipulate multiple different kinds of offsets
-   that are easily confused.  They're safer to use than native
-   integers, because they have no implicit conversion to anything.
-   And also, since they're implemented as "enum class" strong
-   typedefs, they're still integers ABI-wise, making them a bit more
-   efficient than wrapper structs on some ABIs.
-
-   Some properties of offset types, loosely modeled on pointers:
-
-   - You can compare offsets of the same type for equality and order.
-     You can't compare an offset with an unrelated type.
-
-   - You can add/substract an integer to/from an offset, which gives
-     you back a shifted offset.
-
-   - You can subtract two offsets of the same type, which gives you
-     back the delta as an integer (of the enum class's underlying
-     type), not as an offset type.
-
-   - You can't add two offsets of the same type, as that would not
-     make sense.
-
-   However, unlike pointers, you can't deference offset types.  */
-
-#ifndef COMMON_OFFSET_TYPE_H
-#define COMMON_OFFSET_TYPE_H
-
-/* Declare TYPE as being an offset type.  This declares the type and
-   enables the operators defined below.  */
-#define DEFINE_OFFSET_TYPE(TYPE, UNDERLYING)	\
-  enum class TYPE : UNDERLYING {};		\
-  void is_offset_type (TYPE)
-
-/* The macro macro is all you need to know use offset types.  The rest
-   below is all implementation detail.  */
-
-/* For each enum class type that you want to support arithmetic
-   operators, declare an "is_offset_type" overload that has exactly
-   one parameter, of type that enum class.  E.g.,:
-
-     void is_offset_type (sect_offset);
-
-   The function does not need to be defined, only declared.
-   DEFINE_OFFSET_TYPE declares this.
-
-   A function declaration is preferred over a traits type, because the
-   former allows calling the DEFINE_OFFSET_TYPE macro inside a
-   namespace to define the corresponding offset type in that
-   namespace.  The compiler finds the corresponding is_offset_type
-   function via ADL.
-*/
-
-/* Adding or subtracting an integer to an offset type shifts the
-   offset.  This is like "PTR = PTR + INT" and "PTR += INT".  */
-
-#define DEFINE_OFFSET_ARITHM_OP(OP)					\
-  template<typename E,							\
-	   typename = decltype (is_offset_type (std::declval<E> ()))>	\
-  constexpr E								\
-  operator OP (E lhs, typename std::underlying_type<E>::type rhs)	\
-  {									\
-    using underlying = typename std::underlying_type<E>::type;		\
-    return (E) (static_cast<underlying> (lhs) OP rhs);			\
-  }									\
-									\
-  template<typename E,							\
-	   typename = decltype (is_offset_type (std::declval<E> ()))>	\
-  constexpr E								\
-  operator OP (typename std::underlying_type<E>::type lhs, E rhs)	\
-  {									\
-    using underlying = typename std::underlying_type<E>::type;		\
-    return (E) (lhs OP static_cast<underlying> (rhs));			\
-  }									\
-									\
-  template<typename E,							\
-	   typename = decltype (is_offset_type (std::declval<E> ()))>	\
-  E &									\
-  operator OP ## = (E &lhs, typename std::underlying_type<E>::type rhs)	\
-  {									\
-    using underlying = typename std::underlying_type<E>::type;		\
-    lhs = (E) (static_cast<underlying> (lhs) OP rhs);			\
-    return lhs;								\
-  }
-
-DEFINE_OFFSET_ARITHM_OP(+)
-DEFINE_OFFSET_ARITHM_OP(-)
-
-/* Adding two offset types doesn't make sense, just like "PTR + PTR"
-   doesn't make sense.  This is defined as a deleted function so that
-   a compile error easily brings you to this comment.  */
-
-template<typename E,
-	 typename = decltype (is_offset_type (std::declval<E> ()))>
-constexpr typename std::underlying_type<E>::type
-operator+ (E lhs, E rhs) = delete;
-
-/* Subtracting two offset types, however, gives you back the
-   difference between the offsets, as an underlying type.  Similar to
-   how "PTR2 - PTR1" returns a ptrdiff_t.  */
-
-template<typename E,
-	 typename = decltype (is_offset_type (std::declval<E> ()))>
-constexpr typename std::underlying_type<E>::type
-operator- (E lhs, E rhs)
-{
-  using underlying = typename std::underlying_type<E>::type;
-  return static_cast<underlying> (lhs) - static_cast<underlying> (rhs);
-}
-
-#endif /* COMMON_OFFSET_TYPE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/parallel-for.h ./gdb/gdbsupport/parallel-for.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/parallel-for.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/parallel-for.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,86 +0,0 @@
-/* Parallel for loops
-
-   Copyright (C) 2019-2020 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 GDBSUPPORT_PARALLEL_FOR_H
-#define GDBSUPPORT_PARALLEL_FOR_H
-
-#include <algorithm>
-#if CXX_STD_THREAD
-#include <thread>
-#include "gdbsupport/thread-pool.h"
-#endif
-
-namespace gdb
-{
-
-/* A very simple "parallel for".  This splits the range of iterators
-   into subranges, and then passes each subrange to the callback.  The
-   work may or may not be done in separate threads.
-
-   This approach was chosen over having the callback work on single
-   items because it makes it simple for the caller to do
-   once-per-subrange initialization and destruction.  */
-
-template<class RandomIt, class RangeFunction>
-void
-parallel_for_each (RandomIt first, RandomIt last, RangeFunction callback)
-{
-#if CXX_STD_THREAD
-  /* So we can use a local array below.  */
-  const size_t local_max = 16;
-  size_t n_threads = std::min (thread_pool::g_thread_pool->thread_count (),
-			       local_max);
-  size_t n_actual_threads = 0;
-  std::future<void> futures[local_max];
-
-  size_t n_elements = last - first;
-  if (n_threads > 1)
-    {
-      /* Arbitrarily require that there should be at least 10 elements
-	 in a thread.  */
-      if (n_elements / n_threads < 10)
-	n_threads = std::max (n_elements / 10, (size_t) 1);
-      size_t elts_per_thread = n_elements / n_threads;
-      n_actual_threads = n_threads - 1;
-      for (int i = 0; i < n_actual_threads; ++i)
-	{
-	  RandomIt end = first + elts_per_thread;
-	  auto task = [=] ()
-		      {
-			callback (first, end);
-		      };
-
-	  futures[i] = gdb::thread_pool::g_thread_pool->post_task (task);
-	  first = end;
-	}
-    }
-#endif /* CXX_STD_THREAD */
-
-  /* Process all the remaining elements in the main thread.  */
-  callback (first, last);
-
-#if CXX_STD_THREAD
-  for (int i = 0; i < n_actual_threads; ++i)
-    futures[i].wait ();
-#endif /* CXX_STD_THREAD */
-}
-
-}
-
-#endif /* GDBSUPPORT_PARALLEL_FOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/pathstuff.c ./gdb/gdbsupport/pathstuff.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/pathstuff.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/pathstuff.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,290 +0,0 @@
-/* Path manipulation routines for GDB and gdbserver.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "pathstuff.h"
-#include "host-defs.h"
-#include "filenames.h"
-#include "gdb_tilde_expand.h"
-
-#ifdef USE_WIN32API
-#include <windows.h>
-#endif
-
-/* See gdbsupport/pathstuff.h.  */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_realpath (const char *filename)
-{
-/* On most hosts, we rely on canonicalize_file_name to compute
-   the FILENAME's realpath.
-
-   But the situation is slightly more complex on Windows, due to some
-   versions of GCC which were reported to generate paths where
-   backlashes (the directory separator) were doubled.  For instance:
-      c:\\some\\double\\slashes\\dir
-   ... instead of ...
-      c:\some\double\slashes\dir
-   Those double-slashes were getting in the way when comparing paths,
-   for instance when trying to insert a breakpoint as follow:
-      (gdb) b c:/some/double/slashes/dir/foo.c:4
-      No source file named c:/some/double/slashes/dir/foo.c:4.
-      (gdb) b c:\some\double\slashes\dir\foo.c:4
-      No source file named c:\some\double\slashes\dir\foo.c:4.
-   To prevent this from happening, we need this function to always
-   strip those extra backslashes.  While canonicalize_file_name does
-   perform this simplification, it only works when the path is valid.
-   Since the simplification would be useful even if the path is not
-   valid (one can always set a breakpoint on a file, even if the file
-   does not exist locally), we rely instead on GetFullPathName to
-   perform the canonicalization.  */
-
-#if defined (_WIN32)
-  {
-    char buf[MAX_PATH];
-    DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
-
-    /* The file system is case-insensitive but case-preserving.
-       So it is important we do not lowercase the path.  Otherwise,
-       we might not be able to display the original casing in a given
-       path.  */
-    if (len > 0 && len < MAX_PATH)
-      return make_unique_xstrdup (buf);
-  }
-#else
-  {
-    char *rp = canonicalize_file_name (filename);
-
-    if (rp != NULL)
-      return gdb::unique_xmalloc_ptr<char> (rp);
-  }
-#endif
-
-  /* This system is a lost cause, just dup the buffer.  */
-  return make_unique_xstrdup (filename);
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_realpath_keepfile (const char *filename)
-{
-  const char *base_name = lbasename (filename);
-  char *dir_name;
-  char *result;
-
-  /* Extract the basename of filename, and return immediately
-     a copy of filename if it does not contain any directory prefix.  */
-  if (base_name == filename)
-    return make_unique_xstrdup (filename);
-
-  dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
-  /* Allocate enough space to store the dir_name + plus one extra
-     character sometimes needed under Windows (see below), and
-     then the closing \000 character.  */
-  strncpy (dir_name, filename, base_name - filename);
-  dir_name[base_name - filename] = '\000';
-
-#ifdef HAVE_DOS_BASED_FILE_SYSTEM
-  /* We need to be careful when filename is of the form 'd:foo', which
-     is equivalent of d:./foo, which is totally different from d:/foo.  */
-  if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
-    {
-      dir_name[2] = '.';
-      dir_name[3] = '\000';
-    }
-#endif
-
-  /* Canonicalize the directory prefix, and build the resulting
-     filename.  If the dirname realpath already contains an ending
-     directory separator, avoid doubling it.  */
-  gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name);
-  const char *real_path = path_storage.get ();
-  if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
-    result = concat (real_path, base_name, (char *) NULL);
-  else
-    result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
-
-  return gdb::unique_xmalloc_ptr<char> (result);
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_abspath (const char *path)
-{
-  gdb_assert (path != NULL && path[0] != '\0');
-
-  if (path[0] == '~')
-    return gdb_tilde_expand_up (path);
-
-  if (IS_ABSOLUTE_PATH (path))
-    return make_unique_xstrdup (path);
-
-  /* Beware the // my son, the Emacs barfs, the botch that catch...  */
-  return gdb::unique_xmalloc_ptr<char>
-    (concat (current_directory,
-	     IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
-	     ? "" : SLASH_STRING,
-	     path, (char *) NULL));
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-const char *
-child_path (const char *parent, const char *child)
-{
-  /* The child path must start with the parent path.  */
-  size_t parent_len = strlen (parent);
-  if (filename_ncmp (parent, child, parent_len) != 0)
-    return NULL;
-
-  /* The parent path must be a directory and the child must contain at
-     least one component underneath the parent.  */
-  const char *child_component;
-  if (parent_len > 0 && IS_DIR_SEPARATOR (parent[parent_len - 1]))
-    {
-      /* The parent path ends in a directory separator, so it is a
-	 directory.  The first child component starts after the common
-	 prefix.  */
-      child_component = child + parent_len;
-    }
-  else
-    {
-      /* The parent path does not end in a directory separator.  The
-	 first character in the child after the common prefix must be
-	 a directory separator.
-
-	 Note that CHILD must hold at least parent_len characters for
-	 filename_ncmp to return zero.  If the character at parent_len
-	 is nul due to CHILD containing the same path as PARENT, the
-	 IS_DIR_SEPARATOR check will fail here.  */
-      if (!IS_DIR_SEPARATOR (child[parent_len]))
-	return NULL;
-
-      /* The first child component starts after the separator after the
-	 common prefix.  */
-      child_component = child + parent_len + 1;
-    }
-
-  /* The child must contain at least one non-separator character after
-     the parent.  */
-  while (*child_component != '\0')
-    {
-      if (!IS_DIR_SEPARATOR (*child_component))
-	return child_component;
-
-      child_component++;
-    }
-  return NULL;
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-bool
-contains_dir_separator (const char *path)
-{
-  for (; *path != '\0'; path++)
-    {
-      if (IS_DIR_SEPARATOR (*path))
-	return true;
-    }
-
-  return false;
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-std::string
-get_standard_cache_dir ()
-{
-#ifdef __APPLE__
-#define HOME_CACHE_DIR "Library/Caches"
-#else
-#define HOME_CACHE_DIR ".cache"
-#endif
-
-#ifndef __APPLE__
-  const char *xdg_cache_home = getenv ("XDG_CACHE_HOME");
-  if (xdg_cache_home != NULL)
-    {
-      /* Make sure the path is absolute and tilde-expanded.  */
-      gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home));
-      return string_printf ("%s/gdb", abs.get ());
-    }
-#endif
-
-  const char *home = getenv ("HOME");
-  if (home != NULL)
-    {
-      /* Make sure the path is absolute and tilde-expanded.  */
-      gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home));
-      return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ());
-    }
-
-  return {};
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-std::string
-get_standard_temp_dir ()
-{
-#ifdef WIN32
-  const char *tmp = getenv ("TMP");
-  if (tmp != nullptr)
-    return tmp;
-
-  tmp = getenv ("TEMP");
-  if (tmp != nullptr)
-    return tmp;
-
-  error (_("Couldn't find temp dir path, both TMP and TEMP are unset."));
-
-#else
-  const char *tmp = getenv ("TMPDIR");
-  if (tmp != nullptr)
-    return tmp;
-
-  return "/tmp";
-#endif
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-const char *
-get_shell ()
-{
-  const char *ret = getenv ("SHELL");
-  if (ret == NULL)
-    ret = "/bin/sh";
-
-  return ret;
-}
-
-/* See gdbsupport/pathstuff.h.  */
-
-gdb::char_vector
-make_temp_filename (const std::string &f)
-{
-  gdb::char_vector filename_temp (f.length () + 8);
-  strcpy (filename_temp.data (), f.c_str ());
-  strcat (filename_temp.data () + f.size (), "-XXXXXX");
-  return filename_temp;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/pathstuff.h ./gdb/gdbsupport/pathstuff.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/pathstuff.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/pathstuff.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,95 +0,0 @@
-/* Path manipulation routines for GDB and gdbserver.
-
-   Copyright (C) 1986-2020 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 COMMON_PATHSTUFF_H
-#define COMMON_PATHSTUFF_H
-
-#include "gdbsupport/byte-vector.h"
-
-/* Path utilities.  */
-
-/* Return the real path of FILENAME, expanding all the symbolic links.
-
-   Contrary to "gdb_abspath", this function does not use
-   CURRENT_DIRECTORY for path expansion.  Instead, it relies on the
-   current working directory (CWD) of GDB or gdbserver.  */
-
-extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *filename);
-
-/* Return a copy of FILENAME, with its directory prefix canonicalized
-   by gdb_realpath.  */
-
-extern gdb::unique_xmalloc_ptr<char>
-  gdb_realpath_keepfile (const char *filename);
-
-/* Return PATH in absolute form, performing tilde-expansion if necessary.
-   PATH cannot be NULL or the empty string.
-   This does not resolve symlinks however, use gdb_realpath for that.
-
-   Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY
-   for the path expansion.  This may lead to scenarios the current
-   working directory (CWD) is different than CURRENT_DIRECTORY.  */
-
-extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path);
-
-/* If the path in CHILD is a child of the path in PARENT, return a
-   pointer to the first component in the CHILD's pathname below the
-   PARENT.  Otherwise, return NULL.  */
-
-extern const char *child_path (const char *parent, const char *child);
-
-/* Return whether PATH contains a directory separator character.  */
-
-extern bool contains_dir_separator (const char *path);
-
-/* Get the usual user cache directory for the current platform.
-
-   On Linux, it follows the XDG Base Directory specification: use
-   $XDG_CACHE_HOME/gdb if the XDG_CACHE_HOME environment variable is
-   defined, otherwise $HOME/.cache.
-
-   On macOS, it follows the local convention and uses
-   ~/Library/Caches/gdb.
-
-  The return value is absolute and tilde-expanded.  Return an empty
-  string if neither XDG_CACHE_HOME (on Linux) or HOME are defined.  */
-
-extern std::string get_standard_cache_dir ();
-
-/* Get the usual temporary directory for the current platform.
-
-   On Windows, this is the TMP or TEMP environment variable.
-
-   On the rest, this is the TMPDIR environment variable, if defined, else /tmp.
-
-   Throw an exception on error.  */
-
-extern std::string get_standard_temp_dir ();
-
-/* Return the file name of the user's shell.  Normally this comes from
-   the SHELL environment variable.  */
-
-extern const char *get_shell ();
-
-/* Make a filename suitable to pass to mkstemp based on F (e.g.
-   /tmp/foo -> /tmp/foo-XXXXXX).  */
-
-extern gdb::char_vector make_temp_filename (const std::string &f);
-
-#endif /* COMMON_PATHSTUFF_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/poison.h ./gdb/gdbsupport/poison.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/poison.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/poison.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,248 +0,0 @@
-/* Poison symbols at compile time.
-
-   Copyright (C) 2017-2020 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 COMMON_POISON_H
-#define COMMON_POISON_H
-
-#include "traits.h"
-#include "obstack.h"
-
-/* Poison memset of non-POD types.  The idea is catching invalid
-   initialization of non-POD structs that is easy to be introduced as
-   side effect of refactoring.  For example, say this:
-
- struct S { VEC(foo_s) *m_data; };
-
-is converted to this at some point:
-
- struct S {
-   S() { m_data.reserve (10); }
-   std::vector<foo> m_data;
- };
-
-and old code was initializing S objects like this:
-
- struct S s;
- memset (&s, 0, sizeof (S)); // whoops, now wipes vector.
-
-Declaring memset as deleted for non-POD types makes the memset above
-be a compile-time error.  */
-
-/* Helper for SFINAE.  True if "T *" is memsettable.  I.e., if T is
-   either void, or POD.  */
-template<typename T>
-struct IsMemsettable
-  : gdb::Or<std::is_void<T>,
-	    std::is_pod<T>>
-{};
-
-template <typename T,
-	  typename = gdb::Requires<gdb::Not<IsMemsettable<T>>>>
-void *memset (T *s, int c, size_t n) = delete;
-
-#if HAVE_IS_TRIVIALLY_COPYABLE
-
-/* Similarly, poison memcpy and memmove of non trivially-copyable
-   types, which is undefined.  */
-
-/* True if "T *" is relocatable.  I.e., copyable with memcpy/memmove.
-   I.e., T is either trivially copyable, or void.  */
-template<typename T>
-struct IsRelocatable
-  : gdb::Or<std::is_void<T>,
-	    std::is_trivially_copyable<T>>
-{};
-
-/* True if both source and destination are relocatable.  */
-
-template <typename D, typename S>
-using BothAreRelocatable
-  = gdb::And<IsRelocatable<D>, IsRelocatable<S>>;
-
-template <typename D, typename S,
-	  typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>>
-void *memcpy (D *dest, const S *src, size_t n) = delete;
-
-template <typename D, typename S,
-	  typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>>
-void *memmove (D *dest, const S *src, size_t n) = delete;
-
-#endif /* HAVE_IS_TRIVIALLY_COPYABLE */
-
-/* Poison XNEW and friends to catch usages of malloc-style allocations on
-   objects that require new/delete.  */
-
-template<typename T>
-#if HAVE_IS_TRIVIALLY_CONSTRUCTIBLE
-using IsMallocable = std::is_trivially_constructible<T>;
-#else
-using IsMallocable = std::true_type;
-#endif
-
-template<typename T>
-using IsFreeable = gdb::Or<std::is_trivially_destructible<T>, std::is_void<T>>;
-
-template <typename T, typename = gdb::Requires<gdb::Not<IsFreeable<T>>>>
-void free (T *ptr) = delete;
-
-template<typename T>
-static T *
-xnew ()
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XNEW with a non-POD \
-data type.  Use operator new instead.");
-  return XNEW (T);
-}
-
-#undef XNEW
-#define XNEW(T) xnew<T>()
-
-template<typename T>
-static T *
-xcnew ()
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XCNEW with a non-POD \
-data type.  Use operator new instead.");
-  return XCNEW (T);
-}
-
-#undef XCNEW
-#define XCNEW(T) xcnew<T>()
-
-template<typename T>
-static void
-xdelete (T *p)
-{
-  static_assert (IsFreeable<T>::value, "Trying to use XDELETE with a non-POD \
-data type.  Use operator delete instead.");
-  XDELETE (p);
-}
-
-#undef XDELETE
-#define XDELETE(P) xdelete (P)
-
-template<typename T>
-static T *
-xnewvec (size_t n)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XNEWVEC with a \
-non-POD data type.  Use operator new[] (or std::vector) instead.");
-  return XNEWVEC (T, n);
-}
-
-#undef XNEWVEC
-#define XNEWVEC(T, N) xnewvec<T> (N)
-
-template<typename T>
-static T *
-xcnewvec (size_t n)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XCNEWVEC with a \
-non-POD data type.  Use operator new[] (or std::vector) instead.");
-  return XCNEWVEC (T, n);
-}
-
-#undef XCNEWVEC
-#define XCNEWVEC(T, N) xcnewvec<T> (N)
-
-template<typename T>
-static T *
-xresizevec (T *p, size_t n)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVEC with a \
-non-POD data type.");
-  return XRESIZEVEC (T, p, n);
-}
-
-#undef XRESIZEVEC
-#define XRESIZEVEC(T, P, N) xresizevec<T> (P, N)
-
-template<typename T>
-static void
-xdeletevec (T *p)
-{
-  static_assert (IsFreeable<T>::value, "Trying to use XDELETEVEC with a \
-non-POD data type.  Use operator delete[] (or std::vector) instead.");
-  XDELETEVEC (p);
-}
-
-#undef XDELETEVEC
-#define XDELETEVEC(P) xdeletevec (P)
-
-template<typename T>
-static T *
-xnewvar (size_t s)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XNEWVAR with a \
-non-POD data type.");
-  return XNEWVAR (T, s);;
-}
-
-#undef XNEWVAR
-#define XNEWVAR(T, S) xnewvar<T> (S)
-
-template<typename T>
-static T *
-xcnewvar (size_t s)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XCNEWVAR with a \
-non-POD data type.");
-  return XCNEWVAR (T, s);
-}
-
-#undef XCNEWVAR
-#define XCNEWVAR(T, S) xcnewvar<T> (S)
-
-template<typename T>
-static T *
-xresizevar (T *p, size_t s)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVAR with a \
-non-POD data type.");
-  return XRESIZEVAR (T, p, s);
-}
-
-#undef XRESIZEVAR
-#define XRESIZEVAR(T, P, S) xresizevar<T> (P, S)
-
-template<typename T>
-static T *
-xobnew (obstack *ob)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XOBNEW with a \
-non-POD data type.");
-  return XOBNEW (ob, T);
-}
-
-#undef XOBNEW
-#define XOBNEW(O, T) xobnew<T> (O)
-
-template<typename T>
-static T *
-xobnewvec (obstack *ob, size_t n)
-{
-  static_assert (IsMallocable<T>::value, "Trying to use XOBNEWVEC with a \
-non-POD data type.");
-  return XOBNEWVEC (ob, T, n);
-}
-
-#undef XOBNEWVEC
-#define XOBNEWVEC(O, T, N) xobnewvec<T> (O, N)
-
-#endif /* COMMON_POISON_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/preprocessor.h ./gdb/gdbsupport/preprocessor.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/preprocessor.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/preprocessor.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,35 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_PREPROCESSOR_H
-#define COMMON_PREPROCESSOR_H
-
-/* Generally useful preprocessor bits.  */
-
-/* Concatenate two tokens.  */
-#define CONCAT_1(a, b) a ## b
-#define CONCAT(a, b) CONCAT_1 (a, b)
-
-/* Stringification.  */
-#define STRINGIFY_1(x) #x
-#define STRINGIFY(x) STRINGIFY_1 (x)
-
-/* Escape parens out.  Useful if you need to pass an argument that
-   includes commas to another macro.  */
-#define ESC_PARENS(...) __VA_ARGS__
-
-#endif /* COMMON_PREPROCESSOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/print-utils.c ./gdb/gdbsupport/print-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/print-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/print-utils.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,326 +0,0 @@
-/* Cell-based print utility routines for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "print-utils.h"
-/* Temporary storage using circular buffer.  */
-
-/* Number of cells in the circular buffer.  */
-#define NUMCELLS 16
-
-/* Return the next entry in the circular buffer.  */
-
-char *
-get_print_cell (void)
-{
-  static char buf[NUMCELLS][PRINT_CELL_SIZE];
-  static int cell = 0;
-
-  if (++cell >= NUMCELLS)
-    cell = 0;
-  return buf[cell];
-}
-
-static char *
-decimal2str (const char *sign, ULONGEST addr, int width)
-{
-  /* Steal code from valprint.c:print_decimal().  Should this worry
-     about the real size of addr as the above does?  */
-  unsigned long temp[3];
-  char *str = get_print_cell ();
-  int i = 0;
-
-  do
-    {
-      temp[i] = addr % (1000 * 1000 * 1000);
-      addr /= (1000 * 1000 * 1000);
-      i++;
-      width -= 9;
-    }
-  while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
-
-  width += 9;
-  if (width < 0)
-    width = 0;
-
-  switch (i)
-    {
-    case 1:
-      xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu", sign, width, temp[0]);
-      break;
-    case 2:
-      xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu", sign, width,
-		 temp[1], temp[0]);
-      break;
-    case 3:
-      xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu%09lu", sign, width,
-		 temp[2], temp[1], temp[0]);
-      break;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("failed internal consistency check"));
-    }
-
-  return str;
-}
-
-static char *
-octal2str (ULONGEST addr, int width)
-{
-  unsigned long temp[3];
-  char *str = get_print_cell ();
-  int i = 0;
-
-  do
-    {
-      temp[i] = addr % (0100000 * 0100000);
-      addr /= (0100000 * 0100000);
-      i++;
-      width -= 10;
-    }
-  while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
-
-  width += 10;
-  if (width < 0)
-    width = 0;
-
-  switch (i)
-    {
-    case 1:
-      if (temp[0] == 0)
-	xsnprintf (str, PRINT_CELL_SIZE, "%*o", width, 0);
-      else
-	xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo", width, temp[0]);
-      break;
-    case 2:
-      xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
-      break;
-    case 3:
-      xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo%010lo", width,
-		 temp[2], temp[1], temp[0]);
-      break;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("failed internal consistency check"));
-    }
-
-  return str;
-}
-
-/* See print-utils.h.  */
-
-char *
-pulongest (ULONGEST u)
-{
-  return decimal2str ("", u, 0);
-}
-
-/* See print-utils.h.  */
-
-char *
-plongest (LONGEST l)
-{
-  if (l < 0)
-    return decimal2str ("-", -l, 0);
-  else
-    return decimal2str ("", l, 0);
-}
-
-/* Eliminate warning from compiler on 32-bit systems.  */
-static int thirty_two = 32;
-
-/* See print-utils.h.  */
-
-char *
-phex (ULONGEST l, int sizeof_l)
-{
-  char *str;
-
-  switch (sizeof_l)
-    {
-    case 8:
-      str = get_print_cell ();
-      xsnprintf (str, PRINT_CELL_SIZE, "%08lx%08lx",
-		 (unsigned long) (l >> thirty_two),
-		 (unsigned long) (l & 0xffffffff));
-      break;
-    case 4:
-      str = get_print_cell ();
-      xsnprintf (str, PRINT_CELL_SIZE, "%08lx", (unsigned long) l);
-      break;
-    case 2:
-      str = get_print_cell ();
-      xsnprintf (str, PRINT_CELL_SIZE, "%04x", (unsigned short) (l & 0xffff));
-      break;
-    default:
-      str = phex (l, sizeof (l));
-      break;
-    }
-
-  return str;
-}
-
-/* See print-utils.h.  */
-
-char *
-phex_nz (ULONGEST l, int sizeof_l)
-{
-  char *str;
-
-  switch (sizeof_l)
-    {
-    case 8:
-      {
-	unsigned long high = (unsigned long) (l >> thirty_two);
-
-	str = get_print_cell ();
-	if (high == 0)
-	  xsnprintf (str, PRINT_CELL_SIZE, "%lx",
-		     (unsigned long) (l & 0xffffffff));
-	else
-	  xsnprintf (str, PRINT_CELL_SIZE, "%lx%08lx", high,
-		     (unsigned long) (l & 0xffffffff));
-	break;
-      }
-    case 4:
-      str = get_print_cell ();
-      xsnprintf (str, PRINT_CELL_SIZE, "%lx", (unsigned long) l);
-      break;
-    case 2:
-      str = get_print_cell ();
-      xsnprintf (str, PRINT_CELL_SIZE, "%x", (unsigned short) (l & 0xffff));
-      break;
-    default:
-      str = phex_nz (l, sizeof (l));
-      break;
-    }
-
-  return str;
-}
-
-/* See print-utils.h.  */
-
-char *
-hex_string (LONGEST num)
-{
-  char *result = get_print_cell ();
-
-  xsnprintf (result, PRINT_CELL_SIZE, "0x%s", phex_nz (num, sizeof (num)));
-  return result;
-}
-
-/* See print-utils.h.  */
-
-char *
-hex_string_custom (LONGEST num, int width)
-{
-  char *result = get_print_cell ();
-  char *result_end = result + PRINT_CELL_SIZE - 1;
-  const char *hex = phex_nz (num, sizeof (num));
-  int hex_len = strlen (hex);
-
-  if (hex_len > width)
-    width = hex_len;
-  if (width + 2 >= PRINT_CELL_SIZE)
-    internal_error (__FILE__, __LINE__, _("\
-hex_string_custom: insufficient space to store result"));
-
-  strcpy (result_end - width - 2, "0x");
-  memset (result_end - width, '0', width);
-  strcpy (result_end - hex_len, hex);
-  return result_end - width - 2;
-}
-
-/* See print-utils.h.  */
-
-char *
-int_string (LONGEST val, int radix, int is_signed, int width,
-	    int use_c_format)
-{
-  switch (radix)
-    {
-    case 16:
-      {
-	char *result;
-
-	if (width == 0)
-	  result = hex_string (val);
-	else
-	  result = hex_string_custom (val, width);
-	if (! use_c_format)
-	  result += 2;
-	return result;
-      }
-    case 10:
-      {
-	if (is_signed && val < 0)
-	  return decimal2str ("-", -val, width);
-	else
-	  return decimal2str ("", val, width);
-      }
-    case 8:
-      {
-	char *result = octal2str (val, width);
-
-	if (use_c_format || val == 0)
-	  return result;
-	else
-	  return result + 1;
-      }
-    default:
-      internal_error (__FILE__, __LINE__,
-		      _("failed internal consistency check"));
-    }
-}
-
-/* See print-utils.h.  */
-
-const char *
-core_addr_to_string (const CORE_ADDR addr)
-{
-  char *str = get_print_cell ();
-
-  strcpy (str, "0x");
-  strcat (str, phex (addr, sizeof (addr)));
-  return str;
-}
-
-/* See print-utils.h.  */
-
-const char *
-core_addr_to_string_nz (const CORE_ADDR addr)
-{
-  char *str = get_print_cell ();
-
-  strcpy (str, "0x");
-  strcat (str, phex_nz (addr, sizeof (addr)));
-  return str;
-}
-
-/* See print-utils.h.  */
-
-const char *
-host_address_to_string_1 (const void *addr)
-{
-  char *str = get_print_cell ();
-
-  xsnprintf (str, PRINT_CELL_SIZE, "0x%s",
-	     phex_nz ((uintptr_t) addr, sizeof (addr)));
-  return str;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/print-utils.h ./gdb/gdbsupport/print-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/print-utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/print-utils.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,85 +0,0 @@
-/* Cell-based print utility routines for GDB, the GNU debugger.
-
-   Copyright (C) 1986-2020 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 COMMON_PRINT_UTILS_H
-#define COMMON_PRINT_UTILS_H
-
-/* How many characters (including the terminating null byte) fit in a
-   cell.  */
-#define PRINT_CELL_SIZE 50
-
-/* %u for ULONGEST.  The result is stored in a circular static buffer,
-   NUMCELLS deep.  */
-
-extern char *pulongest (ULONGEST u);
-
-/* %d for LONGEST.  The result is stored in a circular static buffer,
-   NUMCELLS deep.  */
-
-extern char *plongest (LONGEST l);
-
-/* Convert a ULONGEST into a HEX string, like %lx, with leading zeros.
-   The result is stored in a circular static buffer, NUMCELLS deep.  */
-
-extern char *phex (ULONGEST l, int sizeof_l);
-
-/* Convert a ULONGEST into a HEX string, like %lx, without leading zeros.
-   The result is  stored in a circular static buffer, NUMCELLS deep.  */
-
-extern char *phex_nz (ULONGEST l, int sizeof_l);
-
-/* Converts a LONGEST to a C-format hexadecimal literal and stores it
-   in a static string.  Returns a pointer to this string.  */
-
-extern char *hex_string (LONGEST num);
-
-/* Converts a LONGEST number to a C-format hexadecimal literal and
-   stores it in a static string.  Returns a pointer to this string
-   that is valid until the next call.  The number is padded on the
-   left with 0s to at least WIDTH characters.  */
-
-extern char *hex_string_custom (LONGEST num, int width);
-
-/* Convert VAL to a numeral in the given radix.  For
- * radix 10, IS_SIGNED may be true, indicating a signed quantity;
- * otherwise VAL is interpreted as unsigned.  If WIDTH is supplied, 
- * it is the minimum width (0-padded if needed).  USE_C_FORMAT means
- * to use C format in all cases.  If it is false, then 'x' 
- * and 'o' formats do not include a prefix (0x or leading 0).  */
-
-extern char *int_string (LONGEST val, int radix, int is_signed, int width, 
-			 int use_c_format);	
-
-/* Convert a CORE_ADDR into a string.  */
-
-extern const char *core_addr_to_string (const CORE_ADDR addr);
-
-extern const char *core_addr_to_string_nz (const CORE_ADDR addr);
-
-extern const char *host_address_to_string_1 (const void *addr);
-
-/* Wrapper that avoids adding a pointless cast to all callers.  */
-#define host_address_to_string(ADDR) \
-  host_address_to_string_1 ((const void *) (ADDR))
-
-/* Return the next entry in the circular print buffer.  */
-
-extern char *get_print_cell (void);
-
-#endif /* COMMON_PRINT_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/ptid.c ./gdb/gdbsupport/ptid.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/ptid.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/ptid.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,26 +0,0 @@
-/* The ptid_t type and common functions operating on it.
-
-   Copyright (C) 1986-2020 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 "common-defs.h"
-#include "ptid.h"
-
-/* See ptid.h for these.  */
-
-ptid_t const null_ptid = ptid_t::make_null ();
-ptid_t const minus_one_ptid = ptid_t::make_minus_one ();
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/ptid.h ./gdb/gdbsupport/ptid.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/ptid.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/ptid.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,155 +0,0 @@
-/* The ptid_t type and common functions operating on it.
-
-   Copyright (C) 1986-2020 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 COMMON_PTID_H
-#define COMMON_PTID_H
-
-/* The ptid struct is a collection of the various "ids" necessary for
-   identifying the inferior process/thread being debugged.  This
-   consists of the process id (pid), lightweight process id (lwp) and
-   thread id (tid).  When manipulating ptids, the constructors,
-   accessors, and predicates declared in this file should be used.  Do
-   NOT access the struct ptid members directly.
-
-   process_stratum targets that handle threading themselves should
-   prefer using the ptid.lwp field, leaving the ptid.tid field for any
-   thread_stratum target that might want to sit on top.
-*/
-
-class ptid_t
-{
-public:
-  /* Must have a trivial defaulted default constructor so that the
-     type remains POD.  */
-  ptid_t () noexcept = default;
-
-  /* Make a ptid given the necessary PID, LWP, and TID components.
-
-     A ptid with only a PID (LWP and TID equal to zero) is usually used to
-     represent a whole process, including all its lwps/threads.  */
-
-  explicit constexpr ptid_t (int pid, long lwp = 0, long tid = 0)
-    : m_pid (pid), m_lwp (lwp), m_tid (tid)
-  {}
-
-  /* Fetch the pid (process id) component from the ptid.  */
-
-  constexpr int pid () const
-  { return m_pid; }
-
-  /* Return true if the ptid's lwp member is non-zero.  */
-
-  constexpr bool lwp_p () const
-  { return m_lwp != 0; }
-
-  /* Fetch the lwp (lightweight process) component from the ptid.  */
-
-  constexpr long lwp () const
-  { return m_lwp; }
-
-  /* Return true if the ptid's tid member is non-zero.  */
-
-  constexpr bool tid_p () const
-  { return m_tid != 0; }
-
-  /* Fetch the tid (thread id) component from a ptid.  */
-
-  constexpr long tid () const
-  { return m_tid; }
-
-  /* Return true if the ptid represents a whole process, including all its
-     lwps/threads.  Such ptids have the form of (pid, 0, 0), with
-     pid != -1.  */
-
-  constexpr bool is_pid () const
-  {
-    return (*this != make_null ()
-	    && *this != make_minus_one ()
-	    && m_lwp == 0
-	    && m_tid == 0);
-  }
-
-  /* Compare two ptids to see if they are equal.  */
-
-  constexpr bool operator== (const ptid_t &other) const
-  {
-    return (m_pid == other.m_pid
-	    && m_lwp == other.m_lwp
-	    && m_tid == other.m_tid);
-  }
-
-  /* Compare two ptids to see if they are different.  */
-
-  constexpr bool operator!= (const ptid_t &other) const
-  {
-    return !(*this == other);
-  }
-
-  /* Return true if the ptid matches FILTER.  FILTER can be the wild
-     card MINUS_ONE_PTID (all ptids match it); can be a ptid representing
-     a process (ptid.is_pid () returns true), in which case, all lwps and
-     threads of that given process match, lwps and threads of other
-     processes do not; or, it can represent a specific thread, in which
-     case, only that thread will match true.  The ptid must represent a
-     specific LWP or THREAD, it can never be a wild card.  */
-
-  constexpr bool matches (const ptid_t &filter) const
-  {
-    return (/* If filter represents any ptid, it's always a match.  */
-	    filter == make_minus_one ()
-	    /* If filter is only a pid, any ptid with that pid
-	       matches.  */
-	    || (filter.is_pid () && m_pid == filter.pid ())
-
-	    /* Otherwise, this ptid only matches if it's exactly equal
-	       to filter.  */
-	    || *this == filter);
-  }
-
-  /* Make a null ptid.  */
-
-  static constexpr ptid_t make_null ()
-  { return ptid_t (0, 0, 0); }
-
-  /* Make a minus one ptid.  */
-
-  static constexpr ptid_t make_minus_one ()
-  { return ptid_t (-1, 0, 0); }
-
-private:
-  /* Process id.  */
-  int m_pid;
-
-  /* Lightweight process id.  */
-  long m_lwp;
-
-  /* Thread id.  */
-  long m_tid;
-};
-
-/* The null or zero ptid, often used to indicate no process. */
-
-extern const ptid_t null_ptid;
-
-/* The (-1,0,0) ptid, often used to indicate either an error condition
-   or a "don't care" condition, i.e, "run all threads."  */
-
-extern const ptid_t minus_one_ptid;
-
-#endif /* COMMON_PTID_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/refcounted-object.h ./gdb/gdbsupport/refcounted-object.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/refcounted-object.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/refcounted-object.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-/* Base class of intrusively reference-counted objects.
-   Copyright (C) 2017-2020 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 COMMON_REFCOUNTED_OBJECT_H
-#define COMMON_REFCOUNTED_OBJECT_H
-
-/* Base class of intrusively reference-countable objects.
-   Incrementing and decrementing the reference count is an external
-   responsibility.  */
-
-class refcounted_object
-{
-public:
-  refcounted_object () = default;
-
-  /* Increase the refcount.  */
-  void incref ()
-  {
-    gdb_assert (m_refcount >= 0);
-    m_refcount++;
-  }
-
-  /* Decrease the refcount.  */
-  void decref ()
-  {
-    m_refcount--;
-    gdb_assert (m_refcount >= 0);
-  }
-
-  int refcount () const { return m_refcount; }
-
-private:
-  DISABLE_COPY_AND_ASSIGN (refcounted_object);
-
-  /* The reference count.  */
-  int m_refcount = 0;
-};
-
-/* A policy class to interface gdb::ref_ptr with a
-   refcounted_object.  */
-
-struct refcounted_object_ref_policy
-{
-  static void incref (refcounted_object *ptr)
-  {
-    ptr->incref ();
-  }
-
-  static void decref (refcounted_object *ptr)
-  {
-    ptr->decref ();
-  }
-};
-
-#endif /* COMMON_REFCOUNTED_OBJECT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/rsp-low.c ./gdb/gdbsupport/rsp-low.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/rsp-low.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/rsp-low.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,307 +0,0 @@
-/* Low-level RSP routines for GDB, the GNU debugger.
-
-   Copyright (C) 1988-2020 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 "common-defs.h"
-#include "rsp-low.h"
-
-/* See rsp-low.h.  */
-
-int
-fromhex (int a)
-{
-  if (a >= '0' && a <= '9')
-    return a - '0';
-  else if (a >= 'a' && a <= 'f')
-    return a - 'a' + 10;
-  else if (a >= 'A' && a <= 'F')
-    return a - 'A' + 10;
-  else
-    error (_("Reply contains invalid hex digit %d"), a);
-}
-
-/* See rsp-low.h.  */
-
-int
-tohex (int nib)
-{
-  if (nib < 10)
-    return '0' + nib;
-  else
-    return 'a' + nib - 10;
-}
-
-/* Encode 64 bits in 16 chars of hex.  */
-
-static const char hexchars[] = "0123456789abcdef";
-
-static int
-ishex (int ch, int *val)
-{
-  if ((ch >= 'a') && (ch <= 'f'))
-    {
-      *val = ch - 'a' + 10;
-      return 1;
-    }
-  if ((ch >= 'A') && (ch <= 'F'))
-    {
-      *val = ch - 'A' + 10;
-      return 1;
-    }
-  if ((ch >= '0') && (ch <= '9'))
-    {
-      *val = ch - '0';
-      return 1;
-    }
-  return 0;
-}
-
-/* See rsp-low.h.  */
-
-char *
-pack_nibble (char *buf, int nibble)
-{
-  *buf++ = hexchars[(nibble & 0x0f)];
-  return buf;
-}
-
-/* See rsp-low.h.  */
-
-char *
-pack_hex_byte (char *pkt, int byte)
-{
-  *pkt++ = hexchars[(byte >> 4) & 0xf];
-  *pkt++ = hexchars[(byte & 0xf)];
-  return pkt;
-}
-
-/* See rsp-low.h.  */
-
-const char *
-unpack_varlen_hex (const char *buff,	/* packet to parse */
-		   ULONGEST *result)
-{
-  int nibble;
-  ULONGEST retval = 0;
-
-  while (ishex (*buff, &nibble))
-    {
-      buff++;
-      retval = retval << 4;
-      retval |= nibble & 0x0f;
-    }
-  *result = retval;
-  return buff;
-}
-
-/* See rsp-low.h.  */
-
-int
-hex2bin (const char *hex, gdb_byte *bin, int count)
-{
-  int i;
-
-  for (i = 0; i < count; i++)
-    {
-      if (hex[0] == 0 || hex[1] == 0)
-	{
-	  /* Hex string is short, or of uneven length.
-	     Return the count that has been converted so far.  */
-	  return i;
-	}
-      *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
-      hex += 2;
-    }
-  return i;
-}
-
-/* See rsp-low.h.  */
-
-gdb::byte_vector
-hex2bin (const char *hex)
-{
-  size_t bin_len = strlen (hex) / 2;
-  gdb::byte_vector bin (bin_len);
-
-  hex2bin (hex, bin.data (), bin_len);
-
-  return bin;
-}
-
-/* See rsp-low.h.  */
-
-std::string
-hex2str (const char *hex)
-{
-  return hex2str (hex, strlen (hex));
-}
-
-/* See rsp-low.h.  */
-
-std::string
-hex2str (const char *hex, int count)
-{
-  std::string ret;
-
-  ret.reserve (count);
-  for (size_t i = 0; i < count; ++i)
-    {
-      if (hex[0] == '\0' || hex[1] == '\0')
-	{
-	  /* Hex string is short, or of uneven length.  Return what we
-	     have so far.  */
-	  return ret;
-	}
-      ret += fromhex (hex[0]) * 16 + fromhex (hex[1]);
-      hex += 2;
-    }
-
-  return ret;
-}
-
-/* See rsp-low.h.  */
-
-int
-bin2hex (const gdb_byte *bin, char *hex, int count)
-{
-  int i;
-
-  for (i = 0; i < count; i++)
-    {
-      *hex++ = tohex ((*bin >> 4) & 0xf);
-      *hex++ = tohex (*bin++ & 0xf);
-    }
-  *hex = 0;
-  return i;
-}
-
-/* See rsp-low.h.  */
-
-std::string
-bin2hex (const gdb_byte *bin, int count)
-{
-  std::string ret;
-
-  ret.reserve (count * 2);
-  for (int i = 0; i < count; ++i)
-    {
-      ret += tohex ((*bin >> 4) & 0xf);
-      ret += tohex (*bin++ & 0xf);
-    }
-
-  return ret;
-}
-
-/* Return whether byte B needs escaping when sent as part of binary data.  */
-
-static int
-needs_escaping (gdb_byte b)
-{
-  return b == '$' || b == '#' || b == '}' || b == '*';
-}
-
-/* See rsp-low.h.  */
-
-int
-remote_escape_output (const gdb_byte *buffer, int len_units, int unit_size,
-		      gdb_byte *out_buf, int *out_len_units,
-		      int out_maxlen_bytes)
-{
-  int input_unit_index, output_byte_index = 0, byte_index_in_unit;
-  int number_escape_bytes_needed;
-
-  /* Try to copy integral addressable memory units until
-     (1) we run out of space or
-     (2) we copied all of them.  */
-  for (input_unit_index = 0;
-       input_unit_index < len_units;
-       input_unit_index++)
-    {
-      /* Find out how many escape bytes we need for this unit.  */
-      number_escape_bytes_needed = 0;
-      for (byte_index_in_unit = 0;
-	   byte_index_in_unit < unit_size;
-	   byte_index_in_unit++)
-	{
-	  int idx = input_unit_index * unit_size + byte_index_in_unit;
-	  gdb_byte b = buffer[idx];
-	  if (needs_escaping (b))
-	    number_escape_bytes_needed++;
-	}
-
-      /* Check if we have room to fit this escaped unit.  */
-      if (output_byte_index + unit_size + number_escape_bytes_needed >
-	    out_maxlen_bytes)
-	  break;
-
-      /* Copy the unit byte per byte, adding escapes.  */
-      for (byte_index_in_unit = 0;
-	   byte_index_in_unit < unit_size;
-	   byte_index_in_unit++)
-	{
-	  int idx = input_unit_index * unit_size + byte_index_in_unit;
-	  gdb_byte b = buffer[idx];
-	  if (needs_escaping (b))
-	    {
-	      out_buf[output_byte_index++] = '}';
-	      out_buf[output_byte_index++] = b ^ 0x20;
-	    }
-	  else
-	    out_buf[output_byte_index++] = b;
-	}
-    }
-
-  *out_len_units = input_unit_index;
-  return output_byte_index;
-}
-
-/* See rsp-low.h.  */
-
-int
-remote_unescape_input (const gdb_byte *buffer, int len,
-		       gdb_byte *out_buf, int out_maxlen)
-{
-  int input_index, output_index;
-  int escaped;
-
-  output_index = 0;
-  escaped = 0;
-  for (input_index = 0; input_index < len; input_index++)
-    {
-      gdb_byte b = buffer[input_index];
-
-      if (output_index + 1 > out_maxlen)
-	error (_("Received too much data from the target."));
-
-      if (escaped)
-	{
-	  out_buf[output_index++] = b ^ 0x20;
-	  escaped = 0;
-	}
-      else if (b == '}')
-	escaped = 1;
-      else
-	out_buf[output_index++] = b;
-    }
-
-  if (escaped)
-    error (_("Unmatched escape character in target response."));
-
-  return output_index;
-}
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/rsp-low.h ./gdb/gdbsupport/rsp-low.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/rsp-low.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/rsp-low.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,101 +0,0 @@
-/* Low-level RSP routines for GDB, the GNU debugger.
-
-   Copyright (C) 1988-2020 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 COMMON_RSP_LOW_H
-#define COMMON_RSP_LOW_H
-
-#include "gdbsupport/byte-vector.h"
-
-/* Convert hex digit A to a number, or throw an exception.  */
-
-extern int fromhex (int a);
-
-/* Convert number NIB to a hex digit.  */
-
-extern int tohex (int nib);
-
-/* Write a character representing the low order four bits of NIBBLE in
-   hex to *BUF.  Returns BUF+1.  */
-
-extern char *pack_nibble (char *buf, int nibble);
-
-/* Write the low byte of BYTE in hex to *BUF.  Returns BUF+2.  */
-
-extern char *pack_hex_byte (char *pkt, int byte);
-
-/* Read hex digits from BUFF and convert to a number, which is stored
-   in RESULT.  Reads until a non-hex digit is seen.  Returns a pointer
-   to the terminating character.  */
-
-extern const char *unpack_varlen_hex (const char *buff, ULONGEST *result);
-
-/* HEX is a string of characters representing hexadecimal digits.
-   Convert pairs of hex digits to bytes and store sequentially into
-   BIN.  COUNT is the maximum number of characters to convert.  This
-   will convert fewer characters if the number of hex characters
-   actually seen is odd, or if HEX terminates before COUNT characters.
-   Returns the number of characters actually converted.  */
-
-extern int hex2bin (const char *hex, gdb_byte *bin, int count);
-
-/* Like the above, but return a gdb::byte_vector.  */
-
-gdb::byte_vector hex2bin (const char *hex);
-
-/* Like hex2bin, but return a std::string.  */
-
-extern std::string hex2str (const char *hex);
-
-/* Like hex2bin, but return a std::string.  */
-
-extern std::string hex2str (const char *hex, int count);
-
-/* Convert some bytes to a hexadecimal representation.  BIN holds the
-   bytes to convert.  COUNT says how many bytes to convert.  The
-   resulting characters are stored in HEX, followed by a NUL
-   character.  Returns the number of bytes actually converted.  */
-
-extern int bin2hex (const gdb_byte *bin, char *hex, int count);
-
-/* Overloaded version of bin2hex that returns a std::string.  */
-
-extern std::string bin2hex (const gdb_byte *bin, int count);
-
-/* Convert BUFFER, binary data at least LEN_UNITS addressable memory units
-   long, into escaped binary data in OUT_BUF.  Only copy memory units that fit
-   completely in OUT_BUF.  Set *OUT_LEN_UNITS to the number of units from
-   BUFFER successfully encoded in OUT_BUF, and return the number of bytes used
-   in OUT_BUF.  The total number of bytes in the output buffer will be at most
-   OUT_MAXLEN_BYTES.  This function properly escapes '*', and so is suitable
-   for the server side as well as the client.  */
-
-extern int remote_escape_output (const gdb_byte *buffer, int len_units,
-				 int unit_size, gdb_byte *out_buf,
-				 int *out_len_units, int out_maxlen_bytes);
-
-/* Convert BUFFER, escaped data LEN bytes long, into binary data
-   in OUT_BUF.  Return the number of bytes written to OUT_BUF.
-   Raise an error if the total number of bytes exceeds OUT_MAXLEN.
-
-   This function reverses remote_escape_output.  */
-
-extern int remote_unescape_input (const gdb_byte *buffer, int len,
-				  gdb_byte *out_buf, int out_maxlen);
-
-#endif /* COMMON_RSP_LOW_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/run-time-clock.c ./gdb/gdbsupport/run-time-clock.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/run-time-clock.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/run-time-clock.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,58 +0,0 @@
-/* User/system CPU time clocks that follow the std::chrono interface.
-   Copyright (C) 2016-2020 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 "common-defs.h"
-#include "run-time-clock.h"
-#if defined HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-
-using namespace std::chrono;
-
-run_time_clock::time_point
-run_time_clock::now () noexcept
-{
-  return time_point (microseconds (get_run_time ()));
-}
-
-#ifdef HAVE_GETRUSAGE
-static std::chrono::microseconds
-timeval_to_microseconds (struct timeval *tv)
-{
-  return (seconds (tv->tv_sec) + microseconds (tv->tv_usec));
-}
-#endif
-
-void
-run_time_clock::now (user_cpu_time_clock::time_point &user,
-		     system_cpu_time_clock::time_point &system) noexcept
-{
-#ifdef HAVE_GETRUSAGE
-  struct rusage rusage;
-
-  getrusage (RUSAGE_SELF, &rusage);
-
-  microseconds utime = timeval_to_microseconds (&rusage.ru_utime);
-  microseconds stime = timeval_to_microseconds (&rusage.ru_stime);
-  user = user_cpu_time_clock::time_point (utime);
-  system = system_cpu_time_clock::time_point (stime);
-#else
-  user = user_cpu_time_clock::time_point (microseconds (get_run_time ()));
-  system = system_cpu_time_clock::time_point (microseconds::zero ());
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/run-time-clock.h ./gdb/gdbsupport/run-time-clock.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/run-time-clock.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/run-time-clock.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,75 +0,0 @@
-/* User/system CPU time clocks that follow the std::chrono interface.
-   Copyright (C) 2016-2020 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 COMMON_RUN_TIME_CLOCK_H
-#define COMMON_RUN_TIME_CLOCK_H
-
-#include <chrono>
-
-/* Count the total amount of time spent executing in user mode.  */
-
-struct user_cpu_time_clock
-{
-  using duration = std::chrono::microseconds;
-  using rep = duration::rep;
-  using period = duration::period;
-  using time_point = std::chrono::time_point<user_cpu_time_clock>;
-
-  static constexpr bool is_steady = true;
-
-  /* Use run_time_clock::now instead.  */
-  static time_point now () noexcept = delete;
-};
-
-/* Count the total amount of time spent executing in kernel mode.  */
-
-struct system_cpu_time_clock
-{
-  using duration = std::chrono::microseconds;
-  using rep = duration::rep;
-  using period = duration::period;
-  using time_point = std::chrono::time_point<system_cpu_time_clock>;
-
-  static constexpr bool is_steady = true;
-
-  /* Use run_time_clock::now instead.  */
-  static time_point now () noexcept = delete;
-};
-
-/* Count the total amount of time spent executing in userspace+kernel
-   mode.  */
-
-struct run_time_clock
-{
-  using duration = std::chrono::microseconds;
-  using rep = duration::rep;
-  using period = duration::period;
-  using time_point = std::chrono::time_point<run_time_clock>;
-
-  static constexpr bool is_steady = true;
-
-  static time_point now () noexcept;
-
-  /* Return the user/system time as separate time points, if
-     supported.  If not supported, then the combined user+kernel time
-     is returned in USER and SYSTEM is set to zero.  */
-  static void now (user_cpu_time_clock::time_point &user,
-		   system_cpu_time_clock::time_point &system) noexcept;
-};
-
-#endif /* COMMON_RUN_TIME_CLOCK_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/safe-iterator.h ./gdb/gdbsupport/safe-iterator.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/safe-iterator.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/safe-iterator.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,93 +0,0 @@
-/* A safe iterator for GDB, the GNU debugger.
-   Copyright (C) 2018-2020 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 COMMON_SAFE_ITERATOR_H
-#define COMMON_SAFE_ITERATOR_H
-
-/* A forward iterator that wraps Iterator, such that when iterating
-   with iterator IT, it is possible to delete *IT without invalidating
-   IT.  Suitably wrapped in a range type and used with range-for, this
-   allow convenient patterns like this:
-
-     // range_safe() returns a range type whose begin()/end() methods
-     // return safe iterators.
-     for (foo *f : range_safe ())
-       {
-	 if (f->should_delete ())
-	   {
-	     // The ++it operation implicitly done by the range-for is
-	     // still OK after this.
-	     delete f;
-	   }
-       }
-*/
-
-template<typename Iterator>
-class basic_safe_iterator
-{
-public:
-  typedef basic_safe_iterator self_type;
-  typedef typename Iterator::value_type value_type;
-  typedef typename Iterator::reference reference;
-  typedef typename Iterator::pointer pointer;
-  typedef typename Iterator::iterator_category iterator_category;
-  typedef typename Iterator::difference_type difference_type;
-
-  /* Construct by forwarding all arguments to the underlying
-     iterator.  */
-  template<typename... Args>
-  explicit basic_safe_iterator (Args &&...args)
-    : m_it (std::forward<Args> (args)...),
-      m_next (m_it)
-  {
-    if (m_it != m_end)
-      ++m_next;
-  }
-
-  /* Create a one-past-end iterator.  */
-  basic_safe_iterator ()
-  {}
-
-  value_type operator* () const { return *m_it; }
-
-  self_type &operator++ ()
-  {
-    m_it = m_next;
-    if (m_it != m_end)
-      ++m_next;
-    return *this;
-  }
-
-  bool operator== (const self_type &other) const
-  { return m_it == other.m_it; }
-
-  bool operator!= (const self_type &other) const
-  { return m_it != other.m_it; }
-
-private:
-  /* The current element.  */
-  Iterator m_it {};
-
-  /* The next element.  Always one element ahead of M_IT.  */
-  Iterator m_next {};
-
-  /* A one-past-end iterator.  */
-  Iterator m_end {};
-};
-
-#endif /* COMMON_SAFE_ITERATOR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/safe-strerror.c ./gdb/gdbsupport/safe-strerror.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/safe-strerror.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/safe-strerror.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,64 +0,0 @@
-/* Safe version of strerror for GDB, the GNU debugger.
-
-   Copyright (C) 2006-2020 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 "common-defs.h"
-#include "diagnostics.h"
-#include <string.h>
-
-/* There are two different versions of strerror_r; one is GNU-specific, the
-   other XSI-compliant.  They differ in the return type.  This overload lets
-   us choose the right behavior for each return type.  We cannot rely on Gnulib
-   to solve this for us because IPA does not use Gnulib but uses this
-   function.  */
-
-/* We only ever use one of the two overloads, so suppress the warning for
-   an unused function.  */
-DIAGNOSTIC_PUSH
-DIAGNOSTIC_IGNORE_UNUSED_FUNCTION
-
-/* Called if we have a XSI-compliant strerror_r.  */
-static char *
-select_strerror_r (int res, char *buf)
-{
-  return res == 0 ? buf : nullptr;
-}
-
-/* Called if we have a GNU strerror_r.  */
-static char *
-select_strerror_r (char *res, char *)
-{
-  return res;
-}
-
-DIAGNOSTIC_POP
-
-/* Implementation of safe_strerror as defined in common-utils.h.  */
-
-const char *
-safe_strerror (int errnum)
-{
-  static thread_local char buf[1024];
-
-  char *res = select_strerror_r (strerror_r (errnum, buf, sizeof (buf)), buf);
-  if (res != nullptr)
-    return res;
-
-  xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum);
-  return buf;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_fd.h ./gdb/gdbsupport/scoped_fd.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_fd.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/scoped_fd.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,87 +0,0 @@
-/* scoped_fd, automatically close a file descriptor
-
-   Copyright (C) 2018-2020 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 COMMON_SCOPED_FD_H
-#define COMMON_SCOPED_FD_H
-
-#include <unistd.h>
-#include "filestuff.h"
-
-/* A smart-pointer-like class to automatically close a file descriptor.  */
-
-class scoped_fd
-{
-public:
-  explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {}
-
-  scoped_fd (scoped_fd &&other)
-    : m_fd (other.m_fd)
-  {
-    other.m_fd = -1;
-  }
-
-  ~scoped_fd ()
-  {
-    if (m_fd >= 0)
-      close (m_fd);
-  }
-
-  scoped_fd &operator= (scoped_fd &&other)
-  {
-    if (m_fd != other.m_fd)
-      {
-	if (m_fd >= 0)
-	  close (m_fd);
-	m_fd = other.m_fd;
-	other.m_fd = -1;
-      }
-    return *this;
-  }
-
-  DISABLE_COPY_AND_ASSIGN (scoped_fd);
-
-  ATTRIBUTE_UNUSED_RESULT int release () noexcept
-  {
-    int fd = m_fd;
-    m_fd = -1;
-    return fd;
-  }
-
-  /* Like release, but return a gdb_file_up that owns the file
-     descriptor.  On success, this scoped_fd will be released.  On
-     failure, return NULL and leave this scoped_fd in possession of
-     the fd.  */
-  gdb_file_up to_file (const char *mode) noexcept
-  {
-    gdb_file_up result (fdopen (m_fd, mode));
-    if (result != nullptr)
-      m_fd = -1;
-    return result;
-  }
-
-  int get () const noexcept
-  {
-    return m_fd;
-  }
-
-private:
-  int m_fd;
-};
-
-#endif /* COMMON_SCOPED_FD_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_mmap.c ./gdb/gdbsupport/scoped_mmap.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_mmap.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/scoped_mmap.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,49 +0,0 @@
-/* scoped_mmap, automatically unmap files
-
-   Copyright (C) 2018-2020 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 "common-defs.h"
-#include "scoped_mmap.h"
-#include "scoped_fd.h"
-#include "gdbsupport/filestuff.h"
-
-#ifdef HAVE_SYS_MMAN_H
-
-scoped_mmap
-mmap_file (const char *filename)
-{
-  scoped_fd fd (gdb_open_cloexec (filename, O_RDONLY, 0));
-  if (fd.get () < 0)
-    perror_with_name (("open"));
-
-  off_t size = lseek (fd.get (), 0, SEEK_END);
-  if (size < 0)
-    perror_with_name (("lseek"));
-
-  /* We can't map an empty file.  */
-  if (size == 0)
-    error (_("file to mmap is empty"));
-
-  scoped_mmap mmapped_file (nullptr, size, PROT_READ, MAP_PRIVATE, fd.get (), 0);
-  if (mmapped_file.get () == MAP_FAILED)
-    perror_with_name (("mmap"));
-
-  return mmapped_file;
-}
-
-#endif /* HAVE_SYS_MMAN_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_mmap.h ./gdb/gdbsupport/scoped_mmap.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_mmap.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/scoped_mmap.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,94 +0,0 @@
-/* scoped_mmap, automatically unmap files
-
-   Copyright (C) 2018-2020 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 COMMON_SCOPED_MMAP_H
-#define COMMON_SCOPED_MMAP_H
-
-#ifdef HAVE_SYS_MMAN_H
-
-#include <sys/mman.h>
-
-/* A smart-pointer-like class to mmap() and automatically munmap() a memory
-   mapping.  */
-
-class scoped_mmap
-{
-public:
-  scoped_mmap () noexcept : m_mem (MAP_FAILED), m_length (0) {}
-  scoped_mmap (void *addr, size_t length, int prot, int flags, int fd,
-	       off_t offset) noexcept : m_length (length)
-  {
-    m_mem = mmap (addr, m_length, prot, flags, fd, offset);
-  }
-
-  ~scoped_mmap ()
-  {
-    destroy ();
-  }
-
-  scoped_mmap (scoped_mmap &&rhs)
-  {
-    destroy ();
-
-    m_mem = rhs.m_mem;
-    m_length = rhs.m_length;
-
-    rhs.m_mem = MAP_FAILED;
-    rhs.m_length = 0;
-  }
-
-  DISABLE_COPY_AND_ASSIGN (scoped_mmap);
-
-  ATTRIBUTE_UNUSED_RESULT void *release () noexcept
-  {
-    void *mem = m_mem;
-    m_mem = MAP_FAILED;
-    m_length = 0;
-    return mem;
-  }
-
-  void reset (void *addr, size_t length, int prot, int flags, int fd,
-	      off_t offset) noexcept
-  {
-    destroy ();
-
-    m_length = length;
-    m_mem = mmap (addr, m_length, prot, flags, fd, offset);
-  }
-
-  size_t size () const noexcept { return m_length; }
-  void *get () const noexcept { return m_mem; }
-
-private:
-  void destroy ()
-  {
-    if (m_mem != MAP_FAILED)
-      munmap (m_mem, m_length);
-  }
-
-  void *m_mem;
-  size_t m_length;
-};
-
-/* Map FILENAME in memory.  Throw an error if anything goes wrong.  */
-scoped_mmap mmap_file (const char *filename);
-
-#endif /* HAVE_SYS_MMAN_H */
-
-#endif /* COMMON_SCOPED_MMAP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_restore.h ./gdb/gdbsupport/scoped_restore.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scoped_restore.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/scoped_restore.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,118 +0,0 @@
-/* scoped_restore, a simple class for saving and restoring a value
-
-   Copyright (C) 2016-2020 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 COMMON_SCOPED_RESTORE_H
-#define COMMON_SCOPED_RESTORE_H
-
-/* Base class for scoped_restore_tmpl.  */
-class scoped_restore_base
-{
-public:
-  /* This informs the (scoped_restore_tmpl<T>) dtor that you no longer
-     want the original value restored.  */
-  void release () const
-  { m_saved_var = NULL; }
-
-protected:
-  scoped_restore_base (void *saved_var)
-    : m_saved_var (saved_var)
-  {}
-
-  /* The type-erased saved variable.  This is here so that clients can
-     call release() on a "scoped_restore" local, which is a typedef to
-     a scoped_restore_base.  See below.  */
-  mutable void *m_saved_var;
-};
-
-/* A convenience typedef.  Users of make_scoped_restore declare the
-   local RAII object as having this type.  */
-typedef const scoped_restore_base &scoped_restore;
-
-/* An RAII-based object that saves a variable's value, and then
-   restores it again when this object is destroyed. */
-template<typename T>
-class scoped_restore_tmpl : public scoped_restore_base
-{
- public:
-
-  /* Create a new scoped_restore object that saves the current value
-     of *VAR.  *VAR will be restored when this scoped_restore object
-     is destroyed.  */
-  scoped_restore_tmpl (T *var)
-    : scoped_restore_base (var),
-      m_saved_value (*var)
-  {
-  }
-
-  /* Create a new scoped_restore object that saves the current value
-     of *VAR, and sets *VAR to VALUE.  *VAR will be restored when this
-     scoped_restore object is destroyed.  This is templated on T2 to
-     allow passing VALUEs of types convertible to T.
-     E.g.: T='base'; T2='derived'.  */
-  template <typename T2>
-  scoped_restore_tmpl (T *var, T2 value)
-    : scoped_restore_base (var),
-      m_saved_value (*var)
-  {
-    *var = value;
-  }
-
-  scoped_restore_tmpl (const scoped_restore_tmpl<T> &other)
-    : scoped_restore_base {other.m_saved_var},
-      m_saved_value (other.m_saved_value)
-  {
-    other.m_saved_var = NULL;
-  }
-
-  ~scoped_restore_tmpl ()
-  {
-    if (saved_var () != NULL)
-      *saved_var () = m_saved_value;
-  }
-
-private:
-  /* Return a pointer to the saved variable with its type
-     restored.  */
-  T *saved_var ()
-  { return static_cast<T *> (m_saved_var); }
-
-  /* No need for this.  It is intentionally not defined anywhere.  */
-  scoped_restore_tmpl &operator= (const scoped_restore_tmpl &);
-
-  /* The saved value.  */
-  const T m_saved_value;
-};
-
-/* Make a scoped_restore.  This is useful because it lets template
-   argument deduction work.  */
-template<typename T>
-scoped_restore_tmpl<T> make_scoped_restore (T *var)
-{
-  return scoped_restore_tmpl<T> (var);
-}
-
-/* Make a scoped_restore.  This is useful because it lets template
-   argument deduction work.  */
-template<typename T, typename T2>
-scoped_restore_tmpl<T> make_scoped_restore (T *var, T2 value)
-{
-  return scoped_restore_tmpl<T> (var, value);
-}
-
-#endif /* COMMON_SCOPED_RESTORE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scope-exit.h ./gdb/gdbsupport/scope-exit.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/scope-exit.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/scope-exit.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,186 +0,0 @@
-/* Copyright (C) 2019-2020 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 COMMON_SCOPE_EXIT_H
-#define COMMON_SCOPE_EXIT_H
-
-#include <functional>
-#include <type_traits>
-#include "gdbsupport/preprocessor.h"
-
-/* scope_exit is a general-purpose scope guard that calls its exit
-   function at the end of the current scope.  A scope_exit may be
-   canceled by calling the "release" method.  The API is modeled on
-   P0052R5 - Generic Scope Guard and RAII Wrapper for the Standard
-   Library, which is itself based on Andrej Alexandrescu's
-   ScopeGuard/SCOPE_EXIT.
-
-   There are two forms available:
-
-   - The "make_scope_exit" form allows canceling the scope guard.  Use
-     it like this:
-
-     auto cleanup = make_scope_exit ( <function, function object, lambda> );
-     ...
-     cleanup.release (); // cancel
-
-   - If you don't need to cancel the guard, you can use the SCOPE_EXIT
-     macro, like this:
-
-     SCOPE_EXIT
-       {
-	 // any code you like here.
-       }
-
-   See also forward_scope_exit.
-*/
-
-/* CRTP base class for cancelable scope_exit-like classes.  Implements
-   the common call-custom-function-from-dtor functionality.  Classes
-   that inherit this implement the on_exit() method, which is called
-   from scope_exit_base's dtor.  */
-
-template <typename CRTP>
-class scope_exit_base
-{
-public:
-  scope_exit_base () = default;
-
-  ~scope_exit_base ()
-  {
-    if (!m_released)
-      {
-	auto *self = static_cast<CRTP *> (this);
-	self->on_exit ();
-      }
-  }
-
-  /* This is needed for make_scope_exit because copy elision isn't
-     guaranteed until C++17.  An optimizing compiler will usually skip
-     calling this, but it must exist.  */
-  scope_exit_base (const scope_exit_base &other)
-    : m_released (other.m_released)
-  {
-    other.m_released = true;
-  }
-
-  void operator= (const scope_exit_base &) = delete;
-
-  /* If this is called, then the wrapped function will not be called
-     on destruction.  */
-  void release () noexcept
-  {
-    m_released = true;
-  }
-
-private:
-
-  /* True if released.  Mutable because of the copy ctor hack
-     above.  */
-  mutable bool m_released = false;
-};
-
-/* The scope_exit class.  */
-
-template<typename EF>
-class scope_exit : public scope_exit_base<scope_exit<EF>>
-{
-  /* For access to on_exit().  */
-  friend scope_exit_base<scope_exit<EF>>;
-
-public:
-
-  template<typename EFP,
-	   typename = gdb::Requires<std::is_constructible<EF, EFP>>>
-  scope_exit (EFP &&f)
-    try : m_exit_function ((!std::is_lvalue_reference<EFP>::value
-			    && std::is_nothrow_constructible<EF, EFP>::value)
-			   ? std::move (f)
-			   : f)
-  {
-  }
-  catch (...)
-    {
-      /* "If the initialization of exit_function throws an exception,
-	 calls f()."  */
-      f ();
-    }
-
-  template<typename EFP,
-	   typename = gdb::Requires<std::is_constructible<EF, EFP>>>
-  scope_exit (scope_exit &&rhs)
-    noexcept (std::is_nothrow_move_constructible<EF>::value
-	      || std::is_nothrow_copy_constructible<EF>::value)
-    : m_exit_function (std::is_nothrow_constructible<EFP>::value
-		       ? std::move (rhs)
-		       : rhs)
-  {
-    rhs.release ();
-  }
-
-  /* This is needed for make_scope_exit because copy elision isn't
-     guaranteed until C++17.  An optimizing compiler will usually skip
-     calling this, but it must exist.  */
-  scope_exit (const scope_exit &other)
-    : scope_exit_base<scope_exit<EF>> (other),
-      m_exit_function (other.m_exit_function)
-  {
-  }
-
-  void operator= (const scope_exit &) = delete;
-  void operator= (scope_exit &&) = delete;
-
-private:
-  void on_exit ()
-  {
-    m_exit_function ();
-  }
-
-  /* The function to call on scope exit.  */
-  EF m_exit_function;
-};
-
-template <typename EF>
-scope_exit<typename std::decay<EF>::type>
-make_scope_exit (EF &&f)
-{
-  return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (f));
-}
-
-namespace detail
-{
-
-enum class scope_exit_lhs {};
-
-template<typename EF>
-scope_exit<typename std::decay<EF>::type>
-operator+ (scope_exit_lhs, EF &&rhs)
-{
-  return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (rhs));
-}
-
-}
-
-/* Register a block of code to run on scope exit.  Note that the local
-   context is captured by reference, which means you should be careful
-   to avoid inadvertently changing a captured local's value before the
-   scope exit runs.  */
-
-#define SCOPE_EXIT \
-  auto CONCAT(scope_exit_, __LINE__) = ::detail::scope_exit_lhs () + [&] ()
-
-#endif /* COMMON_SCOPE_EXIT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/selftest.c ./gdb/gdbsupport/selftest.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/selftest.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/selftest.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,111 +0,0 @@
-/* GDB self-testing.
-   Copyright (C) 2016-2020 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 "common-defs.h"
-#include "common-exceptions.h"
-#include "common-debug.h"
-#include "selftest.h"
-#include <map>
-
-namespace selftests
-{
-/* All the tests that have been registered.  Using an std::map allows keeping
-   the order of tests stable and easily looking up whether a test name
-   exists.  */
-
-static std::map<std::string, std::unique_ptr<selftest>> tests;
-
-/* A selftest that calls the test function without arguments.  */
-
-struct simple_selftest : public selftest
-{
-  simple_selftest (self_test_function *function_)
-  : function (function_)
-  {}
-
-  void operator() () const override
-  {
-    function ();
-  }
-
-  self_test_function *function;
-};
-
-/* See selftest.h.  */
-
-void
-register_test (const std::string &name, selftest *test)
-{
-  /* Check that no test with this name already exist.  */
-  gdb_assert (tests.find (name) == tests.end ());
-
-  tests[name] = std::unique_ptr<selftest> (test);
-}
-
-/* See selftest.h.  */
-
-void
-register_test (const std::string &name, self_test_function *function)
-{
-  register_test (name, new simple_selftest (function));
-}
-
-/* See selftest.h.  */
-
-void
-run_tests (const char *filter)
-{
-  int ran = 0, failed = 0;
-
-  for (const auto &pair : tests)
-    {
-      const std::string &name = pair.first;
-      const std::unique_ptr<selftest> &test = pair.second;
-
-      if (filter != NULL && *filter != '\0'
-	  && name.find (filter) == std::string::npos)
-	continue;
-
-      try
-	{
-	  debug_printf (_("Running selftest %s.\n"), name.c_str ());
-	  ++ran;
-	  (*test) ();
-	}
-      catch (const gdb_exception_error &ex)
-	{
-	  ++failed;
-	  debug_printf ("Self test failed: %s\n", ex.what ());
-	}
-
-      reset ();
-    }
-
-  debug_printf (_("Ran %d unit tests, %d failed\n"),
-		ran, failed);
-}
-
-/* See selftest.h.  */
-
-void for_each_selftest (for_each_selftest_ftype func)
-{
-  for (const auto &pair : tests)
-    func (pair.first);
-}
-
-} // namespace selftests
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/selftest.h ./gdb/gdbsupport/selftest.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/selftest.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/selftest.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,73 +0,0 @@
-/* GDB self-testing.
-   Copyright (C) 2016-2020 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 COMMON_SELFTEST_H
-#define COMMON_SELFTEST_H
-
-/* A test is just a function that does some checks and throws an
-   exception if something has gone wrong.  */
-
-typedef void self_test_function (void);
-
-namespace selftests
-{
-
-/* Interface for the various kinds of selftests.  */
-
-struct selftest
-{
-  virtual ~selftest () = default;
-  virtual void operator() () const = 0;
-};
-
-/* Register a new self-test.  */
-
-extern void register_test (const std::string &name, selftest *test);
-
-/* Register a new self-test.  */
-
-extern void register_test (const std::string &name,
-			   self_test_function *function);
-
-/* Run all the self tests.  This print a message describing the number
-   of test and the number of failures.
-
-   If FILTER is not NULL and not empty, only tests with names containing FILTER
-   will be ran.  */
-
-extern void run_tests (const char *filter);
-
-/* Reset GDB or GDBserver's internal state.  */
-extern void reset ();
-
-typedef void for_each_selftest_ftype (const std::string &name);
-
-/* Call FUNC for each registered selftest.  */
-
-extern void for_each_selftest (for_each_selftest_ftype func);
-}
-
-/* Check that VALUE is true, and, if not, throw an exception.  */
-
-#define SELF_CHECK(VALUE)						\
-  do {									\
-    if (!(VALUE))							\
-      error (_("self-test failed at %s:%d"), __FILE__, __LINE__);	\
-  } while (0)
-
-#endif /* COMMON_SELFTEST_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/signals.c ./gdb/gdbsupport/signals.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/signals.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/signals.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,653 +0,0 @@
-/* Target signal translation functions for GDB.
-   Copyright (C) 1990-2020 Free Software Foundation, Inc.
-   Contributed by Cygnus Support.
-
-   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 "common-defs.h"
-
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#include "gdb_signals.h"
-
-struct gdbarch;
-
-/* Always use __SIGRTMIN if it's available.  SIGRTMIN is the lowest
-   _available_ realtime signal, not the lowest supported; glibc takes
-   several for its own use.  */
-
-#ifndef REALTIME_LO
-# if defined(__SIGRTMIN)
-#  define REALTIME_LO __SIGRTMIN
-#  define REALTIME_HI (__SIGRTMAX + 1)
-# elif defined(SIGRTMIN)
-#  define REALTIME_LO SIGRTMIN
-#  define REALTIME_HI (SIGRTMAX + 1)
-# endif
-#endif
-
-/* This table must match in order and size the signals in enum
-   gdb_signal.  */
-
-static const struct {
-  const char *symbol;
-  const char *name;
-  const char *string;
-  } signals [] =
-{
-#define SET(symbol, constant, name, string) { #symbol, name, string },
-#include "gdb/signals.def"
-#undef SET
-};
-
-const char *
-gdb_signal_to_symbol_string (enum gdb_signal sig)
-{
-  gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST);
-
-  return signals[sig].symbol;
-}
-
-/* Return the string for a signal.  */
-const char *
-gdb_signal_to_string (enum gdb_signal sig)
-{
-  if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
-    return signals[sig].string;
-  else
-    return signals[GDB_SIGNAL_UNKNOWN].string;
-}
-
-/* Return the name for a signal.  */
-const char *
-gdb_signal_to_name (enum gdb_signal sig)
-{
-  if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
-      && signals[sig].name != NULL)
-    return signals[sig].name;
-  else
-    /* I think the code which prints this will always print it along
-       with the string, so no need to be verbose (very old comment).  */
-    return "?";
-}
-
-/* Given a name, return its signal.  */
-enum gdb_signal
-gdb_signal_from_name (const char *name)
-{
-  enum gdb_signal sig;
-
-  /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
-     for GDB_SIGNAL_SIGCHLD.  SIGIOT, on the other hand, is more
-     questionable; seems like by now people should call it SIGABRT
-     instead.  */
-
-  /* This ugly cast brought to you by the native VAX compiler.  */
-  for (sig = GDB_SIGNAL_HUP;
-       sig < GDB_SIGNAL_LAST;
-       sig = (enum gdb_signal) ((int) sig + 1))
-    if (signals[sig].name != NULL
-	&& strcmp (name, signals[sig].name) == 0)
-      return sig;
-  return GDB_SIGNAL_UNKNOWN;
-}
-
-/* The following functions are to help certain targets deal
-   with the signal/waitstatus stuff.  They could just as well be in
-   a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
-
-/* Convert host signal to our signals.  */
-enum gdb_signal
-gdb_signal_from_host (int hostsig)
-{
-  /* A switch statement would make sense but would require special
-     kludges to deal with the cases where more than one signal has the
-     same number.  Signals are ordered ANSI-standard signals first,
-     other signals second, with signals in each block ordered by their
-     numerical values on a typical POSIX platform.  */
-
-  if (hostsig == 0)
-    return GDB_SIGNAL_0;
-
-  /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
-     are ANSI-standard signals and are always available.  */
-  if (hostsig == SIGINT)
-    return GDB_SIGNAL_INT;
-  if (hostsig == SIGILL)
-    return GDB_SIGNAL_ILL;
-  if (hostsig == SIGABRT)
-    return GDB_SIGNAL_ABRT;
-  if (hostsig == SIGFPE)
-    return GDB_SIGNAL_FPE;
-  if (hostsig == SIGSEGV)
-    return GDB_SIGNAL_SEGV;
-  if (hostsig == SIGTERM)
-    return GDB_SIGNAL_TERM;
-
-  /* All other signals need preprocessor conditionals.  */
-#if defined (SIGHUP)
-  if (hostsig == SIGHUP)
-    return GDB_SIGNAL_HUP;
-#endif
-#if defined (SIGQUIT)
-  if (hostsig == SIGQUIT)
-    return GDB_SIGNAL_QUIT;
-#endif
-#if defined (SIGTRAP)
-  if (hostsig == SIGTRAP)
-    return GDB_SIGNAL_TRAP;
-#endif
-#if defined (SIGEMT)
-  if (hostsig == SIGEMT)
-    return GDB_SIGNAL_EMT;
-#endif
-#if defined (SIGKILL)
-  if (hostsig == SIGKILL)
-    return GDB_SIGNAL_KILL;
-#endif
-#if defined (SIGBUS)
-  if (hostsig == SIGBUS)
-    return GDB_SIGNAL_BUS;
-#endif
-#if defined (SIGSYS)
-  if (hostsig == SIGSYS)
-    return GDB_SIGNAL_SYS;
-#endif
-#if defined (SIGPIPE)
-  if (hostsig == SIGPIPE)
-    return GDB_SIGNAL_PIPE;
-#endif
-#if defined (SIGALRM)
-  if (hostsig == SIGALRM)
-    return GDB_SIGNAL_ALRM;
-#endif
-#if defined (SIGUSR1)
-  if (hostsig == SIGUSR1)
-    return GDB_SIGNAL_USR1;
-#endif
-#if defined (SIGUSR2)
-  if (hostsig == SIGUSR2)
-    return GDB_SIGNAL_USR2;
-#endif
-#if defined (SIGCLD)
-  if (hostsig == SIGCLD)
-    return GDB_SIGNAL_CHLD;
-#endif
-#if defined (SIGCHLD)
-  if (hostsig == SIGCHLD)
-    return GDB_SIGNAL_CHLD;
-#endif
-#if defined (SIGPWR)
-  if (hostsig == SIGPWR)
-    return GDB_SIGNAL_PWR;
-#endif
-#if defined (SIGWINCH)
-  if (hostsig == SIGWINCH)
-    return GDB_SIGNAL_WINCH;
-#endif
-#if defined (SIGURG)
-  if (hostsig == SIGURG)
-    return GDB_SIGNAL_URG;
-#endif
-#if defined (SIGIO)
-  if (hostsig == SIGIO)
-    return GDB_SIGNAL_IO;
-#endif
-#if defined (SIGPOLL)
-  if (hostsig == SIGPOLL)
-    return GDB_SIGNAL_POLL;
-#endif
-#if defined (SIGSTOP)
-  if (hostsig == SIGSTOP)
-    return GDB_SIGNAL_STOP;
-#endif
-#if defined (SIGTSTP)
-  if (hostsig == SIGTSTP)
-    return GDB_SIGNAL_TSTP;
-#endif
-#if defined (SIGCONT)
-  if (hostsig == SIGCONT)
-    return GDB_SIGNAL_CONT;
-#endif
-#if defined (SIGTTIN)
-  if (hostsig == SIGTTIN)
-    return GDB_SIGNAL_TTIN;
-#endif
-#if defined (SIGTTOU)
-  if (hostsig == SIGTTOU)
-    return GDB_SIGNAL_TTOU;
-#endif
-#if defined (SIGVTALRM)
-  if (hostsig == SIGVTALRM)
-    return GDB_SIGNAL_VTALRM;
-#endif
-#if defined (SIGPROF)
-  if (hostsig == SIGPROF)
-    return GDB_SIGNAL_PROF;
-#endif
-#if defined (SIGXCPU)
-  if (hostsig == SIGXCPU)
-    return GDB_SIGNAL_XCPU;
-#endif
-#if defined (SIGXFSZ)
-  if (hostsig == SIGXFSZ)
-    return GDB_SIGNAL_XFSZ;
-#endif
-#if defined (SIGWIND)
-  if (hostsig == SIGWIND)
-    return GDB_SIGNAL_WIND;
-#endif
-#if defined (SIGPHONE)
-  if (hostsig == SIGPHONE)
-    return GDB_SIGNAL_PHONE;
-#endif
-#if defined (SIGLOST)
-  if (hostsig == SIGLOST)
-    return GDB_SIGNAL_LOST;
-#endif
-#if defined (SIGWAITING)
-  if (hostsig == SIGWAITING)
-    return GDB_SIGNAL_WAITING;
-#endif
-#if defined (SIGCANCEL)
-  if (hostsig == SIGCANCEL)
-    return GDB_SIGNAL_CANCEL;
-#endif
-#if defined (SIGLWP)
-  if (hostsig == SIGLWP)
-    return GDB_SIGNAL_LWP;
-#endif
-#if defined (SIGDANGER)
-  if (hostsig == SIGDANGER)
-    return GDB_SIGNAL_DANGER;
-#endif
-#if defined (SIGGRANT)
-  if (hostsig == SIGGRANT)
-    return GDB_SIGNAL_GRANT;
-#endif
-#if defined (SIGRETRACT)
-  if (hostsig == SIGRETRACT)
-    return GDB_SIGNAL_RETRACT;
-#endif
-#if defined (SIGMSG)
-  if (hostsig == SIGMSG)
-    return GDB_SIGNAL_MSG;
-#endif
-#if defined (SIGSOUND)
-  if (hostsig == SIGSOUND)
-    return GDB_SIGNAL_SOUND;
-#endif
-#if defined (SIGSAK)
-  if (hostsig == SIGSAK)
-    return GDB_SIGNAL_SAK;
-#endif
-#if defined (SIGPRIO)
-  if (hostsig == SIGPRIO)
-    return GDB_SIGNAL_PRIO;
-#endif
-
-  /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
-#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
-  if (hostsig == _NSIG + EXC_BAD_ACCESS)
-    return GDB_EXC_BAD_ACCESS;
-#endif
-#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
-  if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
-    return GDB_EXC_BAD_INSTRUCTION;
-#endif
-#if defined (EXC_ARITHMETIC) && defined (_NSIG)
-  if (hostsig == _NSIG + EXC_ARITHMETIC)
-    return GDB_EXC_ARITHMETIC;
-#endif
-#if defined (EXC_EMULATION) && defined (_NSIG)
-  if (hostsig == _NSIG + EXC_EMULATION)
-    return GDB_EXC_EMULATION;
-#endif
-#if defined (EXC_SOFTWARE) && defined (_NSIG)
-  if (hostsig == _NSIG + EXC_SOFTWARE)
-    return GDB_EXC_SOFTWARE;
-#endif
-#if defined (EXC_BREAKPOINT) && defined (_NSIG)
-  if (hostsig == _NSIG + EXC_BREAKPOINT)
-    return GDB_EXC_BREAKPOINT;
-#endif
-
-#if defined (SIGINFO)
-  if (hostsig == SIGINFO)
-    return GDB_SIGNAL_INFO;
-#endif
-#if defined (SIGLIBRT)
-  if (hostsig == SIGLIBRT)
-    return GDB_SIGNAL_LIBRT;
-#endif
-
-#if defined (REALTIME_LO)
-  if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
-    {
-      /* This block of GDB_SIGNAL_REALTIME value is in order.  */
-      if (33 <= hostsig && hostsig <= 63)
-	return (enum gdb_signal)
-	  (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
-      else if (hostsig == 32)
-	return GDB_SIGNAL_REALTIME_32;
-      else if (64 <= hostsig && hostsig <= 127)
-	return (enum gdb_signal)
-	  (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
-      else
-	error (_("GDB bug: target.c (gdb_signal_from_host): "
-	       "unrecognized real-time signal"));
-    }
-#endif
-
-  return GDB_SIGNAL_UNKNOWN;
-}
-
-/* Convert a OURSIG (an enum gdb_signal) to the form used by the
-   target operating system (refered to as the ``host'') or zero if the
-   equivalent host signal is not available.  Set/clear OURSIG_OK
-   accordingly. */
-
-static int
-do_gdb_signal_to_host (enum gdb_signal oursig,
-			  int *oursig_ok)
-{
-  int retsig;
-  /* Silence the 'not used' warning, for targets that
-     do not support signals.  */
-  (void) retsig;
-
-  /* Signals are ordered ANSI-standard signals first, other signals
-     second, with signals in each block ordered by their numerical
-     values on a typical POSIX platform.  */
-
-  *oursig_ok = 1;
-  switch (oursig)
-    {
-    case GDB_SIGNAL_0:
-      return 0;
-
-      /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
-	 are ANSI-standard signals and are always available.  */
-    case GDB_SIGNAL_INT:
-      return SIGINT;
-    case GDB_SIGNAL_ILL:
-      return SIGILL;
-    case GDB_SIGNAL_ABRT:
-      return SIGABRT;
-    case GDB_SIGNAL_FPE:
-      return SIGFPE;
-    case GDB_SIGNAL_SEGV:
-      return SIGSEGV;
-    case GDB_SIGNAL_TERM:
-      return SIGTERM;
-
-      /* All other signals need preprocessor conditionals.  */
-#if defined (SIGHUP)
-    case GDB_SIGNAL_HUP:
-      return SIGHUP;
-#endif
-#if defined (SIGQUIT)
-    case GDB_SIGNAL_QUIT:
-      return SIGQUIT;
-#endif
-#if defined (SIGTRAP)
-    case GDB_SIGNAL_TRAP:
-      return SIGTRAP;
-#endif
-#if defined (SIGEMT)
-    case GDB_SIGNAL_EMT:
-      return SIGEMT;
-#endif
-#if defined (SIGKILL)
-    case GDB_SIGNAL_KILL:
-      return SIGKILL;
-#endif
-#if defined (SIGBUS)
-    case GDB_SIGNAL_BUS:
-      return SIGBUS;
-#endif
-#if defined (SIGSYS)
-    case GDB_SIGNAL_SYS:
-      return SIGSYS;
-#endif
-#if defined (SIGPIPE)
-    case GDB_SIGNAL_PIPE:
-      return SIGPIPE;
-#endif
-#if defined (SIGALRM)
-    case GDB_SIGNAL_ALRM:
-      return SIGALRM;
-#endif
-#if defined (SIGUSR1)
-    case GDB_SIGNAL_USR1:
-      return SIGUSR1;
-#endif
-#if defined (SIGUSR2)
-    case GDB_SIGNAL_USR2:
-      return SIGUSR2;
-#endif
-#if defined (SIGCHLD) || defined (SIGCLD)
-    case GDB_SIGNAL_CHLD:
-#if defined (SIGCHLD)
-      return SIGCHLD;
-#else
-      return SIGCLD;
-#endif
-#endif /* SIGCLD or SIGCHLD */
-#if defined (SIGPWR)
-    case GDB_SIGNAL_PWR:
-      return SIGPWR;
-#endif
-#if defined (SIGWINCH)
-    case GDB_SIGNAL_WINCH:
-      return SIGWINCH;
-#endif
-#if defined (SIGURG)
-    case GDB_SIGNAL_URG:
-      return SIGURG;
-#endif
-#if defined (SIGIO)
-    case GDB_SIGNAL_IO:
-      return SIGIO;
-#endif
-#if defined (SIGPOLL)
-    case GDB_SIGNAL_POLL:
-      return SIGPOLL;
-#endif
-#if defined (SIGSTOP)
-    case GDB_SIGNAL_STOP:
-      return SIGSTOP;
-#endif
-#if defined (SIGTSTP)
-    case GDB_SIGNAL_TSTP:
-      return SIGTSTP;
-#endif
-#if defined (SIGCONT)
-    case GDB_SIGNAL_CONT:
-      return SIGCONT;
-#endif
-#if defined (SIGTTIN)
-    case GDB_SIGNAL_TTIN:
-      return SIGTTIN;
-#endif
-#if defined (SIGTTOU)
-    case GDB_SIGNAL_TTOU:
-      return SIGTTOU;
-#endif
-#if defined (SIGVTALRM)
-    case GDB_SIGNAL_VTALRM:
-      return SIGVTALRM;
-#endif
-#if defined (SIGPROF)
-    case GDB_SIGNAL_PROF:
-      return SIGPROF;
-#endif
-#if defined (SIGXCPU)
-    case GDB_SIGNAL_XCPU:
-      return SIGXCPU;
-#endif
-#if defined (SIGXFSZ)
-    case GDB_SIGNAL_XFSZ:
-      return SIGXFSZ;
-#endif
-#if defined (SIGWIND)
-    case GDB_SIGNAL_WIND:
-      return SIGWIND;
-#endif
-#if defined (SIGPHONE)
-    case GDB_SIGNAL_PHONE:
-      return SIGPHONE;
-#endif
-#if defined (SIGLOST)
-    case GDB_SIGNAL_LOST:
-      return SIGLOST;
-#endif
-#if defined (SIGWAITING)
-    case GDB_SIGNAL_WAITING:
-      return SIGWAITING;
-#endif
-#if defined (SIGCANCEL)
-    case GDB_SIGNAL_CANCEL:
-      return SIGCANCEL;
-#endif
-#if defined (SIGLWP)
-    case GDB_SIGNAL_LWP:
-      return SIGLWP;
-#endif
-#if defined (SIGDANGER)
-    case GDB_SIGNAL_DANGER:
-      return SIGDANGER;
-#endif
-#if defined (SIGGRANT)
-    case GDB_SIGNAL_GRANT:
-      return SIGGRANT;
-#endif
-#if defined (SIGRETRACT)
-    case GDB_SIGNAL_RETRACT:
-      return SIGRETRACT;
-#endif
-#if defined (SIGMSG)
-    case GDB_SIGNAL_MSG:
-      return SIGMSG;
-#endif
-#if defined (SIGSOUND)
-    case GDB_SIGNAL_SOUND:
-      return SIGSOUND;
-#endif
-#if defined (SIGSAK)
-    case GDB_SIGNAL_SAK:
-      return SIGSAK;
-#endif
-#if defined (SIGPRIO)
-    case GDB_SIGNAL_PRIO:
-      return SIGPRIO;
-#endif
-
-      /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
-#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
-    case GDB_EXC_BAD_ACCESS:
-      return _NSIG + EXC_BAD_ACCESS;
-#endif
-#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
-    case GDB_EXC_BAD_INSTRUCTION:
-      return _NSIG + EXC_BAD_INSTRUCTION;
-#endif
-#if defined (EXC_ARITHMETIC) && defined (_NSIG)
-    case GDB_EXC_ARITHMETIC:
-      return _NSIG + EXC_ARITHMETIC;
-#endif
-#if defined (EXC_EMULATION) && defined (_NSIG)
-    case GDB_EXC_EMULATION:
-      return _NSIG + EXC_EMULATION;
-#endif
-#if defined (EXC_SOFTWARE) && defined (_NSIG)
-    case GDB_EXC_SOFTWARE:
-      return _NSIG + EXC_SOFTWARE;
-#endif
-#if defined (EXC_BREAKPOINT) && defined (_NSIG)
-    case GDB_EXC_BREAKPOINT:
-      return _NSIG + EXC_BREAKPOINT;
-#endif
-
-#if defined (SIGINFO)
-    case GDB_SIGNAL_INFO:
-      return SIGINFO;
-#endif
-#if defined (SIGLIBRT)
-    case GDB_SIGNAL_LIBRT:
-      return SIGLIBRT;
-#endif
-
-    default:
-#if defined (REALTIME_LO)
-      retsig = 0;
-
-      if (oursig >= GDB_SIGNAL_REALTIME_33
-	  && oursig <= GDB_SIGNAL_REALTIME_63)
-	{
-	  /* This block of signals is continuous, and
-             GDB_SIGNAL_REALTIME_33 is 33 by definition.  */
-	  retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
-	}
-      else if (oursig == GDB_SIGNAL_REALTIME_32)
-	{
-	  /* GDB_SIGNAL_REALTIME_32 isn't contiguous with
-             GDB_SIGNAL_REALTIME_33.  It is 32 by definition.  */
-	  retsig = 32;
-	}
-      else if (oursig >= GDB_SIGNAL_REALTIME_64
-	  && oursig <= GDB_SIGNAL_REALTIME_127)
-	{
-	  /* This block of signals is continuous, and
-             GDB_SIGNAL_REALTIME_64 is 64 by definition.  */
-	  retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
-	}
-
-      if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
-	return retsig;
-#endif
-
-      *oursig_ok = 0;
-      return 0;
-    }
-}
-
-int
-gdb_signal_to_host_p (enum gdb_signal oursig)
-{
-  int oursig_ok;
-  do_gdb_signal_to_host (oursig, &oursig_ok);
-  return oursig_ok;
-}
-
-int
-gdb_signal_to_host (enum gdb_signal oursig)
-{
-  int oursig_ok;
-  int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
-  if (!oursig_ok)
-    {
-      /* The user might be trying to do "signal SIGSAK" where this system
-         doesn't have SIGSAK.  */
-      warning (_("Signal %s does not exist on this system."),
-	       gdb_signal_to_name (oursig));
-      return 0;
-    }
-  else
-    return targ_signo;
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/signals-state-save-restore.c ./gdb/gdbsupport/signals-state-save-restore.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/signals-state-save-restore.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/signals-state-save-restore.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,114 +0,0 @@
-/* Copyright (C) 2016-2020 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 "common-defs.h"
-#include "signals-state-save-restore.h"
-#include "gdbsupport/gdb-sigmask.h"
-
-#include <signal.h>
-
-/* The original signal actions and mask.  */
-
-#ifdef HAVE_SIGACTION
-static struct sigaction original_signal_actions[NSIG];
-
-static sigset_t original_signal_mask;
-#endif
-
-/* See signals-state-save-restore.h.   */
-
-void
-save_original_signals_state (bool quiet)
-{
-#ifdef HAVE_SIGACTION
-  int i;
-  int res;
-
-  res = gdb_sigmask (0,  NULL, &original_signal_mask);
-  if (res == -1)
-    perror_with_name (("sigprocmask"));
-
-  bool found_preinstalled = false;
-
-  for (i = 1; i < NSIG; i++)
-    {
-      struct sigaction *oldact = &original_signal_actions[i];
-
-      res = sigaction (i, NULL, oldact);
-      if (res == -1 && errno == EINVAL)
-	{
-	  /* Some signal numbers in the range are invalid.  */
-	  continue;
-	}
-      else if (res == -1)
-	perror_with_name (("sigaction"));
-
-      /* If we find a custom signal handler already installed, then
-	 this function was called too late.  This is a warning instead
-	 of an internal error because this can also happen if you
-	 LD_PRELOAD a library that installs a signal handler early via
-	 __attribute__((constructor)), like libSegFault.so.  */
-      if (!quiet
-	  && oldact->sa_handler != SIG_DFL
-	  && oldact->sa_handler != SIG_IGN)
-	{
-	  found_preinstalled = true;
-
-	  /* Use raw fprintf here because we're being called in early
-	     startup, before GDB's filtered streams are created.  */
-	  fprintf (stderr,
-		   _("warning: Found custom handler for signal "
-		     "%d (%s) preinstalled.\n"), i,
-		   strsignal (i));
-	}
-    }
-
-  if (found_preinstalled)
-    {
-      fprintf (stderr, _("\
-Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)\n\
-won't be propagated to spawned programs.\n"));
-    }
-#endif
-}
-
-/* See signals-state-save-restore.h.   */
-
-void
-restore_original_signals_state (void)
-{
-#ifdef HAVE_SIGACTION
-  int i;
-  int res;
-
-  for (i = 1; i < NSIG; i++)
-    {
-      res = sigaction (i, &original_signal_actions[i], NULL);
-      if (res == -1 && errno == EINVAL)
-	{
-	  /* Some signal numbers in the range are invalid.  */
-	  continue;
-	}
-      else if (res == -1)
-	perror_with_name (("sigaction"));
-    }
-
-  res = gdb_sigmask (SIG_SETMASK,  &original_signal_mask, NULL);
-  if (res == -1)
-    perror_with_name (("sigprocmask"));
-#endif
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/signals-state-save-restore.h ./gdb/gdbsupport/signals-state-save-restore.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/signals-state-save-restore.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/signals-state-save-restore.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,40 +0,0 @@
-/* Copyright (C) 2016-2020 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 COMMON_SIGNALS_STATE_SAVE_RESTORE_H
-#define COMMON_SIGNALS_STATE_SAVE_RESTORE_H
-
-/* Save/restore the signal actions of all signals, and the signal
-   mask.
-
-   Since the exec family of functions does not reset the signal
-   disposition of signals set to SIG_IGN, nor does it reset the signal
-   mask, in order to be transparent, when spawning new child processes
-   to debug (with "run", etc.), we must reset signal actions and mask
-   back to what was originally inherited from gdb/gdbserver's parent,
-   just before execing the target program to debug.  */
-
-/* Save the signal state of all signals.  If !QUIET, warn if we detect
-   a custom signal handler preinstalled.  */
-
-extern void save_original_signals_state (bool quiet);
-
-/* Restore the signal state of all signals.  */
-
-extern void restore_original_signals_state (void);
-
-#endif /* COMMON_SIGNALS_STATE_SAVE_RESTORE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/symbol.h ./gdb/gdbsupport/symbol.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/symbol.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/symbol.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-/* Declarations of common symbol functions.
-
-   Copyright (C) 2014-2020 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 COMMON_SYMBOL_H
-#define COMMON_SYMBOL_H
-
-struct objfile;
-
-/* Find a symbol that matches NAME.  Limit the search to OBJFILE if
-   OBJFILE is non-NULL and the implementation supports limiting the
-   search to specific object files.  NAME may be mangled or demangled.
-   If a match is found, store the matching symbol's address in ADDR
-   and return zero.  Returns nonzero if no symbol matching NAME is
-   found.  Raise an exception if OBJFILE is non-NULL and the
-   implementation does not support limiting searches to specific
-   object files.  This function must be provided by the client.  */
-
-extern int find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
-					struct objfile *objfile);
-
-#endif /* COMMON_SYMBOL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/tdesc.c ./gdb/gdbsupport/tdesc.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/tdesc.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/tdesc.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,401 +0,0 @@
-/* Target description support for GDB.
-
-   Copyright (C) 2018-2020 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 "common-defs.h"
-#include "gdbsupport/tdesc.h"
-
-tdesc_reg::tdesc_reg (struct tdesc_feature *feature, const std::string &name_,
-		      int regnum, int save_restore_, const char *group_,
-		      int bitsize_, const char *type_)
-  : name (name_), target_regnum (regnum),
-    save_restore (save_restore_),
-    group (group_ != NULL ? group_ : ""),
-    bitsize (bitsize_),
-    type (type_ != NULL ? type_ : "<unknown>")
-{
-  /* If the register's type is target-defined, look it up now.  We may not
-     have easy access to the containing feature when we want it later.  */
-  tdesc_type = tdesc_named_type (feature, type.c_str ());
-}
-
-/* Predefined types.  */
-static tdesc_type_builtin tdesc_predefined_types[] =
-{
-  { "bool", TDESC_TYPE_BOOL },
-  { "int8", TDESC_TYPE_INT8 },
-  { "int16", TDESC_TYPE_INT16 },
-  { "int32", TDESC_TYPE_INT32 },
-  { "int64", TDESC_TYPE_INT64 },
-  { "int128", TDESC_TYPE_INT128 },
-  { "uint8", TDESC_TYPE_UINT8 },
-  { "uint16", TDESC_TYPE_UINT16 },
-  { "uint32", TDESC_TYPE_UINT32 },
-  { "uint64", TDESC_TYPE_UINT64 },
-  { "uint128", TDESC_TYPE_UINT128 },
-  { "code_ptr", TDESC_TYPE_CODE_PTR },
-  { "data_ptr", TDESC_TYPE_DATA_PTR },
-  { "ieee_half", TDESC_TYPE_IEEE_HALF },
-  { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
-  { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
-  { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
-  { "i387_ext", TDESC_TYPE_I387_EXT }
-};
-
-void tdesc_feature::accept (tdesc_element_visitor &v) const
-{
-  v.visit_pre (this);
-
-  for (const tdesc_type_up &type : types)
-    type->accept (v);
-
-  for (const tdesc_reg_up &reg : registers)
-    reg->accept (v);
-
-  v.visit_post (this);
-}
-
-bool tdesc_feature::operator== (const tdesc_feature &other) const
-{
-  if (name != other.name)
-    return false;
-
-  if (registers.size () != other.registers.size ())
-    return false;
-
-  for (int ix = 0; ix < registers.size (); ix++)
-    {
-      const tdesc_reg_up &reg1 = registers[ix];
-      const tdesc_reg_up &reg2 = other.registers[ix];
-
-      if (reg1 != reg2 && *reg1 != *reg2)
-	return false;
-      }
-
-  if (types.size () != other.types.size ())
-    return false;
-
-  for (int ix = 0; ix < types.size (); ix++)
-    {
-      const tdesc_type_up &type1 = types[ix];
-      const tdesc_type_up &type2 = other.types[ix];
-
-      if (type1 != type2 && *type1 != *type2)
-	return false;
-    }
-
-  return true;
-}
-
-/* Lookup a predefined type.  */
-
-static struct tdesc_type *
-tdesc_predefined_type (enum tdesc_type_kind kind)
-{
-  for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
-    if (tdesc_predefined_types[ix].kind == kind)
-      return &tdesc_predefined_types[ix];
-
-  gdb_assert_not_reached ("bad predefined tdesc type");
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-struct tdesc_type *
-tdesc_named_type (const struct tdesc_feature *feature, const char *id)
-{
-  /* First try target-defined types.  */
-  for (const tdesc_type_up &type : feature->types)
-    if (type->name == id)
-      return type.get ();
-
-  /* Next try the predefined types.  */
-  for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
-    if (tdesc_predefined_types[ix].name == id)
-      return &tdesc_predefined_types[ix];
-
-  return NULL;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_create_reg (struct tdesc_feature *feature, const char *name,
-		  int regnum, int save_restore, const char *group,
-		  int bitsize, const char *type)
-{
-  tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore,
-				  group, bitsize, type);
-
-  feature->registers.emplace_back (reg);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-struct tdesc_type *
-tdesc_create_vector (struct tdesc_feature *feature, const char *name,
-		     struct tdesc_type *field_type, int count)
-{
-  tdesc_type_vector *type = new tdesc_type_vector (name, field_type, count);
-  feature->types.emplace_back (type);
-
-  return type;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-tdesc_type_with_fields *
-tdesc_create_struct (struct tdesc_feature *feature, const char *name)
-{
-  tdesc_type_with_fields *type
-    = new tdesc_type_with_fields (name, TDESC_TYPE_STRUCT);
-  feature->types.emplace_back (type);
-
-  return type;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_set_struct_size (tdesc_type_with_fields *type, int size)
-{
-  gdb_assert (type->kind == TDESC_TYPE_STRUCT);
-  gdb_assert (size > 0);
-  type->size = size;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-tdesc_type_with_fields *
-tdesc_create_union (struct tdesc_feature *feature, const char *name)
-{
-  tdesc_type_with_fields *type
-    = new tdesc_type_with_fields (name, TDESC_TYPE_UNION);
-  feature->types.emplace_back (type);
-
-  return type;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-tdesc_type_with_fields *
-tdesc_create_flags (struct tdesc_feature *feature, const char *name,
-		    int size)
-{
-  gdb_assert (size > 0);
-
-  tdesc_type_with_fields *type
-    = new tdesc_type_with_fields (name, TDESC_TYPE_FLAGS, size);
-  feature->types.emplace_back (type);
-
-  return type;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-tdesc_type_with_fields *
-tdesc_create_enum (struct tdesc_feature *feature, const char *name,
-		   int size)
-{
-  gdb_assert (size > 0);
-
-  tdesc_type_with_fields *type
-    = new tdesc_type_with_fields (name, TDESC_TYPE_ENUM, size);
-  feature->types.emplace_back (type);
-
-  return type;
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_add_field (tdesc_type_with_fields *type, const char *field_name,
-		 struct tdesc_type *field_type)
-{
-  gdb_assert (type->kind == TDESC_TYPE_UNION
-	      || type->kind == TDESC_TYPE_STRUCT);
-
-  /* Initialize start and end so we know this is not a bit-field
-     when we print-c-tdesc.  */
-  type->fields.emplace_back (field_name, field_type, -1, -1);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_add_typed_bitfield (tdesc_type_with_fields *type, const char *field_name,
-			  int start, int end, struct tdesc_type *field_type)
-{
-  gdb_assert (type->kind == TDESC_TYPE_STRUCT
-	      || type->kind == TDESC_TYPE_FLAGS);
-  gdb_assert (start >= 0 && end >= start);
-
-  type->fields.emplace_back (field_name, field_type, start, end);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name,
-		    int start, int end)
-{
-  struct tdesc_type *field_type;
-
-  gdb_assert (start >= 0 && end >= start);
-
-  if (type->size > 4)
-    field_type = tdesc_predefined_type (TDESC_TYPE_UINT64);
-  else
-    field_type = tdesc_predefined_type (TDESC_TYPE_UINT32);
-
-  tdesc_add_typed_bitfield (type, field_name, start, end, field_type);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_add_flag (tdesc_type_with_fields *type, int start,
-		const char *flag_name)
-{
-  gdb_assert (type->kind == TDESC_TYPE_FLAGS
-	      || type->kind == TDESC_TYPE_STRUCT);
-
-  type->fields.emplace_back (flag_name,
-			     tdesc_predefined_type (TDESC_TYPE_BOOL),
-			     start, start);
-}
-
-/* See gdbsupport/tdesc.h.  */
-
-void
-tdesc_add_enum_value (tdesc_type_with_fields *type, int value,
-		      const char *name)
-{
-  gdb_assert (type->kind == TDESC_TYPE_ENUM);
-  type->fields.emplace_back (name,
-			     tdesc_predefined_type (TDESC_TYPE_INT32),
-			     value, -1);
-}
-
-void print_xml_feature::visit_pre (const tdesc_feature *e)
-{
-  string_appendf (*m_buffer, "<feature name=\"%s\">\n", e->name.c_str ());
-}
-
-void print_xml_feature::visit_post (const tdesc_feature *e)
-{
-  string_appendf (*m_buffer, "</feature>\n");
-}
-
-void print_xml_feature::visit (const tdesc_type_builtin *t)
-{
-  error (_("xml output is not supported for type \"%s\"."), t->name.c_str ());
-}
-
-void print_xml_feature::visit (const tdesc_type_vector *t)
-{
-  string_appendf (*m_buffer, "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>\n",
-		  t->name.c_str (), t->element_type->name.c_str (), t->count);
-}
-
-void print_xml_feature::visit (const tdesc_type_with_fields *t)
-{
-  const static char *types[] = { "struct", "union", "flags", "enum" };
-
-  gdb_assert (t->kind >= TDESC_TYPE_STRUCT && t->kind <= TDESC_TYPE_ENUM);
-
-  string_appendf (*m_buffer,
-		  "<%s id=\"%s\"", types[t->kind - TDESC_TYPE_STRUCT],
-		  t->name.c_str ());
-
-  switch (t->kind)
-    {
-    case TDESC_TYPE_STRUCT:
-    case TDESC_TYPE_FLAGS:
-      if (t->size > 0)
-	string_appendf (*m_buffer, " size=\"%d\"", t->size);
-      string_appendf (*m_buffer, ">\n");
-
-      for (const tdesc_type_field &f : t->fields)
-	{
-	  string_appendf (*m_buffer, "  <field name=\"%s\" ", f.name.c_str ());
-	  if (f.start == -1)
-	    string_appendf (*m_buffer, "type=\"%s\"/>\n",
-			    f.type->name.c_str ());
-	  else
-	    string_appendf (*m_buffer, "start=\"%d\" end=\"%d\"/>\n", f.start,
-			    f.end);
-	}
-      break;
-
-    case TDESC_TYPE_ENUM:
-      string_appendf (*m_buffer, ">\n");
-      for (const tdesc_type_field &f : t->fields)
-	string_appendf (*m_buffer, "  <field name=\"%s\" start=\"%d\"/>\n",
-			f.name.c_str (), f.start);
-      break;
-
-    case TDESC_TYPE_UNION:
-      string_appendf (*m_buffer, ">\n");
-      for (const tdesc_type_field &f : t->fields)
-	string_appendf (*m_buffer, "  <field name=\"%s\" type=\"%s\"/>\n",
-			f.name.c_str (), f.type->name.c_str ());
-      break;
-
-    default:
-      error (_("xml output is not supported for type \"%s\"."),
-	     t->name.c_str ());
-    }
-
-  string_appendf (*m_buffer, "</%s>\n", types[t->kind - TDESC_TYPE_STRUCT]);
-}
-
-void print_xml_feature::visit (const tdesc_reg *r)
-{
-  string_appendf (*m_buffer,
-		  "<reg name=\"%s\" bitsize=\"%d\" type=\"%s\" regnum=\"%ld\"",
-		  r->name.c_str (), r->bitsize, r->type.c_str (),
-		  r->target_regnum);
-
-  if (r->group.length () > 0)
-    string_appendf (*m_buffer, " group=\"%s\"", r->group.c_str ());
-
-  if (r->save_restore == 0)
-    string_appendf (*m_buffer, " save-restore=\"no\"");
-
-  string_appendf (*m_buffer, "/>\n");
-}
-
-void print_xml_feature::visit_pre (const target_desc *e)
-{
-#ifndef IN_PROCESS_AGENT
-  string_appendf (*m_buffer, "<?xml version=\"1.0\"?>\n");
-  string_appendf (*m_buffer, "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">\n");
-  string_appendf (*m_buffer, "<target>\n<architecture>%s</architecture>\n",
-		  tdesc_architecture_name (e));
-
-  const char *osabi = tdesc_osabi_name (e);
-  if (osabi != nullptr)
-    string_appendf (*m_buffer, "<osabi>%s</osabi>", osabi);
-#endif
-}
-
-void print_xml_feature::visit_post (const target_desc *e)
-{
-  string_appendf (*m_buffer, "</target>\n");
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/tdesc.h ./gdb/gdbsupport/tdesc.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/tdesc.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/tdesc.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,408 +0,0 @@
-/* Copyright (C) 2006-2020 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 COMMON_TDESC_H
-#define COMMON_TDESC_H
-
-struct tdesc_feature;
-struct tdesc_type;
-struct tdesc_type_builtin;
-struct tdesc_type_vector;
-struct tdesc_type_with_fields;
-struct tdesc_reg;
-struct target_desc;
-
-/* The interface to visit different elements of target description.  */
-
-class tdesc_element_visitor
-{
-public:
-  virtual void visit_pre (const target_desc *e)
-  {}
-
-  virtual void visit_post (const target_desc *e)
-  {}
-
-  virtual void visit_pre (const tdesc_feature *e)
-  {}
-
-  virtual void visit_post (const tdesc_feature *e)
-  {}
-
-  virtual void visit (const tdesc_type_builtin *e)
-  {}
-
-  virtual void visit (const tdesc_type_vector *e)
-  {}
-
-  virtual void visit (const tdesc_type_with_fields *e)
-  {}
-
-  virtual void visit (const tdesc_reg *e)
-  {}
-};
-
-class tdesc_element
-{
-public:
-  virtual void accept (tdesc_element_visitor &v) const = 0;
-};
-
-/* An individual register from a target description.  */
-
-struct tdesc_reg : tdesc_element
-{
-  tdesc_reg (struct tdesc_feature *feature, const std::string &name_,
-	     int regnum, int save_restore_, const char *group_,
-	     int bitsize_, const char *type_);
-
-  virtual ~tdesc_reg () = default;
-
-  DISABLE_COPY_AND_ASSIGN (tdesc_reg);
-
-  /* The name of this register.  In standard features, it may be
-     recognized by the architecture support code, or it may be purely
-     for the user.  */
-  std::string name;
-
-  /* The register number used by this target to refer to this
-     register.  This is used for remote p/P packets and to determine
-     the ordering of registers in the remote g/G packets.  */
-  long target_regnum;
-
-  /* If this flag is set, GDB should save and restore this register
-     around calls to an inferior function.  */
-  int save_restore;
-
-  /* The name of the register group containing this register, or empty
-     if the group should be automatically determined from the
-     register's type.  If this is "general", "float", or "vector", the
-     corresponding "info" command should display this register's
-     value.  It can be an arbitrary string, but should be limited to
-     alphanumeric characters and internal hyphens.  Currently other
-     strings are ignored (treated as empty).  */
-  std::string group;
-
-  /* The size of the register, in bits.  */
-  int bitsize;
-
-  /* The type of the register.  This string corresponds to either
-     a named type from the target description or a predefined
-     type from GDB.  */
-  std::string type;
-
-  /* The target-described type corresponding to TYPE, if found.  */
-  struct tdesc_type *tdesc_type;
-
-  void accept (tdesc_element_visitor &v) const override
-  {
-    v.visit (this);
-  }
-
-  bool operator== (const tdesc_reg &other) const
-  {
-    return (name == other.name
-       && target_regnum == other.target_regnum
-       && save_restore == other.save_restore
-       && bitsize == other.bitsize
-       && group == other.group
-       && type == other.type);
-  }
-
-  bool operator!= (const tdesc_reg &other) const
-  {
-    return !(*this == other);
-  }
-};
-
-typedef std::unique_ptr<tdesc_reg> tdesc_reg_up;
-
-enum tdesc_type_kind
-{
-  /* Predefined types.  */
-  TDESC_TYPE_BOOL,
-  TDESC_TYPE_INT8,
-  TDESC_TYPE_INT16,
-  TDESC_TYPE_INT32,
-  TDESC_TYPE_INT64,
-  TDESC_TYPE_INT128,
-  TDESC_TYPE_UINT8,
-  TDESC_TYPE_UINT16,
-  TDESC_TYPE_UINT32,
-  TDESC_TYPE_UINT64,
-  TDESC_TYPE_UINT128,
-  TDESC_TYPE_CODE_PTR,
-  TDESC_TYPE_DATA_PTR,
-  TDESC_TYPE_IEEE_HALF,
-  TDESC_TYPE_IEEE_SINGLE,
-  TDESC_TYPE_IEEE_DOUBLE,
-  TDESC_TYPE_ARM_FPA_EXT,
-  TDESC_TYPE_I387_EXT,
-
-  /* Types defined by a target feature.  */
-  TDESC_TYPE_VECTOR,
-  TDESC_TYPE_STRUCT,
-  TDESC_TYPE_UNION,
-  TDESC_TYPE_FLAGS,
-  TDESC_TYPE_ENUM
-};
-
-struct tdesc_type : tdesc_element
-{
-  tdesc_type (const std::string &name_, enum tdesc_type_kind kind_)
-    : name (name_), kind (kind_)
-  {}
-
-  virtual ~tdesc_type () = default;
-
-  DISABLE_COPY_AND_ASSIGN (tdesc_type);
-
-  /* The name of this type.  */
-  std::string name;
-
-  /* Identify the kind of this type.  */
-  enum tdesc_type_kind kind;
-
-  bool operator== (const tdesc_type &other) const
-  {
-    return name == other.name && kind == other.kind;
-  }
-
-  bool operator!= (const tdesc_type &other) const
-  {
-    return !(*this == other);
-  }
-};
-
-typedef std::unique_ptr<tdesc_type> tdesc_type_up;
-
-struct tdesc_type_builtin : tdesc_type
-{
-  tdesc_type_builtin (const std::string &name, enum tdesc_type_kind kind)
-  : tdesc_type (name, kind)
-  {}
-
-  void accept (tdesc_element_visitor &v) const override
-  {
-    v.visit (this);
-  }
-};
-
-/* tdesc_type for vector types.  */
-
-struct tdesc_type_vector : tdesc_type
-{
-  tdesc_type_vector (const std::string &name, tdesc_type *element_type_,
-		     int count_)
-  : tdesc_type (name, TDESC_TYPE_VECTOR),
-    element_type (element_type_), count (count_)
-  {}
-
-  void accept (tdesc_element_visitor &v) const override
-  {
-    v.visit (this);
-  }
-
-  struct tdesc_type *element_type;
-  int count;
-};
-
-/* A named type from a target description.  */
-
-struct tdesc_type_field
-{
-  tdesc_type_field (const std::string &name_, tdesc_type *type_,
-		    int start_, int end_)
-  : name (name_), type (type_), start (start_), end (end_)
-  {}
-
-  std::string name;
-  struct tdesc_type *type;
-  /* For non-enum-values, either both are -1 (non-bitfield), or both are
-     not -1 (bitfield).  For enum values, start is the value (which could be
-     -1), end is -1.  */
-  int start, end;
-};
-
-/* tdesc_type for struct, union, flags, and enum types.  */
-
-struct tdesc_type_with_fields : tdesc_type
-{
-  tdesc_type_with_fields (const std::string &name, tdesc_type_kind kind,
-			  int size_ = 0)
-  : tdesc_type (name, kind), size (size_)
-  {}
-
-  void accept (tdesc_element_visitor &v) const override
-  {
-    v.visit (this);
-  }
-
-  std::vector<tdesc_type_field> fields;
-  int size;
-};
-
-/* A feature from a target description.  Each feature is a collection
-   of other elements, e.g. registers and types.  */
-
-struct tdesc_feature : tdesc_element
-{
-  tdesc_feature (const std::string &name_)
-    : name (name_)
-  {}
-
-  virtual ~tdesc_feature () = default;
-
-  DISABLE_COPY_AND_ASSIGN (tdesc_feature);
-
-  /* The name of this feature.  It may be recognized by the architecture
-     support code.  */
-  std::string name;
-
-  /* The registers associated with this feature.  */
-  std::vector<tdesc_reg_up> registers;
-
-  /* The types associated with this feature.  */
-  std::vector<tdesc_type_up> types;
-
-  void accept (tdesc_element_visitor &v) const override;
-
-  bool operator== (const tdesc_feature &other) const;
-
-  bool operator!= (const tdesc_feature &other) const
-  {
-    return !(*this == other);
-  }
-};
-
-typedef std::unique_ptr<tdesc_feature> tdesc_feature_up;
-
-/* Allocate a new target_desc.  */
-target_desc *allocate_target_description (void);
-
-/* Set TARGET_DESC's architecture by NAME.  */
-void set_tdesc_architecture (target_desc *target_desc,
-			     const char *name);
-
-/* Return the architecture associated with this target description as a string,
-   or NULL if no architecture was specified.  */
-const char *tdesc_architecture_name (const struct target_desc *target_desc);
-
-/* Set TARGET_DESC's osabi by NAME.  */
-void set_tdesc_osabi (target_desc *target_desc, const char *name);
-
-/* Return the osabi associated with this target description as a string,
-   or NULL if no osabi was specified.  */
-const char *tdesc_osabi_name (const struct target_desc *target_desc);
-
-/* Return the type associated with ID in the context of FEATURE, or
-   NULL if none.  */
-struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
-				     const char *id);
-
-/* Return the created feature named NAME in target description TDESC.  */
-struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc,
-					    const char *name);
-
-/* Return the created vector tdesc_type named NAME in FEATURE.  */
-struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature,
-					const char *name,
-					struct tdesc_type *field_type,
-					int count);
-
-/* Return the created struct tdesc_type named NAME in FEATURE.  */
-tdesc_type_with_fields *tdesc_create_struct (struct tdesc_feature *feature,
-					     const char *name);
-
-/* Return the created union tdesc_type named NAME in FEATURE.  */
-tdesc_type_with_fields *tdesc_create_union (struct tdesc_feature *feature,
-					    const char *name);
-
-/* Return the created flags tdesc_type named NAME in FEATURE.  */
-tdesc_type_with_fields *tdesc_create_flags (struct tdesc_feature *feature,
-					    const char *name,
-					    int size);
-
-/* Return the created enum tdesc_type named NAME in FEATURE.  */
-tdesc_type_with_fields *tdesc_create_enum (struct tdesc_feature *feature,
-					   const char *name,
-					   int size);
-
-/* Add a new field to TYPE.  FIELD_NAME is its name, and FIELD_TYPE is
-   its type.  */
-void tdesc_add_field (tdesc_type_with_fields *type, const char *field_name,
-		      struct tdesc_type *field_type);
-
-/* Add a new bitfield to TYPE, with range START to END.  FIELD_NAME is its name,
-   and FIELD_TYPE is its type.  */
-void tdesc_add_typed_bitfield (tdesc_type_with_fields *type,
-			       const char *field_name,
-			       int start, int end,
-			       struct tdesc_type *field_type);
-
-/* Set the total length of TYPE.  Structs which contain bitfields may
-   omit the reserved bits, so the end of the last field may not
-   suffice.  */
-void tdesc_set_struct_size (tdesc_type_with_fields *type, int size);
-
-/* Add a new untyped bitfield to TYPE.
-   Untyped bitfields become either uint32 or uint64 depending on the size
-   of the underlying type.  */
-void tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name,
-			 int start, int end);
-
-/* A flag is just a typed(bool) single-bit bitfield.
-   This function is kept to minimize changes in generated files.  */
-void tdesc_add_flag (tdesc_type_with_fields *type, int start,
-		     const char *flag_name);
-
-/* Add field with VALUE and NAME to the enum TYPE.  */
-void tdesc_add_enum_value (tdesc_type_with_fields *type, int value,
-			   const char *name);
-
-/* Create a register in feature FEATURE.  */
-void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
-		       int regnum, int save_restore, const char *group,
-		       int bitsize, const char *type);
-
-/* Return the tdesc in string XML format.  */
-
-const char *tdesc_get_features_xml (const target_desc *tdesc);
-
-/* Print target description as xml.  */
-
-class print_xml_feature : public tdesc_element_visitor
-{
-public:
-  print_xml_feature (std::string *buffer_)
-    : m_buffer (buffer_)
-  {}
-
-  void visit_pre (const target_desc *e) override;
-  void visit_post (const target_desc *e) override;
-  void visit_pre (const tdesc_feature *e) override;
-  void visit_post (const tdesc_feature *e) override;
-  void visit (const tdesc_type_builtin *type) override;
-  void visit (const tdesc_type_vector *type) override;
-  void visit (const tdesc_type_with_fields *type) override;
-  void visit (const tdesc_reg *reg) override;
-
-private:
-  std::string *m_buffer;
-};
-
-#endif /* COMMON_TDESC_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/thread-pool.c ./gdb/gdbsupport/thread-pool.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/thread-pool.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/thread-pool.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,173 +0,0 @@
-/* Thread pool
-
-   Copyright (C) 2019-2020 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 "common-defs.h"
-
-#if CXX_STD_THREAD
-
-#include "gdbsupport/thread-pool.h"
-#include "gdbsupport/alt-stack.h"
-#include "gdbsupport/block-signals.h"
-#include <algorithm>
-#include "diagnostics.h"
-
-/* On the off chance that we have the pthread library on a Windows
-   host, but std::thread is not using it, avoid calling
-   pthread_setname_np on Windows.  */
-#ifndef _WIN32
-#ifdef HAVE_PTHREAD_SETNAME_NP
-#define USE_PTHREAD_SETNAME_NP
-#endif
-#endif
-
-#ifdef USE_PTHREAD_SETNAME_NP
-
-#include <pthread.h>
-
-DIAGNOSTIC_PUSH
-DIAGNOSTIC_IGNORE_UNUSED_FUNCTION
-
-/* Handle platform discrepancies in pthread_setname_np: macOS uses a
-   single-argument form, while Linux uses a two-argument form.  This
-   wrapper handles the difference.  */
-
-static void
-set_thread_name (int (*set_name) (pthread_t, const char *), const char *name)
-{
-  set_name (pthread_self (), name);
-}
-
-/* The macOS man page says that pthread_setname_np returns "void", but
-   the headers actually declare it returning "int".  */
-static void
-set_thread_name (int (*set_name) (const char *), const char *name)
-{
-  set_name (name);
-}
-
-DIAGNOSTIC_POP
-
-#endif	/* USE_PTHREAD_SETNAME_NP */
-
-namespace gdb
-{
-
-/* The thread pool detach()s its threads, so that the threads will not
-   prevent the process from exiting.  However, it was discovered that
-   if any detached threads were still waiting on a condition variable,
-   then the condition variable's destructor would wait for the threads
-   to exit -- defeating the purpose.
-
-   Allocating the thread pool on the heap and simply "leaking" it
-   avoids this problem.
-*/
-thread_pool *thread_pool::g_thread_pool = new thread_pool ();
-
-thread_pool::~thread_pool ()
-{
-  /* Because this is a singleton, we don't need to clean up.  The
-     threads are detached so that they won't prevent process exit.
-     And, cleaning up here would be actively harmful in at least one
-     case -- see the comment by the definition of g_thread_pool.  */
-}
-
-void
-thread_pool::set_thread_count (size_t num_threads)
-{
-  std::lock_guard<std::mutex> guard (m_tasks_mutex);
-
-  /* If the new size is larger, start some new threads.  */
-  if (m_thread_count < num_threads)
-    {
-      /* Ensure that signals used by gdb are blocked in the new
-	 threads.  */
-      block_signals blocker;
-      for (size_t i = m_thread_count; i < num_threads; ++i)
-	{
-	  std::thread thread (&thread_pool::thread_function, this);
-	  thread.detach ();
-	}
-    }
-  /* If the new size is smaller, terminate some existing threads.  */
-  if (num_threads < m_thread_count)
-    {
-      for (size_t i = num_threads; i < m_thread_count; ++i)
-	m_tasks.emplace ();
-      m_tasks_cv.notify_all ();
-    }
-
-  m_thread_count = num_threads;
-}
-
-std::future<void>
-thread_pool::post_task (std::function<void ()> func)
-{
-  std::packaged_task<void ()> t (func);
-  std::future<void> f = t.get_future ();
-
-  if (m_thread_count == 0)
-    {
-      /* Just execute it now.  */
-      t ();
-    }
-  else
-    {
-      std::lock_guard<std::mutex> guard (m_tasks_mutex);
-      m_tasks.emplace (std::move (t));
-      m_tasks_cv.notify_one ();
-    }
-  return f;
-}
-
-void
-thread_pool::thread_function ()
-{
-#ifdef USE_PTHREAD_SETNAME_NP
-  /* This must be done here, because on macOS one can only set the
-     name of the current thread.  */
-  set_thread_name (pthread_setname_np, "gdb worker");
-#endif
-
-  /* Ensure that SIGSEGV is delivered to an alternate signal
-     stack.  */
-  gdb::alternate_signal_stack signal_stack;
-
-  while (true)
-    {
-      optional<task> t;
-
-      {
-	/* We want to hold the lock while examining the task list, but
-	   not while invoking the task function.  */
-	std::unique_lock<std::mutex> guard (m_tasks_mutex);
-	while (m_tasks.empty ())
-	  m_tasks_cv.wait (guard);
-	t = std::move (m_tasks.front());
-	m_tasks.pop ();
-      }
-
-      if (!t.has_value ())
-	break;
-      (*t) ();
-    }
-}
-
-}
-
-#endif /* CXX_STD_THREAD */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/thread-pool.h ./gdb/gdbsupport/thread-pool.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/thread-pool.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/thread-pool.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,90 +0,0 @@
-/* Thread pool
-
-   Copyright (C) 2019-2020 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 GDBSUPPORT_THREAD_POOL_H
-#define GDBSUPPORT_THREAD_POOL_H
-
-#include <queue>
-#include <thread>
-#include <vector>
-#include <functional>
-#include <mutex>
-#include <condition_variable>
-#include <future>
-#include "gdbsupport/gdb_optional.h"
-
-namespace gdb
-{
-
-/* A thread pool.
-
-   There is a single global thread pool, see g_thread_pool.  Tasks can
-   be submitted to the thread pool.  They will be processed in worker
-   threads as time allows.  */
-class thread_pool
-{
-public:
-  /* The sole global thread pool.  */
-  static thread_pool *g_thread_pool;
-
-  ~thread_pool ();
-  DISABLE_COPY_AND_ASSIGN (thread_pool);
-
-  /* Set the thread count of this thread pool.  By default, no threads
-     are created -- the thread count must be set first.  */
-  void set_thread_count (size_t num_threads);
-
-  /* Return the number of executing threads.  */
-  size_t thread_count () const
-  {
-    return m_thread_count;
-  }
-
-  /* Post a task to the thread pool.  A future is returned, which can
-     be used to wait for the result.  */
-  std::future<void> post_task (std::function<void ()> func);
-
-private:
-
-  thread_pool () = default;
-
-  /* The callback for each worker thread.  */
-  void thread_function ();
-
-  /* The current thread count.  */
-  size_t m_thread_count = 0;
-
-  /* A convenience typedef for the type of a task.  */
-  typedef std::packaged_task<void ()> task;
-
-  /* The tasks that have not been processed yet.  An optional is used
-     to represent a task.  If the optional is empty, then this means
-     that the receiving thread should terminate.  If the optional is
-     non-empty, then it is an actual task to evaluate.  */
-  std::queue<optional<task>> m_tasks;
-
-  /* A condition variable and mutex that are used for communication
-     between the main thread and the worker threads.  */
-  std::condition_variable m_tasks_cv;
-  std::mutex m_tasks_mutex;
-};
-
-}
-
-#endif /* GDBSUPPORT_THREAD_POOL_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/traits.h ./gdb/gdbsupport/traits.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/traits.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/traits.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,109 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_TRAITS_H
-#define COMMON_TRAITS_H
-
-#include <type_traits>
-
-/* GCC does not understand __has_feature.  */
-#if !defined(__has_feature)
-# define __has_feature(x) 0
-#endif
-
-/* HAVE_IS_TRIVIALLY_COPYABLE is defined as 1 iff
-   std::is_trivially_copyable is available.  GCC only implemented it
-   in GCC 5.  */
-#if (__has_feature(is_trivially_copyable) \
-     || (defined __GNUC__ && __GNUC__ >= 5))
-# define HAVE_IS_TRIVIALLY_COPYABLE 1
-#endif
-
-/* HAVE_IS_TRIVIALLY_CONSTRUCTIBLE is defined as 1 iff
-   std::is_trivially_constructible is available.  GCC only implemented it
-   in GCC 5.  */
-#if (__has_feature(is_trivially_constructible) \
-     || (defined __GNUC__ && __GNUC__ >= 5))
-# define HAVE_IS_TRIVIALLY_CONSTRUCTIBLE 1
-#endif
-
-namespace gdb {
-
-/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t.  See
-   <http://en.cppreference.com/w/cpp/types/void_t>.  */
-
-template<typename... Ts>
-struct make_void { typedef void type; };
-
-template<typename... Ts>
-using void_t = typename make_void<Ts...>::type;
-
-/* A few trait helpers, mainly stolen from libstdc++.  Uppercase
-   because "and/or", etc. are reserved keywords.  */
-
-template<typename Predicate>
-struct Not : public std::integral_constant<bool, !Predicate::value>
-{};
-
-template<typename...>
-struct Or;
-
-template<>
-struct Or<> : public std::false_type
-{};
-
-template<typename B1>
-struct Or<B1> : public B1
-{};
-
-template<typename B1, typename B2>
-struct Or<B1, B2>
-  : public std::conditional<B1::value, B1, B2>::type
-{};
-
-template<typename B1,typename B2,typename B3, typename... Bn>
-struct Or<B1, B2, B3, Bn...>
-  : public std::conditional<B1::value, B1, Or<B2, B3, Bn...>>::type
-{};
-
-template<typename...>
-struct And;
-
-template<>
-struct And<> : public std::true_type
-{};
-
-template<typename B1>
-struct And<B1> : public B1
-{};
-
-template<typename B1, typename B2>
-struct And<B1, B2>
-  : public std::conditional<B1::value, B2, B1>::type
-{};
-
-template<typename B1, typename B2, typename B3, typename... Bn>
-struct And<B1, B2, B3, Bn...>
-  : public std::conditional<B1::value, And<B2, B3, Bn...>, B1>::type
-{};
-
-/* Concepts-light-like helper to make SFINAE logic easier to read.  */
-template<typename Condition>
-using Requires = typename std::enable_if<Condition::value, void>::type;
-}
-
-#endif /* COMMON_TRAITS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/underlying.h ./gdb/gdbsupport/underlying.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/underlying.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/underlying.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_UNDERLYING_H
-#define COMMON_UNDERLYING_H
-
-#include <type_traits>
-
-/* Convert an enum to its underlying value.  */
-
-template<typename E>
-constexpr typename std::underlying_type<E>::type
-to_underlying (E val) noexcept
-{
-  return static_cast<typename std::underlying_type<E>::type> (val);
-}
-
-#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/valid-expr.h ./gdb/gdbsupport/valid-expr.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/valid-expr.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/valid-expr.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,108 +0,0 @@
-/* Compile-time valid expression checker for GDB, the GNU debugger.
-
-   Copyright (C) 2017-2020 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/>.  */
-
-/* Helper macros used to build compile-time unit tests that make sure
-   that invalid expressions that should not compile would not compile,
-   and that expressions that should compile do compile, and have the
-   right type.  This is mainly used to verify that some utility's API
-   is really as safe as intended.  */
-
-#ifndef COMMON_VALID_EXPR_H
-#define COMMON_VALID_EXPR_H
-
-#include "gdbsupport/preprocessor.h"
-#include "gdbsupport/traits.h"
-
-/* Macro that uses SFINAE magic to detect whether the EXPR expression
-   is either valid or ill-formed, at compile time, without actually
-   producing compile-time errors.  I.e., check that bad uses of the
-   types (e.g., involving mismatching types) would be caught at
-   compile time.  If the expression is valid, also check whether the
-   expression has the right type.
-
-   EXPR must be defined in terms of some of the template parameters,
-   so that template substitution failure discards the overload instead
-   of causing a real compile error.  TYPES is thus the list of types
-   involved in the expression, and TYPENAMES is the same list, but
-   with each element prefixed by "typename".  These are passed as
-   template parameter types to the templates within the macro.
-
-   VALID is a boolean that indicates whether the expression is
-   supposed to be valid or invalid.
-
-   EXPR_TYPE is the expected type of EXPR.  Only meaningful iff VALID
-   is true.  If VALID is false, then you must pass "void" as expected
-   type.
-
-   Each invocation of the macro is wrapped in its own namespace to
-   avoid ODR violations.  The generated namespace only includes the
-   line number, so client code should wrap sets of calls in a
-   test-specific namespace too, to fully guarantee uniqueness between
-   the multiple clients in the codebase.  */
-#define CHECK_VALID_EXPR_INT(TYPENAMES, TYPES, VALID, EXPR_TYPE, EXPR)	\
-  namespace CONCAT (check_valid_expr, __LINE__) {			\
-									\
-  template<typename, typename, typename = void>				\
-  struct is_valid_expression						\
-    : std::false_type {};						\
-									\
-  template <TYPENAMES>							\
-    struct is_valid_expression<TYPES, gdb::void_t<decltype (EXPR)>>	\
-    : std::true_type {};						\
-									\
-  static_assert (is_valid_expression<TYPES>::value == VALID,		\
-		 "");							\
-									\
-  template<TYPENAMES, typename = void>					\
-  struct is_same_type							\
-    : std::is_same<EXPR_TYPE, void> {};					\
-									\
-  template <TYPENAMES>							\
-    struct is_same_type<TYPES, gdb::void_t<decltype (EXPR)>>		\
-    : std::is_same<EXPR_TYPE, decltype (EXPR)> {};			\
-									\
-  static_assert (is_same_type<TYPES>::value, "");			\
-  } /* namespace */
-
-/* A few convenience macros that support expressions involving a
-   varying numbers of types.  If you need more types, feel free to add
-   another variant.  */
-
-#define CHECK_VALID_EXPR_1(T1, VALID, EXPR_TYPE, EXPR)			\
-  CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1),			\
-			ESC_PARENS (T1),				\
-			VALID, EXPR_TYPE, EXPR)
-
-#define CHECK_VALID_EXPR_2(T1, T2, VALID, EXPR_TYPE, EXPR)		\
-  CHECK_VALID_EXPR_INT (ESC_PARENS(typename T1, typename T2),		\
-			ESC_PARENS (T1, T2),				\
-			VALID, EXPR_TYPE, EXPR)
-
-#define CHECK_VALID_EXPR_3(T1, T2, T3, VALID, EXPR_TYPE, EXPR)		\
-  CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, typename T3), \
-			ESC_PARENS (T1, T2, T3),				\
-			VALID, EXPR_TYPE, EXPR)
-
-#define CHECK_VALID_EXPR_4(T1, T2, T3, T4, VALID, EXPR_TYPE, EXPR)	\
-  CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2,		\
-				    typename T3, typename T4),		\
-			ESC_PARENS (T1, T2, T3, T4),			\
-			VALID, EXPR_TYPE, EXPR)
-
-#endif /* COMMON_VALID_EXPR_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/version.h ./gdb/gdbsupport/version.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/version.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/version.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-/* Version information for GDB.
-   Copyright (C) 1999-2020 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 COMMON_VERSION_H
-#define COMMON_VERSION_H
-
-/* Version number of GDB, as a string.  */
-extern const char version[];
-
-/* Canonical host name as a string.  */
-extern const char host_name[];
-
-/* Canonical target name as a string.  */
-extern const char target_name[];
-
-#endif /* COMMON_VERSION_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/x86-xstate.h ./gdb/gdbsupport/x86-xstate.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/x86-xstate.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/x86-xstate.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,88 +0,0 @@
-/* Common code for x86 XSAVE extended state.
-
-   Copyright (C) 2010-2020 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 COMMON_X86_XSTATE_H
-#define COMMON_X86_XSTATE_H
-
-/* The extended state feature bits.  */
-#define X86_XSTATE_X87		(1ULL << 0)
-#define X86_XSTATE_SSE		(1ULL << 1)
-#define X86_XSTATE_AVX		(1ULL << 2)
-#define X86_XSTATE_BNDREGS	(1ULL << 3)
-#define X86_XSTATE_BNDCFG	(1ULL << 4)
-#define X86_XSTATE_MPX		(X86_XSTATE_BNDREGS | X86_XSTATE_BNDCFG)
-
-/* AVX 512 adds three feature bits.  All three must be enabled.  */
-#define X86_XSTATE_K		(1ULL << 5)
-#define X86_XSTATE_ZMM_H	(1ULL << 6)
-#define X86_XSTATE_ZMM		(1ULL << 7)
-#define X86_XSTATE_AVX512	(X86_XSTATE_K | X86_XSTATE_ZMM_H \
-				 | X86_XSTATE_ZMM)
-
-#define X86_XSTATE_PKRU		(1ULL << 9)
-
-/* Supported mask and size of the extended state.  */
-#define X86_XSTATE_X87_MASK	X86_XSTATE_X87
-#define X86_XSTATE_SSE_MASK	(X86_XSTATE_X87 | X86_XSTATE_SSE)
-#define X86_XSTATE_AVX_MASK	(X86_XSTATE_SSE_MASK | X86_XSTATE_AVX)
-#define X86_XSTATE_MPX_MASK	(X86_XSTATE_SSE_MASK | X86_XSTATE_MPX)
-#define X86_XSTATE_AVX_MPX_MASK	(X86_XSTATE_AVX_MASK | X86_XSTATE_MPX)
-#define X86_XSTATE_AVX_AVX512_MASK	(X86_XSTATE_AVX_MASK | X86_XSTATE_AVX512)
-#define X86_XSTATE_AVX_MPX_AVX512_PKU_MASK 	(X86_XSTATE_AVX_MPX_MASK\
-					| X86_XSTATE_AVX512 | X86_XSTATE_PKRU)
-
-#define X86_XSTATE_ALL_MASK		(X86_XSTATE_AVX_MPX_AVX512_PKU_MASK)
-
-
-#define X86_XSTATE_SSE_SIZE	576
-#define X86_XSTATE_AVX_SIZE	832
-#define X86_XSTATE_BNDREGS_SIZE	1024
-#define X86_XSTATE_BNDCFG_SIZE	1088
-#define X86_XSTATE_AVX512_SIZE	2688
-#define X86_XSTATE_PKRU_SIZE	2696
-#define X86_XSTATE_MAX_SIZE	2696
-
-
-/* In case one of the MPX XCR0 bits is set we consider we have MPX.  */
-#define HAS_MPX(XCR0) (((XCR0) & X86_XSTATE_MPX) != 0)
-#define HAS_AVX(XCR0) (((XCR0) & X86_XSTATE_AVX) != 0)
-#define HAS_AVX512(XCR0) (((XCR0) & X86_XSTATE_AVX512) != 0)
-#define HAS_PKRU(XCR0) (((XCR0) & X86_XSTATE_PKRU) != 0)
-
-/* Get I386 XSAVE extended state size.  */
-#define X86_XSTATE_SIZE(XCR0) \
-    (HAS_PKRU (XCR0) ? X86_XSTATE_PKRU_SIZE : \
-     (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \
-      (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \
-       (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE))))
-
-/* Initial value for fctrl register, as defined in the X86 manual, and
-   confirmed in the (Linux) kernel source.  When the x87 floating point
-   feature is not enabled in an inferior we use this as the value of the
-   fcrtl register.  */
-
-#define I387_FCTRL_INIT_VAL 0x037f
-
-/* Initial value for mxcsr register.  When the avx and sse floating point
-   features are not enabled in an inferior we use this as the value of the
-   mxcsr register.  */
-
-#define I387_MXCSR_INIT_VAL 0x1f80
-
-#endif /* COMMON_X86_XSTATE_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/xml-utils.c ./gdb/gdbsupport/xml-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/xml-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/xml-utils.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,63 +0,0 @@
-/* Shared helper routines for manipulating XML.
-
-   Copyright (C) 2006-2020 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 "common-defs.h"
-#include "xml-utils.h"
-
-/* See xml-utils.h.  */
-
-std::string
-xml_escape_text (const char *text)
-{
-  std::string result;
-
-  xml_escape_text_append (&result, text);
-
-  return result;
-}
-
-/* See xml-utils.h.  */
-
-void
-xml_escape_text_append (std::string *result, const char *text)
-{
-  /* Expand the result.  */
-  for (int i = 0; text[i] != '\0'; i++)
-    switch (text[i])
-      {
-      case '\'':
-	*result += "&apos;";
-	break;
-      case '\"':
-	*result += "&quot;";
-	break;
-      case '&':
-	*result += "&amp;";
-	break;
-      case '<':
-	*result += "&lt;";
-	break;
-      case '>':
-	*result += "&gt;";
-	break;
-      default:
-	*result += text[i];
-	break;
-      }
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/xml-utils.h ./gdb/gdbsupport/xml-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbsupport/xml-utils.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbsupport/xml-utils.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-/* Shared helper routines for manipulating XML.
-
-   Copyright (C) 2006-2020 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 COMMON_XML_UTILS_H
-#define COMMON_XML_UTILS_H
-
-/* Return a string with special characters from TEXT replaced by entity
-   references.  */
-
-extern std::string xml_escape_text (const char *text);
-
-/* Append TEXT to RESULT, with special characters replaced by entity
-   references.  */
-
-extern void xml_escape_text_append (std::string *result, const char *text);
-
-#endif /* COMMON_XML_UTILS_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbthread.h ./gdb/gdbthread.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbthread.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbthread.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Multi-process/thread control defs for GDB, the GNU debugger.
-   Copyright (C) 1987-2020 Free Software Foundation, Inc.
+   Copyright (C) 1987-2021 Free Software Foundation, Inc.
    Contributed by Lynx Real-Time Systems, Inc.  Los Gatos, CA.
    
 
@@ -32,8 +32,10 @@ struct symtab;
 #include "gdbsupport/refcounted-object.h"
 #include "gdbsupport/common-gdbthread.h"
 #include "gdbsupport/forward-scope-exit.h"
+#include "displaced-stepping.h"
 
 struct inferior;
+struct process_stratum_target;
 
 /* Frontend view of the thread state.  Possible extensions: stepping,
    finishing, until(ling),...
@@ -130,28 +132,10 @@ struct thread_control_state
      any inlined frames).  */
   struct frame_id step_stack_frame_id {};
 
-  /* Nonzero if we are presently stepping over a breakpoint.
-
-     If we hit a breakpoint or watchpoint, and then continue, we need
-     to single step the current thread with breakpoints disabled, to
-     avoid hitting the same breakpoint or watchpoint again.  And we
-     should step just a single thread and keep other threads stopped,
-     so that other threads don't miss breakpoints while they are
-     removed.
-
-     So, this variable simultaneously means that we need to single
-     step the current thread, keep other threads stopped, and that
-     breakpoints should be removed while we step.
-
-     This variable is set either:
-     - in proceed, when we resume inferior on user's explicit request
-     - in keep_going, if handle_inferior_event decides we need to
-     step over breakpoint.
-
-     The variable is cleared in normal_stop.  The proceed calls
-     wait_for_inferior, which calls handle_inferior_event in a loop,
-     and until wait_for_inferior exits, this variable is changed only
-     by keep_going.  */
+  /* True if the the thread is presently stepping over a breakpoint or
+     a watchpoint, either with an inline step over or a displaced (out
+     of line) step, and we're now expecting it to report a trap for
+     the finished single step.  */
   int trap_expected = 0;
 
   /* Nonzero if the thread is being proceeded for a "finish" command
@@ -260,14 +244,14 @@ public:
 
      a) The thread ID (Id).  This consists of the pair of:
 
-        - the number of the thread's inferior and,
+	- the number of the thread's inferior and,
 
-        - the thread's thread number in its inferior, aka, the
-          per-inferior thread number.  This number is unique in the
-          inferior but not unique between inferiors.
+	- the thread's thread number in its inferior, aka, the
+	  per-inferior thread number.  This number is unique in the
+	  inferior but not unique between inferiors.
 
      b) The global ID (GId).  This is a a single integer unique
-        between all inferiors.
+	between all inferiors.
 
      E.g.:
 
@@ -300,20 +284,20 @@ public:
      if the thread does not have a user-given name.  */
   char *name = NULL;
 
-  /* Non-zero means the thread is executing.  Note: this is different
+  /* True means the thread is executing.  Note: this is different
      from saying that there is an active target and we are stopped at
      a breakpoint, for instance.  This is a real indicator whether the
      thread is off and running.  */
-  int executing = 0;
+  bool executing = false;
 
-  /* Non-zero if this thread is resumed from infrun's perspective.
+  /* True if this thread is resumed from infrun's perspective.
      Note that a thread can be marked both as not-executing and
      resumed at the same time.  This happens if we try to resume a
      thread that has a wait status pending.  We shouldn't let the
      thread really run until that wait status has been processed, but
      we should not process that wait status if we didn't try to let
      the thread run.  */
-  int resumed = 0;
+  bool resumed = false;
 
   /* Frontend view of the thread state.  Note that the THREAD_RUNNING/
      THREAD_STOPPED states are different from EXECUTING.  When the
@@ -405,6 +389,9 @@ public:
      fields point to self.  */
   struct thread_info *step_over_prev = NULL;
   struct thread_info *step_over_next = NULL;
+
+  /* Displaced-step state for this thread.  */
+  displaced_step_thread_state displaced_step_state;
 };
 
 /* A gdb::ref_ptr pointer to a thread_info.  */
@@ -412,6 +399,13 @@ public:
 using thread_info_ref
   = gdb::ref_ptr<struct thread_info, refcounted_object_ref_policy>;
 
+/* A gdb::ref_ptr pointer to an inferior.  This would ideally be in
+   inferior.h, but it can't due to header dependencies (inferior.h
+   includes gdbthread.h).  */
+
+using inferior_ref
+  = gdb::ref_ptr<struct inferior, refcounted_object_ref_policy>;
+
 /* Create an empty thread list, or empty the existing one.  */
 extern void init_thread_list (void);
 
@@ -419,22 +413,26 @@ extern void init_thread_list (void);
    that a new thread is found, and return the pointer to
    the new thread.  Caller my use this pointer to 
    initialize the private thread data.  */
-extern struct thread_info *add_thread (ptid_t ptid);
+extern struct thread_info *add_thread (process_stratum_target *targ,
+				       ptid_t ptid);
 
-/* Same as add_thread, but does not print a message
-   about new thread.  */
-extern struct thread_info *add_thread_silent (ptid_t ptid);
+/* Same as add_thread, but does not print a message about new
+   thread.  */
+extern struct thread_info *add_thread_silent (process_stratum_target *targ,
+					      ptid_t ptid);
 
 /* Same as add_thread, and sets the private info.  */
-extern struct thread_info *add_thread_with_info (ptid_t ptid,
-						 struct private_thread_info *);
-
-/* Delete an existing thread list entry.  */
+extern struct thread_info *add_thread_with_info (process_stratum_target *targ,
+						 ptid_t ptid,
+						 private_thread_info *);
+
+/* Delete thread THREAD and notify of thread exit.  If the thread is
+   currently not deletable, don't actually delete it but still tag it
+   as exited and do the notification.  */
 extern void delete_thread (struct thread_info *thread);
 
-/* Delete an existing thread list entry, and be quiet about it.  Used
-   after the process this thread having belonged to having already
-   exited, for example.  */
+/* Like delete_thread, but be quiet about it.  Used when the process
+   this thread belonged to has already exited, for example.  */
 extern void delete_thread_silent (struct thread_info *thread);
 
 /* Delete a step_resume_breakpoint from the thread database.  */
@@ -468,18 +466,18 @@ extern int show_inferior_qualified_tids
 const char *print_thread_id (struct thread_info *thr);
 
 /* Boolean test for an already-known ptid.  */
-extern int in_thread_list (ptid_t ptid);
+extern bool in_thread_list (process_stratum_target *targ, ptid_t ptid);
 
 /* Boolean test for an already-known global thread id (GDB's homegrown
    global id, not the system's).  */
 extern int valid_global_thread_id (int global_id);
 
-/* Search function to lookup a thread by 'pid'.  */
-extern struct thread_info *find_thread_ptid (ptid_t ptid);
+/* Find (non-exited) thread PTID of inferior INF.  */
+extern thread_info *find_thread_ptid (inferior *inf, ptid_t ptid);
 
-/* Search function to lookup a thread by 'ptid'.  Only searches in
-   threads of INF.  */
-extern struct thread_info *find_thread_ptid (inferior *inf, ptid_t ptid);
+/* Search function to lookup a (non-exited) thread by 'ptid'.  */
+extern struct thread_info *find_thread_ptid (process_stratum_target *targ,
+					     ptid_t ptid);
 
 /* Find thread by GDB global thread ID.  */
 struct thread_info *find_thread_global_id (int global_id);
@@ -500,7 +498,8 @@ extern struct thread_info *any_thread_of
 extern struct thread_info *any_live_thread_of_inferior (inferior *inf);
 
 /* Change the ptid of thread OLD_PTID to NEW_PTID.  */
-void thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid);
+void thread_change_ptid (process_stratum_target *targ,
+			 ptid_t old_ptid, ptid_t new_ptid);
 
 /* Iterator function to call a user-provided callback function
    once for each known thread.  */
@@ -511,34 +510,44 @@ extern struct thread_info *iterate_over_
    iterators.  Must be done after struct thread_info is defined.  */
 #include "thread-iter.h"
 
-/* Return a range that can be used to walk over all threads of all
-   inferiors, with range-for.  Used like this:
+/* Return a range that can be used to walk over threads, with
+   range-for.
+
+   Used like this, it walks over all threads of all inferiors of all
+   targets:
 
        for (thread_info *thr : all_threads ())
 	 { .... }
-*/
-inline all_threads_range
-all_threads ()
-{
-  return {};
-}
 
-/* Likewise, but accept a filter PTID.  */
+   FILTER_PTID can be used to filter out threads that don't match.
+   FILTER_PTID can be:
+
+   - minus_one_ptid, meaning walk all threads of all inferiors of
+     PROC_TARGET.  If PROC_TARGET is NULL, then of all targets.
+
+   - A process ptid, in which case walk all threads of the specified
+     process.  PROC_TARGET must be non-NULL in this case.
+
+   - A thread ptid, in which case walk that thread only.  PROC_TARGET
+     must be non-NULL in this case.
+*/
 
 inline all_matching_threads_range
-all_threads (ptid_t filter_ptid)
+all_threads (process_stratum_target *proc_target = nullptr,
+	     ptid_t filter_ptid = minus_one_ptid)
 {
-  return all_matching_threads_range (filter_ptid);
+  return all_matching_threads_range (proc_target, filter_ptid);
 }
 
 /* Return a range that can be used to walk over all non-exited threads
-   of all inferiors, with range-for.  FILTER_PTID can be used to
-   filter out thread that don't match.  */
+   of all inferiors, with range-for.  Arguments are like all_threads
+   above.  */
 
 inline all_non_exited_threads_range
-all_non_exited_threads (ptid_t filter_ptid = minus_one_ptid)
+all_non_exited_threads (process_stratum_target *proc_target = nullptr,
+			ptid_t filter_ptid = minus_one_ptid)
 {
-  return all_non_exited_threads_range (filter_ptid);
+  return all_non_exited_threads_range (proc_target, filter_ptid);
 }
 
 /* Return a range that can be used to walk over all threads of all
@@ -554,10 +563,10 @@ all_non_exited_threads (ptid_t filter_pt
 inline all_threads_safe_range
 all_threads_safe ()
 {
-  return all_threads_safe_range ();
+  return {};
 }
 
-extern int thread_count (void);
+extern int thread_count (process_stratum_target *proc_target);
 
 /* Return true if we have any thread in any inferior.  */
 extern bool any_thread_p ();
@@ -571,44 +580,50 @@ extern void switch_to_no_thread ();
 /* Switch from one thread to another.  Does not read registers.  */
 extern void switch_to_thread_no_regs (struct thread_info *thread);
 
-/* Marks or clears thread(s) PTID as resumed.  If PTID is
-   MINUS_ONE_PTID, applies to all threads.  If ptid_is_pid(PTID) is
-   true, applies to all threads of the process pointed at by PTID.  */
-extern void set_resumed (ptid_t ptid, int resumed);
-
-/* Marks thread PTID is running, or stopped. 
-   If PTID is minus_one_ptid, marks all threads.  */
-extern void set_running (ptid_t ptid, int running);
-
-/* Marks or clears thread(s) PTID as having been requested to stop.
-   If PTID is MINUS_ONE_PTID, applies to all threads.  If
+/* Marks or clears thread(s) PTID of TARG as resumed.  If PTID is
+   MINUS_ONE_PTID, applies to all threads of TARG.  If
    ptid_is_pid(PTID) is true, applies to all threads of the process
-   pointed at by PTID.  If STOP, then the THREAD_STOP_REQUESTED
-   observer is called with PTID as argument.  */
-extern void set_stop_requested (ptid_t ptid, int stop);
+   pointed at by {TARG,PTID}.  */
+extern void set_resumed (process_stratum_target *targ,
+			 ptid_t ptid, bool resumed);
+
+/* Marks thread PTID of TARG as running, or as stopped.  If PTID is
+   minus_one_ptid, marks all threads of TARG.  */
+extern void set_running (process_stratum_target *targ,
+			 ptid_t ptid, bool running);
+
+/* Marks or clears thread(s) PTID of TARG as having been requested to
+   stop.  If PTID is MINUS_ONE_PTID, applies to all threads of TARG.
+   If ptid_is_pid(PTID) is true, applies to all threads of the process
+   pointed at by {TARG, PTID}.  If STOP, then the
+   THREAD_STOP_REQUESTED observer is called with PTID as argument.  */
+extern void set_stop_requested (process_stratum_target *targ,
+				ptid_t ptid, bool stop);
 
-/* Marks thread PTID as executing, or not.  If PTID is minus_one_ptid,
-   marks all threads.
+/* Marks thread PTID of TARG as executing, or not.  If PTID is
+   minus_one_ptid, marks all threads of TARG.
 
    Note that this is different from the running state.  See the
    description of state and executing fields of struct
    thread_info.  */
-extern void set_executing (ptid_t ptid, int executing);
+extern void set_executing (process_stratum_target *targ,
+			   ptid_t ptid, bool executing);
 
-/* True if any (known or unknown) thread is or may be executing.  */
-extern int threads_are_executing (void);
+/* True if any (known or unknown) thread of TARG is or may be
+   executing.  */
+extern bool threads_are_executing (process_stratum_target *targ);
 
-/* Merge the executing property of thread PTID over to its thread
-   state property (frontend running/stopped view).
+/* Merge the executing property of thread PTID of TARG over to its
+   thread state property (frontend running/stopped view).
 
    "not executing" -> "stopped"
    "executing"     -> "running"
    "exited"        -> "exited"
 
-   If PTID is minus_one_ptid, go over all threads.
+   If PTID is minus_one_ptid, go over all threads of TARG.
 
    Notifications are only emitted if the thread state did change.  */
-extern void finish_thread_state (ptid_t ptid);
+extern void finish_thread_state (process_stratum_target *targ, ptid_t ptid);
 
 /* Calls finish_thread_state on scope exit, unless release() is called
    to disengage.  */
@@ -645,14 +660,23 @@ public:
 
   DISABLE_COPY_AND_ASSIGN (scoped_restore_current_thread);
 
+  /* Cancel restoring on scope exit.  */
+  void dont_restore () { m_dont_restore = true; }
+
 private:
-  /* Use the "class" keyword here, because of a clash with a "thread_info"
-     function in the Darwin API.  */
-  class thread_info *m_thread;
-  inferior *m_inf;
+  void restore ();
+
+  bool m_dont_restore = false;
+  thread_info_ref m_thread;
+  inferior_ref m_inf;
+
   frame_id m_selected_frame_id;
   int m_selected_frame_level;
   bool m_was_stopped;
+  /* Save/restore the language as well, because selecting a frame
+     changes the current language to the frame's language if "set
+     language auto".  */
+  enum language m_lang;
 };
 
 /* Returns a pointer into the thread_info corresponding to
@@ -683,12 +707,8 @@ class enable_thread_stack_temporaries
 public:
 
   explicit enable_thread_stack_temporaries (struct thread_info *thr)
-    : m_thr (thr)
+    : m_thr (thread_info_ref::new_reference (thr))
   {
-    gdb_assert (m_thr != NULL);
-
-    m_thr->incref ();
-
     m_thr->stack_temporaries_enabled = true;
     m_thr->stack_temporaries.clear ();
   }
@@ -697,15 +717,13 @@ public:
   {
     m_thr->stack_temporaries_enabled = false;
     m_thr->stack_temporaries.clear ();
-
-    m_thr->decref ();
   }
 
   DISABLE_COPY_AND_ASSIGN (enable_thread_stack_temporaries);
 
 private:
 
-  struct thread_info *m_thr;
+  thread_info_ref m_thr;
 };
 
 extern bool thread_stack_temporaries_enabled_p (struct thread_info *tp);
@@ -717,23 +735,48 @@ extern value *get_last_thread_stack_temp
 extern bool value_in_thread_stack_temporaries (struct value *,
 					       struct thread_info *thr);
 
-/* Add TP to the end of its inferior's pending step-over chain.  */
+/* Add TP to the end of the global pending step-over chain.  */
+
+extern void global_thread_step_over_chain_enqueue (thread_info *tp);
 
-extern void thread_step_over_chain_enqueue (struct thread_info *tp);
+/* Append the thread step over chain CHAIN_HEAD to the global thread step over
+   chain. */
 
-/* Remove TP from its inferior's pending step-over chain.  */
+extern void global_thread_step_over_chain_enqueue_chain
+  (thread_info *chain_head);
 
-extern void thread_step_over_chain_remove (struct thread_info *tp);
+/* Remove TP from step-over chain LIST_P.  */
 
-/* Return the next thread in the step-over chain starting at TP.  NULL
-   if TP is the last entry in the chain.  */
+extern void thread_step_over_chain_remove (thread_info **list_p,
+					   thread_info *tp);
 
-extern struct thread_info *thread_step_over_chain_next (struct thread_info *tp);
+/* Remove TP from the global pending step-over chain.  */
 
-/* Return true if TP is in the step-over chain.  */
+extern void global_thread_step_over_chain_remove (thread_info *tp);
+
+/* Return the thread following TP in the step-over chain whose head is
+   CHAIN_HEAD.  Return NULL if TP is the last entry in the chain.  */
+
+extern thread_info *thread_step_over_chain_next (thread_info *chain_head,
+						 thread_info *tp);
+
+/* Return the thread following TP in the global step-over chain, or NULL if TP
+   is the last entry in the chain.  */
+
+extern thread_info *global_thread_step_over_chain_next (thread_info *tp);
+
+/* Return true if TP is in any step-over chain.  */
 
 extern int thread_is_in_step_over_chain (struct thread_info *tp);
 
+/* Return the length of the the step over chain TP is in.
+
+   If TP is non-nullptr, the thread must be in a step over chain.
+   TP may be nullptr, in which case it denotes an empty list, so a length of
+   0.  */
+
+extern int thread_step_over_chain_length (thread_info *tp);
+
 /* Cancel any ongoing execution command.  */
 
 extern void thread_cancel_execution_command (struct thread_info *thr);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbtypes.c ./gdb/gdbtypes.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbtypes.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbtypes.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support routines for manipulating internal types for GDB.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
@@ -36,9 +36,12 @@
 #include "hashtab.h"
 #include "cp-support.h"
 #include "bcache.h"
-#include "dwarf2loc.h"
+#include "dwarf2/loc.h"
 #include "gdbcore.h"
 #include "floatformat.h"
+#include "f-lang.h"
+#include <algorithm>
+#include "gmp-utils.h"
 
 /* Initialize BADNESS constants.  */
 
@@ -114,6 +117,10 @@ const struct floatformat *floatformats_i
   &floatformat_ibm_long_double_big,
   &floatformat_ibm_long_double_little
 };
+const struct floatformat *floatformats_bfloat16[BFD_ENDIAN_UNKNOWN] = {
+  &floatformat_bfloat16_big,
+  &floatformat_bfloat16_little
+};
 
 /* Should opaque types be resolved?  */
 
@@ -176,12 +183,11 @@ alloc_type (struct objfile *objfile)
 					  struct main_type);
   OBJSTAT (objfile, n_types++);
 
-  TYPE_OBJFILE_OWNED (type) = 1;
-  TYPE_OWNER (type).objfile = objfile;
+  type->set_owner (objfile);
 
   /* Initialize the fields that might not be zero.  */
 
-  TYPE_CODE (type) = TYPE_CODE_UNDEF;
+  type->set_code (TYPE_CODE_UNDEF);
   TYPE_CHAIN (type) = type;	/* Chain back to itself.  */
 
   return type;
@@ -203,12 +209,11 @@ alloc_type_arch (struct gdbarch *gdbarch
   type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct type);
   TYPE_MAIN_TYPE (type) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct main_type);
 
-  TYPE_OBJFILE_OWNED (type) = 0;
-  TYPE_OWNER (type).gdbarch = gdbarch;
+  type->set_owner (gdbarch);
 
   /* Initialize the fields that might not be zero.  */
 
-  TYPE_CODE (type) = TYPE_CODE_UNDEF;
+  type->set_code (TYPE_CODE_UNDEF);
   TYPE_CHAIN (type) = type;	/* Chain back to itself.  */
 
   return type;
@@ -221,30 +226,29 @@ alloc_type_arch (struct gdbarch *gdbarch
 struct type *
 alloc_type_copy (const struct type *type)
 {
-  if (TYPE_OBJFILE_OWNED (type))
-    return alloc_type (TYPE_OWNER (type).objfile);
+  if (type->is_objfile_owned ())
+    return alloc_type (type->objfile_owner ());
   else
-    return alloc_type_arch (TYPE_OWNER (type).gdbarch);
+    return alloc_type_arch (type->arch_owner ());
 }
 
-/* If TYPE is gdbarch-associated, return that architecture.
-   If TYPE is objfile-associated, return that objfile's architecture.  */
+/* See gdbtypes.h.  */
 
-struct gdbarch *
-get_type_arch (const struct type *type)
+gdbarch *
+type::arch () const
 {
   struct gdbarch *arch;
 
-  if (TYPE_OBJFILE_OWNED (type))
-    arch = get_objfile_arch (TYPE_OWNER (type).objfile);
+  if (this->is_objfile_owned ())
+    arch = this->objfile_owner ()->arch ();
   else
-    arch = TYPE_OWNER (type).gdbarch;
+    arch = this->arch_owner ();
 
   /* The ARCH can be NULL if TYPE is associated with neither an objfile nor
      a gdbarch, however, this is very rare, and even then, in most cases
-     that get_type_arch is called, we assume that a non-NULL value is
+     that type::arch is called, we assume that a non-NULL value is
      returned.  */
-  gdb_assert (arch != NULL);
+  gdb_assert (arch != nullptr);
   return arch;
 }
 
@@ -268,8 +272,7 @@ get_target_type (struct type *type)
 unsigned int
 type_length_units (struct type *type)
 {
-  struct gdbarch *arch = get_type_arch (type);
-  int unit_size = gdbarch_addressable_memory_unit_size (arch);
+  int unit_size = gdbarch_addressable_memory_unit_size (type->arch ());
 
   return TYPE_LENGTH (type) / unit_size;
 }
@@ -285,10 +288,10 @@ alloc_type_instance (struct type *oldtyp
 
   /* Allocate the structure.  */
 
-  if (! TYPE_OBJFILE_OWNED (oldtype))
-    type = GDBARCH_OBSTACK_ZALLOC (get_type_arch (oldtype), struct type);
+  if (!oldtype->is_objfile_owned ())
+    type = GDBARCH_OBSTACK_ZALLOC (oldtype->arch_owner (), struct type);
   else
-    type = OBSTACK_ZALLOC (&TYPE_OBJFILE (oldtype)->objfile_obstack,
+    type = OBSTACK_ZALLOC (&oldtype->objfile_owner ()->objfile_obstack,
 			   struct type);
 
   TYPE_MAIN_TYPE (type) = TYPE_MAIN_TYPE (oldtype);
@@ -304,14 +307,17 @@ alloc_type_instance (struct type *oldtyp
 static void
 smash_type (struct type *type)
 {
-  int objfile_owned = TYPE_OBJFILE_OWNED (type);
-  union type_owner owner = TYPE_OWNER (type);
+  bool objfile_owned = type->is_objfile_owned ();
+  objfile *objfile = type->objfile_owner ();
+  gdbarch *arch = type->arch_owner ();
 
   memset (TYPE_MAIN_TYPE (type), 0, sizeof (struct main_type));
 
   /* Restore owner information.  */
-  TYPE_OBJFILE_OWNED (type) = objfile_owned;
-  TYPE_OWNER (type) = owner;
+  if (objfile_owned)
+    type->set_owner (objfile);
+  else
+    type->set_owner (arch);
 
   /* For now, delete the rings.  */
   TYPE_CHAIN (type) = type;
@@ -363,14 +369,13 @@ make_pointer_type (struct type *type, st
 
   /* FIXME!  Assumes the machine has only one representation for pointers!  */
 
-  TYPE_LENGTH (ntype)
-    = gdbarch_ptr_bit (get_type_arch (type)) / TARGET_CHAR_BIT;
-  TYPE_CODE (ntype) = TYPE_CODE_PTR;
+  TYPE_LENGTH (ntype) = gdbarch_ptr_bit (type->arch ()) / TARGET_CHAR_BIT;
+  ntype->set_code (TYPE_CODE_PTR);
 
   /* Mark pointers as unsigned.  The target converts between pointers
      and addresses (CORE_ADDRs) using gdbarch_pointer_to_address and
      gdbarch_address_to_pointer.  */
-  TYPE_UNSIGNED (ntype) = 1;
+  ntype->set_is_unsigned (true);
 
   /* Update the length of all the other variants of this type.  */
   chain = TYPE_CHAIN (ntype);
@@ -400,7 +405,7 @@ lookup_pointer_type (struct type *type)
 
 struct type *
 make_reference_type (struct type *type, struct type **typeptr,
-                      enum type_code refcode)
+		      enum type_code refcode)
 {
   struct type *ntype;	/* New type */
   struct type **reftype;
@@ -409,7 +414,7 @@ make_reference_type (struct type *type,
   gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF);
 
   ntype = (refcode == TYPE_CODE_REF ? TYPE_REFERENCE_TYPE (type)
-           : TYPE_RVALUE_REFERENCE_TYPE (type));
+	   : TYPE_RVALUE_REFERENCE_TYPE (type));
 
   if (ntype)
     {
@@ -439,7 +444,7 @@ make_reference_type (struct type *type,
 
   TYPE_TARGET_TYPE (ntype) = type;
   reftype = (refcode == TYPE_CODE_REF ? &TYPE_REFERENCE_TYPE (type)
-             : &TYPE_RVALUE_REFERENCE_TYPE (type));
+	     : &TYPE_RVALUE_REFERENCE_TYPE (type));
 
   *reftype = ntype;
 
@@ -447,9 +452,8 @@ make_reference_type (struct type *type,
      references, and that it matches the (only) representation for
      pointers!  */
 
-  TYPE_LENGTH (ntype) =
-    gdbarch_ptr_bit (get_type_arch (type)) / TARGET_CHAR_BIT;
-  TYPE_CODE (ntype) = refcode;
+  TYPE_LENGTH (ntype) = gdbarch_ptr_bit (type->arch ()) / TARGET_CHAR_BIT;
+  ntype->set_code (refcode);
 
   *reftype = ntype;
 
@@ -514,7 +518,7 @@ make_function_type (struct type *type, s
   TYPE_TARGET_TYPE (ntype) = type;
 
   TYPE_LENGTH (ntype) = 1;
-  TYPE_CODE (ntype) = TYPE_CODE_FUNC;
+  ntype->set_code (TYPE_CODE_FUNC);
 
   INIT_FUNC_SPECIFIC (ntype);
 
@@ -547,37 +551,37 @@ lookup_function_type_with_arguments (str
       if (param_types[nparams - 1] == NULL)
 	{
 	  --nparams;
-	  TYPE_VARARGS (fn) = 1;
+	  fn->set_has_varargs (true);
 	}
-      else if (TYPE_CODE (check_typedef (param_types[nparams - 1]))
+      else if (check_typedef (param_types[nparams - 1])->code ()
 	       == TYPE_CODE_VOID)
 	{
 	  --nparams;
 	  /* Caller should have ensured this.  */
 	  gdb_assert (nparams == 0);
-	  TYPE_PROTOTYPED (fn) = 1;
+	  fn->set_is_prototyped (true);
 	}
       else
-	TYPE_PROTOTYPED (fn) = 1;
+	fn->set_is_prototyped (true);
     }
 
-  TYPE_NFIELDS (fn) = nparams;
-  TYPE_FIELDS (fn)
-    = (struct field *) TYPE_ZALLOC (fn, nparams * sizeof (struct field));
+  fn->set_num_fields (nparams);
+  fn->set_fields
+    ((struct field *) TYPE_ZALLOC (fn, nparams * sizeof (struct field)));
   for (i = 0; i < nparams; ++i)
-    TYPE_FIELD_TYPE (fn, i) = param_types[i];
+    fn->field (i).set_type (param_types[i]);
 
   return fn;
 }
 
-/* Identify address space identifier by name --
-   return the integer flag defined in gdbtypes.h.  */
+/* Identify address space identifier by name -- return a
+   type_instance_flags.  */
 
-int
-address_space_name_to_int (struct gdbarch *gdbarch,
-			   const char *space_identifier)
+type_instance_flags
+address_space_name_to_type_instance_flags (struct gdbarch *gdbarch,
+					   const char *space_identifier)
 {
-  int type_flags;
+  type_instance_flags type_flags;
 
   /* Check for known address space delimiters.  */
   if (!strcmp (space_identifier, "code"))
@@ -585,7 +589,7 @@ address_space_name_to_int (struct gdbarc
   else if (!strcmp (space_identifier, "data"))
     return TYPE_INSTANCE_FLAG_DATA_SPACE;
   else if (gdbarch_address_class_name_to_type_flags_p (gdbarch)
-           && gdbarch_address_class_name_to_type_flags (gdbarch,
+	   && gdbarch_address_class_name_to_type_flags (gdbarch,
 							space_identifier,
 							&type_flags))
     return type_flags;
@@ -593,18 +597,19 @@ address_space_name_to_int (struct gdbarc
     error (_("Unknown address space specifier: \"%s\""), space_identifier);
 }
 
-/* Identify address space identifier by integer flag as defined in 
-   gdbtypes.h -- return the string version of the adress space name.  */
+/* Identify address space identifier by type_instance_flags and return
+   the string version of the adress space name.  */
 
 const char *
-address_space_int_to_name (struct gdbarch *gdbarch, int space_flag)
+address_space_type_instance_flags_to_name (struct gdbarch *gdbarch,
+					   type_instance_flags space_flag)
 {
   if (space_flag & TYPE_INSTANCE_FLAG_CODE_SPACE)
     return "code";
   else if (space_flag & TYPE_INSTANCE_FLAG_DATA_SPACE)
     return "data";
   else if ((space_flag & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
-           && gdbarch_address_class_type_flags_to_name_p (gdbarch))
+	   && gdbarch_address_class_type_flags_to_name_p (gdbarch))
     return gdbarch_address_class_type_flags_to_name (gdbarch, space_flag);
   else
     return NULL;
@@ -616,7 +621,7 @@ address_space_int_to_name (struct gdbarc
    STORAGE must be in the same obstack as TYPE.  */
 
 static struct type *
-make_qualified_type (struct type *type, int new_flags,
+make_qualified_type (struct type *type, type_instance_flags new_flags,
 		     struct type *storage)
 {
   struct type *ntype;
@@ -624,7 +629,7 @@ make_qualified_type (struct type *type,
   ntype = type;
   do
     {
-      if (TYPE_INSTANCE_FLAGS (ntype) == new_flags)
+      if (ntype->instance_flags () == new_flags)
 	return ntype;
       ntype = TYPE_CHAIN (ntype);
     }
@@ -639,7 +644,7 @@ make_qualified_type (struct type *type,
 	 as TYPE.  Otherwise, we can't link it into TYPE's cv chain:
 	 if one objfile is freed and the other kept, we'd have
 	 dangling pointers.  */
-      gdb_assert (TYPE_OBJFILE (type) == TYPE_OBJFILE (storage));
+      gdb_assert (type->objfile_owner () == storage->objfile_owner ());
 
       ntype = storage;
       TYPE_MAIN_TYPE (ntype) = TYPE_MAIN_TYPE (type);
@@ -656,7 +661,7 @@ make_qualified_type (struct type *type,
   TYPE_CHAIN (type) = ntype;
 
   /* Now set the instance flags and return the new type.  */
-  TYPE_INSTANCE_FLAGS (ntype) = new_flags;
+  ntype->set_instance_flags (new_flags);
 
   /* Set length of new type to that of the original type.  */
   TYPE_LENGTH (ntype) = TYPE_LENGTH (type);
@@ -674,13 +679,14 @@ make_qualified_type (struct type *type,
    representations.  */
 
 struct type *
-make_type_with_address_space (struct type *type, int space_flag)
+make_type_with_address_space (struct type *type,
+			      type_instance_flags space_flag)
 {
-  int new_flags = ((TYPE_INSTANCE_FLAGS (type)
-		    & ~(TYPE_INSTANCE_FLAG_CODE_SPACE
-			| TYPE_INSTANCE_FLAG_DATA_SPACE
-		        | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL))
-		   | space_flag);
+  type_instance_flags new_flags = ((type->instance_flags ()
+				    & ~(TYPE_INSTANCE_FLAG_CODE_SPACE
+					| TYPE_INSTANCE_FLAG_DATA_SPACE
+					| TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL))
+				   | space_flag);
 
   return make_qualified_type (type, new_flags, NULL);
 }
@@ -704,9 +710,9 @@ make_cv_type (int cnst, int voltl,
 {
   struct type *ntype;	/* New type */
 
-  int new_flags = (TYPE_INSTANCE_FLAGS (type)
-		   & ~(TYPE_INSTANCE_FLAG_CONST 
-		       | TYPE_INSTANCE_FLAG_VOLATILE));
+  type_instance_flags new_flags = (type->instance_flags ()
+				   & ~(TYPE_INSTANCE_FLAG_CONST
+				       | TYPE_INSTANCE_FLAG_VOLATILE));
 
   if (cnst)
     new_flags |= TYPE_INSTANCE_FLAG_CONST;
@@ -728,7 +734,7 @@ make_cv_type (int cnst, int voltl,
 	 can't have inter-objfile pointers.  The only thing to do is
 	 to leave stub types as stub types, and look them up afresh by
 	 name each time you encounter them.  */
-      gdb_assert (TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type));
+      gdb_assert ((*typeptr)->objfile_owner () == type->objfile_owner ());
     }
   
   ntype = make_qualified_type (type, new_flags, 
@@ -746,7 +752,7 @@ struct type *
 make_restrict_type (struct type *type)
 {
   return make_qualified_type (type,
-			      (TYPE_INSTANCE_FLAGS (type)
+			      (type->instance_flags ()
 			       | TYPE_INSTANCE_FLAG_RESTRICT),
 			      NULL);
 }
@@ -757,7 +763,7 @@ struct type *
 make_unqualified_type (struct type *type)
 {
   return make_qualified_type (type,
-			      (TYPE_INSTANCE_FLAGS (type)
+			      (type->instance_flags ()
 			       & ~(TYPE_INSTANCE_FLAG_CONST
 				   | TYPE_INSTANCE_FLAG_VOLATILE
 				   | TYPE_INSTANCE_FLAG_RESTRICT)),
@@ -770,7 +776,7 @@ struct type *
 make_atomic_type (struct type *type)
 {
   return make_qualified_type (type,
-			      (TYPE_INSTANCE_FLAGS (type)
+			      (type->instance_flags ()
 			       | TYPE_INSTANCE_FLAG_ATOMIC),
 			      NULL);
 }
@@ -794,7 +800,7 @@ replace_type (struct type *ntype, struct
      the assignment of one type's main type structure to the other
      will produce a type with references to objects (names; field
      lists; etc.) allocated on an objfile other than its own.  */
-  gdb_assert (TYPE_OBJFILE (ntype) == TYPE_OBJFILE (type));
+  gdb_assert (ntype->objfile_owner () == type->objfile_owner ());
 
   *TYPE_MAIN_TYPE (ntype) = *TYPE_MAIN_TYPE (type);
 
@@ -818,7 +824,7 @@ replace_type (struct type *ntype, struct
 
   /* Assert that the two types have equivalent instance qualifiers.
      This should be true for at least all of our debug readers.  */
-  gdb_assert (TYPE_INSTANCE_FLAGS (ntype) == TYPE_INSTANCE_FLAGS (type));
+  gdb_assert (ntype->instance_flags () == type->instance_flags ());
 }
 
 /* Implement direct support for MEMBER_TYPE in GNU C++.
@@ -860,9 +866,9 @@ allocate_stub_method (struct type *type)
   struct type *mtype;
 
   mtype = alloc_type_copy (type);
-  TYPE_CODE (mtype) = TYPE_CODE_METHOD;
+  mtype->set_code (TYPE_CODE_METHOD);
   TYPE_LENGTH (mtype) = 1;
-  TYPE_STUB (mtype) = 1;
+  mtype->set_is_stub (true);
   TYPE_TARGET_TYPE (mtype) = type;
   /* TYPE_SELF_TYPE (mtype) = unknown yet */
   return mtype;
@@ -873,19 +879,23 @@ allocate_stub_method (struct type *type)
 bool
 operator== (const dynamic_prop &l, const dynamic_prop &r)
 {
-  if (l.kind != r.kind)
+  if (l.kind () != r.kind ())
     return false;
 
-  switch (l.kind)
+  switch (l.kind ())
     {
     case PROP_UNDEFINED:
       return true;
     case PROP_CONST:
-      return l.data.const_val == r.data.const_val;
+      return l.const_val () == r.const_val ();
     case PROP_ADDR_OFFSET:
     case PROP_LOCEXPR:
     case PROP_LOCLIST:
-      return l.data.baton == r.data.baton;
+      return l.baton () == r.baton ();
+    case PROP_VARIANT_PARTS:
+      return l.variant_parts () == r.variant_parts ();
+    case PROP_TYPE:
+      return l.original_type () == r.original_type ();
     }
 
   gdb_assert_not_reached ("unhandled dynamic_prop kind");
@@ -918,40 +928,47 @@ create_range_type (struct type *result_t
 {
   /* The INDEX_TYPE should be a type capable of holding the upper and lower
      bounds, as such a zero sized, or void type makes no sense.  */
-  gdb_assert (TYPE_CODE (index_type) != TYPE_CODE_VOID);
+  gdb_assert (index_type->code () != TYPE_CODE_VOID);
   gdb_assert (TYPE_LENGTH (index_type) > 0);
 
   if (result_type == NULL)
     result_type = alloc_type_copy (index_type);
-  TYPE_CODE (result_type) = TYPE_CODE_RANGE;
+  result_type->set_code (TYPE_CODE_RANGE);
   TYPE_TARGET_TYPE (result_type) = index_type;
-  if (TYPE_STUB (index_type))
-    TYPE_TARGET_STUB (result_type) = 1;
+  if (index_type->is_stub ())
+    result_type->set_target_is_stub (true);
   else
     TYPE_LENGTH (result_type) = TYPE_LENGTH (check_typedef (index_type));
 
-  TYPE_RANGE_DATA (result_type) = (struct range_bounds *)
-    TYPE_ZALLOC (result_type, sizeof (struct range_bounds));
-  TYPE_RANGE_DATA (result_type)->low = *low_bound;
-  TYPE_RANGE_DATA (result_type)->high = *high_bound;
-  TYPE_RANGE_DATA (result_type)->bias = bias;
-
-  /* Initialize the stride to be a constant, the value will already be zero
-     thanks to the use of TYPE_ZALLOC above.  */
-  TYPE_RANGE_DATA (result_type)->stride.kind = PROP_CONST;
-
-  if (low_bound->kind == PROP_CONST && low_bound->data.const_val >= 0)
-    TYPE_UNSIGNED (result_type) = 1;
-
+  range_bounds *bounds
+    = (struct range_bounds *) TYPE_ZALLOC (result_type, sizeof (range_bounds));
+  bounds->low = *low_bound;
+  bounds->high = *high_bound;
+  bounds->bias = bias;
+  bounds->stride.set_const_val (0);
+
+  result_type->set_bounds (bounds);
+
+  if (index_type->code () == TYPE_CODE_FIXED_POINT)
+    result_type->set_is_unsigned (index_type->is_unsigned ());
+  /* Note that the signed-ness of a range type can't simply be copied
+     from the underlying type.  Consider a case where the underlying
+     type is 'int', but the range type can hold 0..65535, and where
+     the range is further specified to fit into 16 bits.  In this
+     case, if we copy the underlying type's sign, then reading some
+     range values will cause an unwanted sign extension.  So, we have
+     some heuristics here instead.  */
+  else if (low_bound->kind () == PROP_CONST && low_bound->const_val () >= 0)
+    result_type->set_is_unsigned (true);
   /* Ada allows the declaration of range types whose upper bound is
      less than the lower bound, so checking the lower bound is not
      enough.  Make sure we do not mark a range type whose upper bound
      is negative as unsigned.  */
-  if (high_bound->kind == PROP_CONST && high_bound->data.const_val < 0)
-    TYPE_UNSIGNED (result_type) = 0;
+  if (high_bound->kind () == PROP_CONST && high_bound->const_val () < 0)
+    result_type->set_is_unsigned (false);
 
-  TYPE_ENDIANITY_NOT_DEFAULT (result_type)
-    = TYPE_ENDIANITY_NOT_DEFAULT (index_type);
+  result_type->set_endianity_is_not_default
+    (index_type->endianity_is_not_default ());
 
   return result_type;
 }
@@ -971,8 +988,8 @@ create_range_type_with_stride (struct ty
 				   high_bound, bias);
 
   gdb_assert (stride != nullptr);
-  TYPE_RANGE_DATA (result_type)->stride = *stride;
-  TYPE_RANGE_DATA (result_type)->flag_is_byte_stride = byte_stride_p;
+  result_type->bounds ()->stride = *stride;
+  result_type->bounds ()->flag_is_byte_stride = byte_stride_p;
 
   return result_type;
 }
@@ -995,11 +1012,8 @@ create_static_range_type (struct type *r
 {
   struct dynamic_prop low, high;
 
-  low.kind = PROP_CONST;
-  low.data.const_val = low_bound;
-
-  high.kind = PROP_CONST;
-  high.data.const_val = high_bound;
+  low.set_const_val (low_bound);
+  high.set_const_val (high_bound);
 
   result_type = create_range_type (result_type, index_type, &low, &high, 0);
 
@@ -1014,115 +1028,191 @@ has_static_range (const struct range_bou
 {
   /* If the range doesn't have a defined stride then its stride field will
      be initialized to the constant 0.  */
-  return (bounds->low.kind == PROP_CONST
-	  && bounds->high.kind == PROP_CONST
-	  && bounds->stride.kind == PROP_CONST);
+  return (bounds->low.kind () == PROP_CONST
+	  && bounds->high.kind () == PROP_CONST
+	  && bounds->stride.kind () == PROP_CONST);
 }
 
+/* See gdbtypes.h.  */
 
-/* Set *LOWP and *HIGHP to the lower and upper bounds of discrete type
-   TYPE.  Return 1 if type is a range type, 0 if it is discrete (and
-   bounds will fit in LONGEST), or -1 otherwise.  */
-
-int
-get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
+gdb::optional<LONGEST>
+get_discrete_low_bound (struct type *type)
 {
   type = check_typedef (type);
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
-      *lowp = TYPE_LOW_BOUND (type);
-      *highp = TYPE_HIGH_BOUND (type);
-      return 1;
+      {
+	/* This function only works for ranges with a constant low bound.  */
+	if (type->bounds ()->low.kind () != PROP_CONST)
+	  return {};
+
+	LONGEST low = type->bounds ()->low.const_val ();
+
+	if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM)
+	  {
+	    gdb::optional<LONGEST> low_pos
+	      = discrete_position (TYPE_TARGET_TYPE (type), low);
+
+	    if (low_pos.has_value ())
+	      low = *low_pos;
+	  }
+
+	return low;
+      }
+
     case TYPE_CODE_ENUM:
-      if (TYPE_NFIELDS (type) > 0)
-	{
-	  /* The enums may not be sorted by value, so search all
-	     entries.  */
-	  int i;
+      {
+	if (type->num_fields () > 0)
+	  {
+	    /* The enums may not be sorted by value, so search all
+	       entries.  */
+	    LONGEST low = TYPE_FIELD_ENUMVAL (type, 0);
 
-	  *lowp = *highp = TYPE_FIELD_ENUMVAL (type, 0);
-	  for (i = 0; i < TYPE_NFIELDS (type); i++)
-	    {
-	      if (TYPE_FIELD_ENUMVAL (type, i) < *lowp)
-		*lowp = TYPE_FIELD_ENUMVAL (type, i);
-	      if (TYPE_FIELD_ENUMVAL (type, i) > *highp)
-		*highp = TYPE_FIELD_ENUMVAL (type, i);
-	    }
+	    for (int i = 0; i < type->num_fields (); i++)
+	      {
+		if (TYPE_FIELD_ENUMVAL (type, i) < low)
+		  low = TYPE_FIELD_ENUMVAL (type, i);
+	      }
+
+	    /* Set unsigned indicator if warranted.  */
+	    if (low >= 0)
+	      type->set_is_unsigned (true);
+
+	    return low;
+	  }
+	else
+	  return 0;
+      }
 
-	  /* Set unsigned indicator if warranted.  */
-	  if (*lowp >= 0)
-	    {
-	      TYPE_UNSIGNED (type) = 1;
-	    }
-	}
-      else
-	{
-	  *lowp = 0;
-	  *highp = -1;
-	}
-      return 0;
     case TYPE_CODE_BOOL:
-      *lowp = 0;
-      *highp = 1;
       return 0;
+
     case TYPE_CODE_INT:
       if (TYPE_LENGTH (type) > sizeof (LONGEST))	/* Too big */
-	return -1;
-      if (!TYPE_UNSIGNED (type))
+	return {};
+
+      if (!type->is_unsigned ())
+	return -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1));
+
+      /* fall through */
+    case TYPE_CODE_CHAR:
+      return 0;
+
+    default:
+      return {};
+    }
+}
+
+/* See gdbtypes.h.  */
+
+gdb::optional<LONGEST>
+get_discrete_high_bound (struct type *type)
+{
+  type = check_typedef (type);
+  switch (type->code ())
+    {
+    case TYPE_CODE_RANGE:
+      {
+	/* This function only works for ranges with a constant high bound.  */
+	if (type->bounds ()->high.kind () != PROP_CONST)
+	  return {};
+
+	LONGEST high = type->bounds ()->high.const_val ();
+
+	if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM)
+	  {
+	    gdb::optional<LONGEST> high_pos
+	      = discrete_position (TYPE_TARGET_TYPE (type), high);
+
+	    if (high_pos.has_value ())
+	      high = *high_pos;
+	  }
+
+	return high;
+      }
+
+    case TYPE_CODE_ENUM:
+      {
+	if (type->num_fields () > 0)
+	  {
+	    /* The enums may not be sorted by value, so search all
+	       entries.  */
+	    LONGEST high = TYPE_FIELD_ENUMVAL (type, 0);
+
+	    for (int i = 0; i < type->num_fields (); i++)
+	      {
+		if (TYPE_FIELD_ENUMVAL (type, i) > high)
+		  high = TYPE_FIELD_ENUMVAL (type, i);
+	      }
+
+	    return high;
+	  }
+	else
+	  return -1;
+      }
+
+    case TYPE_CODE_BOOL:
+      return 1;
+
+    case TYPE_CODE_INT:
+      if (TYPE_LENGTH (type) > sizeof (LONGEST))	/* Too big */
+	return {};
+
+      if (!type->is_unsigned ())
 	{
-	  *lowp = -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1));
-	  *highp = -*lowp - 1;
-	  return 0;
+	  LONGEST low = -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1));
+	  return -low - 1;
 	}
+
       /* fall through */
     case TYPE_CODE_CHAR:
-      *lowp = 0;
-      /* This round-about calculation is to avoid shifting by
-         TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work
-         if TYPE_LENGTH (type) == sizeof (LONGEST).  */
-      *highp = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1);
-      *highp = (*highp - 1) | *highp;
-      return 0;
+      {
+	/* This round-about calculation is to avoid shifting by
+	   TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work
+	   if TYPE_LENGTH (type) == sizeof (LONGEST).  */
+	LONGEST high = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1);
+	return (high - 1) | high;
+      }
+
     default:
-      return -1;
+      return {};
     }
 }
 
-/* Assuming TYPE is a simple, non-empty array type, compute its upper
-   and lower bound.  Save the low bound into LOW_BOUND if not NULL.
-   Save the high bound into HIGH_BOUND if not NULL.
+/* See gdbtypes.h.  */
 
-   Return 1 if the operation was successful.  Return zero otherwise,
-   in which case the values of LOW_BOUND and HIGH_BOUNDS are unmodified.
+bool
+get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
+{
+  gdb::optional<LONGEST> low = get_discrete_low_bound (type);
+  if (!low.has_value ())
+    return false;
 
-   We now simply use get_discrete_bounds call to get the values
-   of the low and high bounds.
-   get_discrete_bounds can return three values:
-   1, meaning that index is a range,
-   0, meaning that index is a discrete type,
-   or -1 for failure.  */
+  gdb::optional<LONGEST> high = get_discrete_high_bound (type);
+  if (!high.has_value ())
+    return false;
 
-int
+  *lowp = *low;
+  *highp = *high;
+
+  return true;
+}
+
+/* See gdbtypes.h  */
+
+bool
 get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound)
 {
-  struct type *index = TYPE_INDEX_TYPE (type);
+  struct type *index = type->index_type ();
   LONGEST low = 0;
   LONGEST high = 0;
-  int res;
 
   if (index == NULL)
-    return 0;
-
-  res = get_discrete_bounds (index, &low, &high);
-  if (res == -1)
-    return 0;
+    return false;
 
-  /* Check if the array bounds are undefined.  */
-  if (res == 1
-      && ((low_bound && TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
-	  || (high_bound && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))))
-    return 0;
+  if (!get_discrete_bounds (index, &low, &high))
+    return false;
 
   if (low_bound)
     *low_bound = low;
@@ -1130,7 +1220,7 @@ get_array_bounds (struct type *type, LON
   if (high_bound)
     *high_bound = high;
 
-  return 1;
+  return true;
 }
 
 /* Assuming that TYPE is a discrete type and VAL is a valid integer
@@ -1147,29 +1237,100 @@ get_array_bounds (struct type *type, LON
    in which case the value of POS is unmodified.
 */
 
-int
-discrete_position (struct type *type, LONGEST val, LONGEST *pos)
+gdb::optional<LONGEST>
+discrete_position (struct type *type, LONGEST val)
 {
-  if (TYPE_CODE (type) == TYPE_CODE_ENUM)
+  if (type->code () == TYPE_CODE_RANGE)
+    type = TYPE_TARGET_TYPE (type);
+
+  if (type->code () == TYPE_CODE_ENUM)
     {
       int i;
 
-      for (i = 0; i < TYPE_NFIELDS (type); i += 1)
-        {
-          if (val == TYPE_FIELD_ENUMVAL (type, i))
-	    {
-	      *pos = i;
-	      return 1;
-	    }
-        }
+      for (i = 0; i < type->num_fields (); i += 1)
+	{
+	  if (val == TYPE_FIELD_ENUMVAL (type, i))
+	    return i;
+	}
+
       /* Invalid enumeration value.  */
-      return 0;
+      return {};
     }
   else
+    return val;
+}
+
+/* If the array TYPE has static bounds calculate and update its
+   size, then return true.  Otherwise return false and leave TYPE
+   unchanged.  */
+
+static bool
+update_static_array_size (struct type *type)
+{
+  gdb_assert (type->code () == TYPE_CODE_ARRAY);
+
+  struct type *range_type = type->index_type ();
+
+  if (type->dyn_prop (DYN_PROP_BYTE_STRIDE) == nullptr
+      && has_static_range (range_type->bounds ())
+      && (!type_not_associated (type)
+	  && !type_not_allocated (type)))
     {
-      *pos = val;
-      return 1;
+      LONGEST low_bound, high_bound;
+      int stride;
+      struct type *element_type;
+
+      /* If the array itself doesn't provide a stride value then take
+	 whatever stride the range provides.  Don't update BIT_STRIDE as
+	 we don't want to place the stride value from the range into this
+	 arrays bit size field.  */
+      stride = TYPE_FIELD_BITSIZE (type, 0);
+      if (stride == 0)
+	stride = range_type->bit_stride ();
+
+      if (!get_discrete_bounds (range_type, &low_bound, &high_bound))
+	low_bound = high_bound = 0;
+
+      element_type = check_typedef (TYPE_TARGET_TYPE (type));
+      /* Be careful when setting the array length.  Ada arrays can be
+	 empty arrays with the high_bound being smaller than the low_bound.
+	 In such cases, the array length should be zero.  */
+      if (high_bound < low_bound)
+	TYPE_LENGTH (type) = 0;
+      else if (stride != 0)
+	{
+	  /* Ensure that the type length is always positive, even in the
+	     case where (for example in Fortran) we have a negative
+	     stride.  It is possible to have a single element array with a
+	     negative stride in Fortran (this doesn't mean anything
+	     special, it's still just a single element array) so do
+	     consider that case when touching this code.  */
+	  LONGEST element_count = std::abs (high_bound - low_bound + 1);
+	  TYPE_LENGTH (type)
+	    = ((std::abs (stride) * element_count) + 7) / 8;
+	}
+      else
+	TYPE_LENGTH (type) =
+	  TYPE_LENGTH (element_type) * (high_bound - low_bound + 1);
+
+      /* If this array's element is itself an array with a bit stride,
+	 then we want to update this array's bit stride to reflect the
+	 size of the sub-array.  Otherwise, we'll end up using the
+	 wrong size when trying to find elements of the outer
+	 array.  */
+      if (element_type->code () == TYPE_CODE_ARRAY
+	  && TYPE_LENGTH (element_type) != 0
+	  && TYPE_FIELD_BITSIZE (element_type, 0) != 0
+	  && get_array_bounds (element_type, &low_bound, &high_bound)
+	  && high_bound >= low_bound)
+	TYPE_FIELD_BITSIZE (type, 0)
+	  = ((high_bound - low_bound + 1)
+	     * TYPE_FIELD_BITSIZE (element_type, 0));
+
+      return true;
     }
+
+  return false;
 }
 
 /* Create an array type using either a blank type supplied in
@@ -1202,75 +1363,45 @@ create_array_type_with_stride (struct ty
 			       unsigned int bit_stride)
 {
   if (byte_stride_prop != NULL
-      && byte_stride_prop->kind == PROP_CONST)
+      && byte_stride_prop->kind () == PROP_CONST)
     {
       /* The byte stride is actually not dynamic.  Pretend we were
 	 called with bit_stride set instead of byte_stride_prop.
 	 This will give us the same result type, while avoiding
 	 the need to handle this as a special case.  */
-      bit_stride = byte_stride_prop->data.const_val * 8;
+      bit_stride = byte_stride_prop->const_val () * 8;
       byte_stride_prop = NULL;
     }
 
   if (result_type == NULL)
     result_type = alloc_type_copy (range_type);
 
-  TYPE_CODE (result_type) = TYPE_CODE_ARRAY;
+  result_type->set_code (TYPE_CODE_ARRAY);
   TYPE_TARGET_TYPE (result_type) = element_type;
-  if (byte_stride_prop == NULL
-      && has_static_range (TYPE_RANGE_DATA (range_type))
-      && (!type_not_associated (result_type)
-	  && !type_not_allocated (result_type)))
-    {
-      LONGEST low_bound, high_bound;
-      unsigned int stride;
 
-      /* If the array itself doesn't provide a stride value then take
-	 whatever stride the range provides.  Don't update BIT_STRIDE as
-	 we don't want to place the stride value from the range into this
-	 arrays bit size field.  */
-      stride = bit_stride;
-      if (stride == 0)
-	stride = TYPE_BIT_STRIDE (range_type);
+  result_type->set_num_fields (1);
+  result_type->set_fields
+    ((struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)));
+  result_type->set_index_type (range_type);
+  if (byte_stride_prop != NULL)
+    result_type->add_dyn_prop (DYN_PROP_BYTE_STRIDE, *byte_stride_prop);
+  else if (bit_stride > 0)
+    TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride;
 
-      if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
-	low_bound = high_bound = 0;
-      element_type = check_typedef (element_type);
-      /* Be careful when setting the array length.  Ada arrays can be
-	 empty arrays with the high_bound being smaller than the low_bound.
-	 In such cases, the array length should be zero.  */
-      if (high_bound < low_bound)
-	TYPE_LENGTH (result_type) = 0;
-      else if (stride > 0)
-	TYPE_LENGTH (result_type) =
-	  (stride * (high_bound - low_bound + 1) + 7) / 8;
-      else
-	TYPE_LENGTH (result_type) =
-	  TYPE_LENGTH (element_type) * (high_bound - low_bound + 1);
-    }
-  else
+  if (!update_static_array_size (result_type))
     {
       /* This type is dynamic and its length needs to be computed
-         on demand.  In the meantime, avoid leaving the TYPE_LENGTH
-         undefined by setting it to zero.  Although we are not expected
-         to trust TYPE_LENGTH in this case, setting the size to zero
-         allows us to avoid allocating objects of random sizes in case
-         we accidently do.  */
+	 on demand.  In the meantime, avoid leaving the TYPE_LENGTH
+	 undefined by setting it to zero.  Although we are not expected
+	 to trust TYPE_LENGTH in this case, setting the size to zero
+	 allows us to avoid allocating objects of random sizes in case
+	 we accidently do.  */
       TYPE_LENGTH (result_type) = 0;
     }
 
-  TYPE_NFIELDS (result_type) = 1;
-  TYPE_FIELDS (result_type) =
-    (struct field *) TYPE_ZALLOC (result_type, sizeof (struct field));
-  TYPE_INDEX_TYPE (result_type) = range_type;
-  if (byte_stride_prop != NULL)
-    add_dyn_prop (DYN_PROP_BYTE_STRIDE, *byte_stride_prop, result_type);
-  else if (bit_stride > 0)
-    TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride;
-
   /* TYPE_TARGET_STUB will take care of zero length arrays.  */
   if (TYPE_LENGTH (result_type) == 0)
-    TYPE_TARGET_STUB (result_type) = 1;
+    result_type->set_target_is_stub (true);
 
   return result_type;
 }
@@ -1294,10 +1425,11 @@ lookup_array_range_type (struct type *el
   struct type *index_type;
   struct type *range_type;
 
-  if (TYPE_OBJFILE_OWNED (element_type))
-    index_type = objfile_type (TYPE_OWNER (element_type).objfile)->builtin_int;
+  if (element_type->is_objfile_owned ())
+    index_type = objfile_type (element_type->objfile_owner ())->builtin_int;
   else
-    index_type = builtin_type (get_type_arch (element_type))->builtin_int;
+    index_type = builtin_type (element_type->arch_owner ())->builtin_int;
+
   range_type = create_static_range_type (NULL, index_type,
 					 low_bound, high_bound);
 
@@ -1324,7 +1456,7 @@ create_string_type (struct type *result_
   result_type = create_array_type (result_type,
 				   string_char_type,
 				   range_type);
-  TYPE_CODE (result_type) = TYPE_CODE_STRING;
+  result_type->set_code (TYPE_CODE_STRING);
   return result_type;
 }
 
@@ -1336,7 +1468,7 @@ lookup_string_range_type (struct type *s
 
   result_type = lookup_array_range_type (string_char_type,
 					 low_bound, high_bound);
-  TYPE_CODE (result_type) = TYPE_CODE_STRING;
+  result_type->set_code (TYPE_CODE_STRING);
   return result_type;
 }
 
@@ -1346,24 +1478,25 @@ create_set_type (struct type *result_typ
   if (result_type == NULL)
     result_type = alloc_type_copy (domain_type);
 
-  TYPE_CODE (result_type) = TYPE_CODE_SET;
-  TYPE_NFIELDS (result_type) = 1;
-  TYPE_FIELDS (result_type)
-    = (struct field *) TYPE_ZALLOC (result_type, sizeof (struct field));
+  result_type->set_code (TYPE_CODE_SET);
+  result_type->set_num_fields (1);
+  result_type->set_fields
+    ((struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)));
 
-  if (!TYPE_STUB (domain_type))
+  if (!domain_type->is_stub ())
     {
       LONGEST low_bound, high_bound, bit_length;
 
-      if (get_discrete_bounds (domain_type, &low_bound, &high_bound) < 0)
+      if (!get_discrete_bounds (domain_type, &low_bound, &high_bound))
 	low_bound = high_bound = 0;
+
       bit_length = high_bound - low_bound + 1;
       TYPE_LENGTH (result_type)
 	= (bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT;
       if (low_bound >= 0)
-	TYPE_UNSIGNED (result_type) = 1;
+	result_type->set_is_unsigned (true);
     }
-  TYPE_FIELD_TYPE (result_type, 0) = domain_type;
+  result_type->field (0).set_type (domain_type);
 
   return result_type;
 }
@@ -1375,23 +1508,23 @@ void
 make_vector_type (struct type *array_type)
 {
   struct type *inner_array, *elt_type;
-  int flags;
 
   /* Find the innermost array type, in case the array is
      multi-dimensional.  */
   inner_array = array_type;
-  while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY)
+  while (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY)
     inner_array = TYPE_TARGET_TYPE (inner_array);
 
   elt_type = TYPE_TARGET_TYPE (inner_array);
-  if (TYPE_CODE (elt_type) == TYPE_CODE_INT)
+  if (elt_type->code () == TYPE_CODE_INT)
     {
-      flags = TYPE_INSTANCE_FLAGS (elt_type) | TYPE_INSTANCE_FLAG_NOTTEXT;
+      type_instance_flags flags
+	= elt_type->instance_flags () | TYPE_INSTANCE_FLAG_NOTTEXT;
       elt_type = make_qualified_type (elt_type, flags, NULL);
       TYPE_TARGET_TYPE (inner_array) = elt_type;
     }
 
-  TYPE_VECTOR (array_type) = 1;
+  array_type->set_is_vector (true);
 }
 
 struct type *
@@ -1413,7 +1546,7 @@ init_vector_type (struct type *elt_type,
 struct type *
 internal_type_self_type (struct type *type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_METHODPTR:
     case TYPE_CODE_MEMBERPTR:
@@ -1439,7 +1572,7 @@ internal_type_self_type (struct type *ty
 void
 set_type_self_type (struct type *type, struct type *self_type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_METHODPTR:
     case TYPE_CODE_MEMBERPTR:
@@ -1475,13 +1608,12 @@ smash_to_memberptr_type (struct type *ty
 			 struct type *to_type)
 {
   smash_type (type);
-  TYPE_CODE (type) = TYPE_CODE_MEMBERPTR;
+  type->set_code (TYPE_CODE_MEMBERPTR);
   TYPE_TARGET_TYPE (type) = to_type;
   set_type_self_type (type, self_type);
   /* Assume that a data member pointer is the same size as a normal
      pointer.  */
-  TYPE_LENGTH (type)
-    = gdbarch_ptr_bit (get_type_arch (to_type)) / TARGET_CHAR_BIT;
+  TYPE_LENGTH (type) = gdbarch_ptr_bit (to_type->arch ()) / TARGET_CHAR_BIT;
 }
 
 /* Smash TYPE to be a type of pointer to methods type TO_TYPE.
@@ -1494,7 +1626,7 @@ void
 smash_to_methodptr_type (struct type *type, struct type *to_type)
 {
   smash_type (type);
-  TYPE_CODE (type) = TYPE_CODE_METHODPTR;
+  type->set_code (TYPE_CODE_METHODPTR);
   TYPE_TARGET_TYPE (type) = to_type;
   set_type_self_type (type, TYPE_SELF_TYPE (to_type));
   TYPE_LENGTH (type) = cplus_method_ptr_size (to_type);
@@ -1513,13 +1645,13 @@ smash_to_method_type (struct type *type,
 		      int nargs, int varargs)
 {
   smash_type (type);
-  TYPE_CODE (type) = TYPE_CODE_METHOD;
+  type->set_code (TYPE_CODE_METHOD);
   TYPE_TARGET_TYPE (type) = to_type;
   set_type_self_type (type, self_type);
-  TYPE_FIELDS (type) = args;
-  TYPE_NFIELDS (type) = nargs;
+  type->set_fields (args);
+  type->set_num_fields (nargs);
   if (varargs)
-    TYPE_VARARGS (type) = 1;
+    type->set_has_varargs (true);
   TYPE_LENGTH (type) = 1;	/* In practice, this is never needed.  */
 }
 
@@ -1539,12 +1671,12 @@ type_name_or_error (struct type *type)
 
   type = check_typedef (type);
 
-  name = TYPE_NAME (type);
+  name = type->name ();
   if (name != NULL)
     return name;
 
-  name = TYPE_NAME (saved_type);
-  objfile = TYPE_OBJFILE (saved_type);
+  name = saved_type->name ();
+  objfile = saved_type->objfile_owner ();
   error (_("Invalid anonymous type %s [in module %s], GCC PR debug/47510 bug?"),
 	 name ? name : "<anonymous>",
 	 objfile ? objfile_name (objfile) : "<arch>");
@@ -1611,7 +1743,7 @@ lookup_struct (const char *name, const s
     {
       error (_("No struct type named %s."), name);
     }
-  if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
+  if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
     {
       error (_("This context has class, union or enum %s, not a struct."),
 	     name);
@@ -1635,7 +1767,7 @@ lookup_union (const char *name, const st
 
   t = SYMBOL_TYPE (sym);
 
-  if (TYPE_CODE (t) == TYPE_CODE_UNION)
+  if (t->code () == TYPE_CODE_UNION)
     return t;
 
   /* If we get here, it's not a union.  */
@@ -1656,7 +1788,7 @@ lookup_enum (const char *name, const str
     {
       error (_("No enum type named %s."), name);
     }
-  if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_ENUM)
+  if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_ENUM)
     {
       error (_("This context has class, struct or union %s, not an enum."), 
 	     name);
@@ -1673,11 +1805,11 @@ lookup_template_type (const char *name,
 {
   struct symbol *sym;
   char *nam = (char *) 
-    alloca (strlen (name) + strlen (TYPE_NAME (type)) + 4);
+    alloca (strlen (name) + strlen (type->name ()) + 4);
 
   strcpy (nam, name);
   strcat (nam, "<");
-  strcat (nam, TYPE_NAME (type));
+  strcat (nam, type->name ());
   strcat (nam, " >");	/* FIXME, extra space still introduced in gcc?  */
 
   sym = lookup_symbol (nam, block, VAR_DOMAIN, 0).symbol;
@@ -1686,7 +1818,7 @@ lookup_template_type (const char *name,
     {
       error (_("No template type named %s."), name);
     }
-  if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
+  if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
     {
       error (_("This context has class, union or enum %s, not a struct."),
 	     name);
@@ -1704,32 +1836,32 @@ lookup_struct_elt (struct type *type, co
   for (;;)
     {
       type = check_typedef (type);
-      if (TYPE_CODE (type) != TYPE_CODE_PTR
-	  && TYPE_CODE (type) != TYPE_CODE_REF)
+      if (type->code () != TYPE_CODE_PTR
+	  && type->code () != TYPE_CODE_REF)
 	break;
       type = TYPE_TARGET_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)
     {
       std::string type_name = type_to_string (type);
       error (_("Type %s is not a structure or union type."),
 	     type_name.c_str ());
     }
 
-  for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
+  for (i = type->num_fields () - 1; i >= TYPE_N_BASECLASSES (type); i--)
     {
       const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
 	{
-	  return {&TYPE_FIELD (type, i), TYPE_FIELD_BITPOS (type, i)};
+	  return {&type->field (i), TYPE_FIELD_BITPOS (type, i)};
 	}
      else if (!t_field_name || *t_field_name == '\0')
 	{
 	  struct_elt elt
-	    = lookup_struct_elt (TYPE_FIELD_TYPE (type, i), name, 1);
+	    = lookup_struct_elt (type->field (i).type (), name, 1);
 	  if (elt.field != NULL)
 	    {
 	      elt.offset += TYPE_FIELD_BITPOS (type, i);
@@ -1760,7 +1892,7 @@ lookup_struct_elt_type (struct type *typ
 {
   struct_elt elt = lookup_struct_elt (type, name, noerr);
   if (elt.field != NULL)
-    return FIELD_TYPE (*elt.field);
+    return elt.field->type ();
   else
     return NULL;
 }
@@ -1774,7 +1906,7 @@ get_unsigned_type_max (struct type *type
   unsigned int n;
 
   type = check_typedef (type);
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_INT && TYPE_UNSIGNED (type));
+  gdb_assert (type->code () == TYPE_CODE_INT && type->is_unsigned ());
   gdb_assert (TYPE_LENGTH (type) <= sizeof (ULONGEST));
 
   /* Written this way to avoid overflow.  */
@@ -1791,7 +1923,7 @@ get_signed_type_minmax (struct type *typ
   unsigned int n;
 
   type = check_typedef (type);
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_INT && !TYPE_UNSIGNED (type));
+  gdb_assert (type->code () == TYPE_CODE_INT && !type->is_unsigned ());
   gdb_assert (TYPE_LENGTH (type) <= sizeof (LONGEST));
 
   n = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
@@ -1810,8 +1942,8 @@ int
 internal_type_vptr_fieldno (struct type *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);
   if (!HAVE_CPLUS_STRUCT (type))
     return -1;
   return TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno;
@@ -1823,8 +1955,8 @@ void
 set_type_vptr_fieldno (struct type *type, int fieldno)
 {
   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);
   if (!HAVE_CPLUS_STRUCT (type))
     ALLOCATE_CPLUS_STRUCT_TYPE (type);
   TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno = fieldno;
@@ -1837,8 +1969,8 @@ struct type *
 internal_type_vptr_basetype (struct type *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);
   gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_CPLUS_STUFF);
   return TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype;
 }
@@ -1849,8 +1981,8 @@ void
 set_type_vptr_basetype (struct type *type, struct type *basetype)
 {
   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);
   if (!HAVE_CPLUS_STRUCT (type))
     ALLOCATE_CPLUS_STRUCT_TYPE (type);
   TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype = basetype;
@@ -1878,7 +2010,7 @@ get_vptr_fieldno (struct type *type, str
       int i;
 
       /* We must start at zero in case the first (and only) baseclass
-         is virtual (and hence we cannot share the table pointer).  */
+	 is virtual (and hence we cannot share the table pointer).  */
       for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
 	{
 	  struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
@@ -1890,7 +2022,7 @@ get_vptr_fieldno (struct type *type, str
 	    {
 	      /* If the type comes from a different objfile we can't cache
 		 it, it may have a different lifetime.  PR 2384 */
-	      if (TYPE_OBJFILE (type) == TYPE_OBJFILE (basetype))
+	      if (type->objfile_owner () == basetype->objfile_owner ())
 		{
 		  set_type_vptr_fieldno (type, fieldno);
 		  set_type_vptr_basetype (type, basetype);
@@ -1924,9 +2056,9 @@ stub_noname_complaint (void)
 static int
 array_type_has_dynamic_stride (struct type *type)
 {
-  struct dynamic_prop *prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
+  struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
 
-  return (prop != NULL && prop->kind != PROP_CONST);
+  return (prop != NULL && prop->kind () != PROP_CONST);
 }
 
 /* Worker for is_dynamic_type.  */
@@ -1937,7 +2069,7 @@ is_dynamic_type_internal (struct type *t
   type = check_typedef (type);
 
   /* We only want to recognize references at the outermost level.  */
-  if (top_level && TYPE_CODE (type) == TYPE_CODE_REF)
+  if (top_level && type->code () == TYPE_CODE_REF)
     type = check_typedef (TYPE_TARGET_TYPE (type));
 
   /* Types that have a dynamic TYPE_DATA_LOCATION are considered
@@ -1957,7 +2089,14 @@ is_dynamic_type_internal (struct type *t
   if (TYPE_ALLOCATED_PROP (type))
     return 1;
 
-  switch (TYPE_CODE (type))
+  struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
+  if (prop != nullptr && prop->kind () != PROP_TYPE)
+    return 1;
+
+  if (TYPE_HAS_DYNAMIC_LENGTH (type))
+    return 1;
+
+  switch (type->code ())
     {
     case TYPE_CODE_RANGE:
       {
@@ -1966,7 +2105,7 @@ is_dynamic_type_internal (struct type *t
 	   dynamic when its subtype is dynamic, even if the bounds
 	   of the range type are static.  It allows us to assume that
 	   the subtype of a static range type is also static.  */
-	return (!has_static_range (TYPE_RANGE_DATA (type))
+	return (!has_static_range (type->bounds ())
 		|| is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0));
       }
 
@@ -1975,10 +2114,10 @@ is_dynamic_type_internal (struct type *t
 	 treated as one here.  */
     case TYPE_CODE_ARRAY:
       {
-	gdb_assert (TYPE_NFIELDS (type) == 1);
+	gdb_assert (type->num_fields () == 1);
 
 	/* The array is dynamic if either the bounds are dynamic...  */
-	if (is_dynamic_type_internal (TYPE_INDEX_TYPE (type), 0))
+	if (is_dynamic_type_internal (type->index_type (), 0))
 	  return 1;
 	/* ... or the elements it contains have a dynamic contents...  */
 	if (is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0))
@@ -1994,10 +2133,27 @@ is_dynamic_type_internal (struct type *t
       {
 	int i;
 
-	for (i = 0; i < TYPE_NFIELDS (type); ++i)
-	  if (!field_is_static (&TYPE_FIELD (type, i))
-	      && is_dynamic_type_internal (TYPE_FIELD_TYPE (type, i), 0))
+	bool is_cplus = HAVE_CPLUS_STRUCT (type);
+
+	for (i = 0; i < type->num_fields (); ++i)
+	  {
+	    /* Static fields can be ignored here.  */
+	    if (field_is_static (&type->field (i)))
+	      continue;
+	    /* If the field has dynamic type, then so does TYPE.  */
+	    if (is_dynamic_type_internal (type->field (i).type (), 0))
+	      return 1;
+	    /* If the field is at a fixed offset, then it is not
+	       dynamic.  */
+	    if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_DWARF_BLOCK)
+	      continue;
+	    /* Do not consider C++ virtual base types to be dynamic
+	       due to the field's offset being dynamic; these are
+	       handled via other means.  */
+	    if (is_cplus && BASETYPE_VIA_VIRTUAL (type, i))
+	      continue;
 	    return 1;
+	  }
       }
       break;
     }
@@ -2018,59 +2174,56 @@ static struct type *resolve_dynamic_type
 
 /* Given a dynamic range type (dyn_range_type) and a stack of
    struct property_addr_info elements, return a static version
-   of that type.  */
+   of that type.
+
+   When RESOLVE_P is true then the returned static range is created by
+   actually evaluating any dynamic properties within the range type, while
+   when RESOLVE_P is false the returned static range has all of the bounds
+   and stride information set to undefined.  The RESOLVE_P set to false
+   case will be used when evaluating a dynamic array that is not
+   allocated, or not associated, i.e. the bounds information might not be
+   initialized yet.  */
 
 static struct type *
 resolve_dynamic_range (struct type *dyn_range_type,
-		       struct property_addr_info *addr_stack)
+		       struct property_addr_info *addr_stack,
+		       bool resolve_p = true)
 {
   CORE_ADDR value;
   struct type *static_range_type, *static_target_type;
-  const struct dynamic_prop *prop;
   struct dynamic_prop low_bound, high_bound, stride;
 
-  gdb_assert (TYPE_CODE (dyn_range_type) == TYPE_CODE_RANGE);
+  gdb_assert (dyn_range_type->code () == TYPE_CODE_RANGE);
 
-  prop = &TYPE_RANGE_DATA (dyn_range_type)->low;
-  if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
-    {
-      low_bound.kind = PROP_CONST;
-      low_bound.data.const_val = value;
-    }
+  const struct dynamic_prop *prop = &dyn_range_type->bounds ()->low;
+  if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+    low_bound.set_const_val (value);
   else
-    {
-      low_bound.kind = PROP_UNDEFINED;
-      low_bound.data.const_val = 0;
-    }
+    low_bound.set_undefined ();
 
-  prop = &TYPE_RANGE_DATA (dyn_range_type)->high;
-  if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+  prop = &dyn_range_type->bounds ()->high;
+  if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
     {
-      high_bound.kind = PROP_CONST;
-      high_bound.data.const_val = value;
+      high_bound.set_const_val (value);
 
-      if (TYPE_RANGE_DATA (dyn_range_type)->flag_upper_bound_is_count)
-	high_bound.data.const_val
-	  = low_bound.data.const_val + high_bound.data.const_val - 1;
+      if (dyn_range_type->bounds ()->flag_upper_bound_is_count)
+	high_bound.set_const_val
+	  (low_bound.const_val () + high_bound.const_val () - 1);
     }
   else
-    {
-      high_bound.kind = PROP_UNDEFINED;
-      high_bound.data.const_val = 0;
-    }
+    high_bound.set_undefined ();
 
-  bool byte_stride_p = TYPE_RANGE_DATA (dyn_range_type)->flag_is_byte_stride;
-  prop = &TYPE_RANGE_DATA (dyn_range_type)->stride;
-  if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+  bool byte_stride_p = dyn_range_type->bounds ()->flag_is_byte_stride;
+  prop = &dyn_range_type->bounds ()->stride;
+  if (resolve_p && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
     {
-      stride.kind = PROP_CONST;
-      stride.data.const_val = value;
+      stride.set_const_val (value);
 
       /* If we have a bit stride that is not an exact number of bytes then
 	 I really don't think this is going to work with current GDB, the
 	 array indexing code in GDB seems to be pretty heavily tied to byte
 	 offsets right now.  Assuming 8 bits in a byte.  */
-      struct gdbarch *gdbarch = get_type_arch (dyn_range_type);
+      struct gdbarch *gdbarch = dyn_range_type->arch ();
       int unit_size = gdbarch_addressable_memory_unit_size (gdbarch);
       if (!byte_stride_p && (value % (unit_size * 8)) != 0)
 	error (_("bit strides that are not a multiple of the byte size "
@@ -2078,29 +2231,33 @@ resolve_dynamic_range (struct type *dyn_
     }
   else
     {
-      stride.kind = PROP_UNDEFINED;
-      stride.data.const_val = 0;
+      stride.set_undefined ();
       byte_stride_p = true;
     }
 
   static_target_type
     = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (dyn_range_type),
 				     addr_stack, 0);
-  LONGEST bias = TYPE_RANGE_DATA (dyn_range_type)->bias;
+  LONGEST bias = dyn_range_type->bounds ()->bias;
   static_range_type = create_range_type_with_stride
     (copy_type (dyn_range_type), static_target_type,
      &low_bound, &high_bound, bias, &stride, byte_stride_p);
-  TYPE_RANGE_DATA (static_range_type)->flag_bound_evaluated = 1;
+  static_range_type->bounds ()->flag_bound_evaluated = 1;
   return static_range_type;
 }
 
 /* Resolves dynamic bound values of an array or string type TYPE to static
    ones.  ADDR_STACK is a stack of struct property_addr_info to be used if
-   needed during the dynamic resolution.  */
+   needed during the dynamic resolution.
+
+   When RESOLVE_P is true then the dynamic properties of TYPE are
+   evaluated, otherwise the dynamic properties of TYPE are not evaluated,
+   instead we assume the array is not allocated/associated yet.  */
 
 static struct type *
 resolve_dynamic_array_or_string (struct type *type,
-				 struct property_addr_info *addr_stack)
+				 struct property_addr_info *addr_stack,
+				 bool resolve_p = true)
 {
   CORE_ADDR value;
   struct type *elt_type;
@@ -2111,43 +2268,53 @@ resolve_dynamic_array_or_string (struct
 
   /* For dynamic type resolution strings can be treated like arrays of
      characters.  */
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY
-	      || TYPE_CODE (type) == TYPE_CODE_STRING);
+  gdb_assert (type->code () == TYPE_CODE_ARRAY
+	      || type->code () == TYPE_CODE_STRING);
 
   type = copy_type (type);
 
-  elt_type = type;
-  range_type = check_typedef (TYPE_INDEX_TYPE (elt_type));
-  range_type = resolve_dynamic_range (range_type, addr_stack);
-
-  /* Resolve allocated/associated here before creating a new array type, which
-     will update the length of the array accordingly.  */
+  /* Resolve the allocated and associated properties before doing anything
+     else.  If an array is not allocated or not associated then (at least
+     for Fortran) there is no guarantee that the data to define the upper
+     bound, lower bound, or stride will be correct.  If RESOLVE_P is
+     already false at this point then this is not the first dimension of
+     the array and a more outer dimension has already marked this array as
+     not allocated/associated, as such we just ignore this property.  This
+     is fine as GDB only checks the allocated/associated on the outer most
+     dimension of the array.  */
   prop = TYPE_ALLOCATED_PROP (type);
-  if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+  if (prop != NULL && resolve_p
+      && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
     {
-      TYPE_DYN_PROP_ADDR (prop) = value;
-      TYPE_DYN_PROP_KIND (prop) = PROP_CONST;
+      prop->set_const_val (value);
+      if (value == 0)
+	resolve_p = false;
     }
+
   prop = TYPE_ASSOCIATED_PROP (type);
-  if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+  if (prop != NULL && resolve_p
+      && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
     {
-      TYPE_DYN_PROP_ADDR (prop) = value;
-      TYPE_DYN_PROP_KIND (prop) = PROP_CONST;
+      prop->set_const_val (value);
+      if (value == 0)
+	resolve_p = false;
     }
 
-  ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type));
+  range_type = check_typedef (type->index_type ());
+  range_type = resolve_dynamic_range (range_type, addr_stack, resolve_p);
 
-  if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY)
-    elt_type = resolve_dynamic_array_or_string (ary_dim, addr_stack);
+  ary_dim = check_typedef (TYPE_TARGET_TYPE (type));
+  if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY)
+    elt_type = resolve_dynamic_array_or_string (ary_dim, addr_stack, resolve_p);
   else
     elt_type = TYPE_TARGET_TYPE (type);
 
-  prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
-  if (prop != NULL)
+  prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
+  if (prop != NULL && resolve_p)
     {
       if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
 	{
-	  remove_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
+	  type->remove_dyn_prop (DYN_PROP_BYTE_STRIDE);
 	  bit_stride = (unsigned int) (value * 8);
 	}
       else
@@ -2156,14 +2323,14 @@ resolve_dynamic_array_or_string (struct
 	     if the DWARF info is not correct.  Issue a warning,
 	     and assume no byte/bit stride (leave bit_stride = 0).  */
 	  warning (_("cannot determine array stride for type %s"),
-		   TYPE_NAME (type) ? TYPE_NAME (type) : "<no name>");
+		   type->name () ? type->name () : "<no name>");
 	}
     }
   else
     bit_stride = TYPE_FIELD_BITSIZE (type, 0);
 
   return create_array_type_with_stride (type, elt_type, range_type, NULL,
-                                        bit_stride);
+					bit_stride);
 }
 
 /* Resolve dynamic bounds of members of the union TYPE to static
@@ -2178,34 +2345,193 @@ resolve_dynamic_union (struct type *type
   int i;
   unsigned int max_len = 0;
 
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION);
+  gdb_assert (type->code () == TYPE_CODE_UNION);
 
   resolved_type = copy_type (type);
-  TYPE_FIELDS (resolved_type)
-    = (struct field *) TYPE_ALLOC (resolved_type,
-				   TYPE_NFIELDS (resolved_type)
-				   * sizeof (struct field));
-  memcpy (TYPE_FIELDS (resolved_type),
-	  TYPE_FIELDS (type),
-	  TYPE_NFIELDS (resolved_type) * sizeof (struct field));
-  for (i = 0; i < TYPE_NFIELDS (resolved_type); ++i)
+  resolved_type->set_fields
+    ((struct field *)
+     TYPE_ALLOC (resolved_type,
+		 resolved_type->num_fields () * sizeof (struct field)));
+  memcpy (resolved_type->fields (),
+	  type->fields (),
+	  resolved_type->num_fields () * sizeof (struct field));
+  for (i = 0; i < resolved_type->num_fields (); ++i)
     {
       struct type *t;
 
-      if (field_is_static (&TYPE_FIELD (type, i)))
+      if (field_is_static (&type->field (i)))
 	continue;
 
-      t = resolve_dynamic_type_internal (TYPE_FIELD_TYPE (resolved_type, i),
+      t = resolve_dynamic_type_internal (resolved_type->field (i).type (),
 					 addr_stack, 0);
-      TYPE_FIELD_TYPE (resolved_type, i) = t;
-      if (TYPE_LENGTH (t) > max_len)
-	max_len = TYPE_LENGTH (t);
+      resolved_type->field (i).set_type (t);
+
+      struct type *real_type = check_typedef (t);
+      if (TYPE_LENGTH (real_type) > max_len)
+	max_len = TYPE_LENGTH (real_type);
     }
 
   TYPE_LENGTH (resolved_type) = max_len;
   return resolved_type;
 }
 
+/* See gdbtypes.h.  */
+
+bool
+variant::matches (ULONGEST value, bool is_unsigned) const
+{
+  for (const discriminant_range &range : discriminants)
+    if (range.contains (value, is_unsigned))
+      return true;
+  return false;
+}
+
+static void
+compute_variant_fields_inner (struct type *type,
+			      struct property_addr_info *addr_stack,
+			      const variant_part &part,
+			      std::vector<bool> &flags);
+
+/* A helper function to determine which variant fields will be active.
+   This handles both the variant's direct fields, and any variant
+   parts embedded in this variant.  TYPE is the type we're examining.
+   ADDR_STACK holds information about the concrete object.  VARIANT is
+   the current variant to be handled.  FLAGS is where the results are
+   stored -- this function sets the Nth element in FLAGS if the
+   corresponding field is enabled.  ENABLED is whether this variant is
+   enabled or not.  */
+
+static void
+compute_variant_fields_recurse (struct type *type,
+				struct property_addr_info *addr_stack,
+				const variant &variant,
+				std::vector<bool> &flags,
+				bool enabled)
+{
+  for (int field = variant.first_field; field < variant.last_field; ++field)
+    flags[field] = enabled;
+
+  for (const variant_part &new_part : variant.parts)
+    {
+      if (enabled)
+	compute_variant_fields_inner (type, addr_stack, new_part, flags);
+      else
+	{
+	  for (const auto &sub_variant : new_part.variants)
+	    compute_variant_fields_recurse (type, addr_stack, sub_variant,
+					    flags, enabled);
+	}
+    }
+}
+
+/* A helper function to determine which variant fields will be active.
+   This evaluates the discriminant, decides which variant (if any) is
+   active, and then updates FLAGS to reflect which fields should be
+   available.  TYPE is the type we're examining.  ADDR_STACK holds
+   information about the concrete object.  VARIANT is the current
+   variant to be handled.  FLAGS is where the results are stored --
+   this function sets the Nth element in FLAGS if the corresponding
+   field is enabled.  */
+
+static void
+compute_variant_fields_inner (struct type *type,
+			      struct property_addr_info *addr_stack,
+			      const variant_part &part,
+			      std::vector<bool> &flags)
+{
+  /* Evaluate the discriminant.  */
+  gdb::optional<ULONGEST> discr_value;
+  if (part.discriminant_index != -1)
+    {
+      int idx = part.discriminant_index;
+
+      if (TYPE_FIELD_LOC_KIND (type, idx) != FIELD_LOC_KIND_BITPOS)
+	error (_("Cannot determine struct field location"
+		 " (invalid location kind)"));
+
+      if (addr_stack->valaddr.data () != NULL)
+	discr_value = unpack_field_as_long (type, addr_stack->valaddr.data (),
+					    idx);
+      else
+	{
+	  CORE_ADDR addr = (addr_stack->addr
+			    + (TYPE_FIELD_BITPOS (type, idx)
+			       / TARGET_CHAR_BIT));
+
+	  LONGEST bitsize = TYPE_FIELD_BITSIZE (type, idx);
+	  LONGEST size = bitsize / 8;
+	  if (size == 0)
+	    size = TYPE_LENGTH (type->field (idx).type ());
+
+	  gdb_byte bits[sizeof (ULONGEST)];
+	  read_memory (addr, bits, size);
+
+	  LONGEST bitpos = (TYPE_FIELD_BITPOS (type, idx)
+			    % TARGET_CHAR_BIT);
+
+	  discr_value = unpack_bits_as_long (type->field (idx).type (),
+					     bits, bitpos, bitsize);
+	}
+    }
+
+  /* Go through each variant and see which applies.  */
+  const variant *default_variant = nullptr;
+  const variant *applied_variant = nullptr;
+  for (const auto &variant : part.variants)
+    {
+      if (variant.is_default ())
+	default_variant = &variant;
+      else if (discr_value.has_value ()
+	       && variant.matches (*discr_value, part.is_unsigned))
+	{
+	  applied_variant = &variant;
+	  break;
+	}
+    }
+  if (applied_variant == nullptr)
+    applied_variant = default_variant;
+
+  for (const auto &variant : part.variants)
+    compute_variant_fields_recurse (type, addr_stack, variant,
+				    flags, applied_variant == &variant);
+}  
+
+/* Determine which variant fields are available in TYPE.  The enabled
+   fields are stored in RESOLVED_TYPE.  ADDR_STACK holds information
+   about the concrete object.  PARTS describes the top-level variant
+   parts for this type.  */
+
+static void
+compute_variant_fields (struct type *type,
+			struct type *resolved_type,
+			struct property_addr_info *addr_stack,
+			const gdb::array_view<variant_part> &parts)
+{
+  /* Assume all fields are included by default.  */
+  std::vector<bool> flags (resolved_type->num_fields (), true);
+
+  /* Now disable fields based on the variants that control them.  */
+  for (const auto &part : parts)
+    compute_variant_fields_inner (type, addr_stack, part, flags);
+
+  resolved_type->set_num_fields
+    (std::count (flags.begin (), flags.end (), true));
+  resolved_type->set_fields
+    ((struct field *)
+     TYPE_ALLOC (resolved_type,
+		 resolved_type->num_fields () * sizeof (struct field)));
+
+  int out = 0;
+  for (int i = 0; i < type->num_fields (); ++i)
+    {
+      if (!flags[i])
+	continue;
+
+      resolved_type->field (out) = type->field (i);
+      ++out;
+    }
+}
+
 /* Resolve dynamic bounds of members of the struct TYPE to static
    bounds.  ADDR_STACK is a stack of struct property_addr_info to
    be used if needed during the dynamic resolution.  */
@@ -2218,25 +2544,56 @@ resolve_dynamic_struct (struct type *typ
   int i;
   unsigned resolved_type_bit_length = 0;
 
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT);
-  gdb_assert (TYPE_NFIELDS (type) > 0);
+  gdb_assert (type->code () == TYPE_CODE_STRUCT);
 
   resolved_type = copy_type (type);
-  TYPE_FIELDS (resolved_type)
-    = (struct field *) TYPE_ALLOC (resolved_type,
-				   TYPE_NFIELDS (resolved_type)
-				   * sizeof (struct field));
-  memcpy (TYPE_FIELDS (resolved_type),
-	  TYPE_FIELDS (type),
-	  TYPE_NFIELDS (resolved_type) * sizeof (struct field));
-  for (i = 0; i < TYPE_NFIELDS (resolved_type); ++i)
+
+  dynamic_prop *variant_prop = resolved_type->dyn_prop (DYN_PROP_VARIANT_PARTS);
+  if (variant_prop != nullptr && variant_prop->kind () == PROP_VARIANT_PARTS)
+    {
+      compute_variant_fields (type, resolved_type, addr_stack,
+			      *variant_prop->variant_parts ());
+      /* We want to leave the property attached, so that the Rust code
+	 can tell whether the type was originally an enum.  */
+      variant_prop->set_original_type (type);
+    }
+  else
+    {
+      resolved_type->set_fields
+	((struct field *)
+	 TYPE_ALLOC (resolved_type,
+		     resolved_type->num_fields () * sizeof (struct field)));
+      if (type->num_fields () > 0)
+	memcpy (resolved_type->fields (),
+		type->fields (),
+		resolved_type->num_fields () * sizeof (struct field));
+    }
+
+  for (i = 0; i < resolved_type->num_fields (); ++i)
     {
       unsigned new_bit_length;
       struct property_addr_info pinfo;
 
-      if (field_is_static (&TYPE_FIELD (type, i)))
+      if (field_is_static (&resolved_type->field (i)))
 	continue;
 
+      if (TYPE_FIELD_LOC_KIND (resolved_type, i) == FIELD_LOC_KIND_DWARF_BLOCK)
+	{
+	  struct dwarf2_property_baton baton;
+	  baton.property_type
+	    = lookup_pointer_type (resolved_type->field (i).type ());
+	  baton.locexpr = *TYPE_FIELD_DWARF_BLOCK (resolved_type, i);
+
+	  struct dynamic_prop prop;
+	  prop.set_locexpr (&baton);
+
+	  CORE_ADDR addr;
+	  if (dwarf2_evaluate_property (&prop, nullptr, addr_stack, &addr,
+					true))
+	    SET_FIELD_BITPOS (resolved_type->field (i),
+			      TARGET_CHAR_BIT * (addr - addr_stack->addr));
+	}
+
       /* As we know this field is not a static field, the field's
 	 field_loc_kind should be FIELD_LOC_KIND_BITPOS.  Verify
 	 this is the case, but only trigger a simple error rather
@@ -2244,20 +2601,20 @@ resolve_dynamic_struct (struct type *typ
 	 that verification indicates a bug in our code, the error
 	 is not severe enough to suggest to the user he stops
 	 his debugging session because of it.  */
-      if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_BITPOS)
+      if (TYPE_FIELD_LOC_KIND (resolved_type, i) != FIELD_LOC_KIND_BITPOS)
 	error (_("Cannot determine struct field location"
 		 " (invalid location kind)"));
 
-      pinfo.type = check_typedef (TYPE_FIELD_TYPE (type, i));
+      pinfo.type = check_typedef (resolved_type->field (i).type ());
       pinfo.valaddr = addr_stack->valaddr;
       pinfo.addr
 	= (addr_stack->addr
 	   + (TYPE_FIELD_BITPOS (resolved_type, i) / TARGET_CHAR_BIT));
       pinfo.next = addr_stack;
 
-      TYPE_FIELD_TYPE (resolved_type, i)
-	= resolve_dynamic_type_internal (TYPE_FIELD_TYPE (resolved_type, i),
-					 &pinfo, 0);
+      resolved_type->field (i).set_type
+	(resolve_dynamic_type_internal (resolved_type->field (i).type (),
+					&pinfo, 0));
       gdb_assert (TYPE_FIELD_LOC_KIND (resolved_type, i)
 		  == FIELD_LOC_KIND_BITPOS);
 
@@ -2265,8 +2622,12 @@ resolve_dynamic_struct (struct type *typ
       if (TYPE_FIELD_BITSIZE (resolved_type, i) != 0)
 	new_bit_length += TYPE_FIELD_BITSIZE (resolved_type, i);
       else
-	new_bit_length += (TYPE_LENGTH (TYPE_FIELD_TYPE (resolved_type, i))
-			   * TARGET_CHAR_BIT);
+	{
+	  struct type *real_type
+	    = check_typedef (resolved_type->field (i).type ());
+
+	  new_bit_length += (TYPE_LENGTH (real_type) * TARGET_CHAR_BIT);
+	}
 
       /* Normally, we would use the position and size of the last field
 	 to determine the size of the enclosing structure.  But GCC seems
@@ -2301,14 +2662,20 @@ resolve_dynamic_type_internal (struct ty
 			       int top_level)
 {
   struct type *real_type = check_typedef (type);
-  struct type *resolved_type = type;
+  struct type *resolved_type = nullptr;
   struct dynamic_prop *prop;
   CORE_ADDR value;
 
   if (!is_dynamic_type_internal (real_type, top_level))
     return type;
 
-  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  gdb::optional<CORE_ADDR> type_length;
+  prop = TYPE_DYNAMIC_LENGTH (type);
+  if (prop != NULL
+      && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
+    type_length = value;
+
+  if (type->code () == TYPE_CODE_TYPEDEF)
     {
       resolved_type = copy_type (type);
       TYPE_TARGET_TYPE (resolved_type)
@@ -2320,16 +2687,17 @@ resolve_dynamic_type_internal (struct ty
       /* Before trying to resolve TYPE, make sure it is not a stub.  */
       type = real_type;
 
-      switch (TYPE_CODE (type))
+      switch (type->code ())
 	{
 	case TYPE_CODE_REF:
 	  {
 	    struct property_addr_info pinfo;
 
 	    pinfo.type = check_typedef (TYPE_TARGET_TYPE (type));
-	    pinfo.valaddr = NULL;
-	    if (addr_stack->valaddr != NULL)
-	      pinfo.addr = extract_typed_address (addr_stack->valaddr, type);
+	    pinfo.valaddr = {};
+	    if (addr_stack->valaddr.data () != NULL)
+	      pinfo.addr = extract_typed_address (addr_stack->valaddr.data (),
+						  type);
 	    else
 	      pinfo.addr = read_memory_typed_address (addr_stack->addr, type);
 	    pinfo.next = addr_stack;
@@ -2362,13 +2730,28 @@ resolve_dynamic_type_internal (struct ty
 	}
     }
 
+  if (resolved_type == nullptr)
+    return type;
+
+  if (type_length.has_value ())
+    {
+      TYPE_LENGTH (resolved_type) = *type_length;
+      resolved_type->remove_dyn_prop (DYN_PROP_BYTE_SIZE);
+    }
+
   /* Resolve data_location attribute.  */
   prop = TYPE_DATA_LOCATION (resolved_type);
   if (prop != NULL
       && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
     {
-      TYPE_DYN_PROP_ADDR (prop) = value;
-      TYPE_DYN_PROP_KIND (prop) = PROP_CONST;
+      /* Start of Fortran hack.  See comment in f-lang.h for what is going
+	 on here.*/
+      if (current_language->la_language == language_fortran
+	  && resolved_type->code () == TYPE_CODE_ARRAY)
+	value = fortran_adjust_dynamic_array_base_address_hack (resolved_type,
+								value);
+      /* End of Fortran hack.  */
+      prop->set_const_val (value);
     }
 
   return resolved_type;
@@ -2377,7 +2760,8 @@ resolve_dynamic_type_internal (struct ty
 /* See gdbtypes.h  */
 
 struct type *
-resolve_dynamic_type (struct type *type, const gdb_byte *valaddr,
+resolve_dynamic_type (struct type *type,
+		      gdb::array_view<const gdb_byte> valaddr,
 		      CORE_ADDR addr)
 {
   struct property_addr_info pinfo
@@ -2388,15 +2772,15 @@ resolve_dynamic_type (struct type *type,
 
 /* See gdbtypes.h  */
 
-struct dynamic_prop *
-get_dyn_prop (enum dynamic_prop_node_kind prop_kind, const struct type *type)
+dynamic_prop *
+type::dyn_prop (dynamic_prop_node_kind prop_kind) const
 {
-  struct dynamic_prop_list *node = TYPE_DYN_PROP_LIST (type);
+  dynamic_prop_list *node = this->main_type->dyn_prop_list;
 
   while (node != NULL)
     {
       if (node->prop_kind == prop_kind)
-        return &node->prop;
+	return &node->prop;
       node = node->next;
     }
   return NULL;
@@ -2405,43 +2789,41 @@ get_dyn_prop (enum dynamic_prop_node_kin
 /* See gdbtypes.h  */
 
 void
-add_dyn_prop (enum dynamic_prop_node_kind prop_kind, struct dynamic_prop prop,
-              struct type *type)
+type::add_dyn_prop (dynamic_prop_node_kind prop_kind, dynamic_prop prop)
 {
   struct dynamic_prop_list *temp;
 
-  gdb_assert (TYPE_OBJFILE_OWNED (type));
+  gdb_assert (this->is_objfile_owned ());
 
-  temp = XOBNEW (&TYPE_OBJFILE (type)->objfile_obstack,
+  temp = XOBNEW (&this->objfile_owner ()->objfile_obstack,
 		 struct dynamic_prop_list);
   temp->prop_kind = prop_kind;
   temp->prop = prop;
-  temp->next = TYPE_DYN_PROP_LIST (type);
+  temp->next = this->main_type->dyn_prop_list;
 
-  TYPE_DYN_PROP_LIST (type) = temp;
+  this->main_type->dyn_prop_list = temp;
 }
 
-/* Remove dynamic property from TYPE in case it exists.  */
+/* See gdbtypes.h.  */
 
 void
-remove_dyn_prop (enum dynamic_prop_node_kind prop_kind,
-                 struct type *type)
+type::remove_dyn_prop (dynamic_prop_node_kind kind)
 {
   struct dynamic_prop_list *prev_node, *curr_node;
 
-  curr_node = TYPE_DYN_PROP_LIST (type);
+  curr_node = this->main_type->dyn_prop_list;
   prev_node = NULL;
 
   while (NULL != curr_node)
     {
-      if (curr_node->prop_kind == prop_kind)
+      if (curr_node->prop_kind == kind)
 	{
 	  /* Update the linked list but don't free anything.
 	     The property was allocated on objstack and it is not known
 	     if we are on top of it.  Nevertheless, everything is released
 	     when the complete objstack is freed.  */
 	  if (NULL == prev_node)
-	    TYPE_DYN_PROP_LIST (type) = curr_node->next;
+	    this->main_type->dyn_prop_list = curr_node->next;
 	  else
 	    prev_node->next = curr_node->next;
 
@@ -2485,13 +2867,14 @@ struct type *
 check_typedef (struct type *type)
 {
   struct type *orig_type = type;
-  /* While we're removing typedefs, we don't want to lose qualifiers.
-     E.g., const/volatile.  */
-  int instance_flags = TYPE_INSTANCE_FLAGS (type);
 
   gdb_assert (type);
 
-  while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  /* While we're removing typedefs, we don't want to lose qualifiers.
+     E.g., const/volatile.  */
+  type_instance_flags instance_flags = type->instance_flags ();
+
+  while (type->code () == TYPE_CODE_TYPEDEF)
     {
       if (!TYPE_TARGET_TYPE (type))
 	{
@@ -2503,7 +2886,7 @@ check_typedef (struct type *type)
 	  if (currently_reading_symtab)
 	    return make_qualified_type (type, instance_flags, NULL);
 
-	  name = TYPE_NAME (type);
+	  name = type->name ();
 	  /* FIXME: shouldn't we look in STRUCT_DOMAIN and/or
 	     VAR_DOMAIN as appropriate?  */
 	  if (name == NULL)
@@ -2515,7 +2898,7 @@ check_typedef (struct type *type)
 	  if (sym)
 	    TYPE_TARGET_TYPE (type) = SYMBOL_TYPE (sym);
 	  else					/* TYPE_CODE_UNDEF */
-	    TYPE_TARGET_TYPE (type) = alloc_type_arch (get_type_arch (type));
+	    TYPE_TARGET_TYPE (type) = alloc_type_arch (type->arch ());
 	}
       type = TYPE_TARGET_TYPE (type);
 
@@ -2531,10 +2914,13 @@ check_typedef (struct type *type)
 	 outer cast in a chain of casting win), instead of assuming
 	 "it can't happen".  */
       {
-	const int ALL_SPACES = (TYPE_INSTANCE_FLAG_CODE_SPACE
-				| TYPE_INSTANCE_FLAG_DATA_SPACE);
-	const int ALL_CLASSES = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL;
-	int new_instance_flags = TYPE_INSTANCE_FLAGS (type);
+	const type_instance_flags ALL_SPACES
+	  = (TYPE_INSTANCE_FLAG_CODE_SPACE
+	     | TYPE_INSTANCE_FLAG_DATA_SPACE);
+	const type_instance_flags ALL_CLASSES
+	  = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL;
+
+	type_instance_flags new_instance_flags = type->instance_flags ();
 
 	/* Treat code vs data spaces and address classes separately.  */
 	if ((instance_flags & ALL_SPACES) != 0)
@@ -2556,7 +2942,7 @@ check_typedef (struct type *type)
       && opaque_type_resolution 
       && !currently_reading_symtab)
     {
-      const char *name = TYPE_NAME (type);
+      const char *name = type->name ();
       struct type *newtype;
 
       if (name == NULL)
@@ -2578,21 +2964,19 @@ check_typedef (struct type *type)
 	     TYPE's objfile is pointless, too, since you'll have to
 	     move over any other types NEWTYPE refers to, which could
 	     be an unbounded amount of stuff.  */
-	  if (TYPE_OBJFILE (newtype) == TYPE_OBJFILE (type))
-	    type = make_qualified_type (newtype,
-					TYPE_INSTANCE_FLAGS (type),
-					type);
+	  if (newtype->objfile_owner () == type->objfile_owner ())
+	    type = make_qualified_type (newtype, type->instance_flags (), type);
 	  else
 	    type = newtype;
 	}
     }
   /* Otherwise, rely on the stub flag being set for opaque/stubbed
      types.  */
-  else if (TYPE_STUB (type) && !currently_reading_symtab)
+  else if (type->is_stub () && !currently_reading_symtab)
     {
-      const char *name = TYPE_NAME (type);
+      const char *name = type->name ();
       /* FIXME: shouldn't we look in STRUCT_DOMAIN and/or VAR_DOMAIN
-         as appropriate?  */
+	 as appropriate?  */
       struct symbol *sym;
 
       if (name == NULL)
@@ -2602,32 +2986,34 @@ check_typedef (struct type *type)
 	}
       sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0).symbol;
       if (sym)
-        {
-          /* Same as above for opaque types, we can replace the stub
-             with the complete type only if they are in the same
-             objfile.  */
-	  if (TYPE_OBJFILE (SYMBOL_TYPE(sym)) == TYPE_OBJFILE (type))
-            type = make_qualified_type (SYMBOL_TYPE (sym),
-					TYPE_INSTANCE_FLAGS (type),
-					type);
+	{
+	  /* Same as above for opaque types, we can replace the stub
+	     with the complete type only if they are in the same
+	     objfile.  */
+	  if (SYMBOL_TYPE (sym)->objfile_owner () == type->objfile_owner ())
+	    type = make_qualified_type (SYMBOL_TYPE (sym),
+					type->instance_flags (), type);
 	  else
 	    type = SYMBOL_TYPE (sym);
-        }
+	}
     }
 
-  if (TYPE_TARGET_STUB (type))
+  if (type->target_is_stub ())
     {
       struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
 
-      if (TYPE_STUB (target_type) || TYPE_TARGET_STUB (target_type))
+      if (target_type->is_stub () || target_type->target_is_stub ())
 	{
 	  /* Nothing we can do.  */
 	}
-      else if (TYPE_CODE (type) == TYPE_CODE_RANGE)
+      else if (type->code () == TYPE_CODE_RANGE)
 	{
 	  TYPE_LENGTH (type) = TYPE_LENGTH (target_type);
-	  TYPE_TARGET_STUB (type) = 0;
+	  type->set_target_is_stub (false);
 	}
+      else if (type->code () == TYPE_CODE_ARRAY
+	       && update_static_array_size (type))
+	type->set_target_is_stub (false);
     }
 
   type = make_qualified_type (type, instance_flags, NULL);
@@ -2642,7 +3028,7 @@ check_typedef (struct type *type)
    occurs, silently return a void type.  */
 
 static struct type *
-safe_parse_type (struct gdbarch *gdbarch, char *p, int length)
+safe_parse_type (struct gdbarch *gdbarch, const char *p, int length)
 {
   struct ui_file *saved_gdb_stderr;
   struct type *type = NULL; /* Initialize to keep gcc happy.  */
@@ -2680,7 +3066,7 @@ safe_parse_type (struct gdbarch *gdbarch
 static void
 check_stub_method (struct type *type, int method_id, int signature_id)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
+  struct gdbarch *gdbarch = type->arch ();
   struct fn_field *f;
   char *mangled_name = gdb_mangle_name (type, method_id, signature_id);
   char *demangled_name = gdb_demangle (mangled_name,
@@ -2737,7 +3123,7 @@ check_stub_method (struct type *type, in
     argcount = 0;
   else
     {
-      argtypes[0].type = lookup_pointer_type (type);
+      argtypes[0].set_type (lookup_pointer_type (type));
       argcount = 1;
     }
 
@@ -2749,12 +3135,12 @@ check_stub_method (struct type *type, in
 	  if (depth <= 0 && (*p == ',' || *p == ')'))
 	    {
 	      /* Avoid parsing of ellipsis, they will be handled below.
-	         Also avoid ``void'' as above.  */
+		 Also avoid ``void'' as above.  */
 	      if (strncmp (argtypetext, "...", p - argtypetext) != 0
 		  && strncmp (argtypetext, "void", p - argtypetext) != 0)
 		{
-		  argtypes[argcount].type =
-		    safe_parse_type (gdbarch, argtypetext, p - argtypetext);
+		  argtypes[argcount].set_type
+		    (safe_parse_type (gdbarch, argtypetext, p - argtypetext));
 		  argcount += 1;
 		}
 	      argtypetext = p + 1;
@@ -2781,7 +3167,7 @@ check_stub_method (struct type *type, in
      We want a method (TYPE_CODE_METHOD).  */
   smash_to_method_type (mtype, type, TYPE_TARGET_TYPE (mtype),
 			argtypes, argcount, p[-2] == '.');
-  TYPE_STUB (mtype) = 0;
+  mtype->set_is_stub (false);
   TYPE_FN_FIELD_STUB (f, signature_id) = 0;
 
   xfree (demangled_name);
@@ -2847,21 +3233,24 @@ allocate_gnat_aux_type (struct type *typ
 static void
 set_type_code (struct type *type, enum type_code code)
 {
-  TYPE_CODE (type) = code;
+  type->set_code (code);
 
   switch (code)
     {
       case TYPE_CODE_STRUCT:
       case TYPE_CODE_UNION:
       case TYPE_CODE_NAMESPACE:
-        INIT_CPLUS_SPECIFIC (type);
-        break;
+	INIT_CPLUS_SPECIFIC (type);
+	break;
       case TYPE_CODE_FLT:
-        TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FLOATFORMAT;
-        break;
+	TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FLOATFORMAT;
+	break;
       case TYPE_CODE_FUNC:
 	INIT_FUNC_SPECIFIC (type);
         break;
+      case TYPE_CODE_FIXED_POINT:
+	INIT_FIXED_POINT_SPECIFIC (type);
+	break;
     }
 }
 
@@ -2889,7 +3278,7 @@ verify_floatformat (int bit, const struc
 const struct floatformat *
 floatformat_from_type (const struct type *type)
 {
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
+  gdb_assert (type->code () == TYPE_CODE_FLT);
   gdb_assert (TYPE_FLOATFORMAT (type));
   return TYPE_FLOATFORMAT (type);
 }
@@ -2910,7 +3299,7 @@ init_type (struct objfile *objfile, enum
   set_type_code (type, code);
   gdb_assert ((bit % TARGET_CHAR_BIT) == 0);
   TYPE_LENGTH (type) = bit / TARGET_CHAR_BIT;
-  TYPE_NAME (type) = name;
+  type->set_name (name);
 
   return type;
 }
@@ -2937,7 +3326,11 @@ init_integer_type (struct objfile *objfi
 
   t = init_type (objfile, TYPE_CODE_INT, bit, name);
   if (unsigned_p)
-    TYPE_UNSIGNED (t) = 1;
+    t->set_is_unsigned (true);
+
+  TYPE_SPECIFIC_FIELD (t) = TYPE_SPECIFIC_INT;
+  TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_size = bit;
+  TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_offset = 0;
 
   return t;
 }
@@ -2954,7 +3347,7 @@ init_character_type (struct objfile *obj
 
   t = init_type (objfile, TYPE_CODE_CHAR, bit, name);
   if (unsigned_p)
-    TYPE_UNSIGNED (t) = 1;
+    t->set_is_unsigned (true);
 
   return t;
 }
@@ -2971,7 +3364,11 @@ init_boolean_type (struct objfile *objfi
 
   t = init_type (objfile, TYPE_CODE_BOOL, bit, name);
   if (unsigned_p)
-    TYPE_UNSIGNED (t) = 1;
+    t->set_is_unsigned (true);
+
+  TYPE_SPECIFIC_FIELD (t) = TYPE_SPECIFIC_INT;
+  TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_size = bit;
+  TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_offset = 0;
 
   return t;
 }
@@ -2991,7 +3388,7 @@ init_float_type (struct objfile *objfile
 {
   if (byte_order == BFD_ENDIAN_UNKNOWN)
     {
-      struct gdbarch *gdbarch = get_objfile_arch (objfile);
+      struct gdbarch *gdbarch = objfile->arch ();
       byte_order = gdbarch_byte_order (gdbarch);
     }
   const struct floatformat *fmt = floatformats[byte_order];
@@ -3016,19 +3413,48 @@ init_decfloat_type (struct objfile *objf
   return t;
 }
 
-/* Allocate a TYPE_CODE_COMPLEX type structure associated with OBJFILE.
-   NAME is the type name.  TARGET_TYPE is the component float type.  */
+/* Return true if init_complex_type can be called with TARGET_TYPE.  */
+
+bool
+can_create_complex_type (struct type *target_type)
+{
+  return (target_type->code () == TYPE_CODE_INT
+	  || target_type->code () == TYPE_CODE_FLT);
+}
+
+/* Allocate a TYPE_CODE_COMPLEX type structure.  NAME is the type
+   name.  TARGET_TYPE is the component type.  */
 
 struct type *
-init_complex_type (struct objfile *objfile,
-		   const char *name, struct type *target_type)
+init_complex_type (const char *name, struct type *target_type)
 {
   struct type *t;
 
-  t = init_type (objfile, TYPE_CODE_COMPLEX,
-		 2 * TYPE_LENGTH (target_type) * TARGET_CHAR_BIT, name);
-  TYPE_TARGET_TYPE (t) = target_type;
-  return t;
+  gdb_assert (can_create_complex_type (target_type));
+
+  if (TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type == nullptr)
+    {
+      if (name == nullptr && target_type->name () != nullptr)
+	{
+	  char *new_name
+	    = (char *) TYPE_ALLOC (target_type,
+				   strlen (target_type->name ())
+				   + strlen ("_Complex ") + 1);
+	  strcpy (new_name, "_Complex ");
+	  strcat (new_name, target_type->name ());
+	  name = new_name;
+	}
+
+      t = alloc_type_copy (target_type);
+      set_type_code (t, TYPE_CODE_COMPLEX);
+      TYPE_LENGTH (t) = 2 * TYPE_LENGTH (target_type);
+      t->set_name (name);
+
+      TYPE_TARGET_TYPE (t) = target_type;
+      TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type = t;
+    }
+
+  return TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type;
 }
 
 /* Allocate a TYPE_CODE_PTR type structure associated with OBJFILE.
@@ -3044,7 +3470,25 @@ init_pointer_type (struct objfile *objfi
 
   t = init_type (objfile, TYPE_CODE_PTR, bit, name);
   TYPE_TARGET_TYPE (t) = target_type;
-  TYPE_UNSIGNED (t) = 1;
+  t->set_is_unsigned (true);
+  return t;
+}
+
+/* Allocate a TYPE_CODE_FIXED_POINT type structure associated with OBJFILE.
+   BIT is the pointer type size in bits.
+   UNSIGNED_P should be nonzero if the type is unsigned.
+   NAME is the type name.  */
+
+struct type *
+init_fixed_point_type (struct objfile *objfile,
+		       int bit, int unsigned_p, const char *name)
+{
+  struct type *t;
+
+  t = init_type (objfile, TYPE_CODE_FIXED_POINT, bit, name);
+  if (unsigned_p)
+    t->set_is_unsigned (true);
+
   return t;
 }
 
@@ -3069,12 +3513,11 @@ type_align (struct type *type)
     return raw_align;
 
   /* Allow the architecture to provide an alignment.  */
-  struct gdbarch *arch = get_type_arch (type);
-  ULONGEST align = gdbarch_type_align (arch, type);
+  ULONGEST align = gdbarch_type_align (type->arch (), type);
   if (align != 0)
     return align;
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_FUNC:
@@ -3103,12 +3546,12 @@ type_align (struct type *type)
     case TYPE_CODE_UNION:
       {
 	int number_of_non_static_fields = 0;
-	for (unsigned i = 0; i < TYPE_NFIELDS (type); ++i)
+	for (unsigned i = 0; i < type->num_fields (); ++i)
 	  {
-	    if (!field_is_static (&TYPE_FIELD (type, i)))
+	    if (!field_is_static (&type->field (i)))
 	      {
 		number_of_non_static_fields++;
-		ULONGEST f_align = type_align (TYPE_FIELD_TYPE (type, i));
+		ULONGEST f_align = type_align (type->field (i).type ());
 		if (f_align == 0)
 		  {
 		    /* Don't pretend we know something we don't.  */
@@ -3184,8 +3627,8 @@ can_dereference (struct type *t)
   t = check_typedef (t);
   return
     (t != NULL
-     && TYPE_CODE (t) == TYPE_CODE_PTR
-     && TYPE_CODE (TYPE_TARGET_TYPE (t)) != TYPE_CODE_VOID);
+     && t->code () == TYPE_CODE_PTR
+     && TYPE_TARGET_TYPE (t)->code () != TYPE_CODE_VOID);
 }
 
 int
@@ -3194,12 +3637,13 @@ is_integral_type (struct type *t)
   t = check_typedef (t);
   return
     ((t != NULL)
-     && ((TYPE_CODE (t) == TYPE_CODE_INT)
-	 || (TYPE_CODE (t) == TYPE_CODE_ENUM)
-	 || (TYPE_CODE (t) == TYPE_CODE_FLAGS)
-	 || (TYPE_CODE (t) == TYPE_CODE_CHAR)
-	 || (TYPE_CODE (t) == TYPE_CODE_RANGE)
-	 || (TYPE_CODE (t) == TYPE_CODE_BOOL)));
+     && !is_fixed_point_type (t)
+     && ((t->code () == TYPE_CODE_INT)
+	 || (t->code () == TYPE_CODE_ENUM)
+	 || (t->code () == TYPE_CODE_FLAGS)
+	 || (t->code () == TYPE_CODE_CHAR)
+	 || (t->code () == TYPE_CODE_RANGE)
+	 || (t->code () == TYPE_CODE_BOOL)));
 }
 
 int
@@ -3208,8 +3652,8 @@ is_floating_type (struct type *t)
   t = check_typedef (t);
   return
     ((t != NULL)
-     && ((TYPE_CODE (t) == TYPE_CODE_FLT)
-	 || (TYPE_CODE (t) == TYPE_CODE_DECFLOAT)));
+     && ((t->code () == TYPE_CODE_FLT)
+	 || (t->code () == TYPE_CODE_DECFLOAT)));
 }
 
 /* Return true if TYPE is scalar.  */
@@ -3219,7 +3663,10 @@ is_scalar_type (struct type *type)
 {
   type = check_typedef (type);
 
-  switch (TYPE_CODE (type))
+  if (is_fixed_point_type (type))
+    return 0; /* Implemented as a scalar, but more like a floating point.  */
+
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
     case TYPE_CODE_STRUCT:
@@ -3244,27 +3691,29 @@ is_scalar_type_recursive (struct type *t
   if (is_scalar_type (t))
     return 1;
   /* Are we dealing with an array or string of known dimensions?  */
-  else if ((TYPE_CODE (t) == TYPE_CODE_ARRAY
-	    || TYPE_CODE (t) == TYPE_CODE_STRING) && TYPE_NFIELDS (t) == 1
-	   && TYPE_CODE (TYPE_INDEX_TYPE (t)) == TYPE_CODE_RANGE)
+  else if ((t->code () == TYPE_CODE_ARRAY
+	    || t->code () == TYPE_CODE_STRING) && t->num_fields () == 1
+	   && t->index_type ()->code () == TYPE_CODE_RANGE)
     {
       LONGEST low_bound, high_bound;
       struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (t));
 
-      get_discrete_bounds (TYPE_INDEX_TYPE (t), &low_bound, &high_bound);
-
-      return high_bound == low_bound && is_scalar_type_recursive (elt_type);
+      if (get_discrete_bounds (t->index_type (), &low_bound, &high_bound))
+	return (high_bound == low_bound
+		&& is_scalar_type_recursive (elt_type));
+      else
+	return 0;
     }
   /* Are we dealing with a struct with one element?  */
-  else if (TYPE_CODE (t) == TYPE_CODE_STRUCT && TYPE_NFIELDS (t) == 1)
-    return is_scalar_type_recursive (TYPE_FIELD_TYPE (t, 0));
-  else if (TYPE_CODE (t) == TYPE_CODE_UNION)
+  else if (t->code () == TYPE_CODE_STRUCT && t->num_fields () == 1)
+    return is_scalar_type_recursive (t->field (0).type ());
+  else if (t->code () == TYPE_CODE_UNION)
     {
-      int i, n = TYPE_NFIELDS (t);
+      int i, n = t->num_fields ();
 
       /* If all elements of the union are scalar, then the union is scalar.  */
       for (i = 0; i < n; i++)
-	if (!is_scalar_type_recursive (TYPE_FIELD_TYPE (t, i)))
+	if (!is_scalar_type_recursive (t->field (i).type ()))
 	  return 0;
 
       return 1;
@@ -3278,8 +3727,8 @@ is_scalar_type_recursive (struct type *t
 int
 class_or_union_p (const struct type *t)
 {
-  return (TYPE_CODE (t) == TYPE_CODE_STRUCT
-          || TYPE_CODE (t) == TYPE_CODE_UNION);
+  return (t->code () == TYPE_CODE_STRUCT
+	  || t->code () == TYPE_CODE_UNION);
 }
 
 /* A helper function which returns true if types A and B represent the
@@ -3290,8 +3739,8 @@ int
 class_types_same_p (const struct type *a, const struct type *b)
 {
   return (TYPE_MAIN_TYPE (a) == TYPE_MAIN_TYPE (b)
-	  || (TYPE_NAME (a) && TYPE_NAME (b)
-	      && !strcmp (TYPE_NAME (a), TYPE_NAME (b))));
+	  || (a->name () && b->name ()
+	      && !strcmp (a->name (), b->name ())));
 }
 
 /* If BASE is an ancestor of DCLASS return the distance between them.
@@ -3431,11 +3880,11 @@ is_unique_ancestor (struct type *base, s
 enum bfd_endian
 type_byte_order (const struct type *type)
 {
-  bfd_endian byteorder = gdbarch_byte_order (get_type_arch (type));
-  if (TYPE_ENDIANITY_NOT_DEFAULT (type))
+  bfd_endian byteorder = gdbarch_byte_order (type->arch ());
+  if (type->endianity_is_not_default ())
     {
       if (byteorder == BFD_ENDIAN_BIG)
-        return BFD_ENDIAN_LITTLE;
+	return BFD_ENDIAN_LITTLE;
       else
 	{
 	  gdb_assert (byteorder == BFD_ENDIAN_LITTLE);
@@ -3621,51 +4070,51 @@ types_equal (struct type *a, struct type
     return true;
 
   /* Resolve typedefs */
-  if (TYPE_CODE (a) == TYPE_CODE_TYPEDEF)
+  if (a->code () == TYPE_CODE_TYPEDEF)
     a = check_typedef (a);
-  if (TYPE_CODE (b) == TYPE_CODE_TYPEDEF)
+  if (b->code () == TYPE_CODE_TYPEDEF)
     b = check_typedef (b);
 
+  /* Check if identical after resolving typedefs.  */
+  if (a == b)
+    return true;
+
   /* If after resolving typedefs a and b are not of the same type
      code then they are not equal.  */
-  if (TYPE_CODE (a) != TYPE_CODE (b))
+  if (a->code () != b->code ())
     return false;
 
   /* If a and b are both pointers types or both reference types then
      they are equal of the same type iff the objects they refer to are
      of the same type.  */
-  if (TYPE_CODE (a) == TYPE_CODE_PTR
-      || TYPE_CODE (a) == TYPE_CODE_REF)
+  if (a->code () == TYPE_CODE_PTR
+      || a->code () == TYPE_CODE_REF)
     return types_equal (TYPE_TARGET_TYPE (a),
-                        TYPE_TARGET_TYPE (b));
+			TYPE_TARGET_TYPE (b));
 
   /* Well, damnit, if the names are exactly the same, I'll say they
      are exactly the same.  This happens when we generate method
      stubs.  The types won't point to the same address, but they
      really are the same.  */
 
-  if (TYPE_NAME (a) && TYPE_NAME (b)
-      && strcmp (TYPE_NAME (a), TYPE_NAME (b)) == 0)
-    return true;
-
-  /* Check if identical after resolving typedefs.  */
-  if (a == b)
+  if (a->name () && b->name ()
+      && strcmp (a->name (), b->name ()) == 0)
     return true;
 
   /* Two function types are equal if their argument and return types
      are equal.  */
-  if (TYPE_CODE (a) == TYPE_CODE_FUNC)
+  if (a->code () == TYPE_CODE_FUNC)
     {
       int i;
 
-      if (TYPE_NFIELDS (a) != TYPE_NFIELDS (b))
+      if (a->num_fields () != b->num_fields ())
 	return false;
       
       if (!types_equal (TYPE_TARGET_TYPE (a), TYPE_TARGET_TYPE (b)))
 	return false;
 
-      for (i = 0; i < TYPE_NFIELDS (a); ++i)
-	if (!types_equal (TYPE_FIELD_TYPE (a, i), TYPE_FIELD_TYPE (b, i)))
+      for (i = 0; i < a->num_fields (); ++i)
+	if (!types_equal (a->field (i).type (), b->field (i).type ()))
 	  return false;
 
       return true;
@@ -3714,36 +4163,36 @@ check_types_equal (struct type *type1, s
   if (type1 == type2)
     return true;
 
-  if (TYPE_CODE (type1) != TYPE_CODE (type2)
+  if (type1->code () != type2->code ()
       || TYPE_LENGTH (type1) != TYPE_LENGTH (type2)
-      || TYPE_UNSIGNED (type1) != TYPE_UNSIGNED (type2)
-      || TYPE_NOSIGN (type1) != TYPE_NOSIGN (type2)
-      || TYPE_ENDIANITY_NOT_DEFAULT (type1) != TYPE_ENDIANITY_NOT_DEFAULT (type2)
-      || TYPE_VARARGS (type1) != TYPE_VARARGS (type2)
-      || TYPE_VECTOR (type1) != TYPE_VECTOR (type2)
+      || type1->is_unsigned () != type2->is_unsigned ()
+      || type1->has_no_signedness () != type2->has_no_signedness ()
+      || type1->endianity_is_not_default () != type2->endianity_is_not_default ()
+      || type1->has_varargs () != type2->has_varargs ()
+      || type1->is_vector () != type2->is_vector ()
       || TYPE_NOTTEXT (type1) != TYPE_NOTTEXT (type2)
-      || TYPE_INSTANCE_FLAGS (type1) != TYPE_INSTANCE_FLAGS (type2)
-      || TYPE_NFIELDS (type1) != TYPE_NFIELDS (type2))
+      || type1->instance_flags () != type2->instance_flags ()
+      || type1->num_fields () != type2->num_fields ())
     return false;
 
-  if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2)))
+  if (!compare_maybe_null_strings (type1->name (), type2->name ()))
     return false;
-  if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2)))
+  if (!compare_maybe_null_strings (type1->name (), type2->name ()))
     return false;
 
-  if (TYPE_CODE (type1) == TYPE_CODE_RANGE)
+  if (type1->code () == TYPE_CODE_RANGE)
     {
-      if (*TYPE_RANGE_DATA (type1) != *TYPE_RANGE_DATA (type2))
+      if (*type1->bounds () != *type2->bounds ())
 	return false;
     }
   else
     {
       int i;
 
-      for (i = 0; i < TYPE_NFIELDS (type1); ++i)
+      for (i = 0; i < type1->num_fields (); ++i)
 	{
-	  const struct field *field1 = &TYPE_FIELD (type1, i);
-	  const struct field *field2 = &TYPE_FIELD (type2, i);
+	  const struct field *field1 = &type1->field (i);
+	  const struct field *field2 = &type2->field (i);
 
 	  if (FIELD_ARTIFICIAL (*field1) != FIELD_ARTIFICIAL (*field2)
 	      || FIELD_BITSIZE (*field1) != FIELD_BITSIZE (*field2)
@@ -3761,7 +4210,9 @@ check_types_equal (struct type *type1, s
 	    case FIELD_LOC_KIND_ENUMVAL:
 	      if (FIELD_ENUMVAL (*field1) != FIELD_ENUMVAL (*field2))
 		return false;
-	      break;
+	      /* Don't compare types of enum fields, because they don't
+		 have a type.  */
+	      continue;
 	    case FIELD_LOC_KIND_PHYSADDR:
 	      if (FIELD_STATIC_PHYSADDR (*field1)
 		  != FIELD_STATIC_PHYSADDR (*field2))
@@ -3790,7 +4241,7 @@ check_types_equal (struct type *type1, s
 			      FIELD_LOC_KIND (*field1));
 	    }
 
-	  worklist->emplace_back (FIELD_TYPE (*field1), FIELD_TYPE (*field2));
+	  worklist->emplace_back (field1->type (), field2->type ());
 	}
     }
 
@@ -3817,7 +4268,7 @@ check_types_worklist (std::vector<type_e
 {
   while (!worklist->empty ())
     {
-      int added;
+      bool added;
 
       struct type_equality_entry entry = std::move (worklist->back ());
       worklist->pop_back ();
@@ -3849,7 +4300,7 @@ types_deeply_equal (struct type *type1,
   if (type1 == type2)
     return true;
 
-  gdb::bcache cache (nullptr, nullptr);
+  gdb::bcache cache;
   worklist.emplace_back (type1, type2);
   return check_types_worklist (&worklist, &cache);
 }
@@ -3862,8 +4313,8 @@ type_not_allocated (const struct type *t
 {
   struct dynamic_prop *prop = TYPE_ALLOCATED_PROP (type);
 
-  return (prop && TYPE_DYN_PROP_KIND (prop) == PROP_CONST
-         && !TYPE_DYN_PROP_ADDR (prop));
+  return (prop != nullptr && prop->kind () == PROP_CONST
+	  && prop->const_val () == 0);
 }
 
 /* Associated status of type TYPE.  Return zero if type TYPE is associated.
@@ -3874,8 +4325,8 @@ type_not_associated (const struct type *
 {
   struct dynamic_prop *prop = TYPE_ASSOCIATED_PROP (type);
 
-  return (prop && TYPE_DYN_PROP_KIND (prop) == PROP_CONST
-         && !TYPE_DYN_PROP_ADDR (prop));
+  return (prop != nullptr && prop->kind () == PROP_CONST
+	  && prop->const_val () == 0);
 }
 
 /* rank_one_type helper for when PARM's type code is TYPE_CODE_PTR.  */
@@ -3885,13 +4336,13 @@ rank_one_type_parm_ptr (struct type *par
 {
   struct rank rank = {0,0};
 
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_PTR:
 
       /* Allowed pointer conversions are:
 	 (a) pointer to void-pointer conversion.  */
-      if (TYPE_CODE (TYPE_TARGET_TYPE (parm)) == TYPE_CODE_VOID)
+      if (TYPE_TARGET_TYPE (parm)->code () == TYPE_CODE_VOID)
 	return VOID_PTR_CONVERSION_BADNESS;
 
       /* (b) pointer to ancestor-pointer conversion.  */
@@ -3923,7 +4374,7 @@ rank_one_type_parm_ptr (struct type *par
     case TYPE_CODE_FUNC:
       return rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL);
     case TYPE_CODE_INT:
-      if (value != NULL && TYPE_CODE (value_type (value)) == TYPE_CODE_INT)
+      if (value != NULL && value_type (value)->code () == TYPE_CODE_INT)
 	{
 	  if (value_as_long (value) == 0)
 	    {
@@ -3954,7 +4405,7 @@ rank_one_type_parm_ptr (struct type *par
 static struct rank
 rank_one_type_parm_array (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_ARRAY:
@@ -3970,7 +4421,7 @@ rank_one_type_parm_array (struct type *p
 static struct rank
 rank_one_type_parm_func (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_PTR:	/* funcptr -> func */
       return rank_one_type (parm, TYPE_TARGET_TYPE (arg), NULL);
@@ -3984,33 +4435,33 @@ rank_one_type_parm_func (struct type *pa
 static struct rank
 rank_one_type_parm_int (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_INT:
       if (TYPE_LENGTH (arg) == TYPE_LENGTH (parm))
 	{
 	  /* Deal with signed, unsigned, and plain chars and
 	     signed and unsigned ints.  */
-	  if (TYPE_NOSIGN (parm))
+	  if (parm->has_no_signedness ())
 	    {
 	      /* This case only for character types.  */
-	      if (TYPE_NOSIGN (arg))
+	      if (arg->has_no_signedness ())
 		return EXACT_MATCH_BADNESS;	/* plain char -> plain char */
 	      else		/* signed/unsigned char -> plain char */
 		return INTEGER_CONVERSION_BADNESS;
 	    }
-	  else if (TYPE_UNSIGNED (parm))
+	  else if (parm->is_unsigned ())
 	    {
-	      if (TYPE_UNSIGNED (arg))
+	      if (arg->is_unsigned ())
 		{
 		  /* unsigned int -> unsigned int, or
 		     unsigned long -> unsigned long */
-		  if (integer_types_same_name_p (TYPE_NAME (parm),
-						 TYPE_NAME (arg)))
+		  if (integer_types_same_name_p (parm->name (),
+						 arg->name ()))
 		    return EXACT_MATCH_BADNESS;
-		  else if (integer_types_same_name_p (TYPE_NAME (arg),
+		  else if (integer_types_same_name_p (arg->name (),
 						      "int")
-			   && integer_types_same_name_p (TYPE_NAME (parm),
+			   && integer_types_same_name_p (parm->name (),
 							 "long"))
 		    /* unsigned int -> unsigned long */
 		    return INTEGER_PROMOTION_BADNESS;
@@ -4020,9 +4471,9 @@ rank_one_type_parm_int (struct type *par
 		}
 	      else
 		{
-		  if (integer_types_same_name_p (TYPE_NAME (arg),
+		  if (integer_types_same_name_p (arg->name (),
 						 "long")
-		      && integer_types_same_name_p (TYPE_NAME (parm),
+		      && integer_types_same_name_p (parm->name (),
 						    "int"))
 		    /* signed long -> unsigned int */
 		    return INTEGER_CONVERSION_BADNESS;
@@ -4031,14 +4482,14 @@ rank_one_type_parm_int (struct type *par
 		    return INTEGER_CONVERSION_BADNESS;
 		}
 	    }
-	  else if (!TYPE_NOSIGN (arg) && !TYPE_UNSIGNED (arg))
+	  else if (!arg->has_no_signedness () && !arg->is_unsigned ())
 	    {
-	      if (integer_types_same_name_p (TYPE_NAME (parm),
-					     TYPE_NAME (arg)))
+	      if (integer_types_same_name_p (parm->name (),
+					     arg->name ()))
 		return EXACT_MATCH_BADNESS;
-	      else if (integer_types_same_name_p (TYPE_NAME (arg),
+	      else if (integer_types_same_name_p (arg->name (),
 						  "int")
-		       && integer_types_same_name_p (TYPE_NAME (parm),
+		       && integer_types_same_name_p (parm->name (),
 						     "long"))
 		return INTEGER_PROMOTION_BADNESS;
 	      else
@@ -4056,7 +4507,7 @@ rank_one_type_parm_int (struct type *par
     case TYPE_CODE_CHAR:
     case TYPE_CODE_RANGE:
     case TYPE_CODE_BOOL:
-      if (TYPE_DECLARED_CLASS (arg))
+      if (arg->is_declared_class ())
 	return INCOMPATIBLE_TYPE_BADNESS;
       return INTEGER_PROMOTION_BADNESS;
     case TYPE_CODE_FLT:
@@ -4073,14 +4524,14 @@ rank_one_type_parm_int (struct type *par
 static struct rank
 rank_one_type_parm_enum (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_INT:
     case TYPE_CODE_CHAR:
     case TYPE_CODE_RANGE:
     case TYPE_CODE_BOOL:
     case TYPE_CODE_ENUM:
-      if (TYPE_DECLARED_CLASS (parm) || TYPE_DECLARED_CLASS (arg))
+      if (parm->is_declared_class () || arg->is_declared_class ())
 	return INCOMPATIBLE_TYPE_BADNESS;
       return INTEGER_CONVERSION_BADNESS;
     case TYPE_CODE_FLT:
@@ -4095,12 +4546,12 @@ rank_one_type_parm_enum (struct type *pa
 static struct rank
 rank_one_type_parm_char (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_RANGE:
     case TYPE_CODE_BOOL:
     case TYPE_CODE_ENUM:
-      if (TYPE_DECLARED_CLASS (arg))
+      if (arg->is_declared_class ())
 	return INCOMPATIBLE_TYPE_BADNESS;
       return INTEGER_CONVERSION_BADNESS;
     case TYPE_CODE_FLT:
@@ -4114,21 +4565,21 @@ rank_one_type_parm_char (struct type *pa
     case TYPE_CODE_CHAR:
       /* Deal with signed, unsigned, and plain chars for C++ and
 	 with int cases falling through from previous case.  */
-      if (TYPE_NOSIGN (parm))
+      if (parm->has_no_signedness ())
 	{
-	  if (TYPE_NOSIGN (arg))
+	  if (arg->has_no_signedness ())
 	    return EXACT_MATCH_BADNESS;
 	  else
 	    return INTEGER_CONVERSION_BADNESS;
 	}
-      else if (TYPE_UNSIGNED (parm))
+      else if (parm->is_unsigned ())
 	{
-	  if (TYPE_UNSIGNED (arg))
+	  if (arg->is_unsigned ())
 	    return EXACT_MATCH_BADNESS;
 	  else
 	    return INTEGER_PROMOTION_BADNESS;
 	}
-      else if (!TYPE_NOSIGN (arg) && !TYPE_UNSIGNED (arg))
+      else if (!arg->has_no_signedness () && !arg->is_unsigned ())
 	return EXACT_MATCH_BADNESS;
       else
 	return INTEGER_CONVERSION_BADNESS;
@@ -4142,7 +4593,7 @@ rank_one_type_parm_char (struct type *pa
 static struct rank
 rank_one_type_parm_range (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_INT:
     case TYPE_CODE_CHAR:
@@ -4162,7 +4613,7 @@ rank_one_type_parm_range (struct type *p
 static struct rank
 rank_one_type_parm_bool (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
       /* n3290 draft, section 4.12.1 (conv.bool):
 
@@ -4193,7 +4644,7 @@ rank_one_type_parm_bool (struct type *pa
 static struct rank
 rank_one_type_parm_float (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_FLT:
       if (TYPE_LENGTH (arg) < TYPE_LENGTH (parm))
@@ -4218,7 +4669,7 @@ rank_one_type_parm_float (struct type *p
 static struct rank
 rank_one_type_parm_complex (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {		/* Strictly not needed for C++, but...  */
     case TYPE_CODE_FLT:
       return FLOAT_PROMOTION_BADNESS;
@@ -4236,7 +4687,7 @@ rank_one_type_parm_struct (struct type *
 {
   struct rank rank = {0, 0};
 
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
     case TYPE_CODE_STRUCT:
       /* Check for derivation */
@@ -4254,12 +4705,12 @@ rank_one_type_parm_struct (struct type *
 static struct rank
 rank_one_type_parm_set (struct type *parm, struct type *arg, struct value *value)
 {
-  switch (TYPE_CODE (arg))
+  switch (arg->code ())
     {
       /* Not in C++ */
     case TYPE_CODE_SET:
-      return rank_one_type (TYPE_FIELD_TYPE (parm, 0),
-			    TYPE_FIELD_TYPE (arg, 0), NULL);
+      return rank_one_type (parm->field (0).type (),
+			    arg->field (0).type (), NULL);
     default:
       return INCOMPATIBLE_TYPE_BADNESS;
     }
@@ -4282,9 +4733,9 @@ rank_one_type (struct type *parm, struct
   struct rank rank = {0,0};
 
   /* Resolve typedefs */
-  if (TYPE_CODE (parm) == TYPE_CODE_TYPEDEF)
+  if (parm->code () == TYPE_CODE_TYPEDEF)
     parm = check_typedef (parm);
-  if (TYPE_CODE (arg) == TYPE_CODE_TYPEDEF)
+  if (arg->code () == TYPE_CODE_TYPEDEF)
     arg = check_typedef (arg);
 
   if (TYPE_IS_REFERENCE (parm) && value != NULL)
@@ -4293,7 +4744,7 @@ rank_one_type (struct type *parm, struct
 	{
 	  /* Rvalues should preferably bind to rvalue references or const
 	     lvalue references.  */
-	  if (TYPE_CODE (parm) == TYPE_CODE_RVALUE_REF)
+	  if (parm->code () == TYPE_CODE_RVALUE_REF)
 	    rank.subrank = REFERENCE_CONVERSION_RVALUE;
 	  else if (TYPE_CONST (TYPE_TARGET_TYPE (parm)))
 	    rank.subrank = REFERENCE_CONVERSION_CONST_LVALUE;
@@ -4304,7 +4755,7 @@ rank_one_type (struct type *parm, struct
       else
 	{
 	  /* It's illegal to pass an lvalue as an rvalue.  */
-	  if (TYPE_CODE (parm) == TYPE_CODE_RVALUE_REF)
+	  if (parm->code () == TYPE_CODE_RVALUE_REF)
 	    return INCOMPATIBLE_TYPE_BADNESS;
 	}
     }
@@ -4315,7 +4766,7 @@ rank_one_type (struct type *parm, struct
       struct type *t2 = arg;
 
       /* For pointers and references, compare target type.  */
-      if (TYPE_CODE (parm) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (parm))
+      if (parm->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (parm))
 	{
 	  t1 = TYPE_TARGET_TYPE (parm);
 	  t2 = TYPE_TARGET_TYPE (arg);
@@ -4336,20 +4787,22 @@ rank_one_type (struct type *parm, struct
 
   if (TYPE_IS_REFERENCE (arg))
     return (sum_ranks (rank_one_type (parm, TYPE_TARGET_TYPE (arg), NULL),
-                       REFERENCE_SEE_THROUGH_BADNESS));
+		       REFERENCE_SEE_THROUGH_BADNESS));
   if (TYPE_IS_REFERENCE (parm))
     return (sum_ranks (rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL),
-                       REFERENCE_SEE_THROUGH_BADNESS));
+		       REFERENCE_SEE_THROUGH_BADNESS));
   if (overload_debug)
-  /* Debugging only.  */
-    fprintf_filtered (gdb_stderr, 
-		      "------ Arg is %s [%d], parm is %s [%d]\n",
-		      TYPE_NAME (arg), TYPE_CODE (arg), 
-		      TYPE_NAME (parm), TYPE_CODE (parm));
+    {
+      /* Debugging only.  */
+      fprintf_filtered (gdb_stderr,
+			"------ Arg is %s [%d], parm is %s [%d]\n",
+			arg->name (), arg->code (),
+			parm->name (), parm->code ());
+    }
 
   /* x -> y means arg of type x being supplied for parameter of type y.  */
 
-  switch (TYPE_CODE (parm))
+  switch (parm->code ())
     {
     case TYPE_CODE_PTR:
       return rank_one_type_parm_ptr (parm, arg, value);
@@ -4377,7 +4830,7 @@ rank_one_type (struct type *parm, struct
       return rank_one_type_parm_set (parm, arg, value);
     default:
       return INCOMPATIBLE_TYPE_BADNESS;
-    }				/* switch (TYPE_CODE (arg)) */
+    }				/* switch (arg->code ()) */
 }
 
 /* End of functions for overload resolution.  */
@@ -4415,9 +4868,9 @@ print_args (struct field *args, int narg
 
       for (i = 0; i < nargs; i++)
 	{
-	  printfi_filtered (spaces, "[%d] name '%s'\n", i,
-			    args[i].name != NULL ? args[i].name : "<NULL>");
-	  recursive_dump_type (args[i].type, spaces + 2);
+	  printf_filtered ("%*s[%d] name '%s'\n", spaces, "", i,
+			   args[i].name != NULL ? args[i].name : "<NULL>");
+	  recursive_dump_type (args[i].type (), spaces + 2);
 	}
     }
 }
@@ -4441,15 +4894,15 @@ dump_fn_fieldlists (struct type *type, i
   int overload_idx;
   struct fn_field *f;
 
-  printfi_filtered (spaces, "fn_fieldlists ");
+  printf_filtered ("%*sfn_fieldlists ", spaces, "");
   gdb_print_host_address (TYPE_FN_FIELDLISTS (type), gdb_stdout);
   printf_filtered ("\n");
   for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
     {
       f = TYPE_FN_FIELDLIST1 (type, method_idx);
-      printfi_filtered (spaces + 2, "[%d] name '%s' (",
-			method_idx,
-			TYPE_FN_FIELDLIST_NAME (type, method_idx));
+      printf_filtered ("%*s[%d] name '%s' (", spaces + 2, "",
+		       method_idx,
+		       TYPE_FN_FIELDLIST_NAME (type, method_idx));
       gdb_print_host_address (TYPE_FN_FIELDLIST_NAME (type, method_idx),
 			      gdb_stdout);
       printf_filtered (_(") length %d\n"),
@@ -4458,13 +4911,13 @@ dump_fn_fieldlists (struct type *type, i
 	   overload_idx < TYPE_FN_FIELDLIST_LENGTH (type, method_idx);
 	   overload_idx++)
 	{
-	  printfi_filtered (spaces + 4, "[%d] physname '%s' (",
-			    overload_idx,
-			    TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
+	  printf_filtered ("%*s[%d] physname '%s' (",
+			   spaces + 4, "", overload_idx,
+			   TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
 	  gdb_print_host_address (TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
 				  gdb_stdout);
 	  printf_filtered (")\n");
-	  printfi_filtered (spaces + 8, "type ");
+	  printf_filtered ("%*stype ", spaces + 8, "");
 	  gdb_print_host_address (TYPE_FN_FIELD_TYPE (f, overload_idx), 
 				  gdb_stdout);
 	  printf_filtered ("\n");
@@ -4472,30 +4925,34 @@ dump_fn_fieldlists (struct type *type, i
 	  recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
 			       spaces + 8 + 2);
 
-	  printfi_filtered (spaces + 8, "args ");
+	  printf_filtered ("%*sargs ", spaces + 8, "");
 	  gdb_print_host_address (TYPE_FN_FIELD_ARGS (f, overload_idx), 
 				  gdb_stdout);
 	  printf_filtered ("\n");
 	  print_args (TYPE_FN_FIELD_ARGS (f, overload_idx),
-		      TYPE_NFIELDS (TYPE_FN_FIELD_TYPE (f, overload_idx)),
+		      TYPE_FN_FIELD_TYPE (f, overload_idx)->num_fields (),
 		      spaces + 8 + 2);
-	  printfi_filtered (spaces + 8, "fcontext ");
+	  printf_filtered ("%*sfcontext ", spaces + 8, "");
 	  gdb_print_host_address (TYPE_FN_FIELD_FCONTEXT (f, overload_idx),
 				  gdb_stdout);
 	  printf_filtered ("\n");
 
-	  printfi_filtered (spaces + 8, "is_const %d\n",
-			    TYPE_FN_FIELD_CONST (f, overload_idx));
-	  printfi_filtered (spaces + 8, "is_volatile %d\n",
-			    TYPE_FN_FIELD_VOLATILE (f, overload_idx));
-	  printfi_filtered (spaces + 8, "is_private %d\n",
-			    TYPE_FN_FIELD_PRIVATE (f, overload_idx));
-	  printfi_filtered (spaces + 8, "is_protected %d\n",
-			    TYPE_FN_FIELD_PROTECTED (f, overload_idx));
-	  printfi_filtered (spaces + 8, "is_stub %d\n",
-			    TYPE_FN_FIELD_STUB (f, overload_idx));
-	  printfi_filtered (spaces + 8, "voffset %u\n",
-			    TYPE_FN_FIELD_VOFFSET (f, overload_idx));
+	  printf_filtered ("%*sis_const %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_CONST (f, overload_idx));
+	  printf_filtered ("%*sis_volatile %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_VOLATILE (f, overload_idx));
+	  printf_filtered ("%*sis_private %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_PRIVATE (f, overload_idx));
+	  printf_filtered ("%*sis_protected %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_PROTECTED (f, overload_idx));
+	  printf_filtered ("%*sis_stub %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_STUB (f, overload_idx));
+	  printf_filtered ("%*sdefaulted %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_DEFAULTED (f, overload_idx));
+	  printf_filtered ("%*sis_deleted %d\n", spaces + 8, "",
+			   TYPE_FN_FIELD_DELETED (f, overload_idx));
+	  printf_filtered ("%*svoffset %u\n", spaces + 8, "",
+			   TYPE_FN_FIELD_VOFFSET (f, overload_idx));
 	}
     }
 }
@@ -4503,21 +4960,22 @@ dump_fn_fieldlists (struct type *type, i
 static void
 print_cplus_stuff (struct type *type, int spaces)
 {
-  printfi_filtered (spaces, "vptr_fieldno %d\n", TYPE_VPTR_FIELDNO (type));
-  printfi_filtered (spaces, "vptr_basetype ");
+  printf_filtered ("%*svptr_fieldno %d\n", spaces, "",
+		   TYPE_VPTR_FIELDNO (type));
+  printf_filtered ("%*svptr_basetype ", spaces, "");
   gdb_print_host_address (TYPE_VPTR_BASETYPE (type), gdb_stdout);
   puts_filtered ("\n");
   if (TYPE_VPTR_BASETYPE (type) != NULL)
     recursive_dump_type (TYPE_VPTR_BASETYPE (type), spaces + 2);
 
-  printfi_filtered (spaces, "n_baseclasses %d\n",
-		    TYPE_N_BASECLASSES (type));
-  printfi_filtered (spaces, "nfn_fields %d\n",
-		    TYPE_NFN_FIELDS (type));
+  printf_filtered ("%*sn_baseclasses %d\n", spaces, "",
+		   TYPE_N_BASECLASSES (type));
+  printf_filtered ("%*snfn_fields %d\n", spaces, "",
+		   TYPE_NFN_FIELDS (type));
   if (TYPE_N_BASECLASSES (type) > 0)
     {
-      printfi_filtered (spaces, "virtual_field_bits (%d bits at *",
-			TYPE_N_BASECLASSES (type));
+      printf_filtered ("%*svirtual_field_bits (%d bits at *",
+		       spaces, "", TYPE_N_BASECLASSES (type));
       gdb_print_host_address (TYPE_FIELD_VIRTUAL_BITS (type), 
 			      gdb_stdout);
       printf_filtered (")");
@@ -4526,30 +4984,28 @@ print_cplus_stuff (struct type *type, in
 			TYPE_N_BASECLASSES (type));
       puts_filtered ("\n");
     }
-  if (TYPE_NFIELDS (type) > 0)
+  if (type->num_fields () > 0)
     {
       if (TYPE_FIELD_PRIVATE_BITS (type) != NULL)
 	{
-	  printfi_filtered (spaces, 
-			    "private_field_bits (%d bits at *",
-			    TYPE_NFIELDS (type));
+	  printf_filtered ("%*sprivate_field_bits (%d bits at *",
+			   spaces, "", type->num_fields ());
 	  gdb_print_host_address (TYPE_FIELD_PRIVATE_BITS (type), 
 				  gdb_stdout);
 	  printf_filtered (")");
 	  print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
-			    TYPE_NFIELDS (type));
+			    type->num_fields ());
 	  puts_filtered ("\n");
 	}
       if (TYPE_FIELD_PROTECTED_BITS (type) != NULL)
 	{
-	  printfi_filtered (spaces, 
-			    "protected_field_bits (%d bits at *",
-			    TYPE_NFIELDS (type));
+	  printf_filtered ("%*sprotected_field_bits (%d bits at *",
+			   spaces, "", type->num_fields ());
 	  gdb_print_host_address (TYPE_FIELD_PROTECTED_BITS (type), 
 				  gdb_stdout);
 	  printf_filtered (")");
 	  print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
-			    TYPE_NFIELDS (type));
+			    type->num_fields ());
 	  puts_filtered ("\n");
 	}
     }
@@ -4557,6 +5013,9 @@ print_cplus_stuff (struct type *type, in
     {
       dump_fn_fieldlists (type, spaces);
     }
+
+  printf_filtered ("%*scalling_convention %d\n", spaces, "",
+		   TYPE_CPLUS_CALLING_CONVENTION (type));
 }
 
 /* Print the contents of the TYPE's type_specific union, assuming that
@@ -4568,16 +5027,49 @@ print_gnat_stuff (struct type *type, int
   struct type *descriptive_type = TYPE_DESCRIPTIVE_TYPE (type);
 
   if (descriptive_type == NULL)
-    printfi_filtered (spaces + 2, "no descriptive type\n");
+    printf_filtered ("%*sno descriptive type\n", spaces + 2, "");
   else
     {
-      printfi_filtered (spaces + 2, "descriptive type\n");
+      printf_filtered ("%*sdescriptive type\n", spaces + 2, "");
       recursive_dump_type (descriptive_type, spaces + 4);
     }
 }
 
+/* Print the contents of the TYPE's type_specific union, assuming that
+   its type-specific kind is TYPE_SPECIFIC_FIXED_POINT.  */
+
+static void
+print_fixed_point_type_info (struct type *type, int spaces)
+{
+  printf_filtered ("%*sscaling factor: %s\n", spaces + 2, "",
+		   type->fixed_point_scaling_factor ().str ().c_str ());
+}
+
 static struct obstack dont_print_type_obstack;
 
+/* Print the dynamic_prop PROP.  */
+
+static void
+dump_dynamic_prop (dynamic_prop const& prop)
+{
+  switch (prop.kind ())
+    {
+    case PROP_CONST:
+      printf_filtered ("%s", plongest (prop.const_val ()));
+      break;
+    case PROP_UNDEFINED:
+      printf_filtered ("(undefined)");
+      break;
+    case PROP_LOCEXPR:
+    case PROP_LOCLIST:
+      printf_filtered ("(dynamic)");
+      break;
+    default:
+      gdb_assert_not_reached ("unhandled prop kind");
+      break;
+    }
+}
+
 void
 recursive_dump_type (struct type *type, int spaces)
 {
@@ -4586,7 +5078,7 @@ recursive_dump_type (struct type *type,
   if (spaces == 0)
     obstack_begin (&dont_print_type_obstack, 0);
 
-  if (TYPE_NFIELDS (type) > 0
+  if (type->num_fields () > 0
       || (HAVE_CPLUS_STRUCT (type) && TYPE_NFN_FIELDS (type) > 0))
     {
       struct type **first_dont_print
@@ -4599,7 +5091,7 @@ recursive_dump_type (struct type *type,
 	{
 	  if (type == first_dont_print[i])
 	    {
-	      printfi_filtered (spaces, "type node ");
+	      printf_filtered ("%*stype node ", spaces, "");
 	      gdb_print_host_address (type, gdb_stdout);
 	      printf_filtered (_(" <same as already seen type>\n"));
 	      return;
@@ -4609,15 +5101,15 @@ recursive_dump_type (struct type *type,
       obstack_ptr_grow (&dont_print_type_obstack, type);
     }
 
-  printfi_filtered (spaces, "type node ");
+  printf_filtered ("%*stype node ", spaces, "");
   gdb_print_host_address (type, gdb_stdout);
   printf_filtered ("\n");
-  printfi_filtered (spaces, "name '%s' (",
-		    TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
-  gdb_print_host_address (TYPE_NAME (type), gdb_stdout);
+  printf_filtered ("%*sname '%s' (", spaces, "",
+		   type->name () ? type->name () : "<NULL>");
+  gdb_print_host_address (type->name (), gdb_stdout);
   printf_filtered (")\n");
-  printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
-  switch (TYPE_CODE (type))
+  printf_filtered ("%*scode 0x%x ", spaces, "", type->code ());
+  switch (type->code ())
     {
     case TYPE_CODE_UNDEF:
       printf_filtered ("(TYPE_CODE_UNDEF)");
@@ -4691,41 +5183,45 @@ recursive_dump_type (struct type *type,
     case TYPE_CODE_NAMESPACE:
       printf_filtered ("(TYPE_CODE_NAMESPACE)");
       break;
+    case TYPE_CODE_FIXED_POINT:
+      printf_filtered ("(TYPE_CODE_FIXED_POINT)");
+      break;
     default:
       printf_filtered ("(UNKNOWN TYPE CODE)");
       break;
     }
   puts_filtered ("\n");
-  printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type)));
-  if (TYPE_OBJFILE_OWNED (type))
+  printf_filtered ("%*slength %s\n", spaces, "",
+		   pulongest (TYPE_LENGTH (type)));
+  if (type->is_objfile_owned ())
     {
-      printfi_filtered (spaces, "objfile ");
-      gdb_print_host_address (TYPE_OWNER (type).objfile, gdb_stdout);
+      printf_filtered ("%*sobjfile ", spaces, "");
+      gdb_print_host_address (type->objfile_owner (), gdb_stdout);
     }
   else
     {
-      printfi_filtered (spaces, "gdbarch ");
-      gdb_print_host_address (TYPE_OWNER (type).gdbarch, gdb_stdout);
+      printf_filtered ("%*sgdbarch ", spaces, "");
+      gdb_print_host_address (type->arch_owner (), gdb_stdout);
     }
   printf_filtered ("\n");
-  printfi_filtered (spaces, "target_type ");
+  printf_filtered ("%*starget_type ", spaces, "");
   gdb_print_host_address (TYPE_TARGET_TYPE (type), gdb_stdout);
   printf_filtered ("\n");
   if (TYPE_TARGET_TYPE (type) != NULL)
     {
       recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
     }
-  printfi_filtered (spaces, "pointer_type ");
+  printf_filtered ("%*spointer_type ", spaces, "");
   gdb_print_host_address (TYPE_POINTER_TYPE (type), gdb_stdout);
   printf_filtered ("\n");
-  printfi_filtered (spaces, "reference_type ");
+  printf_filtered ("%*sreference_type ", spaces, "");
   gdb_print_host_address (TYPE_REFERENCE_TYPE (type), gdb_stdout);
   printf_filtered ("\n");
-  printfi_filtered (spaces, "type_chain ");
+  printf_filtered ("%*stype_chain ", spaces, "");
   gdb_print_host_address (TYPE_CHAIN (type), gdb_stdout);
   printf_filtered ("\n");
-  printfi_filtered (spaces, "instance_flags 0x%x", 
-		    TYPE_INSTANCE_FLAGS (type));
+  printf_filtered ("%*sinstance_flags 0x%x", spaces, "", 
+		   (unsigned) type->instance_flags ());
   if (TYPE_CONST (type))
     {
       puts_filtered (" TYPE_CONST");
@@ -4760,51 +5256,47 @@ recursive_dump_type (struct type *type,
     }
   puts_filtered ("\n");
 
-  printfi_filtered (spaces, "flags");
-  if (TYPE_UNSIGNED (type))
+  printf_filtered ("%*sflags", spaces, "");
+  if (type->is_unsigned ())
     {
       puts_filtered (" TYPE_UNSIGNED");
     }
-  if (TYPE_NOSIGN (type))
+  if (type->has_no_signedness ())
     {
       puts_filtered (" TYPE_NOSIGN");
     }
-  if (TYPE_ENDIANITY_NOT_DEFAULT (type))
+  if (type->endianity_is_not_default ())
     {
       puts_filtered (" TYPE_ENDIANITY_NOT_DEFAULT");
     }
-  if (TYPE_STUB (type))
+  if (type->is_stub ())
     {
       puts_filtered (" TYPE_STUB");
     }
-  if (TYPE_TARGET_STUB (type))
+  if (type->target_is_stub ())
     {
       puts_filtered (" TYPE_TARGET_STUB");
     }
-  if (TYPE_PROTOTYPED (type))
+  if (type->is_prototyped ())
     {
       puts_filtered (" TYPE_PROTOTYPED");
     }
-  if (TYPE_INCOMPLETE (type))
-    {
-      puts_filtered (" TYPE_INCOMPLETE");
-    }
-  if (TYPE_VARARGS (type))
+  if (type->has_varargs ())
     {
       puts_filtered (" TYPE_VARARGS");
     }
   /* This is used for things like AltiVec registers on ppc.  Gcc emits
      an attribute for the array type, which tells whether or not we
      have a vector, instead of a regular array.  */
-  if (TYPE_VECTOR (type))
+  if (type->is_vector ())
     {
       puts_filtered (" TYPE_VECTOR");
     }
-  if (TYPE_FIXED_INSTANCE (type))
+  if (type->is_fixed_instance ())
     {
       puts_filtered (" TYPE_FIXED_INSTANCE");
     }
-  if (TYPE_STUB_SUPPORTED (type))
+  if (type->stub_is_supported ())
     {
       puts_filtered (" TYPE_STUB_SUPPORTED");
     }
@@ -4813,46 +5305,61 @@ recursive_dump_type (struct type *type,
       puts_filtered (" TYPE_NOTTEXT");
     }
   puts_filtered ("\n");
-  printfi_filtered (spaces, "nfields %d ", TYPE_NFIELDS (type));
-  gdb_print_host_address (TYPE_FIELDS (type), gdb_stdout);
+  printf_filtered ("%*snfields %d ", spaces, "", type->num_fields ());
+  if (TYPE_ASSOCIATED_PROP (type) != nullptr
+      || TYPE_ALLOCATED_PROP (type) != nullptr)
+    {
+      printf_filtered ("%*s", spaces, "");
+      if (TYPE_ASSOCIATED_PROP (type) != nullptr)
+	{
+	  printf_filtered ("associated ");
+	  dump_dynamic_prop (*TYPE_ASSOCIATED_PROP (type));
+	}
+      if (TYPE_ALLOCATED_PROP (type) != nullptr)
+	{
+	  if (TYPE_ASSOCIATED_PROP (type) != nullptr)
+	    printf_filtered ("  ");
+	  printf_filtered ("allocated ");
+	  dump_dynamic_prop (*TYPE_ALLOCATED_PROP (type));
+	}
+      printf_filtered ("\n");
+    }
+  gdb_print_host_address (type->fields (), gdb_stdout);
   puts_filtered ("\n");
-  for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
+  for (idx = 0; idx < type->num_fields (); idx++)
     {
-      if (TYPE_CODE (type) == TYPE_CODE_ENUM)
-	printfi_filtered (spaces + 2,
-			  "[%d] enumval %s type ",
-			  idx, plongest (TYPE_FIELD_ENUMVAL (type, idx)));
+      if (type->code () == TYPE_CODE_ENUM)
+	printf_filtered ("%*s[%d] enumval %s type ", spaces + 2, "",
+			 idx, plongest (TYPE_FIELD_ENUMVAL (type, idx)));
       else
-	printfi_filtered (spaces + 2,
-			  "[%d] bitpos %s bitsize %d type ",
-			  idx, plongest (TYPE_FIELD_BITPOS (type, idx)),
-			  TYPE_FIELD_BITSIZE (type, idx));
-      gdb_print_host_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout);
+	printf_filtered ("%*s[%d] bitpos %s bitsize %d type ", spaces + 2, "",
+			 idx, plongest (TYPE_FIELD_BITPOS (type, idx)),
+			 TYPE_FIELD_BITSIZE (type, idx));
+      gdb_print_host_address (type->field (idx).type (), gdb_stdout);
       printf_filtered (" name '%s' (",
 		       TYPE_FIELD_NAME (type, idx) != NULL
 		       ? TYPE_FIELD_NAME (type, idx)
 		       : "<NULL>");
       gdb_print_host_address (TYPE_FIELD_NAME (type, idx), gdb_stdout);
       printf_filtered (")\n");
-      if (TYPE_FIELD_TYPE (type, idx) != NULL)
+      if (type->field (idx).type () != NULL)
 	{
-	  recursive_dump_type (TYPE_FIELD_TYPE (type, idx), spaces + 4);
+	  recursive_dump_type (type->field (idx).type (), spaces + 4);
 	}
     }
-  if (TYPE_CODE (type) == TYPE_CODE_RANGE)
+  if (type->code () == TYPE_CODE_RANGE)
     {
-      printfi_filtered (spaces, "low %s%s  high %s%s\n",
-			plongest (TYPE_LOW_BOUND (type)), 
-			TYPE_LOW_BOUND_UNDEFINED (type) ? " (undefined)" : "",
-			plongest (TYPE_HIGH_BOUND (type)),
-			TYPE_HIGH_BOUND_UNDEFINED (type) 
-			? " (undefined)" : "");
+      printf_filtered ("%*slow ", spaces, "");
+      dump_dynamic_prop (type->bounds ()->low);
+      printf_filtered ("  high ");
+      dump_dynamic_prop (type->bounds ()->high);
+      printf_filtered ("\n");
     }
 
   switch (TYPE_SPECIFIC_FIELD (type))
     {
       case TYPE_SPECIFIC_CPLUS_STUFF:
-	printfi_filtered (spaces, "cplus_stuff ");
+	printf_filtered ("%*scplus_stuff ", spaces, "");
 	gdb_print_host_address (TYPE_CPLUS_SPECIFIC (type), 
 				gdb_stdout);
 	puts_filtered ("\n");
@@ -4860,14 +5367,14 @@ recursive_dump_type (struct type *type,
 	break;
 
       case TYPE_SPECIFIC_GNAT_STUFF:
-	printfi_filtered (spaces, "gnat_stuff ");
+	printf_filtered ("%*sgnat_stuff ", spaces, "");
 	gdb_print_host_address (TYPE_GNAT_SPECIFIC (type), gdb_stdout);
 	puts_filtered ("\n");
 	print_gnat_stuff (type, spaces);
 	break;
 
       case TYPE_SPECIFIC_FLOATFORMAT:
-	printfi_filtered (spaces, "floatformat ");
+	printf_filtered ("%*sfloatformat ", spaces, "");
 	if (TYPE_FLOATFORMAT (type) == NULL
 	    || TYPE_FLOATFORMAT (type)->name == NULL)
 	  puts_filtered ("(null)");
@@ -4877,16 +5384,32 @@ recursive_dump_type (struct type *type,
 	break;
 
       case TYPE_SPECIFIC_FUNC:
-	printfi_filtered (spaces, "calling_convention %d\n",
-                          TYPE_CALLING_CONVENTION (type));
+	printf_filtered ("%*scalling_convention %d\n", spaces, "",
+			 TYPE_CALLING_CONVENTION (type));
 	/* tail_call_list is not printed.  */
 	break;
 
       case TYPE_SPECIFIC_SELF_TYPE:
-	printfi_filtered (spaces, "self_type ");
+	printf_filtered ("%*sself_type ", spaces, "");
 	gdb_print_host_address (TYPE_SELF_TYPE (type), gdb_stdout);
 	puts_filtered ("\n");
 	break;
+
+      case TYPE_SPECIFIC_FIXED_POINT:
+	printf_filtered ("%*sfixed_point_info ", spaces, "");
+	print_fixed_point_type_info (type, spaces);
+	puts_filtered ("\n");
+	break;
+
+    case TYPE_SPECIFIC_INT:
+      if (type->bit_size_differs_p ())
+	{
+	  unsigned bit_size = type->bit_size ();
+	  unsigned bit_off = type->bit_offset ();
+	  printf_filtered ("%*s bit size = %u, bit offset = %u\n", spaces, "",
+			   bit_size, bit_off);
+	}
+      break;
     }
 
   if (spaces == 0)
@@ -4926,13 +5449,13 @@ type_pair_eq (const void *item_lhs, cons
    types without duplicates.  We use OBJFILE's obstack, because
    OBJFILE is about to be deleted.  */
 
-htab_t
+htab_up
 create_copied_types_hash (struct objfile *objfile)
 {
-  return htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
-			       NULL, &objfile->objfile_obstack,
-			       hashtab_obstack_allocate,
-			       dummy_obstack_deallocate);
+  return htab_up (htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
+					NULL, &objfile->objfile_obstack,
+					hashtab_obstack_allocate,
+					dummy_obstack_deallocate));
 }
 
 /* Recursively copy (deep copy) a dynamic attribute list of a type.  */
@@ -4973,12 +5496,12 @@ copy_type_recursive (struct objfile *obj
   void **slot;
   struct type *new_type;
 
-  if (! TYPE_OBJFILE_OWNED (type))
+  if (!type->is_objfile_owned ())
     return type;
 
   /* This type shouldn't be pointing to any types in other objfiles;
      if it did, the type might disappear unexpectedly.  */
-  gdb_assert (TYPE_OBJFILE (type) == objfile);
+  gdb_assert (type->objfile_owner () == objfile);
 
   struct type_pair pair (type, nullptr);
 
@@ -4986,7 +5509,7 @@ copy_type_recursive (struct objfile *obj
   if (*slot != NULL)
     return ((struct type_pair *) *slot)->newobj;
 
-  new_type = alloc_type_arch (get_type_arch (type));
+  new_type = alloc_type_arch (type->arch ());
 
   /* We must add the new type to the hash table immediately, in case
      we encounter this type again during a recursive call below.  */
@@ -4998,51 +5521,53 @@ copy_type_recursive (struct objfile *obj
   /* Copy the common fields of types.  For the main type, we simply
      copy the entire thing and then update specific fields as needed.  */
   *TYPE_MAIN_TYPE (new_type) = *TYPE_MAIN_TYPE (type);
-  TYPE_OBJFILE_OWNED (new_type) = 0;
-  TYPE_OWNER (new_type).gdbarch = get_type_arch (type);
 
-  if (TYPE_NAME (type))
-    TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type));
+  new_type->set_owner (type->arch ());
+
+  if (type->name ())
+    new_type->set_name (xstrdup (type->name ()));
 
-  TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
+  new_type->set_instance_flags (type->instance_flags ());
   TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
 
   /* Copy the fields.  */
-  if (TYPE_NFIELDS (type))
+  if (type->num_fields ())
     {
       int i, nfields;
 
-      nfields = TYPE_NFIELDS (type);
-      TYPE_FIELDS (new_type) = (struct field *)
-        TYPE_ZALLOC (new_type, nfields * sizeof (struct field));
+      nfields = type->num_fields ();
+      new_type->set_fields
+	((struct field *)
+	 TYPE_ZALLOC (new_type, nfields * sizeof (struct field)));
+
       for (i = 0; i < nfields; i++)
 	{
 	  TYPE_FIELD_ARTIFICIAL (new_type, i) = 
 	    TYPE_FIELD_ARTIFICIAL (type, i);
 	  TYPE_FIELD_BITSIZE (new_type, i) = TYPE_FIELD_BITSIZE (type, i);
-	  if (TYPE_FIELD_TYPE (type, i))
-	    TYPE_FIELD_TYPE (new_type, i)
-	      = copy_type_recursive (objfile, TYPE_FIELD_TYPE (type, i),
-				     copied_types);
+	  if (type->field (i).type ())
+	    new_type->field (i).set_type
+	      (copy_type_recursive (objfile, type->field (i).type (),
+				    copied_types));
 	  if (TYPE_FIELD_NAME (type, i))
 	    TYPE_FIELD_NAME (new_type, i) = 
 	      xstrdup (TYPE_FIELD_NAME (type, i));
 	  switch (TYPE_FIELD_LOC_KIND (type, i))
 	    {
 	    case FIELD_LOC_KIND_BITPOS:
-	      SET_FIELD_BITPOS (TYPE_FIELD (new_type, i),
+	      SET_FIELD_BITPOS (new_type->field (i),
 				TYPE_FIELD_BITPOS (type, i));
 	      break;
 	    case FIELD_LOC_KIND_ENUMVAL:
-	      SET_FIELD_ENUMVAL (TYPE_FIELD (new_type, i),
+	      SET_FIELD_ENUMVAL (new_type->field (i),
 				 TYPE_FIELD_ENUMVAL (type, i));
 	      break;
 	    case FIELD_LOC_KIND_PHYSADDR:
-	      SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i),
+	      SET_FIELD_PHYSADDR (new_type->field (i),
 				  TYPE_FIELD_STATIC_PHYSADDR (type, i));
 	      break;
 	    case FIELD_LOC_KIND_PHYSNAME:
-	      SET_FIELD_PHYSNAME (TYPE_FIELD (new_type, i),
+	      SET_FIELD_PHYSNAME (new_type->field (i),
 				  xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type,
 								       i)));
 	      break;
@@ -5055,17 +5580,20 @@ copy_type_recursive (struct objfile *obj
     }
 
   /* For range types, copy the bounds information.  */
-  if (TYPE_CODE (type) == TYPE_CODE_RANGE)
+  if (type->code () == TYPE_CODE_RANGE)
     {
-      TYPE_RANGE_DATA (new_type) = (struct range_bounds *)
-        TYPE_ALLOC (new_type, sizeof (struct range_bounds));
-      *TYPE_RANGE_DATA (new_type) = *TYPE_RANGE_DATA (type);
+      range_bounds *bounds
+	= ((struct range_bounds *) TYPE_ALLOC
+	   (new_type, sizeof (struct range_bounds)));
+
+      *bounds = *type->bounds ();
+      new_type->set_bounds (bounds);
     }
 
-  if (TYPE_DYN_PROP_LIST (type) != NULL)
-    TYPE_DYN_PROP_LIST (new_type)
+  if (type->main_type->dyn_prop_list != NULL)
+    new_type->main_type->dyn_prop_list
       = copy_dynamic_prop_list (&objfile->objfile_obstack,
-				TYPE_DYN_PROP_LIST (type));
+				type->main_type->dyn_prop_list);
 
 
   /* Copy pointers to other types.  */
@@ -5105,6 +5633,17 @@ copy_type_recursive (struct objfile *obj
 			  copy_type_recursive (objfile, TYPE_SELF_TYPE (type),
 					       copied_types));
       break;
+    case TYPE_SPECIFIC_FIXED_POINT:
+      INIT_FIXED_POINT_SPECIFIC (new_type);
+      new_type->fixed_point_info ().scaling_factor
+	= type->fixed_point_info ().scaling_factor;
+      break;
+    case TYPE_SPECIFIC_INT:
+      TYPE_SPECIFIC_FIELD (new_type) = TYPE_SPECIFIC_INT;
+      TYPE_MAIN_TYPE (new_type)->type_specific.int_stuff
+	= TYPE_MAIN_TYPE (type)->type_specific.int_stuff;
+      break;
+
     default:
       gdb_assert_not_reached ("bad type_specific_kind");
     }
@@ -5123,17 +5662,17 @@ copy_type (const struct type *type)
 {
   struct type *new_type;
 
-  gdb_assert (TYPE_OBJFILE_OWNED (type));
+  gdb_assert (type->is_objfile_owned ());
 
   new_type = alloc_type_copy (type);
-  TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
+  new_type->set_instance_flags (type->instance_flags ());
   TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
   memcpy (TYPE_MAIN_TYPE (new_type), TYPE_MAIN_TYPE (type),
 	  sizeof (struct main_type));
-  if (TYPE_DYN_PROP_LIST (type) != NULL)
-    TYPE_DYN_PROP_LIST (new_type)
-      = copy_dynamic_prop_list (&TYPE_OBJFILE (type) -> objfile_obstack,
-				TYPE_DYN_PROP_LIST (type));
+  if (type->main_type->dyn_prop_list != NULL)
+    new_type->main_type->dyn_prop_list
+      = copy_dynamic_prop_list (&type->objfile_owner ()->objfile_obstack,
+				type->main_type->dyn_prop_list);
 
   return new_type;
 }
@@ -5155,7 +5694,7 @@ arch_type (struct gdbarch *gdbarch,
   TYPE_LENGTH (type) = bit / TARGET_CHAR_BIT;
 
   if (name)
-    TYPE_NAME (type) = gdbarch_obstack_strdup (gdbarch, name);
+    type->set_name (gdbarch_obstack_strdup (gdbarch, name));
 
   return type;
 }
@@ -5172,7 +5711,7 @@ arch_integer_type (struct gdbarch *gdbar
 
   t = arch_type (gdbarch, TYPE_CODE_INT, bit, name);
   if (unsigned_p)
-    TYPE_UNSIGNED (t) = 1;
+    t->set_is_unsigned (true);
 
   return t;
 }
@@ -5189,7 +5728,7 @@ arch_character_type (struct gdbarch *gdb
 
   t = arch_type (gdbarch, TYPE_CODE_CHAR, bit, name);
   if (unsigned_p)
-    TYPE_UNSIGNED (t) = 1;
+    t->set_is_unsigned (true);
 
   return t;
 }
@@ -5206,7 +5745,7 @@ arch_boolean_type (struct gdbarch *gdbar
 
   t = arch_type (gdbarch, TYPE_CODE_BOOL, bit, name);
   if (unsigned_p)
-    TYPE_UNSIGNED (t) = 1;
+    t->set_is_unsigned (true);
 
   return t;
 }
@@ -5243,21 +5782,6 @@ arch_decfloat_type (struct gdbarch *gdba
   return t;
 }
 
-/* Allocate a TYPE_CODE_COMPLEX type structure associated with GDBARCH.
-   NAME is the type name.  TARGET_TYPE is the component float type.  */
-
-struct type *
-arch_complex_type (struct gdbarch *gdbarch,
-		   const char *name, struct type *target_type)
-{
-  struct type *t;
-
-  t = arch_type (gdbarch, TYPE_CODE_COMPLEX,
-		 2 * TYPE_LENGTH (target_type) * TARGET_CHAR_BIT, name);
-  TYPE_TARGET_TYPE (t) = target_type;
-  return t;
-}
-
 /* Allocate a TYPE_CODE_PTR type structure associated with GDBARCH.
    BIT is the pointer type size in bits.  NAME is the type name.
    TARGET_TYPE is the pointer target type.  Always sets the pointer type's
@@ -5271,7 +5795,7 @@ arch_pointer_type (struct gdbarch *gdbar
 
   t = arch_type (gdbarch, TYPE_CODE_PTR, bit, name);
   TYPE_TARGET_TYPE (t) = target_type;
-  TYPE_UNSIGNED (t) = 1;
+  t->set_is_unsigned (true);
   return t;
 }
 
@@ -5284,11 +5808,11 @@ arch_flags_type (struct gdbarch *gdbarch
   struct type *type;
 
   type = arch_type (gdbarch, TYPE_CODE_FLAGS, bit, name);
-  TYPE_UNSIGNED (type) = 1;
-  TYPE_NFIELDS (type) = 0;
+  type->set_is_unsigned (true);
+  type->set_num_fields (0);
   /* Pre-allocate enough space assuming every field is one bit.  */
-  TYPE_FIELDS (type)
-    = (struct field *) TYPE_ZALLOC (type, bit * sizeof (struct field));
+  type->set_fields
+    ((struct field *) TYPE_ZALLOC (type, bit * sizeof (struct field)));
 
   return type;
 }
@@ -5302,19 +5826,19 @@ append_flags_type_field (struct type *ty
 			 struct type *field_type, const char *name)
 {
   int type_bitsize = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
-  int field_nr = TYPE_NFIELDS (type);
+  int field_nr = type->num_fields ();
 
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLAGS);
-  gdb_assert (TYPE_NFIELDS (type) + 1 <= type_bitsize);
+  gdb_assert (type->code () == TYPE_CODE_FLAGS);
+  gdb_assert (type->num_fields () + 1 <= type_bitsize);
   gdb_assert (start_bitpos >= 0 && start_bitpos < type_bitsize);
   gdb_assert (nr_bits >= 1 && nr_bits <= type_bitsize);
   gdb_assert (name != NULL);
 
   TYPE_FIELD_NAME (type, field_nr) = xstrdup (name);
-  TYPE_FIELD_TYPE (type, field_nr) = field_type;
-  SET_FIELD_BITPOS (TYPE_FIELD (type, field_nr), start_bitpos);
+  type->field (field_nr).set_type (field_type);
+  SET_FIELD_BITPOS (type->field (field_nr), start_bitpos);
   TYPE_FIELD_BITSIZE (type, field_nr) = nr_bits;
-  ++TYPE_NFIELDS (type);
+  type->set_num_fields (type->num_fields () + 1);
 }
 
 /* Special version of append_flags_type_field to add a flag field.
@@ -5324,10 +5848,8 @@ append_flags_type_field (struct type *ty
 void
 append_flags_type_flag (struct type *type, int bitpos, const char *name)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
-
   append_flags_type_field (type, bitpos, 1,
-			   builtin_type (gdbarch)->builtin_bool,
+			   builtin_type (type->arch ())->builtin_bool,
 			   name);
 }
 
@@ -5342,7 +5864,7 @@ arch_composite_type (struct gdbarch *gdb
 
   gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
   t = arch_type (gdbarch, code, 0, NULL);
-  TYPE_NAME (t) = name;
+  t->set_name (name);
   INIT_CPLUS_SPECIFIC (t);
   return t;
 }
@@ -5357,12 +5879,12 @@ append_composite_type_field_raw (struct
 {
   struct field *f;
 
-  TYPE_NFIELDS (t) = TYPE_NFIELDS (t) + 1;
-  TYPE_FIELDS (t) = XRESIZEVEC (struct field, TYPE_FIELDS (t),
-				TYPE_NFIELDS (t));
-  f = &(TYPE_FIELDS (t)[TYPE_NFIELDS (t) - 1]);
+  t->set_num_fields (t->num_fields () + 1);
+  t->set_fields (XRESIZEVEC (struct field, t->fields (),
+			     t->num_fields ()));
+  f = &t->field (t->num_fields () - 1);
   memset (f, 0, sizeof f[0]);
-  FIELD_TYPE (f[0]) = field;
+  f[0].set_type (field);
   FIELD_NAME (f[0]) = name;
   return f;
 }
@@ -5376,19 +5898,19 @@ append_composite_type_field_aligned (str
 {
   struct field *f = append_composite_type_field_raw (t, name, field);
 
-  if (TYPE_CODE (t) == TYPE_CODE_UNION)
+  if (t->code () == TYPE_CODE_UNION)
     {
       if (TYPE_LENGTH (t) < TYPE_LENGTH (field))
 	TYPE_LENGTH (t) = TYPE_LENGTH (field);
     }
-  else if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
+  else if (t->code () == TYPE_CODE_STRUCT)
     {
       TYPE_LENGTH (t) = TYPE_LENGTH (t) + TYPE_LENGTH (field);
-      if (TYPE_NFIELDS (t) > 1)
+      if (t->num_fields () > 1)
 	{
 	  SET_FIELD_BITPOS (f[0],
 			    (FIELD_BITPOS (f[-1])
-			     + (TYPE_LENGTH (FIELD_TYPE (f[-1]))
+			     + (TYPE_LENGTH (f[-1].type ())
 				* TARGET_CHAR_BIT)));
 
 	  if (alignment)
@@ -5417,6 +5939,87 @@ append_composite_type_field (struct type
   append_composite_type_field_aligned (t, name, field, 0);
 }
 
+
+
+/* We manage the lifetimes of fixed_point_type_info objects by
+   attaching them to the objfile.  Currently, these objects are
+   modified during construction, and GMP does not provide a way to
+   hash the contents of an mpq_t; so it's a bit of a pain to hash-cons
+   them.  If we did do this, they could be moved to the per-BFD and
+   shared across objfiles.  */
+typedef std::vector<std::unique_ptr<fixed_point_type_info>>
+    fixed_point_type_storage;
+
+/* Key used for managing the storage of fixed-point type info.  */
+static const struct objfile_key<fixed_point_type_storage>
+    fixed_point_objfile_key;
+
+/* See gdbtypes.h.  */
+
+void
+allocate_fixed_point_type_info (struct type *type)
+{
+  std::unique_ptr<fixed_point_type_info> up (new fixed_point_type_info);
+  fixed_point_type_info *info;
+
+  if (type->is_objfile_owned ())
+    {
+      fixed_point_type_storage *storage
+	= fixed_point_objfile_key.get (type->objfile_owner ());
+      if (storage == nullptr)
+	storage = fixed_point_objfile_key.emplace (type->objfile_owner ());
+      info = up.get ();
+      storage->push_back (std::move (up));
+    }
+  else
+    {
+      /* We just leak the memory, because that's what we do generally
+	 for non-objfile-attached types.  */
+      info = up.release ();
+    }
+
+  type->set_fixed_point_info (info);
+}
+
+/* See gdbtypes.h.  */
+
+bool
+is_fixed_point_type (struct type *type)
+{
+  while (check_typedef (type)->code () == TYPE_CODE_RANGE)
+    type = TYPE_TARGET_TYPE (check_typedef (type));
+  type = check_typedef (type);
+
+  return type->code () == TYPE_CODE_FIXED_POINT;
+}
+
+/* See gdbtypes.h.  */
+
+struct type *
+type::fixed_point_type_base_type ()
+{
+  struct type *type = this;
+
+  while (check_typedef (type)->code () == TYPE_CODE_RANGE)
+    type = TYPE_TARGET_TYPE (check_typedef (type));
+  type = check_typedef (type);
+
+  gdb_assert (type->code () == TYPE_CODE_FIXED_POINT);
+  return type;
+}
+
+/* See gdbtypes.h.  */
+
+const gdb_mpq &
+type::fixed_point_scaling_factor ()
+{
+  struct type *type = this->fixed_point_type_base_type ();
+
+  return type->fixed_point_info ().scaling_factor;
+}
+
+
+
 static struct gdbarch_data *gdbtypes_data;
 
 const struct builtin_type *
@@ -5437,7 +6040,7 @@ gdbtypes_post_init (struct gdbarch *gdba
   builtin_type->builtin_char
     = arch_integer_type (gdbarch, TARGET_CHAR_BIT,
 			 !gdbarch_char_signed (gdbarch), "char");
-  TYPE_NOSIGN (builtin_type->builtin_char) = 1;
+  builtin_type->builtin_char->set_has_no_signedness (true);
   builtin_type->builtin_signed_char
     = arch_integer_type (gdbarch, TARGET_CHAR_BIT,
 			 0, "signed char");
@@ -5474,6 +6077,9 @@ gdbtypes_post_init (struct gdbarch *gdba
   builtin_type->builtin_float
     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
 		       "float", gdbarch_float_format (gdbarch));
+  builtin_type->builtin_bfloat16
+    = arch_float_type (gdbarch, gdbarch_bfloat16_bit (gdbarch),
+		       "bfloat16", gdbarch_bfloat16_format (gdbarch));
   builtin_type->builtin_double
     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
 		       "double", gdbarch_double_format (gdbarch));
@@ -5481,15 +6087,13 @@ gdbtypes_post_init (struct gdbarch *gdba
     = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
 		       "long double", gdbarch_long_double_format (gdbarch));
   builtin_type->builtin_complex
-    = arch_complex_type (gdbarch, "complex",
-			 builtin_type->builtin_float);
+    = init_complex_type ("complex", builtin_type->builtin_float);
   builtin_type->builtin_double_complex
-    = arch_complex_type (gdbarch, "double complex",
-			 builtin_type->builtin_double);
+    = init_complex_type ("double complex", builtin_type->builtin_double);
   builtin_type->builtin_string
     = arch_type (gdbarch, TYPE_CODE_STRING, TARGET_CHAR_BIT, "string");
   builtin_type->builtin_bool
-    = arch_type (gdbarch, TYPE_CODE_BOOL, TARGET_CHAR_BIT, "bool");
+    = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "bool");
 
   /* The following three are about decimal floating point types, which
      are 32-bits, 64-bits and 128-bits respectively.  */
@@ -5533,10 +6137,14 @@ gdbtypes_post_init (struct gdbarch *gdba
     = arch_integer_type (gdbarch, 128, 0, "int128_t");
   builtin_type->builtin_uint128
     = arch_integer_type (gdbarch, 128, 1, "uint128_t");
-  TYPE_INSTANCE_FLAGS (builtin_type->builtin_int8) |=
-    TYPE_INSTANCE_FLAG_NOTTEXT;
-  TYPE_INSTANCE_FLAGS (builtin_type->builtin_uint8) |=
-    TYPE_INSTANCE_FLAG_NOTTEXT;
+
+  builtin_type->builtin_int8->set_instance_flags
+    (builtin_type->builtin_int8->instance_flags ()
+     | TYPE_INSTANCE_FLAG_NOTTEXT);
+
+  builtin_type->builtin_uint8->set_instance_flags
+    (builtin_type->builtin_uint8->instance_flags ()
+     | TYPE_INSTANCE_FLAG_NOTTEXT);
 
   /* Wide character types.  */
   builtin_type->builtin_char16
@@ -5587,7 +6195,7 @@ objfile_type (struct objfile *objfile)
 				 1, struct objfile_type);
 
   /* Use the objfile architecture to determine basic type properties.  */
-  gdbarch = get_objfile_arch (objfile);
+  gdbarch = objfile->arch ();
 
   /* Basic types.  */
   objfile_type->builtin_void
@@ -5595,7 +6203,7 @@ objfile_type (struct objfile *objfile)
   objfile_type->builtin_char
     = init_integer_type (objfile, TARGET_CHAR_BIT,
 			 !gdbarch_char_signed (gdbarch), "char");
-  TYPE_NOSIGN (objfile_type->builtin_char) = 1;
+  objfile_type->builtin_char->set_has_no_signedness (true);
   objfile_type->builtin_signed_char
     = init_integer_type (objfile, TARGET_CHAR_BIT,
 			 0, "signed char");
@@ -5645,10 +6253,12 @@ objfile_type (struct objfile *objfile)
   objfile_type->nodebug_text_symbol
     = init_type (objfile, TYPE_CODE_FUNC, TARGET_CHAR_BIT,
 		 "<text variable, no debug info>");
+
   objfile_type->nodebug_text_gnu_ifunc_symbol
     = init_type (objfile, TYPE_CODE_FUNC, TARGET_CHAR_BIT,
 		 "<text gnu-indirect-function variable, no debug info>");
-  TYPE_GNU_IFUNC (objfile_type->nodebug_text_gnu_ifunc_symbol) = 1;
+  objfile_type->nodebug_text_gnu_ifunc_symbol->set_is_gnu_ifunc (true);
+
   objfile_type->nodebug_got_plt_symbol
     = init_pointer_type (objfile, gdbarch_addr_bit (gdbarch),
 			 "<text from jump slot in .got.plt, no debug info>",
@@ -5687,8 +6297,9 @@ objfile_type (struct objfile *objfile)
   return objfile_type;
 }
 
+void _initialize_gdbtypes ();
 void
-_initialize_gdbtypes (void)
+_initialize_gdbtypes ()
 {
   gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbtypes.h ./gdb/gdbtypes.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdbtypes.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdbtypes.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 
 /* Internal type definitions for GDB.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
@@ -46,16 +46,22 @@
 
 #include "hashtab.h"
 #include "gdbsupport/array-view.h"
+#include "gdbsupport/gdb_optional.h"
 #include "gdbsupport/offset-type.h"
 #include "gdbsupport/enum-flags.h"
 #include "gdbsupport/underlying.h"
 #include "gdbsupport/print-utils.h"
+#include "dwarf2.h"
+#include "gdb_obstack.h"
+#include "gmp-utils.h"
 
 /* Forward declarations for prototypes.  */
 struct field;
 struct block;
 struct value_print_options;
 struct language_defn;
+struct dwarf2_per_cu_data;
+struct dwarf2_per_objfile;
 
 /* These declarations are DWARF-specific as some of the gdbtypes.h data types
    are already DWARF-specific.  */
@@ -119,9 +125,7 @@ enum type_code
     TYPE_CODE_FUNC,		/**< Function type */
     TYPE_CODE_INT,		/**< Integer type */
 
-    /* * Floating type.  This is *NOT* a complex type.  Beware, there
-       are parts of GDB which bogusly assume that TYPE_CODE_FLT can
-       mean complex.  */
+    /* * Floating type.  This is *NOT* a complex type.  */
     TYPE_CODE_FLT,
 
     /* * Void type.  The length field specifies the length (probably
@@ -187,7 +191,10 @@ enum type_code
     TYPE_CODE_INTERNAL_FUNCTION,
 
     /* * Methods implemented in extension languages.  */
-    TYPE_CODE_XMETHOD
+    TYPE_CODE_XMETHOD,
+
+    /* * Fixed Point type.  */
+    TYPE_CODE_FIXED_POINT,
   };
 
 /* * Some bits for the type's instance_flags word.  See the macros
@@ -208,156 +215,50 @@ enum type_instance_flag_value : unsigned
 
 DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags);
 
-/* * Unsigned integer type.  If this is not set for a TYPE_CODE_INT,
-   the type is signed (unless TYPE_NOSIGN (below) is set).  */
-
-#define TYPE_UNSIGNED(t)	(TYPE_MAIN_TYPE (t)->flag_unsigned)
-
-/* * No sign for this type.  In C++, "char", "signed char", and
-   "unsigned char" are distinct types; so we need an extra flag to
-   indicate the absence of a sign!  */
-
-#define TYPE_NOSIGN(t)		(TYPE_MAIN_TYPE (t)->flag_nosign)
-
-/* * A compiler may supply dwarf instrumentation
-   that indicates the desired endian interpretation of the variable
-   differs from the native endian representation. */
-
-#define TYPE_ENDIANITY_NOT_DEFAULT(t) (TYPE_MAIN_TYPE (t)->flag_endianity_not_default)
-
-/* * This appears in a type's flags word if it is a stub type (e.g.,
-   if someone referenced a type that wasn't defined in a source file
-   via (struct sir_not_appearing_in_this_film *)).  */
-
-#define TYPE_STUB(t)		(TYPE_MAIN_TYPE (t)->flag_stub)
-
-/* * The target type of this type is a stub type, and this type needs
-   to be updated if it gets un-stubbed in check_typedef.  Used for
-   arrays and ranges, in which TYPE_LENGTH of the array/range gets set
-   based on the TYPE_LENGTH of the target type.  Also, set for
-   TYPE_CODE_TYPEDEF.  */
-
-#define TYPE_TARGET_STUB(t)	(TYPE_MAIN_TYPE (t)->flag_target_stub)
-
-/* * This is a function type which appears to have a prototype.  We
-   need this for function calls in order to tell us if it's necessary
-   to coerce the args, or to just do the standard conversions.  This
-   is used with a short field.  */
-
-#define TYPE_PROTOTYPED(t)	(TYPE_MAIN_TYPE (t)->flag_prototyped)
-
-/* * This flag is used to indicate that processing for this type
-   is incomplete.
-
-   (Mostly intended for HP platforms, where class methods, for
-   instance, can be encountered before their classes in the debug
-   info; the incomplete type has to be marked so that the class and
-   the method can be assigned correct types.)  */
-
-#define TYPE_INCOMPLETE(t)	(TYPE_MAIN_TYPE (t)->flag_incomplete)
-
-/* * FIXME drow/2002-06-03:  Only used for methods, but applies as well
-   to functions.  */
-
-#define TYPE_VARARGS(t)		(TYPE_MAIN_TYPE (t)->flag_varargs)
-
-/* * Identify a vector type.  Gcc is handling this by adding an extra
-   attribute to the array type.  We slurp that in as a new flag of a
-   type.  This is used only in dwarf2read.c.  */
-#define TYPE_VECTOR(t)		(TYPE_MAIN_TYPE (t)->flag_vector)
-
-/* * The debugging formats (especially STABS) do not contain enough
-   information to represent all Ada types---especially those whose
-   size depends on dynamic quantities.  Therefore, the GNAT Ada
-   compiler includes extra information in the form of additional type
-   definitions connected by naming conventions.  This flag indicates
-   that the type is an ordinary (unencoded) GDB type that has been
-   created from the necessary run-time information, and does not need
-   further interpretation.  Optionally marks ordinary, fixed-size GDB
-   type.  */
-
-#define TYPE_FIXED_INSTANCE(t) (TYPE_MAIN_TYPE (t)->flag_fixed_instance)
-
-/* * This debug target supports TYPE_STUB(t).  In the unsupported case
-   we have to rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE().
-   TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only
-   guessed the TYPE_STUB(t) value (see dwarfread.c).  */
-
-#define TYPE_STUB_SUPPORTED(t)   (TYPE_MAIN_TYPE (t)->flag_stub_supported)
-
 /* * Not textual.  By default, GDB treats all single byte integers as
    characters (or elements of strings) unless this flag is set.  */
 
-#define TYPE_NOTTEXT(t)	(TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_NOTTEXT)
-
-/* * Used only for TYPE_CODE_FUNC where it specifies the real function
-   address is returned by this function call.  TYPE_TARGET_TYPE
-   determines the final returned function type to be presented to
-   user.  */
-
-#define TYPE_GNU_IFUNC(t)	(TYPE_MAIN_TYPE (t)->flag_gnu_ifunc)
-
-/* * Type owner.  If TYPE_OBJFILE_OWNED is true, the type is owned by
-   the objfile retrieved as TYPE_OBJFILE.  Otherwise, the type is
-   owned by an architecture; TYPE_OBJFILE is NULL in this case.  */
-
-#define TYPE_OBJFILE_OWNED(t) (TYPE_MAIN_TYPE (t)->flag_objfile_owned)
-#define TYPE_OWNER(t) TYPE_MAIN_TYPE(t)->owner
-#define TYPE_OBJFILE(t) (TYPE_OBJFILE_OWNED(t)? TYPE_OWNER(t).objfile : NULL)
-
-/* * True if this type was declared using the "class" keyword.  This is
-   only valid for C++ structure and enum types.  If false, a structure
-   was declared as a "struct"; if true it was declared "class".  For
-   enum types, this is true when "enum class" or "enum struct" was
-   used to declare the type..  */
-
-#define TYPE_DECLARED_CLASS(t) (TYPE_MAIN_TYPE (t)->flag_declared_class)
-
-/* * True if this type is a "flag" enum.  A flag enum is one where all
-   the values are pairwise disjoint when "and"ed together.  This
-   affects how enum values are printed.  */
-
-#define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum)
-
-/* * True if this type is a discriminated union type.  Only valid for
-   TYPE_CODE_UNION.  A discriminated union stores a reference to the
-   discriminant field along with the discriminator values in a dynamic
-   property.  */
-
-#define TYPE_FLAG_DISCRIMINATED_UNION(t) \
-  (TYPE_MAIN_TYPE (t)->flag_discriminated_union)
+#define TYPE_NOTTEXT(t)	(((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_NOTTEXT)
 
 /* * Constant type.  If this is set, the corresponding type has a
    const modifier.  */
 
-#define TYPE_CONST(t) ((TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_CONST) != 0)
+#define TYPE_CONST(t) ((((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_CONST) != 0)
 
 /* * Volatile type.  If this is set, the corresponding type has a
    volatile modifier.  */
 
 #define TYPE_VOLATILE(t) \
-  ((TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_VOLATILE) != 0)
+  ((((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_VOLATILE) != 0)
 
 /* * Restrict type.  If this is set, the corresponding type has a
    restrict modifier.  */
 
 #define TYPE_RESTRICT(t) \
-  ((TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_RESTRICT) != 0)
+  ((((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_RESTRICT) != 0)
 
 /* * Atomic type.  If this is set, the corresponding type has an
    _Atomic modifier.  */
 
 #define TYPE_ATOMIC(t) \
-  ((TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_ATOMIC) != 0)
+  ((((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_ATOMIC) != 0)
 
 /* * True if this type represents either an lvalue or lvalue reference type.  */
 
 #define TYPE_IS_REFERENCE(t) \
-  (TYPE_CODE (t) == TYPE_CODE_REF || TYPE_CODE (t) == TYPE_CODE_RVALUE_REF)
+  ((t)->code () == TYPE_CODE_REF || (t)->code () == TYPE_CODE_RVALUE_REF)
 
 /* * True if this type is allocatable.  */
 #define TYPE_IS_ALLOCATABLE(t) \
-  (get_dyn_prop (DYN_PROP_ALLOCATED, t) != NULL)
+  ((t)->dyn_prop (DYN_PROP_ALLOCATED) != NULL)
+
+/* * True if this type has variant parts.  */
+#define TYPE_HAS_VARIANT_PARTS(t) \
+  ((t)->dyn_prop (DYN_PROP_VARIANT_PARTS) != nullptr)
+
+/* * True if this type has a dynamic length.  */
+#define TYPE_HAS_DYNAMIC_LENGTH(t) \
+  ((t)->dyn_prop (DYN_PROP_BYTE_SIZE) != nullptr)
 
 /* * Instruction-space delimited type.  This is for Harvard architectures
    which have separate instruction and data address spaces (and perhaps
@@ -379,10 +280,10 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_
    is instruction space, and for data objects is data memory.  */
 
 #define TYPE_CODE_SPACE(t) \
-  ((TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_CODE_SPACE) != 0)
+  ((((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_CODE_SPACE) != 0)
 
 #define TYPE_DATA_SPACE(t) \
-  ((TYPE_INSTANCE_FLAGS (t) & TYPE_INSTANCE_FLAG_DATA_SPACE) != 0)
+  ((((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_DATA_SPACE) != 0)
 
 /* * Address class flags.  Some environments provide for pointers
    whose size is different from that of a normal pointer or address
@@ -391,55 +292,103 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_
    target specific ways to represent these different types of address
    classes.  */
 
-#define TYPE_ADDRESS_CLASS_1(t) (TYPE_INSTANCE_FLAGS(t) \
-                                 & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
-#define TYPE_ADDRESS_CLASS_2(t) (TYPE_INSTANCE_FLAGS(t) \
+#define TYPE_ADDRESS_CLASS_1(t) (((t)->instance_flags ()) \
+				 & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
+#define TYPE_ADDRESS_CLASS_2(t) (((t)->instance_flags ()) \
 				 & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2)
 #define TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL \
   (TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2)
-#define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \
+#define TYPE_ADDRESS_CLASS_ALL(t) (((t)->instance_flags ()) \
 				   & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
 
-/* * Information needed for a discriminated union.  A discriminated
-   union is handled somewhat differently from an ordinary union.
+/* * Information about a single discriminant.  */
 
-   One field is designated as the discriminant.  Only one other field
-   is active at a time; which one depends on the value of the
-   discriminant and the data in this structure.
-
-   Additionally, it is possible to have a univariant discriminated
-   union.  In this case, the union has just a single field, which is
-   assumed to be the only active variant -- in this case no
-   discriminant is provided.  */
-
-struct discriminant_info
+struct discriminant_range
 {
-  /* * The index of the discriminant field.  If -1, then this union
-     must have just a single field.  */
-
-  int discriminant_index;
+  /* * The range of values for the variant.  This is an inclusive
+     range.  */
+  ULONGEST low, high;
+
+  /* * Return true if VALUE is contained in this range.  IS_UNSIGNED
+     is true if this should be an unsigned comparison; false for
+     signed.  */
+  bool contains (ULONGEST value, bool is_unsigned) const
+  {
+    if (is_unsigned)
+      return value >= low && value <= high;
+    LONGEST valuel = (LONGEST) value;
+    return valuel >= (LONGEST) low && valuel <= (LONGEST) high;
+  }
+};
+
+struct variant_part;
+
+/* * A single variant.  A variant has a list of discriminant values.
+   When the discriminator matches one of these, the variant is
+   enabled.  Each variant controls zero or more fields; and may also
+   control other variant parts as well.  This struct corresponds to
+   DW_TAG_variant in DWARF.  */
+
+struct variant : allocate_on_obstack
+{
+  /* * The discriminant ranges for this variant.  */
+  gdb::array_view<discriminant_range> discriminants;
+
+  /* * The fields controlled by this variant.  This is inclusive on
+     the low end and exclusive on the high end.  A variant may not
+     control any fields, in which case the two values will be equal.
+     These are indexes into the type's array of fields.  */
+  int first_field;
+  int last_field;
+
+  /* * Variant parts controlled by this variant.  */
+  gdb::array_view<variant_part> parts;
+
+  /* * Return true if this is the default variant.  The default
+     variant can be recognized because it has no associated
+     discriminants.  */
+  bool is_default () const
+  {
+    return discriminants.empty ();
+  }
 
-  /* * The index of the default branch of the union.  If -1, then
-     there is no default branch.  */
+  /* * Return true if this variant matches VALUE.  IS_UNSIGNED is true
+     if this should be an unsigned comparison; false for signed.  */
+  bool matches (ULONGEST value, bool is_unsigned) const;
+};
 
-  int default_index;
+/* * A variant part.  Each variant part has an optional discriminant
+   and holds an array of variants.  This struct corresponds to
+   DW_TAG_variant_part in DWARF.  */
 
-  /* * The discriminant values corresponding to each branch.  This has
-     a number of entries equal to the number of fields in this union.
-     If discriminant_index is not -1, then that entry in this array is
-     not used.  If default_index is not -1, then that entry in this
-     array is not used.  */
+struct variant_part : allocate_on_obstack
+{
+  /* * The index of the discriminant field in the outer type.  This is
+     an index into the type's array of fields.  If this is -1, there
+     is no discriminant, and only the default variant can be
+     considered to be selected.  */
+  int discriminant_index;
 
-  ULONGEST discriminants[1];
+  /* * True if this discriminant is unsigned; false if signed.  This
+     comes from the type of the discriminant.  */
+  bool is_unsigned;
+
+  /* * The variants that are controlled by this variant part.  Note
+     that these will always be sorted by field number.  */
+  gdb::array_view<variant> variants;
 };
 
+
 enum dynamic_prop_kind
 {
   PROP_UNDEFINED, /* Not defined.  */
   PROP_CONST,     /* Constant.  */
   PROP_ADDR_OFFSET, /* Address offset.  */
   PROP_LOCEXPR,   /* Location expression.  */
-  PROP_LOCLIST    /* Location list.  */
+  PROP_LOCLIST,    /* Location list.  */
+  PROP_VARIANT_PARTS, /* Variant parts.  */
+  PROP_TYPE,	   /* Type.  */
+  PROP_VARIABLE_NAME, /* Variable name.  */
 };
 
 union dynamic_prop_data
@@ -451,17 +400,129 @@ union dynamic_prop_data
   /* Storage for dynamic property.  */
 
   void *baton;
+
+  /* Storage of variant parts for a type.  A type with variant parts
+     has all its fields "linearized" -- stored in a single field
+     array, just as if they had all been declared that way.  The
+     variant parts are attached via a dynamic property, and then are
+     used to control which fields end up in the final type during
+     dynamic type resolution.  */
+
+  const gdb::array_view<variant_part> *variant_parts;
+
+  /* Once a variant type is resolved, we may want to be able to go
+     from the resolved type to the original type.  In this case we
+     rewrite the property's kind and set this field.  */
+
+  struct type *original_type;
+
+  /* Name of a variable to look up; the variable holds the value of
+     this property.  */
+
+  const char *variable_name;
 };
 
 /* * Used to store a dynamic property.  */
 
 struct dynamic_prop
 {
+  dynamic_prop_kind kind () const
+  {
+    return m_kind;
+  }
+
+  void set_undefined ()
+  {
+    m_kind = PROP_UNDEFINED;
+  }
+
+  LONGEST const_val () const
+  {
+    gdb_assert (m_kind == PROP_CONST);
+
+    return m_data.const_val;
+  }
+
+  void set_const_val (LONGEST const_val)
+  {
+    m_kind = PROP_CONST;
+    m_data.const_val = const_val;
+  }
+
+  void *baton () const
+  {
+    gdb_assert (m_kind == PROP_LOCEXPR
+		|| m_kind == PROP_LOCLIST
+		|| m_kind == PROP_ADDR_OFFSET);
+
+    return m_data.baton;
+  }
+
+  void set_locexpr (void *baton)
+  {
+    m_kind = PROP_LOCEXPR;
+    m_data.baton = baton;
+  }
+
+  void set_loclist (void *baton)
+  {
+    m_kind = PROP_LOCLIST;
+    m_data.baton = baton;
+  }
+
+  void set_addr_offset (void *baton)
+  {
+    m_kind = PROP_ADDR_OFFSET;
+    m_data.baton = baton;
+  }
+
+  const gdb::array_view<variant_part> *variant_parts () const
+  {
+    gdb_assert (m_kind == PROP_VARIANT_PARTS);
+
+    return m_data.variant_parts;
+  }
+
+  void set_variant_parts (gdb::array_view<variant_part> *variant_parts)
+  {
+    m_kind = PROP_VARIANT_PARTS;
+    m_data.variant_parts = variant_parts;
+  }
+
+  struct type *original_type () const
+  {
+    gdb_assert (m_kind == PROP_TYPE);
+
+    return m_data.original_type;
+  }
+
+  void set_original_type (struct type *original_type)
+  {
+    m_kind = PROP_TYPE;
+    m_data.original_type = original_type;
+  }
+
+  /* Return the name of the variable that holds this property's value.
+     Only valid for PROP_VARIABLE_NAME.  */
+  const char *variable_name () const
+  {
+    gdb_assert (m_kind == PROP_VARIABLE_NAME);
+    return m_data.variable_name;
+  }
+
+  /* Set the name of the variable that holds this property's value,
+     and set this property to be of kind PROP_VARIABLE_NAME.  */
+  void set_variable_name (const char *name)
+  {
+    m_kind = PROP_VARIABLE_NAME;
+    m_data.variable_name = name;
+  }
+
   /* Determine which field of the union dynamic_prop.data is used.  */
-  enum dynamic_prop_kind kind;
+  enum dynamic_prop_kind m_kind;
 
   /* Storage for dynamic or static value.  */
-  union dynamic_prop_data data;
+  union dynamic_prop_data m_data;
 };
 
 /* Compare two dynamic_prop objects for equality.  dynamic_prop
@@ -485,15 +546,18 @@ enum dynamic_prop_node_kind
      indicates that the object of the type can be allocated/deallocated.  */
   DYN_PROP_ALLOCATED,
 
-  /* A property representing DW_AT_allocated.  The presence of this attribute
+  /* A property representing DW_AT_associated.  The presence of this attribute
      indicated that the object of the type can be associated.  */
   DYN_PROP_ASSOCIATED,
 
   /* A property providing an array's byte stride.  */
   DYN_PROP_BYTE_STRIDE,
 
-  /* A property holding information about a discriminated union.  */
-  DYN_PROP_DISCRIMINATED,
+  /* A property holding variant parts.  */
+  DYN_PROP_VARIANT_PARTS,
+
+  /* A property holding the size of the type.  */
+  DYN_PROP_BYTE_SIZE,
 };
 
 /* * List for dynamic type attributes.  */
@@ -540,7 +604,9 @@ enum type_specific_kind
   TYPE_SPECIFIC_FLOATFORMAT,
   /* Note: This is used by TYPE_CODE_FUNC and TYPE_CODE_METHOD.  */
   TYPE_SPECIFIC_FUNC,
-  TYPE_SPECIFIC_SELF_TYPE
+  TYPE_SPECIFIC_SELF_TYPE,
+  TYPE_SPECIFIC_INT,
+  TYPE_SPECIFIC_FIXED_POINT,
 };
 
 union type_owner
@@ -578,6 +644,16 @@ union field_location
 
 struct field
 {
+  struct type *type () const
+  {
+    return this->m_type;
+  }
+
+  void set_type (struct type *type)
+  {
+    this->m_type = type;
+  }
+
   union field_location loc;
 
   /* * For a function or member type, this is 1 if the argument is
@@ -603,7 +679,7 @@ struct field
      - In a function or member type, type of this argument.
      - In an array type, the domain-type of the array.  */
 
-  struct type *type;
+  struct type *m_type;
 
   /* * Name of field, value or argument.
      NULL for range bounds, array domains, and member function
@@ -614,6 +690,14 @@ struct field
 
 struct range_bounds
 {
+  ULONGEST bit_stride () const
+  {
+    if (this->flag_is_byte_stride)
+      return this->stride.const_val () * 8;
+    else
+      return this->stride.const_val ();
+  }
+
   /* * Low bound of range.  */
 
   struct dynamic_prop low;
@@ -687,6 +771,25 @@ union type_specific
      is a member of.  */
 
   struct type *self_type;
+
+  /* * For TYPE_CODE_FIXED_POINT types, the info necessary to decode
+     values of that type.  */
+  struct fixed_point_type_info *fixed_point_info;
+
+  /* * An integer-like scalar type may be stored in just part of its
+     enclosing storage bytes.  This structure describes this
+     situation.  */
+  struct
+  {
+    /* * The bit size of the integer.  This can be 0.  For integers
+       that fill their storage (the ordinary case), this field holds
+       the byte size times 8.  */
+    unsigned short bit_size;
+    /* * The bit offset of the integer.  This is ordinarily 0, and can
+       only be non-zero if the bit size is less than the storage
+       size.  */
+    unsigned short bit_offset;
+  } int_stuff;
 };
 
 /* * Main structure representing a type in GDB.
@@ -704,37 +807,28 @@ struct main_type
      because they packs nicely here.  See the TYPE_* macros for
      documentation about these fields.  */
 
-  unsigned int flag_unsigned : 1;
-  unsigned int flag_nosign : 1;
-  unsigned int flag_stub : 1;
-  unsigned int flag_target_stub : 1;
-  unsigned int flag_static : 1;
-  unsigned int flag_prototyped : 1;
-  unsigned int flag_incomplete : 1;
-  unsigned int flag_varargs : 1;
-  unsigned int flag_vector : 1;
-  unsigned int flag_stub_supported : 1;
-  unsigned int flag_gnu_ifunc : 1;
-  unsigned int flag_fixed_instance : 1;
-  unsigned int flag_objfile_owned : 1;
-  unsigned int flag_endianity_not_default : 1;
+  unsigned int m_flag_unsigned : 1;
+  unsigned int m_flag_nosign : 1;
+  unsigned int m_flag_stub : 1;
+  unsigned int m_flag_target_stub : 1;
+  unsigned int m_flag_prototyped : 1;
+  unsigned int m_flag_varargs : 1;
+  unsigned int m_flag_vector : 1;
+  unsigned int m_flag_stub_supported : 1;
+  unsigned int m_flag_gnu_ifunc : 1;
+  unsigned int m_flag_fixed_instance : 1;
+  unsigned int m_flag_objfile_owned : 1;
+  unsigned int m_flag_endianity_not_default : 1;
 
   /* * True if this type was declared with "class" rather than
      "struct".  */
 
-  unsigned int flag_declared_class : 1;
+  unsigned int m_flag_declared_class : 1;
 
   /* * True if this is an enum type with disjoint values.  This
      affects how the enum is printed.  */
 
-  unsigned int flag_flag_enum : 1;
-
-  /* * True if this type is a discriminated union type.  Only valid
-     for TYPE_CODE_UNION.  A discriminated union stores a reference to
-     the discriminant field along with the discriminator values in a
-     dynamic property.  */
-
-  unsigned int flag_discriminated_union : 1;
+  unsigned int m_flag_flag_enum : 1;
 
   /* * A discriminant telling us which field of the type_specific
      union is being used for this type, if any.  */
@@ -766,7 +860,7 @@ struct main_type
      this is somewhat ugly, but without major overhaul of the internal
      type system, it can't be avoided for now.  */
 
-  union type_owner owner;
+  union type_owner m_owner;
 
   /* * For a pointer type, describes the type of object pointed to.
      - For an array type, describes the type of the elements.
@@ -804,6 +898,10 @@ struct main_type
 
     struct range_bounds *bounds;
 
+    /* If this is a scalar type, then this is its corresponding
+       complex type.  */
+    struct type *complex_type;
+
   } flds_bnds;
 
   /* * Slot to point to additional language-specific fields of this
@@ -824,6 +922,437 @@ struct main_type
 
 struct type
 {
+  /* Get the type code of this type. 
+
+     Note that the code can be TYPE_CODE_TYPEDEF, so if you want the real
+     type, you need to do `check_typedef (type)->code ()`.  */
+  type_code code () const
+  {
+    return this->main_type->code;
+  }
+
+  /* Set the type code of this type.  */
+  void set_code (type_code code)
+  {
+    this->main_type->code = code;
+  }
+
+  /* Get the name of this type.  */
+  const char *name () const
+  {
+    return this->main_type->name;
+  }
+
+  /* Set the name of this type.  */
+  void set_name (const char *name)
+  {
+    this->main_type->name = name;
+  }
+
+  /* Get the number of fields of this type.  */
+  int num_fields () const
+  {
+    return this->main_type->nfields;
+  }
+
+  /* Set the number of fields of this type.  */
+  void set_num_fields (int num_fields)
+  {
+    this->main_type->nfields = num_fields;
+  }
+
+  /* Get the fields array of this type.  */
+  struct field *fields () const
+  {
+    return this->main_type->flds_bnds.fields;
+  }
+
+  /* Get the field at index IDX.  */
+  struct field &field (int idx) const
+  {
+    return this->fields ()[idx];
+  }
+
+  /* Set the fields array of this type.  */
+  void set_fields (struct field *fields)
+  {
+    this->main_type->flds_bnds.fields = fields;
+  }
+
+  type *index_type () const
+  {
+    return this->field (0).type ();
+  }
+
+  void set_index_type (type *index_type)
+  {
+    this->field (0).set_type (index_type);
+  }
+
+  /* Return the instance flags converted to the correct type.  */
+  const type_instance_flags instance_flags () const
+  {
+    return (enum type_instance_flag_value) this->m_instance_flags;
+  }
+
+  /* Set the instance flags.  */
+  void set_instance_flags (type_instance_flags flags)
+  {
+    this->m_instance_flags = flags;
+  }
+
+  /* Get the bounds bounds of this type.  The type must be a range type.  */
+  range_bounds *bounds () const
+  {
+    switch (this->code ())
+      {
+      case TYPE_CODE_RANGE:
+	return this->main_type->flds_bnds.bounds;
+
+      case TYPE_CODE_ARRAY:
+      case TYPE_CODE_STRING:
+	return this->index_type ()->bounds ();
+
+      default:
+	gdb_assert_not_reached
+	  ("type::bounds called on type with invalid code");
+      }
+  }
+
+  /* Set the bounds of this type.  The type must be a range type.  */
+  void set_bounds (range_bounds *bounds)
+  {
+    gdb_assert (this->code () == TYPE_CODE_RANGE);
+
+    this->main_type->flds_bnds.bounds = bounds;
+  }
+
+  ULONGEST bit_stride () const
+  {
+    return this->bounds ()->bit_stride ();
+  }
+
+  /* Unsigned integer type.  If this is not set for a TYPE_CODE_INT,
+     the type is signed (unless TYPE_NOSIGN is set).  */
+
+  bool is_unsigned () const
+  {
+    return this->main_type->m_flag_unsigned;
+  }
+
+  void set_is_unsigned (bool is_unsigned)
+  {
+    this->main_type->m_flag_unsigned = is_unsigned;
+  }
+
+  /* No sign for this type.  In C++, "char", "signed char", and
+     "unsigned char" are distinct types; so we need an extra flag to
+     indicate the absence of a sign!  */
+
+  bool has_no_signedness () const
+  {
+    return this->main_type->m_flag_nosign;
+  }
+
+  void set_has_no_signedness (bool has_no_signedness)
+  {
+    this->main_type->m_flag_nosign = has_no_signedness;
+  }
+
+  /* This appears in a type's flags word if it is a stub type (e.g.,
+     if someone referenced a type that wasn't defined in a source file
+     via (struct sir_not_appearing_in_this_film *)).  */
+
+  bool is_stub () const
+  {
+    return this->main_type->m_flag_stub;
+  }
+
+  void set_is_stub (bool is_stub)
+  {
+    this->main_type->m_flag_stub = is_stub;
+  }
+
+  /* The target type of this type is a stub type, and this type needs
+     to be updated if it gets un-stubbed in check_typedef.  Used for
+     arrays and ranges, in which TYPE_LENGTH of the array/range gets set
+     based on the TYPE_LENGTH of the target type.  Also, set for
+     TYPE_CODE_TYPEDEF.  */
+
+  bool target_is_stub () const
+  {
+    return this->main_type->m_flag_target_stub;
+  }
+
+  void set_target_is_stub (bool target_is_stub)
+  {
+    this->main_type->m_flag_target_stub = target_is_stub;
+  }
+
+  /* This is a function type which appears to have a prototype.  We
+     need this for function calls in order to tell us if it's necessary
+     to coerce the args, or to just do the standard conversions.  This
+     is used with a short field.  */
+
+  bool is_prototyped () const
+  {
+    return this->main_type->m_flag_prototyped;
+  }
+
+  void set_is_prototyped (bool is_prototyped)
+  {
+    this->main_type->m_flag_prototyped = is_prototyped;
+  }
+
+  /* FIXME drow/2002-06-03:  Only used for methods, but applies as well
+     to functions.  */
+
+  bool has_varargs () const
+  {
+    return this->main_type->m_flag_varargs;
+  }
+
+  void set_has_varargs (bool has_varargs)
+  {
+    this->main_type->m_flag_varargs = has_varargs;
+  }
+
+  /* Identify a vector type.  Gcc is handling this by adding an extra
+     attribute to the array type.  We slurp that in as a new flag of a
+     type.  This is used only in dwarf2read.c.  */
+
+  bool is_vector () const
+  {
+    return this->main_type->m_flag_vector;
+  }
+
+  void set_is_vector (bool is_vector)
+  {
+    this->main_type->m_flag_vector = is_vector;
+  }
+
+  /* This debug target supports TYPE_STUB(t).  In the unsupported case
+     we have to rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE().
+     TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only
+     guessed the TYPE_STUB(t) value (see dwarfread.c).  */
+
+  bool stub_is_supported () const
+  {
+    return this->main_type->m_flag_stub_supported;
+  }
+
+  void set_stub_is_supported (bool stub_is_supported)
+  {
+    this->main_type->m_flag_stub_supported = stub_is_supported;
+  }
+
+  /* Used only for TYPE_CODE_FUNC where it specifies the real function
+     address is returned by this function call.  TYPE_TARGET_TYPE
+     determines the final returned function type to be presented to
+     user.  */
+
+  bool is_gnu_ifunc () const
+  {
+    return this->main_type->m_flag_gnu_ifunc;
+  }
+
+  void set_is_gnu_ifunc (bool is_gnu_ifunc)
+  {
+    this->main_type->m_flag_gnu_ifunc = is_gnu_ifunc;
+  }
+
+  /* The debugging formats (especially STABS) do not contain enough
+     information to represent all Ada types---especially those whose
+     size depends on dynamic quantities.  Therefore, the GNAT Ada
+     compiler includes extra information in the form of additional type
+     definitions connected by naming conventions.  This flag indicates
+     that the type is an ordinary (unencoded) GDB type that has been
+     created from the necessary run-time information, and does not need
+     further interpretation.  Optionally marks ordinary, fixed-size GDB
+     type.  */
+
+  bool is_fixed_instance () const
+  {
+    return this->main_type->m_flag_fixed_instance;
+  }
+
+  void set_is_fixed_instance (bool is_fixed_instance)
+  {
+    this->main_type->m_flag_fixed_instance = is_fixed_instance;
+  }
+
+  /* A compiler may supply dwarf instrumentation that indicates the desired
+     endian interpretation of the variable differs from the native endian
+     representation. */
+
+  bool endianity_is_not_default () const
+  {
+    return this->main_type->m_flag_endianity_not_default;
+  }
+
+  void set_endianity_is_not_default (bool endianity_is_not_default)
+  {
+    this->main_type->m_flag_endianity_not_default = endianity_is_not_default;
+  }
+
+
+  /* True if this type was declared using the "class" keyword.  This is
+     only valid for C++ structure and enum types.  If false, a structure
+     was declared as a "struct"; if true it was declared "class".  For
+     enum types, this is true when "enum class" or "enum struct" was
+     used to declare the type.  */
+
+  bool is_declared_class () const
+  {
+    return this->main_type->m_flag_declared_class;
+  }
+
+  void set_is_declared_class (bool is_declared_class) const
+  {
+    this->main_type->m_flag_declared_class = is_declared_class;
+  }
+
+  /* True if this type is a "flag" enum.  A flag enum is one where all
+     the values are pairwise disjoint when "and"ed together.  This
+     affects how enum values are printed.  */
+
+  bool is_flag_enum () const
+  {
+    return this->main_type->m_flag_flag_enum;
+  }
+
+  void set_is_flag_enum (bool is_flag_enum)
+  {
+    this->main_type->m_flag_flag_enum = is_flag_enum;
+  }
+
+  /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return a reference
+     to this type's fixed_point_info.  */
+
+  struct fixed_point_type_info &fixed_point_info () const
+  {
+    gdb_assert (this->code () == TYPE_CODE_FIXED_POINT);
+    gdb_assert (this->main_type->type_specific.fixed_point_info != nullptr);
+
+    return *this->main_type->type_specific.fixed_point_info;
+  }
+
+  /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, set this type's
+     fixed_point_info to INFO.  */
+
+  void set_fixed_point_info (struct fixed_point_type_info *info) const
+  {
+    gdb_assert (this->code () == TYPE_CODE_FIXED_POINT);
+
+    this->main_type->type_specific.fixed_point_info = info;
+  }
+
+  /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return its base type.
+
+     In other words, this returns the type after having peeled all
+     intermediate type layers (such as TYPE_CODE_RANGE, for instance).
+     The TYPE_CODE of the type returned is guaranteed to be
+     a TYPE_CODE_FIXED_POINT.  */
+
+  struct type *fixed_point_type_base_type ();
+
+  /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return its scaling
+     factor.  */
+
+  const gdb_mpq &fixed_point_scaling_factor ();
+
+  /* * Return the dynamic property of the requested KIND from this type's
+     list of dynamic properties.  */
+  dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const;
+
+  /* * Given a dynamic property PROP of a given KIND, add this dynamic
+     property to this type.
+
+     This function assumes that this type is objfile-owned.  */
+  void add_dyn_prop (dynamic_prop_node_kind kind, dynamic_prop prop);
+
+  /* * Remove dynamic property of kind KIND from this type, if it exists.  */
+  void remove_dyn_prop (dynamic_prop_node_kind kind);
+
+  /* Return true if this type is owned by an objfile.  Return false if it is
+     owned by an architecture.  */
+  bool is_objfile_owned () const
+  {
+    return this->main_type->m_flag_objfile_owned;
+  }
+
+  /* Set the owner of the type to be OBJFILE.  */
+  void set_owner (objfile *objfile)
+  {
+    gdb_assert (objfile != nullptr);
+
+    this->main_type->m_owner.objfile = objfile;
+    this->main_type->m_flag_objfile_owned = true;
+  }
+
+  /* Set the owner of the type to be ARCH.  */
+  void set_owner (gdbarch *arch)
+  {
+    gdb_assert (arch != nullptr);
+
+    this->main_type->m_owner.gdbarch = arch;
+    this->main_type->m_flag_objfile_owned = false;
+  }
+
+  /* Return the objfile owner of this type.
+
+     Return nullptr if this type is not objfile-owned.  */
+  struct objfile *objfile_owner () const
+  {
+    if (!this->is_objfile_owned ())
+      return nullptr;
+
+    return this->main_type->m_owner.objfile;
+  }
+
+  /* Return the gdbarch owner of this type.
+
+     Return nullptr if this type is not gdbarch-owned.  */
+  gdbarch *arch_owner () const
+  {
+    if (this->is_objfile_owned ())
+      return nullptr;
+
+    return this->main_type->m_owner.gdbarch;
+  }
+
+  /* Return the type's architecture.  For types owned by an
+     architecture, that architecture is returned.  For types owned by an
+     objfile, that objfile's architecture is returned.
+
+     The return value is always non-nullptr.  */
+  gdbarch *arch () const;
+
+  /* * Return true if this is an integer type whose logical (bit) size
+     differs from its storage size; false otherwise.  Always return
+     false for non-integer (i.e., non-TYPE_SPECIFIC_INT) types.  */
+  bool bit_size_differs_p () const
+  {
+    return (main_type->type_specific_field == TYPE_SPECIFIC_INT
+	    && main_type->type_specific.int_stuff.bit_size != 8 * length);
+  }
+
+  /* * Return the logical (bit) size for this integer type.  Only
+     valid for integer (TYPE_SPECIFIC_INT) types.  */
+  unsigned short bit_size () const
+  {
+    gdb_assert (main_type->type_specific_field == TYPE_SPECIFIC_INT);
+    return main_type->type_specific.int_stuff.bit_size;
+  }
+
+  /* * Return the bit offset for this integer type.  Only valid for
+     integer (TYPE_SPECIFIC_INT) types.  */
+  unsigned short bit_offset () const
+  {
+    gdb_assert (main_type->type_specific_field == TYPE_SPECIFIC_INT);
+    return main_type->type_specific.int_stuff.bit_offset;
+  }
+
   /* * Type that is a pointer to this type.
      NULL if no such pointer-to type is known yet.
      The debugger may add the address of such a type
@@ -866,7 +1395,7 @@ struct type
      instance flags are completely inherited from the target type.  No
      qualifiers can be cleared by the typedef.  See also
      check_typedef.  */
-  unsigned instance_flags : 9;
+  unsigned m_instance_flags : 9;
 
   /* * Length of storage for a value of this type.  The value is the
      expression in host bytes of what sizeof(type) would return.  This
@@ -891,8 +1420,6 @@ struct type
   struct main_type *main_type;
 };
 
-#define	NULL_TYPE ((struct type *) 0)
-
 struct fn_fieldlist
 {
 
@@ -957,9 +1484,18 @@ struct fn_field
 
   unsigned int is_constructor : 1;
 
+  /* * True if this function is deleted, false otherwise.  */
+
+  unsigned int is_deleted : 1;
+
+  /* * DW_AT_defaulted attribute for this function.  The value is one
+     of the DW_DEFAULTED constants.  */
+
+  ENUM_BITFIELD (dwarf_defaulted_attribute) defaulted : 2;
+
   /* * Unused.  */
 
-  unsigned int dummy:9;
+  unsigned int dummy:6;
 
   /* * Index into that baseclass's virtual function table, minus 2;
      else if static: VOFFSET_STATIC; else: 0.  */
@@ -1033,6 +1569,12 @@ struct cplus_struct_type
 
     int is_dynamic : 2;
 
+    /* * The calling convention for this type, fetched from the
+       DW_AT_calling_convention attribute.  The value is one of the
+       DW_CC constants.  */
+
+    ENUM_BITFIELD (dwarf_calling_convention) calling_convention : 8;
+
     /* * The base class which defined the virtual function table pointer.  */
 
     struct type *vptr_basetype;
@@ -1141,9 +1683,9 @@ struct func_type
     /* * The calling convention for targets supporting multiple ABIs.
        Right now this is only fetched from the Dwarf-2
        DW_AT_calling_convention attribute.  The value is one of the
-       DW_CC enum dwarf_calling_convention constants.  */
+       DW_CC constants.  */
 
-    unsigned calling_convention : 8;
+    ENUM_BITFIELD (dwarf_calling_convention) calling_convention : 8;
 
     /* * Whether this function normally returns to its caller.  It is
        set from the DW_AT_noreturn attribute if set on the
@@ -1255,13 +1797,25 @@ struct call_site
     /* * CU of the function where the call is located.  It gets used
        for DWARF blocks execution in the parameter array below.  */
 
-    struct dwarf2_per_cu_data *per_cu;
+    dwarf2_per_cu_data *per_cu;
+
+    /* objfile of the function where the call is located.  */
+
+    dwarf2_per_objfile *per_objfile;
 
     /* * Describe DW_TAG_call_site's DW_TAG_formal_parameter.  */
 
     struct call_site_parameter parameter[1];
   };
 
+/* The type-specific info for TYPE_CODE_FIXED_POINT types.  */
+
+struct fixed_point_type_info
+{
+  /* The fixed point type's scaling factor.  */
+  gdb_mpq scaling_factor;
+};
+
 /* * The default value of TYPE_CPLUS_SPECIFIC(T) points to this shared
    static structure.  */
 
@@ -1301,7 +1855,7 @@ extern void allocate_gnat_aux_type (stru
 #define ADA_TYPE_P(type)					\
   (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_GNAT_STUFF	\
     || (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_NONE	\
-	&& TYPE_FIXED_INSTANCE (type)))
+	&& (type)->is_fixed_instance ()))
 
 #define INIT_FUNC_SPECIFIC(type)					       \
   (TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FUNC,			       \
@@ -1309,9 +1863,14 @@ extern void allocate_gnat_aux_type (stru
      TYPE_ZALLOC (type,							       \
 		  sizeof (*TYPE_MAIN_TYPE (type)->type_specific.func_stuff)))
 
-#define TYPE_INSTANCE_FLAGS(thistype) (thistype)->instance_flags
+/* "struct fixed_point_type_info" has a field that has a destructor.
+   See allocate_fixed_point_type_info to understand how this is
+   handled.  */
+#define INIT_FIXED_POINT_SPECIFIC(type) \
+  (TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FIXED_POINT, \
+   allocate_fixed_point_type_info (type))
+
 #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type
-#define TYPE_NAME(thistype) TYPE_MAIN_TYPE(thistype)->name
 #define TYPE_TARGET_TYPE(thistype) TYPE_MAIN_TYPE(thistype)->target_type
 #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type
 #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type
@@ -1342,73 +1901,23 @@ extern unsigned type_align (struct type
    space in struct type.  */
 extern bool set_type_align (struct type *, ULONGEST);
 
-/* * Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you want the real
-   type, you need to do TYPE_CODE (check_type (this_type)).  */
-#define TYPE_CODE(thistype) TYPE_MAIN_TYPE(thistype)->code
-#define TYPE_NFIELDS(thistype) TYPE_MAIN_TYPE(thistype)->nfields
-#define TYPE_FIELDS(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields
-
-#define TYPE_INDEX_TYPE(type) TYPE_FIELD_TYPE (type, 0)
-#define TYPE_RANGE_DATA(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.bounds
-#define TYPE_LOW_BOUND(range_type) \
-  TYPE_RANGE_DATA(range_type)->low.data.const_val
-#define TYPE_HIGH_BOUND(range_type) \
-  TYPE_RANGE_DATA(range_type)->high.data.const_val
-#define TYPE_LOW_BOUND_UNDEFINED(range_type) \
-  (TYPE_RANGE_DATA(range_type)->low.kind == PROP_UNDEFINED)
-#define TYPE_HIGH_BOUND_UNDEFINED(range_type) \
-  (TYPE_RANGE_DATA(range_type)->high.kind == PROP_UNDEFINED)
-#define TYPE_HIGH_BOUND_KIND(range_type) \
-  TYPE_RANGE_DATA(range_type)->high.kind
-#define TYPE_LOW_BOUND_KIND(range_type) \
-  TYPE_RANGE_DATA(range_type)->low.kind
-#define TYPE_BIT_STRIDE(range_type) \
-  (TYPE_RANGE_DATA(range_type)->stride.data.const_val \
-   * (TYPE_RANGE_DATA(range_type)->flag_is_byte_stride ? 8 : 1))
-
 /* Property accessors for the type data location.  */
 #define TYPE_DATA_LOCATION(thistype) \
-  get_dyn_prop (DYN_PROP_DATA_LOCATION, thistype)
+  ((thistype)->dyn_prop (DYN_PROP_DATA_LOCATION))
 #define TYPE_DATA_LOCATION_BATON(thistype) \
   TYPE_DATA_LOCATION (thistype)->data.baton
 #define TYPE_DATA_LOCATION_ADDR(thistype) \
-  TYPE_DATA_LOCATION (thistype)->data.const_val
+  (TYPE_DATA_LOCATION (thistype)->const_val ())
 #define TYPE_DATA_LOCATION_KIND(thistype) \
-  TYPE_DATA_LOCATION (thistype)->kind
+  (TYPE_DATA_LOCATION (thistype)->kind ())
+#define TYPE_DYNAMIC_LENGTH(thistype) \
+  ((thistype)->dyn_prop (DYN_PROP_BYTE_SIZE))
 
 /* Property accessors for the type allocated/associated.  */
 #define TYPE_ALLOCATED_PROP(thistype) \
-  get_dyn_prop (DYN_PROP_ALLOCATED, thistype)
+  ((thistype)->dyn_prop (DYN_PROP_ALLOCATED))
 #define TYPE_ASSOCIATED_PROP(thistype) \
-  get_dyn_prop (DYN_PROP_ASSOCIATED, thistype)
-
-/* Attribute accessors for dynamic properties.  */
-#define TYPE_DYN_PROP_LIST(thistype) \
-  TYPE_MAIN_TYPE(thistype)->dyn_prop_list
-#define TYPE_DYN_PROP_BATON(dynprop) \
-  dynprop->data.baton
-#define TYPE_DYN_PROP_ADDR(dynprop) \
-  dynprop->data.const_val
-#define TYPE_DYN_PROP_KIND(dynprop) \
-  dynprop->kind
-
-
-/* Accessors for struct range_bounds data attached to an array type's
-   index type.  */
-
-#define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \
-   TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
-#define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \
-   TYPE_LOW_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
-
-#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
-   (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype))))
-
-#define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \
-   (TYPE_LOW_BOUND(TYPE_INDEX_TYPE((arraytype))))
-
-#define TYPE_ARRAY_BIT_STRIDE(arraytype) \
-  (TYPE_BIT_STRIDE(TYPE_INDEX_TYPE((arraytype))))
+  ((thistype)->dyn_prop (DYN_PROP_ASSOCIATED))
 
 /* C++ */
 
@@ -1437,13 +1946,15 @@ extern void set_type_vptr_basetype (stru
     ? (struct cplus_struct_type*)&cplus_struct_default \
     : TYPE_RAW_CPLUS_SPECIFIC(thistype))
 #define TYPE_RAW_CPLUS_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.cplus_stuff
+#define TYPE_CPLUS_CALLING_CONVENTION(thistype) \
+  TYPE_MAIN_TYPE(thistype)->type_specific.cplus_stuff->calling_convention
 #define TYPE_FLOATFORMAT(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.floatformat
 #define TYPE_GNAT_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.gnat_stuff
 #define TYPE_DESCRIPTIVE_TYPE(thistype) TYPE_GNAT_SPECIFIC(thistype)->descriptive_type
 #define TYPE_CALLING_CONVENTION(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->calling_convention
 #define TYPE_NO_RETURN(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->is_noreturn
 #define TYPE_TAIL_CALL_LIST(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->tail_call_list
-#define TYPE_BASECLASS(thistype,index) TYPE_FIELD_TYPE(thistype, index)
+#define TYPE_BASECLASS(thistype,index) ((thistype)->field (index).type ())
 #define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses
 #define TYPE_BASECLASS_NAME(thistype,index) TYPE_FIELD_NAME(thistype, index)
 #define TYPE_BASECLASS_BITPOS(thistype,index) TYPE_FIELD_BITPOS(thistype,index)
@@ -1455,7 +1966,6 @@ extern void set_type_vptr_basetype (stru
   (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \
     : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index)))
 
-#define FIELD_TYPE(thisfld) ((thisfld).type)
 #define FIELD_NAME(thisfld) ((thisfld).name)
 #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
 #define FIELD_BITPOS_LVAL(thisfld) ((thisfld).loc.bitpos)
@@ -1483,18 +1993,16 @@ extern void set_type_vptr_basetype (stru
 #define FIELD_ARTIFICIAL(thisfld) ((thisfld).artificial)
 #define FIELD_BITSIZE(thisfld) ((thisfld).bitsize)
 
-#define TYPE_FIELD(thistype, n) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields[n]
-#define TYPE_FIELD_TYPE(thistype, n) FIELD_TYPE(TYPE_FIELD(thistype, n))
-#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n))
-#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n))
-#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
-#define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n))
-#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
-#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
-#define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n))
-#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
-#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
-#define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n))!=0)
+#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME((thistype)->field (n))
+#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND ((thistype)->field (n))
+#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS ((thistype)->field (n))
+#define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL ((thistype)->field (n))
+#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME ((thistype)->field (n))
+#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR ((thistype)->field (n))
+#define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK ((thistype)->field (n))
+#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL((thistype)->field (n))
+#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE((thistype)->field (n))
+#define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE((thistype)->field (n))!=0)
 
 #define TYPE_FIELD_PRIVATE_BITS(thistype) \
   TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits
@@ -1541,7 +2049,7 @@ extern void set_type_vptr_basetype (stru
 #define TYPE_FN_FIELD(thisfn, n) (thisfn)[n]
 #define TYPE_FN_FIELD_PHYSNAME(thisfn, n) (thisfn)[n].physname
 #define TYPE_FN_FIELD_TYPE(thisfn, n) (thisfn)[n].type
-#define TYPE_FN_FIELD_ARGS(thisfn, n) TYPE_FIELDS ((thisfn)[n].type)
+#define TYPE_FN_FIELD_ARGS(thisfn, n) (((thisfn)[n].type)->fields ())
 #define TYPE_FN_FIELD_CONST(thisfn, n) ((thisfn)[n].is_const)
 #define TYPE_FN_FIELD_VOLATILE(thisfn, n) ((thisfn)[n].is_volatile)
 #define TYPE_FN_FIELD_PRIVATE(thisfn, n) ((thisfn)[n].is_private)
@@ -1553,6 +2061,8 @@ extern void set_type_vptr_basetype (stru
 #define TYPE_FN_FIELD_VOFFSET(thisfn, n) ((thisfn)[n].voffset-2)
 #define TYPE_FN_FIELD_VIRTUAL_P(thisfn, n) ((thisfn)[n].voffset > 1)
 #define TYPE_FN_FIELD_STATIC_P(thisfn, n) ((thisfn)[n].voffset == VOFFSET_STATIC)
+#define TYPE_FN_FIELD_DEFAULTED(thisfn, n) ((thisfn)[n].defaulted)
+#define TYPE_FN_FIELD_DELETED(thisfn, n) ((thisfn)[n].is_deleted)
 
 /* Accessors for typedefs defined by a class.  */
 #define TYPE_TYPEDEF_FIELD_ARRAY(thistype) \
@@ -1586,24 +2096,24 @@ extern void set_type_vptr_basetype (stru
   TYPE_NESTED_TYPES_FIELD (thistype, n).is_private
 
 #define TYPE_IS_OPAQUE(thistype) \
-  (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) \
-    || (TYPE_CODE (thistype) == TYPE_CODE_UNION)) \
-   && (TYPE_NFIELDS (thistype) == 0) \
+  ((((thistype)->code () == TYPE_CODE_STRUCT) \
+    || ((thistype)->code () == TYPE_CODE_UNION)) \
+   && ((thistype)->num_fields () == 0) \
    && (!HAVE_CPLUS_STRUCT (thistype) \
        || TYPE_NFN_FIELDS (thistype) == 0) \
-   && (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype)))
+   && ((thistype)->is_stub () || !(thistype)->stub_is_supported ()))
 
 /* * A helper macro that returns the name of a type or "unnamed type"
    if the type has no name.  */
 
 #define TYPE_SAFE_NAME(type) \
-  (TYPE_NAME (type) ? TYPE_NAME (type) : _("<unnamed type>"))
+  (type->name () != nullptr ? type->name () : _("<unnamed type>"))
 
 /* * A helper macro that returns the name of an error type.  If the
    type has a name, it is used; otherwise, a default is used.  */
 
 #define TYPE_ERROR_NAME(type) \
-  (TYPE_NAME (type) ? TYPE_NAME (type) : _("<error type>"))
+  (type->name () ? type->name () : _("<error type>"))
 
 /* Given TYPE, return its floatformat.  */
 const struct floatformat *floatformat_from_type (const struct type *type);
@@ -1623,6 +2133,7 @@ struct builtin_type
   struct type *builtin_unsigned_short;
   struct type *builtin_unsigned_int;
   struct type *builtin_unsigned_long;
+  struct type *builtin_bfloat16;
   struct type *builtin_half;
   struct type *builtin_float;
   struct type *builtin_double;
@@ -1757,7 +2268,7 @@ extern const struct floatformat *floatfo
 extern const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN];
 extern const struct floatformat *floatformats_vax_d[BFD_ENDIAN_UNKNOWN];
 extern const struct floatformat *floatformats_ibm_long_double[BFD_ENDIAN_UNKNOWN];
-
+extern const struct floatformat *floatformats_bfloat16[BFD_ENDIAN_UNKNOWN];
 
 /* Allocate space for storing data associated with a particular
    type.  We ensure that the space is allocated using the same
@@ -1774,10 +2285,10 @@ extern const struct floatformat *floatfo
    when it is no longer needed.  */
 
 #define TYPE_ALLOC(t,size)                                              \
-  (obstack_alloc ((TYPE_OBJFILE_OWNED (t)                               \
-                   ? &TYPE_OBJFILE (t)->objfile_obstack                 \
-                   : gdbarch_obstack (TYPE_OWNER (t).gdbarch)),         \
-                  size))
+  (obstack_alloc (((t)->is_objfile_owned ()                             \
+		   ? &((t)->objfile_owner ()->objfile_obstack)          \
+		   : gdbarch_obstack ((t)->arch_owner ())),             \
+		  size))
 
 
 /* See comment on TYPE_ALLOC.  */
@@ -1793,12 +2304,6 @@ extern struct type *alloc_type (struct o
 extern struct type *alloc_type_arch (struct gdbarch *);
 extern struct type *alloc_type_copy (const struct type *);
 
-/* * Return the type's architecture.  For types owned by an
-   architecture, that architecture is returned.  For types owned by an
-   objfile, that objfile's architecture is returned.  */
-
-extern struct gdbarch *get_type_arch (const struct type *);
-
 /* * This returns the target type (or NULL) of TYPE, also skipping
    past typedefs.  */
 
@@ -1823,10 +2328,12 @@ extern struct type *init_float_type (str
 				     const struct floatformat **,
 				     enum bfd_endian = BFD_ENDIAN_UNKNOWN);
 extern struct type *init_decfloat_type (struct objfile *, int, const char *);
-extern struct type *init_complex_type (struct objfile *, const char *,
-				       struct type *);
+extern bool can_create_complex_type (struct type *);
+extern struct type *init_complex_type (const char *, struct type *);
 extern struct type *init_pointer_type (struct objfile *, int, const char *,
 				       struct type *);
+extern struct type *init_fixed_point_type (struct objfile *, int, int,
+					   const char *);
 
 /* Helper functions to construct architecture-owned types.  */
 extern struct type *arch_type (struct gdbarch *, enum type_code, int,
@@ -1840,8 +2347,6 @@ extern struct type *arch_boolean_type (s
 extern struct type *arch_float_type (struct gdbarch *, int, const char *,
 				     const struct floatformat **);
 extern struct type *arch_decfloat_type (struct gdbarch *, int, const char *);
-extern struct type *arch_complex_type (struct gdbarch *, const char *,
-				       struct type *);
 extern struct type *arch_pointer_type (struct gdbarch *, int, const char *,
 				       struct type *);
 
@@ -1882,7 +2387,7 @@ extern struct type *lookup_rvalue_refere
 
 
 extern struct type *make_reference_type (struct type *, struct type **,
-                                         enum type_code);
+					 enum type_code);
 
 extern struct type *make_cv_type (int, int, struct type *, struct type **);
 
@@ -1894,12 +2399,14 @@ extern struct type *make_atomic_type (st
 
 extern void replace_type (struct type *, struct type *);
 
-extern int address_space_name_to_int (struct gdbarch *, const char *);
+extern type_instance_flags address_space_name_to_type_instance_flags
+  (struct gdbarch *, const char *);
 
-extern const char *address_space_int_to_name (struct gdbarch *, int);
+extern const char *address_space_type_instance_flags_to_name
+  (struct gdbarch *, type_instance_flags);
 
-extern struct type *make_type_with_address_space (struct type *type, 
-						  int space_identifier);
+extern struct type *make_type_with_address_space
+  (struct type *type, type_instance_flags space_identifier);
 
 extern struct type *lookup_memberptr_type (struct type *, struct type *);
 
@@ -2018,29 +2525,13 @@ extern void get_signed_type_minmax (stru
    ADDR specifies the location of the variable the type is bound to.
    If TYPE has no dynamic properties return TYPE; otherwise a new type with
    static properties is returned.  */
-extern struct type *resolve_dynamic_type (struct type *type,
-					  const gdb_byte *valaddr,
-					  CORE_ADDR addr);
+extern struct type *resolve_dynamic_type
+  (struct type *type, gdb::array_view<const gdb_byte> valaddr,
+   CORE_ADDR addr);
 
 /* * Predicate if the type has dynamic values, which are not resolved yet.  */
 extern int is_dynamic_type (struct type *type);
 
-/* * Return the dynamic property of the requested KIND from TYPE's
-   list of dynamic properties.  */
-extern struct dynamic_prop *get_dyn_prop
-  (enum dynamic_prop_node_kind kind, const struct type *type);
-
-/* * Given a dynamic property PROP of a given KIND, add this dynamic
-   property to the given TYPE.
-
-   This function assumes that TYPE is objfile-owned.  */
-extern void add_dyn_prop
-  (enum dynamic_prop_node_kind kind, struct dynamic_prop prop,
-   struct type *type);
-
-extern void remove_dyn_prop (enum dynamic_prop_node_kind prop_kind,
-                             struct type *type);
-
 extern struct type *check_typedef (struct type *);
 
 extern void check_stub_method_group (struct type *, int);
@@ -2055,12 +2546,34 @@ extern struct type *lookup_template_type
 
 extern int get_vptr_fieldno (struct type *, struct type **);
 
-extern int get_discrete_bounds (struct type *, LONGEST *, LONGEST *);
+/* Set *LOWP and *HIGHP to the lower and upper bounds of discrete type
+   TYPE.
+
+   Return true if the two bounds are available, false otherwise.  */
+
+extern bool get_discrete_bounds (struct type *type, LONGEST *lowp,
+				 LONGEST *highp);
 
-extern int get_array_bounds (struct type *type, LONGEST *low_bound,
-			     LONGEST *high_bound);
+/* If TYPE's low bound is a known constant, return it, else return nullopt.  */
 
-extern int discrete_position (struct type *type, LONGEST val, LONGEST *pos);
+extern gdb::optional<LONGEST> get_discrete_low_bound (struct type *type);
+
+/* If TYPE's high bound is a known constant, return it, else return nullopt.  */
+
+extern gdb::optional<LONGEST> get_discrete_high_bound (struct type *type);
+
+/* Assuming TYPE is a simple, non-empty array type, compute its upper
+   and lower bound.  Save the low bound into LOW_BOUND if not NULL.
+   Save the high bound into HIGH_BOUND if not NULL.
+
+   Return true if the operation was successful.  Return false otherwise,
+   in which case the values of LOW_BOUND and HIGH_BOUNDS are unmodified.  */
+
+extern bool get_array_bounds (struct type *type, LONGEST *low_bound,
+			      LONGEST *high_bound);
+
+extern gdb::optional<LONGEST> discrete_position (struct type *type,
+						 LONGEST val);
 
 extern int class_types_same_p (const struct type *, const struct type *);
 
@@ -2164,7 +2677,7 @@ extern int class_or_union_p (const struc
 
 extern void maintenance_print_type (const char *, int);
 
-extern htab_t create_copied_types_hash (struct objfile *objfile);
+extern htab_up create_copied_types_hash (struct objfile *objfile);
 
 extern struct type *copy_type_recursive (struct objfile *objfile,
 					 struct type *type,
@@ -2180,10 +2693,18 @@ extern int type_not_allocated (const str
 
 extern int type_not_associated (const struct type *type);
 
+/* Return True if TYPE is a TYPE_CODE_FIXED_POINT or if TYPE is
+   a range type whose base type is a TYPE_CODE_FIXED_POINT.  */
+extern bool is_fixed_point_type (struct type *type);
+
+/* Allocate a fixed-point type info for TYPE.  This should only be
+   called by INIT_FIXED_POINT_SPECIFIC.  */
+extern void allocate_fixed_point_type_info (struct type *type);
+
 /* * When the type includes explicit byte ordering, return that.
-   Otherwise, the byte ordering from gdbarch_byte_order for 
-   get_type_arch is returned.  */
-   
+   Otherwise, the byte ordering from gdbarch_byte_order for
+   the type's arch is returned.  */
+
 extern enum bfd_endian type_byte_order (const struct type *type);
 
 /* A flag to enable printing of debugging information of C++
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_vfork.h ./gdb/gdb_vfork.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_vfork.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_vfork.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* GDB-friendly replacement for <vfork.h>.
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_wchar.h ./gdb/gdb_wchar.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gdb_wchar.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gdb_wchar.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Wide characters for gdb
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/.gitattributes ./gdb/.gitattributes
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/.gitattributes	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/.gitattributes	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,7 @@
+# -*- conf -*-
+
+# Use cpp-style diffs for .h and .c files.  This is useful
+# if you modify classes defined in those files.
+
+*.h	diff=cpp
+*.c	diff=cpp
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/glibc-tdep.c ./gdb/glibc-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/glibc-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/glibc-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the GNU C Library (glibc).
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -64,7 +64,7 @@ glibc_skip_solib_resolver (struct gdbarc
       
       /* This is the name used in older versions.  */
       if (! fixup.minsym)
-        fixup = lookup_minimal_symbol ("fixup", NULL, resolver.objfile);
+	fixup = lookup_minimal_symbol ("fixup", NULL, resolver.objfile);
 
       if (fixup.minsym && BMSYMBOL_VALUE_ADDRESS (fixup) == pc)
 	return frame_unwind_caller_pc (get_current_frame ());
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/glibc-tdep.h ./gdb/glibc-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/glibc-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/glibc-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the GNU C Library (glibc).
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gmp-utils.c ./gdb/gmp-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gmp-utils.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/gmp-utils.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,243 @@
+/* Copyright (C) 2019-2021 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 "gmp-utils.h"
+
+/* See gmp-utils.h.  */
+
+std::string
+gmp_string_printf (const char *fmt, ...)
+{
+  va_list vp;
+
+  va_start (vp, fmt);
+  int size = gmp_vsnprintf (NULL, 0, fmt, vp);
+  va_end (vp);
+
+  std::string str (size, '\0');
+
+  /* C++11 and later guarantee std::string uses contiguous memory and
+     always includes the terminating '\0'.  */
+  va_start (vp, fmt);
+  gmp_vsprintf (&str[0], fmt, vp);
+  va_end (vp);
+
+  return str;
+}
+
+/* See gmp-utils.h.  */
+
+void
+gdb_mpz::read (gdb::array_view<const gdb_byte> buf, enum bfd_endian byte_order,
+	       bool unsigned_p)
+{
+  mpz_import (val, 1 /* count */, -1 /* order */, buf.size () /* size */,
+	      byte_order == BFD_ENDIAN_BIG ? 1 : -1 /* endian */,
+	      0 /* nails */, buf.data () /* op */);
+
+  if (!unsigned_p)
+    {
+      /* The value was imported as if it was a positive value,
+	 as mpz_import does not handle signs. If the original value
+	 was in fact negative, we need to adjust VAL accordingly.  */
+      gdb_mpz max;
+
+      mpz_ui_pow_ui (max.val, 2, buf.size () * HOST_CHAR_BIT - 1);
+      if (mpz_cmp (val, max.val) >= 0)
+	mpz_submul_ui (val, max.val, 2);
+    }
+}
+
+/* See gmp-utils.h.  */
+
+void
+gdb_mpz::write (gdb::array_view<gdb_byte> buf, enum bfd_endian byte_order,
+		bool unsigned_p) const
+{
+  this->safe_export
+    (buf, byte_order == BFD_ENDIAN_BIG ? 1 : -1 /* endian */, unsigned_p);
+}
+
+/* See gmp-utils.h.  */
+
+void
+gdb_mpz::safe_export (gdb::array_view<gdb_byte> buf,
+		      int endian, bool unsigned_p) const
+{
+  gdb_assert (buf.size () > 0);
+
+  if (mpz_sgn (val) == 0)
+    {
+      /* Our value is zero, so no need to call mpz_export to do the work,
+	 especially since mpz_export's documentation explicitly says
+	 that the function is a noop in this case.  Just write zero to
+	 BUF ourselves.  */
+      memset (buf.data (), 0, buf.size ());
+      return;
+    }
+
+  /* Determine the maximum range of values that our buffer can hold,
+     and verify that VAL is within that range.  */
+
+  gdb_mpz lo, hi;
+  const size_t max_usable_bits = buf.size () * HOST_CHAR_BIT;
+  if (unsigned_p)
+    {
+      lo = 0;
+
+      mpz_ui_pow_ui (hi.val, 2, max_usable_bits);
+      mpz_sub_ui (hi.val, hi.val, 1);
+    }
+  else
+    {
+      mpz_ui_pow_ui (lo.val, 2, max_usable_bits - 1);
+      mpz_neg (lo.val, lo.val);
+
+      mpz_ui_pow_ui (hi.val, 2, max_usable_bits - 1);
+      mpz_sub_ui (hi.val, hi.val, 1);
+    }
+
+  if (mpz_cmp (val, lo.val) < 0 || mpz_cmp (val, hi.val) > 0)
+    error (_("Cannot export value %s as %zu-bits %s integer"
+	     " (must be between %s and %s)"),
+	   this->str ().c_str (),
+	   max_usable_bits,
+	   unsigned_p ? _("unsigned") : _("signed"),
+	   lo.str ().c_str (),
+	   hi.str ().c_str ());
+
+  gdb_mpz exported_val (val);
+
+  if (mpz_cmp_ui (exported_val.val, 0) < 0)
+    {
+      /* mpz_export does not handle signed values, so create a positive
+	 value whose bit representation as an unsigned of the same length
+	 would be the same as our negative value.  */
+      gdb_mpz neg_offset;
+
+      mpz_ui_pow_ui (neg_offset.val, 2, buf.size () * HOST_CHAR_BIT);
+      mpz_add (exported_val.val, exported_val.val, neg_offset.val);
+    }
+
+  /* Do the export into a buffer allocated by GMP itself; that way,
+     we can detect cases where BUF is not large enough to export
+     our value, and thus avoid a buffer overlow.  Normally, this should
+     never happen, since we verified earlier that the buffer is large
+     enough to accomodate our value, but doing this allows us to be
+     extra safe with the export.
+
+     After verification that the export behaved as expected, we will
+     copy the data over to BUF.  */
+
+  size_t word_countp;
+  gdb::unique_xmalloc_ptr<void> exported
+    (mpz_export (NULL, &word_countp, -1 /* order */, buf.size () /* size */,
+		 endian, 0 /* nails */, exported_val.val));
+
+  gdb_assert (word_countp == 1);
+
+  memcpy (buf.data (), exported.get (), buf.size ());
+}
+
+/* See gmp-utils.h.  */
+
+gdb_mpz
+gdb_mpq::get_rounded () const
+{
+  /* Work with a positive number so as to make the "floor" rounding
+     always round towards zero.  */
+
+  gdb_mpq abs_val (val);
+  mpq_abs (abs_val.val, abs_val.val);
+
+  /* Convert our rational number into a quotient and remainder,
+     with "floor" rounding, which in our case means rounding
+     towards zero.  */
+
+  gdb_mpz quotient, remainder;
+  mpz_fdiv_qr (quotient.val, remainder.val,
+	       mpq_numref (abs_val.val), mpq_denref (abs_val.val));
+
+  /* Multiply the remainder by 2, and see if it is greater or equal
+     to abs_val's denominator.  If yes, round to the next integer.  */
+
+  mpz_mul_ui (remainder.val, remainder.val, 2);
+  if (mpz_cmp (remainder.val, mpq_denref (abs_val.val)) >= 0)
+    mpz_add_ui (quotient.val, quotient.val, 1);
+
+  /* Re-apply the sign if needed.  */
+  if (mpq_sgn (val) < 0)
+    mpz_neg (quotient.val, quotient.val);
+
+  return quotient;
+}
+
+/* See gmp-utils.h.  */
+
+void
+gdb_mpq::read_fixed_point (gdb::array_view<const gdb_byte> buf,
+			   enum bfd_endian byte_order, bool unsigned_p,
+			   const gdb_mpq &scaling_factor)
+{
+  gdb_mpz vz;
+  vz.read (buf, byte_order, unsigned_p);
+
+  mpq_set_z (val, vz.val);
+  mpq_mul (val, val, scaling_factor.val);
+}
+
+/* See gmp-utils.h.  */
+
+void
+gdb_mpq::write_fixed_point (gdb::array_view<gdb_byte> buf,
+			    enum bfd_endian byte_order, bool unsigned_p,
+			    const gdb_mpq &scaling_factor) const
+{
+  gdb_mpq unscaled (val);
+
+  mpq_div (unscaled.val, unscaled.val, scaling_factor.val);
+
+  gdb_mpz unscaled_z = unscaled.get_rounded ();
+  unscaled_z.write (buf, byte_order, unsigned_p);
+}
+
+/* A wrapper around xrealloc that we can then register with GMP
+   as the "realloc" function.  */
+
+static void *
+xrealloc_for_gmp (void *ptr, size_t old_size, size_t new_size)
+{
+  return xrealloc (ptr, new_size);
+}
+
+/* A wrapper around xfree that we can then register with GMP
+   as the "free" function.  */
+
+static void
+xfree_for_gmp (void *ptr, size_t size)
+{
+  xfree (ptr);
+}
+
+void _initialize_gmp_utils ();
+
+void
+_initialize_gmp_utils ()
+{
+  /* Tell GMP to use GDB's memory management routines.  */
+  mp_set_memory_functions (xmalloc, xrealloc_for_gmp, xfree_for_gmp);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gmp-utils.h ./gdb/gmp-utils.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gmp-utils.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/gmp-utils.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,288 @@
+/* Miscellaneous routines making it easier to use GMP within GDB's framework.
+
+   Copyright (C) 2019-2021 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 GMP_UTILS_H
+#define GMP_UTILS_H
+
+#include "defs.h"
+
+/* Include <stdio.h> and <stdarg.h> ahead of <gmp.h>, so as to get
+   access to GMP's various formatting functions.  */
+#include <stdio.h>
+#include <stdarg.h>
+#include <gmp.h>
+#include "gdbsupport/traits.h"
+
+/* Same as gmp_asprintf, but returning an std::string.  */
+
+std::string gmp_string_printf (const char *fmt, ...);
+
+/* A class to make it easier to use GMP's mpz_t values within GDB.  */
+
+struct gdb_mpz
+{
+  mpz_t val;
+
+  /* Constructors.  */
+  gdb_mpz () { mpz_init (val); }
+
+  explicit gdb_mpz (const mpz_t &from_val)
+  {
+    mpz_init (val);
+    mpz_set (val, from_val);
+  }
+
+  gdb_mpz (const gdb_mpz &from)
+  {
+    mpz_init (val);
+    mpz_set (val, from.val);
+  }
+
+  /* Initialize using the given integral value.
+
+     The main advantage of this method is that it handles both signed
+     and unsigned types, with no size restriction.  */
+  template<typename T, typename = gdb::Requires<std::is_integral<T>>>
+  explicit gdb_mpz (T src)
+  {
+    mpz_init (val);
+    set (src);
+  }
+
+  explicit gdb_mpz (gdb_mpz &&from)
+  {
+    mpz_init (val);
+    mpz_swap (val, from.val);
+  }
+
+  
+  gdb_mpz &operator= (const gdb_mpz &from)
+  {
+    mpz_set (val, from.val);
+    return *this;
+  }
+
+  gdb_mpz &operator= (gdb_mpz &&other)
+  {
+    mpz_swap (val, other.val);
+    return *this;
+  }
+
+  template<typename T, typename = gdb::Requires<std::is_integral<T>>>
+  gdb_mpz &operator= (T src)
+  {
+    set (src);
+    return *this;
+  }
+
+  /* Convert VAL to an integer of the given type.
+
+     The return type can signed or unsigned, with no size restriction.  */
+  template<typename T> T as_integer () const;
+
+  /* Set VAL by importing the number stored in the byte array (BUF),
+     using the given BYTE_ORDER.  The size of the data to read is
+     the byte array's size.
+
+     UNSIGNED_P indicates whether the number has an unsigned type.  */
+  void read (gdb::array_view<const gdb_byte> buf, enum bfd_endian byte_order,
+	     bool unsigned_p);
+
+  /* Write VAL into BUF as a number whose byte size is the size of BUF,
+     using the given BYTE_ORDER.
+
+     UNSIGNED_P indicates whether the number has an unsigned type.  */
+  void write (gdb::array_view<gdb_byte> buf, enum bfd_endian byte_order,
+	      bool unsigned_p) const;
+
+  /* Return a string containing VAL.  */
+  std::string str () const { return gmp_string_printf ("%Zd", val); }
+
+  /* The destructor.  */
+  ~gdb_mpz () { mpz_clear (val); }
+
+private:
+
+  /* Helper template for constructor and operator=.  */
+  template<typename T> void set (T src);
+
+  /* Low-level function to export VAL into BUF as a number whose byte size
+     is the size of BUF.
+
+     If UNSIGNED_P is true, then export VAL into BUF as an unsigned value.
+     Otherwise, export it as a signed value.
+
+     The API is inspired from GMP's mpz_export, hence the naming and types
+     of the following parameter:
+       - ENDIAN should be:
+           . 1 for most significant byte first; or
+	   . -1 for least significant byte first; or
+	   . 0 for native endianness.
+
+    An error is raised if BUF is not large enough to contain the value
+    being exported.  */
+  void safe_export (gdb::array_view<gdb_byte> buf,
+		    int endian, bool unsigned_p) const;
+};
+
+/* A class to make it easier to use GMP's mpq_t values within GDB.  */
+
+struct gdb_mpq
+{
+  mpq_t val;
+
+  /* Constructors.  */
+  gdb_mpq () { mpq_init (val); }
+
+  explicit gdb_mpq (const mpq_t &from_val)
+  {
+    mpq_init (val);
+    mpq_set (val, from_val);
+  }
+
+  gdb_mpq (const gdb_mpq &from)
+  {
+    mpq_init (val);
+    mpq_set (val, from.val);
+  }
+
+  explicit gdb_mpq (gdb_mpq &&from)
+  {
+    mpq_init (val);
+    mpq_swap (val, from.val);
+  }
+
+  /* Copy assignment operator.  */
+  gdb_mpq &operator= (const gdb_mpq &from)
+  {
+    mpq_set (val, from.val);
+    return *this;
+  }
+
+  gdb_mpq &operator= (gdb_mpq &&from)
+  {
+    mpq_swap (val, from.val);
+    return *this;
+  }
+
+  /* Return a string representing VAL as "<numerator> / <denominator>".  */
+  std::string str () const { return gmp_string_printf ("%Qd", val); }
+
+  /* Return VAL rounded to the nearest integer.  */
+  gdb_mpz get_rounded () const;
+
+  /* Set VAL from the contents of the given byte array (BUF), which
+     contains the unscaled value of a fixed point type object.
+     The byte size of the data is the size of BUF.
+
+     BYTE_ORDER provides the byte_order to use when reading the data.
+
+     UNSIGNED_P indicates whether the number has an unsigned type.
+     SCALING_FACTOR is the scaling factor to apply after having
+     read the unscaled value from our buffer.  */
+  void read_fixed_point (gdb::array_view<const gdb_byte> buf,
+			 enum bfd_endian byte_order, bool unsigned_p,
+			 const gdb_mpq &scaling_factor);
+
+  /* Write VAL into BUF as fixed point value following the given BYTE_ORDER.
+     The size of BUF is used as the length to write the value into.
+
+     UNSIGNED_P indicates whether the number has an unsigned type.
+     SCALING_FACTOR is the scaling factor to apply before writing
+     the unscaled value to our buffer.  */
+  void write_fixed_point (gdb::array_view<gdb_byte> buf,
+			  enum bfd_endian byte_order, bool unsigned_p,
+			  const gdb_mpq &scaling_factor) const;
+
+  /* The destructor.  */
+  ~gdb_mpq () { mpq_clear (val); }
+};
+
+/* A class to make it easier to use GMP's mpf_t values within GDB.
+
+   Should MPFR become a required dependency, we should probably
+   drop this class in favor of using MPFR.  */
+
+struct gdb_mpf
+{
+  mpf_t val;
+
+  /* Constructors.  */
+  gdb_mpf () { mpf_init (val); }
+
+  DISABLE_COPY_AND_ASSIGN (gdb_mpf);
+
+  /* Set VAL from the contents of the given buffer (BUF), which
+     contains the unscaled value of a fixed point type object
+     with the given size (LEN) and byte order (BYTE_ORDER).
+
+     UNSIGNED_P indicates whether the number has an unsigned type.
+     SCALING_FACTOR is the scaling factor to apply after having
+     read the unscaled value from our buffer.  */
+  void read_fixed_point (gdb::array_view<const gdb_byte> buf,
+			 enum bfd_endian byte_order, bool unsigned_p,
+			 const gdb_mpq &scaling_factor)
+  {
+    gdb_mpq tmp_q;
+
+    tmp_q.read_fixed_point (buf, byte_order, unsigned_p, scaling_factor);
+    mpf_set_q (val, tmp_q.val);
+  }
+
+  /* The destructor.  */
+  ~gdb_mpf () { mpf_clear (val); }
+};
+
+/* See declaration above.  */
+
+template<typename T>
+void
+gdb_mpz::set (T src)
+{
+  mpz_import (val, 1 /* count */, -1 /* order */,
+	      sizeof (T) /* size */, 0 /* endian (0 = native) */,
+	      0 /* nails */, &src /* op */);
+  if (std::is_signed<T>::value && src < 0)
+    {
+      /* mpz_import does not handle the sign, so our value was imported
+	 as an unsigned. Adjust that imported value so as to make it
+	 the correct negative value.  */
+      gdb_mpz neg_offset;
+
+      mpz_ui_pow_ui (neg_offset.val, 2, sizeof (T) * HOST_CHAR_BIT);
+      mpz_sub (val, val, neg_offset.val);
+    }
+}
+
+/* See declaration above.  */
+
+template<typename T>
+T
+gdb_mpz::as_integer () const
+{
+  T result;
+
+  this->safe_export ({(gdb_byte *) &result, sizeof (result)},
+		     0 /* endian (0 = native) */,
+		     !std::is_signed<T>::value /* unsigned_p */);
+
+  return result;
+}
+
+#endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-nat.c ./gdb/gnu-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gnu-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Interface GDB to the GNU Hurd.
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,6 +32,7 @@ extern "C"
 #include <mach/message.h>
 #include <mach/notify.h>
 #include <mach/vm_attributes.h>
+#include <mach/vm_param.h>
 
 #include <hurd.h>
 #include <hurd/interrupt.h>
@@ -64,6 +65,7 @@ extern "C"
 #include "language.h"
 #include "target.h"
 #include "gdbsupport/gdb_wait.h"
+#include "gdbarch.h"
 #include "gdbcmd.h"
 #include "gdbcore.h"
 #include "gdbthread.h"
@@ -82,8 +84,12 @@ extern "C"
 #include "msg_reply_S.h"
 #include "exc_request_U.h"
 #include "msg_U.h"
+
+#include "gnu-nat-mig.h"
 }
 
+struct gnu_nat_target *gnu_target;
+
 static process_t proc_server = MACH_PORT_NULL;
 
 /* If we've sent a proc_wait_request to the proc server, the pid of the
@@ -98,42 +104,12 @@ bool gnu_debug_flag = false;
 /* Forward decls */
 
 static struct inf *make_inf ();
-void inf_clear_wait (struct inf *inf);
-void inf_cleanup (struct inf *inf);
-void inf_startup (struct inf *inf, int pid);
-int inf_update_suspends (struct inf *inf);
-void inf_set_pid (struct inf *inf, pid_t pid);
-void inf_validate_procs (struct inf *inf);
-void inf_steal_exc_ports (struct inf *inf);
-void inf_restore_exc_ports (struct inf *inf);
-void inf_set_threads_resume_sc (struct inf *inf,
-				struct proc *run_thread,
-				int run_others);
-int inf_set_threads_resume_sc_for_signal_thread (struct inf *inf);
-void inf_suspend (struct inf *inf);
-void inf_resume (struct inf *inf);
-void inf_set_step_thread (struct inf *inf, struct proc *proc);
-void inf_detach (struct inf *inf);
-void inf_attach (struct inf *inf, int pid);
-void inf_signal (struct inf *inf, enum gdb_signal sig);
-void inf_continue (struct inf *inf);
 
 #define inf_debug(_inf, msg, args...) \
   do { struct inf *__inf = (_inf); \
        debug ("{inf %d %s}: " msg, __inf->pid, \
        host_address_to_string (__inf) , ##args); } while (0)
 
-void proc_abort (struct proc *proc, int force);
-struct proc *make_proc (struct inf *inf, mach_port_t port, int tid);
-struct proc *_proc_free (struct proc *proc);
-int proc_update_sc (struct proc *proc);
-kern_return_t proc_get_exception_port (struct proc *proc, mach_port_t * port);
-kern_return_t proc_set_exception_port (struct proc *proc, mach_port_t port);
-static mach_port_t _proc_get_exc_port (struct proc *proc);
-void proc_steal_exc_port (struct proc *proc, mach_port_t exc_port);
-void proc_restore_exc_port (struct proc *proc);
-int proc_trace (struct proc *proc, int set);
-
 /* Evaluate RPC_EXPR in a scope with the variables MSGPORT and REFPORT bound
    to INF's msg port and task port respectively.  If it has no msg port,
    EIEIO is returned.  INF must refer to a running process!  */
@@ -262,7 +238,7 @@ __proc_pid (struct proc *proc)
 /* Update PROC's real suspend count to match it's desired one.  Returns true
    if we think PROC is now in a runnable state.  */
 int
-proc_update_sc (struct proc *proc)
+gnu_nat_target::proc_update_sc (struct proc *proc)
 {
   int running;
   int err = 0;
@@ -328,7 +304,7 @@ proc_update_sc (struct proc *proc)
    In particular, a thread is precious if it's running (in which case forcing
    it includes suspending it first), or if it has an exception pending.  */
 void
-proc_abort (struct proc *proc, int force)
+gnu_nat_target::proc_abort (struct proc *proc, int force)
 {
   gdb_assert (proc_is_thread (proc));
 
@@ -365,7 +341,7 @@ proc_abort (struct proc *proc, int force
    that the thread is stopped and aborted first, and sets the state_changed
    field in PROC to true.  */
 thread_state_t
-proc_get_state (struct proc *proc, int will_modify)
+gnu_nat_target::proc_get_state (struct proc *proc, int will_modify)
 {
   int was_aborted = proc->aborted;
 
@@ -402,7 +378,7 @@ proc_get_state (struct proc *proc, int w
 
 /* Set PORT to PROC's exception port.  */
 kern_return_t
-proc_get_exception_port (struct proc * proc, mach_port_t * port)
+gnu_nat_target::proc_get_exception_port (struct proc * proc, mach_port_t * port)
 {
   if (proc_is_task (proc))
     return task_get_exception_port (proc->port, port);
@@ -412,7 +388,7 @@ proc_get_exception_port (struct proc * p
 
 /* Set PROC's exception port to PORT.  */
 kern_return_t
-proc_set_exception_port (struct proc * proc, mach_port_t port)
+gnu_nat_target::proc_set_exception_port (struct proc * proc, mach_port_t port)
 {
   proc_debug (proc, "setting exception port: %lu", port);
   if (proc_is_task (proc))
@@ -422,8 +398,8 @@ proc_set_exception_port (struct proc * p
 }
 
 /* Get PROC's exception port, cleaning up a bit if proc has died.  */
-static mach_port_t
-_proc_get_exc_port (struct proc *proc)
+mach_port_t
+gnu_nat_target::_proc_get_exc_port (struct proc *proc)
 {
   mach_port_t exc_port;
   kern_return_t err = proc_get_exception_port (proc, &exc_port);
@@ -446,7 +422,7 @@ _proc_get_exc_port (struct proc *proc)
    been done.  Stash away any existing exception port so we can
    restore it later.  */
 void
-proc_steal_exc_port (struct proc *proc, mach_port_t exc_port)
+gnu_nat_target::proc_steal_exc_port (struct proc *proc, mach_port_t exc_port)
 {
   mach_port_t cur_exc_port = _proc_get_exc_port (proc);
 
@@ -489,7 +465,7 @@ proc_steal_exc_port (struct proc *proc,
    found there at the time, unless *our* exception port has since been
    overwritten, in which case who knows what's going on.  */
 void
-proc_restore_exc_port (struct proc *proc)
+gnu_nat_target::proc_restore_exc_port (struct proc *proc)
 {
   mach_port_t cur_exc_port = _proc_get_exc_port (proc);
 
@@ -519,7 +495,7 @@ proc_restore_exc_port (struct proc *proc
 /* Turns hardware tracing in PROC on or off when SET is true or false,
    respectively.  Returns true on success.  */
 int
-proc_trace (struct proc *proc, int set)
+gnu_nat_target::proc_trace (struct proc *proc, int set)
 {
   thread_state_t state = proc_get_state (proc, 1);
 
@@ -531,7 +507,7 @@ proc_trace (struct proc *proc, int set)
   if (set)
     {
       /* XXX We don't get the exception unless the thread has its own
-         exception port????  */
+	 exception port????  */
       if (proc->exc_port == MACH_PORT_NULL)
 	proc_steal_exc_port (proc, proc->inf->event_port);
       THREAD_STATE_SET_TRACED (state);
@@ -549,7 +525,7 @@ static int next_thread_id = 1;
 /* Returns a new proc structure with the given fields.  Also adds a
    notification for PORT becoming dead to be sent to INF's notify port.  */
 struct proc *
-make_proc (struct inf *inf, mach_port_t port, int tid)
+gnu_nat_target::make_proc (struct inf *inf, mach_port_t port, int tid)
 {
   kern_return_t err;
   mach_port_t prev_port = MACH_PORT_NULL;
@@ -603,7 +579,7 @@ make_proc (struct inf *inf, mach_port_t
 	proc_steal_exc_port (proc, inf->event_port);
       else
 	/* Just clear thread exception ports -- they default to the
-           task one.  */
+	   task one.  */
 	proc_steal_exc_port (proc, MACH_PORT_NULL);
     }
 
@@ -613,7 +589,7 @@ make_proc (struct inf *inf, mach_port_t
 /* Frees PROC and any resources it uses, and returns the value of PROC's 
    next field.  */
 struct proc *
-_proc_free (struct proc *proc)
+gnu_nat_target::_proc_free (struct proc *proc)
 {
   struct inf *inf = proc->inf;
   struct proc *next = proc->next;
@@ -682,7 +658,7 @@ make_inf (void)
 
 /* Clear INF's target wait status.  */
 void
-inf_clear_wait (struct inf *inf)
+gnu_nat_target::inf_clear_wait (struct inf *inf)
 {
   inf_debug (inf, "clearing wait");
   inf->wait.status.kind = TARGET_WAITKIND_SPURIOUS;
@@ -702,7 +678,7 @@ inf_clear_wait (struct inf *inf)
 
 
 void
-inf_cleanup (struct inf *inf)
+gnu_nat_target::inf_cleanup (struct inf *inf)
 {
   inf_debug (inf, "cleanup");
 
@@ -725,7 +701,7 @@ inf_cleanup (struct inf *inf)
 }
 
 void
-inf_startup (struct inf *inf, int pid)
+gnu_nat_target::inf_startup (struct inf *inf, int pid)
 {
   kern_return_t err;
 
@@ -748,7 +724,7 @@ inf_startup (struct inf *inf, int pid)
 
 /* Close current process, if any, and attach INF to process PORT.  */
 void
-inf_set_pid (struct inf *inf, pid_t pid)
+gnu_nat_target::inf_set_pid (struct inf *inf, pid_t pid)
 {
   task_t task_port;
   struct proc *task = inf->task;
@@ -800,8 +776,8 @@ inf_set_pid (struct inf *inf, pid_t pid)
    proc server state.  Note that the traced field is only updated from
    the proc server state if we do not have a message port.  If we do
    have a message port we'd better look at the tracemask itself.  */
-static void
-inf_validate_procinfo (struct inf *inf)
+void
+gnu_nat_target::inf_validate_procinfo (struct inf *inf)
 {
   char *noise;
   mach_msg_type_number_t noise_len = 0;
@@ -827,8 +803,8 @@ inf_validate_procinfo (struct inf *inf)
 
 /* Validates INF's task suspend count.  If it's higher than we expect,
    verify with the user before `stealing' the extra count.  */
-static void
-inf_validate_task_sc (struct inf *inf)
+void
+gnu_nat_target::inf_validate_task_sc (struct inf *inf)
 {
   char *noise;
   mach_msg_type_number_t noise_len = 0;
@@ -850,9 +826,9 @@ inf_validate_task_sc (struct inf *inf)
   if (inf->task->cur_sc < pi->taskinfo.suspend_count && suspend_count == -1)
     {
       /* The proc server might have suspended the task while stopping
-         it.  This happens when the task is handling a traced signal.
-         Refetch the suspend count.  The proc server should be
-         finished stopping the task by now.  */
+	 it.  This happens when the task is handling a traced signal.
+	 Refetch the suspend count.  The proc server should be
+	 finished stopping the task by now.  */
       suspend_count = pi->taskinfo.suspend_count;
       goto retry;
     }
@@ -879,8 +855,8 @@ inf_validate_task_sc (struct inf *inf)
    is.  If INF is running, the resume_sc count of INF's threads will
    be modified, and the signal thread will briefly be run to change
    the trace state.  */
-static void
-inf_set_traced (struct inf *inf, int on)
+void
+gnu_nat_target::inf_set_traced (struct inf *inf, int on)
 {
   if (on == inf->traced)
     return;
@@ -916,7 +892,7 @@ inf_set_traced (struct inf *inf, int on)
    counts in the safe order.  Returns true if at least one thread is
    thought to be running.  */
 int
-inf_update_suspends (struct inf *inf)
+gnu_nat_target::inf_update_suspends (struct inf *inf)
 {
   struct proc *task = inf->task;
 
@@ -954,7 +930,7 @@ inf_update_suspends (struct inf *inf)
       inf->running = thread_running && task_running;
 
       /* Once any thread has executed some code, we can't depend on the
-         threads list any more.  */
+	 threads list any more.  */
       if (inf->running)
 	inf->threads_up_to_date = 0;
 
@@ -1007,7 +983,7 @@ inf_threads (struct inf *inf, inf_thread
 
 /* Make INF's list of threads be consistent with reality of TASK.  */
 void
-inf_validate_procs (struct inf *inf)
+gnu_nat_target::inf_validate_procs (struct inf *inf)
 {
   thread_array_t threads;
   mach_msg_type_number_t num_threads, i;
@@ -1106,12 +1082,12 @@ inf_validate_procs (struct inf *inf)
 	    if (inferior_ptid == ptid_t (inf->pid))
 	      /* This is the first time we're hearing about thread
 		 ids, after a fork-child.  */
-	      thread_change_ptid (inferior_ptid, ptid);
+	      thread_change_ptid (this, inferior_ptid, ptid);
 	    else if (inf->pending_execs != 0)
 	      /* This is a shell thread.  */
-	      add_thread_silent (ptid);
+	      add_thread_silent (this, ptid);
 	    else
-	      add_thread (ptid);
+	      add_thread (this, ptid);
 	  }
       }
 
@@ -1128,7 +1104,7 @@ inf_update_procs (struct inf *inf)
   if (!inf->task)
     return 0;
   if (!inf->threads_up_to_date)
-    inf_validate_procs (inf);
+    gnu_target->inf_validate_procs (inf);
   return !!inf->task;
 }
 
@@ -1136,8 +1112,8 @@ inf_update_procs (struct inf *inf)
    and others are set to their run_sc if RUN_OTHERS is true, and otherwise
    their pause_sc.  */
 void
-inf_set_threads_resume_sc (struct inf *inf,
-			   struct proc *run_thread, int run_others)
+gnu_nat_target::inf_set_threads_resume_sc (struct inf *inf,
+					   struct proc *run_thread, int run_others)
 {
   struct proc *thread;
 
@@ -1155,7 +1131,7 @@ inf_set_threads_resume_sc (struct inf *i
 /* Cause INF to continue execution immediately; individual threads may still
    be suspended (but their suspend counts will be updated).  */
 void
-inf_resume (struct inf *inf)
+gnu_nat_target::inf_resume (struct inf *inf)
 {
   struct proc *thread;
 
@@ -1180,7 +1156,7 @@ inf_resume (struct inf *inf)
 /* Cause INF to stop execution immediately; individual threads may still
    be running.  */
 void
-inf_suspend (struct inf *inf)
+gnu_nat_target::inf_suspend (struct inf *inf)
 {
   struct proc *thread;
 
@@ -1200,7 +1176,7 @@ inf_suspend (struct inf *inf)
    function changes it to be PROC, changing any old step_thread to be
    a normal one.  A PROC of 0 clears any existing value.  */
 void
-inf_set_step_thread (struct inf *inf, struct proc *thread)
+gnu_nat_target::inf_set_step_thread (struct inf *inf, struct proc *thread)
 {
   gdb_assert (!thread || proc_is_thread (thread));
 
@@ -1226,7 +1202,7 @@ inf_set_step_thread (struct inf *inf, st
    (plus whatever other thread are set to always run).  Returns true if we
    did so, or false if we can't find a signal thread.  */
 int
-inf_set_threads_resume_sc_for_signal_thread (struct inf *inf)
+gnu_nat_target::inf_set_threads_resume_sc_for_signal_thread (struct inf *inf)
 {
   if (inf->signal_thread)
     {
@@ -1248,7 +1224,7 @@ inf_update_signal_thread (struct inf *in
 
 /* Detachs from INF's inferior task, letting it run once again...  */
 void
-inf_detach (struct inf *inf)
+gnu_nat_target::inf_detach (struct inf *inf)
 {
   struct proc *task = inf->task;
 
@@ -1290,7 +1266,7 @@ inf_detach (struct inf *inf)
 /* Attaches INF to the process with process id PID, returning it in a
    suspended state suitable for debugging.  */
 void
-inf_attach (struct inf *inf, int pid)
+gnu_nat_target::inf_attach (struct inf *inf, int pid)
 {
   inf_debug (inf, "attaching: %d", pid);
 
@@ -1303,7 +1279,7 @@ inf_attach (struct inf *inf, int pid)
 
 /* Makes sure that we've got our exception ports entrenched in the process.  */
 void
-inf_steal_exc_ports (struct inf *inf)
+gnu_nat_target::inf_steal_exc_ports (struct inf *inf)
 {
   struct proc *thread;
 
@@ -1318,7 +1294,7 @@ inf_steal_exc_ports (struct inf *inf)
 
 /* Makes sure the process has its own exception ports.  */
 void
-inf_restore_exc_ports (struct inf *inf)
+gnu_nat_target::inf_restore_exc_ports (struct inf *inf)
 {
   struct proc *thread;
 
@@ -1336,7 +1312,7 @@ inf_restore_exc_ports (struct inf *inf)
    signal 0, will continue it.  INF is assumed to be in a paused state, and
    the resume_sc's of INF's threads may be affected.  */
 void
-inf_signal (struct inf *inf, enum gdb_signal sig)
+gnu_nat_target::inf_signal (struct inf *inf, enum gdb_signal sig)
 {
   kern_return_t err = 0;
   int host_sig = gdb_signal_to_host (sig);
@@ -1424,7 +1400,7 @@ inf_signal (struct inf *inf, enum gdb_si
 /* Continue INF without delivering a signal.  This is meant to be used
    when INF does not have a message port.  */
 void
-inf_continue (struct inf *inf)
+gnu_nat_target::inf_continue (struct inf *inf)
 {
   process_t proc;
   kern_return_t err = proc_pid2proc (proc_server, inf->pid, &proc);
@@ -1455,19 +1431,13 @@ struct inf *gnu_current_inf = 0;
 
 /* The inferior being waited for by gnu_wait.  Since GDB is decidely not
    multi-threaded, we don't bother to lock this.  */
-struct inf *waiting_inf;
-
-/* MIG stubs are not yet ready for C++ compilation.  */
-extern "C" int exc_server (mach_msg_header_t *, mach_msg_header_t *);
-extern "C" int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *);
-extern "C" int notify_server (mach_msg_header_t *, mach_msg_header_t *);
-extern "C" int process_reply_server (mach_msg_header_t *, mach_msg_header_t *);
+static struct inf *waiting_inf;
 
 /* Wait for something to happen in the inferior, returning what in STATUS.  */
 
 ptid_t
 gnu_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
-		      int options)
+		      target_wait_flags options)
 {
   struct msg
     {
@@ -1849,7 +1819,7 @@ S_proc_wait_reply (mach_port_t reply, ke
 	  inf->no_wait = 1;
 
 	  /* Since we can't see the inferior's signals, don't trap them.  */
-	  inf_set_traced (inf, 0);
+	  gnu_target->inf_set_traced (inf, 0);
 	}
     }
   else if (pid == inf->pid)
@@ -2139,25 +2109,28 @@ gnu_nat_target::create_inferior (const c
 				 int from_tty)
 {
   struct inf *inf = cur_inf ();
+  inferior *inferior = current_inferior ();
   int pid;
 
   inf_debug (inf, "creating inferior");
 
+  if (!inf->target_is_pushed (this))
+    inf->push_target (this);
+
   pid = fork_inferior (exec_file, allargs, env, gnu_ptrace_me,
-                       NULL, NULL, NULL, NULL);
+		       NULL, NULL, NULL, NULL);
 
   /* We have something that executes now.  We'll be running through
      the shell at this point (if startup-with-shell is true), but the
      pid shouldn't change.  */
-  add_thread_silent (ptid_t (pid));
+  thread_info *thr = add_thread_silent (this, ptid_t (pid));
+  switch_to_thread (thr);
 
   /* Attach to the now stopped child, which is actually a shell...  */
   inf_debug (inf, "attaching to child: %d", pid);
 
   inf_attach (inf, pid);
 
-  push_target (this);
-
   inf->pending_execs = 1;
   inf->nomsg = 1;
   inf->traced = 1;
@@ -2167,7 +2140,7 @@ gnu_nat_target::create_inferior (const c
   inf_resume (inf);
 
   /* We now have thread info.  */
-  thread_change_ptid (inferior_ptid,
+  thread_change_ptid (this, inferior_ptid,
 		      ptid_t (inf->pid, inf_pick_first_thread (), 0));
 
   gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
@@ -2195,7 +2168,6 @@ void
 gnu_nat_target::attach (const char *args, int from_tty)
 {
   int pid;
-  char *exec_file;
   struct inf *inf = cur_inf ();
   struct inferior *inferior;
 
@@ -2206,7 +2178,7 @@ gnu_nat_target::attach (const char *args
 
   if (from_tty)
     {
-      exec_file = (char *) get_exec_file (0);
+      const char *exec_file = get_exec_file (0);
 
       if (exec_file)
 	printf_unfiltered ("Attaching to program `%s', pid %d\n",
@@ -2219,15 +2191,17 @@ gnu_nat_target::attach (const char *args
 
   inf_attach (inf, pid);
 
-  push_target (this);
-
   inferior = current_inferior ();
+  inferior->push_target (this);
+
   inferior_appeared (inferior, pid);
   inferior->attach_flag = 1;
 
   inf_update_procs (inf);
 
-  inferior_ptid = ptid_t (pid, inf_pick_first_thread (), 0);
+  thread_info *thr
+    = find_thread_ptid (this, ptid_t (pid, inf_pick_first_thread ()));
+  switch_to_thread (thr);
 
   /* We have to initialize the terminal settings now, since the code
      below might try to restore them.  */
@@ -2256,11 +2230,9 @@ gnu_nat_target::attach (const char *args
 void
 gnu_nat_target::detach (inferior *inf, int from_tty)
 {
-  int pid;
-
   if (from_tty)
     {
-      char *exec_file = get_exec_file (0);
+      const char *exec_file = get_exec_file (0);
 
       if (exec_file)
 	printf_unfiltered ("Detaching from program `%s' pid %d\n",
@@ -2269,12 +2241,10 @@ gnu_nat_target::detach (inferior *inf, i
 	printf_unfiltered ("Detaching from pid %d\n", gnu_current_inf->pid);
     }
 
-  pid = gnu_current_inf->pid;
-
   inf_detach (gnu_current_inf);
 
-  inferior_ptid = null_ptid;
-  detach_inferior (find_inferior_pid (pid));
+  switch_to_no_thread ();
+  detach_inferior (inf);
 
   maybe_unpush_target ();
 }
@@ -2552,7 +2522,6 @@ gnu_xfer_auxv (gdb_byte *readbuf, const
 		    ? gnu_current_inf->task->port : 0)
 		 : 0);
   process_t proc;
-  int res;
   kern_return_t err;
   vm_address_t entry;
   ElfW(auxv_t) auxv[2];
@@ -2642,7 +2611,6 @@ gnu_nat_target::find_memory_regions (fin
       mach_port_t object_name;
       vm_offset_t offset;
       vm_size_t region_length = VM_MAX_ADDRESS - region_address;
-      vm_address_t old_address = region_address;
 
       err = vm_region (task,
 		       &region_address,
@@ -2841,7 +2809,7 @@ set_task_pause_cmd (int arg, int from_tt
   if (old_sc == 0 && inf->pause_sc != 0)
     /* If the task is currently unsuspended, immediately suspend it,
        otherwise wait until the next time it gets control.  */
-    inf_suspend (inf);
+    gnu_target->inf_suspend (inf);
 }
 
 static void
@@ -2937,8 +2905,8 @@ show_thread_default_detach_sc_cmd (const
 
 /* Steal a send right called NAME in the inferior task, and make it PROC's
    saved exception port.  */
-static void
-steal_exc_port (struct proc *proc, mach_port_t name)
+void
+gnu_nat_target::steal_exc_port (struct proc *proc, mach_port_t name)
 {
   kern_return_t err;
   mach_port_t port;
@@ -2979,7 +2947,7 @@ set_task_exc_port_cmd (const char *args,
 
   if (!args)
     error (_("No argument to \"set task exception-port\" command."));
-  steal_exc_port (inf->task, parse_and_eval_address (args));
+  gnu_target->steal_exc_port (inf->task, parse_and_eval_address (args));
 }
 
 static void
@@ -3039,7 +3007,7 @@ set_signals_cmd (int arg, int from_tty)
 
   if (inf->task && inf->want_signals != inf->traced)
     /* Make this take effect immediately in a running process.  */
-    inf_set_traced (inf, inf->want_signals);
+    gnu_target->inf_set_traced (inf, inf->want_signals);
 }
 
 static void
@@ -3229,25 +3197,31 @@ Show whether new threads are allowed to
 	   _("Show the default detach-suspend-count value for new threads."),
 	   &show_thread_default_cmd_list);
 
-  add_cmd ("signals", class_run, set_signals_cmd, _("\
+  cmd_list_element *set_signals_cmd
+    = add_cmd ("signals", class_run, set_signals_cmd, _("\
 Set whether the inferior process's signals will be intercepted.\n\
 Mach exceptions (such as breakpoint traps) are not affected."),
-	   &setlist);
-  add_alias_cmd ("sigs", "signals", class_run, 1, &setlist);
-  add_cmd ("signals", no_class, show_signals_cmd, _("\
+	       &setlist);
+  add_alias_cmd ("sigs", set_signals_cmd, class_run, 1, &setlist);
+
+  cmd_list_element *show_signals_cmd
+    = add_cmd ("signals", no_class, show_signals_cmd, _("\
 Show whether the inferior process's signals will be intercepted."),
-	   &showlist);
-  add_alias_cmd ("sigs", "signals", no_class, 1, &showlist);
+	       &showlist);
+  add_alias_cmd ("sigs", show_signals_cmd, no_class, 1, &showlist);
 
-  add_cmd ("signal-thread", class_run, set_sig_thread_cmd, _("\
+  cmd_list_element *set_signal_thread_cmd
+    = add_cmd ("signal-thread", class_run, set_sig_thread_cmd, _("\
 Set the thread that gdb thinks is the libc signal thread.\n\
 This thread is run when delivering a signal to a non-stopped process."),
-	   &setlist);
-  add_alias_cmd ("sigthread", "signal-thread", class_run, 1, &setlist);
-  add_cmd ("signal-thread", no_class, show_sig_thread_cmd, _("\
+	       &setlist);
+  add_alias_cmd ("sigthread", set_signal_thread_cmd, class_run, 1, &setlist);
+
+  cmd_list_element *show_signal_thread_cmd
+    = add_cmd ("signal-thread", no_class, show_sig_thread_cmd, _("\
 Set the thread that gdb thinks is the libc signal thread."),
-	   &showlist);
-  add_alias_cmd ("sigthread", "signal-thread", no_class, 1, &showlist);
+	       &showlist);
+  add_alias_cmd ("sigthread", show_signal_thread_cmd, no_class, 1, &showlist);
 
   add_cmd ("stopped", class_run, set_stopped_cmd, _("\
 Set whether gdb thinks the inferior process is stopped as with SIGSTOP.\n\
@@ -3257,23 +3231,24 @@ Stopped process will be continued by sen
 Show whether gdb thinks the inferior process is stopped as with SIGSTOP."),
 	   &showlist);
 
-  add_cmd ("exceptions", class_run, set_exceptions_cmd, _("\
+  cmd_list_element *set_exceptions_cmd
+    = add_cmd ("exceptions", class_run, set_exceptions_cmd, _("\
 Set whether exceptions in the inferior process will be trapped.\n\
 When exceptions are turned off, neither breakpoints nor single-stepping\n\
-will work."),
-	   &setlist);
+will work."), &setlist);
   /* Allow `set exc' despite conflict with `set exception-port'.  */
-  add_alias_cmd ("exc", "exceptions", class_run, 1, &setlist);
+  add_alias_cmd ("exc", set_exceptions_cmd, class_run, 1, &setlist);
+
   add_cmd ("exceptions", no_class, show_exceptions_cmd, _("\
 Show whether exceptions in the inferior process will be trapped."),
 	   &showlist);
 
   add_prefix_cmd ("task", no_class, set_task_cmd,
 		  _("Command prefix for setting task attributes."),
-		  &set_task_cmd_list, "set task ", 0, &setlist);
+		  &set_task_cmd_list, 0, &setlist);
   add_prefix_cmd ("task", no_class, show_task_cmd,
 		  _("Command prefix for showing task attributes."),
-		  &show_task_cmd_list, "show task ", 0, &showlist);
+		  &show_task_cmd_list, 0, &showlist);
 
   add_cmd ("pause", class_run, set_task_pause_cmd, _("\
 Set whether the task is suspended while gdb has control.\n\
@@ -3294,12 +3269,14 @@ used to pause individual threads by defa
 	     "on the thread when detaching."),
 	   &show_task_cmd_list);
 
-  add_cmd ("exception-port", no_class, set_task_exc_port_cmd, _("\
+  cmd_list_element *set_task_exception_port_cmd
+    = add_cmd ("exception-port", no_class, set_task_exc_port_cmd, _("\
 Set the task exception port to which we forward exceptions.\n\
 The argument should be the value of the send right in the task."),
-	   &set_task_cmd_list);
-  add_alias_cmd ("excp", "exception-port", no_class, 1, &set_task_cmd_list);
-  add_alias_cmd ("exc-port", "exception-port", no_class, 1,
+	       &set_task_cmd_list);
+  add_alias_cmd ("excp", set_task_exception_port_cmd, no_class, 1,
+		 &set_task_cmd_list);
+  add_alias_cmd ("exc-port", set_task_exception_port_cmd, no_class, 1,
 		 &set_task_cmd_list);
 
   /* A convenient way of turning on all options require to noninvasively
@@ -3337,7 +3314,7 @@ set_thread_pause_cmd (const char *args,
   if (old_sc == 0 && thread->pause_sc != 0 && thread->inf->pause_sc == 0)
     /* If the task is currently unsuspended, immediately suspend it,
        otherwise wait until the next time it gets control.  */
-    inf_suspend (thread->inf);
+    gnu_target->inf_suspend (thread->inf);
 }
 
 static void
@@ -3398,7 +3375,7 @@ set_thread_exc_port_cmd (const char *arg
 
   if (!args)
     error (_("No argument to \"set thread exception-port\" command."));
-  steal_exc_port (thread, parse_and_eval_address (args));
+  gnu_target->steal_exc_port (thread, parse_and_eval_address (args));
 }
 
 #if 0
@@ -3442,17 +3419,17 @@ add_thread_commands (void)
 {
   add_prefix_cmd ("thread", no_class, set_thread_cmd,
 		  _("Command prefix for setting thread properties."),
-		  &set_thread_cmd_list, "set thread ", 0, &setlist);
+		  &set_thread_cmd_list, 0, &setlist);
   add_prefix_cmd ("default", no_class, show_thread_cmd,
 		  _("Command prefix for setting default thread properties."),
-		  &set_thread_default_cmd_list, "set thread default ", 0,
+		  &set_thread_default_cmd_list, 0,
 		  &set_thread_cmd_list);
   add_prefix_cmd ("thread", no_class, set_thread_default_cmd,
 		  _("Command prefix for showing thread properties."),
-		  &show_thread_cmd_list, "show thread ", 0, &showlist);
+		  &show_thread_cmd_list, 0, &showlist);
   add_prefix_cmd ("default", no_class, show_thread_default_cmd,
 		  _("Command prefix for showing default thread properties."),
-		  &show_thread_default_cmd_list, "show thread default ", 0,
+		  &show_thread_default_cmd_list, 0,
 		  &show_thread_cmd_list);
 
   add_cmd ("pause", class_run, set_thread_pause_cmd, _("\
@@ -3490,8 +3467,9 @@ Set the thread exception port to which w
 This overrides the task exception port.\n\
 The argument should be the value of the send right in the task."),
 	   &set_thread_cmd_list);
-  add_alias_cmd ("excp", "exception-port", no_class, 1, &set_thread_cmd_list);
-  add_alias_cmd ("exc-port", "exception-port", no_class, 1,
+  add_alias_cmd ("excp", set_thread_exception_port_cmd, no_class, 1,
+		 &set_thread_cmd_list);
+  add_alias_cmd ("exc-port", set_thread_exception_port_cmd, no_class, 1,
 		 &set_thread_cmd_list);
 
   add_cmd ("takeover-suspend-count", no_class, thread_takeover_sc_cmd, _("\
@@ -3501,8 +3479,9 @@ to the thread's initial suspend-count wh
 	   &thread_cmd_list);
 }
 
+void _initialize_gnu_nat ();
 void
-_initialize_gnu_nat (void)
+_initialize_gnu_nat ()
 {
   proc_server = getproc ();
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-nat.h ./gdb/gnu-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gnu-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Common things used by the various *gnu-nat.c files
-   Copyright (C) 1995-2020 Free Software Foundation, Inc.
+   Copyright (C) 1995-2021 Free Software Foundation, Inc.
 
    Written by Miles Bader <miles@gnu.ai.mit.edu>
 
@@ -96,12 +96,6 @@ struct proc
 
 extern int __proc_pid (struct proc *proc);
 
-/* Make sure that the state field in PROC is up to date, and return a
-   pointer to it, or 0 if something is wrong.  If WILL_MODIFY is true,
-   makes sure that the thread is stopped and aborted first, and sets
-   the state_changed field in PROC to true.  */
-extern thread_state_t proc_get_state (struct proc *proc, int will_modify);
-
 /* Return printable description of proc.  */
 extern char *proc_string (struct proc *proc);
 
@@ -111,11 +105,11 @@ extern char *proc_string (struct proc *p
 	      __proc_pid (__proc), __proc->tid, \
 	      host_address_to_string (__proc) , ##args); } while (0)
 
-extern int gnu_debug_flag;
+extern bool gnu_debug_flag;
 
 #define debug(msg, args...) \
  do { if (gnu_debug_flag) \
-        fprintf_unfiltered (gdb_stdlog, "%s:%d: " msg "\r\n", \
+	fprintf_unfiltered (gdb_stdlog, "%s:%d: " msg "\r\n", \
 			    __FILE__ , __LINE__ , ##args); } while (0)
 
 /* A prototype generic GNU/Hurd target.  The client can override it
@@ -130,7 +124,7 @@ struct gnu_nat_target : public inf_child
   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;
   enum target_xfer_status xfer_partial (enum target_object object,
 					const char *annex,
 					gdb_byte *readbuf,
@@ -148,6 +142,52 @@ struct gnu_nat_target : public inf_child
   bool thread_alive (ptid_t ptid) override;
   std::string pid_to_str (ptid_t) override;
   void stop (ptid_t) override;
+
+  void inf_validate_procs (struct inf *inf);
+  void inf_suspend (struct inf *inf);
+  void inf_set_traced (struct inf *inf, int on);
+  void steal_exc_port (struct proc *proc, mach_port_t name);
+
+  /* Make sure that the state field in PROC is up to date, and return a
+     pointer to it, or 0 if something is wrong.  If WILL_MODIFY is true,
+     makes sure that the thread is stopped and aborted first, and sets
+     the state_changed field in PROC to true.  */
+  thread_state_t proc_get_state (struct proc *proc, int will_modify);
+
+private:
+  void inf_clear_wait (struct inf *inf);
+  void inf_cleanup (struct inf *inf);
+  void inf_startup (struct inf *inf, int pid);
+  int inf_update_suspends (struct inf *inf);
+  void inf_set_pid (struct inf *inf, pid_t pid);
+  void inf_steal_exc_ports (struct inf *inf);
+  void inf_validate_procinfo (struct inf *inf);
+  void inf_validate_task_sc (struct inf *inf);
+  void inf_restore_exc_ports (struct inf *inf);
+  void inf_set_threads_resume_sc (struct inf *inf,
+				  struct proc *run_thread,
+				  int run_others);
+  int inf_set_threads_resume_sc_for_signal_thread (struct inf *inf);
+  void inf_resume (struct inf *inf);
+  void inf_set_step_thread (struct inf *inf, struct proc *proc);
+  void inf_detach (struct inf *inf);
+  void inf_attach (struct inf *inf, int pid);
+  void inf_signal (struct inf *inf, enum gdb_signal sig);
+  void inf_continue (struct inf *inf);
+
+  struct proc *make_proc (struct inf *inf, mach_port_t port, int tid);
+  void proc_abort (struct proc *proc, int force);
+  struct proc *_proc_free (struct proc *proc);
+  int proc_update_sc (struct proc *proc);
+  kern_return_t proc_get_exception_port (struct proc *proc, mach_port_t * port);
+  kern_return_t proc_set_exception_port (struct proc *proc, mach_port_t port);
+  mach_port_t _proc_get_exc_port (struct proc *proc);
+  void proc_steal_exc_port (struct proc *proc, mach_port_t exc_port);
+  void proc_restore_exc_port (struct proc *proc);
+  int proc_trace (struct proc *proc, int set);
 };
 
+/* The final/concrete instance.  */
+extern gnu_nat_target *gnu_target;
+
 #endif /* GNU_NAT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-nat-mig.h ./gdb/gnu-nat-mig.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-nat-mig.h	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/gnu-nat-mig.h	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,31 @@
+/* Common things used by the various *gnu-nat.c files
+   Copyright (C) 2020-2021 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/>.  */
+
+#ifndef GNU_NAT_MIG_H
+#define GNU_NAT_MIG_H
+
+#include <mach/boolean.h>
+#include <mach/message.h>
+
+boolean_t exc_server (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
+boolean_t msg_reply_server (mach_msg_header_t *InHeadP,
+			    mach_msg_header_t *OutHeadP);
+boolean_t notify_server (mach_msg_header_t *InHeadP,
+			 mach_msg_header_t *OutHeadP);
+boolean_t process_reply_server (mach_msg_header_t *InHeadP,
+				mach_msg_header_t *OutHeadP);
+
+#endif /* GNU_NAT_MIG_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-v2-abi.c ./gdb/gnu-v2-abi.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-v2-abi.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gnu-v2-abi.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Abstraction of GNU v2 abi.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    Contributed by Daniel Berlin <dberlin@redhat.com>
 
@@ -29,7 +29,7 @@
 #include "cp-support.h"
 #include <ctype.h>
 
-struct cp_abi_ops gnu_v2_abi_ops;
+static cp_abi_ops gnu_v2_abi_ops;
 
 static int vb_match (struct type *, int, struct type *);
 
@@ -132,17 +132,17 @@ gnuv2_virtual_fn_field (struct value **a
 
   /* With older versions of g++, the vtbl field pointed to an array
      of structures.  Nowadays it points directly to the structure.  */
-  if (TYPE_CODE (value_type (vtbl)) == TYPE_CODE_PTR
-      && TYPE_CODE (TYPE_TARGET_TYPE (value_type (vtbl))) == TYPE_CODE_ARRAY)
+  if (value_type (vtbl)->code () == TYPE_CODE_PTR
+      && TYPE_TARGET_TYPE (value_type (vtbl))->code () == TYPE_CODE_ARRAY)
     {
       /* Handle the case where the vtbl field points to an
-         array of structures.  */
+	 array of structures.  */
       vtbl = value_ind (vtbl);
 
       /* Index into the virtual function table.  This is hard-coded because
-         looking up a field is not cheap, and it may be important to save
-         time, e.g. if the user has set a conditional breakpoint calling
-         a virtual function.  */
+	 looking up a field is not cheap, and it may be important to save
+	 time, e.g. if the user has set a conditional breakpoint calling
+	 a virtual function.  */
       entry = value_subscript (vtbl, vi);
     }
   else
@@ -155,7 +155,7 @@ gnuv2_virtual_fn_field (struct value **a
 
   entry_type = check_typedef (value_type (entry));
 
-  if (TYPE_CODE (entry_type) == TYPE_CODE_STRUCT)
+  if (entry_type->code () == TYPE_CODE_STRUCT)
     {
       /* Move the `this' pointer according to the virtual function table.  */
       set_value_offset (arg1, value_offset (arg1)
@@ -169,7 +169,7 @@ gnuv2_virtual_fn_field (struct value **a
 
       vfn = value_field (entry, 2);
     }
-  else if (TYPE_CODE (entry_type) == TYPE_CODE_PTR)
+  else if (entry_type->code () == TYPE_CODE_PTR)
     vfn = entry;
   else
     error (_("I'm confused:  virtual function table has bad type"));
@@ -206,7 +206,7 @@ gnuv2_value_rtti_type (struct value *v,
   known_type = value_type (v);
   known_type = check_typedef (known_type);
   /* RTTI works only or class objects.  */
-  if (TYPE_CODE (known_type) != TYPE_CODE_STRUCT)
+  if (known_type->code () != TYPE_CODE_STRUCT)
     return NULL;
 
   /* Plan on this changing in the future as i get around to setting
@@ -230,7 +230,7 @@ gnuv2_value_rtti_type (struct value *v,
     {
       v = value_cast (btype, v);
       if (using_enc)
-        *using_enc=1;
+	*using_enc=1;
     }
   /* We can't use value_ind here, because it would want to use RTTI, and
      we'd waste a bunch of time figuring out we already know the type.
@@ -262,26 +262,26 @@ gnuv2_value_rtti_type (struct value *v,
   if (TYPE_N_BASECLASSES(rtti_type) > 1 &&  full && (*full) != 1)
     {
       if (top)
-        *top = TYPE_BASECLASS_BITPOS (rtti_type,
+	*top = TYPE_BASECLASS_BITPOS (rtti_type,
 				      TYPE_VPTR_FIELDNO(rtti_type)) / 8;
       if (top && ((*top) >0))
-        {
-          if (TYPE_LENGTH(rtti_type) > TYPE_LENGTH(known_type))
-            {
-              if (full)
-                *full=0;
-            }
-          else
-            {
-              if (full)
-                *full=1;
-            }
-        }
+	{
+	  if (TYPE_LENGTH(rtti_type) > TYPE_LENGTH(known_type))
+	    {
+	      if (full)
+		*full=0;
+	    }
+	  else
+	    {
+	      if (full)
+		*full=1;
+	    }
+	}
     }
   else
     {
       if (full)
-        *full=1;
+	*full=1;
     }
 
   return rtti_type;
@@ -312,9 +312,9 @@ vb_match (struct type *type, int index,
 
   /* It's a virtual baseclass pointer, now we just need to find out whether
      it is for this baseclass.  */
-  fieldtype = TYPE_FIELD_TYPE (type, index);
+  fieldtype = type->field (index).type ();
   if (fieldtype == NULL
-      || TYPE_CODE (fieldtype) != TYPE_CODE_PTR)
+      || fieldtype->code () != TYPE_CODE_PTR)
     /* "Can't happen".  */
     return 0;
 
@@ -325,10 +325,10 @@ vb_match (struct type *type, int index,
   if (TYPE_TARGET_TYPE (fieldtype) == basetype)
     return 1;
 
-  if (TYPE_NAME (basetype) != NULL
-      && TYPE_NAME (TYPE_TARGET_TYPE (fieldtype)) != NULL
-      && strcmp (TYPE_NAME (basetype),
-		 TYPE_NAME (TYPE_TARGET_TYPE (fieldtype))) == 0)
+  if (basetype->name () != NULL
+      && TYPE_TARGET_TYPE (fieldtype)->name () != NULL
+      && strcmp (basetype->name (),
+		 TYPE_TARGET_TYPE (fieldtype)->name ()) == 0)
     return 1;
   return 0;
 }
@@ -348,11 +348,11 @@ gnuv2_baseclass_offset (struct type *typ
   if (BASETYPE_VIA_VIRTUAL (type, index))
     {
       /* Must hunt for the pointer to this virtual baseclass.  */
-      int i, len = TYPE_NFIELDS (type);
+      int i, len = type->num_fields ();
       int n_baseclasses = TYPE_N_BASECLASSES (type);
 
       /* First look for the virtual baseclass pointer
-         in the fields.  */
+	 in the fields.  */
       for (i = n_baseclasses; i < len; i++)
 	{
 	  if (vb_match (type, i, basetype))
@@ -362,7 +362,7 @@ gnuv2_baseclass_offset (struct type *typ
 	      int field_length;
 	      CORE_ADDR addr;
 
-	      field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
+	      field_type = check_typedef (type->field (i).type ());
 	      field_offset = TYPE_FIELD_BITPOS (type, i) / 8;
 	      field_length = TYPE_LENGTH (field_type);
 
@@ -413,8 +413,9 @@ init_gnuv2_ops (void)
   gnu_v2_abi_ops.baseclass_offset = gnuv2_baseclass_offset;
 }
 
+void _initialize_gnu_v2_abi ();
 void
-_initialize_gnu_v2_abi (void)
+_initialize_gnu_v2_abi ()
 {
   init_gnuv2_ops ();
   register_cp_abi (&gnu_v2_abi_ops);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-v3-abi.c ./gdb/gnu-v3-abi.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gnu-v3-abi.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gnu-v3-abi.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Abstraction of GNU v3 abi.
    Contributed by Jim Blandy <jimb@redhat.com>
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,12 +23,15 @@
 #include "cp-abi.h"
 #include "cp-support.h"
 #include "demangle.h"
+#include "dwarf2.h"
 #include "objfiles.h"
 #include "valprint.h"
 #include "c-lang.h"
 #include "typeprint.h"
 #include <algorithm>
 #include "cli/cli-style.h"
+#include "dwarf2/loc.h"
+#include "inferior.h"
 
 static struct cp_abi_ops gnu_v3_abi_ops;
 
@@ -58,25 +61,25 @@ gnuv3_is_operator_name (const char *name
    struct gdb_gnu_v3_abi_vtable {
 
      / * An array of virtual call and virtual base offsets.  The real
-         length of this array depends on the class hierarchy; we use
-         negative subscripts to access the elements.  Yucky, but
-         better than the alternatives.  * /
+	 length of this array depends on the class hierarchy; we use
+	 negative subscripts to access the elements.  Yucky, but
+	 better than the alternatives.  * /
      ptrdiff_t vcall_and_vbase_offsets[0];
 
      / * The offset from a virtual pointer referring to this table
-         to the top of the complete object.  * /
+	 to the top of the complete object.  * /
      ptrdiff_t offset_to_top;
 
      / * The type_info pointer for this class.  This is really a
-         std::type_info *, but GDB doesn't really look at the
-         type_info object itself, so we don't bother to get the type
-         exactly right.  * /
+	 std::type_info *, but GDB doesn't really look at the
+	 type_info object itself, so we don't bother to get the type
+	 exactly right.  * /
      void *type_info;
 
      / * Virtual table pointers in objects point here.  * /
 
      / * Virtual function pointers.  Like the vcall/vbase array, the
-         real length of this table depends on the class hierarchy.  * /
+	 real length of this table depends on the class hierarchy.  * /
      void (*virtual_functions[0]) ();
 
    };
@@ -133,39 +136,39 @@ build_gdb_vtable_type (struct gdbarch *a
 
   /* ptrdiff_t vcall_and_vbase_offsets[0]; */
   FIELD_NAME (*field) = "vcall_and_vbase_offsets";
-  FIELD_TYPE (*field) = lookup_array_range_type (ptrdiff_type, 0, -1);
+  field->set_type (lookup_array_range_type (ptrdiff_type, 0, -1));
   SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
-  offset += TYPE_LENGTH (FIELD_TYPE (*field));
+  offset += TYPE_LENGTH (field->type ());
   field++;
 
   /* ptrdiff_t offset_to_top; */
   FIELD_NAME (*field) = "offset_to_top";
-  FIELD_TYPE (*field) = ptrdiff_type;
+  field->set_type (ptrdiff_type);
   SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
-  offset += TYPE_LENGTH (FIELD_TYPE (*field));
+  offset += TYPE_LENGTH (field->type ());
   field++;
 
   /* void *type_info; */
   FIELD_NAME (*field) = "type_info";
-  FIELD_TYPE (*field) = void_ptr_type;
+  field->set_type (void_ptr_type);
   SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
-  offset += TYPE_LENGTH (FIELD_TYPE (*field));
+  offset += TYPE_LENGTH (field->type ());
   field++;
 
   /* void (*virtual_functions[0]) (); */
   FIELD_NAME (*field) = "virtual_functions";
-  FIELD_TYPE (*field) = lookup_array_range_type (ptr_to_void_fn_type, 0, -1);
+  field->set_type (lookup_array_range_type (ptr_to_void_fn_type, 0, -1));
   SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
-  offset += TYPE_LENGTH (FIELD_TYPE (*field));
+  offset += TYPE_LENGTH (field->type ());
   field++;
 
   /* We assumed in the allocation above that there were four fields.  */
   gdb_assert (field == (field_list + 4));
 
   t = arch_type (arch, TYPE_CODE_STRUCT, offset * TARGET_CHAR_BIT, NULL);
-  TYPE_NFIELDS (t) = field - field_list;
-  TYPE_FIELDS (t) = field_list;
-  TYPE_NAME (t) = "gdb_gnu_v3_abi_vtable";
+  t->set_num_fields (field - field_list);
+  t->set_fields (field_list);
+  t->set_name ("gdb_gnu_v3_abi_vtable");
   INIT_CPLUS_SPECIFIC (t);
 
   return make_type_with_address_space (t, TYPE_INSTANCE_FLAG_CODE_SPACE);
@@ -180,7 +183,7 @@ vtable_ptrdiff_type (struct gdbarch *gdb
     = (struct type *) gdbarch_data (gdbarch, vtable_type_gdbarch_data);
 
   /* The "offset_to_top" field has the appropriate (ptrdiff_t) type.  */
-  return TYPE_FIELD_TYPE (vtable_type, vtable_field_offset_to_top);
+  return vtable_type->field (vtable_field_offset_to_top).type ();
 }
 
 /* Return the offset from the start of the imaginary `struct
@@ -193,7 +196,7 @@ vtable_address_point_offset (struct gdba
     = (struct type *) gdbarch_data (gdbarch, vtable_type_gdbarch_data);
 
   return (TYPE_FIELD_BITPOS (vtable_type, vtable_field_virtual_functions)
-          / TARGET_CHAR_BIT);
+	  / TARGET_CHAR_BIT);
 }
 
 
@@ -206,10 +209,10 @@ gnuv3_dynamic_class (struct type *type)
   int fieldnum, fieldelem;
 
   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);
 
-  if (TYPE_CODE (type) == TYPE_CODE_UNION)
+  if (type->code () == TYPE_CODE_UNION)
     return 0;
 
   if (TYPE_CPLUS_DYNAMIC (type))
@@ -219,7 +222,7 @@ gnuv3_dynamic_class (struct type *type)
 
   for (fieldnum = 0; fieldnum < TYPE_N_BASECLASSES (type); fieldnum++)
     if (BASETYPE_VIA_VIRTUAL (type, fieldnum)
-	|| gnuv3_dynamic_class (TYPE_FIELD_TYPE (type, fieldnum)))
+	|| gnuv3_dynamic_class (type->field (fieldnum).type ()))
       {
 	TYPE_CPLUS_DYNAMIC (type) = 1;
 	return 1;
@@ -257,7 +260,7 @@ gnuv3_get_vtable (struct gdbarch *gdbarc
   CORE_ADDR vtable_address;
 
   container_type = check_typedef (container_type);
-  gdb_assert (TYPE_CODE (container_type) == TYPE_CODE_STRUCT);
+  gdb_assert (container_type->code () == TYPE_CODE_STRUCT);
 
   /* If this type does not have a virtual table, don't read the first
      field.  */
@@ -288,7 +291,7 @@ gnuv3_get_vtable (struct gdbarch *gdbarc
 
 static struct type *
 gnuv3_rtti_type (struct value *value,
-                 int *full_p, LONGEST *top_p, int *using_enc_p)
+		 int *full_p, LONGEST *top_p, int *using_enc_p)
 {
   struct gdbarch *gdbarch;
   struct type *values_type = check_typedef (value_type (value));
@@ -301,12 +304,12 @@ gnuv3_rtti_type (struct value *value,
   const char *atsign;
 
   /* We only have RTTI for dynamic class objects.  */
-  if (TYPE_CODE (values_type) != TYPE_CODE_STRUCT
+  if (values_type->code () != TYPE_CODE_STRUCT
       || !gnuv3_dynamic_class (values_type))
     return NULL;
 
   /* Determine architecture.  */
-  gdbarch = get_type_arch (values_type);
+  gdbarch = values_type->arch ();
 
   if (using_enc_p)
     *using_enc_p = 0;
@@ -319,7 +322,7 @@ gnuv3_rtti_type (struct value *value,
   /* Find the linker symbol for this vtable.  */
   vtable_symbol
     = lookup_minimal_symbol_by_pc (value_address (vtable)
-                                   + value_embedded_offset (vtable)).minsym;
+				   + value_embedded_offset (vtable)).minsym;
   if (! vtable_symbol)
     return NULL;
   
@@ -365,8 +368,8 @@ gnuv3_rtti_type (struct value *value,
 
   if (full_p)
     *full_p = (- offset_to_top == value_embedded_offset (value)
-               && (TYPE_LENGTH (value_enclosing_type (value))
-                   >= TYPE_LENGTH (run_time_type)));
+	       && (TYPE_LENGTH (value_enclosing_type (value))
+		   >= TYPE_LENGTH (run_time_type)));
   if (top_p)
     *top_p = - offset_to_top;
   return run_time_type;
@@ -388,7 +391,7 @@ gnuv3_get_virtual_fn (struct gdbarch *gd
 
   /* Fetch the appropriate function pointer from the vtable.  */
   vfn = value_subscript (value_field (vtable, vtable_field_virtual_functions),
-                         vtable_index);
+			 vtable_index);
 
   /* If this architecture uses function descriptors directly in the vtable,
      then the address of the vtable entry is actually a "function pointer"
@@ -409,18 +412,18 @@ gnuv3_get_virtual_fn (struct gdbarch *gd
 
 static struct value *
 gnuv3_virtual_fn_field (struct value **value_p,
-                        struct fn_field *f, int j,
+			struct fn_field *f, int j,
 			struct type *vfn_base, int offset)
 {
   struct type *values_type = check_typedef (value_type (*value_p));
   struct gdbarch *gdbarch;
 
   /* Some simple sanity checks.  */
-  if (TYPE_CODE (values_type) != TYPE_CODE_STRUCT)
+  if (values_type->code () != TYPE_CODE_STRUCT)
     error (_("Only classes can have virtual functions."));
 
   /* Determine architecture.  */
-  gdbarch = get_type_arch (values_type);
+  gdbarch = values_type->arch ();
 
   /* Cast our value to the base class which defines this virtual
      function.  This takes care of any necessary `this'
@@ -452,7 +455,7 @@ gnuv3_baseclass_offset (struct type *typ
   long int cur_base_offset, base_offset;
 
   /* Determine architecture.  */
-  gdbarch = get_type_arch (type);
+  gdbarch = type->arch ();
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
 
   /* If it isn't a virtual base, this is easy.  The offset is in the
@@ -460,6 +463,30 @@ gnuv3_baseclass_offset (struct type *typ
   if (!BASETYPE_VIA_VIRTUAL (type, index))
     return TYPE_BASECLASS_BITPOS (type, index) / 8;
 
+  /* If we have a DWARF expression for the offset, evaluate it.  */
+  if (TYPE_FIELD_LOC_KIND (type, index) == FIELD_LOC_KIND_DWARF_BLOCK)
+    {
+      struct dwarf2_property_baton baton;
+      baton.property_type
+	= lookup_pointer_type (type->field (index).type ());
+      baton.locexpr = *TYPE_FIELD_DWARF_BLOCK (type, index);
+
+      struct dynamic_prop prop;
+      prop.set_locexpr (&baton);
+
+      struct property_addr_info addr_stack;
+      addr_stack.type = type;
+      /* Note that we don't set "valaddr" here.  Doing so causes
+	 regressions.  FIXME.  */
+      addr_stack.addr = address + embedded_offset;
+      addr_stack.next = nullptr;
+
+      CORE_ADDR result;
+      if (dwarf2_evaluate_property (&prop, nullptr, &addr_stack, &result,
+				    true))
+	return (int) (result - addr_stack.addr);
+    }
+
   /* To access a virtual base, we need to use the vbase offset stored in
      our vtable.  Recent GCC versions provide this information.  If it isn't
      available, we could get what we needed from RTTI, or from drawing the
@@ -523,7 +550,7 @@ gnuv3_find_method_in (struct type *domai
 	continue;
 
       pos = TYPE_BASECLASS_BITPOS (domain, i) / 8;
-      basetype = TYPE_FIELD_TYPE (domain, i);
+      basetype = domain->field (i).type ();
       /* Recurse with a modified adjustment.  We don't need to adjust
 	 voffset.  */
       if (adjustment >= pos && adjustment < pos + TYPE_LENGTH (basetype))
@@ -585,7 +612,7 @@ gnuv3_print_method_ptr (const gdb_byte *
 			struct ui_file *stream)
 {
   struct type *self_type = TYPE_SELF_TYPE (type);
-  struct gdbarch *gdbarch = get_type_arch (self_type);
+  struct gdbarch *gdbarch = self_type->arch ();
   CORE_ADDR ptr_value;
   LONGEST adjustment;
   int vbit;
@@ -665,9 +692,7 @@ gnuv3_print_method_ptr (const gdb_byte *
 static int
 gnuv3_method_ptr_size (struct type *type)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
-
-  return 2 * TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr);
+  return 2 * TYPE_LENGTH (builtin_type (type->arch ())->builtin_data_ptr);
 }
 
 /* GNU v3 implementation of cplus_make_method_ptr.  */
@@ -676,7 +701,7 @@ static void
 gnuv3_make_method_ptr (struct type *type, gdb_byte *contents,
 		       CORE_ADDR value, int is_virtual)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
+  struct gdbarch *gdbarch = type->arch ();
   int size = TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr);
   enum bfd_endian byte_order = type_byte_order (type);
 
@@ -719,7 +744,7 @@ gnuv3_method_ptr_to_value (struct value
   method_type = TYPE_TARGET_TYPE (check_typedef (value_type (method_ptr)));
 
   /* Extract the pointer to member.  */
-  gdbarch = get_type_arch (self_type);
+  gdbarch = self_type->arch ();
   vbit = gnuv3_decode_method_ptr (gdbarch, contents, &ptr_value, &adjustment);
 
   /* First convert THIS to match the containing type of the pointer to
@@ -822,7 +847,7 @@ compute_vtable_size (htab_t offset_hash,
   void **slot;
   struct value_and_voffset search_vo, *current_vo;
 
-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT);
+  gdb_assert (type->code () == TYPE_CODE_STRUCT);
 
   /* If the object is not dynamic, then we are done; as it cannot have
      dynamic base types either.  */
@@ -937,7 +962,7 @@ gnuv3_print_vtable (struct value *value)
 
   value = coerce_ref (value);
   type = check_typedef (value_type (value));
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+  if (type->code () == TYPE_CODE_PTR)
     {
       value = value_ind (value);
       type = check_typedef (value_type (value));
@@ -952,10 +977,10 @@ gnuv3_print_vtable (struct value *value)
       type = check_typedef (value_type (value));
     }
 
-  gdbarch = get_type_arch (type);
+  gdbarch = type->arch ();
 
   vtable = NULL;
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     vtable = gnuv3_get_vtable (gdbarch, type,
 			       value_as_address (value_addr (value)));
 
@@ -1012,24 +1037,24 @@ build_std_type_info_type (struct gdbarch
 
   /* The vtable.  */
   FIELD_NAME (*field) = "_vptr.type_info";
-  FIELD_TYPE (*field) = void_ptr_type;
+  field->set_type (void_ptr_type);
   SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
-  offset += TYPE_LENGTH (FIELD_TYPE (*field));
+  offset += TYPE_LENGTH (field->type ());
   field++;
 
   /* The name.  */
   FIELD_NAME (*field) = "__name";
-  FIELD_TYPE (*field) = char_ptr_type;
+  field->set_type (char_ptr_type);
   SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
-  offset += TYPE_LENGTH (FIELD_TYPE (*field));
+  offset += TYPE_LENGTH (field->type ());
   field++;
 
   gdb_assert (field == (field_list + 2));
 
   t = arch_type (arch, TYPE_CODE_STRUCT, offset * TARGET_CHAR_BIT, NULL);
-  TYPE_NFIELDS (t) = field - field_list;
-  TYPE_FIELDS (t) = field_list;
-  TYPE_NAME (t) = "gdb_gnu_v3_type_info";
+  t->set_num_fields (field - field_list);
+  t->set_fields (field_list);
+  t->set_name ("gdb_gnu_v3_type_info");
   INIT_CPLUS_SPECIFIC (t);
 
   return t;
@@ -1063,7 +1088,8 @@ gnuv3_get_typeid (struct value *value)
   struct type *type;
   struct gdbarch *gdbarch;
   struct value *result;
-  std::string type_name, canonical;
+  std::string type_name;
+  gdb::unique_xmalloc_ptr<char> canonical;
 
   /* We have to handle values a bit trickily here, to allow this code
      to work properly with non_lvalue values that are really just
@@ -1075,12 +1101,12 @@ gnuv3_get_typeid (struct value *value)
 
   /* In the non_lvalue case, a reference might have slipped through
      here.  */
-  if (TYPE_CODE (type) == TYPE_CODE_REF)
+  if (type->code () == TYPE_CODE_REF)
     type = check_typedef (TYPE_TARGET_TYPE (type));
 
   /* Ignore top-level cv-qualifiers.  */
   type = make_cv_type (0, 0, type, NULL);
-  gdbarch = get_type_arch (type);
+  gdbarch = type->arch ();
 
   type_name = type_to_string (type);
   if (type_name.empty ())
@@ -1091,14 +1117,15 @@ gnuv3_get_typeid (struct value *value)
      uses.  E.g., GDB tends to use "const char *" as a type name, but
      the demangler uses "char const *".  */
   canonical = cp_canonicalize_string (type_name.c_str ());
-  if (!canonical.empty ())
-    type_name = canonical;
+  const char *name = (canonical == nullptr
+		      ? type_name.c_str ()
+		      : canonical.get ());
 
   typeinfo_type = gnuv3_get_typeid_type (gdbarch);
 
   /* We check for lval_memory because in the "typeid (type-id)" case,
      the type is passed via a not_lval value object.  */
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT
+  if (type->code () == TYPE_CODE_STRUCT
       && value_lval_const (value) == lval_memory
       && gnuv3_dynamic_class (type))
     {
@@ -1108,19 +1135,19 @@ gnuv3_get_typeid (struct value *value)
       vtable = gnuv3_get_vtable (gdbarch, type, address);
       if (vtable == NULL)
 	error (_("cannot find typeinfo for object of type '%s'"),
-	       type_name.c_str ());
+	       name);
       typeinfo_value = value_field (vtable, vtable_field_type_info);
       result = value_ind (value_cast (make_pointer_type (typeinfo_type, NULL),
 				      typeinfo_value));
     }
   else
     {
-      std::string sym_name = std::string ("typeinfo for ") + type_name;
+      std::string sym_name = std::string ("typeinfo for ") + name;
       bound_minimal_symbol minsym
 	= lookup_minimal_symbol (sym_name.c_str (), NULL, NULL);
 
       if (minsym.minsym == NULL)
-	error (_("could not find typeinfo symbol for '%s'"), type_name.c_str ());
+	error (_("could not find typeinfo symbol for '%s'"), name);
 
       result = value_at_lazy (typeinfo_type, BMSYMBOL_VALUE_ADDRESS (minsym));
     }
@@ -1133,7 +1160,7 @@ gnuv3_get_typeid (struct value *value)
 static std::string
 gnuv3_get_typename_from_type_info (struct value *type_info_ptr)
 {
-  struct gdbarch *gdbarch = get_type_arch (value_type (type_info_ptr));
+  struct gdbarch *gdbarch = value_type (type_info_ptr)->arch ();
   struct bound_minimal_symbol typeinfo_sym;
   CORE_ADDR addr;
   const char *symname;
@@ -1217,8 +1244,8 @@ gnuv3_skip_trampoline (struct frame_info
      (powerpc 64 for example).  Make sure to retrieve the address
      of the real function from the function descriptor before passing on
      the address to other layers of GDB.  */
-  func_addr = gdbarch_convert_from_func_ptr_addr (gdbarch, method_stop_pc,
-						  current_top_target ());
+  func_addr = gdbarch_convert_from_func_ptr_addr
+    (gdbarch, method_stop_pc, current_inferior ()->top_target ());
   if (func_addr != 0)
     method_stop_pc = func_addr;
 
@@ -1230,7 +1257,128 @@ gnuv3_skip_trampoline (struct frame_info
   return real_stop_pc;
 }
 
-/* Return nonzero if a type should be passed by reference.
+/* A member function is in one these states.  */
+
+enum definition_style
+{
+  DOES_NOT_EXIST_IN_SOURCE,
+  DEFAULTED_INSIDE,
+  DEFAULTED_OUTSIDE,
+  DELETED,
+  EXPLICIT,
+};
+
+/* Return how the given field is defined.  */
+
+static definition_style
+get_def_style (struct fn_field *fn, int fieldelem)
+{
+  if (TYPE_FN_FIELD_DELETED (fn, fieldelem))
+    return DELETED;
+
+  if (TYPE_FN_FIELD_ARTIFICIAL (fn, fieldelem))
+    return DOES_NOT_EXIST_IN_SOURCE;
+
+  switch (TYPE_FN_FIELD_DEFAULTED (fn, fieldelem))
+    {
+    case DW_DEFAULTED_no:
+      return EXPLICIT;
+    case DW_DEFAULTED_in_class:
+      return DEFAULTED_INSIDE;
+    case DW_DEFAULTED_out_of_class:
+      return DEFAULTED_OUTSIDE;
+    default:
+      break;
+    }
+
+  return EXPLICIT;
+}
+
+/* Helper functions to determine whether the given definition style
+   denotes that the definition is user-provided or implicit.
+   Being defaulted outside the class decl counts as an explicit
+   user-definition, while being defaulted inside is implicit.  */
+
+static bool
+is_user_provided_def (definition_style def)
+{
+  return def == EXPLICIT || def == DEFAULTED_OUTSIDE;
+}
+
+static bool
+is_implicit_def (definition_style def)
+{
+  return def == DOES_NOT_EXIST_IN_SOURCE || def == DEFAULTED_INSIDE;
+}
+
+/* Helper function to decide if METHOD_TYPE is a copy/move
+   constructor type for CLASS_TYPE.  EXPECTED is the expected
+   type code for the "right-hand-side" argument.
+   This function is supposed to be used by the IS_COPY_CONSTRUCTOR_TYPE
+   and IS_MOVE_CONSTRUCTOR_TYPE functions below.  Normally, you should
+   not need to call this directly.  */
+
+static bool
+is_copy_or_move_constructor_type (struct type *class_type,
+				  struct type *method_type,
+				  type_code expected)
+{
+  /* The method should take at least two arguments...  */
+  if (method_type->num_fields () < 2)
+    return false;
+
+  /* ...and the second argument should be the same as the class
+     type, with the expected type code...  */
+  struct type *arg_type = method_type->field (1).type ();
+
+  if (arg_type->code () != expected)
+    return false;
+
+  struct type *target = check_typedef (TYPE_TARGET_TYPE (arg_type));
+  if (!(class_types_same_p (target, class_type)))
+    return false;
+
+  /* ...and if any of the remaining arguments don't have a default value
+     then this is not a copy or move constructor, but just a
+     constructor.  */
+  for (int i = 2; i < method_type->num_fields (); i++)
+    {
+      arg_type = method_type->field (i).type ();
+      /* FIXME aktemur/2019-10-31: As of this date, neither
+	 clang++-7.0.0 nor g++-8.2.0 produce a DW_AT_default_value
+	 attribute.  GDB is also not set to read this attribute, yet.
+	 Hence, we immediately return false if there are more than
+	 2 parameters.
+	 GCC bug link:
+	 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42959
+      */
+      return false;
+    }
+
+  return true;
+}
+
+/* Return true if METHOD_TYPE is a copy ctor type for CLASS_TYPE.  */
+
+static bool
+is_copy_constructor_type (struct type *class_type,
+			  struct type *method_type)
+{
+  return is_copy_or_move_constructor_type (class_type, method_type,
+					   TYPE_CODE_REF);
+}
+
+/* Return true if METHOD_TYPE is a move ctor type for CLASS_TYPE.  */
+
+static bool
+is_move_constructor_type (struct type *class_type,
+			  struct type *method_type)
+{
+  return is_copy_or_move_constructor_type (class_type, method_type,
+					   TYPE_CODE_RVALUE_REF);
+}
+
+/* Return pass-by-reference information for the given TYPE.
 
    The rule in the v3 ABI document comes from section 3.1.1.  If the
    type has a non-trivial copy constructor or destructor, then the
@@ -1238,32 +1386,59 @@ gnuv3_skip_trampoline (struct frame_info
    is one or perform the copy itself otherwise), pass the address of
    the copy, and then destroy the temporary (if necessary).
 
-   For return values with non-trivial copy constructors or
+   For return values with non-trivial copy/move constructors or
    destructors, space will be allocated in the caller, and a pointer
    will be passed as the first argument (preceding "this").
 
    We don't have a bulletproof mechanism for determining whether a
-   constructor or destructor is trivial.  For GCC and DWARF2 debug
-   information, we can check the artificial flag.
+   constructor or destructor is trivial.  For GCC and DWARF5 debug
+   information, we can check the calling_convention attribute,
+   the 'artificial' flag, the 'defaulted' attribute, and the
+   'deleted' attribute.  */
 
-   We don't do anything with the constructors or destructors,
-   but we have to get the argument passing right anyway.  */
-static int
+static struct language_pass_by_ref_info
 gnuv3_pass_by_reference (struct type *type)
 {
   int fieldnum, fieldelem;
 
   type = check_typedef (type);
 
+  /* Start with the default values.  */
+  struct language_pass_by_ref_info info;
+
+  bool has_cc_attr = false;
+  bool is_pass_by_value = false;
+  bool is_dynamic = false;
+  definition_style cctor_def = DOES_NOT_EXIST_IN_SOURCE;
+  definition_style dtor_def = DOES_NOT_EXIST_IN_SOURCE;
+  definition_style mctor_def = DOES_NOT_EXIST_IN_SOURCE;
+
   /* We're only interested in things that can have methods.  */
-  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
-      && TYPE_CODE (type) != TYPE_CODE_UNION)
-    return 0;
+  if (type->code () != TYPE_CODE_STRUCT
+      && type->code () != TYPE_CODE_UNION)
+    return info;
+
+  /* The compiler may have emitted the calling convention attribute.
+     Note: GCC does not produce this attribute as of version 9.2.1.
+     Bug link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92418  */
+  if (TYPE_CPLUS_CALLING_CONVENTION (type) == DW_CC_pass_by_value)
+    {
+      has_cc_attr = true;
+      is_pass_by_value = true;
+      /* Do not return immediately.  We have to find out if this type
+	 is copy_constructible and destructible.  */
+    }
+
+  if (TYPE_CPLUS_CALLING_CONVENTION (type) == DW_CC_pass_by_reference)
+    {
+      has_cc_attr = true;
+      is_pass_by_value = false;
+    }
 
   /* A dynamic class has a non-trivial copy constructor.
      See c++98 section 12.8 Copying class objects [class.copy].  */
   if (gnuv3_dynamic_class (type))
-    return 1;
+    is_dynamic = true;
 
   for (fieldnum = 0; fieldnum < TYPE_NFN_FIELDS (type); fieldnum++)
     for (fieldelem = 0; fieldelem < TYPE_FN_FIELDLIST_LENGTH (type, fieldnum);
@@ -1273,44 +1448,75 @@ gnuv3_pass_by_reference (struct type *ty
 	const char *name = TYPE_FN_FIELDLIST_NAME (type, fieldnum);
 	struct type *fieldtype = TYPE_FN_FIELD_TYPE (fn, fieldelem);
 
-	/* If this function is marked as artificial, it is compiler-generated,
-	   and we assume it is trivial.  */
-	if (TYPE_FN_FIELD_ARTIFICIAL (fn, fieldelem))
-	  continue;
-
-	/* If we've found a destructor, we must pass this by reference.  */
 	if (name[0] == '~')
-	  return 1;
-
-	/* If the mangled name of this method doesn't indicate that it
-	   is a constructor, we're not interested.
-
-	   FIXME drow/2007-09-23: We could do this using the name of
-	   the method and the name of the class instead of dealing
-	   with the mangled name.  We don't have a convenient function
-	   to strip off both leading scope qualifiers and trailing
-	   template arguments yet.  */
-	if (!is_constructor_name (TYPE_FN_FIELD_PHYSNAME (fn, fieldelem))
-	    && !TYPE_FN_FIELD_CONSTRUCTOR (fn, fieldelem))
-	  continue;
-
-	/* If this method takes two arguments, and the second argument is
-	   a reference to this class, then it is a copy constructor.  */
-	if (TYPE_NFIELDS (fieldtype) == 2)
 	  {
-	    struct type *arg_type = TYPE_FIELD_TYPE (fieldtype, 1);
-
-	    if (TYPE_CODE (arg_type) == TYPE_CODE_REF)
+	    /* We've found a destructor.
+	       There should be at most one dtor definition.  */
+	    gdb_assert (dtor_def == DOES_NOT_EXIST_IN_SOURCE);
+	    dtor_def = get_def_style (fn, fieldelem);
+	  }
+	else if (is_constructor_name (TYPE_FN_FIELD_PHYSNAME (fn, fieldelem))
+		 || TYPE_FN_FIELD_CONSTRUCTOR (fn, fieldelem))
+	  {
+	    /* FIXME drow/2007-09-23: We could do this using the name of
+	       the method and the name of the class instead of dealing
+	       with the mangled name.  We don't have a convenient function
+	       to strip off both leading scope qualifiers and trailing
+	       template arguments yet.  */
+	    if (is_copy_constructor_type (type, fieldtype))
 	      {
-		struct type *arg_target_type;
+		/* There may be more than one cctors.  E.g.: one that
+		   take a const parameter and another that takes a
+		   non-const parameter.  Such as:
+
+		   class K {
+		     K (const K &k)...
+		     K (K &k)...
+		   };
+
+		   It is sufficient for the type to be non-trivial
+		   even only one of the cctors is explicit.
+		   Therefore, update the cctor_def value in the
+		   implicit -> explicit direction, not backwards.  */
 
-	        arg_target_type = check_typedef (TYPE_TARGET_TYPE (arg_type));
-		if (class_types_same_p (arg_target_type, type))
-		  return 1;
+		if (is_implicit_def (cctor_def))
+		  cctor_def = get_def_style (fn, fieldelem);
+	      }
+	    else if (is_move_constructor_type (type, fieldtype))
+	      {
+		/* Again, there may be multiple move ctors.  Update the
+		   mctor_def value if we found an explicit def and the
+		   existing one is not explicit.  Otherwise retain the
+		   existing value.  */
+		if (is_implicit_def (mctor_def))
+		  mctor_def = get_def_style (fn, fieldelem);
 	      }
 	  }
       }
 
+  bool cctor_implicitly_deleted
+    = (mctor_def != DOES_NOT_EXIST_IN_SOURCE
+       && cctor_def == DOES_NOT_EXIST_IN_SOURCE);
+
+  bool cctor_explicitly_deleted = (cctor_def == DELETED);
+
+  if (cctor_implicitly_deleted || cctor_explicitly_deleted)
+    info.copy_constructible = false;
+
+  if (dtor_def == DELETED)
+    info.destructible = false;
+
+  info.trivially_destructible = is_implicit_def (dtor_def);
+
+  info.trivially_copy_constructible
+    = (is_implicit_def (cctor_def)
+       && !is_dynamic);
+
+  info.trivially_copyable
+    = (info.trivially_copy_constructible
+       && info.trivially_destructible
+       && !is_user_provided_def (mctor_def));
+
   /* Even if all the constructors and destructors were artificial, one
      of them may have invoked a non-artificial constructor or
      destructor in a base class.  If any base class needs to be passed
@@ -1318,12 +1524,39 @@ gnuv3_pass_by_reference (struct type *ty
      are constructed whenever this class is.  We do not need to worry
      about recursive loops here, since we are only looking at members
      of complete class type.  Also ignore any static members.  */
-  for (fieldnum = 0; fieldnum < TYPE_NFIELDS (type); fieldnum++)
-    if (! field_is_static (&TYPE_FIELD (type, fieldnum))
-        && gnuv3_pass_by_reference (TYPE_FIELD_TYPE (type, fieldnum)))
-      return 1;
+  for (fieldnum = 0; fieldnum < type->num_fields (); fieldnum++)
+    if (!field_is_static (&type->field (fieldnum)))
+      {
+	struct type *field_type = type->field (fieldnum).type ();
 
-  return 0;
+	/* For arrays, make the decision based on the element type.  */
+	if (field_type->code () == TYPE_CODE_ARRAY)
+	  field_type = check_typedef (TYPE_TARGET_TYPE (field_type));
+
+	struct language_pass_by_ref_info field_info
+	  = gnuv3_pass_by_reference (field_type);
+
+	if (!field_info.copy_constructible)
+	  info.copy_constructible = false;
+	if (!field_info.destructible)
+	  info.destructible = false;
+	if (!field_info.trivially_copyable)
+	  info.trivially_copyable = false;
+	if (!field_info.trivially_copy_constructible)
+	  info.trivially_copy_constructible = false;
+	if (!field_info.trivially_destructible)
+	  info.trivially_destructible = false;
+      }
+
+  /* Consistency check.  */
+  if (has_cc_attr && info.trivially_copyable != is_pass_by_value)
+    {
+      /* DWARF CC attribute is not the same as the inferred value;
+	 use the DWARF attribute.  */
+      info.trivially_copyable = is_pass_by_value;
+    }
+
+  return info;
 }
 
 static void
@@ -1360,8 +1593,9 @@ init_gnuv3_ops (void)
   gnu_v3_abi_ops.pass_by_reference = gnuv3_pass_by_reference;
 }
 
+void _initialize_gnu_v3_abi ();
 void
-_initialize_gnu_v3_abi (void)
+_initialize_gnu_v3_abi ()
 {
   init_gnuv3_ops ();
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go32-nat.c ./gdb/go32-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go32-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/go32-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Native debugging support for Intel x86 running DJGPP.
-   Copyright (C) 1997-2020 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 Free Software Foundation, Inc.
    Written by Robert Hoehne.
 
    This file is part of GDB.
@@ -342,7 +342,7 @@ struct go32_nat_target final : public x8
 
   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;
@@ -401,25 +401,25 @@ go32_nat_target::resume (ptid_t ptid, in
   resume_is_step = step;
 
   if (siggnal != GDB_SIGNAL_0 && siggnal != GDB_SIGNAL_TRAP)
-  {
-    for (i = 0, resume_signal = -1;
-	 excepn_map[i].gdb_sig != GDB_SIGNAL_LAST; i++)
-      if (excepn_map[i].gdb_sig == siggnal)
-      {
-	resume_signal = excepn_map[i].djgpp_excepno;
-	break;
-      }
-    if (resume_signal == -1)
-      printf_unfiltered ("Cannot deliver signal %s on this platform.\n",
-			 gdb_signal_to_name (siggnal));
-  }
+    {
+      for (i = 0, resume_signal = -1;
+	   excepn_map[i].gdb_sig != GDB_SIGNAL_LAST; i++)
+	if (excepn_map[i].gdb_sig == siggnal)
+	  {
+	    resume_signal = excepn_map[i].djgpp_excepno;
+	    break;
+	  }
+      if (resume_signal == -1)
+	printf_unfiltered ("Cannot deliver signal %s on this platform.\n",
+			   gdb_signal_to_name (siggnal));
+    }
 }
 
 static char child_cwd[FILENAME_MAX];
 
 ptid_t
 go32_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
-		       int options)
+		       target_wait_flags options)
 {
   int i;
   unsigned char saved_opcode;
@@ -507,7 +507,8 @@ go32_nat_target::wait (ptid_t ptid, stru
     }
 
   getcwd (child_cwd, sizeof (child_cwd)); /* in case it has changed */
-  chdir (current_directory);
+  if (current_directory != NULL)
+    chdir (current_directory);
 
   if (a_tss.tss_irqn == 0x21)
     {
@@ -752,14 +753,14 @@ go32_nat_target::create_inferior (const
   save_npx ();
 #endif
 
-  inferior_ptid = ptid_t (SOME_PID);
   inf = current_inferior ();
   inferior_appeared (inf, SOME_PID);
 
-  if (!target_is_pushed (this))
-    push_target (this);
+  if (!inf->target_is_pushed (this))
+    inf->push_target (this);
 
-  add_thread_silent (inferior_ptid);
+  thread_info *thr = add_thread_silent (ptid_t (SOME_PID));
+  switch_to_thread (thr);
 
   clear_proceed_status (0);
   insert_breakpoints ();
@@ -769,8 +770,6 @@ go32_nat_target::create_inferior (const
 void
 go32_nat_target::mourn_inferior ()
 {
-  ptid_t ptid;
-
   redir_cmdline_delete (&child_cmd);
   resume_signal = -1;
   resume_is_step = 0;
@@ -786,8 +785,6 @@ go32_nat_target::mourn_inferior ()
      the OS cleans up when the debuggee exits.  */
   x86_cleanup_dregs ();
 
-  ptid = inferior_ptid;
-  inferior_ptid = null_ptid;
   prog_has_started = 0;
 
   generic_mourn_inferior ();
@@ -875,14 +872,14 @@ device_mode (int fd, int raw_p)
     newmode &= ~0x20;
 
   if (oldmode & 0x80)	/* Only for character dev.  */
-  {
-    regs.x.ax = 0x4401;
-    regs.x.bx = fd;
-    regs.x.dx = newmode & 0xff;   /* Force upper byte zero, else it fails.  */
-    __dpmi_int (0x21, &regs);
-    if (regs.x.flags & 1)
-      return -1;
-  }
+    {
+      regs.x.ax = 0x4401;
+      regs.x.bx = fd;
+      regs.x.dx = newmode & 0xff;   /* Force upper byte zero, else it fails.  */
+      __dpmi_int (0x21, &regs);
+      if (regs.x.flags & 1)
+	return -1;
+    }
   return (oldmode & 0x20) == 0x20;
 }
 
@@ -912,24 +909,24 @@ go32_nat_target::terminal_info (const ch
 
 #if __DJGPP_MINOR__ > 2
   if (child_cmd.redirection)
-  {
-    int i;
-
-    for (i = 0; i < DBG_HANDLES; i++)
     {
-      if (child_cmd.redirection[i]->file_name)
-	printf_unfiltered ("\tFile handle %d is redirected to `%s'.\n",
-			   i, child_cmd.redirection[i]->file_name);
-      else if (_get_dev_info (child_cmd.redirection[i]->inf_handle) == -1)
-	printf_unfiltered
-	  ("\tFile handle %d appears to be closed by inferior.\n", i);
-      /* Mask off the raw/cooked bit when comparing device info words.  */
-      else if ((_get_dev_info (child_cmd.redirection[i]->inf_handle) & 0xdf)
-	       != (_get_dev_info (i) & 0xdf))
-	printf_unfiltered
-	  ("\tFile handle %d appears to be redirected by inferior.\n", i);
+      int i;
+
+      for (i = 0; i < DBG_HANDLES; i++)
+	{
+	  if (child_cmd.redirection[i]->file_name)
+	    printf_unfiltered ("\tFile handle %d is redirected to `%s'.\n",
+			       i, child_cmd.redirection[i]->file_name);
+	  else if (_get_dev_info (child_cmd.redirection[i]->inf_handle) == -1)
+	    printf_unfiltered
+	      ("\tFile handle %d appears to be closed by inferior.\n", i);
+	  /* Mask off the raw/cooked bit when comparing device info words.  */
+	  else if ((_get_dev_info (child_cmd.redirection[i]->inf_handle) & 0xdf)
+		   != (_get_dev_info (i) & 0xdf))
+	    printf_unfiltered
+	      ("\tFile handle %d appears to be redirected by inferior.\n", i);
+	}
     }
-  }
 #endif
 }
 
@@ -939,19 +936,19 @@ go32_nat_target::terminal_inferior ()
   /* Redirect standard handles as child wants them.  */
   errno = 0;
   if (redir_to_child (&child_cmd) == -1)
-  {
-    redir_to_debugger (&child_cmd);
-    error (_("Cannot redirect standard handles for program: %s."),
-	   safe_strerror (errno));
-  }
+    {
+      redir_to_debugger (&child_cmd);
+      error (_("Cannot redirect standard handles for program: %s."),
+	     safe_strerror (errno));
+    }
   /* Set the console device of the inferior to whatever mode
      (raw or cooked) we found it last time.  */
   if (terminal_is_ours)
-  {
-    if (inf_mode_valid)
-      device_mode (0, inf_terminal_mode);
-    terminal_is_ours = 0;
-  }
+    {
+      if (inf_mode_valid)
+	device_mode (0, inf_terminal_mode);
+      terminal_is_ours = 0;
+    }
 }
 
 void
@@ -960,25 +957,25 @@ go32_nat_target::terminal_ours ()
   /* Switch to cooked mode on the gdb terminal and save the inferior
      terminal mode to be restored when it is resumed.  */
   if (!terminal_is_ours)
-  {
-    inf_terminal_mode = device_mode (0, 0);
-    if (inf_terminal_mode != -1)
-      inf_mode_valid = 1;
-    else
-      /* If device_mode returned -1, we don't know what happens with
-	 handle 0 anymore, so make the info invalid.  */
-      inf_mode_valid = 0;
-    terminal_is_ours = 1;
-
-    /* Restore debugger's standard handles.  */
-    errno = 0;
-    if (redir_to_debugger (&child_cmd) == -1)
     {
-      redir_to_child (&child_cmd);
-      error (_("Cannot redirect standard handles for debugger: %s."),
-	     safe_strerror (errno));
+      inf_terminal_mode = device_mode (0, 0);
+      if (inf_terminal_mode != -1)
+	inf_mode_valid = 1;
+      else
+	/* If device_mode returned -1, we don't know what happens with
+	   handle 0 anymore, so make the info invalid.  */
+	inf_mode_valid = 0;
+      terminal_is_ours = 1;
+
+      /* Restore debugger's standard handles.  */
+      errno = 0;
+      if (redir_to_debugger (&child_cmd) == -1)
+	{
+	  redir_to_child (&child_cmd);
+	  error (_("Cannot redirect standard handles for debugger: %s."),
+		 safe_strerror (errno));
+	}
     }
-  }
 }
 
 void
@@ -1109,8 +1106,8 @@ go32_sysinfo (const char *arg, int from_
       /* CPUID with EAX = 0 returns the Vendor ID.  */
 #if 0
       /* Ideally we would use x86_cpuid(), but it needs someone to run
-         native tests first to make sure things actually work.  They should.
-         http://sourceware.org/ml/gdb-patches/2013-05/msg00164.html  */
+	 native tests first to make sure things actually work.  They should.
+	 http://sourceware.org/ml/gdb-patches/2013-05/msg00164.html  */
       unsigned int eax, ebx, ecx, edx;
 
       if (x86_cpuid (0, &eax, &ebx, &ecx, &edx))
@@ -1262,9 +1259,9 @@ go32_sysinfo (const char *arg, int from_
 	    }
 	}
       xsnprintf (cpu_string, sizeof (cpu_string), "%s%s Model %d Stepping %d",
-	         intel_p ? "Pentium" : (amd_p ? "AMD" : (hygon_p ? "Hygon" : "ix86")),
-	         cpu_brand, cpu_model, cpuid_eax & 0xf);
-      printfi_filtered (31, "%s\n", cpu_string);
+		 intel_p ? "Pentium" : (amd_p ? "AMD" : (hygon_p ? "Hygon" : "ix86")),
+		 cpu_brand, cpu_model, cpuid_eax & 0xf);
+      printf_filtered ("%*s%s\n", 31, "", cpu_string);
       if (((cpuid_edx & (6 | (0x0d << 23))) != 0)
 	  || ((cpuid_edx & 1) == 0)
 	  || ((amd_p || hygon_p) && (cpuid_edx & (3 << 30)) != 0))
@@ -1375,11 +1372,11 @@ go32_sysinfo (const char *arg, int from_
 		   "%s-bit DPMI, with%s Virtual Memory support\n",
 		   (dpmi_version_data.flags & 1) ? "32" : "16",
 		   (dpmi_version_data.flags & 4) ? "" : "out");
-  printfi_filtered (31, "Interrupts reflected to %s mode\n",
+  printf_filtered ("%*sInterrupts reflected to %s mode\n", 31, "",
 		   (dpmi_version_data.flags & 2) ? "V86" : "Real");
-  printfi_filtered (31, "Processor type: i%d86\n",
+  printf_filtered ("%*sProcessor type: i%d86\n", 31, "",
 		   dpmi_version_data.cpu);
-  printfi_filtered (31, "PIC base interrupt: Master: %#x  Slave: %#x\n",
+  printf_filtered ("%*sPIC base interrupt: Master: %#x  Slave: %#x\n", 31, "",
 		   dpmi_version_data.master_pic, dpmi_version_data.slave_pic);
 
   /* a_tss is only initialized when the debuggee is first run.  */
@@ -1433,8 +1430,8 @@ go32_sysinfo (const char *arg, int from_
       __dpmi_int (0x21, &regs);
       if ((regs.x.flags & 1) != 0)
 	regs.h.al = 0;
-      printfi_filtered (31, "UMBs %sin DOS memory chain\n",
-			regs.h.al == 0 ? "not " : "");
+      printf_filtered ("%*sUMBs %sin DOS memory chain\n", 31, "",
+		       regs.h.al == 0 ? "not " : "");
     }
 }
 
@@ -1598,7 +1595,7 @@ display_descriptor (unsigned type, unsig
 		break;
 	      case 5:
 		printf_filtered ("TSS selector=0x%04x", descr.base0);
-		printfi_filtered (16, "Task Gate");
+		printf_filtered ("%*sTask Gate", 16, "");
 		break;
 	      case 6:
 	      case 7:
@@ -2074,14 +2071,9 @@ go32_pte_for_address (const char *arg, i
 
 static struct cmd_list_element *info_dos_cmdlist = NULL;
 
-static void
-go32_info_dos_command (const char *args, int from_tty)
-{
-  help_list (info_dos_cmdlist, "info dos ", class_info, gdb_stdout);
-}
-
+void _initialize_go32_nat ();
 void
-_initialize_go32_nat (void)
+_initialize_go32_nat ()
 {
   x86_dr_low.set_control = go32_set_dr7;
   x86_dr_low.set_addr = go32_set_dr;
@@ -2105,9 +2097,9 @@ _initialize_go32_nat (void)
   /* We are always processing GCC-compiled programs.  */
   processing_gcc_compilation = 2;
 
-  add_prefix_cmd ("dos", class_info, go32_info_dos_command, _("\
+  add_basic_prefix_cmd ("dos", class_info, _("\
 Print information specific to DJGPP (aka MS-DOS) debugging."),
-		  &info_dos_cmdlist, "info dos ", 0, &infolist);
+			&info_dos_cmdlist, 0, &infolist);
 
   add_cmd ("sysinfo", class_info, go32_sysinfo, _("\
 Display information about the target system, including CPU, OS, DPMI, etc."),
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-exp.c ./gdb/go-exp.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-exp.c	2020-03-07 02:11:13.000000000 +0000
+++ ./gdb/go-exp.c	2021-12-16 02:00:19.000000000 +0000
@@ -1,21 +1,20 @@
+/* A Bison parser, made by GNU Bison 3.6.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, 2018-2020 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,13 +27,17 @@
    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.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+   especially those whose name start with YY_ or yy_.  They are
+   private implementation details that can be changed or removed.  */
+
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
    variables, as they might otherwise be expanded by user macros.
@@ -46,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "3.6.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -60,14 +63,10 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
 
 
-/* Copy the first part of user declarations.  */
 
-/* Line 189 of yacc.c  */
+/* First part of user prologue.  */
 #line 52 "go-exp.y"
 
 
@@ -84,6 +83,7 @@
 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "charset.h"
 #include "block.h"
+#include "expop.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 
@@ -104,80 +104,96 @@ static int yylex (void);
 static void yyerror (const char *);
 
 
+#line 108 "go-exp.c.tmp"
+
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTRPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTRPTR nullptr
+#   else
+#    define YY_NULLPTRPTR 0
+#   endif
+#  else
+#   define YY_NULLPTRPTR ((void*)0)
+#  endif
+# endif
 
-/* Line 189 of yacc.c  */
-#line 110 "go-exp.c.tmp"
 
-/* Enabling traces.  */
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+#if YYDEBUG
+extern int yydebug;
 #endif
 
-
-/* Tokens.  */
+/* Token kinds.  */
 #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,
-     RAW_STRING = 260,
-     STRING = 261,
-     CHAR = 262,
-     NAME = 263,
-     TYPENAME = 264,
-     COMPLETE = 265,
-     NAME_OR_INT = 266,
-     TRUE_KEYWORD = 267,
-     FALSE_KEYWORD = 268,
-     STRUCT_KEYWORD = 269,
-     INTERFACE_KEYWORD = 270,
-     TYPE_KEYWORD = 271,
-     CHAN_KEYWORD = 272,
-     SIZEOF_KEYWORD = 273,
-     LEN_KEYWORD = 274,
-     CAP_KEYWORD = 275,
-     NEW_KEYWORD = 276,
-     IOTA_KEYWORD = 277,
-     NIL_KEYWORD = 278,
-     CONST_KEYWORD = 279,
-     DOTDOTDOT = 280,
-     ENTRY = 281,
-     ERROR = 282,
-     BYTE_KEYWORD = 283,
-     DOLLAR_VARIABLE = 284,
-     ASSIGN_MODIFY = 285,
-     ABOVE_COMMA = 286,
-     OROR = 287,
-     ANDAND = 288,
-     ANDNOT = 289,
-     NOTEQUAL = 290,
-     EQUAL = 291,
-     GEQ = 292,
-     LEQ = 293,
-     RSH = 294,
-     LSH = 295,
-     DECREMENT = 296,
-     INCREMENT = 297,
-     UNARY = 298,
-     LEFT_ARROW = 299
-   };
+  enum yytokentype
+  {
+    YYEMPTY = -2,
+    YYEOF = 0,                     /* "end of file"  */
+    YYerror = 256,                 /* error  */
+    YYUNDEF = 257,                 /* "invalid token"  */
+    INT = 258,                     /* INT  */
+    FLOAT = 259,                   /* FLOAT  */
+    RAW_STRING = 260,              /* RAW_STRING  */
+    STRING = 261,                  /* STRING  */
+    CHAR = 262,                    /* CHAR  */
+    NAME = 263,                    /* NAME  */
+    TYPENAME = 264,                /* TYPENAME  */
+    COMPLETE = 265,                /* COMPLETE  */
+    NAME_OR_INT = 266,             /* NAME_OR_INT  */
+    TRUE_KEYWORD = 267,            /* TRUE_KEYWORD  */
+    FALSE_KEYWORD = 268,           /* FALSE_KEYWORD  */
+    STRUCT_KEYWORD = 269,          /* STRUCT_KEYWORD  */
+    INTERFACE_KEYWORD = 270,       /* INTERFACE_KEYWORD  */
+    TYPE_KEYWORD = 271,            /* TYPE_KEYWORD  */
+    CHAN_KEYWORD = 272,            /* CHAN_KEYWORD  */
+    SIZEOF_KEYWORD = 273,          /* SIZEOF_KEYWORD  */
+    LEN_KEYWORD = 274,             /* LEN_KEYWORD  */
+    CAP_KEYWORD = 275,             /* CAP_KEYWORD  */
+    NEW_KEYWORD = 276,             /* NEW_KEYWORD  */
+    IOTA_KEYWORD = 277,            /* IOTA_KEYWORD  */
+    NIL_KEYWORD = 278,             /* NIL_KEYWORD  */
+    CONST_KEYWORD = 279,           /* CONST_KEYWORD  */
+    DOTDOTDOT = 280,               /* DOTDOTDOT  */
+    ENTRY = 281,                   /* ENTRY  */
+    ERROR = 282,                   /* ERROR  */
+    BYTE_KEYWORD = 283,            /* BYTE_KEYWORD  */
+    DOLLAR_VARIABLE = 284,         /* DOLLAR_VARIABLE  */
+    ASSIGN_MODIFY = 285,           /* ASSIGN_MODIFY  */
+    ABOVE_COMMA = 286,             /* ABOVE_COMMA  */
+    OROR = 287,                    /* OROR  */
+    ANDAND = 288,                  /* ANDAND  */
+    ANDNOT = 289,                  /* ANDNOT  */
+    EQUAL = 290,                   /* EQUAL  */
+    NOTEQUAL = 291,                /* NOTEQUAL  */
+    LEQ = 292,                     /* LEQ  */
+    GEQ = 293,                     /* GEQ  */
+    LSH = 294,                     /* LSH  */
+    RSH = 295,                     /* RSH  */
+    UNARY = 296,                   /* UNARY  */
+    INCREMENT = 297,               /* INCREMENT  */
+    DECREMENT = 298,               /* DECREMENT  */
+    LEFT_ARROW = 299               /* LEFT_ARROW  */
+  };
+  typedef enum yytokentype yytoken_kind_t;
 #endif
-/* Tokens.  */
+/* Token kinds.  */
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
 #define INT 258
 #define FLOAT 259
 #define RAW_STRING 260
@@ -210,26 +226,22 @@ static void yyerror (const char *);
 #define OROR 287
 #define ANDAND 288
 #define ANDNOT 289
-#define NOTEQUAL 290
-#define EQUAL 291
-#define GEQ 292
-#define LEQ 293
-#define RSH 294
-#define LSH 295
-#define DECREMENT 296
+#define EQUAL 290
+#define NOTEQUAL 291
+#define LEQ 292
+#define GEQ 293
+#define LSH 294
+#define RSH 295
+#define UNARY 296
 #define INCREMENT 297
-#define UNARY 298
+#define DECREMENT 298
 #define LEFT_ARROW 299
 
-
-
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+union YYSTYPE
 {
-
-/* Line 214 of yacc.c  */
-#line 93 "go-exp.y"
+#line 94 "go-exp.y"
 
     LONGEST lval;
     struct {
@@ -251,58 +263,194 @@ typedef union YYSTYPE
     struct stoken_vector svec;
   
 
+#line 267 "go-exp.c.tmp"
 
-/* Line 214 of yacc.c  */
-#line 257 "go-exp.c.tmp"
-} YYSTYPE;
+};
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
 
-/* Copy the second part of user declarations.  */
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+
+/* Symbol kind.  */
+enum yysymbol_kind_t
+{
+  YYSYMBOL_YYEMPTY = -2,
+  YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
+  YYSYMBOL_YYerror = 1,                    /* error  */
+  YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
+  YYSYMBOL_INT = 3,                        /* INT  */
+  YYSYMBOL_FLOAT = 4,                      /* FLOAT  */
+  YYSYMBOL_RAW_STRING = 5,                 /* RAW_STRING  */
+  YYSYMBOL_STRING = 6,                     /* STRING  */
+  YYSYMBOL_CHAR = 7,                       /* CHAR  */
+  YYSYMBOL_NAME = 8,                       /* NAME  */
+  YYSYMBOL_TYPENAME = 9,                   /* TYPENAME  */
+  YYSYMBOL_COMPLETE = 10,                  /* COMPLETE  */
+  YYSYMBOL_NAME_OR_INT = 11,               /* NAME_OR_INT  */
+  YYSYMBOL_TRUE_KEYWORD = 12,              /* TRUE_KEYWORD  */
+  YYSYMBOL_FALSE_KEYWORD = 13,             /* FALSE_KEYWORD  */
+  YYSYMBOL_STRUCT_KEYWORD = 14,            /* STRUCT_KEYWORD  */
+  YYSYMBOL_INTERFACE_KEYWORD = 15,         /* INTERFACE_KEYWORD  */
+  YYSYMBOL_TYPE_KEYWORD = 16,              /* TYPE_KEYWORD  */
+  YYSYMBOL_CHAN_KEYWORD = 17,              /* CHAN_KEYWORD  */
+  YYSYMBOL_SIZEOF_KEYWORD = 18,            /* SIZEOF_KEYWORD  */
+  YYSYMBOL_LEN_KEYWORD = 19,               /* LEN_KEYWORD  */
+  YYSYMBOL_CAP_KEYWORD = 20,               /* CAP_KEYWORD  */
+  YYSYMBOL_NEW_KEYWORD = 21,               /* NEW_KEYWORD  */
+  YYSYMBOL_IOTA_KEYWORD = 22,              /* IOTA_KEYWORD  */
+  YYSYMBOL_NIL_KEYWORD = 23,               /* NIL_KEYWORD  */
+  YYSYMBOL_CONST_KEYWORD = 24,             /* CONST_KEYWORD  */
+  YYSYMBOL_DOTDOTDOT = 25,                 /* DOTDOTDOT  */
+  YYSYMBOL_ENTRY = 26,                     /* ENTRY  */
+  YYSYMBOL_ERROR = 27,                     /* ERROR  */
+  YYSYMBOL_BYTE_KEYWORD = 28,              /* BYTE_KEYWORD  */
+  YYSYMBOL_DOLLAR_VARIABLE = 29,           /* DOLLAR_VARIABLE  */
+  YYSYMBOL_ASSIGN_MODIFY = 30,             /* ASSIGN_MODIFY  */
+  YYSYMBOL_31_ = 31,                       /* ','  */
+  YYSYMBOL_ABOVE_COMMA = 32,               /* ABOVE_COMMA  */
+  YYSYMBOL_33_ = 33,                       /* '='  */
+  YYSYMBOL_34_ = 34,                       /* '?'  */
+  YYSYMBOL_OROR = 35,                      /* OROR  */
+  YYSYMBOL_ANDAND = 36,                    /* ANDAND  */
+  YYSYMBOL_37_ = 37,                       /* '|'  */
+  YYSYMBOL_38_ = 38,                       /* '^'  */
+  YYSYMBOL_39_ = 39,                       /* '&'  */
+  YYSYMBOL_ANDNOT = 40,                    /* ANDNOT  */
+  YYSYMBOL_EQUAL = 41,                     /* EQUAL  */
+  YYSYMBOL_NOTEQUAL = 42,                  /* NOTEQUAL  */
+  YYSYMBOL_43_ = 43,                       /* '<'  */
+  YYSYMBOL_44_ = 44,                       /* '>'  */
+  YYSYMBOL_LEQ = 45,                       /* LEQ  */
+  YYSYMBOL_GEQ = 46,                       /* GEQ  */
+  YYSYMBOL_LSH = 47,                       /* LSH  */
+  YYSYMBOL_RSH = 48,                       /* RSH  */
+  YYSYMBOL_49_ = 49,                       /* '@'  */
+  YYSYMBOL_50_ = 50,                       /* '+'  */
+  YYSYMBOL_51_ = 51,                       /* '-'  */
+  YYSYMBOL_52_ = 52,                       /* '*'  */
+  YYSYMBOL_53_ = 53,                       /* '/'  */
+  YYSYMBOL_54_ = 54,                       /* '%'  */
+  YYSYMBOL_UNARY = 55,                     /* UNARY  */
+  YYSYMBOL_INCREMENT = 56,                 /* INCREMENT  */
+  YYSYMBOL_DECREMENT = 57,                 /* DECREMENT  */
+  YYSYMBOL_LEFT_ARROW = 58,                /* LEFT_ARROW  */
+  YYSYMBOL_59_ = 59,                       /* '.'  */
+  YYSYMBOL_60_ = 60,                       /* '['  */
+  YYSYMBOL_61_ = 61,                       /* '('  */
+  YYSYMBOL_62_ = 62,                       /* '!'  */
+  YYSYMBOL_63_ = 63,                       /* ']'  */
+  YYSYMBOL_64_ = 64,                       /* ')'  */
+  YYSYMBOL_65_ = 65,                       /* '{'  */
+  YYSYMBOL_66_ = 66,                       /* '}'  */
+  YYSYMBOL_67_ = 67,                       /* ':'  */
+  YYSYMBOL_YYACCEPT = 68,                  /* $accept  */
+  YYSYMBOL_start = 69,                     /* start  */
+  YYSYMBOL_type_exp = 70,                  /* type_exp  */
+  YYSYMBOL_exp1 = 71,                      /* exp1  */
+  YYSYMBOL_exp = 72,                       /* exp  */
+  YYSYMBOL_73_1 = 73,                      /* $@1  */
+  YYSYMBOL_lcurly = 74,                    /* lcurly  */
+  YYSYMBOL_arglist = 75,                   /* arglist  */
+  YYSYMBOL_rcurly = 76,                    /* rcurly  */
+  YYSYMBOL_string_exp = 77,                /* string_exp  */
+  YYSYMBOL_variable = 78,                  /* variable  */
+  YYSYMBOL_type = 79,                      /* type  */
+  YYSYMBOL_name_not_typename = 80          /* name_not_typename  */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
 
-/* Line 264 of yacc.c  */
-#line 114 "go-exp.y"
+/* Second part of user prologue.  */
+#line 115 "go-exp.y"
 
 /* YYSTYPE gets defined by %union.  */
 static int parse_number (struct parser_state *,
 			 const char *, int, int, YYSTYPE *);
 
+using namespace expr;
+
+#line 379 "go-exp.c.tmp"
 
-/* Line 264 of yacc.c  */
-#line 276 "go-exp.c.tmp"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -310,55 +458,100 @@ 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 __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int8 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #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_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
 # 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__ && ! defined __ICC && 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 __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
 #endif
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
 
 /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
 
@@ -374,11 +567,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
@@ -386,8 +579,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
@@ -401,92 +594,93 @@ 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
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
+#endif /* !defined yyoverflow */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
+  yy_state_t yyss_alloc;
   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 (YYSIZEOF (union 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) * (YYSIZEOF (yy_state_t) + YYSIZEOF (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                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*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, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYPTRDIFF_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  40
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   443
+#define YYLAST   451
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  68
@@ -494,29 +688,33 @@ union yyalloc
 #define YYNNTS  13
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  69
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  122
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
 #define YYMAXUTOK   299
 
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX)                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
+   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
+   : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
+static const yytype_int8 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,    62,     2,     2,     2,    54,    39,     2,
-      60,    64,    52,    50,    31,    51,    58,    53,     2,     2,
+      61,    64,    52,    50,    31,    51,    59,    53,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,    67,     2,
       43,    33,    44,    34,    49,     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,    63,    38,     2,     2,     2,     2,     2,
+       2,    60,     2,    63,    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,     2,    65,    37,    66,     2,     2,     2,     2,
@@ -536,128 +734,106 @@ 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,    32,    35,    36,    40,
-      41,    42,    45,    46,    47,    48,    55,    56,    57,    61
+      41,    42,    45,    46,    47,    48,    55,    56,    57,    58
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint8 yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    11,    15,    18,    21,
-      24,    27,    30,    33,    36,    39,    43,    48,    52,    57,
-      58,    64,    66,    67,    69,    73,    75,    80,    85,    89,
-      93,    97,   101,   105,   109,   113,   117,   121,   125,   129,
-     133,   137,   141,   145,   149,   153,   157,   161,   165,   171,
-     175,   179,   181,   183,   185,   187,   189,   191,   196,   201,
-     203,   207,   209,   211,   213,   216,   218,   221,   223,   225
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 yyrline[] =
 {
-      69,     0,    -1,    71,    -1,    70,    -1,    79,    -1,    72,
-      -1,    71,    31,    72,    -1,    52,    72,    -1,    39,    72,
-      -1,    51,    72,    -1,    50,    72,    -1,    62,    72,    -1,
-      38,    72,    -1,    72,    56,    -1,    72,    55,    -1,    72,
-      58,    80,    -1,    72,    58,    80,    10,    -1,    72,    58,
-      10,    -1,    72,    59,    71,    63,    -1,    -1,    72,    60,
-      73,    75,    64,    -1,    65,    -1,    -1,    72,    -1,    75,
-      31,    72,    -1,    66,    -1,    74,    79,    76,    72,    -1,
-      79,    60,    72,    64,    -1,    60,    71,    64,    -1,    72,
-      49,    72,    -1,    72,    52,    72,    -1,    72,    53,    72,
-      -1,    72,    54,    72,    -1,    72,    50,    72,    -1,    72,
-      51,    72,    -1,    72,    48,    72,    -1,    72,    47,    72,
-      -1,    72,    42,    72,    -1,    72,    41,    72,    -1,    72,
-      46,    72,    -1,    72,    45,    72,    -1,    72,    43,    72,
-      -1,    72,    44,    72,    -1,    72,    39,    72,    -1,    72,
-      38,    72,    -1,    72,    37,    72,    -1,    72,    36,    72,
-      -1,    72,    35,    72,    -1,    72,    34,    72,    67,    72,
-      -1,    72,    33,    72,    -1,    72,    30,    72,    -1,     3,
-      -1,     7,    -1,    11,    -1,     4,    -1,    78,    -1,    29,
-      -1,    18,    60,    79,    64,    -1,    18,    60,    72,    64,
-      -1,     6,    -1,    77,    50,     6,    -1,    77,    -1,    12,
-      -1,    13,    -1,    80,    26,    -1,    80,    -1,    52,    79,
-      -1,     9,    -1,    28,    -1,     8,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   191,   191,   192,   195,   202,   203,   208,   212,   216,
-     220,   224,   228,   232,   236,   242,   248,   255,   265,   272,
-     269,   280,   284,   287,   291,   295,   299,   305,   311,   317,
-     321,   325,   329,   333,   337,   341,   345,   349,   353,   357,
-     361,   365,   369,   373,   377,   381,   385,   389,   393,   397,
-     401,   407,   414,   423,   436,   443,   446,   452,   467,   474,
-     491,   509,   521,   527,   533,   549,   596,   598,   605,   618
+       0,   194,   194,   195,   198,   203,   204,   209,   213,   217,
+     221,   225,   229,   233,   237,   243,   250,   260,   269,   276,
+     273,   286,   290,   293,   297,   301,   305,   312,   319,   325,
+     329,   333,   337,   341,   345,   349,   353,   357,   361,   365,
+     369,   373,   377,   381,   385,   389,   393,   397,   401,   412,
+     416,   425,   432,   441,   452,   461,   464,   470,   482,   489,
+     506,   524,   536,   540,   544,   558,   603,   605,   612,   625
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/** Accessing symbol of state STATE.  */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+   YYSYMBOL.  No bounds checking.  */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
 /* 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", "RAW_STRING", "STRING",
-  "CHAR", "NAME", "TYPENAME", "COMPLETE", "NAME_OR_INT", "TRUE_KEYWORD",
-  "FALSE_KEYWORD", "STRUCT_KEYWORD", "INTERFACE_KEYWORD", "TYPE_KEYWORD",
-  "CHAN_KEYWORD", "SIZEOF_KEYWORD", "LEN_KEYWORD", "CAP_KEYWORD",
-  "NEW_KEYWORD", "IOTA_KEYWORD", "NIL_KEYWORD", "CONST_KEYWORD",
-  "DOTDOTDOT", "ENTRY", "ERROR", "BYTE_KEYWORD", "DOLLAR_VARIABLE",
-  "ASSIGN_MODIFY", "','", "ABOVE_COMMA", "'='", "'?'", "OROR", "ANDAND",
-  "'|'", "'^'", "'&'", "ANDNOT", "NOTEQUAL", "EQUAL", "'<'", "'>'", "GEQ",
-  "LEQ", "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'",
-  "DECREMENT", "INCREMENT", "UNARY", "'.'", "'['", "'('", "LEFT_ARROW",
-  "'!'", "']'", "')'", "'{'", "'}'", "':'", "$accept", "start", "type_exp",
-  "exp1", "exp", "$@1", "lcurly", "arglist", "rcurly", "string_exp",
-  "variable", "type", "name_not_typename", 0
+  "\"end of file\"", "error", "\"invalid token\"", "INT", "FLOAT",
+  "RAW_STRING", "STRING", "CHAR", "NAME", "TYPENAME", "COMPLETE",
+  "NAME_OR_INT", "TRUE_KEYWORD", "FALSE_KEYWORD", "STRUCT_KEYWORD",
+  "INTERFACE_KEYWORD", "TYPE_KEYWORD", "CHAN_KEYWORD", "SIZEOF_KEYWORD",
+  "LEN_KEYWORD", "CAP_KEYWORD", "NEW_KEYWORD", "IOTA_KEYWORD",
+  "NIL_KEYWORD", "CONST_KEYWORD", "DOTDOTDOT", "ENTRY", "ERROR",
+  "BYTE_KEYWORD", "DOLLAR_VARIABLE", "ASSIGN_MODIFY", "','", "ABOVE_COMMA",
+  "'='", "'?'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "ANDNOT", "EQUAL",
+  "NOTEQUAL", "'<'", "'>'", "LEQ", "GEQ", "LSH", "RSH", "'@'", "'+'",
+  "'-'", "'*'", "'/'", "'%'", "UNARY", "INCREMENT", "DECREMENT",
+  "LEFT_ARROW", "'.'", "'['", "'('", "'!'", "']'", "')'", "'{'", "'}'",
+  "':'", "$accept", "start", "type_exp", "exp1", "exp", "$@1", "lcurly",
+  "arglist", "rcurly", "string_exp", "variable", "type",
+  "name_not_typename", YY_NULLPTRPTR
 };
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+  return yytname[yysymbol];
+}
 #endif
 
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+#ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 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,    44,   286,    61,    63,   287,   288,   124,    94,    38,
      289,   290,   291,    60,    62,   292,   293,   294,   295,    64,
-      43,    45,    42,    47,    37,   296,   297,   298,    46,    91,
-      40,   299,    33,    93,    41,   123,   125,    58
+      43,    45,    42,    47,    37,   296,   297,   298,   299,    46,
+      91,    40,    33,    93,    41,   123,   125,    58
 };
-# endif
+#endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    68,    69,    69,    70,    71,    71,    72,    72,    72,
-      72,    72,    72,    72,    72,    72,    72,    72,    72,    73,
-      72,    74,    75,    75,    75,    76,    72,    72,    72,    72,
-      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
-      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
-      72,    72,    72,    72,    72,    72,    72,    72,    72,    77,
-      77,    72,    72,    72,    78,    78,    79,    79,    79,    80
-};
+#define YYPACT_NINF (-42)
+
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+#define YYTABLE_NINF (-1)
+
+#define yytable_value_is_error(Yyn) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-       0,     2,     1,     1,     1,     1,     3,     2,     2,     2,
-       2,     2,     2,     2,     2,     3,     4,     3,     4,     0,
-       5,     1,     0,     1,     3,     1,     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,     1,
-       3,     1,     1,     1,     2,     1,     2,     1,     1,     1
+      49,   -42,   -42,   -42,   -42,   -42,   -42,   -42,   -42,   -42,
+     -38,   -42,   -42,    49,    49,    49,    49,    49,    49,    49,
+     -42,    27,   -42,    34,   187,    45,    16,   -42,    11,    53,
+      49,   -35,    11,   -35,   -35,   -35,   -35,    11,    38,   -35,
+     -42,    49,    49,    49,    49,    49,    49,    49,    49,    49,
+      49,    49,    49,    49,    49,    49,    49,    49,    49,    49,
+      49,    49,    49,    49,   -42,   -42,    -3,    49,   -42,    45,
+       9,    74,    49,   -42,   123,    10,   -42,   187,   187,   187,
+      88,   241,   266,   290,   313,   334,   353,   353,   368,   368,
+     368,   368,   -41,   -41,   380,   390,   390,   -35,   -35,   -35,
+     -42,    72,    33,    49,   -42,   -42,    49,   -42,   155,   -42,
+     -42,    49,   -42,   -42,   187,    39,   -35,   -42,   215,    49,
+     -42,   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.  */
-static const yytype_uint8 yydefact[] =
+  /* 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_int8 yydefact[] =
 {
        0,    51,    54,    59,    52,    69,    67,    53,    62,    63,
        0,    68,    56,     0,     0,     0,     0,     0,     0,     0,
@@ -665,164 +841,144 @@ static const yytype_uint8 yydefact[] =
        0,    12,     0,     8,    10,     9,     7,    66,     0,    11,
        1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    14,    13,     0,     0,    19,     0,
+       0,     0,     0,     0,    13,    14,     0,     0,    19,     0,
        0,     0,     0,    64,     0,     0,    28,     6,    50,    49,
-       0,    47,    46,    45,    44,    43,    38,    37,    41,    42,
-      40,    39,    36,    35,    29,    33,    34,    30,    31,    32,
+       0,    47,    46,    45,    44,    43,    37,    38,    41,    42,
+      39,    40,    35,    36,    29,    33,    34,    30,    31,    32,
       17,    15,     0,    22,    66,    25,     0,    60,     0,    58,
       57,     0,    16,    18,    23,     0,    26,    27,    48,     0,
       20,    24
 };
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int8 yydefgoto[] =
-{
-      -1,    21,    22,    23,    24,   103,    25,   115,   106,    26,
-      27,    32,    29
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -56
-static const yytype_int16 yypact[] =
+  /* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
 {
-      49,   -56,   -56,   -56,   -56,   -56,   -56,   -56,   -56,   -56,
-     -44,   -56,   -56,    49,    49,    49,    49,    49,    49,    49,
-     -56,    23,   -56,    34,   187,    45,   -23,   -56,     6,    46,
-      49,   -48,     6,   -48,   -48,   -48,   -48,     6,    38,   -48,
-     -56,    49,    49,    49,    49,    49,    49,    49,    49,    49,
-      49,    49,    49,    49,    49,    49,    49,    49,    49,    49,
-      49,    49,    49,    49,   -56,   -56,     5,    49,   -56,    45,
-       8,    65,    49,   -56,   123,   -55,   -56,   187,   187,   187,
-      88,   239,   263,   286,   308,   328,   346,   346,   360,   360,
-     360,   360,   372,   372,   383,   -34,   -34,   -48,   -48,   -48,
-     -56,    69,    33,    49,   -56,   -56,    49,   -56,   155,   -56,
-     -56,    49,   -56,   -56,   187,    39,   -48,   -56,   214,    49,
-     -56,   187
+     -42,   -42,   -42,    -4,   -13,   -42,   -42,   -42,   -42,   -42,
+     -42,    51,    17
 };
 
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
 {
-     -56,   -56,   -56,    -4,   -13,   -56,   -56,   -56,   -56,   -56,
-     -56,    51,     9
+      -1,    21,    22,    23,    24,   103,    25,   115,   106,    26,
+      27,    32,    29
 };
 
-/* 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
-static const yytype_uint8 yytable[] =
-{
-      31,    33,    34,    35,    36,    72,    39,    64,    65,   110,
-      66,    67,    68,     5,    38,   100,    30,    74,    61,    62,
-      63,    64,    65,    40,    66,    67,    68,    71,    77,    78,
+  /* 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_int8 yytable[] =
+{
+      31,    33,    34,    35,    36,     5,    39,   100,    58,    59,
+      60,    61,    62,    63,    38,    64,    65,    74,    66,    67,
+      68,    64,    65,    30,    66,    67,    68,    40,    77,    78,
       79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
       89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
       99,    28,     1,     2,     6,     3,     4,     5,     6,   108,
-       7,     8,     9,   102,    41,    41,    72,    10,    37,    41,
-     119,   107,    73,    11,   105,   101,    70,    11,    12,   112,
-       0,    75,     0,     0,     0,     0,     0,    13,    14,     0,
+       7,     8,     9,   102,    41,    41,    71,    10,    37,    41,
+     119,    72,    72,    11,   110,   105,    70,    11,    12,    73,
+     107,    75,   112,   101,     0,     0,     0,    13,    14,     0,
      114,     0,     0,   116,     0,     0,   113,    69,   118,    15,
-      16,    17,    76,   120,     0,     0,   121,     0,     0,    18,
-       0,    19,     0,     0,    20,     0,     0,     0,    42,     0,
+      16,    17,    76,   120,     0,     0,   121,     0,     0,     0,
+      18,    19,     0,     0,    20,     0,     0,     0,    42,     0,
      104,    43,    44,    45,    46,    47,    48,    49,     0,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,     0,    66,    67,    68,     0,
+      61,    62,    63,     0,    64,    65,     0,    66,    67,    68,
        0,     0,     0,    42,     0,   111,    43,    44,    45,    46,
       47,    48,    49,     0,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-       0,    66,    67,    68,     0,    42,     0,   109,    43,    44,
+      56,    57,    58,    59,    60,    61,    62,    63,     0,    64,
+      65,     0,    66,    67,    68,    42,     0,   109,    43,    44,
       45,    46,    47,    48,    49,     0,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,     0,    66,    67,    68,     0,    42,     0,   117,
+       0,    64,    65,     0,    66,    67,    68,    42,     0,   117,
       43,    44,    45,    46,    47,    48,    49,     0,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,     0,    66,    67,    68,    44,    45,
-      46,    47,    48,    49,     0,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,     0,    66,    67,    68,    46,    47,    48,    49,     0,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
-      47,    48,    49,     0,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-       0,    66,    67,    68,    48,    49,     0,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,     0,    66,    67,    68,    49,     0,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,     0,    66,    67,    68,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,     0,    66,    67,    68,    52,
+      62,    63,     0,    64,    65,     0,    66,    67,    68,    44,
+      45,    46,    47,    48,    49,     0,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+       0,    64,    65,     0,    66,    67,    68,    46,    47,    48,
+      49,     0,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,     0,    64,    65,     0,
+      66,    67,    68,    47,    48,    49,     0,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,     0,    66,    67,    68,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,     0,    66,    67,
-      68,    58,    59,    60,    61,    62,    63,    64,    65,     0,
-      66,    67,    68,    59,    60,    61,    62,    63,    64,    65,
-       0,    66,    67,    68
+      63,     0,    64,    65,     0,    66,    67,    68,    48,    49,
+       0,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,     0,    64,    65,     0,    66,
+      67,    68,    49,     0,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,     0,    64,
+      65,     0,    66,    67,    68,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,     0,
+      64,    65,     0,    66,    67,    68,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,     0,    64,
+      65,     0,    66,    67,    68,    56,    57,    58,    59,    60,
+      61,    62,    63,     0,    64,    65,     0,    66,    67,    68,
+      59,    60,    61,    62,    63,     0,    64,    65,     0,    66,
+      67,    68,    61,    62,    63,     0,    64,    65,     0,    66,
+      67,    68
 };
 
 static const yytype_int8 yycheck[] =
 {
-      13,    14,    15,    16,    17,    60,    19,    55,    56,    64,
-      58,    59,    60,     8,    18,    10,    60,    30,    52,    53,
-      54,    55,    56,     0,    58,    59,    60,    50,    41,    42,
+      13,    14,    15,    16,    17,     8,    19,    10,    49,    50,
+      51,    52,    53,    54,    18,    56,    57,    30,    59,    60,
+      61,    56,    57,    61,    59,    60,    61,     0,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,     0,     3,     4,     9,     6,     7,     8,     9,    72,
-      11,    12,    13,    67,    31,    31,    60,    18,    17,    31,
-      31,     6,    26,    28,    66,    66,    25,    28,    29,    10,
-      -1,    30,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
+      11,    12,    13,    67,    31,    31,    50,    18,    17,    31,
+      31,    61,    61,    28,    64,    66,    25,    28,    29,    26,
+       6,    30,    10,    66,    -1,    -1,    -1,    38,    39,    -1,
      103,    -1,    -1,   106,    -1,    -1,    63,    52,   111,    50,
-      51,    52,    64,    64,    -1,    -1,   119,    -1,    -1,    60,
-      -1,    62,    -1,    -1,    65,    -1,    -1,    -1,    30,    -1,
+      51,    52,    64,    64,    -1,    -1,   119,    -1,    -1,    -1,
+      61,    62,    -1,    -1,    65,    -1,    -1,    -1,    30,    -1,
       69,    33,    34,    35,    36,    37,    38,    39,    -1,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    58,    59,    60,    -1,
+      52,    53,    54,    -1,    56,    57,    -1,    59,    60,    61,
       -1,    -1,    -1,    30,    -1,    67,    33,    34,    35,    36,
       37,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      -1,    58,    59,    60,    -1,    30,    -1,    64,    33,    34,
+      47,    48,    49,    50,    51,    52,    53,    54,    -1,    56,
+      57,    -1,    59,    60,    61,    30,    -1,    64,    33,    34,
       35,    36,    37,    38,    39,    -1,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    -1,    58,    59,    60,    -1,    30,    -1,    64,
+      -1,    56,    57,    -1,    59,    60,    61,    30,    -1,    64,
       33,    34,    35,    36,    37,    38,    39,    -1,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    -1,    58,    59,    60,    34,    35,
-      36,    37,    38,    39,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    -1,    58,    59,    60,    36,    37,    38,    39,    -1,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    -1,    58,    59,    60,
-      37,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      -1,    58,    59,    60,    38,    39,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    -1,    58,    59,    60,    39,    -1,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    58,    59,    60,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    58,    59,    60,    43,
+      53,    54,    -1,    56,    57,    -1,    59,    60,    61,    34,
+      35,    36,    37,    38,    39,    -1,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      -1,    56,    57,    -1,    59,    60,    61,    36,    37,    38,
+      39,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
+      59,    60,    61,    37,    38,    39,    -1,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    -1,    58,    59,    60,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    -1,    58,    59,
-      60,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
-      58,    59,    60,    50,    51,    52,    53,    54,    55,    56,
-      -1,    58,    59,    60
+      54,    -1,    56,    57,    -1,    59,    60,    61,    38,    39,
+      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    -1,    56,    57,    -1,    59,
+      60,    61,    39,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    -1,    56,
+      57,    -1,    59,    60,    61,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
+      56,    57,    -1,    59,    60,    61,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    -1,    56,
+      57,    -1,    59,    60,    61,    47,    48,    49,    50,    51,
+      52,    53,    54,    -1,    56,    57,    -1,    59,    60,    61,
+      50,    51,    52,    53,    54,    -1,    56,    57,    -1,    59,
+      60,    61,    52,    53,    54,    -1,    56,    57,    -1,    59,
+      60,    61
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_int8 yystos[] =
 {
        0,     3,     4,     6,     7,     8,     9,    11,    12,    13,
-      18,    28,    29,    38,    39,    50,    51,    52,    60,    62,
+      18,    28,    29,    38,    39,    50,    51,    52,    61,    62,
       65,    69,    70,    71,    72,    74,    77,    78,    79,    80,
-      60,    72,    79,    72,    72,    72,    72,    79,    71,    72,
+      61,    72,    79,    72,    72,    72,    72,    79,    71,    72,
        0,    31,    30,    33,    34,    35,    36,    37,    38,    39,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    58,    59,    60,    52,
-      79,    50,    60,    26,    72,    79,    64,    72,    72,    72,
+      51,    52,    53,    54,    56,    57,    59,    60,    61,    52,
+      79,    50,    61,    26,    72,    79,    64,    72,    72,    72,
       72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
       72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
       10,    80,    71,    73,    79,    66,    76,     6,    72,    64,
@@ -830,95 +986,64 @@ static const yytype_uint8 yystos[] =
       64,    72
 };
 
-#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
-
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_int8 yyr1[] =
+{
+       0,    68,    69,    69,    70,    71,    71,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    73,
+      72,    74,    75,    75,    75,    76,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    77,
+      77,    72,    72,    72,    78,    78,    79,    79,    79,    80
+};
 
-/* 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.  */
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_int8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     1,     3,     2,     2,     2,
+       2,     2,     2,     2,     2,     3,     4,     3,     4,     0,
+       5,     1,     0,     1,     3,     1,     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,     1,
+       3,     1,     1,     1,     2,     1,     2,     1,     1,     1
+};
 
-#define YYFAIL		goto yyerrlab
 
-#define YYRECOVERING()  (!!yyerrstatus)
+enum { YYENOMEM = -2 };
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      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
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
 
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-/* 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
 
+#define YYRECOVERING()  (!!yyerrstatus)
 
-/* YYLEX -- calling `yylex' with the right arguments.  */
+#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 (0)
+
+/* Backward compatibility with an undocumented macro.
+   Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
 
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -928,80 +1053,65 @@ 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))
-
-
-/*--------------------------------.
-| 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 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
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Kind, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
 static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
+yy_symbol_value_print (FILE *yyo,
+                       yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+  if (yykind < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#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 *yyo,
+                 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yykind, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1009,16 +1119,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
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1029,63 +1131,56 @@ 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 (yy_state_t *yyssp, YYSTYPE *yyvsp,
+                 int yyrule)
 {
+  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);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             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,
+                       YY_ACCESSING_SYMBOL (+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.  */
 int yydebug;
 #else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1100,342 +1195,82 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-
 
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   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++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  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;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      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;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# 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)
-{
-  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;
-    }
-}
-#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,
+            yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
+  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
-      default:
-	break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yykind);
+  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;
-
 /* Number of syntax errors so far.  */
 int yynerrs;
 
 
 
-/*-------------------------.
-| 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)
+
+/*----------.
+| yyparse.  |
+`----------*/
+
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
-
-
-    int yystate;
+    yy_state_fast_t 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.  */
 
+    /* Their size.  */
+    YYPTRDIFF_T yystacksize;
+
     /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYSIZE_T yystacksize;
-
   int yyn;
+  /* The return value of yyparse.  */
   int yyresult;
   /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
+  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
   YYSTYPE yyval;
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
@@ -1443,133 +1278,147 @@ yyparse ()
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
+  yynerrs = 0;
+  yystate = 0;
+  yyerrstatus = 0;
+
   yystacksize = YYINITDEPTH;
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
-  yystate = 0;
-  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;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
+  YY_STACK_PRINT (yyss, yyssp);
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined 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);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Give user a chance to xreallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+
+        /* 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 * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* 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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, 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 */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
   /* 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.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      YYDPRINTF ((stderr, "Reading a token\n"));
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
     {
-      yychar = yytoken = YYEOF;
+      yychar = YYEOF;
+      yytoken = YYSYMBOL_YYEOF;
       YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else if (yychar == YYerror)
+    {
+      /* The scanner already issued an error message, process directly
+         to error recovery.  But do not keep the error token as
+         lookahead, it is too special and may lead us to an endless
+         loop in error recovery. */
+      yychar = YYUNDEF;
+      yytoken = YYSYMBOL_YYerror;
+      goto yyerrlab1;
+    }
   else
     {
       yytoken = YYTRANSLATE (yychar);
@@ -1584,8 +1433,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;
     }
@@ -1597,13 +1446,13 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -1618,14 +1467,14 @@ yydefault:
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   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
@@ -1638,432 +1487,390 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 4:
-
-/* Line 1455 of yacc.c  */
-#line 196 "go-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); }
+  case 4:
+#line 199 "go-exp.y"
+                        { pstate->push_new<type_operation> ((yyvsp[0].tval)); }
+#line 1495 "go-exp.c.tmp"
     break;
 
   case 6:
-
-/* Line 1455 of yacc.c  */
-#line 204 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_COMMA); }
+#line 205 "go-exp.y"
+                        { pstate->wrap2<comma_operation> (); }
+#line 1501 "go-exp.c.tmp"
     break;
 
   case 7:
-
-/* Line 1455 of yacc.c  */
-#line 209 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_IND); }
+#line 210 "go-exp.y"
+                        { pstate->wrap<unop_ind_operation> (); }
+#line 1507 "go-exp.c.tmp"
     break;
 
   case 8:
-
-/* Line 1455 of yacc.c  */
-#line 213 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_ADDR); }
+#line 214 "go-exp.y"
+                        { pstate->wrap<unop_addr_operation> (); }
+#line 1513 "go-exp.c.tmp"
     break;
 
   case 9:
-
-/* Line 1455 of yacc.c  */
-#line 217 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_NEG); }
+#line 218 "go-exp.y"
+                        { pstate->wrap<unary_neg_operation> (); }
+#line 1519 "go-exp.c.tmp"
     break;
 
   case 10:
-
-/* Line 1455 of yacc.c  */
-#line 221 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_PLUS); }
+#line 222 "go-exp.y"
+                        { pstate->wrap<unary_plus_operation> (); }
+#line 1525 "go-exp.c.tmp"
     break;
 
   case 11:
-
-/* Line 1455 of yacc.c  */
-#line 225 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
+#line 226 "go-exp.y"
+                        { pstate->wrap<unary_logical_not_operation> (); }
+#line 1531 "go-exp.c.tmp"
     break;
 
   case 12:
-
-/* Line 1455 of yacc.c  */
-#line 229 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+#line 230 "go-exp.y"
+                        { pstate->wrap<unary_complement_operation> (); }
+#line 1537 "go-exp.c.tmp"
     break;
 
   case 13:
-
-/* Line 1455 of yacc.c  */
-#line 233 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
+#line 234 "go-exp.y"
+                        { pstate->wrap<postinc_operation> (); }
+#line 1543 "go-exp.c.tmp"
     break;
 
   case 14:
-
-/* Line 1455 of yacc.c  */
-#line 237 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
+#line 238 "go-exp.y"
+                        { pstate->wrap<postdec_operation> (); }
+#line 1549 "go-exp.c.tmp"
     break;
 
   case 15:
-
-/* Line 1455 of yacc.c  */
-#line 243 "go-exp.y"
-    { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, (yyvsp[(3) - (3)].ssym).stoken);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 244 "go-exp.y"
+                        {
+			  pstate->push_new<structop_operation>
+			    (pstate->pop (), copy_name ((yyvsp[0].ssym).stoken));
+			}
+#line 1558 "go-exp.c.tmp"
     break;
 
   case 16:
-
-/* Line 1455 of yacc.c  */
-#line 249 "go-exp.y"
-    { pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, (yyvsp[(3) - (4)].ssym).stoken);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+#line 251 "go-exp.y"
+                        {
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (),
+						      copy_name ((yyvsp[-1].ssym).stoken));
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 1570 "go-exp.c.tmp"
     break;
 
   case 17:
-
-/* Line 1455 of yacc.c  */
-#line 256 "go-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 261 "go-exp.y"
+                        {
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (), "");
+			  pstate->mark_struct_expression (op);
+			  pstate->push (operation_up (op));
+			}
+#line 1581 "go-exp.c.tmp"
     break;
 
   case 18:
-
-/* Line 1455 of yacc.c  */
-#line 266 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+#line 270 "go-exp.y"
+                        { pstate->wrap2<subscript_operation> (); }
+#line 1587 "go-exp.c.tmp"
     break;
 
   case 19:
-
-/* Line 1455 of yacc.c  */
-#line 272 "go-exp.y"
-    { pstate->start_arglist (); }
+#line 276 "go-exp.y"
+                        { pstate->start_arglist (); }
+#line 1593 "go-exp.c.tmp"
     break;
 
   case 20:
-
-/* Line 1455 of yacc.c  */
-#line 274 "go-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 278 "go-exp.y"
+                        {
+			  std::vector<operation_up> args
+			    = pstate->pop_vector (pstate->end_arglist ());
+			  pstate->push_new<funcall_operation>
+			    (pstate->pop (), std::move (args));
+			}
+#line 1604 "go-exp.c.tmp"
     break;
 
   case 21:
-
-/* Line 1455 of yacc.c  */
-#line 281 "go-exp.y"
-    { pstate->start_arglist (); }
+#line 287 "go-exp.y"
+                        { pstate->start_arglist (); }
+#line 1610 "go-exp.c.tmp"
     break;
 
   case 23:
-
-/* Line 1455 of yacc.c  */
-#line 288 "go-exp.y"
-    { pstate->arglist_len = 1; }
+#line 294 "go-exp.y"
+                        { pstate->arglist_len = 1; }
+#line 1616 "go-exp.c.tmp"
     break;
 
   case 24:
-
-/* Line 1455 of yacc.c  */
-#line 292 "go-exp.y"
-    { pstate->arglist_len++; }
+#line 298 "go-exp.y"
+                        { pstate->arglist_len++; }
+#line 1622 "go-exp.c.tmp"
     break;
 
   case 25:
-
-/* Line 1455 of yacc.c  */
-#line 296 "go-exp.y"
-    { (yyval.lval) = pstate->end_arglist () - 1; }
+#line 302 "go-exp.y"
+                        { (yyval.lval) = pstate->end_arglist () - 1; }
+#line 1628 "go-exp.c.tmp"
     break;
 
   case 26:
-
-/* Line 1455 of yacc.c  */
-#line 300 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_MEMVAL);
-			  write_exp_elt_type (pstate, (yyvsp[(2) - (4)].tval));
-			  write_exp_elt_opcode (pstate, UNOP_MEMVAL); }
+#line 306 "go-exp.y"
+                        {
+			  pstate->push_new<unop_memval_operation>
+			    (pstate->pop (), (yyvsp[-2].tval));
+			}
+#line 1637 "go-exp.c.tmp"
     break;
 
   case 27:
-
-/* Line 1455 of yacc.c  */
-#line 306 "go-exp.y"
-    { write_exp_elt_opcode (pstate, UNOP_CAST);
-			  write_exp_elt_type (pstate, (yyvsp[(1) - (4)].tval));
-			  write_exp_elt_opcode (pstate, UNOP_CAST); }
+#line 313 "go-exp.y"
+                        {
+			  pstate->push_new<unop_cast_operation>
+			    (pstate->pop (), (yyvsp[-3].tval));
+			}
+#line 1646 "go-exp.c.tmp"
     break;
 
   case 28:
-
-/* Line 1455 of yacc.c  */
-#line 312 "go-exp.y"
-    { }
+#line 320 "go-exp.y"
+                        { }
+#line 1652 "go-exp.c.tmp"
     break;
 
   case 29:
-
-/* Line 1455 of yacc.c  */
-#line 318 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
+#line 326 "go-exp.y"
+                        { pstate->wrap2<repeat_operation> (); }
+#line 1658 "go-exp.c.tmp"
     break;
 
   case 30:
-
-/* Line 1455 of yacc.c  */
-#line 322 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_MUL); }
+#line 330 "go-exp.y"
+                        { pstate->wrap2<mul_operation> (); }
+#line 1664 "go-exp.c.tmp"
     break;
 
   case 31:
-
-/* Line 1455 of yacc.c  */
-#line 326 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_DIV); }
+#line 334 "go-exp.y"
+                        { pstate->wrap2<div_operation> (); }
+#line 1670 "go-exp.c.tmp"
     break;
 
   case 32:
-
-/* Line 1455 of yacc.c  */
-#line 330 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_REM); }
+#line 338 "go-exp.y"
+                        { pstate->wrap2<rem_operation> (); }
+#line 1676 "go-exp.c.tmp"
     break;
 
   case 33:
-
-/* Line 1455 of yacc.c  */
-#line 334 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ADD); }
+#line 342 "go-exp.y"
+                        { pstate->wrap2<add_operation> (); }
+#line 1682 "go-exp.c.tmp"
     break;
 
   case 34:
-
-/* Line 1455 of yacc.c  */
-#line 338 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_SUB); }
+#line 346 "go-exp.y"
+                        { pstate->wrap2<sub_operation> (); }
+#line 1688 "go-exp.c.tmp"
     break;
 
   case 35:
-
-/* Line 1455 of yacc.c  */
-#line 342 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LSH); }
+#line 350 "go-exp.y"
+                        { pstate->wrap2<lsh_operation> (); }
+#line 1694 "go-exp.c.tmp"
     break;
 
   case 36:
-
-/* Line 1455 of yacc.c  */
-#line 346 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_RSH); }
+#line 354 "go-exp.y"
+                        { pstate->wrap2<rsh_operation> (); }
+#line 1700 "go-exp.c.tmp"
     break;
 
   case 37:
-
-/* Line 1455 of yacc.c  */
-#line 350 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
+#line 358 "go-exp.y"
+                        { pstate->wrap2<equal_operation> (); }
+#line 1706 "go-exp.c.tmp"
     break;
 
   case 38:
-
-/* Line 1455 of yacc.c  */
-#line 354 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+#line 362 "go-exp.y"
+                        { pstate->wrap2<notequal_operation> (); }
+#line 1712 "go-exp.c.tmp"
     break;
 
   case 39:
-
-/* Line 1455 of yacc.c  */
-#line 358 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LEQ); }
+#line 366 "go-exp.y"
+                        { pstate->wrap2<leq_operation> (); }
+#line 1718 "go-exp.c.tmp"
     break;
 
   case 40:
-
-/* Line 1455 of yacc.c  */
-#line 362 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GEQ); }
+#line 370 "go-exp.y"
+                        { pstate->wrap2<geq_operation> (); }
+#line 1724 "go-exp.c.tmp"
     break;
 
   case 41:
-
-/* Line 1455 of yacc.c  */
-#line 366 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LESS); }
+#line 374 "go-exp.y"
+                        { pstate->wrap2<less_operation> (); }
+#line 1730 "go-exp.c.tmp"
     break;
 
   case 42:
-
-/* Line 1455 of yacc.c  */
-#line 370 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_GTR); }
+#line 378 "go-exp.y"
+                        { pstate->wrap2<gtr_operation> (); }
+#line 1736 "go-exp.c.tmp"
     break;
 
   case 43:
-
-/* Line 1455 of yacc.c  */
-#line 374 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
+#line 382 "go-exp.y"
+                        { pstate->wrap2<bitwise_and_operation> (); }
+#line 1742 "go-exp.c.tmp"
     break;
 
   case 44:
-
-/* Line 1455 of yacc.c  */
-#line 378 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
+#line 386 "go-exp.y"
+                        { pstate->wrap2<bitwise_xor_operation> (); }
+#line 1748 "go-exp.c.tmp"
     break;
 
   case 45:
-
-/* Line 1455 of yacc.c  */
-#line 382 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
+#line 390 "go-exp.y"
+                        { pstate->wrap2<bitwise_ior_operation> (); }
+#line 1754 "go-exp.c.tmp"
     break;
 
   case 46:
-
-/* Line 1455 of yacc.c  */
-#line 386 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
+#line 394 "go-exp.y"
+                        { pstate->wrap2<logical_and_operation> (); }
+#line 1760 "go-exp.c.tmp"
     break;
 
   case 47:
-
-/* Line 1455 of yacc.c  */
-#line 390 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+#line 398 "go-exp.y"
+                        { pstate->wrap2<logical_or_operation> (); }
+#line 1766 "go-exp.c.tmp"
     break;
 
   case 48:
-
-/* Line 1455 of yacc.c  */
-#line 394 "go-exp.y"
-    { write_exp_elt_opcode (pstate, TERNOP_COND); }
+#line 402 "go-exp.y"
+                        {
+			  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 1779 "go-exp.c.tmp"
     break;
 
   case 49:
-
-/* Line 1455 of yacc.c  */
-#line 398 "go-exp.y"
-    { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
+#line 413 "go-exp.y"
+                        { pstate->wrap2<assign_operation> (); }
+#line 1785 "go-exp.c.tmp"
     break;
 
   case 50:
-
-/* Line 1455 of yacc.c  */
-#line 402 "go-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 417 "go-exp.y"
+                        {
+			  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 1796 "go-exp.c.tmp"
     break;
 
   case 51:
-
-/* Line 1455 of yacc.c  */
-#line 408 "go-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 426 "go-exp.y"
+                        {
+			  pstate->push_new<long_const_operation>
+			    ((yyvsp[0].typed_val_int).type, (yyvsp[0].typed_val_int).val);
+			}
+#line 1805 "go-exp.c.tmp"
     break;
 
   case 52:
-
-/* Line 1455 of yacc.c  */
-#line 415 "go-exp.y"
-    {
+#line 433 "go-exp.y"
+                        {
 			  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 ((yyvsp[0].tsval).type, &vec);
 			}
+#line 1816 "go-exp.c.tmp"
     break;
 
   case 53:
-
-/* Line 1455 of yacc.c  */
-#line 424 "go-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 442 "go-exp.y"
+                        { 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 1828 "go-exp.c.tmp"
     break;
 
   case 54:
-
-/* Line 1455 of yacc.c  */
-#line 437 "go-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 453 "go-exp.y"
+                        {
+			  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 1839 "go-exp.c.tmp"
     break;
 
   case 56:
-
-/* Line 1455 of yacc.c  */
-#line 447 "go-exp.y"
-    {
-			  write_dollar_variable (pstate, (yyvsp[(1) - (1)].sval));
+#line 465 "go-exp.y"
+                        {
+			  pstate->push_dollar ((yyvsp[0].sval));
 			}
+#line 1847 "go-exp.c.tmp"
     break;
 
   case 57:
-
-/* Line 1455 of yacc.c  */
-#line 453 "go-exp.y"
-    {
+#line 471 "go-exp.y"
+                        {
 			  /* TODO(dje): Go objects in structs.  */
-			  write_exp_elt_opcode (pstate, OP_LONG);
 			  /* TODO(dje): What's the right type here?  */
-			  write_exp_elt_type
-			    (pstate,
-			     parse_type (pstate)->builtin_unsigned_int);
-			  (yyvsp[(3) - (4)].tval) = check_typedef ((yyvsp[(3) - (4)].tval));
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST) TYPE_LENGTH ((yyvsp[(3) - (4)].tval)));
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  struct type *size_type
+			    = parse_type (pstate)->builtin_unsigned_int;
+			  (yyvsp[-1].tval) = check_typedef ((yyvsp[-1].tval));
+			  pstate->push_new<long_const_operation>
+			    (size_type, (LONGEST) TYPE_LENGTH ((yyvsp[-1].tval)));
 			}
+#line 1861 "go-exp.c.tmp"
     break;
 
   case 58:
-
-/* Line 1455 of yacc.c  */
-#line 468 "go-exp.y"
-    {
+#line 483 "go-exp.y"
+                        {
 			  /* TODO(dje): Go objects in structs.  */
-			  write_exp_elt_opcode (pstate, UNOP_SIZEOF);
+			  pstate->wrap<unop_sizeof_operation> ();
 			}
+#line 1870 "go-exp.c.tmp"
     break;
 
   case 59:
-
-/* Line 1455 of yacc.c  */
-#line 475 "go-exp.y"
-    {
+#line 490 "go-exp.y"
+                        {
 			  /* We copy the string here, and not in the
 			     lexer, to guarantee that we do not leak a
 			     string.  */
@@ -2073,18 +1880,17 @@ 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 1890 "go-exp.c.tmp"
     break;
 
   case 60:
-
-/* Line 1455 of yacc.c  */
-#line 492 "go-exp.y"
-    {
+#line 507 "go-exp.y"
+                        {
 			  /* Note that we NUL-terminate here, but just
 			     for convenience.  */
 			  char *p;
@@ -2092,84 +1898,70 @@ yyreduce:
 			  (yyval.svec).tokens = XRESIZEVEC (struct typed_stoken,
 						  (yyval.svec).tokens, (yyval.svec).len);
 
-			  p = (char *) xmalloc ((yyvsp[(3) - (3)].tsval).length + 1);
-			  memcpy (p, (yyvsp[(3) - (3)].tsval).ptr, (yyvsp[(3) - (3)].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[(3) - (3)].tsval).type;
-			  (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[(3) - (3)].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 1910 "go-exp.c.tmp"
     break;
 
   case 61:
-
-/* Line 1455 of yacc.c  */
-#line 510 "go-exp.y"
-    {
+#line 525 "go-exp.y"
+                        {
 			  int i;
 
-			  write_exp_string_vector (pstate, 0 /*always utf8*/,
-						   &(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);
+			  /* Always utf8.  */
+			  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 1924 "go-exp.c.tmp"
     break;
 
   case 62:
-
-/* Line 1455 of yacc.c  */
-#line 522 "go-exp.y"
-    { write_exp_elt_opcode (pstate, OP_BOOL);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(1) - (1)].lval));
-			  write_exp_elt_opcode (pstate, OP_BOOL); }
+#line 537 "go-exp.y"
+                        { pstate->push_new<bool_operation> ((yyvsp[0].lval)); }
+#line 1930 "go-exp.c.tmp"
     break;
 
   case 63:
-
-/* Line 1455 of yacc.c  */
-#line 528 "go-exp.y"
-    { write_exp_elt_opcode (pstate, OP_BOOL);
-			  write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[(1) - (1)].lval));
-			  write_exp_elt_opcode (pstate, OP_BOOL); }
+#line 541 "go-exp.y"
+                        { pstate->push_new<bool_operation> ((yyvsp[0].lval)); }
+#line 1936 "go-exp.c.tmp"
     break;
 
   case 64:
-
-/* Line 1455 of yacc.c  */
-#line 534 "go-exp.y"
-    { struct symbol *sym = (yyvsp[(1) - (2)].ssym).sym.symbol;
+#line 545 "go-exp.y"
+                        { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol;
 
 			  if (sym == NULL
 			      || !SYMBOL_IS_ARGUMENT (sym)
 			      || !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 1952 "go-exp.c.tmp"
     break;
 
   case 65:
-
-/* Line 1455 of yacc.c  */
-#line 550 "go-exp.y"
-    { struct block_symbol sym = (yyvsp[(1) - (1)].ssym).sym;
+#line 559 "go-exp.y"
+                        { struct block_symbol sym = (yyvsp[0].ssym).sym;
 
 			  if (sym.symbol)
 			    {
 			      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 ((yyvsp[(1) - (1)].ssym).is_a_field_of_this)
+			  else if ((yyvsp[0].ssym).is_a_field_of_this)
 			    {
 			      /* TODO(dje): Can we get here?
 				 E.g., via a mix of c++ and go?  */
@@ -2178,12 +1970,13 @@ yyreduce:
 			  else
 			    {
 			      struct bound_minimal_symbol msymbol;
-			      std::string arg = copy_name ((yyvsp[(1) - (1)].ssym).stoken);
+			      std::string arg = copy_name ((yyvsp[0].ssym).stoken);
 
 			      msymbol =
 				lookup_bound_minimal_symbol (arg.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.  "
@@ -2193,123 +1986,96 @@ yyreduce:
 				       arg.c_str ());
 			    }
 			}
+#line 1991 "go-exp.c.tmp"
     break;
 
   case 66:
-
-/* Line 1455 of yacc.c  */
-#line 597 "go-exp.y"
-    { (yyval.tval) = lookup_pointer_type ((yyvsp[(2) - (2)].tval)); }
+#line 604 "go-exp.y"
+                        { (yyval.tval) = lookup_pointer_type ((yyvsp[0].tval)); }
+#line 1997 "go-exp.c.tmp"
     break;
 
   case 67:
-
-/* Line 1455 of yacc.c  */
-#line 599 "go-exp.y"
-    { (yyval.tval) = (yyvsp[(1) - (1)].tsym).type; }
+#line 606 "go-exp.y"
+                        { (yyval.tval) = (yyvsp[0].tsym).type; }
+#line 2003 "go-exp.c.tmp"
     break;
 
   case 68:
-
-/* Line 1455 of yacc.c  */
-#line 606 "go-exp.y"
-    { (yyval.tval) = builtin_go_type (pstate->gdbarch ())
+#line 613 "go-exp.y"
+                        { (yyval.tval) = builtin_go_type (pstate->gdbarch ())
 			    ->builtin_uint8; }
+#line 2010 "go-exp.c.tmp"
     break;
 
 
+#line 2014 "go-exp.c.tmp"
 
-/* Line 1455 of yacc.c  */
-#line 2225 "go-exp.c.tmp"
       default: break;
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+  /* 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 ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
 
   *++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.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   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 ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
-#else
-      {
-	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;
-	  }
-      }
-#endif
     }
 
-
-
   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
@@ -2321,14 +2087,12 @@ yyerrlab:
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  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;
@@ -2341,39 +2105,42 @@ 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.  */
 
+  /* Pop stack until we find a state that shifts the error token.  */
   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 += YYSYMBOL_YYerror;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+            {
+              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);
+                  YY_ACCESSING_SYMBOL (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.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
@@ -2386,6 +2153,7 @@ yyacceptlab:
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -2393,7 +2161,8 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+
+#if !defined yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2403,36 +2172,38 @@ yyexhaustedlab:
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 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);
+                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
 
+  return yyresult;
+}
 
-/* Line 1675 of yacc.c  */
-#line 628 "go-exp.y"
+#line 635 "go-exp.y"
 
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2490,15 +2261,15 @@ parse_number (struct parser_state *par_s
 	}
       /* Default type for floating-point literals is float64.  */
       else
-        {
+	{
 	  putithere->typed_val_float.type
 	    = builtin_go_types->builtin_float64;
-        }
+	}
 
       if (!parse_float (p, len,
 			putithere->typed_val_float.type,
 			putithere->typed_val_float.val))
-        return ERROR;
+	return ERROR;
       return FLOAT;
     }
 
@@ -2614,7 +2385,7 @@ parse_number (struct parser_state *par_s
       && (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
     {
       high_bit
-        = ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
+	= ((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,
@@ -2732,7 +2503,7 @@ parse_string_or_char (const char *tokptr
     }
   ++tokptr;
 
-  value->type = C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
+  value->type = (int) C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
   value->ptr = (char *) obstack_base (&tempbuf);
   value->length = obstack_object_size (&tempbuf);
 
@@ -2766,19 +2537,19 @@ 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},
-    /*{"->", RIGHT_ARROW, BINOP_END}, Doesn't exist in Go.  */
-    {"<-", LEFT_ARROW, BINOP_END},
-    {"&&", ANDAND, BINOP_END},
-    {"||", OROR, BINOP_END},
-    {"<<", LSH, BINOP_END},
-    {">>", RSH, BINOP_END},
-    {"==", EQUAL, BINOP_END},
-    {"!=", NOTEQUAL, BINOP_END},
-    {"<=", LEQ, BINOP_END},
-    {">=", GEQ, BINOP_END},
-    /*{"&^", ANDNOT, BINOP_END}, TODO */
+    {"++", INCREMENT, OP_NULL},
+    {"--", DECREMENT, OP_NULL},
+    /*{"->", RIGHT_ARROW, OP_NULL}, Doesn't exist in Go.  */
+    {"<-", LEFT_ARROW, OP_NULL},
+    {"&&", ANDAND, OP_NULL},
+    {"||", OROR, OP_NULL},
+    {"<<", LSH, OP_NULL},
+    {">>", RSH, OP_NULL},
+    {"==", EQUAL, OP_NULL},
+    {"!=", NOTEQUAL, OP_NULL},
+    {"<=", LEQ, OP_NULL},
+    {">=", GEQ, OP_NULL},
+    /*{"&^", ANDNOT, OP_NULL}, TODO */
   };
 
 /* Identifier-like tokens.  */
@@ -2861,7 +2632,7 @@ lex_one_token (struct parser_state *par_
       else if (saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -2885,7 +2656,7 @@ lex_one_token (struct parser_state *par_
 
     case ',':
       if (pstate->comma_terminates
-          && paren_depth == 0)
+	  && paren_depth == 0)
 	return 0;
       par_state->lexptr++;
       return c;
@@ -2947,7 +2718,7 @@ lex_one_token (struct parser_state *par_
 	  }
 	toktype = parse_number (par_state, tokstart, p - tokstart,
 				got_dot|got_e, &yylval);
-        if (toktype == ERROR)
+	if (toktype == ERROR)
 	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 
@@ -3141,7 +2912,7 @@ package_name_p (const char *name, const
 
   if (sym
       && SYMBOL_CLASS (sym) == LOC_TYPEDEF
-      && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE)
+      && SYMBOL_TYPE (sym)->code () == TYPE_CODE_MODULE)
     return 1;
 
   return 0;
@@ -3358,8 +3129,10 @@ yylex (void)
   return classify_name (pstate, pstate->expression_context_block);
 }
 
+/* See language.h.  */
+
 int
-go_parse (struct parser_state *par_state)
+go_language::parser (struct parser_state *par_state) const
 {
   /* Setting up the parser state.  */
   scoped_restore pstate_restore = make_scoped_restore (&pstate);
@@ -3378,7 +3151,10 @@ go_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
@@ -3389,4 +3165,3 @@ yyerror (const char *msg)
 
   error (_("A %s in expression, near `%s'."), msg, pstate->lexptr);
 }
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-exp.y ./gdb/go-exp.y
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-exp.y	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/go-exp.y	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* YACC parser for Go expressions, for GDB.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -64,6 +64,7 @@
 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
 #include "charset.h"
 #include "block.h"
+#include "expop.h"
 
 #define parse_type(ps) builtin_type (ps->gdbarch ())
 
@@ -115,6 +116,8 @@ static void yyerror (const char *);
 /* YYSTYPE gets defined by %union.  */
 static int parse_number (struct parser_state *,
 			 const char *, int, int, YYSTYPE *);
+
+using namespace expr;
 %}
 
 %type <voidval> exp exp1 type_exp start variable lcurly
@@ -193,77 +196,78 @@ 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); }
 	;
 
 /* 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); }
+			{ pstate->wrap<unary_logical_not_operation> (); }
 	;
 
 exp	:	'^' exp    %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
+			{ pstate->wrap<unary_complement_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> (); }
 	;
 
 /* foo->bar is not in Go.  May want as a gdb extension.  Later.  */
 
 exp	:	exp '.' name_not_typename
-			{ write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, $3.stoken);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  pstate->push_new<structop_operation>
+			    (pstate->pop (), copy_name ($3.stoken));
+			}
 	;
 
 exp	:	exp '.' name_not_typename COMPLETE
-			{ pstate->mark_struct_expression ();
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
-			  write_exp_string (pstate, $3.stoken);
-			  write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
+			{
+			  structop_base_operation *op
+			    = new structop_operation (pstate->pop (),
+						      copy_name ($3.stoken));
+			  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 '[' exp1 ']'
-			{ write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
+			{ pstate->wrap2<subscript_operation> (); }
 	;
 
 exp	:	exp '('
@@ -271,10 +275,12 @@ exp	:	exp '('
 			   being accumulated by an outer function call.  */
 			{ pstate->start_arglist (); }
 		arglist ')'	%prec LEFT_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));
+			}
 	;
 
 lcurly	:	'{'
@@ -297,15 +303,17 @@ rcurly	:	'}'
 	;
 
 exp	:	lcurly type rcurly exp  %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_MEMVAL);
-			  write_exp_elt_type (pstate, $2);
-			  write_exp_elt_opcode (pstate, UNOP_MEMVAL); }
+			{
+			  pstate->push_new<unop_memval_operation>
+			    (pstate->pop (), $2);
+			}
 	;
 
 exp	:	type '(' exp ')'  %prec UNARY
-			{ write_exp_elt_opcode (pstate, UNOP_CAST);
-			  write_exp_elt_type (pstate, $1);
-			  write_exp_elt_opcode (pstate, UNOP_CAST); }
+			{
+			  pstate->push_new<unop_cast_operation>
+			    (pstate->pop (), $1);
+			}
 	;
 
 exp	:	'(' exp1 ')'
@@ -315,100 +323,110 @@ 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); }
+			{ pstate->wrap2<equal_operation> (); }
 	;
 
 exp	:	exp NOTEQUAL exp
-			{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
+			{ pstate->wrap2<notequal_operation> (); }
 	;
 
 exp	:	exp LEQ exp
-			{ write_exp_elt_opcode (pstate, BINOP_LEQ); }
+			{ pstate->wrap2<leq_operation> (); }
 	;
 
 exp	:	exp GEQ exp
-			{ write_exp_elt_opcode (pstate, BINOP_GEQ); }
+			{ pstate->wrap2<geq_operation> (); }
 	;
 
 exp	:	exp '<' exp
-			{ write_exp_elt_opcode (pstate, BINOP_LESS); }
+			{ pstate->wrap2<less_operation> (); }
 	;
 
 exp	:	exp '>' exp
-			{ write_exp_elt_opcode (pstate, BINOP_GTR); }
+			{ 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); }
+			{ pstate->wrap2<logical_and_operation> (); }
 	;
 
 exp	:	exp OROR exp
-			{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
+			{ 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 ();
+			  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); }
+			{ 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	:	CHAR
@@ -416,7 +434,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);
 			}
 	;
 
@@ -424,20 +442,20 @@ 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	:	variable
@@ -445,29 +463,26 @@ exp	:	variable
 
 exp	:	DOLLAR_VARIABLE
 			{
-			  write_dollar_variable (pstate, $1);
+			  pstate->push_dollar ($1);
 			}
 	;
 
 exp	:	SIZEOF_KEYWORD '(' type ')'  %prec UNARY
 			{
 			  /* TODO(dje): Go objects in structs.  */
-			  write_exp_elt_opcode (pstate, OP_LONG);
 			  /* TODO(dje): What's the right type here?  */
-			  write_exp_elt_type
-			    (pstate,
-			     parse_type (pstate)->builtin_unsigned_int);
+			  struct type *size_type
+			    = parse_type (pstate)->builtin_unsigned_int;
 			  $3 = check_typedef ($3);
-			  write_exp_elt_longcst (pstate,
-						 (LONGEST) TYPE_LENGTH ($3));
-			  write_exp_elt_opcode (pstate, OP_LONG);
+			  pstate->push_new<long_const_operation>
+			    (size_type, (LONGEST) TYPE_LENGTH ($3));
 			}
 	;
 
 exp	:	SIZEOF_KEYWORD  '(' exp ')'  %prec UNARY
 			{
 			  /* TODO(dje): Go objects in structs.  */
-			  write_exp_elt_opcode (pstate, UNOP_SIZEOF);
+			  pstate->wrap<unop_sizeof_operation> ();
 			}
 
 string_exp:
@@ -510,8 +525,8 @@ exp	:	string_exp  %prec ABOVE_COMMA
 			{
 			  int i;
 
-			  write_exp_string_vector (pstate, 0 /*always utf8*/,
-						   &$1);
+			  /* Always utf8.  */
+			  pstate->push_c_string (0, &$1);
 			  for (i = 0; i < $1.len; ++i)
 			    free ($1.tokens[i].ptr);
 			  free ($1.tokens);
@@ -519,15 +534,11 @@ exp	:	string_exp  %prec ABOVE_COMMA
 	;
 
 exp	:	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> ($1); }
 	;
 
 exp	:	FALSE_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> ($1); }
 	;
 
 variable:	name_not_typename ENTRY
@@ -540,9 +551,7 @@ variable:	name_not_typename ENTRY
 				     "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);
 			}
 	;
 
@@ -554,10 +563,7 @@ variable:	name_not_typename
 			      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 ($1.is_a_field_of_this)
 			    {
@@ -573,7 +579,8 @@ variable:	name_not_typename
 			      msymbol =
 				lookup_bound_minimal_symbol (arg.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.  "
@@ -682,15 +689,15 @@ parse_number (struct parser_state *par_s
 	}
       /* Default type for floating-point literals is float64.  */
       else
-        {
+	{
 	  putithere->typed_val_float.type
 	    = builtin_go_types->builtin_float64;
-        }
+	}
 
       if (!parse_float (p, len,
 			putithere->typed_val_float.type,
 			putithere->typed_val_float.val))
-        return ERROR;
+	return ERROR;
       return FLOAT;
     }
 
@@ -806,7 +813,7 @@ parse_number (struct parser_state *par_s
       && (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
     {
       high_bit
-        = ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
+	= ((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,
@@ -924,7 +931,7 @@ parse_string_or_char (const char *tokptr
     }
   ++tokptr;
 
-  value->type = C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
+  value->type = (int) C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
   value->ptr = (char *) obstack_base (&tempbuf);
   value->length = obstack_object_size (&tempbuf);
 
@@ -958,19 +965,19 @@ 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},
-    /*{"->", RIGHT_ARROW, BINOP_END}, Doesn't exist in Go.  */
-    {"<-", LEFT_ARROW, BINOP_END},
-    {"&&", ANDAND, BINOP_END},
-    {"||", OROR, BINOP_END},
-    {"<<", LSH, BINOP_END},
-    {">>", RSH, BINOP_END},
-    {"==", EQUAL, BINOP_END},
-    {"!=", NOTEQUAL, BINOP_END},
-    {"<=", LEQ, BINOP_END},
-    {">=", GEQ, BINOP_END},
-    /*{"&^", ANDNOT, BINOP_END}, TODO */
+    {"++", INCREMENT, OP_NULL},
+    {"--", DECREMENT, OP_NULL},
+    /*{"->", RIGHT_ARROW, OP_NULL}, Doesn't exist in Go.  */
+    {"<-", LEFT_ARROW, OP_NULL},
+    {"&&", ANDAND, OP_NULL},
+    {"||", OROR, OP_NULL},
+    {"<<", LSH, OP_NULL},
+    {">>", RSH, OP_NULL},
+    {"==", EQUAL, OP_NULL},
+    {"!=", NOTEQUAL, OP_NULL},
+    {"<=", LEQ, OP_NULL},
+    {">=", GEQ, OP_NULL},
+    /*{"&^", ANDNOT, OP_NULL}, TODO */
   };
 
 /* Identifier-like tokens.  */
@@ -1053,7 +1060,7 @@ lex_one_token (struct parser_state *par_
       else if (saw_structop)
 	return COMPLETE;
       else
-        return 0;
+	return 0;
 
     case ' ':
     case '\t':
@@ -1077,7 +1084,7 @@ lex_one_token (struct parser_state *par_
 
     case ',':
       if (pstate->comma_terminates
-          && paren_depth == 0)
+	  && paren_depth == 0)
 	return 0;
       par_state->lexptr++;
       return c;
@@ -1139,7 +1146,7 @@ lex_one_token (struct parser_state *par_
 	  }
 	toktype = parse_number (par_state, tokstart, p - tokstart,
 				got_dot|got_e, &yylval);
-        if (toktype == ERROR)
+	if (toktype == ERROR)
 	  {
 	    char *err_copy = (char *) alloca (p - tokstart + 1);
 
@@ -1333,7 +1340,7 @@ package_name_p (const char *name, const
 
   if (sym
       && SYMBOL_CLASS (sym) == LOC_TYPEDEF
-      && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE)
+      && SYMBOL_TYPE (sym)->code () == TYPE_CODE_MODULE)
     return 1;
 
   return 0;
@@ -1550,8 +1557,10 @@ yylex (void)
   return classify_name (pstate, pstate->expression_context_block);
 }
 
+/* See language.h.  */
+
 int
-go_parse (struct parser_state *par_state)
+go_language::parser (struct parser_state *par_state) const
 {
   /* Setting up the parser state.  */
   scoped_restore pstate_restore = make_scoped_restore (&pstate);
@@ -1570,7 +1579,10 @@ go_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
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-lang.c ./gdb/go-lang.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-lang.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/go-lang.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Go language support routines for GDB, the GNU debugger.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -73,26 +73,26 @@ gccgo_string_p (struct type *type)
 {
   /* gccgo strings don't necessarily have a name we can use.  */
 
-  if (TYPE_NFIELDS (type) == 2)
+  if (type->num_fields () == 2)
     {
-      struct type *type0 = TYPE_FIELD_TYPE (type, 0);
-      struct type *type1 = TYPE_FIELD_TYPE (type, 1);
+      struct type *type0 = type->field (0).type ();
+      struct type *type1 = type->field (1).type ();
 
       type0 = check_typedef (type0);
       type1 = check_typedef (type1);
 
-      if (TYPE_CODE (type0) == TYPE_CODE_PTR
+      if (type0->code () == TYPE_CODE_PTR
 	  && strcmp (TYPE_FIELD_NAME (type, 0), "__data") == 0
-	  && TYPE_CODE (type1) == TYPE_CODE_INT
+	  && type1->code () == TYPE_CODE_INT
 	  && strcmp (TYPE_FIELD_NAME (type, 1), "__length") == 0)
 	{
 	  struct type *target_type = TYPE_TARGET_TYPE (type0);
 
 	  target_type = check_typedef (target_type);
 
-	  if (TYPE_CODE (target_type) == TYPE_CODE_INT
+	  if (target_type->code () == TYPE_CODE_INT
 	      && TYPE_LENGTH (target_type) == 1
-	      && strcmp (TYPE_NAME (target_type), "uint8") == 0)
+	      && strcmp (target_type->name (), "uint8") == 0)
 	    return 1;
 	}
     }
@@ -106,9 +106,9 @@ gccgo_string_p (struct type *type)
 static int
 sixg_string_p (struct type *type)
 {
-  if (TYPE_NFIELDS (type) == 2
-      && TYPE_NAME (type) != NULL
-      && strcmp (TYPE_NAME (type), "string") == 0)
+  if (type->num_fields () == 2
+      && type->name () != NULL
+      && strcmp (type->name (), "string") == 0)
     return 1;
 
   return 0;
@@ -131,16 +131,6 @@ go_classify_struct_type (struct type *ty
   return GO_TYPE_NONE;
 }
 
-/* Return true if TYPE is a string.  */
-
-static bool
-go_is_string_type_p (struct type *type)
-{
-  type = check_typedef (type);
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	  && go_classify_struct_type (type) == GO_TYPE_STRING);
-}
-
 /* Subroutine of unpack_mangled_go_symbol to simplify it.
    Given "[foo.]bar.baz", store "bar" in *PACKAGEP and "baz" in *OBJECTP.
    We stomp on the last '.' to nul-terminate "bar".
@@ -344,7 +334,7 @@ unpack_mangled_go_symbol (const char *ma
    thus not too much effort is currently put into it.  */
 
 char *
-go_demangle (const char *mangled_name, int options)
+go_language::demangle_symbol (const char *mangled_name, int options) const
 {
   struct obstack tempbuf;
   char *result;
@@ -396,15 +386,6 @@ go_demangle (const char *mangled_name, i
   return result;
 }
 
-/* la_sniff_from_mangled_name for Go.  */
-
-static int
-go_sniff_from_mangled_name (const char *mangled, char **demangled)
-{
-  *demangled = go_demangle (mangled, 0);
-  return *demangled != NULL;
-}
-
 /* Given a Go symbol, return its package or NULL if unknown.
    Space for the result is malloc'd, caller must free.  */
 
@@ -420,7 +401,7 @@ go_symbol_package_name (const struct sym
   char *name_buf;
   char *result;
 
-  gdb_assert (SYMBOL_LANGUAGE (sym) == language_go);
+  gdb_assert (sym->language () == language_go);
   name_buf = unpack_mangled_go_symbol (mangled_name,
 				       &package_name, &object_name,
 				       &method_type_package_name,
@@ -463,168 +444,47 @@ go_block_package_name (const struct bloc
   return NULL;
 }
 
-/* Table mapping opcodes into strings for printing operators
-   and precedences of the operators.
-   TODO(dje): &^ ?  */
-
-static const struct op_print go_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_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_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},
-  {"unsafe.Sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
-  {"++", UNOP_POSTINCREMENT, PREC_SUFFIX, 0},
-  {"--", UNOP_POSTDECREMENT, PREC_SUFFIX, 0},
-  {NULL, OP_NULL, PREC_SUFFIX, 0}
-};
-
-enum go_primitive_types {
-  go_primitive_type_void,
-  go_primitive_type_char,
-  go_primitive_type_bool,
-  go_primitive_type_int,
-  go_primitive_type_uint,
-  go_primitive_type_uintptr,
-  go_primitive_type_int8,
-  go_primitive_type_int16,
-  go_primitive_type_int32,
-  go_primitive_type_int64,
-  go_primitive_type_uint8,
-  go_primitive_type_uint16,
-  go_primitive_type_uint32,
-  go_primitive_type_uint64,
-  go_primitive_type_float32,
-  go_primitive_type_float64,
-  go_primitive_type_complex64,
-  go_primitive_type_complex128,
-  nr_go_primitive_types
-};
+/* See language.h.  */
 
-static void
-go_language_arch_info (struct gdbarch *gdbarch,
-		       struct language_arch_info *lai)
+void
+go_language::language_arch_info (struct gdbarch *gdbarch,
+				 struct language_arch_info *lai) const
 {
   const struct builtin_go_type *builtin = builtin_go_type (gdbarch);
 
-  lai->string_char_type = builtin->builtin_char;
+  /* Helper function to allow shorter lines below.  */
+  auto add  = [&] (struct type * t) -> struct type *
+  {
+    lai->add_primitive_type (t);
+    return t;
+  };
+
+  add (builtin->builtin_void);
+  add (builtin->builtin_char);
+  add (builtin->builtin_bool);
+  add (builtin->builtin_int);
+  add (builtin->builtin_uint);
+  add (builtin->builtin_uintptr);
+  add (builtin->builtin_int8);
+  add (builtin->builtin_int16);
+  add (builtin->builtin_int32);
+  add (builtin->builtin_int64);
+  add (builtin->builtin_uint8);
+  add (builtin->builtin_uint16);
+  add (builtin->builtin_uint32);
+  add (builtin->builtin_uint64);
+  add (builtin->builtin_float32);
+  add (builtin->builtin_float64);
+  add (builtin->builtin_complex64);
+  add (builtin->builtin_complex128);
+
+  lai->set_string_char_type (builtin->builtin_char);
+  lai->set_bool_type (builtin->builtin_bool, "bool");
+}
+
+/* Single instance of the Go language class.  */
 
-  lai->primitive_type_vector
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_go_primitive_types + 1,
-			      struct type *);
-
-  lai->primitive_type_vector [go_primitive_type_void]
-    = builtin->builtin_void;
-  lai->primitive_type_vector [go_primitive_type_char]
-    = builtin->builtin_char;
-  lai->primitive_type_vector [go_primitive_type_bool]
-    = builtin->builtin_bool;
-  lai->primitive_type_vector [go_primitive_type_int]
-    = builtin->builtin_int;
-  lai->primitive_type_vector [go_primitive_type_uint]
-    = builtin->builtin_uint;
-  lai->primitive_type_vector [go_primitive_type_uintptr]
-    = builtin->builtin_uintptr;
-  lai->primitive_type_vector [go_primitive_type_int8]
-    = builtin->builtin_int8;
-  lai->primitive_type_vector [go_primitive_type_int16]
-    = builtin->builtin_int16;
-  lai->primitive_type_vector [go_primitive_type_int32]
-    = builtin->builtin_int32;
-  lai->primitive_type_vector [go_primitive_type_int64]
-    = builtin->builtin_int64;
-  lai->primitive_type_vector [go_primitive_type_uint8]
-    = builtin->builtin_uint8;
-  lai->primitive_type_vector [go_primitive_type_uint16]
-    = builtin->builtin_uint16;
-  lai->primitive_type_vector [go_primitive_type_uint32]
-    = builtin->builtin_uint32;
-  lai->primitive_type_vector [go_primitive_type_uint64]
-    = builtin->builtin_uint64;
-  lai->primitive_type_vector [go_primitive_type_float32]
-    = builtin->builtin_float32;
-  lai->primitive_type_vector [go_primitive_type_float64]
-    = builtin->builtin_float64;
-  lai->primitive_type_vector [go_primitive_type_complex64]
-    = builtin->builtin_complex64;
-  lai->primitive_type_vector [go_primitive_type_complex128]
-    = builtin->builtin_complex128;
-
-  lai->bool_type_symbol = "bool";
-  lai->bool_type_default = builtin->builtin_bool;
-}
-
-extern const struct language_defn go_language_defn =
-{
-  "go",
-  "Go",
-  language_go,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_no,
-  NULL,
-  &exp_descriptor_c,
-  go_parse,
-  null_post_parser,
-  c_printchar,			/* Print a character constant.  */
-  c_printstr,			/* Function to print string constant.  */
-  c_emit_char,			/* Print a single char.  */
-  go_print_type,		/* Print a type using appropriate syntax.  */
-  c_print_typedef,		/* Print a typedef using appropriate
-				   syntax.  */
-  go_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 */
-  false,			/* la_store_sym_names_in_linkage_form_p */
-  basic_lookup_symbol_nonlocal, 
-  basic_lookup_transparent_type,
-  go_demangle,			/* Language specific symbol demangler.  */
-  go_sniff_from_mangled_name,
-  NULL,				/* Language specific
-				   class_name_from_physname.  */
-  go_op_print_tab,		/* Expression operators for printing.  */
-  1,				/* C-style arrays.  */
-  0,				/* String lower bound.  */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  go_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,
-  go_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
-};
+static go_language go_language_defn;
 
 static void *
 build_go_types (struct gdbarch *gdbarch)
@@ -665,11 +525,9 @@ build_go_types (struct gdbarch *gdbarch)
   builtin_go_type->builtin_float64
     = arch_float_type (gdbarch, 64, "float64", floatformats_ieee_double);
   builtin_go_type->builtin_complex64
-    = arch_complex_type (gdbarch, "complex64",
-			 builtin_go_type->builtin_float32);
+    = init_complex_type ("complex64", builtin_go_type->builtin_float32);
   builtin_go_type->builtin_complex128
-    = arch_complex_type (gdbarch, "complex128",
-			 builtin_go_type->builtin_float64);
+    = init_complex_type ("complex128", builtin_go_type->builtin_float64);
 
   return builtin_go_type;
 }
@@ -682,8 +540,9 @@ builtin_go_type (struct gdbarch *gdbarch
   return (const struct builtin_go_type *) gdbarch_data (gdbarch, go_type_data);
 }
 
+void _initialize_go_language ();
 void
-_initialize_go_language (void)
+_initialize_go_language ()
 {
   go_type_data = gdbarch_data_register_post_init (build_go_types);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-lang.h ./gdb/go-lang.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-lang.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/go-lang.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Go language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -56,36 +56,84 @@ enum go_type
   GO_TYPE_STRING
 };
 
-/* Defined in go-exp.y.  */
-
-extern int go_parse (struct parser_state *);
-
 /* Defined in go-lang.c.  */
 
 extern const char *go_main_name (void);
 
 extern enum go_type go_classify_struct_type (struct type *type);
 
-extern char *go_demangle (const char *mangled, int options);
-
 extern char *go_symbol_package_name (const struct symbol *sym);
 
 extern char *go_block_package_name (const struct block *block);
 
 extern const struct builtin_go_type *builtin_go_type (struct gdbarch *);
 
-/* Defined in go-typeprint.c.  */
+/* Class representing the Go language.  */
+
+class go_language : public language_defn
+{
+public:
+  go_language ()
+    : language_defn (language_go)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "go"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "Go"; }
+
+  /* See language.h.  */
+
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override;
+
+  /* See language.h.  */
+
+  bool sniff_from_mangled_name (const char *mangled,
+				char **demangled) const override
+  {
+    *demangled = demangle_symbol (mangled, 0);
+    return *demangled != NULL;
+  }
 
-extern void go_print_type (struct type *type, const char *varstring,
-			   struct ui_file *stream, int show, int level,
-			   const struct type_print_options *flags);
-
-/* Defined in go-valprint.c.  */
-
-extern void go_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);
+  /* See language.h.  */
+
+  char *demangle_symbol (const char *mangled, int options) const override;
+
+  /* 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;
+
+  /* See language.h.  */
+
+  void value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const override;
+
+  /* See language.h.  */
+
+  int parser (struct parser_state *ps) const override;
+
+  /* See language.h.  */
+
+  bool is_string_type_p (struct type *type) const override
+  {
+    type = check_typedef (type);
+    return (type->code () == TYPE_CODE_STRUCT
+	    && go_classify_struct_type (type) == GO_TYPE_STRING);
+  }
+
+  /* See language.h.  */
+
+  bool store_sym_names_in_linkage_form_p () const override
+  { return true; }
+};
 
 #endif /* !defined (GO_LANG_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-typeprint.c ./gdb/go-typeprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-typeprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/go-typeprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing Go types for GDB, the GNU debugger.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -42,17 +42,17 @@
    LEVEL indicates level of recursion (for nested definitions).  */
 
 void
-go_print_type (struct type *type, const char *varstring,
-	       struct ui_file *stream, int show, int level,
-	       const struct type_print_options *flags)
+go_language::print_type (struct type *type, const char *varstring,
+			 struct ui_file *stream, int show, int level,
+			 const struct type_print_options *flags) const
 {
   /* Borrowed from c-typeprint.c.  */
   if (show > 0)
     type = check_typedef (type);
 
   /* Print the type of "abc" as "string", not char[4].  */
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY
-      && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR)
+  if (type->code () == TYPE_CODE_ARRAY
+      && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR)
     {
       fputs_filtered ("string", stream);
       return;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-valprint.c ./gdb/go-valprint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/go-valprint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/go-valprint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Support for printing Go values for GDB, the GNU debugger.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -43,8 +43,8 @@ print_go_string (struct type *type,
 		 struct value *val,
 		 const struct value_print_options *options)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
-  struct type *elt_ptr_type = TYPE_FIELD_TYPE (type, 0);
+  struct gdbarch *gdbarch = type->arch ();
+  struct type *elt_ptr_type = type->field (0).type ();
   struct type *elt_type = TYPE_TARGET_TYPE (elt_ptr_type);
   LONGEST length;
   /* TODO(dje): The encapsulation of what a pointer is belongs in value.c.
@@ -84,17 +84,16 @@ print_go_string (struct type *type,
   val_print_string (elt_type, NULL, addr, length, stream, options);
 }
 
-/* Implements the la_val_print routine for language Go.  */
+/* See go-lang.h.  */
 
 void
-go_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)
+go_language::value_print_inner (struct value *val, struct ui_file *stream,
+				int recurse,
+				const struct value_print_options *options) const
 {
-  type = check_typedef (type);
+  struct type *type = check_typedef (value_type (val));
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
       case TYPE_CODE_STRUCT:
 	{
@@ -105,7 +104,8 @@ go_val_print (struct type *type, int emb
 	    case GO_TYPE_STRING:
 	      if (! options->raw)
 		{
-		  print_go_string (type, embedded_offset, address,
+		  print_go_string (type, value_embedded_offset (val),
+				   value_address (val),
 				   stream, recurse, val, options);
 		  return;
 		}
@@ -117,8 +117,7 @@ go_val_print (struct type *type, int emb
 	/* Fall through.  */
 
       default:
-	c_val_print (type, embedded_offset, address, stream,
-		     recurse, val, options);
+	c_value_print_inner (val, stream, recurse, options);
 	break;
     }
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gregset.h ./gdb/gregset.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/gregset.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/gregset.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Interface for functions using gregset and fpregset types.
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/guile.c ./gdb/guile/guile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/guile.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/guile.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* General GDB/Guile code.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -75,12 +75,12 @@ const char *gdbscm_print_excp = gdbscm_p
 
 #ifdef HAVE_GUILE
 
-static void gdbscm_finish_initialization
-  (const struct extension_language_defn *);
+static void gdbscm_initialize (const struct extension_language_defn *);
 static int gdbscm_initialized (const struct extension_language_defn *);
 static void gdbscm_eval_from_control_command
   (const struct extension_language_defn *, struct command_line *);
 static script_sourcer_func gdbscm_source_script;
+static void gdbscm_set_backtrace (int enable);
 
 int gdb_scheme_initialized;
 
@@ -112,7 +112,7 @@ static const struct extension_language_s
 
 static const struct extension_language_ops guile_extension_ops =
 {
-  gdbscm_finish_initialization,
+  gdbscm_initialize,
   gdbscm_initialized,
 
   gdbscm_eval_from_control_command,
@@ -270,13 +270,10 @@ static void
 gdbscm_source_script (const struct extension_language_defn *extlang,
 		      FILE *file, const char *filename)
 {
-  char *msg = gdbscm_safe_source_script (filename);
+  gdb::unique_xmalloc_ptr<char> msg = gdbscm_safe_source_script (filename);
 
   if (msg != NULL)
-    {
-      fprintf_filtered (gdb_stderr, "%s\n", msg);
-      xfree (msg);
-    }
+    fprintf_filtered (gdb_stderr, "%s\n", msg.get ());
 }
 
 /* (execute string [#:from-tty boolean] [#:to-string boolean])
@@ -396,33 +393,6 @@ static struct cmd_list_element *set_guil
 static struct cmd_list_element *show_guile_list;
 static struct cmd_list_element *info_guile_list;
 
-/* Function for use by 'set guile' prefix command.  */
-
-static void
-set_guile_command (const char *args, int from_tty)
-{
-  help_list (set_guile_list, "set guile ", all_commands, gdb_stdout);
-}
-
-/* Function for use by 'show guile' prefix command.  */
-
-static void
-show_guile_command (const char *args, int from_tty)
-{
-  cmd_show_list (show_guile_list, from_tty, "");
-}
-
-/* The "info scheme" command is defined as a prefix, with
-   allow_unknown 0.  Therefore, its own definition is called only for
-   "info scheme" with no args.  */
-
-static void
-info_guile_command (const char *args, int from_tty)
-{
-  printf_unfiltered (_("\"info guile\" must be followed"
-		       " by the name of an info command.\n"));
-  help_list (info_guile_list, "info guile ", all_commands, gdb_stdout);
-}
 
 /* Initialization.  */
 
@@ -664,13 +634,62 @@ call_initialize_gdb_module (void *data)
   return NULL;
 }
 
-/* A callback to finish Guile initialization after gdb has finished all its
-   initialization.
-   This is the extension_language_ops.finish_initialization "method".  */
+/* A callback to initialize Guile after gdb has finished all its
+   initialization.  This is the extension_language_ops.initialize "method".  */
 
 static void
-gdbscm_finish_initialization (const struct extension_language_defn *extlang)
+gdbscm_initialize (const struct extension_language_defn *extlang)
 {
+#if HAVE_GUILE
+  /* The Python support puts the C side in module "_gdb", leaving the
+     Python side to define module "gdb" which imports "_gdb".  There is
+     evidently no similar convention in Guile so we skip this.  */
+
+#if HAVE_GUILE_MANUAL_FINALIZATION
+  /* Our SMOB free functions are not thread-safe, as GDB itself is not
+     intended to be thread-safe.  Disable automatic finalization so that
+     finalizers aren't run in other threads.  */
+  scm_set_automatic_finalization_enabled (0);
+#endif
+
+  /* Before we initialize Guile, block signals needed by gdb (especially
+     SIGCHLD).  This is done so that all threads created during Guile
+     initialization have SIGCHLD blocked.  PR 17247.  Really libgc and
+     Guile should do this, but we need to work with libgc 7.4.x.  */
+  {
+    gdb::block_signals blocker;
+
+    /* There are libguile versions (f.i. v3.0.5) that by default call
+       mp_get_memory_functions during initialization to install custom
+       libgmp memory functions.  This is considered a bug and should be
+       fixed starting v3.0.6.
+       Before gdb commit 880ae75a2b7 "gdb delay guile initialization until
+       gdbscm_finish_initialization", that bug had no effect for gdb,
+       because gdb subsequently called mp_get_memory_functions to install
+       its own custom functions in _initialize_gmp_utils.  However, since
+       aforementioned gdb commit the initialization order is reversed,
+       allowing libguile to install a custom malloc that is incompatible
+       with the custom free as used in gmp-utils.c, resulting in a
+       "double free or corruption (out)" error.
+       Work around the libguile bug by disabling the installation of the
+       libgmp memory functions by guile initialization.  */
+    scm_install_gmp_memory_functions = 0;
+
+    /* scm_with_guile is the most portable way to initialize Guile.  Plus
+       we need to initialize the Guile support while in Guile mode (e.g.,
+       called from within a call to scm_with_guile).  */
+    scm_with_guile (call_initialize_gdb_module, NULL);
+  }
+
+  /* Set Guile's backtrace to match the "set guile print-stack" default.
+     [N.B. The two settings are still separate.]  But only do this after
+     we've initialized Guile, it's nice to see a backtrace if there's an
+     error during initialization.  OTOH, if the error is that gdb/init.scm
+     wasn't found because gdb is being run from the build tree, the
+     backtrace is more noise than signal.  Sigh.  */
+  gdbscm_set_backtrace (0);
+#endif
+
   /* Restore the environment to the user interaction one.  */
   scm_set_current_module (scm_interaction_environment ());
 }
@@ -707,8 +726,8 @@ cmd_list_element *guile_cmd_element = nu
 static void
 install_gdb_commands (void)
 {
-  add_com ("guile-repl", class_obscure,
-	   guile_repl_command,
+  cmd_list_element *guile_repl_cmd
+    = add_com ("guile-repl", class_obscure, guile_repl_command,
 #ifdef HAVE_GUILE
 	   _("\
 Start an interactive Guile prompt.\n\
@@ -723,7 +742,7 @@ Guile scripting is not supported in this
 This command is only a placeholder.")
 #endif /* HAVE_GUILE */
 	   );
-  add_com_alias ("gr", "guile-repl", class_obscure, 1);
+  add_com_alias ("gr", guile_repl_cmd, class_obscure, 1);
 
   /* Since "help guile" is easy to type, and intuitive, we add general help
      in using GDB+Guile to this command.  */
@@ -759,25 +778,25 @@ Guile scripting is not supported in this
 This command is only a placeholder.")
 #endif /* HAVE_GUILE */
 	   );
-  add_com_alias ("gu", "guile", class_obscure, 1);
+  add_com_alias ("gu", guile_cmd_element, class_obscure, 1);
 
-  add_prefix_cmd ("guile", class_obscure, set_guile_command,
-		  _("Prefix command for Guile preference settings."),
-		  &set_guile_list, "set guile ", 0,
-		  &setlist);
-  add_alias_cmd ("gu", "guile", class_obscure, 1, &setlist);
-
-  add_prefix_cmd ("guile", class_obscure, show_guile_command,
-		  _("Prefix command for Guile preference settings."),
-		  &show_guile_list, "show guile ", 0,
-		  &showlist);
-  add_alias_cmd ("gu", "guile", class_obscure, 1, &showlist);
-
-  add_prefix_cmd ("guile", class_obscure, info_guile_command,
-		  _("Prefix command for Guile info displays."),
-		  &info_guile_list, "info guile ", 0,
-		  &infolist);
-  add_info_alias ("gu", "guile", 1);
+  cmd_list_element *set_guile_cmd
+    = add_basic_prefix_cmd ("guile", class_obscure,
+			    _("Prefix command for Guile preference settings."),
+			    &set_guile_list, 0, &setlist);
+  add_alias_cmd ("gu", set_guile_cmd, class_obscure, 1, &setlist);
+
+  cmd_list_element *show_guile_cmd
+    = add_show_prefix_cmd ("guile", class_obscure,
+			   _("Prefix command for Guile preference settings."),
+			   &show_guile_list, 0, &showlist);
+  add_alias_cmd ("gu", show_guile_cmd, class_obscure, 1, &showlist);
+
+  cmd_list_element *info_guile_cmd
+    = add_basic_prefix_cmd ("guile", class_obscure,
+			    _("Prefix command for Guile info displays."),
+			    &info_guile_list, 0, &infolist);
+  add_info_alias ("gu", info_guile_cmd, 1);
 
   /* The name "print-stack" is carried over from Python.
      A better name is "print-exception".  */
@@ -792,47 +811,9 @@ message == an error message without a st
 			&set_guile_list, &show_guile_list);
 }
 
+void _initialize_guile ();
 void
-_initialize_guile (void)
+_initialize_guile ()
 {
   install_gdb_commands ();
-
-#if HAVE_GUILE
-  {
-    /* The Python support puts the C side in module "_gdb", leaving the Python
-       side to define module "gdb" which imports "_gdb".  There is evidently no
-       similar convention in Guile so we skip this.  */
-
-#if HAVE_GUILE_MANUAL_FINALIZATION
-    /* Our SMOB free functions are not thread-safe, as GDB itself is not
-       intended to be thread-safe.  Disable automatic finalization so that
-       finalizers aren't run in other threads.  */
-    scm_set_automatic_finalization_enabled (0);
-#endif
-
-    /* Before we initialize Guile, block signals needed by gdb
-       (especially SIGCHLD).
-       This is done so that all threads created during Guile initialization
-       have SIGCHLD blocked.  PR 17247.
-       Really libgc and Guile should do this, but we need to work with
-       libgc 7.4.x.  */
-    {
-      gdb::block_signals blocker;
-
-      /* scm_with_guile is the most portable way to initialize Guile.
-	 Plus we need to initialize the Guile support while in Guile mode
-	 (e.g., called from within a call to scm_with_guile).  */
-      scm_with_guile (call_initialize_gdb_module, NULL);
-    }
-
-    /* Set Guile's backtrace to match the "set guile print-stack" default.
-       [N.B. The two settings are still separate.]
-       But only do this after we've initialized Guile, it's nice to see a
-       backtrace if there's an error during initialization.
-       OTOH, if the error is that gdb/init.scm wasn't found because gdb is
-       being run from the build tree, the backtrace is more noise than signal.
-       Sigh.  */
-    gdbscm_set_backtrace (0);
-  }
-#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/guile.h ./gdb/guile/guile.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/guile.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/guile.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* General GDB/Scheme code.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/guile-internal.h ./gdb/guile/guile-internal.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/guile-internal.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/guile-internal.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Internal header for GDB/Scheme code.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -40,12 +40,12 @@ typedef int excp_matcher_func (SCM key);
 
 /* Scheme variables to define during initialization.  */
 
-typedef struct
+struct scheme_variable
 {
   const char *name;
   SCM value;
   const char *doc_string;
-} scheme_variable;
+};
 
 /* End of scheme_variable table mark.  */
 
@@ -89,7 +89,7 @@ as_a_scm_t_subr (SCM (*func) (SCM, SCM,
 
 /* Scheme functions to define during initialization.  */
 
-typedef struct
+struct scheme_function
 {
   const char *name;
   int required;
@@ -97,7 +97,7 @@ typedef struct
   int rest;
   scm_t_subr func;
   const char *doc_string;
-} scheme_function;
+};
 
 /* End of scheme_function table mark.  */
 
@@ -105,11 +105,11 @@ typedef struct
 
 /* Useful for defining a set of constants.  */
 
-typedef struct
+struct scheme_integer_constant
 {
   const char *name;
   int value;
-} scheme_integer_constant;
+};
 
 #define END_INTEGER_CONSTANTS { NULL, 0 }
 
@@ -239,20 +239,20 @@ extern int gdbscm_guile_version_is_at_le
 #define GDB_SMOB_HEAD \
   int empty_base_class;
 
-typedef struct
+struct gdb_smob
 {
   GDB_SMOB_HEAD
-} gdb_smob;
+};
 
-typedef struct _chained_gdb_smob
+struct chained_gdb_smob
 {
   GDB_SMOB_HEAD
 
-  struct _chained_gdb_smob *prev;
-  struct _chained_gdb_smob *next;
-} chained_gdb_smob;
+  chained_gdb_smob *prev;
+  chained_gdb_smob *next;
+};
 
-typedef struct _eqable_gdb_smob
+struct eqable_gdb_smob
 {
   GDB_SMOB_HEAD
 
@@ -267,7 +267,7 @@ typedef struct _eqable_gdb_smob
      we need to invalidate the objects: we can do that using the same hashtab
      used to record the smob for eq-ability.  */
   SCM containing_scm;
-} eqable_gdb_smob;
+};
 
 #undef GDB_SMOB_HEAD
 
@@ -408,7 +408,8 @@ extern SCM gdbscm_unsafe_call_1 (SCM pro
 extern gdb::unique_xmalloc_ptr<char> gdbscm_safe_eval_string
   (const char *string, int display_result);
 
-extern char *gdbscm_safe_source_script (const char *filename);
+extern gdb::unique_xmalloc_ptr<char> gdbscm_safe_source_script
+  (const char *filename);
 
 extern void gdbscm_enter_repl (void);
 
@@ -416,7 +417,7 @@ extern void gdbscm_enter_repl (void);
 
 /* scm-arch.c */
 
-typedef struct _arch_smob arch_smob;
+struct arch_smob;
 
 extern struct gdbarch *arscm_get_gdbarch (arch_smob *a_smob);
 
@@ -447,7 +448,7 @@ extern char *gdbscm_canonicalize_command
 
 /* scm-frame.c */
 
-typedef struct _frame_smob frame_smob;
+struct frame_smob;
 
 extern int frscm_is_frame (SCM scm);
 
@@ -458,7 +459,7 @@ extern struct frame_info *frscm_frame_sm
 
 /* scm-iterator.c */
 
-typedef struct _iterator_smob iterator_smob;
+struct iterator_smob;
 
 extern SCM itscm_iterator_smob_object (iterator_smob *i_smob);
 
@@ -500,7 +501,7 @@ extern void lsscm_val_print_lazy_string
 
 /* scm-objfile.c */
 
-typedef struct _objfile_smob objfile_smob;
+struct objfile_smob;
 
 extern SCM ofscm_objfile_smob_pretty_printers (objfile_smob *o_smob);
 
@@ -510,7 +511,7 @@ extern SCM ofscm_scm_from_objfile (struc
 
 /* scm-progspace.c */
 
-typedef struct _pspace_smob pspace_smob;
+struct pspace_smob;
 
 extern SCM psscm_pspace_smob_pretty_printers (const pspace_smob *);
 
@@ -557,7 +558,7 @@ extern SCM stscm_scm_from_sal (struct sy
 
 /* scm-type.c */
 
-typedef struct _type_smob type_smob;
+struct type_smob;
 
 extern int tyscm_is_type (SCM scm);
 
@@ -579,6 +580,7 @@ extern struct value *vlscm_scm_to_value
 extern int vlscm_is_value (SCM scm);
 
 extern SCM vlscm_scm_from_value (struct value *value);
+extern SCM vlscm_scm_from_value_no_release (struct value *value);
 
 extern struct value *vlscm_convert_typed_value_from_scheme
   (const char *func_name, int obj_arg_pos, SCM obj,
@@ -594,7 +596,10 @@ extern struct value *vlscm_convert_value
 extern objfile_script_sourcer_func gdbscm_source_objfile_script;
 extern objfile_script_executor_func gdbscm_execute_objfile_script;
 
-extern int gdbscm_auto_load_enabled (const struct extension_language_defn *);
+/* Return true if auto-loading Guile scripts is enabled.
+   This is the extension_language_script_ops.auto_load_enabled "method".  */
+
+extern bool gdbscm_auto_load_enabled (const struct extension_language_defn *);
 
 extern void gdbscm_preserve_values
   (const struct extension_language_defn *,
@@ -602,10 +607,8 @@ extern void gdbscm_preserve_values
 
 extern enum ext_lang_rc gdbscm_apply_val_pretty_printer
   (const struct extension_language_defn *,
-   struct type *type,
-   LONGEST embedded_offset, CORE_ADDR address,
-   struct ui_file *stream, int recurse,
    struct value *val,
+   struct ui_file *stream, int recurse,
    const struct value_print_options *options,
    const struct language_defn *language);
 
@@ -685,7 +688,7 @@ unpack (const gdb_exception &exc)
     if (exception.reason < 0)				\
       {							\
 	gdbscm_throw_gdb_exception (exception);		\
-        /*NOTREACHED */					\
+	/*NOTREACHED */					\
       }							\
   } while (0)
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/boot.scm ./gdb/guile/lib/gdb/boot.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/boot.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/boot.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 ;; Bootstrap the Scheme side of the gdb module.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/experimental.scm ./gdb/guile/lib/gdb/experimental.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/experimental.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/experimental.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 ;; Various experimental utilities.
 ;; Anything in this file can change or disappear.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/init.scm ./gdb/guile/lib/gdb/init.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/init.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/init.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 ;; Scheme side of the gdb module.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/iterator.scm ./gdb/guile/lib/gdb/iterator.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/iterator.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/iterator.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 ;; Iteration utilities.
 ;; Anything in this file can change or disappear.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/printing.scm ./gdb/guile/lib/gdb/printing.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/printing.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/printing.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 ;; Additional pretty-printer support.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/support.scm ./gdb/guile/lib/gdb/support.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/support.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/support.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 ;; Internal support routines.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/types.scm ./gdb/guile/lib/gdb/types.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb/types.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb/types.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 ;; Type utilities.
-;; Copyright (C) 2010-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb.scm ./gdb/guile/lib/gdb.scm
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/lib/gdb.scm	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/lib/gdb.scm	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 ;; Scheme side of the gdb module.
 ;;
-;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-arch.c ./gdb/guile/scm-arch.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-arch.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-arch.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to architecture.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,10 +26,9 @@
 #include "arch-utils.h"
 #include "guile-internal.h"
 
-/* The <gdb:arch> smob.
-   The typedef for this struct is in guile-internal.h.  */
+/* The <gdb:arch> smob.  */
 
-struct _arch_smob
+struct arch_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -651,7 +650,12 @@ gdbscm_initialize_arches (void)
   scm_set_smob_print (arch_smob_tag, arscm_print_arch_smob);
 
   gdbscm_define_functions (arch_functions, 1);
+}
 
+void _initialize_scm_arch ();
+void
+_initialize_scm_arch ()
+{
   arch_object_data
     = gdbarch_data_register_post_init (arscm_object_data_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-auto-load.c ./gdb/guile/scm-auto-load.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-auto-load.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-auto-load.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB routines for supporting auto-loaded Guile scripts.
 
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -41,10 +41,9 @@ show_auto_load_guile_scripts (struct ui_
   fprintf_filtered (file, _("Auto-loading of Guile scripts is %s.\n"), value);
 }
 
-/* Return non-zero if auto-loading Guile scripts is enabled.
-   This is the extension_language_script_ops.auto_load_enabled "method".  */
+/* See guile-internal.h.  */
 
-int
+bool
 gdbscm_auto_load_enabled (const struct extension_language_defn *extlang)
 {
   return auto_load_guile_scripts;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-block.c ./gdb/guile/scm-block.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-block.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-block.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to blocks.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,7 +30,7 @@
 
 /* A smob describing a gdb block.  */
 
-typedef struct _block_smob
+struct block_smob
 {
   /* This always appears first.
      We want blocks to be eq?-able.  And we need to be able to invalidate
@@ -44,7 +44,7 @@ typedef struct _block_smob
      between a block and an object file.  When a block is created also
      store a pointer to the object file for later use.  */
   struct objfile *objfile;
-} block_smob;
+};
 
 /* To iterate over block symbols from Scheme we need to store
    struct block_iterator somewhere.  This is stored in the "progress" field
@@ -54,7 +54,7 @@ typedef struct _block_smob
    Remember: While iterating over block symbols, you must continually check
    whether the block is still valid.  */
 
-typedef struct
+struct block_syms_progress_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -64,7 +64,7 @@ typedef struct
 
   /* Has the iterator been initialized flag.  */
   int initialized_p;
-} block_syms_progress_smob;
+};
 
 static const char block_smob_name[] = "gdb:block";
 static const char block_syms_progress_smob_name[] = "gdb:block-symbols-iterator";
@@ -799,7 +799,12 @@ gdbscm_initialize_blocks (void)
 				gdbscm_documentation_symbol,
 				gdbscm_scm_from_c_string ("\
 Internal function to assist the block symbols iterator."));
+}
 
+void _initialize_scm_block ();
+void
+_initialize_scm_block ()
+{
   /* Register an objfile "free" callback so we can properly
      invalidate blocks when an object file is about to be deleted.  */
   bkscm_objfile_data_key
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-breakpoint.c ./gdb/guile/scm-breakpoint.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-breakpoint.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-breakpoint.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to breakpoints.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -138,6 +138,7 @@ bpscm_type_to_string (enum bptype type)
     case bp_hardware_watchpoint: return "BP_HARDWARE_WATCHPOINT";
     case bp_read_watchpoint: return "BP_READ_WATCHPOINT";
     case bp_access_watchpoint: return "BP_ACCESS_WATCHPOINT";
+    case bp_catchpoint: return "BP_CATCHPOINT";
     default: return "internal/other";
     }
 }
@@ -174,8 +175,6 @@ bpscm_print_breakpoint_smob (SCM self, S
   /* Careful, the breakpoint may be invalid.  */
   if (b != NULL)
     {
-      const char *str;
-
       gdbscm_printf (port, " %s %s %s",
 		     bpscm_type_to_string (b->type),
 		     bpscm_enable_state_to_string (b->enable_state),
@@ -184,9 +183,12 @@ bpscm_print_breakpoint_smob (SCM self, S
       gdbscm_printf (port, " hit:%d", b->hit_count);
       gdbscm_printf (port, " ignore:%d", b->ignore_count);
 
-      str = event_location_to_string (b->location.get ());
-      if (str != NULL)
-	gdbscm_printf (port, " @%s", str);
+      if (b->location != nullptr)
+	{
+	  const char *str = event_location_to_string (b->location.get ());
+	  if (str != nullptr)
+	    gdbscm_printf (port, " @%s", str);
+	}
     }
 
   scm_puts (">", port);
@@ -232,7 +234,8 @@ bpscm_want_scm_wrapper_p (struct breakpo
       && bp->type != bp_watchpoint
       && bp->type != bp_hardware_watchpoint
       && bp->type != bp_read_watchpoint
-      && bp->type != bp_access_watchpoint)
+      && bp->type != bp_access_watchpoint
+      && bp->type != bp_catchpoint)
     return 0;
 
   return 1;
@@ -386,8 +389,20 @@ gdbscm_make_breakpoint (SCM location_scm
 				     _("invalid watchpoint class"));
 	}
       break;
+    case bp_none:
+    case bp_hardware_watchpoint:
+    case bp_read_watchpoint:
+    case bp_access_watchpoint:
+    case bp_catchpoint:
+      {
+	const char *type_name = bpscm_type_to_string (type);
+	gdbscm_misc_error (FUNC_NAME, type_arg_pos,
+			   gdbscm_scm_from_c_string (type_name),
+			   _("unsupported breakpoint type"));
+      }
+      break;
     default:
-      gdbscm_out_of_range_error (FUNC_NAME, access_type_arg_pos,
+      gdbscm_out_of_range_error (FUNC_NAME, type_arg_pos,
 				 scm_from_int (type),
 				 _("invalid breakpoint type"));
     }
@@ -440,7 +455,7 @@ gdbscm_register_breakpoint_x (SCM self)
 	    const breakpoint_ops *ops =
 	      breakpoint_ops_for_event_location (eloc.get (), false);
 	    create_breakpoint (get_current_arch (),
-			       eloc.get (), NULL, -1, NULL,
+			       eloc.get (), NULL, -1, NULL, false,
 			       0,
 			       0, bp_breakpoint,
 			       0,
@@ -507,7 +522,7 @@ gdbscm_delete_breakpoint_x (SCM self)
 
 /* iterate_over_breakpoints function for gdbscm_breakpoints.  */
 
-static bool
+static void
 bpscm_build_bp_list (struct breakpoint *bp, SCM *list)
 {
   breakpoint_smob *bp_smob = bp->scm_bp_object;
@@ -534,8 +549,6 @@ bpscm_build_bp_list (struct breakpoint *
 
   if (bp_smob != NULL)
     *list = scm_cons (bp_smob->containing_scm, *list);
-
-  return false;
 }
 
 /* (breakpoints) -> list
@@ -546,10 +559,8 @@ gdbscm_breakpoints (void)
 {
   SCM list = SCM_EOL;
 
-  iterate_over_breakpoints ([&] (breakpoint *bp)
-    {
-      return bpscm_build_bp_list(bp, &list);
-    });
+  for (breakpoint *bp : all_breakpoints ())
+    bpscm_build_bp_list (bp, &list);
 
   return scm_reverse_x (list, SCM_EOL);
 }
@@ -905,7 +916,7 @@ gdbscm_set_breakpoint_condition_x (SCM s
 	   ? nullptr
 	   : gdbscm_scm_to_c_string (newvalue));
 
-      set_breakpoint_condition (bp_smob->bp, exp ? exp.get () : "", 0);
+      set_breakpoint_condition (bp_smob->bp, exp ? exp.get () : "", 0, false);
 
       return SCM_UNSPECIFIED;
     });
@@ -1144,6 +1155,7 @@ static const scheme_integer_constant bre
   { "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint },
   { "BP_READ_WATCHPOINT", bp_read_watchpoint },
   { "BP_ACCESS_WATCHPOINT", bp_access_watchpoint },
+  { "BP_CATCHPOINT", bp_catchpoint },
 
   { "WP_READ", hw_read },
   { "WP_WRITE", hw_write },
@@ -1322,8 +1334,10 @@ gdbscm_initialize_breakpoints (void)
   scm_set_smob_free (breakpoint_smob_tag, bpscm_free_breakpoint_smob);
   scm_set_smob_print (breakpoint_smob_tag, bpscm_print_breakpoint_smob);
 
-  gdb::observers::breakpoint_created.attach (bpscm_breakpoint_created);
-  gdb::observers::breakpoint_deleted.attach (bpscm_breakpoint_deleted);
+  gdb::observers::breakpoint_created.attach (bpscm_breakpoint_created,
+					     "scm-breakpoint");
+  gdb::observers::breakpoint_deleted.attach (bpscm_breakpoint_deleted,
+					     "scm-breakpoint");
 
   gdbscm_define_integer_constants (breakpoint_integer_constants, 1);
   gdbscm_define_functions (breakpoint_functions, 1);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-cmd.c ./gdb/guile/scm-cmd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-cmd.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-cmd.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB commands implemented in Scheme.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,7 +37,7 @@
    any side-effects.  This means that the smob needs to store everything
    that was passed to make-command.  */
 
-typedef struct _command_smob
+struct command_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -85,7 +85,7 @@ typedef struct _command_smob
      the object since a reference to it comes from non-gc-managed space
      (the command context pointer).  */
   SCM containing_scm;
-} command_smob;
+};
 
 static const char command_smob_name[] = "gdb:command";
 
@@ -294,7 +294,7 @@ static void
 cmdscm_function (struct cmd_list_element *command,
 		 const char *args, int from_tty)
 {
-  command_smob *c_smob/*obj*/ = (command_smob *) get_cmd_context (command);
+  command_smob *c_smob/*obj*/ = (command_smob *) command->context ();
   SCM arg_scm, tty_scm, result;
 
   gdb_assert (c_smob != NULL);
@@ -383,7 +383,7 @@ cmdscm_completer (struct cmd_list_elemen
 		  completion_tracker &tracker,
 		  const char *text, const char *word)
 {
-  command_smob *c_smob/*obj*/ = (command_smob *) get_cmd_context (command);
+  command_smob *c_smob/*obj*/ = (command_smob *) command->context ();
   SCM completer_result_scm;
   SCM text_scm, word_scm;
 
@@ -512,7 +512,7 @@ gdbscm_parse_command_name (const char *n
   prefix_text[i + 1] = '\0';
 
   prefix_text2 = prefix_text;
-  elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1);
+  elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, NULL, 1);
   if (elt == NULL || elt == CMD_LIST_AMBIGUOUS)
     {
       msg = xstrprintf (_("could not find command prefix '%s'"), prefix_text);
@@ -524,10 +524,10 @@ gdbscm_parse_command_name (const char *n
 				 gdbscm_scm_from_c_string (name), msg);
     }
 
-  if (elt->prefixlist)
+  if (elt->is_prefix ())
     {
       xfree (prefix_text);
-      *base_list = elt->prefixlist;
+      *base_list = elt->subcommands;
       return result;
     }
 
@@ -635,9 +635,9 @@ gdbscm_canonicalize_command_name (const
      One of the COMPLETE_* constants defined in the gdb module.
      A procedure of three arguments: (lambda (self text word) ...).
        Its result is one of:
-         A list of strings.
-         A <gdb:iterator> object that returns the set of possible completions,
-         ending with #f.
+	 A list of strings.
+	 A <gdb:iterator> object that returns the set of possible completions,
+	 ending with #f.
 	 TODO(dje): Once PR 16699 is fixed, add support for returning
 	 a COMPLETE_* constant.
    If not specified, then completion is not supported for this command.
@@ -766,7 +766,7 @@ gdbscm_register_command_x (SCM self)
 
 	  cmd = add_prefix_cmd (c_smob->cmd_name, c_smob->cmd_class,
 				NULL, c_smob->doc, &c_smob->sub_list,
-				c_smob->name, allow_unknown, cmd_list);
+				allow_unknown, cmd_list);
 	}
       else
 	{
@@ -788,7 +788,7 @@ gdbscm_register_command_x (SCM self)
   cmd->destroyer = cmdscm_destroyer;
 
   c_smob->command = cmd;
-  set_cmd_context (cmd, c_smob);
+  cmd->set_context (c_smob);
 
   if (gdbscm_is_true (c_smob->complete))
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-disasm.c ./gdb/guile/scm-disasm.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-disasm.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-disasm.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to architecture.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-exception.c ./gdb/guile/scm-exception.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-exception.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-exception.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB/Scheme exception support.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,7 +37,7 @@
    One important invariant is that <gdb:exception> smobs are never a valid
    result of a function, other than to signify an exception occurred.  */
 
-typedef struct
+struct exception_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -45,7 +45,7 @@ typedef struct
   /* The key and args parameters to "throw".  */
   SCM key;
   SCM args;
-} exception_smob;
+};
 
 static const char exception_smob_name[] = "gdb:exception";
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-frame.c ./gdb/guile/scm-frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-frame.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-frame.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to stack frames.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,10 +32,9 @@
 #include "value.h"
 #include "guile-internal.h"
 
-/* The <gdb:frame> smob.
-   The typedef for this struct is in guile-internal.h.  */
+/* The <gdb:frame> smob.  */
 
-struct _frame_smob
+struct frame_smob
 {
   /* This always appears first.  */
   eqable_gdb_smob base;
@@ -157,14 +156,9 @@ frscm_print_frame_smob (SCM self, SCM po
 {
   frame_smob *f_smob = (frame_smob *) SCM_SMOB_DATA (self);
 
-  gdbscm_printf (port, "#<%s ", frame_smob_name);
-
-  string_file strfile;
-  fprint_frame_id (&strfile, f_smob->frame_id);
-  gdbscm_printf (port, "%s", strfile.c_str ());
-
-  scm_puts (">", port);
-
+  gdbscm_printf (port, "#<%s %s>",
+		 frame_smob_name,
+		 f_smob->frame_id.to_string ().c_str ());
   scm_remember_upto_here_1 (self);
 
   /* Non-zero means success.  */
@@ -1132,7 +1126,7 @@ Return the frame's symtab-and-line <gdb:
 Return the value of the symbol in the frame.\n\
 \n\
   Arguments: <gdb:frame> <gdb:symbol>\n\
-         Or: <gdb:frame> string [#:block <gdb:block>]" },
+	 Or: <gdb:frame> string [#:block <gdb:block>]" },
 
   { "frame-read-register", 2, 0, 0,
     as_a_scm_t_subr (gdbscm_frame_read_register),
@@ -1175,7 +1169,12 @@ gdbscm_initialize_frames (void)
   gdbscm_define_functions (frame_functions, 1);
 
   block_keyword = scm_from_latin1_keyword ("block");
+}
 
+void _initialize_scm_frame ();
+void
+_initialize_scm_frame ()
+{
   /* Register an inferior "free" callback so we can properly
      invalidate frames when an inferior file is about to be deleted.  */
   frscm_inferior_data_key
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-gsmob.c ./gdb/guile/scm-gsmob.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-gsmob.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-gsmob.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB/Scheme smobs (gsmob is pronounced "jee smob")
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-iterator.c ./gdb/guile/scm-iterator.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-iterator.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-iterator.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Simple iterators for GDB/Scheme.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -35,8 +35,8 @@
      (let ((next! (lambda (iter)
 		    (let ((l (iterator-progress iter)))
 		      (if (eq? l '())
-		          end-marker
-		          (begin
+			  end-marker
+			  (begin
 			    (set-iterator-progress! iter (cdr l))
 			    (car l)))))))
        (make-iterator l l next!)))
@@ -55,10 +55,9 @@
 
 /* A smob for iterating over something.
    Typically this is used when computing a list of everything is
-   too expensive.
-   The typedef for this struct is in guile-internal.h.  */
+   too expensive.  */
 
-struct _iterator_smob
+struct iterator_smob
 {
   /* This always appears first.  */
   gdb_smob base;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-lazy-string.c ./gdb/guile/scm-lazy-string.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-lazy-string.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-lazy-string.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to lazy strings.
 
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,7 @@
 
 /* The <gdb:lazy-string> smob.  */
 
-typedef struct
+struct lazy_string_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -58,7 +58,7 @@ typedef struct
      This is recorded as an SCM object so that we take advantage of support for
      preserving the type should its owning objfile go away.  */
   SCM type;
-} lazy_string_smob;
+};
 
 static const char lazy_string_smob_name[] = "gdb:lazy-string";
 
@@ -201,7 +201,7 @@ lsscm_elt_type (lazy_string_smob *ls_smo
 
   realtype = check_typedef (type);
 
-  switch (TYPE_CODE (realtype))
+  switch (realtype->code ())
     {
     case TYPE_CODE_PTR:
     case TYPE_CODE_ARRAY:
@@ -314,7 +314,7 @@ lsscm_safe_lazy_string_to_value (SCM str
       struct type *type = tyscm_scm_to_type (ls_smob->type);
       struct type *realtype = check_typedef (type);
 
-      switch (TYPE_CODE (realtype))
+      switch (realtype->code ())
 	{
 	case TYPE_CODE_PTR:
 	  /* If a length is specified we need to convert this to an array
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-math.c ./gdb/guile/scm-math.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-math.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-math.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB/Scheme support for math operations on values.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -65,7 +65,7 @@ enum valscm_binary_opcode
 
 /* If TYPE is a reference, return the target; otherwise return TYPE.  */
 #define STRIP_REFERENCE(TYPE) \
-  ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
+  ((TYPE->code () == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
 
 /* Helper for vlscm_unop.  Contains all the code that may throw a GDB
    exception.  */
@@ -168,10 +168,10 @@ vlscm_binop_gdbthrow (enum valscm_binary
 	rtype = check_typedef (rtype);
 	rtype = STRIP_REFERENCE (rtype);
 
-	if (TYPE_CODE (ltype) == TYPE_CODE_PTR
+	if (ltype->code () == TYPE_CODE_PTR
 	    && is_integral_type (rtype))
 	  res_val = value_ptradd (arg1, value_as_long (arg2));
-	else if (TYPE_CODE (rtype) == TYPE_CODE_PTR
+	else if (rtype->code () == TYPE_CODE_PTR
 		 && is_integral_type (ltype))
 	  res_val = value_ptradd (arg2, value_as_long (arg1));
 	else
@@ -188,15 +188,15 @@ vlscm_binop_gdbthrow (enum valscm_binary
 	rtype = check_typedef (rtype);
 	rtype = STRIP_REFERENCE (rtype);
 
-	if (TYPE_CODE (ltype) == TYPE_CODE_PTR
-	    && TYPE_CODE (rtype) == TYPE_CODE_PTR)
+	if (ltype->code () == TYPE_CODE_PTR
+	    && rtype->code () == TYPE_CODE_PTR)
 	  {
 	    /* A ptrdiff_t for the target would be preferable here.  */
 	    res_val
 	      = value_from_longest (builtin_type (gdbarch)->builtin_long,
 				    value_ptrdiff (arg1, arg2));
 	  }
-	else if (TYPE_CODE (ltype) == TYPE_CODE_PTR
+	else if (ltype->code () == TYPE_CODE_PTR
 		 && is_integral_type (rtype))
 	  res_val = value_ptradd (arg1, - value_as_long (arg2));
 	else
@@ -439,7 +439,7 @@ vlscm_rich_compare (int op, SCM x, SCM y
       int result;
       switch (op)
 	{
-        case BINOP_LESS:
+	case BINOP_LESS:
 	  result = value_less (v1, v2);
 	  break;
 	case BINOP_LEQ:
@@ -451,7 +451,7 @@ vlscm_rich_compare (int op, SCM x, SCM y
 	  break;
 	case BINOP_NOTEQUAL:
 	  gdb_assert_not_reached ("not-equal not implemented");
-        case BINOP_GTR:
+	case BINOP_GTR:
 	  result = value_less (v2, v1);
 	  break;
 	case BINOP_GEQ:
@@ -525,9 +525,9 @@ vlscm_convert_typed_number (const char *
 			    struct gdbarch *gdbarch, SCM *except_scmp)
 {
   if (is_integral_type (type)
-      || TYPE_CODE (type) == TYPE_CODE_PTR)
+      || type->code () == TYPE_CODE_PTR)
     {
-      if (TYPE_UNSIGNED (type))
+      if (type->is_unsigned ())
 	{
 	  ULONGEST max;
 
@@ -558,7 +558,7 @@ vlscm_convert_typed_number (const char *
 	  return value_from_longest (type, gdbscm_scm_to_longest (obj));
 	}
     }
-  else if (TYPE_CODE (type) == TYPE_CODE_FLT)
+  else if (type->code () == TYPE_CODE_FLT)
     return value_from_host_double (type, scm_to_double (obj));
   else
     {
@@ -573,12 +573,12 @@ vlscm_convert_typed_number (const char *
 static int
 vlscm_integer_fits_p (SCM obj, struct type *type)
 {
-  if (TYPE_UNSIGNED (type))
+  if (type->is_unsigned ())
     {
       ULONGEST max;
 
       /* If scm_is_unsigned_integer can't work with this type, just punt.  */
-      if (TYPE_LENGTH (type) > sizeof (scm_t_uintmax))
+      if (TYPE_LENGTH (type) > sizeof (uintmax_t))
 	return 0;
       get_unsigned_type_max (type, &max);
       return scm_is_unsigned_integer (obj, 0, max);
@@ -588,7 +588,7 @@ vlscm_integer_fits_p (SCM obj, struct ty
       LONGEST min, max;
 
       /* If scm_is_signed_integer can't work with this type, just punt.  */
-      if (TYPE_LENGTH (type) > sizeof (scm_t_intmax))
+      if (TYPE_LENGTH (type) > sizeof (intmax_t))
 	return 0;
       get_signed_type_minmax (type, &min, &max);
       return scm_is_signed_integer (obj, min, max);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-objfile.c ./gdb/guile/scm-objfile.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-objfile.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-objfile.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to objfiles.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,10 +25,9 @@
 #include "language.h"
 #include "guile-internal.h"
 
-/* The <gdb:objfile> smob.
-   The typedef for this struct is in guile-internal.h.  */
+/* The <gdb:objfile> smob.  */
 
-struct _objfile_smob
+struct objfile_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -311,16 +310,11 @@ gdbscm_source_objfile_script (const stru
 			      struct objfile *objfile, FILE *file,
 			      const char *filename)
 {
-  char *msg;
-
   ofscm_current_objfile = objfile;
 
-  msg = gdbscm_safe_source_script (filename);
+  gdb::unique_xmalloc_ptr<char> msg = gdbscm_safe_source_script (filename);
   if (msg != NULL)
-    {
-      fprintf_filtered (gdb_stderr, "%s", msg);
-      xfree (msg);
-    }
+    fprintf_filtered (gdb_stderr, "%s", msg.get ());
 
   ofscm_current_objfile = NULL;
 }
@@ -429,7 +423,12 @@ gdbscm_initialize_objfiles (void)
   scm_set_smob_print (objfile_smob_tag, ofscm_print_objfile_smob);
 
   gdbscm_define_functions (objfile_functions, 1);
+}
 
+void _initialize_scm_objfile ();
+void
+_initialize_scm_objfile ()
+{
   ofscm_objfile_data_key
     = register_objfile_data_with_cleanup (NULL, ofscm_handle_objfile_deleted);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-param.c ./gdb/guile/scm-param.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-param.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-param.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB parameters implemented in Guile.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -62,7 +62,7 @@ union pascm_variable
    N.B. There is no free function for this smob.
    All objects pointed to by this smob must live in GC space.  */
 
-typedef struct _param_smob
+struct param_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -89,8 +89,7 @@ typedef struct _param_smob
   /* The corresponding gdb command objects.
      These are NULL if the parameter has not been registered yet, or
      is no longer registered.  */
-  struct cmd_list_element *set_command;
-  struct cmd_list_element *show_command;
+  set_show_commands commands;
 
   /* The value of the parameter.  */
   union pascm_variable value;
@@ -112,7 +111,7 @@ typedef struct _param_smob
      protect/unprotect the object since a reference to it comes from
      non-gc-managed space (the command context pointer).  */
   SCM containing_scm;
-} param_smob;
+};
 
 static const char param_smob_name[] = "gdb:parameter";
 
@@ -232,7 +231,7 @@ pascm_get_param_smob_arg_unsafe (SCM sel
 static int
 pascm_is_valid (param_smob *p_smob)
 {
-  return p_smob->set_command != NULL;
+  return p_smob->commands.set != nullptr;
 }
 
 /* A helper function which return the default documentation string for
@@ -274,7 +273,7 @@ pascm_signal_setshow_error (SCM exceptio
 static void
 pascm_set_func (const char *args, int from_tty, struct cmd_list_element *c)
 {
-  param_smob *p_smob = (param_smob *) get_cmd_context (c);
+  param_smob *p_smob = (param_smob *) c->context ();
   SCM self, result, exception;
 
   gdb_assert (gdbscm_is_procedure (p_smob->set_func));
@@ -314,7 +313,7 @@ static void
 pascm_show_func (struct ui_file *file, int from_tty,
 		 struct cmd_list_element *c, const char *value)
 {
-  param_smob *p_smob = (param_smob *) get_cmd_context (c);
+  param_smob *p_smob = (param_smob *) c->context ();
   SCM value_scm, self, result, exception;
 
   gdb_assert (gdbscm_is_procedure (p_smob->show_func));
@@ -350,111 +349,100 @@ pascm_show_func (struct ui_file *file, i
 /* A helper function that dispatches to the appropriate add_setshow
    function.  */
 
-static void
+static set_show_commands
 add_setshow_generic (enum var_types param_type, enum command_class cmd_class,
 		     char *cmd_name, param_smob *self,
 		     char *set_doc, char *show_doc, 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_cmd,
-		     struct cmd_list_element **show_cmd)
+		     struct cmd_list_element **show_list)
 {
-  struct cmd_list_element *param = NULL;
-  const char *tmp_name = NULL;
+  set_show_commands commands;
 
   switch (param_type)
     {
     case var_boolean:
-      add_setshow_boolean_cmd (cmd_name, cmd_class,
-			       &self->value.boolval,
-			       set_doc, show_doc, help_doc,
-			       set_func, show_func,
-			       set_list, show_list);
-
+      commands = add_setshow_boolean_cmd (cmd_name, cmd_class,
+					  &self->value.boolval, set_doc,
+					  show_doc, help_doc, set_func,
+					  show_func, set_list, show_list);
       break;
 
     case var_auto_boolean:
-      add_setshow_auto_boolean_cmd (cmd_name, cmd_class,
-				    &self->value.autoboolval,
-				    set_doc, show_doc, help_doc,
-				    set_func, show_func,
-				    set_list, show_list);
+      commands = add_setshow_auto_boolean_cmd (cmd_name, cmd_class,
+					       &self->value.autoboolval,
+					       set_doc, show_doc, help_doc,
+					       set_func, show_func, set_list,
+					       show_list);
       break;
 
     case var_uinteger:
-      add_setshow_uinteger_cmd (cmd_name, cmd_class,
-				&self->value.uintval,
-				set_doc, show_doc, help_doc,
-				set_func, show_func,
-				set_list, show_list);
+      commands = add_setshow_uinteger_cmd (cmd_name, cmd_class,
+					   &self->value.uintval, set_doc,
+					   show_doc, help_doc, set_func,
+					   show_func, set_list, show_list);
       break;
 
     case var_zinteger:
-      add_setshow_zinteger_cmd (cmd_name, cmd_class,
-				&self->value.intval,
-				set_doc, show_doc, help_doc,
-				set_func, show_func,
-				set_list, show_list);
+      commands = add_setshow_zinteger_cmd (cmd_name, cmd_class,
+					   &self->value.intval, set_doc,
+					   show_doc, help_doc, set_func,
+					   show_func, set_list, show_list);
       break;
 
     case var_zuinteger:
-      add_setshow_zuinteger_cmd (cmd_name, cmd_class,
-				 &self->value.uintval,
-				 set_doc, show_doc, help_doc,
-				 set_func, show_func,
-				 set_list, show_list);
+      commands = add_setshow_zuinteger_cmd (cmd_name, cmd_class,
+					    &self->value.uintval, set_doc,
+					    show_doc, help_doc, set_func,
+					    show_func, set_list, show_list);
       break;
 
     case var_zuinteger_unlimited:
-      add_setshow_zuinteger_unlimited_cmd (cmd_name, cmd_class,
-					   &self->value.intval,
-					   set_doc, show_doc, help_doc,
-					   set_func, show_func,
-					   set_list, show_list);
+      commands = add_setshow_zuinteger_unlimited_cmd (cmd_name, cmd_class,
+						      &self->value.intval,
+						      set_doc, show_doc,
+						      help_doc, set_func,
+						      show_func, set_list,
+						      show_list);
       break;
 
     case var_string:
-      add_setshow_string_cmd (cmd_name, cmd_class,
-			      &self->value.stringval,
-			      set_doc, show_doc, help_doc,
-			      set_func, show_func,
-			      set_list, show_list);
+      commands = add_setshow_string_cmd (cmd_name, cmd_class,
+					 &self->value.stringval, set_doc,
+					 show_doc, help_doc, set_func,
+					 show_func, set_list, show_list);
       break;
 
     case var_string_noescape:
-      add_setshow_string_noescape_cmd (cmd_name, cmd_class,
-				       &self->value.stringval,
-				       set_doc, show_doc, help_doc,
-				       set_func, show_func,
-				       set_list, show_list);
+      commands = add_setshow_string_noescape_cmd (cmd_name, cmd_class,
+						  &self->value.stringval,
+						  set_doc, show_doc, help_doc,
+						  set_func, show_func, set_list,
+						  show_list);
 
       break;
 
     case var_optional_filename:
-      add_setshow_optional_filename_cmd (cmd_name, cmd_class,
-					 &self->value.stringval,
-					 set_doc, show_doc, help_doc,
-					 set_func, show_func,
-					 set_list, show_list);
+      commands = add_setshow_optional_filename_cmd (cmd_name, cmd_class,
+						    &self->value.stringval,
+						    set_doc, show_doc, help_doc,
+						    set_func, show_func,
+						    set_list, show_list);
       break;
 
     case var_filename:
-      add_setshow_filename_cmd (cmd_name, cmd_class,
-				&self->value.stringval,
-				set_doc, show_doc, help_doc,
-				set_func, show_func,
-				set_list, show_list);
+      commands = add_setshow_filename_cmd (cmd_name, cmd_class,
+					   &self->value.stringval, set_doc,
+					   show_doc, help_doc, set_func,
+					   show_func, set_list, show_list);
       break;
 
     case var_enum:
-      add_setshow_enum_cmd (cmd_name, cmd_class,
-			    self->enumeration,
-			    &self->value.cstringval,
-			    set_doc, show_doc, help_doc,
-			    set_func, show_func,
-			    set_list, show_list);
+      commands = add_setshow_enum_cmd (cmd_name, cmd_class, self->enumeration,
+				       &self->value.cstringval, set_doc,
+				       show_doc, help_doc, set_func, show_func,
+				       set_list, show_list);
       /* Initialize the value, just in case.  */
       self->value.cstringval = self->enumeration[0];
       break;
@@ -463,19 +451,12 @@ add_setshow_generic (enum var_types para
       gdb_assert_not_reached ("bad param_type value");
     }
 
-  /* Lookup created parameter, and register Scheme object against the
-     parameter context.  Perform this task against both lists.  */
-  tmp_name = cmd_name;
-  param = lookup_cmd (&tmp_name, *show_list, "", 0, 1);
-  gdb_assert (param != NULL);
-  set_cmd_context (param, self);
-  *set_cmd = param;
-
-  tmp_name = cmd_name;
-  param = lookup_cmd (&tmp_name, *set_list, "", 0, 1);
-  gdb_assert (param != NULL);
-  set_cmd_context (param, self);
-  *show_cmd = param;
+  /* Register Scheme object against the commandsparameter context.  Perform this
+     task against both lists.  */
+  commands.set->set_context (self);
+  commands.show->set_context (self);
+
+  return commands;
 }
 
 /* Return an array of strings corresponding to the enum values for
@@ -969,7 +950,7 @@ pascm_parameter_defined_p (const char *n
 {
   struct cmd_list_element *c;
 
-  c = lookup_cmd_1 (&name, list, NULL, 1);
+  c = lookup_cmd_1 (&name, list, NULL, NULL, 1);
 
   /* If the name is ambiguous that's ok, it's a new parameter still.  */
   return c != NULL && c != CMD_LIST_AMBIGUOUS;
@@ -1012,15 +993,12 @@ gdbscm_register_parameter_x (SCM self)
   gdbscm_gdb_exception exc {};
   try
     {
-      add_setshow_generic (p_smob->type, p_smob->cmd_class,
-			   p_smob->cmd_name, p_smob,
-			   p_smob->set_doc, p_smob->show_doc, p_smob->doc,
-			   (gdbscm_is_procedure (p_smob->set_func)
-			    ? pascm_set_func : NULL),
-			   (gdbscm_is_procedure (p_smob->show_func)
-			    ? pascm_show_func : NULL),
-			   set_list, show_list,
-			   &p_smob->set_command, &p_smob->show_command);
+      p_smob->commands = add_setshow_generic
+	(p_smob->type, p_smob->cmd_class, p_smob->cmd_name, p_smob,
+	 p_smob->set_doc, p_smob->show_doc, p_smob->doc,
+	 (gdbscm_is_procedure (p_smob->set_func) ? pascm_set_func : NULL),
+	 (gdbscm_is_procedure (p_smob->show_func) ? pascm_show_func : NULL),
+	 set_list, show_list);
     }
   catch (const gdb_exception &except)
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-ports.c ./gdb/guile/scm-ports.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-ports.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-ports.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Support for connecting Guile's stdio to GDB's.
    as well as r/w memory via ports.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,7 @@
    conventions, et.al.  */
 
 #include "defs.h"
-#include "gdb_select.h"
+#include "gdbsupport/gdb_select.h"
 #include "top.h"
 #include "target.h"
 #include "guile-internal.h"
@@ -36,6 +36,12 @@
 #endif
 #endif
 
+/* Whether we're using Guile < 2.2 and its clumsy port API.  */
+
+#define USING_GUILE_BEFORE_2_2				\
+  (SCM_MAJOR_VERSION == 2 && SCM_MINOR_VERSION == 0)
+
+
 /* A ui-file for sending output to Guile.  */
 
 class ioscm_file_port : public ui_file
@@ -53,7 +59,7 @@ private:
 
 /* Data for a memory port.  */
 
-typedef struct
+struct ioscm_memory_port
 {
   /* Bounds of memory range this port is allowed to access: [start, end).
      This means that 0xff..ff is not accessible.  I can live with that.  */
@@ -66,13 +72,15 @@ typedef struct
      This value is always in the range [0, size].  */
   ULONGEST current;
 
+#if USING_GUILE_BEFORE_2_2
   /* The size of the internal r/w buffers.
      Scheme ports aren't a straightforward mapping to memory r/w.
      Generally the user specifies how much to r/w and all access is
      unbuffered.  We don't try to provide equivalent access, but we allow
      the user to specify these values to help get something similar.  */
   unsigned read_buf_size, write_buf_size;
-} ioscm_memory_port;
+#endif
+};
 
 /* Copies of the original system input/output/error ports.
    These are recorded for debugging purposes.  */
@@ -81,7 +89,11 @@ static SCM orig_output_port_scm;
 static SCM orig_error_port_scm;
 
 /* This is the stdio port descriptor, scm_ptob_descriptor.  */
+#if USING_GUILE_BEFORE_2_2
 static scm_t_bits stdio_port_desc;
+#else
+static scm_t_port_type *stdio_port_desc;
+#endif
 
 /* Note: scm_make_port_type takes a char * instead of a const char *.  */
 static /*const*/ char stdio_port_desc_name[] = "gdb:stdio-port";
@@ -102,11 +114,17 @@ static SCM error_port_scm;
 enum oport { GDB_STDOUT, GDB_STDERR };
 
 /* This is the memory port descriptor, scm_ptob_descriptor.  */
+#if USING_GUILE_BEFORE_2_2
 static scm_t_bits memory_port_desc;
+#else
+static scm_t_port_type *memory_port_desc;
+#endif
 
 /* Note: scm_make_port_type takes a char * instead of a const char *.  */
 static /*const*/ char memory_port_desc_name[] = "gdb:memory-port";
 
+#if USING_GUILE_BEFORE_2_2
+
 /* The default amount of memory to fetch for each read/write request.
    Scheme ports don't provide a way to specify the size of a read,
    which is important to us to minimize the number of inferior interactions,
@@ -123,16 +141,24 @@ static const unsigned max_memory_port_bu
 /* "out of range" error message for buf sizes.  */
 static char *out_of_range_buf_size;
 
+#else
+
+/* The maximum values to use for get_natural_buffer_sizes.  */
+static const unsigned natural_buf_size = 16;
+
+#endif
+
 /* Keywords used by open-memory.  */
 static SCM mode_keyword;
 static SCM start_keyword;
 static SCM size_keyword;
 
-/* Helper to do the low level work of opening a port.
-   Newer versions of Guile (2.1.x) have scm_c_make_port.  */
+/* Helper to do the low level work of opening a port.  */
+
+#if USING_GUILE_BEFORE_2_2
 
 static SCM
-ioscm_open_port (scm_t_bits port_type, long mode_bits)
+ioscm_open_port (scm_t_bits port_type, long mode_bits, scm_t_bits stream)
 {
   SCM port;
 
@@ -143,6 +169,7 @@ ioscm_open_port (scm_t_bits port_type, l
   port = scm_new_port_table_entry (port_type);
 
   SCM_SET_CELL_TYPE (port, port_type | mode_bits);
+  SCM_SETSTREAM (port, stream);
 
 #if 0 /* TODO: Guile doesn't export this.  What to do?  */
   scm_i_pthread_mutex_unlock (&scm_i_port_table_mutex);
@@ -150,9 +177,39 @@ ioscm_open_port (scm_t_bits port_type, l
 
   return port;
 }
+
+#else
+
+static SCM
+ioscm_open_port (scm_t_port_type *port_type, long mode_bits, scm_t_bits stream)
+{
+  return scm_c_make_port (port_type, mode_bits, stream);
+}
+
+#endif
+
 
 /* Support for connecting Guile's stdio ports to GDB's stdio ports.  */
 
+/* Like fputstrn_filtered, but don't escape characters, except nul.
+   Also like fputs_filtered, but a length is specified.  */
+
+static void
+fputsn_filtered (const char *s, size_t size, struct ui_file *stream)
+{
+  size_t i;
+
+  for (i = 0; i < size; ++i)
+    {
+      if (s[i] == '\0')
+	fputs_filtered ("\\000", stream);
+      else
+	fputc_filtered (s[i], stream);
+    }
+}
+
+#if USING_GUILE_BEFORE_2_2
+
 /* The scm_t_ptob_descriptor.input_waiting "method".
    Return a lower bound on the number of bytes available for input.  */
 
@@ -212,7 +269,7 @@ ioscm_input_waiting (SCM port)
       {
 	/* Guile doesn't export SIGINT hooks like Python does.
 	   For now pass EINTR to scm_syserror, that's what fports.c does.  */
-        scm_syserror (FUNC_NAME);
+	scm_syserror (FUNC_NAME);
       }
     return num_found > 0 && FD_ISSET (fdes, &input_fds);
   }
@@ -234,7 +291,7 @@ ioscm_fill_input (SCM port)
   gdb_flush (gdb_stdout);
   gdb_flush (gdb_stderr);
 
-  count = ui_file_read (gdb_stdin, (char *) pt->read_buf, pt->read_buf_size);
+  count = gdb_stdin->read ((char *) pt->read_buf, pt->read_buf_size);
   if (count == -1)
     scm_syserror (FUNC_NAME);
   if (count == 0)
@@ -245,23 +302,6 @@ ioscm_fill_input (SCM port)
   return *pt->read_buf;
 }
 
-/* Like fputstrn_filtered, but don't escape characters, except nul.
-   Also like fputs_filtered, but a length is specified.  */
-
-static void
-fputsn_filtered (const char *s, size_t size, struct ui_file *stream)
-{
-  size_t i;
-
-  for (i = 0; i < size; ++i)
-    {
-      if (s[i] == '\0')
-	fputs_filtered ("\\000", stream);
-      else
-	fputc_filtered (s[i], stream);
-    }
-}
-
 /* Write to gdb's stdout or stderr.  */
 
 static void
@@ -302,6 +342,62 @@ ioscm_flush (SCM port)
     gdb_flush (gdb_stdout);
 }
 
+#else /* !USING_GUILE_BEFORE_2_2 */
+
+/* Read up to COUNT bytes into bytevector DST at offset START.  Return the
+   number of bytes read, zero for the end of file.  */
+
+static size_t
+ioscm_read_from_port (SCM port, SCM dst, size_t start, size_t count)
+{
+  long read;
+  char *read_buf;
+
+  /* If we're called on stdout,stderr, punt.  */
+  if (! scm_is_eq (port, input_port_scm))
+    return 0;
+
+  gdb_flush (gdb_stdout);
+  gdb_flush (gdb_stderr);
+
+  read_buf = (char *) SCM_BYTEVECTOR_CONTENTS (dst) + start;
+  read = gdb_stdin->read (read_buf, count);
+  if (read == -1)
+    scm_syserror (FUNC_NAME);
+
+  return (size_t) read;
+}
+
+/* Write to gdb's stdout or stderr.  */
+
+static size_t
+ioscm_write (SCM port, SCM src, size_t start, size_t count)
+{
+  const char *data = (char *) SCM_BYTEVECTOR_CONTENTS (src) + start;
+
+  /* If we're called on stdin, punt.  */
+  if (scm_is_eq (port, input_port_scm))
+    return 0;
+
+  gdbscm_gdb_exception exc {};
+  try
+    {
+      if (scm_is_eq (port, error_port_scm))
+	fputsn_filtered ((const char *) data, count, gdb_stderr);
+      else
+	fputsn_filtered ((const char *) data, count, gdb_stdout);
+    }
+  catch (const gdb_exception &except)
+    {
+      exc = unpack (except);
+    }
+  GDBSCM_HANDLE_GDB_EXCEPTION (exc);
+
+  return count;
+}
+
+#endif /* !USING_GUILE_BEFORE_2_2 */
+
 /* Initialize the gdb stdio port type.
 
    N.B. isatty? will fail on these ports, it is only supported for file
@@ -311,12 +407,25 @@ static void
 ioscm_init_gdb_stdio_port (void)
 {
   stdio_port_desc = scm_make_port_type (stdio_port_desc_name,
-					ioscm_fill_input, ioscm_write);
+#if USING_GUILE_BEFORE_2_2
+					ioscm_fill_input,
+#else
+					ioscm_read_from_port,
+#endif
+					ioscm_write);
 
+#if USING_GUILE_BEFORE_2_2
   scm_set_port_input_waiting (stdio_port_desc, ioscm_input_waiting);
   scm_set_port_flush (stdio_port_desc, ioscm_flush);
+#else
+  scm_set_port_read_wait_fd (stdio_port_desc, STDIN_FILENO);
+#endif
 }
 
+#define GDB_STDIO_BUFFER_DEFAULT_SIZE 1024
+
+#if USING_GUILE_BEFORE_2_2
+
 /* Subroutine of ioscm_make_gdb_stdio_port to simplify it.
    Set up the buffers of port PORT.
    MODE_BITS are the mode bits of PORT.  */
@@ -325,7 +434,6 @@ static void
 ioscm_init_stdio_buffers (SCM port, long mode_bits)
 {
   scm_t_port *pt = SCM_PTAB_ENTRY (port);
-#define GDB_STDIO_BUFFER_DEFAULT_SIZE 1024
   int size = mode_bits & SCM_BUF0 ? 0 : GDB_STDIO_BUFFER_DEFAULT_SIZE;
   int writing = (mode_bits & SCM_WRTNG) != 0;
 
@@ -359,6 +467,20 @@ ioscm_init_stdio_buffers (SCM port, long
   pt->write_end = pt->write_buf + pt->write_buf_size;
 }
 
+#else
+
+static void
+ioscm_init_stdio_buffers (SCM port, long mode_bits)
+{
+  if (mode_bits & SCM_BUF0)
+    scm_setvbuf (port, scm_from_utf8_symbol ("none"), scm_from_size_t (0));
+  else
+    scm_setvbuf (port, scm_from_utf8_symbol ("block"),
+		 scm_from_size_t (GDB_STDIO_BUFFER_DEFAULT_SIZE));
+}
+
+#endif
+
 /* Create a gdb stdio port.  */
 
 static SCM
@@ -389,7 +511,7 @@ ioscm_make_gdb_stdio_port (int fd)
     }
 
   mode_bits = scm_mode_bits ((char *) mode_str);
-  port = ioscm_open_port (stdio_port_desc, mode_bits);
+  port = ioscm_open_port (stdio_port_desc, mode_bits, 0);
 
   scm_set_port_filename_x (port, gdbscm_scm_from_c_string (name));
 
@@ -403,9 +525,14 @@ ioscm_make_gdb_stdio_port (int fd)
 static SCM
 gdbscm_stdio_port_p (SCM scm)
 {
+#if USING_GUILE_BEFORE_2_2
   /* This is copied from SCM_FPORTP.  */
   return scm_from_bool (!SCM_IMP (scm)
 			&& (SCM_TYP16 (scm) == stdio_port_desc));
+#else
+  return scm_from_bool (SCM_PORTP (scm)
+			&& (SCM_PORT_TYPE (scm) == stdio_port_desc));
+#endif
 }
 
 /* GDB's ports are accessed via functions to keep them read-only.  */
@@ -568,6 +695,8 @@ ioscm_lseek_address (ioscm_memory_port *
   return 1;
 }
 
+#if USING_GUILE_BEFORE_2_2
+
 /* "fill_input" method for memory ports.  */
 
 static int
@@ -661,73 +790,6 @@ gdbscm_memory_port_flush (SCM port)
   pt->rw_active = SCM_PORT_NEITHER;
 }
 
-/* "write" method for memory ports.  */
-
-static void
-gdbscm_memory_port_write (SCM port, const void *void_data, size_t size)
-{
-  scm_t_port *pt = SCM_PTAB_ENTRY (port);
-  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
-  const gdb_byte *data = (const gdb_byte *) void_data;
-
-  /* There's no way to indicate a short write, so if the request goes past
-     the end of the port's memory range, flag an error.  */
-  if (size > iomem->size - iomem->current)
-    {
-      gdbscm_out_of_range_error (FUNC_NAME, 0, gdbscm_scm_from_ulongest (size),
-				 _("writing beyond end of memory range"));
-    }
-
-  if (pt->write_buf == &pt->shortbuf)
-    {
-      /* Unbuffered port.  */
-      if (target_write_memory (iomem->start + iomem->current, data, size) != 0)
-	gdbscm_memory_error (FUNC_NAME, _("error writing memory"), SCM_EOL);
-      iomem->current += size;
-      return;
-    }
-
-  /* Note: The edge case of what to do when the buffer exactly fills is
-     debatable.  Guile flushes when the buffer exactly fills up, so we
-     do too.  It's counter-intuitive to my mind, but in case there's a
-     subtlety somewhere that depends on this, we do the same.  */
-
-  {
-    size_t space = pt->write_end - pt->write_pos;
-
-    if (size < space)
-      {
-	/* Data fits in buffer, and does not fill it.  */
-	memcpy (pt->write_pos, data, size);
-	pt->write_pos += size;
-      }
-    else
-      {
-	memcpy (pt->write_pos, data, space);
-	pt->write_pos = pt->write_end;
-	gdbscm_memory_port_flush (port);
-	{
-	  const gdb_byte *ptr = data + space;
-	  size_t remaining = size - space;
-
-	  if (remaining >= pt->write_buf_size)
-	    {
-	      if (target_write_memory (iomem->start + iomem->current, ptr,
-				       remaining) != 0)
-		gdbscm_memory_error (FUNC_NAME, _("error writing memory"),
-				     SCM_EOL);
-	      iomem->current += remaining;
-	    }
-	  else
-	    {
-	      memcpy (pt->write_pos, ptr, remaining);
-	      pt->write_pos += remaining;
-	    }
-	}
-      }
-  }
-}
-
 /* "seek" method for memory ports.  */
 
 static scm_t_off
@@ -820,6 +882,73 @@ gdbscm_memory_port_seek (SCM port, scm_t
   return result;
 }
 
+/* "write" method for memory ports.  */
+
+static void
+gdbscm_memory_port_write (SCM port, const void *void_data, size_t size)
+{
+  scm_t_port *pt = SCM_PTAB_ENTRY (port);
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+  const gdb_byte *data = (const gdb_byte *) void_data;
+
+  /* There's no way to indicate a short write, so if the request goes past
+     the end of the port's memory range, flag an error.  */
+  if (size > iomem->size - iomem->current)
+    {
+      gdbscm_out_of_range_error (FUNC_NAME, 0, gdbscm_scm_from_ulongest (size),
+				 _("writing beyond end of memory range"));
+    }
+
+  if (pt->write_buf == &pt->shortbuf)
+    {
+      /* Unbuffered port.  */
+      if (target_write_memory (iomem->start + iomem->current, data, size) != 0)
+	gdbscm_memory_error (FUNC_NAME, _("error writing memory"), SCM_EOL);
+      iomem->current += size;
+      return;
+    }
+
+  /* Note: The edge case of what to do when the buffer exactly fills is
+     debatable.  Guile flushes when the buffer exactly fills up, so we
+     do too.  It's counter-intuitive to my mind, but in case there's a
+     subtlety somewhere that depends on this, we do the same.  */
+
+  {
+    size_t space = pt->write_end - pt->write_pos;
+
+    if (size < space)
+      {
+	/* Data fits in buffer, and does not fill it.  */
+	memcpy (pt->write_pos, data, size);
+	pt->write_pos += size;
+      }
+    else
+      {
+	memcpy (pt->write_pos, data, space);
+	pt->write_pos = pt->write_end;
+	gdbscm_memory_port_flush (port);
+	{
+	  const gdb_byte *ptr = data + space;
+	  size_t remaining = size - space;
+
+	  if (remaining >= pt->write_buf_size)
+	    {
+	      if (target_write_memory (iomem->start + iomem->current, ptr,
+				       remaining) != 0)
+		gdbscm_memory_error (FUNC_NAME, _("error writing memory"),
+				     SCM_EOL);
+	      iomem->current += remaining;
+	    }
+	  else
+	    {
+	      memcpy (pt->write_pos, ptr, remaining);
+	      pt->write_pos += remaining;
+	    }
+	}
+      }
+  }
+}
+
 /* "close" method for memory ports.  */
 
 static int
@@ -851,18 +980,178 @@ gdbscm_memory_port_free (SCM port)
   return 0;
 }
 
+/* Re-initialize a memory port, updating its read/write buffer sizes.
+   An exception is thrown if the port is unbuffered.
+   TODO: Allow switching buffered/unbuffered.
+   An exception is also thrown if data is still buffered, except in the case
+   where the buffer size isn't changing (since that's just a nop).  */
+
+static void
+ioscm_reinit_memory_port (SCM port, size_t read_buf_size,
+			  size_t write_buf_size, const char *func_name)
+{
+  scm_t_port *pt = SCM_PTAB_ENTRY (port);
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+
+  gdb_assert (read_buf_size >= min_memory_port_buf_size
+	      && read_buf_size <= max_memory_port_buf_size);
+  gdb_assert (write_buf_size >= min_memory_port_buf_size
+	      && write_buf_size <= max_memory_port_buf_size);
+
+  /* First check if the port is unbuffered.  */
+
+  if (pt->read_buf == &pt->shortbuf)
+    {
+      gdb_assert (pt->write_buf == &pt->shortbuf);
+      scm_misc_error (func_name, _("port is unbuffered: ~a"),
+		      scm_list_1 (port));
+    }
+
+  /* Next check if anything is buffered.  */
+
+  if (read_buf_size != pt->read_buf_size
+      && pt->read_end != pt->read_buf)
+    {
+      scm_misc_error (func_name, _("read buffer not empty: ~a"),
+		      scm_list_1 (port));
+    }
+
+  if (write_buf_size != pt->write_buf_size
+      && pt->write_pos != pt->write_buf)
+    {
+      scm_misc_error (func_name, _("write buffer not empty: ~a"),
+		      scm_list_1 (port));
+    }
+
+  /* Now we can update the buffer sizes, but only if the size has changed.  */
+
+  if (read_buf_size != pt->read_buf_size)
+    {
+      iomem->read_buf_size = read_buf_size;
+      pt->read_buf_size = read_buf_size;
+      xfree (pt->read_buf);
+      pt->read_buf = (unsigned char *) xmalloc (pt->read_buf_size);
+      pt->read_pos = pt->read_end = pt->read_buf;
+    }
+
+  if (write_buf_size != pt->write_buf_size)
+    {
+      iomem->write_buf_size = write_buf_size;
+      pt->write_buf_size = write_buf_size;
+      xfree (pt->write_buf);
+      pt->write_buf = (unsigned char *) xmalloc (pt->write_buf_size);
+      pt->write_pos = pt->write_buf;
+      pt->write_end = pt->write_buf + pt->write_buf_size;
+    }
+}
+
+#else /* !USING_GUILE_BEFORE_2_2 */
+
+/* The semantics get weird if the buffer size is larger than the port range,
+   so provide a better default buffer size.  */
+
+static void
+gdbscm_get_natural_buffer_sizes (SCM port, size_t *read_size,
+				 size_t *write_size)
+{
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+
+  size_t size = natural_buf_size;
+  if (iomem != NULL && iomem->size < size)
+    size = iomem->size;
+  *read_size = *write_size = size;
+}
+
+/* Read up to COUNT bytes into bytevector DST at offset START.  Return the
+   number of bytes read, zero for the end of file.  */
+
+static size_t
+gdbscm_memory_port_read (SCM port, SCM dst, size_t start, size_t count)
+{
+  gdb_byte *read_buf;
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+
+  /* "current" is the offset of the first byte we want to read.  */
+  gdb_assert (iomem->current <= iomem->size);
+  if (iomem->current == iomem->size)
+    return 0;
+
+  /* Don't read outside the allowed memory range.  */
+  if (count > iomem->size - iomem->current)
+    count = iomem->size - iomem->current;
+
+  read_buf = (gdb_byte *) SCM_BYTEVECTOR_CONTENTS (dst) + start;
+  if (target_read_memory (iomem->start + iomem->current, read_buf,
+			  count) != 0)
+    gdbscm_memory_error (FUNC_NAME, _("error reading memory"), SCM_EOL);
+
+  iomem->current += count;
+  return count;
+}
+
+static size_t
+gdbscm_memory_port_write (SCM port, SCM src, size_t start, size_t count)
+{
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+  const gdb_byte *data =
+    (const gdb_byte *) SCM_BYTEVECTOR_CONTENTS (src) + start;
+
+  /* If the request goes past the end of the port's memory range, flag an
+     error.  */
+  if (count > iomem->size - iomem->current)
+    gdbscm_out_of_range_error (FUNC_NAME, 0, scm_from_size_t (count),
+			       _("writing beyond end of memory range"));
+
+  if (target_write_memory (iomem->start + iomem->current, data,
+			   count) != 0)
+    gdbscm_memory_error (FUNC_NAME, _("error writing memory"),
+			 SCM_EOL);
+
+  iomem->current += count;
+
+  return count;
+}
+
+static scm_t_off
+gdbscm_memory_port_seek (SCM port, scm_t_off offset, int whence)
+{
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+  int rc;
+
+  rc = ioscm_lseek_address (iomem, offset, whence);
+  if (rc == 0)
+    gdbscm_out_of_range_error (FUNC_NAME, 0,
+			       gdbscm_scm_from_longest (offset),
+			       _("bad seek"));
+
+  /* TODO: The Guile API doesn't support 32x64.  We can't fix that here,
+     and there's no need to throw an error if the new address can't be
+     represented in a scm_t_off.  But we could return something less
+     clumsy.  */
+  return iomem->current;
+}
+
+static void
+gdbscm_memory_port_close (SCM port)
+{
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+  scm_gc_free (iomem, sizeof (*iomem), "memory port");
+  SCM_SETSTREAM (port, NULL);
+}
+
+#endif /* !USING_GUILE_BEFORE_2_2 */
+
 /* "print" method for memory ports.  */
 
 static int
 gdbscm_memory_port_print (SCM exp, SCM port, scm_print_state *pstate)
 {
   ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (exp);
-  char *type = SCM_PTOBNAME (SCM_PTOBNUM (exp));
 
   scm_puts ("#<", port);
   scm_print_port_mode (exp, port);
   /* scm_print_port_mode includes a trailing space.  */
-  gdbscm_printf (port, "%s %s-%s", type,
+  gdbscm_printf (port, "%s %s-%s", memory_port_desc_name,
 		 hex_string (iomem->start), hex_string (iomem->end));
   scm_putc ('>', port);
   return 1;
@@ -874,14 +1163,23 @@ static void
 ioscm_init_memory_port_type (void)
 {
   memory_port_desc = scm_make_port_type (memory_port_desc_name,
+#if USING_GUILE_BEFORE_2_2
 					 gdbscm_memory_port_fill_input,
+#else
+					 gdbscm_memory_port_read,
+#endif
 					 gdbscm_memory_port_write);
 
+#if USING_GUILE_BEFORE_2_2
   scm_set_port_end_input (memory_port_desc, gdbscm_memory_port_end_input);
   scm_set_port_flush (memory_port_desc, gdbscm_memory_port_flush);
+  scm_set_port_free (memory_port_desc, gdbscm_memory_port_free);
+#else
+  scm_set_port_get_natural_buffer_sizes (memory_port_desc,
+					 gdbscm_get_natural_buffer_sizes);
+#endif
   scm_set_port_seek (memory_port_desc, gdbscm_memory_port_seek);
   scm_set_port_close (memory_port_desc, gdbscm_memory_port_close);
-  scm_set_port_free (memory_port_desc, gdbscm_memory_port_free);
   scm_set_port_print (memory_port_desc, gdbscm_memory_port_print);
 }
 
@@ -922,17 +1220,13 @@ ioscm_parse_mode_bits (const char *func_
   return mode_bits;
 }
 
-/* Helper for gdbscm_open_memory to finish initializing the port.
-   The port has address range [start,end).
-   This means that address of 0xff..ff is not accessible.
-   I can live with that.  */
+/* Return the memory object to be used as a "stream" associated with a memory
+   port for the START--END range.  */
 
-static void
-ioscm_init_memory_port (SCM port, CORE_ADDR start, CORE_ADDR end)
+static ioscm_memory_port *
+ioscm_init_memory_port_stream (CORE_ADDR start, CORE_ADDR end)
 {
-  scm_t_port *pt;
   ioscm_memory_port *iomem;
-  int buffered = (SCM_CELL_WORD_0 (port) & SCM_BUF0) == 0;
 
   gdb_assert (start <= end);
 
@@ -943,6 +1237,23 @@ ioscm_init_memory_port (SCM port, CORE_A
   iomem->end = end;
   iomem->size = end - start;
   iomem->current = 0;
+
+  return iomem;
+}
+
+#if USING_GUILE_BEFORE_2_2
+
+/* Helper for gdbscm_open_memory to finish initializing the port.
+   The port has address range [start,end).
+   This means that address of 0xff..ff is not accessible.
+   I can live with that.  */
+
+static void
+ioscm_init_memory_port_buffers (SCM port)
+{
+  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
+
+  int buffered = (SCM_CELL_WORD_0 (port) & SCM_BUF0) == 0;
   if (buffered)
     {
       iomem->read_buf_size = default_read_buf_size;
@@ -954,7 +1265,7 @@ ioscm_init_memory_port (SCM port, CORE_A
       iomem->write_buf_size = 1;
     }
 
-  pt = SCM_PTAB_ENTRY (port);
+  scm_t_port *pt = SCM_PTAB_ENTRY (port);
   /* Match the expectation of `binary-port?'.  */
   pt->encoding = NULL;
   pt->rw_random = 1;
@@ -973,74 +1284,9 @@ ioscm_init_memory_port (SCM port, CORE_A
   pt->read_pos = pt->read_end = pt->read_buf;
   pt->write_pos = pt->write_buf;
   pt->write_end = pt->write_buf + pt->write_buf_size;
-
-  SCM_SETSTREAM (port, iomem);
 }
 
-/* Re-initialize a memory port, updating its read/write buffer sizes.
-   An exception is thrown if the port is unbuffered.
-   TODO: Allow switching buffered/unbuffered.
-   An exception is also thrown if data is still buffered, except in the case
-   where the buffer size isn't changing (since that's just a nop).  */
-
-static void
-ioscm_reinit_memory_port (SCM port, size_t read_buf_size,
-			  size_t write_buf_size, const char *func_name)
-{
-  scm_t_port *pt = SCM_PTAB_ENTRY (port);
-  ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port);
-
-  gdb_assert (read_buf_size >= min_memory_port_buf_size
-	      && read_buf_size <= max_memory_port_buf_size);
-  gdb_assert (write_buf_size >= min_memory_port_buf_size
-	      && write_buf_size <= max_memory_port_buf_size);
-
-  /* First check if the port is unbuffered.  */
-
-  if (pt->read_buf == &pt->shortbuf)
-    {
-      gdb_assert (pt->write_buf == &pt->shortbuf);
-      scm_misc_error (func_name, _("port is unbuffered: ~a"),
-		      scm_list_1 (port));
-    }
-
-  /* Next check if anything is buffered.  */
-
-  if (read_buf_size != pt->read_buf_size
-      && pt->read_end != pt->read_buf)
-    {
-      scm_misc_error (func_name, _("read buffer not empty: ~a"),
-		      scm_list_1 (port));
-    }
-
-  if (write_buf_size != pt->write_buf_size
-      && pt->write_pos != pt->write_buf)
-    {
-      scm_misc_error (func_name, _("write buffer not empty: ~a"),
-		      scm_list_1 (port));
-    }
-
-  /* Now we can update the buffer sizes, but only if the size has changed.  */
-
-  if (read_buf_size != pt->read_buf_size)
-    {
-      iomem->read_buf_size = read_buf_size;
-      pt->read_buf_size = read_buf_size;
-      xfree (pt->read_buf);
-      pt->read_buf = (unsigned char *) xmalloc (pt->read_buf_size);
-      pt->read_pos = pt->read_end = pt->read_buf;
-    }
-
-  if (write_buf_size != pt->write_buf_size)
-    {
-      iomem->write_buf_size = write_buf_size;
-      pt->write_buf_size = write_buf_size;
-      xfree (pt->write_buf);
-      pt->write_buf = (unsigned char *) xmalloc (pt->write_buf_size);
-      pt->write_pos = pt->write_buf;
-      pt->write_end = pt->write_buf + pt->write_buf_size;
-    }
-}
+#endif
 
 /* (open-memory [#:mode string] [#:start address] [#:size integer]) -> port
    Return a port that can be used for reading and writing memory.
@@ -1109,9 +1355,19 @@ gdbscm_open_memory (SCM rest)
 
   mode_bits = ioscm_parse_mode_bits (FUNC_NAME, mode);
 
-  port = ioscm_open_port (memory_port_desc, mode_bits);
+  /* Edge case: empty range -> unbuffered.
+     There's no need to disallow empty ranges, but we need an unbuffered port
+     to get the semantics right.  */
+  if (size == 0)
+    mode_bits |= SCM_BUF0;
+
+  auto stream = ioscm_init_memory_port_stream (start, end);
+  port = ioscm_open_port (memory_port_desc, mode_bits,
+			  (scm_t_bits) stream);
 
-  ioscm_init_memory_port (port, start, end);
+#if USING_GUILE_BEFORE_2_2
+  ioscm_init_memory_port_buffers (port);
+#endif
 
   scm_dynwind_end ();
 
@@ -1124,7 +1380,11 @@ gdbscm_open_memory (SCM rest)
 static int
 gdbscm_is_memory_port (SCM obj)
 {
+#if USING_GUILE_BEFORE_2_2
   return !SCM_IMP (obj) && (SCM_TYP16 (obj) == memory_port_desc);
+#else
+  return SCM_PORTP (obj) && (SCM_PORT_TYPE (obj) == memory_port_desc);
+#endif
 }
 
 /* (memory-port? obj) -> boolean */
@@ -1155,6 +1415,7 @@ gdbscm_memory_port_range (SCM port)
 static SCM
 gdbscm_memory_port_read_buffer_size (SCM port)
 {
+#if USING_GUILE_BEFORE_2_2
   ioscm_memory_port *iomem;
 
   SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME,
@@ -1162,6 +1423,9 @@ gdbscm_memory_port_read_buffer_size (SCM
 
   iomem = (ioscm_memory_port *) SCM_STREAM (port);
   return scm_from_uint (iomem->read_buf_size);
+#else
+  return scm_from_uint (0);
+#endif
 }
 
 /* (set-memory-port-read-buffer-size! port size) -> unspecified
@@ -1171,6 +1435,7 @@ gdbscm_memory_port_read_buffer_size (SCM
 static SCM
 gdbscm_set_memory_port_read_buffer_size_x (SCM port, SCM size)
 {
+#if USING_GUILE_BEFORE_2_2
   ioscm_memory_port *iomem;
 
   SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME,
@@ -1190,6 +1455,9 @@ gdbscm_set_memory_port_read_buffer_size_
 			    FUNC_NAME);
 
   return SCM_UNSPECIFIED;
+#else
+  return scm_setvbuf (port, scm_from_utf8_symbol ("block"), size);
+#endif
 }
 
 /* (memory-port-write-buffer-size port) -> integer */
@@ -1197,6 +1465,7 @@ gdbscm_set_memory_port_read_buffer_size_
 static SCM
 gdbscm_memory_port_write_buffer_size (SCM port)
 {
+#if USING_GUILE_BEFORE_2_2
   ioscm_memory_port *iomem;
 
   SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME,
@@ -1204,6 +1473,9 @@ gdbscm_memory_port_write_buffer_size (SC
 
   iomem = (ioscm_memory_port *) SCM_STREAM (port);
   return scm_from_uint (iomem->write_buf_size);
+#else
+  return scm_from_uint (0);
+#endif
 }
 
 /* (set-memory-port-write-buffer-size! port size) -> unspecified
@@ -1213,6 +1485,7 @@ gdbscm_memory_port_write_buffer_size (SC
 static SCM
 gdbscm_set_memory_port_write_buffer_size_x (SCM port, SCM size)
 {
+#if USING_GUILE_BEFORE_2_2
   ioscm_memory_port *iomem;
 
   SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME,
@@ -1232,6 +1505,9 @@ gdbscm_set_memory_port_write_buffer_size
 			    FUNC_NAME);
 
   return SCM_UNSPECIFIED;
+#else
+  return scm_setvbuf (port, scm_from_utf8_symbol ("block"), size);
+#endif
 }
 
 /* Initialize gdb ports.  */
@@ -1366,9 +1642,11 @@ gdbscm_initialize_ports (void)
   start_keyword = scm_from_latin1_keyword ("start");
   size_keyword = scm_from_latin1_keyword ("size");
 
+#if USING_GUILE_BEFORE_2_2
   /* Error message text for "out of range" memory port buffer sizes.  */
 
   out_of_range_buf_size = xstrprintf ("size not between %u - %u",
 				      min_memory_port_buf_size,
 				      max_memory_port_buf_size);
+#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-pretty-print.c ./gdb/guile/scm-pretty-print.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-pretty-print.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-pretty-print.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB/Scheme pretty-printing.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -59,7 +59,7 @@ enum display_hint
 
 /* The <gdb:pretty-printer> smob.  */
 
-typedef struct
+struct pretty_printer_smob
 {
   /* This must appear first.  */
   gdb_smob base;
@@ -77,11 +77,11 @@ typedef struct
   SCM lookup;
 
   /* Note: Attaching subprinters to this smob is left to Scheme.  */
-} pretty_printer_smob;
+};
 
 /* The <gdb:pretty-printer-worker> smob.  */
 
-typedef struct
+struct pretty_printer_worker_smob
 {
   /* This must appear first.  */
   gdb_smob base;
@@ -99,7 +99,7 @@ typedef struct
      The iterator returns a pair for each iteration: (name . value),
      where "value" can have the same types as to_string.  */
   SCM children;
-} pretty_printer_worker_smob;
+};
 
 static const char pretty_printer_smob_name[] =
   "gdb:pretty-printer";
@@ -675,8 +675,8 @@ ppscm_print_string_repr (SCM printer, en
 	{
 	  struct type *type = builtin_type (gdbarch)->builtin_char;
 	  
-	  LA_PRINT_STRING (stream, type, (gdb_byte *) string.get (),
-			   length, NULL, 0, options);
+	  language->printstr (stream, type, (gdb_byte *) string.get (),
+			      length, NULL, 0, options);
 	}
       else
 	{
@@ -818,21 +818,29 @@ ppscm_print_children (SCM printer, enum
       gdb::unique_xmalloc_ptr<char> name
 	= gdbscm_scm_to_c_string (scm_name);
 
-      /* Print initial "{".  For other elements, there are three cases:
+      /* Print initial "=" to separate print_string_repr output and
+	 children.  For other elements, there are three cases:
 	 1. Maps.  Print a "," after each value element.
 	 2. Arrays.  Always print a ",".
 	 3. Other.  Always print a ",".  */
       if (i == 0)
 	{
-         if (printed_nothing)
-           fputs_filtered ("{", stream);
-         else
-           fputs_filtered (" = {", stream);
-       }
-
+	  if (!printed_nothing)
+	    fputs_filtered (" = ", stream);
+	}
       else if (! is_map || i % 2 == 0)
 	fputs_filtered (pretty ? "," : ", ", stream);
 
+      /* Skip printing children if max_depth has been reached.  This check
+	 is performed after print_string_repr and the "=" separator so that
+	 these steps are not skipped if the variable is located within the
+	 permitted depth.  */
+      if (val_print_check_max_depth (stream, recurse, options, language))
+	goto done;
+      else if (i == 0)
+	/* Print initial "{" to bookend children.  */
+	fputs_filtered ("{", stream);
+
       /* In summary mode, we just want to print "= {...}" if there is
 	 a value.  */
       if (options->summary)
@@ -943,36 +951,32 @@ ppscm_print_children (SCM printer, enum
 
 enum ext_lang_rc
 gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang,
-				 struct type *type,
-				 LONGEST embedded_offset, CORE_ADDR address,
+				 struct value *value,
 				 struct ui_file *stream, int recurse,
-				 struct value *val,
 				 const struct value_print_options *options,
 				 const struct language_defn *language)
 {
-  struct gdbarch *gdbarch = get_type_arch (type);
+  struct type *type = value_type (value);
+  struct gdbarch *gdbarch = type->arch ();
   SCM exception = SCM_BOOL_F;
   SCM printer = SCM_BOOL_F;
   SCM val_obj = SCM_BOOL_F;
-  struct value *value;
   enum display_hint hint;
   enum ext_lang_rc result = EXT_LANG_RC_NOP;
   enum string_repr_result print_result;
 
-  if (value_lazy (val))
-    value_fetch_lazy (val);
+  if (value_lazy (value))
+    value_fetch_lazy (value);
 
   /* No pretty-printer support for unavailable values.  */
-  if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type)))
+  if (!value_bytes_available (value, 0, TYPE_LENGTH (type)))
     return EXT_LANG_RC_NOP;
 
   if (!gdb_scheme_initialized)
     return EXT_LANG_RC_NOP;
 
   /* Instantiate the printer.  */
-  value = value_from_component (val, type, embedded_offset);
-
-  val_obj = vlscm_scm_from_value (value);
+  val_obj = vlscm_scm_from_value_no_release (value);
   if (gdbscm_is_exception (val_obj))
     {
       exception = val_obj;
@@ -995,12 +999,6 @@ gdbscm_apply_val_pretty_printer (const s
     }
   gdb_assert (ppscm_is_pretty_printer_worker (printer));
 
-  if (val_print_check_max_depth (stream, recurse, options, language))
-    {
-      result = EXT_LANG_RC_OK;
-      goto done;
-    }
-
   /* If we are printing a map, we want some special formatting.  */
   hint = ppscm_get_display_hint_enum (printer);
   if (hint == HINT_ERROR)
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-progspace.c ./gdb/guile/scm-progspace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-progspace.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-progspace.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Guile interface to program spaces.
 
-   Copyright (C) 2010-2020 Free Software Foundation, Inc.
+   Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,10 +28,9 @@
 /* NOTE: Python exports the name "Progspace", so we export "progspace".
    Internally we shorten that to "pspace".  */
 
-/* The <gdb:progspace> smob.
-   The typedef for this struct is in guile-internal.h.  */
+/* The <gdb:progspace> smob.  */
 
-struct _pspace_smob
+struct pspace_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -353,17 +352,16 @@ gdbscm_current_progspace (void)
 static SCM
 gdbscm_progspaces (void)
 {
-  struct program_space *ps;
   SCM result;
 
   result = SCM_EOL;
 
-  ALL_PSPACES (ps)
-  {
-    SCM item = psscm_scm_from_pspace (ps);
+  for (struct program_space *ps : program_spaces)
+    {
+      SCM item = psscm_scm_from_pspace (ps);
 
-    result = scm_cons (item, result);
-  }
+      result = scm_cons (item, result);
+    }
 
   return scm_reverse_x (result, SCM_EOL);
 }
@@ -419,7 +417,12 @@ gdbscm_initialize_pspaces (void)
   scm_set_smob_print (pspace_smob_tag, psscm_print_pspace_smob);
 
   gdbscm_define_functions (pspace_functions, 1);
+}
 
+void _initialize_scm_progspace ();
+void
+_initialize_scm_progspace ()
+{
   psscm_pspace_data_key
     = register_program_space_data_with_cleanup (NULL,
 						psscm_handle_pspace_deleted);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-safe-call.c ./gdb/guile/scm-safe-call.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-safe-call.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-safe-call.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB/Scheme support for safe calls into the Guile interpreter.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -431,7 +431,7 @@ scscm_source_scheme_script (void *data)
    printed according to "set guile print-stack" and the result is an error
    message allocated with malloc, caller must free.  */
 
-char *
+gdb::unique_xmalloc_ptr<char>
 gdbscm_safe_source_script (const char *filename)
 {
   /* scm_c_primitive_load_path only looks in %load-path for files with
@@ -452,7 +452,7 @@ gdbscm_safe_source_script (const char *f
 			      (void *) filename);
 
   if (result != NULL)
-    return xstrdup (result);
+    return make_unique_xstrdup (result);
   return NULL;
 }
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-string.c ./gdb/guile/scm-string.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-string.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-string.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* GDB/Scheme charset interface.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-symbol.c ./gdb/guile/scm-symbol.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-symbol.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-symbol.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to symbols.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,14 +30,14 @@
 
 /* The <gdb:symbol> smob.  */
 
-typedef struct
+struct symbol_smob
 {
   /* This always appears first.  */
   eqable_gdb_smob base;
 
   /* The GDB symbol structure this smob is wrapping.  */
   struct symbol *symbol;
-} symbol_smob;
+};
 
 static const char symbol_smob_name[] = "gdb:symbol";
 
@@ -817,7 +817,12 @@ gdbscm_initialize_symbols (void)
   block_keyword = scm_from_latin1_keyword ("block");
   domain_keyword = scm_from_latin1_keyword ("domain");
   frame_keyword = scm_from_latin1_keyword ("frame");
+}
 
+void _initialize_scm_symbol ();
+void
+_initialize_scm_symbol ()
+{
   /* Register an objfile "free" callback so we can properly
      invalidate symbols when an object file is about to be deleted.  */
   syscm_objfile_data_key
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-symtab.c ./gdb/guile/scm-symtab.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-symtab.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-symtab.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to symbol tables.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,7 @@
 
 /* A <gdb:symtab> smob.  */
 
-typedef struct
+struct symtab_smob
 {
   /* This always appears first.
      eqable_gdb_smob is used so that symtabs are eq?-able.
@@ -42,7 +42,7 @@ typedef struct
      If this is NULL the symtab is invalid.  This can happen when the
      underlying objfile is freed.  */
   struct symtab *symtab;
-} symtab_smob;
+};
 
 /* A <gdb:sal> smob.
    A smob describing a gdb symtab-and-line object.
@@ -50,7 +50,7 @@ typedef struct
    the validity of symtab_scm.
    TODO: Sals are not eq?-able at the moment, or even comparable.  */
 
-typedef struct
+struct sal_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -67,7 +67,7 @@ typedef struct
      this pointer will not be updated.  Use symtab_scm instead to determine
      if this sal is valid.  */
   struct symtab_and_line sal;
-} sal_smob;
+};
 
 static const char symtab_smob_name[] = "gdb:symtab";
 /* "symtab-and-line" is pretty long, and "sal" is short and unique.  */
@@ -688,7 +688,12 @@ gdbscm_initialize_symtabs (void)
   scm_set_smob_print (sal_smob_tag, stscm_print_sal_smob);
 
   gdbscm_define_functions (symtab_functions, 1);
+}
 
+void _initialize_scm_symtab ();
+void
+_initialize_scm_symtab ()
+{
   /* Register an objfile "free" callback so we can properly
      invalidate symbol tables, and symbol table and line data
      structures when an object file that is about to be deleted.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-type.c ./gdb/guile/scm-type.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-type.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-type.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to types.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,17 +27,16 @@
 #include "objfiles.h"
 #include "language.h"
 #include "bcache.h"
-#include "dwarf2loc.h"
+#include "dwarf2/loc.h"
 #include "typeprint.h"
 #include "guile-internal.h"
 
 /* The <gdb:type> smob.
    The type is chained with all types associated with its objfile, if any.
    This lets us copy the underlying struct type when the objfile is
-   deleted.
-   The typedef for this struct is in guile-internal.h.  */
+   deleted.  */
 
-struct _type_smob
+struct type_smob
 {
   /* This always appears first.
      eqable_gdb_smob is used so that types are eq?-able.
@@ -52,7 +51,7 @@ struct _type_smob
 
 /* A field smob.  */
 
-typedef struct
+struct field_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -62,7 +61,7 @@ typedef struct
 
   /* The field number in TYPE_SCM.  */
   int field_num;
-} field_smob;
+};
 
 static const char type_smob_name[] = "gdb:type";
 static const char field_smob_name[] = "gdb:field";
@@ -152,7 +151,7 @@ tyscm_eq_type_smob (const void *ap, cons
 static htab_t
 tyscm_type_map (struct type *type)
 {
-  struct objfile *objfile = TYPE_OBJFILE (type);
+  struct objfile *objfile = type->objfile_owner ();
   htab_t htab;
 
   if (objfile == NULL)
@@ -352,7 +351,7 @@ tyscm_copy_type_recursive (void **slot,
 {
   type_smob *t_smob = (type_smob *) *slot;
   htab_t copied_types = (htab_t) info;
-  struct objfile *objfile = TYPE_OBJFILE (t_smob->type);
+  struct objfile *objfile = t_smob->type->objfile_owner ();
   htab_t htab;
   eqable_gdb_smob **new_slot;
   type_smob t_smob_for_lookup;
@@ -387,20 +386,17 @@ static void
 save_objfile_types (struct objfile *objfile, void *datum)
 {
   htab_t htab = (htab_t) datum;
-  htab_t copied_types;
 
   if (!gdb_scheme_initialized)
     return;
 
-  copied_types = create_copied_types_hash (objfile);
+  htab_up copied_types = create_copied_types_hash (objfile);
 
   if (htab != NULL)
     {
-      htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types);
+      htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types.get ());
       htab_delete (htab);
     }
-
-  htab_delete (copied_types);
 }
 
 /* Administrivia for field smobs.  */
@@ -512,9 +508,9 @@ tyscm_field_smob_to_field (field_smob *f
   struct type *type = tyscm_field_smob_containing_type (f_smob);
 
   /* This should be non-NULL by construction.  */
-  gdb_assert (TYPE_FIELDS (type) != NULL);
+  gdb_assert (type->fields () != NULL);
 
-  return &TYPE_FIELD (type, f_smob->field_num);
+  return &type->field (f_smob->field_num);
 }
 
 /* Type smob accessors.  */
@@ -529,7 +525,7 @@ gdbscm_type_code (SCM self)
     = tyscm_get_type_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
   struct type *type = t_smob->type;
 
-  return scm_from_int (TYPE_CODE (type));
+  return scm_from_int (type->code ());
 }
 
 /* (type-fields <gdb:type>) -> list
@@ -560,7 +556,7 @@ gdbscm_type_fields (SCM self)
     containing_type_scm = tyscm_scm_from_type (containing_type);
 
   result = SCM_EOL;
-  for (i = 0; i < TYPE_NFIELDS (containing_type); ++i)
+  for (i = 0; i < containing_type->num_fields (); ++i)
     result = scm_cons (tyscm_make_field_smob (containing_type_scm, i), result);
 
   return scm_reverse_x (result, SCM_EOL);
@@ -577,10 +573,10 @@ gdbscm_type_tag (SCM self)
   struct type *type = t_smob->type;
   const char *tagname = nullptr;
 
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (type) == TYPE_CODE_UNION
-      || TYPE_CODE (type) == TYPE_CODE_ENUM)
-    tagname = TYPE_NAME (type);
+  if (type->code () == TYPE_CODE_STRUCT
+      || type->code () == TYPE_CODE_UNION
+      || type->code () == TYPE_CODE_ENUM)
+    tagname = type->name ();
 
   if (tagname == nullptr)
     return SCM_BOOL_F;
@@ -597,9 +593,9 @@ gdbscm_type_name (SCM self)
     = tyscm_get_type_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
   struct type *type = t_smob->type;
 
-  if (!TYPE_NAME (type))
+  if (!type->name ())
     return SCM_BOOL_F;
-  return gdbscm_scm_from_c_string (TYPE_NAME (type));
+  return gdbscm_scm_from_c_string (type->name ());
 }
 
 /* (type-print-name <gdb:type>) -> string
@@ -685,17 +681,17 @@ tyscm_get_composite (struct type *type)
 	}
 
       GDBSCM_HANDLE_GDB_EXCEPTION (exc);
-      if (TYPE_CODE (type) != TYPE_CODE_PTR
-	  && TYPE_CODE (type) != TYPE_CODE_REF)
+      if (type->code () != TYPE_CODE_PTR
+	  && type->code () != TYPE_CODE_REF)
 	break;
       type = TYPE_TARGET_TYPE (type);
     }
 
   /* If this is not a struct, union, or enum type, raise TypeError
      exception.  */
-  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
-      && TYPE_CODE (type) != TYPE_CODE_UNION
-      && TYPE_CODE (type) != TYPE_CODE_ENUM)
+  if (type->code () != TYPE_CODE_STRUCT
+      && type->code () != TYPE_CODE_UNION
+      && type->code () != TYPE_CODE_ENUM)
     return NULL;
 
   return type;
@@ -817,21 +813,25 @@ gdbscm_type_range (SCM self)
   /* Initialize these to appease GCC warnings.  */
   LONGEST low = 0, high = 0;
 
-  SCM_ASSERT_TYPE (TYPE_CODE (type) == TYPE_CODE_ARRAY
-		   || TYPE_CODE (type) == TYPE_CODE_STRING
-		   || TYPE_CODE (type) == TYPE_CODE_RANGE,
+  SCM_ASSERT_TYPE (type->code () == TYPE_CODE_ARRAY
+		   || type->code () == TYPE_CODE_STRING
+		   || type->code () == TYPE_CODE_RANGE,
 		   self, SCM_ARG1, FUNC_NAME, _("ranged type"));
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_ARRAY:
     case TYPE_CODE_STRING:
-      low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
-      high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type));
-      break;
     case TYPE_CODE_RANGE:
-      low = TYPE_LOW_BOUND (type);
-      high = TYPE_HIGH_BOUND (type);
+      if (type->bounds ()->low.kind () == PROP_CONST)
+	low = type->bounds ()->low.const_val ();
+      else
+	low = 0;
+
+      if (type->bounds ()->high.kind () == PROP_CONST)
+	high = type->bounds ()->high.const_val ();
+      else
+	high = 0;
       break;
     }
 
@@ -969,7 +969,7 @@ gdbscm_type_num_fields (SCM self)
     gdbscm_out_of_range_error (FUNC_NAME, SCM_ARG1, self,
 			       _(not_composite_error));
 
-  return scm_from_long (TYPE_NFIELDS (type));
+  return scm_from_long (type->num_fields ());
 }
 
 /* (type-field <gdb:type> string) -> <gdb:field>
@@ -997,7 +997,7 @@ gdbscm_type_field (SCM self, SCM field_s
   {
     gdb::unique_xmalloc_ptr<char> field = gdbscm_scm_to_c_string (field_scm);
 
-    for (int i = 0; i < TYPE_NFIELDS (type); i++)
+    for (int i = 0; i < type->num_fields (); i++)
       {
 	const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
@@ -1039,7 +1039,7 @@ gdbscm_type_has_field_p (SCM self, SCM f
     gdb::unique_xmalloc_ptr<char> field
       = gdbscm_scm_to_c_string (field_scm);
 
-    for (int i = 0; i < TYPE_NFIELDS (type); i++)
+    for (int i = 0; i < type->num_fields (); i++)
       {
 	const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
@@ -1105,11 +1105,11 @@ gdbscm_type_next_field_x (SCM self)
   type = t_smob->type;
 
   SCM_ASSERT_TYPE (scm_is_signed_integer (progress,
-					  0, TYPE_NFIELDS (type)),
+					  0, type->num_fields ()),
 		   progress, SCM_ARG1, FUNC_NAME, _("integer"));
   field = scm_to_int (progress);
 
-  if (field < TYPE_NFIELDS (type))
+  if (field < type->num_fields ())
     {
       result = tyscm_make_field_smob (object, field);
       itscm_set_iterator_smob_progress_x (i_smob, scm_from_int (field + 1));
@@ -1147,8 +1147,8 @@ gdbscm_field_type (SCM self)
   struct field *field = tyscm_field_smob_to_field (f_smob);
 
   /* A field can have a NULL type in some situations.  */
-  if (FIELD_TYPE (*field))
-    return tyscm_scm_from_type (FIELD_TYPE (*field));
+  if (field->type ())
+    return tyscm_scm_from_type (field->type ());
   return SCM_BOOL_F;
 }
 
@@ -1163,7 +1163,7 @@ gdbscm_field_enumval (SCM self)
   struct field *field = tyscm_field_smob_to_field (f_smob);
   struct type *type = tyscm_field_smob_containing_type (f_smob);
 
-  SCM_ASSERT_TYPE (TYPE_CODE (type) == TYPE_CODE_ENUM,
+  SCM_ASSERT_TYPE (type->code () == TYPE_CODE_ENUM,
 		   self, SCM_ARG1, FUNC_NAME, _("enum type"));
 
   return scm_from_long (FIELD_ENUMVAL (*field));
@@ -1180,7 +1180,7 @@ gdbscm_field_bitpos (SCM self)
   struct field *field = tyscm_field_smob_to_field (f_smob);
   struct type *type = tyscm_field_smob_containing_type (f_smob);
 
-  SCM_ASSERT_TYPE (TYPE_CODE (type) != TYPE_CODE_ENUM,
+  SCM_ASSERT_TYPE (type->code () != TYPE_CODE_ENUM,
 		   self, SCM_ARG1, FUNC_NAME, _("non-enum type"));
 
   return scm_from_long (FIELD_BITPOS (*field));
@@ -1222,7 +1222,7 @@ gdbscm_field_baseclass_p (SCM self)
     = tyscm_get_field_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
   struct type *type = tyscm_field_smob_containing_type (f_smob);
 
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+  if (type->code () == TYPE_CODE_STRUCT)
     return scm_from_bool (f_smob->field_num < TYPE_N_BASECLASSES (type));
   return SCM_BOOL_F;
 }
@@ -1318,6 +1318,7 @@ static const scheme_integer_constant typ
   X (TYPE_CODE_METHODPTR),
   X (TYPE_CODE_MEMBERPTR),
   X (TYPE_CODE_REF),
+  X (TYPE_CODE_RVALUE_REF),
   X (TYPE_CODE_CHAR),
   X (TYPE_CODE_BOOL),
   X (TYPE_CODE_COMPLEX),
@@ -1505,11 +1506,16 @@ Internal function to assist the type fie
 
   block_keyword = scm_from_latin1_keyword ("block");
 
+  global_types_map = gdbscm_create_eqable_gsmob_ptr_map (tyscm_hash_type_smob,
+							 tyscm_eq_type_smob);
+}
+
+void _initialize_scm_type ();
+void
+_initialize_scm_type ()
+{
   /* Register an objfile "free" callback so we can properly copy types
      associated with the objfile when it's about to be deleted.  */
   tyscm_objfile_data_key
     = register_objfile_data_with_cleanup (save_objfile_types, NULL);
-
-  global_types_map = gdbscm_create_eqable_gsmob_ptr_map (tyscm_hash_type_smob,
-							 tyscm_eq_type_smob);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-utils.c ./gdb/guile/scm-utils.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-utils.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-utils.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* General utility routines for GDB/Scheme code.
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-value.c ./gdb/guile/scm-value.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/guile/scm-value.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/guile/scm-value.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Scheme interface to values.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,7 +34,7 @@
 
 /* The <gdb:value> smob.  */
 
-typedef struct _value_smob
+struct value_smob
 {
   /* This always appears first.  */
   gdb_smob base;
@@ -42,8 +42,8 @@ typedef struct _value_smob
   /* Doubly linked list of values in values_in_scheme.
      IWBN to use a chained_gdb_smob instead, which is doable, it just requires
      a bit more casting than normal.  */
-  struct _value_smob *next;
-  struct _value_smob *prev;
+  value_smob *next;
+  value_smob *prev;
 
   struct value *value;
 
@@ -55,7 +55,7 @@ typedef struct _value_smob
   SCM address;
   SCM type;
   SCM dynamic_type;
-} value_smob;
+};
 
 static const char value_smob_name[] = "gdb:value";
 
@@ -261,6 +261,24 @@ vlscm_scm_from_value (struct value *valu
   return v_scm;
 }
 
+/* Create a new <gdb:value> object that encapsulates VALUE.
+   The value is not released from the all_values chain.  */
+
+SCM
+vlscm_scm_from_value_no_release (struct value *value)
+{
+  /* N.B. It's important to not cause any side-effects until we know the
+     conversion worked.  */
+  SCM v_scm = vlscm_make_value_smob ();
+  value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (v_scm);
+
+  value_incref (value);
+  v_smob->value = value;
+  vlscm_remember_scheme_value (v_smob);
+
+  return v_scm;
+}
+
 /* Returns the <gdb:value> object in SELF.
    Throws an exception if SELF is not a <gdb:value> object.  */
 
@@ -452,23 +470,74 @@ gdbscm_value_referenced_value (SCM self)
 
       struct value *res_val;
 
-      switch (TYPE_CODE (check_typedef (value_type (value))))
-        {
-        case TYPE_CODE_PTR:
-          res_val = value_ind (value);
-          break;
-        case TYPE_CODE_REF:
-          res_val = coerce_ref (value);
-          break;
-        default:
-          error (_("Trying to get the referenced value from a value which is"
+      switch (check_typedef (value_type (value))->code ())
+	{
+	case TYPE_CODE_PTR:
+	  res_val = value_ind (value);
+	  break;
+	case TYPE_CODE_REF:
+	case TYPE_CODE_RVALUE_REF:
+	  res_val = coerce_ref (value);
+	  break;
+	default:
+	  error (_("Trying to get the referenced value from a value which is"
 		   " neither a pointer nor a reference"));
-        }
+	}
 
       return vlscm_scm_from_value (res_val);
     });
 }
 
+static SCM
+gdbscm_reference_value (SCM self, enum type_code refcode)
+{
+  value_smob *v_smob
+    = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
+  struct value *value = v_smob->value;
+
+  return gdbscm_wrap ([=]
+    {
+      scoped_value_mark free_values;
+
+      struct value *res_val = value_ref (value, refcode);
+      return vlscm_scm_from_value (res_val);
+    });
+}
+
+/* (value-reference-value <gdb:value>) -> <gdb:value> */
+
+static SCM
+gdbscm_value_reference_value (SCM self)
+{
+  return gdbscm_reference_value (self, TYPE_CODE_REF);
+}
+
+/* (value-rvalue-reference-value <gdb:value>) -> <gdb:value> */
+
+static SCM
+gdbscm_value_rvalue_reference_value (SCM self)
+{
+  return gdbscm_reference_value (self, TYPE_CODE_RVALUE_REF);
+}
+
+/* (value-const-value <gdb:value>) -> <gdb:value> */
+
+static SCM
+gdbscm_value_const_value (SCM self)
+{
+  value_smob *v_smob
+    = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
+  struct value *value = v_smob->value;
+
+  return gdbscm_wrap ([=]
+    {
+      scoped_value_mark free_values;
+
+      struct value *res_val = make_cv_value (1, 0, value);
+      return vlscm_scm_from_value (res_val);
+    });
+}
+
 /* (value-type <gdb:value>) -> <gdb:type> */
 
 static SCM
@@ -505,12 +574,12 @@ gdbscm_value_dynamic_type (SCM self)
       type = value_type (value);
       type = check_typedef (type);
 
-      if (((TYPE_CODE (type) == TYPE_CODE_PTR)
-	   || (TYPE_CODE (type) == TYPE_CODE_REF))
-	  && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
+      if (((type->code () == TYPE_CODE_PTR)
+	   || (type->code () == TYPE_CODE_REF))
+	  && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT))
 	{
 	  struct value *target;
-	  int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
+	  int was_pointer = type->code () == TYPE_CODE_PTR;
 
 	  if (was_pointer)
 	    target = value_ind (value);
@@ -526,7 +595,7 @@ gdbscm_value_dynamic_type (SCM self)
 		type = lookup_lvalue_reference_type (type);
 	    }
 	}
-      else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
+      else if (type->code () == TYPE_CODE_STRUCT)
 	type = value_rtti_type (value, NULL, NULL, NULL);
       else
 	{
@@ -625,7 +694,7 @@ gdbscm_value_field (SCM self, SCM field_
 
       struct value *tmp = v_smob->value;
 
-      struct value *res_val = value_struct_elt (&tmp, NULL, field.get (), NULL,
+      struct value *res_val = value_struct_elt (&tmp, {}, field.get (), NULL,
 						"struct/class/union");
 
       return vlscm_scm_from_value (res_val);
@@ -653,7 +722,7 @@ gdbscm_value_subscript (SCM self, SCM in
       struct value *index
 	= vlscm_convert_value_from_scheme (FUNC_NAME, SCM_ARG2, index_scm,
 					   &except_scm,
-					   get_type_arch (type),
+					   type->arch (),
 					   current_language);
       if (index == NULL)
 	return except_scm;
@@ -664,8 +733,8 @@ gdbscm_value_subscript (SCM self, SCM in
 	 a subscript.  */
       struct value *tmp = coerce_ref (value);
       struct type *tmp_type = check_typedef (value_type (tmp));
-      if (TYPE_CODE (tmp_type) != TYPE_CODE_ARRAY
-	  && TYPE_CODE (tmp_type) != TYPE_CODE_PTR)
+      if (tmp_type->code () != TYPE_CODE_ARRAY
+	  && tmp_type->code () != TYPE_CODE_PTR)
 	error (_("Cannot subscript requested type"));
 
       struct value *res_val = value_subscript (tmp, value_as_long (index));
@@ -697,7 +766,7 @@ gdbscm_value_call (SCM self, SCM args)
     }
 
   GDBSCM_HANDLE_GDB_EXCEPTION (exc);
-  SCM_ASSERT_TYPE (TYPE_CODE (ftype) == TYPE_CODE_FUNC, self,
+  SCM_ASSERT_TYPE (ftype->code () == TYPE_CODE_FUNC, self,
 		   SCM_ARG1, FUNC_NAME,
 		   _("function (value of TYPE_CODE_FUNC)"));
 
@@ -778,11 +847,11 @@ gdbscm_value_to_bytevector (SCM self)
 static int
 is_intlike (struct type *type, int ptr_ok)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_INT
-	  || TYPE_CODE (type) == TYPE_CODE_ENUM
-	  || TYPE_CODE (type) == TYPE_CODE_BOOL
-	  || TYPE_CODE (type) == TYPE_CODE_CHAR
-	  || (ptr_ok && TYPE_CODE (type) == TYPE_CODE_PTR));
+  return (type->code () == TYPE_CODE_INT
+	  || type->code () == TYPE_CODE_ENUM
+	  || type->code () == TYPE_CODE_BOOL
+	  || type->code () == TYPE_CODE_CHAR
+	  || (ptr_ok && type->code () == TYPE_CODE_PTR));
 }
 
 /* (value->bool <gdb:value>) -> boolean
@@ -815,7 +884,7 @@ gdbscm_value_to_bool (SCM self)
 
   try
     {
-      if (TYPE_CODE (type) == TYPE_CODE_PTR)
+      if (type->code () == TYPE_CODE_PTR)
 	l = value_as_address (value);
       else
 	l = value_as_long (value);
@@ -859,7 +928,7 @@ gdbscm_value_to_integer (SCM self)
 
   try
     {
-      if (TYPE_CODE (type) == TYPE_CODE_PTR)
+      if (type->code () == TYPE_CODE_PTR)
 	l = value_as_address (value);
       else
 	l = value_as_long (value);
@@ -870,7 +939,7 @@ gdbscm_value_to_integer (SCM self)
     }
 
   GDBSCM_HANDLE_GDB_EXCEPTION (exc);
-  if (TYPE_UNSIGNED (type))
+  if (type->is_unsigned ())
     return gdbscm_scm_from_ulongest (l);
   else
     return gdbscm_scm_from_longest (l);
@@ -902,7 +971,7 @@ gdbscm_value_to_real (SCM self)
     }
 
   GDBSCM_HANDLE_GDB_EXCEPTION (exc);
-  SCM_ASSERT_TYPE (is_intlike (type, 0) || TYPE_CODE (type) == TYPE_CODE_FLT,
+  SCM_ASSERT_TYPE (is_intlike (type, 0) || type->code () == TYPE_CODE_FLT,
 		   self, SCM_ARG1, FUNC_NAME, _("number"));
 
   try
@@ -912,7 +981,7 @@ gdbscm_value_to_real (SCM self)
 	  d = target_float_to_host_double (value_contents (value), type);
 	  check = value_from_host_double (type, d);
 	}
-      else if (TYPE_UNSIGNED (type))
+      else if (type->is_unsigned ())
 	{
 	  d = (ULONGEST) value_as_long (value);
 	  check = value_from_ulongest (type, (ULONGEST) d);
@@ -1095,7 +1164,7 @@ gdbscm_value_to_lazy_string (SCM self, S
       type = value_type (value);
       realtype = check_typedef (type);
 
-      switch (TYPE_CODE (realtype))
+      switch (realtype->code ())
 	{
 	case TYPE_CODE_ARRAY:
 	  {
@@ -1333,6 +1402,21 @@ For example, for a value which is a refe
 value-dereference will result in a value of type 'int' while\n\
 value-referenced-value will result in a value of type 'int *'." },
 
+  { "value-reference-value", 1, 0, 0,
+    as_a_scm_t_subr (gdbscm_value_reference_value),
+    "\
+Return a <gdb:value> object which is a reference to the given value." },
+
+  { "value-rvalue-reference-value", 1, 0, 0,
+    as_a_scm_t_subr (gdbscm_value_rvalue_reference_value),
+    "\
+Return a <gdb:value> object which is an rvalue reference to the given value." },
+
+  { "value-const-value", 1, 0, 0,
+    as_a_scm_t_subr (gdbscm_value_const_value),
+    "\
+Return a <gdb:value> object which is a 'const' version of the given value." },
+
   { "value-field", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_field),
     "\
 Return the specified field of the value.\n\
@@ -1386,8 +1470,8 @@ characters to be replaced with \"?\".  T
 If LENGTH is provided, only fetch string to the length provided.\n\
 \n\
   Arguments: <gdb:value>\n\
-             [#:encoding encoding] [#:errors \"error\"|\"substitute\"]\n\
-             [#:length length]" },
+	     [#:encoding encoding] [#:errors \"error\"|\"substitute\"]\n\
+	     [#:length length]" },
 
   { "value->lazy-string", 1, 0, 1,
     as_a_scm_t_subr (gdbscm_value_to_lazy_string),
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/h8300-tdep.c ./gdb/h8300-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/h8300-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/h8300-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-machine dependent code for Renesas H8/300, for GDB.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,7 @@
 #include "gdbcore.h"
 #include "objfiles.h"
 #include "dis-asm.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "frame-base.h"
 #include "frame-unwind.h"
 
@@ -178,10 +178,10 @@ h8300_is_argument_spill (struct gdbarch
       if (IS_MOVB_Rn24_SP (read_memory_unsigned_integer (pc + 2,
 							 2, byte_order)))
 	{
-	  LONGEST disp = read_memory_integer (pc + 4, 4, byte_order);
+	  ULONGEST disp = read_memory_unsigned_integer (pc + 4, 4, byte_order);
 
 	  /* ... and d:24 is negative.  */
-	  if (disp < 0 && disp > 0xffffff)
+	  if ((disp & 0x00800000) != 0)
 	    return 8;
 	}
     }
@@ -197,10 +197,10 @@ h8300_is_argument_spill (struct gdbarch
       if (IS_MOVW_Rn24_SP (read_memory_unsigned_integer (pc + 2,
 							 2, byte_order)))
 	{
-	  LONGEST disp = read_memory_integer (pc + 4, 4, byte_order);
+	  ULONGEST disp = read_memory_unsigned_integer (pc + 4, 4, byte_order);
 
 	  /* ... and d:24 is negative.  */
-	  if (disp < 0 && disp > 0xffffff)
+	  if ((disp & 0x00800000) != 0)
 	    return 8;
 	}
     }
@@ -219,10 +219,11 @@ h8300_is_argument_spill (struct gdbarch
 	{
 	  if (IS_MOVL_Rn24_SP (read_memory_integer (pc + 4, 2, byte_order)))
 	    {
-	      LONGEST disp = read_memory_integer (pc + 6, 4, byte_order);
+	      ULONGEST disp = read_memory_unsigned_integer (pc + 6, 4,
+							    byte_order);
 
 	      /* ... and d:24 is negative.  */
-	      if (disp < 0 && disp > 0xffffff)
+	      if ((disp & 0x00800000) != 0)
 		return 10;
 	    }
 	}
@@ -293,7 +294,7 @@ h8300_analyze_prologue (struct gdbarch *
       cache->saved_regs[E_FP_REGNUM] = 0;
       pc += 4;
       if (pc >= current_pc)
-        return current_pc;
+	return current_pc;
       op = read_memory_unsigned_integer (pc, 2, byte_order);
       if (IS_MOV_SP_FP (op))
 	{
@@ -331,7 +332,7 @@ h8300_analyze_prologue (struct gdbarch *
 	  pc += 2;
 	}
       else if (IS_MOV_IMM_Rn (op))
-        {
+	{
 	  int offset = read_memory_integer (pc + 2, 2, byte_order);
 	  regno = op & 0x000f;
 	  op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
@@ -375,7 +376,7 @@ h8300_analyze_prologue (struct gdbarch *
 	  if (IS_PUSH (op1))
 	    {
 	      /* Since the prefix is 0x01x0, this is not a simple pushm but a
-	         stm.l reglist,@-sp */
+		 stm.l reglist,@-sp */
 	      i = ((op & 0x0030) >> 4) + 1;
 	      regno = op1 & 0x000f;
 	      for (; i > 0; regno++, --i)
@@ -396,7 +397,7 @@ h8300_analyze_prologue (struct gdbarch *
      This could also be an initializing store from non-prologue code,
      but I don't think there's any harm in skipping that.  */
   while ((spill_size = h8300_is_argument_spill (gdbarch, pc)) > 0
-         && pc + spill_size <= current_pc)
+	 && pc + spill_size <= current_pc)
     pc += spill_size;
 
   return pc;
@@ -437,12 +438,12 @@ h8300_frame_cache (struct frame_info *th
   if (!cache->uses_fp)
     {
       /* We didn't find a valid frame, which means that CACHE->base
-         currently holds the frame pointer for our calling frame.  If
-         we're at the start of a function, or somewhere half-way its
-         prologue, the function's frame probably hasn't been fully
-         setup yet.  Try to reconstruct the base address for the stack
-         frame by looking at the stack pointer.  For truly "frameless"
-         functions this might work too.  */
+	 currently holds the frame pointer for our calling frame.  If
+	 we're at the start of a function, or somewhere half-way its
+	 prologue, the function's frame probably hasn't been fully
+	 setup yet.  Try to reconstruct the base address for the stack
+	 frame by looking at the stack pointer.  For truly "frameless"
+	 functions this might work too.  */
 
       cache->base = get_frame_register_unsigned (this_frame, E_SP_REGNUM)
 		    + cache->sp_offset;
@@ -494,12 +495,13 @@ h8300_frame_prev_register (struct frame_
   if (regnum < gdbarch_num_regs (gdbarch)
       && cache->saved_regs[regnum] != -1)
     return frame_unwind_got_memory (this_frame, regnum,
-                                    cache->saved_regs[regnum]);
+				    cache->saved_regs[regnum]);
 
   return frame_unwind_got_register (this_frame, regnum, regnum);
 }
 
 static const struct frame_unwind h8300_frame_unwind = {
+  "h8300 prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   h8300_frame_this_id,
@@ -535,8 +537,8 @@ h8300_skip_prologue (struct gdbarch *gdb
       /* Found a function.  */
       sal = find_pc_line (func_addr, 0);
       if (sal.end && sal.end < func_end)
-        /* Found a line number, use it as end of prologue.  */
-        return sal.end;
+	/* Found a line number, use it as end of prologue.  */
+	return sal.end;
 
       /* No useable line symbol.  Use prologue parsing method.  */
       h8300_init_frame_cache (gdbarch, &cache);
@@ -669,15 +671,15 @@ h8300_push_dummy_call (struct gdbarch *g
 	      stack_offset += padded_len;
 
 	      /* That's right --- even though we passed the argument
-	         on the stack, we consume the registers anyway!  Love
-	         me, love my dog.  */
+		 on the stack, we consume the registers anyway!  Love
+		 me, love my dog.  */
 	      reg += padded_len / wordsize;
 	    }
 	  else
 	    {
 	      /* Heavens to Betsy --- it's really going in registers!
-	         Note that on the h8/300s, there are gaps between the
-	         registers in the register file.  */
+		 Note that on the h8/300s, there are gaps between the
+		 registers in the register file.  */
 	      int offset;
 
 	      for (offset = 0; offset < padded_len; offset += wordsize)
@@ -740,7 +742,7 @@ h8300_extract_return_value (struct type
       store_unsigned_integer (valbuf + 2, 2, byte_order, c);
       break;
     case 8:			/* long long is now 8 bytes.  */
-      if (TYPE_CODE (type) == TYPE_CODE_INT)
+      if (type->code () == TYPE_CODE_INT)
 	{
 	  regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &addr);
 	  c = read_memory_unsigned_integer ((CORE_ADDR) addr, len, byte_order);
@@ -771,7 +773,7 @@ h8300h_extract_return_value (struct type
       store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, c);
       break;
     case 8:			/* long long is now 8 bytes.  */
-      if (TYPE_CODE (type) == TYPE_CODE_INT)
+      if (type->code () == TYPE_CODE_INT)
 	{
 	  regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &c);
 	  store_unsigned_integer (valbuf, 4, byte_order, c);
@@ -792,8 +794,8 @@ h8300_use_struct_convention (struct type
   /* Types of 1, 2 or 4 bytes are returned in R0/R1, everything else on the
      stack.  */
 
-  if (TYPE_CODE (value_type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (value_type) == TYPE_CODE_UNION)
+  if (value_type->code () == TYPE_CODE_STRUCT
+      || value_type->code () == TYPE_CODE_UNION)
     return 1;
   return !(TYPE_LENGTH (value_type) == 1
 	   || TYPE_LENGTH (value_type) == 2
@@ -805,14 +807,14 @@ h8300h_use_struct_convention (struct typ
 {
   /* Types of 1, 2 or 4 bytes are returned in R0, INT types of 8 bytes are
      returned in R0/R1, everything else on the stack.  */
-  if (TYPE_CODE (value_type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (value_type) == TYPE_CODE_UNION)
+  if (value_type->code () == TYPE_CODE_STRUCT
+      || value_type->code () == TYPE_CODE_UNION)
     return 1;
   return !(TYPE_LENGTH (value_type) == 1
 	   || TYPE_LENGTH (value_type) == 2
 	   || TYPE_LENGTH (value_type) == 4
 	   || (TYPE_LENGTH (value_type) == 8
-	       && TYPE_CODE (value_type) == TYPE_CODE_INT));
+	       && value_type->code () == TYPE_CODE_INT));
 }
 
 /* Function: store_return_value
@@ -1377,8 +1379,9 @@ h8300_gdbarch_init (struct gdbarch_info
 
 }
 
+void _initialize_h8300_tdep ();
 void
-_initialize_h8300_tdep (void)
+_initialize_h8300_tdep ()
 {
   register_gdbarch_init (bfd_arch_h8300, h8300_gdbarch_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-bsd-tdep.c ./gdb/hppa-bsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-bsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-bsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for HP PA-RISC BSD's.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,7 +26,7 @@
 
 #include "hppa-tdep.h"
 #include "hppa-bsd-tdep.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "solib-svr4.h"
 
 static CORE_ADDR
@@ -64,8 +64,8 @@ hppabsd_find_global_pointer (struct gdba
 
       if (sec < faddr_sec->objfile->sections_end)
 	{
-	  CORE_ADDR addr = obj_section_addr (sec);
-	  CORE_ADDR endaddr = obj_section_endaddr (sec);
+	  CORE_ADDR addr = sec->addr ();
+	  CORE_ADDR endaddr = sec->endaddr ();
 
 	  while (addr < endaddr)
 	    {
@@ -87,8 +87,7 @@ hppabsd_find_global_pointer (struct gdba
 		     we have to do it ourselves.  */
 		  pltgot = extract_unsigned_integer (buf, sizeof buf,
 						     byte_order);
-		  pltgot += ANOFFSET (sec->objfile->section_offsets,
-				      SECT_OFF_TEXT (sec->objfile));
+		  pltgot += sec->objfile->text_section_offset ();
 
 		  return pltgot;
 		}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-bsd-tdep.h ./gdb/hppa-bsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-bsd-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-bsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for HP PA-RISC BSD's.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-linux-nat.c ./gdb/hppa-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Functions specific to running GDB native on HPPA running GNU/Linux.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -281,7 +281,7 @@ hppa_linux_nat_target::fetch_registers (
       for (regno = 0;
 	   regno < gdbarch_num_regs (regcache->arch ());
 	   regno++)
-        fetch_register (regcache, regno);
+	fetch_register (regcache, regno);
     }
   else 
     {
@@ -384,8 +384,9 @@ fill_fpregset (const struct regcache *re
    }
 }
 
+void _initialize_hppa_linux_nat ();
 void
-_initialize_hppa_linux_nat (void)
+_initialize_hppa_linux_nat ()
 {
   /* Register the target.  */
   linux_target = &the_hppa_linux_nat_target;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-linux-offsets.h ./gdb/hppa-linux-offsets.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-linux-offsets.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-linux-offsets.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Register offsets for HPPA running GNU/Linux.
 
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
+   Copyright (C) 2007-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-linux-tdep.c ./gdb/hppa-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux running on PA-RISC, for GDB.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,7 +26,7 @@
 #include "glibc-tdep.h"
 #include "frame-unwind.h"
 #include "trad-frame.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "value.h"
 #include "regset.h"
 #include "regcache.h"
@@ -88,8 +88,8 @@ static struct insn_pattern hppa_sigtramp
    matched.  */
 static int
 insns_match_pattern (struct gdbarch *gdbarch, CORE_ADDR pc,
-                     struct insn_pattern *pattern,
-                     unsigned int *insn)
+		     struct insn_pattern *pattern,
+		     unsigned int *insn)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   int i;
@@ -102,9 +102,9 @@ insns_match_pattern (struct gdbarch *gdb
       target_read_memory (npc, buf, 4);
       insn[i] = extract_unsigned_integer (buf, 4, byte_order);
       if ((insn[i] & pattern[i].mask) == pattern[i].data)
-        npc += 4;
+	npc += 4;
       else
-        return 0;
+	return 0;
     }
   return 1;
 }
@@ -158,7 +158,7 @@ hppa_linux_sigtramp_find_sigcontext (str
       if (insns_match_pattern (gdbarch, sp + pcoffs[attempt],
 			       hppa_sigtramp, dummy))
 	{
-          offs = sfoffs[attempt];
+	  offs = sfoffs[attempt];
 	  break;
 	}
     }
@@ -174,9 +174,7 @@ hppa_linux_sigtramp_find_sigcontext (str
 	  sp = pc - pcoffs[attempt];
 	}
       else
-      {
-        return 0;
-      }
+	return 0;
     }
 
   /* sp + sfoffs[try] points to a struct rt_sigframe, which contains
@@ -191,7 +189,7 @@ hppa_linux_sigtramp_find_sigcontext (str
 struct hppa_linux_sigtramp_unwind_cache
 {
   CORE_ADDR base;
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 static struct hppa_linux_sigtramp_unwind_cache *
@@ -227,13 +225,13 @@ hppa_linux_sigtramp_frame_unwind_cache (
   scptr += 4;
 
   /* GR[0] is the psw.  */
-  info->saved_regs[HPPA_IPSW_REGNUM].addr = scptr;
+  info->saved_regs[HPPA_IPSW_REGNUM].set_addr (scptr);
   scptr += 4;
 
   /* General registers.  */
   for (i = 1; i < 32; i++)
     {
-      info->saved_regs[HPPA_R0_REGNUM + i].addr = scptr;
+      info->saved_regs[HPPA_R0_REGNUM + i].set_addr (scptr);
       scptr += 4;
     }
 
@@ -245,24 +243,24 @@ hppa_linux_sigtramp_frame_unwind_cache (
 
   for (i = 4; i < 32; i++)
     {
-      info->saved_regs[HPPA_FP0_REGNUM + (i * 2)].addr = scptr;
+      info->saved_regs[HPPA_FP0_REGNUM + (i * 2)].set_addr (scptr);
       scptr += 4;
-      info->saved_regs[HPPA_FP0_REGNUM + (i * 2) + 1].addr = scptr;
+      info->saved_regs[HPPA_FP0_REGNUM + (i * 2) + 1].set_addr (scptr);
       scptr += 4;
     }
 
   /* IASQ/IAOQ.  */
-  info->saved_regs[HPPA_PCSQ_HEAD_REGNUM].addr = scptr;
+  info->saved_regs[HPPA_PCSQ_HEAD_REGNUM].set_addr (scptr);
   scptr += 4;
-  info->saved_regs[HPPA_PCSQ_TAIL_REGNUM].addr = scptr;
+  info->saved_regs[HPPA_PCSQ_TAIL_REGNUM].set_addr (scptr);
   scptr += 4;
 
-  info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].addr = scptr;
+  info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_addr (scptr);
   scptr += 4;
-  info->saved_regs[HPPA_PCOQ_TAIL_REGNUM].addr = scptr;
+  info->saved_regs[HPPA_PCOQ_TAIL_REGNUM].set_addr (scptr);
   scptr += 4;
 
-  info->saved_regs[HPPA_SAR_REGNUM].addr = scptr;
+  info->saved_regs[HPPA_SAR_REGNUM].set_addr (scptr);
 
   info->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
 
@@ -311,6 +309,7 @@ hppa_linux_sigtramp_frame_sniffer (const
 }
 
 static const struct frame_unwind hppa_linux_sigtramp_frame_unwind = {
+  "hppa linux sigtramp",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   hppa_linux_sigtramp_frame_this_id,
@@ -373,8 +372,8 @@ hppa_linux_find_global_pointer (struct g
 	{
 	  CORE_ADDR addr, endaddr;
 
-	  addr = obj_section_addr (osect);
-	  endaddr = obj_section_endaddr (osect);
+	  addr = osect->addr ();
+	  endaddr = osect->endaddr ();
 
 	  while (addr < endaddr)
 	    {
@@ -489,7 +488,7 @@ hppa_linux_init_abi (struct gdbarch_info
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 0);
 
   /* GNU/Linux is always ELF.  */
   tdep->is_elf = 1;
@@ -523,11 +522,12 @@ hppa_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);
 }
 
+void _initialize_hppa_linux_tdep ();
 void
-_initialize_hppa_linux_tdep (void)
+_initialize_hppa_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_LINUX,
 			  hppa_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-nbsd-nat.c ./gdb/hppa-nbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-nbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-nbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,235 +0,0 @@
-/* Native-dependent code for NetBSD/hppa.
-
-   Copyright (C) 2008-2020 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 "inferior.h"
-#include "regcache.h"
-
-#include <sys/types.h>
-#include <sys/ptrace.h>
-#include <machine/reg.h>
-
-#include "hppa-tdep.h"
-#include "inf-ptrace.h"
-
-#include "nbsd-nat.h"
-
-class hppa_nbsd_nat_target final : public nbsd_nat_target
-{
-  void fetch_registers (struct regcache *, int) override;
-  void store_registers (struct regcache *, int) override;
-};
-
-static hppa_nbsd_nat_target the_hppa_nbsd_nat_target;
-
-static int
-hppanbsd_gregset_supplies_p (int regnum)
-{
-  return ((regnum >= HPPA_R0_REGNUM && regnum <= HPPA_R31_REGNUM) ||
-          (regnum >= HPPA_SAR_REGNUM && regnum <= HPPA_PCSQ_TAIL_REGNUM) ||
-          regnum == HPPA_IPSW_REGNUM ||
-	  (regnum >= HPPA_SR4_REGNUM && regnum <= HPPA_SR4_REGNUM + 5));
-}
-
-static int
-hppanbsd_fpregset_supplies_p (int regnum)
-{
-  return (regnum >= HPPA_FP0_REGNUM && regnum <= HPPA_FP31R_REGNUM);
-}
-
-/* Supply the general-purpose registers stored in GREGS to REGCACHE.  */
-
-static void
-hppanbsd_supply_gregset (struct regcache *regcache, const void *gregs)
-{
-  const char *regs = gregs;
-  const int *r = gregs;
-  int regnum;
-
-  for (regnum = HPPA_R1_REGNUM; regnum <= HPPA_R31_REGNUM; regnum++)
-    regcache->raw_supply (regnum, regs + regnum * 4);
-
-  regcache->raw_supply (HPPA_SAR_REGNUM, regs + 32 * 4);
-  regcache->raw_supply (HPPA_PCSQ_HEAD_REGNUM, regs + 33 * 4);
-  regcache->raw_supply (HPPA_PCSQ_TAIL_REGNUM, regs + 34 * 4);
-  regcache->raw_supply (HPPA_PCOQ_HEAD_REGNUM, regs + 35 * 4);
-  regcache->raw_supply (HPPA_PCOQ_TAIL_REGNUM, regs + 36 * 4);
-  regcache->raw_supply (HPPA_IPSW_REGNUM, regs);
-  regcache->raw_supply (HPPA_SR4_REGNUM, regs + 41 * 4);
-  regcache->raw_supply (HPPA_SR4_REGNUM + 1, regs + 37 * 4);
-  regcache->raw_supply (HPPA_SR4_REGNUM + 2, regs + 38 * 4);
-  regcache->raw_supply (HPPA_SR4_REGNUM + 3, regs + 39 * 4);
-  regcache->raw_supply (HPPA_SR4_REGNUM + 4, regs + 40 * 4);
-}
-
-/* Supply the floating-point registers stored in FPREGS to REGCACHE.  */
-
-static void
-hppanbsd_supply_fpregset (struct regcache *regcache, const void *fpregs)
-{
-  const char *regs = fpregs;
-  int regnum;
-
-  for (regnum = HPPA_FP0_REGNUM; regnum <= HPPA_FP31R_REGNUM;
-       regnum += 2, regs += 8)
-    {
-      regcache->raw_supply (regnum, regs);
-      regcache->raw_supply (regnum + 1, regs + 4);
-    }
-}
-
-/* Collect the general-purpose registers from REGCACHE and store them
-   in GREGS.  */
-
-static void
-hppanbsd_collect_gregset (const struct regcache *regcache,
-			  void *gregs, int regnum)
-{
-  char *regs = gregs;
-  int *r = gregs;
-  int i;
-
-  for (i = HPPA_R1_REGNUM; i <= HPPA_R31_REGNUM; i++)
-    {
-      if (regnum == -1 || regnum == i)
-	regcache->raw_collect (i, regs + i * 4);
-    }
-
-  if (regnum == -1 || regnum == HPPA_IPSW_REGNUM)
-    regcache->raw_collect (HPPA_IPSW_REGNUM, regs);
-  if (regnum == -1 || regnum == HPPA_PCOQ_HEAD_REGNUM)
-    regcache->raw_collect (HPPA_PCOQ_HEAD_REGNUM, regs + 35 * 4);
-  if (regnum == -1 || regnum == HPPA_PCOQ_TAIL_REGNUM)
-    regcache->raw_collect (HPPA_PCOQ_TAIL_REGNUM, regs + 36 * 4);
-
-  if (regnum == -1 || regnum == HPPA_SAR_REGNUM)
-    regcache->raw_collect (HPPA_SAR_REGNUM, regs + 32 * 4);
-  if (regnum == -1 || regnum == HPPA_PCSQ_HEAD_REGNUM)
-    regcache->raw_collect (HPPA_PCSQ_HEAD_REGNUM, regs + 33 * 4);
-  if (regnum == -1 || regnum == HPPA_PCSQ_TAIL_REGNUM)
-    regcache->raw_collect (HPPA_PCSQ_TAIL_REGNUM, regs + 34 * 4);
-  if (regnum == -1 || regnum == HPPA_PCOQ_HEAD_REGNUM)
-    regcache->raw_collect (HPPA_PCOQ_HEAD_REGNUM, regs + 35 * 4);
-  if (regnum == -1 || regnum == HPPA_PCOQ_TAIL_REGNUM)
-    regcache->raw_collect (HPPA_PCOQ_TAIL_REGNUM, regs + 36 * 4);
-  if (regnum == -1 || regnum == HPPA_IPSW_REGNUM)
-    regcache->raw_collect (HPPA_IPSW_REGNUM, regs);
-  if (regnum == -1 || regnum == HPPA_SR4_REGNUM)
-    regcache->raw_collect (HPPA_SR4_REGNUM, regs + 41 * 4);
-  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 1)
-    regcache->raw_collect (HPPA_SR4_REGNUM + 1, regs + 37 * 4);
-  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 2)
-    regcache->raw_collect (HPPA_SR4_REGNUM + 2, regs + 38 * 4);
-  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 3)
-    regcache->raw_collect (HPPA_SR4_REGNUM + 3, regs + 39 * 4);
-  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 4)
-    regcache->raw_collect (HPPA_SR4_REGNUM + 4, regs + 40 * 4);
-}
-
-/* Collect the floating-point registers from REGCACHE and store them
-   in FPREGS.  */
-
-static void
-hppanbsd_collect_fpregset (struct regcache *regcache,
-			  void *fpregs, int regnum)
-{
-  char *regs = fpregs;
-  int i;
-
-  for (i = HPPA_FP0_REGNUM; i <= HPPA_FP31R_REGNUM; i += 2, regs += 8)
-    {
-      if (regnum == -1 || regnum == i || regnum == i + 1)
-	{
-	  regcache->raw_collect (i, regs);
-	  regcache->raw_collect (i + 1, regs + 4);
-	}
-    }
-}
-
-
-/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
-   for all registers (including the floating-point registers).  */
-
-void
-hppa_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
-
-{
-  pid_t pid = regcache->ptid ().pid ();
-
-  if (regnum == -1 || hppanbsd_gregset_supplies_p (regnum))
-    {
-      struct reg regs;
-
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-	perror_with_name (_("Couldn't get registers"));
-
-      hppanbsd_supply_gregset (regcache, &regs);
-    }
-
-  if (regnum == -1 || hppanbsd_fpregset_supplies_p (regnum))
-    {
-      struct fpreg fpregs;
-
-      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-	perror_with_name (_("Couldn't get floating point status"));
-
-      hppanbsd_supply_fpregset (regcache, &fpregs);
-    }
-}
-
-/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
-   this for all registers (including the floating-point registers).  */
-
-void
-hppa_nbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
-{
-  pid_t pid = regcache->ptid ().pid ();
-
-  if (regnum == -1 || hppanbsd_gregset_supplies_p (regnum))
-    {
-      struct reg regs;
-
-      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-        perror_with_name (_("Couldn't get registers"));
-
-      hppanbsd_collect_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 || hppanbsd_fpregset_supplies_p (regnum))
-    {
-      struct fpreg fpregs;
-
-      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-	perror_with_name (_("Couldn't get floating point status"));
-
-      hppanbsd_collect_fpregset (regcache, &fpregs, regnum);
-
-      if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-	perror_with_name (_("Couldn't write floating point status"));
-    }
-}
-
-void
-_initialize_hppanbsd_nat (void)
-{
-  add_inf_child_target (&the_hppa_nbsd_nat_target);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-nbsd-tdep.c ./gdb/hppa-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-nbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-nbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,216 +0,0 @@
-/* Target-dependent code for NetBSD/hppa
-
-   Copyright (C) 2008-2020 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 "regcache.h"
-#include "regset.h"
-
-#include "trad-frame.h"
-#include "tramp-frame.h"
-
-#include "hppa-tdep.h"
-#include "hppa-bsd-tdep.h"
-#include "gdbarch.h"
-
-/* From <machine/mcontext.h>.  */
-static int hppanbsd_mc_reg_offset[] =
-{
-  /* r0 ... r31 */
-      -1,   1 * 4,   2 * 4,   3 * 4,
-   4 * 4,   5 * 4,   6 * 4,   7 * 4,
-   8 * 4,   9 * 4,  10 * 4,  11 * 4, 
-  12 * 4,  13 * 4,  14 * 4,  15 * 4,
-  16 * 4,  17 * 4,  18 * 4,  19 * 4,
-  20 * 4,  21 * 4,  22 * 4,  23 * 4,
-  24 * 4,  25 * 4,  26 * 4,  27 * 4,
-  28 * 4,  29 * 4,  30 * 4,  31 * 4,
-
-  32 * 4,	/* HPPA_SAR_REGNUM */
-  35 * 4,	/* HPPA_PCOQ_HEAD_REGNUM */
-  33 * 4,	/* HPPA_PCSQ_HEAD_REGNUM */
-  36 * 4,	/* HPPA_PCOQ_TAIL_REGNUM */
-  34 * 4,	/* HPPA_PCSQ_TAIL_REGNUM */
-  -1,		/* HPPA_EIEM_REGNUM */
-  -1,		/* HPPA_IIR_REGNUM */
-  -1,		/* HPPA_ISR_REGNUM */
-  -1,		/* HPPA_IOR_REGNUM */
-  0 * 4,	/* HPPA_IPSW_REGNUM */
-  -1,		/* spare? */
-  41 * 4,	/* HPPA_SR4_REGNUM */
-  37 * 4,	/* sr0 */
-  38 * 4,	/* sr1 */
-  39 * 4,	/* sr2 */
-  40 * 4,	/* sr3 */
-
-  /* more tbd */
-};
-
-static void hppanbsd_sigtramp_cache_init (const struct tramp_frame *,
-                                         struct frame_info *,
-                                         struct trad_frame_cache *,
-                                         CORE_ADDR);
-
-static const struct tramp_frame hppanbsd_sigtramp_si4 =
-{
-  SIGTRAMP_FRAME,
-  4,
-  {
-    { 0xc7d7c012, ULONGEST_MAX },	/*	bb,>=,n %arg3, 30, 1f		*/
-    { 0xd6e01c1e, ULONGEST_MAX },	/*	 depwi 0,31,2,%arg3		*/
-    { 0x0ee81093, ULONGEST_MAX },	/*	ldw 4(%arg3), %r19		*/
-    { 0x0ee01097, ULONGEST_MAX },	/*	ldw 0(%arg3), %arg3		*/
-			/* 1: 					*/
-    { 0xe8404000, ULONGEST_MAX },	/* 	blr %r0, %rp			*/
-    { 0xeae0c002, ULONGEST_MAX },	/*	bv,n %r0(%arg3)			*/
-    { 0x08000240, ULONGEST_MAX },	/*	 nop				*/
-
-    { 0x0803025a, ULONGEST_MAX },	/*	copy %r3, %arg0			*/
-    { 0x20200801, ULONGEST_MAX },	/*	ldil -40000000, %r1		*/
-    { 0xe420e008, ULONGEST_MAX },	/*	be,l 4(%sr7, %r1), %sr0, %r31	*/
-    { 0x34160268, ULONGEST_MAX },	/*	 ldi 134, %t1 ; SYS_setcontext	*/
-
-    { 0x081c025a, ULONGEST_MAX },	/*	copy ret0, %arg0		*/
-    { 0x20200801, ULONGEST_MAX },	/*	ldil -40000000, %r1		*/
-    { 0xe420e008, ULONGEST_MAX },	/*	be,l 4(%sr7, %r1), %sr0, %r31	*/
-    { 0x34160002, ULONGEST_MAX },	/*	 ldi 1, %t1 ; SYS_exit		*/
-    { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
-  },
-  hppanbsd_sigtramp_cache_init
-};
-
-
-static void
-hppanbsd_sigtramp_cache_init (const struct tramp_frame *self,
-                             struct frame_info *this_frame,
-                             struct trad_frame_cache *this_cache,
-                             CORE_ADDR func)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
-  CORE_ADDR base;
-  int *reg_offset;
-  int num_regs;
-  int i;
-
-  reg_offset = hppanbsd_mc_reg_offset;
-  num_regs = ARRAY_SIZE (hppanbsd_mc_reg_offset);
-
-  /* frame pointer */
-  base = sp - 0x280;
-  /* offsetof(struct sigframe_siginfo, sf_uc) = 128 */
-  base += 128;
-  /* offsetof(ucontext_t, uc_mcontext) == 40 */
-  base += 40;
-
-  for (i = 0; i < num_regs; i++)
-    if (reg_offset[i] != -1)
-      trad_frame_set_reg_addr (this_cache, i, base + reg_offset[i]);
-
-  /* Construct the frame ID using the function start.  */
-  trad_frame_set_id (this_cache, frame_id_build (sp, func));
-}
-
-/* Core file support.  */
-
-/* Sizeof `struct reg' in <machine/reg.h>.  */
-#define HPPANBSD_SIZEOF_GREGS	(44 * 4)
-
-static int hppanbsd_reg_offset[] =
-{
-  /* r0 ... r31 */
-      -1,   1 * 4,   2 * 4,   3 * 4,
-   4 * 4,   5 * 4,   6 * 4,   7 * 4,
-   8 * 4,   9 * 4,  10 * 4,  11 * 4, 
-  12 * 4,  13 * 4,  14 * 4,  15 * 4,
-  16 * 4,  17 * 4,  18 * 4,  19 * 4,
-  20 * 4,  21 * 4,  22 * 4,  23 * 4,
-  24 * 4,  25 * 4,  26 * 4,  27 * 4,
-  28 * 4,  29 * 4,  30 * 4,  31 * 4,
-
-  32 * 4,	/* HPPA_SAR_REGNUM */
-  35 * 4,	/* HPPA_PCOQ_HEAD_REGNUM */
-  33 * 4,	/* HPPA_PCSQ_HEAD_REGNUM */
-  36 * 4,	/* HPPA_PCOQ_TAIL_REGNUM */
-  34 * 4,	/* HPPA_PCSQ_TAIL_REGNUM */
-  -1,		/* HPPA_EIEM_REGNUM */
-  -1,		/* HPPA_IIR_REGNUM */
-  -1,		/* HPPA_ISR_REGNUM */
-  -1,		/* HPPA_IOR_REGNUM */
-  0 * 4,	/* HPPA_IPSW_REGNUM */
-};
-
-/* 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
-hppanbsd_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;
-
-  gdb_assert (len >= HPPANBSD_SIZEOF_GREGS);
-
-  for (i = 0; i < ARRAY_SIZE (hppanbsd_reg_offset); i++)
-    if (hppanbsd_reg_offset[i] != -1)
-      if (regnum == -1 || regnum == i)
-	regcache->raw_supply (i, regs + hppanbsd_reg_offset[i]);
-}
-
-/* NetBSD/hppa register set.  */
-
-static const struct regset hppanbsd_gregset =
-{
-  NULL,
-  hppanbsd_supply_gregset
-};
-
-/* Iterate over supported core file register note sections. */
-
-static void
-hppanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
-				       iterate_over_regset_sections_cb *cb,
-				       void *cb_data,
-				       const struct regcache *regcache)
-{
-  cb (".reg", HPPANBSD_SIZEOF_GREGS, HPPANBSD_SIZEOF_GREGS, &hppanbsd_gregset,
-      NULL, cb_data);
-}
-
-static void
-hppanbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  /* Obviously NetBSD is BSD-based.  */
-  hppabsd_init_abi (info, gdbarch);
-
-  /* Core file support.  */
-  set_gdbarch_iterate_over_regset_sections
-    (gdbarch, hppanbsd_iterate_over_regset_sections);
-
-  tramp_frame_prepend_unwinder (gdbarch, &hppanbsd_sigtramp_si4);
-}
-
-void
-_initialize_hppanbsd_tdep (void)
-{
-  gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_NETBSD,
-			  hppanbsd_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-netbsd-nat.c ./gdb/hppa-netbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-netbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/hppa-netbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,238 @@
+/* Native-dependent code for NetBSD/hppa.
+
+   Copyright (C) 2008-2021 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 "inferior.h"
+#include "regcache.h"
+
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <machine/reg.h>
+
+#include "hppa-tdep.h"
+#include "inf-ptrace.h"
+
+#include "netbsd-nat.h"
+
+class hppa_nbsd_nat_target final : public nbsd_nat_target
+{
+  void fetch_registers (struct regcache *, int) override;
+  void store_registers (struct regcache *, int) override;
+};
+
+static hppa_nbsd_nat_target the_hppa_nbsd_nat_target;
+
+static int
+hppanbsd_gregset_supplies_p (int regnum)
+{
+  return ((regnum >= HPPA_R0_REGNUM && regnum <= HPPA_R31_REGNUM) ||
+	  (regnum >= HPPA_SAR_REGNUM && regnum <= HPPA_PCSQ_TAIL_REGNUM) ||
+	  regnum == HPPA_IPSW_REGNUM ||
+	  (regnum >= HPPA_SR4_REGNUM && regnum <= HPPA_SR4_REGNUM + 5));
+}
+
+static int
+hppanbsd_fpregset_supplies_p (int regnum)
+{
+  return (regnum >= HPPA_FP0_REGNUM && regnum <= HPPA_FP31R_REGNUM);
+}
+
+/* Supply the general-purpose registers stored in GREGS to REGCACHE.  */
+
+static void
+hppanbsd_supply_gregset (struct regcache *regcache, const void *gregs)
+{
+  const char *regs = gregs;
+  const int *r = gregs;
+  int regnum;
+
+  for (regnum = HPPA_R1_REGNUM; regnum <= HPPA_R31_REGNUM; regnum++)
+    regcache->raw_supply (regnum, regs + regnum * 4);
+
+  regcache->raw_supply (HPPA_SAR_REGNUM, regs + 32 * 4);
+  regcache->raw_supply (HPPA_PCSQ_HEAD_REGNUM, regs + 33 * 4);
+  regcache->raw_supply (HPPA_PCSQ_TAIL_REGNUM, regs + 34 * 4);
+  regcache->raw_supply (HPPA_PCOQ_HEAD_REGNUM, regs + 35 * 4);
+  regcache->raw_supply (HPPA_PCOQ_TAIL_REGNUM, regs + 36 * 4);
+  regcache->raw_supply (HPPA_IPSW_REGNUM, regs);
+  regcache->raw_supply (HPPA_SR4_REGNUM, regs + 41 * 4);
+  regcache->raw_supply (HPPA_SR4_REGNUM + 1, regs + 37 * 4);
+  regcache->raw_supply (HPPA_SR4_REGNUM + 2, regs + 38 * 4);
+  regcache->raw_supply (HPPA_SR4_REGNUM + 3, regs + 39 * 4);
+  regcache->raw_supply (HPPA_SR4_REGNUM + 4, regs + 40 * 4);
+}
+
+/* Supply the floating-point registers stored in FPREGS to REGCACHE.  */
+
+static void
+hppanbsd_supply_fpregset (struct regcache *regcache, const void *fpregs)
+{
+  const char *regs = fpregs;
+  int regnum;
+
+  for (regnum = HPPA_FP0_REGNUM; regnum <= HPPA_FP31R_REGNUM;
+       regnum += 2, regs += 8)
+    {
+      regcache->raw_supply (regnum, regs);
+      regcache->raw_supply (regnum + 1, regs + 4);
+    }
+}
+
+/* Collect the general-purpose registers from REGCACHE and store them
+   in GREGS.  */
+
+static void
+hppanbsd_collect_gregset (const struct regcache *regcache,
+			  void *gregs, int regnum)
+{
+  char *regs = gregs;
+  int *r = gregs;
+  int i;
+
+  for (i = HPPA_R1_REGNUM; i <= HPPA_R31_REGNUM; i++)
+    {
+      if (regnum == -1 || regnum == i)
+	regcache->raw_collect (i, regs + i * 4);
+    }
+
+  if (regnum == -1 || regnum == HPPA_IPSW_REGNUM)
+    regcache->raw_collect (HPPA_IPSW_REGNUM, regs);
+  if (regnum == -1 || regnum == HPPA_PCOQ_HEAD_REGNUM)
+    regcache->raw_collect (HPPA_PCOQ_HEAD_REGNUM, regs + 35 * 4);
+  if (regnum == -1 || regnum == HPPA_PCOQ_TAIL_REGNUM)
+    regcache->raw_collect (HPPA_PCOQ_TAIL_REGNUM, regs + 36 * 4);
+
+  if (regnum == -1 || regnum == HPPA_SAR_REGNUM)
+    regcache->raw_collect (HPPA_SAR_REGNUM, regs + 32 * 4);
+  if (regnum == -1 || regnum == HPPA_PCSQ_HEAD_REGNUM)
+    regcache->raw_collect (HPPA_PCSQ_HEAD_REGNUM, regs + 33 * 4);
+  if (regnum == -1 || regnum == HPPA_PCSQ_TAIL_REGNUM)
+    regcache->raw_collect (HPPA_PCSQ_TAIL_REGNUM, regs + 34 * 4);
+  if (regnum == -1 || regnum == HPPA_PCOQ_HEAD_REGNUM)
+    regcache->raw_collect (HPPA_PCOQ_HEAD_REGNUM, regs + 35 * 4);
+  if (regnum == -1 || regnum == HPPA_PCOQ_TAIL_REGNUM)
+    regcache->raw_collect (HPPA_PCOQ_TAIL_REGNUM, regs + 36 * 4);
+  if (regnum == -1 || regnum == HPPA_IPSW_REGNUM)
+    regcache->raw_collect (HPPA_IPSW_REGNUM, regs);
+  if (regnum == -1 || regnum == HPPA_SR4_REGNUM)
+    regcache->raw_collect (HPPA_SR4_REGNUM, regs + 41 * 4);
+  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 1)
+    regcache->raw_collect (HPPA_SR4_REGNUM + 1, regs + 37 * 4);
+  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 2)
+    regcache->raw_collect (HPPA_SR4_REGNUM + 2, regs + 38 * 4);
+  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 3)
+    regcache->raw_collect (HPPA_SR4_REGNUM + 3, regs + 39 * 4);
+  if (regnum == -1 || regnum == HPPA_SR4_REGNUM + 4)
+    regcache->raw_collect (HPPA_SR4_REGNUM + 4, regs + 40 * 4);
+}
+
+/* Collect the floating-point registers from REGCACHE and store them
+   in FPREGS.  */
+
+static void
+hppanbsd_collect_fpregset (struct regcache *regcache,
+			  void *fpregs, int regnum)
+{
+  char *regs = fpregs;
+  int i;
+
+  for (i = HPPA_FP0_REGNUM; i <= HPPA_FP31R_REGNUM; i += 2, regs += 8)
+    {
+      if (regnum == -1 || regnum == i || regnum == i + 1)
+	{
+	  regcache->raw_collect (i, regs);
+	  regcache->raw_collect (i + 1, regs + 4);
+	}
+    }
+}
+
+
+/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
+   for all registers (including the floating-point registers).  */
+
+void
+hppa_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
+
+{
+  pid_t pid = regcache->ptid ().pid ();
+  int lwp = regcache->ptid ().lwp ();
+
+  if (regnum == -1 || hppanbsd_gregset_supplies_p (regnum))
+    {
+      struct reg regs;
+
+      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, lwp) == -1)
+	perror_with_name (_("Couldn't get registers"));
+
+      hppanbsd_supply_gregset (regcache, &regs);
+    }
+
+  if (regnum == -1 || hppanbsd_fpregset_supplies_p (regnum))
+    {
+      struct fpreg fpregs;
+
+      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1)
+	perror_with_name (_("Couldn't get floating point status"));
+
+      hppanbsd_supply_fpregset (regcache, &fpregs);
+    }
+}
+
+/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
+   this for all registers (including the floating-point registers).  */
+
+void
+hppa_nbsd_nat_target::store_registers (struct regcache *regcache, int regnum)
+{
+  pid_t pid = regcache->ptid ().pid ();
+  int lwp = regcache->ptid ().lwp ();
+
+  if (regnum == -1 || hppanbsd_gregset_supplies_p (regnum))
+    {
+      struct reg regs;
+
+      if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, lwp) == -1)
+	perror_with_name (_("Couldn't get registers"));
+
+      hppanbsd_collect_gregset (regcache, &regs, regnum);
+
+      if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, lwp) == -1)
+	perror_with_name (_("Couldn't write registers"));
+    }
+
+  if (regnum == -1 || hppanbsd_fpregset_supplies_p (regnum))
+    {
+      struct fpreg fpregs;
+
+      if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1)
+	perror_with_name (_("Couldn't get floating point status"));
+
+      hppanbsd_collect_fpregset (regcache, &fpregs, regnum);
+
+      if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1)
+	perror_with_name (_("Couldn't write floating point status"));
+    }
+}
+
+void _initialize_hppanbsd_nat ();
+void
+_initialize_hppanbsd_nat ()
+{
+  add_inf_child_target (&the_hppa_nbsd_nat_target);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-netbsd-tdep.c ./gdb/hppa-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/hppa-netbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,220 @@
+/* Target-dependent code for NetBSD/hppa
+
+   Copyright (C) 2008-2021 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 "regcache.h"
+#include "regset.h"
+
+#include "trad-frame.h"
+#include "tramp-frame.h"
+
+#include "hppa-tdep.h"
+#include "hppa-bsd-tdep.h"
+#include "netbsd-tdep.h"
+#include "gdbarch.h"
+
+/* From <machine/mcontext.h>.  */
+static int hppanbsd_mc_reg_offset[] =
+{
+  /* r0 ... r31 */
+      -1,   1 * 4,   2 * 4,   3 * 4,
+   4 * 4,   5 * 4,   6 * 4,   7 * 4,
+   8 * 4,   9 * 4,  10 * 4,  11 * 4, 
+  12 * 4,  13 * 4,  14 * 4,  15 * 4,
+  16 * 4,  17 * 4,  18 * 4,  19 * 4,
+  20 * 4,  21 * 4,  22 * 4,  23 * 4,
+  24 * 4,  25 * 4,  26 * 4,  27 * 4,
+  28 * 4,  29 * 4,  30 * 4,  31 * 4,
+
+  32 * 4,	/* HPPA_SAR_REGNUM */
+  35 * 4,	/* HPPA_PCOQ_HEAD_REGNUM */
+  33 * 4,	/* HPPA_PCSQ_HEAD_REGNUM */
+  36 * 4,	/* HPPA_PCOQ_TAIL_REGNUM */
+  34 * 4,	/* HPPA_PCSQ_TAIL_REGNUM */
+  -1,		/* HPPA_EIEM_REGNUM */
+  -1,		/* HPPA_IIR_REGNUM */
+  -1,		/* HPPA_ISR_REGNUM */
+  -1,		/* HPPA_IOR_REGNUM */
+  0 * 4,	/* HPPA_IPSW_REGNUM */
+  -1,		/* spare? */
+  41 * 4,	/* HPPA_SR4_REGNUM */
+  37 * 4,	/* sr0 */
+  38 * 4,	/* sr1 */
+  39 * 4,	/* sr2 */
+  40 * 4,	/* sr3 */
+
+  /* more tbd */
+};
+
+static void hppanbsd_sigtramp_cache_init (const struct tramp_frame *,
+					 struct frame_info *,
+					 struct trad_frame_cache *,
+					 CORE_ADDR);
+
+static const struct tramp_frame hppanbsd_sigtramp_si4 =
+{
+  SIGTRAMP_FRAME,
+  4,
+  {
+    { 0xc7d7c012, ULONGEST_MAX },	/*	bb,>=,n %arg3, 30, 1f		*/
+    { 0xd6e01c1e, ULONGEST_MAX },	/*	 depwi 0,31,2,%arg3		*/
+    { 0x0ee81093, ULONGEST_MAX },	/*	ldw 4(%arg3), %r19		*/
+    { 0x0ee01097, ULONGEST_MAX },	/*	ldw 0(%arg3), %arg3		*/
+			/* 1: 					*/
+    { 0xe8404000, ULONGEST_MAX },	/* 	blr %r0, %rp			*/
+    { 0xeae0c002, ULONGEST_MAX },	/*	bv,n %r0(%arg3)			*/
+    { 0x08000240, ULONGEST_MAX },	/*	 nop				*/
+
+    { 0x0803025a, ULONGEST_MAX },	/*	copy %r3, %arg0			*/
+    { 0x20200801, ULONGEST_MAX },	/*	ldil -40000000, %r1		*/
+    { 0xe420e008, ULONGEST_MAX },	/*	be,l 4(%sr7, %r1), %sr0, %r31	*/
+    { 0x34160268, ULONGEST_MAX },	/*	 ldi 134, %t1 ; SYS_setcontext	*/
+
+    { 0x081c025a, ULONGEST_MAX },	/*	copy ret0, %arg0		*/
+    { 0x20200801, ULONGEST_MAX },	/*	ldil -40000000, %r1		*/
+    { 0xe420e008, ULONGEST_MAX },	/*	be,l 4(%sr7, %r1), %sr0, %r31	*/
+    { 0x34160002, ULONGEST_MAX },	/*	 ldi 1, %t1 ; SYS_exit		*/
+    { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+  },
+  hppanbsd_sigtramp_cache_init
+};
+
+
+static void
+hppanbsd_sigtramp_cache_init (const struct tramp_frame *self,
+			     struct frame_info *this_frame,
+			     struct trad_frame_cache *this_cache,
+			     CORE_ADDR func)
+{
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
+  CORE_ADDR base;
+  int *reg_offset;
+  int num_regs;
+  int i;
+
+  reg_offset = hppanbsd_mc_reg_offset;
+  num_regs = ARRAY_SIZE (hppanbsd_mc_reg_offset);
+
+  /* frame pointer */
+  base = sp - 0x280;
+  /* offsetof(struct sigframe_siginfo, sf_uc) = 128 */
+  base += 128;
+  /* offsetof(ucontext_t, uc_mcontext) == 40 */
+  base += 40;
+
+  for (i = 0; i < num_regs; i++)
+    if (reg_offset[i] != -1)
+      trad_frame_set_reg_addr (this_cache, i, base + reg_offset[i]);
+
+  /* Construct the frame ID using the function start.  */
+  trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
+
+/* Core file support.  */
+
+/* Sizeof `struct reg' in <machine/reg.h>.  */
+#define HPPANBSD_SIZEOF_GREGS	(44 * 4)
+
+static int hppanbsd_reg_offset[] =
+{
+  /* r0 ... r31 */
+      -1,   1 * 4,   2 * 4,   3 * 4,
+   4 * 4,   5 * 4,   6 * 4,   7 * 4,
+   8 * 4,   9 * 4,  10 * 4,  11 * 4, 
+  12 * 4,  13 * 4,  14 * 4,  15 * 4,
+  16 * 4,  17 * 4,  18 * 4,  19 * 4,
+  20 * 4,  21 * 4,  22 * 4,  23 * 4,
+  24 * 4,  25 * 4,  26 * 4,  27 * 4,
+  28 * 4,  29 * 4,  30 * 4,  31 * 4,
+
+  32 * 4,	/* HPPA_SAR_REGNUM */
+  35 * 4,	/* HPPA_PCOQ_HEAD_REGNUM */
+  33 * 4,	/* HPPA_PCSQ_HEAD_REGNUM */
+  36 * 4,	/* HPPA_PCOQ_TAIL_REGNUM */
+  34 * 4,	/* HPPA_PCSQ_TAIL_REGNUM */
+  -1,		/* HPPA_EIEM_REGNUM */
+  -1,		/* HPPA_IIR_REGNUM */
+  -1,		/* HPPA_ISR_REGNUM */
+  -1,		/* HPPA_IOR_REGNUM */
+  0 * 4,	/* HPPA_IPSW_REGNUM */
+};
+
+/* 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
+hppanbsd_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;
+
+  gdb_assert (len >= HPPANBSD_SIZEOF_GREGS);
+
+  for (i = 0; i < ARRAY_SIZE (hppanbsd_reg_offset); i++)
+    if (hppanbsd_reg_offset[i] != -1)
+      if (regnum == -1 || regnum == i)
+	regcache->raw_supply (i, regs + hppanbsd_reg_offset[i]);
+}
+
+/* NetBSD/hppa register set.  */
+
+static const struct regset hppanbsd_gregset =
+{
+  NULL,
+  hppanbsd_supply_gregset
+};
+
+/* Iterate over supported core file register note sections. */
+
+static void
+hppanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
+				       iterate_over_regset_sections_cb *cb,
+				       void *cb_data,
+				       const struct regcache *regcache)
+{
+  cb (".reg", HPPANBSD_SIZEOF_GREGS, HPPANBSD_SIZEOF_GREGS, &hppanbsd_gregset,
+      NULL, cb_data);
+}
+
+static void
+hppanbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  /* Obviously NetBSD is BSD-based.  */
+  hppabsd_init_abi (info, gdbarch);
+
+  nbsd_init_abi (info, gdbarch);
+
+  /* Core file support.  */
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, hppanbsd_iterate_over_regset_sections);
+
+  tramp_frame_prepend_unwinder (gdbarch, &hppanbsd_sigtramp_si4);
+}
+
+void _initialize_hppanbsd_tdep ();
+void
+_initialize_hppanbsd_tdep ()
+{
+  gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_NETBSD,
+			  hppanbsd_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-obsd-nat.c ./gdb/hppa-obsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-obsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-obsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for OpenBSD/hppa.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -230,12 +230,12 @@ hppa_obsd_nat_target::store_registers (s
       struct reg regs;
 
       if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-        perror_with_name (_("Couldn't get registers"));
+	perror_with_name (_("Couldn't get registers"));
 
       hppaobsd_collect_gregset (regcache, &regs, regnum);
 
       if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-        perror_with_name (_("Couldn't write registers"));
+	perror_with_name (_("Couldn't write registers"));
     }
 
   if (regnum == -1 || hppaobsd_fpregset_supplies_p (regnum))
@@ -252,8 +252,9 @@ hppa_obsd_nat_target::store_registers (s
     }
 }
 
+void _initialize_hppaobsd_nat ();
 void
-_initialize_hppaobsd_nat (void)
+_initialize_hppaobsd_nat ()
 {
   add_inf_child_target (&the_hppa_obsd_nat_target);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-obsd-tdep.c ./gdb/hppa-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-obsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-obsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/hppa
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -168,8 +168,9 @@ hppaobsd_init_abi (struct gdbarch_info i
     (gdbarch, hppaobsd_iterate_over_regset_sections);
 }
 
+void _initialize_hppabsd_tdep ();
 void
-_initialize_hppabsd_tdep (void)
+_initialize_hppabsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_OPENBSD,
 			  hppaobsd_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-tdep.c ./gdb/hppa-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the HP PA-RISC architecture.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah (pa-gdb-bugs@cs.utah.edu).
@@ -244,7 +244,7 @@ record_text_segment_lowaddr (bfd *abfd,
       CORE_ADDR *low_text_segment_address = (CORE_ADDR *)data;
 
       if (value < *low_text_segment_address)
-          *low_text_segment_address = value;
+	  *low_text_segment_address = value;
     }
 }
 
@@ -258,7 +258,7 @@ internalize_unwinds (struct objfile *obj
 
   if (size > 0)
     {
-      struct gdbarch *gdbarch = get_objfile_arch (objfile);
+      struct gdbarch *gdbarch = objfile->arch ();
       unsigned long tmp;
       unsigned i;
       char *buf = (char *) alloca (size);
@@ -272,7 +272,7 @@ internalize_unwinds (struct objfile *obj
 	 passed in.  */
       if (gdbarch_tdep (gdbarch)->is_elf && text_offset == 0)
 	{
-          low_text_segment_address = -1;
+	  low_text_segment_address = -1;
 
 	  bfd_map_over_sections (objfile->obfd,
 				 record_text_segment_lowaddr, 
@@ -281,14 +281,14 @@ internalize_unwinds (struct objfile *obj
 	  text_offset = low_text_segment_address;
 	}
       else if (gdbarch_tdep (gdbarch)->solib_get_text_base)
-        {
+	{
 	  text_offset = gdbarch_tdep (gdbarch)->solib_get_text_base (objfile);
 	}
 
       bfd_get_section_contents (objfile->obfd, section, buf, 0, size);
 
       /* Now internalize the information being careful to handle host/target
-         endian issues.  */
+	 endian issues.  */
       for (i = 0; i < entries; i++)
 	{
 	  table[i].region_start = bfd_get_32 (objfile->obfd,
@@ -357,7 +357,7 @@ read_unwind_info (struct objfile *objfil
   struct hppa_unwind_info *ui;
   struct hppa_objfile_private *obj_private;
 
-  text_offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
+  text_offset = objfile->text_section_offset ();
   ui = (struct hppa_unwind_info *) obstack_alloc (&objfile->objfile_obstack,
 					   sizeof (struct hppa_unwind_info));
 
@@ -488,7 +488,7 @@ find_unwind_entry (CORE_ADDR pc)
 
   if (hppa_debug)
     fprintf_unfiltered (gdb_stdlog, "{ find_unwind_entry %s -> ",
-		        hex_string (pc));
+			hex_string (pc));
 
   /* A function at address 0?  Not in HP-UX!  */
   if (pc == (CORE_ADDR) 0)
@@ -736,7 +736,7 @@ hppa32_push_dummy_call (struct gdbarch *
     {
       CORE_ADDR struct_ptr = 0;
       /* The first parameter goes into sp-36, each stack slot is 4-bytes.
-         struct_ptr is adjusted for each argument below, so the first
+	 struct_ptr is adjusted for each argument below, so the first
 	 argument will end up at sp-36.  */
       CORE_ADDR param_ptr = 32;
       int i;
@@ -763,8 +763,8 @@ hppa32_push_dummy_call (struct gdbarch *
 	      store_unsigned_integer (param_val, 4, byte_order,
 				      struct_end - struct_ptr);
 	    }
-	  else if (TYPE_CODE (type) == TYPE_CODE_INT
-		   || TYPE_CODE (type) == TYPE_CODE_ENUM)
+	  else if (type->code () == TYPE_CODE_INT
+		   || type->code () == TYPE_CODE_ENUM)
 	    {
 	      /* Integer value store, right aligned.  "unpack_long"
 		 takes care of any sign-extension problems.  */
@@ -773,12 +773,12 @@ hppa32_push_dummy_call (struct gdbarch *
 				      unpack_long (type,
 						   value_contents (arg)));
 	    }
-	  else if (TYPE_CODE (type) == TYPE_CODE_FLT)
-            {
+	  else if (type->code () == TYPE_CODE_FLT)
+	    {
 	      /* Floating point value store, right aligned.  */
 	      param_len = align_up (TYPE_LENGTH (type), 4);
 	      memcpy (param_val, value_contents (arg), param_len);
-            }
+	    }
 	  else
 	    {
 	      param_len = align_up (TYPE_LENGTH (type), 4);
@@ -788,7 +788,7 @@ hppa32_push_dummy_call (struct gdbarch *
 		      value_contents (arg), TYPE_LENGTH (type));
 
 	      /* Structures of size 5, 6 and 7 bytes are special in that
-	         the higher-ordered word is stored in the lower-ordered
+		 the higher-ordered word is stored in the lower-ordered
 		 argument, and even though it is a 8-byte quantity the
 		 registers need not be 8-byte aligned.  */
 	      if (param_len > 4 && param_len < 8)
@@ -797,7 +797,7 @@ hppa32_push_dummy_call (struct gdbarch *
 
 	  param_ptr += param_len;
 	  if (param_len == 8 && !small_struct)
-            param_ptr = align_up (param_ptr, 8);
+	    param_ptr = align_up (param_ptr, 8);
 
 	  /* First 4 non-FP arguments are passed in gr26-gr23.
 	     First 4 32-bit FP arguments are passed in fr4L-fr7L.
@@ -876,7 +876,7 @@ hppa32_push_dummy_call (struct gdbarch *
 static int
 hppa64_integral_or_pointer_p (const struct type *type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_INT:
     case TYPE_CODE_BOOL:
@@ -903,7 +903,7 @@ hppa64_integral_or_pointer_p (const stru
 static int
 hppa64_floating_p (const struct type *type)
 {
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_FLT:
       {
@@ -943,11 +943,7 @@ hppa64_convert_code_addr_to_fptr (struct
 
   if (opd < sec->objfile->sections_end)
     {
-      CORE_ADDR addr;
-
-      for (addr = obj_section_addr (opd);
-	   addr < obj_section_endaddr (opd);
-	   addr += 2 * 8)
+      for (CORE_ADDR addr = opd->addr (); addr < opd->endaddr (); addr += 2 * 8)
 	{
 	  ULONGEST opdaddr;
 	  gdb_byte tmp[8];
@@ -995,10 +991,10 @@ hppa64_push_dummy_call (struct gdbarch *
       if (hppa64_integral_or_pointer_p (type))
 	{
 	  /* "Integral scalar parameters smaller than 64 bits are
-             padded on the left (i.e., the value is in the
-             least-significant bits of the 64-bit storage unit, and
-             the high-order bits are undefined)."  Therefore we can
-             safely sign-extend them.  */
+	     padded on the left (i.e., the value is in the
+	     least-significant bits of the 64-bit storage unit, and
+	     the high-order bits are undefined)."  Therefore we can
+	     safely sign-extend them.  */
 	  if (len < 8)
 	    {
 	      arg = value_cast (builtin_type (gdbarch)->builtin_int64, arg);
@@ -1014,8 +1010,8 @@ hppa64_push_dummy_call (struct gdbarch *
 	      offset = align_up (offset, 16);
 
 	      /* "Double-extended- and quad-precision floating-point
-                 parameters within the first 64 bytes of the parameter
-                 list are always passed in general registers."  */
+		 parameters within the first 64 bytes of the parameter
+		 list are always passed in general registers."  */
 	    }
 	  else
 	    {
@@ -1030,12 +1026,12 @@ hppa64_push_dummy_call (struct gdbarch *
 		}
 
 	      /* "Single- and double-precision floating-point
-                 parameters in this area are passed according to the
-                 available formal parameter information in a function
-                 prototype.  [...]  If no prototype is in scope,
-                 floating-point parameters must be passed both in the
-                 corresponding general registers and in the
-                 corresponding floating-point registers."  */
+		 parameters in this area are passed according to the
+		 available formal parameter information in a function
+		 prototype.  [...]  If no prototype is in scope,
+		 floating-point parameters must be passed both in the
+		 corresponding general registers and in the
+		 corresponding floating-point registers."  */
 	      regnum = HPPA64_FP4_REGNUM + offset / 8;
 
 	      if (regnum < HPPA64_FP4_REGNUM + 8)
@@ -1063,10 +1059,10 @@ hppa64_push_dummy_call (struct gdbarch *
 	}
 
       /* If we are passing a function pointer, make sure we pass a function
-         descriptor instead of the function entry address.  */
-      if (TYPE_CODE (type) == TYPE_CODE_PTR
-          && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
-        {
+	 descriptor instead of the function entry address.  */
+      if (type->code () == TYPE_CODE_PTR
+	  && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC)
+	{
 	  ULONGEST codeptr, fptr;
 
 	  codeptr = unpack_long (type, value_contents (arg));
@@ -1076,8 +1072,8 @@ hppa64_push_dummy_call (struct gdbarch *
 	  valbuf = fptrbuf;
 	}
       else
-        {
-          valbuf = value_contents (arg);
+	{
+	  valbuf = value_contents (arg);
 	}
 
       /* Always store the argument in memory.  */
@@ -1144,7 +1140,7 @@ hppa32_return_value (struct gdbarch *gdb
       /* The value always lives in the right hand end of the register
 	 (or register pair)?  */
       int b;
-      int reg = TYPE_CODE (type) == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28;
+      int reg = type->code () == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28;
       int part = TYPE_LENGTH (type) % 4;
       /* The left hand register contains only part of the value,
 	 transfer that first so that the rest can be xfered as entire
@@ -1183,7 +1179,7 @@ hppa64_return_value (struct gdbarch *gdb
   if (len > 16)
     {
       /* All return values larger than 128 bits must be aggregate
-         return values.  */
+	 return values.  */
       gdb_assert (!hppa64_integral_or_pointer_p (type));
       gdb_assert (!hppa64_floating_p (type));
 
@@ -1196,7 +1192,7 @@ hppa64_return_value (struct gdbarch *gdb
   if (hppa64_integral_or_pointer_p (type))
     {
       /* "Integral return values are returned in GR 28.  Values
-         smaller than 64 bits are padded on the left (with garbage)."  */
+	 smaller than 64 bits are padded on the left (with garbage)."  */
       regnum = HPPA_RET0_REGNUM;
       offset = 8 - len;
     }
@@ -1226,8 +1222,8 @@ hppa64_return_value (struct gdbarch *gdb
   else
     {
       /* "Aggregate return values up to 64 bits in size are returned
-         in GR 28.  Aggregates smaller than 64 bits are left aligned
-         in the register; the pad bits on the right are undefined."
+	 in GR 28.  Aggregates smaller than 64 bits are left aligned
+	 in the register; the pad bits on the right are undefined."
 
 	 "Aggregate return values between 65 and 128 bits are returned
 	 in GRs 28 and 29.  The first 64 bits are placed in GR 28, and
@@ -1413,11 +1409,11 @@ is_branch (unsigned long inst)
      the general registers are:
 
        Store:          stb, sth, stw, std (according to Chapter 7, they
-                       are only in both "inst >> 26" and "inst >> 6".
+		       are only in both "inst >> 26" and "inst >> 6".
        Store Absolute: stwa, stda (according to Chapter 7, they are only
-                       in "inst >> 6".
+		       in "inst >> 6".
        Store Bytes:    stby, stdby (according to Chapter 7, they are
-                       only in "inst >> 6").
+		       only in "inst >> 6").
 
    For (inst >> 26), according to Chapter 7:
 
@@ -1609,7 +1605,7 @@ restart:
       unsigned long old_save_rp, old_save_sp, next_inst;
 
       /* Save copies of all the triggers so we can compare them later
-         (only for HPC).  */
+	 (only for HPC).  */
       old_save_gr = save_gr;
       old_save_fr = save_fr;
       old_save_rp = save_rp;
@@ -1632,13 +1628,13 @@ restart:
 	save_rp = 0;
 
       /* These are the only ways we save SP into the stack.  At this time
-         the HP compilers never bother to save SP into the stack.  */
+	 the HP compilers never bother to save SP into the stack.  */
       if ((inst & 0xffffc000) == 0x6fc10000
 	  || (inst & 0xffffc00c) == 0x73c10008)
 	save_sp = 0;
 
       /* Are we loading some register with an offset from the argument
-         pointer?  */
+	 pointer?  */
       if ((inst & 0xffe00000) == 0x37a00000
 	  || (inst & 0xffffffe0) == 0x081d0240)
 	{
@@ -1651,15 +1647,15 @@ restart:
       save_gr &= ~(1 << reg_num);
 
       /* Ugh.  Also account for argument stores into the stack.
-         Unfortunately args_stored only tells us that some arguments
-         where stored into the stack.  Not how many or what kind!
+	 Unfortunately args_stored only tells us that some arguments
+	 where stored into the stack.  Not how many or what kind!
 
-         This is a kludge as on the HP compiler sets this bit and it
-         never does prologue scheduling.  So once we see one, skip past
-         all of them.   We have similar code for the fp arg stores below.
+	 This is a kludge as on the HP compiler sets this bit and it
+	 never does prologue scheduling.  So once we see one, skip past
+	 all of them.   We have similar code for the fp arg stores below.
 
-         FIXME.  Can still die if we have a mix of GR and FR argument
-         stores!  */
+	 FIXME.  Can still die if we have a mix of GR and FR argument
+	 stores!  */
       if (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
 	  && reg_num <= 26)
 	{
@@ -1688,7 +1684,7 @@ restart:
 	return pc;
 
       /* We've got to be read to handle the ldo before the fp register
-         save.  */
+	 save.  */
       if ((inst & 0xfc000000) == 0x34000000
 	  && inst_saves_fr (next_inst) >= 4
 	  && inst_saves_fr (next_inst)
@@ -1700,9 +1696,9 @@ restart:
 	}
 
       /* Ugh.  Also account for argument stores into the stack.
-         This is a kludge as on the HP compiler sets this bit and it
-         never does prologue scheduling.  So once we see one, skip past
-         all of them.  */
+	 This is a kludge as on the HP compiler sets this bit and it
+	 never does prologue scheduling.  So once we see one, skip past
+	 all of them.  */
       if (reg_num >= 4
 	  && reg_num <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
 	{
@@ -1728,19 +1724,19 @@ restart:
 	}
 
       /* Quit if we hit any kind of branch.  This can happen if a prologue
-         instruction is in the delay slot of the first call/branch.  */
+	 instruction is in the delay slot of the first call/branch.  */
       if (is_branch (inst) && stop_before_branch)
 	break;
 
       /* What a crock.  The HP compilers set args_stored even if no
-         arguments were stored into the stack (boo hiss).  This could
-         cause this code to then skip a bunch of user insns (up to the
-         first branch).
-
-         To combat this we try to identify when args_stored was bogusly
-         set and clear it.   We only do this when args_stored is nonzero,
-         all other resources are accounted for, and nothing changed on
-         this pass.  */
+	 arguments were stored into the stack (boo hiss).  This could
+	 cause this code to then skip a bunch of user insns (up to the
+	 first branch).
+
+	 To combat this we try to identify when args_stored was bogusly
+	 set and clear it.   We only do this when args_stored is nonzero,
+	 all other resources are accounted for, and nothing changed on
+	 this pass.  */
       if (args_stored
        && !(save_gr || save_fr || save_rp || save_sp || stack_remaining > 0)
 	  && old_save_gr == save_gr && old_save_fr == save_fr
@@ -1752,7 +1748,7 @@ restart:
       pc += 4;
 
       /* !stop_before_branch, so also look at the insn in the delay slot 
-         of the branch.  */
+	 of the branch.  */
       if (final_iteration)
 	break;
       if (is_branch (inst))
@@ -1865,7 +1861,7 @@ hppa_find_unwind_entry_in_block (struct
 struct hppa_frame_cache
 {
   CORE_ADDR base;
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 static struct hppa_frame_cache *
@@ -1890,8 +1886,8 @@ hppa_frame_cache (struct frame_info *thi
   if ((*this_cache) != NULL)
     {
       if (hppa_debug)
-        fprintf_unfiltered (gdb_stdlog, "base=%s (cached) }",
-          paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
+	fprintf_unfiltered (gdb_stdlog, "base=%s (cached) }",
+	  paddress (gdbarch, ((struct hppa_frame_cache *)*this_cache)->base));
       return (struct hppa_frame_cache *) (*this_cache);
     }
   cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache);
@@ -1903,7 +1899,7 @@ hppa_frame_cache (struct frame_info *thi
   if (!u)
     {
       if (hppa_debug)
-        fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }");
+	fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }");
       return (struct hppa_frame_cache *) (*this_cache);
     }
 
@@ -1990,7 +1986,7 @@ hppa_frame_cache (struct frame_info *thi
 	gdb_byte buf4[4];
 	long inst;
 
-	if (!safe_frame_unwind_memory (this_frame, pc, buf4, sizeof buf4)) 
+	if (!safe_frame_unwind_memory (this_frame, pc, buf4))
 	  {
 	    error (_("Cannot read instruction at %s."),
 		   paddress (gdbarch, pc));
@@ -2007,18 +2003,18 @@ hppa_frame_cache (struct frame_info *thi
 	if (inst == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
 	  {
 	    looking_for_rp = 0;
-	    cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
+	    cache->saved_regs[HPPA_RP_REGNUM].set_addr (-20);
 	  }
 	else if (inst == 0x6bc23fd1) /* stw rp,-0x18(sr0,sp) */
 	  {
 	    looking_for_rp = 0;
-	    cache->saved_regs[HPPA_RP_REGNUM].addr = -24;
+	    cache->saved_regs[HPPA_RP_REGNUM].set_addr (-24);
 	  }
 	else if (inst == 0x0fc212c1 
-	         || inst == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
+		 || inst == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
 	  {
 	    looking_for_rp = 0;
-	    cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
+	    cache->saved_regs[HPPA_RP_REGNUM].set_addr (-16);
 	  }
 	
 	/* Check to see if we saved SP into the stack.  This also
@@ -2028,7 +2024,7 @@ hppa_frame_cache (struct frame_info *thi
 	    || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */
 	  {
 	    looking_for_sp = 0;
-	    cache->saved_regs[HPPA_FP_REGNUM].addr = 0;
+	    cache->saved_regs[HPPA_FP_REGNUM].set_addr (0);
 	  }
 	else if (inst == 0x08030241) /* copy %r3, %r1 */
 	  {
@@ -2044,10 +2040,10 @@ hppa_frame_cache (struct frame_info *thi
 	    if ((inst >> 26) == 0x1b && hppa_extract_14 (inst) >= 0)
 	      /* stwm with a positive displacement is a _post_
 		 _modify_.  */
-	      cache->saved_regs[reg].addr = 0;
+	      cache->saved_regs[reg].set_addr (0);
 	    else if ((inst & 0xfc00000c) == 0x70000008)
 	      /* A std has explicit post_modify forms.  */
-	      cache->saved_regs[reg].addr = 0;
+	      cache->saved_regs[reg].set_addr (0);
 	    else
 	      {
 		CORE_ADDR offset;
@@ -2062,10 +2058,10 @@ hppa_frame_cache (struct frame_info *thi
 		
 		/* Handle code with and without frame pointers.  */
 		if (u->Save_SP)
-		  cache->saved_regs[reg].addr = offset;
+		  cache->saved_regs[reg].set_addr (offset);
 		else
-		  cache->saved_regs[reg].addr
-		    = (u->Total_frame_size << 3) + offset;
+		  cache->saved_regs[reg].set_addr ((u->Total_frame_size << 3)
+						   + offset);
 	      }
 	  }
 
@@ -2095,12 +2091,12 @@ hppa_frame_cache (struct frame_info *thi
 		/* 1st HP CC FP register store.  After this
 		   instruction we've set enough state that the GCC and
 		   HPCC code are both handled in the same manner.  */
-		cache->saved_regs[reg + HPPA_FP4_REGNUM + 4].addr = 0;
+		cache->saved_regs[reg + HPPA_FP4_REGNUM + 4].set_addr (0);
 		fp_loc = 8;
 	      }
 	    else
 	      {
-		cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].addr = fp_loc;
+		cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].set_addr (fp_loc);
 		fp_loc += 8;
 	      }
 	  }
@@ -2120,32 +2116,32 @@ hppa_frame_cache (struct frame_info *thi
        the current function (and is thus equivalent to the "saved"
        stack pointer.  */
     CORE_ADDR this_sp = get_frame_register_unsigned (this_frame,
-                                                     HPPA_SP_REGNUM);
+						     HPPA_SP_REGNUM);
     CORE_ADDR fp;
 
     if (hppa_debug)
       fprintf_unfiltered (gdb_stdlog, " (this_sp=%s, pc=%s, "
-		          "prologue_end=%s) ",
-		          paddress (gdbarch, this_sp),
+			  "prologue_end=%s) ",
+			  paddress (gdbarch, this_sp),
 			  paddress (gdbarch, get_frame_pc (this_frame)),
 			  paddress (gdbarch, prologue_end));
 
      /* Check to see if a frame pointer is available, and use it for
-        frame unwinding if it is.
+	frame unwinding if it is.
  
-        There are some situations where we need to rely on the frame
-        pointer to do stack unwinding.  For example, if a function calls
-        alloca (), the stack pointer can get adjusted inside the body of
-        the function.  In this case, the ABI requires that the compiler
-        maintain a frame pointer for the function.
+	There are some situations where we need to rely on the frame
+	pointer to do stack unwinding.  For example, if a function calls
+	alloca (), the stack pointer can get adjusted inside the body of
+	the function.  In this case, the ABI requires that the compiler
+	maintain a frame pointer for the function.
  
-        The unwind record has a flag (alloca_frame) that indicates that
-        a function has a variable frame; unfortunately, gcc/binutils 
-        does not set this flag.  Instead, whenever a frame pointer is used
-        and saved on the stack, the Save_SP flag is set.  We use this to
-        decide whether to use the frame pointer for unwinding.
+	The unwind record has a flag (alloca_frame) that indicates that
+	a function has a variable frame; unfortunately, gcc/binutils 
+	does not set this flag.  Instead, whenever a frame pointer is used
+	and saved on the stack, the Save_SP flag is set.  We use this to
+	decide whether to use the frame pointer for unwinding.
 	
-        TODO: For the HP compiler, maybe we should use the alloca_frame flag 
+	TODO: For the HP compiler, maybe we should use the alloca_frame flag 
 	instead of Save_SP.  */
  
      fp = get_frame_register_unsigned (this_frame, HPPA_FP_REGNUM);
@@ -2154,71 +2150,71 @@ hppa_frame_cache (struct frame_info *thi
        fp -= u->Total_frame_size << 3;
  
      if (get_frame_pc (this_frame) >= prologue_end
-         && (u->Save_SP || u->alloca_frame) && fp != 0)
+	 && (u->Save_SP || u->alloca_frame) && fp != 0)
       {
- 	cache->base = fp;
+	cache->base = fp;
  
- 	if (hppa_debug)
+	if (hppa_debug)
 	  fprintf_unfiltered (gdb_stdlog, " (base=%s) [frame pointer]",
 			      paddress (gdbarch, cache->base));
       }
      else if (u->Save_SP 
-	      && trad_frame_addr_p (cache->saved_regs, HPPA_SP_REGNUM))
+	      && cache->saved_regs[HPPA_SP_REGNUM].is_addr ())
       {
-            /* Both we're expecting the SP to be saved and the SP has been
+	    /* Both we're expecting the SP to be saved and the SP has been
 	       saved.  The entry SP value is saved at this frame's SP
 	       address.  */
-            cache->base = read_memory_integer (this_sp, word_size, byte_order);
+	    cache->base = read_memory_integer (this_sp, word_size, byte_order);
 
 	    if (hppa_debug)
 	      fprintf_unfiltered (gdb_stdlog, " (base=%s) [saved]",
-			          paddress (gdbarch, cache->base));
+				  paddress (gdbarch, cache->base));
       }
     else
       {
-        /* The prologue has been slowly allocating stack space.  Adjust
+	/* The prologue has been slowly allocating stack space.  Adjust
 	   the SP back.  */
-        cache->base = this_sp - frame_size;
+	cache->base = this_sp - frame_size;
 	if (hppa_debug)
 	  fprintf_unfiltered (gdb_stdlog, " (base=%s) [unwind adjust]",
 			      paddress (gdbarch, cache->base));
 
       }
-    trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
+    cache->saved_regs[HPPA_SP_REGNUM].set_value (cache->base);
   }
 
   /* The PC is found in the "return register", "Millicode" uses "r31"
      as the return register while normal code uses "rp".  */
   if (u->Millicode)
     {
-      if (trad_frame_addr_p (cache->saved_regs, 31))
-        {
-          cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31];
+      if (cache->saved_regs[31].is_addr ())
+	{
+	  cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31];
 	  if (hppa_debug)
 	    fprintf_unfiltered (gdb_stdlog, " (pc=r31) [stack] } ");
-        }
+	}
       else
 	{
 	  ULONGEST r31 = get_frame_register_unsigned (this_frame, 31);
-	  trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, r31);
+	  cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_value (r31);
 	  if (hppa_debug)
 	    fprintf_unfiltered (gdb_stdlog, " (pc=r31) [frame] } ");
-        }
+	}
     }
   else
     {
-      if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
-        {
-          cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
+      if (cache->saved_regs[HPPA_RP_REGNUM].is_addr ())
+	{
+	  cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
 	    cache->saved_regs[HPPA_RP_REGNUM];
 	  if (hppa_debug)
 	    fprintf_unfiltered (gdb_stdlog, " (pc=rp) [stack] } ");
-        }
+	}
       else
 	{
 	  ULONGEST rp = get_frame_register_unsigned (this_frame,
-                                                     HPPA_RP_REGNUM);
-	  trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
+						     HPPA_RP_REGNUM);
+	  cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_value (rp);
 	  if (hppa_debug)
 	    fprintf_unfiltered (gdb_stdlog, " (pc=rp) [frame] } ");
 	}
@@ -2238,11 +2234,11 @@ hppa_frame_cache (struct frame_info *thi
      on the stack, but it's been overwritten.  The prologue analyzer will
      set fp_in_r1 when it sees the copy insn so we know to get the value 
      from r1 instead.  */
-  if (u->Save_SP && !trad_frame_addr_p (cache->saved_regs, HPPA_FP_REGNUM)
+  if (u->Save_SP && !cache->saved_regs[HPPA_FP_REGNUM].is_addr ()
       && fp_in_r1)
     {
       ULONGEST r1 = get_frame_register_unsigned (this_frame, 1);
-      trad_frame_set_value (cache->saved_regs, HPPA_FP_REGNUM, r1);
+      cache->saved_regs[HPPA_FP_REGNUM].set_value (r1);
     }
 
   {
@@ -2250,8 +2246,9 @@ hppa_frame_cache (struct frame_info *thi
     int reg;
     for (reg = 0; reg < gdbarch_num_regs (gdbarch); reg++)
       {
-	if (trad_frame_addr_p (cache->saved_regs, reg))
-	  cache->saved_regs[reg].addr += cache->base;
+	if (cache->saved_regs[reg].is_addr ())
+	  cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
+					   + cache->base);
       }
   }
 
@@ -2295,7 +2292,7 @@ hppa_frame_prev_register (struct frame_i
 
 static int
 hppa_frame_unwind_sniffer (const struct frame_unwind *self,
-                           struct frame_info *this_frame, void **this_cache)
+			   struct frame_info *this_frame, void **this_cache)
 {
   if (hppa_find_unwind_entry_in_block (this_frame))
     return 1;
@@ -2305,6 +2302,7 @@ hppa_frame_unwind_sniffer (const struct
 
 static const struct frame_unwind hppa_frame_unwind =
 {
+  "hppa unwind table",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   hppa_frame_this_id,
@@ -2357,13 +2355,13 @@ hppa_fallback_frame_cache (struct frame_
 	     stack.  */
 	  if (insn == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */
 	    {
-	      cache->saved_regs[HPPA_RP_REGNUM].addr = -20;
+	      cache->saved_regs[HPPA_RP_REGNUM].set_addr (-20);
 	      found_rp = 1;
 	    }
 	  else if (insn == 0x0fc212c1
-	           || insn == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
+		   || insn == 0x73c23fe1) /* std rp,-0x10(sr0,sp) */
 	    {
-	      cache->saved_regs[HPPA_RP_REGNUM].addr = -16;
+	      cache->saved_regs[HPPA_RP_REGNUM].set_addr (-16);
 	      found_rp = 1;
 	    }
 	}
@@ -2375,11 +2373,12 @@ hppa_fallback_frame_cache (struct frame_
 
   cache->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
   cache->base -= frame_size;
-  trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base);
+  cache->saved_regs[HPPA_SP_REGNUM].set_value (cache->base);
 
-  if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM))
+  if (cache->saved_regs[HPPA_RP_REGNUM].is_addr ())
     {
-      cache->saved_regs[HPPA_RP_REGNUM].addr += cache->base;
+      cache->saved_regs[HPPA_RP_REGNUM].set_addr (cache->saved_regs[HPPA_RP_REGNUM].addr ()
+						  + cache->base);
       cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = 
 	cache->saved_regs[HPPA_RP_REGNUM];
     }
@@ -2387,7 +2386,7 @@ hppa_fallback_frame_cache (struct frame_
     {
       ULONGEST rp;
       rp = get_frame_register_unsigned (this_frame, HPPA_RP_REGNUM);
-      trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp);
+      cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_value (rp);
     }
 
   return cache;
@@ -2405,7 +2404,7 @@ hppa_fallback_frame_this_id (struct fram
 
 static struct value *
 hppa_fallback_frame_prev_register (struct frame_info *this_frame,
-			           void **this_cache, int regnum)
+				   void **this_cache, int regnum)
 {
   struct hppa_frame_cache *info
     = hppa_fallback_frame_cache (this_frame, this_cache);
@@ -2416,6 +2415,7 @@ hppa_fallback_frame_prev_register (struc
 
 static const struct frame_unwind hppa_fallback_frame_unwind =
 {
+  "hppa prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   hppa_fallback_frame_this_id,
@@ -2428,7 +2428,7 @@ static const struct frame_unwind hppa_fa
 struct hppa_stub_unwind_cache
 {
   CORE_ADDR base;
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 static struct hppa_stub_unwind_cache *
@@ -2447,7 +2447,7 @@ hppa_stub_frame_unwind_cache (struct fra
   info->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM);
 
   /* By default we assume that stubs do not change the rp.  */
-  info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].realreg = HPPA_RP_REGNUM;
+  info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].set_realreg (HPPA_RP_REGNUM);
 
   return info;
 }
@@ -2480,8 +2480,8 @@ hppa_stub_frame_prev_register (struct fr
 
 static int
 hppa_stub_unwind_sniffer (const struct frame_unwind *self,
-                          struct frame_info *this_frame,
-                          void **this_cache)
+			  struct frame_info *this_frame,
+			  void **this_cache)
 {
   CORE_ADDR pc = get_frame_address_in_block (this_frame);
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2496,6 +2496,7 @@ hppa_stub_unwind_sniffer (const struct f
 }
 
 static const struct frame_unwind hppa_stub_frame_unwind = {
+  "hppa stub",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   hppa_stub_frame_this_id,
@@ -2529,7 +2530,7 @@ hppa_unwind_pc (struct gdbarch *gdbarch,
 
 struct bound_minimal_symbol
 hppa_lookup_stub_minimal_symbol (const char *name,
-                                 enum unwind_stub_types stub_type)
+				 enum unwind_stub_types stub_type)
 {
   struct bound_minimal_symbol result = { NULL, NULL };
 
@@ -2622,7 +2623,7 @@ unwind_command (const char *exp, int fro
     {
       printf_unfiltered ("\tstub type = ");
       switch (u->stub_unwind.stub_type)
-        {
+	{
 	  case LONG_BRANCH:
 	    printf_unfiltered ("long branch\n");
 	    break;
@@ -2672,9 +2673,9 @@ static int
 hppa32_cannot_store_register (struct gdbarch *gdbarch, int regnum)
 {
   return (regnum == 0
-          || regnum == HPPA_PCSQ_HEAD_REGNUM
-          || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
-          || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM));
+	  || regnum == HPPA_PCSQ_HEAD_REGNUM
+	  || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
+	  || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM));
 }
 
 static int
@@ -2691,9 +2692,9 @@ static int
 hppa64_cannot_store_register (struct gdbarch *gdbarch, int regnum)
 {
   return (regnum == 0
-          || regnum == HPPA_PCSQ_HEAD_REGNUM
-          || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
-          || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM));
+	  || regnum == HPPA_PCSQ_HEAD_REGNUM
+	  || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM)
+	  || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA64_FP4_REGNUM));
 }
 
 static int
@@ -2754,7 +2755,7 @@ hppa_find_global_pointer (struct gdbarch
 
 struct value *
 hppa_frame_prev_register_helper (struct frame_info *this_frame,
-			         struct trad_frame_saved_reg saved_regs[],
+				 trad_frame_saved_reg saved_regs[],
 				 int regnum)
 {
   struct gdbarch *arch = get_frame_arch (this_frame);
@@ -2765,8 +2766,8 @@ hppa_frame_prev_register_helper (struct
       int size = register_size (arch, HPPA_PCOQ_HEAD_REGNUM);
       CORE_ADDR pc;
       struct value *pcoq_val =
-        trad_frame_get_prev_register (this_frame, saved_regs,
-                                      HPPA_PCOQ_HEAD_REGNUM);
+	trad_frame_get_prev_register (this_frame, saved_regs,
+				      HPPA_PCOQ_HEAD_REGNUM);
 
       pc = extract_unsigned_integer (value_contents_all (pcoq_val),
 				     size, byte_order);
@@ -2861,9 +2862,9 @@ hppa_match_insns (struct gdbarch *gdbarc
       target_read_memory (npc, buf, HPPA_INSN_SIZE);
       insn[i] = extract_unsigned_integer (buf, HPPA_INSN_SIZE, byte_order);
       if ((insn[i] & pattern[i].mask) == pattern[i].data)
-        npc += 4;
+	npc += 4;
       else
-        return 0;
+	return 0;
     }
 
   return 1;
@@ -2958,9 +2959,9 @@ hppa_skip_trampoline_code (struct frame_
       pc = hppa_extract_21 (insn[0]) + hppa_extract_14 (insn[1]);
 
       if (dp_rel)
-        pc += get_frame_register_unsigned (frame, HPPA_DP_REGNUM);
+	pc += get_frame_register_unsigned (frame, HPPA_DP_REGNUM);
       else
-        pc += get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 19);
+	pc += get_frame_register_unsigned (frame, HPPA_R0_REGNUM + 19);
 
       /* fallthrough */
     }
@@ -2970,11 +2971,11 @@ hppa_skip_trampoline_code (struct frame_
       pc = read_memory_typed_address (pc, func_ptr_type);
 
       /* If the PLT slot has not yet been resolved, the target will be
-         the PLT stub.  */
+	 the PLT stub.  */
       if (in_plt_section (pc))
 	{
 	  /* Sanity check: are we pointing to the PLT stub?  */
-  	  if (!hppa_match_insns (gdbarch, pc, hppa_plt_stub, insn))
+	  if (!hppa_match_insns (gdbarch, pc, hppa_plt_stub, insn))
 	    {
 	      warning (_("Cannot resolve PLT stub at %s."),
 		       paddress (gdbarch, pc));
@@ -3056,27 +3057,27 @@ hppa_gdbarch_init (struct gdbarch_info i
   switch (tdep->bytes_per_address)
     {
       case 4:
-        set_gdbarch_num_regs (gdbarch, hppa32_num_regs);
-        set_gdbarch_register_name (gdbarch, hppa32_register_name);
-        set_gdbarch_register_type (gdbarch, hppa32_register_type);
+	set_gdbarch_num_regs (gdbarch, hppa32_num_regs);
+	set_gdbarch_register_name (gdbarch, hppa32_register_name);
+	set_gdbarch_register_type (gdbarch, hppa32_register_type);
 	set_gdbarch_cannot_store_register (gdbarch,
 					   hppa32_cannot_store_register);
 	set_gdbarch_cannot_fetch_register (gdbarch,
 					   hppa32_cannot_fetch_register);
-        break;
+	break;
       case 8:
-        set_gdbarch_num_regs (gdbarch, hppa64_num_regs);
-        set_gdbarch_register_name (gdbarch, hppa64_register_name);
-        set_gdbarch_register_type (gdbarch, hppa64_register_type);
-        set_gdbarch_dwarf2_reg_to_regnum (gdbarch, hppa64_dwarf_reg_to_regnum);
+	set_gdbarch_num_regs (gdbarch, hppa64_num_regs);
+	set_gdbarch_register_name (gdbarch, hppa64_register_name);
+	set_gdbarch_register_type (gdbarch, hppa64_register_type);
+	set_gdbarch_dwarf2_reg_to_regnum (gdbarch, hppa64_dwarf_reg_to_regnum);
 	set_gdbarch_cannot_store_register (gdbarch,
 					   hppa64_cannot_store_register);
 	set_gdbarch_cannot_fetch_register (gdbarch,
 					   hppa64_cannot_fetch_register);
-        break;
+	break;
       default:
-        internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"),
-                        tdep->bytes_per_address);
+	internal_error (__FILE__, __LINE__, _("Unsupported address size: %d"),
+			tdep->bytes_per_address);
     }
 
   set_gdbarch_long_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT);
@@ -3117,7 +3118,7 @@ hppa_gdbarch_init (struct gdbarch_info i
       set_gdbarch_push_dummy_call (gdbarch, hppa32_push_dummy_call);
       set_gdbarch_frame_align (gdbarch, hppa32_frame_align);
       set_gdbarch_convert_from_func_ptr_addr
-        (gdbarch, hppa32_convert_from_func_ptr_addr);
+	(gdbarch, hppa32_convert_from_func_ptr_addr);
       break;
     case 8:
       set_gdbarch_push_dummy_call (gdbarch, hppa64_push_dummy_call);
@@ -3164,12 +3165,13 @@ hppa_dump_tdep (struct gdbarch *gdbarch,
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
   fprintf_unfiltered (file, "bytes_per_address = %d\n", 
-                      tdep->bytes_per_address);
+		      tdep->bytes_per_address);
   fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no");
 }
 
+void _initialize_hppa_tdep ();
 void
-_initialize_hppa_tdep (void)
+_initialize_hppa_tdep ()
 {
   gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-tdep.h ./gdb/hppa-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/hppa-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/hppa-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the HP PA-RISC architecture.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -107,7 +107,7 @@ struct gdbarch_tdep
      adjust the pc to the real caller.  This improves the behavior of commands
      that traverse frames such as "up" and "finish".  */
   void (*unwind_adjust_stub) (struct frame_info *this_frame, CORE_ADDR base,
-  			      struct trad_frame_saved_reg *saved_regs);
+			      trad_frame_saved_reg *saved_regs);
 
   /* These are solib-dependent methods.  They are really HPUX only, but
      we don't have a HPUX-specific tdep vector at the moment.  */
@@ -199,7 +199,7 @@ CORE_ADDR hppa_symbol_address(const char
 
 extern struct value *
   hppa_frame_prev_register_helper (struct frame_info *this_frame,
-				   struct trad_frame_saved_reg *saved_regs,
+				   trad_frame_saved_reg *saved_regs,
 				   int regnum);
 
 extern CORE_ADDR hppa_read_pc (struct regcache *regcache);
@@ -209,7 +209,7 @@ extern CORE_ADDR hppa_unwind_pc (struct
 
 extern struct bound_minimal_symbol
   hppa_lookup_stub_minimal_symbol (const char *name,
-                                   enum unwind_stub_types stub_type);
+				   enum unwind_stub_types stub_type);
 
 extern int hppa_in_solib_call_trampoline (struct gdbarch *gdbarch,
 					  CORE_ADDR pc);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-bsd-nat.c ./gdb/i386-bsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-bsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-bsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for modern i386 BSD's.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,6 +34,21 @@
 #include "inf-ptrace.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
+}
+
 /* In older BSD versions we cannot get at some of the segment
    registers.  FreeBSD for example didn't support the %fs and %gs
    registers until the 3.0 release.  We have autoconf checks for their
@@ -130,13 +145,13 @@ i386bsd_collect_gregset (const struct re
 void
 i386bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
 {
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  ptid_t ptid = regcache->ptid ();
 
   if (regnum == -1 || GETREGS_SUPPLIES (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"));
 
       i386bsd_supply_gregset (regcache, &regs);
@@ -149,7 +164,7 @@ i386bsd_fetch_inferior_registers (struct
     {
       register_t base;
 
-      if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_GETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't get segment register fs_base"));
 
       regcache->raw_supply (I386_FSBASE_REGNUM, &base);
@@ -162,7 +177,7 @@ i386bsd_fetch_inferior_registers (struct
     {
       register_t base;
 
-      if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_GETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't get segment register gs_base"));
 
       regcache->raw_supply (I386_GSBASE_REGNUM, &base);
@@ -184,8 +199,8 @@ i386bsd_fetch_inferior_registers (struct
 	  void *xstateregs;
 
 	  xstateregs = alloca (x86bsd_xsave_len);
-	  if (ptrace (PT_GETXSTATE, pid,
-		      (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+	  if (gdb_ptrace (PT_GETXSTATE, ptid,
+			  (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
 	    perror_with_name (_("Couldn't get extended state status"));
 
 	  i387_supply_xsave (regcache, -1, xstateregs);
@@ -195,7 +210,8 @@ i386bsd_fetch_inferior_registers (struct
       
 #ifdef HAVE_PT_GETXMMREGS
       if (have_ptrace_xmmregs != 0
-	  && ptrace(PT_GETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
+	  && gdb_ptrace(PT_GETXMMREGS, ptid,
+			(PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
 	{
 	  have_ptrace_xmmregs = 1;
 	  i387_supply_fxsave (regcache, -1, xmmregs);
@@ -204,7 +220,8 @@ i386bsd_fetch_inferior_registers (struct
 	{
 	  have_ptrace_xmmregs = 0;
 #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"));
 
 	  i387_supply_fsave (regcache, -1, &fpregs);
@@ -220,19 +237,19 @@ i386bsd_fetch_inferior_registers (struct
 void
 i386bsd_store_inferior_registers (struct regcache *regcache, int regnum)
 {
-  pid_t pid = get_ptrace_pid (regcache->ptid ());
+  ptid_t ptid = 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"));
+      if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+	perror_with_name (_("Couldn't get registers"));
 
       i386bsd_collect_gregset (regcache, &regs, regnum);
 
-      if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-        perror_with_name (_("Couldn't write registers"));
+      if (gdb_ptrace (PT_SETREGS, ptid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+	perror_with_name (_("Couldn't write registers"));
 
       if (regnum != -1)
 	return;
@@ -245,7 +262,7 @@ i386bsd_store_inferior_registers (struct
 
       regcache->raw_collect (I386_FSBASE_REGNUM, &base);
 
-      if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_SETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't write segment register fs_base"));
       if (regnum != -1)
 	return;
@@ -258,7 +275,7 @@ i386bsd_store_inferior_registers (struct
 
       regcache->raw_collect (I386_GSBASE_REGNUM, &base);
 
-      if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
+      if (gdb_ptrace (PT_SETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1)
 	perror_with_name (_("Couldn't write segment register gs_base"));
       if (regnum != -1)
 	return;
@@ -278,14 +295,14 @@ i386bsd_store_inferior_registers (struct
 	  void *xstateregs;
 
 	  xstateregs = alloca (x86bsd_xsave_len);
-	  if (ptrace (PT_GETXSTATE, pid,
-		      (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
+	  if (gdb_ptrace (PT_GETXSTATE, ptid,
+			  (PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
 	    perror_with_name (_("Couldn't get extended state status"));
 
 	  i387_collect_xsave (regcache, -1, xstateregs, 0);
 
-	  if (ptrace (PT_SETXSTATE, pid,
-		      (PTRACE_TYPE_ARG3) xstateregs, x86bsd_xsave_len) == -1)
+	  if (gdb_ptrace (PT_SETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs,
+			  x86bsd_xsave_len) == -1)
 	    perror_with_name (_("Couldn't write extended state status"));
 	  return;
 	}
@@ -293,37 +310,40 @@ i386bsd_store_inferior_registers (struct
 
 #ifdef HAVE_PT_GETXMMREGS
       if (have_ptrace_xmmregs != 0
-	  && ptrace(PT_GETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
+	  && gdb_ptrace(PT_GETXMMREGS, ptid,
+			(PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
 	{
 	  have_ptrace_xmmregs = 1;
 
 	  i387_collect_fxsave (regcache, regnum, xmmregs);
 
-	  if (ptrace (PT_SETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == -1)
-            perror_with_name (_("Couldn't write XMM registers"));
+	  if (gdb_ptrace (PT_SETXMMREGS, ptid,
+			  (PTRACE_TYPE_ARG3) xmmregs, 0) == -1)
+	    perror_with_name (_("Couldn't write XMM registers"));
 	}
       else
 	{
 	  have_ptrace_xmmregs = 0;
 #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"));
 
-          i387_collect_fsave (regcache, regnum, &fpregs);
+	  i387_collect_fsave (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"));
 #ifdef HAVE_PT_GETXMMREGS
-        }
+	}
 #endif
     }
 }
 
+void _initialize_i386bsd_nat ();
 void
-_initialize_i386bsd_nat (void)
+_initialize_i386bsd_nat ()
 {
-  int offset;
-
   /* 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
@@ -334,8 +354,6 @@ _initialize_i386bsd_nat (void)
 #define SC_REG_OFFSET i386fbsd4_sc_reg_offset
 #elif defined (__FreeBSD_version) && __FreeBSD_version >= 300005
 #define SC_REG_OFFSET i386fbsd_sc_reg_offset
-#elif defined (NetBSD) || defined (__NetBSD_Version__)
-#define SC_REG_OFFSET i386nbsd_sc_reg_offset
 #elif defined (OpenBSD)
 #define SC_REG_OFFSET i386obsd_sc_reg_offset
 #endif
@@ -354,7 +372,7 @@ _initialize_i386bsd_nat (void)
 
   /* Override the default value for the offset of the program counter
      in the sigcontext structure.  */
-  offset = offsetof (struct sigcontext, sc_pc);
+  int offset = offsetof (struct sigcontext, sc_pc);
 
   if (SC_PC_OFFSET != offset)
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-bsd-nat.h ./gdb/i386-bsd-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-bsd-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-bsd-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for modern i386 BSD's.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,8 @@
 #ifndef I386_BSD_NAT_H
 #define I386_BSD_NAT_H
 
+#include "x86-bsd-nat.h"
+
 /* Helper functions.  See definitions.  */
 extern void i386bsd_fetch_inferior_registers (struct regcache *regcache,
 					      int regnum);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-bsd-tdep.c ./gdb/i386-bsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-bsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-bsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for i386 BSD's.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-cygwin-tdep.c ./gdb/i386-cygwin-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-cygwin-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-cygwin-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,262 +0,0 @@
-/* Target-dependent code for Cygwin running on i386's, for GDB.
-
-   Copyright (C) 2003-2020 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 "i386-tdep.h"
-#include "windows-tdep.h"
-#include "regset.h"
-#include "gdb_obstack.h"
-#include "xml-support.h"
-#include "gdbcore.h"
-#include "inferior.h"
-
-/* Core file support.  */
-
-/* This vector maps GDB's idea of a register's number into an address
-   in the windows exception context vector.  */
-
-static int i386_windows_gregset_reg_offset[] =
-{
-  176, /* eax */
-  172, /* ecx */
-  168, /* edx */
-  164, /* ebx */
-
-  196, /* esp */
-  180, /* ebp */
-  160, /* esi */
-  156, /* edi */
-
-  184, /* eip */
-  192, /* eflags */
-  188, /* cs */
-  200, /* ss */
-
-  152, /* ds */
-  148, /* es */
-  144, /* fs */
-  140, /* gs */
-
-  56, /* FloatSave.RegisterArea[0 * 10] */
-  66, /* FloatSave.RegisterArea[1 * 10] */
-  76, /* FloatSave.RegisterArea[2 * 10] */
-  86, /* FloatSave.RegisterArea[3 * 10] */
-  96, /* FloatSave.RegisterArea[4 * 10] */
-  106, /* FloatSave.RegisterArea[5 * 10] */
-  116, /* FloatSave.RegisterArea[6 * 10] */
-  126, /* FloatSave.RegisterArea[7 * 10] */
-
-  28, /* FloatSave.ControlWord */
-  32, /* FloatSave.StatusWord */
-  36, /* FloatSave.TagWord */
-  44, /* FloatSave.ErrorSelector */
-  40, /* FloatSave.ErrorOffset */
-  52, /* FloatSave.DataSelector */
-  48, /* FloatSave.DataOffset */
-  44, /* FloatSave.ErrorSelector */
-
-  /* XMM0-7 */
-  364, /* ExtendedRegisters[10*16] */
-  380, /* ExtendedRegisters[11*16] */
-  396, /* ExtendedRegisters[12*16] */
-  412, /* ExtendedRegisters[13*16] */
-  428, /* ExtendedRegisters[14*16] */
-  444, /* ExtendedRegisters[15*16] */
-  460, /* ExtendedRegisters[16*16] */
-  476, /* ExtendedRegisters[17*16] */
-
-  /* MXCSR */
-  228 /* ExtendedRegisters[24] */
-};
-
-#define I386_WINDOWS_SIZEOF_GREGSET 716
-
-struct cpms_data
-{
-  struct gdbarch *gdbarch;
-  struct obstack *obstack;
-  int module_count;
-};
-
-static void
-core_process_module_section (bfd *abfd, asection *sect, void *obj)
-{
-  struct cpms_data *data = (struct cpms_data *) obj;
-  enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
-
-  char *module_name;
-  size_t module_name_size;
-  CORE_ADDR base_addr;
-
-  gdb_byte *buf = NULL;
-
-  if (!startswith (sect->name, ".module"))
-    return;
-
-  buf = (gdb_byte *) xmalloc (bfd_section_size (sect) + 1);
-  if (!buf)
-    {
-      printf_unfiltered ("memory allocation failed for %s\n", sect->name);
-      goto out;
-    }
-  if (!bfd_get_section_contents (abfd, sect,
-				 buf, 0, bfd_section_size (sect)))
-    goto out;
-
-
-
-  /* A DWORD (data_type) followed by struct windows_core_module_info.  */
-
-  base_addr =
-    extract_unsigned_integer (buf + 4, 4, byte_order);
-
-  module_name_size =
-    extract_unsigned_integer (buf + 8, 4, byte_order);
-
-  if (12 + module_name_size > bfd_section_size (sect))
-    goto out;
-  module_name = (char *) buf + 12;
-
-  /* The first module is the .exe itself.  */
-  if (data->module_count != 0)
-    windows_xfer_shared_library (module_name, base_addr,
-				 data->gdbarch, data->obstack);
-  data->module_count++;
-
-out:
-  if (buf)
-    xfree (buf);
-  return;
-}
-
-static ULONGEST
-windows_core_xfer_shared_libraries (struct gdbarch *gdbarch,
-				  gdb_byte *readbuf,
-				  ULONGEST offset, ULONGEST len)
-{
-  struct obstack obstack;
-  const char *buf;
-  ULONGEST len_avail;
-  struct cpms_data data = { gdbarch, &obstack, 0 };
-
-  obstack_init (&obstack);
-  obstack_grow_str (&obstack, "<library-list>\n");
-  bfd_map_over_sections (core_bfd,
-			 core_process_module_section,
-			 &data);
-  obstack_grow_str0 (&obstack, "</library-list>\n");
-
-  buf = (const char *) obstack_finish (&obstack);
-  len_avail = strlen (buf);
-  if (offset >= len_avail)
-    return 0;
-
-  if (len > len_avail - offset)
-    len = len_avail - offset;
-  memcpy (readbuf, buf + offset, len);
-
-  obstack_free (&obstack, NULL);
-  return len;
-}
-
-/* This is how we want PTIDs from core files to be printed.  */
-
-static std::string
-i386_windows_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
-{
-  if (ptid.lwp () != 0)
-    return string_printf ("Thread 0x%lx", ptid.lwp ());
-
-  return normal_pid_to_str (ptid);
-}
-
-static CORE_ADDR
-i386_cygwin_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
-{
-  return i386_pe_skip_trampoline_code (frame, pc, NULL);
-}
-
-static const char *
-i386_cygwin_auto_wide_charset (void)
-{
-  return "UTF-16";
-}
-
-static void
-i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  windows_init_abi (info, gdbarch);
-
-  set_gdbarch_skip_trampoline_code (gdbarch, i386_cygwin_skip_trampoline_code);
-
-  set_gdbarch_skip_main_prologue (gdbarch, i386_skip_main_prologue);
-
-  tdep->struct_return = reg_struct_return;
-
-  tdep->gregset_reg_offset = i386_windows_gregset_reg_offset;
-  tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset);
-  tdep->sizeof_gregset = I386_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, i386_windows_core_pid_to_str);
-
-  set_gdbarch_auto_wide_charset (gdbarch, i386_cygwin_auto_wide_charset);
-}
-
-static enum gdb_osabi
-i386_cygwin_osabi_sniffer (bfd *abfd)
-{
-  const char *target_name = bfd_get_target (abfd);
-
-  if (strcmp (target_name, "pei-i386") == 0)
-    return GDB_OSABI_CYGWIN;
-
-  /* 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, "elf32-i386") == 0)
-    {
-      asection *section = bfd_get_section_by_name (abfd, ".reg");
-      if (section
-	  && bfd_section_size (section) == I386_WINDOWS_SIZEOF_GREGSET)
-	return GDB_OSABI_CYGWIN;
-    }
-
-  return GDB_OSABI_UNKNOWN;
-}
-
-void
-_initialize_i386_cygwin_tdep (void)
-{
-  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
-                                  i386_cygwin_osabi_sniffer);
-
-  /* Cygwin uses elf core dumps.  */
-  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
-                                  i386_cygwin_osabi_sniffer);
-
-  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_CYGWIN,
-                          i386_cygwin_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-darwin-nat.c ./gdb/i386-darwin-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-darwin-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-darwin-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 1997-2020 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    Contributed by Apple Computer, Inc.
 
@@ -67,14 +67,14 @@ i386_darwin_nat_target::fetch_registers
   if (gdbarch_ptr_bit (gdbarch) == 64)
     {
       if (regno == -1 || amd64_native_gregset_supplies_p (gdbarch, regno))
-        {
-          x86_thread_state_t gp_regs;
-          unsigned int gp_count = x86_THREAD_STATE_COUNT;
-          kern_return_t ret;
+	{
+	  x86_thread_state_t gp_regs;
+	  unsigned int gp_count = x86_THREAD_STATE_COUNT;
+	  kern_return_t ret;
 
 	  ret = thread_get_state
-            (current_thread, x86_THREAD_STATE, (thread_state_t) & gp_regs,
-             &gp_count);
+	    (current_thread, x86_THREAD_STATE, (thread_state_t) & gp_regs,
+	     &gp_count);
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
@@ -88,18 +88,18 @@ i386_darwin_nat_target::fetch_registers
 	  gp_regs.uts.ts64.__gs &= 0xffff;
 
 	  amd64_supply_native_gregset (regcache, &gp_regs.uts, -1);
-          fetched++;
-        }
+	  fetched++;
+	}
 
       if (regno == -1 || !amd64_native_gregset_supplies_p (gdbarch, regno))
-        {
-          x86_float_state_t fp_regs;
-          unsigned int fp_count = x86_FLOAT_STATE_COUNT;
-          kern_return_t ret;
+	{
+	  x86_float_state_t fp_regs;
+	  unsigned int fp_count = x86_FLOAT_STATE_COUNT;
+	  kern_return_t ret;
 
 	  ret = thread_get_state
-            (current_thread, x86_FLOAT_STATE, (thread_state_t) & fp_regs,
-             &fp_count);
+	    (current_thread, x86_FLOAT_STATE, (thread_state_t) & fp_regs,
+	     &fp_count);
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
@@ -107,23 +107,23 @@ i386_darwin_nat_target::fetch_registers
 				 (unsigned long) current_thread);
 	      MACH_CHECK_ERROR (ret);
 	    }
-          amd64_supply_fxsave (regcache, -1, &fp_regs.ufs.fs64.__fpu_fcw);
-          fetched++;
-        }
+	  amd64_supply_fxsave (regcache, -1, &fp_regs.ufs.fs64.__fpu_fcw);
+	  fetched++;
+	}
     }
   else
 #endif
     {
       if (regno == -1 || regno < I386_NUM_GREGS)
-        {
-          x86_thread_state32_t gp_regs;
-          unsigned int gp_count = x86_THREAD_STATE32_COUNT;
-          kern_return_t ret;
+	{
+	  x86_thread_state32_t gp_regs;
+	  unsigned int gp_count = x86_THREAD_STATE32_COUNT;
+	  kern_return_t ret;
 	  int i;
 
 	  ret = thread_get_state
-            (current_thread, x86_THREAD_STATE32, (thread_state_t) &gp_regs,
-             &gp_count);
+	    (current_thread, x86_THREAD_STATE32, (thread_state_t) &gp_regs,
+	     &gp_count);
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
@@ -135,19 +135,19 @@ i386_darwin_nat_target::fetch_registers
 	    regcache->raw_supply
 	      (i, (char *) &gp_regs + i386_darwin_thread_state_reg_offset[i]);
 
-          fetched++;
-        }
+	  fetched++;
+	}
 
       if (regno == -1
 	  || (regno >= I386_ST0_REGNUM && regno < I386_SSE_NUM_REGS))
-        {
-          x86_float_state32_t fp_regs;
-          unsigned int fp_count = x86_FLOAT_STATE32_COUNT;
-          kern_return_t ret;
+	{
+	  x86_float_state32_t fp_regs;
+	  unsigned int fp_count = x86_FLOAT_STATE32_COUNT;
+	  kern_return_t ret;
 
 	  ret = thread_get_state
-            (current_thread, x86_FLOAT_STATE32, (thread_state_t) &fp_regs,
-             &fp_count);
+	    (current_thread, x86_FLOAT_STATE32, (thread_state_t) &fp_regs,
+	     &fp_count);
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
@@ -155,9 +155,9 @@ i386_darwin_nat_target::fetch_registers
 				 (unsigned long) current_thread);
 	      MACH_CHECK_ERROR (ret);
 	    }
-          i387_supply_fxsave (regcache, -1, &fp_regs.__fpu_fcw);
-          fetched++;
-        }
+	  i387_supply_fxsave (regcache, -1, &fp_regs.__fpu_fcw);
+	  fetched++;
+	}
     }
 
   if (! fetched)
@@ -182,17 +182,17 @@ i386_darwin_nat_target::store_registers
   if (gdbarch_ptr_bit (gdbarch) == 64)
     {
       if (regno == -1 || amd64_native_gregset_supplies_p (gdbarch, regno))
-        {
-          x86_thread_state_t gp_regs;
-          kern_return_t ret;
+	{
+	  x86_thread_state_t gp_regs;
+	  kern_return_t ret;
 	  unsigned int gp_count = x86_THREAD_STATE_COUNT;
 
 	  ret = thread_get_state
 	    (current_thread, x86_THREAD_STATE, (thread_state_t) &gp_regs,
 	     &gp_count);
-          MACH_CHECK_ERROR (ret);
+	  MACH_CHECK_ERROR (ret);
 	  gdb_assert (gp_regs.tsh.flavor == x86_THREAD_STATE64);
-          gdb_assert (gp_regs.tsh.count == x86_THREAD_STATE64_COUNT);
+	  gdb_assert (gp_regs.tsh.count == x86_THREAD_STATE64_COUNT);
 
 	  amd64_collect_native_gregset (regcache, &gp_regs.uts, regno);
 
@@ -200,24 +200,24 @@ i386_darwin_nat_target::store_registers
 	  gp_regs.uts.ts64.__fs &= 0xffff;
 	  gp_regs.uts.ts64.__gs &= 0xffff;
 
-          ret = thread_set_state (current_thread, x86_THREAD_STATE,
-                                  (thread_state_t) &gp_regs,
-                                  x86_THREAD_STATE_COUNT);
-          MACH_CHECK_ERROR (ret);
-        }
+	  ret = thread_set_state (current_thread, x86_THREAD_STATE,
+				  (thread_state_t) &gp_regs,
+				  x86_THREAD_STATE_COUNT);
+	  MACH_CHECK_ERROR (ret);
+	}
 
       if (regno == -1 || !amd64_native_gregset_supplies_p (gdbarch, regno))
-        {
-          x86_float_state_t fp_regs;
-          kern_return_t ret;
+	{
+	  x86_float_state_t fp_regs;
+	  kern_return_t ret;
 	  unsigned int fp_count = x86_FLOAT_STATE_COUNT;
 
 	  ret = thread_get_state
 	    (current_thread, x86_FLOAT_STATE, (thread_state_t) & fp_regs,
 	     &fp_count);
-          MACH_CHECK_ERROR (ret);
-          gdb_assert (fp_regs.fsh.flavor == x86_FLOAT_STATE64);
-          gdb_assert (fp_regs.fsh.count == x86_FLOAT_STATE64_COUNT);
+	  MACH_CHECK_ERROR (ret);
+	  gdb_assert (fp_regs.fsh.flavor == x86_FLOAT_STATE64);
+	  gdb_assert (fp_regs.fsh.count == x86_FLOAT_STATE64_COUNT);
 
 	  amd64_collect_fxsave (regcache, regno, &fp_regs.ufs.fs64.__fpu_fcw);
 
@@ -225,21 +225,21 @@ i386_darwin_nat_target::store_registers
 				  (thread_state_t) & fp_regs,
 				  x86_FLOAT_STATE_COUNT);
 	  MACH_CHECK_ERROR (ret);
-        }
+	}
     }
   else
 #endif
     {
       if (regno == -1 || regno < I386_NUM_GREGS)
-        {
-          x86_thread_state32_t gp_regs;
-          kern_return_t ret;
-          unsigned int gp_count = x86_THREAD_STATE32_COUNT;
+	{
+	  x86_thread_state32_t gp_regs;
+	  kern_return_t ret;
+	  unsigned int gp_count = x86_THREAD_STATE32_COUNT;
 	  int i;
 
-          ret = thread_get_state
-            (current_thread, x86_THREAD_STATE32, (thread_state_t) &gp_regs,
-             &gp_count);
+	  ret = thread_get_state
+	    (current_thread, x86_THREAD_STATE32, (thread_state_t) &gp_regs,
+	     &gp_count);
 	  MACH_CHECK_ERROR (ret);
 
 	  for (i = 0; i < I386_NUM_GREGS; i++)
@@ -247,22 +247,22 @@ i386_darwin_nat_target::store_registers
 	      regcache->raw_collect
 		(i, (char *) &gp_regs + i386_darwin_thread_state_reg_offset[i]);
 
-          ret = thread_set_state (current_thread, x86_THREAD_STATE32,
-                                  (thread_state_t) &gp_regs,
-                                  x86_THREAD_STATE32_COUNT);
-          MACH_CHECK_ERROR (ret);
-        }
+	  ret = thread_set_state (current_thread, x86_THREAD_STATE32,
+				  (thread_state_t) &gp_regs,
+				  x86_THREAD_STATE32_COUNT);
+	  MACH_CHECK_ERROR (ret);
+	}
 
       if (regno == -1
 	  || (regno >= I386_ST0_REGNUM && regno < I386_SSE_NUM_REGS))
-        {
-          x86_float_state32_t fp_regs;
-          unsigned int fp_count = x86_FLOAT_STATE32_COUNT;
-          kern_return_t ret;
+	{
+	  x86_float_state32_t fp_regs;
+	  unsigned int fp_count = x86_FLOAT_STATE32_COUNT;
+	  kern_return_t ret;
 
 	  ret = thread_get_state
-            (current_thread, x86_FLOAT_STATE32, (thread_state_t) & fp_regs,
-             &fp_count);
+	    (current_thread, x86_FLOAT_STATE32, (thread_state_t) & fp_regs,
+	     &fp_count);
 	  MACH_CHECK_ERROR (ret);
 
 	  i387_collect_fxsave (regcache, regno, &fp_regs.__fpu_fcw);
@@ -271,7 +271,7 @@ i386_darwin_nat_target::store_registers
 				  (thread_state_t) &fp_regs,
 				  x86_FLOAT_STATE32_COUNT);
 	  MACH_CHECK_ERROR (ret);
-        }
+	}
     }
 }
 
@@ -293,7 +293,7 @@ i386_darwin_dr_set (int regnum, CORE_ADD
   dr_regs.dsh.count = x86_DEBUG_STATE_COUNT;
   dr_count = x86_DEBUG_STATE_COUNT;
   ret = thread_get_state (current_thread, x86_DEBUG_STATE,
-                          (thread_state_t) &dr_regs, &dr_count);
+			  (thread_state_t) &dr_regs, &dr_count);
   MACH_CHECK_ERROR (ret);
 
   switch (dr_regs.dsh.flavor)
@@ -361,7 +361,7 @@ i386_darwin_dr_set (int regnum, CORE_ADD
     }
 
   ret = thread_set_state (current_thread, dr_regs.dsh.flavor,
-                          (thread_state_t) &dr_regs.uds, dr_count);
+			  (thread_state_t) &dr_regs.uds, dr_count);
 
   MACH_CHECK_ERROR (ret);
 }
@@ -382,7 +382,7 @@ i386_darwin_dr_get (int regnum)
   dr_regs.dsh.count = x86_DEBUG_STATE_COUNT;
   dr_count = x86_DEBUG_STATE_COUNT;
   ret = thread_get_state (current_thread, x86_DEBUG_STATE,
-                          (thread_state_t) &dr_regs, &dr_count);
+			  (thread_state_t) &dr_regs, &dr_count);
   MACH_CHECK_ERROR (ret);
 
   switch (dr_regs.dsh.flavor)
@@ -479,7 +479,6 @@ darwin_check_osabi (darwin_inferior *inf
     {
       /* Attaching to a process.  Let's figure out what kind it is.  */
       x86_thread_state_t gp_regs;
-      struct gdbarch_info info;
       unsigned int gp_count = x86_THREAD_STATE_COUNT;
       kern_return_t ret;
 
@@ -491,7 +490,7 @@ darwin_check_osabi (darwin_inferior *inf
 	  return;
 	}
 
-      gdbarch_info_init (&info);
+      gdbarch_info info;
       gdbarch_info_fill (&info);
       info.byte_order = gdbarch_byte_order (target_gdbarch ());
       info.osabi = GDB_OSABI_DARWIN;
@@ -633,8 +632,9 @@ darwin_set_sstep (thread_t thread, int e
     }
 }
 
+void _initialize_i386_darwin_nat ();
 void
-_initialize_i386_darwin_nat (void)
+_initialize_i386_darwin_nat ()
 {
 #ifdef BFD64
   amd64_native_gregset64_reg_offset = amd64_darwin_thread_state_reg_offset;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-darwin-tdep.c ./gdb/i386-darwin-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-darwin-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-darwin-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Darwin support for GDB, the GNU debugger.
-   Copyright (C) 1997-2020 Free Software Foundation, Inc.
+   Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    Contributed by Apple Computer, Inc.
 
@@ -34,7 +34,7 @@
 #include "i386-darwin-tdep.h"
 #include "solib.h"
 #include "solib-darwin.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include <algorithm>
 
 /* Offsets into the struct i386_thread_state where we'll find the saved regs.
@@ -109,8 +109,8 @@ darwin_dwarf_signal_frame_p (struct gdba
 static int
 i386_m128_p (struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)
-          && TYPE_LENGTH (type) == 16);
+  return (type->code () == TYPE_CODE_ARRAY && type->is_vector ()
+	  && TYPE_LENGTH (type) == 16);
 }
 
 /* Return the alignment for TYPE when passed as an argument.  */
@@ -121,25 +121,25 @@ i386_darwin_arg_type_alignment (struct t
   type = check_typedef (type);
   /* According to Mac OS X ABI document (passing arguments):
      6.  The caller places 64-bit vectors (__m64) on the parameter area,
-         aligned to 8-byte boundaries.
+	 aligned to 8-byte boundaries.
      7.  [...]  The caller aligns 128-bit vectors in the parameter area to
-         16-byte boundaries.  */
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))
+	 16-byte boundaries.  */
+  if (type->code () == TYPE_CODE_ARRAY && type->is_vector ())
     return TYPE_LENGTH (type);
   /* 4.  The caller places all the fields of structures (or unions) with no
-         vector elements in the parameter area.  These structures are 4-byte
-         aligned.
+	 vector elements in the parameter area.  These structures are 4-byte
+	 aligned.
      5.  The caller places structures with vector elements on the stack,
-         16-byte aligned.  */
-  if (TYPE_CODE (type) == TYPE_CODE_STRUCT
-      || TYPE_CODE (type) == TYPE_CODE_UNION)
+	 16-byte aligned.  */
+  if (type->code () == TYPE_CODE_STRUCT
+      || type->code () == TYPE_CODE_UNION)
     {
       int i;
       int res = 4;
-      for (i = 0; i < TYPE_NFIELDS (type); i++)
+      for (i = 0; i < type->num_fields (); i++)
 	{
 	  int align
-	    = i386_darwin_arg_type_alignment (TYPE_FIELD_TYPE (type, i));
+	    = i386_darwin_arg_type_alignment (type->field (i).type ());
 
 	  res = std::max (res, align);
 	}
@@ -178,41 +178,41 @@ i386_darwin_push_dummy_call (struct gdba
 	      store_unsigned_integer (buf, 4, byte_order, struct_addr);
 	      write_memory (sp, buf, 4);
 	    }
-          args_space += 4;
+	  args_space += 4;
 	}
 
       for (i = 0; i < nargs; i++)
 	{
-          struct type *arg_type = value_enclosing_type (args[i]);
+	  struct type *arg_type = value_enclosing_type (args[i]);
 
-          if (i386_m128_p (arg_type) && num_m128 < 4)
-            {
-              if (write_pass)
-                {
-                  const gdb_byte *val = value_contents_all (args[i]);
-                  regcache->raw_write (I387_MM0_REGNUM(tdep) + num_m128, val);
-                }
-              num_m128++;
-            }
-          else
-            {
-              args_space = align_up (args_space,
+	  if (i386_m128_p (arg_type) && num_m128 < 4)
+	    {
+	      if (write_pass)
+		{
+		  const gdb_byte *val = value_contents_all (args[i]);
+		  regcache->raw_write (I387_MM0_REGNUM(tdep) + num_m128, val);
+		}
+	      num_m128++;
+	    }
+	  else
+	    {
+	      args_space = align_up (args_space,
 				     i386_darwin_arg_type_alignment (arg_type));
-              if (write_pass)
-                write_memory (sp + args_space,
-                              value_contents_all (args[i]),
+	      if (write_pass)
+		write_memory (sp + args_space,
+			      value_contents_all (args[i]),
 			      TYPE_LENGTH (arg_type));
 
-              /* The System V ABI says that:
-                 
-                 "An argument's size is increased, if necessary, to make it a
-                 multiple of [32-bit] words.  This may require tail padding,
-                 depending on the size of the argument."
-                 
-                 This makes sure the stack stays word-aligned.  */
-              args_space += align_up (TYPE_LENGTH (arg_type), 4);
-            }
-        }
+	      /* The System V ABI says that:
+		 
+		 "An argument's size is increased, if necessary, to make it a
+		 multiple of [32-bit] words.  This may require tail padding,
+		 depending on the size of the argument."
+		 
+		 This makes sure the stack stays word-aligned.  */
+	      args_space += align_up (TYPE_LENGTH (arg_type), 4);
+	    }
+	}
 
       /* Darwin i386 ABI:
 	 1.  The caller ensures that the stack is 16-byte aligned at the point
@@ -286,11 +286,12 @@ i386_mach_o_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_i386_darwin_tdep ();
 void
-_initialize_i386_darwin_tdep (void)
+_initialize_i386_darwin_tdep ()
 {
   gdbarch_register_osabi_sniffer (bfd_arch_unknown, bfd_target_mach_o_flavour,
-                                  i386_mach_o_osabi_sniffer);
+				  i386_mach_o_osabi_sniffer);
 
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_i386_i386,
 			  GDB_OSABI_DARWIN, i386_darwin_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-darwin-tdep.h ./gdb/i386-darwin-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-darwin-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-darwin-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Darwin x86.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-dicos-tdep.c ./gdb/i386-dicos-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-dicos-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-dicos-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for DICOS running on i386's, for GDB.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -41,12 +41,13 @@ i386_dicos_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_i386_dicos_tdep ();
 void
-_initialize_i386_dicos_tdep (void)
+_initialize_i386_dicos_tdep ()
 {
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
-                                  i386_dicos_osabi_sniffer);
+				  i386_dicos_osabi_sniffer);
 
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_DICOS,
-                          i386_dicos_init_abi);
+			  i386_dicos_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-fbsd-nat.c ./gdb/i386-fbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-fbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-fbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for FreeBSD/i386.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -73,14 +73,14 @@ i386_fbsd_nat_target::resume (ptid_t pti
       ULONGEST eflags;
 
       /* Workaround for a bug in FreeBSD.  Make sure that the trace
- 	 flag is off when doing a continue.  There is a code path
- 	 through the kernel which leaves the flag set when it should
- 	 have been cleared.  If a process has a signal pending (such
- 	 as SIGALRM) and we do a PT_STEP, the process never really has
- 	 a chance to run because the kernel needs to notify the
- 	 debugger that a signal is being sent.  Therefore, the process
- 	 never goes through the kernel's trap() function which would
- 	 normally clear it.  */
+	 flag is off when doing a continue.  There is a code path
+	 through the kernel which leaves the flag set when it should
+	 have been cleared.  If a process has a signal pending (such
+	 as SIGALRM) and we do a PT_STEP, the process never really has
+	 a chance to run because the kernel needs to notify the
+	 debugger that a signal is being sent.  Therefore, the process
+	 never goes through the kernel's trap() function which would
+	 normally clear it.  */
 
       regcache_cooked_read_unsigned (regcache, I386_EFLAGS_REGNUM,
 				     &eflags);
@@ -174,8 +174,9 @@ i386_fbsd_nat_target::supports_stopped_b
 }
 #endif
 
+void _initialize_i386fbsd_nat ();
 void
-_initialize_i386fbsd_nat (void)
+_initialize_i386fbsd_nat ()
 {
   add_inf_child_target (&the_i386_fbsd_nat_target);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-fbsd-tdep.c ./gdb/i386-fbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-fbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-fbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD/i386.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -30,6 +30,7 @@
 #include "i387-tdep.h"
 #include "fbsd-tdep.h"
 #include "solib-svr4.h"
+#include "inferior.h"
 
 /* Support for signal handlers.  */
 
@@ -134,8 +135,8 @@ i386fbsd_sigtramp_p (struct frame_info *
   const gdb_byte *middle, *end;
 
   /* Look for a matching start.  */
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-				 sizeof i386fbsd_sigtramp_start))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+				 {buf, sizeof i386fbsd_sigtramp_start}))
     return 0;
   if (memcmp (buf, i386fbsd_sigtramp_start, sizeof i386fbsd_sigtramp_start)
       == 0)
@@ -161,23 +162,23 @@ i386fbsd_sigtramp_p (struct frame_info *
   /* Since the end is shorter than the middle, check for a matching end
      next.  */
   pc += sizeof i386fbsd_sigtramp_start;
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-				 sizeof i386fbsd_sigtramp_end))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+				 {buf, sizeof i386fbsd_sigtramp_end}))
     return 0;
   if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) == 0)
     return 1;
 
   /* If the end didn't match, check for a matching middle.  */
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-				 sizeof i386fbsd_sigtramp_middle))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+				 {buf, sizeof i386fbsd_sigtramp_middle}))
     return 0;
   if (memcmp (buf, middle, sizeof i386fbsd_sigtramp_middle) != 0)
     return 0;
 
   /* The middle matched, check for a matching end.  */
   pc += sizeof i386fbsd_sigtramp_middle;
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-				 sizeof i386fbsd_sigtramp_end))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+				 {buf, sizeof i386fbsd_sigtramp_end}))
     return 0;
   if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) != 0)
     return 0;
@@ -332,7 +333,8 @@ i386fbsd_get_thread_local_address (struc
   if (tdep->fsbase_regnum == -1)
     error (_("Unable to fetch %%gsbase"));
 
-  regcache = get_thread_arch_regcache (ptid, gdbarch);
+  regcache = get_thread_arch_regcache (current_inferior ()->process_target (),
+				       ptid, gdbarch);
 
   target_fetch_registers (regcache, tdep->fsbase_regnum + 1);
 
@@ -449,8 +451,9 @@ i386fbsd4_init_abi (struct gdbarch_info
 					i386fbsd_get_thread_local_address);
 }
 
+void _initialize_i386fbsd_tdep ();
 void
-_initialize_i386fbsd_tdep (void)
+_initialize_i386fbsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD,
 			  i386fbsd4_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-fbsd-tdep.h ./gdb/i386-fbsd-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-fbsd-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-fbsd-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for FreeBSD x86.
 
-   Copyright (C) 2015-2020 Free Software Foundation, Inc.
+   Copyright (C) 2015-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-gnu-nat.c ./gdb/i386-gnu-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-gnu-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-gnu-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low level interface to i386 running the GNU Hurd.
 
-   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+   Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -230,7 +230,7 @@ i386_gnu_nat_target::store_registers (st
 	}
 
       /* Save the T bit.  We might try to restore the %eflags register
-         below, but changing the T bit would seriously confuse GDB.  */
+	 below, but changing the T bit would seriously confuse GDB.  */
       trace = ((struct i386_thread_state *)state)->efl & 0x100;
 
       if (!was_aborted && was_valid)
@@ -425,8 +425,9 @@ i386_gnu_dr_get_control (void)
 }
 #endif /* i386_DEBUG_STATE */
 
+void _initialize_i386gnu_nat ();
 void
-_initialize_i386gnu_nat (void)
+_initialize_i386gnu_nat ()
 {
 #ifdef i386_DEBUG_STATE
   x86_dr_low.set_control = i386_gnu_dr_set_control;
@@ -438,6 +439,8 @@ _initialize_i386gnu_nat (void)
   x86_set_debug_register_length (4);
 #endif /* i386_DEBUG_STATE */
 
+  gnu_target = &the_i386_gnu_nat_target;
+
   /* Register the target.  */
   add_inf_child_target (&the_i386_gnu_nat_target);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-gnu-tdep.c ./gdb/i386-gnu-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-gnu-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-gnu-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Target-dependent code for the GNU Hurd.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -17,11 +17,138 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "gdbcore.h"
 #include "osabi.h"
 #include "solib-svr4.h"
 
 #include "i386-tdep.h"
 
+/* Recognizing signal handler frames.  */
+
+/* When the GNU/Hurd libc calls a signal handler, the return address points
+   inside the trampoline assembly snippet.
+
+   If the trampoline function name can not be identified, we resort to reading
+   memory from the process in order to identify it.  */
+
+static const gdb_byte gnu_sigtramp_code[] =
+{
+/* rpc_wait_trampoline: */
+  0xb8, 0xe7, 0xff, 0xff, 0xff,			/* mov    $-25,%eax */
+  0x9a, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,	/* lcall  $7,$0 */
+  0x89, 0x01,					/* movl   %eax, (%ecx) */
+  0x89, 0xdc,					/* movl   %ebx, %esp */
+
+/* trampoline: */
+  0xff, 0xd2,					/* call   *%edx */
+/* RA HERE */
+  0x83, 0xc4, 0x0c,				/* addl   $12, %esp */
+  0xc3,						/* ret */
+
+/* firewall: */
+  0xf4,						/* hlt */
+};
+
+#define GNU_SIGTRAMP_LEN (sizeof gnu_sigtramp_code)
+#define GNU_SIGTRAMP_TAIL 5			/* length of tail after RA */
+
+/* If THIS_FRAME is a sigtramp routine, return the address of the
+   start of the routine.  Otherwise, return 0.  */
+
+static CORE_ADDR
+i386_gnu_sigtramp_start (struct frame_info *this_frame)
+{
+  CORE_ADDR pc = get_frame_pc (this_frame);
+  gdb_byte buf[GNU_SIGTRAMP_LEN];
+
+  if (!safe_frame_unwind_memory (this_frame,
+				 pc + GNU_SIGTRAMP_TAIL - GNU_SIGTRAMP_LEN,
+				 buf))
+    return 0;
+
+  if (memcmp (buf, gnu_sigtramp_code, GNU_SIGTRAMP_LEN) != 0)
+    return 0;
+
+  return pc;
+}
+
+/* Return whether THIS_FRAME corresponds to a GNU/Linux sigtramp
+   routine.  */
+
+static int
+i386_gnu_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);
+
+  /* If we have a NAME, we can check for the trampoline function */
+  if (name != NULL && strcmp (name, "trampoline") == 0)
+    return 1;
+
+  return i386_gnu_sigtramp_start (this_frame) != 0;
+}
+
+/* Offset to sc_i386_thread_state in sigcontext, from <bits/sigcontext.h>.  */
+#define I386_GNU_SIGCONTEXT_THREAD_STATE_OFFSET 20
+
+/* Assuming THIS_FRAME is a GNU/Linux sigtramp routine, return the
+   address of the associated sigcontext structure.  */
+
+static CORE_ADDR
+i386_gnu_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 pc;
+  CORE_ADDR sp;
+  gdb_byte buf[4];
+
+  get_frame_register (this_frame, I386_ESP_REGNUM, buf);
+  sp = extract_unsigned_integer (buf, 4, byte_order);
+
+  pc = i386_gnu_sigtramp_start (this_frame);
+  if (pc)
+    {
+      CORE_ADDR sigcontext_addr;
+
+      /* The sigcontext structure address is passed as the third argument to
+	 the signal handler. */
+      read_memory (sp + 8, buf, 4);
+      sigcontext_addr = extract_unsigned_integer (buf, 4, byte_order);
+      return sigcontext_addr + I386_GNU_SIGCONTEXT_THREAD_STATE_OFFSET;
+    }
+
+  error (_("Couldn't recognize signal trampoline."));
+  return 0;
+}
+
+/* Mapping between the general-purpose registers in `struct
+   sigcontext' format (starting at sc_i386_thread_state)
+   and GDB's register cache layout.  */
+
+/* From <bits/sigcontext.h>.  */
+static int i386_gnu_sc_reg_offset[] =
+{
+  11 * 4,			/* %eax */
+  10 * 4,			/* %ecx */
+  9 * 4,			/* %edx */
+  8 * 4,			/* %ebx */
+  7 * 4,			/* %esp */
+  6 * 4,			/* %ebp */
+  5 * 4,			/* %esi */
+  4 * 4,			/* %edi */
+  12 * 4,			/* %eip */
+  14 * 4,			/* %eflags */
+  13 * 4,			/* %cs */
+  16 * 4,			/* %ss */
+  3 * 4,			/* %ds */
+  2 * 4,			/* %es */
+  1 * 4,			/* %fs */
+  0 * 4				/* %gs */
+};
+
 /* From <sys/ucontext.h>.  */
 static int i386gnu_gregset_reg_offset[] =
 {
@@ -59,10 +186,16 @@ i386gnu_init_abi (struct gdbarch_info in
   tdep->sizeof_gregset = 19 * 4;
 
   tdep->jb_pc_offset = 20;	/* From <bits/setjmp.h>.  */
+
+  tdep->sigtramp_p = i386_gnu_sigtramp_p;
+  tdep->sigcontext_addr = i386_gnu_sigcontext_addr;
+  tdep->sc_reg_offset = i386_gnu_sc_reg_offset;
+  tdep->sc_num_regs = ARRAY_SIZE (i386_gnu_sc_reg_offset);
 }
 
+void _initialize_i386gnu_tdep ();
 void
-_initialize_i386gnu_tdep (void)
+_initialize_i386gnu_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_HURD, i386gnu_init_abi);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-go32-tdep.c ./gdb/i386-go32-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-go32-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-go32-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for DJGPP/i386.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -62,6 +62,7 @@ i386_coff_osabi_sniffer (bfd *abfd)
 }
 
 
+void _initialize_i386_go32_tdep ();
 void
 _initialize_i386_go32_tdep ()
 {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-nat.c ./gdb/i386-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for GNU/Linux i386.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -215,7 +215,7 @@ fetch_regs (struct regcache *regcache, i
       if (errno == EIO)
 	{
 	  /* The kernel we're running on doesn't support the GETREGS
-             request.  Reset `have_ptrace_getregs'.  */
+	     request.  Reset `have_ptrace_getregs'.  */
 	  have_ptrace_getregs = 0;
 	  return;
 	}
@@ -657,7 +657,7 @@ i386_linux_nat_target::low_resume (ptid_
 
   if (step)
     {
-      struct regcache *regcache = get_thread_regcache (ptid);
+      struct regcache *regcache = get_thread_regcache (this, ptid);
       struct gdbarch *gdbarch = regcache->arch ();
       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
       ULONGEST pc;
@@ -669,12 +669,12 @@ i386_linux_nat_target::low_resume (ptid_
 				     gdbarch_pc_regnum (gdbarch), &pc);
 
       /* Returning from a signal trampoline is done by calling a
-         special system call (sigreturn or rt_sigreturn, see
-         i386-linux-tdep.c for more information).  This system call
-         restores the registers that were saved when the signal was
-         raised, including %eflags.  That means that single-stepping
-         won't work.  Instead, we'll have to modify the signal context
-         that's about to be restored, and set the trace flag there.  */
+	 special system call (sigreturn or rt_sigreturn, see
+	 i386-linux-tdep.c for more information).  This system call
+	 restores the registers that were saved when the signal was
+	 raised, including %eflags.  That means that single-stepping
+	 won't work.  Instead, we'll have to modify the signal context
+	 that's about to be restored, and set the trace flag there.  */
 
       /* First check if PC is at a system call.  */
       if (target_read_memory (pc, buf, LINUX_SYSCALL_LEN) == 0
@@ -698,7 +698,7 @@ i386_linux_nat_target::low_resume (ptid_
 		addr = sp;
 
 	      /* Set the trace flag in the context that's about to be
-                 restored.  */
+		 restored.  */
 	      addr += LINUX_SIGCONTEXT_EFLAGS_OFFSET;
 	      read_memory (addr, (gdb_byte *) &eflags, 4);
 	      eflags |= 0x0100;
@@ -711,8 +711,9 @@ i386_linux_nat_target::low_resume (ptid_
     perror_with_name (("ptrace"));
 }
 
+void _initialize_i386_linux_nat ();
 void
-_initialize_i386_linux_nat (void)
+_initialize_i386_linux_nat ()
 {
   linux_target = &the_i386_linux_nat_target;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-nat.h ./gdb/i386-linux-nat.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-nat.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-linux-nat.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for GNU/Linux i386.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-tdep.c ./gdb/i386-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux i386.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,7 +26,7 @@
 #include "inferior.h"
 #include "osabi.h"
 #include "reggroups.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "i386-tdep.h"
 #include "i386-linux-tdep.h"
 #include "linux-tdep.h"
@@ -36,6 +36,7 @@
 #include "symtab.h"
 #include "arch-utils.h"
 #include "xml-syscall.h"
+#include "infrun.h"
 
 #include "i387-tdep.h"
 #include "gdbsupport/x86-xstate.h"
@@ -133,7 +134,7 @@ i386_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, LINUX_SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (buf[0] != LINUX_SIGTRAMP_INSN0)
@@ -154,7 +155,7 @@ i386_linux_sigtramp_start (struct frame_
 
       pc -= adjust;
 
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, LINUX_SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
 	return 0;
     }
 
@@ -201,7 +202,7 @@ i386_linux_rt_sigtramp_start (struct fra
      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, LINUX_RT_SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (buf[0] != LINUX_RT_SIGTRAMP_INSN0)
@@ -211,8 +212,8 @@ i386_linux_rt_sigtramp_start (struct fra
 
       pc -= LINUX_RT_SIGTRAMP_OFFSET1;
 
-      if (!safe_frame_unwind_memory (this_frame, pc, buf,
-				     LINUX_RT_SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc,
+				     buf))
 	return 0;
     }
 
@@ -387,19 +388,19 @@ i386_canonicalize_syscall (int syscall)
 
 #define SIG_CODE_BONDARY_FAULT 3
 
-/* i386 GNU/Linux implementation of the handle_segmentation_fault
+/* i386 GNU/Linux implementation of the report_signal_info
    gdbarch hook.  Displays information related to MPX bound
    violations.  */
 void
-i386_linux_handle_segmentation_fault (struct gdbarch *gdbarch,
-				      struct ui_out *uiout)
+i386_linux_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout,
+			       enum gdb_signal siggnal)
 {
   /* -Wmaybe-uninitialized  */
   CORE_ADDR lower_bound = 0, upper_bound = 0, access = 0;
   int is_upper;
   long sig_code = 0;
 
-  if (!i386_mpx_enabled ())
+  if (!i386_mpx_enabled () || siggnal != GDB_SIGNAL_SEGV)
     return;
 
   try
@@ -408,11 +409,11 @@ i386_linux_handle_segmentation_fault (st
       sig_code = parse_and_eval_long ("$_siginfo.si_code\n");
 
       lower_bound
-        = parse_and_eval_long ("$_siginfo._sifields._sigfault._addr_bnd._lower");
+	= parse_and_eval_long ("$_siginfo._sifields._sigfault._addr_bnd._lower");
       upper_bound
-        = parse_and_eval_long ("$_siginfo._sifields._sigfault._addr_bnd._upper");
+	= parse_and_eval_long ("$_siginfo._sifields._sigfault._addr_bnd._upper");
       access
-        = parse_and_eval_long ("$_siginfo._sifields._sigfault.si_addr");
+	= parse_and_eval_long ("$_siginfo._sifields._sigfault.si_addr");
     }
   catch (const gdb_exception &exception)
     {
@@ -466,7 +467,7 @@ i386_linux_intx80_sysenter_syscall_recor
   if (syscall_gdb < 0)
     {
       printf_unfiltered (_("Process record and replay target doesn't "
-                           "support syscall number %s\n"), 
+			   "support syscall number %s\n"), 
 			 plongest (syscall_native));
       return -1;
     }
@@ -496,8 +497,8 @@ i386_linux_intx80_sysenter_syscall_recor
 
 static int
 i386_linux_record_signal (struct gdbarch *gdbarch,
-                          struct regcache *regcache,
-                          enum gdb_signal signal)
+			  struct regcache *regcache,
+			  enum gdb_signal signal)
 {
   ULONGEST esp;
 
@@ -788,29 +789,30 @@ i386_linux_iterate_over_regset_sections
    PC should get relocated back to its vDSO address.  Hide the 'ret'
    instruction by 'nop' so that i386_displaced_step_fixup is not confused.
    
-   It is not fully correct as the bytes in struct displaced_step_closure will
-   not match the inferior code.  But we would need some new flag in
-   displaced_step_closure otherwise to keep the state that syscall is finishing
-   for the later i386_displaced_step_fixup execution as the syscall execution
-   is already no longer detectable there.  The new flag field would mean
-   i386-linux-tdep.c needs to wrap all the displacement methods of i386-tdep.c
-   which does not seem worth it.  The same effect is achieved by patching that
-   'nop' instruction there instead.  */
+   It is not fully correct as the bytes in struct
+   displaced_step_copy_insn_closure will not match the inferior code.  But we
+   would need some new flag in displaced_step_copy_insn_closure otherwise to
+   keep the state that syscall is finishing for the later
+   i386_displaced_step_fixup execution as the syscall execution is already no
+   longer detectable there.  The new flag field would mean i386-linux-tdep.c
+   needs to wrap all the displacement methods of i386-tdep.c which does not seem
+   worth it.  The same effect is achieved by patching that 'nop' instruction
+   there instead.  */
 
-static struct displaced_step_closure *
+static displaced_step_copy_insn_closure_up
 i386_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
 				     CORE_ADDR from, CORE_ADDR to,
 				     struct regcache *regs)
 {
-  displaced_step_closure *closure_
+  displaced_step_copy_insn_closure_up closure_
     =  i386_displaced_step_copy_insn (gdbarch, from, to, regs);
 
   if (i386_linux_get_syscall_number_from_regcache (regs) != -1)
     {
       /* The closure returned by i386_displaced_step_copy_insn is simply a
 	 buffer with a copy of the instruction. */
-      i386_displaced_step_closure *closure
-	= (i386_displaced_step_closure *) closure_;
+      i386_displaced_step_copy_insn_closure *closure
+	= (i386_displaced_step_copy_insn_closure *) closure_.get ();
 
       /* Fake nop.  */
       closure->buf[0] = 0x90;
@@ -830,7 +832,7 @@ i386_linux_init_abi (struct gdbarch_info
 
   gdb_assert (tdesc_data);
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 1);
 
   /* GNU/Linux uses ELF.  */
   i386_elf_init_abi (info, gdbarch);
@@ -1051,7 +1053,7 @@ i386_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);
 
   /* Core file support.  */
   set_gdbarch_iterate_over_regset_sections
@@ -1061,23 +1063,21 @@ i386_linux_init_abi (struct gdbarch_info
 
   /* Displaced stepping.  */
   set_gdbarch_displaced_step_copy_insn (gdbarch,
-                                        i386_linux_displaced_step_copy_insn);
+					i386_linux_displaced_step_copy_insn);
   set_gdbarch_displaced_step_fixup (gdbarch, i386_displaced_step_fixup);
-  set_gdbarch_displaced_step_location (gdbarch,
-                                       linux_displaced_step_location);
 
   /* Functions for 'catch syscall'.  */
   set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_I386);
   set_gdbarch_get_syscall_number (gdbarch,
-                                  i386_linux_get_syscall_number);
+				  i386_linux_get_syscall_number);
 
   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);
 }
 
+void _initialize_i386_linux_tdep ();
 void
-_initialize_i386_linux_tdep (void)
+_initialize_i386_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_LINUX,
 			  i386_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-tdep.h ./gdb/i386-linux-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-linux-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-linux-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for GNU/Linux x86.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -39,14 +39,15 @@ extern uint64_t i386_linux_core_read_xcr
 
 /* Handle and display information related to the MPX bound violation
    to the user.  */
-extern void i386_linux_handle_segmentation_fault (struct gdbarch *gdbarch,
-						  struct ui_out *uiout);
+extern void i386_linux_report_signal_info (struct gdbarch *gdbarch,
+					   struct ui_out *uiout,
+					   enum gdb_signal siggnal);
 
 /* Return the target description according to XCR0.  */
 extern const struct target_desc *i386_linux_read_description (uint64_t xcr0);
 
 /* Format of XSAVE extended state is:
- 	struct
+	struct
 	{
 	  fxsave_bytes[0..463]
 	  sw_usable_bytes[464..511]
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-nbsd-nat.c ./gdb/i386-nbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-nbsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-nbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,83 +0,0 @@
-/* Native-dependent code for NetBSD/i386.
-
-   Copyright (C) 2004-2020 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 "regcache.h"
-#include "target.h"
-
-#include "i386-tdep.h"
-#include "i386-bsd-nat.h"
-
-/* Support for debugging kernel virtual memory images.  */
-
-#include <sys/types.h>
-#include <machine/frame.h>
-#include <machine/pcb.h>
-
-#include "nbsd-nat.h"
-#include "bsd-kvm.h"
-
-static int
-i386nbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
-{
-  struct switchframe sf;
-
-  /* The following is true for NetBSD 1.6.2:
-
-     The pcb contains %esp and %ebp at the point of the context switch
-     in cpu_switch().  At that point we have a stack frame as
-     described by `struct switchframe', which for NetBSD 1.6.2 has the
-     following layout:
-
-     interrupt level
-     %edi
-     %esi
-     %ebx
-     %eip
-
-     we reconstruct the register state as it would look when we just
-     returned from cpu_switch().  */
-
-  /* The stack pointer shouldn't be zero.  */
-  if (pcb->pcb_esp == 0)
-    return 0;
-
-  read_memory (pcb->pcb_esp, (gdb_byte *)&sf, sizeof sf);
-  pcb->pcb_esp += sizeof (struct switchframe);
-  regcache->raw_supply (I386_EDI_REGNUM, &sf.sf_edi);
-  regcache->raw_supply (I386_ESI_REGNUM, &sf.sf_esi);
-  regcache->raw_supply (I386_EBP_REGNUM, &pcb->pcb_ebp);
-  regcache->raw_supply (I386_ESP_REGNUM, &pcb->pcb_esp);
-  regcache->raw_supply (I386_EBX_REGNUM, &sf.sf_ebx);
-  regcache->raw_supply (I386_EIP_REGNUM, &sf.sf_eip);
-
-  return 1;
-}
-
-static i386_bsd_nat_target<nbsd_nat_target> the_i386_nbsd_nat_target;
-
-void
-_initialize_i386nbsd_nat (void)
-{
-  add_inf_child_target (&the_i386_nbsd_nat_target);
-
-  /* Support debugging kernel virtual memory images.  */
-  bsd_kvm_add_target (i386nbsd_supply_pcb);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-nbsd-tdep.c ./gdb/i386-nbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-nbsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-nbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,429 +0,0 @@
-/* Target-dependent code for NetBSD/i386.
-
-   Copyright (C) 1988-2020 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 "regcache.h"
-#include "regset.h"
-#include "osabi.h"
-#include "symtab.h"
-#include "trad-frame.h"
-#include "tramp-frame.h"
-
-#include "i386-tdep.h"
-#include "i387-tdep.h"
-#include "nbsd-tdep.h"
-#include "solib-svr4.h"
-
-/* From <machine/reg.h>.  */
-static int i386nbsd_r_reg_offset[] =
-{
-  0 * 4,			/* %eax */
-  1 * 4,			/* %ecx */
-  2 * 4,			/* %edx */
-  3 * 4,			/* %ebx */
-  4 * 4,			/* %esp */
-  5 * 4,			/* %ebp */
-  6 * 4,			/* %esi */
-  7 * 4,			/* %edi */
-  8 * 4,			/* %eip */
-  9 * 4,			/* %eflags */
-  10 * 4,			/* %cs */
-  11 * 4,			/* %ss */
-  12 * 4,			/* %ds */
-  13 * 4,			/* %es */
-  14 * 4,			/* %fs */
-  15 * 4			/* %gs */
-};
-
-/* From <machine/signal.h>.  */
-int i386nbsd_sc_reg_offset[] =
-{
-  10 * 4,			/* %eax */
-  9 * 4,			/* %ecx */
-  8 * 4,			/* %edx */
-  7 * 4,			/* %ebx */
-  14 * 4,			/* %esp */
-  6 * 4,			/* %ebp */
-  5 * 4,			/* %esi */
-  4 * 4,			/* %edi */
-  11 * 4,			/* %eip */
-  13 * 4,			/* %eflags */
-  12 * 4,			/* %cs */
-  15 * 4,			/* %ss */
-  3 * 4,			/* %ds */
-  2 * 4,			/* %es */
-  1 * 4,			/* %fs */
-  0 * 4				/* %gs */
-};
-
-/* From <machine/mcontext.h>.  */
-int i386nbsd_mc_reg_offset[] =
-{
-  11 * 4,			/* %eax */
-  10 * 4,			/* %ecx */
-  9 * 4,			/* %edx */
-  8 * 4,			/* %ebx */
-  7 * 4,			/* %esp */
-  6 * 4,			/* %ebp */
-  5 * 4,			/* %esi */
-  4 * 4,			/* %edi */
-  14 * 4,			/* %eip */
-  16 * 4,			/* %eflags */
-  15 * 4,			/* %cs */
-  18 * 4,			/* %ss */
-  3 * 4,			/* %ds */
-  2 * 4,			/* %es */
-  1 * 4,			/* %fs */
-  0 * 4				/* %gs */
-};
-
-static void i386nbsd_sigtramp_cache_init (const struct tramp_frame *,
-					  struct frame_info *,
-					  struct trad_frame_cache *,
-					  CORE_ADDR);
-
-static const struct tramp_frame i386nbsd_sigtramp_sc16 =
-{
-  SIGTRAMP_FRAME,
-  1,
-  {
-   /* leal  0x10(%esp), %eax */
-   { 0x8d, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x10, ULONGEST_MAX },
-
-   /* pushl %eax */
-   { 0x50, ULONGEST_MAX },
-
-   /* pushl %eax */
-   { 0x50, ULONGEST_MAX },
-
-   /* movl  $0x127, %eax		# __sigreturn14 */
-   { 0xb8, ULONGEST_MAX },
-   { 0x27, ULONGEST_MAX },
-   {0x01, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-
-   /* movl  $0x1, %eax		# exit */
-   { 0xb8, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-
-   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
-  },
-  i386nbsd_sigtramp_cache_init
-};
-
-static const struct tramp_frame i386nbsd_sigtramp_sc2 =
-{
-  SIGTRAMP_FRAME,
-  1,
-  {
-   /* leal  0x0c(%esp), %eax */
-   { 0x8d, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x0c, ULONGEST_MAX },
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x127, %eax		# __sigreturn14 */
-   { 0xb8, ULONGEST_MAX },
-   { 0x27, ULONGEST_MAX },
-   {0x01, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x1, %eax */
-   { 0xb8, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
-  },
-  i386nbsd_sigtramp_cache_init
-};
-
-static const struct tramp_frame i386nbsd_sigtramp_si2 =
-{
-  SIGTRAMP_FRAME,
-  1,
-  {
-   /* movl  8(%esp),%eax */
-   { 0x8b, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x08, ULONGEST_MAX },
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x134, %eax            # setcontext */
-   { 0xb8, ULONGEST_MAX },
-   { 0x34, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX },
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x1, %eax */
-   { 0xb8, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX },
-   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
-  },
-  i386nbsd_sigtramp_cache_init
-};
-
-static const struct tramp_frame i386nbsd_sigtramp_si31 =
-{
-  SIGTRAMP_FRAME,
-  1,
-  {
-   /* leal  0x8c(%esp), %eax */
-   { 0x8d, ULONGEST_MAX },
-   { 0x84, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x8c, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x134, %eax            # setcontext */
-   { 0xb8, ULONGEST_MAX },
-   { 0x34, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x1, %eax */
-   { 0xb8, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
-  },
-  i386nbsd_sigtramp_cache_init
-};
-
-static const struct tramp_frame i386nbsd_sigtramp_si4 =
-{
-  SIGTRAMP_FRAME,
-  1,
-  {
-   /* leal  0x8c(%esp), %eax */
-   { 0x8d, ULONGEST_MAX },
-   { 0x84, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x8c, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   /* movl  %eax, 0x4(%esp) */
-   { 0x89, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   /* movl  $0x134, %eax            # setcontext */
-   { 0xb8, ULONGEST_MAX },
-   { 0x34, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   { 0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-   /* movl   $0xffffffff,0x4(%esp) */
-   { 0xc7, ULONGEST_MAX },
-   { 0x44, ULONGEST_MAX },
-   { 0x24, ULONGEST_MAX },
-   { 0x04, ULONGEST_MAX },
-   { 0xff, ULONGEST_MAX },
-   { 0xff, ULONGEST_MAX },
-   { 0xff, ULONGEST_MAX },
-   { 0xff, ULONGEST_MAX },
-   /* movl  $0x1, %eax */
-   { 0xb8, ULONGEST_MAX },
-   { 0x01, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   {0x00, ULONGEST_MAX },
-   /* int   $0x80 */
-   { 0xcd, ULONGEST_MAX },
-   { 0x80, ULONGEST_MAX},
-   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
-  },
-  i386nbsd_sigtramp_cache_init
-};
-
-static void
-i386nbsd_sigtramp_cache_init (const struct tramp_frame *self,
-			      struct frame_info *this_frame,
-			      struct trad_frame_cache *this_cache,
-			      CORE_ADDR func)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, I386_ESP_REGNUM);
-  CORE_ADDR base;
-  int *reg_offset;
-  int num_regs;
-  int i;
-
-  if (self == &i386nbsd_sigtramp_sc16 || self == &i386nbsd_sigtramp_sc2)
-    {
-      reg_offset = i386nbsd_sc_reg_offset;
-      num_regs = ARRAY_SIZE (i386nbsd_sc_reg_offset);
-
-      /* Read in the sigcontext address.  */
-      base = read_memory_unsigned_integer (sp + 8, 4, byte_order);
-    }
-  else
-    {
-      reg_offset = i386nbsd_mc_reg_offset;
-      num_regs = ARRAY_SIZE (i386nbsd_mc_reg_offset);
-
-      /* Read in the ucontext address.  */
-      base = read_memory_unsigned_integer (sp + 8, 4, byte_order);
-      /* offsetof(ucontext_t, uc_mcontext) == 36 */
-      base += 36;
-    }
-
-  for (i = 0; i < num_regs; i++)
-    if (reg_offset[i] != -1)
-      trad_frame_set_reg_addr (this_cache, i, base + reg_offset[i]);
-
-  /* Construct the frame ID using the function start.  */
-  trad_frame_set_id (this_cache, frame_id_build (sp, func));
-}
-
-
-static void 
-i386nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  /* Obviously NetBSD is BSD-based.  */
-  i386bsd_init_abi (info, gdbarch);
-
-  /* NetBSD has a different `struct reg'.  */
-  tdep->gregset_reg_offset = i386nbsd_r_reg_offset;
-  tdep->gregset_num_regs = ARRAY_SIZE (i386nbsd_r_reg_offset);
-  tdep->sizeof_gregset = 16 * 4;
-
-  /* NetBSD uses -freg-struct-return by default.  */
-  tdep->struct_return = reg_struct_return;
-
-  /* NetBSD uses tramp_frame sniffers for signal trampolines.  */
-  tdep->sigcontext_addr= 0;
-  tdep->sigtramp_start = 0;
-  tdep->sigtramp_end = 0;
-  tdep->sigtramp_p = 0;
-  tdep->sc_reg_offset = 0;
-  tdep->sc_num_regs = 0;
-
-  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_sc16);
-  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_sc2);
-  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_si2);
-  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_si31);
-  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_si4);
-}
-
-/* NetBSD ELF.  */
-
-static void
-i386nbsdelf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  /* It's still NetBSD.  */
-  i386nbsd_init_abi (info, gdbarch);
-
-  /* But ELF-based.  */
-  i386_elf_init_abi (info, gdbarch);
-
-  /* NetBSD ELF uses SVR4-style shared libraries.  */
-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
-
-  /* NetBSD ELF uses -fpcc-struct-return by default.  */
-  tdep->struct_return = pcc_struct_return;
-}
-
-void
-_initialize_i386nbsd_tdep (void)
-{
-  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD,
-			  i386nbsdelf_init_abi);
-}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-netbsd-nat.c ./gdb/i386-netbsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-netbsd-nat.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/i386-netbsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,84 @@
+/* Native-dependent code for NetBSD/i386.
+
+   Copyright (C) 2004-2021 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 "regcache.h"
+#include "target.h"
+
+#include "i386-tdep.h"
+#include "i386-bsd-nat.h"
+
+/* Support for debugging kernel virtual memory images.  */
+
+#include <sys/types.h>
+#include <machine/frame.h>
+#include <machine/pcb.h>
+
+#include "netbsd-nat.h"
+#include "bsd-kvm.h"
+
+static int
+i386nbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
+{
+  struct switchframe sf;
+
+  /* The following is true for NetBSD 1.6.2:
+
+     The pcb contains %esp and %ebp at the point of the context switch
+     in cpu_switch().  At that point we have a stack frame as
+     described by `struct switchframe', which for NetBSD 1.6.2 has the
+     following layout:
+
+     interrupt level
+     %edi
+     %esi
+     %ebx
+     %eip
+
+     we reconstruct the register state as it would look when we just
+     returned from cpu_switch().  */
+
+  /* The stack pointer shouldn't be zero.  */
+  if (pcb->pcb_esp == 0)
+    return 0;
+
+  read_memory (pcb->pcb_esp, (gdb_byte *)&sf, sizeof sf);
+  pcb->pcb_esp += sizeof (struct switchframe);
+  regcache->raw_supply (I386_EDI_REGNUM, &sf.sf_edi);
+  regcache->raw_supply (I386_ESI_REGNUM, &sf.sf_esi);
+  regcache->raw_supply (I386_EBP_REGNUM, &pcb->pcb_ebp);
+  regcache->raw_supply (I386_ESP_REGNUM, &pcb->pcb_esp);
+  regcache->raw_supply (I386_EBX_REGNUM, &sf.sf_ebx);
+  regcache->raw_supply (I386_EIP_REGNUM, &sf.sf_eip);
+
+  return 1;
+}
+
+static i386_bsd_nat_target<nbsd_nat_target> the_i386_nbsd_nat_target;
+
+void _initialize_i386nbsd_nat ();
+void
+_initialize_i386nbsd_nat ()
+{
+  add_inf_child_target (&the_i386_nbsd_nat_target);
+
+  /* Support debugging kernel virtual memory images.  */
+  bsd_kvm_add_target (i386nbsd_supply_pcb);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-netbsd-tdep.c ./gdb/i386-netbsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-netbsd-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/i386-netbsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,432 @@
+/* Target-dependent code for NetBSD/i386.
+
+   Copyright (C) 1988-2021 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 "regcache.h"
+#include "regset.h"
+#include "osabi.h"
+#include "symtab.h"
+#include "trad-frame.h"
+#include "tramp-frame.h"
+
+#include "i386-tdep.h"
+#include "i387-tdep.h"
+#include "netbsd-tdep.h"
+#include "solib-svr4.h"
+
+/* From <machine/reg.h>.  */
+static int i386nbsd_r_reg_offset[] =
+{
+  0 * 4,			/* %eax */
+  1 * 4,			/* %ecx */
+  2 * 4,			/* %edx */
+  3 * 4,			/* %ebx */
+  4 * 4,			/* %esp */
+  5 * 4,			/* %ebp */
+  6 * 4,			/* %esi */
+  7 * 4,			/* %edi */
+  8 * 4,			/* %eip */
+  9 * 4,			/* %eflags */
+  10 * 4,			/* %cs */
+  11 * 4,			/* %ss */
+  12 * 4,			/* %ds */
+  13 * 4,			/* %es */
+  14 * 4,			/* %fs */
+  15 * 4			/* %gs */
+};
+
+/* From <machine/signal.h>.  */
+static int i386nbsd_sc_reg_offset[] =
+{
+  10 * 4,			/* %eax */
+  9 * 4,			/* %ecx */
+  8 * 4,			/* %edx */
+  7 * 4,			/* %ebx */
+  14 * 4,			/* %esp */
+  6 * 4,			/* %ebp */
+  5 * 4,			/* %esi */
+  4 * 4,			/* %edi */
+  11 * 4,			/* %eip */
+  13 * 4,			/* %eflags */
+  12 * 4,			/* %cs */
+  15 * 4,			/* %ss */
+  3 * 4,			/* %ds */
+  2 * 4,			/* %es */
+  1 * 4,			/* %fs */
+  0 * 4				/* %gs */
+};
+
+/* From <machine/mcontext.h>.  */
+static int i386nbsd_mc_reg_offset[] =
+{
+  11 * 4,			/* %eax */
+  10 * 4,			/* %ecx */
+  9 * 4,			/* %edx */
+  8 * 4,			/* %ebx */
+  7 * 4,			/* %esp */
+  6 * 4,			/* %ebp */
+  5 * 4,			/* %esi */
+  4 * 4,			/* %edi */
+  14 * 4,			/* %eip */
+  16 * 4,			/* %eflags */
+  15 * 4,			/* %cs */
+  18 * 4,			/* %ss */
+  3 * 4,			/* %ds */
+  2 * 4,			/* %es */
+  1 * 4,			/* %fs */
+  0 * 4				/* %gs */
+};
+
+static void i386nbsd_sigtramp_cache_init (const struct tramp_frame *,
+					  struct frame_info *,
+					  struct trad_frame_cache *,
+					  CORE_ADDR);
+
+static const struct tramp_frame i386nbsd_sigtramp_sc16 =
+{
+  SIGTRAMP_FRAME,
+  1,
+  {
+   /* leal  0x10(%esp), %eax */
+   { 0x8d, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x10, ULONGEST_MAX },
+
+   /* pushl %eax */
+   { 0x50, ULONGEST_MAX },
+
+   /* pushl %eax */
+   { 0x50, ULONGEST_MAX },
+
+   /* movl  $0x127, %eax		# __sigreturn14 */
+   { 0xb8, ULONGEST_MAX },
+   { 0x27, ULONGEST_MAX },
+   {0x01, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+
+   /* movl  $0x1, %eax		# exit */
+   { 0xb8, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+
+   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+  },
+  i386nbsd_sigtramp_cache_init
+};
+
+static const struct tramp_frame i386nbsd_sigtramp_sc2 =
+{
+  SIGTRAMP_FRAME,
+  1,
+  {
+   /* leal  0x0c(%esp), %eax */
+   { 0x8d, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x0c, ULONGEST_MAX },
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x127, %eax		# __sigreturn14 */
+   { 0xb8, ULONGEST_MAX },
+   { 0x27, ULONGEST_MAX },
+   {0x01, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x1, %eax */
+   { 0xb8, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+  },
+  i386nbsd_sigtramp_cache_init
+};
+
+static const struct tramp_frame i386nbsd_sigtramp_si2 =
+{
+  SIGTRAMP_FRAME,
+  1,
+  {
+   /* movl  8(%esp),%eax */
+   { 0x8b, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x08, ULONGEST_MAX },
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x134, %eax            # setcontext */
+   { 0xb8, ULONGEST_MAX },
+   { 0x34, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX },
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x1, %eax */
+   { 0xb8, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX },
+   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+  },
+  i386nbsd_sigtramp_cache_init
+};
+
+static const struct tramp_frame i386nbsd_sigtramp_si31 =
+{
+  SIGTRAMP_FRAME,
+  1,
+  {
+   /* leal  0x8c(%esp), %eax */
+   { 0x8d, ULONGEST_MAX },
+   { 0x84, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x8c, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x134, %eax            # setcontext */
+   { 0xb8, ULONGEST_MAX },
+   { 0x34, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x1, %eax */
+   { 0xb8, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+  },
+  i386nbsd_sigtramp_cache_init
+};
+
+static const struct tramp_frame i386nbsd_sigtramp_si4 =
+{
+  SIGTRAMP_FRAME,
+  1,
+  {
+   /* leal  0x8c(%esp), %eax */
+   { 0x8d, ULONGEST_MAX },
+   { 0x84, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x8c, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   /* movl  %eax, 0x4(%esp) */
+   { 0x89, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   /* movl  $0x134, %eax            # setcontext */
+   { 0xb8, ULONGEST_MAX },
+   { 0x34, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   { 0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+   /* movl   $0xffffffff,0x4(%esp) */
+   { 0xc7, ULONGEST_MAX },
+   { 0x44, ULONGEST_MAX },
+   { 0x24, ULONGEST_MAX },
+   { 0x04, ULONGEST_MAX },
+   { 0xff, ULONGEST_MAX },
+   { 0xff, ULONGEST_MAX },
+   { 0xff, ULONGEST_MAX },
+   { 0xff, ULONGEST_MAX },
+   /* movl  $0x1, %eax */
+   { 0xb8, ULONGEST_MAX },
+   { 0x01, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   {0x00, ULONGEST_MAX },
+   /* int   $0x80 */
+   { 0xcd, ULONGEST_MAX },
+   { 0x80, ULONGEST_MAX},
+   { TRAMP_SENTINEL_INSN, ULONGEST_MAX }
+  },
+  i386nbsd_sigtramp_cache_init
+};
+
+static void
+i386nbsd_sigtramp_cache_init (const struct tramp_frame *self,
+			      struct frame_info *this_frame,
+			      struct trad_frame_cache *this_cache,
+			      CORE_ADDR func)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame, I386_ESP_REGNUM);
+  CORE_ADDR base;
+  int *reg_offset;
+  int num_regs;
+  int i;
+
+  if (self == &i386nbsd_sigtramp_sc16 || self == &i386nbsd_sigtramp_sc2)
+    {
+      reg_offset = i386nbsd_sc_reg_offset;
+      num_regs = ARRAY_SIZE (i386nbsd_sc_reg_offset);
+
+      /* Read in the sigcontext address.  */
+      base = read_memory_unsigned_integer (sp + 8, 4, byte_order);
+    }
+  else
+    {
+      reg_offset = i386nbsd_mc_reg_offset;
+      num_regs = ARRAY_SIZE (i386nbsd_mc_reg_offset);
+
+      /* Read in the ucontext address.  */
+      base = read_memory_unsigned_integer (sp + 8, 4, byte_order);
+      /* offsetof(ucontext_t, uc_mcontext) == 36 */
+      base += 36;
+    }
+
+  for (i = 0; i < num_regs; i++)
+    if (reg_offset[i] != -1)
+      trad_frame_set_reg_addr (this_cache, i, base + reg_offset[i]);
+
+  /* Construct the frame ID using the function start.  */
+  trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
+
+
+static void 
+i386nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  /* Obviously NetBSD is BSD-based.  */
+  i386bsd_init_abi (info, gdbarch);
+
+  nbsd_init_abi (info, gdbarch);
+
+  /* NetBSD has a different `struct reg'.  */
+  tdep->gregset_reg_offset = i386nbsd_r_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (i386nbsd_r_reg_offset);
+  tdep->sizeof_gregset = 16 * 4;
+
+  /* NetBSD uses -freg-struct-return by default.  */
+  tdep->struct_return = reg_struct_return;
+
+  /* NetBSD uses tramp_frame sniffers for signal trampolines.  */
+  tdep->sigcontext_addr= 0;
+  tdep->sigtramp_start = 0;
+  tdep->sigtramp_end = 0;
+  tdep->sigtramp_p = 0;
+  tdep->sc_reg_offset = 0;
+  tdep->sc_num_regs = 0;
+
+  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_sc16);
+  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_sc2);
+  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_si2);
+  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_si31);
+  tramp_frame_prepend_unwinder (gdbarch, &i386nbsd_sigtramp_si4);
+}
+
+/* NetBSD ELF.  */
+
+static void
+i386nbsdelf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  /* It's still NetBSD.  */
+  i386nbsd_init_abi (info, gdbarch);
+
+  /* But ELF-based.  */
+  i386_elf_init_abi (info, gdbarch);
+
+  /* NetBSD ELF uses SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
+
+  /* NetBSD ELF uses -fpcc-struct-return by default.  */
+  tdep->struct_return = pcc_struct_return;
+}
+
+void _initialize_i386nbsd_tdep ();
+void
+_initialize_i386nbsd_tdep ()
+{
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD,
+			  i386nbsdelf_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-nto-tdep.c ./gdb/i386-nto-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-nto-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-nto-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for QNX Neutrino x86.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Contributed by QNX Software Systems Ltd.
 
@@ -161,7 +161,7 @@ i386nto_register_area (struct gdbarch *g
 	  if (first_four)
 	    {
 	      /* fpu_control_word, fpu_status_word, fpu_tag_word, fpu_operand
-	         registers.  */
+		 registers.  */
 	      regsize = 2; /* Two bytes each.  */
 	      off_adjust = 0;
 	      regno_base = I387_FCTRL_REGNUM (tdep);
@@ -351,15 +351,15 @@ i386nto_init_abi (struct gdbarch_info in
 
       /* Our loader handles solib relocations differently than svr4.  */
       nto_svr4_so_ops.relocate_section_addresses
-        = nto_relocate_section_addresses;
+	= nto_relocate_section_addresses;
 
       /* Supply a nice function to find our solibs.  */
       nto_svr4_so_ops.find_and_open_solib
-        = nto_find_and_open_solib;
+	= nto_find_and_open_solib;
 
       /* Our linker code is in libc.  */
       nto_svr4_so_ops.in_dynsym_resolve_code
-        = nto_in_dynsym_resolve_code;
+	= nto_in_dynsym_resolve_code;
     }
   set_solib_ops (gdbarch, &nto_svr4_so_ops);
 
@@ -367,8 +367,9 @@ i386nto_init_abi (struct gdbarch_info in
   set_gdbarch_wchar_signed (gdbarch, 0);
 }
 
+void _initialize_i386nto_tdep ();
 void
-_initialize_i386nto_tdep (void)
+_initialize_i386nto_tdep ()
 {
   init_i386nto_ops ();
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_QNXNTO,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-obsd-nat.c ./gdb/i386-obsd-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-obsd-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-obsd-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for OpenBSD/i386.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -90,8 +90,9 @@ i386obsd_supply_pcb (struct regcache *re
 
 static i386_bsd_nat_target<obsd_nat_target> the_i386_obsd_nat_target;
 
+void _initialize_i386obsd_nat ();
 void
-_initialize_i386obsd_nat (void)
+_initialize_i386obsd_nat ()
 {
   add_inf_child_target (&i386_obsd_nat_target);
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-obsd-tdep.c ./gdb/i386-obsd-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-obsd-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-obsd-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenBSD/i386.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -99,7 +99,7 @@ i386obsd_sigtramp_p (struct frame_info *
     {
       /* If we can't read the instructions, return zero.  */
       if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
-				     buf, buflen))
+				     {buf, buflen}))
 	return 0;
 
       /* Check for sigreturn(2).  */
@@ -207,7 +207,7 @@ i386obsd_supply_uthread (struct regcache
       sp = read_memory_unsigned_integer (sp_addr, 4, 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 = i386obsd_uthread_reg_offset[I386_EIP_REGNUM] + 4;
       store_unsigned_integer (buf, 4, byte_order, sp + offset);
       regcache->raw_supply (I386_ESP_REGNUM, buf);
@@ -219,7 +219,7 @@ i386obsd_supply_uthread (struct regcache
 	  && (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, 4, byte_order);
 
@@ -248,7 +248,7 @@ i386obsd_collect_uthread (const struct r
       int offset;
 
       /* Calculate the stack pointer (frame pointer) that will be
-         stored into the thread structure.  */
+	 stored into the thread structure.  */
       offset = i386obsd_uthread_reg_offset[I386_EIP_REGNUM] + 4;
       regcache->raw_collect (I386_ESP_REGNUM, buf);
       sp = extract_unsigned_integer (buf, 4, byte_order) - offset;
@@ -257,7 +257,7 @@ i386obsd_collect_uthread (const struct r
       write_memory_unsigned_integer (sp_addr, 4, byte_order, sp);
 
       /* The stack pointer was (potentially) modified.  Make sure we
-         build a proper stack frame.  */
+	 build a proper stack frame.  */
       regnum = -1;
     }
 
@@ -267,7 +267,7 @@ i386obsd_collect_uthread (const struct r
 	  && (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, 4, byte_order);
 
@@ -391,6 +391,7 @@ i386obsd_trapframe_sniffer (const struct
 }
 
 static const struct frame_unwind i386obsd_trapframe_unwind = {
+  "i386 openbsd trap",
   /* 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.  */
@@ -443,8 +444,9 @@ i386obsd_init_abi (struct gdbarch_info i
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
 }
 
+void _initialize_i386obsd_tdep ();
 void
-_initialize_i386obsd_tdep (void)
+_initialize_i386obsd_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_OPENBSD,
 			  i386obsd_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-sol2-nat.c ./gdb/i386-sol2-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-sol2-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-sol2-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Native-dependent code for Solaris x86.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -149,21 +149,21 @@ fill_fpregset (const struct regcache *re
    and the floating-point set by:
 
    typedef struct fpregset   {
-           union {
-                   struct fpchip_state            // fp extension state //
-                   {
-                           int     state[27];     // 287/387 saved state //
-                           int     status;        // status word saved at //
-                                                  // exception //
-                   } fpchip_state;
-                   struct fp_emul_space           // for emulators //
-                   {
-                           char    fp_emul[246];
-                           char    fp_epad[2];
-                   } fp_emul_space;
-                   int     f_fpregs[62];          // union of the above //
-           } fp_reg_set;
-           long            f_wregs[33];           // saved weitek state //
+	   union {
+		   struct fpchip_state            // fp extension state //
+		   {
+			   int     state[27];     // 287/387 saved state //
+			   int     status;        // status word saved at //
+						  // exception //
+		   } fpchip_state;
+		   struct fp_emul_space           // for emulators //
+		   {
+			   char    fp_emul[246];
+			   char    fp_epad[2];
+		   } fp_emul_space;
+		   int     f_fpregs[62];          // union of the above //
+	   } fp_reg_set;
+	   long            f_wregs[33];           // saved weitek state //
    } fpregset_t;
 
    Incidentally fpchip_state contains the FPU state in the same format
@@ -178,10 +178,22 @@ fill_fpregset (const struct regcache *re
    format and GDB's register array layout.  */
 static int regmap[] =
 {
-  EAX, ECX, EDX, EBX,
-  UESP, EBP, ESI, EDI,
-  EIP, EFL, CS, SS,
-  DS, ES, FS, GS
+  11	/* EAX */,
+  10	/* ECX */,
+  9	/* EDX */,
+  8	/* EBX */,
+  17	/* UESP */,
+  6	/* EBP */,
+  5	/* ESI */,
+  4	/* EDI */,
+  14	/* EIP */,
+  16	/* EFL */,
+  15	/* CS */,
+  18	/* SS */,
+  3	/* DS */,
+  2	/* ES */,
+  1	/* FS */,
+  0	/* GS */
 };
 
 /* Fill GDB's register array with the general-purpose register values
@@ -241,8 +253,9 @@ fill_fpregset (const struct regcache *re
 
 #endif
 
+void _initialize_amd64_sol2_nat ();
 void
-_initialize_amd64_sol2_nat (void)
+_initialize_amd64_sol2_nat ()
 {
 #if PR_MODEL_NATIVE == PR_MODEL_LP64
   amd64_native_gregset32_reg_offset = amd64_sol2_gregset32_reg_offset;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-sol2-tdep.c ./gdb/i386-sol2-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-sol2-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-sol2-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for Solaris x86.
 
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -46,21 +46,6 @@ static int i386_sol2_gregset_reg_offset[
   0 * 4				/* %gs */
 };
 
-/* Return whether THIS_FRAME corresponds to a Solaris sigtramp
-   routine.  */
-
-static int
-i386_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.  */
 
@@ -75,30 +60,6 @@ i386_sol2_mcontext_addr (struct frame_in
   return ucontext_addr + 36;
 }
 
-/* SunPRO encodes the static variables.  This is not related to C++
-   mangling, it is done for C too.  */
-
-static const char *
-i386_sol2_static_transform_name (const char *name)
-{
-  if (name[0] == '.')
-    {
-      const char *p;
-
-      /* For file-local statics there will be a period, a bunch of
-         junk (the contents of which match a string given in the
-         N_OPT), a period and the name.  For function-local statics
-         there will be a bunch of junk (which seems to change the
-         second character from 'A' to 'B'), a period, the name of the
-         function, and the name.  So just skip everything before the
-         last period.  */
-      p = strrchr (name, '.');
-      if (p != NULL)
-        name = p + 1;
-    }
-  return name;
-}
-
 /* Solaris 2.  */
 
 static void
@@ -109,12 +70,7 @@ i386_sol2_init_abi (struct gdbarch_info
   /* Solaris is SVR4-based.  */
   i386_svr4_init_abi (info, gdbarch);
 
-  /* The SunPRO compiler puts out 0 instead of the address in N_SO symbols,
-     and for SunPRO 3.0, N_FUN symbols too.  */
-  set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
-
-  /* Handle SunPRO encoding of static symbols.  */
-  set_gdbarch_static_transform_name (gdbarch, i386_sol2_static_transform_name);
+  sol2_init_abi (info, gdbarch);
 
   /* Solaris reserves space for its FPU emulator in `fpregset_t'.
      There is also some space reserved for the registers of a Weitek
@@ -125,18 +81,14 @@ i386_sol2_init_abi (struct gdbarch_info
   tdep->sizeof_fpregset = 380;
 
   /* Signal trampolines are slightly different from SVR4.  */
-  tdep->sigtramp_p = i386_sol2_sigtramp_p;
+  tdep->sigtramp_p = sol2_sigtramp_p;
   tdep->sigcontext_addr = i386_sol2_mcontext_addr;
   tdep->sc_reg_offset = tdep->gregset_reg_offset;
   tdep->sc_num_regs = tdep->gregset_num_regs;
 
   /* Solaris has SVR4-style shared libraries.  */
-  set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver);
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
-
-  /* How to print LWP PTIDs from core files.  */
-  set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
 }
 
 
@@ -151,8 +103,9 @@ i386_sol2_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_UNKNOWN;
 }
 
+void _initialize_i386_sol2_tdep ();
 void
-_initialize_i386_sol2_tdep (void)
+_initialize_i386_sol2_tdep ()
 {
   /* Register an ELF OS ABI sniffer for Solaris 2 binaries.  */
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-tdep.c ./gdb/i386-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Intel 386 target-dependent stuff.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,7 @@
 #include "arch-utils.h"
 #include "command.h"
 #include "dummy-frame.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "frame.h"
 #include "frame-base.h"
 #include "frame-unwind.h"
@@ -48,6 +48,7 @@
 #include "i387-tdep.h"
 #include "gdbsupport/x86-xstate.h"
 #include "x86-tdep.h"
+#include "expop.h"
 
 #include "record.h"
 #include "record-full.h"
@@ -65,10 +66,11 @@
 #include <ctype.h>
 #include <algorithm>
 #include <unordered_set>
+#include "producer.h"
 
 /* Register names.  */
 
-static const char *i386_register_names[] =
+static const char * const i386_register_names[] =
 {
   "eax",   "ecx",    "edx",   "ebx",
   "esp",   "ebp",    "esi",   "edi",
@@ -83,56 +85,56 @@ static const char *i386_register_names[]
   "mxcsr"
 };
 
-static const char *i386_zmm_names[] =
+static const char * const i386_zmm_names[] =
 {
   "zmm0",  "zmm1",   "zmm2",  "zmm3",
   "zmm4",  "zmm5",   "zmm6",  "zmm7"
 };
 
-static const char *i386_zmmh_names[] =
+static const char * const i386_zmmh_names[] =
 {
   "zmm0h",  "zmm1h",   "zmm2h",  "zmm3h",
   "zmm4h",  "zmm5h",   "zmm6h",  "zmm7h"
 };
 
-static const char *i386_k_names[] =
+static const char * const i386_k_names[] =
 {
   "k0",  "k1",   "k2",  "k3",
   "k4",  "k5",   "k6",  "k7"
 };
 
-static const char *i386_ymm_names[] =
+static const char * const i386_ymm_names[] =
 {
   "ymm0",  "ymm1",   "ymm2",  "ymm3",
   "ymm4",  "ymm5",   "ymm6",  "ymm7",
 };
 
-static const char *i386_ymmh_names[] =
+static const char * const i386_ymmh_names[] =
 {
   "ymm0h",  "ymm1h",   "ymm2h",  "ymm3h",
   "ymm4h",  "ymm5h",   "ymm6h",  "ymm7h",
 };
 
-static const char *i386_mpx_names[] =
+static const char * const i386_mpx_names[] =
 {
   "bnd0raw", "bnd1raw", "bnd2raw", "bnd3raw", "bndcfgu", "bndstatus"
 };
 
-static const char* i386_pkeys_names[] =
+static const char * const i386_pkeys_names[] =
 {
   "pkru"
 };
 
 /* Register names for MPX pseudo-registers.  */
 
-static const char *i386_bnd_names[] =
+static const char * const i386_bnd_names[] =
 {
   "bnd0", "bnd1", "bnd2", "bnd3"
 };
 
 /* Register names for MMX pseudo-registers.  */
 
-static const char *i386_mmx_names[] =
+static const char * const i386_mmx_names[] =
 {
   "mm0", "mm1", "mm2", "mm3",
   "mm4", "mm5", "mm6", "mm7"
@@ -140,7 +142,7 @@ static const char *i386_mmx_names[] =
 
 /* Register names for byte pseudo-registers.  */
 
-static const char *i386_byte_names[] =
+static const char * const i386_byte_names[] =
 {
   "al", "cl", "dl", "bl", 
   "ah", "ch", "dh", "bh"
@@ -148,7 +150,7 @@ static const char *i386_byte_names[] =
 
 /* Register names for word pseudo-registers.  */
 
-static const char *i386_word_names[] =
+static const char * const i386_word_names[] =
 {
   "ax", "cx", "dx", "bx",
   "", "bp", "si", "di"
@@ -489,11 +491,11 @@ i386_dbx_reg_to_regnum (struct gdbarch *
   if (reg >= 0 && reg <= 7)
     {
       /* General-purpose registers.  The debug info calls %ebp
-         register 4, and %esp register 5.  */
+	 register 4, and %esp register 5.  */
       if (reg == 4)
-        return 5;
+	return 5;
       else if (reg == 5)
-        return 4;
+	return 4;
       else return reg;
     }
   else if (reg >= 12 && reg <= 19)
@@ -660,11 +662,11 @@ i386_absolute_jmp_p (const gdb_byte *ins
     {
       /* jump near, absolute indirect (/4).  */
       if ((insn[1] & 0x38) == 0x20)
-        return 1;
+	return 1;
 
       /* jump far, absolute indirect (/5).  */
       if ((insn[1] & 0x38) == 0x28)
-        return 1;
+	return 1;
     }
 
   return 0;
@@ -697,11 +699,11 @@ i386_absolute_call_p (const gdb_byte *in
     {
       /* Call near, absolute indirect (/2).  */
       if ((insn[1] & 0x38) == 0x10)
-        return 1;
+	return 1;
 
       /* Call far, absolute indirect (/3).  */
       if ((insn[1] & 0x38) == 0x18)
-        return 1;
+	return 1;
     }
 
   return 0;
@@ -798,13 +800,14 @@ i386_insn_is_jump (struct gdbarch *gdbar
 
 /* Some kernels may run one past a syscall insn, so we have to cope.  */
 
-struct displaced_step_closure *
+displaced_step_copy_insn_closure_up
 i386_displaced_step_copy_insn (struct gdbarch *gdbarch,
 			       CORE_ADDR from, CORE_ADDR to,
 			       struct regcache *regs)
 {
   size_t len = gdbarch_max_insn_length (gdbarch);
-  i386_displaced_step_closure *closure = new i386_displaced_step_closure (len);
+  std::unique_ptr<i386_displaced_step_copy_insn_closure> closure
+    (new i386_displaced_step_copy_insn_closure (len));
   gdb_byte *buf = closure->buf.data ();
 
   read_memory (from, buf, len);
@@ -823,14 +826,12 @@ i386_displaced_step_copy_insn (struct gd
 
   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 ("%s->%s: %s",
+			  paddress (gdbarch, from), paddress (gdbarch, to),
+			  displaced_step_dump_bytes (buf, len).c_str ());
 
-  return closure;
+  /* This is a work around for a problem with g++ 4.8.  */
+  return displaced_step_copy_insn_closure_up (closure.release ());
 }
 
 /* Fix up the state of registers and memory after having single-stepped
@@ -838,9 +839,9 @@ i386_displaced_step_copy_insn (struct gd
 
 void
 i386_displaced_step_fixup (struct gdbarch *gdbarch,
-                           struct displaced_step_closure *closure_,
-                           CORE_ADDR from, CORE_ADDR to,
-                           struct regcache *regs)
+			   struct displaced_step_copy_insn_closure *closure_,
+			   CORE_ADDR from, CORE_ADDR to,
+			   struct regcache *regs)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
@@ -850,18 +851,15 @@ i386_displaced_step_fixup (struct gdbarc
      applying it.  */
   ULONGEST insn_offset = to - from;
 
-  i386_displaced_step_closure *closure
-    = (i386_displaced_step_closure *) closure_;
+  i386_displaced_step_copy_insn_closure *closure
+    = (i386_displaced_step_copy_insn_closure *) closure_;
   gdb_byte *insn = closure->buf.data ();
   /* The start of the insn, needed in case we see some prefixes.  */
   gdb_byte *insn_start = insn;
 
-  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]);
 
   /* The list of issues to contend with here is taken from
      resume_execution in arch/i386/kernel/kprobes.c, Linux 2.6.20.
@@ -896,49 +894,41 @@ i386_displaced_step_fixup (struct gdbarc
       regcache_cooked_read_unsigned (regs, I386_EIP_REGNUM, &orig_eip);
 
       /* A signal trampoline system call changes the %eip, resuming
-         execution of the main program after the signal handler has
-         returned.  That makes them like 'return' instructions; we
-         shouldn't relocate %eip.
-
-         But most system calls don't, and we do need to relocate %eip.
-
-         Our heuristic for distinguishing these cases: if stepping
-         over the system call instruction left control directly after
-         the instruction, the we relocate --- control almost certainly
-         doesn't belong in the displaced copy.  Otherwise, we assume
-         the instruction has put control where it belongs, and leave
-         it unrelocated.  Goodness help us if there are PC-relative
-         system calls.  */
+	 execution of the main program after the signal handler has
+	 returned.  That makes them like 'return' instructions; we
+	 shouldn't relocate %eip.
+
+	 But most system calls don't, and we do need to relocate %eip.
+
+	 Our heuristic for distinguishing these cases: if stepping
+	 over the system call instruction left control directly after
+	 the instruction, the we relocate --- control almost certainly
+	 doesn't belong in the displaced copy.  Otherwise, we assume
+	 the instruction has put control where it belongs, and leave
+	 it unrelocated.  Goodness help us if there are PC-relative
+	 system calls.  */
       if (i386_syscall_p (insn, &insn_len)
-          && orig_eip != to + (insn - insn_start) + insn_len
+	  && orig_eip != to + (insn - insn_start) + insn_len
 	  /* GDB can get control back after the insn after the syscall.
 	     Presumably this is a kernel bug.
 	     i386_displaced_step_copy_insn ensures its a nop,
 	     we add one to the length for it.  */
-          && orig_eip != to + (insn - insn_start) + insn_len + 1)
-        {
-          if (debug_displaced)
-            fprintf_unfiltered (gdb_stdlog,
-                                "displaced: syscall changed %%eip; "
-                                "not relocating\n");
-        }
+	  && orig_eip != to + (insn - insn_start) + insn_len + 1)
+	displaced_debug_printf ("syscall changed %%eip; not relocating");
       else
-        {
-          ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL;
+	{
+	  ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL;
 
 	  /* 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, I386_EIP_REGNUM, eip);
+	  regcache_cooked_write_unsigned (regs, I386_EIP_REGNUM, eip);
 
-          if (debug_displaced)
-            fprintf_unfiltered (gdb_stdlog,
-                                "displaced: "
-                                "relocated %%eip from %s to %s\n",
-                                paddress (gdbarch, orig_eip),
-				paddress (gdbarch, eip));
-        }
+	  displaced_debug_printf ("relocated %%eip from %s to %s",
+				  paddress (gdbarch, orig_eip),
+				  paddress (gdbarch, eip));
+	}
     }
 
   /* If the instruction was PUSHFL, then the TF bit will be set in the
@@ -960,11 +950,9 @@ i386_displaced_step_fixup (struct gdbarc
       retaddr = (retaddr - insn_offset) & 0xffffffffUL;
       write_memory_unsigned_integer (esp, retaddr_len, byte_order, retaddr);
 
-      if (debug_displaced)
-        fprintf_unfiltered (gdb_stdlog,
-                            "displaced: relocated return addr at %s to %s\n",
-                            paddress (gdbarch, esp),
-                            paddress (gdbarch, retaddr));
+      displaced_debug_printf ("relocated return addr at %s to %s",
+			      paddress (gdbarch, esp),
+			      paddress (gdbarch, retaddr));
     }
 }
 
@@ -1016,12 +1004,9 @@ i386_relocate_instruction (struct gdbarc
       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);
@@ -1041,12 +1026,9 @@ i386_relocate_instruction (struct gdbarc
       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 instructions into their displaced
@@ -1145,7 +1127,7 @@ i386_follow_jump (struct gdbarch *gdbarc
 	  delta = read_memory_integer (pc + 2, 2, byte_order);
 
 	  /* Include the size of the jmp instruction (including the
-             0x66 prefix).  */
+	     0x66 prefix).  */
 	  delta += 4;
 	}
       else
@@ -1179,8 +1161,8 @@ i386_analyze_struct_return (CORE_ADDR pc
 {
   /* Functions that return a structure or union start with:
 
-        popl %eax             0x58
-        xchgl %eax, (%esp)    0x87 0x04 0x24
+	popl %eax             0x58
+	xchgl %eax, (%esp)    0x87 0x04 0x24
      or xchgl %eax, 0(%esp)   0x87 0x44 0x24 0x00
 
      (the System V compiler puts out the second `xchg' instruction,
@@ -1230,13 +1212,13 @@ i386_skip_probe (CORE_ADDR pc)
 {
   /* A function may start with
 
-        pushl constant
-        call _probe
+	pushl constant
+	call _probe
 	addl $4, %esp
 	   
      followed by
 
-        pushl %ebp
+	pushl %ebp
 
      etc.  */
   gdb_byte buf[8];
@@ -1294,8 +1276,8 @@ i386_analyze_stack_align (CORE_ADDR pc,
 
      "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[14];
@@ -1486,7 +1468,7 @@ i386_match_insn_block (CORE_ADDR pc, str
    yet, and only the scratch registers %eax, %ecx and %edx can be
    touched.  */
 
-struct i386_insn i386_frame_setup_skip_insns[] =
+static i386_insn i386_frame_setup_skip_insns[] =
 {
   /* Check for `movb imm8, r' and `movl imm32, r'.
     
@@ -1535,6 +1517,24 @@ struct i386_insn i386_frame_setup_skip_i
   { 0 }
 };
 
+/* Check whether PC points to an endbr32 instruction.  */
+static CORE_ADDR
+i386_skip_endbr (CORE_ADDR pc)
+{
+  static const gdb_byte endbr32[] = { 0xf3, 0x0f, 0x1e, 0xfb };
+
+  gdb_byte buf[sizeof (endbr32)];
+
+  /* Stop there if we can't read the code */
+  if (target_read_code (pc, buf, sizeof (endbr32)))
+    return pc;
+
+  /* If the instruction isn't an endbr32, stop */
+  if (memcmp (buf, endbr32, sizeof (endbr32)) != 0)
+    return pc;
+
+  return pc + sizeof (endbr32);
+}
 
 /* Check whether PC points to a no-op instruction.  */
 static CORE_ADDR
@@ -1812,6 +1812,7 @@ i386_analyze_prologue (struct gdbarch *g
 		       CORE_ADDR pc, CORE_ADDR current_pc,
 		       struct i386_frame_cache *cache)
 {
+  pc = i386_skip_endbr (pc);
   pc = i386_skip_noop (pc);
   pc = i386_follow_jump (gdbarch, pc);
   pc = i386_analyze_struct_return (pc, current_pc, cache);
@@ -1845,12 +1846,14 @@ i386_skip_prologue (struct gdbarch *gdba
 	= 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 ")))
+	      && (producer_is_llvm (COMPUNIT_PRODUCER (cust))
+	      || producer_is_icc_ge_19 (COMPUNIT_PRODUCER (cust)))))
         return std::max (start_pc, post_prologue_pc);
     }
  
@@ -1865,10 +1868,10 @@ i386_skip_prologue (struct gdbarch *gdba
      to get the address of the global offset table (GOT) into register
      %ebx:
 
-        call	0x0
+	call	0x0
 	popl    %ebx
-        movl    %ebx,x(%ebp)    (optional)
-        addl    y,%ebx
+	movl    %ebx,x(%ebp)    (optional)
+	addl    y,%ebx
 
      This code is with the rest of the prologue (at the end of the
      function), so we have to skip it to get to the first real
@@ -1900,7 +1903,7 @@ i386_skip_prologue (struct gdbarch *gdba
 	  else			/* Unexpected instruction.  */
 	    delta = 0;
 
-          if (target_read_code (pc + delta, &op, 1))
+	  if (target_read_code (pc + delta, &op, 1))
 	    return pc;
 	}
 
@@ -1938,20 +1941,20 @@ i386_skip_main_prologue (struct gdbarch
       gdb_byte buf[4];
 
       if (target_read_code (pc + 1, buf, sizeof buf) == 0)
- 	{
+	{
 	  /* Make sure address is computed correctly as a 32bit
 	     integer even if CORE_ADDR is 64 bit wide.  */
- 	  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);
 	  call_dest = call_dest & 0xffffffffU;
- 	  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;
@@ -2193,6 +2196,7 @@ i386_frame_prev_register (struct frame_i
 
 static const struct frame_unwind i386_frame_unwind =
 {
+  "i386 prologue",
   NORMAL_FRAME,
   i386_frame_unwind_stop_reason,
   i386_frame_this_id,
@@ -2314,6 +2318,7 @@ i386_epilogue_frame_prev_register (struc
 
 static const struct frame_unwind i386_epilogue_frame_unwind =
 {
+  "i386 epilogue",
   NORMAL_FRAME,
   i386_epilogue_frame_unwind_stop_reason,
   i386_epilogue_frame_this_id,
@@ -2332,7 +2337,7 @@ static const struct frame_unwind i386_ep
 
 /* Static chain passed in register.  */
 
-struct i386_insn i386_tramp_chain_in_reg_insns[] =
+static i386_insn i386_tramp_chain_in_reg_insns[] =
 {
   /* `movl imm32, %eax' and `movl imm32, %ecx' */
   { 5, { 0xb8 }, { 0xfe } },
@@ -2345,7 +2350,7 @@ struct i386_insn i386_tramp_chain_in_reg
 
 /* Static chain passed on stack (when regparm=3).  */
 
-struct i386_insn i386_tramp_chain_on_stack_insns[] =
+static i386_insn i386_tramp_chain_on_stack_insns[] =
 {
   /* `push imm32' */
   { 5, { 0x68 }, { 0xff } },
@@ -2395,6 +2400,7 @@ i386_stack_tramp_frame_sniffer (const st
 
 static const struct frame_unwind i386_stack_tramp_frame_unwind =
 {
+  "i386 stack tramp",
   NORMAL_FRAME,
   i386_epilogue_frame_unwind_stop_reason,
   i386_epilogue_frame_this_id,
@@ -2542,6 +2548,7 @@ i386_sigtramp_frame_sniffer (const struc
 
 static const struct frame_unwind i386_sigtramp_frame_unwind =
 {
+  "i386 sigtramp",
   SIGTRAMP_FRAME,
   i386_sigtramp_frame_unwind_stop_reason,
   i386_sigtramp_frame_this_id,
@@ -2631,19 +2638,21 @@ static int
 i386_16_byte_align_p (struct type *type)
 {
   type = check_typedef (type);
-  if ((TYPE_CODE (type) == TYPE_CODE_DECFLOAT
-       || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)))
+  if ((type->code () == TYPE_CODE_DECFLOAT
+       || (type->code () == TYPE_CODE_ARRAY && type->is_vector ()))
       && TYPE_LENGTH (type) == 16)
     return 1;
-  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+  if (type->code () == TYPE_CODE_ARRAY)
     return i386_16_byte_align_p (TYPE_TARGET_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)
     {
       int i;
-      for (i = 0; i < TYPE_NFIELDS (type); i++)
+      for (i = 0; i < type->num_fields (); i++)
 	{
-	  if (i386_16_byte_align_p (TYPE_FIELD_TYPE (type, i)))
+	  if (field_is_static (&type->field (i)))
+	    continue;
+	  if (i386_16_byte_align_p (type->field (i).type ()))
 	    return 1;
 	}
     }
@@ -2666,12 +2675,15 @@ i386_push_dummy_code (struct gdbarch *gd
   return sp - 16;
 }
 
-static CORE_ADDR
-i386_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)
+/* The "push_dummy_call" gdbarch method, optionally with the thiscall
+   calling convention.  */
+
+CORE_ADDR
+i386_thiscall_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, bool thiscall)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   gdb_byte buf[4];
@@ -2707,7 +2719,7 @@ i386_push_dummy_call (struct gdbarch *gd
 	    args_space += 4;
 	}
 
-      for (i = 0; i < nargs; i++)
+      for (i = thiscall ? 1 : 0; i < nargs; i++)
 	{
 	  int len = TYPE_LENGTH (value_enclosing_type (args[i]));
 
@@ -2759,6 +2771,10 @@ i386_push_dummy_call (struct gdbarch *gd
   /* ...and fake a frame pointer.  */
   regcache->cooked_write (I386_EBP_REGNUM, buf);
 
+  /* The 'this' pointer needs to be in ECX.  */
+  if (thiscall)
+    regcache->cooked_write (I386_ECX_REGNUM, value_contents_all (args[0]));
+
   /* MarkK wrote: This "+ 8" is all over the place:
      (i386_frame_this_id, i386_sigtramp_frame_this_id,
      i386_dummy_id).  It's there, since all frame unwinders for
@@ -2771,6 +2787,20 @@ i386_push_dummy_call (struct gdbarch *gd
   return sp + 8;
 }
 
+/* Implement the "push_dummy_call" gdbarch method.  */
+
+static CORE_ADDR
+i386_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)
+{
+  return i386_thiscall_push_dummy_call (gdbarch, function, regcache, bp_addr,
+					nargs, args, sp, return_method,
+					struct_addr, false);
+}
+
 /* These registers are used for returning integers (and on some
    targets also for returning `struct' and `union' values when their
    size and alignment match an integer type).  */
@@ -2788,7 +2818,7 @@ i386_extract_return_value (struct gdbarc
   int len = TYPE_LENGTH (type);
   gdb_byte buf[I386_MAX_REGISTER_SIZE];
 
-  if (TYPE_CODE (type) == TYPE_CODE_FLT)
+  if (type->code () == TYPE_CODE_FLT)
     {
       if (tdep->st0_regnum < 0)
 	{
@@ -2838,7 +2868,7 @@ i386_store_return_value (struct gdbarch
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   int len = TYPE_LENGTH (type);
 
-  if (TYPE_CODE (type) == TYPE_CODE_FLT)
+  if (type->code () == TYPE_CODE_FLT)
     {
       ULONGEST fstat;
       gdb_byte buf[I386_MAX_REGISTER_SIZE];
@@ -2850,8 +2880,8 @@ i386_store_return_value (struct gdbarch
 	}
 
       /* Returning floating-point values is a bit tricky.  Apart from
-         storing the return value in %st(0), we have to simulate the
-         state of the FPU at function return point.  */
+	 storing the return value in %st(0), we have to simulate the
+	 state of the FPU at function return point.  */
 
       /* Convert the value found in VALBUF to the extended
 	 floating-point format used by the FPU.  This is probably
@@ -2861,16 +2891,16 @@ i386_store_return_value (struct gdbarch
       regcache->raw_write (I386_ST0_REGNUM, buf);
 
       /* Set the top of the floating-point register stack to 7.  The
-         actual value doesn't really matter, but 7 is what a normal
-         function return would end up with if the program started out
-         with a freshly initialized FPU.  */
+	 actual value doesn't really matter, but 7 is what a normal
+	 function return would end up with if the program started out
+	 with a freshly initialized FPU.  */
       regcache_raw_read_unsigned (regcache, I387_FSTAT_REGNUM (tdep), &fstat);
       fstat |= (7 << 11);
       regcache_raw_write_unsigned (regcache, I387_FSTAT_REGNUM (tdep), fstat);
 
       /* Mark %st(1) through %st(7) as empty.  Since we set the top of
-         the floating-point register stack to 7, the appropriate value
-         for the tag word is 0x3fff.  */
+	 the floating-point register stack to 7, the appropriate value
+	 for the tag word is 0x3fff.  */
       regcache_raw_write_unsigned (regcache, I387_FTAG_REGNUM (tdep), 0x3fff);
     }
   else
@@ -2915,12 +2945,12 @@ static int
 i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  enum type_code code = TYPE_CODE (type);
+  enum type_code code = type->code ();
   int len = TYPE_LENGTH (type);
 
   gdb_assert (code == TYPE_CODE_STRUCT
-              || code == TYPE_CODE_UNION
-              || code == TYPE_CODE_ARRAY);
+	      || code == TYPE_CODE_UNION
+	      || code == TYPE_CODE_ARRAY);
 
   if (struct_convention == pcc_struct_convention
       || (struct_convention == default_struct_convention
@@ -2929,10 +2959,10 @@ i386_reg_struct_return_p (struct gdbarch
 
   /* Structures consisting of a single `float', `double' or 'long
      double' member are returned in %st(0).  */
-  if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
+  if (code == TYPE_CODE_STRUCT && type->num_fields () == 1)
     {
-      type = check_typedef (TYPE_FIELD_TYPE (type, 0));
-      if (TYPE_CODE (type) == TYPE_CODE_FLT)
+      type = check_typedef (type->field (0).type ());
+      if (type->code () == TYPE_CODE_FLT)
 	return (len == 4 || len == 8 || len == 12);
     }
 
@@ -2950,7 +2980,7 @@ i386_return_value (struct gdbarch *gdbar
 		   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 ();
 
   if (((code == TYPE_CODE_STRUCT
 	|| code == TYPE_CODE_UNION
@@ -2974,10 +3004,10 @@ i386_return_value (struct gdbarch *gdbar
 	 value just after the function has returned.  */
 
       /* Note that the ABI doesn't mention functions returning arrays,
-         which is something possible in certain languages such as Ada.
-         In this case, the value is returned as if it was wrapped in
-         a record, so the convention applied to records also applies
-         to arrays.  */
+	 which is something possible in certain languages such as Ada.
+	 In this case, the value is returned as if it was wrapped in
+	 a record, so the convention applied to records also applies
+	 to arrays.  */
 
       if (readbuf)
 	{
@@ -2997,9 +3027,9 @@ i386_return_value (struct gdbarch *gdbar
      the structure.  Since that should work for all structures that
      have only one member, we don't bother to check the member's type
      here.  */
-  if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
+  if (code == TYPE_CODE_STRUCT && type->num_fields () == 1)
     {
-      type = check_typedef (TYPE_FIELD_TYPE (type, 0));
+      type = check_typedef (type->field (0).type ());
       return i386_return_value (gdbarch, function, type, regcache,
 				readbuf, writebuf);
     }
@@ -3057,7 +3087,7 @@ i386_bnd_type (struct gdbarch *gdbarch)
       append_composite_type_field (t, "lbound", bt->builtin_data_ptr);
       append_composite_type_field (t, "ubound", bt->builtin_data_ptr);
 
-      TYPE_NAME (t) = "builtin_type_bound128";
+      t->set_name ("builtin_type_bound128");
       tdep->i386_bnd_type = t;
     }
 
@@ -3080,13 +3110,14 @@ i386_zmm_type (struct gdbarch *gdbarch)
 #if 0
       union __gdb_builtin_type_vec512i
       {
-	int128_t uint128[4];
-	int64_t v4_int64[8];
-	int32_t v8_int32[16];
-	int16_t v16_int16[32];
-	int8_t v32_int8[64];
-	double v4_double[8];
-	float v8_float[16];
+	int128_t v4_int128[4];
+	int64_t v8_int64[8];
+	int32_t v16_int32[16];
+	int16_t v32_int16[32];
+	int8_t v64_int8[64];
+	double v8_double[8];
+	float v16_float[16];
+	bfloat16_t v32_bfloat16[32];
       };
 #endif
 
@@ -3094,6 +3125,8 @@ i386_zmm_type (struct gdbarch *gdbarch)
 
       t = arch_composite_type (gdbarch,
 			       "__gdb_builtin_type_vec512i", TYPE_CODE_UNION);
+      append_composite_type_field (t, "v32_bfloat16",
+				   init_vector_type (bt->builtin_bfloat16, 32));
       append_composite_type_field (t, "v16_float",
 				   init_vector_type (bt->builtin_float, 16));
       append_composite_type_field (t, "v8_double",
@@ -3109,8 +3142,8 @@ i386_zmm_type (struct gdbarch *gdbarch)
       append_composite_type_field (t, "v4_int128",
 				   init_vector_type (bt->builtin_int128, 4));
 
-      TYPE_VECTOR (t) = 1;
-      TYPE_NAME (t) = "builtin_type_vec512i";
+      t->set_is_vector (true);
+      t->set_name ("builtin_type_vec512i");
       tdep->i386_zmm_type = t;
     }
 
@@ -3133,13 +3166,14 @@ i386_ymm_type (struct gdbarch *gdbarch)
 #if 0
       union __gdb_builtin_type_vec256i
       {
-        int128_t uint128[2];
-        int64_t v2_int64[4];
-        int32_t v4_int32[8];
-        int16_t v8_int16[16];
-        int8_t v16_int8[32];
-        double v2_double[4];
-        float v4_float[8];
+	int128_t v2_int128[2];
+	int64_t v4_int64[4];
+	int32_t v8_int32[8];
+	int16_t v16_int16[16];
+	int8_t v32_int8[32];
+	double v4_double[4];
+	float v8_float[8];
+	bfloat16_t v16_bfloat16[16];
       };
 #endif
 
@@ -3147,6 +3181,8 @@ i386_ymm_type (struct gdbarch *gdbarch)
 
       t = arch_composite_type (gdbarch,
 			       "__gdb_builtin_type_vec256i", TYPE_CODE_UNION);
+      append_composite_type_field (t, "v16_bfloat16",
+				   init_vector_type (bt->builtin_bfloat16, 16));
       append_composite_type_field (t, "v8_float",
 				   init_vector_type (bt->builtin_float, 8));
       append_composite_type_field (t, "v4_double",
@@ -3162,8 +3198,8 @@ i386_ymm_type (struct gdbarch *gdbarch)
       append_composite_type_field (t, "v2_int128",
 				   init_vector_type (bt->builtin_int128, 2));
 
-      TYPE_VECTOR (t) = 1;
-      TYPE_NAME (t) = "builtin_type_vec256i";
+      t->set_is_vector (true);
+      t->set_name ("builtin_type_vec256i");
       tdep->i386_ymm_type = t;
     }
 
@@ -3184,10 +3220,10 @@ i386_mmx_type (struct gdbarch *gdbarch)
 #if 0
       union __gdb_builtin_type_vec64i
       {
-        int64_t uint64;
-        int32_t v2_int32[2];
-        int16_t v4_int16[4];
-        int8_t v8_int8[8];
+	int64_t uint64;
+	int32_t v2_int32[2];
+	int16_t v4_int16[4];
+	int8_t v8_int8[8];
       };
 #endif
 
@@ -3204,8 +3240,8 @@ i386_mmx_type (struct gdbarch *gdbarch)
       append_composite_type_field (t, "v8_int8",
 				   init_vector_type (bt->builtin_int8, 8));
 
-      TYPE_VECTOR (t) = 1;
-      TYPE_NAME (t) = "builtin_type_vec64i";
+      t->set_is_vector (true);
+      t->set_name ("builtin_type_vec64i");
       tdep->i386_mmx_type = t;
     }
 
@@ -3751,8 +3787,10 @@ i386_register_to_value (struct frame_inf
       gdb_assert (register_size (gdbarch, regnum) == 4);
 
       if (!get_frame_register_bytes (frame, regnum, 0,
-				     register_size (gdbarch, regnum),
-				     to, optimizedp, unavailablep))
+				     gdb::make_array_view (to,
+							register_size (gdbarch,
+								       regnum)),
+				     optimizedp, unavailablep))
 	return 0;
 
       regnum = i386_next_regnum (regnum);
@@ -4037,7 +4075,7 @@ i386_stap_is_single_operand (struct gdba
    Return true if the operand was parsed successfully, false
    otherwise.  */
 
-static bool
+static expr::operation_up
 i386_stap_parse_special_token_triplet (struct gdbarch *gdbarch,
 				       struct stap_parse_info *p)
 {
@@ -4049,9 +4087,7 @@ i386_stap_parse_special_token_triplet (s
       int i;
       long displacements[3];
       const char *start;
-      char *regname;
       int len;
-      struct stoken str;
       char *endp;
 
       got_minus[0] = false;
@@ -4064,7 +4100,7 @@ i386_stap_parse_special_token_triplet (s
 	}
 
       if (!isdigit ((unsigned char) *s))
-	return false;
+	return {};
 
       displacements[0] = strtol (s, &endp, 10);
       s = endp;
@@ -4072,7 +4108,7 @@ i386_stap_parse_special_token_triplet (s
       if (*s != '+' && *s != '-')
 	{
 	  /* We are not dealing with a triplet.  */
-	  return false;
+	  return {};
 	}
 
       got_minus[1] = false;
@@ -4085,7 +4121,7 @@ i386_stap_parse_special_token_triplet (s
 	}
 
       if (!isdigit ((unsigned char) *s))
-	return false;
+	return {};
 
       displacements[1] = strtol (s, &endp, 10);
       s = endp;
@@ -4093,7 +4129,7 @@ i386_stap_parse_special_token_triplet (s
       if (*s != '+' && *s != '-')
 	{
 	  /* We are not dealing with a triplet.  */
-	  return false;
+	  return {};
 	}
 
       got_minus[2] = false;
@@ -4106,13 +4142,13 @@ i386_stap_parse_special_token_triplet (s
 	}
 
       if (!isdigit ((unsigned char) *s))
-	return false;
+	return {};
 
       displacements[2] = strtol (s, &endp, 10);
       s = endp;
 
       if (*s != '(' || s[1] != '%')
-	return false;
+	return {};
 
       s += 2;
       start = s;
@@ -4121,57 +4157,46 @@ i386_stap_parse_special_token_triplet (s
 	++s;
 
       if (*s++ != ')')
-	return false;
+	return {};
 
       len = s - start - 1;
-      regname = (char *) alloca (len + 1);
-
-      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);
 
+      LONGEST value = 0;
       for (i = 0; i < 3; i++)
 	{
-	  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, displacements[i]);
-	  write_exp_elt_opcode (&p->pstate, OP_LONG);
+	  LONGEST this_val = displacements[i];
 	  if (got_minus[i])
-	    write_exp_elt_opcode (&p->pstate, UNOP_NEG);
+	    this_val = -this_val;
+	  value += this_val;
 	}
 
-      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);
-
-      write_exp_elt_opcode (&p->pstate, UNOP_CAST);
-      write_exp_elt_type (&p->pstate,
-			  builtin_type (gdbarch)->builtin_data_ptr);
-      write_exp_elt_opcode (&p->pstate, UNOP_CAST);
-
-      write_exp_elt_opcode (&p->pstate, BINOP_ADD);
-      write_exp_elt_opcode (&p->pstate, BINOP_ADD);
-      write_exp_elt_opcode (&p->pstate, BINOP_ADD);
-
-      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 = s;
 
-      return true;
+      using namespace expr;
+
+      struct type *long_type = builtin_type (gdbarch)->builtin_long;
+      operation_up offset
+	= make_operation<long_const_operation> (long_type, value);
+
+      operation_up reg
+	= make_operation<register_operation> (std::move (regname));
+      struct type *void_ptr = builtin_type (gdbarch)->builtin_data_ptr;
+      reg = make_operation<unop_cast_operation> (std::move (reg), void_ptr);
+
+      operation_up sum
+	= make_operation<add_operation> (std::move (reg), std::move (offset));
+      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));
     }
 
-  return false;
+  return {};
 }
 
 /* Helper function for i386_stap_parse_special_token.
@@ -4183,7 +4208,7 @@ i386_stap_parse_special_token_triplet (s
    Return true if the operand was parsed successfully, false
    otherwise.  */
 
-static bool
+static expr::operation_up
 i386_stap_parse_special_token_three_arg_disp (struct gdbarch *gdbarch,
 					      struct stap_parse_info *p)
 {
@@ -4196,11 +4221,8 @@ i386_stap_parse_special_token_three_arg_
       bool size_minus = false;
       long size = 0;
       const char *start;
-      char *base;
       int len_base;
-      char *index;
       int len_index;
-      struct stoken base_token, index_token;
 
       if (*s == '+')
 	++s;
@@ -4211,7 +4233,7 @@ i386_stap_parse_special_token_three_arg_
 	}
 
       if (offset_minus && !isdigit (*s))
-	return false;
+	return {};
 
       if (isdigit (*s))
 	{
@@ -4222,7 +4244,7 @@ i386_stap_parse_special_token_three_arg_
 	}
 
       if (*s != '(' || s[1] != '%')
-	return false;
+	return {};
 
       s += 2;
       start = s;
@@ -4231,16 +4253,14 @@ i386_stap_parse_special_token_three_arg_
 	++s;
 
       if (*s != ',' || s[1] != '%')
-	return false;
+	return {};
 
       len_base = s - start;
-      base = (char *) alloca (len_base + 1);
-      strncpy (base, start, len_base);
-      base[len_base] = '\0';
+      std::string base (start, len_base);
 
-      if (user_reg_map_name_to_regnum (gdbarch, base, len_base) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, base.c_str (), len_base) == -1)
 	error (_("Invalid register name `%s' on expression `%s'."),
-	       base, p->saved_arg);
+	       base.c_str (), p->saved_arg);
 
       s += 2;
       start = s;
@@ -4249,16 +4269,15 @@ i386_stap_parse_special_token_three_arg_
 	++s;
 
       len_index = s - start;
-      index = (char *) alloca (len_index + 1);
-      strncpy (index, start, len_index);
-      index[len_index] = '\0';
+      std::string index (start, len_index);
 
-      if (user_reg_map_name_to_regnum (gdbarch, index, len_index) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, index.c_str (),
+				       len_index) == -1)
 	error (_("Invalid register name `%s' on expression `%s'."),
-	       index, p->saved_arg);
+	       index.c_str (), p->saved_arg);
 
       if (*s != ',' && *s != ')')
-	return false;
+	return {};
 
       if (*s == ',')
 	{
@@ -4277,85 +4296,60 @@ i386_stap_parse_special_token_three_arg_
 	  s = endp;
 
 	  if (*s != ')')
-	    return false;
+	    return {};
 	}
 
       ++s;
+      p->arg = s;
+
+      using namespace expr;
+
+      struct type *long_type = builtin_type (gdbarch)->builtin_long;
+      operation_up reg = make_operation<register_operation> (std::move (base));
 
-      if (offset)
+      if (offset != 0)
 	{
-	  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, offset);
-	  write_exp_elt_opcode (&p->pstate, OP_LONG);
 	  if (offset_minus)
-	    write_exp_elt_opcode (&p->pstate, UNOP_NEG);
+	    offset = -offset;
+	  operation_up value
+	    = make_operation<long_const_operation> (long_type, offset);
+	  reg = make_operation<add_operation> (std::move (reg),
+					       std::move (value));
 	}
 
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
-      base_token.ptr = base;
-      base_token.length = len_base;
-      write_exp_string (&p->pstate, base_token);
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
-
-      if (offset)
-	write_exp_elt_opcode (&p->pstate, BINOP_ADD);
-
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
-      index_token.ptr = index;
-      index_token.length = len_index;
-      write_exp_string (&p->pstate, index_token);
-      write_exp_elt_opcode (&p->pstate, OP_REGISTER);
-
-      if (size)
-	{
-	  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, size);
-	  write_exp_elt_opcode (&p->pstate, OP_LONG);
+      operation_up ind_reg
+	= make_operation<register_operation> (std::move (index));
+
+      if (size != 0)
+	{
 	  if (size_minus)
-	    write_exp_elt_opcode (&p->pstate, UNOP_NEG);
-	  write_exp_elt_opcode (&p->pstate, BINOP_MUL);
+	    size = -size;
+	  operation_up value
+	    = make_operation<long_const_operation> (long_type, size);
+	  ind_reg = make_operation<mul_operation> (std::move (ind_reg),
+						   std::move (value));
 	}
 
-      write_exp_elt_opcode (&p->pstate, BINOP_ADD);
-
-      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 = s;
+      operation_up sum
+	= make_operation<add_operation> (std::move (reg),
+					 std::move (ind_reg));
 
-      return true;
+      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));
     }
 
-  return false;
+  return {};
 }
 
 /* Implementation of `gdbarch_stap_parse_special_token', as defined in
    gdbarch.h.  */
 
-int
+expr::operation_up
 i386_stap_parse_special_token (struct gdbarch *gdbarch,
 			       struct stap_parse_info *p)
 {
-  /* In order to parse special tokens, we use a state-machine that go
-     through every known token and try to get a match.  */
-  enum
-    {
-      TRIPLET,
-      THREE_ARG_DISPLACEMENT,
-      DONE
-    };
-  int current_state;
-
-  current_state = TRIPLET;
-
   /* The special tokens to be parsed here are:
 
      - `register base + (register index * size) + offset', as represented
@@ -4364,26 +4358,13 @@ i386_stap_parse_special_token (struct gd
      - Operands of the form `-8+3+1(%rbp)', which must be interpreted as
      `*(-8 + 3 - 1 + (void *) $eax)'.  */
 
-  while (current_state != DONE)
-    {
-      switch (current_state)
-	{
-	case TRIPLET:
-	  if (i386_stap_parse_special_token_triplet (gdbarch, p))
-	    return 1;
-	  break;
-
-	case THREE_ARG_DISPLACEMENT:
-	  if (i386_stap_parse_special_token_three_arg_disp (gdbarch, p))
-	    return 1;
-	  break;
-	}
+  expr::operation_up result
+    = i386_stap_parse_special_token_triplet (gdbarch, p);
 
-      /* Advancing to the next state.  */
-      ++current_state;
-    }
+  if (result == nullptr)
+    result = i386_stap_parse_special_token_three_arg_disp (gdbarch, p);
 
-  return 0;
+  return result;
 }
 
 /* Implementation of 'gdbarch_stap_adjust_register', as defined in
@@ -4761,23 +4742,23 @@ i386_record_lea_modrm_addr (struct i386_
 
       offset64 = 0;
       if (base != 0xff)
-        {
+	{
 	  if (base == 4 && irp->popl_esp_hack)
 	    *addr += irp->popl_esp_hack;
 	  regcache_raw_read_unsigned (irp->regcache, irp->regmap[base],
-                                      &offset64);
+				      &offset64);
 	}
       if (irp->aflag == 2)
-        {
+	{
 	  *addr += offset64;
-        }
+	}
       else
-        *addr = (uint32_t) (offset64 + *addr);
+	*addr = (uint32_t) (offset64 + *addr);
 
       if (havesib && (index != 4 || scale != 0))
 	{
 	  regcache_raw_read_unsigned (irp->regcache, irp->regmap[index],
-                                      &offset64);
+				      &offset64);
 	  if (irp->aflag == 2)
 	    *addr += offset64 << scale;
 	  else
@@ -4826,65 +4807,65 @@ i386_record_lea_modrm_addr (struct i386_
 	case 0:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REBX_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_RESI_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 1:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REBX_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REDI_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 2:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REBP_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_RESI_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 3:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REBP_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REDI_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 4:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_RESI_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 5:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REDI_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 6:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REBP_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	case 7:
 	  regcache_raw_read_unsigned (irp->regcache,
 				      irp->regmap[X86_RECORD_REBX_REGNUM],
-                                      &offset64);
+				      &offset64);
 	  *addr = (uint32_t) (*addr + offset64);
 	  break;
 	}
@@ -4908,14 +4889,14 @@ i386_record_lea_modrm (struct i386_recor
   if (irp->override >= 0)
     {
       if (record_full_memory_query)
-        {
-          if (yquery (_("\
+	{
+	  if (yquery (_("\
 Process record ignores the memory change of instruction at address %s\n\
 because it can't get the value of the segment register.\n\
 Do you want to stop the program?"),
-                      paddress (gdbarch, irp->orig_addr)))
+		      paddress (gdbarch, irp->orig_addr)))
 	    return -1;
-        }
+	}
 
       return 0;
     }
@@ -4960,8 +4941,8 @@ i386_record_push (struct i386_record_s *
    wrong, 0 otherwise.  */
 
 static int i386_record_floats (struct gdbarch *gdbarch,
-                               struct i386_record_s *ir,
-                               uint32_t iregnum)
+			       struct i386_record_s *ir,
+			       uint32_t iregnum)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   int i;
@@ -4974,32 +4955,30 @@ static int i386_record_floats (struct gd
   if (I386_SAVE_FPU_REGS == iregnum)
     {
       for (i = I387_ST0_REGNUM (tdep); i <= I387_ST0_REGNUM (tdep) + 7; i++)
-        {
-          if (record_full_arch_list_add_reg (ir->regcache, i))
-            return -1;
-        }
+	{
+	  if (record_full_arch_list_add_reg (ir->regcache, i))
+	    return -1;
+	}
     }
   else if (I386_SAVE_FPU_ENV == iregnum)
     {
       for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
 	      {
 	      if (record_full_arch_list_add_reg (ir->regcache, i))
-	        return -1;
+		return -1;
 	      }
     }
   else if (I386_SAVE_FPU_ENV_REG_STACK == iregnum)
     {
       for (i = I387_ST0_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
-      {
-        if (record_full_arch_list_add_reg (ir->regcache, i))
-          return -1;
-      }
+	if (record_full_arch_list_add_reg (ir->regcache, i))
+	  return -1;
     }
   else if ((iregnum >= I387_ST0_REGNUM (tdep)) &&
-           (iregnum <= I387_FOP_REGNUM (tdep)))
+	   (iregnum <= I387_FOP_REGNUM (tdep)))
     {
       if (record_full_arch_list_add_reg (ir->regcache,iregnum))
-        return -1;
+	return -1;
     }
   else
     {
@@ -5011,7 +4990,7 @@ static int i386_record_floats (struct gd
     for (i = I387_FCTRL_REGNUM (tdep); i <= I387_FOP_REGNUM (tdep); i++)
       {
       if (record_full_arch_list_add_reg (ir->regcache, i))
-        return -1;
+	return -1;
       }
     }
   return 0;
@@ -5053,7 +5032,7 @@ i386_process_record (struct gdbarch *gdb
 
   if (record_debug > 1)
     fprintf_unfiltered (gdb_stdlog, "Process record: i386_process_record "
-			            "addr = %s\n",
+				    "addr = %s\n",
 			paddress (gdbarch, ir.addr));
 
   /* prefixes */
@@ -5097,33 +5076,33 @@ i386_process_record (struct gdbarch *gdb
 	case ADDR_PREFIX_OPCODE:
 	  prefixes |= PREFIX_ADDR;
 	  break;
-        case 0x40:	/* i386 inc %eax */
-        case 0x41:	/* i386 inc %ecx */
-        case 0x42:	/* i386 inc %edx */
-        case 0x43:	/* i386 inc %ebx */
-        case 0x44:	/* i386 inc %esp */
-        case 0x45:	/* i386 inc %ebp */
-        case 0x46:	/* i386 inc %esi */
-        case 0x47:	/* i386 inc %edi */
-        case 0x48:	/* i386 dec %eax */
-        case 0x49:	/* i386 dec %ecx */
-        case 0x4a:	/* i386 dec %edx */
-        case 0x4b:	/* i386 dec %ebx */
-        case 0x4c:	/* i386 dec %esp */
-        case 0x4d:	/* i386 dec %ebp */
-        case 0x4e:	/* i386 dec %esi */
-        case 0x4f:	/* i386 dec %edi */
-          if (ir.regmap[X86_RECORD_R8_REGNUM])	/* 64 bit target */
-            {
-               /* REX */
-               rex_w = (opcode8 >> 3) & 1;
-               rex_r = (opcode8 & 0x4) << 1;
-               ir.rex_x = (opcode8 & 0x2) << 2;
-               ir.rex_b = (opcode8 & 0x1) << 3;
-            }
+	case 0x40:	/* i386 inc %eax */
+	case 0x41:	/* i386 inc %ecx */
+	case 0x42:	/* i386 inc %edx */
+	case 0x43:	/* i386 inc %ebx */
+	case 0x44:	/* i386 inc %esp */
+	case 0x45:	/* i386 inc %ebp */
+	case 0x46:	/* i386 inc %esi */
+	case 0x47:	/* i386 inc %edi */
+	case 0x48:	/* i386 dec %eax */
+	case 0x49:	/* i386 dec %ecx */
+	case 0x4a:	/* i386 dec %edx */
+	case 0x4b:	/* i386 dec %ebx */
+	case 0x4c:	/* i386 dec %esp */
+	case 0x4d:	/* i386 dec %ebp */
+	case 0x4e:	/* i386 dec %esi */
+	case 0x4f:	/* i386 dec %edi */
+	  if (ir.regmap[X86_RECORD_R8_REGNUM])	/* 64 bit target */
+	    {
+	       /* REX */
+	       rex_w = (opcode8 >> 3) & 1;
+	       rex_r = (opcode8 & 0x4) << 1;
+	       ir.rex_x = (opcode8 & 0x2) << 2;
+	       ir.rex_b = (opcode8 & 0x1) << 3;
+	    }
 	  else					/* 32 bit target */
 	    goto out_prefixes;
-          break;
+	  break;
 	default:
 	  goto out_prefixes;
 	  break;
@@ -5137,7 +5116,7 @@ i386_process_record (struct gdbarch *gdb
   else
     {
       if (prefixes & PREFIX_DATA)
-        ir.dflag ^= 1;
+	ir.dflag ^= 1;
     }
   if (prefixes & PREFIX_ADDR)
     ir.aflag ^= 1;
@@ -5224,7 +5203,7 @@ i386_process_record (struct gdbarch *gdb
 		}
 	      else
 		{
-                  ir.rm |= ir.rex_b;
+		  ir.rm |= ir.rex_b;
 		  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
 		    ir.rm &= 0x3;
 		  I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
@@ -5233,7 +5212,7 @@ i386_process_record (struct gdbarch *gdb
 	    case 1:    /* OP Gv, Ev */
 	      if (i386_record_modrm (&ir))
 		return -1;
-              ir.reg |= rex_r;
+	      ir.reg |= rex_r;
 	      if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
 		ir.reg &= 0x3;
 	      I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
@@ -5262,10 +5241,10 @@ i386_process_record (struct gdbarch *gdb
 
 	  if (ir.mod != 3)
 	    {
-              if (opcode == 0x83)
-                ir.rip_offset = 1;
-              else
-                ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
+	      if (opcode == 0x83)
+		ir.rip_offset = 1;
+	      else
+		ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
 	      if (i386_record_lea_modrm (&ir))
 		return -1;
 	    }
@@ -5307,7 +5286,7 @@ i386_process_record (struct gdbarch *gdb
 	return -1;
 
       if (ir.mod != 3 && ir.reg == 0)
-        ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
+	ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
 
       switch (ir.reg)
 	{
@@ -5323,7 +5302,7 @@ i386_process_record (struct gdbarch *gdb
 	    }
 	  else
 	    {
-              ir.rm |= ir.rex_b;
+	      ir.rm |= ir.rex_b;
 	      if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
 		ir.rm &= 0x3;
 	      I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm);
@@ -5362,9 +5341,9 @@ i386_process_record (struct gdbarch *gdb
 	{
 	case 0:    /* inc */
 	case 1:    /* dec */
-          if ((opcode & 1) == 0)
+	  if ((opcode & 1) == 0)
 	    ir.ot = OT_BYTE;
-          else
+	  else
 	    ir.ot = ir.dflag + OT_WORD;
 	  if (ir.mod != 3)
 	    {
@@ -5381,8 +5360,8 @@ i386_process_record (struct gdbarch *gdb
 	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
 	  break;
 	case 2:    /* call */
-          if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
-            ir.dflag = 2;
+	  if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
+	    ir.dflag = 2;
 	  if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
 	    return -1;
 	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
@@ -5398,8 +5377,8 @@ i386_process_record (struct gdbarch *gdb
 	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
 	  break;
 	case 6:    /* push */
-          if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
-            ir.dflag = 2;
+	  if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
+	    ir.dflag = 2;
 	  if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
 	    return -1;
 	  break;
@@ -5434,9 +5413,9 @@ i386_process_record (struct gdbarch *gdb
       if (i386_record_modrm (&ir))
 	return -1;
       if (opcode == 0x69)
-        ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
+	ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
       else if (opcode == 0x6b)
-        ir.rip_offset = 1;
+	ir.rip_offset = 1;
       ir.reg |= rex_r;
       if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
 	ir.reg &= 0x3;
@@ -5483,7 +5462,7 @@ i386_process_record (struct gdbarch *gdb
 	return -1;
       if (ir.mod == 3)
 	{
-          ir.reg |= rex_r;
+	  ir.reg |= rex_r;
 	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
 	    ir.reg &= 0x3;
@@ -5547,7 +5526,7 @@ i386_process_record (struct gdbarch *gdb
     case 0x68:
     case 0x6a:
       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
-        ir.dflag = 2;
+	ir.dflag = 2;
       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
 	return -1;
       break;
@@ -5557,7 +5536,7 @@ i386_process_record (struct gdbarch *gdb
     case 0x16:    /* push ss */
     case 0x1e:    /* push ds */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -5568,7 +5547,7 @@ i386_process_record (struct gdbarch *gdb
     case 0x0fa0:    /* push fs */
     case 0x0fa8:    /* push gs */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 2;
 	  goto no_support;
 	}
@@ -5578,7 +5557,7 @@ i386_process_record (struct gdbarch *gdb
 
     case 0x60:    /* pusha */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -5600,7 +5579,7 @@ i386_process_record (struct gdbarch *gdb
 
     case 0x61:    /* popa */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -5614,14 +5593,14 @@ i386_process_record (struct gdbarch *gdb
       if (ir.regmap[X86_RECORD_R8_REGNUM])
 	ir.ot = ir.dflag ? OT_QUAD : OT_WORD;
       else
-        ir.ot = ir.dflag + OT_WORD;
+	ir.ot = ir.dflag + OT_WORD;
       if (i386_record_modrm (&ir))
 	return -1;
       if (ir.mod == 3)
 	I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
       else
 	{
-          ir.popl_esp_hack = 1 << ir.ot;
+	  ir.popl_esp_hack = 1 << ir.ot;
 	  if (i386_record_lea_modrm (&ir))
 	    return -1;
 	}
@@ -5631,7 +5610,7 @@ i386_process_record (struct gdbarch *gdb
     case 0xc8:    /* enter */
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REBP_REGNUM);
       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
-        ir.dflag = 2;
+	ir.dflag = 2;
       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
 	return -1;
       break;
@@ -5643,7 +5622,7 @@ i386_process_record (struct gdbarch *gdb
 
     case 0x07:    /* pop es */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -5654,7 +5633,7 @@ i386_process_record (struct gdbarch *gdb
 
     case 0x17:    /* pop ss */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -5665,7 +5644,7 @@ i386_process_record (struct gdbarch *gdb
 
     case 0x1f:    /* pop ds */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -5700,14 +5679,14 @@ i386_process_record (struct gdbarch *gdb
 
       if (ir.mod != 3)
 	{
-          if (opcode == 0xc6 || opcode == 0xc7)
+	  if (opcode == 0xc6 || opcode == 0xc7)
 	    ir.rip_offset = (ir.ot > OT_LONG) ? 4 : (1 << ir.ot);
 	  if (i386_record_lea_modrm (&ir))
 	    return -1;
 	}
       else
 	{
-          if (opcode == 0xc6 || opcode == 0xc7)
+	  if (opcode == 0xc6 || opcode == 0xc7)
 	    ir.rm |= ir.rex_b;
 	  if (ir.ot == OT_BYTE && !ir.regmap[X86_RECORD_R8_REGNUM])
 	    ir.rm &= 0x3;
@@ -5814,47 +5793,47 @@ i386_process_record (struct gdbarch *gdb
     case 0xa2:    /* mov EAX */
     case 0xa3:
       if (ir.override >= 0)
-        {
-          if (record_full_memory_query)
-            {
-              if (yquery (_("\
+	{
+	  if (record_full_memory_query)
+	    {
+	      if (yquery (_("\
 Process record ignores the memory change of instruction at address %s\n\
 because it can't get the value of the segment register.\n\
 Do you want to stop the program?"),
-                          paddress (gdbarch, ir.orig_addr)))
-                return -1;
-            }
+			  paddress (gdbarch, ir.orig_addr)))
+		return -1;
+	    }
 	}
       else
 	{
-          if ((opcode & 1) == 0)
+	  if ((opcode & 1) == 0)
 	    ir.ot = OT_BYTE;
 	  else
 	    ir.ot = ir.dflag + OT_WORD;
 	  if (ir.aflag == 2)
 	    {
-              if (record_read_memory (gdbarch, ir.addr, buf, 8))
+	      if (record_read_memory (gdbarch, ir.addr, buf, 8))
 		return -1;
 	      ir.addr += 8;
 	      addr = extract_unsigned_integer (buf, 8, byte_order);
 	    }
-          else if (ir.aflag)
+	  else if (ir.aflag)
 	    {
-              if (record_read_memory (gdbarch, ir.addr, buf, 4))
+	      if (record_read_memory (gdbarch, ir.addr, buf, 4))
 		return -1;
 	      ir.addr += 4;
-              addr = extract_unsigned_integer (buf, 4, byte_order);
+	      addr = extract_unsigned_integer (buf, 4, byte_order);
 	    }
-          else
+	  else
 	    {
-              if (record_read_memory (gdbarch, ir.addr, buf, 2))
+	      if (record_read_memory (gdbarch, ir.addr, buf, 2))
 		return -1;
 	      ir.addr += 2;
-              addr = extract_unsigned_integer (buf, 2, byte_order);
+	      addr = extract_unsigned_integer (buf, 2, byte_order);
 	    }
 	  if (record_full_arch_list_add_mem (addr, 1 << ir.ot))
 	    return -1;
-        }
+	}
       break;
 
     case 0xb0:    /* mov R, Ib */
@@ -5921,7 +5900,7 @@ Do you want to stop the program?"),
     case 0xc4:    /* les Gv */
     case 0xc5:    /* lds Gv */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
+	{
 	  ir.addr -= 1;
 	  goto no_support;
 	}
@@ -6029,21 +6008,21 @@ Do you want to stop the program?"),
 	  switch (ir.reg)
 	    {
 	    case 0x02:
-            case 0x12:
-            case 0x22:
-            case 0x32:
+	    case 0x12:
+	    case 0x22:
+	    case 0x32:
 	      /* For fcom, ficom nothing to do.  */
-              break;
+	      break;
 	    case 0x03:
-            case 0x13:
-            case 0x23:
-            case 0x33:
+	    case 0x13:
+	    case 0x23:
+	    case 0x33:
 	      /* For fcomp, ficomp pop FPU stack, store all.  */
-              if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
-                return -1;
-              break;
-            case 0x00:
-            case 0x01:
+	      if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
+		return -1;
+	      break;
+	    case 0x00:
+	    case 0x01:
 	    case 0x04:
 	    case 0x05:
 	    case 0x06:
@@ -6066,11 +6045,11 @@ Do you want to stop the program?"),
 	    case 0x35:
 	    case 0x36:
 	    case 0x37:
-              /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,
-                 fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension
-                 of code,  always affects st(0) register.  */
-              if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
-                return -1;
+	      /* For fadd, fmul, fsub, fsubr, fdiv, fdivr, fiadd, fimul,
+		 fisub, fisubr, fidiv, fidivr, modR/M.reg is an extension
+		 of code,  always affects st(0) register.  */
+	      if (i386_record_floats (gdbarch, &ir, I387_ST0_REGNUM (tdep)))
+		return -1;
 	      break;
 	    case 0x08:
 	    case 0x0a:
@@ -6079,7 +6058,7 @@ Do you want to stop the program?"),
 	    case 0x19:
 	    case 0x1a:
 	    case 0x1b:
-            case 0x1d:
+	    case 0x1d:
 	    case 0x28:
 	    case 0x29:
 	    case 0x2a:
@@ -6088,8 +6067,8 @@ Do you want to stop the program?"),
 	    case 0x39:
 	    case 0x3a:
 	    case 0x3b:
-            case 0x3c:
-            case 0x3d:
+	    case 0x3c:
+	    case 0x3d:
 	      switch (ir.reg & 7)
 		{
 		case 0:
@@ -6172,21 +6151,21 @@ Do you want to stop the program?"),
 		}
 	      break;
 	    case 0x0c:
-              /* Insn fldenv.  */
-              if (i386_record_floats (gdbarch, &ir,
-                                      I386_SAVE_FPU_ENV_REG_STACK))
-                return -1;
-              break;
+	      /* Insn fldenv.  */
+	      if (i386_record_floats (gdbarch, &ir,
+				      I386_SAVE_FPU_ENV_REG_STACK))
+		return -1;
+	      break;
 	    case 0x0d:
-              /* Insn fldcw.  */
-              if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep)))
-                return -1;
-              break;
+	      /* Insn fldcw.  */
+	      if (i386_record_floats (gdbarch, &ir, I387_FCTRL_REGNUM (tdep)))
+		return -1;
+	      break;
 	    case 0x2c:
-              /* Insn frstor.  */
-              if (i386_record_floats (gdbarch, &ir,
-                                      I386_SAVE_FPU_ENV_REG_STACK))
-                return -1;
+	      /* Insn frstor.  */
+	      if (i386_record_floats (gdbarch, &ir,
+				      I386_SAVE_FPU_ENV_REG_STACK))
+		return -1;
 	      break;
 	    case 0x0e:
 	      if (ir.dflag)
@@ -6204,9 +6183,9 @@ Do you want to stop the program?"),
 	    case 0x2f:
 	      if (record_full_arch_list_add_mem (addr64, 2))
 		return -1;
-              /* Insn fstp, fbstp.  */
-              if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
-                return -1;
+	      /* Insn fstp, fbstp.  */
+	      if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
+		return -1;
 	      break;
 	    case 0x1f:
 	    case 0x3e:
@@ -6249,7 +6228,7 @@ Do you want to stop the program?"),
 	}
       /* Opcode is an extension of modR/M byte.  */
       else
-        {
+	{
 	  switch (opcode)
 	    {
 	    case 0xd8:
@@ -6265,7 +6244,7 @@ Do you want to stop the program?"),
 					      I386_SAVE_FPU_REGS))
 			return -1;
 		    }
-                  else
+		  else
 		    {
 		      if (i386_record_floats (gdbarch, &ir,
 					      I387_ST0_REGNUM (tdep)))
@@ -6281,8 +6260,8 @@ Do you want to stop the program?"),
 			}
 		    }
 		}
-              else
-                {
+	      else
+		{
 		  switch (ir.modrm)
 		    {
 		    case 0xe0:
@@ -6327,15 +6306,15 @@ Do you want to stop the program?"),
 		      break;
 		    }
 		}
-              break;
-            case 0xda:
-              if (0xe9 == ir.modrm)
-                {
+	      break;
+	    case 0xda:
+	      if (0xe9 == ir.modrm)
+		{
 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
 		    return -1;
-                }
-              else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
-                {
+		}
+	      else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
+		{
 		  if (i386_record_floats (gdbarch, &ir,
 					  I387_ST0_REGNUM (tdep)))
 		    return -1;
@@ -6353,16 +6332,16 @@ Do you want to stop the program?"),
 					      ((ir.modrm & 0x0f) - 0x08)))
 			return -1;
 		    }
-                }
-              break;
-            case 0xdb:
-              if (0xe3 == ir.modrm)
-                {
+		}
+	      break;
+	    case 0xdb:
+	      if (0xe3 == ir.modrm)
+		{
 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_ENV))
 		    return -1;
-                }
-              else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
-                {
+		}
+	      else if ((0x0c == ir.modrm >> 4) || (0x0d == ir.modrm >> 4))
+		{
 		  if (i386_record_floats (gdbarch, &ir,
 					  I387_ST0_REGNUM (tdep)))
 		    return -1;
@@ -6380,13 +6359,13 @@ Do you want to stop the program?"),
 					      ((ir.modrm & 0x0f) - 0x08)))
 			return -1;
 		    }
-                }
-              break;
-            case 0xdc:
-              if ((0x0c == ir.modrm >> 4)
+		}
+	      break;
+	    case 0xdc:
+	      if ((0x0c == ir.modrm >> 4)
 		  || (0x0d == ir.modrm >> 4)
 		  || (0x0f == ir.modrm >> 4))
-                {
+		{
 		  if ((ir.modrm & 0x0f) <= 7)
 		    {
 		      if (i386_record_floats (gdbarch, &ir,
@@ -6401,55 +6380,55 @@ Do you want to stop the program?"),
 					      ((ir.modrm & 0x0f) - 0x08)))
 			return -1;
 		    }
-                }
+		}
 	      break;
-            case 0xdd:
-              if (0x0c == ir.modrm >> 4)
-                {
-                  if (i386_record_floats (gdbarch, &ir,
-                                          I387_FTAG_REGNUM (tdep)))
-                    return -1;
-                }
-              else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
-                {
-                  if ((ir.modrm & 0x0f) <= 7)
-                    {
+	    case 0xdd:
+	      if (0x0c == ir.modrm >> 4)
+		{
+		  if (i386_record_floats (gdbarch, &ir,
+					  I387_FTAG_REGNUM (tdep)))
+		    return -1;
+		}
+	      else if ((0x0d == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
+		{
+		  if ((ir.modrm & 0x0f) <= 7)
+		    {
 		      if (i386_record_floats (gdbarch, &ir,
 					      I387_ST0_REGNUM (tdep) +
 					      (ir.modrm & 0x0f)))
 			return -1;
-                    }
-                  else
-                    {
-                      if (i386_record_floats (gdbarch, &ir,
+		    }
+		  else
+		    {
+		      if (i386_record_floats (gdbarch, &ir,
 					      I386_SAVE_FPU_REGS))
-                        return -1;
-                    }
-                }
-              break;
-            case 0xde:
-              if ((0x0c == ir.modrm >> 4)
+			return -1;
+		    }
+		}
+	      break;
+	    case 0xde:
+	      if ((0x0c == ir.modrm >> 4)
 		  || (0x0e == ir.modrm >> 4)
 		  || (0x0f == ir.modrm >> 4)
 		  || (0xd9 == ir.modrm))
-                {
+		{
 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
 		    return -1;
-                }
-              break;
-            case 0xdf:
-              if (0xe0 == ir.modrm)
-                {
+		}
+	      break;
+	    case 0xdf:
+	      if (0xe0 == ir.modrm)
+		{
 		  if (record_full_arch_list_add_reg (ir.regcache,
 						     I386_EAX_REGNUM))
 		    return -1;
-                }
-              else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
-                {
+		}
+	      else if ((0x0f == ir.modrm >> 4) || (0x0e == ir.modrm >> 4))
+		{
 		  if (i386_record_floats (gdbarch, &ir, I386_SAVE_FPU_REGS))
 		    return -1;
-                }
-              break;
+		}
+	      break;
 	    }
 	}
       break;
@@ -6461,51 +6440,51 @@ Do you want to stop the program?"),
     case 0x6c:    /* insS */
     case 0x6d:
       regcache_raw_read_unsigned (ir.regcache,
-                                  ir.regmap[X86_RECORD_RECX_REGNUM],
-                                  &addr);
+				  ir.regmap[X86_RECORD_RECX_REGNUM],
+				  &addr);
       if (addr)
-        {
-          ULONGEST es, ds;
+	{
+	  ULONGEST es, ds;
 
-          if ((opcode & 1) == 0)
+	  if ((opcode & 1) == 0)
 	    ir.ot = OT_BYTE;
-          else
+	  else
 	    ir.ot = ir.dflag + OT_WORD;
-          regcache_raw_read_unsigned (ir.regcache,
-                                      ir.regmap[X86_RECORD_REDI_REGNUM],
-                                      &addr);
-
-          regcache_raw_read_unsigned (ir.regcache,
-                                      ir.regmap[X86_RECORD_ES_REGNUM],
-                                      &es);
-          regcache_raw_read_unsigned (ir.regcache,
-                                      ir.regmap[X86_RECORD_DS_REGNUM],
-                                      &ds);
-          if (ir.aflag && (es != ds))
-            {
-              /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */
-              if (record_full_memory_query)
-                {
-                  if (yquery (_("\
+	  regcache_raw_read_unsigned (ir.regcache,
+				      ir.regmap[X86_RECORD_REDI_REGNUM],
+				      &addr);
+
+	  regcache_raw_read_unsigned (ir.regcache,
+				      ir.regmap[X86_RECORD_ES_REGNUM],
+				      &es);
+	  regcache_raw_read_unsigned (ir.regcache,
+				      ir.regmap[X86_RECORD_DS_REGNUM],
+				      &ds);
+	  if (ir.aflag && (es != ds))
+	    {
+	      /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */
+	      if (record_full_memory_query)
+		{
+		  if (yquery (_("\
 Process record ignores the memory change of instruction at address %s\n\
 because it can't get the value of the segment register.\n\
 Do you want to stop the program?"),
-                              paddress (gdbarch, ir.orig_addr)))
-                    return -1;
-                }
-            }
-          else
-            {
-              if (record_full_arch_list_add_mem (addr, 1 << ir.ot))
-                return -1;
-            }
-
-          if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
-          if (opcode == 0xa4 || opcode == 0xa5)
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+			      paddress (gdbarch, ir.orig_addr)))
+		    return -1;
+		}
+	    }
+	  else
+	    {
+	      if (record_full_arch_list_add_mem (addr, 1 << ir.ot))
+		return -1;
+	    }
+
+	  if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
+	  if (opcode == 0xa4 || opcode == 0xa5)
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
 	}
       break;
 
@@ -6514,7 +6493,7 @@ Do you want to stop the program?"),
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
 
@@ -6523,7 +6502,7 @@ Do you want to stop the program?"),
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
 
@@ -6531,7 +6510,7 @@ Do you want to stop the program?"),
     case 0xaf:
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REDI_REGNUM);
       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
 
@@ -6539,7 +6518,7 @@ Do you want to stop the program?"),
     case 0x6f:
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RESI_REGNUM);
       if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ))
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_RECX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
 
@@ -6574,20 +6553,20 @@ Do you want to stop the program?"),
 
     case 0xe8:    /* call im */
       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
-        ir.dflag = 2;
+	ir.dflag = 2;
       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
-        return -1;
+	return -1;
       break;
 
     case 0x9a:    /* lcall im */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
-          ir.addr -= 1;
-          goto no_support;
-        }
+	{
+	  ir.addr -= 1;
+	  goto no_support;
+	}
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_CS_REGNUM);
       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
-        return -1;
+	return -1;
       break;
 
     case 0xe9:    /* jmp im */
@@ -6648,7 +6627,7 @@ Do you want to stop the program?"),
       if (i386_record_modrm (&ir))
 	return -1;
       if (ir.mod == 3)
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b)
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rex_b ? (ir.rm | ir.rex_b)
 					    : (ir.rm & 0x3));
       else
 	{
@@ -6685,9 +6664,9 @@ Do you want to stop the program?"),
     case 0x9c:    /* pushf */
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       if (ir.regmap[X86_RECORD_R8_REGNUM] && ir.dflag)
-        ir.dflag = 2;
+	ir.dflag = 2;
       if (i386_record_push (&ir, 1 << (ir.dflag + 1)))
-        return -1;
+	return -1;
       break;
 
     case 0x9d:    /* popf */
@@ -6697,10 +6676,10 @@ Do you want to stop the program?"),
 
     case 0x9e:    /* sahf */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
-          ir.addr -= 1;
-          goto no_support;
-        }
+	{
+	  ir.addr -= 1;
+	  goto no_support;
+	}
       /* FALLTHROUGH */
     case 0xf5:    /* cmc */
     case 0xf8:    /* clc */
@@ -6712,10 +6691,10 @@ Do you want to stop the program?"),
 
     case 0x9f:    /* lahf */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
-          ir.addr -= 1;
-          goto no_support;
-        }
+	{
+	  ir.addr -= 1;
+	  goto no_support;
+	}
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
       break;
@@ -6733,8 +6712,8 @@ Do you want to stop the program?"),
 	}
       if (ir.reg != 4)
 	{
-          if (ir.mod == 3)
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
+	  if (ir.mod == 3)
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
 	  else
 	    {
 	      if (i386_record_lea_modrm (&ir))
@@ -6753,34 +6732,34 @@ Do you want to stop the program?"),
     case 0x0fbb:    /* btc */
       ir.ot = ir.dflag + OT_WORD;
       if (i386_record_modrm (&ir))
-        return -1;
+	return -1;
       if (ir.mod == 3)
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
       else
-        {
-          uint64_t addr64;
-          if (i386_record_lea_modrm_addr (&ir, &addr64))
-            return -1;
-          regcache_raw_read_unsigned (ir.regcache,
-                                      ir.regmap[ir.reg | rex_r],
-                                      &addr);
-          switch (ir.dflag)
-            {
-            case 0:
-              addr64 += ((int16_t) addr >> 4) << 4;
-              break;
-            case 1:
-              addr64 += ((int32_t) addr >> 5) << 5;
-              break;
-            case 2:
-              addr64 += ((int64_t) addr >> 6) << 6;
-              break;
-            }
-          if (record_full_arch_list_add_mem (addr64, 1 << ir.ot))
-            return -1;
-          if (i386_record_lea_modrm (&ir))
-            return -1;
-        }
+	{
+	  uint64_t addr64;
+	  if (i386_record_lea_modrm_addr (&ir, &addr64))
+	    return -1;
+	  regcache_raw_read_unsigned (ir.regcache,
+				      ir.regmap[ir.reg | rex_r],
+				      &addr);
+	  switch (ir.dflag)
+	    {
+	    case 0:
+	      addr64 += ((int16_t) addr >> 4) << 4;
+	      break;
+	    case 1:
+	      addr64 += ((int32_t) addr >> 5) << 5;
+	      break;
+	    case 2:
+	      addr64 += ((int64_t) addr >> 6) << 6;
+	      break;
+	    }
+	  if (record_full_arch_list_add_mem (addr64, 1 << ir.ot))
+	    return -1;
+	  if (i386_record_lea_modrm (&ir))
+	    return -1;
+	}
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
 
@@ -6798,10 +6777,10 @@ Do you want to stop the program?"),
     case 0xd4:    /* aam */
     case 0xd5:    /* aad */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
-          ir.addr -= 1;
-          goto no_support;
-        }
+	{
+	  ir.addr -= 1;
+	  goto no_support;
+	}
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
@@ -6886,10 +6865,10 @@ Do you want to stop the program?"),
 
     case 0xd6:    /* salc */
       if (ir.regmap[X86_RECORD_R8_REGNUM])
-        {
-          ir.addr -= 1;
-          goto no_support;
-        }
+	{
+	  ir.addr -= 1;
+	  goto no_support;
+	}
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_REAX_REGNUM);
       I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
@@ -6924,11 +6903,11 @@ Do you want to stop the program?"),
     case 0x0f34:    /* sysenter */
       {
 	int ret;
-        if (ir.regmap[X86_RECORD_R8_REGNUM])
-          {
-            ir.addr -= 2;
-            goto no_support;
-          }
+	if (ir.regmap[X86_RECORD_R8_REGNUM])
+	  {
+	    ir.addr -= 2;
+	    goto no_support;
+	  }
 	if (tdep->i386_sysenter_record == NULL)
 	  {
 	    printf_unfiltered (_("Process record does not support "
@@ -6967,7 +6946,7 @@ Do you want to stop the program?"),
 
     case 0x0f07:    /* sysret */
       printf_unfiltered (_("Process record does not support "
-                           "instruction sysret.\n"));
+			   "instruction sysret.\n"));
       ir.addr -= 2;
       goto no_support;
       break;
@@ -6994,7 +6973,7 @@ Do you want to stop the program?"),
 	case 0:  /* sldt */
 	case 1:  /* str  */
 	  if (ir.mod == 3)
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
 	  else
 	    {
 	      ir.ot = OT_WORD;
@@ -7007,7 +6986,7 @@ Do you want to stop the program?"),
 	  break;
 	case 4:  /* verr */
 	case 5:  /* verw */
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
 	  break;
 	default:
 	  ir.addr -= 3;
@@ -7034,15 +7013,15 @@ Do you want to stop the program?"),
 	      }
 	    if (ir.override >= 0)
 	      {
-                if (record_full_memory_query)
-                  {
-                    if (yquery (_("\
+		if (record_full_memory_query)
+		  {
+		    if (yquery (_("\
 Process record ignores the memory change of instruction at address %s\n\
 because it can't get the value of the segment register.\n\
 Do you want to stop the program?"),
-                                paddress (gdbarch, ir.orig_addr)))
+				paddress (gdbarch, ir.orig_addr)))
 		      return -1;
-                  }
+		  }
 	      }
 	    else
 	      {
@@ -7051,16 +7030,16 @@ Do you want to stop the program?"),
 		if (record_full_arch_list_add_mem (addr64, 2))
 		  return -1;
 		addr64 += 2;
-                if (ir.regmap[X86_RECORD_R8_REGNUM])
-                  {
-                    if (record_full_arch_list_add_mem (addr64, 8))
+		if (ir.regmap[X86_RECORD_R8_REGNUM])
+		  {
+		    if (record_full_arch_list_add_mem (addr64, 8))
 		      return -1;
-                  }
-                else
-                  {
-                    if (record_full_arch_list_add_mem (addr64, 4))
+		  }
+		else
+		  {
+		    if (record_full_arch_list_add_mem (addr64, 4))
 		      return -1;
-                  }
+		  }
 	      }
 	  }
 	  break;
@@ -7086,15 +7065,15 @@ Do you want to stop the program?"),
 	      /* sidt */
 	      if (ir.override >= 0)
 		{
-                  if (record_full_memory_query)
-                    {
-                      if (yquery (_("\
+		  if (record_full_memory_query)
+		    {
+		      if (yquery (_("\
 Process record ignores the memory change of instruction at address %s\n\
 because it can't get the value of the segment register.\n\
 Do you want to stop the program?"),
-                                  paddress (gdbarch, ir.orig_addr)))
-                        return -1;
-                    }
+				  paddress (gdbarch, ir.orig_addr)))
+			return -1;
+		    }
 		}
 	      else
 		{
@@ -7105,16 +7084,16 @@ Do you want to stop the program?"),
 		  if (record_full_arch_list_add_mem (addr64, 2))
 		    return -1;
 		  addr64 += 2;
-                  if (ir.regmap[X86_RECORD_R8_REGNUM])
-                    {
-                      if (record_full_arch_list_add_mem (addr64, 8))
-		        return -1;
-                    }
-                  else
-                    {
-                      if (record_full_arch_list_add_mem (addr64, 4))
-		        return -1;
-                    }
+		  if (ir.regmap[X86_RECORD_R8_REGNUM])
+		    {
+		      if (record_full_arch_list_add_mem (addr64, 8))
+			return -1;
+		    }
+		  else
+		    {
+		      if (record_full_arch_list_add_mem (addr64, 4))
+			return -1;
+		    }
 		}
 	    }
 	  break;
@@ -7162,13 +7141,13 @@ Do you want to stop the program?"),
 	  if (ir.mod == 3)
 	    {
 	      if (ir.rm == 0 && ir.regmap[X86_RECORD_R8_REGNUM])
-	        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
+		I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_GS_REGNUM);
 	      else
-	        {
-	          ir.addr -= 3;
-	          opcode = opcode << 8 | ir.modrm;
-	          goto no_support;
-	        }
+		{
+		  ir.addr -= 3;
+		  opcode = opcode << 8 | ir.modrm;
+		  goto no_support;
+		}
 	    }
 	  else
 	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
@@ -7189,18 +7168,18 @@ Do you want to stop the program?"),
       if (i386_record_modrm (&ir))
 	return -1;
       if (ir.mod == 3 || ir.regmap[X86_RECORD_R8_REGNUM])
-        {
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM]
+	{
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.regmap[X86_RECORD_R8_REGNUM]
 					      ? (ir.reg | rex_r) : ir.rm);
-        }
+	}
       else
-        {
-          ir.ot = ir.dflag ? OT_LONG : OT_WORD;
-          if (i386_record_lea_modrm (&ir))
-            return -1;
-        }
+	{
+	  ir.ot = ir.dflag ? OT_LONG : OT_WORD;
+	  if (i386_record_lea_modrm (&ir))
+	    return -1;
+	}
       if (!ir.regmap[X86_RECORD_R8_REGNUM])
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       break;
 
     case 0x0f02:    /* lar */
@@ -7215,7 +7194,7 @@ Do you want to stop the program?"),
       if (i386_record_modrm (&ir))
 	return -1;
       if (ir.mod == 3 && ir.reg == 3)
-        {
+	{
 	  ir.addr -= 3;
 	  opcode = opcode << 8 | ir.modrm;
 	  goto no_support;
@@ -7252,7 +7231,7 @@ Do you want to stop the program?"),
 	  if (opcode & 2)
 	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
 	  else
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
 	  break;
 	default:
 	  ir.addr -= 3;
@@ -7274,7 +7253,7 @@ Do you want to stop the program?"),
 	  goto no_support;
 	}
       if (opcode & 2)
-        I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
       else
 	I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
       break;
@@ -7291,7 +7270,7 @@ Do you want to stop the program?"),
     case 0x0f0e:    /* 3DNow! femms */
     case 0x0f77:    /* emms */
       if (i386_fpc_regnum_p (gdbarch, I387_FTAG_REGNUM(tdep)))
-        goto no_support;
+	goto no_support;
       record_full_arch_list_add_reg (ir.regcache, I387_FTAG_REGNUM(tdep));
       break;
 
@@ -7302,42 +7281,42 @@ Do you want to stop the program?"),
 	return -1;
       ir.addr++;
       switch (opcode8)
-        {
-        case 0x0c:    /* 3DNow! pi2fw */
-        case 0x0d:    /* 3DNow! pi2fd */
-        case 0x1c:    /* 3DNow! pf2iw */
-        case 0x1d:    /* 3DNow! pf2id */
-        case 0x8a:    /* 3DNow! pfnacc */
-        case 0x8e:    /* 3DNow! pfpnacc */
-        case 0x90:    /* 3DNow! pfcmpge */
-        case 0x94:    /* 3DNow! pfmin */
-        case 0x96:    /* 3DNow! pfrcp */
-        case 0x97:    /* 3DNow! pfrsqrt */
-        case 0x9a:    /* 3DNow! pfsub */
-        case 0x9e:    /* 3DNow! pfadd */
-        case 0xa0:    /* 3DNow! pfcmpgt */
-        case 0xa4:    /* 3DNow! pfmax */
-        case 0xa6:    /* 3DNow! pfrcpit1 */
-        case 0xa7:    /* 3DNow! pfrsqit1 */
-        case 0xaa:    /* 3DNow! pfsubr */
-        case 0xae:    /* 3DNow! pfacc */
-        case 0xb0:    /* 3DNow! pfcmpeq */
-        case 0xb4:    /* 3DNow! pfmul */
-        case 0xb6:    /* 3DNow! pfrcpit2 */
-        case 0xb7:    /* 3DNow! pmulhrw */
-        case 0xbb:    /* 3DNow! pswapd */
-        case 0xbf:    /* 3DNow! pavgusb */
-          if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
-            goto no_support_3dnow_data;
-          record_full_arch_list_add_reg (ir.regcache, ir.reg);
-          break;
+	{
+	case 0x0c:    /* 3DNow! pi2fw */
+	case 0x0d:    /* 3DNow! pi2fd */
+	case 0x1c:    /* 3DNow! pf2iw */
+	case 0x1d:    /* 3DNow! pf2id */
+	case 0x8a:    /* 3DNow! pfnacc */
+	case 0x8e:    /* 3DNow! pfpnacc */
+	case 0x90:    /* 3DNow! pfcmpge */
+	case 0x94:    /* 3DNow! pfmin */
+	case 0x96:    /* 3DNow! pfrcp */
+	case 0x97:    /* 3DNow! pfrsqrt */
+	case 0x9a:    /* 3DNow! pfsub */
+	case 0x9e:    /* 3DNow! pfadd */
+	case 0xa0:    /* 3DNow! pfcmpgt */
+	case 0xa4:    /* 3DNow! pfmax */
+	case 0xa6:    /* 3DNow! pfrcpit1 */
+	case 0xa7:    /* 3DNow! pfrsqit1 */
+	case 0xaa:    /* 3DNow! pfsubr */
+	case 0xae:    /* 3DNow! pfacc */
+	case 0xb0:    /* 3DNow! pfcmpeq */
+	case 0xb4:    /* 3DNow! pfmul */
+	case 0xb6:    /* 3DNow! pfrcpit2 */
+	case 0xb7:    /* 3DNow! pmulhrw */
+	case 0xbb:    /* 3DNow! pswapd */
+	case 0xbf:    /* 3DNow! pavgusb */
+	  if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
+	    goto no_support_3dnow_data;
+	  record_full_arch_list_add_reg (ir.regcache, ir.reg);
+	  break;
 
-        default:
+	default:
 no_support_3dnow_data:
-          opcode = (opcode << 8) | opcode8;
-          goto no_support;
-          break;
-        }
+	  opcode = (opcode << 8) | opcode8;
+	  goto no_support;
+	  break;
+	}
       break;
 
     case 0x0faa:    /* rsm */
@@ -7356,69 +7335,69 @@ no_support_3dnow_data:
       if (i386_record_modrm (&ir))
 	return -1;
       switch(ir.reg)
-        {
-        case 0:    /* fxsave */
-          {
-            uint64_t tmpu64;
+	{
+	case 0:    /* fxsave */
+	  {
+	    uint64_t tmpu64;
 
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
 	    if (i386_record_lea_modrm_addr (&ir, &tmpu64))
 	      return -1;
-            if (record_full_arch_list_add_mem (tmpu64, 512))
-              return -1;
-          }
-          break;
-
-        case 1:    /* fxrstor */
-          {
-            int i;
-
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
-
-            for (i = I387_MM0_REGNUM (tdep);
-                 i386_mmx_regnum_p (gdbarch, i); i++)
-              record_full_arch_list_add_reg (ir.regcache, i);
-
-            for (i = I387_XMM0_REGNUM (tdep);
-                 i386_xmm_regnum_p (gdbarch, i); i++)
-              record_full_arch_list_add_reg (ir.regcache, i);
+	    if (record_full_arch_list_add_mem (tmpu64, 512))
+	      return -1;
+	  }
+	  break;
+
+	case 1:    /* fxrstor */
+	  {
+	    int i;
 
-            if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
-              record_full_arch_list_add_reg (ir.regcache,
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+
+	    for (i = I387_MM0_REGNUM (tdep);
+		 i386_mmx_regnum_p (gdbarch, i); i++)
+	      record_full_arch_list_add_reg (ir.regcache, i);
+
+	    for (i = I387_XMM0_REGNUM (tdep);
+		 i386_xmm_regnum_p (gdbarch, i); i++)
+	      record_full_arch_list_add_reg (ir.regcache, i);
+
+	    if (i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
+	      record_full_arch_list_add_reg (ir.regcache,
 					     I387_MXCSR_REGNUM(tdep));
 
-            for (i = I387_ST0_REGNUM (tdep);
-                 i386_fp_regnum_p (gdbarch, i); i++)
-              record_full_arch_list_add_reg (ir.regcache, i);
-
-            for (i = I387_FCTRL_REGNUM (tdep);
-                 i386_fpc_regnum_p (gdbarch, i); i++)
-              record_full_arch_list_add_reg (ir.regcache, i);
-          }
-          break;
-
-        case 2:    /* ldmxcsr */
-          if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
-            goto no_support;
-          record_full_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
-          break;
-
-        case 3:    /* stmxcsr */
-          ir.ot = OT_LONG;
-          if (i386_record_lea_modrm (&ir))
-            return -1;
-          break;
-
-        case 5:    /* lfence */
-        case 6:    /* mfence */
-        case 7:    /* sfence clflush */
-          break;
-
-        default:
-          opcode = (opcode << 8) | ir.modrm;
-          goto no_support;
-          break;
-        }
+	    for (i = I387_ST0_REGNUM (tdep);
+		 i386_fp_regnum_p (gdbarch, i); i++)
+	      record_full_arch_list_add_reg (ir.regcache, i);
+
+	    for (i = I387_FCTRL_REGNUM (tdep);
+		 i386_fpc_regnum_p (gdbarch, i); i++)
+	      record_full_arch_list_add_reg (ir.regcache, i);
+	  }
+	  break;
+
+	case 2:    /* ldmxcsr */
+	  if (!i386_mxcsr_regnum_p (gdbarch, I387_MXCSR_REGNUM(tdep)))
+	    goto no_support;
+	  record_full_arch_list_add_reg (ir.regcache, I387_MXCSR_REGNUM(tdep));
+	  break;
+
+	case 3:    /* stmxcsr */
+	  ir.ot = OT_LONG;
+	  if (i386_record_lea_modrm (&ir))
+	    return -1;
+	  break;
+
+	case 5:    /* lfence */
+	case 6:    /* mfence */
+	case 7:    /* sfence clflush */
+	  break;
+
+	default:
+	  opcode = (opcode << 8) | ir.modrm;
+	  goto no_support;
+	  break;
+	}
       break;
 
     case 0x0fc3:    /* movnti */
@@ -7426,10 +7405,10 @@ no_support_3dnow_data:
       if (i386_record_modrm (&ir))
 	return -1;
       if (ir.mod == 3)
-        goto no_support;
+	goto no_support;
       ir.reg |= rex_r;
       if (i386_record_lea_modrm (&ir))
-        return -1;
+	return -1;
       break;
 
     /* Add prefix to opcode.  */
@@ -7549,541 +7528,541 @@ no_support_3dnow_data:
     case 0x0ffe:
       /* Mask out PREFIX_ADDR.  */
       switch ((prefixes & ~PREFIX_ADDR))
-        {
-        case PREFIX_REPNZ:
-          opcode |= 0xf20000;
-          break;
-        case PREFIX_DATA:
-          opcode |= 0x660000;
-          break;
-        case PREFIX_REPZ:
-          opcode |= 0xf30000;
-          break;
-        }
+	{
+	case PREFIX_REPNZ:
+	  opcode |= 0xf20000;
+	  break;
+	case PREFIX_DATA:
+	  opcode |= 0x660000;
+	  break;
+	case PREFIX_REPZ:
+	  opcode |= 0xf30000;
+	  break;
+	}
 reswitch_prefix_add:
       switch (opcode)
-        {
-        case 0x0f38:
-        case 0x660f38:
-        case 0xf20f38:
-        case 0x0f3a:
-        case 0x660f3a:
-          if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
+	{
+	case 0x0f38:
+	case 0x660f38:
+	case 0xf20f38:
+	case 0x0f3a:
+	case 0x660f3a:
+	  if (record_read_memory (gdbarch, ir.addr, &opcode8, 1))
 	    return -1;
-          ir.addr++;
-          opcode = (uint32_t) opcode8 | opcode << 8;
-          goto reswitch_prefix_add;
-          break;
-
-        case 0x0f10:        /* movups */
-        case 0x660f10:      /* movupd */
-        case 0xf30f10:      /* movss */
-        case 0xf20f10:      /* movsd */
-        case 0x0f12:        /* movlps */
-        case 0x660f12:      /* movlpd */
-        case 0xf30f12:      /* movsldup */
-        case 0xf20f12:      /* movddup */
-        case 0x0f14:        /* unpcklps */
-        case 0x660f14:      /* unpcklpd */
-        case 0x0f15:        /* unpckhps */
-        case 0x660f15:      /* unpckhpd */
-        case 0x0f16:        /* movhps */
-        case 0x660f16:      /* movhpd */
-        case 0xf30f16:      /* movshdup */
-        case 0x0f28:        /* movaps */
-        case 0x660f28:      /* movapd */
-        case 0x0f2a:        /* cvtpi2ps */
-        case 0x660f2a:      /* cvtpi2pd */
-        case 0xf30f2a:      /* cvtsi2ss */
-        case 0xf20f2a:      /* cvtsi2sd */
-        case 0x0f2c:        /* cvttps2pi */
-        case 0x660f2c:      /* cvttpd2pi */
-        case 0x0f2d:        /* cvtps2pi */
-        case 0x660f2d:      /* cvtpd2pi */
-        case 0x660f3800:    /* pshufb */
-        case 0x660f3801:    /* phaddw */
-        case 0x660f3802:    /* phaddd */
-        case 0x660f3803:    /* phaddsw */
-        case 0x660f3804:    /* pmaddubsw */
-        case 0x660f3805:    /* phsubw */
-        case 0x660f3806:    /* phsubd */
-        case 0x660f3807:    /* phsubsw */
-        case 0x660f3808:    /* psignb */
-        case 0x660f3809:    /* psignw */
-        case 0x660f380a:    /* psignd */
-        case 0x660f380b:    /* pmulhrsw */
-        case 0x660f3810:    /* pblendvb */
-        case 0x660f3814:    /* blendvps */
-        case 0x660f3815:    /* blendvpd */
-        case 0x660f381c:    /* pabsb */
-        case 0x660f381d:    /* pabsw */
-        case 0x660f381e:    /* pabsd */
-        case 0x660f3820:    /* pmovsxbw */
-        case 0x660f3821:    /* pmovsxbd */
-        case 0x660f3822:    /* pmovsxbq */
-        case 0x660f3823:    /* pmovsxwd */
-        case 0x660f3824:    /* pmovsxwq */
-        case 0x660f3825:    /* pmovsxdq */
-        case 0x660f3828:    /* pmuldq */
-        case 0x660f3829:    /* pcmpeqq */
-        case 0x660f382a:    /* movntdqa */
-        case 0x660f3a08:    /* roundps */
-        case 0x660f3a09:    /* roundpd */
-        case 0x660f3a0a:    /* roundss */
-        case 0x660f3a0b:    /* roundsd */
-        case 0x660f3a0c:    /* blendps */
-        case 0x660f3a0d:    /* blendpd */
-        case 0x660f3a0e:    /* pblendw */
-        case 0x660f3a0f:    /* palignr */
-        case 0x660f3a20:    /* pinsrb */
-        case 0x660f3a21:    /* insertps */
-        case 0x660f3a22:    /* pinsrd pinsrq */
-        case 0x660f3a40:    /* dpps */
-        case 0x660f3a41:    /* dppd */
-        case 0x660f3a42:    /* mpsadbw */
-        case 0x660f3a60:    /* pcmpestrm */
-        case 0x660f3a61:    /* pcmpestri */
-        case 0x660f3a62:    /* pcmpistrm */
-        case 0x660f3a63:    /* pcmpistri */
-        case 0x0f51:        /* sqrtps */
-        case 0x660f51:      /* sqrtpd */
-        case 0xf20f51:      /* sqrtsd */
-        case 0xf30f51:      /* sqrtss */
-        case 0x0f52:        /* rsqrtps */
-        case 0xf30f52:      /* rsqrtss */
-        case 0x0f53:        /* rcpps */
-        case 0xf30f53:      /* rcpss */
-        case 0x0f54:        /* andps */
-        case 0x660f54:      /* andpd */
-        case 0x0f55:        /* andnps */
-        case 0x660f55:      /* andnpd */
-        case 0x0f56:        /* orps */
-        case 0x660f56:      /* orpd */
-        case 0x0f57:        /* xorps */
-        case 0x660f57:      /* xorpd */
-        case 0x0f58:        /* addps */
-        case 0x660f58:      /* addpd */
-        case 0xf20f58:      /* addsd */
-        case 0xf30f58:      /* addss */
-        case 0x0f59:        /* mulps */
-        case 0x660f59:      /* mulpd */
-        case 0xf20f59:      /* mulsd */
-        case 0xf30f59:      /* mulss */
-        case 0x0f5a:        /* cvtps2pd */
-        case 0x660f5a:      /* cvtpd2ps */
-        case 0xf20f5a:      /* cvtsd2ss */
-        case 0xf30f5a:      /* cvtss2sd */
-        case 0x0f5b:        /* cvtdq2ps */
-        case 0x660f5b:      /* cvtps2dq */
-        case 0xf30f5b:      /* cvttps2dq */
-        case 0x0f5c:        /* subps */
-        case 0x660f5c:      /* subpd */
-        case 0xf20f5c:      /* subsd */
-        case 0xf30f5c:      /* subss */
-        case 0x0f5d:        /* minps */
-        case 0x660f5d:      /* minpd */
-        case 0xf20f5d:      /* minsd */
-        case 0xf30f5d:      /* minss */
-        case 0x0f5e:        /* divps */
-        case 0x660f5e:      /* divpd */
-        case 0xf20f5e:      /* divsd */
-        case 0xf30f5e:      /* divss */
-        case 0x0f5f:        /* maxps */
-        case 0x660f5f:      /* maxpd */
-        case 0xf20f5f:      /* maxsd */
-        case 0xf30f5f:      /* maxss */
-        case 0x660f60:      /* punpcklbw */
-        case 0x660f61:      /* punpcklwd */
-        case 0x660f62:      /* punpckldq */
-        case 0x660f63:      /* packsswb */
-        case 0x660f64:      /* pcmpgtb */
-        case 0x660f65:      /* pcmpgtw */
-        case 0x660f66:      /* pcmpgtd */
-        case 0x660f67:      /* packuswb */
-        case 0x660f68:      /* punpckhbw */
-        case 0x660f69:      /* punpckhwd */
-        case 0x660f6a:      /* punpckhdq */
-        case 0x660f6b:      /* packssdw */
-        case 0x660f6c:      /* punpcklqdq */
-        case 0x660f6d:      /* punpckhqdq */
-        case 0x660f6e:      /* movd */
-        case 0x660f6f:      /* movdqa */
-        case 0xf30f6f:      /* movdqu */
-        case 0x660f70:      /* pshufd */
-        case 0xf20f70:      /* pshuflw */
-        case 0xf30f70:      /* pshufhw */
-        case 0x660f74:      /* pcmpeqb */
-        case 0x660f75:      /* pcmpeqw */
-        case 0x660f76:      /* pcmpeqd */
-        case 0x660f7c:      /* haddpd */
-        case 0xf20f7c:      /* haddps */
-        case 0x660f7d:      /* hsubpd */
-        case 0xf20f7d:      /* hsubps */
-        case 0xf30f7e:      /* movq */
-        case 0x0fc2:        /* cmpps */
-        case 0x660fc2:      /* cmppd */
-        case 0xf20fc2:      /* cmpsd */
-        case 0xf30fc2:      /* cmpss */
-        case 0x660fc4:      /* pinsrw */
-        case 0x0fc6:        /* shufps */
-        case 0x660fc6:      /* shufpd */
-        case 0x660fd0:      /* addsubpd */
-        case 0xf20fd0:      /* addsubps */
-        case 0x660fd1:      /* psrlw */
-        case 0x660fd2:      /* psrld */
-        case 0x660fd3:      /* psrlq */
-        case 0x660fd4:      /* paddq */
-        case 0x660fd5:      /* pmullw */
-        case 0xf30fd6:      /* movq2dq */
-        case 0x660fd8:      /* psubusb */
-        case 0x660fd9:      /* psubusw */
-        case 0x660fda:      /* pminub */
-        case 0x660fdb:      /* pand */
-        case 0x660fdc:      /* paddusb */
-        case 0x660fdd:      /* paddusw */
-        case 0x660fde:      /* pmaxub */
-        case 0x660fdf:      /* pandn */
-        case 0x660fe0:      /* pavgb */
-        case 0x660fe1:      /* psraw */
-        case 0x660fe2:      /* psrad */
-        case 0x660fe3:      /* pavgw */
-        case 0x660fe4:      /* pmulhuw */
-        case 0x660fe5:      /* pmulhw */
-        case 0x660fe6:      /* cvttpd2dq */
-        case 0xf20fe6:      /* cvtpd2dq */
-        case 0xf30fe6:      /* cvtdq2pd */
-        case 0x660fe8:      /* psubsb */
-        case 0x660fe9:      /* psubsw */
-        case 0x660fea:      /* pminsw */
-        case 0x660feb:      /* por */
-        case 0x660fec:      /* paddsb */
-        case 0x660fed:      /* paddsw */
-        case 0x660fee:      /* pmaxsw */
-        case 0x660fef:      /* pxor */
-        case 0xf20ff0:      /* lddqu */
-        case 0x660ff1:      /* psllw */
-        case 0x660ff2:      /* pslld */
-        case 0x660ff3:      /* psllq */
-        case 0x660ff4:      /* pmuludq */
-        case 0x660ff5:      /* pmaddwd */
-        case 0x660ff6:      /* psadbw */
-        case 0x660ff8:      /* psubb */
-        case 0x660ff9:      /* psubw */
-        case 0x660ffa:      /* psubd */
-        case 0x660ffb:      /* psubq */
-        case 0x660ffc:      /* paddb */
-        case 0x660ffd:      /* paddw */
-        case 0x660ffe:      /* paddd */
-          if (i386_record_modrm (&ir))
+	  ir.addr++;
+	  opcode = (uint32_t) opcode8 | opcode << 8;
+	  goto reswitch_prefix_add;
+	  break;
+
+	case 0x0f10:        /* movups */
+	case 0x660f10:      /* movupd */
+	case 0xf30f10:      /* movss */
+	case 0xf20f10:      /* movsd */
+	case 0x0f12:        /* movlps */
+	case 0x660f12:      /* movlpd */
+	case 0xf30f12:      /* movsldup */
+	case 0xf20f12:      /* movddup */
+	case 0x0f14:        /* unpcklps */
+	case 0x660f14:      /* unpcklpd */
+	case 0x0f15:        /* unpckhps */
+	case 0x660f15:      /* unpckhpd */
+	case 0x0f16:        /* movhps */
+	case 0x660f16:      /* movhpd */
+	case 0xf30f16:      /* movshdup */
+	case 0x0f28:        /* movaps */
+	case 0x660f28:      /* movapd */
+	case 0x0f2a:        /* cvtpi2ps */
+	case 0x660f2a:      /* cvtpi2pd */
+	case 0xf30f2a:      /* cvtsi2ss */
+	case 0xf20f2a:      /* cvtsi2sd */
+	case 0x0f2c:        /* cvttps2pi */
+	case 0x660f2c:      /* cvttpd2pi */
+	case 0x0f2d:        /* cvtps2pi */
+	case 0x660f2d:      /* cvtpd2pi */
+	case 0x660f3800:    /* pshufb */
+	case 0x660f3801:    /* phaddw */
+	case 0x660f3802:    /* phaddd */
+	case 0x660f3803:    /* phaddsw */
+	case 0x660f3804:    /* pmaddubsw */
+	case 0x660f3805:    /* phsubw */
+	case 0x660f3806:    /* phsubd */
+	case 0x660f3807:    /* phsubsw */
+	case 0x660f3808:    /* psignb */
+	case 0x660f3809:    /* psignw */
+	case 0x660f380a:    /* psignd */
+	case 0x660f380b:    /* pmulhrsw */
+	case 0x660f3810:    /* pblendvb */
+	case 0x660f3814:    /* blendvps */
+	case 0x660f3815:    /* blendvpd */
+	case 0x660f381c:    /* pabsb */
+	case 0x660f381d:    /* pabsw */
+	case 0x660f381e:    /* pabsd */
+	case 0x660f3820:    /* pmovsxbw */
+	case 0x660f3821:    /* pmovsxbd */
+	case 0x660f3822:    /* pmovsxbq */
+	case 0x660f3823:    /* pmovsxwd */
+	case 0x660f3824:    /* pmovsxwq */
+	case 0x660f3825:    /* pmovsxdq */
+	case 0x660f3828:    /* pmuldq */
+	case 0x660f3829:    /* pcmpeqq */
+	case 0x660f382a:    /* movntdqa */
+	case 0x660f3a08:    /* roundps */
+	case 0x660f3a09:    /* roundpd */
+	case 0x660f3a0a:    /* roundss */
+	case 0x660f3a0b:    /* roundsd */
+	case 0x660f3a0c:    /* blendps */
+	case 0x660f3a0d:    /* blendpd */
+	case 0x660f3a0e:    /* pblendw */
+	case 0x660f3a0f:    /* palignr */
+	case 0x660f3a20:    /* pinsrb */
+	case 0x660f3a21:    /* insertps */
+	case 0x660f3a22:    /* pinsrd pinsrq */
+	case 0x660f3a40:    /* dpps */
+	case 0x660f3a41:    /* dppd */
+	case 0x660f3a42:    /* mpsadbw */
+	case 0x660f3a60:    /* pcmpestrm */
+	case 0x660f3a61:    /* pcmpestri */
+	case 0x660f3a62:    /* pcmpistrm */
+	case 0x660f3a63:    /* pcmpistri */
+	case 0x0f51:        /* sqrtps */
+	case 0x660f51:      /* sqrtpd */
+	case 0xf20f51:      /* sqrtsd */
+	case 0xf30f51:      /* sqrtss */
+	case 0x0f52:        /* rsqrtps */
+	case 0xf30f52:      /* rsqrtss */
+	case 0x0f53:        /* rcpps */
+	case 0xf30f53:      /* rcpss */
+	case 0x0f54:        /* andps */
+	case 0x660f54:      /* andpd */
+	case 0x0f55:        /* andnps */
+	case 0x660f55:      /* andnpd */
+	case 0x0f56:        /* orps */
+	case 0x660f56:      /* orpd */
+	case 0x0f57:        /* xorps */
+	case 0x660f57:      /* xorpd */
+	case 0x0f58:        /* addps */
+	case 0x660f58:      /* addpd */
+	case 0xf20f58:      /* addsd */
+	case 0xf30f58:      /* addss */
+	case 0x0f59:        /* mulps */
+	case 0x660f59:      /* mulpd */
+	case 0xf20f59:      /* mulsd */
+	case 0xf30f59:      /* mulss */
+	case 0x0f5a:        /* cvtps2pd */
+	case 0x660f5a:      /* cvtpd2ps */
+	case 0xf20f5a:      /* cvtsd2ss */
+	case 0xf30f5a:      /* cvtss2sd */
+	case 0x0f5b:        /* cvtdq2ps */
+	case 0x660f5b:      /* cvtps2dq */
+	case 0xf30f5b:      /* cvttps2dq */
+	case 0x0f5c:        /* subps */
+	case 0x660f5c:      /* subpd */
+	case 0xf20f5c:      /* subsd */
+	case 0xf30f5c:      /* subss */
+	case 0x0f5d:        /* minps */
+	case 0x660f5d:      /* minpd */
+	case 0xf20f5d:      /* minsd */
+	case 0xf30f5d:      /* minss */
+	case 0x0f5e:        /* divps */
+	case 0x660f5e:      /* divpd */
+	case 0xf20f5e:      /* divsd */
+	case 0xf30f5e:      /* divss */
+	case 0x0f5f:        /* maxps */
+	case 0x660f5f:      /* maxpd */
+	case 0xf20f5f:      /* maxsd */
+	case 0xf30f5f:      /* maxss */
+	case 0x660f60:      /* punpcklbw */
+	case 0x660f61:      /* punpcklwd */
+	case 0x660f62:      /* punpckldq */
+	case 0x660f63:      /* packsswb */
+	case 0x660f64:      /* pcmpgtb */
+	case 0x660f65:      /* pcmpgtw */
+	case 0x660f66:      /* pcmpgtd */
+	case 0x660f67:      /* packuswb */
+	case 0x660f68:      /* punpckhbw */
+	case 0x660f69:      /* punpckhwd */
+	case 0x660f6a:      /* punpckhdq */
+	case 0x660f6b:      /* packssdw */
+	case 0x660f6c:      /* punpcklqdq */
+	case 0x660f6d:      /* punpckhqdq */
+	case 0x660f6e:      /* movd */
+	case 0x660f6f:      /* movdqa */
+	case 0xf30f6f:      /* movdqu */
+	case 0x660f70:      /* pshufd */
+	case 0xf20f70:      /* pshuflw */
+	case 0xf30f70:      /* pshufhw */
+	case 0x660f74:      /* pcmpeqb */
+	case 0x660f75:      /* pcmpeqw */
+	case 0x660f76:      /* pcmpeqd */
+	case 0x660f7c:      /* haddpd */
+	case 0xf20f7c:      /* haddps */
+	case 0x660f7d:      /* hsubpd */
+	case 0xf20f7d:      /* hsubps */
+	case 0xf30f7e:      /* movq */
+	case 0x0fc2:        /* cmpps */
+	case 0x660fc2:      /* cmppd */
+	case 0xf20fc2:      /* cmpsd */
+	case 0xf30fc2:      /* cmpss */
+	case 0x660fc4:      /* pinsrw */
+	case 0x0fc6:        /* shufps */
+	case 0x660fc6:      /* shufpd */
+	case 0x660fd0:      /* addsubpd */
+	case 0xf20fd0:      /* addsubps */
+	case 0x660fd1:      /* psrlw */
+	case 0x660fd2:      /* psrld */
+	case 0x660fd3:      /* psrlq */
+	case 0x660fd4:      /* paddq */
+	case 0x660fd5:      /* pmullw */
+	case 0xf30fd6:      /* movq2dq */
+	case 0x660fd8:      /* psubusb */
+	case 0x660fd9:      /* psubusw */
+	case 0x660fda:      /* pminub */
+	case 0x660fdb:      /* pand */
+	case 0x660fdc:      /* paddusb */
+	case 0x660fdd:      /* paddusw */
+	case 0x660fde:      /* pmaxub */
+	case 0x660fdf:      /* pandn */
+	case 0x660fe0:      /* pavgb */
+	case 0x660fe1:      /* psraw */
+	case 0x660fe2:      /* psrad */
+	case 0x660fe3:      /* pavgw */
+	case 0x660fe4:      /* pmulhuw */
+	case 0x660fe5:      /* pmulhw */
+	case 0x660fe6:      /* cvttpd2dq */
+	case 0xf20fe6:      /* cvtpd2dq */
+	case 0xf30fe6:      /* cvtdq2pd */
+	case 0x660fe8:      /* psubsb */
+	case 0x660fe9:      /* psubsw */
+	case 0x660fea:      /* pminsw */
+	case 0x660feb:      /* por */
+	case 0x660fec:      /* paddsb */
+	case 0x660fed:      /* paddsw */
+	case 0x660fee:      /* pmaxsw */
+	case 0x660fef:      /* pxor */
+	case 0xf20ff0:      /* lddqu */
+	case 0x660ff1:      /* psllw */
+	case 0x660ff2:      /* pslld */
+	case 0x660ff3:      /* psllq */
+	case 0x660ff4:      /* pmuludq */
+	case 0x660ff5:      /* pmaddwd */
+	case 0x660ff6:      /* psadbw */
+	case 0x660ff8:      /* psubb */
+	case 0x660ff9:      /* psubw */
+	case 0x660ffa:      /* psubd */
+	case 0x660ffb:      /* psubq */
+	case 0x660ffc:      /* paddb */
+	case 0x660ffd:      /* paddw */
+	case 0x660ffe:      /* paddd */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          ir.reg |= rex_r;
-          if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg))
-            goto no_support;
-          record_full_arch_list_add_reg (ir.regcache,
+	  ir.reg |= rex_r;
+	  if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.reg))
+	    goto no_support;
+	  record_full_arch_list_add_reg (ir.regcache,
 					 I387_XMM0_REGNUM (tdep) + ir.reg);
-          if ((opcode & 0xfffffffc) == 0x660f3a60)
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
-          break;
-
-        case 0x0f11:        /* movups */
-        case 0x660f11:      /* movupd */
-        case 0xf30f11:      /* movss */
-        case 0xf20f11:      /* movsd */
-        case 0x0f13:        /* movlps */
-        case 0x660f13:      /* movlpd */
-        case 0x0f17:        /* movhps */
-        case 0x660f17:      /* movhpd */
-        case 0x0f29:        /* movaps */
-        case 0x660f29:      /* movapd */
-        case 0x660f3a14:    /* pextrb */
-        case 0x660f3a15:    /* pextrw */
-        case 0x660f3a16:    /* pextrd pextrq */
-        case 0x660f3a17:    /* extractps */
-        case 0x660f7f:      /* movdqa */
-        case 0xf30f7f:      /* movdqu */
-          if (i386_record_modrm (&ir))
+	  if ((opcode & 0xfffffffc) == 0x660f3a60)
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	  break;
+
+	case 0x0f11:        /* movups */
+	case 0x660f11:      /* movupd */
+	case 0xf30f11:      /* movss */
+	case 0xf20f11:      /* movsd */
+	case 0x0f13:        /* movlps */
+	case 0x660f13:      /* movlpd */
+	case 0x0f17:        /* movhps */
+	case 0x660f17:      /* movhpd */
+	case 0x0f29:        /* movaps */
+	case 0x660f29:      /* movapd */
+	case 0x660f3a14:    /* pextrb */
+	case 0x660f3a15:    /* pextrw */
+	case 0x660f3a16:    /* pextrd pextrq */
+	case 0x660f3a17:    /* extractps */
+	case 0x660f7f:      /* movdqa */
+	case 0xf30f7f:      /* movdqu */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          if (ir.mod == 3)
-            {
-              if (opcode == 0x0f13 || opcode == 0x660f13
-                  || opcode == 0x0f17 || opcode == 0x660f17)
-                goto no_support;
-              ir.rm |= ir.rex_b;
-              if (!i386_xmm_regnum_p (gdbarch,
+	  if (ir.mod == 3)
+	    {
+	      if (opcode == 0x0f13 || opcode == 0x660f13
+		  || opcode == 0x0f17 || opcode == 0x660f17)
+		goto no_support;
+	      ir.rm |= ir.rex_b;
+	      if (!i386_xmm_regnum_p (gdbarch,
 				      I387_XMM0_REGNUM (tdep) + ir.rm))
-                goto no_support;
-              record_full_arch_list_add_reg (ir.regcache,
+		goto no_support;
+	      record_full_arch_list_add_reg (ir.regcache,
 					     I387_XMM0_REGNUM (tdep) + ir.rm);
-            }
-          else
-            {
-              switch (opcode)
-                {
-                  case 0x660f3a14:
-                    ir.ot = OT_BYTE;
-                    break;
-                  case 0x660f3a15:
-                    ir.ot = OT_WORD;
-                    break;
-                  case 0x660f3a16:
-                    ir.ot = OT_LONG;
-                    break;
-                  case 0x660f3a17:
-                    ir.ot = OT_QUAD;
-                    break;
-                  default:
-                    ir.ot = OT_DQUAD;
-                    break;
-                }
-              if (i386_record_lea_modrm (&ir))
-                return -1;
-            }
-          break;
-
-        case 0x0f2b:      /* movntps */
-        case 0x660f2b:    /* movntpd */
-        case 0x0fe7:      /* movntq */
-        case 0x660fe7:    /* movntdq */
-          if (ir.mod == 3)
-            goto no_support;
-          if (opcode == 0x0fe7)
-            ir.ot = OT_QUAD;
-          else
-            ir.ot = OT_DQUAD;
-          if (i386_record_lea_modrm (&ir))
-            return -1;
-          break;
-
-        case 0xf30f2c:      /* cvttss2si */
-        case 0xf20f2c:      /* cvttsd2si */
-        case 0xf30f2d:      /* cvtss2si */
-        case 0xf20f2d:      /* cvtsd2si */
-        case 0xf20f38f0:    /* crc32 */
-        case 0xf20f38f1:    /* crc32 */
-        case 0x0f50:        /* movmskps */
-        case 0x660f50:      /* movmskpd */
-        case 0x0fc5:        /* pextrw */
-        case 0x660fc5:      /* pextrw */
-        case 0x0fd7:        /* pmovmskb */
-        case 0x660fd7:      /* pmovmskb */
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
-          break;
-
-        case 0x0f3800:    /* pshufb */
-        case 0x0f3801:    /* phaddw */
-        case 0x0f3802:    /* phaddd */
-        case 0x0f3803:    /* phaddsw */
-        case 0x0f3804:    /* pmaddubsw */
-        case 0x0f3805:    /* phsubw */
-        case 0x0f3806:    /* phsubd */
-        case 0x0f3807:    /* phsubsw */
-        case 0x0f3808:    /* psignb */
-        case 0x0f3809:    /* psignw */
-        case 0x0f380a:    /* psignd */
-        case 0x0f380b:    /* pmulhrsw */
-        case 0x0f381c:    /* pabsb */
-        case 0x0f381d:    /* pabsw */
-        case 0x0f381e:    /* pabsd */
-        case 0x0f382b:    /* packusdw */
-        case 0x0f3830:    /* pmovzxbw */
-        case 0x0f3831:    /* pmovzxbd */
-        case 0x0f3832:    /* pmovzxbq */
-        case 0x0f3833:    /* pmovzxwd */
-        case 0x0f3834:    /* pmovzxwq */
-        case 0x0f3835:    /* pmovzxdq */
-        case 0x0f3837:    /* pcmpgtq */
-        case 0x0f3838:    /* pminsb */
-        case 0x0f3839:    /* pminsd */
-        case 0x0f383a:    /* pminuw */
-        case 0x0f383b:    /* pminud */
-        case 0x0f383c:    /* pmaxsb */
-        case 0x0f383d:    /* pmaxsd */
-        case 0x0f383e:    /* pmaxuw */
-        case 0x0f383f:    /* pmaxud */
-        case 0x0f3840:    /* pmulld */
-        case 0x0f3841:    /* phminposuw */
-        case 0x0f3a0f:    /* palignr */
-        case 0x0f60:      /* punpcklbw */
-        case 0x0f61:      /* punpcklwd */
-        case 0x0f62:      /* punpckldq */
-        case 0x0f63:      /* packsswb */
-        case 0x0f64:      /* pcmpgtb */
-        case 0x0f65:      /* pcmpgtw */
-        case 0x0f66:      /* pcmpgtd */
-        case 0x0f67:      /* packuswb */
-        case 0x0f68:      /* punpckhbw */
-        case 0x0f69:      /* punpckhwd */
-        case 0x0f6a:      /* punpckhdq */
-        case 0x0f6b:      /* packssdw */
-        case 0x0f6e:      /* movd */
-        case 0x0f6f:      /* movq */
-        case 0x0f70:      /* pshufw */
-        case 0x0f74:      /* pcmpeqb */
-        case 0x0f75:      /* pcmpeqw */
-        case 0x0f76:      /* pcmpeqd */
-        case 0x0fc4:      /* pinsrw */
-        case 0x0fd1:      /* psrlw */
-        case 0x0fd2:      /* psrld */
-        case 0x0fd3:      /* psrlq */
-        case 0x0fd4:      /* paddq */
-        case 0x0fd5:      /* pmullw */
-        case 0xf20fd6:    /* movdq2q */
-        case 0x0fd8:      /* psubusb */
-        case 0x0fd9:      /* psubusw */
-        case 0x0fda:      /* pminub */
-        case 0x0fdb:      /* pand */
-        case 0x0fdc:      /* paddusb */
-        case 0x0fdd:      /* paddusw */
-        case 0x0fde:      /* pmaxub */
-        case 0x0fdf:      /* pandn */
-        case 0x0fe0:      /* pavgb */
-        case 0x0fe1:      /* psraw */
-        case 0x0fe2:      /* psrad */
-        case 0x0fe3:      /* pavgw */
-        case 0x0fe4:      /* pmulhuw */
-        case 0x0fe5:      /* pmulhw */
-        case 0x0fe8:      /* psubsb */
-        case 0x0fe9:      /* psubsw */
-        case 0x0fea:      /* pminsw */
-        case 0x0feb:      /* por */
-        case 0x0fec:      /* paddsb */
-        case 0x0fed:      /* paddsw */
-        case 0x0fee:      /* pmaxsw */
-        case 0x0fef:      /* pxor */
-        case 0x0ff1:      /* psllw */
-        case 0x0ff2:      /* pslld */
-        case 0x0ff3:      /* psllq */
-        case 0x0ff4:      /* pmuludq */
-        case 0x0ff5:      /* pmaddwd */
-        case 0x0ff6:      /* psadbw */
-        case 0x0ff8:      /* psubb */
-        case 0x0ff9:      /* psubw */
-        case 0x0ffa:      /* psubd */
-        case 0x0ffb:      /* psubq */
-        case 0x0ffc:      /* paddb */
-        case 0x0ffd:      /* paddw */
-        case 0x0ffe:      /* paddd */
-          if (i386_record_modrm (&ir))
+	    }
+	  else
+	    {
+	      switch (opcode)
+		{
+		  case 0x660f3a14:
+		    ir.ot = OT_BYTE;
+		    break;
+		  case 0x660f3a15:
+		    ir.ot = OT_WORD;
+		    break;
+		  case 0x660f3a16:
+		    ir.ot = OT_LONG;
+		    break;
+		  case 0x660f3a17:
+		    ir.ot = OT_QUAD;
+		    break;
+		  default:
+		    ir.ot = OT_DQUAD;
+		    break;
+		}
+	      if (i386_record_lea_modrm (&ir))
+		return -1;
+	    }
+	  break;
+
+	case 0x0f2b:      /* movntps */
+	case 0x660f2b:    /* movntpd */
+	case 0x0fe7:      /* movntq */
+	case 0x660fe7:    /* movntdq */
+	  if (ir.mod == 3)
+	    goto no_support;
+	  if (opcode == 0x0fe7)
+	    ir.ot = OT_QUAD;
+	  else
+	    ir.ot = OT_DQUAD;
+	  if (i386_record_lea_modrm (&ir))
+	    return -1;
+	  break;
+
+	case 0xf30f2c:      /* cvttss2si */
+	case 0xf20f2c:      /* cvttsd2si */
+	case 0xf30f2d:      /* cvtss2si */
+	case 0xf20f2d:      /* cvtsd2si */
+	case 0xf20f38f0:    /* crc32 */
+	case 0xf20f38f1:    /* crc32 */
+	case 0x0f50:        /* movmskps */
+	case 0x660f50:      /* movmskpd */
+	case 0x0fc5:        /* pextrw */
+	case 0x660fc5:      /* pextrw */
+	case 0x0fd7:        /* pmovmskb */
+	case 0x660fd7:      /* pmovmskb */
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg | rex_r);
+	  break;
+
+	case 0x0f3800:    /* pshufb */
+	case 0x0f3801:    /* phaddw */
+	case 0x0f3802:    /* phaddd */
+	case 0x0f3803:    /* phaddsw */
+	case 0x0f3804:    /* pmaddubsw */
+	case 0x0f3805:    /* phsubw */
+	case 0x0f3806:    /* phsubd */
+	case 0x0f3807:    /* phsubsw */
+	case 0x0f3808:    /* psignb */
+	case 0x0f3809:    /* psignw */
+	case 0x0f380a:    /* psignd */
+	case 0x0f380b:    /* pmulhrsw */
+	case 0x0f381c:    /* pabsb */
+	case 0x0f381d:    /* pabsw */
+	case 0x0f381e:    /* pabsd */
+	case 0x0f382b:    /* packusdw */
+	case 0x0f3830:    /* pmovzxbw */
+	case 0x0f3831:    /* pmovzxbd */
+	case 0x0f3832:    /* pmovzxbq */
+	case 0x0f3833:    /* pmovzxwd */
+	case 0x0f3834:    /* pmovzxwq */
+	case 0x0f3835:    /* pmovzxdq */
+	case 0x0f3837:    /* pcmpgtq */
+	case 0x0f3838:    /* pminsb */
+	case 0x0f3839:    /* pminsd */
+	case 0x0f383a:    /* pminuw */
+	case 0x0f383b:    /* pminud */
+	case 0x0f383c:    /* pmaxsb */
+	case 0x0f383d:    /* pmaxsd */
+	case 0x0f383e:    /* pmaxuw */
+	case 0x0f383f:    /* pmaxud */
+	case 0x0f3840:    /* pmulld */
+	case 0x0f3841:    /* phminposuw */
+	case 0x0f3a0f:    /* palignr */
+	case 0x0f60:      /* punpcklbw */
+	case 0x0f61:      /* punpcklwd */
+	case 0x0f62:      /* punpckldq */
+	case 0x0f63:      /* packsswb */
+	case 0x0f64:      /* pcmpgtb */
+	case 0x0f65:      /* pcmpgtw */
+	case 0x0f66:      /* pcmpgtd */
+	case 0x0f67:      /* packuswb */
+	case 0x0f68:      /* punpckhbw */
+	case 0x0f69:      /* punpckhwd */
+	case 0x0f6a:      /* punpckhdq */
+	case 0x0f6b:      /* packssdw */
+	case 0x0f6e:      /* movd */
+	case 0x0f6f:      /* movq */
+	case 0x0f70:      /* pshufw */
+	case 0x0f74:      /* pcmpeqb */
+	case 0x0f75:      /* pcmpeqw */
+	case 0x0f76:      /* pcmpeqd */
+	case 0x0fc4:      /* pinsrw */
+	case 0x0fd1:      /* psrlw */
+	case 0x0fd2:      /* psrld */
+	case 0x0fd3:      /* psrlq */
+	case 0x0fd4:      /* paddq */
+	case 0x0fd5:      /* pmullw */
+	case 0xf20fd6:    /* movdq2q */
+	case 0x0fd8:      /* psubusb */
+	case 0x0fd9:      /* psubusw */
+	case 0x0fda:      /* pminub */
+	case 0x0fdb:      /* pand */
+	case 0x0fdc:      /* paddusb */
+	case 0x0fdd:      /* paddusw */
+	case 0x0fde:      /* pmaxub */
+	case 0x0fdf:      /* pandn */
+	case 0x0fe0:      /* pavgb */
+	case 0x0fe1:      /* psraw */
+	case 0x0fe2:      /* psrad */
+	case 0x0fe3:      /* pavgw */
+	case 0x0fe4:      /* pmulhuw */
+	case 0x0fe5:      /* pmulhw */
+	case 0x0fe8:      /* psubsb */
+	case 0x0fe9:      /* psubsw */
+	case 0x0fea:      /* pminsw */
+	case 0x0feb:      /* por */
+	case 0x0fec:      /* paddsb */
+	case 0x0fed:      /* paddsw */
+	case 0x0fee:      /* pmaxsw */
+	case 0x0fef:      /* pxor */
+	case 0x0ff1:      /* psllw */
+	case 0x0ff2:      /* pslld */
+	case 0x0ff3:      /* psllq */
+	case 0x0ff4:      /* pmuludq */
+	case 0x0ff5:      /* pmaddwd */
+	case 0x0ff6:      /* psadbw */
+	case 0x0ff8:      /* psubb */
+	case 0x0ff9:      /* psubw */
+	case 0x0ffa:      /* psubd */
+	case 0x0ffb:      /* psubq */
+	case 0x0ffc:      /* paddb */
+	case 0x0ffd:      /* paddw */
+	case 0x0ffe:      /* paddd */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
-            goto no_support;
-          record_full_arch_list_add_reg (ir.regcache,
+	  if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.reg))
+	    goto no_support;
+	  record_full_arch_list_add_reg (ir.regcache,
 					 I387_MM0_REGNUM (tdep) + ir.reg);
-          break;
+	  break;
 
-        case 0x0f71:    /* psllw */
-        case 0x0f72:    /* pslld */
-        case 0x0f73:    /* psllq */
-          if (i386_record_modrm (&ir))
+	case 0x0f71:    /* psllw */
+	case 0x0f72:    /* pslld */
+	case 0x0f73:    /* psllq */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
-            goto no_support;
-          record_full_arch_list_add_reg (ir.regcache,
+	  if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
+	    goto no_support;
+	  record_full_arch_list_add_reg (ir.regcache,
 					 I387_MM0_REGNUM (tdep) + ir.rm);
-          break;
+	  break;
 
-        case 0x660f71:    /* psllw */
-        case 0x660f72:    /* pslld */
-        case 0x660f73:    /* psllq */
-          if (i386_record_modrm (&ir))
+	case 0x660f71:    /* psllw */
+	case 0x660f72:    /* pslld */
+	case 0x660f73:    /* psllq */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          ir.rm |= ir.rex_b;
-          if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm))
-            goto no_support;
-          record_full_arch_list_add_reg (ir.regcache,
+	  ir.rm |= ir.rex_b;
+	  if (!i386_xmm_regnum_p (gdbarch, I387_XMM0_REGNUM (tdep) + ir.rm))
+	    goto no_support;
+	  record_full_arch_list_add_reg (ir.regcache,
 					 I387_XMM0_REGNUM (tdep) + ir.rm);
-          break;
+	  break;
 
-        case 0x0f7e:      /* movd */
-        case 0x660f7e:    /* movd */
-          if (i386_record_modrm (&ir))
+	case 0x0f7e:      /* movd */
+	case 0x660f7e:    /* movd */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          if (ir.mod == 3)
-            I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
-          else
-            {
-              if (ir.dflag == 2)
-                ir.ot = OT_QUAD;
-              else
-                ir.ot = OT_LONG;
-              if (i386_record_lea_modrm (&ir))
-                return -1;
-            }
-          break;
+	  if (ir.mod == 3)
+	    I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.rm | ir.rex_b);
+	  else
+	    {
+	      if (ir.dflag == 2)
+		ir.ot = OT_QUAD;
+	      else
+		ir.ot = OT_LONG;
+	      if (i386_record_lea_modrm (&ir))
+		return -1;
+	    }
+	  break;
 
-        case 0x0f7f:    /* movq */
-          if (i386_record_modrm (&ir))
+	case 0x0f7f:    /* movq */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          if (ir.mod == 3)
-            {
-              if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
-                goto no_support;
-              record_full_arch_list_add_reg (ir.regcache,
+	  if (ir.mod == 3)
+	    {
+	      if (!i386_mmx_regnum_p (gdbarch, I387_MM0_REGNUM (tdep) + ir.rm))
+		goto no_support;
+	      record_full_arch_list_add_reg (ir.regcache,
 					     I387_MM0_REGNUM (tdep) + ir.rm);
-            }
-          else
-            {
-              ir.ot = OT_QUAD;
-              if (i386_record_lea_modrm (&ir))
-                return -1;
-            }
-          break;
+	    }
+	  else
+	    {
+	      ir.ot = OT_QUAD;
+	      if (i386_record_lea_modrm (&ir))
+		return -1;
+	    }
+	  break;
 
-        case 0xf30fb8:    /* popcnt */
-          if (i386_record_modrm (&ir))
+	case 0xf30fb8:    /* popcnt */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
-          break;
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (ir.reg);
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	  break;
 
-        case 0x660fd6:    /* movq */
-          if (i386_record_modrm (&ir))
+	case 0x660fd6:    /* movq */
+	  if (i386_record_modrm (&ir))
 	    return -1;
-          if (ir.mod == 3)
-            {
-              ir.rm |= ir.rex_b;
-              if (!i386_xmm_regnum_p (gdbarch,
+	  if (ir.mod == 3)
+	    {
+	      ir.rm |= ir.rex_b;
+	      if (!i386_xmm_regnum_p (gdbarch,
 				      I387_XMM0_REGNUM (tdep) + ir.rm))
-                goto no_support;
-              record_full_arch_list_add_reg (ir.regcache,
+		goto no_support;
+	      record_full_arch_list_add_reg (ir.regcache,
 					     I387_XMM0_REGNUM (tdep) + ir.rm);
-            }
-          else
-            {
-              ir.ot = OT_QUAD;
-              if (i386_record_lea_modrm (&ir))
-                return -1;
-            }
-          break;
-
-        case 0x660f3817:    /* ptest */
-        case 0x0f2e:        /* ucomiss */
-        case 0x660f2e:      /* ucomisd */
-        case 0x0f2f:        /* comiss */
-        case 0x660f2f:      /* comisd */
-          I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
-          break;
-
-        case 0x0ff7:    /* maskmovq */
-          regcache_raw_read_unsigned (ir.regcache,
-                                      ir.regmap[X86_RECORD_REDI_REGNUM],
-                                      &addr);
-          if (record_full_arch_list_add_mem (addr, 64))
-            return -1;
-          break;
-
-        case 0x660ff7:    /* maskmovdqu */
-          regcache_raw_read_unsigned (ir.regcache,
-                                      ir.regmap[X86_RECORD_REDI_REGNUM],
-                                      &addr);
-          if (record_full_arch_list_add_mem (addr, 128))
-            return -1;
-          break;
-
-        default:
-          goto no_support;
-          break;
-        }
+	    }
+	  else
+	    {
+	      ir.ot = OT_QUAD;
+	      if (i386_record_lea_modrm (&ir))
+		return -1;
+	    }
+	  break;
+
+	case 0x660f3817:    /* ptest */
+	case 0x0f2e:        /* ucomiss */
+	case 0x660f2e:      /* ucomisd */
+	case 0x0f2f:        /* comiss */
+	case 0x660f2f:      /* comisd */
+	  I386_RECORD_FULL_ARCH_LIST_ADD_REG (X86_RECORD_EFLAGS_REGNUM);
+	  break;
+
+	case 0x0ff7:    /* maskmovq */
+	  regcache_raw_read_unsigned (ir.regcache,
+				      ir.regmap[X86_RECORD_REDI_REGNUM],
+				      &addr);
+	  if (record_full_arch_list_add_mem (addr, 64))
+	    return -1;
+	  break;
+
+	case 0x660ff7:    /* maskmovdqu */
+	  regcache_raw_read_unsigned (ir.regcache,
+				      ir.regmap[X86_RECORD_REDI_REGNUM],
+				      &addr);
+	  if (record_full_arch_list_add_mem (addr, 128))
+	    return -1;
+	  break;
+
+	default:
+	  goto no_support;
+	  break;
+	}
       break;
 
     default:
@@ -8100,9 +8079,9 @@ reswitch_prefix_add:
 
  no_support:
   printf_unfiltered (_("Process record does not support instruction 0x%02x "
-                       "at address %s.\n"),
-                     (unsigned int) (opcode),
-                     paddress (gdbarch, ir.orig_addr));
+		       "at address %s.\n"),
+		     (unsigned int) (opcode),
+		     paddress (gdbarch, ir.orig_addr));
   return -1;
 }
 
@@ -8186,7 +8165,12 @@ i386_floatformat_for_type (struct gdbarc
 	|| strcmp (name, "_Float128") == 0
 	|| strcmp (name, "complex _Float128") == 0
 	|| strcmp (name, "complex(kind=16)") == 0
-	|| strcmp (name, "real(kind=16)") == 0)
+	|| strcmp (name, "complex*32") == 0
+	|| strcmp (name, "COMPLEX*32") == 0
+	|| strcmp (name, "quad complex") == 0
+	|| strcmp (name, "real(kind=16)") == 0
+	|| strcmp (name, "real*16") == 0
+	|| strcmp (name, "REAL*16") == 0)
       return floatformats_ia64_quad;
 
   return default_floatformat_for_type (gdbarch, name, len);
@@ -8375,13 +8359,13 @@ i386_type_align (struct gdbarch *gdbarch
 
   if (gdbarch_ptr_bit (gdbarch) == 32)
     {
-      if ((TYPE_CODE (type) == TYPE_CODE_INT
-	   || TYPE_CODE (type) == TYPE_CODE_FLT)
+      if ((type->code () == TYPE_CODE_INT
+	   || type->code () == TYPE_CODE_FLT)
 	  && TYPE_LENGTH (type) > 4)
 	return 4;
 
       /* Handle x86's funny long double.  */
-      if (TYPE_CODE (type) == TYPE_CODE_FLT
+      if (type->code () == TYPE_CODE_FLT
 	  && gdbarch_long_double_bit (gdbarch) == TYPE_LENGTH (type) * 8)
 	return 4;
     }
@@ -8397,7 +8381,6 @@ i386_gdbarch_init (struct gdbarch_info i
 {
   struct gdbarch_tdep *tdep;
   struct gdbarch *gdbarch;
-  struct tdesc_arch_data *tdesc_data;
   const struct target_desc *tdesc;
   int mm0_regnum;
   int ymm0_regnum;
@@ -8460,6 +8443,9 @@ i386_gdbarch_init (struct gdbarch_info i
      alignment.  */
   set_gdbarch_long_double_bit (gdbarch, 96);
 
+  /* Support of bfloat16 format.  */
+  set_gdbarch_bfloat16_format (gdbarch, floatformats_bfloat16);
+
   /* Support for floating-point data type variants.  */
   set_gdbarch_floatformat_for_type (gdbarch, i386_floatformat_for_type);
 
@@ -8633,7 +8619,7 @@ i386_gdbarch_init (struct gdbarch_info i
   /* No segment base registers.  */
   tdep->fsbase_regnum = -1;
 
-  tdesc_data = tdesc_data_alloc ();
+  tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
 
   set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction);
 
@@ -8646,12 +8632,11 @@ i386_gdbarch_init (struct gdbarch_info i
   /* Hook in ABI-specific overrides, if they have been registered.
      Note: If INFO specifies a 64 bit arch, this is where we turn
      a 32-bit i386 into a 64-bit amd64.  */
-  info.tdesc_data = tdesc_data;
+  info.tdesc_data = tdesc_data.get ();
   gdbarch_init_osabi (info, gdbarch);
 
-  if (!i386_validate_tdesc_p (tdep, tdesc_data))
+  if (!i386_validate_tdesc_p (tdep, tdesc_data.get ()))
     {
-      tdesc_data_cleanup (tdesc_data);
       xfree (tdep);
       gdbarch_free (gdbarch);
       return NULL;
@@ -8673,7 +8658,7 @@ i386_gdbarch_init (struct gdbarch_info i
   /* Target description may be changed.  */
   tdesc = tdep->tdesc;
 
-  tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+  tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
 
   /* Override gdbarch_register_reggroup_p set in tdesc_use_registers.  */
   set_gdbarch_register_reggroup_p (gdbarch, tdep->register_reggroup_p);
@@ -9016,24 +9001,9 @@ i386_mpx_set_bounds (const char *args, i
 
 static struct cmd_list_element *mpx_set_cmdlist, *mpx_show_cmdlist;
 
-/* Helper function for the CLI commands.  */
-
-static void
-set_mpx_cmd (const char *args, int from_tty)
-{
-  help_list (mpx_set_cmdlist, "set mpx ", all_commands, gdb_stdout);
-}
-
-/* Helper function for the CLI commands.  */
-
-static void
-show_mpx_cmd (const char *args, int from_tty)
-{
-  cmd_show_list (mpx_show_cmdlist, from_tty, "");
-}
-
+void _initialize_i386_tdep ();
 void
-_initialize_i386_tdep (void)
+_initialize_i386_tdep ()
 {
   register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init);
 
@@ -9061,17 +9031,17 @@ is \"default\"."),
 
   /* Add "mpx" prefix for the set commands.  */
 
-  add_prefix_cmd ("mpx", class_support, set_mpx_cmd, _("\
+  add_basic_prefix_cmd ("mpx", class_support, _("\
 Set Intel Memory Protection Extensions specific variables."),
-		  &mpx_set_cmdlist, "set mpx ",
-		  0 /* allow-unknown */, &setlist);
+			&mpx_set_cmdlist,
+			0 /* allow-unknown */, &setlist);
 
   /* Add "mpx" prefix for the show commands.  */
 
-  add_prefix_cmd ("mpx", class_support, show_mpx_cmd, _("\
+  add_show_prefix_cmd ("mpx", class_support, _("\
 Show Intel Memory Protection Extensions specific variables."),
-		  &mpx_show_cmdlist, "show mpx ",
-		  0 /* allow-unknown */, &showlist);
+		       &mpx_show_cmdlist,
+		       0 /* allow-unknown */, &showlist);
 
   /* Add "bound" command for the show mpx commands list.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-tdep.h ./gdb/i386-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the i386.
 
-   Copyright (C) 2001-2020 Free Software Foundation, Inc.
+   Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,6 +22,7 @@
 
 #include "gdbarch.h"
 #include "infrun.h"
+#include "expression.h"
 
 struct frame_info;
 struct gdbarch;
@@ -145,21 +146,21 @@ struct gdbarch_tdep
   int xsave_xcr0_offset;
 
   /* Register names.  */
-  const char **register_names;
+  const char * const *register_names;
 
   /* Register number for %ymm0h.  Set this to -1 to indicate the absence
      of upper YMM register support.  */
   int ymm0h_regnum;
 
   /* Upper YMM register names.  Only used for tdesc_numbered_register.  */
-  const char **ymmh_register_names;
+  const char * const *ymmh_register_names;
 
   /* Register number for %ymm16h.  Set this to -1 to indicate the absence
   of support for YMM16-31.  */
   int ymm16h_regnum;
 
   /* YMM16-31 register names.  Only used for tdesc_numbered_register.  */
-  const char **ymm16h_register_names;
+  const char * const *ymm16h_register_names;
 
   /* Register number for %bnd0r.  Set this to -1 to indicate the absence
      bound registers.  */
@@ -174,23 +175,23 @@ struct gdbarch_tdep
   int bndcfgu_regnum;
 
   /* MPX register names.  Only used for tdesc_numbered_register.  */
-  const char **mpx_register_names;
+  const char * const *mpx_register_names;
 
   /* Register number for %zmm0h.  Set this to -1 to indicate the absence
      of ZMM_HI256 register support.  */
   int zmm0h_regnum;
 
   /* OpMask register names.  */
-  const char **k_register_names;
+  const char * const *k_register_names;
 
   /* ZMM register names.  Only used for tdesc_numbered_register.  */
-  const char **zmmh_register_names;
+  const char * const *zmmh_register_names;
 
   /* XMM16-31 register names.  Only used for tdesc_numbered_register.  */
-  const char **xmm_avx512_register_names;
+  const char * const *xmm_avx512_register_names;
 
   /* YMM16-31 register names.  Only used for tdesc_numbered_register.  */
-  const char **ymm_avx512_register_names;
+  const char * const *ymm_avx512_register_names;
 
   /* Number of PKEYS registers.  */
   int num_pkeys_regs;
@@ -199,7 +200,7 @@ struct gdbarch_tdep
   int pkru_regnum;
 
   /* PKEYS register names.  */
-  const char **pkeys_register_names;
+  const char * const *pkeys_register_names;
 
   /* Register number for %fsbase.  Set this to -1 to indicate the
      absence of segment base registers.  */
@@ -399,6 +400,19 @@ extern CORE_ADDR i386_pe_skip_trampoline
 extern CORE_ADDR i386_skip_main_prologue (struct gdbarch *gdbarch,
 					  CORE_ADDR pc);
 
+/* The "push_dummy_call" gdbarch method, optionally with the thiscall
+   calling convention.  */
+extern CORE_ADDR i386_thiscall_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,
+						bool thiscall);
+
 /* Return whether the THIS_FRAME corresponds to a sigtramp routine.  */
 extern int i386_sigtramp_p (struct frame_info *this_frame);
 
@@ -426,15 +440,15 @@ extern void
 				     void *cb_data,
 				     const struct regcache *regcache);
 
-typedef buf_displaced_step_closure i386_displaced_step_closure;
+typedef buf_displaced_step_copy_insn_closure
+  i386_displaced_step_copy_insn_closure;
 
-extern struct displaced_step_closure *i386_displaced_step_copy_insn
+extern displaced_step_copy_insn_closure_up i386_displaced_step_copy_insn
   (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to,
    struct regcache *regs);
-extern void i386_displaced_step_fixup (struct gdbarch *gdbarch,
-				       struct displaced_step_closure *closure,
-				       CORE_ADDR from, CORE_ADDR to,
-				       struct regcache *regs);
+extern void i386_displaced_step_fixup
+  (struct gdbarch *gdbarch, displaced_step_copy_insn_closure *closure,
+   CORE_ADDR from, CORE_ADDR to, regcache *regs);
 
 /* Initialize a basic ELF architecture variant.  */
 extern void i386_elf_init_abi (struct gdbarch_info, struct gdbarch *);
@@ -447,7 +461,7 @@ extern void i386_svr4_init_abi (struct g
 extern int i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg);
 
 extern int i386_process_record (struct gdbarch *gdbarch,
-                                struct regcache *regcache, CORE_ADDR addr);
+				struct regcache *regcache, CORE_ADDR addr);
 extern const struct target_desc *i386_target_description (uint64_t xcr0,
 							  bool segments);
 
@@ -464,7 +478,6 @@ extern CORE_ADDR i386obsd_sigtramp_start
 extern CORE_ADDR i386obsd_sigtramp_end_addr;
 extern int i386fbsd4_sc_reg_offset[];
 extern int i386fbsd_sc_reg_offset[];
-extern int i386nbsd_sc_reg_offset[];
 extern int i386obsd_sc_reg_offset[];
 extern int i386bsd_sc_reg_offset[];
 
@@ -473,7 +486,7 @@ extern int i386bsd_sc_reg_offset[];
 extern int i386_stap_is_single_operand (struct gdbarch *gdbarch,
 					const char *s);
 
-extern int i386_stap_parse_special_token (struct gdbarch *gdbarch,
-					  struct stap_parse_info *p);
+extern expr::operation_up i386_stap_parse_special_token
+     (struct gdbarch *gdbarch, struct stap_parse_info *p);
 
 #endif /* i386-tdep.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-windows-nat.c ./gdb/i386-windows-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-windows-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i386-windows-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,8 +22,11 @@
 
 #include <windows.h>
 
-#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x))
-static const int mappings[] =
+#ifdef __x86_64__
+#define CONTEXT WOW64_CONTEXT
+#endif
+#define context_offset(x) ((int)(size_t)&(((CONTEXT *)NULL)->x))
+const int i386_mappings[] =
 {
   context_offset (Eax),
   context_offset (Ecx),
@@ -70,19 +73,21 @@ static const int mappings[] =
   context_offset (ExtendedRegisters[24])
 };
 #undef context_offset
+#undef CONTEXT
 
 /* segment_register_p_ftype implementation for x86.  */
 
-static int
+int
 i386_windows_segment_register_p (int regnum)
 {
   return regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM;
 }
 
+void _initialize_i386_windows_nat ();
 void
-_initialize_i386_windows_nat (void)
+_initialize_i386_windows_nat ()
 {
-  windows_set_context_register_offsets (mappings);
-  windows_set_segment_register_p (i386_windows_segment_register_p);
+#ifndef __x86_64__
   x86_set_debug_register_length (4);
+#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-windows-tdep.c ./gdb/i386-windows-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i386-windows-tdep.c	1970-01-01 00:00:00.000000000 +0000
+++ ./gdb/i386-windows-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -0,0 +1,228 @@
+/* Target-dependent code for Windows (including Cygwin) running on i386's,
+   for GDB.
+
+   Copyright (C) 2003-2021 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 "i386-tdep.h"
+#include "windows-tdep.h"
+#include "regset.h"
+#include "gdb_obstack.h"
+#include "xml-support.h"
+#include "gdbcore.h"
+#include "inferior.h"
+
+/* Core file support.  */
+
+/* This vector maps GDB's idea of a register's number into an address
+   in the windows exception context vector.  */
+
+static int i386_windows_gregset_reg_offset[] =
+{
+  176, /* eax */
+  172, /* ecx */
+  168, /* edx */
+  164, /* ebx */
+
+  196, /* esp */
+  180, /* ebp */
+  160, /* esi */
+  156, /* edi */
+
+  184, /* eip */
+  192, /* eflags */
+  188, /* cs */
+  200, /* ss */
+
+  152, /* ds */
+  148, /* es */
+  144, /* fs */
+  140, /* gs */
+
+  56, /* FloatSave.RegisterArea[0 * 10] */
+  66, /* FloatSave.RegisterArea[1 * 10] */
+  76, /* FloatSave.RegisterArea[2 * 10] */
+  86, /* FloatSave.RegisterArea[3 * 10] */
+  96, /* FloatSave.RegisterArea[4 * 10] */
+  106, /* FloatSave.RegisterArea[5 * 10] */
+  116, /* FloatSave.RegisterArea[6 * 10] */
+  126, /* FloatSave.RegisterArea[7 * 10] */
+
+  28, /* FloatSave.ControlWord */
+  32, /* FloatSave.StatusWord */
+  36, /* FloatSave.TagWord */
+  44, /* FloatSave.ErrorSelector */
+  40, /* FloatSave.ErrorOffset */
+  52, /* FloatSave.DataSelector */
+  48, /* FloatSave.DataOffset */
+  44, /* FloatSave.ErrorSelector */
+
+  /* XMM0-7 */
+  364, /* ExtendedRegisters[10*16] */
+  380, /* ExtendedRegisters[11*16] */
+  396, /* ExtendedRegisters[12*16] */
+  412, /* ExtendedRegisters[13*16] */
+  428, /* ExtendedRegisters[14*16] */
+  444, /* ExtendedRegisters[15*16] */
+  460, /* ExtendedRegisters[16*16] */
+  476, /* ExtendedRegisters[17*16] */
+
+  /* MXCSR */
+  228 /* ExtendedRegisters[24] */
+};
+
+#define I386_WINDOWS_SIZEOF_GREGSET 716
+
+static CORE_ADDR
+i386_windows_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+{
+  return i386_pe_skip_trampoline_code (frame, pc, NULL);
+}
+
+static const char *
+i386_windows_auto_wide_charset (void)
+{
+  return "UTF-16";
+}
+
+/* Implement the "push_dummy_call" gdbarch method.  */
+
+static CORE_ADDR
+i386_windows_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)
+{
+  /* For non-static member functions of 32bit Windows programs, the thiscall
+     calling convention is used, so the 'this' pointer is passed in ECX.  */
+  bool thiscall = false;
+
+  struct type *type = check_typedef (value_type (function));
+  if (type->code () == TYPE_CODE_PTR)
+    type = check_typedef (TYPE_TARGET_TYPE (type));
+
+  /* read_subroutine_type sets for non-static member functions the
+     artificial flag of the first parameter ('this' pointer).  */
+  if (type->code () == TYPE_CODE_METHOD
+      && type->num_fields () > 0
+      && TYPE_FIELD_ARTIFICIAL (type, 0)
+      && type->field (0).type ()->code () == TYPE_CODE_PTR)
+    thiscall = 1;
+
+  return i386_thiscall_push_dummy_call (gdbarch, function, regcache, bp_addr,
+					nargs, args, sp, return_method,
+					struct_addr, thiscall);
+}
+
+/* Common parts for gdbarch initialization for Windows and Cygwin on i386.  */
+
+static void
+i386_windows_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  set_gdbarch_skip_trampoline_code (gdbarch, i386_windows_skip_trampoline_code);
+
+  set_gdbarch_skip_main_prologue (gdbarch, i386_skip_main_prologue);
+
+  tdep->struct_return = reg_struct_return;
+
+  tdep->gregset_reg_offset = i386_windows_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset);
+  tdep->sizeof_gregset = I386_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, i386_windows_auto_wide_charset);
+}
+
+/* gdbarch initialization for Windows on i386.  */
+
+static void
+i386_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  i386_windows_init_abi_common (info, gdbarch);
+  windows_init_abi (info, gdbarch);
+
+  set_gdbarch_push_dummy_call (gdbarch, i386_windows_push_dummy_call);
+}
+
+/* gdbarch initialization for Cygwin on i386.  */
+
+static void
+i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  i386_windows_init_abi_common (info, gdbarch);
+  cygwin_init_abi (info, gdbarch);
+}
+
+static gdb_osabi
+i386_windows_osabi_sniffer (bfd *abfd)
+{
+  const char *target_name = bfd_get_target (abfd);
+
+  if (!streq (target_name, "pei-i386"))
+    return GDB_OSABI_UNKNOWN;
+
+  if (is_linked_with_cygwin_dll (abfd))
+    return GDB_OSABI_CYGWIN;
+
+  return GDB_OSABI_WINDOWS;
+}
+
+static enum gdb_osabi
+i386_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, "elf32-i386") == 0)
+    {
+      asection *section = bfd_get_section_by_name (abfd, ".reg");
+      if (section != nullptr
+	  && bfd_section_size (section) == I386_WINDOWS_SIZEOF_GREGSET)
+	return GDB_OSABI_CYGWIN;
+    }
+
+  return GDB_OSABI_UNKNOWN;
+}
+
+void _initialize_i386_windows_tdep ();
+void
+_initialize_i386_windows_tdep ()
+{
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
+				  i386_windows_osabi_sniffer);
+
+  /* Cygwin uses elf core dumps.  */
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
+				  i386_cygwin_core_osabi_sniffer);
+
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_WINDOWS,
+			  i386_windows_init_abi);
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_CYGWIN,
+			  i386_cygwin_init_abi);
+}
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i387-tdep.c ./gdb/i387-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i387-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i387-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Intel 387 floating point stuff.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -332,7 +332,7 @@ i387_convert_register_p (struct gdbarch
       /* Floating point registers must be converted unless we are
 	 accessing them in their hardware type or TYPE is not float.  */
       if (type == i387_ext_type (gdbarch)
-	  || TYPE_CODE (type) != TYPE_CODE_FLT)
+	  || type->code () != TYPE_CODE_FLT)
 	return 0;
       else
 	return 1;
@@ -355,7 +355,7 @@ i387_register_to_value (struct frame_inf
   gdb_assert (i386_fp_regnum_p (gdbarch, regnum));
 
   /* We only support floating-point values.  */
-  if (TYPE_CODE (type) != TYPE_CODE_FLT)
+  if (type->code () != TYPE_CODE_FLT)
     {
       warning (_("Cannot convert floating-point register value "
 	       "to non-floating-point type."));
@@ -365,8 +365,10 @@ i387_register_to_value (struct frame_inf
 
   /* Convert to TYPE.  */
   if (!get_frame_register_bytes (frame, regnum, 0,
-				 register_size (gdbarch, regnum),
-				 from, optimizedp, unavailablep))
+				 gdb::make_array_view (from,
+						       register_size (gdbarch,
+								      regnum)),
+				 optimizedp, unavailablep))
     return 0;
 
   target_float_convert (from, i387_ext_type (gdbarch), to, type);
@@ -387,7 +389,7 @@ i387_value_to_register (struct frame_inf
   gdb_assert (i386_fp_regnum_p (gdbarch, regnum));
 
   /* We only support floating-point values.  */
-  if (TYPE_CODE (type) != TYPE_CODE_FLT)
+  if (type->code () != TYPE_CODE_FLT)
     {
       warning (_("Cannot convert non-floating-point type "
 	       "to floating-point register value."));
@@ -502,7 +504,7 @@ i387_collect_fsave (const struct regcach
     if (regnum == -1 || regnum == i)
       {
 	/* Most of the FPU control registers occupy only 16 bits in
-           the fsave area.  Give those a special treatment.  */
+	   the fsave area.  Give those a special treatment.  */
 	if (i >= I387_FCTRL_REGNUM (tdep)
 	    && i != I387_FIOFF_REGNUM (tdep) && i != I387_FOOFF_REGNUM (tdep))
 	  {
@@ -513,7 +515,7 @@ i387_collect_fsave (const struct regcach
 	    if (i == I387_FOP_REGNUM (tdep))
 	      {
 		/* The opcode occupies only 11 bits.  Make sure we
-                   don't touch the other bits.  */
+		   don't touch the other bits.  */
 		buf[1] &= ((1 << 3) - 1);
 		buf[1] |= ((FSAVE_ADDR (tdep, regs, i))[1] & ~((1 << 3) - 1));
 	      }
@@ -633,7 +635,7 @@ i387_supply_fxsave (struct regcache *reg
 		    if (val[0] & (1 << fpreg))
 		      {
 			int thisreg = (fpreg + 8 - top) % 8 
-			               + I387_ST0_REGNUM (tdep);
+				       + I387_ST0_REGNUM (tdep);
 			tag = i387_tag (FXSAVE_ADDR (tdep, regs, thisreg));
 		      }
 		    else
@@ -679,7 +681,7 @@ i387_collect_fxsave (const struct regcac
     if (regnum == -1 || regnum == i)
       {
 	/* Most of the FPU control registers occupy only 16 bits in
-           the fxsave area.  Give those a special treatment.  */
+	   the fxsave area.  Give those a special treatment.  */
 	if (i >= I387_FCTRL_REGNUM (tdep) && i < I387_XMM0_REGNUM (tdep)
 	    && i != I387_FIOFF_REGNUM (tdep) && i != I387_FOOFF_REGNUM (tdep))
 	  {
@@ -690,7 +692,7 @@ i387_collect_fxsave (const struct regcac
 	    if (i == I387_FOP_REGNUM (tdep))
 	      {
 		/* The opcode occupies only 11 bits.  Make sure we
-                   don't touch the other bits.  */
+		   don't touch the other bits.  */
 		buf[1] &= ((1 << 3) - 1);
 		buf[1] |= ((FXSAVE_ADDR (tdep, regs, i))[1] & ~((1 << 3) - 1));
 	      }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i387-tdep.h ./gdb/i387-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/i387-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/i387-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the i387.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -170,5 +170,5 @@ extern void i387_return_value (struct gd
 /* Set all bnd registers to the INIT state.  INIT state means
    all memory range can be accessed.  */
 extern void i387_reset_bnd_regs (struct gdbarch *gdbarch,
-			         struct regcache *regcache);
+				 struct regcache *regcache);
 #endif /* i387-tdep.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-libunwind-tdep.c ./gdb/ia64-libunwind-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-libunwind-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-libunwind-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Frame unwinder for ia64 frames using the libunwind library.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Written by Jeff Johnston, contributed by Red Hat Inc.
 
@@ -133,10 +133,10 @@ libunwind_descr (struct gdbarch *gdbarch
 }
 
 static void *
-libunwind_descr_init (struct gdbarch *gdbarch)
+libunwind_descr_init (struct obstack *obstack)
 {
   struct libunwind_descr *descr
-    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct libunwind_descr);
+    = OBSTACK_ZALLOC (obstack, struct libunwind_descr);
 
   return descr;
 }
@@ -151,14 +151,7 @@ libunwind_frame_set_descr (struct gdbarc
 
   arch_descr = ((struct libunwind_descr *)
 		gdbarch_data (gdbarch, libunwind_descr_handle));
-
-  if (arch_descr == NULL)
-    {
-      /* First time here.  Must initialize data area.  */
-      arch_descr = (struct libunwind_descr *) libunwind_descr_init (gdbarch);
-      deprecated_set_gdbarch_data (gdbarch,
-				   libunwind_descr_handle, arch_descr);
-    }
+  gdb_assert (arch_descr != NULL);
 
   /* Copy new descriptor info into arch descriptor.  */
   arch_descr->gdb2uw = descr->gdb2uw;
@@ -263,7 +256,7 @@ libunwind_find_dyn_list (unw_addr_space_
    libunwind frame unwinding.  */
 int
 libunwind_frame_sniffer (const struct frame_unwind *self,
-                         struct frame_info *this_frame, void **this_cache)
+			 struct frame_info *this_frame, void **this_cache)
 {
   unw_cursor_t cursor;
   unw_accessors_t *acc;
@@ -309,7 +302,7 @@ libunwind_frame_sniffer (const struct fr
 
 void
 libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
-		         struct frame_id *this_id)
+			 struct frame_id *this_id)
 {
   struct libunwind_frame_cache *cache =
     libunwind_frame_cache (this_frame, this_cache);
@@ -320,7 +313,7 @@ libunwind_frame_this_id (struct frame_in
 
 struct value *
 libunwind_frame_prev_register (struct frame_info *this_frame,
-                               void **this_cache, int regnum)
+			       void **this_cache, int regnum)
 {
   struct libunwind_frame_cache *cache =
     libunwind_frame_cache (this_frame, this_cache);
@@ -342,7 +335,7 @@ libunwind_frame_prev_register (struct fr
 
   gdb_assert (regnum >= 0);
 
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("No registers."));
 
   if (uw_regnum < 0)
@@ -359,29 +352,29 @@ libunwind_frame_prev_register (struct fr
 
     case UNW_SLT_REG:
       val = frame_unwind_got_register (this_frame, regnum,
-                                       descr->uw2gdb (sl.u.regnum));
+				       descr->uw2gdb (sl.u.regnum));
       break;
     case UNW_SLT_NONE:
       {
-        /* The register is not stored at a specific memory address nor
-           inside another register.  So use libunwind to fetch the register
-           value for us, and create a constant value with the result.  */
-        if (descr->is_fpreg (uw_regnum))
-          {
-            ret = unw_get_fpreg_p (&cache->cursor, uw_regnum, &fpval);
-            if (ret < 0)
-              return frame_unwind_got_constant (this_frame, regnum, 0);
-            val = frame_unwind_got_bytes (this_frame, regnum,
-                                          (gdb_byte *) &fpval);
-          }
-        else
-          {
-            ret = unw_get_reg_p (&cache->cursor, uw_regnum, &intval);
-            if (ret < 0)
-              return frame_unwind_got_constant (this_frame, regnum, 0);
-            val = frame_unwind_got_constant (this_frame, regnum, intval);
-          }
-        break;
+	/* The register is not stored at a specific memory address nor
+	   inside another register.  So use libunwind to fetch the register
+	   value for us, and create a constant value with the result.  */
+	if (descr->is_fpreg (uw_regnum))
+	  {
+	    ret = unw_get_fpreg_p (&cache->cursor, uw_regnum, &fpval);
+	    if (ret < 0)
+	      return frame_unwind_got_constant (this_frame, regnum, 0);
+	    val = frame_unwind_got_bytes (this_frame, regnum,
+					  (gdb_byte *) &fpval);
+	  }
+	else
+	  {
+	    ret = unw_get_reg_p (&cache->cursor, uw_regnum, &intval);
+	    if (ret < 0)
+	      return frame_unwind_got_constant (this_frame, regnum, 0);
+	    val = frame_unwind_got_constant (this_frame, regnum, intval);
+	  }
+	break;
       }
     }
 
@@ -403,8 +396,8 @@ libunwind_search_unwind_table (void *as,
 /* Verify if we are in a sigtramp frame and we can use libunwind to unwind.  */
 int
 libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                                  struct frame_info *this_frame,
-                                  void **this_cache)
+				  struct frame_info *this_frame,
+				  void **this_cache)
 {
   unw_cursor_t cursor;
   unw_accessors_t *acc;
@@ -591,11 +584,12 @@ libunwind_is_initialized (void)
   return libunwind_initialized;
 }
 
+void _initialize_libunwind_frame ();
 void
-_initialize_libunwind_frame (void)
+_initialize_libunwind_frame ()
 {
   libunwind_descr_handle
-    = gdbarch_data_register_post_init (libunwind_descr_init);
+    = gdbarch_data_register_pre_init (libunwind_descr_init);
 
   libunwind_initialized = libunwind_load ();
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-libunwind-tdep.h ./gdb/ia64-libunwind-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-libunwind-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-libunwind-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Frame unwinder for ia64 frames with libunwind frame information.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Contributed by Jeff Johnston.
 
@@ -48,12 +48,12 @@ struct libunwind_descr
 };
 
 int libunwind_frame_sniffer (const struct frame_unwind *self,
-                             struct frame_info *this_frame,
-                             void **this_cache);
-                          
+			     struct frame_info *this_frame,
+			     void **this_cache);
+			  
 int libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                                      struct frame_info *this_frame,
-                                      void **this_cache);
+				      struct frame_info *this_frame,
+				      void **this_cache);
 
 void libunwind_frame_set_descr (struct gdbarch *arch,
 				struct libunwind_descr *descr);
@@ -61,7 +61,7 @@ void libunwind_frame_set_descr (struct g
 void libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
 			      struct frame_id *this_id);
 struct value *libunwind_frame_prev_register (struct frame_info *this_frame,
-                                             void **this_cache, int regnum);
+					     void **this_cache, int regnum);
 void libunwind_frame_dealloc_cache (struct frame_info *self, void *cache);
 
 int libunwind_is_initialized (void);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-linux-nat.c ./gdb/ia64-linux-nat.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-linux-nat.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-linux-nat.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Functions specific to running gdb native on IA-64 running
    GNU/Linux.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,6 +21,7 @@
 #include "defs.h"
 #include "inferior.h"
 #include "target.h"
+#include "gdbarch.h"
 #include "gdbcore.h"
 #include "regcache.h"
 #include "ia64-tdep.h"
@@ -80,6 +81,8 @@ public:
   /* Override linux_nat_target low methods.  */
   void low_new_thread (struct lwp_info *lp) override;
   bool low_status_is_event (int status) override;
+
+  void enable_watchpoints_in_psr (ptid_t ptid);
 };
 
 static ia64_linux_nat_target the_ia64_linux_nat_target;
@@ -401,7 +404,7 @@ ia64_cannot_store_register (struct gdbar
   return regno < 0
 	 || regno >= gdbarch_num_regs (gdbarch)
 	 || u_offsets[regno] == -1
-         || regno == IA64_BSPSTORE_REGNUM;
+	 || regno == IA64_BSPSTORE_REGNUM;
 }
 
 void
@@ -529,17 +532,17 @@ fill_fpregset (const struct regcache *re
 #define IA64_PSR_DB (1UL << 24)
 #define IA64_PSR_DD (1UL << 39)
 
-static void
-enable_watchpoints_in_psr (ptid_t ptid)
+void
+ia64_linux_nat_target::enable_watchpoints_in_psr (ptid_t ptid)
 {
-  struct regcache *regcache = get_thread_regcache (ptid);
+  struct regcache *regcache = get_thread_regcache (this, ptid);
   ULONGEST psr;
 
   regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
   if (!(psr & IA64_PSR_DB))
     {
       psr |= IA64_PSR_DB;	/* Set the db bit - this enables hardware
-			           watchpoints and breakpoints.  */
+				   watchpoints and breakpoints.  */
       regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr);
     }
 }
@@ -703,7 +706,7 @@ ia64_linux_nat_target::stopped_data_addr
 
   regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
   psr |= IA64_PSR_DD;	/* Set the dd bit - this will disable the watchpoint
-                           for the next instruction.  */
+			   for the next instruction.  */
   regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr);
 
   *addr_p = (CORE_ADDR) siginfo.si_addr;
@@ -884,7 +887,7 @@ ia64_linux_nat_target::xfer_partial (enu
 
       /* Probe for the table size once.  */
       if (gate_table_size == 0)
-        gate_table_size = syscall (__NR_getunwind, NULL, 0);
+	gate_table_size = syscall (__NR_getunwind, NULL, 0);
       if (gate_table_size < 0)
 	return TARGET_XFER_E_IO;
 
@@ -921,8 +924,9 @@ ia64_linux_nat_target::low_status_is_eve
 				 || WSTOPSIG (status) == SIGILL);
 }
 
+void _initialize_ia64_linux_nat ();
 void
-_initialize_ia64_linux_nat (void)
+_initialize_ia64_linux_nat ()
 {
   /* Register the target.  */
   linux_target = &the_ia64_linux_nat_target;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-linux-tdep.c ./gdb/ia64-linux-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-linux-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-linux-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -223,7 +223,7 @@ ia64_linux_init_abi (struct gdbarch_info
   static const char *const stap_register_indirection_suffixes[] = { "]",
 								    NULL };
 
-  linux_init_abi (info, gdbarch);
+  linux_init_abi (info, gdbarch, 0);
 
   /* Set the method of obtaining the sigcontext addresses at which
      registers are saved.  */
@@ -241,7 +241,7 @@ ia64_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);
 
   /* Core file support. */
   set_gdbarch_iterate_over_regset_sections
@@ -258,8 +258,9 @@ ia64_linux_init_abi (struct gdbarch_info
 				      ia64_linux_stap_is_single_operand);
 }
 
+void _initialize_ia64_linux_tdep ();
 void
-_initialize_ia64_linux_tdep (void)
+_initialize_ia64_linux_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_ia64, 0, GDB_OSABI_LINUX,
 			  ia64_linux_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-tdep.c ./gdb/ia64-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
 
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -44,19 +44,19 @@
 #include "ia64-libunwind-tdep.h"
 
 /* Note: KERNEL_START is supposed to be an address which is not going
-         to ever contain any valid unwind info.  For ia64 linux, the choice
-         of 0xc000000000000000 is fairly safe since that's uncached space.
+	 to ever contain any valid unwind info.  For ia64 linux, the choice
+	 of 0xc000000000000000 is fairly safe since that's uncached space.
  
-         We use KERNEL_START as follows: after obtaining the kernel's
-         unwind table via getunwind(), we project its unwind data into
-         address-range KERNEL_START-(KERNEL_START+ktab_size) and then
-         when ia64_access_mem() sees a memory access to this
-         address-range, we redirect it to ktab instead.
-
-         None of this hackery is needed with a modern kernel/libcs
-         which uses the kernel virtual DSO to provide access to the
-         kernel's unwind info.  In that case, ktab_size remains 0 and
-         hence the value of KERNEL_START doesn't matter.  */
+	 We use KERNEL_START as follows: after obtaining the kernel's
+	 unwind table via getunwind(), we project its unwind data into
+	 address-range KERNEL_START-(KERNEL_START+ktab_size) and then
+	 when ia64_access_mem() sees a memory access to this
+	 address-range, we redirect it to ktab instead.
+
+	 None of this hackery is needed with a modern kernel/libcs
+	 which uses the kernel virtual DSO to provide access to the
+	 kernel's unwind info.  In that case, ktab_size remains 0 and
+	 hence the value of KERNEL_START doesn't matter.  */
 
 #define KERNEL_START 0xc000000000000000ULL
 
@@ -144,7 +144,7 @@ enum pseudo_regs { FIRST_PSEUDO_REGNUM =
 /* Array of register names; There should be ia64_num_regs strings in
    the initializer.  */
 
-static const char *ia64_register_names[] =
+static const char * const ia64_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",
@@ -329,8 +329,8 @@ ia64_register_reggroup_p (struct gdbarch
   int raw_p;
   if (group == all_reggroup)
     return 1;
-  vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
-  float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
+  vector_p = register_type (gdbarch, regnum)->is_vector ();
+  float_p = register_type (gdbarch, regnum)->code () == TYPE_CODE_FLT;
   raw_p = regnum < NUM_IA64_RAW_REGS;
   if (group == float_reggroup)
     return float_p;
@@ -618,7 +618,7 @@ fetch_instruction (CORE_ADDR addr, instr
    
    The current addressing used by the code below:
    original PC   placed_address   placed_size             required    covered
-                                  == bp_tgt->shadow_len   reqd \subset covered
+				  == bp_tgt->shadow_len   reqd \subset covered
    0xABCDE0      0xABCDE0         0x10                    <0x0...0x5> <0x0..0xF>
    0xABCDE1      0xABCDE1         0xF                     <0x5...0xA> <0x1..0xF>
    0xABCDE2      0xABCDE2         0xE                     <0xA...0xF> <0x2..0xF>
@@ -929,7 +929,7 @@ rse_address_add(CORE_ADDR addr, int nslo
 
 static enum register_status
 ia64_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
-                           int regnum, gdb_byte *buf)
+			   int regnum, gdb_byte *buf)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   enum register_status status;
@@ -1033,7 +1033,7 @@ ia64_pseudo_register_read (struct gdbarc
   else if (regnum == VBOF_REGNUM)
     {
       /* A virtual register frame start is provided for user convenience.
-         It can be calculated as the bsp - sof (sizeof frame).  */
+	 It can be calculated as the bsp - sof (sizeof frame).  */
       ULONGEST bsp, vbsp;
       ULONGEST cfm;
 
@@ -1071,7 +1071,7 @@ ia64_pseudo_register_read (struct gdbarc
 
 	  /* Adjust the register number to account for register rotation.  */
 	  regnum = VP16_REGNUM 
-	         + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
+		 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
 	}
       prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
       store_unsigned_integer (buf, register_size (gdbarch, regnum),
@@ -1192,7 +1192,7 @@ ia64_pseudo_register_write (struct gdbar
 
 	  /* Adjust the register number to account for register rotation.  */
 	  regnum = VP16_REGNUM 
-	         + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
+		 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
 	}
       prN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum),
 					  byte_order);
@@ -1212,7 +1212,7 @@ static int
 ia64_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type)
 {
   return (regno >= IA64_FR0_REGNUM && regno <= IA64_FR127_REGNUM
-	  && TYPE_CODE (type) == TYPE_CODE_FLT
+	  && type->code () == TYPE_CODE_FLT
 	  && type != ia64_ext_type (gdbarch));
 }
 
@@ -1226,8 +1226,10 @@ ia64_register_to_value (struct frame_inf
 
   /* Convert to TYPE.  */
   if (!get_frame_register_bytes (frame, regnum, 0,
-				 register_size (gdbarch, regnum),
-				 in, optimizedp, unavailablep))
+				 gdb::make_array_view (in,
+						       register_size (gdbarch,
+								      regnum)),
+				 optimizedp, unavailablep))
     return 0;
 
   target_float_convert (in, ia64_ext_type (gdbarch), out, valtype);
@@ -1237,7 +1239,7 @@ ia64_register_to_value (struct frame_inf
 
 static void
 ia64_value_to_register (struct frame_info *frame, int regnum,
-                         struct type *valtype, const gdb_byte *in)
+			 struct type *valtype, const gdb_byte *in)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   gdb_byte out[IA64_FP_REGISTER_SIZE];
@@ -1285,16 +1287,16 @@ refine_prologue_limit (CORE_ADDR pc, COR
       CORE_ADDR addr = prologue_sal.end;
 
       /* Handle the case in which compiler's optimizer/scheduler
-         has moved instructions into the prologue.  We scan ahead
+	 has moved instructions into the prologue.  We scan ahead
 	 in the function looking for address ranges whose corresponding
 	 line number is less than or equal to the first one that we
 	 found for the function.  (It can be less than when the
 	 scheduler puts a body instruction before the first prologue
 	 instruction.)  */
       for (i = 2 * max_skip_non_prologue_insns; 
-           i > 0 && (lim_pc == 0 || addr < lim_pc);
+	   i > 0 && (lim_pc == 0 || addr < lim_pc);
 	   i--)
-        {
+	{
 	  struct symtab_and_line sal;
 
 	  sal = find_pc_line (addr, 0);
@@ -1356,8 +1358,8 @@ ia64_alloc_frame_cache (void)
 
 static CORE_ADDR
 examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc,
-                  struct frame_info *this_frame,
-                  struct ia64_frame_cache *cache)
+		  struct frame_info *this_frame,
+		  struct ia64_frame_cache *cache)
 {
   CORE_ADDR next_pc;
   CORE_ADDR last_prologue_pc = pc;
@@ -1421,12 +1423,12 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
       /* Look for a leaf routine.  */
       if (pc < lim_pc && next_pc
 	  && (it == I || it == M) 
-          && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
+	  && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
 	{
 	  /* adds rN = imm14, rM   (or mov rN, rM  when imm14 is 0) */
 	  int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13) 
-	                   | ((instr & 0x001f8000000LL) >> 20)
-		           | ((instr & 0x000000fe000LL) >> 13));
+			   | ((instr & 0x001f8000000LL) >> 20)
+			   | ((instr & 0x000000fe000LL) >> 13));
 	  int rM = (int) ((instr & 0x00007f00000LL) >> 20);
 	  int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
 	  int qp = (int) (instr & 0x0000000003fLL);
@@ -1473,7 +1475,7 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	  break;
 	}
       else if (it == I && ((instr & 0x1eff8000000LL) == 0x00188000000LL))
-        {
+	{
 	  /* Move from BR */
 	  int b2 = (int) ((instr & 0x0000000e000LL) >> 13);
 	  int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
@@ -1486,12 +1488,12 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    }
 	}
       else if ((it == I || it == M) 
-          && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
+	  && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
 	{
 	  /* adds rN = imm14, rM   (or mov rN, rM  when imm14 is 0) */
 	  int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13) 
-	                   | ((instr & 0x001f8000000LL) >> 20)
-		           | ((instr & 0x000000fe000LL) >> 13));
+			   | ((instr & 0x001f8000000LL) >> 20)
+			   | ((instr & 0x000000fe000LL) >> 13));
 	  int rM = (int) ((instr & 0x00007f00000LL) >> 20);
 	  int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
 	  int qp = (int) (instr & 0x0000000003fLL);
@@ -1509,26 +1511,26 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	      last_prologue_pc = next_pc;
 	    }
 	  else if (qp == 0 && rN == 2 
-	        && ((rM == fp_reg && fp_reg != 0) || rM == 12))
+		&& ((rM == fp_reg && fp_reg != 0) || rM == 12))
 	    {
 	      CORE_ADDR saved_sp = 0;
 	      /* adds r2, spilloffset, rFramePointer 
-	           or
+		   or
 		 adds r2, spilloffset, r12
 
-	         Get ready for stf.spill or st8.spill instructions.
+		 Get ready for stf.spill or st8.spill instructions.
 		 The address to start spilling at is loaded into r2.
 		 FIXME:  Why r2?  That's what gcc currently uses; it
 		 could well be different for other compilers.  */
 
 	      /* Hmm...  whether or not this will work will depend on
-	         where the pc is.  If it's still early in the prologue
+		 where the pc is.  If it's still early in the prologue
 		 this'll be wrong.  FIXME */
 	      if (this_frame)
 		saved_sp = get_frame_register_unsigned (this_frame,
 							sp_regnum);
 	      spill_addr  = saved_sp
-	                  + (rM == 12 ? 0 : mem_stack_frame_size) 
+			  + (rM == 12 ? 0 : mem_stack_frame_size) 
 			  + imm;
 	      spill_reg   = rN;
 	      last_prologue_pc = next_pc;
@@ -1549,8 +1551,8 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    }
 	}
       else if (it == M 
-            && (   ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
-                || ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
+	    && (   ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
+		|| ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
 	{
 	  /* stf.spill [rN] = fM, imm9
 	     or
@@ -1565,7 +1567,7 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    {
 	      cache->saved_regs[IA64_FR0_REGNUM + fM] = spill_addr;
 
-              if ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
+	      if ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
 		spill_addr += imm;
 	      else
 		spill_addr = 0;		/* last one; must be done.  */
@@ -1573,7 +1575,7 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    }
 	}
       else if ((it == M && ((instr & 0x1eff8000000LL) == 0x02110000000LL))
-            || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
+	    || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
 	{
 	  /* mov.m rN = arM   
 	       or 
@@ -1602,8 +1604,8 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    }
 	}
       else if (it == M 
-            && (   ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
-	        || ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
+	    && (   ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
+		|| ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
 	{
 	  /* st8 [rN] = rM 
 	      or
@@ -1616,7 +1618,7 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	      && (rM == unat_save_reg || rM == pr_save_reg))
 	    {
 	      /* We've found a spill of either the UNAT register or the PR
-	         register.  (Well, not exactly; what we've actually found is
+		 register.  (Well, not exactly; what we've actually found is
 		 a spill of the register that UNAT or PR was moved to).
 		 Record that fact and move on...  */
 	      if (rM == unat_save_reg)
@@ -1626,7 +1628,7 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 		  unat_save_reg = 0;
 		}
 	      else
-	        {
+		{
 		  /* Track PR register.  */
 		  cache->saved_regs[IA64_PR_REGNUM] = spill_addr;
 		  pr_save_reg = 0;
@@ -1680,7 +1682,7 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    }
 	}
       else if (it == M && ((instr & 0x1ff88000000LL) == 0x0cc80000000LL))
-        {
+	{
 	  /* Either
 	       stfs [rN] = fM
 	     or
@@ -1697,8 +1699,8 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	    }
 	}
       else if (it == M
-            && (   ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
-	        || ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
+	    && (   ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
+		|| ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
 	{
 	  /* st8.spill [rN] = rM
 	       or
@@ -1709,11 +1711,11 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	  if (qp == 0 && rN == spill_reg && 4 <= rM && rM <= 7)
 	    {
 	      /* We've found a spill of one of the preserved general purpose
-	         regs.  Record the spill address and advance the spill
+		 regs.  Record the spill address and advance the spill
 		 register if appropriate.  */
 	      cache->saved_regs[IA64_GR0_REGNUM + rM] = spill_addr;
 	      if ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)
-	        /* st8.spill [rN] = rM, imm9 */
+		/* st8.spill [rN] = rM, imm9 */
 		spill_addr += imm9(instr);
 	      else
 		spill_addr = 0;		/* Done spilling.  */
@@ -1784,8 +1786,8 @@ examine_prologue (CORE_ADDR pc, CORE_ADD
 	  rrb_gr = (cfm >> 18) & 0x7f;
 
 	  /* The previous bof only requires subtraction of the sol (size of
-             locals) due to the overlap between output and input of
-             subsequent frames.  */
+	     locals) due to the overlap between output and input of
+	     subsequent frames.  */
 	  bof = rse_address_add (bof, -sol);
 	  
 	  for (i = 0, addr = bof;
@@ -1913,7 +1915,7 @@ ia64_frame_prev_register (struct frame_i
 
   gdb_assert (regnum >= 0);
 
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("No registers."));
 
   if (regnum == gdbarch_sp_regnum (gdbarch))
@@ -1925,19 +1927,19 @@ ia64_frame_prev_register (struct frame_i
       CORE_ADDR prev_cfm, bsp, prev_bsp;
 
       /* We want to calculate the previous bsp as the end of the previous
-         register stack frame.  This corresponds to what the hardware bsp
-         register will be if we pop the frame back which is why we might
-         have been called.  We know the beginning of the current frame is
-         cache->bsp - cache->sof.  This value in the previous frame points
-         to the start of the output registers.  We can calculate the end of
-         that frame by adding the size of output:
-            (sof (size of frame) - sol (size of locals)).  */
+	 register stack frame.  This corresponds to what the hardware bsp
+	 register will be if we pop the frame back which is why we might
+	 have been called.  We know the beginning of the current frame is
+	 cache->bsp - cache->sof.  This value in the previous frame points
+	 to the start of the output registers.  We can calculate the end of
+	 that frame by adding the size of output:
+	    (sof (size of frame) - sol (size of locals)).  */
       val = ia64_frame_prev_register (this_frame, this_cache, IA64_CFM_REGNUM);
       prev_cfm = extract_unsigned_integer (value_contents_all (val),
 					   8, byte_order);
       bsp = rse_address_add (cache->bsp, -(cache->sof));
       prev_bsp =
-        rse_address_add (bsp, (prev_cfm & 0x7f) - ((prev_cfm >> 7) & 0x7f));
+	rse_address_add (bsp, (prev_cfm & 0x7f) - ((prev_cfm >> 7) & 0x7f));
 
       return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
     }
@@ -1947,21 +1949,21 @@ ia64_frame_prev_register (struct frame_i
       CORE_ADDR addr = cache->saved_regs[IA64_CFM_REGNUM];
       
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
 
       if (cache->prev_cfm)
-        return frame_unwind_got_constant (this_frame, regnum, cache->prev_cfm);
+	return frame_unwind_got_constant (this_frame, regnum, cache->prev_cfm);
 
       if (cache->frameless)
-        return frame_unwind_got_register (this_frame, IA64_PFS_REGNUM,
-                                          IA64_PFS_REGNUM);
+	return frame_unwind_got_register (this_frame, IA64_PFS_REGNUM,
+					  IA64_PFS_REGNUM);
       return frame_unwind_got_register (this_frame, regnum, 0);
     }
 
   else if (regnum == IA64_VFP_REGNUM)
     {
       /* If the function in question uses an automatic register (r32-r127)
-         for the frame pointer, it'll be found by ia64_find_saved_register()
+	 for the frame pointer, it'll be found by ia64_find_saved_register()
 	 above.  If the function lacks one of these frame pointers, we can
 	 still provide a value since we know the size of the frame.  */
       return frame_unwind_got_constant (this_frame, regnum, cache->base);
@@ -1973,7 +1975,7 @@ ia64_frame_prev_register (struct frame_i
       ULONGEST prN;
       
       pr_val = ia64_frame_prev_register (this_frame, this_cache,
-                                         IA64_PR_REGNUM);
+					 IA64_PR_REGNUM);
       if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
 	{
 	  /* Fetch predicate register rename base from current frame
@@ -1984,7 +1986,7 @@ ia64_frame_prev_register (struct frame_i
 	  regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
 	}
       prN = extract_bit_field (value_contents_all (pr_val),
-                               regnum - VP0_REGNUM, 1);
+			       regnum - VP0_REGNUM, 1);
       return frame_unwind_got_constant (this_frame, regnum, prN);
     }
 
@@ -1993,9 +1995,9 @@ ia64_frame_prev_register (struct frame_i
       struct value *unat_val;
       ULONGEST unatN;
       unat_val = ia64_frame_prev_register (this_frame, this_cache,
-                                           IA64_UNAT_REGNUM);
+					   IA64_UNAT_REGNUM);
       unatN = extract_bit_field (value_contents_all (unat_val),
-                                 regnum - IA64_NAT0_REGNUM, 1);
+				 regnum - IA64_NAT0_REGNUM, 1);
       return frame_unwind_got_constant (this_frame, regnum, unatN);
     }
 
@@ -2003,7 +2005,7 @@ ia64_frame_prev_register (struct frame_i
     {
       int natval = 0;
       /* Find address of general register corresponding to nat bit we're
-         interested in.  */
+	 interested in.  */
       CORE_ADDR gr_addr;
 
       gr_addr = cache->saved_regs[regnum - IA64_NAT0_REGNUM + IA64_GR0_REGNUM];
@@ -2041,10 +2043,10 @@ ia64_frame_prev_register (struct frame_i
       CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
 
       if (addr != 0)
-        {
-          read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
-          pc = extract_unsigned_integer (buf, 8, byte_order);
-        }
+	{
+	  read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
+	  pc = extract_unsigned_integer (buf, 8, byte_order);
+	}
       else if (cache->frameless)
 	{
 	  get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
@@ -2057,9 +2059,9 @@ ia64_frame_prev_register (struct frame_i
   else if (regnum == IA64_PSR_REGNUM)
     {
       /* We don't know how to get the complete previous PSR, but we need it
-         for the slot information when we unwind the pc (pc is formed of IP
-         register plus slot information from PSR).  To get the previous
-         slot information, we mask it off the return address.  */
+	 for the slot information when we unwind the pc (pc is formed of IP
+	 register plus slot information from PSR).  To get the previous
+	 slot information, we mask it off the return address.  */
       ULONGEST slot_num = 0;
       CORE_ADDR pc = 0;
       CORE_ADDR psr = 0;
@@ -2089,13 +2091,13 @@ ia64_frame_prev_register (struct frame_i
       CORE_ADDR addr = cache->saved_regs[IA64_BR0_REGNUM];
 
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
 
       return frame_unwind_got_constant (this_frame, regnum, 0);
     }
 
   else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
-           || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
+	   || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
     {
       CORE_ADDR addr = 0;
 
@@ -2103,30 +2105,30 @@ ia64_frame_prev_register (struct frame_i
 	regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
       addr = cache->saved_regs[regnum];
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
 
       if (cache->frameless)
-        {
-          struct value *reg_val;
-          CORE_ADDR prev_cfm, prev_bsp, prev_bof;
+	{
+	  struct value *reg_val;
+	  CORE_ADDR prev_cfm, prev_bsp, prev_bof;
 
-          /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
-             with the same code above?  */
+	  /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
+	     with the same code above?  */
 	  if (regnum >= V32_REGNUM)
 	    regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
-          reg_val = ia64_frame_prev_register (this_frame, this_cache,
-                                              IA64_CFM_REGNUM);
+	  reg_val = ia64_frame_prev_register (this_frame, this_cache,
+					      IA64_CFM_REGNUM);
 	  prev_cfm = extract_unsigned_integer (value_contents_all (reg_val),
-                                               8, byte_order);
+					       8, byte_order);
 	  reg_val = ia64_frame_prev_register (this_frame, this_cache,
-                                              IA64_BSP_REGNUM);
+					      IA64_BSP_REGNUM);
 	  prev_bsp = extract_unsigned_integer (value_contents_all (reg_val),
-                                               8, byte_order);
+					       8, byte_order);
 	  prev_bof = rse_address_add (prev_bsp, -(prev_cfm & 0x7f));
 
 	  addr = rse_address_add (prev_bof, (regnum - IA64_GR32_REGNUM));
-          return frame_unwind_got_memory (this_frame, regnum, addr);
-        }
+	  return frame_unwind_got_memory (this_frame, regnum, addr);
+	}
       
       return frame_unwind_got_constant (this_frame, regnum, 0);
     }
@@ -2144,21 +2146,22 @@ ia64_frame_prev_register (struct frame_i
 	  /* Adjust the floating point register number to account for
 	     register rotation.  */
 	  regnum = IA64_FR32_REGNUM
-	         + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
+		 + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
 	}
 
       /* If we have stored a memory address, access the register.  */
       addr = cache->saved_regs[regnum];
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
       /* Otherwise, punt and get the current value of the register.  */
       else 
-        return frame_unwind_got_register (this_frame, regnum, regnum);
+	return frame_unwind_got_register (this_frame, regnum, regnum);
     }
 }
  
 static const struct frame_unwind ia64_frame_unwind =
 {
+  "ia64 prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   &ia64_frame_this_id,
@@ -2263,8 +2266,8 @@ ia64_sigtramp_frame_this_id (struct fram
     ia64_sigtramp_frame_cache (this_frame, this_cache);
 
   (*this_id) = frame_id_build_special (cache->base,
-                                       get_frame_pc (this_frame),
-                                       cache->bsp);
+				       get_frame_pc (this_frame),
+				       cache->bsp);
   if (gdbarch_debug >= 1)
     fprintf_unfiltered (gdb_stdlog,
 			"sigtramp frame id: code %s, stack %s, "
@@ -2284,7 +2287,7 @@ ia64_sigtramp_frame_prev_register (struc
 
   gdb_assert (regnum >= 0);
 
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("No registers."));
 
   if (regnum == IA64_IP_REGNUM)
@@ -2303,7 +2306,7 @@ ia64_sigtramp_frame_prev_register (struc
     }
 
   else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
-           || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
+	   || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
     {
       CORE_ADDR addr = 0;
 
@@ -2311,7 +2314,7 @@ ia64_sigtramp_frame_prev_register (struc
 	regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
       addr = cache->saved_regs[regnum];
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
 
       return frame_unwind_got_constant (this_frame, regnum, 0);
     }
@@ -2321,7 +2324,7 @@ ia64_sigtramp_frame_prev_register (struc
       CORE_ADDR addr = cache->saved_regs[regnum];
 
       if (addr != 0)
-        return frame_unwind_got_memory (this_frame, regnum, addr);
+	return frame_unwind_got_memory (this_frame, regnum, addr);
 
       return frame_unwind_got_constant (this_frame, regnum, 0);
     }
@@ -2329,8 +2332,8 @@ ia64_sigtramp_frame_prev_register (struc
 
 static int
 ia64_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                             struct frame_info *this_frame,
-                             void **this_cache)
+			     struct frame_info *this_frame,
+			     void **this_cache)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
   if (tdep->pc_in_sigtramp)
@@ -2346,6 +2349,7 @@ ia64_sigtramp_frame_sniffer (const struc
 
 static const struct frame_unwind ia64_sigtramp_frame_unwind =
 {
+  "ia64 sigtramp",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   ia64_sigtramp_frame_this_id,
@@ -2583,7 +2587,7 @@ ia64_access_rse_reg (unw_addr_space_t as
 	break;
 
       default:
-        /* For all other registers, just unwind the value directly.  */
+	/* For all other registers, just unwind the value directly.  */
 	regcache_cooked_read_unsigned (regcache, regnum, val);
 	break;
     }
@@ -2623,12 +2627,12 @@ ia64_access_mem (unw_addr_space_t as,
   if (addr - KERNEL_START < ktab_size)
     {
       unw_word_t *laddr = (unw_word_t*) ((char *) ktab
-                          + (addr - KERNEL_START));
+			  + (addr - KERNEL_START));
 		
       if (write)
-        *laddr = *val; 
+	*laddr = *val; 
       else 
-        *val = *laddr;
+	*val = *laddr;
       return 0;
     }
 
@@ -2651,8 +2655,8 @@ getunwind_table ()
      we should find a way to override the corefile layer's
      xfer_partial method.  */
 
-  return target_read_alloc (current_top_target (), TARGET_OBJECT_UNWIND_TABLE,
-			    NULL);
+  return target_read_alloc (current_inferior ()->top_target (),
+			    TARGET_OBJECT_UNWIND_TABLE, NULL);
 }
 
 /* Get the kernel unwind table.  */				 
@@ -2671,7 +2675,7 @@ get_kernel_table (unw_word_t ip, unw_dyn
       ktab_size = ktab_buf->size ();
 
       for (etab = ktab; etab->start_offset; ++etab)
-        etab->info_offset += KERNEL_START;
+	etab->info_offset += KERNEL_START;
     }
   
   if (ip < ktab[0].start_offset || ip >= etab[-1].end_offset)
@@ -2713,7 +2717,7 @@ ia64_find_unwind_table (struct objfile *
   ehdr = elf_tdata (bfd)->elf_header;
   phdr = elf_tdata (bfd)->phdr;
 
-  load_base = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
+  load_base = objfile->text_section_offset ();
 
   for (i = 0; i < ehdr->e_phnum; ++i)
     {
@@ -2748,23 +2752,23 @@ ia64_find_unwind_table (struct objfile *
     {
       int ok = 0;
       for (i = 0; i < ehdr->e_phnum; ++i)
-        {
-          if (phdr[i].p_type == PT_LOAD
+	{
+	  if (phdr[i].p_type == PT_LOAD
 	      && (p_unwind->p_vaddr - phdr[i].p_vaddr) < phdr[i].p_memsz)
 	    {
-              ok = 1;
+	      ok = 1;
 	      /* Get the segbase from the section containing the
 		 libunwind table.  */
 	      segbase = phdr[i].p_vaddr + load_base;
 	    }
 	}
       if (!ok)
-        return -UNW_ENOINFO;
+	return -UNW_ENOINFO;
     }
 
   dip->start_ip = p_text->p_vaddr + load_base;
   dip->end_ip = dip->start_ip + p_text->p_memsz;
-  dip->gp = ia64_find_global_pointer (get_objfile_arch (objfile), ip);
+  dip->gp = ia64_find_global_pointer (objfile->arch (), ip);
   dip->format = UNW_INFO_FORMAT_REMOTE_TABLE;
   dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd);
   dip->u.rti.segbase = segbase;
@@ -2857,7 +2861,7 @@ ia64_get_dyn_info_list (unw_addr_space_t
       void *buf = NULL;
 
       text_sec = objfile->sections + SECT_OFF_TEXT (objfile);
-      ip = obj_section_addr (text_sec);
+      ip = text_sec->addr ();
       ret = ia64_find_unwind_table (objfile, ip, &di, &buf);
       if (ret >= 0)
 	{
@@ -2962,7 +2966,7 @@ ia64_libunwind_frame_prev_register (stru
       ULONGEST unatN_val;
 
       unatN_val = extract_bit_field (value_contents_all (val),
-                                     regnum - IA64_NAT0_REGNUM, 1);
+				     regnum - IA64_NAT0_REGNUM, 1);
       return frame_unwind_got_constant (this_frame, regnum, unatN_val);
     }
 
@@ -2972,14 +2976,14 @@ ia64_libunwind_frame_prev_register (stru
       CORE_ADDR prev_bsp, prev_cfm;
 
       /* We want to calculate the previous bsp as the end of the previous
-         register stack frame.  This corresponds to what the hardware bsp
-         register will be if we pop the frame back which is why we might
-         have been called.  We know that libunwind will pass us back the
-         beginning of the current frame so we should just add sof to it.  */
+	 register stack frame.  This corresponds to what the hardware bsp
+	 register will be if we pop the frame back which is why we might
+	 have been called.  We know that libunwind will pass us back the
+	 beginning of the current frame so we should just add sof to it.  */
       prev_bsp = extract_unsigned_integer (value_contents_all (val),
 					   8, byte_order);
       cfm_val = libunwind_frame_prev_register (this_frame, this_cache,
-                                               IA64_CFM_REGNUM);
+					       IA64_CFM_REGNUM);
       prev_cfm = extract_unsigned_integer (value_contents_all (cfm_val),
 					   8, byte_order);
       prev_bsp = rse_address_add (prev_bsp, (prev_cfm & 0x7f));
@@ -2992,8 +2996,8 @@ ia64_libunwind_frame_prev_register (stru
 
 static int
 ia64_libunwind_frame_sniffer (const struct frame_unwind *self,
-                              struct frame_info *this_frame,
-                              void **this_cache)
+			      struct frame_info *this_frame,
+			      void **this_cache)
 {
   if (libunwind_is_initialized ()
       && libunwind_frame_sniffer (self, this_frame, this_cache))
@@ -3004,6 +3008,7 @@ ia64_libunwind_frame_sniffer (const stru
 
 static const struct frame_unwind ia64_libunwind_frame_unwind =
 {
+  "ia64 libunwind",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   ia64_libunwind_frame_this_id,
@@ -3015,7 +3020,7 @@ static const struct frame_unwind ia64_li
 
 static void
 ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
-                                       void **this_cache,
+				       void **this_cache,
 				       struct frame_id *this_id)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -3061,7 +3066,7 @@ ia64_libunwind_sigtramp_frame_prev_regis
   /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
      method of getting previous registers.  */
   prev_ip_val = libunwind_frame_prev_register (this_frame, this_cache,
-                                               IA64_IP_REGNUM);
+					       IA64_IP_REGNUM);
   prev_ip = extract_unsigned_integer (value_contents_all (prev_ip_val),
 				      8, byte_order);
 
@@ -3069,7 +3074,7 @@ ia64_libunwind_sigtramp_frame_prev_regis
     {
       void *tmp_cache = NULL;
       return ia64_sigtramp_frame_prev_register (this_frame, &tmp_cache,
-                                                regnum);
+						regnum);
     }
   else
     return ia64_libunwind_frame_prev_register (this_frame, this_cache, regnum);
@@ -3077,13 +3082,13 @@ ia64_libunwind_sigtramp_frame_prev_regis
 
 static int
 ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                                       struct frame_info *this_frame,
-                                       void **this_cache)
+				       struct frame_info *this_frame,
+				       void **this_cache)
 {
   if (libunwind_is_initialized ())
     {
       if (libunwind_sigtramp_frame_sniffer (self, this_frame, this_cache))
-        return 1;
+	return 1;
       return 0;
     }
   else
@@ -3092,6 +3097,7 @@ ia64_libunwind_sigtramp_frame_sniffer (c
 
 static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
 {
+  "ia64 libunwind sigtramp",
   SIGTRAMP_FRAME,
   default_frame_unwind_stop_reason,
   ia64_libunwind_sigtramp_frame_this_id,
@@ -3149,9 +3155,9 @@ ia64_use_struct_convention (struct type
 
   /* Don't use the struct convention for anything but structure,
      union, or array types.  */
-  if (!(TYPE_CODE (type) == TYPE_CODE_STRUCT
-	|| TYPE_CODE (type) == TYPE_CODE_UNION
-	|| TYPE_CODE (type) == TYPE_CODE_ARRAY))
+  if (!(type->code () == TYPE_CODE_STRUCT
+	|| type->code () == TYPE_CODE_UNION
+	|| type->code () == TYPE_CODE_ARRAY))
     return 0;
 
   /* HFAs are structures (or arrays) consisting entirely of floating
@@ -3173,8 +3179,8 @@ ia64_use_struct_convention (struct type
 static int
 ia64_struct_type_p (const struct type *type)
 {
-  return (TYPE_CODE (type) == TYPE_CODE_STRUCT
-          || TYPE_CODE (type) == TYPE_CODE_UNION);
+  return (type->code () == TYPE_CODE_STRUCT
+	  || type->code () == TYPE_CODE_UNION);
 }
 
 static void
@@ -3204,8 +3210,8 @@ ia64_extract_return_value (struct type *
   else if (!ia64_struct_type_p (type) && TYPE_LENGTH (type) < 8)
     {
       /* This is an integral value, and its size is less than 8 bytes.
-         These values are LSB-aligned, so extract the relevant bytes,
-         and copy them into VALBUF.  */
+	 These values are LSB-aligned, so extract the relevant bytes,
+	 and copy them into VALBUF.  */
       /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
 	 so I suppose we should also add handling here for integral values
 	 whose size is greater than 8.  But I wasn't able to create such
@@ -3236,7 +3242,7 @@ ia64_extract_return_value (struct type *
 
       if (m)
 	{
-          regcache_cooked_read_unsigned (regcache, regnum, &val);
+	  regcache_cooked_read_unsigned (regcache, regnum, &val);
 	  memcpy ((char *)valbuf + offset, &val, m);
 	}
     }
@@ -3287,7 +3293,7 @@ ia64_store_return_value (struct type *ty
 	{
 	  ULONGEST val;
 	  memcpy (&val, (char *)valbuf + offset, m);
-          regcache_cooked_write_unsigned (regcache, regnum, val);
+	  regcache_cooked_write_unsigned (regcache, regnum, val);
 	}
     }
 }
@@ -3320,7 +3326,7 @@ ia64_return_value (struct gdbarch *gdbar
 static int
 is_float_or_hfa_type_recurse (struct type *t, struct type **etp)
 {
-  switch (TYPE_CODE (t))
+  switch (t->code ())
     {
     case TYPE_CODE_FLT:
       if (*etp)
@@ -3340,9 +3346,9 @@ is_float_or_hfa_type_recurse (struct typ
       {
 	int i;
 
-	for (i = 0; i < TYPE_NFIELDS (t); i++)
+	for (i = 0; i < t->num_fields (); i++)
 	  if (!is_float_or_hfa_type_recurse
-	      (check_typedef (TYPE_FIELD_TYPE (t, i)), etp))
+	      (check_typedef (t->field (i).type ()), etp))
 	    return 0;
 	return 1;
       }
@@ -3374,7 +3380,7 @@ is_float_or_hfa_type (struct type *t)
 static int
 slot_alignment_is_next_even (struct type *t)
 {
-  switch (TYPE_CODE (t))
+  switch (t->code ())
     {
     case TYPE_CODE_INT:
     case TYPE_CODE_FLT:
@@ -3389,9 +3395,9 @@ slot_alignment_is_next_even (struct type
       {
 	int i;
 
-	for (i = 0; i < TYPE_NFIELDS (t); i++)
+	for (i = 0; i < t->num_fields (); i++)
 	  if (slot_alignment_is_next_even
-	      (check_typedef (TYPE_FIELD_TYPE (t, i))))
+	      (check_typedef (t->field (i).type ())))
 	    return 1;
 	return 0;
       }
@@ -3430,10 +3436,8 @@ ia64_find_global_pointer_from_dynamic_se
 
       if (osect < faddr_sect->objfile->sections_end)
 	{
-	  CORE_ADDR addr, endaddr;
-
-	  addr = obj_section_addr (osect);
-	  endaddr = obj_section_endaddr (osect);
+	  CORE_ADDR addr = osect->addr ();
+	  CORE_ADDR endaddr = osect->endaddr ();
 
 	  while (addr < endaddr)
 	    {
@@ -3513,10 +3517,8 @@ find_extant_func_descr (struct gdbarch *
 
       if (osect < faddr_sect->objfile->sections_end)
 	{
-	  CORE_ADDR addr, endaddr;
-
-	  addr = obj_section_addr (osect);
-	  endaddr = obj_section_endaddr (osect);
+	  CORE_ADDR addr = osect->addr ();
+	  CORE_ADDR endaddr = osect->endaddr ();
 
 	  while (addr < endaddr)
 	    {
@@ -3604,7 +3606,7 @@ ia64_convert_from_func_ptr_addr (struct
       struct obj_section *pc_section = find_pc_section (pc);
 
       if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
-        return pc;
+	return pc;
     }
 
   /* There are also descriptors embedded in vtables.  */
@@ -3699,7 +3701,7 @@ ia64_push_dummy_call (struct gdbarch *gd
       if ((nslots & 1) && slot_alignment_is_next_even (type))
 	nslots++;
 
-      if (TYPE_CODE (type) == TYPE_CODE_FUNC)
+      if (type->code () == TYPE_CODE_FUNC)
 	nfuncargs++;
 
       nslots += (len + 7) / 8;
@@ -3740,9 +3742,9 @@ ia64_push_dummy_call (struct gdbarch *gd
       len = TYPE_LENGTH (type);
 
       /* Special handling for function parameters.  */
-      if (len == 8 
-          && TYPE_CODE (type) == TYPE_CODE_PTR 
-	  && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
+      if (len == 8
+	  && type->code () == TYPE_CODE_PTR
+	  && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC)
 	{
 	  gdb_byte val_buf[8];
 	  ULONGEST faddr = extract_unsigned_integer (value_contents (arg),
@@ -3771,30 +3773,30 @@ ia64_push_dummy_call (struct gdbarch *gd
 	  gdb_byte val_buf[8];
 
 	  memset (val_buf, 0, 8);
-          if (!ia64_struct_type_p (type) && len < 8)
-            {
-              /* Integral types are LSB-aligned, so we have to be careful
-                 to insert the argument on the correct side of the buffer.
-                 This is why we use store_unsigned_integer.  */
-              store_unsigned_integer
-                (val_buf, 8, byte_order,
-                 extract_unsigned_integer (value_contents (arg), len,
+	  if (!ia64_struct_type_p (type) && len < 8)
+	    {
+	      /* Integral types are LSB-aligned, so we have to be careful
+		 to insert the argument on the correct side of the buffer.
+		 This is why we use store_unsigned_integer.  */
+	      store_unsigned_integer
+		(val_buf, 8, byte_order,
+		 extract_unsigned_integer (value_contents (arg), len,
 					   byte_order));
-            }
-          else
-            {
-              /* This is either an 8bit integral type, or an aggregate.
-                 For 8bit integral type, there is no problem, we just
-                 copy the value over.
-
-                 For aggregates, the only potentially tricky portion
-                 is to write the last one if it is less than 8 bytes.
-                 In this case, the data is Byte0-aligned.  Happy news,
-                 this means that we don't need to differentiate the
-                 handling of 8byte blocks and less-than-8bytes blocks.  */
-              memcpy (val_buf, value_contents (arg) + argoffset,
-                      (len > 8) ? 8 : len);
-            }
+	    }
+	  else
+	    {
+	      /* This is either an 8bit integral type, or an aggregate.
+		 For 8bit integral type, there is no problem, we just
+		 copy the value over.
+
+		 For aggregates, the only potentially tricky portion
+		 is to write the last one if it is less than 8 bytes.
+		 In this case, the data is Byte0-aligned.  Happy news,
+		 this means that we don't need to differentiate the
+		 handling of 8byte blocks and less-than-8bytes blocks.  */
+	      memcpy (val_buf, value_contents (arg) + argoffset,
+		      (len > 8) ? 8 : len);
+	    }
 
 	  if (slotnum < rseslots)
 	    tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
@@ -3985,7 +3987,7 @@ ia64_gdbarch_init (struct gdbarch_info i
   set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc);
 #ifdef HAVE_LIBUNWIND_IA64_H
   frame_unwind_append_unwinder (gdbarch,
-                                &ia64_libunwind_sigtramp_frame_unwind);
+				&ia64_libunwind_sigtramp_frame_unwind);
   frame_unwind_append_unwinder (gdbarch, &ia64_libunwind_frame_unwind);
   frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
   libunwind_frame_set_descr (gdbarch, &ia64_libunwind_descr);
@@ -4012,8 +4014,9 @@ ia64_gdbarch_init (struct gdbarch_info i
   return gdbarch;
 }
 
+void _initialize_ia64_tdep ();
 void
-_initialize_ia64_tdep (void)
+_initialize_ia64_tdep ()
 {
   gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-tdep.h ./gdb/ia64-tdep.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-tdep.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-tdep.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for the ia64.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -219,7 +219,7 @@ struct ia64_infcall_ops
   /* Store the argument stored in BUF into the appropriate location
      given the BSP and the SLOTNUM.  */
   void (*store_argument_in_slot) (struct regcache *regcache, CORE_ADDR bsp,
-                                  int slotnum, gdb_byte *buf);
+				  int slotnum, gdb_byte *buf);
 
   /* For targets where we cannot call the function directly, store
      the address of the function we want to call at the location
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-vms-tdep.c ./gdb/ia64-vms-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/ia64-vms-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/ia64-vms-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for OpenVMS IA-64.
 
-   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,8 +31,8 @@
 
 static int
 ia64_vms_find_proc_info_x (unw_addr_space_t as, unw_word_t ip,
-                           unw_proc_info_t *pi,
-                           int need_unwind_info, void *arg)
+			   unw_proc_info_t *pi,
+			   int need_unwind_info, void *arg)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
   gdb_byte buf[32];
@@ -41,8 +41,9 @@ ia64_vms_find_proc_info_x (unw_addr_spac
   CORE_ADDR table_addr;
   unsigned int info_len;
 
-  res = target_read (current_top_target (), TARGET_OBJECT_OPENVMS_UIB,
-                     annex + 2, buf, 0, sizeof (buf));
+  res = target_read (current_inferior ()->top_target (),
+		     TARGET_OBJECT_OPENVMS_UIB,
+		     annex + 2, buf, 0, sizeof (buf));
 
   if (res != sizeof (buf))
     return -UNW_ENOINFO;
@@ -75,7 +76,7 @@ ia64_vms_find_proc_info_x (unw_addr_spac
   pi->unwind_info = xmalloc (pi->unwind_info_size);
 
   res = target_read_memory (table_addr + 8,
-                            (gdb_byte *) pi->unwind_info, pi->unwind_info_size);
+			    (gdb_byte *) pi->unwind_info, pi->unwind_info_size);
   if (res != 0)
     {
       xfree (pi->unwind_info);
@@ -103,7 +104,7 @@ ia64_vms_find_proc_info_x (unw_addr_spac
 
 static void
 ia64_vms_put_unwind_info (unw_addr_space_t as,
-                          unw_proc_info_t *pip, void *arg)
+			  unw_proc_info_t *pip, void *arg)
 {
   /* Nothing required for now.  */
 }
@@ -113,7 +114,7 @@ ia64_vms_put_unwind_info (unw_addr_space
 
 static int
 ia64_vms_get_dyn_info_list (unw_addr_space_t as,
-                            unw_word_t *dilap, void *arg)
+			    unw_word_t *dilap, void *arg)
 {
   return -UNW_ENOINFO;
 }
@@ -153,8 +154,9 @@ ia64_openvms_init_abi (struct gdbarch_in
 #endif
 }
 
+void _initialize_ia64_vms_tdep ();
 void
-_initialize_ia64_vms_tdep (void)
+_initialize_ia64_vms_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_ia64, 0, GDB_OSABI_OPENVMS,
 			  ia64_openvms_init_abi);
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infcall.c ./gdb/infcall.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infcall.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/infcall.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Perform an inferior function call, for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -42,12 +42,13 @@
 #include "thread-fsm.h"
 #include <algorithm>
 #include "gdbsupport/scope-exit.h"
+#include <list>
 
 /* If we can't find a function's name from its address,
    we print this instead.  */
 #define RAW_FUNCTION_ADDRESS_FORMAT "at 0x%s"
 #define RAW_FUNCTION_ADDRESS_SIZE (sizeof (RAW_FUNCTION_ADDRESS_FORMAT) \
-                                   + 2 * sizeof (CORE_ADDR))
+				   + 2 * sizeof (CORE_ADDR))
 
 /* NOTE: cagney/2003-04-16: What's the future of this code?
 
@@ -168,7 +169,7 @@ value_arg_coerce (struct gdbarch *gdbarc
      saved by the called function.  */
   arg = value_coerce_to_target (arg);
 
-  switch (TYPE_CODE (type))
+  switch (type->code ())
     {
     case TYPE_CODE_REF:
     case TYPE_CODE_RVALUE_REF:
@@ -183,7 +184,7 @@ value_arg_coerce (struct gdbarch *gdbarc
 	   if the value was not previously in memory - in some cases
 	   we should clearly be allowing this, but how?  */
 	new_value = value_cast (TYPE_TARGET_TYPE (type), arg);
-	new_value = value_ref (new_value, TYPE_CODE (type));
+	new_value = value_ref (new_value, type->code ());
 	return new_value;
       }
     case TYPE_CODE_INT:
@@ -197,8 +198,8 @@ value_arg_coerce (struct gdbarch *gdbarc
 	    type = builtin->builtin_int;
 	}
       /* Currently all target ABIs require at least the width of an integer
-         type for an argument.  We may have to conditionalize the following
-         type coercion for future targets.  */
+	 type for an argument.  We may have to conditionalize the following
+	 type coercion for future targets.  */
       if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin->builtin_int))
 	type = builtin->builtin_int;
       break;
@@ -216,10 +217,10 @@ value_arg_coerce (struct gdbarch *gdbarc
       break;
     case TYPE_CODE_ARRAY:
       /* Arrays are coerced to pointers to their first element, unless
-         they are vectors, in which case we want to leave them alone,
-         because they are passed by value.  */
-      if (current_language->c_style_arrays)
-	if (!TYPE_VECTOR (type))
+	 they are vectors, in which case we want to leave them alone,
+	 because they are passed by value.  */
+      if (current_language->c_style_arrays_p ())
+	if (!type->is_vector ())
 	  type = lookup_pointer_type (TYPE_TARGET_TYPE (type));
       break;
     case TYPE_CODE_UNDEF:
@@ -250,7 +251,7 @@ find_function_addr (struct value *functi
 		    struct type **function_type)
 {
   struct type *ftype = check_typedef (value_type (function));
-  struct gdbarch *gdbarch = get_type_arch (ftype);
+  struct gdbarch *gdbarch = ftype->arch ();
   struct type *value_type = NULL;
   /* Initialize it just to avoid a GCC false warning.  */
   CORE_ADDR funaddr = 0;
@@ -259,22 +260,22 @@ find_function_addr (struct value *functi
      part of it.  */
 
   /* Determine address to call.  */
-  if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
-      || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
+  if (ftype->code () == TYPE_CODE_FUNC
+      || ftype->code () == TYPE_CODE_METHOD)
     funaddr = value_address (function);
-  else if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
+  else if (ftype->code () == TYPE_CODE_PTR)
     {
       funaddr = value_as_address (function);
       ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
-      if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
-	  || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
-	funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
-						      current_top_target ());
+      if (ftype->code () == TYPE_CODE_FUNC
+	  || ftype->code () == TYPE_CODE_METHOD)
+	funaddr = gdbarch_convert_from_func_ptr_addr
+	  (gdbarch, funaddr, current_inferior ()->top_target());
     }
-  if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
-      || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
+  if (ftype->code () == TYPE_CODE_FUNC
+      || ftype->code () == TYPE_CODE_METHOD)
     {
-      if (TYPE_GNU_IFUNC (ftype))
+      if (ftype->is_gnu_ifunc ())
 	{
 	  CORE_ADDR resolver_addr = funaddr;
 
@@ -302,10 +303,10 @@ find_function_addr (struct value *functi
       else
 	value_type = TYPE_TARGET_TYPE (ftype);
     }
-  else if (TYPE_CODE (ftype) == TYPE_CODE_INT)
+  else if (ftype->code () == TYPE_CODE_INT)
     {
       /* Handle the case of functions lacking debugging info.
-         Their values are characters since their addresses are char.  */
+	 Their values are characters since their addresses are char.  */
       if (TYPE_LENGTH (ftype) == 1)
 	funaddr = value_as_address (value_addr (function));
       else
@@ -320,9 +321,8 @@ find_function_addr (struct value *functi
 
 	      funaddr = value_as_address (value_addr (function));
 	      nfunaddr = funaddr;
-	      funaddr
-		= gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
-						      current_top_target ());
+	      funaddr = gdbarch_convert_from_func_ptr_addr
+		(gdbarch, funaddr, current_inferior ()->top_target ());
 	      if (funaddr != nfunaddr)
 		found_descriptor = 1;
 	    }
@@ -437,7 +437,7 @@ get_call_return_value (struct call_retur
   thread_info *thr = inferior_thread ();
   bool stack_temporaries = thread_stack_temporaries_enabled_p (thr);
 
-  if (TYPE_CODE (ri->value_type) == TYPE_CODE_VOID)
+  if (ri->value_type->code () == TYPE_CODE_VOID)
     retval = allocate_value (ri->value_type);
   else if (ri->struct_return_p)
     {
@@ -648,7 +648,8 @@ run_inferior_call (struct call_thread_fs
   if (!was_running
       && call_thread_ptid == inferior_ptid
       && stop_stack_dummy == STOP_STACK_DUMMY)
-    finish_thread_state (user_visible_resume_ptid (0));
+    finish_thread_state (call_thread->inf->process_target (),
+			 user_visible_resume_ptid (0));
 
   enable_watchpoints_after_interactive_call_stop ();
 
@@ -704,6 +705,33 @@ reserve_stack_space (const type *values_
   return addr;
 }
 
+/* The data structure which keeps a destructor function and
+   its implicit 'this' parameter.  */
+
+struct destructor_info
+{
+  destructor_info (struct value *function, struct value *self)
+    : function (function), self (self) { }
+
+  struct value *function;
+  struct value *self;
+};
+
+
+/* Auxiliary function that takes a list of destructor functions
+   with their 'this' parameters, and invokes the functions.  */
+
+static void
+call_destructors (const std::list<destructor_info> &dtors_to_invoke,
+		  struct type *default_return_type)
+{
+  for (auto vals : dtors_to_invoke)
+    {
+      call_function_by_hand (vals.function, default_return_type,
+			     gdb::make_array_view (&(vals.self), 1));
+    }
+}
+
 /* See infcall.h.  */
 
 struct value *
@@ -757,7 +785,7 @@ call_function_by_hand_dummy (struct valu
     error (_("Cannot call functions in the program: "
 	     "may-call-functions is off."));
 
-  if (!target_has_execution)
+  if (!target_has_execution ())
     noprocess ();
 
   if (get_traceframe_number () >= 0)
@@ -798,7 +826,7 @@ call_function_by_hand_dummy (struct valu
 
   values_type = check_typedef (values_type);
 
-  if (args.size () < TYPE_NFIELDS (ftype))
+  if (args.size () < ftype->num_fields ())
     error (_("Too few arguments in function call."));
 
   /* A holder for the inferior status.
@@ -874,8 +902,8 @@ call_function_by_hand_dummy (struct valu
 	 do is add FRAME_ALIGN() to the architecture vector.  If that
 	 fails, try dummy_id().
 
-         If the ABI specifies a "Red Zone" (see the doco) the code
-         below will quietly trash it.  */
+	 If the ABI specifies a "Red Zone" (see the doco) the code
+	 below will quietly trash it.  */
       sp = old_sp;
 
     /* Skip over the stack temporaries that might have been generated during
@@ -885,7 +913,7 @@ call_function_by_hand_dummy (struct valu
 	struct value *lastval;
 
 	lastval = get_last_thread_stack_temporary (call_thread.get ());
-        if (lastval != NULL)
+	if (lastval != NULL)
 	  {
 	    CORE_ADDR lastval_addr = value_address (lastval);
 
@@ -983,6 +1011,12 @@ call_function_by_hand_dummy (struct valu
       internal_error (__FILE__, __LINE__, _("bad switch"));
     }
 
+  /* Coerce the arguments and handle pass-by-reference.
+     We want to remember the destruction required for pass-by-ref values.
+     For these, store the dtor function and the 'this' argument
+     in DTORS_TO_INVOKE.  */
+  std::list<destructor_info> dtors_to_invoke;
+
   for (int i = args.size () - 1; i >= 0; i--)
     {
       int prototyped;
@@ -990,10 +1024,10 @@ call_function_by_hand_dummy (struct valu
 
       /* FIXME drow/2002-05-31: Should just always mark methods as
 	 prototyped.  Can we respect TYPE_VARARGS?  Probably not.  */
-      if (TYPE_CODE (ftype) == TYPE_CODE_METHOD)
+      if (ftype->code () == TYPE_CODE_METHOD)
 	prototyped = 1;
-      if (TYPE_TARGET_TYPE (ftype) == NULL && TYPE_NFIELDS (ftype) == 0
-	  && default_return_type != NULL)
+      else if (TYPE_TARGET_TYPE (ftype) == NULL && ftype->num_fields () == 0
+	       && default_return_type != NULL)
 	{
 	  /* Calling a no-debug function with the return type
 	     explicitly cast.  Assume the function is prototyped,
@@ -1007,21 +1041,105 @@ call_function_by_hand_dummy (struct valu
 	  */
 	  prototyped = 1;
 	}
-      else if (i < TYPE_NFIELDS (ftype))
-	prototyped = TYPE_PROTOTYPED (ftype);
+      else if (i < ftype->num_fields ())
+	prototyped = ftype->is_prototyped ();
       else
 	prototyped = 0;
 
-      if (i < TYPE_NFIELDS (ftype))
-	param_type = TYPE_FIELD_TYPE (ftype, i);
+      if (i < ftype->num_fields ())
+	param_type = ftype->field (i).type ();
       else
 	param_type = NULL;
 
+      value *original_arg = args[i];
       args[i] = value_arg_coerce (gdbarch, args[i],
 				  param_type, prototyped);
 
-      if (param_type != NULL && language_pass_by_reference (param_type))
-	args[i] = value_addr (args[i]);
+      if (param_type == NULL)
+	continue;
+
+      auto info = language_pass_by_reference (param_type);
+      if (!info.copy_constructible)
+	error (_("expression cannot be evaluated because the type '%s' "
+		 "is not copy constructible"), param_type->name ());
+
+      if (!info.destructible)
+	error (_("expression cannot be evaluated because the type '%s' "
+		 "is not destructible"), param_type->name ());
+
+      if (info.trivially_copyable)
+	continue;
+
+      /* Make a copy of the argument on the stack.  If the argument is
+	 trivially copy ctor'able, copy bit by bit.  Otherwise, call
+	 the copy ctor to initialize the clone.  */
+      CORE_ADDR addr = reserve_stack_space (param_type, sp);
+      value *clone
+	= value_from_contents_and_address (param_type, nullptr, addr);
+      push_thread_stack_temporary (call_thread.get (), clone);
+      value *clone_ptr
+	= value_from_pointer (lookup_pointer_type (param_type), addr);
+
+      if (info.trivially_copy_constructible)
+	{
+	  int length = TYPE_LENGTH (param_type);
+	  write_memory (addr, value_contents (args[i]), length);
+	}
+      else
+	{
+	  value *copy_ctor;
+	  value *cctor_args[2] = { clone_ptr, original_arg };
+	  find_overload_match (gdb::make_array_view (cctor_args, 2),
+			       param_type->name (), METHOD,
+			       &clone_ptr, nullptr, &copy_ctor, nullptr,
+			       nullptr, 0, EVAL_NORMAL);
+
+	  if (copy_ctor == nullptr)
+	    error (_("expression cannot be evaluated because a copy "
+		     "constructor for the type '%s' could not be found "
+		     "(maybe inlined?)"), param_type->name ());
+
+	  call_function_by_hand (copy_ctor, default_return_type,
+				 gdb::make_array_view (cctor_args, 2));
+	}
+
+      /* If the argument has a destructor, remember it so that we
+	 invoke it after the infcall is complete.  */
+      if (!info.trivially_destructible)
+	{
+	  /* Looking up the function via overload resolution does not
+	     work because the compiler (in particular, gcc) adds an
+	     artificial int parameter in some cases.  So we look up
+	     the function by using the "~" name.  This should be OK
+	     because there can be only one dtor definition.  */
+	  const char *dtor_name = nullptr;
+	  for (int fieldnum = 0;
+	       fieldnum < TYPE_NFN_FIELDS (param_type);
+	       fieldnum++)
+	    {
+	      fn_field *fn
+		= TYPE_FN_FIELDLIST1 (param_type, fieldnum);
+	      const char *field_name
+		= TYPE_FN_FIELDLIST_NAME (param_type, fieldnum);
+
+	      if (field_name[0] == '~')
+		dtor_name = TYPE_FN_FIELD_PHYSNAME (fn, 0);
+	    }
+
+	  if (dtor_name == nullptr)
+	    error (_("expression cannot be evaluated because a destructor "
+		     "for the type '%s' could not be found "
+		     "(maybe inlined?)"), param_type->name ());
+
+	  value *dtor
+	    = find_function_in_inferior (dtor_name, 0);
+
+	  /* Insert the dtor to the front of the list to call them
+	     in reverse order later.  */
+	  dtors_to_invoke.emplace_front (dtor, clone_ptr);
+	}
+
+      args[i] = clone_ptr;
     }
 
   /* Reserve space for the return structure to be written on the
@@ -1188,6 +1306,10 @@ call_function_by_hand_dummy (struct valu
 	    maybe_remove_breakpoints ();
 
 	    gdb_assert (retval != NULL);
+
+	    /* Destruct the pass-by-ref argument clones.  */
+	    call_destructors (dtors_to_invoke, default_return_type);
+
 	    return retval;
 	  }
 
@@ -1204,13 +1326,13 @@ call_function_by_hand_dummy (struct valu
   if (e.reason < 0)
     {
       const char *name = get_function_name (funaddr,
-                                            name_buf, sizeof (name_buf));
+					    name_buf, sizeof (name_buf));
 
       discard_infcall_control_state (inf_status.release ());
 
       /* We could discard the dummy frame here if the program exited,
-         but it will get garbage collected the next time the program is
-         run anyway.  */
+	 but it will get garbage collected the next time the program is
+	 run anyway.  */
 
       switch (e.reason)
 	{
@@ -1230,7 +1352,7 @@ When the function is done executing, GDB
   /* If the program has exited, or we stopped at a different thread,
      exit and inform the user.  */
 
-  if (! target_has_execution)
+  if (! target_has_execution ())
     {
       const char *name = get_function_name (funaddr,
 					    name_buf, sizeof (name_buf));
@@ -1240,8 +1362,8 @@ When the function is done executing, GDB
       discard_infcall_control_state (inf_status.release ());
 
       /* We could discard the dummy frame here given that the program exited,
-         but it will get garbage collected the next time the program is
-         run anyway.  */
+	 but it will get garbage collected the next time the program is
+	 run anyway.  */
 
       error (_("The program being debugged exited while in a function "
 	       "called from GDB.\n"
@@ -1384,8 +1506,9 @@ When the function is done executing, GDB
   gdb_assert_not_reached ("... should not be here");
 }
 
+void _initialize_infcall ();
 void
-_initialize_infcall (void)
+_initialize_infcall ()
 {
   add_setshow_boolean_cmd ("may-call-functions", no_class,
 			   &may_call_functions_p, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infcall.h ./gdb/infcall.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infcall.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/infcall.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Perform an inferior function call, for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-child.c ./gdb/inf-child.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-child.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inf-child.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Base/prototype target for default child (native) targets.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -166,7 +166,7 @@ inf_child_open_target (const char *arg,
   gdb_assert (dynamic_cast<inf_child_target *> (target) != NULL);
 
   target_preopen (from_tty);
-  push_target (target);
+  current_inferior ()->push_target (target);
   inf_child_explicitly_opened = 1;
   if (from_tty)
     printf_filtered ("Done.  Use the \"run\" command to start a process.\n");
@@ -206,8 +206,8 @@ inf_child_target::mourn_inferior ()
 void
 inf_child_target::maybe_unpush_target ()
 {
-  if (!inf_child_explicitly_opened && !have_inferiors ())
-    unpush_target (this);
+  if (!inf_child_explicitly_opened)
+    current_inferior ()->unpush_target (this);
 }
 
 void
@@ -409,6 +409,24 @@ inf_child_target::can_use_agent ()
   return agent_loaded_p ();
 }
 
+void
+inf_child_target::follow_exec (inferior *follow_inf, ptid_t ptid,
+			       const char *execd_pathname)
+{
+  inferior *orig_inf = current_inferior ();
+
+  process_stratum_target::follow_exec (follow_inf, ptid, execd_pathname);
+
+  if (orig_inf != follow_inf)
+    {
+      /* If the target was implicitly push in the original inferior, unpush
+         it.  */
+      scoped_restore_current_thread restore_thread;
+      switch_to_inferior_no_thread (orig_inf);
+      maybe_unpush_target ();
+    }
+}
+
 /* See inf-child.h.  */
 
 void
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-child.h ./gdb/inf-child.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-child.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inf-child.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Base/prototype target for default child (native) targets.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -57,6 +57,9 @@ public:
 
   void post_startup_inferior (ptid_t) override;
 
+  void follow_exec (inferior *follow_inf, ptid_t ptid,
+		    const char *execd_pathname) override;
+
   void mourn_inferior () override;
 
   bool can_run () override;
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infcmd.c ./gdb/infcmd.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infcmd.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/infcmd.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Memory-access and commands for "inferior" process, for GDB.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -47,11 +47,11 @@
 #include "inline-frame.h"
 #include "tracepoint.h"
 #include "inf-loop.h"
-#include "continuations.h"
 #include "linespec.h"
 #include "thread-fsm.h"
 #include "top.h"
 #include "interps.h"
+#include "skip.h"
 #include "gdbsupport/gdb_optional.h"
 #include "source.h"
 #include "cli/cli-style.h"
@@ -63,7 +63,7 @@ static void until_next_command (int);
 static void step_1 (int, int, const char *);
 
 #define ERROR_NO_INFERIOR \
-   if (!target_has_execution) error (_("The program is not being run."));
+   if (!target_has_execution ()) error (_("The program is not being run."));
 
 /* Scratch area where string containing arguments to give to the
    program will be stored by 'set args'.  As soon as anything is
@@ -99,27 +99,6 @@ enum stop_stack_kind stop_stack_dummy;
 int stopped_by_random_signal;
 
 
-/* Accessor routines.  */
-
-/* Set the io terminal for the current inferior.  Ownership of
-   TERMINAL_NAME is not transferred.  */
-
-void 
-set_inferior_io_terminal (const char *terminal_name)
-{
-  xfree (current_inferior ()->terminal);
-
-  if (terminal_name != NULL && *terminal_name != '\0')
-    current_inferior ()->terminal = xstrdup (terminal_name);
-  else
-    current_inferior ()->terminal = NULL;
-}
-
-const char *
-get_inferior_io_terminal (void)
-{
-  return current_inferior ()->terminal;
-}
 
 static void
 set_inferior_tty_command (const char *args, int from_tty,
@@ -127,7 +106,7 @@ set_inferior_tty_command (const char *ar
 {
   /* CLI has assigned the user-provided value to inferior_io_terminal_scratch.
      Now route it to current inferior.  */
-  set_inferior_io_terminal (inferior_io_terminal_scratch);
+  current_inferior ()->set_tty (inferior_io_terminal_scratch);
 }
 
 static void
@@ -136,13 +115,13 @@ show_inferior_tty_command (struct ui_fil
 {
   /* Note that we ignore the passed-in value in favor of computing it
      directly.  */
-  const char *inferior_io_terminal = get_inferior_io_terminal ();
+  const char *inferior_tty = current_inferior ()->tty ();
 
-  if (inferior_io_terminal == NULL)
-    inferior_io_terminal = "";
+  if (inferior_tty == nullptr)
+    inferior_tty = "";
   fprintf_filtered (gdb_stdout,
 		    _("Terminal for future runs of program being debugged "
-		      "is \"%s\".\n"), inferior_io_terminal);
+		      "is \"%s\".\n"), inferior_tty);
 }
 
 const char *
@@ -150,18 +129,16 @@ get_inferior_args (void)
 {
   if (current_inferior ()->argc != 0)
     {
-      char *n;
-
-      n = construct_inferior_arguments (current_inferior ()->argc,
-					current_inferior ()->argv);
-      set_inferior_args (n);
-      xfree (n);
+      gdb::array_view<char * const> args (current_inferior ()->argv,
+					  current_inferior ()->argc);
+      std::string n = construct_inferior_arguments (args);
+      set_inferior_args (n.c_str ());
     }
 
   if (current_inferior ()->args == NULL)
-    current_inferior ()->args = xstrdup ("");
+    current_inferior ()->args = make_unique_xstrdup ("");
 
-  return current_inferior ()->args;
+  return current_inferior ()->args.get ();
 }
 
 /* Set the arguments for the current inferior.  Ownership of
@@ -170,8 +147,11 @@ get_inferior_args (void)
 void
 set_inferior_args (const char *newargs)
 {
-  xfree (current_inferior ()->args);
-  current_inferior ()->args = newargs ? xstrdup (newargs) : NULL;
+  if (newargs != nullptr)
+    current_inferior ()->args = make_unique_xstrdup (newargs);
+  else
+    current_inferior ()->args.reset ();
+
   current_inferior ()->argc = 0;
   current_inferior ()->argv = 0;
 }
@@ -258,125 +238,6 @@ server's cwd if remote debugging.\n"));
 			"when starting the inferior is \"%s\".\n"), cwd);
 }
 
-
-/* Compute command-line string given argument vector.  This does the
-   same shell processing as fork_inferior.  */
-
-char *
-construct_inferior_arguments (int argc, char **argv)
-{
-  char *result;
-
-  if (startup_with_shell)
-    {
-#ifdef __MINGW32__
-      /* This holds all the characters considered special to the
-	 Windows shells.  */
-      static const char special[] = "\"!&*|[]{}<>?`~^=;, \t\n";
-      static const char quote = '"';
-#else
-      /* This holds all the characters considered special to the
-	 typical Unix shells.  We include `^' because the SunOS
-	 /bin/sh treats it as a synonym for `|'.  */
-      static const char special[] = "\"!#$&*()\\|[]{}<>?'`~^; \t\n";
-      static const char quote = '\'';
-#endif
-      int i;
-      int length = 0;
-      char *out, *cp;
-
-      /* We over-compute the size.  It shouldn't matter.  */
-      for (i = 0; i < argc; ++i)
-	length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0');
-
-      result = (char *) xmalloc (length);
-      out = result;
-
-      for (i = 0; i < argc; ++i)
-	{
-	  if (i > 0)
-	    *out++ = ' ';
-
-	  /* Need to handle empty arguments specially.  */
-	  if (argv[i][0] == '\0')
-	    {
-	      *out++ = quote;
-	      *out++ = quote;
-	    }
-	  else
-	    {
-#ifdef __MINGW32__
-	      int quoted = 0;
-
-	      if (strpbrk (argv[i], special))
-		{
-		  quoted = 1;
-		  *out++ = quote;
-		}
-#endif
-	      for (cp = argv[i]; *cp; ++cp)
-		{
-		  if (*cp == '\n')
-		    {
-		      /* A newline cannot be quoted with a backslash (it
-			 just disappears), only by putting it inside
-			 quotes.  */
-		      *out++ = quote;
-		      *out++ = '\n';
-		      *out++ = quote;
-		    }
-		  else
-		    {
-#ifdef __MINGW32__
-		      if (*cp == quote)
-#else
-		      if (strchr (special, *cp) != NULL)
-#endif
-			*out++ = '\\';
-		      *out++ = *cp;
-		    }
-		}
-#ifdef __MINGW32__
-	      if (quoted)
-		*out++ = quote;
-#endif
-	    }
-	}
-      *out = '\0';
-    }
-  else
-    {
-      /* In this case we can't handle arguments that contain spaces,
-	 tabs, or newlines -- see breakup_args().  */
-      int i;
-      int length = 0;
-
-      for (i = 0; i < argc; ++i)
-	{
-	  char *cp = strchr (argv[i], ' ');
-	  if (cp == NULL)
-	    cp = strchr (argv[i], '\t');
-	  if (cp == NULL)
-	    cp = strchr (argv[i], '\n');
-	  if (cp != NULL)
-	    error (_("can't handle command-line "
-		     "argument containing whitespace"));
-	  length += strlen (argv[i]) + 1;
-	}
-
-      result = (char *) xmalloc (length);
-      result[0] = '\0';
-      for (i = 0; i < argc; ++i)
-	{
-	  if (i > 0)
-	    strcat (result, " ");
-	  strcat (result, argv[i]);
-	}
-    }
-
-  return result;
-}
-
 
 /* This function strips the '&' character (indicating background
    execution) that is added as *the last* of the arguments ARGS of a
@@ -420,7 +281,7 @@ strip_bg_char (const char *args, int *bg
    should be stopped.  */
 
 void
-post_create_inferior (struct target_ops *target, int from_tty)
+post_create_inferior (int from_tty)
 {
 
   /* Be sure we own the terminal in case write operations are performed.  */ 
@@ -440,7 +301,8 @@ post_create_inferior (struct target_ops
   thr->suspend.stop_pc = 0;
   try
     {
-      thr->suspend.stop_pc = regcache_read_pc (get_current_regcache ());
+      regcache *rc = get_thread_regcache (thr);
+      thr->suspend.stop_pc = regcache_read_pc (rc);
     }
   catch (const gdb_exception_error &ex)
     {
@@ -448,11 +310,15 @@ post_create_inferior (struct target_ops
 	throw;
     }
 
-  if (exec_bfd)
+  if (current_program_space->exec_bfd ())
     {
       const unsigned solib_add_generation
 	= current_program_space->solib_add_generation;
 
+      scoped_restore restore_in_initial_library_scan
+	= make_scoped_restore (&current_inferior ()->in_initial_library_scan,
+			       true);
+
       /* Create the hooks to handle shared library load and unload
 	 events.  */
       solib_create_inferior_hook (from_tty);
@@ -487,7 +353,7 @@ post_create_inferior (struct target_ops
      if the now pushed target supports hardware watchpoints.  */
   breakpoint_re_set ();
 
-  gdb::observers::inferior_created.notify (target, from_tty);
+  gdb::observers::inferior_created.notify (current_inferior ());
 }
 
 /* Kill the inferior if already running.  This function is designed
@@ -498,7 +364,7 @@ post_create_inferior (struct target_ops
 static void
 kill_if_already_running (int from_tty)
 {
-  if (inferior_ptid != null_ptid && target_has_execution)
+  if (inferior_ptid != null_ptid && target_has_execution ())
     {
       /* Bail out before killing the program if we will not be able to
 	 restart it.  */
@@ -559,6 +425,8 @@ run_command_1 (const char *args, int fro
 
   dont_repeat ();
 
+  scoped_disable_commit_resumed disable_commit_resumed ("running");
+
   kill_if_already_running (from_tty);
 
   init_wait_for_inferior ();
@@ -644,14 +512,23 @@ run_command_1 (const char *args, int fro
      events --- the frontend shouldn't see them as stopped.  In
      all-stop, always finish the state of all threads, as we may be
      resuming more than just the new process.  */
-  ptid_t finish_ptid = (non_stop
-			? ptid_t (current_inferior ()->pid)
-			: minus_one_ptid);
-  scoped_finish_thread_state finish_state (finish_ptid);
+  process_stratum_target *finish_target;
+  ptid_t finish_ptid;
+  if (non_stop)
+    {
+      finish_target = current_inferior ()->process_target ();
+      finish_ptid = ptid_t (current_inferior ()->pid);
+    }
+  else
+    {
+      finish_target = nullptr;
+      finish_ptid = minus_one_ptid;
+    }
+  scoped_finish_thread_state finish_state (finish_target, finish_ptid);
 
   /* Pass zero for FROM_TTY, because at this point the "run" command
      has done its thing; now we are setting up the running program.  */
-  post_create_inferior (current_top_target (), 0);
+  post_create_inferior (0);
 
   /* Queue a pending event so that the program stops immediately.  */
   if (run_how == RUN_STOP_AT_FIRST_INSN)
@@ -669,6 +546,8 @@ run_command_1 (const char *args, int fro
   /* Since there was no error, there's no need to finish the thread
      states here.  */
   finish_state.release ();
+
+  disable_commit_resumed.reset_and_commit ();
 }
 
 static void
@@ -717,6 +596,9 @@ proceed_thread_callback (struct thread_i
   if (thread->state != THREAD_STOPPED)
     return 0;
 
+  if (!thread->inf->has_execution ())
+    return 0;
+
   switch_to_thread (thread);
   clear_proceed_status (0);
   proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT);
@@ -810,7 +692,7 @@ static void
 continue_command (const char *args, int from_tty)
 {
   int async_exec;
-  int all_threads = 0;
+  bool all_threads_p = false;
 
   ERROR_NO_INFERIOR;
 
@@ -822,17 +704,17 @@ continue_command (const char *args, int
     {
       if (startswith (args, "-a"))
 	{
-	  all_threads = 1;
+	  all_threads_p = true;
 	  args += sizeof ("-a") - 1;
 	  if (*args == '\0')
 	    args = NULL;
 	}
     }
 
-  if (!non_stop && all_threads)
+  if (!non_stop && all_threads_p)
     error (_("`-a' is meaningless in all-stop mode."));
 
-  if (args != NULL && all_threads)
+  if (args != NULL && all_threads_p)
     error (_("Can't resume all threads and specify "
 	     "proceed count simultaneously."));
 
@@ -849,11 +731,11 @@ continue_command (const char *args, int
 	tp = inferior_thread ();
       else
 	{
+	  process_stratum_target *last_target;
 	  ptid_t last_ptid;
-	  struct target_waitstatus ws;
 
-	  get_last_target_status (&last_ptid, &ws);
-	  tp = find_thread_ptid (last_ptid);
+	  get_last_target_status (&last_target, &last_ptid, nullptr);
+	  tp = find_thread_ptid (last_target, last_ptid);
 	}
       if (tp != NULL)
 	bs = tp->control.stop_bpstat;
@@ -881,32 +763,35 @@ continue_command (const char *args, int
   ERROR_NO_INFERIOR;
   ensure_not_tfind_mode ();
 
-  if (!non_stop || !all_threads)
+  if (!non_stop || !all_threads_p)
     {
       ensure_valid_thread ();
       ensure_not_running ();
     }
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (from_tty)
     printf_filtered (_("Continuing.\n"));
 
-  continue_1 (all_threads);
+  continue_1 (all_threads_p);
 }
 
-/* Record the starting point of a "step" or "next" command.  */
+/* Record in TP the starting point of a "step" or "next" command.  */
 
 static void
-set_step_frame (void)
+set_step_frame (thread_info *tp)
 {
+  /* This can be removed once this function no longer implicitly relies on the
+     inferior_ptid value.  */
+  gdb_assert (inferior_ptid == tp->ptid);
+
   frame_info *frame = get_current_frame ();
 
   symtab_and_line sal = find_frame_sal (frame);
-  set_step_info (frame, sal);
+  set_step_info (tp, frame, sal);
 
   CORE_ADDR pc = get_frame_pc (frame);
-  thread_info *tp = inferior_thread ();
   tp->control.step_start_function = find_pc_function (pc);
 }
 
@@ -983,7 +868,7 @@ step_command_fsm_prepare (struct step_co
   thread->control.stepping_command = 1;
 }
 
-static int prepare_one_step (struct step_command_fsm *sm);
+static int prepare_one_step (thread_info *, struct step_command_fsm *sm);
 
 static void
 step_1 (int skip_subroutines, int single_inst, const char *count_string)
@@ -1002,7 +887,7 @@ step_1 (int skip_subroutines, int single
     = strip_bg_char (count_string, &async_exec);
   count_string = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   count = count_string ? parse_and_eval_long (count_string) : 1;
 
@@ -1021,7 +906,7 @@ step_1 (int skip_subroutines, int single
      loop.  Let the continuation figure out how many other steps we
      need to do, and handle them one at the time, through
      step_once.  */
-  if (!prepare_one_step (step_sm))
+  if (!prepare_one_step (thr, step_sm))
     proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT);
   else
     {
@@ -1032,7 +917,7 @@ step_1 (int skip_subroutines, int single
       thr->thread_fsm->clean_up (thr);
       proceeded = normal_stop ();
       if (!proceeded)
-	inferior_event_handler (INF_EXEC_COMPLETE, NULL);
+	inferior_event_handler (INF_EXEC_COMPLETE);
       all_uis_check_sync_execution_done ();
     }
 }
@@ -1051,7 +936,7 @@ step_command_fsm::should_stop (struct th
       /* There are more steps to make, and we did stop due to
 	 ending a stepping range.  Do another step.  */
       if (--count > 0)
-	return prepare_one_step (this);
+	return prepare_one_step (tp, this);
 
       set_finished ();
     }
@@ -1083,19 +968,17 @@ step_command_fsm::do_async_reply_reason
    resumed.  */
 
 static int
-prepare_one_step (struct step_command_fsm *sm)
+prepare_one_step (thread_info *tp, struct step_command_fsm *sm)
 {
+  /* This can be removed once this function no longer implicitly relies on the
+     inferior_ptid value.  */
+  gdb_assert (inferior_ptid == tp->ptid);
+
   if (sm->count > 0)
     {
       struct frame_info *frame = get_current_frame ();
 
-      /* Don't assume THREAD is a valid thread id.  It is set to -1 if
-	 the longjmp breakpoint was not required.  Use the
-	 INFERIOR_PTID thread instead, which is the same thread when
-	 THREAD is set.  */
-      struct thread_info *tp = inferior_thread ();
-
-      set_step_frame ();
+      set_step_frame (tp);
 
       if (!sm->single_inst)
 	{
@@ -1106,14 +989,29 @@ prepare_one_step (struct step_command_fs
 	      && inline_skipped_frames (tp))
 	    {
 	      ptid_t resume_ptid;
+	      const char *fn = NULL;
+	      symtab_and_line sal;
+	      struct symbol *sym;
 
 	      /* Pretend that we've ran.  */
 	      resume_ptid = user_visible_resume_ptid (1);
-	      set_running (resume_ptid, 1);
+	      set_running (tp->inf->process_target (), resume_ptid, true);
 
 	      step_into_inline_frame (tp);
-	      sm->count--;
-	      return prepare_one_step (sm);
+
+	      frame = get_current_frame ();
+	      sal = find_frame_sal (frame);
+	      sym = get_frame_function (frame);
+
+	      if (sym != NULL)
+		fn = sym->print_name ();
+
+	      if (sal.line == 0
+		  || !function_name_is_marked_for_skip (fn, sal))
+		{
+		  sm->count--;
+		  return prepare_one_step (tp, sm);
+		}
 	    }
 
 	  pc = get_frame_pc (frame);
@@ -1121,6 +1019,20 @@ prepare_one_step (struct step_command_fs
 				 &tp->control.step_range_start,
 				 &tp->control.step_range_end);
 
+	  /* There's a problem in gcc (PR gcc/98780) that causes missing line
+	     table entries, which results in a too large stepping range.
+	     Use inlined_subroutine info to make the range more narrow.  */
+	  if (inline_skipped_frames (tp) > 0)
+	    {
+	      symbol *sym = inline_skipped_symbol (tp);
+	      if (SYMBOL_CLASS (sym) == LOC_BLOCK)
+		{
+		  const block *block = SYMBOL_BLOCK_VALUE (sym);
+		  if (BLOCK_END (block) < tp->control.step_range_end)
+		    tp->control.step_range_end = BLOCK_END (block);
+		}
+	    }
+
 	  tp->control.may_range_step = 1;
 
 	  /* If we have no line info, switch to stepi mode.  */
@@ -1187,7 +1099,7 @@ jump_command (const char *arg, int from_
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (!arg)
     error_no_arg (_("starting address"));
@@ -1222,7 +1134,7 @@ jump_command (const char *arg, int from_
       struct obj_section *section;
 
       fixup_symbol_section (sfn, 0);
-      section = SYMBOL_OBJ_SECTION (symbol_objfile (sfn), sfn);
+      section = sfn->obj_section (symbol_objfile (sfn));
       if (section_is_overlay (section)
 	  && !section_is_mapped (section))
 	{
@@ -1267,7 +1179,7 @@ signal_command (const char *signum_exp,
     = strip_bg_char (signum_exp, &async_exec);
   signum_exp = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (!signum_exp)
     error_no_arg (_("signal number"));
@@ -1301,10 +1213,14 @@ signal_command (const char *signum_exp,
       /* This indicates what will be resumed.  Either a single thread,
 	 a whole process, or all threads of all processes.  */
       ptid_t resume_ptid = user_visible_resume_ptid (0);
+      process_stratum_target *resume_target
+	= user_visible_resume_target (resume_ptid);
+
+      thread_info *current = inferior_thread ();
 
-      for (thread_info *tp : all_non_exited_threads (resume_ptid))
+      for (thread_info *tp : all_non_exited_threads (resume_target, resume_ptid))
 	{
-	  if (tp->ptid == inferior_ptid)
+	  if (tp == current)
 	    continue;
 
 	  if (tp->suspend.stop_signal != GDB_SIGNAL_0
@@ -1450,7 +1366,7 @@ until_next_command (int from_tty)
   struct until_next_fsm *sm;
 
   clear_proceed_status (0);
-  set_step_frame ();
+  set_step_frame (tp);
 
   frame = get_current_frame ();
 
@@ -1508,7 +1424,7 @@ until_command (const char *arg, int from
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (arg)
     until_break_command (arg, from_tty, 0);
@@ -1533,7 +1449,7 @@ advance_command (const char *arg, int fr
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   until_break_command (arg, from_tty, 1);
 }
@@ -1550,7 +1466,7 @@ get_return_value (struct value *function
   struct value *value;
 
   value_type = check_typedef (value_type);
-  gdb_assert (TYPE_CODE (value_type) != TYPE_CODE_VOID);
+  gdb_assert (value_type->code () != TYPE_CODE_VOID);
 
   /* FIXME: 2003-09-27: When returning from a nested inferior function
      call, it's possible (with no help from the architecture vector)
@@ -1560,7 +1476,7 @@ get_return_value (struct value *function
      calls are made async, this will likely be made the norm.  */
 
   switch (gdbarch_return_value (gdbarch, function, value_type,
-  				NULL, NULL, NULL))
+				NULL, NULL, NULL))
     {
     case RETURN_VALUE_REGISTER_CONVENTION:
     case RETURN_VALUE_ABI_RETURNS_ADDRESS:
@@ -1627,7 +1543,7 @@ print_return_value_1 (struct ui_out *uio
     {
       std::string type_name = type_to_string (rv->type);
       uiout->text ("Value returned has type: ");
-      uiout->field_string ("return-type", type_name.c_str ());
+      uiout->field_string ("return-type", type_name);
       uiout->text (".");
       uiout->text (" Cannot determine contents\n");
     }
@@ -1641,7 +1557,7 @@ void
 print_return_value (struct ui_out *uiout, struct return_value_info *rv)
 {
   if (rv->type == NULL
-      || TYPE_CODE (check_typedef (rv->type)) == TYPE_CODE_VOID)
+      || check_typedef (rv->type)->code () == TYPE_CODE_VOID)
     return;
 
   try
@@ -1705,7 +1621,7 @@ finish_command_fsm::should_stop (struct
 	internal_error (__FILE__, __LINE__,
 			_("finish_command: function has no target type"));
 
-      if (TYPE_CODE (check_typedef (rv->type)) != TYPE_CODE_VOID)
+      if (check_typedef (rv->type)->code () != TYPE_CODE_VOID)
 	{
 	  struct value *func;
 
@@ -1880,7 +1796,7 @@ finish_command (const char *arg, int fro
   gdb::unique_xmalloc_ptr<char> stripped = strip_bg_char (arg, &async_exec);
   arg = stripped.get ();
 
-  prepare_execution_command (current_top_target (), async_exec);
+  prepare_execution_command (current_inferior ()->top_target (), async_exec);
 
   if (arg)
     error (_("The \"finish\" command does not take any arguments."));
@@ -1907,7 +1823,7 @@ finish_command (const char *arg, int fro
 	 called by that frame.  We don't use the magic "1" value for
 	 step_range_end, because then infrun will think this is nexti,
 	 and not step over the rest of this inlined function call.  */
-      set_step_info (frame, {});
+      set_step_info (tp, frame, {});
       tp->control.step_range_start = get_frame_pc (frame);
       tp->control.step_range_end = tp->control.step_range_start;
       tp->control.step_over_calls = STEP_OVER_ALL;
@@ -1967,26 +1883,26 @@ info_program_command (const char *args,
   bpstat bs;
   int num, stat;
   ptid_t ptid;
+  process_stratum_target *proc_target;
 
-  if (!target_has_execution)
+  if (!target_has_execution ())
     {
       printf_filtered (_("The program being debugged is not being run.\n"));
       return;
     }
 
   if (non_stop)
-    ptid = inferior_ptid;
-  else
     {
-      struct target_waitstatus ws;
-
-      get_last_target_status (&ptid, &ws);
+      ptid = inferior_ptid;
+      proc_target = current_inferior ()->process_target ();
     }
+  else
+    get_last_target_status (&proc_target, &ptid, nullptr);
 
   if (ptid == null_ptid || ptid == minus_one_ptid)
     error (_("No selected thread."));
 
-  thread_info *tp = find_thread_ptid (ptid);
+  thread_info *tp = find_thread_ptid (proc_target, ptid);
 
   if (tp->state == THREAD_EXITED)
     error (_("Invalid selected thread."));
@@ -2004,7 +1920,7 @@ info_program_command (const char *args,
   else if (stat != 0)
     {
       /* There may be several breakpoints in the same place, so this
-         isn't as strange as it seems.  */
+	 isn't as strange as it seems.  */
       while (stat != 0)
 	{
 	  if (stat < 0)
@@ -2080,14 +1996,14 @@ set_environment_command (const char *arg
   if (p != 0 && val != 0)
     {
       /* We have both a space and an equals.  If the space is before the
-         equals, walk forward over the spaces til we see a nonspace 
-         (possibly the equals).  */
+	 equals, walk forward over the spaces til we see a nonspace 
+	 (possibly the equals).  */
       if (p > val)
 	while (*val == ' ')
 	  val++;
 
       /* Now if the = is after the char following the spaces,
-         take the char following the spaces.  */
+	 take the char following the spaces.  */
       if (p > val)
 	p = val - 1;
     }
@@ -2132,7 +2048,7 @@ unset_environment_command (const char *v
   if (var == 0)
     {
       /* If there is no argument, delete all environment variables.
-         Ask for confirmation if reading from the terminal.  */
+	 Ask for confirmation if reading from the terminal.  */
       if (!from_tty || query (_("Delete all environment variables? ")))
 	current_inferior ()->environment.clear ();
     }
@@ -2199,7 +2115,7 @@ default_print_one_register_info (struct
     {
       value_column_1 = 15,
       /* Give enough room for "0x", 16 hex digits and two spaces in
-         preceding column.  */
+	 preceding column.  */
       value_column_2 = value_column_1 + 2 + 16 + 2,
     };
 
@@ -2211,8 +2127,8 @@ default_print_one_register_info (struct
 
   /* If virtual format is floating, print it that way, and in raw
      hex.  */
-  if (TYPE_CODE (regtype) == TYPE_CODE_FLT
-      || TYPE_CODE (regtype) == TYPE_CODE_DECFLOAT)
+  if (regtype->code () == TYPE_CODE_FLT
+      || regtype->code () == TYPE_CODE_DECFLOAT)
     {
       struct value_print_options opts;
       const gdb_byte *valaddr = value_contents_for_printing (val);
@@ -2221,9 +2137,7 @@ default_print_one_register_info (struct
       get_user_print_options (&opts);
       opts.deref_ref = 1;
 
-      val_print (regtype,
-		 value_embedded_offset (val), 0,
-		 &format_stream, 0, val, &opts, current_language);
+      common_val_print (val, &format_stream, 0, &opts, current_language);
 
       if (print_raw_format)
 	{
@@ -2241,19 +2155,15 @@ default_print_one_register_info (struct
       /* Print the register in hex.  */
       get_formatted_print_options (&opts, 'x');
       opts.deref_ref = 1;
-      val_print (regtype,
-		 value_embedded_offset (val), 0,
-		 &format_stream, 0, val, &opts, current_language);
+      common_val_print (val, &format_stream, 0, &opts, current_language);
       /* If not a vector register, print it also according to its
 	 natural format.  */
-      if (print_raw_format && TYPE_VECTOR (regtype) == 0)
+      if (print_raw_format && regtype->is_vector () == 0)
 	{
 	  pad_to_column (format_stream, value_column_2);
 	  get_user_print_options (&opts);
 	  opts.deref_ref = 1;
-	  val_print (regtype,
-		     value_embedded_offset (val), 0,
-		     &format_stream, 0, val, &opts, current_language);
+	  common_val_print (val, &format_stream, 0, &opts, current_language);
 	}
     }
 
@@ -2284,7 +2194,7 @@ default_print_registers_info (struct gdb
   for (i = 0; i < numregs; i++)
     {
       /* Decide between printing all regs, non-float / vector regs, or
-         specific reg.  */
+	 specific reg.  */
       if (regnum == -1)
 	{
 	  if (print_all)
@@ -2305,7 +2215,7 @@ default_print_registers_info (struct gdb
 	}
 
       /* If the register name is empty, it is undefined for this
-         processor, so don't display anything.  */
+	 processor, so don't display anything.  */
       if (gdbarch_register_name (gdbarch, i) == NULL
 	  || *(gdbarch_register_name (gdbarch, i)) == '\0')
 	continue;
@@ -2322,7 +2232,7 @@ registers_info (const char *addr_exp, in
   struct frame_info *frame;
   struct gdbarch *gdbarch;
 
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("The program has no registers now."));
   frame = get_selected_frame (NULL);
   gdbarch = get_frame_arch (frame);
@@ -2343,7 +2253,7 @@ registers_info (const char *addr_exp, in
       addr_exp = skip_spaces (addr_exp);
 
       /* Discard any leading ``$''.  Check that there is something
-         resembling a register following it.  */
+	 resembling a register following it.  */
       if (addr_exp[0] == '$')
 	addr_exp++;
       if (isspace ((*addr_exp)) || (*addr_exp) == '\0')
@@ -2463,7 +2373,7 @@ print_vector_info (struct ui_file *file,
 static void
 info_vector_command (const char *args, int from_tty)
 {
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("The program has no registers now."));
 
   print_vector_info (gdb_stdout, get_selected_frame (NULL), args);
@@ -2495,20 +2405,6 @@ kill_command (const char *arg, int from_
     printf_unfiltered (_("[Inferior %d (%s) killed]\n"),
 		       infnum, pid_str.c_str ());
 
-  /* If we still have other inferiors to debug, then don't mess with
-     with their threads.  */
-  if (!have_inferiors ())
-    {
-      init_thread_list ();		/* Destroy thread info.  */
-
-      /* Killing off the inferior can leave us with a core file.  If
-	 so, print the state we are left in.  */
-      if (target_has_stack)
-	{
-	  printf_filtered (_("In %s,\n"), target_longname);
-	  print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
-	}
-    }
   bfd_cache_close_all ();
 }
 
@@ -2560,7 +2456,7 @@ setup_inferior (int from_tty)
   /* Take any necessary post-attaching actions for this platform.  */
   target_post_attach (inferior_ptid.pid ());
 
-  post_create_inferior (current_top_target (), from_tty);
+  post_create_inferior (from_tty);
 }
 
 /* What to do after the first program stops after attaching.  */
@@ -2577,11 +2473,11 @@ enum attach_post_wait_mode
 };
 
 /* Called after we've attached to a process and we've seen it stop for
-   the first time.  If ASYNC_EXEC is true, re-resume threads that
-   should be running.  Else if ATTACH, */
+   the first time.  Resume, stop, or don't touch the threads according
+   to MODE.  */
 
 static void
-attach_post_wait (const char *args, int from_tty, enum attach_post_wait_mode mode)
+attach_post_wait (int from_tty, enum attach_post_wait_mode mode)
 {
   struct inferior *inferior;
 
@@ -2596,7 +2492,7 @@ attach_post_wait (const char *args, int
       /* The user requested an `attach&', so be sure to leave threads
 	 that didn't get a signal running.  */
 
-      /* Immediatelly resume all suspended threads of this inferior,
+      /* Immediately resume all suspended threads of this inferior,
 	 and this inferior only.  This should have no effect on
 	 already running threads.  If a thread has been stopped with a
 	 signal, leave it be.  */
@@ -2650,35 +2546,6 @@ attach_post_wait (const char *args, int
     }
 }
 
-struct attach_command_continuation_args
-{
-  char *args;
-  int from_tty;
-  enum attach_post_wait_mode mode;
-};
-
-static void
-attach_command_continuation (void *args, int err)
-{
-  struct attach_command_continuation_args *a
-    = (struct attach_command_continuation_args *) args;
-
-  if (err)
-    return;
-
-  attach_post_wait (a->args, a->from_tty, a->mode);
-}
-
-static void
-attach_command_continuation_free_args (void *args)
-{
-  struct attach_command_continuation_args *a
-    = (struct attach_command_continuation_args *) args;
-
-  xfree (a->args);
-  xfree (a);
-}
-
 /* "attach" command entry point.  Takes a program started up outside
    of gdb and ``attaches'' to it.  This stops it cold in its tracks
    and allows us to start debugging it.  */
@@ -2693,11 +2560,13 @@ attach_command (const char *args, int fr
 
   dont_repeat ();		/* Not for the faint of heart */
 
+  scoped_disable_commit_resumed disable_commit_resumed ("attaching");
+
   if (gdbarch_has_global_solist (target_gdbarch ()))
     /* Don't complain if all processes share the same symbol
        space.  */
     ;
-  else if (target_has_execution)
+  else if (target_has_execution ())
     {
       if (query (_("A program is being debugged already.  Kill it? ")))
 	target_kill ();
@@ -2747,7 +2616,6 @@ attach_command (const char *args, int fr
   /* Set up execution context to know that we should return from
      wait_for_inferior as soon as the target reports a stop.  */
   init_wait_for_inferior ();
-  clear_proceed_status (0);
 
   inferior->needs_setup = 1;
 
@@ -2766,14 +2634,15 @@ attach_command (const char *args, int fr
 	target_stop (ptid_t (inferior_ptid.pid ()));
     }
 
+  /* Check for exec file mismatch, and let the user solve it.  */
+  validate_exec_file (from_tty);
+
   mode = async_exec ? ATTACH_POST_WAIT_RESUME : ATTACH_POST_WAIT_STOP;
 
   /* Some system don't generate traps when attaching to inferior.
      E.g. Mach 3 or GNU hurd.  */
   if (!target_attach_no_wait ())
     {
-      struct attach_command_continuation_args *a;
-
       /* Careful here.  See comments in inferior.h.  Basically some
 	 OSes don't ignore SIGSTOPs on continue requests anymore.  We
 	 need a way for handle_inferior_event to reset the stop_signal
@@ -2782,19 +2651,23 @@ attach_command (const char *args, int fr
       inferior->control.stop_soon = STOP_QUIETLY_NO_SIGSTOP;
 
       /* Wait for stop.  */
-      a = XNEW (struct attach_command_continuation_args);
-      a->args = xstrdup (args);
-      a->from_tty = from_tty;
-      a->mode = mode;
-      add_inferior_continuation (attach_command_continuation, a,
-				 attach_command_continuation_free_args);
+      inferior->add_continuation ([=] ()
+	{
+	  attach_post_wait (from_tty, mode);
+	});
+
+      /* Let infrun consider waiting for events out of this
+	 target.  */
+      inferior->process_target ()->threads_executing = true;
 
       if (!target_is_async_p ())
 	mark_infrun_async_event_handler ();
       return;
     }
+  else
+    attach_post_wait (from_tty, mode);
 
-  attach_post_wait (args, from_tty, mode);
+  disable_commit_resumed.reset_and_commit ();
 }
 
 /* We had just found out that the target was already attached to an
@@ -2806,7 +2679,7 @@ attach_command (const char *args, int fr
    as stopped.  */
 
 void
-notice_new_inferior (thread_info *thr, int leave_running, int from_tty)
+notice_new_inferior (thread_info *thr, bool leave_running, int from_tty)
 {
   enum attach_post_wait_mode mode
     = leave_running ? ATTACH_POST_WAIT_RESUME : ATTACH_POST_WAIT_NOTHING;
@@ -2825,7 +2698,6 @@ notice_new_inferior (thread_info *thr, i
 
   if (thr->executing)
     {
-      struct attach_command_continuation_args *a;
       struct inferior *inferior = current_inferior ();
 
       /* We're going to install breakpoints, and poke at memory,
@@ -2836,17 +2708,15 @@ notice_new_inferior (thread_info *thr, i
       inferior->control.stop_soon = STOP_QUIETLY_REMOTE;
 
       /* Wait for stop before proceeding.  */
-      a = XNEW (struct attach_command_continuation_args);
-      a->args = xstrdup ("");
-      a->from_tty = from_tty;
-      a->mode = mode;
-      add_inferior_continuation (attach_command_continuation, a,
-				 attach_command_continuation_free_args);
+      inferior->add_continuation ([=] ()
+	{
+	  attach_post_wait (from_tty, mode);
+	});
 
       return;
     }
 
-  attach_post_wait ("" /* args */, from_tty, mode);
+  attach_post_wait (from_tty, mode);
 }
 
 /*
@@ -2868,10 +2738,22 @@ detach_command (const char *args, int fr
   if (inferior_ptid == null_ptid)
     error (_("The program is not being run."));
 
+  scoped_disable_commit_resumed disable_commit_resumed ("detaching");
+
   query_if_trace_running (from_tty);
 
   disconnect_tracing ();
 
+  /* Hold a strong reference to the target while (maybe)
+     detaching the parent.  Otherwise detaching could close the
+     target.  */
+  auto target_ref
+    = target_ops_ref::new_reference (current_inferior ()->process_target ());
+
+  /* Save this before detaching, since detaching may unpush the
+     process_stratum target.  */
+  bool was_non_stop_p = target_is_non_stop_p ();
+
   target_detach (current_inferior (), from_tty);
 
   /* The current inferior process was just detached successfully.  Get
@@ -2888,6 +2770,11 @@ detach_command (const char *args, int fr
 
   if (deprecated_detach_hook)
     deprecated_detach_hook ();
+
+  if (!was_non_stop_p)
+    restart_after_all_stop_detach (as_process_stratum_target (target_ref.get ()));
+
+  disable_commit_resumed.reset_and_commit ();
 }
 
 /* Disconnect from the current target without resuming it (leaving it
@@ -2911,20 +2798,15 @@ disconnect_command (const char *args, in
     deprecated_detach_hook ();
 }
 
-void 
-interrupt_target_1 (int all_threads)
-{
-  ptid_t ptid;
-
-  if (all_threads)
-    ptid = minus_one_ptid;
-  else
-    ptid = inferior_ptid;
+/* Stop PTID in the current target, and tag the PTID threads as having
+   been explicitly requested to stop.  PTID can be a thread, a
+   process, or minus_one_ptid, meaning all threads of all inferiors of
+   the current target.  */
 
-  if (non_stop)
-    target_stop (ptid);
-  else
-    target_interrupt ();
+static void
+stop_current_target_threads_ns (ptid_t ptid)
+{
+  target_stop (ptid);
 
   /* Tag the thread as having been explicitly requested to stop, so
      other parts of gdb know not to resume this thread automatically,
@@ -2932,8 +2814,36 @@ interrupt_target_1 (int all_threads)
      non-stop mode, as when debugging a multi-threaded application in
      all-stop mode, we will only get one stop event --- it's undefined
      which thread will report the event.  */
+  set_stop_requested (current_inferior ()->process_target (),
+		      ptid, 1);
+}
+
+/* See inferior.h.  */
+
+void
+interrupt_target_1 (bool all_threads)
+{
+  scoped_disable_commit_resumed disable_commit_resumed ("interrupting");
+
   if (non_stop)
-    set_stop_requested (ptid, 1);
+    {
+      if (all_threads)
+	{
+	  scoped_restore_current_thread restore_thread;
+
+	  for (inferior *inf : all_inferiors ())
+	    {
+	      switch_to_inferior_no_thread (inf);
+	      stop_current_target_threads_ns (minus_one_ptid);
+	    }
+	}
+      else
+	stop_current_target_threads_ns (inferior_ptid);
+    }
+  else
+    target_interrupt ();
+
+  disable_commit_resumed.reset_and_commit ();
 }
 
 /* interrupt [-a]
@@ -2989,21 +2899,13 @@ info_float_command (const char *args, in
 {
   struct frame_info *frame;
 
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("The program has no registers now."));
 
   frame = get_selected_frame (NULL);
   gdbarch_print_float_info (get_frame_arch (frame), gdb_stdout, frame, args);
 }
 
-static void
-unset_command (const char *args, int from_tty)
-{
-  printf_filtered (_("\"unset\" must be followed by the "
-		     "name of an unset subcommand.\n"));
-  help_list (unsetlist, "unset ", all_commands, gdb_stdout);
-}
-
 /* Implement `info proc' family of commands.  */
 
 static void
@@ -3121,8 +3023,9 @@ use \"set args\" without arguments.\n\
 \n\
 To start the inferior without using a shell, use \"set startup-with-shell off\"."
 
+void _initialize_infcmd ();
 void
-_initialize_infcmd (void)
+_initialize_infcmd ()
 {
   static struct cmd_list_element *info_proc_cmdlist;
   struct cmd_list_element *c = NULL;
@@ -3140,9 +3043,9 @@ is restored."),
 				     show_inferior_tty_command,
 				     &setlist, &showlist);
   cmd_name = "inferior-tty";
-  c = lookup_cmd (&cmd_name, setlist, "", -1, 1);
+  c = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1);
   gdb_assert (c != NULL);
-  add_alias_cmd ("tty", c, class_alias, 0, &cmdlist);
+  add_alias_cmd ("tty", c, class_run, 0, &cmdlist);
 
   cmd_name = "args";
   add_setshow_string_noescape_cmd (cmd_name, class_run,
@@ -3153,7 +3056,7 @@ Follow this command with any number of a
 				   set_args_command,
 				   show_args_command,
 				   &setlist, &showlist);
-  c = lookup_cmd (&cmd_name, setlist, "", -1, 1);
+  c = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1);
   gdb_assert (c != NULL);
   set_cmd_completer (c, filename_completer);
 
@@ -3172,7 +3075,7 @@ working directory."),
 				   set_cwd_command,
 				   show_cwd_command,
 				   &setlist, &showlist);
-  c = lookup_cmd (&cmd_name, setlist, "", -1, 1);
+  c = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1);
   gdb_assert (c != NULL);
   set_cmd_completer (c, filename_completer);
 
@@ -3183,9 +3086,9 @@ give the program being debugged.  With n
 environment to be given to the program."), &showlist);
   set_cmd_completer (c, noop_completer);
 
-  add_prefix_cmd ("unset", no_class, unset_command,
-		  _("Complement to certain \"set\" commands."),
-		  &unsetlist, "unset ", 0, &cmdlist);
+  add_basic_prefix_cmd ("unset", no_class,
+			_("Complement to certain \"set\" commands."),
+			&unsetlist, 0, &cmdlist);
 
   c = add_cmd ("environment", class_run, unset_environment_command, _("\
 Cancel environment variable VAR for the program.\n\
@@ -3222,7 +3125,7 @@ needed."),
 
   add_prefix_cmd ("kill", class_run, kill_command,
 		  _("Kill execution of program being debugged."),
-		  &killlist, "kill ", 0, &cmdlist);
+		  &killlist, 0, &cmdlist);
 
   add_com ("attach", class_run, attach_command, _("\
 Attach to a process or file outside of GDB.\n\
@@ -3241,7 +3144,7 @@ to specify the program, and to load its
 Detach a process or file previously attached.\n\
 If a process, it is no longer traced, and it continues its execution.  If\n\
 you were debugging a file, the file is closed and gdb no longer accesses it."),
-		  &detachlist, "detach ", 0, &cmdlist);
+		  &detachlist, 0, &cmdlist);
 
   add_com ("disconnect", class_run, disconnect_command, _("\
 Disconnect from a target.\n\
@@ -3275,48 +3178,54 @@ In a multi-threaded program the signal i
 the current thread only."));
   set_cmd_completer (c, signal_completer);
 
-  add_com ("stepi", class_run, stepi_command, _("\
+  cmd_list_element *stepi_cmd
+    = add_com ("stepi", class_run, stepi_command, _("\
 Step one instruction exactly.\n\
 Usage: stepi [N]\n\
 Argument N means step N times (or till program stops for another \
 reason)."));
-  add_com_alias ("si", "stepi", class_alias, 0);
+  add_com_alias ("si", stepi_cmd, class_run, 0);
 
-  add_com ("nexti", class_run, nexti_command, _("\
+  cmd_list_element *nexti_cmd
+   = add_com ("nexti", class_run, nexti_command, _("\
 Step one instruction, but proceed through subroutine calls.\n\
 Usage: nexti [N]\n\
 Argument N means step N times (or till program stops for another \
 reason)."));
-  add_com_alias ("ni", "nexti", class_alias, 0);
+  add_com_alias ("ni", nexti_cmd, class_run, 0);
 
-  add_com ("finish", class_run, finish_command, _("\
+  cmd_list_element *finish_cmd
+    = add_com ("finish", class_run, finish_command, _("\
 Execute until selected stack frame returns.\n\
 Usage: finish\n\
 Upon return, the value returned is printed and put in the value history."));
-  add_com_alias ("fin", "finish", class_run, 1);
+  add_com_alias ("fin", finish_cmd, class_run, 1);
 
-  add_com ("next", class_run, next_command, _("\
+  cmd_list_element *next_cmd
+    = add_com ("next", class_run, next_command, _("\
 Step program, proceeding through subroutine calls.\n\
 Usage: next [N]\n\
 Unlike \"step\", if the current source line calls a subroutine,\n\
 this command does not enter the subroutine, but instead steps over\n\
 the call, in effect treating it as a single source line."));
-  add_com_alias ("n", "next", class_run, 1);
+  add_com_alias ("n", next_cmd, class_run, 1);
 
-  add_com ("step", class_run, step_command, _("\
+  cmd_list_element *step_cmd
+    = add_com ("step", class_run, step_command, _("\
 Step program until it reaches a different source line.\n\
 Usage: step [N]\n\
 Argument N means step N times (or till program stops for another \
 reason)."));
-  add_com_alias ("s", "step", class_run, 1);
+  add_com_alias ("s", step_cmd, class_run, 1);
 
-  c = add_com ("until", class_run, until_command, _("\
+  cmd_list_element *until_cmd
+    = add_com ("until", class_run, until_command, _("\
 Execute until past the current line or past a LOCATION.\n\
 Execute until the program reaches a source line greater than the current\n\
 or a specified location (same args as break command) within the current \
 frame."));
-  set_cmd_completer (c, location_completer);
-  add_com_alias ("u", "until", class_run, 1);
+  set_cmd_completer (until_cmd, location_completer);
+  add_com_alias ("u", until_cmd, class_run, 1);
 
   c = add_com ("advance", class_run, advance_command, _("\
 Continue the program up to the given location (same form as args for break \
@@ -3324,15 +3233,17 @@ command).\n\
 Execution will also stop upon exit from the current stack frame."));
   set_cmd_completer (c, location_completer);
 
-  c = add_com ("jump", class_run, jump_command, _("\
+  cmd_list_element *jump_cmd
+    = add_com ("jump", class_run, jump_command, _("\
 Continue program being debugged at specified line or address.\n\
 Usage: jump LOCATION\n\
 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
 for an address to start at."));
-  set_cmd_completer (c, location_completer);
-  add_com_alias ("j", "jump", class_run, 1);
+  set_cmd_completer (jump_cmd, location_completer);
+  add_com_alias ("j", jump_cmd, class_run, 1);
 
-  add_com ("continue", class_run, continue_command, _("\
+  cmd_list_element *continue_cmd
+    = add_com ("continue", class_run, continue_command, _("\
 Continue program being debugged, after signal or breakpoint.\n\
 Usage: continue [N]\n\
 If proceeding from breakpoint, a number N may be used as an argument,\n\
@@ -3343,14 +3254,15 @@ If non-stop mode is enabled, continue on
 otherwise all the threads in the program are continued.  To \n\
 continue all stopped threads in non-stop mode, use the -a option.\n\
 Specifying -a and an ignore count simultaneously is an error."));
-  add_com_alias ("c", "cont", class_run, 1);
-  add_com_alias ("fg", "cont", class_run, 1);
+  add_com_alias ("c", continue_cmd, class_run, 1);
+  add_com_alias ("fg", continue_cmd, class_run, 1);
 
-  c = add_com ("run", class_run, run_command, _("\
+  cmd_list_element *run_cmd
+    = add_com ("run", class_run, run_command, _("\
 Start debugged program.\n"
 RUN_ARGS_HELP));
-  set_cmd_completer (c, filename_completer);
-  add_com_alias ("r", "run", class_run, 1);
+  set_cmd_completer (run_cmd, filename_completer);
+  add_com_alias ("r", run_cmd, class_run, 1);
 
   c = add_com ("start", class_run, start_command, _("\
 Start the debugged program stopping at the beginning of the main procedure.\n"
@@ -3368,13 +3280,14 @@ If non-stop mode is enabled, interrupt o
 otherwise all the threads in the program are stopped.  To \n\
 interrupt all running threads in non-stop mode, use the -a option."));
 
-  c = add_info ("registers", info_registers_command, _("\
+  cmd_list_element *info_registers_cmd
+    = add_info ("registers", info_registers_command, _("\
 List of integer registers and their contents, for selected stack frame.\n\
 One or more register names as argument means describe the given registers.\n\
 One or more register group names as argument means describe the registers\n\
 in the named register groups."));
-  add_info_alias ("r", "registers", 1);
-  set_cmd_completer (c, reg_or_group_completer);
+  add_info_alias ("r", info_registers_cmd, 1);
+  set_cmd_completer (info_registers_cmd, reg_or_group_completer);
 
   c = add_info ("all-registers", info_all_registers_command, _("\
 List of all registers and their contents, for selected stack frame.\n\
@@ -3396,7 +3309,7 @@ in the named register groups."));
 		  _("\
 Show additional information about a process.\n\
 Specify any process id, or use the program being debugged by default."),
-		  &info_proc_cmdlist, "info proc ",
+		  &info_proc_cmdlist,
 		  1/*allow-unknown*/, &infolist);
 
   add_cmd ("mappings", class_info, info_proc_cmd_mappings, _("\
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inferior.c ./gdb/inferior.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inferior.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inferior.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Multi-process control for GDB, the GNU debugger.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -31,7 +31,6 @@
 #include "symfile.h"
 #include "gdbsupport/environ.h"
 #include "cli/cli-utils.h"
-#include "continuations.h"
 #include "arch-utils.h"
 #include "target-descriptions.h"
 #include "readline/tilde.h"
@@ -51,12 +50,12 @@ bool print_inferior_events = true;
 /* The Current Inferior.  This is a strong reference.  I.e., whenever
    an inferior is the current inferior, its refcount is
    incremented.  */
-static struct inferior *current_inferior_ = NULL;
+static inferior_ref current_inferior_;
 
 struct inferior*
 current_inferior (void)
 {
-  return current_inferior_;
+  return current_inferior_.get ();
 }
 
 void
@@ -65,9 +64,7 @@ set_current_inferior (struct inferior *i
   /* There's always an inferior.  */
   gdb_assert (inf != NULL);
 
-  inf->incref ();
-  current_inferior_->decref ();
-  current_inferior_ = inf;
+  current_inferior_ = inferior_ref::new_reference (inf);
 }
 
 private_inferior::~private_inferior () = default;
@@ -76,10 +73,8 @@ inferior::~inferior ()
 {
   inferior *inf = this;
 
-  discard_all_inferior_continuations (inf);
+  m_continuations.clear ();
   inferior_free_data (inf);
-  xfree (inf->args);
-  xfree (inf->terminal);
   target_desc_info_free (inf->tdesc_info);
 }
 
@@ -90,6 +85,40 @@ inferior::inferior (int pid_)
     registry_data ()
 {
   inferior_alloc_data (this);
+
+  m_target_stack.push (get_dummy_target ());
+}
+
+void
+inferior::set_tty (const char *terminal_name)
+{
+  if (terminal_name != nullptr && *terminal_name != '\0')
+    m_terminal = make_unique_xstrdup (terminal_name);
+  else
+    m_terminal = NULL;
+}
+
+const char *
+inferior::tty ()
+{
+  return m_terminal.get ();
+}
+
+void
+inferior::add_continuation (std::function<void ()> &&cont)
+{
+  m_continuations.emplace_front (std::move (cont));
+}
+
+void
+inferior::do_all_continuations ()
+{
+  while (!m_continuations.empty ())
+    {
+      auto iter = m_continuations.begin ();
+      (*iter) ();
+      m_continuations.erase (iter);
+    }
 }
 
 struct inferior *
@@ -159,8 +188,8 @@ delete_inferior (struct inferior *todel)
   gdb::observers::inferior_removed.notify (inf);
 
   /* If this program space is rendered useless, remove it. */
-  if (program_space_empty_p (inf->pspace))
-    delete_program_space (inf->pspace);
+  if (inf->pspace->empty ())
+    delete inf->pspace;
 
   delete inf;
 }
@@ -247,6 +276,7 @@ inferior_appeared (struct inferior *inf,
 {
   /* If this is the first inferior with threads, reset the global
      thread id.  */
+  delete_exited_threads ();
   if (!any_thread_p ())
     init_thread_list ();
 
@@ -257,13 +287,6 @@ inferior_appeared (struct inferior *inf,
   gdb::observers::inferior_appeared.notify (inf);
 }
 
-void
-discard_all_inferiors (void)
-{
-  for (inferior *inf : all_non_exited_inferiors ())
-    exit_inferior_silent (inf);
-}
-
 struct inferior *
 find_inferior_id (int num)
 {
@@ -275,14 +298,14 @@ find_inferior_id (int num)
 }
 
 struct inferior *
-find_inferior_pid (int pid)
+find_inferior_pid (process_stratum_target *targ, int pid)
 {
   /* Looking for inferior pid == 0 is always wrong, and indicative of
      a bug somewhere else.  There may be more than one with pid == 0,
      for instance.  */
   gdb_assert (pid != 0);
 
-  for (inferior *inf : all_inferiors ())
+  for (inferior *inf : all_inferiors (targ))
     if (inf->pid == pid)
       return inf;
 
@@ -292,9 +315,9 @@ find_inferior_pid (int pid)
 /* See inferior.h */
 
 struct inferior *
-find_inferior_ptid (ptid_t ptid)
+find_inferior_ptid (process_stratum_target *targ, ptid_t ptid)
 {
-  return find_inferior_pid (ptid.pid ());
+  return find_inferior_pid (targ, ptid.pid ());
 }
 
 /* See inferior.h.  */
@@ -314,17 +337,6 @@ find_inferior_for_program_space (struct
   return NULL;
 }
 
-struct inferior *
-iterate_over_inferiors (int (*callback) (struct inferior *, void *),
-			void *data)
-{
-  for (inferior *inf : all_inferiors_safe ())
-    if ((*callback) (inf, data))
-      return inf;
-
-  return NULL;
-}
-
 int
 have_inferiors (void)
 {
@@ -339,12 +351,12 @@ have_inferiors (void)
    in the middle of a 'mourn' operation.  */
 
 int
-number_of_live_inferiors (void)
+number_of_live_inferiors (process_stratum_target *proc_target)
 {
   int num_inf = 0;
 
-  for (inferior *inf : all_non_exited_inferiors ())
-    if (target_has_execution_1 (ptid_t (inf->pid)))
+  for (inferior *inf : all_non_exited_inferiors (proc_target))
+    if (inf->has_execution ())
       for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
 	{
 	  /* Found a live thread in this inferior, go to the next
@@ -361,7 +373,7 @@ number_of_live_inferiors (void)
 int
 have_live_inferiors (void)
 {
-  return number_of_live_inferiors () > 0;
+  return number_of_live_inferiors (NULL) > 0;
 }
 
 /* Prune away any unused inferiors, and then prune away no longer used
@@ -416,7 +428,7 @@ void
 print_selected_inferior (struct ui_out *uiout)
 {
   struct inferior *inf = current_inferior ();
-  const char *filename = inf->pspace->pspace_exec_filename;
+  const char *filename = inf->pspace->exec_filename.get ();
 
   if (filename == NULL)
     filename = _("<noexec>");
@@ -425,6 +437,31 @@ print_selected_inferior (struct ui_out *
 		  inf->num, inferior_pid_to_str (inf->pid).c_str (), filename);
 }
 
+/* Helper for print_inferior.  Returns the 'connection-id' string for
+   PROC_TARGET.  */
+
+static std::string
+uiout_field_connection (process_stratum_target *proc_target)
+{
+  if (proc_target == NULL)
+    {
+      return {};
+    }
+  else if (proc_target->connection_string () != NULL)
+    {
+      return string_printf ("%d (%s %s)",
+			    proc_target->connection_number,
+			    proc_target->shortname (),
+			    proc_target->connection_string ());
+    }
+  else
+    {
+      return string_printf ("%d (%s)",
+			    proc_target->connection_number,
+			    proc_target->shortname ());
+    }
+}
+
 /* Prints the list of inferiors and their details on UIOUT.  This is a
    version of 'info_inferior_command' suitable for use from MI.
 
@@ -436,6 +473,7 @@ static void
 print_inferior (struct ui_out *uiout, const char *requested_inferiors)
 {
   int inf_count = 0;
+  size_t connection_id_len = 20;
 
   /* Compute number of inferiors we will print.  */
   for (inferior *inf : all_inferiors ())
@@ -443,6 +481,10 @@ print_inferior (struct ui_out *uiout, co
       if (!number_is_in_list (requested_inferiors, inf->num))
 	continue;
 
+      std::string conn = uiout_field_connection (inf->process_target ());
+      if (connection_id_len < conn.size ())
+	connection_id_len = conn.size ();
+
       ++inf_count;
     }
 
@@ -452,13 +494,20 @@ print_inferior (struct ui_out *uiout, co
       return;
     }
 
-  ui_out_emit_table table_emitter (uiout, 4, inf_count, "inferiors");
+  ui_out_emit_table table_emitter (uiout, 5, inf_count, "inferiors");
   uiout->table_header (1, ui_left, "current", "");
   uiout->table_header (4, ui_left, "number", "Num");
   uiout->table_header (17, ui_left, "target-id", "Description");
+  uiout->table_header (connection_id_len, ui_left,
+		       "connection-id", "Connection");
   uiout->table_header (17, ui_left, "exec", "Executable");
 
   uiout->table_body ();
+
+  /* Restore the current thread after the loop because we switch the
+     inferior in the loop.  */
+  scoped_restore_current_pspace_and_thread restore_pspace_thread;
+  inferior *current_inf = current_inferior ();
   for (inferior *inf : all_inferiors ())
     {
       if (!number_is_in_list (requested_inferiors, inf->num))
@@ -466,17 +515,24 @@ print_inferior (struct ui_out *uiout, co
 
       ui_out_emit_tuple tuple_emitter (uiout, NULL);
 
-      if (inf == current_inferior ())
+      if (inf == current_inf)
 	uiout->field_string ("current", "*");
       else
 	uiout->field_skip ("current");
 
       uiout->field_signed ("number", inf->num);
 
+      /* Because target_pid_to_str uses the current inferior,
+	 switch the inferior.  */
+      switch_to_inferior_no_thread (inf);
+
       uiout->field_string ("target-id", inferior_pid_to_str (inf->pid));
 
-      if (inf->pspace->pspace_exec_filename != NULL)
-	uiout->field_string ("exec", inf->pspace->pspace_exec_filename);
+      std::string conn = uiout_field_connection (inf->process_target ());
+      uiout->field_string ("connection-id", conn);
+
+      if (inf->pspace->exec_filename != nullptr)
+	uiout->field_string ("exec", inf->pspace->exec_filename.get ());
       else
 	uiout->field_skip ("exec");
 
@@ -504,6 +560,8 @@ detach_inferior_command (const char *arg
   if (!args || !*args)
     error (_("Requires argument (inferior id(s) to detach)"));
 
+  scoped_restore_current_thread restore_thread;
+
   number_or_range_parser parser (args);
   while (!parser.finished ())
     {
@@ -541,6 +599,8 @@ kill_inferior_command (const char *args,
   if (!args || !*args)
     error (_("Requires argument (inferior id(s) to kill)"));
 
+  scoped_restore_current_thread restore_thread;
+
   number_or_range_parser parser (args);
   while (!parser.finished ())
     {
@@ -574,42 +634,66 @@ kill_inferior_command (const char *args,
   bfd_cache_close_all ();
 }
 
+/* See inferior.h.  */
+
+void
+switch_to_inferior_no_thread (inferior *inf)
+{
+  set_current_inferior (inf);
+  switch_to_no_thread ();
+  set_current_program_space (inf->pspace);
+}
+
 static void
 inferior_command (const char *args, int from_tty)
 {
   struct inferior *inf;
   int num;
 
-  num = parse_and_eval_long (args);
+  if (args == nullptr)
+    {
+      inf = current_inferior ();
+      gdb_assert (inf != nullptr);
+      const char *filename = inf->pspace->exec_filename.get ();
+
+      if (filename == nullptr)
+	filename = _("<noexec>");
+
+      printf_filtered (_("[Current inferior is %d [%s] (%s)]\n"),
+		       inf->num, inferior_pid_to_str (inf->pid).c_str (),
+		       filename);
+    }
+  else
+    {
+      num = parse_and_eval_long (args);
 
-  inf = find_inferior_id (num);
-  if (inf == NULL)
-    error (_("Inferior ID %d not known."), num);
+      inf = find_inferior_id (num);
+      if (inf == NULL)
+	error (_("Inferior ID %d not known."), num);
 
-  if (inf->pid != 0)
-    {
-      if (inf != current_inferior ())
+      if (inf->pid != 0)
 	{
-	  thread_info *tp = any_thread_of_inferior (inf);
-	  if (tp == NULL)
-	    error (_("Inferior has no threads."));
+	  if (inf != current_inferior ())
+	    {
+	      thread_info *tp = any_thread_of_inferior (inf);
+	      if (tp == NULL)
+		error (_("Inferior has no threads."));
 
-	  switch_to_thread (tp);
-	}
+	      switch_to_thread (tp);
+	    }
 
-      gdb::observers::user_selected_context_changed.notify
-	(USER_SELECTED_INFERIOR
-	 | USER_SELECTED_THREAD
-	 | USER_SELECTED_FRAME);
-    }
-  else
-    {
-      set_current_inferior (inf);
-      switch_to_no_thread ();
-      set_current_program_space (inf->pspace);
+	  gdb::observers::user_selected_context_changed.notify
+	    (USER_SELECTED_INFERIOR
+	     | USER_SELECTED_THREAD
+	     | USER_SELECTED_FRAME);
+	}
+      else
+	{
+	  switch_to_inferior_no_thread (inf);
 
-      gdb::observers::user_selected_context_changed.notify
-	(USER_SELECTED_INFERIOR);
+	  gdb::observers::user_selected_context_changed.notify
+	    (USER_SELECTED_INFERIOR);
+	}
     }
 }
 
@@ -663,7 +747,6 @@ add_inferior_with_spaces (void)
   struct address_space *aspace;
   struct program_space *pspace;
   struct inferior *inf;
-  struct gdbarch_info info;
 
   /* If all inferiors share an address space on this system, this
      doesn't really return a new address space; otherwise, it
@@ -676,7 +759,7 @@ add_inferior_with_spaces (void)
 
   /* Setup the inferior's initial arch, based on information obtained
      from the global "set ..." options.  */
-  gdbarch_info_init (&info);
+  gdbarch_info info;
   inf->gdbarch = gdbarch_find_by_info (info);
   /* The "set ..." options reject invalid settings, so we should
      always have a valid arch by now.  */
@@ -685,7 +768,41 @@ add_inferior_with_spaces (void)
   return inf;
 }
 
-/* add-inferior [-copies N] [-exec FILENAME]  */
+/* Switch to inferior NEW_INF, a new inferior, and unless
+   NO_CONNECTION is true, push the process_stratum_target of ORG_INF
+   to NEW_INF.  */
+
+static void
+switch_to_inferior_and_push_target (inferior *new_inf,
+				    bool no_connection, inferior *org_inf)
+{
+  process_stratum_target *proc_target = org_inf->process_target ();
+
+  /* Switch over temporarily, while reading executable and
+     symbols.  */
+  switch_to_inferior_no_thread (new_inf);
+
+  /* Reuse the target for new inferior.  */
+  if (!no_connection && proc_target != NULL)
+    {
+      new_inf->push_target (proc_target);
+      if (proc_target->connection_string () != NULL)
+	printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
+			 new_inf->num,
+			 proc_target->connection_number,
+			 proc_target->shortname (),
+			 proc_target->connection_string ());
+      else
+	printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
+			 new_inf->num,
+			 proc_target->connection_number,
+			 proc_target->shortname ());
+    }
+  else
+    printf_filtered (_("Added inferior %d\n"), new_inf->num);
+}
+
+/* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
 
 static void
 add_inferior_command (const char *args, int from_tty)
@@ -693,6 +810,7 @@ add_inferior_command (const char *args,
   int i, copies = 1;
   gdb::unique_xmalloc_ptr<char> exec;
   symfile_add_flags add_flags = 0;
+  bool no_connection = false;
 
   if (from_tty)
     add_flags |= SYMFILE_VERBOSE;
@@ -712,6 +830,8 @@ add_inferior_command (const char *args,
 		    error (_("No argument to -copies"));
 		  copies = parse_and_eval_long (*argv);
 		}
+	      else if (strcmp (*argv, "-no-connection") == 0)
+		no_connection = true;
 	      else if (strcmp (*argv, "-exec") == 0)
 		{
 		  ++argv;
@@ -725,35 +845,32 @@ add_inferior_command (const char *args,
 	}
     }
 
+  inferior *orginf = current_inferior ();
+
   scoped_restore_current_pspace_and_thread restore_pspace_thread;
 
   for (i = 0; i < copies; ++i)
     {
-      struct inferior *inf = add_inferior_with_spaces ();
+      inferior *inf = add_inferior_with_spaces ();
 
-      printf_filtered (_("Added inferior %d\n"), inf->num);
+      switch_to_inferior_and_push_target (inf, no_connection, orginf);
 
       if (exec != NULL)
 	{
-	  /* Switch over temporarily, while reading executable and
-	     symbols.q.  */
-	  set_current_program_space (inf->pspace);
-	  set_current_inferior (inf);
-	  switch_to_no_thread ();
-
 	  exec_file_attach (exec.get (), from_tty);
 	  symbol_file_add_main (exec.get (), add_flags);
 	}
     }
 }
 
-/* clone-inferior [-copies N] [ID] */
+/* clone-inferior [-copies N] [ID] [-no-connection] */
 
 static void
 clone_inferior_command (const char *args, int from_tty)
 {
   int i, copies = 1;
   struct inferior *orginf = NULL;
+  bool no_connection = false;
 
   if (args)
     {
@@ -774,6 +891,8 @@ clone_inferior_command (const char *args
 		  if (copies < 0)
 		    error (_("Invalid copies number"));
 		}
+	      else if (strcmp (*argv, "-no-connection") == 0)
+		no_connection = true;
 	    }
 	  else
 	    {
@@ -819,15 +938,13 @@ clone_inferior_command (const char *args
       inf->aspace = pspace->aspace;
       inf->gdbarch = orginf->gdbarch;
 
+      switch_to_inferior_and_push_target (inf, no_connection, orginf);
+
       /* If the original inferior had a user specified target
 	 description, make the clone use it too.  */
       if (target_desc_info_from_user_p (inf->tdesc_info))
 	copy_inferior_target_desc_info (inf, orginf);
 
-      printf_filtered (_("Added inferior %d.\n"), inf->num);
-
-      set_current_inferior (inf);
-      switch_to_no_thread ();
       clone_program_space (pspace, orginf->pspace);
     }
 }
@@ -873,8 +990,7 @@ initialize_inferiors (void)
      can only allocate an inferior when all those modules have done
      that.  Do this after initialize_progspace, due to the
      current_program_space reference.  */
-  current_inferior_ = add_inferior_silent (0);
-  current_inferior_->incref ();
+  set_current_inferior (add_inferior_silent (0));
   current_inferior_->pspace = current_program_space;
   current_inferior_->aspace = current_program_space->aspace;
   /* The architecture will be initialized shortly, by
@@ -888,10 +1004,13 @@ By default all inferiors are displayed."
 
   c = add_com ("add-inferior", no_class, add_inferior_command, _("\
 Add a new inferior.\n\
-Usage: add-inferior [-copies N] [-exec FILENAME]\n\
+Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
 N is the optional number of inferiors to add, default is 1.\n\
 FILENAME is the file name of the executable to use\n\
-as main program."));
+as main program.\n\
+By default, the new inferior inherits the current inferior's connection.\n\
+If -no-connection is specified, the new inferior begins with\n\
+no target connection yet."));
   set_cmd_completer (c, filename_completer);
 
   add_com ("remove-inferiors", no_class, remove_inferior_command, _("\
@@ -900,11 +1019,14 @@ Usage: remove-inferiors ID..."));
 
   add_com ("clone-inferior", no_class, clone_inferior_command, _("\
 Clone inferior ID.\n\
-Usage: clone-inferior [-copies N] [ID]\n\
-Add N copies of inferior ID.  The new inferior has the same\n\
+Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
+Add N copies of inferior ID.  The new inferiors have the same\n\
 executable loaded as the copied inferior.  If -copies is not specified,\n\
 adds 1 copy.  If ID is not specified, it is the current inferior\n\
-that is cloned."));
+that is cloned.\n\
+By default, the new inferiors inherit the copied inferior's connection.\n\
+If -no-connection is specified, the new inferiors begin with\n\
+no target connection yet."));
 
   add_cmd ("inferiors", class_run, detach_inferior_command, _("\
 Detach from inferior ID (or list of IDS).\n\
@@ -923,12 +1045,12 @@ The new inferior ID must be currently kn
 	   &cmdlist);
 
   add_setshow_boolean_cmd ("inferior-events", no_class,
-         &print_inferior_events, _("\
+	 &print_inferior_events, _("\
 Set printing of inferior events (such as inferior start and exit)."), _("\
 Show printing of inferior events (such as inferior start and exit)."), NULL,
-         NULL,
-         show_print_inferior_events,
-         &setprintlist, &showprintlist);
+	 NULL,
+	 show_print_inferior_events,
+	 &setprintlist, &showprintlist);
 
   create_internalvar_type_lazy ("_inferior", &inferior_funcs, NULL);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inferior.h ./gdb/inferior.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inferior.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inferior.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Variables that describe the inferior process running under GDB:
    Where it is, why it stopped, and how to step it.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,6 +21,9 @@
 #if !defined (INFERIOR_H)
 #define INFERIOR_H 1
 
+#include <exception>
+#include <list>
+
 struct target_waitstatus;
 struct frame_info;
 struct ui_file;
@@ -30,7 +33,6 @@ struct regcache;
 struct ui_out;
 struct terminal_info;
 struct target_desc_info;
-struct continuation;
 struct inferior;
 struct thread_info;
 
@@ -52,10 +54,14 @@ struct thread_info;
 #include "symfile-add-flags.h"
 #include "gdbsupport/refcounted-object.h"
 #include "gdbsupport/forward-scope-exit.h"
+#include "gdbsupport/gdb_unique_ptr.h"
 
 #include "gdbsupport/common-inferior.h"
 #include "gdbthread.h"
 
+#include "process-stratum-target.h"
+#include "displaced-stepping.h"
+
 struct infcall_suspend_state;
 struct infcall_control_state;
 
@@ -77,7 +83,13 @@ struct infcall_suspend_state_deleter
 	/* If we are restoring the inferior state due to an exception,
 	   some error message will be printed.  So, only warn the user
 	   when we cannot restore during normal execution.  */
-	if (!std::uncaught_exception ())
+	bool unwinding;
+#if __cpp_lib_uncaught_exceptions
+	unwinding = std::uncaught_exceptions () > 0;
+#else
+	unwinding = std::uncaught_exception ();
+#endif
+	if (!unwinding)
 	  warning (_("Failed to restore inferior state: %s"), e.what ());
       }
   }
@@ -115,11 +127,6 @@ extern void set_sigint_trap (void);
 
 extern void clear_sigint_trap (void);
 
-/* Set/get file name for default use for standard in/out in the inferior.  */
-
-extern void set_inferior_io_terminal (const char *terminal_name);
-extern const char *get_inferior_io_terminal (void);
-
 /* Collected pid, tid, etc. of the debugged inferior.  When there's
    no inferior, inferior_ptid.pid () will be 0.  */
 
@@ -182,8 +189,6 @@ extern void child_interrupt (struct targ
    STARTUP_INFERIOR.  */
 extern ptid_t gdb_startup_inferior (pid_t pid, int num_traps);
 
-extern char *construct_inferior_arguments (int, char **);
-
 /* From infcmd.c */
 
 /* Initial inferior setup.  Determines the exec file is not yet known,
@@ -192,7 +197,7 @@ extern char *construct_inferior_argument
 
 extern void setup_inferior (int from_tty);
 
-extern void post_create_inferior (struct target_ops *, int);
+extern void post_create_inferior (int from_tty);
 
 extern void attach_command (const char *, int);
 
@@ -206,14 +211,14 @@ extern void registers_info (const char *
 
 extern void continue_1 (int all_threads);
 
-extern void interrupt_target_1 (int all_threads);
+extern void interrupt_target_1 (bool all_threads);
 
 using delete_longjmp_breakpoint_cleanup
   = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint);
 
 extern void detach_command (const char *, int);
 
-extern void notice_new_inferior (struct thread_info *, int, int);
+extern void notice_new_inferior (struct thread_info *, bool, int);
 
 extern struct value *get_return_value (struct value *function,
 				       struct type *value_type);
@@ -308,6 +313,10 @@ extern inferior *current_inferior ();
 
 extern void set_current_inferior (inferior *);
 
+/* Switch inferior (and program space) to INF, and switch to no thread
+   selected.  */
+extern void switch_to_inferior_no_thread (inferior *inf);
+
 /* GDB represents the state of each program execution with an object
    called an inferior.  An inferior typically corresponds to a process
    but is more general and applies also to targets that do not have a
@@ -339,6 +348,45 @@ public:
   /* Returns true if we can delete this inferior.  */
   bool deletable () const { return refcount () == 0; }
 
+  /* Push T in this inferior's target stack.  */
+  void push_target (struct target_ops *t)
+  { m_target_stack.push (t); }
+
+  /* An overload that deletes the target on failure.  */
+  void push_target (target_ops_up &&t)
+  {
+    m_target_stack.push (t.get ());
+    t.release ();
+  }
+
+  /* Unpush T from this inferior's target stack.  */
+  int unpush_target (struct target_ops *t)
+  { return m_target_stack.unpush (t); }
+
+  /* Returns true if T is pushed in this inferior's target stack.  */
+  bool target_is_pushed (target_ops *t)
+  { return m_target_stack.is_pushed (t); }
+
+  /* Find the target beneath T in this inferior's target stack.  */
+  target_ops *find_target_beneath (const target_ops *t)
+  { return m_target_stack.find_beneath (t); }
+
+  /* Return the target at the top of this inferior's target stack.  */
+  target_ops *top_target ()
+  { return m_target_stack.top (); }
+
+  /* Return the target at process_stratum level in this inferior's
+     target stack.  */
+  struct process_stratum_target *process_target ()
+  { return (process_stratum_target *) m_target_stack.at (process_stratum); }
+
+  /* Return the target at STRATUM in this inferior's target stack.  */
+  target_ops *target_at (enum strata stratum)
+  { return m_target_stack.at (stratum); }
+
+  bool has_execution ()
+  { return target_has_execution (this); }
+
   /* Pointer to next inferior in singly-linked list of inferiors.  */
   struct inferior *next = NULL;
 
@@ -374,6 +422,22 @@ public:
   inline safe_inf_threads_range threads_safe ()
   { return safe_inf_threads_range (this->thread_list); }
 
+  /* Continuations-related methods.  A continuation is an std::function
+     to be called to finish the execution of a command when running
+     GDB asynchronously.  A continuation is executed after any thread
+     of this inferior stops.  Continuations are used by the attach
+     command and the remote target when a new inferior is detected.  */
+  void add_continuation (std::function<void ()> &&cont);
+  void do_all_continuations ();
+
+  /* Set/get file name for default use for standard in/out in the
+     inferior.  On Unix systems, we try to make TERMINAL_NAME the
+     inferior's controlling terminal.  If TERMINAL_NAME is nullptr or
+     the empty string, then the inferior inherits GDB's terminal (or
+     GDBserver's if spawning a remote process).  */
+  void set_tty (const char *terminal_name);
+  const char *tty ();
+
   /* Convenient handle (GDB inferior id).  Unique across all
      inferiors.  */
   int num = 0;
@@ -404,7 +468,7 @@ public:
   struct program_space *pspace = NULL;
 
   /* The arguments string to use when running.  */
-  char *args = NULL;
+  gdb::unique_xmalloc_ptr<char> args;
 
   /* The size of elements in argv.  */
   int argc = 0;
@@ -419,9 +483,6 @@ public:
      this inferior.  */
   gdb::unique_xmalloc_ptr<char> cwd;
 
-  /* The name of terminal device to use for I/O.  */
-  char *terminal = NULL;
-
   /* The terminal state as set by the last target_terminal::terminal_*
      call.  */
   target_terminal_state terminal_state = target_terminal_state::is_ours;
@@ -455,17 +516,16 @@ public:
   /* True if we're in the process of detaching from this inferior.  */
   bool detaching = false;
 
-  /* What is left to do for an execution command after any thread of
-     this inferior stops.  For continuations associated with a
-     specific thread, see `struct thread_info'.  */
-  continuation *continuations = NULL;
-
   /* True if setup_inferior wasn't called for this inferior yet.
      Until that is done, we must not access inferior memory or
      registers, as we haven't determined the target
      architecture/description.  */
   bool needs_setup = false;
 
+  /* True when we are reading the library list of the inferior during an
+     attach or handling a fork child.  */
+  bool in_initial_library_scan = false;
+
   /* Private data used by the target vector implementation.  */
   std::unique_ptr<private_inferior> priv;
 
@@ -500,6 +560,16 @@ public:
 
   /* Per inferior data-pointers required by other GDB modules.  */
   REGISTRY_FIELDS;
+
+private:
+  /* The inferior's target stack.  */
+  target_stack m_target_stack;
+
+  /* The name of terminal device to use for I/O.  */
+  gdb::unique_xmalloc_ptr<char> m_terminal;
+
+  /* The list of continuations.  */
+  std::list<std::function<void ()>> m_continuations;
 };
 
 /* Keep a registry of per-inferior data-pointers required by other GDB
@@ -530,14 +600,14 @@ extern void exit_inferior_num_silent (in
 
 extern void inferior_appeared (struct inferior *inf, int pid);
 
-/* Get rid of all inferiors.  */
-extern void discard_all_inferiors (void);
-
-/* Search function to lookup an inferior by target 'pid'.  */
-extern struct inferior *find_inferior_pid (int pid);
-
-/* Search function to lookup an inferior whose pid is equal to 'ptid.pid'. */
-extern struct inferior *find_inferior_ptid (ptid_t ptid);
+/* Search function to lookup an inferior of TARG by target 'pid'.  */
+extern struct inferior *find_inferior_pid (process_stratum_target *targ,
+					   int pid);
+
+/* Search function to lookup an inferior of TARG whose pid is equal to
+   'ptid.pid'. */
+extern struct inferior *find_inferior_ptid (process_stratum_target *targ,
+					    ptid_t ptid);
 
 /* Search function to lookup an inferior by GDB 'num'.  */
 extern struct inferior *find_inferior_id (int num);
@@ -547,25 +617,12 @@ extern struct inferior *find_inferior_id
 extern struct inferior *
   find_inferior_for_program_space (struct program_space *pspace);
 
-/* Inferior iterator function.
-
-   Calls a callback function once for each inferior, so long as the
-   callback function returns false.  If the callback function returns
-   true, the iteration will end and the current inferior will be
-   returned.  This can be useful for implementing a search for a
-   inferior with arbitrary attributes, or for applying some operation
-   to every inferior.
-
-   It is safe to delete the iterated inferior from the callback.  */
-extern struct inferior *iterate_over_inferiors (int (*) (struct inferior *,
-							 void *),
-						void *);
-
 /* Returns true if the inferior list is not empty.  */
 extern int have_inferiors (void);
 
-/* Returns the number of live inferiors (real live processes).  */
-extern int number_of_live_inferiors (void);
+/* Returns the number of live inferiors running on PROC_TARGET (real
+   live processes with execution).  */
+extern int number_of_live_inferiors (process_stratum_target *proc_target);
 
 /* Returns true if there are any live inferiors in the inferior list
    (not cores, not executables, real live processes).  */
@@ -622,18 +679,18 @@ all_inferiors_safe ()
 */
 
 inline all_inferiors_range
-all_inferiors ()
+all_inferiors (process_stratum_target *proc_target = nullptr)
 {
-  return {};
+  return all_inferiors_range (proc_target);
 }
 
 /* Return a range that can be used to walk over all inferiors with PID
    not zero, with range-for.  */
 
 inline all_non_exited_inferiors_range
-all_non_exited_inferiors ()
+all_non_exited_inferiors (process_stratum_target *proc_target = nullptr)
 {
-  return {};
+  return all_non_exited_inferiors_range (proc_target);
 }
 
 /* Prune away automatically added inferiors that aren't required
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inferior-iter.h ./gdb/inferior-iter.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inferior-iter.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inferior-iter.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Inferior iterators and ranges for GDB, the GNU debugger.
 
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+   Copyright (C) 2018-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,18 +36,23 @@ public:
   typedef int difference_type;
 
   /* Create an iterator pointing at HEAD.  */
-  explicit all_inferiors_iterator (inferior *head)
-    : m_inf (head)
-  {}
+  all_inferiors_iterator (process_stratum_target *proc_target, inferior *head)
+    : m_proc_target (proc_target)
+  {
+    /* Advance M_INF to the first inferior's position.  */
+    for (m_inf = head; m_inf != NULL; m_inf = m_inf->next)
+      if (m_inf_matches ())
+	return;
+  }
 
   /* Create a one-past-end iterator.  */
   all_inferiors_iterator ()
-    : m_inf (nullptr)
+    : m_proc_target (nullptr), m_inf (nullptr)
   {}
 
   all_inferiors_iterator &operator++ ()
   {
-    m_inf = m_inf->next;
+    advance ();
     return *this;
   }
 
@@ -58,6 +63,30 @@ public:
   { return m_inf != other.m_inf; }
 
 private:
+  /* Advance to next inferior, skipping filtered inferiors.  */
+  void advance ()
+  {
+    /* The loop below is written in the natural way as-if we'd always
+       start at the beginning of the inferior list.  This
+       fast-forwards the algorithm to the actual current position.  */
+    goto start;
+
+    while (m_inf != NULL)
+      {
+	if (m_inf_matches ())
+	  return;
+      start:
+	m_inf = m_inf->next;
+      }
+  }
+
+  bool m_inf_matches ()
+  {
+    return (m_proc_target == nullptr
+	    || m_proc_target == m_inf->process_target ());
+  }
+
+  process_stratum_target *m_proc_target;
   inferior *m_inf;
 };
 
@@ -80,10 +109,17 @@ using all_non_exited_inferiors_iterator
    inferiors with range-for.  */
 struct all_inferiors_range
 {
+  all_inferiors_range (process_stratum_target *proc_target = nullptr)
+    : m_filter_target (proc_target)
+  {}
+
   all_inferiors_iterator begin () const
-  { return all_inferiors_iterator (inferior_list); }
+  { return all_inferiors_iterator (m_filter_target, inferior_list); }
   all_inferiors_iterator end () const
   { return all_inferiors_iterator (); }
+
+private:
+  process_stratum_target *m_filter_target;
 };
 
 /* Iterate over all inferiors, safely.  */
@@ -97,10 +133,26 @@ using all_inferiors_safe_iterator
 
 struct all_inferiors_safe_range
 {
+  explicit all_inferiors_safe_range (process_stratum_target *filter_target)
+    : m_filter_target (filter_target)
+  {}
+
+  all_inferiors_safe_range ()
+    : m_filter_target (nullptr)
+  {}
+
   all_inferiors_safe_iterator begin () const
-  { return all_inferiors_safe_iterator (inferior_list); }
+  {
+    return (all_inferiors_safe_iterator
+	    (all_inferiors_iterator (m_filter_target, inferior_list)));
+  }
+
   all_inferiors_safe_iterator end () const
   { return all_inferiors_safe_iterator (); }
+
+private:
+  /* The filter.  */
+  process_stratum_target *m_filter_target;
 };
 
 /* A range adapter that makes it possible to iterate over all
@@ -108,10 +160,22 @@ struct all_inferiors_safe_range
 
 struct all_non_exited_inferiors_range
 {
+  explicit all_non_exited_inferiors_range (process_stratum_target *filter_target)
+    : m_filter_target (filter_target)
+  {}
+
+  all_non_exited_inferiors_range ()
+    : m_filter_target (nullptr)
+  {}
+
   all_non_exited_inferiors_iterator begin () const
-  { return all_non_exited_inferiors_iterator (inferior_list); }
+  { return all_non_exited_inferiors_iterator (m_filter_target, inferior_list); }
   all_non_exited_inferiors_iterator end () const
   { return all_non_exited_inferiors_iterator (); }
+
+private:
+  /* The filter.  */
+  process_stratum_target *m_filter_target;
 };
 
 #endif /* !defined (INFERIOR_ITER_H) */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-loop.c ./gdb/inf-loop.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-loop.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inf-loop.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Handling of inferior events for the event loop for GDB, the GNU debugger.
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
 
    This file is part of GDB.
@@ -20,13 +20,12 @@
 #include "defs.h"
 #include "inferior.h"
 #include "infrun.h"
-#include "event-loop.h"
+#include "gdbsupport/event-loop.h"
 #include "event-top.h"
 #include "inf-loop.h"
 #include "remote.h"
 #include "language.h"
 #include "gdbthread.h"
-#include "continuations.h"
 #include "interps.h"
 #include "top.h"
 #include "observable.h"
@@ -34,13 +33,12 @@
 /* General function to handle events in the inferior.  */
 
 void
-inferior_event_handler (enum inferior_event_type event_type, 
-			gdb_client_data client_data)
+inferior_event_handler (enum inferior_event_type event_type)
 {
   switch (event_type)
     {
     case INF_REG_EVENT:
-      fetch_inferior_event (client_data);
+      fetch_inferior_event ();
       break;
 
     case INF_EXEC_COMPLETE:
@@ -49,14 +47,14 @@ inferior_event_handler (enum inferior_ev
 	  /* Unregister the inferior from the event loop.  This is done
 	     so that when the inferior is not running we don't get
 	     distracted by spurious inferior output.  */
-	  if (target_has_execution && target_can_async_p ())
+	  if (target_has_execution () && target_can_async_p ())
 	    target_async (0);
 	}
 
       /* Do all continuations associated with the whole inferior (not
 	 a particular thread).  */
       if (inferior_ptid != null_ptid)
-	do_all_inferior_continuations (0);
+	current_inferior ()->do_all_continuations ();
 
       /* When running a command list (from a user command, say), these
 	 are only run when the command list is all done.  */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-loop.h ./gdb/inf-loop.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-loop.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inf-loop.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Interface to the inferior event handling code for GDB, the GNU debugger.
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
 
    This file is part of GDB.
@@ -22,7 +22,6 @@
 
 #include "target.h"             /* For enum inferior_event_type.  */
 
-extern void inferior_event_handler (enum inferior_event_type event_type, 
-				    void* client_data);
+extern void inferior_event_handler (enum inferior_event_type event_type);
 
 #endif /* #ifndef INF_LOOP_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inflow.c ./gdb/inflow.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inflow.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inflow.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,5 +1,5 @@
 /* Low level interface to ptrace, for GDB when running under Unix.
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,14 +27,14 @@
 #include "observable.h"
 #include <signal.h>
 #include <fcntl.h>
-#include "gdb_select.h"
+#include "gdbsupport/gdb_select.h"
 
-#include "inflow.h"
 #include "gdbcmd.h"
 #ifdef HAVE_TERMIOS_H
 #include <termios.h>
 #endif
 #include "gdbsupport/job-control.h"
+#include "gdbsupport/scoped_ignore_sigttou.h"
 
 #ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
@@ -808,7 +808,7 @@ new_tty (void)
      systems (SVR4 for example), this may cause a SIGTTOU, so temporarily
      ignore SIGTTOU.  */
   tty = open ("/dev/tty", O_RDWR);
-  if (tty > 0)
+  if (tty >= 0)
     {
       scoped_ignore_sigttou ignore_sigttou;
 
@@ -953,8 +953,9 @@ initialize_stdin_serial (void)
   stdin_serial = serial_fdopen (0);
 }
 
+void _initialize_inflow ();
 void
-_initialize_inflow (void)
+_initialize_inflow ()
 {
   add_info ("terminal", info_terminal_command,
 	    _("Print inferior's saved terminal status."));
@@ -962,5 +963,5 @@ _initialize_inflow (void)
   /* OK, figure out whether we have job control.  */
   have_job_control ();
 
-  gdb::observers::inferior_exit.attach (inflow_inferior_exit);
+  gdb::observers::inferior_exit.attach (inflow_inferior_exit, "inflow");
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inflow.h ./gdb/inflow.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inflow.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inflow.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,56 +0,0 @@
-/* Low level interface to ptrace, for GDB when running under Unix.
-
-   Copyright (C) 2003-2020 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 INFLOW_H
-#define INFLOW_H
-
-#include <unistd.h>
-#include <signal.h>
-#include "gdbsupport/job-control.h"
-
-/* RAII class used to ignore SIGTTOU in a scope.  */
-
-class scoped_ignore_sigttou
-{
-public:
-  scoped_ignore_sigttou ()
-  {
-#ifdef SIGTTOU
-    if (job_control)
-      m_osigttou = signal (SIGTTOU, SIG_IGN);
-#endif
-  }
-
-  ~scoped_ignore_sigttou ()
-  {
-#ifdef SIGTTOU
-    if (job_control)
-      signal (SIGTTOU, m_osigttou);
-#endif
-  }
-
-  DISABLE_COPY_AND_ASSIGN (scoped_ignore_sigttou);
-
-private:
-#ifdef SIGTTOU
-  sighandler_t m_osigttou = NULL;
-#endif
-};
-
-#endif /* inflow.h */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-ptrace.c ./gdb/inf-ptrace.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-ptrace.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inf-ptrace.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low-level child interface to ptrace.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,6 @@
 #include "defs.h"
 #include "command.h"
 #include "inferior.h"
-#include "inflow.h"
 #include "terminal.h"
 #include "gdbcore.h"
 #include "regcache.h"
@@ -37,61 +36,21 @@
 
 
 
-/* A unique_ptr helper to unpush a target.  */
-
-struct target_unpusher
+static PTRACE_TYPE_RET
+gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr,
+	    PTRACE_TYPE_ARG4 data)
 {
-  void operator() (struct target_ops *ops) const
-  {
-    unpush_target (ops);
-  }
-};
-
-/* A unique_ptr that unpushes a target on destruction.  */
-
-typedef std::unique_ptr<struct target_ops, target_unpusher> target_unpush_up;
-
-
+#ifdef __NetBSD__
+  return ptrace (request, ptid.pid (), addr, data);
+#else
+  pid_t pid = get_ptrace_pid (ptid);
+  return ptrace (request, pid, addr, data);
+#endif
+}
 
 inf_ptrace_target::~inf_ptrace_target ()
 {}
 
-#ifdef PT_GET_PROCESS_STATE
-
-/* Target hook for follow_fork.  On entry and at return inferior_ptid is
-   the ptid of the followed inferior.  */
-
-int
-inf_ptrace_target::follow_fork (int follow_child, int detach_fork)
-{
-  if (!follow_child)
-    {
-      struct thread_info *tp = inferior_thread ();
-      pid_t child_pid = tp->pending_follow.value.related_pid.pid ();
-
-      /* Breakpoints have already been detached from the child by
-	 infrun.c.  */
-
-      if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
-	perror_with_name (("ptrace"));
-    }
-
-  return 0;
-}
-
-int
-inf_ptrace_target::insert_fork_catchpoint (int pid)
-{
-  return 0;
-}
-
-int
-inf_ptrace_target::remove_fork_catchpoint (int pid)
-{
-  return 0;
-}
-
-#endif /* PT_GET_PROCESS_STATE */
 
 
 /* Prepare to be traced.  */
@@ -114,29 +73,29 @@ inf_ptrace_target::create_inferior (cons
 				    const std::string &allargs,
 				    char **env, int from_tty)
 {
-  pid_t pid;
-  ptid_t ptid;
+  inferior *inf = current_inferior ();
 
   /* Do not change either targets above or the same target if already present.
      The reason is the target stack is shared across multiple inferiors.  */
-  int ops_already_pushed = target_is_pushed (this);
+  int ops_already_pushed = inf->target_is_pushed (this);
 
   target_unpush_up unpusher;
   if (! ops_already_pushed)
     {
       /* Clear possible core file with its process_stratum.  */
-      push_target (this);
+      inf->push_target (this);
       unpusher.reset (this);
     }
 
-  pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
-		       NULL, NULL, NULL);
+  pid_t pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
+			     NULL, NULL, NULL);
 
-  ptid = ptid_t (pid);
+  ptid_t ptid (pid);
   /* We have something that executes now.  We'll be running through
      the shell at this point (if startup-with-shell is true), but the
      pid shouldn't change.  */
-  add_thread_silent (ptid);
+  thread_info *thr = add_thread_silent (this, ptid);
+  switch_to_thread (thr);
 
   unpusher.release ();
 
@@ -147,23 +106,6 @@ inf_ptrace_target::create_inferior (cons
   target_post_startup_inferior (ptid);
 }
 
-#ifdef PT_GET_PROCESS_STATE
-
-void
-inf_ptrace_target::post_startup_inferior (ptid_t pid)
-{
-  ptrace_event_t pe;
-
-  /* Set the initial event mask.  */
-  memset (&pe, 0, sizeof pe);
-  pe.pe_set_event |= PTRACE_FORK;
-  if (ptrace (PT_SET_EVENT_MASK, pid.pid (),
-	      (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
-    perror_with_name (("ptrace"));
-}
-
-#endif
-
 /* Clean up a rotting corpse of an inferior after it died.  */
 
 void
@@ -186,15 +128,13 @@ inf_ptrace_target::mourn_inferior ()
 void
 inf_ptrace_target::attach (const char *args, int from_tty)
 {
-  char *exec_file;
-  pid_t pid;
-  struct inferior *inf;
+  inferior *inf = current_inferior ();
 
   /* Do not change either targets above or the same target if already present.
      The reason is the target stack is shared across multiple inferiors.  */
-  int ops_already_pushed = target_is_pushed (this);
+  int ops_already_pushed = inf->target_is_pushed (this);
 
-  pid = parse_pid_to_attach (args);
+  pid_t pid = parse_pid_to_attach (args);
 
   if (pid == getpid ())		/* Trying to masturbate?  */
     error (_("I refuse to debug myself!"));
@@ -204,13 +144,13 @@ inf_ptrace_target::attach (const char *a
     {
       /* target_pid_to_str already uses the target.  Also clear possible core
 	 file with its process_stratum.  */
-      push_target (this);
+      inf->push_target (this);
       unpusher.reset (this);
     }
 
   if (from_tty)
     {
-      exec_file = get_exec_file (0);
+      const char *exec_file = get_exec_file (0);
 
       if (exec_file)
 	printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
@@ -229,38 +169,21 @@ inf_ptrace_target::attach (const char *a
   error (_("This system does not support attaching to a process"));
 #endif
 
-  inf = current_inferior ();
   inferior_appeared (inf, pid);
   inf->attach_flag = 1;
-  inferior_ptid = ptid_t (pid);
 
   /* Always add a main thread.  If some target extends the ptrace
      target, it should decorate the ptid later with more info.  */
-  thread_info *thr = add_thread_silent (inferior_ptid);
+  thread_info *thr = add_thread_silent (this, ptid_t (pid));
+  switch_to_thread (thr);
+
   /* Don't consider the thread stopped until we've processed its
      initial SIGSTOP stop.  */
-  set_executing (thr->ptid, true);
+  set_executing (this, thr->ptid, true);
 
   unpusher.release ();
 }
 
-#ifdef PT_GET_PROCESS_STATE
-
-void
-inf_ptrace_target::post_attach (int pid)
-{
-  ptrace_event_t pe;
-
-  /* Set the initial event mask.  */
-  memset (&pe, 0, sizeof pe);
-  pe.pe_set_event |= PTRACE_FORK;
-  if (ptrace (PT_SET_EVENT_MASK, pid,
-	      (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
-    perror_with_name (("ptrace"));
-}
-
-#endif
-
 /* Detach from the inferior.  If FROM_TTY is non-zero, be chatty about it.  */
 
 void
@@ -291,7 +214,7 @@ inf_ptrace_target::detach (inferior *inf
 void
 inf_ptrace_target::detach_success (inferior *inf)
 {
-  inferior_ptid = null_ptid;
+  switch_to_no_thread ();
   detach_inferior (inf);
 
   maybe_unpush_target ();
@@ -314,8 +237,9 @@ inf_ptrace_target::kill ()
   target_mourn_inferior (inferior_ptid);
 }
 
-/* Return which PID to pass to ptrace in order to observe/control the
-   tracee identified by PTID.  */
+#ifndef __NetBSD__
+
+/* See inf-ptrace.h.  */
 
 pid_t
 get_ptrace_pid (ptid_t ptid)
@@ -329,6 +253,7 @@ get_ptrace_pid (ptid_t ptid)
     pid = ptid.pid ();
   return pid;
 }
+#endif
 
 /* Resume execution of thread PTID, or all threads if PTID is -1.  If
    STEP is nonzero, single-step it.  If SIGNAL is nonzero, give it
@@ -337,15 +262,12 @@ get_ptrace_pid (ptid_t ptid)
 void
 inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
 {
-  pid_t pid;
-  int request;
+  PTRACE_TYPE_ARG1 request;
 
   if (minus_one_ptid == ptid)
     /* Resume all threads.  Traditionally ptrace() only supports
        single-threaded processes, so simply resume the inferior.  */
-    pid = inferior_ptid.pid ();
-  else
-    pid = get_ptrace_pid (ptid);
+    ptid = ptid_t (inferior_ptid.pid ());
 
   if (catch_syscall_enabled () > 0)
     request = PT_SYSCALL;
@@ -355,10 +277,10 @@ inf_ptrace_target::resume (ptid_t ptid,
   if (step)
     {
       /* If this system does not support PT_STEP, a higher level
-         function will have called single_step() to transmute the step
-         request into a continue request (by setting breakpoints on
-         all possible successor instructions), so we don't have to
-         worry about that here.  */
+	 function will have called the appropriate functions to transmute the
+	 step request into a continue request (by setting breakpoints on
+	 all possible successor instructions), so we don't have to
+	 worry about that here.  */
       request = PT_STEP;
     }
 
@@ -366,7 +288,7 @@ inf_ptrace_target::resume (ptid_t ptid,
      where it was.  If GDB wanted it to start some other way, we have
      already written a new program counter value to the child.  */
   errno = 0;
-  ptrace (request, pid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal));
+  gdb_ptrace (request, ptid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal));
   if (errno != 0)
     perror_with_name (("ptrace"));
 }
@@ -377,7 +299,7 @@ inf_ptrace_target::resume (ptid_t ptid,
 
 ptid_t
 inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
-			 int options)
+			 target_wait_flags options)
 {
   pid_t pid;
   int status, save_errno;
@@ -408,49 +330,11 @@ inf_ptrace_target::wait (ptid_t ptid, st
 	}
 
       /* Ignore terminated detached child processes.  */
-      if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ())
+      if (!WIFSTOPPED (status) && find_inferior_pid (this, pid) == nullptr)
 	pid = -1;
     }
   while (pid == -1);
 
-#ifdef PT_GET_PROCESS_STATE
-  if (WIFSTOPPED (status))
-    {
-      ptrace_state_t pe;
-      pid_t fpid;
-
-      if (ptrace (PT_GET_PROCESS_STATE, pid,
-		  (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
-	perror_with_name (("ptrace"));
-
-      switch (pe.pe_report_event)
-	{
-	case PTRACE_FORK:
-	  ourstatus->kind = TARGET_WAITKIND_FORKED;
-	  ourstatus->value.related_pid = ptid_t (pe.pe_other_pid);
-
-	  /* Make sure the other end of the fork is stopped too.  */
-	  fpid = waitpid (pe.pe_other_pid, &status, 0);
-	  if (fpid == -1)
-	    perror_with_name (("waitpid"));
-
-	  if (ptrace (PT_GET_PROCESS_STATE, fpid,
-		      (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
-	    perror_with_name (("ptrace"));
-
-	  gdb_assert (pe.pe_report_event == PTRACE_FORK);
-	  gdb_assert (pe.pe_other_pid == pid);
-	  if (fpid == inferior_ptid.pid ())
-	    {
-	      ourstatus->value.related_pid = ptid_t (pe.pe_other_pid);
-	      return ptid_t (fpid);
-	    }
-
-	  return ptid_t (pid);
-	}
-    }
-#endif
-
   store_waitstatus (ourstatus, status);
   return ptid_t (pid);
 }
@@ -461,7 +345,7 @@ inf_ptrace_target::wait (ptid_t ptid, st
    be non-null.  Return the number of transferred bytes.  */
 
 static ULONGEST
-inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf,
+inf_ptrace_peek_poke (ptid_t ptid, gdb_byte *readbuf,
 		      const gdb_byte *writebuf,
 		      ULONGEST addr, ULONGEST len)
 {
@@ -492,8 +376,8 @@ inf_ptrace_peek_poke (pid_t pid, gdb_byt
       if (readbuf != NULL || chunk < sizeof (PTRACE_TYPE_RET))
 	{
 	  errno = 0;
-	  buf.word = ptrace (PT_READ_I, pid,
-			     (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0);
+	  buf.word = gdb_ptrace (PT_READ_I, ptid,
+				 (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0);
 	  if (errno != 0)
 	    break;
 	  if (readbuf != NULL)
@@ -503,15 +387,15 @@ inf_ptrace_peek_poke (pid_t pid, gdb_byt
 	{
 	  memcpy (buf.byte + skip, writebuf + n, chunk);
 	  errno = 0;
-	  ptrace (PT_WRITE_D, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
+	  gdb_ptrace (PT_WRITE_D, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
 		  buf.word);
 	  if (errno != 0)
 	    {
 	      /* Using the appropriate one (I or D) is necessary for
 		 Gould NP1, at least.  */
 	      errno = 0;
-	      ptrace (PT_WRITE_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
-		      buf.word);
+	      gdb_ptrace (PT_WRITE_I, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
+			  buf.word);
 	      if (errno != 0)
 		break;
 	    }
@@ -529,7 +413,7 @@ inf_ptrace_target::xfer_partial (enum ta
 				 const gdb_byte *writebuf,
 				 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
 {
-  pid_t pid = get_ptrace_pid (inferior_ptid);
+  ptid_t ptid = inferior_ptid;
 
   switch (object)
     {
@@ -553,7 +437,7 @@ inf_ptrace_target::xfer_partial (enum ta
 	piod.piod_len = len;
 
 	errno = 0;
-	if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
+	if (gdb_ptrace (PT_IO, ptid, (caddr_t)&piod, 0) == 0)
 	  {
 	    /* Return the actual number of bytes read or written.  */
 	    *xfered_len = piod.piod_len;
@@ -566,7 +450,7 @@ inf_ptrace_target::xfer_partial (enum ta
 	  return TARGET_XFER_EOF;
       }
 #endif
-      *xfered_len = inf_ptrace_peek_poke (pid, readbuf, writebuf,
+      *xfered_len = inf_ptrace_peek_poke (ptid, readbuf, writebuf,
 					  offset, len);
       return *xfered_len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF;
 
@@ -589,7 +473,7 @@ inf_ptrace_target::xfer_partial (enum ta
 	piod.piod_len = len;
 
 	errno = 0;
-	if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
+	if (gdb_ptrace (PT_IO, ptid, (caddr_t)&piod, 0) == 0)
 	  {
 	    /* Return the actual number of bytes read or written.  */
 	    *xfered_len = piod.piod_len;
@@ -633,39 +517,3 @@ inf_ptrace_target::pid_to_str (ptid_t pt
 {
   return normal_pid_to_str (ptid);
 }
-
-#if defined (PT_IO) && defined (PIOD_READ_AUXV)
-
-/* 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
-inf_ptrace_target::auxv_parse (gdb_byte **readptr, gdb_byte *endptr,
-			       CORE_ADDR *typep, CORE_ADDR *valp)
-{
-  struct type *int_type = builtin_type (target_gdbarch ())->builtin_int;
-  struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
-  const int sizeof_auxv_type = TYPE_LENGTH (int_type);
-  const int sizeof_auxv_val = TYPE_LENGTH (ptr_type);
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-  gdb_byte *ptr = *readptr;
-
-  if (endptr == ptr)
-    return 0;
-
-  if (endptr - ptr < 2 * sizeof_auxv_val)
-    return -1;
-
-  *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order);
-  ptr += sizeof_auxv_val;	/* Alignment.  */
-  *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order);
-  ptr += sizeof_auxv_val;
-
-  *readptr = ptr;
-  return 1;
-}
-
-#endif
-
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-ptrace.h ./gdb/inf-ptrace.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inf-ptrace.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inf-ptrace.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Low level child interface to ptrace.
 
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
+   Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -35,7 +35,7 @@ struct inf_ptrace_target : public inf_ch
 
   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 files_info () override;
 
@@ -43,17 +43,6 @@ struct inf_ptrace_target : public inf_ch
 
   void create_inferior (const char *, const std::string &,
 			char **, int) override;
-#ifdef PT_GET_PROCESS_STATE
-  int follow_fork (int, int) override;
-
-  int insert_fork_catchpoint (int) override;
-
-  int remove_fork_catchpoint (int) override;
-
-  void post_startup_inferior (ptid_t) override;
-
-  void post_attach (int) override;
-#endif
 
   void mourn_inferior () override;
 
@@ -68,19 +57,19 @@ struct inf_ptrace_target : public inf_ch
 					ULONGEST offset, ULONGEST len,
 					ULONGEST *xfered_len) override;
 
-#if defined (PT_IO) && defined (PIOD_READ_AUXV)
-  int auxv_parse (gdb_byte **readptr,
-		  gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) override;
-#endif
-
 protected:
   /* Cleanup the inferior after a successful ptrace detach.  */
   void detach_success (inferior *inf);
 };
 
+#ifndef __NetBSD__
 /* Return which PID to pass to ptrace in order to observe/control the
-   tracee identified by PTID.  */
+   tracee identified by PTID.
+
+   Unlike most other Operating Systems, NetBSD tracks both pid and lwp
+   and avoids this function.  */
 
 extern pid_t get_ptrace_pid (ptid_t);
+#endif
 
 #endif
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infrun.c ./gdb/infrun.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infrun.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/infrun.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Target-struct-independent code to start (run) and stop an inferior
    process.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,6 +19,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "displaced-stepping.h"
 #include "infrun.h"
 #include <ctype.h>
 #include "symtab.h"
@@ -28,6 +29,7 @@
 #include "gdbcore.h"
 #include "gdbcmd.h"
 #include "target.h"
+#include "target-connection.h"
 #include "gdbthread.h"
 #include "annotate.h"
 #include "symfile.h"
@@ -55,7 +57,7 @@
 #include "target-dcache.h"
 #include "terminal.h"
 #include "solist.h"
-#include "event-loop.h"
+#include "gdbsupport/event-loop.h"
 #include "thread-fsm.h"
 #include "gdbsupport/enum-flags.h"
 #include "progspace-and-thread.h"
@@ -63,6 +65,13 @@
 #include "arch-utils.h"
 #include "gdbsupport/scope-exit.h"
 #include "gdbsupport/forward-scope-exit.h"
+#include "gdbsupport/gdb_select.h"
+#include <unordered_map>
+#include "async-event.h"
+#include "gdbsupport/selftest.h"
+#include "scoped-mock-context.h"
+#include "test-target.h"
+#include "gdbsupport/common-debug.h"
 
 /* Prototypes for local functions */
 
@@ -70,15 +79,9 @@ static void sig_print_info (enum gdb_sig
 
 static void sig_print_header (void);
 
-static int follow_fork (void);
-
-static int follow_fork_inferior (int follow_child, int detach_fork);
-
 static void follow_inferior_reset_breakpoints (void);
 
-static int currently_stepping (struct thread_info *tp);
-
-void nullify_last_target_wait_ptid (void);
+static bool currently_stepping (struct thread_info *tp);
 
 static void insert_hp_step_resume_breakpoint_at_frame (struct frame_info *);
 
@@ -86,10 +89,12 @@ static void insert_step_resume_breakpoin
 
 static void insert_longjmp_resume_breakpoint (struct gdbarch *, CORE_ADDR);
 
-static int maybe_software_singlestep (struct gdbarch *gdbarch, CORE_ADDR pc);
+static bool maybe_software_singlestep (struct gdbarch *gdbarch, CORE_ADDR pc);
 
 static void resume (gdb_signal sig);
 
+static void wait_for_inferior (inferior *inf);
+
 /* Asynchronous signal handler registered as event loop source for
    when we have pending events ready to be passed to the core.  */
 static struct async_event_handler *infrun_async_inferior_event_token;
@@ -107,10 +112,7 @@ infrun_async (int enable)
     {
       infrun_is_async = enable;
 
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: infrun_async(%d)\n",
-			    enable);
+      infrun_debug_printf ("enable=%d", enable);
 
       if (enable)
 	mark_async_event_handler (infrun_async_inferior_event_token);
@@ -151,15 +153,7 @@ static ptid_t previous_inferior_ptid;
 
 static bool detach_fork = true;
 
-bool debug_displaced = false;
-static void
-show_debug_displaced (struct ui_file *file, int from_tty,
-		      struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file, _("Displace stepping debugging is %s.\n"), value);
-}
-
-unsigned int debug_infrun = 0;
+bool debug_infrun = false;
 static void
 show_debug_infrun (struct ui_file *file, int from_tty,
 		   struct cmd_list_element *c, const char *value)
@@ -167,7 +161,6 @@ show_debug_infrun (struct ui_file *file,
   fprintf_filtered (file, _("Inferior debugging is %s.\n"), value);
 }
 
-
 /* Support for disabling address space randomization.  */
 
 bool disable_randomization = true;
@@ -206,7 +199,7 @@ static void
 set_non_stop (const char *args, int from_tty,
 	      struct cmd_list_element *c)
 {
-  if (target_has_execution)
+  if (target_has_execution ())
     {
       non_stop_1 = non_stop;
       error (_("Cannot change this setting while the inferior is running."));
@@ -228,14 +221,14 @@ show_non_stop (struct ui_file *file, int
    non-stop, in which all GDB operations that might affect the
    target's execution have been disabled.  */
 
-bool observer_mode = false;
+static bool observer_mode = false;
 static bool observer_mode_1 = false;
 
 static void
 set_observer_mode (const char *args, int from_tty,
 		   struct cmd_list_element *c)
 {
-  if (target_has_execution)
+  if (target_has_execution ())
     {
       observer_mode_1 = observer_mode;
       error (_("Cannot change this setting while the inferior is running."));
@@ -368,13 +361,14 @@ show_stop_on_solib_events (struct ui_fil
 		    value);
 }
 
-/* Nonzero after stop if current stack frame should be printed.  */
+/* True after stop if current stack frame should be printed.  */
 
-static int stop_print_frame;
+static bool stop_print_frame;
 
-/* This is a cached copy of the pid/waitstatus of the last event
-   returned by target_wait()/deprecated_target_wait_hook().  This
-   information is returned by get_last_target_status().  */
+/* This is a cached copy of the target/ptid/waitstatus of the last
+   event returned by target_wait()/deprecated_target_wait_hook().
+   This information is returned by get_last_target_status().  */
+static process_stratum_target *target_last_proc_target;
 static ptid_t target_last_wait_ptid;
 static struct target_waitstatus target_last_waitstatus;
 
@@ -407,8 +401,8 @@ show_follow_fork_mode_string (struct ui_
    the fork parent.  At return inferior_ptid is the ptid of the
    followed inferior.  */
 
-static int
-follow_fork_inferior (int follow_child, int detach_fork)
+static bool
+follow_fork_inferior (bool follow_child, bool detach_fork)
 {
   int has_vforked;
   ptid_t parent_ptid, child_ptid;
@@ -432,7 +426,7 @@ follow_fork_inferior (int follow_child,
 Can not resume the parent process over vfork in the foreground while\n\
 holding the child stopped.  Try \"set detach-on-fork\" or \
 \"set schedule-multiple\".\n"));
-      return 1;
+      return true;
     }
 
   if (!follow_child)
@@ -480,10 +474,12 @@ holding the child stopped.  Try \"set de
 
 	  scoped_restore_current_pspace_and_thread restore_pspace_thread;
 
-	  inferior_ptid = child_ptid;
-	  add_thread_silent (inferior_ptid);
 	  set_current_inferior (child_inf);
+	  switch_to_no_thread ();
 	  child_inf->symfile_flags = SYMFILE_NO_READ;
+	  child_inf->push_target (parent_inf->process_target ());
+	  thread_info *child_thr
+	    = add_thread_silent (child_inf->process_target (), child_ptid);
 
 	  /* If this is a vfork child, then the address-space is
 	     shared with the parent.  */
@@ -492,6 +488,8 @@ holding the child stopped.  Try \"set de
 	      child_inf->pspace = parent_inf->pspace;
 	      child_inf->aspace = parent_inf->aspace;
 
+	      exec_on_vfork ();
+
 	      /* The parent will be frozen until the child is done
 		 with the shared region.  Keep track of the
 		 parent.  */
@@ -499,6 +497,11 @@ holding the child stopped.  Try \"set de
 	      child_inf->pending_detach = 0;
 	      parent_inf->vfork_child = child_inf;
 	      parent_inf->pending_detach = 0;
+
+	      /* Now that the inferiors and program spaces are all
+		 wired up, we can switch to the child thread (which
+		 switches inferior and program space too).  */
+	      switch_to_thread (child_thr);
 	    }
 	  else
 	    {
@@ -508,12 +511,19 @@ holding the child stopped.  Try \"set de
 	      set_current_program_space (child_inf->pspace);
 	      clone_program_space (child_inf->pspace, parent_inf->pspace);
 
+	      /* solib_create_inferior_hook relies on the current
+		 thread.  */
+	      switch_to_thread (child_thr);
+
 	      /* Let the shared library layer (e.g., solib-svr4) learn
 		 about this new process, relocate the cloned exec, pull
 		 in shared libraries, and install the solib event
 		 breakpoint.  If a "cloned-VM" event was propagated
 		 better throughout the core, this wouldn't be
 		 required.  */
+	      scoped_restore restore_in_initial_library_scan
+		= make_scoped_restore (&child_inf->in_initial_library_scan,
+				       true);
 	      solib_create_inferior_hook (0);
 	    }
 	}
@@ -567,52 +577,63 @@ holding the child stopped.  Try \"set de
 
       parent_pspace = parent_inf->pspace;
 
-      /* If we're vforking, we want to hold on to the parent until the
-	 child exits or execs.  At child exec or exit time we can
-	 remove the old breakpoints from the parent and detach or
-	 resume debugging it.  Otherwise, detach the parent now; we'll
-	 want to reuse it's program/address spaces, but we can't set
-	 them to the child before removing breakpoints from the
-	 parent, otherwise, the breakpoints module could decide to
-	 remove breakpoints from the wrong process (since they'd be
-	 assigned to the same address space).  */
+      process_stratum_target *target = parent_inf->process_target ();
 
-      if (has_vforked)
-	{
-	  gdb_assert (child_inf->vfork_parent == NULL);
-	  gdb_assert (parent_inf->vfork_child == NULL);
-	  child_inf->vfork_parent = parent_inf;
-	  child_inf->pending_detach = 0;
-	  parent_inf->vfork_child = child_inf;
-	  parent_inf->pending_detach = detach_fork;
-	  parent_inf->waiting_for_vfork_done = 0;
-	}
-      else if (detach_fork)
-	{
-	  if (print_inferior_events)
-	    {
-	      /* Ensure that we have a process ptid.  */
-	      ptid_t process_ptid = ptid_t (parent_ptid.pid ());
+      {
+	/* Hold a strong reference to the target while (maybe)
+	   detaching the parent.  Otherwise detaching could close the
+	   target.  */
+	auto target_ref = target_ops_ref::new_reference (target);
+
+	/* If we're vforking, we want to hold on to the parent until
+	   the child exits or execs.  At child exec or exit time we
+	   can remove the old breakpoints from the parent and detach
+	   or resume debugging it.  Otherwise, detach the parent now;
+	   we'll want to reuse it's program/address spaces, but we
+	   can't set them to the child before removing breakpoints
+	   from the parent, otherwise, the breakpoints module could
+	   decide to remove breakpoints from the wrong process (since
+	   they'd be assigned to the same address space).  */
 
-	      target_terminal::ours_for_output ();
-	      fprintf_filtered (gdb_stdlog,
-				_("[Detaching after fork from "
-				  "parent %s]\n"),
-				target_pid_to_str (process_ptid).c_str ());
-	    }
+	if (has_vforked)
+	  {
+	    gdb_assert (child_inf->vfork_parent == NULL);
+	    gdb_assert (parent_inf->vfork_child == NULL);
+	    child_inf->vfork_parent = parent_inf;
+	    child_inf->pending_detach = 0;
+	    parent_inf->vfork_child = child_inf;
+	    parent_inf->pending_detach = detach_fork;
+	    parent_inf->waiting_for_vfork_done = 0;
+	  }
+	else if (detach_fork)
+	  {
+	    if (print_inferior_events)
+	      {
+		/* Ensure that we have a process ptid.  */
+		ptid_t process_ptid = ptid_t (parent_ptid.pid ());
 
-	  target_detach (parent_inf, 0);
-	}
+		target_terminal::ours_for_output ();
+		fprintf_filtered (gdb_stdlog,
+				  _("[Detaching after fork from "
+				    "parent %s]\n"),
+				  target_pid_to_str (process_ptid).c_str ());
+	      }
 
-      /* Note that the detach above makes PARENT_INF dangling.  */
+	    target_detach (parent_inf, 0);
+	    parent_inf = NULL;
+	  }
+
+	/* Note that the detach above makes PARENT_INF dangling.  */
 
-      /* Add the child thread to the appropriate lists, and switch to
-	 this new thread, before cloning the program space, and
-	 informing the solib layer about this new process.  */
+	/* Add the child thread to the appropriate lists, and switch
+	   to this new thread, before cloning the program space, and
+	   informing the solib layer about this new process.  */
 
-      inferior_ptid = child_ptid;
-      add_thread_silent (inferior_ptid);
-      set_current_inferior (child_inf);
+	set_current_inferior (child_inf);
+	child_inf->push_target (target);
+      }
+
+      thread_info *child_thr = add_thread_silent (target, child_ptid);
 
       /* If this is a vfork child, then the address-space is shared
 	 with the parent.  If we detached from the parent, then we can
@@ -621,6 +642,8 @@ holding the child stopped.  Try \"set de
 	{
 	  child_inf->pspace = parent_pspace;
 	  child_inf->aspace = child_inf->pspace->aspace;
+
+	  exec_on_vfork ();
 	}
       else
 	{
@@ -636,22 +659,28 @@ holding the child stopped.  Try \"set de
 	     shared libraries, and install the solib event breakpoint.
 	     If a "cloned-VM" event was propagated better throughout
 	     the core, this wouldn't be required.  */
+	  scoped_restore restore_in_initial_library_scan
+	    = make_scoped_restore (&child_inf->in_initial_library_scan, true);
 	  solib_create_inferior_hook (0);
 	}
+
+      switch_to_thread (child_thr);
     }
 
-  return target_follow_fork (follow_child, detach_fork);
+  target_follow_fork (follow_child, detach_fork);
+
+  return false;
 }
 
 /* Tell the target to follow the fork we're stopped at.  Returns true
    if the inferior should be resumed; false, if the target for some
    reason decided it's best not to resume.  */
 
-static int
-follow_fork (void)
+static bool
+follow_fork ()
 {
-  int follow_child = (follow_fork_mode_string == follow_fork_mode_child);
-  int should_resume = 1;
+  bool follow_child = (follow_fork_mode_string == follow_fork_mode_child);
+  bool should_resume = true;
   struct thread_info *tp;
 
   /* Copy user stepping state to the new inferior thread.  FIXME: the
@@ -662,16 +691,19 @@ follow_fork (void)
   struct breakpoint *exception_resume_breakpoint = NULL;
   CORE_ADDR step_range_start = 0;
   CORE_ADDR step_range_end = 0;
+  int current_line = 0;
+  symtab *current_symtab = NULL;
   struct frame_id step_frame_id = { 0 };
   struct thread_fsm *thread_fsm = NULL;
 
   if (!non_stop)
     {
+      process_stratum_target *wait_target;
       ptid_t wait_ptid;
       struct target_waitstatus wait_status;
 
       /* Get the last target status returned by target_wait().  */
-      get_last_target_status (&wait_ptid, &wait_status);
+      get_last_target_status (&wait_target, &wait_ptid, &wait_status);
 
       /* If not stopped at a fork event, then there's nothing else to
 	 do.  */
@@ -682,16 +714,16 @@ follow_fork (void)
       /* Check if we switched over from WAIT_PTID, since the event was
 	 reported.  */
       if (wait_ptid != minus_one_ptid
-	  && inferior_ptid != wait_ptid)
+	  && (current_inferior ()->process_target () != wait_target
+	      || inferior_ptid != wait_ptid))
 	{
 	  /* We did.  Switch back to WAIT_PTID thread, to tell the
 	     target to follow it (in either direction).  We'll
 	     afterwards refuse to resume, and inform the user what
 	     happened.  */
-	  thread_info *wait_thread
-	    = find_thread_ptid (wait_ptid);
+	  thread_info *wait_thread = find_thread_ptid (wait_target, wait_ptid);
 	  switch_to_thread (wait_thread);
-	  should_resume = 0;
+	  should_resume = false;
 	}
     }
 
@@ -714,6 +746,8 @@ follow_fork (void)
 					 (tp->control.step_resume_breakpoint);
 	    step_range_start = tp->control.step_range_start;
 	    step_range_end = tp->control.step_range_end;
+	    current_line = tp->current_line;
+	    current_symtab = tp->current_symtab;
 	    step_frame_id = tp->control.step_frame_id;
 	    exception_resume_breakpoint
 	      = clone_momentary_breakpoint (tp->control.exception_resume_breakpoint);
@@ -735,6 +769,7 @@ follow_fork (void)
 	parent = inferior_ptid;
 	child = tp->pending_follow.value.related_pid;
 
+	process_stratum_target *parent_targ = tp->inf->process_target ();
 	/* Set up inferior(s) as specified by the caller, and tell the
 	   target to do whatever is necessary to follow either parent
 	   or child.  */
@@ -750,7 +785,7 @@ follow_fork (void)
 	       or another.  The previous selected thread may be gone
 	       from the lists by now, but if it is still around, need
 	       to clear the pending follow request.  */
-	    tp = find_thread_ptid (parent);
+	    tp = find_thread_ptid (parent_targ, parent);
 	    if (tp)
 	      tp->pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
 
@@ -761,7 +796,7 @@ follow_fork (void)
 	    /* If we followed the child, switch to it...  */
 	    if (follow_child)
 	      {
-		thread_info *child_thr = find_thread_ptid (child);
+		thread_info *child_thr = find_thread_ptid (parent_targ, child);
 		switch_to_thread (child_thr);
 
 		/* ... and preserve the stepping state, in case the
@@ -773,6 +808,8 @@ follow_fork (void)
 		      = step_resume_breakpoint;
 		    tp->control.step_range_start = step_range_start;
 		    tp->control.step_range_end = step_range_end;
+		    tp->current_line = current_line;
+		    tp->current_symtab = current_symtab;
 		    tp->control.step_frame_id = step_frame_id;
 		    tp->control.exception_resume_breakpoint
 		      = exception_resume_breakpoint;
@@ -864,10 +901,8 @@ proceed_after_vfork_done (struct thread_
       && !thread->stop_requested
       && thread->suspend.stop_signal == GDB_SIGNAL_0)
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: resuming vfork parent thread %s\n",
-			    target_pid_to_str (thread->ptid).c_str ());
+      infrun_debug_printf ("resuming vfork parent thread %s",
+			   target_pid_to_str (thread->ptid).c_str ());
 
       switch_to_thread (thread);
       clear_proceed_status (0);
@@ -877,22 +912,6 @@ proceed_after_vfork_done (struct thread_
   return 0;
 }
 
-/* Save/restore inferior_ptid, current program space and current
-   inferior.  Only use this if the current context points at an exited
-   inferior (and therefore there's no current thread to save).  */
-class scoped_restore_exited_inferior
-{
-public:
-  scoped_restore_exited_inferior ()
-    : m_saved_ptid (&inferior_ptid)
-  {}
-
-private:
-  scoped_restore_tmpl<ptid_t> m_saved_ptid;
-  scoped_restore_current_program_space m_pspace;
-  scoped_restore_current_inferior m_inferior;
-};
-
 /* Called whenever we notice an exec or exit event, to handle
    detaching or resuming a vfork parent.  */
 
@@ -915,7 +934,6 @@ handle_vfork_child_exec_or_exit (int exe
 	 time.  */
       if (vfork_parent->pending_detach)
 	{
-	  struct thread_info *tp;
 	  struct program_space *pspace;
 	  struct address_space *aspace;
 
@@ -923,20 +941,10 @@ handle_vfork_child_exec_or_exit (int exe
 
 	  vfork_parent->pending_detach = 0;
 
-	  gdb::optional<scoped_restore_exited_inferior>
-	    maybe_restore_inferior;
-	  gdb::optional<scoped_restore_current_pspace_and_thread>
-	    maybe_restore_thread;
-
-	  /* If we're handling a child exit, then inferior_ptid points
-	     at the inferior's pid, not to a thread.  */
-	  if (!exec)
-	    maybe_restore_inferior.emplace ();
-	  else
-	    maybe_restore_thread.emplace ();
+	  scoped_restore_current_pspace_and_thread restore_thread;
 
 	  /* We're letting loose of the parent.  */
-	  tp = any_live_thread_of_inferior (vfork_parent);
+	  thread_info *tp = any_live_thread_of_inferior (vfork_parent);
 	  switch_to_thread (tp);
 
 	  /* We're about to detach from the parent, which implicitly
@@ -996,8 +1004,6 @@ handle_vfork_child_exec_or_exit (int exe
 	}
       else
 	{
-	  struct program_space *pspace;
-
 	  /* If this is a vfork child exiting, then the pspace and
 	     aspaces were shared with the parent.  Since we're
 	     reporting the process exit, we'll be mourning all that is
@@ -1007,24 +1013,18 @@ handle_vfork_child_exec_or_exit (int exe
 	     go ahead and create a new one for this exiting
 	     inferior.  */
 
-	  /* Switch to null_ptid while running clone_program_space, so
+	  /* Switch to no-thread while running clone_program_space, so
 	     that clone_program_space doesn't want to read the
 	     selected frame of a dead process.  */
-	  scoped_restore restore_ptid
-	    = make_scoped_restore (&inferior_ptid, null_ptid);
+	  scoped_restore_current_thread restore_thread;
+	  switch_to_no_thread ();
 
-	  /* This inferior is dead, so avoid giving the breakpoints
-	     module the option to write through to it (cloning a
-	     program space resets breakpoints).  */
-	  inf->aspace = NULL;
-	  inf->pspace = NULL;
-	  pspace = new program_space (maybe_new_address_space ());
-	  set_current_program_space (pspace);
+	  inf->pspace = new program_space (maybe_new_address_space ());
+	  inf->aspace = inf->pspace->aspace;
+	  set_current_program_space (inf->pspace);
 	  inf->removable = 1;
 	  inf->symfile_flags = SYMFILE_NO_READ;
-	  clone_program_space (pspace, vfork_parent->pspace);
-	  inf->pspace = pspace;
-	  inf->aspace = pspace->aspace;
+	  clone_program_space (inf->pspace, vfork_parent->pspace);
 
 	  resume_parent = vfork_parent->pid;
 	}
@@ -1037,10 +1037,8 @@ handle_vfork_child_exec_or_exit (int exe
 	     free now.  */
 	  scoped_restore_current_thread restore_thread;
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: resuming vfork parent process %d\n",
-				resume_parent);
+	  infrun_debug_printf ("resuming vfork parent process %d",
+			       resume_parent);
 
 	  iterate_over_threads (proceed_after_vfork_done, &resume_parent);
 	}
@@ -1071,7 +1069,6 @@ show_follow_exec_mode_string (struct ui_
 static void
 follow_exec (ptid_t ptid, const char *exec_file_target)
 {
-  struct inferior *inf = current_inferior ();
   int pid = ptid.pid ();
   ptid_t process_ptid;
 
@@ -1174,6 +1171,8 @@ follow_exec (ptid_t ptid, const char *ex
      previous incarnation of this process.  */
   no_shared_libraries (NULL, 0);
 
+  struct inferior *inf = current_inferior ();
+
   if (follow_exec_mode_string == follow_exec_mode_new)
     {
       /* The user wants to keep the old inferior and program spaces
@@ -1183,16 +1182,16 @@ follow_exec (ptid_t ptid, const char *ex
 	 inferior's pid.  Having two inferiors with the same pid would confuse
 	 find_inferior_p(t)id.  Transfer the terminal state and info from the
 	  old to the new inferior.  */
-      inf = add_inferior_with_spaces ();
-      swap_terminal_info (inf, current_inferior ());
-      exit_inferior_silent (current_inferior ());
-
-      inf->pid = pid;
-      target_follow_exec (inf, exec_file_target);
-
-      set_current_inferior (inf);
-      set_current_program_space (inf->pspace);
-      add_thread (ptid);
+      inferior *new_inferior = add_inferior_with_spaces ();
+
+      swap_terminal_info (new_inferior, inf);
+      exit_inferior_silent (inf);
+
+      new_inferior->pid = pid;
+      target_follow_exec (new_inferior, ptid, exec_file_target);
+
+      /* We continue with the new inferior.  */
+      inf = new_inferior;
     }
   else
     {
@@ -1203,8 +1202,10 @@ follow_exec (ptid_t ptid, const char *ex
 	 around (its description is later cleared/refetched on
 	 restart).  */
       target_clear_description ();
+      target_follow_exec (inf, ptid, exec_file_target);
     }
 
+  gdb_assert (current_inferior () == inf);
   gdb_assert (current_program_space == inf->pspace);
 
   /* Attempt to open the exec file.  SYMFILE_DEFER_BP_RESET is used
@@ -1222,9 +1223,7 @@ follow_exec (ptid_t ptid, const char *ex
      registers.  */
   target_find_description ();
 
-  solib_create_inferior_hook (0);
-
-  jit_inferior_created_hook ();
+  gdb::observers::inferior_execd.notify (inf);
 
   breakpoint_re_set ();
 
@@ -1239,14 +1238,14 @@ follow_exec (ptid_t ptid, const char *ex
      matically get reset there in the new process.).  */
 }
 
-/* The queue of threads that need to do a step-over operation to get
+/* The chain of threads that need to do a step-over operation to get
    past e.g., a breakpoint.  What technique is used to step over the
    breakpoint/watchpoint does not matter -- all threads end up in the
    same queue, to maintain rough temporal order of execution, in order
    to avoid starvation, otherwise, we could e.g., find ourselves
    constantly stepping the same couple threads past their breakpoints
    over and over, if the single-step finish fast enough.  */
-struct thread_info *step_over_queue_head;
+struct thread_info *global_thread_step_over_chain_head;
 
 /* Bit flags indicating what the thread needs to step over.  */
 
@@ -1270,15 +1269,15 @@ struct step_over_info
      and address of the instruction the breakpoint is set at.  We'll
      skip inserting all breakpoints here.  Valid iff ASPACE is
      non-NULL.  */
-  const address_space *aspace;
-  CORE_ADDR address;
+  const address_space *aspace = nullptr;
+  CORE_ADDR address = 0;
 
   /* The instruction being stepped over triggers a nonsteppable
      watchpoint.  If true, we'll skip inserting watchpoints.  */
-  int nonsteppable_watchpoint_p;
+  int nonsteppable_watchpoint_p = 0;
 
   /* The thread's global number.  */
-  int thread;
+  int thread = -1;
 };
 
 /* The step-over info of the location that is being stepped over.
@@ -1329,9 +1328,7 @@ set_step_over_info (const address_space
 static void
 clear_step_over_info (void)
 {
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: clear_step_over_info\n");
+  infrun_debug_printf ("clearing step over info");
   step_over_info.aspace = NULL;
   step_over_info.address = 0;
   step_over_info.nonsteppable_watchpoint_p = 0;
@@ -1369,7 +1366,7 @@ stepping_past_nonsteppable_watchpoint (v
 
 /* Returns true if step-over info is valid.  */
 
-static int
+static bool
 step_over_info_valid_p (void)
 {
   return (step_over_info.aspace != NULL
@@ -1461,70 +1458,38 @@ step_over_info_valid_p (void)
    place it in the displaced_step_request_queue.  Whenever a displaced
    step finishes, we pick the next thread in the queue and start a new
    displaced step operation on it.  See displaced_step_prepare and
-   displaced_step_fixup for details.  */
+   displaced_step_finish for details.  */
 
-/* Default destructor for displaced_step_closure.  */
-
-displaced_step_closure::~displaced_step_closure () = default;
-
-/* Get the displaced stepping state of process PID.  */
-
-static displaced_step_inferior_state *
-get_displaced_stepping_state (inferior *inf)
-{
-  return &inf->displaced_step_state;
-}
-
-/* Returns true if any inferior has a thread doing a displaced
-   step.  */
+/* Return true if THREAD is doing a displaced step.  */
 
 static bool
-displaced_step_in_progress_any_inferior ()
-{
-  for (inferior *i : all_inferiors ())
-    {
-      if (i->displaced_step_state.step_thread != nullptr)
-	return true;
-    }
-
-  return false;
-}
-
-/* Return true if thread represented by PTID is doing a displaced
-   step.  */
-
-static int
 displaced_step_in_progress_thread (thread_info *thread)
 {
   gdb_assert (thread != NULL);
 
-  return get_displaced_stepping_state (thread->inf)->step_thread == thread;
+  return thread->displaced_step_state.in_progress ();
 }
 
-/* Return true if process PID has a thread doing a displaced step.  */
+/* Return true if INF has a thread doing a displaced step.  */
 
-static int
+static bool
 displaced_step_in_progress (inferior *inf)
 {
-  return get_displaced_stepping_state (inf)->step_thread != nullptr;
+  return inf->displaced_step_state.in_progress_count > 0;
 }
 
-/* If inferior is in displaced stepping, and ADDR equals to starting address
-   of copy area, return corresponding displaced_step_closure.  Otherwise,
-   return NULL.  */
+/* Return true if any thread is doing a displaced step.  */
 
-struct displaced_step_closure*
-get_displaced_step_closure_by_addr (CORE_ADDR addr)
+static bool
+displaced_step_in_progress_any_thread ()
 {
-  displaced_step_inferior_state *displaced
-    = get_displaced_stepping_state (current_inferior ());
-
-  /* If checking the mode of displaced instruction in copy area.  */
-  if (displaced->step_thread != nullptr
-      && displaced->step_copy == addr)
-    return displaced->step_closure;
+  for (inferior *inf : all_non_exited_inferiors ())
+    {
+      if (displaced_step_in_progress (inf))
+	return true;
+    }
 
-  return NULL;
+  return false;
 }
 
 static void
@@ -1533,13 +1498,30 @@ infrun_inferior_exit (struct inferior *i
   inf->displaced_step_state.reset ();
 }
 
+static void
+infrun_inferior_execd (inferior *inf)
+{
+  /* If some threads where was doing a displaced step in this inferior at the
+     moment of the exec, they no longer exist.  Even if the exec'ing thread
+     doing a displaced step, we don't want to to any fixup nor restore displaced
+     stepping buffer bytes.  */
+  inf->displaced_step_state.reset ();
+
+  for (thread_info *thread : inf->threads ())
+    thread->displaced_step_state.reset ();
+
+  /* Since an in-line step is done with everything else stopped, if there was
+     one in progress at the time of the exec, it must have been the exec'ing
+     thread.  */
+  clear_step_over_info ();
+}
+
 /* If ON, and the architecture supports it, GDB will use displaced
    stepping to step over breakpoints.  If OFF, or if the architecture
    doesn't support it, GDB will instead use the traditional
    hold-and-step approach.  If AUTO (which is the default), GDB will
    decide which technique to use to step over breakpoints depending on
-   which of all-stop or non-stop mode is active --- displaced stepping
-   in non-stop mode; hold-and-step in all-stop mode.  */
+   whether the target works in a non-stop way (see use_displaced_stepping).  */
 
 static enum auto_boolean can_use_displaced_stepping = AUTO_BOOLEAN_AUTO;
 
@@ -1559,51 +1541,81 @@ show_can_use_displaced_stepping (struct
 			"to step over breakpoints is %s.\n"), value);
 }
 
+/* Return true if the gdbarch implements the required methods to use
+   displaced stepping.  */
+
+static bool
+gdbarch_supports_displaced_stepping (gdbarch *arch)
+{
+  /* Only check for the presence of `prepare`.  The gdbarch verification ensures
+     that if `prepare` is provided, so is `finish`.  */
+  return gdbarch_displaced_step_prepare_p (arch);
+}
+
 /* Return non-zero if displaced stepping can/should be used to step
    over breakpoints of thread TP.  */
 
-static int
-use_displaced_stepping (struct thread_info *tp)
+static bool
+use_displaced_stepping (thread_info *tp)
 {
-  struct regcache *regcache = get_thread_regcache (tp);
-  struct gdbarch *gdbarch = regcache->arch ();
-  displaced_step_inferior_state *displaced_state
-    = get_displaced_stepping_state (tp->inf);
+  /* If the user disabled it explicitly, don't use displaced stepping.  */
+  if (can_use_displaced_stepping == AUTO_BOOLEAN_FALSE)
+    return false;
+
+  /* If "auto", only use displaced stepping if the target operates in a non-stop
+     way.  */
+  if (can_use_displaced_stepping == AUTO_BOOLEAN_AUTO
+      && !target_is_non_stop_p ())
+    return false;
+
+  gdbarch *gdbarch = get_thread_regcache (tp)->arch ();
 
-  return (((can_use_displaced_stepping == AUTO_BOOLEAN_AUTO
-	    && target_is_non_stop_p ())
-	   || can_use_displaced_stepping == AUTO_BOOLEAN_TRUE)
-	  && gdbarch_displaced_step_copy_insn_p (gdbarch)
-	  && find_record_target () == NULL
-	  && !displaced_state->failed_before);
+  /* If the architecture doesn't implement displaced stepping, don't use
+     it.  */
+  if (!gdbarch_supports_displaced_stepping (gdbarch))
+    return false;
+
+  /* If recording, don't use displaced stepping.  */
+  if (find_record_target () != nullptr)
+    return false;
+
+  /* If displaced stepping failed before for this inferior, don't bother trying
+     again.  */
+  if (tp->inf->displaced_step_state.failed_before)
+    return false;
+
+  return true;
 }
 
-/* Clean out any stray displaced stepping state.  */
+/* Simple function wrapper around displaced_step_thread_state::reset.  */
+
 static void
-displaced_step_clear (struct displaced_step_inferior_state *displaced)
+displaced_step_reset (displaced_step_thread_state *displaced)
 {
-  /* Indicate that there is no cleanup pending.  */
-  displaced->step_thread = nullptr;
-
-  delete displaced->step_closure;
-  displaced->step_closure = NULL;
+  displaced->reset ();
 }
 
-/* A cleanup that wraps displaced_step_clear.  */
-using displaced_step_clear_cleanup
-  = FORWARD_SCOPE_EXIT (displaced_step_clear);
+/* A cleanup that wraps displaced_step_reset.  We use this instead of, say,
+   SCOPE_EXIT, because it needs to be discardable with "cleanup.release ()".  */
 
-/* Dump LEN bytes at BUF in hex to FILE, followed by a newline.  */
-void
-displaced_step_dump_bytes (struct ui_file *file,
-                           const gdb_byte *buf,
-                           size_t len)
+using displaced_step_reset_cleanup = FORWARD_SCOPE_EXIT (displaced_step_reset);
+
+/* See infrun.h.  */
+
+std::string
+displaced_step_dump_bytes (const gdb_byte *buf, size_t len)
 {
-  int i;
+  std::string ret;
+
+  for (size_t i = 0; i < len; i++)
+    {
+      if (i == 0)
+	ret += string_printf ("%02x", buf[i]);
+      else
+	ret += string_printf (" %02x", buf[i]);
+    }
 
-  for (i = 0; i < len; i++)
-    fprintf_unfiltered (file, "%02x ", buf[i]);
-  fputs_unfiltered ("\n", file);
+  return ret;
 }
 
 /* Prepare to single-step, using displaced stepping.
@@ -1618,24 +1630,23 @@ displaced_step_dump_bytes (struct ui_fil
    Comments in the code for 'random signals' in handle_inferior_event
    explain how we handle this case instead.
 
-   Returns 1 if preparing was successful -- this thread is going to be
-   stepped now; 0 if displaced stepping this thread got queued; or -1
-   if this instruction can't be displaced stepped.  */
+   Returns DISPLACED_STEP_PREPARE_STATUS_OK if preparing was successful -- this
+   thread is going to be stepped now; DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE
+   if displaced stepping this thread got queued; or
+   DISPLACED_STEP_PREPARE_STATUS_CANT if this instruction can't be displaced
+   stepped.  */
 
-static int
+static displaced_step_prepare_status
 displaced_step_prepare_throw (thread_info *tp)
 {
   regcache *regcache = get_thread_regcache (tp);
   struct gdbarch *gdbarch = regcache->arch ();
-  const address_space *aspace = regcache->aspace ();
-  CORE_ADDR original, copy;
-  ULONGEST len;
-  struct displaced_step_closure *closure;
-  int status;
+  displaced_step_thread_state &disp_step_thread_state
+    = tp->displaced_step_state;
 
   /* We should never reach this function if the architecture does not
      support displaced stepping.  */
-  gdb_assert (gdbarch_displaced_step_copy_insn_p (gdbarch));
+  gdb_assert (gdbarch_supports_displaced_stepping (gdbarch));
 
   /* Nor if the thread isn't meant to step over a breakpoint.  */
   gdb_assert (tp->control.trap_expected);
@@ -1646,142 +1657,94 @@ displaced_step_prepare_throw (thread_inf
      jump/branch).  */
   tp->control.may_range_step = 0;
 
-  /* We have to displaced step one thread at a time, as we only have
-     access to a single scratch space per inferior.  */
-
-  displaced_step_inferior_state *displaced
-    = get_displaced_stepping_state (tp->inf);
+  /* We are about to start a displaced step for this thread.  If one is already
+     in progress, something's wrong.  */
+  gdb_assert (!disp_step_thread_state.in_progress ());
 
-  if (displaced->step_thread != nullptr)
+  if (tp->inf->displaced_step_state.unavailable)
     {
-      /* Already waiting for a displaced step to finish.  Defer this
-	 request and place in queue.  */
+      /* The gdbarch tells us it's not worth asking to try a prepare because
+	 it is likely that it will return unavailable, so don't bother asking.  */
 
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog,
-			    "displaced: deferring step of %s\n",
-			    target_pid_to_str (tp->ptid).c_str ());
+      displaced_debug_printf ("deferring step of %s",
+			      target_pid_to_str (tp->ptid).c_str ());
 
-      thread_step_over_chain_enqueue (tp);
-      return 0;
-    }
-  else
-    {
-      if (debug_displaced)
-	fprintf_unfiltered (gdb_stdlog,
-			    "displaced: stepping %s now\n",
-			    target_pid_to_str (tp->ptid).c_str ());
+      global_thread_step_over_chain_enqueue (tp);
+      return DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE;
     }
 
-  displaced_step_clear (displaced);
+  displaced_debug_printf ("displaced-stepping %s now",
+			  target_pid_to_str (tp->ptid).c_str ());
 
   scoped_restore_current_thread restore_thread;
 
   switch_to_thread (tp);
 
-  original = regcache_read_pc (regcache);
+  CORE_ADDR original_pc = regcache_read_pc (regcache);
+  CORE_ADDR displaced_pc;
 
-  copy = gdbarch_displaced_step_location (gdbarch);
-  len = gdbarch_max_insn_length (gdbarch);
+  displaced_step_prepare_status status
+    = gdbarch_displaced_step_prepare (gdbarch, tp, displaced_pc);
 
-  if (breakpoint_in_range_p (aspace, copy, len))
+  if (status == DISPLACED_STEP_PREPARE_STATUS_CANT)
     {
-      /* 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.  */
-      if (debug_displaced)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "displaced: breakpoint set in scratch pad.  "
-			      "Stepping over breakpoint in-line instead.\n");
-	}
-
-      return -1;
-    }
-
-  /* Save the original contents of the copy area.  */
-  displaced->step_saved_copy.resize (len);
-  status = target_read_memory (copy, displaced->step_saved_copy.data (), len);
-  if (status != 0)
-    throw_error (MEMORY_ERROR,
-		 _("Error accessing memory address %s (%s) for "
-		   "displaced-stepping scratch space."),
-		 paddress (gdbarch, copy), safe_strerror (status));
-  if (debug_displaced)
-    {
-      fprintf_unfiltered (gdb_stdlog, "displaced: saved %s: ",
-			  paddress (gdbarch, copy));
-      displaced_step_dump_bytes (gdb_stdlog,
-				 displaced->step_saved_copy.data (),
-				 len);
-    };
+      displaced_debug_printf ("failed to prepare (%s)",
+			      target_pid_to_str (tp->ptid).c_str ());
 
-  closure = gdbarch_displaced_step_copy_insn (gdbarch,
-					      original, copy, regcache);
-  if (closure == NULL)
-    {
-      /* 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 -1;
+      return DISPLACED_STEP_PREPARE_STATUS_CANT;
     }
+  else if (status == DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE)
+    {
+      /* Not enough displaced stepping resources available, defer this
+	 request by placing it the queue.  */
 
-  /* Save the information we need to fix things up if the step
-     succeeds.  */
-  displaced->step_thread = tp;
-  displaced->step_gdbarch = gdbarch;
-  displaced->step_closure = closure;
-  displaced->step_original = original;
-  displaced->step_copy = copy;
+      displaced_debug_printf ("not enough resources available, "
+			      "deferring step of %s",
+			      target_pid_to_str (tp->ptid).c_str ());
 
-  {
-    displaced_step_clear_cleanup cleanup (displaced);
+      global_thread_step_over_chain_enqueue (tp);
+
+      return DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE;
+    }
 
-    /* Resume execution at the copy.  */
-    regcache_write_pc (regcache, copy);
+  gdb_assert (status == DISPLACED_STEP_PREPARE_STATUS_OK);
 
-    cleanup.release ();
-  }
+  /* Save the information we need to fix things up if the step
+     succeeds.  */
+  disp_step_thread_state.set (gdbarch);
 
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: displaced pc to %s\n",
-			paddress (gdbarch, copy));
+  tp->inf->displaced_step_state.in_progress_count++;
+
+  displaced_debug_printf ("prepared successfully thread=%s, "
+			  "original_pc=%s, displaced_pc=%s",
+			  target_pid_to_str (tp->ptid).c_str (),
+			  paddress (gdbarch, original_pc),
+			  paddress (gdbarch, displaced_pc));
 
-  return 1;
+  return DISPLACED_STEP_PREPARE_STATUS_OK;
 }
 
 /* Wrapper for displaced_step_prepare_throw that disabled further
    attempts at displaced stepping if we get a memory error.  */
 
-static int
+static displaced_step_prepare_status
 displaced_step_prepare (thread_info *thread)
 {
-  int prepared = -1;
+  displaced_step_prepare_status status
+    = DISPLACED_STEP_PREPARE_STATUS_CANT;
 
   try
     {
-      prepared = displaced_step_prepare_throw (thread);
+      status = displaced_step_prepare_throw (thread);
     }
   catch (const gdb_exception_error &ex)
     {
-      struct displaced_step_inferior_state *displaced_state;
-
       if (ex.error != MEMORY_ERROR
 	  && ex.error != NOT_SUPPORTED_ERROR)
 	throw;
 
-      if (debug_infrun)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: disabling displaced stepping: %s\n",
-			      ex.what ());
-	}
+      infrun_debug_printf ("caught exception, disabling displaced stepping: %s",
+			   ex.what ());
 
       /* Be verbose if "set displaced-stepping" is "on", silent if
 	 "auto".  */
@@ -1792,100 +1755,52 @@ displaced_step_prepare (thread_info *thr
 	}
 
       /* Disable further displaced stepping attempts.  */
-      displaced_state
-	= get_displaced_stepping_state (thread->inf);
-      displaced_state->failed_before = 1;
+      thread->inf->displaced_step_state.failed_before = 1;
     }
 
-  return prepared;
-}
-
-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);
+  return status;
 }
 
-/* Restore the contents of the copy area for thread PTID.  */
-
-static void
-displaced_step_restore (struct displaced_step_inferior_state *displaced,
-			ptid_t ptid)
-{
-  ULONGEST len = gdbarch_max_insn_length (displaced->step_gdbarch);
-
-  write_memory_ptid (ptid, displaced->step_copy,
-		     displaced->step_saved_copy.data (), len);
-  if (debug_displaced)
-    fprintf_unfiltered (gdb_stdlog, "displaced: restored %s %s\n",
-			target_pid_to_str (ptid).c_str (),
-			paddress (displaced->step_gdbarch,
-				  displaced->step_copy));
-}
+/* If we displaced stepped an instruction successfully, adjust registers and
+   memory to yield the same effect the instruction would have had if we had
+   executed it at its original address, and return
+   DISPLACED_STEP_FINISH_STATUS_OK.  If the instruction didn't complete,
+   relocate the PC and return DISPLACED_STEP_FINISH_STATUS_NOT_EXECUTED.
 
-/* If we displaced stepped an instruction successfully, adjust
-   registers and memory to yield the same effect the instruction would
-   have had if we had executed it at its original address, and return
-   1.  If the instruction didn't complete, relocate the PC and return
-   -1.  If the thread wasn't displaced stepping, return 0.  */
+   If the thread wasn't displaced stepping, return
+   DISPLACED_STEP_FINISH_STATUS_OK as well.  */
 
-static int
-displaced_step_fixup (thread_info *event_thread, enum gdb_signal signal)
+static displaced_step_finish_status
+displaced_step_finish (thread_info *event_thread, enum gdb_signal signal)
 {
-  struct displaced_step_inferior_state *displaced
-    = get_displaced_stepping_state (event_thread->inf);
-  int ret;
+  displaced_step_thread_state *displaced = &event_thread->displaced_step_state;
 
-  /* Was this event for the thread we displaced?  */
-  if (displaced->step_thread != event_thread)
-    return 0;
-
-  displaced_step_clear_cleanup cleanup (displaced);
+  /* Was this thread performing a displaced step?  */
+  if (!displaced->in_progress ())
+    return DISPLACED_STEP_FINISH_STATUS_OK;
 
-  displaced_step_restore (displaced, displaced->step_thread->ptid);
+  gdb_assert (event_thread->inf->displaced_step_state.in_progress_count > 0);
+  event_thread->inf->displaced_step_state.in_progress_count--;
 
   /* Fixup may need to read memory/registers.  Switch to the thread
      that we're fixing up.  Also, target_stopped_by_watchpoint checks
-     the current thread.  */
+     the current thread, and displaced_step_restore performs ptid-dependent
+     memory accesses using current_inferior().  */
   switch_to_thread (event_thread);
 
-  /* Did the instruction complete successfully?  */
-  if (signal == GDB_SIGNAL_TRAP
-      && !(target_stopped_by_watchpoint ()
-	   && (gdbarch_have_nonsteppable_watchpoint (displaced->step_gdbarch)
-	       || target_have_steppable_watchpoint)))
-    {
-      /* Fix up the resulting state.  */
-      gdbarch_displaced_step_fixup (displaced->step_gdbarch,
-                                    displaced->step_closure,
-                                    displaced->step_original,
-                                    displaced->step_copy,
-                                    get_thread_regcache (displaced->step_thread));
-      ret = 1;
-    }
-  else
-    {
-      /* Since the instruction didn't complete, all we can do is
-         relocate the PC.  */
-      struct regcache *regcache = get_thread_regcache (event_thread);
-      CORE_ADDR pc = regcache_read_pc (regcache);
-
-      pc = displaced->step_original + (pc - displaced->step_copy);
-      regcache_write_pc (regcache, pc);
-      ret = -1;
-    }
+  displaced_step_reset_cleanup cleanup (displaced);
 
-  return ret;
+  /* Do the fixup, and release the resources acquired to do the displaced
+     step. */
+  return gdbarch_displaced_step_finish (displaced->get_original_gdbarch (),
+					event_thread, signal);
 }
 
 /* Data to be passed around while handling an event.  This data is
    discarded between events.  */
 struct execution_control_state
 {
+  process_stratum_target *target;
   ptid_t ptid;
   /* The thread that got the event, if this was a thread event; NULL
      otherwise.  */
@@ -1917,23 +1832,53 @@ reset_ecs (struct execution_control_stat
 
 static void keep_going_pass_signal (struct execution_control_state *ecs);
 static void prepare_to_wait (struct execution_control_state *ecs);
-static int keep_going_stepped_thread (struct thread_info *tp);
+static bool keep_going_stepped_thread (struct thread_info *tp);
 static step_over_what thread_still_needs_step_over (struct thread_info *tp);
 
 /* Are there any pending step-over requests?  If so, run all we can
    now and return true.  Otherwise, return false.  */
 
-static int
+static bool
 start_step_over (void)
 {
-  struct thread_info *tp, *next;
+  INFRUN_SCOPED_DEBUG_ENTER_EXIT;
+
+  thread_info *next;
 
   /* Don't start a new step-over if we already have an in-line
      step-over operation ongoing.  */
   if (step_over_info_valid_p ())
-    return 0;
+    return false;
 
-  for (tp = step_over_queue_head; tp != NULL; tp = next)
+  /* Steal the global thread step over chain.  As we try to initiate displaced
+     steps, threads will be enqueued in the global chain if no buffers are
+     available.  If we iterated on the global chain directly, we might iterate
+     indefinitely.  */
+  thread_info *threads_to_step = global_thread_step_over_chain_head;
+  global_thread_step_over_chain_head = NULL;
+
+  infrun_debug_printf ("stealing global queue of threads to step, length = %d",
+		       thread_step_over_chain_length (threads_to_step));
+
+  bool started = false;
+
+  /* On scope exit (whatever the reason, return or exception), if there are
+     threads left in the THREADS_TO_STEP chain, put back these threads in the
+     global list.  */
+  SCOPE_EXIT
+    {
+      if (threads_to_step == nullptr)
+	infrun_debug_printf ("step-over queue now empty");
+      else
+	{
+	  infrun_debug_printf ("putting back %d threads to step in global queue",
+			       thread_step_over_chain_length (threads_to_step));
+
+	  global_thread_step_over_chain_enqueue_chain (threads_to_step);
+	}
+    };
+
+  for (thread_info *tp = threads_to_step; tp != NULL; tp = next)
     {
       struct execution_control_state ecss;
       struct execution_control_state *ecs = &ecss;
@@ -1942,12 +1887,23 @@ start_step_over (void)
 
       gdb_assert (!tp->stop_requested);
 
-      next = thread_step_over_chain_next (tp);
+      next = thread_step_over_chain_next (threads_to_step, tp);
 
-      /* If this inferior already has a displaced step in process,
-	 don't start a new one.  */
-      if (displaced_step_in_progress (tp->inf))
-	continue;
+      if (tp->inf->displaced_step_state.unavailable)
+	{
+	  /* The arch told us to not even try preparing another displaced step
+	     for this inferior.  Just leave the thread in THREADS_TO_STEP, it
+	     will get moved to the global chain on scope exit.  */
+	  continue;
+	}
+
+      /* Remove thread from the THREADS_TO_STEP chain.  If anything goes wrong
+	 while we try to prepare the displaced step, we don't add it back to
+	 the global step over chain.  This is to avoid a thread staying in the
+	 step over chain indefinitely if something goes wrong when resuming it
+	 If the error is intermittent and it still needs a step over, it will
+	 get enqueued again when we try to resume it normally.  */
+      thread_step_over_chain_remove (&threads_to_step, tp);
 
       step_what = thread_still_needs_step_over (tp);
       must_be_in_line = ((step_what & STEP_OVER_WATCHPOINT)
@@ -1957,16 +1913,10 @@ start_step_over (void)
       /* We currently stop all threads of all processes to step-over
 	 in-line.  If we need to start a new in-line step-over, let
 	 any pending displaced steps finish first.  */
-      if (must_be_in_line && displaced_step_in_progress_any_inferior ())
-	return 0;
-
-      thread_step_over_chain_remove (tp);
-
-      if (step_over_queue_head == NULL)
+      if (must_be_in_line && displaced_step_in_progress_any_thread ())
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: step-over queue now empty\n");
+	  global_thread_step_over_chain_enqueue (tp);
+	  continue;
 	}
 
       if (tp->control.trap_expected
@@ -1982,10 +1932,8 @@ start_step_over (void)
 			  tp->executing);
 	}
 
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: resuming [%s] for step-over\n",
-			    target_pid_to_str (tp->ptid).c_str ());
+      infrun_debug_printf ("resuming [%s] for step-over",
+			   target_pid_to_str (tp->ptid).c_str ());
 
       /* keep_going_pass_signal skips the step-over if the breakpoint
 	 is no longer inserted.  In all-stop, we want to keep looking
@@ -2003,13 +1951,27 @@ start_step_over (void)
       if (!ecs->wait_some_more)
 	error (_("Command aborted."));
 
-      gdb_assert (tp->resumed);
+      /* If the thread's step over could not be initiated because no buffers
+	 were available, it was re-added to the global step over chain.  */
+      if (tp->resumed)
+	{
+	  infrun_debug_printf ("[%s] was resumed.",
+			       target_pid_to_str (tp->ptid).c_str ());
+	  gdb_assert (!thread_is_in_step_over_chain (tp));
+	}
+      else
+	{
+	  infrun_debug_printf ("[%s] was NOT resumed.",
+			       target_pid_to_str (tp->ptid).c_str ());
+	  gdb_assert (thread_is_in_step_over_chain (tp));
+	}
 
       /* If we started a new in-line step-over, we're done.  */
       if (step_over_info_valid_p ())
 	{
 	  gdb_assert (tp->control.trap_expected);
-	  return 1;
+	  started = true;
+	  break;
 	}
 
       if (!target_is_non_stop_p ())
@@ -2022,7 +1984,8 @@ start_step_over (void)
 	  /* With remote targets (at least), in all-stop, we can't
 	     issue any further remote commands until the program stops
 	     again.  */
-	  return 1;
+	  started = true;
+	  break;
 	}
 
       /* Either the thread no longer needed a step-over, or a new
@@ -2031,15 +1994,17 @@ start_step_over (void)
 	 displaced step on a thread of other process. */
     }
 
-  return 0;
+  return started;
 }
 
 /* Update global variables holding ptids to hold NEW_PTID if they were
    holding OLD_PTID.  */
 static void
-infrun_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
+infrun_thread_ptid_changed (process_stratum_target *target,
+			    ptid_t old_ptid, ptid_t new_ptid)
 {
-  if (inferior_ptid == old_ptid)
+  if (inferior_ptid == old_ptid
+      && current_inferior ()->process_target () == target)
     inferior_ptid = new_ptid;
 }
 
@@ -2070,10 +2035,11 @@ show_scheduler_mode (struct ui_file *fil
 static void
 set_schedlock_func (const char *args, int from_tty, struct cmd_list_element *c)
 {
-  if (!target_can_lock_scheduler)
+  if (!target_can_lock_scheduler ())
     {
       scheduler_mode = schedlock_off;
-      error (_("Target '%s' cannot support this command."), target_shortname);
+      error (_("Target '%s' cannot support this command."),
+	     target_shortname ());
     }
 }
 
@@ -2083,15 +2049,15 @@ set_schedlock_func (const char *args, in
 bool sched_multi = false;
 
 /* Try to setup for software single stepping over the specified location.
-   Return 1 if target_resume() should use hardware single step.
+   Return true if target_resume() should use hardware single step.
 
    GDBARCH the current gdbarch.
    PC the location to step over.  */
 
-static int
+static bool
 maybe_software_singlestep (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  int hw_step = 1;
+  bool hw_step = true;
 
   if (execution_direction == EXEC_FORWARD
       && gdbarch_software_single_step_p (gdbarch))
@@ -2142,6 +2108,16 @@ user_visible_resume_ptid (int step)
   return resume_ptid;
 }
 
+/* See infrun.h.  */
+
+process_stratum_target *
+user_visible_resume_target (ptid_t resume_ptid)
+{
+  return (resume_ptid == minus_one_ptid && sched_multi
+	  ? NULL
+	  : current_inferior ()->process_target ());
+}
+
 /* Return a ptid representing the set of threads that we will resume,
    in the perspective of the target, assuming run control handling
    does not require leaving some threads stopped (e.g., stepping past
@@ -2165,7 +2141,7 @@ internal_resume_ptid (int user_step)
    bookkeeping.  */
 
 static void
-do_target_resume (ptid_t resume_ptid, int step, enum gdb_signal sig)
+do_target_resume (ptid_t resume_ptid, bool step, enum gdb_signal sig)
 {
   struct thread_info *tp = inferior_thread ();
 
@@ -2187,7 +2163,7 @@ do_target_resume (ptid_t resume_ptid, in
 
      Likewise if we're displaced stepping, otherwise a trap for a
      breakpoint in a signal handler might be confused with the
-     displaced step finishing.  We don't make the displaced_step_fixup
+     displaced step finishing.  We don't make the displaced_step_finish
      step distinguish the cases instead, because:
 
      - a backtrace while stopped in the signal handler would show the
@@ -2205,7 +2181,8 @@ do_target_resume (ptid_t resume_ptid, in
 
   target_resume (resume_ptid, step, sig);
 
-  target_commit_resume ();
+  if (target_can_async_p ())
+    target_async (1);
 }
 
 /* Resume the inferior.  SIG is the signal to give the inferior
@@ -2218,7 +2195,6 @@ resume_1 (enum gdb_signal sig)
   struct regcache *regcache = get_current_regcache ();
   struct gdbarch *gdbarch = regcache->arch ();
   struct thread_info *tp = inferior_thread ();
-  CORE_ADDR pc = regcache_read_pc (regcache);
   const address_space *aspace = regcache->aspace ();
   ptid_t resume_ptid;
   /* This represents the user's step vs continue request.  When
@@ -2229,27 +2205,22 @@ resume_1 (enum gdb_signal sig)
      This can decay from a step to a continue, if e.g., we need to
      implement single-stepping with breakpoints (software
      single-step).  */
-  int step;
+  bool step;
 
   gdb_assert (!tp->stop_requested);
   gdb_assert (!thread_is_in_step_over_chain (tp));
 
   if (tp->suspend.waitstatus_pending_p)
     {
-      if (debug_infrun)
-	{
-	  std::string statstr
-	    = target_waitstatus_to_string (&tp->suspend.waitstatus);
-
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: resume: thread %s has pending wait "
-			      "status %s (currently_stepping=%d).\n",
-			      target_pid_to_str (tp->ptid).c_str (),
-			      statstr.c_str (),
-			      currently_stepping (tp));
-	}
+      infrun_debug_printf
+	("thread %s has pending wait "
+	 "status %s (currently_stepping=%d).",
+	 target_pid_to_str (tp->ptid).c_str (),
+	 target_waitstatus_to_string (&tp->suspend.waitstatus).c_str (),
+	 currently_stepping (tp));
 
-      tp->resumed = 1;
+      tp->inf->process_target ()->threads_executing = true;
+      tp->resumed = true;
 
       /* FIXME: What should we do if we are supposed to resume this
 	 thread with a signal?  Maybe we should maintain a queue of
@@ -2290,20 +2261,18 @@ resume_1 (enum gdb_signal sig)
 	 Eventually, we'll see a TARGET_WAITKIND_VFORK_DONE event for
 	 the parent, and tell it to `keep_going', which automatically
 	 re-sets it stepping.  */
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: resume : clear step\n");
-      step = 0;
+      infrun_debug_printf ("resume : clear step");
+      step = false;
     }
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: resume (step=%d, signal=%s), "
-			"trap_expected=%d, current thread [%s] at %s\n",
-			step, gdb_signal_to_symbol_string (sig),
-			tp->control.trap_expected,
-			target_pid_to_str (inferior_ptid).c_str (),
-			paddress (gdbarch, pc));
+  CORE_ADDR pc = regcache_read_pc (regcache);
+
+  infrun_debug_printf ("step=%d, signal=%s, trap_expected=%d, "
+		       "current thread [%s] at %s",
+		       step, gdb_signal_to_symbol_string (sig),
+		       tp->control.trap_expected,
+		       target_pid_to_str (inferior_ptid).c_str (),
+		       paddress (gdbarch, pc));
 
   /* Normally, by the time we reach `resume', the breakpoints are either
      removed or inserted, as appropriate.  The exception is if we're sitting
@@ -2327,10 +2296,8 @@ resume_1 (enum gdb_signal sig)
 	     signal handler (or hit some other event).  We'll delete
 	     the step-resume breakpoint then.  */
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: resume: skipping permanent breakpoint, "
-				"deliver signal first\n");
+	  infrun_debug_printf ("resume: skipping permanent breakpoint, "
+			       "deliver signal first");
 
 	  clear_step_over_info ();
 	  tp->control.trap_expected = 0;
@@ -2352,9 +2319,7 @@ resume_1 (enum gdb_signal sig)
 	{
 	  /* There's no signal to pass, we can go ahead and skip the
 	     permanent breakpoint manually.  */
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: resume: skipping permanent breakpoint\n");
+	  infrun_debug_printf ("skipping permanent breakpoint");
 	  gdbarch_skip_permanent_breakpoint (gdbarch, regcache);
 	  /* Update pc to reflect the new address from which we will
 	     execute instructions.  */
@@ -2376,8 +2341,8 @@ resume_1 (enum gdb_signal sig)
 	      insert_breakpoints ();
 
 	      resume_ptid = internal_resume_ptid (user_step);
-	      do_target_resume (resume_ptid, 0, GDB_SIGNAL_0);
-	      tp->resumed = 1;
+	      do_target_resume (resume_ptid, false, GDB_SIGNAL_0);
+	      tp->resumed = true;
 	      return;
 	    }
 	}
@@ -2388,8 +2353,8 @@ resume_1 (enum gdb_signal sig)
   if (tp->control.trap_expected || bpstat_should_step ())
     tp->control.may_range_step = 0;
 
-  /* If enabled, step over breakpoints by executing a copy of the
-     instruction at a different address.
+  /* If displaced stepping is enabled, step over breakpoints by executing a
+     copy of the instruction at a different address.
 
      We can't use displaced stepping when we have a signal to deliver;
      the comments for displaced_step_prepare explain why.  The
@@ -2405,18 +2370,17 @@ resume_1 (enum gdb_signal sig)
       && sig == GDB_SIGNAL_0
       && !current_inferior ()->waiting_for_vfork_done)
     {
-      int prepared = displaced_step_prepare (tp);
+      displaced_step_prepare_status prepare_status
+	= displaced_step_prepare (tp);
 
-      if (prepared == 0)
+      if (prepare_status == DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"Got placed in step-over queue\n");
+	  infrun_debug_printf ("Got placed in step-over queue");
 
 	  tp->control.trap_expected = 0;
 	  return;
 	}
-      else if (prepared < 0)
+      else if (prepare_status == DISPLACED_STEP_PREPARE_STATUS_CANT)
 	{
 	  /* Fallback to stepping over the breakpoint in-line.  */
 
@@ -2430,18 +2394,17 @@ resume_1 (enum gdb_signal sig)
 
 	  insert_breakpoints ();
 	}
-      else if (prepared > 0)
+      else if (prepare_status == DISPLACED_STEP_PREPARE_STATUS_OK)
 	{
-	  struct displaced_step_inferior_state *displaced;
-
 	  /* Update pc to reflect the new address from which we will
 	     execute instructions due to displaced stepping.  */
 	  pc = regcache_read_pc (get_thread_regcache (tp));
 
-	  displaced = get_displaced_stepping_state (tp->inf);
-	  step = gdbarch_displaced_step_hw_singlestep (gdbarch,
-						       displaced->step_closure);
+	  step = gdbarch_displaced_step_hw_singlestep (gdbarch);
 	}
+      else
+	gdb_assert_not_reached (_("Invalid displaced_step_prepare_status "
+				  "value."));
     }
 
   /* Do we need to do it the hard way, w/temp breakpoints?  */
@@ -2477,7 +2440,7 @@ resume_1 (enum gdb_signal sig)
       && step_over_info_valid_p ())
     {
       /* If we have nested signals or a pending signal is delivered
-	 immediately after a handler returns, might might already have
+	 immediately after a handler returns, might already have
 	 a step-resume breakpoint set on the earlier handler.  We cannot
 	 set another step-resume breakpoint; just continue on until the
 	 original breakpoint is hit.  */
@@ -2540,7 +2503,7 @@ resume_1 (enum gdb_signal sig)
 	 record that we tried to step a breakpoint instruction, so
 	 that adjust_pc_after_break doesn't end up confused.
 
-         - In non-stop if we insert a breakpoint (e.g., a step-resume)
+	 - In non-stop if we insert a breakpoint (e.g., a step-resume)
 	 in one thread after another thread that was stepping had been
 	 momentarily paused for a step-over.  When we re-resume the
 	 stepping thread, it may be resumed from that address with a
@@ -2548,10 +2511,8 @@ resume_1 (enum gdb_signal sig)
 	 gdb.threads/non-stop-fair-events.exp, on targets that don't
 	 do displaced stepping.  */
 
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: resume: [%s] stepped breakpoint\n",
-			    target_pid_to_str (tp->ptid).c_str ());
+      infrun_debug_printf ("resume: [%s] stepped breakpoint",
+			   target_pid_to_str (tp->ptid).c_str ());
 
       tp->stepped_breakpoint = 1;
 
@@ -2559,7 +2520,7 @@ resume_1 (enum gdb_signal sig)
 	 executing it normally.  But if this one cannot, just
 	 continue and we will hit it anyway.  */
       if (gdbarch_cannot_step_breakpoint (gdbarch))
-	step = 0;
+	step = false;
     }
 
   if (debug_displaced
@@ -2572,10 +2533,11 @@ resume_1 (enum gdb_signal sig)
       CORE_ADDR actual_pc = regcache_read_pc (resume_regcache);
       gdb_byte buf[4];
 
-      fprintf_unfiltered (gdb_stdlog, "displaced: run %s: ",
-			  paddress (resume_gdbarch, actual_pc));
       read_memory (actual_pc, buf, sizeof (buf));
-      displaced_step_dump_bytes (gdb_stdlog, buf, sizeof (buf));
+      displaced_debug_printf ("run %s: %s",
+			      paddress (resume_gdbarch, actual_pc),
+			      displaced_step_dump_bytes
+				(buf, sizeof (buf)).c_str ());
     }
 
   if (tp->control.may_range_step)
@@ -2589,7 +2551,7 @@ resume_1 (enum gdb_signal sig)
     }
 
   do_target_resume (resume_ptid, step, sig);
-  tp->resumed = 1;
+  tp->resumed = true;
 }
 
 /* Resume the inferior.  SIG is the signal to give the inferior
@@ -2652,10 +2614,7 @@ new_stop_id (void)
 static void
 clear_proceed_status_thread (struct thread_info *tp)
 {
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: clear_proceed_status_thread (%s)\n",
-			target_pid_to_str (tp->ptid).c_str ());
+  infrun_debug_printf ("%s", target_pid_to_str (tp->ptid).c_str ());
 
   /* If we're starting a new sequence, then the previous finished
      single-step is no longer relevant.  */
@@ -2663,28 +2622,20 @@ clear_proceed_status_thread (struct thre
     {
       if (tp->suspend.stop_reason == TARGET_STOPPED_BY_SINGLE_STEP)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: clear_proceed_status: pending "
-				"event of %s was a finished step. "
-				"Discarding.\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("pending event of %s was a finished step. "
+			       "Discarding.",
+			       target_pid_to_str (tp->ptid).c_str ());
 
 	  tp->suspend.waitstatus_pending_p = 0;
 	  tp->suspend.stop_reason = TARGET_STOPPED_BY_NO_REASON;
 	}
-      else if (debug_infrun)
+      else
 	{
-	  std::string statstr
-	    = target_waitstatus_to_string (&tp->suspend.waitstatus);
-
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: clear_proceed_status_thread: thread %s "
-			      "has pending wait status %s "
-			      "(currently_stepping=%d).\n",
-			      target_pid_to_str (tp->ptid).c_str (),
-			      statstr.c_str (),
-			      currently_stepping (tp));
+	  infrun_debug_printf
+	    ("thread %s has pending wait status %s (currently_stepping=%d).",
+	     target_pid_to_str (tp->ptid).c_str (),
+	     target_waitstatus_to_string (&tp->suspend.waitstatus).c_str (),
+	     currently_stepping (tp));
 	}
     }
 
@@ -2734,10 +2685,12 @@ clear_proceed_status (int step)
   if (!non_stop && inferior_ptid != null_ptid)
     {
       ptid_t resume_ptid = user_visible_resume_ptid (step);
+      process_stratum_target *resume_target
+	= user_visible_resume_target (resume_ptid);
 
       /* In all-stop mode, delete the per-thread status of all threads
 	 we're about to resume, implicitly and explicitly.  */
-      for (thread_info *tp : all_non_exited_threads (resume_ptid))
+      for (thread_info *tp : all_non_exited_threads (resume_target, resume_ptid))
 	clear_proceed_status_thread (tp);
     }
 
@@ -2763,7 +2716,7 @@ clear_proceed_status (int step)
    stepping-over in order to make progress.  If the breakpoint is gone
    meanwhile, we can skip the whole step-over dance.  */
 
-static int
+static bool
 thread_still_needs_step_over_bp (struct thread_info *tp)
 {
   if (tp->stepping_over_breakpoint)
@@ -2773,12 +2726,12 @@ thread_still_needs_step_over_bp (struct
       if (breakpoint_here_p (regcache->aspace (),
 			     regcache_read_pc (regcache))
 	  == ordinary_breakpoint_here)
-	return 1;
+	return true;
 
       tp->stepping_over_breakpoint = 0;
     }
 
-  return 0;
+  return false;
 }
 
 /* Check whether thread TP still needs to start a step-over in order
@@ -2794,7 +2747,7 @@ thread_still_needs_step_over (struct thr
     what |= STEP_OVER_BREAKPOINT;
 
   if (tp->stepping_over_watchpoint
-      && !target_have_steppable_watchpoint)
+      && !target_have_steppable_watchpoint ())
     what |= STEP_OVER_WATCHPOINT;
 
   return what;
@@ -2803,7 +2756,7 @@ thread_still_needs_step_over (struct thr
 /* Returns true if scheduler locking applies.  STEP indicates whether
    we're about to do a step/next-like command to a thread.  */
 
-static int
+static bool
 schedlock_applies (struct thread_info *tp)
 {
   return (scheduler_mode == schedlock_on
@@ -2814,6 +2767,278 @@ schedlock_applies (struct thread_info *t
 					    execution_direction)));
 }
 
+/* Set process_stratum_target::COMMIT_RESUMED_STATE in all target
+   stacks that have threads executing and don't have threads with
+   pending events.  */
+
+static void
+maybe_set_commit_resumed_all_targets ()
+{
+  scoped_restore_current_thread restore_thread;
+
+  for (inferior *inf : all_non_exited_inferiors ())
+    {
+      process_stratum_target *proc_target = inf->process_target ();
+
+      if (proc_target->commit_resumed_state)
+	{
+	  /* We already set this in a previous iteration, via another
+	     inferior sharing the process_stratum target.  */
+	  continue;
+	}
+
+      /* If the target has no resumed threads, it would be useless to
+	 ask it to commit the resumed threads.  */
+      if (!proc_target->threads_executing)
+	{
+	  infrun_debug_printf ("not requesting commit-resumed for target "
+			       "%s, no resumed threads",
+			       proc_target->shortname ());
+	  continue;
+	}
+
+      /* As an optimization, if a thread from this target has some
+	 status to report, handle it before requiring the target to
+	 commit its resumed threads: handling the status might lead to
+	 resuming more threads.  */
+      bool has_thread_with_pending_status = false;
+      for (thread_info *thread : all_non_exited_threads (proc_target))
+	if (thread->resumed && thread->suspend.waitstatus_pending_p)
+	  {
+	    has_thread_with_pending_status = true;
+	    break;
+	  }
+
+      if (has_thread_with_pending_status)
+	{
+	  infrun_debug_printf ("not requesting commit-resumed for target %s, a"
+			       " thread has a pending waitstatus",
+			       proc_target->shortname ());
+	  continue;
+	}
+
+      switch_to_inferior_no_thread (inf);
+
+      if (target_has_pending_events ())
+	{
+	  infrun_debug_printf ("not requesting commit-resumed for target %s, "
+			       "target has pending events",
+			       proc_target->shortname ());
+	  continue;
+	}
+
+      infrun_debug_printf ("enabling commit-resumed for target %s",
+			   proc_target->shortname ());
+
+      proc_target->commit_resumed_state = true;
+    }
+}
+
+/* See infrun.h.  */
+
+void
+maybe_call_commit_resumed_all_targets ()
+{
+  scoped_restore_current_thread restore_thread;
+
+  for (inferior *inf : all_non_exited_inferiors ())
+    {
+      process_stratum_target *proc_target = inf->process_target ();
+
+      if (!proc_target->commit_resumed_state)
+	continue;
+
+      switch_to_inferior_no_thread (inf);
+
+      infrun_debug_printf ("calling commit_resumed for target %s",
+			   proc_target->shortname());
+
+      target_commit_resumed ();
+    }
+}
+
+/* To track nesting of scoped_disable_commit_resumed objects, ensuring
+   that only the outermost one attempts to re-enable
+   commit-resumed.  */
+static bool enable_commit_resumed = true;
+
+/* See infrun.h.  */
+
+scoped_disable_commit_resumed::scoped_disable_commit_resumed
+  (const char *reason)
+  : m_reason (reason),
+    m_prev_enable_commit_resumed (enable_commit_resumed)
+{
+  infrun_debug_printf ("reason=%s", m_reason);
+
+  enable_commit_resumed = false;
+
+  for (inferior *inf : all_non_exited_inferiors ())
+    {
+      process_stratum_target *proc_target = inf->process_target ();
+
+      if (m_prev_enable_commit_resumed)
+	{
+	  /* This is the outermost instance: force all
+	     COMMIT_RESUMED_STATE to false.  */
+	  proc_target->commit_resumed_state = false;
+	}
+      else
+	{
+	  /* This is not the outermost instance, we expect
+	     COMMIT_RESUMED_STATE to have been cleared by the
+	     outermost instance.  */
+	  gdb_assert (!proc_target->commit_resumed_state);
+	}
+    }
+}
+
+/* See infrun.h.  */
+
+void
+scoped_disable_commit_resumed::reset ()
+{
+  if (m_reset)
+    return;
+  m_reset = true;
+
+  infrun_debug_printf ("reason=%s", m_reason);
+
+  gdb_assert (!enable_commit_resumed);
+
+  enable_commit_resumed = m_prev_enable_commit_resumed;
+
+  if (m_prev_enable_commit_resumed)
+    {
+      /* This is the outermost instance, re-enable
+         COMMIT_RESUMED_STATE on the targets where it's possible.  */
+      maybe_set_commit_resumed_all_targets ();
+    }
+  else
+    {
+      /* This is not the outermost instance, we expect
+	 COMMIT_RESUMED_STATE to still be false.  */
+      for (inferior *inf : all_non_exited_inferiors ())
+	{
+	  process_stratum_target *proc_target = inf->process_target ();
+	  gdb_assert (!proc_target->commit_resumed_state);
+	}
+    }
+}
+
+/* See infrun.h.  */
+
+scoped_disable_commit_resumed::~scoped_disable_commit_resumed ()
+{
+  reset ();
+}
+
+/* See infrun.h.  */
+
+void
+scoped_disable_commit_resumed::reset_and_commit ()
+{
+  reset ();
+  maybe_call_commit_resumed_all_targets ();
+}
+
+/* See infrun.h.  */
+
+scoped_enable_commit_resumed::scoped_enable_commit_resumed
+  (const char *reason)
+  : m_reason (reason),
+    m_prev_enable_commit_resumed (enable_commit_resumed)
+{
+  infrun_debug_printf ("reason=%s", m_reason);
+
+  if (!enable_commit_resumed)
+    {
+      enable_commit_resumed = true;
+
+      /* Re-enable COMMIT_RESUMED_STATE on the targets where it's
+	 possible.  */
+      maybe_set_commit_resumed_all_targets ();
+
+      maybe_call_commit_resumed_all_targets ();
+    }
+}
+
+/* See infrun.h.  */
+
+scoped_enable_commit_resumed::~scoped_enable_commit_resumed ()
+{
+  infrun_debug_printf ("reason=%s", m_reason);
+
+  gdb_assert (enable_commit_resumed);
+
+  enable_commit_resumed = m_prev_enable_commit_resumed;
+
+  if (!enable_commit_resumed)
+    {
+      /* Force all COMMIT_RESUMED_STATE back to false.  */
+      for (inferior *inf : all_non_exited_inferiors ())
+	{
+	  process_stratum_target *proc_target = inf->process_target ();
+	  proc_target->commit_resumed_state = false;
+	}
+    }
+}
+
+/* Check that all the targets we're about to resume are in non-stop
+   mode.  Ideally, we'd only care whether all targets support
+   target-async, but we're not there yet.  E.g., stop_all_threads
+   doesn't know how to handle all-stop targets.  Also, the remote
+   protocol in all-stop mode is synchronous, irrespective of
+   target-async, which means that things like a breakpoint re-set
+   triggered by one target would try to read memory from all targets
+   and fail.  */
+
+static void
+check_multi_target_resumption (process_stratum_target *resume_target)
+{
+  if (!non_stop && resume_target == nullptr)
+    {
+      scoped_restore_current_thread restore_thread;
+
+      /* This is used to track whether we're resuming more than one
+	 target.  */
+      process_stratum_target *first_connection = nullptr;
+
+      /* The first inferior we see with a target that does not work in
+	 always-non-stop mode.  */
+      inferior *first_not_non_stop = nullptr;
+
+      for (inferior *inf : all_non_exited_inferiors ())
+	{
+	  switch_to_inferior_no_thread (inf);
+
+	  if (!target_has_execution ())
+	    continue;
+
+	  process_stratum_target *proc_target
+	    = current_inferior ()->process_target();
+
+	  if (!target_is_non_stop_p ())
+	    first_not_non_stop = inf;
+
+	  if (first_connection == nullptr)
+	    first_connection = proc_target;
+	  else if (first_connection != proc_target
+		   && first_not_non_stop != nullptr)
+	    {
+	      switch_to_inferior_no_thread (first_not_non_stop);
+
+	      proc_target = current_inferior ()->process_target();
+
+	      error (_("Connection %d (%s) does not support "
+		       "multi-target resumption."),
+		     proc_target->connection_number,
+		     make_target_connection_string (proc_target).c_str ());
+	    }
+	}
+    }
+}
+
 /* Basic routine for continuing the program in various fashions.
 
    ADDR is the address to resume at, or -1 for resume where stopped.
@@ -2825,13 +3050,14 @@ schedlock_applies (struct thread_info *t
 void
 proceed (CORE_ADDR addr, enum gdb_signal siggnal)
 {
+  INFRUN_SCOPED_DEBUG_ENTER_EXIT;
+
   struct regcache *regcache;
   struct gdbarch *gdbarch;
   CORE_ADDR pc;
-  ptid_t resume_ptid;
   struct execution_control_state ecss;
   struct execution_control_state *ecs = &ecss;
-  int started;
+  bool started;
 
   /* If we're stopped at a fork/vfork, follow the branch set by the
      "set follow-fork-mode" command; otherwise, we'll just proceed
@@ -2841,7 +3067,7 @@ proceed (CORE_ADDR addr, enum gdb_signal
       /* The target for some reason decided not to resume.  */
       normal_stop ();
       if (target_can_async_p ())
-	inferior_event_handler (INF_EXEC_COMPLETE, NULL);
+	inferior_event_handler (INF_EXEC_COMPLETE);
       return;
     }
 
@@ -2852,7 +3078,8 @@ proceed (CORE_ADDR addr, enum gdb_signal
   gdbarch = regcache->arch ();
   const address_space *aspace = regcache->aspace ();
 
-  pc = regcache_read_pc (regcache);
+  pc = regcache_read_pc_protected (regcache);
+
   thread_info *cur_thr = inferior_thread ();
 
   /* Fill in with reasonable starting values.  */
@@ -2860,6 +3087,13 @@ proceed (CORE_ADDR addr, enum gdb_signal
 
   gdb_assert (!thread_is_in_step_over_chain (cur_thr));
 
+  ptid_t resume_ptid
+    = user_visible_resume_ptid (cur_thr->control.stepping_command);
+  process_stratum_target *resume_target
+    = user_visible_resume_target (resume_ptid);
+
+  check_multi_target_resumption (resume_target);
+
   if (addr == (CORE_ADDR) -1)
     {
       if (pc == cur_thr->suspend.stop_pc
@@ -2889,12 +3123,10 @@ proceed (CORE_ADDR addr, enum gdb_signal
   if (siggnal != GDB_SIGNAL_DEFAULT)
     cur_thr->suspend.stop_signal = siggnal;
 
-  resume_ptid = user_visible_resume_ptid (cur_thr->control.stepping_command);
-
   /* If an exception is thrown from this point on, make sure to
      propagate GDB's knowledge of the executing state to the
      frontend/user running state.  */
-  scoped_finish_thread_state finish_state (resume_ptid);
+  scoped_finish_thread_state finish_state (resume_target, resume_ptid);
 
   /* Even if RESUME_PTID is a wildcard, and we end up resuming fewer
      threads (e.g., we might need to set threads stepping over
@@ -2903,13 +3135,10 @@ proceed (CORE_ADDR addr, enum gdb_signal
      inferior function, as in that case we pretend the inferior
      doesn't run at all.  */
   if (!cur_thr->control.in_infcall)
-   set_running (resume_ptid, 1);
+    set_running (resume_target, resume_ptid, true);
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: proceed (addr=%s, signal=%s)\n",
-			paddress (gdbarch, addr),
-			gdb_signal_to_symbol_string (siggnal));
+  infrun_debug_printf ("addr=%s, signal=%s", paddress (gdbarch, addr),
+		       gdb_signal_to_symbol_string (siggnal));
 
   annotate_starting ();
 
@@ -2938,8 +3167,11 @@ proceed (CORE_ADDR addr, enum gdb_signal
      threads.  */
   if (!non_stop && !schedlock_applies (cur_thr))
     {
-      for (thread_info *tp : all_non_exited_threads (resume_ptid))
+      for (thread_info *tp : all_non_exited_threads (resume_target,
+						     resume_ptid))
 	{
+	  switch_to_thread_no_regs (tp);
+
 	  /* Ignore the current thread here.  It's handled
 	     afterwards.  */
 	  if (tp == cur_thr)
@@ -2950,29 +3182,29 @@ proceed (CORE_ADDR addr, enum gdb_signal
 
 	  gdb_assert (!thread_is_in_step_over_chain (tp));
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: need to step-over [%s] first\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("need to step-over [%s] first",
+			       target_pid_to_str (tp->ptid).c_str ());
 
-	  thread_step_over_chain_enqueue (tp);
+	  global_thread_step_over_chain_enqueue (tp);
 	}
+
+      switch_to_thread (cur_thr);
     }
 
   /* Enqueue the current thread last, so that we move all other
      threads over their breakpoints first.  */
   if (cur_thr->stepping_over_breakpoint)
-    thread_step_over_chain_enqueue (cur_thr);
+    global_thread_step_over_chain_enqueue (cur_thr);
 
   /* If the thread isn't started, we'll still need to set its prev_pc,
      so that switch_back_to_stepped_thread knows the thread hasn't
      advanced.  Must do this before resuming any thread, as in
      all-stop/remote, once we resume we can't send any other packet
      until the target stops again.  */
-  cur_thr->prev_pc = regcache_read_pc (regcache);
+  cur_thr->prev_pc = regcache_read_pc_protected (regcache);
 
   {
-    scoped_restore save_defer_tc = make_scoped_defer_target_commit_resume ();
+    scoped_disable_commit_resumed disable_commit_resumed ("proceeding");
 
     started = start_step_over ();
 
@@ -2989,40 +3221,47 @@ proceed (CORE_ADDR addr, enum gdb_signal
       }
     else if (!non_stop && target_is_non_stop_p ())
       {
+	INFRUN_SCOPED_DEBUG_START_END
+	  ("resuming threads, all-stop-on-top-of-non-stop");
+
 	/* In all-stop, but the target is always in non-stop mode.
 	   Start all other threads that are implicitly resumed too.  */
-      for (thread_info *tp : all_non_exited_threads (resume_ptid))
-        {
-	  if (tp->resumed)
-	    {
-	      if (debug_infrun)
-		fprintf_unfiltered (gdb_stdlog,
-				    "infrun: proceed: [%s] resumed\n",
-				    target_pid_to_str (tp->ptid).c_str ());
-	      gdb_assert (tp->executing || tp->suspend.waitstatus_pending_p);
-	      continue;
-	    }
+	for (thread_info *tp : all_non_exited_threads (resume_target,
+						       resume_ptid))
+	  {
+	    switch_to_thread_no_regs (tp);
 
-	  if (thread_is_in_step_over_chain (tp))
-	    {
-	      if (debug_infrun)
-		fprintf_unfiltered (gdb_stdlog,
-				    "infrun: proceed: [%s] needs step-over\n",
-				    target_pid_to_str (tp->ptid).c_str ());
-	      continue;
-	    }
+	    if (!tp->inf->has_execution ())
+	      {
+		infrun_debug_printf ("[%s] target has no execution",
+				     target_pid_to_str (tp->ptid).c_str ());
+		continue;
+	      }
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: proceed: resuming %s\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	    if (tp->resumed)
+	      {
+		infrun_debug_printf ("[%s] resumed",
+				     target_pid_to_str (tp->ptid).c_str ());
+		gdb_assert (tp->executing || tp->suspend.waitstatus_pending_p);
+		continue;
+	      }
 
-	  reset_ecs (ecs, tp);
-	  switch_to_thread (tp);
-	  keep_going_pass_signal (ecs);
-	  if (!ecs->wait_some_more)
-	    error (_("Command aborted."));
-	}
+	    if (thread_is_in_step_over_chain (tp))
+	      {
+		infrun_debug_printf ("[%s] needs step-over",
+				     target_pid_to_str (tp->ptid).c_str ());
+		continue;
+	      }
+
+	    infrun_debug_printf ("resuming %s",
+				 target_pid_to_str (tp->ptid).c_str ());
+
+	    reset_ecs (ecs, tp);
+	    switch_to_thread (tp);
+	    keep_going_pass_signal (ecs);
+	    if (!ecs->wait_some_more)
+	      error (_("Command aborted."));
+	  }
       }
     else if (!cur_thr->resumed && !thread_is_in_step_over_chain (cur_thr))
       {
@@ -3033,12 +3272,17 @@ proceed (CORE_ADDR addr, enum gdb_signal
 	if (!ecs->wait_some_more)
 	  error (_("Command aborted."));
       }
-  }
 
-  target_commit_resume ();
+    disable_commit_resumed.reset_and_commit ();
+  }
 
   finish_state.release ();
 
+  /* If we've switched threads above, switch back to the previously
+     current thread.  We don't want the user to see a different
+     selected thread.  */
+  switch_to_thread (cur_thr);
+
   /* Tell the event loop to wait for it to stop.  If the target
      supports asynchronous execution, it'll do this from within
      target_resume.  */
@@ -3052,10 +3296,8 @@ proceed (CORE_ADDR addr, enum gdb_signal
 void
 start_remote (int from_tty)
 {
-  struct inferior *inferior;
-
-  inferior = current_inferior ();
-  inferior->control.stop_soon = STOP_QUIETLY_REMOTE;
+  inferior *inf = current_inferior ();
+  inf->control.stop_soon = STOP_QUIETLY_REMOTE;
 
   /* Always go on waiting for the target, regardless of the mode.  */
   /* FIXME: cagney/1999-09-23: At present it isn't possible to
@@ -3071,12 +3313,12 @@ start_remote (int from_tty)
      target_open() return to the caller an indication that the target
      is currently running and GDB state should be set to the same as
      for an async run.  */
-  wait_for_inferior ();
+  wait_for_inferior (inf);
 
   /* Now that the inferior has stopped, do any bookkeeping like
      loading shared libraries.  We want to do this before normal_stop,
      so that the displayed frame is up to date.  */
-  post_create_inferior (current_top_target (), from_tty);
+  post_create_inferior (from_tty);
 
   normal_stop ();
 }
@@ -3092,7 +3334,7 @@ init_wait_for_inferior (void)
 
   clear_proceed_status (0);
 
-  target_last_wait_ptid = minus_one_ptid;
+  nullify_last_target_wait_ptid ();
 
   previous_inferior_ptid = inferior_ptid;
 }
@@ -3113,7 +3355,7 @@ static void end_stepping_range (struct e
 static void stop_waiting (struct execution_control_state *ecs);
 static void keep_going (struct execution_control_state *ecs);
 static void process_event_stop_test (struct execution_control_state *ecs);
-static int switch_back_to_stepped_thread (struct execution_control_state *ecs);
+static bool switch_back_to_stepped_thread (struct execution_control_state *ecs);
 
 /* This function is attached as a "thread_stop_requested" observer.
    Cleanup local state that assumed the PTID was to be resumed, and
@@ -3122,11 +3364,13 @@ static int switch_back_to_stepped_thread
 static void
 infrun_thread_stop_requested (ptid_t ptid)
 {
+  process_stratum_target *curr_target = current_inferior ()->process_target ();
+
   /* PTID was requested to stop.  If the thread was already stopped,
      but the user/frontend doesn't know about that yet (e.g., the
      thread had been temporarily paused for some step-over), set up
      for reporting the stop now.  */
-  for (thread_info *tp : all_threads (ptid))
+  for (thread_info *tp : all_threads (curr_target, ptid))
     {
       if (tp->state != THREAD_RUNNING)
 	continue;
@@ -3137,7 +3381,7 @@ infrun_thread_stop_requested (ptid_t pti
 	 start_step_over doesn't try to resume them
 	 automatically.  */
       if (thread_is_in_step_over_chain (tp))
-	thread_step_over_chain_remove (tp);
+	global_thread_step_over_chain_remove (tp);
 
       /* If the thread is stopped, but the user/frontend doesn't
 	 know about that yet, queue a pending event, as if the
@@ -3152,7 +3396,7 @@ infrun_thread_stop_requested (ptid_t pti
 
       /* Clear the inline-frame state, since we're re-processing the
 	 stop.  */
-      clear_inline_frame_state (tp->ptid);
+      clear_inline_frame_state (tp);
 
       /* If this thread was paused because some other thread was
 	 doing an inline-step over, let that finish first.  Once
@@ -3164,14 +3408,15 @@ infrun_thread_stop_requested (ptid_t pti
       /* Otherwise we can process the (new) pending event now.  Set
 	 it so this pending event is considered by
 	 do_target_wait.  */
-      tp->resumed = 1;
+      tp->resumed = true;
     }
 }
 
 static void
 infrun_thread_thread_exit (struct thread_info *tp, int silent)
 {
-  if (target_last_wait_ptid == tp->ptid)
+  if (target_last_proc_target == tp->inf->process_target ()
+      && target_last_wait_ptid == tp->ptid)
     nullify_last_target_wait_ptid ();
 }
 
@@ -3196,7 +3441,7 @@ typedef void (*for_each_just_stopped_thr
 static void
 for_each_just_stopped_thread (for_each_just_stopped_thread_callback_func func)
 {
-  if (!target_has_execution || inferior_ptid == null_ptid)
+  if (!target_has_execution () || inferior_ptid == null_ptid)
     return;
 
   if (target_is_non_stop_p ())
@@ -3236,50 +3481,37 @@ void
 print_target_wait_results (ptid_t waiton_ptid, ptid_t result_ptid,
 			   const struct target_waitstatus *ws)
 {
-  std::string status_string = target_waitstatus_to_string (ws);
-  string_file stb;
-
-  /* The text is split over several lines because it was getting too long.
-     Call fprintf_unfiltered (gdb_stdlog) once so that the text is still
-     output as a unit; we want only one timestamp printed if debug_timestamp
-     is set.  */
-
-  stb.printf ("infrun: target_wait (%d.%ld.%ld",
-	      waiton_ptid.pid (),
-	      waiton_ptid.lwp (),
-	      waiton_ptid.tid ());
-  if (waiton_ptid.pid () != -1)
-    stb.printf (" [%s]", target_pid_to_str (waiton_ptid).c_str ());
-  stb.printf (", status) =\n");
-  stb.printf ("infrun:   %d.%ld.%ld [%s],\n",
-	      result_ptid.pid (),
-	      result_ptid.lwp (),
-	      result_ptid.tid (),
-	      target_pid_to_str (result_ptid).c_str ());
-  stb.printf ("infrun:   %s\n", status_string.c_str ());
-
-  /* This uses %s in part to handle %'s in the text, but also to avoid
-     a gcc error: the format attribute requires a string literal.  */
-  fprintf_unfiltered (gdb_stdlog, "%s", stb.c_str ());
+  infrun_debug_printf ("target_wait (%d.%ld.%ld [%s], status) =",
+		       waiton_ptid.pid (),
+		       waiton_ptid.lwp (),
+		       waiton_ptid.tid (),
+		       target_pid_to_str (waiton_ptid).c_str ());
+  infrun_debug_printf ("  %d.%ld.%ld [%s],",
+		       result_ptid.pid (),
+		       result_ptid.lwp (),
+		       result_ptid.tid (),
+		       target_pid_to_str (result_ptid).c_str ());
+  infrun_debug_printf ("  %s", target_waitstatus_to_string (ws).c_str ());
 }
 
 /* Select a thread at random, out of those which are resumed and have
    had events.  */
 
 static struct thread_info *
-random_pending_event_thread (ptid_t waiton_ptid)
+random_pending_event_thread (inferior *inf, ptid_t waiton_ptid)
 {
   int num_events = 0;
 
-  auto has_event = [] (thread_info *tp)
+  auto has_event = [&] (thread_info *tp)
     {
-      return (tp->resumed
+      return (tp->ptid.matches (waiton_ptid)
+	      && tp->resumed
 	      && tp->suspend.waitstatus_pending_p);
     };
 
   /* First see how many events we have.  Count only resumed threads
      that have an event pending.  */
-  for (thread_info *tp : all_non_exited_threads (waiton_ptid))
+  for (thread_info *tp : inf->non_exited_threads ())
     if (has_event (tp))
       num_events++;
 
@@ -3290,13 +3522,12 @@ random_pending_event_thread (ptid_t wait
   int random_selector = (int) ((num_events * (double) rand ())
 			       / (RAND_MAX + 1.0));
 
-  if (debug_infrun && num_events > 1)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: Found %d events, selecting #%d\n",
-			num_events, random_selector);
+  if (num_events > 1)
+    infrun_debug_printf ("Found %d events, selecting #%d",
+			 num_events, random_selector);
 
   /* Select the Nth thread that has had an event.  */
-  for (thread_info *tp : all_non_exited_threads (waiton_ptid))
+  for (thread_info *tp : inf->non_exited_threads ())
     if (has_event (tp))
       if (random_selector-- == 0)
 	return tp;
@@ -3306,29 +3537,35 @@ random_pending_event_thread (ptid_t wait
 
 /* Wrapper for target_wait that first checks whether threads have
    pending statuses to report before actually asking the target for
-   more events.  */
+   more events.  INF is the inferior we're using to call target_wait
+   on.  */
 
 static ptid_t
-do_target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
+do_target_wait_1 (inferior *inf, ptid_t ptid,
+		  target_waitstatus *status, target_wait_flags options)
 {
   ptid_t event_ptid;
   struct thread_info *tp;
 
+  /* We know that we are looking for an event in the target of inferior
+     INF, but we don't know which thread the event might come from.  As
+     such we want to make sure that INFERIOR_PTID is reset so that none of
+     the wait code relies on it - doing so is always a mistake.  */
+  switch_to_inferior_no_thread (inf);
+
   /* First check if there is a resumed thread with a wait status
      pending.  */
   if (ptid == minus_one_ptid || ptid.is_pid ())
     {
-      tp = random_pending_event_thread (ptid);
+      tp = random_pending_event_thread (inf, ptid);
     }
   else
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: Waiting for specific thread %s.\n",
-			    target_pid_to_str (ptid).c_str ());
+      infrun_debug_printf ("Waiting for specific thread %s.",
+			   target_pid_to_str (ptid).c_str ());
 
       /* We have a specific thread to check.  */
-      tp = find_thread_ptid (ptid);
+      tp = find_thread_ptid (inf, ptid);
       gdb_assert (tp != NULL);
       if (!tp->suspend.waitstatus_pending_p)
 	tp = NULL;
@@ -3347,31 +3584,25 @@ do_target_wait (ptid_t ptid, struct targ
 
       if (pc != tp->suspend.stop_pc)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: PC of %s changed.  was=%s, now=%s\n",
-				target_pid_to_str (tp->ptid).c_str (),
-				paddress (gdbarch, tp->suspend.stop_pc),
-				paddress (gdbarch, pc));
+	  infrun_debug_printf ("PC of %s changed.  was=%s, now=%s",
+			       target_pid_to_str (tp->ptid).c_str (),
+			       paddress (gdbarch, tp->suspend.stop_pc),
+			       paddress (gdbarch, pc));
 	  discard = 1;
 	}
       else if (!breakpoint_inserted_here_p (regcache->aspace (), pc))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: previous breakpoint of %s, at %s gone\n",
-				target_pid_to_str (tp->ptid).c_str (),
-				paddress (gdbarch, pc));
+	  infrun_debug_printf ("previous breakpoint of %s, at %s gone",
+			       target_pid_to_str (tp->ptid).c_str (),
+			       paddress (gdbarch, pc));
 
 	  discard = 1;
 	}
 
       if (discard)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: pending event of %s cancelled.\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("pending event of %s cancelled.",
+			       target_pid_to_str (tp->ptid).c_str ());
 
 	  tp->suspend.waitstatus.kind = TARGET_WAITKIND_SPURIOUS;
 	  tp->suspend.stop_reason = TARGET_STOPPED_BY_NO_REASON;
@@ -3380,16 +3611,10 @@ do_target_wait (ptid_t ptid, struct targ
 
   if (tp != NULL)
     {
-      if (debug_infrun)
-	{
-	  std::string statstr
-	    = target_waitstatus_to_string (&tp->suspend.waitstatus);
-
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: Using pending wait status %s for %s.\n",
-			      statstr.c_str (),
-			      target_pid_to_str (tp->ptid).c_str ());
-	}
+      infrun_debug_printf ("Using pending wait status %s for %s.",
+			   target_waitstatus_to_string
+			     (&tp->suspend.waitstatus).c_str (),
+			   target_pid_to_str (tp->ptid).c_str ());
 
       /* Now that we've selected our final event LWP, un-adjust its PC
 	 if it was a software breakpoint (and the target doesn't
@@ -3427,6 +3652,11 @@ do_target_wait (ptid_t ptid, struct targ
 
   /* But if we don't find one, we'll have to wait.  */
 
+  /* We can't ask a non-async target to do a non-blocking wait, so this will be
+     a blocking wait.  */
+  if (!target_can_async_p ())
+    options &= ~TARGET_WNOHANG;
+
   if (deprecated_target_wait_hook)
     event_ptid = deprecated_target_wait_hook (ptid, status, options);
   else
@@ -3435,6 +3665,106 @@ do_target_wait (ptid_t ptid, struct targ
   return event_ptid;
 }
 
+/* Wrapper for target_wait that first checks whether threads have
+   pending statuses to report before actually asking the target for
+   more events.  Polls for events from all inferiors/targets.  */
+
+static bool
+do_target_wait (execution_control_state *ecs, target_wait_flags options)
+{
+  int num_inferiors = 0;
+  int random_selector;
+
+  /* For fairness, we pick the first inferior/target to poll at random
+     out of all inferiors that may report events, and then continue
+     polling the rest of the inferior list starting from that one in a
+     circular fashion until the whole list is polled once.  */
+
+  auto inferior_matches = [] (inferior *inf)
+    {
+      return inf->process_target () != nullptr;
+    };
+
+  /* First see how many matching inferiors we have.  */
+  for (inferior *inf : all_inferiors ())
+    if (inferior_matches (inf))
+      num_inferiors++;
+
+  if (num_inferiors == 0)
+    {
+      ecs->ws.kind = TARGET_WAITKIND_IGNORE;
+      return false;
+    }
+
+  /* Now randomly pick an inferior out of those that matched.  */
+  random_selector = (int)
+    ((num_inferiors * (double) rand ()) / (RAND_MAX + 1.0));
+
+  if (num_inferiors > 1)
+    infrun_debug_printf ("Found %d inferiors, starting at #%d",
+			 num_inferiors, random_selector);
+
+  /* Select the Nth inferior that matched.  */
+
+  inferior *selected = nullptr;
+
+  for (inferior *inf : all_inferiors ())
+    if (inferior_matches (inf))
+      if (random_selector-- == 0)
+	{
+	  selected = inf;
+	  break;
+	}
+
+  /* Now poll for events out of each of the matching inferior's
+     targets, starting from the selected one.  */
+
+  auto do_wait = [&] (inferior *inf)
+  {
+    ecs->ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs->ws, options);
+    ecs->target = inf->process_target ();
+    return (ecs->ws.kind != TARGET_WAITKIND_IGNORE);
+  };
+
+  /* Needed in 'all-stop + target-non-stop' mode, because we end up
+     here spuriously after the target is all stopped and we've already
+     reported the stop to the user, polling for events.  */
+  scoped_restore_current_thread restore_thread;
+
+  int inf_num = selected->num;
+  for (inferior *inf = selected; inf != NULL; inf = inf->next)
+    if (inferior_matches (inf))
+      if (do_wait (inf))
+	return true;
+
+  for (inferior *inf = inferior_list;
+       inf != NULL && inf->num < inf_num;
+       inf = inf->next)
+    if (inferior_matches (inf))
+      if (do_wait (inf))
+	return true;
+
+  ecs->ws.kind = TARGET_WAITKIND_IGNORE;
+  return false;
+}
+
+/* An event reported by wait_one.  */
+
+struct wait_one_event
+{
+  /* The target the event came out of.  */
+  process_stratum_target *target;
+
+  /* The PTID the event was for.  */
+  ptid_t ptid;
+
+  /* The waitstatus.  */
+  target_waitstatus ws;
+};
+
+static bool handle_one (const wait_one_event &event);
+static void restart_threads (struct thread_info *event_thread);
+
 /* Prepare and stabilize the inferior for detaching it.  E.g.,
    detaching while a thread is displaced stepping is a recipe for
    crashing it, as nothing would readjust the PC out of the scratch
@@ -3445,62 +3775,90 @@ prepare_for_detach (void)
 {
   struct inferior *inf = current_inferior ();
   ptid_t pid_ptid = ptid_t (inf->pid);
-
-  displaced_step_inferior_state *displaced = get_displaced_stepping_state (inf);
-
-  /* Is any thread of this process displaced stepping?  If not,
-     there's nothing else to do.  */
-  if (displaced->step_thread == nullptr)
-    return;
-
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"displaced-stepping in-process while detaching");
+  scoped_restore_current_thread restore_thread;
 
   scoped_restore restore_detaching = make_scoped_restore (&inf->detaching, true);
 
-  while (displaced->step_thread != nullptr)
+  /* Remove all threads of INF from the global step-over chain.  We
+     want to stop any ongoing step-over, not start any new one.  */
+  thread_info *next;
+  for (thread_info *tp = global_thread_step_over_chain_head;
+       tp != nullptr;
+       tp = next)
+    {
+      next = global_thread_step_over_chain_next (tp);
+      if (tp->inf == inf)
+	global_thread_step_over_chain_remove (tp);
+    }
+
+  /* If we were already in the middle of an inline step-over, and the
+     thread stepping belongs to the inferior we're detaching, we need
+     to restart the threads of other inferiors.  */
+  if (step_over_info.thread != -1)
     {
-      struct execution_control_state ecss;
-      struct execution_control_state *ecs;
-
-      ecs = &ecss;
-      memset (ecs, 0, sizeof (*ecs));
+      infrun_debug_printf ("inline step-over in-process while detaching");
 
-      overlay_cache_invalid = 1;
-      /* Flush target cache before starting to handle each event.
-	 Target was running and cache could be stale.  This is just a
-	 heuristic.  Running threads may modify target memory, but we
-	 don't get any event.  */
-      target_dcache_invalidate ();
+      thread_info *thr = find_thread_global_id (step_over_info.thread);
+      if (thr->inf == inf)
+	{
+	  /* Since we removed threads of INF from the step-over chain,
+	     we know this won't start a step-over for INF.  */
+	  clear_step_over_info ();
 
-      ecs->ptid = do_target_wait (pid_ptid, &ecs->ws, 0);
+	  if (target_is_non_stop_p ())
+	    {
+	      /* Start a new step-over in another thread if there's
+		 one that needs it.  */
+	      start_step_over ();
 
-      if (debug_infrun)
-	print_target_wait_results (pid_ptid, ecs->ptid, &ecs->ws);
+	      /* Restart all other threads (except the
+		 previously-stepping thread, since that one is still
+		 running).  */
+	      if (!step_over_info_valid_p ())
+		restart_threads (thr);
+	    }
+	}
+    }
 
-      /* If an error happens while handling the event, propagate GDB's
-	 knowledge of the executing state to the frontend/user running
-	 state.  */
-      scoped_finish_thread_state finish_state (minus_one_ptid);
+  if (displaced_step_in_progress (inf))
+    {
+      infrun_debug_printf ("displaced-stepping in-process while detaching");
 
-      /* Now figure out what to do with the result of the result.  */
-      handle_inferior_event (ecs);
+      /* Stop threads currently displaced stepping, aborting it.  */
 
-      /* No error, don't finish the state yet.  */
-      finish_state.release ();
+      for (thread_info *thr : inf->non_exited_threads ())
+	{
+	  if (thr->displaced_step_state.in_progress ())
+	    {
+	      if (thr->executing)
+		{
+		  if (!thr->stop_requested)
+		    {
+		      target_stop (thr->ptid);
+		      thr->stop_requested = true;
+		    }
+		}
+	      else
+		thr->resumed = false;
+	    }
+	}
 
-      /* Breakpoints and watchpoints are not installed on the target
-	 at this point, and signals are passed directly to the
-	 inferior, so this must mean the process is gone.  */
-      if (!ecs->wait_some_more)
+      while (displaced_step_in_progress (inf))
 	{
-	  restore_detaching.release ();
-	  error (_("Program exited while detaching"));
+	  wait_one_event event;
+
+	  event.target = inf->process_target ();
+	  event.ptid = do_target_wait_1 (inf, pid_ptid, &event.ws, 0);
+
+	  if (debug_infrun)
+	    print_target_wait_results (pid_ptid, event.ptid, &event.ws);
+
+	  handle_one (event);
 	}
-    }
 
-  restore_detaching.release ();
+      /* It's OK to leave some of the threads of INF stopped, since
+	 they'll be detached shortly.  */
+    }
 }
 
 /* Wait for control to return from inferior to debugger.
@@ -3510,25 +3868,23 @@ prepare_for_detach (void)
    When this function actually returns it means the inferior
    should be left stopped and GDB should read more commands.  */
 
-void
-wait_for_inferior (void)
+static void
+wait_for_inferior (inferior *inf)
 {
-  if (debug_infrun)
-    fprintf_unfiltered
-      (gdb_stdlog, "infrun: wait_for_inferior ()\n");
+  infrun_debug_printf ("wait_for_inferior ()");
 
   SCOPE_EXIT { delete_just_stopped_threads_infrun_breakpoints (); };
 
   /* If an error happens while handling the event, propagate GDB's
      knowledge of the executing state to the frontend/user running
      state.  */
-  scoped_finish_thread_state finish_state (minus_one_ptid);
+  scoped_finish_thread_state finish_state
+    (inf->process_target (), minus_one_ptid);
 
   while (1)
     {
       struct execution_control_state ecss;
       struct execution_control_state *ecs = &ecss;
-      ptid_t waiton_ptid = minus_one_ptid;
 
       memset (ecs, 0, sizeof (*ecs));
 
@@ -3540,10 +3896,11 @@ wait_for_inferior (void)
 	 don't get any event.  */
       target_dcache_invalidate ();
 
-      ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws, 0);
+      ecs->ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs->ws, 0);
+      ecs->target = inf->process_target ();
 
       if (debug_infrun)
-	print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws);
+	print_target_wait_results (minus_one_ptid, ecs->ptid, &ecs->ws);
 
       /* Now figure out what to do with the result of the result.  */
       handle_inferior_event (ecs);
@@ -3598,7 +3955,7 @@ clean_up_just_stopped_threads_fsms (stru
   if (!non_stop)
     {
       for (thread_info *thr : all_non_exited_threads ())
-        {
+	{
 	  if (thr->thread_fsm == NULL)
 	    continue;
 	  if (thr == ecs->event_thread)
@@ -3664,12 +4021,13 @@ all_uis_on_sync_execution_starting (void
    necessary cleanups.  */
 
 void
-fetch_inferior_event (void *client_data)
+fetch_inferior_event ()
 {
+  INFRUN_SCOPED_DEBUG_ENTER_EXIT;
+
   struct execution_control_state ecss;
   struct execution_control_state *ecs = &ecss;
   int cmd_done = 0;
-  ptid_t waiton_ptid = minus_one_ptid;
 
   memset (ecs, 0, sizeof (*ecs));
 
@@ -3678,6 +4036,12 @@ fetch_inferior_event (void *client_data)
      the main console.  */
   scoped_restore save_ui = make_scoped_restore (&current_ui, main_ui);
 
+  /* Temporarily disable pagination.  Otherwise, the user would be
+     given an option to press 'q' to quit, which would cause an early
+     exit and could leave GDB in a half-baked state.  */
+  scoped_restore save_pagination
+    = make_scoped_restore (&pagination_enabled, false);
+
   /* End up with readline processing input, if necessary.  */
   {
     SCOPE_EXIT { reinstall_readline_callback_handler_cleanup (); };
@@ -3693,14 +4057,11 @@ fetch_inferior_event (void *client_data)
 	set_current_traceframe (-1);
       }
 
-    gdb::optional<scoped_restore_current_thread> maybe_restore_thread;
-
-    if (non_stop)
-      /* In non-stop mode, the user/frontend should not notice a thread
-	 switch due to internal events.  Make sure we reverse to the
-	 user selected thread and frame after handling the event and
-	 running any breakpoint commands.  */
-      maybe_restore_thread.emplace ();
+    /* The user/frontend should not notice a thread switch due to
+       internal events.  Make sure we revert to the user selected
+       thread and frame after handling the event and running any
+       breakpoint commands.  */
+    scoped_restore_current_thread restore_thread;
 
     overlay_cache_invalid = 1;
     /* Flush target cache before starting to handle each event.  Target
@@ -3713,17 +4074,31 @@ fetch_inferior_event (void *client_data)
       = make_scoped_restore (&execution_direction,
 			     target_execution_direction ());
 
-    ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws,
-				target_can_async_p () ? TARGET_WNOHANG : 0);
+    /* Allow targets to pause their resumed threads while we handle
+       the event.  */
+    scoped_disable_commit_resumed disable_commit_resumed ("handling event");
+
+    if (!do_target_wait (ecs, TARGET_WNOHANG))
+      {
+	infrun_debug_printf ("do_target_wait returned no event");
+	disable_commit_resumed.reset_and_commit ();
+	return;
+      }
+
+    gdb_assert (ecs->ws.kind != TARGET_WAITKIND_IGNORE);
+
+    /* Switch to the target that generated the event, so we can do
+       target calls.  */
+    switch_to_target_no_thread (ecs->target);
 
     if (debug_infrun)
-      print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws);
+      print_target_wait_results (minus_one_ptid, ecs->ptid, &ecs->ws);
 
     /* If an error happens while handling the event, propagate GDB's
        knowledge of the executing state to the frontend/user running
        state.  */
     ptid_t finish_ptid = !target_is_non_stop_p () ? minus_one_ptid : ecs->ptid;
-    scoped_finish_thread_state finish_state (finish_ptid);
+    scoped_finish_thread_state finish_state (ecs->target, finish_ptid);
 
     /* Get executed before scoped_restore_current_thread above to apply
        still for the thread which has thrown the exception.  */
@@ -3737,8 +4112,8 @@ fetch_inferior_event (void *client_data)
 
     if (!ecs->wait_some_more)
       {
-	struct inferior *inf = find_inferior_ptid (ecs->ptid);
-	int should_stop = 1;
+	struct inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid);
+	bool should_stop = true;
 	struct thread_info *thr = ecs->event_thread;
 
 	delete_just_stopped_threads_infrun_breakpoints ();
@@ -3774,9 +4149,22 @@ fetch_inferior_event (void *client_data)
 
 	    if (!proceeded)
 	      {
-		inferior_event_handler (INF_EXEC_COMPLETE, NULL);
+		inferior_event_handler (INF_EXEC_COMPLETE);
 		cmd_done = 1;
 	      }
+
+	    /* If we got a TARGET_WAITKIND_NO_RESUMED event, then the
+	       previously selected thread is gone.  We have two
+	       choices - switch to no thread selected, or restore the
+	       previously selected thread (now exited).  We chose the
+	       later, just because that's what GDB used to do.  After
+	       this, "info threads" says "The current thread <Thread
+	       ID 2> has terminated." instead of "No thread
+	       selected.".  */
+	    if (!non_stop
+		&& cmd_done
+		&& ecs->ws.kind != TARGET_WAITKIND_NO_RESUMED)
+	      restore_thread.dont_restore ();
 	  }
       }
 
@@ -3786,6 +4174,8 @@ fetch_inferior_event (void *client_data)
     /* No error, don't finish the thread states yet.  */
     finish_state.release ();
 
+    disable_commit_resumed.reset_and_commit ();
+
     /* This scope is used to ensure that readline callbacks are
        reinstalled here.  */
   }
@@ -3802,11 +4192,15 @@ fetch_inferior_event (void *client_data)
     printf_unfiltered (_("completed.\n"));
 }
 
-/* Record the frame and location we're currently stepping through.  */
+/* See infrun.h.  */
+
 void
-set_step_info (struct frame_info *frame, struct symtab_and_line sal)
+set_step_info (thread_info *tp, struct frame_info *frame,
+	       struct symtab_and_line sal)
 {
-  struct thread_info *tp = inferior_thread ();
+  /* This can be removed once this function no longer implicitly relies on the
+     inferior_ptid value.  */
+  gdb_assert (inferior_ptid == tp->ptid);
 
   tp->control.step_frame_id = get_frame_id (frame);
   tp->control.step_stack_frame_id = get_stack_frame_id (frame);
@@ -3826,31 +4220,39 @@ init_thread_stepping_state (struct threa
   tss->step_after_step_resume_breakpoint = 0;
 }
 
-/* Set the cached copy of the last ptid/waitstatus.  */
+/* See infrun.h.  */
 
 void
-set_last_target_status (ptid_t ptid, struct target_waitstatus status)
+set_last_target_status (process_stratum_target *target, ptid_t ptid,
+			target_waitstatus status)
 {
+  target_last_proc_target = target;
   target_last_wait_ptid = ptid;
   target_last_waitstatus = status;
 }
 
-/* Return the cached copy of the last pid/waitstatus returned by
-   target_wait()/deprecated_target_wait_hook().  The data is actually
-   cached by handle_inferior_event(), which gets called immediately
-   after target_wait()/deprecated_target_wait_hook().  */
+/* See infrun.h.  */
 
 void
-get_last_target_status (ptid_t *ptidp, struct target_waitstatus *status)
+get_last_target_status (process_stratum_target **target, ptid_t *ptid,
+			target_waitstatus *status)
 {
-  *ptidp = target_last_wait_ptid;
-  *status = target_last_waitstatus;
+  if (target != nullptr)
+    *target = target_last_proc_target;
+  if (ptid != nullptr)
+    *ptid = target_last_wait_ptid;
+  if (status != nullptr)
+    *status = target_last_waitstatus;
 }
 
+/* See infrun.h.  */
+
 void
 nullify_last_target_wait_ptid (void)
 {
+  target_last_proc_target = nullptr;
   target_last_wait_ptid = minus_one_ptid;
+  target_last_waitstatus = {};
 }
 
 /* Switch thread contexts.  */
@@ -3858,14 +4260,13 @@ nullify_last_target_wait_ptid (void)
 static void
 context_switch (execution_control_state *ecs)
 {
-  if (debug_infrun
-      && ecs->ptid != inferior_ptid
-      && ecs->event_thread != inferior_thread ())
-    {
-      fprintf_unfiltered (gdb_stdlog, "infrun: Switching context from %s ",
-			  target_pid_to_str (inferior_ptid).c_str ());
-      fprintf_unfiltered (gdb_stdlog, "to %s\n",
-			  target_pid_to_str (ecs->ptid).c_str ());
+  if (ecs->ptid != inferior_ptid
+      && (inferior_ptid == null_ptid
+	  || ecs->event_thread != inferior_thread ()))
+    {
+      infrun_debug_printf ("Switching context from %s to %s",
+			   target_pid_to_str (inferior_ptid).c_str (),
+			   target_pid_to_str (ecs->ptid).c_str ());
     }
 
   switch_to_thread (ecs->event_thread);
@@ -4018,7 +4419,7 @@ adjust_pc_after_break (struct thread_inf
     }
 }
 
-static int
+static bool
 stepped_in_from (struct frame_info *frame, struct frame_id step_frame_id)
 {
   for (frame = get_prev_frame (frame);
@@ -4026,12 +4427,52 @@ stepped_in_from (struct frame_info *fram
        frame = get_prev_frame (frame))
     {
       if (frame_id_eq (get_frame_id (frame), step_frame_id))
-	return 1;
+	return true;
+
       if (get_frame_type (frame) != INLINE_FRAME)
 	break;
     }
 
-  return 0;
+  return false;
+}
+
+/* Look for an inline frame that is marked for skip.
+   If PREV_FRAME is TRUE start at the previous frame,
+   otherwise start at the current frame.  Stop at the
+   first non-inline frame, or at the frame where the
+   step started.  */
+
+static bool
+inline_frame_is_marked_for_skip (bool prev_frame, struct thread_info *tp)
+{
+  struct frame_info *frame = get_current_frame ();
+
+  if (prev_frame)
+    frame = get_prev_frame (frame);
+
+  for (; frame != NULL; frame = get_prev_frame (frame))
+    {
+      const char *fn = NULL;
+      symtab_and_line sal;
+      struct symbol *sym;
+
+      if (frame_id_eq (get_frame_id (frame), tp->control.step_frame_id))
+	break;
+      if (get_frame_type (frame) != INLINE_FRAME)
+	break;
+
+      sal = find_frame_sal (frame);
+      sym = get_frame_function (frame);
+
+      if (sym != NULL)
+	fn = sym->print_name ();
+
+      if (sal.line != 0
+	  && function_name_is_marked_for_skip (fn, sal))
+	return true;
+    }
+
+  return false;
 }
 
 /* If the event thread has the stop requested flag set, pretend it
@@ -4052,11 +4493,11 @@ handle_stop_requested (struct execution_
 }
 
 /* Auxiliary function that handles syscall entry/return events.
-   It returns 1 if the inferior should keep going (and GDB
-   should ignore the event), or 0 if the event deserves to be
+   It returns true if the inferior should keep going (and GDB
+   should ignore the event), or false if the event deserves to be
    processed.  */
 
-static int
+static bool
 handle_syscall_event (struct execution_control_state *ecs)
 {
   struct regcache *regcache;
@@ -4071,9 +4512,7 @@ handle_syscall_event (struct execution_c
   if (catch_syscall_enabled () > 0
       && catching_syscall_number (syscall_number) > 0)
     {
-      if (debug_infrun)
-        fprintf_unfiltered (gdb_stdlog, "infrun: syscall number = '%d'\n",
-                            syscall_number);
+      infrun_debug_printf ("syscall number=%d", syscall_number);
 
       ecs->event_thread->control.stop_bpstat
 	= bpstat_stop_status (regcache->aspace (),
@@ -4081,21 +4520,22 @@ handle_syscall_event (struct execution_c
 			      ecs->event_thread, &ecs->ws);
 
       if (handle_stop_requested (ecs))
-	return 0;
+	return false;
 
       if (bpstat_causes_stop (ecs->event_thread->control.stop_bpstat))
 	{
 	  /* Catchpoint hit.  */
-	  return 0;
+	  return false;
 	}
     }
 
   if (handle_stop_requested (ecs))
-    return 0;
+    return false;
 
   /* If no catchpoint triggered for this, then keep going.  */
   keep_going (ecs);
-  return 1;
+
+  return true;
 }
 
 /* Lazily fill in the execution_control_state's stop_func_* fields.  */
@@ -4107,14 +4547,16 @@ fill_in_stop_func (struct gdbarch *gdbar
   if (!ecs->stop_func_filled_in)
     {
       const block *block;
+      const general_symbol_info *gsi;
 
       /* Don't care about return value; stop_func_start and stop_func_name
 	 will both be 0 if it doesn't work.  */
-      find_pc_partial_function (ecs->event_thread->suspend.stop_pc,
-				&ecs->stop_func_name,
-				&ecs->stop_func_start,
-				&ecs->stop_func_end,
-				&block);
+      find_pc_partial_function_sym (ecs->event_thread->suspend.stop_pc,
+				    &gsi,
+				    &ecs->stop_func_start,
+				    &ecs->stop_func_end,
+				    &block);
+      ecs->stop_func_name = gsi == nullptr ? nullptr : gsi->print_name ();
 
       /* The call to find_pc_partial_function, above, will set
 	 stop_func_start and stop_func_end to the start and end
@@ -4146,20 +4588,19 @@ fill_in_stop_func (struct gdbarch *gdbar
 static enum stop_kind
 get_inferior_stop_soon (execution_control_state *ecs)
 {
-  struct inferior *inf = find_inferior_ptid (ecs->ptid);
+  struct inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid);
 
   gdb_assert (inf != NULL);
   return inf->control.stop_soon;
 }
 
-/* Wait for one event.  Store the resulting waitstatus in WS, and
-   return the event ptid.  */
+/* Poll for one event out of the current target.  Store the resulting
+   waitstatus in WS, and return the event ptid.  Does not block.  */
 
 static ptid_t
-wait_one (struct target_waitstatus *ws)
+poll_one_curr_target (struct target_waitstatus *ws)
 {
   ptid_t event_ptid;
-  ptid_t wait_ptid = minus_one_ptid;
 
   overlay_cache_invalid = 1;
 
@@ -4170,79 +4611,127 @@ wait_one (struct target_waitstatus *ws)
   target_dcache_invalidate ();
 
   if (deprecated_target_wait_hook)
-    event_ptid = deprecated_target_wait_hook (wait_ptid, ws, 0);
+    event_ptid = deprecated_target_wait_hook (minus_one_ptid, ws, TARGET_WNOHANG);
   else
-    event_ptid = target_wait (wait_ptid, ws, 0);
+    event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG);
 
   if (debug_infrun)
-    print_target_wait_results (wait_ptid, event_ptid, ws);
+    print_target_wait_results (minus_one_ptid, event_ptid, ws);
 
   return event_ptid;
 }
 
-/* Generate a wrapper for target_stopped_by_REASON that works on PTID
-   instead of the current thread.  */
-#define THREAD_STOPPED_BY(REASON)		\
-static int					\
-thread_stopped_by_ ## REASON (ptid_t ptid)	\
-{						\
-  scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); \
-  inferior_ptid = ptid;				\
-						\
-  return target_stopped_by_ ## REASON ();	\
-}
-
-/* Generate thread_stopped_by_watchpoint.  */
-THREAD_STOPPED_BY (watchpoint)
-/* Generate thread_stopped_by_sw_breakpoint.  */
-THREAD_STOPPED_BY (sw_breakpoint)
-/* Generate thread_stopped_by_hw_breakpoint.  */
-THREAD_STOPPED_BY (hw_breakpoint)
-
-/* Save the thread's event and stop reason to process it later.  */
+/* Wait for one event out of any target.  */
 
-static void
-save_waitstatus (struct thread_info *tp, struct target_waitstatus *ws)
+static wait_one_event
+wait_one ()
 {
-  if (debug_infrun)
+  while (1)
     {
-      std::string statstr = target_waitstatus_to_string (ws);
+      for (inferior *inf : all_inferiors ())
+	{
+	  process_stratum_target *target = inf->process_target ();
+	  if (target == NULL
+	      || !target->is_async_p ()
+	      || !target->threads_executing)
+	    continue;
+
+	  switch_to_inferior_no_thread (inf);
+
+	  wait_one_event event;
+	  event.target = target;
+	  event.ptid = poll_one_curr_target (&event.ws);
+
+	  if (event.ws.kind == TARGET_WAITKIND_NO_RESUMED)
+	    {
+	      /* If nothing is resumed, remove the target from the
+		 event loop.  */
+	      target_async (0);
+	    }
+	  else if (event.ws.kind != TARGET_WAITKIND_IGNORE)
+	    return event;
+	}
+
+      /* Block waiting for some event.  */
+
+      fd_set readfds;
+      int nfds = 0;
+
+      FD_ZERO (&readfds);
+
+      for (inferior *inf : all_inferiors ())
+	{
+	  process_stratum_target *target = inf->process_target ();
+	  if (target == NULL
+	      || !target->is_async_p ()
+	      || !target->threads_executing)
+	    continue;
+
+	  int fd = target->async_wait_fd ();
+	  FD_SET (fd, &readfds);
+	  if (nfds <= fd)
+	    nfds = fd + 1;
+	}
+
+      if (nfds == 0)
+	{
+	  /* No waitable targets left.  All must be stopped.  */
+	  return {NULL, minus_one_ptid, {TARGET_WAITKIND_NO_RESUMED}};
+	}
+
+      QUIT;
 
-      fprintf_unfiltered (gdb_stdlog,
-			  "infrun: saving status %s for %d.%ld.%ld\n",
-			  statstr.c_str (),
-			  tp->ptid.pid (),
-			  tp->ptid.lwp (),
-			  tp->ptid.tid ());
+      int numfds = interruptible_select (nfds, &readfds, 0, NULL, 0);
+      if (numfds < 0)
+	{
+	  if (errno == EINTR)
+	    continue;
+	  else
+	    perror_with_name ("interruptible_select");
+	}
     }
+}
+
+/* Save the thread's event and stop reason to process it later.  */
+
+static void
+save_waitstatus (struct thread_info *tp, const target_waitstatus *ws)
+{
+  infrun_debug_printf ("saving status %s for %d.%ld.%ld",
+		       target_waitstatus_to_string (ws).c_str (),
+		       tp->ptid.pid (),
+		       tp->ptid.lwp (),
+		       tp->ptid.tid ());
 
   /* Record for later.  */
   tp->suspend.waitstatus = *ws;
   tp->suspend.waitstatus_pending_p = 1;
 
-  struct regcache *regcache = get_thread_regcache (tp);
-  const address_space *aspace = regcache->aspace ();
-
   if (ws->kind == TARGET_WAITKIND_STOPPED
       && ws->value.sig == GDB_SIGNAL_TRAP)
     {
+      struct regcache *regcache = get_thread_regcache (tp);
+      const address_space *aspace = regcache->aspace ();
       CORE_ADDR pc = regcache_read_pc (regcache);
 
       adjust_pc_after_break (tp, &tp->suspend.waitstatus);
 
-      if (thread_stopped_by_watchpoint (tp->ptid))
+      scoped_restore_current_thread restore_thread;
+      switch_to_thread (tp);
+
+      if (target_stopped_by_watchpoint ())
 	{
 	  tp->suspend.stop_reason
 	    = TARGET_STOPPED_BY_WATCHPOINT;
 	}
       else if (target_supports_stopped_by_sw_breakpoint ()
-	       && thread_stopped_by_sw_breakpoint (tp->ptid))
+	       && target_stopped_by_sw_breakpoint ())
 	{
 	  tp->suspend.stop_reason
 	    = TARGET_STOPPED_BY_SW_BREAKPOINT;
 	}
       else if (target_supports_stopped_by_hw_breakpoint ()
-	       && thread_stopped_by_hw_breakpoint (tp->ptid))
+	       && target_stopped_by_hw_breakpoint ())
 	{
 	  tp->suspend.stop_reason
 	    = TARGET_STOPPED_BY_HW_BREAKPOINT;
@@ -4270,6 +4759,200 @@ save_waitstatus (struct thread_info *tp,
     }
 }
 
+/* Mark the non-executing threads accordingly.  In all-stop, all
+   threads of all processes are stopped when we get any event
+   reported.  In non-stop mode, only the event thread stops.  */
+
+static void
+mark_non_executing_threads (process_stratum_target *target,
+			    ptid_t event_ptid,
+			    struct target_waitstatus ws)
+{
+  ptid_t mark_ptid;
+
+  if (!target_is_non_stop_p ())
+    mark_ptid = minus_one_ptid;
+  else if (ws.kind == TARGET_WAITKIND_SIGNALLED
+	   || ws.kind == TARGET_WAITKIND_EXITED)
+    {
+      /* If we're handling a process exit in non-stop mode, even
+	 though threads haven't been deleted yet, one would think
+	 that there is nothing to do, as threads of the dead process
+	 will be soon deleted, and threads of any other process were
+	 left running.  However, on some targets, threads survive a
+	 process exit event.  E.g., for the "checkpoint" command,
+	 when the current checkpoint/fork exits, linux-fork.c
+	 automatically switches to another fork from within
+	 target_mourn_inferior, by associating the same
+	 inferior/thread to another fork.  We haven't mourned yet at
+	 this point, but we must mark any threads left in the
+	 process as not-executing so that finish_thread_state marks
+	 them stopped (in the user's perspective) if/when we present
+	 the stop to the user.  */
+      mark_ptid = ptid_t (event_ptid.pid ());
+    }
+  else
+    mark_ptid = event_ptid;
+
+  set_executing (target, mark_ptid, false);
+
+  /* Likewise the resumed flag.  */
+  set_resumed (target, mark_ptid, false);
+}
+
+/* Handle one event after stopping threads.  If the eventing thread
+   reports back any interesting event, we leave it pending.  If the
+   eventing thread was in the middle of a displaced step, we
+   cancel/finish it, and unless the thread's inferior is being
+   detached, put the thread back in the step-over chain.  Returns true
+   if there are no resumed threads left in the target (thus there's no
+   point in waiting further), false otherwise.  */
+
+static bool
+handle_one (const wait_one_event &event)
+{
+  infrun_debug_printf
+    ("%s %s", target_waitstatus_to_string (&event.ws).c_str (),
+     target_pid_to_str (event.ptid).c_str ());
+
+  if (event.ws.kind == TARGET_WAITKIND_NO_RESUMED)
+    {
+      /* All resumed threads exited.  */
+      return true;
+    }
+  else if (event.ws.kind == TARGET_WAITKIND_THREAD_EXITED
+	   || event.ws.kind == TARGET_WAITKIND_EXITED
+	   || event.ws.kind == TARGET_WAITKIND_SIGNALLED)
+    {
+      /* One thread/process exited/signalled.  */
+
+      thread_info *t = nullptr;
+
+      /* The target may have reported just a pid.  If so, try
+	 the first non-exited thread.  */
+      if (event.ptid.is_pid ())
+	{
+	  int pid  = event.ptid.pid ();
+	  inferior *inf = find_inferior_pid (event.target, pid);
+	  for (thread_info *tp : inf->non_exited_threads ())
+	    {
+	      t = tp;
+	      break;
+	    }
+
+	  /* If there is no available thread, the event would
+	     have to be appended to a per-inferior event list,
+	     which does not exist (and if it did, we'd have
+	     to adjust run control command to be able to
+	     resume such an inferior).  We assert here instead
+	     of going into an infinite loop.  */
+	  gdb_assert (t != nullptr);
+
+	  infrun_debug_printf
+	    ("using %s", target_pid_to_str (t->ptid).c_str ());
+	}
+      else
+	{
+	  t = find_thread_ptid (event.target, event.ptid);
+	  /* Check if this is the first time we see this thread.
+	     Don't bother adding if it individually exited.  */
+	  if (t == nullptr
+	      && event.ws.kind != TARGET_WAITKIND_THREAD_EXITED)
+	    t = add_thread (event.target, event.ptid);
+	}
+
+      if (t != nullptr)
+	{
+	  /* Set the threads as non-executing to avoid
+	     another stop attempt on them.  */
+	  switch_to_thread_no_regs (t);
+	  mark_non_executing_threads (event.target, event.ptid,
+				      event.ws);
+	  save_waitstatus (t, &event.ws);
+	  t->stop_requested = false;
+	}
+    }
+  else
+    {
+      thread_info *t = find_thread_ptid (event.target, event.ptid);
+      if (t == NULL)
+	t = add_thread (event.target, event.ptid);
+
+      t->stop_requested = 0;
+      t->executing = 0;
+      t->resumed = false;
+      t->control.may_range_step = 0;
+
+      /* This may be the first time we see the inferior report
+	 a stop.  */
+      inferior *inf = find_inferior_ptid (event.target, event.ptid);
+      if (inf->needs_setup)
+	{
+	  switch_to_thread_no_regs (t);
+	  setup_inferior (0);
+	}
+
+      if (event.ws.kind == TARGET_WAITKIND_STOPPED
+	  && event.ws.value.sig == GDB_SIGNAL_0)
+	{
+	  /* We caught the event that we intended to catch, so
+	     there's no event pending.  */
+	  t->suspend.waitstatus.kind = TARGET_WAITKIND_IGNORE;
+	  t->suspend.waitstatus_pending_p = 0;
+
+	  if (displaced_step_finish (t, GDB_SIGNAL_0)
+	      == DISPLACED_STEP_FINISH_STATUS_NOT_EXECUTED)
+	    {
+	      /* Add it back to the step-over queue.  */
+	      infrun_debug_printf
+		("displaced-step of %s canceled",
+		 target_pid_to_str (t->ptid).c_str ());
+
+	      t->control.trap_expected = 0;
+	      if (!t->inf->detaching)
+		global_thread_step_over_chain_enqueue (t);
+	    }
+	}
+      else
+	{
+	  enum gdb_signal sig;
+	  struct regcache *regcache;
+
+	  infrun_debug_printf
+	    ("target_wait %s, saving status for %d.%ld.%ld",
+	     target_waitstatus_to_string (&event.ws).c_str (),
+	     t->ptid.pid (), t->ptid.lwp (), t->ptid.tid ());
+
+	  /* Record for later.  */
+	  save_waitstatus (t, &event.ws);
+
+	  sig = (event.ws.kind == TARGET_WAITKIND_STOPPED
+		 ? event.ws.value.sig : GDB_SIGNAL_0);
+
+	  if (displaced_step_finish (t, sig)
+	      == DISPLACED_STEP_FINISH_STATUS_NOT_EXECUTED)
+	    {
+	      /* Add it back to the step-over queue.  */
+	      t->control.trap_expected = 0;
+	      if (!t->inf->detaching)
+		global_thread_step_over_chain_enqueue (t);
+	    }
+
+	  regcache = get_thread_regcache (t);
+	  t->suspend.stop_pc = regcache_read_pc (regcache);
+
+	  infrun_debug_printf ("saved stop_pc=%s for %s "
+			       "(currently_stepping=%d)",
+			       paddress (target_gdbarch (),
+					 t->suspend.stop_pc),
+			       target_pid_to_str (t->ptid).c_str (),
+			       currently_stepping (t));
+	}
+    }
+
+  return false;
+}
+
 /* See infrun.h.  */
 
 void
@@ -4279,15 +4962,33 @@ stop_all_threads (void)
   int pass;
   int iterations = 0;
 
-  gdb_assert (target_is_non_stop_p ());
+  gdb_assert (exists_non_stop_target ());
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "infrun: stop_all_threads\n");
+  infrun_debug_printf ("starting");
 
   scoped_restore_current_thread restore_thread;
 
-  target_thread_events (1);
-  SCOPE_EXIT { target_thread_events (0); };
+  /* Enable thread events of all targets.  */
+  for (auto *target : all_non_exited_process_targets ())
+    {
+      switch_to_target_no_thread (target);
+      target_thread_events (true);
+    }
+
+  SCOPE_EXIT
+    {
+      /* Disable thread events of all targets.  */
+      for (auto *target : all_non_exited_process_targets ())
+	{
+	  switch_to_target_no_thread (target);
+	  target_thread_events (false);
+	}
+
+      /* Use debug_prefixed_printf directly to get a meaningful function
+	 name.  */
+      if (debug_infrun)
+	debug_prefixed_printf ("infrun", "stop_all_threads", "done");
+    };
 
   /* Request threads to stop, and then wait for the stops.  Because
      threads we already know about can spawn more threads while we're
@@ -4296,62 +4997,64 @@ stop_all_threads (void)
      until two passes find no threads that need to be stopped.  */
   for (pass = 0; pass < 2; pass++, iterations++)
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: stop_all_threads, pass=%d, "
-			    "iterations=%d\n", pass, iterations);
+      infrun_debug_printf ("pass=%d, iterations=%d", pass, iterations);
       while (1)
 	{
-	  ptid_t event_ptid;
-	  struct target_waitstatus ws;
-	  int need_wait = 0;
+	  int waits_needed = 0;
 
-	  update_thread_list ();
+	  for (auto *target : all_non_exited_process_targets ())
+	    {
+	      switch_to_target_no_thread (target);
+	      update_thread_list ();
+	    }
 
 	  /* Go through all threads looking for threads that we need
 	     to tell the target to stop.  */
 	  for (thread_info *t : all_non_exited_threads ())
 	    {
+	      /* For a single-target setting with an all-stop target,
+		 we would not even arrive here.  For a multi-target
+		 setting, until GDB is able to handle a mixture of
+		 all-stop and non-stop targets, simply skip all-stop
+		 targets' threads.  This should be fine due to the
+		 protection of 'check_multi_target_resumption'.  */
+
+	      switch_to_thread_no_regs (t);
+	      if (!target_is_non_stop_p ())
+		continue;
+
 	      if (t->executing)
 		{
 		  /* If already stopping, don't request a stop again.
 		     We just haven't seen the notification yet.  */
 		  if (!t->stop_requested)
 		    {
-		      if (debug_infrun)
-			fprintf_unfiltered (gdb_stdlog,
-					    "infrun:   %s executing, "
-					    "need stop\n",
-					    target_pid_to_str (t->ptid).c_str ());
+		      infrun_debug_printf ("  %s executing, need stop",
+					   target_pid_to_str (t->ptid).c_str ());
 		      target_stop (t->ptid);
 		      t->stop_requested = 1;
 		    }
 		  else
 		    {
-		      if (debug_infrun)
-			fprintf_unfiltered (gdb_stdlog,
-					    "infrun:   %s executing, "
-					    "already stopping\n",
-					    target_pid_to_str (t->ptid).c_str ());
+		      infrun_debug_printf ("  %s executing, already stopping",
+					   target_pid_to_str (t->ptid).c_str ());
 		    }
 
 		  if (t->stop_requested)
-		    need_wait = 1;
+		    waits_needed++;
 		}
 	      else
 		{
-		  if (debug_infrun)
-		    fprintf_unfiltered (gdb_stdlog,
-					"infrun:   %s not executing\n",
-					target_pid_to_str (t->ptid).c_str ());
+		  infrun_debug_printf ("  %s not executing",
+				       target_pid_to_str (t->ptid).c_str ());
 
 		  /* The thread may be not executing, but still be
 		     resumed with a pending status to process.  */
-		  t->resumed = 0;
+		  t->resumed = false;
 		}
 	    }
 
-	  if (!need_wait)
+	  if (waits_needed == 0)
 	    break;
 
 	  /* If we find new threads on the second iteration, restart
@@ -4360,134 +5063,30 @@ stop_all_threads (void)
 	  if (pass > 0)
 	    pass = -1;
 
-	  event_ptid = wait_one (&ws);
-	  if (debug_infrun)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "infrun: stop_all_threads %s %s\n",
-				  target_waitstatus_to_string (&ws).c_str (),
-				  target_pid_to_str (event_ptid).c_str ());
-	    }
-
-	  if (ws.kind == TARGET_WAITKIND_NO_RESUMED
-	      || ws.kind == TARGET_WAITKIND_THREAD_EXITED
-	      || ws.kind == TARGET_WAITKIND_EXITED
-	      || ws.kind == TARGET_WAITKIND_SIGNALLED)
+	  for (int i = 0; i < waits_needed; i++)
 	    {
-	      /* All resumed threads exited
-		 or one thread/process exited/signalled.  */
-	    }
-	  else
-	    {
-	      thread_info *t = find_thread_ptid (event_ptid);
-	      if (t == NULL)
-		t = add_thread (event_ptid);
-
-	      t->stop_requested = 0;
-	      t->executing = 0;
-	      t->resumed = 0;
-	      t->control.may_range_step = 0;
-
-	      /* This may be the first time we see the inferior report
-		 a stop.  */
-	      inferior *inf = find_inferior_ptid (event_ptid);
-	      if (inf->needs_setup)
-		{
-		  switch_to_thread_no_regs (t);
-		  setup_inferior (0);
-		}
-
-	      if (ws.kind == TARGET_WAITKIND_STOPPED
-		  && ws.value.sig == GDB_SIGNAL_0)
-		{
-		  /* We caught the event that we intended to catch, so
-		     there's no event pending.  */
-		  t->suspend.waitstatus.kind = TARGET_WAITKIND_IGNORE;
-		  t->suspend.waitstatus_pending_p = 0;
-
-		  if (displaced_step_fixup (t, GDB_SIGNAL_0) < 0)
-		    {
-		      /* Add it back to the step-over queue.  */
-		      if (debug_infrun)
-			{
-			  fprintf_unfiltered (gdb_stdlog,
-					      "infrun: displaced-step of %s "
-					      "canceled: adding back to the "
-					      "step-over queue\n",
-					      target_pid_to_str (t->ptid).c_str ());
-			}
-		      t->control.trap_expected = 0;
-		      thread_step_over_chain_enqueue (t);
-		    }
-		}
-	      else
-		{
-		  enum gdb_signal sig;
-		  struct regcache *regcache;
-
-		  if (debug_infrun)
-		    {
-		      std::string statstr = target_waitstatus_to_string (&ws);
-
-		      fprintf_unfiltered (gdb_stdlog,
-					  "infrun: target_wait %s, saving "
-					  "status for %d.%ld.%ld\n",
-					  statstr.c_str (),
-					  t->ptid.pid (),
-					  t->ptid.lwp (),
-					  t->ptid.tid ());
-		    }
-
-		  /* Record for later.  */
-		  save_waitstatus (t, &ws);
-
-		  sig = (ws.kind == TARGET_WAITKIND_STOPPED
-			 ? ws.value.sig : GDB_SIGNAL_0);
-
-		  if (displaced_step_fixup (t, sig) < 0)
-		    {
-		      /* Add it back to the step-over queue.  */
-		      t->control.trap_expected = 0;
-		      thread_step_over_chain_enqueue (t);
-		    }
-
-		  regcache = get_thread_regcache (t);
-		  t->suspend.stop_pc = regcache_read_pc (regcache);
-
-		  if (debug_infrun)
-		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "infrun: saved stop_pc=%s for %s "
-					  "(currently_stepping=%d)\n",
-					  paddress (target_gdbarch (),
-						    t->suspend.stop_pc),
-					  target_pid_to_str (t->ptid).c_str (),
-					  currently_stepping (t));
-		    }
-		}
+	      wait_one_event event = wait_one ();
+	      if (handle_one (event))
+		break;
 	    }
 	}
     }
-
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "infrun: stop_all_threads done\n");
 }
 
 /* Handle a TARGET_WAITKIND_NO_RESUMED event.  */
 
-static int
+static bool
 handle_no_resumed (struct execution_control_state *ecs)
 {
   if (target_can_async_p ())
     {
-      struct ui *ui;
-      int any_sync = 0;
+      bool any_sync = false;
 
-      ALL_UIS (ui)
+      for (ui *ui : all_uis ())
 	{
 	  if (ui->prompt_state == PROMPT_BLOCKED)
 	    {
-	      any_sync = 1;
+	      any_sync = true;
 	      break;
 	    }
 	}
@@ -4497,12 +5096,9 @@ handle_no_resumed (struct execution_cont
 	     we're not synchronously waiting for events either.  Just
 	     ignore.  */
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: TARGET_WAITKIND_NO_RESUMED "
-				"(ignoring: bg)\n");
+	  infrun_debug_printf ("TARGET_WAITKIND_NO_RESUMED (ignoring: bg)");
 	  prepare_to_wait (ecs);
-	  return 1;
+	  return true;
 	}
     }
 
@@ -4516,17 +5112,17 @@ handle_no_resumed (struct execution_cont
        #0 - thread 1 is left stopped
 
        #1 - thread 2 is resumed and hits breakpoint
-               -> TARGET_WAITKIND_STOPPED
+	       -> TARGET_WAITKIND_STOPPED
 
        #2 - thread 3 is resumed and exits
-            this is the last resumed thread, so
+	    this is the last resumed thread, so
 	       -> TARGET_WAITKIND_NO_RESUMED
 
        #3 - gdb processes stop for thread 2 and decides to re-resume
-            it.
+	    it.
 
        #4 - gdb processes the TARGET_WAITKIND_NO_RESUMED event.
-            thread 2 is now resumed, so the event should be ignored.
+	    thread 2 is now resumed, so the event should be ignored.
 
      IOW, if the stop for thread 2 doesn't end a foreground command,
      then we need to ignore the following TARGET_WAITKIND_NO_RESUMED
@@ -4537,48 +5133,79 @@ handle_no_resumed (struct execution_cont
      have resumed threads _now_.  In the example above, this removes
      thread 3 from the thread list.  If thread 2 was re-resumed, we
      ignore this event.  If we find no thread resumed, then we cancel
-     the synchronous command show "no unwaited-for " to the user.  */
-  update_thread_list ();
+     the synchronous command and show "no unwaited-for " to the
+     user.  */
 
-  for (thread_info *thread : all_non_exited_threads ())
+  inferior *curr_inf = current_inferior ();
+
+  scoped_restore_current_thread restore_thread;
+
+  for (auto *target : all_non_exited_process_targets ())
     {
-      if (thread->executing
-	  || thread->suspend.waitstatus_pending_p)
-	{
-	  /* There were no unwaited-for children left in the target at
-	     some point, but there are now.  Just ignore.  */
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: TARGET_WAITKIND_NO_RESUMED "
-				"(ignoring: found resumed)\n");
-	  prepare_to_wait (ecs);
-	  return 1;
-	}
+      switch_to_target_no_thread (target);
+      update_thread_list ();
     }
 
-  /* Note however that we may find no resumed thread because the whole
-     process exited meanwhile (thus updating the thread list results
-     in an empty thread list).  In this case we know we'll be getting
-     a process exit event shortly.  */
-  for (inferior *inf : all_inferiors ())
+  /* If:
+
+       - the current target has no thread executing, and
+       - the current inferior is native, and
+       - the current inferior is the one which has the terminal, and
+       - we did nothing,
+
+     then a Ctrl-C from this point on would remain stuck in the
+     kernel, until a thread resumes and dequeues it.  That would
+     result in the GDB CLI not reacting to Ctrl-C, not able to
+     interrupt the program.  To address this, if the current inferior
+     no longer has any thread executing, we give the terminal to some
+     other inferior that has at least one thread executing.  */
+  bool swap_terminal = true;
+
+  /* Whether to ignore this TARGET_WAITKIND_NO_RESUMED event, or
+     whether to report it to the user.  */
+  bool ignore_event = false;
+
+  for (thread_info *thread : all_non_exited_threads ())
     {
-      if (inf->pid == 0)
-	continue;
+      if (swap_terminal && thread->executing)
+	{
+	  if (thread->inf != curr_inf)
+	    {
+	      target_terminal::ours ();
+
+	      switch_to_thread (thread);
+	      target_terminal::inferior ();
+	    }
+	  swap_terminal = false;
+	}
 
-      thread_info *thread = any_live_thread_of_inferior (inf);
-      if (thread == NULL)
+      if (!ignore_event
+	  && (thread->executing
+	      || thread->suspend.waitstatus_pending_p))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: TARGET_WAITKIND_NO_RESUMED "
-				"(expect process exit)\n");
-	  prepare_to_wait (ecs);
-	  return 1;
+	  /* Either there were no unwaited-for children left in the
+	     target at some point, but there are now, or some target
+	     other than the eventing one has unwaited-for children
+	     left.  Just ignore.  */
+	  infrun_debug_printf ("TARGET_WAITKIND_NO_RESUMED "
+			       "(ignoring: found resumed)");
+
+	  ignore_event = true;
 	}
+
+      if (ignore_event && !swap_terminal)
+	break;
+    }
+
+  if (ignore_event)
+    {
+      switch_to_inferior_no_thread (curr_inf);
+      prepare_to_wait (ecs);
+      return true;
     }
 
   /* Go ahead and report the event.  */
-  return 0;
+  return false;
 }
 
 /* Given an execution control state that has been freshly filled in by
@@ -4602,11 +5229,7 @@ handle_inferior_event (struct execution_
      end.  */
   scoped_value_mark free_values;
 
-  enum stop_kind stop_soon;
-
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "infrun: handle_inferior_event %s\n",
-			target_waitstatus_to_string (&ecs->ws).c_str ());
+  infrun_debug_printf ("%s", target_waitstatus_to_string (&ecs->ws).c_str ());
 
   if (ecs->ws.kind == TARGET_WAITKIND_IGNORE)
     {
@@ -4633,8 +5256,8 @@ handle_inferior_event (struct execution_
       && handle_no_resumed (ecs))
     return;
 
-  /* Cache the last pid/waitstatus.  */
-  set_last_target_status (ecs->ptid, ecs->ws);
+  /* Cache the last target/ptid/waitstatus.  */
+  set_last_target_status (ecs->target, ecs->ptid, ecs->ws);
 
   /* Always clear state belonging to the previous time we stopped.  */
   stop_stack_dummy = STOP_NONE;
@@ -4643,7 +5266,7 @@ handle_inferior_event (struct execution_
     {
       /* No unwaited-for children left.  IOW, all resumed children
 	 have exited.  */
-      stop_print_frame = 0;
+      stop_print_frame = false;
       stop_waiting (ecs);
       return;
     }
@@ -4651,10 +5274,10 @@ handle_inferior_event (struct execution_
   if (ecs->ws.kind != TARGET_WAITKIND_EXITED
       && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED)
     {
-      ecs->event_thread = find_thread_ptid (ecs->ptid);
+      ecs->event_thread = find_thread_ptid (ecs->target, ecs->ptid);
       /* If it's a new thread, add it to the thread database.  */
       if (ecs->event_thread == NULL)
-	ecs->event_thread = add_thread (ecs->ptid);
+	ecs->event_thread = add_thread (ecs->target, ecs->ptid);
 
       /* Disable range stepping.  If the next step request could use a
 	 range, this will be end up re-enabled then.  */
@@ -4689,127 +5312,92 @@ handle_inferior_event (struct execution_
       if (breakpoint_inserted_here_p (regcache->aspace (),
 				      regcache_read_pc (regcache)))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: Treating signal as SIGTRAP\n");
+	  infrun_debug_printf ("Treating signal as SIGTRAP");
 	  ecs->ws.value.sig = GDB_SIGNAL_TRAP;
 	}
     }
 
-  /* Mark the non-executing threads accordingly.  In all-stop, all
-     threads of all processes are stopped when we get any event
-     reported.  In non-stop mode, only the event thread stops.  */
-  {
-    ptid_t mark_ptid;
-
-    if (!target_is_non_stop_p ())
-      mark_ptid = minus_one_ptid;
-    else if (ecs->ws.kind == TARGET_WAITKIND_SIGNALLED
-	     || ecs->ws.kind == TARGET_WAITKIND_EXITED)
-      {
-	/* If we're handling a process exit in non-stop mode, even
-	   though threads haven't been deleted yet, one would think
-	   that there is nothing to do, as threads of the dead process
-	   will be soon deleted, and threads of any other process were
-	   left running.  However, on some targets, threads survive a
-	   process exit event.  E.g., for the "checkpoint" command,
-	   when the current checkpoint/fork exits, linux-fork.c
-	   automatically switches to another fork from within
-	   target_mourn_inferior, by associating the same
-	   inferior/thread to another fork.  We haven't mourned yet at
-	   this point, but we must mark any threads left in the
-	   process as not-executing so that finish_thread_state marks
-	   them stopped (in the user's perspective) if/when we present
-	   the stop to the user.  */
-	mark_ptid = ptid_t (ecs->ptid.pid ());
-      }
-    else
-      mark_ptid = ecs->ptid;
-
-    set_executing (mark_ptid, 0);
-
-    /* Likewise the resumed flag.  */
-    set_resumed (mark_ptid, 0);
-  }
+  mark_non_executing_threads (ecs->target, ecs->ptid, ecs->ws);
 
   switch (ecs->ws.kind)
     {
     case TARGET_WAITKIND_LOADED:
-      context_switch (ecs);
-      /* Ignore gracefully during startup of the inferior, as it might
-         be the shell which has just loaded some objects, otherwise
-         add the symbols for the newly loaded objects.  Also ignore at
-         the beginning of an attach or remote session; we will query
-         the full list of libraries once the connection is
-         established.  */
-
-      stop_soon = get_inferior_stop_soon (ecs);
-      if (stop_soon == NO_STOP_QUIETLY)
-	{
-	  struct regcache *regcache;
+      {
+	context_switch (ecs);
+	/* Ignore gracefully during startup of the inferior, as it might
+	   be the shell which has just loaded some objects, otherwise
+	   add the symbols for the newly loaded objects.  Also ignore at
+	   the beginning of an attach or remote session; we will query
+	   the full list of libraries once the connection is
+	   established.  */
 
-	  regcache = get_thread_regcache (ecs->event_thread);
+	stop_kind stop_soon = get_inferior_stop_soon (ecs);
+	if (stop_soon == NO_STOP_QUIETLY)
+	  {
+	    struct regcache *regcache;
 
-	  handle_solib_event ();
+	    regcache = get_thread_regcache (ecs->event_thread);
 
-	  ecs->event_thread->control.stop_bpstat
-	    = bpstat_stop_status (regcache->aspace (),
-				  ecs->event_thread->suspend.stop_pc,
-				  ecs->event_thread, &ecs->ws);
+	    handle_solib_event ();
 
-	  if (handle_stop_requested (ecs))
-	    return;
+	    ecs->event_thread->control.stop_bpstat
+	      = bpstat_stop_status (regcache->aspace (),
+				    ecs->event_thread->suspend.stop_pc,
+				    ecs->event_thread, &ecs->ws);
 
-	  if (bpstat_causes_stop (ecs->event_thread->control.stop_bpstat))
-	    {
-	      /* A catchpoint triggered.  */
-	      process_event_stop_test (ecs);
+	    if (handle_stop_requested (ecs))
 	      return;
-	    }
 
-	  /* 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).  */
-	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
-	  if (stop_on_solib_events)
-	    {
-	      /* Make sure we print "Stopped due to solib-event" in
-		 normal_stop.  */
-	      stop_print_frame = 1;
+	    if (bpstat_causes_stop (ecs->event_thread->control.stop_bpstat))
+	      {
+		/* A catchpoint triggered.  */
+		process_event_stop_test (ecs);
+		return;
+	      }
 
-	      stop_waiting (ecs);
-	      return;
-	    }
-	}
+	    /* 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).  */
+	    ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
+	    if (stop_on_solib_events)
+	      {
+		/* Make sure we print "Stopped due to solib-event" in
+		   normal_stop.  */
+		stop_print_frame = true;
 
-      /* If we are skipping through a shell, or through shared library
-	 loading that we aren't interested in, resume the program.  If
-	 we're running the program normally, also resume.  */
-      if (stop_soon == STOP_QUIETLY || stop_soon == NO_STOP_QUIETLY)
-	{
-	  /* Loading of shared libraries might have changed breakpoint
-	     addresses.  Make sure new breakpoints are inserted.  */
-	  if (stop_soon == NO_STOP_QUIETLY)
-	    insert_breakpoints ();
-	  resume (GDB_SIGNAL_0);
-	  prepare_to_wait (ecs);
-	  return;
-	}
+		stop_waiting (ecs);
+		return;
+	      }
+	  }
 
-      /* But stop if we're attaching or setting up a remote
-	 connection.  */
-      if (stop_soon == STOP_QUIETLY_NO_SIGSTOP
-	  || stop_soon == STOP_QUIETLY_REMOTE)
-	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog, "infrun: quietly stopped\n");
-	  stop_waiting (ecs);
-	  return;
-	}
+	/* If we are skipping through a shell, or through shared library
+	   loading that we aren't interested in, resume the program.  If
+	   we're running the program normally, also resume.  */
+	if (stop_soon == STOP_QUIETLY || stop_soon == NO_STOP_QUIETLY)
+	  {
+	    /* Loading of shared libraries might have changed breakpoint
+	       addresses.  Make sure new breakpoints are inserted.  */
+	    if (stop_soon == NO_STOP_QUIETLY)
+	      insert_breakpoints ();
+	    resume (GDB_SIGNAL_0);
+	    prepare_to_wait (ecs);
+	    return;
+	  }
 
-      internal_error (__FILE__, __LINE__,
-		      _("unhandled stop_soon: %d"), (int) stop_soon);
+	/* But stop if we're attaching or setting up a remote
+	   connection.  */
+	if (stop_soon == STOP_QUIETLY_NO_SIGSTOP
+	    || stop_soon == STOP_QUIETLY_REMOTE)
+	  {
+	    infrun_debug_printf ("quietly stopped");
+	    stop_waiting (ecs);
+	    return;
+	  }
+
+	internal_error (__FILE__, __LINE__,
+			_("unhandled stop_soon: %d"), (int) stop_soon);
+      }
 
     case TARGET_WAITKIND_SPURIOUS:
       if (handle_stop_requested (ecs))
@@ -4829,9 +5417,21 @@ handle_inferior_event (struct execution_
 
     case TARGET_WAITKIND_EXITED:
     case TARGET_WAITKIND_SIGNALLED:
-      inferior_ptid = ecs->ptid;
-      set_current_inferior (find_inferior_ptid (ecs->ptid));
-      set_current_program_space (current_inferior ()->pspace);
+      {
+	/* Depending on the system, ecs->ptid may point to a thread or
+	   to a process.  On some targets, target_mourn_inferior may
+	   need to have access to the just-exited thread.  That is the
+	   case of GNU/Linux's "checkpoint" support, for example.
+	   Call the switch_to_xxx routine as appropriate.  */
+	thread_info *thr = find_thread_ptid (ecs->target, ecs->ptid);
+	if (thr != nullptr)
+	  switch_to_thread (thr);
+	else
+	  {
+	    inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid);
+	    switch_to_inferior_no_thread (inf);
+	  }
+      }
       handle_vfork_child_exec_or_exit (0);
       target_terminal::ours ();	/* Must do this before mourn anyway.  */
 
@@ -4875,9 +5475,8 @@ handle_inferior_event (struct execution_
 		 information to the user.  It's better to just warn
 		 her about it (if infrun debugging is enabled), and
 		 give up.  */
-	      if (debug_infrun)
-		fprintf_filtered (gdb_stdlog, _("\
-Cannot fill $_exitsignal with the correct signal number.\n"));
+	      infrun_debug_printf ("Cannot fill $_exitsignal with the correct "
+				   "signal number.");
 	    }
 
 	  gdb::observers::signal_exited.notify (ecs->ws.value.sig);
@@ -4885,25 +5484,37 @@ Cannot fill $_exitsignal with the correc
 
       gdb_flush (gdb_stdout);
       target_mourn_inferior (inferior_ptid);
-      stop_print_frame = 0;
+      stop_print_frame = false;
       stop_waiting (ecs);
       return;
 
-      /* The following are the only cases in which we keep going;
-         the above cases end in a continue or goto.  */
     case TARGET_WAITKIND_FORKED:
     case TARGET_WAITKIND_VFORKED:
       /* Check whether the inferior is displaced stepping.  */
       {
 	struct regcache *regcache = get_thread_regcache (ecs->event_thread);
 	struct gdbarch *gdbarch = regcache->arch ();
+	inferior *parent_inf = find_inferior_ptid (ecs->target, ecs->ptid);
 
-	/* If checking displaced stepping is supported, and thread
-	   ecs->ptid is displaced stepping.  */
+	/* If this is a fork (child gets its own address space copy)
+	   and some displaced step buffers were in use at the time of
+	   the fork, restore the displaced step buffer bytes in the
+	   child process.
+
+	   Architectures which support displaced stepping and fork
+	   events must supply an implementation of
+	   gdbarch_displaced_step_restore_all_in_ptid.  This is not
+	   enforced during gdbarch validation to support architectures
+	   which support displaced stepping but not forks.  */
+	if (ecs->ws.kind == TARGET_WAITKIND_FORKED
+	    && gdbarch_supports_displaced_stepping (gdbarch))
+	  gdbarch_displaced_step_restore_all_in_ptid
+	    (gdbarch, parent_inf, ecs->ws.value.related_pid);
+
+	/* If displaced stepping is supported, and thread ecs->ptid is
+	   displaced stepping.  */
 	if (displaced_step_in_progress_thread (ecs->event_thread))
 	  {
-	    struct inferior *parent_inf
-	      = find_inferior_ptid (ecs->ptid);
 	    struct regcache *child_regcache;
 	    CORE_ADDR parent_pc;
 
@@ -4912,20 +5523,11 @@ Cannot fill $_exitsignal with the correc
 	       has been done.  Perform cleanup for parent process here.  Note
 	       that this operation also cleans up the child process for vfork,
 	       because their pages are shared.  */
-	    displaced_step_fixup (ecs->event_thread, GDB_SIGNAL_TRAP);
+	    displaced_step_finish (ecs->event_thread, GDB_SIGNAL_TRAP);
 	    /* Start a new step-over in another thread if there's one
 	       that needs it.  */
 	    start_step_over ();
 
-	    if (ecs->ws.kind == TARGET_WAITKIND_FORKED)
-	      {
-		struct displaced_step_inferior_state *displaced
-		  = get_displaced_stepping_state (parent_inf);
-
-		/* Restore scratch pad for child process.  */
-		displaced_step_restore (displaced, ecs->ws.value.related_pid);
-	      }
-
 	    /* Since the vfork/fork syscall instruction was executed in the scratchpad,
 	       the child's PC is also within the scratchpad.  Set the child's PC
 	       to the parent's PC value, which has already been fixed up.
@@ -4934,18 +5536,17 @@ Cannot fill $_exitsignal with the correc
 	       list yet at this point.  */
 
 	    child_regcache
-	      = get_thread_arch_aspace_regcache (ecs->ws.value.related_pid,
+	      = get_thread_arch_aspace_regcache (parent_inf->process_target (),
+						 ecs->ws.value.related_pid,
 						 gdbarch,
 						 parent_inf->aspace);
 	    /* Read PC value of parent process.  */
 	    parent_pc = regcache_read_pc (regcache);
 
-	    if (debug_displaced)
-	      fprintf_unfiltered (gdb_stdlog,
-				  "displaced: write child pc from %s to %s\n",
-				  paddress (gdbarch,
-					    regcache_read_pc (child_regcache)),
-				  paddress (gdbarch, parent_pc));
+	    displaced_debug_printf ("write child pc from %s to %s",
+				    paddress (gdbarch,
+					      regcache_read_pc (child_regcache)),
+				    paddress (gdbarch, parent_pc));
 
 	    regcache_write_pc (child_regcache, parent_pc);
 	  }
@@ -4996,16 +5597,21 @@ Cannot fill $_exitsignal with the correc
 	 watchpoints, for example, always appear in the bpstat.  */
       if (!bpstat_causes_stop (ecs->event_thread->control.stop_bpstat))
 	{
-	  int should_resume;
-	  int follow_child
+	  bool follow_child
 	    = (follow_fork_mode_string == follow_fork_mode_child);
 
 	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 
-	  should_resume = follow_fork ();
+	  process_stratum_target *targ
+	    = ecs->event_thread->inf->process_target ();
+
+	  bool should_resume = follow_fork ();
 
+	  /* Note that one of these may be an invalid pointer,
+	     depending on detach_fork.  */
 	  thread_info *parent = ecs->event_thread;
-	  thread_info *child = find_thread_ptid (ecs->ws.value.related_pid);
+	  thread_info *child
+	    = find_thread_ptid (targ, ecs->ws.value.related_pid);
 
 	  /* At this point, the parent is marked running, and the
 	     child is marked stopped.  */
@@ -5077,8 +5683,8 @@ Cannot fill $_exitsignal with the correc
       handle_vfork_child_exec_or_exit (1);
 
       /* This causes the eventpoints and symbol table to be reset.
-         Must do this now, before trying to determine whether to
-         stop.  */
+	 Must do this now, before trying to determine whether to
+	 stop.  */
       follow_exec (inferior_ptid, ecs->ws.value.execd_pathname);
 
       /* In follow_exec we may have deleted the original thread and
@@ -5113,7 +5719,7 @@ Cannot fill $_exitsignal with the correc
       return;
 
       /* Be careful not to try to gather much state about a thread
-         that's in a syscall.  It's frequently a losing proposition.  */
+	 that's in a syscall.  It's frequently a losing proposition.  */
     case TARGET_WAITKIND_SYSCALL_ENTRY:
       /* Getting the current syscall number.  */
       if (handle_syscall_event (ecs) == 0)
@@ -5121,10 +5727,10 @@ Cannot fill $_exitsignal with the correc
       return;
 
       /* Before examining the threads further, step this thread to
-         get it entirely out of the syscall.  (We get notice of the
-         event when the thread is just on the verge of exiting a
-         syscall.  Stepping one instruction seems to get it back
-         into user code.)  */
+	 get it entirely out of the syscall.  (We get notice of the
+	 event when the thread is just on the verge of exiting a
+	 syscall.  Stepping one instruction seems to get it back
+	 into user code.)  */
     case TARGET_WAITKIND_SYSCALL_RETURN:
       if (handle_syscall_event (ecs) == 0)
 	process_event_stop_test (ecs);
@@ -5139,8 +5745,7 @@ Cannot fill $_exitsignal with the correc
 
       /* Switch to the stopped thread.  */
       context_switch (ecs);
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: stopped\n");
+      infrun_debug_printf ("stopped");
 
       delete_just_stopped_threads_single_step_breakpoints ();
       ecs->event_thread->suspend.stop_pc
@@ -5167,43 +5772,41 @@ restart_threads (struct thread_info *eve
 
   for (thread_info *tp : all_non_exited_threads ())
     {
+      if (tp->inf->detaching)
+	{
+	  infrun_debug_printf ("restart threads: [%s] inferior detaching",
+			       target_pid_to_str (tp->ptid).c_str ());
+	  continue;
+	}
+
+      switch_to_thread_no_regs (tp);
+
       if (tp == event_thread)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: "
-				"[%s] is event thread\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("restart threads: [%s] is event thread",
+			       target_pid_to_str (tp->ptid).c_str ());
 	  continue;
 	}
 
       if (!(tp->state == THREAD_RUNNING || tp->control.in_infcall))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: "
-				"[%s] not meant to be running\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("restart threads: [%s] not meant to be running",
+			       target_pid_to_str (tp->ptid).c_str ());
 	  continue;
 	}
 
       if (tp->resumed)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: [%s] resumed\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("restart threads: [%s] resumed",
+			      target_pid_to_str (tp->ptid).c_str ());
 	  gdb_assert (tp->executing || tp->suspend.waitstatus_pending_p);
 	  continue;
 	}
 
       if (thread_is_in_step_over_chain (tp))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: "
-				"[%s] needs step-over\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("restart threads: [%s] needs step-over",
+			       target_pid_to_str (tp->ptid).c_str ());
 	  gdb_assert (!tp->resumed);
 	  continue;
 	}
@@ -5211,12 +5814,9 @@ restart_threads (struct thread_info *eve
 
       if (tp->suspend.waitstatus_pending_p)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: "
-				"[%s] has pending status\n",
-				target_pid_to_str (tp->ptid).c_str ());
-	  tp->resumed = 1;
+	  infrun_debug_printf ("restart threads: [%s] has pending status",
+			       target_pid_to_str (tp->ptid).c_str ());
+	  tp->resumed = true;
 	  continue;
 	}
 
@@ -5235,10 +5835,8 @@ restart_threads (struct thread_info *eve
 
       if (currently_stepping (tp))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: [%s] was stepping\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("restart threads: [%s] was stepping",
+			       target_pid_to_str (tp->ptid).c_str ());
 	  keep_going_stepped_thread (tp);
 	}
       else
@@ -5246,10 +5844,8 @@ restart_threads (struct thread_info *eve
 	  struct execution_control_state ecss;
 	  struct execution_control_state *ecs = &ecss;
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: restart threads: [%s] continuing\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("restart threads: [%s] continuing",
+			       target_pid_to_str (tp->ptid).c_str ());
 	  reset_ecs (ecs, tp);
 	  switch_to_thread (tp);
 	  keep_going_pass_signal (ecs);
@@ -5277,12 +5873,10 @@ resumed_thread_with_pending_status (stru
 static int
 finish_step_over (struct execution_control_state *ecs)
 {
-  int had_step_over_info;
-
-  displaced_step_fixup (ecs->event_thread,
-			ecs->event_thread->suspend.stop_signal);
+  displaced_step_finish (ecs->event_thread,
+			 ecs->event_thread->suspend.stop_signal);
 
-  had_step_over_info = step_over_info_valid_p ();
+  bool had_step_over_info = step_over_info_valid_p ();
 
   if (had_step_over_info)
     {
@@ -5342,12 +5936,8 @@ finish_step_over (struct execution_contr
 	  struct thread_info *tp = ecs->event_thread;
 	  struct regcache *regcache;
 
-	  if (debug_infrun)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "infrun: found resumed threads with "
-				  "pending events, saving status\n");
-	    }
+	  infrun_debug_printf ("found resumed threads with "
+			       "pending events, saving status");
 
 	  gdb_assert (pending != tp);
 
@@ -5356,23 +5946,19 @@ finish_step_over (struct execution_contr
 	  /* This was cleared early, by handle_inferior_event.  Set it
 	     so this pending event is considered by
 	     do_target_wait.  */
-	  tp->resumed = 1;
+	  tp->resumed = true;
 
 	  gdb_assert (!tp->executing);
 
 	  regcache = get_thread_regcache (tp);
 	  tp->suspend.stop_pc = regcache_read_pc (regcache);
 
-	  if (debug_infrun)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "infrun: saved stop_pc=%s for %s "
-				  "(currently_stepping=%d)\n",
-				  paddress (target_gdbarch (),
-					    tp->suspend.stop_pc),
-				  target_pid_to_str (tp->ptid).c_str (),
-				  currently_stepping (tp));
-	    }
+	  infrun_debug_printf ("saved stop_pc=%s for %s "
+			       "(currently_stepping=%d)",
+			       paddress (target_gdbarch (),
+					 tp->suspend.stop_pc),
+			       target_pid_to_str (tp->ptid).c_str (),
+			       currently_stepping (tp));
 
 	  /* This in-line step-over finished; clear this so we won't
 	     start a new one.  This is what handle_signal_stop would
@@ -5421,30 +6007,31 @@ handle_signal_stop (struct execution_con
   ecs->event_thread->suspend.stop_pc
     = regcache_read_pc (get_thread_regcache (ecs->event_thread));
 
+  context_switch (ecs);
+
+  if (deprecated_context_hook)
+    deprecated_context_hook (ecs->event_thread->global_num);
+
   if (debug_infrun)
     {
       struct regcache *regcache = get_thread_regcache (ecs->event_thread);
       struct gdbarch *reg_gdbarch = regcache->arch ();
-      scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
 
-      inferior_ptid = ecs->ptid;
-
-      fprintf_unfiltered (gdb_stdlog, "infrun: stop_pc = %s\n",
-			  paddress (reg_gdbarch,
-				    ecs->event_thread->suspend.stop_pc));
+      infrun_debug_printf ("stop_pc=%s",
+			   paddress (reg_gdbarch,
+				     ecs->event_thread->suspend.stop_pc));
       if (target_stopped_by_watchpoint ())
 	{
-          CORE_ADDR addr;
+	  CORE_ADDR addr;
 
-	  fprintf_unfiltered (gdb_stdlog, "infrun: stopped by watchpoint\n");
+	  infrun_debug_printf ("stopped by watchpoint");
 
-	  if (target_stopped_data_address (current_top_target (), &addr))
-            fprintf_unfiltered (gdb_stdlog,
-                                "infrun: stopped data address = %s\n",
-                                paddress (reg_gdbarch, addr));
-          else
-            fprintf_unfiltered (gdb_stdlog,
-                                "infrun: (no data address available)\n");
+	  if (target_stopped_data_address (current_inferior ()->top_target (),
+					   &addr))
+	    infrun_debug_printf ("stopped data address=%s",
+				 paddress (reg_gdbarch, addr));
+	  else
+	    infrun_debug_printf ("(no data address available)");
 	}
     }
 
@@ -5453,10 +6040,8 @@ handle_signal_stop (struct execution_con
   stop_soon = get_inferior_stop_soon (ecs);
   if (stop_soon == STOP_QUIETLY || stop_soon == STOP_QUIETLY_REMOTE)
     {
-      context_switch (ecs);
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: quietly stopped\n");
-      stop_print_frame = 1;
+      infrun_debug_printf ("quietly stopped");
+      stop_print_frame = true;
       stop_waiting (ecs);
       return;
     }
@@ -5486,25 +6071,12 @@ handle_signal_stop (struct execution_con
 	  || ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
 	  || ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_0))
     {
-      stop_print_frame = 1;
+      stop_print_frame = true;
       stop_waiting (ecs);
       ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
       return;
     }
 
-  /* See if something interesting happened to the non-current thread.  If
-     so, then switch to that thread.  */
-  if (ecs->ptid != inferior_ptid)
-    {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: context switch\n");
-
-      context_switch (ecs);
-
-      if (deprecated_context_hook)
-	deprecated_context_hook (ecs->event_thread->global_num);
-    }
-
   /* At this point, get hold of the now-current thread's frame.  */
   frame = get_current_frame ();
   gdbarch = get_frame_arch (frame);
@@ -5528,25 +6100,16 @@ handle_signal_stop (struct execution_con
 	{
 	  if (single_step_breakpoint_inserted_here_p (aspace, pc))
 	    {
-	      if (debug_infrun)
-		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "infrun: [%s] hit another thread's "
-				      "single-step breakpoint\n",
-				      target_pid_to_str (ecs->ptid).c_str ());
-		}
+	      infrun_debug_printf ("[%s] hit another thread's single-step "
+				   "breakpoint",
+				   target_pid_to_str (ecs->ptid).c_str ());
 	      ecs->hit_singlestep_breakpoint = 1;
 	    }
 	}
       else
 	{
-	  if (debug_infrun)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "infrun: [%s] hit its "
-				  "single-step breakpoint\n",
-				  target_pid_to_str (ecs->ptid).c_str ());
-	    }
+	  infrun_debug_printf ("[%s] hit its single-step breakpoint",
+			       target_pid_to_str (ecs->ptid).c_str ());
 	}
     }
   delete_just_stopped_threads_single_step_breakpoints ();
@@ -5561,19 +6124,19 @@ handle_signal_stop (struct execution_con
   /* If necessary, step over this watchpoint.  We'll be back to display
      it in a moment.  */
   if (stopped_by_watchpoint
-      && (target_have_steppable_watchpoint
+      && (target_have_steppable_watchpoint ()
 	  || gdbarch_have_nonsteppable_watchpoint (gdbarch)))
     {
       /* At this point, we are stopped at an instruction which has
-         attempted to write to a piece of memory under control of
-         a watchpoint.  The instruction hasn't actually executed
-         yet.  If we were to evaluate the watchpoint expression
-         now, we would get the old value, and therefore no change
-         would seem to have occurred.
-
-         In order to make watchpoints work `right', we really need
-         to complete the memory write, and then evaluate the
-         watchpoint expression.  We do this by single-stepping the
+	 attempted to write to a piece of memory under control of
+	 a watchpoint.  The instruction hasn't actually executed
+	 yet.  If we were to evaluate the watchpoint expression
+	 now, we would get the old value, and therefore no change
+	 would seem to have occurred.
+
+	 In order to make watchpoints work `right', we really need
+	 to complete the memory write, and then evaluate the
+	 watchpoint expression.  We do this by single-stepping the
 	 target.
 
 	 It may not be necessary to disable the watchpoint to step over
@@ -5600,7 +6163,7 @@ handle_signal_stop (struct execution_con
   ecs->event_thread->stepping_over_watchpoint = 0;
   bpstat_clear (&ecs->event_thread->control.stop_bpstat);
   ecs->event_thread->control.stop_step = 0;
-  stop_print_frame = 1;
+  stop_print_frame = true;
   stopped_by_random_signal = 0;
   bpstat stop_chain = NULL;
 
@@ -5661,16 +6224,17 @@ handle_signal_stop (struct execution_con
       int step_through_delay
 	= gdbarch_single_step_through_delay (gdbarch, frame);
 
-      if (debug_infrun && step_through_delay)
-	fprintf_unfiltered (gdb_stdlog, "infrun: step through delay\n");
+      if (step_through_delay)
+	infrun_debug_printf ("step through delay");
+
       if (ecs->event_thread->control.step_range_end == 0
 	  && step_through_delay)
 	{
 	  /* The user issued a continue when stopped at a breakpoint.
 	     Set up for another trap and get out of here.  */
-         ecs->event_thread->stepping_over_breakpoint = 1;
-         keep_going (ecs);
-         return;
+	 ecs->event_thread->stepping_over_breakpoint = 1;
+	 keep_going (ecs);
+	 return;
 	}
       else if (step_through_delay)
 	{
@@ -5693,7 +6257,7 @@ handle_signal_stop (struct execution_con
 
   /* Following in case break condition called a
      function.  */
-  stop_print_frame = 1;
+  stop_print_frame = true;
 
   /* This is where we handle "moribund" watchpoints.  Unlike
      software breakpoints traps, hardware watchpoint traps are
@@ -5703,14 +6267,14 @@ handle_signal_stop (struct execution_con
      simply make sure to ignore it if `stopped_by_watchpoint' is
      set.  */
 
-  if (debug_infrun
-      && ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
+  if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
       && !bpstat_explains_signal (ecs->event_thread->control.stop_bpstat,
 				  GDB_SIGNAL_TRAP)
       && stopped_by_watchpoint)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: no user watchpoint explains "
-			"watchpoint SIGTRAP, ignoring\n");
+    {
+      infrun_debug_printf ("no user watchpoint explains watchpoint SIGTRAP, "
+			   "ignoring");
+    }
 
   /* NOTE: cagney/2003-03-29: These checks for a random signal
      at one stage in the past included checks for an inferior
@@ -5741,8 +6305,8 @@ handle_signal_stop (struct execution_con
      been removed.  */
   if (random_signal && target_stopped_by_sw_breakpoint ())
     {
-      if (program_breakpoint_here_p (gdbarch,
-				     ecs->event_thread->suspend.stop_pc))
+      if (gdbarch_program_breakpoint_here_p (gdbarch,
+					     ecs->event_thread->suspend.stop_pc))
 	{
 	  struct regcache *regcache;
 	  int decr_pc;
@@ -5767,10 +6331,7 @@ handle_signal_stop (struct execution_con
       else
 	{
 	  /* A delayed software breakpoint event.  Ignore the trap.  */
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: delayed software breakpoint "
-				"trap, ignoring\n");
+	  infrun_debug_printf ("delayed software breakpoint trap, ignoring");
 	  random_signal = 0;
 	}
     }
@@ -5780,10 +6341,8 @@ handle_signal_stop (struct execution_con
   if (random_signal && target_stopped_by_hw_breakpoint ())
     {
       /* A delayed hardware breakpoint event.  Ignore the trap.  */
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: delayed hardware breakpoint/watchpoint "
-			    "trap, ignoring\n");
+      infrun_debug_printf ("delayed hardware breakpoint/watchpoint "
+			   "trap, ignoring");
       random_signal = 0;
     }
 
@@ -5807,8 +6366,7 @@ handle_signal_stop (struct execution_con
   if (ecs->event_thread->stop_requested)
     {
       random_signal = 1;
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: user-requested stop\n");
+      infrun_debug_printf ("user-requested stop");
     }
 
   /* For the program's own signals, act according to
@@ -5817,12 +6375,10 @@ handle_signal_stop (struct execution_con
   if (random_signal)
     {
       /* Signal not for debugging purposes.  */
-      struct inferior *inf = find_inferior_ptid (ecs->ptid);
       enum gdb_signal stop_signal = ecs->event_thread->suspend.stop_signal;
 
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog, "infrun: random signal (%s)\n",
-			     gdb_signal_to_symbol_string (stop_signal));
+      infrun_debug_printf ("random signal (%s)",
+			   gdb_signal_to_symbol_string (stop_signal));
 
       stopped_by_random_signal = 1;
 
@@ -5831,8 +6387,7 @@ handle_signal_stop (struct execution_con
 	 to remain stopped.  */
       if (stop_soon != NO_STOP_QUIETLY
 	  || ecs->event_thread->stop_requested
-	  || (!inf->detaching
-	      && signal_stop_state (ecs->event_thread->suspend.stop_signal)))
+	  || signal_stop_state (ecs->event_thread->suspend.stop_signal))
 	{
 	  stop_waiting (ecs);
 	  return;
@@ -5867,10 +6422,7 @@ handle_signal_stop (struct execution_con
 	     code paths as single-step - set a breakpoint at the
 	     signal return address and then, once hit, step off that
 	     breakpoint.  */
-          if (debug_infrun)
-            fprintf_unfiltered (gdb_stdlog,
-                                "infrun: signal arrived while stepping over "
-                                "breakpoint\n");
+	  infrun_debug_printf ("signal arrived while stepping over breakpoint");
 
 	  insert_hp_step_resume_breakpoint_at_frame (frame);
 	  ecs->event_thread->step_after_step_resume_breakpoint = 1;
@@ -5901,10 +6453,7 @@ handle_signal_stop (struct execution_con
 	     Note that this is only needed for a signal delivered
 	     while in the single-step range.  Nested signals aren't a
 	     problem as they eventually all return.  */
-          if (debug_infrun)
-            fprintf_unfiltered (gdb_stdlog,
-                                "infrun: signal may take us out of "
-                                "single-step range\n");
+	  infrun_debug_printf ("signal may take us out of single-step range");
 
 	  clear_step_over_info ();
 	  insert_hp_step_resume_breakpoint_at_frame (frame);
@@ -5924,9 +6473,7 @@ handle_signal_stop (struct execution_con
 
       if (!switch_back_to_stepped_thread (ecs))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: random signal, keep going\n");
+	  infrun_debug_printf ("random signal, keep going");
 
 	  keep_going (ecs);
 	}
@@ -5980,9 +6527,7 @@ process_event_stop_test (struct executio
 	 install a momentary breakpoint at the target of the
 	 jmp_buf.  */
 
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME\n");
+      infrun_debug_printf ("BPSTAT_WHAT_SET_LONGJMP_RESUME");
 
       ecs->event_thread->stepping_over_breakpoint = 1;
 
@@ -6003,10 +6548,8 @@ process_event_stop_test (struct executio
 		   || !gdbarch_get_longjmp_target (gdbarch,
 						   frame, &jmp_buf_pc))
 	    {
-	      if (debug_infrun)
-		fprintf_unfiltered (gdb_stdlog,
-				    "infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME "
-				    "(!gdbarch_get_longjmp_target)\n");
+	      infrun_debug_printf ("BPSTAT_WHAT_SET_LONGJMP_RESUME "
+				   "(!gdbarch_get_longjmp_target)");
 	      keep_going (ecs);
 	      return;
 	    }
@@ -6041,9 +6584,7 @@ process_event_stop_test (struct executio
 	   against stale dummy frames and user is not interested in
 	   stopping around longjmps.  */
 
-	if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: BPSTAT_WHAT_CLEAR_LONGJMP_RESUME\n");
+	infrun_debug_printf ("BPSTAT_WHAT_CLEAR_LONGJMP_RESUME");
 
 	gdb_assert (ecs->event_thread->control.exception_resume_breakpoint
 		    != NULL);
@@ -6089,16 +6630,14 @@ process_event_stop_test (struct executio
       return;
 
     case BPSTAT_WHAT_SINGLE:
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_SINGLE\n");
+      infrun_debug_printf ("BPSTAT_WHAT_SINGLE");
       ecs->event_thread->stepping_over_breakpoint = 1;
       /* Still need to check other stuff, at least the case where we
 	 are stepping and step out of the right range.  */
       break;
 
     case BPSTAT_WHAT_STEP_RESUME:
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STEP_RESUME\n");
+      infrun_debug_printf ("BPSTAT_WHAT_STEP_RESUME");
 
       delete_step_resume_breakpoint (ecs->event_thread);
       if (ecs->event_thread->control.proceed_to_finish
@@ -6130,11 +6669,10 @@ process_event_stop_test (struct executio
       break;
 
     case BPSTAT_WHAT_STOP_NOISY:
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_NOISY\n");
-      stop_print_frame = 1;
+      infrun_debug_printf ("BPSTAT_WHAT_STOP_NOISY");
+      stop_print_frame = true;
 
-      /* Assume the thread stopped for a breapoint.  We'll still check
+      /* Assume the thread stopped for a breakpoint.  We'll still check
 	 whether a/the breakpoint is there when the thread is next
 	 resumed.  */
       ecs->event_thread->stepping_over_breakpoint = 1;
@@ -6143,11 +6681,10 @@ process_event_stop_test (struct executio
       return;
 
     case BPSTAT_WHAT_STOP_SILENT:
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_SILENT\n");
-      stop_print_frame = 0;
+      infrun_debug_printf ("BPSTAT_WHAT_STOP_SILENT");
+      stop_print_frame = false;
 
-      /* Assume the thread stopped for a breapoint.  We'll still check
+      /* Assume the thread stopped for a breakpoint.  We'll still check
 	 whether a/the breakpoint is there when the thread is next
 	 resumed.  */
       ecs->event_thread->stepping_over_breakpoint = 1;
@@ -6155,8 +6692,7 @@ process_event_stop_test (struct executio
       return;
 
     case BPSTAT_WHAT_HP_STEP_RESUME:
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_HP_STEP_RESUME\n");
+      infrun_debug_printf ("BPSTAT_WHAT_HP_STEP_RESUME");
 
       delete_step_resume_breakpoint (ecs->event_thread);
       if (ecs->event_thread->step_after_step_resume_breakpoint)
@@ -6191,10 +6727,7 @@ process_event_stop_test (struct executio
 	  && sr_bp->type == bp_hp_step_resume
 	  && sr_bp->loc->address == ecs->event_thread->prev_pc)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: stepped permanent breakpoint, stopped in "
-				"handler\n");
+	  infrun_debug_printf ("stepped permanent breakpoint, stopped in handler");
 	  delete_step_resume_breakpoint (ecs->event_thread);
 	  ecs->event_thread->step_after_step_resume_breakpoint = 0;
 	}
@@ -6212,21 +6745,18 @@ process_event_stop_test (struct executio
 
   if (ecs->event_thread->control.step_resume_breakpoint)
     {
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: step-resume breakpoint is inserted\n");
+      infrun_debug_printf ("step-resume breakpoint is inserted");
 
       /* Having a step-resume breakpoint overrides anything
-         else having to do with stepping commands until
-         that breakpoint is reached.  */
+	 else having to do with stepping commands until
+	 that breakpoint is reached.  */
       keep_going (ecs);
       return;
     }
 
   if (ecs->event_thread->control.step_range_end == 0)
     {
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog, "infrun: no stepping, continue\n");
+      infrun_debug_printf ("no stepping, continue");
       /* Likewise if we aren't even stepping.  */
       keep_going (ecs);
       return;
@@ -6255,11 +6785,10 @@ process_event_stop_test (struct executio
 	  || frame_id_eq (get_frame_id (frame),
 			  ecs->event_thread->control.step_frame_id)))
     {
-      if (debug_infrun)
-	fprintf_unfiltered
-	  (gdb_stdlog, "infrun: stepping inside range [%s-%s]\n",
-	   paddress (gdbarch, ecs->event_thread->control.step_range_start),
-	   paddress (gdbarch, ecs->event_thread->control.step_range_end));
+      infrun_debug_printf
+	("stepping inside range [%s-%s]",
+	 paddress (gdbarch, ecs->event_thread->control.step_range_start),
+	 paddress (gdbarch, ecs->event_thread->control.step_range_end));
 
       /* Tentatively re-enable range stepping; `resume' disables it if
 	 necessary (e.g., if we're stepping over a breakpoint or we
@@ -6302,9 +6831,7 @@ process_event_stop_test (struct executio
 	gdbarch_skip_solib_resolver (gdbarch,
 				     ecs->event_thread->suspend.stop_pc);
 
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped into dynsym resolve code\n");
+      infrun_debug_printf ("stepped into dynsym resolve code");
 
       if (pc_after_resolver)
 	{
@@ -6327,9 +6854,7 @@ process_event_stop_test (struct executio
       && gdbarch_in_indirect_branch_thunk (gdbarch,
 					   ecs->event_thread->suspend.stop_pc))
     {
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped into indirect branch thunk\n");
+      infrun_debug_printf ("stepped into indirect branch thunk");
       keep_going (ecs);
       return;
     }
@@ -6339,14 +6864,12 @@ process_event_stop_test (struct executio
 	  || ecs->event_thread->control.step_over_calls == STEP_OVER_ALL)
       && get_frame_type (frame) == SIGTRAMP_FRAME)
     {
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped into signal trampoline\n");
+      infrun_debug_printf ("stepped into signal trampoline");
       /* The inferior, while doing a "step" or "next", has ended up in
-         a signal trampoline (either by a signal being delivered or by
-         the signal handler returning).  Just single-step until the
-         inferior leaves the trampoline (either by calling the handler
-         or returning).  */
+	 a signal trampoline (either by a signal being delivered or by
+	 the signal handler returning).  Just single-step until the
+	 inferior leaves the trampoline (either by calling the handler
+	 or returning).  */
       keep_going (ecs);
       return;
     }
@@ -6366,9 +6889,7 @@ process_event_stop_test (struct executio
       CORE_ADDR real_stop_pc
 	= gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
 
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped into solib return tramp\n");
+      infrun_debug_printf ("stepped into solib return tramp");
 
       /* Only proceed through if we know where it's going.  */
       if (real_stop_pc)
@@ -6421,8 +6942,7 @@ process_event_stop_test (struct executio
       CORE_ADDR stop_pc = ecs->event_thread->suspend.stop_pc;
       CORE_ADDR real_stop_pc;
 
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog, "infrun: stepped into subroutine\n");
+      infrun_debug_printf ("stepped into subroutine");
 
       if (ecs->event_thread->control.step_over_calls == STEP_OVER_NONE)
 	{
@@ -6489,10 +7009,10 @@ process_event_stop_test (struct executio
 	}
 
       /* If we are in a function call trampoline (a stub between the
-         calling routine and the real function), locate the real
-         function.  That's what tells us (a) whether we want to step
-         into it at all, and (b) what prologue we want to run to the
-         end of, if we do step into it.  */
+	 calling routine and the real function), locate the real
+	 function.  That's what tells us (a) whether we want to step
+	 into it at all, and (b) what prologue we want to run to the
+	 end of, if we do step into it.  */
       real_stop_pc = skip_language_trampoline (frame, stop_pc);
       if (real_stop_pc == 0)
 	real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
@@ -6515,16 +7035,17 @@ process_event_stop_test (struct executio
 	 thinking of stepping into and the function isn't on the skip
 	 list, step into it.
 
-         If there are several symtabs at that PC (e.g. with include
-         files), just want to know whether *any* of them have line
-         numbers.  find_pc_line handles this.  */
+	 If there are several symtabs at that PC (e.g. with include
+	 files), just want to know whether *any* of them have line
+	 numbers.  find_pc_line handles this.  */
       {
 	struct symtab_and_line tmp_sal;
 
 	tmp_sal = find_pc_line (ecs->stop_func_start, 0);
 	if (tmp_sal.line != 0
 	    && !function_name_is_marked_for_skip (ecs->stop_func_name,
-						  tmp_sal))
+						  tmp_sal)
+	    && !inline_frame_is_marked_for_skip (true, ecs->event_thread))
 	  {
 	    if (execution_direction == EXEC_REVERSE)
 	      handle_step_into_function_backward (gdbarch, ecs);
@@ -6535,8 +7056,8 @@ process_event_stop_test (struct executio
       }
 
       /* If we have no line number and the step-stop-if-no-debug is
-         set, we stop the step so that the user has a chance to switch
-         in assembly mode.  */
+	 set, we stop the step so that the user has a chance to switch
+	 in assembly mode.  */
       if (ecs->event_thread->control.step_over_calls == STEP_OVER_UNDEBUGGABLE
 	  && step_stop_if_no_debug)
 	{
@@ -6605,6 +7126,10 @@ process_event_stop_test (struct executio
 	}
     }
 
+  /* This always returns the sal for the inner-most frame when we are in a
+     stack of inlined frames, even if GDB actually believes that it is in a
+     more outer frame.  This is checked for below by calls to
+     inline_skipped_frames.  */
   stop_pc_sal = find_pc_line (ecs->event_thread->suspend.stop_pc, 0);
 
   /* NOTE: tausq/2004-05-24: This if block used to be done before all
@@ -6614,18 +7139,16 @@ process_event_stop_test (struct executio
       && ecs->stop_func_name == NULL
       && stop_pc_sal.line == 0)
     {
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped into undebuggable function\n");
+      infrun_debug_printf ("stepped into undebuggable function");
 
       /* The inferior just stepped into, or returned to, an
-         undebuggable function (where there is no debugging information
-         and no line number corresponding to the address where the
-         inferior stopped).  Since we want to skip this kind of code,
-         we keep going until the inferior returns from this
-         function - unless the user has asked us not to (via
-         set step-mode) or we no longer know how to get back
-         to the call site.  */
+	 undebuggable function (where there is no debugging information
+	 and no line number corresponding to the address where the
+	 inferior stopped).  Since we want to skip this kind of code,
+	 we keep going until the inferior returns from this
+	 function - unless the user has asked us not to (via
+	 set step-mode) or we no longer know how to get back
+	 to the call site.  */
       if (step_stop_if_no_debug
 	  || !frame_id_p (frame_unwind_caller_id (frame)))
 	{
@@ -6648,9 +7171,8 @@ process_event_stop_test (struct executio
   if (ecs->event_thread->control.step_range_end == 1)
     {
       /* It is stepi or nexti.  We always want to stop stepping after
-         one instruction.  */
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog, "infrun: stepi/nexti\n");
+	 one instruction.  */
+      infrun_debug_printf ("stepi/nexti");
       end_stepping_range (ecs);
       return;
     }
@@ -6658,11 +7180,10 @@ process_event_stop_test (struct executio
   if (stop_pc_sal.line == 0)
     {
       /* We have no line number information.  That means to stop
-         stepping (does this always happen right after one instruction,
-         when we do "s" in a function with no line numbers,
-         or can this happen as a result of a return or longjmp?).  */
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog, "infrun: no line number info\n");
+	 stepping (does this always happen right after one instruction,
+	 when we do "s" in a function with no line numbers,
+	 or can this happen as a result of a return or longjmp?).  */
+      infrun_debug_printf ("line number info");
       end_stepping_range (ecs);
       return;
     }
@@ -6675,9 +7196,7 @@ process_event_stop_test (struct executio
 		   ecs->event_thread->control.step_frame_id)
       && inline_skipped_frames (ecs->event_thread))
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: stepped into inlined function\n");
+      infrun_debug_printf ("stepped into inlined function");
 
       symtab_and_line call_sal = find_frame_sal (get_current_frame ());
 
@@ -6690,7 +7209,14 @@ process_event_stop_test (struct executio
 
 	  if (call_sal.line == ecs->event_thread->current_line
 	      && call_sal.symtab == ecs->event_thread->current_symtab)
-	    step_into_inline_frame (ecs->event_thread);
+	    {
+	      step_into_inline_frame (ecs->event_thread);
+	      if (inline_frame_is_marked_for_skip (false, ecs->event_thread))
+		{
+		  keep_going (ecs);
+		  return;
+		}
+	    }
 
 	  end_stepping_range (ecs);
 	  return;
@@ -6720,30 +7246,59 @@ process_event_stop_test (struct executio
       && stepped_in_from (get_current_frame (),
 			  ecs->event_thread->control.step_frame_id))
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: stepping through inlined function\n");
+      infrun_debug_printf ("stepping through inlined function");
 
-      if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL)
+      if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL
+	  || inline_frame_is_marked_for_skip (false, ecs->event_thread))
 	keep_going (ecs);
       else
 	end_stepping_range (ecs);
       return;
     }
 
+  bool refresh_step_info = true;
   if ((ecs->event_thread->suspend.stop_pc == stop_pc_sal.pc)
       && (ecs->event_thread->current_line != stop_pc_sal.line
- 	  || ecs->event_thread->current_symtab != stop_pc_sal.symtab))
+	  || ecs->event_thread->current_symtab != stop_pc_sal.symtab))
     {
-      /* We are at the start of a different line.  So stop.  Note that
-         we don't stop if we step into the middle of a different line.
-         That is said to make things like for (;;) statements work
-         better.  */
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped to a different line\n");
-      end_stepping_range (ecs);
-      return;
+      /* We are at a different line.  */
+
+      if (stop_pc_sal.is_stmt)
+	{
+	  /* We are at the start of a statement.
+
+	     So stop.  Note that we don't stop if we step into the middle of a
+	     statement.  That is said to make things like for (;;) statements
+	     work better.  */
+	  infrun_debug_printf ("stepped to a different line");
+	  end_stepping_range (ecs);
+	  return;
+	}
+      else if (frame_id_eq (get_frame_id (get_current_frame ()),
+                           ecs->event_thread->control.step_frame_id))
+	{
+	  /* We are not at the start of a statement, and we have not changed
+	     frame.
+
+	     We ignore this line table entry, and continue stepping forward,
+	     looking for a better place to stop.  */
+	  refresh_step_info = false;
+	  infrun_debug_printf ("stepped to a different line, but "
+			       "it's not the start of a statement");
+	}
+      else
+	{
+	  /* We are not the start of a statement, and we have changed frame.
+
+	     We ignore this line table entry, and continue stepping forward,
+	     looking for a better place to stop.  Keep refresh_step_info at
+	     true to note that the frame has changed, but ignore the line
+	     number to make sure we don't ignore a subsequent entry with the
+	     same line number.  */
+	  stop_pc_sal.line = 0;
+	  infrun_debug_printf ("stepped to a different frame, but "
+			       "it's not the start of a statement");
+	}
     }
 
   /* We aren't done stepping.
@@ -6751,30 +7306,38 @@ process_event_stop_test (struct executio
      Optimize by setting the stepping range to the line.
      (We might not be in the original line, but if we entered a
      new line in mid-statement, we continue stepping.  This makes
-     things like for(;;) statements work better.)  */
+     things like for(;;) statements work better.)
+
+     If we entered a SAL that indicates a non-statement line table entry,
+     then we update the stepping range, but we don't update the step info,
+     which includes things like the line number we are stepping away from.
+     This means we will stop when we find a line table entry that is marked
+     as is-statement, even if it matches the non-statement one we just
+     stepped into.   */
 
   ecs->event_thread->control.step_range_start = stop_pc_sal.pc;
   ecs->event_thread->control.step_range_end = stop_pc_sal.end;
   ecs->event_thread->control.may_range_step = 1;
-  set_step_info (frame, stop_pc_sal);
+  if (refresh_step_info)
+    set_step_info (ecs->event_thread, frame, stop_pc_sal);
 
-  if (debug_infrun)
-     fprintf_unfiltered (gdb_stdlog, "infrun: keep going\n");
+  infrun_debug_printf ("keep going");
   keep_going (ecs);
 }
 
+static bool restart_stepped_thread (process_stratum_target *resume_target,
+				    ptid_t resume_ptid);
+
 /* In all-stop mode, if we're currently stepping but have stopped in
    some other thread, we may need to switch back to the stepped
    thread.  Returns true we set the inferior running, false if we left
    it stopped (and the event needs further processing).  */
 
-static int
+static bool
 switch_back_to_stepped_thread (struct execution_control_state *ecs)
 {
   if (!target_is_non_stop_p ())
     {
-      struct thread_info *stepping_thread;
-
       /* If any thread is blocked on some internal breakpoint, and we
 	 simply need to step over that breakpoint to get it going
 	 again, do that first.  */
@@ -6784,36 +7347,28 @@ switch_back_to_stepped_thread (struct ex
 	 already.  Let the caller check whether the step is finished,
 	 etc., before deciding to move it past a breakpoint.  */
       if (ecs->event_thread->control.step_range_end != 0)
-	return 0;
+	return false;
 
       /* Check if the current thread is blocked on an incomplete
 	 step-over, interrupted by a random signal.  */
       if (ecs->event_thread->control.trap_expected
 	  && ecs->event_thread->suspend.stop_signal != GDB_SIGNAL_TRAP)
 	{
-	  if (debug_infrun)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "infrun: need to finish step-over of [%s]\n",
-				  target_pid_to_str (ecs->event_thread->ptid).c_str ());
-	    }
+	  infrun_debug_printf
+	    ("need to finish step-over of [%s]",
+	     target_pid_to_str (ecs->event_thread->ptid).c_str ());
 	  keep_going (ecs);
-	  return 1;
+	  return true;
 	}
 
       /* Check if the current thread is blocked by a single-step
 	 breakpoint of another thread.  */
       if (ecs->hit_singlestep_breakpoint)
        {
-	 if (debug_infrun)
-	   {
-	     fprintf_unfiltered (gdb_stdlog,
-				 "infrun: need to step [%s] over single-step "
-				 "breakpoint\n",
-				 target_pid_to_str (ecs->ptid).c_str ());
-	   }
+	 infrun_debug_printf ("need to step [%s] over single-step breakpoint",
+			      target_pid_to_str (ecs->ptid).c_str ());
 	 keep_going (ecs);
-	 return 1;
+	 return true;
        }
 
       /* If this thread needs yet another step-over (e.g., stepping
@@ -6821,14 +7376,11 @@ switch_back_to_stepped_thread (struct ex
 	 another thread.  */
       if (thread_still_needs_step_over (ecs->event_thread))
 	{
-	  if (debug_infrun)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "infrun: thread [%s] still needs step-over\n",
-				  target_pid_to_str (ecs->event_thread->ptid).c_str ());
-	    }
+	  infrun_debug_printf
+	    ("thread [%s] still needs step-over",
+	     target_pid_to_str (ecs->event_thread->ptid).c_str ());
 	  keep_going (ecs);
-	  return 1;
+	  return true;
 	}
 
       /* If scheduler locking applies even if not stepping, there's no
@@ -6837,7 +7389,7 @@ switch_back_to_stepped_thread (struct ex
 	 event thread is stepping, then it must be that scheduler
 	 locking is not in effect.  */
       if (schedlock_applies (ecs->event_thread))
-	return 0;
+	return false;
 
       /* Otherwise, we no longer expect a trap in the current thread.
 	 Clear the trap_expected flag before switching back -- this is
@@ -6848,80 +7400,141 @@ switch_back_to_stepped_thread (struct ex
       if (!signal_program[ecs->event_thread->suspend.stop_signal])
 	ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 
-      /* Do all pending step-overs before actually proceeding with
-	 step/next/etc.  */
-      if (start_step_over ())
+      if (restart_stepped_thread (ecs->target, ecs->ptid))
 	{
 	  prepare_to_wait (ecs);
-	  return 1;
+	  return true;
 	}
 
-      /* Look for the stepping/nexting thread.  */
-      stepping_thread = NULL;
+      switch_to_thread (ecs->event_thread);
+    }
 
-      for (thread_info *tp : all_non_exited_threads ())
-        {
-	  /* Ignore threads of processes the caller is not
-	     resuming.  */
-	  if (!sched_multi
-	      && tp->ptid.pid () != ecs->ptid.pid ())
-	    continue;
+  return false;
+}
 
-	  /* When stepping over a breakpoint, we lock all threads
-	     except the one that needs to move past the breakpoint.
-	     If a non-event thread has this set, the "incomplete
-	     step-over" check above should have caught it earlier.  */
-	  if (tp->control.trap_expected)
-	    {
-	      internal_error (__FILE__, __LINE__,
-			      "[%s] has inconsistent state: "
-			      "trap_expected=%d\n",
-			      target_pid_to_str (tp->ptid).c_str (),
-			      tp->control.trap_expected);
-	    }
+/* Look for the thread that was stepping, and resume it.
+   RESUME_TARGET / RESUME_PTID indicate the set of threads the caller
+   is resuming.  Return true if a thread was started, false
+   otherwise.  */
 
-	  /* Did we find the stepping thread?  */
-	  if (tp->control.step_range_end)
-	    {
-	      /* Yep.  There should only one though.  */
-	      gdb_assert (stepping_thread == NULL);
+static bool
+restart_stepped_thread (process_stratum_target *resume_target,
+			ptid_t resume_ptid)
+{
+  /* Do all pending step-overs before actually proceeding with
+     step/next/etc.  */
+  if (start_step_over ())
+    return true;
 
-	      /* The event thread is handled at the top, before we
-		 enter this loop.  */
-	      gdb_assert (tp != ecs->event_thread);
-
-	      /* If some thread other than the event thread is
-		 stepping, then scheduler locking can't be in effect,
-		 otherwise we wouldn't have resumed the current event
-		 thread in the first place.  */
-	      gdb_assert (!schedlock_applies (tp));
+  for (thread_info *tp : all_threads_safe ())
+    {
+      if (tp->state == THREAD_EXITED)
+	continue;
 
-	      stepping_thread = tp;
-	    }
+      if (tp->suspend.waitstatus_pending_p)
+	continue;
+
+      /* Ignore threads of processes the caller is not
+	 resuming.  */
+      if (!sched_multi
+	  && (tp->inf->process_target () != resume_target
+	      || tp->inf->pid != resume_ptid.pid ()))
+	continue;
+
+      if (tp->control.trap_expected)
+	{
+	  infrun_debug_printf ("switching back to stepped thread (step-over)");
+
+	  if (keep_going_stepped_thread (tp))
+	    return true;
 	}
+    }
+
+  for (thread_info *tp : all_threads_safe ())
+    {
+      if (tp->state == THREAD_EXITED)
+	continue;
 
-      if (stepping_thread != NULL)
+      if (tp->suspend.waitstatus_pending_p)
+	continue;
+
+      /* Ignore threads of processes the caller is not
+	 resuming.  */
+      if (!sched_multi
+	  && (tp->inf->process_target () != resume_target
+	      || tp->inf->pid != resume_ptid.pid ()))
+	continue;
+
+      /* Did we find the stepping thread?  */
+      if (tp->control.step_range_end)
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: switching back to stepped thread\n");
+	  infrun_debug_printf ("switching back to stepped thread (stepping)");
 
-	  if (keep_going_stepped_thread (stepping_thread))
-	    {
-	      prepare_to_wait (ecs);
-	      return 1;
-	    }
+	  if (keep_going_stepped_thread (tp))
+	    return true;
 	}
     }
 
-  return 0;
+  return false;
+}
+
+/* See infrun.h.  */
+
+void
+restart_after_all_stop_detach (process_stratum_target *proc_target)
+{
+  /* Note we don't check target_is_non_stop_p() here, because the
+     current inferior may no longer have a process_stratum target
+     pushed, as we just detached.  */
+
+  /* See if we have a THREAD_RUNNING thread that need to be
+     re-resumed.  If we have any thread that is already executing,
+     then we don't need to resume the target -- it is already been
+     resumed.  With the remote target (in all-stop), it's even
+     impossible to issue another resumption if the target is already
+     resumed, until the target reports a stop.  */
+  for (thread_info *thr : all_threads (proc_target))
+    {
+      if (thr->state != THREAD_RUNNING)
+	continue;
+
+      /* If we have any thread that is already executing, then we
+	 don't need to resume the target -- it is already been
+	 resumed.  */
+      if (thr->executing)
+	return;
+
+      /* If we have a pending event to process, skip resuming the
+	 target and go straight to processing it.  */
+      if (thr->resumed && thr->suspend.waitstatus_pending_p)
+	return;
+    }
+
+  /* Alright, we need to re-resume the target.  If a thread was
+     stepping, we need to restart it stepping.  */
+  if (restart_stepped_thread (proc_target, minus_one_ptid))
+    return;
+
+  /* Otherwise, find the first THREAD_RUNNING thread and resume
+     it.  */
+  for (thread_info *thr : all_threads (proc_target))
+    {
+      if (thr->state != THREAD_RUNNING)
+	continue;
+
+      execution_control_state ecs;
+      reset_ecs (&ecs, thr);
+      switch_to_thread (thr);
+      keep_going (&ecs);
+      return;
+    }
 }
 
 /* Set a previously stepped thread back to stepping.  Returns true on
    success, false if the resume is not possible (e.g., the thread
    vanished).  */
 
-static int
+static bool
 keep_going_stepped_thread (struct thread_info *tp)
 {
   struct frame_info *frame;
@@ -6948,18 +7561,14 @@ keep_going_stepped_thread (struct thread
 
   if (tp->state == THREAD_EXITED || !target_thread_alive (tp->ptid))
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: not resuming previously  "
-			    "stepped thread, it has vanished\n");
+      infrun_debug_printf ("not resuming previously stepped thread, it has "
+			   "vanished");
 
       delete_thread (tp);
-      return 0;
+      return false;
     }
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: resuming previously stepped thread\n");
+  infrun_debug_printf ("resuming previously stepped thread");
 
   reset_ecs (ecs, tp);
   switch_to_thread (tp);
@@ -6984,11 +7593,9 @@ keep_going_stepped_thread (struct thread
     {
       ptid_t resume_ptid;
 
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: expected thread advanced also (%s -> %s)\n",
-			    paddress (target_gdbarch (), tp->prev_pc),
-			    paddress (target_gdbarch (), tp->suspend.stop_pc));
+      infrun_debug_printf ("expected thread advanced also (%s -> %s)",
+			   paddress (target_gdbarch (), tp->prev_pc),
+			   paddress (target_gdbarch (), tp->suspend.stop_pc));
 
       /* Clear the info of the previous step-over, as it's no longer
 	 valid (if the thread was trying to step over a breakpoint, it
@@ -7004,26 +7611,25 @@ keep_going_stepped_thread (struct thread
 				     get_frame_address_space (frame),
 				     tp->suspend.stop_pc);
 
-      tp->resumed = 1;
+      tp->resumed = true;
       resume_ptid = internal_resume_ptid (tp->control.stepping_command);
-      do_target_resume (resume_ptid, 0, GDB_SIGNAL_0);
+      do_target_resume (resume_ptid, false, GDB_SIGNAL_0);
     }
   else
     {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: expected thread still hasn't advanced\n");
+      infrun_debug_printf ("expected thread still hasn't advanced");
 
       keep_going_pass_signal (ecs);
     }
-  return 1;
+
+  return true;
 }
 
 /* Is thread TP in the middle of (software or hardware)
    single-stepping?  (Note the result of this function must never be
    passed directly as target_resume's STEP parameter.)  */
 
-static int
+static bool
 currently_stepping (struct thread_info *tp)
 {
   return ((tp->control.step_range_end
@@ -7099,13 +7705,13 @@ handle_step_into_function (struct gdbarc
       sr_sal.pspace = get_frame_program_space (get_current_frame ());
 
       /* Do not specify what the fp should be when we stop since on
-         some machines the prologue is where the new fp value is
-         established.  */
+	 some machines the prologue is where the new fp value is
+	 established.  */
       insert_step_resume_breakpoint_at_sal (gdbarch, sr_sal, null_frame_id);
 
       /* And make sure stepping stops right away then.  */
       ecs->event_thread->control.step_range_end
-        = ecs->event_thread->control.step_range_start;
+	= ecs->event_thread->control.step_range_start;
     }
   keep_going (ecs);
 }
@@ -7163,10 +7769,8 @@ insert_step_resume_breakpoint_at_sal_1 (
   gdb_assert (inferior_thread ()->control.step_resume_breakpoint == NULL);
   gdb_assert (sr_type == bp_step_resume || sr_type == bp_hp_step_resume);
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: inserting step-resume breakpoint at %s\n",
-			paddress (gdbarch, sr_sal.pc));
+  infrun_debug_printf ("inserting step-resume breakpoint at %s",
+		       paddress (gdbarch, sr_sal.pc));
 
   inferior_thread ()->control.step_resume_breakpoint
     = set_momentary_breakpoint (gdbarch, sr_sal, sr_id, sr_type).release ();
@@ -7252,10 +7856,8 @@ insert_longjmp_resume_breakpoint (struct
      longjmp_resume_breakpoint when one is already active.  */
   gdb_assert (inferior_thread ()->control.exception_resume_breakpoint == NULL);
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: inserting longjmp-resume breakpoint at %s\n",
-			paddress (gdbarch, pc));
+  infrun_debug_printf ("inserting longjmp-resume breakpoint at %s",
+		       paddress (gdbarch, pc));
 
   inferior_thread ()->control.exception_resume_breakpoint =
     set_momentary_breakpoint_at_pc (gdbarch, pc, bp_longjmp_resume).release ();
@@ -7288,10 +7890,8 @@ insert_exception_resume_breakpoint (stru
 	{
 	  handler = value_as_address (value);
 
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: exception resume at %lx\n",
-				(unsigned long) handler);
+	  infrun_debug_printf ("exception resume at %lx",
+			       (unsigned long) handler);
 
 	  bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame),
 					       handler,
@@ -7328,11 +7928,8 @@ insert_exception_resume_from_probe (stru
 
   handler = value_as_address (arg_value);
 
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog,
-			"infrun: exception resume at %s\n",
-			paddress (get_objfile_arch (probe->objfile),
-				  handler));
+  infrun_debug_printf ("exception resume at %s",
+		       paddress (probe->objfile->arch (), handler));
 
   bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame),
 				       handler, bp_exception_resume).release ();
@@ -7411,15 +8008,14 @@ check_exception_resume (struct execution
 static void
 stop_waiting (struct execution_control_state *ecs)
 {
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "infrun: stop_waiting\n");
+  infrun_debug_printf ("stop_waiting");
 
   /* Let callers know we don't want to wait for the inferior anymore.  */
   ecs->wait_some_more = 0;
 
-  /* If all-stop, but the target is always in non-stop mode, stop all
+  /* If all-stop, but there exists a non-stop target, stop all
      threads now that we're presenting the stop to the user.  */
-  if (!non_stop && target_is_non_stop_p ())
+  if (!non_stop && exists_non_stop_target ())
     stop_all_threads ();
 }
 
@@ -7434,17 +8030,15 @@ keep_going_pass_signal (struct execution
 
   /* Save the pc before execution, to compare with pc after stop.  */
   ecs->event_thread->prev_pc
-    = regcache_read_pc (get_thread_regcache (ecs->event_thread));
+    = regcache_read_pc_protected (get_thread_regcache (ecs->event_thread));
 
   if (ecs->event_thread->control.trap_expected)
     {
       struct thread_info *tp = ecs->event_thread;
 
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog,
-			    "infrun: %s has trap_expected set, "
-			    "resuming to collect trap\n",
-			    target_pid_to_str (tp->ptid).c_str ());
+      infrun_debug_printf ("%s has trap_expected set, "
+			   "resuming to collect trap",
+			   target_pid_to_str (tp->ptid).c_str ());
 
       /* We haven't yet gotten our trap, and either: intercepted a
 	 non-signal event (e.g., a fork); or took a signal which we
@@ -7462,20 +8056,15 @@ keep_going_pass_signal (struct execution
       if (ecs->hit_singlestep_breakpoint
 	  || thread_still_needs_step_over (tp))
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: step-over already in progress: "
-				"step-over for %s deferred\n",
-				target_pid_to_str (tp->ptid).c_str ());
-	  thread_step_over_chain_enqueue (tp);
+	  infrun_debug_printf ("step-over already in progress: "
+			       "step-over for %s deferred",
+			       target_pid_to_str (tp->ptid).c_str ());
+	  global_thread_step_over_chain_enqueue (tp);
 	}
       else
 	{
-	  if (debug_infrun)
-	    fprintf_unfiltered (gdb_stdlog,
-				"infrun: step-over in progress: "
-				"resume of %s deferred\n",
-				target_pid_to_str (tp->ptid).c_str ());
+	  infrun_debug_printf ("step-over in progress: resume of %s deferred",
+			       target_pid_to_str (tp->ptid).c_str ());
 	}
     }
   else
@@ -7575,12 +8164,15 @@ keep_going (struct execution_control_sta
 static void
 prepare_to_wait (struct execution_control_state *ecs)
 {
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "infrun: prepare_to_wait\n");
+  infrun_debug_printf ("prepare_to_wait");
 
   ecs->wait_some_more = 1;
 
-  if (!target_is_async_p ())
+  /* If the target can't async, emulate it by marking the infrun event
+     handler such that as soon as we get back to the event-loop, we
+     immediately end up in fetch_inferior_event again calling
+     target_wait.  */
+  if (!target_can_async_p ())
     mark_infrun_async_event_handler ();
 }
 
@@ -7665,20 +8257,6 @@ print_exited_reason (struct ui_out *uiou
     }
 }
 
-/* Some targets/architectures can do extra processing/display of
-   segmentation faults.  E.g., Intel MPX boundary faults.
-   Call the architecture dependent function to handle the fault.  */
-
-static void
-handle_segmentation_fault (struct ui_out *uiout)
-{
-  struct regcache *regcache = get_current_regcache ();
-  struct gdbarch *gdbarch = regcache->arch ();
-
-  if (gdbarch_handle_segmentation_fault_p (gdbarch))
-    gdbarch_handle_segmentation_fault (gdbarch, uiout);
-}
-
 void
 print_signal_received_reason (struct ui_out *uiout, enum gdb_signal siggnal)
 {
@@ -7721,8 +8299,10 @@ print_signal_received_reason (struct ui_
       annotate_signal_string ();
       uiout->field_string ("signal-meaning", gdb_signal_to_string (siggnal));
 
-      if (siggnal == GDB_SIGNAL_SEGV)
-	handle_segmentation_fault (uiout);
+      struct regcache *regcache = get_current_regcache ();
+      struct gdbarch *gdbarch = regcache->arch ();
+      if (gdbarch_report_signal_info_p (gdbarch))
+	gdbarch_report_signal_info (gdbarch, uiout, siggnal);
 
       annotate_signal_string_end ();
     }
@@ -7801,10 +8381,9 @@ void
 print_stop_event (struct ui_out *uiout, bool displays)
 {
   struct target_waitstatus last;
-  ptid_t last_ptid;
   struct thread_info *tp;
 
-  get_last_target_status (&last_ptid, &last);
+  get_last_target_status (nullptr, nullptr, &last);
 
   {
     scoped_restore save_uiout = make_scoped_restore (&current_uiout, uiout);
@@ -7833,7 +8412,7 @@ print_stop_event (struct ui_out *uiout,
 void
 maybe_remove_breakpoints (void)
 {
-  if (!breakpoints_should_be_inserted_now () && target_has_execution)
+  if (!breakpoints_should_be_inserted_now () && target_has_execution ())
     {
       if (remove_breakpoints ())
 	{
@@ -7850,7 +8429,6 @@ maybe_remove_breakpoints (void)
 struct stop_context
 {
   stop_context ();
-  ~stop_context ();
 
   DISABLE_COPY_AND_ASSIGN (stop_context);
 
@@ -7865,7 +8443,7 @@ struct stop_context
 
   /* If stopp for a thread event, this is the thread that caused the
      stop.  */
-  struct thread_info *thread;
+  thread_info_ref thread;
 
   /* The inferior that caused the stop.  */
   int inf_num;
@@ -7884,20 +8462,8 @@ stop_context::stop_context ()
     {
       /* Take a strong reference so that the thread can't be deleted
 	 yet.  */
-      thread = inferior_thread ();
-      thread->incref ();
+      thread = thread_info_ref::new_reference (inferior_thread ());
     }
-  else
-    thread = NULL;
-}
-
-/* Release a stop context previously created with save_stop_context.
-   Releases the strong reference to the thread as well. */
-
-stop_context::~stop_context ()
-{
-  if (thread != NULL)
-    thread->decref ();
 }
 
 /* Return true if the current context no longer matches the saved stop
@@ -7923,9 +8489,8 @@ int
 normal_stop (void)
 {
   struct target_waitstatus last;
-  ptid_t last_ptid;
 
-  get_last_target_status (&last_ptid, &last);
+  get_last_target_status (nullptr, nullptr, &last);
 
   new_stop_id ();
 
@@ -7934,10 +8499,10 @@ normal_stop (void)
      frontend/user running state.  A QUIT is an easy exception to see
      here, so do this before any filtered output.  */
 
-  gdb::optional<scoped_finish_thread_state> maybe_finish_thread_state;
+  ptid_t finish_ptid = null_ptid;
 
   if (!non_stop)
-    maybe_finish_thread_state.emplace (minus_one_ptid);
+    finish_ptid = minus_one_ptid;
   else if (last.kind == TARGET_WAITKIND_SIGNALLED
 	   || last.kind == TARGET_WAITKIND_EXITED)
     {
@@ -7947,10 +8512,17 @@ normal_stop (void)
 	 linux-fork.c automatically switches to another fork from
 	 within target_mourn_inferior.  */
       if (inferior_ptid != null_ptid)
-	maybe_finish_thread_state.emplace (ptid_t (inferior_ptid.pid ()));
+	finish_ptid = ptid_t (inferior_ptid.pid ());
     }
   else if (last.kind != TARGET_WAITKIND_NO_RESUMED)
-    maybe_finish_thread_state.emplace (inferior_ptid);
+    finish_ptid = inferior_ptid;
+
+  gdb::optional<scoped_finish_thread_state> maybe_finish_thread_state;
+  if (finish_ptid != null_ptid)
+    {
+      maybe_finish_thread_state.emplace
+	(user_visible_resume_target (finish_ptid), finish_ptid);
+    }
 
   /* As we're presenting a stop, and potentially removing breakpoints,
      update the thread list so we can tell whether there are threads
@@ -7983,7 +8555,7 @@ normal_stop (void)
      informing of a stop.  */
   if (!non_stop
       && previous_inferior_ptid != inferior_ptid
-      && target_has_execution
+      && target_has_execution ()
       && last.kind != TARGET_WAITKIND_SIGNALLED
       && last.kind != TARGET_WAITKIND_EXITED
       && last.kind != TARGET_WAITKIND_NO_RESUMED)
@@ -8082,13 +8654,13 @@ normal_stop (void)
      print the stop event.  */
   if (inferior_ptid != null_ptid)
     gdb::observers::normal_stop.notify (inferior_thread ()->control.stop_bpstat,
-				 stop_print_frame);
+					stop_print_frame);
   else
     gdb::observers::normal_stop.notify (NULL, stop_print_frame);
 
   annotate_stopped ();
 
-  if (target_has_execution)
+  if (target_has_execution ())
     {
       if (last.kind != TARGET_WAITKIND_SIGNALLED
 	  && last.kind != TARGET_WAITKIND_EXITED
@@ -8325,7 +8897,7 @@ handle_command (const char *args, int fr
 	}
 
       /* If any signal numbers or symbol names were found, set flags for
-         which signals to apply actions to.  */
+	 which signals to apply actions to.  */
 
       for (int signum = sigfirst; signum >= 0 && signum <= siglast; signum++)
 	{
@@ -8477,7 +9049,8 @@ siginfo_value_read (struct value *v)
   validate_registers_access ();
 
   transferred =
-    target_read (current_top_target (), TARGET_OBJECT_SIGNAL_INFO,
+    target_read (current_inferior ()->top_target (),
+		 TARGET_OBJECT_SIGNAL_INFO,
 		 NULL,
 		 value_contents_all_raw (v),
 		 value_offset (v),
@@ -8499,7 +9072,7 @@ siginfo_value_write (struct value *v, st
      vice versa.  */
   validate_registers_access ();
 
-  transferred = target_write (current_top_target (),
+  transferred = target_write (current_inferior ()->top_target (),
 			      TARGET_OBJECT_SIGNAL_INFO,
 			      NULL,
 			      value_contents_all_raw (fromval),
@@ -8524,7 +9097,7 @@ static struct value *
 siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var,
 		    void *ignore)
 {
-  if (target_has_stack
+  if (target_has_stack ()
       && inferior_ptid != null_ptid
       && gdbarch_get_siginfo_type_p (gdbarch))
     {
@@ -8549,8 +9122,8 @@ public:
   /* Capture state from GDBARCH, TP, and REGCACHE that must be restored
      once the inferior function call has finished.  */
   infcall_suspend_state (struct gdbarch *gdbarch,
-                         const struct thread_info *tp,
-                         struct regcache *regcache)
+			 const struct thread_info *tp,
+			 struct regcache *regcache)
     : m_thread_suspend (tp->suspend),
       m_registers (new readonly_detached_regcache (*regcache))
   {
@@ -8558,23 +9131,24 @@ public:
 
     if (gdbarch_get_siginfo_type_p (gdbarch))
       {
-        struct type *type = gdbarch_get_siginfo_type (gdbarch);
-        size_t len = TYPE_LENGTH (type);
+	struct type *type = gdbarch_get_siginfo_type (gdbarch);
+	size_t len = TYPE_LENGTH (type);
 
-        siginfo_data.reset ((gdb_byte *) xmalloc (len));
+	siginfo_data.reset ((gdb_byte *) xmalloc (len));
 
-        if (target_read (current_top_target (), TARGET_OBJECT_SIGNAL_INFO, NULL,
-                         siginfo_data.get (), 0, len) != len)
-          {
-            /* Errors ignored.  */
-            siginfo_data.reset (nullptr);
-          }
+	if (target_read (current_inferior ()->top_target (),
+			 TARGET_OBJECT_SIGNAL_INFO, NULL,
+			 siginfo_data.get (), 0, len) != len)
+	  {
+	    /* Errors ignored.  */
+	    siginfo_data.reset (nullptr);
+	  }
       }
 
     if (siginfo_data)
       {
-        m_siginfo_gdbarch = gdbarch;
-        m_siginfo_data = std::move (siginfo_data);
+	m_siginfo_gdbarch = gdbarch;
+	m_siginfo_data = std::move (siginfo_data);
       }
   }
 
@@ -8588,23 +9162,24 @@ public:
   /* Restores the stored state into GDBARCH, TP, and REGCACHE.  */
 
   void restore (struct gdbarch *gdbarch,
-                struct thread_info *tp,
-                struct regcache *regcache) const
+		struct thread_info *tp,
+		struct regcache *regcache) const
   {
     tp->suspend = m_thread_suspend;
 
     if (m_siginfo_gdbarch == gdbarch)
       {
-        struct type *type = gdbarch_get_siginfo_type (gdbarch);
+	struct type *type = gdbarch_get_siginfo_type (gdbarch);
 
-        /* Errors ignored.  */
-        target_write (current_top_target (), TARGET_OBJECT_SIGNAL_INFO, NULL,
-                      m_siginfo_data.get (), 0, TYPE_LENGTH (type));
+	/* Errors ignored.  */
+	target_write (current_inferior ()->top_target (),
+		      TARGET_OBJECT_SIGNAL_INFO, NULL,
+		      m_siginfo_data.get (), 0, TYPE_LENGTH (type));
       }
 
     /* The inferior can be gone if the user types "print exit(0)"
        (and perhaps other times).  */
-    if (target_has_execution)
+    if (target_has_execution ())
       /* NB: The register write goes through to the target.  */
       regcache->restore (registers ());
   }
@@ -8683,8 +9258,10 @@ struct infcall_control_state
   enum stop_stack_kind stop_stack_dummy = STOP_NONE;
   int stopped_by_random_signal = 0;
 
-  /* ID if the selected frame when the inferior function call was made.  */
+  /* ID and level of the selected frame when the inferior function
+     call was made.  */
   struct frame_id selected_frame_id {};
+  int selected_frame_level = -1;
 };
 
 /* Save all of the information associated with the inferior<==>gdb
@@ -8713,27 +9290,12 @@ save_infcall_control_state ()
   inf_status->stop_stack_dummy = stop_stack_dummy;
   inf_status->stopped_by_random_signal = stopped_by_random_signal;
 
-  inf_status->selected_frame_id = get_frame_id (get_selected_frame (NULL));
+  save_selected_frame (&inf_status->selected_frame_id,
+		       &inf_status->selected_frame_level);
 
   return inf_status;
 }
 
-static void
-restore_selected_frame (const frame_id &fid)
-{
-  frame_info *frame = frame_find_by_id (fid);
-
-  /* If inf_status->selected_frame_id is NULL, there was no previously
-     selected frame.  */
-  if (frame == NULL)
-    {
-      warning (_("Unable to restore previously selected frame."));
-      return;
-    }
-
-  select_frame (frame);
-}
-
 /* Restore inferior session state to INF_STATUS.  */
 
 void
@@ -8759,23 +9321,10 @@ restore_infcall_control_state (struct in
   stop_stack_dummy = inf_status->stop_stack_dummy;
   stopped_by_random_signal = inf_status->stopped_by_random_signal;
 
-  if (target_has_stack)
+  if (target_has_stack ())
     {
-      /* The point of the try/catch is that if the stack is clobbered,
-         walking the stack might encounter a garbage pointer and
-         error() trying to dereference it.  */
-      try
-	{
-	  restore_selected_frame (inf_status->selected_frame_id);
-	}
-      catch (const gdb_exception_error &ex)
-	{
-	  exception_fprintf (gdb_stderr, ex,
-			     "Unable to restore previously selected frame:\n");
-	  /* Error in restoring the selected frame.  Select the
-	     innermost frame.  */
-	  select_frame (get_current_frame ());
-	}
+      restore_selected_frame (inf_status->selected_frame_id,
+			      inf_status->selected_frame_level);
     }
 
   delete inf_status;
@@ -8826,7 +9375,7 @@ static void
 set_exec_direction_func (const char *args, int from_tty,
 			 struct cmd_list_element *cmd)
 {
-  if (target_can_execute_reverse)
+  if (target_can_execute_reverse ())
     {
       if (!strcmp (exec_direction, exec_forward))
 	execution_direction = EXEC_FORWARD;
@@ -8881,22 +9430,93 @@ static const struct internalvar_funcs si
 static void
 infrun_async_inferior_event_handler (gdb_client_data data)
 {
-  inferior_event_handler (INF_REG_EVENT, NULL);
+  clear_async_event_handler (infrun_async_inferior_event_token);
+  inferior_event_handler (INF_REG_EVENT);
 }
 
+#if GDB_SELF_TEST
+namespace selftests
+{
+
+/* Verify that when two threads with the same ptid exist (from two different
+   targets) and one of them changes ptid, we only update inferior_ptid if
+   it is appropriate.  */
+
+static void
+infrun_thread_ptid_changed ()
+{
+  gdbarch *arch = current_inferior ()->gdbarch;
+
+  /* The thread which inferior_ptid represents changes ptid.  */
+  {
+    scoped_restore_current_pspace_and_thread restore;
+
+    scoped_mock_context<test_target_ops> target1 (arch);
+    scoped_mock_context<test_target_ops> target2 (arch);
+    target2.mock_inferior.next = &target1.mock_inferior;
+
+    ptid_t old_ptid (111, 222);
+    ptid_t new_ptid (111, 333);
+
+    target1.mock_inferior.pid = old_ptid.pid ();
+    target1.mock_thread.ptid = old_ptid;
+    target2.mock_inferior.pid = old_ptid.pid ();
+    target2.mock_thread.ptid = old_ptid;
+
+    auto restore_inferior_ptid = make_scoped_restore (&inferior_ptid, old_ptid);
+    set_current_inferior (&target1.mock_inferior);
+
+    thread_change_ptid (&target1.mock_target, old_ptid, new_ptid);
+
+    gdb_assert (inferior_ptid == new_ptid);
+  }
+
+  /* A thread with the same ptid as inferior_ptid, but from another target,
+     changes ptid.  */
+  {
+    scoped_restore_current_pspace_and_thread restore;
+
+    scoped_mock_context<test_target_ops> target1 (arch);
+    scoped_mock_context<test_target_ops> target2 (arch);
+    target2.mock_inferior.next = &target1.mock_inferior;
+
+    ptid_t old_ptid (111, 222);
+    ptid_t new_ptid (111, 333);
+
+    target1.mock_inferior.pid = old_ptid.pid ();
+    target1.mock_thread.ptid = old_ptid;
+    target2.mock_inferior.pid = old_ptid.pid ();
+    target2.mock_thread.ptid = old_ptid;
+
+    auto restore_inferior_ptid = make_scoped_restore (&inferior_ptid, old_ptid);
+    set_current_inferior (&target2.mock_inferior);
+
+    thread_change_ptid (&target1.mock_target, old_ptid, new_ptid);
+
+    gdb_assert (inferior_ptid == old_ptid);
+  }
+}
+
+} /* namespace selftests */
+
+#endif /* GDB_SELF_TEST */
+
+void _initialize_infrun ();
 void
-_initialize_infrun (void)
+_initialize_infrun ()
 {
   struct cmd_list_element *c;
 
   /* Register extra event sources in the event loop.  */
   infrun_async_inferior_event_token
-    = create_async_event_handler (infrun_async_inferior_event_handler, NULL);
+    = create_async_event_handler (infrun_async_inferior_event_handler, NULL,
+				  "infrun");
 
-  add_info ("signals", info_signals_command, _("\
+  cmd_list_element *info_signals_cmd
+    = add_info ("signals", info_signals_command, _("\
 What debugger does when program gets various signals.\n\
 Specify a signal as argument to print info on that signal only."));
-  add_info_alias ("handle", "signals", 0);
+  add_info_alias ("handle", info_signals_cmd, 0);
 
   c = add_com ("handle", class_run, handle_command, _("\
 Specify how to handle signals.\n\
@@ -8931,22 +9551,12 @@ There is no `stop' command, but you can
 This allows you to set a list of commands to be run each time execution\n\
 of the program stops."), &cmdlist);
 
-  add_setshow_zuinteger_cmd ("infrun", class_maintenance, &debug_infrun, _("\
-Set inferior debugging."), _("\
-Show inferior debugging."), _("\
-When non-zero, inferior specific debugging is enabled."),
-			     NULL,
-			     show_debug_infrun,
-			     &setdebuglist, &showdebuglist);
-
-  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);
+  add_setshow_boolean_cmd
+    ("infrun", class_maintenance, &debug_infrun,
+     _("Set inferior debugging."),
+     _("Show inferior debugging."),
+     _("When non-zero, inferior specific debugging is enabled."),
+     NULL, show_debug_infrun, &setdebuglist, &showdebuglist);
 
   add_setshow_boolean_cmd ("non-stop", no_class,
 			   &non_stop_1, _("\
@@ -9083,10 +9693,10 @@ Set mode for locking scheduler during ex
 Show mode for locking scheduler during execution."), _("\
 off    == no locking (threads may preempt at any time)\n\
 on     == full locking (no thread except the current thread may run)\n\
-          This applies to both normal execution and replay mode.\n\
+	  This applies to both normal execution and replay mode.\n\
 step   == scheduler locked during stepping commands (step, next, stepi, nexti).\n\
-          In this mode, other threads may run during other commands.\n\
-          This applies to both normal execution and replay mode.\n\
+	  In this mode, other threads may run during other commands.\n\
+	  This applies to both normal execution and replay mode.\n\
 replay == scheduler locked in replay mode and unlocked during normal execution."),
 			set_schedlock_func,	/* traps on target vector */
 			show_scheduler_mode,
@@ -9161,10 +9771,13 @@ enabled by default on some platforms."),
   inferior_ptid = null_ptid;
   target_last_wait_ptid = minus_one_ptid;
 
-  gdb::observers::thread_ptid_changed.attach (infrun_thread_ptid_changed);
-  gdb::observers::thread_stop_requested.attach (infrun_thread_stop_requested);
-  gdb::observers::thread_exit.attach (infrun_thread_thread_exit);
-  gdb::observers::inferior_exit.attach (infrun_inferior_exit);
+  gdb::observers::thread_ptid_changed.attach (infrun_thread_ptid_changed,
+					      "infrun");
+  gdb::observers::thread_stop_requested.attach (infrun_thread_stop_requested,
+						"infrun");
+  gdb::observers::thread_exit.attach (infrun_thread_thread_exit, "infrun");
+  gdb::observers::inferior_exit.attach (infrun_inferior_exit, "infrun");
+  gdb::observers::inferior_execd.attach (infrun_inferior_execd, "infrun");
 
   /* Explicitly create without lookup, since that tries to create a
      value with a void typed value, and when we get here, gdbarch
@@ -9184,4 +9797,9 @@ or signalled."),
 			   show_observer_mode,
 			   &setlist,
 			   &showlist);
+
+#if GDB_SELF_TEST
+  selftests::register_test ("infrun_thread_ptid_changed",
+			    selftests::infrun_thread_ptid_changed);
+#endif
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infrun.h ./gdb/infrun.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/infrun.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/infrun.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 1986-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,12 +25,26 @@ struct target_waitstatus;
 struct frame_info;
 struct address_space;
 struct return_value_info;
+struct process_stratum_target;
+struct thread_info;
 
 /* True if we are debugging run control.  */
-extern unsigned int debug_infrun;
+extern bool debug_infrun;
 
-/* True if we are debugging displaced stepping.  */
-extern bool debug_displaced;
+/* Print an "infrun" debug statement.  */
+
+#define infrun_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (debug_infrun, "infrun", fmt, ##__VA_ARGS__)
+
+/* Print "infrun" start/end debug statements.  */
+
+#define INFRUN_SCOPED_DEBUG_START_END(msg) \
+  scoped_debug_start_end (debug_infrun, "infrun", msg)
+
+/* Print "infrun" enter/exit debug statements.  */
+
+#define INFRUN_SCOPED_DEBUG_ENTER_EXIT \
+  scoped_debug_enter_exit (debug_infrun, "infrun")
 
 /* Nonzero if we want to give control to the user when we're notified
    of shared library events by the dynamic linker.  */
@@ -93,7 +107,13 @@ extern void proceed (CORE_ADDR, enum gdb
    resumed.  */
 extern ptid_t user_visible_resume_ptid (int step);
 
-extern void wait_for_inferior (void);
+/* Return the process_stratum target that we will proceed, in the
+   perspective of the user/frontend.  If RESUME_PTID is
+   MINUS_ONE_PTID, then we'll resume all threads of all targets, so
+   the function returns NULL.  Otherwise, we'll be resuming a process
+   or thread of the current process, so we return the current
+   inferior's process stratum target.  */
+extern process_stratum_target *user_visible_resume_target (ptid_t resume_ptid);
 
 /* Return control to GDB when the inferior stops for real.  Print
    appropriate messages, remove breakpoints, give terminal our modes,
@@ -101,18 +121,28 @@ extern void wait_for_inferior (void);
    target, false otherwise.  */
 extern int normal_stop (void);
 
-extern void get_last_target_status (ptid_t *ptid,
+/* Return the cached copy of the last target/ptid/waitstatus returned
+   by target_wait()/deprecated_target_wait_hook().  The data is
+   actually cached by handle_inferior_event(), which gets called
+   immediately after target_wait()/deprecated_target_wait_hook().  */
+extern void get_last_target_status (process_stratum_target **target,
+				    ptid_t *ptid,
 				    struct target_waitstatus *status);
 
-extern void set_last_target_status (ptid_t ptid,
+/* Set the cached copy of the last target/ptid/waitstatus.  */
+extern void set_last_target_status (process_stratum_target *target, ptid_t ptid,
 				    struct target_waitstatus status);
 
+/* Clear the cached copy of the last ptid/waitstatus returned by
+   target_wait().  */
+extern void nullify_last_target_wait_ptid ();
+
 /* Stop all threads.  Only returns after everything is halted.  */
 extern void stop_all_threads (void);
 
 extern void prepare_for_detach (void);
 
-extern void fetch_inferior_event (void *);
+extern void fetch_inferior_event ();
 
 extern void init_wait_for_inferior (void);
 
@@ -133,7 +163,9 @@ extern int thread_is_stepping_over_break
    triggers a non-steppable watchpoint.  */
 extern int stepping_past_nonsteppable_watchpoint (void);
 
-extern void set_step_info (struct frame_info *frame,
+/* Record in TP the frame and location we're currently stepping through.  */
+extern void set_step_info (thread_info *tp,
+			   struct frame_info *frame,
 			   struct symtab_and_line sal);
 
 /* Several print_*_reason helper functions to print why the inferior
@@ -196,12 +228,8 @@ extern void update_signals_program_targe
    $_exitsignal.  */
 extern void clear_exit_convenience_vars (void);
 
-/* Dump LEN bytes at BUF in hex to FILE, followed by a newline.  */
-extern void displaced_step_dump_bytes (struct ui_file *file,
-				       const gdb_byte *buf, size_t len);
-
-extern struct displaced_step_closure *get_displaced_step_closure_by_addr
-    (CORE_ADDR addr);
+/* Dump LEN bytes at BUF in hex to a string and return it.  */
+extern std::string displaced_step_dump_bytes (const gdb_byte *buf, size_t len);
 
 extern void update_observer_mode (void);
 
@@ -223,9 +251,9 @@ extern void infrun_async (int enable);
    loop.  */
 extern void mark_infrun_async_event_handler (void);
 
-/* The global queue of threads that need to do a step-over operation
+/* The global chain of threads that need to do a step-over operation
    to get past e.g., a breakpoint.  */
-extern struct thread_info *step_over_queue_head;
+extern struct thread_info *global_thread_step_over_chain_head;
 
 /* Remove breakpoints if possible (usually that means, if everything
    is stopped).  On failure, print a message.  */
@@ -241,66 +269,106 @@ extern void all_uis_check_sync_execution
    started or re-started).  */
 extern void all_uis_on_sync_execution_starting (void);
 
-/* Base class for displaced stepping closures (the arch-specific data).  */
+/* In all-stop, restart the target if it had to be stopped to
+   detach.  */
+extern void restart_after_all_stop_detach (process_stratum_target *proc_target);
+
+/* RAII object to temporarily disable the requirement for target
+   stacks to commit their resumed threads.
+
+   On construction, set process_stratum_target::commit_resumed_state
+   to false for all process_stratum targets in all target
+   stacks.
+
+   On destruction (or if reset_and_commit() is called), set
+   process_stratum_target::commit_resumed_state to true for all
+   process_stratum targets in all target stacks, except those that:
+
+     - have no resumed threads
+     - have a resumed thread with a pending status
+
+   target_commit_resumed is not called in the destructor, because its
+   implementations could throw, and we don't to swallow that error in
+   a destructor.  Instead, the caller should call the
+   reset_and_commit_resumed() method so that an eventual exception can
+   propagate.  "reset" in the method name refers to the fact that this
+   method has the same effect as the destructor, in addition to
+   committing resumes.
+
+   The creation of nested scoped_disable_commit_resumed objects is
+   tracked, such that only the outermost instance actually does
+   something, for cases like this:
+
+     void
+     inner_func ()
+     {
+       scoped_disable_commit_resumed disable;
+
+       // do stuff
+
+       disable.reset_and_commit ();
+     }
+
+     void
+     outer_func ()
+     {
+       scoped_disable_commit_resumed disable;
+
+       for (... each thread ...)
+	 inner_func ();
+
+       disable.reset_and_commit ();
+     }
+
+   In this case, we don't want the `disable` destructor in
+   `inner_func` to require targets to commit resumed threads, so that
+   the `reset_and_commit()` call in `inner_func` doesn't actually
+   resume threads.  */
 
-struct displaced_step_closure
+struct scoped_disable_commit_resumed
 {
-  virtual ~displaced_step_closure () = 0;
-};
+  explicit scoped_disable_commit_resumed (const char *reason);
+  ~scoped_disable_commit_resumed ();
 
-/* A simple displaced step closure that contains only a byte buffer.  */
+  DISABLE_COPY_AND_ASSIGN (scoped_disable_commit_resumed);
 
-struct buf_displaced_step_closure : displaced_step_closure
-{
-  buf_displaced_step_closure (int buf_size)
-  : buf (buf_size)
-  {}
+  /* Undoes the disabling done by the ctor, and calls
+     maybe_call_commit_resumed_all_targets().  */
+  void reset_and_commit ();
 
-  gdb::byte_vector buf;
+private:
+  /* Undoes the disabling done by the ctor.  */
+  void reset ();
+
+  /* Whether this object has been reset.  */
+  bool m_reset = false;
+
+  const char *m_reason;
+  bool m_prev_enable_commit_resumed;
 };
 
-/* Per-inferior displaced stepping state.  */
-struct displaced_step_inferior_state
+/* Call target_commit_resumed method on all target stacks whose
+   process_stratum target layer has COMMIT_RESUME_STATE set.  */
+
+extern void maybe_call_commit_resumed_all_targets ();
+
+/* RAII object to temporarily enable the requirement for target stacks
+   to commit their resumed threads.  This is the inverse of
+   scoped_disable_commit_resumed.  The constructor calls the
+   maybe_call_commit_resumed_all_targets function itself, since it's
+   OK to throw from a constructor.  */
+
+struct scoped_enable_commit_resumed
 {
-  displaced_step_inferior_state ()
-  {
-    reset ();
-  }
+  explicit scoped_enable_commit_resumed (const char *reason);
+  ~scoped_enable_commit_resumed ();
 
-  /* Put this object back in its original state.  */
-  void reset ()
-  {
-    failed_before = 0;
-    step_thread = nullptr;
-    step_gdbarch = nullptr;
-    step_closure = nullptr;
-    step_original = 0;
-    step_copy = 0;
-    step_saved_copy.clear ();
-  }
-
-  /* True if preparing a displaced step ever failed.  If so, we won't
-     try displaced stepping for this inferior again.  */
-  int failed_before;
-
-  /* If this is not nullptr, this is the thread carrying out a
-     displaced single-step in process PID.  This thread's state will
-     require fixing up once it has completed its step.  */
-  thread_info *step_thread;
-
-  /* The architecture the thread had when we stepped it.  */
-  gdbarch *step_gdbarch;
-
-  /* The closure provided gdbarch_displaced_step_copy_insn, to be used
-     for post-step cleanup.  */
-  displaced_step_closure *step_closure;
-
-  /* The address of the original instruction, and the copy we
-     made.  */
-  CORE_ADDR step_original, step_copy;
+  DISABLE_COPY_AND_ASSIGN (scoped_enable_commit_resumed);
 
-  /* Saved contents of copy area.  */
-  gdb::byte_vector step_saved_copy;
+private:
+  const char *m_reason;
+  bool m_prev_enable_commit_resumed;
 };
 
+
 #endif /* INFRUN_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inline-frame.c ./gdb/inline-frame.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inline-frame.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inline-frame.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Inline frame unwinder for GDB.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,9 +37,9 @@
 struct inline_state
 {
   inline_state (thread_info *thread_, int skipped_frames_, CORE_ADDR saved_pc_,
-		symbol *skipped_symbol_)
+		std::vector<symbol *> &&skipped_symbols_)
     : thread (thread_), skipped_frames (skipped_frames_), saved_pc (saved_pc_),
-      skipped_symbol (skipped_symbol_)
+      skipped_symbols (std::move (skipped_symbols_))
   {}
 
   /* The thread this data relates to.  It should be a currently
@@ -56,10 +56,10 @@ struct inline_state
      any skipped frames.  */
   CORE_ADDR saved_pc;
 
-  /* Only valid if SKIPPED_FRAMES is non-zero.  This is the symbol
-     of the outermost skipped inline function.  It's used to find the
-     call site of the current frame.  */
-  struct symbol *skipped_symbol;
+  /* Only valid if SKIPPED_FRAMES is non-zero.  This is the list of all
+     function symbols that have been skipped, from inner most to outer
+     most.  It is used to find the call site of the current frame.  */
+  std::vector<struct symbol *> skipped_symbols;
 };
 
 static std::vector<inline_state> inline_states;
@@ -95,37 +95,54 @@ find_inline_frame_state (thread_info *th
   return &state;
 }
 
-/* Forget about any hidden inlined functions in PTID, which is new or
-   about to be resumed.  PTID may be minus_one_ptid (all processes)
-   or a PID (all threads in this process).  */
+/* See inline-frame.h.  */
 
 void
-clear_inline_frame_state (ptid_t ptid)
+clear_inline_frame_state (process_stratum_target *target, ptid_t filter_ptid)
 {
-  if (ptid == minus_one_ptid)
-    {
-      inline_states.clear ();
-      return;
-    }
+  gdb_assert (target != NULL);
 
-  if (ptid.is_pid ())
+  if (filter_ptid == minus_one_ptid || filter_ptid.is_pid ())
     {
-      int pid = ptid.pid ();
+      auto matcher = [target, &filter_ptid] (const inline_state &state)
+	{
+	  thread_info *t = state.thread;
+	  return (t->inf->process_target () == target
+		  && t->ptid.matches (filter_ptid));
+	};
+
       auto it = std::remove_if (inline_states.begin (), inline_states.end (),
-				[pid] (const inline_state &state)
-				  {
-				    return pid == state.thread->inf->pid;
-				  });
+				matcher);
 
       inline_states.erase (it, inline_states.end ());
 
       return;
     }
 
+
+  auto matcher = [target, &filter_ptid] (const inline_state &state)
+    {
+      thread_info *t = state.thread;
+      return (t->inf->process_target () == target
+	      && filter_ptid == t->ptid);
+    };
+
+  auto it = std::find_if (inline_states.begin (), inline_states.end (),
+			  matcher);
+
+  if (it != inline_states.end ())
+    unordered_remove (inline_states, it);
+}
+
+/* See inline-frame.h.  */
+
+void
+clear_inline_frame_state (thread_info *thread)
+{
   auto it = std::find_if (inline_states.begin (), inline_states.end (),
-			  [&ptid] (const inline_state &state)
+			  [thread] (const inline_state &state)
 			    {
-			      return ptid == state.thread->ptid;
+			      return thread == state.thread;
 			    });
 
   if (it != inline_states.end ())
@@ -144,7 +161,8 @@ inline_frame_this_id (struct frame_info
      real frame's this_id method.  So we must call
      get_prev_frame_always.  Because we are inlined into some
      function, there must be previous frames, so this is safe - as
-     long as we're careful not to create any cycles.  */
+     long as we're careful not to create any cycles.  See related
+     comments in get_prev_frame_always_1.  */
   *this_id = get_frame_id (get_prev_frame_always (this_frame));
 
   /* We need a valid frame ID, so we need to be based on a valid
@@ -154,10 +172,6 @@ inline_frame_this_id (struct frame_info
      frame").  This will take work.  */
   gdb_assert (frame_id_p (*this_id));
 
-  /* For now, require we don't match outer_frame_id either (see
-     comment above).  */
-  gdb_assert (!frame_id_eq (*this_id, outer_frame_id));
-
   /* Future work NOTE: Alexandre Oliva applied a patch to GCC 4.3
      which generates DW_AT_entry_pc for inlined functions when
      possible.  If this attribute is available, we should use it
@@ -249,6 +263,7 @@ inline_frame_sniffer (const struct frame
 }
 
 const struct frame_unwind inline_frame_unwind = {
+  "inline",
   INLINE_FRAME,
   default_frame_unwind_stop_reason,
   inline_frame_this_id,
@@ -286,7 +301,8 @@ block_starting_point_at (CORE_ADDR pc, c
 }
 
 /* Loop over the stop chain and determine if execution stopped in an
-   inlined frame because of a user breakpoint set at FRAME_BLOCK.  */
+   inlined frame because of a breakpoint with a user-specified location
+   set at FRAME_BLOCK.  */
 
 static bool
 stopped_by_user_bp_inline_frame (const block *frame_block, bpstat stop_chain)
@@ -295,9 +311,10 @@ stopped_by_user_bp_inline_frame (const b
     {
       struct breakpoint *bpt = s->breakpoint_at;
 
-      if (bpt != NULL && user_breakpoint_p (bpt))
+      if (bpt != NULL
+	  && (user_breakpoint_p (bpt) || bpt->type == bp_until))
 	{
-	  bp_location *loc = s->bp_location_at;
+	  bp_location *loc = s->bp_location_at.get ();
 	  enum bp_loc_type t = loc->loc_type;
 
 	  if (t == bp_loc_software_breakpoint
@@ -324,7 +341,7 @@ void
 skip_inline_frames (thread_info *thread, bpstat stop_chain)
 {
   const struct block *frame_block, *cur_block;
-  struct symbol *last_sym = NULL;
+  std::vector<struct symbol *> skipped_syms;
   int skip_count = 0;
 
   /* This function is called right after reinitializing the frame
@@ -352,7 +369,7 @@ skip_inline_frames (thread_info *thread,
 		    break;
 
 		  skip_count++;
-		  last_sym = BLOCK_FUNCTION (cur_block);
+		  skipped_syms.push_back (BLOCK_FUNCTION (cur_block));
 		}
 	      else
 		break;
@@ -365,7 +382,8 @@ skip_inline_frames (thread_info *thread,
     }
 
   gdb_assert (find_inline_frame_state (thread) == NULL);
-  inline_states.emplace_back (thread, skip_count, this_pc, last_sym);
+  inline_states.emplace_back (thread, skip_count, this_pc,
+			      std::move (skipped_syms));
 
   if (skip_count != 0)
     reinit_frame_cache ();
@@ -404,9 +422,16 @@ struct symbol *
 inline_skipped_symbol (thread_info *thread)
 {
   inline_state *state = find_inline_frame_state (thread);
-
   gdb_assert (state != NULL);
-  return state->skipped_symbol;
+
+  /* This should only be called when we are skipping at least one frame,
+     hence SKIPPED_FRAMES will be greater than zero when we get here.
+     We initialise SKIPPED_FRAMES at the same time as we build
+     SKIPPED_SYMBOLS, hence it should be true that SKIPPED_FRAMES never
+     indexes outside of the SKIPPED_SYMBOLS vector.  */
+  gdb_assert (state->skipped_frames > 0);
+  gdb_assert (state->skipped_frames <= state->skipped_symbols.size ());
+  return state->skipped_symbols[state->skipped_frames - 1];
 }
 
 /* Return the number of functions inlined into THIS_FRAME.  Some of
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inline-frame.h ./gdb/inline-frame.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/inline-frame.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/inline-frame.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Definitions for inline frame support.
 
-   Copyright (C) 2008-2020 Free Software Foundation, Inc.
+   Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,6 +23,7 @@
 struct frame_info;
 struct frame_unwind;
 struct bpstats;
+struct process_stratum_target;
 
 /* The inline frame unwinder.  */
 
@@ -39,10 +40,15 @@ extern const struct frame_unwind inline_
 void skip_inline_frames (thread_info *thread, struct bpstats *stop_chain);
 
 /* Forget about any hidden inlined functions in PTID, which is new or
-   about to be resumed.  If PTID is minus_one_ptid, forget about all
-   hidden inlined functions.  */
+   about to be resumed.  PTID may be minus_one_ptid (all processes of
+   TARGET) or a PID (all threads in this process of TARGET).  */
 
-void clear_inline_frame_state (ptid_t ptid);
+void clear_inline_frame_state (process_stratum_target *target, ptid_t ptid);
+
+/* Forget about any hidden inlined functions in THREAD, which is new
+   or about to be resumed.  */
+
+void clear_inline_frame_state (thread_info *thread);
 
 /* Step into an inlined function by unhiding it.  */
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/interps.c ./gdb/interps.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/interps.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/interps.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Manages interpreters for GDB, the GNU debugger.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
 
@@ -32,12 +32,11 @@
 #include "defs.h"
 #include "gdbcmd.h"
 #include "ui-out.h"
-#include "event-loop.h"
+#include "gdbsupport/event-loop.h"
 #include "event-top.h"
 #include "interps.h"
 #include "completer.h"
 #include "top.h"		/* For command_loop.  */
-#include "continuations.h"
 #include "main.h"
 
 /* Each UI has its own independent set of interpreters.  */
@@ -370,6 +369,14 @@ interpreter_exec_cmd (const char *args,
   unsigned int nrules;
   unsigned int i;
 
+  /* Interpreters may clobber stdout/stderr (e.g.  in mi_interp::resume at time
+     of writing), preserve their state here.  */
+  scoped_restore save_stdout = make_scoped_restore (&gdb_stdout);
+  scoped_restore save_stderr = make_scoped_restore (&gdb_stderr);
+  scoped_restore save_stdlog = make_scoped_restore (&gdb_stdlog);
+  scoped_restore save_stdtarg = make_scoped_restore (&gdb_stdtarg);
+  scoped_restore save_stdtargerr = make_scoped_restore (&gdb_stdtargerr);
+
   if (args == NULL)
     error_no_arg (_("interpreter-exec command"));
 
@@ -439,8 +446,9 @@ current_interpreter (void)
 }
 
 /* This just adds the "interpreter-exec" command.  */
+void _initialize_interpreter ();
 void
-_initialize_interpreter (void)
+_initialize_interpreter ()
 {
   struct cmd_list_element *c;
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/interps.h ./gdb/interps.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/interps.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/interps.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Manages interpreters for GDB, the GNU debugger.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
 
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/iq2000-tdep.c ./gdb/iq2000-tdep.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/iq2000-tdep.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/iq2000-tdep.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,7 +1,7 @@
 /* Target-dependent code for the IQ2000 architecture, for GDB, the GNU
    Debugger.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    Contributed by Red Hat.
 
@@ -24,7 +24,7 @@
 #include "frame.h"
 #include "frame-base.h"
 #include "frame-unwind.h"
-#include "dwarf2-frame.h"
+#include "dwarf2/frame.h"
 #include "gdbtypes.h"
 #include "value.h"
 #include "dis-asm.h"
@@ -89,7 +89,7 @@ iq2000_pointer_to_address (struct gdbarc
 			   struct type * type, const gdb_byte * buf)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type));
+  enum type_code target = TYPE_TARGET_TYPE (type)->code ();
   CORE_ADDR addr
     = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
 
@@ -109,7 +109,7 @@ iq2000_address_to_pointer (struct gdbarc
 			   struct type *type, gdb_byte *buf, CORE_ADDR addr)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type));
+  enum type_code target = TYPE_TARGET_TYPE (type)->code ();
 
   if (target == TYPE_CODE_FUNC || target == TYPE_CODE_METHOD)
     addr = insn_ptr_from_addr (addr);
@@ -239,7 +239,7 @@ iq2000_scan_prologue (struct gdbarch *gd
     {
       LONGEST insn = read_memory_unsigned_integer (pc, 4, byte_order);
       /* Skip any instructions writing to (sp) or decrementing the
-         SP.  */
+	 SP.  */
       if ((insn & 0xffe00000) == 0xac200000)
 	{
 	  /* sw using SP/%1 as base.  */
@@ -298,8 +298,8 @@ iq2000_scan_prologue (struct gdbarch *gd
 	}
 
       /* Unknown instruction encountered in frame.  Bail out?
-         1) If we have a subsequent line symbol, we can keep going.
-         2) If not, we need to bail out and quit scanning instructions.  */
+	 1) If we have a subsequent line symbol, we can keep going.
+	 2) If not, we need to bail out and quit scanning instructions.  */
 
       if (fi && sal.end && (pc < sal.end)) /* Keep scanning.  */
 	continue;
@@ -406,7 +406,7 @@ iq2000_frame_prev_register (struct frame
 
   if (regnum < E_NUM_REGS && cache->saved_regs[regnum] != -1)
     return frame_unwind_got_memory (this_frame, regnum,
-                                    cache->saved_regs[regnum]);
+				    cache->saved_regs[regnum]);
 
   return frame_unwind_got_register (this_frame, regnum, regnum);
 }
@@ -426,6 +426,7 @@ iq2000_frame_this_id (struct frame_info
 }
 
 static const struct frame_unwind iq2000_frame_unwind = {
+  "iq2000 prologue",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   iq2000_frame_this_id,
@@ -504,8 +505,8 @@ iq2000_store_return_value (struct type *
 static int
 iq2000_use_struct_convention (struct type *type)
 {
-  return ((TYPE_CODE (type) == TYPE_CODE_STRUCT)
-	  || (TYPE_CODE (type) == TYPE_CODE_UNION))
+  return ((type->code () == TYPE_CODE_STRUCT)
+	  || (type->code () == TYPE_CODE_UNION))
 	 && TYPE_LENGTH (type) > 8;
 }
 
@@ -597,26 +598,26 @@ iq2000_pass_8bytetype_by_address (struct
   struct type *ftype;
 
   /* Skip typedefs.  */
-  while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+  while (type->code () == TYPE_CODE_TYPEDEF)
     type = TYPE_TARGET_TYPE (type);
   /* Non-struct and non-union types are always passed by value.  */
-  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
-      && TYPE_CODE (type) != TYPE_CODE_UNION)
+  if (type->code () != TYPE_CODE_STRUCT
+      && type->code () != TYPE_CODE_UNION)
     return 0;
   /* Structs with more than 1 field are always passed by address.  */
-  if (TYPE_NFIELDS (type) != 1)
+  if (type->num_fields () != 1)
     return 1;
   /* Get field type.  */
-  ftype = (TYPE_FIELDS (type))[0].type;
+  ftype = type->field (0).type ();
   /* The field type must have size 8, otherwise pass by address.  */
   if (TYPE_LENGTH (ftype) != 8)
     return 1;
   /* Skip typedefs of field type.  */
-  while (TYPE_CODE (ftype) == TYPE_CODE_TYPEDEF)
+  while (ftype->code () == TYPE_CODE_TYPEDEF)
     ftype = TYPE_TARGET_TYPE (ftype);
   /* If field is int or float, pass by value.  */
-  if (TYPE_CODE (ftype) == TYPE_CODE_FLT
-      || TYPE_CODE (ftype) == TYPE_CODE_INT)
+  if (ftype->code () == TYPE_CODE_FLT
+      || ftype->code () == TYPE_CODE_INT)
     return 0;
   /* Everything else, pass by address.  */
   return 1;
@@ -624,8 +625,8 @@ iq2000_pass_8bytetype_by_address (struct
 
 static CORE_ADDR
 iq2000_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)
 {
@@ -646,45 +647,45 @@ iq2000_push_dummy_call (struct gdbarch *
       type = value_type (args[i]);
       typelen = TYPE_LENGTH (type);
       if (typelen <= 4)
-        {
-          /* Scalars of up to 4 bytes, 
-             structs of up to 4 bytes, and
-             pointers.  */
-          if (argreg <= E_LAST_ARGREG)
-            argreg++;
-          else
-            stackspace += 4;
-        }
+	{
+	  /* Scalars of up to 4 bytes, 
+	     structs of up to 4 bytes, and
+	     pointers.  */
+	  if (argreg <= E_LAST_ARGREG)
+	    argreg++;
+	  else
+	    stackspace += 4;
+	}
       else if (typelen == 8 && !iq2000_pass_8bytetype_by_address (type))
-        {
-          /* long long, 
-             double, and possibly
-             structs with a single field of long long or double.  */
-          if (argreg <= E_LAST_ARGREG - 1)
-            {
-              /* 8-byte arg goes into a register pair
-                 (must start with an even-numbered reg).  */
-              if (((argreg - E_1ST_ARGREG) % 2) != 0)
-                argreg ++;
-              argreg += 2;
-            }
-          else
-            {
-              argreg = E_LAST_ARGREG + 1;       /* no more argregs.  */
-              /* 8-byte arg goes on stack, must be 8-byte aligned.  */
-              stackspace = ((stackspace + 7) & ~7);
-              stackspace += 8;
-            }
-        }
+	{
+	  /* long long, 
+	     double, and possibly
+	     structs with a single field of long long or double.  */
+	  if (argreg <= E_LAST_ARGREG - 1)
+	    {
+	      /* 8-byte arg goes into a register pair
+		 (must start with an even-numbered reg).  */
+	      if (((argreg - E_1ST_ARGREG) % 2) != 0)
+		argreg ++;
+	      argreg += 2;
+	    }
+	  else
+	    {
+	      argreg = E_LAST_ARGREG + 1;       /* no more argregs.  */
+	      /* 8-byte arg goes on stack, must be 8-byte aligned.  */
+	      stackspace = ((stackspace + 7) & ~7);
+	      stackspace += 8;
+	    }
+	}
       else
 	{
 	  /* Structs are passed as pointer to a copy of the struct.
 	     So we need room on the stack for a copy of the struct
 	     plus for the argument pointer.  */
-          if (argreg <= E_LAST_ARGREG)
-            argreg++;
-          else
-            stackspace += 4;
+	  if (argreg <= E_LAST_ARGREG)
+	    argreg++;
+	  else
+	    stackspace += 4;
 	  /* Care for 8-byte alignment of structs saved on stack.  */
 	  stackspace += ((typelen + 7) & ~7);
 	}
@@ -713,47 +714,47 @@ iq2000_push_dummy_call (struct gdbarch *
       typelen = TYPE_LENGTH (type);
       val = value_contents (args[i]);
       if (typelen <= 4)
-        {
-          /* Char, short, int, float, pointer, and structs <= four bytes.  */
+	{
+	  /* Char, short, int, float, pointer, and structs <= four bytes.  */
 	  slacklen = (4 - (typelen % 4)) % 4;
 	  memset (buf, 0, sizeof (buf));
 	  memcpy (buf + slacklen, val, typelen);
-          if (argreg <= E_LAST_ARGREG)
-            {
-              /* Passed in a register.  */
+	  if (argreg <= E_LAST_ARGREG)
+	    {
+	      /* Passed in a register.  */
 	      regcache->raw_write (argreg++, buf);
-            }
-          else
-            {
-              /* Passed on the stack.  */
-              write_memory (sp + stackspace, buf, 4);
-              stackspace += 4;
-            }
-        }
+	    }
+	  else
+	    {
+	      /* Passed on the stack.  */
+	      write_memory (sp + stackspace, buf, 4);
+	      stackspace += 4;
+	    }
+	}
       else if (typelen == 8 && !iq2000_pass_8bytetype_by_address (type))
-        {
-          /* (long long), (double), or struct consisting of 
-             a single (long long) or (double).  */
-          if (argreg <= E_LAST_ARGREG - 1)
-            {
-              /* 8-byte arg goes into a register pair
-                 (must start with an even-numbered reg).  */
-              if (((argreg - E_1ST_ARGREG) % 2) != 0)
-                argreg++;
+	{
+	  /* (long long), (double), or struct consisting of 
+	     a single (long long) or (double).  */
+	  if (argreg <= E_LAST_ARGREG - 1)
+	    {
+	      /* 8-byte arg goes into a register pair
+		 (must start with an even-numbered reg).  */
+	      if (((argreg - E_1ST_ARGREG) % 2) != 0)
+		argreg++;
 	      regcache->raw_write (argreg++, val);
 	      regcache->raw_write (argreg++, val + 4);
-            }
-          else
-            {
-              /* 8-byte arg goes on stack, must be 8-byte aligned.  */
-              argreg = E_LAST_ARGREG + 1;       /* no more argregs.  */
-              stackspace = ((stackspace + 7) & ~7);
-              write_memory (sp + stackspace, val, typelen);
-              stackspace += 8;
-            }
-        }
+	    }
+	  else
+	    {
+	      /* 8-byte arg goes on stack, must be 8-byte aligned.  */
+	      argreg = E_LAST_ARGREG + 1;       /* no more argregs.  */
+	      stackspace = ((stackspace + 7) & ~7);
+	      write_memory (sp + stackspace, val, typelen);
+	      stackspace += 8;
+	    }
+	}
       else
-        {
+	{
 	  /* Store struct beginning at the upper end of the previously
 	     computed stack space.  Then store the address of the struct
 	     using the usual rules for a 4 byte value.  */
@@ -767,7 +768,7 @@ iq2000_push_dummy_call (struct gdbarch *
 	      write_memory (sp + stackspace, buf, 4);
 	      stackspace += 4;
 	    }
-        }
+	}
     }
 
   /* Store return address.  */
@@ -839,8 +840,9 @@ iq2000_gdbarch_init (struct gdbarch_info
    Initializer function for the iq2000 module.
    Called by gdb at start-up.  */
 
+void _initialize_iq2000_tdep ();
 void
-_initialize_iq2000_tdep (void)
+_initialize_iq2000_tdep ()
 {
   register_gdbarch_init (bfd_arch_iq2000, iq2000_gdbarch_init);
 }
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/jit.c ./gdb/jit.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/jit.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/jit.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Handle JIT code generation in the inferior for GDB, the GNU Debugger.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -41,16 +41,15 @@
 #include "gdb_bfd.h"
 #include "readline/tilde.h"
 #include "completer.h"
+#include <forward_list>
 
 static std::string jit_reader_dir;
 
-static const struct objfile_data *jit_objfile_data;
+static const char jit_break_name[] = "__jit_debug_register_code";
 
-static const char *const jit_break_name = "__jit_debug_register_code";
+static const char jit_descriptor_name[] = "__jit_debug_descriptor";
 
-static const char *const jit_descriptor_name = "__jit_debug_descriptor";
-
-static void jit_inferior_init (struct gdbarch *gdbarch);
+static void jit_inferior_created_hook (inferior *inf);
 static void jit_inferior_exit_hook (struct inferior *inf);
 
 /* An unwinder is registered for every gdbarch.  This key is used to
@@ -59,9 +58,14 @@ static void jit_inferior_exit_hook (stru
 
 static struct gdbarch_data *jit_gdbarch_data;
 
-/* Non-zero if we want to see trace of jit level stuff.  */
+/* True if we want to see trace of jit level stuff.  */
+
+static bool jit_debug = false;
+
+/* Print a "jit" debug statement.  */
 
-static unsigned int jit_debug = 0;
+#define jit_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (jit_debug, "jit", fmt, ##__VA_ARGS__)
 
 static void
 show_jit_debug (struct ui_file *file, int from_tty,
@@ -70,85 +74,6 @@ show_jit_debug (struct ui_file *file, in
   fprintf_filtered (file, _("JIT debugging is %s.\n"), value);
 }
 
-struct target_buffer
-{
-  CORE_ADDR base;
-  ULONGEST size;
-};
-
-/* Opening the file is a no-op.  */
-
-static void *
-mem_bfd_iovec_open (struct bfd *abfd, void *open_closure)
-{
-  return open_closure;
-}
-
-/* Closing the file is just freeing the base/size pair on our side.  */
-
-static int
-mem_bfd_iovec_close (struct bfd *abfd, void *stream)
-{
-  xfree (stream);
-
-  /* Zero means success.  */
-  return 0;
-}
-
-/* For reading the file, we just need to pass through to target_read_memory and
-   fix up the arguments and return values.  */
-
-static file_ptr
-mem_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
-                     file_ptr nbytes, file_ptr offset)
-{
-  int err;
-  struct target_buffer *buffer = (struct target_buffer *) stream;
-
-  /* If this read will read all of the file, limit it to just the rest.  */
-  if (offset + nbytes > buffer->size)
-    nbytes = buffer->size - offset;
-
-  /* If there are no more bytes left, we've reached EOF.  */
-  if (nbytes == 0)
-    return 0;
-
-  err = target_read_memory (buffer->base + offset, (gdb_byte *) buf, nbytes);
-  if (err)
-    return -1;
-
-  return nbytes;
-}
-
-/* For statting the file, we only support the st_size attribute.  */
-
-static int
-mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
-{
-  struct target_buffer *buffer = (struct target_buffer*) stream;
-
-  memset (sb, 0, sizeof (struct stat));
-  sb->st_size = buffer->size;
-  return 0;
-}
-
-/* Open a BFD from the target's memory.  */
-
-static gdb_bfd_ref_ptr
-bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, char *target)
-{
-  struct target_buffer *buffer = XNEW (struct target_buffer);
-
-  buffer->base = addr;
-  buffer->size = size;
-  return gdb_bfd_openr_iovec ("<in-memory>", target,
-			      mem_bfd_iovec_open,
-			      buffer,
-			      mem_bfd_iovec_pread,
-			      mem_bfd_iovec_close,
-			      mem_bfd_iovec_stat);
-}
-
 struct jit_reader
 {
   jit_reader (struct gdb_reader_funcs *f, gdb_dlhandle_up &&h)
@@ -173,7 +98,7 @@ struct jit_reader
 static struct jit_reader *loaded_jit_reader = NULL;
 
 typedef struct gdb_reader_funcs * (reader_init_fn_type) (void);
-static const char *reader_init_fn_sym = "gdb_init_reader";
+static const char reader_init_fn_sym[] = "gdb_init_reader";
 
 /* Try to load FILE_NAME as a JIT debug info reader.  */
 
@@ -183,15 +108,14 @@ jit_reader_load (const char *file_name)
   reader_init_fn_type *init_fn;
   struct gdb_reader_funcs *funcs = NULL;
 
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog, _("Opening shared object %s.\n"),
-                        file_name);
+  jit_debug_printf ("Opening shared object %s", file_name);
+
   gdb_dlhandle_up so = gdb_dlopen (file_name);
 
   init_fn = (reader_init_fn_type *) gdb_dlsym (so, reader_init_fn_sym);
   if (!init_fn)
     error (_("Could not locate initialization function: %s."),
-          reader_init_fn_sym);
+	   reader_init_fn_sym);
 
   if (gdb_dlsym (so, "plugin_is_GPL_compatible") == NULL)
     error (_("Reader not GPL compatible."));
@@ -221,7 +145,7 @@ jit_reader_load_command (const char *arg
 
   loaded_jit_reader = jit_reader_load (file.get ());
   reinit_frame_cache ();
-  jit_inferior_created_hook ();
+  jit_inferior_created_hook (current_inferior ());
 }
 
 /* Provides the jit-reader-unload command.  */
@@ -239,65 +163,24 @@ jit_reader_unload_command (const char *a
   loaded_jit_reader = NULL;
 }
 
-/* Per-program space structure recording which objfile has the JIT
-   symbols.  */
-
-struct jit_program_space_data
-{
-  /* The objfile.  This is NULL if no objfile holds the JIT
-     symbols.  */
-
-  struct objfile *objfile = nullptr;
-
-  /* If this program space has __jit_debug_register_code, this is the
-     cached address from the minimal symbol.  This is used to detect
-     relocations requiring the breakpoint to be re-created.  */
-
-  CORE_ADDR cached_code_address = 0;
-
-  /* This is the JIT event breakpoint, or NULL if it has not been
-     set.  */
-
-  struct breakpoint *jit_breakpoint = nullptr;
-};
+/* Destructor for jiter_objfile_data.  */
 
-static program_space_key<jit_program_space_data> jit_program_space_key;
-
-/* Per-objfile structure recording the addresses in the program space.
-   This object serves two purposes: for ordinary objfiles, it may
-   cache some symbols related to the JIT interface; and for
-   JIT-created objfiles, it holds some information about the
-   jit_code_entry.  */
-
-struct jit_objfile_data
+jiter_objfile_data::~jiter_objfile_data ()
 {
-  /* Symbol for __jit_debug_register_code.  */
-  struct minimal_symbol *register_code;
-
-  /* Symbol for __jit_debug_descriptor.  */
-  struct minimal_symbol *descriptor;
-
-  /* Address of struct jit_code_entry in this objfile.  This is only
-     non-zero for objfiles that represent code created by the JIT.  */
-  CORE_ADDR addr;
-};
+  if (this->jit_breakpoint != nullptr)
+    delete_breakpoint (this->jit_breakpoint);
+}
 
-/* Fetch the jit_objfile_data associated with OBJF.  If no data exists
+/* Fetch the jiter_objfile_data associated with OBJF.  If no data exists
    yet, make a new structure and attach it.  */
 
-static struct jit_objfile_data *
-get_jit_objfile_data (struct objfile *objf)
+static jiter_objfile_data *
+get_jiter_objfile_data (objfile *objf)
 {
-  struct jit_objfile_data *objf_data;
-
-  objf_data = (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data);
-  if (objf_data == NULL)
-    {
-      objf_data = XCNEW (struct jit_objfile_data);
-      set_objfile_data (objf, jit_objfile_data, objf_data);
-    }
+  if (objf->jiter_data == nullptr)
+    objf->jiter_data.reset (new jiter_objfile_data ());
 
-  return objf_data;
+  return objf->jiter_data.get ();
 }
 
 /* Remember OBJFILE has been created for struct jit_code_entry located
@@ -306,33 +189,18 @@ get_jit_objfile_data (struct objfile *ob
 static void
 add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
 {
-  struct jit_objfile_data *objf_data;
+  gdb_assert (objfile->jited_data == nullptr);
 
-  objf_data = get_jit_objfile_data (objfile);
-  objf_data->addr = entry;
-}
-
-/* Return jit_program_space_data for current program space.  Allocate
-   if not already present.  */
-
-static struct jit_program_space_data *
-get_jit_program_space_data ()
-{
-  struct jit_program_space_data *ps_data;
-
-  ps_data = jit_program_space_key.get (current_program_space);
-  if (ps_data == NULL)
-    ps_data = jit_program_space_key.emplace (current_program_space);
-  return ps_data;
+  objfile->jited_data.reset (new jited_objfile_data (entry));
 }
 
 /* Helper function for reading the global JIT descriptor from remote
-   memory.  Returns 1 if all went well, 0 otherwise.  */
+   memory.  Returns true if all went well, false otherwise.  */
 
-static int
-jit_read_descriptor (struct gdbarch *gdbarch,
-		     struct jit_descriptor *descriptor,
-		     struct jit_program_space_data *ps_data)
+static bool
+jit_read_descriptor (gdbarch *gdbarch,
+		     jit_descriptor *descriptor,
+		     objfile *jiter)
 {
   int err;
   struct type *ptr_type;
@@ -340,19 +208,14 @@ jit_read_descriptor (struct gdbarch *gdb
   int desc_size;
   gdb_byte *desc_buf;
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  struct jit_objfile_data *objf_data;
 
-  if (ps_data->objfile == NULL)
-    return 0;
-  objf_data = get_jit_objfile_data (ps_data->objfile);
-  if (objf_data->descriptor == NULL)
-    return 0;
+  gdb_assert (jiter != nullptr);
+  jiter_objfile_data *objf_data = jiter->jiter_data.get ();
+  gdb_assert (objf_data != nullptr);
+
+  CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (jiter, objf_data->descriptor);
 
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"jit_read_descriptor, descriptor_addr = %s\n",
-			paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
-								  objf_data->descriptor)));
+  jit_debug_printf ("descriptor_addr = %s", paddress (gdbarch, addr));
 
   /* Figure out how big the descriptor is on the remote and how to read it.  */
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
@@ -361,14 +224,12 @@ jit_read_descriptor (struct gdbarch *gdb
   desc_buf = (gdb_byte *) alloca (desc_size);
 
   /* Read the descriptor.  */
-  err = target_read_memory (MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
-						   objf_data->descriptor),
-			    desc_buf, desc_size);
+  err = target_read_memory (addr, desc_buf, desc_size);
   if (err)
     {
       printf_unfiltered (_("Unable to read JIT descriptor from "
 			   "remote memory\n"));
-      return 0;
+      return false;
     }
 
   /* Fix the endianness to match the host.  */
@@ -379,7 +240,7 @@ jit_read_descriptor (struct gdbarch *gdb
   descriptor->first_entry =
       extract_typed_address (&desc_buf[8 + ptr_size], ptr_type);
 
-  return 1;
+  return true;
 }
 
 /* Helper function for reading a JITed code entry from remote memory.  */
@@ -428,48 +289,68 @@ jit_read_code_entry (struct gdbarch *gdb
 
 struct gdb_block
 {
-  /* gdb_blocks are linked into a tree structure.  Next points to the
-     next node at the same depth as this block and parent to the
-     parent gdb_block.  */
-  struct gdb_block *next, *parent;
+  gdb_block (gdb_block *parent, CORE_ADDR begin, CORE_ADDR end,
+	     const char *name)
+    : parent (parent),
+      begin (begin),
+      end (end),
+      name (name != nullptr ? xstrdup (name) : nullptr)
+  {}
+
+  /* The parent of this block.  */
+  struct gdb_block *parent;
 
   /* Points to the "real" block that is being built out of this
      instance.  This block will be added to a blockvector, which will
      then be added to a symtab.  */
-  struct block *real_block;
+  struct block *real_block = nullptr;
 
   /* The first and last code address corresponding to this block.  */
   CORE_ADDR begin, end;
 
   /* The name of this block (if any).  If this is non-NULL, the
      FUNCTION symbol symbol is set to this value.  */
-  const char *name;
+  gdb::unique_xmalloc_ptr<char> name;
 };
 
 /* Proxy object for building a symtab.  */
 
 struct gdb_symtab
 {
+  explicit gdb_symtab (const char *file_name)
+    : file_name (file_name != nullptr ? file_name : "")
+  {}
+
   /* The list of blocks in this symtab.  These will eventually be
-     converted to real blocks.  */
-  struct gdb_block *blocks;
+     converted to real blocks.
+
+     This is specifically a linked list, instead of, for example, a vector,
+     because the pointers are returned to the user's debug info reader.  So
+     it's important that the objects don't change location during their
+     lifetime (which would happen with a vector of objects getting resized).  */
+  std::forward_list<gdb_block> blocks;
 
   /* The number of blocks inserted.  */
-  int nblocks;
+  int nblocks = 0;
 
   /* A mapping between line numbers to PC.  */
-  struct linetable *linetable;
+  gdb::unique_xmalloc_ptr<struct linetable> linetable;
 
   /* The source file for this symtab.  */
-  const char *file_name;
-  struct gdb_symtab *next;
+  std::string file_name;
 };
 
 /* Proxy object for building an object.  */
 
 struct gdb_object
 {
-  struct gdb_symtab *symtabs;
+  /* Symtabs of this object.
+
+     This is specifically a linked list, instead of, for example, a vector,
+     because the pointers are returned to the user's debug info reader.  So
+     it's important that the objects don't change location during their
+     lifetime (which would happen with a vector of objects getting resized).  */
+  std::forward_list<gdb_symtab> symtabs;
 };
 
 /* The type of the `private' data passed around by the callback
@@ -501,7 +382,7 @@ jit_object_open_impl (struct gdb_symbol_
   /* CB is not required right now, but sometime in the future we might
      need a handle to it, and we'd like to do that without breaking
      the ABI.  */
-  return XCNEW (struct gdb_object);
+  return new gdb_object;
 }
 
 /* Readers call into this function to open a new gdb_symtab, which,
@@ -509,40 +390,13 @@ jit_object_open_impl (struct gdb_symbol_
 
 static struct gdb_symtab *
 jit_symtab_open_impl (struct gdb_symbol_callbacks *cb,
-                      struct gdb_object *object,
-                      const char *file_name)
+		      struct gdb_object *object,
+		      const char *file_name)
 {
-  struct gdb_symtab *ret;
-
   /* CB stays unused.  See comment in jit_object_open_impl.  */
 
-  ret = XCNEW (struct gdb_symtab);
-  ret->file_name = file_name ? xstrdup (file_name) : xstrdup ("");
-  ret->next = object->symtabs;
-  object->symtabs = ret;
-  return ret;
-}
-
-/* Returns true if the block corresponding to old should be placed
-   before the block corresponding to new in the final blockvector.  */
-
-static int
-compare_block (const struct gdb_block *const old,
-               const struct gdb_block *const newobj)
-{
-  if (old == NULL)
-    return 1;
-  if (old->begin < newobj->begin)
-    return 1;
-  else if (old->begin == newobj->begin)
-    {
-      if (old->end > newobj->end)
-        return 1;
-      else
-        return 0;
-    }
-  else
-    return 0;
+  object->symtabs.emplace_front (file_name);
+  return &object->symtabs.front ();
 }
 
 /* Called by readers to open a new gdb_block.  This function also
@@ -551,42 +405,15 @@ compare_block (const struct gdb_block *c
 
 static struct gdb_block *
 jit_block_open_impl (struct gdb_symbol_callbacks *cb,
-                     struct gdb_symtab *symtab, struct gdb_block *parent,
-                     GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
+		     struct gdb_symtab *symtab, struct gdb_block *parent,
+		     GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
 {
-  struct gdb_block *block = XCNEW (struct gdb_block);
-
-  block->next = symtab->blocks;
-  block->begin = (CORE_ADDR) begin;
-  block->end = (CORE_ADDR) end;
-  block->name = name ? xstrdup (name) : NULL;
-  block->parent = parent;
-
-  /* Ensure that the blocks are inserted in the correct (reverse of
-     the order expected by blockvector).  */
-  if (compare_block (symtab->blocks, block))
-    {
-      symtab->blocks = block;
-    }
-  else
-    {
-      struct gdb_block *i = symtab->blocks;
-
-      for (;; i = i->next)
-        {
-          /* Guaranteed to terminate, since compare_block (NULL, _)
-             returns 1.  */
-          if (compare_block (i->next, block))
-            {
-              block->next = i->next;
-              i->next = block;
-              break;
-            }
-        }
-    }
+  /* Place the block at the beginning of the list, it will be sorted when the
+     symtab is finalized.  */
+  symtab->blocks.emplace_front (parent, begin, end, name);
   symtab->nblocks++;
 
-  return block;
+  return &symtab->blocks.front ();
 }
 
 /* Readers call this to add a line mapping (from PC to line number) to
@@ -594,8 +421,8 @@ jit_block_open_impl (struct gdb_symbol_c
 
 static void
 jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks *cb,
-                                  struct gdb_symtab *stab, int nlines,
-                                  struct gdb_line_mapping *map)
+				  struct gdb_symtab *stab, int nlines,
+				  struct gdb_line_mapping *map)
 {
   int i;
   int alloc_len;
@@ -605,12 +432,13 @@ jit_symtab_line_mapping_add_impl (struct
 
   alloc_len = sizeof (struct linetable)
 	      + (nlines - 1) * sizeof (struct linetable_entry);
-  stab->linetable = (struct linetable *) xmalloc (alloc_len);
+  stab->linetable.reset (XNEWVAR (struct linetable, alloc_len));
   stab->linetable->nitems = nlines;
   for (i = 0; i < nlines; i++)
     {
       stab->linetable->item[i].pc = (CORE_ADDR) map[i].pc;
       stab->linetable->item[i].line = map[i].line;
+      stab->linetable->item[i].is_stmt = 1;
     }
 }
 
@@ -619,7 +447,7 @@ jit_symtab_line_mapping_add_impl (struct
 
 static void
 jit_symtab_close_impl (struct gdb_symbol_callbacks *cb,
-                       struct gdb_symtab *stab)
+		       struct gdb_symtab *stab)
 {
   /* Right now nothing needs to be done here.  We may need to do some
      cleanup here in the future (again, without breaking the plugin
@@ -632,17 +460,23 @@ static void
 finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
 {
   struct compunit_symtab *cust;
-  struct gdb_block *gdb_block_iter, *gdb_block_iter_tmp;
-  struct block *block_iter;
-  int actual_nblocks, i;
   size_t blockvector_size;
   CORE_ADDR begin, end;
   struct blockvector *bv;
 
-  actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
+  int actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
+
+  /* Sort the blocks in the order they should appear in the blockvector.  */
+  stab->blocks.sort([] (const gdb_block &a, const gdb_block &b)
+    {
+      if (a.begin != b.begin)
+	return a.begin < b.begin;
+
+      return a.end > b.end;
+    });
 
-  cust = allocate_compunit_symtab (objfile, stab->file_name);
-  allocate_symtab (cust, stab->file_name);
+  cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ());
+  allocate_symtab (cust, stab->file_name.c_str ());
   add_compunit_symtab_to_objfile (cust);
 
   /* JIT compilers compile in memory.  */
@@ -656,33 +490,32 @@ finalize_symtab (struct gdb_symtab *stab
 		     + sizeof (struct linetable));
       SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust))
 	= (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size);
-      memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), stab->linetable,
-	      size);
+      memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)),
+	      stab->linetable.get (), size);
     }
 
   blockvector_size = (sizeof (struct blockvector)
-                      + (actual_nblocks - 1) * sizeof (struct block *));
+		      + (actual_nblocks - 1) * sizeof (struct block *));
   bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack,
 					     blockvector_size);
   COMPUNIT_BLOCKVECTOR (cust) = bv;
 
-  /* (begin, end) will contain the PC range this entire blockvector
-     spans.  */
+  /* At the end of this function, (begin, end) will contain the PC range this
+     entire blockvector spans.  */
   BLOCKVECTOR_MAP (bv) = NULL;
-  begin = stab->blocks->begin;
-  end = stab->blocks->end;
+  begin = stab->blocks.front ().begin;
+  end = stab->blocks.front ().end;
   BLOCKVECTOR_NBLOCKS (bv) = actual_nblocks;
 
   /* First run over all the gdb_block objects, creating a real block
      object for each.  Simultaneously, keep setting the real_block
      fields.  */
-  for (i = (actual_nblocks - 1), gdb_block_iter = stab->blocks;
-       i >= FIRST_LOCAL_BLOCK;
-       i--, gdb_block_iter = gdb_block_iter->next)
+  int block_idx = FIRST_LOCAL_BLOCK;
+  for (gdb_block &gdb_block_iter : stab->blocks)
     {
       struct block *new_block = allocate_block (&objfile->objfile_obstack);
-      struct symbol *block_name = allocate_symbol (objfile);
-      struct type *block_type = arch_type (get_objfile_arch (objfile),
+      struct symbol *block_name = new (&objfile->objfile_obstack) symbol;
+      struct type *block_type = arch_type (objfile->arch (),
 					   TYPE_CODE_VOID,
 					   TARGET_CHAR_BIT,
 					   "void");
@@ -690,8 +523,8 @@ finalize_symtab (struct gdb_symtab *stab
       BLOCK_MULTIDICT (new_block)
 	= mdict_create_linear (&objfile->objfile_obstack, NULL);
       /* The address range.  */
-      BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter->begin;
-      BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter->end;
+      BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter.begin;
+      BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter.end;
 
       /* The name.  */
       SYMBOL_DOMAIN (block_name) = VAR_DOMAIN;
@@ -700,23 +533,25 @@ finalize_symtab (struct gdb_symtab *stab
       SYMBOL_TYPE (block_name) = lookup_function_type (block_type);
       SYMBOL_BLOCK_VALUE (block_name) = new_block;
 
-      block_name->name = obstack_strdup (&objfile->objfile_obstack,
-					 gdb_block_iter->name);
+      block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
+					   gdb_block_iter.name.get ());
 
       BLOCK_FUNCTION (new_block) = block_name;
 
-      BLOCKVECTOR_BLOCK (bv, i) = new_block;
+      BLOCKVECTOR_BLOCK (bv, block_idx) = new_block;
       if (begin > BLOCK_START (new_block))
-        begin = BLOCK_START (new_block);
+	begin = BLOCK_START (new_block);
       if (end < BLOCK_END (new_block))
-        end = BLOCK_END (new_block);
+	end = BLOCK_END (new_block);
 
-      gdb_block_iter->real_block = new_block;
+      gdb_block_iter.real_block = new_block;
+
+      block_idx++;
     }
 
   /* Now add the special blocks.  */
-  block_iter = NULL;
-  for (i = 0; i < FIRST_LOCAL_BLOCK; i++)
+  struct block *block_iter = NULL;
+  for (enum block_enum i : { GLOBAL_BLOCK, STATIC_BLOCK })
     {
       struct block *new_block;
 
@@ -739,39 +574,22 @@ finalize_symtab (struct gdb_symtab *stab
 
   /* Fill up the superblock fields for the real blocks, using the
      real_block fields populated earlier.  */
-  for (gdb_block_iter = stab->blocks;
-       gdb_block_iter;
-       gdb_block_iter = gdb_block_iter->next)
+  for (gdb_block &gdb_block_iter : stab->blocks)
     {
-      if (gdb_block_iter->parent != NULL)
+      if (gdb_block_iter.parent != NULL)
 	{
 	  /* If the plugin specifically mentioned a parent block, we
 	     use that.  */
-	  BLOCK_SUPERBLOCK (gdb_block_iter->real_block) =
-	    gdb_block_iter->parent->real_block;
+	  BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
+	    gdb_block_iter.parent->real_block;
 	}
       else
 	{
 	  /* And if not, we set a default parent block.  */
-	  BLOCK_SUPERBLOCK (gdb_block_iter->real_block) =
+	  BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
 	    BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
 	}
     }
-
-  /* Free memory.  */
-  gdb_block_iter = stab->blocks;
-
-  for (gdb_block_iter = stab->blocks, gdb_block_iter_tmp = gdb_block_iter->next;
-       gdb_block_iter;
-       gdb_block_iter = gdb_block_iter_tmp)
-    {
-      gdb_block_iter_tmp = gdb_block_iter->next;
-      xfree ((void *) gdb_block_iter->name);
-      xfree (gdb_block_iter);
-    }
-  xfree (stab->linetable);
-  xfree ((char *) stab->file_name);
-  xfree (stab);
 }
 
 /* Called when closing a gdb_objfile.  Converts OBJ to a proper
@@ -779,26 +597,23 @@ finalize_symtab (struct gdb_symtab *stab
 
 static void
 jit_object_close_impl (struct gdb_symbol_callbacks *cb,
-                       struct gdb_object *obj)
+		       struct gdb_object *obj)
 {
-  struct gdb_symtab *i, *j;
   struct objfile *objfile;
   jit_dbg_reader_data *priv_data;
 
   priv_data = (jit_dbg_reader_data *) cb->priv_data;
 
-  objfile = new struct objfile (NULL, "<< JIT compiled code >>",
-				OBJF_NOT_FILENAME);
+  objfile = objfile::make (nullptr, "<< JIT compiled code >>",
+			   OBJF_NOT_FILENAME);
   objfile->per_bfd->gdbarch = target_gdbarch ();
 
-  j = NULL;
-  for (i = obj->symtabs; i; i = j)
-    {
-      j = i->next;
-      finalize_symtab (i, objfile);
-    }
+  for (gdb_symtab &symtab : obj->symtabs)
+    finalize_symtab (&symtab, objfile);
+
   add_objfile_entry (objfile, *priv_data);
-  xfree (obj);
+
+  delete obj;
 }
 
 /* Try to read CODE_ENTRY using the loaded jit reader (if any).
@@ -807,9 +622,8 @@ jit_object_close_impl (struct gdb_symbol
 
 static int
 jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
-                            CORE_ADDR entry_addr)
+			    CORE_ADDR entry_addr)
 {
-  gdb_byte *gdb_mem;
   int status;
   jit_dbg_reader_data priv_data;
   struct gdb_reader_funcs *funcs;
@@ -832,12 +646,12 @@ jit_reader_try_read_symtab (struct jit_c
   if (!loaded_jit_reader)
     return 0;
 
-  gdb_mem = (gdb_byte *) xmalloc (code_entry->symfile_size);
+  gdb::byte_vector gdb_mem (code_entry->symfile_size);
 
   status = 1;
   try
     {
-      if (target_read_memory (code_entry->symfile_addr, gdb_mem,
+      if (target_read_memory (code_entry->symfile_addr, gdb_mem.data (),
 			      code_entry->symfile_size))
 	status = 0;
     }
@@ -849,15 +663,15 @@ jit_reader_try_read_symtab (struct jit_c
   if (status)
     {
       funcs = loaded_jit_reader->functions;
-      if (funcs->read (funcs, &callbacks, gdb_mem, code_entry->symfile_size)
-          != GDB_SUCCESS)
-        status = 0;
+      if (funcs->read (funcs, &callbacks, gdb_mem.data (),
+		       code_entry->symfile_size)
+	  != GDB_SUCCESS)
+	status = 0;
     }
 
-  xfree (gdb_mem);
-  if (jit_debug && status == 0)
-    fprintf_unfiltered (gdb_stdlog,
-                        "Could not read symtab using the loaded JIT reader.\n");
+  if (status == 0)
+    jit_debug_printf ("Could not read symtab using the loaded JIT reader.");
+
   return status;
 }
 
@@ -866,23 +680,19 @@ jit_reader_try_read_symtab (struct jit_c
 
 static void
 jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
-                         CORE_ADDR entry_addr,
-                         struct gdbarch *gdbarch)
+			 CORE_ADDR entry_addr,
+			 struct gdbarch *gdbarch)
 {
   struct bfd_section *sec;
   struct objfile *objfile;
   const struct bfd_arch_info *b;
 
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"jit_bfd_try_read_symtab, symfile_addr = %s, "
-			"symfile_size = %s\n",
-			paddress (gdbarch, code_entry->symfile_addr),
-			pulongest (code_entry->symfile_size));
-
-  gdb_bfd_ref_ptr nbfd (bfd_open_from_target_memory (code_entry->symfile_addr,
-						     code_entry->symfile_size,
-						     gnutarget));
+  jit_debug_printf ("symfile_addr = %s, symfile_size = %s",
+		    paddress (gdbarch, code_entry->symfile_addr),
+		    pulongest (code_entry->symfile_size));
+
+  gdb_bfd_ref_ptr nbfd (gdb_bfd_open_from_target_memory
+      (code_entry->symfile_addr, code_entry->symfile_size, gnutarget));
   if (nbfd == NULL)
     {
       puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"));
@@ -902,7 +712,7 @@ JITed symbol file is not an object file,
   b = gdbarch_bfd_arch_info (gdbarch);
   if (b->compatible (b, bfd_get_arch_info (nbfd.get ())) != b)
     warning (_("JITed object file architecture %s is not compatible "
-               "with target architecture %s."),
+	       "with target architecture %s."),
 	     bfd_get_arch_info (nbfd.get ())->printable_name,
 	     b->printable_name);
 
@@ -913,8 +723,8 @@ JITed symbol file is not an object file,
   for (sec = nbfd->sections; sec != NULL; sec = sec->next)
     if ((bfd_section_flags (sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
       {
-        /* We assume that these virtual addresses are absolute, and do not
-           treat them as offsets.  */
+	/* We assume that these virtual addresses are absolute, and do not
+	   treat them as offsets.  */
 	sai.emplace_back (bfd_section_vma (sec),
 			  bfd_section_name (sec),
 			  sec->index);
@@ -936,16 +746,13 @@ JITed symbol file is not an object file,
 
 static void
 jit_register_code (struct gdbarch *gdbarch,
-                   CORE_ADDR entry_addr, struct jit_code_entry *code_entry)
+		   CORE_ADDR entry_addr, struct jit_code_entry *code_entry)
 {
   int success;
 
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog,
-                        "jit_register_code, symfile_addr = %s, "
-                        "symfile_size = %s\n",
-                        paddress (gdbarch, code_entry->symfile_addr),
-                        pulongest (code_entry->symfile_size));
+  jit_debug_printf ("symfile_addr = %s, symfile_size = %s",
+		    paddress (gdbarch, code_entry->symfile_addr),
+		    pulongest (code_entry->symfile_size));
 
   success = jit_reader_try_read_symtab (code_entry, entry_addr);
 
@@ -953,18 +760,6 @@ jit_register_code (struct gdbarch *gdbar
     jit_bfd_try_read_symtab (code_entry, entry_addr, gdbarch);
 }
 
-/* This function unregisters JITed code and frees the corresponding
-   objfile.  */
-
-static void
-jit_unregister_code (struct objfile *objfile)
-{
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog, "jit_unregister_code (%s)\n",
-			host_address_to_string (objfile));
-  delete objfile;
-}
-
 /* Look up the objfile with this code entry address.  */
 
 static struct objfile *
@@ -972,13 +767,10 @@ jit_find_objf_with_entry_addr (CORE_ADDR
 {
   for (objfile *objf : current_program_space->objfiles ())
     {
-      struct jit_objfile_data *objf_data;
-
-      objf_data
-	= (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data);
-      if (objf_data != NULL && objf_data->addr == entry_addr)
-        return objf;
+      if (objf->jited_data != nullptr && objf->jited_data->addr == entry_addr)
+	return objf;
     }
+
   return NULL;
 }
 
@@ -988,80 +780,84 @@ jit_find_objf_with_entry_addr (CORE_ADDR
 static void
 jit_breakpoint_deleted (struct breakpoint *b)
 {
-  struct bp_location *iter;
-
   if (b->type != bp_jit_event)
     return;
 
-  for (iter = b->loc; iter != NULL; iter = iter->next)
+  for (bp_location *iter : b->locations ())
     {
-      struct jit_program_space_data *ps_data;
-
-      ps_data = jit_program_space_key.get (iter->pspace);
-      if (ps_data != NULL && ps_data->jit_breakpoint == iter->owner)
+      for (objfile *objf : iter->pspace->objfiles ())
 	{
-	  ps_data->cached_code_address = 0;
-	  ps_data->jit_breakpoint = NULL;
+	  jiter_objfile_data *jiter_data = objf->jiter_data.get ();
+
+	  if (jiter_data != nullptr
+	      && jiter_data->jit_breakpoint == iter->owner)
+	    {
+	      jiter_data->cached_code_address = 0;
+	      jiter_data->jit_breakpoint = nullptr;
+	    }
 	}
     }
 }
 
-/* (Re-)Initialize the jit breakpoint if necessary.
-   Return 0 if the jit breakpoint has been successfully initialized.  */
+/* (Re-)Initialize the jit breakpoints for JIT-producing objfiles in
+   PSPACE.  */
 
-static int
-jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
-				struct jit_program_space_data *ps_data)
+static void
+jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace)
 {
-  struct bound_minimal_symbol reg_symbol;
-  struct bound_minimal_symbol desc_symbol;
-  struct jit_objfile_data *objf_data;
-  CORE_ADDR addr;
-
-  if (ps_data->objfile == NULL)
+  for (objfile *the_objfile : pspace->objfiles ())
     {
+      /* Skip separate debug objects.  */
+      if (the_objfile->separate_debug_objfile_backlink != nullptr)
+	continue;
+
+      if (the_objfile->skip_jit_symbol_lookup)
+	continue;
+
       /* Lookup the registration symbol.  If it is missing, then we
 	 assume we are not attached to a JIT.  */
-      reg_symbol = lookup_bound_minimal_symbol (jit_break_name);
+      bound_minimal_symbol reg_symbol
+	= lookup_minimal_symbol (jit_break_name, nullptr, the_objfile);
       if (reg_symbol.minsym == NULL
 	  || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
-	return 1;
+	{
+	  /* No need to repeat the lookup the next time.  */
+	  the_objfile->skip_jit_symbol_lookup = true;
+	  continue;
+	}
 
-      desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL,
-					   reg_symbol.objfile);
+      bound_minimal_symbol desc_symbol
+	= lookup_minimal_symbol (jit_descriptor_name, NULL, the_objfile);
       if (desc_symbol.minsym == NULL
 	  || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
-	return 1;
+	{
+	  /* No need to repeat the lookup the next time.  */
+	  the_objfile->skip_jit_symbol_lookup = true;
+	  continue;
+	}
 
-      objf_data = get_jit_objfile_data (reg_symbol.objfile);
+      jiter_objfile_data *objf_data
+	= get_jiter_objfile_data (the_objfile);
       objf_data->register_code = reg_symbol.minsym;
       objf_data->descriptor = desc_symbol.minsym;
 
-      ps_data->objfile = reg_symbol.objfile;
-    }
-  else
-    objf_data = get_jit_objfile_data (ps_data->objfile);
+      CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (the_objfile,
+					      objf_data->register_code);
 
-  addr = MSYMBOL_VALUE_ADDRESS (ps_data->objfile, objf_data->register_code);
+      jit_debug_printf ("breakpoint_addr = %s", paddress (gdbarch, addr));
 
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"jit_breakpoint_re_set_internal, "
-			"breakpoint_addr = %s\n",
-			paddress (gdbarch, addr));
-
-  if (ps_data->cached_code_address == addr)
-    return 0;
-
-  /* Delete the old breakpoint.  */
-  if (ps_data->jit_breakpoint != NULL)
-    delete_breakpoint (ps_data->jit_breakpoint);
-
-  /* Put a breakpoint in the registration symbol.  */
-  ps_data->cached_code_address = addr;
-  ps_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
-
-  return 0;
+      /* Check if we need to re-create the breakpoint.  */
+      if (objf_data->cached_code_address == addr)
+	continue;
+
+      /* Delete the old breakpoint.  */
+      if (objf_data->jit_breakpoint != nullptr)
+	delete_breakpoint (objf_data->jit_breakpoint);
+
+      /* Put a breakpoint in the registration symbol.  */
+      objf_data->cached_code_address = addr;
+      objf_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
+    }
 }
 
 /* The private data passed around in the frame unwind callback
@@ -1081,7 +877,7 @@ struct jit_unwind_private
 
 static void
 jit_unwind_reg_set_impl (struct gdb_unwind_callbacks *cb, int dwarf_regnum,
-                         struct gdb_reg_value *value)
+			 struct gdb_reg_value *value)
 {
   struct jit_unwind_private *priv;
   int gdb_reg;
@@ -1089,13 +885,10 @@ jit_unwind_reg_set_impl (struct gdb_unwi
   priv = (struct jit_unwind_private *) cb->priv_data;
 
   gdb_reg = gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv->this_frame),
-                                          dwarf_regnum);
+					  dwarf_regnum);
   if (gdb_reg == -1)
     {
-      if (jit_debug)
-        fprintf_unfiltered (gdb_stdlog,
-                            _("Could not recognize DWARF regnum %d"),
-                            dwarf_regnum);
+      jit_debug_printf ("Could not recognize DWARF regnum %d", dwarf_regnum);
       value->free (value);
       return;
     }
@@ -1157,7 +950,7 @@ jit_dealloc_cache (struct frame_info *th
 
 static int
 jit_frame_sniffer (const struct frame_unwind *self,
-                   struct frame_info *this_frame, void **cache)
+		   struct frame_info *this_frame, void **cache)
 {
   struct jit_unwind_private *priv_data;
   struct gdb_unwind_callbacks callbacks;
@@ -1186,14 +979,11 @@ jit_frame_sniffer (const struct frame_un
   /* Try to coax the provided unwinder to unwind the stack */
   if (funcs->unwind (funcs, &callbacks) == GDB_SUCCESS)
     {
-      if (jit_debug)
-        fprintf_unfiltered (gdb_stdlog, _("Successfully unwound frame using "
-                                          "JIT reader.\n"));
+      jit_debug_printf ("Successfully unwound frame using JIT reader.");
       return 1;
     }
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog, _("Could not unwind frame using "
-                                      "JIT reader.\n"));
+
+  jit_debug_printf ("Could not unwind frame using JIT reader.");
 
   jit_dealloc_cache (this_frame, *cache);
   *cache = NULL;
@@ -1207,7 +997,7 @@ jit_frame_sniffer (const struct frame_un
 
 static void
 jit_frame_this_id (struct frame_info *this_frame, void **cache,
-                   struct frame_id *this_id)
+		   struct frame_id *this_id)
 {
   struct jit_unwind_private priv;
   struct gdb_frame_id frame_id;
@@ -1258,6 +1048,7 @@ jit_frame_prev_register (struct frame_in
 
 static const struct frame_unwind jit_frame_unwind =
 {
+  "jit",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   jit_frame_this_id,
@@ -1296,67 +1087,67 @@ jit_prepend_unwinder (struct gdbarch *gd
 /* Register any already created translations.  */
 
 static void
-jit_inferior_init (struct gdbarch *gdbarch)
+jit_inferior_init (inferior *inf)
 {
   struct jit_descriptor descriptor;
   struct jit_code_entry cur_entry;
-  struct jit_program_space_data *ps_data;
   CORE_ADDR cur_entry_addr;
+  struct gdbarch *gdbarch = inf->gdbarch;
+  program_space *pspace = inf->pspace;
 
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog, "jit_inferior_init\n");
+  jit_debug_printf ("called");
 
   jit_prepend_unwinder (gdbarch);
 
-  ps_data = get_jit_program_space_data ();
-  if (jit_breakpoint_re_set_internal (gdbarch, ps_data) != 0)
-    return;
-
-  /* Read the descriptor so we can check the version number and load
-     any already JITed functions.  */
-  if (!jit_read_descriptor (gdbarch, &descriptor, ps_data))
-    return;
+  jit_breakpoint_re_set_internal (gdbarch, pspace);
 
-  /* Check that the version number agrees with that we support.  */
-  if (descriptor.version != 1)
+  for (objfile *jiter : pspace->objfiles ())
     {
-      printf_unfiltered (_("Unsupported JIT protocol version %ld "
-			   "in descriptor (expected 1)\n"),
-			 (long) descriptor.version);
-      return;
-    }
+      if (jiter->jiter_data == nullptr)
+	continue;
 
-  /* If we've attached to a running program, we need to check the descriptor
-     to register any functions that were already generated.  */
-  for (cur_entry_addr = descriptor.first_entry;
-       cur_entry_addr != 0;
-       cur_entry_addr = cur_entry.next_entry)
-    {
-      jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry);
-
-      /* This hook may be called many times during setup, so make sure we don't
-         add the same symbol file twice.  */
-      if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL)
-        continue;
+      /* Read the descriptor so we can check the version number and load
+	 any already JITed functions.  */
+      if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
+	continue;
 
-      jit_register_code (gdbarch, cur_entry_addr, &cur_entry);
-    }
-}
+      /* Check that the version number agrees with that we support.  */
+      if (descriptor.version != 1)
+	{
+	  printf_unfiltered (_("Unsupported JIT protocol version %ld "
+			       "in descriptor (expected 1)\n"),
+			     (long) descriptor.version);
+	  continue;
+	}
 
-/* inferior_created observer.  */
+      /* If we've attached to a running program, we need to check the
+	 descriptor to register any functions that were already
+	 generated.  */
+      for (cur_entry_addr = descriptor.first_entry;
+	   cur_entry_addr != 0;
+	   cur_entry_addr = cur_entry.next_entry)
+	{
+	  jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry);
 
-static void
-jit_inferior_created (struct target_ops *ops, int from_tty)
-{
-  jit_inferior_created_hook ();
+	  /* This hook may be called many times during setup, so make sure
+	     we don't add the same symbol file twice.  */
+	  if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL)
+	    continue;
+
+	  jit_register_code (gdbarch, cur_entry_addr, &cur_entry);
+	}
+    }
 }
 
-/* Exported routine to call when an inferior has been created.  */
+/* Looks for the descriptor and registration symbols and breakpoints
+   the registration function.  If it finds both, it registers all the
+   already JITed code.  If it has already found the symbols, then it
+   doesn't try again.  */
 
-void
-jit_inferior_created_hook (void)
+static void
+jit_inferior_created_hook (inferior *inf)
 {
-  jit_inferior_init (target_gdbarch ());
+  jit_inferior_init (inf);
 }
 
 /* Exported routine to call to re-set the jit breakpoints,
@@ -1365,8 +1156,7 @@ jit_inferior_created_hook (void)
 void
 jit_breakpoint_re_set (void)
 {
-  jit_breakpoint_re_set_internal (target_gdbarch (),
-				  get_jit_program_space_data ());
+  jit_breakpoint_re_set_internal (target_gdbarch (), current_program_space);
 }
 
 /* This function cleans up any code entries left over when the
@@ -1378,77 +1168,58 @@ jit_inferior_exit_hook (struct inferior
 {
   for (objfile *objf : current_program_space->objfiles_safe ())
     {
-      struct jit_objfile_data *objf_data
-	= (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data);
-
-      if (objf_data != NULL && objf_data->addr != 0)
-	jit_unregister_code (objf);
+      if (objf->jited_data != nullptr && objf->jited_data->addr != 0)
+	objf->unlink ();
     }
 }
 
 void
-jit_event_handler (struct gdbarch *gdbarch)
+jit_event_handler (gdbarch *gdbarch, objfile *jiter)
 {
   struct jit_descriptor descriptor;
-  struct jit_code_entry code_entry;
-  CORE_ADDR entry_addr;
-  struct objfile *objf;
+
+  /* If we get a JIT breakpoint event for this objfile, it is necessarily a
+     JITer.  */
+  gdb_assert (jiter->jiter_data != nullptr);
 
   /* Read the descriptor from remote memory.  */
-  if (!jit_read_descriptor (gdbarch, &descriptor,
-			    get_jit_program_space_data ()))
+  if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
     return;
-  entry_addr = descriptor.relevant_entry;
+  CORE_ADDR entry_addr = descriptor.relevant_entry;
 
   /* Do the corresponding action.  */
   switch (descriptor.action_flag)
     {
     case JIT_NOACTION:
       break;
+
     case JIT_REGISTER:
-      jit_read_code_entry (gdbarch, entry_addr, &code_entry);
-      jit_register_code (gdbarch, entry_addr, &code_entry);
-      break;
+      {
+	jit_code_entry code_entry;
+	jit_read_code_entry (gdbarch, entry_addr, &code_entry);
+	jit_register_code (gdbarch, entry_addr, &code_entry);
+	break;
+      }
+
     case JIT_UNREGISTER:
-      objf = jit_find_objf_with_entry_addr (entry_addr);
-      if (objf == NULL)
-	printf_unfiltered (_("Unable to find JITed code "
-			     "entry at address: %s\n"),
-			   paddress (gdbarch, entry_addr));
-      else
-        jit_unregister_code (objf);
+      {
+	objfile *jited = jit_find_objf_with_entry_addr (entry_addr);
+	if (jited == nullptr)
+	  printf_unfiltered (_("Unable to find JITed code "
+			       "entry at address: %s\n"),
+			     paddress (gdbarch, entry_addr));
+	else
+	  jited->unlink ();
+
+	break;
+      }
 
-      break;
     default:
       error (_("Unknown action_flag value in JIT descriptor!"));
       break;
     }
 }
 
-/* Called to free the data allocated to the jit_program_space_data slot.  */
-
-static void
-free_objfile_data (struct objfile *objfile, void *data)
-{
-  struct jit_objfile_data *objf_data = (struct jit_objfile_data *) data;
-
-  if (objf_data->register_code != NULL)
-    {
-      struct jit_program_space_data *ps_data;
-
-      ps_data = jit_program_space_key.get (objfile->pspace);
-      if (ps_data != NULL && ps_data->objfile == objfile)
-	{
-	  ps_data->objfile = NULL;
-	  if (ps_data->jit_breakpoint != NULL)
-	    delete_breakpoint (ps_data->jit_breakpoint);
-	  ps_data->cached_code_address = 0;
-	}
-    }
-
-  xfree (data);
-}
-
 /* Initialize the jit_gdbarch_data slot with an instance of struct
    jit_gdbarch_data_type */
 
@@ -1463,25 +1234,25 @@ jit_gdbarch_data_init (struct obstack *o
   return data;
 }
 
+void _initialize_jit ();
 void
-_initialize_jit (void)
+_initialize_jit ()
 {
   jit_reader_dir = relocate_gdb_directory (JIT_READER_DIR,
-                                           JIT_READER_DIR_RELOCATABLE);
-  add_setshow_zuinteger_cmd ("jit", class_maintenance, &jit_debug,
-			     _("Set JIT debugging."),
-			     _("Show JIT debugging."),
-			     _("When non-zero, JIT debugging is enabled."),
-			     NULL,
-			     show_jit_debug,
-			     &setdebuglist, &showdebuglist);
-
-  gdb::observers::inferior_created.attach (jit_inferior_created);
-  gdb::observers::inferior_exit.attach (jit_inferior_exit_hook);
-  gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
+					   JIT_READER_DIR_RELOCATABLE);
+  add_setshow_boolean_cmd ("jit", class_maintenance, &jit_debug,
+			   _("Set JIT debugging."),
+			   _("Show JIT debugging."),
+			   _("When set, JIT debugging is enabled."),
+			   NULL,
+			   show_jit_debug,
+			   &setdebuglist, &showdebuglist);
+
+  gdb::observers::inferior_created.attach (jit_inferior_created_hook, "jit");
+  gdb::observers::inferior_execd.attach (jit_inferior_created_hook, "jit");
+  gdb::observers::inferior_exit.attach (jit_inferior_exit_hook, "jit");
+  gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted, "jit");
 
-  jit_objfile_data =
-    register_objfile_data_with_cleanup (NULL, free_objfile_data);
   jit_gdbarch_data = gdbarch_data_register_pre_init (jit_gdbarch_data_init);
   if (is_dl_available ())
     {
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/jit.h ./gdb/jit.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/jit.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/jit.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* JIT declarations for GDB, the GNU Debugger.
 
-   Copyright (C) 2009-2020 Free Software Foundation, Inc.
+   Copyright (C) 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,10 @@
 #ifndef JIT_H
 #define JIT_H
 
+struct inferior;
+struct objfile;
+struct minimal_symbol;
+
 /* When the JIT breakpoint fires, the inferior wants us to take one of
    these actions.  These values are used by the inferior, so the
    values of these enums cannot be changed.  */
@@ -64,20 +68,49 @@ struct jit_descriptor
   CORE_ADDR first_entry;
 };
 
-/* Looks for the descriptor and registration symbols and breakpoints
-   the registration function.  If it finds both, it registers all the
-   already JITed code.  If it has already found the symbols, then it
-   doesn't try again.  */
+/* An objfile that defines the required symbols of the JIT interface has an
+   instance of this type attached to it.  */
+
+struct jiter_objfile_data
+{
+  ~jiter_objfile_data ();
+
+  /* Symbol for __jit_debug_register_code.  */
+  minimal_symbol *register_code = nullptr;
+
+  /* Symbol for __jit_debug_descriptor.  */
+  minimal_symbol *descriptor = nullptr;
+
+  /* This is the relocated address of the __jit_debug_register_code function
+     provided by this objfile.  This is used to detect relocations changes
+     requiring the breakpoint to be re-created.  */
+  CORE_ADDR cached_code_address = 0;
+
+  /* This is the JIT event breakpoint, or nullptr if it has been deleted.  */
+  breakpoint *jit_breakpoint = nullptr;
+};
+
+/* An objfile that is the product of JIT compilation and was registered
+   using the JIT interface has an instance of this type attached to it.  */
 
-extern void jit_inferior_created_hook (void);
+struct jited_objfile_data
+{
+  jited_objfile_data (CORE_ADDR addr)
+    : addr (addr)
+  {}
+
+  /* Address of struct jit_code_entry for this objfile.  */
+  CORE_ADDR addr;
+};
 
 /* Re-establish the jit breakpoint(s).  */
 
 extern void jit_breakpoint_re_set (void);
 
 /* This function is called by handle_inferior_event when it decides
-   that the JIT event breakpoint has fired.  */
+   that the JIT event breakpoint has fired.  JITER is the objfile
+   whose JIT event breakpoint has been hit.  */
 
-extern void jit_event_handler (struct gdbarch *gdbarch);
+extern void jit_event_handler (gdbarch *gdbarch, objfile *jiter);
 
 #endif /* JIT_H */
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/jit-reader.in ./gdb/jit-reader.in
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/jit-reader.in	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/jit-reader.in	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* JIT declarations for GDB, the GNU Debugger.
 
-   Copyright (C) 2011-2020 Free Software Foundation, Inc.
+   Copyright (C) 2011-2021 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/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/language.c ./gdb/language.c
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/language.c	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/language.c	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Multiple source language support for GDB.
 
-   Copyright (C) 1991-2020 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
@@ -46,38 +46,41 @@
 #include "c-lang.h"
 #include <algorithm>
 #include "gdbarch.h"
-
-static int unk_lang_parser (struct parser_state *);
+#include "compile/compile-internal.h"
 
 static void set_range_case (void);
 
-static void unk_lang_emit_char (int c, struct type *type,
-				struct ui_file *stream, int quoter);
-
-static void unk_lang_printchar (int c, struct type *type,
-				struct ui_file *stream);
-
-static void unk_lang_value_print (struct value *, struct ui_file *,
-				  const struct value_print_options *);
-
-static CORE_ADDR unk_lang_trampoline (struct frame_info *, CORE_ADDR pc);
-
-/* Forward declaration */
-extern const struct language_defn unknown_language_defn;
+/* range_mode ==
+   range_mode_auto:   range_check set automatically to default of language.
+   range_mode_manual: range_check set manually by user.  */
+
+enum range_mode
+  {
+    range_mode_auto, range_mode_manual
+  };
+
+/* case_mode ==
+   case_mode_auto:   case_sensitivity set upon selection of scope.
+   case_mode_manual: case_sensitivity set only by user.  */
+
+enum case_mode
+  {
+    case_mode_auto, case_mode_manual
+  };
 
 /* The current (default at startup) state of type and range checking.
    (If the modes are set to "auto", though, these are changed based
    on the default language at startup, and then again based on the
    language of the first source file.  */
 
-enum range_mode range_mode = range_mode_auto;
+static enum range_mode range_mode = range_mode_auto;
 enum range_check range_check = range_check_off;
-enum case_mode case_mode = case_mode_auto;
+static enum case_mode case_mode = case_mode_auto;
 enum case_sensitivity case_sensitivity = case_sensitive_on;
 
 /* The current language and language_mode (see language.h).  */
 
-const struct language_defn *current_language = &unknown_language_defn;
+const struct language_defn *current_language = nullptr;
 enum language_mode language_mode = language_mode_auto;
 
 /* The language that the user expects to be typing in (the language
@@ -85,26 +88,9 @@ enum language_mode language_mode = langu
 
 const struct language_defn *expected_language;
 
-/* The list of supported languages.  Keep this in the same order as
-   the 'enum language' values.  */
+/* Define the array containing all languages.  */
 
-static const struct language_defn *languages[] = {
-  &unknown_language_defn,
-  &auto_language_defn,
-  &c_language_defn,
-  &objc_language_defn,
-  &cplus_language_defn,
-  &d_language_defn,
-  &go_language_defn,
-  &f_language_defn,
-  &m2_language_defn,
-  &asm_language_defn,
-  &pascal_language_defn,
-  &opencl_language_defn,
-  &rust_language_defn,
-  &minimal_language_defn,
-  &ada_language_defn,
-};
+const struct language_defn *language_defn::languages[nr_languages];
 
 /* The current values of the "set language/range/case-sensitive" enum
    commands.  */
@@ -131,11 +117,11 @@ show_language_command (struct ui_file *f
     fprintf_filtered (gdb_stdout,
 		      _("The current source language is "
 			"\"auto; currently %s\".\n"),
-		      current_language->la_name);
+		      current_language->name ());
   else
     fprintf_filtered (gdb_stdout,
 		      _("The current source language is \"%s\".\n"),
-		      current_language->la_name);
+		      current_language->name ());
 
   if (has_stack_frames ())
     {
@@ -162,15 +148,15 @@ set_language_command (const char *ignore
     language = "auto";
 
   /* Search the list of languages for a match.  */
-  for (const auto &lang : languages)
+  for (const auto &lang : language_defn::languages)
     {
-      if (strcmp (lang->la_name, language) == 0)
+      if (strcmp (lang->name (), language) == 0)
 	{
 	  /* Found it!  Go into manual mode, and use this language.  */
 	  if (lang->la_language == language_auto)
 	    {
 	      /* Enter auto mode.  Set to the current frame's language, if
-                 known, or fallback to the initial language.  */
+		 known, or fallback to the initial language.  */
 	      language_mode = language_mode_auto;
 	      try
 		{
@@ -242,7 +228,9 @@ show_range_command (struct ui_file *file
     fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
 		      value);
 
-  if (range_check != current_language->la_range_check)
+  if (range_check == range_check_warn
+      || ((range_check == range_check_on)
+	  != current_language->range_checking_on_by_default ()))
     warning (_("the current range check setting "
 	       "does not match the language.\n"));
 }
@@ -278,7 +266,9 @@ set_range_command (const char *ignore,
       internal_error (__FILE__, __LINE__,
 		      _("Unrecognized range check setting: \"%s\""), range);
     }
-  if (range_check != current_language->la_range_check)
+  if (range_check == range_check_warn
+      || ((range_check == range_check_on)
+	  != current_language->range_checking_on_by_default ()))
     warning (_("the current range check setting "
 	       "does not match the language.\n"));
 }
@@ -316,7 +306,7 @@ show_case_command (struct ui_file *file,
 		      _("Case sensitivity in name search is \"%s\".\n"),
 		      value);
 
-  if (case_sensitivity != current_language->la_case_sensitivity)
+  if (case_sensitivity != current_language->case_sensitivity ())
     warning (_("the current case sensitivity setting does not match "
 	       "the language.\n"));
 }
@@ -349,7 +339,7 @@ set_case_command (const char *ignore, in
 		       case_sensitive);
      }
 
-   if (case_sensitivity != current_language->la_case_sensitivity)
+   if (case_sensitivity != current_language->case_sensitivity ())
      warning (_("the current case sensitivity setting does not match "
 		"the language.\n"));
 }
@@ -362,10 +352,11 @@ static void
 set_range_case (void)
 {
   if (range_mode == range_mode_auto)
-    range_check = current_language->la_range_check;
+    range_check = (current_language->range_checking_on_by_default ()
+		   ? range_check_on : range_check_off);
 
   if (case_mode == case_mode_auto)
-    case_sensitivity = current_language->la_case_sensitivity;
+    case_sensitivity = current_language->case_sensitivity ();
 }
 
 /* Set current language to (enum language) LANG.  Returns previous
@@ -377,32 +368,23 @@ set_language (enum language lang)
   enum language prev_language;
 
   prev_language = current_language->la_language;
-  current_language = languages[lang];
+  current_language = language_def (lang);
   set_range_case ();
   return prev_language;
 }
 
 
-/* Print out the current language settings: language, range and
-   type checking.  If QUIETLY, print only what has changed.  */
+/* See language.h.  */
 
 void
-language_info (int quietly)
+language_info ()
 {
-  if (quietly && expected_language == current_language)
+  if (expected_language == current_language)
     return;
 
   expected_language = current_language;
   printf_unfiltered (_("Current language:  %s\n"), language);
   show_language_command (NULL, 1, NULL, NULL);
-
-  if (!quietly)
-    {
-      printf_unfiltered (_("Range checking:    %s\n"), range);
-      show_range_command (NULL, 1, NULL, NULL);
-      printf_unfiltered (_("Case sensitivity:  %s\n"), case_sensitive);
-      show_case_command (NULL, 1, NULL, NULL);
-    }
 }
 
 
@@ -410,7 +392,7 @@ language_info (int quietly)
 int
 pointer_type (struct type *type)
 {
-  return TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type);
+  return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type);
 }
 
 
@@ -456,7 +438,7 @@ range_error (const char *string,...)
       break;
     case range_check_off:
       /* FIXME: cagney/2002-01-30: Should this function print anything
-         when range error is off?  */
+	 when range error is off?  */
       vfprintf_filtered (gdb_stderr, string, args);
       fprintf_filtered (gdb_stderr, "\n");
       break;
@@ -474,8 +456,8 @@ range_error (const char *string,...)
 enum language
 language_enum (const char *str)
 {
-  for (const auto &lang : languages)
-    if (strcmp (lang->la_name, str) == 0)
+  for (const auto &lang : language_defn::languages)
+    if (strcmp (lang->name (), str) == 0)
       return lang->la_language;
 
   if (strcmp (str, "local") == 0)
@@ -489,7 +471,9 @@ language_enum (const char *str)
 const struct language_defn *
 language_def (enum language lang)
 {
-  return languages[lang];
+  const struct language_defn *l = language_defn::languages[lang];
+  gdb_assert (l != nullptr);
+  return l;
 }
 
 /* Return the language as a string.  */
@@ -497,22 +481,9 @@ language_def (enum language lang)
 const char *
 language_str (enum language lang)
 {
-  return languages[lang]->la_name;
-}
-
-static void
-set_check (const char *ignore, int from_tty)
-{
-  printf_unfiltered (
-     "\"set check\" must be followed by the name of a check subcommand.\n");
-  help_list (setchecklist, "set check ", all_commands, gdb_stdout);
+  return language_def (lang)->name ();
 }
 
-static void
-show_check (const char *ignore, int from_tty)
-{
-  cmd_show_list (showchecklist, from_tty, "");
-}
 
 
 /* Build and install the "set language LANG" command.  */
@@ -525,34 +496,30 @@ add_set_language_command ()
   /* Build the language names array, to be used as enumeration in the
      "set language" enum command.  +1 for "local" and +1 for NULL
      termination.  */
-  language_names = new const char *[ARRAY_SIZE (languages) + 2];
+  language_names = new const char *[ARRAY_SIZE (language_defn::languages) + 2];
 
   /* Display "auto", "local" and "unknown" first, and then the rest,
      alpha sorted.  */
   const char **language_names_p = language_names;
-  *language_names_p++ = auto_language_defn.la_name;
+  *language_names_p++ = language_def (language_auto)->name ();
   *language_names_p++ = "local";
-  *language_names_p++ = unknown_language_defn.la_name;
+  *language_names_p++ = language_def (language_unknown)->name ();
   const char **sort_begin = language_names_p;
-  for (const auto &lang : languages)
+  for (const auto &lang : language_defn::languages)
     {
       /* Already handled above.  */
       if (lang->la_language == language_auto
 	  || lang->la_language == language_unknown)
 	continue;
-      *language_names_p++ = lang->la_name;
+      *language_names_p++ = lang->name ();
     }
   *language_names_p = NULL;
   std::sort (sort_begin, language_names_p, compare_cstrings);
 
   /* Add the filename extensions.  */
-  for (const auto &lang : languages)
-    if (lang->la_filename_extensions != NULL)
-      {
-	for (size_t i = 0; lang->la_filename_extensions[i] != NULL; ++i)
-	  add_filename_language (lang->la_filename_extensions[i],
-				 lang->la_language);
-      }
+  for (const auto &lang : language_defn::languages)
+    for (const char * const &ext : lang->filename_extensions ())
+      add_filename_language (ext, lang->la_language);
 
   /* Build the "help set language" docs.  */
   string_file doc;
@@ -561,22 +528,18 @@ add_set_language_command ()
 		"The currently understood settings are:\n\nlocal or "
 		"auto    Automatic setting based on source file"));
 
-  for (const auto &lang : languages)
+  for (const auto &lang : language_defn::languages)
     {
       /* Already dealt with these above.  */
       if (lang->la_language == language_unknown
 	  || lang->la_language == language_auto)
 	continue;
 
-      /* FIXME: i18n: for now assume that the human-readable name is
-	 just a capitalization of the internal name.  */
       /* Note that we add the newline at the front, so we don't wind
 	 up with a trailing newline.  */
-      doc.printf ("\n%-16s Use the %c%s language",
-		  lang->la_name,
-		  /* Capitalize first letter of language name.  */
-		  toupper (lang->la_name[0]),
-		  lang->la_name + 1);
+      doc.printf ("\n%-16s Use the %s language",
+		  lang->name (),
+		  lang->natural_name ());
     }
 
   add_setshow_enum_cmd ("language", class_support,
@@ -596,15 +559,12 @@ add_set_language_command ()
 CORE_ADDR 
 skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc)
 {
-  for (const auto &lang : languages)
+  for (const auto &lang : language_defn::languages)
     {
-      if (lang->skip_trampoline != NULL)
-	{
-	  CORE_ADDR real_pc = lang->skip_trampoline (frame, pc);
+      CORE_ADDR real_pc = lang->skip_trampoline (frame, pc);
 
-	  if (real_pc)
-	    return real_pc;
-	}
+      if (real_pc != 0)
+	return real_pc;
     }
 
   return 0;
@@ -620,91 +580,146 @@ char *
 language_demangle (const struct language_defn *current_language, 
 				const char *mangled, int options)
 {
-  if (current_language != NULL && current_language->la_demangle)
-    return current_language->la_demangle (mangled, options);
+  if (current_language != NULL)
+    return current_language->demangle_symbol (mangled, options);
   return NULL;
 }
 
+/* Return information about whether TYPE should be passed
+   (and returned) by reference at the language level.  */
+
+struct language_pass_by_ref_info
+language_pass_by_reference (struct type *type)
+{
+  return current_language->pass_by_reference_info (type);
+}
+
+/* Return the default string containing the list of characters
+   delimiting words.  This is a reasonable default value that
+   most languages should be able to use.  */
+
+const char *
+default_word_break_characters (void)
+{
+  return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
+}
+
 /* See language.h.  */
 
-int
-language_sniff_from_mangled_name (const struct language_defn *lang,
-				  const char *mangled, char **demangled)
+void
+language_defn::print_array_index (struct type *index_type, LONGEST index,
+				  struct ui_file *stream,
+				  const value_print_options *options) const
 {
-  gdb_assert (lang != NULL);
+  struct value *index_value = value_from_longest (index_type, index);
 
-  if (lang->la_sniff_from_mangled_name == NULL)
-    {
-      *demangled = NULL;
-      return 0;
-    }
+  fprintf_filtered (stream, "[");
+  value_print (index_value, stream, options);
+  fprintf_filtered (stream, "] = ");
+}
 
-  return lang->la_sniff_from_mangled_name (mangled, demangled);
+/* See language.h.  */
+
+gdb::unique_xmalloc_ptr<char>
+language_defn::watch_location_expression (struct type *type,
+					  CORE_ADDR addr) const
+{
+  /* Generates an expression that assumes a C like syntax is valid.  */
+  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)));
 }
 
-/* Return class name from physname or NULL.  */
-char *
-language_class_name_from_physname (const struct language_defn *lang,
-				   const char *physname)
+/* See language.h.  */
+
+void
+language_defn::value_print (struct value *val, struct ui_file *stream,
+	       const struct value_print_options *options) const
 {
-  if (lang != NULL && lang->la_class_name_from_physname)
-    return lang->la_class_name_from_physname (physname);
-  return NULL;
+  return c_value_print (val, stream, options);
 }
 
-/* Return non-zero if TYPE should be passed (and returned) by
-   reference at the language level.  */
+/* See language.h.  */
+
 int
-language_pass_by_reference (struct type *type)
+language_defn::parser (struct parser_state *ps) const
 {
-  return current_language->la_pass_by_reference (type);
+  return c_parse (ps);
 }
 
-/* Return zero; by default, types are passed by value at the language
-   level.  The target ABI may pass or return some structs by reference
-   independent of this.  */
-int
-default_pass_by_reference (struct type *type)
+/* See language.h.  */
+
+void
+language_defn::value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const
 {
-  return 0;
+  return c_value_print_inner (val, stream, recurse, options);
 }
 
-/* Return the default string containing the list of characters
-   delimiting words.  This is a reasonable default value that
-   most languages should be able to use.  */
+/* See language.h.  */
 
-const char *
-default_word_break_characters (void)
+void
+language_defn::emitchar (int ch, struct type *chtype,
+			 struct ui_file * stream, int quoter) const
 {
-  return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
+  c_emit_char (ch, chtype, stream, quoter);
 }
 
-/* Print the index of array elements using the C99 syntax.  */
+/* See language.h.  */
 
 void
-default_print_array_index (struct value *index_value, struct ui_file *stream,
-			   const struct value_print_options *options)
+language_defn::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
 {
-  fprintf_filtered (stream, "[");
-  LA_VALUE_PRINT (index_value, stream, options);
-  fprintf_filtered (stream, "] = ");
+  c_printstr (stream, elttype, string, length, encoding, force_ellipses,
+	      options);
+}
+
+/* See language.h.  */
+
+void
+language_defn::print_typedef (struct type *type, struct symbol *new_symbol,
+			      struct ui_file *stream) const
+{
+  c_print_typedef (type, new_symbol, stream);
 }
 
 /* See language.h.  */
 
 bool
+language_defn::is_string_type_p (struct type *type) const
+{
+  return c_is_string_type_p (type);
+}
+
+/* See language.h.  */
+
+std::unique_ptr<compile_instance>
+language_defn::get_compile_instance () const
+{
+  return {};
+}
+
+/* The default implementation of the get_symbol_name_matcher_inner method
+   from the language_defn class.  Matches with strncmp_iw.  */
+
+static bool
 default_symbol_name_matcher (const char *symbol_search_name,
 			     const lookup_name_info &lookup_name,
 			     completion_match_result *comp_match_res)
 {
-  const std::string &name = lookup_name.name ();
+  gdb::string_view name = lookup_name.name ();
   completion_match_for_lcd *match_for_lcd
     = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL);
   strncmp_iw_mode mode = (lookup_name.completion_mode ()
 			  ? strncmp_iw_mode::NORMAL
 			  : strncmp_iw_mode::MATCH_PARAMS);
 
-  if (strncmp_iw_with_mode (symbol_search_name, name.c_str (), name.size (),
+  if (strncmp_iw_with_mode (symbol_search_name, name.data (), name.size (),
 			    mode, language_minimal, match_for_lcd) == 0)
     {
       if (comp_match_res != NULL)
@@ -717,228 +732,213 @@ default_symbol_name_matcher (const char
 
 /* See language.h.  */
 
-bool
-default_is_string_type_p (struct type *type)
-{
-  type = check_typedef (type);
-  while (TYPE_CODE (type) == TYPE_CODE_REF)
-    {
-      type = TYPE_TARGET_TYPE (type);
-      type = check_typedef (type);
-    }
-  return (TYPE_CODE (type)  == TYPE_CODE_STRING);
-}
-
-/* See language.h.  */
-
 symbol_name_matcher_ftype *
-get_symbol_name_matcher (const language_defn *lang,
-			 const lookup_name_info &lookup_name)
+language_defn::get_symbol_name_matcher
+	(const lookup_name_info &lookup_name) const
 {
   /* If currently in Ada mode, and the lookup name is wrapped in
      '<...>', hijack all symbol name comparisons using the Ada
      matcher, which handles the verbatim matching.  */
   if (current_language->la_language == language_ada
       && lookup_name.ada ().verbatim_p ())
-    return current_language->la_get_symbol_name_matcher (lookup_name);
+    return current_language->get_symbol_name_matcher_inner (lookup_name);
 
-  if (lang->la_get_symbol_name_matcher != nullptr)
-    return lang->la_get_symbol_name_matcher (lookup_name);
-  return default_symbol_name_matcher;
+  return this->get_symbol_name_matcher_inner (lookup_name);
 }
 
-/* Define the language that is no language.  */
+/* See language.h.  */
 
-static int
-unk_lang_parser (struct parser_state *ps)
+symbol_name_matcher_ftype *
+language_defn::get_symbol_name_matcher_inner
+	(const lookup_name_info &lookup_name) const
 {
-  return 1;
+  return default_symbol_name_matcher;
 }
 
-static void
-unk_lang_emit_char (int c, struct type *type, struct ui_file *stream,
-		    int quoter)
-{
-  error (_("internal error - unimplemented "
-	   "function unk_lang_emit_char called."));
-}
+/* See language.h.  */
 
-static void
-unk_lang_printchar (int c, struct type *type, struct ui_file *stream)
+const struct lang_varobj_ops *
+language_defn::varobj_ops () const
 {
-  error (_("internal error - unimplemented "
-	   "function unk_lang_printchar called."));
-}
+  /* The ops for the C language are suitable for the vast majority of the
+     supported languages.  */
+  return &c_varobj_ops;
+}
+
+/* Parent class for both the "auto" and "unknown" languages.  These two
+   pseudo-languages are very similar so merging their implementations like
+   this makes sense.  */
+
+class auto_or_unknown_language : public language_defn
+{
+public:
+  auto_or_unknown_language (enum language lang)
+    : language_defn (lang)
+  { /* Nothing.  */ }
+
+  /* See language.h.  */
+  void language_arch_info (struct gdbarch *gdbarch,
+			   struct language_arch_info *lai) const override
+  {
+    lai->set_string_char_type (builtin_type (gdbarch)->builtin_char);
+    lai->set_bool_type (builtin_type (gdbarch)->builtin_int);
+  }
+
+  /* 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
+  {
+    error (_("type printing not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  char *demangle_symbol (const char *mangled, int options) const override
+  {
+    /* The auto language just uses the C++ demangler.  */
+    return gdb_demangle (mangled, options);
+  }
+
+  /* See language.h.  */
+
+  void value_print (struct value *val, struct ui_file *stream,
+		    const struct value_print_options *options) const override
+  {
+    error (_("value printing not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  void value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const override
+  {
+    error (_("inner value printing not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  int parser (struct parser_state *ps) const override
+  {
+    error (_("expression parsing not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  void emitchar (int ch, struct type *chtype,
+		 struct ui_file *stream, int quoter) const override
+  {
+    error (_("emit character not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+		  struct ui_file *stream) const override
+  {
+    error (_("print character not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* 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
+  {
+    error (_("print string not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  void print_typedef (struct type *type, struct symbol *new_symbol,
+		      struct ui_file *stream) const override
+  {
+    error (_("print typedef not implemented for language \"%s\""),
+	   natural_name ());
+  }
+
+  /* See language.h.  */
+
+  bool is_string_type_p (struct type *type) const override
+  {
+    type = check_typedef (type);
+    while (type->code () == TYPE_CODE_REF)
+      {
+	type = TYPE_TARGET_TYPE (type);
+	type = check_typedef (type);
+      }
+    return (type->code () == TYPE_CODE_STRING);
+  }
 
-static void
-unk_lang_printstr (struct ui_file *stream, struct type *type,
-		   const gdb_byte *string, unsigned int length,
-		   const char *encoding, int force_ellipses,
-		   const struct value_print_options *options)
-{
-  error (_("internal error - unimplemented "
-	   "function unk_lang_printstr called."));
-}
+  /* See language.h.  */
 
-static void
-unk_lang_print_type (struct type *type, const char *varstring,
-		     struct ui_file *stream, int show, int level,
-		     const struct type_print_options *flags)
-{
-  error (_("internal error - unimplemented "
-	   "function unk_lang_print_type called."));
-}
+  const char *name_of_this () const override
+  { return "this"; }
+};
 
-static void
-unk_lang_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)
-{
-  error (_("internal error - unimplemented "
-	   "function unk_lang_val_print called."));
-}
+/* Class representing the fake "auto" language.  */
 
-static void
-unk_lang_value_print (struct value *val, struct ui_file *stream,
-		      const struct value_print_options *options)
+class auto_language : public auto_or_unknown_language
 {
-  error (_("internal error - unimplemented "
-	   "function unk_lang_value_print called."));
-}
+public:
+  auto_language ()
+    : auto_or_unknown_language (language_auto)
+  { /* Nothing.  */ }
 
-static CORE_ADDR unk_lang_trampoline (struct frame_info *frame, CORE_ADDR pc)
-{
-  return 0;
-}
+  /* See language.h.  */
 
-/* Unknown languages just use the cplus demangler.  */
-static char *unk_lang_demangle (const char *mangled, int options)
-{
-  return gdb_demangle (mangled, options);
-}
+  const char *name () const override
+  { return "auto"; }
 
-static char *unk_lang_class_name (const char *mangled)
-{
-  return NULL;
-}
+  /* See language.h.  */
 
-static const struct op_print unk_op_print_tab[] =
-{
-  {NULL, OP_NULL, PREC_NULL, 0}
+  const char *natural_name () const override
+  { return "Auto"; }
 };
 
-static void
-unknown_language_arch_info (struct gdbarch *gdbarch,
-			    struct language_arch_info *lai)
+/* Single instance of the fake "auto" language.  */
+
+static auto_language auto_language_defn;
+
+/* Class representing the unknown language.  */
+
+class unknown_language : public auto_or_unknown_language
 {
-  lai->string_char_type = builtin_type (gdbarch)->builtin_char;
-  lai->bool_type_default = builtin_type (gdbarch)->builtin_int;
-  lai->primitive_type_vector = GDBARCH_OBSTACK_CALLOC (gdbarch, 1,
-						       struct type *);
-}
-
-const struct language_defn unknown_language_defn =
-{
-  "unknown",
-  "Unknown",
-  language_unknown,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_no,
-  NULL,
-  &exp_descriptor_standard,
-  unk_lang_parser,
-  null_post_parser,
-  unk_lang_printchar,		/* Print character constant */
-  unk_lang_printstr,
-  unk_lang_emit_char,
-  unk_lang_print_type,		/* Print a type using appropriate syntax */
-  default_print_typedef,	/* Print a typedef using appropriate syntax */
-  unk_lang_val_print,		/* Print a value using appropriate syntax */
-  unk_lang_value_print,		/* Print a top-level value */
-  default_read_var_value,	/* la_read_var_value */
-  unk_lang_trampoline,		/* Language specific skip_trampoline */
-  "this",        	    	/* name_of_this */
-  true,				/* store_sym_names_in_linkage_form_p */
-  basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
-  basic_lookup_transparent_type,/* lookup_transparent_type */
-  unk_lang_demangle,		/* Language specific symbol demangler */
-  NULL,
-  unk_lang_class_name,		/* Language specific
-				   class_name_from_physname */
-  unk_op_print_tab,		/* expression operators for printing */
-  1,				/* c-style arrays */
-  0,				/* String lower bound */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  unknown_language_arch_info,	/* 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,
-  default_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
-};
+public:
+  unknown_language ()
+    : auto_or_unknown_language (language_unknown)
+  { /* Nothing.  */ }
 
-/* These two structs define fake entries for the "local" and "auto"
-   options.  */
-const struct language_defn auto_language_defn =
-{
-  "auto",
-  "Auto",
-  language_auto,
-  range_check_off,
-  case_sensitive_on,
-  array_row_major,
-  macro_expansion_no,
-  NULL,
-  &exp_descriptor_standard,
-  unk_lang_parser,
-  null_post_parser,
-  unk_lang_printchar,		/* Print character constant */
-  unk_lang_printstr,
-  unk_lang_emit_char,
-  unk_lang_print_type,		/* Print a type using appropriate syntax */
-  default_print_typedef,	/* Print a typedef using appropriate syntax */
-  unk_lang_val_print,		/* Print a value using appropriate syntax */
-  unk_lang_value_print,		/* Print a top-level value */
-  default_read_var_value,	/* la_read_var_value */
-  unk_lang_trampoline,		/* Language specific skip_trampoline */
-  "this",		        /* name_of_this */
-  false,			/* store_sym_names_in_linkage_form_p */
-  basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
-  basic_lookup_transparent_type,/* lookup_transparent_type */
-  unk_lang_demangle,		/* Language specific symbol demangler */
-  NULL,
-  unk_lang_class_name,		/* Language specific
-				   class_name_from_physname */
-  unk_op_print_tab,		/* expression operators for printing */
-  1,				/* c-style arrays */
-  0,				/* String lower bound */
-  default_word_break_characters,
-  default_collect_symbol_completion_matches,
-  unknown_language_arch_info,	/* 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,
-  default_is_string_type_p,
-  "{...}"			/* la_struct_too_deep_ellipsis */
+  /* See language.h.  */
+
+  const char *name () const override
+  { return "unknown"; }
+
+  /* See language.h.  */
+
+  const char *natural_name () const override
+  { return "Unknown"; }
+
+  /* See language.h.  */
+
+  bool store_sym_names_in_linkage_form_p () const override
+  { return true; }
 };
 
+/* Single instance of the unknown language class.  */
+
+static unknown_language unknown_language_defn;
+
 
 /* Per-architecture language information.  */
 
@@ -954,142 +954,166 @@ struct language_gdbarch
 static void *
 language_gdbarch_post_init (struct gdbarch *gdbarch)
 {
-  struct language_gdbarch *l;
-
-  l = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct language_gdbarch);
-  for (const auto &lang : languages)
-    if (lang != NULL && lang->la_language_arch_info != NULL)
-      {
-	lang->la_language_arch_info (gdbarch,
-				     l->arch_info + lang->la_language);
-      }
+  struct language_gdbarch *l
+    = obstack_new<struct language_gdbarch> (gdbarch_obstack (gdbarch));
+  for (const auto &lang : language_defn::languages)
+    {
+      gdb_assert (lang != nullptr);
+      lang->language_arch_info (gdbarch, &l->arch_info[lang->la_language]);
+    }
 
   return l;
 }
 
+/* See language.h.  */
+
 struct type *
 language_string_char_type (const struct language_defn *la,
 			   struct gdbarch *gdbarch)
 {
   struct language_gdbarch *ld
     = (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
-
-  return ld->arch_info[la->la_language].string_char_type;
+  return ld->arch_info[la->la_language].string_char_type ();
 }
 
+/* See language.h.  */
+
 struct type *
 language_bool_type (const struct language_defn *la,
 		    struct gdbarch *gdbarch)
 {
   struct language_gdbarch *ld
     = (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
+  return ld->arch_info[la->la_language].bool_type ();
+}
 
-  if (ld->arch_info[la->la_language].bool_type_symbol)
+/* See language.h.  */
+
+struct type *
+language_arch_info::bool_type () const
+{
+  if (m_bool_type_name != nullptr)
     {
       struct symbol *sym;
 
-      sym = lookup_symbol (ld->arch_info[la->la_language].bool_type_symbol,
-			   NULL, VAR_DOMAIN, NULL).symbol;
-      if (sym)
+      sym = lookup_symbol (m_bool_type_name, NULL, VAR_DOMAIN, NULL).symbol;
+      if (sym != nullptr)
 	{
 	  struct type *type = SYMBOL_TYPE (sym);
-
-	  if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
+	  if (type != nullptr && type->code () == TYPE_CODE_BOOL)
 	    return type;
 	}
     }
 
-  return ld->arch_info[la->la_language].bool_type_default;
+  return m_bool_type_default;
 }
 
-/* Helper function for primitive type lookup.  */
+/* See language.h.  */
 
-static struct type **
-language_lookup_primitive_type_1 (const struct language_arch_info *lai,
-				  const char *name)
+struct symbol *
+language_arch_info::type_and_symbol::alloc_type_symbol
+	(enum language lang, struct type *type)
 {
-  struct type **p;
+  struct symbol *symbol;
+  struct gdbarch *gdbarch;
+  gdb_assert (!type->is_objfile_owned ());
+  gdbarch = type->arch_owner ();
+  symbol = new (gdbarch_obstack (gdbarch)) struct symbol ();
+  symbol->m_name = type->name ();
+  symbol->set_language (lang, nullptr);
+  symbol->owner.arch = gdbarch;
+  SYMBOL_OBJFILE_OWNED (symbol) = 0;
+  symbol->set_section_index (0);
+  SYMBOL_TYPE (symbol) = type;
+  SYMBOL_DOMAIN (symbol) = VAR_DOMAIN;
+  SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF;
+  return symbol;
+}
+
+/* See language.h.  */
 
-  for (p = lai->primitive_type_vector; (*p) != NULL; p++)
+language_arch_info::type_and_symbol *
+language_arch_info::lookup_primitive_type_and_symbol (const char *name)
+{
+  for (struct type_and_symbol &tas : primitive_types_and_symbols)
     {
-      if (strcmp (TYPE_NAME (*p), name) == 0)
-	return p;
+      if (strcmp (tas.type ()->name (), name) == 0)
+	return &tas;
     }
-  return NULL;
+
+  return nullptr;
 }
 
 /* See language.h.  */
 
 struct type *
-language_lookup_primitive_type (const struct language_defn *la,
-				struct gdbarch *gdbarch,
-				const char *name)
+language_arch_info::lookup_primitive_type (const char *name)
 {
-  struct language_gdbarch *ld =
-    (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
-  struct type **typep;
-
-  typep = language_lookup_primitive_type_1 (&ld->arch_info[la->la_language],
-					    name);
-  if (typep == NULL)
-    return NULL;
-  return *typep;
+  type_and_symbol *tas = lookup_primitive_type_and_symbol (name);
+  if (tas != nullptr)
+    return tas->type ();
+  return nullptr;
 }
 
-/* Helper function for type lookup as a symbol.
-   Create the symbol corresponding to type TYPE in language LANG.  */
+/* See language.h.  */
 
-static struct symbol *
-language_alloc_type_symbol (enum language lang, struct type *type)
+struct type *
+language_arch_info::lookup_primitive_type
+  (gdb::function_view<bool (struct type *)> filter)
 {
-  struct symbol *symbol;
-  struct gdbarch *gdbarch;
-
-  gdb_assert (!TYPE_OBJFILE_OWNED (type));
-
-  gdbarch = TYPE_OWNER (type).gdbarch;
-  symbol = new (gdbarch_obstack (gdbarch)) struct symbol ();
-
-  symbol->name = TYPE_NAME (type);
-  symbol->language = lang;
-  symbol->owner.arch = gdbarch;
-  SYMBOL_OBJFILE_OWNED (symbol) = 0;
-  SYMBOL_TYPE (symbol) = type;
-  SYMBOL_DOMAIN (symbol) = VAR_DOMAIN;
-  SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF;
+  for (struct type_and_symbol &tas : primitive_types_and_symbols)
+    {
+      if (filter (tas.type ()))
+	return tas.type ();
+    }
 
-  return symbol;
+  return nullptr;
 }
 
-/* Initialize the primitive type symbols of language LD.
-   The primitive type vector must have already been initialized.  */
+/* See language.h.  */
 
-static void
-language_init_primitive_type_symbols (struct language_arch_info *lai,
-				      const struct language_defn *la,
-				      struct gdbarch *gdbarch)
+struct symbol *
+language_arch_info::lookup_primitive_type_as_symbol (const char *name,
+						     enum language lang)
 {
-  int n;
-
-  gdb_assert (lai->primitive_type_vector != NULL);
+  type_and_symbol *tas = lookup_primitive_type_and_symbol (name);
+  if (tas != nullptr)
+    return tas->symbol (lang);
+  return nullptr;
+}
+
+/* Helper for the language_lookup_primitive_type overloads to forward
+   to the corresponding language's lookup_primitive_type overload.  */
+
+template<typename T>
+static struct type *
+language_lookup_primitive_type_1 (const struct language_defn *la,
+				  struct gdbarch *gdbarch,
+				  T arg)
+{
+  struct language_gdbarch *ld =
+    (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
+  return ld->arch_info[la->la_language].lookup_primitive_type (arg);
+}
 
-  for (n = 0; lai->primitive_type_vector[n] != NULL; ++n)
-    continue;
+/* See language.h.  */
 
-  lai->primitive_type_symbols
-    = GDBARCH_OBSTACK_CALLOC (gdbarch, n + 1, struct symbol *);
+struct type *
+language_lookup_primitive_type (const struct language_defn *la,
+				struct gdbarch *gdbarch,
+				const char *name)
+{
+  return language_lookup_primitive_type_1 (la, gdbarch, name);
+}
 
-  for (n = 0; lai->primitive_type_vector[n] != NULL; ++n)
-    {
-      lai->primitive_type_symbols[n]
-	= language_alloc_type_symbol (la->la_language,
-				      lai->primitive_type_vector[n]);
-    }
+/* See language.h.  */
 
-  /* Note: The result of symbol lookup is normally a symbol *and* the block
-     it was found in.  Builtin types don't live in blocks.  We *could* give
-     them one, but there is no current need so to keep things simple symbol
-     lookup is extended to allow for BLOCK_FOUND to be NULL.  */
+struct type *
+language_lookup_primitive_type (const struct language_defn *la,
+				struct gdbarch *gdbarch,
+				gdb::function_view<bool (struct type *)> filter)
+{
+  return language_lookup_primitive_type_1 (la, gdbarch, filter);
 }
 
 /* See language.h.  */
@@ -1102,40 +1126,32 @@ language_lookup_primitive_type_as_symbol
   struct language_gdbarch *ld
     = (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
   struct language_arch_info *lai = &ld->arch_info[la->la_language];
-  struct type **typep;
-  struct symbol *sym;
 
   if (symbol_lookup_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "language_lookup_primitive_type_as_symbol"
-			  " (%s, %s, %s)",
-			  la->la_name, host_address_to_string (gdbarch), name);
-    }
-
-  typep = language_lookup_primitive_type_1 (lai, name);
-  if (typep == NULL)
-    {
-      if (symbol_lookup_debug)
-	fprintf_unfiltered (gdb_stdlog, " = NULL\n");
-      return NULL;
-    }
-
-  /* The set of symbols is lazily initialized.  */
-  if (lai->primitive_type_symbols == NULL)
-    language_init_primitive_type_symbols (lai, la, gdbarch);
+    fprintf_unfiltered (gdb_stdlog,
+			"language_lookup_primitive_type_as_symbol"
+			" (%s, %s, %s)",
+			la->name (), host_address_to_string (gdbarch), name);
 
-  sym = lai->primitive_type_symbols[typep - lai->primitive_type_vector];
+  struct symbol *sym
+    = lai->lookup_primitive_type_as_symbol (name, la->la_language);
 
   if (symbol_lookup_debug)
     fprintf_unfiltered (gdb_stdlog, " = %s\n", host_address_to_string (sym));
+
+  /* Note: The result of symbol lookup is normally a symbol *and* the block
+     it was found in.  Builtin types don't live in blocks.  We *could* give
+     them one, but there is no current need so to keep things simple symbol
+     lookup is extended to allow for BLOCK_FOUND to be NULL.  */
+
   return sym;
 }
 
 /* Initialize the language routines.  */
 
+void _initialize_language ();
 void
-_initialize_language (void)
+_initialize_language ()
 {
   static const char *const type_or_range_names[]
     = { "on", "off", "warn", "auto", NULL };
@@ -1148,17 +1164,19 @@ _initialize_language (void)
 
   /* GDB commands for language specific stuff.  */
 
-  add_prefix_cmd ("check", no_class, set_check,
-		  _("Set the status of the type/range checker."),
-		  &setchecklist, "set check ", 0, &setlist);
-  add_alias_cmd ("c", "check", no_class, 1, &setlist);
-  add_alias_cmd ("ch", "check", no_class, 1, &setlist);
-
-  add_prefix_cmd ("check", no_class, show_check,
-		  _("Show the status of the type/range checker."),
-		  &showchecklist, "show check ", 0, &showlist);
-  add_alias_cmd ("c", "check", no_class, 1, &showlist);
-  add_alias_cmd ("ch", "check", no_class, 1, &showlist);
+  cmd_list_element *set_check_cmd
+    = add_basic_prefix_cmd ("check", no_class,
+			    _("Set the status of the type/range checker."),
+			    &setchecklist, 0, &setlist);
+  add_alias_cmd ("c", set_check_cmd, no_class, 1, &setlist);
+  add_alias_cmd ("ch", set_check_cmd, no_class, 1, &setlist);
+
+  cmd_list_element *show_check_cmd
+    = add_show_prefix_cmd ("check", no_class,
+			 _("Show the status of the type/range checker."),
+			 &showchecklist, 0, &showlist);
+  add_alias_cmd ("c", show_check_cmd, no_class, 1, &showlist);
+  add_alias_cmd ("ch", show_check_cmd, no_class, 1, &showlist);
 
   add_setshow_enum_cmd ("range", class_support, type_or_range_names,
 			&range,
@@ -1177,6 +1195,11 @@ For Fortran the default is off; for othe
 			show_case_command,
 			&setlist, &showlist);
 
+  /* In order to call SET_LANGUAGE (below) we need to make sure that
+     CURRENT_LANGUAGE is not NULL.  So first set the language to unknown,
+     then we can change the language to 'auto'.  */
+  current_language = language_def (language_unknown);
+
   add_set_language_command ();
 
   language = "auto";
diff -a -u -r --new-file '--show-function-line=^[A-Za-z_]' /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/language.h ./gdb/language.h
--- /sourceware/snapshot-tmp/gdb/snapshot/branch-gdb/update-snapshot/old/gdb-9.1.90.20200307/gdb/language.h	2020-03-07 02:07:43.000000000 +0000
+++ ./gdb/language.h	2021-12-16 01:57:39.000000000 +0000
@@ -1,6 +1,6 @@
 /* Source-language-related definitions for GDB.
 
-   Copyright (C) 1991-2020 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
@@ -42,16 +42,6 @@ class innermost_block_tracker;
 
 #define MAX_FORTRAN_DIMS  7	/* Maximum number of F77 array dims.  */
 
-/* range_mode ==
-   range_mode_auto:   range_check set automatically to default of language.
-   range_mode_manual: range_check set manually by user.  */
-
-extern enum range_mode
-  {
-    range_mode_auto, range_mode_manual
-  }
-range_mode;
-
 /* range_check ==
    range_check_on:    Ranges are checked in GDB expressions, producing errors.
    range_check_warn:  Ranges are checked, producing warnings.
@@ -63,16 +53,6 @@ extern enum range_check
   }
 range_check;
 
-/* case_mode ==
-   case_mode_auto:   case_sensitivity set upon selection of scope.
-   case_mode_manual: case_sensitivity set only by user.  */
-
-extern enum case_mode
-  {
-    case_mode_auto, case_mode_manual
-  }
-case_mode;
-
 /* array_ordering ==
    array_row_major:     Arrays are in row major order.
    array_column_major:  Arrays are in column major order.  */
@@ -109,341 +89,556 @@ enum macro_expansion
 
 struct language_arch_info
 {
-  /* Its primitive types.  This is a vector ended by a NULL pointer.
-     These types can be specified by name in parsing types in
-     expressions, regardless of whether the program being debugged
-     actually defines such a type.  */
-  struct type **primitive_type_vector;
-
-  /* Symbol wrappers around primitive_type_vector, so that the symbol lookup
-     machinery can return them.  */
-  struct symbol **primitive_type_symbols;
+  /* A default constructor.  */
+  language_arch_info () = default;
+
+  DISABLE_COPY_AND_ASSIGN (language_arch_info);
+
+  /* Set the default boolean type to be TYPE.  If NAME is not nullptr then
+     before using TYPE a symbol called NAME will be looked up, and the type
+     of this symbol will be used instead.  Should only be called once when
+     performing setup for a particular language in combination with a
+     particular gdbarch.  */
+  void set_bool_type (struct type *type, const char *name = nullptr)
+  {
+    gdb_assert (m_bool_type_default == nullptr);
+    gdb_assert (m_bool_type_name == nullptr);
+    gdb_assert (type != nullptr);
+    m_bool_type_default = type;
+    m_bool_type_name = name;
+  }
+
+  /* Set the type to be used for characters within a string.  Should only
+     be called once when performing setup for a particular language in
+     combination with a particular gdbarch.  */
+  void set_string_char_type (struct type *type)
+  {
+    gdb_assert (m_string_char_type == nullptr);
+    gdb_assert (type != nullptr);
+    m_string_char_type = type;
+  }
+
+  /* Return the type for characters within a string.  */
+  struct type *string_char_type () const
+  { return m_string_char_type; }
+
+  /* Return the type to be used for booleans.  */
+  struct type *bool_type () const;
+
+  /* Add TYPE to the list of primitive types for this particular language,
+     with this OS/ABI combination.  */
+  void add_primitive_type (struct type *type)
+  {
+    gdb_assert (type != nullptr);
+    primitive_types_and_symbols.push_back (type_and_symbol (type));
+  }
+
+  /* Lookup a primitive type called NAME.  Will return nullptr if no
+     matching type is found.  */
+  struct type *lookup_primitive_type (const char *name);
+
+  /* Lookup a primitive type for which FILTER returns true.  Will return
+     nullptr if no matching type is found.  */
+  struct type *lookup_primitive_type
+    (gdb::function_view<bool (struct type *)> filter);
+
+  /* Lookup a primitive type called NAME and return the type as a symbol.
+     LANG is the language for which type is being looked up.  */
+  struct symbol *lookup_primitive_type_as_symbol (const char *name,
+						  enum language lang);
+private:
+
+  /* A structure storing a type and a corresponding symbol.  The type is
+     defined at construction time, while the symbol is lazily created only
+     when asked for, but is then cached for future use.  */
+  struct type_and_symbol
+  {
+    /* Constructor.  */
+    explicit type_and_symbol (struct type *type)
+      : m_type (type)
+    { /* Nothing.  */ }
+
+    /* Default move constructor.  */
+    type_and_symbol (type_and_symbol&&) = default;
+
+    DISABLE_COPY_AND_ASSIGN (type_and_symbol);
+
+    /* Return the type from this object.  */
+    struct type *type () const
+    { return m_type; }
+
+    /* Create and return a symbol wrapping M_TYPE from this object.  */
+    struct symbol *symbol (enum language lang)
+    {
+      if (m_symbol == nullptr)
+	m_symbol = alloc_type_symbol (lang, m_type);
+      return m_symbol;
+    }
+
+  private:
+    /* The type primitive type.  */
+    struct type *m_type = nullptr;
+
+    /* A symbol wrapping M_TYPE, only created when first asked for.  */
+    struct symbol *m_symbol = nullptr;
+
+    /* Helper function for type lookup as a symbol.  Create the symbol
+       corresponding to type TYPE in language LANG.  */
+    static struct symbol *alloc_type_symbol (enum language lang,
+					     struct type *type);
+  };
+
+  /* Lookup a type_and_symbol entry from the primitive_types_and_symbols
+     vector for a type matching NAME.  Return a pointer to the
+     type_and_symbol object from the vector.  This will return nullptr if
+     there is no type matching NAME found.  */
+  type_and_symbol *lookup_primitive_type_and_symbol (const char *name);
+
+  /* Vector of the primitive types added through add_primitive_type.  These
+     types can be specified by name in parsing types in expressions,
+     regardless of whether the program being debugged actually defines such
+     a type.
+
+     Within the vector each type is paired with a lazily created symbol,
+     which can be fetched by the symbol lookup machinery, should they be
+     needed.  */
+  std::vector<type_and_symbol> primitive_types_and_symbols;
 
   /* Type of elements of strings.  */
-  struct type *string_char_type;
+  struct type *m_string_char_type = nullptr;
 
   /* Symbol name of type to use as boolean type, if defined.  */
-  const char *bool_type_symbol;
+  const char *m_bool_type_name = nullptr;
+
   /* Otherwise, this is the default boolean builtin type.  */
-  struct type *bool_type_default;
+  struct type *m_bool_type_default = nullptr;
 };
 
-/* Structure tying together assorted information about a language.  */
+/* In a language (particularly C++) a function argument of an aggregate
+   type (i.e.  class/struct/union) may be implicitly passed by reference
+   even though it is declared a call-by-value argument in the source.
+   The struct below puts together necessary information for GDB to be
+   able to detect and carry out pass-by-reference semantics for a
+   particular type.  This type is referred as T in the inlined comments
+   below.
+
+   The default values of the fields are chosen to give correct semantics
+   for primitive types and for simple aggregate types, such as
+
+   class T {
+     int x;
+   };  */
+
+struct language_pass_by_ref_info
+{
+  /* True if an argument of type T can be passed to a function by value
+     (i.e.  not through an implicit reference).  False, otherwise.  */
+  bool trivially_copyable = true;
+
+  /* True if a copy of a value of type T can be initialized by
+     memcpy'ing the value bit-by-bit.  False, otherwise.
+     E.g.  If T has a user-defined copy ctor, this should be false.  */
+  bool trivially_copy_constructible = true;
+
+  /* True if a value of type T can be destructed simply by reclaiming
+     the memory area occupied by the value.  False, otherwise.
+     E.g.  If T has a user-defined destructor, this should be false.  */
+  bool trivially_destructible = true;
+
+  /* True if it is allowed to create a copy of a value of type T.
+     False, otherwise.
+     E.g.  If T has a deleted copy ctor, this should be false.  */
+  bool copy_constructible = true;
+
+  /* True if a value of type T can be destructed.  False, otherwise.
+     E.g.  If T has a deleted destructor, this should be false.  */
+  bool destructible = true;
+};
+
+/* Splitting strings into words.  */
+extern const char *default_word_break_characters (void);
+
+/* Base class from which all other language classes derive.  */
 
 struct language_defn
+{
+  language_defn (enum language lang)
+    : la_language (lang)
+  {
+    /* We should only ever create one instance of each language.  */
+    gdb_assert (languages[lang] == nullptr);
+    languages[lang] = this;
+  }
+
+  /* Which language this is.  */
+
+  const enum language la_language;
+
+  /* Name of the language.  */
+
+  virtual const char *name () const = 0;
+
+  /* Natural or official name of the language.  */
+
+  virtual const char *natural_name () const = 0;
+
+  /* Return a vector of file extensions for this language.  The extension
+     must include the ".", like ".c".  If this language doesn't need to
+     provide any filename extensions, this may be an empty vector (which is
+     the default).  */
+
+  virtual const std::vector<const char *> &filename_extensions () const
+  {
+    static const std::vector<const char *> no_extensions;
+    return no_extensions;
+  }
+
+  /* Print the index of an element of an array.  This default
+     implementation prints using C99 syntax.  */
+
+  virtual void print_array_index (struct type *index_type,
+				  LONGEST index_value,
+				  struct ui_file *stream,
+				  const value_print_options *options) const;
+
+  /* Given a symbol VAR, the corresponding block VAR_BLOCK (if any) and a
+     stack frame id FRAME, read the value of the variable and return (pointer
+     to a) struct value containing the value.
+
+     VAR_BLOCK is needed if there's a possibility for VAR to be outside
+     FRAME.  This is what happens if FRAME correspond to a nested function
+     and VAR is defined in the outer function.  If callers know that VAR is
+     located in FRAME or is global/static, NULL can be passed as VAR_BLOCK.
+
+     Throw an error if the variable cannot be found.  */
+
+  virtual struct value *read_var_value (struct symbol *var,
+					const struct block *var_block,
+					struct frame_info *frame) const;
+
+  /* Return information about whether TYPE should be passed
+     (and returned) by reference at the language level.  The default
+     implementation returns a LANGUAGE_PASS_BY_REF_INFO initialised in its
+     default state.  */
+
+  virtual struct language_pass_by_ref_info pass_by_reference_info
+	(struct type *type) const
+  {
+    return {};
+  }
+
+  /* The per-architecture (OS/ABI) language information.  */
+
+  virtual void language_arch_info (struct gdbarch *,
+				   struct language_arch_info *) const = 0;
+
+  /* Find the definition of the type with the given name.  */
+
+  virtual struct type *lookup_transparent_type (const char *name) const
+  {
+    return basic_lookup_transparent_type (name);
+  }
+
+  /* Find all symbols in the current program space matching NAME in
+     DOMAIN, according to this language's rules.
+
+     The search is done in BLOCK only.
+     The caller is responsible for iterating up through superblocks
+     if desired.
+
+     For each one, call CALLBACK with the symbol.  If CALLBACK
+     returns false, the iteration ends at that point.
+
+     This field may not be NULL.  If the language does not need any
+     special processing here, 'iterate_over_symbols' should be
+     used as the definition.  */
+  virtual bool iterate_over_symbols
+	(const struct block *block, const lookup_name_info &name,
+	 domain_enum domain,
+	 gdb::function_view<symbol_found_callback_ftype> callback) const
   {
-    /* Name of the language.  */
+    return ::iterate_over_symbols (block, name, domain, callback);
+  }
 
-    const char *la_name;
+  /* Return a pointer to the function that should be used to match a
+     symbol name against LOOKUP_NAME, according to this language's
+     rules.  The matching algorithm depends on LOOKUP_NAME.  For
+     example, on Ada, the matching algorithm depends on the symbol
+     name (wild/full/verbatim matching), and on whether we're doing
+     a normal lookup or a completion match lookup.
+
+     As Ada wants to capture symbol matching for all languages in some
+     cases, then this method is a non-overridable interface.  Languages
+     should override GET_SYMBOL_NAME_MATCHER_INNER if they need to.  */
+
+  symbol_name_matcher_ftype *get_symbol_name_matcher
+	(const lookup_name_info &lookup_name) const;
+
+  /* If this language allows compilation from the gdb command line,
+     then this method will return an instance of struct gcc_context
+     appropriate to the language.  If compilation for this language is
+     generally supported, but something goes wrong then an exception
+     is thrown.  If compilation is not supported for this language
+     then this method returns NULL.  */
+
+  virtual std::unique_ptr<compile_instance> get_compile_instance () const;
+
+  /* This method must be overridden if 'get_compile_instance' is
+     overridden.
+
+     This takes the user-supplied text and returns a new bit of code
+     to compile.
+
+     INST is the compiler instance being used.
+     INPUT is the user's input text.
+     GDBARCH is the architecture to use.
+     EXPR_BLOCK is the block in which the expression is being
+     parsed.
+     EXPR_PC is the PC at which the expression is being parsed.  */
 
-    /* Natural or official name of the language.  */
+  virtual std::string compute_program (compile_instance *inst,
+				       const char *input,
+				       struct gdbarch *gdbarch,
+				       const struct block *expr_block,
+				       CORE_ADDR expr_pc) const
+  {
+    gdb_assert_not_reached ("language_defn::compute_program");
+  }
 
-    const char *la_natural_name;
+  /* Hash the given symbol search name.  */
+  virtual unsigned int search_name_hash (const char *name) const;
 
-    /* its symtab language-enum (defs.h).  */
+  /* Demangle a symbol according to this language's rules.  Unlike
+     la_demangle, this does not take any options.
 
-    enum language la_language;
+     *DEMANGLED will be set by this function.
 
-    /* Default range checking.  */
+     If this function returns false, then *DEMANGLED must always be set
+     to NULL.
 
-    enum range_check la_range_check;
+     If this function returns true, the implementation may set this to
+     a xmalloc'd string holding the demangled form.  However, it is
+     not required to.  The string, if any, is owned by the caller.
 
-    /* Default case sensitivity.  */
-    enum case_sensitivity la_case_sensitivity;
+     The resulting string should be of the form that will be
+     installed into a symbol.  */
+  virtual bool sniff_from_mangled_name (const char *mangled,
+					char **demangled) const
+  {
+    *demangled = nullptr;
+    return false;
+  }
 
-    /* Multi-dimensional array ordering.  */
-    enum array_ordering la_array_ordering;
+  /* Return demangled language symbol version of MANGLED, or NULL.  */
+  virtual char *demangle_symbol (const char *mangled, int options) const
+  {
+    return nullptr;
+  }
 
-    /* Style of macro expansion, if any, supported by this language.  */
-    enum macro_expansion la_macro_expansion;
+  /* Print TYPE to STREAM using syntax appropriate for this language.
+     LEVEL is the depth to indent lines by.  VARSTRING, if not NULL or the
+     empty string, is the name of a variable and TYPE should be printed in
+     the form of a declaration of a variable named VARSTRING.  */
+
+  virtual void print_type (struct type *type, const char *varstring,
+			   struct ui_file *stream, int show, int level,
+			   const struct type_print_options *flags) const = 0;
+
+  /* PC is possibly an unknown languages trampoline.
+     If that PC falls in a trampoline belonging to this language, return
+     the address of the first pc in the real function, or 0 if it isn't a
+     language tramp for this language.  */
+  virtual CORE_ADDR skip_trampoline (struct frame_info *fi, CORE_ADDR pc) const
+  {
+    return (CORE_ADDR) 0;
+  }
 
-    /* A NULL-terminated array of file extensions for this language.
-       The extension must include the ".", like ".c".  If this
-       language doesn't need to provide any filename extensions, this
-       may be NULL.  */
+  /* Return class name of a mangled method name or NULL.  */
+  virtual char *class_name_from_physname (const char *physname) const
+  {
+    return nullptr;
+  }
+
+  /* The list of characters forming word boundaries.  */
+  virtual const char *word_break_characters (void) const
+  {
+    return default_word_break_characters ();
+  }
+
+  /* Add to the completion tracker all symbols which are possible
+     completions for TEXT.  WORD is the entire command on which the
+     completion is being made.  If CODE is TYPE_CODE_UNDEF, then all
+     symbols should be examined; otherwise, only STRUCT_DOMAIN symbols
+     whose type has a code of CODE should be matched.  */
+
+  virtual 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
+  {
+    return default_collect_symbol_completion_matches_break_on
+      (tracker, mode, name_match_type, text, word, "", code);
+  }
 
-    const char *const *la_filename_extensions;
+  /* This is a function that lookup_symbol will call when it gets to
+     the part of symbol lookup where C looks up static and global
+     variables.  This default implements the basic C lookup rules.  */
 
-    /* Definitions related to expression printing, prefixifying, and
-       dumping.  */
+  virtual struct block_symbol lookup_symbol_nonlocal
+	(const char *name,
+	 const struct block *block,
+	 const domain_enum domain) const;
 
-    const struct exp_descriptor *la_exp_desc;
+  /* Return an expression that can be used for a location
+     watchpoint.  TYPE is a pointer type that points to the memory
+     to watch, and ADDR is the address of the watched memory.  */
+  virtual gdb::unique_xmalloc_ptr<char> watch_location_expression
+	(struct type *type, CORE_ADDR addr) const;
 
-    /* Parser function.  */
+  /* List of all known languages.  */
+  static const struct language_defn *languages[nr_languages];
 
-    int (*la_parser) (struct parser_state *);
+  /* Print a top-level value using syntax appropriate for this language.  */
+  virtual void value_print (struct value *val, struct ui_file *stream,
+			    const struct value_print_options *options) const;
 
-    /* Given an expression *EXPP created by prefixifying the result of
-       la_parser, perform any remaining processing necessary to complete
-       its translation.  *EXPP may change; la_post_parser is responsible 
-       for releasing its previous contents, if necessary.  If 
-       VOID_CONTEXT_P, then no value is expected from the expression.
-       If COMPLETING is non-zero, then the expression has been parsed
-       for completion, not evaluation.  */
+  /* Print a value using syntax appropriate for this language.  RECURSE is
+     the recursion depth.  It is zero-based.  */
+  virtual void value_print_inner
+	(struct value *val, struct ui_file *stream, int recurse,
+	 const struct value_print_options *options) const;
 
-    void (*la_post_parser) (expression_up *expp, int void_context_p,
-			    int completing, innermost_block_tracker *tracker);
+  /* Parser function.  */
 
-    void (*la_printchar) (int ch, struct type *chtype,
-			  struct ui_file * stream);
+  virtual int parser (struct parser_state *ps) const;
 
-    void (*la_printstr) (struct ui_file * stream, struct type *elttype,
+  /* Print the character CH (of type CHTYPE) on STREAM as part of the
+     contents of a literal string whose delimiter is QUOTER.  */
+
+  virtual void emitchar (int ch, struct type *chtype,
+			 struct ui_file *stream, int quoter) const;
+
+  virtual void printchar (int ch, struct type *chtype,
+			  struct ui_file * stream) const;
+
+/* Print the character string STRING, printing at most LENGTH characters.
+   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 characters, or if FORCE_ELLIPSES.  */
+
+  virtual 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 *);
+			 const struct value_print_options *options) const;
 
-    void (*la_emitchar) (int ch, struct type *chtype,
-			 struct ui_file * stream, int quoter);
 
-    /* Print a type using syntax appropriate for this language.  */
+  /* Print a typedef using syntax appropriate for this language.
+     TYPE is the underlying type.  NEW_SYMBOL is the symbol naming
+     the type.  STREAM is the output stream on which to print.  */
 
-    void (*la_print_type) (struct type *, const char *, struct ui_file *, int,
-			   int, const struct type_print_options *);
+  virtual void print_typedef (struct type *type, struct symbol *new_symbol,
+			      struct ui_file *stream) const;
 
-    /* Print a typedef using syntax appropriate for this language.
-       TYPE is the underlying type.  NEW_SYMBOL is the symbol naming
-       the type.  STREAM is the output stream on which to print.  */
+  /* Return true if TYPE is a string type. 